Skip to content

Commit 54d3bdc

Browse files
authored
Merge pull request #1843 from tursodatabase/fix-wal-count
libsql-sqlite3: Fix libsql_wal_frame_count() for empty databases
2 parents 876a4a7 + 98a5345 commit 54d3bdc

File tree

4 files changed

+18
-3
lines changed

4 files changed

+18
-3
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65291,7 +65291,8 @@ SQLITE_PRIVATE int sqlite3PagerWalFrameCount(Pager *pPager, unsigned int *pnFram
6529165291
if( pagerUseWal(pPager) ){
6529265292
return pPager->wal->methods.xFrameCount(pPager->wal->pData, 0, pnFrames);
6529365293
}else{
65294-
return SQLITE_ERROR;
65294+
*pnFrames = 0;
65295+
return SQLITE_OK;
6529565296
}
6529665297
}
6529765298

libsql-ffi/bundled/src/sqlite3.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65291,7 +65291,8 @@ SQLITE_PRIVATE int sqlite3PagerWalFrameCount(Pager *pPager, unsigned int *pnFram
6529165291
if( pagerUseWal(pPager) ){
6529265292
return pPager->wal->methods.xFrameCount(pPager->wal->pData, 0, pnFrames);
6529365293
}else{
65294-
return SQLITE_ERROR;
65294+
*pnFrames = 0;
65295+
return SQLITE_OK;
6529565296
}
6529665297
}
6529765298

libsql-sqlite3/src/pager.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7780,7 +7780,8 @@ int sqlite3PagerWalFrameCount(Pager *pPager, unsigned int *pnFrames){
77807780
if( pagerUseWal(pPager) ){
77817781
return pPager->wal->methods.xFrameCount(pPager->wal->pData, 0, pnFrames);
77827782
}else{
7783-
return SQLITE_ERROR;
7783+
*pnFrames = 0;
7784+
return SQLITE_OK;
77847785
}
77857786
}
77867787

libsql-sqlite3/src/test_walapi.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <sqlite3.h>
22
#include <stdio.h>
33
#include <string.h>
4+
#include <assert.h>
45

56
#if 0
67
static void dump_frame(unsigned char *frame, size_t size){
@@ -127,6 +128,7 @@ int open_db(const char *path, sqlite3 **db) {
127128
int main(int argc, char *argv[])
128129
{
129130
sqlite3 *db_primary, *db_backup;
131+
unsigned int max_frame;
130132
int rc;
131133

132134
rc = open_db("primary.db", &db_primary);
@@ -136,6 +138,16 @@ int main(int argc, char *argv[])
136138
gen_data(db_primary);
137139

138140
rc = open_db("backup.db", &db_backup);
141+
if (rc != SQLITE_OK) {
142+
return 1;
143+
}
144+
rc = libsql_wal_frame_count(db_backup, &max_frame);
145+
if (rc != SQLITE_OK) {
146+
fprintf(stderr, "Can't get frame count for backup: %s\n", sqlite3_errmsg(db_backup));
147+
return 1;
148+
}
149+
assert(max_frame == 0);
150+
139151
sync_db(db_primary, db_backup);
140152

141153
if (cmp_data(db_primary, db_backup)) {

0 commit comments

Comments
 (0)