diff Lib/sqlite3/test/dump.py @ 81367:2cdb599172ab 3.2

#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.
author R David Murray <rdmurray@bitdance.com>
date Thu, 10 Jan 2013 11:04:09 -0500
parents 4b105d328fe7
children
line wrap: on
line diff
--- a/Lib/sqlite3/test/dump.py	Wed Jan 09 12:21:57 2013 +0200
+++ b/Lib/sqlite3/test/dump.py	Thu Jan 10 11:04:09 2013 -0500
@@ -49,6 +49,27 @@
         [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"))