From: drh Date: Tue, 15 Nov 2016 17:37:56 +0000 (+0000) Subject: Experimental changes toward making snapshots serializable. X-Git-Tag: version-3.16.0~96^2~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ba6eb8769f4f22cbf0f0244e2d39ac887c85d935;p=thirdparty%2Fsqlite.git Experimental changes toward making snapshots serializable. FossilOrigin-Name: b6a81fa1fc1fb78a65894129851a4ec3986640de --- diff --git a/manifest b/manifest index ebd7485bf2..9c806b3a89 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Change\sthe\sOP_Last\sopcode\sso\sthat\sit\sis\sa\sno-op\sif\sthe\scursor\sis\salready\npointing\sat\sthe\send\sof\sthe\sb-tree. -D 2016-11-15T04:00:24.244 +C Experimental\schanges\stoward\smaking\ssnapshots\sserializable. +D 2016-11-15T17:37:56.374 F Makefile.in 6b572807415d3f0a379cebc9461416d8df4a12c8 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc bb4d970894abbbe0e88d00aac29bd52af8bc95f4 @@ -389,7 +389,7 @@ F src/resolve.c bb070cf5f23611c44ab7e4788803684e385fc3fb F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac F src/select.c 672b1af237ad257149fc5189f3277dcbca036eeb F src/shell.c f04e4af75c5517735397d060ed0b4a874104bb41 -F src/sqlite.h.in 803f7050f69b2eea573fac219f3c92582c096027 +F src/sqlite.h.in dfe8c1b4ac66635495ec9a6a7205fcb0f27f4451 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 8648034aa702469afb553231677306cc6492a1ae F src/sqliteInt.h c471d791b10c0f2164c8b7a87adc338e703c09cc @@ -465,7 +465,7 @@ F src/vdbesort.c 91fda3909326860382b0ca8aa251e609c6a9d62c F src/vdbetrace.c 41963d5376f0349842b5fc4aaaaacd7d9cdc0834 F src/vtab.c e02cacb5c7ae742631edeb9ae9f53d399f093fd8 F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 -F src/wal.c 7e8557314bcf867ffe3fff1d8ef2d207ace8e065 +F src/wal.c 88f8d8adcaecf6a225ae5098062fd151634fb672 F src/wal.h bf03a23da3100ab25e5c0363450233cfee09cfc2 F src/walker.c 91a6df7435827e41cff6bb7df50ea00934ee78b0 F src/where.c 952f76e7a03727480b274b66ca6641b1657cd591 @@ -1534,7 +1534,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 5ed0bd387699a0f3b477d4f3cfcb460a6a44cb84 -R 666875522a5a69f5f9bb179805474981 +P 663473850c4274270445b3771911fa773a8c405f +R 1784ed6bcadef61e22ad39533122ebea +T *branch * serializable-snapshot +T *sym-serializable-snapshot * +T -sym-trunk * U drh -Z 3c6d6cf804e5301c81a1f9af34f5b4ed +Z 8a16f1f47c269929c7f968ee35b8cb55 diff --git a/manifest.uuid b/manifest.uuid index 53cf085748..5e74943d27 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -663473850c4274270445b3771911fa773a8c405f \ No newline at end of file +b6a81fa1fc1fb78a65894129851a4ec3986640de \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index dd70407c1b..7987cfae5e 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -8283,7 +8283,9 @@ int sqlite3_system_errno(sqlite3*); ** to an historical snapshot (if possible). The destructor for ** sqlite3_snapshot objects is [sqlite3_snapshot_free()]. */ -typedef struct sqlite3_snapshot sqlite3_snapshot; +typedef struct sqlite3_snapshot { + unsigned char hidden[48]; +} sqlite3_snapshot; /* ** CAPI3REF: Record A Database Snapshot diff --git a/src/wal.c b/src/wal.c index d71ee81a51..669c428efa 100644 --- a/src/wal.c +++ b/src/wal.c @@ -3393,9 +3393,14 @@ int sqlite3WalHeapMemory(Wal *pWal){ int sqlite3WalSnapshotGet(Wal *pWal, sqlite3_snapshot **ppSnapshot){ int rc = SQLITE_OK; WalIndexHdr *pRet; + static const u32 aZero[4] = { 0, 0, 0, 0 }; assert( pWal->readLock>=0 && pWal->writeLock==0 ); + if( memcmp(&pWal->hdr.aFrameCksum[0],aZero,16)==0 ){ + *ppSnapshot = 0; + return SQLITE_ERROR; + } pRet = (WalIndexHdr*)sqlite3_malloc(sizeof(WalIndexHdr)); if( pRet==0 ){ rc = SQLITE_NOMEM_BKPT;