[Python-checkins] cpython: Issue #18519: Fix test_sqlite on old versions of libsqlite3

victor.stinner python-checkins at python.org
Fri Aug 2 01:48:33 CEST 2013


http://hg.python.org/cpython/rev/c73f4dced6aa
changeset: 84965:c73f4dced6aa
user: Victor Stinner <victor.stinner at gmail.com>
date: Fri Aug 02 01:48:10 2013 +0200
summary:
 Issue #18519: Fix test_sqlite on old versions of libsqlite3
With old SQLite versions, _sqlite3_result_error() sets a new Python exception,
so don't restore the previous exception.
files:
 Modules/_sqlite/connection.c | 15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -698,6 +698,7 @@
 _Py_IDENTIFIER(finalize);
 int ok;
 PyObject *exception, *value, *tb;
+ int restore;
 
 #ifdef WITH_THREAD
 PyGILState_STATE threadstate;
@@ -715,6 +716,7 @@
 
 /* Keep the exception (if any) of the last call to step() */
 PyErr_Fetch(&exception, &value, &tb);
+ restore = 1;
 
 function_result = _PyObject_CallMethodId(*aggregate_instance, &PyId_finalize, "");
 
@@ -732,11 +734,18 @@
 PyErr_Clear();
 }
 _sqlite3_result_error(context, "user-defined aggregate's 'finalize' method raised error", -1);
+#if SQLITE_VERSION_NUMBER < 3003003
+ /* with old SQLite versions, _sqlite3_result_error() sets a new Python
+ exception, so don't restore the previous exception */
+ restore = 0;
+#endif
 }
 
- /* Restore the exception (if any) of the last call to step(),
- but clear also the current exception if finalize() failed */
- PyErr_Restore(exception, value, tb);
+ if (restore) {
+ /* Restore the exception (if any) of the last call to step(),
+ but clear also the current exception if finalize() failed */
+ PyErr_Restore(exception, value, tb);
+ }
 
 error:
 #ifdef WITH_THREAD
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /