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** If requested, include the SQLite compiler options file for MSVC.
22*/
23#if defined(INCLUDE_MSVC_H)
24#include "msvc.h"
25#endif
26
27/*
28** No support for loadable extensions in VxWorks.
29*/
30#if (defined(__RTP__) || defined(_WRS_KERNEL)) && !SQLITE_OMIT_LOAD_EXTENSION
31# define SQLITE_OMIT_LOAD_EXTENSION 1
32#endif
33
34/*
35** Enable large-file support for fopen() and friends on unix.
36*/
37#ifndef SQLITE_DISABLE_LFS
38# define _LARGE_FILE       1
39# ifndef _FILE_OFFSET_BITS
40#   define _FILE_OFFSET_BITS 64
41# endif
42# define _LARGEFILE_SOURCE 1
43#endif
44
45#include <stdlib.h>
46#include <string.h>
47#include <stdio.h>
48#include <assert.h>
49#include "sqlite3.h"
50#if SQLITE_USER_AUTHENTICATION
51# include "sqlite3userauth.h"
52#endif
53#include <ctype.h>
54#include <stdarg.h>
55
56#if !defined(_WIN32) && !defined(WIN32)
57# include <signal.h>
58# if !defined(__RTP__) && !defined(_WRS_KERNEL)
59#  include <pwd.h>
60# endif
61# include <unistd.h>
62# include <sys/types.h>
63#endif
64
65#if HAVE_READLINE
66# include <readline/readline.h>
67# include <readline/history.h>
68#endif
69
70#if HAVE_EDITLINE
71# include <editline/readline.h>
72#endif
73
74#if HAVE_EDITLINE || HAVE_READLINE
75
76# define shell_add_history(X) add_history(X)
77# define shell_read_history(X) read_history(X)
78# define shell_write_history(X) write_history(X)
79# define shell_stifle_history(X) stifle_history(X)
80# define shell_readline(X) readline(X)
81
82#elif HAVE_LINENOISE
83
84# include "linenoise.h"
85# define shell_add_history(X) linenoiseHistoryAdd(X)
86# define shell_read_history(X) linenoiseHistoryLoad(X)
87# define shell_write_history(X) linenoiseHistorySave(X)
88# define shell_stifle_history(X) linenoiseHistorySetMaxLen(X)
89# define shell_readline(X) linenoise(X)
90
91#else
92
93# define shell_read_history(X)
94# define shell_write_history(X)
95# define shell_stifle_history(X)
96
97# define SHELL_USE_LOCAL_GETLINE 1
98#endif
99
100
101#if defined(_WIN32) || defined(WIN32)
102# include <io.h>
103# include <fcntl.h>
104#define isatty(h) _isatty(h)
105#ifndef access
106# define access(f,m) _access((f),(m))
107#endif
108#undef popen
109#define popen _popen
110#undef pclose
111#define pclose _pclose
112#else
113/* Make sure isatty() has a prototype.
114*/
115extern int isatty(int);
116
117#if !defined(__RTP__) && !defined(_WRS_KERNEL)
118  /* popen and pclose are not C89 functions and so are sometimes omitted from
119  ** the <stdio.h> header */
120  extern FILE *popen(const char*,const char*);
121  extern int pclose(FILE*);
122#else
123# define SQLITE_OMIT_POPEN 1
124#endif
125
126#endif
127
128#if defined(_WIN32_WCE)
129/* Windows CE (arm-wince-mingw32ce-gcc) does not provide isatty()
130 * thus we always assume that we have a console. That can be
131 * overridden with the -batch command line option.
132 */
133#define isatty(x) 1
134#endif
135
136/* ctype macros that work with signed characters */
137#define IsSpace(X)  isspace((unsigned char)X)
138#define IsDigit(X)  isdigit((unsigned char)X)
139#define ToLower(X)  (char)tolower((unsigned char)X)
140
141/* On Windows, we normally run with output mode of TEXT so that \n characters
142** are automatically translated into \r\n.  However, this behavior needs
143** to be disabled in some cases (ex: when generating CSV output and when
144** rendering quoted strings that contain \n characters).  The following
145** routines take care of that.
146*/
147#if defined(_WIN32) || defined(WIN32)
148static void setBinaryMode(FILE *out){
149  fflush(out);
150  _setmode(_fileno(out), _O_BINARY);
151}
152static void setTextMode(FILE *out){
153  fflush(out);
154  _setmode(_fileno(out), _O_TEXT);
155}
156#else
157# define setBinaryMode(X)
158# define setTextMode(X)
159#endif
160
161
162/* True if the timer is enabled */
163static int enableTimer = 0;
164
165/* Return the current wall-clock time */
166static sqlite3_int64 timeOfDay(void){
167  static sqlite3_vfs *clockVfs = 0;
168  sqlite3_int64 t;
169  if( clockVfs==0 ) clockVfs = sqlite3_vfs_find(0);
170  if( clockVfs->iVersion>=1 && clockVfs->xCurrentTimeInt64!=0 ){
171    clockVfs->xCurrentTimeInt64(clockVfs, &t);
172  }else{
173    double r;
174    clockVfs->xCurrentTime(clockVfs, &r);
175    t = (sqlite3_int64)(r*86400000.0);
176  }
177  return t;
178}
179
180#if !defined(_WIN32) && !defined(WIN32) && !defined(__minux)
181#include <sys/time.h>
182#include <sys/resource.h>
183
184/* VxWorks does not support getrusage() as far as we can determine */
185#if defined(_WRS_KERNEL) || defined(__RTP__)
186struct rusage {
187  struct timeval ru_utime; /* user CPU time used */
188  struct timeval ru_stime; /* system CPU time used */
189};
190#define getrusage(A,B) memset(B,0,sizeof(*B))
191#endif
192
193/* Saved resource information for the beginning of an operation */
194static struct rusage sBegin;  /* CPU time at start */
195static sqlite3_int64 iBegin;  /* Wall-clock time at start */
196
197/*
198** Begin timing an operation
199*/
200static void beginTimer(void){
201  if( enableTimer ){
202    getrusage(RUSAGE_SELF, &sBegin);
203    iBegin = timeOfDay();
204  }
205}
206
207/* Return the difference of two time_structs in seconds */
208static double timeDiff(struct timeval *pStart, struct timeval *pEnd){
209  return (pEnd->tv_usec - pStart->tv_usec)*0.000001 +
210         (double)(pEnd->tv_sec - pStart->tv_sec);
211}
212
213/*
214** Print the timing results.
215*/
216static void endTimer(void){
217  if( enableTimer ){
218    sqlite3_int64 iEnd = timeOfDay();
219    struct rusage sEnd;
220    getrusage(RUSAGE_SELF, &sEnd);
221    printf("Run Time: real %.3f user %f sys %f\n",
222       (iEnd - iBegin)*0.001,
223       timeDiff(&sBegin.ru_utime, &sEnd.ru_utime),
224       timeDiff(&sBegin.ru_stime, &sEnd.ru_stime));
225  }
226}
227
228#define BEGIN_TIMER beginTimer()
229#define END_TIMER endTimer()
230#define HAS_TIMER 1
231
232#elif (defined(_WIN32) || defined(WIN32))
233
234#include <windows.h>
235
236/* Saved resource information for the beginning of an operation */
237static HANDLE hProcess;
238static FILETIME ftKernelBegin;
239static FILETIME ftUserBegin;
240static sqlite3_int64 ftWallBegin;
241typedef BOOL (WINAPI *GETPROCTIMES)(HANDLE, LPFILETIME, LPFILETIME,
242                                    LPFILETIME, LPFILETIME);
243static GETPROCTIMES getProcessTimesAddr = NULL;
244
245/*
246** Check to see if we have timer support.  Return 1 if necessary
247** support found (or found previously).
248*/
249static int hasTimer(void){
250  if( getProcessTimesAddr ){
251    return 1;
252  } else {
253    /* GetProcessTimes() isn't supported in WIN95 and some other Windows
254    ** versions. See if the version we are running on has it, and if it
255    ** does, save off a pointer to it and the current process handle.
256    */
257    hProcess = GetCurrentProcess();
258    if( hProcess ){
259      HINSTANCE hinstLib = LoadLibrary(TEXT("Kernel32.dll"));
260      if( NULL != hinstLib ){
261        getProcessTimesAddr =
262            (GETPROCTIMES) GetProcAddress(hinstLib, "GetProcessTimes");
263        if( NULL != getProcessTimesAddr ){
264          return 1;
265        }
266        FreeLibrary(hinstLib);
267      }
268    }
269  }
270  return 0;
271}
272
273/*
274** Begin timing an operation
275*/
276static void beginTimer(void){
277  if( enableTimer && getProcessTimesAddr ){
278    FILETIME ftCreation, ftExit;
279    getProcessTimesAddr(hProcess,&ftCreation,&ftExit,
280                        &ftKernelBegin,&ftUserBegin);
281    ftWallBegin = timeOfDay();
282  }
283}
284
285/* Return the difference of two FILETIME structs in seconds */
286static double timeDiff(FILETIME *pStart, FILETIME *pEnd){
287  sqlite_int64 i64Start = *((sqlite_int64 *) pStart);
288  sqlite_int64 i64End = *((sqlite_int64 *) pEnd);
289  return (double) ((i64End - i64Start) / 10000000.0);
290}
291
292/*
293** Print the timing results.
294*/
295static void endTimer(void){
296  if( enableTimer && getProcessTimesAddr){
297    FILETIME ftCreation, ftExit, ftKernelEnd, ftUserEnd;
298    sqlite3_int64 ftWallEnd = timeOfDay();
299    getProcessTimesAddr(hProcess,&ftCreation,&ftExit,&ftKernelEnd,&ftUserEnd);
300    printf("Run Time: real %.3f user %f sys %f\n",
301       (ftWallEnd - ftWallBegin)*0.001,
302       timeDiff(&ftUserBegin, &ftUserEnd),
303       timeDiff(&ftKernelBegin, &ftKernelEnd));
304  }
305}
306
307#define BEGIN_TIMER beginTimer()
308#define END_TIMER endTimer()
309#define HAS_TIMER hasTimer()
310
311#else
312#define BEGIN_TIMER
313#define END_TIMER
314#define HAS_TIMER 0
315#endif
316
317/*
318** Used to prevent warnings about unused parameters
319*/
320#define UNUSED_PARAMETER(x) (void)(x)
321
322/*
323** If the following flag is set, then command execution stops
324** at an error if we are not interactive.
325*/
326static int bail_on_error = 0;
327
328/*
329** Threat stdin as an interactive input if the following variable
330** is true.  Otherwise, assume stdin is connected to a file or pipe.
331*/
332static int stdin_is_interactive = 1;
333
334/*
335** The following is the open SQLite database.  We make a pointer
336** to this database a static variable so that it can be accessed
337** by the SIGINT handler to interrupt database processing.
338*/
339static sqlite3 *globalDb = 0;
340
341/*
342** True if an interrupt (Control-C) has been received.
343*/
344static volatile int seenInterrupt = 0;
345
346/*
347** This is the name of our program. It is set in main(), used
348** in a number of other places, mostly for error messages.
349*/
350static char *Argv0;
351
352/*
353** Prompt strings. Initialized in main. Settable with
354**   .prompt main continue
355*/
356static char mainPrompt[20];     /* First line prompt. default: "sqlite> "*/
357static char continuePrompt[20]; /* Continuation prompt. default: "   ...> " */
358
359/*
360** Write I/O traces to the following stream.
361*/
362#ifdef SQLITE_ENABLE_IOTRACE
363static FILE *iotrace = 0;
364#endif
365
366/*
367** This routine works like printf in that its first argument is a
368** format string and subsequent arguments are values to be substituted
369** in place of % fields.  The result of formatting this string
370** is written to iotrace.
371*/
372#ifdef SQLITE_ENABLE_IOTRACE
373static void SQLITE_CDECL iotracePrintf(const char *zFormat, ...){
374  va_list ap;
375  char *z;
376  if( iotrace==0 ) return;
377  va_start(ap, zFormat);
378  z = sqlite3_vmprintf(zFormat, ap);
379  va_end(ap);
380  fprintf(iotrace, "%s", z);
381  sqlite3_free(z);
382}
383#endif
384
385
386/*
387** Determines if a string is a number of not.
388*/
389static int isNumber(const char *z, int *realnum){
390  if( *z=='-' || *z=='+' ) z++;
391  if( !IsDigit(*z) ){
392    return 0;
393  }
394  z++;
395  if( realnum ) *realnum = 0;
396  while( IsDigit(*z) ){ z++; }
397  if( *z=='.' ){
398    z++;
399    if( !IsDigit(*z) ) return 0;
400    while( IsDigit(*z) ){ z++; }
401    if( realnum ) *realnum = 1;
402  }
403  if( *z=='e' || *z=='E' ){
404    z++;
405    if( *z=='+' || *z=='-' ) z++;
406    if( !IsDigit(*z) ) return 0;
407    while( IsDigit(*z) ){ z++; }
408    if( realnum ) *realnum = 1;
409  }
410  return *z==0;
411}
412
413/*
414** A global char* and an SQL function to access its current value
415** from within an SQL statement. This program used to use the
416** sqlite_exec_printf() API to substitue a string into an SQL statement.
417** The correct way to do this with sqlite3 is to use the bind API, but
418** since the shell is built around the callback paradigm it would be a lot
419** of work. Instead just use this hack, which is quite harmless.
420*/
421static const char *zShellStatic = 0;
422static void shellstaticFunc(
423  sqlite3_context *context,
424  int argc,
425  sqlite3_value **argv
426){
427  assert( 0==argc );
428  assert( zShellStatic );
429  UNUSED_PARAMETER(argc);
430  UNUSED_PARAMETER(argv);
431  sqlite3_result_text(context, zShellStatic, -1, SQLITE_STATIC);
432}
433
434
435/*
436** This routine reads a line of text from FILE in, stores
437** the text in memory obtained from malloc() and returns a pointer
438** to the text.  NULL is returned at end of file, or if malloc()
439** fails.
440**
441** If zLine is not NULL then it is a malloced buffer returned from
442** a previous call to this routine that may be reused.
443*/
444static char *local_getline(char *zLine, FILE *in){
445  int nLine = zLine==0 ? 0 : 100;
446  int n = 0;
447
448  while( 1 ){
449    if( n+100>nLine ){
450      nLine = nLine*2 + 100;
451      zLine = realloc(zLine, nLine);
452      if( zLine==0 ) return 0;
453    }
454    if( fgets(&zLine[n], nLine - n, in)==0 ){
455      if( n==0 ){
456        free(zLine);
457        return 0;
458      }
459      zLine[n] = 0;
460      break;
461    }
462    while( zLine[n] ) n++;
463    if( n>0 && zLine[n-1]=='\n' ){
464      n--;
465      if( n>0 && zLine[n-1]=='\r' ) n--;
466      zLine[n] = 0;
467      break;
468    }
469  }
470  return zLine;
471}
472
473/*
474** Retrieve a single line of input text.
475**
476** If in==0 then read from standard input and prompt before each line.
477** If isContinuation is true, then a continuation prompt is appropriate.
478** If isContinuation is zero, then the main prompt should be used.
479**
480** If zPrior is not NULL then it is a buffer from a prior call to this
481** routine that can be reused.
482**
483** The result is stored in space obtained from malloc() and must either
484** be freed by the caller or else passed back into this routine via the
485** zPrior argument for reuse.
486*/
487static char *one_input_line(FILE *in, char *zPrior, int isContinuation){
488  char *zPrompt;
489  char *zResult;
490  if( in!=0 ){
491    zResult = local_getline(zPrior, in);
492  }else{
493    zPrompt = isContinuation ? continuePrompt : mainPrompt;
494#if SHELL_USE_LOCAL_GETLINE
495    printf("%s", zPrompt);
496    fflush(stdout);
497    zResult = local_getline(zPrior, stdin);
498#else
499    free(zPrior);
500    zResult = shell_readline(zPrompt);
501    if( zResult && *zResult ) shell_add_history(zResult);
502#endif
503  }
504  return zResult;
505}
506
507/*
508** Shell output mode information from before ".explain on",
509** saved so that it can be restored by ".explain off"
510*/
511typedef struct SavedModeInfo SavedModeInfo;
512struct SavedModeInfo {
513  int valid;          /* Is there legit data in here? */
514  int mode;           /* Mode prior to ".explain on" */
515  int showHeader;     /* The ".header" setting prior to ".explain on" */
516  int colWidth[100];  /* Column widths prior to ".explain on" */
517};
518
519/*
520** State information about the database connection is contained in an
521** instance of the following structure.
522*/
523typedef struct ShellState ShellState;
524struct ShellState {
525  sqlite3 *db;           /* The database */
526  int echoOn;            /* True to echo input commands */
527  int autoEQP;           /* Run EXPLAIN QUERY PLAN prior to seach SQL stmt */
528  int statsOn;           /* True to display memory stats before each finalize */
529  int scanstatsOn;       /* True to display scan stats before each finalize */
530  int backslashOn;       /* Resolve C-style \x escapes in SQL input text */
531  int outCount;          /* Revert to stdout when reaching zero */
532  int cnt;               /* Number of records displayed so far */
533  FILE *out;             /* Write results here */
534  FILE *traceOut;        /* Output for sqlite3_trace() */
535  int nErr;              /* Number of errors seen */
536  int mode;              /* An output mode setting */
537  int writableSchema;    /* True if PRAGMA writable_schema=ON */
538  int showHeader;        /* True to show column names in List or Column mode */
539  unsigned shellFlgs;    /* Various flags */
540  char *zDestTable;      /* Name of destination table when MODE_Insert */
541  char colSeparator[20]; /* Column separator character for several modes */
542  char rowSeparator[20]; /* Row separator character for MODE_Ascii */
543  int colWidth[100];     /* Requested width of each column when in column mode*/
544  int actualWidth[100];  /* Actual width of each column */
545  char nullValue[20];    /* The text to print when a NULL comes back from
546                         ** the database */
547  SavedModeInfo normalMode;/* Holds the mode just before .explain ON */
548  char outfile[FILENAME_MAX]; /* Filename for *out */
549  const char *zDbFilename;    /* name of the database file */
550  char *zFreeOnClose;         /* Filename to free when closing */
551  const char *zVfs;           /* Name of VFS to use */
552  sqlite3_stmt *pStmt;   /* Current statement if any. */
553  FILE *pLog;            /* Write log output here */
554  int *aiIndent;         /* Array of indents used in MODE_Explain */
555  int nIndent;           /* Size of array aiIndent[] */
556  int iIndent;           /* Index of current op in aiIndent[] */
557};
558
559/*
560** These are the allowed shellFlgs values
561*/
562#define SHFLG_Scratch     0x00001     /* The --scratch option is used */
563#define SHFLG_Pagecache   0x00002     /* The --pagecache option is used */
564#define SHFLG_Lookaside   0x00004     /* Lookaside memory is used */
565
566/*
567** These are the allowed modes.
568*/
569#define MODE_Line     0  /* One column per line.  Blank line between records */
570#define MODE_Column   1  /* One record per line in neat columns */
571#define MODE_List     2  /* One record per line with a separator */
572#define MODE_Semi     3  /* Same as MODE_List but append ";" to each line */
573#define MODE_Html     4  /* Generate an XHTML table */
574#define MODE_Insert   5  /* Generate SQL "insert" statements */
575#define MODE_Tcl      6  /* Generate ANSI-C or TCL quoted elements */
576#define MODE_Csv      7  /* Quote strings, numbers are plain */
577#define MODE_Explain  8  /* Like MODE_Column, but do not truncate data */
578#define MODE_Ascii    9  /* Use ASCII unit and record separators (0x1F/0x1E) */
579
580static const char *modeDescr[] = {
581  "line",
582  "column",
583  "list",
584  "semi",
585  "html",
586  "insert",
587  "tcl",
588  "csv",
589  "explain",
590  "ascii",
591};
592
593/*
594** These are the column/row/line separators used by the various
595** import/export modes.
596*/
597#define SEP_Column    "|"
598#define SEP_Row       "\n"
599#define SEP_Tab       "\t"
600#define SEP_Space     " "
601#define SEP_Comma     ","
602#define SEP_CrLf      "\r\n"
603#define SEP_Unit      "\x1F"
604#define SEP_Record    "\x1E"
605
606/*
607** Number of elements in an array
608*/
609#define ArraySize(X)  (int)(sizeof(X)/sizeof(X[0]))
610
611/*
612** Compute a string length that is limited to what can be stored in
613** lower 30 bits of a 32-bit signed integer.
614*/
615static int strlen30(const char *z){
616  const char *z2 = z;
617  while( *z2 ){ z2++; }
618  return 0x3fffffff & (int)(z2 - z);
619}
620
621/*
622** A callback for the sqlite3_log() interface.
623*/
624static void shellLog(void *pArg, int iErrCode, const char *zMsg){
625  ShellState *p = (ShellState*)pArg;
626  if( p->pLog==0 ) return;
627  fprintf(p->pLog, "(%d) %s\n", iErrCode, zMsg);
628  fflush(p->pLog);
629}
630
631/*
632** Output the given string as a hex-encoded blob (eg. X'1234' )
633*/
634static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){
635  int i;
636  char *zBlob = (char *)pBlob;
637  fprintf(out,"X'");
638  for(i=0; i<nBlob; i++){ fprintf(out,"%02x",zBlob[i]&0xff); }
639  fprintf(out,"'");
640}
641
642/*
643** Output the given string as a quoted string using SQL quoting conventions.
644*/
645static void output_quoted_string(FILE *out, const char *z){
646  int i;
647  int nSingle = 0;
648  setBinaryMode(out);
649  for(i=0; z[i]; i++){
650    if( z[i]=='\'' ) nSingle++;
651  }
652  if( nSingle==0 ){
653    fprintf(out,"'%s'",z);
654  }else{
655    fprintf(out,"'");
656    while( *z ){
657      for(i=0; z[i] && z[i]!='\''; i++){}
658      if( i==0 ){
659        fprintf(out,"''");
660        z++;
661      }else if( z[i]=='\'' ){
662        fprintf(out,"%.*s''",i,z);
663        z += i+1;
664      }else{
665        fprintf(out,"%s",z);
666        break;
667      }
668    }
669    fprintf(out,"'");
670  }
671  setTextMode(out);
672}
673
674/*
675** Output the given string as a quoted according to C or TCL quoting rules.
676*/
677static void output_c_string(FILE *out, const char *z){
678  unsigned int c;
679  fputc('"', out);
680  while( (c = *(z++))!=0 ){
681    if( c=='\\' ){
682      fputc(c, out);
683      fputc(c, out);
684    }else if( c=='"' ){
685      fputc('\\', out);
686      fputc('"', out);
687    }else if( c=='\t' ){
688      fputc('\\', out);
689      fputc('t', out);
690    }else if( c=='\n' ){
691      fputc('\\', out);
692      fputc('n', out);
693    }else if( c=='\r' ){
694      fputc('\\', out);
695      fputc('r', out);
696    }else if( !isprint(c&0xff) ){
697      fprintf(out, "\\%03o", c&0xff);
698    }else{
699      fputc(c, out);
700    }
701  }
702  fputc('"', out);
703}
704
705/*
706** Output the given string with characters that are special to
707** HTML escaped.
708*/
709static void output_html_string(FILE *out, const char *z){
710  int i;
711  if( z==0 ) z = "";
712  while( *z ){
713    for(i=0;   z[i]
714            && z[i]!='<'
715            && z[i]!='&'
716            && z[i]!='>'
717            && z[i]!='\"'
718            && z[i]!='\'';
719        i++){}
720    if( i>0 ){
721      fprintf(out,"%.*s",i,z);
722    }
723    if( z[i]=='<' ){
724      fprintf(out,"&lt;");
725    }else if( z[i]=='&' ){
726      fprintf(out,"&amp;");
727    }else if( z[i]=='>' ){
728      fprintf(out,"&gt;");
729    }else if( z[i]=='\"' ){
730      fprintf(out,"&quot;");
731    }else if( z[i]=='\'' ){
732      fprintf(out,"&#39;");
733    }else{
734      break;
735    }
736    z += i + 1;
737  }
738}
739
740/*
741** If a field contains any character identified by a 1 in the following
742** array, then the string must be quoted for CSV.
743*/
744static const char needCsvQuote[] = {
745  1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
746  1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
747  1, 0, 1, 0, 0, 0, 0, 1,   0, 0, 0, 0, 0, 0, 0, 0,
748  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
749  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
750  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
751  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
752  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 1,
753  1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
754  1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
755  1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
756  1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
757  1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
758  1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
759  1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
760  1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
761};
762
763/*
764** Output a single term of CSV.  Actually, p->colSeparator is used for
765** the separator, which may or may not be a comma.  p->nullValue is
766** the null value.  Strings are quoted if necessary.  The separator
767** is only issued if bSep is true.
768*/
769static void output_csv(ShellState *p, const char *z, int bSep){
770  FILE *out = p->out;
771  if( z==0 ){
772    fprintf(out,"%s",p->nullValue);
773  }else{
774    int i;
775    int nSep = strlen30(p->colSeparator);
776    for(i=0; z[i]; i++){
777      if( needCsvQuote[((unsigned char*)z)[i]]
778         || (z[i]==p->colSeparator[0] &&
779             (nSep==1 || memcmp(z, p->colSeparator, nSep)==0)) ){
780        i = 0;
781        break;
782      }
783    }
784    if( i==0 ){
785      putc('"', out);
786      for(i=0; z[i]; i++){
787        if( z[i]=='"' ) putc('"', out);
788        putc(z[i], out);
789      }
790      putc('"', out);
791    }else{
792      fprintf(out, "%s", z);
793    }
794  }
795  if( bSep ){
796    fprintf(p->out, "%s", p->colSeparator);
797  }
798}
799
800#ifdef SIGINT
801/*
802** This routine runs when the user presses Ctrl-C
803*/
804static void interrupt_handler(int NotUsed){
805  UNUSED_PARAMETER(NotUsed);
806  seenInterrupt++;
807  if( seenInterrupt>2 ) exit(1);
808  if( globalDb ) sqlite3_interrupt(globalDb);
809}
810#endif
811
812/*
813** This is the callback routine that the shell
814** invokes for each row of a query result.
815*/
816static int shell_callback(
817  void *pArg,
818  int nArg,        /* Number of result columns */
819  char **azArg,    /* Text of each result column */
820  char **azCol,    /* Column names */
821  int *aiType      /* Column types */
822){
823  int i;
824  ShellState *p = (ShellState*)pArg;
825
826  switch( p->mode ){
827    case MODE_Line: {
828      int w = 5;
829      if( azArg==0 ) break;
830      for(i=0; i<nArg; i++){
831        int len = strlen30(azCol[i] ? azCol[i] : "");
832        if( len>w ) w = len;
833      }
834      if( p->cnt++>0 ) fprintf(p->out, "%s", p->rowSeparator);
835      for(i=0; i<nArg; i++){
836        fprintf(p->out,"%*s = %s%s", w, azCol[i],
837                azArg[i] ? azArg[i] : p->nullValue, p->rowSeparator);
838      }
839      break;
840    }
841    case MODE_Explain:
842    case MODE_Column: {
843      if( p->cnt++==0 ){
844        for(i=0; i<nArg; i++){
845          int w, n;
846          if( i<ArraySize(p->colWidth) ){
847            w = p->colWidth[i];
848          }else{
849            w = 0;
850          }
851          if( w==0 ){
852            w = strlen30(azCol[i] ? azCol[i] : "");
853            if( w<10 ) w = 10;
854            n = strlen30(azArg && azArg[i] ? azArg[i] : p->nullValue);
855            if( w<n ) w = n;
856          }
857          if( i<ArraySize(p->actualWidth) ){
858            p->actualWidth[i] = w;
859          }
860          if( p->showHeader ){
861            if( w<0 ){
862              fprintf(p->out,"%*.*s%s",-w,-w,azCol[i],
863                      i==nArg-1 ? p->rowSeparator : "  ");
864            }else{
865              fprintf(p->out,"%-*.*s%s",w,w,azCol[i],
866                      i==nArg-1 ? p->rowSeparator : "  ");
867            }
868          }
869        }
870        if( p->showHeader ){
871          for(i=0; i<nArg; i++){
872            int w;
873            if( i<ArraySize(p->actualWidth) ){
874               w = p->actualWidth[i];
875               if( w<0 ) w = -w;
876            }else{
877               w = 10;
878            }
879            fprintf(p->out,"%-*.*s%s",w,w,"-----------------------------------"
880                   "----------------------------------------------------------",
881                    i==nArg-1 ? p->rowSeparator : "  ");
882          }
883        }
884      }
885      if( azArg==0 ) break;
886      for(i=0; i<nArg; i++){
887        int w;
888        if( i<ArraySize(p->actualWidth) ){
889           w = p->actualWidth[i];
890        }else{
891           w = 10;
892        }
893        if( p->mode==MODE_Explain && azArg[i] && strlen30(azArg[i])>w ){
894          w = strlen30(azArg[i]);
895        }
896        if( i==1 && p->aiIndent && p->pStmt ){
897          if( p->iIndent<p->nIndent ){
898            fprintf(p->out, "%*.s", p->aiIndent[p->iIndent], "");
899          }
900          p->iIndent++;
901        }
902        if( w<0 ){
903          fprintf(p->out,"%*.*s%s",-w,-w,
904              azArg[i] ? azArg[i] : p->nullValue,
905              i==nArg-1 ? p->rowSeparator : "  ");
906        }else{
907          fprintf(p->out,"%-*.*s%s",w,w,
908              azArg[i] ? azArg[i] : p->nullValue,
909              i==nArg-1 ? p->rowSeparator : "  ");
910        }
911      }
912      break;
913    }
914    case MODE_Semi:
915    case MODE_List: {
916      if( p->cnt++==0 && p->showHeader ){
917        for(i=0; i<nArg; i++){
918          fprintf(p->out,"%s%s",azCol[i],
919                  i==nArg-1 ? p->rowSeparator : p->colSeparator);
920        }
921      }
922      if( azArg==0 ) break;
923      for(i=0; i<nArg; i++){
924        char *z = azArg[i];
925        if( z==0 ) z = p->nullValue;
926        fprintf(p->out, "%s", z);
927        if( i<nArg-1 ){
928          fprintf(p->out, "%s", p->colSeparator);
929        }else if( p->mode==MODE_Semi ){
930          fprintf(p->out, ";%s", p->rowSeparator);
931        }else{
932          fprintf(p->out, "%s", p->rowSeparator);
933        }
934      }
935      break;
936    }
937    case MODE_Html: {
938      if( p->cnt++==0 && p->showHeader ){
939        fprintf(p->out,"<TR>");
940        for(i=0; i<nArg; i++){
941          fprintf(p->out,"<TH>");
942          output_html_string(p->out, azCol[i]);
943          fprintf(p->out,"</TH>\n");
944        }
945        fprintf(p->out,"</TR>\n");
946      }
947      if( azArg==0 ) break;
948      fprintf(p->out,"<TR>");
949      for(i=0; i<nArg; i++){
950        fprintf(p->out,"<TD>");
951        output_html_string(p->out, azArg[i] ? azArg[i] : p->nullValue);
952        fprintf(p->out,"</TD>\n");
953      }
954      fprintf(p->out,"</TR>\n");
955      break;
956    }
957    case MODE_Tcl: {
958      if( p->cnt++==0 && p->showHeader ){
959        for(i=0; i<nArg; i++){
960          output_c_string(p->out,azCol[i] ? azCol[i] : "");
961          if(i<nArg-1) fprintf(p->out, "%s", p->colSeparator);
962        }
963        fprintf(p->out, "%s", p->rowSeparator);
964      }
965      if( azArg==0 ) break;
966      for(i=0; i<nArg; i++){
967        output_c_string(p->out, azArg[i] ? azArg[i] : p->nullValue);
968        if(i<nArg-1) fprintf(p->out, "%s", p->colSeparator);
969      }
970      fprintf(p->out, "%s", p->rowSeparator);
971      break;
972    }
973    case MODE_Csv: {
974      setBinaryMode(p->out);
975      if( p->cnt++==0 && p->showHeader ){
976        for(i=0; i<nArg; i++){
977          output_csv(p, azCol[i] ? azCol[i] : "", i<nArg-1);
978        }
979        fprintf(p->out, "%s", p->rowSeparator);
980      }
981      if( nArg>0 ){
982        for(i=0; i<nArg; i++){
983          output_csv(p, azArg[i], i<nArg-1);
984        }
985        fprintf(p->out, "%s", p->rowSeparator);
986      }
987      setTextMode(p->out);
988      break;
989    }
990    case MODE_Insert: {
991      p->cnt++;
992      if( azArg==0 ) break;
993      fprintf(p->out,"INSERT INTO %s",p->zDestTable);
994      if( p->showHeader ){
995        fprintf(p->out,"(");
996        for(i=0; i<nArg; i++){
997          char *zSep = i>0 ? ",": "";
998          fprintf(p->out, "%s%s", zSep, azCol[i]);
999        }
1000        fprintf(p->out,")");
1001      }
1002      fprintf(p->out," VALUES(");
1003      for(i=0; i<nArg; i++){
1004        char *zSep = i>0 ? ",": "";
1005        if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){
1006          fprintf(p->out,"%sNULL",zSep);
1007        }else if( aiType && aiType[i]==SQLITE_TEXT ){
1008          if( zSep[0] ) fprintf(p->out,"%s",zSep);
1009          output_quoted_string(p->out, azArg[i]);
1010        }else if( aiType && (aiType[i]==SQLITE_INTEGER
1011                             || aiType[i]==SQLITE_FLOAT) ){
1012          fprintf(p->out,"%s%s",zSep, azArg[i]);
1013        }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){
1014          const void *pBlob = sqlite3_column_blob(p->pStmt, i);
1015          int nBlob = sqlite3_column_bytes(p->pStmt, i);
1016          if( zSep[0] ) fprintf(p->out,"%s",zSep);
1017          output_hex_blob(p->out, pBlob, nBlob);
1018        }else if( isNumber(azArg[i], 0) ){
1019          fprintf(p->out,"%s%s",zSep, azArg[i]);
1020        }else{
1021          if( zSep[0] ) fprintf(p->out,"%s",zSep);
1022          output_quoted_string(p->out, azArg[i]);
1023        }
1024      }
1025      fprintf(p->out,");\n");
1026      break;
1027    }
1028    case MODE_Ascii: {
1029      if( p->cnt++==0 && p->showHeader ){
1030        for(i=0; i<nArg; i++){
1031          if( i>0 ) fprintf(p->out, "%s", p->colSeparator);
1032          fprintf(p->out,"%s",azCol[i] ? azCol[i] : "");
1033        }
1034        fprintf(p->out, "%s", p->rowSeparator);
1035      }
1036      if( azArg==0 ) break;
1037      for(i=0; i<nArg; i++){
1038        if( i>0 ) fprintf(p->out, "%s", p->colSeparator);
1039        fprintf(p->out,"%s",azArg[i] ? azArg[i] : p->nullValue);
1040      }
1041      fprintf(p->out, "%s", p->rowSeparator);
1042      break;
1043    }
1044  }
1045  return 0;
1046}
1047
1048/*
1049** This is the callback routine that the SQLite library
1050** invokes for each row of a query result.
1051*/
1052static int callback(void *pArg, int nArg, char **azArg, char **azCol){
1053  /* since we don't have type info, call the shell_callback with a NULL value */
1054  return shell_callback(pArg, nArg, azArg, azCol, NULL);
1055}
1056
1057/*
1058** Set the destination table field of the ShellState structure to
1059** the name of the table given.  Escape any quote characters in the
1060** table name.
1061*/
1062static void set_table_name(ShellState *p, const char *zName){
1063  int i, n;
1064  int needQuote;
1065  char *z;
1066
1067  if( p->zDestTable ){
1068    free(p->zDestTable);
1069    p->zDestTable = 0;
1070  }
1071  if( zName==0 ) return;
1072  needQuote = !isalpha((unsigned char)*zName) && *zName!='_';
1073  for(i=n=0; zName[i]; i++, n++){
1074    if( !isalnum((unsigned char)zName[i]) && zName[i]!='_' ){
1075      needQuote = 1;
1076      if( zName[i]=='\'' ) n++;
1077    }
1078  }
1079  if( needQuote ) n += 2;
1080  z = p->zDestTable = malloc( n+1 );
1081  if( z==0 ){
1082    fprintf(stderr,"Error: out of memory\n");
1083    exit(1);
1084  }
1085  n = 0;
1086  if( needQuote ) z[n++] = '\'';
1087  for(i=0; zName[i]; i++){
1088    z[n++] = zName[i];
1089    if( zName[i]=='\'' ) z[n++] = '\'';
1090  }
1091  if( needQuote ) z[n++] = '\'';
1092  z[n] = 0;
1093}
1094
1095/* zIn is either a pointer to a NULL-terminated string in memory obtained
1096** from malloc(), or a NULL pointer. The string pointed to by zAppend is
1097** added to zIn, and the result returned in memory obtained from malloc().
1098** zIn, if it was not NULL, is freed.
1099**
1100** If the third argument, quote, is not '\0', then it is used as a
1101** quote character for zAppend.
1102*/
1103static char *appendText(char *zIn, char const *zAppend, char quote){
1104  int len;
1105  int i;
1106  int nAppend = strlen30(zAppend);
1107  int nIn = (zIn?strlen30(zIn):0);
1108
1109  len = nAppend+nIn+1;
1110  if( quote ){
1111    len += 2;
1112    for(i=0; i<nAppend; i++){
1113      if( zAppend[i]==quote ) len++;
1114    }
1115  }
1116
1117  zIn = (char *)realloc(zIn, len);
1118  if( !zIn ){
1119    return 0;
1120  }
1121
1122  if( quote ){
1123    char *zCsr = &zIn[nIn];
1124    *zCsr++ = quote;
1125    for(i=0; i<nAppend; i++){
1126      *zCsr++ = zAppend[i];
1127      if( zAppend[i]==quote ) *zCsr++ = quote;
1128    }
1129    *zCsr++ = quote;
1130    *zCsr++ = '\0';
1131    assert( (zCsr-zIn)==len );
1132  }else{
1133    memcpy(&zIn[nIn], zAppend, nAppend);
1134    zIn[len-1] = '\0';
1135  }
1136
1137  return zIn;
1138}
1139
1140
1141/*
1142** Execute a query statement that will generate SQL output.  Print
1143** the result columns, comma-separated, on a line and then add a
1144** semicolon terminator to the end of that line.
1145**
1146** If the number of columns is 1 and that column contains text "--"
1147** then write the semicolon on a separate line.  That way, if a
1148** "--" comment occurs at the end of the statement, the comment
1149** won't consume the semicolon terminator.
1150*/
1151static int run_table_dump_query(
1152  ShellState *p,           /* Query context */
1153  const char *zSelect,     /* SELECT statement to extract content */
1154  const char *zFirstRow    /* Print before first row, if not NULL */
1155){
1156  sqlite3_stmt *pSelect;
1157  int rc;
1158  int nResult;
1159  int i;
1160  const char *z;
1161  rc = sqlite3_prepare_v2(p->db, zSelect, -1, &pSelect, 0);
1162  if( rc!=SQLITE_OK || !pSelect ){
1163    fprintf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, sqlite3_errmsg(p->db));
1164    if( (rc&0xff)!=SQLITE_CORRUPT ) p->nErr++;
1165    return rc;
1166  }
1167  rc = sqlite3_step(pSelect);
1168  nResult = sqlite3_column_count(pSelect);
1169  while( rc==SQLITE_ROW ){
1170    if( zFirstRow ){
1171      fprintf(p->out, "%s", zFirstRow);
1172      zFirstRow = 0;
1173    }
1174    z = (const char*)sqlite3_column_text(pSelect, 0);
1175    fprintf(p->out, "%s", z);
1176    for(i=1; i<nResult; i++){
1177      fprintf(p->out, ",%s", sqlite3_column_text(pSelect, i));
1178    }
1179    if( z==0 ) z = "";
1180    while( z[0] && (z[0]!='-' || z[1]!='-') ) z++;
1181    if( z[0] ){
1182      fprintf(p->out, "\n;\n");
1183    }else{
1184      fprintf(p->out, ";\n");
1185    }
1186    rc = sqlite3_step(pSelect);
1187  }
1188  rc = sqlite3_finalize(pSelect);
1189  if( rc!=SQLITE_OK ){
1190    fprintf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, sqlite3_errmsg(p->db));
1191    if( (rc&0xff)!=SQLITE_CORRUPT ) p->nErr++;
1192  }
1193  return rc;
1194}
1195
1196/*
1197** Allocate space and save off current error string.
1198*/
1199static char *save_err_msg(
1200  sqlite3 *db            /* Database to query */
1201){
1202  int nErrMsg = 1+strlen30(sqlite3_errmsg(db));
1203  char *zErrMsg = sqlite3_malloc64(nErrMsg);
1204  if( zErrMsg ){
1205    memcpy(zErrMsg, sqlite3_errmsg(db), nErrMsg);
1206  }
1207  return zErrMsg;
1208}
1209
1210/*
1211** Display memory stats.
1212*/
1213static int display_stats(
1214  sqlite3 *db,                /* Database to query */
1215  ShellState *pArg,           /* Pointer to ShellState */
1216  int bReset                  /* True to reset the stats */
1217){
1218  int iCur;
1219  int iHiwtr;
1220
1221  if( pArg && pArg->out ){
1222
1223    iHiwtr = iCur = -1;
1224    sqlite3_status(SQLITE_STATUS_MEMORY_USED, &iCur, &iHiwtr, bReset);
1225    fprintf(pArg->out,
1226            "Memory Used:                         %d (max %d) bytes\n",
1227            iCur, iHiwtr);
1228    iHiwtr = iCur = -1;
1229    sqlite3_status(SQLITE_STATUS_MALLOC_COUNT, &iCur, &iHiwtr, bReset);
1230    fprintf(pArg->out, "Number of Outstanding Allocations:   %d (max %d)\n",
1231            iCur, iHiwtr);
1232    if( pArg->shellFlgs & SHFLG_Pagecache ){
1233      iHiwtr = iCur = -1;
1234      sqlite3_status(SQLITE_STATUS_PAGECACHE_USED, &iCur, &iHiwtr, bReset);
1235      fprintf(pArg->out,
1236              "Number of Pcache Pages Used:         %d (max %d) pages\n",
1237              iCur, iHiwtr);
1238    }
1239    iHiwtr = iCur = -1;
1240    sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &iCur, &iHiwtr, bReset);
1241    fprintf(pArg->out,
1242            "Number of Pcache Overflow Bytes:     %d (max %d) bytes\n",
1243            iCur, iHiwtr);
1244    if( pArg->shellFlgs & SHFLG_Scratch ){
1245      iHiwtr = iCur = -1;
1246      sqlite3_status(SQLITE_STATUS_SCRATCH_USED, &iCur, &iHiwtr, bReset);
1247      fprintf(pArg->out, "Number of Scratch Allocations Used:  %d (max %d)\n",
1248              iCur, iHiwtr);
1249    }
1250    iHiwtr = iCur = -1;
1251    sqlite3_status(SQLITE_STATUS_SCRATCH_OVERFLOW, &iCur, &iHiwtr, bReset);
1252    fprintf(pArg->out,
1253            "Number of Scratch Overflow Bytes:    %d (max %d) bytes\n",
1254            iCur, iHiwtr);
1255    iHiwtr = iCur = -1;
1256    sqlite3_status(SQLITE_STATUS_MALLOC_SIZE, &iCur, &iHiwtr, bReset);
1257    fprintf(pArg->out, "Largest Allocation:                  %d bytes\n",
1258            iHiwtr);
1259    iHiwtr = iCur = -1;
1260    sqlite3_status(SQLITE_STATUS_PAGECACHE_SIZE, &iCur, &iHiwtr, bReset);
1261    fprintf(pArg->out, "Largest Pcache Allocation:           %d bytes\n",
1262            iHiwtr);
1263    iHiwtr = iCur = -1;
1264    sqlite3_status(SQLITE_STATUS_SCRATCH_SIZE, &iCur, &iHiwtr, bReset);
1265    fprintf(pArg->out, "Largest Scratch Allocation:          %d bytes\n",
1266            iHiwtr);
1267#ifdef YYTRACKMAXSTACKDEPTH
1268    iHiwtr = iCur = -1;
1269    sqlite3_status(SQLITE_STATUS_PARSER_STACK, &iCur, &iHiwtr, bReset);
1270    fprintf(pArg->out, "Deepest Parser Stack:                %d (max %d)\n",
1271            iCur, iHiwtr);
1272#endif
1273  }
1274
1275  if( pArg && pArg->out && db ){
1276    if( pArg->shellFlgs & SHFLG_Lookaside ){
1277      iHiwtr = iCur = -1;
1278      sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_USED,
1279                        &iCur, &iHiwtr, bReset);
1280      fprintf(pArg->out, "Lookaside Slots Used:                %d (max %d)\n",
1281              iCur, iHiwtr);
1282      sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_HIT,
1283                        &iCur, &iHiwtr, bReset);
1284      fprintf(pArg->out, "Successful lookaside attempts:       %d\n", iHiwtr);
1285      sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE,
1286                        &iCur, &iHiwtr, bReset);
1287      fprintf(pArg->out, "Lookaside failures due to size:      %d\n", iHiwtr);
1288      sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL,
1289                        &iCur, &iHiwtr, bReset);
1290      fprintf(pArg->out, "Lookaside failures due to OOM:       %d\n", iHiwtr);
1291    }
1292    iHiwtr = iCur = -1;
1293    sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_USED, &iCur, &iHiwtr, bReset);
1294    fprintf(pArg->out, "Pager Heap Usage:                    %d bytes\n",iCur);
1295    iHiwtr = iCur = -1;
1296    sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_HIT, &iCur, &iHiwtr, 1);
1297    fprintf(pArg->out, "Page cache hits:                     %d\n", iCur);
1298    iHiwtr = iCur = -1;
1299    sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_MISS, &iCur, &iHiwtr, 1);
1300    fprintf(pArg->out, "Page cache misses:                   %d\n", iCur);
1301    iHiwtr = iCur = -1;
1302    sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_WRITE, &iCur, &iHiwtr, 1);
1303    fprintf(pArg->out, "Page cache writes:                   %d\n", iCur);
1304    iHiwtr = iCur = -1;
1305    sqlite3_db_status(db, SQLITE_DBSTATUS_SCHEMA_USED, &iCur, &iHiwtr, bReset);
1306    fprintf(pArg->out, "Schema Heap Usage:                   %d bytes\n",iCur);
1307    iHiwtr = iCur = -1;
1308    sqlite3_db_status(db, SQLITE_DBSTATUS_STMT_USED, &iCur, &iHiwtr, bReset);
1309    fprintf(pArg->out, "Statement Heap/Lookaside Usage:      %d bytes\n",iCur);
1310  }
1311
1312  if( pArg && pArg->out && db && pArg->pStmt ){
1313    iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP,
1314                               bReset);
1315    fprintf(pArg->out, "Fullscan Steps:                      %d\n", iCur);
1316    iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_SORT, bReset);
1317    fprintf(pArg->out, "Sort Operations:                     %d\n", iCur);
1318    iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_AUTOINDEX,bReset);
1319    fprintf(pArg->out, "Autoindex Inserts:                   %d\n", iCur);
1320    iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_VM_STEP, bReset);
1321    fprintf(pArg->out, "Virtual Machine Steps:               %d\n", iCur);
1322  }
1323
1324  return 0;
1325}
1326
1327/*
1328** Display scan stats.
1329*/
1330static void display_scanstats(
1331  sqlite3 *db,                    /* Database to query */
1332  ShellState *pArg                /* Pointer to ShellState */
1333){
1334#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
1335  int i, k, n, mx;
1336  fprintf(pArg->out, "-------- scanstats --------\n");
1337  mx = 0;
1338  for(k=0; k<=mx; k++){
1339    double rEstLoop = 1.0;
1340    for(i=n=0; 1; i++){
1341      sqlite3_stmt *p = pArg->pStmt;
1342      sqlite3_int64 nLoop, nVisit;
1343      double rEst;
1344      int iSid;
1345      const char *zExplain;
1346      if( sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NLOOP, (void*)&nLoop) ){
1347        break;
1348      }
1349      sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_SELECTID, (void*)&iSid);
1350      if( iSid>mx ) mx = iSid;
1351      if( iSid!=k ) continue;
1352      if( n==0 ){
1353        rEstLoop = (double)nLoop;
1354        if( k>0 ) fprintf(pArg->out, "-------- subquery %d -------\n", k);
1355      }
1356      n++;
1357      sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NVISIT, (void*)&nVisit);
1358      sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EST, (void*)&rEst);
1359      sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EXPLAIN, (void*)&zExplain);
1360      fprintf(pArg->out, "Loop %2d: %s\n", n, zExplain);
1361      rEstLoop *= rEst;
1362      fprintf(pArg->out,
1363          "         nLoop=%-8lld nRow=%-8lld estRow=%-8lld estRow/Loop=%-8g\n",
1364          nLoop, nVisit, (sqlite3_int64)(rEstLoop+0.5), rEst
1365      );
1366    }
1367  }
1368  fprintf(pArg->out, "---------------------------\n");
1369#endif
1370}
1371
1372/*
1373** Parameter azArray points to a zero-terminated array of strings. zStr
1374** points to a single nul-terminated string. Return non-zero if zStr
1375** is equal, according to strcmp(), to any of the strings in the array.
1376** Otherwise, return zero.
1377*/
1378static int str_in_array(const char *zStr, const char **azArray){
1379  int i;
1380  for(i=0; azArray[i]; i++){
1381    if( 0==strcmp(zStr, azArray[i]) ) return 1;
1382  }
1383  return 0;
1384}
1385
1386/*
1387** If compiled statement pSql appears to be an EXPLAIN statement, allocate
1388** and populate the ShellState.aiIndent[] array with the number of
1389** spaces each opcode should be indented before it is output.
1390**
1391** The indenting rules are:
1392**
1393**     * For each "Next", "Prev", "VNext" or "VPrev" instruction, indent
1394**       all opcodes that occur between the p2 jump destination and the opcode
1395**       itself by 2 spaces.
1396**
1397**     * For each "Goto", if the jump destination is earlier in the program
1398**       and ends on one of:
1399**          Yield  SeekGt  SeekLt  RowSetRead  Rewind
1400**       or if the P1 parameter is one instead of zero,
1401**       then indent all opcodes between the earlier instruction
1402**       and "Goto" by 2 spaces.
1403*/
1404static void explain_data_prepare(ShellState *p, sqlite3_stmt *pSql){
1405  const char *zSql;               /* The text of the SQL statement */
1406  const char *z;                  /* Used to check if this is an EXPLAIN */
1407  int *abYield = 0;               /* True if op is an OP_Yield */
1408  int nAlloc = 0;                 /* Allocated size of p->aiIndent[], abYield */
1409  int iOp;                        /* Index of operation in p->aiIndent[] */
1410
1411  const char *azNext[] = { "Next", "Prev", "VPrev", "VNext", "SorterNext",
1412                           "NextIfOpen", "PrevIfOpen", 0 };
1413  const char *azYield[] = { "Yield", "SeekLT", "SeekGT", "RowSetRead",
1414                            "Rewind", 0 };
1415  const char *azGoto[] = { "Goto", 0 };
1416
1417  /* Try to figure out if this is really an EXPLAIN statement. If this
1418  ** cannot be verified, return early.  */
1419  zSql = sqlite3_sql(pSql);
1420  if( zSql==0 ) return;
1421  for(z=zSql; *z==' ' || *z=='\t' || *z=='\n' || *z=='\f' || *z=='\r'; z++);
1422  if( sqlite3_strnicmp(z, "explain", 7) ) return;
1423
1424  for(iOp=0; SQLITE_ROW==sqlite3_step(pSql); iOp++){
1425    int i;
1426    int iAddr = sqlite3_column_int(pSql, 0);
1427    const char *zOp = (const char*)sqlite3_column_text(pSql, 1);
1428
1429    /* Set p2 to the P2 field of the current opcode. Then, assuming that
1430    ** p2 is an instruction address, set variable p2op to the index of that
1431    ** instruction in the aiIndent[] array. p2 and p2op may be different if
1432    ** the current instruction is part of a sub-program generated by an
1433    ** SQL trigger or foreign key.  */
1434    int p2 = sqlite3_column_int(pSql, 3);
1435    int p2op = (p2 + (iOp-iAddr));
1436
1437    /* Grow the p->aiIndent array as required */
1438    if( iOp>=nAlloc ){
1439      nAlloc += 100;
1440      p->aiIndent = (int*)sqlite3_realloc64(p->aiIndent, nAlloc*sizeof(int));
1441      abYield = (int*)sqlite3_realloc64(abYield, nAlloc*sizeof(int));
1442    }
1443    abYield[iOp] = str_in_array(zOp, azYield);
1444    p->aiIndent[iOp] = 0;
1445    p->nIndent = iOp+1;
1446
1447    if( str_in_array(zOp, azNext) ){
1448      for(i=p2op; i<iOp; i++) p->aiIndent[i] += 2;
1449    }
1450    if( str_in_array(zOp, azGoto) && p2op<p->nIndent
1451     && (abYield[p2op] || sqlite3_column_int(pSql, 2))
1452    ){
1453      for(i=p2op+1; i<iOp; i++) p->aiIndent[i] += 2;
1454    }
1455  }
1456
1457  p->iIndent = 0;
1458  sqlite3_free(abYield);
1459  sqlite3_reset(pSql);
1460}
1461
1462/*
1463** Free the array allocated by explain_data_prepare().
1464*/
1465static void explain_data_delete(ShellState *p){
1466  sqlite3_free(p->aiIndent);
1467  p->aiIndent = 0;
1468  p->nIndent = 0;
1469  p->iIndent = 0;
1470}
1471
1472/*
1473** Execute a statement or set of statements.  Print
1474** any result rows/columns depending on the current mode
1475** set via the supplied callback.
1476**
1477** This is very similar to SQLite's built-in sqlite3_exec()
1478** function except it takes a slightly different callback
1479** and callback data argument.
1480*/
1481static int shell_exec(
1482  sqlite3 *db,                              /* An open database */
1483  const char *zSql,                         /* SQL to be evaluated */
1484  int (*xCallback)(void*,int,char**,char**,int*),   /* Callback function */
1485                                            /* (not the same as sqlite3_exec) */
1486  ShellState *pArg,                         /* Pointer to ShellState */
1487  char **pzErrMsg                           /* Error msg written here */
1488){
1489  sqlite3_stmt *pStmt = NULL;     /* Statement to execute. */
1490  int rc = SQLITE_OK;             /* Return Code */
1491  int rc2;
1492  const char *zLeftover;          /* Tail of unprocessed SQL */
1493
1494  if( pzErrMsg ){
1495    *pzErrMsg = NULL;
1496  }
1497
1498  while( zSql[0] && (SQLITE_OK == rc) ){
1499    rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zLeftover);
1500    if( SQLITE_OK != rc ){
1501      if( pzErrMsg ){
1502        *pzErrMsg = save_err_msg(db);
1503      }
1504    }else{
1505      if( !pStmt ){
1506        /* this happens for a comment or white-space */
1507        zSql = zLeftover;
1508        while( IsSpace(zSql[0]) ) zSql++;
1509        continue;
1510      }
1511
1512      /* save off the prepared statment handle and reset row count */
1513      if( pArg ){
1514        pArg->pStmt = pStmt;
1515        pArg->cnt = 0;
1516      }
1517
1518      /* echo the sql statement if echo on */
1519      if( pArg && pArg->echoOn ){
1520        const char *zStmtSql = sqlite3_sql(pStmt);
1521        fprintf(pArg->out, "%s\n", zStmtSql ? zStmtSql : zSql);
1522      }
1523
1524      /* Show the EXPLAIN QUERY PLAN if .eqp is on */
1525      if( pArg && pArg->autoEQP ){
1526        sqlite3_stmt *pExplain;
1527        char *zEQP = sqlite3_mprintf("EXPLAIN QUERY PLAN %s",
1528                                     sqlite3_sql(pStmt));
1529        rc = sqlite3_prepare_v2(db, zEQP, -1, &pExplain, 0);
1530        if( rc==SQLITE_OK ){
1531          while( sqlite3_step(pExplain)==SQLITE_ROW ){
1532            fprintf(pArg->out,"--EQP-- %d,", sqlite3_column_int(pExplain, 0));
1533            fprintf(pArg->out,"%d,", sqlite3_column_int(pExplain, 1));
1534            fprintf(pArg->out,"%d,", sqlite3_column_int(pExplain, 2));
1535            fprintf(pArg->out,"%s\n", sqlite3_column_text(pExplain, 3));
1536          }
1537        }
1538        sqlite3_finalize(pExplain);
1539        sqlite3_free(zEQP);
1540      }
1541
1542      /* If the shell is currently in ".explain" mode, gather the extra
1543      ** data required to add indents to the output.*/
1544      if( pArg && pArg->mode==MODE_Explain ){
1545        explain_data_prepare(pArg, pStmt);
1546      }
1547
1548      /* perform the first step.  this will tell us if we
1549      ** have a result set or not and how wide it is.
1550      */
1551      rc = sqlite3_step(pStmt);
1552      /* if we have a result set... */
1553      if( SQLITE_ROW == rc ){
1554        /* if we have a callback... */
1555        if( xCallback ){
1556          /* allocate space for col name ptr, value ptr, and type */
1557          int nCol = sqlite3_column_count(pStmt);
1558          void *pData = sqlite3_malloc64(3*nCol*sizeof(const char*) + 1);
1559          if( !pData ){
1560            rc = SQLITE_NOMEM;
1561          }else{
1562            char **azCols = (char **)pData;      /* Names of result columns */
1563            char **azVals = &azCols[nCol];       /* Results */
1564            int *aiTypes = (int *)&azVals[nCol]; /* Result types */
1565            int i, x;
1566            assert(sizeof(int) <= sizeof(char *));
1567            /* save off ptrs to column names */
1568            for(i=0; i<nCol; i++){
1569              azCols[i] = (char *)sqlite3_column_name(pStmt, i);
1570            }
1571            do{
1572              /* extract the data and data types */
1573              for(i=0; i<nCol; i++){
1574                aiTypes[i] = x = sqlite3_column_type(pStmt, i);
1575                if( x==SQLITE_BLOB && pArg && pArg->mode==MODE_Insert ){
1576                  azVals[i] = "";
1577                }else{
1578                  azVals[i] = (char*)sqlite3_column_text(pStmt, i);
1579                }
1580                if( !azVals[i] && (aiTypes[i]!=SQLITE_NULL) ){
1581                  rc = SQLITE_NOMEM;
1582                  break; /* from for */
1583                }
1584              } /* end for */
1585
1586              /* if data and types extracted successfully... */
1587              if( SQLITE_ROW == rc ){
1588                /* call the supplied callback with the result row data */
1589                if( xCallback(pArg, nCol, azVals, azCols, aiTypes) ){
1590                  rc = SQLITE_ABORT;
1591                }else{
1592                  rc = sqlite3_step(pStmt);
1593                }
1594              }
1595            } while( SQLITE_ROW == rc );
1596            sqlite3_free(pData);
1597          }
1598        }else{
1599          do{
1600            rc = sqlite3_step(pStmt);
1601          } while( rc == SQLITE_ROW );
1602        }
1603      }
1604
1605      explain_data_delete(pArg);
1606
1607      /* print usage stats if stats on */
1608      if( pArg && pArg->statsOn ){
1609        display_stats(db, pArg, 0);
1610      }
1611
1612      /* print loop-counters if required */
1613      if( pArg && pArg->scanstatsOn ){
1614        display_scanstats(db, pArg);
1615      }
1616
1617      /* Finalize the statement just executed. If this fails, save a
1618      ** copy of the error message. Otherwise, set zSql to point to the
1619      ** next statement to execute. */
1620      rc2 = sqlite3_finalize(pStmt);
1621      if( rc!=SQLITE_NOMEM ) rc = rc2;
1622      if( rc==SQLITE_OK ){
1623        zSql = zLeftover;
1624        while( IsSpace(zSql[0]) ) zSql++;
1625      }else if( pzErrMsg ){
1626        *pzErrMsg = save_err_msg(db);
1627      }
1628
1629      /* clear saved stmt handle */
1630      if( pArg ){
1631        pArg->pStmt = NULL;
1632      }
1633    }
1634  } /* end while */
1635
1636  return rc;
1637}
1638
1639
1640/*
1641** This is a different callback routine used for dumping the database.
1642** Each row received by this callback consists of a table name,
1643** the table type ("index" or "table") and SQL to create the table.
1644** This routine should print text sufficient to recreate the table.
1645*/
1646static int dump_callback(void *pArg, int nArg, char **azArg, char **azCol){
1647  int rc;
1648  const char *zTable;
1649  const char *zType;
1650  const char *zSql;
1651  const char *zPrepStmt = 0;
1652  ShellState *p = (ShellState *)pArg;
1653
1654  UNUSED_PARAMETER(azCol);
1655  if( nArg!=3 ) return 1;
1656  zTable = azArg[0];
1657  zType = azArg[1];
1658  zSql = azArg[2];
1659
1660  if( strcmp(zTable, "sqlite_sequence")==0 ){
1661    zPrepStmt = "DELETE FROM sqlite_sequence;\n";
1662  }else if( sqlite3_strglob("sqlite_stat?", zTable)==0 ){
1663    fprintf(p->out, "ANALYZE sqlite_master;\n");
1664  }else if( strncmp(zTable, "sqlite_", 7)==0 ){
1665    return 0;
1666  }else if( strncmp(zSql, "CREATE VIRTUAL TABLE", 20)==0 ){
1667    char *zIns;
1668    if( !p->writableSchema ){
1669      fprintf(p->out, "PRAGMA writable_schema=ON;\n");
1670      p->writableSchema = 1;
1671    }
1672    zIns = sqlite3_mprintf(
1673       "INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"
1674       "VALUES('table','%q','%q',0,'%q');",
1675       zTable, zTable, zSql);
1676    fprintf(p->out, "%s\n", zIns);
1677    sqlite3_free(zIns);
1678    return 0;
1679  }else{
1680    fprintf(p->out, "%s;\n", zSql);
1681  }
1682
1683  if( strcmp(zType, "table")==0 ){
1684    sqlite3_stmt *pTableInfo = 0;
1685    char *zSelect = 0;
1686    char *zTableInfo = 0;
1687    char *zTmp = 0;
1688    int nRow = 0;
1689
1690    zTableInfo = appendText(zTableInfo, "PRAGMA table_info(", 0);
1691    zTableInfo = appendText(zTableInfo, zTable, '"');
1692    zTableInfo = appendText(zTableInfo, ");", 0);
1693
1694    rc = sqlite3_prepare_v2(p->db, zTableInfo, -1, &pTableInfo, 0);
1695    free(zTableInfo);
1696    if( rc!=SQLITE_OK || !pTableInfo ){
1697      return 1;
1698    }
1699
1700    zSelect = appendText(zSelect, "SELECT 'INSERT INTO ' || ", 0);
1701    /* Always quote the table name, even if it appears to be pure ascii,
1702    ** in case it is a keyword. Ex:  INSERT INTO "table" ... */
1703    zTmp = appendText(zTmp, zTable, '"');
1704    if( zTmp ){
1705      zSelect = appendText(zSelect, zTmp, '\'');
1706      free(zTmp);
1707    }
1708    zSelect = appendText(zSelect, " || ' VALUES(' || ", 0);
1709    rc = sqlite3_step(pTableInfo);
1710    while( rc==SQLITE_ROW ){
1711      const char *zText = (const char *)sqlite3_column_text(pTableInfo, 1);
1712      zSelect = appendText(zSelect, "quote(", 0);
1713      zSelect = appendText(zSelect, zText, '"');
1714      rc = sqlite3_step(pTableInfo);
1715      if( rc==SQLITE_ROW ){
1716        zSelect = appendText(zSelect, "), ", 0);
1717      }else{
1718        zSelect = appendText(zSelect, ") ", 0);
1719      }
1720      nRow++;
1721    }
1722    rc = sqlite3_finalize(pTableInfo);
1723    if( rc!=SQLITE_OK || nRow==0 ){
1724      free(zSelect);
1725      return 1;
1726    }
1727    zSelect = appendText(zSelect, "|| ')' FROM  ", 0);
1728    zSelect = appendText(zSelect, zTable, '"');
1729
1730    rc = run_table_dump_query(p, zSelect, zPrepStmt);
1731    if( rc==SQLITE_CORRUPT ){
1732      zSelect = appendText(zSelect, " ORDER BY rowid DESC", 0);
1733      run_table_dump_query(p, zSelect, 0);
1734    }
1735    free(zSelect);
1736  }
1737  return 0;
1738}
1739
1740/*
1741** Run zQuery.  Use dump_callback() as the callback routine so that
1742** the contents of the query are output as SQL statements.
1743**
1744** If we get a SQLITE_CORRUPT error, rerun the query after appending
1745** "ORDER BY rowid DESC" to the end.
1746*/
1747static int run_schema_dump_query(
1748  ShellState *p,
1749  const char *zQuery
1750){
1751  int rc;
1752  char *zErr = 0;
1753  rc = sqlite3_exec(p->db, zQuery, dump_callback, p, &zErr);
1754  if( rc==SQLITE_CORRUPT ){
1755    char *zQ2;
1756    int len = strlen30(zQuery);
1757    fprintf(p->out, "/****** CORRUPTION ERROR *******/\n");
1758    if( zErr ){
1759      fprintf(p->out, "/****** %s ******/\n", zErr);
1760      sqlite3_free(zErr);
1761      zErr = 0;
1762    }
1763    zQ2 = malloc( len+100 );
1764    if( zQ2==0 ) return rc;
1765    sqlite3_snprintf(len+100, zQ2, "%s ORDER BY rowid DESC", zQuery);
1766    rc = sqlite3_exec(p->db, zQ2, dump_callback, p, &zErr);
1767    if( rc ){
1768      fprintf(p->out, "/****** ERROR: %s ******/\n", zErr);
1769    }else{
1770      rc = SQLITE_CORRUPT;
1771    }
1772    sqlite3_free(zErr);
1773    free(zQ2);
1774  }
1775  return rc;
1776}
1777
1778/*
1779** Text of a help message
1780*/
1781static char zHelp[] =
1782  ".backup ?DB? FILE      Backup DB (default \"main\") to FILE\n"
1783  ".bail on|off           Stop after hitting an error.  Default OFF\n"
1784  ".binary on|off         Turn binary output on or off.  Default OFF\n"
1785  ".clone NEWDB           Clone data into NEWDB from the existing database\n"
1786  ".databases             List names and files of attached databases\n"
1787  ".dbinfo ?DB?           Show status information about the database\n"
1788  ".dump ?TABLE? ...      Dump the database in an SQL text format\n"
1789  "                         If TABLE specified, only dump tables matching\n"
1790  "                         LIKE pattern TABLE.\n"
1791  ".echo on|off           Turn command echo on or off\n"
1792  ".eqp on|off            Enable or disable automatic EXPLAIN QUERY PLAN\n"
1793  ".exit                  Exit this program\n"
1794  ".explain ?on|off?      Turn output mode suitable for EXPLAIN on or off.\n"
1795  "                         With no args, it turns EXPLAIN on.\n"
1796  ".fullschema            Show schema and the content of sqlite_stat tables\n"
1797  ".headers on|off        Turn display of headers on or off\n"
1798  ".help                  Show this message\n"
1799  ".import FILE TABLE     Import data from FILE into TABLE\n"
1800  ".indexes ?TABLE?       Show names of all indexes\n"
1801  "                         If TABLE specified, only show indexes for tables\n"
1802  "                         matching LIKE pattern TABLE.\n"
1803#ifdef SQLITE_ENABLE_IOTRACE
1804  ".iotrace FILE          Enable I/O diagnostic logging to FILE\n"
1805#endif
1806  ".limit ?LIMIT? ?VAL?   Display or change the value of an SQLITE_LIMIT\n"
1807#ifndef SQLITE_OMIT_LOAD_EXTENSION
1808  ".load FILE ?ENTRY?     Load an extension library\n"
1809#endif
1810  ".log FILE|off          Turn logging on or off.  FILE can be stderr/stdout\n"
1811  ".mode MODE ?TABLE?     Set output mode where MODE is one of:\n"
1812  "                         ascii    Columns/rows delimited by 0x1F and 0x1E\n"
1813  "                         csv      Comma-separated values\n"
1814  "                         column   Left-aligned columns.  (See .width)\n"
1815  "                         html     HTML <table> code\n"
1816  "                         insert   SQL insert statements for TABLE\n"
1817  "                         line     One value per line\n"
1818  "                         list     Values delimited by .separator strings\n"
1819  "                         tabs     Tab-separated values\n"
1820  "                         tcl      TCL list elements\n"
1821  ".nullvalue STRING      Use STRING in place of NULL values\n"
1822  ".once FILENAME         Output for the next SQL command only to FILENAME\n"
1823  ".open ?FILENAME?       Close existing database and reopen FILENAME\n"
1824  ".output ?FILENAME?     Send output to FILENAME or stdout\n"
1825  ".print STRING...       Print literal STRING\n"
1826  ".prompt MAIN CONTINUE  Replace the standard prompts\n"
1827  ".quit                  Exit this program\n"
1828  ".read FILENAME         Execute SQL in FILENAME\n"
1829  ".restore ?DB? FILE     Restore content of DB (default \"main\") from FILE\n"
1830  ".save FILE             Write in-memory database into FILE\n"
1831  ".scanstats on|off      Turn sqlite3_stmt_scanstatus() metrics on or off\n"
1832  ".schema ?TABLE?        Show the CREATE statements\n"
1833  "                         If TABLE specified, only show tables matching\n"
1834  "                         LIKE pattern TABLE.\n"
1835  ".separator COL ?ROW?   Change the column separator and optionally the row\n"
1836  "                         separator for both the output mode and .import\n"
1837  ".shell CMD ARGS...     Run CMD ARGS... in a system shell\n"
1838  ".show                  Show the current values for various settings\n"
1839  ".stats on|off          Turn stats on or off\n"
1840  ".system CMD ARGS...    Run CMD ARGS... in a system shell\n"
1841  ".tables ?TABLE?        List names of tables\n"
1842  "                         If TABLE specified, only list tables matching\n"
1843  "                         LIKE pattern TABLE.\n"
1844  ".timeout MS            Try opening locked tables for MS milliseconds\n"
1845  ".timer on|off          Turn SQL timer on or off\n"
1846  ".trace FILE|off        Output each SQL statement as it is run\n"
1847  ".vfsname ?AUX?         Print the name of the VFS stack\n"
1848  ".width NUM1 NUM2 ...   Set column widths for \"column\" mode\n"
1849  "                         Negative values right-justify\n"
1850;
1851
1852/* Forward reference */
1853static int process_input(ShellState *p, FILE *in);
1854/*
1855** Implementation of the "readfile(X)" SQL function.  The entire content
1856** of the file named X is read and returned as a BLOB.  NULL is returned
1857** if the file does not exist or is unreadable.
1858*/
1859static void readfileFunc(
1860  sqlite3_context *context,
1861  int argc,
1862  sqlite3_value **argv
1863){
1864  const char *zName;
1865  FILE *in;
1866  long nIn;
1867  void *pBuf;
1868
1869  zName = (const char*)sqlite3_value_text(argv[0]);
1870  if( zName==0 ) return;
1871  in = fopen(zName, "rb");
1872  if( in==0 ) return;
1873  fseek(in, 0, SEEK_END);
1874  nIn = ftell(in);
1875  rewind(in);
1876  pBuf = sqlite3_malloc64( nIn );
1877  if( pBuf && 1==fread(pBuf, nIn, 1, in) ){
1878    sqlite3_result_blob(context, pBuf, nIn, sqlite3_free);
1879  }else{
1880    sqlite3_free(pBuf);
1881  }
1882  fclose(in);
1883}
1884
1885/*
1886** Implementation of the "writefile(X,Y)" SQL function.  The argument Y
1887** is written into file X.  The number of bytes written is returned.  Or
1888** NULL is returned if something goes wrong, such as being unable to open
1889** file X for writing.
1890*/
1891static void writefileFunc(
1892  sqlite3_context *context,
1893  int argc,
1894  sqlite3_value **argv
1895){
1896  FILE *out;
1897  const char *z;
1898  sqlite3_int64 rc;
1899  const char *zFile;
1900
1901  zFile = (const char*)sqlite3_value_text(argv[0]);
1902  if( zFile==0 ) return;
1903  out = fopen(zFile, "wb");
1904  if( out==0 ) return;
1905  z = (const char*)sqlite3_value_blob(argv[1]);
1906  if( z==0 ){
1907    rc = 0;
1908  }else{
1909    rc = fwrite(z, 1, sqlite3_value_bytes(argv[1]), out);
1910  }
1911  fclose(out);
1912  sqlite3_result_int64(context, rc);
1913}
1914
1915/*
1916** Make sure the database is open.  If it is not, then open it.  If
1917** the database fails to open, print an error message and exit.
1918*/
1919static void open_db(ShellState *p, int keepAlive){
1920  if( p->db==0 ){
1921    sqlite3_initialize();
1922    sqlite3_open(p->zDbFilename, &p->db);
1923    globalDb = p->db;
1924    if( p->db && sqlite3_errcode(p->db)==SQLITE_OK ){
1925      sqlite3_create_function(p->db, "shellstatic", 0, SQLITE_UTF8, 0,
1926          shellstaticFunc, 0, 0);
1927    }
1928    if( p->db==0 || SQLITE_OK!=sqlite3_errcode(p->db) ){
1929      fprintf(stderr,"Error: unable to open database \"%s\": %s\n",
1930          p->zDbFilename, sqlite3_errmsg(p->db));
1931      if( keepAlive ) return;
1932      exit(1);
1933    }
1934#ifndef SQLITE_OMIT_LOAD_EXTENSION
1935    sqlite3_enable_load_extension(p->db, 1);
1936#endif
1937    sqlite3_create_function(p->db, "readfile", 1, SQLITE_UTF8, 0,
1938                            readfileFunc, 0, 0);
1939    sqlite3_create_function(p->db, "writefile", 2, SQLITE_UTF8, 0,
1940                            writefileFunc, 0, 0);
1941  }
1942}
1943
1944/*
1945** Do C-language style dequoting.
1946**
1947**    \a    -> alarm
1948**    \b    -> backspace
1949**    \t    -> tab
1950**    \n    -> newline
1951**    \v    -> vertical tab
1952**    \f    -> form feed
1953**    \r    -> carriage return
1954**    \s    -> space
1955**    \"    -> "
1956**    \'    -> '
1957**    \\    -> backslash
1958**    \NNN  -> ascii character NNN in octal
1959*/
1960static void resolve_backslashes(char *z){
1961  int i, j;
1962  char c;
1963  while( *z && *z!='\\' ) z++;
1964  for(i=j=0; (c = z[i])!=0; i++, j++){
1965    if( c=='\\' && z[i+1]!=0 ){
1966      c = z[++i];
1967      if( c=='a' ){
1968        c = '\a';
1969      }else if( c=='b' ){
1970        c = '\b';
1971      }else if( c=='t' ){
1972        c = '\t';
1973      }else if( c=='n' ){
1974        c = '\n';
1975      }else if( c=='v' ){
1976        c = '\v';
1977      }else if( c=='f' ){
1978        c = '\f';
1979      }else if( c=='r' ){
1980        c = '\r';
1981      }else if( c=='"' ){
1982        c = '"';
1983      }else if( c=='\'' ){
1984        c = '\'';
1985      }else if( c=='\\' ){
1986        c = '\\';
1987      }else if( c>='0' && c<='7' ){
1988        c -= '0';
1989        if( z[i+1]>='0' && z[i+1]<='7' ){
1990          i++;
1991          c = (c<<3) + z[i] - '0';
1992          if( z[i+1]>='0' && z[i+1]<='7' ){
1993            i++;
1994            c = (c<<3) + z[i] - '0';
1995          }
1996        }
1997      }
1998    }
1999    z[j] = c;
2000  }
2001  if( j<i ) z[j] = 0;
2002}
2003
2004/*
2005** Return the value of a hexadecimal digit.  Return -1 if the input
2006** is not a hex digit.
2007*/
2008static int hexDigitValue(char c){
2009  if( c>='0' && c<='9' ) return c - '0';
2010  if( c>='a' && c<='f' ) return c - 'a' + 10;
2011  if( c>='A' && c<='F' ) return c - 'A' + 10;
2012  return -1;
2013}
2014
2015/*
2016** Interpret zArg as an integer value, possibly with suffixes.
2017*/
2018static sqlite3_int64 integerValue(const char *zArg){
2019  sqlite3_int64 v = 0;
2020  static const struct { char *zSuffix; int iMult; } aMult[] = {
2021    { "KiB", 1024 },
2022    { "MiB", 1024*1024 },
2023    { "GiB", 1024*1024*1024 },
2024    { "KB",  1000 },
2025    { "MB",  1000000 },
2026    { "GB",  1000000000 },
2027    { "K",   1000 },
2028    { "M",   1000000 },
2029    { "G",   1000000000 },
2030  };
2031  int i;
2032  int isNeg = 0;
2033  if( zArg[0]=='-' ){
2034    isNeg = 1;
2035    zArg++;
2036  }else if( zArg[0]=='+' ){
2037    zArg++;
2038  }
2039  if( zArg[0]=='0' && zArg[1]=='x' ){
2040    int x;
2041    zArg += 2;
2042    while( (x = hexDigitValue(zArg[0]))>=0 ){
2043      v = (v<<4) + x;
2044      zArg++;
2045    }
2046  }else{
2047    while( IsDigit(zArg[0]) ){
2048      v = v*10 + zArg[0] - '0';
2049      zArg++;
2050    }
2051  }
2052  for(i=0; i<ArraySize(aMult); i++){
2053    if( sqlite3_stricmp(aMult[i].zSuffix, zArg)==0 ){
2054      v *= aMult[i].iMult;
2055      break;
2056    }
2057  }
2058  return isNeg? -v : v;
2059}
2060
2061/*
2062** Interpret zArg as either an integer or a boolean value.  Return 1 or 0
2063** for TRUE and FALSE.  Return the integer value if appropriate.
2064*/
2065static int booleanValue(char *zArg){
2066  int i;
2067  if( zArg[0]=='0' && zArg[1]=='x' ){
2068    for(i=2; hexDigitValue(zArg[i])>=0; i++){}
2069  }else{
2070    for(i=0; zArg[i]>='0' && zArg[i]<='9'; i++){}
2071  }
2072  if( i>0 && zArg[i]==0 ) return (int)(integerValue(zArg) & 0xffffffff);
2073  if( sqlite3_stricmp(zArg, "on")==0 || sqlite3_stricmp(zArg,"yes")==0 ){
2074    return 1;
2075  }
2076  if( sqlite3_stricmp(zArg, "off")==0 || sqlite3_stricmp(zArg,"no")==0 ){
2077    return 0;
2078  }
2079  fprintf(stderr, "ERROR: Not a boolean value: \"%s\". Assuming \"no\".\n",
2080          zArg);
2081  return 0;
2082}
2083
2084/*
2085** Close an output file, assuming it is not stderr or stdout
2086*/
2087static void output_file_close(FILE *f){
2088  if( f && f!=stdout && f!=stderr ) fclose(f);
2089}
2090
2091/*
2092** Try to open an output file.   The names "stdout" and "stderr" are
2093** recognized and do the right thing.  NULL is returned if the output
2094** filename is "off".
2095*/
2096static FILE *output_file_open(const char *zFile){
2097  FILE *f;
2098  if( strcmp(zFile,"stdout")==0 ){
2099    f = stdout;
2100  }else if( strcmp(zFile, "stderr")==0 ){
2101    f = stderr;
2102  }else if( strcmp(zFile, "off")==0 ){
2103    f = 0;
2104  }else{
2105    f = fopen(zFile, "wb");
2106    if( f==0 ){
2107      fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
2108    }
2109  }
2110  return f;
2111}
2112
2113/*
2114** A routine for handling output from sqlite3_trace().
2115*/
2116static void sql_trace_callback(void *pArg, const char *z){
2117  FILE *f = (FILE*)pArg;
2118  if( f ){
2119    int i = (int)strlen(z);
2120    while( i>0 && z[i-1]==';' ){ i--; }
2121    fprintf(f, "%.*s;\n", i, z);
2122  }
2123}
2124
2125/*
2126** A no-op routine that runs with the ".breakpoint" doc-command.  This is
2127** a useful spot to set a debugger breakpoint.
2128*/
2129static void test_breakpoint(void){
2130  static int nCall = 0;
2131  nCall++;
2132}
2133
2134/*
2135** An object used to read a CSV and other files for import.
2136*/
2137typedef struct ImportCtx ImportCtx;
2138struct ImportCtx {
2139  const char *zFile;  /* Name of the input file */
2140  FILE *in;           /* Read the CSV text from this input stream */
2141  char *z;            /* Accumulated text for a field */
2142  int n;              /* Number of bytes in z */
2143  int nAlloc;         /* Space allocated for z[] */
2144  int nLine;          /* Current line number */
2145  int cTerm;          /* Character that terminated the most recent field */
2146  int cColSep;        /* The column separator character.  (Usually ",") */
2147  int cRowSep;        /* The row separator character.  (Usually "\n") */
2148};
2149
2150/* Append a single byte to z[] */
2151static void import_append_char(ImportCtx *p, int c){
2152  if( p->n+1>=p->nAlloc ){
2153    p->nAlloc += p->nAlloc + 100;
2154    p->z = sqlite3_realloc64(p->z, p->nAlloc);
2155    if( p->z==0 ){
2156      fprintf(stderr, "out of memory\n");
2157      exit(1);
2158    }
2159  }
2160  p->z[p->n++] = (char)c;
2161}
2162
2163/* Read a single field of CSV text.  Compatible with rfc4180 and extended
2164** with the option of having a separator other than ",".
2165**
2166**   +  Input comes from p->in.
2167**   +  Store results in p->z of length p->n.  Space to hold p->z comes
2168**      from sqlite3_malloc64().
2169**   +  Use p->cSep as the column separator.  The default is ",".
2170**   +  Use p->rSep as the row separator.  The default is "\n".
2171**   +  Keep track of the line number in p->nLine.
2172**   +  Store the character that terminates the field in p->cTerm.  Store
2173**      EOF on end-of-file.
2174**   +  Report syntax errors on stderr
2175*/
2176static char *SQLITE_CDECL csv_read_one_field(ImportCtx *p){
2177  int c;
2178  int cSep = p->cColSep;
2179  int rSep = p->cRowSep;
2180  p->n = 0;
2181  c = fgetc(p->in);
2182  if( c==EOF || seenInterrupt ){
2183    p->cTerm = EOF;
2184    return 0;
2185  }
2186  if( c=='"' ){
2187    int pc, ppc;
2188    int startLine = p->nLine;
2189    int cQuote = c;
2190    pc = ppc = 0;
2191    while( 1 ){
2192      c = fgetc(p->in);
2193      if( c==rSep ) p->nLine++;
2194      if( c==cQuote ){
2195        if( pc==cQuote ){
2196          pc = 0;
2197          continue;
2198        }
2199      }
2200      if( (c==cSep && pc==cQuote)
2201       || (c==rSep && pc==cQuote)
2202       || (c==rSep && pc=='\r' && ppc==cQuote)
2203       || (c==EOF && pc==cQuote)
2204      ){
2205        do{ p->n--; }while( p->z[p->n]!=cQuote );
2206        p->cTerm = c;
2207        break;
2208      }
2209      if( pc==cQuote && c!='\r' ){
2210        fprintf(stderr, "%s:%d: unescaped %c character\n",
2211                p->zFile, p->nLine, cQuote);
2212      }
2213      if( c==EOF ){
2214        fprintf(stderr, "%s:%d: unterminated %c-quoted field\n",
2215                p->zFile, startLine, cQuote);
2216        p->cTerm = c;
2217        break;
2218      }
2219      import_append_char(p, c);
2220      ppc = pc;
2221      pc = c;
2222    }
2223  }else{
2224    while( c!=EOF && c!=cSep && c!=rSep ){
2225      import_append_char(p, c);
2226      c = fgetc(p->in);
2227    }
2228    if( c==rSep ){
2229      p->nLine++;
2230      if( p->n>0 && p->z[p->n-1]=='\r' ) p->n--;
2231    }
2232    p->cTerm = c;
2233  }
2234  if( p->z ) p->z[p->n] = 0;
2235  return p->z;
2236}
2237
2238/* Read a single field of ASCII delimited text.
2239**
2240**   +  Input comes from p->in.
2241**   +  Store results in p->z of length p->n.  Space to hold p->z comes
2242**      from sqlite3_malloc64().
2243**   +  Use p->cSep as the column separator.  The default is "\x1F".
2244**   +  Use p->rSep as the row separator.  The default is "\x1E".
2245**   +  Keep track of the row number in p->nLine.
2246**   +  Store the character that terminates the field in p->cTerm.  Store
2247**      EOF on end-of-file.
2248**   +  Report syntax errors on stderr
2249*/
2250static char *SQLITE_CDECL ascii_read_one_field(ImportCtx *p){
2251  int c;
2252  int cSep = p->cColSep;
2253  int rSep = p->cRowSep;
2254  p->n = 0;
2255  c = fgetc(p->in);
2256  if( c==EOF || seenInterrupt ){
2257    p->cTerm = EOF;
2258    return 0;
2259  }
2260  while( c!=EOF && c!=cSep && c!=rSep ){
2261    import_append_char(p, c);
2262    c = fgetc(p->in);
2263  }
2264  if( c==rSep ){
2265    p->nLine++;
2266  }
2267  p->cTerm = c;
2268  if( p->z ) p->z[p->n] = 0;
2269  return p->z;
2270}
2271
2272/*
2273** Try to transfer data for table zTable.  If an error is seen while
2274** moving forward, try to go backwards.  The backwards movement won't
2275** work for WITHOUT ROWID tables.
2276*/
2277static void tryToCloneData(
2278  ShellState *p,
2279  sqlite3 *newDb,
2280  const char *zTable
2281){
2282  sqlite3_stmt *pQuery = 0;
2283  sqlite3_stmt *pInsert = 0;
2284  char *zQuery = 0;
2285  char *zInsert = 0;
2286  int rc;
2287  int i, j, n;
2288  int nTable = (int)strlen(zTable);
2289  int k = 0;
2290  int cnt = 0;
2291  const int spinRate = 10000;
2292
2293  zQuery = sqlite3_mprintf("SELECT * FROM \"%w\"", zTable);
2294  rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0);
2295  if( rc ){
2296    fprintf(stderr, "Error %d: %s on [%s]\n",
2297            sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db),
2298            zQuery);
2299    goto end_data_xfer;
2300  }
2301  n = sqlite3_column_count(pQuery);
2302  zInsert = sqlite3_malloc64(200 + nTable + n*3);
2303  if( zInsert==0 ){
2304    fprintf(stderr, "out of memory\n");
2305    goto end_data_xfer;
2306  }
2307  sqlite3_snprintf(200+nTable,zInsert,
2308                   "INSERT OR IGNORE INTO \"%s\" VALUES(?", zTable);
2309  i = (int)strlen(zInsert);
2310  for(j=1; j<n; j++){
2311    memcpy(zInsert+i, ",?", 2);
2312    i += 2;
2313  }
2314  memcpy(zInsert+i, ");", 3);
2315  rc = sqlite3_prepare_v2(newDb, zInsert, -1, &pInsert, 0);
2316  if( rc ){
2317    fprintf(stderr, "Error %d: %s on [%s]\n",
2318            sqlite3_extended_errcode(newDb), sqlite3_errmsg(newDb),
2319            zQuery);
2320    goto end_data_xfer;
2321  }
2322  for(k=0; k<2; k++){
2323    while( (rc = sqlite3_step(pQuery))==SQLITE_ROW ){
2324      for(i=0; i<n; i++){
2325        switch( sqlite3_column_type(pQuery, i) ){
2326          case SQLITE_NULL: {
2327            sqlite3_bind_null(pInsert, i+1);
2328            break;
2329          }
2330          case SQLITE_INTEGER: {
2331            sqlite3_bind_int64(pInsert, i+1, sqlite3_column_int64(pQuery,i));
2332            break;
2333          }
2334          case SQLITE_FLOAT: {
2335            sqlite3_bind_double(pInsert, i+1, sqlite3_column_double(pQuery,i));
2336            break;
2337          }
2338          case SQLITE_TEXT: {
2339            sqlite3_bind_text(pInsert, i+1,
2340                             (const char*)sqlite3_column_text(pQuery,i),
2341                             -1, SQLITE_STATIC);
2342            break;
2343          }
2344          case SQLITE_BLOB: {
2345            sqlite3_bind_blob(pInsert, i+1, sqlite3_column_blob(pQuery,i),
2346                                            sqlite3_column_bytes(pQuery,i),
2347                                            SQLITE_STATIC);
2348            break;
2349          }
2350        }
2351      } /* End for */
2352      rc = sqlite3_step(pInsert);
2353      if( rc!=SQLITE_OK && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){
2354        fprintf(stderr, "Error %d: %s\n", sqlite3_extended_errcode(newDb),
2355                        sqlite3_errmsg(newDb));
2356      }
2357      sqlite3_reset(pInsert);
2358      cnt++;
2359      if( (cnt%spinRate)==0 ){
2360        printf("%c\b", "|/-\\"[(cnt/spinRate)%4]);
2361        fflush(stdout);
2362      }
2363    } /* End while */
2364    if( rc==SQLITE_DONE ) break;
2365    sqlite3_finalize(pQuery);
2366    sqlite3_free(zQuery);
2367    zQuery = sqlite3_mprintf("SELECT * FROM \"%w\" ORDER BY rowid DESC;",
2368                             zTable);
2369    rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0);
2370    if( rc ){
2371      fprintf(stderr, "Warning: cannot step \"%s\" backwards", zTable);
2372      break;
2373    }
2374  } /* End for(k=0...) */
2375
2376end_data_xfer:
2377  sqlite3_finalize(pQuery);
2378  sqlite3_finalize(pInsert);
2379  sqlite3_free(zQuery);
2380  sqlite3_free(zInsert);
2381}
2382
2383
2384/*
2385** Try to transfer all rows of the schema that match zWhere.  For
2386** each row, invoke xForEach() on the object defined by that row.
2387** If an error is encountered while moving forward through the
2388** sqlite_master table, try again moving backwards.
2389*/
2390static void tryToCloneSchema(
2391  ShellState *p,
2392  sqlite3 *newDb,
2393  const char *zWhere,
2394  void (*xForEach)(ShellState*,sqlite3*,const char*)
2395){
2396  sqlite3_stmt *pQuery = 0;
2397  char *zQuery = 0;
2398  int rc;
2399  const unsigned char *zName;
2400  const unsigned char *zSql;
2401  char *zErrMsg = 0;
2402
2403  zQuery = sqlite3_mprintf("SELECT name, sql FROM sqlite_master"
2404                           " WHERE %s", zWhere);
2405  rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0);
2406  if( rc ){
2407    fprintf(stderr, "Error: (%d) %s on [%s]\n",
2408                    sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db),
2409                    zQuery);
2410    goto end_schema_xfer;
2411  }
2412  while( (rc = sqlite3_step(pQuery))==SQLITE_ROW ){
2413    zName = sqlite3_column_text(pQuery, 0);
2414    zSql = sqlite3_column_text(pQuery, 1);
2415    printf("%s... ", zName); fflush(stdout);
2416    sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg);
2417    if( zErrMsg ){
2418      fprintf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql);
2419      sqlite3_free(zErrMsg);
2420      zErrMsg = 0;
2421    }
2422    if( xForEach ){
2423      xForEach(p, newDb, (const char*)zName);
2424    }
2425    printf("done\n");
2426  }
2427  if( rc!=SQLITE_DONE ){
2428    sqlite3_finalize(pQuery);
2429    sqlite3_free(zQuery);
2430    zQuery = sqlite3_mprintf("SELECT name, sql FROM sqlite_master"
2431                             " WHERE %s ORDER BY rowid DESC", zWhere);
2432    rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0);
2433    if( rc ){
2434      fprintf(stderr, "Error: (%d) %s on [%s]\n",
2435                      sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db),
2436                      zQuery);
2437      goto end_schema_xfer;
2438    }
2439    while( (rc = sqlite3_step(pQuery))==SQLITE_ROW ){
2440      zName = sqlite3_column_text(pQuery, 0);
2441      zSql = sqlite3_column_text(pQuery, 1);
2442      printf("%s... ", zName); fflush(stdout);
2443      sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg);
2444      if( zErrMsg ){
2445        fprintf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql);
2446        sqlite3_free(zErrMsg);
2447        zErrMsg = 0;
2448      }
2449      if( xForEach ){
2450        xForEach(p, newDb, (const char*)zName);
2451      }
2452      printf("done\n");
2453    }
2454  }
2455end_schema_xfer:
2456  sqlite3_finalize(pQuery);
2457  sqlite3_free(zQuery);
2458}
2459
2460/*
2461** Open a new database file named "zNewDb".  Try to recover as much information
2462** as possible out of the main database (which might be corrupt) and write it
2463** into zNewDb.
2464*/
2465static void tryToClone(ShellState *p, const char *zNewDb){
2466  int rc;
2467  sqlite3 *newDb = 0;
2468  if( access(zNewDb,0)==0 ){
2469    fprintf(stderr, "File \"%s\" already exists.\n", zNewDb);
2470    return;
2471  }
2472  rc = sqlite3_open(zNewDb, &newDb);
2473  if( rc ){
2474    fprintf(stderr, "Cannot create output database: %s\n",
2475            sqlite3_errmsg(newDb));
2476  }else{
2477    sqlite3_exec(p->db, "PRAGMA writable_schema=ON;", 0, 0, 0);
2478    sqlite3_exec(newDb, "BEGIN EXCLUSIVE;", 0, 0, 0);
2479    tryToCloneSchema(p, newDb, "type='table'", tryToCloneData);
2480    tryToCloneSchema(p, newDb, "type!='table'", 0);
2481    sqlite3_exec(newDb, "COMMIT;", 0, 0, 0);
2482    sqlite3_exec(p->db, "PRAGMA writable_schema=OFF;", 0, 0, 0);
2483  }
2484  sqlite3_close(newDb);
2485}
2486
2487/*
2488** Change the output file back to stdout
2489*/
2490static void output_reset(ShellState *p){
2491  if( p->outfile[0]=='|' ){
2492#ifndef SQLITE_OMIT_POPEN
2493    pclose(p->out);
2494#endif
2495  }else{
2496    output_file_close(p->out);
2497  }
2498  p->outfile[0] = 0;
2499  p->out = stdout;
2500}
2501
2502/*
2503** Run an SQL command and return the single integer result.
2504*/
2505static int db_int(ShellState *p, const char *zSql){
2506  sqlite3_stmt *pStmt;
2507  int res = 0;
2508  sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
2509  if( pStmt && sqlite3_step(pStmt)==SQLITE_ROW ){
2510    res = sqlite3_column_int(pStmt,0);
2511  }
2512  sqlite3_finalize(pStmt);
2513  return res;
2514}
2515
2516/*
2517** Convert a 2-byte or 4-byte big-endian integer into a native integer
2518*/
2519unsigned int get2byteInt(unsigned char *a){
2520  return (a[0]<<8) + a[1];
2521}
2522unsigned int get4byteInt(unsigned char *a){
2523  return (a[0]<<24) + (a[1]<<16) + (a[2]<<8) + a[3];
2524}
2525
2526/*
2527** Implementation of the ".info" command.
2528**
2529** Return 1 on error, 2 to exit, and 0 otherwise.
2530*/
2531static int shell_dbinfo_command(ShellState *p, int nArg, char **azArg){
2532  static const struct { const char *zName; int ofst; } aField[] = {
2533     { "file change counter:",  24  },
2534     { "database page count:",  28  },
2535     { "freelist page count:",  36  },
2536     { "schema cookie:",        40  },
2537     { "schema format:",        44  },
2538     { "default cache size:",   48  },
2539     { "autovacuum top root:",  52  },
2540     { "incremental vacuum:",   64  },
2541     { "text encoding:",        56  },
2542     { "user version:",         60  },
2543     { "application id:",       68  },
2544     { "software version:",     96  },
2545  };
2546  static const struct { const char *zName; const char *zSql; } aQuery[] = {
2547     { "number of tables:",
2548       "SELECT count(*) FROM %s WHERE type='table'" },
2549     { "number of indexes:",
2550       "SELECT count(*) FROM %s WHERE type='index'" },
2551     { "number of triggers:",
2552       "SELECT count(*) FROM %s WHERE type='trigger'" },
2553     { "number of views:",
2554       "SELECT count(*) FROM %s WHERE type='view'" },
2555     { "schema size:",
2556       "SELECT total(length(sql)) FROM %s" },
2557  };
2558  sqlite3_file *pFile;
2559  int i;
2560  char *zSchemaTab;
2561  char *zDb = nArg>=2 ? azArg[1] : "main";
2562  unsigned char aHdr[100];
2563  open_db(p, 0);
2564  if( p->db==0 ) return 1;
2565  sqlite3_file_control(p->db, zDb, SQLITE_FCNTL_FILE_POINTER, &pFile);
2566  if( pFile==0 || pFile->pMethods==0 || pFile->pMethods->xRead==0 ){
2567    return 1;
2568  }
2569  i = pFile->pMethods->xRead(pFile, aHdr, 100, 0);
2570  if( i!=SQLITE_OK ){
2571    fprintf(stderr, "unable to read database header\n");
2572    return 1;
2573  }
2574  i = get2byteInt(aHdr+16);
2575  if( i==1 ) i = 65536;
2576  fprintf(p->out, "%-20s %d\n", "database page size:", i);
2577  fprintf(p->out, "%-20s %d\n", "write format:", aHdr[18]);
2578  fprintf(p->out, "%-20s %d\n", "read format:", aHdr[19]);
2579  fprintf(p->out, "%-20s %d\n", "reserved bytes:", aHdr[20]);
2580  for(i=0; i<sizeof(aField)/sizeof(aField[0]); i++){
2581    int ofst = aField[i].ofst;
2582    unsigned int val = get4byteInt(aHdr + ofst);
2583    fprintf(p->out, "%-20s %u", aField[i].zName, val);
2584    switch( ofst ){
2585      case 56: {
2586        if( val==1 ) fprintf(p->out, " (utf8)");
2587        if( val==2 ) fprintf(p->out, " (utf16le)");
2588        if( val==3 ) fprintf(p->out, " (utf16be)");
2589      }
2590    }
2591    fprintf(p->out, "\n");
2592  }
2593  if( zDb==0 ){
2594    zSchemaTab = sqlite3_mprintf("main.sqlite_master");
2595  }else if( strcmp(zDb,"temp")==0 ){
2596    zSchemaTab = sqlite3_mprintf("%s", "sqlite_temp_master");
2597  }else{
2598    zSchemaTab = sqlite3_mprintf("\"%w\".sqlite_master", zDb);
2599  }
2600  for(i=0; i<sizeof(aQuery)/sizeof(aQuery[0]); i++){
2601    char *zSql = sqlite3_mprintf(aQuery[i].zSql, zSchemaTab);
2602    int val = db_int(p, zSql);
2603    sqlite3_free(zSql);
2604    fprintf(p->out, "%-20s %d\n", aQuery[i].zName, val);
2605  }
2606  sqlite3_free(zSchemaTab);
2607  return 0;
2608}
2609
2610
2611/*
2612** If an input line begins with "." then invoke this routine to
2613** process that line.
2614**
2615** Return 1 on error, 2 to exit, and 0 otherwise.
2616*/
2617static int do_meta_command(char *zLine, ShellState *p){
2618  int h = 1;
2619  int nArg = 0;
2620  int n, c;
2621  int rc = 0;
2622  char *azArg[50];
2623
2624  /* Parse the input line into tokens.
2625  */
2626  while( zLine[h] && nArg<ArraySize(azArg) ){
2627    while( IsSpace(zLine[h]) ){ h++; }
2628    if( zLine[h]==0 ) break;
2629    if( zLine[h]=='\'' || zLine[h]=='"' ){
2630      int delim = zLine[h++];
2631      azArg[nArg++] = &zLine[h];
2632      while( zLine[h] && zLine[h]!=delim ){
2633        if( zLine[h]=='\\' && delim=='"' && zLine[h+1]!=0 ) h++;
2634        h++;
2635      }
2636      if( zLine[h]==delim ){
2637        zLine[h++] = 0;
2638      }
2639      if( delim=='"' ) resolve_backslashes(azArg[nArg-1]);
2640    }else{
2641      azArg[nArg++] = &zLine[h];
2642      while( zLine[h] && !IsSpace(zLine[h]) ){ h++; }
2643      if( zLine[h] ) zLine[h++] = 0;
2644      resolve_backslashes(azArg[nArg-1]);
2645    }
2646  }
2647
2648  /* Process the input line.
2649  */
2650  if( nArg==0 ) return 0; /* no tokens, no error */
2651  n = strlen30(azArg[0]);
2652  c = azArg[0][0];
2653  if( (c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0)
2654   || (c=='s' && n>=3 && strncmp(azArg[0], "save", n)==0)
2655  ){
2656    const char *zDestFile = 0;
2657    const char *zDb = 0;
2658    sqlite3 *pDest;
2659    sqlite3_backup *pBackup;
2660    int j;
2661    for(j=1; j<nArg; j++){
2662      const char *z = azArg[j];
2663      if( z[0]=='-' ){
2664        while( z[0]=='-' ) z++;
2665        /* No options to process at this time */
2666        {
2667          fprintf(stderr, "unknown option: %s\n", azArg[j]);
2668          return 1;
2669        }
2670      }else if( zDestFile==0 ){
2671        zDestFile = azArg[j];
2672      }else if( zDb==0 ){
2673        zDb = zDestFile;
2674        zDestFile = azArg[j];
2675      }else{
2676        fprintf(stderr, "too many arguments to .backup\n");
2677        return 1;
2678      }
2679    }
2680    if( zDestFile==0 ){
2681      fprintf(stderr, "missing FILENAME argument on .backup\n");
2682      return 1;
2683    }
2684    if( zDb==0 ) zDb = "main";
2685    rc = sqlite3_open(zDestFile, &pDest);
2686    if( rc!=SQLITE_OK ){
2687      fprintf(stderr, "Error: cannot open \"%s\"\n", zDestFile);
2688      sqlite3_close(pDest);
2689      return 1;
2690    }
2691    open_db(p, 0);
2692    pBackup = sqlite3_backup_init(pDest, "main", p->db, zDb);
2693    if( pBackup==0 ){
2694      fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
2695      sqlite3_close(pDest);
2696      return 1;
2697    }
2698    while(  (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK ){}
2699    sqlite3_backup_finish(pBackup);
2700    if( rc==SQLITE_DONE ){
2701      rc = 0;
2702    }else{
2703      fprintf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
2704      rc = 1;
2705    }
2706    sqlite3_close(pDest);
2707  }else
2708
2709  if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 ){
2710    if( nArg==2 ){
2711      bail_on_error = booleanValue(azArg[1]);
2712    }else{
2713      fprintf(stderr, "Usage: .bail on|off\n");
2714      rc = 1;
2715    }
2716  }else
2717
2718  if( c=='b' && n>=3 && strncmp(azArg[0], "binary", n)==0 ){
2719    if( nArg==2 ){
2720      if( booleanValue(azArg[1]) ){
2721        setBinaryMode(p->out);
2722      }else{
2723        setTextMode(p->out);
2724      }
2725    }else{
2726      fprintf(stderr, "Usage: .binary on|off\n");
2727      rc = 1;
2728    }
2729  }else
2730
2731  /* The undocumented ".breakpoint" command causes a call to the no-op
2732  ** routine named test_breakpoint().
2733  */
2734  if( c=='b' && n>=3 && strncmp(azArg[0], "breakpoint", n)==0 ){
2735    test_breakpoint();
2736  }else
2737
2738  if( c=='c' && strncmp(azArg[0], "clone", n)==0 ){
2739    if( nArg==2 ){
2740      tryToClone(p, azArg[1]);
2741    }else{
2742      fprintf(stderr, "Usage: .clone FILENAME\n");
2743      rc = 1;
2744    }
2745  }else
2746
2747  if( c=='d' && n>1 && strncmp(azArg[0], "databases", n)==0 ){
2748    ShellState data;
2749    char *zErrMsg = 0;
2750    open_db(p, 0);
2751    memcpy(&data, p, sizeof(data));
2752    data.showHeader = 1;
2753    data.mode = MODE_Column;
2754    data.colWidth[0] = 3;
2755    data.colWidth[1] = 15;
2756    data.colWidth[2] = 58;
2757    data.cnt = 0;
2758    sqlite3_exec(p->db, "PRAGMA database_list; ", callback, &data, &zErrMsg);
2759    if( zErrMsg ){
2760      fprintf(stderr,"Error: %s\n", zErrMsg);
2761      sqlite3_free(zErrMsg);
2762      rc = 1;
2763    }
2764  }else
2765
2766  if( c=='d' && strncmp(azArg[0], "dbinfo", n)==0 ){
2767    rc = shell_dbinfo_command(p, nArg, azArg);
2768  }else
2769
2770  if( c=='d' && strncmp(azArg[0], "dump", n)==0 ){
2771    open_db(p, 0);
2772    /* When playing back a "dump", the content might appear in an order
2773    ** which causes immediate foreign key constraints to be violated.
2774    ** So disable foreign-key constraint enforcement to prevent problems. */
2775    if( nArg!=1 && nArg!=2 ){
2776      fprintf(stderr, "Usage: .dump ?LIKE-PATTERN?\n");
2777      rc = 1;
2778      goto meta_command_exit;
2779    }
2780    fprintf(p->out, "PRAGMA foreign_keys=OFF;\n");
2781    fprintf(p->out, "BEGIN TRANSACTION;\n");
2782    p->writableSchema = 0;
2783    sqlite3_exec(p->db, "SAVEPOINT dump; PRAGMA writable_schema=ON", 0, 0, 0);
2784    p->nErr = 0;
2785    if( nArg==1 ){
2786      run_schema_dump_query(p,
2787        "SELECT name, type, sql FROM sqlite_master "
2788        "WHERE sql NOT NULL AND type=='table' AND name!='sqlite_sequence'"
2789      );
2790      run_schema_dump_query(p,
2791        "SELECT name, type, sql FROM sqlite_master "
2792        "WHERE name=='sqlite_sequence'"
2793      );
2794      run_table_dump_query(p,
2795        "SELECT sql FROM sqlite_master "
2796        "WHERE sql NOT NULL AND type IN ('index','trigger','view')", 0
2797      );
2798    }else{
2799      int i;
2800      for(i=1; i<nArg; i++){
2801        zShellStatic = azArg[i];
2802        run_schema_dump_query(p,
2803          "SELECT name, type, sql FROM sqlite_master "
2804          "WHERE tbl_name LIKE shellstatic() AND type=='table'"
2805          "  AND sql NOT NULL");
2806        run_table_dump_query(p,
2807          "SELECT sql FROM sqlite_master "
2808          "WHERE sql NOT NULL"
2809          "  AND type IN ('index','trigger','view')"
2810          "  AND tbl_name LIKE shellstatic()", 0
2811        );
2812        zShellStatic = 0;
2813      }
2814    }
2815    if( p->writableSchema ){
2816      fprintf(p->out, "PRAGMA writable_schema=OFF;\n");
2817      p->writableSchema = 0;
2818    }
2819    sqlite3_exec(p->db, "PRAGMA writable_schema=OFF;", 0, 0, 0);
2820    sqlite3_exec(p->db, "RELEASE dump;", 0, 0, 0);
2821    fprintf(p->out, p->nErr ? "ROLLBACK; -- due to errors\n" : "COMMIT;\n");
2822  }else
2823
2824  if( c=='e' && strncmp(azArg[0], "echo", n)==0 ){
2825    if( nArg==2 ){
2826      p->echoOn = booleanValue(azArg[1]);
2827    }else{
2828      fprintf(stderr, "Usage: .echo on|off\n");
2829      rc = 1;
2830    }
2831  }else
2832
2833  if( c=='e' && strncmp(azArg[0], "eqp", n)==0 ){
2834    if( nArg==2 ){
2835      p->autoEQP = booleanValue(azArg[1]);
2836    }else{
2837      fprintf(stderr, "Usage: .eqp on|off\n");
2838      rc = 1;
2839    }
2840  }else
2841
2842  if( c=='e' && strncmp(azArg[0], "exit", n)==0 ){
2843    if( nArg>1 && (rc = (int)integerValue(azArg[1]))!=0 ) exit(rc);
2844    rc = 2;
2845  }else
2846
2847  if( c=='e' && strncmp(azArg[0], "explain", n)==0 ){
2848    int val = nArg>=2 ? booleanValue(azArg[1]) : 1;
2849    if(val == 1) {
2850      if(!p->normalMode.valid) {
2851        p->normalMode.valid = 1;
2852        p->normalMode.mode = p->mode;
2853        p->normalMode.showHeader = p->showHeader;
2854        memcpy(p->normalMode.colWidth,p->colWidth,sizeof(p->colWidth));
2855      }
2856      /* We could put this code under the !p->explainValid
2857      ** condition so that it does not execute if we are already in
2858      ** explain mode. However, always executing it allows us an easy
2859      ** was to reset to explain mode in case the user previously
2860      ** did an .explain followed by a .width, .mode or .header
2861      ** command.
2862      */
2863      p->mode = MODE_Explain;
2864      p->showHeader = 1;
2865      memset(p->colWidth,0,sizeof(p->colWidth));
2866      p->colWidth[0] = 4;                  /* addr */
2867      p->colWidth[1] = 13;                 /* opcode */
2868      p->colWidth[2] = 4;                  /* P1 */
2869      p->colWidth[3] = 4;                  /* P2 */
2870      p->colWidth[4] = 4;                  /* P3 */
2871      p->colWidth[5] = 13;                 /* P4 */
2872      p->colWidth[6] = 2;                  /* P5 */
2873      p->colWidth[7] = 13;                  /* Comment */
2874    }else if (p->normalMode.valid) {
2875      p->normalMode.valid = 0;
2876      p->mode = p->normalMode.mode;
2877      p->showHeader = p->normalMode.showHeader;
2878      memcpy(p->colWidth,p->normalMode.colWidth,sizeof(p->colWidth));
2879    }
2880  }else
2881
2882  if( c=='f' && strncmp(azArg[0], "fullschema", n)==0 ){
2883    ShellState data;
2884    char *zErrMsg = 0;
2885    int doStats = 0;
2886    if( nArg!=1 ){
2887      fprintf(stderr, "Usage: .fullschema\n");
2888      rc = 1;
2889      goto meta_command_exit;
2890    }
2891    open_db(p, 0);
2892    memcpy(&data, p, sizeof(data));
2893    data.showHeader = 0;
2894    data.mode = MODE_Semi;
2895    rc = sqlite3_exec(p->db,
2896       "SELECT sql FROM"
2897       "  (SELECT sql sql, type type, tbl_name tbl_name, name name, rowid x"
2898       "     FROM sqlite_master UNION ALL"
2899       "   SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
2900       "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%' "
2901       "ORDER BY rowid",
2902       callback, &data, &zErrMsg
2903    );
2904    if( rc==SQLITE_OK ){
2905      sqlite3_stmt *pStmt;
2906      rc = sqlite3_prepare_v2(p->db,
2907               "SELECT rowid FROM sqlite_master"
2908               " WHERE name GLOB 'sqlite_stat[134]'",
2909               -1, &pStmt, 0);
2910      doStats = sqlite3_step(pStmt)==SQLITE_ROW;
2911      sqlite3_finalize(pStmt);
2912    }
2913    if( doStats==0 ){
2914      fprintf(p->out, "/* No STAT tables available */\n");
2915    }else{
2916      fprintf(p->out, "ANALYZE sqlite_master;\n");
2917      sqlite3_exec(p->db, "SELECT 'ANALYZE sqlite_master'",
2918                   callback, &data, &zErrMsg);
2919      data.mode = MODE_Insert;
2920      data.zDestTable = "sqlite_stat1";
2921      shell_exec(p->db, "SELECT * FROM sqlite_stat1",
2922                 shell_callback, &data,&zErrMsg);
2923      data.zDestTable = "sqlite_stat3";
2924      shell_exec(p->db, "SELECT * FROM sqlite_stat3",
2925                 shell_callback, &data,&zErrMsg);
2926      data.zDestTable = "sqlite_stat4";
2927      shell_exec(p->db, "SELECT * FROM sqlite_stat4",
2928                 shell_callback, &data, &zErrMsg);
2929      fprintf(p->out, "ANALYZE sqlite_master;\n");
2930    }
2931  }else
2932
2933  if( c=='h' && strncmp(azArg[0], "headers", n)==0 ){
2934    if( nArg==2 ){
2935      p->showHeader = booleanValue(azArg[1]);
2936    }else{
2937      fprintf(stderr, "Usage: .headers on|off\n");
2938      rc = 1;
2939    }
2940  }else
2941
2942  if( c=='h' && strncmp(azArg[0], "help", n)==0 ){
2943    fprintf(p->out, "%s", zHelp);
2944  }else
2945
2946  if( c=='i' && strncmp(azArg[0], "import", n)==0 ){
2947    char *zTable;               /* Insert data into this table */
2948    char *zFile;                /* Name of file to extra content from */
2949    sqlite3_stmt *pStmt = NULL; /* A statement */
2950    int nCol;                   /* Number of columns in the table */
2951    int nByte;                  /* Number of bytes in an SQL string */
2952    int i, j;                   /* Loop counters */
2953    int needCommit;             /* True to COMMIT or ROLLBACK at end */
2954    int nSep;                   /* Number of bytes in p->colSeparator[] */
2955    char *zSql;                 /* An SQL statement */
2956    ImportCtx sCtx;             /* Reader context */
2957    char *(SQLITE_CDECL *xRead)(ImportCtx*); /* Func to read one value */
2958    int (SQLITE_CDECL *xCloser)(FILE*);      /* Func to close file */
2959
2960    if( nArg!=3 ){
2961      fprintf(stderr, "Usage: .import FILE TABLE\n");
2962      goto meta_command_exit;
2963    }
2964    zFile = azArg[1];
2965    zTable = azArg[2];
2966    seenInterrupt = 0;
2967    memset(&sCtx, 0, sizeof(sCtx));
2968    open_db(p, 0);
2969    nSep = strlen30(p->colSeparator);
2970    if( nSep==0 ){
2971      fprintf(stderr, "Error: non-null column separator required for import\n");
2972      return 1;
2973    }
2974    if( nSep>1 ){
2975      fprintf(stderr, "Error: multi-character column separators not allowed"
2976                      " for import\n");
2977      return 1;
2978    }
2979    nSep = strlen30(p->rowSeparator);
2980    if( nSep==0 ){
2981      fprintf(stderr, "Error: non-null row separator required for import\n");
2982      return 1;
2983    }
2984    if( nSep==2 && p->mode==MODE_Csv && strcmp(p->rowSeparator, SEP_CrLf)==0 ){
2985      /* When importing CSV (only), if the row separator is set to the
2986      ** default output row separator, change it to the default input
2987      ** row separator.  This avoids having to maintain different input
2988      ** and output row separators. */
2989      sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Row);
2990      nSep = strlen30(p->rowSeparator);
2991    }
2992    if( nSep>1 ){
2993      fprintf(stderr, "Error: multi-character row separators not allowed"
2994                      " for import\n");
2995      return 1;
2996    }
2997    sCtx.zFile = zFile;
2998    sCtx.nLine = 1;
2999    if( sCtx.zFile[0]=='|' ){
3000#ifdef SQLITE_OMIT_POPEN
3001      fprintf(stderr, "Error: pipes are not supported in this OS\n");
3002      return 1;
3003#else
3004      sCtx.in = popen(sCtx.zFile+1, "r");
3005      sCtx.zFile = "<pipe>";
3006      xCloser = pclose;
3007#endif
3008    }else{
3009      sCtx.in = fopen(sCtx.zFile, "rb");
3010      xCloser = fclose;
3011    }
3012    if( p->mode==MODE_Ascii ){
3013      xRead = ascii_read_one_field;
3014    }else{
3015      xRead = csv_read_one_field;
3016    }
3017    if( sCtx.in==0 ){
3018      fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
3019      return 1;
3020    }
3021    sCtx.cColSep = p->colSeparator[0];
3022    sCtx.cRowSep = p->rowSeparator[0];
3023    zSql = sqlite3_mprintf("SELECT * FROM %s", zTable);
3024    if( zSql==0 ){
3025      fprintf(stderr, "Error: out of memory\n");
3026      xCloser(sCtx.in);
3027      return 1;
3028    }
3029    nByte = strlen30(zSql);
3030    rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
3031    import_append_char(&sCtx, 0);    /* To ensure sCtx.z is allocated */
3032    if( rc && sqlite3_strglob("no such table: *", sqlite3_errmsg(p->db))==0 ){
3033      char *zCreate = sqlite3_mprintf("CREATE TABLE %s", zTable);
3034      char cSep = '(';
3035      while( xRead(&sCtx) ){
3036        zCreate = sqlite3_mprintf("%z%c\n  \"%s\" TEXT", zCreate, cSep, sCtx.z);
3037        cSep = ',';
3038        if( sCtx.cTerm!=sCtx.cColSep ) break;
3039      }
3040      if( cSep=='(' ){
3041        sqlite3_free(zCreate);
3042        sqlite3_free(sCtx.z);
3043        xCloser(sCtx.in);
3044        fprintf(stderr,"%s: empty file\n", sCtx.zFile);
3045        return 1;
3046      }
3047      zCreate = sqlite3_mprintf("%z\n)", zCreate);
3048      rc = sqlite3_exec(p->db, zCreate, 0, 0, 0);
3049      sqlite3_free(zCreate);
3050      if( rc ){
3051        fprintf(stderr, "CREATE TABLE %s(...) failed: %s\n", zTable,
3052                sqlite3_errmsg(p->db));
3053        sqlite3_free(sCtx.z);
3054        xCloser(sCtx.in);
3055        return 1;
3056      }
3057      rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
3058    }
3059    sqlite3_free(zSql);
3060    if( rc ){
3061      if (pStmt) sqlite3_finalize(pStmt);
3062      fprintf(stderr,"Error: %s\n", sqlite3_errmsg(p->db));
3063      xCloser(sCtx.in);
3064      return 1;
3065    }
3066    nCol = sqlite3_column_count(pStmt);
3067    sqlite3_finalize(pStmt);
3068    pStmt = 0;
3069    if( nCol==0 ) return 0; /* no columns, no error */
3070    zSql = sqlite3_malloc64( nByte*2 + 20 + nCol*2 );
3071    if( zSql==0 ){
3072      fprintf(stderr, "Error: out of memory\n");
3073      xCloser(sCtx.in);
3074      return 1;
3075    }
3076    sqlite3_snprintf(nByte+20, zSql, "INSERT INTO \"%w\" VALUES(?", zTable);
3077    j = strlen30(zSql);
3078    for(i=1; i<nCol; i++){
3079      zSql[j++] = ',';
3080      zSql[j++] = '?';
3081    }
3082    zSql[j++] = ')';
3083    zSql[j] = 0;
3084    rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
3085    sqlite3_free(zSql);
3086    if( rc ){
3087      fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
3088      if (pStmt) sqlite3_finalize(pStmt);
3089      xCloser(sCtx.in);
3090      return 1;
3091    }
3092    needCommit = sqlite3_get_autocommit(p->db);
3093    if( needCommit ) sqlite3_exec(p->db, "BEGIN", 0, 0, 0);
3094    do{
3095      int startLine = sCtx.nLine;
3096      for(i=0; i<nCol; i++){
3097        char *z = xRead(&sCtx);
3098        /*
3099        ** Did we reach end-of-file before finding any columns?
3100        ** If so, stop instead of NULL filling the remaining columns.
3101        */
3102        if( z==0 && i==0 ) break;
3103        /*
3104        ** Did we reach end-of-file OR end-of-line before finding any
3105        ** columns in ASCII mode?  If so, stop instead of NULL filling
3106        ** the remaining columns.
3107        */
3108        if( p->mode==MODE_Ascii && (z==0 || z[0]==0) && i==0 ) break;
3109        sqlite3_bind_text(pStmt, i+1, z, -1, SQLITE_TRANSIENT);
3110        if( i<nCol-1 && sCtx.cTerm!=sCtx.cColSep ){
3111          fprintf(stderr, "%s:%d: expected %d columns but found %d - "
3112                          "filling the rest with NULL\n",
3113                          sCtx.zFile, startLine, nCol, i+1);
3114          i += 2;
3115          while( i<=nCol ){ sqlite3_bind_null(pStmt, i); i++; }
3116        }
3117      }
3118      if( sCtx.cTerm==sCtx.cColSep ){
3119        do{
3120          xRead(&sCtx);
3121          i++;
3122        }while( sCtx.cTerm==sCtx.cColSep );
3123        fprintf(stderr, "%s:%d: expected %d columns but found %d - "
3124                        "extras ignored\n",
3125                        sCtx.zFile, startLine, nCol, i);
3126      }
3127      if( i>=nCol ){
3128        sqlite3_step(pStmt);
3129        rc = sqlite3_reset(pStmt);
3130        if( rc!=SQLITE_OK ){
3131          fprintf(stderr, "%s:%d: INSERT failed: %s\n", sCtx.zFile, startLine,
3132                  sqlite3_errmsg(p->db));
3133        }
3134      }
3135    }while( sCtx.cTerm!=EOF );
3136
3137    xCloser(sCtx.in);
3138    sqlite3_free(sCtx.z);
3139    sqlite3_finalize(pStmt);
3140    if( needCommit ) sqlite3_exec(p->db, "COMMIT", 0, 0, 0);
3141  }else
3142
3143  if( c=='i' && (strncmp(azArg[0], "indices", n)==0
3144                 || strncmp(azArg[0], "indexes", n)==0) ){
3145    ShellState data;
3146    char *zErrMsg = 0;
3147    open_db(p, 0);
3148    memcpy(&data, p, sizeof(data));
3149    data.showHeader = 0;
3150    data.mode = MODE_List;
3151    if( nArg==1 ){
3152      rc = sqlite3_exec(p->db,
3153        "SELECT name FROM sqlite_master "
3154        "WHERE type='index' AND name NOT LIKE 'sqlite_%' "
3155        "UNION ALL "
3156        "SELECT name FROM sqlite_temp_master "
3157        "WHERE type='index' "
3158        "ORDER BY 1",
3159        callback, &data, &zErrMsg
3160      );
3161    }else if( nArg==2 ){
3162      zShellStatic = azArg[1];
3163      rc = sqlite3_exec(p->db,
3164        "SELECT name FROM sqlite_master "
3165        "WHERE type='index' AND tbl_name LIKE shellstatic() "
3166        "UNION ALL "
3167        "SELECT name FROM sqlite_temp_master "
3168        "WHERE type='index' AND tbl_name LIKE shellstatic() "
3169        "ORDER BY 1",
3170        callback, &data, &zErrMsg
3171      );
3172      zShellStatic = 0;
3173    }else{
3174      fprintf(stderr, "Usage: .indexes ?LIKE-PATTERN?\n");
3175      rc = 1;
3176      goto meta_command_exit;
3177    }
3178    if( zErrMsg ){
3179      fprintf(stderr,"Error: %s\n", zErrMsg);
3180      sqlite3_free(zErrMsg);
3181      rc = 1;
3182    }else if( rc != SQLITE_OK ){
3183      fprintf(stderr,"Error: querying sqlite_master and sqlite_temp_master\n");
3184      rc = 1;
3185    }
3186  }else
3187
3188#ifdef SQLITE_ENABLE_IOTRACE
3189  if( c=='i' && strncmp(azArg[0], "iotrace", n)==0 ){
3190    SQLITE_API extern void (SQLITE_CDECL *sqlite3IoTrace)(const char*, ...);
3191    if( iotrace && iotrace!=stdout ) fclose(iotrace);
3192    iotrace = 0;
3193    if( nArg<2 ){
3194      sqlite3IoTrace = 0;
3195    }else if( strcmp(azArg[1], "-")==0 ){
3196      sqlite3IoTrace = iotracePrintf;
3197      iotrace = stdout;
3198    }else{
3199      iotrace = fopen(azArg[1], "w");
3200      if( iotrace==0 ){
3201        fprintf(stderr, "Error: cannot open \"%s\"\n", azArg[1]);
3202        sqlite3IoTrace = 0;
3203        rc = 1;
3204      }else{
3205        sqlite3IoTrace = iotracePrintf;
3206      }
3207    }
3208  }else
3209#endif
3210  if( c=='l' && n>=5 && strncmp(azArg[0], "limits", n)==0 ){
3211    static const struct {
3212       const char *zLimitName;   /* Name of a limit */
3213       int limitCode;            /* Integer code for that limit */
3214    } aLimit[] = {
3215      { "length",                SQLITE_LIMIT_LENGTH                    },
3216      { "sql_length",            SQLITE_LIMIT_SQL_LENGTH                },
3217      { "column",                SQLITE_LIMIT_COLUMN                    },
3218      { "expr_depth",            SQLITE_LIMIT_EXPR_DEPTH                },
3219      { "compound_select",       SQLITE_LIMIT_COMPOUND_SELECT           },
3220      { "vdbe_op",               SQLITE_LIMIT_VDBE_OP                   },
3221      { "function_arg",          SQLITE_LIMIT_FUNCTION_ARG              },
3222      { "attached",              SQLITE_LIMIT_ATTACHED                  },
3223      { "like_pattern_length",   SQLITE_LIMIT_LIKE_PATTERN_LENGTH       },
3224      { "variable_number",       SQLITE_LIMIT_VARIABLE_NUMBER           },
3225      { "trigger_depth",         SQLITE_LIMIT_TRIGGER_DEPTH             },
3226      { "worker_threads",        SQLITE_LIMIT_WORKER_THREADS            },
3227    };
3228    int i, n2;
3229    open_db(p, 0);
3230    if( nArg==1 ){
3231      for(i=0; i<sizeof(aLimit)/sizeof(aLimit[0]); i++){
3232        printf("%20s %d\n", aLimit[i].zLimitName,
3233               sqlite3_limit(p->db, aLimit[i].limitCode, -1));
3234      }
3235    }else if( nArg>3 ){
3236      fprintf(stderr, "Usage: .limit NAME ?NEW-VALUE?\n");
3237      rc = 1;
3238      goto meta_command_exit;
3239    }else{
3240      int iLimit = -1;
3241      n2 = strlen30(azArg[1]);
3242      for(i=0; i<sizeof(aLimit)/sizeof(aLimit[0]); i++){
3243        if( sqlite3_strnicmp(aLimit[i].zLimitName, azArg[1], n2)==0 ){
3244          if( iLimit<0 ){
3245            iLimit = i;
3246          }else{
3247            fprintf(stderr, "ambiguous limit: \"%s\"\n", azArg[1]);
3248            rc = 1;
3249            goto meta_command_exit;
3250          }
3251        }
3252      }
3253      if( iLimit<0 ){
3254        fprintf(stderr, "unknown limit: \"%s\"\n"
3255                        "enter \".limits\" with no arguments for a list.\n",
3256                         azArg[1]);
3257        rc = 1;
3258        goto meta_command_exit;
3259      }
3260      if( nArg==3 ){
3261        sqlite3_limit(p->db, aLimit[iLimit].limitCode,
3262                      (int)integerValue(azArg[2]));
3263      }
3264      printf("%20s %d\n", aLimit[iLimit].zLimitName,
3265             sqlite3_limit(p->db, aLimit[iLimit].limitCode, -1));
3266    }
3267  }else
3268
3269#ifndef SQLITE_OMIT_LOAD_EXTENSION
3270  if( c=='l' && strncmp(azArg[0], "load", n)==0 ){
3271    const char *zFile, *zProc;
3272    char *zErrMsg = 0;
3273    if( nArg<2 ){
3274      fprintf(stderr, "Usage: .load FILE ?ENTRYPOINT?\n");
3275      rc = 1;
3276      goto meta_command_exit;
3277    }
3278    zFile = azArg[1];
3279    zProc = nArg>=3 ? azArg[2] : 0;
3280    open_db(p, 0);
3281    rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg);
3282    if( rc!=SQLITE_OK ){
3283      fprintf(stderr, "Error: %s\n", zErrMsg);
3284      sqlite3_free(zErrMsg);
3285      rc = 1;
3286    }
3287  }else
3288#endif
3289
3290  if( c=='l' && strncmp(azArg[0], "log", n)==0 ){
3291    if( nArg!=2 ){
3292      fprintf(stderr, "Usage: .log FILENAME\n");
3293      rc = 1;
3294    }else{
3295      const char *zFile = azArg[1];
3296      output_file_close(p->pLog);
3297      p->pLog = output_file_open(zFile);
3298    }
3299  }else
3300
3301  if( c=='m' && strncmp(azArg[0], "mode", n)==0 ){
3302    const char *zMode = nArg>=2 ? azArg[1] : "";
3303    int n2 = (int)strlen(zMode);
3304    int c2 = zMode[0];
3305    if( c2=='l' && n2>2 && strncmp(azArg[1],"lines",n2)==0 ){
3306      p->mode = MODE_Line;
3307    }else if( c2=='c' && strncmp(azArg[1],"columns",n2)==0 ){
3308      p->mode = MODE_Column;
3309    }else if( c2=='l' && n2>2 && strncmp(azArg[1],"list",n2)==0 ){
3310      p->mode = MODE_List;
3311    }else if( c2=='h' && strncmp(azArg[1],"html",n2)==0 ){
3312      p->mode = MODE_Html;
3313    }else if( c2=='t' && strncmp(azArg[1],"tcl",n2)==0 ){
3314      p->mode = MODE_Tcl;
3315      sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Space);
3316    }else if( c2=='c' && strncmp(azArg[1],"csv",n2)==0 ){
3317      p->mode = MODE_Csv;
3318      sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Comma);
3319      sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_CrLf);
3320    }else if( c2=='t' && strncmp(azArg[1],"tabs",n2)==0 ){
3321      p->mode = MODE_List;
3322      sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Tab);
3323    }else if( c2=='i' && strncmp(azArg[1],"insert",n2)==0 ){
3324      p->mode = MODE_Insert;
3325      set_table_name(p, nArg>=3 ? azArg[2] : "table");
3326    }else if( c2=='a' && strncmp(azArg[1],"ascii",n2)==0 ){
3327      p->mode = MODE_Ascii;
3328      sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Unit);
3329      sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Record);
3330    }else {
3331      fprintf(stderr,"Error: mode should be one of: "
3332         "ascii column csv html insert line list tabs tcl\n");
3333      rc = 1;
3334    }
3335  }else
3336
3337  if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 ){
3338    if( nArg==2 ){
3339      sqlite3_snprintf(sizeof(p->nullValue), p->nullValue,
3340                       "%.*s", (int)ArraySize(p->nullValue)-1, azArg[1]);
3341    }else{
3342      fprintf(stderr, "Usage: .nullvalue STRING\n");
3343      rc = 1;
3344    }
3345  }else
3346
3347  if( c=='o' && strncmp(azArg[0], "open", n)==0 && n>=2 ){
3348    sqlite3 *savedDb = p->db;
3349    const char *zSavedFilename = p->zDbFilename;
3350    char *zNewFilename = 0;
3351    p->db = 0;
3352    if( nArg>=2 ){
3353      p->zDbFilename = zNewFilename = sqlite3_mprintf("%s", azArg[1]);
3354    }
3355    open_db(p, 1);
3356    if( p->db!=0 ){
3357      sqlite3_close(savedDb);
3358      sqlite3_free(p->zFreeOnClose);
3359      p->zFreeOnClose = zNewFilename;
3360    }else{
3361      sqlite3_free(zNewFilename);
3362      p->db = savedDb;
3363      p->zDbFilename = zSavedFilename;
3364    }
3365  }else
3366
3367  if( c=='o'
3368   && (strncmp(azArg[0], "output", n)==0 || strncmp(azArg[0], "once", n)==0)
3369  ){
3370    const char *zFile = nArg>=2 ? azArg[1] : "stdout";
3371    if( nArg>2 ){
3372      fprintf(stderr, "Usage: .%s FILE\n", azArg[0]);
3373      rc = 1;
3374      goto meta_command_exit;
3375    }
3376    if( n>1 && strncmp(azArg[0], "once", n)==0 ){
3377      if( nArg<2 ){
3378        fprintf(stderr, "Usage: .once FILE\n");
3379        rc = 1;
3380        goto meta_command_exit;
3381      }
3382      p->outCount = 2;
3383    }else{
3384      p->outCount = 0;
3385    }
3386    output_reset(p);
3387    if( zFile[0]=='|' ){
3388#ifdef SQLITE_OMIT_POPEN
3389      fprintf(stderr,"Error: pipes are not supported in this OS\n");
3390      rc = 1;
3391      p->out = stdout;
3392#else
3393      p->out = popen(zFile + 1, "w");
3394      if( p->out==0 ){
3395        fprintf(stderr,"Error: cannot open pipe \"%s\"\n", zFile + 1);
3396        p->out = stdout;
3397        rc = 1;
3398      }else{
3399        sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile);
3400      }
3401#endif
3402    }else{
3403      p->out = output_file_open(zFile);
3404      if( p->out==0 ){
3405        if( strcmp(zFile,"off")!=0 ){
3406          fprintf(stderr,"Error: cannot write to \"%s\"\n", zFile);
3407        }
3408        p->out = stdout;
3409        rc = 1;
3410      } else {
3411        sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile);
3412      }
3413    }
3414  }else
3415
3416  if( c=='p' && n>=3 && strncmp(azArg[0], "print", n)==0 ){
3417    int i;
3418    for(i=1; i<nArg; i++){
3419      if( i>1 ) fprintf(p->out, " ");
3420      fprintf(p->out, "%s", azArg[i]);
3421    }
3422    fprintf(p->out, "\n");
3423  }else
3424
3425  if( c=='p' && strncmp(azArg[0], "prompt", n)==0 ){
3426    if( nArg >= 2) {
3427      strncpy(mainPrompt,azArg[1],(int)ArraySize(mainPrompt)-1);
3428    }
3429    if( nArg >= 3) {
3430      strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1);
3431    }
3432  }else
3433
3434  if( c=='q' && strncmp(azArg[0], "quit", n)==0 ){
3435    rc = 2;
3436  }else
3437
3438  if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 ){
3439    FILE *alt;
3440    if( nArg!=2 ){
3441      fprintf(stderr, "Usage: .read FILE\n");
3442      rc = 1;
3443      goto meta_command_exit;
3444    }
3445    alt = fopen(azArg[1], "rb");
3446    if( alt==0 ){
3447      fprintf(stderr,"Error: cannot open \"%s\"\n", azArg[1]);
3448      rc = 1;
3449    }else{
3450      rc = process_input(p, alt);
3451      fclose(alt);
3452    }
3453  }else
3454
3455  if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 ){
3456    const char *zSrcFile;
3457    const char *zDb;
3458    sqlite3 *pSrc;
3459    sqlite3_backup *pBackup;
3460    int nTimeout = 0;
3461
3462    if( nArg==2 ){
3463      zSrcFile = azArg[1];
3464      zDb = "main";
3465    }else if( nArg==3 ){
3466      zSrcFile = azArg[2];
3467      zDb = azArg[1];
3468    }else{
3469      fprintf(stderr, "Usage: .restore ?DB? FILE\n");
3470      rc = 1;
3471      goto meta_command_exit;
3472    }
3473    rc = sqlite3_open(zSrcFile, &pSrc);
3474    if( rc!=SQLITE_OK ){
3475      fprintf(stderr, "Error: cannot open \"%s\"\n", zSrcFile);
3476      sqlite3_close(pSrc);
3477      return 1;
3478    }
3479    open_db(p, 0);
3480    pBackup = sqlite3_backup_init(p->db, zDb, pSrc, "main");
3481    if( pBackup==0 ){
3482      fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
3483      sqlite3_close(pSrc);
3484      return 1;
3485    }
3486    while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK
3487          || rc==SQLITE_BUSY  ){
3488      if( rc==SQLITE_BUSY ){
3489        if( nTimeout++ >= 3 ) break;
3490        sqlite3_sleep(100);
3491      }
3492    }
3493    sqlite3_backup_finish(pBackup);
3494    if( rc==SQLITE_DONE ){
3495      rc = 0;
3496    }else if( rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){
3497      fprintf(stderr, "Error: source database is busy\n");
3498      rc = 1;
3499    }else{
3500      fprintf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
3501      rc = 1;
3502    }
3503    sqlite3_close(pSrc);
3504  }else
3505
3506
3507  if( c=='s' && strncmp(azArg[0], "scanstats", n)==0 ){
3508    if( nArg==2 ){
3509      p->scanstatsOn = booleanValue(azArg[1]);
3510#ifndef SQLITE_ENABLE_STMT_SCANSTATUS
3511      fprintf(stderr, "Warning: .scanstats not available in this build.\n");
3512#endif
3513    }else{
3514      fprintf(stderr, "Usage: .scanstats on|off\n");
3515      rc = 1;
3516    }
3517  }else
3518
3519  if( c=='s' && strncmp(azArg[0], "schema", n)==0 ){
3520    ShellState data;
3521    char *zErrMsg = 0;
3522    open_db(p, 0);
3523    memcpy(&data, p, sizeof(data));
3524    data.showHeader = 0;
3525    data.mode = MODE_Semi;
3526    if( nArg==2 ){
3527      int i;
3528      for(i=0; azArg[1][i]; i++) azArg[1][i] = ToLower(azArg[1][i]);
3529      if( strcmp(azArg[1],"sqlite_master")==0 ){
3530        char *new_argv[2], *new_colv[2];
3531        new_argv[0] = "CREATE TABLE sqlite_master (\n"
3532                      "  type text,\n"
3533                      "  name text,\n"
3534                      "  tbl_name text,\n"
3535                      "  rootpage integer,\n"
3536                      "  sql text\n"
3537                      ")";
3538        new_argv[1] = 0;
3539        new_colv[0] = "sql";
3540        new_colv[1] = 0;
3541        callback(&data, 1, new_argv, new_colv);
3542        rc = SQLITE_OK;
3543      }else if( strcmp(azArg[1],"sqlite_temp_master")==0 ){
3544        char *new_argv[2], *new_colv[2];
3545        new_argv[0] = "CREATE TEMP TABLE sqlite_temp_master (\n"
3546                      "  type text,\n"
3547                      "  name text,\n"
3548                      "  tbl_name text,\n"
3549                      "  rootpage integer,\n"
3550                      "  sql text\n"
3551                      ")";
3552        new_argv[1] = 0;
3553        new_colv[0] = "sql";
3554        new_colv[1] = 0;
3555        callback(&data, 1, new_argv, new_colv);
3556        rc = SQLITE_OK;
3557      }else{
3558        zShellStatic = azArg[1];
3559        rc = sqlite3_exec(p->db,
3560          "SELECT sql FROM "
3561          "  (SELECT sql sql, type type, tbl_name tbl_name, name name, rowid x"
3562          "     FROM sqlite_master UNION ALL"
3563          "   SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
3564          "WHERE lower(tbl_name) LIKE shellstatic()"
3565          "  AND type!='meta' AND sql NOTNULL "
3566          "ORDER BY rowid",
3567          callback, &data, &zErrMsg);
3568        zShellStatic = 0;
3569      }
3570    }else if( nArg==1 ){
3571      rc = sqlite3_exec(p->db,
3572         "SELECT sql FROM "
3573         "  (SELECT sql sql, type type, tbl_name tbl_name, name name, rowid x"
3574         "     FROM sqlite_master UNION ALL"
3575         "   SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
3576         "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%' "
3577         "ORDER BY rowid",
3578         callback, &data, &zErrMsg
3579      );
3580    }else{
3581      fprintf(stderr, "Usage: .schema ?LIKE-PATTERN?\n");
3582      rc = 1;
3583      goto meta_command_exit;
3584    }
3585    if( zErrMsg ){
3586      fprintf(stderr,"Error: %s\n", zErrMsg);
3587      sqlite3_free(zErrMsg);
3588      rc = 1;
3589    }else if( rc != SQLITE_OK ){
3590      fprintf(stderr,"Error: querying schema information\n");
3591      rc = 1;
3592    }else{
3593      rc = 0;
3594    }
3595  }else
3596
3597
3598#if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_SELECTTRACE)
3599  if( c=='s' && n==11 && strncmp(azArg[0], "selecttrace", n)==0 ){
3600    extern int sqlite3SelectTrace;
3601    sqlite3SelectTrace = integerValue(azArg[1]);
3602  }else
3603#endif
3604
3605
3606#ifdef SQLITE_DEBUG
3607  /* Undocumented commands for internal testing.  Subject to change
3608  ** without notice. */
3609  if( c=='s' && n>=10 && strncmp(azArg[0], "selftest-", 9)==0 ){
3610    if( strncmp(azArg[0]+9, "boolean", n-9)==0 ){
3611      int i, v;
3612      for(i=1; i<nArg; i++){
3613        v = booleanValue(azArg[i]);
3614        fprintf(p->out, "%s: %d 0x%x\n", azArg[i], v, v);
3615      }
3616    }
3617    if( strncmp(azArg[0]+9, "integer", n-9)==0 ){
3618      int i; sqlite3_int64 v;
3619      for(i=1; i<nArg; i++){
3620        char zBuf[200];
3621        v = integerValue(azArg[i]);
3622        sqlite3_snprintf(sizeof(zBuf),zBuf,"%s: %lld 0x%llx\n", azArg[i],v,v);
3623        fprintf(p->out, "%s", zBuf);
3624      }
3625    }
3626  }else
3627#endif
3628
3629  if( c=='s' && strncmp(azArg[0], "separator", n)==0 ){
3630    if( nArg<2 || nArg>3 ){
3631      fprintf(stderr, "Usage: .separator COL ?ROW?\n");
3632      rc = 1;
3633    }
3634    if( nArg>=2 ){
3635      sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator,
3636                       "%.*s", (int)ArraySize(p->colSeparator)-1, azArg[1]);
3637    }
3638    if( nArg>=3 ){
3639      sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator,
3640                       "%.*s", (int)ArraySize(p->rowSeparator)-1, azArg[2]);
3641    }
3642  }else
3643
3644  if( c=='s'
3645   && (strncmp(azArg[0], "shell", n)==0 || strncmp(azArg[0],"system",n)==0)
3646  ){
3647    char *zCmd;
3648    int i, x;
3649    if( nArg<2 ){
3650      fprintf(stderr, "Usage: .system COMMAND\n");
3651      rc = 1;
3652      goto meta_command_exit;
3653    }
3654    zCmd = sqlite3_mprintf(strchr(azArg[1],' ')==0?"%s":"\"%s\"", azArg[1]);
3655    for(i=2; i<nArg; i++){
3656      zCmd = sqlite3_mprintf(strchr(azArg[i],' ')==0?"%z %s":"%z \"%s\"",
3657                             zCmd, azArg[i]);
3658    }
3659    x = system(zCmd);
3660    sqlite3_free(zCmd);
3661    if( x ) fprintf(stderr, "System command returns %d\n", x);
3662  }else
3663
3664  if( c=='s' && strncmp(azArg[0], "show", n)==0 ){
3665    int i;
3666    if( nArg!=1 ){
3667      fprintf(stderr, "Usage: .show\n");
3668      rc = 1;
3669      goto meta_command_exit;
3670    }
3671    fprintf(p->out,"%12.12s: %s\n","echo", p->echoOn ? "on" : "off");
3672    fprintf(p->out,"%12.12s: %s\n","eqp", p->autoEQP ? "on" : "off");
3673    fprintf(p->out,"%9.9s: %s\n","explain", p->normalMode.valid ? "on" :"off");
3674    fprintf(p->out,"%12.12s: %s\n","headers", p->showHeader ? "on" : "off");
3675    fprintf(p->out,"%12.12s: %s\n","mode", modeDescr[p->mode]);
3676    fprintf(p->out,"%12.12s: ", "nullvalue");
3677      output_c_string(p->out, p->nullValue);
3678      fprintf(p->out, "\n");
3679    fprintf(p->out,"%12.12s: %s\n","output",
3680            strlen30(p->outfile) ? p->outfile : "stdout");
3681    fprintf(p->out,"%12.12s: ", "colseparator");
3682      output_c_string(p->out, p->colSeparator);
3683      fprintf(p->out, "\n");
3684    fprintf(p->out,"%12.12s: ", "rowseparator");
3685      output_c_string(p->out, p->rowSeparator);
3686      fprintf(p->out, "\n");
3687    fprintf(p->out,"%12.12s: %s\n","stats", p->statsOn ? "on" : "off");
3688    fprintf(p->out,"%12.12s: ","width");
3689    for (i=0;i<(int)ArraySize(p->colWidth) && p->colWidth[i] != 0;i++) {
3690      fprintf(p->out,"%d ",p->colWidth[i]);
3691    }
3692    fprintf(p->out,"\n");
3693  }else
3694
3695  if( c=='s' && strncmp(azArg[0], "stats", n)==0 ){
3696    if( nArg==2 ){
3697      p->statsOn = booleanValue(azArg[1]);
3698    }else{
3699      fprintf(stderr, "Usage: .stats on|off\n");
3700      rc = 1;
3701    }
3702  }else
3703
3704  if( c=='t' && n>1 && strncmp(azArg[0], "tables", n)==0 ){
3705    sqlite3_stmt *pStmt;
3706    char **azResult;
3707    int nRow, nAlloc;
3708    char *zSql = 0;
3709    int ii;
3710    open_db(p, 0);
3711    rc = sqlite3_prepare_v2(p->db, "PRAGMA database_list", -1, &pStmt, 0);
3712    if( rc ) return rc;
3713    zSql = sqlite3_mprintf(
3714        "SELECT name FROM sqlite_master"
3715        " WHERE type IN ('table','view')"
3716        "   AND name NOT LIKE 'sqlite_%%'"
3717        "   AND name LIKE ?1");
3718    while( sqlite3_step(pStmt)==SQLITE_ROW ){
3719      const char *zDbName = (const char*)sqlite3_column_text(pStmt, 1);
3720      if( zDbName==0 || strcmp(zDbName,"main")==0 ) continue;
3721      if( strcmp(zDbName,"temp")==0 ){
3722        zSql = sqlite3_mprintf(
3723                 "%z UNION ALL "
3724                 "SELECT 'temp.' || name FROM sqlite_temp_master"
3725                 " WHERE type IN ('table','view')"
3726                 "   AND name NOT LIKE 'sqlite_%%'"
3727                 "   AND name LIKE ?1", zSql);
3728      }else{
3729        zSql = sqlite3_mprintf(
3730                 "%z UNION ALL "
3731                 "SELECT '%q.' || name FROM \"%w\".sqlite_master"
3732                 " WHERE type IN ('table','view')"
3733                 "   AND name NOT LIKE 'sqlite_%%'"
3734                 "   AND name LIKE ?1", zSql, zDbName, zDbName);
3735      }
3736    }
3737    sqlite3_finalize(pStmt);
3738    zSql = sqlite3_mprintf("%z ORDER BY 1", zSql);
3739    rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
3740    sqlite3_free(zSql);
3741    if( rc ) return rc;
3742    nRow = nAlloc = 0;
3743    azResult = 0;
3744    if( nArg>1 ){
3745      sqlite3_bind_text(pStmt, 1, azArg[1], -1, SQLITE_TRANSIENT);
3746    }else{
3747      sqlite3_bind_text(pStmt, 1, "%", -1, SQLITE_STATIC);
3748    }
3749    while( sqlite3_step(pStmt)==SQLITE_ROW ){
3750      if( nRow>=nAlloc ){
3751        char **azNew;
3752        int n2 = nAlloc*2 + 10;
3753        azNew = sqlite3_realloc64(azResult, sizeof(azResult[0])*n2);
3754        if( azNew==0 ){
3755          fprintf(stderr, "Error: out of memory\n");
3756          break;
3757        }
3758        nAlloc = n2;
3759        azResult = azNew;
3760      }
3761      azResult[nRow] = sqlite3_mprintf("%s", sqlite3_column_text(pStmt, 0));
3762      if( azResult[nRow] ) nRow++;
3763    }
3764    sqlite3_finalize(pStmt);
3765    if( nRow>0 ){
3766      int len, maxlen = 0;
3767      int i, j;
3768      int nPrintCol, nPrintRow;
3769      for(i=0; i<nRow; i++){
3770        len = strlen30(azResult[i]);
3771        if( len>maxlen ) maxlen = len;
3772      }
3773      nPrintCol = 80/(maxlen+2);
3774      if( nPrintCol<1 ) nPrintCol = 1;
3775      nPrintRow = (nRow + nPrintCol - 1)/nPrintCol;
3776      for(i=0; i<nPrintRow; i++){
3777        for(j=i; j<nRow; j+=nPrintRow){
3778          char *zSp = j<nPrintRow ? "" : "  ";
3779          fprintf(p->out, "%s%-*s", zSp, maxlen, azResult[j] ? azResult[j]:"");
3780        }
3781        fprintf(p->out, "\n");
3782      }
3783    }
3784    for(ii=0; ii<nRow; ii++) sqlite3_free(azResult[ii]);
3785    sqlite3_free(azResult);
3786  }else
3787
3788  if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 && nArg>=2 ){
3789    static const struct {
3790       const char *zCtrlName;   /* Name of a test-control option */
3791       int ctrlCode;            /* Integer code for that option */
3792    } aCtrl[] = {
3793      { "prng_save",             SQLITE_TESTCTRL_PRNG_SAVE              },
3794      { "prng_restore",          SQLITE_TESTCTRL_PRNG_RESTORE           },
3795      { "prng_reset",            SQLITE_TESTCTRL_PRNG_RESET             },
3796      { "bitvec_test",           SQLITE_TESTCTRL_BITVEC_TEST            },
3797      { "fault_install",         SQLITE_TESTCTRL_FAULT_INSTALL          },
3798      { "benign_malloc_hooks",   SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS    },
3799      { "pending_byte",          SQLITE_TESTCTRL_PENDING_BYTE           },
3800      { "assert",                SQLITE_TESTCTRL_ASSERT                 },
3801      { "always",                SQLITE_TESTCTRL_ALWAYS                 },
3802      { "reserve",               SQLITE_TESTCTRL_RESERVE                },
3803      { "optimizations",         SQLITE_TESTCTRL_OPTIMIZATIONS          },
3804      { "iskeyword",             SQLITE_TESTCTRL_ISKEYWORD              },
3805      { "scratchmalloc",         SQLITE_TESTCTRL_SCRATCHMALLOC          },
3806      { "byteorder",             SQLITE_TESTCTRL_BYTEORDER              },
3807      { "never_corrupt",         SQLITE_TESTCTRL_NEVER_CORRUPT          },
3808      { "imposter",              SQLITE_TESTCTRL_IMPOSTER               },
3809    };
3810    int testctrl = -1;
3811    int rc2 = 0;
3812    int i, n2;
3813    open_db(p, 0);
3814
3815    /* convert testctrl text option to value. allow any unique prefix
3816    ** of the option name, or a numerical value. */
3817    n2 = strlen30(azArg[1]);
3818    for(i=0; i<(int)(sizeof(aCtrl)/sizeof(aCtrl[0])); i++){
3819      if( strncmp(azArg[1], aCtrl[i].zCtrlName, n2)==0 ){
3820        if( testctrl<0 ){
3821          testctrl = aCtrl[i].ctrlCode;
3822        }else{
3823          fprintf(stderr, "ambiguous option name: \"%s\"\n", azArg[1]);
3824          testctrl = -1;
3825          break;
3826        }
3827      }
3828    }
3829    if( testctrl<0 ) testctrl = (int)integerValue(azArg[1]);
3830    if( (testctrl<SQLITE_TESTCTRL_FIRST) || (testctrl>SQLITE_TESTCTRL_LAST) ){
3831      fprintf(stderr,"Error: invalid testctrl option: %s\n", azArg[1]);
3832    }else{
3833      switch(testctrl){
3834
3835        /* sqlite3_test_control(int, db, int) */
3836        case SQLITE_TESTCTRL_OPTIMIZATIONS:
3837        case SQLITE_TESTCTRL_RESERVE:
3838          if( nArg==3 ){
3839            int opt = (int)strtol(azArg[2], 0, 0);
3840            rc2 = sqlite3_test_control(testctrl, p->db, opt);
3841            fprintf(p->out, "%d (0x%08x)\n", rc2, rc2);
3842          } else {
3843            fprintf(stderr,"Error: testctrl %s takes a single int option\n",
3844                    azArg[1]);
3845          }
3846          break;
3847
3848        /* sqlite3_test_control(int) */
3849        case SQLITE_TESTCTRL_PRNG_SAVE:
3850        case SQLITE_TESTCTRL_PRNG_RESTORE:
3851        case SQLITE_TESTCTRL_PRNG_RESET:
3852        case SQLITE_TESTCTRL_BYTEORDER:
3853          if( nArg==2 ){
3854            rc2 = sqlite3_test_control(testctrl);
3855            fprintf(p->out, "%d (0x%08x)\n", rc2, rc2);
3856          } else {
3857            fprintf(stderr,"Error: testctrl %s takes no options\n", azArg[1]);
3858          }
3859          break;
3860
3861        /* sqlite3_test_control(int, uint) */
3862        case SQLITE_TESTCTRL_PENDING_BYTE:
3863          if( nArg==3 ){
3864            unsigned int opt = (unsigned int)integerValue(azArg[2]);
3865            rc2 = sqlite3_test_control(testctrl, opt);
3866            fprintf(p->out, "%d (0x%08x)\n", rc2, rc2);
3867          } else {
3868            fprintf(stderr,"Error: testctrl %s takes a single unsigned"
3869                           " int option\n", azArg[1]);
3870          }
3871          break;
3872
3873        /* sqlite3_test_control(int, int) */
3874        case SQLITE_TESTCTRL_ASSERT:
3875        case SQLITE_TESTCTRL_ALWAYS:
3876        case SQLITE_TESTCTRL_NEVER_CORRUPT:
3877          if( nArg==3 ){
3878            int opt = booleanValue(azArg[2]);
3879            rc2 = sqlite3_test_control(testctrl, opt);
3880            fprintf(p->out, "%d (0x%08x)\n", rc2, rc2);
3881          } else {
3882            fprintf(stderr,"Error: testctrl %s takes a single int option\n",
3883                            azArg[1]);
3884          }
3885          break;
3886
3887        /* sqlite3_test_control(int, char *) */
3888#ifdef SQLITE_N_KEYWORD
3889        case SQLITE_TESTCTRL_ISKEYWORD:
3890          if( nArg==3 ){
3891            const char *opt = azArg[2];
3892            rc2 = sqlite3_test_control(testctrl, opt);
3893            fprintf(p->out, "%d (0x%08x)\n", rc2, rc2);
3894          } else {
3895            fprintf(stderr,"Error: testctrl %s takes a single char * option\n",
3896                            azArg[1]);
3897          }
3898          break;
3899#endif
3900
3901        case SQLITE_TESTCTRL_IMPOSTER:
3902          if( nArg==5 ){
3903            rc2 = sqlite3_test_control(testctrl, p->db,
3904                          azArg[2],
3905                          integerValue(azArg[3]),
3906                          integerValue(azArg[4]));
3907            fprintf(p->out, "%d (0x%08x)\n", rc2, rc2);
3908          }else{
3909            fprintf(stderr,"Usage: .testctrl imposter dbName onoff tnum\n");
3910          }
3911          break;
3912
3913        case SQLITE_TESTCTRL_BITVEC_TEST:
3914        case SQLITE_TESTCTRL_FAULT_INSTALL:
3915        case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS:
3916        case SQLITE_TESTCTRL_SCRATCHMALLOC:
3917        default:
3918          fprintf(stderr,"Error: CLI support for testctrl %s not implemented\n",
3919                  azArg[1]);
3920          break;
3921      }
3922    }
3923  }else
3924
3925  if( c=='t' && n>4 && strncmp(azArg[0], "timeout", n)==0 ){
3926    open_db(p, 0);
3927    sqlite3_busy_timeout(p->db, nArg>=2 ? (int)integerValue(azArg[1]) : 0);
3928  }else
3929
3930  if( c=='t' && n>=5 && strncmp(azArg[0], "timer", n)==0 ){
3931    if( nArg==2 ){
3932      enableTimer = booleanValue(azArg[1]);
3933      if( enableTimer && !HAS_TIMER ){
3934        fprintf(stderr, "Error: timer not available on this system.\n");
3935        enableTimer = 0;
3936      }
3937    }else{
3938      fprintf(stderr, "Usage: .timer on|off\n");
3939      rc = 1;
3940    }
3941  }else
3942
3943  if( c=='t' && strncmp(azArg[0], "trace", n)==0 ){
3944    open_db(p, 0);
3945    if( nArg!=2 ){
3946      fprintf(stderr, "Usage: .trace FILE|off\n");
3947      rc = 1;
3948      goto meta_command_exit;
3949    }
3950    output_file_close(p->traceOut);
3951    p->traceOut = output_file_open(azArg[1]);
3952#if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT)
3953    if( p->traceOut==0 ){
3954      sqlite3_trace(p->db, 0, 0);
3955    }else{
3956      sqlite3_trace(p->db, sql_trace_callback, p->traceOut);
3957    }
3958#endif
3959  }else
3960
3961#if SQLITE_USER_AUTHENTICATION
3962  if( c=='u' && strncmp(azArg[0], "user", n)==0 ){
3963    if( nArg<2 ){
3964      fprintf(stderr, "Usage: .user SUBCOMMAND ...\n");
3965      rc = 1;
3966      goto meta_command_exit;
3967    }
3968    open_db(p, 0);
3969    if( strcmp(azArg[1],"login")==0 ){
3970      if( nArg!=4 ){
3971        fprintf(stderr, "Usage: .user login USER PASSWORD\n");
3972        rc = 1;
3973        goto meta_command_exit;
3974      }
3975      rc = sqlite3_user_authenticate(p->db, azArg[2], azArg[3],
3976                                    (int)strlen(azArg[3]));
3977      if( rc ){
3978        fprintf(stderr, "Authentication failed for user %s\n", azArg[2]);
3979        rc = 1;
3980      }
3981    }else if( strcmp(azArg[1],"add")==0 ){
3982      if( nArg!=5 ){
3983        fprintf(stderr, "Usage: .user add USER PASSWORD ISADMIN\n");
3984        rc = 1;
3985        goto meta_command_exit;
3986      }
3987      rc = sqlite3_user_add(p->db, azArg[2],
3988                            azArg[3], (int)strlen(azArg[3]),
3989                            booleanValue(azArg[4]));
3990      if( rc ){
3991        fprintf(stderr, "User-Add failed: %d\n", rc);
3992        rc = 1;
3993      }
3994    }else if( strcmp(azArg[1],"edit")==0 ){
3995      if( nArg!=5 ){
3996        fprintf(stderr, "Usage: .user edit USER PASSWORD ISADMIN\n");
3997        rc = 1;
3998        goto meta_command_exit;
3999      }
4000      rc = sqlite3_user_change(p->db, azArg[2],
4001                              azArg[3], (int)strlen(azArg[3]),
4002                              booleanValue(azArg[4]));
4003      if( rc ){
4004        fprintf(stderr, "User-Edit failed: %d\n", rc);
4005        rc = 1;
4006      }
4007    }else if( strcmp(azArg[1],"delete")==0 ){
4008      if( nArg!=3 ){
4009        fprintf(stderr, "Usage: .user delete USER\n");
4010        rc = 1;
4011        goto meta_command_exit;
4012      }
4013      rc = sqlite3_user_delete(p->db, azArg[2]);
4014      if( rc ){
4015        fprintf(stderr, "User-Delete failed: %d\n", rc);
4016        rc = 1;
4017      }
4018    }else{
4019      fprintf(stderr, "Usage: .user login|add|edit|delete ...\n");
4020      rc = 1;
4021      goto meta_command_exit;
4022    }
4023  }else
4024#endif /* SQLITE_USER_AUTHENTICATION */
4025
4026  if( c=='v' && strncmp(azArg[0], "version", n)==0 ){
4027    fprintf(p->out, "SQLite %s %s\n" /*extra-version-info*/,
4028        sqlite3_libversion(), sqlite3_sourceid());
4029  }else
4030
4031  if( c=='v' && strncmp(azArg[0], "vfsname", n)==0 ){
4032    const char *zDbName = nArg==2 ? azArg[1] : "main";
4033    char *zVfsName = 0;
4034    if( p->db ){
4035      sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFSNAME, &zVfsName);
4036      if( zVfsName ){
4037        fprintf(p->out, "%s\n", zVfsName);
4038        sqlite3_free(zVfsName);
4039      }
4040    }
4041  }else
4042
4043#if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_WHERETRACE)
4044  if( c=='w' && strncmp(azArg[0], "wheretrace", n)==0 ){
4045    extern int sqlite3WhereTrace;
4046    sqlite3WhereTrace = nArg>=2 ? booleanValue(azArg[1]) : 0xff;
4047  }else
4048#endif
4049
4050  if( c=='w' && strncmp(azArg[0], "width", n)==0 ){
4051    int j;
4052    assert( nArg<=ArraySize(azArg) );
4053    for(j=1; j<nArg && j<ArraySize(p->colWidth); j++){
4054      p->colWidth[j-1] = (int)integerValue(azArg[j]);
4055    }
4056  }else
4057
4058  {
4059    fprintf(stderr, "Error: unknown command or invalid arguments: "
4060      " \"%s\". Enter \".help\" for help\n", azArg[0]);
4061    rc = 1;
4062  }
4063
4064meta_command_exit:
4065  if( p->outCount ){
4066    p->outCount--;
4067    if( p->outCount==0 ) output_reset(p);
4068  }
4069  return rc;
4070}
4071
4072/*
4073** Return TRUE if a semicolon occurs anywhere in the first N characters
4074** of string z[].
4075*/
4076static int line_contains_semicolon(const char *z, int N){
4077  int i;
4078  for(i=0; i<N; i++){  if( z[i]==';' ) return 1; }
4079  return 0;
4080}
4081
4082/*
4083** Test to see if a line consists entirely of whitespace.
4084*/
4085static int _all_whitespace(const char *z){
4086  for(; *z; z++){
4087    if( IsSpace(z[0]) ) continue;
4088    if( *z=='/' && z[1]=='*' ){
4089      z += 2;
4090      while( *z && (*z!='*' || z[1]!='/') ){ z++; }
4091      if( *z==0 ) return 0;
4092      z++;
4093      continue;
4094    }
4095    if( *z=='-' && z[1]=='-' ){
4096      z += 2;
4097      while( *z && *z!='\n' ){ z++; }
4098      if( *z==0 ) return 1;
4099      continue;
4100    }
4101    return 0;
4102  }
4103  return 1;
4104}
4105
4106/*
4107** Return TRUE if the line typed in is an SQL command terminator other
4108** than a semi-colon.  The SQL Server style "go" command is understood
4109** as is the Oracle "/".
4110*/
4111static int line_is_command_terminator(const char *zLine){
4112  while( IsSpace(zLine[0]) ){ zLine++; };
4113  if( zLine[0]=='/' && _all_whitespace(&zLine[1]) ){
4114    return 1;  /* Oracle */
4115  }
4116  if( ToLower(zLine[0])=='g' && ToLower(zLine[1])=='o'
4117         && _all_whitespace(&zLine[2]) ){
4118    return 1;  /* SQL Server */
4119  }
4120  return 0;
4121}
4122
4123/*
4124** Return true if zSql is a complete SQL statement.  Return false if it
4125** ends in the middle of a string literal or C-style comment.
4126*/
4127static int line_is_complete(char *zSql, int nSql){
4128  int rc;
4129  if( zSql==0 ) return 1;
4130  zSql[nSql] = ';';
4131  zSql[nSql+1] = 0;
4132  rc = sqlite3_complete(zSql);
4133  zSql[nSql] = 0;
4134  return rc;
4135}
4136
4137/*
4138** Read input from *in and process it.  If *in==0 then input
4139** is interactive - the user is typing it it.  Otherwise, input
4140** is coming from a file or device.  A prompt is issued and history
4141** is saved only if input is interactive.  An interrupt signal will
4142** cause this routine to exit immediately, unless input is interactive.
4143**
4144** Return the number of errors.
4145*/
4146static int process_input(ShellState *p, FILE *in){
4147  char *zLine = 0;          /* A single input line */
4148  char *zSql = 0;           /* Accumulated SQL text */
4149  int nLine;                /* Length of current line */
4150  int nSql = 0;             /* Bytes of zSql[] used */
4151  int nAlloc = 0;           /* Allocated zSql[] space */
4152  int nSqlPrior = 0;        /* Bytes of zSql[] used by prior line */
4153  char *zErrMsg;            /* Error message returned */
4154  int rc;                   /* Error code */
4155  int errCnt = 0;           /* Number of errors seen */
4156  int lineno = 0;           /* Current line number */
4157  int startline = 0;        /* Line number for start of current input */
4158
4159  while( errCnt==0 || !bail_on_error || (in==0 && stdin_is_interactive) ){
4160    fflush(p->out);
4161    zLine = one_input_line(in, zLine, nSql>0);
4162    if( zLine==0 ){
4163      /* End of input */
4164      if( stdin_is_interactive ) printf("\n");
4165      break;
4166    }
4167    if( seenInterrupt ){
4168      if( in!=0 ) break;
4169      seenInterrupt = 0;
4170    }
4171    lineno++;
4172    if( nSql==0 && _all_whitespace(zLine) ){
4173      if( p->echoOn ) printf("%s\n", zLine);
4174      continue;
4175    }
4176    if( zLine && zLine[0]=='.' && nSql==0 ){
4177      if( p->echoOn ) printf("%s\n", zLine);
4178      rc = do_meta_command(zLine, p);
4179      if( rc==2 ){ /* exit requested */
4180        break;
4181      }else if( rc ){
4182        errCnt++;
4183      }
4184      continue;
4185    }
4186    if( line_is_command_terminator(zLine) && line_is_complete(zSql, nSql) ){
4187      memcpy(zLine,";",2);
4188    }
4189    nLine = strlen30(zLine);
4190    if( nSql+nLine+2>=nAlloc ){
4191      nAlloc = nSql+nLine+100;
4192      zSql = realloc(zSql, nAlloc);
4193      if( zSql==0 ){
4194        fprintf(stderr, "Error: out of memory\n");
4195        exit(1);
4196      }
4197    }
4198    nSqlPrior = nSql;
4199    if( nSql==0 ){
4200      int i;
4201      for(i=0; zLine[i] && IsSpace(zLine[i]); i++){}
4202      assert( nAlloc>0 && zSql!=0 );
4203      memcpy(zSql, zLine+i, nLine+1-i);
4204      startline = lineno;
4205      nSql = nLine-i;
4206    }else{
4207      zSql[nSql++] = '\n';
4208      memcpy(zSql+nSql, zLine, nLine+1);
4209      nSql += nLine;
4210    }
4211    if( nSql && line_contains_semicolon(&zSql[nSqlPrior], nSql-nSqlPrior)
4212                && sqlite3_complete(zSql) ){
4213      p->cnt = 0;
4214      open_db(p, 0);
4215      if( p->backslashOn ) resolve_backslashes(zSql);
4216      BEGIN_TIMER;
4217      rc = shell_exec(p->db, zSql, shell_callback, p, &zErrMsg);
4218      END_TIMER;
4219      if( rc || zErrMsg ){
4220        char zPrefix[100];
4221        if( in!=0 || !stdin_is_interactive ){
4222          sqlite3_snprintf(sizeof(zPrefix), zPrefix,
4223                           "Error: near line %d:", startline);
4224        }else{
4225          sqlite3_snprintf(sizeof(zPrefix), zPrefix, "Error:");
4226        }
4227        if( zErrMsg!=0 ){
4228          fprintf(stderr, "%s %s\n", zPrefix, zErrMsg);
4229          sqlite3_free(zErrMsg);
4230          zErrMsg = 0;
4231        }else{
4232          fprintf(stderr, "%s %s\n", zPrefix, sqlite3_errmsg(p->db));
4233        }
4234        errCnt++;
4235      }
4236      nSql = 0;
4237      if( p->outCount ){
4238        output_reset(p);
4239        p->outCount = 0;
4240      }
4241    }else if( nSql && _all_whitespace(zSql) ){
4242      if( p->echoOn ) printf("%s\n", zSql);
4243      nSql = 0;
4244    }
4245  }
4246  if( nSql ){
4247    if( !_all_whitespace(zSql) ){
4248      fprintf(stderr, "Error: incomplete SQL: %s\n", zSql);
4249      errCnt++;
4250    }
4251    free(zSql);
4252  }
4253  free(zLine);
4254  return errCnt>0;
4255}
4256
4257/*
4258** Return a pathname which is the user's home directory.  A
4259** 0 return indicates an error of some kind.
4260*/
4261static char *find_home_dir(void){
4262  static char *home_dir = NULL;
4263  if( home_dir ) return home_dir;
4264
4265#if !defined(_WIN32) && !defined(WIN32) && !defined(_WIN32_WCE) \
4266     && !defined(__RTP__) && !defined(_WRS_KERNEL)
4267  {
4268    struct passwd *pwent;
4269    uid_t uid = getuid();
4270    if( (pwent=getpwuid(uid)) != NULL) {
4271      home_dir = pwent->pw_dir;
4272    }
4273  }
4274#endif
4275
4276#if defined(_WIN32_WCE)
4277  /* Windows CE (arm-wince-mingw32ce-gcc) does not provide getenv()
4278   */
4279  home_dir = "/";
4280#else
4281
4282#if defined(_WIN32) || defined(WIN32)
4283  if (!home_dir) {
4284    home_dir = getenv("USERPROFILE");
4285  }
4286#endif
4287
4288  if (!home_dir) {
4289    home_dir = getenv("HOME");
4290  }
4291
4292#if defined(_WIN32) || defined(WIN32)
4293  if (!home_dir) {
4294    char *zDrive, *zPath;
4295    int n;
4296    zDrive = getenv("HOMEDRIVE");
4297    zPath = getenv("HOMEPATH");
4298    if( zDrive && zPath ){
4299      n = strlen30(zDrive) + strlen30(zPath) + 1;
4300      home_dir = malloc( n );
4301      if( home_dir==0 ) return 0;
4302      sqlite3_snprintf(n, home_dir, "%s%s", zDrive, zPath);
4303      return home_dir;
4304    }
4305    home_dir = "c:\\";
4306  }
4307#endif
4308
4309#endif /* !_WIN32_WCE */
4310
4311  if( home_dir ){
4312    int n = strlen30(home_dir) + 1;
4313    char *z = malloc( n );
4314    if( z ) memcpy(z, home_dir, n);
4315    home_dir = z;
4316  }
4317
4318  return home_dir;
4319}
4320
4321/*
4322** Read input from the file given by sqliterc_override.  Or if that
4323** parameter is NULL, take input from ~/.sqliterc
4324**
4325** Returns the number of errors.
4326*/
4327static void process_sqliterc(
4328  ShellState *p,                  /* Configuration data */
4329  const char *sqliterc_override   /* Name of config file. NULL to use default */
4330){
4331  char *home_dir = NULL;
4332  const char *sqliterc = sqliterc_override;
4333  char *zBuf = 0;
4334  FILE *in = NULL;
4335
4336  if (sqliterc == NULL) {
4337    home_dir = find_home_dir();
4338    if( home_dir==0 ){
4339      fprintf(stderr, "-- warning: cannot find home directory;"
4340                      " cannot read ~/.sqliterc\n");
4341      return;
4342    }
4343    sqlite3_initialize();
4344    zBuf = sqlite3_mprintf("%s/.sqliterc",home_dir);
4345    sqliterc = zBuf;
4346  }
4347  in = fopen(sqliterc,"rb");
4348  if( in ){
4349    if( stdin_is_interactive ){
4350      fprintf(stderr,"-- Loading resources from %s\n",sqliterc);
4351    }
4352    process_input(p,in);
4353    fclose(in);
4354  }
4355  sqlite3_free(zBuf);
4356}
4357
4358/*
4359** Show available command line options
4360*/
4361static const char zOptions[] =
4362  "   -ascii               set output mode to 'ascii'\n"
4363  "   -bail                stop after hitting an error\n"
4364  "   -batch               force batch I/O\n"
4365  "   -column              set output mode to 'column'\n"
4366  "   -cmd COMMAND         run \"COMMAND\" before reading stdin\n"
4367  "   -csv                 set output mode to 'csv'\n"
4368  "   -echo                print commands before execution\n"
4369  "   -init FILENAME       read/process named file\n"
4370  "   -[no]header          turn headers on or off\n"
4371#if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
4372  "   -heap SIZE           Size of heap for memsys3 or memsys5\n"
4373#endif
4374  "   -help                show this message\n"
4375  "   -html                set output mode to HTML\n"
4376  "   -interactive         force interactive I/O\n"
4377  "   -line                set output mode to 'line'\n"
4378  "   -list                set output mode to 'list'\n"
4379  "   -lookaside SIZE N    use N entries of SZ bytes for lookaside memory\n"
4380  "   -mmap N              default mmap size set to N\n"
4381#ifdef SQLITE_ENABLE_MULTIPLEX
4382  "   -multiplex           enable the multiplexor VFS\n"
4383#endif
4384  "   -newline SEP         set output row separator. Default: '\\n'\n"
4385  "   -nullvalue TEXT      set text string for NULL values. Default ''\n"
4386  "   -pagecache SIZE N    use N slots of SZ bytes each for page cache memory\n"
4387  "   -scratch SIZE N      use N slots of SZ bytes each for scratch memory\n"
4388  "   -separator SEP       set output column separator. Default: '|'\n"
4389  "   -stats               print memory stats before each finalize\n"
4390  "   -version             show SQLite version\n"
4391  "   -vfs NAME            use NAME as the default VFS\n"
4392#ifdef SQLITE_ENABLE_VFSTRACE
4393  "   -vfstrace            enable tracing of all VFS calls\n"
4394#endif
4395;
4396static void usage(int showDetail){
4397  fprintf(stderr,
4398      "Usage: %s [OPTIONS] FILENAME [SQL]\n"
4399      "FILENAME is the name of an SQLite database. A new database is created\n"
4400      "if the file does not previously exist.\n", Argv0);
4401  if( showDetail ){
4402    fprintf(stderr, "OPTIONS include:\n%s", zOptions);
4403  }else{
4404    fprintf(stderr, "Use the -help option for additional information\n");
4405  }
4406  exit(1);
4407}
4408
4409/*
4410** Initialize the state information in data
4411*/
4412static void main_init(ShellState *data) {
4413  memset(data, 0, sizeof(*data));
4414  data->mode = MODE_List;
4415  memcpy(data->colSeparator,SEP_Column, 2);
4416  memcpy(data->rowSeparator,SEP_Row, 2);
4417  data->showHeader = 0;
4418  data->shellFlgs = SHFLG_Lookaside;
4419  sqlite3_config(SQLITE_CONFIG_URI, 1);
4420  sqlite3_config(SQLITE_CONFIG_LOG, shellLog, data);
4421  sqlite3_config(SQLITE_CONFIG_MULTITHREAD);
4422  sqlite3_snprintf(sizeof(mainPrompt), mainPrompt,"sqlite> ");
4423  sqlite3_snprintf(sizeof(continuePrompt), continuePrompt,"   ...> ");
4424}
4425
4426/*
4427** Output text to the console in a font that attracts extra attention.
4428*/
4429#ifdef _WIN32
4430static void printBold(const char *zText){
4431  HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
4432  CONSOLE_SCREEN_BUFFER_INFO defaultScreenInfo;
4433  GetConsoleScreenBufferInfo(out, &defaultScreenInfo);
4434  SetConsoleTextAttribute(out,
4435         FOREGROUND_RED|FOREGROUND_INTENSITY
4436  );
4437  printf("%s", zText);
4438  SetConsoleTextAttribute(out, defaultScreenInfo.wAttributes);
4439}
4440#else
4441static void printBold(const char *zText){
4442  printf("\033[1m%s\033[0m", zText);
4443}
4444#endif
4445
4446/*
4447** Get the argument to an --option.  Throw an error and die if no argument
4448** is available.
4449*/
4450static char *cmdline_option_value(int argc, char **argv, int i){
4451  if( i==argc ){
4452    fprintf(stderr, "%s: Error: missing argument to %s\n",
4453            argv[0], argv[argc-1]);
4454    exit(1);
4455  }
4456  return argv[i];
4457}
4458
4459int SQLITE_CDECL main(int argc, char **argv){
4460  char *zErrMsg = 0;
4461  ShellState data;
4462  const char *zInitFile = 0;
4463  int i;
4464  int rc = 0;
4465  int warnInmemoryDb = 0;
4466  int readStdin = 1;
4467  int nCmd = 0;
4468  char **azCmd = 0;
4469
4470#if USE_SYSTEM_SQLITE+0!=1
4471  if( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)!=0 ){
4472    fprintf(stderr, "SQLite header and source version mismatch\n%s\n%s\n",
4473            sqlite3_sourceid(), SQLITE_SOURCE_ID);
4474    exit(1);
4475  }
4476#endif
4477  setBinaryMode(stdin);
4478  setvbuf(stderr, 0, _IONBF, 0); /* Make sure stderr is unbuffered */
4479  Argv0 = argv[0];
4480  main_init(&data);
4481  stdin_is_interactive = isatty(0);
4482
4483  /* Make sure we have a valid signal handler early, before anything
4484  ** else is done.
4485  */
4486#ifdef SIGINT
4487  signal(SIGINT, interrupt_handler);
4488#endif
4489
4490#ifdef SQLITE_SHELL_DBNAME_PROC
4491  {
4492    /* If the SQLITE_SHELL_DBNAME_PROC macro is defined, then it is the name
4493    ** of a C-function that will provide the name of the database file.  Use
4494    ** this compile-time option to embed this shell program in larger
4495    ** applications. */
4496    extern void SQLITE_SHELL_DBNAME_PROC(const char**);
4497    SQLITE_SHELL_DBNAME_PROC(&data.zDbFilename);
4498    warnInmemoryDb = 0;
4499  }
4500#endif
4501
4502  /* Do an initial pass through the command-line argument to locate
4503  ** the name of the database file, the name of the initialization file,
4504  ** the size of the alternative malloc heap,
4505  ** and the first command to execute.
4506  */
4507  for(i=1; i<argc; i++){
4508    char *z;
4509    z = argv[i];
4510    if( z[0]!='-' ){
4511      if( data.zDbFilename==0 ){
4512        data.zDbFilename = z;
4513      }else{
4514        /* Excesss arguments are interpreted as SQL (or dot-commands) and
4515        ** mean that nothing is read from stdin */
4516        readStdin = 0;
4517        nCmd++;
4518        azCmd = realloc(azCmd, sizeof(azCmd[0])*nCmd);
4519        if( azCmd==0 ){
4520          fprintf(stderr, "out of memory\n");
4521          exit(1);
4522        }
4523        azCmd[nCmd-1] = z;
4524      }
4525    }
4526    if( z[1]=='-' ) z++;
4527    if( strcmp(z,"-separator")==0
4528     || strcmp(z,"-nullvalue")==0
4529     || strcmp(z,"-newline")==0
4530     || strcmp(z,"-cmd")==0
4531    ){
4532      (void)cmdline_option_value(argc, argv, ++i);
4533    }else if( strcmp(z,"-init")==0 ){
4534      zInitFile = cmdline_option_value(argc, argv, ++i);
4535    }else if( strcmp(z,"-batch")==0 ){
4536      /* Need to check for batch mode here to so we can avoid printing
4537      ** informational messages (like from process_sqliterc) before
4538      ** we do the actual processing of arguments later in a second pass.
4539      */
4540      stdin_is_interactive = 0;
4541    }else if( strcmp(z,"-heap")==0 ){
4542#if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
4543      const char *zSize;
4544      sqlite3_int64 szHeap;
4545
4546      zSize = cmdline_option_value(argc, argv, ++i);
4547      szHeap = integerValue(zSize);
4548      if( szHeap>0x7fff0000 ) szHeap = 0x7fff0000;
4549      sqlite3_config(SQLITE_CONFIG_HEAP, malloc((int)szHeap), (int)szHeap, 64);
4550#endif
4551    }else if( strcmp(z,"-scratch")==0 ){
4552      int n, sz;
4553      sz = (int)integerValue(cmdline_option_value(argc,argv,++i));
4554      if( sz>400000 ) sz = 400000;
4555      if( sz<2500 ) sz = 2500;
4556      n = (int)integerValue(cmdline_option_value(argc,argv,++i));
4557      if( n>10 ) n = 10;
4558      if( n<1 ) n = 1;
4559      sqlite3_config(SQLITE_CONFIG_SCRATCH, malloc(n*sz+1), sz, n);
4560      data.shellFlgs |= SHFLG_Scratch;
4561    }else if( strcmp(z,"-pagecache")==0 ){
4562      int n, sz;
4563      sz = (int)integerValue(cmdline_option_value(argc,argv,++i));
4564      if( sz>70000 ) sz = 70000;
4565      if( sz<800 ) sz = 800;
4566      n = (int)integerValue(cmdline_option_value(argc,argv,++i));
4567      if( n<10 ) n = 10;
4568      sqlite3_config(SQLITE_CONFIG_PAGECACHE, malloc(n*sz+1), sz, n);
4569      data.shellFlgs |= SHFLG_Pagecache;
4570    }else if( strcmp(z,"-lookaside")==0 ){
4571      int n, sz;
4572      sz = (int)integerValue(cmdline_option_value(argc,argv,++i));
4573      if( sz<0 ) sz = 0;
4574      n = (int)integerValue(cmdline_option_value(argc,argv,++i));
4575      if( n<0 ) n = 0;
4576      sqlite3_config(SQLITE_CONFIG_LOOKASIDE, sz, n);
4577      if( sz*n==0 ) data.shellFlgs &= ~SHFLG_Lookaside;
4578#ifdef SQLITE_ENABLE_VFSTRACE
4579    }else if( strcmp(z,"-vfstrace")==0 ){
4580      extern int vfstrace_register(
4581         const char *zTraceName,
4582         const char *zOldVfsName,
4583         int (*xOut)(const char*,void*),
4584         void *pOutArg,
4585         int makeDefault
4586      );
4587      vfstrace_register("trace",0,(int(*)(const char*,void*))fputs,stderr,1);
4588#endif
4589#ifdef SQLITE_ENABLE_MULTIPLEX
4590    }else if( strcmp(z,"-multiplex")==0 ){
4591      extern int sqlite3_multiple_initialize(const char*,int);
4592      sqlite3_multiplex_initialize(0, 1);
4593#endif
4594    }else if( strcmp(z,"-mmap")==0 ){
4595      sqlite3_int64 sz = integerValue(cmdline_option_value(argc,argv,++i));
4596      sqlite3_config(SQLITE_CONFIG_MMAP_SIZE, sz, sz);
4597    }else if( strcmp(z,"-vfs")==0 ){
4598      sqlite3_vfs *pVfs = sqlite3_vfs_find(cmdline_option_value(argc,argv,++i));
4599      if( pVfs ){
4600        sqlite3_vfs_register(pVfs, 1);
4601      }else{
4602        fprintf(stderr, "no such VFS: \"%s\"\n", argv[i]);
4603        exit(1);
4604      }
4605    }
4606  }
4607  if( data.zDbFilename==0 ){
4608#ifndef SQLITE_OMIT_MEMORYDB
4609    data.zDbFilename = ":memory:";
4610    warnInmemoryDb = argc==1;
4611#else
4612    fprintf(stderr,"%s: Error: no database filename specified\n", Argv0);
4613    return 1;
4614#endif
4615  }
4616  data.out = stdout;
4617
4618  /* Go ahead and open the database file if it already exists.  If the
4619  ** file does not exist, delay opening it.  This prevents empty database
4620  ** files from being created if a user mistypes the database name argument
4621  ** to the sqlite command-line tool.
4622  */
4623  if( access(data.zDbFilename, 0)==0 ){
4624    open_db(&data, 0);
4625  }
4626
4627  /* Process the initialization file if there is one.  If no -init option
4628  ** is given on the command line, look for a file named ~/.sqliterc and
4629  ** try to process it.
4630  */
4631  process_sqliterc(&data,zInitFile);
4632
4633  /* Make a second pass through the command-line argument and set
4634  ** options.  This second pass is delayed until after the initialization
4635  ** file is processed so that the command-line arguments will override
4636  ** settings in the initialization file.
4637  */
4638  for(i=1; i<argc; i++){
4639    char *z = argv[i];
4640    if( z[0]!='-' ) continue;
4641    if( z[1]=='-' ){ z++; }
4642    if( strcmp(z,"-init")==0 ){
4643      i++;
4644    }else if( strcmp(z,"-html")==0 ){
4645      data.mode = MODE_Html;
4646    }else if( strcmp(z,"-list")==0 ){
4647      data.mode = MODE_List;
4648    }else if( strcmp(z,"-line")==0 ){
4649      data.mode = MODE_Line;
4650    }else if( strcmp(z,"-column")==0 ){
4651      data.mode = MODE_Column;
4652    }else if( strcmp(z,"-csv")==0 ){
4653      data.mode = MODE_Csv;
4654      memcpy(data.colSeparator,",",2);
4655    }else if( strcmp(z,"-ascii")==0 ){
4656      data.mode = MODE_Ascii;
4657      sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator,
4658                       SEP_Unit);
4659      sqlite3_snprintf(sizeof(data.rowSeparator), data.rowSeparator,
4660                       SEP_Record);
4661    }else if( strcmp(z,"-separator")==0 ){
4662      sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator,
4663                       "%s",cmdline_option_value(argc,argv,++i));
4664    }else if( strcmp(z,"-newline")==0 ){
4665      sqlite3_snprintf(sizeof(data.rowSeparator), data.rowSeparator,
4666                       "%s",cmdline_option_value(argc,argv,++i));
4667    }else if( strcmp(z,"-nullvalue")==0 ){
4668      sqlite3_snprintf(sizeof(data.nullValue), data.nullValue,
4669                       "%s",cmdline_option_value(argc,argv,++i));
4670    }else if( strcmp(z,"-header")==0 ){
4671      data.showHeader = 1;
4672    }else if( strcmp(z,"-noheader")==0 ){
4673      data.showHeader = 0;
4674    }else if( strcmp(z,"-echo")==0 ){
4675      data.echoOn = 1;
4676    }else if( strcmp(z,"-eqp")==0 ){
4677      data.autoEQP = 1;
4678    }else if( strcmp(z,"-stats")==0 ){
4679      data.statsOn = 1;
4680    }else if( strcmp(z,"-scanstats")==0 ){
4681      data.scanstatsOn = 1;
4682    }else if( strcmp(z,"-backslash")==0 ){
4683      /* Undocumented command-line option: -backslash
4684      ** Causes C-style backslash escapes to be evaluated in SQL statements
4685      ** prior to sending the SQL into SQLite.  Useful for injecting
4686      ** crazy bytes in the middle of SQL statements for testing and debugging.
4687      */
4688      data.backslashOn = 1;
4689    }else if( strcmp(z,"-bail")==0 ){
4690      bail_on_error = 1;
4691    }else if( strcmp(z,"-version")==0 ){
4692      printf("%s %s\n", sqlite3_libversion(), sqlite3_sourceid());
4693      return 0;
4694    }else if( strcmp(z,"-interactive")==0 ){
4695      stdin_is_interactive = 1;
4696    }else if( strcmp(z,"-batch")==0 ){
4697      stdin_is_interactive = 0;
4698    }else if( strcmp(z,"-heap")==0 ){
4699      i++;
4700    }else if( strcmp(z,"-scratch")==0 ){
4701      i+=2;
4702    }else if( strcmp(z,"-pagecache")==0 ){
4703      i+=2;
4704    }else if( strcmp(z,"-lookaside")==0 ){
4705      i+=2;
4706    }else if( strcmp(z,"-mmap")==0 ){
4707      i++;
4708    }else if( strcmp(z,"-vfs")==0 ){
4709      i++;
4710#ifdef SQLITE_ENABLE_VFSTRACE
4711    }else if( strcmp(z,"-vfstrace")==0 ){
4712      i++;
4713#endif
4714#ifdef SQLITE_ENABLE_MULTIPLEX
4715    }else if( strcmp(z,"-multiplex")==0 ){
4716      i++;
4717#endif
4718    }else if( strcmp(z,"-help")==0 ){
4719      usage(1);
4720    }else if( strcmp(z,"-cmd")==0 ){
4721      /* Run commands that follow -cmd first and separately from commands
4722      ** that simply appear on the command-line.  This seems goofy.  It would
4723      ** be better if all commands ran in the order that they appear.  But
4724      ** we retain the goofy behavior for historical compatibility. */
4725      if( i==argc-1 ) break;
4726      z = cmdline_option_value(argc,argv,++i);
4727      if( z[0]=='.' ){
4728        rc = do_meta_command(z, &data);
4729        if( rc && bail_on_error ) return rc==2 ? 0 : rc;
4730      }else{
4731        open_db(&data, 0);
4732        rc = shell_exec(data.db, z, shell_callback, &data, &zErrMsg);
4733        if( zErrMsg!=0 ){
4734          fprintf(stderr,"Error: %s\n", zErrMsg);
4735          if( bail_on_error ) return rc!=0 ? rc : 1;
4736        }else if( rc!=0 ){
4737          fprintf(stderr,"Error: unable to process SQL \"%s\"\n", z);
4738          if( bail_on_error ) return rc;
4739        }
4740      }
4741    }else{
4742      fprintf(stderr,"%s: Error: unknown option: %s\n", Argv0, z);
4743      fprintf(stderr,"Use -help for a list of options.\n");
4744      return 1;
4745    }
4746  }
4747
4748  if( !readStdin ){
4749    /* Run all arguments that do not begin with '-' as if they were separate
4750    ** command-line inputs, except for the argToSkip argument which contains
4751    ** the database filename.
4752    */
4753    for(i=0; i<nCmd; i++){
4754      if( azCmd[i][0]=='.' ){
4755        rc = do_meta_command(azCmd[i], &data);
4756        if( rc ) return rc==2 ? 0 : rc;
4757      }else{
4758        open_db(&data, 0);
4759        rc = shell_exec(data.db, azCmd[i], shell_callback, &data, &zErrMsg);
4760        if( zErrMsg!=0 ){
4761          fprintf(stderr,"Error: %s\n", zErrMsg);
4762          return rc!=0 ? rc : 1;
4763        }else if( rc!=0 ){
4764          fprintf(stderr,"Error: unable to process SQL: %s\n", azCmd[i]);
4765          return rc;
4766        }
4767      }
4768    }
4769    free(azCmd);
4770  }else{
4771    /* Run commands received from standard input
4772    */
4773    if( stdin_is_interactive ){
4774      char *zHome;
4775      char *zHistory = 0;
4776      int nHistory;
4777      printf(
4778        "SQLite version %s %.19s\n" /*extra-version-info*/
4779        "Enter \".help\" for usage hints.\n",
4780        sqlite3_libversion(), sqlite3_sourceid()
4781      );
4782      if( warnInmemoryDb ){
4783        printf("Connected to a ");
4784        printBold("transient in-memory database");
4785        printf(".\nUse \".open FILENAME\" to reopen on a "
4786               "persistent database.\n");
4787      }
4788      zHome = find_home_dir();
4789      if( zHome ){
4790        nHistory = strlen30(zHome) + 20;
4791        if( (zHistory = malloc(nHistory))!=0 ){
4792          sqlite3_snprintf(nHistory, zHistory,"%s/.sqlite_history", zHome);
4793        }
4794      }
4795      if( zHistory ) shell_read_history(zHistory);
4796      rc = process_input(&data, 0);
4797      if( zHistory ){
4798        shell_stifle_history(100);
4799        shell_write_history(zHistory);
4800        free(zHistory);
4801      }
4802    }else{
4803      rc = process_input(&data, stdin);
4804    }
4805  }
4806  set_table_name(&data, 0);
4807  if( data.db ){
4808    sqlite3_close(data.db);
4809  }
4810  sqlite3_free(data.zFreeOnClose);
4811  return rc;
4812}
4813