1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-10-24 09:53:10 +03:00

If the file-system supports f2fs style atomic-writes, sync the directory after deleting a journal file in journal_mode=DELETE mode in synchronous=NORMAL or synchronous=FULL modes (as well as synchronous=EXTRA).

FossilOrigin-Name: c1e37cb70a8e93368c19ba0fdb987f0616abac028e3541d793a4e6f005b0e513
This commit is contained in:
dan
2025-09-16 19:52:12 +00:00
parent 48790b48a7
commit a12c1dcca6
4 changed files with 28 additions and 13 deletions

View File

@@ -3612,14 +3612,27 @@ void sqlite3PagerSetFlags(
unsigned pgFlags /* Various flags */
){
unsigned level = pgFlags & PAGER_SYNCHRONOUS_MASK;
if( pPager->tempFile ){
if( pPager->tempFile || level==PAGER_SYNCHRONOUS_OFF ){
pPager->noSync = 1;
pPager->fullSync = 0;
pPager->extraSync = 0;
}else{
pPager->noSync = level==PAGER_SYNCHRONOUS_OFF ?1:0;
pPager->noSync = 0;
pPager->fullSync = level>=PAGER_SYNCHRONOUS_FULL ?1:0;
pPager->extraSync = level==PAGER_SYNCHRONOUS_EXTRA ?1:0;
/* Set Pager.extraSync if "PRAGMA synchronous=EXTRA" is requested, or
** if the file-system supports F2FS style atomic writes. If this flag
** is set, SQLite syncs the directory to disk immediately after deleting
** a journal file in "PRAGMA journal_mode=DELETE" mode. */
if( level==PAGER_SYNCHRONOUS_EXTRA
#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE
|| (sqlite3OsDeviceCharacteristics(pPager->fd) & SQLITE_IOCAP_BATCH_ATOMIC)
#endif
){
pPager->extraSync = 1;
}else{
pPager->extraSync = 0;
}
}
if( pPager->noSync ){
pPager->syncFlags = 0;