diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2022-06-20 00:14:57 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-20 00:14:57 (GMT) |
commit | 8a1bade5106d6bc3f064eec459442fd8aa611968 (patch) | |
tree | aeb6f6e8fc13f8a337f6b2e4e9034f67356a5aed /Lib/sqlite3/test | |
parent | cdf3689aa57e4682c023e81b14ba9f5f4251691a (diff) | |
download | cpython-8a1bade5106d6bc3f064eec459442fd8aa611968.zip cpython-8a1bade5106d6bc3f064eec459442fd8aa611968.tar.gz cpython-8a1bade5106d6bc3f064eec459442fd8aa611968.tar.bz2 |
[3.10] gh-79009: sqlite3.iterdump now correctly handles tables with autoincrement (GH-9621) (#94015)
Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
(cherry picked from commit affa9f22cfd1e83a5fb413e5ce2feef9ea1a49ac)
Co-authored-by: itssme <itssme3000@gmail.com>
Diffstat (limited to 'Lib/sqlite3/test')
-rw-r--r-- | Lib/sqlite3/test/dump.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Lib/sqlite3/test/dump.py b/Lib/sqlite3/test/dump.py index 618a7fd..0e324ee 100644 --- a/Lib/sqlite3/test/dump.py +++ b/Lib/sqlite3/test/dump.py @@ -3,6 +3,7 @@ import unittest import sqlite3 as sqlite + class DumpTests(unittest.TestCase): def setUp(self): self.cx = sqlite.connect(":memory:") @@ -49,6 +50,51 @@ class DumpTests(unittest.TestCase): [self.assertEqual(expected_sqls[i], actual_sqls[i]) for i in range(len(expected_sqls))] + def test_dump_autoincrement(self): + expected = [ + 'CREATE TABLE "t1" (id integer primary key autoincrement);', + 'INSERT INTO "t1" VALUES(NULL);', + 'CREATE TABLE "t2" (id integer primary key autoincrement);', + ] + self.cu.executescript("".join(expected)) + + # the NULL value should now be automatically be set to 1 + expected[1] = expected[1].replace("NULL", "1") + expected.insert(0, "BEGIN TRANSACTION;") + expected.extend([ + 'DELETE FROM "sqlite_sequence";', + 'INSERT INTO "sqlite_sequence" VALUES(\'t1\',1);', + 'COMMIT;', + ]) + + actual = [stmt for stmt in self.cx.iterdump()] + self.assertEqual(expected, actual) + + def test_dump_autoincrement_create_new_db(self): + self.cu.execute("BEGIN TRANSACTION") + self.cu.execute("CREATE TABLE t1 (id integer primary key autoincrement)") + self.cu.execute("CREATE TABLE t2 (id integer primary key autoincrement)") + self.cu.executemany("INSERT INTO t1 VALUES(?)", ((None,) for _ in range(9))) + self.cu.executemany("INSERT INTO t2 VALUES(?)", ((None,) for _ in range(4))) + self.cx.commit() + + cx2 = sqlite.connect(":memory:") + query = "".join(self.cx.iterdump()) + cx2.executescript(query) + cu2 = cx2.cursor() + + dataset = ( + ("t1", 9), + ("t2", 4), + ) + for table, seq in dataset: + with self.subTest(table=table, seq=seq): + res = cu2.execute(""" + SELECT "seq" FROM "sqlite_sequence" WHERE "name" == ? + """, (table,)) + rows = res.fetchall() + self.assertEqual(rows[0][0], seq) + def test_unorderable_row(self): # iterdump() should be able to cope with unorderable row types (issue #15545) class UnorderableRow: |