]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge recent trunk enhancements, and in particular the snapshot interface.
authordrh <drh@noemail.net>
Fri, 11 Dec 2015 12:53:26 +0000 (12:53 +0000)
committerdrh <drh@noemail.net>
Fri, 11 Dec 2015 12:53:26 +0000 (12:53 +0000)
FossilOrigin-Name: 7e7b24064510001ca4a0c8295fa7d0138bde8dae

16 files changed:
1  2 
Makefile.in
main.mk
manifest
manifest.uuid
src/btree.c
src/main.c
src/os_unix.c
src/pager.c
src/pager.h
src/sqlite.h.in
src/sqliteInt.h
src/test1.c
src/test_config.c
src/vdbeaux.c
src/wal.c
src/wal.h

diff --cc Makefile.in
Simple merge
diff --cc main.mk
Simple merge
diff --cc manifest
index ca458b008f953acb20087e1515af42716db05cbe,04d3534b4d509ac54d297f6119668f278351dfe9..e723acf5c55d33432e5a1bb901c5cbc95d131e38
+++ b/manifest
@@@ -1,6 -1,6 +1,6 @@@
- C Merge\sall\srecent\strunk\senhancements,\sespecially\sthe\sunix\sVFS\schanges.
- D 2015-12-02T20:22:38.912
- F Makefile.in 28325f17527ba422645ebf98901f8876c312a825
 -C Add\sthe\sexperimental\ssnapshot\sinterface.\s\sBecause\sit\sis\sexperimental,\sit\sis\nsubject\sto\schange\sor\sremoval\sat\sa\slater\sdate.
 -D 2015-12-11T12:44:52.505
 -F Makefile.in 28bcd6149e050dff35d4dcfd97e890cd387a499d
++C Merge\srecent\strunk\senhancements,\sand\sin\sparticular\sthe\ssnapshot\sinterface.
++D 2015-12-11T12:53:26.994
++F Makefile.in 2b14d1b2c0d8b4c6fd84536d3d7860e1ddc03efc
  F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
  F Makefile.msc e8fdca1cb89a1b58b5f4d3a130ea9a3d28cb314d
  F README.md 8ecc12493ff9f820cdea6520a9016001cb2e59b7
@@@ -266,7 -263,7 +266,7 @@@ F ext/userauth/userauth.c 5fa3bdb492f48
  F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
  F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
  F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
- F main.mk 6693ea5f978d0175d056baa83ace9f8aac56814e
 -F main.mk ed77cbb97848c8dae1ab928245432f74b0580162
++F main.mk 2f7ba9f9e044ecfa95eb0a446eebe1b37a6b565a
  F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
  F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
  F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
@@@ -285,7 -282,7 +285,7 @@@ F src/auth.c b56c78ebe40a2110fd361379f7
  F src/backup.c 2869a76c03eb393ee795416e2387005553df72bc
  F src/bitvec.c 1a78d450a17c5016710eec900bedfc5729bf9bdf
  F src/btmutex.c 45a968cc85afed9b5e6cf55bf1f42f8d18107f79
- F src/btree.c 59c8f28530850c9f94be62aa4c020d39a4de10d2
 -F src/btree.c 450950ce366159c3215736ae43d1062e7c06f741
++F src/btree.c 1b90ae050612380659db1ebce870fccee738e845
  F src/btree.h 2d76dee44704c47eed323356a758662724b674a0
  F src/btreeInt.h 3ab435ed27adea54d040584b0bcc488ee7db1e38
  F src/build.c e83da4d004a4e050c01acbb821ff7a7b1019c29b
@@@ -305,10 -302,10 +305,10 @@@ F src/hash.h c8f3c31722cf3277d037139097
  F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
  F src/insert.c e1d20ae8979e25519c2670233718676bedcfedc9
  F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
 -F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e
 +F src/legacy.c 9c17d86e06522c261307f0eb6bcb1254c8b04a59
- F src/loadext.c 18586e45a215325f15096821e9c082035d4fb810
- F src/main.c 66b67b2b3b0f972d4c5aee89d5d31e2f863606e9
- F src/malloc.c 337bbe9c7d436ef9b7d06b5dd10bbfc8f3025972
+ F src/loadext.c 84996d7d70a605597d79c1f1d7b2012a5fd34f2b
 -F src/main.c 2f33510a6a392c606fe64964e695e55ad124242f
