• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*[clinic input]
2 preserve
3 [clinic start generated code]*/
4 
5 #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
6 #  include "pycore_gc.h"          // PyGC_Head
7 #  include "pycore_runtime.h"     // _Py_ID()
8 #endif
9 #include "pycore_modsupport.h"    // _PyArg_UnpackKeywords()
10 
11 PyDoc_STRVAR(pysqlite_complete_statement__doc__,
12 "complete_statement($module, /, statement)\n"
13 "--\n"
14 "\n"
15 "Checks if a string contains a complete SQL statement.");
16 
17 #define PYSQLITE_COMPLETE_STATEMENT_METHODDEF    \
18     {"complete_statement", _PyCFunction_CAST(pysqlite_complete_statement), METH_FASTCALL|METH_KEYWORDS, pysqlite_complete_statement__doc__},
19 
20 static PyObject *
21 pysqlite_complete_statement_impl(PyObject *module, const char *statement);
22 
23 static PyObject *
pysqlite_complete_statement(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)24 pysqlite_complete_statement(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
25 {
26     PyObject *return_value = NULL;
27     #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
28 
29     #define NUM_KEYWORDS 1
30     static struct {
31         PyGC_Head _this_is_not_used;
32         PyObject_VAR_HEAD
33         PyObject *ob_item[NUM_KEYWORDS];
34     } _kwtuple = {
35         .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
36         .ob_item = { &_Py_ID(statement), },
37     };
38     #undef NUM_KEYWORDS
39     #define KWTUPLE (&_kwtuple.ob_base.ob_base)
40 
41     #else  // !Py_BUILD_CORE
42     #  define KWTUPLE NULL
43     #endif  // !Py_BUILD_CORE
44 
45     static const char * const _keywords[] = {"statement", NULL};
46     static _PyArg_Parser _parser = {
47         .keywords = _keywords,
48         .fname = "complete_statement",
49         .kwtuple = KWTUPLE,
50     };
51     #undef KWTUPLE
52     PyObject *argsbuf[1];
53     const char *statement;
54 
55     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
56     if (!args) {
57         goto exit;
58     }
59     if (!PyUnicode_Check(args[0])) {
60         _PyArg_BadArgument("complete_statement", "argument 'statement'", "str", args[0]);
61         goto exit;
62     }
63     Py_ssize_t statement_length;
64     statement = PyUnicode_AsUTF8AndSize(args[0], &statement_length);
65     if (statement == NULL) {
66         goto exit;
67     }
68     if (strlen(statement) != (size_t)statement_length) {
69         PyErr_SetString(PyExc_ValueError, "embedded null character");
70         goto exit;
71     }
72     return_value = pysqlite_complete_statement_impl(module, statement);
73 
74 exit:
75     return return_value;
76 }
77 
78 PyDoc_STRVAR(pysqlite_register_adapter__doc__,
79 "register_adapter($module, type, adapter, /)\n"
80 "--\n"
81 "\n"
82 "Register a function to adapt Python objects to SQLite values.");
83 
84 #define PYSQLITE_REGISTER_ADAPTER_METHODDEF    \
85     {"register_adapter", _PyCFunction_CAST(pysqlite_register_adapter), METH_FASTCALL, pysqlite_register_adapter__doc__},
86 
87 static PyObject *
88 pysqlite_register_adapter_impl(PyObject *module, PyTypeObject *type,
89                                PyObject *caster);
90 
91 static PyObject *
pysqlite_register_adapter(PyObject * module,PyObject * const * args,Py_ssize_t nargs)92 pysqlite_register_adapter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
93 {
94     PyObject *return_value = NULL;
95     PyTypeObject *type;
96     PyObject *caster;
97 
98     if (!_PyArg_CheckPositional("register_adapter", nargs, 2, 2)) {
99         goto exit;
100     }
101     type = (PyTypeObject *)args[0];
102     caster = args[1];
103     return_value = pysqlite_register_adapter_impl(module, type, caster);
104 
105 exit:
106     return return_value;
107 }
108 
109 PyDoc_STRVAR(pysqlite_register_converter__doc__,
110 "register_converter($module, typename, converter, /)\n"
111 "--\n"
112 "\n"
113 "Register a function to convert SQLite values to Python objects.");
114 
115 #define PYSQLITE_REGISTER_CONVERTER_METHODDEF    \
116     {"register_converter", _PyCFunction_CAST(pysqlite_register_converter), METH_FASTCALL, pysqlite_register_converter__doc__},
117 
118 static PyObject *
119 pysqlite_register_converter_impl(PyObject *module, PyObject *orig_name,
120                                  PyObject *callable);
121 
122 static PyObject *
pysqlite_register_converter(PyObject * module,PyObject * const * args,Py_ssize_t nargs)123 pysqlite_register_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
124 {
125     PyObject *return_value = NULL;
126     PyObject *orig_name;
127     PyObject *callable;
128 
129     if (!_PyArg_CheckPositional("register_converter", nargs, 2, 2)) {
130         goto exit;
131     }
132     if (!PyUnicode_Check(args[0])) {
133         _PyArg_BadArgument("register_converter", "argument 1", "str", args[0]);
134         goto exit;
135     }
136     orig_name = args[0];
137     callable = args[1];
138     return_value = pysqlite_register_converter_impl(module, orig_name, callable);
139 
140 exit:
141     return return_value;
142 }
143 
144 PyDoc_STRVAR(pysqlite_enable_callback_trace__doc__,
145 "enable_callback_tracebacks($module, enable, /)\n"
146 "--\n"
147 "\n"
148 "Enable or disable callback functions throwing errors to stderr.");
149 
150 #define PYSQLITE_ENABLE_CALLBACK_TRACE_METHODDEF    \
151     {"enable_callback_tracebacks", (PyCFunction)pysqlite_enable_callback_trace, METH_O, pysqlite_enable_callback_trace__doc__},
152 
153 static PyObject *
154 pysqlite_enable_callback_trace_impl(PyObject *module, int enable);
155 
156 static PyObject *
pysqlite_enable_callback_trace(PyObject * module,PyObject * arg)157 pysqlite_enable_callback_trace(PyObject *module, PyObject *arg)
158 {
159     PyObject *return_value = NULL;
160     int enable;
161 
162     enable = PyLong_AsInt(arg);
163     if (enable == -1 && PyErr_Occurred()) {
164         goto exit;
165     }
166     return_value = pysqlite_enable_callback_trace_impl(module, enable);
167 
168 exit:
169     return return_value;
170 }
171 
172 PyDoc_STRVAR(pysqlite_adapt__doc__,
173 "adapt($module, obj, proto=PrepareProtocolType, alt=<unrepresentable>, /)\n"
174 "--\n"
175 "\n"
176 "Adapt given object to given protocol.");
177 
178 #define PYSQLITE_ADAPT_METHODDEF    \
179     {"adapt", _PyCFunction_CAST(pysqlite_adapt), METH_FASTCALL, pysqlite_adapt__doc__},
180 
181 static PyObject *
182 pysqlite_adapt_impl(PyObject *module, PyObject *obj, PyObject *proto,
183                     PyObject *alt);
184 
185 static PyObject *
pysqlite_adapt(PyObject * module,PyObject * const * args,Py_ssize_t nargs)186 pysqlite_adapt(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
187 {
188     PyObject *return_value = NULL;
189     PyObject *obj;
190     PyObject *proto = (PyObject *)clinic_state()->PrepareProtocolType;
191     PyObject *alt = NULL;
192 
193     if (!_PyArg_CheckPositional("adapt", nargs, 1, 3)) {
194         goto exit;
195     }
196     obj = args[0];
197     if (nargs < 2) {
198         goto skip_optional;
199     }
200     proto = args[1];
201     if (nargs < 3) {
202         goto skip_optional;
203     }
204     alt = args[2];
205 skip_optional:
206     return_value = pysqlite_adapt_impl(module, obj, proto, alt);
207 
208 exit:
209     return return_value;
210 }
211 /*[clinic end generated code: output=457ab0fdbb9e1880 input=a9049054013a1b77]*/
212