]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix the pragma_foreign_key_check virtual table so that it accepts arguments.
authordrh <drh@noemail.net>
Fri, 3 Jul 2020 12:32:04 +0000 (12:32 +0000)
committerdrh <drh@noemail.net>
Fri, 3 Jul 2020 12:32:04 +0000 (12:32 +0000)
FossilOrigin-Name: 07f849dee3d245ecf80ba3c3ce8dfc630e71ddb1e9c0bcc1f08cee22001fcb07

manifest
manifest.uuid
src/pragma.h
test/fkey5.test
tool/mkpragmatab.tcl

index 8f4e60a0d39deff36a25e57644d94524ea8365ef..516ef5ea8856960fb5e3c18fb19c805fc603f36f 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,6 +1,6 @@
 B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b
-C Fix\sa\sproblem\swith\s"PRAGMA\sforeign_key_check"\swhere\sif\sa\stable\sin\sone\nschema\sappears\sto\shave\sforeign\skey\sconstraints\sagainst\sanother\stable\sin\na\sdifferent\sschema,\sthe\spragma\swill\stry\sto\scheck\sthe\sconstraints\seven\sthough\nthey\sdo\snot\sapply\sbecause\sthey\sare\sin\sdifferent\sschemas.
-D 2020-07-03T12:15:59.796
+C Fix\sthe\spragma_foreign_key_check\svirtual\stable\sso\sthat\sit\saccepts\sarguments.
+D 2020-07-03T12:32:04.573
 F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806
 F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574
 F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8
@@ -15,6 +15,7 @@ F src/btreeInt.h 19267385aa3bc00067d48e0e4ba83ae82dc08b0c15a3b3df20ea653cb462b5b
 F src/build.c ba1bbe563a3dc02d5fed20537603181e5289c13ea30ae5e775f552e7557adbfa
 F src/expr.c a3ab84399b3415f66d2d0c25f5bcd98ef465c0c07ea1f19bf2a418b1c8fcad74
 F src/pragma.c 1c6a435c92e913a65be9875c14bd2976fa1bf05b76a54785378c32b04fa34a00
+F src/pragma.h 8dc78ab7e9ec6ce3ded8332810a2066f1ef6267e2e03cd7356ee00276125c6cf
 F src/resolve.c 79cee37182fea66703f90365b8b0a646ed7e9bfa9238b91fa90dfc74258b940e
 F src/select.c 860daa05592ed1b38f6266f067fa020b539548ab929aa60fa59e7681e7f3f8cb
 F src/shell.c.in d663152487d4bfddea0f6d21ebc2ed51575d22657a02c6828afd344bbd4651af
@@ -27,18 +28,19 @@ F test/altertab.test b8b2104212e8ea87c75c3cbe3cb78ed7236a6c828ee2e59ed09d3dbe981
 F test/busy2.test 415364312743992641f9bf679c84918327296067f85a5d00012b339dc35acbd7
 F test/decimal.test 12739a01bdba4c4d79f95b323e6b67b9fad1ab6ffb56116bd2b9c81a5b19e1d9
 F test/filter1.test 6c483ecf7886c8843a8612c021aa23f33c581f584151f251842b3a3592c95ac8
-F test/fkey5.test bb2261477c66b2631391f5c98cfae1bc87c65fad02573eff122290e808b057ea
+F test/fkey5.test 321fd41e8754389526b2b8e8769348dc9ff23a65d4d48b19c27df17459e82ec5
 F test/fts3corrupt4.test 35e88f7708868a67598f1f6d3666774f6c7b34c91e3b74bd2965030fc70fb928
 F test/fuzzdata8.db 0ae860b36b79fd41cafddc9e6602358b2d5c331cf200283221e659f86e196c0c
 F test/gencol1.test b05e6c5edb9b10d48efb634ed07342441bddc89d225043e17095c36e567521a0
 F test/ieee754.test b0945d12be7d255f3dfa18e2511b17ca37e0edd2b803231c52d05b86c04ab26e
 F test/speedtest1.c a8b5afe72d78ff365012aba48d3f0c579e957facb7630f765f58a6ae4656d20d
 F tool/mkautoconfamal.sh f62353eb6c06ab264da027fd4507d09914433dbdcab9cb011cdc18016f1ab3b8
