Skip to content

Commit 876a4a7

Browse files
authored
Merge pull request #1842 from tursodatabase/wal-api-fixes
WAL API fixes
2 parents 3d52c07 + e2e3a6e commit 876a4a7

File tree

4 files changed

+54
-40
lines changed

4 files changed

+54
-40
lines changed

libsql-ffi/bundled/SQLite3MultipleCiphers/src/sqlite3.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183219,6 +183219,7 @@ int libsql_wal_frame_count(
183219183219
sqlite3_mutex_enter(db->mutex);
183220183220
pPager = sqlite3BtreePager(db->aDb[0].pBt);
183221183221
rc = sqlite3PagerWalFrameCount(pPager, pnFrame);
183222+
sqlite3Error(db, rc);
183222183223
sqlite3_mutex_leave(db->mutex);
183223183224
return rc;
183224183225
#endif
@@ -183244,12 +183245,13 @@ int libsql_wal_get_frame(
183244183245
if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
183245183246
#endif
183246183247

183247-
sqlite3_mutex_enter(db->mutex);
183248-
pPager = sqlite3BtreePager(db->aDb[0].pBt);
183249-
rc = sqlite3PagerWalReadFrameRaw(pPager, iFrame, pBuf, nBuf);
183250-
sqlite3_mutex_leave(db->mutex);
183248+
sqlite3_mutex_enter(db->mutex);
183249+
pPager = sqlite3BtreePager(db->aDb[0].pBt);
183250+
rc = sqlite3PagerWalReadFrameRaw(pPager, iFrame, pBuf, nBuf);
183251+
sqlite3Error(db, rc);
183252+
sqlite3_mutex_leave(db->mutex);
183251183253

183252-
return rc;
183254+
return rc;
183253183255
#endif
183254183256
}
183255183257

@@ -183276,6 +183278,7 @@ int libsql_wal_insert_begin(sqlite3 *db) {
183276183278
goto out_unlock;
183277183279
}
183278183280
out_unlock:
183281+
sqlite3Error(db, rc);
183279183282
sqlite3_mutex_leave(db->mutex);
183280183283
return rc;
183281183284
}
@@ -183291,6 +183294,7 @@ int libsql_wal_insert_end(sqlite3 *db) {
183291183294
goto out_unlock;
183292183295
}
183293183296
out_unlock:
183297+
sqlite3Error(db, rc);
183294183298
sqlite3_mutex_leave(db->mutex);
183295183299
return rc;
183296183300
}
@@ -183322,6 +183326,7 @@ int libsql_wal_insert_frame(
183322183326
goto out_unlock;
183323183327
}
183324183328
out_unlock:
183329+
sqlite3Error(db, rc);
183325183330
sqlite3_mutex_leave(db->mutex);
183326183331

183327183332
return rc;

libsql-ffi/bundled/src/sqlite3.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183219,6 +183219,7 @@ int libsql_wal_frame_count(
183219183219
sqlite3_mutex_enter(db->mutex);
183220183220
pPager = sqlite3BtreePager(db->aDb[0].pBt);
183221183221
rc = sqlite3PagerWalFrameCount(pPager, pnFrame);
183222+
sqlite3Error(db, rc);
183222183223
sqlite3_mutex_leave(db->mutex);
183223183224
return rc;
183224183225
#endif
@@ -183244,12 +183245,13 @@ int libsql_wal_get_frame(
183244183245
if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
183245183246
#endif
183246183247

183247-
sqlite3_mutex_enter(db->mutex);
183248-
pPager = sqlite3BtreePager(db->aDb[0].pBt);
183249-
rc = sqlite3PagerWalReadFrameRaw(pPager, iFrame, pBuf, nBuf);
183250-
sqlite3_mutex_leave(db->mutex);
183248+
sqlite3_mutex_enter(db->mutex);
183249+
pPager = sqlite3BtreePager(db->aDb[0].pBt);
183250+
rc = sqlite3PagerWalReadFrameRaw(pPager, iFrame, pBuf, nBuf);
183251+
sqlite3Error(db, rc);
183252+
sqlite3_mutex_leave(db->mutex);
183251183253

183252-
return rc;
183254+
return rc;
183253183255
#endif
183254183256
}
183255183257

@@ -183276,6 +183278,7 @@ int libsql_wal_insert_begin(sqlite3 *db) {
183276183278
goto out_unlock;
183277183279
}
183278183280
out_unlock:
183281+
sqlite3Error(db, rc);
183279183282
sqlite3_mutex_leave(db->mutex);
183280183283
return rc;
183281183284
}
@@ -183291,6 +183294,7 @@ int libsql_wal_insert_end(sqlite3 *db) {
183291183294
goto out_unlock;
183292183295
}
183293183296
out_unlock:
183297+
sqlite3Error(db, rc);
183294183298
sqlite3_mutex_leave(db->mutex);
183295183299
return rc;
183296183300
}
@@ -183322,6 +183326,7 @@ int libsql_wal_insert_frame(
183322183326
goto out_unlock;
183323183327
}
183324183328
out_unlock:
183329+
sqlite3Error(db, rc);
183325183330
sqlite3_mutex_leave(db->mutex);
183326183331

183327183332
return rc;

