]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Use sqliteVdbeOp3 instead of sqliteVdbeChangeP3 where applicable. (CVS 1266)
authordrh <drh@noemail.net>
Sun, 22 Feb 2004 20:05:00 +0000 (20:05 +0000)
committerdrh <drh@noemail.net>
Sun, 22 Feb 2004 20:05:00 +0000 (20:05 +0000)
FossilOrigin-Name: 51f1e8f7539596b33bc3365ec8f34041602d049c

manifest
manifest.uuid
src/build.c
src/expr.c
src/insert.c
src/pragma.c
src/select.c
src/update.c
src/vdbe.h
src/vdbeaux.c
src/where.c

index 56ffe640a46d2b2944583304afc05fbc8e7975b2..b5890749320a2898290d29152086aca04bf56dd1 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Code\scleanup\sin\sbuild.c.\s(CVS\s1265)
-D 2004-02-22T18:56:49
+C Use\ssqliteVdbeOp3\sinstead\sof\ssqliteVdbeChangeP3\swhere\sapplicable.\s(CVS\s1266)
+D 2004-02-22T20:05:01
 F Makefile.in cfd75c46b335881999333a9e4b982fa8491f200b
 F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -27,16 +27,16 @@ F src/auth.c 4fa3b05bd19445d1c474d6751c4a508d6ea0abe1
 F src/btree.c 0a40efb01fa3a431a16d8604f603431d8c9cebfa
 F src/btree.h 41cb3ff6ebc3f6da2d0a074e39ff8c7a2287469f
 F src/btree_rb.c 32b2cb4285c0fbd53b89de021637b63d52257e54
-F src/build.c dbeef48d1f6f134d8a3de9f9bb6928812c3fbfee
+F src/build.c 85dee2c7d23f618b9c5384091df00cbf64cce527
 F src/copy.c 391ce142f6b1faa093867ecee134f61a5028a9af
 F src/date.c 3025642cee50d5c41aef4a22cbc41aa7e543c922
 F src/delete.c 8e2ff752bf485906effcc64f267cdd7227463567
 F src/encode.c 9e70ea1e4e746f23f18180949e94f1bb1c2220d3
-F src/expr.c 86eaf80e4d893ba184afc965a53a8dffda209ad4
+F src/expr.c 61b71ce2e93b0faca39db9e9c06e9a089d25a04f
 F src/func.c a2265f29e6a286203c9dfeb835d9a50439617805
 F src/hash.c 9b56ef3b291e25168f630d5643a4264ec011c70e
 F src/hash.h 3247573ab95b9dd90bcca0307a75d9a16da1ccc7
-F src/insert.c ad2902c171d23b92e2b350db2da86e36062e044b
+F src/insert.c c59f59fb461ad7f8939df289915669c04632edba
 F src/main.c 0f77633b37540fabd45e68c5137f32f4cd99470a
 F src/md5.c fe4f9c9c6f71dfc26af8da63e4d04489b1430565
 F src/os.c f5fc4954725b2fcd852979f2746085fe8ca27710
@@ -44,10 +44,10 @@ F src/os.h 250a3789be609adfee5c5aa20137ce8683276f24
 F src/pager.c 29ddad4dd454f0aaa98e2bcd327710ab9f02f833
 F src/pager.h 82332878799280145639a48d88cdb4058925e3f6
 F src/parse.y 023720cb8c3bef74e51738bca78335d0dc6d2cfd
-F src/pragma.c a8d43661193ba3114da787f43969d0a34f0ed07c
+F src/pragma.c 621d319580e9e23712ec232e8be1786cdae06b36
 F src/printf.c f201a5a316afc474d29d51e07501536e8998194d
 F src/random.c 775913e0b7fbd6295d21f12a7bd35b46387c44b2
-F src/select.c 9a41dace754f0dab5e991e402c05fa3c24d04f19
+F src/select.c 902000034e44817e2822d72870c15eff842dea9e
 F src/shell.c c3d3404fa82bb0808444fda9884d1bb572fd18b9
 F src/sqlite.h.in 64f016cd5ce190643a0f47760188fdf4e0b2227e
 F src/sqliteInt.h a3e8f422803abf1e6ba07e15ffe5070a50f8b5e5
@@ -59,14 +59,14 @@ F src/test3.c 30985ebdfaf3ee1462a9b0652d3efbdc8d9798f5
 F src/test4.c dcbbbb382626fd466a7c46907f74db35fc8bad64
 F src/tokenize.c 6676b946fd8825b67ab52140af4fdc57a70bda48
 F src/trigger.c a9927b57c865b6f3df3fb5e40c9824d722660ded
-F src/update.c e6eed1a4a429cc28f57533365c72293794c904cf
+F src/update.c 4c50328ebc127852bde8e2950eb8933234802c21
 F src/util.c 122bc174f6c8c2eb6a9127d9f13c4c74f83b85e4
 F src/vacuum.c d9e80c2b36ee1f623dbf1bdf3cedad24a23f87ac
 F src/vdbe.c af187d86cb1bcc1ead227245350d1693c28c77a2
-F src/vdbe.h b1b22ffca48f593d375fd846c583679d49c2e5c9
+F src/vdbe.h ac987945e4dd6f987bca534c6005899f089fc270
 F src/vdbeInt.h b40ff02ce39fd076e6ff3369e19c1bbfe1986682
