diff --git a/manifest b/manifest index b50f6287da..ba89d2088a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\slatest\strunk\schanges\sinto\sthis\sbranch. -D 2016-08-02T16:24:10.101 +C Fix\sa\sproblem\swith\svector\srange\sconstraints\sand\smixed\sASC/DESC\sindexes. +D 2016-08-02T17:07:51.146 F Makefile.in 6c20d44f72d4564f11652b26291a214c8367e5db F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 3340e479e5221f06c3d61726f8f7efff885e4233 @@ -463,7 +463,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c 02eeecc265f6ffd0597378f5d8ae9070b62a406a F src/wal.h 6dd221ed384afdc204bc61e25c23ef7fd5a511f2 F src/walker.c 0f142b5bd3ed2041fc52d773880748b212e63354 -F src/where.c 9dcbc1be0e8e84b1d323dae55983bbb902a6c484 +F src/where.c 25eae2e051809c75a8a1a23288f335382ac0215f F src/whereInt.h 14dd243e13b81cbb0a66063d38b70f93a7d6e613 F src/wherecode.c c01c8af9311b5d6d65de311101f72d94a11ae506 F src/whereexpr.c 4a8cefc7c122132ac9f3ed125c61629a0e3de094 @@ -1020,8 +1020,8 @@ F test/rowhash.test 0bc1d31415e4575d10cacf31e1a66b5cc0f8be81 F test/rowid.test 5b7509f384f4f6fae1af3c8c104c8ca299fea18d F test/rowvalue.test 56b34d31d91340a6e922e753b798880170cc1aa7 F test/rowvalue2.test 8d5dfe75b8f4d1868a2f91f0356f20d36cba64ff -F test/rowvalue3.test 5127afb4414bf62546161497c04840c46e371770 -F test/rowvalue4.test 4480898d62d6813e3e38d9d38c02b9a0be5f94be +F test/rowvalue3.test dbe935260851b197dfbbbcb0ac2a15cb5f324fd4 +F test/rowvalue4.test 9e720652d4db9ef3bea50227c69e33d7e64801c6 F test/rtree.test 0c8d9dd458d6824e59683c19ab2ffa9ef946f798 F test/run-wordcount.sh 891e89c4c2d16e629cd45951d4ed899ad12afc09 F test/savepoint.test c671fdbd34cd3bfe1518a777526ada595180cf8d @@ -1133,7 +1133,7 @@ F test/temptable.test d2c9b87a54147161bcd1822e30c1d1cd891e5b30 F test/temptable2.test cd396beb41117a5302fff61767c35fa4270a0d5e F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637 F test/temptrigger.test 8ec228b0db5d7ebc4ee9b458fc28cb9e7873f5e1 -F test/tester.tcl 542e38e307a6c1c362122d186f580ec3e58a288c +F test/tester.tcl 4ce5afd5e192db4cae178e1a983b060e0f08c5d6 F test/thread001.test 9f22fd3525a307ff42a326b6bc7b0465be1745a5 F test/thread002.test e630504f8a06c00bf8bbe68528774dd96aeb2e58 F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7 @@ -1513,7 +1513,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 6937677cc2c2db6b21f997559f88a339466cd15b b23c10ac8f65bc88a6c7d88e140217222eb4cbe5 -R bdbd7298ee0fa9cbc2f39cf393323b85 +P d468101b421e073e9debd7381bde1d36af31369e +R e4db8db490358e0865afed7cef96935f U dan -Z eb5884061bde99d3b56b31ee8ac9fde1 +Z 8c6bb4cf90fd1cc092b885dc43b4c6ef diff --git a/manifest.uuid b/manifest.uuid index 5800b91b48..9c30fb99ac 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d468101b421e073e9debd7381bde1d36af31369e \ No newline at end of file +e2ad30c8b5366fd8e50f36c62345ed03ec613c47 \ No newline at end of file diff --git a/src/where.c b/src/where.c index 43445c08a2..3e8dea70a1 100644 --- a/src/where.c +++ b/src/where.c @@ -2226,11 +2226,13 @@ int whereRangeVectorLen( } /* Check that the LHS of the comparison is a column reference to - ** the right column of the right source table. - */ + ** the right column of the right source table. And that the sort + ** order of the index column is the same as the sort order of the + ** leftmost index column. */ if( pLhs->op!=TK_COLUMN || pLhs->iTable!=iCur || pLhs->iColumn!=pIdx->aiColumn[i+nEq] + || pIdx->aSortOrder[i]!=pIdx->aSortOrder[0] ){ break; } diff --git a/test/rowvalue3.test b/test/rowvalue3.test index 2da141ec72..17bf96a0f4 100644 --- a/test/rowvalue3.test +++ b/test/rowvalue3.test @@ -17,15 +17,6 @@ set testdir [file dirname $argv0] source $testdir/tester.tcl set ::testprefix rowvalue3 -# Drop all auxiliary indexes from the main database opened by handle [db]. -# -proc drop_all_indexes {} { - set L [db eval { - SELECT name FROM sqlite_master WHERE type='index' AND sql LIKE 'create%' - }] - foreach idx $L { db eval "DROP INDEX $idx" } -} - do_execsql_test 1.0 { CREATE TABLE t1(a, b, c); CREATE INDEX i1 ON t1(a, b); diff --git a/test/rowvalue4.test b/test/rowvalue4.test index 1dfcfb903a..ccae0498e1 100644 --- a/test/rowvalue4.test +++ b/test/rowvalue4.test @@ -17,7 +17,14 @@ set testdir [file dirname $argv0] source $testdir/tester.tcl set ::testprefix rowvalue4 -do_execsql_test 0 { +#------------------------------------------------------------------------- +# Test some error conditions: +# +# * row values used where they are not supported, +# * row values or sub-selects that contain/return the wrong number +# of elements. +# +do_execsql_test 1.0 { CREATE TABLE t1(a, b, c); CREATE INDEX t1bac ON t1(b, a, c); } @@ -44,5 +51,60 @@ foreach {tn s error} { do_catchsql_test 2.$tn "$s" [list 1 $error] } +#------------------------------------------------------------------------- +do_execsql_test 2.0 { + CREATE TABLE t2(a, b, c, d); + INSERT INTO t2 VALUES(1, 1, 1, 1); + INSERT INTO t2 VALUES(1, 1, 2, 2); + INSERT INTO t2 VALUES(1, 1, 3, 3); + INSERT INTO t2 VALUES(1, 2, 1, 4); + INSERT INTO t2 VALUES(1, 2, 2, 5); + INSERT INTO t2 VALUES(1, 2, 3, 6); + INSERT INTO t2 VALUES(1, 3, 1, 7); + INSERT INTO t2 VALUES(1, 3, 2, 8); + INSERT INTO t2 VALUES(1, 3, 3, 9); + + INSERT INTO t2 VALUES(2, 1, 1, 10); + INSERT INTO t2 VALUES(2, 1, 2, 11); + INSERT INTO t2 VALUES(2, 1, 3, 12); + INSERT INTO t2 VALUES(2, 2, 1, 13); + INSERT INTO t2 VALUES(2, 2, 2, 14); + INSERT INTO t2 VALUES(2, 2, 3, 15); + INSERT INTO t2 VALUES(2, 3, 1, 16); + INSERT INTO t2 VALUES(2, 3, 2, 17); + INSERT INTO t2 VALUES(2, 3, 3, 18); + + INSERT INTO t2 VALUES(3, 1, 1, 19); + INSERT INTO t2 VALUES(3, 1, 2, 20); + INSERT INTO t2 VALUES(3, 1, 3, 21); + INSERT INTO t2 VALUES(3, 2, 1, 22); + INSERT INTO t2 VALUES(3, 2, 2, 23); + INSERT INTO t2 VALUES(3, 2, 3, 24); + INSERT INTO t2 VALUES(3, 3, 1, 25); + INSERT INTO t2 VALUES(3, 3, 2, 26); + INSERT INTO t2 VALUES(3, 3, 3, 27); +} + +foreach {nm idx} { + idx1 {} + idx2 { CREATE INDEX t2abc ON t2(a, b, c); } + idx3 { CREATE INDEX t2abc ON t2(a, b DESC, c); } + idx4 { CREATE INDEX t2abc ON t2(a DESC, b DESC, c DESC); } + idx5 { CREATE INDEX t2abc ON t2(a ASC, b ASC, c ASC); } + idx6 { CREATE INDEX t2abc ON t2(a DESC, b, c); } +} { + drop_all_indexes + execsql $idx + + foreach {tn where res} { + 1 "(a, b, c) < (2, 2, 2)" {1 2 3 4 5 6 7 8 9 10 11 12 13} + 2 "(a, b, c) <= (2, 2, 2)" {1 2 3 4 5 6 7 8 9 10 11 12 13 14} + 3 "(a, b, c) > (2, 2, 2)" {15 16 17 18 19 20 21 22 23 24 25 26 27} + 4 "(a, b, c) >= (2, 2, 2)" {14 15 16 17 18 19 20 21 22 23 24 25 26 27} + } { + set result [db eval "SELECT d FROM t2 WHERE $where"] + do_test 2.$nm.$tn { lsort -integer $result } $res + } +} finish_test diff --git a/test/tester.tcl b/test/tester.tcl index 8e470cc9e3..814788ba45 100644 --- a/test/tester.tcl +++ b/test/tester.tcl @@ -25,6 +25,7 @@ # copy_file FROM TO # delete_file FILENAME # drop_all_tables ?DB? +# drop_all_indexes ?DB? # forcecopy FROM TO # forcedelete FILENAME # @@ -1951,6 +1952,16 @@ proc drop_all_tables {{db db}} { } } +# Drop all auxiliary indexes from the main database opened by handle [db]. +# +proc drop_all_indexes {{db db}} { + set L [$db eval { + SELECT name FROM sqlite_master WHERE type='index' AND sql LIKE 'create%' + }] + foreach idx $L { $db eval "DROP INDEX $idx" } +} + + #------------------------------------------------------------------------- # If a test script is executed with global variable $::G(perm:name) set to # "wal", then the tests are run in WAL mode. Otherwise, they should be run