+F tool/mkpragmatab.tcl ae5585ae76ca26e4d6ccd5ea9cdebaf5efefb318bf989497a0e846cd711d9ab1
 F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfae0e84c
 F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf
 F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564
 F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58
-P 6ffd17b668a8ad561c37e89063afb6e7f8425e557e93025b7527fe3656585d77
-R 5351216f77b38761a595d358da98b9c2
+P 81bc4b65ae2a68128b0be75a7a3d4f47f05cc588ff130ba56366ab9b16289228
+R 959518f214ac8fa04f9479823db88ae3
 U drh
-Z 5a3fead9e5239b45d904ac903a47c04e
+Z df6c0f239cac29280d3b9659da8bad1e
index 2e2b3e6a0e3495716c7b21a62c1995c18466a9fd..c0880373ffc993073acd9f730916e25b776bf849 100644 (file)
@@ -1 +1 @@
-81bc4b65ae2a68128b0be75a7a3d4f47f05cc588ff130ba56366ab9b16289228
\ No newline at end of file
+07f849dee3d245ecf80ba3c3ce8dfc630e71ddb1e9c0bcc1f08cee22001fcb07
\ No newline at end of file
index 0d7cae0e1dd240d55e4283e1ea02eb9f5d22f678..be99befb2a7746897894a548fc88e30ed0066968 100644 (file)
@@ -281,7 +281,7 @@ static const PragmaName aPragmaName[] = {
 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
  {/* zName:     */ "foreign_key_check",
   /* ePragTyp:  */ PragTyp_FOREIGN_KEY_CHECK,
-  /* ePragFlg:  */ PragFlg_NeedSchema|PragFlg_Result0,
+  /* ePragFlg:  */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_Result1|PragFlg_SchemaOpt,
   /* ColNames:  */ 37, 4,
   /* iArg:      */ 0 },
 #endif
index 0fb07acd2009a582d5fbeee4ddb48b83822ee51d..0c0d206b43201cbda53ba91051100fa13251522f 100644 (file)
@@ -450,5 +450,39 @@ do_execsql_test 12.1 {
   PRAGMA foreign_key_check=t1;
 } {t1 9 t2 0}
 
+# 2020-07-03: the pragma_foreign_key_check virtual table should
+# accept arguments for the table name and/or schema name.
+#
+do_execsql_test 13.0 {
+  SELECT *, 'x' FROM pragma_foreign_key_check('t1');
+} {t1 9 t2 0 x}
+do_catchsql_test 13.1 {
+  SELECT *, 'x' FROM pragma_foreign_key_check('t1','main');
+} {1 {no such table: main.t1}}
+do_execsql_test 13.2 {
+  SELECT *, 'x' FROM pragma_foreign_key_check('t1','aux');
+} {t1 9 t2 0 x}
+
+reset_db
+do_execsql_test 13.10 {
+  PRAGMA foreign_keys=OFF;
+  CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT REFERENCES t2);
+  CREATE TABLE t2(x TEXT PRIMARY KEY, y INT);
+  CREATE TABLE t3(w TEXT, z INT REFERENCES t1);
+  INSERT INTO t2 VALUES('abc',11),('def',22),('xyz',99);
+  INSERT INTO t1 VALUES(5,'abc'),(7,'xyz'),(9,'oops');
+  INSERT INTO t3 VALUES(11,7),(22,19);
+} {}
+do_execsql_test 13.11 {
+  SELECT x.*, '|'
+    FROM sqlite_schema, pragma_foreign_key_check(name) AS x
+   WHERE type='table'
+   ORDER BY x."table";
+} {t1 9 t2 0 | t3 2 t1 0 |}
+do_execsql_test 13.12 {
+  SELECT *, '|'
+    FROM pragma_foreign_key_check AS x
+   ORDER BY x."table";
+} {t1 9 t2 0 | t3 2 t1 0 |}
 
 finish_test
index c33f20fd98c2b82cc5305b6bb34963665026485f..7c1576563107fe3096a2c4a9600852d909923e63 100644 (file)
@@ -289,7 +289,7 @@ set pragma_def {
   IF:   !defined(SQLITE_OMIT_FOREIGN_KEY)
 
   NAME: foreign_key_check
-  FLAG: NeedSchema Result0
+  FLAG: NeedSchema Result0 Result1 SchemaOpt
   COLS: table rowid parent fkid
   IF:   !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)