[3.11] gh-108590: Revert gh-108657 (commit 400a1cebc) (#108686) (#108694)

(cherry picked from commit 2a3926fa51)

Reverted per Serhiy's request.
This commit is contained in:
Erlend E. Aasland 2023-08-30 22:12:10 +02:00 committed by GitHub
parent f8ab9751da
commit 6f24420cbf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 2 additions and 41 deletions

View file

@ -7,28 +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 _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.
@ -85,9 +63,8 @@ def _iterdump(connection):
table_name_ident,
",".join("""'||quote("{0}")||'""".format(col.replace('"', '""')) for col in column_names))
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 = """

View file

@ -137,21 +137,6 @@ class DumpTests(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()

View file

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