gh-79009: sqlite3.iterdump now correctly handles tables with autoincr… · python/cpython@affa9f2

GitHub

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