++F src/main.c 3b6c60fd72b862fe941af074811f54bcdffe109e
+ F src/malloc.c 8f787669e79de26efc42272b5797bc00fff527c6
  F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
  F src/mem1.c 6919bcf12f221868ea066eec27e579fed95ce98b
  F src/mem2.c f1940d9e91948dd6a908fbb9ce3835c36b5d83c3
@@@ -326,34 -323,33 +326,34 @@@ F src/os.c 5822c2b843a77219bba1e28887cd
  F src/os.h 3e57a24e2794a94d3cf2342c6d9a884888cd96bf
  F src/os_common.h abdb9a191a367793268fe553d25bab894e986a0e
  F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa
- F src/os_unix.c 325d29171a7031739931be1a7baf18ebf3ca391f
 -F src/os_unix.c 0ca6d8710366fbb01a275160f018334cd347cbda
 -F src/os_win.c 386fba30419e8458b13209781c2af5590eab2811
++F src/os_unix.c 90d83aaad8ffcbe4569a41b8fcc2821f308316cc
 +F src/os_win.c d5f32f015c52888b76c8919a8b3fa5c532dff497
  F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca
- F src/pager.c f286cbf210d862543635057132da176f4d69ac75
- F src/pager.h 3bb11e11eb1a9f4819bb0d91ede24b039916d8fd
 -F src/pager.c 58d2593612acb6b542de6715b4af397ea1fa0a35
 -F src/pager.h bf25005b4656cd805af43487c3139fca9678d0cc
++F src/pager.c 25186b68d3180891dfa849bb9c0b7cd5d370fce3
++F src/pager.h a038f5d7d5b17a8463e312d45f92b17e6928339e
  F src/parse.y 23737e649c26ce327603799e57f5c2ff50e5e6ba
  F src/pcache.c 73895411fa6b7bd6f0091212feabbe833b358d23
  F src/pcache.h 1ff11adce609ba7de139b6abfabaf9a2bac947b5
  F src/pcache1.c 46a110be31a8d9f9b41431733836822ca0dd27ab
 -F src/pragma.c f3e7147299ca05ef4304a36f1fd6e002729c72c6
 +F src/pragma.c c1ab37e1576d22715d3bae4f51658326240a8161
  F src/pragma.h 3d94aebbebd2089899fecc01909bf2608b39507d
 -F src/prepare.c 82e5db1013846a819f198336fed72c44c974e7b1
 +F src/prepare.c 176b060bcf36041193c2807f2b045dce1effa4bb
- F src/printf.c ca05561795ad6c2fa47acdd007702586282f7feb
+ F src/printf.c af589a27b7d40f6f4f704e9eea99f02f18ad6d32
  F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
- F src/resolve.c f4c897ca76ca6d5e0b3f0499c627392ffe657c8e
+ F src/resolve.c a83b41104e6ff69855d03cd0aaa09e93927ec39f
  F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
- F src/select.c 1611828a7116e5f6cc1e69cd07d59b0d2c662ea9
- F src/shell.c 2796237990d42e6a5a7beafee65ef70cc8767d21
- F src/sqlite.h.in 050e7ee3bb7e7f04bceb94b5c883eda435efdcf7
+ F src/select.c f8fded11fc443a9f5a73cc5db069d06b34460e2f
+ F src/shell.c abbc74ea43dbf2f306ea18282d666683fb5efab2
 -F src/sqlite.h.in 7d87d71b9a4689c51fa092f48f16590ff71558e3
++F src/sqlite.h.in 52db0e5240e6c3d355937cdc187b61999d884aff
  F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
- F src/sqlite3ext.h 41ef50b0418a7c5ad1337bb80db5a7928dee764f
- F src/sqliteInt.h 753af29810be999593fe14bb2276b79dddccd8a6
 +F src/sqlite3_private.h a81a9c5f97c095cc3e86914a05f8fabe0011f4a1
 -F src/sqliteInt.h beb4a63b94428f52a3d7c7af2ba8bdc7d4682a03
