1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-07 02:42:48 +03:00

Add comments to unused P3 fields of selected instructions when NDEBUG is

not defined.  This makes VDBE program dumps more readable during debugging. (CVS 1973)

FossilOrigin-Name: 4871c77f8fce36ff230e1f026f4e4e49492515e9
This commit is contained in:
drh
2004-09-19 02:15:24 +00:00
parent 344737f60a
commit ad6d94607f
13 changed files with 91 additions and 58 deletions

View File

@@ -1,5 +1,5 @@
C Merge\sthe\sListPush\sand\sListPop\sVDBE\sopcodes\sinto\sContextPush\sand\sContextPop.\s(CVS\s1972) C Add\scomments\sto\sunused\sP3\sfields\sof\sselected\sinstructions\swhen\sNDEBUG\sis\nnot\sdefined.\s\sThis\smakes\sVDBE\sprogram\sdumps\smore\sreadable\sduring\sdebugging.\s(CVS\s1973)
D 2004-09-19T00:50:21 D 2004-09-19T02:15:25
F Makefile.in 76f8790c727cdbe2e1bef19c9c72b6e5da9cb9d8 F Makefile.in 76f8790c727cdbe2e1bef19c9c72b6e5da9cb9d8
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457 F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -32,12 +32,12 @@ F src/btree.c 470e00b08688f065c2e62a6dcd3fb18880e8e309
F src/btree.h 94dfec0a1722d33359b23e7e310f2b64ffedf029 F src/btree.h 94dfec0a1722d33359b23e7e310f2b64ffedf029
F src/build.c c5ecf114af4ebc2963a03142b6bd6f2284ee35fc F src/build.c c5ecf114af4ebc2963a03142b6bd6f2284ee35fc
F src/date.c eb8d5fa1a6d5cfc09031c8852d10ff742a94b15b F src/date.c eb8d5fa1a6d5cfc09031c8852d10ff742a94b15b
F src/delete.c e887f44aae1e33da1643df58abe86cd9cde45ad1 F src/delete.c d862b383a9abc0b79f4588783c2619fe52d74ea7
F src/expr.c a6d95632ef9c6ad18fade504baa6d5a7225c9fee F src/expr.c 4a674ed1c91967096aa73af2d0b6f3b93313fc98
F src/func.c 1fbc5256639586573fd0e70814d6dcd8bc10afc1 F src/func.c 1fbc5256639586573fd0e70814d6dcd8bc10afc1
F src/hash.c a97721a55440b7bea31ffe471bb2f6b4123cddd5 F src/hash.c a97721a55440b7bea31ffe471bb2f6b4123cddd5
F src/hash.h 1b0c445e1c89ff2aaad9b4605ba61375af001e84 F src/hash.h 1b0c445e1c89ff2aaad9b4605ba61375af001e84
F src/insert.c 1f2d34d6762279e5e63dfb4a60772d30a5525b00 F src/insert.c 2c10c001f62cde92e9517ec7516b6584519754d1
F src/legacy.c d58ea507bce885298a2c8c3cbb0f4bff5d47830b F src/legacy.c d58ea507bce885298a2c8c3cbb0f4bff5d47830b
F src/main.c 82a952ef3e5f7bacaa1b20060d0588f8767a6774 F src/main.c 82a952ef3e5f7bacaa1b20060d0588f8767a6774
F src/md5.c 7ae1c39044b95de2f62e066f47bb1deb880a1070 F src/md5.c 7ae1c39044b95de2f62e066f47bb1deb880a1070
@@ -55,12 +55,12 @@ F src/pager.c db8f6cb80798091fcff95c1f86873381fbfefee6
F src/pager.h 67739fe649f33be55dba522ca8a9cc4e42d14f71 F src/pager.h 67739fe649f33be55dba522ca8a9cc4e42d14f71
F src/parse.y 9389af67bd49b8e5c9d2968b3315a30565b4a200 F src/parse.y 9389af67bd49b8e5c9d2968b3315a30565b4a200
F src/pragma.c 5fb6647fda4c95edb08447a505e6c98c041e5b31 F src/pragma.c 5fb6647fda4c95edb08447a505e6c98c041e5b31
F src/printf.c a8b92a3bcb4e9cae8066aea39a7b57b566255509 F src/printf.c 2dfe86e6fcdc83ca55d2f9f4d9771428329eb0c5
F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3 F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3
F src/select.c 5f60fc164a6a72ec26eb8221df4ba45aa8ab6f56 F src/select.c 13a4e6d0ca2bce8be60e26a499060524fef2e28c
F src/shell.c 4f1a2760ced81c829defb47b0a3b61ffec61b604 F src/shell.c 4f1a2760ced81c829defb47b0a3b61ffec61b604
F src/sqlite.h.in e29a526593b806f148017ed8bada760ada84cf2f F src/sqlite.h.in e29a526593b806f148017ed8bada760ada84cf2f
F src/sqliteInt.h c63aad21da12f12193cfa46a820c51cc837f5048 F src/sqliteInt.h a7d334b2aca08de0c1cace3eebfabc129279c26f
F src/table.c 8168c6e824009f8485bff79fc60ea8fea6829b10 F src/table.c 8168c6e824009f8485bff79fc60ea8fea6829b10
F src/tclsqlite.c 0302e3f42f015d132d1291f3388c06e86c24a008 F src/tclsqlite.c 0302e3f42f015d132d1291f3388c06e86c24a008
F src/test1.c 1305825c29575ee55a1c8b98a191669fd78b6287 F src/test1.c 1305825c29575ee55a1c8b98a191669fd78b6287
@@ -69,8 +69,8 @@ F src/test3.c 5b5b0f3d11b097399c1054fff73d8f3711092301
F src/test4.c 7c6b9fc33dd1f3f93c7f1ee6e5e6d016afa6c1df F src/test4.c 7c6b9fc33dd1f3f93c7f1ee6e5e6d016afa6c1df
F src/test5.c b001fa7f1b9e2dc5c2331de62fc641b5ab2bd7a1 F src/test5.c b001fa7f1b9e2dc5c2331de62fc641b5ab2bd7a1
F src/tokenize.c 418ef7ba1149603a30dcf0057e04a3ea0e99edbe F src/tokenize.c 418ef7ba1149603a30dcf0057e04a3ea0e99edbe
F src/trigger.c b42ae6ca49e3b935c37b6845fd2aadd2cab78c08 F src/trigger.c 3591b88baac4253c93733e34e4d1d74c549fe8a8
F src/update.c 0e00300763d2ce0dbd6a0598882a5039580b225e F src/update.c 7157084216c4b02a23cdb23eb6d246aa9034fa4d
F src/utf.c 328890099db492dda5620ee5f924e244c6e57ff7 F src/utf.c 328890099db492dda5620ee5f924e244c6e57ff7
F src/util.c f9b661a3b80a1469777771776a59a5f0e2f193fc F src/util.c f9b661a3b80a1469777771776a59a5f0e2f193fc
F src/vacuum.c 257de36230cb988842f66eb08dc6c0250b8e05f3 F src/vacuum.c 257de36230cb988842f66eb08dc6c0250b8e05f3
@@ -78,9 +78,9 @@ F src/vdbe.c 0542852785220807feb02b9dee1150ac2e592c8d
F src/vdbe.h 067ca8d6750ba4f69a50284765e5883dee860181 F src/vdbe.h 067ca8d6750ba4f69a50284765e5883dee860181
F src/vdbeInt.h 6017100adff362b8dfa37a69e3f1431f084bfa5b F src/vdbeInt.h 6017100adff362b8dfa37a69e3f1431f084bfa5b
F src/vdbeapi.c c7208bb89fc4efc605e20328099a540175e2dae6 F src/vdbeapi.c c7208bb89fc4efc605e20328099a540175e2dae6
F src/vdbeaux.c f312d91a594240831748a8949fdd446a6b2b3bb1 F src/vdbeaux.c 3b67c86338d6a39a173704ffd9e09ae9ceda6601
F src/vdbemem.c ef9ac7d32acfe4bce5c5b408b1294c8d9e0cdb56 F src/vdbemem.c ef9ac7d32acfe4bce5c5b408b1294c8d9e0cdb56
F src/where.c 12e214870c84546858ddb9f121165a1fbfce6811 F src/where.c 5d573333c07f259c8d3b8423d82ba774b78b63a9
F test/all.test 929bfa932b55e75c96fe2203f7650ba451c1862c F test/all.test 929bfa932b55e75c96fe2203f7650ba451c1862c
F test/attach.test feb2ce54e78688df4c84553416d5aec3b2a0112e F test/attach.test feb2ce54e78688df4c84553416d5aec3b2a0112e
F test/attach2.test 32ca2c1a5a347a7404219a11f9f84739a63d2582 F test/attach2.test 32ca2c1a5a347a7404219a11f9f84739a63d2582
@@ -100,7 +100,7 @@ F test/capi2.test 53e3f399074d5654f26d55b32ccaca7b5b619933
F test/capi3.test 9258ca75fc98d89477015dcd70aa3d2757b142b8 F test/capi3.test 9258ca75fc98d89477015dcd70aa3d2757b142b8
F test/capi3b.test 5b6a66f9f295f79f443b5d3f33187fa5ef6cf336 F test/capi3b.test 5b6a66f9f295f79f443b5d3f33187fa5ef6cf336
F test/collate1.test f79736d2ebf5492167ee4d1f4ab4c09dda776b03 F test/collate1.test f79736d2ebf5492167ee4d1f4ab4c09dda776b03
F test/collate2.test c1a3b41f761b28853c5696037f92de928f93233b F test/collate2.test 12fd658d8f5106a8a5c8a77d66919d8c89394036
F test/collate3.test e60b428e07ec945492ba90ff1c895902ee3a8a50 F test/collate3.test e60b428e07ec945492ba90ff1c895902ee3a8a50
F test/collate4.test 4a7902b7560686af11d6cace717d876c6937b7ef F test/collate4.test 4a7902b7560686af11d6cace717d876c6937b7ef
F test/collate5.test 1dd5f0f508c46667f9d4606c7950c414b0bdc0d5 F test/collate5.test 1dd5f0f508c46667f9d4606c7950c414b0bdc0d5
@@ -247,7 +247,7 @@ F www/tclsqlite.tcl 560ecd6a916b320e59f2917317398f3d59b7cc25
F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9 F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9
F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
P 5d3b3a96bcc459a797bd723025f2d38efcfeb6fa P eb9b501ad8b0fa0fd63a67ece05fe142d6a19114
R 391c503e9b746bc6f666f540b502155a R c7e379274e1d8907f42f1545aa184a86
U drh U drh
Z c87ee13fbd413eb4f4e5b30f3144edca Z adae3eae9c54320f47912f08aac3df30

