aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorErlend E. Aasland <erlend@python.org>2023-08-30 16:53:10 +0200
committerGitHub <noreply@github.com>2023-08-30 14:53:10 +0000
commit2a3926fa51b7264787d5988abf083d8c4328f4ad (patch)
tree8979134fd198d6802bb75ed1989b81f2e437e16a
parent2928e5dc6512e4206c616cd33e0bcc3288abf6ed (diff)
downloadcpython-2a3926fa51b7264787d5988abf083d8c4328f4ad.tar.gz
cpython-2a3926fa51b7264787d5988abf083d8c4328f4ad.zip
gh-108590: Revert gh-108657 (commit 400a1cebc) (#108686)
Reverted per Serhiy's request.
-rw-r--r--Lib/sqlite3/dump.py27
-rw-r--r--Lib/test/test_sqlite3/test_dump.py15
-rw-r--r--Misc/NEWS.d/next/Library/2023-08-29-22-53-48.gh-issue-108590.6k0pOl.rst1
3 files changed, 2 insertions, 41 deletions
diff --git a/Lib/sqlite3/dump.py b/Lib/sqlite3/dump.py
index 481d605194c..ead3360ce67 100644
--- a/Lib/sqlite3/dump.py
+++ b/Lib/sqlite3/dump.py
@@ -7,10 +7,6 @@
# future enhancements, you should normally quote any identifier that
# is an English language word, even if you do not have to."
-
-from contextlib import contextmanager
-
-
def _quote_name(name):
return '"{0}"'.format(name.replace('"', '""'))
@@ -19,24 +15,6 @@ def _quote_value(value):
return "'{0}'".format(value.replace("'", "''"))
-def _force_decode(bs, *args, **kwargs):
- # gh-108590: Don't fail if the database contains invalid Unicode data.
- try:
- return bs.decode(*args, **kwargs)
- except UnicodeDecodeError:
- return "".join([chr(c) for c in bs])
-
-
-@contextmanager
-def _text_factory(con, factory):
- saved_factory = con.text_factory
- con.text_factory = factory
- try:
- yield
- finally:
- con.text_factory = saved_factory
-
-
def _iterdump(connection):
"""
Returns an iterator to the dump of the database in an SQL text format.
@@ -96,9 +74,8 @@ def _iterdump(connection):
)
)
query_res = cu.execute(q)
- with _text_factory(connection, bytes):
- for row in query_res:
- yield("{0};".format(_force_decode(row[0])))
+ for row in query_res:
+ yield("{0};".format(row[0]))
# Now when the type is 'index', 'trigger', or 'view'
q = """
diff --git a/Lib/test/test_sqlite3/test_dump.py b/Lib/test/test_sqlite3/test_dump.py
index 0279ce68eeb..3107e1b165d 100644
--- a/Lib/test/test_sqlite3/test_dump.py
+++ b/Lib/test/test_sqlite3/test_dump.py
@@ -133,21 +133,6 @@ class DumpTests(MemoryDatabaseMixin, unittest.TestCase):
actual = list(self.cx.iterdump())
self.assertEqual(expected, actual)
- def test_dump_unicode_invalid(self):
- # gh-108590
- expected = [
- "BEGIN TRANSACTION;",
- "CREATE TABLE foo (data TEXT);",
- "INSERT INTO \"foo\" VALUES('a\x9f');",
- "COMMIT;",
- ]
- self.cu.executescript("""
- CREATE TABLE foo (data TEXT);
- INSERT INTO foo VALUES (CAST(X'619f' AS TEXT));
- """)
- actual = list(self.cx.iterdump())
- self.assertEqual(expected, actual)
-
if __name__ == "__main__":
unittest.main()
diff --git a/Misc/NEWS.d/next/Library/2023-08-29-22-53-48.gh-issue-108590.6k0pOl.rst b/Misc/NEWS.d/next/Library/2023-08-29-22-53-48.gh-issue-108590.6k0pOl.rst
deleted file mode 100644
index 50b41f2a94d..00000000000
--- a/Misc/NEWS.d/next/Library/2023-08-29-22-53-48.gh-issue-108590.6k0pOl.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed an issue where :meth:`sqlite3.Connection.iterdump` would fail and leave an incomplete SQL dump if a table includes invalid Unicode sequences. Patch by Corvin McPherson