@@ -10953,6 +10953,15 @@ SQLITE_API void *libsql_close_hook(sqlite3 *db, void (*xClose)(void *pCtx, sqlit
10953
10953
*/
10954
10954
SQLITE_API int libsql_wal_disable_checkpoint(sqlite3 *db);
10955
10955
10956
+ /*
10957
+ ** CAPI3REF: Get the checkpoint sequence counter of the WAL file
10958
+ ** METHOD: sqlite3
10959
+ **
10960
+ ** ^The [libsql_wal_checkpoint_seq_count(D,P)] interface returns the checkpoint sequence counter
10961
+ ** of the WAL file for [database connection] D into *P.
10962
+ */
10963
+ SQLITE_API int libsql_wal_checkpoint_seq_count(sqlite3 *db, unsigned int *pnCkpt);
10964
+
10956
10965
/*
10957
10966
** CAPI3REF: Get the number of frames in the WAL file
10958
10967
** METHOD: sqlite3
@@ -14036,6 +14045,9 @@ typedef struct libsql_wal_methods {
14036
14045
** response to a ROLLBACK TO command. */
14037
14046
int (*xSavepointUndo)(wal_impl* pWal, unsigned int *aWalData);
14038
14047
14048
+ /* Return the current checkpoint generation in the WAL file. */
14049
+ int (*xCheckpointSeqCount)(wal_impl* pWal, unsigned int *pnCkpt);
14050
+
14039
14051
/* Return the number of frames in the WAL */
14040
14052
int (*xFrameCount)(wal_impl* pWal, int, unsigned int *);
14041
14053
@@ -57354,6 +57366,9 @@ typedef struct libsql_wal_methods {
57354
57366
** response to a ROLLBACK TO command. */
57355
57367
int (*xSavepointUndo)(wal_impl* pWal, unsigned int *aWalData);
57356
57368
57369
+ /* Return the current checkpoint generation in the WAL file. */
57370
+ int (*xCheckpointSeqCount)(wal_impl* pWal, unsigned int *pnCkpt);
57371
+
57357
57372
/* Return the number of frames in the WAL */
57358
57373
int (*xFrameCount)(wal_impl* pWal, int, unsigned int *);
57359
57374
@@ -65282,6 +65297,18 @@ SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager, sqlite3 *db){
65282
65297
return rc;
65283
65298
}
65284
65299
65300
+ /**
65301
+ ** Return the current checkpoint generation in the WAL file.
65302
+ **/
65303
+ SQLITE_PRIVATE int sqlite3PagerWalCheckpointSeqCount(Pager *pPager, unsigned int *pnCkpt){
65304
+ if( pagerUseWal(pPager) ){
65305
+ return pPager->wal->methods.xCheckpointSeqCount(pPager->wal->pData, pnCkpt);
65306
+ } else {
65307
+ *pnCkpt = 0;
65308
+ return SQLITE_OK;
65309
+ }
65310
+ }
65311
+
65285
65312
/**
65286
65313
** Return the number of frames in the WAL file.
65287
65314
**
@@ -69534,6 +69561,11 @@ static int walFrames(
69534
69561
return rc;
69535
69562
}
69536
69563
69564
+ SQLITE_PRIVATE int sqlite3WalCheckpointSeqCount(Wal *pWal, unsigned int *pnCkpt){
69565
+ *pnCkpt = pWal->nCkpt;
69566
+ return SQLITE_OK;
69567
+ }
69568
+
69537
69569
SQLITE_PRIVATE int sqlite3WalFrameCount(Wal *pWal, int locked, unsigned int *pnFrames){
69538
69570
int rc = SQLITE_OK;
69539
69571
if( locked==0 ) {
@@ -70053,6 +70085,7 @@ static int sqlite3WalOpen(
70053
70085
out->methods.xUndo = (int (*)(wal_impl *, int (*)(void *, unsigned int), void *))sqlite3WalUndo;
70054
70086
out->methods.xSavepoint = (void (*)(wal_impl *, unsigned int *))sqlite3WalSavepoint;
70055
70087
out->methods.xSavepointUndo = (int (*)(wal_impl *, unsigned int *))sqlite3WalSavepointUndo;
70088
+ out->methods.xCheckpointSeqCount = (int (*)(wal_impl *, unsigned int *))sqlite3WalCheckpointSeqCount;
70056
70089
out->methods.xFrameCount = (int (*)(wal_impl *, int, unsigned int *))sqlite3WalFrameCount;
70057
70090
out->methods.xFrames = (int (*)(wal_impl *, int, libsql_pghdr *, unsigned int, int, int, int *))sqlite3WalFrames;
70058
70091
out->methods.xCheckpoint = (int (*)(wal_impl *, sqlite3 *, int, int (*)(void *), void *, int, int, unsigned char *, int *, int *, int (*)(void*, int, const unsigned char*, int, int, int), void*))sqlite3WalCheckpoint;
@@ -183207,6 +183240,30 @@ int libsql_wal_disable_checkpoint(sqlite3 *db) {
183207
183240
return SQLITE_OK;
183208
183241
}
183209
183242
183243
+ /*
183244
+ ** Return the checkpoint sequence counter of the given database.
183245
+ */
183246
+ int libsql_wal_checkpoint_seq_count(sqlite3 *db, unsigned int *pnCkpt) {
183247
+ int rc = SQLITE_OK;
183248
+ Pager *pPager;
183249
+
183250
+ #ifdef SQLITE_OMIT_WAL
183251
+ *pnFrame = 0;
183252
+ return SQLITE_OK;
183253
+ #else
183254
+ #ifdef SQLITE_ENABLE_API_ARMOR
183255
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
183256
+ #endif
183257
+
183258
+ sqlite3_mutex_enter(db->mutex);
183259
+ pPager = sqlite3BtreePager(db->aDb[0].pBt);
183260
+ rc = sqlite3PagerWalCheckpointSeqCount(pPager, pnCkpt);
183261
+ sqlite3Error(db, rc);
183262
+ sqlite3_mutex_leave(db->mutex);
183263
+ return rc;
183264
+ #endif
183265
+ }
183266
+
183210
183267
/*
183211
183268
** Return the number of frames in the WAL of the given database.
183212
183269
*/
0 commit comments