Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Side by Side Diff: third_party/sqlite/sqlite-src-3080704/src/prepare.c

Issue 883353008: [sql] Import reference version of SQLite 3.8.7.4. (Closed) Base URL: http://chromium.googlesource.com/chromium/src.git@master
Patch Set: Hold back encoding change which is messing up patch. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 ** 2005 May 25 2 ** 2005 May 25
3 ** 3 **
4 ** The author disclaims copyright to this source code. In place of 4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing: 5 ** a legal notice, here is a blessing:
6 ** 6 **
7 ** May you do good and not evil. 7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others. 8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give. 9 ** May you share freely, never taking more than you give.
10 ** 10 **
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 ** Attempt to read the database schema and initialize internal 127 ** Attempt to read the database schema and initialize internal
128 ** data structures for a single database file. The index of the 128 ** data structures for a single database file. The index of the
129 ** database file is given by iDb. iDb==0 is used for the main 129 ** database file is given by iDb. iDb==0 is used for the main
130 ** database. iDb==1 should never be used. iDb>=2 is used for 130 ** database. iDb==1 should never be used. iDb>=2 is used for
131 ** auxiliary databases. Return one of the SQLITE_ error codes to 131 ** auxiliary databases. Return one of the SQLITE_ error codes to
132 ** indicate success or failure. 132 ** indicate success or failure.
133 */ 133 */
134 static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){ 134 static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
135 int rc; 135 int rc;
136 int i; 136 int i;
137 #ifndef SQLITE_OMIT_DEPRECATED
137 int size; 138 int size;
139 #endif
138 Table *pTab; 140 Table *pTab;
139 Db *pDb; 141 Db *pDb;
140 char const *azArg[4]; 142 char const *azArg[4];
141 int meta[5]; 143 int meta[5];
142 InitData initData; 144 InitData initData;
143 char const *zMasterSchema; 145 char const *zMasterSchema;
144 char const *zMasterName; 146 char const *zMasterName;
145 int openedTransaction = 0; 147 int openedTransaction = 0;
146 148
147 /* 149 /*
(...skipping 22 matching lines...) Expand all
170 #define temp_master_schema 0 172 #define temp_master_schema 0
171 #endif 173 #endif
172 174
173 assert( iDb>=0 && iDb<db->nDb ); 175 assert( iDb>=0 && iDb<db->nDb );
174 assert( db->aDb[iDb].pSchema ); 176 assert( db->aDb[iDb].pSchema );
175 assert( sqlite3_mutex_held(db->mutex) ); 177 assert( sqlite3_mutex_held(db->mutex) );
176 assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) ); 178 assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) );
177 179
178 /* zMasterSchema and zInitScript are set to point at the master schema 180 /* zMasterSchema and zInitScript are set to point at the master schema
179 ** and initialisation script appropriate for the database being 181 ** and initialisation script appropriate for the database being
180 ** initialised. zMasterName is the name of the master table. 182 ** initialized. zMasterName is the name of the master table.
181 */ 183 */
182 if( !OMIT_TEMPDB && iDb==1 ){ 184 if( !OMIT_TEMPDB && iDb==1 ){
183 zMasterSchema = temp_master_schema; 185 zMasterSchema = temp_master_schema;
184 }else{ 186 }else{
185 zMasterSchema = master_schema; 187 zMasterSchema = master_schema;
186 } 188 }
187 zMasterName = SCHEMA_TABLE(iDb); 189 zMasterName = SCHEMA_TABLE(iDb);
188 190
189 /* Construct the schema tables. */ 191 /* Construct the schema tables. */
190 azArg[0] = zMasterName; 192 azArg[0] = zMasterName;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 } 252 }
251 pDb->pSchema->schema_cookie = meta[BTREE_SCHEMA_VERSION-1]; 253 pDb->pSchema->schema_cookie = meta[BTREE_SCHEMA_VERSION-1];
252 254
253 /* If opening a non-empty database, check the text encoding. For the 255 /* If opening a non-empty database, check the text encoding. For the
254 ** main database, set sqlite3.enc to the encoding of the main database. 256 ** main database, set sqlite3.enc to the encoding of the main database.
255 ** For an attached db, it is an error if the encoding is not the same 257 ** For an attached db, it is an error if the encoding is not the same
256 ** as sqlite3.enc. 258 ** as sqlite3.enc.
257 */ 259 */
258 if( meta[BTREE_TEXT_ENCODING-1] ){ /* text encoding */ 260 if( meta[BTREE_TEXT_ENCODING-1] ){ /* text encoding */
259 if( iDb==0 ){ 261 if( iDb==0 ){
262 #ifndef SQLITE_OMIT_UTF16
260 u8 encoding; 263 u8 encoding;
261 /* If opening the main database, set ENC(db). */ 264 /* If opening the main database, set ENC(db). */
262 encoding = (u8)meta[BTREE_TEXT_ENCODING-1] & 3; 265 encoding = (u8)meta[BTREE_TEXT_ENCODING-1] & 3;
263 if( encoding==0 ) encoding = SQLITE_UTF8; 266 if( encoding==0 ) encoding = SQLITE_UTF8;
264 ENC(db) = encoding; 267 ENC(db) = encoding;
265 db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0); 268 #else
269 ENC(db) = SQLITE_UTF8;
270 #endif
266 }else{ 271 }else{
267 /* If opening an attached database, the encoding much match ENC(db) */ 272 /* If opening an attached database, the encoding much match ENC(db) */
268 if( meta[BTREE_TEXT_ENCODING-1]!=ENC(db) ){ 273 if( meta[BTREE_TEXT_ENCODING-1]!=ENC(db) ){
269 sqlite3SetString(pzErrMsg, db, "attached databases must use the same" 274 sqlite3SetString(pzErrMsg, db, "attached databases must use the same"
270 " text encoding as main database"); 275 " text encoding as main database");
271 rc = SQLITE_ERROR; 276 rc = SQLITE_ERROR;
272 goto initone_error_out; 277 goto initone_error_out;
273 } 278 }
274 } 279 }
275 }else{ 280 }else{
276 DbSetProperty(db, iDb, DB_Empty); 281 DbSetProperty(db, iDb, DB_Empty);
277 } 282 }
278 pDb->pSchema->enc = ENC(db); 283 pDb->pSchema->enc = ENC(db);
279 284
280 if( pDb->pSchema->cache_size==0 ){ 285 if( pDb->pSchema->cache_size==0 ){
286 #ifndef SQLITE_OMIT_DEPRECATED
281 size = sqlite3AbsInt32(meta[BTREE_DEFAULT_CACHE_SIZE-1]); 287 size = sqlite3AbsInt32(meta[BTREE_DEFAULT_CACHE_SIZE-1]);
282 if( size==0 ){ size = SQLITE_DEFAULT_CACHE_SIZE; } 288 if( size==0 ){ size = SQLITE_DEFAULT_CACHE_SIZE; }
283 pDb->pSchema->cache_size = size; 289 pDb->pSchema->cache_size = size;
290 #else
291 pDb->pSchema->cache_size = SQLITE_DEFAULT_CACHE_SIZE;
292 #endif
284 sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size); 293 sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
285 } 294 }
286 295
287 /* 296 /*
288 ** file_format==1 Version 3.0.0. 297 ** file_format==1 Version 3.0.0.
289 ** file_format==2 Version 3.1.3. // ALTER TABLE ADD COLUMN 298 ** file_format==2 Version 3.1.3. // ALTER TABLE ADD COLUMN
290 ** file_format==3 Version 3.1.4. // ditto but with non-NULL defaults 299 ** file_format==3 Version 3.1.4. // ditto but with non-NULL defaults
291 ** file_format==4 Version 3.3.0. // DESC indices. Boolean constants 300 ** file_format==4 Version 3.3.0. // DESC indices. Boolean constants
292 */ 301 */
293 pDb->pSchema->file_format = (u8)meta[BTREE_FILE_FORMAT-1]; 302 pDb->pSchema->file_format = (u8)meta[BTREE_FILE_FORMAT-1];
(...skipping 18 matching lines...) Expand all
312 /* Read the schema information out of the schema tables 321 /* Read the schema information out of the schema tables
313 */ 322 */
314 assert( db->init.busy ); 323 assert( db->init.busy );
315 { 324 {
316 char *zSql; 325 char *zSql;
317 zSql = sqlite3MPrintf(db, 326 zSql = sqlite3MPrintf(db,
318 "SELECT name, rootpage, sql FROM '%q'.%s ORDER BY rowid", 327 "SELECT name, rootpage, sql FROM '%q'.%s ORDER BY rowid",
319 db->aDb[iDb].zName, zMasterName); 328 db->aDb[iDb].zName, zMasterName);
320 #ifndef SQLITE_OMIT_AUTHORIZATION 329 #ifndef SQLITE_OMIT_AUTHORIZATION
321 { 330 {
322 int (*xAuth)(void*,int,const char*,const char*,const char*,const char*); 331 sqlite3_xauth xAuth;
323 xAuth = db->xAuth; 332 xAuth = db->xAuth;
324 db->xAuth = 0; 333 db->xAuth = 0;
325 #endif 334 #endif
326 rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0); 335 rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0);
327 #ifndef SQLITE_OMIT_AUTHORIZATION 336 #ifndef SQLITE_OMIT_AUTHORIZATION
328 db->xAuth = xAuth; 337 db->xAuth = xAuth;
329 } 338 }
330 #endif 339 #endif
331 if( rc==SQLITE_OK ) rc = initData.rc; 340 if( rc==SQLITE_OK ) rc = initData.rc;
332 sqlite3DbFree(db, zSql); 341 sqlite3DbFree(db, zSql);
333 #ifndef SQLITE_OMIT_ANALYZE 342 #ifndef SQLITE_OMIT_ANALYZE
334 if( rc==SQLITE_OK ){ 343 if( rc==SQLITE_OK ){
335 sqlite3AnalysisLoad(db, iDb); 344 sqlite3AnalysisLoad(db, iDb);
336 } 345 }
337 #endif 346 #endif
338 } 347 }
339 if( db->mallocFailed ){ 348 if( db->mallocFailed ){
340 rc = SQLITE_NOMEM; 349 rc = SQLITE_NOMEM;
341 sqlite3ResetInternalSchema(db, -1); 350 sqlite3ResetAllSchemasOfConnection(db);
342 } 351 }
343 if( rc==SQLITE_OK || (db->flags&SQLITE_RecoveryMode)){ 352 if( rc==SQLITE_OK || (db->flags&SQLITE_RecoveryMode)){
344 /* Black magic: If the SQLITE_RecoveryMode flag is set, then consider 353 /* Black magic: If the SQLITE_RecoveryMode flag is set, then consider
345 ** the schema loaded, even if errors occurred. In this situation the 354 ** the schema loaded, even if errors occurred. In this situation the
346 ** current sqlite3_prepare() operation will fail, but the following one 355 ** current sqlite3_prepare() operation will fail, but the following one
347 ** will attempt to compile the supplied statement against whatever subset 356 ** will attempt to compile the supplied statement against whatever subset
348 ** of the schema was loaded before the error occurred. The primary 357 ** of the schema was loaded before the error occurred. The primary
349 ** purpose of this is to allow access to the sqlite_master table 358 ** purpose of this is to allow access to the sqlite_master table
350 ** even when its contents have been corrupted. 359 ** even when its contents have been corrupted.
351 */ 360 */
(...skipping 26 matching lines...) Expand all
378 ** 387 **
379 ** After a database is initialized, the DB_SchemaLoaded bit is set 388 ** After a database is initialized, the DB_SchemaLoaded bit is set
380 ** bit is set in the flags field of the Db structure. If the database 389 ** bit is set in the flags field of the Db structure. If the database
381 ** file was of zero-length, then the DB_Empty flag is also set. 390 ** file was of zero-length, then the DB_Empty flag is also set.
382 */ 391 */
383 int sqlite3Init(sqlite3 *db, char **pzErrMsg){ 392 int sqlite3Init(sqlite3 *db, char **pzErrMsg){
384 int i, rc; 393 int i, rc;
385 int commit_internal = !(db->flags&SQLITE_InternChanges); 394 int commit_internal = !(db->flags&SQLITE_InternChanges);
386 395
387 assert( sqlite3_mutex_held(db->mutex) ); 396 assert( sqlite3_mutex_held(db->mutex) );
397 assert( db->init.busy==0 );
388 rc = SQLITE_OK; 398 rc = SQLITE_OK;
389 db->init.busy = 1; 399 db->init.busy = 1;
390 for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ 400 for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
391 if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue; 401 if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue;
392 rc = sqlite3InitOne(db, i, pzErrMsg); 402 rc = sqlite3InitOne(db, i, pzErrMsg);
393 if( rc ){ 403 if( rc ){
394 sqlite3ResetInternalSchema(db, i); 404 sqlite3ResetOneSchema(db, i);
395 } 405 }
396 } 406 }
397 407
398 /* Once all the other databases have been initialised, load the schema 408 /* Once all the other databases have been initialized, load the schema
399 ** for the TEMP database. This is loaded last, as the TEMP database 409 ** for the TEMP database. This is loaded last, as the TEMP database
400 ** schema may contain references to objects in other databases. 410 ** schema may contain references to objects in other databases.
401 */ 411 */
402 #ifndef SQLITE_OMIT_TEMPDB 412 #ifndef SQLITE_OMIT_TEMPDB
403 if( rc==SQLITE_OK && ALWAYS(db->nDb>1) 413 assert( db->nDb>1 );
404 && !DbHasProperty(db, 1, DB_SchemaLoaded) ){ 414 if( rc==SQLITE_OK && !DbHasProperty(db, 1, DB_SchemaLoaded) ){
405 rc = sqlite3InitOne(db, 1, pzErrMsg); 415 rc = sqlite3InitOne(db, 1, pzErrMsg);
406 if( rc ){ 416 if( rc ){
407 sqlite3ResetInternalSchema(db, 1); 417 sqlite3ResetOneSchema(db, 1);
408 } 418 }
409 } 419 }
410 #endif 420 #endif
411 421
412 db->init.busy = 0; 422 db->init.busy = 0;
413 if( rc==SQLITE_OK && commit_internal ){ 423 if( rc==SQLITE_OK && commit_internal ){
414 sqlite3CommitInternalChanges(db); 424 sqlite3CommitInternalChanges(db);
415 } 425 }
416 426
417 return rc; 427 return rc;
418 } 428 }
419 429
420 /* 430 /*
421 ** This routine is a no-op if the database schema is already initialised. 431 ** This routine is a no-op if the database schema is already initialized.
422 ** Otherwise, the schema is loaded. An error code is returned. 432 ** Otherwise, the schema is loaded. An error code is returned.
423 */ 433 */
424 int sqlite3ReadSchema(Parse *pParse){ 434 int sqlite3ReadSchema(Parse *pParse){
425 int rc = SQLITE_OK; 435 int rc = SQLITE_OK;
426 sqlite3 *db = pParse->db; 436 sqlite3 *db = pParse->db;
427 assert( sqlite3_mutex_held(db->mutex) ); 437 assert( sqlite3_mutex_held(db->mutex) );
428 if( !db->init.busy ){ 438 if( !db->init.busy ){
429 rc = sqlite3Init(db, &pParse->zErrMsg); 439 rc = sqlite3Init(db, &pParse->zErrMsg);
430 } 440 }
431 if( rc!=SQLITE_OK ){ 441 if( rc!=SQLITE_OK ){
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 if( rc!=SQLITE_OK ) return; 475 if( rc!=SQLITE_OK ) return;
466 openedTransaction = 1; 476 openedTransaction = 1;
467 } 477 }
468 478
469 /* Read the schema cookie from the database. If it does not match the 479 /* Read the schema cookie from the database. If it does not match the
470 ** value stored as part of the in-memory schema representation, 480 ** value stored as part of the in-memory schema representation,
471 ** set Parse.rc to SQLITE_SCHEMA. */ 481 ** set Parse.rc to SQLITE_SCHEMA. */
472 sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie); 482 sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie);
473 assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); 483 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
474 if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){ 484 if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){
475 sqlite3ResetInternalSchema(db, iDb); 485 sqlite3ResetOneSchema(db, iDb);
476 pParse->rc = SQLITE_SCHEMA; 486 pParse->rc = SQLITE_SCHEMA;
477 } 487 }
478 488
479 /* Close the transaction, if one was opened. */ 489 /* Close the transaction, if one was opened. */
480 if( openedTransaction ){ 490 if( openedTransaction ){
481 sqlite3BtreeCommit(pBt); 491 sqlite3BtreeCommit(pBt);
482 } 492 }
483 } 493 }
484 } 494 }
485 495
(...skipping 23 matching lines...) Expand all
509 if( db->aDb[i].pSchema==pSchema ){ 519 if( db->aDb[i].pSchema==pSchema ){
510 break; 520 break;
511 } 521 }
512 } 522 }
513 assert( i>=0 && i<db->nDb ); 523 assert( i>=0 && i<db->nDb );
514 } 524 }
515 return i; 525 return i;
516 } 526 }
517 527
518 /* 528 /*
529 ** Free all memory allocations in the pParse object
530 */
531 void sqlite3ParserReset(Parse *pParse){
532 if( pParse ){
533 sqlite3 *db = pParse->db;
534 sqlite3DbFree(db, pParse->aLabel);
535 sqlite3ExprListDelete(db, pParse->pConstExpr);
536 }
537 }
538
539 /*
519 ** Compile the UTF-8 encoded SQL statement zSql into a statement handle. 540 ** Compile the UTF-8 encoded SQL statement zSql into a statement handle.
520 */ 541 */
521 static int sqlite3Prepare( 542 static int sqlite3Prepare(
522 sqlite3 *db, /* Database handle. */ 543 sqlite3 *db, /* Database handle. */
523 const char *zSql, /* UTF-8 encoded SQL statement. */ 544 const char *zSql, /* UTF-8 encoded SQL statement. */
524 int nBytes, /* Length of zSql in bytes. */ 545 int nBytes, /* Length of zSql in bytes. */
525 int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */ 546 int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */
526 Vdbe *pReprepare, /* VM being reprepared */ 547 Vdbe *pReprepare, /* VM being reprepared */
527 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ 548 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
528 const char **pzTail /* OUT: End of parsed string */ 549 const char **pzTail /* OUT: End of parsed string */
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 ** but it does *not* override schema lock detection, so this all still 587 ** but it does *not* override schema lock detection, so this all still
567 ** works even if READ_UNCOMMITTED is set. 588 ** works even if READ_UNCOMMITTED is set.
568 */ 589 */
569 for(i=0; i<db->nDb; i++) { 590 for(i=0; i<db->nDb; i++) {
570 Btree *pBt = db->aDb[i].pBt; 591 Btree *pBt = db->aDb[i].pBt;
571 if( pBt ){ 592 if( pBt ){
572 assert( sqlite3BtreeHoldsMutex(pBt) ); 593 assert( sqlite3BtreeHoldsMutex(pBt) );
573 rc = sqlite3BtreeSchemaLocked(pBt); 594 rc = sqlite3BtreeSchemaLocked(pBt);
574 if( rc ){ 595 if( rc ){
575 const char *zDb = db->aDb[i].zName; 596 const char *zDb = db->aDb[i].zName;
576 sqlite3Error(db, rc, "database schema is locked: %s", zDb); 597 sqlite3ErrorWithMsg(db, rc, "database schema is locked: %s", zDb);
577 testcase( db->flags & SQLITE_ReadUncommitted ); 598 testcase( db->flags & SQLITE_ReadUncommitted );
578 goto end_prepare; 599 goto end_prepare;
579 } 600 }
580 } 601 }
581 } 602 }
582 603
583 sqlite3VtabUnlockList(db); 604 sqlite3VtabUnlockList(db);
584 605
585 pParse->db = db; 606 pParse->db = db;
586 pParse->nQueryLoop = (double)1; 607 pParse->nQueryLoop = 0; /* Logarithmic, so 0 really means 1 */
587 if( nBytes>=0 && (nBytes==0 || zSql[nBytes-1]!=0) ){ 608 if( nBytes>=0 && (nBytes==0 || zSql[nBytes-1]!=0) ){
588 char *zSqlCopy; 609 char *zSqlCopy;
589 int mxLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH]; 610 int mxLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];
590 testcase( nBytes==mxLen ); 611 testcase( nBytes==mxLen );
591 testcase( nBytes==mxLen+1 ); 612 testcase( nBytes==mxLen+1 );
592 if( nBytes>mxLen ){ 613 if( nBytes>mxLen ){
593 sqlite3Error(db, SQLITE_TOOBIG, "statement too long"); 614 sqlite3ErrorWithMsg(db, SQLITE_TOOBIG, "statement too long");
594 rc = sqlite3ApiExit(db, SQLITE_TOOBIG); 615 rc = sqlite3ApiExit(db, SQLITE_TOOBIG);
595 goto end_prepare; 616 goto end_prepare;
596 } 617 }
597 zSqlCopy = sqlite3DbStrNDup(db, zSql, nBytes); 618 zSqlCopy = sqlite3DbStrNDup(db, zSql, nBytes);
598 if( zSqlCopy ){ 619 if( zSqlCopy ){
599 sqlite3RunParser(pParse, zSqlCopy, &zErrMsg); 620 sqlite3RunParser(pParse, zSqlCopy, &zErrMsg);
600 sqlite3DbFree(db, zSqlCopy); 621 sqlite3DbFree(db, zSqlCopy);
601 pParse->zTail = &zSql[pParse->zTail-zSqlCopy]; 622 pParse->zTail = &zSql[pParse->zTail-zSqlCopy];
602 }else{ 623 }else{
603 pParse->zTail = &zSql[nBytes]; 624 pParse->zTail = &zSql[nBytes];
604 } 625 }
605 }else{ 626 }else{
606 sqlite3RunParser(pParse, zSql, &zErrMsg); 627 sqlite3RunParser(pParse, zSql, &zErrMsg);
607 } 628 }
608 assert( 1==(int)pParse->nQueryLoop ); 629 assert( 0==pParse->nQueryLoop );
609 630
610 if( db->mallocFailed ){ 631 if( db->mallocFailed ){
611 pParse->rc = SQLITE_NOMEM; 632 pParse->rc = SQLITE_NOMEM;
612 } 633 }
613 if( pParse->rc==SQLITE_DONE ) pParse->rc = SQLITE_OK; 634 if( pParse->rc==SQLITE_DONE ) pParse->rc = SQLITE_OK;
614 if( pParse->checkSchema ){ 635 if( pParse->checkSchema ){
615 schemaIsValid(pParse); 636 schemaIsValid(pParse);
616 } 637 }
617 if( db->mallocFailed ){ 638 if( db->mallocFailed ){
618 pParse->rc = SQLITE_NOMEM; 639 pParse->rc = SQLITE_NOMEM;
(...skipping 19 matching lines...) Expand all
638 iFirst = 0; 659 iFirst = 0;
639 mx = 8; 660 mx = 8;
640 } 661 }
641 for(i=iFirst; i<mx; i++){ 662 for(i=iFirst; i<mx; i++){
642 sqlite3VdbeSetColName(pParse->pVdbe, i-iFirst, COLNAME_NAME, 663 sqlite3VdbeSetColName(pParse->pVdbe, i-iFirst, COLNAME_NAME,
643 azColName[i], SQLITE_STATIC); 664 azColName[i], SQLITE_STATIC);
644 } 665 }
645 } 666 }
646 #endif 667 #endif
647 668
648 assert( db->init.busy==0 || saveSqlFlag==0 );
649 if( db->init.busy==0 ){ 669 if( db->init.busy==0 ){
650 Vdbe *pVdbe = pParse->pVdbe; 670 Vdbe *pVdbe = pParse->pVdbe;
651 sqlite3VdbeSetSql(pVdbe, zSql, (int)(pParse->zTail-zSql), saveSqlFlag); 671 sqlite3VdbeSetSql(pVdbe, zSql, (int)(pParse->zTail-zSql), saveSqlFlag);
652 } 672 }
653 if( pParse->pVdbe && (rc!=SQLITE_OK || db->mallocFailed) ){ 673 if( pParse->pVdbe && (rc!=SQLITE_OK || db->mallocFailed) ){
654 sqlite3VdbeFinalize(pParse->pVdbe); 674 sqlite3VdbeFinalize(pParse->pVdbe);
655 assert(!(*ppStmt)); 675 assert(!(*ppStmt));
656 }else{ 676 }else{
657 *ppStmt = (sqlite3_stmt*)pParse->pVdbe; 677 *ppStmt = (sqlite3_stmt*)pParse->pVdbe;
658 } 678 }
659 679
660 if( zErrMsg ){ 680 if( zErrMsg ){
661 sqlite3Error(db, rc, "%s", zErrMsg); 681 sqlite3ErrorWithMsg(db, rc, "%s", zErrMsg);
662 sqlite3DbFree(db, zErrMsg); 682 sqlite3DbFree(db, zErrMsg);
663 }else{ 683 }else{
664 sqlite3Error(db, rc, 0); 684 sqlite3Error(db, rc);
665 } 685 }
666 686
667 /* Delete any TriggerPrg structures allocated while parsing this statement. */ 687 /* Delete any TriggerPrg structures allocated while parsing this statement. */
668 while( pParse->pTriggerPrg ){ 688 while( pParse->pTriggerPrg ){
669 TriggerPrg *pT = pParse->pTriggerPrg; 689 TriggerPrg *pT = pParse->pTriggerPrg;
670 pParse->pTriggerPrg = pT->pNext; 690 pParse->pTriggerPrg = pT->pNext;
671 sqlite3DbFree(db, pT); 691 sqlite3DbFree(db, pT);
672 } 692 }
673 693
674 end_prepare: 694 end_prepare:
675 695
696 sqlite3ParserReset(pParse);
676 sqlite3StackFree(db, pParse); 697 sqlite3StackFree(db, pParse);
677 rc = sqlite3ApiExit(db, rc); 698 rc = sqlite3ApiExit(db, rc);
678 assert( (rc&db->errMask)==rc ); 699 assert( (rc&db->errMask)==rc );
679 return rc; 700 return rc;
680 } 701 }
681 static int sqlite3LockAndPrepare( 702 static int sqlite3LockAndPrepare(
682 sqlite3 *db, /* Database handle. */ 703 sqlite3 *db, /* Database handle. */
683 const char *zSql, /* UTF-8 encoded SQL statement. */ 704 const char *zSql, /* UTF-8 encoded SQL statement. */
684 int nBytes, /* Length of zSql in bytes. */ 705 int nBytes, /* Length of zSql in bytes. */
685 int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */ 706 int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */
686 Vdbe *pOld, /* VM being reprepared */ 707 Vdbe *pOld, /* VM being reprepared */
687 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ 708 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
688 const char **pzTail /* OUT: End of parsed string */ 709 const char **pzTail /* OUT: End of parsed string */
689 ){ 710 ){
690 int rc; 711 int rc;
691 assert( ppStmt!=0 ); 712 assert( ppStmt!=0 );
692 *ppStmt = 0; 713 *ppStmt = 0;
693 if( !sqlite3SafetyCheckOk(db) ){ 714 if( !sqlite3SafetyCheckOk(db) ){
694 return SQLITE_MISUSE_BKPT; 715 return SQLITE_MISUSE_BKPT;
695 } 716 }
696 sqlite3_mutex_enter(db->mutex); 717 sqlite3_mutex_enter(db->mutex);
697 sqlite3BtreeEnterAll(db); 718 sqlite3BtreeEnterAll(db);
698 rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail); 719 rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
699 if( rc==SQLITE_SCHEMA ){ 720 if( rc==SQLITE_SCHEMA ){
700 sqlite3_finalize(*ppStmt); 721 sqlite3_finalize(*ppStmt);
701 rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail); 722 rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
702 } 723 }
703 sqlite3BtreeLeaveAll(db); 724 sqlite3BtreeLeaveAll(db);
704 sqlite3_mutex_leave(db->mutex); 725 sqlite3_mutex_leave(db->mutex);
726 assert( rc==SQLITE_OK || *ppStmt==0 );
705 return rc; 727 return rc;
706 } 728 }
707 729
708 /* 730 /*
709 ** Rerun the compilation of a statement after a schema change. 731 ** Rerun the compilation of a statement after a schema change.
710 ** 732 **
711 ** If the statement is successfully recompiled, return SQLITE_OK. Otherwise, 733 ** If the statement is successfully recompiled, return SQLITE_OK. Otherwise,
712 ** if the statement cannot be recompiled because another connection has 734 ** if the statement cannot be recompiled because another connection has
713 ** locked the sqlite3_master table, return SQLITE_LOCKED. If any other error 735 ** locked the sqlite3_master table, return SQLITE_LOCKED. If any other error
714 ** occurs, return SQLITE_SCHEMA. 736 ** occurs, return SQLITE_SCHEMA.
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 */ 816 */
795 char *zSql8; 817 char *zSql8;
796 const char *zTail8 = 0; 818 const char *zTail8 = 0;
797 int rc = SQLITE_OK; 819 int rc = SQLITE_OK;
798 820
799 assert( ppStmt ); 821 assert( ppStmt );
800 *ppStmt = 0; 822 *ppStmt = 0;
801 if( !sqlite3SafetyCheckOk(db) ){ 823 if( !sqlite3SafetyCheckOk(db) ){
802 return SQLITE_MISUSE_BKPT; 824 return SQLITE_MISUSE_BKPT;
803 } 825 }
826 if( nBytes>=0 ){
827 int sz;
828 const char *z = (const char*)zSql;
829 for(sz=0; sz<nBytes && (z[sz]!=0 || z[sz+1]!=0); sz += 2){}
830 nBytes = sz;
831 }
804 sqlite3_mutex_enter(db->mutex); 832 sqlite3_mutex_enter(db->mutex);
805 zSql8 = sqlite3Utf16to8(db, zSql, nBytes, SQLITE_UTF16NATIVE); 833 zSql8 = sqlite3Utf16to8(db, zSql, nBytes, SQLITE_UTF16NATIVE);
806 if( zSql8 ){ 834 if( zSql8 ){
807 rc = sqlite3LockAndPrepare(db, zSql8, -1, saveSqlFlag, 0, ppStmt, &zTail8); 835 rc = sqlite3LockAndPrepare(db, zSql8, -1, saveSqlFlag, 0, ppStmt, &zTail8);
808 } 836 }
809 837
810 if( zTail8 && pzTail ){ 838 if( zTail8 && pzTail ){
811 /* If sqlite3_prepare returns a tail pointer, we calculate the 839 /* If sqlite3_prepare returns a tail pointer, we calculate the
812 ** equivalent pointer into the UTF-16 string by counting the unicode 840 ** equivalent pointer into the UTF-16 string by counting the unicode
813 ** characters between zSql8 and zTail8, and then returning a pointer 841 ** characters between zSql8 and zTail8, and then returning a pointer
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ 877 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
850 const void **pzTail /* OUT: End of parsed string */ 878 const void **pzTail /* OUT: End of parsed string */
851 ){ 879 ){
852 int rc; 880 int rc;
853 rc = sqlite3Prepare16(db,zSql,nBytes,1,ppStmt,pzTail); 881 rc = sqlite3Prepare16(db,zSql,nBytes,1,ppStmt,pzTail);
854 assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ 882 assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */
855 return rc; 883 return rc;
856 } 884 }
857 885
858 #endif /* SQLITE_OMIT_UTF16 */ 886 #endif /* SQLITE_OMIT_UTF16 */
OLDNEW
« no previous file with comments | « third_party/sqlite/sqlite-src-3080704/src/pragma.c ('k') | third_party/sqlite/sqlite-src-3080704/src/printf.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698