17db96d56Sopenharmony_ci/* connection.h - definitions for the connection type
27db96d56Sopenharmony_ci *
37db96d56Sopenharmony_ci * Copyright (C) 2004-2010 Gerhard Häring <gh@ghaering.de>
47db96d56Sopenharmony_ci *
57db96d56Sopenharmony_ci * This file is part of pysqlite.
67db96d56Sopenharmony_ci *
77db96d56Sopenharmony_ci * This software is provided 'as-is', without any express or implied
87db96d56Sopenharmony_ci * warranty.  In no event will the authors be held liable for any damages
97db96d56Sopenharmony_ci * arising from the use of this software.
107db96d56Sopenharmony_ci *
117db96d56Sopenharmony_ci * Permission is granted to anyone to use this software for any purpose,
127db96d56Sopenharmony_ci * including commercial applications, and to alter it and redistribute it
137db96d56Sopenharmony_ci * freely, subject to the following restrictions:
147db96d56Sopenharmony_ci *
157db96d56Sopenharmony_ci * 1. The origin of this software must not be misrepresented; you must not
167db96d56Sopenharmony_ci *    claim that you wrote the original software. If you use this software
177db96d56Sopenharmony_ci *    in a product, an acknowledgment in the product documentation would be
187db96d56Sopenharmony_ci *    appreciated but is not required.
197db96d56Sopenharmony_ci * 2. Altered source versions must be plainly marked as such, and must not be
207db96d56Sopenharmony_ci *    misrepresented as being the original software.
217db96d56Sopenharmony_ci * 3. This notice may not be removed or altered from any source distribution.
227db96d56Sopenharmony_ci */
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci#ifndef PYSQLITE_CONNECTION_H
257db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_H
267db96d56Sopenharmony_ci#define PY_SSIZE_T_CLEAN
277db96d56Sopenharmony_ci#include "Python.h"
287db96d56Sopenharmony_ci#include "pythread.h"
297db96d56Sopenharmony_ci#include "structmember.h"
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci#include "module.h"
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci#include "sqlite3.h"
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_citypedef struct _callback_context
367db96d56Sopenharmony_ci{
377db96d56Sopenharmony_ci    PyObject *callable;
387db96d56Sopenharmony_ci    PyObject *module;
397db96d56Sopenharmony_ci    pysqlite_state *state;
407db96d56Sopenharmony_ci} callback_context;
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_citypedef struct
437db96d56Sopenharmony_ci{
447db96d56Sopenharmony_ci    PyObject_HEAD
457db96d56Sopenharmony_ci    sqlite3 *db;
467db96d56Sopenharmony_ci    pysqlite_state *state;
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci    /* the type detection mode. Only 0, PARSE_DECLTYPES, PARSE_COLNAMES or a
497db96d56Sopenharmony_ci     * bitwise combination thereof makes sense */
507db96d56Sopenharmony_ci    int detect_types;
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci    /* NULL for autocommit, otherwise a string with the isolation level */
537db96d56Sopenharmony_ci    const char *isolation_level;
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci    /* 1 if a check should be performed for each API call if the connection is
567db96d56Sopenharmony_ci     * used from the same thread it was created in */
577db96d56Sopenharmony_ci    int check_same_thread;
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci    int initialized;
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci    /* thread identification of the thread the connection was created in */
627db96d56Sopenharmony_ci    unsigned long thread_ident;
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci    PyObject *statement_cache;
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci    /* Lists of weak references to cursors and blobs used within this connection */
677db96d56Sopenharmony_ci    PyObject *cursors;
687db96d56Sopenharmony_ci    PyObject *blobs;
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci    /* Counters for how many cursors were created in the connection. May be
717db96d56Sopenharmony_ci     * reset to 0 at certain intervals */
727db96d56Sopenharmony_ci    int created_cursors;
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci    PyObject* row_factory;
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci    /* Determines how bytestrings from SQLite are converted to Python objects:
777db96d56Sopenharmony_ci     * - PyUnicode_Type:        Python Unicode objects are constructed from UTF-8 bytestrings
787db96d56Sopenharmony_ci     * - PyBytes_Type:          The bytestrings are returned as-is.
797db96d56Sopenharmony_ci     * - Any custom callable:   Any object returned from the callable called with the bytestring
807db96d56Sopenharmony_ci     *                          as single parameter.
817db96d56Sopenharmony_ci     */
827db96d56Sopenharmony_ci    PyObject* text_factory;
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci    // Remember contexts used by the trace, progress, and authoriser callbacks
857db96d56Sopenharmony_ci    callback_context *trace_ctx;
867db96d56Sopenharmony_ci    callback_context *progress_ctx;
877db96d56Sopenharmony_ci    callback_context *authorizer_ctx;
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci    /* Exception objects: borrowed refs. */
907db96d56Sopenharmony_ci    PyObject* Warning;
917db96d56Sopenharmony_ci    PyObject* Error;
927db96d56Sopenharmony_ci    PyObject* InterfaceError;
937db96d56Sopenharmony_ci    PyObject* DatabaseError;
947db96d56Sopenharmony_ci    PyObject* DataError;
957db96d56Sopenharmony_ci    PyObject* OperationalError;
967db96d56Sopenharmony_ci    PyObject* IntegrityError;
977db96d56Sopenharmony_ci    PyObject* InternalError;
987db96d56Sopenharmony_ci    PyObject* ProgrammingError;
997db96d56Sopenharmony_ci    PyObject* NotSupportedError;
1007db96d56Sopenharmony_ci} pysqlite_Connection;
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ciint pysqlite_check_thread(pysqlite_Connection* self);
1037db96d56Sopenharmony_ciint pysqlite_check_connection(pysqlite_Connection* con);
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ciint pysqlite_connection_setup_types(PyObject *module);
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci#endif
108