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
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users