Add further tests. Fixes so that compilation without ENABLE_STMT_SCANSTATUS works.

FossilOrigin-Name: a2303c719222f1effb51acc6b37930561148c00c
This commit is contained in:
dan 2014-11-03 15:33:17 +00:00
parent 037b5324bd
commit e2f771b047
7 changed files with 155 additions and 12 deletions

View File

@ -1,5 +1,5 @@
C Remove\sunused\svariable\sfrom\sstruct\sWhereInfo.\sAdd\ssome\sexplanatory\scomments\sto\snew\scode. C Add\sfurther\stests.\sFixes\sso\sthat\scompilation\swithout\sENABLE_STMT_SCANSTATUS\sworks.
D 2014-11-03T11:25:32.305 D 2014-11-03T15:33:17.869
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@ -250,7 +250,7 @@ F src/test_async.c 21e11293a2f72080eda70e1124e9102044531cd8
F src/test_autoext.c dea8a01a7153b9adc97bd26161e4226329546e12 F src/test_autoext.c dea8a01a7153b9adc97bd26161e4226329546e12
F src/test_backup.c 3875e899222b651e18b662f86e0e50daa946344e F src/test_backup.c 3875e899222b651e18b662f86e0e50daa946344e
F src/test_btree.c 2e9978eca99a9a4bfa8cae949efb00886860a64f F src/test_btree.c 2e9978eca99a9a4bfa8cae949efb00886860a64f
F src/test_config.c a4cdebe093474c02eecc5e4008b1a22198edf975 F src/test_config.c c8b8b50bf2fe5102de10e4c7100b746d7f6bf62f
F src/test_demovfs.c 69b2085076654ebc18014cbc6386f04409c959a9 F src/test_demovfs.c 69b2085076654ebc18014cbc6386f04409c959a9
F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc
F src/test_fs.c ced436e3d4b8e4681328409b8081051ce614e28f F src/test_fs.c ced436e3d4b8e4681328409b8081051ce614e28f
@ -289,11 +289,11 @@ F src/update.c 3c4ecc282accf12d39edb8d524cf089645e55a13
F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
F src/util.c 3b627daa45c7308c1e36e3dbaa3f9ce7e5c7fa73 F src/util.c 3b627daa45c7308c1e36e3dbaa3f9ce7e5c7fa73
F src/vacuum.c 59f03f92bcff57faa6a8ca256eb29ccddfb0614a F src/vacuum.c 59f03f92bcff57faa6a8ca256eb29ccddfb0614a
F src/vdbe.c ccc626d70659160596d28b4a910b6086da788695 F src/vdbe.c 175a360c56e75ce4eb2b60704fd7c011b93926f5
F src/vdbe.h d412bd01e89f0d69991b8f46601f96bc169d28f4 F src/vdbe.h d412bd01e89f0d69991b8f46601f96bc169d28f4
F src/vdbeInt.h 539ba284790e871f98be74a78cbdfcedfae22639 F src/vdbeInt.h 539ba284790e871f98be74a78cbdfcedfae22639
F src/vdbeapi.c addf446ecade237bebd7e9fe769bdfb9db8d9fb1 F src/vdbeapi.c addf446ecade237bebd7e9fe769bdfb9db8d9fb1
F src/vdbeaux.c 0aeb90cb62d7c07572798b41882838b3d4e55b44 F src/vdbeaux.c cf6b8152dd22155201d57c216e6266866b61da59
F src/vdbeblob.c 8b5442ff0954c44b45cbabbe2e94091a2e16fdef F src/vdbeblob.c 8b5442ff0954c44b45cbabbe2e94091a2e16fdef
F src/vdbemem.c 31d8eabb0cd78bfeab4e5124c7363c3e9e54db9f F src/vdbemem.c 31d8eabb0cd78bfeab4e5124c7363c3e9e54db9f
F src/vdbesort.c 975aeffa99acb0991b2f288d30294756bff41438 F src/vdbesort.c 975aeffa99acb0991b2f288d30294756bff41438
@ -302,7 +302,7 @@ F src/vtab.c 2a30791bbd7926b589401bd09c3abb33de563793
F src/wal.c 10e7de7ce90865a68153f001a61f1d985cd17983 F src/wal.c 10e7de7ce90865a68153f001a61f1d985cd17983
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4 F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
F src/walker.c c253b95b4ee44b21c406e2a1052636c31ea27804 F src/walker.c c253b95b4ee44b21c406e2a1052636c31ea27804
F src/where.c 53dae5ed6133438a9342c17bf3e95e00edbb0556 F src/where.c d5fa1081bf7cb70478ed06489e063695c92ee1e1
F src/whereInt.h d3633e9b592103241b74b0ec76185f3e5b8b62e0 F src/whereInt.h d3633e9b592103241b74b0ec76185f3e5b8b62e0
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
@ -801,7 +801,7 @@ F test/savepoint4.test c8f8159ade6d2acd9128be61e1230f1c1edc6cc0
F test/savepoint5.test 0735db177e0ebbaedc39812c8d065075d563c4fd F test/savepoint5.test 0735db177e0ebbaedc39812c8d065075d563c4fd
F test/savepoint6.test f41279c5e137139fa5c21485773332c7adb98cd7 F test/savepoint6.test f41279c5e137139fa5c21485773332c7adb98cd7
F test/savepoint7.test fbf319a7b2dda089ec5be30a424a0e95f121d423 F test/savepoint7.test fbf319a7b2dda089ec5be30a424a0e95f121d423
F test/scanstatus.test 0c0baa647e98940d753d40691bf6475345c05cc5 F test/scanstatus.test 01afb2220f18ce85f9e338c20684f428d56e5c01
F test/schema.test 8f7999be894260f151adf15c2c7540f1c6d6a481 F test/schema.test 8f7999be894260f151adf15c2c7540f1c6d6a481
F test/schema2.test 906408621ea881fdb496d878b1822572a34e32c5 F test/schema2.test 906408621ea881fdb496d878b1822572a34e32c5
F test/schema3.test 1bc1008e1f8cb5654b248c55f27249366eb7ed38 F test/schema3.test 1bc1008e1f8cb5654b248c55f27249366eb7ed38
@ -1211,7 +1211,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P f13d6ba8a72d75838c4aaf85326c1129da027f8b P f5313e0c680d9baebefb1cf50ddadedd4418a334
R 79a96158570090f7f8b0799c9e59db67 R b9cde6c71acdc4fef0c5c1ac03d62018
U dan U dan
Z b85dee7fa48b3d6596e077d675db2dc9 Z f0600457ea98c0c998694790015a9674

