From: dan Date: Thu, 17 Sep 2020 17:01:16 +0000 (+0000) Subject: Fix a problem in sqlite-expert causing it to ignore equality constraints on the secon... X-Git-Tag: version-3.34.0~93 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=39c7125a97bedcfa152aef8451dd2e6d258b6508;p=thirdparty%2Fsqlite.git Fix a problem in sqlite-expert causing it to ignore equality constraints on the second or subsequent columns of a multi-column PRIMARY KEY. FossilOrigin-Name: c666c85a433fbc83edef4dbfb0399672e570f5d7979ab61cb39ff5488595d822 --- diff --git a/ext/expert/expert1.test b/ext/expert/expert1.test index 3e5d604d52..f49f1f5e5c 100644 --- a/ext/expert/expert1.test +++ b/ext/expert/expert1.test @@ -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} { diff --git a/ext/expert/sqlite3expert.c b/ext/expert/sqlite3expert.c index 1dd0700893..c2a6fe3ba9 100644 --- a/ext/expert/sqlite3expert.c +++ b/ext/expert/sqlite3expert.c @@ -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; diff --git a/manifest b/manifest index bd54c1e943..b67dac1095 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 02c27d1517..f3a1fb2a8a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9a55601d072bcd1ac0f6f1633216c7c8b3ff3e037451e2cfd285cbe19b60b9fc \ No newline at end of file +c666c85a433fbc83edef4dbfb0399672e570f5d7979ab61cb39ff5488595d822 \ No newline at end of file