From dc60a65c381d5442f0fc35fc7f083cf71fd5c2bf Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Fri, 28 Mar 2025 12:18:15 +0530 Subject: [PATCH] fix(sqlite): don't allow starting nested transactions Signed-off-by: Akhil Narang --- frappe/database/sqlite/database.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/frappe/database/sqlite/database.py b/frappe/database/sqlite/database.py index 7718752825..62107d48fb 100644 --- a/frappe/database/sqlite/database.py +++ b/frappe/database/sqlite/database.py @@ -93,6 +93,10 @@ class SQLiteExceptionUtil: def is_interface_error(e: sqlite3.Error): return isinstance(e, sqlite3.InterfaceError) + @staticmethod + def is_nested_transaction_error(e: sqlite3.Error): + return "cannot start a transaction within a transaction" in str(e) + class SQLiteDatabase(SQLiteExceptionUtil, Database): REGEX_CHARACTER = "regexp" @@ -452,7 +456,11 @@ class SQLiteDatabase(SQLiteExceptionUtil, Database): self._cursor = self._conn.cursor() self.read_only = False - self.sql("BEGIN") + try: + self.sql("BEGIN") + except sqlite3.OperationalError as e: + if not self.is_nested_transaction_error(e): + raise e def commit(self): """Commit current transaction. Calls SQL `COMMIT`."""