Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Remove unused P4 parameter type codes. Other cleanup of P4. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
3fa3e910e23e27f91909efc7099b4bb8 |
User & Date: | drh 2013-07-30 13:22:40.188 |
Context
2013-07-30
| ||
14:34 | Enhanced comments and logic clarification in the OP_MakeIdxKey implementation. check-in: 2054b8483b user: drh tags: trunk | |
14:16 | Checked in untested changes by mistake. Closed-Leaf check-in: 3fe22bbdf0 user: drh tags: mistake | |
13:22 | Remove unused P4 parameter type codes. Other cleanup of P4. check-in: 3fa3e910e2 user: drh tags: trunk | |
12:14 | Simplification of the ORDER BY code generator logic, requiring fewer calls to OP_Column. check-in: eddeadfc27 user: drh tags: trunk | |
Changes
Changes to src/vdbe.h.
︙ | ︙ | |||
48 49 50 51 52 53 54 | int p1; /* First operand */ int p2; /* Second parameter (often the jump destination) */ int p3; /* The third parameter */ union { /* fourth parameter */ int i; /* Integer value if p4type==P4_INT32 */ void *p; /* Generic pointer */ char *z; /* Pointer to data for string (char array) types */ | < | | 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | int p1; /* First operand */ int p2; /* Second parameter (often the jump destination) */ int p3; /* The third parameter */ union { /* fourth parameter */ int i; /* Integer value if p4type==P4_INT32 */ void *p; /* Generic pointer */ char *z; /* Pointer to data for string (char array) types */ sqlite4_num *pNum; /* Used when p4type is P4_NUM */ FuncDef *pFunc; /* Used when p4type is P4_FUNCDEF */ VdbeFunc *pVdbeFunc; /* Used when p4type is P4_VDBEFUNC */ CollSeq *pColl; /* Used when p4type is P4_COLLSEQ */ Mem *pMem; /* Used when p4type is P4_MEM */ VTable *pVtab; /* Used when p4type is P4_VTAB */ KeyInfo *pKeyInfo; /* Used when p4type is P4_KEYINFO */ int *ai; /* Used when p4type is P4_INTARRAY */ SubProgram *pProgram; /* Used when p4type is P4_SUBPROGRAM */ Fts5Info *pFtsInfo; /* Used when p4type is P4_FTS5INDEXINFO */ int (*xAdvance)(VdbeCursor*); /* Used with p4type==P4_ADVANCE */ } p4; #ifdef SQLITE4_DEBUG char *zComment; /* Comment to improve readability */ #endif #ifdef VDBE_PROFILE int cnt; /* Number of times this instruction was executed */ u64 cycles; /* Total time spent executing this instruction */ |
︙ | ︙ | |||
98 99 100 101 102 103 104 | signed char p1; /* First operand */ signed char p2; /* Second parameter (often the jump destination) */ signed char p3; /* Third parameter */ }; typedef struct VdbeOpList VdbeOpList; /* | | > > | > | | | | | | | < | < | < | | | | | | | | 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | signed char p1; /* First operand */ signed char p2; /* Second parameter (often the jump destination) */ signed char p3; /* Third parameter */ }; typedef struct VdbeOpList VdbeOpList; /* ** Allowed values of VdbeOp.p4type. All values are less than 1 so that ** they can be used unambiguously in the "length" parameter of various ** interfaces. */ #define P4_NOTUSED 0 /* The P4 parameter is not used */ #define P4_TRANSIENT 0 /* P4 is a pointer to a transient string */ #define P4_DYNAMIC (-1) /* Pointer to a string obtained from malloc() */ #define P4_STATIC (-2) /* Pointer to a static string */ #define P4_COLLSEQ (-3) /* P4 is a pointer to a CollSeq structure */ #define P4_FUNCDEF (-4) /* P4 is a pointer to a FuncDef structure */ #define P4_KEYINFO (-5) /* P4 is a pointer to a KeyInfo structure */ #define P4_VDBEFUNC (-6) /* P4 is a pointer to a VdbeFunc structure */ #define P4_MEM (-7) /* P4 is a pointer to a Mem* structure */ #define P4_VTAB (-8) /* P4 is a pointer to an sqlite4_vtab structure */ #define P4_NUM (-9) /* P4 is a pointer to an sqlite4_num structure */ #define P4_INT32 (-10) /* P4 is a 32-bit signed integer */ #define P4_INTARRAY (-11) /* P4 is a vector of 32-bit integers */ #define P4_SUBPROGRAM (-12) /* P4 is a pointer to a SubProgram structure */ #define P4_ADVANCE (-13) /* P4 is a pointer to BtreeNext() or BtreePrev() */ #define P4_FTS5INFO (-14) /* P4 points to an Fts5Info structure */ /* When adding a P4 argument using P4_KEYINFO, a copy of the KeyInfo structure ** is made. That copy is freed when the Vdbe is finalized. But if the ** argument is P4_KEYINFO_HANDOFF, the passed in pointer is used. It still ** gets freed when the Vdbe is finalized so it still should be obtained ** from a single sqliteMalloc(). But no copy is made and the calling ** function should *not* try to free the KeyInfo. */ #define P4_KEYINFO_HANDOFF (-124) #define P4_KEYINFO_STATIC (-125) /* ** The Vdbe.aColName array contains 5n Mem structures, where n is the ** number of columns of data returned by the statement. */ #define COLNAME_NAME 0 #define COLNAME_DECLTYPE 1 |
︙ | ︙ |
Changes to src/vdbeaux.c.
︙ | ︙ | |||
581 582 583 584 585 586 587 | ** Delete a P4 value if necessary. */ static void freeP4(sqlite4 *db, int p4type, void *p4){ if( p4 ){ assert( db ); switch( p4type ){ case P4_NUM: | < < < < < | 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 | ** Delete a P4 value if necessary. */ static void freeP4(sqlite4 *db, int p4type, void *p4){ if( p4 ){ assert( db ); switch( p4type ){ case P4_NUM: case P4_DYNAMIC: case P4_KEYINFO: case P4_INTARRAY: case P4_KEYINFO_HANDOFF: { sqlite4DbFree(db, p4); break; } case P4_VDBEFUNC: { VdbeFunc *pVdbeFunc = (VdbeFunc *)p4; freeEphemeralFunction(db, pVdbeFunc->pFunc); if( db->pnBytesFreed==0 ) sqlite4VdbeDeleteAuxData(pVdbeFunc, 0); sqlite4DbFree(db, pVdbeFunc); break; } |
︙ | ︙ | |||
885 886 887 888 889 890 891 | break; } case P4_FUNCDEF: { FuncDef *pDef = pOp->p4.pFunc; sqlite4_snprintf(zTemp, nTemp, "%s(%d)", pDef->zName, pDef->nArg); break; } | < < < < | 880 881 882 883 884 885 886 887 888 889 890 891 892 893 | break; } case P4_FUNCDEF: { FuncDef *pDef = pOp->p4.pFunc; sqlite4_snprintf(zTemp, nTemp, "%s(%d)", pDef->zName, pDef->nArg); break; } case P4_INT32: { sqlite4_snprintf(zTemp, nTemp, "%d", pOp->p4.i); break; } case P4_NUM: { sqlite4_num_to_text(*pOp->p4.pNum, zTemp, 0); break; |
︙ | ︙ |
Changes to src/where.c.
︙ | ︙ | |||
3437 3438 3439 3440 3441 3442 3443 | sqlite4ExprCode(pParse, pTerm->pExpr->pRight, iTarget); } } sqlite4VdbeAddOp2(v, OP_Integer, pLoop->u.vtab.idxNum, iReg); sqlite4VdbeAddOp2(v, OP_Integer, nConstraint, iReg+1); sqlite4VdbeAddOp4(v, OP_VFilter, iCur, addrNotFound, iReg, pLoop->u.vtab.idxStr, | | | 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 | sqlite4ExprCode(pParse, pTerm->pExpr->pRight, iTarget); } } sqlite4VdbeAddOp2(v, OP_Integer, pLoop->u.vtab.idxNum, iReg); sqlite4VdbeAddOp2(v, OP_Integer, nConstraint, iReg+1); sqlite4VdbeAddOp4(v, OP_VFilter, iCur, addrNotFound, iReg, pLoop->u.vtab.idxStr, pLoop->u.vtab.needFree ? P4_DYNAMIC : P4_STATIC); pLoop->u.vtab.needFree = 0; for(j=0; j<nConstraint && j<16; j++){ if( (pLoop->u.vtab.omitMask>>j)&1 ){ disableTerm(pLevel, pLoop->aLTerm[j]); } } pLevel->op = OP_VNext; |
︙ | ︙ |