summaryrefslogtreecommitdiffstats
path: root/Modules/_sqlite
diff options
context:
space:
mode:
authorErlend Egeberg Aasland <erlend.aasland@innova.no>2022-01-26 16:26:16 (GMT)
committerGitHub <noreply@github.com>2022-01-26 16:26:16 (GMT)
commit3eb3b4f270757f66c7fb6dcf5afa416ee1582a4b (patch)
treee1de53467a3eb82edefb4be889c9cca4ff820da1 /Modules/_sqlite
parentac0c6e128cb6553585af096c851c488b53a6c952 (diff)
downloadcpython-3eb3b4f270757f66c7fb6dcf5afa416ee1582a4b.zip
cpython-3eb3b4f270757f66c7fb6dcf5afa416ee1582a4b.tar.gz
cpython-3eb3b4f270757f66c7fb6dcf5afa416ee1582a4b.tar.bz2
bpo-43853: Expand test suite for SQLite UDF's (GH-27642)
Diffstat (limited to 'Modules/_sqlite')
-rw-r--r--Modules/_sqlite/connection.c6
-rw-r--r--Modules/_sqlite/statement.c11
2 files changed, 14 insertions, 3 deletions
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index 02f4ac4..caefdf4 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -559,7 +559,11 @@ _pysqlite_set_result(sqlite3_context* context, PyObject* py_val)
return -1;
sqlite3_result_int64(context, value);
} else if (PyFloat_Check(py_val)) {
- sqlite3_result_double(context, PyFloat_AsDouble(py_val));
+ double value = PyFloat_AsDouble(py_val);
+ if (value == -1 && PyErr_Occurred()) {
+ return -1;
+ }
+ sqlite3_result_double(context, value);
} else if (PyUnicode_Check(py_val)) {
Py_ssize_t sz;
const char *str = PyUnicode_AsUTF8AndSize(py_val, &sz);
diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c
index 66fadb6..6885b50 100644
--- a/Modules/_sqlite/statement.c
+++ b/Modules/_sqlite/statement.c
@@ -166,9 +166,16 @@ int pysqlite_statement_bind_parameter(pysqlite_Statement* self, int pos, PyObjec
rc = sqlite3_bind_int64(self->st, pos, value);
break;
}
- case TYPE_FLOAT:
- rc = sqlite3_bind_double(self->st, pos, PyFloat_AsDouble(parameter));
+ case TYPE_FLOAT: {
+ double value = PyFloat_AsDouble(parameter);
+ if (value == -1 && PyErr_Occurred()) {
+ rc = -1;
+ }
+ else {
+ rc = sqlite3_bind_double(self->st, pos, value);
+ }
break;
+ }
case TYPE_UNICODE:
string = PyUnicode_AsUTF8AndSize(parameter, &buflen);
if (string == NULL)