-C Add\stests\sto\ssyscall.test\sand\ssysfault.test.
-D 2011-03-29T18:28:35.749
+C Do\snot\sgenerate\ssqlite_stat1\sentries\sfor\sempty\stables\swhen\srunning\nANALYZE.\s\sTicket\s[83ea97620bd31016451]
+D 2011-03-30T14:54:05.390
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 27701a1653595a1f2187dc61c8117e00a6c1d50f
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc
F sqlite3.pc.in ae6f59a76e862f5c561eb32a380228a02afc3cad
F src/alter.c 6a0c176e64a34929a4436048066a84ef4f1445b3
-F src/analyze.c a038162344265ac21dfb24b3fcc06c666ebb9c07
+F src/analyze.c cafa5a22eb602ebdc5ba90995a41c1e84dda47a1
F src/attach.c 438ea6f6b5d5961c1f49b737f2ce0f14ce7c6877
F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
F src/backup.c 537f89c7ef5021cb580f31f782e556ffffcb2ed1
F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2
F src/vdbeInt.h e1c6254641168507d25b46affb6dfb53c782f553
F src/vdbeapi.c a09ad9164cafc505250d5dd6b69660c960f1308c
-F src/vdbeaux.c 9211dfa7d79d94d4e50714bfd0497ff3588a739d
+F src/vdbeaux.c d3e8be6fa84dd6a9a4b87b07b70ab4072dd3394e
F src/vdbeblob.c c3ccb7c8732858c680f442932e66ad06bb036562
F src/vdbemem.c 0498796b6ffbe45e32960d6a1f5adfb6e419883b
F src/vdbetrace.c 3ba13bc32bdf16d2bdea523245fd16736bed67b5
F test/alter3.test 8677e48d95536f7a6ed86a1a774744dadcc22b07
F test/alter4.test 1e5dd6b951e9f65ca66422edff02e56df82dd403
F test/altermalloc.test e81ac9657ed25c6c5bb09bebfa5a047cd8e4acfc
-F test/analyze.test c1eb87067fc16ece7c07e823d6395fd831b270c5
+F test/analyze.test c8cb89e8736336f1f0646c8123e6028a14c7b55e
F test/analyze2.test 8f2b1534d43f5547ce9a6b736c021d4192c75be3
F test/analyze3.test d61f55d8b472fc6e713160b1e577f7a68e63f38b
F test/analyze4.test 757b37875cf9bb528d46f74497bc789c88365045
F test/analyze5.test adc89b92fc9fee5ca1cb0bc8512f3206ad0fe5aa
-F test/analyze6.test 1ba1aea8fad25a77ffd71f24522d1bb9ecc949fc
+F test/analyze6.test c125622a813325bba1b4999040ddc213773c2290
F test/async.test ad4ba51b77cd118911a3fe1356b0809da9c108c3
F test/async2.test bf5e2ca2c96763b4cba3d016249ad7259a5603b6
F test/async3.test 93edaa9122f498e56ea98c36c72abc407f4fb11e
F test/walthread.test a25a393c068a2b42b44333fa3fdaae9072f1617c
F test/where.test de337a3fe0a459ec7c93db16a519657a90552330
F test/where2.test 43d4becaf5a5df854e6c21d624a1cb84c6904554
-F test/where3.test c81d4ecfaed54e8aef9c1a8a90ac83c9f5c49090
+F test/where3.test 8e1175c7ef710c70502858fc4fb08d784b3620b9
F test/where4.test e9b9e2f2f98f00379e6031db6a6fca29bae782a2
F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P dbe569a099c2855480e35c0cc4d9332821ad80da
-R 3d53fb9ad6916c3f10485806a35396e6
-U dan
-Z cababf145f4f0436acd3441acb25d038
+P 3d2de011814002e2e25b7645f94ff8fc7aab9cdd
+R 0216cf925df143bd6cbc69301b702732
+U drh
+Z ebdb63d4898403f81a888e3e3a66ac94
-3d2de011814002e2e25b7645f94ff8fc7aab9cdd
\ No newline at end of file
+3a27af5b3c688c651ba1fae261026ef77b7ff5e3
\ No newline at end of file
int topOfLoop; /* The top of the loop */
int endOfLoop; /* The end of the loop */
int addr = 0; /* The address of an instruction */
- int jZeroRows = 0; /* Jump from here if number of rows is zero */
+ int jZeroRows = -1; /* Jump from here if number of rows is zero */
int iDb; /* Index of database containing pTab */
int regTabname = iMem++; /* Register containing table name */
int regIdxname = iMem++; /* Register containing index name */
** is never possible.
*/
sqlite3VdbeAddOp2(v, OP_SCopy, iMem, regSampleno);
- if( jZeroRows==0 ){
+ if( jZeroRows<0 ){
jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, iMem);
}
for(i=0; i<nCol; i++){
VdbeComment((v, "%s", pTab->zName));
sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regSampleno);
sqlite3VdbeAddOp1(v, OP_Close, iIdxCur);
+ jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, regSampleno);
}else{
- assert( jZeroRows>0 );
- addr = sqlite3VdbeAddOp0(v, OP_Goto);
sqlite3VdbeJumpHere(v, jZeroRows);
+ jZeroRows = sqlite3VdbeAddOp0(v, OP_Goto);
}
sqlite3VdbeAddOp2(v, OP_Null, 0, regIdxname);
sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regRowid);
sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
if( pParse->nMem<regRec ) pParse->nMem = regRec;
- if( jZeroRows ){
- sqlite3VdbeJumpHere(v, addr);
- }
+ sqlite3VdbeJumpHere(v, jZeroRows);
}
/*
** the address of the next instruction to be coded.
*/
void sqlite3VdbeJumpHere(Vdbe *p, int addr){
- sqlite3VdbeChangeP2(p, addr, p->nOp);
+ if( addr>=0 ) sqlite3VdbeChangeP2(p, addr, p->nOp);
}
execsql {
SELECT * FROM sqlite_stat1
}
-} {t1 {} 0}
+} {}
do_test analyze-1.12 {
catchsql {
ANALYZE t1;
execsql {
SELECT * FROM sqlite_stat1
}
-} {t1 {} 0}
+} {}
# Create some indices that can be analyzed. But do not yet add
# data. Without data in the tables, no analysis is done.
ANALYZE main.t1;
SELECT * FROM sqlite_stat1 ORDER BY idx;
}
-} {t1 {} 0}
+} {}
do_test analyze-2.2 {
execsql {
CREATE INDEX t1i2 ON t1(b);
ANALYZE t1;
SELECT * FROM sqlite_stat1 ORDER BY idx;
}
-} {t1 {} 0}
+} {}
do_test analyze-2.3 {
execsql {
CREATE INDEX t1i3 ON t1(a,b);
ANALYZE main;
SELECT * FROM sqlite_stat1 ORDER BY idx;
}
-} {t1 {} 0}
+} {}
# Start adding data to the table. Verify that the analysis
# is done correctly.
} {0 0 0 {SCAN TABLE cat (~16 rows)} 0 1 1 {SEARCH TABLE ev USING COVERING INDEX evy (y=?) (~32 rows)}}
+# Ticket [83ea97620bd3101645138b7b0e71c12c5498fe3d] 2011-03-30
+# If ANALYZE is run on an empty table, make sure indices are used
+# on the table.
+#
+do_test analyze6-2.1 {
+ execsql {
+ CREATE TABLE t201(x INTEGER PRIMARY KEY, y UNIQUE, z);
+ CREATE INDEX t201z ON t201(z);
+ ANALYZE;
+ }
+ eqp {SELECT * FROM t201 WHERE z=5}
+} {0 0 0 {SEARCH TABLE t201 USING INDEX t201z (z=?) (~10 rows)}}
+do_test analyze6-2.2 {
+ eqp {SELECT * FROM t201 WHERE y=5}
+} {0 0 0 {SEARCH TABLE t201 USING INDEX sqlite_autoindex_t201_1 (y=?) (~1 rows)}}
+do_test analyze6-2.3 {
+ eqp {SELECT * FROM t201 WHERE x=5}
+} {0 0 0 {SEARCH TABLE t201 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
+do_test analyze6-2.4 {
+ execsql {
+ INSERT INTO t201 VALUES(1,2,3);
+ ANALYZE t201;
+ }
+ eqp {SELECT * FROM t201 WHERE z=5}
+} {0 0 0 {SEARCH TABLE t201 USING INDEX t201z (z=?) (~10 rows)}}
+do_test analyze6-2.5 {
+ eqp {SELECT * FROM t201 WHERE y=5}
+} {0 0 0 {SEARCH TABLE t201 USING INDEX sqlite_autoindex_t201_1 (y=?) (~1 rows)}}
+do_test analyze6-2.6 {
+ eqp {SELECT * FROM t201 WHERE x=5}
+} {0 0 0 {SEARCH TABLE t201 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
+do_test analyze6-2.7 {
+ execsql {
+ INSERT INTO t201 VALUES(4,5,7);
+ INSERT INTO t201 SELECT x+100, y+100, z+100 FROM t201;
+ INSERT INTO t201 SELECT x+200, y+200, z+200 FROM t201;
+ INSERT INTO t201 SELECT x+400, y+400, z+400 FROM t201;
+ ANALYZE t201;
+ }
+ eqp {SELECT * FROM t201 WHERE z=5}
+} {0 0 0 {SEARCH TABLE t201 USING INDEX t201z (z=?) (~10 rows)}}
+do_test analyze6-2.8 {
+ eqp {SELECT * FROM t201 WHERE y=5}
+} {0 0 0 {SEARCH TABLE t201 USING INDEX sqlite_autoindex_t201_1 (y=?) (~1 rows)}}
+do_test analyze6-2.9 {
+ eqp {SELECT * FROM t201 WHERE x=5}
+} {0 0 0 {SEARCH TABLE t201 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}}
+
finish_test
CREATE INDEX t301c ON t301(c);
INSERT INTO t301 VALUES(1,2,3);
CREATE TABLE t302(x, y);
+ INSERT INTO t302 VALUES(4,5);
ANALYZE;
explain query plan SELECT * FROM t302, t301 WHERE t302.x=5 AND t301.a=t302.y;
} {
0 0 0 {USE TEMP B-TREE FOR ORDER BY}
}
-
finish_test