self.failUnlessEqual(val, buffer("blob"))
def CheckFuncException(self):
+ if sqlite.version_info < (3, 3, 3): # don't raise bug in earlier SQLite versions
+ return
cur = self.con.cursor()
try:
cur.execute("select raiseexception()")
self.failUnlessEqual(e.args[0], "AggrNoStep instance has no attribute 'step'")
def CheckAggrNoFinalize(self):
+ if sqlite.version_info < (3, 3, 3): # don't raise bug in earlier SQLite versions
+ return
cur = self.con.cursor()
try:
cur.execute("select nofinalize(t) from test")
self.failUnlessEqual(e.args[0], "user-defined aggregate's 'finalize' method raised error")
def CheckAggrExceptionInInit(self):
+ if sqlite.version_info < (3, 3, 3): # don't raise bug in earlier SQLite versions
+ return
cur = self.con.cursor()
try:
cur.execute("select excInit(t) from test")
self.failUnlessEqual(e.args[0], "user-defined aggregate's '__init__' method raised error")
def CheckAggrExceptionInStep(self):
+ if sqlite.version_info < (3, 3, 3): # don't raise bug in earlier SQLite versions
+ return
cur = self.con.cursor()
try:
cur.execute("select excStep(t) from test")
self.failUnlessEqual(e.args[0], "user-defined aggregate's 'step' method raised error")
def CheckAggrExceptionInFinalize(self):
+ if sqlite.version_info < (3, 3, 3): # don't raise bug in earlier SQLite versions
+ return
cur = self.con.cursor()
try:
cur.execute("select excFinalize(t) from test")
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);
+#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};
} 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);
} 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;
}
}
} 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:
} 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);
}