]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Make indexes on CAST(...) expressions work.
authordan <dan@noemail.net>
Mon, 28 Jan 2019 18:08:59 +0000 (18:08 +0000)
committerdan <dan@noemail.net>
Mon, 28 Jan 2019 18:08:59 +0000 (18:08 +0000)
FossilOrigin-Name: 3ef711d98fb239cf24472f124e7b36b0dde33355de5a2c9a3a978bbdd042a735

manifest
manifest.uuid
src/where.c
test/indexexpr2.test

index ce24fd02dacaa5e8ce0e873b7219cba8245223a3..05732bb18044732aa5c514ad9a0636b26483a299 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sbuffer\soverread\sin\sfts3\sthat\scould\soccur\swhen\saccessing\sa\scorrupt\sdatabase.
-D 2019-01-28T16:50:42.458
+C Make\sindexes\son\sCAST(...)\sexpressions\swork.
+D 2019-01-28T18:08:59.152
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 9947eae873c07ae894d4c8633b76c0a0daca7b9fd54401096a77d1a6c7b74359
@@ -599,7 +599,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c 3f4f653daf234fe713edbcbca3fec2350417d159d28801feabc702a22c4e213f
 F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a
 F src/walker.c 7607f1a68130c028255d8d56094ea602fc402c79e1e35a46e6282849d90d5fe4
-F src/where.c c5d201699d03be61c35bc04b96e481b1c8dc68177617ca1db156ef7409da2fae
+F src/where.c c91b3dd6bb67abc7d4de879cf60e1fb57f5972045fc7b147f33537a1baecdfc0
 F src/whereInt.h 5f14db426ca46a83eabab1ae9aa6d4b8f27504ad35b64c290916289b1ddb2e88
 F src/wherecode.c 89d2ec668aec884dfa7ac500c6744e42ec0590fcd72fb740a8b48326a8412811
 F src/whereexpr.c 36b47f7261d6b6f1a72d774c113b74beddf6745aba1018e64b196e29db233442
@@ -1034,7 +1034,7 @@ F test/index8.test bc2e3db70e8e62459aaa1bd7e4a9b39664f8f9d7
 F test/index9.test 0aa3e509dddf81f93380396e40e9bb386904c1054924ba8fa9bcdfe85a8e7721
 F test/indexedby.test a52c8c6abfae4fbfb51d99440de4ca1840dbacc606b05e29328a2a8ba7cd914e
 F test/indexexpr1.test 635261197bcdc19b9b2c59bbfa7227d525c00e9587faddb2d293c44d287ce60e
-F test/indexexpr2.test 8dd1f8f936cc4d246af605366886bbd251848b411378eb60887361d5302d9f54
+F test/indexexpr2.test 38020c247ee77ba19322fadde99db84bdf2aef34f714866786563c3834bb2dce
 F test/indexfault.test 31d4ab9a7d2f6e9616933eb079722362a883eb1d
 F test/init.test 15c823093fdabbf7b531fe22cf037134d09587a7
 F test/insert.test 9773604f8e1a2595f51488a5643c359d8a11dc55a11cb185910d93387d378458
@@ -1804,7 +1804,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P df04859a995571cd6faf1abe088725708f35e81195760274df9e2ec9bd47f69f
-R bde88f7bda44506e97f9208a864b23cb
+P a9faf9033910927c74553e66c474d84ed3386f263cef3eec299e25d8306f410d
+R 9a0f3b3b7b4bc83772f491da4476a586
+T *branch * index-on-cast
+T *sym-index-on-cast *
+T -sym-trunk *
 U dan
-Z 04d2112486f711cf461bcabac1e34620
+Z cf3b41fd70871ac23ce42361c18f4249
index f3f266bcb12b5136351f2d936ebc9c682fbe63ef..5b02a6ffbb714d2f237900c19cbfeeee135db185 100644 (file)
@@ -1 +1 @@
-a9faf9033910927c74553e66c474d84ed3386f263cef3eec299e25d8306f410d
\ No newline at end of file
+3ef711d98fb239cf24472f124e7b36b0dde33355de5a2c9a3a978bbdd042a735
\ No newline at end of file
index 8be95bcd29849a97d045d0d56bb7043e2b9c1f68..32f36d1d3dbe198e6f442a2881bf4d990423a70e 100644 (file)
@@ -348,6 +348,7 @@ static WhereTerm *whereScanInit(
     if( iColumn==XN_EXPR ){
       pScan->pIdxExpr = pIdx->aColExpr->a[j].pExpr;
       pScan->zCollName = pIdx->azColl[j];
+      pScan->idxaff = sqlite3ExprAffinity(pScan->pIdxExpr);
     }else if( iColumn==pIdx->pTable->iPKey ){
       iColumn = XN_ROWID;
     }else if( iColumn>=0 ){
index 368237f23e59b5fff0ea78af426ff662b5a4b16b..8d6e5914c0c883daaa160c183583b32f9fd30576 100644 (file)
@@ -249,6 +249,34 @@ do_execsql_test 5.4 {
   SELECT * FROM t5 WHERE abs(a)=2 or abs(b)=9;
 } {2 4 3 9}
 
+#-------------------------------------------------------------------------
+do_execsql_test 6.0 {
+  CREATE TABLE x1(a INTEGER PRIMARY KEY, b);
+  INSERT INTO x1 VALUES
+      (1, 123), (2, '123'), (3, '123abc'), (4, 123.0), (5, 1234);
+}
+
+do_execsql_test 6.1.1 {
+  SELECT a, b FROM x1 WHERE CAST(b AS INTEGER) = 123;
+} {1 123   2 123   3 123abc  4 123.0}
+do_execsql_test 6.1.2 {
+  CREATE INDEX x1i ON x1( CAST(b AS INTEGER) );
+  SELECT a, b FROM x1 WHERE CAST(b AS INTEGER) = 123;
+} {1 123   2 123   3 123abc  4 123.0}
+do_eqp_test 6.1.3 {
+  SELECT a, b FROM x1 WHERE CAST(b AS INTEGER) = 123;
+} {SEARCH TABLE x1 USING INDEX x1i (<expr>=?)}
+
+do_execsql_test 6.2.1 {
+  SELECT a, b FROM x1 WHERE CAST(b AS TEXT) = 123;
+} {1 123   2 123}
+do_execsql_test 6.2.2 {
+  CREATE INDEX x1i2 ON x1( CAST(b AS TEXT) );
+  SELECT a, b FROM x1 WHERE CAST(b AS TEXT) = 123;
+} {1 123   2 123}
+do_eqp_test 6.2.3 {
+  SELECT a, b FROM x1 WHERE CAST(b AS TEXT) = 123;
+} {SEARCH TABLE x1 USING INDEX x1i2 (<expr>=?)}
 
 
 finish_test