+ F src/sqlite3ext.h dfbe62ffd95b99afe2140d8c35b180d11924072d
++F src/sqliteInt.h 8cde64521e8a71ee56b2adf018fa4119d0ceae1c
  F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
  F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
  F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
  F src/tclsqlite.c d9439b6a910985b7fff43ba6756bcef00de22649
- F src/test1.c 5abe6505544d173c8daf020c276e4a7670683cc1
 -F src/test1.c 4f1b42699068b7806af3111786f5ad760c2c1ff7
++F src/test1.c f51730220589f17d95dbd6f821e1cb6377d4554c
  F src/test2.c 5586f43fcd9a1be0830793cf9d354082c261b25b
  F src/test3.c a8887dabbbee3059af338f20d290084a63ed1b0f
  F src/test4.c d168f83cc78d02e8d35567bb5630e40dcd85ac1e
@@@ -367,10 -363,10 +367,10 @@@ F src/test_autoext.c dea8a01a7153b9adc9
  F src/test_backup.c 2e6e6a081870150f20c526a2e9d0d29cda47d803
  F src/test_blob.c e5a7a81d61a780da79101aeb1e60d300af169e07
  F src/test_btree.c 2e9978eca99a9a4bfa8cae949efb00886860a64f
- F src/test_config.c 8ab92facea822bd4fc6d0198487d7638072e1ec9
 -F src/test_config.c 0dee90328e3dedf8ba002ee94b6a7e7ea7726fe4
++F src/test_config.c f569bb9c62cb98ffc7968d7f557703197fb4027e
  F src/test_demovfs.c 0de72c2c89551629f58486fde5734b7d90758852
  F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc
- F src/test_fs.c aab47ac456316502faa265daadf9ac832fea12b9
+ F src/test_fs.c 993c7eab65bed6add4bb48cca29775e963f710cf
  F src/test_func.c 0d9c25956152adefee8881c6fadc8354793764d0
  F src/test_hexio.c abfdecb6fa58c354623978efceb088ca18e379cd
  F src/test_init.c 66b33120ffe9cd853b5a905ec850d51151337b32
@@@ -408,19 -404,19 +408,19 @@@ F src/update.c 17332f9fe818cbc0444c36a8
  F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
  F src/util.c e802e8e311a0d6c48cd1b3e89db164f6f0248d70
  F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
 -F src/vdbe.c 4d75375fa8bf911aa76ab8383d6f7eea0dec0fda
 +F src/vdbe.c 5cd1221f8a9ee01574124986ac2d0ec97504ea50
  F src/vdbe.h efb7a8c1459e31f3ea4377824c6a7e4cb5068637
  F src/vdbeInt.h 75c2e82ee3357e9210c06474f8d9bdf12c81105d
 -F src/vdbeapi.c 020681b943e77766b32ae1cddf86d7831b7374ca
 -F src/vdbeaux.c 864b9ec26adca0562a32fb8dee7b0b366304bfd9
 +F src/vdbeapi.c b13f483b1375467c367de486edf2be05234e27bb
- F src/vdbeaux.c e189aaf40871062c8451bbc28ce7a275b77979d0
++F src/vdbeaux.c 192fba4a5adea9a2f1160ad172a86a354bd135ce
  F src/vdbeblob.c fdc4a81605ae7a35ae94a55bd768b66d6be16f15
  F src/vdbemem.c fdd1578e47bea61390d472de53c565781d81e045
  F src/vdbesort.c a7ec02da4494c59dfd071126dd3726be5a11459d
  F src/vdbetrace.c 8befe829faff6d9e6f6e4dee5a7d3f85cc85f1a0
  F src/vtab.c 2a8b44aa372c33f6154208e7a7f6c44254549806
  F src/vxworks.h c18586c8edc1bddbc15c004fa16aeb1e1342b4fb
- F src/wal.c e93f9b7fdf5d2f6d11f0864200a8fe66ed30c8ec
- F src/wal.h 6b3a67ecd7172dcc9f18fc9cd4d76dc4c2166e68
 -F src/wal.c cb709aa42fc11b1ea92a00c8c7e6214de0995fa3
 -F src/wal.h 907943dfdef10b583e81906679a347e0ec6f1b1b
