]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Have sqlite3.c automatically turn on osinst logging for all connections.
authordan <dan@noemail.net>
Sat, 5 Oct 2019 17:29:52 +0000 (17:29 +0000)
committerdan <dan@noemail.net>
Sat, 5 Oct 2019 17:29:52 +0000 (17:29 +0000)
FossilOrigin-Name: eea231f81b3ca6196949a84e8e0eb73a1ed03cb1ddd21f3b24787999caef8b1a

Makefile.in
Makefile.msc
main.mk
manifest
manifest.uuid
src/main.c
src/sqliteInt.h
src/test_osinst.c
tool/mksqlite3c.tcl

index cadc2eda9973c77ce25f01e2f9ef762d22c792f5..78534afdf481cb36693a0f2c1a2fd25f55f580e3 100644 (file)
@@ -378,6 +378,8 @@ SRC += \
   shell.c \
   sqlite3.h
 
+SRC += $(TOP)/src/test_osinst.c
+
 # Source code to the test files.
 #
 TESTSRC = \
@@ -682,6 +684,9 @@ sessionfuzz$(TEXE): $(TOP)/test/sessionfuzz.c sqlite3.c sqlite3.h
 dbfuzz$(TEXE): $(TOP)/test/dbfuzz.c sqlite3.c sqlite3.h
        $(LTLINK) -o $@ $(DBFUZZ_OPT) $(TOP)/test/dbfuzz.c sqlite3.c $(TLIBS)
 
+osinst2sql$(TEXE):     $(TOP)/tool/osinst2sql.c sqlite3.c sqlite3.h
+       $(LTLINK) -o $@ $(TOP)/tool/osinst2sql.c sqlite3.c $(TLIBS)
+
 DBFUZZ2_OPTS = \
   -DSQLITE_THREADSAFE=0 \
   -DSQLITE_OMIT_LOAD_EXTENSION \
index 01d20d2d65f98e71b21b2219e61d1e70fe821d1d..91afaf40f2cb354be72c51cf6b623d96a98553ea 100644 (file)
@@ -1470,7 +1470,7 @@ SRC12 =
 
 # All source code files.
 #
-SRC = $(SRC00) $(SRC01) $(SRC03) $(SRC04) $(SRC05) $(SRC06) $(SRC07) $(SRC08) $(SRC09) $(SRC10) $(SRC11)
+SRC = $(SRC00) $(SRC01) $(SRC03) $(SRC04) $(SRC05) $(SRC06) $(SRC07) $(SRC08) $(SRC09) $(SRC10) $(SRC11) $(TOP)\src\test_osinst.c
 
 # Source code to the test files.
 #
@@ -1772,6 +1772,9 @@ fuzzershell.exe:  $(TOP)\tool\fuzzershell.c $(SQLITE3C) $(SQLITE3H)
 dbfuzz.exe:    $(TOP)\test\dbfuzz.c $(SQLITE3C) $(SQLITE3H)
        $(LTLINK) $(NO_WARN) $(DBFUZZ_COMPILE_OPTS) $(TOP)\test\dbfuzz.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
 
+osinst2sql.exe:        $(TOP)\tool\osinst2sql.c $(SQLITE3C) $(SQLITE3H)
+       $(LTLINK) $(NO_WARN) $(TOP)\tool\osinst2sql.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
+
 fuzzcheck.exe: $(FUZZCHECK_SRC) $(SQLITE3C) $(SQLITE3H)
        $(LTLINK) $(NO_WARN) $(FUZZCHECK_OPTS) $(FUZZCHECK_SRC) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS)
 
diff --git a/main.mk b/main.mk
index 5462292023700e421ccf0f2221c4db0849c4cf7b..1351a8b96b474a9666d86544fafbb8db224269f7 100644 (file)
--- a/main.mk
+++ b/main.mk
@@ -297,6 +297,8 @@ SRC += \
   shell.c \
   sqlite3.h
 
+SRC += $(TOP)/src/test_osinst.c
+
 
 # Source code to the test files.
 #
@@ -580,6 +582,11 @@ dbfuzz$(EXE):      $(TOP)/test/dbfuzz.c sqlite3.c sqlite3.h
          $(DBFUZZ_OPT) $(TOP)/test/dbfuzz.c sqlite3.c \
          $(TLIBS) $(THREADLIB)
 
+osinst2sql$(EXE): $(TOP)/tool/osinst2sql.c sqlite3.c sqlite3.h
+       $(TCCX) -o osinst2sql$(EXE) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
+         $(DBFUZZ_OPT) $(TOP)/tool/osinst2sql.c sqlite3.c \
+         $(TLIBS) $(THREADLIB)
+
 DBFUZZ2_OPTS = \
   -DSQLITE_THREADSAFE=0 \
   -DSQLITE_OMIT_LOAD_EXTENSION \
