Has anyone considered supporting SQLITE_SYNC_DATAONLY on Windows using
NtFlushBuffersFileEx?
http://msdn.microsoft.com/en-us/library/windows/hardware/hh967720(v=vs.85).aspx
>When the SQLITE_SYNC_DATAONLY flag is used, it means that the sync operation
>only needs to flush data to mass storage. Inode information need not be
>flushed.
Am I missing something in SQLite's expectations? Isn't this just flush the
file's data/content but not the associated metadata (filesize, etc Windows
inode-equivalent) i.e.
NtFlushBuffersFileEx(...,flags=FLUSH_FLAGS_FILE_DATA_ONLY,...)?
It looks like it's just a change in winSync() to replace
rc = osFlushFileBuffers(pFile->h);
with something like
IO_STATUS_BLOCK ioStatusBlock;
...
int isDataOnly = (flags&SQLITE_SYNC_DATAONLY);
...
if (isDataOnly)
rc = osFlushFileBuffers(pFile->h);
else
rc = HRESULT_FROM_NT(NtFlushBuffersFileEx(pFile->h,
FLUSH_FLAGS_FILE_DATA_ONLY, &ioStatusBlock);
Would a new system call be used to optionally support sync-dataonly semantics?
Or would this be handled via a new compile-time option and #ifdef in winSync?
- Howard