++F src/wal.c 360acd6c7c35550f59ee2db3c92cbe6712d5f0b6
++F src/wal.h 074df251e14dffb0ea9ce958a4328dff1a68c9d7
  F src/walker.c 2e14d17f592d176b6dc879c33fbdec4fbccaa2ba
  F src/where.c b18edbb9e5afabb77f4f27550c471c5c824e0fe7
  F src/whereInt.h e20801d89e34de1912bb6a3babb30c390da27add
@@@ -938,8 -933,8 +938,8 @@@ F test/pcache.test 9a04fa260cb47dd4fdc5
  F test/pcache2.test af7f3deb1a819f77a6d0d81534e97d1cf62cd442
  F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff
  F test/permutations.test 4ea119731c62d2f7d0aa86dd5b184cbb61ca411b
 -F test/pragma.test a44253f911e7d50127d4a08f927f47c861a4c772
 +F test/pragma.test fc0c3c0ca53ad82b32c02db7000c1c6ba4449fce
- F test/pragma2.test 00065068eeab2d15ea55465ec0f1e0a70e2c369e
+ F test/pragma2.test a9400a7289605280576098b97f5cde3f204075c0
  F test/pragma3.test 6f849ccffeee7e496d2f2b5e74152306c0b8757c
  F test/printf.test b3ff34e73d59124140eaf89f7672e21bc2ca5fcc
  F test/printf2.test 0b61566dd1c0f0b802f59dffa228c5dc5aa6b054
@@@ -1413,7 -1410,8 +1415,7 @@@ F tool/vdbe_profile.tcl 246d0da094856d7
  F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
  F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
  F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
- P 2c9e5436bd9146f0d76eb58e75cb76109d074ff7 4f2bcff94c672312805be1400050a7026f93a9d7
- R 1c500c6cf448d5bf63a82e6dfd2aaad7
 -P 96d3e99ffe59b5280b8b7fc269c94a72e15c345b 843c15a552657ca43ff200edb7da7566752d7941
 -R 1e8a48e65f87836435758a04b37e3926
 -T +closed 843c15a552657ca43ff200edb7da7566752d7941
++P e1fb33c7d2bfd8ea115e667d7671a7529cd116aa 9b124a5a310aec0145495c9980bc0c1308fcca02
++R c83274922244e0ad0a3abe3112b65b7b
  U drh
- Z 126ab2bbf11a0fdb5ff4a3332b3c23bf
 -Z f796eddbea3599c0fdbed9d3e73688d6
++Z d11cb9f98a9186557910b93b1d6aca34
diff --cc manifest.uuid
index 4cd9ac6f7fcbff31fa10db473ba10862850f3b4f,bcf7d5193b2a076a173d89a33a876ccefb63ee2e..54490d40e0fcaeba34b41abde755deb19babaf70
@@@ -1,1 -1,1 +1,1 @@@
- e1fb33c7d2bfd8ea115e667d7671a7529cd116aa
 -9b124a5a310aec0145495c9980bc0c1308fcca02
++7e7b24064510001ca4a0c8295fa7d0138bde8dae
diff --cc src/btree.c
Simple merge
diff --cc src/main.c
index 197d701eb81e2506cebf1024c78717f8d3a9ed3c,5b2130511e65934ca1f62c29054ff1d24c6a87ad..dd5b9523d263e74d139ba1cff2829ff6071f425d
@@@ -3993,30 -3866,86 +3994,111 @@@ int sqlite3_db_readonly(sqlite3 *db, co
    pBt = sqlite3DbNameToBtree(db, zDbName);
    return pBt ? sqlite3BtreeIsReadonly(pBt) : -1;
  }
 +#if (SQLITE_ENABLE_APPLE_SPI>0) && defined(__APPLE__)
 +
 +#include "sqlite3_private.h"
 +
 +/* 
 +** Testing a file path for sqlite locks held by a process ID. 
 +** Returns SQLITE_LOCKSTATE_ON if locks are present on path
 +** that would prevent writing to the database.
 +*/
 +int _sqlite3_lockstate(const char *path, pid_t pid){
 +  sqlite3 *db = NULL;
 +  
 +  if( sqlite3_open_v2(path, &db, SQLITE_OPEN_READONLY, NULL) == SQLITE_OK ){
 +    LockstatePID lockstate = {pid, -1};
 +    sqlite3_file_control(db, NULL, SQLITE_FCNTL_LOCKSTATE_PID, &lockstate);
 +    sqlite3_close(db);
 +    int state = lockstate.state;
 +    return state;
 +  }
 +  if( NULL!=db ){ 
 +    sqlite3_close(db); /* need to close even if open returns an error */
 +  }
 +  return SQLITE_LOCKSTATE_ERROR;
 +}
 +
 +#endif /* SQLITE_ENABLE_APPLE_SPI */
