]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix the ".lint fkey" shell command for cases where the child key is also an
authordan <dan@noemail.net>
Thu, 6 Apr 2017 14:56:26 +0000 (14:56 +0000)
committerdan <dan@noemail.net>
Thu, 6 Apr 2017 14:56:26 +0000 (14:56 +0000)
INTEGER PRIMARY KEY.

FossilOrigin-Name: 48826b222c110a90996a84605318ea6b1e502b8c5129f4d561f8350dbdbcd264

manifest
manifest.uuid
src/shell.c
test/shell6.test

index 768c769f241f1cab7f7304337ef2686481b1a444..50c2d8faef33dfd8d8eecf8fc3c36b5df6116002 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sthe\s".lint\sfkey"\sshell\stool\scommand\sso\sthat\sit\sworks\sfor\sforeign\skeys\sthat\nrefer\simplicitly\sto\sprimary\skey\scolumns\swith\snon-BINARY\sdefault\scollation\nsequences.
-D 2017-04-06T12:06:56.710
+C Fix\sthe\s".lint\sfkey"\sshell\scommand\sfor\scases\swhere\sthe\schild\skey\sis\salso\san\nINTEGER\sPRIMARY\sKEY.
+D 2017-04-06T14:56:26.887
 F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc a4c0613a18663bda56d8cf76079ab6590a7c3602e54befb4bbdef76bcaa38b6a
@@ -402,7 +402,7 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
 F src/resolve.c 3e518b962d932a997fae373366880fc028c75706
 F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
 F src/select.c afcf31d8ed7c890328a31d3f350467ccd273af345b24562382b398d6d9cd0664
-F src/shell.c 358aaf2642749697283969d3287bd1088047b08b3f5b98959aa5d1658e358199
+F src/shell.c e9fede684f847402c0373fe5e270918e6ef47f51e57ba5aebff121d8c2bc1ea8
 F src/sqlite.h.in ab77e511620eebbd4ed7e4f52fae697b6870dda66c945acd2d3066f99c98e17e
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h 58fd0676d3111d02e62e5a35992a7d3da5d3f88753acc174f2d37b774fbbdd28
@@ -1120,7 +1120,7 @@ F test/shell2.test e242a9912f44f4c23c3d1d802a83e934e84c853b
 F test/shell3.test 9b95ba643eaa228376f06a898fb410ee9b6e57c1
 F test/shell4.test 89ad573879a745974ff2df20ff97c5d6ffffbd5d
 F test/shell5.test 50a732c1c2158b1cd62cf53975ce1ea7ce6b9dc9
-F test/shell6.test 0abf96c5ba713b6868ba93b9c787d636e9a95b437c7fd410b4c5a0178503f18b
+F test/shell6.test ab1592ebe881371f651f18ee6a0df21cbfb5310f88cb832ab642d4038f679772
 F test/shell7.test 07751911b294698e0c5df67bcbd29e7d2f0f2907
 F test/shortread1.test bb591ef20f0fd9ed26d0d12e80eee6d7ac8897a3
 F test/show_speedtest1_rtree.tcl 32e6c5f073d7426148a6936a0408f4b5b169aba5
@@ -1570,7 +1570,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P c5f1a2b6eb3df879d247a22b3f92f4f74fcf4f0d219450abc420ae6d02481324
-R 38865868241e76c5f4d0751e4191f43b
+P 327eff25ba2420267cc8dc49dd3c3aab45f4bf9e060d1ad480e25d016d21f3ba
+R 260410c30d599e0993c58e23cef69640
 U dan
-Z 648bbd72dcc7b5fa391514717251386d
+Z 25db1dc906fb1b522f7b655980ddd579
index 3a5b11b74fed936c57da9bda55311478ee3cd924..3814e9cddff25c51fa44e957d3fe9fa0c5dc610d 100644 (file)
@@ -1 +1 @@
-327eff25ba2420267cc8dc49dd3c3aab45f4bf9e060d1ad480e25d016d21f3ba
\ No newline at end of file
+48826b222c110a90996a84605318ea6b1e502b8c5129f4d561f8350dbdbcd264
\ No newline at end of file
index ab26865f3b671c0984caa0c9c69fdef62351f59f..b28a1421d33eb723c5106a1afae7b04d7adfe8fe 100644 (file)
@@ -4354,6 +4354,7 @@ static int lintFkeyIndexes(
     "GROUP BY s.name, f.id "
     "ORDER BY (CASE WHEN ? THEN f.[table] ELSE s.name END)"
   ;
+  const char *zGlobIPK = "SEARCH TABLE * USING INTEGER PRIMARY KEY (rowid=?)";
 
   for(i=2; i<nArg; i++){
     int n = (int)strlen(azArg[i]);
@@ -4402,7 +4403,10 @@ static int lintFkeyIndexes(
       if( rc!=SQLITE_OK ) break;
       if( SQLITE_ROW==sqlite3_step(pExplain) ){
         const char *zPlan = (const char*)sqlite3_column_text(pExplain, 3);
-        res = (0==sqlite3_strglob(zGlob, zPlan));
+        res = (
+              0==sqlite3_strglob(zGlob, zPlan)
+           || 0==sqlite3_strglob(zGlobIPK, zPlan)
+        );
       }
       rc = sqlite3_finalize(pExplain);
       if( rc!=SQLITE_OK ) break;
index d762732d598b169678bb2f01570b8c3bccac8a70..25bfa32338eb83b01b648756a2a0893ae90611c5 100644 (file)
@@ -87,6 +87,12 @@ foreach {tn schema output} {
     CREATE INDEX 'y1_d_e_f' ON 'y1'('d' COLLATE rtrim, 'e' COLLATE nocase, 'f'); --> x1(c,b,a)
   }
 
+  9 {
+    CREATE TABLE p1(a, b UNIQUE);
+    CREATE TABLE c1(x INTEGER PRIMARY KEY REFERENCES p1(b));
+  } {
+  }
+
 } {
   forcedelete test.db
   sqlite3 db test.db