From c86b86f9a9ee3c42aed9ede794e8c3e19ce35ec5 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Mon, 13 Dec 2021 05:38:29 +0100 Subject: [PATCH] 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. --- src/sqlite.c | 13 +++++++++++-- 1 file 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"); -- 2.39.5