Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Increase the max_page_count on ROLLBACK, if necessary, so that it is sufficient to cover the entire database. Fix for the problem identified by forum post 3b9e894312. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
12c012162ce110a7a7fbbe853f422e23 |
User & Date: | drh 2022-03-01 14:13:32 |
Context
2022-03-05
| ||
19:39 | Cherry-pick all bug fix changes since the 3.38.0 release. (check-in: 45a5d5ac user: drh tags: branch-3.38) | |
2022-03-01
| ||
15:48 | Fix slightly-incorrect assert() statements. Forum post f1e83b77b5ff37db (check-in: 3c9f5c9d user: drh tags: trunk) | |
14:13 | Increase the max_page_count on ROLLBACK, if necessary, so that it is sufficient to cover the entire database. Fix for the problem identified by forum post 3b9e894312. (check-in: 12c01216 user: drh tags: trunk) | |
2022-02-28
| ||
16:44 | Fix the Xfer-optimization on the INSERT statement so that it is omitted if there is a RETURNING clause, since that optimization is not able to deal with RETURNING. See forum thread 595e132f71 for details. (check-in: 1d3760a5 user: drh tags: trunk) | |
Changes
Changes to src/pager.c.
︙ | ︙ | |||
2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 | */ if( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ){ rc = pager_truncate(pPager, mxPg); if( rc!=SQLITE_OK ){ goto end_playback; } pPager->dbSize = mxPg; } /* Copy original pages out of the journal and back into the ** database file and/or page cache. */ for(u=0; u<nRec; u++){ if( needPagerReset ){ | > > > | 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 | */ if( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ){ rc = pager_truncate(pPager, mxPg); if( rc!=SQLITE_OK ){ goto end_playback; } pPager->dbSize = mxPg; if( pPager->mxPgno<mxPg ){ pPager->mxPgno = mxPg; } } /* Copy original pages out of the journal and back into the ** database file and/or page cache. */ for(u=0; u<nRec; u++){ if( needPagerReset ){ |
︙ | ︙ |
Changes to test/pager1.test.
︙ | ︙ | |||
2920 2921 2922 2923 2924 2925 2926 2927 2928 | sqlite3_db_status db CACHE_MISS 1 } {0 3 0} do_test 43.3 { db eval { SELECT * FROM t3 } sqlite3_db_status db CACHE_MISS 0 } {0 1 0} finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 | sqlite3_db_status db CACHE_MISS 1 } {0 3 0} do_test 43.3 { db eval { SELECT * FROM t3 } sqlite3_db_status db CACHE_MISS 0 } {0 1 0} # 2022-03-01 Forum post https://sqlite.org/forum/forumpost/3b9e894312 # Ensure that max_page_count gets adjusted upward, if needed, on a # ROLLBACK. # db close sqlite3 db :memory: do_execsql_test 44.1 { PRAGMA page_size=4096; PRAGMA auto_vacuum=FULL; CREATE TABLE t1(a INTEGER PRIMARY KEY, b ANY); WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<50) INSERT INTO t1(a,b) SELECT x, zeroblob(1000) FROM c; CREATE TABLE t2 AS SELECT * FROM t1; PRAGMA page_count; } {31} do_execsql_test 44.2 { BEGIN; DROP TABLE t2; PRAGMA incremental_vacuum=50; PRAGMA page_count; PRAGMA max_page_count=2; } {16 16} do_execsql_test 44.3 { ROLLBACK; PRAGMA page_count; PRAGMA max_page_count; } {31 31} finish_test |