]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
More code cleanup and size reduction. (CVS 1256)
authordrh <drh@noemail.net>
Sat, 21 Feb 2004 13:31:09 +0000 (13:31 +0000)
committerdrh <drh@noemail.net>
Sat, 21 Feb 2004 13:31:09 +0000 (13:31 +0000)
FossilOrigin-Name: 8e3eda2a909bd80b2b14ace36ab44303750a4409

manifest
manifest.uuid
src/build.c
src/pragma.c
src/printf.c
src/sqliteInt.h
src/trigger.c
src/vdbe.h
src/vdbeaux.c

index a4fa0fad10d22f0cbe62f5007b7948994b787896..1ffc2dded7ecfe56dfaa3360b5ac8e6ab5bc97c9 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Enhance\sdate/time\sfunctions\sto\swork\swith\snegative\syears.\s\sTicket\s#617.\s(CVS\s1255)
-D 2004-02-21T03:28:18
+C More\scode\scleanup\sand\ssize\sreduction.\s(CVS\s1256)
+D 2004-02-21T13:31:10
 F Makefile.in cfd75c46b335881999333a9e4b982fa8491f200b
 F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -27,7 +27,7 @@ F src/auth.c c59ad0dab501888f8b1fccc25e2f5965d2265116
 F src/btree.c 0a40efb01fa3a431a16d8604f603431d8c9cebfa
 F src/btree.h 41cb3ff6ebc3f6da2d0a074e39ff8c7a2287469f
 F src/btree_rb.c 32b2cb4285c0fbd53b89de021637b63d52257e54
-F src/build.c e6d71a3babd1f523abdd806555be3430adbd69eb
+F src/build.c f6ef61a2b9524f5d1fd66a500747b6a5c114dd0f
 F src/copy.c 391ce142f6b1faa093867ecee134f61a5028a9af
 F src/date.c 6120c591cd905799318018cc67df53e9bdfaef28
 F src/delete.c 8e2ff752bf485906effcc64f267cdd7227463567
@@ -44,13 +44,13 @@ F src/os.h 250a3789be609adfee5c5aa20137ce8683276f24
 F src/pager.c 29ddad4dd454f0aaa98e2bcd327710ab9f02f833
 F src/pager.h 82332878799280145639a48d88cdb4058925e3f6
 F src/parse.y 226bbdba2dee362d4b1cacc424bd82f7740071ee
-F src/pragma.c fe677be978d8cae19f73272d52f91ba4b95af2da
-F src/printf.c 84e4ea4ba49cbbf930e95e82295127ad5843ae1f
+F src/pragma.c dab17a6093fc249c0faf93c7b65dccc056fec7fb
+F src/printf.c ef1838bd06246d5d323600dc592d337b1c0762b0
 F src/random.c 775913e0b7fbd6295d21f12a7bd35b46387c44b2
 F src/select.c 9a41dace754f0dab5e991e402c05fa3c24d04f19
 F src/shell.c c3d3404fa82bb0808444fda9884d1bb572fd18b9
 F src/sqlite.h.in 64f016cd5ce190643a0f47760188fdf4e0b2227e
-F src/sqliteInt.h d943f207ab70368e83722a4f1e30cfe01f6da23a
+F src/sqliteInt.h c647413de0ab8f6e70a1972126da6ed2a84fb5cc
 F src/table.c d845cb101b5afc1f7fea083c99e3d2fa7998d895
 F src/tclsqlite.c b84dafe3a8532ff534c36e96bd38880e4b9cedf3
 F src/test1.c 56e9a156df3ad5e4e98df776776e963effc727f7
@@ -58,14 +58,14 @@ F src/test2.c 75819b0f2c63c6a0fd6995445881f2eb94036996
 F src/test3.c 30985ebdfaf3ee1462a9b0652d3efbdc8d9798f5
 F src/test4.c dcbbbb382626fd466a7c46907f74db35fc8bad64
 F src/tokenize.c 6676b946fd8825b67ab52140af4fdc57a70bda48
-F src/trigger.c 0d4f05097be308ea440629d17fdf3fd2a7244eba
+F src/trigger.c a9927b57c865b6f3df3fb5e40c9824d722660ded
 F src/update.c e6eed1a4a429cc28f57533365c72293794c904cf
 F src/util.c 64995b5949a5d377629ffd2598747bc771cade1e
 F src/vacuum.c d9e80c2b36ee1f623dbf1bdf3cedad24a23f87ac
 F src/vdbe.c f14e8e2ef82cb8480394697c40644d70195598e5
