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

Reply via email to