diff options
author | Erlend Egeberg Aasland <erlend.aasland@innova.no> | 2022-01-26 16:26:16 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-26 16:26:16 (GMT) |
commit | 3eb3b4f270757f66c7fb6dcf5afa416ee1582a4b (patch) | |
tree | e1de53467a3eb82edefb4be889c9cca4ff820da1 /Modules/_sqlite | |
parent | ac0c6e128cb6553585af096c851c488b53a6c952 (diff) | |
download | cpython-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.c | 6 | ||||
-rw-r--r-- | Modules/_sqlite/statement.c | 11 |
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) |