Skip to content

Commit 006657e

Browse files
author
Kareem Zidane
committedApr 14, 2021
remove BEGIN and COMMIT
1 parent 944934f commit 006657e

File tree

1 file changed

+18
-28
lines changed

1 file changed

+18
-28
lines changed
 

‎src/cs50/sql.py

+18-28
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,31 @@ def __init__(self, url, **engine_kwargs):
2020
dialect = self._session.get_bind().dialect
2121
self._is_postgres = dialect.name in {"postgres", "postgresql"}
2222
self._sanitize_statement = statement_factory(dialect)
23-
self._autocommit = False
23+
self._outside_transaction = True
2424

2525
def execute(self, sql, *args, **kwargs):
2626
"""Execute a SQL statement."""
2727
statement = self._sanitize_statement(sql, *args, **kwargs)
28-
if statement.is_transaction_start():
29-
self._autocommit = False
30-
31-
if self._autocommit:
32-
self._session.execute("BEGIN")
28+
try:
29+
with raise_errors_for_warnings():
30+
result = self._session.execute(statement)
31+
except sqlalchemy.exc.IntegrityError as exc:
32+
_logger.debug(termcolor.colored(str(statement), "yellow"))
33+
if self._outside_transaction:
34+
self._session.remove()
35+
raise ValueError(exc.orig) from None
36+
except (sqlalchemy.exc.OperationalError, sqlalchemy.exc.ProgrammingError) as exc:
37+
self._session.remove()
38+
_logger.debug(termcolor.colored(statement, "red"))
39+
raise RuntimeError(exc.orig) from None
3340

34-
result = self._execute(statement)
41+
if statement.is_transaction_start():
42+
self._outside_transaction = False
3543

36-
if self._autocommit:
37-
self._session.execute("COMMIT")
44+
_logger.debug(termcolor.colored(str(statement), "green"))
3845

3946
if statement.is_transaction_end():
40-
self._autocommit = True
47+
self._outside_transaction = True
4148

4249
if statement.is_select():
4350
ret = fetch_select_result(result)
@@ -48,28 +55,11 @@ def execute(self, sql, *args, **kwargs):
4855
else:
4956
ret = True
5057

51-
if self._autocommit:
58+
if self._outside_transaction:
5259
self._session.remove()
5360

5461
return ret
5562

56-
def _execute(self, statement):
57-
with raise_errors_for_warnings():
58-
try:
59-
result = self._session.execute(statement)
60-
except sqlalchemy.exc.IntegrityError as exc:
61-
_logger.debug(termcolor.colored(str(statement), "yellow"))
62-
if self._autocommit:
63-
self._session.remove()
64-
raise ValueError(exc.orig) from None
65-
except (sqlalchemy.exc.OperationalError, sqlalchemy.exc.ProgrammingError) as exc:
66-
self._session.remove()
67-
_logger.debug(termcolor.colored(statement, "red"))
68-
raise RuntimeError(exc.orig) from None
69-
70-
_logger.debug(termcolor.colored(str(statement), "green"))
71-
return result
72-
7363
def _last_row_id_or_none(self, result):
7464
if self._is_postgres:
7565
return self._get_last_val()

0 commit comments

Comments
 (0)
Please sign in to comment.