-F src/vdbeaux.c 88ebe3aa963478f3cee9fb6e3d8ca9db1bafacb2
-F src/where.c 6ac293e94aa3e662ec74f6b48d2ef5e341a30cdd
+F src/vdbeaux.c e2cdd1ab63604a390612c73e26bdd2ef910e9438
+F src/where.c b58764861a96bab3f1d294200f9e53519b92c274
 F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
 F test/attach.test ba8261d38da6b6a7d4f78ec543c548c4418582ef
 F test/attach2.test ce61e6185b3cd891cc0e9a4c868fcc65eb92fc55
@@ -189,7 +189,7 @@ F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
 F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
 F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
-P 69aac043af7f93e7b3f036622c0ac9261cae1839
-R 31316bc136a82339f6877cfbb462944f
+P 9211e14cf81f4de125bad246d8a289786f2854aa
+R 77ff7dbcb5fd6ddb4e286234c013c859
 U drh
-Z c273a71cca2efed399051894b17dbdca
+Z 751f59f1e75cd541f38cd5d5979c86ff
index 0bf02868ab2ad11b5f36337e4994ac391d4dc8e4..ec8fcee41fada7861b3d918e4982e25cee37b971 100644 (file)
@@ -1 +1 @@
-9211e14cf81f4de125bad246d8a289786f2854aa
\ No newline at end of file
+51f1e8f7539596b33bc3365ec8f34041602d049c
\ No newline at end of file
index 934ea57c9c5bd119e83ba5789b419ddfab3ce86a..d367e402134f317499c4b541c5b0a66f8180a3c7 100644 (file)
@@ -23,7 +23,7 @@
 **     ROLLBACK
 **     PRAGMA
 **
