Fix the pragma_foreign_key_check virtual table so that it accepts arguments.

FossilOrigin-Name: 07f849dee3d245ecf80ba3c3ce8dfc630e71ddb1e9c0bcc1f08cee22001fcb07
This commit is contained in:
drh 2020-07-03 12:32:04 +00:00
parent ec1650a239
commit 4b849b0b09
5 changed files with 45 additions and 9 deletions

View File

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

View File

@ -1 +1 @@
81bc4b65ae2a68128b0be75a7a3d4f47f05cc588ff130ba56366ab9b16289228
07f849dee3d245ecf80ba3c3ce8dfc630e71ddb1e9c0bcc1f08cee22001fcb07

View 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

View 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

View 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)