]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-111789: Simplify the sqlite code (GH-111829)
authorSerhiy Storchaka <storchaka@gmail.com>
Fri, 10 Nov 2023 20:49:24 +0000 (22:49 +0200)
committerGitHub <noreply@github.com>
Fri, 10 Nov 2023 20:49:24 +0000 (20:49 +0000)
Use new C API functions PyDict_GetItemRef() and
PyMapping_GetOptionalItemString().

Modules/_sqlite/cursor.c
Modules/_sqlite/microprotocols.c

index 618ce532b2518da2a79b226ba6269599934f3584..f95df612328e5777dcacbdcd64656328e57a6020 100644 (file)
@@ -721,7 +721,6 @@ bind_parameters(pysqlite_state *state, pysqlite_Statement *self,
     } else if (PyDict_Check(parameters)) {
         /* parameters passed as dictionary */
         for (i = 1; i <= num_params_needed; i++) {
-            PyObject *binding_name_obj;
             Py_BEGIN_ALLOW_THREADS
             binding_name = sqlite3_bind_parameter_name(self->st, i);
             Py_END_ALLOW_THREADS
@@ -733,17 +732,8 @@ bind_parameters(pysqlite_state *state, pysqlite_Statement *self,
             }
 
             binding_name++; /* skip first char (the colon) */
-            binding_name_obj = PyUnicode_FromString(binding_name);
-            if (!binding_name_obj) {
-                return;
-            }
-            if (PyDict_CheckExact(parameters)) {
-                PyObject *item = PyDict_GetItemWithError(parameters, binding_name_obj);
-                current_param = Py_XNewRef(item);
-            } else {
-                current_param = PyObject_GetItem(parameters, binding_name_obj);
-            }
-            Py_DECREF(binding_name_obj);
+            PyObject *current_param;
+            (void)PyMapping_GetOptionalItemString(parameters, binding_name, &current_param);
             if (!current_param) {
                 if (!PyErr_Occurred() || PyErr_ExceptionMatches(PyExc_LookupError)) {
                     PyErr_Format(state->ProgrammingError,
index 92f0148bd4c217319b5144481359cdb44760a3ec..f77458d94a8573d4f5cfeb76c900aa9b911b83c8 100644 (file)
@@ -85,17 +85,16 @@ pysqlite_microprotocols_adapt(pysqlite_state *state, PyObject *obj,
     if (!key) {
         return NULL;
     }
-    adapter = PyDict_GetItemWithError(state->psyco_adapters, key);
+    if (PyDict_GetItemRef(state->psyco_adapters, key, &adapter) < 0) {
+        Py_DECREF(key);
+        return NULL;
+    }
     Py_DECREF(key);
     if (adapter) {
-        Py_INCREF(adapter);
         adapted = PyObject_CallOneArg(adapter, obj);
         Py_DECREF(adapter);
         return adapted;
     }
-    if (PyErr_Occurred()) {
-        return NULL;
-    }
 
     /* try to have the protocol adapt this object */
     if (PyObject_GetOptionalAttr(proto, state->str___adapt__, &adapter) < 0) {