Add tests to check if ANALYZE is choosing common non-periodic samples for the stat4 table.
FossilOrigin-Name: 175842997af134138784bff6f8e93573deb5b36b
This commit is contained in:
parent
575ab2f8f6
commit
84f48296fa
12
manifest
12
manifest
@ -1,5 +1,5 @@
|
||||
C Fix\sa\sproblem\swith\susing\sstat4\sdata\sto\sestimate\sthe\snumber\sof\srows\sscanned\sby\sa\srange\sconstraint\son\sthe\ssecond\sor\ssubsequent\scolumn\sof\sany\sindex\swhere\san\saffinity\stransformation\smust\sbe\sapplied\sto\sthe\sconstraint\sargument.
|
||||
D 2013-09-02T07:16:40.805
|
||||
C Add\stests\sto\scheck\sif\sANALYZE\sis\schoosing\scommon\snon-periodic\ssamples\sfor\sthe\sstat4\stable.
|
||||
D 2013-09-02T11:52:11.512
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
@ -308,7 +308,7 @@ F test/analyze5.test 765c4e284aa69ca172772aa940946f55629bc8c4
|
||||
F test/analyze6.test 19151da2c4e918905d2081b74ac5c4d47fc850ab
|
||||
F test/analyze7.test bb1409afc9e8629e414387ef048b8e0e3e0bdc4f
|
||||
F test/analyze8.test 093d15c1c888eed5034304a98c992f7360130b88
|
||||
F test/analyze9.test c4717447731bf9bb5751e0785d6337883094db3c
|
||||
F test/analyze9.test bce50d7448d4c51e1a2fd8efdcf895c2e5042e76
|
||||
F test/analyzeA.test 1a5c40079894847976d983ca39c707aaa44b6944
|
||||
F test/async.test 1d0e056ba1bb9729283a0f22718d3a25e82c277b
|
||||
F test/async2.test c0a9bd20816d7d6a2ceca7b8c03d3d69c28ffb8b
|
||||
@ -1109,7 +1109,7 @@ F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
||||
F tool/wherecosttest.c f407dc4c79786982a475261866a161cd007947ae
|
||||
F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
|
||||
P c94933f13208f3f7d6d1b117ce6d2821100655a4
|
||||
R 15f429912bd32e56367e01c1c9d0d2ba
|
||||
P c21f58d84859e479a6cc619671a0df48b2f9692e
|
||||
R 9fc61f7137863d5244ff2fd6cc214c12
|
||||
U dan
|
||||
Z fd6aacb9a694e6de7810fd7923f14ee2
|
||||
Z 6c1b0e52f8f47aae31db001aa8668b6b
|
||||
|
@ -1 +1 @@
|
||||
c21f58d84859e479a6cc619671a0df48b2f9692e
|
||||
175842997af134138784bff6f8e93573deb5b36b
|
@ -611,6 +611,99 @@ do_eqp_test 13.2.2 {
|
||||
SELECT * FROM t1 WHERE a='ott' AND b<'10' AND c=1
|
||||
} {/SEARCH TABLE t1 USING INDEX i1/}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# By default, 16 non-periodic samples are collected for the stat4 table.
|
||||
# The following tests attempt to verify that the most common keys are
|
||||
# being collected.
|
||||
#
|
||||
proc check_stat4 {tn} {
|
||||
db eval ANALYZE
|
||||
db eval {SELECT a, b, c, d FROM t1} {
|
||||
incr k($a)
|
||||
incr k([list $a $b])
|
||||
incr k([list $a $b $c])
|
||||
if { [info exists k([list $a $b $c $d])]==0 } { incr nRow }
|
||||
incr k([list $a $b $c $d])
|
||||
}
|
||||
|
||||
set L [list]
|
||||
foreach key [array names k] {
|
||||
lappend L [list $k($key) $key]
|
||||
}
|
||||
|
||||
set nSample $nRow
|
||||
if {$nSample>16} {set nSample 16}
|
||||
|
||||
set nThreshold [lindex [lsort -decr -integer -index 0 $L] [expr $nSample-1] 0]
|
||||
foreach key [array names k] {
|
||||
if {$k($key)>$nThreshold} {
|
||||
set expect($key) 1
|
||||
}
|
||||
if {$k($key)==$nThreshold} {
|
||||
set possible($key) 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
set nPossible [expr $nSample - [llength [array names expect]]]
|
||||
|
||||
#puts "EXPECT: [array names expect]"
|
||||
#puts "POSSIBLE($nPossible/[array size possible]): [array names possible]"
|
||||
#puts "HAVE: [db eval {SELECT test_decode(sample) FROM sqlite_stat4 WHERE idx='i1'}]"
|
||||
|
||||
db eval {SELECT test_decode(sample) AS s FROM sqlite_stat4 WHERE idx='i1'} {
|
||||
set seen 0
|
||||
for {set i 0} {$i<4} {incr i} {
|
||||
unset -nocomplain expect([lrange $s 0 $i])
|
||||
if {[info exists possible([lrange $s 0 $i])]} {
|
||||
set seen 1
|
||||
unset -nocomplain possible([lrange $s 0 $i])
|
||||
}
|
||||
}
|
||||
if {$seen} {incr nPossible -1}
|
||||
}
|
||||
if {$nPossible<0} {set nPossible 0}
|
||||
|
||||
set res [list [llength [array names expect]] $nPossible]
|
||||
uplevel [list do_test $tn [list set {} $res] {0 0}]
|
||||
}
|
||||
|
||||
drop_all_tables
|
||||
do_test 14.1.1 {
|
||||
execsql {
|
||||
CREATE TABLE t1(a,b,c,d);
|
||||
CREATE INDEX i1 ON t1(a,b,c,d);
|
||||
}
|
||||
for {set i 0} {$i < 160} {incr i} {
|
||||
execsql { INSERT INTO t1 VALUES($i,$i,$i,$i) }
|
||||
if {($i % 10)==0} { execsql { INSERT INTO t1 VALUES($i,$i,$i,$i) } }
|
||||
}
|
||||
} {}
|
||||
check_stat4 14.1.2
|
||||
|
||||
do_test 14.2.1 {
|
||||
execsql { DELETE FROM t1 }
|
||||
for {set i 0} {$i < 1600} {incr i} {
|
||||
execsql { INSERT INTO t1 VALUES($i/10,$i/17,$i/27,$i/37) }
|
||||
}
|
||||
} {}
|
||||
check_stat4 14.2.2
|
||||
|
||||
do_test 14.3.1 {
|
||||
for {set i 0} {$i < 10} {incr i} {
|
||||
execsql { INSERT INTO t1 VALUES($i*50,$i*50,$i*50,$i*50) }
|
||||
execsql { INSERT INTO t1 VALUES($i*50,$i*50,$i*50,$i*50) }
|
||||
execsql { INSERT INTO t1 VALUES($i*50,$i*50,$i*50,$i*50) }
|
||||
execsql { INSERT INTO t1 VALUES($i*50,$i*50,$i*50,$i*50) }
|
||||
execsql { INSERT INTO t1 VALUES($i*50,$i*50,$i*50,$i*50) }
|
||||
execsql { INSERT INTO t1 VALUES($i*50,$i*50,$i*50,$i*50) }
|
||||
execsql { INSERT INTO t1 VALUES($i*50,$i*50,$i*50,$i*50) }
|
||||
execsql { INSERT INTO t1 VALUES($i*50,$i*50,$i*50,$i*50) }
|
||||
execsql { INSERT INTO t1 VALUES($i*50,$i*50,$i*50,$i*50) }
|
||||
execsql { INSERT INTO t1 VALUES($i*50,$i*50,$i*50,$i*50) }
|
||||
}
|
||||
} {}
|
||||
check_stat4 14.3.2
|
||||
|
||||
finish_test
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user