xref: /netbsd-src/external/public-domain/sqlite/dist/shell.c (revision 7788a0781fe6ff2cce37368b4578a7ade0850cb1)
1 /*
2 ** 2001 September 15
3 **
4 ** The author disclaims copyright to this source code.  In place of
5 ** a legal notice, here is a blessing:
6 **
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.
10 **
11 *************************************************************************
12 ** This file contains code to implement the "sqlite" command line
13 ** utility for accessing SQLite databases.
14 */
15 #if (defined(_WIN32) || defined(WIN32)) && !defined(_CRT_SECURE_NO_WARNINGS)
16 /* This needs to come before any includes for MSVC compiler */
17 #define _CRT_SECURE_NO_WARNINGS
18 #endif
19 
20 /*
21 ** Enable large-file support for fopen() and friends on unix.
22 */
23 #ifndef SQLITE_DISABLE_LFS
24 # define _LARGE_FILE       1
25 # ifndef _FILE_OFFSET_BITS
26 #   define _FILE_OFFSET_BITS 64
27 # endif
28 # define _LARGEFILE_SOURCE 1
29 #endif
30 
31 #include <stdlib.h>
32 #include <string.h>
33 #include <stdio.h>
34 #include <assert.h>
35 #include "sqlite3.h"
36 #include <ctype.h>
37 #include <stdarg.h>
38 
39 #if !defined(_WIN32) && !defined(WIN32) && !defined(__OS2__)
40 # include <signal.h>
41 # if !defined(__RTP__) && !defined(_WRS_KERNEL)
42 #  include <pwd.h>
43 # endif
44 # include <unistd.h>
45 # include <sys/types.h>
46 #endif
47 
48 #ifdef __OS2__
49 # include <unistd.h>
50 #endif
51 
52 #ifdef HAVE_EDITLINE
53 # include <editline/editline.h>
54 #endif
55 #if defined(HAVE_READLINE) && HAVE_READLINE==1
56 # include <readline/readline.h>
57 # include <readline/history.h>
58 #endif
59 #if !defined(HAVE_EDITLINE) && (!defined(HAVE_READLINE) || HAVE_READLINE!=1)
60 # define readline(p) local_getline(p,stdin)
61 # define add_history(X)
62 # define read_history(X)
63 # define write_history(X)
64 # define stifle_history(X)
65 #endif
66 
67 #if defined(_WIN32) || defined(WIN32)
68 # include <io.h>
69 #define isatty(h) _isatty(h)
70 #define access(f,m) _access((f),(m))
71 #else
72 /* Make sure isatty() has a prototype.
73 */
74 extern int isatty(int);
75 #endif
76 
77 #if defined(_WIN32_WCE)
78 /* Windows CE (arm-wince-mingw32ce-gcc) does not provide isatty()
79  * thus we always assume that we have a console. That can be
80  * overridden with the -batch command line option.
81  */
82 #define isatty(x) 1
83 #endif
84 
85 /* True if the timer is enabled */
86 static int enableTimer = 0;
87 
88 /* ctype macros that work with signed characters */
89 #define IsSpace(X)  isspace((unsigned char)X)
90 #define IsDigit(X)  isdigit((unsigned char)X)
91 #define ToLower(X)  (char)tolower((unsigned char)X)
92 
93 #if !defined(_WIN32) && !defined(WIN32) && !defined(__OS2__) && !defined(__RTP__) && !defined(_WRS_KERNEL)
94 #include <sys/time.h>
95 #include <sys/resource.h>
96 
97 /* Saved resource information for the beginning of an operation */
98 static struct rusage sBegin;
99 
100 /*
101 ** Begin timing an operation
102 */
103 static void beginTimer(void){
104   if( enableTimer ){
105     getrusage(RUSAGE_SELF, &sBegin);
106   }
107 }
108 
109 /* Return the difference of two time_structs in seconds */
110 static double timeDiff(struct timeval *pStart, struct timeval *pEnd){
111   return (pEnd->tv_usec - pStart->tv_usec)*0.000001 +
112          (double)(pEnd->tv_sec - pStart->tv_sec);
113 }
114 
115 /*
116 ** Print the timing results.
117 */
118 static void endTimer(void){
119   if( enableTimer ){
120     struct rusage sEnd;
121     getrusage(RUSAGE_SELF, &sEnd);
122     printf("CPU Time: user %f sys %f\n",
123        timeDiff(&sBegin.ru_utime, &sEnd.ru_utime),
124        timeDiff(&sBegin.ru_stime, &sEnd.ru_stime));
125   }
126 }
127 
128 #define BEGIN_TIMER beginTimer()
129 #define END_TIMER endTimer()
130 #define HAS_TIMER 1
131 
132 #elif (defined(_WIN32) || defined(WIN32))
133 
134 #include <windows.h>
135 
136 /* Saved resource information for the beginning of an operation */
137 static HANDLE hProcess;
138 static FILETIME ftKernelBegin;
139 static FILETIME ftUserBegin;
140 typedef BOOL (WINAPI *GETPROCTIMES)(HANDLE, LPFILETIME, LPFILETIME, LPFILETIME, LPFILETIME);
141 static GETPROCTIMES getProcessTimesAddr = NULL;
142 
143 /*
144 ** Check to see if we have timer support.  Return 1 if necessary
145 ** support found (or found previously).
146 */
147 static int hasTimer(void){
148   if( getProcessTimesAddr ){
149     return 1;
150   } else {
151     /* GetProcessTimes() isn't supported in WIN95 and some other Windows versions.
152     ** See if the version we are running on has it, and if it does, save off
153     ** a pointer to it and the current process handle.
154     */
155     hProcess = GetCurrentProcess();
156     if( hProcess ){
157       HINSTANCE hinstLib = LoadLibrary(TEXT("Kernel32.dll"));
158       if( NULL != hinstLib ){
159         getProcessTimesAddr = (GETPROCTIMES) GetProcAddress(hinstLib, "GetProcessTimes");
160         if( NULL != getProcessTimesAddr ){
161           return 1;
162         }
163         FreeLibrary(hinstLib);
164       }
165     }
166   }
167   return 0;
168 }
169 
170 /*
171 ** Begin timing an operation
172 */
173 static void beginTimer(void){
174   if( enableTimer && getProcessTimesAddr ){
175     FILETIME ftCreation, ftExit;
176     getProcessTimesAddr(hProcess, &ftCreation, &ftExit, &ftKernelBegin, &ftUserBegin);
177   }
178 }
179 
180 /* Return the difference of two FILETIME structs in seconds */
181 static double timeDiff(FILETIME *pStart, FILETIME *pEnd){
182   sqlite_int64 i64Start = *((sqlite_int64 *) pStart);
183   sqlite_int64 i64End = *((sqlite_int64 *) pEnd);
184   return (double) ((i64End - i64Start) / 10000000.0);
185 }
186 
187 /*
188 ** Print the timing results.
189 */
190 static void endTimer(void){
191   if( enableTimer && getProcessTimesAddr){
192     FILETIME ftCreation, ftExit, ftKernelEnd, ftUserEnd;
193     getProcessTimesAddr(hProcess, &ftCreation, &ftExit, &ftKernelEnd, &ftUserEnd);
194     printf("CPU Time: user %f sys %f\n",
195        timeDiff(&ftUserBegin, &ftUserEnd),
196        timeDiff(&ftKernelBegin, &ftKernelEnd));
197   }
198 }
199 
200 #define BEGIN_TIMER beginTimer()
201 #define END_TIMER endTimer()
202 #define HAS_TIMER hasTimer()
203 
204 #else
205 #define BEGIN_TIMER
206 #define END_TIMER
207 #define HAS_TIMER 0
208 #endif
209 
210 /*
211 ** Used to prevent warnings about unused parameters
212 */
213 #define UNUSED_PARAMETER(x) (void)(x)
214 
215 /*
216 ** If the following flag is set, then command execution stops
217 ** at an error if we are not interactive.
218 */
219 static int bail_on_error = 0;
220 
221 /*
222 ** Threat stdin as an interactive input if the following variable
223 ** is true.  Otherwise, assume stdin is connected to a file or pipe.
224 */
225 static int stdin_is_interactive = 1;
226 
227 /*
228 ** The following is the open SQLite database.  We make a pointer
229 ** to this database a static variable so that it can be accessed
230 ** by the SIGINT handler to interrupt database processing.
231 */
232 static sqlite3 *db = 0;
233 
234 /*
235 ** True if an interrupt (Control-C) has been received.
236 */
237 static volatile int seenInterrupt = 0;
238 
239 /*
240 ** This is the name of our program. It is set in main(), used
241 ** in a number of other places, mostly for error messages.
242 */
243 static char *Argv0;
244 
245 /*
246 ** Prompt strings. Initialized in main. Settable with
247 **   .prompt main continue
248 */
249 static char mainPrompt[20];     /* First line prompt. default: "sqlite> "*/
250 static char continuePrompt[20]; /* Continuation prompt. default: "   ...> " */
251 
252 /*
253 ** Write I/O traces to the following stream.
254 */
255 #ifdef SQLITE_ENABLE_IOTRACE
256 static FILE *iotrace = 0;
257 #endif
258 
259 /*
260 ** This routine works like printf in that its first argument is a
261 ** format string and subsequent arguments are values to be substituted
262 ** in place of % fields.  The result of formatting this string
263 ** is written to iotrace.
264 */
265 #ifdef SQLITE_ENABLE_IOTRACE
266 static void iotracePrintf(const char *zFormat, ...){
267   va_list ap;
268   char *z;
269   if( iotrace==0 ) return;
270   va_start(ap, zFormat);
271   z = sqlite3_vmprintf(zFormat, ap);
272   va_end(ap);
273   fprintf(iotrace, "%s", z);
274   sqlite3_free(z);
275 }
276 #endif
277 
278 
279 /*
280 ** Determines if a string is a number of not.
281 */
282 static int isNumber(const char *z, int *realnum){
283   if( *z=='-' || *z=='+' ) z++;
284   if( !IsDigit(*z) ){
285     return 0;
286   }
287   z++;
288   if( realnum ) *realnum = 0;
289   while( IsDigit(*z) ){ z++; }
290   if( *z=='.' ){
291     z++;
292     if( !IsDigit(*z) ) return 0;
293     while( IsDigit(*z) ){ z++; }
294     if( realnum ) *realnum = 1;
295   }
296   if( *z=='e' || *z=='E' ){
297     z++;
298     if( *z=='+' || *z=='-' ) z++;
299     if( !IsDigit(*z) ) return 0;
300     while( IsDigit(*z) ){ z++; }
301     if( realnum ) *realnum = 1;
302   }
303   return *z==0;
304 }
305 
306 /*
307 ** A global char* and an SQL function to access its current value
308 ** from within an SQL statement. This program used to use the
309 ** sqlite_exec_printf() API to substitue a string into an SQL statement.
310 ** The correct way to do this with sqlite3 is to use the bind API, but
311 ** since the shell is built around the callback paradigm it would be a lot
312 ** of work. Instead just use this hack, which is quite harmless.
313 */
314 static const char *zShellStatic = 0;
315 static void shellstaticFunc(
316   sqlite3_context *context,
317   int argc,
318   sqlite3_value **argv
319 ){
320   assert( 0==argc );
321   assert( zShellStatic );
322   UNUSED_PARAMETER(argc);
323   UNUSED_PARAMETER(argv);
324   sqlite3_result_text(context, zShellStatic, -1, SQLITE_STATIC);
325 }
326 
327 
328 /*
329 ** This routine reads a line of text from FILE in, stores
330 ** the text in memory obtained from malloc() and returns a pointer
331 ** to the text.  NULL is returned at end of file, or if malloc()
332 ** fails.
333 **
334 ** The interface is like "readline" but no command-line editing
335 ** is done.
336 */
337 static char *local_getline(char *zPrompt, FILE *in){
338   char *zLine;
339   int nLine;
340   int n;
341 
342   if( zPrompt && *zPrompt ){
343     printf("%s",zPrompt);
344     fflush(stdout);
345   }
346   nLine = 100;
347   zLine = malloc( nLine );
348   if( zLine==0 ) return 0;
349   n = 0;
350   while( 1 ){
351     if( n+100>nLine ){
352       nLine = nLine*2 + 100;
353       zLine = realloc(zLine, nLine);
354       if( zLine==0 ) return 0;
355     }
356     if( fgets(&zLine[n], nLine - n, in)==0 ){
357       if( n==0 ){
358         free(zLine);
359         return 0;
360       }
361       zLine[n] = 0;
362       break;
363     }
364     while( zLine[n] ){ n++; }
365     if( n>0 && zLine[n-1]=='\n' ){
366       n--;
367       if( n>0 && zLine[n-1]=='\r' ) n--;
368       zLine[n] = 0;
369       break;
370     }
371   }
372   zLine = realloc( zLine, n+1 );
373   return zLine;
374 }
375 
376 /*
377 ** Retrieve a single line of input text.
378 **
379 ** zPrior is a string of prior text retrieved.  If not the empty
380 ** string, then issue a continuation prompt.
381 */
382 static char *one_input_line(const char *zPrior, FILE *in){
383   char *zPrompt;
384   char *zResult;
385   if( in!=0 ){
386     return local_getline(0, in);
387   }
388   if( zPrior && zPrior[0] ){
389     zPrompt = continuePrompt;
390   }else{
391     zPrompt = mainPrompt;
392   }
393   zResult = readline(zPrompt);
394 #if defined(HAVE_READLINE) && HAVE_READLINE==1
395   if( zResult && *zResult ) add_history(zResult);
396 #endif
397   return zResult;
398 }
399 
400 struct previous_mode_data {
401   int valid;        /* Is there legit data in here? */
402   int mode;
403   int showHeader;
404   int colWidth[100];
405 };
406 
407 /*
408 ** An pointer to an instance of this structure is passed from
409 ** the main program to the callback.  This is used to communicate
410 ** state and mode information.
411 */
412 struct callback_data {
413   sqlite3 *db;           /* The database */
414   int echoOn;            /* True to echo input commands */
415   int statsOn;           /* True to display memory stats before each finalize */
416   int cnt;               /* Number of records displayed so far */
417   FILE *out;             /* Write results here */
418   int nErr;              /* Number of errors seen */
419   int mode;              /* An output mode setting */
420   int writableSchema;    /* True if PRAGMA writable_schema=ON */
421   int showHeader;        /* True to show column names in List or Column mode */
422   char *zDestTable;      /* Name of destination table when MODE_Insert */
423   char separator[20];    /* Separator character for MODE_List */
424   int colWidth[100];     /* Requested width of each column when in column mode*/
425   int actualWidth[100];  /* Actual width of each column */
426   char nullvalue[20];    /* The text to print when a NULL comes back from
427                          ** the database */
428   struct previous_mode_data explainPrev;
429                          /* Holds the mode information just before
430                          ** .explain ON */
431   char outfile[FILENAME_MAX]; /* Filename for *out */
432   const char *zDbFilename;    /* name of the database file */
433   const char *zVfs;           /* Name of VFS to use */
434   sqlite3_stmt *pStmt;   /* Current statement if any. */
435   FILE *pLog;            /* Write log output here */
436 };
437 
438 /*
439 ** These are the allowed modes.
440 */
441 #define MODE_Line     0  /* One column per line.  Blank line between records */
442 #define MODE_Column   1  /* One record per line in neat columns */
443 #define MODE_List     2  /* One record per line with a separator */
444 #define MODE_Semi     3  /* Same as MODE_List but append ";" to each line */
445 #define MODE_Html     4  /* Generate an XHTML table */
446 #define MODE_Insert   5  /* Generate SQL "insert" statements */
447 #define MODE_Tcl      6  /* Generate ANSI-C or TCL quoted elements */
448 #define MODE_Csv      7  /* Quote strings, numbers are plain */
449 #define MODE_Explain  8  /* Like MODE_Column, but do not truncate data */
450 
451 static const char *modeDescr[] = {
452   "line",
453   "column",
454   "list",
455   "semi",
456   "html",
457   "insert",
458   "tcl",
459   "csv",
460   "explain",
461 };
462 
463 /*
464 ** Number of elements in an array
465 */
466 #define ArraySize(X)  (int)(sizeof(X)/sizeof(X[0]))
467 
468 /*
469 ** Compute a string length that is limited to what can be stored in
470 ** lower 30 bits of a 32-bit signed integer.
471 */
472 static int strlen30(const char *z){
473   const char *z2 = z;
474   while( *z2 ){ z2++; }
475   return 0x3fffffff & (int)(z2 - z);
476 }
477 
478 /*
479 ** A callback for the sqlite3_log() interface.
480 */
481 static void shellLog(void *pArg, int iErrCode, const char *zMsg){
482   struct callback_data *p = (struct callback_data*)pArg;
483   if( p->pLog==0 ) return;
484   fprintf(p->pLog, "(%d) %s\n", iErrCode, zMsg);
485   fflush(p->pLog);
486 }
487 
488 /*
489 ** Output the given string as a hex-encoded blob (eg. X'1234' )
490 */
491 static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){
492   int i;
493   char *zBlob = (char *)pBlob;
494   fprintf(out,"X'");
495   for(i=0; i<nBlob; i++){ fprintf(out,"%02x",zBlob[i]); }
496   fprintf(out,"'");
497 }
498 
499 /*
500 ** Output the given string as a quoted string using SQL quoting conventions.
501 */
502 static void output_quoted_string(FILE *out, const char *z){
503   int i;
504   int nSingle = 0;
505   for(i=0; z[i]; i++){
506     if( z[i]=='\'' ) nSingle++;
507   }
508   if( nSingle==0 ){
509     fprintf(out,"'%s'",z);
510   }else{
511     fprintf(out,"'");
512     while( *z ){
513       for(i=0; z[i] && z[i]!='\''; i++){}
514       if( i==0 ){
515         fprintf(out,"''");
516         z++;
517       }else if( z[i]=='\'' ){
518         fprintf(out,"%.*s''",i,z);
519         z += i+1;
520       }else{
521         fprintf(out,"%s",z);
522         break;
523       }
524     }
525     fprintf(out,"'");
526   }
527 }
528 
529 /*
530 ** Output the given string as a quoted according to C or TCL quoting rules.
531 */
532 static void output_c_string(FILE *out, const char *z){
533   unsigned int c;
534   fputc('"', out);
535   while( (c = *(z++))!=0 ){
536     if( c=='\\' ){
537       fputc(c, out);
538       fputc(c, out);
539     }else if( c=='\t' ){
540       fputc('\\', out);
541       fputc('t', out);
542     }else if( c=='\n' ){
543       fputc('\\', out);
544       fputc('n', out);
545     }else if( c=='\r' ){
546       fputc('\\', out);
547       fputc('r', out);
548     }else if( !isprint(c) ){
549       fprintf(out, "\\%03o", c&0xff);
550     }else{
551       fputc(c, out);
552     }
553   }
554   fputc('"', out);
555 }
556 
557 /*
558 ** Output the given string with characters that are special to
559 ** HTML escaped.
560 */
561 static void output_html_string(FILE *out, const char *z){
562   int i;
563   while( *z ){
564     for(i=0;   z[i]
565             && z[i]!='<'
566             && z[i]!='&'
567             && z[i]!='>'
568             && z[i]!='\"'
569             && z[i]!='\'';
570         i++){}
571     if( i>0 ){
572       fprintf(out,"%.*s",i,z);
573     }
574     if( z[i]=='<' ){
575       fprintf(out,"&lt;");
576     }else if( z[i]=='&' ){
577       fprintf(out,"&amp;");
578     }else if( z[i]=='>' ){
579       fprintf(out,"&gt;");
580     }else if( z[i]=='\"' ){
581       fprintf(out,"&quot;");
582     }else if( z[i]=='\'' ){
583       fprintf(out,"&#39;");
584     }else{
585       break;
586     }
587     z += i + 1;
588   }
589 }
590 
591 /*
592 ** If a field contains any character identified by a 1 in the following
593 ** array, then the string must be quoted for CSV.
594 */
595 static const char needCsvQuote[] = {
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,
598   1, 0, 1, 0, 0, 0, 0, 1,   0, 0, 0, 0, 0, 0, 0, 0,
599   0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
600   0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
601   0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
602   0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
603   0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 1,
604   1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
605   1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
606   1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
607   1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
608   1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
609   1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
610   1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
611   1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
612 };
613 
614 /*
615 ** Output a single term of CSV.  Actually, p->separator is used for
616 ** the separator, which may or may not be a comma.  p->nullvalue is
617 ** the null value.  Strings are quoted using ANSI-C rules.  Numbers
618 ** appear outside of quotes.
619 */
620 static void output_csv(struct callback_data *p, const char *z, int bSep){
621   FILE *out = p->out;
622   if( z==0 ){
623     fprintf(out,"%s",p->nullvalue);
624   }else{
625     int i;
626     int nSep = strlen30(p->separator);
627     for(i=0; z[i]; i++){
628       if( needCsvQuote[((unsigned char*)z)[i]]
629          || (z[i]==p->separator[0] &&
630              (nSep==1 || memcmp(z, p->separator, nSep)==0)) ){
631         i = 0;
632         break;
633       }
634     }
635     if( i==0 ){
636       putc('"', out);
637       for(i=0; z[i]; i++){
638         if( z[i]=='"' ) putc('"', out);
639         putc(z[i], out);
640       }
641       putc('"', out);
642     }else{
643       fprintf(out, "%s", z);
644     }
645   }
646   if( bSep ){
647     fprintf(p->out, "%s", p->separator);
648   }
649 }
650 
651 #ifdef SIGINT
652 /*
653 ** This routine runs when the user presses Ctrl-C
654 */
655 static void interrupt_handler(int NotUsed){
656   UNUSED_PARAMETER(NotUsed);
657   seenInterrupt = 1;
658   if( db ) sqlite3_interrupt(db);
659 }
660 #endif
661 
662 /*
663 ** This is the callback routine that the shell
664 ** invokes for each row of a query result.
665 */
666 static int shell_callback(void *pArg, int nArg, char **azArg, char **azCol, int *aiType){
667   int i;
668   struct callback_data *p = (struct callback_data*)pArg;
669 
670   switch( p->mode ){
671     case MODE_Line: {
672       int w = 5;
673       if( azArg==0 ) break;
674       for(i=0; i<nArg; i++){
675         int len = strlen30(azCol[i] ? azCol[i] : "");
676         if( len>w ) w = len;
677       }
678       if( p->cnt++>0 ) fprintf(p->out,"\n");
679       for(i=0; i<nArg; i++){
680         fprintf(p->out,"%*s = %s\n", w, azCol[i],
681                 azArg[i] ? azArg[i] : p->nullvalue);
682       }
683       break;
684     }
685     case MODE_Explain:
686     case MODE_Column: {
687       if( p->cnt++==0 ){
688         for(i=0; i<nArg; i++){
689           int w, n;
690           if( i<ArraySize(p->colWidth) ){
691             w = p->colWidth[i];
692           }else{
693             w = 0;
694           }
695           if( w<=0 ){
696             w = strlen30(azCol[i] ? azCol[i] : "");
697             if( w<10 ) w = 10;
698             n = strlen30(azArg && azArg[i] ? azArg[i] : p->nullvalue);
699             if( w<n ) w = n;
700           }
701           if( i<ArraySize(p->actualWidth) ){
702             p->actualWidth[i] = w;
703           }
704           if( p->showHeader ){
705             fprintf(p->out,"%-*.*s%s",w,w,azCol[i], i==nArg-1 ? "\n": "  ");
706           }
707         }
708         if( p->showHeader ){
709           for(i=0; i<nArg; i++){
710             int w;
711             if( i<ArraySize(p->actualWidth) ){
712                w = p->actualWidth[i];
713             }else{
714                w = 10;
715             }
716             fprintf(p->out,"%-*.*s%s",w,w,"-----------------------------------"
717                    "----------------------------------------------------------",
718                     i==nArg-1 ? "\n": "  ");
719           }
720         }
721       }
722       if( azArg==0 ) break;
723       for(i=0; i<nArg; i++){
724         int w;
725         if( i<ArraySize(p->actualWidth) ){
726            w = p->actualWidth[i];
727         }else{
728            w = 10;
729         }
730         if( p->mode==MODE_Explain && azArg[i] &&
731            strlen30(azArg[i])>w ){
732           w = strlen30(azArg[i]);
733         }
734         fprintf(p->out,"%-*.*s%s",w,w,
735             azArg[i] ? azArg[i] : p->nullvalue, i==nArg-1 ? "\n": "  ");
736       }
737       break;
738     }
739     case MODE_Semi:
740     case MODE_List: {
741       if( p->cnt++==0 && p->showHeader ){
742         for(i=0; i<nArg; i++){
743           fprintf(p->out,"%s%s",azCol[i], i==nArg-1 ? "\n" : p->separator);
744         }
745       }
746       if( azArg==0 ) break;
747       for(i=0; i<nArg; i++){
748         char *z = azArg[i];
749         if( z==0 ) z = p->nullvalue;
750         fprintf(p->out, "%s", z);
751         if( i<nArg-1 ){
752           fprintf(p->out, "%s", p->separator);
753         }else if( p->mode==MODE_Semi ){
754           fprintf(p->out, ";\n");
755         }else{
756           fprintf(p->out, "\n");
757         }
758       }
759       break;
760     }
761     case MODE_Html: {
762       if( p->cnt++==0 && p->showHeader ){
763         fprintf(p->out,"<TR>");
764         for(i=0; i<nArg; i++){
765           fprintf(p->out,"<TH>");
766           output_html_string(p->out, azCol[i]);
767           fprintf(p->out,"</TH>\n");
768         }
769         fprintf(p->out,"</TR>\n");
770       }
771       if( azArg==0 ) break;
772       fprintf(p->out,"<TR>");
773       for(i=0; i<nArg; i++){
774         fprintf(p->out,"<TD>");
775         output_html_string(p->out, azArg[i] ? azArg[i] : p->nullvalue);
776         fprintf(p->out,"</TD>\n");
777       }
778       fprintf(p->out,"</TR>\n");
779       break;
780     }
781     case MODE_Tcl: {
782       if( p->cnt++==0 && p->showHeader ){
783         for(i=0; i<nArg; i++){
784           output_c_string(p->out,azCol[i] ? azCol[i] : "");
785           fprintf(p->out, "%s", p->separator);
786         }
787         fprintf(p->out,"\n");
788       }
789       if( azArg==0 ) break;
790       for(i=0; i<nArg; i++){
791         output_c_string(p->out, azArg[i] ? azArg[i] : p->nullvalue);
792         fprintf(p->out, "%s", p->separator);
793       }
794       fprintf(p->out,"\n");
795       break;
796     }
797     case MODE_Csv: {
798       if( p->cnt++==0 && p->showHeader ){
799         for(i=0; i<nArg; i++){
800           output_csv(p, azCol[i] ? azCol[i] : "", i<nArg-1);
801         }
802         fprintf(p->out,"\n");
803       }
804       if( azArg==0 ) break;
805       for(i=0; i<nArg; i++){
806         output_csv(p, azArg[i], i<nArg-1);
807       }
808       fprintf(p->out,"\n");
809       break;
810     }
811     case MODE_Insert: {
812       p->cnt++;
813       if( azArg==0 ) break;
814       fprintf(p->out,"INSERT INTO %s VALUES(",p->zDestTable);
815       for(i=0; i<nArg; i++){
816         char *zSep = i>0 ? ",": "";
817         if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){
818           fprintf(p->out,"%sNULL",zSep);
819         }else if( aiType && aiType[i]==SQLITE_TEXT ){
820           if( zSep[0] ) fprintf(p->out,"%s",zSep);
821           output_quoted_string(p->out, azArg[i]);
822         }else if( aiType && (aiType[i]==SQLITE_INTEGER || aiType[i]==SQLITE_FLOAT) ){
823           fprintf(p->out,"%s%s",zSep, azArg[i]);
824         }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){
825           const void *pBlob = sqlite3_column_blob(p->pStmt, i);
826           int nBlob = sqlite3_column_bytes(p->pStmt, i);
827           if( zSep[0] ) fprintf(p->out,"%s",zSep);
828           output_hex_blob(p->out, pBlob, nBlob);
829         }else if( isNumber(azArg[i], 0) ){
830           fprintf(p->out,"%s%s",zSep, azArg[i]);
831         }else{
832           if( zSep[0] ) fprintf(p->out,"%s",zSep);
833           output_quoted_string(p->out, azArg[i]);
834         }
835       }
836       fprintf(p->out,");\n");
837       break;
838     }
839   }
840   return 0;
841 }
842 
843 /*
844 ** This is the callback routine that the SQLite library
845 ** invokes for each row of a query result.
846 */
847 static int callback(void *pArg, int nArg, char **azArg, char **azCol){
848   /* since we don't have type info, call the shell_callback with a NULL value */
849   return shell_callback(pArg, nArg, azArg, azCol, NULL);
850 }
851 
852 /*
853 ** Set the destination table field of the callback_data structure to
854 ** the name of the table given.  Escape any quote characters in the
855 ** table name.
856 */
857 static void set_table_name(struct callback_data *p, const char *zName){
858   int i, n;
859   int needQuote;
860   char *z;
861 
862   if( p->zDestTable ){
863     free(p->zDestTable);
864     p->zDestTable = 0;
865   }
866   if( zName==0 ) return;
867   needQuote = !isalpha((unsigned char)*zName) && *zName!='_';
868   for(i=n=0; zName[i]; i++, n++){
869     if( !isalnum((unsigned char)zName[i]) && zName[i]!='_' ){
870       needQuote = 1;
871       if( zName[i]=='\'' ) n++;
872     }
873   }
874   if( needQuote ) n += 2;
875   z = p->zDestTable = malloc( n+1 );
876   if( z==0 ){
877     fprintf(stderr,"Error: out of memory\n");
878     exit(1);
879   }
880   n = 0;
881   if( needQuote ) z[n++] = '\'';
882   for(i=0; zName[i]; i++){
883     z[n++] = zName[i];
884     if( zName[i]=='\'' ) z[n++] = '\'';
885   }
886   if( needQuote ) z[n++] = '\'';
887   z[n] = 0;
888 }
889 
890 /* zIn is either a pointer to a NULL-terminated string in memory obtained
891 ** from malloc(), or a NULL pointer. The string pointed to by zAppend is
892 ** added to zIn, and the result returned in memory obtained from malloc().
893 ** zIn, if it was not NULL, is freed.
894 **
895 ** If the third argument, quote, is not '\0', then it is used as a
896 ** quote character for zAppend.
897 */
898 static char *appendText(char *zIn, char const *zAppend, char quote){
899   int len;
900   int i;
901   int nAppend = strlen30(zAppend);
902   int nIn = (zIn?strlen30(zIn):0);
903 
904   len = nAppend+nIn+1;
905   if( quote ){
906     len += 2;
907     for(i=0; i<nAppend; i++){
908       if( zAppend[i]==quote ) len++;
909     }
910   }
911 
912   zIn = (char *)realloc(zIn, len);
913   if( !zIn ){
914     return 0;
915   }
916 
917   if( quote ){
918     char *zCsr = &zIn[nIn];
919     *zCsr++ = quote;
920     for(i=0; i<nAppend; i++){
921       *zCsr++ = zAppend[i];
922       if( zAppend[i]==quote ) *zCsr++ = quote;
923     }
924     *zCsr++ = quote;
925     *zCsr++ = '\0';
926     assert( (zCsr-zIn)==len );
927   }else{
928     memcpy(&zIn[nIn], zAppend, nAppend);
929     zIn[len-1] = '\0';
930   }
931 
932   return zIn;
933 }
934 
935 
936 /*
937 ** Execute a query statement that has a single result column.  Print
938 ** that result column on a line by itself with a semicolon terminator.
939 **
940 ** This is used, for example, to show the schema of the database by
941 ** querying the SQLITE_MASTER table.
942 */
943 static int run_table_dump_query(
944   struct callback_data *p, /* Query context */
945   const char *zSelect,     /* SELECT statement to extract content */
946   const char *zFirstRow    /* Print before first row, if not NULL */
947 ){
948   sqlite3_stmt *pSelect;
949   int rc;
950   rc = sqlite3_prepare(p->db, zSelect, -1, &pSelect, 0);
951   if( rc!=SQLITE_OK || !pSelect ){
952     fprintf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, sqlite3_errmsg(p->db));
953     p->nErr++;
954     return rc;
955   }
956   rc = sqlite3_step(pSelect);
957   while( rc==SQLITE_ROW ){
958     if( zFirstRow ){
959       fprintf(p->out, "%s", zFirstRow);
960       zFirstRow = 0;
961     }
962     fprintf(p->out, "%s;\n", sqlite3_column_text(pSelect, 0));
963     rc = sqlite3_step(pSelect);
964   }
965   rc = sqlite3_finalize(pSelect);
966   if( rc!=SQLITE_OK ){
967     fprintf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, sqlite3_errmsg(p->db));
968     p->nErr++;
969   }
970   return rc;
971 }
972 
973 /*
974 ** Allocate space and save off current error string.
975 */
976 static char *save_err_msg(
977   sqlite3 *db            /* Database to query */
978 ){
979   int nErrMsg = 1+strlen30(sqlite3_errmsg(db));
980   char *zErrMsg = sqlite3_malloc(nErrMsg);
981   if( zErrMsg ){
982     memcpy(zErrMsg, sqlite3_errmsg(db), nErrMsg);
983   }
984   return zErrMsg;
985 }
986 
987 /*
988 ** Display memory stats.
989 */
990 static int display_stats(
991   sqlite3 *db,                /* Database to query */
992   struct callback_data *pArg, /* Pointer to struct callback_data */
993   int bReset                  /* True to reset the stats */
994 ){
995   int iCur;
996   int iHiwtr;
997 
998   if( pArg && pArg->out ){
999 
1000     iHiwtr = iCur = -1;
1001     sqlite3_status(SQLITE_STATUS_MEMORY_USED, &iCur, &iHiwtr, bReset);
1002     fprintf(pArg->out, "Memory Used:                         %d (max %d) bytes\n", iCur, iHiwtr);
1003     iHiwtr = iCur = -1;
1004     sqlite3_status(SQLITE_STATUS_MALLOC_COUNT, &iCur, &iHiwtr, bReset);
1005     fprintf(pArg->out, "Number of Outstanding Allocations:   %d (max %d)\n", iCur, iHiwtr);
1006 /*
1007 ** Not currently used by the CLI.
1008 **    iHiwtr = iCur = -1;
1009 **    sqlite3_status(SQLITE_STATUS_PAGECACHE_USED, &iCur, &iHiwtr, bReset);
1010 **    fprintf(pArg->out, "Number of Pcache Pages Used:         %d (max %d) pages\n", iCur, iHiwtr);
1011 */
1012     iHiwtr = iCur = -1;
1013     sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &iCur, &iHiwtr, bReset);
1014     fprintf(pArg->out, "Number of Pcache Overflow Bytes:     %d (max %d) bytes\n", iCur, iHiwtr);
1015 /*
1016 ** Not currently used by the CLI.
1017 **    iHiwtr = iCur = -1;
1018 **    sqlite3_status(SQLITE_STATUS_SCRATCH_USED, &iCur, &iHiwtr, bReset);
1019 **    fprintf(pArg->out, "Number of Scratch Allocations Used:  %d (max %d)\n", iCur, iHiwtr);
1020 */
1021     iHiwtr = iCur = -1;
1022     sqlite3_status(SQLITE_STATUS_SCRATCH_OVERFLOW, &iCur, &iHiwtr, bReset);
1023     fprintf(pArg->out, "Number of Scratch Overflow Bytes:    %d (max %d) bytes\n", iCur, iHiwtr);
1024     iHiwtr = iCur = -1;
1025     sqlite3_status(SQLITE_STATUS_MALLOC_SIZE, &iCur, &iHiwtr, bReset);
1026     fprintf(pArg->out, "Largest Allocation:                  %d bytes\n", iHiwtr);
1027     iHiwtr = iCur = -1;
1028     sqlite3_status(SQLITE_STATUS_PAGECACHE_SIZE, &iCur, &iHiwtr, bReset);
1029     fprintf(pArg->out, "Largest Pcache Allocation:           %d bytes\n", iHiwtr);
1030     iHiwtr = iCur = -1;
1031     sqlite3_status(SQLITE_STATUS_SCRATCH_SIZE, &iCur, &iHiwtr, bReset);
1032     fprintf(pArg->out, "Largest Scratch Allocation:          %d bytes\n", iHiwtr);
1033 #ifdef YYTRACKMAXSTACKDEPTH
1034     iHiwtr = iCur = -1;
1035     sqlite3_status(SQLITE_STATUS_PARSER_STACK, &iCur, &iHiwtr, bReset);
1036     fprintf(pArg->out, "Deepest Parser Stack:                %d (max %d)\n", iCur, iHiwtr);
1037 #endif
1038   }
1039 
1040   if( pArg && pArg->out && db ){
1041     iHiwtr = iCur = -1;
1042     sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_USED, &iCur, &iHiwtr, bReset);
1043     fprintf(pArg->out, "Lookaside Slots Used:                %d (max %d)\n", iCur, iHiwtr);
1044     sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_HIT, &iCur, &iHiwtr, bReset);
1045     fprintf(pArg->out, "Successful lookaside attempts:       %d\n", iHiwtr);
1046     sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE, &iCur, &iHiwtr, bReset);
1047     fprintf(pArg->out, "Lookaside failures due to size:      %d\n", iHiwtr);
1048     sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL, &iCur, &iHiwtr, bReset);
1049     fprintf(pArg->out, "Lookaside failures due to OOM:       %d\n", iHiwtr);
1050     iHiwtr = iCur = -1;
1051     sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_USED, &iCur, &iHiwtr, bReset);
1052     fprintf(pArg->out, "Pager Heap Usage:                    %d bytes\n", iCur);    iHiwtr = iCur = -1;
1053     sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_HIT, &iCur, &iHiwtr, 1);
1054     fprintf(pArg->out, "Page cache hits:                     %d\n", iCur);
1055     iHiwtr = iCur = -1;
1056     sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_MISS, &iCur, &iHiwtr, 1);
1057     fprintf(pArg->out, "Page cache misses:                   %d\n", iCur);
1058     iHiwtr = iCur = -1;
1059     sqlite3_db_status(db, SQLITE_DBSTATUS_SCHEMA_USED, &iCur, &iHiwtr, bReset);
1060     fprintf(pArg->out, "Schema Heap Usage:                   %d bytes\n", iCur);
1061     iHiwtr = iCur = -1;
1062     sqlite3_db_status(db, SQLITE_DBSTATUS_STMT_USED, &iCur, &iHiwtr, bReset);
1063     fprintf(pArg->out, "Statement Heap/Lookaside Usage:      %d bytes\n", iCur);
1064   }
1065 
1066   if( pArg && pArg->out && db && pArg->pStmt ){
1067     iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, bReset);
1068     fprintf(pArg->out, "Fullscan Steps:                      %d\n", iCur);
1069     iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_SORT, bReset);
1070     fprintf(pArg->out, "Sort Operations:                     %d\n", iCur);
1071     iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_AUTOINDEX, bReset);
1072     fprintf(pArg->out, "Autoindex Inserts:                   %d\n", iCur);
1073   }
1074 
1075   return 0;
1076 }
1077 
1078 /*
1079 ** Execute a statement or set of statements.  Print
1080 ** any result rows/columns depending on the current mode
1081 ** set via the supplied callback.
1082 **
1083 ** This is very similar to SQLite's built-in sqlite3_exec()
1084 ** function except it takes a slightly different callback
1085 ** and callback data argument.
1086 */
1087 static int shell_exec(
1088   sqlite3 *db,                                /* An open database */
1089   const char *zSql,                           /* SQL to be evaluated */
1090   int (*xCallback)(void*,int,char**,char**,int*),   /* Callback function */
1091                                               /* (not the same as sqlite3_exec) */
1092   struct callback_data *pArg,                 /* Pointer to struct callback_data */
1093   char **pzErrMsg                             /* Error msg written here */
1094 ){
1095   sqlite3_stmt *pStmt = NULL;     /* Statement to execute. */
1096   int rc = SQLITE_OK;             /* Return Code */
1097   int rc2;
1098   const char *zLeftover;          /* Tail of unprocessed SQL */
1099 
1100   if( pzErrMsg ){
1101     *pzErrMsg = NULL;
1102   }
1103 
1104   while( zSql[0] && (SQLITE_OK == rc) ){
1105     rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zLeftover);
1106     if( SQLITE_OK != rc ){
1107       if( pzErrMsg ){
1108         *pzErrMsg = save_err_msg(db);
1109       }
1110     }else{
1111       if( !pStmt ){
1112         /* this happens for a comment or white-space */
1113         zSql = zLeftover;
1114         while( IsSpace(zSql[0]) ) zSql++;
1115         continue;
1116       }
1117 
1118       /* save off the prepared statment handle and reset row count */
1119       if( pArg ){
1120         pArg->pStmt = pStmt;
1121         pArg->cnt = 0;
1122       }
1123 
1124       /* echo the sql statement if echo on */
1125       if( pArg && pArg->echoOn ){
1126         const char *zStmtSql = sqlite3_sql(pStmt);
1127         fprintf(pArg->out, "%s\n", zStmtSql ? zStmtSql : zSql);
1128       }
1129 
1130       /* Output TESTCTRL_EXPLAIN text of requested */
1131       if( pArg && pArg->mode==MODE_Explain ){
1132         const char *zExplain = 0;
1133         sqlite3_test_control(SQLITE_TESTCTRL_EXPLAIN_STMT, pStmt, &zExplain);
1134         if( zExplain && zExplain[0] ){
1135           fprintf(pArg->out, "%s", zExplain);
1136         }
1137       }
1138 
1139       /* perform the first step.  this will tell us if we
1140       ** have a result set or not and how wide it is.
1141       */
1142       rc = sqlite3_step(pStmt);
1143       /* if we have a result set... */
1144       if( SQLITE_ROW == rc ){
1145         /* if we have a callback... */
1146         if( xCallback ){
1147           /* allocate space for col name ptr, value ptr, and type */
1148           int nCol = sqlite3_column_count(pStmt);
1149           void *pData = sqlite3_malloc(3*nCol*sizeof(const char*) + 1);
1150           if( !pData ){
1151             rc = SQLITE_NOMEM;
1152           }else{
1153             char **azCols = (char **)pData;      /* Names of result columns */
1154             char **azVals = &azCols[nCol];       /* Results */
1155             int *aiTypes = (int *)&azVals[nCol]; /* Result types */
1156             int i;
1157             assert(sizeof(int) <= sizeof(char *));
1158             /* save off ptrs to column names */
1159             for(i=0; i<nCol; i++){
1160               azCols[i] = (char *)sqlite3_column_name(pStmt, i);
1161             }
1162             do{
1163               /* extract the data and data types */
1164               for(i=0; i<nCol; i++){
1165                 azVals[i] = (char *)sqlite3_column_text(pStmt, i);
1166                 aiTypes[i] = sqlite3_column_type(pStmt, i);
1167                 if( !azVals[i] && (aiTypes[i]!=SQLITE_NULL) ){
1168                   rc = SQLITE_NOMEM;
1169                   break; /* from for */
1170                 }
1171               } /* end for */
1172 
1173               /* if data and types extracted successfully... */
1174               if( SQLITE_ROW == rc ){
1175                 /* call the supplied callback with the result row data */
1176                 if( xCallback(pArg, nCol, azVals, azCols, aiTypes) ){
1177                   rc = SQLITE_ABORT;
1178                 }else{
1179                   rc = sqlite3_step(pStmt);
1180                 }
1181               }
1182             } while( SQLITE_ROW == rc );
1183             sqlite3_free(pData);
1184           }
1185         }else{
1186           do{
1187             rc = sqlite3_step(pStmt);
1188           } while( rc == SQLITE_ROW );
1189         }
1190       }
1191 
1192       /* print usage stats if stats on */
1193       if( pArg && pArg->statsOn ){
1194         display_stats(db, pArg, 0);
1195       }
1196 
1197       /* Finalize the statement just executed. If this fails, save a
1198       ** copy of the error message. Otherwise, set zSql to point to the
1199       ** next statement to execute. */
1200       rc2 = sqlite3_finalize(pStmt);
1201       if( rc!=SQLITE_NOMEM ) rc = rc2;
1202       if( rc==SQLITE_OK ){
1203         zSql = zLeftover;
1204         while( IsSpace(zSql[0]) ) zSql++;
1205       }else if( pzErrMsg ){
1206         *pzErrMsg = save_err_msg(db);
1207       }
1208 
1209       /* clear saved stmt handle */
1210       if( pArg ){
1211         pArg->pStmt = NULL;
1212       }
1213     }
1214   } /* end while */
1215 
1216   return rc;
1217 }
1218 
1219 
1220 /*
1221 ** This is a different callback routine used for dumping the database.
1222 ** Each row received by this callback consists of a table name,
1223 ** the table type ("index" or "table") and SQL to create the table.
1224 ** This routine should print text sufficient to recreate the table.
1225 */
1226 static int dump_callback(void *pArg, int nArg, char **azArg, char **azCol){
1227   int rc;
1228   const char *zTable;
1229   const char *zType;
1230   const char *zSql;
1231   const char *zPrepStmt = 0;
1232   struct callback_data *p = (struct callback_data *)pArg;
1233 
1234   UNUSED_PARAMETER(azCol);
1235   if( nArg!=3 ) return 1;
1236   zTable = azArg[0];
1237   zType = azArg[1];
1238   zSql = azArg[2];
1239 
1240   if( strcmp(zTable, "sqlite_sequence")==0 ){
1241     zPrepStmt = "DELETE FROM sqlite_sequence;\n";
1242   }else if( strcmp(zTable, "sqlite_stat1")==0 ){
1243     fprintf(p->out, "ANALYZE sqlite_master;\n");
1244   }else if( strncmp(zTable, "sqlite_", 7)==0 ){
1245     return 0;
1246   }else if( strncmp(zSql, "CREATE VIRTUAL TABLE", 20)==0 ){
1247     char *zIns;
1248     if( !p->writableSchema ){
1249       fprintf(p->out, "PRAGMA writable_schema=ON;\n");
1250       p->writableSchema = 1;
1251     }
1252     zIns = sqlite3_mprintf(
1253        "INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"
1254        "VALUES('table','%q','%q',0,'%q');",
1255        zTable, zTable, zSql);
1256     fprintf(p->out, "%s\n", zIns);
1257     sqlite3_free(zIns);
1258     return 0;
1259   }else{
1260     fprintf(p->out, "%s;\n", zSql);
1261   }
1262 
1263   if( strcmp(zType, "table")==0 ){
1264     sqlite3_stmt *pTableInfo = 0;
1265     char *zSelect = 0;
1266     char *zTableInfo = 0;
1267     char *zTmp = 0;
1268     int nRow = 0;
1269 
1270     zTableInfo = appendText(zTableInfo, "PRAGMA table_info(", 0);
1271     zTableInfo = appendText(zTableInfo, zTable, '"');
1272     zTableInfo = appendText(zTableInfo, ");", 0);
1273 
1274     rc = sqlite3_prepare(p->db, zTableInfo, -1, &pTableInfo, 0);
1275     free(zTableInfo);
1276     if( rc!=SQLITE_OK || !pTableInfo ){
1277       return 1;
1278     }
1279 
1280     zSelect = appendText(zSelect, "SELECT 'INSERT INTO ' || ", 0);
1281     zTmp = appendText(zTmp, zTable, '"');
1282     if( zTmp ){
1283       zSelect = appendText(zSelect, zTmp, '\'');
1284     }
1285     zSelect = appendText(zSelect, " || ' VALUES(' || ", 0);
1286     rc = sqlite3_step(pTableInfo);
1287     while( rc==SQLITE_ROW ){
1288       const char *zText = (const char *)sqlite3_column_text(pTableInfo, 1);
1289       zSelect = appendText(zSelect, "quote(", 0);
1290       zSelect = appendText(zSelect, zText, '"');
1291       rc = sqlite3_step(pTableInfo);
1292       if( rc==SQLITE_ROW ){
1293         zSelect = appendText(zSelect, ") || ',' || ", 0);
1294       }else{
1295         zSelect = appendText(zSelect, ") ", 0);
1296       }
1297       nRow++;
1298     }
1299     rc = sqlite3_finalize(pTableInfo);
1300     if( rc!=SQLITE_OK || nRow==0 ){
1301       free(zSelect);
1302       return 1;
1303     }
1304     zSelect = appendText(zSelect, "|| ')' FROM  ", 0);
1305     zSelect = appendText(zSelect, zTable, '"');
1306 
1307     rc = run_table_dump_query(p, zSelect, zPrepStmt);
1308     if( rc==SQLITE_CORRUPT ){
1309       zSelect = appendText(zSelect, " ORDER BY rowid DESC", 0);
1310       run_table_dump_query(p, zSelect, 0);
1311     }
1312     if( zSelect ) free(zSelect);
1313   }
1314   return 0;
1315 }
1316 
1317 /*
1318 ** Run zQuery.  Use dump_callback() as the callback routine so that
1319 ** the contents of the query are output as SQL statements.
1320 **
1321 ** If we get a SQLITE_CORRUPT error, rerun the query after appending
1322 ** "ORDER BY rowid DESC" to the end.
1323 */
1324 static int run_schema_dump_query(
1325   struct callback_data *p,
1326   const char *zQuery
1327 ){
1328   int rc;
1329   char *zErr = 0;
1330   rc = sqlite3_exec(p->db, zQuery, dump_callback, p, &zErr);
1331   if( rc==SQLITE_CORRUPT ){
1332     char *zQ2;
1333     int len = strlen30(zQuery);
1334     fprintf(p->out, "/****** CORRUPTION ERROR *******/\n");
1335     if( zErr ){
1336       fprintf(p->out, "/****** %s ******/\n", zErr);
1337       sqlite3_free(zErr);
1338       zErr = 0;
1339     }
1340     zQ2 = malloc( len+100 );
1341     if( zQ2==0 ) return rc;
1342     sqlite3_snprintf(sizeof(zQ2), zQ2, "%s ORDER BY rowid DESC", zQuery);
1343     rc = sqlite3_exec(p->db, zQ2, dump_callback, p, &zErr);
1344     if( rc ){
1345       fprintf(p->out, "/****** ERROR: %s ******/\n", zErr);
1346     }else{
1347       rc = SQLITE_CORRUPT;
1348     }
1349     sqlite3_free(zErr);
1350     free(zQ2);
1351   }
1352   return rc;
1353 }
1354 
1355 /*
1356 ** Text of a help message
1357 */
1358 static char zHelp[] =
1359   ".backup ?DB? FILE      Backup DB (default \"main\") to FILE\n"
1360   ".bail ON|OFF           Stop after hitting an error.  Default OFF\n"
1361   ".databases             List names and files of attached databases\n"
1362   ".dump ?TABLE? ...      Dump the database in an SQL text format\n"
1363   "                         If TABLE specified, only dump tables matching\n"
1364   "                         LIKE pattern TABLE.\n"
1365   ".echo ON|OFF           Turn command echo on or off\n"
1366   ".exit                  Exit this program\n"
1367   ".explain ?ON|OFF?      Turn output mode suitable for EXPLAIN on or off.\n"
1368   "                         With no args, it turns EXPLAIN on.\n"
1369   ".header(s) ON|OFF      Turn display of headers on or off\n"
1370   ".help                  Show this message\n"
1371   ".import FILE TABLE     Import data from FILE into TABLE\n"
1372   ".indices ?TABLE?       Show names of all indices\n"
1373   "                         If TABLE specified, only show indices for tables\n"
1374   "                         matching LIKE pattern TABLE.\n"
1375 #ifdef SQLITE_ENABLE_IOTRACE
1376   ".iotrace FILE          Enable I/O diagnostic logging to FILE\n"
1377 #endif
1378 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1379   ".load FILE ?ENTRY?     Load an extension library\n"
1380 #endif
1381   ".log FILE|off          Turn logging on or off.  FILE can be stderr/stdout\n"
1382   ".mode MODE ?TABLE?     Set output mode where MODE is one of:\n"
1383   "                         csv      Comma-separated values\n"
1384   "                         column   Left-aligned columns.  (See .width)\n"
1385   "                         html     HTML <table> code\n"
1386   "                         insert   SQL insert statements for TABLE\n"
1387   "                         line     One value per line\n"
1388   "                         list     Values delimited by .separator string\n"
1389   "                         tabs     Tab-separated values\n"
1390   "                         tcl      TCL list elements\n"
1391   ".nullvalue STRING      Print STRING in place of NULL values\n"
1392   ".output FILENAME       Send output to FILENAME\n"
1393   ".output stdout         Send output to the screen\n"
1394   ".prompt MAIN CONTINUE  Replace the standard prompts\n"
1395   ".quit                  Exit this program\n"
1396   ".read FILENAME         Execute SQL in FILENAME\n"
1397   ".restore ?DB? FILE     Restore content of DB (default \"main\") from FILE\n"
1398   ".schema ?TABLE?        Show the CREATE statements\n"
1399   "                         If TABLE specified, only show tables matching\n"
1400   "                         LIKE pattern TABLE.\n"
1401   ".separator STRING      Change separator used by output mode and .import\n"
1402   ".show                  Show the current values for various settings\n"
1403   ".stats ON|OFF          Turn stats on or off\n"
1404   ".tables ?TABLE?        List names of tables\n"
1405   "                         If TABLE specified, only list tables matching\n"
1406   "                         LIKE pattern TABLE.\n"
1407   ".timeout MS            Try opening locked tables for MS milliseconds\n"
1408   ".vfsname ?AUX?         Print the name of the VFS stack\n"
1409   ".width NUM1 NUM2 ...   Set column widths for \"column\" mode\n"
1410 ;
1411 
1412 static char zTimerHelp[] =
1413   ".timer ON|OFF          Turn the CPU timer measurement on or off\n"
1414 ;
1415 
1416 /* Forward reference */
1417 static int process_input(struct callback_data *p, FILE *in);
1418 
1419 /*
1420 ** Make sure the database is open.  If it is not, then open it.  If
1421 ** the database fails to open, print an error message and exit.
1422 */
1423 static void open_db(struct callback_data *p){
1424   if( p->db==0 ){
1425     sqlite3_open(p->zDbFilename, &p->db);
1426     db = p->db;
1427     if( db && sqlite3_errcode(db)==SQLITE_OK ){
1428       sqlite3_create_function(db, "shellstatic", 0, SQLITE_UTF8, 0,
1429           shellstaticFunc, 0, 0);
1430     }
1431     if( db==0 || SQLITE_OK!=sqlite3_errcode(db) ){
1432       fprintf(stderr,"Error: unable to open database \"%s\": %s\n",
1433           p->zDbFilename, sqlite3_errmsg(db));
1434       exit(1);
1435     }
1436 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1437     sqlite3_enable_load_extension(p->db, 1);
1438 #endif
1439   }
1440 }
1441 
1442 /*
1443 ** Do C-language style dequoting.
1444 **
1445 **    \t    -> tab
1446 **    \n    -> newline
1447 **    \r    -> carriage return
1448 **    \NNN  -> ascii character NNN in octal
1449 **    \\    -> backslash
1450 */
1451 static void resolve_backslashes(char *z){
1452   int i, j;
1453   char c;
1454   for(i=j=0; (c = z[i])!=0; i++, j++){
1455     if( c=='\\' ){
1456       c = z[++i];
1457       if( c=='n' ){
1458         c = '\n';
1459       }else if( c=='t' ){
1460         c = '\t';
1461       }else if( c=='r' ){
1462         c = '\r';
1463       }else if( c>='0' && c<='7' ){
1464         c -= '0';
1465         if( z[i+1]>='0' && z[i+1]<='7' ){
1466           i++;
1467           c = (c<<3) + z[i] - '0';
1468           if( z[i+1]>='0' && z[i+1]<='7' ){
1469             i++;
1470             c = (c<<3) + z[i] - '0';
1471           }
1472         }
1473       }
1474     }
1475     z[j] = c;
1476   }
1477   z[j] = 0;
1478 }
1479 
1480 /*
1481 ** Interpret zArg as a boolean value.  Return either 0 or 1.
1482 */
1483 static int booleanValue(char *zArg){
1484   int val = atoi(zArg);
1485   int j;
1486   for(j=0; zArg[j]; j++){
1487     zArg[j] = ToLower(zArg[j]);
1488   }
1489   if( strcmp(zArg,"on")==0 ){
1490     val = 1;
1491   }else if( strcmp(zArg,"yes")==0 ){
1492     val = 1;
1493   }
1494   return val;
1495 }
1496 
1497 /*
1498 ** If an input line begins with "." then invoke this routine to
1499 ** process that line.
1500 **
1501 ** Return 1 on error, 2 to exit, and 0 otherwise.
1502 */
1503 static int do_meta_command(char *zLine, struct callback_data *p){
1504   int i = 1;
1505   int nArg = 0;
1506   int n, c;
1507   int rc = 0;
1508   char *azArg[50];
1509 
1510   /* Parse the input line into tokens.
1511   */
1512   while( zLine[i] && nArg<ArraySize(azArg) ){
1513     while( IsSpace(zLine[i]) ){ i++; }
1514     if( zLine[i]==0 ) break;
1515     if( zLine[i]=='\'' || zLine[i]=='"' ){
1516       int delim = zLine[i++];
1517       azArg[nArg++] = &zLine[i];
1518       while( zLine[i] && zLine[i]!=delim ){ i++; }
1519       if( zLine[i]==delim ){
1520         zLine[i++] = 0;
1521       }
1522       if( delim=='"' ) resolve_backslashes(azArg[nArg-1]);
1523     }else{
1524       azArg[nArg++] = &zLine[i];
1525       while( zLine[i] && !IsSpace(zLine[i]) ){ i++; }
1526       if( zLine[i] ) zLine[i++] = 0;
1527       resolve_backslashes(azArg[nArg-1]);
1528     }
1529   }
1530 
1531   /* Process the input line.
1532   */
1533   if( nArg==0 ) return 0; /* no tokens, no error */
1534   n = strlen30(azArg[0]);
1535   c = azArg[0][0];
1536   if( c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0 && nArg>1 && nArg<4){
1537     const char *zDestFile;
1538     const char *zDb;
1539     sqlite3 *pDest;
1540     sqlite3_backup *pBackup;
1541     if( nArg==2 ){
1542       zDestFile = azArg[1];
1543       zDb = "main";
1544     }else{
1545       zDestFile = azArg[2];
1546       zDb = azArg[1];
1547     }
1548     rc = sqlite3_open(zDestFile, &pDest);
1549     if( rc!=SQLITE_OK ){
1550       fprintf(stderr, "Error: cannot open \"%s\"\n", zDestFile);
1551       sqlite3_close(pDest);
1552       return 1;
1553     }
1554     open_db(p);
1555     pBackup = sqlite3_backup_init(pDest, "main", p->db, zDb);
1556     if( pBackup==0 ){
1557       fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
1558       sqlite3_close(pDest);
1559       return 1;
1560     }
1561     while(  (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK ){}
1562     sqlite3_backup_finish(pBackup);
1563     if( rc==SQLITE_DONE ){
1564       rc = 0;
1565     }else{
1566       fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
1567       rc = 1;
1568     }
1569     sqlite3_close(pDest);
1570   }else
1571 
1572   if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 && nArg>1 && nArg<3 ){
1573     bail_on_error = booleanValue(azArg[1]);
1574   }else
1575 
1576   if( c=='d' && n>1 && strncmp(azArg[0], "databases", n)==0 && nArg==1 ){
1577     struct callback_data data;
1578     char *zErrMsg = 0;
1579     open_db(p);
1580     memcpy(&data, p, sizeof(data));
1581     data.showHeader = 1;
1582     data.mode = MODE_Column;
1583     data.colWidth[0] = 3;
1584     data.colWidth[1] = 15;
1585     data.colWidth[2] = 58;
1586     data.cnt = 0;
1587     sqlite3_exec(p->db, "PRAGMA database_list; ", callback, &data, &zErrMsg);
1588     if( zErrMsg ){
1589       fprintf(stderr,"Error: %s\n", zErrMsg);
1590       sqlite3_free(zErrMsg);
1591       rc = 1;
1592     }
1593   }else
1594 
1595   if( c=='d' && strncmp(azArg[0], "dump", n)==0 && nArg<3 ){
1596     open_db(p);
1597     /* When playing back a "dump", the content might appear in an order
1598     ** which causes immediate foreign key constraints to be violated.
1599     ** So disable foreign-key constraint enforcement to prevent problems. */
1600     fprintf(p->out, "PRAGMA foreign_keys=OFF;\n");
1601     fprintf(p->out, "BEGIN TRANSACTION;\n");
1602     p->writableSchema = 0;
1603     sqlite3_exec(p->db, "SAVEPOINT dump; PRAGMA writable_schema=ON", 0, 0, 0);
1604     p->nErr = 0;
1605     if( nArg==1 ){
1606       run_schema_dump_query(p,
1607         "SELECT name, type, sql FROM sqlite_master "
1608         "WHERE sql NOT NULL AND type=='table' AND name!='sqlite_sequence'"
1609       );
1610       run_schema_dump_query(p,
1611         "SELECT name, type, sql FROM sqlite_master "
1612         "WHERE name=='sqlite_sequence'"
1613       );
1614       run_table_dump_query(p,
1615         "SELECT sql FROM sqlite_master "
1616         "WHERE sql NOT NULL AND type IN ('index','trigger','view')", 0
1617       );
1618     }else{
1619       int i;
1620       for(i=1; i<nArg; i++){
1621         zShellStatic = azArg[i];
1622         run_schema_dump_query(p,
1623           "SELECT name, type, sql FROM sqlite_master "
1624           "WHERE tbl_name LIKE shellstatic() AND type=='table'"
1625           "  AND sql NOT NULL");
1626         run_table_dump_query(p,
1627           "SELECT sql FROM sqlite_master "
1628           "WHERE sql NOT NULL"
1629           "  AND type IN ('index','trigger','view')"
1630           "  AND tbl_name LIKE shellstatic()", 0
1631         );
1632         zShellStatic = 0;
1633       }
1634     }
1635     if( p->writableSchema ){
1636       fprintf(p->out, "PRAGMA writable_schema=OFF;\n");
1637       p->writableSchema = 0;
1638     }
1639     sqlite3_exec(p->db, "PRAGMA writable_schema=OFF;", 0, 0, 0);
1640     sqlite3_exec(p->db, "RELEASE dump;", 0, 0, 0);
1641     fprintf(p->out, p->nErr ? "ROLLBACK; -- due to errors\n" : "COMMIT;\n");
1642   }else
1643 
1644   if( c=='e' && strncmp(azArg[0], "echo", n)==0 && nArg>1 && nArg<3 ){
1645     p->echoOn = booleanValue(azArg[1]);
1646   }else
1647 
1648   if( c=='e' && strncmp(azArg[0], "exit", n)==0  && nArg==1 ){
1649     rc = 2;
1650   }else
1651 
1652   if( c=='e' && strncmp(azArg[0], "explain", n)==0 && nArg<3 ){
1653     int val = nArg>=2 ? booleanValue(azArg[1]) : 1;
1654     if(val == 1) {
1655       if(!p->explainPrev.valid) {
1656         p->explainPrev.valid = 1;
1657         p->explainPrev.mode = p->mode;
1658         p->explainPrev.showHeader = p->showHeader;
1659         memcpy(p->explainPrev.colWidth,p->colWidth,sizeof(p->colWidth));
1660       }
1661       /* We could put this code under the !p->explainValid
1662       ** condition so that it does not execute if we are already in
1663       ** explain mode. However, always executing it allows us an easy
1664       ** was to reset to explain mode in case the user previously
1665       ** did an .explain followed by a .width, .mode or .header
1666       ** command.
1667       */
1668       p->mode = MODE_Explain;
1669       p->showHeader = 1;
1670       memset(p->colWidth,0,ArraySize(p->colWidth));
1671       p->colWidth[0] = 4;                  /* addr */
1672       p->colWidth[1] = 13;                 /* opcode */
1673       p->colWidth[2] = 4;                  /* P1 */
1674       p->colWidth[3] = 4;                  /* P2 */
1675       p->colWidth[4] = 4;                  /* P3 */
1676       p->colWidth[5] = 13;                 /* P4 */
1677       p->colWidth[6] = 2;                  /* P5 */
1678       p->colWidth[7] = 13;                  /* Comment */
1679     }else if (p->explainPrev.valid) {
1680       p->explainPrev.valid = 0;
1681       p->mode = p->explainPrev.mode;
1682       p->showHeader = p->explainPrev.showHeader;
1683       memcpy(p->colWidth,p->explainPrev.colWidth,sizeof(p->colWidth));
1684     }
1685   }else
1686 
1687   if( c=='h' && (strncmp(azArg[0], "header", n)==0 ||
1688                  strncmp(azArg[0], "headers", n)==0) && nArg>1 && nArg<3 ){
1689     p->showHeader = booleanValue(azArg[1]);
1690   }else
1691 
1692   if( c=='h' && strncmp(azArg[0], "help", n)==0 ){
1693     fprintf(stderr,"%s",zHelp);
1694     if( HAS_TIMER ){
1695       fprintf(stderr,"%s",zTimerHelp);
1696     }
1697   }else
1698 
1699   if( c=='i' && strncmp(azArg[0], "import", n)==0 && nArg==3 ){
1700     char *zTable = azArg[2];    /* Insert data into this table */
1701     char *zFile = azArg[1];     /* The file from which to extract data */
1702     sqlite3_stmt *pStmt = NULL; /* A statement */
1703     int nCol;                   /* Number of columns in the table */
1704     int nByte;                  /* Number of bytes in an SQL string */
1705     int i, j;                   /* Loop counters */
1706     int nSep;                   /* Number of bytes in p->separator[] */
1707     char *zSql;                 /* An SQL statement */
1708     char *zLine;                /* A single line of input from the file */
1709     char **azCol;               /* zLine[] broken up into columns */
1710     char *zCommit;              /* How to commit changes */
1711     FILE *in;                   /* The input file */
1712     int lineno = 0;             /* Line number of input file */
1713 
1714     open_db(p);
1715     nSep = strlen30(p->separator);
1716     if( nSep==0 ){
1717       fprintf(stderr, "Error: non-null separator required for import\n");
1718       return 1;
1719     }
1720     zSql = sqlite3_mprintf("SELECT * FROM %s", zTable);
1721     if( zSql==0 ){
1722       fprintf(stderr, "Error: out of memory\n");
1723       return 1;
1724     }
1725     nByte = strlen30(zSql);
1726     rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
1727     sqlite3_free(zSql);
1728     if( rc ){
1729       if (pStmt) sqlite3_finalize(pStmt);
1730       fprintf(stderr,"Error: %s\n", sqlite3_errmsg(db));
1731       return 1;
1732     }
1733     nCol = sqlite3_column_count(pStmt);
1734     sqlite3_finalize(pStmt);
1735     pStmt = 0;
1736     if( nCol==0 ) return 0; /* no columns, no error */
1737     zSql = malloc( nByte + 20 + nCol*2 );
1738     if( zSql==0 ){
1739       fprintf(stderr, "Error: out of memory\n");
1740       return 1;
1741     }
1742     sqlite3_snprintf(nByte+20, zSql, "INSERT INTO %s VALUES(?", zTable);
1743     j = strlen30(zSql);
1744     for(i=1; i<nCol; i++){
1745       zSql[j++] = ',';
1746       zSql[j++] = '?';
1747     }
1748     zSql[j++] = ')';
1749     zSql[j] = 0;
1750     rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
1751     free(zSql);
1752     if( rc ){
1753       fprintf(stderr, "Error: %s\n", sqlite3_errmsg(db));
1754       if (pStmt) sqlite3_finalize(pStmt);
1755       return 1;
1756     }
1757     in = fopen(zFile, "rb");
1758     if( in==0 ){
1759       fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
1760       sqlite3_finalize(pStmt);
1761       return 1;
1762     }
1763     azCol = malloc( sizeof(azCol[0])*(nCol+1) );
1764     if( azCol==0 ){
1765       fprintf(stderr, "Error: out of memory\n");
1766       fclose(in);
1767       sqlite3_finalize(pStmt);
1768       return 1;
1769     }
1770     sqlite3_exec(p->db, "BEGIN", 0, 0, 0);
1771     zCommit = "COMMIT";
1772     while( (zLine = local_getline(0, in))!=0 ){
1773       char *z;
1774       lineno++;
1775       azCol[0] = zLine;
1776       for(i=0, z=zLine; *z && *z!='\n' && *z!='\r'; z++){
1777         if( *z==p->separator[0] && strncmp(z, p->separator, nSep)==0 ){
1778           *z = 0;
1779           i++;
1780           if( i<nCol ){
1781             azCol[i] = &z[nSep];
1782             z += nSep-1;
1783           }
1784         }
1785       } /* end for */
1786       *z = 0;
1787       if( i+1!=nCol ){
1788         fprintf(stderr,
1789                 "Error: %s line %d: expected %d columns of data but found %d\n",
1790                 zFile, lineno, nCol, i+1);
1791         zCommit = "ROLLBACK";
1792         free(zLine);
1793         rc = 1;
1794         break; /* from while */
1795       }
1796       for(i=0; i<nCol; i++){
1797         sqlite3_bind_text(pStmt, i+1, azCol[i], -1, SQLITE_STATIC);
1798       }
1799       sqlite3_step(pStmt);
1800       rc = sqlite3_reset(pStmt);
1801       free(zLine);
1802       if( rc!=SQLITE_OK ){
1803         fprintf(stderr,"Error: %s\n", sqlite3_errmsg(db));
1804         zCommit = "ROLLBACK";
1805         rc = 1;
1806         break; /* from while */
1807       }
1808     } /* end while */
1809     free(azCol);
1810     fclose(in);
1811     sqlite3_finalize(pStmt);
1812     sqlite3_exec(p->db, zCommit, 0, 0, 0);
1813   }else
1814 
1815   if( c=='i' && strncmp(azArg[0], "indices", n)==0 && nArg<3 ){
1816     struct callback_data data;
1817     char *zErrMsg = 0;
1818     open_db(p);
1819     memcpy(&data, p, sizeof(data));
1820     data.showHeader = 0;
1821     data.mode = MODE_List;
1822     if( nArg==1 ){
1823       rc = sqlite3_exec(p->db,
1824         "SELECT name FROM sqlite_master "
1825         "WHERE type='index' AND name NOT LIKE 'sqlite_%' "
1826         "UNION ALL "
1827         "SELECT name FROM sqlite_temp_master "
1828         "WHERE type='index' "
1829         "ORDER BY 1",
1830         callback, &data, &zErrMsg
1831       );
1832     }else{
1833       zShellStatic = azArg[1];
1834       rc = sqlite3_exec(p->db,
1835         "SELECT name FROM sqlite_master "
1836         "WHERE type='index' AND tbl_name LIKE shellstatic() "
1837         "UNION ALL "
1838         "SELECT name FROM sqlite_temp_master "
1839         "WHERE type='index' AND tbl_name LIKE shellstatic() "
1840         "ORDER BY 1",
1841         callback, &data, &zErrMsg
1842       );
1843       zShellStatic = 0;
1844     }
1845     if( zErrMsg ){
1846       fprintf(stderr,"Error: %s\n", zErrMsg);
1847       sqlite3_free(zErrMsg);
1848       rc = 1;
1849     }else if( rc != SQLITE_OK ){
1850       fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n");
1851       rc = 1;
1852     }
1853   }else
1854 
1855 #ifdef SQLITE_ENABLE_IOTRACE
1856   if( c=='i' && strncmp(azArg[0], "iotrace", n)==0 ){
1857     extern void (*sqlite3IoTrace)(const char*, ...);
1858     if( iotrace && iotrace!=stdout ) fclose(iotrace);
1859     iotrace = 0;
1860     if( nArg<2 ){
1861       sqlite3IoTrace = 0;
1862     }else if( strcmp(azArg[1], "-")==0 ){
1863       sqlite3IoTrace = iotracePrintf;
1864       iotrace = stdout;
1865     }else{
1866       iotrace = fopen(azArg[1], "w");
1867       if( iotrace==0 ){
1868         fprintf(stderr, "Error: cannot open \"%s\"\n", azArg[1]);
1869         sqlite3IoTrace = 0;
1870         rc = 1;
1871       }else{
1872         sqlite3IoTrace = iotracePrintf;
1873       }
1874     }
1875   }else
1876 #endif
1877 
1878 #ifndef SQLITE_OMIT_LOAD_EXTENSION
1879   if( c=='l' && strncmp(azArg[0], "load", n)==0 && nArg>=2 ){
1880     const char *zFile, *zProc;
1881     char *zErrMsg = 0;
1882     zFile = azArg[1];
1883     zProc = nArg>=3 ? azArg[2] : 0;
1884     open_db(p);
1885     rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg);
1886     if( rc!=SQLITE_OK ){
1887       fprintf(stderr, "Error: %s\n", zErrMsg);
1888       sqlite3_free(zErrMsg);
1889       rc = 1;
1890     }
1891   }else
1892 #endif
1893 
1894   if( c=='l' && strncmp(azArg[0], "log", n)==0 && nArg>=2 ){
1895     const char *zFile = azArg[1];
1896     if( p->pLog && p->pLog!=stdout && p->pLog!=stderr ){
1897       fclose(p->pLog);
1898       p->pLog = 0;
1899     }
1900     if( strcmp(zFile,"stdout")==0 ){
1901       p->pLog = stdout;
1902     }else if( strcmp(zFile, "stderr")==0 ){
1903       p->pLog = stderr;
1904     }else if( strcmp(zFile, "off")==0 ){
1905       p->pLog = 0;
1906     }else{
1907       p->pLog = fopen(zFile, "w");
1908       if( p->pLog==0 ){
1909         fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
1910       }
1911     }
1912   }else
1913 
1914   if( c=='m' && strncmp(azArg[0], "mode", n)==0 && nArg==2 ){
1915     int n2 = strlen30(azArg[1]);
1916     if( (n2==4 && strncmp(azArg[1],"line",n2)==0)
1917         ||
1918         (n2==5 && strncmp(azArg[1],"lines",n2)==0) ){
1919       p->mode = MODE_Line;
1920     }else if( (n2==6 && strncmp(azArg[1],"column",n2)==0)
1921               ||
1922               (n2==7 && strncmp(azArg[1],"columns",n2)==0) ){
1923       p->mode = MODE_Column;
1924     }else if( n2==4 && strncmp(azArg[1],"list",n2)==0 ){
1925       p->mode = MODE_List;
1926     }else if( n2==4 && strncmp(azArg[1],"html",n2)==0 ){
1927       p->mode = MODE_Html;
1928     }else if( n2==3 && strncmp(azArg[1],"tcl",n2)==0 ){
1929       p->mode = MODE_Tcl;
1930     }else if( n2==3 && strncmp(azArg[1],"csv",n2)==0 ){
1931       p->mode = MODE_Csv;
1932       sqlite3_snprintf(sizeof(p->separator), p->separator, ",");
1933     }else if( n2==4 && strncmp(azArg[1],"tabs",n2)==0 ){
1934       p->mode = MODE_List;
1935       sqlite3_snprintf(sizeof(p->separator), p->separator, "\t");
1936     }else if( n2==6 && strncmp(azArg[1],"insert",n2)==0 ){
1937       p->mode = MODE_Insert;
1938       set_table_name(p, "table");
1939     }else {
1940       fprintf(stderr,"Error: mode should be one of: "
1941          "column csv html insert line list tabs tcl\n");
1942       rc = 1;
1943     }
1944   }else
1945 
1946   if( c=='m' && strncmp(azArg[0], "mode", n)==0 && nArg==3 ){
1947     int n2 = strlen30(azArg[1]);
1948     if( n2==6 && strncmp(azArg[1],"insert",n2)==0 ){
1949       p->mode = MODE_Insert;
1950       set_table_name(p, azArg[2]);
1951     }else {
1952       fprintf(stderr, "Error: invalid arguments: "
1953         " \"%s\". Enter \".help\" for help\n", azArg[2]);
1954       rc = 1;
1955     }
1956   }else
1957 
1958   if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 && nArg==2 ) {
1959     sqlite3_snprintf(sizeof(p->nullvalue), p->nullvalue,
1960                      "%.*s", (int)ArraySize(p->nullvalue)-1, azArg[1]);
1961   }else
1962 
1963   if( c=='o' && strncmp(azArg[0], "output", n)==0 && nArg==2 ){
1964     if( p->out!=stdout ){
1965       fclose(p->out);
1966     }
1967     if( strcmp(azArg[1],"stdout")==0 ){
1968       p->out = stdout;
1969       sqlite3_snprintf(sizeof(p->outfile), p->outfile, "stdout");
1970     }else{
1971       p->out = fopen(azArg[1], "wb");
1972       if( p->out==0 ){
1973         fprintf(stderr,"Error: cannot write to \"%s\"\n", azArg[1]);
1974         p->out = stdout;
1975         rc = 1;
1976       } else {
1977          sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", azArg[1]);
1978       }
1979     }
1980   }else
1981 
1982   if( c=='p' && strncmp(azArg[0], "prompt", n)==0 && (nArg==2 || nArg==3)){
1983     if( nArg >= 2) {
1984       strncpy(mainPrompt,azArg[1],(int)ArraySize(mainPrompt)-1);
1985     }
1986     if( nArg >= 3) {
1987       strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1);
1988     }
1989   }else
1990 
1991   if( c=='q' && strncmp(azArg[0], "quit", n)==0 && nArg==1 ){
1992     rc = 2;
1993   }else
1994 
1995   if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 && nArg==2 ){
1996     FILE *alt = fopen(azArg[1], "rb");
1997     if( alt==0 ){
1998       fprintf(stderr,"Error: cannot open \"%s\"\n", azArg[1]);
1999       rc = 1;
2000     }else{
2001       rc = process_input(p, alt);
2002       fclose(alt);
2003     }
2004   }else
2005 
2006   if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 && nArg>1 && nArg<4){
2007     const char *zSrcFile;
2008     const char *zDb;
2009     sqlite3 *pSrc;
2010     sqlite3_backup *pBackup;
2011     int nTimeout = 0;
2012 
2013     if( nArg==2 ){
2014       zSrcFile = azArg[1];
2015       zDb = "main";
2016     }else{
2017       zSrcFile = azArg[2];
2018       zDb = azArg[1];
2019     }
2020     rc = sqlite3_open(zSrcFile, &pSrc);
2021     if( rc!=SQLITE_OK ){
2022       fprintf(stderr, "Error: cannot open \"%s\"\n", zSrcFile);
2023       sqlite3_close(pSrc);
2024       return 1;
2025     }
2026     open_db(p);
2027     pBackup = sqlite3_backup_init(p->db, zDb, pSrc, "main");
2028     if( pBackup==0 ){
2029       fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
2030       sqlite3_close(pSrc);
2031       return 1;
2032     }
2033     while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK
2034           || rc==SQLITE_BUSY  ){
2035       if( rc==SQLITE_BUSY ){
2036         if( nTimeout++ >= 3 ) break;
2037         sqlite3_sleep(100);
2038       }
2039     }
2040     sqlite3_backup_finish(pBackup);
2041     if( rc==SQLITE_DONE ){
2042       rc = 0;
2043     }else if( rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){
2044       fprintf(stderr, "Error: source database is busy\n");
2045       rc = 1;
2046     }else{
2047       fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
2048       rc = 1;
2049     }
2050     sqlite3_close(pSrc);
2051   }else
2052 
2053   if( c=='s' && strncmp(azArg[0], "schema", n)==0 && nArg<3 ){
2054     struct callback_data data;
2055     char *zErrMsg = 0;
2056     open_db(p);
2057     memcpy(&data, p, sizeof(data));
2058     data.showHeader = 0;
2059     data.mode = MODE_Semi;
2060     if( nArg>1 ){
2061       int i;
2062       for(i=0; azArg[1][i]; i++) azArg[1][i] = ToLower(azArg[1][i]);
2063       if( strcmp(azArg[1],"sqlite_master")==0 ){
2064         char *new_argv[2], *new_colv[2];
2065         new_argv[0] = "CREATE TABLE sqlite_master (\n"
2066                       "  type text,\n"
2067                       "  name text,\n"
2068                       "  tbl_name text,\n"
2069                       "  rootpage integer,\n"
2070                       "  sql text\n"
2071                       ")";
2072         new_argv[1] = 0;
2073         new_colv[0] = "sql";
2074         new_colv[1] = 0;
2075         callback(&data, 1, new_argv, new_colv);
2076         rc = SQLITE_OK;
2077       }else if( strcmp(azArg[1],"sqlite_temp_master")==0 ){
2078         char *new_argv[2], *new_colv[2];
2079         new_argv[0] = "CREATE TEMP TABLE sqlite_temp_master (\n"
2080                       "  type text,\n"
2081                       "  name text,\n"
2082                       "  tbl_name text,\n"
2083                       "  rootpage integer,\n"
2084                       "  sql text\n"
2085                       ")";
2086         new_argv[1] = 0;
2087         new_colv[0] = "sql";
2088         new_colv[1] = 0;
2089         callback(&data, 1, new_argv, new_colv);
2090         rc = SQLITE_OK;
2091       }else{
2092         zShellStatic = azArg[1];
2093         rc = sqlite3_exec(p->db,
2094           "SELECT sql FROM "
2095           "  (SELECT sql sql, type type, tbl_name tbl_name, name name"
2096           "     FROM sqlite_master UNION ALL"
2097           "   SELECT sql, type, tbl_name, name FROM sqlite_temp_master) "
2098           "WHERE lower(tbl_name) LIKE shellstatic()"
2099           "  AND type!='meta' AND sql NOTNULL "
2100           "ORDER BY substr(type,2,1), name",
2101           callback, &data, &zErrMsg);
2102         zShellStatic = 0;
2103       }
2104     }else{
2105       rc = sqlite3_exec(p->db,
2106          "SELECT sql FROM "
2107          "  (SELECT sql sql, type type, tbl_name tbl_name, name name"
2108          "     FROM sqlite_master UNION ALL"
2109          "   SELECT sql, type, tbl_name, name FROM sqlite_temp_master) "
2110          "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'"
2111          "ORDER BY substr(type,2,1), name",
2112          callback, &data, &zErrMsg
2113       );
2114     }
2115     if( zErrMsg ){
2116       fprintf(stderr,"Error: %s\n", zErrMsg);
2117       sqlite3_free(zErrMsg);
2118       rc = 1;
2119     }else if( rc != SQLITE_OK ){
2120       fprintf(stderr,"Error: querying schema information\n");
2121       rc = 1;
2122     }else{
2123       rc = 0;
2124     }
2125   }else
2126 
2127   if( c=='s' && strncmp(azArg[0], "separator", n)==0 && nArg==2 ){
2128     sqlite3_snprintf(sizeof(p->separator), p->separator,
2129                      "%.*s", (int)sizeof(p->separator)-1, azArg[1]);
2130   }else
2131 
2132   if( c=='s' && strncmp(azArg[0], "show", n)==0 && nArg==1 ){
2133     int i;
2134     fprintf(p->out,"%9.9s: %s\n","echo", p->echoOn ? "on" : "off");
2135     fprintf(p->out,"%9.9s: %s\n","explain", p->explainPrev.valid ? "on" :"off");
2136     fprintf(p->out,"%9.9s: %s\n","headers", p->showHeader ? "on" : "off");
2137     fprintf(p->out,"%9.9s: %s\n","mode", modeDescr[p->mode]);
2138     fprintf(p->out,"%9.9s: ", "nullvalue");
2139       output_c_string(p->out, p->nullvalue);
2140       fprintf(p->out, "\n");
2141     fprintf(p->out,"%9.9s: %s\n","output",
2142             strlen30(p->outfile) ? p->outfile : "stdout");
2143     fprintf(p->out,"%9.9s: ", "separator");
2144       output_c_string(p->out, p->separator);
2145       fprintf(p->out, "\n");
2146     fprintf(p->out,"%9.9s: %s\n","stats", p->statsOn ? "on" : "off");
2147     fprintf(p->out,"%9.9s: ","width");
2148     for (i=0;i<(int)ArraySize(p->colWidth) && p->colWidth[i] != 0;i++) {
2149       fprintf(p->out,"%d ",p->colWidth[i]);
2150     }
2151     fprintf(p->out,"\n");
2152   }else
2153 
2154   if( c=='s' && strncmp(azArg[0], "stats", n)==0 && nArg>1 && nArg<3 ){
2155     p->statsOn = booleanValue(azArg[1]);
2156   }else
2157 
2158   if( c=='t' && n>1 && strncmp(azArg[0], "tables", n)==0 && nArg<3 ){
2159     char **azResult;
2160     int nRow;
2161     char *zErrMsg;
2162     open_db(p);
2163     if( nArg==1 ){
2164       rc = sqlite3_get_table(p->db,
2165         "SELECT name FROM sqlite_master "
2166         "WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%' "
2167         "UNION ALL "
2168         "SELECT name FROM sqlite_temp_master "
2169         "WHERE type IN ('table','view') "
2170         "ORDER BY 1",
2171         &azResult, &nRow, 0, &zErrMsg
2172       );
2173     }else{
2174       zShellStatic = azArg[1];
2175       rc = sqlite3_get_table(p->db,
2176         "SELECT name FROM sqlite_master "
2177         "WHERE type IN ('table','view') AND name LIKE shellstatic() "
2178         "UNION ALL "
2179         "SELECT name FROM sqlite_temp_master "
2180         "WHERE type IN ('table','view') AND name LIKE shellstatic() "
2181         "ORDER BY 1",
2182         &azResult, &nRow, 0, &zErrMsg
2183       );
2184       zShellStatic = 0;
2185     }
2186     if( zErrMsg ){
2187       fprintf(stderr,"Error: %s\n", zErrMsg);
2188       sqlite3_free(zErrMsg);
2189       rc = 1;
2190     }else if( rc != SQLITE_OK ){
2191       fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n");
2192       rc = 1;
2193     }else{
2194       int len, maxlen = 0;
2195       int i, j;
2196       int nPrintCol, nPrintRow;
2197       for(i=1; i<=nRow; i++){
2198         if( azResult[i]==0 ) continue;
2199         len = strlen30(azResult[i]);
2200         if( len>maxlen ) maxlen = len;
2201       }
2202       nPrintCol = 80/(maxlen+2);
2203       if( nPrintCol<1 ) nPrintCol = 1;
2204       nPrintRow = (nRow + nPrintCol - 1)/nPrintCol;
2205       for(i=0; i<nPrintRow; i++){
2206         for(j=i+1; j<=nRow; j+=nPrintRow){
2207           char *zSp = j<=nPrintRow ? "" : "  ";
2208           printf("%s%-*s", zSp, maxlen, azResult[j] ? azResult[j] : "");
2209         }
2210         printf("\n");
2211       }
2212     }
2213     sqlite3_free_table(azResult);
2214   }else
2215 
2216   if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 && nArg>=2 ){
2217     static const struct {
2218        const char *zCtrlName;   /* Name of a test-control option */
2219        int ctrlCode;            /* Integer code for that option */
2220     } aCtrl[] = {
2221       { "prng_save",             SQLITE_TESTCTRL_PRNG_SAVE              },
2222       { "prng_restore",          SQLITE_TESTCTRL_PRNG_RESTORE           },
2223       { "prng_reset",            SQLITE_TESTCTRL_PRNG_RESET             },
2224       { "bitvec_test",           SQLITE_TESTCTRL_BITVEC_TEST            },
2225       { "fault_install",         SQLITE_TESTCTRL_FAULT_INSTALL          },
2226       { "benign_malloc_hooks",   SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS    },
2227       { "pending_byte",          SQLITE_TESTCTRL_PENDING_BYTE           },
2228       { "assert",                SQLITE_TESTCTRL_ASSERT                 },
2229       { "always",                SQLITE_TESTCTRL_ALWAYS                 },
2230       { "reserve",               SQLITE_TESTCTRL_RESERVE                },
2231       { "optimizations",         SQLITE_TESTCTRL_OPTIMIZATIONS          },
2232       { "iskeyword",             SQLITE_TESTCTRL_ISKEYWORD              },
2233       { "scratchmalloc",         SQLITE_TESTCTRL_SCRATCHMALLOC          },
2234     };
2235     int testctrl = -1;
2236     int rc = 0;
2237     int i, n;
2238     open_db(p);
2239 
2240     /* convert testctrl text option to value. allow any unique prefix
2241     ** of the option name, or a numerical value. */
2242     n = strlen30(azArg[1]);
2243     for(i=0; i<(int)(sizeof(aCtrl)/sizeof(aCtrl[0])); i++){
2244       if( strncmp(azArg[1], aCtrl[i].zCtrlName, n)==0 ){
2245         if( testctrl<0 ){
2246           testctrl = aCtrl[i].ctrlCode;
2247         }else{
2248           fprintf(stderr, "ambiguous option name: \"%s\"\n", azArg[1]);
2249           testctrl = -1;
2250           break;
2251         }
2252       }
2253     }
2254     if( testctrl<0 ) testctrl = atoi(azArg[1]);
2255     if( (testctrl<SQLITE_TESTCTRL_FIRST) || (testctrl>SQLITE_TESTCTRL_LAST) ){
2256       fprintf(stderr,"Error: invalid testctrl option: %s\n", azArg[1]);
2257     }else{
2258       switch(testctrl){
2259 
2260         /* sqlite3_test_control(int, db, int) */
2261         case SQLITE_TESTCTRL_OPTIMIZATIONS:
2262         case SQLITE_TESTCTRL_RESERVE:
2263           if( nArg==3 ){
2264             int opt = (int)strtol(azArg[2], 0, 0);
2265             rc = sqlite3_test_control(testctrl, p->db, opt);
2266             printf("%d (0x%08x)\n", rc, rc);
2267           } else {
2268             fprintf(stderr,"Error: testctrl %s takes a single int option\n",
2269                     azArg[1]);
2270           }
2271           break;
2272 
2273         /* sqlite3_test_control(int) */
2274         case SQLITE_TESTCTRL_PRNG_SAVE:
2275         case SQLITE_TESTCTRL_PRNG_RESTORE:
2276         case SQLITE_TESTCTRL_PRNG_RESET:
2277           if( nArg==2 ){
2278             rc = sqlite3_test_control(testctrl);
2279             printf("%d (0x%08x)\n", rc, rc);
2280           } else {
2281             fprintf(stderr,"Error: testctrl %s takes no options\n", azArg[1]);
2282           }
2283           break;
2284 
2285         /* sqlite3_test_control(int, uint) */
2286         case SQLITE_TESTCTRL_PENDING_BYTE:
2287           if( nArg==3 ){
2288             unsigned int opt = (unsigned int)atoi(azArg[2]);
2289             rc = sqlite3_test_control(testctrl, opt);
2290             printf("%d (0x%08x)\n", rc, rc);
2291           } else {
2292             fprintf(stderr,"Error: testctrl %s takes a single unsigned"
2293                            " int option\n", azArg[1]);
2294           }
2295           break;
2296 
2297         /* sqlite3_test_control(int, int) */
2298         case SQLITE_TESTCTRL_ASSERT:
2299         case SQLITE_TESTCTRL_ALWAYS:
2300           if( nArg==3 ){
2301             int opt = atoi(azArg[2]);
2302             rc = sqlite3_test_control(testctrl, opt);
2303             printf("%d (0x%08x)\n", rc, rc);
2304           } else {
2305             fprintf(stderr,"Error: testctrl %s takes a single int option\n",
2306                             azArg[1]);
2307           }
2308           break;
2309 
2310         /* sqlite3_test_control(int, char *) */
2311 #ifdef SQLITE_N_KEYWORD
2312         case SQLITE_TESTCTRL_ISKEYWORD:
2313           if( nArg==3 ){
2314             const char *opt = azArg[2];
2315             rc = sqlite3_test_control(testctrl, opt);
2316             printf("%d (0x%08x)\n", rc, rc);
2317           } else {
2318             fprintf(stderr,"Error: testctrl %s takes a single char * option\n",
2319                             azArg[1]);
2320           }
2321           break;
2322 #endif
2323 
2324         case SQLITE_TESTCTRL_BITVEC_TEST:
2325         case SQLITE_TESTCTRL_FAULT_INSTALL:
2326         case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS:
2327         case SQLITE_TESTCTRL_SCRATCHMALLOC:
2328         default:
2329           fprintf(stderr,"Error: CLI support for testctrl %s not implemented\n",
2330                   azArg[1]);
2331           break;
2332       }
2333     }
2334   }else
2335 
2336   if( c=='t' && n>4 && strncmp(azArg[0], "timeout", n)==0 && nArg==2 ){
2337     open_db(p);
2338     sqlite3_busy_timeout(p->db, atoi(azArg[1]));
2339   }else
2340 
2341   if( HAS_TIMER && c=='t' && n>=5 && strncmp(azArg[0], "timer", n)==0
2342    && nArg==2
2343   ){
2344     enableTimer = booleanValue(azArg[1]);
2345   }else
2346 
2347   if( c=='v' && strncmp(azArg[0], "version", n)==0 ){
2348     printf("SQLite %s %s\n" /*extra-version-info*/,
2349         sqlite3_libversion(), sqlite3_sourceid());
2350   }else
2351 
2352   if( c=='v' && strncmp(azArg[0], "vfsname", n)==0 ){
2353     const char *zDbName = nArg==2 ? azArg[1] : "main";
2354     char *zVfsName = 0;
2355     if( p->db ){
2356       sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFSNAME, &zVfsName);
2357       if( zVfsName ){
2358         printf("%s\n", zVfsName);
2359         sqlite3_free(zVfsName);
2360       }
2361     }
2362   }else
2363 
2364   if( c=='w' && strncmp(azArg[0], "width", n)==0 && nArg>1 ){
2365     int j;
2366     assert( nArg<=ArraySize(azArg) );
2367     for(j=1; j<nArg && j<ArraySize(p->colWidth); j++){
2368       p->colWidth[j-1] = atoi(azArg[j]);
2369     }
2370   }else
2371 
2372   {
2373     fprintf(stderr, "Error: unknown command or invalid arguments: "
2374       " \"%s\". Enter \".help\" for help\n", azArg[0]);
2375     rc = 1;
2376   }
2377 
2378   return rc;
2379 }
2380 
2381 /*
2382 ** Return TRUE if a semicolon occurs anywhere in the first N characters
2383 ** of string z[].
2384 */
2385 static int _contains_semicolon(const char *z, int N){
2386   int i;
2387   for(i=0; i<N; i++){  if( z[i]==';' ) return 1; }
2388   return 0;
2389 }
2390 
2391 /*
2392 ** Test to see if a line consists entirely of whitespace.
2393 */
2394 static int _all_whitespace(const char *z){
2395   for(; *z; z++){
2396     if( IsSpace(z[0]) ) continue;
2397     if( *z=='/' && z[1]=='*' ){
2398       z += 2;
2399       while( *z && (*z!='*' || z[1]!='/') ){ z++; }
2400       if( *z==0 ) return 0;
2401       z++;
2402       continue;
2403     }
2404     if( *z=='-' && z[1]=='-' ){
2405       z += 2;
2406       while( *z && *z!='\n' ){ z++; }
2407       if( *z==0 ) return 1;
2408       continue;
2409     }
2410     return 0;
2411   }
2412   return 1;
2413 }
2414 
2415 /*
2416 ** Return TRUE if the line typed in is an SQL command terminator other
2417 ** than a semi-colon.  The SQL Server style "go" command is understood
2418 ** as is the Oracle "/".
2419 */
2420 static int _is_command_terminator(const char *zLine){
2421   while( IsSpace(zLine[0]) ){ zLine++; };
2422   if( zLine[0]=='/' && _all_whitespace(&zLine[1]) ){
2423     return 1;  /* Oracle */
2424   }
2425   if( ToLower(zLine[0])=='g' && ToLower(zLine[1])=='o'
2426          && _all_whitespace(&zLine[2]) ){
2427     return 1;  /* SQL Server */
2428   }
2429   return 0;
2430 }
2431 
2432 /*
2433 ** Return true if zSql is a complete SQL statement.  Return false if it
2434 ** ends in the middle of a string literal or C-style comment.
2435 */
2436 static int _is_complete(char *zSql, int nSql){
2437   int rc;
2438   if( zSql==0 ) return 1;
2439   zSql[nSql] = ';';
2440   zSql[nSql+1] = 0;
2441   rc = sqlite3_complete(zSql);
2442   zSql[nSql] = 0;
2443   return rc;
2444 }
2445 
2446 /*
2447 ** Read input from *in and process it.  If *in==0 then input
2448 ** is interactive - the user is typing it it.  Otherwise, input
2449 ** is coming from a file or device.  A prompt is issued and history
2450 ** is saved only if input is interactive.  An interrupt signal will
2451 ** cause this routine to exit immediately, unless input is interactive.
2452 **
2453 ** Return the number of errors.
2454 */
2455 static int process_input(struct callback_data *p, FILE *in){
2456   char *zLine = 0;
2457   char *zSql = 0;
2458   int nSql = 0;
2459   int nSqlPrior = 0;
2460   char *zErrMsg;
2461   int rc;
2462   int errCnt = 0;
2463   int lineno = 0;
2464   int startline = 0;
2465 
2466   while( errCnt==0 || !bail_on_error || (in==0 && stdin_is_interactive) ){
2467     fflush(p->out);
2468     free(zLine);
2469     zLine = one_input_line(zSql, in);
2470     if( zLine==0 ){
2471       break;  /* We have reached EOF */
2472     }
2473     if( seenInterrupt ){
2474       if( in!=0 ) break;
2475       seenInterrupt = 0;
2476     }
2477     lineno++;
2478     if( (zSql==0 || zSql[0]==0) && _all_whitespace(zLine) ) continue;
2479     if( zLine && zLine[0]=='.' && nSql==0 ){
2480       if( p->echoOn ) printf("%s\n", zLine);
2481       rc = do_meta_command(zLine, p);
2482       if( rc==2 ){ /* exit requested */
2483         break;
2484       }else if( rc ){
2485         errCnt++;
2486       }
2487       continue;
2488     }
2489     if( _is_command_terminator(zLine) && _is_complete(zSql, nSql) ){
2490       memcpy(zLine,";",2);
2491     }
2492     nSqlPrior = nSql;
2493     if( zSql==0 ){
2494       int i;
2495       for(i=0; zLine[i] && IsSpace(zLine[i]); i++){}
2496       if( zLine[i]!=0 ){
2497         nSql = strlen30(zLine);
2498         zSql = malloc( nSql+3 );
2499         if( zSql==0 ){
2500           fprintf(stderr, "Error: out of memory\n");
2501           exit(1);
2502         }
2503         memcpy(zSql, zLine, nSql+1);
2504         startline = lineno;
2505       }
2506     }else{
2507       int len = strlen30(zLine);
2508       zSql = realloc( zSql, nSql + len + 4 );
2509       if( zSql==0 ){
2510         fprintf(stderr,"Error: out of memory\n");
2511         exit(1);
2512       }
2513       zSql[nSql++] = '\n';
2514       memcpy(&zSql[nSql], zLine, len+1);
2515       nSql += len;
2516     }
2517     if( zSql && _contains_semicolon(&zSql[nSqlPrior], nSql-nSqlPrior)
2518                 && sqlite3_complete(zSql) ){
2519       p->cnt = 0;
2520       open_db(p);
2521       BEGIN_TIMER;
2522       rc = shell_exec(p->db, zSql, shell_callback, p, &zErrMsg);
2523       END_TIMER;
2524       if( rc || zErrMsg ){
2525         char zPrefix[100];
2526         if( in!=0 || !stdin_is_interactive ){
2527           sqlite3_snprintf(sizeof(zPrefix), zPrefix,
2528                            "Error: near line %d:", startline);
2529         }else{
2530           sqlite3_snprintf(sizeof(zPrefix), zPrefix, "Error:");
2531         }
2532         if( zErrMsg!=0 ){
2533           fprintf(stderr, "%s %s\n", zPrefix, zErrMsg);
2534           sqlite3_free(zErrMsg);
2535           zErrMsg = 0;
2536         }else{
2537           fprintf(stderr, "%s %s\n", zPrefix, sqlite3_errmsg(p->db));
2538         }
2539         errCnt++;
2540       }
2541       free(zSql);
2542       zSql = 0;
2543       nSql = 0;
2544     }
2545   }
2546   if( zSql ){
2547     if( !_all_whitespace(zSql) ){
2548       fprintf(stderr, "Error: incomplete SQL: %s\n", zSql);
2549     }
2550     free(zSql);
2551   }
2552   free(zLine);
2553   return errCnt;
2554 }
2555 
2556 /*
2557 ** Return a pathname which is the user's home directory.  A
2558 ** 0 return indicates an error of some kind.  Space to hold the
2559 ** resulting string is obtained from malloc().  The calling
2560 ** function should free the result.
2561 */
2562 static char *find_home_dir(void){
2563   char *home_dir = NULL;
2564 
2565 #if !defined(_WIN32) && !defined(WIN32) && !defined(__OS2__) && !defined(_WIN32_WCE) && !defined(__RTP__) && !defined(_WRS_KERNEL)
2566   struct passwd *pwent;
2567   uid_t uid = getuid();
2568   if( (pwent=getpwuid(uid)) != NULL) {
2569     home_dir = pwent->pw_dir;
2570   }
2571 #endif
2572 
2573 #if defined(_WIN32_WCE)
2574   /* Windows CE (arm-wince-mingw32ce-gcc) does not provide getenv()
2575    */
2576   home_dir = strdup("/");
2577 #else
2578 
2579 #if defined(_WIN32) || defined(WIN32) || defined(__OS2__)
2580   if (!home_dir) {
2581     home_dir = getenv("USERPROFILE");
2582   }
2583 #endif
2584 
2585   if (!home_dir) {
2586     home_dir = getenv("HOME");
2587   }
2588 
2589 #if defined(_WIN32) || defined(WIN32) || defined(__OS2__)
2590   if (!home_dir) {
2591     char *zDrive, *zPath;
2592     int n;
2593     zDrive = getenv("HOMEDRIVE");
2594     zPath = getenv("HOMEPATH");
2595     if( zDrive && zPath ){
2596       n = strlen30(zDrive) + strlen30(zPath) + 1;
2597       home_dir = malloc( n );
2598       if( home_dir==0 ) return 0;
2599       sqlite3_snprintf(n, home_dir, "%s%s", zDrive, zPath);
2600       return home_dir;
2601     }
2602     home_dir = "c:\\";
2603   }
2604 #endif
2605 
2606 #endif /* !_WIN32_WCE */
2607 
2608   if( home_dir ){
2609     int n = strlen30(home_dir) + 1;
2610     char *z = malloc( n );
2611     if( z ) memcpy(z, home_dir, n);
2612     home_dir = z;
2613   }
2614 
2615   return home_dir;
2616 }
2617 
2618 /*
2619 ** Read input from the file given by sqliterc_override.  Or if that
2620 ** parameter is NULL, take input from ~/.sqliterc
2621 **
2622 ** Returns the number of errors.
2623 */
2624 static int process_sqliterc(
2625   struct callback_data *p,        /* Configuration data */
2626   const char *sqliterc_override   /* Name of config file. NULL to use default */
2627 ){
2628   char *home_dir = NULL;
2629   const char *sqliterc = sqliterc_override;
2630   char *zBuf = 0;
2631   FILE *in = NULL;
2632   int nBuf;
2633   int rc = 0;
2634 
2635   if (sqliterc == NULL) {
2636     home_dir = find_home_dir();
2637     if( home_dir==0 ){
2638 #if !defined(__RTP__) && !defined(_WRS_KERNEL)
2639       fprintf(stderr,"%s: Error: cannot locate your home directory\n", Argv0);
2640 #endif
2641       return 1;
2642     }
2643     nBuf = strlen30(home_dir) + 16;
2644     zBuf = malloc( nBuf );
2645     if( zBuf==0 ){
2646       fprintf(stderr,"%s: Error: out of memory\n",Argv0);
2647       return 1;
2648     }
2649     sqlite3_snprintf(nBuf, zBuf,"%s/.sqliterc",home_dir);
2650     free(home_dir);
2651     sqliterc = (const char*)zBuf;
2652   }
2653   in = fopen(sqliterc,"rb");
2654   if( in ){
2655     if( stdin_is_interactive ){
2656       fprintf(stderr,"-- Loading resources from %s\n",sqliterc);
2657     }
2658     rc = process_input(p,in);
2659     fclose(in);
2660   }
2661   free(zBuf);
2662   return rc;
2663 }
2664 
2665 /*
2666 ** Show available command line options
2667 */
2668 static const char zOptions[] =
2669   "   -help                show this message\n"
2670   "   -init filename       read/process named file\n"
2671   "   -echo                print commands before execution\n"
2672   "   -[no]header          turn headers on or off\n"
2673   "   -bail                stop after hitting an error\n"
2674   "   -interactive         force interactive I/O\n"
2675   "   -batch               force batch I/O\n"
2676   "   -column              set output mode to 'column'\n"
2677   "   -csv                 set output mode to 'csv'\n"
2678   "   -html                set output mode to HTML\n"
2679   "   -line                set output mode to 'line'\n"
2680   "   -list                set output mode to 'list'\n"
2681   "   -separator 'x'       set output field separator (|)\n"
2682   "   -stats               print memory stats before each finalize\n"
2683   "   -nullvalue 'text'    set text string for NULL values\n"
2684   "   -version             show SQLite version\n"
2685   "   -vfs NAME            use NAME as the default VFS\n"
2686 #ifdef SQLITE_ENABLE_VFSTRACE
2687   "   -vfstrace            enable tracing of all VFS calls\n"
2688 #endif
2689 #ifdef SQLITE_ENABLE_MULTIPLEX
2690   "   -multiplex           enable the multiplexor VFS\n"
2691 #endif
2692 ;
2693 static void usage(int showDetail){
2694   fprintf(stderr,
2695       "Usage: %s [OPTIONS] FILENAME [SQL]\n"
2696       "FILENAME is the name of an SQLite database. A new database is created\n"
2697       "if the file does not previously exist.\n", Argv0);
2698   if( showDetail ){
2699     fprintf(stderr, "OPTIONS include:\n%s", zOptions);
2700   }else{
2701     fprintf(stderr, "Use the -help option for additional information\n");
2702   }
2703   exit(1);
2704 }
2705 
2706 /*
2707 ** Initialize the state information in data
2708 */
2709 static void main_init(struct callback_data *data) {
2710   memset(data, 0, sizeof(*data));
2711   data->mode = MODE_List;
2712   memcpy(data->separator,"|", 2);
2713   data->showHeader = 0;
2714   sqlite3_config(SQLITE_CONFIG_URI, 1);
2715   sqlite3_config(SQLITE_CONFIG_LOG, shellLog, data);
2716   sqlite3_snprintf(sizeof(mainPrompt), mainPrompt,"sqlite> ");
2717   sqlite3_snprintf(sizeof(continuePrompt), continuePrompt,"   ...> ");
2718   sqlite3_config(SQLITE_CONFIG_SINGLETHREAD);
2719 }
2720 
2721 int main(int argc, char **argv){
2722   char *zErrMsg = 0;
2723   struct callback_data data;
2724   const char *zInitFile = 0;
2725   char *zFirstCmd = 0;
2726   int i;
2727   int rc = 0;
2728 
2729   if( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)!=0 ){
2730     fprintf(stderr, "SQLite header and source version mismatch\n%s\n%s\n",
2731             sqlite3_sourceid(), SQLITE_SOURCE_ID);
2732     exit(1);
2733   }
2734   Argv0 = argv[0];
2735   main_init(&data);
2736   stdin_is_interactive = isatty(0);
2737 
2738   /* Make sure we have a valid signal handler early, before anything
2739   ** else is done.
2740   */
2741 #ifdef SIGINT
2742   signal(SIGINT, interrupt_handler);
2743 #endif
2744 
2745   /* Do an initial pass through the command-line argument to locate
2746   ** the name of the database file, the name of the initialization file,
2747   ** the size of the alternative malloc heap,
2748   ** and the first command to execute.
2749   */
2750   for(i=1; i<argc-1; i++){
2751     char *z;
2752     if( argv[i][0]!='-' ) break;
2753     z = argv[i];
2754     if( z[0]=='-' && z[1]=='-' ) z++;
2755     if( strcmp(argv[i],"-separator")==0 || strcmp(argv[i],"-nullvalue")==0 ){
2756       i++;
2757     }else if( strcmp(argv[i],"-init")==0 ){
2758       i++;
2759       zInitFile = argv[i];
2760     /* Need to check for batch mode here to so we can avoid printing
2761     ** informational messages (like from process_sqliterc) before
2762     ** we do the actual processing of arguments later in a second pass.
2763     */
2764     }else if( strcmp(argv[i],"-batch")==0 ){
2765       stdin_is_interactive = 0;
2766     }else if( strcmp(argv[i],"-heap")==0 ){
2767 #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
2768       int j, c;
2769       const char *zSize;
2770       sqlite3_int64 szHeap;
2771 
2772       zSize = argv[++i];
2773       szHeap = atoi(zSize);
2774       for(j=0; (c = zSize[j])!=0; j++){
2775         if( c=='M' ){ szHeap *= 1000000; break; }
2776         if( c=='K' ){ szHeap *= 1000; break; }
2777         if( c=='G' ){ szHeap *= 1000000000; break; }
2778       }
2779       if( szHeap>0x7fff0000 ) szHeap = 0x7fff0000;
2780       sqlite3_config(SQLITE_CONFIG_HEAP, malloc((int)szHeap), (int)szHeap, 64);
2781 #endif
2782 #ifdef SQLITE_ENABLE_VFSTRACE
2783     }else if( strcmp(argv[i],"-vfstrace")==0 ){
2784       extern int vfstrace_register(
2785          const char *zTraceName,
2786          const char *zOldVfsName,
2787          int (*xOut)(const char*,void*),
2788          void *pOutArg,
2789          int makeDefault
2790       );
2791       vfstrace_register("trace",0,(int(*)(const char*,void*))fputs,stderr,1);
2792 #endif
2793 #ifdef SQLITE_ENABLE_MULTIPLEX
2794     }else if( strcmp(argv[i],"-multiplex")==0 ){
2795       extern int sqlite3_multiple_initialize(const char*,int);
2796       sqlite3_multiplex_initialize(0, 1);
2797 #endif
2798     }else if( strcmp(argv[i],"-vfs")==0 ){
2799       sqlite3_vfs *pVfs = sqlite3_vfs_find(argv[++i]);
2800       if( pVfs ){
2801         sqlite3_vfs_register(pVfs, 1);
2802       }else{
2803         fprintf(stderr, "no such VFS: \"%s\"\n", argv[i]);
2804         exit(1);
2805       }
2806     }
2807   }
2808   if( i<argc ){
2809 #if defined(SQLITE_OS_OS2) && SQLITE_OS_OS2
2810     data.zDbFilename = (const char *)convertCpPathToUtf8( argv[i++] );
2811 #else
2812     data.zDbFilename = argv[i++];
2813 #endif
2814   }else{
2815 #ifndef SQLITE_OMIT_MEMORYDB
2816     data.zDbFilename = ":memory:";
2817 #else
2818     data.zDbFilename = 0;
2819 #endif
2820   }
2821   if( i<argc ){
2822     zFirstCmd = argv[i++];
2823   }
2824   if( i<argc ){
2825     fprintf(stderr,"%s: Error: too many options: \"%s\"\n", Argv0, argv[i]);
2826     fprintf(stderr,"Use -help for a list of options.\n");
2827     return 1;
2828   }
2829   data.out = stdout;
2830 
2831 #ifdef SQLITE_OMIT_MEMORYDB
2832   if( data.zDbFilename==0 ){
2833     fprintf(stderr,"%s: Error: no database filename specified\n", Argv0);
2834     return 1;
2835   }
2836 #endif
2837 
2838   /* Go ahead and open the database file if it already exists.  If the
2839   ** file does not exist, delay opening it.  This prevents empty database
2840   ** files from being created if a user mistypes the database name argument
2841   ** to the sqlite command-line tool.
2842   */
2843   if( access(data.zDbFilename, 0)==0 ){
2844     open_db(&data);
2845   }
2846 
2847   /* Process the initialization file if there is one.  If no -init option
2848   ** is given on the command line, look for a file named ~/.sqliterc and
2849   ** try to process it.
2850   */
2851   rc = process_sqliterc(&data,zInitFile);
2852   if( rc>0 ){
2853     return rc;
2854   }
2855 
2856   /* Make a second pass through the command-line argument and set
2857   ** options.  This second pass is delayed until after the initialization
2858   ** file is processed so that the command-line arguments will override
2859   ** settings in the initialization file.
2860   */
2861   for(i=1; i<argc && argv[i][0]=='-'; i++){
2862     char *z = argv[i];
2863     if( z[1]=='-' ){ z++; }
2864     if( strcmp(z,"-init")==0 ){
2865       i++;
2866     }else if( strcmp(z,"-html")==0 ){
2867       data.mode = MODE_Html;
2868     }else if( strcmp(z,"-list")==0 ){
2869       data.mode = MODE_List;
2870     }else if( strcmp(z,"-line")==0 ){
2871       data.mode = MODE_Line;
2872     }else if( strcmp(z,"-column")==0 ){
2873       data.mode = MODE_Column;
2874     }else if( strcmp(z,"-csv")==0 ){
2875       data.mode = MODE_Csv;
2876       memcpy(data.separator,",",2);
2877     }else if( strcmp(z,"-separator")==0 ){
2878       i++;
2879       if(i>=argc){
2880         fprintf(stderr,"%s: Error: missing argument for option: %s\n", Argv0, z);
2881         fprintf(stderr,"Use -help for a list of options.\n");
2882         return 1;
2883       }
2884       sqlite3_snprintf(sizeof(data.separator), data.separator,
2885                        "%.*s",(int)sizeof(data.separator)-1,argv[i]);
2886     }else if( strcmp(z,"-nullvalue")==0 ){
2887       i++;
2888       if(i>=argc){
2889         fprintf(stderr,"%s: Error: missing argument for option: %s\n", Argv0, z);
2890         fprintf(stderr,"Use -help for a list of options.\n");
2891         return 1;
2892       }
2893       sqlite3_snprintf(sizeof(data.nullvalue), data.nullvalue,
2894                        "%.*s",(int)sizeof(data.nullvalue)-1,argv[i]);
2895     }else if( strcmp(z,"-header")==0 ){
2896       data.showHeader = 1;
2897     }else if( strcmp(z,"-noheader")==0 ){
2898       data.showHeader = 0;
2899     }else if( strcmp(z,"-echo")==0 ){
2900       data.echoOn = 1;
2901     }else if( strcmp(z,"-stats")==0 ){
2902       data.statsOn = 1;
2903     }else if( strcmp(z,"-bail")==0 ){
2904       bail_on_error = 1;
2905     }else if( strcmp(z,"-version")==0 ){
2906       printf("%s %s\n", sqlite3_libversion(), sqlite3_sourceid());
2907       return 0;
2908     }else if( strcmp(z,"-interactive")==0 ){
2909       stdin_is_interactive = 1;
2910     }else if( strcmp(z,"-batch")==0 ){
2911       stdin_is_interactive = 0;
2912     }else if( strcmp(z,"-heap")==0 ){
2913       i++;
2914     }else if( strcmp(z,"-vfs")==0 ){
2915       i++;
2916 #ifdef SQLITE_ENABLE_VFSTRACE
2917     }else if( strcmp(z,"-vfstrace")==0 ){
2918       i++;
2919 #endif
2920 #ifdef SQLITE_ENABLE_MULTIPLEX
2921     }else if( strcmp(z,"-multiplex")==0 ){
2922       i++;
2923 #endif
2924     }else if( strcmp(z,"-help")==0 || strcmp(z, "--help")==0 ){
2925       usage(1);
2926     }else{
2927       fprintf(stderr,"%s: Error: unknown option: %s\n", Argv0, z);
2928       fprintf(stderr,"Use -help for a list of options.\n");
2929       return 1;
2930     }
2931   }
2932 
2933   if( zFirstCmd ){
2934     /* Run just the command that follows the database name
2935     */
2936     if( zFirstCmd[0]=='.' ){
2937       rc = do_meta_command(zFirstCmd, &data);
2938     }else{
2939       open_db(&data);
2940       rc = shell_exec(data.db, zFirstCmd, shell_callback, &data, &zErrMsg);
2941       if( zErrMsg!=0 ){
2942         fprintf(stderr,"Error: %s\n", zErrMsg);
2943         return rc!=0 ? rc : 1;
2944       }else if( rc!=0 ){
2945         fprintf(stderr,"Error: unable to process SQL \"%s\"\n", zFirstCmd);
2946         return rc;
2947       }
2948     }
2949   }else{
2950     /* Run commands received from standard input
2951     */
2952     if( stdin_is_interactive ){
2953       char *zHome;
2954       char *zHistory = 0;
2955       int nHistory;
2956       printf(
2957         "SQLite version %s %.19s\n" /*extra-version-info*/
2958         "Enter \".help\" for instructions\n"
2959         "Enter SQL statements terminated with a \";\"\n",
2960         sqlite3_libversion(), sqlite3_sourceid()
2961       );
2962       zHome = find_home_dir();
2963       if( zHome ){
2964         nHistory = strlen30(zHome) + 20;
2965         if( (zHistory = malloc(nHistory))!=0 ){
2966           sqlite3_snprintf(nHistory, zHistory,"%s/.sqlite_history", zHome);
2967         }
2968       }
2969 #if defined(HAVE_READLINE) && HAVE_READLINE==1
2970       if( zHistory ) read_history(zHistory);
2971 #endif
2972       rc = process_input(&data, 0);
2973       if( zHistory ){
2974         stifle_history(100);
2975         write_history(zHistory);
2976         free(zHistory);
2977       }
2978       free(zHome);
2979     }else{
2980       rc = process_input(&data, stdin);
2981     }
2982   }
2983   set_table_name(&data, 0);
2984   if( data.db ){
2985     sqlite3_close(data.db);
2986   }
2987   return rc;
2988 }
2989