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@gmail.com>
Signed-off-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
This commit is contained in:
Erlend Egeberg Aasland 2022-05-16 19:52:08 +02:00 committed by GitHub
parent 9b50585e02
commit 00f22e8cc2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 16 additions and 121 deletions

View file

@ -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
======================

View file

@ -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}'")

View file

@ -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)

View file

@ -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")))

View file

@ -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()

View file

@ -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.

View file

@ -158,46 +158,6 @@ exit:
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 @@ skip_optional:
exit:
return return_value;
}
/*[clinic end generated code: output=d846459943008a9c input=a9049054013a1b77]*/
/*[clinic end generated code: output=43aa4f4356f9269d input=a9049054013a1b77]*/

View file

@ -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}