/* ** Read an SQLite database file and analyze its space utilization. Generate ** text on standard output. */ #define TCLSH_INIT_PROC sqlite3_analyzer_init_proc IFDEF INCLUDE_SQLITE3_C #undef SQLITE_ENABLE_DBSTAT_VTAB #define SQLITE_ENABLE_DBSTAT_VTAB 1 #undef SQLITE_THREADSAFE #define SQLITE_THREADSAFE 0 #undef SQLITE_ENABLE_COLUMN_METADATA #define SQLITE_OMIT_DECLTYPE 1 #define SQLITE_OMIT_DEPRECATED 1 #define SQLITE_OMIT_PROGRESS_CALLBACK 1 #define SQLITE_OMIT_SHARED_CACHE 1 #define SQLITE_DEFAULT_MEMSTATUS 0 #define SQLITE_MAX_EXPR_DEPTH 0 #define SQLITE_OMIT_LOAD_EXTENSION 1 INCLUDE sqlite3.c ELSE #include "sqlite3.h" ENDIF INCLUDE $ROOT/src/tclsqlite.c #if defined(_WIN32) INCLUDE $ROOT/ext/misc/sqlite3_stdio.h INCLUDE $ROOT/ext/misc/sqlite3_stdio.c /* Substitute "puts" command. Only these forms recognized: ** ** puts STRING ** puts stderr STRING ** puts -nonewline STRING */ static int subst_puts( void *NotUsed, Tcl_Interp *interp, int objc, Tcl_Obj *const*objv ){ FILE *pOut = stdout; const char *zOut; int addNewLine = 1; if( objc==2 ){ zOut = Tcl_GetString(objv[1]); }else if( objc!=3 ){ Tcl_WrongNumArgs(interp, 1, objv, "?stderr|-nonewline? STRING"); return TCL_ERROR; }else{ const char *zArg = Tcl_GetString(objv[1]); if( zArg==0 ) return TCL_ERROR; zOut = Tcl_GetString(objv[2]); if( strcmp(zArg, "stderr")==0 ){ pOut = stderr; }else if( strcmp(zArg, "-nonewline")==0 ){ addNewLine = 0; }else{ Tcl_AppendResult(interp, "bad argument: ", zArg, 0); return TCL_ERROR; } } sqlite3_fputs(zOut, pOut); if( addNewLine ) sqlite3_fputs("\n", pOut); return TCL_OK; } #endif /* defined(_WIN32) */ const char *sqlite3_analyzer_init_proc(Tcl_Interp *interp){ #if defined(_WIN32) Tcl_CreateObjCommand(interp, "puts", subst_puts, 0, 0); #else (void)interp; #endif return BEGIN_STRING INCLUDE $ROOT/tool/spaceanal.tcl END_STRING ; }