AryaWu/sqlite
0
1/*2** Read an SQLite database file and analyze its space utilization. Generate3** text on standard output.4*/5#define TCLSH_INIT_PROC sqlite3_analyzer_init_proc6IFDEF INCLUDE_SQLITE3_C7#undef SQLITE_ENABLE_DBSTAT_VTAB8#define SQLITE_ENABLE_DBSTAT_VTAB 19#undef SQLITE_THREADSAFE10#define SQLITE_THREADSAFE 011#undef SQLITE_ENABLE_COLUMN_METADATA12#define SQLITE_OMIT_DECLTYPE 113#define SQLITE_OMIT_DEPRECATED 114#define SQLITE_OMIT_PROGRESS_CALLBACK 115#define SQLITE_OMIT_SHARED_CACHE 116#define SQLITE_DEFAULT_MEMSTATUS 017#define SQLITE_MAX_EXPR_DEPTH 018#define SQLITE_OMIT_LOAD_EXTENSION 119INCLUDE sqlite3.c20ELSE21#include "sqlite3.h"22ENDIF23INCLUDE $ROOT/src/tclsqlite.c24 25#if defined(_WIN32)26INCLUDE $ROOT/ext/misc/sqlite3_stdio.h27INCLUDE $ROOT/ext/misc/sqlite3_stdio.c28 29/* Substitute "puts" command. Only these forms recognized:30**31** puts STRING32** puts stderr STRING33** puts -nonewline STRING34*/35static int subst_puts(36 void *NotUsed,37 Tcl_Interp *interp,38 int objc,39 Tcl_Obj *const*objv40){41 FILE *pOut = stdout;42 const char *zOut;43 int addNewLine = 1;44 if( objc==2 ){45 zOut = Tcl_GetString(objv[1]);46 }else if( objc!=3 ){47 Tcl_WrongNumArgs(interp, 1, objv, "?stderr|-nonewline? STRING");48 return TCL_ERROR;49 }else{50 const char *zArg = Tcl_GetString(objv[1]);51 if( zArg==0 ) return TCL_ERROR;52 zOut = Tcl_GetString(objv[2]);53 if( strcmp(zArg, "stderr")==0 ){54 pOut = stderr;55 }else if( strcmp(zArg, "-nonewline")==0 ){56 addNewLine = 0;57 }else{58 Tcl_AppendResult(interp, "bad argument: ", zArg, NULL);59 return TCL_ERROR;60 }61 }62 sqlite3_fputs(zOut, pOut);63 if( addNewLine ) sqlite3_fputs("\n", pOut);64 fflush(pOut);65 return TCL_OK;66}67#endif /* defined(_WIN32) */68 69const char *sqlite3_analyzer_init_proc(Tcl_Interp *interp){70#if defined(_WIN32)71 Tcl_CreateObjCommand(interp, "puts", subst_puts, 0, 0);72#else 73 (void)interp;74#endif75 return76BEGIN_STRING77INCLUDE $ROOT/tool/spaceanal.tcl78END_STRING79;80}81 