17db96d56Sopenharmony_ci/*[clinic input] 27db96d56Sopenharmony_cipreserve 37db96d56Sopenharmony_ci[clinic start generated code]*/ 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_cistatic int 67db96d56Sopenharmony_cipysqlite_connection_init_impl(pysqlite_Connection *self, PyObject *database, 77db96d56Sopenharmony_ci double timeout, int detect_types, 87db96d56Sopenharmony_ci const char *isolation_level, 97db96d56Sopenharmony_ci int check_same_thread, PyObject *factory, 107db96d56Sopenharmony_ci int cache_size, int uri); 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_cistatic int 137db96d56Sopenharmony_cipysqlite_connection_init(PyObject *self, PyObject *args, PyObject *kwargs) 147db96d56Sopenharmony_ci{ 157db96d56Sopenharmony_ci int return_value = -1; 167db96d56Sopenharmony_ci static const char * const _keywords[] = {"database", "timeout", "detect_types", "isolation_level", "check_same_thread", "factory", "cached_statements", "uri", NULL}; 177db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "Connection", 0}; 187db96d56Sopenharmony_ci PyObject *argsbuf[8]; 197db96d56Sopenharmony_ci PyObject * const *fastargs; 207db96d56Sopenharmony_ci Py_ssize_t nargs = PyTuple_GET_SIZE(args); 217db96d56Sopenharmony_ci Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1; 227db96d56Sopenharmony_ci PyObject *database; 237db96d56Sopenharmony_ci double timeout = 5.0; 247db96d56Sopenharmony_ci int detect_types = 0; 257db96d56Sopenharmony_ci const char *isolation_level = ""; 267db96d56Sopenharmony_ci int check_same_thread = 1; 277db96d56Sopenharmony_ci PyObject *factory = (PyObject*)clinic_state()->ConnectionType; 287db96d56Sopenharmony_ci int cache_size = 128; 297db96d56Sopenharmony_ci int uri = 0; 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 1, 8, 0, argsbuf); 327db96d56Sopenharmony_ci if (!fastargs) { 337db96d56Sopenharmony_ci goto exit; 347db96d56Sopenharmony_ci } 357db96d56Sopenharmony_ci database = fastargs[0]; 367db96d56Sopenharmony_ci if (!noptargs) { 377db96d56Sopenharmony_ci goto skip_optional_pos; 387db96d56Sopenharmony_ci } 397db96d56Sopenharmony_ci if (fastargs[1]) { 407db96d56Sopenharmony_ci if (PyFloat_CheckExact(fastargs[1])) { 417db96d56Sopenharmony_ci timeout = PyFloat_AS_DOUBLE(fastargs[1]); 427db96d56Sopenharmony_ci } 437db96d56Sopenharmony_ci else 447db96d56Sopenharmony_ci { 457db96d56Sopenharmony_ci timeout = PyFloat_AsDouble(fastargs[1]); 467db96d56Sopenharmony_ci if (timeout == -1.0 && PyErr_Occurred()) { 477db96d56Sopenharmony_ci goto exit; 487db96d56Sopenharmony_ci } 497db96d56Sopenharmony_ci } 507db96d56Sopenharmony_ci if (!--noptargs) { 517db96d56Sopenharmony_ci goto skip_optional_pos; 527db96d56Sopenharmony_ci } 537db96d56Sopenharmony_ci } 547db96d56Sopenharmony_ci if (fastargs[2]) { 557db96d56Sopenharmony_ci detect_types = _PyLong_AsInt(fastargs[2]); 567db96d56Sopenharmony_ci if (detect_types == -1 && PyErr_Occurred()) { 577db96d56Sopenharmony_ci goto exit; 587db96d56Sopenharmony_ci } 597db96d56Sopenharmony_ci if (!--noptargs) { 607db96d56Sopenharmony_ci goto skip_optional_pos; 617db96d56Sopenharmony_ci } 627db96d56Sopenharmony_ci } 637db96d56Sopenharmony_ci if (fastargs[3]) { 647db96d56Sopenharmony_ci if (!isolation_level_converter(fastargs[3], &isolation_level)) { 657db96d56Sopenharmony_ci goto exit; 667db96d56Sopenharmony_ci } 677db96d56Sopenharmony_ci if (!--noptargs) { 687db96d56Sopenharmony_ci goto skip_optional_pos; 697db96d56Sopenharmony_ci } 707db96d56Sopenharmony_ci } 717db96d56Sopenharmony_ci if (fastargs[4]) { 727db96d56Sopenharmony_ci check_same_thread = _PyLong_AsInt(fastargs[4]); 737db96d56Sopenharmony_ci if (check_same_thread == -1 && PyErr_Occurred()) { 747db96d56Sopenharmony_ci goto exit; 757db96d56Sopenharmony_ci } 767db96d56Sopenharmony_ci if (!--noptargs) { 777db96d56Sopenharmony_ci goto skip_optional_pos; 787db96d56Sopenharmony_ci } 797db96d56Sopenharmony_ci } 807db96d56Sopenharmony_ci if (fastargs[5]) { 817db96d56Sopenharmony_ci factory = fastargs[5]; 827db96d56Sopenharmony_ci if (!--noptargs) { 837db96d56Sopenharmony_ci goto skip_optional_pos; 847db96d56Sopenharmony_ci } 857db96d56Sopenharmony_ci } 867db96d56Sopenharmony_ci if (fastargs[6]) { 877db96d56Sopenharmony_ci cache_size = _PyLong_AsInt(fastargs[6]); 887db96d56Sopenharmony_ci if (cache_size == -1 && PyErr_Occurred()) { 897db96d56Sopenharmony_ci goto exit; 907db96d56Sopenharmony_ci } 917db96d56Sopenharmony_ci if (!--noptargs) { 927db96d56Sopenharmony_ci goto skip_optional_pos; 937db96d56Sopenharmony_ci } 947db96d56Sopenharmony_ci } 957db96d56Sopenharmony_ci uri = PyObject_IsTrue(fastargs[7]); 967db96d56Sopenharmony_ci if (uri < 0) { 977db96d56Sopenharmony_ci goto exit; 987db96d56Sopenharmony_ci } 997db96d56Sopenharmony_ciskip_optional_pos: 1007db96d56Sopenharmony_ci return_value = pysqlite_connection_init_impl((pysqlite_Connection *)self, database, timeout, detect_types, isolation_level, check_same_thread, factory, cache_size, uri); 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ciexit: 1037db96d56Sopenharmony_ci return return_value; 1047db96d56Sopenharmony_ci} 1057db96d56Sopenharmony_ci 1067db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_cursor__doc__, 1077db96d56Sopenharmony_ci"cursor($self, /, factory=<unrepresentable>)\n" 1087db96d56Sopenharmony_ci"--\n" 1097db96d56Sopenharmony_ci"\n" 1107db96d56Sopenharmony_ci"Return a cursor for the connection."); 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_CURSOR_METHODDEF \ 1137db96d56Sopenharmony_ci {"cursor", _PyCFunction_CAST(pysqlite_connection_cursor), METH_FASTCALL|METH_KEYWORDS, pysqlite_connection_cursor__doc__}, 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_cistatic PyObject * 1167db96d56Sopenharmony_cipysqlite_connection_cursor_impl(pysqlite_Connection *self, PyObject *factory); 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_cistatic PyObject * 1197db96d56Sopenharmony_cipysqlite_connection_cursor(pysqlite_Connection *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 1207db96d56Sopenharmony_ci{ 1217db96d56Sopenharmony_ci PyObject *return_value = NULL; 1227db96d56Sopenharmony_ci static const char * const _keywords[] = {"factory", NULL}; 1237db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "cursor", 0}; 1247db96d56Sopenharmony_ci PyObject *argsbuf[1]; 1257db96d56Sopenharmony_ci Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0; 1267db96d56Sopenharmony_ci PyObject *factory = NULL; 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf); 1297db96d56Sopenharmony_ci if (!args) { 1307db96d56Sopenharmony_ci goto exit; 1317db96d56Sopenharmony_ci } 1327db96d56Sopenharmony_ci if (!noptargs) { 1337db96d56Sopenharmony_ci goto skip_optional_pos; 1347db96d56Sopenharmony_ci } 1357db96d56Sopenharmony_ci factory = args[0]; 1367db96d56Sopenharmony_ciskip_optional_pos: 1377db96d56Sopenharmony_ci return_value = pysqlite_connection_cursor_impl(self, factory); 1387db96d56Sopenharmony_ci 1397db96d56Sopenharmony_ciexit: 1407db96d56Sopenharmony_ci return return_value; 1417db96d56Sopenharmony_ci} 1427db96d56Sopenharmony_ci 1437db96d56Sopenharmony_ciPyDoc_STRVAR(blobopen__doc__, 1447db96d56Sopenharmony_ci"blobopen($self, table, column, row, /, *, readonly=False, name=\'main\')\n" 1457db96d56Sopenharmony_ci"--\n" 1467db96d56Sopenharmony_ci"\n" 1477db96d56Sopenharmony_ci"Open and return a BLOB object.\n" 1487db96d56Sopenharmony_ci"\n" 1497db96d56Sopenharmony_ci" table\n" 1507db96d56Sopenharmony_ci" Table name.\n" 1517db96d56Sopenharmony_ci" column\n" 1527db96d56Sopenharmony_ci" Column name.\n" 1537db96d56Sopenharmony_ci" row\n" 1547db96d56Sopenharmony_ci" Row index.\n" 1557db96d56Sopenharmony_ci" readonly\n" 1567db96d56Sopenharmony_ci" Open the BLOB without write permissions.\n" 1577db96d56Sopenharmony_ci" name\n" 1587db96d56Sopenharmony_ci" Database name."); 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci#define BLOBOPEN_METHODDEF \ 1617db96d56Sopenharmony_ci {"blobopen", _PyCFunction_CAST(blobopen), METH_FASTCALL|METH_KEYWORDS, blobopen__doc__}, 1627db96d56Sopenharmony_ci 1637db96d56Sopenharmony_cistatic PyObject * 1647db96d56Sopenharmony_ciblobopen_impl(pysqlite_Connection *self, const char *table, const char *col, 1657db96d56Sopenharmony_ci sqlite3_int64 row, int readonly, const char *name); 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_cistatic PyObject * 1687db96d56Sopenharmony_ciblobopen(pysqlite_Connection *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 1697db96d56Sopenharmony_ci{ 1707db96d56Sopenharmony_ci PyObject *return_value = NULL; 1717db96d56Sopenharmony_ci static const char * const _keywords[] = {"", "", "", "readonly", "name", NULL}; 1727db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "blobopen", 0}; 1737db96d56Sopenharmony_ci PyObject *argsbuf[5]; 1747db96d56Sopenharmony_ci Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3; 1757db96d56Sopenharmony_ci const char *table; 1767db96d56Sopenharmony_ci const char *col; 1777db96d56Sopenharmony_ci sqlite3_int64 row; 1787db96d56Sopenharmony_ci int readonly = 0; 1797db96d56Sopenharmony_ci const char *name = "main"; 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf); 1827db96d56Sopenharmony_ci if (!args) { 1837db96d56Sopenharmony_ci goto exit; 1847db96d56Sopenharmony_ci } 1857db96d56Sopenharmony_ci if (!PyUnicode_Check(args[0])) { 1867db96d56Sopenharmony_ci _PyArg_BadArgument("blobopen", "argument 1", "str", args[0]); 1877db96d56Sopenharmony_ci goto exit; 1887db96d56Sopenharmony_ci } 1897db96d56Sopenharmony_ci Py_ssize_t table_length; 1907db96d56Sopenharmony_ci table = PyUnicode_AsUTF8AndSize(args[0], &table_length); 1917db96d56Sopenharmony_ci if (table == NULL) { 1927db96d56Sopenharmony_ci goto exit; 1937db96d56Sopenharmony_ci } 1947db96d56Sopenharmony_ci if (strlen(table) != (size_t)table_length) { 1957db96d56Sopenharmony_ci PyErr_SetString(PyExc_ValueError, "embedded null character"); 1967db96d56Sopenharmony_ci goto exit; 1977db96d56Sopenharmony_ci } 1987db96d56Sopenharmony_ci if (!PyUnicode_Check(args[1])) { 1997db96d56Sopenharmony_ci _PyArg_BadArgument("blobopen", "argument 2", "str", args[1]); 2007db96d56Sopenharmony_ci goto exit; 2017db96d56Sopenharmony_ci } 2027db96d56Sopenharmony_ci Py_ssize_t col_length; 2037db96d56Sopenharmony_ci col = PyUnicode_AsUTF8AndSize(args[1], &col_length); 2047db96d56Sopenharmony_ci if (col == NULL) { 2057db96d56Sopenharmony_ci goto exit; 2067db96d56Sopenharmony_ci } 2077db96d56Sopenharmony_ci if (strlen(col) != (size_t)col_length) { 2087db96d56Sopenharmony_ci PyErr_SetString(PyExc_ValueError, "embedded null character"); 2097db96d56Sopenharmony_ci goto exit; 2107db96d56Sopenharmony_ci } 2117db96d56Sopenharmony_ci if (!sqlite3_int64_converter(args[2], &row)) { 2127db96d56Sopenharmony_ci goto exit; 2137db96d56Sopenharmony_ci } 2147db96d56Sopenharmony_ci if (!noptargs) { 2157db96d56Sopenharmony_ci goto skip_optional_kwonly; 2167db96d56Sopenharmony_ci } 2177db96d56Sopenharmony_ci if (args[3]) { 2187db96d56Sopenharmony_ci readonly = _PyLong_AsInt(args[3]); 2197db96d56Sopenharmony_ci if (readonly == -1 && PyErr_Occurred()) { 2207db96d56Sopenharmony_ci goto exit; 2217db96d56Sopenharmony_ci } 2227db96d56Sopenharmony_ci if (!--noptargs) { 2237db96d56Sopenharmony_ci goto skip_optional_kwonly; 2247db96d56Sopenharmony_ci } 2257db96d56Sopenharmony_ci } 2267db96d56Sopenharmony_ci if (!PyUnicode_Check(args[4])) { 2277db96d56Sopenharmony_ci _PyArg_BadArgument("blobopen", "argument 'name'", "str", args[4]); 2287db96d56Sopenharmony_ci goto exit; 2297db96d56Sopenharmony_ci } 2307db96d56Sopenharmony_ci Py_ssize_t name_length; 2317db96d56Sopenharmony_ci name = PyUnicode_AsUTF8AndSize(args[4], &name_length); 2327db96d56Sopenharmony_ci if (name == NULL) { 2337db96d56Sopenharmony_ci goto exit; 2347db96d56Sopenharmony_ci } 2357db96d56Sopenharmony_ci if (strlen(name) != (size_t)name_length) { 2367db96d56Sopenharmony_ci PyErr_SetString(PyExc_ValueError, "embedded null character"); 2377db96d56Sopenharmony_ci goto exit; 2387db96d56Sopenharmony_ci } 2397db96d56Sopenharmony_ciskip_optional_kwonly: 2407db96d56Sopenharmony_ci return_value = blobopen_impl(self, table, col, row, readonly, name); 2417db96d56Sopenharmony_ci 2427db96d56Sopenharmony_ciexit: 2437db96d56Sopenharmony_ci return return_value; 2447db96d56Sopenharmony_ci} 2457db96d56Sopenharmony_ci 2467db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_close__doc__, 2477db96d56Sopenharmony_ci"close($self, /)\n" 2487db96d56Sopenharmony_ci"--\n" 2497db96d56Sopenharmony_ci"\n" 2507db96d56Sopenharmony_ci"Close the database connection.\n" 2517db96d56Sopenharmony_ci"\n" 2527db96d56Sopenharmony_ci"Any pending transaction is not committed implicitly."); 2537db96d56Sopenharmony_ci 2547db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_CLOSE_METHODDEF \ 2557db96d56Sopenharmony_ci {"close", (PyCFunction)pysqlite_connection_close, METH_NOARGS, pysqlite_connection_close__doc__}, 2567db96d56Sopenharmony_ci 2577db96d56Sopenharmony_cistatic PyObject * 2587db96d56Sopenharmony_cipysqlite_connection_close_impl(pysqlite_Connection *self); 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_cistatic PyObject * 2617db96d56Sopenharmony_cipysqlite_connection_close(pysqlite_Connection *self, PyObject *Py_UNUSED(ignored)) 2627db96d56Sopenharmony_ci{ 2637db96d56Sopenharmony_ci return pysqlite_connection_close_impl(self); 2647db96d56Sopenharmony_ci} 2657db96d56Sopenharmony_ci 2667db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_commit__doc__, 2677db96d56Sopenharmony_ci"commit($self, /)\n" 2687db96d56Sopenharmony_ci"--\n" 2697db96d56Sopenharmony_ci"\n" 2707db96d56Sopenharmony_ci"Commit any pending transaction to the database.\n" 2717db96d56Sopenharmony_ci"\n" 2727db96d56Sopenharmony_ci"If there is no open transaction, this method is a no-op."); 2737db96d56Sopenharmony_ci 2747db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_COMMIT_METHODDEF \ 2757db96d56Sopenharmony_ci {"commit", (PyCFunction)pysqlite_connection_commit, METH_NOARGS, pysqlite_connection_commit__doc__}, 2767db96d56Sopenharmony_ci 2777db96d56Sopenharmony_cistatic PyObject * 2787db96d56Sopenharmony_cipysqlite_connection_commit_impl(pysqlite_Connection *self); 2797db96d56Sopenharmony_ci 2807db96d56Sopenharmony_cistatic PyObject * 2817db96d56Sopenharmony_cipysqlite_connection_commit(pysqlite_Connection *self, PyObject *Py_UNUSED(ignored)) 2827db96d56Sopenharmony_ci{ 2837db96d56Sopenharmony_ci return pysqlite_connection_commit_impl(self); 2847db96d56Sopenharmony_ci} 2857db96d56Sopenharmony_ci 2867db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_rollback__doc__, 2877db96d56Sopenharmony_ci"rollback($self, /)\n" 2887db96d56Sopenharmony_ci"--\n" 2897db96d56Sopenharmony_ci"\n" 2907db96d56Sopenharmony_ci"Roll back to the start of any pending transaction.\n" 2917db96d56Sopenharmony_ci"\n" 2927db96d56Sopenharmony_ci"If there is no open transaction, this method is a no-op."); 2937db96d56Sopenharmony_ci 2947db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_ROLLBACK_METHODDEF \ 2957db96d56Sopenharmony_ci {"rollback", (PyCFunction)pysqlite_connection_rollback, METH_NOARGS, pysqlite_connection_rollback__doc__}, 2967db96d56Sopenharmony_ci 2977db96d56Sopenharmony_cistatic PyObject * 2987db96d56Sopenharmony_cipysqlite_connection_rollback_impl(pysqlite_Connection *self); 2997db96d56Sopenharmony_ci 3007db96d56Sopenharmony_cistatic PyObject * 3017db96d56Sopenharmony_cipysqlite_connection_rollback(pysqlite_Connection *self, PyObject *Py_UNUSED(ignored)) 3027db96d56Sopenharmony_ci{ 3037db96d56Sopenharmony_ci return pysqlite_connection_rollback_impl(self); 3047db96d56Sopenharmony_ci} 3057db96d56Sopenharmony_ci 3067db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_create_function__doc__, 3077db96d56Sopenharmony_ci"create_function($self, /, name, narg, func, *, deterministic=False)\n" 3087db96d56Sopenharmony_ci"--\n" 3097db96d56Sopenharmony_ci"\n" 3107db96d56Sopenharmony_ci"Creates a new function."); 3117db96d56Sopenharmony_ci 3127db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_CREATE_FUNCTION_METHODDEF \ 3137db96d56Sopenharmony_ci {"create_function", _PyCFunction_CAST(pysqlite_connection_create_function), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pysqlite_connection_create_function__doc__}, 3147db96d56Sopenharmony_ci 3157db96d56Sopenharmony_cistatic PyObject * 3167db96d56Sopenharmony_cipysqlite_connection_create_function_impl(pysqlite_Connection *self, 3177db96d56Sopenharmony_ci PyTypeObject *cls, const char *name, 3187db96d56Sopenharmony_ci int narg, PyObject *func, 3197db96d56Sopenharmony_ci int deterministic); 3207db96d56Sopenharmony_ci 3217db96d56Sopenharmony_cistatic PyObject * 3227db96d56Sopenharmony_cipysqlite_connection_create_function(pysqlite_Connection *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 3237db96d56Sopenharmony_ci{ 3247db96d56Sopenharmony_ci PyObject *return_value = NULL; 3257db96d56Sopenharmony_ci static const char * const _keywords[] = {"name", "narg", "func", "deterministic", NULL}; 3267db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "create_function", 0}; 3277db96d56Sopenharmony_ci PyObject *argsbuf[4]; 3287db96d56Sopenharmony_ci Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3; 3297db96d56Sopenharmony_ci const char *name; 3307db96d56Sopenharmony_ci int narg; 3317db96d56Sopenharmony_ci PyObject *func; 3327db96d56Sopenharmony_ci int deterministic = 0; 3337db96d56Sopenharmony_ci 3347db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf); 3357db96d56Sopenharmony_ci if (!args) { 3367db96d56Sopenharmony_ci goto exit; 3377db96d56Sopenharmony_ci } 3387db96d56Sopenharmony_ci if (!PyUnicode_Check(args[0])) { 3397db96d56Sopenharmony_ci _PyArg_BadArgument("create_function", "argument 'name'", "str", args[0]); 3407db96d56Sopenharmony_ci goto exit; 3417db96d56Sopenharmony_ci } 3427db96d56Sopenharmony_ci Py_ssize_t name_length; 3437db96d56Sopenharmony_ci name = PyUnicode_AsUTF8AndSize(args[0], &name_length); 3447db96d56Sopenharmony_ci if (name == NULL) { 3457db96d56Sopenharmony_ci goto exit; 3467db96d56Sopenharmony_ci } 3477db96d56Sopenharmony_ci if (strlen(name) != (size_t)name_length) { 3487db96d56Sopenharmony_ci PyErr_SetString(PyExc_ValueError, "embedded null character"); 3497db96d56Sopenharmony_ci goto exit; 3507db96d56Sopenharmony_ci } 3517db96d56Sopenharmony_ci narg = _PyLong_AsInt(args[1]); 3527db96d56Sopenharmony_ci if (narg == -1 && PyErr_Occurred()) { 3537db96d56Sopenharmony_ci goto exit; 3547db96d56Sopenharmony_ci } 3557db96d56Sopenharmony_ci func = args[2]; 3567db96d56Sopenharmony_ci if (!noptargs) { 3577db96d56Sopenharmony_ci goto skip_optional_kwonly; 3587db96d56Sopenharmony_ci } 3597db96d56Sopenharmony_ci deterministic = PyObject_IsTrue(args[3]); 3607db96d56Sopenharmony_ci if (deterministic < 0) { 3617db96d56Sopenharmony_ci goto exit; 3627db96d56Sopenharmony_ci } 3637db96d56Sopenharmony_ciskip_optional_kwonly: 3647db96d56Sopenharmony_ci return_value = pysqlite_connection_create_function_impl(self, cls, name, narg, func, deterministic); 3657db96d56Sopenharmony_ci 3667db96d56Sopenharmony_ciexit: 3677db96d56Sopenharmony_ci return return_value; 3687db96d56Sopenharmony_ci} 3697db96d56Sopenharmony_ci 3707db96d56Sopenharmony_ci#if defined(HAVE_WINDOW_FUNCTIONS) 3717db96d56Sopenharmony_ci 3727db96d56Sopenharmony_ciPyDoc_STRVAR(create_window_function__doc__, 3737db96d56Sopenharmony_ci"create_window_function($self, name, num_params, aggregate_class, /)\n" 3747db96d56Sopenharmony_ci"--\n" 3757db96d56Sopenharmony_ci"\n" 3767db96d56Sopenharmony_ci"Creates or redefines an aggregate window function. Non-standard.\n" 3777db96d56Sopenharmony_ci"\n" 3787db96d56Sopenharmony_ci" name\n" 3797db96d56Sopenharmony_ci" The name of the SQL aggregate window function to be created or\n" 3807db96d56Sopenharmony_ci" redefined.\n" 3817db96d56Sopenharmony_ci" num_params\n" 3827db96d56Sopenharmony_ci" The number of arguments the step and inverse methods takes.\n" 3837db96d56Sopenharmony_ci" aggregate_class\n" 3847db96d56Sopenharmony_ci" A class with step(), finalize(), value(), and inverse() methods.\n" 3857db96d56Sopenharmony_ci" Set to None to clear the window function."); 3867db96d56Sopenharmony_ci 3877db96d56Sopenharmony_ci#define CREATE_WINDOW_FUNCTION_METHODDEF \ 3887db96d56Sopenharmony_ci {"create_window_function", _PyCFunction_CAST(create_window_function), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, create_window_function__doc__}, 3897db96d56Sopenharmony_ci 3907db96d56Sopenharmony_cistatic PyObject * 3917db96d56Sopenharmony_cicreate_window_function_impl(pysqlite_Connection *self, PyTypeObject *cls, 3927db96d56Sopenharmony_ci const char *name, int num_params, 3937db96d56Sopenharmony_ci PyObject *aggregate_class); 3947db96d56Sopenharmony_ci 3957db96d56Sopenharmony_cistatic PyObject * 3967db96d56Sopenharmony_cicreate_window_function(pysqlite_Connection *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 3977db96d56Sopenharmony_ci{ 3987db96d56Sopenharmony_ci PyObject *return_value = NULL; 3997db96d56Sopenharmony_ci static const char * const _keywords[] = {"", "", "", NULL}; 4007db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "create_window_function", 0}; 4017db96d56Sopenharmony_ci PyObject *argsbuf[3]; 4027db96d56Sopenharmony_ci const char *name; 4037db96d56Sopenharmony_ci int num_params; 4047db96d56Sopenharmony_ci PyObject *aggregate_class; 4057db96d56Sopenharmony_ci 4067db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf); 4077db96d56Sopenharmony_ci if (!args) { 4087db96d56Sopenharmony_ci goto exit; 4097db96d56Sopenharmony_ci } 4107db96d56Sopenharmony_ci if (!PyUnicode_Check(args[0])) { 4117db96d56Sopenharmony_ci _PyArg_BadArgument("create_window_function", "argument 1", "str", args[0]); 4127db96d56Sopenharmony_ci goto exit; 4137db96d56Sopenharmony_ci } 4147db96d56Sopenharmony_ci Py_ssize_t name_length; 4157db96d56Sopenharmony_ci name = PyUnicode_AsUTF8AndSize(args[0], &name_length); 4167db96d56Sopenharmony_ci if (name == NULL) { 4177db96d56Sopenharmony_ci goto exit; 4187db96d56Sopenharmony_ci } 4197db96d56Sopenharmony_ci if (strlen(name) != (size_t)name_length) { 4207db96d56Sopenharmony_ci PyErr_SetString(PyExc_ValueError, "embedded null character"); 4217db96d56Sopenharmony_ci goto exit; 4227db96d56Sopenharmony_ci } 4237db96d56Sopenharmony_ci num_params = _PyLong_AsInt(args[1]); 4247db96d56Sopenharmony_ci if (num_params == -1 && PyErr_Occurred()) { 4257db96d56Sopenharmony_ci goto exit; 4267db96d56Sopenharmony_ci } 4277db96d56Sopenharmony_ci aggregate_class = args[2]; 4287db96d56Sopenharmony_ci return_value = create_window_function_impl(self, cls, name, num_params, aggregate_class); 4297db96d56Sopenharmony_ci 4307db96d56Sopenharmony_ciexit: 4317db96d56Sopenharmony_ci return return_value; 4327db96d56Sopenharmony_ci} 4337db96d56Sopenharmony_ci 4347db96d56Sopenharmony_ci#endif /* defined(HAVE_WINDOW_FUNCTIONS) */ 4357db96d56Sopenharmony_ci 4367db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_create_aggregate__doc__, 4377db96d56Sopenharmony_ci"create_aggregate($self, /, name, n_arg, aggregate_class)\n" 4387db96d56Sopenharmony_ci"--\n" 4397db96d56Sopenharmony_ci"\n" 4407db96d56Sopenharmony_ci"Creates a new aggregate."); 4417db96d56Sopenharmony_ci 4427db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_CREATE_AGGREGATE_METHODDEF \ 4437db96d56Sopenharmony_ci {"create_aggregate", _PyCFunction_CAST(pysqlite_connection_create_aggregate), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pysqlite_connection_create_aggregate__doc__}, 4447db96d56Sopenharmony_ci 4457db96d56Sopenharmony_cistatic PyObject * 4467db96d56Sopenharmony_cipysqlite_connection_create_aggregate_impl(pysqlite_Connection *self, 4477db96d56Sopenharmony_ci PyTypeObject *cls, 4487db96d56Sopenharmony_ci const char *name, int n_arg, 4497db96d56Sopenharmony_ci PyObject *aggregate_class); 4507db96d56Sopenharmony_ci 4517db96d56Sopenharmony_cistatic PyObject * 4527db96d56Sopenharmony_cipysqlite_connection_create_aggregate(pysqlite_Connection *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 4537db96d56Sopenharmony_ci{ 4547db96d56Sopenharmony_ci PyObject *return_value = NULL; 4557db96d56Sopenharmony_ci static const char * const _keywords[] = {"name", "n_arg", "aggregate_class", NULL}; 4567db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "create_aggregate", 0}; 4577db96d56Sopenharmony_ci PyObject *argsbuf[3]; 4587db96d56Sopenharmony_ci const char *name; 4597db96d56Sopenharmony_ci int n_arg; 4607db96d56Sopenharmony_ci PyObject *aggregate_class; 4617db96d56Sopenharmony_ci 4627db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf); 4637db96d56Sopenharmony_ci if (!args) { 4647db96d56Sopenharmony_ci goto exit; 4657db96d56Sopenharmony_ci } 4667db96d56Sopenharmony_ci if (!PyUnicode_Check(args[0])) { 4677db96d56Sopenharmony_ci _PyArg_BadArgument("create_aggregate", "argument 'name'", "str", args[0]); 4687db96d56Sopenharmony_ci goto exit; 4697db96d56Sopenharmony_ci } 4707db96d56Sopenharmony_ci Py_ssize_t name_length; 4717db96d56Sopenharmony_ci name = PyUnicode_AsUTF8AndSize(args[0], &name_length); 4727db96d56Sopenharmony_ci if (name == NULL) { 4737db96d56Sopenharmony_ci goto exit; 4747db96d56Sopenharmony_ci } 4757db96d56Sopenharmony_ci if (strlen(name) != (size_t)name_length) { 4767db96d56Sopenharmony_ci PyErr_SetString(PyExc_ValueError, "embedded null character"); 4777db96d56Sopenharmony_ci goto exit; 4787db96d56Sopenharmony_ci } 4797db96d56Sopenharmony_ci n_arg = _PyLong_AsInt(args[1]); 4807db96d56Sopenharmony_ci if (n_arg == -1 && PyErr_Occurred()) { 4817db96d56Sopenharmony_ci goto exit; 4827db96d56Sopenharmony_ci } 4837db96d56Sopenharmony_ci aggregate_class = args[2]; 4847db96d56Sopenharmony_ci return_value = pysqlite_connection_create_aggregate_impl(self, cls, name, n_arg, aggregate_class); 4857db96d56Sopenharmony_ci 4867db96d56Sopenharmony_ciexit: 4877db96d56Sopenharmony_ci return return_value; 4887db96d56Sopenharmony_ci} 4897db96d56Sopenharmony_ci 4907db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_set_authorizer__doc__, 4917db96d56Sopenharmony_ci"set_authorizer($self, /, authorizer_callback)\n" 4927db96d56Sopenharmony_ci"--\n" 4937db96d56Sopenharmony_ci"\n" 4947db96d56Sopenharmony_ci"Sets authorizer callback."); 4957db96d56Sopenharmony_ci 4967db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_SET_AUTHORIZER_METHODDEF \ 4977db96d56Sopenharmony_ci {"set_authorizer", _PyCFunction_CAST(pysqlite_connection_set_authorizer), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pysqlite_connection_set_authorizer__doc__}, 4987db96d56Sopenharmony_ci 4997db96d56Sopenharmony_cistatic PyObject * 5007db96d56Sopenharmony_cipysqlite_connection_set_authorizer_impl(pysqlite_Connection *self, 5017db96d56Sopenharmony_ci PyTypeObject *cls, 5027db96d56Sopenharmony_ci PyObject *callable); 5037db96d56Sopenharmony_ci 5047db96d56Sopenharmony_cistatic PyObject * 5057db96d56Sopenharmony_cipysqlite_connection_set_authorizer(pysqlite_Connection *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 5067db96d56Sopenharmony_ci{ 5077db96d56Sopenharmony_ci PyObject *return_value = NULL; 5087db96d56Sopenharmony_ci static const char * const _keywords[] = {"authorizer_callback", NULL}; 5097db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "set_authorizer", 0}; 5107db96d56Sopenharmony_ci PyObject *argsbuf[1]; 5117db96d56Sopenharmony_ci PyObject *callable; 5127db96d56Sopenharmony_ci 5137db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); 5147db96d56Sopenharmony_ci if (!args) { 5157db96d56Sopenharmony_ci goto exit; 5167db96d56Sopenharmony_ci } 5177db96d56Sopenharmony_ci callable = args[0]; 5187db96d56Sopenharmony_ci return_value = pysqlite_connection_set_authorizer_impl(self, cls, callable); 5197db96d56Sopenharmony_ci 5207db96d56Sopenharmony_ciexit: 5217db96d56Sopenharmony_ci return return_value; 5227db96d56Sopenharmony_ci} 5237db96d56Sopenharmony_ci 5247db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_set_progress_handler__doc__, 5257db96d56Sopenharmony_ci"set_progress_handler($self, /, progress_handler, n)\n" 5267db96d56Sopenharmony_ci"--\n" 5277db96d56Sopenharmony_ci"\n" 5287db96d56Sopenharmony_ci"Sets progress handler callback."); 5297db96d56Sopenharmony_ci 5307db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_SET_PROGRESS_HANDLER_METHODDEF \ 5317db96d56Sopenharmony_ci {"set_progress_handler", _PyCFunction_CAST(pysqlite_connection_set_progress_handler), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pysqlite_connection_set_progress_handler__doc__}, 5327db96d56Sopenharmony_ci 5337db96d56Sopenharmony_cistatic PyObject * 5347db96d56Sopenharmony_cipysqlite_connection_set_progress_handler_impl(pysqlite_Connection *self, 5357db96d56Sopenharmony_ci PyTypeObject *cls, 5367db96d56Sopenharmony_ci PyObject *callable, int n); 5377db96d56Sopenharmony_ci 5387db96d56Sopenharmony_cistatic PyObject * 5397db96d56Sopenharmony_cipysqlite_connection_set_progress_handler(pysqlite_Connection *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 5407db96d56Sopenharmony_ci{ 5417db96d56Sopenharmony_ci PyObject *return_value = NULL; 5427db96d56Sopenharmony_ci static const char * const _keywords[] = {"progress_handler", "n", NULL}; 5437db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "set_progress_handler", 0}; 5447db96d56Sopenharmony_ci PyObject *argsbuf[2]; 5457db96d56Sopenharmony_ci PyObject *callable; 5467db96d56Sopenharmony_ci int n; 5477db96d56Sopenharmony_ci 5487db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); 5497db96d56Sopenharmony_ci if (!args) { 5507db96d56Sopenharmony_ci goto exit; 5517db96d56Sopenharmony_ci } 5527db96d56Sopenharmony_ci callable = args[0]; 5537db96d56Sopenharmony_ci n = _PyLong_AsInt(args[1]); 5547db96d56Sopenharmony_ci if (n == -1 && PyErr_Occurred()) { 5557db96d56Sopenharmony_ci goto exit; 5567db96d56Sopenharmony_ci } 5577db96d56Sopenharmony_ci return_value = pysqlite_connection_set_progress_handler_impl(self, cls, callable, n); 5587db96d56Sopenharmony_ci 5597db96d56Sopenharmony_ciexit: 5607db96d56Sopenharmony_ci return return_value; 5617db96d56Sopenharmony_ci} 5627db96d56Sopenharmony_ci 5637db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_set_trace_callback__doc__, 5647db96d56Sopenharmony_ci"set_trace_callback($self, /, trace_callback)\n" 5657db96d56Sopenharmony_ci"--\n" 5667db96d56Sopenharmony_ci"\n" 5677db96d56Sopenharmony_ci"Sets a trace callback called for each SQL statement (passed as unicode)."); 5687db96d56Sopenharmony_ci 5697db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_SET_TRACE_CALLBACK_METHODDEF \ 5707db96d56Sopenharmony_ci {"set_trace_callback", _PyCFunction_CAST(pysqlite_connection_set_trace_callback), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pysqlite_connection_set_trace_callback__doc__}, 5717db96d56Sopenharmony_ci 5727db96d56Sopenharmony_cistatic PyObject * 5737db96d56Sopenharmony_cipysqlite_connection_set_trace_callback_impl(pysqlite_Connection *self, 5747db96d56Sopenharmony_ci PyTypeObject *cls, 5757db96d56Sopenharmony_ci PyObject *callable); 5767db96d56Sopenharmony_ci 5777db96d56Sopenharmony_cistatic PyObject * 5787db96d56Sopenharmony_cipysqlite_connection_set_trace_callback(pysqlite_Connection *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 5797db96d56Sopenharmony_ci{ 5807db96d56Sopenharmony_ci PyObject *return_value = NULL; 5817db96d56Sopenharmony_ci static const char * const _keywords[] = {"trace_callback", NULL}; 5827db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "set_trace_callback", 0}; 5837db96d56Sopenharmony_ci PyObject *argsbuf[1]; 5847db96d56Sopenharmony_ci PyObject *callable; 5857db96d56Sopenharmony_ci 5867db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); 5877db96d56Sopenharmony_ci if (!args) { 5887db96d56Sopenharmony_ci goto exit; 5897db96d56Sopenharmony_ci } 5907db96d56Sopenharmony_ci callable = args[0]; 5917db96d56Sopenharmony_ci return_value = pysqlite_connection_set_trace_callback_impl(self, cls, callable); 5927db96d56Sopenharmony_ci 5937db96d56Sopenharmony_ciexit: 5947db96d56Sopenharmony_ci return return_value; 5957db96d56Sopenharmony_ci} 5967db96d56Sopenharmony_ci 5977db96d56Sopenharmony_ci#if defined(PY_SQLITE_ENABLE_LOAD_EXTENSION) 5987db96d56Sopenharmony_ci 5997db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_enable_load_extension__doc__, 6007db96d56Sopenharmony_ci"enable_load_extension($self, enable, /)\n" 6017db96d56Sopenharmony_ci"--\n" 6027db96d56Sopenharmony_ci"\n" 6037db96d56Sopenharmony_ci"Enable dynamic loading of SQLite extension modules."); 6047db96d56Sopenharmony_ci 6057db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_ENABLE_LOAD_EXTENSION_METHODDEF \ 6067db96d56Sopenharmony_ci {"enable_load_extension", (PyCFunction)pysqlite_connection_enable_load_extension, METH_O, pysqlite_connection_enable_load_extension__doc__}, 6077db96d56Sopenharmony_ci 6087db96d56Sopenharmony_cistatic PyObject * 6097db96d56Sopenharmony_cipysqlite_connection_enable_load_extension_impl(pysqlite_Connection *self, 6107db96d56Sopenharmony_ci int onoff); 6117db96d56Sopenharmony_ci 6127db96d56Sopenharmony_cistatic PyObject * 6137db96d56Sopenharmony_cipysqlite_connection_enable_load_extension(pysqlite_Connection *self, PyObject *arg) 6147db96d56Sopenharmony_ci{ 6157db96d56Sopenharmony_ci PyObject *return_value = NULL; 6167db96d56Sopenharmony_ci int onoff; 6177db96d56Sopenharmony_ci 6187db96d56Sopenharmony_ci onoff = _PyLong_AsInt(arg); 6197db96d56Sopenharmony_ci if (onoff == -1 && PyErr_Occurred()) { 6207db96d56Sopenharmony_ci goto exit; 6217db96d56Sopenharmony_ci } 6227db96d56Sopenharmony_ci return_value = pysqlite_connection_enable_load_extension_impl(self, onoff); 6237db96d56Sopenharmony_ci 6247db96d56Sopenharmony_ciexit: 6257db96d56Sopenharmony_ci return return_value; 6267db96d56Sopenharmony_ci} 6277db96d56Sopenharmony_ci 6287db96d56Sopenharmony_ci#endif /* defined(PY_SQLITE_ENABLE_LOAD_EXTENSION) */ 6297db96d56Sopenharmony_ci 6307db96d56Sopenharmony_ci#if defined(PY_SQLITE_ENABLE_LOAD_EXTENSION) 6317db96d56Sopenharmony_ci 6327db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_load_extension__doc__, 6337db96d56Sopenharmony_ci"load_extension($self, name, /)\n" 6347db96d56Sopenharmony_ci"--\n" 6357db96d56Sopenharmony_ci"\n" 6367db96d56Sopenharmony_ci"Load SQLite extension module."); 6377db96d56Sopenharmony_ci 6387db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_LOAD_EXTENSION_METHODDEF \ 6397db96d56Sopenharmony_ci {"load_extension", (PyCFunction)pysqlite_connection_load_extension, METH_O, pysqlite_connection_load_extension__doc__}, 6407db96d56Sopenharmony_ci 6417db96d56Sopenharmony_cistatic PyObject * 6427db96d56Sopenharmony_cipysqlite_connection_load_extension_impl(pysqlite_Connection *self, 6437db96d56Sopenharmony_ci const char *extension_name); 6447db96d56Sopenharmony_ci 6457db96d56Sopenharmony_cistatic PyObject * 6467db96d56Sopenharmony_cipysqlite_connection_load_extension(pysqlite_Connection *self, PyObject *arg) 6477db96d56Sopenharmony_ci{ 6487db96d56Sopenharmony_ci PyObject *return_value = NULL; 6497db96d56Sopenharmony_ci const char *extension_name; 6507db96d56Sopenharmony_ci 6517db96d56Sopenharmony_ci if (!PyUnicode_Check(arg)) { 6527db96d56Sopenharmony_ci _PyArg_BadArgument("load_extension", "argument", "str", arg); 6537db96d56Sopenharmony_ci goto exit; 6547db96d56Sopenharmony_ci } 6557db96d56Sopenharmony_ci Py_ssize_t extension_name_length; 6567db96d56Sopenharmony_ci extension_name = PyUnicode_AsUTF8AndSize(arg, &extension_name_length); 6577db96d56Sopenharmony_ci if (extension_name == NULL) { 6587db96d56Sopenharmony_ci goto exit; 6597db96d56Sopenharmony_ci } 6607db96d56Sopenharmony_ci if (strlen(extension_name) != (size_t)extension_name_length) { 6617db96d56Sopenharmony_ci PyErr_SetString(PyExc_ValueError, "embedded null character"); 6627db96d56Sopenharmony_ci goto exit; 6637db96d56Sopenharmony_ci } 6647db96d56Sopenharmony_ci return_value = pysqlite_connection_load_extension_impl(self, extension_name); 6657db96d56Sopenharmony_ci 6667db96d56Sopenharmony_ciexit: 6677db96d56Sopenharmony_ci return return_value; 6687db96d56Sopenharmony_ci} 6697db96d56Sopenharmony_ci 6707db96d56Sopenharmony_ci#endif /* defined(PY_SQLITE_ENABLE_LOAD_EXTENSION) */ 6717db96d56Sopenharmony_ci 6727db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_execute__doc__, 6737db96d56Sopenharmony_ci"execute($self, sql, parameters=<unrepresentable>, /)\n" 6747db96d56Sopenharmony_ci"--\n" 6757db96d56Sopenharmony_ci"\n" 6767db96d56Sopenharmony_ci"Executes an SQL statement."); 6777db96d56Sopenharmony_ci 6787db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_EXECUTE_METHODDEF \ 6797db96d56Sopenharmony_ci {"execute", _PyCFunction_CAST(pysqlite_connection_execute), METH_FASTCALL, pysqlite_connection_execute__doc__}, 6807db96d56Sopenharmony_ci 6817db96d56Sopenharmony_cistatic PyObject * 6827db96d56Sopenharmony_cipysqlite_connection_execute_impl(pysqlite_Connection *self, PyObject *sql, 6837db96d56Sopenharmony_ci PyObject *parameters); 6847db96d56Sopenharmony_ci 6857db96d56Sopenharmony_cistatic PyObject * 6867db96d56Sopenharmony_cipysqlite_connection_execute(pysqlite_Connection *self, PyObject *const *args, Py_ssize_t nargs) 6877db96d56Sopenharmony_ci{ 6887db96d56Sopenharmony_ci PyObject *return_value = NULL; 6897db96d56Sopenharmony_ci PyObject *sql; 6907db96d56Sopenharmony_ci PyObject *parameters = NULL; 6917db96d56Sopenharmony_ci 6927db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("execute", nargs, 1, 2)) { 6937db96d56Sopenharmony_ci goto exit; 6947db96d56Sopenharmony_ci } 6957db96d56Sopenharmony_ci if (!PyUnicode_Check(args[0])) { 6967db96d56Sopenharmony_ci _PyArg_BadArgument("execute", "argument 1", "str", args[0]); 6977db96d56Sopenharmony_ci goto exit; 6987db96d56Sopenharmony_ci } 6997db96d56Sopenharmony_ci if (PyUnicode_READY(args[0]) == -1) { 7007db96d56Sopenharmony_ci goto exit; 7017db96d56Sopenharmony_ci } 7027db96d56Sopenharmony_ci sql = args[0]; 7037db96d56Sopenharmony_ci if (nargs < 2) { 7047db96d56Sopenharmony_ci goto skip_optional; 7057db96d56Sopenharmony_ci } 7067db96d56Sopenharmony_ci parameters = args[1]; 7077db96d56Sopenharmony_ciskip_optional: 7087db96d56Sopenharmony_ci return_value = pysqlite_connection_execute_impl(self, sql, parameters); 7097db96d56Sopenharmony_ci 7107db96d56Sopenharmony_ciexit: 7117db96d56Sopenharmony_ci return return_value; 7127db96d56Sopenharmony_ci} 7137db96d56Sopenharmony_ci 7147db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_executemany__doc__, 7157db96d56Sopenharmony_ci"executemany($self, sql, parameters, /)\n" 7167db96d56Sopenharmony_ci"--\n" 7177db96d56Sopenharmony_ci"\n" 7187db96d56Sopenharmony_ci"Repeatedly executes an SQL statement."); 7197db96d56Sopenharmony_ci 7207db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_EXECUTEMANY_METHODDEF \ 7217db96d56Sopenharmony_ci {"executemany", _PyCFunction_CAST(pysqlite_connection_executemany), METH_FASTCALL, pysqlite_connection_executemany__doc__}, 7227db96d56Sopenharmony_ci 7237db96d56Sopenharmony_cistatic PyObject * 7247db96d56Sopenharmony_cipysqlite_connection_executemany_impl(pysqlite_Connection *self, 7257db96d56Sopenharmony_ci PyObject *sql, PyObject *parameters); 7267db96d56Sopenharmony_ci 7277db96d56Sopenharmony_cistatic PyObject * 7287db96d56Sopenharmony_cipysqlite_connection_executemany(pysqlite_Connection *self, PyObject *const *args, Py_ssize_t nargs) 7297db96d56Sopenharmony_ci{ 7307db96d56Sopenharmony_ci PyObject *return_value = NULL; 7317db96d56Sopenharmony_ci PyObject *sql; 7327db96d56Sopenharmony_ci PyObject *parameters; 7337db96d56Sopenharmony_ci 7347db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("executemany", nargs, 2, 2)) { 7357db96d56Sopenharmony_ci goto exit; 7367db96d56Sopenharmony_ci } 7377db96d56Sopenharmony_ci if (!PyUnicode_Check(args[0])) { 7387db96d56Sopenharmony_ci _PyArg_BadArgument("executemany", "argument 1", "str", args[0]); 7397db96d56Sopenharmony_ci goto exit; 7407db96d56Sopenharmony_ci } 7417db96d56Sopenharmony_ci if (PyUnicode_READY(args[0]) == -1) { 7427db96d56Sopenharmony_ci goto exit; 7437db96d56Sopenharmony_ci } 7447db96d56Sopenharmony_ci sql = args[0]; 7457db96d56Sopenharmony_ci parameters = args[1]; 7467db96d56Sopenharmony_ci return_value = pysqlite_connection_executemany_impl(self, sql, parameters); 7477db96d56Sopenharmony_ci 7487db96d56Sopenharmony_ciexit: 7497db96d56Sopenharmony_ci return return_value; 7507db96d56Sopenharmony_ci} 7517db96d56Sopenharmony_ci 7527db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_executescript__doc__, 7537db96d56Sopenharmony_ci"executescript($self, sql_script, /)\n" 7547db96d56Sopenharmony_ci"--\n" 7557db96d56Sopenharmony_ci"\n" 7567db96d56Sopenharmony_ci"Executes multiple SQL statements at once."); 7577db96d56Sopenharmony_ci 7587db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_EXECUTESCRIPT_METHODDEF \ 7597db96d56Sopenharmony_ci {"executescript", (PyCFunction)pysqlite_connection_executescript, METH_O, pysqlite_connection_executescript__doc__}, 7607db96d56Sopenharmony_ci 7617db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_interrupt__doc__, 7627db96d56Sopenharmony_ci"interrupt($self, /)\n" 7637db96d56Sopenharmony_ci"--\n" 7647db96d56Sopenharmony_ci"\n" 7657db96d56Sopenharmony_ci"Abort any pending database operation."); 7667db96d56Sopenharmony_ci 7677db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_INTERRUPT_METHODDEF \ 7687db96d56Sopenharmony_ci {"interrupt", (PyCFunction)pysqlite_connection_interrupt, METH_NOARGS, pysqlite_connection_interrupt__doc__}, 7697db96d56Sopenharmony_ci 7707db96d56Sopenharmony_cistatic PyObject * 7717db96d56Sopenharmony_cipysqlite_connection_interrupt_impl(pysqlite_Connection *self); 7727db96d56Sopenharmony_ci 7737db96d56Sopenharmony_cistatic PyObject * 7747db96d56Sopenharmony_cipysqlite_connection_interrupt(pysqlite_Connection *self, PyObject *Py_UNUSED(ignored)) 7757db96d56Sopenharmony_ci{ 7767db96d56Sopenharmony_ci return pysqlite_connection_interrupt_impl(self); 7777db96d56Sopenharmony_ci} 7787db96d56Sopenharmony_ci 7797db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_iterdump__doc__, 7807db96d56Sopenharmony_ci"iterdump($self, /)\n" 7817db96d56Sopenharmony_ci"--\n" 7827db96d56Sopenharmony_ci"\n" 7837db96d56Sopenharmony_ci"Returns iterator to the dump of the database in an SQL text format."); 7847db96d56Sopenharmony_ci 7857db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_ITERDUMP_METHODDEF \ 7867db96d56Sopenharmony_ci {"iterdump", (PyCFunction)pysqlite_connection_iterdump, METH_NOARGS, pysqlite_connection_iterdump__doc__}, 7877db96d56Sopenharmony_ci 7887db96d56Sopenharmony_cistatic PyObject * 7897db96d56Sopenharmony_cipysqlite_connection_iterdump_impl(pysqlite_Connection *self); 7907db96d56Sopenharmony_ci 7917db96d56Sopenharmony_cistatic PyObject * 7927db96d56Sopenharmony_cipysqlite_connection_iterdump(pysqlite_Connection *self, PyObject *Py_UNUSED(ignored)) 7937db96d56Sopenharmony_ci{ 7947db96d56Sopenharmony_ci return pysqlite_connection_iterdump_impl(self); 7957db96d56Sopenharmony_ci} 7967db96d56Sopenharmony_ci 7977db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_backup__doc__, 7987db96d56Sopenharmony_ci"backup($self, /, target, *, pages=-1, progress=None, name=\'main\',\n" 7997db96d56Sopenharmony_ci" sleep=0.25)\n" 8007db96d56Sopenharmony_ci"--\n" 8017db96d56Sopenharmony_ci"\n" 8027db96d56Sopenharmony_ci"Makes a backup of the database."); 8037db96d56Sopenharmony_ci 8047db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_BACKUP_METHODDEF \ 8057db96d56Sopenharmony_ci {"backup", _PyCFunction_CAST(pysqlite_connection_backup), METH_FASTCALL|METH_KEYWORDS, pysqlite_connection_backup__doc__}, 8067db96d56Sopenharmony_ci 8077db96d56Sopenharmony_cistatic PyObject * 8087db96d56Sopenharmony_cipysqlite_connection_backup_impl(pysqlite_Connection *self, 8097db96d56Sopenharmony_ci pysqlite_Connection *target, int pages, 8107db96d56Sopenharmony_ci PyObject *progress, const char *name, 8117db96d56Sopenharmony_ci double sleep); 8127db96d56Sopenharmony_ci 8137db96d56Sopenharmony_cistatic PyObject * 8147db96d56Sopenharmony_cipysqlite_connection_backup(pysqlite_Connection *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 8157db96d56Sopenharmony_ci{ 8167db96d56Sopenharmony_ci PyObject *return_value = NULL; 8177db96d56Sopenharmony_ci static const char * const _keywords[] = {"target", "pages", "progress", "name", "sleep", NULL}; 8187db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "backup", 0}; 8197db96d56Sopenharmony_ci PyObject *argsbuf[5]; 8207db96d56Sopenharmony_ci Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1; 8217db96d56Sopenharmony_ci pysqlite_Connection *target; 8227db96d56Sopenharmony_ci int pages = -1; 8237db96d56Sopenharmony_ci PyObject *progress = Py_None; 8247db96d56Sopenharmony_ci const char *name = "main"; 8257db96d56Sopenharmony_ci double sleep = 0.25; 8267db96d56Sopenharmony_ci 8277db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); 8287db96d56Sopenharmony_ci if (!args) { 8297db96d56Sopenharmony_ci goto exit; 8307db96d56Sopenharmony_ci } 8317db96d56Sopenharmony_ci if (!PyObject_TypeCheck(args[0], clinic_state()->ConnectionType)) { 8327db96d56Sopenharmony_ci _PyArg_BadArgument("backup", "argument 'target'", (clinic_state()->ConnectionType)->tp_name, args[0]); 8337db96d56Sopenharmony_ci goto exit; 8347db96d56Sopenharmony_ci } 8357db96d56Sopenharmony_ci target = (pysqlite_Connection *)args[0]; 8367db96d56Sopenharmony_ci if (!noptargs) { 8377db96d56Sopenharmony_ci goto skip_optional_kwonly; 8387db96d56Sopenharmony_ci } 8397db96d56Sopenharmony_ci if (args[1]) { 8407db96d56Sopenharmony_ci pages = _PyLong_AsInt(args[1]); 8417db96d56Sopenharmony_ci if (pages == -1 && PyErr_Occurred()) { 8427db96d56Sopenharmony_ci goto exit; 8437db96d56Sopenharmony_ci } 8447db96d56Sopenharmony_ci if (!--noptargs) { 8457db96d56Sopenharmony_ci goto skip_optional_kwonly; 8467db96d56Sopenharmony_ci } 8477db96d56Sopenharmony_ci } 8487db96d56Sopenharmony_ci if (args[2]) { 8497db96d56Sopenharmony_ci progress = args[2]; 8507db96d56Sopenharmony_ci if (!--noptargs) { 8517db96d56Sopenharmony_ci goto skip_optional_kwonly; 8527db96d56Sopenharmony_ci } 8537db96d56Sopenharmony_ci } 8547db96d56Sopenharmony_ci if (args[3]) { 8557db96d56Sopenharmony_ci if (!PyUnicode_Check(args[3])) { 8567db96d56Sopenharmony_ci _PyArg_BadArgument("backup", "argument 'name'", "str", args[3]); 8577db96d56Sopenharmony_ci goto exit; 8587db96d56Sopenharmony_ci } 8597db96d56Sopenharmony_ci Py_ssize_t name_length; 8607db96d56Sopenharmony_ci name = PyUnicode_AsUTF8AndSize(args[3], &name_length); 8617db96d56Sopenharmony_ci if (name == NULL) { 8627db96d56Sopenharmony_ci goto exit; 8637db96d56Sopenharmony_ci } 8647db96d56Sopenharmony_ci if (strlen(name) != (size_t)name_length) { 8657db96d56Sopenharmony_ci PyErr_SetString(PyExc_ValueError, "embedded null character"); 8667db96d56Sopenharmony_ci goto exit; 8677db96d56Sopenharmony_ci } 8687db96d56Sopenharmony_ci if (!--noptargs) { 8697db96d56Sopenharmony_ci goto skip_optional_kwonly; 8707db96d56Sopenharmony_ci } 8717db96d56Sopenharmony_ci } 8727db96d56Sopenharmony_ci if (PyFloat_CheckExact(args[4])) { 8737db96d56Sopenharmony_ci sleep = PyFloat_AS_DOUBLE(args[4]); 8747db96d56Sopenharmony_ci } 8757db96d56Sopenharmony_ci else 8767db96d56Sopenharmony_ci { 8777db96d56Sopenharmony_ci sleep = PyFloat_AsDouble(args[4]); 8787db96d56Sopenharmony_ci if (sleep == -1.0 && PyErr_Occurred()) { 8797db96d56Sopenharmony_ci goto exit; 8807db96d56Sopenharmony_ci } 8817db96d56Sopenharmony_ci } 8827db96d56Sopenharmony_ciskip_optional_kwonly: 8837db96d56Sopenharmony_ci return_value = pysqlite_connection_backup_impl(self, target, pages, progress, name, sleep); 8847db96d56Sopenharmony_ci 8857db96d56Sopenharmony_ciexit: 8867db96d56Sopenharmony_ci return return_value; 8877db96d56Sopenharmony_ci} 8887db96d56Sopenharmony_ci 8897db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_create_collation__doc__, 8907db96d56Sopenharmony_ci"create_collation($self, name, callback, /)\n" 8917db96d56Sopenharmony_ci"--\n" 8927db96d56Sopenharmony_ci"\n" 8937db96d56Sopenharmony_ci"Creates a collation function."); 8947db96d56Sopenharmony_ci 8957db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_CREATE_COLLATION_METHODDEF \ 8967db96d56Sopenharmony_ci {"create_collation", _PyCFunction_CAST(pysqlite_connection_create_collation), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, pysqlite_connection_create_collation__doc__}, 8977db96d56Sopenharmony_ci 8987db96d56Sopenharmony_cistatic PyObject * 8997db96d56Sopenharmony_cipysqlite_connection_create_collation_impl(pysqlite_Connection *self, 9007db96d56Sopenharmony_ci PyTypeObject *cls, 9017db96d56Sopenharmony_ci const char *name, 9027db96d56Sopenharmony_ci PyObject *callable); 9037db96d56Sopenharmony_ci 9047db96d56Sopenharmony_cistatic PyObject * 9057db96d56Sopenharmony_cipysqlite_connection_create_collation(pysqlite_Connection *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 9067db96d56Sopenharmony_ci{ 9077db96d56Sopenharmony_ci PyObject *return_value = NULL; 9087db96d56Sopenharmony_ci static const char * const _keywords[] = {"", "", NULL}; 9097db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "create_collation", 0}; 9107db96d56Sopenharmony_ci PyObject *argsbuf[2]; 9117db96d56Sopenharmony_ci const char *name; 9127db96d56Sopenharmony_ci PyObject *callable; 9137db96d56Sopenharmony_ci 9147db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf); 9157db96d56Sopenharmony_ci if (!args) { 9167db96d56Sopenharmony_ci goto exit; 9177db96d56Sopenharmony_ci } 9187db96d56Sopenharmony_ci if (!PyUnicode_Check(args[0])) { 9197db96d56Sopenharmony_ci _PyArg_BadArgument("create_collation", "argument 1", "str", args[0]); 9207db96d56Sopenharmony_ci goto exit; 9217db96d56Sopenharmony_ci } 9227db96d56Sopenharmony_ci Py_ssize_t name_length; 9237db96d56Sopenharmony_ci name = PyUnicode_AsUTF8AndSize(args[0], &name_length); 9247db96d56Sopenharmony_ci if (name == NULL) { 9257db96d56Sopenharmony_ci goto exit; 9267db96d56Sopenharmony_ci } 9277db96d56Sopenharmony_ci if (strlen(name) != (size_t)name_length) { 9287db96d56Sopenharmony_ci PyErr_SetString(PyExc_ValueError, "embedded null character"); 9297db96d56Sopenharmony_ci goto exit; 9307db96d56Sopenharmony_ci } 9317db96d56Sopenharmony_ci callable = args[1]; 9327db96d56Sopenharmony_ci return_value = pysqlite_connection_create_collation_impl(self, cls, name, callable); 9337db96d56Sopenharmony_ci 9347db96d56Sopenharmony_ciexit: 9357db96d56Sopenharmony_ci return return_value; 9367db96d56Sopenharmony_ci} 9377db96d56Sopenharmony_ci 9387db96d56Sopenharmony_ci#if defined(PY_SQLITE_HAVE_SERIALIZE) 9397db96d56Sopenharmony_ci 9407db96d56Sopenharmony_ciPyDoc_STRVAR(serialize__doc__, 9417db96d56Sopenharmony_ci"serialize($self, /, *, name=\'main\')\n" 9427db96d56Sopenharmony_ci"--\n" 9437db96d56Sopenharmony_ci"\n" 9447db96d56Sopenharmony_ci"Serialize a database into a byte string.\n" 9457db96d56Sopenharmony_ci"\n" 9467db96d56Sopenharmony_ci" name\n" 9477db96d56Sopenharmony_ci" Which database to serialize.\n" 9487db96d56Sopenharmony_ci"\n" 9497db96d56Sopenharmony_ci"For an ordinary on-disk database file, the serialization is just a copy of the\n" 9507db96d56Sopenharmony_ci"disk file. For an in-memory database or a \"temp\" database, the serialization is\n" 9517db96d56Sopenharmony_ci"the same sequence of bytes which would be written to disk if that database\n" 9527db96d56Sopenharmony_ci"were backed up to disk."); 9537db96d56Sopenharmony_ci 9547db96d56Sopenharmony_ci#define SERIALIZE_METHODDEF \ 9557db96d56Sopenharmony_ci {"serialize", _PyCFunction_CAST(serialize), METH_FASTCALL|METH_KEYWORDS, serialize__doc__}, 9567db96d56Sopenharmony_ci 9577db96d56Sopenharmony_cistatic PyObject * 9587db96d56Sopenharmony_ciserialize_impl(pysqlite_Connection *self, const char *name); 9597db96d56Sopenharmony_ci 9607db96d56Sopenharmony_cistatic PyObject * 9617db96d56Sopenharmony_ciserialize(pysqlite_Connection *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 9627db96d56Sopenharmony_ci{ 9637db96d56Sopenharmony_ci PyObject *return_value = NULL; 9647db96d56Sopenharmony_ci static const char * const _keywords[] = {"name", NULL}; 9657db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "serialize", 0}; 9667db96d56Sopenharmony_ci PyObject *argsbuf[1]; 9677db96d56Sopenharmony_ci Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0; 9687db96d56Sopenharmony_ci const char *name = "main"; 9697db96d56Sopenharmony_ci 9707db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf); 9717db96d56Sopenharmony_ci if (!args) { 9727db96d56Sopenharmony_ci goto exit; 9737db96d56Sopenharmony_ci } 9747db96d56Sopenharmony_ci if (!noptargs) { 9757db96d56Sopenharmony_ci goto skip_optional_kwonly; 9767db96d56Sopenharmony_ci } 9777db96d56Sopenharmony_ci if (!PyUnicode_Check(args[0])) { 9787db96d56Sopenharmony_ci _PyArg_BadArgument("serialize", "argument 'name'", "str", args[0]); 9797db96d56Sopenharmony_ci goto exit; 9807db96d56Sopenharmony_ci } 9817db96d56Sopenharmony_ci Py_ssize_t name_length; 9827db96d56Sopenharmony_ci name = PyUnicode_AsUTF8AndSize(args[0], &name_length); 9837db96d56Sopenharmony_ci if (name == NULL) { 9847db96d56Sopenharmony_ci goto exit; 9857db96d56Sopenharmony_ci } 9867db96d56Sopenharmony_ci if (strlen(name) != (size_t)name_length) { 9877db96d56Sopenharmony_ci PyErr_SetString(PyExc_ValueError, "embedded null character"); 9887db96d56Sopenharmony_ci goto exit; 9897db96d56Sopenharmony_ci } 9907db96d56Sopenharmony_ciskip_optional_kwonly: 9917db96d56Sopenharmony_ci return_value = serialize_impl(self, name); 9927db96d56Sopenharmony_ci 9937db96d56Sopenharmony_ciexit: 9947db96d56Sopenharmony_ci return return_value; 9957db96d56Sopenharmony_ci} 9967db96d56Sopenharmony_ci 9977db96d56Sopenharmony_ci#endif /* defined(PY_SQLITE_HAVE_SERIALIZE) */ 9987db96d56Sopenharmony_ci 9997db96d56Sopenharmony_ci#if defined(PY_SQLITE_HAVE_SERIALIZE) 10007db96d56Sopenharmony_ci 10017db96d56Sopenharmony_ciPyDoc_STRVAR(deserialize__doc__, 10027db96d56Sopenharmony_ci"deserialize($self, data, /, *, name=\'main\')\n" 10037db96d56Sopenharmony_ci"--\n" 10047db96d56Sopenharmony_ci"\n" 10057db96d56Sopenharmony_ci"Load a serialized database.\n" 10067db96d56Sopenharmony_ci"\n" 10077db96d56Sopenharmony_ci" data\n" 10087db96d56Sopenharmony_ci" The serialized database content.\n" 10097db96d56Sopenharmony_ci" name\n" 10107db96d56Sopenharmony_ci" Which database to reopen with the deserialization.\n" 10117db96d56Sopenharmony_ci"\n" 10127db96d56Sopenharmony_ci"The deserialize interface causes the database connection to disconnect from the\n" 10137db96d56Sopenharmony_ci"target database, and then reopen it as an in-memory database based on the given\n" 10147db96d56Sopenharmony_ci"serialized data.\n" 10157db96d56Sopenharmony_ci"\n" 10167db96d56Sopenharmony_ci"The deserialize interface will fail with SQLITE_BUSY if the database is\n" 10177db96d56Sopenharmony_ci"currently in a read transaction or is involved in a backup operation."); 10187db96d56Sopenharmony_ci 10197db96d56Sopenharmony_ci#define DESERIALIZE_METHODDEF \ 10207db96d56Sopenharmony_ci {"deserialize", _PyCFunction_CAST(deserialize), METH_FASTCALL|METH_KEYWORDS, deserialize__doc__}, 10217db96d56Sopenharmony_ci 10227db96d56Sopenharmony_cistatic PyObject * 10237db96d56Sopenharmony_cideserialize_impl(pysqlite_Connection *self, Py_buffer *data, 10247db96d56Sopenharmony_ci const char *name); 10257db96d56Sopenharmony_ci 10267db96d56Sopenharmony_cistatic PyObject * 10277db96d56Sopenharmony_cideserialize(pysqlite_Connection *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) 10287db96d56Sopenharmony_ci{ 10297db96d56Sopenharmony_ci PyObject *return_value = NULL; 10307db96d56Sopenharmony_ci static const char * const _keywords[] = {"", "name", NULL}; 10317db96d56Sopenharmony_ci static _PyArg_Parser _parser = {NULL, _keywords, "deserialize", 0}; 10327db96d56Sopenharmony_ci PyObject *argsbuf[2]; 10337db96d56Sopenharmony_ci Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1; 10347db96d56Sopenharmony_ci Py_buffer data = {NULL, NULL}; 10357db96d56Sopenharmony_ci const char *name = "main"; 10367db96d56Sopenharmony_ci 10377db96d56Sopenharmony_ci args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); 10387db96d56Sopenharmony_ci if (!args) { 10397db96d56Sopenharmony_ci goto exit; 10407db96d56Sopenharmony_ci } 10417db96d56Sopenharmony_ci if (PyUnicode_Check(args[0])) { 10427db96d56Sopenharmony_ci Py_ssize_t len; 10437db96d56Sopenharmony_ci const char *ptr = PyUnicode_AsUTF8AndSize(args[0], &len); 10447db96d56Sopenharmony_ci if (ptr == NULL) { 10457db96d56Sopenharmony_ci goto exit; 10467db96d56Sopenharmony_ci } 10477db96d56Sopenharmony_ci PyBuffer_FillInfo(&data, args[0], (void *)ptr, len, 1, 0); 10487db96d56Sopenharmony_ci } 10497db96d56Sopenharmony_ci else { /* any bytes-like object */ 10507db96d56Sopenharmony_ci if (PyObject_GetBuffer(args[0], &data, PyBUF_SIMPLE) != 0) { 10517db96d56Sopenharmony_ci goto exit; 10527db96d56Sopenharmony_ci } 10537db96d56Sopenharmony_ci if (!PyBuffer_IsContiguous(&data, 'C')) { 10547db96d56Sopenharmony_ci _PyArg_BadArgument("deserialize", "argument 1", "contiguous buffer", args[0]); 10557db96d56Sopenharmony_ci goto exit; 10567db96d56Sopenharmony_ci } 10577db96d56Sopenharmony_ci } 10587db96d56Sopenharmony_ci if (!noptargs) { 10597db96d56Sopenharmony_ci goto skip_optional_kwonly; 10607db96d56Sopenharmony_ci } 10617db96d56Sopenharmony_ci if (!PyUnicode_Check(args[1])) { 10627db96d56Sopenharmony_ci _PyArg_BadArgument("deserialize", "argument 'name'", "str", args[1]); 10637db96d56Sopenharmony_ci goto exit; 10647db96d56Sopenharmony_ci } 10657db96d56Sopenharmony_ci Py_ssize_t name_length; 10667db96d56Sopenharmony_ci name = PyUnicode_AsUTF8AndSize(args[1], &name_length); 10677db96d56Sopenharmony_ci if (name == NULL) { 10687db96d56Sopenharmony_ci goto exit; 10697db96d56Sopenharmony_ci } 10707db96d56Sopenharmony_ci if (strlen(name) != (size_t)name_length) { 10717db96d56Sopenharmony_ci PyErr_SetString(PyExc_ValueError, "embedded null character"); 10727db96d56Sopenharmony_ci goto exit; 10737db96d56Sopenharmony_ci } 10747db96d56Sopenharmony_ciskip_optional_kwonly: 10757db96d56Sopenharmony_ci return_value = deserialize_impl(self, &data, name); 10767db96d56Sopenharmony_ci 10777db96d56Sopenharmony_ciexit: 10787db96d56Sopenharmony_ci /* Cleanup for data */ 10797db96d56Sopenharmony_ci if (data.obj) { 10807db96d56Sopenharmony_ci PyBuffer_Release(&data); 10817db96d56Sopenharmony_ci } 10827db96d56Sopenharmony_ci 10837db96d56Sopenharmony_ci return return_value; 10847db96d56Sopenharmony_ci} 10857db96d56Sopenharmony_ci 10867db96d56Sopenharmony_ci#endif /* defined(PY_SQLITE_HAVE_SERIALIZE) */ 10877db96d56Sopenharmony_ci 10887db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_enter__doc__, 10897db96d56Sopenharmony_ci"__enter__($self, /)\n" 10907db96d56Sopenharmony_ci"--\n" 10917db96d56Sopenharmony_ci"\n" 10927db96d56Sopenharmony_ci"Called when the connection is used as a context manager.\n" 10937db96d56Sopenharmony_ci"\n" 10947db96d56Sopenharmony_ci"Returns itself as a convenience to the caller."); 10957db96d56Sopenharmony_ci 10967db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_ENTER_METHODDEF \ 10977db96d56Sopenharmony_ci {"__enter__", (PyCFunction)pysqlite_connection_enter, METH_NOARGS, pysqlite_connection_enter__doc__}, 10987db96d56Sopenharmony_ci 10997db96d56Sopenharmony_cistatic PyObject * 11007db96d56Sopenharmony_cipysqlite_connection_enter_impl(pysqlite_Connection *self); 11017db96d56Sopenharmony_ci 11027db96d56Sopenharmony_cistatic PyObject * 11037db96d56Sopenharmony_cipysqlite_connection_enter(pysqlite_Connection *self, PyObject *Py_UNUSED(ignored)) 11047db96d56Sopenharmony_ci{ 11057db96d56Sopenharmony_ci return pysqlite_connection_enter_impl(self); 11067db96d56Sopenharmony_ci} 11077db96d56Sopenharmony_ci 11087db96d56Sopenharmony_ciPyDoc_STRVAR(pysqlite_connection_exit__doc__, 11097db96d56Sopenharmony_ci"__exit__($self, type, value, traceback, /)\n" 11107db96d56Sopenharmony_ci"--\n" 11117db96d56Sopenharmony_ci"\n" 11127db96d56Sopenharmony_ci"Called when the connection is used as a context manager.\n" 11137db96d56Sopenharmony_ci"\n" 11147db96d56Sopenharmony_ci"If there was any exception, a rollback takes place; otherwise we commit."); 11157db96d56Sopenharmony_ci 11167db96d56Sopenharmony_ci#define PYSQLITE_CONNECTION_EXIT_METHODDEF \ 11177db96d56Sopenharmony_ci {"__exit__", _PyCFunction_CAST(pysqlite_connection_exit), METH_FASTCALL, pysqlite_connection_exit__doc__}, 11187db96d56Sopenharmony_ci 11197db96d56Sopenharmony_cistatic PyObject * 11207db96d56Sopenharmony_cipysqlite_connection_exit_impl(pysqlite_Connection *self, PyObject *exc_type, 11217db96d56Sopenharmony_ci PyObject *exc_value, PyObject *exc_tb); 11227db96d56Sopenharmony_ci 11237db96d56Sopenharmony_cistatic PyObject * 11247db96d56Sopenharmony_cipysqlite_connection_exit(pysqlite_Connection *self, PyObject *const *args, Py_ssize_t nargs) 11257db96d56Sopenharmony_ci{ 11267db96d56Sopenharmony_ci PyObject *return_value = NULL; 11277db96d56Sopenharmony_ci PyObject *exc_type; 11287db96d56Sopenharmony_ci PyObject *exc_value; 11297db96d56Sopenharmony_ci PyObject *exc_tb; 11307db96d56Sopenharmony_ci 11317db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("__exit__", nargs, 3, 3)) { 11327db96d56Sopenharmony_ci goto exit; 11337db96d56Sopenharmony_ci } 11347db96d56Sopenharmony_ci exc_type = args[0]; 11357db96d56Sopenharmony_ci exc_value = args[1]; 11367db96d56Sopenharmony_ci exc_tb = args[2]; 11377db96d56Sopenharmony_ci return_value = pysqlite_connection_exit_impl(self, exc_type, exc_value, exc_tb); 11387db96d56Sopenharmony_ci 11397db96d56Sopenharmony_ciexit: 11407db96d56Sopenharmony_ci return return_value; 11417db96d56Sopenharmony_ci} 11427db96d56Sopenharmony_ci 11437db96d56Sopenharmony_ciPyDoc_STRVAR(setlimit__doc__, 11447db96d56Sopenharmony_ci"setlimit($self, category, limit, /)\n" 11457db96d56Sopenharmony_ci"--\n" 11467db96d56Sopenharmony_ci"\n" 11477db96d56Sopenharmony_ci"Set connection run-time limits.\n" 11487db96d56Sopenharmony_ci"\n" 11497db96d56Sopenharmony_ci" category\n" 11507db96d56Sopenharmony_ci" The limit category to be set.\n" 11517db96d56Sopenharmony_ci" limit\n" 11527db96d56Sopenharmony_ci" The new limit. If the new limit is a negative number, the limit is\n" 11537db96d56Sopenharmony_ci" unchanged.\n" 11547db96d56Sopenharmony_ci"\n" 11557db96d56Sopenharmony_ci"Attempts to increase a limit above its hard upper bound are silently truncated\n" 11567db96d56Sopenharmony_ci"to the hard upper bound. Regardless of whether or not the limit was changed,\n" 11577db96d56Sopenharmony_ci"the prior value of the limit is returned."); 11587db96d56Sopenharmony_ci 11597db96d56Sopenharmony_ci#define SETLIMIT_METHODDEF \ 11607db96d56Sopenharmony_ci {"setlimit", _PyCFunction_CAST(setlimit), METH_FASTCALL, setlimit__doc__}, 11617db96d56Sopenharmony_ci 11627db96d56Sopenharmony_cistatic PyObject * 11637db96d56Sopenharmony_cisetlimit_impl(pysqlite_Connection *self, int category, int limit); 11647db96d56Sopenharmony_ci 11657db96d56Sopenharmony_cistatic PyObject * 11667db96d56Sopenharmony_cisetlimit(pysqlite_Connection *self, PyObject *const *args, Py_ssize_t nargs) 11677db96d56Sopenharmony_ci{ 11687db96d56Sopenharmony_ci PyObject *return_value = NULL; 11697db96d56Sopenharmony_ci int category; 11707db96d56Sopenharmony_ci int limit; 11717db96d56Sopenharmony_ci 11727db96d56Sopenharmony_ci if (!_PyArg_CheckPositional("setlimit", nargs, 2, 2)) { 11737db96d56Sopenharmony_ci goto exit; 11747db96d56Sopenharmony_ci } 11757db96d56Sopenharmony_ci category = _PyLong_AsInt(args[0]); 11767db96d56Sopenharmony_ci if (category == -1 && PyErr_Occurred()) { 11777db96d56Sopenharmony_ci goto exit; 11787db96d56Sopenharmony_ci } 11797db96d56Sopenharmony_ci limit = _PyLong_AsInt(args[1]); 11807db96d56Sopenharmony_ci if (limit == -1 && PyErr_Occurred()) { 11817db96d56Sopenharmony_ci goto exit; 11827db96d56Sopenharmony_ci } 11837db96d56Sopenharmony_ci return_value = setlimit_impl(self, category, limit); 11847db96d56Sopenharmony_ci 11857db96d56Sopenharmony_ciexit: 11867db96d56Sopenharmony_ci return return_value; 11877db96d56Sopenharmony_ci} 11887db96d56Sopenharmony_ci 11897db96d56Sopenharmony_ciPyDoc_STRVAR(getlimit__doc__, 11907db96d56Sopenharmony_ci"getlimit($self, category, /)\n" 11917db96d56Sopenharmony_ci"--\n" 11927db96d56Sopenharmony_ci"\n" 11937db96d56Sopenharmony_ci"Get connection run-time limits.\n" 11947db96d56Sopenharmony_ci"\n" 11957db96d56Sopenharmony_ci" category\n" 11967db96d56Sopenharmony_ci" The limit category to be queried."); 11977db96d56Sopenharmony_ci 11987db96d56Sopenharmony_ci#define GETLIMIT_METHODDEF \ 11997db96d56Sopenharmony_ci {"getlimit", (PyCFunction)getlimit, METH_O, getlimit__doc__}, 12007db96d56Sopenharmony_ci 12017db96d56Sopenharmony_cistatic PyObject * 12027db96d56Sopenharmony_cigetlimit_impl(pysqlite_Connection *self, int category); 12037db96d56Sopenharmony_ci 12047db96d56Sopenharmony_cistatic PyObject * 12057db96d56Sopenharmony_cigetlimit(pysqlite_Connection *self, PyObject *arg) 12067db96d56Sopenharmony_ci{ 12077db96d56Sopenharmony_ci PyObject *return_value = NULL; 12087db96d56Sopenharmony_ci int category; 12097db96d56Sopenharmony_ci 12107db96d56Sopenharmony_ci category = _PyLong_AsInt(arg); 12117db96d56Sopenharmony_ci if (category == -1 && PyErr_Occurred()) { 12127db96d56Sopenharmony_ci goto exit; 12137db96d56Sopenharmony_ci } 12147db96d56Sopenharmony_ci return_value = getlimit_impl(self, category); 12157db96d56Sopenharmony_ci 12167db96d56Sopenharmony_ciexit: 12177db96d56Sopenharmony_ci return return_value; 12187db96d56Sopenharmony_ci} 12197db96d56Sopenharmony_ci 12207db96d56Sopenharmony_ci#ifndef CREATE_WINDOW_FUNCTION_METHODDEF 12217db96d56Sopenharmony_ci #define CREATE_WINDOW_FUNCTION_METHODDEF 12227db96d56Sopenharmony_ci#endif /* !defined(CREATE_WINDOW_FUNCTION_METHODDEF) */ 12237db96d56Sopenharmony_ci 12247db96d56Sopenharmony_ci#ifndef PYSQLITE_CONNECTION_ENABLE_LOAD_EXTENSION_METHODDEF 12257db96d56Sopenharmony_ci #define PYSQLITE_CONNECTION_ENABLE_LOAD_EXTENSION_METHODDEF 12267db96d56Sopenharmony_ci#endif /* !defined(PYSQLITE_CONNECTION_ENABLE_LOAD_EXTENSION_METHODDEF) */ 12277db96d56Sopenharmony_ci 12287db96d56Sopenharmony_ci#ifndef PYSQLITE_CONNECTION_LOAD_EXTENSION_METHODDEF 12297db96d56Sopenharmony_ci #define PYSQLITE_CONNECTION_LOAD_EXTENSION_METHODDEF 12307db96d56Sopenharmony_ci#endif /* !defined(PYSQLITE_CONNECTION_LOAD_EXTENSION_METHODDEF) */ 12317db96d56Sopenharmony_ci 12327db96d56Sopenharmony_ci#ifndef SERIALIZE_METHODDEF 12337db96d56Sopenharmony_ci #define SERIALIZE_METHODDEF 12347db96d56Sopenharmony_ci#endif /* !defined(SERIALIZE_METHODDEF) */ 12357db96d56Sopenharmony_ci 12367db96d56Sopenharmony_ci#ifndef DESERIALIZE_METHODDEF 12377db96d56Sopenharmony_ci #define DESERIALIZE_METHODDEF 12387db96d56Sopenharmony_ci#endif /* !defined(DESERIALIZE_METHODDEF) */ 12397db96d56Sopenharmony_ci/*[clinic end generated code: output=67e5b3dbade4a15b input=a9049054013a1b77]*/ 1240