index 44f902f667a0b21d7a06a5397fa00eb1ff6c1aec..5e5069e0668e35e994cd99430427f7d26dbc25bf 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,11 +1,11 @@
-C Version\s3.30.0
-D 2019-10-04T15:03:17.190
+C Have\ssqlite3.c\sautomatically\sturn\son\sosinst\slogging\sfor\sall\sconnections.
+D 2019-10-05T17:29:52.699
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
-F Makefile.in 578f123620087ea459aa08fa872810a25ca7c0aaf16331de985bfcddb5f1e747
+F Makefile.in ee84c65aad5a4aa6f5f3a8e0b3f1d0becc326c2e8abff7d486e4effe69108918
 F Makefile.linux-gcc f609543700659711fbd230eced1f01353117621dccae7b9fb70daa64236c5241
-F Makefile.msc a463dca3c50d8a36094fe5c8c39077907f530b54edfc5388c66c85e2cfc8dc04
+F Makefile.msc 9195217a8118b421967d50f1a7af106f1ee6c9b395f47cf2401c1e9be5e191c0
 F README.md 1514a365ffca3c138e00c5cc839906108a01011a6b082bad19b09781e3aa498a
 F VERSION 4c516d84c2a5f26c477ed34c09ac4136630f71c68139631f2eb591b22eea7cf1
 F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
@@ -447,7 +447,7 @@ F ext/userauth/userauth.c f81aa5a3ecacf406f170c62a144405858f6f6de51dbdc0920134e6
 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
 F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
 F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
-F main.mk 09716d345766a55b25ed157b14786526cf67c761c61d99c53e117196fb3b391a
+F main.mk f25161a34666c0087e1eda65a70189c0a0ed646d8bb345c5994d7111e60fa759
 F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
@@ -489,7 +489,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
 F src/insert.c 40557ebd69f4115e7a273f9304a8ab637a47ce44f3c6923396928f023967b5e8
 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
 F src/loadext.c 4ddc65ae13c0d93db0ceedc8b14a28c8c260513448b0eb8c5a2ac375e3b6a85d
-F src/main.c 3851950717170ade4f6d718c18c6c7400ef5994c2a654679af2cff2ffd0fb2b9
+F src/main.c 781a8a729a996af11636eef1972b2decfb5cea3bf982d86274d6e2e22db93788
 F src/malloc.c 0f9da2a66b230a5785af94b9672126845099b57b70a32c987d04ac28c69da990
 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
@@ -530,7 +530,7 @@ F src/shell.c.in d70bcf630c4073eaa994fa74be98886c781918e794cb8b562be8df10f018e27
 F src/sqlite.h.in 5725a6b20190a1e8d662077a1c1c8ea889ad7be90dd803f914c2de226f5fe6ab
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h cef696ce3293242c67b2339763608427bf72ee66f1f3a05389ac2a7b46001c31
-F src/sqliteInt.h 246740eab76d3ac87f856f8d979567089e8749104c12932143a6ba570e38e415
+F src/sqliteInt.h b3212ce855a590787bc091721a2e65148947f83e1faaa0394eaa3217ef44b048
 F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b
 F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e
 F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34
@@ -568,7 +568,7 @@ F src/test_multiplex.c e054459f7633f3ff8ce1245da724f9a8be189e4e
 F src/test_multiplex.h 5436d03f2d0501d04f3ed50a75819e190495b635
 F src/test_mutex.c 7f4337ba23ee6b1d2ec81c189653608cb069926a
 F src/test_onefile.c f31e52e891c5fef6709b9fcef54ce660648a34172423a9cbdf4cbce3ba0049f4
-F src/test_osinst.c 98ef31ff03d55497829ca0f6c74a9f4e1aa48690
+F src/test_osinst.c 192fbbafc7c92513efa238f1f3d0f5e64c49807f7328802fd37f508e022831c4
 F src/test_pcache.c a5cd24730cb43c5b18629043314548c9169abb00
 F src/test_quota.c 6cb9297115b551f433a9ad1741817a9831abed99
 F src/test_quota.h 2a8ad1952d1d2ca9af0ce0465e56e6c023b5e15d
@@ -1784,7 +1784,7 @@ F tool/mkshellc.tcl 70a9978e363b0f3280ca9ce1c46d72563ff479c1930a12a7375e3881b732
 F tool/mksourceid.c d458f9004c837bee87a6382228ac20d3eae3c49ea3b0a5aace936f8b60748d3b
 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
 F tool/mksqlite3c-noext.tcl 4f7cfef5152b0c91920355cbfc1d608a4ad242cb819f1aea07f6d0274f584a7f
