@@ -2,6 +2,8 @@
2233importunittest
44importsqlite3assqlite
5+from .test_dbapiimportmemory_database
6+5768classDumpTests(unittest.TestCase):
79defsetUp(self):
@@ -49,6 +51,51 @@ def test_table_dump(self):
4951 [self.assertEqual(expected_sqls[i], actual_sqls[i])
5052foriinrange(len(expected_sqls))]
515354+deftest_dump_autoincrement(self):
55+expected= [
56+'CREATE TABLE "t1" (id integer primary key autoincrement);',
57+'INSERT INTO "t1" VALUES(NULL);',
58+'CREATE TABLE "t2" (id integer primary key autoincrement);',
59+ ]
60+self.cu.executescript("".join(expected))
61+62+# the NULL value should now be automatically be set to 1
63+expected[1] =expected[1].replace("NULL", "1")
64+expected.insert(0, "BEGIN TRANSACTION;")
65+expected.extend([
66+'DELETE FROM "sqlite_sequence";',
67+'INSERT INTO "sqlite_sequence" VALUES(\'t1\',1);',
68+'COMMIT;',
69+ ])
70+71+actual= [stmtforstmtinself.cx.iterdump()]
72+self.assertEqual(expected, actual)
73+74+deftest_dump_autoincrement_create_new_db(self):
75+self.cu.execute("BEGIN TRANSACTION")
76+self.cu.execute("CREATE TABLE t1 (id integer primary key autoincrement)")
77+self.cu.execute("CREATE TABLE t2 (id integer primary key autoincrement)")
78+self.cu.executemany("INSERT INTO t1 VALUES(?)", ((None,) for_inrange(9)))
79+self.cu.executemany("INSERT INTO t2 VALUES(?)", ((None,) for_inrange(4)))
80+self.cx.commit()
81+82+withmemory_database() ascx2:
83+query="".join(self.cx.iterdump())
84+cx2.executescript(query)
85+cu2=cx2.cursor()
86+87+dataset= (
88+ ("t1", 9),
89+ ("t2", 4),
90+ )
91+fortable, seqindataset:
92+withself.subTest(table=table, seq=seq):
93+res=cu2.execute("""
94+ SELECT "seq" FROM "sqlite_sequence" WHERE "name" == ?
95+ """, (table,))
96+rows=res.fetchall()
97+self.assertEqual(rows[0][0], seq)
98+5299deftest_unorderable_row(self):
53100# iterdump() should be able to cope with unorderable row types (issue #15545)
54101classUnorderableRow: