Я пытался запустить test_onefile.c пример из sqlite3 VFS examples, и я получаю отказ:sqlite3 one_file VFS Сбой
test_onefile: test_onefile.c:693: fsDelete: Assertion `strpcmp("-journal", &zPath[nName])==0' failed.
Я бегу код следующим образом:
int retval;
fs_register();
int q_cnt = 5,q_size = 150,ind = 0;
char **queries = (char**) malloc(sizeof(char) * q_cnt * q_size);
sqlite3_stmt *stmt;
sqlite3 *handle;
retval = sqlite3_open_v2("sampledb.sqlite2", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE , "fs");
if(retval)
{
printf("Database connection failed\n");
return -1;
}
printf("Connection successful\n");
// Create the SQL query for creating a table
char create_table[100] = "CREATE TABLE IF NOT EXISTS users (uname TEXT,pass TEXT NOT NULL,activated INTEGER)";
// Execute the query for creating the table
retval = sqlite3_exec(handle,create_table,0,0,0);
// Insert first row and second row
queries[ind++] = "INSERT INTO users VALUES('manish','mani',1)";
retval = sqlite3_exec(handle,queries[ind-1],0,0,0);
queries[ind++] = "INSERT INTO users VALUES('mehul','pulsar',0)";
retval = sqlite3_exec(handle,queries[ind-1],0,0,0);
Редактировать : Файл, с которым он не работает, - sampledb.sqlite2-wal
, явно не файл журнала. Однако я не понимаю, как он достиг этого.
Edit2: Ну, после удаления утверждения в исходном файле:
assert(strcmp("-journal", &zPath[nName])==0);
код, кажется, работает. Однако я не большой поклонник удаления утверждений, так как это явно привело к неожиданному поведению. У автора была причина использовать это утверждение.
Возможно, это дает вам утверждение о том, что ваше сравнение терпит неудачу (не соответствует двум строкам). поэтому он прерывает выполнение с этой точки. –
Нет. Точный код работает с VFS по умолчанию и демонстрационной VFS. Это не удается в утверждении, потому что он пытается удалить файл '-wal'. – Mattan