@@ -7799,6 +7799,66 @@ int sqlite3PagerWalReadFrameRaw(
7799
7799
}
7800
7800
}
7801
7801
7802
+ int sqlite3PagerWalBeginCommit (Pager * pPager ) {
7803
+ int rc ;
7804
+ if (!pagerUseWal (pPager )) {
7805
+ return SQLITE_ERROR ;
7806
+ }
7807
+ rc = pagerBeginReadTransaction (pPager );
7808
+ if (rc != SQLITE_OK ) {
7809
+ return rc ;
7810
+ }
7811
+ return pPager -> wal -> methods .xBeginWriteTransaction (pPager -> wal -> pData );
7812
+ }
7813
+
7814
+ int sqlite3PagerWalEndCommit (Pager * pPager ) {
7815
+ if (!pagerUseWal (pPager )) {
7816
+ return SQLITE_ERROR ;
7817
+ }
7818
+ return pPager -> wal -> methods .xEndWriteTransaction (pPager -> wal -> pData );
7819
+ }
7820
+
7821
+ int sqlite3PagerWalInsert (Pager * pPager , unsigned int iFrame , void * pBuf , unsigned int nBuf ) {
7822
+ int rc = SQLITE_OK ;
7823
+
7824
+ if (!pagerUseWal (pPager )) {
7825
+ return SQLITE_ERROR ;
7826
+ }
7827
+ unsigned int mxFrame ;
7828
+ rc = pPager -> wal -> methods .xFrameCount (pPager -> wal -> pData , 1 , & mxFrame );
7829
+ if (rc != SQLITE_OK ) {
7830
+ return rc ;
7831
+ }
7832
+ if (iFrame <= mxFrame ) {
7833
+ return SQLITE_OK ;
7834
+ }
7835
+ u8 * aFrame = (u8 * )pBuf ;
7836
+ u32 pgno = sqlite3Get4byte (& aFrame [0 ]);
7837
+ u32 nTruncate = sqlite3Get4byte (& aFrame [4 ]);
7838
+ u8 * pData = aFrame + 24 ;
7839
+
7840
+ PgHdr pghdr ;
7841
+ memset (& pghdr , 0 , sizeof (PgHdr ));
7842
+ pghdr .pPage = NULL ;
7843
+ pghdr .pData = pData ;
7844
+ pghdr .pExtra = NULL ;
7845
+ pghdr .pgno = pgno ;
7846
+ pghdr .flags = 0 ;
7847
+
7848
+ int isCommit = (nTruncate != 0 );
7849
+
7850
+ int nFrames = 0 ;
7851
+ rc = pPager -> wal -> methods .xFrames (pPager -> wal -> pData ,
7852
+ pPager -> pageSize ,
7853
+ & pghdr ,
7854
+ nTruncate ,
7855
+ isCommit ,
7856
+ pPager -> walSyncFlags ,
7857
+ & nFrames );
7858
+ assert ( nFrames == 1 );
7859
+ return rc ;
7860
+ }
7861
+
7802
7862
#ifdef SQLITE_ENABLE_SETLK_TIMEOUT
7803
7863
/*
7804
7864
** If pager pPager is a wal-mode database not in exclusive locking mode,
0 commit comments