Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix "PRAGMA data_version" so that it works the same way with locking_mode=PERSIST and journal_mode=PERSIST configured. Fix for 7a458c2a5f. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
45748e2db028ffbda5d3e747493721a5 |
User & Date: | dan 2019-12-22 14:29:55 |
Context
2019-12-22
| ||
17:32 | Ensure sqlite3WindowRewrite() is called on a SELECT statement before any terms aremoved from it as part of IN() clause processing. Fix for [f00d096ca]. (check-in: 8c856404 user: dan tags: trunk) | |
14:29 | Fix "PRAGMA data_version" so that it works the same way with locking_mode=PERSIST and journal_mode=PERSIST configured. Fix for 7a458c2a5f. (check-in: 45748e2d user: dan tags: trunk) | |
2019-12-21
| ||
20:43 | Fix a spurious report of corruption from the fts3/4 integrity-check triggered by using the languageid option. (check-in: 70815e27 user: dan tags: trunk) | |
Changes
Changes to ext/fts5/test/fts5integrity.test.
207
208
209
210
211
212
213
214
215
216
217
218
219
220
...
229
230
231
232
233
234
235
236
237
|
if {$res == [lsort -integer $res2]} { incr ok }
}
set ok
} {1000}
}
#-------------------------------------------------------------------------
reset_db
do_execsql_test 7.0 {
PRAGMA encoding = 'UTF-16';
CREATE VIRTUAL TABLE vt0 USING fts5(c0);
INSERT INTO vt0 VALUES (x'46f0');
SELECT quote(c0) FROM vt0;
} {X'46F0'}
................................................................................
}
do_execsql_test 7.4 {
UPDATE vt0 SET c0='';
}
do_execsql_test 7.5 {
INSERT INTO vt0(vt0) VALUES('integrity-check');
}
finish_test
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
...
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
|
if {$res == [lsort -integer $res2]} { incr ok } } set ok } {1000} } #------------------------------------------------------------------------- # reset_db do_execsql_test 7.0 { PRAGMA encoding = 'UTF-16'; CREATE VIRTUAL TABLE vt0 USING fts5(c0); INSERT INTO vt0 VALUES (x'46f0'); SELECT quote(c0) FROM vt0; } {X'46F0'} ................................................................................ } do_execsql_test 7.4 { UPDATE vt0 SET c0=''; } do_execsql_test 7.5 { INSERT INTO vt0(vt0) VALUES('integrity-check'); } #------------------------------------------------------------------------- # Ticket 7a458c2a5f4 # reset_db do_execsql_test 8.0 { PRAGMA locking_mode = EXCLUSIVE; PRAGMA journal_mode = PERSIST; CREATE VIRTUAL TABLE vt0 USING fts5(c0); } {exclusive persist} do_execsql_test 8.1 { PRAGMA data_version } {1} do_execsql_test 8.2 { INSERT INTO vt0(vt0) VALUES('integrity-check'); PRAGMA data_version; } {1} do_execsql_test 8.1 { INSERT INTO vt0(vt0, rank) VALUES('usermerge', 2); } finish_test |
Changes to src/pager.c.
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
....
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
|
int sqlite3PagerCommitPhaseTwo(Pager *pPager){ int rc = SQLITE_OK; /* Return code */ /* This routine should not be called if a prior error has occurred. ** But if (due to a coding error elsewhere in the system) it does get ** called, just return the same error code without doing anything. */ if( NEVER(pPager->errCode) ) return pPager->errCode; assert( pPager->eState==PAGER_WRITER_LOCKED || pPager->eState==PAGER_WRITER_FINISHED || (pagerUseWal(pPager) && pPager->eState==PAGER_WRITER_CACHEMOD) ); assert( assert_pager_state(pPager) ); ................................................................................ ){ assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) || !pPager->journalOff ); pPager->eState = PAGER_READER; return SQLITE_OK; } PAGERTRACE(("COMMIT %d\n", PAGERID(pPager))); pPager->iDataVersion++; rc = pager_end_transaction(pPager, pPager->setMaster, 1); return pager_error(pPager, rc); } /* ** If a write transaction is open, then all changes made within the ** transaction are reverted and the current write-transaction is closed. |
>
<
|
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
....
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
|
int sqlite3PagerCommitPhaseTwo(Pager *pPager){ int rc = SQLITE_OK; /* Return code */ /* This routine should not be called if a prior error has occurred. ** But if (due to a coding error elsewhere in the system) it does get ** called, just return the same error code without doing anything. */ if( NEVER(pPager->errCode) ) return pPager->errCode; pPager->iDataVersion++; assert( pPager->eState==PAGER_WRITER_LOCKED || pPager->eState==PAGER_WRITER_FINISHED || (pagerUseWal(pPager) && pPager->eState==PAGER_WRITER_CACHEMOD) ); assert( assert_pager_state(pPager) ); ................................................................................ ){ assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) || !pPager->journalOff ); pPager->eState = PAGER_READER; return SQLITE_OK; } PAGERTRACE(("COMMIT %d\n", PAGERID(pPager))); rc = pager_end_transaction(pPager, pPager->setMaster, 1); return pager_error(pPager, rc); } /* ** If a write transaction is open, then all changes made within the ** transaction are reverted and the current write-transaction is closed. |
Changes to test/pragma3.test.
250 251 252 253 254 255 256 257 258 |
} {2 111 222} do_test pragma3-430 { db2 eval {PRAGMA data_version; SELECT * FROM t1;} } {3 111 222} db2 close } } finish_test |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 |
} {2 111 222} do_test pragma3-430 { db2 eval {PRAGMA data_version; SELECT * FROM t1;} } {3 111 222} db2 close } } #------------------------------------------------------------------------- # Check that empty write transactions do not cause the return of "PRAGMA # data_version" to be decremented with journal_mode=PERSIST and # locking_mode=EXCLUSIVE # foreach {tn sql} { A { } B { PRAGMA journal_mode = PERSIST; PRAGMA locking_mode = EXCLUSIVE; } } { reset_db execsql $sql do_execsql_test pragma3-510$tn { CREATE TABLE t1(x, y); INSERT INTO t1 VALUES(1, 2); PRAGMA data_version; } {1} do_execsql_test pragma3-520$tn { BEGIN EXCLUSIVE; COMMIT; PRAGMA data_version; } {1} } finish_test |