+ #ifdef SQLITE_ENABLE_SNAPSHOT
+ /*
+ ** Obtain a snapshot handle for the snapshot of database zDb currently 
+ ** being read by handle db.
+ */
+ int sqlite3_snapshot_get(
+   sqlite3 *db, 
+   const char *zDb,
+   sqlite3_snapshot **ppSnapshot
+ ){
+   int rc = SQLITE_ERROR;
+ #ifndef SQLITE_OMIT_WAL
+   int iDb;
+ #ifdef SQLITE_ENABLE_API_ARMOR
+   if( !sqlite3SafetyCheckOk(db) ){
+     return SQLITE_MISUSE_BKPT;
+   }
+ #endif
+   sqlite3_mutex_enter(db->mutex);
+   iDb = sqlite3FindDbName(db, zDb);
+   if( iDb==0 || iDb>1 ){
+     Btree *pBt = db->aDb[iDb].pBt;
+     if( 0==sqlite3BtreeIsInTrans(pBt) ){
+       rc = sqlite3BtreeBeginTrans(pBt, 0);
+       if( rc==SQLITE_OK ){
+         rc = sqlite3PagerSnapshotGet(sqlite3BtreePager(pBt), ppSnapshot);
+       }
+     }
+   }
+   sqlite3_mutex_leave(db->mutex);
+ #endif   /* SQLITE_OMIT_WAL */
+   return rc;
+ }
+ /*
+ ** Open a read-transaction on the snapshot idendified by pSnapshot.
+ */
+ int sqlite3_snapshot_open(
+   sqlite3 *db, 
+   const char *zDb, 
+   sqlite3_snapshot *pSnapshot
+ ){
+   int rc = SQLITE_ERROR;
+ #ifndef SQLITE_OMIT_WAL
+ #ifdef SQLITE_ENABLE_API_ARMOR
+   if( !sqlite3SafetyCheckOk(db) ){
+     return SQLITE_MISUSE_BKPT;
+   }
+ #endif
+   sqlite3_mutex_enter(db->mutex);
+   if( db->autoCommit==0 ){
+     int iDb;
+     iDb = sqlite3FindDbName(db, zDb);
+     if( iDb==0 || iDb>1 ){
+       Btree *pBt = db->aDb[iDb].pBt;
+       if( 0==sqlite3BtreeIsInReadTrans(pBt) ){
+         rc = sqlite3PagerSnapshotOpen(sqlite3BtreePager(pBt), pSnapshot);
+         if( rc==SQLITE_OK ){
+           rc = sqlite3BtreeBeginTrans(pBt, 0);
+           sqlite3PagerSnapshotOpen(sqlite3BtreePager(pBt), 0);
+         }
+       }
+     }
+   }
+   sqlite3_mutex_leave(db->mutex);
+ #endif   /* SQLITE_OMIT_WAL */
+   return rc;
+ }
+ /*
+ ** Free a snapshot handle obtained from sqlite3_snapshot_get().
+ */
+ void sqlite3_snapshot_free(sqlite3_snapshot *pSnapshot){
+   sqlite3_free(pSnapshot);
+ }
+ #endif /* SQLITE_ENABLE_SNAPSHOT */
 -
diff --cc src/os_unix.c
Simple merge
diff --cc src/pager.c
Simple merge
diff --cc src/pager.h
Simple merge
diff --cc src/sqlite.h.in
Simple merge
diff --cc src/sqliteInt.h
Simple merge
diff --cc src/test1.c
Simple merge
Simple merge
diff --cc src/vdbeaux.c
Simple merge
diff --cc src/wal.c
Simple merge
diff --cc src/wal.h
Simple merge