-** $Id: build.c,v 1.173 2004/02/22 18:56:49 drh Exp $
+** $Id: build.c,v 1.174 2004/02/22 20:05:01 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -928,24 +928,16 @@ void sqliteEndTable(Parse *pParse, Token *pEnd, Select *pSelect){
     if( v==0 ) return;
     if( p->pSelect==0 ){
       /* A regular table */
-      sqliteVdbeAddOp(v, OP_CreateTable, 0, p->iDb);
-      sqliteVdbeChangeP3(v, -1, (char *)&p->tnum, P3_POINTER);
+      sqliteVdbeOp3(v, OP_CreateTable, 0, p->iDb, (char*)&p->tnum, P3_POINTER);
     }else{
       /* A view */
       sqliteVdbeAddOp(v, OP_Integer, 0, 0);
     }
     p->tnum = 0;
     sqliteVdbeAddOp(v, OP_Pull, 1, 0);
-    sqliteVdbeAddOp(v, OP_String, 0, 0);
-    if( p->pSelect==0 ){
-      sqliteVdbeChangeP3(v, -1, "table", P3_STATIC);
-    }else{
-      sqliteVdbeChangeP3(v, -1, "view", P3_STATIC);
-    }
-    sqliteVdbeAddOp(v, OP_String, 0, 0);
-    sqliteVdbeChangeP3(v, -1, p->zName, 0);
-    sqliteVdbeAddOp(v, OP_String, 0, 0);
-    sqliteVdbeChangeP3(v, -1, p->zName, 0);
+    sqliteVdbeOp3(v, OP_String, 0, 0, p->pSelect==0?"table":"view", P3_STATIC);
+    sqliteVdbeOp3(v, OP_String, 0, 0, p->zName, 0);
+    sqliteVdbeOp3(v, OP_String, 0, 0, p->zName, 0);
     sqliteVdbeAddOp(v, OP_Dup, 4, 0);
     sqliteVdbeAddOp(v, OP_String, 0, 0);
     if( pSelect ){
@@ -1133,12 +1125,12 @@ int sqliteViewGetColumnNames(Parse *pParse, Table *pTable){
 */
 static void sqliteViewResetColumnNames(Table *pTable){
   int i;
-  if( pTable==0 || pTable->pSelect==0 ) return;
-  if( pTable->nCol==0 ) return;
-  for(i=0; i<pTable->nCol; i++){
-    sqliteFree(pTable->aCol[i].zName);
-    sqliteFree(pTable->aCol[i].zDflt);
-    sqliteFree(pTable->aCol[i].zType);
+  Column *pCol;
+  assert( pTable!=0 && pTable->pSelect!=0 );
+  for(i=0, pCol=pTable->aCol; i<pTable->nCol; i++, pCol++){
+    sqliteFree(pCol->zName);
+    sqliteFree(pCol->zDflt);
+    sqliteFree(pCol->zType);
   }
   sqliteFree(pTable->aCol);
   pTable->aCol = 0;
@@ -1700,19 +1692,17 @@ void sqliteCreateIndex(
       sqliteOpenMasterTable(v, isTemp);
     }
     sqliteVdbeAddOp(v, OP_NewRecno, 0, 0);
-    sqliteVdbeAddOp(v, OP_String, 0, 0);
-    sqliteVdbeChangeP3(v, -1, "index", P3_STATIC);
-    sqliteVdbeAddOp(v, OP_String, 0, 0);
-    sqliteVdbeChangeP3(v, -1, pIndex->zName, strlen(pIndex->zName));
-    sqliteVdbeAddOp(v, OP_String, 0, 0);
-    sqliteVdbeChangeP3(v, -1, pTab->zName, 0);
-    addr = sqliteVdbeAddOp(v, OP_CreateIndex, 0, isTemp);
-    sqliteVdbeChangeP3(v, addr, (char*)&pIndex->tnum, P3_POINTER);
+    sqliteVdbeOp3(v, OP_String, 0, 0, "index", P3_STATIC);
+    sqliteVdbeOp3(v, OP_String, 0, 0, pIndex->zName, 0);
+    sqliteVdbeOp3(v, OP_String, 0, 0, pTab->zName, 0);
+    sqliteVdbeOp3(v, OP_CreateIndex, 0, isTemp,(char*)&pIndex->tnum,P3_POINTER);
     pIndex->tnum = 0;
     if( pTable ){
-      sqliteVdbeAddOp(v, OP_Dup, 0, 0);
-      sqliteVdbeAddOp(v, OP_Integer, isTemp, 0);
-      sqliteVdbeAddOp(v, OP_OpenWrite, 1, 0);
+      sqliteVdbeCode(v,
+          OP_Dup,       0,      0,
+          OP_Integer,   isTemp, 0,
+          OP_OpenWrite, 1,      0,
+      0);
     }
     addr = sqliteVdbeAddOp(v, OP_String, 0, 0);
     if( pStart && pEnd ){
@@ -1723,8 +1713,7 @@ void sqliteCreateIndex(
     sqliteVdbeAddOp(v, OP_PutIntKey, 0, 0);
     if( pTable ){
       sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
-      sqliteVdbeAddOp(v, OP_OpenRead, 2, pTab->tnum);
-      sqliteVdbeChangeP3(v, -1, pTab->zName, 0);
+      sqliteVdbeOp3(v, OP_OpenRead, 2, pTab->tnum, pTab->zName, 0);
       lbl2 = sqliteVdbeMakeLabel(v);
       sqliteVdbeAddOp(v, OP_Rewind, 2, lbl2);
       lbl1 = sqliteVdbeAddOp(v, OP_Recno, 2, 0);
@@ -1738,8 +1727,8 @@ void sqliteCreateIndex(
       }
       sqliteVdbeAddOp(v, OP_MakeIdxKey, pIndex->nColumn, 0);
       if( db->file_format>=4 ) sqliteAddIdxKeyType(v, pIndex);
-      sqliteVdbeAddOp(v, OP_IdxPut, 1, pIndex->onError!=OE_None);
-      sqliteVdbeChangeP3(v, -1, "indexed columns are not unique", P3_STATIC);
+      sqliteVdbeOp3(v, OP_IdxPut, 1, pIndex->onError!=OE_None,
+                      "indexed columns are not unique", P3_STATIC);
       sqliteVdbeAddOp(v, OP_Next, 2, lbl1);
       sqliteVdbeResolveLabel(v, lbl2);
       sqliteVdbeAddOp(v, OP_Close, 2, 0);
index 3daa2b20c38aea2940c3f47213ea4b8f353ec70e..7b96ad3f9051ac559eaf7347ed76a10b77220382 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains routines used for analyzing expressions and
 ** for generating VDBE code that evaluates expressions in SQLite.
 **
-** $Id: expr.c,v 1.110 2004/02/22 18:40:57 drh Exp $
+** $Id: expr.c,v 1.111 2004/02/22 20:05:01 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -717,9 +717,10 @@ int sqliteExprResolveIds(
             case TK_FLOAT:
             case TK_INTEGER:
             case TK_STRING: {
-              int addr = sqliteVdbeAddOp(v, OP_SetInsert, iSet, 0);
+              int addr;
               assert( pE2->token.z );
-              sqliteVdbeChangeP3(v, addr, pE2->token.z, pE2->token.n);
+              addr = sqliteVdbeOp3(v, OP_SetInsert, iSet, 0,
+                                  pE2->token.z, pE2->token.n);
               sqliteVdbeDequoteP3(v, addr);
               break;
             }
@@ -1166,8 +1167,7 @@ void sqliteExprCode(Parse *pParse, Expr *pExpr){
       for(i=0; i<nExpr; i++){
         sqliteExprCode(pParse, pList->a[i].pExpr);
       }
-      sqliteVdbeAddOp(v, OP_Function, nExpr, 0);
-      sqliteVdbeChangeP3(v, -1, (char*)pDef, P3_POINTER);
+      sqliteVdbeOp3(v, OP_Function, nExpr, 0, (char*)pDef, P3_POINTER);
       break;
     }
     case TK_SELECT: {
@@ -1257,15 +1257,13 @@ void sqliteExprCode(Parse *pParse, Expr *pExpr){
       if( pExpr->iColumn == OE_Rollback ||
          pExpr->iColumn == OE_Abort ||
          pExpr->iColumn == OE_Fail ){
-         char * msg = sqliteStrNDup(pExpr->token.z, pExpr->token.n);
-         sqliteVdbeAddOp(v, OP_Halt, SQLITE_CONSTRAINT, pExpr->iColumn);
-         sqliteDequote(msg);
-         sqliteVdbeChangeP3(v, -1, msg, 0);
-         sqliteFree(msg);
+         sqliteVdbeOp3(v, OP_Halt, SQLITE_CONSTRAINT, pExpr->iColumn,
+                           pExpr->token.z, pExpr->token.n);
+         sqliteVdbeDequoteP3(v, -1);
       } else {
          assert( pExpr->iColumn == OE_Ignore );
-         sqliteVdbeAddOp(v, OP_Goto, 0, pParse->trigStack->ignoreJump);
-         sqliteVdbeChangeP3(v, -1, "(IGNORE jump)", 0);
+         sqliteVdbeOp3(v, OP_Goto, 0, pParse->trigStack->ignoreJump,
+                           "(IGNORE jump)", 0);
       }
     }
     break;
index 679502e65ae14d2ec2cfe7a189be11c1e6eb1ad1..9f3a747efb84ee82a96c6b435c27aaa59dd4a9a2 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains C code routines that are called by the parser
 ** to handle INSERT statements in SQLite.
 **
-** $Id: insert.c,v 1.92 2004/02/20 22:53:39 rdc Exp $
+** $Id: insert.c,v 1.93 2004/02/22 20:05:01 drh Exp $
 */
 #include "sqliteInt.h"
 
@@ -331,12 +331,11 @@ void sqliteInsert(
   if( !row_triggers_exist ){
     base = pParse->nTab;
     sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
-    sqliteVdbeAddOp(v, OP_OpenWrite, base, pTab->tnum);
-    sqliteVdbeChangeP3(v, -1, pTab->zName, P3_STATIC);
+    sqliteVdbeOp3(v, OP_OpenWrite, base, pTab->tnum, pTab->zName, P3_STATIC);
     for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){
       sqliteVdbeAddOp(v, OP_Integer, pIdx->iDb, 0);
-      sqliteVdbeAddOp(v, OP_OpenWrite, idx+base, pIdx->tnum);
-      sqliteVdbeChangeP3(v, -1, pIdx->zName, P3_STATIC);
+      sqliteVdbeOp3(v, OP_OpenWrite, idx+base, pIdx->tnum,
+                       pIdx->zName, P3_STATIC);
     }
     pParse->nTab += idx;
   }
@@ -391,8 +390,7 @@ void sqliteInsert(
         }
       }
       if( pColumn && j>=pColumn->nId ){
-        sqliteVdbeAddOp(v, OP_String, 0, 0);
-        sqliteVdbeChangeP3(v, -1, pTab->aCol[i].zDflt, P3_STATIC);
+        sqliteVdbeOp3(v, OP_String, 0, 0, pTab->aCol[i].zDflt, P3_STATIC);
       }else if( useTempTable ){
         sqliteVdbeAddOp(v, OP_Column, srcTab, j); 
       }else if( pSelect ){
@@ -417,12 +415,11 @@ void sqliteInsert(
   if( row_triggers_exist && !isView ){
     base = pParse->nTab;
     sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
-    sqliteVdbeAddOp(v, OP_OpenWrite, base, pTab->tnum);
-    sqliteVdbeChangeP3(v, -1, pTab->zName, P3_STATIC);
+    sqliteVdbeOp3(v, OP_OpenWrite, base, pTab->tnum, pTab->zName, P3_STATIC);
     for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){
       sqliteVdbeAddOp(v, OP_Integer, pIdx->iDb, 0);
-      sqliteVdbeAddOp(v, OP_OpenWrite, idx+base, pIdx->tnum);
-      sqliteVdbeChangeP3(v, -1, pIdx->zName, P3_STATIC);
+      sqliteVdbeOp3(v, OP_OpenWrite, idx+base, pIdx->tnum,
+                       pIdx->zName, P3_STATIC);
     }
     pParse->nTab += idx;
   }
@@ -472,8 +469,7 @@ void sqliteInsert(
         }
       }
       if( pColumn && j>=pColumn->nId ){
-        sqliteVdbeAddOp(v, OP_String, 0, 0);
-        sqliteVdbeChangeP3(v, -1, pTab->aCol[i].zDflt, P3_STATIC);
+        sqliteVdbeOp3(v, OP_String, 0, 0, pTab->aCol[i].zDflt, P3_STATIC);
       }else if( useTempTable ){
         sqliteVdbeAddOp(v, OP_Column, srcTab, j); 
       }else if( pSelect ){
@@ -542,8 +538,7 @@ void sqliteInsert(
   ** Return the number of rows inserted.
   */
   if( db->flags & SQLITE_CountRows ){
-    sqliteVdbeAddOp(v, OP_ColumnName, 0, 1);
-    sqliteVdbeChangeP3(v, -1, "rows inserted", P3_STATIC);
+    sqliteVdbeOp3(v, OP_ColumnName, 0, 1, "rows inserted", P3_STATIC);
     sqliteVdbeAddOp(v, OP_MemLoad, iCntMem, 0);
     sqliteVdbeAddOp(v, OP_Callback, 1, 0);
   }
@@ -699,8 +694,7 @@ void sqliteGenerateConstraintChecks(
         break;
       }
       case OE_Replace: {
-        sqliteVdbeAddOp(v, OP_String, 0, 0);
-        sqliteVdbeChangeP3(v, -1, pTab->aCol[i].zDflt, P3_STATIC);
+        sqliteVdbeOp3(v, OP_String, 0, 0, pTab->aCol[i].zDflt, P3_STATIC);
         sqliteVdbeAddOp(v, OP_Push, nCol-i, 0);
         break;
       }
@@ -742,8 +736,8 @@ void sqliteGenerateConstraintChecks(
       case OE_Rollback:
       case OE_Abort:
       case OE_Fail: {
-        sqliteVdbeAddOp(v, OP_Halt, SQLITE_CONSTRAINT, onError);
-        sqliteVdbeChangeP3(v, -1, "PRIMARY KEY must be unique", P3_STATIC);
+        sqliteVdbeOp3(v, OP_Halt, SQLITE_CONSTRAINT, onError,
+                         "PRIMARY KEY must be unique", P3_STATIC);
         break;
       }
       case OE_Replace: {
@@ -840,8 +834,7 @@ void sqliteGenerateConstraintChecks(
         }
         strcpy(&zErrMsg[n1], 
             pIdx->nColumn>1 ? " are not unique" : " is not unique");
-        sqliteVdbeAddOp(v, OP_Halt, SQLITE_CONSTRAINT, onError);
-        sqliteVdbeChangeP3(v, -1, sqliteStrDup(zErrMsg), P3_DYNAMIC);
+        sqliteVdbeOp3(v, OP_Halt, SQLITE_CONSTRAINT, onError, zErrMsg, 0);
         break;
       }
       case OE_Ignore: {
index c350018f3b4420cfb5da052f2e0965666f28ccd9..d9cf6354aeedd90849754fe80345e430426e0d7b 100644 (file)
@@ -11,7 +11,7 @@
 *************************************************************************
 ** This file contains code used to implement the PRAGMA command.
 **
-** $Id: pragma.c,v 1.17 2004/02/21 14:00:29 drh Exp $
+** $Id: pragma.c,v 1.18 2004/02/22 20:05:01 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -106,12 +106,11 @@ static int flagPragma(Parse *pParse, const char *zLeft, const char *zRight){
       sqlite *db = pParse->db;
       Vdbe *v;
       if( strcmp(zLeft,zRight)==0 && (v = sqliteGetVdbe(pParse))!=0 ){
-        sqliteVdbeAddOp(v, OP_ColumnName, 0, 1);
-        sqliteVdbeChangeP3(v, -1, aPragma[i].zName, P3_STATIC);
-        sqliteVdbeAddOp(v, OP_ColumnName, 1, 0);
-        sqliteVdbeChangeP3(v, -1, "boolean", P3_STATIC);
-        sqliteVdbeAddOp(v, OP_Integer, (db->flags & aPragma[i].mask)!=0, 0);
-        sqliteVdbeAddOp(v, OP_Callback, 1, 0);
+        sqliteVdbeOp3(v, OP_ColumnName, 0, 1, aPragma[i].zName, P3_STATIC);
+        sqliteVdbeOp3(v, OP_ColumnName, 1, 0, "boolean", P3_STATIC);
+        sqliteVdbeCode(v, OP_Integer, (db->flags & aPragma[i].mask)!=0, 0,
+                          OP_Callback, 1, 0,
+                          0);
       }else if( getBoolean(zRight) ){
         db->flags |= aPragma[i].mask;
       }else{
@@ -358,14 +357,12 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
       sqliteViewGetColumnNames(pParse, pTab);
       for(i=0; i<pTab->nCol; i++){
         sqliteVdbeAddOp(v, OP_Integer, i, 0);
-        sqliteVdbeAddOp(v, OP_String, 0, 0);
-        sqliteVdbeChangeP3(v, -1, pTab->aCol[i].zName, P3_STATIC);
-        sqliteVdbeAddOp(v, OP_String, 0, 0);
-        sqliteVdbeChangeP3(v, -1, 
-           pTab->aCol[i].zType ? pTab->aCol[i].zType : "numeric", P3_STATIC);
+        sqliteVdbeOp3(v, OP_String, 0, 0, pTab->aCol[i].zName, 0);
+        sqliteVdbeOp3(v, OP_String, 0, 0,
+           pTab->aCol[i].zType ? pTab->aCol[i].zType : "numeric", 0);
         sqliteVdbeAddOp(v, OP_Integer, pTab->aCol[i].notNull, 0);
-        sqliteVdbeAddOp(v, OP_String, 0, 0);
-        sqliteVdbeChangeP3(v, -1, pTab->aCol[i].zDflt, P3_STATIC);
+        sqliteVdbeOp3(v, OP_String, 0, 0,
+           pTab->aCol[i].zDflt, P3_STATIC);
         sqliteVdbeAddOp(v, OP_Integer, pTab->aCol[i].isPrimKey, 0);
         sqliteVdbeAddOp(v, OP_Callback, 6, 0);
       }
@@ -389,9 +386,8 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
         int cnum = pIdx->aiColumn[i];
         sqliteVdbeAddOp(v, OP_Integer, i, 0);
         sqliteVdbeAddOp(v, OP_Integer, cnum, 0);
-        sqliteVdbeAddOp(v, OP_String, 0, 0);
         assert( pTab->nCol>cnum );
-        sqliteVdbeChangeP3(v, -1, pTab->aCol[cnum].zName, P3_STATIC);
+        sqliteVdbeOp3(v, OP_String, 0, 0, pTab->aCol[cnum].zName, 0);
         sqliteVdbeAddOp(v, OP_Callback, 3, 0);
       }
     }
@@ -416,8 +412,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
       sqliteVdbeAddOpList(v, ArraySize(indexListPreface), indexListPreface);
       while(pIdx){
         sqliteVdbeAddOp(v, OP_Integer, i, 0);
-        sqliteVdbeAddOp(v, OP_String, 0, 0);
-        sqliteVdbeChangeP3(v, -1, pIdx->zName, P3_STATIC);
+        sqliteVdbeOp3(v, OP_String, 0, 0, pIdx->zName, 0);
         sqliteVdbeAddOp(v, OP_Integer, pIdx->onError!=OE_None, 0);
         sqliteVdbeAddOp(v, OP_Callback, 3, 0);
         ++i;
@@ -450,13 +445,10 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
         for(j=0; j<pFK->nCol; j++){
           sqliteVdbeAddOp(v, OP_Integer, i, 0);
           sqliteVdbeAddOp(v, OP_Integer, j, 0);
-          sqliteVdbeAddOp(v, OP_String, 0, 0);
-          sqliteVdbeChangeP3(v, -1, pFK->zTo, P3_STATIC);
-          sqliteVdbeAddOp(v, OP_String, 0, 0);
-          sqliteVdbeChangeP3(v, -1, pTab->aCol[pFK->aCol[j].iFrom].zName,
-                             P3_STATIC);
-          sqliteVdbeAddOp(v, OP_String, 0, 0);
-          sqliteVdbeChangeP3(v, -1, pFK->aCol[j].zCol, P3_STATIC);
+          sqliteVdbeOp3(v, OP_String, 0, 0, pFK->zTo, 0);
+          sqliteVdbeOp3(v, OP_String, 0, 0,
+                           pTab->aCol[pFK->aCol[j].iFrom].zName, 0);
+          sqliteVdbeOp3(v, OP_String, 0, 0, pFK->aCol[j].zCol, 0);
           sqliteVdbeAddOp(v, OP_Callback, 5, 0);
         }
         ++i;
@@ -478,11 +470,9 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
       if( db->aDb[i].pBt==0 ) continue;
       assert( db->aDb[i].zName!=0 );
       sqliteVdbeAddOp(v, OP_Integer, i, 0);
-      sqliteVdbeAddOp(v, OP_String, 0, 0);
-      sqliteVdbeChangeP3(v, -1, db->aDb[i].zName, P3_STATIC);
-      sqliteVdbeAddOp(v, OP_String, 0, 0);
-      sqliteVdbeChangeP3(v, -1, sqliteBtreeGetFilename(db->aDb[i].pBt),
-           P3_STATIC);
+      sqliteVdbeOp3(v, OP_String, 0, 0, db->aDb[i].zName, 0);
+      sqliteVdbeOp3(v, OP_String, 0, 0,
+           sqliteBtreeGetFilename(db->aDb[i].pBt), 0);
       sqliteVdbeAddOp(v, OP_Callback, 3, 0);
     }
   }else
@@ -633,13 +623,11 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
 
         if( pTab->pIndex==0 ) continue;
         sqliteVdbeAddOp(v, OP_Integer, i, 0);
-        sqliteVdbeAddOp(v, OP_OpenRead, 1, pTab->tnum);
-        sqliteVdbeChangeP3(v, -1, pTab->zName, P3_STATIC);
+        sqliteVdbeOp3(v, OP_OpenRead, 1, pTab->tnum, pTab->zName, 0);
         for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
           if( pIdx->tnum==0 ) continue;
           sqliteVdbeAddOp(v, OP_Integer, pIdx->iDb, 0);
-          sqliteVdbeAddOp(v, OP_OpenRead, j+2, pIdx->tnum);
-          sqliteVdbeChangeP3(v, -1, pIdx->zName, P3_STATIC);
+          sqliteVdbeOp3(v, OP_OpenRead, j+2, pIdx->tnum, pIdx->zName, 0);
         }
         sqliteVdbeAddOp(v, OP_Integer, 0, 0);
         sqliteVdbeAddOp(v, OP_MemStore, 1, 1);
index 149eecae12a86a7287b3f4f4d2ccf84241a0cc48..1a8886686a1177278cd18da68238017f9a5aacb5 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains C code routines that are called by the parser
 ** to handle SELECT statements in SQLite.
 **
-** $Id: select.c,v 1.157 2004/02/20 14:50:58 drh Exp $
+** $Id: select.c,v 1.158 2004/02/22 20:05:01 drh Exp $
 */
 #include "sqliteInt.h"
 
@@ -338,9 +338,7 @@ static void pushOntoSorter(Parse *pParse, Vdbe *v, ExprList *pOrderBy){
     sqliteExprCode(pParse, pOrderBy->a[i].pExpr);
   }
   zSortOrder[pOrderBy->nExpr] = 0;
-  sqliteVdbeAddOp(v, OP_SortMakeKey, pOrderBy->nExpr, 0);
-  sqliteVdbeChangeP3(v, -1, zSortOrder, strlen(zSortOrder));
-  sqliteFree(zSortOrder);
+  sqliteVdbeOp3(v, OP_SortMakeKey, pOrderBy->nExpr, 0, zSortOrder, P3_DYNAMIC);
   sqliteVdbeAddOp(v, OP_SortPut, 0, 0);
 }
 
@@ -363,8 +361,7 @@ void sqliteAddKeyType(Vdbe *v, ExprList *pEList){
     zType[i] = sqliteExprType(pEList->a[i].pExpr)==SQLITE_SO_NUM ? 'n' : 't';
   }
   zType[i] = 0;
-  sqliteVdbeChangeP3(v, -1, zType, nColumn);
-  sqliteFree(zType);
+  sqliteVdbeChangeP3(v, -1, zType, P3_DYNAMIC);
 }
 
 /*
@@ -672,8 +669,7 @@ static void generateColumnTypes(
         zType = "NUMERIC";
       }
     }
-    sqliteVdbeAddOp(v, OP_ColumnName, i + pEList->nExpr, 0);
-    sqliteVdbeChangeP3(v, -1, zType, 0);
+    sqliteVdbeOp3(v, OP_ColumnName, i + pEList->nExpr, 0, zType, 0);
   }
 }
 
@@ -704,8 +700,7 @@ static void generateColumnNames(
     if( p==0 ) continue;
     if( pEList->a[i].zName ){
       char *zName = pEList->a[i].zName;
-      sqliteVdbeAddOp(v, OP_ColumnName, i, p2);
-      sqliteVdbeChangeP3(v, -1, zName, strlen(zName));
+      sqliteVdbeOp3(v, OP_ColumnName, i, p2, zName, 0);
       continue;
     }
     if( p->op==TK_COLUMN && pTabList ){
@@ -723,8 +718,7 @@ static void generateColumnNames(
         zCol = pTab->aCol[iCol].zName;
       }
       if( !shortNames && !fullNames && p->span.z && p->span.z[0] ){
-        int addr = sqliteVdbeAddOp(v,OP_ColumnName, i, p2);
-        sqliteVdbeChangeP3(v, -1, p->span.z, p->span.n);
+        int addr = sqliteVdbeOp3(v,OP_ColumnName, i, p2, p->span.z, p->span.n);
         sqliteVdbeCompressSpace(v, addr);
       }else if( fullNames || (!shortNames && pTabList->nSrc>1) ){
         char *zName = 0;
@@ -733,23 +727,18 @@ static void generateColumnNames(
         zTab = pTabList->a[j].zAlias;
         if( fullNames || zTab==0 ) zTab = pTab->zName;
         sqliteSetString(&zName, zTab, ".", zCol, 0);
-        sqliteVdbeAddOp(v, OP_ColumnName, i, p2);
-        sqliteVdbeChangeP3(v, -1, zName, strlen(zName));
-        sqliteFree(zName);
+        sqliteVdbeOp3(v, OP_ColumnName, i, p2, zName, P3_DYNAMIC);
       }else{
-        sqliteVdbeAddOp(v, OP_ColumnName, i, p2);
-        sqliteVdbeChangeP3(v, -1, zCol, 0);
+        sqliteVdbeOp3(v, OP_ColumnName, i, p2, zCol, 0);
       }
     }else if( p->span.z && p->span.z[0] ){
-      int addr = sqliteVdbeAddOp(v,OP_ColumnName, i, p2);
-      sqliteVdbeChangeP3(v, -1, p->span.z, p->span.n);
+      int addr = sqliteVdbeOp3(v,OP_ColumnName, i, p2, p->span.z, p->span.n);
       sqliteVdbeCompressSpace(v, addr);
     }else{
       char zName[30];
       assert( p->op!=TK_COLUMN || pTabList==0 );
       sprintf(zName, "column%d", i+1);
-      sqliteVdbeAddOp(v, OP_ColumnName, i, p2);
-      sqliteVdbeChangeP3(v, -1, zName, strlen(zName));
+      sqliteVdbeOp3(v, OP_ColumnName, i, p2, zName, 0);
     }
   }
 }
@@ -1910,15 +1899,13 @@ static int simpleMinMaxQuery(Parse *pParse, Select *p, int eDest, int iParm){
   base = p->pSrc->a[0].iCursor;
   computeLimitRegisters(pParse, p);
   sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
-  sqliteVdbeAddOp(v, OP_OpenRead, base, pTab->tnum);
-  sqliteVdbeChangeP3(v, -1, pTab->zName, P3_STATIC);
+  sqliteVdbeOp3(v, OP_OpenRead, base, pTab->tnum, pTab->zName, 0);
   cont = sqliteVdbeMakeLabel(v);
   if( pIdx==0 ){
     sqliteVdbeAddOp(v, seekOp, base, 0);
   }else{
     sqliteVdbeAddOp(v, OP_Integer, pIdx->iDb, 0);
-    sqliteVdbeAddOp(v, OP_OpenRead, base+1, pIdx->tnum);
-    sqliteVdbeChangeP3(v, -1, pIdx->zName, P3_STATIC);
+    sqliteVdbeOp3(v, OP_OpenRead, base+1, pIdx->tnum, pIdx->zName, P3_STATIC);
     sqliteVdbeAddOp(v, seekOp, base+1, 0);
     sqliteVdbeAddOp(v, OP_IdxRecno, base+1, 0);
     sqliteVdbeAddOp(v, OP_Close, base+1, 0);
@@ -2277,8 +2264,7 @@ int sqliteSelect(
     for(i=0; i<pParse->nAgg; i++){
       FuncDef *pFunc;
       if( (pFunc = pParse->aAgg[i].pFunc)!=0 && pFunc->xFinalize!=0 ){
-        sqliteVdbeAddOp(v, OP_AggInit, 0, i);
-        sqliteVdbeChangeP3(v, -1, (char*)pFunc, P3_POINTER);
+        sqliteVdbeOp3(v, OP_AggInit, 0, i, (char*)pFunc, P3_POINTER);
       }
     }
     if( pGroupBy==0 ){
index 41077e1522d2a74e6fd373e5732fe5d51188cc81..a3d8811de3cc5ae3a1cfb7710f5c622637d2bc74 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains C code routines that are called by the parser
 ** to handle UPDATE statements.
 **
-** $Id: update.c,v 1.69 2004/02/20 22:53:39 rdc Exp $
+** $Id: update.c,v 1.70 2004/02/22 20:05:02 drh Exp $
 */
 #include "sqliteInt.h"
 
@@ -437,8 +437,7 @@ void sqliteUpdate(
   ** Return the number of rows that were changed.
   */
   if( db->flags & SQLITE_CountRows && !pParse->trigStack ){
-    sqliteVdbeAddOp(v, OP_ColumnName, 0, 1);
-    sqliteVdbeChangeP3(v, -1, "rows updated", P3_STATIC);
+    sqliteVdbeOp3(v, OP_ColumnName, 0, 1, "rows updated", P3_STATIC);
     sqliteVdbeAddOp(v, OP_Callback, 1, 0);
   }
 
index e90979a3cdcb22f3c6e21050dc6229f7b12a1694..f39de1cff7eb25e768a1f2ff3b33da2ec90254b4 100644 (file)
@@ -15,7 +15,7 @@
 ** or VDBE.  The VDBE implements an abstract machine that runs a
 ** simple program to access and modify the underlying database.
 **
-** $Id: vdbe.h,v 1.70 2004/02/21 13:31:11 drh Exp $
+** $Id: vdbe.h,v 1.71 2004/02/22 20:05:02 drh Exp $
 */
 #ifndef _SQLITE_VDBE_H_
 #define _SQLITE_VDBE_H_
@@ -87,6 +87,8 @@ typedef struct VdbeOpList VdbeOpList;
 Vdbe *sqliteVdbeCreate(sqlite*);
 void sqliteVdbeCreateCallback(Vdbe*, int*);
 int sqliteVdbeAddOp(Vdbe*,int,int,int);
+int sqliteVdbeOp3(Vdbe*,int,int,int,const char *zP3,int);
+int sqliteVdbeCode(Vdbe*,...);
 int sqliteVdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp);
 void sqliteVdbeChangeP1(Vdbe*, int addr, int P1);
 void sqliteVdbeChangeP2(Vdbe*, int addr, int P2);
index f7ba9a77ab22f2abb6ec4786af162b0a456b5db9..6254aa881d88b5af0de2ea5449dcbb1c20365b90 100644 (file)
@@ -73,6 +73,7 @@ void sqliteVdbeTrace(Vdbe *p, FILE *trace){
 */
 int sqliteVdbeAddOp(Vdbe *p, int op, int p1, int p2){
   int i;
+  VdbeOp *pOp;
 
   i = p->nOp;
   p->nOp++;
@@ -89,20 +90,50 @@ int sqliteVdbeAddOp(Vdbe *p, int op, int p1, int p2){
     p->aOp = aNew;
     memset(&p->aOp[oldSize], 0, (p->nOpAlloc-oldSize)*sizeof(Op));
   }
-  p->aOp[i].opcode = op;
-  p->aOp[i].p1 = p1;
+  pOp = &p->aOp[i];
+  pOp->opcode = op;
+  pOp->p1 = p1;
   if( p2<0 && (-1-p2)<p->nLabel && p->aLabel[-1-p2]>=0 ){
     p2 = p->aLabel[-1-p2];
   }
-  p->aOp[i].p2 = p2;
-  p->aOp[i].p3 = 0;
-  p->aOp[i].p3type = P3_NOTUSED;
+  pOp->p2 = p2;
+  pOp->p3 = 0;
+  pOp->p3type = P3_NOTUSED;
 #ifndef NDEBUG
   if( sqlite_vdbe_addop_trace ) sqliteVdbePrintOp(0, i, &p->aOp[i]);
 #endif
   return i;
 }
 
+/*
+** Add an opcode that includes the p3 value.
+*/
+int sqliteVdbeOp3(Vdbe *p, int op, int p1, int p2, const char *zP3, int p3type){
+  int addr = sqliteVdbeAddOp(p, op, p1, p2);
+  sqliteVdbeChangeP3(p, addr, zP3, p3type);
+  return addr;
+}
+
+/*
+** Add multiple opcodes.  The list is terminated by an opcode of 0.
+*/
+int sqliteVdbeCode(Vdbe *p, ...){
+  int addr;
+  va_list ap;
+  int opcode, p1, p2;
+  va_start(ap, p);
+  addr = p->nOp;
+  while( (opcode = va_arg(ap,int))!=0 ){
+    p1 = va_arg(ap,int);
+    p2 = va_arg(ap,int);
+    sqliteVdbeAddOp(p, opcode, p1, p2);
+  }
+  va_end(ap);
+  return addr;
+}
+
+
+
 /*
 ** Create a new symbolic label for an instruction that has yet to be
 ** coded.  The symbolic label is really just a negative number.  The
index 5df3c070425c209d70fda9d5c4d6223db874e683..34195c6516b254d2bca78e8ec10dd85dd163d40f 100644 (file)
@@ -12,7 +12,7 @@
 ** This module contains C code that generates VDBE code used to process
 ** the WHERE clause of SQL statements.
 **
-** $Id: where.c,v 1.88 2004/02/22 18:40:57 drh Exp $
+** $Id: where.c,v 1.89 2004/02/22 20:05:02 drh Exp $
 */
 #include "sqliteInt.h"
 
@@ -669,18 +669,17 @@ WhereInfo *sqliteWhereBegin(
   */
   for(i=0; i<pTabList->nSrc; i++){
     Table *pTab;
+    Index *pIx;
 
     pTab = pTabList->a[i].pTab;
     if( pTab->isTransient || pTab->pSelect ) continue;
     sqliteVdbeAddOp(v, OP_Integer, pTab->iDb, 0);
-    sqliteVdbeAddOp(v, OP_OpenRead, pTabList->a[i].iCursor, pTab->tnum);
-    sqliteVdbeChangeP3(v, -1, pTab->zName, P3_STATIC);
+    sqliteVdbeOp3(v, OP_OpenRead, pTabList->a[i].iCursor, pTab->tnum,
+                     pTab->zName, P3_STATIC);
     sqliteCodeVerifySchema(pParse, pTab->iDb);
-    if( pWInfo->a[i].pIdx!=0 ){
-      sqliteVdbeAddOp(v, OP_Integer, pWInfo->a[i].pIdx->iDb, 0);
-      sqliteVdbeAddOp(v, OP_OpenRead,
-                      pWInfo->a[i].iCur, pWInfo->a[i].pIdx->tnum);
-      sqliteVdbeChangeP3(v, -1, pWInfo->a[i].pIdx->zName, P3_STATIC);
+    if( (pIx = pWInfo->a[i].pIdx)!=0 ){
+      sqliteVdbeAddOp(v, OP_Integer, pIx->iDb, 0);
+      sqliteVdbeOp3(v, OP_OpenRead, pWInfo->a[i].iCur, pIx->tnum, pIx->zName,0);
     }
   }