-C Add\sa\scase\sto\sspeedtest1.c\sthat\sdemonstrates\sthe\sneed\sto\sfactor\sOP_Column\noperators\sout\sof\sinner\sloops.
-D 2013-12-21T00:04:37.543
+C Fix\sthe\s".echo\son"\sdot-command\sof\sthe\sshell\sso\sthat\sit\sechos\scomments\sin\naddition\sto\sSQL\sstatements\sand\sdot-commands.\s\sAdd\sthe\s--explain\soption\nto\sspeedtest1\sso\sthat\sthe\soutput\scan\sbe\spiped\sinto\sthe\scommand-line\sshell\nto\sshow\snicely-formated\sVDBE\scode\sfor\sthe\sentire\stest.
+D 2013-12-21T15:46:06.562
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F src/resolve.c 7eda9097b29fcf3d2b42fdc17d1de672134e09b6
F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
F src/select.c 819bb090c9a348d17f69f136cad2bfa9ee9cbb41
-F src/shell.c 18924f6ccfa70da98bf9e388bab512c0fd1e792e
+F src/shell.c a3541193d5fce37e91dad8ef46a9505aa7c9b344
F src/sqlite.h.in 4ef56464aeaa3785a2c5ca37fb3a0fb229d68b2e
F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc
F test/shared_err.test 0079c05c97d88cfa03989b7c20a8b266983087aa
F test/sharedlock.test 5ede3c37439067c43b0198f580fd374ebf15d304
F test/shell1.test e7c0b9ebda25d5e78f0a3ea0dc4e31bb6d8098c0
-F test/shell2.test e1d3790f064e50b2f973502f45750012667486df
+F test/shell2.test c57da3a381c099b02c813ba156298d5c2f5c93a3
F test/shell3.test 5e8545ec72c4413a0e8d4c6be56496e3c257ca29
F test/shell4.test aa4eef8118b412d1a01477a53426ece169ea86a9
F test/shell5.test cee83b4385f842fec1f2a0bec9ea811f35386edf
F test/speed4.test abc0ad3399dcf9703abed2fff8705e4f8e416715
F test/speed4p.explain 6b5f104ebeb34a038b2f714150f51d01143e59aa
F test/speed4p.test 0e51908951677de5a969b723e03a27a1c45db38b
-F test/speedtest1.c 60d9ebc64c036ee7803cc5323ef5204686312f5b
+F test/speedtest1.c 0fb5502e0879e18991e7ecc791b41ba1c7fa74e8
F test/spellfix.test 8c40b169b104086d8795781f670ba3c786d6d8be
F test/sqllimits1.test b1aae27cc98eceb845e7f7adf918561256e31298
F test/stat.test 76fd746b85459e812a0193410fb599f0531f22de
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
-P d93ae6833a7fca0672caf902a7b48846e54242cd
-R 1bba9a023d69c9c6d571dcfd3bfe83d6
+P 69a17336fdf4ae891e815914be8942f7222230c2
+R f8c33eb19f28c61795b29a236555d23d
U drh
-Z 60543214dfc95183844c1868498ec509
+Z 526508e712c84b42d21bbec0b02b9c9e
" --autovacuum Enable AUTOVACUUM mode\n"
" --cachesize N Set the cache size to N\n"
" --exclusive Enable locking_mode=EXCLUSIVE\n"
+ " --explain Like --sqlonly but with added EXPLAIN keywords\n"
" --heap SZ MIN Memory allocator uses SZ bytes & min allocation MIN\n"
" --incrvacuum Enable incremenatal vacuum mode\n"
" --journalmode M Set the journal_mode to MODE\n"
int bWithoutRowid; /* True for --without-rowid */
int bReprepare; /* True to reprepare the SQL on each rerun */
int bSqlOnly; /* True to print the SQL once only */
+ int bExplain; /* Print SQL with EXPLAIN prefix */
int szTest; /* Scale factor for test iterations */
const char *zWR; /* Might be WITHOUT ROWID */
const char *zNN; /* Might be NOT NULL */
}
}
+/* Print an SQL statement to standard output */
+static void printSql(const char *zSql){
+ int n = (int)strlen(zSql);
+ while( n>0 && (zSql[n-1]==';' || isspace(zSql[n-1])) ){ n--; }
+ if( g.bExplain ) printf("EXPLAIN ");
+ printf("%.*s;\n", n, zSql);
+ if( g.bExplain
+ && (sqlite3_strglob("CREATE *", zSql)
+ || sqlite3_strglob("DROP *", zSql)
+ || sqlite3_strglob("ALTER *", zSql)
+ )
+ ){
+ printf("%.*s;\n", n, zSql);
+ }
+}
+
/* Run SQL */
void speedtest1_exec(const char *zFormat, ...){
va_list ap;
zSql = sqlite3_vmprintf(zFormat, ap);
va_end(ap);
if( g.bSqlOnly ){
- int n = (int)strlen(zSql);
- while( n>0 && (zSql[n-1]==';' || isspace(zSql[n-1])) ){ n--; }
- printf("%.*s;\n", n, zSql);
+ printSql(zSql);
}else{
char *zErrMsg = 0;
int rc = sqlite3_exec(g.db, zSql, 0, 0, &zErrMsg);
zSql = sqlite3_vmprintf(zFormat, ap);
va_end(ap);
if( g.bSqlOnly ){
- int n = (int)strlen(zSql);
- while( n>0 && (zSql[n-1]==';' || isspace(zSql[n-1])) ){ n--; }
- printf("%.*s;\n", n, zSql);
+ printSql(zSql);
}else{
int rc;
if( g.pStmt ) sqlite3_finalize(g.pStmt);
speedtest1_begin_test(150, "CREATE INDEX five times");
- speedtest1_exec(
- "BEGIN;\n"
- "CREATE UNIQUE INDEX t1b ON t1(b);\n"
- "CREATE INDEX t1c ON t1(c);\n"
- "CREATE UNIQUE INDEX t2b ON t2(b);\n"
- "CREATE INDEX t2c ON t2(c DESC);\n"
- "CREATE INDEX t3bc ON t3(b,c);\n"
- "COMMIT;\n"
- );
+ speedtest1_exec("BEGIN;");
+ speedtest1_exec("CREATE UNIQUE INDEX t1b ON t1(b);");
+ speedtest1_exec("CREATE INDEX t1c ON t1(c);");
+ speedtest1_exec("CREATE UNIQUE INDEX t2b ON t2(b);");
+ speedtest1_exec("CREATE INDEX t2c ON t2(c DESC);");
+ speedtest1_exec("CREATE INDEX t3bc ON t3(b,c);");
+ speedtest1_exec("COMMIT;");
speedtest1_end_test();
n = sz;
speedtest1_begin_test(190, "DELETE and REFILL one table", n);
- speedtest1_exec(
- "DELETE FROM t2;"
- "INSERT INTO t2 SELECT * FROM t1;"
- );
+ speedtest1_exec("DELETE FROM t2;");
+ speedtest1_exec("INSERT INTO t2 SELECT * FROM t1;");
speedtest1_end_test();
speedtest1_begin_test(300, "Refill a %d-row table using (b&1)==(a&1)", sz);
speedtest1_exec("DELETE FROM t2;");
- speedtest1_exec(
- "INSERT INTO t2(a,b,c) SELECT a,b,c FROM t1 WHERE (b&1)==(a&1);"
- "INSERT INTO t2(a,b,c) SELECT a,b,c FROM t1 WHERE (b&1)<>(a&1);"
- );
+ speedtest1_exec("INSERT INTO t2(a,b,c)\n"
+ " SELECT a,b,c FROM t1 WHERE (b&1)==(a&1);");
+ speedtest1_exec("INSERT INTO t2(a,b,c)\n"
+ " SELECT a,b,c FROM t1 WHERE (b&1)<>(a&1);");
speedtest1_end_test();
cacheSize = integerValue(argv[i]);
}else if( strcmp(z,"exclusive")==0 ){
doExclusive = 1;
+ }else if( strcmp(z,"explain")==0 ){
+ g.bSqlOnly = 1;
+ g.bExplain = 1;
}else if( strcmp(z,"heap")==0 ){
if( i>=argc-2 ) fatal_error("missing arguments on %s\n", argv[i]);
nHeap = integerValue(argv[i+1]);
speedtest1_exec("PRAGMA journal_mode=%s", zJMode);
}
+ if( g.bExplain ) printf(".explain\n.echo on\n");
if( strcmp(zTSet,"main")==0 ){
testset_main();
}else if( strcmp(zTSet,"debug1")==0 ){