[Python-checkins] gh-92547: Remove deprecated sqlite3 features (#92548)

erlend-aasland webhook-mailer at python.org
Mon May 16 13:52:36 EDT 2022


https://github.com/python/cpython/commit/00f22e8cc234aa52ec1f28094a170d7b87d0d08f
commit: 00f22e8cc234aa52ec1f28094a170d7b87d0d08f
branch: main
author: Erlend Egeberg Aasland <erlend.aasland at protonmail.com>
committer: erlend-aasland <erlend.aasland at protonmail.com>
date: 2022-05-16T19:52:08+02:00
summary:

gh-92547: Remove deprecated sqlite3 features (#92548)

The following sqlite3 features were deprecated in 3.10, scheduled for
removal in 3.12:

- sqlite3.OptimizedUnicode (gh-23163)
- sqlite3.enable_shared_cache (gh-24008)

Co-authored-by: Jelle Zijlstra <jelle.zijlstra at gmail.com>
Signed-off-by: Erlend E. Aasland <erlend.aasland at protonmail.com>

files:
A Misc/NEWS.d/next/Library/2022-05-09-11-55-04.gh-issue-92547.CzVZft.rst
M Doc/whatsnew/3.12.rst
M Lib/sqlite3/__init__.py
M Lib/sqlite3/dbapi2.py
M Lib/test/test_sqlite3/test_dbapi.py
M Lib/test/test_sqlite3/test_factory.py
M Modules/_sqlite/clinic/module.c.h
M Modules/_sqlite/module.c

diff --git a/Doc/whatsnew/3.12.rst b/Doc/whatsnew/3.12.rst
index 70b26ba48cf62..033de1780b3d1 100644
--- a/Doc/whatsnew/3.12.rst
+++ b/Doc/whatsnew/3.12.rst
@@ -107,6 +107,15 @@ Deprecated
 Removed
 =======
 
+* The following undocumented :mod:`sqlite3` features, deprecated in Python
+  3.10, are now removed:
+
+  * ``sqlite3.enable_shared_cache()``
+  * ``sqlite3.OptimizedUnicode``
+
+  (Contributed by Erlend E. Aasland in :gh:`92548`)
+
+
 Porting to Python 3.12
 ======================
 
diff --git a/Lib/sqlite3/__init__.py b/Lib/sqlite3/__init__.py
index 5a2dbd360fb49..34a9c047dd607 100644
--- a/Lib/sqlite3/__init__.py
+++ b/Lib/sqlite3/__init__.py
@@ -55,17 +55,3 @@
 """
 
 from sqlite3.dbapi2 import *
-
-
-# bpo-42264: OptimizedUnicode was deprecated in Python 3.10.  It's scheduled
-# for removal in Python 3.12.
-def __getattr__(name):
-    if name == "OptimizedUnicode":
-        import warnings
-        msg = ("""
-            OptimizedUnicode is deprecated and will be removed in Python 3.12.
-            Since Python 3.3 it has simply been an alias for 'str'.
-        """)
-        warnings.warn(msg, DeprecationWarning, stacklevel=2)
-        return str
-    raise AttributeError(f"module 'sqlite3' has no attribute '{name}'")
diff --git a/Lib/sqlite3/dbapi2.py b/Lib/sqlite3/dbapi2.py
index 7cf4dd32d541d..36ce769d5c6b3 100644
--- a/Lib/sqlite3/dbapi2.py
+++ b/Lib/sqlite3/dbapi2.py
@@ -82,20 +82,6 @@ def convert_timestamp(val):
 
 register_adapters_and_converters()
 
-# bpo-24464: enable_shared_cache was deprecated in Python 3.10.  It's
-# scheduled for removal in Python 3.12.
-def enable_shared_cache(enable):
-    from _sqlite3 import enable_shared_cache as _old_enable_shared_cache
-    import warnings
-    msg = (
-        "enable_shared_cache is deprecated and will be removed in Python 3.12. "
-        "Shared cache is strongly discouraged by the SQLite 3 documentation. "
-        "If shared cache must be used, open the database in URI mode using"
-        "the cache=shared query parameter."
-    )
-    warnings.warn(msg, DeprecationWarning, stacklevel=2)
-    return _old_enable_shared_cache(enable)
-
 # Clean up namespace
 
 del(register_adapters_and_converters)
diff --git a/Lib/test/test_sqlite3/test_dbapi.py b/Lib/test/test_sqlite3/test_dbapi.py
index e132fcdfb0e65..8a218973794db 100644
--- a/Lib/test/test_sqlite3/test_dbapi.py
+++ b/Lib/test/test_sqlite3/test_dbapi.py
@@ -344,15 +344,6 @@ def test_extended_error_code_on_exception(self):
                              sqlite.SQLITE_CONSTRAINT_CHECK)
             self.assertEqual(exc.sqlite_errorname, "SQLITE_CONSTRAINT_CHECK")
 
-    # sqlite3_enable_shared_cache() is deprecated on macOS and calling it may raise
-    # OperationalError on some buildbots.
-    @unittest.skipIf(sys.platform == "darwin", "shared cache is deprecated on macOS")
-    def test_shared_cache_deprecated(self):
-        for enable in (True, False):
-            with self.assertWarns(DeprecationWarning) as cm:
-                sqlite.enable_shared_cache(enable)
-            self.assertIn("dbapi.py", cm.filename)
-
     def test_disallow_instantiation(self):
         cx = sqlite.connect(":memory:")
         check_disallow_instantiation(self, type(cx("select 1")))
diff --git a/Lib/test/test_sqlite3/test_factory.py b/Lib/test/test_sqlite3/test_factory.py
index 420855ba34b60..71603faa02840 100644
--- a/Lib/test/test_sqlite3/test_factory.py
+++ b/Lib/test/test_sqlite3/test_factory.py
@@ -256,18 +256,6 @@ def test_custom(self):
         self.assertEqual(type(row[0]), str, "type of row[0] must be unicode")
         self.assertTrue(row[0].endswith("reich"), "column must contain original data")
 
-    def test_optimized_unicode(self):
-        # OptimizedUnicode is deprecated as of Python 3.10
-        with self.assertWarns(DeprecationWarning) as cm:
-            self.con.text_factory = sqlite.OptimizedUnicode
-        self.assertIn("factory.py", cm.filename)
-        austria = "Österreich"
-        germany = "Deutchland"
-        a_row = self.con.execute("select ?", (austria,)).fetchone()
-        d_row = self.con.execute("select ?", (germany,)).fetchone()
-        self.assertEqual(type(a_row[0]), str, "type of non-ASCII row must be str")
-        self.assertEqual(type(d_row[0]), str, "type of ASCII-only row must be str")
-
     def tearDown(self):
         self.con.close()
 
diff --git a/Misc/NEWS.d/next/Library/2022-05-09-11-55-04.gh-issue-92547.CzVZft.rst b/Misc/NEWS.d/next/Library/2022-05-09-11-55-04.gh-issue-92547.CzVZft.rst
new file mode 100644
index 0000000000000..52626974c4019
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-05-09-11-55-04.gh-issue-92547.CzVZft.rst
@@ -0,0 +1,6 @@
+Remove undocumented :mod:`sqlite3` features deprecated in Python 3.10:
+
+* ``sqlite3.enable_shared_cache()``
+* ``sqlite3.OptimizedUnicode``
+
+Patch by Erlend E. Aasland.
diff --git a/Modules/_sqlite/clinic/module.c.h b/Modules/_sqlite/clinic/module.c.h
index 8f7008adef2b1..74a6a362c05ab 100644
--- a/Modules/_sqlite/clinic/module.c.h
+++ b/Modules/_sqlite/clinic/module.c.h
@@ -158,46 +158,6 @@ pysqlite_complete_statement(PyObject *module, PyObject *const *args, Py_ssize_t
     return return_value;
 }
 
-PyDoc_STRVAR(pysqlite_enable_shared_cache__doc__,
-"enable_shared_cache($module, /, do_enable)\n"
-"--\n"
-"\n"
-"Enable or disable shared cache mode for the calling thread.\n"
-"\n"
-"This method is deprecated and will be removed in Python 3.12.\n"
-"Shared cache is strongly discouraged by the SQLite 3 documentation.\n"
-"If shared cache must be used, open the database in URI mode using\n"
-"the cache=shared query parameter.");
-
-#define PYSQLITE_ENABLE_SHARED_CACHE_METHODDEF    \
-    {"enable_shared_cache", _PyCFunction_CAST(pysqlite_enable_shared_cache), METH_FASTCALL|METH_KEYWORDS, pysqlite_enable_shared_cache__doc__},
-
-static PyObject *
-pysqlite_enable_shared_cache_impl(PyObject *module, int do_enable);
-
-static PyObject *
-pysqlite_enable_shared_cache(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
-{
-    PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"do_enable", NULL};
-    static _PyArg_Parser _parser = {NULL, _keywords, "enable_shared_cache", 0};
-    PyObject *argsbuf[1];
-    int do_enable;
-
-    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
-    if (!args) {
-        goto exit;
-    }
-    do_enable = _PyLong_AsInt(args[0]);
-    if (do_enable == -1 && PyErr_Occurred()) {
-        goto exit;
-    }
-    return_value = pysqlite_enable_shared_cache_impl(module, do_enable);
-
-exit:
-    return return_value;
-}
-
 PyDoc_STRVAR(pysqlite_register_adapter__doc__,
 "register_adapter($module, type, caster, /)\n"
 "--\n"
@@ -334,4 +294,4 @@ pysqlite_adapt(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=d846459943008a9c input=a9049054013a1b77]*/
+/*[clinic end generated code: output=43aa4f4356f9269d input=a9049054013a1b77]*/
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c
index fbc57c7cc739e..78591f85c1f7d 100644
--- a/Modules/_sqlite/module.c
+++ b/Modules/_sqlite/module.c
@@ -105,36 +105,6 @@ pysqlite_complete_statement_impl(PyObject *module, const char *statement)
     }
 }
 
-/*[clinic input]
-_sqlite3.enable_shared_cache as pysqlite_enable_shared_cache
-
-    do_enable: int
-
-Enable or disable shared cache mode for the calling thread.
-
-This method is deprecated and will be removed in Python 3.12.
-Shared cache is strongly discouraged by the SQLite 3 documentation.
-If shared cache must be used, open the database in URI mode using
-the cache=shared query parameter.
-[clinic start generated code]*/
-
-static PyObject *
-pysqlite_enable_shared_cache_impl(PyObject *module, int do_enable)
-/*[clinic end generated code: output=259c74eedee1516b input=26e40d5971d3487d]*/
-{
-    int rc;
-
-    rc = sqlite3_enable_shared_cache(do_enable);
-
-    if (rc != SQLITE_OK) {
-        pysqlite_state *state = pysqlite_get_state(module);
-        PyErr_SetString(state->OperationalError, "Changing the shared_cache flag failed");
-        return NULL;
-    } else {
-        Py_RETURN_NONE;
-    }
-}
-
 /*[clinic input]
 _sqlite3.register_adapter as pysqlite_register_adapter
 
@@ -277,7 +247,6 @@ static PyMethodDef module_methods[] = {
     PYSQLITE_COMPLETE_STATEMENT_METHODDEF
     PYSQLITE_CONNECT_METHODDEF
     PYSQLITE_ENABLE_CALLBACK_TRACE_METHODDEF
-    PYSQLITE_ENABLE_SHARED_CACHE_METHODDEF
     PYSQLITE_REGISTER_ADAPTER_METHODDEF
     PYSQLITE_REGISTER_CONVERTER_METHODDEF
     {NULL, NULL}



More information about the Python-checkins mailing list