mirror of
https://github.com/python/cpython.git
synced 2025-07-24 03:35:53 +00:00
#15545: fix sqlite3.iterdump regression on unsortable row_factory objects.
The fix for issue 9750 introduced a regression by sorting the row objects returned by fetchall. But if a row_factory such as sqlite3.Row is used, the rows may not be sortable (in Python3), which leads to an exception. The sorting is still a nice idea, so the patch moves the sort into the sql. Fix and test by Peter Otten.
This commit is contained in:
parent
78470b4c3a
commit
b52312923b
3 changed files with 27 additions and 1 deletions
|
@ -49,6 +49,27 @@ class DumpTests(unittest.TestCase):
|
|||
[self.assertEqual(expected_sqls[i], actual_sqls[i])
|
||||
for i in range(len(expected_sqls))]
|
||||
|
||||
def CheckUnorderableRow(self):
|
||||
# iterdump() should be able to cope with unorderable row types (issue #15545)
|
||||
class UnorderableRow:
|
||||
def __init__(self, cursor, row):
|
||||
self.row = row
|
||||
def __getitem__(self, index):
|
||||
return self.row[index]
|
||||
self.cx.row_factory = UnorderableRow
|
||||
CREATE_ALPHA = """CREATE TABLE "alpha" ("one");"""
|
||||
CREATE_BETA = """CREATE TABLE "beta" ("two");"""
|
||||
expected = [
|
||||
"BEGIN TRANSACTION;",
|
||||
CREATE_ALPHA,
|
||||
CREATE_BETA,
|
||||
"COMMIT;"
|
||||
]
|
||||
self.cu.execute(CREATE_BETA)
|
||||
self.cu.execute(CREATE_ALPHA)
|
||||
got = list(self.cx.iterdump())
|
||||
self.assertEqual(expected, got)
|
||||
|
||||
def suite():
|
||||
return unittest.TestSuite(unittest.makeSuite(DumpTests, "Check"))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue