4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give.
11 *************************************************************************
12 ** This file contains code to implement the "sqlite" command line
13 ** utility for accessing SQLite databases.
15 #if defined(_WIN32) || defined(WIN32)
16 /* This needs to come before any includes for MSVC compiler */
17 #define _CRT_SECURE_NO_WARNINGS
28 #if !defined(_WIN32) && !defined(WIN32) && !defined(__OS2__)
30 # if !defined(__RTP__) && !defined(_WRS_KERNEL)
34 # include <sys/types.h>
42 # include <editline/editline.h>
44 #if defined(HAVE_READLINE) && HAVE_READLINE==1
45 # include <readline/readline.h>
46 # include <readline/history.h>
48 #if !defined(HAVE_EDITLINE) && (!defined(HAVE_READLINE) || HAVE_READLINE!=1)
49 # define readline(p) local_getline(p,stdin)
50 # define add_history(X)
51 # define read_history(X)
52 # define write_history(X)
53 # define stifle_history(X)
56 #if defined(_WIN32) || defined(WIN32)
58 #define isatty(h) _isatty(h)
59 #define access(f,m) _access((f),(m))
61 /* Make sure isatty() has a prototype.
66 #if defined(_WIN32_WCE)
67 /* Windows CE (arm-wince-mingw32ce-gcc) does not provide isatty()
68 * thus we always assume that we have a console. That can be
69 * overridden with the -batch command line option.
74 /* True if the timer is enabled */
75 static int enableTimer = 0;
77 #if !defined(_WIN32) && !defined(WIN32) && !defined(__OS2__) && !defined(__RTP__) && !defined(_WRS_KERNEL)
79 #include <sys/resource.h>
81 /* Saved resource information for the beginning of an operation */
82 static struct rusage sBegin;
85 ** Begin timing an operation
87 static void beginTimer(void){
89 getrusage(RUSAGE_SELF, &sBegin);
93 /* Return the difference of two time_structs in seconds */
94 static double timeDiff(struct timeval *pStart, struct timeval *pEnd){
95 return (pEnd->tv_usec - pStart->tv_usec)*0.000001 +
96 (double)(pEnd->tv_sec - pStart->tv_sec);
100 ** Print the timing results.
102 static void endTimer(void){
105 getrusage(RUSAGE_SELF, &sEnd);
106 printf("CPU Time: user %f sys %f\n",
107 timeDiff(&sBegin.ru_utime, &sEnd.ru_utime),
108 timeDiff(&sBegin.ru_stime, &sEnd.ru_stime));
112 #define BEGIN_TIMER beginTimer()
113 #define END_TIMER endTimer()
116 #elif (defined(_WIN32) || defined(WIN32))
120 /* Saved resource information for the beginning of an operation */
121 static HANDLE hProcess;
122 static FILETIME ftKernelBegin;
123 static FILETIME ftUserBegin;
124 typedef BOOL (WINAPI *GETPROCTIMES)(HANDLE, LPFILETIME, LPFILETIME, LPFILETIME, LPFILETIME);
125 static GETPROCTIMES getProcessTimesAddr = NULL;
128 ** Check to see if we have timer support. Return 1 if necessary
129 ** support found (or found previously).
131 static int hasTimer(void){
132 if( getProcessTimesAddr ){
135 /* GetProcessTimes() isn't supported in WIN95 and some other Windows versions.
136 ** See if the version we are running on has it, and if it does, save off
137 ** a pointer to it and the current process handle.
139 hProcess = GetCurrentProcess();
141 HINSTANCE hinstLib = LoadLibrary(TEXT("Kernel32.dll"));
142 if( NULL != hinstLib ){
143 getProcessTimesAddr = (GETPROCTIMES) GetProcAddress(hinstLib, "GetProcessTimes");
144 if( NULL != getProcessTimesAddr ){
147 FreeLibrary(hinstLib);
155 ** Begin timing an operation
157 static void beginTimer(void){
158 if( enableTimer && getProcessTimesAddr ){
159 FILETIME ftCreation, ftExit;
160 getProcessTimesAddr(hProcess, &ftCreation, &ftExit, &ftKernelBegin, &ftUserBegin);
164 /* Return the difference of two FILETIME structs in seconds */
165 static double timeDiff(FILETIME *pStart, FILETIME *pEnd){
166 sqlite_int64 i64Start = *((sqlite_int64 *) pStart);
167 sqlite_int64 i64End = *((sqlite_int64 *) pEnd);
168 return (double) ((i64End - i64Start) / 10000000.0);
172 ** Print the timing results.
174 static void endTimer(void){
175 if( enableTimer && getProcessTimesAddr){
176 FILETIME ftCreation, ftExit, ftKernelEnd, ftUserEnd;
177 getProcessTimesAddr(hProcess, &ftCreation, &ftExit, &ftKernelEnd, &ftUserEnd);
178 printf("CPU Time: user %f sys %f\n",
179 timeDiff(&ftUserBegin, &ftUserEnd),
180 timeDiff(&ftKernelBegin, &ftKernelEnd));
184 #define BEGIN_TIMER beginTimer()
185 #define END_TIMER endTimer()
186 #define HAS_TIMER hasTimer()
195 ** Used to prevent warnings about unused parameters
197 #define UNUSED_PARAMETER(x) (void)(x)
200 ** If the following flag is set, then command execution stops
201 ** at an error if we are not interactive.
203 static int bail_on_error = 0;
206 ** Threat stdin as an interactive input if the following variable
207 ** is true. Otherwise, assume stdin is connected to a file or pipe.
209 static int stdin_is_interactive = 1;
212 ** The following is the open SQLite database. We make a pointer
213 ** to this database a static variable so that it can be accessed
214 ** by the SIGINT handler to interrupt database processing.
216 static sqlite3 *db = 0;
219 ** True if an interrupt (Control-C) has been received.
221 static volatile int seenInterrupt = 0;
224 ** This is the name of our program. It is set in main(), used
225 ** in a number of other places, mostly for error messages.
230 ** Prompt strings. Initialized in main. Settable with
231 ** .prompt main continue
233 static char mainPrompt[20]; /* First line prompt. default: "sqlite> "*/
234 static char continuePrompt[20]; /* Continuation prompt. default: " ...> " */
237 ** Write I/O traces to the following stream.
239 #ifdef SQLITE_ENABLE_IOTRACE
240 static FILE *iotrace = 0;
244 ** This routine works like printf in that its first argument is a
245 ** format string and subsequent arguments are values to be substituted
246 ** in place of % fields. The result of formatting this string
247 ** is written to iotrace.
249 #ifdef SQLITE_ENABLE_IOTRACE
250 static void iotracePrintf(const char *zFormat, ...){
253 if( iotrace==0 ) return;
254 va_start(ap, zFormat);
255 z = sqlite3_vmprintf(zFormat, ap);
257 fprintf(iotrace, "%s", z);
264 ** Determines if a string is a number of not.
266 static int isNumber(const char *z, int *realnum){
267 if( *z=='-' || *z=='+' ) z++;
272 if( realnum ) *realnum = 0;
273 while( isdigit(*z) ){ z++; }
276 if( !isdigit(*z) ) return 0;
277 while( isdigit(*z) ){ z++; }
278 if( realnum ) *realnum = 1;
280 if( *z=='e' || *z=='E' ){
282 if( *z=='+' || *z=='-' ) z++;
283 if( !isdigit(*z) ) return 0;
284 while( isdigit(*z) ){ z++; }
285 if( realnum ) *realnum = 1;
291 ** A global char* and an SQL function to access its current value
292 ** from within an SQL statement. This program used to use the
293 ** sqlite_exec_printf() API to substitue a string into an SQL statement.
294 ** The correct way to do this with sqlite3 is to use the bind API, but
295 ** since the shell is built around the callback paradigm it would be a lot
296 ** of work. Instead just use this hack, which is quite harmless.
298 static const char *zShellStatic = 0;
299 static void shellstaticFunc(
300 sqlite3_context *context,
305 assert( zShellStatic );
306 UNUSED_PARAMETER(argc);
307 UNUSED_PARAMETER(argv);
308 sqlite3_result_text(context, zShellStatic, -1, SQLITE_STATIC);
313 ** This routine reads a line of text from FILE in, stores
314 ** the text in memory obtained from malloc() and returns a pointer
315 ** to the text. NULL is returned at end of file, or if malloc()
318 ** The interface is like "readline" but no command-line editing
321 static char *local_getline(char *zPrompt, FILE *in){
327 if( zPrompt && *zPrompt ){
328 printf("%s",zPrompt);
332 zLine = malloc( nLine );
333 if( zLine==0 ) return 0;
338 nLine = nLine*2 + 100;
339 zLine = realloc(zLine, nLine);
340 if( zLine==0 ) return 0;
342 if( fgets(&zLine[n], nLine - n, in)==0 ){
351 while( zLine[n] ){ n++; }
352 if( n>0 && zLine[n-1]=='\n' ){
354 if( n>0 && zLine[n-1]=='\r' ) n--;
359 zLine = realloc( zLine, n+1 );
364 ** Retrieve a single line of input text.
366 ** zPrior is a string of prior text retrieved. If not the empty
367 ** string, then issue a continuation prompt.
369 static char *one_input_line(const char *zPrior, FILE *in){
373 return local_getline(0, in);
375 if( zPrior && zPrior[0] ){
376 zPrompt = continuePrompt;
378 zPrompt = mainPrompt;
380 zResult = readline(zPrompt);
381 #if defined(HAVE_READLINE) && HAVE_READLINE==1
382 if( zResult && *zResult ) add_history(zResult);
387 struct previous_mode_data {
388 int valid; /* Is there legit data in here? */
395 ** An pointer to an instance of this structure is passed from
396 ** the main program to the callback. This is used to communicate
397 ** state and mode information.
399 struct callback_data {
400 sqlite3 *db; /* The database */
401 int echoOn; /* True to echo input commands */
402 int statsOn; /* True to display memory stats before each finalize */
403 int cnt; /* Number of records displayed so far */
404 FILE *out; /* Write results here */
405 int mode; /* An output mode setting */
406 int writableSchema; /* True if PRAGMA writable_schema=ON */
407 int showHeader; /* True to show column names in List or Column mode */
408 char *zDestTable; /* Name of destination table when MODE_Insert */
409 char separator[20]; /* Separator character for MODE_List */
410 int colWidth[100]; /* Requested width of each column when in column mode*/
411 int actualWidth[100]; /* Actual width of each column */
412 char nullvalue[20]; /* The text to print when a NULL comes back from
414 struct previous_mode_data explainPrev;
415 /* Holds the mode information just before
417 char outfile[FILENAME_MAX]; /* Filename for *out */
418 const char *zDbFilename; /* name of the database file */
419 const char *zVfs; /* Name of VFS to use */
420 sqlite3_stmt *pStmt; /* Current statement if any. */
421 FILE *pLog; /* Write log output here */
425 ** These are the allowed modes.
427 #define MODE_Line 0 /* One column per line. Blank line between records */
428 #define MODE_Column 1 /* One record per line in neat columns */
429 #define MODE_List 2 /* One record per line with a separator */
430 #define MODE_Semi 3 /* Same as MODE_List but append ";" to each line */
431 #define MODE_Html 4 /* Generate an XHTML table */
432 #define MODE_Insert 5 /* Generate SQL "insert" statements */
433 #define MODE_Tcl 6 /* Generate ANSI-C or TCL quoted elements */
434 #define MODE_Csv 7 /* Quote strings, numbers are plain */
435 #define MODE_Explain 8 /* Like MODE_Column, but do not truncate data */
437 static const char *modeDescr[] = {
450 ** Number of elements in an array
452 #define ArraySize(X) (int)(sizeof(X)/sizeof(X[0]))
455 ** Compute a string length that is limited to what can be stored in
456 ** lower 30 bits of a 32-bit signed integer.
458 static int strlen30(const char *z){
460 while( *z2 ){ z2++; }
461 return 0x3fffffff & (int)(z2 - z);
465 ** A callback for the sqlite3_log() interface.
467 static void shellLog(void *pArg, int iErrCode, const char *zMsg){
468 struct callback_data *p = (struct callback_data*)pArg;
469 if( p->pLog==0 ) return;
470 fprintf(p->pLog, "(%d) %s\n", iErrCode, zMsg);
475 ** Output the given string as a hex-encoded blob (eg. X'1234' )
477 static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){
479 char *zBlob = (char *)pBlob;
481 for(i=0; i<nBlob; i++){ fprintf(out,"%02x",zBlob[i]); }
486 ** Output the given string as a quoted string using SQL quoting conventions.
488 static void output_quoted_string(FILE *out, const char *z){
492 if( z[i]=='\'' ) nSingle++;
495 fprintf(out,"'%s'",z);
499 for(i=0; z[i] && z[i]!='\''; i++){}
503 }else if( z[i]=='\'' ){
504 fprintf(out,"%.*s''",i,z);
516 ** Output the given string as a quoted according to C or TCL quoting rules.
518 static void output_c_string(FILE *out, const char *z){
521 while( (c = *(z++))!=0 ){
534 }else if( !isprint(c) ){
535 fprintf(out, "\\%03o", c&0xff);
544 ** Output the given string with characters that are special to
547 static void output_html_string(FILE *out, const char *z){
558 fprintf(out,"%.*s",i,z);
562 }else if( z[i]=='&' ){
563 fprintf(out,"&");
564 }else if( z[i]=='>' ){
566 }else if( z[i]=='\"' ){
567 fprintf(out,""");
568 }else if( z[i]=='\'' ){
569 fprintf(out,"'");
578 ** If a field contains any character identified by a 1 in the following
579 ** array, then the string must be quoted for CSV.
581 static const char needCsvQuote[] = {
582 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
583 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
584 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
585 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
586 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
587 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
588 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
589 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
590 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
591 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
592 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
593 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
594 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
595 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
596 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
597 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
601 ** Output a single term of CSV. Actually, p->separator is used for
602 ** the separator, which may or may not be a comma. p->nullvalue is
603 ** the null value. Strings are quoted using ANSI-C rules. Numbers
604 ** appear outside of quotes.
606 static void output_csv(struct callback_data *p, const char *z, int bSep){
609 fprintf(out,"%s",p->nullvalue);
612 int nSep = strlen30(p->separator);
614 if( needCsvQuote[((unsigned char*)z)[i]]
615 || (z[i]==p->separator[0] &&
616 (nSep==1 || memcmp(z, p->separator, nSep)==0)) ){
624 if( z[i]=='"' ) putc('"', out);
629 fprintf(out, "%s", z);
633 fprintf(p->out, "%s", p->separator);
639 ** This routine runs when the user presses Ctrl-C
641 static void interrupt_handler(int NotUsed){
642 UNUSED_PARAMETER(NotUsed);
644 if( db ) sqlite3_interrupt(db);
649 ** This is the callback routine that the shell
650 ** invokes for each row of a query result.
652 static int shell_callback(void *pArg, int nArg, char **azArg, char **azCol, int *aiType){
654 struct callback_data *p = (struct callback_data*)pArg;
659 if( azArg==0 ) break;
660 for(i=0; i<nArg; i++){
661 int len = strlen30(azCol[i] ? azCol[i] : "");
664 if( p->cnt++>0 ) fprintf(p->out,"\n");
665 for(i=0; i<nArg; i++){
666 fprintf(p->out,"%*s = %s\n", w, azCol[i],
667 azArg[i] ? azArg[i] : p->nullvalue);
674 for(i=0; i<nArg; i++){
676 if( i<ArraySize(p->colWidth) ){
682 w = strlen30(azCol[i] ? azCol[i] : "");
684 n = strlen30(azArg && azArg[i] ? azArg[i] : p->nullvalue);
687 if( i<ArraySize(p->actualWidth) ){
688 p->actualWidth[i] = w;
691 fprintf(p->out,"%-*.*s%s",w,w,azCol[i], i==nArg-1 ? "\n": " ");
695 for(i=0; i<nArg; i++){
697 if( i<ArraySize(p->actualWidth) ){
698 w = p->actualWidth[i];
702 fprintf(p->out,"%-*.*s%s",w,w,"-----------------------------------"
703 "----------------------------------------------------------",
704 i==nArg-1 ? "\n": " ");
708 if( azArg==0 ) break;
709 for(i=0; i<nArg; i++){
711 if( i<ArraySize(p->actualWidth) ){
712 w = p->actualWidth[i];
716 if( p->mode==MODE_Explain && azArg[i] &&
717 strlen30(azArg[i])>w ){
718 w = strlen30(azArg[i]);
720 fprintf(p->out,"%-*.*s%s",w,w,
721 azArg[i] ? azArg[i] : p->nullvalue, i==nArg-1 ? "\n": " ");
727 if( p->cnt++==0 && p->showHeader ){
728 for(i=0; i<nArg; i++){
729 fprintf(p->out,"%s%s",azCol[i], i==nArg-1 ? "\n" : p->separator);
732 if( azArg==0 ) break;
733 for(i=0; i<nArg; i++){
735 if( z==0 ) z = p->nullvalue;
736 fprintf(p->out, "%s", z);
738 fprintf(p->out, "%s", p->separator);
739 }else if( p->mode==MODE_Semi ){
740 fprintf(p->out, ";\n");
742 fprintf(p->out, "\n");
748 if( p->cnt++==0 && p->showHeader ){
749 fprintf(p->out,"<TR>");
750 for(i=0; i<nArg; i++){
751 fprintf(p->out,"<TH>");
752 output_html_string(p->out, azCol[i]);
753 fprintf(p->out,"</TH>\n");
755 fprintf(p->out,"</TR>\n");
757 if( azArg==0 ) break;
758 fprintf(p->out,"<TR>");
759 for(i=0; i<nArg; i++){
760 fprintf(p->out,"<TD>");
761 output_html_string(p->out, azArg[i] ? azArg[i] : p->nullvalue);
762 fprintf(p->out,"</TD>\n");
764 fprintf(p->out,"</TR>\n");
768 if( p->cnt++==0 && p->showHeader ){
769 for(i=0; i<nArg; i++){
770 output_c_string(p->out,azCol[i] ? azCol[i] : "");
771 fprintf(p->out, "%s", p->separator);
773 fprintf(p->out,"\n");
775 if( azArg==0 ) break;
776 for(i=0; i<nArg; i++){
777 output_c_string(p->out, azArg[i] ? azArg[i] : p->nullvalue);
778 fprintf(p->out, "%s", p->separator);
780 fprintf(p->out,"\n");
784 if( p->cnt++==0 && p->showHeader ){
785 for(i=0; i<nArg; i++){
786 output_csv(p, azCol[i] ? azCol[i] : "", i<nArg-1);
788 fprintf(p->out,"\n");
790 if( azArg==0 ) break;
791 for(i=0; i<nArg; i++){
792 output_csv(p, azArg[i], i<nArg-1);
794 fprintf(p->out,"\n");
799 if( azArg==0 ) break;
800 fprintf(p->out,"INSERT INTO %s VALUES(",p->zDestTable);
801 for(i=0; i<nArg; i++){
802 char *zSep = i>0 ? ",": "";
803 if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){
804 fprintf(p->out,"%sNULL",zSep);
805 }else if( aiType && aiType[i]==SQLITE_TEXT ){
806 if( zSep[0] ) fprintf(p->out,"%s",zSep);
807 output_quoted_string(p->out, azArg[i]);
808 }else if( aiType && (aiType[i]==SQLITE_INTEGER || aiType[i]==SQLITE_FLOAT) ){
809 fprintf(p->out,"%s%s",zSep, azArg[i]);
810 }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){
811 const void *pBlob = sqlite3_column_blob(p->pStmt, i);
812 int nBlob = sqlite3_column_bytes(p->pStmt, i);
813 if( zSep[0] ) fprintf(p->out,"%s",zSep);
814 output_hex_blob(p->out, pBlob, nBlob);
815 }else if( isNumber(azArg[i], 0) ){
816 fprintf(p->out,"%s%s",zSep, azArg[i]);
818 if( zSep[0] ) fprintf(p->out,"%s",zSep);
819 output_quoted_string(p->out, azArg[i]);
822 fprintf(p->out,");\n");
830 ** This is the callback routine that the SQLite library
831 ** invokes for each row of a query result.
833 static int callback(void *pArg, int nArg, char **azArg, char **azCol){
834 /* since we don't have type info, call the shell_callback with a NULL value */
835 return shell_callback(pArg, nArg, azArg, azCol, NULL);
839 ** Set the destination table field of the callback_data structure to
840 ** the name of the table given. Escape any quote characters in the
843 static void set_table_name(struct callback_data *p, const char *zName){
852 if( zName==0 ) return;
853 needQuote = !isalpha((unsigned char)*zName) && *zName!='_';
854 for(i=n=0; zName[i]; i++, n++){
855 if( !isalnum((unsigned char)zName[i]) && zName[i]!='_' ){
857 if( zName[i]=='\'' ) n++;
860 if( needQuote ) n += 2;
861 z = p->zDestTable = malloc( n+1 );
863 fprintf(stderr,"Error: out of memory\n");
867 if( needQuote ) z[n++] = '\'';
868 for(i=0; zName[i]; i++){
870 if( zName[i]=='\'' ) z[n++] = '\'';
872 if( needQuote ) z[n++] = '\'';
876 /* zIn is either a pointer to a NULL-terminated string in memory obtained
877 ** from malloc(), or a NULL pointer. The string pointed to by zAppend is
878 ** added to zIn, and the result returned in memory obtained from malloc().
879 ** zIn, if it was not NULL, is freed.
881 ** If the third argument, quote, is not '\0', then it is used as a
882 ** quote character for zAppend.
884 static char *appendText(char *zIn, char const *zAppend, char quote){
887 int nAppend = strlen30(zAppend);
888 int nIn = (zIn?strlen30(zIn):0);
893 for(i=0; i<nAppend; i++){
894 if( zAppend[i]==quote ) len++;
898 zIn = (char *)realloc(zIn, len);
904 char *zCsr = &zIn[nIn];
906 for(i=0; i<nAppend; i++){
907 *zCsr++ = zAppend[i];
908 if( zAppend[i]==quote ) *zCsr++ = quote;
912 assert( (zCsr-zIn)==len );
914 memcpy(&zIn[nIn], zAppend, nAppend);
923 ** Execute a query statement that has a single result column. Print
924 ** that result column on a line by itself with a semicolon terminator.
926 ** This is used, for example, to show the schema of the database by
927 ** querying the SQLITE_MASTER table.
929 static int run_table_dump_query(
930 FILE *out, /* Send output here */
931 sqlite3 *db, /* Database to query */
932 const char *zSelect, /* SELECT statement to extract content */
933 const char *zFirstRow /* Print before first row, if not NULL */
935 sqlite3_stmt *pSelect;
937 rc = sqlite3_prepare(db, zSelect, -1, &pSelect, 0);
938 if( rc!=SQLITE_OK || !pSelect ){
941 rc = sqlite3_step(pSelect);
942 while( rc==SQLITE_ROW ){
944 fprintf(out, "%s", zFirstRow);
947 fprintf(out, "%s;\n", sqlite3_column_text(pSelect, 0));
948 rc = sqlite3_step(pSelect);
950 return sqlite3_finalize(pSelect);
954 ** Allocate space and save off current error string.
956 static char *save_err_msg(
957 sqlite3 *db /* Database to query */
959 int nErrMsg = 1+strlen30(sqlite3_errmsg(db));
960 char *zErrMsg = sqlite3_malloc(nErrMsg);
962 memcpy(zErrMsg, sqlite3_errmsg(db), nErrMsg);
968 ** Display memory stats.
970 static int display_stats(
971 sqlite3 *db, /* Database to query */
972 struct callback_data *pArg, /* Pointer to struct callback_data */
973 int bReset /* True to reset the stats */
978 if( pArg && pArg->out ){
981 sqlite3_status(SQLITE_STATUS_MEMORY_USED, &iCur, &iHiwtr, bReset);
982 fprintf(pArg->out, "Memory Used: %d (max %d) bytes\n", iCur, iHiwtr);
984 sqlite3_status(SQLITE_STATUS_MALLOC_COUNT, &iCur, &iHiwtr, bReset);
985 fprintf(pArg->out, "Number of Outstanding Allocations: %d (max %d)\n", iCur, iHiwtr);
987 ** Not currently used by the CLI.
988 ** iHiwtr = iCur = -1;
989 ** sqlite3_status(SQLITE_STATUS_PAGECACHE_USED, &iCur, &iHiwtr, bReset);
990 ** fprintf(pArg->out, "Number of Pcache Pages Used: %d (max %d) pages\n", iCur, iHiwtr);
993 sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &iCur, &iHiwtr, bReset);
994 fprintf(pArg->out, "Number of Pcache Overflow Bytes: %d (max %d) bytes\n", iCur, iHiwtr);
996 ** Not currently used by the CLI.
997 ** iHiwtr = iCur = -1;
998 ** sqlite3_status(SQLITE_STATUS_SCRATCH_USED, &iCur, &iHiwtr, bReset);
999 ** fprintf(pArg->out, "Number of Scratch Allocations Used: %d (max %d)\n", iCur, iHiwtr);
1002 sqlite3_status(SQLITE_STATUS_SCRATCH_OVERFLOW, &iCur, &iHiwtr, bReset);
1003 fprintf(pArg->out, "Number of Scratch Overflow Bytes: %d (max %d) bytes\n", iCur, iHiwtr);
1005 sqlite3_status(SQLITE_STATUS_MALLOC_SIZE, &iCur, &iHiwtr, bReset);
1006 fprintf(pArg->out, "Largest Allocation: %d bytes\n", iHiwtr);
1008 sqlite3_status(SQLITE_STATUS_PAGECACHE_SIZE, &iCur, &iHiwtr, bReset);
1009 fprintf(pArg->out, "Largest Pcache Allocation: %d bytes\n", iHiwtr);
1011 sqlite3_status(SQLITE_STATUS_SCRATCH_SIZE, &iCur, &iHiwtr, bReset);
1012 fprintf(pArg->out, "Largest Scratch Allocation: %d bytes\n", iHiwtr);
1013 #ifdef YYTRACKMAXSTACKDEPTH
1015 sqlite3_status(SQLITE_STATUS_PARSER_STACK, &iCur, &iHiwtr, bReset);
1016 fprintf(pArg->out, "Deepest Parser Stack: %d (max %d)\n", iCur, iHiwtr);
1020 if( pArg && pArg->out && db ){
1022 sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_USED, &iCur, &iHiwtr, bReset);
1023 fprintf(pArg->out, "Lookaside Slots Used: %d (max %d)\n", iCur, iHiwtr);
1024 sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_HIT, &iCur, &iHiwtr, bReset);
1025 fprintf(pArg->out, "Successful lookaside attempts: %d\n", iHiwtr);
1026 sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE, &iCur, &iHiwtr, bReset);
1027 fprintf(pArg->out, "Lookaside failures due to size: %d\n", iHiwtr);
1028 sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL, &iCur, &iHiwtr, bReset);
1029 fprintf(pArg->out, "Lookaside failures due to OOM: %d\n", iHiwtr);
1031 sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_USED, &iCur, &iHiwtr, bReset);
1032 fprintf(pArg->out, "Pager Heap Usage: %d bytes\n", iCur);
1034 sqlite3_db_status(db, SQLITE_DBSTATUS_SCHEMA_USED, &iCur, &iHiwtr, bReset);
1035 fprintf(pArg->out, "Schema Heap Usage: %d bytes\n", iCur);
1037 sqlite3_db_status(db, SQLITE_DBSTATUS_STMT_USED, &iCur, &iHiwtr, bReset);
1038 fprintf(pArg->out, "Statement Heap/Lookaside Usage: %d bytes\n", iCur);
1041 if( pArg && pArg->out && db && pArg->pStmt ){
1042 iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, bReset);
1043 fprintf(pArg->out, "Fullscan Steps: %d\n", iCur);
1044 iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_SORT, bReset);
1045 fprintf(pArg->out, "Sort Operations: %d\n", iCur);
1046 iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_AUTOINDEX, bReset);
1047 fprintf(pArg->out, "Autoindex Inserts: %d\n", iCur);
1054 ** Execute a statement or set of statements. Print
1055 ** any result rows/columns depending on the current mode
1056 ** set via the supplied callback.
1058 ** This is very similar to SQLite's built-in sqlite3_exec()
1059 ** function except it takes a slightly different callback
1060 ** and callback data argument.
1062 static int shell_exec(
1063 sqlite3 *db, /* An open database */
1064 const char *zSql, /* SQL to be evaluated */
1065 int (*xCallback)(void*,int,char**,char**,int*), /* Callback function */
1066 /* (not the same as sqlite3_exec) */
1067 struct callback_data *pArg, /* Pointer to struct callback_data */
1068 char **pzErrMsg /* Error msg written here */
1070 sqlite3_stmt *pStmt = NULL; /* Statement to execute. */
1071 int rc = SQLITE_OK; /* Return Code */
1072 const char *zLeftover; /* Tail of unprocessed SQL */
1078 while( zSql[0] && (SQLITE_OK == rc) ){
1079 rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zLeftover);
1080 if( SQLITE_OK != rc ){
1082 *pzErrMsg = save_err_msg(db);
1086 /* this happens for a comment or white-space */
1088 while( isspace(zSql[0]) ) zSql++;
1092 /* save off the prepared statment handle and reset row count */
1094 pArg->pStmt = pStmt;
1098 /* echo the sql statement if echo on */
1099 if( pArg && pArg->echoOn ){
1100 const char *zStmtSql = sqlite3_sql(pStmt);
1101 fprintf(pArg->out, "%s\n", zStmtSql ? zStmtSql : zSql);
1104 /* perform the first step. this will tell us if we
1105 ** have a result set or not and how wide it is.
1107 rc = sqlite3_step(pStmt);
1108 /* if we have a result set... */
1109 if( SQLITE_ROW == rc ){
1110 /* if we have a callback... */
1112 /* allocate space for col name ptr, value ptr, and type */
1113 int nCol = sqlite3_column_count(pStmt);
1114 void *pData = sqlite3_malloc(3*nCol*sizeof(const char*) + 1);
1118 char **azCols = (char **)pData; /* Names of result columns */
1119 char **azVals = &azCols[nCol]; /* Results */
1120 int *aiTypes = (int *)&azVals[nCol]; /* Result types */
1122 assert(sizeof(int) <= sizeof(char *));
1123 /* save off ptrs to column names */
1124 for(i=0; i<nCol; i++){
1125 azCols[i] = (char *)sqlite3_column_name(pStmt, i);
1128 /* extract the data and data types */
1129 for(i=0; i<nCol; i++){
1130 azVals[i] = (char *)sqlite3_column_text(pStmt, i);
1131 aiTypes[i] = sqlite3_column_type(pStmt, i);
1132 if( !azVals[i] && (aiTypes[i]!=SQLITE_NULL) ){
1134 break; /* from for */
1138 /* if data and types extracted successfully... */
1139 if( SQLITE_ROW == rc ){
1140 /* call the supplied callback with the result row data */
1141 if( xCallback(pArg, nCol, azVals, azCols, aiTypes) ){
1144 rc = sqlite3_step(pStmt);
1147 } while( SQLITE_ROW == rc );
1148 sqlite3_free(pData);
1152 rc = sqlite3_step(pStmt);
1153 } while( rc == SQLITE_ROW );
1157 /* print usage stats if stats on */
1158 if( pArg && pArg->statsOn ){
1159 display_stats(db, pArg, 0);
1162 /* Finalize the statement just executed. If this fails, save a
1163 ** copy of the error message. Otherwise, set zSql to point to the
1164 ** next statement to execute. */
1165 rc = sqlite3_finalize(pStmt);
1166 if( rc==SQLITE_OK ){
1168 while( isspace(zSql[0]) ) zSql++;
1169 }else if( pzErrMsg ){
1170 *pzErrMsg = save_err_msg(db);
1173 /* clear saved stmt handle */
1185 ** This is a different callback routine used for dumping the database.
1186 ** Each row received by this callback consists of a table name,
1187 ** the table type ("index" or "table") and SQL to create the table.
1188 ** This routine should print text sufficient to recreate the table.
1190 static int dump_callback(void *pArg, int nArg, char **azArg, char **azCol){
1195 const char *zPrepStmt = 0;
1196 struct callback_data *p = (struct callback_data *)pArg;
1198 UNUSED_PARAMETER(azCol);
1199 if( nArg!=3 ) return 1;
1204 if( strcmp(zTable, "sqlite_sequence")==0 ){
1205 zPrepStmt = "DELETE FROM sqlite_sequence;\n";
1206 }else if( strcmp(zTable, "sqlite_stat1")==0 ){
1207 fprintf(p->out, "ANALYZE sqlite_master;\n");
1208 }else if( strncmp(zTable, "sqlite_", 7)==0 ){
1210 }else if( strncmp(zSql, "CREATE VIRTUAL TABLE", 20)==0 ){
1212 if( !p->writableSchema ){
1213 fprintf(p->out, "PRAGMA writable_schema=ON;\n");
1214 p->writableSchema = 1;
1216 zIns = sqlite3_mprintf(
1217 "INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"
1218 "VALUES('table','%q','%q',0,'%q');",
1219 zTable, zTable, zSql);
1220 fprintf(p->out, "%s\n", zIns);
1224 fprintf(p->out, "%s;\n", zSql);
1227 if( strcmp(zType, "table")==0 ){
1228 sqlite3_stmt *pTableInfo = 0;
1230 char *zTableInfo = 0;
1234 zTableInfo = appendText(zTableInfo, "PRAGMA table_info(", 0);
1235 zTableInfo = appendText(zTableInfo, zTable, '"');
1236 zTableInfo = appendText(zTableInfo, ");", 0);
1238 rc = sqlite3_prepare(p->db, zTableInfo, -1, &pTableInfo, 0);
1240 if( rc!=SQLITE_OK || !pTableInfo ){
1244 zSelect = appendText(zSelect, "SELECT 'INSERT INTO ' || ", 0);
1245 zTmp = appendText(zTmp, zTable, '"');
1247 zSelect = appendText(zSelect, zTmp, '\'');
1249 zSelect = appendText(zSelect, " || ' VALUES(' || ", 0);
1250 rc = sqlite3_step(pTableInfo);
1251 while( rc==SQLITE_ROW ){
1252 const char *zText = (const char *)sqlite3_column_text(pTableInfo, 1);
1253 zSelect = appendText(zSelect, "quote(", 0);
1254 zSelect = appendText(zSelect, zText, '"');
1255 rc = sqlite3_step(pTableInfo);
1256 if( rc==SQLITE_ROW ){
1257 zSelect = appendText(zSelect, ") || ',' || ", 0);
1259 zSelect = appendText(zSelect, ") ", 0);
1263 rc = sqlite3_finalize(pTableInfo);
1264 if( rc!=SQLITE_OK || nRow==0 ){
1268 zSelect = appendText(zSelect, "|| ')' FROM ", 0);
1269 zSelect = appendText(zSelect, zTable, '"');
1271 rc = run_table_dump_query(p->out, p->db, zSelect, zPrepStmt);
1272 if( rc==SQLITE_CORRUPT ){
1273 zSelect = appendText(zSelect, " ORDER BY rowid DESC", 0);
1274 rc = run_table_dump_query(p->out, p->db, zSelect, 0);
1276 if( zSelect ) free(zSelect);
1282 ** Run zQuery. Use dump_callback() as the callback routine so that
1283 ** the contents of the query are output as SQL statements.
1285 ** If we get a SQLITE_CORRUPT error, rerun the query after appending
1286 ** "ORDER BY rowid DESC" to the end.
1288 static int run_schema_dump_query(
1289 struct callback_data *p,
1294 rc = sqlite3_exec(p->db, zQuery, dump_callback, p, pzErrMsg);
1295 if( rc==SQLITE_CORRUPT ){
1297 int len = strlen30(zQuery);
1298 if( pzErrMsg ) sqlite3_free(*pzErrMsg);
1299 zQ2 = malloc( len+100 );
1300 if( zQ2==0 ) return rc;
1301 sqlite3_snprintf(sizeof(zQ2), zQ2, "%s ORDER BY rowid DESC", zQuery);
1302 rc = sqlite3_exec(p->db, zQ2, dump_callback, p, pzErrMsg);
1309 ** Text of a help message
1311 static char zHelp[] =
1312 ".backup ?DB? FILE Backup DB (default \"main\") to FILE\n"
1313 ".bail ON|OFF Stop after hitting an error. Default OFF\n"
1314 ".databases List names and files of attached databases\n"
1315 ".dump ?TABLE? ... Dump the database in an SQL text format\n"
1316 " If TABLE specified, only dump tables matching\n"
1317 " LIKE pattern TABLE.\n"
1318 ".echo ON|OFF Turn command echo on or off\n"
1319 ".exit Exit this program\n"
1320 ".explain ?ON|OFF? Turn output mode suitable for EXPLAIN on or off.\n"
1321 " With no args, it turns EXPLAIN on.\n"
1322 ".header(s) ON|OFF Turn display of headers on or off\n"
1323 ".help Show this message\n"
1324 ".import FILE TABLE Import data from FILE into TABLE\n"
1325 ".indices ?TABLE? Show names of all indices\n"
1326 " If TABLE specified, only show indices for tables\n"
1327 " matching LIKE pattern TABLE.\n"
1328 #ifdef SQLITE_ENABLE_IOTRACE
1329 ".iotrace FILE Enable I/O diagnostic logging to FILE\n"
1331 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1332 ".load FILE ?ENTRY? Load an extension library\n"
1334 ".log FILE|off Turn logging on or off. FILE can be stderr/stdout\n"
1335 ".mode MODE ?TABLE? Set output mode where MODE is one of:\n"
1336 " csv Comma-separated values\n"
1337 " column Left-aligned columns. (See .width)\n"
1338 " html HTML <table> code\n"
1339 " insert SQL insert statements for TABLE\n"
1340 " line One value per line\n"
1341 " list Values delimited by .separator string\n"
1342 " tabs Tab-separated values\n"
1343 " tcl TCL list elements\n"
1344 ".nullvalue STRING Print STRING in place of NULL values\n"
1345 ".output FILENAME Send output to FILENAME\n"
1346 ".output stdout Send output to the screen\n"
1347 ".prompt MAIN CONTINUE Replace the standard prompts\n"
1348 ".quit Exit this program\n"
1349 ".read FILENAME Execute SQL in FILENAME\n"
1350 ".restore ?DB? FILE Restore content of DB (default \"main\") from FILE\n"
1351 ".schema ?TABLE? Show the CREATE statements\n"
1352 " If TABLE specified, only show tables matching\n"
1353 " LIKE pattern TABLE.\n"
1354 ".separator STRING Change separator used by output mode and .import\n"
1355 ".show Show the current values for various settings\n"
1356 ".stats ON|OFF Turn stats on or off\n"
1357 ".tables ?TABLE? List names of tables\n"
1358 " If TABLE specified, only list tables matching\n"
1359 " LIKE pattern TABLE.\n"
1360 ".timeout MS Try opening locked tables for MS milliseconds\n"
1361 ".width NUM1 NUM2 ... Set column widths for \"column\" mode\n"
1364 static char zTimerHelp[] =
1365 ".timer ON|OFF Turn the CPU timer measurement on or off\n"
1368 /* Forward reference */
1369 static int process_input(struct callback_data *p, FILE *in);
1372 ** Make sure the database is open. If it is not, then open it. If
1373 ** the database fails to open, print an error message and exit.
1375 static void open_db(struct callback_data *p){
1377 sqlite3_open(p->zDbFilename, &p->db);
1379 if( db && sqlite3_errcode(db)==SQLITE_OK ){
1380 sqlite3_create_function(db, "shellstatic", 0, SQLITE_UTF8, 0,
1381 shellstaticFunc, 0, 0);
1383 if( db==0 || SQLITE_OK!=sqlite3_errcode(db) ){
1384 fprintf(stderr,"Error: unable to open database \"%s\": %s\n",
1385 p->zDbFilename, sqlite3_errmsg(db));
1388 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1389 sqlite3_enable_load_extension(p->db, 1);
1395 ** Do C-language style dequoting.
1399 ** \r -> carriage return
1400 ** \NNN -> ascii character NNN in octal
1403 static void resolve_backslashes(char *z){
1406 for(i=j=0; (c = z[i])!=0; i++, j++){
1415 }else if( c>='0' && c<='7' ){
1417 if( z[i+1]>='0' && z[i+1]<='7' ){
1419 c = (c<<3) + z[i] - '0';
1420 if( z[i+1]>='0' && z[i+1]<='7' ){
1422 c = (c<<3) + z[i] - '0';
1433 ** Interpret zArg as a boolean value. Return either 0 or 1.
1435 static int booleanValue(char *zArg){
1436 int val = atoi(zArg);
1438 for(j=0; zArg[j]; j++){
1439 zArg[j] = (char)tolower(zArg[j]);
1441 if( strcmp(zArg,"on")==0 ){
1443 }else if( strcmp(zArg,"yes")==0 ){
1450 ** If an input line begins with "." then invoke this routine to
1451 ** process that line.
1453 ** Return 1 on error, 2 to exit, and 0 otherwise.
1455 static int do_meta_command(char *zLine, struct callback_data *p){
1462 /* Parse the input line into tokens.
1464 while( zLine[i] && nArg<ArraySize(azArg) ){
1465 while( isspace((unsigned char)zLine[i]) ){ i++; }
1466 if( zLine[i]==0 ) break;
1467 if( zLine[i]=='\'' || zLine[i]=='"' ){
1468 int delim = zLine[i++];
1469 azArg[nArg++] = &zLine[i];
1470 while( zLine[i] && zLine[i]!=delim ){ i++; }
1471 if( zLine[i]==delim ){
1474 if( delim=='"' ) resolve_backslashes(azArg[nArg-1]);
1476 azArg[nArg++] = &zLine[i];
1477 while( zLine[i] && !isspace((unsigned char)zLine[i]) ){ i++; }
1478 if( zLine[i] ) zLine[i++] = 0;
1479 resolve_backslashes(azArg[nArg-1]);
1483 /* Process the input line.
1485 if( nArg==0 ) return 0; /* no tokens, no error */
1486 n = strlen30(azArg[0]);
1488 if( c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0 && nArg>1 && nArg<4){
1489 const char *zDestFile;
1492 sqlite3_backup *pBackup;
1494 zDestFile = azArg[1];
1497 zDestFile = azArg[2];
1500 rc = sqlite3_open(zDestFile, &pDest);
1501 if( rc!=SQLITE_OK ){
1502 fprintf(stderr, "Error: cannot open \"%s\"\n", zDestFile);
1503 sqlite3_close(pDest);
1507 pBackup = sqlite3_backup_init(pDest, "main", p->db, zDb);
1509 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
1510 sqlite3_close(pDest);
1513 while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK ){}
1514 sqlite3_backup_finish(pBackup);
1515 if( rc==SQLITE_DONE ){
1518 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
1521 sqlite3_close(pDest);
1524 if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 && nArg>1 && nArg<3 ){
1525 bail_on_error = booleanValue(azArg[1]);
1528 if( c=='d' && n>1 && strncmp(azArg[0], "databases", n)==0 && nArg==1 ){
1529 struct callback_data data;
1532 memcpy(&data, p, sizeof(data));
1533 data.showHeader = 1;
1534 data.mode = MODE_Column;
1535 data.colWidth[0] = 3;
1536 data.colWidth[1] = 15;
1537 data.colWidth[2] = 58;
1539 sqlite3_exec(p->db, "PRAGMA database_list; ", callback, &data, &zErrMsg);
1541 fprintf(stderr,"Error: %s\n", zErrMsg);
1542 sqlite3_free(zErrMsg);
1547 if( c=='d' && strncmp(azArg[0], "dump", n)==0 && nArg<3 ){
1550 /* When playing back a "dump", the content might appear in an order
1551 ** which causes immediate foreign key constraints to be violated.
1552 ** So disable foreign-key constraint enforcement to prevent problems. */
1553 fprintf(p->out, "PRAGMA foreign_keys=OFF;\n");
1554 fprintf(p->out, "BEGIN TRANSACTION;\n");
1555 p->writableSchema = 0;
1556 sqlite3_exec(p->db, "PRAGMA writable_schema=ON", 0, 0, 0);
1558 run_schema_dump_query(p,
1559 "SELECT name, type, sql FROM sqlite_master "
1560 "WHERE sql NOT NULL AND type=='table' AND name!='sqlite_sequence'", 0
1562 run_schema_dump_query(p,
1563 "SELECT name, type, sql FROM sqlite_master "
1564 "WHERE name=='sqlite_sequence'", 0
1566 run_table_dump_query(p->out, p->db,
1567 "SELECT sql FROM sqlite_master "
1568 "WHERE sql NOT NULL AND type IN ('index','trigger','view')", 0
1572 for(i=1; i<nArg; i++){
1573 zShellStatic = azArg[i];
1574 run_schema_dump_query(p,
1575 "SELECT name, type, sql FROM sqlite_master "
1576 "WHERE tbl_name LIKE shellstatic() AND type=='table'"
1577 " AND sql NOT NULL", 0);
1578 run_table_dump_query(p->out, p->db,
1579 "SELECT sql FROM sqlite_master "
1580 "WHERE sql NOT NULL"
1581 " AND type IN ('index','trigger','view')"
1582 " AND tbl_name LIKE shellstatic()", 0
1587 if( p->writableSchema ){
1588 fprintf(p->out, "PRAGMA writable_schema=OFF;\n");
1589 p->writableSchema = 0;
1591 sqlite3_exec(p->db, "PRAGMA writable_schema=OFF", 0, 0, 0);
1593 fprintf(stderr,"Error: %s\n", zErrMsg);
1594 sqlite3_free(zErrMsg);
1596 fprintf(p->out, "COMMIT;\n");
1600 if( c=='e' && strncmp(azArg[0], "echo", n)==0 && nArg>1 && nArg<3 ){
1601 p->echoOn = booleanValue(azArg[1]);
1604 if( c=='e' && strncmp(azArg[0], "exit", n)==0 && nArg==1 ){
1608 if( c=='e' && strncmp(azArg[0], "explain", n)==0 && nArg<3 ){
1609 int val = nArg>=2 ? booleanValue(azArg[1]) : 1;
1611 if(!p->explainPrev.valid) {
1612 p->explainPrev.valid = 1;
1613 p->explainPrev.mode = p->mode;
1614 p->explainPrev.showHeader = p->showHeader;
1615 memcpy(p->explainPrev.colWidth,p->colWidth,sizeof(p->colWidth));
1617 /* We could put this code under the !p->explainValid
1618 ** condition so that it does not execute if we are already in
1619 ** explain mode. However, always executing it allows us an easy
1620 ** was to reset to explain mode in case the user previously
1621 ** did an .explain followed by a .width, .mode or .header
1624 p->mode = MODE_Explain;
1626 memset(p->colWidth,0,ArraySize(p->colWidth));
1627 p->colWidth[0] = 4; /* addr */
1628 p->colWidth[1] = 13; /* opcode */
1629 p->colWidth[2] = 4; /* P1 */
1630 p->colWidth[3] = 4; /* P2 */
1631 p->colWidth[4] = 4; /* P3 */
1632 p->colWidth[5] = 13; /* P4 */
1633 p->colWidth[6] = 2; /* P5 */
1634 p->colWidth[7] = 13; /* Comment */
1635 }else if (p->explainPrev.valid) {
1636 p->explainPrev.valid = 0;
1637 p->mode = p->explainPrev.mode;
1638 p->showHeader = p->explainPrev.showHeader;
1639 memcpy(p->colWidth,p->explainPrev.colWidth,sizeof(p->colWidth));
1643 if( c=='h' && (strncmp(azArg[0], "header", n)==0 ||
1644 strncmp(azArg[0], "headers", n)==0) && nArg>1 && nArg<3 ){
1645 p->showHeader = booleanValue(azArg[1]);
1648 if( c=='h' && strncmp(azArg[0], "help", n)==0 ){
1649 fprintf(stderr,"%s",zHelp);
1651 fprintf(stderr,"%s",zTimerHelp);
1655 if( c=='i' && strncmp(azArg[0], "import", n)==0 && nArg==3 ){
1656 char *zTable = azArg[2]; /* Insert data into this table */
1657 char *zFile = azArg[1]; /* The file from which to extract data */
1658 sqlite3_stmt *pStmt = NULL; /* A statement */
1659 int nCol; /* Number of columns in the table */
1660 int nByte; /* Number of bytes in an SQL string */
1661 int i, j; /* Loop counters */
1662 int nSep; /* Number of bytes in p->separator[] */
1663 char *zSql; /* An SQL statement */
1664 char *zLine; /* A single line of input from the file */
1665 char **azCol; /* zLine[] broken up into columns */
1666 char *zCommit; /* How to commit changes */
1667 FILE *in; /* The input file */
1668 int lineno = 0; /* Line number of input file */
1671 nSep = strlen30(p->separator);
1673 fprintf(stderr, "Error: non-null separator required for import\n");
1676 zSql = sqlite3_mprintf("SELECT * FROM '%q'", zTable);
1678 fprintf(stderr, "Error: out of memory\n");
1681 nByte = strlen30(zSql);
1682 rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
1685 if (pStmt) sqlite3_finalize(pStmt);
1686 fprintf(stderr,"Error: %s\n", sqlite3_errmsg(db));
1689 nCol = sqlite3_column_count(pStmt);
1690 sqlite3_finalize(pStmt);
1692 if( nCol==0 ) return 0; /* no columns, no error */
1693 zSql = malloc( nByte + 20 + nCol*2 );
1695 fprintf(stderr, "Error: out of memory\n");
1698 sqlite3_snprintf(nByte+20, zSql, "INSERT INTO '%q' VALUES(?", zTable);
1700 for(i=1; i<nCol; i++){
1706 rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
1709 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(db));
1710 if (pStmt) sqlite3_finalize(pStmt);
1713 in = fopen(zFile, "rb");
1715 fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
1716 sqlite3_finalize(pStmt);
1719 azCol = malloc( sizeof(azCol[0])*(nCol+1) );
1721 fprintf(stderr, "Error: out of memory\n");
1723 sqlite3_finalize(pStmt);
1726 sqlite3_exec(p->db, "BEGIN", 0, 0, 0);
1728 while( (zLine = local_getline(0, in))!=0 ){
1733 for(i=0, z=zLine; *z && *z!='\n' && *z!='\r'; z++){
1734 if( *z==p->separator[0] && strncmp(z, p->separator, nSep)==0 ){
1738 azCol[i] = &z[nSep];
1746 "Error: %s line %d: expected %d columns of data but found %d\n",
1747 zFile, lineno, nCol, i+1);
1748 zCommit = "ROLLBACK";
1751 break; /* from while */
1753 for(i=0; i<nCol; i++){
1754 sqlite3_bind_text(pStmt, i+1, azCol[i], -1, SQLITE_STATIC);
1756 sqlite3_step(pStmt);
1757 rc = sqlite3_reset(pStmt);
1759 if( rc!=SQLITE_OK ){
1760 fprintf(stderr,"Error: %s\n", sqlite3_errmsg(db));
1761 zCommit = "ROLLBACK";
1763 break; /* from while */
1768 sqlite3_finalize(pStmt);
1769 sqlite3_exec(p->db, zCommit, 0, 0, 0);
1772 if( c=='i' && strncmp(azArg[0], "indices", n)==0 && nArg<3 ){
1773 struct callback_data data;
1776 memcpy(&data, p, sizeof(data));
1777 data.showHeader = 0;
1778 data.mode = MODE_List;
1780 rc = sqlite3_exec(p->db,
1781 "SELECT name FROM sqlite_master "
1782 "WHERE type='index' AND name NOT LIKE 'sqlite_%' "
1784 "SELECT name FROM sqlite_temp_master "
1785 "WHERE type='index' "
1787 callback, &data, &zErrMsg
1790 zShellStatic = azArg[1];
1791 rc = sqlite3_exec(p->db,
1792 "SELECT name FROM sqlite_master "
1793 "WHERE type='index' AND tbl_name LIKE shellstatic() "
1795 "SELECT name FROM sqlite_temp_master "
1796 "WHERE type='index' AND tbl_name LIKE shellstatic() "
1798 callback, &data, &zErrMsg
1803 fprintf(stderr,"Error: %s\n", zErrMsg);
1804 sqlite3_free(zErrMsg);
1806 }else if( rc != SQLITE_OK ){
1807 fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n");
1812 #ifdef SQLITE_ENABLE_IOTRACE
1813 if( c=='i' && strncmp(azArg[0], "iotrace", n)==0 ){
1814 extern void (*sqlite3IoTrace)(const char*, ...);
1815 if( iotrace && iotrace!=stdout ) fclose(iotrace);
1819 }else if( strcmp(azArg[1], "-")==0 ){
1820 sqlite3IoTrace = iotracePrintf;
1823 iotrace = fopen(azArg[1], "w");
1825 fprintf(stderr, "Error: cannot open \"%s\"\n", azArg[1]);
1829 sqlite3IoTrace = iotracePrintf;
1835 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1836 if( c=='l' && strncmp(azArg[0], "load", n)==0 && nArg>=2 ){
1837 const char *zFile, *zProc;
1840 zProc = nArg>=3 ? azArg[2] : 0;
1842 rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg);
1843 if( rc!=SQLITE_OK ){
1844 fprintf(stderr, "Error: %s\n", zErrMsg);
1845 sqlite3_free(zErrMsg);
1851 if( c=='l' && strncmp(azArg[0], "log", n)==0 && nArg>=2 ){
1852 const char *zFile = azArg[1];
1853 if( p->pLog && p->pLog!=stdout && p->pLog!=stderr ){
1857 if( strcmp(zFile,"stdout")==0 ){
1859 }else if( strcmp(zFile, "stderr")==0 ){
1861 }else if( strcmp(zFile, "off")==0 ){
1864 p->pLog = fopen(zFile, "w");
1866 fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
1871 if( c=='m' && strncmp(azArg[0], "mode", n)==0 && nArg==2 ){
1872 int n2 = strlen30(azArg[1]);
1873 if( (n2==4 && strncmp(azArg[1],"line",n2)==0)
1875 (n2==5 && strncmp(azArg[1],"lines",n2)==0) ){
1876 p->mode = MODE_Line;
1877 }else if( (n2==6 && strncmp(azArg[1],"column",n2)==0)
1879 (n2==7 && strncmp(azArg[1],"columns",n2)==0) ){
1880 p->mode = MODE_Column;
1881 }else if( n2==4 && strncmp(azArg[1],"list",n2)==0 ){
1882 p->mode = MODE_List;
1883 }else if( n2==4 && strncmp(azArg[1],"html",n2)==0 ){
1884 p->mode = MODE_Html;
1885 }else if( n2==3 && strncmp(azArg[1],"tcl",n2)==0 ){
1887 }else if( n2==3 && strncmp(azArg[1],"csv",n2)==0 ){
1889 sqlite3_snprintf(sizeof(p->separator), p->separator, ",");
1890 }else if( n2==4 && strncmp(azArg[1],"tabs",n2)==0 ){
1891 p->mode = MODE_List;
1892 sqlite3_snprintf(sizeof(p->separator), p->separator, "\t");
1893 }else if( n2==6 && strncmp(azArg[1],"insert",n2)==0 ){
1894 p->mode = MODE_Insert;
1895 set_table_name(p, "table");
1897 fprintf(stderr,"Error: mode should be one of: "
1898 "column csv html insert line list tabs tcl\n");
1903 if( c=='m' && strncmp(azArg[0], "mode", n)==0 && nArg==3 ){
1904 int n2 = strlen30(azArg[1]);
1905 if( n2==6 && strncmp(azArg[1],"insert",n2)==0 ){
1906 p->mode = MODE_Insert;
1907 set_table_name(p, azArg[2]);
1909 fprintf(stderr, "Error: invalid arguments: "
1910 " \"%s\". Enter \".help\" for help\n", azArg[2]);
1915 if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 && nArg==2 ) {
1916 sqlite3_snprintf(sizeof(p->nullvalue), p->nullvalue,
1917 "%.*s", (int)ArraySize(p->nullvalue)-1, azArg[1]);
1920 if( c=='o' && strncmp(azArg[0], "output", n)==0 && nArg==2 ){
1921 if( p->out!=stdout ){
1924 if( strcmp(azArg[1],"stdout")==0 ){
1926 sqlite3_snprintf(sizeof(p->outfile), p->outfile, "stdout");
1928 p->out = fopen(azArg[1], "wb");
1930 fprintf(stderr,"Error: cannot write to \"%s\"\n", azArg[1]);
1934 sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", azArg[1]);
1939 if( c=='p' && strncmp(azArg[0], "prompt", n)==0 && (nArg==2 || nArg==3)){
1941 strncpy(mainPrompt,azArg[1],(int)ArraySize(mainPrompt)-1);
1944 strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1);
1948 if( c=='q' && strncmp(azArg[0], "quit", n)==0 && nArg==1 ){
1952 if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 && nArg==2 ){
1953 FILE *alt = fopen(azArg[1], "rb");
1955 fprintf(stderr,"Error: cannot open \"%s\"\n", azArg[1]);
1958 rc = process_input(p, alt);
1963 if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 && nArg>1 && nArg<4){
1964 const char *zSrcFile;
1967 sqlite3_backup *pBackup;
1971 zSrcFile = azArg[1];
1974 zSrcFile = azArg[2];
1977 rc = sqlite3_open(zSrcFile, &pSrc);
1978 if( rc!=SQLITE_OK ){
1979 fprintf(stderr, "Error: cannot open \"%s\"\n", zSrcFile);
1980 sqlite3_close(pSrc);
1984 pBackup = sqlite3_backup_init(p->db, zDb, pSrc, "main");
1986 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
1987 sqlite3_close(pSrc);
1990 while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK
1991 || rc==SQLITE_BUSY ){
1992 if( rc==SQLITE_BUSY ){
1993 if( nTimeout++ >= 3 ) break;
1997 sqlite3_backup_finish(pBackup);
1998 if( rc==SQLITE_DONE ){
2000 }else if( rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){
2001 fprintf(stderr, "Error: source database is busy\n");
2004 fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
2007 sqlite3_close(pSrc);
2010 if( c=='s' && strncmp(azArg[0], "schema", n)==0 && nArg<3 ){
2011 struct callback_data data;
2014 memcpy(&data, p, sizeof(data));
2015 data.showHeader = 0;
2016 data.mode = MODE_Semi;
2019 for(i=0; azArg[1][i]; i++) azArg[1][i] = (char)tolower(azArg[1][i]);
2020 if( strcmp(azArg[1],"sqlite_master")==0 ){
2021 char *new_argv[2], *new_colv[2];
2022 new_argv[0] = "CREATE TABLE sqlite_master (\n"
2026 " rootpage integer,\n"
2030 new_colv[0] = "sql";
2032 callback(&data, 1, new_argv, new_colv);
2034 }else if( strcmp(azArg[1],"sqlite_temp_master")==0 ){
2035 char *new_argv[2], *new_colv[2];
2036 new_argv[0] = "CREATE TEMP TABLE sqlite_temp_master (\n"
2040 " rootpage integer,\n"
2044 new_colv[0] = "sql";
2046 callback(&data, 1, new_argv, new_colv);
2049 zShellStatic = azArg[1];
2050 rc = sqlite3_exec(p->db,
2052 " (SELECT sql sql, type type, tbl_name tbl_name, name name"
2053 " FROM sqlite_master UNION ALL"
2054 " SELECT sql, type, tbl_name, name FROM sqlite_temp_master) "
2055 "WHERE tbl_name LIKE shellstatic() AND type!='meta' AND sql NOTNULL "
2056 "ORDER BY substr(type,2,1), name",
2057 callback, &data, &zErrMsg);
2061 rc = sqlite3_exec(p->db,
2063 " (SELECT sql sql, type type, tbl_name tbl_name, name name"
2064 " FROM sqlite_master UNION ALL"
2065 " SELECT sql, type, tbl_name, name FROM sqlite_temp_master) "
2066 "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'"
2067 "ORDER BY substr(type,2,1), name",
2068 callback, &data, &zErrMsg
2072 fprintf(stderr,"Error: %s\n", zErrMsg);
2073 sqlite3_free(zErrMsg);
2075 }else if( rc != SQLITE_OK ){
2076 fprintf(stderr,"Error: querying schema information\n");
2083 if( c=='s' && strncmp(azArg[0], "separator", n)==0 && nArg==2 ){
2084 sqlite3_snprintf(sizeof(p->separator), p->separator,
2085 "%.*s", (int)sizeof(p->separator)-1, azArg[1]);
2088 if( c=='s' && strncmp(azArg[0], "show", n)==0 && nArg==1 ){
2090 fprintf(p->out,"%9.9s: %s\n","echo", p->echoOn ? "on" : "off");
2091 fprintf(p->out,"%9.9s: %s\n","explain", p->explainPrev.valid ? "on" :"off");
2092 fprintf(p->out,"%9.9s: %s\n","headers", p->showHeader ? "on" : "off");
2093 fprintf(p->out,"%9.9s: %s\n","mode", modeDescr[p->mode]);
2094 fprintf(p->out,"%9.9s: ", "nullvalue");
2095 output_c_string(p->out, p->nullvalue);
2096 fprintf(p->out, "\n");
2097 fprintf(p->out,"%9.9s: %s\n","output",
2098 strlen30(p->outfile) ? p->outfile : "stdout");
2099 fprintf(p->out,"%9.9s: ", "separator");
2100 output_c_string(p->out, p->separator);
2101 fprintf(p->out, "\n");
2102 fprintf(p->out,"%9.9s: %s\n","stats", p->statsOn ? "on" : "off");
2103 fprintf(p->out,"%9.9s: ","width");
2104 for (i=0;i<(int)ArraySize(p->colWidth) && p->colWidth[i] != 0;i++) {
2105 fprintf(p->out,"%d ",p->colWidth[i]);
2107 fprintf(p->out,"\n");
2110 if( c=='s' && strncmp(azArg[0], "stats", n)==0 && nArg>1 && nArg<3 ){
2111 p->statsOn = booleanValue(azArg[1]);
2114 if( c=='t' && n>1 && strncmp(azArg[0], "tables", n)==0 && nArg<3 ){
2120 rc = sqlite3_get_table(p->db,
2121 "SELECT name FROM sqlite_master "
2122 "WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%' "
2124 "SELECT name FROM sqlite_temp_master "
2125 "WHERE type IN ('table','view') "
2127 &azResult, &nRow, 0, &zErrMsg
2130 zShellStatic = azArg[1];
2131 rc = sqlite3_get_table(p->db,
2132 "SELECT name FROM sqlite_master "
2133 "WHERE type IN ('table','view') AND name LIKE shellstatic() "
2135 "SELECT name FROM sqlite_temp_master "
2136 "WHERE type IN ('table','view') AND name LIKE shellstatic() "
2138 &azResult, &nRow, 0, &zErrMsg
2143 fprintf(stderr,"Error: %s\n", zErrMsg);
2144 sqlite3_free(zErrMsg);
2146 }else if( rc != SQLITE_OK ){
2147 fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n");
2150 int len, maxlen = 0;
2152 int nPrintCol, nPrintRow;
2153 for(i=1; i<=nRow; i++){
2154 if( azResult[i]==0 ) continue;
2155 len = strlen30(azResult[i]);
2156 if( len>maxlen ) maxlen = len;
2158 nPrintCol = 80/(maxlen+2);
2159 if( nPrintCol<1 ) nPrintCol = 1;
2160 nPrintRow = (nRow + nPrintCol - 1)/nPrintCol;
2161 for(i=0; i<nPrintRow; i++){
2162 for(j=i+1; j<=nRow; j+=nPrintRow){
2163 char *zSp = j<=nPrintRow ? "" : " ";
2164 printf("%s%-*s", zSp, maxlen, azResult[j] ? azResult[j] : "");
2169 sqlite3_free_table(azResult);
2172 if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 && nArg>=2 ){
2173 static const struct {
2174 const char *zCtrlName; /* Name of a test-control option */
2175 int ctrlCode; /* Integer code for that option */
2177 { "prng_save", SQLITE_TESTCTRL_PRNG_SAVE },
2178 { "prng_restore", SQLITE_TESTCTRL_PRNG_RESTORE },
2179 { "prng_reset", SQLITE_TESTCTRL_PRNG_RESET },
2180 { "bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST },
2181 { "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL },
2182 { "benign_malloc_hooks", SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS },
2183 { "pending_byte", SQLITE_TESTCTRL_PENDING_BYTE },
2184 { "assert", SQLITE_TESTCTRL_ASSERT },
2185 { "always", SQLITE_TESTCTRL_ALWAYS },
2186 { "reserve", SQLITE_TESTCTRL_RESERVE },
2187 { "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS },
2188 { "iskeyword", SQLITE_TESTCTRL_ISKEYWORD },
2189 { "pghdrsz", SQLITE_TESTCTRL_PGHDRSZ },
2190 { "scratchmalloc", SQLITE_TESTCTRL_SCRATCHMALLOC },
2197 /* convert testctrl text option to value. allow any unique prefix
2198 ** of the option name, or a numerical value. */
2199 n = strlen30(azArg[1]);
2200 for(i=0; i<(int)(sizeof(aCtrl)/sizeof(aCtrl[0])); i++){
2201 if( strncmp(azArg[1], aCtrl[i].zCtrlName, n)==0 ){
2203 testctrl = aCtrl[i].ctrlCode;
2205 fprintf(stderr, "ambiguous option name: \"%s\"\n", azArg[i]);
2211 if( testctrl<0 ) testctrl = atoi(azArg[1]);
2212 if( (testctrl<SQLITE_TESTCTRL_FIRST) || (testctrl>SQLITE_TESTCTRL_LAST) ){
2213 fprintf(stderr,"Error: invalid testctrl option: %s\n", azArg[1]);
2217 /* sqlite3_test_control(int, db, int) */
2218 case SQLITE_TESTCTRL_OPTIMIZATIONS:
2219 case SQLITE_TESTCTRL_RESERVE:
2221 int opt = (int)strtol(azArg[2], 0, 0);
2222 rc = sqlite3_test_control(testctrl, p->db, opt);
2223 printf("%d (0x%08x)\n", rc, rc);
2225 fprintf(stderr,"Error: testctrl %s takes a single int option\n",
2230 /* sqlite3_test_control(int) */
2231 case SQLITE_TESTCTRL_PRNG_SAVE:
2232 case SQLITE_TESTCTRL_PRNG_RESTORE:
2233 case SQLITE_TESTCTRL_PRNG_RESET:
2234 case SQLITE_TESTCTRL_PGHDRSZ:
2236 rc = sqlite3_test_control(testctrl);
2237 printf("%d (0x%08x)\n", rc, rc);
2239 fprintf(stderr,"Error: testctrl %s takes no options\n", azArg[1]);
2243 /* sqlite3_test_control(int, uint) */
2244 case SQLITE_TESTCTRL_PENDING_BYTE:
2246 unsigned int opt = (unsigned int)atoi(azArg[2]);
2247 rc = sqlite3_test_control(testctrl, opt);
2248 printf("%d (0x%08x)\n", rc, rc);
2250 fprintf(stderr,"Error: testctrl %s takes a single unsigned"
2251 " int option\n", azArg[1]);
2255 /* sqlite3_test_control(int, int) */
2256 case SQLITE_TESTCTRL_ASSERT:
2257 case SQLITE_TESTCTRL_ALWAYS:
2259 int opt = atoi(azArg[2]);
2260 rc = sqlite3_test_control(testctrl, opt);
2261 printf("%d (0x%08x)\n", rc, rc);
2263 fprintf(stderr,"Error: testctrl %s takes a single int option\n",
2268 /* sqlite3_test_control(int, char *) */
2269 #ifdef SQLITE_N_KEYWORD
2270 case SQLITE_TESTCTRL_ISKEYWORD:
2272 const char *opt = azArg[2];
2273 rc = sqlite3_test_control(testctrl, opt);
2274 printf("%d (0x%08x)\n", rc, rc);
2276 fprintf(stderr,"Error: testctrl %s takes a single char * option\n",
2282 case SQLITE_TESTCTRL_BITVEC_TEST:
2283 case SQLITE_TESTCTRL_FAULT_INSTALL:
2284 case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS:
2285 case SQLITE_TESTCTRL_SCRATCHMALLOC:
2287 fprintf(stderr,"Error: CLI support for testctrl %s not implemented\n",
2294 if( c=='t' && n>4 && strncmp(azArg[0], "timeout", n)==0 && nArg==2 ){
2296 sqlite3_busy_timeout(p->db, atoi(azArg[1]));
2299 if( HAS_TIMER && c=='t' && n>=5 && strncmp(azArg[0], "timer", n)==0
2302 enableTimer = booleanValue(azArg[1]);
2305 if( c=='w' && strncmp(azArg[0], "width", n)==0 && nArg>1 ){
2307 assert( nArg<=ArraySize(azArg) );
2308 for(j=1; j<nArg && j<ArraySize(p->colWidth); j++){
2309 p->colWidth[j-1] = atoi(azArg[j]);
2314 fprintf(stderr, "Error: unknown command or invalid arguments: "
2315 " \"%s\". Enter \".help\" for help\n", azArg[0]);
2323 ** Return TRUE if a semicolon occurs anywhere in the first N characters
2326 static int _contains_semicolon(const char *z, int N){
2328 for(i=0; i<N; i++){ if( z[i]==';' ) return 1; }
2333 ** Test to see if a line consists entirely of whitespace.
2335 static int _all_whitespace(const char *z){
2337 if( isspace(*(unsigned char*)z) ) continue;
2338 if( *z=='/' && z[1]=='*' ){
2340 while( *z && (*z!='*' || z[1]!='/') ){ z++; }
2341 if( *z==0 ) return 0;
2345 if( *z=='-' && z[1]=='-' ){
2347 while( *z && *z!='\n' ){ z++; }
2348 if( *z==0 ) return 1;
2357 ** Return TRUE if the line typed in is an SQL command terminator other
2358 ** than a semi-colon. The SQL Server style "go" command is understood
2359 ** as is the Oracle "/".
2361 static int _is_command_terminator(const char *zLine){
2362 while( isspace(*(unsigned char*)zLine) ){ zLine++; };
2363 if( zLine[0]=='/' && _all_whitespace(&zLine[1]) ){
2364 return 1; /* Oracle */
2366 if( tolower(zLine[0])=='g' && tolower(zLine[1])=='o'
2367 && _all_whitespace(&zLine[2]) ){
2368 return 1; /* SQL Server */
2374 ** Return true if zSql is a complete SQL statement. Return false if it
2375 ** ends in the middle of a string literal or C-style comment.
2377 static int _is_complete(char *zSql, int nSql){
2379 if( zSql==0 ) return 1;
2382 rc = sqlite3_complete(zSql);
2388 ** Read input from *in and process it. If *in==0 then input
2389 ** is interactive - the user is typing it it. Otherwise, input
2390 ** is coming from a file or device. A prompt is issued and history
2391 ** is saved only if input is interactive. An interrupt signal will
2392 ** cause this routine to exit immediately, unless input is interactive.
2394 ** Return the number of errors.
2396 static int process_input(struct callback_data *p, FILE *in){
2407 while( errCnt==0 || !bail_on_error || (in==0 && stdin_is_interactive) ){
2410 zLine = one_input_line(zSql, in);
2412 break; /* We have reached EOF */
2414 if( seenInterrupt ){
2419 if( (zSql==0 || zSql[0]==0) && _all_whitespace(zLine) ) continue;
2420 if( zLine && zLine[0]=='.' && nSql==0 ){
2421 if( p->echoOn ) printf("%s\n", zLine);
2422 rc = do_meta_command(zLine, p);
2423 if( rc==2 ){ /* exit requested */
2430 if( _is_command_terminator(zLine) && _is_complete(zSql, nSql) ){
2431 memcpy(zLine,";",2);
2436 for(i=0; zLine[i] && isspace((unsigned char)zLine[i]); i++){}
2438 nSql = strlen30(zLine);
2439 zSql = malloc( nSql+3 );
2441 fprintf(stderr, "Error: out of memory\n");
2444 memcpy(zSql, zLine, nSql+1);
2448 int len = strlen30(zLine);
2449 zSql = realloc( zSql, nSql + len + 4 );
2451 fprintf(stderr,"Error: out of memory\n");
2454 zSql[nSql++] = '\n';
2455 memcpy(&zSql[nSql], zLine, len+1);
2458 if( zSql && _contains_semicolon(&zSql[nSqlPrior], nSql-nSqlPrior)
2459 && sqlite3_complete(zSql) ){
2463 rc = shell_exec(p->db, zSql, shell_callback, p, &zErrMsg);
2465 if( rc || zErrMsg ){
2467 if( in!=0 || !stdin_is_interactive ){
2468 sqlite3_snprintf(sizeof(zPrefix), zPrefix,
2469 "Error: near line %d:", startline);
2471 sqlite3_snprintf(sizeof(zPrefix), zPrefix, "Error:");
2474 fprintf(stderr, "%s %s\n", zPrefix, zErrMsg);
2475 sqlite3_free(zErrMsg);
2478 fprintf(stderr, "%s %s\n", zPrefix, sqlite3_errmsg(p->db));
2488 if( !_all_whitespace(zSql) ){
2489 fprintf(stderr, "Error: incomplete SQL: %s\n", zSql);
2498 ** Return a pathname which is the user's home directory. A
2499 ** 0 return indicates an error of some kind. Space to hold the
2500 ** resulting string is obtained from malloc(). The calling
2501 ** function should free the result.
2503 static char *find_home_dir(void){
2504 char *home_dir = NULL;
2506 #if !defined(_WIN32) && !defined(WIN32) && !defined(__OS2__) && !defined(_WIN32_WCE) && !defined(__RTP__) && !defined(_WRS_KERNEL)
2507 struct passwd *pwent;
2508 uid_t uid = getuid();
2509 if( (pwent=getpwuid(uid)) != NULL) {
2510 home_dir = pwent->pw_dir;
2514 #if defined(_WIN32_WCE)
2515 /* Windows CE (arm-wince-mingw32ce-gcc) does not provide getenv()
2517 home_dir = strdup("/");
2520 #if defined(_WIN32) || defined(WIN32) || defined(__OS2__)
2522 home_dir = getenv("USERPROFILE");
2527 home_dir = getenv("HOME");
2530 #if defined(_WIN32) || defined(WIN32) || defined(__OS2__)
2532 char *zDrive, *zPath;
2534 zDrive = getenv("HOMEDRIVE");
2535 zPath = getenv("HOMEPATH");
2536 if( zDrive && zPath ){
2537 n = strlen30(zDrive) + strlen30(zPath) + 1;
2538 home_dir = malloc( n );
2539 if( home_dir==0 ) return 0;
2540 sqlite3_snprintf(n, home_dir, "%s%s", zDrive, zPath);
2547 #endif /* !_WIN32_WCE */
2550 int n = strlen30(home_dir) + 1;
2551 char *z = malloc( n );
2552 if( z ) memcpy(z, home_dir, n);
2560 ** Read input from the file given by sqliterc_override. Or if that
2561 ** parameter is NULL, take input from ~/.sqliterc
2563 ** Returns the number of errors.
2565 static int process_sqliterc(
2566 struct callback_data *p, /* Configuration data */
2567 const char *sqliterc_override /* Name of config file. NULL to use default */
2569 char *home_dir = NULL;
2570 const char *sqliterc = sqliterc_override;
2576 if (sqliterc == NULL) {
2577 home_dir = find_home_dir();
2579 #if !defined(__RTP__) && !defined(_WRS_KERNEL)
2580 fprintf(stderr,"%s: Error: cannot locate your home directory\n", Argv0);
2584 nBuf = strlen30(home_dir) + 16;
2585 zBuf = malloc( nBuf );
2587 fprintf(stderr,"%s: Error: out of memory\n",Argv0);
2590 sqlite3_snprintf(nBuf, zBuf,"%s/.sqliterc",home_dir);
2592 sqliterc = (const char*)zBuf;
2594 in = fopen(sqliterc,"rb");
2596 if( stdin_is_interactive ){
2597 fprintf(stderr,"-- Loading resources from %s\n",sqliterc);
2599 rc = process_input(p,in);
2607 ** Show available command line options
2609 static const char zOptions[] =
2610 " -help show this message\n"
2611 " -init filename read/process named file\n"
2612 " -echo print commands before execution\n"
2613 " -[no]header turn headers on or off\n"
2614 " -bail stop after hitting an error\n"
2615 " -interactive force interactive I/O\n"
2616 " -batch force batch I/O\n"
2617 " -column set output mode to 'column'\n"
2618 " -csv set output mode to 'csv'\n"
2619 " -html set output mode to HTML\n"
2620 " -line set output mode to 'line'\n"
2621 " -list set output mode to 'list'\n"
2622 " -separator 'x' set output field separator (|)\n"
2623 " -stats print memory stats before each finalize\n"
2624 " -nullvalue 'text' set text string for NULL values\n"
2625 " -version show SQLite version\n"
2626 " -vfs NAME use NAME as the default VFS\n"
2627 #ifdef SQLITE_ENABLE_VFSTRACE
2628 " -vfstrace enable tracing of all VFS calls\n"
2631 static void usage(int showDetail){
2633 "Usage: %s [OPTIONS] FILENAME [SQL]\n"
2634 "FILENAME is the name of an SQLite database. A new database is created\n"
2635 "if the file does not previously exist.\n", Argv0);
2637 fprintf(stderr, "OPTIONS include:\n%s", zOptions);
2639 fprintf(stderr, "Use the -help option for additional information\n");
2645 ** Initialize the state information in data
2647 static void main_init(struct callback_data *data) {
2648 memset(data, 0, sizeof(*data));
2649 data->mode = MODE_List;
2650 memcpy(data->separator,"|", 2);
2651 data->showHeader = 0;
2652 sqlite3_config(SQLITE_CONFIG_LOG, shellLog, data);
2653 sqlite3_snprintf(sizeof(mainPrompt), mainPrompt,"sqlite> ");
2654 sqlite3_snprintf(sizeof(continuePrompt), continuePrompt," ...> ");
2655 sqlite3_config(SQLITE_CONFIG_SINGLETHREAD);
2658 int main(int argc, char **argv){
2660 struct callback_data data;
2661 const char *zInitFile = 0;
2662 char *zFirstCmd = 0;
2666 /* Begin evanm patch. */
2667 extern int sqlite_shell_init_icu();
2668 if( !sqlite_shell_init_icu() ){
2669 fprintf(stderr, "%s: warning: couldn't find icudt38.dll; "
2670 "queries against ICU FTS tables will fail.\n", argv[0]);
2672 /* End evanm patch. */
2676 stdin_is_interactive = isatty(0);
2678 /* Make sure we have a valid signal handler early, before anything
2682 signal(SIGINT, interrupt_handler);
2685 /* Do an initial pass through the command-line argument to locate
2686 ** the name of the database file, the name of the initialization file,
2687 ** the size of the alternative malloc heap,
2688 ** and the first command to execute.
2690 for(i=1; i<argc-1; i++){
2692 if( argv[i][0]!='-' ) break;
2694 if( z[0]=='-' && z[1]=='-' ) z++;
2695 if( strcmp(argv[i],"-separator")==0 || strcmp(argv[i],"-nullvalue")==0 ){
2697 }else if( strcmp(argv[i],"-init")==0 ){
2699 zInitFile = argv[i];
2700 /* Need to check for batch mode here to so we can avoid printing
2701 ** informational messages (like from process_sqliterc) before
2702 ** we do the actual processing of arguments later in a second pass.
2704 }else if( strcmp(argv[i],"-batch")==0 ){
2705 stdin_is_interactive = 0;
2706 }else if( strcmp(argv[i],"-heap")==0 ){
2709 sqlite3_int64 szHeap;
2712 szHeap = atoi(zSize);
2713 for(j=0; (c = zSize[j])!=0; j++){
2714 if( c=='M' ){ szHeap *= 1000000; break; }
2715 if( c=='K' ){ szHeap *= 1000; break; }
2716 if( c=='G' ){ szHeap *= 1000000000; break; }
2718 if( szHeap>0x7fff0000 ) szHeap = 0x7fff0000;
2719 #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
2720 sqlite3_config(SQLITE_CONFIG_HEAP, malloc((int)szHeap), (int)szHeap, 64);
2722 #ifdef SQLITE_ENABLE_VFSTRACE
2723 }else if( strcmp(argv[i],"-vfstrace")==0 ){
2724 extern int vfstrace_register(
2725 const char *zTraceName,
2726 const char *zOldVfsName,
2727 int (*xOut)(const char*,void*),
2731 vfstrace_register("trace",0,(int(*)(const char*,void*))fputs,stderr,1);
2733 }else if( strcmp(argv[i],"-vfs")==0 ){
2734 sqlite3_vfs *pVfs = sqlite3_vfs_find(argv[++i]);
2736 sqlite3_vfs_register(pVfs, 1);
2738 fprintf(stderr, "no such VFS: \"%s\"\n", argv[i]);
2744 #if defined(SQLITE_OS_OS2) && SQLITE_OS_OS2
2745 data.zDbFilename = (const char *)convertCpPathToUtf8( argv[i++] );
2747 data.zDbFilename = argv[i++];
2750 #ifndef SQLITE_OMIT_MEMORYDB
2751 data.zDbFilename = ":memory:";
2753 data.zDbFilename = 0;
2757 zFirstCmd = argv[i++];
2760 fprintf(stderr,"%s: Error: too many options: \"%s\"\n", Argv0, argv[i]);
2761 fprintf(stderr,"Use -help for a list of options.\n");
2766 #ifdef SQLITE_OMIT_MEMORYDB
2767 if( data.zDbFilename==0 ){
2768 fprintf(stderr,"%s: Error: no database filename specified\n", Argv0);
2773 /* Go ahead and open the database file if it already exists. If the
2774 ** file does not exist, delay opening it. This prevents empty database
2775 ** files from being created if a user mistypes the database name argument
2776 ** to the sqlite command-line tool.
2778 if( access(data.zDbFilename, 0)==0 ){
2782 /* Process the initialization file if there is one. If no -init option
2783 ** is given on the command line, look for a file named ~/.sqliterc and
2784 ** try to process it.
2786 rc = process_sqliterc(&data,zInitFile);
2791 /* Make a second pass through the command-line argument and set
2792 ** options. This second pass is delayed until after the initialization
2793 ** file is processed so that the command-line arguments will override
2794 ** settings in the initialization file.
2796 for(i=1; i<argc && argv[i][0]=='-'; i++){
2798 if( z[1]=='-' ){ z++; }
2799 if( strcmp(z,"-init")==0 ){
2801 }else if( strcmp(z,"-html")==0 ){
2802 data.mode = MODE_Html;
2803 }else if( strcmp(z,"-list")==0 ){
2804 data.mode = MODE_List;
2805 }else if( strcmp(z,"-line")==0 ){
2806 data.mode = MODE_Line;
2807 }else if( strcmp(z,"-column")==0 ){
2808 data.mode = MODE_Column;
2809 }else if( strcmp(z,"-csv")==0 ){
2810 data.mode = MODE_Csv;
2811 memcpy(data.separator,",",2);
2812 }else if( strcmp(z,"-separator")==0 ){
2815 fprintf(stderr,"%s: Error: missing argument for option: %s\n", Argv0, z);
2816 fprintf(stderr,"Use -help for a list of options.\n");
2819 sqlite3_snprintf(sizeof(data.separator), data.separator,
2820 "%.*s",(int)sizeof(data.separator)-1,argv[i]);
2821 }else if( strcmp(z,"-nullvalue")==0 ){
2824 fprintf(stderr,"%s: Error: missing argument for option: %s\n", Argv0, z);
2825 fprintf(stderr,"Use -help for a list of options.\n");
2828 sqlite3_snprintf(sizeof(data.nullvalue), data.nullvalue,
2829 "%.*s",(int)sizeof(data.nullvalue)-1,argv[i]);
2830 }else if( strcmp(z,"-header")==0 ){
2831 data.showHeader = 1;
2832 }else if( strcmp(z,"-noheader")==0 ){
2833 data.showHeader = 0;
2834 }else if( strcmp(z,"-echo")==0 ){
2836 }else if( strcmp(z,"-stats")==0 ){
2838 }else if( strcmp(z,"-bail")==0 ){
2840 }else if( strcmp(z,"-version")==0 ){
2841 printf("%s\n", sqlite3_libversion());
2843 }else if( strcmp(z,"-interactive")==0 ){
2844 stdin_is_interactive = 1;
2845 }else if( strcmp(z,"-batch")==0 ){
2846 stdin_is_interactive = 0;
2847 }else if( strcmp(z,"-heap")==0 ){
2849 }else if( strcmp(z,"-vfs")==0 ){
2851 }else if( strcmp(z,"-vfstrace")==0 ){
2853 }else if( strcmp(z,"-help")==0 || strcmp(z, "--help")==0 ){
2856 fprintf(stderr,"%s: Error: unknown option: %s\n", Argv0, z);
2857 fprintf(stderr,"Use -help for a list of options.\n");
2863 /* Run just the command that follows the database name
2865 if( zFirstCmd[0]=='.' ){
2866 rc = do_meta_command(zFirstCmd, &data);
2869 rc = shell_exec(data.db, zFirstCmd, shell_callback, &data, &zErrMsg);
2871 fprintf(stderr,"Error: %s\n", zErrMsg);
2872 return rc!=0 ? rc : 1;
2874 fprintf(stderr,"Error: unable to process SQL \"%s\"\n", zFirstCmd);
2879 /* Run commands received from standard input
2881 if( stdin_is_interactive ){
2886 "SQLite version %s\n"
2887 "Enter \".help\" for instructions\n"
2888 "Enter SQL statements terminated with a \";\"\n",
2889 sqlite3_libversion()
2891 zHome = find_home_dir();
2893 nHistory = strlen30(zHome) + 20;
2894 if( (zHistory = malloc(nHistory))!=0 ){
2895 sqlite3_snprintf(nHistory, zHistory,"%s/.sqlite_history", zHome);
2898 #if defined(HAVE_READLINE) && HAVE_READLINE==1
2899 if( zHistory ) read_history(zHistory);
2901 rc = process_input(&data, 0);
2903 stifle_history(100);
2904 write_history(zHistory);
2909 rc = process_input(&data, stdin);
2912 set_table_name(&data, 0);
2914 sqlite3_close(data.db);