Compare commits

...

2 Commits

Author SHA1 Message Date
dan e8814cc83c Fix problems in the previous commit.
FossilOrigin-Name: 74ad80eb745c708bdbbbf24cbbbf50971e84182f
2017-01-21 16:21:24 +00:00
dan 0fbee29700 Add extra (somewhat inefficient) trace callbacks for triggers if SQLITE_TRACE_TRIGGER is defined.
FossilOrigin-Name: ffda1d1e1c858abd02f0c07b906cfac5ad075498
2017-01-21 15:58:42 +00:00
5 changed files with 65 additions and 10 deletions
+9 -9
View File
@@ -1,5 +1,5 @@
C In\sthe\skvtest.c\stest\sutility,\sreuse\sthe\sbuffer\sinto\swhich\sblobs\sare\sread,\nrather\sthan\sreallocating\sit\sfor\seach\srow.\s\sThis\sis\sa\scloser\smatch\sto\show\nother\stest\sprograms\swork,\sand\sthus\sprovides\sa\sbetter\scomparison.
D 2017-01-21T15:55:41.656
C Fix\sproblems\sin\sthe\sprevious\scommit.
D 2017-01-21T16:21:24.115
F Makefile.in 41bd4cad981487345c4a84081074bcdb876e4b2e
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da
@@ -391,7 +391,7 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
F src/resolve.c f9bc0de45a30a450da47b3766de00be89bf9be79
F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
F src/select.c 3856db523b942062bca8722ba03b61c324ff94d6
F src/shell.c 6095531aa900decdaa765e0f3993fba7153c92c1
F src/shell.c 0344f71dc008df2433ae10175f59ad432c428810
F src/sqlite.h.in e71655293c9bde26939496f3aac9d1821d2c07a2
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 8648034aa702469afb553231677306cc6492a1ae
@@ -457,9 +457,9 @@ F src/update.c b356b29d04c71f33c779f2cb557cf953819bdd7a
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
F src/util.c a88b0466fddf445ce752226d4698ca3faada620a
F src/vacuum.c 33c174b28886b2faf26e503b5a49a1c01a9b1c16
F src/vdbe.c c7add5978cb84ae3a7bcb16f8b56cb3bbdf04b7e
F src/vdbe.c 132f552033f72820c27a100861fa83254358cbcd
F src/vdbe.h b0866e4191f096f1c987a84b042c3599bdf5423b
F src/vdbeInt.h 281cb70332dc8b593b8c7afe776f3a2ba7d4255e
F src/vdbeInt.h 4cad10b68ed052104a997454540ea71ceb2888e1
F src/vdbeapi.c d6ebaa465f070eb1af8ba4e7b34583ece87bdd24
F src/vdbeaux.c 35c9a9908174e5a26c96d15e1f98214814a39147
F src/vdbeblob.c 824f360105b8cd43c2ec8c4611fd3b162a3a3eed
@@ -1547,7 +1547,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P 9d197a532349f4b1caf66bbed70ca46df86cb86f
R 2ba22a751baba0a74113cf71f6292807
U drh
Z 28f64e9f53e7fb024862aee0e897381f
P ffda1d1e1c858abd02f0c07b906cfac5ad075498
R c37bc6770e2789d7f8851d61fd232055
U dan
Z a07b3b8a92ddc391359da9de406f8455
+1 -1
View File
@@ -1 +1 @@
0d1ad13a296b22d6fe36879b56f99bd6af1acd3a
74ad80eb745c708bdbbbf24cbbbf50971e84182f
+17
View File
@@ -614,6 +614,7 @@ struct ShellState {
int autoExplain; /* Automatically turn on .explain mode */
int autoEQP; /* Run EXPLAIN QUERY PLAN prior to seach SQL stmt */
int statsOn; /* True to display memory stats before each finalize */
int vmstepsOn; /* Display VM steps before each finalize */
int scanstatsOn; /* True to display scan stats before each finalize */
int countChanges; /* True to display change counts */
int backslashOn; /* Resolve C-style \x escapes in SQL input text */
@@ -1997,6 +1998,12 @@ static int shell_exec(
display_stats(db, pArg, 0);
}
if( pArg && pArg->vmstepsOn && pStmt ){
int iCur = sqlite3_stmt_status(pStmt, SQLITE_STMTSTATUS_VM_STEP, 0);
FILE *out = pArg->traceOut ? pArg->traceOut : pArg->out;
raw_printf(out, "VM steps: %d\n", iCur);
}
/* print loop-counters if required */
if( pArg && pArg->scanstatsOn ){
display_scanstats(db, pArg);
@@ -5339,6 +5346,16 @@ static int do_meta_command(char *zLine, ShellState *p){
}
}else
if( c=='v' && strncmp(azArg[0], "vmsteps", n)==0 ){
if( nArg==2 ){
p->vmstepsOn = booleanValue(azArg[1]);
}else{
raw_printf(stderr, "Usage: .vmsteps ?on|off?\n");
rc = 1;
}
}else
#if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_WHERETRACE)
if( c=='w' && strncmp(azArg[0], "wheretrace", n)==0 ){
sqlite3WhereTrace = nArg>=2 ? booleanValue(azArg[1]) : 0xff;
+34
View File
@@ -960,6 +960,25 @@ case OP_Halt: {
p->nFrame--;
sqlite3VdbeSetChanges(db, p->nChange);
pcx = sqlite3VdbeFrameRestore(pFrame);
#ifdef SQLITE_TRACE_TRIGGER
if( (db->mTrace & SQLITE_TRACE_STMT) && aOp[0].p4.z ){
int nTotal = nVmStep - pFrame->nVmStep;
char *zTrace;
assert( nTotal>=0 );
assert( db->xTrace );
zTrace = sqlite3_mprintf("%.*s%s completed (VM steps: total=%d self=%d)",
p->nFrame, " :",
aOp[0].p4.z, nTotal, nVmStep - pFrame->nVmStepAdj
);
if( zTrace ){
(void)db->xTrace(SQLITE_TRACE_STMT, db->pTraceArg, 0, zTrace);
sqlite3_free(zTrace);
}
if( p->pFrame ){
p->pFrame->nVmStepAdj += nTotal;
}
}
#endif
lastRowid = db->lastRowid;
if( pOp->p2==OE_Ignore ){
/* Instruction pcx is the OP_Program that invoked the sub-program
@@ -5854,6 +5873,10 @@ case OP_Program: { /* jump */
pFrame->nDbChange = p->db->nChange;
assert( pFrame->pAuxData==0 );
pFrame->pAuxData = p->pAuxData;
#ifdef SQLITE_TRACE_TRIGGER
pFrame->nVmStep = nVmStep;
pFrame->nVmStepAdj = nVmStep;
#endif
p->pAuxData = 0;
p->nChange = 0;
p->pFrame = pFrame;
@@ -6889,6 +6912,17 @@ case OP_Init: { /* jump */
x(db->pTraceArg, z);
sqlite3_free(z);
}else
#endif
#ifdef SQLITE_TRACE_TRIGGER
if( p->pFrame ){
zTrace = sqlite3_mprintf("%.*s%s", p->nFrame-1,
" :", zTrace
);
if( zTrace ){
(void)db->xTrace(SQLITE_TRACE_STMT, db->pTraceArg, p, zTrace);
sqlite3_free(zTrace);
}
}else
#endif
{
(void)db->xTrace(SQLITE_TRACE_STMT, db->pTraceArg, p, zTrace);
+4
View File
@@ -175,6 +175,10 @@ struct VdbeFrame {
int nChildCsr; /* Number of cursors for child frame */
int nChange; /* Statement changes (Vdbe.nChange) */
int nDbChange; /* Value of db->nChange */
#ifdef SQLITE_TRACE_TRIGGER
int nVmStep; /* Value of nVmStep at start of program */
int nVmStepAdj; /* Adjusted for nested programs */
#endif
};
#define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))])