]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a problem in sqlite-expert causing it to ignore equality constraints on the secon...
authordan <dan@noemail.net>
Thu, 17 Sep 2020 17:01:16 +0000 (17:01 +0000)
committerdan <dan@noemail.net>
Thu, 17 Sep 2020 17:01:16 +0000 (17:01 +0000)
FossilOrigin-Name: c666c85a433fbc83edef4dbfb0399672e570f5d7979ab61cb39ff5488595d822

ext/expert/expert1.test
ext/expert/sqlite3expert.c
manifest
manifest.uuid

index 3e5d604d52ad9cf8435723f8d031b433ea1c886b..f49f1f5e5c0aa20e1cffd8caca71d8603ef13d46 100644 (file)
@@ -326,6 +326,47 @@ do_setup_rec_test $tn.16 {
   SCAN TABLE t1
 }
 
+do_setup_rec_test $tn.17.1 {
+  CREATE TABLE example (A INTEGER, B INTEGER, C INTEGER, PRIMARY KEY (A,B));
+} {
+  SELECT * FROM example WHERE a=?
+} {
+  (no new indexes)
+  SEARCH TABLE example USING INDEX sqlite_autoindex_example_1 (A=?)
+}
+do_setup_rec_test $tn.17.2 {
+  CREATE TABLE example (A INTEGER, B INTEGER, C INTEGER, PRIMARY KEY (A,B));
+} {
+  SELECT * FROM example WHERE b=?
+} {
+  CREATE INDEX example_idx_00000042 ON example(B);
+  SEARCH TABLE example USING INDEX example_idx_00000042 (B=?)
+}
+do_setup_rec_test $tn.17.3 {
+  CREATE TABLE example (A INTEGER, B INTEGER, C INTEGER, PRIMARY KEY (A,B));
+} {
+  SELECT * FROM example WHERE a=? AND b=?
+} {
+  (no new indexes)
+  SEARCH TABLE example USING INDEX sqlite_autoindex_example_1 (A=? AND B=?)
+}
+do_setup_rec_test $tn.17.4 {
+  CREATE TABLE example (A INTEGER, B INTEGER, C INTEGER, PRIMARY KEY (A,B));
+} {
+  SELECT * FROM example WHERE a=? AND b>?
+} {
+  (no new indexes)
+  SEARCH TABLE example USING INDEX sqlite_autoindex_example_1 (A=? AND B>?)
+}
+do_setup_rec_test $tn.17.5 {
+  CREATE TABLE example (A INTEGER, B INTEGER, C INTEGER, PRIMARY KEY (A,B));
+} {
+  SELECT * FROM example WHERE a>? AND b=?
+} {
+  CREATE INDEX example_idx_0000cb3f ON example(B, A);
+  SEARCH TABLE example USING INDEX example_idx_0000cb3f (B=? AND A>?)
+}
+
 }
 
 proc do_candidates_test {tn sql res} {
index 1dd070089361cbd576212563634083c4c53b6414..c2a6fe3ba9f5c100611478e635c99cbf19555eeb 100644 (file)
@@ -685,6 +685,7 @@ static int idxGetTableInfo(
   IdxTable *pNew = 0;
   int rc, rc2;
   char *pCsr = 0;
+  int nPk = 0;
 
   rc = idxPrintfPrepareStmt(db, &p1, pzErrmsg, "PRAGMA table_info=%Q", zTab);
   while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(p1) ){
@@ -695,6 +696,7 @@ static int idxGetTableInfo(
     );
     nByte += 1 + STRLEN(zCol);
     nCol++;
+    nPk += (sqlite3_column_int(p1, 5)>0);
   }
   rc2 = sqlite3_reset(p1);
   if( rc==SQLITE_OK ) rc = rc2;
@@ -714,7 +716,7 @@ static int idxGetTableInfo(
     const char *zCol = (const char*)sqlite3_column_text(p1, 1);
     int nCopy = STRLEN(zCol) + 1;
     pNew->aCol[nCol].zName = pCsr;
-    pNew->aCol[nCol].iPk = sqlite3_column_int(p1, 5);
+    pNew->aCol[nCol].iPk = (sqlite3_column_int(p1, 5)==1 && nPk==1);
     memcpy(pCsr, zCol, nCopy);
     pCsr += nCopy;
 
index bd54c1e943aa2efa9c26bb571cdffc8147da8f40..b67dac10958bfe3c0915e384927bd62cd1c5c6c2 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sproblem\sin\sfts5\scausing\sthe\sin-memory\shash\stable\sto\sbe\sflushed\smore\soften\sthan\snecessary.
-D 2020-09-17T15:16:50.739
+C Fix\sa\sproblem\sin\ssqlite-expert\scausing\sit\sto\signore\sequality\sconstraints\son\sthe\ssecond\sor\ssubsequent\scolumns\sof\sa\smulti-column\sPRIMARY\sKEY.
+D 2020-09-17T17:01:16.712
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -49,8 +49,8 @@ F ext/async/sqlite3async.c 6f247666b495c477628dd19364d279c78ea48cd90c72d9f9b98ad
 F ext/async/sqlite3async.h 46b47c79357b97ad85d20d2795942c0020dc20c532114a49808287f04aa5309a
 F ext/expert/README.md b321c2762bb93c18ea102d5a5f7753a4b8bac646cb392b3b437f633caf2020c3
 F ext/expert/expert.c d548d603a4cc9e61f446cc179c120c6713511c413f82a4a32b1e1e69d3f086a4
-F ext/expert/expert1.test 2e10ff875c31c9e6fc5e324767624181273859771fe34c5daeeadf3f2974a4f7
-F ext/expert/sqlite3expert.c b5eae75862d34a204d16c45dcb813888b5f86bdc156c6136b0f79094c0da4f79
+F ext/expert/expert1.test dba6e752cc701621771f925f3872b183fa688f7b4a9f4822631fc02bdbffc45a
+F ext/expert/sqlite3expert.c 2778d9f06b3a8bfa859cb6b75b82f004477bf5dd78edd17d954319750ca963f3
 F ext/expert/sqlite3expert.h ca81efc2679a92373a13a3e76a6138d0310e32be53d6c3bfaedabd158ea8969b
 F ext/expert/test_expert.c d56c194b769bdc90cf829a14c9ecbc1edca9c850b837a4d0b13be14095c32a72
 F ext/fts1/README.txt 20ac73b006a70bcfd80069bdaf59214b6cf1db5e
@@ -1880,7 +1880,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 66f94d623c16b4527e42f0519e32ec78eaf9ee6fd61ee7d0eb657cc59a8f7d68
-R e41c17b4bed44058d505cf6f4e0a49a6
+P 9a55601d072bcd1ac0f6f1633216c7c8b3ff3e037451e2cfd285cbe19b60b9fc
+R 1b8ed3298f0ba2961d745b725529ab90
 U dan
-Z a006919448d0027496c11de5dc510a38
+Z 77444fb656cbd43553b87fd41a98a8c8
index 02c27d1517a48261f61cad1db85974468a453e9c..f3a1fb2a8a5e275d2c71fa95c2ea3c1746190154 100644 (file)
@@ -1 +1 @@
-9a55601d072bcd1ac0f6f1633216c7c8b3ff3e037451e2cfd285cbe19b60b9fc
\ No newline at end of file
+c666c85a433fbc83edef4dbfb0399672e570f5d7979ab61cb39ff5488595d822
\ No newline at end of file