diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2022-05-21 11:35:46 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-21 11:35:46 (GMT) |
commit | 14c0d33016a967a98155f2e1615660e9328aef5d (patch) | |
tree | 210319151392d06e34646f0b4b2f8f2787c9cf31 | |
parent | b96e20c1d9be4e6d5ea3e48c9c97e5ecd02f6055 (diff) | |
download | cpython-14c0d33016a967a98155f2e1615660e9328aef5d.zip cpython-14c0d33016a967a98155f2e1615660e9328aef5d.tar.gz cpython-14c0d33016a967a98155f2e1615660e9328aef5d.tar.bz2 |
gh-93044: No longer convert the database argument of sqlite3.connect() to bytes (GH-93046)
Just pass it to the factory as is.
-rw-r--r-- | Lib/test/test_sqlite3/test_dbapi.py | 13 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2022-05-21-13-16-16.gh-issue-93044.eJ_XkZ.rst | 2 | ||||
-rw-r--r-- | Modules/_sqlite/clinic/module.c.h | 6 | ||||
-rw-r--r-- | Modules/_sqlite/module.c | 5 |
4 files changed, 19 insertions, 7 deletions
diff --git a/Lib/test/test_sqlite3/test_dbapi.py b/Lib/test/test_sqlite3/test_dbapi.py index 40f91a1..f0c009a 100644 --- a/Lib/test/test_sqlite3/test_dbapi.py +++ b/Lib/test/test_sqlite3/test_dbapi.py @@ -676,6 +676,19 @@ class OpenTests(unittest.TestCase): with managed_connect(f"file:{TESTFN}?mode=ro", uri=True) as cx: cx.execute(self._sql) + def test_factory_database_arg(self): + def factory(database, *args, **kwargs): + nonlocal database_arg + database_arg = database + return sqlite.Connection(":memory:", *args, **kwargs) + + for database in (TESTFN, os.fsencode(TESTFN), + FakePath(TESTFN), FakePath(os.fsencode(TESTFN))): + database_arg = None + with sqlite.connect(database, factory=factory): + pass + self.assertEqual(database_arg, database) + def test_database_keyword(self): with sqlite.connect(database=":memory:") as cx: self.assertEqual(type(cx), sqlite.Connection) diff --git a/Misc/NEWS.d/next/Library/2022-05-21-13-16-16.gh-issue-93044.eJ_XkZ.rst b/Misc/NEWS.d/next/Library/2022-05-21-13-16-16.gh-issue-93044.eJ_XkZ.rst new file mode 100644 index 0000000..c9df867 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-05-21-13-16-16.gh-issue-93044.eJ_XkZ.rst @@ -0,0 +1,2 @@ +No longer convert the database argument of :func:`sqlite3.connect` to bytes +before passing it to the factory. diff --git a/Modules/_sqlite/clinic/module.c.h b/Modules/_sqlite/clinic/module.c.h index 74a6a36..d3367cf 100644 --- a/Modules/_sqlite/clinic/module.c.h +++ b/Modules/_sqlite/clinic/module.c.h @@ -43,9 +43,7 @@ pysqlite_connect(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyOb if (!args) { goto exit; } - if (!PyUnicode_FSConverter(args[0], &database)) { - goto exit; - } + database = args[0]; if (!noptargs) { goto skip_optional_pos; } @@ -294,4 +292,4 @@ skip_optional: exit: return return_value; } -/*[clinic end generated code: output=43aa4f4356f9269d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a7cfa6dc9d54273c input=a9049054013a1b77]*/ diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 78591f8..9b0e921 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -46,7 +46,7 @@ module _sqlite3 /*[clinic input] _sqlite3.connect as pysqlite_connect - database: object(converter='PyUnicode_FSConverter') + database: object timeout: double = 5.0 detect_types: int = 0 isolation_level: object = NULL @@ -66,7 +66,7 @@ pysqlite_connect_impl(PyObject *module, PyObject *database, double timeout, int detect_types, PyObject *isolation_level, int check_same_thread, PyObject *factory, int cached_statements, int uri) -/*[clinic end generated code: output=450ac9078b4868bb input=ea6355ba55a78e12]*/ +/*[clinic end generated code: output=450ac9078b4868bb input=e16914663ddf93ce]*/ { if (isolation_level == NULL) { isolation_level = PyUnicode_FromString(""); @@ -81,7 +81,6 @@ pysqlite_connect_impl(PyObject *module, PyObject *database, double timeout, timeout, detect_types, isolation_level, check_same_thread, factory, cached_statements, uri); - Py_DECREF(database); // needed bco. the AC FSConverter Py_DECREF(isolation_level); return res; } |