From: drh Date: Fri, 3 Jul 2020 12:32:04 +0000 (+0000) Subject: Fix the pragma_foreign_key_check virtual table so that it accepts arguments. X-Git-Tag: version-3.33.0~77 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4b849b0b09b1ed472c56effd50ebe09b6e2c4adf;p=thirdparty%2Fsqlite.git Fix the pragma_foreign_key_check virtual table so that it accepts arguments. FossilOrigin-Name: 07f849dee3d245ecf80ba3c3ce8dfc630e71ddb1e9c0bcc1f08cee22001fcb07 --- diff --git a/manifest b/manifest index 8f4e60a0d3..516ef5ea88 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 2e2b3e6a0e..c0880373ff 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -81bc4b65ae2a68128b0be75a7a3d4f47f05cc588ff130ba56366ab9b16289228 \ No newline at end of file +07f849dee3d245ecf80ba3c3ce8dfc630e71ddb1e9c0bcc1f08cee22001fcb07 \ No newline at end of file diff --git a/src/pragma.h b/src/pragma.h index 0d7cae0e1d..be99befb2a 100644 --- a/src/pragma.h +++ b/src/pragma.h @@ -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 diff --git a/test/fkey5.test b/test/fkey5.test index 0fb07acd20..0c0d206b43 100644 --- a/test/fkey5.test +++ b/test/fkey5.test @@ -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 diff --git a/tool/mkpragmatab.tcl b/tool/mkpragmatab.tcl index c33f20fd98..7c15765631 100644 --- a/tool/mkpragmatab.tcl +++ b/tool/mkpragmatab.tcl @@ -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)