I am trying to implement the demo VFS provided at https://www.sqlite.org/src/doc/trunk/src/test_demovfs.c for a System on Chip (ESP32) that has its own inbuilt filesystem (spiffs),
No changes have been made to the above code except, I had to add following code in the demoOpen method, just before call to "open" POSIX method: if ( flags&SQLITE_OPEN_READWRITE || flags&SQLITE_OPEN_MAIN_JOURNAL ) { struct stat st; memset(&st, 0, sizeof(struct stat)); int rc = stat( zName, &st ); Serial.println(zName); if (rc == -1) { int fd = open(zName, (O_CREAT | O_EXCL), S_IRUSR | S_IWUSR); close(fd); //oflags |= (O_CREAT | O_RDWR); Serial.println("Create mode"); } } since it was not creating the file and giving error at Open. I have given below the log of VFS function calls when calling sqlite3_open() and sqlite3_exec() for simple table creation CREATE TABLE t1 (c1): Enter file name: /spiffs/test_vfs.db fn: FullPathNamefn:Fullpathname:Success fn: Open /spiffs/test_vfs.db Create mode fn:Open:Success fn: Read fn: FlushBuffer fn:FlushBuffer:Success Opened database successfully Enter SQL (max 500 characters): CREATE TABLE t1 (c1) fn: Access fn:Access:Success fn: FileSize fn: FlushBuffer fn:FlushBuffer:Success fn:FileSize:Success fn: Open /spiffs/test_vfs.db-journal Create mode fn:Open:Success fn: Write fn:Write:Success fn: Read fn: FlushBuffer fn: DirectWrite: fn:DirectWrite:Success fn:FlushBuffer:Success fn: Sync fn: FlushBuffer fn:FlushBuffer:Success fn:Sync:Success fn: FileSize fn: FlushBuffer fn:FlushBuffer:Success fn:FileSize:Success fn: FileSize fn: FlushBuffer fn:FlushBuffer:Success fn:FileSize:Success fn: Read fn: FlushBuffer fn:FlushBuffer:Success fn: Read fn: FlushBuffer fn:FlushBuffer:Success fn: Read fn: FlushBuffer fn:FlushBuffer:Success fn: Read fn: FlushBuffer fn:FlushBuffer:Success fn: Read fn: FlushBuffer fn:FlushBuffer:Success fn: Read fn: FlushBuffer fn:FlushBuffer:Success fn: FileSize fn: FlushBuffer fn:FlushBuffer:Success fn:FileSize:Success fn: Read fn: FlushBuffer fn:FlushBuffer:Success fn: Write fn:Write:Success fn: Sync fn: FlushBuffer fn: DirectWrite: fn:DirectWrite:Success fn:FlushBuffer:Success fn:Sync:Success SQL error: disk I/O error At the end, there are two files on disk: vfs_test.db (0 bytes) and vfs_test.db-journal (512 bytes). There is no problem reading a database. But when CREATE or INSERT is involved, it gives disk I/O error. Any idea why it is throwing disk I/O error, inspite of the previous sync success? Any suggestions on how I could figure it out? Regards Arun _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users