8181** src/where.c
8282** src/wherecode.c
8383** test/all.test
84+ ** test/dbdata.test
85+ ** test/dbfuzz.c
86+ ** test/dbfuzz001.test
87+ ** test/dbfuzz2-seed1.db
88+ ** test/dbfuzz2.c
89+ ** test/dbpage.test
90+ ** test/dbpagefault.test
91+ ** test/dbstatus.test
92+ ** test/dbstatus2.test
93+ ** test/delete_db.test
94+ ** test/fuzzdata1.db
95+ ** test/fuzzdata2.db
96+ ** test/fuzzdata3.db
97+ ** test/fuzzdata4.db
98+ ** test/fuzzdata5.db
99+ ** test/fuzzdata6.db
100+ ** test/fuzzdata7.db
101+ ** test/fuzzdata8.db
102+ ** test/indexedby.test
103+ ** test/manydb.test
104+ ** test/memdb.test
105+ ** test/memdb1.test
106+ ** test/memdb2.test
107+ ** test/optfuzz-db01.c
108+ ** test/optfuzz-db01.txt
84109** test/permutations.test
110+ ** test/resetdb.test
85111** test/rowvaluevtab.test
112+ ** test/sessionfuzz-data1.db
113+ ** test/tempdb.test
114+ ** test/tempdb2.test
115+ ** test/tkt-94c04eaadb.test
86116** tool/mkkeywordhash.c
87117** tool/mksqlite3c-noext.tcl
88118** tool/mksqlite3c.tcl
@@ -10991,7 +11021,7 @@ SQLITE_API int libsql_wal_insert_end(sqlite3*);
1099111021** CAPI3REF: Insert a frame into the WAL
1099211022** METHOD: sqlite3
1099311023*/
10994- SQLITE_API int libsql_wal_insert_frame(sqlite3*, unsigned int, void *, unsigned int);
11024+ SQLITE_API int libsql_wal_insert_frame(sqlite3*, unsigned int, void *, unsigned int, int * );
1099511025
1099611026/*
1099711027** CAPI3REF: Low-level system error code
@@ -16441,7 +16471,7 @@ SQLITE_PRIVATE int sqlite3PagerWalFrameCount(Pager *, unsigned int *);
1644116471SQLITE_PRIVATE int sqlite3PagerWalReadFrame(Pager *, unsigned int, void *, unsigned int);
1644216472SQLITE_PRIVATE int sqlite3PagerWalBeginCommit(Pager*);
1644316473SQLITE_PRIVATE int sqlite3PagerWalEndCommit(Pager*);
16444- SQLITE_PRIVATE int sqlite3PagerWalInsert(Pager*, unsigned int, void *, unsigned int);
16474+ SQLITE_PRIVATE int sqlite3PagerWalInsert(Pager*, unsigned int, void *, unsigned int, int * );
1644516475
1644616476SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager*, int);
1644716477SQLITE_PRIVATE int sqlite3PagerSetSpillsize(Pager*, int);
@@ -65340,9 +65370,12 @@ SQLITE_PRIVATE int sqlite3PagerWalEndCommit(Pager *pPager) {
6534065370 return rc;
6534165371}
6534265372
65343- SQLITE_PRIVATE int sqlite3PagerWalInsert(Pager *pPager, unsigned int iFrame, void *pBuf, unsigned int nBuf) {
65373+ SQLITE_PRIVATE int sqlite3PagerWalInsert(Pager *pPager, unsigned int iFrame, void *pBuf, unsigned int nBuf, int *pConflict ) {
6534465374 int rc = SQLITE_OK;
6534565375
65376+ if( pConflict ) {
65377+ *pConflict = 0;
65378+ }
6534665379 if (!pagerUseWal(pPager)) {
6534765380 return SQLITE_ERROR;
6534865381 }
@@ -65352,6 +65385,22 @@ SQLITE_PRIVATE int sqlite3PagerWalInsert(Pager *pPager, unsigned int iFrame, voi
6535265385 return rc;
6535365386 }
6535465387 if (iFrame <= mxFrame) {
65388+ unsigned long frame_len = nBuf-24;
65389+ unsigned char current[frame_len];
65390+ rc = pPager->wal->methods.xReadFrame(pPager->wal->pData, iFrame, frame_len, current);
65391+ if (rc != SQLITE_OK) {
65392+ return rc;
65393+ }
65394+ int conflict = 0;
65395+ if (memcmp(pBuf+24, current, frame_len) != 0) {
65396+ conflict = 1;
65397+ }
65398+ if (pConflict) {
65399+ *pConflict = conflict;
65400+ }
65401+ if (conflict) {
65402+ return SQLITE_ERROR;
65403+ }
6535565404 return SQLITE_OK;
6535665405 }
6535765406 u8 *aFrame = (u8*)pBuf;
@@ -183347,7 +183396,8 @@ int libsql_wal_insert_frame(
183347183396 sqlite3* db,
183348183397 unsigned int iFrame,
183349183398 void *pBuf,
183350- unsigned int nBuf
183399+ unsigned int nBuf,
183400+ int *pConflict
183351183401){
183352183402 int rc = SQLITE_OK;
183353183403 Pager *pPager;
@@ -183362,7 +183412,7 @@ int libsql_wal_insert_frame(
183362183412
183363183413 sqlite3_mutex_enter(db->mutex);
183364183414 pPager = sqlite3BtreePager(db->aDb[0].pBt);
183365- rc = sqlite3PagerWalInsert(pPager, iFrame, pBuf, nBuf);
183415+ rc = sqlite3PagerWalInsert(pPager, iFrame, pBuf, nBuf, pConflict );
183366183416 if (rc != SQLITE_OK) {
183367183417 goto out_unlock;
183368183418 }
0 commit comments