Remove an unnecessary column-cache flush operation. Add code to trace the
column cache when compiled with SQLITE_DEBUG and using PRAGMA vdbe_addoptrace=ON. FossilOrigin-Name: 58704ed1f4cd78bb3b0c095ffd1626906a95a413
This commit is contained in:
commit
935c34711b
25
manifest
25
manifest
@ -1,5 +1,5 @@
|
||||
C Add\sevidence\smarks\sand\sadditional\stest\scases\sfor\sthe\sprintf()\sSQL\sfunction.
|
||||
D 2013-12-17T16:32:56.710
|
||||
C Remove\san\sunnecessary\scolumn-cache\sflush\soperation.\s\sAdd\scode\sto\strace\sthe\ncolumn\scache\swhen\scompiled\swith\sSQLITE_DEBUG\sand\susing\nPRAGMA\svdbe_addoptrace=ON.
|
||||
D 2013-12-18T18:44:43.134
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
@ -175,7 +175,7 @@ F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
|
||||
F src/ctime.c 77779efbe78dd678d84bfb4fc2e87b6b6ad8dccd
|
||||
F src/date.c 593c744b2623971e45affd0bde347631bdfa4625
|
||||
F src/delete.c b36db1f79ee50eaca979660c9dd36437f5410b93
|
||||
F src/expr.c 31a2b65339f6c3795d4cfa5e99798cd72f9fdfdf
|
||||
F src/expr.c 962c29881bcee9e1d7b556020c1d29dc8bd8b906
|
||||
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
|
||||
F src/fkey.c 2ab0f5384b70594468ef3ac5c7ed8ca24bfd17d5
|
||||
F src/func.c 6325ac2ec10833ccf4d5c36d323709221d37ea19
|
||||
@ -219,7 +219,7 @@ F src/printf.c 85d07756e45d7496d19439dcae3e6e9e0090f269
|
||||
F src/random.c 0b2dbc37fdfbfa6bd455b091dfcef5bdb32dba68
|
||||
F src/resolve.c 7eda9097b29fcf3d2b42fdc17d1de672134e09b6
|
||||
F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
|
||||
F src/select.c d41381d80a22d3a83352aeca274cccf264ac277a
|
||||
F src/select.c ecb020aa28e030761f6addd0adf5438e938931c1
|
||||
F src/shell.c 18924f6ccfa70da98bf9e388bab512c0fd1e792e
|
||||
F src/sqlite.h.in 4ef56464aeaa3785a2c5ca37fb3a0fb229d68b2e
|
||||
F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
|
||||
@ -281,11 +281,11 @@ F src/utf.c 6fc6c88d50448c469c5c196acf21617a24f90269
|
||||
F src/util.c e71f19b272f05c8695cf747b4bac1732685f9e5c
|
||||
F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
|
||||
F src/vdbe.c 919422843c859a1db08db0c88189912dbf625fc7
|
||||
F src/vdbe.h c06f0813f853566457ce9cfb1a4a4bc39a5da644
|
||||
F src/vdbeInt.h a7bc268f844d75be48bb7ae16f77b418fd3c641c
|
||||
F src/vdbe.h c3278ab2b410f17acf61faf91be7bce3fd466e8b
|
||||
F src/vdbeInt.h 8a4d2d69955570bb74a092c3cdbab04afb554963
|
||||
F src/vdbeapi.c ce4e68ea4842cc6081046f533d088dcf01d247ad
|
||||
F src/vdbeaux.c a22cbd91b24503b82690cb03324ffec9f4ef63f6
|
||||
F src/vdbeblob.c 8cd05a5630e6d5563ad017bf82edaf812b28acde
|
||||
F src/vdbeaux.c 70aa77f7db7b9b627bbc44a4546deef8ba56c51b
|
||||
F src/vdbeblob.c bc40f98f256f0b34116d6a44b114da4a81a15d33
|
||||
F src/vdbemem.c 0e69351b2c6ff7d8b638688c0ae336a26befa6b2
|
||||
F src/vdbesort.c 9d83601f9d6243fe70dd0169a2820c5ddfd48147
|
||||
F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767
|
||||
@ -822,7 +822,7 @@ F test/speed3.test d32043614c08c53eafdc80f33191d5bd9b920523
|
||||
F test/speed4.test abc0ad3399dcf9703abed2fff8705e4f8e416715
|
||||
F test/speed4p.explain 6b5f104ebeb34a038b2f714150f51d01143e59aa
|
||||
F test/speed4p.test 0e51908951677de5a969b723e03a27a1c45db38b
|
||||
F test/speedtest1.c bb3a4cc62b6cf29f5bc72c85d2bee5991e207be7
|
||||
F test/speedtest1.c 47788d552a349241471ad06d239383dadd97164d
|
||||
F test/spellfix.test 8c40b169b104086d8795781f670ba3c786d6d8be
|
||||
F test/sqllimits1.test b1aae27cc98eceb845e7f7adf918561256e31298
|
||||
F test/stat.test c8eccfe8fcd3f3cfc864ce22d5b9e803a3c69940
|
||||
@ -1147,7 +1147,8 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891
|
||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
|
||||
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
||||
P a1bb62f91a85af0584100c3ad77877a949c30cca
|
||||
R 69f0b68d0886123f335b52e69a6c748f
|
||||
P 93121d3097a43997af3c0de65bd9bd7663845fa2 97fdfc6b79833011fc0c506fe5e0985c0fb1906c
|
||||
R ad4bcfdba61e39f0bb9e7693f91a62e0
|
||||
T +closed 97fdfc6b79833011fc0c506fe5e0985c0fb1906c
|
||||
U drh
|
||||
Z 3ce3ba9d696aa32fcf98b10717e459c0
|
||||
Z d67945416ae9c517bb5d46293eed5eb3
|
||||
|
@ -1 +1 @@
|
||||
93121d3097a43997af3c0de65bd9bd7663845fa2
|
||||
58704ed1f4cd78bb3b0c095ffd1626906a95a413
|
15
src/expr.c
15
src/expr.c
@ -2170,6 +2170,11 @@ void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int nReg){
|
||||
*/
|
||||
void sqlite3ExprCachePush(Parse *pParse){
|
||||
pParse->iCacheLevel++;
|
||||
#ifdef SQLITE_DEBUG
|
||||
if( pParse->db->flags & SQLITE_VdbeAddopTrace ){
|
||||
printf("PUSH to %d\n", pParse->iCacheLevel);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2183,6 +2188,11 @@ void sqlite3ExprCachePop(Parse *pParse, int N){
|
||||
assert( N>0 );
|
||||
assert( pParse->iCacheLevel>=N );
|
||||
pParse->iCacheLevel -= N;
|
||||
#ifdef SQLITE_DEBUG
|
||||
if( pParse->db->flags & SQLITE_VdbeAddopTrace ){
|
||||
printf("POP to %d\n", pParse->iCacheLevel);
|
||||
}
|
||||
#endif
|
||||
for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
|
||||
if( p->iReg && p->iLevel>pParse->iCacheLevel ){
|
||||
cacheEntryClear(pParse, p);
|
||||
@ -2277,6 +2287,11 @@ void sqlite3ExprCacheClear(Parse *pParse){
|
||||
int i;
|
||||
struct yColCache *p;
|
||||
|
||||
#if SQLITE_DEBUG
|
||||
if( pParse->db->flags & SQLITE_VdbeAddopTrace ){
|
||||
printf("CLEAR\n");
|
||||
}
|
||||
#endif
|
||||
for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
|
||||
if( p->iReg ){
|
||||
cacheEntryClear(pParse, p);
|
||||
|
@ -598,7 +598,6 @@ static void selectInnerLoop(
|
||||
/* If the destination is an EXISTS(...) expression, the actual
|
||||
** values returned by the SELECT are not required.
|
||||
*/
|
||||
sqlite3ExprCacheClear(pParse);
|
||||
sqlite3ExprCodeExprList(pParse, pEList, regResult,
|
||||
(eDest==SRT_Output)?SQLITE_ECEL_DUP:0);
|
||||
}
|
||||
@ -1565,7 +1564,7 @@ Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){
|
||||
Vdbe *sqlite3GetVdbe(Parse *pParse){
|
||||
Vdbe *v = pParse->pVdbe;
|
||||
if( v==0 ){
|
||||
v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db);
|
||||
v = pParse->pVdbe = sqlite3VdbeCreate(pParse);
|
||||
#ifndef SQLITE_OMIT_TRACE
|
||||
if( v ){
|
||||
sqlite3VdbeAddOp0(v, OP_Trace);
|
||||
|
@ -160,7 +160,7 @@ typedef struct VdbeOpList VdbeOpList;
|
||||
** Prototypes for the VDBE interface. See comments on the implementation
|
||||
** for a description of what each of these routines does.
|
||||
*/
|
||||
Vdbe *sqlite3VdbeCreate(sqlite3*);
|
||||
Vdbe *sqlite3VdbeCreate(Parse*);
|
||||
int sqlite3VdbeAddOp0(Vdbe*,int);
|
||||
int sqlite3VdbeAddOp1(Vdbe*,int,int);
|
||||
int sqlite3VdbeAddOp2(Vdbe*,int,int,int);
|
||||
|
@ -312,6 +312,9 @@ struct Vdbe {
|
||||
Mem **apArg; /* Arguments to currently executing user function */
|
||||
Mem *aColName; /* Column names to return */
|
||||
Mem *pResultSet; /* Pointer to an array of results */
|
||||
#ifdef SQLITE_DEBUG
|
||||
Parse *pParse; /* Parsing context used to create this Vdbe */
|
||||
#endif
|
||||
int nMem; /* Number of memory locations currently allocated */
|
||||
int nOp; /* Number of instructions in the program */
|
||||
int nOpAlloc; /* Number of slots allocated for aOp[] */
|
||||
|
@ -20,7 +20,8 @@
|
||||
/*
|
||||
** Create a new virtual database engine.
|
||||
*/
|
||||
Vdbe *sqlite3VdbeCreate(sqlite3 *db){
|
||||
Vdbe *sqlite3VdbeCreate(Parse *pParse){
|
||||
sqlite3 *db = pParse->db;
|
||||
Vdbe *p;
|
||||
p = sqlite3DbMallocZero(db, sizeof(Vdbe) );
|
||||
if( p==0 ) return 0;
|
||||
@ -32,6 +33,9 @@ Vdbe *sqlite3VdbeCreate(sqlite3 *db){
|
||||
p->pPrev = 0;
|
||||
db->pVdbe = p;
|
||||
p->magic = VDBE_MAGIC_INIT;
|
||||
#if SQLITE_DEBUG
|
||||
p->pParse = pParse;
|
||||
#endif
|
||||
return p;
|
||||
}
|
||||
|
||||
@ -151,6 +155,15 @@ int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){
|
||||
#endif
|
||||
#ifdef SQLITE_DEBUG
|
||||
if( p->db->flags & SQLITE_VdbeAddopTrace ){
|
||||
int jj, kk;
|
||||
Parse *pParse = p->pParse;
|
||||
for(jj=kk=0; jj<SQLITE_N_COLCACHE; jj++){
|
||||
struct yColCache *x = pParse->aColCache + jj;
|
||||
if( x->iLevel>pParse->iCacheLevel || x->iReg==0 ) continue;
|
||||
printf(" r[%d]={%d:%d}", x->iReg, x->iTable, x->iColumn);
|
||||
kk++;
|
||||
}
|
||||
if( kk ) printf("\n");
|
||||
sqlite3VdbePrintOp(0, i, &p->aOp[i]);
|
||||
test_addop_breakpoint();
|
||||
}
|
||||
|
@ -255,7 +255,7 @@ int sqlite3_blob_open(
|
||||
}
|
||||
}
|
||||
|
||||
pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(db);
|
||||
pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(pParse);
|
||||
assert( pBlob->pStmt || db->mallocFailed );
|
||||
if( pBlob->pStmt ){
|
||||
Vdbe *v = (Vdbe *)pBlob->pStmt;
|
||||
|
@ -663,9 +663,17 @@ void testset_main(void){
|
||||
speedtest1_exec("REPLACE INTO t3(a,b,c) SELECT a,b,c 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_end_test();
|
||||
|
||||
|
||||
n = sz/5;
|
||||
speedtest1_begin_test(300, "%d four-ways joins", n);
|
||||
speedtest1_begin_test(310, "%d four-ways joins", n);
|
||||
speedtest1_exec("BEGIN");
|
||||
speedtest1_prepare(
|
||||
"SELECT t1.c FROM t1, t2, t3, t4\n"
|
||||
|
Loading…
x
Reference in New Issue
Block a user