-F src/vdbe.h b9f6f1b5f9d1bfceb8bda5e396877ba584c4519c
+F src/vdbe.h b1b22ffca48f593d375fd846c583679d49c2e5c9
 F src/vdbeInt.h b40ff02ce39fd076e6ff3369e19c1bbfe1986682
-F src/vdbeaux.c 9f8c7eeeeabd5c7b7fd10adb106212651c53796a
+F src/vdbeaux.c 2268af6441a55461ec80e5d8f57d77267cd46423
 F src/where.c 1302d728bd338c237e6a8282e4e3eadbbdf11e45
 F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
 F test/attach.test ba8261d38da6b6a7d4f78ec543c548c4418582ef
@@ -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 6954d2c3240459842be655b600c6b160e918e74a
-R 3b2fc592a58487f152d3f08ba1a44ce5
+P ffa971934867b6bbe943c004154d5f161e0ea697
+R 3a6c0549c38d90190c4b2bf7000765c4
 U drh
-Z 27734a3b760ca8def8dc98b0f2f23cfc
+Z dede23b0f1723cf1feddae3af208c31d
index ddf7c9dd7dd48b5a543fa4121ac9a3fa6c19b866..c88a3607040e7e142cf31071aefc09fe11616335 100644 (file)
@@ -1 +1 @@
-ffa971934867b6bbe943c004154d5f161e0ea697
\ No newline at end of file
+8e3eda2a909bd80b2b14ace36ab44303750a4409
\ No newline at end of file
index 4845004e36597216aef8e885ac94d9eeae922bfa..bc49327ae50bb12d4fa003d4de080b6a7fd7fc36 100644 (file)
@@ -23,7 +23,7 @@
 **     ROLLBACK
 **     PRAGMA
 **
