]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix an issue in incremental_index_check with indexes that use non-default
authordan <dan@noemail.net>
Mon, 30 Oct 2017 08:04:38 +0000 (08:04 +0000)
committerdan <dan@noemail.net>
Mon, 30 Oct 2017 08:04:38 +0000 (08:04 +0000)
collation sequences.

FossilOrigin-Name: 3ebb2351e2650d263029d2c0042683cba3529c9d3f76b5f994f2e737b84d3f67

ext/repair/checkindex.c
manifest
manifest.uuid
test/checkindex.test

index f86cfdae7ae2a0e7d84327898b3587c72aafff8e..b70b57122ce48b0935ddc272ee27f9f7eda62a1f 100644 (file)
@@ -298,7 +298,8 @@ static int cidxLookupIndex(
       "  coalesce('quote(' || name || ')', 'rowid'), '|| '','' ||'"
       ") AS zCurrentKey,"
       "       group_concat("
-      "  coalesce(name, 'rowid') || CASE WHEN desc THEN ' DESC' ELSE '' END,"
+      "  coalesce(name, 'rowid') || ' COLLATE ' || coll "
+      "  || CASE WHEN desc THEN ' DESC' ELSE '' END,"
       "  ', '"
       ") AS zOrderBy,"
       "       group_concat("
@@ -313,7 +314,7 @@ static int cidxLookupIndex(
       "         END,"
       "  ' AND '"
       ") AS zSubExpr,"
-      "       count(*) AS nCol"
+      "      count(*) AS nCol"
       " FROM pragma_index_xinfo(%Q);"
       , zIdx, zIdx, zIdx
   );
index 8f56822a50f4858270bdc0419c6b4b8eb707d983..1aefe380980a0281293c11daf68c8455ce842c00 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\s"after"\sparameter\shandling\sin\sthe\sincremental_index_check\scode.
-D 2017-10-28T20:31:25.564
+C Fix\san\sissue\sin\sincremental_index_check\swith\sindexes\sthat\suse\snon-default\ncollation\ssequences.
+D 2017-10-30T08:04:38.448
 F Makefile.in e016061b23e60ac9ec27c65cb577292b6bde0307ca55abd874ab3487b3b1beb2
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 37740aba9c4bb359c627eadccf1cfd7be4f5f847078723777ea7763969e533b1
@@ -328,7 +328,7 @@ F ext/rbu/sqlite3rbu.h b42bcd4d8357268c6c39ab2a60b29c091e89328fa8cc49c8fac5ab8d0
 F ext/rbu/test_rbu.c 7073979b9cc80912bb03599ac8d85ab5d3bf03cfacd3463f2dcdd7822997533a
 F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15
 F ext/repair/checkfreelist.c 0abb84b4545016d57ba1a2aa8884c72c73ed838968909858c03bc1f38fb6b054
-F ext/repair/checkindex.c 62df3d58ddf2988ab5bc9a7e3a9f16d16c3844a988df5cb702a2d0f4d2dd5bf4
+F ext/repair/checkindex.c ff736821b84286ace872a5fa793aee39232fa804cb79c40c3086686e94d2f7e0
 F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
 F ext/rtree/rtree.c cc91b6905bf55512c6ebc7dfdd37ac81c86f1753db8cfa6d62f0ee864464044f
 F ext/rtree/rtree.h 834dbcb82dc85b2481cde6a07cdadfddc99e9b9e
@@ -654,7 +654,7 @@ F test/cast.test 4c275cbdc8202d6f9c54a3596701719868ac7dc3
 F test/cffault.test 9d6b20606afe712374952eec4f8fd74b1a8097ef
 F test/check.test 33a698e8c63613449d85d624a38ef669bf20331daabebe3891c9405dd6df463a
 F test/checkfreelist.test 100283a3e6b8a3018c7fab7cfdaf03d1d6540fc66453114e248cf82b25784d3b
-F test/checkindex.test 48cf7b237756f4691e7a12be78e1719d5b0456e7e205b87da380f3a6bec11966
+F test/checkindex.test ea3ae087539e36cf8f63f65afe7347c3325147f6ddd873fb6bbb2214804d08f2
 F test/close.test 799ea4599d2f5704b0a30f477d17c2c760d8523fa5d0c8be4a7df2a8cad787d8
 F test/closure01.test b1703ba40639cfc9b295cf478d70739415eec6a4
 F test/coalesce.test cee0dccb9fbd2d494b77234bccf9dc6c6786eb91
@@ -1668,7 +1668,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 d5b9dada471358a2864727759648b763bf6890fc2521fac53c0d8216017d39b7
-R 31f10dd93d0cbe363e20ad50a747a726
+P c40c3c62e996044f31ca49ffc2edb2cc0320e69956f7ee6fe3e9012200e0d9a0
+R 35b9a81e4b8b6b857354a831ff9c29c1
 U dan
-Z 019388109f5e5cd896dce5eabbc0252a
+Z cd0262c8d2e550da2f2d47bdfb3d2467
index 45cec907d3244291373884c34f5db73a4b059478..7ea946e2194999886dbe799fd70221f40ebb8fb4 100644 (file)
@@ -1 +1 @@
-c40c3c62e996044f31ca49ffc2edb2cc0320e69956f7ee6fe3e9012200e0d9a0
\ No newline at end of file
+3ebb2351e2650d263029d2c0042683cba3529c9d3f76b5f994f2e737b84d3f67
\ No newline at end of file
index bafa42334c26d66b55100c6bc9349ba691aa2443..706171ff195c3b6a3173bf2fa1bcad38a7e4ad24 100644 (file)
@@ -185,6 +185,7 @@ do_index_check_test 2.3 i5 {
   {} 3,2,2,9
 }
 
+#--------------------------------------------------------------------------
 do_execsql_test 3.0 {
 
   CREATE TABLE t3(w, x, y, z PRIMARY KEY) WITHOUT ROWID;
@@ -216,5 +217,48 @@ do_index_check_test 3.2 t3wxy2 {
   {} NULL,NULL,NULL,1 {} NULL,NULL,NULL,2 {} NULL,NULL,NULL,3 
 }
 
+#--------------------------------------------------------------------------
+# Test with an index that uses non-default collation sequences.
+#
+do_execsql_test 4.0 {
+  CREATE TABLE t4(a INTEGER PRIMARY KEY, c1 TEXT, c2 TEXT);
+  INSERT INTO t4 VALUES(1, 'aaa', 'bbb');
+  INSERT INTO t4 VALUES(2, 'AAA', 'CCC');
+  INSERT INTO t4 VALUES(3, 'aab', 'ddd');
+  INSERT INTO t4 VALUES(4, 'AAB', 'EEE');
+
+  CREATE INDEX t4cc ON t4(c1 COLLATE nocase, c2 COLLATE nocase);
+}
+
+do_index_check_test 4.1 t4cc {
+  {} 'aaa','bbb',1 
+  {} 'AAA','CCC',2 
+  {} 'aab','ddd',3 
+  {} 'AAB','EEE',4
+}
+
+do_test 4.2 {
+  set tblroot [db one { SELECT rootpage FROM sqlite_master WHERE name='t4' }]
+  sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 1 $tblroot
+  db eval {CREATE TABLE xt4(a INTEGER PRIMARY KEY, c1 TEXT, c2 TEXT)}
+  sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 0 0
+
+  execsql {
+    UPDATE xt4 SET c1='hello' WHERE rowid=2;
+    DELETE FROM xt4 WHERE rowid = 3;
+  }
+
+  sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 0 1
+} {}
+
+do_index_check_test 4.3 t4cc {
+  {} 'aaa','bbb',1 
+  {row data mismatch} 'AAA','CCC',2 
+  {row missing} 'aab','ddd',3 
+  {} 'AAB','EEE',4
+}
+
+
+
 finish_test