Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Make sure internal queries are well ordered, even when the reverse_unordered_selects pragma is in effect. Ticket [eb942c64a157]. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
0209f17180065d9c213b6c437be1c3c4 |
User & Date: | drh 2010-01-12 23:54:15.000 |
References
2010-01-13
| ||
13:24 | • Fixed ticket [eb942c64a1]: PRAGMA reverse_unordered_selects causes schema parse to fail plus 3 other changes (artifact: 2c0af9bfdb user: drh) | |
Context
2010-01-13
| ||
00:04 | Make the sqlite3_result_double() interface work the same as sqlite3_result_int64() when SQLITE_OMIT_FLOATING_POINT is defined. (check-in: 61df598660 user: drh tags: trunk) | |
2010-01-12
| ||
23:54 | Make sure internal queries are well ordered, even when the reverse_unordered_selects pragma is in effect. Ticket [eb942c64a157]. (check-in: 0209f17180 user: drh tags: trunk) | |
19:28 | Fix the implementation of CURRENT_TIMESTAME and CURRENT_DATE when SQLITE_OMIT_DATETIME_FUNCS is defined. (check-in: eb98265b59 user: drh tags: trunk) | |
Changes
Changes to src/prepare.c.
︙ | ︙ | |||
311 312 313 314 315 316 317 | /* Read the schema information out of the schema tables */ assert( db->init.busy ); { char *zSql; zSql = sqlite3MPrintf(db, | | | 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 | /* Read the schema information out of the schema tables */ assert( db->init.busy ); { char *zSql; zSql = sqlite3MPrintf(db, "SELECT name, rootpage, sql FROM '%q'.%s ORDER BY rowid", db->aDb[iDb].zName, zMasterName); (void)sqlite3SafetyOff(db); #ifndef SQLITE_OMIT_AUTHORIZATION { int (*xAuth)(void*,int,const char*,const char*,const char*,const char*); xAuth = db->xAuth; db->xAuth = 0; |
︙ | ︙ |
Changes to src/vacuum.c.
︙ | ︙ | |||
100 101 102 103 104 105 106 | ** restored before returning. Then set the writable-schema flag, and ** disable CHECK and foreign key constraints. */ saved_flags = db->flags; saved_nChange = db->nChange; saved_nTotalChange = db->nTotalChange; saved_xTrace = db->xTrace; db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks; | | | 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | ** restored before returning. Then set the writable-schema flag, and ** disable CHECK and foreign key constraints. */ saved_flags = db->flags; saved_nChange = db->nChange; saved_nTotalChange = db->nTotalChange; saved_xTrace = db->xTrace; db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks; db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder); db->xTrace = 0; pMain = db->aDb[0].pBt; isMemDb = sqlite3PagerIsMemdb(sqlite3BtreePager(pMain)); /* Attach the temporary database as 'vacuum_db'. The synchronous pragma ** can be set to 'off' for this file, as it is not recovered if a crash |
︙ | ︙ |
Changes to src/vdbe.c.
︙ | ︙ | |||
4572 4573 4574 4575 4576 4577 4578 | sqlite3BtreeEnterAll(db); if( pOp->p2 || DbHasProperty(db, iDb, DB_SchemaLoaded) ){ zMaster = SCHEMA_TABLE(iDb); initData.db = db; initData.iDb = pOp->p1; initData.pzErrMsg = &p->zErrMsg; zSql = sqlite3MPrintf(db, | | | 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 | sqlite3BtreeEnterAll(db); if( pOp->p2 || DbHasProperty(db, iDb, DB_SchemaLoaded) ){ zMaster = SCHEMA_TABLE(iDb); initData.db = db; initData.iDb = pOp->p1; initData.pzErrMsg = &p->zErrMsg; zSql = sqlite3MPrintf(db, "SELECT name, rootpage, sql FROM '%q'.%s WHERE %s ORDER BY rowid", db->aDb[iDb].zName, zMaster, pOp->p4.z); if( zSql==0 ){ rc = SQLITE_NOMEM; }else{ (void)sqlite3SafetyOff(db); assert( db->init.busy==0 ); db->init.busy = 1; |
︙ | ︙ |
Changes to test/auth2.test.
︙ | ︙ | |||
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | SQLITE_UPDATE sqlite_master rootpage main {} SQLITE_UPDATE sqlite_master sql main {} SQLITE_READ sqlite_master ROWID main {} SQLITE_READ sqlite_master name main {} SQLITE_READ sqlite_master rootpage main {} SQLITE_READ sqlite_master sql main {} SQLITE_READ sqlite_master tbl_name main {} } do_test auth2-2.2 { set ::authargs {} db eval { CREATE VIEW v2 AS SELECT x+y AS a, y+z AS b from t2; } set ::authargs } {SQLITE_INSERT sqlite_master {} main {} SQLITE_CREATE_VIEW v2 {} main {} SQLITE_UPDATE sqlite_master type main {} SQLITE_UPDATE sqlite_master name main {} SQLITE_UPDATE sqlite_master tbl_name main {} SQLITE_UPDATE sqlite_master rootpage main {} SQLITE_UPDATE sqlite_master sql main {} SQLITE_READ sqlite_master ROWID main {} SQLITE_READ sqlite_master name main {} SQLITE_READ sqlite_master rootpage main {} SQLITE_READ sqlite_master sql main {} SQLITE_READ sqlite_master tbl_name main {} } do_test auth2-2.3 { set ::authargs {} db eval { SELECT a, b FROM v2; } set ::authargs | > > | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | SQLITE_UPDATE sqlite_master rootpage main {} SQLITE_UPDATE sqlite_master sql main {} SQLITE_READ sqlite_master ROWID main {} SQLITE_READ sqlite_master name main {} SQLITE_READ sqlite_master rootpage main {} SQLITE_READ sqlite_master sql main {} SQLITE_READ sqlite_master tbl_name main {} SQLITE_READ sqlite_master ROWID main {} } do_test auth2-2.2 { set ::authargs {} db eval { CREATE VIEW v2 AS SELECT x+y AS a, y+z AS b from t2; } set ::authargs } {SQLITE_INSERT sqlite_master {} main {} SQLITE_CREATE_VIEW v2 {} main {} SQLITE_UPDATE sqlite_master type main {} SQLITE_UPDATE sqlite_master name main {} SQLITE_UPDATE sqlite_master tbl_name main {} SQLITE_UPDATE sqlite_master rootpage main {} SQLITE_UPDATE sqlite_master sql main {} SQLITE_READ sqlite_master ROWID main {} SQLITE_READ sqlite_master name main {} SQLITE_READ sqlite_master rootpage main {} SQLITE_READ sqlite_master sql main {} SQLITE_READ sqlite_master tbl_name main {} SQLITE_READ sqlite_master ROWID main {} } do_test auth2-2.3 { set ::authargs {} db eval { SELECT a, b FROM v2; } set ::authargs |
︙ | ︙ |
Changes to test/whereA.test.
︙ | ︙ | |||
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | db eval { PRAGMA reverse_unordered_selects=1; SELECT * FROM t1; } } {3 4.53 {} 2 hello world 1 2 3} do_test whereA-1.3 { db eval { PRAGMA reverse_unordered_selects=1; SELECT * FROM t1 ORDER BY rowid; } } {1 2 3 2 hello world 3 4.53 {}} do_test whereA-2.1 { db eval { PRAGMA reverse_unordered_selects=0; SELECT * FROM t1 WHERE a>0; } } {1 2 3 2 hello world 3 4.53 {}} | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | db eval { PRAGMA reverse_unordered_selects=1; SELECT * FROM t1; } } {3 4.53 {} 2 hello world 1 2 3} do_test whereA-1.3 { db close sqlite3 db test.db db eval { PRAGMA reverse_unordered_selects=1; SELECT * FROM t1; } } {3 4.53 {} 2 hello world 1 2 3} do_test whereA-1.4 { db close sqlite3 db test.db db eval { PRAGMA reverse_unordered_selects=1; SELECT * FROM t1 ORDER BY rowid; } } {1 2 3 2 hello world 3 4.53 {}} do_test whereA-1.5 { db eval { VACUUM; SELECT * FROM t1 ORDER BY rowid; } } {1 2 3 2 hello world 3 4.53 {}} do_test whereA-1.6 { db eval { PRAGMA reverse_unordered_selects; } } {1} do_test whereA-1.7 { db close sqlite3 db test.db db eval { PRAGMA reverse_unordered_selects=1; VACUUM; SELECT * FROM t1; } } {3 4.53 {} 2 hello world 1 2 3} do_test whereA-2.1 { db eval { PRAGMA reverse_unordered_selects=0; SELECT * FROM t1 WHERE a>0; } } {1 2 3 2 hello world 3 4.53 {}} |
︙ | ︙ |