From: dan Date: Sat, 5 Oct 2019 17:29:52 +0000 (+0000) Subject: Have sqlite3.c automatically turn on osinst logging for all connections. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=68bddc65443377fbbd9c0d83e84a1d9d327381c6;p=thirdparty%2Fsqlite.git Have sqlite3.c automatically turn on osinst logging for all connections. FossilOrigin-Name: eea231f81b3ca6196949a84e8e0eb73a1ed03cb1ddd21f3b24787999caef8b1a --- diff --git a/Makefile.in b/Makefile.in index cadc2eda99..78534afdf4 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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 \ diff --git a/Makefile.msc b/Makefile.msc index 01d20d2d65..91afaf40f2 100644 --- a/Makefile.msc +++ b/Makefile.msc @@ -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 5462292023..1351a8b96b 100644 --- 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 \ diff --git a/manifest b/manifest index 44f902f667..5e5069e066 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 59c1946757..a75d77129c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f \ No newline at end of file +eea231f81b3ca6196949a84e8e0eb73a1ed03cb1ddd21f3b24787999caef8b1a \ No newline at end of file diff --git a/src/main.c b/src/main.c index 3ef3a3d9fb..b012859889 100644 --- a/src/main.c +++ b/src/main.c @@ -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); diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 9e8c864c62..7bff5d0c05 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -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 }; /* diff --git a/src/test_osinst.c b/src/test_osinst.c index a008baba45..9b722203ba 100644 --- a/src/test_osinst.c +++ b/src/test_osinst.c @@ -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; }; diff --git a/tool/mksqlite3c.tcl b/tool/mksqlite3c.tcl index 2f9bd866b9..7f41a5529a 100644 --- a/tool/mksqlite3c.tcl +++ b/tool/mksqlite3c.tcl @@ -403,6 +403,8 @@ foreach file { sqlite3session.c fts5.c stmt.c + + test_osinst.c } { copy_file tsrc/$file }