Changeset: c6a22044642f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c6a22044642f
Added Files:
        sql/test/2026/Tests/autocommit-after-failed-transaction.SQL.py
Modified Files:
        sql/test/2026/Tests/All
Branch: default
Log Message:

Add test for autocommit notifications after failed transaction

If autocommit is off because of a transaction and
the COMMIT fails, the server should notify the client
(in this case, pymonetdb) that autocommit has been re-enabled.

See #7988


diffs (51 lines):

diff --git a/sql/test/2026/Tests/All b/sql/test/2026/Tests/All
--- a/sql/test/2026/Tests/All
+++ b/sql/test/2026/Tests/All
@@ -1,1 +1,2 @@
 prepared-stmt-bat-leak
+autocommit-after-failed-transaction
diff --git a/sql/test/2026/Tests/autocommit-after-failed-transaction.SQL.py 
b/sql/test/2026/Tests/autocommit-after-failed-transaction.SQL.py
new file mode 100644
--- /dev/null
+++ b/sql/test/2026/Tests/autocommit-after-failed-transaction.SQL.py
@@ -0,0 +1,40 @@
+from os import environ
+import sys
+from MonetDBtesting import tpymonetdb as pymonetdb
+
+
+conn = pymonetdb.connect(database=environ['TSTDB'], port=environ['MAPIPORT'], 
autocommit=True)
+cursor = conn.cursor()
+
+def execute(sqlscript, expected_autocommit, expected_exception=None):
+    print(f'#\n# Execute: {sqlscript}', file=sys.stderr)
+    try:
+        cursor.execute(sqlscript)
+        if expected_exception is not None:
+            print(f"Expected exception containing: {expected_exception}", 
file=sys.stderr)
+            sys.exit(1)
+    except pymonetdb.Error as e:
+        if expected_exception is not None and expected_exception in str(e):
+            print(f"# -> failed as expected: {str(e).strip()}", 
file=sys.stderr)
+        elif isinstance(e, pymonetdb.Error):
+            print(f"# -> {str(e).strip()}", file=sys.stderr)
+            sys.exit(1)
+        else:
+            raise
+    if conn.autocommit == expected_autocommit:
+        print(f"# -> conn.autocommit is {conn.autocommit!r}, as expected", 
file=sys.stderr)
+    else:
+        print(f"conn.autocommit is {conn.autocommit!r}, expected 
{expected_autocommit!r}", file=sys.stderr)
+        sys.exit(1)
+
+
+execute("SELECT 42", True)
+
+# demonstrate happy path
+execute("START TRANSACTION", False)
+execute("COMMIT", True)
+
+execute("START TRANSACTION", False)
+execute("SELECT SELECT FROM SELECT WHERE SELECT = SELECT", False, 
expected_exception='syntax error')
+execute("COMMIT", True, expected_exception='will ROLLBACK')
+
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to