summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLars Ingebrigtsen <larsi@gnus.org>2021-12-13 05:38:29 +0100
committerLars Ingebrigtsen <larsi@gnus.org>2021-12-13 05:38:29 +0100
commitc86b86f9a9ee3c42aed9ede794e8c3e19ce35ec5 (patch)
treeede100840c61fee9116a117f663f01a6586ad793 /src
parent2f6601054940e698184f4c9c60a47c16e5baa880 (diff)
downloademacs-c86b86f9a9ee3c42aed9ede794e8c3e19ce35ec5.tar.gz
Introduce a new sqlite-locked-error
* src/sqlite.c (Fsqlite_execute): Use it. (syms_of_sqlite): Introduce a new error for locked databases so that we can catch that condition on higher levels.
Diffstat (limited to 'src')
-rw-r--r--src/sqlite.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/sqlite.c b/src/sqlite.c
index d92dcf723c9..38e939cd84a 100644
--- a/src/sqlite.c
+++ b/src/sqlite.c
@@ -400,7 +400,9 @@ Value is the number of affected rows. */)
exit:
if (errmsg != NULL)
- xsignal1 (Qerror, build_string (errmsg));
+ xsignal1 (ret == SQLITE_LOCKED || ret == SQLITE_BUSY?
+ Qsqlite_locked_error: Qerror,
+ build_string (errmsg));
return retval;
}
@@ -698,8 +700,15 @@ syms_of_sqlite (void)
DEFSYM (Qfull, "full");
#endif
defsubr (&Ssqlitep);
- DEFSYM (Qsqlitep, "sqlitep");
defsubr (&Ssqlite_available_p);
+
+ DEFSYM (Qsqlite_locked_error, "sqlite-locked-error");
+ Fput (Qsqlite_locked_error, Qerror_conditions,
+ Fpurecopy (list2 (Qsqlite_locked_error, Qerror)));
+ Fput (Qsqlite_locked_error, Qerror_message,
+ build_pure_c_string ("Database locked"));
+
+ DEFSYM (Qsqlitep, "sqlitep");
DEFSYM (Qfalse, "false");
DEFSYM (Qsqlite, "sqlite");
DEFSYM (Qsqlite3, "sqlite3");