mirror of
https://github.com/python/cpython.git
synced 2025-08-30 21:48:47 +00:00
gh-129928: Rework sqlite3 error helpers (#129929)
Add a helper for raising DB-API compatible exceptions based on the result code of SQLite C APIs. Some APIs do not store the error indicator on the database pointer, so we need to be able to deduce the DB-API compatible exception directly from the error code. - rename _pysqlite_seterror() as set_error_from_db() - introduce set_error_from_code()
This commit is contained in:
parent
3a2e7aacf6
commit
3b366a4a4b
6 changed files with 41 additions and 30 deletions
|
@ -118,18 +118,31 @@ exit:
|
|||
Py_XDECREF(exc);
|
||||
}
|
||||
|
||||
void
|
||||
set_error_from_code(pysqlite_state *state, int code)
|
||||
{
|
||||
PyObject *exc_class = get_exception_class(state, code);
|
||||
if (exc_class == NULL) {
|
||||
// No new exception need be raised.
|
||||
return;
|
||||
}
|
||||
|
||||
const char *errmsg = sqlite3_errstr(code);
|
||||
assert(errmsg != NULL);
|
||||
raise_exception(exc_class, code, errmsg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the SQLite error code and sets the appropriate DB-API exception.
|
||||
* Returns the error code (0 means no error occurred).
|
||||
*/
|
||||
int
|
||||
_pysqlite_seterror(pysqlite_state *state, sqlite3 *db)
|
||||
void
|
||||
set_error_from_db(pysqlite_state *state, sqlite3 *db)
|
||||
{
|
||||
int errorcode = sqlite3_errcode(db);
|
||||
PyObject *exc_class = get_exception_class(state, errorcode);
|
||||
if (exc_class == NULL) {
|
||||
// No new exception need be raised; just pass the error code
|
||||
return errorcode;
|
||||
// No new exception need be raised.
|
||||
return;
|
||||
}
|
||||
|
||||
/* Create and set the exception. */
|
||||
|
@ -137,7 +150,6 @@ _pysqlite_seterror(pysqlite_state *state, sqlite3 *db)
|
|||
// sqlite3_errmsg() always returns an UTF-8 encoded message
|
||||
const char *errmsg = sqlite3_errmsg(db);
|
||||
raise_exception(exc_class, extended_errcode, errmsg);
|
||||
return extended_errcode;
|
||||
}
|
||||
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue