]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add further tests to skipscan5.test.
authordan <dan@noemail.net>
Sat, 28 Jun 2014 17:35:15 +0000 (17:35 +0000)
committerdan <dan@noemail.net>
Sat, 28 Jun 2014 17:35:15 +0000 (17:35 +0000)
FossilOrigin-Name: 4b8230e8fe93e73a615a46708aed5fa3557b6228

manifest
manifest.uuid
test/skipscan5.test

index 7600c076fe5240b37a355e7de875383d4b20b774..c6e5aaa9c2e5293c4efb5f851436a6731d43f6e9 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sheader\scomments\son\snew\sroutines.\s\sRework\sthe\ssqlite3Stat4Column()\sroutine\nso\sthat\sis\s(in\stheory)\sable\sto\sdeal\swith\scorrupt\ssamples.
-D 2014-06-28T16:06:44.822
+C Add\sfurther\stests\sto\sskipscan5.test.
+D 2014-06-28T17:35:15.306
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in b03432313a3aad96c706f8164fb9f5307eaf19f5
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -829,7 +829,7 @@ F test/shrink.test 8c70f62b6e8eb4d54533de6d65bd06b1b9a17868
 F test/sidedelete.test f0ad71abe6233e3b153100f3b8d679b19a488329
 F test/skipscan1.test 28c7faa41a0d7265040ecb0a0abd90c0904270b2
 F test/skipscan2.test d1d1450952b7275f0b0a3a981f0230532743951a
-F test/skipscan5.test 4b83d803bb17bf922569ce8c3637d0558d6abc83
+F test/skipscan5.test d8b9692b702745a0e41c23f9da6beac81df01196
 F test/soak.test 0b5b6375c9f4110c828070b826b3b4b0bb65cd5f
 F test/softheap1.test 40562fe6cac6d9827b7b42b86d45aedf12c15e24
 F test/sort.test 0e4456e729e5a92a625907c63dcdedfbe72c5dc5
@@ -1182,7 +1182,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P dfb09db6d412f3bc2a71bda393813783580dbad1
-R a461409aefe23981a1fbdd4418e17b64
-U drh
-Z a2fad482dc40a73ef09e3690c963a5aa
+P ef5cdf949bb53a2958fa34e176b4b9eeda269de5
+R f17ac3e5a608781f5afc70c3d4b0020c
+U dan
+Z 86f494cb467655f573b06b5ade5b9c90
index 2e226ad3716a23bd60295d64c253532433a97919..fa3d4db391dd4e7dc7ffbd1d094ae00509061284 100644 (file)
@@ -1 +1 @@
-ef5cdf949bb53a2958fa34e176b4b9eeda269de5
\ No newline at end of file
+4b8230e8fe93e73a615a46708aed5fa3557b6228
\ No newline at end of file
index 6cf35f26a7c5e9d039f8cbd78a6ebee81f92823a..5d6d3929983d2e1ecc184b9919457e19c3c7112c 100644 (file)
@@ -38,64 +38,36 @@ do_test 1.2 {
   execsql ANALYZE
 } {}
 