libsql-sqlite3/src/main.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2470,6 +2470,7 @@ int libsql_wal_frame_count(
24702470
sqlite3_mutex_enter(db->mutex);
24712471
pPager = sqlite3BtreePager(db->aDb[0].pBt);
24722472
rc = sqlite3PagerWalFrameCount(pPager, pnFrame);
2473+
sqlite3Error(db, rc);
24732474
sqlite3_mutex_leave(db->mutex);
24742475
return rc;
24752476
#endif
@@ -2495,12 +2496,13 @@ int libsql_wal_get_frame(
24952496
if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
24962497
#endif
24972498

2498-
sqlite3_mutex_enter(db->mutex);
2499-
pPager = sqlite3BtreePager(db->aDb[0].pBt);
2500-
rc = sqlite3PagerWalReadFrameRaw(pPager, iFrame, pBuf, nBuf);
2501-
sqlite3_mutex_leave(db->mutex);
2499+
sqlite3_mutex_enter(db->mutex);
2500+
pPager = sqlite3BtreePager(db->aDb[0].pBt);
2501+
rc = sqlite3PagerWalReadFrameRaw(pPager, iFrame, pBuf, nBuf);
2502+
sqlite3Error(db, rc);
2503+
sqlite3_mutex_leave(db->mutex);
25022504

2503-
return rc;
2505+
return rc;
25042506
#endif
25052507
}
25062508

@@ -2527,6 +2529,7 @@ int libsql_wal_insert_begin(sqlite3 *db) {
25272529
goto out_unlock;
25282530
}
25292531
out_unlock:
2532+
sqlite3Error(db, rc);
25302533
sqlite3_mutex_leave(db->mutex);
25312534
return rc;
25322535
}
@@ -2542,6 +2545,7 @@ int libsql_wal_insert_end(sqlite3 *db) {
25422545
goto out_unlock;
25432546
}
25442547
out_unlock:
2548+
sqlite3Error(db, rc);
25452549
sqlite3_mutex_leave(db->mutex);
25462550
return rc;
25472551
}
@@ -2573,6 +2577,7 @@ int libsql_wal_insert_frame(
25732577
goto out_unlock;
25742578
}
25752579
out_unlock:
2580+
sqlite3Error(db, rc);
25762581
sqlite3_mutex_leave(db->mutex);
25772582

25782583
return rc;

libsql-sqlite3/src/test_walapi.c

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -103,42 +103,41 @@ static void gen_data(sqlite3 *db){
103103
sqlite3_exec(db, "INSERT INTO users (id, name) VALUES (3, 'Jim Beam')", 0, 0, 0);
104104
}
105105

106+
int open_db(const char *path, sqlite3 **db) {
107+
int rc;
108+
109+
rc = sqlite3_open(path, db);
110+
if (rc != SQLITE_OK) {
111+
fprintf(stderr, "Can't open database %s: %s\n", path, sqlite3_errmsg(*db));
112+
return rc;
113+
}
114+
rc = sqlite3_exec(*db, "PRAGMA journal_mode=WAL", NULL, NULL, NULL);
115+
if (rc != SQLITE_OK) {
116+
fprintf(stderr, "Can't set journal mode for %s: %s\n", path, sqlite3_errmsg(*db));
117+
return rc;
118+
}
119+
rc = sqlite3_wal_autocheckpoint(*db, 0);
120+
if (rc != SQLITE_OK) {
121+
fprintf(stderr, "Can't disable checkpointing for %s: %s\n", path, sqlite3_errmsg(*db));
122+
return rc;
123+
}
124+
return rc;
125+
}
126+
106127
int main(int argc, char *argv[])
107128
{
108129
sqlite3 *db_primary, *db_backup;
109130
int rc;
110131

111-
rc = sqlite3_open("primary.db", &db_primary);
132+
rc = open_db("primary.db", &db_primary);
112133
if (rc != SQLITE_OK) {
113-
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db_primary));
114134
return 1;
115135
}
116-
rc = sqlite3_wal_autocheckpoint(db_primary, 0);
117-
if (rc != SQLITE_OK) {
118-
fprintf(stderr, "Can't disable checkpointing: %s\n", sqlite3_errmsg(db_primary));
119-
return 1;
120-
}
121-
sqlite3_exec(db_primary, "PRAGMA journal_mode=WAL", NULL, NULL, NULL);
122-
123136
gen_data(db_primary);
124137

125-
rc = sqlite3_open("backup.db", &db_backup);
126-
if (rc != SQLITE_OK) {
127-
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db_backup));
128-
return 1;
129-
}
130-
rc = sqlite3_wal_autocheckpoint(db_backup, 0);
131-
if (rc != SQLITE_OK) {
132-
fprintf(stderr, "Can't disable checkpointing: %s\n", sqlite3_errmsg(db_backup));
133-
return 1;
134-
}
135-
rc = sqlite3_exec(db_backup, "PRAGMA journal_mode=WAL", NULL, NULL, NULL);
136-
if (rc != SQLITE_OK) {
137-
fprintf(stderr, "Can't set journal mode: %s\n", sqlite3_errmsg(db_backup));
138-
return 1;
139-
}
140-
138+
rc = open_db("backup.db", &db_backup);
141139
sync_db(db_primary, db_backup);
140+
142141
if (cmp_data(db_primary, db_backup)) {
143142
return 1;
144143
}

0 commit comments

Comments
 (0)