Lines Matching refs:p

27   Vdbe *p;  in sqlite3VdbeCreate()  local
28 p = sqlite3DbMallocRawNN(db, sizeof(Vdbe) ); in sqlite3VdbeCreate()
29 if( p==0 ) return 0; in sqlite3VdbeCreate()
30 memset(&p->aOp, 0, sizeof(Vdbe)-offsetof(Vdbe,aOp)); in sqlite3VdbeCreate()
31 p->db = db; in sqlite3VdbeCreate()
33 db->pVdbe->ppVPrev = &p->pVNext; in sqlite3VdbeCreate()
35 p->pVNext = db->pVdbe; in sqlite3VdbeCreate()
36 p->ppVPrev = &db->pVdbe; in sqlite3VdbeCreate()
37 db->pVdbe = p; in sqlite3VdbeCreate()
38 assert( p->eVdbeState==VDBE_INIT_STATE ); in sqlite3VdbeCreate()
39 p->pParse = pParse; in sqlite3VdbeCreate()
40 pParse->pVdbe = p; in sqlite3VdbeCreate()
43 assert( p->nOpAlloc==0 ); in sqlite3VdbeCreate()
45 sqlite3VdbeAddOp2(p, OP_Init, 0, 1); in sqlite3VdbeCreate()
46 return p; in sqlite3VdbeCreate()
52 Parse *sqlite3VdbeParser(Vdbe *p){ in sqlite3VdbeParser() argument
53 return p->pParse; in sqlite3VdbeParser()
59 void sqlite3VdbeError(Vdbe *p, const char *zFormat, ...){ in sqlite3VdbeError() argument
61 sqlite3DbFree(p->db, p->zErrMsg); in sqlite3VdbeError()
63 p->zErrMsg = sqlite3VMPrintf(p->db, zFormat, ap); in sqlite3VdbeError()
70 void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, u8 prepFlags){ in sqlite3VdbeSetSql() argument
71 if( p==0 ) return; in sqlite3VdbeSetSql()
72 p->prepFlags = prepFlags; in sqlite3VdbeSetSql()
74 p->expmask = 0; in sqlite3VdbeSetSql()
76 assert( p->zSql==0 ); in sqlite3VdbeSetSql()
77 p->zSql = sqlite3DbStrNDup(p->db, z, n); in sqlite3VdbeSetSql()
84 void sqlite3VdbeAddDblquoteStr(sqlite3 *db, Vdbe *p, const char *z){ in sqlite3VdbeAddDblquoteStr() argument
85 if( p ){ in sqlite3VdbeAddDblquoteStr()
90 pStr->pNextStr = p->pDblStr; in sqlite3VdbeAddDblquoteStr()
91 p->pDblStr = pStr; in sqlite3VdbeAddDblquoteStr()
166 Parse *p = v->pParse; in growOpArray() local
185 if( nNew > p->db->aLimit[SQLITE_LIMIT_VDBE_OP] ){ in growOpArray()
186 sqlite3OomFault(p->db); in growOpArray()
192 pNew = sqlite3DbRealloc(p->db, v->aOp, nNew*sizeof(Op)); in growOpArray()
194 p->szOpAlloc = sqlite3DbMallocSize(p->db, pNew); in growOpArray()
195 v->nOpAlloc = p->szOpAlloc/sizeof(Op); in growOpArray()
235 static SQLITE_NOINLINE int growOp3(Vdbe *p, int op, int p1, int p2, int p3){ in growOp3() argument
236 assert( p->nOpAlloc<=p->nOp ); in growOp3()
237 if( growOpArray(p, 1) ) return 1; in growOp3()
238 assert( p->nOpAlloc>p->nOp ); in growOp3()
239 return sqlite3VdbeAddOp3(p, op, p1, p2, p3); in growOp3()
241 int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){ in sqlite3VdbeAddOp3() argument
245 i = p->nOp; in sqlite3VdbeAddOp3()
246 assert( p->eVdbeState==VDBE_INIT_STATE ); in sqlite3VdbeAddOp3()
248 if( p->nOpAlloc<=i ){ in sqlite3VdbeAddOp3()
249 return growOp3(p, op, p1, p2, p3); in sqlite3VdbeAddOp3()
251 assert( p->aOp!=0 ); in sqlite3VdbeAddOp3()
252 p->nOp++; in sqlite3VdbeAddOp3()
253 pOp = &p->aOp[i]; in sqlite3VdbeAddOp3()
260 pOp->p4.p = 0; in sqlite3VdbeAddOp3()
266 if( p->db->flags & SQLITE_VdbeAddopTrace ){ in sqlite3VdbeAddOp3()
267 sqlite3VdbePrintOp(0, i, &p->aOp[i]); in sqlite3VdbeAddOp3()
268 test_addop_breakpoint(i, &p->aOp[i]); in sqlite3VdbeAddOp3()
280 int sqlite3VdbeAddOp0(Vdbe *p, int op){ in sqlite3VdbeAddOp0() argument
281 return sqlite3VdbeAddOp3(p, op, 0, 0, 0); in sqlite3VdbeAddOp0()
283 int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){ in sqlite3VdbeAddOp1() argument
284 return sqlite3VdbeAddOp3(p, op, p1, 0, 0); in sqlite3VdbeAddOp1()
286 int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){ in sqlite3VdbeAddOp2() argument
287 return sqlite3VdbeAddOp3(p, op, p1, p2, 0); in sqlite3VdbeAddOp2()
292 int sqlite3VdbeGoto(Vdbe *p, int iDest){ in sqlite3VdbeGoto() argument
293 return sqlite3VdbeAddOp3(p, OP_Goto, 0, iDest, 0); in sqlite3VdbeGoto()
299 int sqlite3VdbeLoadString(Vdbe *p, int iDest, const char *zStr){ in sqlite3VdbeLoadString() argument
300 return sqlite3VdbeAddOp4(p, OP_String8, 0, iDest, 0, zStr, 0); in sqlite3VdbeLoadString()
314 void sqlite3VdbeMultiLoad(Vdbe *p, int iDest, const char *zTypes, ...){ in sqlite3VdbeMultiLoad() argument
322 sqlite3VdbeAddOp4(p, z==0 ? OP_Null : OP_String8, 0, iDest+i, 0, z, 0); in sqlite3VdbeMultiLoad()
324 sqlite3VdbeAddOp2(p, OP_Integer, va_arg(ap, int), iDest+i); in sqlite3VdbeMultiLoad()
329 sqlite3VdbeAddOp2(p, OP_ResultRow, iDest, i); in sqlite3VdbeMultiLoad()
338 Vdbe *p, /* Add the opcode to this VM */ in sqlite3VdbeAddOp4() argument
346 int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3); in sqlite3VdbeAddOp4()
347 sqlite3VdbeChangeP4(p, addr, zP4, p4type); in sqlite3VdbeAddOp4()
400 Vdbe *p, /* Add the opcode to this VM */ in sqlite3VdbeAddOp4Dup8() argument
408 char *p4copy = sqlite3DbMallocRawNN(sqlite3VdbeDb(p), 8); in sqlite3VdbeAddOp4Dup8()
410 return sqlite3VdbeAddOp4(p, op, p1, p2, p3, p4copy, p4type); in sqlite3VdbeAddOp4Dup8()
484 void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *zWhere, u16 p5){ in sqlite3VdbeAddParseSchemaOp() argument
486 sqlite3VdbeAddOp4(p, OP_ParseSchema, iDb, 0, 0, zWhere, P4_DYNAMIC); in sqlite3VdbeAddParseSchemaOp()
487 sqlite3VdbeChangeP5(p, p5); in sqlite3VdbeAddParseSchemaOp()
488 for(j=0; j<p->db->nDb; j++) sqlite3VdbeUsesBtree(p, j); in sqlite3VdbeAddParseSchemaOp()
489 sqlite3MayAbort(p->pParse); in sqlite3VdbeAddParseSchemaOp()
496 Vdbe *p, /* Add the opcode to this VM */ in sqlite3VdbeAddOp4Int() argument
503 int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3); in sqlite3VdbeAddOp4Int()
504 if( p->db->mallocFailed==0 ){ in sqlite3VdbeAddOp4Int()
505 VdbeOp *pOp = &p->aOp[addr]; in sqlite3VdbeAddOp4Int()
561 static SQLITE_NOINLINE void resizeResolveLabel(Parse *p, Vdbe *v, int j){ in resizeResolveLabel() argument
562 int nNewSize = 10 - p->nLabel; in resizeResolveLabel()
563 p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel, in resizeResolveLabel()
564 nNewSize*sizeof(p->aLabel[0])); in resizeResolveLabel()
565 if( p->aLabel==0 ){ in resizeResolveLabel()
566 p->nLabelAlloc = 0; in resizeResolveLabel()
570 for(i=p->nLabelAlloc; i<nNewSize; i++) p->aLabel[i] = -1; in resizeResolveLabel()
572 p->nLabelAlloc = nNewSize; in resizeResolveLabel()
573 p->aLabel[j] = v->nOp; in resizeResolveLabel()
577 Parse *p = v->pParse; in sqlite3VdbeResolveLabel() local
580 assert( j<-p->nLabel ); in sqlite3VdbeResolveLabel()
583 if( p->db->flags & SQLITE_VdbeAddopTrace ){ in sqlite3VdbeResolveLabel()
587 if( p->nLabelAlloc + p->nLabel < 0 ){ in sqlite3VdbeResolveLabel()
588 resizeResolveLabel(p,v,j); in sqlite3VdbeResolveLabel()
590 assert( p->aLabel[j]==(-1) ); /* Labels may only be resolved once */ in sqlite3VdbeResolveLabel()
591 p->aLabel[j] = v->nOp; in sqlite3VdbeResolveLabel()
598 void sqlite3VdbeRunOnlyOnce(Vdbe *p){ in sqlite3VdbeRunOnlyOnce() argument
599 sqlite3VdbeAddOp2(p, OP_Expire, 1, 1); in sqlite3VdbeRunOnlyOnce()
605 void sqlite3VdbeReusable(Vdbe *p){ in sqlite3VdbeReusable() argument
607 for(i=1; ALWAYS(i<p->nOp); i++){ in sqlite3VdbeReusable()
608 if( ALWAYS(p->aOp[i].opcode==OP_Expire) ){ in sqlite3VdbeReusable()
609 p->aOp[1].opcode = OP_Noop; in sqlite3VdbeReusable()
641 static Op *opIterNext(VdbeOpIter *p){ in opIterNext() argument
642 Vdbe *v = p->v; in opIterNext()
647 if( p->iSub<=p->nSub ){ in opIterNext()
649 if( p->iSub==0 ){ in opIterNext()
653 aOp = p->apSub[p->iSub-1]->aOp; in opIterNext()
654 nOp = p->apSub[p->iSub-1]->nOp; in opIterNext()
656 assert( p->iAddr<nOp ); in opIterNext()
658 pRet = &aOp[p->iAddr]; in opIterNext()
659 p->iAddr++; in opIterNext()
660 if( p->iAddr==nOp ){ in opIterNext()
661 p->iSub++; in opIterNext()
662 p->iAddr = 0; in opIterNext()
666 int nByte = (p->nSub+1)*sizeof(SubProgram*); in opIterNext()
668 for(j=0; j<p->nSub; j++){ in opIterNext()
669 if( p->apSub[j]==pRet->p4.pProgram ) break; in opIterNext()
671 if( j==p->nSub ){ in opIterNext()
672 p->apSub = sqlite3DbReallocOrFree(v->db, p->apSub, nByte); in opIterNext()
673 if( !p->apSub ){ in opIterNext()
676 p->apSub[p->nSub++] = pRet->p4.pProgram; in opIterNext()
768 void sqlite3VdbeIncrWriteCounter(Vdbe *p, VdbeCursor *pC){ in sqlite3VdbeIncrWriteCounter() argument
774 p->nWrite++; in sqlite3VdbeIncrWriteCounter()
784 void sqlite3VdbeAssertAbortable(Vdbe *p){ in sqlite3VdbeAssertAbortable() argument
785 assert( p->nWrite==0 || p->usesStmtJournal ); in sqlite3VdbeAssertAbortable()
810 static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){ in resolveP2Values() argument
813 Parse *pParse = p->pParse; in resolveP2Values()
815 p->readOnly = 1; in resolveP2Values()
816 p->bIsReader = 0; in resolveP2Values()
817 pOp = &p->aOp[p->nOp-1]; in resolveP2Values()
818 assert( p->aOp[0].opcode==OP_Init ); in resolveP2Values()
831 if( pOp->p2!=0 ) p->readOnly = 0; in resolveP2Values()
836 p->bIsReader = 1; in resolveP2Values()
844 p->readOnly = 0; in resolveP2Values()
845 p->bIsReader = 1; in resolveP2Values()
859 assert( (pOp - p->aOp) >= 3 ); in resolveP2Values()
884 assert( pOp>p->aOp ); in resolveP2Values()
889 sqlite3DbNNFreeNN(p->db, pParse->aLabel); in resolveP2Values()
894 assert( p->bIsReader!=0 || DbMaskAllZero(p->btreeMask) ); in resolveP2Values()
984 int sqlite3VdbeCurrentAddr(Vdbe *p){ in sqlite3VdbeCurrentAddr() argument
985 assert( p->eVdbeState==VDBE_INIT_STATE ); in sqlite3VdbeCurrentAddr()
986 return p->nOp; in sqlite3VdbeCurrentAddr()
998 void sqlite3VdbeVerifyNoMallocRequired(Vdbe *p, int N){ in sqlite3VdbeVerifyNoMallocRequired() argument
999 assert( p->nOp + N <= p->nOpAlloc ); in sqlite3VdbeVerifyNoMallocRequired()
1011 void sqlite3VdbeVerifyNoResultRow(Vdbe *p){ in sqlite3VdbeVerifyNoResultRow() argument
1013 for(i=0; i<p->nOp; i++){ in sqlite3VdbeVerifyNoResultRow()
1014 assert( p->aOp[i].opcode!=OP_ResultRow ); in sqlite3VdbeVerifyNoResultRow()
1025 void sqlite3VdbeVerifyAbortable(Vdbe *p, int onError){ in sqlite3VdbeVerifyAbortable() argument
1026 if( onError==OE_Abort ) sqlite3VdbeAddOp0(p, OP_Abortable); in sqlite3VdbeVerifyAbortable()
1041 VdbeOp *sqlite3VdbeTakeOpArray(Vdbe *p, int *pnOp, int *pnMaxArg){ in sqlite3VdbeTakeOpArray() argument
1042 VdbeOp *aOp = p->aOp; in sqlite3VdbeTakeOpArray()
1043 assert( aOp && !p->db->mallocFailed ); in sqlite3VdbeTakeOpArray()
1046 assert( DbMaskAllZero(p->btreeMask) ); in sqlite3VdbeTakeOpArray()
1048 resolveP2Values(p, pnMaxArg); in sqlite3VdbeTakeOpArray()
1049 *pnOp = p->nOp; in sqlite3VdbeTakeOpArray()
1050 p->aOp = 0; in sqlite3VdbeTakeOpArray()
1062 Vdbe *p, /* Add opcodes to the prepared statement */ in sqlite3VdbeAddOpList() argument
1070 assert( p->eVdbeState==VDBE_INIT_STATE ); in sqlite3VdbeAddOpList()
1071 if( p->nOp + nOp > p->nOpAlloc && growOpArray(p, nOp) ){ in sqlite3VdbeAddOpList()
1074 pFirst = pOut = &p->aOp[p->nOp]; in sqlite3VdbeAddOpList()
1081 pOut->p2 += p->nOp; in sqlite3VdbeAddOpList()
1085 pOut->p4.p = 0; in sqlite3VdbeAddOpList()
1096 if( p->db->flags & SQLITE_VdbeAddopTrace ){ in sqlite3VdbeAddOpList()
1097 sqlite3VdbePrintOp(0, i+p->nOp, &p->aOp[i+p->nOp]); in sqlite3VdbeAddOpList()
1101 p->nOp += nOp; in sqlite3VdbeAddOpList()
1110 Vdbe *p, /* VM to add scanstatus() to */ in sqlite3VdbeScanStatus() argument
1117 sqlite3_int64 nByte = (p->nScan+1) * sizeof(ScanStatus); in sqlite3VdbeScanStatus()
1119 aNew = (ScanStatus*)sqlite3DbRealloc(p->db, p->aScan, nByte); in sqlite3VdbeScanStatus()
1121 ScanStatus *pNew = &aNew[p->nScan++]; in sqlite3VdbeScanStatus()
1126 pNew->zName = sqlite3DbStrDup(p->db, zName); in sqlite3VdbeScanStatus()
1127 p->aScan = aNew; in sqlite3VdbeScanStatus()
1137 void sqlite3VdbeChangeOpcode(Vdbe *p, int addr, u8 iNewOpcode){ in sqlite3VdbeChangeOpcode() argument
1139 sqlite3VdbeGetOp(p,addr)->opcode = iNewOpcode; in sqlite3VdbeChangeOpcode()
1141 void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){ in sqlite3VdbeChangeP1() argument
1143 sqlite3VdbeGetOp(p,addr)->p1 = val; in sqlite3VdbeChangeP1()
1145 void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){ in sqlite3VdbeChangeP2() argument
1146 assert( addr>=0 || p->db->mallocFailed ); in sqlite3VdbeChangeP2()
1147 sqlite3VdbeGetOp(p,addr)->p2 = val; in sqlite3VdbeChangeP2()
1149 void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){ in sqlite3VdbeChangeP3() argument
1151 sqlite3VdbeGetOp(p,addr)->p3 = val; in sqlite3VdbeChangeP3()
1153 void sqlite3VdbeChangeP5(Vdbe *p, u16 p5){ in sqlite3VdbeChangeP5() argument
1154 assert( p->nOp>0 || p->db->mallocFailed ); in sqlite3VdbeChangeP5()
1155 if( p->nOp>0 ) p->aOp[p->nOp-1].p5 = p5; in sqlite3VdbeChangeP5()
1163 void sqlite3VdbeTypeofColumn(Vdbe *p, int iDest){ in sqlite3VdbeTypeofColumn() argument
1164 VdbeOp *pOp = sqlite3VdbeGetLastOp(p); in sqlite3VdbeTypeofColumn()
1174 void sqlite3VdbeJumpHere(Vdbe *p, int addr){ in sqlite3VdbeJumpHere() argument
1175 sqlite3VdbeChangeP2(p, addr, p->nOp); in sqlite3VdbeJumpHere()
1191 void sqlite3VdbeJumpHereOrPopInst(Vdbe *p, int addr){ in sqlite3VdbeJumpHereOrPopInst() argument
1192 if( addr==p->nOp-1 ){ in sqlite3VdbeJumpHereOrPopInst()
1193 assert( p->aOp[addr].opcode==OP_Once in sqlite3VdbeJumpHereOrPopInst()
1194 || p->aOp[addr].opcode==OP_If in sqlite3VdbeJumpHereOrPopInst()
1195 || p->aOp[addr].opcode==OP_FkIfZero ); in sqlite3VdbeJumpHereOrPopInst()
1196 assert( p->aOp[addr].p4type==0 ); in sqlite3VdbeJumpHereOrPopInst()
1198 sqlite3VdbeGetLastOp(p)->iSrcLine = 0; /* Erase VdbeCoverage() macros */ in sqlite3VdbeJumpHereOrPopInst()
1200 p->nOp--; in sqlite3VdbeJumpHereOrPopInst()
1202 sqlite3VdbeChangeP2(p, addr, p->nOp); in sqlite3VdbeJumpHereOrPopInst()
1221 static SQLITE_NOINLINE void freeP4Mem(sqlite3 *db, Mem *p){ in freeP4Mem() argument
1222 if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc); in freeP4Mem()
1223 sqlite3DbNNFreeNN(db, p); in freeP4Mem()
1225 static SQLITE_NOINLINE void freeP4FuncCtx(sqlite3 *db, sqlite3_context *p){ in freeP4FuncCtx() argument
1227 freeEphemeralFunction(db, p->pFunc); in freeP4FuncCtx()
1228 sqlite3DbNNFreeNN(db, p); in freeP4FuncCtx()
1284 if( pOp->p4type <= P4_FREE_IF_LE ) freeP4(db, pOp->p4type, pOp->p4.p); in vdbeFreeOpArray()
1300 void sqlite3VdbeLinkSubProgram(Vdbe *pVdbe, SubProgram *p){ in sqlite3VdbeLinkSubProgram() argument
1301 p->pNext = pVdbe->pProgram; in sqlite3VdbeLinkSubProgram()
1302 pVdbe->pProgram = p; in sqlite3VdbeLinkSubProgram()
1315 int sqlite3VdbeChangeToNoop(Vdbe *p, int addr){ in sqlite3VdbeChangeToNoop() argument
1317 if( p->db->mallocFailed ) return 0; in sqlite3VdbeChangeToNoop()
1318 assert( addr>=0 && addr<p->nOp ); in sqlite3VdbeChangeToNoop()
1319 pOp = &p->aOp[addr]; in sqlite3VdbeChangeToNoop()
1320 freeP4(p->db, pOp->p4type, pOp->p4.p); in sqlite3VdbeChangeToNoop()
1331 int sqlite3VdbeDeletePriorOpcode(Vdbe *p, u8 op){ in sqlite3VdbeDeletePriorOpcode() argument
1332 if( p->nOp>0 && p->aOp[p->nOp-1].opcode==op ){ in sqlite3VdbeDeletePriorOpcode()
1333 return sqlite3VdbeChangeToNoop(p, p->nOp-1); in sqlite3VdbeDeletePriorOpcode()
1392 Vdbe *p, in vdbeChangeP4Full() argument
1398 freeP4(p->db, pOp->p4type, pOp->p4.p); in vdbeChangeP4Full()
1400 pOp->p4.p = 0; in vdbeChangeP4Full()
1403 sqlite3VdbeChangeP4(p, (int)(pOp - p->aOp), zP4, n); in vdbeChangeP4Full()
1406 pOp->p4.z = sqlite3DbStrNDup(p->db, zP4, n); in vdbeChangeP4Full()
1410 void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int n){ in sqlite3VdbeChangeP4() argument
1413 assert( p!=0 ); in sqlite3VdbeChangeP4()
1414 db = p->db; in sqlite3VdbeChangeP4()
1415 assert( p->eVdbeState==VDBE_INIT_STATE ); in sqlite3VdbeChangeP4()
1416 assert( p->aOp!=0 || db->mallocFailed ); in sqlite3VdbeChangeP4()
1421 assert( p->nOp>0 ); in sqlite3VdbeChangeP4()
1422 assert( addr<p->nOp ); in sqlite3VdbeChangeP4()
1424 addr = p->nOp - 1; in sqlite3VdbeChangeP4()
1426 pOp = &p->aOp[addr]; in sqlite3VdbeChangeP4()
1428 vdbeChangeP4Full(p, pOp, zP4, n); in sqlite3VdbeChangeP4()
1438 pOp->p4.p = (void*)zP4; in sqlite3VdbeChangeP4()
1453 void sqlite3VdbeAppendP4(Vdbe *p, void *pP4, int n){ in sqlite3VdbeAppendP4() argument
1457 if( p->db->mallocFailed ){ in sqlite3VdbeAppendP4()
1458 freeP4(p->db, n, pP4); in sqlite3VdbeAppendP4()
1461 assert( p->nOp>0 ); in sqlite3VdbeAppendP4()
1462 pOp = &p->aOp[p->nOp-1]; in sqlite3VdbeAppendP4()
1465 pOp->p4.p = pP4; in sqlite3VdbeAppendP4()
1489 static void vdbeVComment(Vdbe *p, const char *zFormat, va_list ap){ in vdbeVComment() argument
1490 assert( p->nOp>0 || p->aOp==0 ); in vdbeVComment()
1491 assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->pParse->nErr>0 ); in vdbeVComment()
1492 if( p->nOp ){ in vdbeVComment()
1493 assert( p->aOp ); in vdbeVComment()
1494 sqlite3DbFree(p->db, p->aOp[p->nOp-1].zComment); in vdbeVComment()
1495 p->aOp[p->nOp-1].zComment = sqlite3VMPrintf(p->db, zFormat, ap); in vdbeVComment()
1498 void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){ in sqlite3VdbeComment() argument
1500 if( p ){ in sqlite3VdbeComment()
1502 vdbeVComment(p, zFormat, ap); in sqlite3VdbeComment()
1506 void sqlite3VdbeNoopComment(Vdbe *p, const char *zFormat, ...){ in sqlite3VdbeNoopComment() argument
1508 if( p ){ in sqlite3VdbeNoopComment()
1509 sqlite3VdbeAddOp0(p, OP_Noop); in sqlite3VdbeNoopComment()
1511 vdbeVComment(p, zFormat, ap); in sqlite3VdbeNoopComment()
1539 VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){ in sqlite3VdbeGetOp() argument
1543 assert( p->eVdbeState==VDBE_INIT_STATE ); in sqlite3VdbeGetOp()
1544 assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed ); in sqlite3VdbeGetOp()
1545 if( p->db->mallocFailed ){ in sqlite3VdbeGetOp()
1548 return &p->aOp[addr]; in sqlite3VdbeGetOp()
1554 VdbeOp * sqlite3VdbeGetLastOp(Vdbe *p){ in sqlite3VdbeGetLastOp() argument
1555 return sqlite3VdbeGetOp(p, p->nOp - 1); in sqlite3VdbeGetLastOp()
1674 static void displayP4Expr(StrAccum *p, Expr *pExpr){ in displayP4Expr() argument
1679 sqlite3_str_appendf(p, "%Q", pExpr->u.zToken); in displayP4Expr()
1682 sqlite3_str_appendf(p, "%d", pExpr->u.iValue); in displayP4Expr()
1685 sqlite3_str_appendf(p, "NULL"); in displayP4Expr()
1688 sqlite3_str_appendf(p, "r[%d]", pExpr->iTable); in displayP4Expr()
1693 sqlite3_str_appendf(p, "rowid"); in displayP4Expr()
1695 sqlite3_str_appendf(p, "c%d", (int)pExpr->iColumn); in displayP4Expr()
1727 sqlite3_str_appendf(p, "%s", "expr"); in displayP4Expr()
1732 sqlite3_str_appendf(p, "%s(", zOp); in displayP4Expr()
1733 displayP4Expr(p, pExpr->pLeft); in displayP4Expr()
1735 sqlite3_str_append(p, ",", 1); in displayP4Expr()
1736 displayP4Expr(p, pExpr->pRight); in displayP4Expr()
1738 sqlite3_str_append(p, ")", 1); in displayP4Expr()
1870 void sqlite3VdbeUsesBtree(Vdbe *p, int i){ in sqlite3VdbeUsesBtree() argument
1871 assert( i>=0 && i<p->db->nDb && i<(int)sizeof(yDbMask)*8 ); in sqlite3VdbeUsesBtree()
1872 assert( i<(int)sizeof(p->btreeMask)*8 ); in sqlite3VdbeUsesBtree()
1873 DbMaskSet(p->btreeMask, i); in sqlite3VdbeUsesBtree()
1874 if( i!=1 && sqlite3BtreeSharable(p->db->aDb[i].pBt) ){ in sqlite3VdbeUsesBtree()
1875 DbMaskSet(p->lockMask, i); in sqlite3VdbeUsesBtree()
1901 void sqlite3VdbeEnter(Vdbe *p){ in sqlite3VdbeEnter() argument
1906 if( DbMaskAllZero(p->lockMask) ) return; /* The common case */ in sqlite3VdbeEnter()
1907 db = p->db; in sqlite3VdbeEnter()
1911 if( i!=1 && DbMaskTest(p->lockMask,i) && ALWAYS(aDb[i].pBt!=0) ){ in sqlite3VdbeEnter()
1922 static SQLITE_NOINLINE void vdbeLeave(Vdbe *p){ in vdbeLeave() argument
1927 db = p->db; in vdbeLeave()
1931 if( i!=1 && DbMaskTest(p->lockMask,i) && ALWAYS(aDb[i].pBt!=0) ){ in vdbeLeave()
1936 void sqlite3VdbeLeave(Vdbe *p){ in sqlite3VdbeLeave() argument
1937 if( DbMaskAllZero(p->lockMask) ) return; /* The common case */ in sqlite3VdbeLeave()
1938 vdbeLeave(p); in sqlite3VdbeLeave()
1990 static void initMemArray(Mem *p, int N, sqlite3 *db, u16 flags){ in initMemArray() argument
1993 p->flags = flags; in initMemArray()
1994 p->db = db; in initMemArray()
1995 p->szMalloc = 0; in initMemArray()
1997 p->pScopyFrom = 0; in initMemArray()
1999 p++; in initMemArray()
2012 static void releaseMemArray(Mem *p, int N){ in releaseMemArray() argument
2013 if( p && N ){ in releaseMemArray()
2014 Mem *pEnd = &p[N]; in releaseMemArray()
2015 sqlite3 *db = p->db; in releaseMemArray()
2018 if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc); in releaseMemArray()
2019 }while( (++p)<pEnd ); in releaseMemArray()
2023 assert( (&p[1])==pEnd || p[0].db==p[1].db ); in releaseMemArray()
2024 assert( sqlite3VdbeCheckMemInvariants(p) ); in releaseMemArray()
2038 testcase( p->flags & MEM_Agg ); in releaseMemArray()
2039 testcase( p->flags & MEM_Dyn ); in releaseMemArray()
2040 if( p->flags&(MEM_Agg|MEM_Dyn) ){ in releaseMemArray()
2041 testcase( (p->flags & MEM_Dyn)!=0 && p->xDel==sqlite3VdbeFrameMemDel ); in releaseMemArray()
2042 sqlite3VdbeMemRelease(p); in releaseMemArray()
2043 p->flags = MEM_Undefined; in releaseMemArray()
2044 }else if( p->szMalloc ){ in releaseMemArray()
2045 sqlite3DbNNFreeNN(db, p->zMalloc); in releaseMemArray()
2046 p->szMalloc = 0; in releaseMemArray()
2047 p->flags = MEM_Undefined; in releaseMemArray()
2051 p->flags = MEM_Undefined; in releaseMemArray()
2054 }while( (++p)<pEnd ); in releaseMemArray()
2095 Vdbe *p, /* The statement being explained */ in sqlite3VdbeNextOpcode() argument
2117 nRow = p->nOp; in sqlite3VdbeNextOpcode()
2133 p->rc = SQLITE_OK; in sqlite3VdbeNextOpcode()
2137 if( i<p->nOp ){ in sqlite3VdbeNextOpcode()
2140 aOp = p->aOp; in sqlite3VdbeNextOpcode()
2145 i -= p->nOp; in sqlite3VdbeNextOpcode()
2167 p->rc = sqlite3VdbeMemGrow(pSub, nByte, nSub!=0); in sqlite3VdbeNextOpcode()
2168 if( p->rc!=SQLITE_OK ){ in sqlite3VdbeNextOpcode()
2206 void sqlite3VdbeFrameDelete(VdbeFrame *p){ in sqlite3VdbeFrameDelete() argument
2208 Mem *aMem = VdbeFrameMem(p); in sqlite3VdbeFrameDelete()
2209 VdbeCursor **apCsr = (VdbeCursor **)&aMem[p->nChildMem]; in sqlite3VdbeFrameDelete()
2210 assert( sqlite3VdbeFrameIsValid(p) ); in sqlite3VdbeFrameDelete()
2211 for(i=0; i<p->nChildCsr; i++){ in sqlite3VdbeFrameDelete()
2212 if( apCsr[i] ) sqlite3VdbeFreeCursorNN(p->v, apCsr[i]); in sqlite3VdbeFrameDelete()
2214 releaseMemArray(aMem, p->nChildMem); in sqlite3VdbeFrameDelete()
2215 sqlite3VdbeDeleteAuxData(p->v->db, &p->pAuxData, -1, 0); in sqlite3VdbeFrameDelete()
2216 sqlite3DbFree(p->v->db, p); in sqlite3VdbeFrameDelete()
2239 Vdbe *p /* The VDBE */ in sqlite3VdbeList() argument
2242 sqlite3 *db = p->db; /* The database connection */ in sqlite3VdbeList()
2245 Mem *pMem = &p->aMem[1]; /* First Mem of result set */ in sqlite3VdbeList()
2246 int bListSubprogs = (p->explain==1 || (db->flags & SQLITE_TriggerEQP)!=0); in sqlite3VdbeList()
2250 assert( p->explain ); in sqlite3VdbeList()
2251 assert( p->eVdbeState==VDBE_RUN_STATE ); in sqlite3VdbeList()
2252 assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY || p->rc==SQLITE_NOMEM ); in sqlite3VdbeList()
2259 p->pResultSet = 0; in sqlite3VdbeList()
2261 if( p->rc==SQLITE_NOMEM ){ in sqlite3VdbeList()
2273 assert( p->nMem>9 ); in sqlite3VdbeList()
2274 pSub = &p->aMem[9]; in sqlite3VdbeList()
2280 rc = sqlite3VdbeNextOpcode(p, pSub, p->explain==2, &p->pc, &i, &aOp); in sqlite3VdbeList()
2285 p->rc = SQLITE_INTERRUPT; in sqlite3VdbeList()
2287 sqlite3VdbeError(p, sqlite3ErrStr(p->rc)); in sqlite3VdbeList()
2290 if( p->explain==2 ){ in sqlite3VdbeList()
2295 p->nResColumn = 4; in sqlite3VdbeList()
2314 p->nResColumn = 8; in sqlite3VdbeList()
2316 p->pResultSet = pMem; in sqlite3VdbeList()
2318 p->rc = SQLITE_NOMEM; in sqlite3VdbeList()
2321 p->rc = SQLITE_OK; in sqlite3VdbeList()
2334 void sqlite3VdbePrintSql(Vdbe *p){ in sqlite3VdbePrintSql() argument
2336 if( p->zSql ){ in sqlite3VdbePrintSql()
2337 z = p->zSql; in sqlite3VdbePrintSql()
2338 }else if( p->nOp>=1 ){ in sqlite3VdbePrintSql()
2339 const VdbeOp *pOp = &p->aOp[0]; in sqlite3VdbePrintSql()
2353 void sqlite3VdbeIOTraceSql(Vdbe *p){ in sqlite3VdbeIOTraceSql() argument
2354 int nOp = p->nOp; in sqlite3VdbeIOTraceSql()
2358 pOp = &p->aOp[0]; in sqlite3VdbeIOTraceSql()
2404 struct ReusableSpace *p, /* Bulk memory available for allocation */ in allocSpace() argument
2408 assert( EIGHT_BYTE_ALIGNMENT(p->pSpace) ); in allocSpace()
2411 if( nByte <= p->nFree ){ in allocSpace()
2412 p->nFree -= nByte; in allocSpace()
2413 pBuf = &p->pSpace[p->nFree]; in allocSpace()
2415 p->nNeeded += nByte; in allocSpace()
2426 void sqlite3VdbeRewind(Vdbe *p){ in sqlite3VdbeRewind() argument
2430 assert( p!=0 ); in sqlite3VdbeRewind()
2431 assert( p->eVdbeState==VDBE_INIT_STATE in sqlite3VdbeRewind()
2432 || p->eVdbeState==VDBE_READY_STATE in sqlite3VdbeRewind()
2433 || p->eVdbeState==VDBE_HALT_STATE ); in sqlite3VdbeRewind()
2437 assert( p->nOp>0 ); in sqlite3VdbeRewind()
2439 p->eVdbeState = VDBE_READY_STATE; in sqlite3VdbeRewind()
2442 for(i=0; i<p->nMem; i++){ in sqlite3VdbeRewind()
2443 assert( p->aMem[i].db==p->db ); in sqlite3VdbeRewind()
2446 p->pc = -1; in sqlite3VdbeRewind()
2447 p->rc = SQLITE_OK; in sqlite3VdbeRewind()
2448 p->errorAction = OE_Abort; in sqlite3VdbeRewind()
2449 p->nChange = 0; in sqlite3VdbeRewind()
2450 p->cacheCtr = 1; in sqlite3VdbeRewind()
2451 p->minWriteFileFormat = 255; in sqlite3VdbeRewind()
2452 p->iStatement = 0; in sqlite3VdbeRewind()
2453 p->nFkConstraint = 0; in sqlite3VdbeRewind()
2455 for(i=0; i<p->nOp; i++){ in sqlite3VdbeRewind()
2456 p->aOp[i].cnt = 0; in sqlite3VdbeRewind()
2457 p->aOp[i].cycles = 0; in sqlite3VdbeRewind()
2481 Vdbe *p, /* The VDBE */ in sqlite3VdbeMakeReady() argument
2492 assert( p!=0 ); in sqlite3VdbeMakeReady()
2493 assert( p->nOp>0 ); in sqlite3VdbeMakeReady()
2495 assert( p->eVdbeState==VDBE_INIT_STATE ); in sqlite3VdbeMakeReady()
2496 assert( pParse==p->pParse ); in sqlite3VdbeMakeReady()
2497 p->pVList = pParse->pVList; in sqlite3VdbeMakeReady()
2499 db = p->db; in sqlite3VdbeMakeReady()
2518 n = ROUND8P(sizeof(Op)*p->nOp); /* Bytes of opcode memory used */ in sqlite3VdbeMakeReady()
2519 x.pSpace = &((u8*)p->aOp)[n]; /* Unused opcode memory */ in sqlite3VdbeMakeReady()
2525 resolveP2Values(p, &nArg); in sqlite3VdbeMakeReady()
2526 p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort); in sqlite3VdbeMakeReady()
2534 p->explain = pParse->explain; in sqlite3VdbeMakeReady()
2536 sqlite3VdbeSetNumCols(p, 4); in sqlite3VdbeMakeReady()
2540 sqlite3VdbeSetNumCols(p, 8); in sqlite3VdbeMakeReady()
2545 sqlite3VdbeSetColName(p, i-iFirst, COLNAME_NAME, in sqlite3VdbeMakeReady()
2549 p->expired = 0; in sqlite3VdbeMakeReady()
2562 p->aMem = allocSpace(&x, 0, nMem*sizeof(Mem)); in sqlite3VdbeMakeReady()
2563 p->aVar = allocSpace(&x, 0, nVar*sizeof(Mem)); in sqlite3VdbeMakeReady()
2564 p->apArg = allocSpace(&x, 0, nArg*sizeof(Mem*)); in sqlite3VdbeMakeReady()
2565 p->apCsr = allocSpace(&x, 0, nCursor*sizeof(VdbeCursor*)); in sqlite3VdbeMakeReady()
2567 p->anExec = allocSpace(&x, 0, p->nOp*sizeof(i64)); in sqlite3VdbeMakeReady()
2570 x.pSpace = p->pFree = sqlite3DbMallocRawNN(db, x.nNeeded); in sqlite3VdbeMakeReady()
2573 p->aMem = allocSpace(&x, p->aMem, nMem*sizeof(Mem)); in sqlite3VdbeMakeReady()
2574 p->aVar = allocSpace(&x, p->aVar, nVar*sizeof(Mem)); in sqlite3VdbeMakeReady()
2575 p->apArg = allocSpace(&x, p->apArg, nArg*sizeof(Mem*)); in sqlite3VdbeMakeReady()
2576 p->apCsr = allocSpace(&x, p->apCsr, nCursor*sizeof(VdbeCursor*)); in sqlite3VdbeMakeReady()
2578 p->anExec = allocSpace(&x, p->anExec, p->nOp*sizeof(i64)); in sqlite3VdbeMakeReady()
2584 p->nVar = 0; in sqlite3VdbeMakeReady()
2585 p->nCursor = 0; in sqlite3VdbeMakeReady()
2586 p->nMem = 0; in sqlite3VdbeMakeReady()
2588 p->nCursor = nCursor; in sqlite3VdbeMakeReady()
2589 p->nVar = (ynVar)nVar; in sqlite3VdbeMakeReady()
2590 initMemArray(p->aVar, nVar, db, MEM_Null); in sqlite3VdbeMakeReady()
2591 p->nMem = nMem; in sqlite3VdbeMakeReady()
2592 initMemArray(p->aMem, nMem, db, MEM_Undefined); in sqlite3VdbeMakeReady()
2593 memset(p->apCsr, 0, nCursor*sizeof(VdbeCursor*)); in sqlite3VdbeMakeReady()
2595 memset(p->anExec, 0, p->nOp*sizeof(i64)); in sqlite3VdbeMakeReady()
2598 sqlite3VdbeRewind(p); in sqlite3VdbeMakeReady()
2605 void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){ in sqlite3VdbeFreeCursor() argument
2606 if( pCx ) sqlite3VdbeFreeCursorNN(p,pCx); in sqlite3VdbeFreeCursor()
2608 void sqlite3VdbeFreeCursorNN(Vdbe *p, VdbeCursor *pCx){ in sqlite3VdbeFreeCursorNN() argument
2611 sqlite3VdbeSorterClose(p->db, pCx); in sqlite3VdbeFreeCursorNN()
2635 static void closeCursorsInFrame(Vdbe *p){ in closeCursorsInFrame() argument
2637 for(i=0; i<p->nCursor; i++){ in closeCursorsInFrame()
2638 VdbeCursor *pC = p->apCsr[i]; in closeCursorsInFrame()
2640 sqlite3VdbeFreeCursorNN(p, pC); in closeCursorsInFrame()
2641 p->apCsr[i] = 0; in closeCursorsInFrame()
2680 static void closeAllCursors(Vdbe *p){ in closeAllCursors() argument
2681 if( p->pFrame ){ in closeAllCursors()
2683 for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent); in closeAllCursors()
2685 p->pFrame = 0; in closeAllCursors()
2686 p->nFrame = 0; in closeAllCursors()
2688 assert( p->nFrame==0 ); in closeAllCursors()
2689 closeCursorsInFrame(p); in closeAllCursors()
2690 releaseMemArray(p->aMem, p->nMem); in closeAllCursors()
2691 while( p->pDelFrame ){ in closeAllCursors()
2692 VdbeFrame *pDel = p->pDelFrame; in closeAllCursors()
2693 p->pDelFrame = pDel->pParent; in closeAllCursors()
2698 if( p->pAuxData ) sqlite3VdbeDeleteAuxData(p->db, &p->pAuxData, -1, 0); in closeAllCursors()
2699 assert( p->pAuxData==0 ); in closeAllCursors()
2708 void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){ in sqlite3VdbeSetNumCols() argument
2710 sqlite3 *db = p->db; in sqlite3VdbeSetNumCols()
2712 if( p->nResColumn ){ in sqlite3VdbeSetNumCols()
2713 releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); in sqlite3VdbeSetNumCols()
2714 sqlite3DbFree(db, p->aColName); in sqlite3VdbeSetNumCols()
2717 p->nResColumn = (u16)nResColumn; in sqlite3VdbeSetNumCols()
2718 p->aColName = (Mem*)sqlite3DbMallocRawNN(db, sizeof(Mem)*n ); in sqlite3VdbeSetNumCols()
2719 if( p->aColName==0 ) return; in sqlite3VdbeSetNumCols()
2720 initMemArray(p->aColName, n, db, MEM_Null); in sqlite3VdbeSetNumCols()
2734 Vdbe *p, /* Vdbe being configured */ in sqlite3VdbeSetColName() argument
2742 assert( idx<p->nResColumn ); in sqlite3VdbeSetColName()
2744 if( p->db->mallocFailed ){ in sqlite3VdbeSetColName()
2748 assert( p->aColName!=0 ); in sqlite3VdbeSetColName()
2749 pColName = &(p->aColName[idx+var*p->nResColumn]); in sqlite3VdbeSetColName()
2761 static int vdbeCommit(sqlite3 *db, Vdbe *p){ in vdbeCommit() argument
2773 UNUSED_PARAMETER(p); in vdbeCommit()
2782 rc = sqlite3VtabSync(db, p); in vdbeCommit()
3026 Vdbe *p; in checkActiveVdbeCnt() local
3030 p = db->pVdbe; in checkActiveVdbeCnt()
3031 while( p ){ in checkActiveVdbeCnt()
3032 if( sqlite3_stmt_busy((sqlite3_stmt*)p) ){ in checkActiveVdbeCnt()
3034 if( p->readOnly==0 ) nWrite++; in checkActiveVdbeCnt()
3035 if( p->bIsReader ) nRead++; in checkActiveVdbeCnt()
3037 p = p->pVNext; in checkActiveVdbeCnt()
3057 static SQLITE_NOINLINE int vdbeCloseStatement(Vdbe *p, int eOp){ in vdbeCloseStatement() argument
3058 sqlite3 *const db = p->db; in vdbeCloseStatement()
3061 const int iSavepoint = p->iStatement-1; in vdbeCloseStatement()
3065 assert( p->iStatement==(db->nStatement+db->nSavepoint) ); in vdbeCloseStatement()
3083 p->iStatement = 0; in vdbeCloseStatement()
3098 db->nDeferredCons = p->nStmtDefCons; in vdbeCloseStatement()
3099 db->nDeferredImmCons = p->nStmtDefImmCons; in vdbeCloseStatement()
3103 int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){ in sqlite3VdbeCloseStatement() argument
3104 if( p->db->nStatement && p->iStatement ){ in sqlite3VdbeCloseStatement()
3105 return vdbeCloseStatement(p, eOp); in sqlite3VdbeCloseStatement()
3122 int sqlite3VdbeCheckFk(Vdbe *p, int deferred){ in sqlite3VdbeCheckFk() argument
3123 sqlite3 *db = p->db; in sqlite3VdbeCheckFk()
3125 || (!deferred && p->nFkConstraint>0) in sqlite3VdbeCheckFk()
3127 p->rc = SQLITE_CONSTRAINT_FOREIGNKEY; in sqlite3VdbeCheckFk()
3128 p->errorAction = OE_Abort; in sqlite3VdbeCheckFk()
3129 sqlite3VdbeError(p, "FOREIGN KEY constraint failed"); in sqlite3VdbeCheckFk()
3130 if( (p->prepFlags & SQLITE_PREPARE_SAVESQL)==0 ) return SQLITE_ERROR; in sqlite3VdbeCheckFk()
3150 int sqlite3VdbeHalt(Vdbe *p){ in sqlite3VdbeHalt() argument
3152 sqlite3 *db = p->db; in sqlite3VdbeHalt()
3170 assert( p->eVdbeState==VDBE_RUN_STATE ); in sqlite3VdbeHalt()
3172 p->rc = SQLITE_NOMEM_BKPT; in sqlite3VdbeHalt()
3174 closeAllCursors(p); in sqlite3VdbeHalt()
3179 if( p->bIsReader ){ in sqlite3VdbeHalt()
3185 sqlite3VdbeEnter(p); in sqlite3VdbeHalt()
3188 if( p->rc ){ in sqlite3VdbeHalt()
3189 mrc = p->rc & 0xff; in sqlite3VdbeHalt()
3210 if( !p->readOnly || mrc!=SQLITE_INTERRUPT ){ in sqlite3VdbeHalt()
3211 if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) && p->usesStmtJournal ){ in sqlite3VdbeHalt()
3220 p->nChange = 0; in sqlite3VdbeHalt()
3226 if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){ in sqlite3VdbeHalt()
3227 sqlite3VdbeCheckFk(p, 0); in sqlite3VdbeHalt()
3238 && db->nVdbeWrite==(p->readOnly==0) in sqlite3VdbeHalt()
3240 if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){ in sqlite3VdbeHalt()
3241 rc = sqlite3VdbeCheckFk(p, 1); in sqlite3VdbeHalt()
3243 if( NEVER(p->readOnly) ){ in sqlite3VdbeHalt()
3244 sqlite3VdbeLeave(p); in sqlite3VdbeHalt()
3256 rc = vdbeCommit(db, p); in sqlite3VdbeHalt()
3258 if( rc==SQLITE_BUSY && p->readOnly ){ in sqlite3VdbeHalt()
3259 sqlite3VdbeLeave(p); in sqlite3VdbeHalt()
3262 p->rc = rc; in sqlite3VdbeHalt()
3264 p->nChange = 0; in sqlite3VdbeHalt()
3273 p->nChange = 0; in sqlite3VdbeHalt()
3277 if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){ in sqlite3VdbeHalt()
3279 }else if( p->errorAction==OE_Abort ){ in sqlite3VdbeHalt()
3285 p->nChange = 0; in sqlite3VdbeHalt()
3296 rc = sqlite3VdbeCloseStatement(p, eStatementOp); in sqlite3VdbeHalt()
3298 if( p->rc==SQLITE_OK || (p->rc&0xff)==SQLITE_CONSTRAINT ){ in sqlite3VdbeHalt()
3299 p->rc = rc; in sqlite3VdbeHalt()
3300 sqlite3DbFree(db, p->zErrMsg); in sqlite3VdbeHalt()
3301 p->zErrMsg = 0; in sqlite3VdbeHalt()
3306 p->nChange = 0; in sqlite3VdbeHalt()
3313 if( p->changeCntOn ){ in sqlite3VdbeHalt()
3315 sqlite3VdbeSetChanges(db, p->nChange); in sqlite3VdbeHalt()
3319 p->nChange = 0; in sqlite3VdbeHalt()
3323 sqlite3VdbeLeave(p); in sqlite3VdbeHalt()
3328 if( !p->readOnly ) db->nVdbeWrite--; in sqlite3VdbeHalt()
3329 if( p->bIsReader ) db->nVdbeRead--; in sqlite3VdbeHalt()
3333 p->eVdbeState = VDBE_HALT_STATE; in sqlite3VdbeHalt()
3336 p->rc = SQLITE_NOMEM_BKPT; in sqlite3VdbeHalt()
3348 return (p->rc==SQLITE_BUSY ? SQLITE_BUSY : SQLITE_OK); in sqlite3VdbeHalt()
3356 void sqlite3VdbeResetStepResult(Vdbe *p){ in sqlite3VdbeResetStepResult() argument
3357 p->rc = SQLITE_OK; in sqlite3VdbeResetStepResult()
3368 int sqlite3VdbeTransferError(Vdbe *p){ in sqlite3VdbeTransferError() argument
3369 sqlite3 *db = p->db; in sqlite3VdbeTransferError()
3370 int rc = p->rc; in sqlite3VdbeTransferError()
3371 if( p->zErrMsg ){ in sqlite3VdbeTransferError()
3375 sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT); in sqlite3VdbeTransferError()
3418 int sqlite3VdbeReset(Vdbe *p){ in sqlite3VdbeReset() argument
3424 db = p->db; in sqlite3VdbeReset()
3430 if( p->eVdbeState==VDBE_RUN_STATE ) sqlite3VdbeHalt(p); in sqlite3VdbeReset()
3437 if( p->pc>=0 ){ in sqlite3VdbeReset()
3438 vdbeInvokeSqllog(p); in sqlite3VdbeReset()
3439 if( db->pErr || p->zErrMsg ){ in sqlite3VdbeReset()
3440 sqlite3VdbeTransferError(p); in sqlite3VdbeReset()
3442 db->errCode = p->rc; in sqlite3VdbeReset()
3451 if( p->apCsr ) for(i=0; i<p->nCursor; i++) assert( p->apCsr[i]==0 ); in sqlite3VdbeReset()
3452 if( p->aMem ){ in sqlite3VdbeReset()
3453 for(i=0; i<p->nMem; i++) assert( p->aMem[i].flags==MEM_Undefined ); in sqlite3VdbeReset()
3456 if( p->zErrMsg ){ in sqlite3VdbeReset()
3457 sqlite3DbFree(db, p->zErrMsg); in sqlite3VdbeReset()
3458 p->zErrMsg = 0; in sqlite3VdbeReset()
3460 p->pResultSet = 0; in sqlite3VdbeReset()
3462 p->nWrite = 0; in sqlite3VdbeReset()
3472 for(i=0; i<p->nOp; i++){ in sqlite3VdbeReset()
3473 fprintf(out, "%02x", p->aOp[i].opcode); in sqlite3VdbeReset()
3476 if( p->zSql ){ in sqlite3VdbeReset()
3479 for(i=0; (c = p->zSql[i])!=0; i++){ in sqlite3VdbeReset()
3486 for(i=0; i<p->nOp; i++){ in sqlite3VdbeReset()
3489 p->aOp[i].cnt, in sqlite3VdbeReset()
3490 p->aOp[i].cycles, in sqlite3VdbeReset()
3491 p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0 in sqlite3VdbeReset()
3494 sqlite3VdbePrintOp(out, i, &p->aOp[i]); in sqlite3VdbeReset()
3500 return p->rc & db->errMask; in sqlite3VdbeReset()
3507 int sqlite3VdbeFinalize(Vdbe *p){ in sqlite3VdbeFinalize() argument
3512 if( p->eVdbeState>=VDBE_READY_STATE ){ in sqlite3VdbeFinalize()
3513 rc = sqlite3VdbeReset(p); in sqlite3VdbeFinalize()
3514 assert( (rc & p->db->errMask)==rc ); in sqlite3VdbeFinalize()
3516 sqlite3VdbeDelete(p); in sqlite3VdbeFinalize()
3564 static void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){ in sqlite3VdbeClearObject() argument
3567 assert( p->db==0 || p->db==db ); in sqlite3VdbeClearObject()
3568 if( p->aColName ){ in sqlite3VdbeClearObject()
3569 releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); in sqlite3VdbeClearObject()
3570 sqlite3DbNNFreeNN(db, p->aColName); in sqlite3VdbeClearObject()
3572 for(pSub=p->pProgram; pSub; pSub=pNext){ in sqlite3VdbeClearObject()
3577 if( p->eVdbeState!=VDBE_INIT_STATE ){ in sqlite3VdbeClearObject()
3578 releaseMemArray(p->aVar, p->nVar); in sqlite3VdbeClearObject()
3579 if( p->pVList ) sqlite3DbNNFreeNN(db, p->pVList); in sqlite3VdbeClearObject()
3580 if( p->pFree ) sqlite3DbNNFreeNN(db, p->pFree); in sqlite3VdbeClearObject()
3582 vdbeFreeOpArray(db, p->aOp, p->nOp); in sqlite3VdbeClearObject()
3583 if( p->zSql ) sqlite3DbNNFreeNN(db, p->zSql); in sqlite3VdbeClearObject()
3585 sqlite3DbFree(db, p->zNormSql); in sqlite3VdbeClearObject()
3588 for(pThis=p->pDblStr; pThis; pThis=pNext){ in sqlite3VdbeClearObject()
3597 for(i=0; i<p->nScan; i++){ in sqlite3VdbeClearObject()
3598 sqlite3DbFree(db, p->aScan[i].zName); in sqlite3VdbeClearObject()
3600 sqlite3DbFree(db, p->aScan); in sqlite3VdbeClearObject()
3608 void sqlite3VdbeDelete(Vdbe *p){ in sqlite3VdbeDelete() argument
3611 assert( p!=0 ); in sqlite3VdbeDelete()
3612 db = p->db; in sqlite3VdbeDelete()
3615 sqlite3VdbeClearObject(db, p); in sqlite3VdbeDelete()
3617 assert( p->ppVPrev!=0 ); in sqlite3VdbeDelete()
3618 *p->ppVPrev = p->pVNext; in sqlite3VdbeDelete()
3619 if( p->pVNext ){ in sqlite3VdbeDelete()
3620 p->pVNext->ppVPrev = p->ppVPrev; in sqlite3VdbeDelete()
3623 sqlite3DbNNFreeNN(db, p); in sqlite3VdbeDelete()
3631 int SQLITE_NOINLINE sqlite3VdbeFinishMoveto(VdbeCursor *p){ in sqlite3VdbeFinishMoveto() argument
3636 assert( p->deferredMoveto ); in sqlite3VdbeFinishMoveto()
3637 assert( p->isTable ); in sqlite3VdbeFinishMoveto()
3638 assert( p->eCurType==CURTYPE_BTREE ); in sqlite3VdbeFinishMoveto()
3639 rc = sqlite3BtreeTableMoveto(p->uc.pCursor, p->movetoTarget, 0, &res); in sqlite3VdbeFinishMoveto()
3645 p->deferredMoveto = 0; in sqlite3VdbeFinishMoveto()
3646 p->cacheStatus = CACHE_STALE; in sqlite3VdbeFinishMoveto()
3657 int SQLITE_NOINLINE sqlite3VdbeHandleMovedCursor(VdbeCursor *p){ in sqlite3VdbeHandleMovedCursor() argument
3659 assert( p->eCurType==CURTYPE_BTREE ); in sqlite3VdbeHandleMovedCursor()
3660 assert( p->uc.pCursor!=0 ); in sqlite3VdbeHandleMovedCursor()
3661 assert( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ); in sqlite3VdbeHandleMovedCursor()
3662 rc = sqlite3BtreeCursorRestore(p->uc.pCursor, &isDifferentRow); in sqlite3VdbeHandleMovedCursor()
3663 p->cacheStatus = CACHE_STALE; in sqlite3VdbeHandleMovedCursor()
3664 if( isDifferentRow ) p->nullRow = 1; in sqlite3VdbeHandleMovedCursor()
3672 int sqlite3VdbeCursorRestore(VdbeCursor *p){ in sqlite3VdbeCursorRestore() argument
3673 assert( p->eCurType==CURTYPE_BTREE || IsNullCursor(p) ); in sqlite3VdbeCursorRestore()
3674 if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){ in sqlite3VdbeCursorRestore()
3675 return sqlite3VdbeHandleMovedCursor(p); in sqlite3VdbeCursorRestore()
4045 UnpackedRecord *p; /* Unpacked record to return */ in sqlite3VdbeAllocUnpackedRecord() local
4048 p = (UnpackedRecord *)sqlite3DbMallocRaw(pKeyInfo->db, nByte); in sqlite3VdbeAllocUnpackedRecord()
4049 if( !p ) return 0; in sqlite3VdbeAllocUnpackedRecord()
4050 p->aMem = (Mem*)&((char*)p)[ROUND8P(sizeof(UnpackedRecord))]; in sqlite3VdbeAllocUnpackedRecord()
4052 p->pKeyInfo = pKeyInfo; in sqlite3VdbeAllocUnpackedRecord()
4053 p->nField = pKeyInfo->nKeyField + 1; in sqlite3VdbeAllocUnpackedRecord()
4054 return p; in sqlite3VdbeAllocUnpackedRecord()
4066 UnpackedRecord *p /* Populate this structure before returning. */ in sqlite3VdbeRecordUnpack() argument
4073 Mem *pMem = p->aMem; in sqlite3VdbeRecordUnpack()
4075 p->default_rc = 0; in sqlite3VdbeRecordUnpack()
4092 if( (++u)>=p->nField ) break; in sqlite3VdbeRecordUnpack()
4102 p->nField = u; in sqlite3VdbeRecordUnpack()
4921 RecordCompare sqlite3VdbeFindCompare(UnpackedRecord *p){ in sqlite3VdbeFindCompare() argument
4935 if( p->pKeyInfo->nAllField<=13 ){ in sqlite3VdbeFindCompare()
4936 int flags = p->aMem[0].flags; in sqlite3VdbeFindCompare()
4937 if( p->pKeyInfo->aSortFlags[0] ){ in sqlite3VdbeFindCompare()
4938 if( p->pKeyInfo->aSortFlags[0] & KEYINFO_ORDER_BIGNULL ){ in sqlite3VdbeFindCompare()
4941 p->r1 = 1; in sqlite3VdbeFindCompare()
4942 p->r2 = -1; in sqlite3VdbeFindCompare()
4944 p->r1 = -1; in sqlite3VdbeFindCompare()
4945 p->r2 = 1; in sqlite3VdbeFindCompare()
4948 p->u.i = p->aMem[0].u.i; in sqlite3VdbeFindCompare()
4955 && p->pKeyInfo->aColl[0]==0 in sqlite3VdbeFindCompare()
4958 p->u.z = p->aMem[0].z; in sqlite3VdbeFindCompare()
4959 p->n = p->aMem[0].n; in sqlite3VdbeFindCompare()
5122 Vdbe *p; in sqlite3ExpirePreparedStatements() local
5123 for(p = db->pVdbe; p; p=p->pVNext){ in sqlite3ExpirePreparedStatements()
5124 p->expired = iCode+1; in sqlite3ExpirePreparedStatements()
5222 void sqlite3VtabImportErrmsg(Vdbe *p, sqlite3_vtab *pVtab){ in sqlite3VtabImportErrmsg() argument
5224 sqlite3 *db = p->db; in sqlite3VtabImportErrmsg()
5225 sqlite3DbFree(db, p->zErrMsg); in sqlite3VtabImportErrmsg()
5226 p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg); in sqlite3VtabImportErrmsg()
5243 static void vdbeFreeUnpacked(sqlite3 *db, int nField, UnpackedRecord *p){ in vdbeFreeUnpacked() argument
5245 if( p ){ in vdbeFreeUnpacked()
5248 Mem *pMem = &p->aMem[i]; in vdbeFreeUnpacked()
5251 sqlite3DbNNFreeNN(db, p); in vdbeFreeUnpacked()