aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordan <Dan Kennedy>2025-02-13 14:47:25 +0000
committerdan <Dan Kennedy>2025-02-13 14:47:25 +0000
commit5087eacb18b6e89291abc15c2818832ae99fd3cc (patch)
tree43c694901701b601ac54e30f183636d77ba42413
parent25367c1eb04aa55b47d1e253e5e85cf9e6d7228b (diff)
downloadsqlite-5087eacb18b6e89291abc15c2818832ae99fd3cc.tar.gz
sqlite-5087eacb18b6e89291abc15c2818832ae99fd3cc.zip
Ensure the counts of "deferred FK violations" and "deferred immediate FK violations" are kept separate when "PRAGMA defer_foreign_keys" is used.
FossilOrigin-Name: c5190b0fd9bd76653fb7bb08e931699e42c88cef8a00352360d091948cda93a2
-rw-r--r--manifest16
-rw-r--r--manifest.uuid2
-rw-r--r--src/pragma.c5
-rw-r--r--src/vdbe.c10
-rw-r--r--test/fkey6.test30
5 files changed, 49 insertions, 14 deletions
diff --git a/manifest b/manifest
index d046f2682..ecfcfa1a0 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sfew\s32-bit\soverflow\sproblems\sin\sshowdb.c.
-D 2025-02-12T20:19:57.718
+C Ensure\sthe\scounts\sof\s"deferred\sFK\sviolations"\sand\s"deferred\simmediate\sFK\sviolations"\sare\skept\sseparate\swhen\s"PRAGMA\sdefer_foreign_keys"\sis\sused.
+D 2025-02-13T14:47:25.229
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -772,7 +772,7 @@ F src/parse.y f84673f1454e2bcf517623d4346e67fb2d73e57826ea103681ad5848238f6029
F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484
F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5
F src/pcache1.c 49516ad7718a3626f28f710fa7448ef1fce3c07fd169acbb4817341950264319
-F src/pragma.c ce1182217aa540e034c6da2f17515e3706bf52c837e8222361be9ccd7a9d495a
+F src/pragma.c c7ada272232e1182c4536d9637fa7b955a10bc1bd8d5a87d4dc9309dab827791
F src/prepare.c 1832be043fce7d489959aae6f994c452d023914714c4d5457beaed51c0f3d126
F src/printf.c 96f7f8baeedc7639da94e4e7a4a2c200e2537c4eec9e5e1c2ffc821f40eb3105
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
@@ -847,7 +847,7 @@ F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1
F src/utf.c 8b29d9a5956569ea2700f869669b8ef67a9662ee5e724ff77ab3c387e27094ba
F src/util.c 9ff6470dabcf943fd796d2da766c98bd328c8f6fe036a31e5b338e628603f989
F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40
-F src/vdbe.c b98d86de7f0e6c02fb14e0e1ae8feab6aa84669d389771a848e23f59eb70dcad
+F src/vdbe.c 063763e08f1ad00890b7377fc663dbccec85a47630f5d2bbb13f3fdf77e06f78
F src/vdbe.h 3d26d5c7660c5c7bd33ffb0d8784615072d8b23c81f8110870efe2631136bc89
F src/vdbeInt.h 078b1c15b26587b54c1c1879d0d2f4dec812b9de4c337fed9faf73fbcc3bf091
F src/vdbeapi.c 82fe278a7c71b653235c6f9fb5de0b5de589908dfcb011ba2a782e8becf06f86
@@ -1153,7 +1153,7 @@ F test/fkey2.test 1063d65e5923c054cfb8f0555a92a3ae0fa8c067275a33ee1715bd856cdb30
F test/fkey3.test 76d475c80b84ee7a5d062e56ccb6ea68882e2b49
F test/fkey4.test 86446017011273aad8f9a99c1a65019e7bd9ca9d
F test/fkey5.test 6727452e163a427147e84e739da18713da553d79f9783559b04fdcd36d5c7421
-F test/fkey6.test ebd11efb00b9c70b57f4c6b6184445145c96e320329bd90a175036570c5b25ca
+F test/fkey6.test 1e0874ba15f8ed1e14a1d0a40fc8fb90a9912f4c82ea220a43137d4d9eff4d69
F test/fkey7.test 64fb28da03da5dfe3cdef5967aa7e832c2507bf7fb8f0780cacbca1f2338d031
F test/fkey8.test 51deda7f1a1448bca95875e4a6e1a3a75b4bd7215e924e845bd60de60e4d84bf
F test/fkey_malloc.test 594a7ea1fbab553c036c70813cd8bd9407d63749
@@ -2207,8 +2207,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 6df859cd18ded3ca64a184e45709503dd9b6a3f65e7611d3352f0bad288400f4
-R ccf520bbb9a2866ca6aec9263e29fec3
+P 9377766647eeaa575d646cf5f66c3163ef7074930aa5c3b11073e6b1e90ce799
+R 83e471c75257ae61568ff2a0fb629999
U dan
-Z 06705c2bc45432ef657decbbc71b836f
+Z e4f9c0246de36460838c8b5d3a4c9bbe
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 84fa86757..3179d7a51 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-9377766647eeaa575d646cf5f66c3163ef7074930aa5c3b11073e6b1e90ce799
+c5190b0fd9bd76653fb7bb08e931699e42c88cef8a00352360d091948cda93a2
diff --git a/src/pragma.c b/src/pragma.c
index 291ccf7af..f1a922d1a 100644
--- a/src/pragma.c
+++ b/src/pragma.c
@@ -1153,7 +1153,10 @@ void sqlite3Pragma(
}
}else{
db->flags &= ~mask;
- if( mask==SQLITE_DeferFKs ) db->nDeferredImmCons = 0;
+ if( mask==SQLITE_DeferFKs ){
+ db->nDeferredImmCons = 0;
+ db->nDeferredCons = 0;
+ }
if( (mask & SQLITE_WriteSchema)!=0
&& sqlite3_stricmp(zRight, "reset")==0
){
diff --git a/src/vdbe.c b/src/vdbe.c
index ec871c5a6..6d7769173 100644
--- a/src/vdbe.c
+++ b/src/vdbe.c
@@ -7483,12 +7483,14 @@ case OP_Param: { /* out2 */
** statement counter is incremented (immediate foreign key constraints).
*/
case OP_FkCounter: {
- if( db->flags & SQLITE_DeferFKs ){
- db->nDeferredImmCons += pOp->p2;
- }else if( pOp->p1 ){
+ if( pOp->p1 ){
db->nDeferredCons += pOp->p2;
}else{
- p->nFkConstraint += pOp->p2;
+ if( db->flags & SQLITE_DeferFKs ){
+ db->nDeferredImmCons += pOp->p2;
+ }else{
+ p->nFkConstraint += pOp->p2;
+ }
}
break;
}
diff --git a/test/fkey6.test b/test/fkey6.test
index 72de926b5..7cdc8ab0a 100644
--- a/test/fkey6.test
+++ b/test/fkey6.test
@@ -267,5 +267,35 @@ do_execsql_test 5.1 {
COMMIT;
}
+#-------------------------------------------------------------------------
+#
+reset_db
+
+do_execsql_test 6.1 {
+ PRAGMA writable_schema = 1;
+ INSERT INTO sqlite_schema
+ VALUES('table', 't1', 't1', 2, 'CREATE TABLE t1(x INTEGER PRIMARY KEY)');
+}
+db close
+sqlite3 db test.db
+do_execsql_test 6.1 {
+ PRAGMA foreign_keys = 1;
+ PRAGMA writable_schema = 1;
+}
+do_execsql_test 6.2 {
+ CREATE TABLE t2(
+ y INTEGER PRIMARY KEY,
+ z INTEGER REFERENCES t1(x) DEFERRABLE INITIALLY DEFERRED
+ );
+}
+do_execsql_test 6.3 {
+ BEGIN;
+ INSERT INTO t2 VALUES(1,0),(2,1);
+ CREATE VIRTUAL TABLE t3 USING fts5(a, b, content='', tokendata=1);
+ INSERT INTO t3 VALUES(3,3);
+ PRAGMA defer_foreign_keys=ON;
+ DELETE FROM t2;
+ COMMIT;
+}
finish_test