Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Tweaks to vdbe.c to further reduce stack space requirements. (CVS 6706) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
6f2aab3f7be12710b703eda22b1d5c0e |
User & Date: | drh 2009-06-02 16:06:04.000 |
Context
2009-06-02
| ||
21:31 | Further reductions in the amount of stack space required. (CVS 6707) (check-in: 04bad9eb6d user: drh tags: trunk) | |
16:06 | Tweaks to vdbe.c to further reduce stack space requirements. (CVS 6706) (check-in: 6f2aab3f7b user: drh tags: trunk) | |
15:47 | Add a test case for ticket #3893 and ticket #3894. (CVS 6705) (check-in: 2472f6db95 user: drh tags: trunk) | |
Changes
Changes to src/vdbe.c.
︙ | ︙ | |||
39 40 41 42 43 44 45 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** | | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** ** $Id: vdbe.c,v 1.845 2009/06/02 16:06:04 drh Exp $ */ #include "sqliteInt.h" #include "vdbeInt.h" /* ** The following global variable is incremented every time a cursor ** moves, either by the OP_SeekXX, OP_Next, or OP_Prev opcodes. The test |
︙ | ︙ | |||
1936 1937 1938 1939 1940 1941 1942 | /* Opcode: IsNull P1 P2 P3 * * ** ** Jump to P2 if the value in register P1 is NULL. If P3 is greater ** than zero, then check all values reg(P1), reg(P1+1), ** reg(P1+2), ..., reg(P1+P3-1). */ case OP_IsNull: { /* same as TK_ISNULL, jump, in1 */ | > > | | 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 | /* Opcode: IsNull P1 P2 P3 * * ** ** Jump to P2 if the value in register P1 is NULL. If P3 is greater ** than zero, then check all values reg(P1), reg(P1+1), ** reg(P1+2), ..., reg(P1+P3-1). */ case OP_IsNull: { /* same as TK_ISNULL, jump, in1 */ int n; n = pOp->p3; assert( pOp->p3==0 || pOp->p1>0 ); do{ if( (pIn1->flags & MEM_Null)!=0 ){ pc = pOp->p2 - 1; break; } pIn1++; |
︙ | ︙ | |||
2394 2395 2396 2397 2398 2399 2400 | ** ** Store the number of entries (an integer value) in the table or index ** opened by cursor P1 in register P2 */ #ifndef SQLITE_OMIT_BTREECOUNT case OP_Count: { /* out2-prerelease */ i64 nEntry; | > > | | 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 | ** ** Store the number of entries (an integer value) in the table or index ** opened by cursor P1 in register P2 */ #ifndef SQLITE_OMIT_BTREECOUNT case OP_Count: { /* out2-prerelease */ i64 nEntry; BtCursor *pCrsr; pCrsr = p->apCsr[pOp->p1]->pCursor; if( pCrsr ){ rc = sqlite3BtreeCount(pCrsr, &nEntry); }else{ nEntry = 0; } pOut->flags = MEM_Int; pOut->u.i = nEntry; |
︙ | ︙ | |||
3096 3097 3098 3099 3100 3101 3102 | /* Opcode: Close P1 * * * * ** ** Close a cursor previously opened as P1. If P1 is not ** currently open, this instruction is a no-op. */ case OP_Close: { | > | | 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 | /* Opcode: Close P1 * * * * ** ** Close a cursor previously opened as P1. If P1 is not ** currently open, this instruction is a no-op. */ case OP_Close: { int i; i = pOp->p1; assert( i>=0 && i<p->nCursor ); sqlite3VdbeFreeCursor(p, p->apCsr[i]); p->apCsr[i] = 0; break; } /* Opcode: SeekGe P1 P2 P3 P4 * |
︙ | ︙ | |||
4878 4879 4880 4881 4882 4883 4884 | ** ** The P5 arguments are taken from register P2 and its ** successors. */ case OP_AggStep: { int n; int i; | | > | 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 | ** ** The P5 arguments are taken from register P2 and its ** successors. */ case OP_AggStep: { int n; int i; Mem *pMem; Mem *pRec; sqlite3_context ctx; sqlite3_value **apVal; n = pOp->p5; assert( n>=0 ); pRec = &p->aMem[pOp->p2]; apVal = p->apArg; |
︙ | ︙ | |||
5274 5275 5276 5277 5278 5279 5280 | ** Advance virtual table P1 to the next row in its result set and ** jump to instruction P2. Or, if the virtual table has reached ** the end of its result set, then fall through to the next instruction. */ case OP_VNext: { /* jump */ sqlite3_vtab *pVtab; const sqlite3_module *pModule; | | > | 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 | ** Advance virtual table P1 to the next row in its result set and ** jump to instruction P2. Or, if the virtual table has reached ** the end of its result set, then fall through to the next instruction. */ case OP_VNext: { /* jump */ sqlite3_vtab *pVtab; const sqlite3_module *pModule; int res; VdbeCursor *pCur; res = 0; pCur = p->apCsr[pOp->p1]; assert( pCur->pVtabCursor ); if( pCur->nullRow ){ break; } pVtab = pCur->pVtabCursor->pVtab; pModule = pVtab->pModule; |
︙ | ︙ |
Changes to tool/vdbe-compress.tcl.
︙ | ︙ | |||
60 61 62 63 64 65 66 | while {![eof stdin]} { set line [gets stdin] if {[regexp "^case (OP_\\w+): \173" $line all operator]} { append afterUnion $line\n set vlist {} while {![eof stdin]} { set line [gets stdin] | | | 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | while {![eof stdin]} { set line [gets stdin] if {[regexp "^case (OP_\\w+): \173" $line all operator]} { append afterUnion $line\n set vlist {} while {![eof stdin]} { set line [gets stdin] if {[regexp {^ +(const )?\w+ \**(\w+)(\[.*\])?;} $line \ all constKeyword vname notused1]} { if {!$seenDecl} { set sname {} append sname [string index $namechars [expr {$sCtr/$nnc}]] append sname [string index $namechars [expr {$sCtr%$nnc}]] incr sCtr append unionDef " struct ${operator}_stack_vars \173\n" |
︙ | ︙ |