View File

@@ -1 +1 @@
eb9b501ad8b0fa0fd63a67ece05fe142d6a19114 4871c77f8fce36ff230e1f026f4e4e49492515e9

View File

@@ -12,7 +12,7 @@
** This file contains C code routines that are called by the parser ** This file contains C code routines that are called by the parser
** to handle DELETE FROM statements. ** to handle DELETE FROM statements.
** **
** $Id: delete.c,v 1.80 2004/09/06 17:24:13 drh Exp $ ** $Id: delete.c,v 1.81 2004/09/19 02:15:25 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
@@ -49,6 +49,21 @@ int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){
return 0; return 0;
} }
/*
** Generate code that will open a table for reading.
*/
void sqlite3OpenTableForReading(
Vdbe *v, /* Generate code into this VDBE */
int iCur, /* The cursor number of the table */
Table *pTab /* The table to be opened */
){
sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0);
sqlite3VdbeAddOp(v, OP_OpenRead, iCur, pTab->tnum);
VdbeComment((v, "# %s", pTab->zName));
sqlite3VdbeAddOp(v, OP_SetNumColumns, iCur, pTab->nCol);
}
/* /*
** Process a DELETE FROM statement. ** Process a DELETE FROM statement.
*/ */
@@ -166,9 +181,7 @@ void sqlite3DeleteFrom(
int endOfLoop = sqlite3VdbeMakeLabel(v); int endOfLoop = sqlite3VdbeMakeLabel(v);
int addr; int addr;
if( !isView ){ if( !isView ){
sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0); sqlite3OpenTableForReading(v, iCur, pTab);
sqlite3VdbeAddOp(v, OP_OpenRead, iCur, pTab->tnum);
sqlite3VdbeAddOp(v, OP_SetNumColumns, iCur, pTab->nCol);
} }
sqlite3VdbeAddOp(v, OP_Rewind, iCur, sqlite3VdbeCurrentAddr(v)+2); sqlite3VdbeAddOp(v, OP_Rewind, iCur, sqlite3VdbeCurrentAddr(v)+2);
addr = sqlite3VdbeAddOp(v, OP_AddImm, 1, 0); addr = sqlite3VdbeAddOp(v, OP_AddImm, 1, 0);
@@ -232,9 +245,7 @@ void sqlite3DeleteFrom(
addr = sqlite3VdbeAddOp(v, OP_ListRead, 0, end); addr = sqlite3VdbeAddOp(v, OP_ListRead, 0, end);
sqlite3VdbeAddOp(v, OP_Dup, 0, 0); sqlite3VdbeAddOp(v, OP_Dup, 0, 0);
if( !isView ){ if( !isView ){
sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0); sqlite3OpenTableForReading(v, iCur, pTab);
sqlite3VdbeAddOp(v, OP_OpenRead, iCur, pTab->tnum);
sqlite3VdbeAddOp(v, OP_SetNumColumns, iCur, pTab->nCol);
} }
sqlite3VdbeAddOp(v, OP_MoveGe, iCur, 0); sqlite3VdbeAddOp(v, OP_MoveGe, iCur, 0);
sqlite3VdbeAddOp(v, OP_Recno, iCur, 0); sqlite3VdbeAddOp(v, OP_Recno, iCur, 0);

