Home | History | Annotate | Download | only in _sqlite
      1 /* connection.c - the connection type
      2  *
      3  * Copyright (C) 2004-2010 Gerhard Hring <gh (at) ghaering.de>
      4  *
      5  * This file is part of pysqlite.
      6  *
      7  * This software is provided 'as-is', without any express or implied
      8  * warranty.  In no event will the authors be held liable for any damages
      9  * arising from the use of this software.
     10  *
     11  * Permission is granted to anyone to use this software for any purpose,
     12  * including commercial applications, and to alter it and redistribute it
     13  * freely, subject to the following restrictions:
     14  *
     15  * 1. The origin of this software must not be misrepresented; you must not
     16  *    claim that you wrote the original software. If you use this software
     17  *    in a product, an acknowledgment in the product documentation would be
     18  *    appreciated but is not required.
     19  * 2. Altered source versions must be plainly marked as such, and must not be
     20  *    misrepresented as being the original software.
     21  * 3. This notice may not be removed or altered from any source distribution.
     22  */
     23 
     24 #include "cache.h"
     25 #include "module.h"
     26 #include "structmember.h"
     27 #include "connection.h"
     28 #include "statement.h"
     29 #include "cursor.h"
     30 #include "prepare_protocol.h"
     31 #include "util.h"
     32 
     33 #include "pythread.h"
     34 
     35 #define ACTION_FINALIZE 1
     36 #define ACTION_RESET 2
     37 
     38 #if SQLITE_VERSION_NUMBER >= 3003008
     39 #ifndef SQLITE_OMIT_LOAD_EXTENSION
     40 #define HAVE_LOAD_EXTENSION
     41 #endif
     42 #endif
     43 
     44 _Py_IDENTIFIER(cursor);
     45 
     46 static const char * const begin_statements[] = {
     47     "BEGIN ",
     48     "BEGIN DEFERRED",
     49     "BEGIN IMMEDIATE",
     50     "BEGIN EXCLUSIVE",
     51     NULL
     52 };
     53 
     54 static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level);
     55 static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self);
     56 
     57 
     58 static void _sqlite3_result_error(sqlite3_context* ctx, const char* errmsg, int len)
     59 {
     60     /* in older SQLite versions, calling sqlite3_result_error in callbacks
     61      * triggers a bug in SQLite that leads either to irritating results or
     62      * segfaults, depending on the SQLite version */
     63 #if SQLITE_VERSION_NUMBER >= 3003003
     64     sqlite3_result_error(ctx, errmsg, len);
     65 #else
     66     PyErr_SetString(pysqlite_OperationalError, errmsg);
     67 #endif
     68 }
     69 
     70 int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
     71 {
     72     static char *kwlist[] = {
     73         "database", "timeout", "detect_types", "isolation_level",
     74         "check_same_thread", "factory", "cached_statements", "uri",
     75         NULL
     76     };
     77 
     78     char* database;
     79     int detect_types = 0;
     80     PyObject* isolation_level = NULL;
     81     PyObject* factory = NULL;
     82     int check_same_thread = 1;
     83     int cached_statements = 100;
     84     int uri = 0;
     85     double timeout = 5.0;
     86     int rc;
     87 
     88     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|diOiOip", kwlist,
     89                                      &database, &timeout, &detect_types,
     90                                      &isolation_level, &check_same_thread,
     91                                      &factory, &cached_statements, &uri))
     92     {
     93         return -1;
     94     }
     95 
     96     self->initialized = 1;
     97 
     98     self->begin_statement = NULL;
     99 
    100     self->statement_cache = NULL;
    101     self->statements = NULL;
    102     self->cursors = NULL;
    103 
    104     Py_INCREF(Py_None);
    105     self->row_factory = Py_None;
    106 
    107     Py_INCREF(&PyUnicode_Type);
    108     self->text_factory = (PyObject*)&PyUnicode_Type;
    109 
    110 #ifdef SQLITE_OPEN_URI
    111     Py_BEGIN_ALLOW_THREADS
    112     rc = sqlite3_open_v2(database, &self->db,
    113                          SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
    114                          (uri ? SQLITE_OPEN_URI : 0), NULL);
    115 #else
    116     if (uri) {
    117         PyErr_SetString(pysqlite_NotSupportedError, "URIs not supported");
    118         return -1;
    119     }
    120     Py_BEGIN_ALLOW_THREADS
    121     rc = sqlite3_open(database, &self->db);
    122 #endif
    123     Py_END_ALLOW_THREADS
    124 
    125     if (rc != SQLITE_OK) {
    126         _pysqlite_seterror(self->db, NULL);
    127         return -1;
    128     }
    129 
    130     if (!isolation_level) {
    131         isolation_level = PyUnicode_FromString("");
    132         if (!isolation_level) {
    133             return -1;
    134         }
    135     } else {
    136         Py_INCREF(isolation_level);
    137     }
    138     self->isolation_level = NULL;
    139     if (pysqlite_connection_set_isolation_level(self, isolation_level) < 0) {
    140         Py_DECREF(isolation_level);
    141         return -1;
    142     }
    143     Py_DECREF(isolation_level);
    144 
    145     self->statement_cache = (pysqlite_Cache*)PyObject_CallFunction((PyObject*)&pysqlite_CacheType, "Oi", self, cached_statements);
    146     if (PyErr_Occurred()) {
    147         return -1;
    148     }
    149 
    150     self->created_statements = 0;
    151     self->created_cursors = 0;
    152 
    153     /* Create lists of weak references to statements/cursors */
    154     self->statements = PyList_New(0);
    155     self->cursors = PyList_New(0);
    156     if (!self->statements || !self->cursors) {
    157         return -1;
    158     }
    159 
    160     /* By default, the Cache class INCREFs the factory in its initializer, and
    161      * decrefs it in its deallocator method. Since this would create a circular
    162      * reference here, we're breaking it by decrementing self, and telling the
    163      * cache class to not decref the factory (self) in its deallocator.
    164      */
    165     self->statement_cache->decref_factory = 0;
    166     Py_DECREF(self);
    167 
    168     self->detect_types = detect_types;
    169     self->timeout = timeout;
    170     (void)sqlite3_busy_timeout(self->db, (int)(timeout*1000));
    171 #ifdef WITH_THREAD
    172     self->thread_ident = PyThread_get_thread_ident();
    173 #endif
    174     if (!check_same_thread && sqlite3_libversion_number() < 3003001) {
    175         PyErr_SetString(pysqlite_NotSupportedError, "shared connections not available");
    176         return -1;
    177     }
    178     self->check_same_thread = check_same_thread;
    179 
    180     self->function_pinboard = PyDict_New();
    181     if (!self->function_pinboard) {
    182         return -1;
    183     }
    184 
    185     self->collations = PyDict_New();
    186     if (!self->collations) {
    187         return -1;
    188     }
    189 
    190     self->Warning               = pysqlite_Warning;
    191     self->Error                 = pysqlite_Error;
    192     self->InterfaceError        = pysqlite_InterfaceError;
    193     self->DatabaseError         = pysqlite_DatabaseError;
    194     self->DataError             = pysqlite_DataError;
    195     self->OperationalError      = pysqlite_OperationalError;
    196     self->IntegrityError        = pysqlite_IntegrityError;
    197     self->InternalError         = pysqlite_InternalError;
    198     self->ProgrammingError      = pysqlite_ProgrammingError;
    199     self->NotSupportedError     = pysqlite_NotSupportedError;
    200 
    201     return 0;
    202 }
    203 
    204 /* action in (ACTION_RESET, ACTION_FINALIZE) */
    205 void pysqlite_do_all_statements(pysqlite_Connection* self, int action, int reset_cursors)
    206 {
    207     int i;
    208     PyObject* weakref;
    209     PyObject* statement;
    210     pysqlite_Cursor* cursor;
    211 
    212     for (i = 0; i < PyList_Size(self->statements); i++) {
    213         weakref = PyList_GetItem(self->statements, i);
    214         statement = PyWeakref_GetObject(weakref);
    215         if (statement != Py_None) {
    216             Py_INCREF(statement);
    217             if (action == ACTION_RESET) {
    218                 (void)pysqlite_statement_reset((pysqlite_Statement*)statement);
    219             } else {
    220                 (void)pysqlite_statement_finalize((pysqlite_Statement*)statement);
    221             }
    222             Py_DECREF(statement);
    223         }
    224     }
    225 
    226     if (reset_cursors) {
    227         for (i = 0; i < PyList_Size(self->cursors); i++) {
    228             weakref = PyList_GetItem(self->cursors, i);
    229             cursor = (pysqlite_Cursor*)PyWeakref_GetObject(weakref);
    230             if ((PyObject*)cursor != Py_None) {
    231                 cursor->reset = 1;
    232             }
    233         }
    234     }
    235 }
    236 
    237 void pysqlite_connection_dealloc(pysqlite_Connection* self)
    238 {
    239     Py_XDECREF(self->statement_cache);
    240 
    241     /* Clean up if user has not called .close() explicitly. */
    242     if (self->db) {
    243         Py_BEGIN_ALLOW_THREADS
    244         sqlite3_close(self->db);
    245         Py_END_ALLOW_THREADS
    246     }
    247 
    248     Py_XDECREF(self->isolation_level);
    249     Py_XDECREF(self->function_pinboard);
    250     Py_XDECREF(self->row_factory);
    251     Py_XDECREF(self->text_factory);
    252     Py_XDECREF(self->collations);
    253     Py_XDECREF(self->statements);
    254     Py_XDECREF(self->cursors);
    255 
    256     Py_TYPE(self)->tp_free((PyObject*)self);
    257 }
    258 
    259 /*
    260  * Registers a cursor with the connection.
    261  *
    262  * 0 => error; 1 => ok
    263  */
    264 int pysqlite_connection_register_cursor(pysqlite_Connection* connection, PyObject* cursor)
    265 {
    266     PyObject* weakref;
    267 
    268     weakref = PyWeakref_NewRef((PyObject*)cursor, NULL);
    269     if (!weakref) {
    270         goto error;
    271     }
    272 
    273     if (PyList_Append(connection->cursors, weakref) != 0) {
    274         Py_CLEAR(weakref);
    275         goto error;
    276     }
    277 
    278     Py_DECREF(weakref);
    279 
    280     return 1;
    281 error:
    282     return 0;
    283 }
    284 
    285 PyObject* pysqlite_connection_cursor(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
    286 {
    287     static char *kwlist[] = {"factory", NULL};
    288     PyObject* factory = NULL;
    289     PyObject* cursor;
    290 
    291     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist,
    292                                      &factory)) {
    293         return NULL;
    294     }
    295 
    296     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
    297         return NULL;
    298     }
    299 
    300     if (factory == NULL) {
    301         factory = (PyObject*)&pysqlite_CursorType;
    302     }
    303 
    304     cursor = PyObject_CallFunctionObjArgs(factory, (PyObject *)self, NULL);
    305     if (cursor == NULL)
    306         return NULL;
    307     if (!PyObject_TypeCheck(cursor, &pysqlite_CursorType)) {
    308         PyErr_Format(PyExc_TypeError,
    309                      "factory must return a cursor, not %.100s",
    310                      Py_TYPE(cursor)->tp_name);
    311         Py_DECREF(cursor);
    312         return NULL;
    313     }
    314 
    315     _pysqlite_drop_unused_cursor_references(self);
    316 
    317     if (cursor && self->row_factory != Py_None) {
    318         Py_INCREF(self->row_factory);
    319         Py_XSETREF(((pysqlite_Cursor *)cursor)->row_factory, self->row_factory);
    320     }
    321 
    322     return cursor;
    323 }
    324 
    325 PyObject* pysqlite_connection_close(pysqlite_Connection* self, PyObject* args)
    326 {
    327     int rc;
    328 
    329     if (!pysqlite_check_thread(self)) {
    330         return NULL;
    331     }
    332 
    333     pysqlite_do_all_statements(self, ACTION_FINALIZE, 1);
    334 
    335     if (self->db) {
    336         Py_BEGIN_ALLOW_THREADS
    337         rc = sqlite3_close(self->db);
    338         Py_END_ALLOW_THREADS
    339 
    340         if (rc != SQLITE_OK) {
    341             _pysqlite_seterror(self->db, NULL);
    342             return NULL;
    343         } else {
    344             self->db = NULL;
    345         }
    346     }
    347 
    348     Py_RETURN_NONE;
    349 }
    350 
    351 /*
    352  * Checks if a connection object is usable (i. e. not closed).
    353  *
    354  * 0 => error; 1 => ok
    355  */
    356 int pysqlite_check_connection(pysqlite_Connection* con)
    357 {
    358     if (!con->initialized) {
    359         PyErr_SetString(pysqlite_ProgrammingError, "Base Connection.__init__ not called.");
    360         return 0;
    361     }
    362 
    363     if (!con->db) {
    364         PyErr_SetString(pysqlite_ProgrammingError, "Cannot operate on a closed database.");
    365         return 0;
    366     } else {
    367         return 1;
    368     }
    369 }
    370 
    371 PyObject* _pysqlite_connection_begin(pysqlite_Connection* self)
    372 {
    373     int rc;
    374     const char* tail;
    375     sqlite3_stmt* statement;
    376 
    377     Py_BEGIN_ALLOW_THREADS
    378     rc = sqlite3_prepare(self->db, self->begin_statement, -1, &statement, &tail);
    379     Py_END_ALLOW_THREADS
    380 
    381     if (rc != SQLITE_OK) {
    382         _pysqlite_seterror(self->db, statement);
    383         goto error;
    384     }
    385 
    386     rc = pysqlite_step(statement, self);
    387     if (rc != SQLITE_DONE) {
    388         _pysqlite_seterror(self->db, statement);
    389     }
    390 
    391     Py_BEGIN_ALLOW_THREADS
    392     rc = sqlite3_finalize(statement);
    393     Py_END_ALLOW_THREADS
    394 
    395     if (rc != SQLITE_OK && !PyErr_Occurred()) {
    396         _pysqlite_seterror(self->db, NULL);
    397     }
    398 
    399 error:
    400     if (PyErr_Occurred()) {
    401         return NULL;
    402     } else {
    403         Py_INCREF(Py_None);
    404         return Py_None;
    405     }
    406 }
    407 
    408 PyObject* pysqlite_connection_commit(pysqlite_Connection* self, PyObject* args)
    409 {
    410     int rc;
    411     const char* tail;
    412     sqlite3_stmt* statement;
    413 
    414     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
    415         return NULL;
    416     }
    417 
    418     if (!sqlite3_get_autocommit(self->db)) {
    419 
    420         Py_BEGIN_ALLOW_THREADS
    421         rc = sqlite3_prepare(self->db, "COMMIT", -1, &statement, &tail);
    422         Py_END_ALLOW_THREADS
    423         if (rc != SQLITE_OK) {
    424             _pysqlite_seterror(self->db, NULL);
    425             goto error;
    426         }
    427 
    428         rc = pysqlite_step(statement, self);
    429         if (rc != SQLITE_DONE) {
    430             _pysqlite_seterror(self->db, statement);
    431         }
    432 
    433         Py_BEGIN_ALLOW_THREADS
    434         rc = sqlite3_finalize(statement);
    435         Py_END_ALLOW_THREADS
    436         if (rc != SQLITE_OK && !PyErr_Occurred()) {
    437             _pysqlite_seterror(self->db, NULL);
    438         }
    439 
    440     }
    441 
    442 error:
    443     if (PyErr_Occurred()) {
    444         return NULL;
    445     } else {
    446         Py_INCREF(Py_None);
    447         return Py_None;
    448     }
    449 }
    450 
    451 PyObject* pysqlite_connection_rollback(pysqlite_Connection* self, PyObject* args)
    452 {
    453     int rc;
    454     const char* tail;
    455     sqlite3_stmt* statement;
    456 
    457     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
    458         return NULL;
    459     }
    460 
    461     if (!sqlite3_get_autocommit(self->db)) {
    462         pysqlite_do_all_statements(self, ACTION_RESET, 1);
    463 
    464         Py_BEGIN_ALLOW_THREADS
    465         rc = sqlite3_prepare(self->db, "ROLLBACK", -1, &statement, &tail);
    466         Py_END_ALLOW_THREADS
    467         if (rc != SQLITE_OK) {
    468             _pysqlite_seterror(self->db, NULL);
    469             goto error;
    470         }
    471 
    472         rc = pysqlite_step(statement, self);
    473         if (rc != SQLITE_DONE) {
    474             _pysqlite_seterror(self->db, statement);
    475         }
    476 
    477         Py_BEGIN_ALLOW_THREADS
    478         rc = sqlite3_finalize(statement);
    479         Py_END_ALLOW_THREADS
    480         if (rc != SQLITE_OK && !PyErr_Occurred()) {
    481             _pysqlite_seterror(self->db, NULL);
    482         }
    483 
    484     }
    485 
    486 error:
    487     if (PyErr_Occurred()) {
    488         return NULL;
    489     } else {
    490         Py_INCREF(Py_None);
    491         return Py_None;
    492     }
    493 }
    494 
    495 static int
    496 _pysqlite_set_result(sqlite3_context* context, PyObject* py_val)
    497 {
    498     if (py_val == Py_None) {
    499         sqlite3_result_null(context);
    500     } else if (PyLong_Check(py_val)) {
    501         sqlite_int64 value = _pysqlite_long_as_int64(py_val);
    502         if (value == -1 && PyErr_Occurred())
    503             return -1;
    504         sqlite3_result_int64(context, value);
    505     } else if (PyFloat_Check(py_val)) {
    506         sqlite3_result_double(context, PyFloat_AsDouble(py_val));
    507     } else if (PyUnicode_Check(py_val)) {
    508         const char *str = PyUnicode_AsUTF8(py_val);
    509         if (str == NULL)
    510             return -1;
    511         sqlite3_result_text(context, str, -1, SQLITE_TRANSIENT);
    512     } else if (PyObject_CheckBuffer(py_val)) {
    513         Py_buffer view;
    514         if (PyObject_GetBuffer(py_val, &view, PyBUF_SIMPLE) != 0) {
    515             PyErr_SetString(PyExc_ValueError,
    516                             "could not convert BLOB to buffer");
    517             return -1;
    518         }
    519         if (view.len > INT_MAX) {
    520             PyErr_SetString(PyExc_OverflowError,
    521                             "BLOB longer than INT_MAX bytes");
    522             PyBuffer_Release(&view);
    523             return -1;
    524         }
    525         sqlite3_result_blob(context, view.buf, (int)view.len, SQLITE_TRANSIENT);
    526         PyBuffer_Release(&view);
    527     } else {
    528         return -1;
    529     }
    530     return 0;
    531 }
    532 
    533 PyObject* _pysqlite_build_py_params(sqlite3_context *context, int argc, sqlite3_value** argv)
    534 {
    535     PyObject* args;
    536     int i;
    537     sqlite3_value* cur_value;
    538     PyObject* cur_py_value;
    539     const char* val_str;
    540     Py_ssize_t buflen;
    541 
    542     args = PyTuple_New(argc);
    543     if (!args) {
    544         return NULL;
    545     }
    546 
    547     for (i = 0; i < argc; i++) {
    548         cur_value = argv[i];
    549         switch (sqlite3_value_type(argv[i])) {
    550             case SQLITE_INTEGER:
    551                 cur_py_value = _pysqlite_long_from_int64(sqlite3_value_int64(cur_value));
    552                 break;
    553             case SQLITE_FLOAT:
    554                 cur_py_value = PyFloat_FromDouble(sqlite3_value_double(cur_value));
    555                 break;
    556             case SQLITE_TEXT:
    557                 val_str = (const char*)sqlite3_value_text(cur_value);
    558                 cur_py_value = PyUnicode_FromString(val_str);
    559                 /* TODO: have a way to show errors here */
    560                 if (!cur_py_value) {
    561                     PyErr_Clear();
    562                     Py_INCREF(Py_None);
    563                     cur_py_value = Py_None;
    564                 }
    565                 break;
    566             case SQLITE_BLOB:
    567                 buflen = sqlite3_value_bytes(cur_value);
    568                 cur_py_value = PyBytes_FromStringAndSize(
    569                     sqlite3_value_blob(cur_value), buflen);
    570                 break;
    571             case SQLITE_NULL:
    572             default:
    573                 Py_INCREF(Py_None);
    574                 cur_py_value = Py_None;
    575         }
    576 
    577         if (!cur_py_value) {
    578             Py_DECREF(args);
    579             return NULL;
    580         }
    581 
    582         PyTuple_SetItem(args, i, cur_py_value);
    583 
    584     }
    585 
    586     return args;
    587 }
    588 
    589 void _pysqlite_func_callback(sqlite3_context* context, int argc, sqlite3_value** argv)
    590 {
    591     PyObject* args;
    592     PyObject* py_func;
    593     PyObject* py_retval = NULL;
    594     int ok;
    595 
    596 #ifdef WITH_THREAD
    597     PyGILState_STATE threadstate;
    598 
    599     threadstate = PyGILState_Ensure();
    600 #endif
    601 
    602     py_func = (PyObject*)sqlite3_user_data(context);
    603 
    604     args = _pysqlite_build_py_params(context, argc, argv);
    605     if (args) {
    606         py_retval = PyObject_CallObject(py_func, args);
    607         Py_DECREF(args);
    608     }
    609 
    610     ok = 0;
    611     if (py_retval) {
    612         ok = _pysqlite_set_result(context, py_retval) == 0;
    613         Py_DECREF(py_retval);
    614     }
    615     if (!ok) {
    616         if (_enable_callback_tracebacks) {
    617             PyErr_Print();
    618         } else {
    619             PyErr_Clear();
    620         }
    621         _sqlite3_result_error(context, "user-defined function raised exception", -1);
    622     }
    623 
    624 #ifdef WITH_THREAD
    625     PyGILState_Release(threadstate);
    626 #endif
    627 }
    628 
    629 static void _pysqlite_step_callback(sqlite3_context *context, int argc, sqlite3_value** params)
    630 {
    631     PyObject* args;
    632     PyObject* function_result = NULL;
    633     PyObject* aggregate_class;
    634     PyObject** aggregate_instance;
    635     PyObject* stepmethod = NULL;
    636 
    637 #ifdef WITH_THREAD
    638     PyGILState_STATE threadstate;
    639 
    640     threadstate = PyGILState_Ensure();
    641 #endif
    642 
    643     aggregate_class = (PyObject*)sqlite3_user_data(context);
    644 
    645     aggregate_instance = (PyObject**)sqlite3_aggregate_context(context, sizeof(PyObject*));
    646 
    647     if (*aggregate_instance == 0) {
    648         *aggregate_instance = PyObject_CallFunction(aggregate_class, NULL);
    649 
    650         if (PyErr_Occurred()) {
    651             *aggregate_instance = 0;
    652             if (_enable_callback_tracebacks) {
    653                 PyErr_Print();
    654             } else {
    655                 PyErr_Clear();
    656             }
    657             _sqlite3_result_error(context, "user-defined aggregate's '__init__' method raised error", -1);
    658             goto error;
    659         }
    660     }
    661 
    662     stepmethod = PyObject_GetAttrString(*aggregate_instance, "step");
    663     if (!stepmethod) {
    664         goto error;
    665     }
    666 
    667     args = _pysqlite_build_py_params(context, argc, params);
    668     if (!args) {
    669         goto error;
    670     }
    671 
    672     function_result = PyObject_CallObject(stepmethod, args);
    673     Py_DECREF(args);
    674 
    675     if (!function_result) {
    676         if (_enable_callback_tracebacks) {
    677             PyErr_Print();
    678         } else {
    679             PyErr_Clear();
    680         }
    681         _sqlite3_result_error(context, "user-defined aggregate's 'step' method raised error", -1);
    682     }
    683 
    684 error:
    685     Py_XDECREF(stepmethod);
    686     Py_XDECREF(function_result);
    687 
    688 #ifdef WITH_THREAD
    689     PyGILState_Release(threadstate);
    690 #endif
    691 }
    692 
    693 void _pysqlite_final_callback(sqlite3_context* context)
    694 {
    695     PyObject* function_result;
    696     PyObject** aggregate_instance;
    697     _Py_IDENTIFIER(finalize);
    698     int ok;
    699     PyObject *exception, *value, *tb;
    700     int restore;
    701 
    702 #ifdef WITH_THREAD
    703     PyGILState_STATE threadstate;
    704 
    705     threadstate = PyGILState_Ensure();
    706 #endif
    707 
    708     aggregate_instance = (PyObject**)sqlite3_aggregate_context(context, sizeof(PyObject*));
    709     if (!*aggregate_instance) {
    710         /* this branch is executed if there was an exception in the aggregate's
    711          * __init__ */
    712 
    713         goto error;
    714     }
    715 
    716     /* Keep the exception (if any) of the last call to step() */
    717     PyErr_Fetch(&exception, &value, &tb);
    718     restore = 1;
    719 
    720     function_result = _PyObject_CallMethodId(*aggregate_instance, &PyId_finalize, NULL);
    721 
    722     Py_DECREF(*aggregate_instance);
    723 
    724     ok = 0;
    725     if (function_result) {
    726         ok = _pysqlite_set_result(context, function_result) == 0;
    727         Py_DECREF(function_result);
    728     }
    729     if (!ok) {
    730         if (_enable_callback_tracebacks) {
    731             PyErr_Print();
    732         } else {
    733             PyErr_Clear();
    734         }
    735         _sqlite3_result_error(context, "user-defined aggregate's 'finalize' method raised error", -1);
    736 #if SQLITE_VERSION_NUMBER < 3003003
    737         /* with old SQLite versions, _sqlite3_result_error() sets a new Python
    738            exception, so don't restore the previous exception */
    739         restore = 0;
    740 #endif
    741     }
    742 
    743     if (restore) {
    744         /* Restore the exception (if any) of the last call to step(),
    745            but clear also the current exception if finalize() failed */
    746         PyErr_Restore(exception, value, tb);
    747     }
    748 
    749 error:
    750 #ifdef WITH_THREAD
    751     PyGILState_Release(threadstate);
    752 #endif
    753     /* explicit return to avoid a compilation error if WITH_THREAD
    754        is not defined */
    755     return;
    756 }
    757 
    758 static void _pysqlite_drop_unused_statement_references(pysqlite_Connection* self)
    759 {
    760     PyObject* new_list;
    761     PyObject* weakref;
    762     int i;
    763 
    764     /* we only need to do this once in a while */
    765     if (self->created_statements++ < 200) {
    766         return;
    767     }
    768 
    769     self->created_statements = 0;
    770 
    771     new_list = PyList_New(0);
    772     if (!new_list) {
    773         return;
    774     }
    775 
    776     for (i = 0; i < PyList_Size(self->statements); i++) {
    777         weakref = PyList_GetItem(self->statements, i);
    778         if (PyWeakref_GetObject(weakref) != Py_None) {
    779             if (PyList_Append(new_list, weakref) != 0) {
    780                 Py_DECREF(new_list);
    781                 return;
    782             }
    783         }
    784     }
    785 
    786     Py_SETREF(self->statements, new_list);
    787 }
    788 
    789 static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self)
    790 {
    791     PyObject* new_list;
    792     PyObject* weakref;
    793     int i;
    794 
    795     /* we only need to do this once in a while */
    796     if (self->created_cursors++ < 200) {
    797         return;
    798     }
    799 
    800     self->created_cursors = 0;
    801 
    802     new_list = PyList_New(0);
    803     if (!new_list) {
    804         return;
    805     }
    806 
    807     for (i = 0; i < PyList_Size(self->cursors); i++) {
    808         weakref = PyList_GetItem(self->cursors, i);
    809         if (PyWeakref_GetObject(weakref) != Py_None) {
    810             if (PyList_Append(new_list, weakref) != 0) {
    811                 Py_DECREF(new_list);
    812                 return;
    813             }
    814         }
    815     }
    816 
    817     Py_SETREF(self->cursors, new_list);
    818 }
    819 
    820 PyObject* pysqlite_connection_create_function(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
    821 {
    822     static char *kwlist[] = {"name", "narg", "func", NULL, NULL};
    823 
    824     PyObject* func;
    825     char* name;
    826     int narg;
    827     int rc;
    828 
    829     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
    830         return NULL;
    831     }
    832 
    833     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO", kwlist,
    834                                      &name, &narg, &func))
    835     {
    836         return NULL;
    837     }
    838 
    839     rc = sqlite3_create_function(self->db, name, narg, SQLITE_UTF8, (void*)func, _pysqlite_func_callback, NULL, NULL);
    840 
    841     if (rc != SQLITE_OK) {
    842         /* Workaround for SQLite bug: no error code or string is available here */
    843         PyErr_SetString(pysqlite_OperationalError, "Error creating function");
    844         return NULL;
    845     } else {
    846         if (PyDict_SetItem(self->function_pinboard, func, Py_None) == -1)
    847             return NULL;
    848 
    849         Py_RETURN_NONE;
    850     }
    851 }
    852 
    853 PyObject* pysqlite_connection_create_aggregate(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
    854 {
    855     PyObject* aggregate_class;
    856 
    857     int n_arg;
    858     char* name;
    859     static char *kwlist[] = { "name", "n_arg", "aggregate_class", NULL };
    860     int rc;
    861 
    862     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
    863         return NULL;
    864     }
    865 
    866     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO:create_aggregate",
    867                                       kwlist, &name, &n_arg, &aggregate_class)) {
    868         return NULL;
    869     }
    870 
    871     rc = sqlite3_create_function(self->db, name, n_arg, SQLITE_UTF8, (void*)aggregate_class, 0, &_pysqlite_step_callback, &_pysqlite_final_callback);
    872     if (rc != SQLITE_OK) {
    873         /* Workaround for SQLite bug: no error code or string is available here */
    874         PyErr_SetString(pysqlite_OperationalError, "Error creating aggregate");
    875         return NULL;
    876     } else {
    877         if (PyDict_SetItem(self->function_pinboard, aggregate_class, Py_None) == -1)
    878             return NULL;
    879 
    880         Py_RETURN_NONE;
    881     }
    882 }
    883 
    884 static int _authorizer_callback(void* user_arg, int action, const char* arg1, const char* arg2 , const char* dbname, const char* access_attempt_source)
    885 {
    886     PyObject *ret;
    887     int rc;
    888 #ifdef WITH_THREAD
    889     PyGILState_STATE gilstate;
    890 
    891     gilstate = PyGILState_Ensure();
    892 #endif
    893 
    894     ret = PyObject_CallFunction((PyObject*)user_arg, "issss", action, arg1, arg2, dbname, access_attempt_source);
    895 
    896     if (ret == NULL) {
    897         if (_enable_callback_tracebacks)
    898             PyErr_Print();
    899         else
    900             PyErr_Clear();
    901 
    902         rc = SQLITE_DENY;
    903     }
    904     else {
    905         if (PyLong_Check(ret)) {
    906             rc = _PyLong_AsInt(ret);
    907             if (rc == -1 && PyErr_Occurred()) {
    908                 if (_enable_callback_tracebacks)
    909                     PyErr_Print();
    910                 else
    911                     PyErr_Clear();
    912                 rc = SQLITE_DENY;
    913             }
    914         }
    915         else {
    916             rc = SQLITE_DENY;
    917         }
    918         Py_DECREF(ret);
    919     }
    920 
    921 #ifdef WITH_THREAD
    922     PyGILState_Release(gilstate);
    923 #endif
    924     return rc;
    925 }
    926 
    927 static int _progress_handler(void* user_arg)
    928 {
    929     int rc;
    930     PyObject *ret;
    931 #ifdef WITH_THREAD
    932     PyGILState_STATE gilstate;
    933 
    934     gilstate = PyGILState_Ensure();
    935 #endif
    936     ret = PyObject_CallFunction((PyObject*)user_arg, NULL);
    937 
    938     if (!ret) {
    939         if (_enable_callback_tracebacks) {
    940             PyErr_Print();
    941         } else {
    942             PyErr_Clear();
    943         }
    944 
    945         /* abort query if error occurred */
    946         rc = 1;
    947     } else {
    948         rc = (int)PyObject_IsTrue(ret);
    949         Py_DECREF(ret);
    950     }
    951 
    952 #ifdef WITH_THREAD
    953     PyGILState_Release(gilstate);
    954 #endif
    955     return rc;
    956 }
    957 
    958 static void _trace_callback(void* user_arg, const char* statement_string)
    959 {
    960     PyObject *py_statement = NULL;
    961     PyObject *ret = NULL;
    962 
    963 #ifdef WITH_THREAD
    964     PyGILState_STATE gilstate;
    965 
    966     gilstate = PyGILState_Ensure();
    967 #endif
    968     py_statement = PyUnicode_DecodeUTF8(statement_string,
    969             strlen(statement_string), "replace");
    970     if (py_statement) {
    971         ret = PyObject_CallFunctionObjArgs((PyObject*)user_arg, py_statement, NULL);
    972         Py_DECREF(py_statement);
    973     }
    974 
    975     if (ret) {
    976         Py_DECREF(ret);
    977     } else {
    978         if (_enable_callback_tracebacks) {
    979             PyErr_Print();
    980         } else {
    981             PyErr_Clear();
    982         }
    983     }
    984 
    985 #ifdef WITH_THREAD
    986     PyGILState_Release(gilstate);
    987 #endif
    988 }
    989 
    990 static PyObject* pysqlite_connection_set_authorizer(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
    991 {
    992     PyObject* authorizer_cb;
    993 
    994     static char *kwlist[] = { "authorizer_callback", NULL };
    995     int rc;
    996 
    997     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
    998         return NULL;
    999     }
   1000 
   1001     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:set_authorizer",
   1002                                       kwlist, &authorizer_cb)) {
   1003         return NULL;
   1004     }
   1005 
   1006     rc = sqlite3_set_authorizer(self->db, _authorizer_callback, (void*)authorizer_cb);
   1007 
   1008     if (rc != SQLITE_OK) {
   1009         PyErr_SetString(pysqlite_OperationalError, "Error setting authorizer callback");
   1010         return NULL;
   1011     } else {
   1012         if (PyDict_SetItem(self->function_pinboard, authorizer_cb, Py_None) == -1)
   1013             return NULL;
   1014 
   1015         Py_RETURN_NONE;
   1016     }
   1017 }
   1018 
   1019 static PyObject* pysqlite_connection_set_progress_handler(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
   1020 {
   1021     PyObject* progress_handler;
   1022     int n;
   1023 
   1024     static char *kwlist[] = { "progress_handler", "n", NULL };
   1025 
   1026     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
   1027         return NULL;
   1028     }
   1029 
   1030     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi:set_progress_handler",
   1031                                       kwlist, &progress_handler, &n)) {
   1032         return NULL;
   1033     }
   1034 
   1035     if (progress_handler == Py_None) {
   1036         /* None clears the progress handler previously set */
   1037         sqlite3_progress_handler(self->db, 0, 0, (void*)0);
   1038     } else {
   1039         sqlite3_progress_handler(self->db, n, _progress_handler, progress_handler);
   1040         if (PyDict_SetItem(self->function_pinboard, progress_handler, Py_None) == -1)
   1041             return NULL;
   1042     }
   1043 
   1044     Py_RETURN_NONE;
   1045 }
   1046 
   1047 static PyObject* pysqlite_connection_set_trace_callback(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
   1048 {
   1049     PyObject* trace_callback;
   1050 
   1051     static char *kwlist[] = { "trace_callback", NULL };
   1052 
   1053     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
   1054         return NULL;
   1055     }
   1056 
   1057     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:set_trace_callback",
   1058                                       kwlist, &trace_callback)) {
   1059         return NULL;
   1060     }
   1061 
   1062     if (trace_callback == Py_None) {
   1063         /* None clears the trace callback previously set */
   1064         sqlite3_trace(self->db, 0, (void*)0);
   1065     } else {
   1066         if (PyDict_SetItem(self->function_pinboard, trace_callback, Py_None) == -1)
   1067             return NULL;
   1068         sqlite3_trace(self->db, _trace_callback, trace_callback);
   1069     }
   1070 
   1071     Py_RETURN_NONE;
   1072 }
   1073 
   1074 #ifdef HAVE_LOAD_EXTENSION
   1075 static PyObject* pysqlite_enable_load_extension(pysqlite_Connection* self, PyObject* args)
   1076 {
   1077     int rc;
   1078     int onoff;
   1079 
   1080     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
   1081         return NULL;
   1082     }
   1083 
   1084     if (!PyArg_ParseTuple(args, "i", &onoff)) {
   1085         return NULL;
   1086     }
   1087 
   1088     rc = sqlite3_enable_load_extension(self->db, onoff);
   1089 
   1090     if (rc != SQLITE_OK) {
   1091         PyErr_SetString(pysqlite_OperationalError, "Error enabling load extension");
   1092         return NULL;
   1093     } else {
   1094         Py_RETURN_NONE;
   1095     }
   1096 }
   1097 
   1098 static PyObject* pysqlite_load_extension(pysqlite_Connection* self, PyObject* args)
   1099 {
   1100     int rc;
   1101     char* extension_name;
   1102     char* errmsg;
   1103 
   1104     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
   1105         return NULL;
   1106     }
   1107 
   1108     if (!PyArg_ParseTuple(args, "s", &extension_name)) {
   1109         return NULL;
   1110     }
   1111 
   1112     rc = sqlite3_load_extension(self->db, extension_name, 0, &errmsg);
   1113     if (rc != 0) {
   1114         PyErr_SetString(pysqlite_OperationalError, errmsg);
   1115         return NULL;
   1116     } else {
   1117         Py_RETURN_NONE;
   1118     }
   1119 }
   1120 #endif
   1121 
   1122 int pysqlite_check_thread(pysqlite_Connection* self)
   1123 {
   1124 #ifdef WITH_THREAD
   1125     if (self->check_same_thread) {
   1126         if (PyThread_get_thread_ident() != self->thread_ident) {
   1127             PyErr_Format(pysqlite_ProgrammingError,
   1128                         "SQLite objects created in a thread can only be used in that same thread."
   1129                         "The object was created in thread id %ld and this is thread id %ld",
   1130                         self->thread_ident, PyThread_get_thread_ident());
   1131             return 0;
   1132         }
   1133 
   1134     }
   1135 #endif
   1136     return 1;
   1137 }
   1138 
   1139 static PyObject* pysqlite_connection_get_isolation_level(pysqlite_Connection* self, void* unused)
   1140 {
   1141     Py_INCREF(self->isolation_level);
   1142     return self->isolation_level;
   1143 }
   1144 
   1145 static PyObject* pysqlite_connection_get_total_changes(pysqlite_Connection* self, void* unused)
   1146 {
   1147     if (!pysqlite_check_connection(self)) {
   1148         return NULL;
   1149     } else {
   1150         return Py_BuildValue("i", sqlite3_total_changes(self->db));
   1151     }
   1152 }
   1153 
   1154 static PyObject* pysqlite_connection_get_in_transaction(pysqlite_Connection* self, void* unused)
   1155 {
   1156     if (!pysqlite_check_connection(self)) {
   1157         return NULL;
   1158     }
   1159     if (!sqlite3_get_autocommit(self->db)) {
   1160         Py_RETURN_TRUE;
   1161     }
   1162     Py_RETURN_FALSE;
   1163 }
   1164 
   1165 static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level)
   1166 {
   1167     if (isolation_level == Py_None) {
   1168         PyObject *res = pysqlite_connection_commit(self, NULL);
   1169         if (!res) {
   1170             return -1;
   1171         }
   1172         Py_DECREF(res);
   1173 
   1174         self->begin_statement = NULL;
   1175     } else {
   1176         const char * const *candidate;
   1177         PyObject *uppercase_level;
   1178         _Py_IDENTIFIER(upper);
   1179 
   1180         if (!PyUnicode_Check(isolation_level)) {
   1181             PyErr_Format(PyExc_TypeError,
   1182                          "isolation_level must be a string or None, not %.100s",
   1183                          Py_TYPE(isolation_level)->tp_name);
   1184             return -1;
   1185         }
   1186 
   1187         uppercase_level = _PyObject_CallMethodIdObjArgs(
   1188                         (PyObject *)&PyUnicode_Type, &PyId_upper,
   1189                         isolation_level, NULL);
   1190         if (!uppercase_level) {
   1191             return -1;
   1192         }
   1193         for (candidate = begin_statements; *candidate; candidate++) {
   1194             if (_PyUnicode_EqualToASCIIString(uppercase_level, *candidate + 6))
   1195                 break;
   1196         }
   1197         Py_DECREF(uppercase_level);
   1198         if (!*candidate) {
   1199             PyErr_SetString(PyExc_ValueError,
   1200                             "invalid value for isolation_level");
   1201             return -1;
   1202         }
   1203         self->begin_statement = *candidate;
   1204     }
   1205 
   1206     Py_INCREF(isolation_level);
   1207     Py_XSETREF(self->isolation_level, isolation_level);
   1208     return 0;
   1209 }
   1210 
   1211 PyObject* pysqlite_connection_call(pysqlite_Connection* self, PyObject* args, PyObject* kwargs)
   1212 {
   1213     PyObject* sql;
   1214     pysqlite_Statement* statement;
   1215     PyObject* weakref;
   1216     int rc;
   1217 
   1218     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
   1219         return NULL;
   1220     }
   1221 
   1222     if (!_PyArg_NoKeywords(MODULE_NAME ".Connection()", kwargs))
   1223         return NULL;
   1224 
   1225     if (!PyArg_ParseTuple(args, "O", &sql))
   1226         return NULL;
   1227 
   1228     _pysqlite_drop_unused_statement_references(self);
   1229 
   1230     statement = PyObject_New(pysqlite_Statement, &pysqlite_StatementType);
   1231     if (!statement) {
   1232         return NULL;
   1233     }
   1234 
   1235     statement->db = NULL;
   1236     statement->st = NULL;
   1237     statement->sql = NULL;
   1238     statement->in_use = 0;
   1239     statement->in_weakreflist = NULL;
   1240 
   1241     rc = pysqlite_statement_create(statement, self, sql);
   1242     if (rc != SQLITE_OK) {
   1243         if (rc == PYSQLITE_TOO_MUCH_SQL) {
   1244             PyErr_SetString(pysqlite_Warning, "You can only execute one statement at a time.");
   1245         } else if (rc == PYSQLITE_SQL_WRONG_TYPE) {
   1246             if (PyErr_ExceptionMatches(PyExc_TypeError))
   1247                 PyErr_SetString(pysqlite_Warning, "SQL is of wrong type. Must be string.");
   1248         } else {
   1249             (void)pysqlite_statement_reset(statement);
   1250             _pysqlite_seterror(self->db, NULL);
   1251         }
   1252         goto error;
   1253     }
   1254 
   1255     weakref = PyWeakref_NewRef((PyObject*)statement, NULL);
   1256     if (weakref == NULL)
   1257         goto error;
   1258     if (PyList_Append(self->statements, weakref) != 0) {
   1259         Py_DECREF(weakref);
   1260         goto error;
   1261     }
   1262     Py_DECREF(weakref);
   1263 
   1264     return (PyObject*)statement;
   1265 
   1266 error:
   1267     Py_DECREF(statement);
   1268     return NULL;
   1269 }
   1270 
   1271 PyObject* pysqlite_connection_execute(pysqlite_Connection* self, PyObject* args)
   1272 {
   1273     PyObject* cursor = 0;
   1274     PyObject* result = 0;
   1275     PyObject* method = 0;
   1276 
   1277     cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, NULL);
   1278     if (!cursor) {
   1279         goto error;
   1280     }
   1281 
   1282     method = PyObject_GetAttrString(cursor, "execute");
   1283     if (!method) {
   1284         Py_CLEAR(cursor);
   1285         goto error;
   1286     }
   1287 
   1288     result = PyObject_CallObject(method, args);
   1289     if (!result) {
   1290         Py_CLEAR(cursor);
   1291     }
   1292 
   1293 error:
   1294     Py_XDECREF(result);
   1295     Py_XDECREF(method);
   1296 
   1297     return cursor;
   1298 }
   1299 
   1300 PyObject* pysqlite_connection_executemany(pysqlite_Connection* self, PyObject* args)
   1301 {
   1302     PyObject* cursor = 0;
   1303     PyObject* result = 0;
   1304     PyObject* method = 0;
   1305 
   1306     cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, NULL);
   1307     if (!cursor) {
   1308         goto error;
   1309     }
   1310 
   1311     method = PyObject_GetAttrString(cursor, "executemany");
   1312     if (!method) {
   1313         Py_CLEAR(cursor);
   1314         goto error;
   1315     }
   1316 
   1317     result = PyObject_CallObject(method, args);
   1318     if (!result) {
   1319         Py_CLEAR(cursor);
   1320     }
   1321 
   1322 error:
   1323     Py_XDECREF(result);
   1324     Py_XDECREF(method);
   1325 
   1326     return cursor;
   1327 }
   1328 
   1329 PyObject* pysqlite_connection_executescript(pysqlite_Connection* self, PyObject* args)
   1330 {
   1331     PyObject* cursor = 0;
   1332     PyObject* result = 0;
   1333     PyObject* method = 0;
   1334 
   1335     cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, NULL);
   1336     if (!cursor) {
   1337         goto error;
   1338     }
   1339 
   1340     method = PyObject_GetAttrString(cursor, "executescript");
   1341     if (!method) {
   1342         Py_CLEAR(cursor);
   1343         goto error;
   1344     }
   1345 
   1346     result = PyObject_CallObject(method, args);
   1347     if (!result) {
   1348         Py_CLEAR(cursor);
   1349     }
   1350 
   1351 error:
   1352     Py_XDECREF(result);
   1353     Py_XDECREF(method);
   1354 
   1355     return cursor;
   1356 }
   1357 
   1358 /* ------------------------- COLLATION CODE ------------------------ */
   1359 
   1360 static int
   1361 pysqlite_collation_callback(
   1362         void* context,
   1363         int text1_length, const void* text1_data,
   1364         int text2_length, const void* text2_data)
   1365 {
   1366     PyObject* callback = (PyObject*)context;
   1367     PyObject* string1 = 0;
   1368     PyObject* string2 = 0;
   1369 #ifdef WITH_THREAD
   1370     PyGILState_STATE gilstate;
   1371 #endif
   1372     PyObject* retval = NULL;
   1373     long longval;
   1374     int result = 0;
   1375 #ifdef WITH_THREAD
   1376     gilstate = PyGILState_Ensure();
   1377 #endif
   1378 
   1379     if (PyErr_Occurred()) {
   1380         goto finally;
   1381     }
   1382 
   1383     string1 = PyUnicode_FromStringAndSize((const char*)text1_data, text1_length);
   1384     string2 = PyUnicode_FromStringAndSize((const char*)text2_data, text2_length);
   1385 
   1386     if (!string1 || !string2) {
   1387         goto finally; /* failed to allocate strings */
   1388     }
   1389 
   1390     retval = PyObject_CallFunctionObjArgs(callback, string1, string2, NULL);
   1391 
   1392     if (!retval) {
   1393         /* execution failed */
   1394         goto finally;
   1395     }
   1396 
   1397     longval = PyLong_AsLongAndOverflow(retval, &result);
   1398     if (longval == -1 && PyErr_Occurred()) {
   1399         PyErr_Clear();
   1400         result = 0;
   1401     }
   1402     else if (!result) {
   1403         if (longval > 0)
   1404             result = 1;
   1405         else if (longval < 0)
   1406             result = -1;
   1407     }
   1408 
   1409 finally:
   1410     Py_XDECREF(string1);
   1411     Py_XDECREF(string2);
   1412     Py_XDECREF(retval);
   1413 #ifdef WITH_THREAD
   1414     PyGILState_Release(gilstate);
   1415 #endif
   1416     return result;
   1417 }
   1418 
   1419 static PyObject *
   1420 pysqlite_connection_interrupt(pysqlite_Connection* self, PyObject* args)
   1421 {
   1422     PyObject* retval = NULL;
   1423 
   1424     if (!pysqlite_check_connection(self)) {
   1425         goto finally;
   1426     }
   1427 
   1428     sqlite3_interrupt(self->db);
   1429 
   1430     Py_INCREF(Py_None);
   1431     retval = Py_None;
   1432 
   1433 finally:
   1434     return retval;
   1435 }
   1436 
   1437 /* Function author: Paul Kippes <kippesp (at) gmail.com>
   1438  * Class method of Connection to call the Python function _iterdump
   1439  * of the sqlite3 module.
   1440  */
   1441 static PyObject *
   1442 pysqlite_connection_iterdump(pysqlite_Connection* self, PyObject* args)
   1443 {
   1444     PyObject* retval = NULL;
   1445     PyObject* module = NULL;
   1446     PyObject* module_dict;
   1447     PyObject* pyfn_iterdump;
   1448 
   1449     if (!pysqlite_check_connection(self)) {
   1450         goto finally;
   1451     }
   1452 
   1453     module = PyImport_ImportModule(MODULE_NAME ".dump");
   1454     if (!module) {
   1455         goto finally;
   1456     }
   1457 
   1458     module_dict = PyModule_GetDict(module);
   1459     if (!module_dict) {
   1460         goto finally;
   1461     }
   1462 
   1463     pyfn_iterdump = PyDict_GetItemString(module_dict, "_iterdump");
   1464     if (!pyfn_iterdump) {
   1465         PyErr_SetString(pysqlite_OperationalError, "Failed to obtain _iterdump() reference");
   1466         goto finally;
   1467     }
   1468 
   1469     args = PyTuple_New(1);
   1470     if (!args) {
   1471         goto finally;
   1472     }
   1473     Py_INCREF(self);
   1474     PyTuple_SetItem(args, 0, (PyObject*)self);
   1475     retval = PyObject_CallObject(pyfn_iterdump, args);
   1476 
   1477 finally:
   1478     Py_XDECREF(args);
   1479     Py_XDECREF(module);
   1480     return retval;
   1481 }
   1482 
   1483 static PyObject *
   1484 pysqlite_connection_create_collation(pysqlite_Connection* self, PyObject* args)
   1485 {
   1486     PyObject* callable;
   1487     PyObject* uppercase_name = 0;
   1488     PyObject* name;
   1489     PyObject* retval;
   1490     Py_ssize_t i, len;
   1491     _Py_IDENTIFIER(upper);
   1492     char *uppercase_name_str;
   1493     int rc;
   1494     unsigned int kind;
   1495     void *data;
   1496 
   1497     if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
   1498         goto finally;
   1499     }
   1500 
   1501     if (!PyArg_ParseTuple(args, "UO:create_collation(name, callback)",
   1502                           &name, &callable)) {
   1503         goto finally;
   1504     }
   1505 
   1506     uppercase_name = _PyObject_CallMethodIdObjArgs((PyObject *)&PyUnicode_Type,
   1507                                                    &PyId_upper, name, NULL);
   1508     if (!uppercase_name) {
   1509         goto finally;
   1510     }
   1511 
   1512     if (PyUnicode_READY(uppercase_name))
   1513         goto finally;
   1514     len = PyUnicode_GET_LENGTH(uppercase_name);
   1515     kind = PyUnicode_KIND(uppercase_name);
   1516     data = PyUnicode_DATA(uppercase_name);
   1517     for (i=0; i<len; i++) {
   1518         Py_UCS4 ch = PyUnicode_READ(kind, data, i);
   1519         if ((ch >= '0' && ch <= '9')
   1520          || (ch >= 'A' && ch <= 'Z')
   1521          || (ch == '_'))
   1522         {
   1523             continue;
   1524         } else {
   1525             PyErr_SetString(pysqlite_ProgrammingError, "invalid character in collation name");
   1526             goto finally;
   1527         }
   1528     }
   1529 
   1530     uppercase_name_str = PyUnicode_AsUTF8(uppercase_name);
   1531     if (!uppercase_name_str)
   1532         goto finally;
   1533 
   1534     if (callable != Py_None && !PyCallable_Check(callable)) {
   1535         PyErr_SetString(PyExc_TypeError, "parameter must be callable");
   1536         goto finally;
   1537     }
   1538 
   1539     if (callable != Py_None) {
   1540         if (PyDict_SetItem(self->collations, uppercase_name, callable) == -1)
   1541             goto finally;
   1542     } else {
   1543         if (PyDict_DelItem(self->collations, uppercase_name) == -1)
   1544             goto finally;
   1545     }
   1546 
   1547     rc = sqlite3_create_collation(self->db,
   1548                                   uppercase_name_str,
   1549                                   SQLITE_UTF8,
   1550                                   (callable != Py_None) ? callable : NULL,
   1551                                   (callable != Py_None) ? pysqlite_collation_callback : NULL);
   1552     if (rc != SQLITE_OK) {
   1553         PyDict_DelItem(self->collations, uppercase_name);
   1554         _pysqlite_seterror(self->db, NULL);
   1555         goto finally;
   1556     }
   1557 
   1558 finally:
   1559     Py_XDECREF(uppercase_name);
   1560 
   1561     if (PyErr_Occurred()) {
   1562         retval = NULL;
   1563     } else {
   1564         Py_INCREF(Py_None);
   1565         retval = Py_None;
   1566     }
   1567 
   1568     return retval;
   1569 }
   1570 
   1571 /* Called when the connection is used as a context manager. Returns itself as a
   1572  * convenience to the caller. */
   1573 static PyObject *
   1574 pysqlite_connection_enter(pysqlite_Connection* self, PyObject* args)
   1575 {
   1576     Py_INCREF(self);
   1577     return (PyObject*)self;
   1578 }
   1579 
   1580 /** Called when the connection is used as a context manager. If there was any
   1581  * exception, a rollback takes place; otherwise we commit. */
   1582 static PyObject *
   1583 pysqlite_connection_exit(pysqlite_Connection* self, PyObject* args)
   1584 {
   1585     PyObject* exc_type, *exc_value, *exc_tb;
   1586     char* method_name;
   1587     PyObject* result;
   1588 
   1589     if (!PyArg_ParseTuple(args, "OOO", &exc_type, &exc_value, &exc_tb)) {
   1590         return NULL;
   1591     }
   1592 
   1593     if (exc_type == Py_None && exc_value == Py_None && exc_tb == Py_None) {
   1594         method_name = "commit";
   1595     } else {
   1596         method_name = "rollback";
   1597     }
   1598 
   1599     result = PyObject_CallMethod((PyObject*)self, method_name, NULL);
   1600     if (!result) {
   1601         return NULL;
   1602     }
   1603     Py_DECREF(result);
   1604 
   1605     Py_RETURN_FALSE;
   1606 }
   1607 
   1608 static const char connection_doc[] =
   1609 PyDoc_STR("SQLite database connection object.");
   1610 
   1611 static PyGetSetDef connection_getset[] = {
   1612     {"isolation_level",  (getter)pysqlite_connection_get_isolation_level, (setter)pysqlite_connection_set_isolation_level},
   1613     {"total_changes",  (getter)pysqlite_connection_get_total_changes, (setter)0},
   1614     {"in_transaction",  (getter)pysqlite_connection_get_in_transaction, (setter)0},
   1615     {NULL}
   1616 };
   1617 
   1618 static PyMethodDef connection_methods[] = {
   1619     {"cursor", (PyCFunction)pysqlite_connection_cursor, METH_VARARGS|METH_KEYWORDS,
   1620         PyDoc_STR("Return a cursor for the connection.")},
   1621     {"close", (PyCFunction)pysqlite_connection_close, METH_NOARGS,
   1622         PyDoc_STR("Closes the connection.")},
   1623     {"commit", (PyCFunction)pysqlite_connection_commit, METH_NOARGS,
   1624         PyDoc_STR("Commit the current transaction.")},
   1625     {"rollback", (PyCFunction)pysqlite_connection_rollback, METH_NOARGS,
   1626         PyDoc_STR("Roll back the current transaction.")},
   1627     {"create_function", (PyCFunction)pysqlite_connection_create_function, METH_VARARGS|METH_KEYWORDS,
   1628         PyDoc_STR("Creates a new function. Non-standard.")},
   1629     {"create_aggregate", (PyCFunction)pysqlite_connection_create_aggregate, METH_VARARGS|METH_KEYWORDS,
   1630         PyDoc_STR("Creates a new aggregate. Non-standard.")},
   1631     {"set_authorizer", (PyCFunction)pysqlite_connection_set_authorizer, METH_VARARGS|METH_KEYWORDS,
   1632         PyDoc_STR("Sets authorizer callback. Non-standard.")},
   1633     #ifdef HAVE_LOAD_EXTENSION
   1634     {"enable_load_extension", (PyCFunction)pysqlite_enable_load_extension, METH_VARARGS,
   1635         PyDoc_STR("Enable dynamic loading of SQLite extension modules. Non-standard.")},
   1636     {"load_extension", (PyCFunction)pysqlite_load_extension, METH_VARARGS,
   1637         PyDoc_STR("Load SQLite extension module. Non-standard.")},
   1638     #endif
   1639     {"set_progress_handler", (PyCFunction)pysqlite_connection_set_progress_handler, METH_VARARGS|METH_KEYWORDS,
   1640         PyDoc_STR("Sets progress handler callback. Non-standard.")},
   1641     {"set_trace_callback", (PyCFunction)pysqlite_connection_set_trace_callback, METH_VARARGS|METH_KEYWORDS,
   1642         PyDoc_STR("Sets a trace callback called for each SQL statement (passed as unicode). Non-standard.")},
   1643     {"execute", (PyCFunction)pysqlite_connection_execute, METH_VARARGS,
   1644         PyDoc_STR("Executes a SQL statement. Non-standard.")},
   1645     {"executemany", (PyCFunction)pysqlite_connection_executemany, METH_VARARGS,
   1646         PyDoc_STR("Repeatedly executes a SQL statement. Non-standard.")},
   1647     {"executescript", (PyCFunction)pysqlite_connection_executescript, METH_VARARGS,
   1648         PyDoc_STR("Executes a multiple SQL statements at once. Non-standard.")},
   1649     {"create_collation", (PyCFunction)pysqlite_connection_create_collation, METH_VARARGS,
   1650         PyDoc_STR("Creates a collation function. Non-standard.")},
   1651     {"interrupt", (PyCFunction)pysqlite_connection_interrupt, METH_NOARGS,
   1652         PyDoc_STR("Abort any pending database operation. Non-standard.")},
   1653     {"iterdump", (PyCFunction)pysqlite_connection_iterdump, METH_NOARGS,
   1654         PyDoc_STR("Returns iterator to the dump of the database in an SQL text format. Non-standard.")},
   1655     {"__enter__", (PyCFunction)pysqlite_connection_enter, METH_NOARGS,
   1656         PyDoc_STR("For context manager. Non-standard.")},
   1657     {"__exit__", (PyCFunction)pysqlite_connection_exit, METH_VARARGS,
   1658         PyDoc_STR("For context manager. Non-standard.")},
   1659     {NULL, NULL}
   1660 };
   1661 
   1662 static struct PyMemberDef connection_members[] =
   1663 {
   1664     {"Warning", T_OBJECT, offsetof(pysqlite_Connection, Warning), READONLY},
   1665     {"Error", T_OBJECT, offsetof(pysqlite_Connection, Error), READONLY},
   1666     {"InterfaceError", T_OBJECT, offsetof(pysqlite_Connection, InterfaceError), READONLY},
   1667     {"DatabaseError", T_OBJECT, offsetof(pysqlite_Connection, DatabaseError), READONLY},
   1668     {"DataError", T_OBJECT, offsetof(pysqlite_Connection, DataError), READONLY},
   1669     {"OperationalError", T_OBJECT, offsetof(pysqlite_Connection, OperationalError), READONLY},
   1670     {"IntegrityError", T_OBJECT, offsetof(pysqlite_Connection, IntegrityError), READONLY},
   1671     {"InternalError", T_OBJECT, offsetof(pysqlite_Connection, InternalError), READONLY},
   1672     {"ProgrammingError", T_OBJECT, offsetof(pysqlite_Connection, ProgrammingError), READONLY},
   1673     {"NotSupportedError", T_OBJECT, offsetof(pysqlite_Connection, NotSupportedError), READONLY},
   1674     {"row_factory", T_OBJECT, offsetof(pysqlite_Connection, row_factory)},
   1675     {"text_factory", T_OBJECT, offsetof(pysqlite_Connection, text_factory)},
   1676     {NULL}
   1677 };
   1678 
   1679 PyTypeObject pysqlite_ConnectionType = {
   1680         PyVarObject_HEAD_INIT(NULL, 0)
   1681         MODULE_NAME ".Connection",                      /* tp_name */
   1682         sizeof(pysqlite_Connection),                    /* tp_basicsize */
   1683         0,                                              /* tp_itemsize */
   1684         (destructor)pysqlite_connection_dealloc,        /* tp_dealloc */
   1685         0,                                              /* tp_print */
   1686         0,                                              /* tp_getattr */
   1687         0,                                              /* tp_setattr */
   1688         0,                                              /* tp_reserved */
   1689         0,                                              /* tp_repr */
   1690         0,                                              /* tp_as_number */
   1691         0,                                              /* tp_as_sequence */
   1692         0,                                              /* tp_as_mapping */
   1693         0,                                              /* tp_hash */
   1694         (ternaryfunc)pysqlite_connection_call,          /* tp_call */
   1695         0,                                              /* tp_str */
   1696         0,                                              /* tp_getattro */
   1697         0,                                              /* tp_setattro */
   1698         0,                                              /* tp_as_buffer */
   1699         Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,         /* tp_flags */
   1700         connection_doc,                                 /* tp_doc */
   1701         0,                                              /* tp_traverse */
   1702         0,                                              /* tp_clear */
   1703         0,                                              /* tp_richcompare */
   1704         0,                                              /* tp_weaklistoffset */
   1705         0,                                              /* tp_iter */
   1706         0,                                              /* tp_iternext */
   1707         connection_methods,                             /* tp_methods */
   1708         connection_members,                             /* tp_members */
   1709         connection_getset,                              /* tp_getset */
   1710         0,                                              /* tp_base */
   1711         0,                                              /* tp_dict */
   1712         0,                                              /* tp_descr_get */
   1713         0,                                              /* tp_descr_set */
   1714         0,                                              /* tp_dictoffset */
   1715         (initproc)pysqlite_connection_init,             /* tp_init */
   1716         0,                                              /* tp_alloc */
   1717         0,                                              /* tp_new */
   1718         0                                               /* tp_free */
   1719 };
   1720 
   1721 extern int pysqlite_connection_setup_types(void)
   1722 {
   1723     pysqlite_ConnectionType.tp_new = PyType_GenericNew;
   1724     return PyType_Ready(&pysqlite_ConnectionType);
   1725 }
   1726