View File

@ -1 +1 @@
f5313e0c680d9baebefb1cf50ddadedd4418a334 a2303c719222f1effb51acc6b37930561148c00c

View File

@ -484,6 +484,12 @@ Tcl_SetVar2(interp, "sqlite_options", "mergesort", "1", TCL_GLOBAL_ONLY);
Tcl_SetVar2(interp, "sqlite_options", "stat3", "0", TCL_GLOBAL_ONLY); Tcl_SetVar2(interp, "sqlite_options", "stat3", "0", TCL_GLOBAL_ONLY);
#endif #endif
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
Tcl_SetVar2(interp, "sqlite_options", "scanstatus", "1", TCL_GLOBAL_ONLY);
#else
Tcl_SetVar2(interp, "sqlite_options", "scanstatus", "0", TCL_GLOBAL_ONLY);
#endif
#if !defined(SQLITE_ENABLE_LOCKING_STYLE) #if !defined(SQLITE_ENABLE_LOCKING_STYLE)
# if defined(__APPLE__) # if defined(__APPLE__)
# define SQLITE_ENABLE_LOCKING_STYLE 1 # define SQLITE_ENABLE_LOCKING_STYLE 1

View File

@ -5409,7 +5409,9 @@ case OP_Program: { /* jump */
pFrame->token = pProgram->token; pFrame->token = pProgram->token;
pFrame->aOnceFlag = p->aOnceFlag; pFrame->aOnceFlag = p->aOnceFlag;
pFrame->nOnceFlag = p->nOnceFlag; pFrame->nOnceFlag = p->nOnceFlag;
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
pFrame->anExec = p->anExec; pFrame->anExec = p->anExec;
#endif
pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem]; pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem];
for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){ for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){
@ -5438,7 +5440,9 @@ case OP_Program: { /* jump */
p->nOp = pProgram->nOp; p->nOp = pProgram->nOp;
p->aOnceFlag = (u8 *)&p->apCsr[p->nCursor]; p->aOnceFlag = (u8 *)&p->apCsr[p->nCursor];
p->nOnceFlag = pProgram->nOnce; p->nOnceFlag = pProgram->nOnce;
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
p->anExec = 0; p->anExec = 0;
#endif
pc = -1; pc = -1;
memset(p->aOnceFlag, 0, p->nOnceFlag); memset(p->aOnceFlag, 0, p->nOnceFlag);

View File

@ -1723,7 +1723,9 @@ void sqlite3VdbeMakeReady(
p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*), p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*),
&zCsr, zEnd, &nByte); &zCsr, zEnd, &nByte);
p->aOnceFlag = allocSpace(p->aOnceFlag, nOnce, &zCsr, zEnd, &nByte); p->aOnceFlag = allocSpace(p->aOnceFlag, nOnce, &zCsr, zEnd, &nByte);
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
p->anExec = allocSpace(p->anExec, p->nOp*sizeof(i64), &zCsr, zEnd, &nByte); p->anExec = allocSpace(p->anExec, p->nOp*sizeof(i64), &zCsr, zEnd, &nByte);
#endif
if( nByte ){ if( nByte ){
p->pFree = sqlite3DbMallocZero(db, nByte); p->pFree = sqlite3DbMallocZero(db, nByte);
} }
@ -1791,7 +1793,9 @@ void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){
*/ */
int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){ int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
Vdbe *v = pFrame->v; Vdbe *v = pFrame->v;
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
v->anExec = pFrame->anExec; v->anExec = pFrame->anExec;
#endif
v->aOnceFlag = pFrame->aOnceFlag; v->aOnceFlag = pFrame->aOnceFlag;
v->nOnceFlag = pFrame->nOnceFlag; v->nOnceFlag = pFrame->nOnceFlag;
v->aOp = pFrame->aOp; v->aOp = pFrame->aOp;

View File

@ -2953,7 +2953,7 @@ static void addScanStatus(
); );
} }
#else #else
# define addScanStatus(a, b, c, d) # define addScanStatus(a, b, c, d) ((void)d)
#endif #endif

