Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Lib/sqlite3/dump.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ def _iterdump(connection, *, filter=None):

writeable_schema = False
cu = connection.cursor()
cu.row_factory = None # Make sure we get predictable results.
# Disable foreign key constraints, if there is any foreign key violation.
violations = cu.execute("PRAGMA foreign_key_check").fetchall()
if violations:
Expand Down
15 changes: 15 additions & 0 deletions Lib/test/test_sqlite3/test_dump.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,21 @@ def __getitem__(self, index):
got = list(self.cx.iterdump())
self.assertEqual(expected, got)

def test_dump_custom_row_factory(self):
# gh-118221: iterdump should be able to cope with custom row factories
def dict_factory(cu, row):
fields = [col[0] for col in cu.description]
return {k: v for k, v in zip(fields, row)}

self.cx.row_factory = dict_factory
CREATE_TABLE = "CREATE TABLE test(t);"
expected = ["BEGIN TRANSACTION;", CREATE_TABLE, "COMMIT;"]

self.cu.execute(CREATE_TABLE)
actual = list(self.cx.iterdump())
self.assertEqual(expected, actual)
self.assertEqual(self.cx.row_factory, dict_factory)

def test_dump_virtual_tables(self):
# gh-64662
expected = [
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix a bug where :func:`sqlite3.iterdump` could fail if a custom :attr:`row
factory <sqlite3.Cursor.row_factory>` was supplied. Patch by Erlend Aasland.