[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master b5dc0513d5 2/2: Make Fsqlite_select error data better
From: |
Lars Ingebrigtsen |
Subject: |
master b5dc0513d5 2/2: Make Fsqlite_select error data better |
Date: |
Sun, 9 Oct 2022 10:17:35 -0400 (EDT) |
branch: master
commit b5dc0513d53cf0e520c8e9c4ca197cb7ccdf2b23
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>
Make Fsqlite_select error data better
* src/sqlite.c (Fsqlite_select): Add more the more specific error
text to the error data (bug#58363).
---
src/sqlite.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/sqlite.c b/src/sqlite.c
index a46acf8523..ababa73b99 100644
--- a/src/sqlite.c
+++ b/src/sqlite.c
@@ -521,9 +521,8 @@ which means that we return a set object that can be queried
with
xsignal1 (Qerror, build_string ("VALUES must be a list or a vector"));
sqlite3 *sdb = XSQLITE (db)->db;
- Lisp_Object retval = Qnil;
- const char *errmsg = NULL;
- Lisp_Object encoded = encode_string (query);
+ Lisp_Object retval = Qnil, errmsg = Qnil,
+ encoded = encode_string (query);
sqlite3_stmt *stmt = NULL;
int ret = sqlite3_prepare_v2 (sdb, SSDATA (encoded), SBYTES (encoded),
@@ -532,7 +531,12 @@ which means that we return a set object that can be
queried with
{
if (stmt)
sqlite3_finalize (stmt);
- errmsg = sqlite3_errstr (ret);
+ errmsg = build_string (sqlite3_errstr (ret));
+ /* More details about what went wrong. */
+ const char *sql_error = sqlite3_errmsg (sdb);
+ if (sql_error)
+ errmsg = CALLN (Fformat, build_string ("%s (%s)"),
+ errmsg, build_string (sql_error));
goto exit;
}
@@ -543,7 +547,7 @@ which means that we return a set object that can be queried
with
if (err != NULL)
{
sqlite3_finalize (stmt);
- errmsg = err;
+ errmsg = build_string (err);
goto exit;
}
}
@@ -567,8 +571,8 @@ which means that we return a set object that can be queried
with
sqlite3_finalize (stmt);
exit:
- if (errmsg != NULL)
- xsignal1 (Qerror, build_string (errmsg));
+ if (! NILP (errmsg))
+ xsignal1 (Qerror, errmsg);
return retval;
}