View File

@ -14,6 +14,11 @@ set testdir [file dirname $argv0]
source $testdir/tester.tcl source $testdir/tester.tcl
set testprefix scanstatus set testprefix scanstatus
ifcapable !scanstatus {
finish_test
return
}
do_execsql_test 1.0 { do_execsql_test 1.0 {
CREATE TABLE t1(a, b); CREATE TABLE t1(a, b);
CREATE TABLE t2(x, y); CREATE TABLE t2(x, y);
@ -266,4 +271,128 @@ do_scanstatus_test 4.2.2 {
nLoop 1 nVisit 3 nEst 524288 zName c1 zExplain {SCAN TABLE c1} nLoop 1 nVisit 3 nEst 524288 zName c1 zExplain {SCAN TABLE c1}
} }
#-------------------------------------------------------------------------
# Further tests of different scan types.
#
reset_db
proc tochar {i} {
set alphabet {a b c d e f g h i j k l m n o p q r s t u v w x y z}
return [lindex $alphabet [expr $i % [llength $alphabet]]]
}
db func tochar tochar
do_execsql_test 5.0 {
CREATE TABLE t1(a PRIMARY KEY, b, c);
INSERT INTO t1 VALUES(0, 1, 'a');
INSERT INTO t1 VALUES(1, 0, 'b');
INSERT INTO t1 VALUES(2, 1, 'c');
INSERT INTO t1 VALUES(3, 0, 'd');
INSERT INTO t1 VALUES(4, 1, 'e');
INSERT INTO t1 VALUES(5, 0, 'a');
INSERT INTO t1 VALUES(6, 1, 'b');
INSERT INTO t1 VALUES(7, 0, 'c');
INSERT INTO t1 VALUES(8, 1, 'd');
INSERT INTO t1 VALUES(9, 0, 'e');
CREATE INDEX t1bc ON t1(b, c);
CREATE TABLE t2(x, y);
CREATE INDEX t2xy ON t2(x, y);
WITH data(i, x, y) AS (
SELECT 0, 0, tochar(0)
UNION ALL
SELECT i+1, (i+1)%2, tochar(i+1) FROM data WHERE i<500
) INSERT INTO t2 SELECT x, y FROM data;
CREATE TABLE t3(x, y);
INSERT INTO t3 SELECT * FROM t2;
ANALYZE;
}
do_execsql_test 5.1.1 {
SELECT count(*) FROM t1 WHERE a IN (SELECT b FROM t1 AS ii)
} {2}
do_scanstatus_test 5.1.2 {
nLoop 1 nVisit 10 nEst 10 zName t1bc
zExplain {SCAN TABLE t1 AS ii USING COVERING INDEX t1bc}
nLoop 1 nVisit 2 nEst 8 zName sqlite_autoindex_t1_1
zExplain {SEARCH TABLE t1 USING COVERING INDEX sqlite_autoindex_t1_1 (a=?)}
}
do_execsql_test 5.2.1 {
SELECT count(*) FROM t1 WHERE a IN (0, 1)
} {2}
do_scanstatus_test 5.2.2 {
nLoop 1 nVisit 2 nEst 2 zName sqlite_autoindex_t1_1
zExplain {SEARCH TABLE t1 USING COVERING INDEX sqlite_autoindex_t1_1 (a=?)}
}
do_eqp_test 5.3.1 {
SELECT count(*) FROM t2 WHERE y = 'j';
} {0 0 0 {SEARCH TABLE t2 USING COVERING INDEX t2xy (ANY(x) AND y=?)}}
do_execsql_test 5.3.2 {
SELECT count(*) FROM t2 WHERE y = 'j';
} {19}
do_scanstatus_test 5.3.3 {
nLoop 1 nVisit 19 nEst 56 zName t2xy zExplain
{SEARCH TABLE t2 USING COVERING INDEX t2xy (ANY(x) AND y=?)}
}
do_eqp_test 5.4.1 {
SELECT count(*) FROM t1, t2 WHERE y = c;
} {
0 0 0 {SCAN TABLE t1 USING COVERING INDEX t1bc}
0 1 1 {SEARCH TABLE t2 USING COVERING INDEX t2xy (ANY(x) AND y=?)}
}
do_execsql_test 5.4.2 {
SELECT count(*) FROM t1, t2 WHERE y = c;
} {200}
do_scanstatus_test 5.4.3 {
nLoop 1 nVisit 10 nEst 10 zName t1bc
zExplain {SCAN TABLE t1 USING COVERING INDEX t1bc}
nLoop 10 nVisit 200 nEst 56 zName t2xy
zExplain {SEARCH TABLE t2 USING COVERING INDEX t2xy (ANY(x) AND y=?)}
}
do_eqp_test 5.5.1 {
SELECT count(*) FROM t1, t3 WHERE y = c;
} {
0 0 1 {SCAN TABLE t3}
0 1 0 {SEARCH TABLE t1 USING AUTOMATIC COVERING INDEX (c=?)}
}
do_execsql_test 5.5.2 {
SELECT count(*) FROM t1, t3 WHERE y = c;
} {200}
do_scanstatus_test 5.5.3 {
nLoop 1 nVisit 501 nEst 480 zName t3 zExplain {SCAN TABLE t3}
nLoop 501 nVisit 200 nEst 20 zName auto-index zExplain
{SEARCH TABLE t1 USING AUTOMATIC COVERING INDEX (c=?)}
}
#-------------------------------------------------------------------------
# Virtual table scans
#
ifcapable fts3 {
do_execsql_test 6.0 {
CREATE VIRTUAL TABLE ft1 USING fts4;
INSERT INTO ft1 VALUES('a d c f g h e i f c');
INSERT INTO ft1 VALUES('g c h b g b f f f g');
INSERT INTO ft1 VALUES('h h c c h f a e d d');
INSERT INTO ft1 VALUES('e j i j i e b c f g');
INSERT INTO ft1 VALUES('g f b g j c h a d f');
INSERT INTO ft1 VALUES('j i a e g f a i a c');
INSERT INTO ft1 VALUES('f d g g j j c a h g');
INSERT INTO ft1 VALUES('b d h a d j j j b i');
INSERT INTO ft1 VALUES('j e a b j e c b c i');
INSERT INTO ft1 VALUES('a d e f b j j c g d');
}
do_execsql_test 6.1.1 {
SELECT count(*) FROM ft1 WHERE ft1 MATCH 'd'
} {6}
do_scanstatus_test 6.1.2 {
nLoop 1 nVisit 6 nEst 24 zName ft1 zExplain
{SCAN TABLE ft1 VIRTUAL TABLE INDEX 3:}
}
}
finish_test finish_test