From 139ec38ac82052871244f846358cf281f107e93e Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 30 Oct 2025 18:52:48 +0000 Subject: [PATCH] Further improvements the ".dump" command to handle corner cases. FossilOrigin-Name: cd0c77934ff32050380c2143bba7d4e6c07d5f08187cb5d5e8e7602854d1cda8 --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/shell.c.in | 8 ++++++-- test/shell1.test | 26 ++++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 296d3dd8d0..9e31e1642b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Another\s(void),\sas\sper\s[dd6edfc09434]. -D 2025-10-30T18:48:19.840 +C Further\simprovements\sthe\s".dump"\scommand\sto\shandle\scorner\scases. +D 2025-10-30T18:52:48.090 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -736,7 +736,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c f8d1d011aba0964ff1bdccd049d4d2c2fec217efd90d202a4bb775e926b2c25d F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c b95181711d59c36d9789e67f76c4cfec64b99f9629a50be5e6566e117b87d957 -F src/shell.c.in 4dd1b2acb7a55fd8d8eaed9f63d12534a21e46cb617fd30ad5e47b84b07168d4 +F src/shell.c.in 20e64d6b9a587af2a36b97b9787e065c99065db4a8069e915884bc19be8a1dba F src/sqlite.h.in f7944026ee89ea348f89aec56372d6d25b6cafc1d89df741278d6917e86326a3 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479 F src/sqlite3ext.h 7f236ca1b175ffe03316d974ef57df79b3938466c28d2f95caef5e08c57f3a52 @@ -1600,7 +1600,7 @@ F test/sharedA.test 64bdd21216dda2c6a3bd3475348ccdc108160f34682c97f2f51c19fc0e21 F test/sharedB.test 1a84863d7a2204e0d42f2e1606577c5e92e4473fa37ea0f5bdf829e4bf8ee707 F test/shared_err.test 32634e404a3317eeb94abc7a099c556a346fdb8fb3858dbe222a4cbb8926a939 F test/sharedlock.test 5ede3c37439067c43b0198f580fd374ebf15d304 -F test/shell1.test ab6c74a807903df21e9ee62003bf9954513d06b8b52186c25782dbe9f1204518 +F test/shell1.test 120eeaa390c74c35001d0472035f6bf7d8df47689d98356f685bb69ea1417647 F test/shell2.test ab23f01ea2347e4b72bb2399af7ee82aa00f9c059141749f7c4064abca5ad728 F test/shell3.test 603b448e917537cf77be0f265c05c6f63bc677c63a533c8e96aae923b56f4a0e F test/shell4.test 03593fa7908a55f255916ffeda707cdf55680c777736e3da62b1d78cde0d684d @@ -2171,8 +2171,8 @@ F tool/version-info.c 33d0390ef484b3b1cb685d59362be891ea162123cea181cb8e6d2cf6dd F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P dd6edfc09434b0d170d5ab462053497043016a4ec6b91a46db565ccf646aee20 -R dbc9afd9d73a1232f82322829d75026d -U stephan -Z 3492c1ab259b0d1dbd354cc6f430ef54 +P 7a822cfd388d7ac5765cffd5bd3d6e5b31abc6a360f9d5e27c0223f83a84237e +R 05877e8742a2e86e4cef90395a3f9cc8 +U drh +Z 281dd2519d168e33d9518b33415c468a # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 1b0003362b..655e2cfef7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7a822cfd388d7ac5765cffd5bd3d6e5b31abc6a360f9d5e27c0223f83a84237e +cd0c77934ff32050380c2143bba7d4e6c07d5f08187cb5d5e8e7602854d1cda8 diff --git a/src/shell.c.in b/src/shell.c.in index c74ec05e12..1d0f6e9084 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -4966,7 +4966,6 @@ static void toggleSelectOrder(sqlite3 *db){ /* Forward reference */ static int db_int(sqlite3 *db, const char *zSql, ...); - /* ** This is a different callback routine used for dumping the database. ** Each row received by this callback consists of a table name, @@ -5001,7 +5000,12 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azNotUsed){ ** 2024-10-13T17:10:01z and 2025-10-29T19:38:43z */ if( db_int(p->db, "SELECT count(*) FROM sqlite_sequence")>0 ){ - sqlite3_fputs("DELETE FROM sqlite_sequence;\n", p->out); + if( !p->writableSchema ){ + sqlite3_fputs("PRAGMA writable_schema=ON;\n", p->out); + p->writableSchema = 1; + } + sqlite3_fputs("CREATE TABLE IF NOT EXISTS FROM sqlite_sequence;\n" + "DELETE FROM sqlite_sequence;\n", p->out); } }else if( sqlite3_strglob("sqlite_stat?", zTable)==0 && !noSys ){ if( !dataOnly ) sqlite3_fputs("ANALYZE sqlite_schema;\n", p->out); diff --git a/test/shell1.test b/test/shell1.test index 4f56895130..0d39c0690f 100644 --- a/test/shell1.test +++ b/test/shell1.test @@ -964,8 +964,11 @@ CREATE TABLE t1(a INTEGER PRIMARY KEY AUTOINCREMENT, b); INSERT INTO t1 VALUES(1,2); INSERT INTO t1 VALUES(15,16); INSERT INTO t1 VALUES(20,21); +PRAGMA writable_schema=ON; +CREATE TABLE IF NOT EXISTS FROM sqlite_sequence; DELETE FROM sqlite_sequence; INSERT INTO sqlite_sequence VALUES('t1',20); +PRAGMA writable_schema=OFF; COMMIT;}} do_test shell1-4.1.8 { db close @@ -984,6 +987,29 @@ BEGIN TRANSACTION; CREATE TABLE t2(x,y); INSERT INTO t2 VALUES(99,88); COMMIT;}} +do_test shell1-4.1.9 { + db close + forcedelete test2.db + sqlite3 db test2.db + db eval { + CREATE TABLE t1(a INTEGER PRIMARY KEY AUTOINCREMENT, b); + INSERT INTO t1 VALUES(1,2),(20,21),(15,16); + CREATE TABLE t2(x,y); + INSERT INTO t2 VALUES(99,88); + INSERT INTO sqlite_sequence VALUES('extra',999); + DROP TABLE t1; + } + catchcmd test2.db {.dump} +} {0 {PRAGMA foreign_keys=OFF; +BEGIN TRANSACTION; +CREATE TABLE t2(x,y); +INSERT INTO t2 VALUES(99,88); +PRAGMA writable_schema=ON; +CREATE TABLE IF NOT EXISTS FROM sqlite_sequence; +DELETE FROM sqlite_sequence; +INSERT INTO sqlite_sequence VALUES('extra',999); +PRAGMA writable_schema=OFF; +COMMIT;}} # Test the output of ".mode insert" # -- 2.47.3