From fc4491366b782f48fcc05f7ec2b536fb07ca1f84 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 24 Jan 2011 17:46:35 +0000 Subject: [PATCH] Restructuring and generalizing analyze5.test. The whole script is currently disabled and will need to be reenabled prior to merging with trunk. FossilOrigin-Name: 31fcc7067bd76da4bf19232811b90cf8b76eed74 --- manifest | 18 +-- manifest.uuid | 2 +- test/analyze5.test | 293 +++++++++++++++++++++++---------------------- 3 files changed, 161 insertions(+), 152 deletions(-) diff --git a/manifest b/manifest index 6b94cf8473..2793b4be74 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C Change\sthe\scost\sestimator\sin\sthe\squery\splanner\sto\stake\sinto\saccount\sthe\nlogN\srowid\slookup\scost\swhen\sgoing\sfrom\san\sindex\sto\sa\stable. -D 2011-01-24T15:11:23.443 +C Restructuring\sand\sgeneralizing\sanalyze5.test.\s\s\sThe\swhole\sscript\sis\ncurrently\sdisabled\sand\swill\sneed\sto\sbe\sreenabled\sprior\sto\smerging\swith\strunk. +D 2011-01-24T17:46:35.872 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in de6498556d536ae60bb8bb10e8c1ba011448658c F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -256,7 +256,7 @@ F test/analyze.test c1eb87067fc16ece7c07e823d6395fd831b270c5 F test/analyze2.test f45ac8d54bdad822139e53fc6307fc6b5ee41c69 F test/analyze3.test 820ddfb7591b49607fbaf77240c7955ac3cabb04 F test/analyze4.test 757b37875cf9bb528d46f74497bc789c88365045 -F test/analyze5.test c19fe600c48dade660eb374fa7209435463c2d4a +F test/analyze5.test 12df6def85e21971888f8be3c1867a505f1bf587 F test/async.test ad4ba51b77cd118911a3fe1356b0809da9c108c3 F test/async2.test bf5e2ca2c96763b4cba3d016249ad7259a5603b6 F test/async3.test 93edaa9122f498e56ea98c36c72abc407f4fb11e @@ -900,14 +900,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 5d5bddd290e71a7b03bcc23ff29881c23233cbff -R 803835303ce0b4a50432effc77dd4645 +P b442525b0ba642bb8d57b87b7b9e373b6046454a +R ebf83ed63e8d1b48962a32de01a8b2cc U drh -Z 6e3a0f2d24eebc65cc3b5cda90be2fe9 +Z a63bcf5b3583a55e26e7d3f132337aba -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD4DBQFNPZaeoxKgR168RlERAhweAJipv5VYvhXPpe7yt5oZmj9HR78gAJ9JRIoC -ox/GIojaWZ/2rYPgDsVVnQ== -=pp6G +iD8DBQFNPbr/oxKgR168RlERAhb1AJ99UR+RTzr0SNXjxuLAr4iQrdLWlQCcC8Ik +EMLXFqheBOQt775+utT5Fjc= +=NdWh -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index 78fe186878..0a3f6d961e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b442525b0ba642bb8d57b87b7b9e373b6046454a \ No newline at end of file +31fcc7067bd76da4bf19232811b90cf8b76eed74 \ No newline at end of file diff --git a/test/analyze5.test b/test/analyze5.test index 3c89690b4b..6366439f53 100644 --- a/test/analyze5.test +++ b/test/analyze5.test @@ -14,6 +14,8 @@ # with many repeated values and only a few distinct values. # +return + set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -28,161 +30,168 @@ proc eqp {sql {db db}} { uplevel execsql [list "EXPLAIN QUERY PLAN $sql"] $db } +unset -nocomplain i t u v w x y z do_test analyze5-1.0 { - execsql { CREATE TABLE t1(x INTEGER PRIMARY KEY, y, z) } + db eval {CREATE TABLE t1(t,u,v TEXT COLLATE nocase,w,x,y,z)} for {set i 0} {$i < 1000} {incr i} { - set j [expr {$i>=25 && $i<=50}] - set k [expr {($i>=400) + ($i>=700) + ($i>=875)}] - execsql { INSERT INTO t1 VALUES($i,$j,$k) } + set y [expr {$i>=25 && $i<=50}] + set z [expr {($i>=400) + ($i>=700) + ($i>=875)}] + set x $z + set w $z + set t [expr {$z+0.5}] + switch $z { + 0 {set u "alpha"; unset x} + 1 {set u "bravo"} + 2 {set u "charlie"} + 3 {set u "delta"; unset w} + } + if {$i%2} {set v $u} {set v [string toupper $u]} + db eval {INSERT INTO t1 VALUES($t,$u,$v,$w,$x,$y,$z)} } - execsql { - CREATE INDEX t1y ON t1(y); - CREATE INDEX t1z ON t1(z); + db eval { + CREATE INDEX t1t ON t1(t); -- 0.5, 1.5, 2.5, and 3.5 + CREATE INDEX t1u ON t1(u); -- text + CREATE INDEX t1v ON t1(v); -- mixed case text + CREATE INDEX t1w ON t1(w); -- integers 0, 1, 2 and a few NULLs + CREATE INDEX t1x ON t1(x); -- integers 1, 2, 3 and many NULLs + CREATE INDEX t1y ON t1(y); -- integers 0 and very few 1s + CREATE INDEX t1z ON t1(z); -- integers 0, 1, 2, and 3 ANALYZE; - SELECT * FROM sqlite_stat2 ORDER BY 1, 2, 3; + SELECT sample FROM sqlite_stat2 WHERE idx='t1u' ORDER BY sampleno; } -} [list t1 t1y 0 0 \ - t1 t1y 1 0 \ - t1 t1y 2 0 \ - t1 t1y 3 0 \ - t1 t1y 4 0 \ - t1 t1y 5 0 \ - t1 t1y 6 0 \ - t1 t1y 7 0 \ - t1 t1y 8 0 \ - t1 t1y 9 0 \ - t1 t1z 0 0 \ - t1 t1z 1 0 \ - t1 t1z 2 0 \ - t1 t1z 3 0 \ - t1 t1z 4 1 \ - t1 t1z 5 1 \ - t1 t1z 6 1 \ - t1 t1z 7 2 \ - t1 t1z 8 2 \ - t1 t1z 9 3] +} {alpha alpha alpha alpha bravo bravo bravo charlie charlie delta} +do_test analyze5-1.1 { + string tolower \ + [db eval {SELECT sample from sqlite_stat2 WHERE idx='t1v' ORDER BY sampleno}] +} {alpha alpha alpha alpha bravo bravo bravo charlie charlie delta} +do_test analyze5-1.2 { + db eval {SELECT sample from sqlite_stat2 WHERE idx='t1w' ORDER BY sampleno} +} {{} 0 0 0 0 1 1 1 2 2} +do_test analyze5-1.3 { + db eval {SELECT sample from sqlite_stat2 WHERE idx='t1x' ORDER BY sampleno} +} {{} {} {} {} 1 1 1 2 2 3} +do_test analyze5-1.4 { + db eval {SELECT sample from sqlite_stat2 WHERE idx='t1y' ORDER BY sampleno} +} {0 0 0 0 0 0 0 0 0 0} +do_test analyze5-1.5 { + db eval {SELECT sample from sqlite_stat2 WHERE idx='t1z' ORDER BY sampleno} +} {0 0 0 0 1 1 1 2 2 3} +do_test analyze5-1.6 { + db eval {SELECT sample from sqlite_stat2 WHERE idx='t1t' ORDER BY sampleno} +} {0.5 0.5 0.5 0.5 1.5 1.5 1.5 2.5 2.5 3.5} + # Verify that range queries generate the correct row count estimates # -foreach {testid where rows} { - 1 {z>=0 AND z<=0} 400 - 2 {z>=1 AND z<=1} 300 - 3 {z>=2 AND z<=2} 200 - 4 {z>=3 AND z<=3} 100 - 5 {z>=4 AND z<=4} 50 - 6 {z>=-1 AND z<=-1} 50 - 7 {z>1 AND z<3} 200 - 8 {z>0 AND z<100} 600 - 9 {z>=1 AND z<100} 600 - 10 {z>1 AND z<100} 300 - 11 {z>=2 AND z<100} 300 - 12 {z>2 AND z<100} 100 - 13 {z>=3 AND z<100} 100 - 14 {z>3 AND z<100} 50 - 15 {z>=4 AND z<100} 50 - 16 {z>=-100 AND z<=-1} 50 - 17 {z>=-100 AND z<=0} 400 - 18 {z>=-100 AND z<0} 50 - 19 {z>=-100 AND z<=1} 700 - 20 {z>=-100 AND z<2} 700 - 21 {z>=-100 AND z<=2} 900 - 22 {z>=-100 AND z<3} 900 +foreach {testid where index rows} { + 1 {z>=0 AND z<=0} t1z 400 + 2 {z>=1 AND z<=1} t1z 300 + 3 {z>=2 AND z<=2} t1z 200 + 4 {z>=3 AND z<=3} t1z 100 + 5 {z>=4 AND z<=4} t1z 50 + 6 {z>=-1 AND z<=-1} t1z 50 + 7 {z>1 AND z<3} t1z 200 + 8 {z>0 AND z<100} t1z 600 + 9 {z>=1 AND z<100} t1z 600 + 10 {z>1 AND z<100} t1z 300 + 11 {z>=2 AND z<100} t1z 300 + 12 {z>2 AND z<100} t1z 100 + 13 {z>=3 AND z<100} t1z 100 + 14 {z>3 AND z<100} t1z 50 + 15 {z>=4 AND z<100} t1z 50 + 16 {z>=-100 AND z<=-1} t1z 50 + 17 {z>=-100 AND z<=0} t1z 400 + 18 {z>=-100 AND z<0} t1z 50 + 19 {z>=-100 AND z<=1} t1z 700 + 20 {z>=-100 AND z<2} t1z 700 + 21 {z>=-100 AND z<=2} t1z 900 + 22 {z>=-100 AND z<3} t1z 900 + + 31 {z>=0.0 AND z<=0.0} t1z 400 + 32 {z>=1.0 AND z<=1.0} t1z 300 + 33 {z>=2.0 AND z<=2.0} t1z 200 + 34 {z>=3.0 AND z<=3.0} t1z 100 + 35 {z>=4.0 AND z<=4.0} t1z 50 + 36 {z>=-1.0 AND z<=-1.0} t1z 50 + 37 {z>1.5 AND z<3.0} t1z 200 + 38 {z>0.5 AND z<100} t1z 600 + 39 {z>=1.0 AND z<100} t1z 600 + 40 {z>1.5 AND z<100} t1z 300 + 41 {z>=2.0 AND z<100} t1z 300 + 42 {z>2.1 AND z<100} t1z 100 + 43 {z>=3.0 AND z<100} t1z 100 + 44 {z>3.2 AND z<100} t1z 50 + 45 {z>=4.0 AND z<100} t1z 50 + 46 {z>=-100 AND z<=-1.0} t1z 50 + 47 {z>=-100 AND z<=0.0} t1z 400 + 48 {z>=-100 AND z<0.0} t1z 50 + 49 {z>=-100 AND z<=1.0} t1z 700 + 50 {z>=-100 AND z<2.0} t1z 700 + 51 {z>=-100 AND z<=2.0} t1z 900 + 52 {z>=-100 AND z<3.0} t1z 900 + + 101 {z=-1} t1z 50 + 102 {z=0} t1z 400 + 103 {z=1} t1z 300 + 104 {z=2} t1z 200 + 105 {z=3} t1z 100 + 106 {z=4} t1z 50 + 107 {z=-10.0} t1z 50 + 108 {z=0.0} t1z 400 + 109 {z=1.0} t1z 300 + 110 {z=2.0} t1z 200 + 111 {z=3.0} t1z 100 + 112 {z=4.0} t1z 50 + 113 {z=1.5} t1z 50 + 114 {z=2.5} t1z 50 + + 201 {z IN (-1)} t1z 50 + 202 {z IN (0)} t1z 400 + 203 {z IN (1)} t1z 300 + 204 {z IN (2)} t1z 200 + 205 {z IN (3)} t1z 100 + 206 {z IN (4)} t1z 50 + 207 {z IN (0.5)} t1z 50 + 208 {z IN (0,1)} t1z 700 + 209 {z IN (0,1,2)} t1z 900 + 210 {z IN (0,1,2,3)} {} 100 + 211 {z IN (0,1,2,3,4,5)} {} 100 + 212 {z IN (1,2)} t1z 500 + 213 {z IN (2,3)} t1z 300 + 214 {z=3 OR z=2} t1z 300 + 215 {z IN (-1,3)} t1z 150 + 216 {z=-1 OR z=3} t1z 150 - 31 {z>=0.0 AND z<=0.0} 400 - 32 {z>=1.0 AND z<=1.0} 300 - 33 {z>=2.0 AND z<=2.0} 200 - 34 {z>=3.0 AND z<=3.0} 100 - 35 {z>=4.0 AND z<=4.0} 50 - 36 {z>=-1.0 AND z<=-1.0} 50 - 37 {z>1.5 AND z<3.0} 200 - 38 {z>0.5 AND z<100} 600 - 39 {z>=1.0 AND z<100} 600 - 40 {z>1.5 AND z<100} 300 - 41 {z>=2.0 AND z<100} 300 - 42 {z>2.1 AND z<100} 100 - 43 {z>=3.0 AND z<100} 100 - 44 {z>3.2 AND z<100} 50 - 45 {z>=4.0 AND z<100} 50 - 46 {z>=-100 AND z<=-1.0} 50 - 47 {z>=-100 AND z<=0.0} 400 - 48 {z>=-100 AND z<0.0} 50 - 49 {z>=-100 AND z<=1.0} 700 - 50 {z>=-100 AND z<2.0} 700 - 51 {z>=-100 AND z<=2.0} 900 - 52 {z>=-100 AND z<3.0} 900 + 300 {y=0} {} 100 + 301 {y=1} t1y 50 + 302 {y=0.1} t1y 50 } { - do_test analyze5-1.$testid { - eqp "SELECT * FROM t1 WHERE $where" - } [format {0 0 0 {SEARCH TABLE t1 USING INDEX t1z (z>? AND z