mirror of https://github.com/python/cpython
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:
parent
9b50585e02
commit
00f22e8cc2
|
@ -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
|
||||
======================
|
||||
|
||||
|
|
|
@ -55,17 +55,3 @@ The sqlite3 module is written by Gerhard Häring <gh@ghaering.de>.
|
|||
"""
|
||||
|
||||
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}'")
|
||||
|
|
|
@ -82,20 +82,6 @@ def register_adapters_and_converters():
|
|||
|
||||
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)
|
||||
|
|
|
@ -344,15 +344,6 @@ class ModuleTests(unittest.TestCase):
|
|||
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")))
|
||||
|
|
|
@ -256,18 +256,6 @@ class TextFactoryTests(unittest.TestCase):
|
|||
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()
|
||||
|
||||
|
|
|
@ -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.
|
|
@ -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]*/
|
||||
|
|
|
@ -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}
|
||||
|
|
Loading…
Reference in New Issue