- 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
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
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
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
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
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
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
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
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
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 */
-