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