Imported Upstream version 2.3.1 upstream/2.3.1
authorJoel Rosdahl <joel@debian.org>
Mon, 11 Jan 2010 20:37:34 +0000 (21:37 +0100)
committerJoel Rosdahl <joel@debian.org>
Mon, 11 Jan 2010 20:37:34 +0000 (21:37 +0100)
PKG-INFO
pysqlite2/test/hooks.py
pysqlite2/test/userfunctions.py
src/connection.c
src/module.c
src/module.h

index 1182817..8548f4e 100644 (file)
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: pysqlite
-Version: 2.3.0
+Version: 2.3.1
 Summary: DB-API 2.0 interface for SQLite 3.x
 Home-page: http://pysqlite.org/
 Author: Gerhard Haering
index 7dd61c6..f205b42 100644 (file)
@@ -48,6 +48,8 @@ class CollationTests(unittest.TestCase):
             pass
 
     def CheckCollationIsUsed(self):
+        if sqlite.version_info < (3, 2, 1):  # old SQLite versions crash on this test
+            return
         def mycoll(x, y):
             # reverse order
             return -cmp(x, y)
index 49f27de..8d6bc39 100644 (file)
@@ -365,7 +365,6 @@ def authorizer_cb(action, arg1, arg2, dbname, source):
 
 class AuthorizerTests(unittest.TestCase):
     def setUp(self):
-        sqlite.enable_callback_tracebacks(1)
         self.con = sqlite.connect(":memory:")
         self.con.executescript("""
             create table t1 (c1, c2);
@@ -403,7 +402,7 @@ class AuthorizerTests(unittest.TestCase):
 def suite():
     function_suite = unittest.makeSuite(FunctionTests, "Check")
     aggregate_suite = unittest.makeSuite(AggregateTests, "Check")
-    authorizer_suite = unittest.makeSuite(AuthorizerTests, "Check") 
+    authorizer_suite = unittest.makeSuite(AuthorizerTests, "Check")
     return unittest.TestSuite((function_suite, aggregate_suite, authorizer_suite))
 
 def test():
index bf74710..703af15 100644 (file)
 
 static int connection_set_isolation_level(Connection* self, PyObject* isolation_level);
 
+
+void _sqlite3_result_error(sqlite3_context* ctx, const char* errmsg, int len)
+{
+    /* in older SQLite versions, calling sqlite3_result_error in callbacks
+     * triggers a bug in SQLite that leads either to irritating results or
+     * segfaults, depending on the SQLite version */
+#if SQLITE_VERSION_NUMBER >= 3003003
+    sqlite3_result_error(ctx, errmsg, len);
+#else
+    PyErr_SetString(OperationalError, errmsg);
+#endif
+}
+
 int connection_init(Connection* self, PyObject* args, PyObject* kwargs)
 {
     static char *kwlist[] = {"database", "timeout", "detect_types", "isolation_level", "check_same_thread", "factory", "cached_statements", NULL, NULL};
@@ -526,7 +539,7 @@ void _func_callback(sqlite3_context* context, int argc, sqlite3_value** argv)
         } else {
             PyErr_Clear();
         }
-        sqlite3_result_error(context, "user-defined function raised exception", -1);
+        _sqlite3_result_error(context, "user-defined function raised exception", -1);
     }
 
     PyGILState_Release(threadstate);
@@ -558,7 +571,7 @@ static void _step_callback(sqlite3_context *context, int argc, sqlite3_value** p
             } else {
                 PyErr_Clear();
             }
-            sqlite3_result_error(context, "user-defined aggregate's '__init__' method raised error", -1);
+            _sqlite3_result_error(context, "user-defined aggregate's '__init__' method raised error", -1);
             goto error;
         }
     }
@@ -582,7 +595,7 @@ static void _step_callback(sqlite3_context *context, int argc, sqlite3_value** p
         } else {
             PyErr_Clear();
         }
-        sqlite3_result_error(context, "user-defined aggregate's 'step' method raised error", -1);
+        _sqlite3_result_error(context, "user-defined aggregate's 'step' method raised error", -1);
     }
 
 error:
@@ -619,7 +632,7 @@ void _final_callback(sqlite3_context* context)
         } else {
             PyErr_Clear();
         }
-        sqlite3_result_error(context, "user-defined aggregate's 'finalize' method raised error", -1);
+        _sqlite3_result_error(context, "user-defined aggregate's 'finalize' method raised error", -1);
     } else {
         _set_result(context, function_result);
     }
@@ -651,7 +664,7 @@ void _drop_unused_statement_references(Connection* self)
 
     for (i = 0; i < PyList_Size(self->statements); i++) {
         weakref = PyList_GetItem(self->statements, i);
-        if (weakref != Py_None) {
+        if (PyWeakref_GetObject(weakref) != Py_None) {
             if (PyList_Append(new_list, weakref) != 0) {
                 Py_DECREF(new_list);
                 return;
index 3022af4..38b5917 100644 (file)
@@ -207,7 +207,6 @@ static PyMethodDef module_methods[] = {
     {NULL, NULL}
 };
 
-
 struct _IntConstantPair {
     char* constant_name;
     int constant_value;
index 00eff1f..3fdac61 100644 (file)
@@ -25,7 +25,7 @@
 #define PYSQLITE_MODULE_H
 #include "Python.h"
 
-#define PYSQLITE_VERSION "2.3.0"
+#define PYSQLITE_VERSION "2.3.1"
 
 extern PyObject* Error;
 extern PyObject* Warning;