View File

@@ -12,7 +12,7 @@
** This file contains routines used for analyzing expressions and ** This file contains routines used for analyzing expressions and
** for generating VDBE code that evaluates expressions in SQLite. ** for generating VDBE code that evaluates expressions in SQLite.
** **
** $Id: expr.c,v 1.162 2004/09/19 00:50:21 drh Exp $ ** $Id: expr.c,v 1.163 2004/09/19 02:15:25 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <ctype.h> #include <ctype.h>
@@ -241,7 +241,8 @@ void sqlite3ExprSpan(Expr *pExpr, Token *pLeft, Token *pRight){
assert( pRight!=0 ); assert( pRight!=0 );
assert( pLeft!=0 ); assert( pLeft!=0 );
if( !sqlite3_malloc_failed && pRight->z && pLeft->z ){ if( !sqlite3_malloc_failed && pRight->z && pLeft->z ){
if( pLeft->dyn==0 && pRight->dyn==0 ){ assert( pLeft->dyn==0 || pLeft->z[pLeft->n]==0 );
if( pLeft->z[pLeft->n]!=0 && pRight->dyn==0 ){
pExpr->span.z = pLeft->z; pExpr->span.z = pLeft->z;
pExpr->span.n = pRight->n + Addr(pRight->z) - Addr(pLeft->z); pExpr->span.n = pRight->n + Addr(pRight->z) - Addr(pLeft->z);
}else{ }else{
@@ -1241,6 +1242,7 @@ void sqlite3ExprCode(Parse *pParse, Expr *pExpr){
sqlite3VdbeAddOp(v, OP_AggGet, 0, pExpr->iAgg); sqlite3VdbeAddOp(v, OP_AggGet, 0, pExpr->iAgg);
}else if( pExpr->iColumn>=0 ){ }else if( pExpr->iColumn>=0 ){
sqlite3VdbeAddOp(v, OP_Column, pExpr->iTable, pExpr->iColumn); sqlite3VdbeAddOp(v, OP_Column, pExpr->iTable, pExpr->iColumn);
VdbeComment((v, "# %T", &pExpr->span));
}else{ }else{
sqlite3VdbeAddOp(v, OP_Recno, pExpr->iTable, 0); sqlite3VdbeAddOp(v, OP_Recno, pExpr->iTable, 0);
} }
@@ -1370,6 +1372,7 @@ void sqlite3ExprCode(Parse *pParse, Expr *pExpr){
} }
case TK_SELECT: { case TK_SELECT: {
sqlite3VdbeAddOp(v, OP_MemLoad, pExpr->iColumn, 0); sqlite3VdbeAddOp(v, OP_MemLoad, pExpr->iColumn, 0);
VdbeComment((v, "# load subquery result"));
break; break;
} }
case TK_IN: { case TK_IN: {
@@ -1469,20 +1472,20 @@ void sqlite3ExprCode(Parse *pParse, Expr *pExpr){
if( !pParse->trigStack ){ if( !pParse->trigStack ){
sqlite3ErrorMsg(pParse, sqlite3ErrorMsg(pParse,
"RAISE() may only be used within a trigger-program"); "RAISE() may only be used within a trigger-program");
pParse->nErr++;
return; return;
} }
if( pExpr->iColumn == OE_Rollback || if( pExpr->iColumn!=OE_Ignore ){
pExpr->iColumn == OE_Abort || assert( pExpr->iColumn==OE_Rollback ||
pExpr->iColumn == OE_Fail ){ pExpr->iColumn == OE_Abort ||
sqlite3VdbeOp3(v, OP_Halt, SQLITE_CONSTRAINT, pExpr->iColumn, pExpr->iColumn == OE_Fail );
pExpr->token.z, pExpr->token.n); sqlite3VdbeOp3(v, OP_Halt, SQLITE_CONSTRAINT, pExpr->iColumn,
sqlite3VdbeDequoteP3(v, -1); pExpr->token.z, pExpr->token.n);
sqlite3VdbeDequoteP3(v, -1);
} else { } else {
assert( pExpr->iColumn == OE_Ignore ); assert( pExpr->iColumn == OE_Ignore );
sqlite3VdbeAddOp(v, OP_ContextPop, 0, 0); sqlite3VdbeAddOp(v, OP_ContextPop, 0, 0);
sqlite3VdbeOp3(v, OP_Goto, 0, pParse->trigStack->ignoreJump, sqlite3VdbeAddOp(v, OP_Goto, 0, pParse->trigStack->ignoreJump);
"(IGNORE jump)", 0); VdbeComment((v, "# raise(IGNORE)"));
} }
} }
break; break;

View File

@@ -12,7 +12,7 @@
** This file contains C code routines that are called by the parser ** This file contains C code routines that are called by the parser
** to handle INSERT statements in SQLite. ** to handle INSERT statements in SQLite.
** **
** $Id: insert.c,v 1.117 2004/09/17 17:23:15 drh Exp $ ** $Id: insert.c,v 1.118 2004/09/19 02:15:26 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
@@ -1007,6 +1007,7 @@ void sqlite3OpenTableAndIndices(
assert( v!=0 ); assert( v!=0 );
sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0); sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0);
sqlite3VdbeAddOp(v, op, base, pTab->tnum); sqlite3VdbeAddOp(v, op, base, pTab->tnum);
VdbeComment((v, "# %s", pTab->zName));
sqlite3VdbeAddOp(v, OP_SetNumColumns, base, pTab->nCol); sqlite3VdbeAddOp(v, OP_SetNumColumns, base, pTab->nCol);
for(i=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ for(i=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
sqlite3VdbeAddOp(v, OP_Integer, pIdx->iDb, 0); sqlite3VdbeAddOp(v, OP_Integer, pIdx->iDb, 0);

View File

@@ -586,7 +586,9 @@ static int vxprintf(
break; break;
case etTOKEN: { case etTOKEN: {
Token *pToken = va_arg(ap, Token*); Token *pToken = va_arg(ap, Token*);
(*func)(arg, pToken->z, pToken->n); if( pToken && pToken->z ){
(*func)(arg, pToken->z, pToken->n);
}
length = width = 0; length = width = 0;
break; break;
} }

View File

@@ -12,7 +12,7 @@
** This file contains C code routines that are called by the parser ** This file contains C code routines that are called by the parser
** to handle SELECT statements in SQLite. ** to handle SELECT statements in SQLite.
** **
** $Id: select.c,v 1.208 2004/09/08 15:09:41 drh Exp $ ** $Id: select.c,v 1.209 2004/09/19 02:15:26 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
@@ -344,9 +344,11 @@ static void codeLimiter(
sqlite3VdbeAddOp(v, OP_Pop, nPop, 0); sqlite3VdbeAddOp(v, OP_Pop, nPop, 0);
} }
sqlite3VdbeAddOp(v, OP_Goto, 0, iContinue); sqlite3VdbeAddOp(v, OP_Goto, 0, iContinue);
VdbeComment((v, "# skip OFFSET records"));
} }
if( p->iLimit>=0 ){ if( p->iLimit>=0 ){
sqlite3VdbeAddOp(v, OP_MemIncr, p->iLimit, iBreak); sqlite3VdbeAddOp(v, OP_MemIncr, p->iLimit, iBreak);
VdbeComment((v, "# exit when LIMIT reached"));
} }
} }
@@ -415,6 +417,7 @@ static int selectInnerLoop(
sqlite3VdbeAddOp(v, OP_Distinct, distinct, sqlite3VdbeCurrentAddr(v)+3); sqlite3VdbeAddOp(v, OP_Distinct, distinct, sqlite3VdbeCurrentAddr(v)+3);
sqlite3VdbeAddOp(v, OP_Pop, pEList->nExpr+1, 0); sqlite3VdbeAddOp(v, OP_Pop, pEList->nExpr+1, 0);
sqlite3VdbeAddOp(v, OP_Goto, 0, iContinue); sqlite3VdbeAddOp(v, OP_Goto, 0, iContinue);
VdbeComment((v, "# skip indistinct records"));
sqlite3VdbeAddOp(v, OP_String8, 0, 0); sqlite3VdbeAddOp(v, OP_String8, 0, 0);
sqlite3VdbeAddOp(v, OP_PutStrKey, distinct, 0); sqlite3VdbeAddOp(v, OP_PutStrKey, distinct, 0);
if( pOrderBy==0 ){ if( pOrderBy==0 ){
@@ -1223,6 +1226,7 @@ static void computeLimitRegisters(Parse *pParse, Select *p){
if( v==0 ) return; if( v==0 ) return;
sqlite3VdbeAddOp(v, OP_Integer, -p->nLimit, 0); sqlite3VdbeAddOp(v, OP_Integer, -p->nLimit, 0);
sqlite3VdbeAddOp(v, OP_MemStore, iMem, 1); sqlite3VdbeAddOp(v, OP_MemStore, iMem, 1);
VdbeComment((v, "# LIMIT counter"));
p->iLimit = iMem; p->iLimit = iMem;
} }
if( p->nOffset>0 ){ if( p->nOffset>0 ){
@@ -1231,6 +1235,7 @@ static void computeLimitRegisters(Parse *pParse, Select *p){
if( v==0 ) return; if( v==0 ) return;
sqlite3VdbeAddOp(v, OP_Integer, -p->nOffset, 0); sqlite3VdbeAddOp(v, OP_Integer, -p->nOffset, 0);
sqlite3VdbeAddOp(v, OP_MemStore, iMem, 1); sqlite3VdbeAddOp(v, OP_MemStore, iMem, 1);
VdbeComment((v, "# OFFSET counter"));
p->iOffset = iMem; p->iOffset = iMem;
} }
} }
@@ -2107,9 +2112,7 @@ static int simpleMinMaxQuery(Parse *pParse, Select *p, int eDest, int iParm){
base = pSrc->a[0].iCursor; base = pSrc->a[0].iCursor;
computeLimitRegisters(pParse, p); computeLimitRegisters(pParse, p);
if( pSrc->a[0].pSelect==0 ){ if( pSrc->a[0].pSelect==0 ){
sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0); sqlite3OpenTableForReading(v, base, pTab);
sqlite3VdbeAddOp(v, OP_OpenRead, base, pTab->tnum);
sqlite3VdbeAddOp(v, OP_SetNumColumns, base, pTab->nCol);
} }
cont = sqlite3VdbeMakeLabel(v); cont = sqlite3VdbeMakeLabel(v);
if( pIdx==0 ){ if( pIdx==0 ){

View File

@@ -11,7 +11,7 @@
************************************************************************* *************************************************************************
** Internal interface definitions for SQLite. ** Internal interface definitions for SQLite.
** **
** @(#) $Id: sqliteInt.h,v 1.321 2004/09/08 20:13:05 drh Exp $ ** @(#) $Id: sqliteInt.h,v 1.322 2004/09/19 02:15:26 drh Exp $
*/ */
#ifndef _SQLITEINT_H_ #ifndef _SQLITEINT_H_
#define _SQLITEINT_H_ #define _SQLITEINT_H_
@@ -1263,6 +1263,7 @@ void sqlite3SelectDelete(Select*);
void sqlite3SelectUnbind(Select*); void sqlite3SelectUnbind(Select*);
Table *sqlite3SrcListLookup(Parse*, SrcList*); Table *sqlite3SrcListLookup(Parse*, SrcList*);
int sqlite3IsReadOnly(Parse*, Table*, int); int sqlite3IsReadOnly(Parse*, Table*, int);
void sqlite3OpenTableForReading(Vdbe*, int iCur, Table*);
void sqlite3DeleteFrom(Parse*, SrcList*, Expr*); void sqlite3DeleteFrom(Parse*, SrcList*, Expr*);
void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int); void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int);
WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, int, ExprList**); WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, int, ExprList**);

View File

@@ -760,7 +760,10 @@ int sqlite3CodeRowTrigger(
fire_this = 0; fire_this = 0;
} }
} }
/* FIX ME: Can we not omit the sqliteMalloc() and make pTriggerStack
** point to a stack variable?
*/
if( fire_this && (pTriggerStack = sqliteMalloc(sizeof(TriggerStack)))!=0 ){ if( fire_this && (pTriggerStack = sqliteMalloc(sizeof(TriggerStack)))!=0 ){
int endTrigger; int endTrigger;
SrcList dummyTablist; SrcList dummyTablist;

View File

@@ -12,7 +12,7 @@
** This file contains C code routines that are called by the parser ** This file contains C code routines that are called by the parser
** to handle UPDATE statements. ** to handle UPDATE statements.
** **
** $Id: update.c,v 1.88 2004/09/06 17:24:13 drh Exp $ ** $Id: update.c,v 1.89 2004/09/19 02:15:26 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
@@ -253,9 +253,7 @@ void sqlite3Update(
*/ */
sqlite3VdbeAddOp(v, OP_Dup, 0, 0); sqlite3VdbeAddOp(v, OP_Dup, 0, 0);
if( !isView ){ if( !isView ){
sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0); sqlite3OpenTableForReading(v, iCur, pTab);
sqlite3VdbeAddOp(v, OP_OpenRead, iCur, pTab->tnum);
sqlite3VdbeAddOp(v, OP_SetNumColumns, iCur, pTab->nCol);
} }
sqlite3VdbeAddOp(v, OP_MoveGe, iCur, 0); sqlite3VdbeAddOp(v, OP_MoveGe, iCur, 0);

View File

@@ -304,6 +304,21 @@ void sqlite3VdbeChangeP3(Vdbe *p, int addr, const char *zP3, int n){
} }
} }
#ifndef NDEBUG
/*
** Replace the P3 field of the most recently coded instruction with
** comment text.
*/
void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){
va_list ap;
assert( p->nOp>0 );
assert( p->aOp[p->nOp-1].p3==0 );
va_start(ap, zFormat);
sqlite3VdbeChangeP3(p, -1, sqlite3VMPrintf(zFormat, ap), P3_DYNAMIC);
va_end(ap);
}
#endif
/* /*
** If the P3 operand to the specified instruction appears ** If the P3 operand to the specified instruction appears
** to be a quoted string token, then this procedure removes ** to be a quoted string token, then this procedure removes

View File

@@ -12,7 +12,7 @@
** This module contains C code that generates VDBE code used to process ** This module contains C code that generates VDBE code used to process
** the WHERE clause of SQL statements. ** the WHERE clause of SQL statements.
** **
** $Id: where.c,v 1.113 2004/09/06 17:24:13 drh Exp $ ** $Id: where.c,v 1.114 2004/09/19 02:15:26 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
@@ -734,9 +734,7 @@ WhereInfo *sqlite3WhereBegin(
pTab = pTabList->a[i].pTab; pTab = pTabList->a[i].pTab;
if( pTab->isTransient || pTab->pSelect ) continue; if( pTab->isTransient || pTab->pSelect ) continue;
sqlite3VdbeAddOp(v, OP_Integer, pTab->iDb, 0); sqlite3OpenTableForReading(v, pTabList->a[i].iCursor, pTab);
sqlite3VdbeAddOp(v, OP_OpenRead, pTabList->a[i].iCursor, pTab->tnum);
sqlite3VdbeAddOp(v, OP_SetNumColumns, pTabList->a[i].iCursor, pTab->nCol);
sqlite3CodeVerifySchema(pParse, pTab->iDb); sqlite3CodeVerifySchema(pParse, pTab->iDb);
if( (pIx = pWInfo->a[i].pIdx)!=0 ){ if( (pIx = pWInfo->a[i].pIdx)!=0 ){
sqlite3VdbeAddOp(v, OP_Integer, pIx->iDb, 0); sqlite3VdbeAddOp(v, OP_Integer, pIx->iDb, 0);
@@ -763,6 +761,7 @@ WhereInfo *sqlite3WhereBegin(
pLevel->iLeftJoin = pParse->nMem++; pLevel->iLeftJoin = pParse->nMem++;
sqlite3VdbeAddOp(v, OP_String8, 0, 0); sqlite3VdbeAddOp(v, OP_String8, 0, 0);
sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1); sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1);
VdbeComment((v, "# init LEFT JOIN no-match flag"));
} }
pIdx = pLevel->pIdx; pIdx = pLevel->pIdx;
@@ -1141,6 +1140,7 @@ WhereInfo *sqlite3WhereBegin(
pLevel->top = sqlite3VdbeCurrentAddr(v); pLevel->top = sqlite3VdbeCurrentAddr(v);
sqlite3VdbeAddOp(v, OP_Integer, 1, 0); sqlite3VdbeAddOp(v, OP_Integer, 1, 0);
sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1); sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1);
VdbeComment((v, "# record LEFT JOIN hit"));
for(pTerm=aExpr, j=0; j<nExpr; j++, pTerm++){ for(pTerm=aExpr, j=0; j<nExpr; j++, pTerm++){
if( pTerm->p==0 ) continue; if( pTerm->p==0 ) continue;
if( (pTerm->prereqAll & loopMask)!=pTerm->prereqAll ) continue; if( (pTerm->prereqAll & loopMask)!=pTerm->prereqAll ) continue;

View File

@@ -12,7 +12,7 @@
# This file implements regression tests for SQLite library. The # This file implements regression tests for SQLite library. The
# focus of this script is page cache subsystem. # focus of this script is page cache subsystem.
# #
# $Id: collate2.test,v 1.2 2004/06/11 10:51:41 danielk1977 Exp $ # $Id: collate2.test,v 1.3 2004/09/19 02:15:26 drh Exp $
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
source $testdir/tester.tcl source $testdir/tester.tcl
@@ -602,7 +602,3 @@ do_test collate2-5.5 {
} {aa aa} } {aa aa}
finish_test finish_test