diff --git a/manifest b/manifest index 31c51c0543..4e56023c5f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sfor\sticket\s#50.\s(CVS\s582) -D 2002-05-23T13:15:37 +C Change\sthe\snames\sof\sthe\sPushList\sand\sPopList\sopcodes\sto\sListPush\sand\sListPop\nso\sthat\sthey\swill\sappear\stogether\swith\sthe\sother\sList\sopcodes\sin\sthe\ndocumentation.\s(CVS\s583) +D 2002-05-23T22:07:03 F Makefile.in 6291a33b87d2a395aafd7646ee1ed562c6f2c28c F Makefile.template 4e11752e0b5c7a043ca50af4296ec562857ba495 F README a4c0ba11354ef6ba0776b400d057c59da47a4cc0 @@ -49,11 +49,11 @@ F src/test2.c 669cc22781c6461a273416ec1a7414d25c081730 F src/test3.c 4e52fff8b01f08bd202f7633feda5639b7ba2b5e F src/threadtest.c 81f0598e0f031c1bd506af337fdc1b7e8dff263f F src/tokenize.c 5892a8eb8f0063718f5bec1a1b24f4c6029eba9b -F src/trigger.c a5e6694f2cc6f1b3c10b954b9bc904548f3599fc -F src/update.c 82ada80cdfa489a30e91dba7f29f75a20f61c8a2 +F src/trigger.c a7990d424af58d809501a393f72c12d4b039eb63 +F src/update.c 1f8f7fde797bd607fe0afb4f96a6ad83c9e8ab7b F src/util.c 707c30f8c13cddace7c08556ac450c0b786660b3 -F src/vdbe.c 67fbceb6fa2a0ab020b65c007430272a66771ae1 -F src/vdbe.h 126a651ba26f05de075dcc6da5466244a31af6b8 +F src/vdbe.c 6c2eae8a1d03f41aa51e40772aebf581cf62d5b8 +F src/vdbe.h def669b9f2728589aabcb5db756429db02465c9a F src/where.c 293985b6cf8391c3dcef9efcac4654884370513a F test/all.test e4d3821eeba751829b419cd47814bd20af4286d1 F test/bigrow.test 8ab252dba108f12ad64e337b0f2ff31a807ac578 @@ -134,7 +134,7 @@ F www/speed.tcl da8afcc1d3ccc5696cfb388a68982bc3d9f7f00f F www/sqlite.tcl 8b5884354cb615049aed83039f8dfe1552a44279 F www/tclsqlite.tcl 1db15abeb446aad0caf0b95b8b9579720e4ea331 F www/vdbe.tcl 2013852c27a02a091d39a766bc87cff329f21218 -P 4d27ee411902a197cd72416ca9da9197d3f87f13 -R 42134e515c91a3561726205cb5ceae33 +P 82b74a494ac7c751a13e67dcfa7fffb1b98ec808 +R 3e1a04e4d6e0a4fb68b8a11229bc1cc1 U drh -Z 5548f4db8a2e3ece93a6ef0eb59cb03c +Z 8e8caac647d0d1fcfa3e14c75f0d3c35 diff --git a/manifest.uuid b/manifest.uuid index 72f38d72c6..b1fee1cf7c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -82b74a494ac7c751a13e67dcfa7fffb1b98ec808 \ No newline at end of file +c53b0b9283c5c34def87d58b03fd979d03dc0890 \ No newline at end of file diff --git a/src/trigger.c b/src/trigger.c index 81a7506869..aedf08873b 100644 --- a/src/trigger.c +++ b/src/trigger.c @@ -479,11 +479,11 @@ static int codeTriggerProgram( break; } case TK_UPDATE: { - sqliteVdbeAddOp(pParse->pVdbe, OP_PushList, 0, 0); + sqliteVdbeAddOp(pParse->pVdbe, OP_ListPush, 0, 0); sqliteUpdate(pParse, &pTriggerStep->target, sqliteExprListDup(pTriggerStep->pExprList), sqliteExprDup(pTriggerStep->pWhere), orconf); - sqliteVdbeAddOp(pParse->pVdbe, OP_PopList, 0, 0); + sqliteVdbeAddOp(pParse->pVdbe, OP_ListPop, 0, 0); break; } case TK_INSERT: { @@ -494,10 +494,10 @@ static int codeTriggerProgram( break; } case TK_DELETE: { - sqliteVdbeAddOp(pParse->pVdbe, OP_PushList, 0, 0); + sqliteVdbeAddOp(pParse->pVdbe, OP_ListPush, 0, 0); sqliteDeleteFrom(pParse, &pTriggerStep->target, sqliteExprDup(pTriggerStep->pWhere)); - sqliteVdbeAddOp(pParse->pVdbe, OP_PopList, 0, 0); + sqliteVdbeAddOp(pParse->pVdbe, OP_ListPop, 0, 0); break; } default: diff --git a/src/update.c b/src/update.c index 89dbd11047..177cdd6f34 100644 --- a/src/update.c +++ b/src/update.c @@ -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.41 2002/05/23 12:50:19 drh Exp $ +** $Id: update.c,v 1.42 2002/05/23 22:07:03 drh Exp $ */ #include "sqliteInt.h" @@ -282,7 +282,6 @@ void sqliteUpdate( ** So make the cursor point at the old record. */ if( !row_triggers_exist ){ - int ii; sqliteVdbeAddOp(v, OP_ListRewind, 0, 0); addr = sqliteVdbeAddOp(v, OP_ListRead, 0, 0); sqliteVdbeAddOp(v, OP_Dup, 0, 0); diff --git a/src/vdbe.c b/src/vdbe.c index 399369d994..3fcd443c16 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -30,7 +30,7 @@ ** But other routines are also provided to help in building up ** a program instruction by instruction. ** -** $Id: vdbe.c,v 1.145 2002/05/23 02:09:04 drh Exp $ +** $Id: vdbe.c,v 1.146 2002/05/23 22:07:03 drh Exp $ */ #include "sqliteInt.h" #include @@ -250,7 +250,7 @@ struct Vdbe { int iLimit; /* Limit on the number of callbacks remaining */ int iOffset; /* Offset before beginning to do callbacks */ int keylistStackDepth; /* The size of the "keylist" stack */ - Keylist **keylistStack; /* The stack used by opcodes PushList & PopList */ + Keylist **keylistStack; /* The stack used by opcodes ListPush & ListPop */ }; /* @@ -1060,11 +1060,12 @@ static char *zOpName[] = { 0, "Clear", "CreateIndex", "CreateTable", "IntegrityCk", "IdxPut", "IdxDelete", "IdxRecno", "IdxGT", "IdxGE", "MemLoad", "MemStore", "ListWrite", - "ListRewind", "ListRead", "ListReset", "SortPut", - "SortMakeRec", "SortMakeKey", "Sort", "SortNext", - "SortCallback", "SortReset", "FileOpen", "FileRead", - "FileColumn", "AggReset", "AggFocus", "AggNext", - "AggSet", "AggGet", "AggFunc", "AggInit", + "ListRewind", "ListRead", "ListReset", "ListPush", + "ListPop", "SortPut", "SortMakeRec", "SortMakeKey", + "Sort", "SortNext", "SortCallback", "SortReset", + "FileOpen", "FileRead", "FileColumn", "AggReset", + "AggFocus", "AggNext", "AggSet", "AggGet", + "AggFunc", "AggInit", "AggPush", "AggPop", "SetInsert", "SetFound", "SetNotFound", "MakeRecord", "MakeKey", "MakeIdxKey", "IncrKey", "Goto", "If", "Halt", "ColumnCount", "ColumnName", @@ -1077,7 +1078,7 @@ static char *zOpName[] = { 0, "Le", "Gt", "Ge", "IsNull", "NotNull", "Negative", "And", "Or", "Not", "Concat", "Noop", "Function", - "Limit", "PushList", "PopList", + "Limit", }; /* @@ -3820,6 +3821,39 @@ case OP_ListReset: { break; } +/* Opcode: ListPush * * * +** +** Save the current Vdbe list such that it can be restored by a PopList +** opcode. The list is empty after this is executed. +*/ +case OP_ListPush: { + p->keylistStackDepth++; + assert(p->keylistStackDepth > 0); + p->keylistStack = sqliteRealloc(p->keylistStack, + sizeof(Keylist *) * p->keylistStackDepth); + p->keylistStack[p->keylistStackDepth - 1] = p->pList; + p->pList = 0; + break; +} + +/* Opcode: ListPop * * * +** +** Restore the Vdbe list to the state it was in when PushList was last +** executed. +*/ +case OP_ListPop: { + assert(p->keylistStackDepth > 0); + p->keylistStackDepth--; + KeylistFree(p->pList); + p->pList = p->keylistStack[p->keylistStackDepth]; + p->keylistStack[p->keylistStackDepth] = 0; + if( p->keylistStackDepth == 0 ){ + sqliteFree(p->keylistStack); + p->keylistStack = 0; + } + break; +} + /* Opcode: SortPut * * * ** ** The TOS is the key and the NOS is the data. Pop both from the stack @@ -4554,39 +4588,6 @@ case OP_SetFound: { break; } -/* Opcode: PushList * * * -** -** Save the current Vdbe list such that it can be restored by a PopList -** opcode. The list is empty after this is executed. -*/ -case OP_PushList: { - p->keylistStackDepth++; - assert(p->keylistStackDepth > 0); - p->keylistStack = sqliteRealloc(p->keylistStack, - sizeof(Keylist *) * p->keylistStackDepth); - p->keylistStack[p->keylistStackDepth - 1] = p->pList; - p->pList = 0; - break; -} - -/* Opcode: PopList * * * -** -** Restore the Vdbe list to the state it was in when PushList was last -** executed. -*/ -case OP_PopList: { - assert(p->keylistStackDepth > 0); - p->keylistStackDepth--; - KeylistFree(p->pList); - p->pList = p->keylistStack[p->keylistStackDepth]; - p->keylistStack[p->keylistStackDepth] = 0; - if( p->keylistStackDepth == 0 ){ - sqliteFree(p->keylistStack); - p->keylistStack = 0; - } - break; -} - /* Opcode: SetNotFound P1 P2 * ** ** Pop the stack once and compare the value popped off with the diff --git a/src/vdbe.h b/src/vdbe.h index 1260ce755e..23410437e8 100644 --- a/src/vdbe.h +++ b/src/vdbe.h @@ -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.51 2002/05/15 08:30:14 danielk1977 Exp $ +** $Id: vdbe.h,v 1.52 2002/05/23 22:07:03 drh Exp $ */ #ifndef _SQLITE_VDBE_H_ #define _SQLITE_VDBE_H_ @@ -121,87 +121,89 @@ typedef struct VdbeOp VdbeOp; #define OP_ListRewind 45 #define OP_ListRead 46 #define OP_ListReset 47 +#define OP_ListPush 48 +#define OP_ListPop 49 -#define OP_SortPut 48 -#define OP_SortMakeRec 49 -#define OP_SortMakeKey 50 -#define OP_Sort 51 -#define OP_SortNext 52 -#define OP_SortCallback 53 -#define OP_SortReset 54 +#define OP_SortPut 50 +#define OP_SortMakeRec 51 +#define OP_SortMakeKey 52 +#define OP_Sort 53 +#define OP_SortNext 54 +#define OP_SortCallback 55 +#define OP_SortReset 56 -#define OP_FileOpen 55 -#define OP_FileRead 56 -#define OP_FileColumn 57 +#define OP_FileOpen 57 +#define OP_FileRead 58 +#define OP_FileColumn 59 -#define OP_AggReset 58 -#define OP_AggFocus 59 -#define OP_AggNext 60 -#define OP_AggSet 61 -#define OP_AggGet 62 -#define OP_AggFunc 63 -#define OP_AggInit 64 +#define OP_AggReset 60 +#define OP_AggFocus 61 +#define OP_AggNext 62 +#define OP_AggSet 63 +#define OP_AggGet 64 +#define OP_AggFunc 65 +#define OP_AggInit 66 +#define OP_AggPush 67 +#define OP_AggPop 68 -#define OP_SetInsert 65 -#define OP_SetFound 66 -#define OP_SetNotFound 67 +#define OP_SetInsert 69 +#define OP_SetFound 70 +#define OP_SetNotFound 71 -#define OP_MakeRecord 68 -#define OP_MakeKey 69 -#define OP_MakeIdxKey 70 -#define OP_IncrKey 71 +#define OP_MakeRecord 72 +#define OP_MakeKey 73 +#define OP_MakeIdxKey 74 +#define OP_IncrKey 75 -#define OP_Goto 72 -#define OP_If 73 -#define OP_Halt 74 +#define OP_Goto 76 +#define OP_If 77 +#define OP_Halt 78 -#define OP_ColumnCount 75 -#define OP_ColumnName 76 -#define OP_Callback 77 -#define OP_NullCallback 78 +#define OP_ColumnCount 79 +#define OP_ColumnName 80 +#define OP_Callback 81 +#define OP_NullCallback 82 -#define OP_Integer 79 -#define OP_String 80 -#define OP_Pop 81 -#define OP_Dup 82 -#define OP_Pull 83 -#define OP_Push 84 -#define OP_MustBeInt 85 +#define OP_Integer 83 +#define OP_String 84 +#define OP_Pop 85 +#define OP_Dup 86 +#define OP_Pull 87 +#define OP_Push 88 +#define OP_MustBeInt 89 -#define OP_Add 86 -#define OP_AddImm 87 -#define OP_Subtract 88 -#define OP_Multiply 89 -#define OP_Divide 90 -#define OP_Remainder 91 -#define OP_BitAnd 92 -#define OP_BitOr 93 -#define OP_BitNot 94 -#define OP_ShiftLeft 95 -#define OP_ShiftRight 96 -#define OP_AbsValue 97 -#define OP_Eq 98 -#define OP_Ne 99 -#define OP_Lt 100 -#define OP_Le 101 -#define OP_Gt 102 -#define OP_Ge 103 -#define OP_IsNull 104 -#define OP_NotNull 105 -#define OP_Negative 106 -#define OP_And 107 -#define OP_Or 108 -#define OP_Not 109 -#define OP_Concat 110 -#define OP_Noop 111 -#define OP_Function 112 +#define OP_Add 90 +#define OP_AddImm 91 +#define OP_Subtract 92 +#define OP_Multiply 93 +#define OP_Divide 94 +#define OP_Remainder 95 +#define OP_BitAnd 96 +#define OP_BitOr 97 +#define OP_BitNot 98 +#define OP_ShiftLeft 99 +#define OP_ShiftRight 100 +#define OP_AbsValue 101 +#define OP_Eq 102 +#define OP_Ne 103 +#define OP_Lt 104 +#define OP_Le 105 +#define OP_Gt 106 +#define OP_Ge 107 +#define OP_IsNull 108 +#define OP_NotNull 109 +#define OP_Negative 110 +#define OP_And 111 +#define OP_Or 112 +#define OP_Not 113 +#define OP_Concat 114 +#define OP_Noop 115 +#define OP_Function 116 -#define OP_Limit 113 +#define OP_Limit 117 -#define OP_PushList 114 -#define OP_PopList 115 -#define OP_MAX 115 +#define OP_MAX 117 /* ** Prototypes for the VDBE interface. See comments on the implementation