· 6 years ago · Mar 18, 2019, 02:16 AM
1#include <stdio.h>
2#include <sqlite3.h>
3
4static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
5 int i;
6 for(i = 0; i<argc; i++) {
7 printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
8 }
9 printf("\n");
10 return 0;
11}
12
13
14int main() {
15 int rc;
16 sqlite3 *db;
17 int ret = sqlite3_open("tmp.sql", &db);
18 char *zErrMsg = 0;
19 printf("%d\n", ret);
20
21 rc = sqlite3_exec(db, "PRAGMA journal_mode=WAL;", callback, 0, &zErrMsg);
22 if( rc != SQLITE_OK ){
23 fprintf(stderr, "SQL error: %s\n", zErrMsg);
24 }
25
26
27 char *sql;
28 sql = "CREATE TABLE IF NOT EXISTS ItemTable (key TEXT UNIQUE ON CONFLICT REPLACE, value BLOB NOT NULL ON CONFLICT FAIL)";
29 /* Execute SQL statement */
30 rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
31 if( rc != SQLITE_OK ){
32 fprintf(stderr, "SQL error: %s\n", zErrMsg);
33 }
34
35 FILE *f = fopen("tmp.sql-wal", "wb");
36 char tmp[0x1000];
37 memset(tmp, 'a', 0x1000);
38 memset(tmp+0x100, 'b', 0xf00);
39 fseek(f, 0, SEEK_SET);
40 fwrite(tmp, 1, 0x1000, f);
41 fsync(f);
42 fclose(f);
43
44 int dumb;
45 scanf("%d", &dumb);
46
47
48 sql = "SELECT key, value FROM ItemTable";
49 rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
50 if( rc != SQLITE_OK ){
51 fprintf(stderr, "SQL error: %s\n", zErrMsg);
52 }
53
54 sqlite3_close(db);
55}