]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Ensure that indexed expressions with collating sequences are handled
authordrh <drh@noemail.net>
Sat, 11 Feb 2017 15:02:23 +0000 (15:02 +0000)
committerdrh <drh@noemail.net>
Sat, 11 Feb 2017 15:02:23 +0000 (15:02 +0000)
correctly.  Fix for ticket [eb703ba7b50c1a5] backported from trunk.

FossilOrigin-Name: b2e49ae36bfd00a1d0b70a9de9d23d2e16d1c7ca

manifest
manifest.uuid
src/expr.c
src/where.c
test/indexexpr1.test

index be4e2b914ef734c21c4afb14818c7f1fa60f9a75..9b2c0554ff8d6a7f3bea48a954d318e45edc0f86 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Version\s3.17.0\srelease\scandidate
-D 2017-02-10T17:38:00.621
+C Ensure\sthat\sindexed\sexpressions\swith\scollating\ssequences\sare\shandled\ncorrectly.\s\sFix\sfor\sticket\s[eb703ba7b50c1a5]\sbackported\sfrom\strunk.
+D 2017-02-11T15:02:23.684
 F Makefile.in edb6bcdd37748d2b1c3422ff727c748df7ffe918
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 067a6766f800cc8d72845ab61f8de4ffe8f3fc99
@@ -347,7 +347,7 @@ F src/ctime.c 9f2296a4e5d26ebf0e0d95a0af4628f1ea694e7a
 F src/date.c dc3f1391d9297f8c748132813aaffcb117090d6e
 F src/dbstat.c 19ee7a4e89979d4df8e44cfac7a8f905ec89b77d
 F src/delete.c 0d9d5549d42e79ce4d82ff1db1e6c81e36d2f67c
-F src/expr.c d29114e9b709eaeaaa18553a5bbe60a19302aeef
+F src/expr.c c218ec8cfc12b2c5b354660ce7285dfaf43305e9
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 2e9aabe1aee76273aff8a84ee92c464e095400ae
 F src/func.c c67273e1ec08abbdcc14c189892a3ff6eeece86b
@@ -475,7 +475,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c 40c543f0a2195d1b0dc88ef12142bea690009344
 F src/wal.h 06b2a0b599cc0f53ea97f497cf8c6b758c999f71
 F src/walker.c 91a6df7435827e41cff6bb7df50ea00934ee78b0
-F src/where.c bc71775e23d23334e8f449aa31012d692dc09cb2
+F src/where.c b0d81c6f24ea6aebb249c92c5d78ec8ab1452523
 F src/whereInt.h 2bcc3d176e6091cb8f50a30b65c006e88a73614d
 F src/wherecode.c 99a8ced164c75edf41b3a865a75381c9adb38b28
 F src/whereexpr.c 35ad025389a632a3987a35617c878be3b3d70dc6
@@ -867,7 +867,7 @@ F test/index6.test b4fc812290067a578b98bb2667b676db89e202a7
 F test/index7.test 7feababe16f2091b229c22aff2bcc1d4d6b9d2bb
 F test/index8.test bc2e3db70e8e62459aaa1bd7e4a9b39664f8f9d7
 F test/indexedby.test 9c4cd331224e57f79fbf411ae245e6272d415985
-F test/indexexpr1.test 7d243fac508b4a99fb900ffe34eb488312cfce84
+F test/indexexpr1.test 038b3befa74e5a75126b6e9dd2ae5df61c1c7cf7
 F test/indexfault.test 31d4ab9a7d2f6e9616933eb079722362a883eb1d
 F test/init.test 15c823093fdabbf7b531fe22cf037134d09587a7
 F test/insert.test 38742b5e9601c8f8d76e9b7555f7270288c2d371
@@ -1555,10 +1555,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 798fb9d70d2e5f95e64237b04d6692360133381a
-R d99a1e96a3817ca7543fc882a1f70881
-T *branch * branch-3.17
-T *sym-branch-3.17 *
-T -sym-trunk *
+P ad867e8701a5ee17a98a5444da8be6fb1ef7247a
+Q +9689d04b8250139e32078b2aa9748edcc6231bcd
+R a4dc324e271f6eb7a3c903761117b7d3
 U drh
-Z d576ee7bc9417fd1bc0379648fe5a070
+Z 35c5257a80a9a2d4e844096f79f1e6f1
index 88c9ff2425b05a7beeddf85aa68fd2cc4d74124a..9d4e58e1d220ae812a0922cc2706b40360883655 100644 (file)
@@ -1 +1 @@
-ad867e8701a5ee17a98a5444da8be6fb1ef7247a
\ No newline at end of file
+b2e49ae36bfd00a1d0b70a9de9d23d2e16d1c7ca
\ No newline at end of file
index f1e8667b39ae6fde3829787efd87011b305b604a..ff4f1b5ade5f00851bd329a7ac7f38e0971ea2e8 100644 (file)
@@ -231,7 +231,7 @@ static char comparisonAffinity(Expr *pExpr){
     aff = sqlite3CompareAffinity(pExpr->pRight, aff);
   }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){
     aff = sqlite3CompareAffinity(pExpr->x.pSelect->pEList->a[0].pExpr, aff);
-  }else if( NEVER(aff==0) ){
+  }else if( aff==0 ){
     aff = SQLITE_AFF_BLOB;
   }
   return aff;
index 4951f6a1b45a80fdc07216518966d85525566f45..80dfa20ed15c57509eff45ef6839184c6ac6024e 100644 (file)
@@ -308,6 +308,7 @@ static WhereTerm *whereScanInit(
     iColumn = pIdx->aiColumn[j];
     if( iColumn==XN_EXPR ){
       pScan->pIdxExpr = pIdx->aColExpr->a[j].pExpr;
+      pScan->zCollName = pIdx->azColl[j];
     }else if( iColumn==pIdx->pTable->iPKey ){
       iColumn = XN_ROWID;
     }else if( iColumn>=0 ){
index cd72430d918a8c0882b0833901575a2542837488..2b375a5855af6f4e58c7902b8dc4006d5320d649 100644 (file)
@@ -370,4 +370,14 @@ do_execsql_test indexexpr1-1200.4 {
   0 0 0 2 0 4 2 0 2 2 4 0
 }
 
+# Ticket https://www.sqlite.org/src/tktview/eb703ba7b50c1a
+# Incorrect result using an index on an expression with a collating function
+#
+do_execsql_test indexexpr1-1300.1 {
+  CREATE TABLE t1300(a INTEGER PRIMARY KEY, b);
+  INSERT INTO t1300 VALUES(1,'coffee'),(2,'COFFEE'),(3,'stress'),(4,'STRESS');
+  CREATE INDEX t1300bexpr ON t1300( substr(b,4) );
+  SELECT a FROM t1300 WHERE substr(b,4)='ess' COLLATE nocase ORDER BY +a;
+} {3 4}
+
 finish_test