-F tool/mksqlite3c.tcl 5fed3d75069d8f66f202d3b5200b0cea4aa7108481acd06732a06fdd42eb83a2
+F tool/mksqlite3c.tcl 8c399f889354be656895d0d503cd9434cc222d67919265d87a0779122674e4d5
 F tool/mksqlite3h.tcl 080873e3856eceb9d289a08a00c4b30f875ea3feadcbece796bd509b1532792c
 F tool/mksqlite3internalh.tcl eb994013e833359137eb53a55acdad0b5ae1049b
 F tool/mkvsix.tcl b9e0777a213c23156b6542842c238479e496ebf5
@@ -1846,10 +1846,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 7f9a4b6015ac332a04d3e394a6b3210fc95253d8786a261178a5639cb8d9d987
-R f116075cb1c47b7928f41444f3803579
-T +bgcolor * #d0c0ff
-T +sym-release *
-T +sym-version-3.30.0 *
-U drh
-Z edadfb0c72633ac9bcd13396063b6815
+P c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f
+R da26f1d5f4fd9d7b5a1d749e81c81be8
+T *branch * osinst
+T *sym-osinst *
+T -sym-trunk *
+U dan
+Z 090999d6315a1173b23966f6f90f5a7e
index 59c1946757218ff7060bb5a46678c03119c1251f..a75d77129c2f10d36f155d17210b3d8cb9b970ed 100644 (file)
@@ -1 +1 @@
-c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f
\ No newline at end of file
+eea231f81b3ca6196949a84e8e0eb73a1ed03cb1ddd21f3b24787999caef8b1a
\ No newline at end of file
index 3ef3a3d9fbd446214991eb046a881c24744f52d9..b012859889ebe141170e27efb35c444d446d5332 100644 (file)
@@ -1147,6 +1147,11 @@ static int sqlite3Close(sqlite3 *db, int forceZombie){
 int sqlite3_close(sqlite3 *db){ return sqlite3Close(db,0); }
 int sqlite3_close_v2(sqlite3 *db){ return sqlite3Close(db,1); }
 
+#ifdef SQLITE_ENABLE_OSINST
+int sqlite3_vfslog_new(const char*,const char*,const char*,sqlite3_vfs**);
+int sqlite3_vfslog_finalize(const char*);
+#endif
+
 
 /*
 ** Close the mutex on database connection db.
@@ -1252,6 +1257,13 @@ void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){
 
   db->magic = SQLITE_MAGIC_ERROR;
 
+#ifdef SQLITE_ENABLE_OSINST
+  if( db->pOsinstVfs ){
+    sqlite3_vfslog_finalize(db->pOsinstVfs->zName);
+    db->pOsinstVfs = 0;
+  }
+#endif
+
   /* The temp-database schema is allocated differently from the other schema
   ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()).
   ** So it needs to be freed here. Todo: Why not roll the temp schema into
@@ -3187,6 +3199,25 @@ static int openDatabase(
   }else{
     rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg);
   }
+#ifdef SQLITE_ENABLE_OSINST
+  /* If this is not a temporary or ":memory:" database, create an osinst
+  ** VFS to use. */
+  assert( db->pVfs );
+  if( rc==SQLITE_OK && zOpen && zOpen[0] && strcmp(":memory:", zOpen) ){
+    u32 iVal = 0;
+    char *zLog = 0;
+    sqlite3_randomness(sizeof(iVal), (void*)&iVal);
+    zLog = sqlite3_mprintf("%s-osinst-%08x", zOpen, iVal);
+    if( zLog==0 ){
+      rc = SQLITE_NOMEM_BKPT;
+    }else{
+      sqlite3_vfs *pVfs = 0;
+      rc = sqlite3_vfslog_new(zLog, db->pVfs->zName, zLog, &pVfs);
+      sqlite3_free(zLog);
+      db->pOsinstVfs = db->pVfs = pVfs;
+    }
+  }
+#endif
   if( rc!=SQLITE_OK ){
     if( rc==SQLITE_NOMEM ) sqlite3OomFault(db);
     sqlite3ErrorWithMsg(db, rc, zErrMsg ? "%s" : 0, zErrMsg);
@@ -3194,6 +3225,7 @@ static int openDatabase(
     goto opendb_out;
   }
 
+
   /* Open the backend database driver */
   rc = sqlite3BtreeOpen(db->pVfs, zOpen, db, &db->aDb[0].pBt, 0,
                         flags | SQLITE_OPEN_MAIN_DB);
index 9e8c864c621f1d58d12cfad26e2683a7cbf07faf..7bff5d0c0527bd7d327e17e9a38a530d005a7d23 100644 (file)
@@ -15,6 +15,8 @@
 #ifndef SQLITEINT_H
 #define SQLITEINT_H
 
+#define SQLITE_ENABLE_OSINST 1
+
 /* Special Comments:
 **
 ** Some comments have special meaning to the tools that measure test
@@ -1487,6 +1489,9 @@ struct sqlite3 {
 #ifdef SQLITE_USER_AUTHENTICATION
   sqlite3_userauth auth;        /* User authentication information */
 #endif
+#ifdef SQLITE_ENABLE_OSINST
+  sqlite3_vfs *pOsinstVfs;      /* osinst VFS to finalize, if any */
+#endif
 };
 
 /*
index a008baba45deb0287ed38ca33eedc02cdd784de6..9b722203ba46d9572e9b957a12bc30f097638147 100644 (file)
@@ -642,7 +642,7 @@ static void vfslog_flush(VfslogVfs *p){
 #endif
 }
 
-static void put32bits(unsigned char *p, unsigned int v){
+static void vfslogPut32bits(unsigned char *p, unsigned int v){
   p[0] = v>>24;
   p[1] = (unsigned char)(v>>16);
   p[2] = (unsigned char)(v>>8);
@@ -664,12 +664,12 @@ static void vfslog_call(
     vfslog_flush(p);
   }
   zRec = (unsigned char *)&p->aBuf[p->nBuf];
-  put32bits(&zRec[0], eEvent);
-  put32bits(&zRec[4], iFileid);
-  put32bits(&zRec[8], (unsigned int)(nClick&0xffff));
-  put32bits(&zRec[12], return_code);
-  put32bits(&zRec[16], size);
-  put32bits(&zRec[20], offset);
+  vfslogPut32bits(&zRec[0], eEvent);
+  vfslogPut32bits(&zRec[4], iFileid);
+  vfslogPut32bits(&zRec[8], (unsigned int)(nClick&0xffffffff));
+  vfslogPut32bits(&zRec[12], return_code);
+  vfslogPut32bits(&zRec[16], size);
+  vfslogPut32bits(&zRec[20], offset);
   p->nBuf += 24;
 }
 
@@ -681,7 +681,7 @@ static void vfslog_string(sqlite3_vfs *pVfs, const char *zStr){
     vfslog_flush(p);
   }
   zRec = (unsigned char *)&p->aBuf[p->nBuf];
-  put32bits(&zRec[0], nStr);
+  vfslogPut32bits(&zRec[0], nStr);
   if( zStr ){
     memcpy(&zRec[4], zStr, nStr);
   }
@@ -710,7 +710,8 @@ int sqlite3_vfslog_finalize(const char *zVfs){
 int sqlite3_vfslog_new(
   const char *zVfs,               /* New VFS name */
   const char *zParentVfs,         /* Parent VFS name (or NULL) */
-  const char *zLog                /* Log file name */
+  const char *zLog,               /* Log file name */
+  sqlite3_vfs **ppVfs             /* OUT: New VFS object */
 ){
   VfslogVfs *p;
   sqlite3_vfs *pParent;
@@ -747,7 +748,8 @@ int sqlite3_vfslog_new(
     memcpy(p->aBuf, "sqlite_ostrace1.....", 20);
     p->iOffset = 0;
     p->nBuf = 20;
-    rc = sqlite3_vfs_register((sqlite3_vfs *)p, 1);
+    rc = sqlite3_vfs_register((sqlite3_vfs *)p, 0);
+    if( ppVfs ) *ppVfs = (sqlite3_vfs*)p;
   }
   if( rc ){
     vfslog_finalize(p);
@@ -1180,11 +1182,12 @@ static int SQLITE_TCLAPI test_vfslog(
       zParent = Tcl_GetString(objv[3]);
       zLog = Tcl_GetString(objv[4]);
       if( *zParent=='\0' ) zParent = 0;
-      rc = sqlite3_vfslog_new(zVfs, zParent, zLog);
+      rc = sqlite3_vfslog_new(zVfs, zParent, zLog, 0);
       if( rc!=SQLITE_OK ){
         Tcl_AppendResult(interp, "failed", 0);
         return TCL_ERROR;
       }
+      sqlite3_vfs_register(sqlite3_vfs_find(zVfs), 1);
       break;
     };
 
index 2f9bd866b9b126f863b59f037c58e479f3037ff9..7f41a5529a0b1cc35b9d2026ba662479d1ae91d6 100644 (file)
@@ -403,6 +403,8 @@ foreach file {
    sqlite3session.c
    fts5.c
    stmt.c
+
+   test_osinst.c
 } {
   copy_file tsrc/$file
 }