-** $Id: build.c,v 1.170 2004/02/14 23:59:57 drh Exp $
+** $Id: build.c,v 1.171 2004/02/21 13:31:10 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -1274,7 +1274,7 @@ void sqliteDropTable(Parse *pParse, Token *pName, int isView){
   */
   v = sqliteGetVdbe(pParse);
   if( v ){
-    static VdbeOp dropTable[] = {
+    static VdbeOpList dropTable[] = {
       { OP_Rewind,     0, ADDR(8),  0},
       { OP_String,     0, 0,        0}, /* 1 */
       { OP_MemStore,   1, 1,        0},
@@ -1853,7 +1853,7 @@ void sqliteDropIndex(Parse *pParse, SrcList *pName){
   /* Generate code to remove the index and from the master table */
   v = sqliteGetVdbe(pParse);
   if( v ){
-    static VdbeOp dropIndex[] = {
+    static VdbeOpList dropIndex[] = {
       { OP_Rewind,     0, ADDR(9), 0}, 
       { OP_String,     0, 0,       0}, /* 1 */
       { OP_MemStore,   1, 1,       0},
index 18c8846277e02fe826f77a1703c387ec7537aed3..0da4d89c00af9d15ef8679d194cff8ce571a83c9 100644 (file)
@@ -11,7 +11,7 @@
 *************************************************************************
 ** This file contains code used to implement the PRAGMA command.
 **
-** $Id: pragma.c,v 1.15 2004/02/20 14:50:58 drh Exp $
+** $Id: pragma.c,v 1.16 2004/02/21 13:31:10 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -133,20 +133,21 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
   ** and a positive value means synchronous is on.
   */
   if( sqliteStrICmp(zLeft,"default_cache_size")==0 ){
-    static VdbeOp getCacheSize[] = {
+    static VdbeOpList getCacheSize[] = {
       { OP_ReadCookie,  0, 2,        0},
       { OP_AbsValue,    0, 0,        0},
       { OP_Dup,         0, 0,        0},
       { OP_Integer,     0, 0,        0},
       { OP_Ne,          0, 6,        0},
-      { OP_Integer,     MAX_PAGES,0, 0},
+      { OP_Integer,     0, 0,        0},  /* 5 */
       { OP_ColumnName,  0, 1,        "cache_size"},
       { OP_Callback,    1, 0,        0},
     };
+    int addr;
     if( pRight->z==pLeft->z ){
-      sqliteVdbeAddOpList(v, ArraySize(getCacheSize), getCacheSize);
+      addr = sqliteVdbeAddOpList(v, ArraySize(getCacheSize), getCacheSize);
+      sqliteVdbeChangeP1(v, addr+5, MAX_PAGES);
     }else{
-      int addr;
       int size = atoi(zRight);
       if( size<0 ) size = -size;
       sqliteBeginWriteOperation(pParse, 0, 0);
@@ -177,7 +178,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
   ** N should be a positive integer.
   */
   if( sqliteStrICmp(zLeft,"cache_size")==0 ){
-    static VdbeOp getCacheSize[] = {
+    static VdbeOpList getCacheSize[] = {
       { OP_ColumnName,  0, 1,        "cache_size"},
       { OP_Callback,    1, 0,        0},
     };
@@ -215,7 +216,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
   ** zero, but with a write performance penalty.  The default mode is NORMAL.
   */
   if( sqliteStrICmp(zLeft,"default_synchronous")==0 ){
-    static VdbeOp getSync[] = {
+    static VdbeOpList getSync[] = {
       { OP_ColumnName,  0, 1,        "synchronous"},
       { OP_ReadCookie,  0, 3,        0},
       { OP_Dup,         0, 0,        0},
@@ -268,7 +269,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
   ** opened.
   */
   if( sqliteStrICmp(zLeft,"synchronous")==0 ){
-    static VdbeOp getSync[] = {
+    static VdbeOpList getSync[] = {
       { OP_ColumnName,  0, 1,        "synchronous"},
       { OP_Callback,    1, 0,        0},
     };
@@ -346,7 +347,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
     Table *pTab;
     pTab = sqliteFindTable(db, zRight, 0);
     if( pTab ){
-      static VdbeOp tableInfoPreface[] = {
+      static VdbeOpList tableInfoPreface[] = {
         { OP_ColumnName,  0, 0,       "cid"},
         { OP_ColumnName,  1, 0,       "name"},
         { OP_ColumnName,  2, 0,       "type"},
@@ -378,7 +379,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
     Table *pTab;
     pIdx = sqliteFindIndex(db, zRight, 0);
     if( pIdx ){
-      static VdbeOp tableInfoPreface[] = {
+      static VdbeOpList tableInfoPreface[] = {
         { OP_ColumnName,  0, 0,       "seqno"},
         { OP_ColumnName,  1, 0,       "cid"},
         { OP_ColumnName,  2, 1,       "name"},
@@ -408,7 +409,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
     }
     if( pTab && pIdx ){
       int i = 0; 
-      static VdbeOp indexListPreface[] = {
+      static VdbeOpList indexListPreface[] = {
         { OP_ColumnName,  0, 0,       "seq"},
         { OP_ColumnName,  1, 0,       "name"},
         { OP_ColumnName,  2, 1,       "unique"},
@@ -437,7 +438,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
     }
     if( pTab && pFK ){
       int i = 0; 
-      static VdbeOp indexListPreface[] = {
+      static VdbeOpList indexListPreface[] = {
         { OP_ColumnName,  0, 0,       "id"},
         { OP_ColumnName,  1, 0,       "seq"},
         { OP_ColumnName,  2, 0,       "table"},
@@ -468,7 +469,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
 
   if( sqliteStrICmp(zLeft, "database_list")==0 ){
     int i;
-    static VdbeOp indexListPreface[] = {
+    static VdbeOpList indexListPreface[] = {
       { OP_ColumnName,  0, 0,       "seq"},
       { OP_ColumnName,  1, 0,       "name"},
       { OP_ColumnName,  2, 1,       "file"},
@@ -501,7 +502,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
   ** override this setting
   */
   if( sqliteStrICmp(zLeft, "temp_store")==0 ){
-    static VdbeOp getTmpDbLoc[] = {
+    static VdbeOpList getTmpDbLoc[] = {
       { OP_ColumnName,  0, 1,        "temp_store"},
       { OP_Callback,    1, 0,        0},
     };
@@ -529,7 +530,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
   ** override this setting
   */
   if( sqliteStrICmp(zLeft, "default_temp_store")==0 ){
-    static VdbeOp getTmpDbLoc[] = {
+    static VdbeOpList getTmpDbLoc[] = {
       { OP_ColumnName,  0, 1,        "temp_store"},
       { OP_ReadCookie,  0, 5,        0},
       { OP_Callback,    1, 0,        0}};
@@ -566,7 +567,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
     /* Code that initializes the integrity check program.  Set the
     ** error count 0
     */
-    static VdbeOp initCode[] = {
+    static VdbeOpList initCode[] = {
       { OP_Integer,     0, 0,        0},
       { OP_MemStore,    0, 1,        0},
       { OP_ColumnName,  0, 1,        "integrity_check"},
@@ -574,7 +575,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
 
     /* Code to do an BTree integrity check on a single database file.
     */
-    static VdbeOp checkDb[] = {
+    static VdbeOpList checkDb[] = {
       { OP_SetInsert,   0, 0,        "2"},
       { OP_Integer,     0, 0,        0},    /* 1 */
       { OP_OpenRead,    0, 2,        0},
@@ -599,7 +600,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
     ** messages have been generated, output OK.  Otherwise output the
     ** error message
     */
-    static VdbeOp endCode[] = {
+    static VdbeOpList endCode[] = {
       { OP_MemLoad,     0, 0,        0},
       { OP_Integer,     0, 0,        0},
       { OP_Ne,          0, 0,        0},    /* 2 */
@@ -648,7 +649,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
         sqliteVdbeAddOp(v, OP_MemIncr, 1, 0);
         for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
           int k, jmp2;
-          static VdbeOp idxErr[] = {
+          static VdbeOpList idxErr[] = {
             { OP_MemIncr,     0,  0,  0},
             { OP_String,      0,  0,  "rowid "},
             { OP_Recno,       1,  0,  0},
@@ -676,7 +677,7 @@ void sqlitePragma(Parse *pParse, Token *pLeft, Token *pRight, int minusFlag){
         sqliteVdbeAddOp(v, OP_Next, 1, loopTop+1);
         sqliteVdbeChangeP2(v, loopTop, sqliteVdbeCurrentAddr(v));
         for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
-          static VdbeOp cntIdx[] = {
+          static VdbeOpList cntIdx[] = {
              { OP_Integer,      0,  0,  0},
              { OP_MemStore,     2,  1,  0},
              { OP_Rewind,       0,  0,  0},  /* 2 */
index 9e46882455c528f14a060305c1fad285cc9c3331..cf00c5b2f0dd18940103191ae316a9850425674b 100644 (file)
@@ -218,8 +218,7 @@ static int vxprintf(
   etByte errorflag = 0;      /* True if an error is encountered */
   etByte xtype;              /* Conversion paradigm */
   char *zExtra;              /* Extra memory used for etTCLESCAPE conversions */
-  static char spaces[] = "                                                  "
-     "                                                                      ";
+  static char spaces[] = "                                                  ";
 #define etSPACESIZE (sizeof(spaces)-1)
 #ifndef etNOFLOATINGPOINT
   int  exp;                  /* exponent of real numbers */
index 2bdbdb021c3abaf68a67a34555c978aa38e8c179..0fa6d29147be5018dfbf3190509e0bad3b71824c 100644 (file)
 *************************************************************************
 ** Internal interface definitions for SQLite.
 **
-** @(#) $Id: sqliteInt.h,v 1.215 2004/02/20 22:53:39 rdc Exp $
+** @(#) $Id: sqliteInt.h,v 1.216 2004/02/21 13:31:10 drh Exp $
 */
 #include "config.h"
 #include "sqlite.h"
 #include "hash.h"
-#include "vdbe.h"
 #include "parse.h"
 #include "btree.h"
 #include <stdio.h>
 #ifndef UINT8_TYPE
 # define UINT8_TYPE unsigned char
 #endif
+#ifndef INT8_TYPE
+# define INT8_TYPE signed char
+#endif
 #ifndef INTPTR_TYPE
 # if SQLITE_PTR_SZ==4
 #   define INTPTR_TYPE int
 typedef UINT32_TYPE u32;           /* 4-byte unsigned integer */
 typedef UINT16_TYPE u16;           /* 2-byte unsigned integer */
 typedef UINT8_TYPE u8;             /* 1-byte unsigned integer */
+typedef UINT8_TYPE i8;             /* 1-byte signed integer */
 typedef INTPTR_TYPE ptr;           /* Big enough to hold a pointer */
 typedef unsigned INTPTR_TYPE uptr; /* Big enough to hold a pointer */
 
+/*
+** Defer sourcing vdbe.h until after the "u8" typedef is defined.
+*/
+#include "vdbe.h"
+
 /*
 ** Most C compilers these days recognize "long double", don't they?
 ** Just in case we encounter one that does not, we will create a macro
index d8a501f055e356431706daea920cef549a2c7404..8442bb5dd8ee3626f3982c5dba7b68cf9f0d8d2d 100644 (file)
@@ -182,7 +182,7 @@ void sqliteFinishTrigger(
   ** build the sqlite_master entry
   */
   if( !db->init.busy ){
-    static VdbeOp insertTrig[] = {
+    static VdbeOpList insertTrig[] = {
       { OP_NewRecno,   0, 0,  0          },
       { OP_String,     0, 0,  "trigger"  },
       { OP_String,     0, 0,  0          },  /* 2: trigger name */
@@ -450,7 +450,7 @@ void sqliteDropTriggerPtr(Parse *pParse, Trigger *pTrigger, int nested){
   */
   if( pTable!=0 && !nested && (v = sqliteGetVdbe(pParse))!=0 ){
     int base;
-    static VdbeOp dropTrigger[] = {
+    static VdbeOpList dropTrigger[] = {
       { OP_Rewind,     0, ADDR(9),  0},
       { OP_String,     0, 0,        0}, /* 1 */
       { OP_Column,     0, 1,        0},
index 3535f91465d35048ca20459053d2b5f1900b1714..e90979a3cdcb22f3c6e21050dc6229f7b12a1694 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.69 2004/02/14 23:59:58 drh Exp $
+** $Id: vdbe.h,v 1.70 2004/02/21 13:31:11 drh Exp $
 */
 #ifndef _SQLITE_VDBE_H_
 #define _SQLITE_VDBE_H_
@@ -34,7 +34,7 @@ typedef struct Vdbe Vdbe;
 ** as an instance of the following structure:
 */
 struct VdbeOp {
-  int opcode;         /* What operation to perform */
+  u8 opcode;          /* What operation to perform */
   int p1;             /* First operand */
   int p2;             /* Second parameter (often the jump destination) */
   char *p3;           /* Third parameter */
@@ -46,6 +46,18 @@ struct VdbeOp {
 };
 typedef struct VdbeOp VdbeOp;
 
+/*
+** A smaller version of VdbeOp used for the VdbeAddOpList() function because
+** it takes up less space.
+*/
+struct VdbeOpList {
+  u8 opcode;          /* What operation to perform */
+  signed char p1;     /* First operand */
+  short int p2;       /* Second parameter (often the jump destination) */
+  char *p3;           /* Third parameter */
+};
+typedef struct VdbeOpList VdbeOpList;
+
 /*
 ** Allowed values of VdbeOp.p3type
 */
@@ -75,7 +87,7 @@ typedef struct VdbeOp VdbeOp;
 Vdbe *sqliteVdbeCreate(sqlite*);
 void sqliteVdbeCreateCallback(Vdbe*, int*);
 int sqliteVdbeAddOp(Vdbe*,int,int,int);
-int sqliteVdbeAddOpList(Vdbe*, int nOp, VdbeOp const *aOp);
+int sqliteVdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp);
 void sqliteVdbeChangeP1(Vdbe*, int addr, int P1);
 void sqliteVdbeChangeP2(Vdbe*, int addr, int P2);
 void sqliteVdbeChangeP3(Vdbe*, int addr, const char *zP1, int N);
index ee3163b06dd3da902bf5959cd4ce20e2b0edd0a6..ea1e8cd4a2da8a94bf37a076fc76729dc4190fe5 100644 (file)
@@ -167,7 +167,7 @@ int sqliteVdbeCurrentAddr(Vdbe *p){
 ** Add a whole list of operations to the operation stack.  Return the
 ** address of the first operation added.
 */
-int sqliteVdbeAddOpList(Vdbe *p, int nOp, VdbeOp const *aOp){
+int sqliteVdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){
   int addr;
   assert( p->magic==VDBE_MAGIC_INIT );
   if( p->nOp + nOp >= p->nOpAlloc ){
@@ -185,11 +185,15 @@ int sqliteVdbeAddOpList(Vdbe *p, int nOp, VdbeOp const *aOp){
   addr = p->nOp;
   if( nOp>0 ){
     int i;
-    for(i=0; i<nOp; i++){
-      int p2 = aOp[i].p2;
-      p->aOp[i+addr] = aOp[i];
-      if( p2<0 ) p->aOp[i+addr].p2 = addr + ADDR(p2);
-      p->aOp[i+addr].p3type = aOp[i].p3 ? P3_STATIC : P3_NOTUSED;
+    VdbeOpList const *pIn = aOp;
+    for(i=0; i<nOp; i++, pIn++){
+      int p2 = pIn->p2;
+      VdbeOp *pOut = &p->aOp[i+addr];
+      pOut->opcode = pIn->opcode;
+      pOut->p1 = pIn->p1;
+      pOut->p2 = p2<0 ? addr + ADDR(p2) : p2;
+      pOut->p3 = pIn->p3;
+      pOut->p3type = pIn->p3 ? P3_STATIC : P3_NOTUSED;
 #ifndef NDEBUG
       if( sqlite_vdbe_addop_trace ){
         sqliteVdbePrintOp(0, i+addr, &p->aOp[i+addr]);