| 1010 | return sqlite3ApiExit(0, rc); | |
|---|---|---|
| 1011 | } | |
| 1012 | #endif /* SQLITE_OMIT_UTF16 */ | |
| 1013 | ||
| 1014 | /* | |
| 1015 | ** The following routine destroys a virtual machine that is created by | |
| 1016 | ** the sqlite3_compile() routine. The integer returned is an SQLITE_ | |
| 1017 | ** success/failure code that describes the result of executing the virtual | |
| 1018 | ** machine. | |
| 1019 | ** | |
| 1020 | ** This routine sets the error code and string returned by | |
| 1021 | ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). | |
| 1022 | */ | |
| 1023 | int sqlite3_finalize(sqlite3_stmt *pStmt){ | |
| 1024 | int rc; | |
| 1025 | if( pStmt==0 ){ | |
| 1026 | rc = SQLITE_OK; | |
| 1027 | }else{ | |
| 1028 | rc = sqlite3VdbeFinalize((Vdbe*)pStmt); | |
| 1029 | } | |
| 1030 | return rc; | |
| 1031 | } | |
| 1032 | ||
| 1033 | /* | |
| 1034 | ** Terminate the current execution of an SQL statement and reset it | |
| 1035 | ** back to its starting state so that it can be reused. A success code from | |
| 1036 | ** the prior execution is returned. | |
| 1037 | ** | |
| 1038 | ** This routine sets the error code and string returned by | |
| 1039 | ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). | |
| 1040 | */ | |
| 1041 | int sqlite3_reset(sqlite3_stmt *pStmt){ | |
| 1042 | int rc; | |
| 1043 | if( pStmt==0 ){ | |
| 1044 | rc = SQLITE_OK; | |
| 1045 | }else{ |
| 159 | if( p2 ){ | |
|---|---|---|
| 160 | *(int *)p2 = n; | |
| 161 | p2 += 8; | |
| 162 | } | |
| 163 | return (void *)p2; | |
| 164 | } | |
| 165 | void sqlite3GenericFree(void *p){ | |
| 166 | assert(p); | |
| 167 | free((void *)((char *)p - 8)); | |
| 168 | } | |
| 169 | int sqlite3GenericAllocationSize(void *p){ | |
| 170 | return p ? *(int *)((char *)p - 8) : 0; | |
| 171 | } | |
| 172 | #else | |
| 173 | void *sqlite3GenericMalloc(int n){ | |
| 174 | char *p = (char *)malloc(n); | |
| 175 | return (void *)p; | |
| 176 | } | |
| 177 | void *sqlite3GenericRealloc(void *p, int n){ | |
| 178 | assert(n>0); | |
| 179 | p = realloc(p, n); | |
| 180 | return p; | |
| 181 | } | |
| 182 | void sqlite3GenericFree(void *p){ | |
| 183 | assert(p); | |
| 184 | free(p); | |
| 185 | } | |
| 186 | /* Never actually used, but needed for the linker */ | |
| 187 | int sqlite3GenericAllocationSize(void *p){ return 0; } | |
| 188 | #endif |
| 153 | /* | |
|---|---|---|
| 154 | ** Execute the statement pStmt, either until a row of data is ready, the | |
| 155 | ** statement is completely executed or an error occurs. | |
| 156 | ** | |
| 157 | ** This routine implements the bulk of the logic behind the sqlite_step() | |
| 158 | ** API. The only thing omitted is the automatic recompile if a | |
| 159 | ** schema change has occurred. That detail is handled by the | |
| 160 | ** outer sqlite3_step() wrapper procedure. | |
| 161 | */ | |
| 162 | static int sqlite3Step(Vdbe *p){ | |
| 163 | sqlite3 *db; | |
| 164 | int rc; | |
| 165 | ||
| 166 | /* Assert that malloc() has not failed */ | |
| 167 | assert( !sqlite3MallocFailed() ); | |
| 168 | ||
| 169 | if( p==0 || p->magic!=VDBE_MAGIC_RUN ){ | |
| 170 | return SQLITE_MISUSE; | |
| 171 | } | |
| 172 | if( p->aborted ){ | |
| 173 | return SQLITE_ABORT; | |
| 174 | } | |
| 175 | if( p->pc<=0 && p->expired ){ | |
| 176 | if( p->rc==SQLITE_OK ){ | |
| 177 | p->rc = SQLITE_SCHEMA; | |
| 178 | } | |
| 179 | rc = SQLITE_ERROR; | |
| 180 | goto end_of_step; | |
| 181 | } | |
| 182 | db = p->db; | |
| 183 | if( sqlite3SafetyOn(db) ){ | |
| 184 | p->rc = SQLITE_MISUSE; | |
| 185 | return SQLITE_MISUSE; | |
| 186 | } | |
| 187 | if( p->pc<0 ){ | |
| 188 | /* If there are no other statements currently running, then | |
| 189 | ** reset the interrupt flag. This prevents a call to sqlite3_interrupt | |
| 190 | ** from interrupting a statement that has not yet started. | |
| 191 | */ | |
| 192 | if( db->activeVdbeCnt==0 ){ | |
| 193 | db->u1.isInterrupted = 0; | |
| 194 | } | |
| 195 | ||
| 196 | #ifndef SQLITE_OMIT_TRACE | |
| 197 | /* Invoke the trace callback if there is one | |
| 198 | */ | |
| 199 | if( db->xTrace && !db->init.busy ){ | |
| 200 | assert( p->nOp>0 ); | |
| 201 | assert( p->aOp[p->nOp-1].opcode==OP_Noop ); | |
| 202 | assert( p->aOp[p->nOp-1].p3!=0 ); | |
| 203 | assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC ); | |
| 204 | sqlite3SafetyOff(db); | |
| 205 | db->xTrace(db->pTraceArg, p->aOp[p->nOp-1].p3); | |
| 206 | if( sqlite3SafetyOn(db) ){ | |
| 207 | p->rc = SQLITE_MISUSE; | |
| 208 | return SQLITE_MISUSE; | |
| 209 | } | |
| 210 | } | |
| 211 | if( db->xProfile && !db->init.busy ){ | |
| 212 | double rNow; | |
| 213 | sqlite3OsCurrentTime(&rNow); | |
| 214 | p->startTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0; | |
| 215 | } | |
| 216 | #endif | |
| 217 | ||
| 218 | /* Print a copy of SQL as it is executed if the SQL_TRACE pragma is turned | |
| 219 | ** on in debugging mode. | |
| 220 | */ | |
| 221 | #ifdef SQLITE_DEBUG | |
| 222 | if( (db->flags & SQLITE_SqlTrace)!=0 ){ | |
| 223 | sqlite3DebugPrintf("SQL-trace: %s\n", p->aOp[p->nOp-1].p3); | |
| 224 | } | |
| 225 | #endif /* SQLITE_DEBUG */ | |
| 226 | ||
| 227 | db->activeVdbeCnt++; | |
| 228 | p->pc = 0; | |
| 229 | } | |
| 230 | #ifndef SQLITE_OMIT_EXPLAIN | |
| 231 | if( p->explain ){ | |
| 232 | rc = sqlite3VdbeList(p); | |
| 233 | }else | |
| 234 | #endif /* SQLITE_OMIT_EXPLAIN */ | |
| 235 | { | |
| 236 | rc = sqlite3VdbeExec(p); | |
| 237 | } | |
| 238 | ||
| 239 | if( sqlite3SafetyOff(db) ){ | |
| 240 | rc = SQLITE_MISUSE; | |
| 241 | } | |
| 242 | ||
| 243 | #ifndef SQLITE_OMIT_TRACE | |
| 244 | /* Invoke the profile callback if there is one | |
| 245 | */ | |
| 246 | if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy ){ | |
| 247 | double rNow; | |
| 248 | u64 elapseTime; | |
| 249 | ||
| 250 | sqlite3OsCurrentTime(&rNow); | |
| 251 | elapseTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0 - p->startTime; | |
| 252 | assert( p->nOp>0 ); | |
| 253 | assert( p->aOp[p->nOp-1].opcode==OP_Noop ); | |
| 254 | assert( p->aOp[p->nOp-1].p3!=0 ); | |
| 255 | assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC ); | |
| 256 | db->xProfile(db->pProfileArg, p->aOp[p->nOp-1].p3, elapseTime); | |
| 257 | } | |
| 258 | #endif | |
| 259 | ||
| 260 | sqlite3Error(p->db, rc, 0); | |
| 261 | p->rc = sqlite3ApiExit(p->db, p->rc); | |
| 262 | end_of_step: | |
| 263 | assert( (rc&0xff)==rc ); | |
| 264 | if( p->zSql && (rc&0xff)<SQLITE_ROW ){ | |
| 265 | /* This behavior occurs if sqlite3_prepare_v2() was used to build | |
| 266 | ** the prepared statement. Return error codes directly */ | |
| 267 | return p->rc; | |
| 268 | }else{ | |
| 269 | /* This is for legacy sqlite3_prepare() builds and when the code | |
| 270 | ** is SQLITE_ROW or SQLITE_DONE */ | |
| 271 | return rc; | |
| 272 | } | |
| 273 | } | |
| 274 | ||
| 275 | /* | |
| 276 | ** This is the top-level implementation of sqlite3_step(). Call | |
| 277 | ** sqlite3Step() to do most of the work. If a schema error occurs, | |
| 278 | ** call sqlite3Reprepare() and try again. | |
| 279 | */ | |
| 280 | #ifdef SQLITE_OMIT_PARSER | |
| 281 | int sqlite3_step(sqlite3_stmt *pStmt){ | |
| 282 | return sqlite3Step((Vdbe*)pStmt); | |
| 283 | } | |
| 284 | #else | |
| 285 | int sqlite3_step(sqlite3_stmt *pStmt){ | |
| 286 | int cnt = 0; | |
| 287 | int rc; | |
| 288 | Vdbe *v = (Vdbe*)pStmt; | |
| 289 | while( (rc = sqlite3Step(v))==SQLITE_SCHEMA | |
| 290 | && cnt++ < 5 | |
| 291 | && sqlite3Reprepare(v) ){ | |
| 292 | sqlite3_reset(pStmt); | |
| 293 | v->expired = 0; | |
| 294 | } | |
| 295 | return rc; | |
| 296 | } | |
| 297 | #endif | |
| 298 | ||
| 299 | /* | |
| 300 | ** Extract the user data from a sqlite3_context structure and return a | |
| 301 | ** pointer to it. | |
| 302 | */ | |
| 303 | void *sqlite3_user_data(sqlite3_context *p){ | |
| 304 | assert( p && p->pFunc ); | |
| 305 | return p->pFunc->pUserData; | |
| 306 | } | |
| 307 | ||
| 308 | /* | |
| 309 | ** The following is the implementation of an SQL function that always | |
| 310 | ** fails with an error message stating that the function is used in the |
| 574 | sqlite3ReleaseThreadData(); | |
|---|---|---|
| 575 | } | |
| 576 | } | |
| 577 | } | |
| 578 | #else | |
| 579 | #define updateMemoryUsedCount(x) /* no-op */ | |
| 580 | #endif | |
| 581 | ||
| 582 | /* | |
| 583 | ** Allocate and return N bytes of uninitialised memory by calling | |
| 584 | ** sqlite3OsMalloc(). If the Malloc() call fails, attempt to free memory | |
| 585 | ** by calling sqlite3_release_memory(). | |
| 586 | */ | |
| 587 | void *sqlite3MallocRaw(int n, int doMemManage){ | |
| 588 | void *p = 0; | |
| 589 | if( n>0 && !sqlite3MallocFailed() && (!doMemManage || enforceSoftLimit(n)) ){ | |
| 590 | while( (p = OSMALLOC(n))==0 && sqlite3_release_memory(n) ){} | |
| 591 | if( !p ){ | |
| 592 | sqlite3FailedMalloc(); | |
| 593 | OSMALLOC_FAILED(); | |
| 594 | }else if( doMemManage ){ | |
| 595 | updateMemoryUsedCount(OSSIZEOF(p)); | |
| 596 | } | |
| 597 | } | |
| 598 | return p; | |
| 599 | } | |
| 600 | ||
| 601 | /* | |
| 602 | ** Resize the allocation at p to n bytes by calling sqlite3OsRealloc(). The | |
| 603 | ** pointer to the new allocation is returned. If the Realloc() call fails, | |
| 604 | ** attempt to free memory by calling sqlite3_release_memory(). | |
| 605 | */ | |
| 606 | void *sqlite3Realloc(void *p, int n){ | |
| 607 | if( sqlite3MallocFailed() ){ | |
| 608 | return 0; | |
| 609 | } | |
| 610 | ||
| 611 | if( !p ){ | |
| 612 | return sqlite3Malloc(n, 1); | |
| 613 | }else{ | |
| 621 | sqlite3FailedMalloc(); | |
| 622 | OSMALLOC_FAILED(); | |
| 623 | }else{ | |
| 624 | updateMemoryUsedCount(OSSIZEOF(np) - origSize); | |
| 625 | } | |
| 626 | } | |
| 627 | return np; | |
| 628 | } | |
| 629 | } | |
| 630 | ||
| 631 | /* | |
| 632 | ** Free the memory pointed to by p. p must be either a NULL pointer or a | |
| 633 | ** value returned by a previous call to sqlite3Malloc() or sqlite3Realloc(). | |
| 634 | */ | |
| 635 | void sqlite3FreeX(void *p){ | |
| 636 | if( p ){ | |
| 637 | updateMemoryUsedCount(0 - OSSIZEOF(p)); | |
| 638 | OSFREE(p); | |
| 639 | } | |
| 640 | } | |
| 641 | ||
| 642 | /* | |
| 643 | ** A version of sqliteMalloc() that is always a function, not a macro. | |
| 644 | ** Currently, this is used only to alloc to allocate the parser engine. | |
| 645 | */ | |
| 646 | void *sqlite3MallocX(int n){ | |
| 647 | return sqliteMalloc(n); | |
| 648 | } | |
| 649 | ||
| 650 | /* | |
| 651 | ** sqlite3Malloc | |
| 652 | ** sqlite3ReallocOrFree | |
| 653 | ** | |
| 654 | ** These two are implemented as wrappers around sqlite3MallocRaw(), | |
| 732 | zNew = sqlite3MallocRaw(n+1, 1); | |
| 733 | if( zNew ){ | |
| 734 | memcpy(zNew, z, n); | |
| 735 | zNew[n] = 0; | |
| 736 | } | |
| 737 | return zNew; | |
| 738 | } | |
| 739 | ||
| 740 | /* | |
| 741 | ** Create a string from the 2nd and subsequent arguments (up to the | |
| 742 | ** first NULL argument), store the string in memory obtained from | |
| 743 | ** sqliteMalloc() and make the pointer indicated by the 1st argument | |
| 744 | ** point to that string. The 1st argument must either be NULL or | |
| 745 | ** point to memory obtained from sqliteMalloc(). | |
| 746 | */ | |
| 747 | void sqlite3SetString(char **pz, ...){ | |
| 748 | va_list ap; | |
| 749 | int nByte; | |
| 750 | const char *z; | |
| 751 | char *zResult; | |
| 752 | ||
| 753 | if( pz==0 ) return; | |
| 754 | nByte = 1; | |
| 755 | va_start(ap, pz); | |
| 756 | while( (z = va_arg(ap, const char*))!=0 ){ | |
| 757 | nByte += strlen(z); | |
| 758 | } | |
| 759 | va_end(ap); | |
| 760 | sqliteFree(*pz); | |
| 761 | *pz = zResult = sqliteMallocRaw( nByte ); | |
| 762 | if( zResult==0 ){ | |
| 763 | return; | |
| 764 | } | |
| 765 | *zResult = 0; | |
| 766 | va_start(ap, pz); | |
| 767 | while( (z = va_arg(ap, const char*))!=0 ){ | |
| 768 | strcpy(zResult, z); | |
| 769 | zResult += strlen(zResult); | |
| 770 | } | |
| 771 | va_end(ap); | |
| 772 | } | |
| 773 | ||
| 774 | /* | |
| 775 | ** Set the most recent error code and error string for the sqlite | |
| 776 | ** handle "db". The error code is set to "err_code". | |
| 777 | ** | |
| 778 | ** If it is not NULL, string zFormat specifies the format of the | |
| 779 | ** error string in the style of the printf functions: The following | |
| 780 | ** format characters are allowed: | |
| 781 | ** | |
| 782 | ** %s Insert a string | |
| 783 | ** %z A string that should be freed after use | |
| 784 | ** %d Insert an integer | |
| 785 | ** %T Insert a token | |
| 786 | ** %S Insert the first element of a SrcList | |
| 787 | ** | |
| 788 | ** zFormat and any string tokens that follow it are assumed to be | |
| 789 | ** encoded in UTF-8. | |
| 790 | ** | |
| 791 | ** To clear the most recent error for sqlite handle "db", sqlite3Error | |
| 792 | ** should be called with err_code set to SQLITE_OK and zFormat set | |
| 793 | ** to NULL. | |
| 794 | */ | |
| 795 | void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat, ...){ | |
| 796 | if( db && (db->pErr || (db->pErr = sqlite3ValueNew())!=0) ){ | |
| 797 | db->errCode = err_code; | |
| 798 | if( zFormat ){ | |
| 799 | char *z; | |
| 800 | va_list ap; | |
| 801 | va_start(ap, zFormat); | |
| 802 | z = sqlite3VMPrintf(zFormat, ap); | |
| 803 | va_end(ap); | |
| 804 | sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, sqlite3FreeX); | |
| 805 | }else{ | |
| 806 | sqlite3ValueSetStr(db->pErr, 0, 0, SQLITE_UTF8, SQLITE_STATIC); | |
| 807 | } | |
| 808 | } | |
| 809 | } | |
| 810 | ||
| 811 | /* | |
| 812 | ** Add an error message to pParse->zErrMsg and increment pParse->nErr. | |
| 813 | ** The following formatting characters are allowed: | |
| 814 | ** | |
| 815 | ** %s Insert a string | |
| 816 | ** %z A string that should be freed after use | |
| 817 | ** %d Insert an integer | |
| 818 | ** %T Insert a token | |
| 819 | ** %S Insert the first element of a SrcList | |
| 820 | ** | |
| 821 | ** This function should be used to report any error that occurs whilst | |
| 822 | ** compiling an SQL statement (i.e. within sqlite3_prepare()). The | |
| 823 | ** last thing the sqlite3_prepare() function does is copy the error | |
| 1133 | ** when this routine is called. | |
| 1134 | ** | |
| 1135 | ** This routine is a attempt to detect if two threads use the | |
| 1136 | ** same sqlite* pointer at the same time. There is a race | |
| 1137 | ** condition so it is possible that the error is not detected. | |
| 1138 | ** But usually the problem will be seen. The result will be an | |
| 1139 | ** error which can be used to debug the application that is | |
| 1140 | ** using SQLite incorrectly. | |
| 1141 | ** | |
| 1142 | ** Ticket #202: If db->magic is not a valid open value, take care not | |
| 1143 | ** to modify the db structure at all. It could be that db is a stale | |
| 1144 | ** pointer. In other words, it could be that there has been a prior | |
| 1145 | ** call to sqlite3_close(db) and db has been deallocated. And we do | |
| 1146 | ** not want to write into deallocated memory. | |
| 1147 | */ | |
| 1148 | int sqlite3SafetyOn(sqlite3 *db){ | |
| 1149 | if( db->magic==SQLITE_MAGIC_OPEN ){ | |
| 1150 | db->magic = SQLITE_MAGIC_BUSY; | |
| 1151 | return 0; | |
| 1152 | }else if( db->magic==SQLITE_MAGIC_BUSY ){ | |
| 1153 | db->magic = SQLITE_MAGIC_ERROR; | |
| 1154 | db->u1.isInterrupted = 1; | |
| 1155 | } | |
| 1156 | return 1; | |
| 1157 | } | |
| 1158 | ||
| 1159 | /* | |
| 1160 | ** Change the magic from SQLITE_MAGIC_BUSY to SQLITE_MAGIC_OPEN. | |
| 1161 | ** Return an error (non-zero) if the magic was not SQLITE_MAGIC_BUSY | |
| 1162 | ** when this routine is called. | |
| 1163 | */ | |
| 1164 | int sqlite3SafetyOff(sqlite3 *db){ | |
| 1165 | if( db->magic==SQLITE_MAGIC_BUSY ){ | |
| 1166 | db->magic = SQLITE_MAGIC_OPEN; | |
| 1167 | return 0; | |
| 1168 | }else if( db->magic==SQLITE_MAGIC_OPEN ){ | |
| 1169 | db->magic = SQLITE_MAGIC_ERROR; | |
| 1170 | db->u1.isInterrupted = 1; | |
| 1171 | } | |
| 1172 | return 1; | |
| 1173 | } | |
| 1174 | ||
| 1175 | /* | |
| 1176 | ** Check to make sure we have a valid db pointer. This test is not | |
| 1177 | ** foolproof but it does provide some measure of protection against | |
| 1178 | ** misuse of the interface such as passing in db pointers that are | |
| 1179 | ** NULL or which have been previously closed. If this routine returns | |
| 1180 | ** TRUE it means that the db pointer is invalid and should not be | |
| 1181 | ** dereferenced for any reason. The calling function should invoke | |
| 1182 | ** SQLITE_MISUSE immediately. | |
| 1183 | */ | |
| 1184 | int sqlite3SafetyCheck(sqlite3 *db){ | |
| 1185 | int magic; | |
| 1186 | if( db==0 ) return 1; | |
| 1187 | magic = db->magic; | |
| 1428 | /* | |
| 1429 | ** This function must be called before exiting any API function (i.e. | |
| 1430 | ** returning control to the user) that has called sqlite3Malloc or | |
| 1431 | ** sqlite3Realloc. | |
| 1432 | ** | |
| 1433 | ** The returned value is normally a copy of the second argument to this | |
| 1434 | ** function. However, if a malloc() failure has occured since the previous | |
| 1435 | ** invocation SQLITE_NOMEM is returned instead. | |
| 1436 | ** | |
| 1437 | ** If the first argument, db, is not NULL and a malloc() error has occured, | |
| 1438 | ** then the connection error-code (the value returned by sqlite3_errcode()) | |
| 1439 | ** is set to SQLITE_NOMEM. | |
| 1440 | */ | |
| 1441 | static int mallocHasFailed = 0; | |
| 1442 | int sqlite3ApiExit(sqlite3* db, int rc){ | |
| 1443 | if( sqlite3MallocFailed() ){ | |
| 1444 | mallocHasFailed = 0; | |
| 1445 | sqlite3OsLeaveMutex(); | |
| 1446 | sqlite3Error(db, SQLITE_NOMEM, 0); | |
| 1447 | rc = SQLITE_NOMEM; | |
| 1448 | } | |
| 1449 | return rc & (db ? db->errMask : 0xff); | |
| 1450 | } | |
| 1451 | ||
| 1452 | /* | |
| 1453 | ** Return true is a malloc has failed in this thread since the last call | |
| 1454 | ** to sqlite3ApiExit(), or false otherwise. | |
| 1455 | */ | |
| 1456 | int sqlite3MallocFailed(){ | |
| 1457 | return (mallocHasFailed && sqlite3OsInMutex(1)); | |
| 1458 | } | |
| 1459 | ||
| 1460 | /* | |
| 1461 | ** Set the "malloc has failed" condition to true for this thread. | |
| 1462 | */ | |
| 1463 | void sqlite3FailedMalloc(){ | |
| 1464 | sqlite3OsEnterMutex(); | |
| 1465 | assert( mallocHasFailed==0 ); | |
| 1466 | mallocHasFailed = 1; | |
| 1467 | } | |
| 1468 | ||
| 1469 | #ifdef SQLITE_MEMDEBUG | |
| 1470 | /* | |
| 1471 | ** This function sets a flag in the thread-specific-data structure that will | |
| 1472 | ** cause an assert to fail if sqliteMalloc() or sqliteRealloc() is called. |
| 2588 | }else{ | |
|---|---|---|
| 2589 | rc = SQLITE_OK; | |
| 2590 | } | |
| 2591 | pBt->inStmt = 0; | |
| 2592 | return rc; | |
| 2593 | } | |
| 2594 | ||
| 2595 | /* | |
| 2596 | ** Rollback the active statement subtransaction. If no subtransaction | |
| 2597 | ** is active this routine is a no-op. | |
| 2598 | ** | |
| 2599 | ** All cursors will be invalidated by this operation. Any attempt | |
| 2600 | ** to use a cursor that was open at the beginning of this operation | |
| 2601 | ** will result in an error. | |
| 2602 | */ | |
| 2603 | int sqlite3BtreeRollbackStmt(Btree *p){ | |
| 2604 | int rc = SQLITE_OK; | |
| 2605 | BtShared *pBt = p->pBt; | |
| 2606 | sqlite3MallocDisallow(); | |
| 2607 | if( pBt->inStmt && !pBt->readOnly ){ | |
| 2608 | rc = sqlite3pager_stmt_rollback(pBt->pPager); | |
| 2609 | assert( countWriteCursors(pBt)==0 ); | |
| 2610 | pBt->inStmt = 0; | |
| 2611 | } | |
| 2612 | sqlite3MallocAllow(); | |
| 2613 | return rc; | |
| 2614 | } | |
| 2615 | ||
| 2616 | /* | |
| 2617 | ** Default key comparison function to be used if no comparison function | |
| 2618 | ** is specified on the sqlite3BtreeCursor() call. | |
| 2619 | */ | |
| 2620 | static int dfltCompare( | |
| 2621 | void *NotUsed, /* User data is not used */ | |
| 2622 | int n1, const void *p1, /* First key to compare */ | |
| 2623 | int n2, const void *p2 /* Second key to compare */ | |
| 2624 | ){ | |
| 2625 | int c; | |
| 2626 | c = memcmp(p1, p2, n1<n2 ? n1 : n2); | |
| 2627 | if( c==0 ){ | |
| 2628 | c = n1 - n2; |
| 406 | ** | |
|---|---|---|
| 407 | ** If the callback ever returns non-zero, then the program exits | |
| 408 | ** immediately. There will be no error message but the p->rc field is | |
| 409 | ** set to SQLITE_ABORT and this routine will return SQLITE_ERROR. | |
| 410 | ** | |
| 411 | ** A memory allocation error causes p->rc to be set to SQLITE_NOMEM and this | |
| 412 | ** routine to return SQLITE_ERROR. | |
| 413 | ** | |
| 414 | ** Other fatal errors return SQLITE_ERROR. | |
| 415 | ** | |
| 416 | ** After this routine has finished, sqlite3VdbeFinalize() should be | |
| 417 | ** used to clean up the mess that was left behind. | |
| 418 | */ | |
| 419 | int sqlite3VdbeExec( | |
| 420 | Vdbe *p /* The VDBE */ | |
| 421 | ){ | |
| 422 | int pc; /* The program counter */ | |
| 423 | Op *pOp; /* Current operation */ | |
| 424 | int rc = SQLITE_OK; /* Value to return */ | |
| 425 | sqlite3 *db = p->db; /* The database */ | |
| 426 | u8 encoding = ENC(db); /* The database encoding */ | |
| 427 | Mem *pTos; /* Top entry in the operand stack */ | |
| 428 | #ifdef VDBE_PROFILE | |
| 429 | unsigned long long start; /* CPU clock count at start of opcode */ | |
| 430 | int origPc; /* Program counter at start of opcode */ | |
| 431 | #endif | |
| 432 | #ifndef SQLITE_OMIT_PROGRESS_CALLBACK | |
| 433 | int nProgressOps = 0; /* Opcodes executed since progress callback. */ | |
| 434 | #endif | |
| 435 | #ifndef NDEBUG | |
| 436 | Mem *pStackLimit; | |
| 437 | #endif | |
| 438 | ||
| 439 | if( p->magic!=VDBE_MAGIC_RUN ) return SQLITE_MISUSE; | |
| 440 | assert( db->magic==SQLITE_MAGIC_BUSY ); | |
| 441 | pTos = p->pTos; | |
| 442 | if( p->rc==SQLITE_NOMEM ){ | |
| 443 | /* This happens if a malloc() inside a call to sqlite3_column_text() or | |
| 444 | ** sqlite3_column_text16() failed. */ | |
| 445 | goto no_mem; | |
| 446 | } | |
| 447 | assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY ); | |
| 448 | p->rc = SQLITE_OK; | |
| 449 | assert( p->explain==0 ); | |
| 450 | if( p->popStack ){ | |
| 451 | popStack(&pTos, p->popStack); | |
| 452 | p->popStack = 0; | |
| 453 | } | |
| 454 | p->resOnStack = 0; | |
| 455 | db->busyHandler.nBusy = 0; | |
| 456 | CHECK_FOR_INTERRUPT; | |
| 457 | #ifdef SQLITE_DEBUG | |
| 458 | if( (p->db->flags & SQLITE_VdbeListing)!=0 | |
| 459 | || sqlite3OsFileExists("vdbe_explain") | |
| 460 | ){ | |
| 461 | int i; | |
| 462 | printf("VDBE Program Listing:\n"); | |
| 463 | sqlite3VdbePrintSql(p); | |
| 464 | for(i=0; i<p->nOp; i++){ | |
| 465 | sqlite3VdbePrintOp(stdout, i, &p->aOp[i]); | |
| 466 | } | |
| 467 | } | |
| 468 | if( sqlite3OsFileExists("vdbe_trace") ){ | |
| 469 | p->trace = stdout; | |
| 470 | } | |
| 471 | #endif | |
| 472 | for(pc=p->pc; rc==SQLITE_OK; pc++){ | |
| 473 | assert( pc>=0 && pc<p->nOp ); | |
| 474 | assert( pTos<=&p->aStack[pc] ); | |
| 475 | if( sqlite3MallocFailed() ) goto no_mem; | |
| 476 | #ifdef VDBE_PROFILE | |
| 477 | origPc = pc; | |
| 478 | start = hwtime(); | |
| 479 | #endif | |
| 480 | pOp = &p->aOp[pc]; | |
| 481 | ||
| 482 | /* Only allow tracing if SQLITE_DEBUG is defined. | |
| 483 | */ | |
| 484 | #ifdef SQLITE_DEBUG | |
| 485 | if( p->trace ){ | |
| 486 | if( pc==0 ){ | |
| 487 | printf("VDBE Execution Trace:\n"); | |
| 488 | sqlite3VdbePrintSql(p); | |
| 489 | } | |
| 490 | sqlite3VdbePrintOp(p->trace, pc, pOp); | |
| 491 | } | |
| 492 | if( p->trace==0 && pc==0 && sqlite3OsFileExists("vdbe_sqltrace") ){ | |
| 493 | sqlite3VdbePrintSql(p); | |
| 494 | } | |
| 495 | #endif | |
| 496 | ||
| 497 | ||
| 498 | /* Check to see if we need to simulate an interrupt. This only happens | |
| 499 | ** if we have a special test build. | |
| 500 | */ | |
| 501 | #ifdef SQLITE_TEST | |
| 502 | if( sqlite3_interrupt_count>0 ){ | |
| 503 | sqlite3_interrupt_count--; | |
| 504 | if( sqlite3_interrupt_count==0 ){ | |
| 505 | sqlite3_interrupt(db); | |
| 506 | } | |
| 507 | } | |
| 508 | #endif | |
| 509 | ||
| 510 | #ifndef SQLITE_OMIT_PROGRESS_CALLBACK | |
| 511 | /* Call the progress callback if it is configured and the required number | |
| 512 | ** of VDBE ops have been executed (either since this invocation of | |
| 513 | ** sqlite3VdbeExec() or since last time the progress callback was called). | |
| 514 | ** If the progress callback returns non-zero, exit the virtual machine with | |
| 515 | ** a return code SQLITE_ABORT. | |
| 516 | */ | |
| 517 | if( db->xProgress ){ | |
| 518 | if( db->nProgressOps==nProgressOps ){ | |
| 519 | if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse; | |
| 520 | if( db->xProgress(db->pProgressArg)!=0 ){ | |
| 521 | sqlite3SafetyOn(db); | |
| 522 | rc = SQLITE_ABORT; | |
| 523 | continue; /* skip to the next iteration of the for loop */ | |
| 524 | } | |
| 525 | nProgressOps = 0; | |
| 526 | if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse; | |
| 527 | } | |
| 528 | nProgressOps++; | |
| 529 | } | |
| 530 | #endif | |
| 531 | ||
| 532 | #ifndef NDEBUG | |
| 533 | /* This is to check that the return value of static function | |
| 534 | ** opcodeNoPush() (see vdbeaux.c) returns values that match the | |
| 535 | ** implementation of the virtual machine in this file. If | |
| 536 | ** opcodeNoPush() returns non-zero, then the stack is guarenteed | |
| 537 | ** not to grow when the opcode is executed. If it returns zero, then | |
| 538 | ** the stack may grow by at most 1. | |
| 539 | ** | |
| 540 | ** The global wrapper function sqlite3VdbeOpcodeUsesStack() is not | |
| 541 | ** available if NDEBUG is defined at build time. | |
| 542 | */ | |
| 543 | pStackLimit = pTos; | |
| 544 | if( !sqlite3VdbeOpcodeNoPush(pOp->opcode) ){ | |
| 545 | pStackLimit++; | |
| 546 | } | |
| 547 | #endif | |
| 548 | ||
| 549 | switch( pOp->opcode ){ | |
| 550 | ||
| 551 | /***************************************************************************** | |
| 552 | ** What follows is a massive switch statement where each case implements a | |
| 553 | ** separate instruction in the virtual machine. If we follow the usual | |
| 554 | ** indentation conventions, each case should be indented by 6 spaces. But | |
| 555 | ** that is a lot of wasted space on the left margin. So the code within | |
| 556 | ** the switch statement will break with convention and be flush-left. Another | |
| 557 | ** big comment (similar to this one) will mark the point in the code where | |
| 558 | ** we transition back to normal indentation. | |
| 559 | ** | |
| 560 | ** The formatting of each case is important. The makefile for SQLite | |
| 561 | ** generates two C files "opcodes.h" and "opcodes.c" by scanning this | |
| 562 | ** file looking for lines that begin with "case OP_". The opcodes.h files | |
| 563 | ** will be filled with #defines that give unique integer values to each | |
| 2322 | rc = sqlite3BtreeBeginStmt(pBt); | |
| 2323 | } | |
| 2324 | } | |
| 2325 | break; | |
| 2326 | } | |
| 2327 | ||
| 2328 | /* Opcode: AutoCommit P1 P2 * | |
| 2329 | ** | |
| 2330 | ** Set the database auto-commit flag to P1 (1 or 0). If P2 is true, roll | |
| 2331 | ** back any currently active btree transactions. If there are any active | |
| 2332 | ** VMs (apart from this one), then the COMMIT or ROLLBACK statement fails. | |
| 2333 | ** | |
| 2334 | ** This instruction causes the VM to halt. | |
| 2335 | */ | |
| 2336 | case OP_AutoCommit: { /* no-push */ | |
| 2337 | u8 i = pOp->p1; | |
| 2338 | u8 rollback = pOp->p2; | |
| 2339 | ||
| 2340 | assert( i==1 || i==0 ); | |
| 2341 | assert( i==1 || rollback==0 ); | |
| 2342 | ||
| 2343 | assert( db->activeVdbeCnt>0 ); /* At least this one VM is active */ | |
| 2344 | ||
| 2345 | if( db->activeVdbeCnt>1 && i && !db->autoCommit ){ | |
| 2346 | /* If this instruction implements a COMMIT or ROLLBACK, other VMs are | |
| 2347 | ** still running, and a transaction is active, return an error indicating | |
| 2348 | ** that the other VMs must complete first. | |
| 2349 | */ | |
| 2350 | sqlite3SetString(&p->zErrMsg, "cannot ", rollback?"rollback":"commit", | |
| 2351 | " transaction - SQL statements in progress", (char*)0); | |
| 2352 | rc = SQLITE_ERROR; | |
| 2353 | }else if( i!=db->autoCommit ){ | |
| 2354 | if( pOp->p2 ){ | |
| 2355 | assert( i==1 ); | |
| 2356 | sqlite3RollbackAll(db); | |
| 2357 | db->autoCommit = 1; | |
| 2358 | }else{ | |
| 2359 | db->autoCommit = i; | |
| 2360 | if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){ | |
| 2361 | p->pTos = pTos; | |
| 2362 | p->pc = pc; | |
| 2363 | db->autoCommit = 1-i; | |
| 2364 | p->rc = SQLITE_BUSY; | |
| 4884 | */ | |
| 4885 | default: { | |
| 4886 | assert( 0 ); | |
| 4887 | break; | |
| 4888 | } | |
| 4889 | ||
| 4890 | /***************************************************************************** | |
| 4891 | ** The cases of the switch statement above this line should all be indented | |
| 4892 | ** by 6 spaces. But the left-most 6 spaces have been removed to improve the | |
| 4893 | ** readability. From this point on down, the normal indentation rules are | |
| 4894 | ** restored. | |
| 4895 | *****************************************************************************/ | |
| 4896 | } | |
| 4897 | ||
| 4898 | /* Make sure the stack limit was not exceeded */ | |
| 4899 | assert( pTos<=pStackLimit ); | |
| 4900 | ||
| 4901 | #ifdef VDBE_PROFILE | |
| 4902 | { | |
| 4903 | long long elapse = hwtime() - start; | |
| 4904 | pOp->cycles += elapse; | |
| 4905 | pOp->cnt++; | |
| 4906 | #if 0 | |
| 4907 | fprintf(stdout, "%10lld ", elapse); | |
| 4908 | sqlite3VdbePrintOp(stdout, origPc, &p->aOp[origPc]); | |
| 4909 | #endif | |
| 4910 | } | |
| 4911 | #endif | |
| 4912 | ||
| 4913 | /* The following code adds nothing to the actual functionality | |
| 4914 | ** of the program. It is only here for testing and debugging. | |
| 4915 | ** On the other hand, it does burn CPU cycles every time through | |
| 4916 | ** the evaluator loop. So we can leave it out when NDEBUG is defined. | |
| 4917 | */ | |
| 4918 | #ifndef NDEBUG | |
| 4919 | /* Sanity checking on the top element of the stack. If the previous | |
| 4920 | ** instruction was VNoChange, then the flags field of the top | |
| 4921 | ** of the stack is set to 0. This is technically invalid for a memory | |
| 4922 | ** cell, so avoid calling MemSanity() in this case. | |
| 4923 | */ | |
| 4924 | if( pTos>=p->aStack && pTos->flags ){ | |
| 4925 | sqlite3VdbeMemSanity(pTos); | |
| 4926 | } | |
| 4927 | assert( pc>=-1 && pc<p->nOp ); | |
| 4928 | #ifdef SQLITE_DEBUG | |
| 4929 | /* Code for tracing the vdbe stack. */ | |
| 4930 | if( p->trace && pTos>=p->aStack ){ | |
| 4931 | int i; | |
| 4932 | fprintf(p->trace, "Stack:"); | |
| 4933 | for(i=0; i>-5 && &pTos[i]>=p->aStack; i--){ | |
| 4934 | if( pTos[i].flags & MEM_Null ){ | |
| 4935 | fprintf(p->trace, " NULL"); | |
| 4936 | }else if( (pTos[i].flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){ | |
| 4937 | fprintf(p->trace, " si:%lld", pTos[i].i); | |
| 4938 | }else if( pTos[i].flags & MEM_Int ){ | |
| 4939 | fprintf(p->trace, " i:%lld", pTos[i].i); | |
| 4940 | }else if( pTos[i].flags & MEM_Real ){ | |
| 4941 | fprintf(p->trace, " r:%g", pTos[i].r); | |
| 4942 | }else{ | |
| 4943 | char zBuf[100]; | |
| 4944 | sqlite3VdbeMemPrettyPrint(&pTos[i], zBuf); | |
| 4945 | fprintf(p->trace, " "); | |
| 4946 | fprintf(p->trace, "%s", zBuf); | |
| 4947 | } | |
| 4948 | } | |
| 4949 | if( rc!=0 ) fprintf(p->trace," rc=%d",rc); | |
| 4950 | fprintf(p->trace,"\n"); | |
| 4951 | } | |
| 4952 | #endif /* SQLITE_DEBUG */ | |
| 4953 | #endif /* NDEBUG */ | |
| 4954 | } /* The end of the for(;;) loop the loops through opcodes */ | |
| 4955 | ||
| 4956 | /* If we reach this point, it means that execution is finished. | |
| 4957 | */ | |
| 4958 | vdbe_halt: | |
| 4959 | if( rc ){ | |
| 4960 | p->rc = rc; | |
| 4961 | rc = SQLITE_ERROR; | |
| 4962 | }else{ | |
| 4963 | rc = SQLITE_DONE; | |
| 4964 | } | |
| 4965 | sqlite3VdbeHalt(p); | |
| 4966 | p->pTos = pTos; | |
| 4967 | return rc; | |
| 4968 | ||
| 4969 | /* Jump to here if a malloc() fails. It's hard to get a malloc() | |
| 4970 | ** to fail on a modern VM computer, so this code is untested. | |
| 4971 | */ | |
| 4972 | no_mem: | |
| 4973 | sqlite3SetString(&p->zErrMsg, "out of memory", (char*)0); | |
| 4974 | rc = SQLITE_NOMEM; | |
| 4975 | goto vdbe_halt; | |
| 4976 | ||
| 4977 | /* Jump to here for an SQLITE_MISUSE error. | |
| 4978 | */ | |
| 4979 | abort_due_to_misuse: | |
| 4980 | rc = SQLITE_MISUSE; | |
| 4990 | } | |
| 4991 | goto vdbe_halt; | |
| 4992 | ||
| 4993 | /* Jump to here if the sqlite3_interrupt() API sets the interrupt | |
| 4994 | ** flag. | |
| 4995 | */ | |
| 4996 | abort_due_to_interrupt: | |
| 4997 | assert( db->u1.isInterrupted ); | |
| 4998 | if( db->magic!=SQLITE_MAGIC_BUSY ){ | |
| 4999 | rc = SQLITE_MISUSE; | |
| 5000 | }else{ | |
| 5001 | rc = SQLITE_INTERRUPT; | |
| 5002 | } | |
| 5003 | p->rc = rc; | |
| 5004 | sqlite3SetString(&p->zErrMsg, sqlite3ErrStr(rc), (char*)0); | |
| 5005 | goto vdbe_halt; | |
| 5006 | } |
| 210 | ** a prior call to sqlite3VdbeMakeLabel(). | |
|---|---|---|
| 211 | */ | |
| 212 | void sqlite3VdbeResolveLabel(Vdbe *p, int x){ | |
| 213 | int j = -1-x; | |
| 214 | assert( p->magic==VDBE_MAGIC_INIT ); | |
| 215 | assert( j>=0 && j<p->nLabel ); | |
| 216 | if( p->aLabel ){ | |
| 217 | p->aLabel[j] = p->nOp; | |
| 218 | } | |
| 219 | } | |
| 220 | ||
| 221 | /* | |
| 222 | ** Return non-zero if opcode 'op' is guarenteed not to push more values | |
| 223 | ** onto the VDBE stack than it pops off. | |
| 224 | */ | |
| 225 | static int opcodeNoPush(u8 op){ | |
| 226 | /* The 10 NOPUSH_MASK_n constants are defined in the automatically | |
| 227 | ** generated header file opcodes.h. Each is a 16-bit bitmask, one | |
| 228 | ** bit corresponding to each opcode implemented by the virtual | |
| 229 | ** machine in vdbe.c. The bit is true if the word "no-push" appears | |
| 230 | ** in a comment on the same line as the "case OP_XXX:" in | |
| 231 | ** sqlite3VdbeExec() in vdbe.c. | |
| 232 | ** | |
| 233 | ** If the bit is true, then the corresponding opcode is guarenteed not | |
| 234 | ** to grow the stack when it is executed. Otherwise, it may grow the | |
| 235 | ** stack by at most one entry. | |
| 236 | ** | |
| 237 | ** NOPUSH_MASK_0 corresponds to opcodes 0 to 15. NOPUSH_MASK_1 contains | |
| 238 | ** one bit for opcodes 16 to 31, and so on. | |
| 239 | ** | |
| 240 | ** 16-bit bitmasks (rather than 32-bit) are specified in opcodes.h | |
| 241 | ** because the file is generated by an awk program. Awk manipulates | |
| 242 | ** all numbers as floating-point and we don't want to risk a rounding | |
| 243 | ** error if someone builds with an awk that uses (for example) 32-bit | |
| 244 | ** IEEE floats. | |
| 245 | */ | |
| 246 | static const u32 masks[5] = { | |
| 247 | NOPUSH_MASK_0 + (((unsigned)NOPUSH_MASK_1)<<16), | |
| 248 | NOPUSH_MASK_2 + (((unsigned)NOPUSH_MASK_3)<<16), | |
| 249 | NOPUSH_MASK_4 + (((unsigned)NOPUSH_MASK_5)<<16), | |
| 250 | NOPUSH_MASK_6 + (((unsigned)NOPUSH_MASK_7)<<16), | |
| 251 | NOPUSH_MASK_8 + (((unsigned)NOPUSH_MASK_9)<<16) | |
| 252 | }; | |
| 253 | assert( op<32*5 ); | |
| 254 | return (masks[op>>5] & (1<<(op&0x1F))); | |
| 255 | } | |
| 256 | ||
| 257 | #ifndef NDEBUG | |
| 258 | int sqlite3VdbeOpcodeNoPush(u8 op){ | |
| 259 | return opcodeNoPush(op); | |
| 260 | } | |
| 261 | #endif | |
| 262 | ||
| 263 | /* | |
| 264 | ** Loop through the program looking for P2 values that are negative. | |
| 265 | ** Each such value is a label. Resolve the label by setting the P2 | |
| 266 | ** value to its correct non-zero value. | |
| 267 | ** | |
| 268 | ** This routine is called once after all opcodes have been inserted. | |
| 269 | ** | |
| 270 | ** Variable *pMaxFuncArgs is set to the maximum value of any P2 argument | |
| 271 | ** to an OP_Function, OP_AggStep or OP_VFilter opcode. This is used by | |
| 272 | ** sqlite3VdbeMakeReady() to size the Vdbe.apArg[] array. | |
| 273 | ** | |
| 274 | ** The integer *pMaxStack is set to the maximum number of vdbe stack | |
| 417 | /* | |
| 418 | ** If the input FuncDef structure is ephemeral, then free it. If | |
| 419 | ** the FuncDef is not ephermal, then do nothing. | |
| 420 | */ | |
| 421 | static void freeEphemeralFunction(FuncDef *pDef){ | |
| 422 | if( pDef && (pDef->flags & SQLITE_FUNC_EPHEM)!=0 ){ | |
| 423 | sqliteFree(pDef); | |
| 424 | } | |
| 425 | } | |
| 426 | ||
| 427 | /* | |
| 428 | ** Delete a P3 value if necessary. | |
| 429 | */ | |
| 430 | static void freeP3(int p3type, void *p3){ | |
| 431 | if( p3 ){ | |
| 432 | switch( p3type ){ | |
| 433 | case P3_DYNAMIC: | |
| 434 | case P3_KEYINFO: | |
| 435 | case P3_KEYINFO_HANDOFF: { | |
| 436 | sqliteFree(p3); | |
| 437 | break; | |
| 438 | } | |
| 439 | case P3_MPRINTF: { | |
| 440 | sqlite3_free(p3); | |
| 441 | break; | |
| 442 | } | |
| 443 | case P3_VDBEFUNC: { | |
| 444 | VdbeFunc *pVdbeFunc = (VdbeFunc *)p3; | |
| 445 | freeEphemeralFunction(pVdbeFunc->pFunc); | |
| 446 | sqlite3VdbeDeleteAuxData(pVdbeFunc, 0); | |
| 447 | sqliteFree(pVdbeFunc); | |
| 448 | break; | |
| 449 | } | |
| 450 | case P3_FUNCDEF: { | |
| 451 | freeEphemeralFunction((FuncDef*)p3); | |
| 452 | break; | |
| 453 | } | |
| 454 | case P3_MEM: { | |
| 455 | sqlite3ValueFree((sqlite3_value*)p3); | |
| 456 | break; | |
| 457 | } | |
| 458 | } | |
| 459 | } | |
| 460 | } | |
| 461 | ||
| 462 | ||
| 463 | /* | |
| 464 | ** Change N opcodes starting at addr to No-ops. | |
| 465 | */ | |
| 466 | void sqlite3VdbeChangeToNoop(Vdbe *p, int addr, int N){ | |
| 467 | VdbeOp *pOp = &p->aOp[addr]; | |
| 468 | while( N-- ){ | |
| 469 | freeP3(pOp->p3type, pOp->p3); | |
| 470 | memset(pOp, 0, sizeof(pOp[0])); | |
| 471 | pOp->opcode = OP_Noop; | |
| 472 | pOp++; | |
| 473 | } | |
| 474 | } | |
| 569 | /* | |
| 570 | ** Return the opcode for a given address. | |
| 571 | */ | |
| 572 | VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){ | |
| 573 | assert( p->magic==VDBE_MAGIC_INIT ); | |
| 574 | assert( addr>=0 && addr<p->nOp ); | |
| 575 | return &p->aOp[addr]; | |
| 576 | } | |
| 577 | ||
| 578 | #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) \ | |
| 579 | || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) | |
| 580 | /* | |
| 581 | ** Compute a string that describes the P3 parameter for an opcode. | |
| 582 | ** Use zTemp for any required temporary buffer space. | |
| 583 | */ | |
| 584 | static char *displayP3(Op *pOp, char *zTemp, int nTemp){ | |
| 585 | char *zP3; | |
| 586 | assert( nTemp>=20 ); | |
| 587 | switch( pOp->p3type ){ | |
| 588 | case P3_KEYINFO: { | |
| 589 | int i, j; | |
| 590 | KeyInfo *pKeyInfo = (KeyInfo*)pOp->p3; | |
| 591 | sprintf(zTemp, "keyinfo(%d", pKeyInfo->nField); | |
| 592 | i = strlen(zTemp); | |
| 593 | for(j=0; j<pKeyInfo->nField; j++){ | |
| 594 | CollSeq *pColl = pKeyInfo->aColl[j]; | |
| 595 | if( pColl ){ | |
| 596 | int n = strlen(pColl->zName); | |
| 597 | if( i+n>nTemp-6 ){ | |
| 598 | strcpy(&zTemp[i],",..."); | |
| 599 | break; | |
| 600 | } | |
| 601 | zTemp[i++] = ','; | |
| 624 | case P3_FUNCDEF: { | |
| 625 | FuncDef *pDef = (FuncDef*)pOp->p3; | |
| 626 | sqlite3_snprintf(nTemp, zTemp, "%s(%d)", pDef->zName, pDef->nArg); | |
| 627 | zP3 = zTemp; | |
| 628 | break; | |
| 629 | } | |
| 630 | #ifndef SQLITE_OMIT_VIRTUALTABLE | |
| 631 | case P3_VTAB: { | |
| 632 | sqlite3_vtab *pVtab = (sqlite3_vtab*)pOp->p3; | |
| 633 | sqlite3_snprintf(nTemp, zTemp, "vtab:%p:%p", pVtab, pVtab->pModule); | |
| 634 | zP3 = zTemp; | |
| 635 | break; | |
| 636 | } | |
| 637 | #endif | |
| 638 | default: { | |
| 639 | zP3 = pOp->p3; | |
| 640 | if( zP3==0 || pOp->opcode==OP_Noop ){ | |
| 641 | zP3 = ""; | |
| 642 | } | |
| 643 | } | |
| 644 | } | |
| 645 | assert( zP3!=0 ); | |
| 646 | return zP3; | |
| 647 | } | |
| 648 | #endif | |
| 649 | ||
| 650 | ||
| 651 | #if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) | |
| 652 | /* | |
| 653 | ** Print a single opcode. This routine is used for debugging only. | |
| 654 | */ | |
| 655 | void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){ | |
| 656 | char *zP3; | |
| 657 | char zPtr[50]; | |
| 658 | static const char *zFormat1 = "%4d %-13s %4d %4d %s\n"; | |
| 659 | if( pOut==0 ) pOut = stdout; | |
| 660 | zP3 = displayP3(pOp, zPtr, sizeof(zPtr)); | |
| 661 | fprintf(pOut, zFormat1, | |
| 662 | pc, sqlite3OpcodeNames[pOp->opcode], pOp->p1, pOp->p2, zP3); | |
| 663 | fflush(pOut); | |
| 664 | } | |
| 665 | #endif | |
| 666 | ||
| 667 | /* | |
| 668 | ** Release an array of N Mem elements | |
| 669 | */ | |
| 670 | static void releaseMemArray(Mem *p, int N){ | |
| 671 | if( p ){ | |
| 672 | while( N-->0 ){ | |
| 673 | sqlite3VdbeMemRelease(p++); | |
| 674 | } | |
| 675 | } | |
| 676 | } | |
| 677 | ||
| 678 | #ifndef SQLITE_OMIT_EXPLAIN | |
| 679 | /* | |
| 680 | ** Give a listing of the program in the virtual machine. | |
| 681 | ** | |
| 682 | ** The interface is the same as sqlite3VdbeExec(). But instead of | |
| 683 | ** running the code, it invokes the callback once for each instruction. | |
| 684 | ** This feature is used to implement "EXPLAIN". | |
| 685 | */ | |
| 686 | int sqlite3VdbeList( | |
| 687 | Vdbe *p /* The VDBE */ | |
| 688 | ){ | |
| 689 | sqlite3 *db = p->db; | |
| 690 | int i; | |
| 748 | pMem->enc = SQLITE_UTF8; | |
| 749 | ||
| 750 | p->nResColumn = 5 - 2*(p->explain-1); | |
| 751 | p->pTos = pMem; | |
| 752 | p->rc = SQLITE_OK; | |
| 753 | p->resOnStack = 1; | |
| 754 | rc = SQLITE_ROW; | |
| 755 | } | |
| 756 | return rc; | |
| 757 | } | |
| 758 | #endif /* SQLITE_OMIT_EXPLAIN */ | |
| 759 | ||
| 760 | /* | |
| 761 | ** Print the SQL that was used to generate a VDBE program. | |
| 762 | */ | |
| 763 | void sqlite3VdbePrintSql(Vdbe *p){ | |
| 764 | #ifdef SQLITE_DEBUG | |
| 765 | int nOp = p->nOp; | |
| 766 | VdbeOp *pOp; | |
| 767 | if( nOp<1 ) return; | |
| 768 | pOp = &p->aOp[nOp-1]; | |
| 769 | if( pOp->opcode==OP_Noop && pOp->p3!=0 ){ | |
| 770 | const char *z = pOp->p3; | |
| 771 | while( isspace(*(u8*)z) ) z++; | |
| 772 | printf("SQL: [%s]\n", z); | |
| 773 | } | |
| 774 | #endif | |
| 775 | } | |
| 776 | ||
| 777 | /* | |
| 778 | ** Prepare a virtual machine for execution. This involves things such | |
| 779 | ** as allocating stack space and initializing the program counter. | |
| 780 | ** After the VDBE has be prepped, it can be executed by one or more | |
| 781 | ** calls to sqlite3VdbeExec(). | |
| 782 | ** | |
| 783 | ** This is the only way to move a VDBE from VDBE_MAGIC_INIT to | |
| 784 | ** VDBE_MAGIC_RUN. | |
| 785 | */ | |
| 786 | void sqlite3VdbeMakeReady( | |
| 787 | Vdbe *p, /* The VDBE */ | |
| 788 | int nVar, /* Number of '?' see in the SQL statement */ | |
| 789 | int nMem, /* Number of memory cells to allocate */ | |
| 868 | { | |
| 869 | int i; | |
| 870 | for(i=0; i<p->nOp; i++){ | |
| 871 | p->aOp[i].cnt = 0; | |
| 872 | p->aOp[i].cycles = 0; | |
| 873 | } | |
| 874 | } | |
| 875 | #endif | |
| 876 | } | |
| 877 | ||
| 878 | /* | |
| 879 | ** Close a cursor and release all the resources that cursor happens | |
| 880 | ** to hold. | |
| 881 | */ | |
| 882 | void sqlite3VdbeFreeCursor(Vdbe *p, Cursor *pCx){ | |
| 883 | if( pCx==0 ){ | |
| 884 | return; | |
| 885 | } | |
| 886 | if( pCx->pCursor ){ | |
| 887 | sqlite3BtreeCloseCursor(pCx->pCursor); | |
| 888 | } | |
| 889 | if( pCx->pBt ){ | |
| 890 | sqlite3BtreeClose(pCx->pBt); | |
| 891 | } | |
| 892 | #ifndef SQLITE_OMIT_VIRTUALTABLE | |
| 893 | if( pCx->pVtabCursor ){ | |
| 894 | sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor; | |
| 895 | const sqlite3_module *pModule = pCx->pModule; | |
| 896 | p->inVtabMethod = 1; | |
| 897 | sqlite3SafetyOff(p->db); | |
| 898 | pModule->xClose(pVtabCursor); | |
| 899 | sqlite3SafetyOn(p->db); | |
| 900 | p->inVtabMethod = 0; | |
| 901 | } | |
| 902 | #endif | |
| 903 | sqliteFree(pCx->pData); | |
| 904 | sqliteFree(pCx->aType); | |
| 905 | sqliteFree(pCx); | |
| 906 | } | |
| 907 | ||
| 908 | /* | |
| 909 | ** Close all cursors | |
| 910 | */ | |
| 911 | static void closeAllCursors(Vdbe *p){ | |
| 912 | int i; | |
| 913 | if( p->apCsr==0 ) return; | |
| 914 | for(i=0; i<p->nCursor; i++){ | |
| 915 | if( !p->inVtabMethod || (p->apCsr[i] && !p->apCsr[i]->pVtabCursor) ){ | |
| 916 | sqlite3VdbeFreeCursor(p, p->apCsr[i]); | |
| 917 | p->apCsr[i] = 0; | |
| 918 | } | |
| 919 | } | |
| 920 | } | |
| 921 | ||
| 922 | /* | |
| 923 | ** Clean up the VM after execution. | |
| 924 | ** | |
| 925 | ** This routine will automatically close any cursors, lists, and/or | |
| 926 | ** sorters that were left open. It also deletes the values of | |
| 927 | ** variables in the aVar[] array. | |
| 928 | */ | |
| 929 | static void Cleanup(Vdbe *p){ | |
| 930 | int i; | |
| 931 | if( p->aStack ){ | |
| 932 | releaseMemArray(p->aStack, 1 + (p->pTos - p->aStack)); | |
| 933 | p->pTos = &p->aStack[-1]; | |
| 934 | } | |
| 935 | closeAllCursors(p); | |
| 936 | releaseMemArray(p->aMem, p->nMem); | |
| 937 | sqlite3VdbeFifoClear(&p->sFifo); | |
| 938 | if( p->contextStack ){ | |
| 939 | for(i=0; i<p->contextStackTop; i++){ | |
| 940 | sqlite3VdbeFifoClear(&p->contextStack[i].sFifo); | |
| 941 | } | |
| 942 | sqliteFree(p->contextStack); | |
| 943 | } | |
| 944 | p->contextStack = 0; | |
| 945 | p->contextStackDepth = 0; | |
| 946 | p->contextStackTop = 0; | |
| 947 | sqliteFree(p->zErrMsg); | |
| 948 | p->zErrMsg = 0; | |
| 949 | } | |
| 950 | ||
| 951 | /* | |
| 952 | ** Set the number of result columns that will be returned by this SQL | |
| 953 | ** statement. This is now set at compile time, rather than during | |
| 954 | ** execution of the vdbe program so that sqlite3_column_count() can | |
| 955 | ** be called on an SQL statement before sqlite3_step(). | |
| 956 | */ | |
| 957 | void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){ | |
| 958 | Mem *pColName; | |
| 959 | int n; | |
| 960 | releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); | |
| 961 | sqliteFree(p->aColName); | |
| 962 | n = nResColumn*COLNAME_N; | |
| 963 | p->nResColumn = nResColumn; | |
| 1205 | #endif | |
| 1206 | ||
| 1207 | return rc; | |
| 1208 | } | |
| 1209 | ||
| 1210 | /* | |
| 1211 | ** This routine checks that the sqlite3.activeVdbeCnt count variable | |
| 1212 | ** matches the number of vdbe's in the list sqlite3.pVdbe that are | |
| 1213 | ** currently active. An assertion fails if the two counts do not match. | |
| 1214 | ** This is an internal self-check only - it is not an essential processing | |
| 1215 | ** step. | |
| 1216 | ** | |
| 1217 | ** This is a no-op if NDEBUG is defined. | |
| 1218 | */ | |
| 1219 | #ifndef NDEBUG | |
| 1220 | static void checkActiveVdbeCnt(sqlite3 *db){ | |
| 1221 | Vdbe *p; | |
| 1222 | int cnt = 0; | |
| 1223 | p = db->pVdbe; | |
| 1224 | while( p ){ | |
| 1225 | if( p->magic==VDBE_MAGIC_RUN && p->pc>=0 ){ | |
| 1226 | cnt++; | |
| 1227 | } | |
| 1228 | p = p->pNext; | |
| 1229 | } | |
| 1230 | assert( cnt==db->activeVdbeCnt ); | |
| 1231 | } | |
| 1232 | #else | |
| 1233 | #define checkActiveVdbeCnt(x) | |
| 1234 | #endif | |
| 1235 | ||
| 1236 | /* | |
| 1237 | ** Find every active VM other than pVdbe and change its status to | |
| 1238 | ** aborted. This happens when one VM causes a rollback due to an | |
| 1239 | ** ON CONFLICT ROLLBACK clause (for example). The other VMs must be | |
| 1240 | ** aborted so that they do not have data rolled out from underneath | |
| 1241 | ** them leading to a segfault. | |
| 1242 | */ | |
| 1243 | void sqlite3AbortOtherActiveVdbes(sqlite3 *db, Vdbe *pExcept){ | |
| 1244 | Vdbe *pOther; | |
| 1245 | for(pOther=db->pVdbe; pOther; pOther=pOther->pNext){ | |
| 1252 | } | |
| 1253 | } | |
| 1254 | ||
| 1255 | /* | |
| 1256 | ** This routine is called the when a VDBE tries to halt. If the VDBE | |
| 1257 | ** has made changes and is in autocommit mode, then commit those | |
| 1258 | ** changes. If a rollback is needed, then do the rollback. | |
| 1259 | ** | |
| 1260 | ** This routine is the only way to move the state of a VM from | |
| 1261 | ** SQLITE_MAGIC_RUN to SQLITE_MAGIC_HALT. | |
| 1262 | ** | |
| 1263 | ** Return an error code. If the commit could not complete because of | |
| 1264 | ** lock contention, return SQLITE_BUSY. If SQLITE_BUSY is returned, it | |
| 1265 | ** means the close did not happen and needs to be repeated. | |
| 1266 | */ | |
| 1267 | int sqlite3VdbeHalt(Vdbe *p){ | |
| 1268 | sqlite3 *db = p->db; | |
| 1269 | int i; | |
| 1270 | int (*xFunc)(Btree *pBt) = 0; /* Function to call on each btree backend */ | |
| 1271 | int isSpecialError; /* Set to true if SQLITE_NOMEM or IOERR */ | |
| 1272 | ||
| 1273 | /* This function contains the logic that determines if a statement or | |
| 1274 | ** transaction will be committed or rolled back as a result of the | |
| 1275 | ** execution of this virtual machine. | |
| 1276 | ** | |
| 1277 | ** Special errors: | |
| 1278 | ** | |
| 1279 | ** If an SQLITE_NOMEM error has occured in a statement that writes to | |
| 1280 | ** the database, then either a statement or transaction must be rolled | |
| 1281 | ** back to ensure the tree-structures are in a consistent state. A | |
| 1282 | ** statement transaction is rolled back if one is open, otherwise the | |
| 1286 | ** the database, then the entire transaction must be rolled back. The | |
| 1287 | ** I/O error may have caused garbage to be written to the journal | |
| 1288 | ** file. Were the transaction to continue and eventually be rolled | |
| 1289 | ** back that garbage might end up in the database file. | |
| 1290 | ** | |
| 1291 | ** In both of the above cases, the Vdbe.errorAction variable is | |
| 1292 | ** ignored. If the sqlite3.autoCommit flag is false and a transaction | |
| 1293 | ** is rolled back, it will be set to true. | |
| 1294 | ** | |
| 1295 | ** Other errors: | |
| 1296 | ** | |
| 1297 | ** No error: | |
| 1298 | ** | |
| 1299 | */ | |
| 1300 | ||
| 1301 | if( sqlite3MallocFailed() ){ | |
| 1302 | p->rc = SQLITE_NOMEM; | |
| 1303 | } | |
| 1304 | if( p->magic!=VDBE_MAGIC_RUN ){ | |
| 1305 | /* Already halted. Nothing to do. */ | |
| 1306 | assert( p->magic==VDBE_MAGIC_HALT ); | |
| 1307 | #ifndef SQLITE_OMIT_VIRTUALTABLE | |
| 1308 | closeAllCursors(p); | |
| 1309 | #endif | |
| 1310 | return SQLITE_OK; | |
| 1311 | } | |
| 1312 | closeAllCursors(p); | |
| 1313 | checkActiveVdbeCnt(db); | |
| 1314 | ||
| 1315 | /* No commit or rollback needed if the program never started */ | |
| 1316 | if( p->pc>=0 ){ | |
| 1317 | int mrc; /* Primary error code from p->rc */ | |
| 1318 | /* Check for one of the special errors - SQLITE_NOMEM or SQLITE_IOERR */ | |
| 1319 | mrc = p->rc & 0xff; | |
| 1320 | isSpecialError = ((mrc==SQLITE_NOMEM || mrc==SQLITE_IOERR)?1:0); | |
| 1321 | if( isSpecialError ){ | |
| 1322 | /* This loop does static analysis of the query to see which of the | |
| 1323 | ** following three categories it falls into: | |
| 1324 | ** | |
| 1325 | ** Read-only | |
| 1326 | ** Query with statement journal | |
| 1327 | ** Query without statement journal | |
| 1328 | ** | |
| 1329 | ** We could do something more elegant than this static analysis (i.e. | |
| 1330 | ** store the type of query as part of the compliation phase), but | |
| 1331 | ** handling malloc() or IO failure is a fairly obscure edge case so | |
| 1332 | ** this is probably easier. Todo: Might be an opportunity to reduce | |
| 1333 | ** code size a very small amount though... | |
| 1334 | */ | |
| 1335 | int isReadOnly = 1; | |
| 1346 | } | |
| 1347 | } | |
| 1348 | ||
| 1349 | /* If the query was read-only, we need do no rollback at all. Otherwise, | |
| 1350 | ** proceed with the special handling. | |
| 1351 | */ | |
| 1352 | if( !isReadOnly ){ | |
| 1353 | if( p->rc==SQLITE_NOMEM && isStatement ){ | |
| 1354 | xFunc = sqlite3BtreeRollbackStmt; | |
| 1355 | }else{ | |
| 1356 | /* We are forced to roll back the active transaction. Before doing | |
| 1357 | ** so, abort any other statements this handle currently has active. | |
| 1358 | */ | |
| 1359 | sqlite3AbortOtherActiveVdbes(db, p); | |
| 1360 | sqlite3RollbackAll(db); | |
| 1361 | db->autoCommit = 1; | |
| 1362 | } | |
| 1363 | } | |
| 1364 | } | |
| 1365 | ||
| 1366 | /* If the auto-commit flag is set and this is the only active vdbe, then | |
| 1367 | ** we do either a commit or rollback of the current transaction. | |
| 1368 | ** | |
| 1369 | ** Note: This block also runs if one of the special errors handled | |
| 1370 | ** above has occured. | |
| 1371 | */ | |
| 1372 | if( db->autoCommit && db->activeVdbeCnt==1 ){ | |
| 1373 | if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){ | |
| 1374 | /* The auto-commit flag is true, and the vdbe program was | |
| 1375 | ** successful or hit an 'OR FAIL' constraint. This means a commit | |
| 1376 | ** is required. | |
| 1377 | */ | |
| 1378 | int rc = vdbeCommit(db); | |
| 1379 | if( rc==SQLITE_BUSY ){ | |
| 1380 | return SQLITE_BUSY; | |
| 1381 | }else if( rc!=SQLITE_OK ){ | |
| 1382 | p->rc = rc; | |
| 1383 | sqlite3RollbackAll(db); | |
| 1384 | }else{ | |
| 1385 | sqlite3CommitInternalChanges(db); | |
| 1386 | } | |
| 1387 | }else{ | |
| 1388 | sqlite3RollbackAll(db); | |
| 1389 | } | |
| 1390 | }else if( !xFunc ){ | |
| 1391 | if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){ | |
| 1392 | xFunc = sqlite3BtreeCommitStmt; | |
| 1393 | }else if( p->errorAction==OE_Abort ){ | |
| 1394 | xFunc = sqlite3BtreeRollbackStmt; | |
| 1395 | }else{ | |
| 1396 | sqlite3AbortOtherActiveVdbes(db, p); | |
| 1397 | sqlite3RollbackAll(db); | |
| 1398 | db->autoCommit = 1; | |
| 1399 | } | |
| 1400 | } | |
| 1401 | ||
| 1402 | /* If xFunc is not NULL, then it is one of sqlite3BtreeRollbackStmt or | |
| 1403 | ** sqlite3BtreeCommitStmt. Call it once on each backend. If an error occurs | |
| 1404 | ** and the return code is still SQLITE_OK, set the return code to the new | |
| 1405 | ** error value. | |
| 1406 | */ | |
| 1407 | assert(!xFunc || | |
| 1408 | xFunc==sqlite3BtreeCommitStmt || | |
| 1409 | xFunc==sqlite3BtreeRollbackStmt | |
| 1410 | ); | |
| 1411 | for(i=0; xFunc && i<db->nDb; i++){ | |
| 1412 | int rc; | |
| 1413 | Btree *pBt = db->aDb[i].pBt; | |
| 1414 | if( pBt ){ | |
| 1415 | rc = xFunc(pBt); | |
| 1416 | if( rc && (p->rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT) ){ | |
| 1417 | p->rc = rc; | |
| 1418 | sqlite3SetString(&p->zErrMsg, 0); | |
| 1419 | } | |
| 1420 | } | |
| 1421 | } | |
| 1422 | ||
| 1423 | /* If this was an INSERT, UPDATE or DELETE and the statement was committed, | |
| 1424 | ** set the change counter. | |
| 1425 | */ | |
| 1426 | if( p->changeCntOn && p->pc>=0 ){ | |
| 1427 | if( !xFunc || xFunc==sqlite3BtreeCommitStmt ){ | |
| 1428 | sqlite3VdbeSetChanges(db, p->nChange); | |
| 1429 | }else{ | |
| 1430 | sqlite3VdbeSetChanges(db, 0); | |
| 1431 | } | |
| 1432 | p->nChange = 0; | |
| 1433 | } | |
| 1434 | ||
| 1435 | /* Rollback or commit any schema changes that occurred. */ | |
| 1436 | if( p->rc!=SQLITE_OK && db->flags&SQLITE_InternChanges ){ | |
| 1437 | sqlite3ResetInternalSchema(db, 0); | |
| 1438 | db->flags = (db->flags | SQLITE_InternChanges); | |
| 1439 | } | |
| 1440 | } | |
| 1441 | ||
| 1442 | /* We have successfully halted and closed the VM. Record this fact. */ | |
| 1443 | if( p->pc>=0 ){ | |
| 1444 | db->activeVdbeCnt--; | |
| 1445 | } | |
| 1446 | p->magic = VDBE_MAGIC_HALT; | |
| 1447 | checkActiveVdbeCnt(db); | |
| 1448 | ||
| 1449 | return SQLITE_OK; | |
| 1450 | } | |
| 1451 | ||
| 1452 | /* | |
| 1453 | ** Each VDBE holds the result of the most recent sqlite3_step() call | |
| 1454 | ** in p->rc. This routine sets that result back to SQLITE_OK. | |
| 1455 | */ | |
| 1456 | void sqlite3VdbeResetStepResult(Vdbe *p){ | |
| 1457 | p->rc = SQLITE_OK; | |
| 1458 | } | |
| 1459 | ||
| 1460 | /* | |
| 1461 | ** Clean up a VDBE after execution but do not delete the VDBE just yet. | |
| 1462 | ** Write any error messages into *pzErrMsg. Return the result code. | |
| 1463 | ** | |
| 1464 | ** After this routine is run, the VDBE should be ready to be executed | |
| 1465 | ** again. | |
| 1466 | ** | |
| 1467 | ** To look at it another way, this routine resets the state of the | |
| 1468 | ** virtual machine from VDBE_MAGIC_RUN or VDBE_MAGIC_HALT back to | |
| 1469 | ** VDBE_MAGIC_INIT. | |
| 1470 | */ | |
| 1471 | int sqlite3VdbeReset(Vdbe *p){ | |
| 1472 | sqlite3 *db; | |
| 1473 | if( p->magic!=VDBE_MAGIC_RUN && p->magic!=VDBE_MAGIC_HALT ){ | |
| 1474 | sqlite3Error(p->db, SQLITE_MISUSE, 0); | |
| 1475 | return SQLITE_MISUSE; | |
| 1476 | } | |
| 1477 | db = p->db; | |
| 1478 | ||
| 1479 | /* If the VM did not run to completion or if it encountered an | |
| 1480 | ** error, then it might not have been halted properly. So halt | |
| 1481 | ** it now. | |
| 1482 | */ | |
| 1483 | sqlite3SafetyOn(db); | |
| 1484 | sqlite3VdbeHalt(p); | |
| 1485 | sqlite3SafetyOff(db); | |
| 1486 | ||
| 1487 | /* If the VDBE has be run even partially, then transfer the error code | |
| 1488 | ** and error message from the VDBE into the main database structure. But | |
| 1489 | ** if the VDBE has just been set to run but has not actually executed any | |
| 1490 | ** instructions yet, leave the main database error information unchanged. | |
| 1491 | */ | |
| 1492 | if( p->pc>=0 ){ | |
| 1493 | if( p->zErrMsg ){ | |
| 1494 | sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, sqlite3FreeX); | |
| 1495 | db->errCode = p->rc; | |
| 1496 | p->zErrMsg = 0; | |
| 1497 | }else if( p->rc ){ | |
| 1498 | sqlite3Error(db, p->rc, 0); | |
| 1499 | }else{ | |
| 1500 | sqlite3Error(db, SQLITE_OK, 0); | |
| 1501 | } | |
| 1502 | }else if( p->rc && p->expired ){ | |
| 1503 | /* The expired flag was set on the VDBE before the first call | |
| 1504 | ** to sqlite3_step(). For consistency (since sqlite3_step() was | |
| 1505 | ** called), set the database error in this case as well. | |
| 1506 | */ | |
| 1507 | sqlite3Error(db, p->rc, 0); | |
| 1508 | } | |
| 1509 | ||
| 1510 | /* Reclaim all memory used by the VDBE | |
| 1511 | */ | |
| 1512 | Cleanup(p); | |
| 1513 | ||
| 1514 | /* Save profiling information from this VDBE run. | |
| 1515 | */ | |
| 1516 | assert( p->pTos<&p->aStack[p->pc<0?0:p->pc] || !p->aStack ); | |
| 1517 | #ifdef VDBE_PROFILE | |
| 1518 | { | |
| 1519 | FILE *out = fopen("vdbe_profile.out", "a"); | |
| 1520 | if( out ){ | |
| 1521 | int i; | |
| 1522 | fprintf(out, "---- "); | |
| 1523 | for(i=0; i<p->nOp; i++){ | |
| 1524 | fprintf(out, "%02x", p->aOp[i].opcode); | |
| 1525 | } | |
| 1526 | fprintf(out, "\n"); | |
| 1527 | for(i=0; i<p->nOp; i++){ | |
| 1528 | fprintf(out, "%6d %10lld %8lld ", | |
| 1529 | p->aOp[i].cnt, | |
| 1530 | p->aOp[i].cycles, | |
| 1531 | p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0 | |
| 1532 | ); | |
| 1533 | sqlite3VdbePrintOp(out, i, &p->aOp[i]); | |
| 1534 | } | |
| 1535 | fclose(out); | |
| 1536 | } | |
| 1537 | } | |
| 1538 | #endif | |
| 1539 | p->magic = VDBE_MAGIC_INIT; | |
| 1540 | p->aborted = 0; | |
| 1541 | if( p->rc==SQLITE_SCHEMA ){ | |
| 1542 | sqlite3ResetInternalSchema(db, 0); | |
| 1543 | } | |
| 1544 | return p->rc & db->errMask; | |
| 1545 | } | |
| 1546 | ||
| 1547 | /* | |
| 1548 | ** Clean up and delete a VDBE after execution. Return an integer which is | |
| 1549 | ** the result code. Write any error message text into *pzErrMsg. | |
| 1550 | */ | |
| 1551 | int sqlite3VdbeFinalize(Vdbe *p){ | |
| 1552 | int rc = SQLITE_OK; | |
| 1553 | if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){ | |
| 1554 | rc = sqlite3VdbeReset(p); | |
| 1555 | assert( (rc & p->db->errMask)==rc ); | |
| 1556 | }else if( p->magic!=VDBE_MAGIC_INIT ){ | |
| 1557 | return SQLITE_MISUSE; | |
| 1558 | } | |
| 1559 | sqlite3VdbeDelete(p); | |
| 1560 | return rc; | |
| 1561 | } | |
| 1562 | ||
| 1563 | /* | |
| 1564 | ** Call the destructor for each auxdata entry in pVdbeFunc for which | |
| 1565 | ** the corresponding bit in mask is clear. Auxdata entries beyond 31 | |
| 1566 | ** are always destroyed. To destroy all auxdata entries, call this | |
| 1567 | ** routine with mask==0. | |
| 1568 | */ | |
| 1569 | void sqlite3VdbeDeleteAuxData(VdbeFunc *pVdbeFunc, int mask){ | |
| 1570 | int i; | |
| 1571 | for(i=0; i<pVdbeFunc->nAux; i++){ | |
| 1572 | struct AuxData *pAux = &pVdbeFunc->apAux[i]; | |
| 1573 | if( (i>31 || !(mask&(1<<i))) && pAux->pAux ){ | |
| 1574 | if( pAux->xDelete ){ | |
| 1575 | pAux->xDelete(pAux->pAux); | |
| 1576 | } | |
| 1577 | pAux->pAux = 0; | |
| 1578 | } | |
| 1579 | } | |
| 1580 | } | |
| 1581 | ||
| 1582 | /* | |
| 1583 | ** Delete an entire VDBE. | |
| 1584 | */ | |
| 1585 | void sqlite3VdbeDelete(Vdbe *p){ | |
| 1586 | int i; | |
| 1587 | if( p==0 ) return; | |
| 1588 | Cleanup(p); | |
| 1589 | if( p->pPrev ){ | |
| 1590 | p->pPrev->pNext = p->pNext; | |
| 1591 | }else{ | |
| 1592 | assert( p->db->pVdbe==p ); | |
| 1593 | p->db->pVdbe = p->pNext; | |
| 1594 | } | |
| 1595 | if( p->pNext ){ | |
| 1596 | p->pNext->pPrev = p->pPrev; | |
| 1597 | } | |
| 1598 | if( p->aOp ){ | |
| 1599 | for(i=0; i<p->nOp; i++){ | |
| 1600 | Op *pOp = &p->aOp[i]; | |
| 1601 | freeP3(pOp->p3type, pOp->p3); | |
| 1602 | } | |
| 1603 | sqliteFree(p->aOp); | |
| 1604 | } | |
| 1605 | releaseMemArray(p->aVar, p->nVar); | |
| 1606 | sqliteFree(p->aLabel); | |
| 1607 | sqliteFree(p->aStack); | |
| 1608 | releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); | |
| 1609 | sqliteFree(p->aColName); | |
| 1610 | sqliteFree(p->zSql); | |
| 1611 | p->magic = VDBE_MAGIC_DEAD; | |
| 1612 | sqliteFree(p); | |
| 1613 | } | |
| 1614 | ||
| 1615 | /* | |
| 1616 | ** If a MoveTo operation is pending on the given cursor, then do that | |
| 1617 | ** MoveTo now. Return an error code. If no MoveTo is pending, this | |
| 1618 | ** routine does nothing and returns SQLITE_OK. | |
| 1619 | */ | |
| 1620 | int sqlite3VdbeCursorMoveto(Cursor *p){ | |
| 1621 | if( p->deferredMoveto ){ | |
| 1622 | int res, rc; | |
| 1623 | #ifdef SQLITE_TEST | |
| 1624 | extern int sqlite3_search_count; | |
| 1625 | #endif | |
| 1626 | assert( p->isTable ); | |
| 1627 | if( p->isTable ){ |
| 25 | nEntry = 32767; | |
|---|---|---|
| 26 | } | |
| 27 | pPage = sqliteMallocRaw( sizeof(FifoPage) + sizeof(i64)*(nEntry-1) ); | |
| 28 | if( pPage ){ | |
| 29 | pPage->nSlot = nEntry; | |
| 30 | pPage->iWrite = 0; | |
| 31 | pPage->iRead = 0; | |
| 32 | pPage->pNext = 0; | |
| 33 | } | |
| 34 | return pPage; | |
| 35 | } | |
| 36 | ||
| 37 | /* | |
| 38 | ** Initialize a Fifo structure. | |
| 39 | */ | |
| 40 | void sqlite3VdbeFifoInit(Fifo *pFifo){ | |
| 41 | memset(pFifo, 0, sizeof(*pFifo)); | |
| 42 | } | |
| 43 | ||
| 44 | /* | |
| 45 | ** Push a single 64-bit integer value into the Fifo. Return SQLITE_OK | |
| 46 | ** normally. SQLITE_NOMEM is returned if we are unable to allocate | |
| 47 | ** memory. | |
| 48 | */ | |
| 49 | int sqlite3VdbeFifoPush(Fifo *pFifo, i64 val){ | |
| 50 | FifoPage *pPage; | |
| 51 | pPage = pFifo->pLast; | |
| 52 | if( pPage==0 ){ | |
| 53 | pPage = pFifo->pLast = pFifo->pFirst = allocatePage(20); | |
| 54 | if( pPage==0 ){ | |
| 55 | return SQLITE_NOMEM; | |
| 56 | } | |
| 94 | }else{ | |
| 95 | assert( pFifo->pFirst!=0 ); | |
| 96 | } | |
| 97 | }else{ | |
| 98 | assert( pFifo->nEntry>0 ); | |
| 99 | } | |
| 100 | return SQLITE_OK; | |
| 101 | } | |
| 102 | ||
| 103 | /* | |
| 104 | ** Delete all information from a Fifo object. Free all memory held | |
| 105 | ** by the Fifo. | |
| 106 | */ | |
| 107 | void sqlite3VdbeFifoClear(Fifo *pFifo){ | |
| 108 | FifoPage *pPage, *pNextPage; | |
| 109 | for(pPage=pFifo->pFirst; pPage; pPage=pNextPage){ | |
| 110 | pNextPage = pPage->pNext; | |
| 111 | sqliteFree(pPage); | |
| 112 | } | |
| 113 | sqlite3VdbeFifoInit(pFifo); | |
| 114 | } |
| 778 | # define transferOwnership(X) SQLITE_OK | |
|---|---|---|
| 779 | #endif | |
| 780 | ||
| 781 | /* | |
| 782 | ** Delete the named file | |
| 783 | */ | |
| 784 | int sqlite3UnixDelete(const char *zFilename){ | |
| 785 | unlink(zFilename); | |
| 786 | return SQLITE_OK; | |
| 787 | } | |
| 788 | ||
| 789 | /* | |
| 790 | ** Return TRUE if the named file exists. | |
| 791 | */ | |
| 792 | int sqlite3UnixFileExists(const char *zFilename){ | |
| 793 | return access(zFilename, 0)==0; | |
| 794 | } | |
| 795 | ||
| 796 | /* Forward declaration */ | |
| 797 | static int allocateUnixFile( | |
| 798 | int h, /* File descriptor of the open file */ | |
| 799 | OsFile **pId, /* Write the real file descriptor here */ | |
| 800 | const char *zFilename, /* Name of the file being opened */ | |
| 801 | int delFlag /* If true, make sure the file deletes on close */ | |
| 802 | ); | |
| 803 | ||
| 804 | /* | |
| 805 | ** Attempt to open a file for both reading and writing. If that | |
| 806 | ** fails, try opening it read-only. If the file does not exist, | |
| 807 | ** try to create it. | |
| 808 | ** |
| 210 | pMem->z = pMem->zShort; | |
|---|---|---|
| 211 | } | |
| 212 | if( ctx.isError ){ | |
| 213 | rc = SQLITE_ERROR; | |
| 214 | } | |
| 215 | } | |
| 216 | return rc; | |
| 217 | } | |
| 218 | ||
| 219 | /* | |
| 220 | ** Release any memory held by the Mem. This may leave the Mem in an | |
| 221 | ** inconsistent state, for example with (Mem.z==0) and | |
| 222 | ** (Mem.type==SQLITE_TEXT). | |
| 223 | */ | |
| 224 | void sqlite3VdbeMemRelease(Mem *p){ | |
| 225 | if( p->flags & (MEM_Dyn|MEM_Agg) ){ | |
| 226 | if( p->xDel ){ | |
| 227 | if( p->flags & MEM_Agg ){ | |
| 228 | sqlite3VdbeMemFinalize(p, *(FuncDef**)&p->i); | |
| 229 | assert( (p->flags & MEM_Agg)==0 ); | |
| 230 | sqlite3VdbeMemRelease(p); | |
| 231 | }else{ | |
| 232 | p->xDel((void *)p->z); | |
| 233 | } | |
| 234 | }else{ | |
| 235 | sqliteFree(p->z); | |
| 236 | } | |
| 237 | p->z = 0; | |
| 238 | p->xDel = 0; | |
| 239 | } | |
| 240 | } | |
| 241 | ||
| 242 | /* | |
| 243 | ** Return some kind of integer value which is the best we can do | |
| 244 | ** at representing the value that *pMem describes as an integer. | |
| 245 | ** If pMem is an integer, then the value is exact. If pMem is | |
| 246 | ** a floating-point then the value returned is the integer part. | |
| 247 | ** If pMem is a string or blob, then we make an attempt to convert | |
| 248 | ** it into a integer and return that. If pMem is NULL, return 0. | |
| 249 | ** | |
| 250 | ** If pMem is a string, its encoding might be changed. | |
| 251 | */ | |
| 252 | i64 sqlite3VdbeIntValue(Mem *pMem){ | |
| 253 | int flags = pMem->flags; | |
| 254 | if( flags & MEM_Int ){ | |
| 427 | }else{ | |
| 428 | rc = SQLITE_OK; | |
| 429 | } | |
| 430 | return rc; | |
| 431 | } | |
| 432 | ||
| 433 | /* | |
| 434 | ** Change the value of a Mem to be a string or a BLOB. | |
| 435 | */ | |
| 436 | int sqlite3VdbeMemSetStr( | |
| 437 | Mem *pMem, /* Memory cell to set to string value */ | |
| 438 | const char *z, /* String pointer */ | |
| 439 | int n, /* Bytes in string, or negative */ | |
| 440 | u8 enc, /* Encoding of z. 0 for BLOBs */ | |
| 441 | void (*xDel)(void*) /* Destructor function */ | |
| 442 | ){ | |
| 443 | sqlite3VdbeMemRelease(pMem); | |
| 444 | if( !z ){ | |
| 445 | pMem->flags = MEM_Null; | |
| 446 | pMem->type = SQLITE_NULL; | |
| 447 | return SQLITE_OK; | |
| 448 | } | |
| 449 | ||
| 450 | pMem->z = (char *)z; | |
| 451 | if( xDel==SQLITE_STATIC ){ | |
| 452 | pMem->flags = MEM_Static; | |
| 453 | }else if( xDel==SQLITE_TRANSIENT ){ | |
| 454 | pMem->flags = MEM_Ephem; | |
| 455 | }else{ | |
| 456 | pMem->flags = MEM_Dyn; | |
| 457 | pMem->xDel = xDel; | |
| 458 | } | |
| 459 | ||
| 460 | pMem->enc = enc; | |
| 461 | pMem->type = enc==0 ? SQLITE_BLOB : SQLITE_TEXT; | |
| 462 | pMem->n = n; | |
| 463 | ||
| 464 | assert( enc==0 || enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE | |
| 465 | || enc==SQLITE_UTF16BE ); | |
| 466 | switch( enc ){ | |
| 467 | case 0: | |
| 468 | pMem->flags |= MEM_Blob; | |
| 469 | pMem->enc = SQLITE_UTF8; | |
| 470 | break; | |
| 471 | ||
| 472 | case SQLITE_UTF8: | |
| 473 | pMem->flags |= MEM_Str; | |
| 474 | if( n<0 ){ | |
| 475 | pMem->n = strlen(z); | |
| 476 | pMem->flags |= MEM_Term; | |
| 477 | } | |
| 478 | break; | |
| 479 | ||
| 480 | #ifndef SQLITE_OMIT_UTF16 | |
| 481 | case SQLITE_UTF16LE: | |
| 482 | case SQLITE_UTF16BE: | |
| 483 | pMem->flags |= MEM_Str; | |
| 484 | if( pMem->n<0 ){ | |
| 485 | pMem->n = sqlite3utf16ByteLen(pMem->z,-1); | |
| 486 | pMem->flags |= MEM_Term; | |
| 487 | } | |
| 488 | if( sqlite3VdbeMemHandleBom(pMem) ){ | |
| 489 | return SQLITE_NOMEM; | |
| 490 | } | |
| 491 | #endif /* SQLITE_OMIT_UTF16 */ | |
| 492 | } | |
| 493 | if( pMem->flags&MEM_Ephem ){ | |
| 494 | return sqlite3VdbeMemMakeWriteable(pMem); | |
| 495 | } | |
| 496 | return SQLITE_OK; | |
| 497 | } | |
| 498 | ||
| 499 | /* | |
| 500 | ** Compare the values contained by the two memory cells, returning | |
| 501 | ** negative, zero or positive if pMem1 is less than, equal to, or greater | |
| 502 | ** than pMem2. Sorting order is NULL's first, followed by numbers (integers | |
| 503 | ** and reals) sorted numerically, followed by text ordered by the collating | |
| 504 | ** sequence pColl and finally blob's ordered by memcmp(). | |
| 505 | ** | |
| 506 | ** Two NULL values are considered equal by this function. | |
| 507 | */ | |
| 508 | int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){ | |
| 509 | int rc; | |
| 510 | int f1, f2; | |
| 511 | int combined_flags; | |
| 855 | sqliteFree(zVal); | |
| 856 | sqlite3ValueFree(pVal); | |
| 857 | *ppVal = 0; | |
| 858 | return SQLITE_NOMEM; | |
| 859 | } | |
| 860 | ||
| 861 | /* | |
| 862 | ** Change the string value of an sqlite3_value object | |
| 863 | */ | |
| 864 | void sqlite3ValueSetStr( | |
| 865 | sqlite3_value *v, | |
| 866 | int n, | |
| 867 | const void *z, | |
| 868 | u8 enc, | |
| 869 | void (*xDel)(void*) | |
| 870 | ){ | |
| 871 | if( v ) sqlite3VdbeMemSetStr((Mem *)v, z, n, enc, xDel); | |
| 872 | } | |
| 873 | ||
| 874 | /* | |
| 875 | ** Free an sqlite3_value object | |
| 876 | */ | |
| 877 | void sqlite3ValueFree(sqlite3_value *v){ | |
| 878 | if( !v ) return; | |
| 879 | sqlite3ValueSetStr(v, 0, 0, SQLITE_UTF8, SQLITE_STATIC); | |
| 880 | sqliteFree(v); | |
| 881 | } | |
| 882 | ||
| 883 | /* | |
| 884 | ** Return the number of bytes in the sqlite3_value object assuming | |
| 885 | ** that it uses the encoding "enc" | |
| 886 | */ |