1 /* module.c - the module itself
2 *
3 * Copyright (C) 2004-2010 Gerhard Häring <[email protected]>
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 "connection.h"
25 #include "statement.h"
26 #include "cursor.h"
27 #include "prepare_protocol.h"
28 #include "microprotocols.h"
29 #include "row.h"
30 #include "blob.h"
31
32 #if SQLITE_VERSION_NUMBER < 3007015
33 #error "SQLite 3.7.15 or higher required"
34 #endif
35
36 #define clinic_state() (pysqlite_get_state(module))
37 #include "clinic/module.c.h"
38 #undef clinic_state
39
40 /*[clinic input]
41 module _sqlite3
42 [clinic start generated code]*/
43 /*[clinic end generated code: output=da39a3ee5e6b4b0d input=81e330492d57488e]*/
44
45 // NB: This needs to be in sync with the Connection.__init__ docstring.
46 PyDoc_STRVAR(module_connect_doc,
47 "connect($module, /, database, timeout=5.0, detect_types=0,\n"
48 " isolation_level='', check_same_thread=True,\n"
49 " factory=ConnectionType, cached_statements=128, uri=False)\n"
50 "--\n"
51 "\n"
52 "Opens a connection to the SQLite database file database.\n"
53 "\n"
54 "You can use \":memory:\" to open a database connection to a database that resides\n"
55 "in RAM instead of on disk.");
56
57 #define PYSQLITE_CONNECT_METHODDEF \
58 {"connect", _PyCFunction_CAST(module_connect), METH_FASTCALL|METH_KEYWORDS, module_connect_doc},
59
60 static PyObject *
module_connect(PyObject * module,PyObject * const * args,Py_ssize_t nargsf,PyObject * kwnames)61 module_connect(PyObject *module, PyObject *const *args, Py_ssize_t nargsf,
62 PyObject *kwnames)
63 {
64 pysqlite_state *state = pysqlite_get_state(module);
65 PyObject *factory = (PyObject *)state->ConnectionType;
66
67 static const int FACTORY_POS = 5;
68 Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
69 if (nargs > FACTORY_POS) {
70 factory = args[FACTORY_POS];
71 }
72 else if (kwnames != NULL) {
73 for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(kwnames); i++) {
74 PyObject *item = PyTuple_GET_ITEM(kwnames, i); // borrowed ref.
75 if (PyUnicode_CompareWithASCIIString(item, "factory") == 0) {
76 factory = args[nargs + i];
77 break;
78 }
79 }
80 }
81
82 return PyObject_Vectorcall(factory, args, nargsf, kwnames);
83 }
84
85 /*[clinic input]
86 _sqlite3.complete_statement as pysqlite_complete_statement
87
88 statement: str
89
90 Checks if a string contains a complete SQL statement.
91 [clinic start generated code]*/
92
93 static PyObject *
pysqlite_complete_statement_impl(PyObject * module,const char * statement)94 pysqlite_complete_statement_impl(PyObject *module, const char *statement)
95 /*[clinic end generated code: output=e55f1ff1952df558 input=ac45d257375bb828]*/
96 {
97 if (sqlite3_complete(statement)) {
98 return Py_NewRef(Py_True);
99 } else {
100 return Py_NewRef(Py_False);
101 }
102 }
103
104 /*[clinic input]
105 _sqlite3.enable_shared_cache as pysqlite_enable_shared_cache
106
107 do_enable: int
108
109 Enable or disable shared cache mode for the calling thread.
110
111 This method is deprecated and will be removed in Python 3.12.
112 Shared cache is strongly discouraged by the SQLite 3 documentation.
113 If shared cache must be used, open the database in URI mode using
114 the cache=shared query parameter.
115 [clinic start generated code]*/
116
117 static PyObject *
pysqlite_enable_shared_cache_impl(PyObject * module,int do_enable)118 pysqlite_enable_shared_cache_impl(PyObject *module, int do_enable)
119 /*[clinic end generated code: output=259c74eedee1516b input=26e40d5971d3487d]*/
120 {
121 int rc;
122
123 rc = sqlite3_enable_shared_cache(do_enable);
124
125 if (rc != SQLITE_OK) {
126 pysqlite_state *state = pysqlite_get_state(module);
127 PyErr_SetString(state->OperationalError, "Changing the shared_cache flag failed");
128 return NULL;
129 } else {
130 Py_RETURN_NONE;
131 }
132 }
133
134 /*[clinic input]
135 _sqlite3.register_adapter as pysqlite_register_adapter
136
137 type: object(type='PyTypeObject *')
138 adapter as caster: object
139 /
140
141 Register a function to adapt Python objects to SQLite values.
142 [clinic start generated code]*/
143
144 static PyObject *
pysqlite_register_adapter_impl(PyObject * module,PyTypeObject * type,PyObject * caster)145 pysqlite_register_adapter_impl(PyObject *module, PyTypeObject *type,
146 PyObject *caster)
147 /*[clinic end generated code: output=a287e8db18e8af23 input=29a5e0f213030242]*/
148 {
149 int rc;
150
151 /* a basic type is adapted; there's a performance optimization if that's not the case
152 * (99 % of all usages) */
153 if (type == &PyLong_Type || type == &PyFloat_Type
154 || type == &PyUnicode_Type || type == &PyByteArray_Type) {
155 pysqlite_state *state = pysqlite_get_state(module);
156 state->BaseTypeAdapted = 1;
157 }
158
159 pysqlite_state *state = pysqlite_get_state(module);
160 PyObject *protocol = (PyObject *)state->PrepareProtocolType;
161 rc = pysqlite_microprotocols_add(state, type, protocol, caster);
162 if (rc == -1) {
163 return NULL;
164 }
165
166 Py_RETURN_NONE;
167 }
168
169 /*[clinic input]
170 _sqlite3.register_converter as pysqlite_register_converter
171
172 typename as orig_name: unicode
173 converter as callable: object
174 /
175
176 Register a function to convert SQLite values to Python objects.
177 [clinic start generated code]*/
178
179 static PyObject *
pysqlite_register_converter_impl(PyObject * module,PyObject * orig_name,PyObject * callable)180 pysqlite_register_converter_impl(PyObject *module, PyObject *orig_name,
181 PyObject *callable)
182 /*[clinic end generated code: output=a2f2bfeed7230062 input=159a444971b40378]*/
183 {
184 PyObject* name = NULL;
185 PyObject* retval = NULL;
186
187 /* convert the name to upper case */
188 pysqlite_state *state = pysqlite_get_state(module);
189 name = PyObject_CallMethodNoArgs(orig_name, state->str_upper);
190 if (!name) {
191 goto error;
192 }
193
194 if (PyDict_SetItem(state->converters, name, callable) != 0) {
195 goto error;
196 }
197
198 retval = Py_NewRef(Py_None);
199 error:
200 Py_XDECREF(name);
201 return retval;
202 }
203
204 /*[clinic input]
205 _sqlite3.enable_callback_tracebacks as pysqlite_enable_callback_trace
206
207 enable: int
208 /
209
210 Enable or disable callback functions throwing errors to stderr.
211 [clinic start generated code]*/
212
213 static PyObject *
pysqlite_enable_callback_trace_impl(PyObject * module,int enable)214 pysqlite_enable_callback_trace_impl(PyObject *module, int enable)
215 /*[clinic end generated code: output=4ff1d051c698f194 input=cb79d3581eb77c40]*/
216 {
217 pysqlite_state *state = pysqlite_get_state(module);
218 state->enable_callback_tracebacks = enable;
219
220 Py_RETURN_NONE;
221 }
222
223 /*[clinic input]
224 _sqlite3.adapt as pysqlite_adapt
225
226 obj: object
227 proto: object(c_default='(PyObject *)clinic_state()->PrepareProtocolType') = PrepareProtocolType
228 alt: object = NULL
229 /
230
231 Adapt given object to given protocol.
232 [clinic start generated code]*/
233
234 static PyObject *
pysqlite_adapt_impl(PyObject * module,PyObject * obj,PyObject * proto,PyObject * alt)235 pysqlite_adapt_impl(PyObject *module, PyObject *obj, PyObject *proto,
236 PyObject *alt)
237 /*[clinic end generated code: output=0c3927c5fcd23dd9 input=a53dc9993e81e15f]*/
238 {
239 pysqlite_state *state = pysqlite_get_state(module);
240 return pysqlite_microprotocols_adapt(state, obj, proto, alt);
241 }
242
converters_init(PyObject * module)243 static int converters_init(PyObject* module)
244 {
245 pysqlite_state *state = pysqlite_get_state(module);
246 state->converters = PyDict_New();
247 if (state->converters == NULL) {
248 return -1;
249 }
250
251 return PyModule_AddObjectRef(module, "converters", state->converters);
252 }
253
254 static int
load_functools_lru_cache(PyObject * module)255 load_functools_lru_cache(PyObject *module)
256 {
257 PyObject *functools = PyImport_ImportModule("functools");
258 if (functools == NULL) {
259 return -1;
260 }
261
262 pysqlite_state *state = pysqlite_get_state(module);
263 state->lru_cache = PyObject_GetAttrString(functools, "lru_cache");
264 Py_DECREF(functools);
265 if (state->lru_cache == NULL) {
266 return -1;
267 }
268 return 0;
269 }
270
271 static PyMethodDef module_methods[] = {
272 PYSQLITE_ADAPT_METHODDEF
273 PYSQLITE_COMPLETE_STATEMENT_METHODDEF
274 PYSQLITE_CONNECT_METHODDEF
275 PYSQLITE_ENABLE_CALLBACK_TRACE_METHODDEF
276 PYSQLITE_ENABLE_SHARED_CACHE_METHODDEF
277 PYSQLITE_REGISTER_ADAPTER_METHODDEF
278 PYSQLITE_REGISTER_CONVERTER_METHODDEF
279 {NULL, NULL}
280 };
281
282 /* SQLite C API result codes. See also:
283 * - https://www.sqlite.org/c3ref/c_abort_rollback.html
284 * - https://sqlite.org/changes.html#version_3_3_8
285 * - https://sqlite.org/changes.html#version_3_7_16
286 * - https://sqlite.org/changes.html#version_3_7_17
287 * - https://sqlite.org/changes.html#version_3_8_0
288 * - https://sqlite.org/changes.html#version_3_8_3
289 * - https://sqlite.org/changes.html#version_3_14
290 *
291 * Note: the SQLite changelogs rarely mention new result codes, so in order to
292 * keep the 'error_codes' table in sync with SQLite, we must manually inspect
293 * sqlite3.h for every release.
294 *
295 * We keep the SQLITE_VERSION_NUMBER checks in order to easily declutter the
296 * code when we adjust the SQLite version requirement.
297 */
298 static const struct {
299 const char *name;
300 long value;
301 } error_codes[] = {
302 #define DECLARE_ERROR_CODE(code) {#code, code}
303 // Primary result code list
304 DECLARE_ERROR_CODE(SQLITE_ABORT),
305 DECLARE_ERROR_CODE(SQLITE_AUTH),
306 DECLARE_ERROR_CODE(SQLITE_BUSY),
307 DECLARE_ERROR_CODE(SQLITE_CANTOPEN),
308 DECLARE_ERROR_CODE(SQLITE_CONSTRAINT),
309 DECLARE_ERROR_CODE(SQLITE_CORRUPT),
310 DECLARE_ERROR_CODE(SQLITE_DONE),
311 DECLARE_ERROR_CODE(SQLITE_EMPTY),
312 DECLARE_ERROR_CODE(SQLITE_ERROR),
313 DECLARE_ERROR_CODE(SQLITE_FORMAT),
314 DECLARE_ERROR_CODE(SQLITE_FULL),
315 DECLARE_ERROR_CODE(SQLITE_INTERNAL),
316 DECLARE_ERROR_CODE(SQLITE_INTERRUPT),
317 DECLARE_ERROR_CODE(SQLITE_IOERR),
318 DECLARE_ERROR_CODE(SQLITE_LOCKED),
319 DECLARE_ERROR_CODE(SQLITE_MISMATCH),
320 DECLARE_ERROR_CODE(SQLITE_MISUSE),
321 DECLARE_ERROR_CODE(SQLITE_NOLFS),
322 DECLARE_ERROR_CODE(SQLITE_NOMEM),
323 DECLARE_ERROR_CODE(SQLITE_NOTADB),
324 DECLARE_ERROR_CODE(SQLITE_NOTFOUND),
325 DECLARE_ERROR_CODE(SQLITE_OK),
326 DECLARE_ERROR_CODE(SQLITE_PERM),
327 DECLARE_ERROR_CODE(SQLITE_PROTOCOL),
328 DECLARE_ERROR_CODE(SQLITE_RANGE),
329 DECLARE_ERROR_CODE(SQLITE_READONLY),
330 DECLARE_ERROR_CODE(SQLITE_ROW),
331 DECLARE_ERROR_CODE(SQLITE_SCHEMA),
332 DECLARE_ERROR_CODE(SQLITE_TOOBIG),
333 #if SQLITE_VERSION_NUMBER >= 3007017
334 DECLARE_ERROR_CODE(SQLITE_NOTICE),
335 DECLARE_ERROR_CODE(SQLITE_WARNING),
336 #endif
337 // Extended result code list
338 DECLARE_ERROR_CODE(SQLITE_ABORT_ROLLBACK),
339 DECLARE_ERROR_CODE(SQLITE_BUSY_RECOVERY),
340 DECLARE_ERROR_CODE(SQLITE_CANTOPEN_FULLPATH),
341 DECLARE_ERROR_CODE(SQLITE_CANTOPEN_ISDIR),
342 DECLARE_ERROR_CODE(SQLITE_CANTOPEN_NOTEMPDIR),
343 DECLARE_ERROR_CODE(SQLITE_CORRUPT_VTAB),
344 DECLARE_ERROR_CODE(SQLITE_IOERR_ACCESS),
345 DECLARE_ERROR_CODE(SQLITE_IOERR_BLOCKED),
346 DECLARE_ERROR_CODE(SQLITE_IOERR_CHECKRESERVEDLOCK),
347 DECLARE_ERROR_CODE(SQLITE_IOERR_CLOSE),
348 DECLARE_ERROR_CODE(SQLITE_IOERR_DELETE),
349 DECLARE_ERROR_CODE(SQLITE_IOERR_DELETE_NOENT),
350 DECLARE_ERROR_CODE(SQLITE_IOERR_DIR_CLOSE),
351 DECLARE_ERROR_CODE(SQLITE_IOERR_DIR_FSYNC),
352 DECLARE_ERROR_CODE(SQLITE_IOERR_FSTAT),
353 DECLARE_ERROR_CODE(SQLITE_IOERR_FSYNC),
354 DECLARE_ERROR_CODE(SQLITE_IOERR_LOCK),
355 DECLARE_ERROR_CODE(SQLITE_IOERR_NOMEM),
356 DECLARE_ERROR_CODE(SQLITE_IOERR_RDLOCK),
357 DECLARE_ERROR_CODE(SQLITE_IOERR_READ),
358 DECLARE_ERROR_CODE(SQLITE_IOERR_SEEK),
359 DECLARE_ERROR_CODE(SQLITE_IOERR_SHMLOCK),
360 DECLARE_ERROR_CODE(SQLITE_IOERR_SHMMAP),
361 DECLARE_ERROR_CODE(SQLITE_IOERR_SHMOPEN),
362 DECLARE_ERROR_CODE(SQLITE_IOERR_SHMSIZE),
363 DECLARE_ERROR_CODE(SQLITE_IOERR_SHORT_READ),
364 DECLARE_ERROR_CODE(SQLITE_IOERR_TRUNCATE),
365 DECLARE_ERROR_CODE(SQLITE_IOERR_UNLOCK),
366 DECLARE_ERROR_CODE(SQLITE_IOERR_WRITE),
367 DECLARE_ERROR_CODE(SQLITE_LOCKED_SHAREDCACHE),
368 DECLARE_ERROR_CODE(SQLITE_READONLY_CANTLOCK),
369 DECLARE_ERROR_CODE(SQLITE_READONLY_RECOVERY),
370 #if SQLITE_VERSION_NUMBER >= 3007016
371 DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_CHECK),
372 DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_COMMITHOOK),
373 DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_FOREIGNKEY),
374 DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_FUNCTION),
375 DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_NOTNULL),
376 DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_PRIMARYKEY),
377 DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_TRIGGER),
378 DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_UNIQUE),
379 DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_VTAB),
380 DECLARE_ERROR_CODE(SQLITE_READONLY_ROLLBACK),
381 #endif
382 #if SQLITE_VERSION_NUMBER >= 3007017
383 DECLARE_ERROR_CODE(SQLITE_IOERR_MMAP),
384 DECLARE_ERROR_CODE(SQLITE_NOTICE_RECOVER_ROLLBACK),
385 DECLARE_ERROR_CODE(SQLITE_NOTICE_RECOVER_WAL),
386 #endif
387 #if SQLITE_VERSION_NUMBER >= 3008000
388 DECLARE_ERROR_CODE(SQLITE_BUSY_SNAPSHOT),
389 DECLARE_ERROR_CODE(SQLITE_IOERR_GETTEMPPATH),
390 DECLARE_ERROR_CODE(SQLITE_WARNING_AUTOINDEX),
391 #endif
392 #if SQLITE_VERSION_NUMBER >= 3008001
393 DECLARE_ERROR_CODE(SQLITE_CANTOPEN_CONVPATH),
394 DECLARE_ERROR_CODE(SQLITE_IOERR_CONVPATH),
395 #endif
396 #if SQLITE_VERSION_NUMBER >= 3008002
397 DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_ROWID),
398 #endif
399 #if SQLITE_VERSION_NUMBER >= 3008003
400 DECLARE_ERROR_CODE(SQLITE_READONLY_DBMOVED),
401 #endif
402 #if SQLITE_VERSION_NUMBER >= 3008007
403 DECLARE_ERROR_CODE(SQLITE_AUTH_USER),
404 #endif
405 #if SQLITE_VERSION_NUMBER >= 3009000
406 DECLARE_ERROR_CODE(SQLITE_IOERR_VNODE),
407 #endif
408 #if SQLITE_VERSION_NUMBER >= 3010000
409 DECLARE_ERROR_CODE(SQLITE_IOERR_AUTH),
410 #endif
411 #if SQLITE_VERSION_NUMBER >= 3014001
412 DECLARE_ERROR_CODE(SQLITE_OK_LOAD_PERMANENTLY),
413 #endif
414 #if SQLITE_VERSION_NUMBER >= 3021000
415 DECLARE_ERROR_CODE(SQLITE_IOERR_BEGIN_ATOMIC),
416 DECLARE_ERROR_CODE(SQLITE_IOERR_COMMIT_ATOMIC),
417 DECLARE_ERROR_CODE(SQLITE_IOERR_ROLLBACK_ATOMIC),
418 #endif
419 #if SQLITE_VERSION_NUMBER >= 3022000
420 DECLARE_ERROR_CODE(SQLITE_ERROR_MISSING_COLLSEQ),
421 DECLARE_ERROR_CODE(SQLITE_ERROR_RETRY),
422 DECLARE_ERROR_CODE(SQLITE_READONLY_CANTINIT),
423 DECLARE_ERROR_CODE(SQLITE_READONLY_DIRECTORY),
424 #endif
425 #if SQLITE_VERSION_NUMBER >= 3024000
426 DECLARE_ERROR_CODE(SQLITE_CORRUPT_SEQUENCE),
427 DECLARE_ERROR_CODE(SQLITE_LOCKED_VTAB),
428 #endif
429 #if SQLITE_VERSION_NUMBER >= 3025000
430 DECLARE_ERROR_CODE(SQLITE_CANTOPEN_DIRTYWAL),
431 DECLARE_ERROR_CODE(SQLITE_ERROR_SNAPSHOT),
432 #endif
433 #if SQLITE_VERSION_NUMBER >= 3031000
434 DECLARE_ERROR_CODE(SQLITE_CANTOPEN_SYMLINK),
435 DECLARE_ERROR_CODE(SQLITE_CONSTRAINT_PINNED),
436 DECLARE_ERROR_CODE(SQLITE_OK_SYMLINK),
437 #endif
438 #if SQLITE_VERSION_NUMBER >= 3032000
439 DECLARE_ERROR_CODE(SQLITE_BUSY_TIMEOUT),
440 DECLARE_ERROR_CODE(SQLITE_CORRUPT_INDEX),
441 DECLARE_ERROR_CODE(SQLITE_IOERR_DATA),
442 #endif
443 #if SQLITE_VERSION_NUMBER >= 3034000
444 DECLARE_ERROR_CODE(SQLITE_IOERR_CORRUPTFS),
445 #endif
446 #undef DECLARE_ERROR_CODE
447 {NULL, 0},
448 };
449
450 static int
add_error_constants(PyObject * module)451 add_error_constants(PyObject *module)
452 {
453 for (int i = 0; error_codes[i].name != NULL; i++) {
454 const char *name = error_codes[i].name;
455 const long value = error_codes[i].value;
456 if (PyModule_AddIntConstant(module, name, value) < 0) {
457 return -1;
458 }
459 }
460 return 0;
461 }
462
463 const char *
pysqlite_error_name(int rc)464 pysqlite_error_name(int rc)
465 {
466 for (int i = 0; error_codes[i].name != NULL; i++) {
467 if (error_codes[i].value == rc) {
468 return error_codes[i].name;
469 }
470 }
471 // No error code matched.
472 return NULL;
473 }
474
475 static int
add_integer_constants(PyObject * module)476 add_integer_constants(PyObject *module) {
477 #define ADD_INT(ival) \
478 do { \
479 if (PyModule_AddIntConstant(module, #ival, ival) < 0) { \
480 return -1; \
481 } \
482 } while (0); \
483
484 ADD_INT(PARSE_DECLTYPES);
485 ADD_INT(PARSE_COLNAMES);
486 ADD_INT(SQLITE_DENY);
487 ADD_INT(SQLITE_IGNORE);
488 ADD_INT(SQLITE_CREATE_INDEX);
489 ADD_INT(SQLITE_CREATE_TABLE);
490 ADD_INT(SQLITE_CREATE_TEMP_INDEX);
491 ADD_INT(SQLITE_CREATE_TEMP_TABLE);
492 ADD_INT(SQLITE_CREATE_TEMP_TRIGGER);
493 ADD_INT(SQLITE_CREATE_TEMP_VIEW);
494 ADD_INT(SQLITE_CREATE_TRIGGER);
495 ADD_INT(SQLITE_CREATE_VIEW);
496 ADD_INT(SQLITE_DELETE);
497 ADD_INT(SQLITE_DROP_INDEX);
498 ADD_INT(SQLITE_DROP_TABLE);
499 ADD_INT(SQLITE_DROP_TEMP_INDEX);
500 ADD_INT(SQLITE_DROP_TEMP_TABLE);
501 ADD_INT(SQLITE_DROP_TEMP_TRIGGER);
502 ADD_INT(SQLITE_DROP_TEMP_VIEW);
503 ADD_INT(SQLITE_DROP_TRIGGER);
504 ADD_INT(SQLITE_DROP_VIEW);
505 ADD_INT(SQLITE_INSERT);
506 ADD_INT(SQLITE_PRAGMA);
507 ADD_INT(SQLITE_READ);
508 ADD_INT(SQLITE_SELECT);
509 ADD_INT(SQLITE_TRANSACTION);
510 ADD_INT(SQLITE_UPDATE);
511 ADD_INT(SQLITE_ATTACH);
512 ADD_INT(SQLITE_DETACH);
513 ADD_INT(SQLITE_ALTER_TABLE);
514 ADD_INT(SQLITE_REINDEX);
515 ADD_INT(SQLITE_ANALYZE);
516 ADD_INT(SQLITE_CREATE_VTABLE);
517 ADD_INT(SQLITE_DROP_VTABLE);
518 ADD_INT(SQLITE_FUNCTION);
519 ADD_INT(SQLITE_SAVEPOINT);
520 #if SQLITE_VERSION_NUMBER >= 3008003
521 ADD_INT(SQLITE_RECURSIVE);
522 #endif
523 // Run-time limit categories
524 ADD_INT(SQLITE_LIMIT_LENGTH);
525 ADD_INT(SQLITE_LIMIT_SQL_LENGTH);
526 ADD_INT(SQLITE_LIMIT_COLUMN);
527 ADD_INT(SQLITE_LIMIT_EXPR_DEPTH);
528 ADD_INT(SQLITE_LIMIT_COMPOUND_SELECT);
529 ADD_INT(SQLITE_LIMIT_VDBE_OP);
530 ADD_INT(SQLITE_LIMIT_FUNCTION_ARG);
531 ADD_INT(SQLITE_LIMIT_ATTACHED);
532 ADD_INT(SQLITE_LIMIT_LIKE_PATTERN_LENGTH);
533 ADD_INT(SQLITE_LIMIT_VARIABLE_NUMBER);
534 ADD_INT(SQLITE_LIMIT_TRIGGER_DEPTH);
535 #if SQLITE_VERSION_NUMBER >= 3008007
536 ADD_INT(SQLITE_LIMIT_WORKER_THREADS);
537 #endif
538 #undef ADD_INT
539 return 0;
540 }
541
542 /* Convert SQLite default threading mode (as set by the compile-time constant
543 * SQLITE_THREADSAFE) to the corresponding DB-API 2.0 (PEP 249) threadsafety
544 * level. */
545 static int
get_threadsafety(pysqlite_state * state)546 get_threadsafety(pysqlite_state *state)
547 {
548 int mode = sqlite3_threadsafe();
549 switch (mode) {
550 case 0: // Single-thread mode; threads may not share the module.
551 return 0;
552 case 1: // Serialized mode; threads may share the module,
553 return 3; // connections, and cursors.
554 case 2: // Multi-thread mode; threads may share the module, but not
555 return 1; // connections.
556 default:
557 PyErr_Format(state->InterfaceError,
558 "Unable to interpret SQLite threadsafety mode. Got %d, "
559 "expected 0, 1, or 2", mode);
560 return -1;
561 }
562 }
563
564 static int
module_traverse(PyObject * module,visitproc visit,void * arg)565 module_traverse(PyObject *module, visitproc visit, void *arg)
566 {
567 pysqlite_state *state = pysqlite_get_state(module);
568
569 // Exceptions
570 Py_VISIT(state->DataError);
571 Py_VISIT(state->DatabaseError);
572 Py_VISIT(state->Error);
573 Py_VISIT(state->IntegrityError);
574 Py_VISIT(state->InterfaceError);
575 Py_VISIT(state->InternalError);
576 Py_VISIT(state->NotSupportedError);
577 Py_VISIT(state->OperationalError);
578 Py_VISIT(state->ProgrammingError);
579 Py_VISIT(state->Warning);
580
581 // Types
582 Py_VISIT(state->BlobType);
583 Py_VISIT(state->ConnectionType);
584 Py_VISIT(state->CursorType);
585 Py_VISIT(state->PrepareProtocolType);
586 Py_VISIT(state->RowType);
587 Py_VISIT(state->StatementType);
588
589 // Misc
590 Py_VISIT(state->converters);
591 Py_VISIT(state->lru_cache);
592 Py_VISIT(state->psyco_adapters);
593
594 return 0;
595 }
596
597 static int
module_clear(PyObject * module)598 module_clear(PyObject *module)
599 {
600 pysqlite_state *state = pysqlite_get_state(module);
601
602 // Exceptions
603 Py_CLEAR(state->DataError);
604 Py_CLEAR(state->DatabaseError);
605 Py_CLEAR(state->Error);
606 Py_CLEAR(state->IntegrityError);
607 Py_CLEAR(state->InterfaceError);
608 Py_CLEAR(state->InternalError);
609 Py_CLEAR(state->NotSupportedError);
610 Py_CLEAR(state->OperationalError);
611 Py_CLEAR(state->ProgrammingError);
612 Py_CLEAR(state->Warning);
613
614 // Types
615 Py_CLEAR(state->BlobType);
616 Py_CLEAR(state->ConnectionType);
617 Py_CLEAR(state->CursorType);
618 Py_CLEAR(state->PrepareProtocolType);
619 Py_CLEAR(state->RowType);
620 Py_CLEAR(state->StatementType);
621
622 // Misc
623 Py_CLEAR(state->converters);
624 Py_CLEAR(state->lru_cache);
625 Py_CLEAR(state->psyco_adapters);
626
627 // Interned strings
628 Py_CLEAR(state->str___adapt__);
629 Py_CLEAR(state->str___conform__);
630 Py_CLEAR(state->str_executescript);
631 Py_CLEAR(state->str_finalize);
632 Py_CLEAR(state->str_inverse);
633 Py_CLEAR(state->str_step);
634 Py_CLEAR(state->str_upper);
635 Py_CLEAR(state->str_value);
636
637 return 0;
638 }
639
640 static void
module_free(void * module)641 module_free(void *module)
642 {
643 module_clear((PyObject *)module);
644 }
645
646 #define ADD_TYPE(module, type) \
647 do { \
648 if (PyModule_AddType(module, type) < 0) { \
649 goto error; \
650 } \
651 } while (0)
652
653 #define ADD_EXCEPTION(module, state, exc, base) \
654 do { \
655 state->exc = PyErr_NewException(MODULE_NAME "." #exc, base, NULL); \
656 if (state->exc == NULL) { \
657 goto error; \
658 } \
659 ADD_TYPE(module, (PyTypeObject *)state->exc); \
660 } while (0)
661
662 #define ADD_INTERNED(state, string) \
663 do { \
664 PyObject *tmp = PyUnicode_InternFromString(#string); \
665 if (tmp == NULL) { \
666 goto error; \
667 } \
668 state->str_ ## string = tmp; \
669 } while (0)
670
671 static int
module_exec(PyObject * module)672 module_exec(PyObject *module)
673 {
674 if (sqlite3_libversion_number() < 3007015) {
675 PyErr_SetString(PyExc_ImportError, MODULE_NAME ": SQLite 3.7.15 or higher required");
676 return -1;
677 }
678
679 int rc = sqlite3_initialize();
680 if (rc != SQLITE_OK) {
681 PyErr_SetString(PyExc_ImportError, sqlite3_errstr(rc));
682 return -1;
683 }
684
685 if ((pysqlite_row_setup_types(module) < 0) ||
686 (pysqlite_cursor_setup_types(module) < 0) ||
687 (pysqlite_connection_setup_types(module) < 0) ||
688 (pysqlite_statement_setup_types(module) < 0) ||
689 (pysqlite_prepare_protocol_setup_types(module) < 0) ||
690 (pysqlite_blob_setup_types(module) < 0)
691 ) {
692 goto error;
693 }
694
695 pysqlite_state *state = pysqlite_get_state(module);
696 ADD_TYPE(module, state->BlobType);
697 ADD_TYPE(module, state->ConnectionType);
698 ADD_TYPE(module, state->CursorType);
699 ADD_TYPE(module, state->PrepareProtocolType);
700 ADD_TYPE(module, state->RowType);
701
702 /*** Create DB-API Exception hierarchy */
703 ADD_EXCEPTION(module, state, Error, PyExc_Exception);
704 ADD_EXCEPTION(module, state, Warning, PyExc_Exception);
705
706 /* Error subclasses */
707 ADD_EXCEPTION(module, state, InterfaceError, state->Error);
708 ADD_EXCEPTION(module, state, DatabaseError, state->Error);
709
710 /* DatabaseError subclasses */
711 ADD_EXCEPTION(module, state, InternalError, state->DatabaseError);
712 ADD_EXCEPTION(module, state, OperationalError, state->DatabaseError);
713 ADD_EXCEPTION(module, state, ProgrammingError, state->DatabaseError);
714 ADD_EXCEPTION(module, state, IntegrityError, state->DatabaseError);
715 ADD_EXCEPTION(module, state, DataError, state->DatabaseError);
716 ADD_EXCEPTION(module, state, NotSupportedError, state->DatabaseError);
717
718 /* Add interned strings */
719 ADD_INTERNED(state, __adapt__);
720 ADD_INTERNED(state, __conform__);
721 ADD_INTERNED(state, executescript);
722 ADD_INTERNED(state, finalize);
723 ADD_INTERNED(state, inverse);
724 ADD_INTERNED(state, step);
725 ADD_INTERNED(state, upper);
726 ADD_INTERNED(state, value);
727
728 /* Set error constants */
729 if (add_error_constants(module) < 0) {
730 goto error;
731 }
732
733 /* Set integer constants */
734 if (add_integer_constants(module) < 0) {
735 goto error;
736 }
737
738 if (PyModule_AddStringConstant(module, "version", PYSQLITE_VERSION) < 0) {
739 goto error;
740 }
741
742 if (PyModule_AddStringConstant(module, "sqlite_version", sqlite3_libversion())) {
743 goto error;
744 }
745
746 int threadsafety = get_threadsafety(state);
747 if (threadsafety < 0) {
748 goto error;
749 }
750 if (PyModule_AddIntConstant(module, "threadsafety", threadsafety) < 0) {
751 goto error;
752 }
753
754 /* initialize microprotocols layer */
755 if (pysqlite_microprotocols_init(module) < 0) {
756 goto error;
757 }
758
759 /* initialize the default converters */
760 if (converters_init(module) < 0) {
761 goto error;
762 }
763
764 if (load_functools_lru_cache(module) < 0) {
765 goto error;
766 }
767
768 return 0;
769
770 error:
771 sqlite3_shutdown();
772 return -1;
773 }
774
775 static struct PyModuleDef_Slot module_slots[] = {
776 {Py_mod_exec, module_exec},
777 {0, NULL},
778 };
779
780 struct PyModuleDef _sqlite3module = {
781 .m_base = PyModuleDef_HEAD_INIT,
782 .m_name = "_sqlite3",
783 .m_size = sizeof(pysqlite_state),
784 .m_methods = module_methods,
785 .m_slots = module_slots,
786 .m_traverse = module_traverse,
787 .m_clear = module_clear,
788 .m_free = module_free,
789 };
790
791 PyMODINIT_FUNC
PyInit__sqlite3(void)792 PyInit__sqlite3(void)
793 {
794 return PyModuleDef_Init(&_sqlite3module);
795 }
796