-do_eqp_test 1.3 {
-  SELECT * FROM t1 WHERE b = 5;
+foreach {tn q res} {
+  1  "b = 5"                   {/*ANY(a) AND b=?*/}
+  2  "b > 12 AND b < 16"       {/*ANY(a) AND b>? AND b<?*/}
+  3  "b > 2 AND b < 16"        {/*SCAN TABLE t1*/}
+  4  "b > 18 AND b < 25"       {/*ANY(a) AND b>? AND b<?*/}
+  5  "b > 15"                  {/*ANY(a) AND b>?*/}
+  6  "b > 5"                   {/*SCAN TABLE t1*/}
+  7  "b < 15"                  {/*SCAN TABLE t1*/}
+  8  "b < 5"                   {/*ANY(a) AND b<?*/}
+  9  "5 > b"                   {/*ANY(a) AND b<?*/}
+  10 "b = '5'"                 {/*ANY(a) AND b=?*/}
+  11 "b > '12' AND b < '16'"   {/*ANY(a) AND b>? AND b<?*/}
+  12 "b > '2' AND b < '16'"    {/*SCAN TABLE t1*/}
+  13 "b > '18' AND b < '25'"   {/*ANY(a) AND b>? AND b<?*/}
+  14 "b > '15'"                {/*ANY(a) AND b>?*/}
+  15 "b > '5'"                 {/*SCAN TABLE t1*/}
+  16 "b < '15'"                {/*SCAN TABLE t1*/}
+  17 "b < '5'"                 {/*ANY(a) AND b<?*/}
+  18 "'5' > b"                 {/*ANY(a) AND b<?*/}
 } {
-  0 0 0 {SEARCH TABLE t1 USING INDEX i1 (ANY(a) AND b=?)}
+  set sql "EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE $q"
+  do_execsql_test 1.3.$tn $sql $res
 }
 
-do_eqp_test 1.4 {
-  SELECT * FROM t1 WHERE b > 12 AND b < 16;
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX i1 (ANY(a) AND b>? AND b<?)}
-}
-
-do_eqp_test 1.5 {
-  SELECT * FROM t1 WHERE b > 2 AND b < 16;
-} {
-  0 0 0 {SCAN TABLE t1}
-}
-
-do_eqp_test 1.6 {
-  SELECT * FROM t1 WHERE b > 18 AND b < 25;
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX i1 (ANY(a) AND b>? AND b<?)}
-}
-
-do_eqp_test 1.7 {
-  SELECT * FROM t1 WHERE b > 18 AND b < 25;
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX i1 (ANY(a) AND b>? AND b<?)}
-}
-
-do_eqp_test 1.8 {
-  SELECT * FROM t1 WHERE b > 15;
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX i1 (ANY(a) AND b>?)}
-}
-
-do_eqp_test 1.9 {
-  SELECT * FROM t1 WHERE b > 5;
-} {
-  0 0 0 {SCAN TABLE t1}
-}
-
-do_eqp_test 1.10 {
-  SELECT * FROM t1 WHERE b < 5;
-} {
-  0 0 0 {SEARCH TABLE t1 USING INDEX i1 (ANY(a) AND b<?)}
-}
-
-do_eqp_test 1.11 {
-  SELECT * FROM t1 WHERE b < 15;
-} {
-  0 0 0 {SCAN TABLE t1}
-}
 
 #-------------------------------------------------------------------------
 # Test that range-query/skip-scan estimation works with text values.
 # And on UTF-16 databases when there is no UTF-16 collation sequence
 # available.
+#
 
 proc test_collate {enc lhs rhs} {
   string compare $lhs $rhs
@@ -144,6 +116,69 @@ foreach {tn dbenc coll} {
 
 }
 
+#-------------------------------------------------------------------------
+# Test that range-query/skip-scan estimation works on columns that contain
+# a variety of types.
+#
+
+reset_db
+do_execsql_test 3.1 {
+  CREATE TABLE t3(a, b, c);
+  CREATE INDEX i3 ON t3(a, b);
+}
+
+set values {
+    NULL NULL NULL
+    NULL -9567 -9240
+    -8725 -8659 -8248.340244520614
+    -8208 -7939 -7746.985758536954
+    -7057 -6550 -5916
+    -5363 -4935.781822975623 -4935.063633571875
+    -3518.4554911770183 -2537 -2026
+    -1511.2603881914456 -1510.4195994839156 -1435
+    -1127.4210136045804 -1045 99
+    1353 1457 1563.2908193223611
+    2245 2286 2552
+    2745.18831295203 2866.279926554429 3075.0468527316334
+    3447 3867 4237.892420141907
+    4335 5052.9775000424015 5232.178240656935
+    5541.784919585003 5749.725576373621 5758
+    6005 6431 7263.477992854769
+    7441 7541 8667.279760663994
+    8857 9199.638673662972 'dl'
+    'dro' 'h' 'igprfq'
+    'jnbd' 'k' 'kordee'
+    'lhwcv' 'mzlb' 'nbjked'
+    'nufpo' 'nxqkdq' 'shelln'
+    'tvzn' 'wpnt' 'wylf'
+    'ydkgu' 'zdb' X''
+    X'0a' X'203f6429f1f33f' X'23858e324545e0362b'
+    X'3f9f8a' X'516f7ddd4b' X'68f1df0930ac6b'
+    X'9ea60d' X'a06f' X'aefd342a39ce36df'
+    X'afaa020fe2' X'be201c' X'c47d97b209601e45'
+}
+
+do_test 3.2 {
+  set c 0
+  foreach v $values {
+    execsql "INSERT INTO t3 VALUES($c % 2, $v, $c)"
+    incr c
+  }
+  execsql ANALYZE
+} {}
+
+foreach {tn q res} {
+  1 "b BETWEEN -10000 AND -8000"       {/*ANY(a) AND b>? AND b<?*/}
+  2 "b BETWEEN -10000 AND 'qqq'"       {/*SCAN TABLE t3*/}
+  3 "b < X'5555'"                      {/*SCAN TABLE t3*/}
+  4 "b > X'5555'"                      {/*ANY(a) AND b>?*/}
+  5 "b > 'zzz'"                        {/*ANY(a) AND b>?*/}
+  6 "b < 'zzz'"                        {/*SCAN TABLE t3*/}
+} {
+  set sql "EXPLAIN QUERY PLAN SELECT * FROM t3 WHERE $q" 
+  do_execsql_test 3.3.$tn $sql $res
+}
+
 finish_test