shell.c \
sqlite3.h
+SRC += $(TOP)/src/test_osinst.c
+
# Source code to the test files.
#
TESTSRC = \
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 \
# 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.
#
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)
shell.c \
sqlite3.h
+SRC += $(TOP)/src/test_osinst.c
+
# Source code to the test files.
#
$(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 \
-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
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
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
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
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
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
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
-c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f
\ No newline at end of file
+eea231f81b3ca6196949a84e8e0eb73a1ed03cb1ddd21f3b24787999caef8b1a
\ No newline at end of file
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.
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
}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);
goto opendb_out;
}
+
/* Open the backend database driver */
rc = sqlite3BtreeOpen(db->pVfs, zOpen, db, &db->aDb[0].pBt, 0,
flags | SQLITE_OPEN_MAIN_DB);
#ifndef SQLITEINT_H
#define SQLITEINT_H
+#define SQLITE_ENABLE_OSINST 1
+
/* Special Comments:
**
** Some comments have special meaning to the tools that measure test
#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
};
/*
#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);
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;
}
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);
}
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;
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);
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;
};
sqlite3session.c
fts5.c
stmt.c
+
+ test_osinst.c
} {
copy_file tsrc/$file
}