modernc.org/cc@v1.0.1/v2/testdata/_sqlite/sqlite-amalgamation-3210000/shell.c (about)

     1  /* DO NOT EDIT!
     2  ** This file is automatically generated by the script in the canonical
     3  ** SQLite source tree at tool/mkshellc.tcl.  That script combines source
     4  ** code from various constituent source files of SQLite into this single
     5  ** "shell.c" file used to implement the SQLite command-line shell.
     6  **
     7  ** Most of the code found below comes from the "src/shell.c.in" file in
     8  ** the canonical SQLite source tree.  That main file contains "INCLUDE"
     9  ** lines that specify other files in the canonical source tree that are
    10  ** inserted to getnerate this complete program source file.
    11  **
    12  ** The code from multiple files is combined into this single "shell.c"
    13  ** source file to help make the command-line program easier to compile.
    14  **
    15  ** To modify this program, get a copy of the canonical SQLite source tree,
    16  ** edit the src/shell.c.in" and/or some of the other files that are included
    17  ** by "src/shell.c.in", then rerun the tool/mkshellc.tcl script.
    18  */
    19  /*
    20  ** 2001 September 15
    21  **
    22  ** The author disclaims copyright to this source code.  In place of
    23  ** a legal notice, here is a blessing:
    24  **
    25  **    May you do good and not evil.
    26  **    May you find forgiveness for yourself and forgive others.
    27  **    May you share freely, never taking more than you give.
    28  **
    29  *************************************************************************
    30  ** This file contains code to implement the "sqlite" command line
    31  ** utility for accessing SQLite databases.
    32  */
    33  #if (defined(_WIN32) || defined(WIN32)) && !defined(_CRT_SECURE_NO_WARNINGS)
    34  /* This needs to come before any includes for MSVC compiler */
    35  #define _CRT_SECURE_NO_WARNINGS
    36  #endif
    37  
    38  /*
    39  ** Warning pragmas copied from msvc.h in the core.
    40  */
    41  #if defined(_MSC_VER)
    42  #pragma warning(disable : 4054)
    43  #pragma warning(disable : 4055)
    44  #pragma warning(disable : 4100)
    45  #pragma warning(disable : 4127)
    46  #pragma warning(disable : 4130)
    47  #pragma warning(disable : 4152)
    48  #pragma warning(disable : 4189)
    49  #pragma warning(disable : 4206)
    50  #pragma warning(disable : 4210)
    51  #pragma warning(disable : 4232)
    52  #pragma warning(disable : 4244)
    53  #pragma warning(disable : 4305)
    54  #pragma warning(disable : 4306)
    55  #pragma warning(disable : 4702)
    56  #pragma warning(disable : 4706)
    57  #endif /* defined(_MSC_VER) */
    58  
    59  /*
    60  ** No support for loadable extensions in VxWorks.
    61  */
    62  #if (defined(__RTP__) || defined(_WRS_KERNEL)) && !SQLITE_OMIT_LOAD_EXTENSION
    63  # define SQLITE_OMIT_LOAD_EXTENSION 1
    64  #endif
    65  
    66  /*
    67  ** Enable large-file support for fopen() and friends on unix.
    68  */
    69  #ifndef SQLITE_DISABLE_LFS
    70  # define _LARGE_FILE       1
    71  # ifndef _FILE_OFFSET_BITS
    72  #   define _FILE_OFFSET_BITS 64
    73  # endif
    74  # define _LARGEFILE_SOURCE 1
    75  #endif
    76  
    77  #include <stdlib.h>
    78  #include <string.h>
    79  #include <stdio.h>
    80  #include <assert.h>
    81  #include "sqlite3.h"
    82  #if SQLITE_USER_AUTHENTICATION
    83  # include "sqlite3userauth.h"
    84  #endif
    85  #include <ctype.h>
    86  #include <stdarg.h>
    87  
    88  #if !defined(_WIN32) && !defined(WIN32)
    89  # include <signal.h>
    90  # if !defined(__RTP__) && !defined(_WRS_KERNEL)
    91  #  include <pwd.h>
    92  # endif
    93  # include <unistd.h>
    94  # include <sys/types.h>
    95  #endif
    96  
    97  #if HAVE_READLINE
    98  # include <readline/readline.h>
    99  # include <readline/history.h>
   100  #endif
   101  
   102  #if HAVE_EDITLINE
   103  # include <editline/readline.h>
   104  #endif
   105  
   106  #if HAVE_EDITLINE || HAVE_READLINE
   107  
   108  # define shell_add_history(X) add_history(X)
   109  # define shell_read_history(X) read_history(X)
   110  # define shell_write_history(X) write_history(X)
   111  # define shell_stifle_history(X) stifle_history(X)
   112  # define shell_readline(X) readline(X)
   113  
   114  #elif HAVE_LINENOISE
   115  
   116  # include "linenoise.h"
   117  # define shell_add_history(X) linenoiseHistoryAdd(X)
   118  # define shell_read_history(X) linenoiseHistoryLoad(X)
   119  # define shell_write_history(X) linenoiseHistorySave(X)
   120  # define shell_stifle_history(X) linenoiseHistorySetMaxLen(X)
   121  # define shell_readline(X) linenoise(X)
   122  
   123  #else
   124  
   125  # define shell_read_history(X)
   126  # define shell_write_history(X)
   127  # define shell_stifle_history(X)
   128  
   129  # define SHELL_USE_LOCAL_GETLINE 1
   130  #endif
   131  
   132  
   133  #if defined(_WIN32) || defined(WIN32)
   134  # include <io.h>
   135  # include <fcntl.h>
   136  # define isatty(h) _isatty(h)
   137  # ifndef access
   138  #  define access(f,m) _access((f),(m))
   139  # endif
   140  # undef popen
   141  # define popen _popen
   142  # undef pclose
   143  # define pclose _pclose
   144  #else
   145   /* Make sure isatty() has a prototype. */
   146   extern int isatty(int);
   147  
   148  # if !defined(__RTP__) && !defined(_WRS_KERNEL)
   149    /* popen and pclose are not C89 functions and so are
   150    ** sometimes omitted from the <stdio.h> header */
   151     extern FILE *popen(const char*,const char*);
   152     extern int pclose(FILE*);
   153  # else
   154  #  define SQLITE_OMIT_POPEN 1
   155  # endif
   156  #endif
   157  
   158  #if defined(_WIN32_WCE)
   159  /* Windows CE (arm-wince-mingw32ce-gcc) does not provide isatty()
   160   * thus we always assume that we have a console. That can be
   161   * overridden with the -batch command line option.
   162   */
   163  #define isatty(x) 1
   164  #endif
   165  
   166  /* ctype macros that work with signed characters */
   167  #define IsSpace(X)  isspace((unsigned char)X)
   168  #define IsDigit(X)  isdigit((unsigned char)X)
   169  #define ToLower(X)  (char)tolower((unsigned char)X)
   170  
   171  #if defined(_WIN32) || defined(WIN32)
   172  #include <windows.h>
   173  
   174  /* string conversion routines only needed on Win32 */
   175  extern char *sqlite3_win32_unicode_to_utf8(LPCWSTR);
   176  extern char *sqlite3_win32_mbcs_to_utf8_v2(const char *, int);
   177  extern char *sqlite3_win32_utf8_to_mbcs_v2(const char *, int);
   178  extern LPWSTR sqlite3_win32_utf8_to_unicode(const char *zText);
   179  #endif
   180  
   181  /* On Windows, we normally run with output mode of TEXT so that \n characters
   182  ** are automatically translated into \r\n.  However, this behavior needs
   183  ** to be disabled in some cases (ex: when generating CSV output and when
   184  ** rendering quoted strings that contain \n characters).  The following
   185  ** routines take care of that.
   186  */
   187  #if defined(_WIN32) || defined(WIN32)
   188  static void setBinaryMode(FILE *file, int isOutput){
   189    if( isOutput ) fflush(file);
   190    _setmode(_fileno(file), _O_BINARY);
   191  }
   192  static void setTextMode(FILE *file, int isOutput){
   193    if( isOutput ) fflush(file);
   194    _setmode(_fileno(file), _O_TEXT);
   195  }
   196  #else
   197  # define setBinaryMode(X,Y)
   198  # define setTextMode(X,Y)
   199  #endif
   200  
   201  
   202  /* True if the timer is enabled */
   203  static int enableTimer = 0;
   204  
   205  /* Return the current wall-clock time */
   206  static sqlite3_int64 timeOfDay(void){
   207    static sqlite3_vfs *clockVfs = 0;
   208    sqlite3_int64 t;
   209    if( clockVfs==0 ) clockVfs = sqlite3_vfs_find(0);
   210    if( clockVfs->iVersion>=2 && clockVfs->xCurrentTimeInt64!=0 ){
   211      clockVfs->xCurrentTimeInt64(clockVfs, &t);
   212    }else{
   213      double r;
   214      clockVfs->xCurrentTime(clockVfs, &r);
   215      t = (sqlite3_int64)(r*86400000.0);
   216    }
   217    return t;
   218  }
   219  
   220  #if !defined(_WIN32) && !defined(WIN32) && !defined(__minux)
   221  #include <sys/time.h>
   222  #include <sys/resource.h>
   223  
   224  /* VxWorks does not support getrusage() as far as we can determine */
   225  #if defined(_WRS_KERNEL) || defined(__RTP__)
   226  struct rusage {
   227    struct timeval ru_utime; /* user CPU time used */
   228    struct timeval ru_stime; /* system CPU time used */
   229  };
   230  #define getrusage(A,B) memset(B,0,sizeof(*B))
   231  #endif
   232  
   233  /* Saved resource information for the beginning of an operation */
   234  static struct rusage sBegin;  /* CPU time at start */
   235  static sqlite3_int64 iBegin;  /* Wall-clock time at start */
   236  
   237  /*
   238  ** Begin timing an operation
   239  */
   240  static void beginTimer(void){
   241    if( enableTimer ){
   242      getrusage(RUSAGE_SELF, &sBegin);
   243      iBegin = timeOfDay();
   244    }
   245  }
   246  
   247  /* Return the difference of two time_structs in seconds */
   248  static double timeDiff(struct timeval *pStart, struct timeval *pEnd){
   249    return (pEnd->tv_usec - pStart->tv_usec)*0.000001 +
   250           (double)(pEnd->tv_sec - pStart->tv_sec);
   251  }
   252  
   253  /*
   254  ** Print the timing results.
   255  */
   256  static void endTimer(void){
   257    if( enableTimer ){
   258      sqlite3_int64 iEnd = timeOfDay();
   259      struct rusage sEnd;
   260      getrusage(RUSAGE_SELF, &sEnd);
   261      printf("Run Time: real %.3f user %f sys %f\n",
   262         (iEnd - iBegin)*0.001,
   263         timeDiff(&sBegin.ru_utime, &sEnd.ru_utime),
   264         timeDiff(&sBegin.ru_stime, &sEnd.ru_stime));
   265    }
   266  }
   267  
   268  #define BEGIN_TIMER beginTimer()
   269  #define END_TIMER endTimer()
   270  #define HAS_TIMER 1
   271  
   272  #elif (defined(_WIN32) || defined(WIN32))
   273  
   274  /* Saved resource information for the beginning of an operation */
   275  static HANDLE hProcess;
   276  static FILETIME ftKernelBegin;
   277  static FILETIME ftUserBegin;
   278  static sqlite3_int64 ftWallBegin;
   279  typedef BOOL (WINAPI *GETPROCTIMES)(HANDLE, LPFILETIME, LPFILETIME,
   280                                      LPFILETIME, LPFILETIME);
   281  static GETPROCTIMES getProcessTimesAddr = NULL;
   282  
   283  /*
   284  ** Check to see if we have timer support.  Return 1 if necessary
   285  ** support found (or found previously).
   286  */
   287  static int hasTimer(void){
   288    if( getProcessTimesAddr ){
   289      return 1;
   290    } else {
   291      /* GetProcessTimes() isn't supported in WIN95 and some other Windows
   292      ** versions. See if the version we are running on has it, and if it
   293      ** does, save off a pointer to it and the current process handle.
   294      */
   295      hProcess = GetCurrentProcess();
   296      if( hProcess ){
   297        HINSTANCE hinstLib = LoadLibrary(TEXT("Kernel32.dll"));
   298        if( NULL != hinstLib ){
   299          getProcessTimesAddr =
   300              (GETPROCTIMES) GetProcAddress(hinstLib, "GetProcessTimes");
   301          if( NULL != getProcessTimesAddr ){
   302            return 1;
   303          }
   304          FreeLibrary(hinstLib);
   305        }
   306      }
   307    }
   308    return 0;
   309  }
   310  
   311  /*
   312  ** Begin timing an operation
   313  */
   314  static void beginTimer(void){
   315    if( enableTimer && getProcessTimesAddr ){
   316      FILETIME ftCreation, ftExit;
   317      getProcessTimesAddr(hProcess,&ftCreation,&ftExit,
   318                          &ftKernelBegin,&ftUserBegin);
   319      ftWallBegin = timeOfDay();
   320    }
   321  }
   322  
   323  /* Return the difference of two FILETIME structs in seconds */
   324  static double timeDiff(FILETIME *pStart, FILETIME *pEnd){
   325    sqlite_int64 i64Start = *((sqlite_int64 *) pStart);
   326    sqlite_int64 i64End = *((sqlite_int64 *) pEnd);
   327    return (double) ((i64End - i64Start) / 10000000.0);
   328  }
   329  
   330  /*
   331  ** Print the timing results.
   332  */
   333  static void endTimer(void){
   334    if( enableTimer && getProcessTimesAddr){
   335      FILETIME ftCreation, ftExit, ftKernelEnd, ftUserEnd;
   336      sqlite3_int64 ftWallEnd = timeOfDay();
   337      getProcessTimesAddr(hProcess,&ftCreation,&ftExit,&ftKernelEnd,&ftUserEnd);
   338      printf("Run Time: real %.3f user %f sys %f\n",
   339         (ftWallEnd - ftWallBegin)*0.001,
   340         timeDiff(&ftUserBegin, &ftUserEnd),
   341         timeDiff(&ftKernelBegin, &ftKernelEnd));
   342    }
   343  }
   344  
   345  #define BEGIN_TIMER beginTimer()
   346  #define END_TIMER endTimer()
   347  #define HAS_TIMER hasTimer()
   348  
   349  #else
   350  #define BEGIN_TIMER
   351  #define END_TIMER
   352  #define HAS_TIMER 0
   353  #endif
   354  
   355  /*
   356  ** Used to prevent warnings about unused parameters
   357  */
   358  #define UNUSED_PARAMETER(x) (void)(x)
   359  
   360  /*
   361  ** If the following flag is set, then command execution stops
   362  ** at an error if we are not interactive.
   363  */
   364  static int bail_on_error = 0;
   365  
   366  /*
   367  ** Threat stdin as an interactive input if the following variable
   368  ** is true.  Otherwise, assume stdin is connected to a file or pipe.
   369  */
   370  static int stdin_is_interactive = 1;
   371  
   372  /*
   373  ** On Windows systems we have to know if standard output is a console
   374  ** in order to translate UTF-8 into MBCS.  The following variable is
   375  ** true if translation is required.
   376  */
   377  static int stdout_is_console = 1;
   378  
   379  /*
   380  ** The following is the open SQLite database.  We make a pointer
   381  ** to this database a static variable so that it can be accessed
   382  ** by the SIGINT handler to interrupt database processing.
   383  */
   384  static sqlite3 *globalDb = 0;
   385  
   386  /*
   387  ** True if an interrupt (Control-C) has been received.
   388  */
   389  static volatile int seenInterrupt = 0;
   390  
   391  /*
   392  ** This is the name of our program. It is set in main(), used
   393  ** in a number of other places, mostly for error messages.
   394  */
   395  static char *Argv0;
   396  
   397  /*
   398  ** Prompt strings. Initialized in main. Settable with
   399  **   .prompt main continue
   400  */
   401  static char mainPrompt[20];     /* First line prompt. default: "sqlite> "*/
   402  static char continuePrompt[20]; /* Continuation prompt. default: "   ...> " */
   403  
   404  /*
   405  ** Render output like fprintf().  Except, if the output is going to the
   406  ** console and if this is running on a Windows machine, translate the
   407  ** output from UTF-8 into MBCS.
   408  */
   409  #if defined(_WIN32) || defined(WIN32)
   410  void utf8_printf(FILE *out, const char *zFormat, ...){
   411    va_list ap;
   412    va_start(ap, zFormat);
   413    if( stdout_is_console && (out==stdout || out==stderr) ){
   414      char *z1 = sqlite3_vmprintf(zFormat, ap);
   415      char *z2 = sqlite3_win32_utf8_to_mbcs_v2(z1, 0);
   416      sqlite3_free(z1);
   417      fputs(z2, out);
   418      sqlite3_free(z2);
   419    }else{
   420      vfprintf(out, zFormat, ap);
   421    }
   422    va_end(ap);
   423  }
   424  #elif !defined(utf8_printf)
   425  # define utf8_printf fprintf
   426  #endif
   427  
   428  /*
   429  ** Render output like fprintf().  This should not be used on anything that
   430  ** includes string formatting (e.g. "%s").
   431  */
   432  #if !defined(raw_printf)
   433  # define raw_printf fprintf
   434  #endif
   435  
   436  /*
   437  ** Write I/O traces to the following stream.
   438  */
   439  #ifdef SQLITE_ENABLE_IOTRACE
   440  static FILE *iotrace = 0;
   441  #endif
   442  
   443  /*
   444  ** This routine works like printf in that its first argument is a
   445  ** format string and subsequent arguments are values to be substituted
   446  ** in place of % fields.  The result of formatting this string
   447  ** is written to iotrace.
   448  */
   449  #ifdef SQLITE_ENABLE_IOTRACE
   450  static void SQLITE_CDECL iotracePrintf(const char *zFormat, ...){
   451    va_list ap;
   452    char *z;
   453    if( iotrace==0 ) return;
   454    va_start(ap, zFormat);
   455    z = sqlite3_vmprintf(zFormat, ap);
   456    va_end(ap);
   457    utf8_printf(iotrace, "%s", z);
   458    sqlite3_free(z);
   459  }
   460  #endif
   461  
   462  /*
   463  ** Output string zUtf to stream pOut as w characters.  If w is negative,
   464  ** then right-justify the text.  W is the width in UTF-8 characters, not
   465  ** in bytes.  This is different from the %*.*s specification in printf
   466  ** since with %*.*s the width is measured in bytes, not characters.
   467  */
   468  static void utf8_width_print(FILE *pOut, int w, const char *zUtf){
   469    int i;
   470    int n;
   471    int aw = w<0 ? -w : w;
   472    char zBuf[1000];
   473    if( aw>(int)sizeof(zBuf)/3 ) aw = (int)sizeof(zBuf)/3;
   474    for(i=n=0; zUtf[i]; i++){
   475      if( (zUtf[i]&0xc0)!=0x80 ){
   476        n++;
   477        if( n==aw ){
   478          do{ i++; }while( (zUtf[i]&0xc0)==0x80 );
   479          break;
   480        }
   481      }
   482    }
   483    if( n>=aw ){
   484      utf8_printf(pOut, "%.*s", i, zUtf);
   485    }else if( w<0 ){
   486      utf8_printf(pOut, "%*s%s", aw-n, "", zUtf);
   487    }else{
   488      utf8_printf(pOut, "%s%*s", zUtf, aw-n, "");
   489    }
   490  }
   491  
   492  
   493  /*
   494  ** Determines if a string is a number of not.
   495  */
   496  static int isNumber(const char *z, int *realnum){
   497    if( *z=='-' || *z=='+' ) z++;
   498    if( !IsDigit(*z) ){
   499      return 0;
   500    }
   501    z++;
   502    if( realnum ) *realnum = 0;
   503    while( IsDigit(*z) ){ z++; }
   504    if( *z=='.' ){
   505      z++;
   506      if( !IsDigit(*z) ) return 0;
   507      while( IsDigit(*z) ){ z++; }
   508      if( realnum ) *realnum = 1;
   509    }
   510    if( *z=='e' || *z=='E' ){
   511      z++;
   512      if( *z=='+' || *z=='-' ) z++;
   513      if( !IsDigit(*z) ) return 0;
   514      while( IsDigit(*z) ){ z++; }
   515      if( realnum ) *realnum = 1;
   516    }
   517    return *z==0;
   518  }
   519  
   520  /*
   521  ** Compute a string length that is limited to what can be stored in
   522  ** lower 30 bits of a 32-bit signed integer.
   523  */
   524  static int strlen30(const char *z){
   525    const char *z2 = z;
   526    while( *z2 ){ z2++; }
   527    return 0x3fffffff & (int)(z2 - z);
   528  }
   529  
   530  /*
   531  ** Return the length of a string in characters.  Multibyte UTF8 characters
   532  ** count as a single character.
   533  */
   534  static int strlenChar(const char *z){
   535    int n = 0;
   536    while( *z ){
   537      if( (0xc0&*(z++))!=0x80 ) n++;
   538    }
   539    return n;
   540  }
   541  
   542  /*
   543  ** This routine reads a line of text from FILE in, stores
   544  ** the text in memory obtained from malloc() and returns a pointer
   545  ** to the text.  NULL is returned at end of file, or if malloc()
   546  ** fails.
   547  **
   548  ** If zLine is not NULL then it is a malloced buffer returned from
   549  ** a previous call to this routine that may be reused.
   550  */
   551  static char *local_getline(char *zLine, FILE *in){
   552    int nLine = zLine==0 ? 0 : 100;
   553    int n = 0;
   554  
   555    while( 1 ){
   556      if( n+100>nLine ){
   557        nLine = nLine*2 + 100;
   558        zLine = realloc(zLine, nLine);
   559        if( zLine==0 ) return 0;
   560      }
   561      if( fgets(&zLine[n], nLine - n, in)==0 ){
   562        if( n==0 ){
   563          free(zLine);
   564          return 0;
   565        }
   566        zLine[n] = 0;
   567        break;
   568      }
   569      while( zLine[n] ) n++;
   570      if( n>0 && zLine[n-1]=='\n' ){
   571        n--;
   572        if( n>0 && zLine[n-1]=='\r' ) n--;
   573        zLine[n] = 0;
   574        break;
   575      }
   576    }
   577  #if defined(_WIN32) || defined(WIN32)
   578    /* For interactive input on Windows systems, translate the
   579    ** multi-byte characterset characters into UTF-8. */
   580    if( stdin_is_interactive && in==stdin ){
   581      char *zTrans = sqlite3_win32_mbcs_to_utf8_v2(zLine, 0);
   582      if( zTrans ){
   583        int nTrans = strlen30(zTrans)+1;
   584        if( nTrans>nLine ){
   585          zLine = realloc(zLine, nTrans);
   586          if( zLine==0 ){
   587            sqlite3_free(zTrans);
   588            return 0;
   589          }
   590        }
   591        memcpy(zLine, zTrans, nTrans);
   592        sqlite3_free(zTrans);
   593      }
   594    }
   595  #endif /* defined(_WIN32) || defined(WIN32) */
   596    return zLine;
   597  }
   598  
   599  /*
   600  ** Retrieve a single line of input text.
   601  **
   602  ** If in==0 then read from standard input and prompt before each line.
   603  ** If isContinuation is true, then a continuation prompt is appropriate.
   604  ** If isContinuation is zero, then the main prompt should be used.
   605  **
   606  ** If zPrior is not NULL then it is a buffer from a prior call to this
   607  ** routine that can be reused.
   608  **
   609  ** The result is stored in space obtained from malloc() and must either
   610  ** be freed by the caller or else passed back into this routine via the
   611  ** zPrior argument for reuse.
   612  */
   613  static char *one_input_line(FILE *in, char *zPrior, int isContinuation){
   614    char *zPrompt;
   615    char *zResult;
   616    if( in!=0 ){
   617      zResult = local_getline(zPrior, in);
   618    }else{
   619      zPrompt = isContinuation ? continuePrompt : mainPrompt;
   620  #if SHELL_USE_LOCAL_GETLINE
   621      printf("%s", zPrompt);
   622      fflush(stdout);
   623      zResult = local_getline(zPrior, stdin);
   624  #else
   625      free(zPrior);
   626      zResult = shell_readline(zPrompt);
   627      if( zResult && *zResult ) shell_add_history(zResult);
   628  #endif
   629    }
   630    return zResult;
   631  }
   632  /*
   633  ** A variable length string to which one can append text.
   634  */
   635  typedef struct ShellText ShellText;
   636  struct ShellText {
   637    char *z;
   638    int n;
   639    int nAlloc;
   640  };
   641  
   642  /*
   643  ** Initialize and destroy a ShellText object
   644  */
   645  static void initText(ShellText *p){
   646    memset(p, 0, sizeof(*p));
   647  }
   648  static void freeText(ShellText *p){
   649    free(p->z);
   650    initText(p);
   651  }
   652  
   653  /* zIn is either a pointer to a NULL-terminated string in memory obtained
   654  ** from malloc(), or a NULL pointer. The string pointed to by zAppend is
   655  ** added to zIn, and the result returned in memory obtained from malloc().
   656  ** zIn, if it was not NULL, is freed.
   657  **
   658  ** If the third argument, quote, is not '\0', then it is used as a
   659  ** quote character for zAppend.
   660  */
   661  static void appendText(ShellText *p, char const *zAppend, char quote){
   662    int len;
   663    int i;
   664    int nAppend = strlen30(zAppend);
   665  
   666    len = nAppend+p->n+1;
   667    if( quote ){
   668      len += 2;
   669      for(i=0; i<nAppend; i++){
   670        if( zAppend[i]==quote ) len++;
   671      }
   672    }
   673  
   674    if( p->n+len>=p->nAlloc ){
   675      p->nAlloc = p->nAlloc*2 + len + 20;
   676      p->z = realloc(p->z, p->nAlloc);
   677      if( p->z==0 ){
   678        memset(p, 0, sizeof(*p));
   679        return;
   680      }
   681    }
   682  
   683    if( quote ){
   684      char *zCsr = p->z+p->n;
   685      *zCsr++ = quote;
   686      for(i=0; i<nAppend; i++){
   687        *zCsr++ = zAppend[i];
   688        if( zAppend[i]==quote ) *zCsr++ = quote;
   689      }
   690      *zCsr++ = quote;
   691      p->n = (int)(zCsr - p->z);
   692      *zCsr = '\0';
   693    }else{
   694      memcpy(p->z+p->n, zAppend, nAppend);
   695      p->n += nAppend;
   696      p->z[p->n] = '\0';
   697    }
   698  }
   699  
   700  /*
   701  ** Attempt to determine if identifier zName needs to be quoted, either
   702  ** because it contains non-alphanumeric characters, or because it is an
   703  ** SQLite keyword.  Be conservative in this estimate:  When in doubt assume
   704  ** that quoting is required.
   705  **
   706  ** Return '"' if quoting is required.  Return 0 if no quoting is required.
   707  */
   708  static char quoteChar(const char *zName){
   709    /* All SQLite keywords, in alphabetical order */
   710    static const char *azKeywords[] = {
   711      "ABORT", "ACTION", "ADD", "AFTER", "ALL", "ALTER", "ANALYZE", "AND", "AS",
   712      "ASC", "ATTACH", "AUTOINCREMENT", "BEFORE", "BEGIN", "BETWEEN", "BY",
   713      "CASCADE", "CASE", "CAST", "CHECK", "COLLATE", "COLUMN", "COMMIT",
   714      "CONFLICT", "CONSTRAINT", "CREATE", "CROSS", "CURRENT_DATE",
   715      "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATABASE", "DEFAULT", "DEFERRABLE",
   716      "DEFERRED", "DELETE", "DESC", "DETACH", "DISTINCT", "DROP", "EACH",
   717      "ELSE", "END", "ESCAPE", "EXCEPT", "EXCLUSIVE", "EXISTS", "EXPLAIN",
   718      "FAIL", "FOR", "FOREIGN", "FROM", "FULL", "GLOB", "GROUP", "HAVING", "IF",
   719      "IGNORE", "IMMEDIATE", "IN", "INDEX", "INDEXED", "INITIALLY", "INNER",
   720      "INSERT", "INSTEAD", "INTERSECT", "INTO", "IS", "ISNULL", "JOIN", "KEY",
   721      "LEFT", "LIKE", "LIMIT", "MATCH", "NATURAL", "NO", "NOT", "NOTNULL",
   722      "NULL", "OF", "OFFSET", "ON", "OR", "ORDER", "OUTER", "PLAN", "PRAGMA",
   723      "PRIMARY", "QUERY", "RAISE", "RECURSIVE", "REFERENCES", "REGEXP",
   724      "REINDEX", "RELEASE", "RENAME", "REPLACE", "RESTRICT", "RIGHT",
   725      "ROLLBACK", "ROW", "SAVEPOINT", "SELECT", "SET", "TABLE", "TEMP",
   726      "TEMPORARY", "THEN", "TO", "TRANSACTION", "TRIGGER", "UNION", "UNIQUE",
   727      "UPDATE", "USING", "VACUUM", "VALUES", "VIEW", "VIRTUAL", "WHEN", "WHERE",
   728      "WITH", "WITHOUT",
   729    };
   730    int i, lwr, upr, mid, c;
   731    if( !isalpha((unsigned char)zName[0]) && zName[0]!='_' ) return '"';
   732    for(i=0; zName[i]; i++){
   733      if( !isalnum((unsigned char)zName[i]) && zName[i]!='_' ) return '"';
   734    }
   735    lwr = 0;
   736    upr = sizeof(azKeywords)/sizeof(azKeywords[0]) - 1;
   737    while( lwr<=upr ){
   738      mid = (lwr+upr)/2;
   739      c = sqlite3_stricmp(azKeywords[mid], zName);
   740      if( c==0 ) return '"';
   741      if( c<0 ){
   742        lwr = mid+1;
   743      }else{
   744        upr = mid-1;
   745      }
   746    }
   747    return 0;
   748  }
   749  
   750  /*
   751  ** SQL function:  shell_add_schema(S,X)
   752  **
   753  ** Add the schema name X to the CREATE statement in S and return the result.
   754  ** Examples:
   755  **
   756  **    CREATE TABLE t1(x)   ->   CREATE TABLE xyz.t1(x);
   757  **
   758  ** Also works on
   759  **
   760  **    CREATE INDEX
   761  **    CREATE UNIQUE INDEX
   762  **    CREATE VIEW
   763  **    CREATE TRIGGER
   764  **    CREATE VIRTUAL TABLE
   765  **
   766  ** This UDF is used by the .schema command to insert the schema name of
   767  ** attached databases into the middle of the sqlite_master.sql field.
   768  */
   769  static void shellAddSchemaName(
   770    sqlite3_context *pCtx,
   771    int nVal,
   772    sqlite3_value **apVal
   773  ){
   774    static const char *aPrefix[] = {
   775       "TABLE",
   776       "INDEX",
   777       "UNIQUE INDEX",
   778       "VIEW",
   779       "TRIGGER",
   780       "VIRTUAL TABLE"
   781    };
   782    int i = 0;
   783    const char *zIn = (const char*)sqlite3_value_text(apVal[0]);
   784    const char *zSchema = (const char*)sqlite3_value_text(apVal[1]);
   785    assert( nVal==2 );
   786    if( zIn!=0 && strncmp(zIn, "CREATE ", 7)==0 ){
   787      for(i=0; i<(int)(sizeof(aPrefix)/sizeof(aPrefix[0])); i++){
   788        int n = strlen30(aPrefix[i]);
   789        if( strncmp(zIn+7, aPrefix[i], n)==0 && zIn[n+7]==' ' ){
   790          char cQuote = quoteChar(zSchema);
   791          char *z;
   792          if( cQuote ){
   793           z = sqlite3_mprintf("%.*s \"%w\".%s", n+7, zIn, zSchema, zIn+n+8);
   794          }else{
   795            z = sqlite3_mprintf("%.*s %s.%s", n+7, zIn, zSchema, zIn+n+8);
   796          }
   797          sqlite3_result_text(pCtx, z, -1, sqlite3_free);
   798          return;
   799        }
   800      }
   801    }
   802    sqlite3_result_value(pCtx, apVal[0]);
   803  }
   804  
   805  /*
   806  ** The source code for several run-time loadable extensions is inserted
   807  ** below by the ../tool/mkshellc.tcl script.  Before processing that included
   808  ** code, we need to override some macros to make the included program code
   809  ** work here in the middle of this regular program.
   810  */
   811  #define SQLITE_EXTENSION_INIT1
   812  #define SQLITE_EXTENSION_INIT2(X) (void)(X)
   813  
   814  /************************* Begin ../ext/misc/shathree.c ******************/
   815  /*
   816  ** 2017-03-08
   817  **
   818  ** The author disclaims copyright to this source code.  In place of
   819  ** a legal notice, here is a blessing:
   820  **
   821  **    May you do good and not evil.
   822  **    May you find forgiveness for yourself and forgive others.
   823  **    May you share freely, never taking more than you give.
   824  **
   825  ******************************************************************************
   826  **
   827  ** This SQLite extension implements a functions that compute SHA1 hashes.
   828  ** Two SQL functions are implemented:
   829  **
   830  **     sha3(X,SIZE)
   831  **     sha3_query(Y,SIZE)
   832  **
   833  ** The sha3(X) function computes the SHA3 hash of the input X, or NULL if
   834  ** X is NULL.
   835  **
   836  ** The sha3_query(Y) function evalutes all queries in the SQL statements of Y
   837  ** and returns a hash of their results.
   838  **
   839  ** The SIZE argument is optional.  If omitted, the SHA3-256 hash algorithm
   840  ** is used.  If SIZE is included it must be one of the integers 224, 256,
   841  ** 384, or 512, to determine SHA3 hash variant that is computed.
   842  */
   843  SQLITE_EXTENSION_INIT1
   844  #include <assert.h>
   845  #include <string.h>
   846  #include <stdarg.h>
   847  typedef sqlite3_uint64 u64;
   848  
   849  /******************************************************************************
   850  ** The Hash Engine
   851  */
   852  /*
   853  ** Macros to determine whether the machine is big or little endian,
   854  ** and whether or not that determination is run-time or compile-time.
   855  **
   856  ** For best performance, an attempt is made to guess at the byte-order
   857  ** using C-preprocessor macros.  If that is unsuccessful, or if
   858  ** -DSHA3_BYTEORDER=0 is set, then byte-order is determined
   859  ** at run-time.
   860  */
   861  #ifndef SHA3_BYTEORDER
   862  # if defined(i386)     || defined(__i386__)   || defined(_M_IX86) ||    \
   863       defined(__x86_64) || defined(__x86_64__) || defined(_M_X64)  ||    \
   864       defined(_M_AMD64) || defined(_M_ARM)     || defined(__x86)   ||    \
   865       defined(__arm__)
   866  #   define SHA3_BYTEORDER    1234
   867  # elif defined(sparc)    || defined(__ppc__)
   868  #   define SHA3_BYTEORDER    4321
   869  # else
   870  #   define SHA3_BYTEORDER 0
   871  # endif
   872  #endif
   873  
   874  
   875  /*
   876  ** State structure for a SHA3 hash in progress
   877  */
   878  typedef struct SHA3Context SHA3Context;
   879  struct SHA3Context {
   880    union {
   881      u64 s[25];                /* Keccak state. 5x5 lines of 64 bits each */
   882      unsigned char x[1600];    /* ... or 1600 bytes */
   883    } u;
   884    unsigned nRate;        /* Bytes of input accepted per Keccak iteration */
   885    unsigned nLoaded;      /* Input bytes loaded into u.x[] so far this cycle */
   886    unsigned ixMask;       /* Insert next input into u.x[nLoaded^ixMask]. */
   887  };
   888  
   889  /*
   890  ** A single step of the Keccak mixing function for a 1600-bit state
   891  */
   892  static void KeccakF1600Step(SHA3Context *p){
   893    int i;
   894    u64 B0, B1, B2, B3, B4;
   895    u64 C0, C1, C2, C3, C4;
   896    u64 D0, D1, D2, D3, D4;
   897    static const u64 RC[] = {
   898      0x0000000000000001ULL,  0x0000000000008082ULL,
   899      0x800000000000808aULL,  0x8000000080008000ULL,
   900      0x000000000000808bULL,  0x0000000080000001ULL,
   901      0x8000000080008081ULL,  0x8000000000008009ULL,
   902      0x000000000000008aULL,  0x0000000000000088ULL,
   903      0x0000000080008009ULL,  0x000000008000000aULL,
   904      0x000000008000808bULL,  0x800000000000008bULL,
   905      0x8000000000008089ULL,  0x8000000000008003ULL,
   906      0x8000000000008002ULL,  0x8000000000000080ULL,
   907      0x000000000000800aULL,  0x800000008000000aULL,
   908      0x8000000080008081ULL,  0x8000000000008080ULL,
   909      0x0000000080000001ULL,  0x8000000080008008ULL
   910    };
   911  # define A00 (p->u.s[0])
   912  # define A01 (p->u.s[1])
   913  # define A02 (p->u.s[2])
   914  # define A03 (p->u.s[3])
   915  # define A04 (p->u.s[4])
   916  # define A10 (p->u.s[5])
   917  # define A11 (p->u.s[6])
   918  # define A12 (p->u.s[7])
   919  # define A13 (p->u.s[8])
   920  # define A14 (p->u.s[9])
   921  # define A20 (p->u.s[10])
   922  # define A21 (p->u.s[11])
   923  # define A22 (p->u.s[12])
   924  # define A23 (p->u.s[13])
   925  # define A24 (p->u.s[14])
   926  # define A30 (p->u.s[15])
   927  # define A31 (p->u.s[16])
   928  # define A32 (p->u.s[17])
   929  # define A33 (p->u.s[18])
   930  # define A34 (p->u.s[19])
   931  # define A40 (p->u.s[20])
   932  # define A41 (p->u.s[21])
   933  # define A42 (p->u.s[22])
   934  # define A43 (p->u.s[23])
   935  # define A44 (p->u.s[24])
   936  # define ROL64(a,x) ((a<<x)|(a>>(64-x)))
   937  
   938    for(i=0; i<24; i+=4){
   939      C0 = A00^A10^A20^A30^A40;
   940      C1 = A01^A11^A21^A31^A41;
   941      C2 = A02^A12^A22^A32^A42;
   942      C3 = A03^A13^A23^A33^A43;
   943      C4 = A04^A14^A24^A34^A44;
   944      D0 = C4^ROL64(C1, 1);
   945      D1 = C0^ROL64(C2, 1);
   946      D2 = C1^ROL64(C3, 1);
   947      D3 = C2^ROL64(C4, 1);
   948      D4 = C3^ROL64(C0, 1);
   949  
   950      B0 = (A00^D0);
   951      B1 = ROL64((A11^D1), 44);
   952      B2 = ROL64((A22^D2), 43);
   953      B3 = ROL64((A33^D3), 21);
   954      B4 = ROL64((A44^D4), 14);
   955      A00 =   B0 ^((~B1)&  B2 );
   956      A00 ^= RC[i];
   957      A11 =   B1 ^((~B2)&  B3 );
   958      A22 =   B2 ^((~B3)&  B4 );
   959      A33 =   B3 ^((~B4)&  B0 );
   960      A44 =   B4 ^((~B0)&  B1 );
   961  
   962      B2 = ROL64((A20^D0), 3);
   963      B3 = ROL64((A31^D1), 45);
   964      B4 = ROL64((A42^D2), 61);
   965      B0 = ROL64((A03^D3), 28);
   966      B1 = ROL64((A14^D4), 20);
   967      A20 =   B0 ^((~B1)&  B2 );
   968      A31 =   B1 ^((~B2)&  B3 );
   969      A42 =   B2 ^((~B3)&  B4 );
   970      A03 =   B3 ^((~B4)&  B0 );
   971      A14 =   B4 ^((~B0)&  B1 );
   972  
   973      B4 = ROL64((A40^D0), 18);
   974      B0 = ROL64((A01^D1), 1);
   975      B1 = ROL64((A12^D2), 6);
   976      B2 = ROL64((A23^D3), 25);
   977      B3 = ROL64((A34^D4), 8);
   978      A40 =   B0 ^((~B1)&  B2 );
   979      A01 =   B1 ^((~B2)&  B3 );
   980      A12 =   B2 ^((~B3)&  B4 );
   981      A23 =   B3 ^((~B4)&  B0 );
   982      A34 =   B4 ^((~B0)&  B1 );
   983  
   984      B1 = ROL64((A10^D0), 36);
   985      B2 = ROL64((A21^D1), 10);
   986      B3 = ROL64((A32^D2), 15);
   987      B4 = ROL64((A43^D3), 56);
   988      B0 = ROL64((A04^D4), 27);
   989      A10 =   B0 ^((~B1)&  B2 );
   990      A21 =   B1 ^((~B2)&  B3 );
   991      A32 =   B2 ^((~B3)&  B4 );
   992      A43 =   B3 ^((~B4)&  B0 );
   993      A04 =   B4 ^((~B0)&  B1 );
   994  
   995      B3 = ROL64((A30^D0), 41);
   996      B4 = ROL64((A41^D1), 2);
   997      B0 = ROL64((A02^D2), 62);
   998      B1 = ROL64((A13^D3), 55);
   999      B2 = ROL64((A24^D4), 39);
  1000      A30 =   B0 ^((~B1)&  B2 );
  1001      A41 =   B1 ^((~B2)&  B3 );
  1002      A02 =   B2 ^((~B3)&  B4 );
  1003      A13 =   B3 ^((~B4)&  B0 );
  1004      A24 =   B4 ^((~B0)&  B1 );
  1005  
  1006      C0 = A00^A20^A40^A10^A30;
  1007      C1 = A11^A31^A01^A21^A41;
  1008      C2 = A22^A42^A12^A32^A02;
  1009      C3 = A33^A03^A23^A43^A13;
  1010      C4 = A44^A14^A34^A04^A24;
  1011      D0 = C4^ROL64(C1, 1);
  1012      D1 = C0^ROL64(C2, 1);
  1013      D2 = C1^ROL64(C3, 1);
  1014      D3 = C2^ROL64(C4, 1);
  1015      D4 = C3^ROL64(C0, 1);
  1016  
  1017      B0 = (A00^D0);
  1018      B1 = ROL64((A31^D1), 44);
  1019      B2 = ROL64((A12^D2), 43);
  1020      B3 = ROL64((A43^D3), 21);
  1021      B4 = ROL64((A24^D4), 14);
  1022      A00 =   B0 ^((~B1)&  B2 );
  1023      A00 ^= RC[i+1];
  1024      A31 =   B1 ^((~B2)&  B3 );
  1025      A12 =   B2 ^((~B3)&  B4 );
  1026      A43 =   B3 ^((~B4)&  B0 );
  1027      A24 =   B4 ^((~B0)&  B1 );
  1028  
  1029      B2 = ROL64((A40^D0), 3);
  1030      B3 = ROL64((A21^D1), 45);
  1031      B4 = ROL64((A02^D2), 61);
  1032      B0 = ROL64((A33^D3), 28);
  1033      B1 = ROL64((A14^D4), 20);
  1034      A40 =   B0 ^((~B1)&  B2 );
  1035      A21 =   B1 ^((~B2)&  B3 );
  1036      A02 =   B2 ^((~B3)&  B4 );
  1037      A33 =   B3 ^((~B4)&  B0 );
  1038      A14 =   B4 ^((~B0)&  B1 );
  1039  
  1040      B4 = ROL64((A30^D0), 18);
  1041      B0 = ROL64((A11^D1), 1);
  1042      B1 = ROL64((A42^D2), 6);
  1043      B2 = ROL64((A23^D3), 25);
  1044      B3 = ROL64((A04^D4), 8);
  1045      A30 =   B0 ^((~B1)&  B2 );
  1046      A11 =   B1 ^((~B2)&  B3 );
  1047      A42 =   B2 ^((~B3)&  B4 );
  1048      A23 =   B3 ^((~B4)&  B0 );
  1049      A04 =   B4 ^((~B0)&  B1 );
  1050  
  1051      B1 = ROL64((A20^D0), 36);
  1052      B2 = ROL64((A01^D1), 10);
  1053      B3 = ROL64((A32^D2), 15);
  1054      B4 = ROL64((A13^D3), 56);
  1055      B0 = ROL64((A44^D4), 27);
  1056      A20 =   B0 ^((~B1)&  B2 );
  1057      A01 =   B1 ^((~B2)&  B3 );
  1058      A32 =   B2 ^((~B3)&  B4 );
  1059      A13 =   B3 ^((~B4)&  B0 );
  1060      A44 =   B4 ^((~B0)&  B1 );
  1061  
  1062      B3 = ROL64((A10^D0), 41);
  1063      B4 = ROL64((A41^D1), 2);
  1064      B0 = ROL64((A22^D2), 62);
  1065      B1 = ROL64((A03^D3), 55);
  1066      B2 = ROL64((A34^D4), 39);
  1067      A10 =   B0 ^((~B1)&  B2 );
  1068      A41 =   B1 ^((~B2)&  B3 );
  1069      A22 =   B2 ^((~B3)&  B4 );
  1070      A03 =   B3 ^((~B4)&  B0 );
  1071      A34 =   B4 ^((~B0)&  B1 );
  1072  
  1073      C0 = A00^A40^A30^A20^A10;
  1074      C1 = A31^A21^A11^A01^A41;
  1075      C2 = A12^A02^A42^A32^A22;
  1076      C3 = A43^A33^A23^A13^A03;
  1077      C4 = A24^A14^A04^A44^A34;
  1078      D0 = C4^ROL64(C1, 1);
  1079      D1 = C0^ROL64(C2, 1);
  1080      D2 = C1^ROL64(C3, 1);
  1081      D3 = C2^ROL64(C4, 1);
  1082      D4 = C3^ROL64(C0, 1);
  1083  
  1084      B0 = (A00^D0);
  1085      B1 = ROL64((A21^D1), 44);
  1086      B2 = ROL64((A42^D2), 43);
  1087      B3 = ROL64((A13^D3), 21);
  1088      B4 = ROL64((A34^D4), 14);
  1089      A00 =   B0 ^((~B1)&  B2 );
  1090      A00 ^= RC[i+2];
  1091      A21 =   B1 ^((~B2)&  B3 );
  1092      A42 =   B2 ^((~B3)&  B4 );
  1093      A13 =   B3 ^((~B4)&  B0 );
  1094      A34 =   B4 ^((~B0)&  B1 );
  1095  
  1096      B2 = ROL64((A30^D0), 3);
  1097      B3 = ROL64((A01^D1), 45);
  1098      B4 = ROL64((A22^D2), 61);
  1099      B0 = ROL64((A43^D3), 28);
  1100      B1 = ROL64((A14^D4), 20);
  1101      A30 =   B0 ^((~B1)&  B2 );
  1102      A01 =   B1 ^((~B2)&  B3 );
  1103      A22 =   B2 ^((~B3)&  B4 );
  1104      A43 =   B3 ^((~B4)&  B0 );
  1105      A14 =   B4 ^((~B0)&  B1 );
  1106  
  1107      B4 = ROL64((A10^D0), 18);
  1108      B0 = ROL64((A31^D1), 1);
  1109      B1 = ROL64((A02^D2), 6);
  1110      B2 = ROL64((A23^D3), 25);
  1111      B3 = ROL64((A44^D4), 8);
  1112      A10 =   B0 ^((~B1)&  B2 );
  1113      A31 =   B1 ^((~B2)&  B3 );
  1114      A02 =   B2 ^((~B3)&  B4 );
  1115      A23 =   B3 ^((~B4)&  B0 );
  1116      A44 =   B4 ^((~B0)&  B1 );
  1117  
  1118      B1 = ROL64((A40^D0), 36);
  1119      B2 = ROL64((A11^D1), 10);
  1120      B3 = ROL64((A32^D2), 15);
  1121      B4 = ROL64((A03^D3), 56);
  1122      B0 = ROL64((A24^D4), 27);
  1123      A40 =   B0 ^((~B1)&  B2 );
  1124      A11 =   B1 ^((~B2)&  B3 );
  1125      A32 =   B2 ^((~B3)&  B4 );
  1126      A03 =   B3 ^((~B4)&  B0 );
  1127      A24 =   B4 ^((~B0)&  B1 );
  1128  
  1129      B3 = ROL64((A20^D0), 41);
  1130      B4 = ROL64((A41^D1), 2);
  1131      B0 = ROL64((A12^D2), 62);
  1132      B1 = ROL64((A33^D3), 55);
  1133      B2 = ROL64((A04^D4), 39);
  1134      A20 =   B0 ^((~B1)&  B2 );
  1135      A41 =   B1 ^((~B2)&  B3 );
  1136      A12 =   B2 ^((~B3)&  B4 );
  1137      A33 =   B3 ^((~B4)&  B0 );
  1138      A04 =   B4 ^((~B0)&  B1 );
  1139  
  1140      C0 = A00^A30^A10^A40^A20;
  1141      C1 = A21^A01^A31^A11^A41;
  1142      C2 = A42^A22^A02^A32^A12;
  1143      C3 = A13^A43^A23^A03^A33;
  1144      C4 = A34^A14^A44^A24^A04;
  1145      D0 = C4^ROL64(C1, 1);
  1146      D1 = C0^ROL64(C2, 1);
  1147      D2 = C1^ROL64(C3, 1);
  1148      D3 = C2^ROL64(C4, 1);
  1149      D4 = C3^ROL64(C0, 1);
  1150  
  1151      B0 = (A00^D0);
  1152      B1 = ROL64((A01^D1), 44);
  1153      B2 = ROL64((A02^D2), 43);
  1154      B3 = ROL64((A03^D3), 21);
  1155      B4 = ROL64((A04^D4), 14);
  1156      A00 =   B0 ^((~B1)&  B2 );
  1157      A00 ^= RC[i+3];
  1158      A01 =   B1 ^((~B2)&  B3 );
  1159      A02 =   B2 ^((~B3)&  B4 );
  1160      A03 =   B3 ^((~B4)&  B0 );
  1161      A04 =   B4 ^((~B0)&  B1 );
  1162  
  1163      B2 = ROL64((A10^D0), 3);
  1164      B3 = ROL64((A11^D1), 45);
  1165      B4 = ROL64((A12^D2), 61);
  1166      B0 = ROL64((A13^D3), 28);
  1167      B1 = ROL64((A14^D4), 20);
  1168      A10 =   B0 ^((~B1)&  B2 );
  1169      A11 =   B1 ^((~B2)&  B3 );
  1170      A12 =   B2 ^((~B3)&  B4 );
  1171      A13 =   B3 ^((~B4)&  B0 );
  1172      A14 =   B4 ^((~B0)&  B1 );
  1173  
  1174      B4 = ROL64((A20^D0), 18);
  1175      B0 = ROL64((A21^D1), 1);
  1176      B1 = ROL64((A22^D2), 6);
  1177      B2 = ROL64((A23^D3), 25);
  1178      B3 = ROL64((A24^D4), 8);
  1179      A20 =   B0 ^((~B1)&  B2 );
  1180      A21 =   B1 ^((~B2)&  B3 );
  1181      A22 =   B2 ^((~B3)&  B4 );
  1182      A23 =   B3 ^((~B4)&  B0 );
  1183      A24 =   B4 ^((~B0)&  B1 );
  1184  
  1185      B1 = ROL64((A30^D0), 36);
  1186      B2 = ROL64((A31^D1), 10);
  1187      B3 = ROL64((A32^D2), 15);
  1188      B4 = ROL64((A33^D3), 56);
  1189      B0 = ROL64((A34^D4), 27);
  1190      A30 =   B0 ^((~B1)&  B2 );
  1191      A31 =   B1 ^((~B2)&  B3 );
  1192      A32 =   B2 ^((~B3)&  B4 );
  1193      A33 =   B3 ^((~B4)&  B0 );
  1194      A34 =   B4 ^((~B0)&  B1 );
  1195  
  1196      B3 = ROL64((A40^D0), 41);
  1197      B4 = ROL64((A41^D1), 2);
  1198      B0 = ROL64((A42^D2), 62);
  1199      B1 = ROL64((A43^D3), 55);
  1200      B2 = ROL64((A44^D4), 39);
  1201      A40 =   B0 ^((~B1)&  B2 );
  1202      A41 =   B1 ^((~B2)&  B3 );
  1203      A42 =   B2 ^((~B3)&  B4 );
  1204      A43 =   B3 ^((~B4)&  B0 );
  1205      A44 =   B4 ^((~B0)&  B1 );
  1206    }
  1207  }
  1208  
  1209  /*
  1210  ** Initialize a new hash.  iSize determines the size of the hash
  1211  ** in bits and should be one of 224, 256, 384, or 512.  Or iSize
  1212  ** can be zero to use the default hash size of 256 bits.
  1213  */
  1214  static void SHA3Init(SHA3Context *p, int iSize){
  1215    memset(p, 0, sizeof(*p));
  1216    if( iSize>=128 && iSize<=512 ){
  1217      p->nRate = (1600 - ((iSize + 31)&~31)*2)/8;
  1218    }else{
  1219      p->nRate = (1600 - 2*256)/8;
  1220    }
  1221  #if SHA3_BYTEORDER==1234
  1222    /* Known to be little-endian at compile-time. No-op */
  1223  #elif SHA3_BYTEORDER==4321
  1224    p->ixMask = 7;  /* Big-endian */
  1225  #else
  1226    {
  1227      static unsigned int one = 1;
  1228      if( 1==*(unsigned char*)&one ){
  1229        /* Little endian.  No byte swapping. */
  1230        p->ixMask = 0;
  1231      }else{
  1232        /* Big endian.  Byte swap. */
  1233        p->ixMask = 7;
  1234      }
  1235    }
  1236  #endif
  1237  }
  1238  
  1239  /*
  1240  ** Make consecutive calls to the SHA3Update function to add new content
  1241  ** to the hash
  1242  */
  1243  static void SHA3Update(
  1244    SHA3Context *p,
  1245    const unsigned char *aData,
  1246    unsigned int nData
  1247  ){
  1248    unsigned int i = 0;
  1249  #if SHA3_BYTEORDER==1234
  1250    if( (p->nLoaded % 8)==0 && ((aData - (const unsigned char*)0)&7)==0 ){
  1251      for(; i+7<nData; i+=8){
  1252        p->u.s[p->nLoaded/8] ^= *(u64*)&aData[i];
  1253        p->nLoaded += 8;
  1254        if( p->nLoaded>=p->nRate ){
  1255          KeccakF1600Step(p);
  1256          p->nLoaded = 0;
  1257        }
  1258      }
  1259    }
  1260  #endif
  1261    for(; i<nData; i++){
  1262  #if SHA3_BYTEORDER==1234
  1263      p->u.x[p->nLoaded] ^= aData[i];
  1264  #elif SHA3_BYTEORDER==4321
  1265      p->u.x[p->nLoaded^0x07] ^= aData[i];
  1266  #else
  1267      p->u.x[p->nLoaded^p->ixMask] ^= aData[i];
  1268  #endif
  1269      p->nLoaded++;
  1270      if( p->nLoaded==p->nRate ){
  1271        KeccakF1600Step(p);
  1272        p->nLoaded = 0;
  1273      }
  1274    }
  1275  }
  1276  
  1277  /*
  1278  ** After all content has been added, invoke SHA3Final() to compute
  1279  ** the final hash.  The function returns a pointer to the binary
  1280  ** hash value.
  1281  */
  1282  static unsigned char *SHA3Final(SHA3Context *p){
  1283    unsigned int i;
  1284    if( p->nLoaded==p->nRate-1 ){
  1285      const unsigned char c1 = 0x86;
  1286      SHA3Update(p, &c1, 1);
  1287    }else{
  1288      const unsigned char c2 = 0x06;
  1289      const unsigned char c3 = 0x80;
  1290      SHA3Update(p, &c2, 1);
  1291      p->nLoaded = p->nRate - 1;
  1292      SHA3Update(p, &c3, 1);
  1293    }
  1294    for(i=0; i<p->nRate; i++){
  1295      p->u.x[i+p->nRate] = p->u.x[i^p->ixMask];
  1296    }
  1297    return &p->u.x[p->nRate];
  1298  }
  1299  /* End of the hashing logic
  1300  *****************************************************************************/
  1301  
  1302  /*
  1303  ** Implementation of the sha3(X,SIZE) function.
  1304  **
  1305  ** Return a BLOB which is the SIZE-bit SHA3 hash of X.  The default
  1306  ** size is 256.  If X is a BLOB, it is hashed as is.  
  1307  ** For all other non-NULL types of input, X is converted into a UTF-8 string
  1308  ** and the string is hashed without the trailing 0x00 terminator.  The hash
  1309  ** of a NULL value is NULL.
  1310  */
  1311  static void sha3Func(
  1312    sqlite3_context *context,
  1313    int argc,
  1314    sqlite3_value **argv
  1315  ){
  1316    SHA3Context cx;
  1317    int eType = sqlite3_value_type(argv[0]);
  1318    int nByte = sqlite3_value_bytes(argv[0]);
  1319    int iSize;
  1320    if( argc==1 ){
  1321      iSize = 256;
  1322    }else{
  1323      iSize = sqlite3_value_int(argv[1]);
  1324      if( iSize!=224 && iSize!=256 && iSize!=384 && iSize!=512 ){
  1325        sqlite3_result_error(context, "SHA3 size should be one of: 224 256 "
  1326                                      "384 512", -1);
  1327        return;
  1328      }
  1329    }
  1330    if( eType==SQLITE_NULL ) return;
  1331    SHA3Init(&cx, iSize);
  1332    if( eType==SQLITE_BLOB ){
  1333      SHA3Update(&cx, sqlite3_value_blob(argv[0]), nByte);
  1334    }else{
  1335      SHA3Update(&cx, sqlite3_value_text(argv[0]), nByte);
  1336    }
  1337    sqlite3_result_blob(context, SHA3Final(&cx), iSize/8, SQLITE_TRANSIENT);
  1338  }
  1339  
  1340  /* Compute a string using sqlite3_vsnprintf() with a maximum length
  1341  ** of 50 bytes and add it to the hash.
  1342  */
  1343  static void hash_step_vformat(
  1344    SHA3Context *p,                 /* Add content to this context */
  1345    const char *zFormat,
  1346    ...
  1347  ){
  1348    va_list ap;
  1349    int n;
  1350    char zBuf[50];
  1351    va_start(ap, zFormat);
  1352    sqlite3_vsnprintf(sizeof(zBuf),zBuf,zFormat,ap);
  1353    va_end(ap);
  1354    n = (int)strlen(zBuf);
  1355    SHA3Update(p, (unsigned char*)zBuf, n);
  1356  }
  1357  
  1358  /*
  1359  ** Implementation of the sha3_query(SQL,SIZE) function.
  1360  **
  1361  ** This function compiles and runs the SQL statement(s) given in the
  1362  ** argument. The results are hashed using a SIZE-bit SHA3.  The default
  1363  ** size is 256.
  1364  **
  1365  ** The format of the byte stream that is hashed is summarized as follows:
  1366  **
  1367  **       S<n>:<sql>
  1368  **       R
  1369  **       N
  1370  **       I<int>
  1371  **       F<ieee-float>
  1372  **       B<size>:<bytes>
  1373  **       T<size>:<text>
  1374  **
  1375  ** <sql> is the original SQL text for each statement run and <n> is
  1376  ** the size of that text.  The SQL text is UTF-8.  A single R character
  1377  ** occurs before the start of each row.  N means a NULL value.
  1378  ** I mean an 8-byte little-endian integer <int>.  F is a floating point
  1379  ** number with an 8-byte little-endian IEEE floating point value <ieee-float>.
  1380  ** B means blobs of <size> bytes.  T means text rendered as <size>
  1381  ** bytes of UTF-8.  The <n> and <size> values are expressed as an ASCII
  1382  ** text integers.
  1383  **
  1384  ** For each SQL statement in the X input, there is one S segment.  Each
  1385  ** S segment is followed by zero or more R segments, one for each row in the
  1386  ** result set.  After each R, there are one or more N, I, F, B, or T segments,
  1387  ** one for each column in the result set.  Segments are concatentated directly
  1388  ** with no delimiters of any kind.
  1389  */
  1390  static void sha3QueryFunc(
  1391    sqlite3_context *context,
  1392    int argc,
  1393    sqlite3_value **argv
  1394  ){
  1395    sqlite3 *db = sqlite3_context_db_handle(context);
  1396    const char *zSql = (const char*)sqlite3_value_text(argv[0]);
  1397    sqlite3_stmt *pStmt = 0;
  1398    int nCol;                   /* Number of columns in the result set */
  1399    int i;                      /* Loop counter */
  1400    int rc;
  1401    int n;
  1402    const char *z;
  1403    SHA3Context cx;
  1404    int iSize;
  1405  
  1406    if( argc==1 ){
  1407      iSize = 256;
  1408    }else{
  1409      iSize = sqlite3_value_int(argv[1]);
  1410      if( iSize!=224 && iSize!=256 && iSize!=384 && iSize!=512 ){
  1411        sqlite3_result_error(context, "SHA3 size should be one of: 224 256 "
  1412                                      "384 512", -1);
  1413        return;
  1414      }
  1415    }
  1416    if( zSql==0 ) return;
  1417    SHA3Init(&cx, iSize);
  1418    while( zSql[0] ){
  1419      rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zSql);
  1420      if( rc ){
  1421        char *zMsg = sqlite3_mprintf("error SQL statement [%s]: %s",
  1422                                     zSql, sqlite3_errmsg(db));
  1423        sqlite3_finalize(pStmt);
  1424        sqlite3_result_error(context, zMsg, -1);
  1425        sqlite3_free(zMsg);
  1426        return;
  1427      }
  1428      if( !sqlite3_stmt_readonly(pStmt) ){
  1429        char *zMsg = sqlite3_mprintf("non-query: [%s]", sqlite3_sql(pStmt));
  1430        sqlite3_finalize(pStmt);
  1431        sqlite3_result_error(context, zMsg, -1);
  1432        sqlite3_free(zMsg);
  1433        return;
  1434      }
  1435      nCol = sqlite3_column_count(pStmt);
  1436      z = sqlite3_sql(pStmt);
  1437      n = (int)strlen(z);
  1438      hash_step_vformat(&cx,"S%d:",n);
  1439      SHA3Update(&cx,(unsigned char*)z,n);
  1440  
  1441      /* Compute a hash over the result of the query */
  1442      while( SQLITE_ROW==sqlite3_step(pStmt) ){
  1443        SHA3Update(&cx,(const unsigned char*)"R",1);
  1444        for(i=0; i<nCol; i++){
  1445          switch( sqlite3_column_type(pStmt,i) ){
  1446            case SQLITE_NULL: {
  1447              SHA3Update(&cx, (const unsigned char*)"N",1);
  1448              break;
  1449            }
  1450            case SQLITE_INTEGER: {
  1451              sqlite3_uint64 u;
  1452              int j;
  1453              unsigned char x[9];
  1454              sqlite3_int64 v = sqlite3_column_int64(pStmt,i);
  1455              memcpy(&u, &v, 8);
  1456              for(j=8; j>=1; j--){
  1457                x[j] = u & 0xff;
  1458                u >>= 8;
  1459              }
  1460              x[0] = 'I';
  1461              SHA3Update(&cx, x, 9);
  1462              break;
  1463            }
  1464            case SQLITE_FLOAT: {
  1465              sqlite3_uint64 u;
  1466              int j;
  1467              unsigned char x[9];
  1468              double r = sqlite3_column_double(pStmt,i);
  1469              memcpy(&u, &r, 8);
  1470              for(j=8; j>=1; j--){
  1471                x[j] = u & 0xff;
  1472                u >>= 8;
  1473              }
  1474              x[0] = 'F';
  1475              SHA3Update(&cx,x,9);
  1476              break;
  1477            }
  1478            case SQLITE_TEXT: {
  1479              int n2 = sqlite3_column_bytes(pStmt, i);
  1480              const unsigned char *z2 = sqlite3_column_text(pStmt, i);
  1481              hash_step_vformat(&cx,"T%d:",n2);
  1482              SHA3Update(&cx, z2, n2);
  1483              break;
  1484            }
  1485            case SQLITE_BLOB: {
  1486              int n2 = sqlite3_column_bytes(pStmt, i);
  1487              const unsigned char *z2 = sqlite3_column_blob(pStmt, i);
  1488              hash_step_vformat(&cx,"B%d:",n2);
  1489              SHA3Update(&cx, z2, n2);
  1490              break;
  1491            }
  1492          }
  1493        }
  1494      }
  1495      sqlite3_finalize(pStmt);
  1496    }
  1497    sqlite3_result_blob(context, SHA3Final(&cx), iSize/8, SQLITE_TRANSIENT);
  1498  }
  1499  
  1500  
  1501  #ifdef _WIN32
  1502  
  1503  #endif
  1504  int sqlite3_shathree_init(
  1505    sqlite3 *db,
  1506    char **pzErrMsg,
  1507    const sqlite3_api_routines *pApi
  1508  ){
  1509    int rc = SQLITE_OK;
  1510    SQLITE_EXTENSION_INIT2(pApi);
  1511    (void)pzErrMsg;  /* Unused parameter */
  1512    rc = sqlite3_create_function(db, "sha3", 1, SQLITE_UTF8, 0,
  1513                                 sha3Func, 0, 0);
  1514    if( rc==SQLITE_OK ){
  1515      rc = sqlite3_create_function(db, "sha3", 2, SQLITE_UTF8, 0,
  1516                                   sha3Func, 0, 0);
  1517    }
  1518    if( rc==SQLITE_OK ){
  1519      rc = sqlite3_create_function(db, "sha3_query", 1, SQLITE_UTF8, 0,
  1520                                   sha3QueryFunc, 0, 0);
  1521    }
  1522    if( rc==SQLITE_OK ){
  1523      rc = sqlite3_create_function(db, "sha3_query", 2, SQLITE_UTF8, 0,
  1524                                   sha3QueryFunc, 0, 0);
  1525    }
  1526    return rc;
  1527  }
  1528  
  1529  /************************* End ../ext/misc/shathree.c ********************/
  1530  /************************* Begin ../ext/misc/fileio.c ******************/
  1531  /*
  1532  ** 2014-06-13
  1533  **
  1534  ** The author disclaims copyright to this source code.  In place of
  1535  ** a legal notice, here is a blessing:
  1536  **
  1537  **    May you do good and not evil.
  1538  **    May you find forgiveness for yourself and forgive others.
  1539  **    May you share freely, never taking more than you give.
  1540  **
  1541  ******************************************************************************
  1542  **
  1543  ** This SQLite extension implements SQL functions readfile() and
  1544  ** writefile().
  1545  */
  1546  SQLITE_EXTENSION_INIT1
  1547  #include <stdio.h>
  1548  
  1549  /*
  1550  ** Implementation of the "readfile(X)" SQL function.  The entire content
  1551  ** of the file named X is read and returned as a BLOB.  NULL is returned
  1552  ** if the file does not exist or is unreadable.
  1553  */
  1554  static void readfileFunc(
  1555    sqlite3_context *context,
  1556    int argc,
  1557    sqlite3_value **argv
  1558  ){
  1559    const char *zName;
  1560    FILE *in;
  1561    long nIn;
  1562    void *pBuf;
  1563  
  1564    (void)(argc);  /* Unused parameter */
  1565    zName = (const char*)sqlite3_value_text(argv[0]);
  1566    if( zName==0 ) return;
  1567    in = fopen(zName, "rb");
  1568    if( in==0 ) return;
  1569    fseek(in, 0, SEEK_END);
  1570    nIn = ftell(in);
  1571    rewind(in);
  1572    pBuf = sqlite3_malloc( nIn );
  1573    if( pBuf && 1==fread(pBuf, nIn, 1, in) ){
  1574      sqlite3_result_blob(context, pBuf, nIn, sqlite3_free);
  1575    }else{
  1576      sqlite3_free(pBuf);
  1577    }
  1578    fclose(in);
  1579  }
  1580  
  1581  /*
  1582  ** Implementation of the "writefile(X,Y)" SQL function.  The argument Y
  1583  ** is written into file X.  The number of bytes written is returned.  Or
  1584  ** NULL is returned if something goes wrong, such as being unable to open
  1585  ** file X for writing.
  1586  */
  1587  static void writefileFunc(
  1588    sqlite3_context *context,
  1589    int argc,
  1590    sqlite3_value **argv
  1591  ){
  1592    FILE *out;
  1593    const char *z;
  1594    sqlite3_int64 rc;
  1595    const char *zFile;
  1596  
  1597    (void)(argc);  /* Unused parameter */
  1598    zFile = (const char*)sqlite3_value_text(argv[0]);
  1599    if( zFile==0 ) return;
  1600    out = fopen(zFile, "wb");
  1601    if( out==0 ) return;
  1602    z = (const char*)sqlite3_value_blob(argv[1]);
  1603    if( z==0 ){
  1604      rc = 0;
  1605    }else{
  1606      rc = fwrite(z, 1, sqlite3_value_bytes(argv[1]), out);
  1607    }
  1608    fclose(out);
  1609    sqlite3_result_int64(context, rc);
  1610  }
  1611  
  1612  
  1613  #ifdef _WIN32
  1614  
  1615  #endif
  1616  int sqlite3_fileio_init(
  1617    sqlite3 *db, 
  1618    char **pzErrMsg, 
  1619    const sqlite3_api_routines *pApi
  1620  ){
  1621    int rc = SQLITE_OK;
  1622    SQLITE_EXTENSION_INIT2(pApi);
  1623    (void)pzErrMsg;  /* Unused parameter */
  1624    rc = sqlite3_create_function(db, "readfile", 1, SQLITE_UTF8, 0,
  1625                                 readfileFunc, 0, 0);
  1626    if( rc==SQLITE_OK ){
  1627      rc = sqlite3_create_function(db, "writefile", 2, SQLITE_UTF8, 0,
  1628                                   writefileFunc, 0, 0);
  1629    }
  1630    return rc;
  1631  }
  1632  
  1633  /************************* End ../ext/misc/fileio.c ********************/
  1634  /************************* Begin ../ext/misc/completion.c ******************/
  1635  /*
  1636  ** 2017-07-10
  1637  **
  1638  ** The author disclaims copyright to this source code.  In place of
  1639  ** a legal notice, here is a blessing:
  1640  **
  1641  **    May you do good and not evil.
  1642  **    May you find forgiveness for yourself and forgive others.
  1643  **    May you share freely, never taking more than you give.
  1644  **
  1645  *************************************************************************
  1646  **
  1647  ** This file implements an eponymous virtual table that returns suggested
  1648  ** completions for a partial SQL input.
  1649  **
  1650  ** Suggested usage:
  1651  **
  1652  **     SELECT DISTINCT candidate COLLATE nocase
  1653  **       FROM completion($prefix,$wholeline)
  1654  **      ORDER BY 1;
  1655  **
  1656  ** The two query parameters are optional.  $prefix is the text of the
  1657  ** current word being typed and that is to be completed.  $wholeline is
  1658  ** the complete input line, used for context.
  1659  **
  1660  ** The raw completion() table might return the same candidate multiple
  1661  ** times, for example if the same column name is used to two or more
  1662  ** tables.  And the candidates are returned in an arbitrary order.  Hence,
  1663  ** the DISTINCT and ORDER BY are recommended.
  1664  **
  1665  ** This virtual table operates at the speed of human typing, and so there
  1666  ** is no attempt to make it fast.  Even a slow implementation will be much
  1667  ** faster than any human can type.
  1668  **
  1669  */
  1670  SQLITE_EXTENSION_INIT1
  1671  #include <assert.h>
  1672  #include <string.h>
  1673  #include <ctype.h>
  1674  
  1675  #ifndef SQLITE_OMIT_VIRTUALTABLE
  1676  
  1677  /* completion_vtab is a subclass of sqlite3_vtab which will
  1678  ** serve as the underlying representation of a completion virtual table
  1679  */
  1680  typedef struct completion_vtab completion_vtab;
  1681  struct completion_vtab {
  1682    sqlite3_vtab base;  /* Base class - must be first */
  1683    sqlite3 *db;        /* Database connection for this completion vtab */
  1684  };
  1685  
  1686  /* completion_cursor is a subclass of sqlite3_vtab_cursor which will
  1687  ** serve as the underlying representation of a cursor that scans
  1688  ** over rows of the result
  1689  */
  1690  typedef struct completion_cursor completion_cursor;
  1691  struct completion_cursor {
  1692    sqlite3_vtab_cursor base;  /* Base class - must be first */
  1693    sqlite3 *db;               /* Database connection for this cursor */
  1694    int nPrefix, nLine;        /* Number of bytes in zPrefix and zLine */
  1695    char *zPrefix;             /* The prefix for the word we want to complete */
  1696    char *zLine;               /* The whole that we want to complete */
  1697    const char *zCurrentRow;   /* Current output row */
  1698    sqlite3_stmt *pStmt;       /* Current statement */
  1699    sqlite3_int64 iRowid;      /* The rowid */
  1700    int ePhase;                /* Current phase */
  1701    int j;                     /* inter-phase counter */
  1702  };
  1703  
  1704  /* Values for ePhase:
  1705  */
  1706  #define COMPLETION_FIRST_PHASE   1
  1707  #define COMPLETION_KEYWORDS      1
  1708  #define COMPLETION_PRAGMAS       2
  1709  #define COMPLETION_FUNCTIONS     3
  1710  #define COMPLETION_COLLATIONS    4
  1711  #define COMPLETION_INDEXES       5
  1712  #define COMPLETION_TRIGGERS      6
  1713  #define COMPLETION_DATABASES     7
  1714  #define COMPLETION_TABLES        8
  1715  #define COMPLETION_COLUMNS       9
  1716  #define COMPLETION_MODULES       10
  1717  #define COMPLETION_EOF           11
  1718  
  1719  /*
  1720  ** The completionConnect() method is invoked to create a new
  1721  ** completion_vtab that describes the completion virtual table.
  1722  **
  1723  ** Think of this routine as the constructor for completion_vtab objects.
  1724  **
  1725  ** All this routine needs to do is:
  1726  **
  1727  **    (1) Allocate the completion_vtab object and initialize all fields.
  1728  **
  1729  **    (2) Tell SQLite (via the sqlite3_declare_vtab() interface) what the
  1730  **        result set of queries against completion will look like.
  1731  */
  1732  static int completionConnect(
  1733    sqlite3 *db,
  1734    void *pAux,
  1735    int argc, const char *const*argv,
  1736    sqlite3_vtab **ppVtab,
  1737    char **pzErr
  1738  ){
  1739    completion_vtab *pNew;
  1740    int rc;
  1741  
  1742    (void)(pAux);    /* Unused parameter */
  1743    (void)(argc);    /* Unused parameter */
  1744    (void)(argv);    /* Unused parameter */
  1745    (void)(pzErr);   /* Unused parameter */
  1746  
  1747  /* Column numbers */
  1748  #define COMPLETION_COLUMN_CANDIDATE 0  /* Suggested completion of the input */
  1749  #define COMPLETION_COLUMN_PREFIX    1  /* Prefix of the word to be completed */
  1750  #define COMPLETION_COLUMN_WHOLELINE 2  /* Entire line seen so far */
  1751  #define COMPLETION_COLUMN_PHASE     3  /* ePhase - used for debugging only */
  1752  
  1753    rc = sqlite3_declare_vtab(db,
  1754        "CREATE TABLE x("
  1755        "  candidate TEXT,"
  1756        "  prefix TEXT HIDDEN,"
  1757        "  wholeline TEXT HIDDEN,"
  1758        "  phase INT HIDDEN"        /* Used for debugging only */
  1759        ")");
  1760    if( rc==SQLITE_OK ){
  1761      pNew = sqlite3_malloc( sizeof(*pNew) );
  1762      *ppVtab = (sqlite3_vtab*)pNew;
  1763      if( pNew==0 ) return SQLITE_NOMEM;
  1764      memset(pNew, 0, sizeof(*pNew));
  1765      pNew->db = db;
  1766    }
  1767    return rc;
  1768  }
  1769  
  1770  /*
  1771  ** This method is the destructor for completion_cursor objects.
  1772  */
  1773  static int completionDisconnect(sqlite3_vtab *pVtab){
  1774    sqlite3_free(pVtab);
  1775    return SQLITE_OK;
  1776  }
  1777  
  1778  /*
  1779  ** Constructor for a new completion_cursor object.
  1780  */
  1781  static int completionOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
  1782    completion_cursor *pCur;
  1783    pCur = sqlite3_malloc( sizeof(*pCur) );
  1784    if( pCur==0 ) return SQLITE_NOMEM;
  1785    memset(pCur, 0, sizeof(*pCur));
  1786    pCur->db = ((completion_vtab*)p)->db;
  1787    *ppCursor = &pCur->base;
  1788    return SQLITE_OK;
  1789  }
  1790  
  1791  /*
  1792  ** Reset the completion_cursor.
  1793  */
  1794  static void completionCursorReset(completion_cursor *pCur){
  1795    sqlite3_free(pCur->zPrefix);   pCur->zPrefix = 0;  pCur->nPrefix = 0;
  1796    sqlite3_free(pCur->zLine);     pCur->zLine = 0;    pCur->nLine = 0;
  1797    sqlite3_finalize(pCur->pStmt); pCur->pStmt = 0;
  1798    pCur->j = 0;
  1799  }
  1800  
  1801  /*
  1802  ** Destructor for a completion_cursor.
  1803  */
  1804  static int completionClose(sqlite3_vtab_cursor *cur){
  1805    completionCursorReset((completion_cursor*)cur);
  1806    sqlite3_free(cur);
  1807    return SQLITE_OK;
  1808  }
  1809  
  1810  /*
  1811  ** All SQL keywords understood by SQLite
  1812  */
  1813  static const char *completionKwrds[] = {
  1814    "ABORT", "ACTION", "ADD", "AFTER", "ALL", "ALTER", "ANALYZE", "AND", "AS",
  1815    "ASC", "ATTACH", "AUTOINCREMENT", "BEFORE", "BEGIN", "BETWEEN", "BY",
  1816    "CASCADE", "CASE", "CAST", "CHECK", "COLLATE", "COLUMN", "COMMIT",
  1817    "CONFLICT", "CONSTRAINT", "CREATE", "CROSS", "CURRENT_DATE",
  1818    "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATABASE", "DEFAULT", "DEFERRABLE",
  1819    "DEFERRED", "DELETE", "DESC", "DETACH", "DISTINCT", "DROP", "EACH",
  1820    "ELSE", "END", "ESCAPE", "EXCEPT", "EXCLUSIVE", "EXISTS", "EXPLAIN",
  1821    "FAIL", "FOR", "FOREIGN", "FROM", "FULL", "GLOB", "GROUP", "HAVING", "IF",
  1822    "IGNORE", "IMMEDIATE", "IN", "INDEX", "INDEXED", "INITIALLY", "INNER",
  1823    "INSERT", "INSTEAD", "INTERSECT", "INTO", "IS", "ISNULL", "JOIN", "KEY",
  1824    "LEFT", "LIKE", "LIMIT", "MATCH", "NATURAL", "NO", "NOT", "NOTNULL",
  1825    "NULL", "OF", "OFFSET", "ON", "OR", "ORDER", "OUTER", "PLAN", "PRAGMA",
  1826    "PRIMARY", "QUERY", "RAISE", "RECURSIVE", "REFERENCES", "REGEXP",
  1827    "REINDEX", "RELEASE", "RENAME", "REPLACE", "RESTRICT", "RIGHT",
  1828    "ROLLBACK", "ROW", "SAVEPOINT", "SELECT", "SET", "TABLE", "TEMP",
  1829    "TEMPORARY", "THEN", "TO", "TRANSACTION", "TRIGGER", "UNION", "UNIQUE",
  1830    "UPDATE", "USING", "VACUUM", "VALUES", "VIEW", "VIRTUAL", "WHEN", "WHERE",
  1831    "WITH", "WITHOUT",
  1832  };
  1833  #define completionKwCount \
  1834     (int)(sizeof(completionKwrds)/sizeof(completionKwrds[0]))
  1835  
  1836  /*
  1837  ** Advance a completion_cursor to its next row of output.
  1838  **
  1839  ** The ->ePhase, ->j, and ->pStmt fields of the completion_cursor object
  1840  ** record the current state of the scan.  This routine sets ->zCurrentRow
  1841  ** to the current row of output and then returns.  If no more rows remain,
  1842  ** then ->ePhase is set to COMPLETION_EOF which will signal the virtual
  1843  ** table that has reached the end of its scan.
  1844  **
  1845  ** The current implementation just lists potential identifiers and
  1846  ** keywords and filters them by zPrefix.  Future enhancements should
  1847  ** take zLine into account to try to restrict the set of identifiers and
  1848  ** keywords based on what would be legal at the current point of input.
  1849  */
  1850  static int completionNext(sqlite3_vtab_cursor *cur){
  1851    completion_cursor *pCur = (completion_cursor*)cur;
  1852    int eNextPhase = 0;  /* Next phase to try if current phase reaches end */
  1853    int iCol = -1;       /* If >=0, step pCur->pStmt and use the i-th column */
  1854    pCur->iRowid++;
  1855    while( pCur->ePhase!=COMPLETION_EOF ){
  1856      switch( pCur->ePhase ){
  1857        case COMPLETION_KEYWORDS: {
  1858          if( pCur->j >= completionKwCount ){
  1859            pCur->zCurrentRow = 0;
  1860            pCur->ePhase = COMPLETION_DATABASES;
  1861          }else{
  1862            pCur->zCurrentRow = completionKwrds[pCur->j++];
  1863          }
  1864          iCol = -1;
  1865          break;
  1866        }
  1867        case COMPLETION_DATABASES: {
  1868          if( pCur->pStmt==0 ){
  1869            sqlite3_prepare_v2(pCur->db, "PRAGMA database_list", -1,
  1870                               &pCur->pStmt, 0);
  1871          }
  1872          iCol = 1;
  1873          eNextPhase = COMPLETION_TABLES;
  1874          break;
  1875        }
  1876        case COMPLETION_TABLES: {
  1877          if( pCur->pStmt==0 ){
  1878            sqlite3_stmt *pS2;
  1879            char *zSql = 0;
  1880            const char *zSep = "";
  1881            sqlite3_prepare_v2(pCur->db, "PRAGMA database_list", -1, &pS2, 0);
  1882            while( sqlite3_step(pS2)==SQLITE_ROW ){
  1883              const char *zDb = (const char*)sqlite3_column_text(pS2, 1);
  1884              zSql = sqlite3_mprintf(
  1885                 "%z%s"
  1886                 "SELECT name FROM \"%w\".sqlite_master"
  1887                 " WHERE type='table'",
  1888                 zSql, zSep, zDb
  1889              );
  1890              if( zSql==0 ) return SQLITE_NOMEM;
  1891              zSep = " UNION ";
  1892            }
  1893            sqlite3_finalize(pS2);
  1894            sqlite3_prepare_v2(pCur->db, zSql, -1, &pCur->pStmt, 0);
  1895            sqlite3_free(zSql);
  1896          }
  1897          iCol = 0;
  1898          eNextPhase = COMPLETION_COLUMNS;
  1899          break;
  1900        }
  1901        case COMPLETION_COLUMNS: {
  1902          if( pCur->pStmt==0 ){
  1903            sqlite3_stmt *pS2;
  1904            char *zSql = 0;
  1905            const char *zSep = "";
  1906            sqlite3_prepare_v2(pCur->db, "PRAGMA database_list", -1, &pS2, 0);
  1907            while( sqlite3_step(pS2)==SQLITE_ROW ){
  1908              const char *zDb = (const char*)sqlite3_column_text(pS2, 1);
  1909              zSql = sqlite3_mprintf(
  1910                 "%z%s"
  1911                 "SELECT pti.name FROM \"%w\".sqlite_master AS sm"
  1912                         " JOIN pragma_table_info(sm.name,%Q) AS pti"
  1913                 " WHERE sm.type='table'",
  1914                 zSql, zSep, zDb, zDb
  1915              );
  1916              if( zSql==0 ) return SQLITE_NOMEM;
  1917              zSep = " UNION ";
  1918            }
  1919            sqlite3_finalize(pS2);
  1920            sqlite3_prepare_v2(pCur->db, zSql, -1, &pCur->pStmt, 0);
  1921            sqlite3_free(zSql);
  1922          }
  1923          iCol = 0;
  1924          eNextPhase = COMPLETION_EOF;
  1925          break;
  1926        }
  1927      }
  1928      if( iCol<0 ){
  1929        /* This case is when the phase presets zCurrentRow */
  1930        if( pCur->zCurrentRow==0 ) continue;
  1931      }else{
  1932        if( sqlite3_step(pCur->pStmt)==SQLITE_ROW ){
  1933          /* Extract the next row of content */
  1934          pCur->zCurrentRow = (const char*)sqlite3_column_text(pCur->pStmt, iCol);
  1935        }else{
  1936          /* When all rows are finished, advance to the next phase */
  1937          sqlite3_finalize(pCur->pStmt);
  1938          pCur->pStmt = 0;
  1939          pCur->ePhase = eNextPhase;
  1940          continue;
  1941        }
  1942      }
  1943      if( pCur->nPrefix==0 ) break;
  1944      if( sqlite3_strnicmp(pCur->zPrefix, pCur->zCurrentRow, pCur->nPrefix)==0 ){
  1945        break;
  1946      }
  1947    }
  1948  
  1949    return SQLITE_OK;
  1950  }
  1951  
  1952  /*
  1953  ** Return values of columns for the row at which the completion_cursor
  1954  ** is currently pointing.
  1955  */
  1956  static int completionColumn(
  1957    sqlite3_vtab_cursor *cur,   /* The cursor */
  1958    sqlite3_context *ctx,       /* First argument to sqlite3_result_...() */
  1959    int i                       /* Which column to return */
  1960  ){
  1961    completion_cursor *pCur = (completion_cursor*)cur;
  1962    switch( i ){
  1963      case COMPLETION_COLUMN_CANDIDATE: {
  1964        sqlite3_result_text(ctx, pCur->zCurrentRow, -1, SQLITE_TRANSIENT);
  1965        break;
  1966      }
  1967      case COMPLETION_COLUMN_PREFIX: {
  1968        sqlite3_result_text(ctx, pCur->zPrefix, -1, SQLITE_TRANSIENT);
  1969        break;
  1970      }
  1971      case COMPLETION_COLUMN_WHOLELINE: {
  1972        sqlite3_result_text(ctx, pCur->zLine, -1, SQLITE_TRANSIENT);
  1973        break;
  1974      }
  1975      case COMPLETION_COLUMN_PHASE: {
  1976        sqlite3_result_int(ctx, pCur->ePhase);
  1977        break;
  1978      }
  1979    }
  1980    return SQLITE_OK;
  1981  }
  1982  
  1983  /*
  1984  ** Return the rowid for the current row.  In this implementation, the
  1985  ** rowid is the same as the output value.
  1986  */
  1987  static int completionRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){
  1988    completion_cursor *pCur = (completion_cursor*)cur;
  1989    *pRowid = pCur->iRowid;
  1990    return SQLITE_OK;
  1991  }
  1992  
  1993  /*
  1994  ** Return TRUE if the cursor has been moved off of the last
  1995  ** row of output.
  1996  */
  1997  static int completionEof(sqlite3_vtab_cursor *cur){
  1998    completion_cursor *pCur = (completion_cursor*)cur;
  1999    return pCur->ePhase >= COMPLETION_EOF;
  2000  }
  2001  
  2002  /*
  2003  ** This method is called to "rewind" the completion_cursor object back
  2004  ** to the first row of output.  This method is always called at least
  2005  ** once prior to any call to completionColumn() or completionRowid() or 
  2006  ** completionEof().
  2007  */
  2008  static int completionFilter(
  2009    sqlite3_vtab_cursor *pVtabCursor, 
  2010    int idxNum, const char *idxStr,
  2011    int argc, sqlite3_value **argv
  2012  ){
  2013    completion_cursor *pCur = (completion_cursor *)pVtabCursor;
  2014    int iArg = 0;
  2015    (void)(idxStr);   /* Unused parameter */
  2016    (void)(argc);     /* Unused parameter */
  2017    completionCursorReset(pCur);
  2018    if( idxNum & 1 ){
  2019      pCur->nPrefix = sqlite3_value_bytes(argv[iArg]);
  2020      if( pCur->nPrefix>0 ){
  2021        pCur->zPrefix = sqlite3_mprintf("%s", sqlite3_value_text(argv[iArg]));
  2022        if( pCur->zPrefix==0 ) return SQLITE_NOMEM;
  2023      }
  2024      iArg++;
  2025    }
  2026    if( idxNum & 2 ){
  2027      pCur->nLine = sqlite3_value_bytes(argv[iArg]);
  2028      if( pCur->nLine>0 ){
  2029        pCur->zLine = sqlite3_mprintf("%s", sqlite3_value_text(argv[iArg]));
  2030        if( pCur->zLine==0 ) return SQLITE_NOMEM;
  2031      }
  2032      iArg++;
  2033    }
  2034    if( pCur->zLine!=0 && pCur->zPrefix==0 ){
  2035      int i = pCur->nLine;
  2036      while( i>0 && (isalnum(pCur->zLine[i-1]) || pCur->zLine[i-1]=='_') ){
  2037        i--;
  2038      }
  2039      pCur->nPrefix = pCur->nLine - i;
  2040      if( pCur->nPrefix>0 ){
  2041        pCur->zPrefix = sqlite3_mprintf("%.*s", pCur->nPrefix, pCur->zLine + i);
  2042        if( pCur->zPrefix==0 ) return SQLITE_NOMEM;
  2043      }
  2044    }
  2045    pCur->iRowid = 0;
  2046    pCur->ePhase = COMPLETION_FIRST_PHASE;
  2047    return completionNext(pVtabCursor);
  2048  }
  2049  
  2050  /*
  2051  ** SQLite will invoke this method one or more times while planning a query
  2052  ** that uses the completion virtual table.  This routine needs to create
  2053  ** a query plan for each invocation and compute an estimated cost for that
  2054  ** plan.
  2055  **
  2056  ** There are two hidden parameters that act as arguments to the table-valued
  2057  ** function:  "prefix" and "wholeline".  Bit 0 of idxNum is set if "prefix"
  2058  ** is available and bit 1 is set if "wholeline" is available.
  2059  */
  2060  static int completionBestIndex(
  2061    sqlite3_vtab *tab,
  2062    sqlite3_index_info *pIdxInfo
  2063  ){
  2064    int i;                 /* Loop over constraints */
  2065    int idxNum = 0;        /* The query plan bitmask */
  2066    int prefixIdx = -1;    /* Index of the start= constraint, or -1 if none */
  2067    int wholelineIdx = -1; /* Index of the stop= constraint, or -1 if none */
  2068    int nArg = 0;          /* Number of arguments that completeFilter() expects */
  2069    const struct sqlite3_index_constraint *pConstraint;
  2070  
  2071    (void)(tab);    /* Unused parameter */
  2072    pConstraint = pIdxInfo->aConstraint;
  2073    for(i=0; i<pIdxInfo->nConstraint; i++, pConstraint++){
  2074      if( pConstraint->usable==0 ) continue;
  2075      if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue;
  2076      switch( pConstraint->iColumn ){
  2077        case COMPLETION_COLUMN_PREFIX:
  2078          prefixIdx = i;
  2079          idxNum |= 1;
  2080          break;
  2081        case COMPLETION_COLUMN_WHOLELINE:
  2082          wholelineIdx = i;
  2083          idxNum |= 2;
  2084          break;
  2085      }
  2086    }
  2087    if( prefixIdx>=0 ){
  2088      pIdxInfo->aConstraintUsage[prefixIdx].argvIndex = ++nArg;
  2089      pIdxInfo->aConstraintUsage[prefixIdx].omit = 1;
  2090    }
  2091    if( wholelineIdx>=0 ){
  2092      pIdxInfo->aConstraintUsage[wholelineIdx].argvIndex = ++nArg;
  2093      pIdxInfo->aConstraintUsage[wholelineIdx].omit = 1;
  2094    }
  2095    pIdxInfo->idxNum = idxNum;
  2096    pIdxInfo->estimatedCost = (double)5000 - 1000*nArg;
  2097    pIdxInfo->estimatedRows = 500 - 100*nArg;
  2098    return SQLITE_OK;
  2099  }
  2100  
  2101  /*
  2102  ** This following structure defines all the methods for the 
  2103  ** completion virtual table.
  2104  */
  2105  static sqlite3_module completionModule = {
  2106    0,                         /* iVersion */
  2107    0,                         /* xCreate */
  2108    completionConnect,         /* xConnect */
  2109    completionBestIndex,       /* xBestIndex */
  2110    completionDisconnect,      /* xDisconnect */
  2111    0,                         /* xDestroy */
  2112    completionOpen,            /* xOpen - open a cursor */
  2113    completionClose,           /* xClose - close a cursor */
  2114    completionFilter,          /* xFilter - configure scan constraints */
  2115    completionNext,            /* xNext - advance a cursor */
  2116    completionEof,             /* xEof - check for end of scan */
  2117    completionColumn,          /* xColumn - read data */
  2118    completionRowid,           /* xRowid - read data */
  2119    0,                         /* xUpdate */
  2120    0,                         /* xBegin */
  2121    0,                         /* xSync */
  2122    0,                         /* xCommit */
  2123    0,                         /* xRollback */
  2124    0,                         /* xFindMethod */
  2125    0,                         /* xRename */
  2126    0,                         /* xSavepoint */
  2127    0,                         /* xRelease */
  2128    0                          /* xRollbackTo */
  2129  };
  2130  
  2131  #endif /* SQLITE_OMIT_VIRTUALTABLE */
  2132  
  2133  int sqlite3CompletionVtabInit(sqlite3 *db){
  2134    int rc = SQLITE_OK;
  2135  #ifndef SQLITE_OMIT_VIRTUALTABLE
  2136    rc = sqlite3_create_module(db, "completion", &completionModule, 0);
  2137  #endif
  2138    return rc;
  2139  }
  2140  
  2141  #ifdef _WIN32
  2142  
  2143  #endif
  2144  int sqlite3_completion_init(
  2145    sqlite3 *db, 
  2146    char **pzErrMsg, 
  2147    const sqlite3_api_routines *pApi
  2148  ){
  2149    int rc = SQLITE_OK;
  2150    SQLITE_EXTENSION_INIT2(pApi);
  2151    (void)(pzErrMsg);  /* Unused parameter */
  2152  #ifndef SQLITE_OMIT_VIRTUALTABLE
  2153    rc = sqlite3CompletionVtabInit(db);
  2154  #endif
  2155    return rc;
  2156  }
  2157  
  2158  /************************* End ../ext/misc/completion.c ********************/
  2159  
  2160  #if defined(SQLITE_ENABLE_SESSION)
  2161  /*
  2162  ** State information for a single open session
  2163  */
  2164  typedef struct OpenSession OpenSession;
  2165  struct OpenSession {
  2166    char *zName;             /* Symbolic name for this session */
  2167    int nFilter;             /* Number of xFilter rejection GLOB patterns */
  2168    char **azFilter;         /* Array of xFilter rejection GLOB patterns */
  2169    sqlite3_session *p;      /* The open session */
  2170  };
  2171  #endif
  2172  
  2173  /*
  2174  ** Shell output mode information from before ".explain on",
  2175  ** saved so that it can be restored by ".explain off"
  2176  */
  2177  typedef struct SavedModeInfo SavedModeInfo;
  2178  struct SavedModeInfo {
  2179    int valid;          /* Is there legit data in here? */
  2180    int mode;           /* Mode prior to ".explain on" */
  2181    int showHeader;     /* The ".header" setting prior to ".explain on" */
  2182    int colWidth[100];  /* Column widths prior to ".explain on" */
  2183  };
  2184  
  2185  /*
  2186  ** State information about the database connection is contained in an
  2187  ** instance of the following structure.
  2188  */
  2189  typedef struct ShellState ShellState;
  2190  struct ShellState {
  2191    sqlite3 *db;           /* The database */
  2192    int autoExplain;       /* Automatically turn on .explain mode */
  2193    int autoEQP;           /* Run EXPLAIN QUERY PLAN prior to seach SQL stmt */
  2194    int statsOn;           /* True to display memory stats before each finalize */
  2195    int scanstatsOn;       /* True to display scan stats before each finalize */
  2196    int outCount;          /* Revert to stdout when reaching zero */
  2197    int cnt;               /* Number of records displayed so far */
  2198    FILE *out;             /* Write results here */
  2199    FILE *traceOut;        /* Output for sqlite3_trace() */
  2200    int nErr;              /* Number of errors seen */
  2201    int mode;              /* An output mode setting */
  2202    int cMode;             /* temporary output mode for the current query */
  2203    int normalMode;        /* Output mode before ".explain on" */
  2204    int writableSchema;    /* True if PRAGMA writable_schema=ON */
  2205    int showHeader;        /* True to show column names in List or Column mode */
  2206    int nCheck;            /* Number of ".check" commands run */
  2207    unsigned shellFlgs;    /* Various flags */
  2208    char *zDestTable;      /* Name of destination table when MODE_Insert */
  2209    char zTestcase[30];    /* Name of current test case */
  2210    char colSeparator[20]; /* Column separator character for several modes */
  2211    char rowSeparator[20]; /* Row separator character for MODE_Ascii */
  2212    int colWidth[100];     /* Requested width of each column when in column mode*/
  2213    int actualWidth[100];  /* Actual width of each column */
  2214    char nullValue[20];    /* The text to print when a NULL comes back from
  2215                           ** the database */
  2216    char outfile[FILENAME_MAX]; /* Filename for *out */
  2217    const char *zDbFilename;    /* name of the database file */
  2218    char *zFreeOnClose;         /* Filename to free when closing */
  2219    const char *zVfs;           /* Name of VFS to use */
  2220    sqlite3_stmt *pStmt;   /* Current statement if any. */
  2221    FILE *pLog;            /* Write log output here */
  2222    int *aiIndent;         /* Array of indents used in MODE_Explain */
  2223    int nIndent;           /* Size of array aiIndent[] */
  2224    int iIndent;           /* Index of current op in aiIndent[] */
  2225  #if defined(SQLITE_ENABLE_SESSION)
  2226    int nSession;             /* Number of active sessions */
  2227    OpenSession aSession[4];  /* Array of sessions.  [0] is in focus. */
  2228  #endif
  2229  };
  2230  
  2231  /*
  2232  ** These are the allowed shellFlgs values
  2233  */
  2234  #define SHFLG_Pagecache      0x00000001 /* The --pagecache option is used */
  2235  #define SHFLG_Lookaside      0x00000002 /* Lookaside memory is used */
  2236  #define SHFLG_Backslash      0x00000004 /* The --backslash option is used */
  2237  #define SHFLG_PreserveRowid  0x00000008 /* .dump preserves rowid values */
  2238  #define SHFLG_Newlines       0x00000010 /* .dump --newline flag */
  2239  #define SHFLG_CountChanges   0x00000020 /* .changes setting */
  2240  #define SHFLG_Echo           0x00000040 /* .echo or --echo setting */
  2241  
  2242  /*
  2243  ** Macros for testing and setting shellFlgs
  2244  */
  2245  #define ShellHasFlag(P,X)    (((P)->shellFlgs & (X))!=0)
  2246  #define ShellSetFlag(P,X)    ((P)->shellFlgs|=(X))
  2247  #define ShellClearFlag(P,X)  ((P)->shellFlgs&=(~(X)))
  2248  
  2249  /*
  2250  ** These are the allowed modes.
  2251  */
  2252  #define MODE_Line     0  /* One column per line.  Blank line between records */
  2253  #define MODE_Column   1  /* One record per line in neat columns */
  2254  #define MODE_List     2  /* One record per line with a separator */
  2255  #define MODE_Semi     3  /* Same as MODE_List but append ";" to each line */
  2256  #define MODE_Html     4  /* Generate an XHTML table */
  2257  #define MODE_Insert   5  /* Generate SQL "insert" statements */
  2258  #define MODE_Quote    6  /* Quote values as for SQL */
  2259  #define MODE_Tcl      7  /* Generate ANSI-C or TCL quoted elements */
  2260  #define MODE_Csv      8  /* Quote strings, numbers are plain */
  2261  #define MODE_Explain  9  /* Like MODE_Column, but do not truncate data */
  2262  #define MODE_Ascii   10  /* Use ASCII unit and record separators (0x1F/0x1E) */
  2263  #define MODE_Pretty  11  /* Pretty-print schemas */
  2264  
  2265  static const char *modeDescr[] = {
  2266    "line",
  2267    "column",
  2268    "list",
  2269    "semi",
  2270    "html",
  2271    "insert",
  2272    "quote",
  2273    "tcl",
  2274    "csv",
  2275    "explain",
  2276    "ascii",
  2277    "prettyprint",
  2278  };
  2279  
  2280  /*
  2281  ** These are the column/row/line separators used by the various
  2282  ** import/export modes.
  2283  */
  2284  #define SEP_Column    "|"
  2285  #define SEP_Row       "\n"
  2286  #define SEP_Tab       "\t"
  2287  #define SEP_Space     " "
  2288  #define SEP_Comma     ","
  2289  #define SEP_CrLf      "\r\n"
  2290  #define SEP_Unit      "\x1F"
  2291  #define SEP_Record    "\x1E"
  2292  
  2293  /*
  2294  ** Number of elements in an array
  2295  */
  2296  #define ArraySize(X)  (int)(sizeof(X)/sizeof(X[0]))
  2297  
  2298  /*
  2299  ** A callback for the sqlite3_log() interface.
  2300  */
  2301  static void shellLog(void *pArg, int iErrCode, const char *zMsg){
  2302    ShellState *p = (ShellState*)pArg;
  2303    if( p->pLog==0 ) return;
  2304    utf8_printf(p->pLog, "(%d) %s\n", iErrCode, zMsg);
  2305    fflush(p->pLog);
  2306  }
  2307  
  2308  /*
  2309  ** Output the given string as a hex-encoded blob (eg. X'1234' )
  2310  */
  2311  static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){
  2312    int i;
  2313    char *zBlob = (char *)pBlob;
  2314    raw_printf(out,"X'");
  2315    for(i=0; i<nBlob; i++){ raw_printf(out,"%02x",zBlob[i]&0xff); }
  2316    raw_printf(out,"'");
  2317  }
  2318  
  2319  /*
  2320  ** Find a string that is not found anywhere in z[].  Return a pointer
  2321  ** to that string.
  2322  **
  2323  ** Try to use zA and zB first.  If both of those are already found in z[]
  2324  ** then make up some string and store it in the buffer zBuf.
  2325  */
  2326  static const char *unused_string(
  2327    const char *z,                    /* Result must not appear anywhere in z */
  2328    const char *zA, const char *zB,   /* Try these first */
  2329    char *zBuf                        /* Space to store a generated string */
  2330  ){
  2331    unsigned i = 0;
  2332    if( strstr(z, zA)==0 ) return zA;
  2333    if( strstr(z, zB)==0 ) return zB;
  2334    do{
  2335      sqlite3_snprintf(20,zBuf,"(%s%u)", zA, i++);
  2336    }while( strstr(z,zBuf)!=0 );
  2337    return zBuf;
  2338  }
  2339  
  2340  /*
  2341  ** Output the given string as a quoted string using SQL quoting conventions.
  2342  **
  2343  ** See also: output_quoted_escaped_string()
  2344  */
  2345  static void output_quoted_string(FILE *out, const char *z){
  2346    int i;
  2347    char c;
  2348    setBinaryMode(out, 1);
  2349    for(i=0; (c = z[i])!=0 && c!='\''; i++){}
  2350    if( c==0 ){
  2351      utf8_printf(out,"'%s'",z);
  2352    }else{
  2353      raw_printf(out, "'");
  2354      while( *z ){
  2355        for(i=0; (c = z[i])!=0 && c!='\''; i++){}
  2356        if( c=='\'' ) i++;
  2357        if( i ){
  2358          utf8_printf(out, "%.*s", i, z);
  2359          z += i;
  2360        }
  2361        if( c=='\'' ){
  2362          raw_printf(out, "'");
  2363          continue;
  2364        }
  2365        if( c==0 ){
  2366          break;
  2367        }
  2368        z++;
  2369      }
  2370      raw_printf(out, "'");
  2371    }
  2372    setTextMode(out, 1);
  2373  }
  2374  
  2375  /*
  2376  ** Output the given string as a quoted string using SQL quoting conventions.
  2377  ** Additionallly , escape the "\n" and "\r" characters so that they do not
  2378  ** get corrupted by end-of-line translation facilities in some operating
  2379  ** systems.
  2380  **
  2381  ** This is like output_quoted_string() but with the addition of the \r\n
  2382  ** escape mechanism.
  2383  */
  2384  static void output_quoted_escaped_string(FILE *out, const char *z){
  2385    int i;
  2386    char c;
  2387    setBinaryMode(out, 1);
  2388    for(i=0; (c = z[i])!=0 && c!='\'' && c!='\n' && c!='\r'; i++){}
  2389    if( c==0 ){
  2390      utf8_printf(out,"'%s'",z);
  2391    }else{
  2392      const char *zNL = 0;
  2393      const char *zCR = 0;
  2394      int nNL = 0;
  2395      int nCR = 0;
  2396      char zBuf1[20], zBuf2[20];
  2397      for(i=0; z[i]; i++){
  2398        if( z[i]=='\n' ) nNL++;
  2399        if( z[i]=='\r' ) nCR++;
  2400      }
  2401      if( nNL ){
  2402        raw_printf(out, "replace(");
  2403        zNL = unused_string(z, "\\n", "\\012", zBuf1);
  2404      }
  2405      if( nCR ){
  2406        raw_printf(out, "replace(");
  2407        zCR = unused_string(z, "\\r", "\\015", zBuf2);
  2408      }
  2409      raw_printf(out, "'");
  2410      while( *z ){
  2411        for(i=0; (c = z[i])!=0 && c!='\n' && c!='\r' && c!='\''; i++){}
  2412        if( c=='\'' ) i++;
  2413        if( i ){
  2414          utf8_printf(out, "%.*s", i, z);
  2415          z += i;
  2416        }
  2417        if( c=='\'' ){
  2418          raw_printf(out, "'");
  2419          continue;
  2420        }
  2421        if( c==0 ){
  2422          break;
  2423        }
  2424        z++;
  2425        if( c=='\n' ){
  2426          raw_printf(out, "%s", zNL);
  2427          continue;
  2428        }
  2429        raw_printf(out, "%s", zCR);
  2430      }
  2431      raw_printf(out, "'");
  2432      if( nCR ){
  2433        raw_printf(out, ",'%s',char(13))", zCR);
  2434      }
  2435      if( nNL ){
  2436        raw_printf(out, ",'%s',char(10))", zNL);
  2437      }
  2438    }
  2439    setTextMode(out, 1);
  2440  }
  2441  
  2442  /*
  2443  ** Output the given string as a quoted according to C or TCL quoting rules.
  2444  */
  2445  static void output_c_string(FILE *out, const char *z){
  2446    unsigned int c;
  2447    fputc('"', out);
  2448    while( (c = *(z++))!=0 ){
  2449      if( c=='\\' ){
  2450        fputc(c, out);
  2451        fputc(c, out);
  2452      }else if( c=='"' ){
  2453        fputc('\\', out);
  2454        fputc('"', out);
  2455      }else if( c=='\t' ){
  2456        fputc('\\', out);
  2457        fputc('t', out);
  2458      }else if( c=='\n' ){
  2459        fputc('\\', out);
  2460        fputc('n', out);
  2461      }else if( c=='\r' ){
  2462        fputc('\\', out);
  2463        fputc('r', out);
  2464      }else if( !isprint(c&0xff) ){
  2465        raw_printf(out, "\\%03o", c&0xff);
  2466      }else{
  2467        fputc(c, out);
  2468      }
  2469    }
  2470    fputc('"', out);
  2471  }
  2472  
  2473  /*
  2474  ** Output the given string with characters that are special to
  2475  ** HTML escaped.
  2476  */
  2477  static void output_html_string(FILE *out, const char *z){
  2478    int i;
  2479    if( z==0 ) z = "";
  2480    while( *z ){
  2481      for(i=0;   z[i]
  2482              && z[i]!='<'
  2483              && z[i]!='&'
  2484              && z[i]!='>'
  2485              && z[i]!='\"'
  2486              && z[i]!='\'';
  2487          i++){}
  2488      if( i>0 ){
  2489        utf8_printf(out,"%.*s",i,z);
  2490      }
  2491      if( z[i]=='<' ){
  2492        raw_printf(out,"&lt;");
  2493      }else if( z[i]=='&' ){
  2494        raw_printf(out,"&amp;");
  2495      }else if( z[i]=='>' ){
  2496        raw_printf(out,"&gt;");
  2497      }else if( z[i]=='\"' ){
  2498        raw_printf(out,"&quot;");
  2499      }else if( z[i]=='\'' ){
  2500        raw_printf(out,"&#39;");
  2501      }else{
  2502        break;
  2503      }
  2504      z += i + 1;
  2505    }
  2506  }
  2507  
  2508  /*
  2509  ** If a field contains any character identified by a 1 in the following
  2510  ** array, then the string must be quoted for CSV.
  2511  */
  2512  static const char needCsvQuote[] = {
  2513    1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
  2514    1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
  2515    1, 0, 1, 0, 0, 0, 0, 1,   0, 0, 0, 0, 0, 0, 0, 0,
  2516    0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
  2517    0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
  2518    0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
  2519    0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
  2520    0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 1,
  2521    1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
  2522    1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
  2523    1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
  2524    1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
  2525    1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
  2526    1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
  2527    1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
  2528    1, 1, 1, 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1,
  2529  };
  2530  
  2531  /*
  2532  ** Output a single term of CSV.  Actually, p->colSeparator is used for
  2533  ** the separator, which may or may not be a comma.  p->nullValue is
  2534  ** the null value.  Strings are quoted if necessary.  The separator
  2535  ** is only issued if bSep is true.
  2536  */
  2537  static void output_csv(ShellState *p, const char *z, int bSep){
  2538    FILE *out = p->out;
  2539    if( z==0 ){
  2540      utf8_printf(out,"%s",p->nullValue);
  2541    }else{
  2542      int i;
  2543      int nSep = strlen30(p->colSeparator);
  2544      for(i=0; z[i]; i++){
  2545        if( needCsvQuote[((unsigned char*)z)[i]]
  2546           || (z[i]==p->colSeparator[0] &&
  2547               (nSep==1 || memcmp(z, p->colSeparator, nSep)==0)) ){
  2548          i = 0;
  2549          break;
  2550        }
  2551      }
  2552      if( i==0 ){
  2553        putc('"', out);
  2554        for(i=0; z[i]; i++){
  2555          if( z[i]=='"' ) putc('"', out);
  2556          putc(z[i], out);
  2557        }
  2558        putc('"', out);
  2559      }else{
  2560        utf8_printf(out, "%s", z);
  2561      }
  2562    }
  2563    if( bSep ){
  2564      utf8_printf(p->out, "%s", p->colSeparator);
  2565    }
  2566  }
  2567  
  2568  #ifdef SIGINT
  2569  /*
  2570  ** This routine runs when the user presses Ctrl-C
  2571  */
  2572  static void interrupt_handler(int NotUsed){
  2573    UNUSED_PARAMETER(NotUsed);
  2574    seenInterrupt++;
  2575    if( seenInterrupt>2 ) exit(1);
  2576    if( globalDb ) sqlite3_interrupt(globalDb);
  2577  }
  2578  #endif
  2579  
  2580  #ifndef SQLITE_OMIT_AUTHORIZATION
  2581  /*
  2582  ** When the ".auth ON" is set, the following authorizer callback is
  2583  ** invoked.  It always returns SQLITE_OK.
  2584  */
  2585  static int shellAuth(
  2586    void *pClientData,
  2587    int op,
  2588    const char *zA1,
  2589    const char *zA2,
  2590    const char *zA3,
  2591    const char *zA4
  2592  ){
  2593    ShellState *p = (ShellState*)pClientData;
  2594    static const char *azAction[] = { 0,
  2595       "CREATE_INDEX",         "CREATE_TABLE",         "CREATE_TEMP_INDEX",
  2596       "CREATE_TEMP_TABLE",    "CREATE_TEMP_TRIGGER",  "CREATE_TEMP_VIEW",
  2597       "CREATE_TRIGGER",       "CREATE_VIEW",          "DELETE",
  2598       "DROP_INDEX",           "DROP_TABLE",           "DROP_TEMP_INDEX",
  2599       "DROP_TEMP_TABLE",      "DROP_TEMP_TRIGGER",    "DROP_TEMP_VIEW",
  2600       "DROP_TRIGGER",         "DROP_VIEW",            "INSERT",
  2601       "PRAGMA",               "READ",                 "SELECT",
  2602       "TRANSACTION",          "UPDATE",               "ATTACH",
  2603       "DETACH",               "ALTER_TABLE",          "REINDEX",
  2604       "ANALYZE",              "CREATE_VTABLE",        "DROP_VTABLE",
  2605       "FUNCTION",             "SAVEPOINT",            "RECURSIVE"
  2606    };
  2607    int i;
  2608    const char *az[4];
  2609    az[0] = zA1;
  2610    az[1] = zA2;
  2611    az[2] = zA3;
  2612    az[3] = zA4;
  2613    utf8_printf(p->out, "authorizer: %s", azAction[op]);
  2614    for(i=0; i<4; i++){
  2615      raw_printf(p->out, " ");
  2616      if( az[i] ){
  2617        output_c_string(p->out, az[i]);
  2618      }else{
  2619        raw_printf(p->out, "NULL");
  2620      }
  2621    }
  2622    raw_printf(p->out, "\n");
  2623    return SQLITE_OK;
  2624  }
  2625  #endif
  2626  
  2627  /*
  2628  ** Print a schema statement.  Part of MODE_Semi and MODE_Pretty output.
  2629  **
  2630  ** This routine converts some CREATE TABLE statements for shadow tables
  2631  ** in FTS3/4/5 into CREATE TABLE IF NOT EXISTS statements.
  2632  */
  2633  static void printSchemaLine(FILE *out, const char *z, const char *zTail){
  2634    if( sqlite3_strglob("CREATE TABLE ['\"]*", z)==0 ){
  2635      utf8_printf(out, "CREATE TABLE IF NOT EXISTS %s%s", z+13, zTail);
  2636    }else{
  2637      utf8_printf(out, "%s%s", z, zTail);
  2638    }
  2639  }
  2640  static void printSchemaLineN(FILE *out, char *z, int n, const char *zTail){
  2641    char c = z[n];
  2642    z[n] = 0;
  2643    printSchemaLine(out, z, zTail);
  2644    z[n] = c;
  2645  }
  2646  
  2647  /*
  2648  ** This is the callback routine that the shell
  2649  ** invokes for each row of a query result.
  2650  */
  2651  static int shell_callback(
  2652    void *pArg,
  2653    int nArg,        /* Number of result columns */
  2654    char **azArg,    /* Text of each result column */
  2655    char **azCol,    /* Column names */
  2656    int *aiType      /* Column types */
  2657  ){
  2658    int i;
  2659    ShellState *p = (ShellState*)pArg;
  2660  
  2661    if( azArg==0 ) return 0;
  2662    switch( p->cMode ){
  2663      case MODE_Line: {
  2664        int w = 5;
  2665        if( azArg==0 ) break;
  2666        for(i=0; i<nArg; i++){
  2667          int len = strlen30(azCol[i] ? azCol[i] : "");
  2668          if( len>w ) w = len;
  2669        }
  2670        if( p->cnt++>0 ) utf8_printf(p->out, "%s", p->rowSeparator);
  2671        for(i=0; i<nArg; i++){
  2672          utf8_printf(p->out,"%*s = %s%s", w, azCol[i],
  2673                  azArg[i] ? azArg[i] : p->nullValue, p->rowSeparator);
  2674        }
  2675        break;
  2676      }
  2677      case MODE_Explain:
  2678      case MODE_Column: {
  2679        static const int aExplainWidths[] = {4, 13, 4, 4, 4, 13, 2, 13};
  2680        const int *colWidth;
  2681        int showHdr;
  2682        char *rowSep;
  2683        if( p->cMode==MODE_Column ){
  2684          colWidth = p->colWidth;
  2685          showHdr = p->showHeader;
  2686          rowSep = p->rowSeparator;
  2687        }else{
  2688          colWidth = aExplainWidths;
  2689          showHdr = 1;
  2690          rowSep = SEP_Row;
  2691        }
  2692        if( p->cnt++==0 ){
  2693          for(i=0; i<nArg; i++){
  2694            int w, n;
  2695            if( i<ArraySize(p->colWidth) ){
  2696              w = colWidth[i];
  2697            }else{
  2698              w = 0;
  2699            }
  2700            if( w==0 ){
  2701              w = strlenChar(azCol[i] ? azCol[i] : "");
  2702              if( w<10 ) w = 10;
  2703              n = strlenChar(azArg && azArg[i] ? azArg[i] : p->nullValue);
  2704              if( w<n ) w = n;
  2705            }
  2706            if( i<ArraySize(p->actualWidth) ){
  2707              p->actualWidth[i] = w;
  2708            }
  2709            if( showHdr ){
  2710              utf8_width_print(p->out, w, azCol[i]);
  2711              utf8_printf(p->out, "%s", i==nArg-1 ? rowSep : "  ");
  2712            }
  2713          }
  2714          if( showHdr ){
  2715            for(i=0; i<nArg; i++){
  2716              int w;
  2717              if( i<ArraySize(p->actualWidth) ){
  2718                 w = p->actualWidth[i];
  2719                 if( w<0 ) w = -w;
  2720              }else{
  2721                 w = 10;
  2722              }
  2723              utf8_printf(p->out,"%-*.*s%s",w,w,
  2724                     "----------------------------------------------------------"
  2725                     "----------------------------------------------------------",
  2726                      i==nArg-1 ? rowSep : "  ");
  2727            }
  2728          }
  2729        }
  2730        if( azArg==0 ) break;
  2731        for(i=0; i<nArg; i++){
  2732          int w;
  2733          if( i<ArraySize(p->actualWidth) ){
  2734             w = p->actualWidth[i];
  2735          }else{
  2736             w = 10;
  2737          }
  2738          if( p->cMode==MODE_Explain && azArg[i] && strlenChar(azArg[i])>w ){
  2739            w = strlenChar(azArg[i]);
  2740          }
  2741          if( i==1 && p->aiIndent && p->pStmt ){
  2742            if( p->iIndent<p->nIndent ){
  2743              utf8_printf(p->out, "%*.s", p->aiIndent[p->iIndent], "");
  2744            }
  2745            p->iIndent++;
  2746          }
  2747          utf8_width_print(p->out, w, azArg[i] ? azArg[i] : p->nullValue);
  2748          utf8_printf(p->out, "%s", i==nArg-1 ? rowSep : "  ");
  2749        }
  2750        break;
  2751      }
  2752      case MODE_Semi: {   /* .schema and .fullschema output */
  2753        printSchemaLine(p->out, azArg[0], ";\n");
  2754        break;
  2755      }
  2756      case MODE_Pretty: {  /* .schema and .fullschema with --indent */
  2757        char *z;
  2758        int j;
  2759        int nParen = 0;
  2760        char cEnd = 0;
  2761        char c;
  2762        int nLine = 0;
  2763        assert( nArg==1 );
  2764        if( azArg[0]==0 ) break;
  2765        if( sqlite3_strlike("CREATE VIEW%", azArg[0], 0)==0
  2766         || sqlite3_strlike("CREATE TRIG%", azArg[0], 0)==0
  2767        ){
  2768          utf8_printf(p->out, "%s;\n", azArg[0]);
  2769          break;
  2770        }
  2771        z = sqlite3_mprintf("%s", azArg[0]);
  2772        j = 0;
  2773        for(i=0; IsSpace(z[i]); i++){}
  2774        for(; (c = z[i])!=0; i++){
  2775          if( IsSpace(c) ){
  2776            if( z[j-1]=='\r' ) z[j-1] = '\n';
  2777            if( IsSpace(z[j-1]) || z[j-1]=='(' ) continue;
  2778          }else if( (c=='(' || c==')') && j>0 && IsSpace(z[j-1]) ){
  2779            j--;
  2780          }
  2781          z[j++] = c;
  2782        }
  2783        while( j>0 && IsSpace(z[j-1]) ){ j--; }
  2784        z[j] = 0;
  2785        if( strlen30(z)>=79 ){
  2786          for(i=j=0; (c = z[i])!=0; i++){
  2787            if( c==cEnd ){
  2788              cEnd = 0;
  2789            }else if( c=='"' || c=='\'' || c=='`' ){
  2790              cEnd = c;
  2791            }else if( c=='[' ){
  2792              cEnd = ']';
  2793            }else if( c=='(' ){
  2794              nParen++;
  2795            }else if( c==')' ){
  2796              nParen--;
  2797              if( nLine>0 && nParen==0 && j>0 ){
  2798                printSchemaLineN(p->out, z, j, "\n");
  2799                j = 0;
  2800              }
  2801            }
  2802            z[j++] = c;
  2803            if( nParen==1 && (c=='(' || c==',' || c=='\n') ){
  2804              if( c=='\n' ) j--;
  2805              printSchemaLineN(p->out, z, j, "\n  ");
  2806              j = 0;
  2807              nLine++;
  2808              while( IsSpace(z[i+1]) ){ i++; }
  2809            }
  2810          }
  2811          z[j] = 0;
  2812        }
  2813        printSchemaLine(p->out, z, ";\n");
  2814        sqlite3_free(z);
  2815        break;
  2816      }
  2817      case MODE_List: {
  2818        if( p->cnt++==0 && p->showHeader ){
  2819          for(i=0; i<nArg; i++){
  2820            utf8_printf(p->out,"%s%s",azCol[i],
  2821                    i==nArg-1 ? p->rowSeparator : p->colSeparator);
  2822          }
  2823        }
  2824        if( azArg==0 ) break;
  2825        for(i=0; i<nArg; i++){
  2826          char *z = azArg[i];
  2827          if( z==0 ) z = p->nullValue;
  2828          utf8_printf(p->out, "%s", z);
  2829          if( i<nArg-1 ){
  2830            utf8_printf(p->out, "%s", p->colSeparator);
  2831          }else{
  2832            utf8_printf(p->out, "%s", p->rowSeparator);
  2833          }
  2834        }
  2835        break;
  2836      }
  2837      case MODE_Html: {
  2838        if( p->cnt++==0 && p->showHeader ){
  2839          raw_printf(p->out,"<TR>");
  2840          for(i=0; i<nArg; i++){
  2841            raw_printf(p->out,"<TH>");
  2842            output_html_string(p->out, azCol[i]);
  2843            raw_printf(p->out,"</TH>\n");
  2844          }
  2845          raw_printf(p->out,"</TR>\n");
  2846        }
  2847        if( azArg==0 ) break;
  2848        raw_printf(p->out,"<TR>");
  2849        for(i=0; i<nArg; i++){
  2850          raw_printf(p->out,"<TD>");
  2851          output_html_string(p->out, azArg[i] ? azArg[i] : p->nullValue);
  2852          raw_printf(p->out,"</TD>\n");
  2853        }
  2854        raw_printf(p->out,"</TR>\n");
  2855        break;
  2856      }
  2857      case MODE_Tcl: {
  2858        if( p->cnt++==0 && p->showHeader ){
  2859          for(i=0; i<nArg; i++){
  2860            output_c_string(p->out,azCol[i] ? azCol[i] : "");
  2861            if(i<nArg-1) utf8_printf(p->out, "%s", p->colSeparator);
  2862          }
  2863          utf8_printf(p->out, "%s", p->rowSeparator);
  2864        }
  2865        if( azArg==0 ) break;
  2866        for(i=0; i<nArg; i++){
  2867          output_c_string(p->out, azArg[i] ? azArg[i] : p->nullValue);
  2868          if(i<nArg-1) utf8_printf(p->out, "%s", p->colSeparator);
  2869        }
  2870        utf8_printf(p->out, "%s", p->rowSeparator);
  2871        break;
  2872      }
  2873      case MODE_Csv: {
  2874        setBinaryMode(p->out, 1);
  2875        if( p->cnt++==0 && p->showHeader ){
  2876          for(i=0; i<nArg; i++){
  2877            output_csv(p, azCol[i] ? azCol[i] : "", i<nArg-1);
  2878          }
  2879          utf8_printf(p->out, "%s", p->rowSeparator);
  2880        }
  2881        if( nArg>0 ){
  2882          for(i=0; i<nArg; i++){
  2883            output_csv(p, azArg[i], i<nArg-1);
  2884          }
  2885          utf8_printf(p->out, "%s", p->rowSeparator);
  2886        }
  2887        setTextMode(p->out, 1);
  2888        break;
  2889      }
  2890      case MODE_Insert: {
  2891        if( azArg==0 ) break;
  2892        utf8_printf(p->out,"INSERT INTO %s",p->zDestTable);
  2893        if( p->showHeader ){
  2894          raw_printf(p->out,"(");
  2895          for(i=0; i<nArg; i++){
  2896            if( i>0 ) raw_printf(p->out, ",");
  2897            if( quoteChar(azCol[i]) ){
  2898              char *z = sqlite3_mprintf("\"%w\"", azCol[i]);
  2899              utf8_printf(p->out, "%s", z);
  2900              sqlite3_free(z);
  2901            }else{
  2902              raw_printf(p->out, "%s", azCol[i]);
  2903            }
  2904          }
  2905          raw_printf(p->out,")");
  2906        }
  2907        p->cnt++;
  2908        for(i=0; i<nArg; i++){
  2909          raw_printf(p->out, i>0 ? "," : " VALUES(");
  2910          if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){
  2911            utf8_printf(p->out,"NULL");
  2912          }else if( aiType && aiType[i]==SQLITE_TEXT ){
  2913            if( ShellHasFlag(p, SHFLG_Newlines) ){
  2914              output_quoted_string(p->out, azArg[i]);
  2915            }else{
  2916              output_quoted_escaped_string(p->out, azArg[i]);
  2917            }
  2918          }else if( aiType && aiType[i]==SQLITE_INTEGER ){
  2919            utf8_printf(p->out,"%s", azArg[i]);
  2920          }else if( aiType && aiType[i]==SQLITE_FLOAT ){
  2921            char z[50];
  2922            double r = sqlite3_column_double(p->pStmt, i);
  2923            sqlite3_snprintf(50,z,"%!.20g", r);
  2924            raw_printf(p->out, "%s", z);
  2925          }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){
  2926            const void *pBlob = sqlite3_column_blob(p->pStmt, i);
  2927            int nBlob = sqlite3_column_bytes(p->pStmt, i);
  2928            output_hex_blob(p->out, pBlob, nBlob);
  2929          }else if( isNumber(azArg[i], 0) ){
  2930            utf8_printf(p->out,"%s", azArg[i]);
  2931          }else if( ShellHasFlag(p, SHFLG_Newlines) ){
  2932            output_quoted_string(p->out, azArg[i]);
  2933          }else{
  2934            output_quoted_escaped_string(p->out, azArg[i]);
  2935          }
  2936        }
  2937        raw_printf(p->out,");\n");
  2938        break;
  2939      }
  2940      case MODE_Quote: {
  2941        if( azArg==0 ) break;
  2942        if( p->cnt==0 && p->showHeader ){
  2943          for(i=0; i<nArg; i++){
  2944            if( i>0 ) raw_printf(p->out, ",");
  2945            output_quoted_string(p->out, azCol[i]);
  2946          }
  2947          raw_printf(p->out,"\n");
  2948        }
  2949        p->cnt++;
  2950        for(i=0; i<nArg; i++){
  2951          if( i>0 ) raw_printf(p->out, ",");
  2952          if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){
  2953            utf8_printf(p->out,"NULL");
  2954          }else if( aiType && aiType[i]==SQLITE_TEXT ){
  2955            output_quoted_string(p->out, azArg[i]);
  2956          }else if( aiType && aiType[i]==SQLITE_INTEGER ){
  2957            utf8_printf(p->out,"%s", azArg[i]);
  2958          }else if( aiType && aiType[i]==SQLITE_FLOAT ){
  2959            char z[50];
  2960            double r = sqlite3_column_double(p->pStmt, i);
  2961            sqlite3_snprintf(50,z,"%!.20g", r);
  2962            raw_printf(p->out, "%s", z);
  2963          }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){
  2964            const void *pBlob = sqlite3_column_blob(p->pStmt, i);
  2965            int nBlob = sqlite3_column_bytes(p->pStmt, i);
  2966            output_hex_blob(p->out, pBlob, nBlob);
  2967          }else if( isNumber(azArg[i], 0) ){
  2968            utf8_printf(p->out,"%s", azArg[i]);
  2969          }else{
  2970            output_quoted_string(p->out, azArg[i]);
  2971          }
  2972        }
  2973        raw_printf(p->out,"\n");
  2974        break;
  2975      }
  2976      case MODE_Ascii: {
  2977        if( p->cnt++==0 && p->showHeader ){
  2978          for(i=0; i<nArg; i++){
  2979            if( i>0 ) utf8_printf(p->out, "%s", p->colSeparator);
  2980            utf8_printf(p->out,"%s",azCol[i] ? azCol[i] : "");
  2981          }
  2982          utf8_printf(p->out, "%s", p->rowSeparator);
  2983        }
  2984        if( azArg==0 ) break;
  2985        for(i=0; i<nArg; i++){
  2986          if( i>0 ) utf8_printf(p->out, "%s", p->colSeparator);
  2987          utf8_printf(p->out,"%s",azArg[i] ? azArg[i] : p->nullValue);
  2988        }
  2989        utf8_printf(p->out, "%s", p->rowSeparator);
  2990        break;
  2991      }
  2992    }
  2993    return 0;
  2994  }
  2995  
  2996  /*
  2997  ** This is the callback routine that the SQLite library
  2998  ** invokes for each row of a query result.
  2999  */
  3000  static int callback(void *pArg, int nArg, char **azArg, char **azCol){
  3001    /* since we don't have type info, call the shell_callback with a NULL value */
  3002    return shell_callback(pArg, nArg, azArg, azCol, NULL);
  3003  }
  3004  
  3005  /*
  3006  ** This is the callback routine from sqlite3_exec() that appends all
  3007  ** output onto the end of a ShellText object.
  3008  */
  3009  static int captureOutputCallback(void *pArg, int nArg, char **azArg, char **az){
  3010    ShellText *p = (ShellText*)pArg;
  3011    int i;
  3012    UNUSED_PARAMETER(az);
  3013    if( azArg==0 ) return 0;
  3014    if( p->n ) appendText(p, "|", 0);
  3015    for(i=0; i<nArg; i++){
  3016      if( i ) appendText(p, ",", 0);
  3017      if( azArg[i] ) appendText(p, azArg[i], 0);
  3018    }
  3019    return 0;
  3020  }
  3021  
  3022  /*
  3023  ** Generate an appropriate SELFTEST table in the main database.
  3024  */
  3025  static void createSelftestTable(ShellState *p){
  3026    char *zErrMsg = 0;
  3027    sqlite3_exec(p->db,
  3028      "SAVEPOINT selftest_init;\n"
  3029      "CREATE TABLE IF NOT EXISTS selftest(\n"
  3030      "  tno INTEGER PRIMARY KEY,\n"   /* Test number */
  3031      "  op TEXT,\n"                   /* Operator:  memo run */
  3032      "  cmd TEXT,\n"                  /* Command text */
  3033      "  ans TEXT\n"                   /* Desired answer */
  3034      ");"
  3035      "CREATE TEMP TABLE [_shell$self](op,cmd,ans);\n"
  3036      "INSERT INTO [_shell$self](rowid,op,cmd)\n"
  3037      "  VALUES(coalesce((SELECT (max(tno)+100)/10 FROM selftest),10),\n"
  3038      "         'memo','Tests generated by --init');\n"
  3039      "INSERT INTO [_shell$self]\n"
  3040      "  SELECT 'run',\n"
  3041      "    'SELECT hex(sha3_query(''SELECT type,name,tbl_name,sql "
  3042                                   "FROM sqlite_master ORDER BY 2'',224))',\n"
  3043      "    hex(sha3_query('SELECT type,name,tbl_name,sql "
  3044                            "FROM sqlite_master ORDER BY 2',224));\n"
  3045      "INSERT INTO [_shell$self]\n"
  3046      "  SELECT 'run',"
  3047      "    'SELECT hex(sha3_query(''SELECT * FROM \"' ||"
  3048      "        printf('%w',name) || '\" NOT INDEXED'',224))',\n"
  3049      "    hex(sha3_query(printf('SELECT * FROM \"%w\" NOT INDEXED',name),224))\n"
  3050      "  FROM (\n"
  3051      "    SELECT name FROM sqlite_master\n"
  3052      "     WHERE type='table'\n"
  3053      "       AND name<>'selftest'\n"
  3054      "       AND coalesce(rootpage,0)>0\n"
  3055      "  )\n"
  3056      " ORDER BY name;\n"
  3057      "INSERT INTO [_shell$self]\n"
  3058      "  VALUES('run','PRAGMA integrity_check','ok');\n"
  3059      "INSERT INTO selftest(tno,op,cmd,ans)"
  3060      "  SELECT rowid*10,op,cmd,ans FROM [_shell$self];\n"
  3061      "DROP TABLE [_shell$self];"
  3062      ,0,0,&zErrMsg);
  3063    if( zErrMsg ){
  3064      utf8_printf(stderr, "SELFTEST initialization failure: %s\n", zErrMsg);
  3065      sqlite3_free(zErrMsg);
  3066    }
  3067    sqlite3_exec(p->db, "RELEASE selftest_init",0,0,0);
  3068  }
  3069  
  3070  
  3071  /*
  3072  ** Set the destination table field of the ShellState structure to
  3073  ** the name of the table given.  Escape any quote characters in the
  3074  ** table name.
  3075  */
  3076  static void set_table_name(ShellState *p, const char *zName){
  3077    int i, n;
  3078    char cQuote;
  3079    char *z;
  3080  
  3081    if( p->zDestTable ){
  3082      free(p->zDestTable);
  3083      p->zDestTable = 0;
  3084    }
  3085    if( zName==0 ) return;
  3086    cQuote = quoteChar(zName);
  3087    n = strlen30(zName);
  3088    if( cQuote ) n += n+2;
  3089    z = p->zDestTable = malloc( n+1 );
  3090    if( z==0 ){
  3091      raw_printf(stderr,"Error: out of memory\n");
  3092      exit(1);
  3093    }
  3094    n = 0;
  3095    if( cQuote ) z[n++] = cQuote;
  3096    for(i=0; zName[i]; i++){
  3097      z[n++] = zName[i];
  3098      if( zName[i]==cQuote ) z[n++] = cQuote;
  3099    }
  3100    if( cQuote ) z[n++] = cQuote;
  3101    z[n] = 0;
  3102  }
  3103  
  3104  
  3105  /*
  3106  ** Execute a query statement that will generate SQL output.  Print
  3107  ** the result columns, comma-separated, on a line and then add a
  3108  ** semicolon terminator to the end of that line.
  3109  **
  3110  ** If the number of columns is 1 and that column contains text "--"
  3111  ** then write the semicolon on a separate line.  That way, if a
  3112  ** "--" comment occurs at the end of the statement, the comment
  3113  ** won't consume the semicolon terminator.
  3114  */
  3115  static int run_table_dump_query(
  3116    ShellState *p,           /* Query context */
  3117    const char *zSelect,     /* SELECT statement to extract content */
  3118    const char *zFirstRow    /* Print before first row, if not NULL */
  3119  ){
  3120    sqlite3_stmt *pSelect;
  3121    int rc;
  3122    int nResult;
  3123    int i;
  3124    const char *z;
  3125    rc = sqlite3_prepare_v2(p->db, zSelect, -1, &pSelect, 0);
  3126    if( rc!=SQLITE_OK || !pSelect ){
  3127      utf8_printf(p->out, "/**** ERROR: (%d) %s *****/\n", rc,
  3128                  sqlite3_errmsg(p->db));
  3129      if( (rc&0xff)!=SQLITE_CORRUPT ) p->nErr++;
  3130      return rc;
  3131    }
  3132    rc = sqlite3_step(pSelect);
  3133    nResult = sqlite3_column_count(pSelect);
  3134    while( rc==SQLITE_ROW ){
  3135      if( zFirstRow ){
  3136        utf8_printf(p->out, "%s", zFirstRow);
  3137        zFirstRow = 0;
  3138      }
  3139      z = (const char*)sqlite3_column_text(pSelect, 0);
  3140      utf8_printf(p->out, "%s", z);
  3141      for(i=1; i<nResult; i++){
  3142        utf8_printf(p->out, ",%s", sqlite3_column_text(pSelect, i));
  3143      }
  3144      if( z==0 ) z = "";
  3145      while( z[0] && (z[0]!='-' || z[1]!='-') ) z++;
  3146      if( z[0] ){
  3147        raw_printf(p->out, "\n;\n");
  3148      }else{
  3149        raw_printf(p->out, ";\n");
  3150      }
  3151      rc = sqlite3_step(pSelect);
  3152    }
  3153    rc = sqlite3_finalize(pSelect);
  3154    if( rc!=SQLITE_OK ){
  3155      utf8_printf(p->out, "/**** ERROR: (%d) %s *****/\n", rc,
  3156                  sqlite3_errmsg(p->db));
  3157      if( (rc&0xff)!=SQLITE_CORRUPT ) p->nErr++;
  3158    }
  3159    return rc;
  3160  }
  3161  
  3162  /*
  3163  ** Allocate space and save off current error string.
  3164  */
  3165  static char *save_err_msg(
  3166    sqlite3 *db            /* Database to query */
  3167  ){
  3168    int nErrMsg = 1+strlen30(sqlite3_errmsg(db));
  3169    char *zErrMsg = sqlite3_malloc64(nErrMsg);
  3170    if( zErrMsg ){
  3171      memcpy(zErrMsg, sqlite3_errmsg(db), nErrMsg);
  3172    }
  3173    return zErrMsg;
  3174  }
  3175  
  3176  #ifdef __linux__
  3177  /*
  3178  ** Attempt to display I/O stats on Linux using /proc/PID/io
  3179  */
  3180  static void displayLinuxIoStats(FILE *out){
  3181    FILE *in;
  3182    char z[200];
  3183    sqlite3_snprintf(sizeof(z), z, "/proc/%d/io", getpid());
  3184    in = fopen(z, "rb");
  3185    if( in==0 ) return;
  3186    while( fgets(z, sizeof(z), in)!=0 ){
  3187      static const struct {
  3188        const char *zPattern;
  3189        const char *zDesc;
  3190      } aTrans[] = {
  3191        { "rchar: ",                  "Bytes received by read():" },
  3192        { "wchar: ",                  "Bytes sent to write():"    },
  3193        { "syscr: ",                  "Read() system calls:"      },
  3194        { "syscw: ",                  "Write() system calls:"     },
  3195        { "read_bytes: ",             "Bytes read from storage:"  },
  3196        { "write_bytes: ",            "Bytes written to storage:" },
  3197        { "cancelled_write_bytes: ",  "Cancelled write bytes:"    },
  3198      };
  3199      int i;
  3200      for(i=0; i<ArraySize(aTrans); i++){
  3201        int n = (int)strlen(aTrans[i].zPattern);
  3202        if( strncmp(aTrans[i].zPattern, z, n)==0 ){
  3203          utf8_printf(out, "%-36s %s", aTrans[i].zDesc, &z[n]);
  3204          break;
  3205        }
  3206      }
  3207    }
  3208    fclose(in);
  3209  }
  3210  #endif
  3211  
  3212  /*
  3213  ** Display a single line of status using 64-bit values.
  3214  */
  3215  static void displayStatLine(
  3216    ShellState *p,            /* The shell context */
  3217    char *zLabel,             /* Label for this one line */
  3218    char *zFormat,            /* Format for the result */
  3219    int iStatusCtrl,          /* Which status to display */
  3220    int bReset                /* True to reset the stats */
  3221  ){
  3222    sqlite3_int64 iCur = -1;
  3223    sqlite3_int64 iHiwtr = -1;
  3224    int i, nPercent;
  3225    char zLine[200];
  3226    sqlite3_status64(iStatusCtrl, &iCur, &iHiwtr, bReset);
  3227    for(i=0, nPercent=0; zFormat[i]; i++){
  3228      if( zFormat[i]=='%' ) nPercent++;
  3229    }
  3230    if( nPercent>1 ){
  3231      sqlite3_snprintf(sizeof(zLine), zLine, zFormat, iCur, iHiwtr);
  3232    }else{
  3233      sqlite3_snprintf(sizeof(zLine), zLine, zFormat, iHiwtr);
  3234    }
  3235    raw_printf(p->out, "%-36s %s\n", zLabel, zLine);
  3236  }
  3237  
  3238  /*
  3239  ** Display memory stats.
  3240  */
  3241  static int display_stats(
  3242    sqlite3 *db,                /* Database to query */
  3243    ShellState *pArg,           /* Pointer to ShellState */
  3244    int bReset                  /* True to reset the stats */
  3245  ){
  3246    int iCur;
  3247    int iHiwtr;
  3248  
  3249    if( pArg && pArg->out ){
  3250      displayStatLine(pArg, "Memory Used:",
  3251         "%lld (max %lld) bytes", SQLITE_STATUS_MEMORY_USED, bReset);
  3252      displayStatLine(pArg, "Number of Outstanding Allocations:",
  3253         "%lld (max %lld)", SQLITE_STATUS_MALLOC_COUNT, bReset);
  3254      if( pArg->shellFlgs & SHFLG_Pagecache ){
  3255        displayStatLine(pArg, "Number of Pcache Pages Used:",
  3256           "%lld (max %lld) pages", SQLITE_STATUS_PAGECACHE_USED, bReset);
  3257      }
  3258      displayStatLine(pArg, "Number of Pcache Overflow Bytes:",
  3259         "%lld (max %lld) bytes", SQLITE_STATUS_PAGECACHE_OVERFLOW, bReset);
  3260      displayStatLine(pArg, "Largest Allocation:",
  3261         "%lld bytes", SQLITE_STATUS_MALLOC_SIZE, bReset);
  3262      displayStatLine(pArg, "Largest Pcache Allocation:",
  3263         "%lld bytes", SQLITE_STATUS_PAGECACHE_SIZE, bReset);
  3264  #ifdef YYTRACKMAXSTACKDEPTH
  3265      displayStatLine(pArg, "Deepest Parser Stack:",
  3266         "%lld (max %lld)", SQLITE_STATUS_PARSER_STACK, bReset);
  3267  #endif
  3268    }
  3269  
  3270    if( pArg && pArg->out && db ){
  3271      if( pArg->shellFlgs & SHFLG_Lookaside ){
  3272        iHiwtr = iCur = -1;
  3273        sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_USED,
  3274                          &iCur, &iHiwtr, bReset);
  3275        raw_printf(pArg->out,
  3276                "Lookaside Slots Used:                %d (max %d)\n",
  3277                iCur, iHiwtr);
  3278        sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_HIT,
  3279                          &iCur, &iHiwtr, bReset);
  3280        raw_printf(pArg->out, "Successful lookaside attempts:       %d\n",
  3281                iHiwtr);
  3282        sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE,
  3283                          &iCur, &iHiwtr, bReset);
  3284        raw_printf(pArg->out, "Lookaside failures due to size:      %d\n",
  3285                iHiwtr);
  3286        sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL,
  3287                          &iCur, &iHiwtr, bReset);
  3288        raw_printf(pArg->out, "Lookaside failures due to OOM:       %d\n",
  3289                iHiwtr);
  3290      }
  3291      iHiwtr = iCur = -1;
  3292      sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_USED, &iCur, &iHiwtr, bReset);
  3293      raw_printf(pArg->out, "Pager Heap Usage:                    %d bytes\n",
  3294              iCur);
  3295      iHiwtr = iCur = -1;
  3296      sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_HIT, &iCur, &iHiwtr, 1);
  3297      raw_printf(pArg->out, "Page cache hits:                     %d\n", iCur);
  3298      iHiwtr = iCur = -1;
  3299      sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_MISS, &iCur, &iHiwtr, 1);
  3300      raw_printf(pArg->out, "Page cache misses:                   %d\n", iCur);
  3301      iHiwtr = iCur = -1;
  3302      sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_WRITE, &iCur, &iHiwtr, 1);
  3303      raw_printf(pArg->out, "Page cache writes:                   %d\n", iCur);
  3304      iHiwtr = iCur = -1;
  3305      sqlite3_db_status(db, SQLITE_DBSTATUS_SCHEMA_USED, &iCur, &iHiwtr, bReset);
  3306      raw_printf(pArg->out, "Schema Heap Usage:                   %d bytes\n",
  3307              iCur);
  3308      iHiwtr = iCur = -1;
  3309      sqlite3_db_status(db, SQLITE_DBSTATUS_STMT_USED, &iCur, &iHiwtr, bReset);
  3310      raw_printf(pArg->out, "Statement Heap/Lookaside Usage:      %d bytes\n",
  3311              iCur);
  3312    }
  3313  
  3314    if( pArg && pArg->out && db && pArg->pStmt ){
  3315      iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP,
  3316                                 bReset);
  3317      raw_printf(pArg->out, "Fullscan Steps:                      %d\n", iCur);
  3318      iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_SORT, bReset);
  3319      raw_printf(pArg->out, "Sort Operations:                     %d\n", iCur);
  3320      iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_AUTOINDEX,bReset);
  3321      raw_printf(pArg->out, "Autoindex Inserts:                   %d\n", iCur);
  3322      iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_VM_STEP, bReset);
  3323      raw_printf(pArg->out, "Virtual Machine Steps:               %d\n", iCur);
  3324    }
  3325  
  3326  #ifdef __linux__
  3327    displayLinuxIoStats(pArg->out);
  3328  #endif
  3329  
  3330    /* Do not remove this machine readable comment: extra-stats-output-here */
  3331  
  3332    return 0;
  3333  }
  3334  
  3335  /*
  3336  ** Display scan stats.
  3337  */
  3338  static void display_scanstats(
  3339    sqlite3 *db,                    /* Database to query */
  3340    ShellState *pArg                /* Pointer to ShellState */
  3341  ){
  3342  #ifndef SQLITE_ENABLE_STMT_SCANSTATUS
  3343    UNUSED_PARAMETER(db);
  3344    UNUSED_PARAMETER(pArg);
  3345  #else
  3346    int i, k, n, mx;
  3347    raw_printf(pArg->out, "-------- scanstats --------\n");
  3348    mx = 0;
  3349    for(k=0; k<=mx; k++){
  3350      double rEstLoop = 1.0;
  3351      for(i=n=0; 1; i++){
  3352        sqlite3_stmt *p = pArg->pStmt;
  3353        sqlite3_int64 nLoop, nVisit;
  3354        double rEst;
  3355        int iSid;
  3356        const char *zExplain;
  3357        if( sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NLOOP, (void*)&nLoop) ){
  3358          break;
  3359        }
  3360        sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_SELECTID, (void*)&iSid);
  3361        if( iSid>mx ) mx = iSid;
  3362        if( iSid!=k ) continue;
  3363        if( n==0 ){
  3364          rEstLoop = (double)nLoop;
  3365          if( k>0 ) raw_printf(pArg->out, "-------- subquery %d -------\n", k);
  3366        }
  3367        n++;
  3368        sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NVISIT, (void*)&nVisit);
  3369        sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EST, (void*)&rEst);
  3370        sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EXPLAIN, (void*)&zExplain);
  3371        utf8_printf(pArg->out, "Loop %2d: %s\n", n, zExplain);
  3372        rEstLoop *= rEst;
  3373        raw_printf(pArg->out,
  3374            "         nLoop=%-8lld nRow=%-8lld estRow=%-8lld estRow/Loop=%-8g\n",
  3375            nLoop, nVisit, (sqlite3_int64)(rEstLoop+0.5), rEst
  3376        );
  3377      }
  3378    }
  3379    raw_printf(pArg->out, "---------------------------\n");
  3380  #endif
  3381  }
  3382  
  3383  /*
  3384  ** Parameter azArray points to a zero-terminated array of strings. zStr
  3385  ** points to a single nul-terminated string. Return non-zero if zStr
  3386  ** is equal, according to strcmp(), to any of the strings in the array.
  3387  ** Otherwise, return zero.
  3388  */
  3389  static int str_in_array(const char *zStr, const char **azArray){
  3390    int i;
  3391    for(i=0; azArray[i]; i++){
  3392      if( 0==strcmp(zStr, azArray[i]) ) return 1;
  3393    }
  3394    return 0;
  3395  }
  3396  
  3397  /*
  3398  ** If compiled statement pSql appears to be an EXPLAIN statement, allocate
  3399  ** and populate the ShellState.aiIndent[] array with the number of
  3400  ** spaces each opcode should be indented before it is output.
  3401  **
  3402  ** The indenting rules are:
  3403  **
  3404  **     * For each "Next", "Prev", "VNext" or "VPrev" instruction, indent
  3405  **       all opcodes that occur between the p2 jump destination and the opcode
  3406  **       itself by 2 spaces.
  3407  **
  3408  **     * For each "Goto", if the jump destination is earlier in the program
  3409  **       and ends on one of:
  3410  **          Yield  SeekGt  SeekLt  RowSetRead  Rewind
  3411  **       or if the P1 parameter is one instead of zero,
  3412  **       then indent all opcodes between the earlier instruction
  3413  **       and "Goto" by 2 spaces.
  3414  */
  3415  static void explain_data_prepare(ShellState *p, sqlite3_stmt *pSql){
  3416    const char *zSql;               /* The text of the SQL statement */
  3417    const char *z;                  /* Used to check if this is an EXPLAIN */
  3418    int *abYield = 0;               /* True if op is an OP_Yield */
  3419    int nAlloc = 0;                 /* Allocated size of p->aiIndent[], abYield */
  3420    int iOp;                        /* Index of operation in p->aiIndent[] */
  3421  
  3422    const char *azNext[] = { "Next", "Prev", "VPrev", "VNext", "SorterNext",
  3423                             "NextIfOpen", "PrevIfOpen", 0 };
  3424    const char *azYield[] = { "Yield", "SeekLT", "SeekGT", "RowSetRead",
  3425                              "Rewind", 0 };
  3426    const char *azGoto[] = { "Goto", 0 };
  3427  
  3428    /* Try to figure out if this is really an EXPLAIN statement. If this
  3429    ** cannot be verified, return early.  */
  3430    if( sqlite3_column_count(pSql)!=8 ){
  3431      p->cMode = p->mode;
  3432      return;
  3433    }
  3434    zSql = sqlite3_sql(pSql);
  3435    if( zSql==0 ) return;
  3436    for(z=zSql; *z==' ' || *z=='\t' || *z=='\n' || *z=='\f' || *z=='\r'; z++);
  3437    if( sqlite3_strnicmp(z, "explain", 7) ){
  3438      p->cMode = p->mode;
  3439      return;
  3440    }
  3441  
  3442    for(iOp=0; SQLITE_ROW==sqlite3_step(pSql); iOp++){
  3443      int i;
  3444      int iAddr = sqlite3_column_int(pSql, 0);
  3445      const char *zOp = (const char*)sqlite3_column_text(pSql, 1);
  3446  
  3447      /* Set p2 to the P2 field of the current opcode. Then, assuming that
  3448      ** p2 is an instruction address, set variable p2op to the index of that
  3449      ** instruction in the aiIndent[] array. p2 and p2op may be different if
  3450      ** the current instruction is part of a sub-program generated by an
  3451      ** SQL trigger or foreign key.  */
  3452      int p2 = sqlite3_column_int(pSql, 3);
  3453      int p2op = (p2 + (iOp-iAddr));
  3454  
  3455      /* Grow the p->aiIndent array as required */
  3456      if( iOp>=nAlloc ){
  3457        if( iOp==0 ){
  3458          /* Do further verfication that this is explain output.  Abort if
  3459          ** it is not */
  3460          static const char *explainCols[] = {
  3461             "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment" };
  3462          int jj;
  3463          for(jj=0; jj<ArraySize(explainCols); jj++){
  3464            if( strcmp(sqlite3_column_name(pSql,jj),explainCols[jj])!=0 ){
  3465              p->cMode = p->mode;
  3466              sqlite3_reset(pSql);
  3467              return;
  3468            }
  3469          }
  3470        }
  3471        nAlloc += 100;
  3472        p->aiIndent = (int*)sqlite3_realloc64(p->aiIndent, nAlloc*sizeof(int));
  3473        abYield = (int*)sqlite3_realloc64(abYield, nAlloc*sizeof(int));
  3474      }
  3475      abYield[iOp] = str_in_array(zOp, azYield);
  3476      p->aiIndent[iOp] = 0;
  3477      p->nIndent = iOp+1;
  3478  
  3479      if( str_in_array(zOp, azNext) ){
  3480        for(i=p2op; i<iOp; i++) p->aiIndent[i] += 2;
  3481      }
  3482      if( str_in_array(zOp, azGoto) && p2op<p->nIndent
  3483       && (abYield[p2op] || sqlite3_column_int(pSql, 2))
  3484      ){
  3485        for(i=p2op; i<iOp; i++) p->aiIndent[i] += 2;
  3486      }
  3487    }
  3488  
  3489    p->iIndent = 0;
  3490    sqlite3_free(abYield);
  3491    sqlite3_reset(pSql);
  3492  }
  3493  
  3494  /*
  3495  ** Free the array allocated by explain_data_prepare().
  3496  */
  3497  static void explain_data_delete(ShellState *p){
  3498    sqlite3_free(p->aiIndent);
  3499    p->aiIndent = 0;
  3500    p->nIndent = 0;
  3501    p->iIndent = 0;
  3502  }
  3503  
  3504  /*
  3505  ** Disable and restore .wheretrace and .selecttrace settings.
  3506  */
  3507  #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_SELECTTRACE)
  3508  extern int sqlite3SelectTrace;
  3509  static int savedSelectTrace;
  3510  #endif
  3511  #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_WHERETRACE)
  3512  extern int sqlite3WhereTrace;
  3513  static int savedWhereTrace;
  3514  #endif
  3515  static void disable_debug_trace_modes(void){
  3516  #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_SELECTTRACE)
  3517    savedSelectTrace = sqlite3SelectTrace;
  3518    sqlite3SelectTrace = 0;
  3519  #endif
  3520  #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_WHERETRACE)
  3521    savedWhereTrace = sqlite3WhereTrace;
  3522    sqlite3WhereTrace = 0;
  3523  #endif
  3524  }
  3525  static void restore_debug_trace_modes(void){
  3526  #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_SELECTTRACE)
  3527    sqlite3SelectTrace = savedSelectTrace;
  3528  #endif
  3529  #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_WHERETRACE)
  3530    sqlite3WhereTrace = savedWhereTrace;
  3531  #endif
  3532  }
  3533  
  3534  /*
  3535  ** Run a prepared statement
  3536  */
  3537  static void exec_prepared_stmt(
  3538    ShellState *pArg,                                /* Pointer to ShellState */
  3539    sqlite3_stmt *pStmt,                             /* Statment to run */
  3540    int (*xCallback)(void*,int,char**,char**,int*)   /* Callback function */
  3541  ){
  3542    int rc;
  3543  
  3544    /* perform the first step.  this will tell us if we
  3545    ** have a result set or not and how wide it is.
  3546    */
  3547    rc = sqlite3_step(pStmt);
  3548    /* if we have a result set... */
  3549    if( SQLITE_ROW == rc ){
  3550      /* if we have a callback... */
  3551      if( xCallback ){
  3552        /* allocate space for col name ptr, value ptr, and type */
  3553        int nCol = sqlite3_column_count(pStmt);
  3554        void *pData = sqlite3_malloc64(3*nCol*sizeof(const char*) + 1);
  3555        if( !pData ){
  3556          rc = SQLITE_NOMEM;
  3557        }else{
  3558          char **azCols = (char **)pData;      /* Names of result columns */
  3559          char **azVals = &azCols[nCol];       /* Results */
  3560          int *aiTypes = (int *)&azVals[nCol]; /* Result types */
  3561          int i, x;
  3562          assert(sizeof(int) <= sizeof(char *));
  3563          /* save off ptrs to column names */
  3564          for(i=0; i<nCol; i++){
  3565            azCols[i] = (char *)sqlite3_column_name(pStmt, i);
  3566          }
  3567          do{
  3568            /* extract the data and data types */
  3569            for(i=0; i<nCol; i++){
  3570              aiTypes[i] = x = sqlite3_column_type(pStmt, i);
  3571              if( x==SQLITE_BLOB && pArg && pArg->cMode==MODE_Insert ){
  3572                azVals[i] = "";
  3573              }else{
  3574                azVals[i] = (char*)sqlite3_column_text(pStmt, i);
  3575              }
  3576              if( !azVals[i] && (aiTypes[i]!=SQLITE_NULL) ){
  3577                rc = SQLITE_NOMEM;
  3578                break; /* from for */
  3579              }
  3580            } /* end for */
  3581  
  3582            /* if data and types extracted successfully... */
  3583            if( SQLITE_ROW == rc ){
  3584              /* call the supplied callback with the result row data */
  3585              if( xCallback(pArg, nCol, azVals, azCols, aiTypes) ){
  3586                rc = SQLITE_ABORT;
  3587              }else{
  3588                rc = sqlite3_step(pStmt);
  3589              }
  3590            }
  3591          } while( SQLITE_ROW == rc );
  3592          sqlite3_free(pData);
  3593        }
  3594      }else{
  3595        do{
  3596          rc = sqlite3_step(pStmt);
  3597        } while( rc == SQLITE_ROW );
  3598      }
  3599    }
  3600  }
  3601  
  3602  /*
  3603  ** Execute a statement or set of statements.  Print
  3604  ** any result rows/columns depending on the current mode
  3605  ** set via the supplied callback.
  3606  **
  3607  ** This is very similar to SQLite's built-in sqlite3_exec()
  3608  ** function except it takes a slightly different callback
  3609  ** and callback data argument.
  3610  */
  3611  static int shell_exec(
  3612    sqlite3 *db,                              /* An open database */
  3613    const char *zSql,                         /* SQL to be evaluated */
  3614    int (*xCallback)(void*,int,char**,char**,int*),   /* Callback function */
  3615                                              /* (not the same as sqlite3_exec) */
  3616    ShellState *pArg,                         /* Pointer to ShellState */
  3617    char **pzErrMsg                           /* Error msg written here */
  3618  ){
  3619    sqlite3_stmt *pStmt = NULL;     /* Statement to execute. */
  3620    int rc = SQLITE_OK;             /* Return Code */
  3621    int rc2;
  3622    const char *zLeftover;          /* Tail of unprocessed SQL */
  3623  
  3624    if( pzErrMsg ){
  3625      *pzErrMsg = NULL;
  3626    }
  3627  
  3628    while( zSql[0] && (SQLITE_OK == rc) ){
  3629      static const char *zStmtSql;
  3630      rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zLeftover);
  3631      if( SQLITE_OK != rc ){
  3632        if( pzErrMsg ){
  3633          *pzErrMsg = save_err_msg(db);
  3634        }
  3635      }else{
  3636        if( !pStmt ){
  3637          /* this happens for a comment or white-space */
  3638          zSql = zLeftover;
  3639          while( IsSpace(zSql[0]) ) zSql++;
  3640          continue;
  3641        }
  3642        zStmtSql = sqlite3_sql(pStmt);
  3643        if( zStmtSql==0 ) zStmtSql = "";
  3644        while( IsSpace(zStmtSql[0]) ) zStmtSql++;
  3645  
  3646        /* save off the prepared statment handle and reset row count */
  3647        if( pArg ){
  3648          pArg->pStmt = pStmt;
  3649          pArg->cnt = 0;
  3650        }
  3651  
  3652        /* echo the sql statement if echo on */
  3653        if( pArg && ShellHasFlag(pArg, SHFLG_Echo) ){
  3654          utf8_printf(pArg->out, "%s\n", zStmtSql ? zStmtSql : zSql);
  3655        }
  3656  
  3657        /* Show the EXPLAIN QUERY PLAN if .eqp is on */
  3658        if( pArg && pArg->autoEQP && sqlite3_strlike("EXPLAIN%",zStmtSql,0)!=0 ){
  3659          sqlite3_stmt *pExplain;
  3660          char *zEQP;
  3661          disable_debug_trace_modes();
  3662          zEQP = sqlite3_mprintf("EXPLAIN QUERY PLAN %s", zStmtSql);
  3663          rc = sqlite3_prepare_v2(db, zEQP, -1, &pExplain, 0);
  3664          if( rc==SQLITE_OK ){
  3665            while( sqlite3_step(pExplain)==SQLITE_ROW ){
  3666              raw_printf(pArg->out,"--EQP-- %d,",sqlite3_column_int(pExplain, 0));
  3667              raw_printf(pArg->out,"%d,", sqlite3_column_int(pExplain, 1));
  3668              raw_printf(pArg->out,"%d,", sqlite3_column_int(pExplain, 2));
  3669              utf8_printf(pArg->out,"%s\n", sqlite3_column_text(pExplain, 3));
  3670            }
  3671          }
  3672          sqlite3_finalize(pExplain);
  3673          sqlite3_free(zEQP);
  3674          if( pArg->autoEQP>=2 ){
  3675            /* Also do an EXPLAIN for ".eqp full" mode */
  3676            zEQP = sqlite3_mprintf("EXPLAIN %s", zStmtSql);
  3677            rc = sqlite3_prepare_v2(db, zEQP, -1, &pExplain, 0);
  3678            if( rc==SQLITE_OK ){
  3679              pArg->cMode = MODE_Explain;
  3680              explain_data_prepare(pArg, pExplain);
  3681              exec_prepared_stmt(pArg, pExplain, xCallback);
  3682              explain_data_delete(pArg);
  3683            }
  3684            sqlite3_finalize(pExplain);
  3685            sqlite3_free(zEQP);
  3686          }
  3687          restore_debug_trace_modes();
  3688        }
  3689  
  3690        if( pArg ){
  3691          pArg->cMode = pArg->mode;
  3692          if( pArg->autoExplain
  3693           && sqlite3_column_count(pStmt)==8
  3694           && sqlite3_strlike("EXPLAIN%", zStmtSql,0)==0
  3695          ){
  3696            pArg->cMode = MODE_Explain;
  3697          }
  3698  
  3699          /* If the shell is currently in ".explain" mode, gather the extra
  3700          ** data required to add indents to the output.*/
  3701          if( pArg->cMode==MODE_Explain ){
  3702            explain_data_prepare(pArg, pStmt);
  3703          }
  3704        }
  3705  
  3706        exec_prepared_stmt(pArg, pStmt, xCallback);
  3707        explain_data_delete(pArg);
  3708  
  3709        /* print usage stats if stats on */
  3710        if( pArg && pArg->statsOn ){
  3711          display_stats(db, pArg, 0);
  3712        }
  3713  
  3714        /* print loop-counters if required */
  3715        if( pArg && pArg->scanstatsOn ){
  3716          display_scanstats(db, pArg);
  3717        }
  3718  
  3719        /* Finalize the statement just executed. If this fails, save a
  3720        ** copy of the error message. Otherwise, set zSql to point to the
  3721        ** next statement to execute. */
  3722        rc2 = sqlite3_finalize(pStmt);
  3723        if( rc!=SQLITE_NOMEM ) rc = rc2;
  3724        if( rc==SQLITE_OK ){
  3725          zSql = zLeftover;
  3726          while( IsSpace(zSql[0]) ) zSql++;
  3727        }else if( pzErrMsg ){
  3728          *pzErrMsg = save_err_msg(db);
  3729        }
  3730  
  3731        /* clear saved stmt handle */
  3732        if( pArg ){
  3733          pArg->pStmt = NULL;
  3734        }
  3735      }
  3736    } /* end while */
  3737  
  3738    return rc;
  3739  }
  3740  
  3741  /*
  3742  ** Release memory previously allocated by tableColumnList().
  3743  */
  3744  static void freeColumnList(char **azCol){
  3745    int i;
  3746    for(i=1; azCol[i]; i++){
  3747      sqlite3_free(azCol[i]);
  3748    }
  3749    /* azCol[0] is a static string */
  3750    sqlite3_free(azCol);
  3751  }
  3752  
  3753  /*
  3754  ** Return a list of pointers to strings which are the names of all
  3755  ** columns in table zTab.   The memory to hold the names is dynamically
  3756  ** allocated and must be released by the caller using a subsequent call
  3757  ** to freeColumnList().
  3758  **
  3759  ** The azCol[0] entry is usually NULL.  However, if zTab contains a rowid
  3760  ** value that needs to be preserved, then azCol[0] is filled in with the
  3761  ** name of the rowid column.
  3762  **
  3763  ** The first regular column in the table is azCol[1].  The list is terminated
  3764  ** by an entry with azCol[i]==0.
  3765  */
  3766  static char **tableColumnList(ShellState *p, const char *zTab){
  3767    char **azCol = 0;
  3768    sqlite3_stmt *pStmt;
  3769    char *zSql;
  3770    int nCol = 0;
  3771    int nAlloc = 0;
  3772    int nPK = 0;       /* Number of PRIMARY KEY columns seen */
  3773    int isIPK = 0;     /* True if one PRIMARY KEY column of type INTEGER */
  3774    int preserveRowid = ShellHasFlag(p, SHFLG_PreserveRowid);
  3775    int rc;
  3776  
  3777    zSql = sqlite3_mprintf("PRAGMA table_info=%Q", zTab);
  3778    rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
  3779    sqlite3_free(zSql);
  3780    if( rc ) return 0;
  3781    while( sqlite3_step(pStmt)==SQLITE_ROW ){
  3782      if( nCol>=nAlloc-2 ){
  3783        nAlloc = nAlloc*2 + nCol + 10;
  3784        azCol = sqlite3_realloc(azCol, nAlloc*sizeof(azCol[0]));
  3785        if( azCol==0 ){
  3786          raw_printf(stderr, "Error: out of memory\n");
  3787          exit(1);
  3788        }
  3789      }
  3790      azCol[++nCol] = sqlite3_mprintf("%s", sqlite3_column_text(pStmt, 1));
  3791      if( sqlite3_column_int(pStmt, 5) ){
  3792        nPK++;
  3793        if( nPK==1
  3794         && sqlite3_stricmp((const char*)sqlite3_column_text(pStmt,2),
  3795                            "INTEGER")==0
  3796        ){
  3797          isIPK = 1;
  3798        }else{
  3799          isIPK = 0;
  3800        }
  3801      }
  3802    }
  3803    sqlite3_finalize(pStmt);
  3804    if( azCol==0 ) return 0;
  3805    azCol[0] = 0;
  3806    azCol[nCol+1] = 0;
  3807  
  3808    /* The decision of whether or not a rowid really needs to be preserved
  3809    ** is tricky.  We never need to preserve a rowid for a WITHOUT ROWID table
  3810    ** or a table with an INTEGER PRIMARY KEY.  We are unable to preserve
  3811    ** rowids on tables where the rowid is inaccessible because there are other
  3812    ** columns in the table named "rowid", "_rowid_", and "oid".
  3813    */
  3814    if( preserveRowid && isIPK ){
  3815      /* If a single PRIMARY KEY column with type INTEGER was seen, then it
  3816      ** might be an alise for the ROWID.  But it might also be a WITHOUT ROWID
  3817      ** table or a INTEGER PRIMARY KEY DESC column, neither of which are
  3818      ** ROWID aliases.  To distinguish these cases, check to see if
  3819      ** there is a "pk" entry in "PRAGMA index_list".  There will be
  3820      ** no "pk" index if the PRIMARY KEY really is an alias for the ROWID.
  3821      */
  3822      zSql = sqlite3_mprintf("SELECT 1 FROM pragma_index_list(%Q)"
  3823                             " WHERE origin='pk'", zTab);
  3824      rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
  3825      sqlite3_free(zSql);
  3826      if( rc ){
  3827        freeColumnList(azCol);
  3828        return 0;
  3829      }
  3830      rc = sqlite3_step(pStmt);
  3831      sqlite3_finalize(pStmt);
  3832      preserveRowid = rc==SQLITE_ROW;
  3833    }
  3834    if( preserveRowid ){
  3835      /* Only preserve the rowid if we can find a name to use for the
  3836      ** rowid */
  3837      static char *azRowid[] = { "rowid", "_rowid_", "oid" };
  3838      int i, j;
  3839      for(j=0; j<3; j++){
  3840        for(i=1; i<=nCol; i++){
  3841          if( sqlite3_stricmp(azRowid[j],azCol[i])==0 ) break;
  3842        }
  3843        if( i>nCol ){
  3844          /* At this point, we know that azRowid[j] is not the name of any
  3845          ** ordinary column in the table.  Verify that azRowid[j] is a valid
  3846          ** name for the rowid before adding it to azCol[0].  WITHOUT ROWID
  3847          ** tables will fail this last check */
  3848          rc = sqlite3_table_column_metadata(p->db,0,zTab,azRowid[j],0,0,0,0,0);
  3849          if( rc==SQLITE_OK ) azCol[0] = azRowid[j];
  3850          break;
  3851        }
  3852      }
  3853    }
  3854    return azCol;
  3855  }
  3856  
  3857  /*
  3858  ** Toggle the reverse_unordered_selects setting.
  3859  */
  3860  static void toggleSelectOrder(sqlite3 *db){
  3861    sqlite3_stmt *pStmt = 0;
  3862    int iSetting = 0;
  3863    char zStmt[100];
  3864    sqlite3_prepare_v2(db, "PRAGMA reverse_unordered_selects", -1, &pStmt, 0);
  3865    if( sqlite3_step(pStmt)==SQLITE_ROW ){
  3866      iSetting = sqlite3_column_int(pStmt, 0);
  3867    }
  3868    sqlite3_finalize(pStmt);
  3869    sqlite3_snprintf(sizeof(zStmt), zStmt,
  3870         "PRAGMA reverse_unordered_selects(%d)", !iSetting);
  3871    sqlite3_exec(db, zStmt, 0, 0, 0);
  3872  }
  3873  
  3874  /*
  3875  ** This is a different callback routine used for dumping the database.
  3876  ** Each row received by this callback consists of a table name,
  3877  ** the table type ("index" or "table") and SQL to create the table.
  3878  ** This routine should print text sufficient to recreate the table.
  3879  */
  3880  static int dump_callback(void *pArg, int nArg, char **azArg, char **azNotUsed){
  3881    int rc;
  3882    const char *zTable;
  3883    const char *zType;
  3884    const char *zSql;
  3885    ShellState *p = (ShellState *)pArg;
  3886  
  3887    UNUSED_PARAMETER(azNotUsed);
  3888    if( nArg!=3 || azArg==0 ) return 0;
  3889    zTable = azArg[0];
  3890    zType = azArg[1];
  3891    zSql = azArg[2];
  3892  
  3893    if( strcmp(zTable, "sqlite_sequence")==0 ){
  3894      raw_printf(p->out, "DELETE FROM sqlite_sequence;\n");
  3895    }else if( sqlite3_strglob("sqlite_stat?", zTable)==0 ){
  3896      raw_printf(p->out, "ANALYZE sqlite_master;\n");
  3897    }else if( strncmp(zTable, "sqlite_", 7)==0 ){
  3898      return 0;
  3899    }else if( strncmp(zSql, "CREATE VIRTUAL TABLE", 20)==0 ){
  3900      char *zIns;
  3901      if( !p->writableSchema ){
  3902        raw_printf(p->out, "PRAGMA writable_schema=ON;\n");
  3903        p->writableSchema = 1;
  3904      }
  3905      zIns = sqlite3_mprintf(
  3906         "INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"
  3907         "VALUES('table','%q','%q',0,'%q');",
  3908         zTable, zTable, zSql);
  3909      utf8_printf(p->out, "%s\n", zIns);
  3910      sqlite3_free(zIns);
  3911      return 0;
  3912    }else{
  3913      printSchemaLine(p->out, zSql, ";\n");
  3914    }
  3915  
  3916    if( strcmp(zType, "table")==0 ){
  3917      ShellText sSelect;
  3918      ShellText sTable;
  3919      char **azCol;
  3920      int i;
  3921      char *savedDestTable;
  3922      int savedMode;
  3923  
  3924      azCol = tableColumnList(p, zTable);
  3925      if( azCol==0 ){
  3926        p->nErr++;
  3927        return 0;
  3928      }
  3929  
  3930      /* Always quote the table name, even if it appears to be pure ascii,
  3931      ** in case it is a keyword. Ex:  INSERT INTO "table" ... */
  3932      initText(&sTable);
  3933      appendText(&sTable, zTable, quoteChar(zTable));
  3934      /* If preserving the rowid, add a column list after the table name.
  3935      ** In other words:  "INSERT INTO tab(rowid,a,b,c,...) VALUES(...)"
  3936      ** instead of the usual "INSERT INTO tab VALUES(...)".
  3937      */
  3938      if( azCol[0] ){
  3939        appendText(&sTable, "(", 0);
  3940        appendText(&sTable, azCol[0], 0);
  3941        for(i=1; azCol[i]; i++){
  3942          appendText(&sTable, ",", 0);
  3943          appendText(&sTable, azCol[i], quoteChar(azCol[i]));
  3944        }
  3945        appendText(&sTable, ")", 0);
  3946      }
  3947  
  3948      /* Build an appropriate SELECT statement */
  3949      initText(&sSelect);
  3950      appendText(&sSelect, "SELECT ", 0);
  3951      if( azCol[0] ){
  3952        appendText(&sSelect, azCol[0], 0);
  3953        appendText(&sSelect, ",", 0);
  3954      }
  3955      for(i=1; azCol[i]; i++){
  3956        appendText(&sSelect, azCol[i], quoteChar(azCol[i]));
  3957        if( azCol[i+1] ){
  3958          appendText(&sSelect, ",", 0);
  3959        }
  3960      }
  3961      freeColumnList(azCol);
  3962      appendText(&sSelect, " FROM ", 0);
  3963      appendText(&sSelect, zTable, quoteChar(zTable));
  3964  
  3965      savedDestTable = p->zDestTable;
  3966      savedMode = p->mode;
  3967      p->zDestTable = sTable.z;
  3968      p->mode = p->cMode = MODE_Insert;
  3969      rc = shell_exec(p->db, sSelect.z, shell_callback, p, 0);
  3970      if( (rc&0xff)==SQLITE_CORRUPT ){
  3971        raw_printf(p->out, "/****** CORRUPTION ERROR *******/\n");
  3972        toggleSelectOrder(p->db);
  3973        shell_exec(p->db, sSelect.z, shell_callback, p, 0);
  3974        toggleSelectOrder(p->db);
  3975      }
  3976      p->zDestTable = savedDestTable;
  3977      p->mode = savedMode;
  3978      freeText(&sTable);
  3979      freeText(&sSelect);
  3980      if( rc ) p->nErr++;
  3981    }
  3982    return 0;
  3983  }
  3984  
  3985  /*
  3986  ** Run zQuery.  Use dump_callback() as the callback routine so that
  3987  ** the contents of the query are output as SQL statements.
  3988  **
  3989  ** If we get a SQLITE_CORRUPT error, rerun the query after appending
  3990  ** "ORDER BY rowid DESC" to the end.
  3991  */
  3992  static int run_schema_dump_query(
  3993    ShellState *p,
  3994    const char *zQuery
  3995  ){
  3996    int rc;
  3997    char *zErr = 0;
  3998    rc = sqlite3_exec(p->db, zQuery, dump_callback, p, &zErr);
  3999    if( rc==SQLITE_CORRUPT ){
  4000      char *zQ2;
  4001      int len = strlen30(zQuery);
  4002      raw_printf(p->out, "/****** CORRUPTION ERROR *******/\n");
  4003      if( zErr ){
  4004        utf8_printf(p->out, "/****** %s ******/\n", zErr);
  4005        sqlite3_free(zErr);
  4006        zErr = 0;
  4007      }
  4008      zQ2 = malloc( len+100 );
  4009      if( zQ2==0 ) return rc;
  4010      sqlite3_snprintf(len+100, zQ2, "%s ORDER BY rowid DESC", zQuery);
  4011      rc = sqlite3_exec(p->db, zQ2, dump_callback, p, &zErr);
  4012      if( rc ){
  4013        utf8_printf(p->out, "/****** ERROR: %s ******/\n", zErr);
  4014      }else{
  4015        rc = SQLITE_CORRUPT;
  4016      }
  4017      sqlite3_free(zErr);
  4018      free(zQ2);
  4019    }
  4020    return rc;
  4021  }
  4022  
  4023  /*
  4024  ** Text of a help message
  4025  */
  4026  static char zHelp[] =
  4027  #ifndef SQLITE_OMIT_AUTHORIZATION
  4028    ".auth ON|OFF           Show authorizer callbacks\n"
  4029  #endif
  4030    ".backup ?DB? FILE      Backup DB (default \"main\") to FILE\n"
  4031    ".bail on|off           Stop after hitting an error.  Default OFF\n"
  4032    ".binary on|off         Turn binary output on or off.  Default OFF\n"
  4033    ".cd DIRECTORY          Change the working directory to DIRECTORY\n"
  4034    ".changes on|off        Show number of rows changed by SQL\n"
  4035    ".check GLOB            Fail if output since .testcase does not match\n"
  4036    ".clone NEWDB           Clone data into NEWDB from the existing database\n"
  4037    ".databases             List names and files of attached databases\n"
  4038    ".dbinfo ?DB?           Show status information about the database\n"
  4039    ".dump ?TABLE? ...      Dump the database in an SQL text format\n"
  4040    "                         If TABLE specified, only dump tables matching\n"
  4041    "                         LIKE pattern TABLE.\n"
  4042    ".echo on|off           Turn command echo on or off\n"
  4043    ".eqp on|off|full       Enable or disable automatic EXPLAIN QUERY PLAN\n"
  4044    ".exit                  Exit this program\n"
  4045  /* Because explain mode comes on automatically now, the ".explain" mode
  4046  ** is removed from the help screen.  It is still supported for legacy, however */
  4047  /*".explain ?on|off|auto? Turn EXPLAIN output mode on or off or to automatic\n"*/
  4048    ".fullschema ?--indent? Show schema and the content of sqlite_stat tables\n"
  4049    ".headers on|off        Turn display of headers on or off\n"
  4050    ".help                  Show this message\n"
  4051    ".import FILE TABLE     Import data from FILE into TABLE\n"
  4052  #ifndef SQLITE_OMIT_TEST_CONTROL
  4053    ".imposter INDEX TABLE  Create imposter table TABLE on index INDEX\n"
  4054  #endif
  4055    ".indexes ?TABLE?       Show names of all indexes\n"
  4056    "                         If TABLE specified, only show indexes for tables\n"
  4057    "                         matching LIKE pattern TABLE.\n"
  4058  #ifdef SQLITE_ENABLE_IOTRACE
  4059    ".iotrace FILE          Enable I/O diagnostic logging to FILE\n"
  4060  #endif
  4061    ".limit ?LIMIT? ?VAL?   Display or change the value of an SQLITE_LIMIT\n"
  4062    ".lint OPTIONS          Report potential schema issues. Options:\n"
  4063    "                         fkey-indexes     Find missing foreign key indexes\n"
  4064  #ifndef SQLITE_OMIT_LOAD_EXTENSION
  4065    ".load FILE ?ENTRY?     Load an extension library\n"
  4066  #endif
  4067    ".log FILE|off          Turn logging on or off.  FILE can be stderr/stdout\n"
  4068    ".mode MODE ?TABLE?     Set output mode where MODE is one of:\n"
  4069    "                         ascii    Columns/rows delimited by 0x1F and 0x1E\n"
  4070    "                         csv      Comma-separated values\n"
  4071    "                         column   Left-aligned columns.  (See .width)\n"
  4072    "                         html     HTML <table> code\n"
  4073    "                         insert   SQL insert statements for TABLE\n"
  4074    "                         line     One value per line\n"
  4075    "                         list     Values delimited by \"|\"\n"
  4076    "                         quote    Escape answers as for SQL\n"
  4077    "                         tabs     Tab-separated values\n"
  4078    "                         tcl      TCL list elements\n"
  4079    ".nullvalue STRING      Use STRING in place of NULL values\n"
  4080    ".once FILENAME         Output for the next SQL command only to FILENAME\n"
  4081    ".open ?OPTIONS? ?FILE? Close existing database and reopen FILE\n"
  4082    "                         The --new option starts with an empty file\n"
  4083    ".output ?FILENAME?     Send output to FILENAME or stdout\n"
  4084    ".print STRING...       Print literal STRING\n"
  4085    ".prompt MAIN CONTINUE  Replace the standard prompts\n"
  4086    ".quit                  Exit this program\n"
  4087    ".read FILENAME         Execute SQL in FILENAME\n"
  4088    ".restore ?DB? FILE     Restore content of DB (default \"main\") from FILE\n"
  4089    ".save FILE             Write in-memory database into FILE\n"
  4090    ".scanstats on|off      Turn sqlite3_stmt_scanstatus() metrics on or off\n"
  4091    ".schema ?PATTERN?      Show the CREATE statements matching PATTERN\n"
  4092    "                          Add --indent for pretty-printing\n"
  4093    ".selftest ?--init?     Run tests defined in the SELFTEST table\n"
  4094    ".separator COL ?ROW?   Change the column separator and optionally the row\n"
  4095    "                         separator for both the output mode and .import\n"
  4096  #if defined(SQLITE_ENABLE_SESSION)
  4097    ".session CMD ...       Create or control sessions\n"
  4098  #endif
  4099    ".sha3sum ?OPTIONS...?  Compute a SHA3 hash of database content\n"
  4100    ".shell CMD ARGS...     Run CMD ARGS... in a system shell\n"
  4101    ".show                  Show the current values for various settings\n"
  4102    ".stats ?on|off?        Show stats or turn stats on or off\n"
  4103    ".system CMD ARGS...    Run CMD ARGS... in a system shell\n"
  4104    ".tables ?TABLE?        List names of tables\n"
  4105    "                         If TABLE specified, only list tables matching\n"
  4106    "                         LIKE pattern TABLE.\n"
  4107    ".testcase NAME         Begin redirecting output to 'testcase-out.txt'\n"
  4108    ".timeout MS            Try opening locked tables for MS milliseconds\n"
  4109    ".timer on|off          Turn SQL timer on or off\n"
  4110    ".trace FILE|off        Output each SQL statement as it is run\n"
  4111    ".vfsinfo ?AUX?         Information about the top-level VFS\n"
  4112    ".vfslist               List all available VFSes\n"
  4113    ".vfsname ?AUX?         Print the name of the VFS stack\n"
  4114    ".width NUM1 NUM2 ...   Set column widths for \"column\" mode\n"
  4115    "                         Negative values right-justify\n"
  4116  ;
  4117  
  4118  #if defined(SQLITE_ENABLE_SESSION)
  4119  /*
  4120  ** Print help information for the ".sessions" command
  4121  */
  4122  void session_help(ShellState *p){
  4123    raw_printf(p->out,
  4124      ".session ?NAME? SUBCOMMAND ?ARGS...?\n"
  4125      "If ?NAME? is omitted, the first defined session is used.\n"
  4126      "Subcommands:\n"
  4127      "   attach TABLE             Attach TABLE\n"
  4128      "   changeset FILE           Write a changeset into FILE\n"
  4129      "   close                    Close one session\n"
  4130      "   enable ?BOOLEAN?         Set or query the enable bit\n"
  4131      "   filter GLOB...           Reject tables matching GLOBs\n"
  4132      "   indirect ?BOOLEAN?       Mark or query the indirect status\n"
  4133      "   isempty                  Query whether the session is empty\n"
  4134      "   list                     List currently open session names\n"
  4135      "   open DB NAME             Open a new session on DB\n"
  4136      "   patchset FILE            Write a patchset into FILE\n"
  4137    );
  4138  }
  4139  #endif
  4140  
  4141  
  4142  /* Forward reference */
  4143  static int process_input(ShellState *p, FILE *in);
  4144  
  4145  /*
  4146  ** Read the content of file zName into memory obtained from sqlite3_malloc64()
  4147  ** and return a pointer to the buffer. The caller is responsible for freeing
  4148  ** the memory.
  4149  **
  4150  ** If parameter pnByte is not NULL, (*pnByte) is set to the number of bytes
  4151  ** read.
  4152  **
  4153  ** For convenience, a nul-terminator byte is always appended to the data read
  4154  ** from the file before the buffer is returned. This byte is not included in
  4155  ** the final value of (*pnByte), if applicable.
  4156  **
  4157  ** NULL is returned if any error is encountered. The final value of *pnByte
  4158  ** is undefined in this case.
  4159  */
  4160  static char *readFile(const char *zName, int *pnByte){
  4161    FILE *in = fopen(zName, "rb");
  4162    long nIn;
  4163    size_t nRead;
  4164    char *pBuf;
  4165    if( in==0 ) return 0;
  4166    fseek(in, 0, SEEK_END);
  4167    nIn = ftell(in);
  4168    rewind(in);
  4169    pBuf = sqlite3_malloc64( nIn+1 );
  4170    if( pBuf==0 ) return 0;
  4171    nRead = fread(pBuf, nIn, 1, in);
  4172    fclose(in);
  4173    if( nRead!=1 ){
  4174      sqlite3_free(pBuf);
  4175      return 0;
  4176    }
  4177    pBuf[nIn] = 0;
  4178    if( pnByte ) *pnByte = nIn;
  4179    return pBuf;
  4180  }
  4181  
  4182  #if defined(SQLITE_ENABLE_SESSION)
  4183  /*
  4184  ** Close a single OpenSession object and release all of its associated
  4185  ** resources.
  4186  */
  4187  static void session_close(OpenSession *pSession){
  4188    int i;
  4189    sqlite3session_delete(pSession->p);
  4190    sqlite3_free(pSession->zName);
  4191    for(i=0; i<pSession->nFilter; i++){
  4192      sqlite3_free(pSession->azFilter[i]);
  4193    }
  4194    sqlite3_free(pSession->azFilter);
  4195    memset(pSession, 0, sizeof(OpenSession));
  4196  }
  4197  #endif
  4198  
  4199  /*
  4200  ** Close all OpenSession objects and release all associated resources.
  4201  */
  4202  #if defined(SQLITE_ENABLE_SESSION)
  4203  static void session_close_all(ShellState *p){
  4204    int i;
  4205    for(i=0; i<p->nSession; i++){
  4206      session_close(&p->aSession[i]);
  4207    }
  4208    p->nSession = 0;
  4209  }
  4210  #else
  4211  # define session_close_all(X)
  4212  #endif
  4213  
  4214  /*
  4215  ** Implementation of the xFilter function for an open session.  Omit
  4216  ** any tables named by ".session filter" but let all other table through.
  4217  */
  4218  #if defined(SQLITE_ENABLE_SESSION)
  4219  static int session_filter(void *pCtx, const char *zTab){
  4220    OpenSession *pSession = (OpenSession*)pCtx;
  4221    int i;
  4222    for(i=0; i<pSession->nFilter; i++){
  4223      if( sqlite3_strglob(pSession->azFilter[i], zTab)==0 ) return 0;
  4224    }
  4225    return 1;
  4226  }
  4227  #endif
  4228  
  4229  /*
  4230  ** Make sure the database is open.  If it is not, then open it.  If
  4231  ** the database fails to open, print an error message and exit.
  4232  */
  4233  static void open_db(ShellState *p, int keepAlive){
  4234    if( p->db==0 ){
  4235      sqlite3_initialize();
  4236      sqlite3_open(p->zDbFilename, &p->db);
  4237      globalDb = p->db;
  4238      if( p->db==0 || SQLITE_OK!=sqlite3_errcode(p->db) ){
  4239        utf8_printf(stderr,"Error: unable to open database \"%s\": %s\n",
  4240            p->zDbFilename, sqlite3_errmsg(p->db));
  4241        if( keepAlive ) return;
  4242        exit(1);
  4243      }
  4244  #ifndef SQLITE_OMIT_LOAD_EXTENSION
  4245      sqlite3_enable_load_extension(p->db, 1);
  4246  #endif
  4247      sqlite3_fileio_init(p->db, 0, 0);
  4248      sqlite3_shathree_init(p->db, 0, 0);
  4249      sqlite3_completion_init(p->db, 0, 0);
  4250      sqlite3_create_function(p->db, "shell_add_schema", 2, SQLITE_UTF8, 0,
  4251                              shellAddSchemaName, 0, 0);
  4252    }
  4253  }
  4254  
  4255  #if HAVE_READLINE || HAVE_EDITLINE
  4256  /*
  4257  ** Readline completion callbacks
  4258  */
  4259  static char *readline_completion_generator(const char *text, int state){
  4260    static sqlite3_stmt *pStmt = 0;
  4261    char *zRet;
  4262    if( state==0 ){
  4263      char *zSql;
  4264      sqlite3_finalize(pStmt);
  4265      zSql = sqlite3_mprintf("SELECT DISTINCT candidate COLLATE nocase"
  4266                             "  FROM completion(%Q) ORDER BY 1", text);
  4267      sqlite3_prepare_v2(globalDb, zSql, -1, &pStmt, 0);
  4268      sqlite3_free(zSql);
  4269    }
  4270    if( sqlite3_step(pStmt)==SQLITE_ROW ){
  4271      zRet = strdup((const char*)sqlite3_column_text(pStmt, 0));
  4272    }else{
  4273      sqlite3_finalize(pStmt);
  4274      pStmt = 0;
  4275      zRet = 0;
  4276    }
  4277    return zRet;
  4278  }
  4279  static char **readline_completion(const char *zText, int iStart, int iEnd){
  4280    rl_attempted_completion_over = 1;
  4281    return rl_completion_matches(zText, readline_completion_generator);
  4282  }
  4283  
  4284  #elif HAVE_LINENOISE
  4285  /*
  4286  ** Linenoise completion callback
  4287  */
  4288  static void linenoise_completion(const char *zLine, linenoiseCompletions *lc){
  4289    int nLine = (int)strlen(zLine);
  4290    int i, iStart;
  4291    sqlite3_stmt *pStmt = 0;
  4292    char *zSql;
  4293    char zBuf[1000];
  4294  
  4295    if( nLine>sizeof(zBuf)-30 ) return;
  4296    if( zLine[0]=='.' ) return;
  4297    for(i=nLine-1; i>=0 && (isalnum(zLine[i]) || zLine[i]=='_'); i--){}
  4298    if( i==nLine-1 ) return;
  4299    iStart = i+1;
  4300    memcpy(zBuf, zLine, iStart);
  4301    zSql = sqlite3_mprintf("SELECT DISTINCT candidate COLLATE nocase"
  4302                           "  FROM completion(%Q,%Q) ORDER BY 1",
  4303                           &zLine[iStart], zLine);
  4304    sqlite3_prepare_v2(globalDb, zSql, -1, &pStmt, 0);
  4305    sqlite3_free(zSql);
  4306    sqlite3_exec(globalDb, "PRAGMA page_count", 0, 0, 0); /* Load the schema */
  4307    while( sqlite3_step(pStmt)==SQLITE_ROW ){
  4308      const char *zCompletion = (const char*)sqlite3_column_text(pStmt, 0);
  4309      int nCompletion = sqlite3_column_bytes(pStmt, 0);
  4310      if( iStart+nCompletion < sizeof(zBuf)-1 ){
  4311        memcpy(zBuf+iStart, zCompletion, nCompletion+1);
  4312        linenoiseAddCompletion(lc, zBuf);
  4313      }
  4314    }
  4315    sqlite3_finalize(pStmt);
  4316  }
  4317  #endif
  4318  
  4319  /*
  4320  ** Do C-language style dequoting.
  4321  **
  4322  **    \a    -> alarm
  4323  **    \b    -> backspace
  4324  **    \t    -> tab
  4325  **    \n    -> newline
  4326  **    \v    -> vertical tab
  4327  **    \f    -> form feed
  4328  **    \r    -> carriage return
  4329  **    \s    -> space
  4330  **    \"    -> "
  4331  **    \'    -> '
  4332  **    \\    -> backslash
  4333  **    \NNN  -> ascii character NNN in octal
  4334  */
  4335  static void resolve_backslashes(char *z){
  4336    int i, j;
  4337    char c;
  4338    while( *z && *z!='\\' ) z++;
  4339    for(i=j=0; (c = z[i])!=0; i++, j++){
  4340      if( c=='\\' && z[i+1]!=0 ){
  4341        c = z[++i];
  4342        if( c=='a' ){
  4343          c = '\a';
  4344        }else if( c=='b' ){
  4345          c = '\b';
  4346        }else if( c=='t' ){
  4347          c = '\t';
  4348        }else if( c=='n' ){
  4349          c = '\n';
  4350        }else if( c=='v' ){
  4351          c = '\v';
  4352        }else if( c=='f' ){
  4353          c = '\f';
  4354        }else if( c=='r' ){
  4355          c = '\r';
  4356        }else if( c=='"' ){
  4357          c = '"';
  4358        }else if( c=='\'' ){
  4359          c = '\'';
  4360        }else if( c=='\\' ){
  4361          c = '\\';
  4362        }else if( c>='0' && c<='7' ){
  4363          c -= '0';
  4364          if( z[i+1]>='0' && z[i+1]<='7' ){
  4365            i++;
  4366            c = (c<<3) + z[i] - '0';
  4367            if( z[i+1]>='0' && z[i+1]<='7' ){
  4368              i++;
  4369              c = (c<<3) + z[i] - '0';
  4370            }
  4371          }
  4372        }
  4373      }
  4374      z[j] = c;
  4375    }
  4376    if( j<i ) z[j] = 0;
  4377  }
  4378  
  4379  /*
  4380  ** Return the value of a hexadecimal digit.  Return -1 if the input
  4381  ** is not a hex digit.
  4382  */
  4383  static int hexDigitValue(char c){
  4384    if( c>='0' && c<='9' ) return c - '0';
  4385    if( c>='a' && c<='f' ) return c - 'a' + 10;
  4386    if( c>='A' && c<='F' ) return c - 'A' + 10;
  4387    return -1;
  4388  }
  4389  
  4390  /*
  4391  ** Interpret zArg as an integer value, possibly with suffixes.
  4392  */
  4393  static sqlite3_int64 integerValue(const char *zArg){
  4394    sqlite3_int64 v = 0;
  4395    static const struct { char *zSuffix; int iMult; } aMult[] = {
  4396      { "KiB", 1024 },
  4397      { "MiB", 1024*1024 },
  4398      { "GiB", 1024*1024*1024 },
  4399      { "KB",  1000 },
  4400      { "MB",  1000000 },
  4401      { "GB",  1000000000 },
  4402      { "K",   1000 },
  4403      { "M",   1000000 },
  4404      { "G",   1000000000 },
  4405    };
  4406    int i;
  4407    int isNeg = 0;
  4408    if( zArg[0]=='-' ){
  4409      isNeg = 1;
  4410      zArg++;
  4411    }else if( zArg[0]=='+' ){
  4412      zArg++;
  4413    }
  4414    if( zArg[0]=='0' && zArg[1]=='x' ){
  4415      int x;
  4416      zArg += 2;
  4417      while( (x = hexDigitValue(zArg[0]))>=0 ){
  4418        v = (v<<4) + x;
  4419        zArg++;
  4420      }
  4421    }else{
  4422      while( IsDigit(zArg[0]) ){
  4423        v = v*10 + zArg[0] - '0';
  4424        zArg++;
  4425      }
  4426    }
  4427    for(i=0; i<ArraySize(aMult); i++){
  4428      if( sqlite3_stricmp(aMult[i].zSuffix, zArg)==0 ){
  4429        v *= aMult[i].iMult;
  4430        break;
  4431      }
  4432    }
  4433    return isNeg? -v : v;
  4434  }
  4435  
  4436  /*
  4437  ** Interpret zArg as either an integer or a boolean value.  Return 1 or 0
  4438  ** for TRUE and FALSE.  Return the integer value if appropriate.
  4439  */
  4440  static int booleanValue(const char *zArg){
  4441    int i;
  4442    if( zArg[0]=='0' && zArg[1]=='x' ){
  4443      for(i=2; hexDigitValue(zArg[i])>=0; i++){}
  4444    }else{
  4445      for(i=0; zArg[i]>='0' && zArg[i]<='9'; i++){}
  4446    }
  4447    if( i>0 && zArg[i]==0 ) return (int)(integerValue(zArg) & 0xffffffff);
  4448    if( sqlite3_stricmp(zArg, "on")==0 || sqlite3_stricmp(zArg,"yes")==0 ){
  4449      return 1;
  4450    }
  4451    if( sqlite3_stricmp(zArg, "off")==0 || sqlite3_stricmp(zArg,"no")==0 ){
  4452      return 0;
  4453    }
  4454    utf8_printf(stderr, "ERROR: Not a boolean value: \"%s\". Assuming \"no\".\n",
  4455            zArg);
  4456    return 0;
  4457  }
  4458  
  4459  /*
  4460  ** Set or clear a shell flag according to a boolean value.
  4461  */
  4462  static void setOrClearFlag(ShellState *p, unsigned mFlag, const char *zArg){
  4463    if( booleanValue(zArg) ){
  4464      ShellSetFlag(p, mFlag);
  4465    }else{
  4466      ShellClearFlag(p, mFlag);
  4467    }
  4468  }
  4469  
  4470  /*
  4471  ** Close an output file, assuming it is not stderr or stdout
  4472  */
  4473  static void output_file_close(FILE *f){
  4474    if( f && f!=stdout && f!=stderr ) fclose(f);
  4475  }
  4476  
  4477  /*
  4478  ** Try to open an output file.   The names "stdout" and "stderr" are
  4479  ** recognized and do the right thing.  NULL is returned if the output
  4480  ** filename is "off".
  4481  */
  4482  static FILE *output_file_open(const char *zFile){
  4483    FILE *f;
  4484    if( strcmp(zFile,"stdout")==0 ){
  4485      f = stdout;
  4486    }else if( strcmp(zFile, "stderr")==0 ){
  4487      f = stderr;
  4488    }else if( strcmp(zFile, "off")==0 ){
  4489      f = 0;
  4490    }else{
  4491      f = fopen(zFile, "wb");
  4492      if( f==0 ){
  4493        utf8_printf(stderr, "Error: cannot open \"%s\"\n", zFile);
  4494      }
  4495    }
  4496    return f;
  4497  }
  4498  
  4499  #if !defined(SQLITE_UNTESTABLE)
  4500  #if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT)
  4501  /*
  4502  ** A routine for handling output from sqlite3_trace().
  4503  */
  4504  static int sql_trace_callback(
  4505    unsigned mType,
  4506    void *pArg,
  4507    void *pP,
  4508    void *pX
  4509  ){
  4510    FILE *f = (FILE*)pArg;
  4511    UNUSED_PARAMETER(mType);
  4512    UNUSED_PARAMETER(pP);
  4513    if( f ){
  4514      const char *z = (const char*)pX;
  4515      int i = (int)strlen(z);
  4516      while( i>0 && z[i-1]==';' ){ i--; }
  4517      utf8_printf(f, "%.*s;\n", i, z);
  4518    }
  4519    return 0;
  4520  }
  4521  #endif
  4522  #endif
  4523  
  4524  /*
  4525  ** A no-op routine that runs with the ".breakpoint" doc-command.  This is
  4526  ** a useful spot to set a debugger breakpoint.
  4527  */
  4528  static void test_breakpoint(void){
  4529    static int nCall = 0;
  4530    nCall++;
  4531  }
  4532  
  4533  /*
  4534  ** An object used to read a CSV and other files for import.
  4535  */
  4536  typedef struct ImportCtx ImportCtx;
  4537  struct ImportCtx {
  4538    const char *zFile;  /* Name of the input file */
  4539    FILE *in;           /* Read the CSV text from this input stream */
  4540    char *z;            /* Accumulated text for a field */
  4541    int n;              /* Number of bytes in z */
  4542    int nAlloc;         /* Space allocated for z[] */
  4543    int nLine;          /* Current line number */
  4544    int bNotFirst;      /* True if one or more bytes already read */
  4545    int cTerm;          /* Character that terminated the most recent field */
  4546    int cColSep;        /* The column separator character.  (Usually ",") */
  4547    int cRowSep;        /* The row separator character.  (Usually "\n") */
  4548  };
  4549  
  4550  /* Append a single byte to z[] */
  4551  static void import_append_char(ImportCtx *p, int c){
  4552    if( p->n+1>=p->nAlloc ){
  4553      p->nAlloc += p->nAlloc + 100;
  4554      p->z = sqlite3_realloc64(p->z, p->nAlloc);
  4555      if( p->z==0 ){
  4556        raw_printf(stderr, "out of memory\n");
  4557        exit(1);
  4558      }
  4559    }
  4560    p->z[p->n++] = (char)c;
  4561  }
  4562  
  4563  /* Read a single field of CSV text.  Compatible with rfc4180 and extended
  4564  ** with the option of having a separator other than ",".
  4565  **
  4566  **   +  Input comes from p->in.
  4567  **   +  Store results in p->z of length p->n.  Space to hold p->z comes
  4568  **      from sqlite3_malloc64().
  4569  **   +  Use p->cSep as the column separator.  The default is ",".
  4570  **   +  Use p->rSep as the row separator.  The default is "\n".
  4571  **   +  Keep track of the line number in p->nLine.
  4572  **   +  Store the character that terminates the field in p->cTerm.  Store
  4573  **      EOF on end-of-file.
  4574  **   +  Report syntax errors on stderr
  4575  */
  4576  static char *SQLITE_CDECL csv_read_one_field(ImportCtx *p){
  4577    int c;
  4578    int cSep = p->cColSep;
  4579    int rSep = p->cRowSep;
  4580    p->n = 0;
  4581    c = fgetc(p->in);
  4582    if( c==EOF || seenInterrupt ){
  4583      p->cTerm = EOF;
  4584      return 0;
  4585    }
  4586    if( c=='"' ){
  4587      int pc, ppc;
  4588      int startLine = p->nLine;
  4589      int cQuote = c;
  4590      pc = ppc = 0;
  4591      while( 1 ){
  4592        c = fgetc(p->in);
  4593        if( c==rSep ) p->nLine++;
  4594        if( c==cQuote ){
  4595          if( pc==cQuote ){
  4596            pc = 0;
  4597            continue;
  4598          }
  4599        }
  4600        if( (c==cSep && pc==cQuote)
  4601         || (c==rSep && pc==cQuote)
  4602         || (c==rSep && pc=='\r' && ppc==cQuote)
  4603         || (c==EOF && pc==cQuote)
  4604        ){
  4605          do{ p->n--; }while( p->z[p->n]!=cQuote );
  4606          p->cTerm = c;
  4607          break;
  4608        }
  4609        if( pc==cQuote && c!='\r' ){
  4610          utf8_printf(stderr, "%s:%d: unescaped %c character\n",
  4611                  p->zFile, p->nLine, cQuote);
  4612        }
  4613        if( c==EOF ){
  4614          utf8_printf(stderr, "%s:%d: unterminated %c-quoted field\n",
  4615                  p->zFile, startLine, cQuote);
  4616          p->cTerm = c;
  4617          break;
  4618        }
  4619        import_append_char(p, c);
  4620        ppc = pc;
  4621        pc = c;
  4622      }
  4623    }else{
  4624      /* If this is the first field being parsed and it begins with the
  4625      ** UTF-8 BOM  (0xEF BB BF) then skip the BOM */
  4626      if( (c&0xff)==0xef && p->bNotFirst==0 ){
  4627        import_append_char(p, c);
  4628        c = fgetc(p->in);
  4629        if( (c&0xff)==0xbb ){
  4630          import_append_char(p, c);
  4631          c = fgetc(p->in);
  4632          if( (c&0xff)==0xbf ){
  4633            p->bNotFirst = 1;
  4634            p->n = 0;
  4635            return csv_read_one_field(p);
  4636          }
  4637        }
  4638      }
  4639      while( c!=EOF && c!=cSep && c!=rSep ){
  4640        import_append_char(p, c);
  4641        c = fgetc(p->in);
  4642      }
  4643      if( c==rSep ){
  4644        p->nLine++;
  4645        if( p->n>0 && p->z[p->n-1]=='\r' ) p->n--;
  4646      }
  4647      p->cTerm = c;
  4648    }
  4649    if( p->z ) p->z[p->n] = 0;
  4650    p->bNotFirst = 1;
  4651    return p->z;
  4652  }
  4653  
  4654  /* Read a single field of ASCII delimited text.
  4655  **
  4656  **   +  Input comes from p->in.
  4657  **   +  Store results in p->z of length p->n.  Space to hold p->z comes
  4658  **      from sqlite3_malloc64().
  4659  **   +  Use p->cSep as the column separator.  The default is "\x1F".
  4660  **   +  Use p->rSep as the row separator.  The default is "\x1E".
  4661  **   +  Keep track of the row number in p->nLine.
  4662  **   +  Store the character that terminates the field in p->cTerm.  Store
  4663  **      EOF on end-of-file.
  4664  **   +  Report syntax errors on stderr
  4665  */
  4666  static char *SQLITE_CDECL ascii_read_one_field(ImportCtx *p){
  4667    int c;
  4668    int cSep = p->cColSep;
  4669    int rSep = p->cRowSep;
  4670    p->n = 0;
  4671    c = fgetc(p->in);
  4672    if( c==EOF || seenInterrupt ){
  4673      p->cTerm = EOF;
  4674      return 0;
  4675    }
  4676    while( c!=EOF && c!=cSep && c!=rSep ){
  4677      import_append_char(p, c);
  4678      c = fgetc(p->in);
  4679    }
  4680    if( c==rSep ){
  4681      p->nLine++;
  4682    }
  4683    p->cTerm = c;
  4684    if( p->z ) p->z[p->n] = 0;
  4685    return p->z;
  4686  }
  4687  
  4688  /*
  4689  ** Try to transfer data for table zTable.  If an error is seen while
  4690  ** moving forward, try to go backwards.  The backwards movement won't
  4691  ** work for WITHOUT ROWID tables.
  4692  */
  4693  static void tryToCloneData(
  4694    ShellState *p,
  4695    sqlite3 *newDb,
  4696    const char *zTable
  4697  ){
  4698    sqlite3_stmt *pQuery = 0;
  4699    sqlite3_stmt *pInsert = 0;
  4700    char *zQuery = 0;
  4701    char *zInsert = 0;
  4702    int rc;
  4703    int i, j, n;
  4704    int nTable = (int)strlen(zTable);
  4705    int k = 0;
  4706    int cnt = 0;
  4707    const int spinRate = 10000;
  4708  
  4709    zQuery = sqlite3_mprintf("SELECT * FROM \"%w\"", zTable);
  4710    rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0);
  4711    if( rc ){
  4712      utf8_printf(stderr, "Error %d: %s on [%s]\n",
  4713              sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db),
  4714              zQuery);
  4715      goto end_data_xfer;
  4716    }
  4717    n = sqlite3_column_count(pQuery);
  4718    zInsert = sqlite3_malloc64(200 + nTable + n*3);
  4719    if( zInsert==0 ){
  4720      raw_printf(stderr, "out of memory\n");
  4721      goto end_data_xfer;
  4722    }
  4723    sqlite3_snprintf(200+nTable,zInsert,
  4724                     "INSERT OR IGNORE INTO \"%s\" VALUES(?", zTable);
  4725    i = (int)strlen(zInsert);
  4726    for(j=1; j<n; j++){
  4727      memcpy(zInsert+i, ",?", 2);
  4728      i += 2;
  4729    }
  4730    memcpy(zInsert+i, ");", 3);
  4731    rc = sqlite3_prepare_v2(newDb, zInsert, -1, &pInsert, 0);
  4732    if( rc ){
  4733      utf8_printf(stderr, "Error %d: %s on [%s]\n",
  4734              sqlite3_extended_errcode(newDb), sqlite3_errmsg(newDb),
  4735              zQuery);
  4736      goto end_data_xfer;
  4737    }
  4738    for(k=0; k<2; k++){
  4739      while( (rc = sqlite3_step(pQuery))==SQLITE_ROW ){
  4740        for(i=0; i<n; i++){
  4741          switch( sqlite3_column_type(pQuery, i) ){
  4742            case SQLITE_NULL: {
  4743              sqlite3_bind_null(pInsert, i+1);
  4744              break;
  4745            }
  4746            case SQLITE_INTEGER: {
  4747              sqlite3_bind_int64(pInsert, i+1, sqlite3_column_int64(pQuery,i));
  4748              break;
  4749            }
  4750            case SQLITE_FLOAT: {
  4751              sqlite3_bind_double(pInsert, i+1, sqlite3_column_double(pQuery,i));
  4752              break;
  4753            }
  4754            case SQLITE_TEXT: {
  4755              sqlite3_bind_text(pInsert, i+1,
  4756                               (const char*)sqlite3_column_text(pQuery,i),
  4757                               -1, SQLITE_STATIC);
  4758              break;
  4759            }
  4760            case SQLITE_BLOB: {
  4761              sqlite3_bind_blob(pInsert, i+1, sqlite3_column_blob(pQuery,i),
  4762                                              sqlite3_column_bytes(pQuery,i),
  4763                                              SQLITE_STATIC);
  4764              break;
  4765            }
  4766          }
  4767        } /* End for */
  4768        rc = sqlite3_step(pInsert);
  4769        if( rc!=SQLITE_OK && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){
  4770          utf8_printf(stderr, "Error %d: %s\n", sqlite3_extended_errcode(newDb),
  4771                          sqlite3_errmsg(newDb));
  4772        }
  4773        sqlite3_reset(pInsert);
  4774        cnt++;
  4775        if( (cnt%spinRate)==0 ){
  4776          printf("%c\b", "|/-\\"[(cnt/spinRate)%4]);
  4777          fflush(stdout);
  4778        }
  4779      } /* End while */
  4780      if( rc==SQLITE_DONE ) break;
  4781      sqlite3_finalize(pQuery);
  4782      sqlite3_free(zQuery);
  4783      zQuery = sqlite3_mprintf("SELECT * FROM \"%w\" ORDER BY rowid DESC;",
  4784                               zTable);
  4785      rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0);
  4786      if( rc ){
  4787        utf8_printf(stderr, "Warning: cannot step \"%s\" backwards", zTable);
  4788        break;
  4789      }
  4790    } /* End for(k=0...) */
  4791  
  4792  end_data_xfer:
  4793    sqlite3_finalize(pQuery);
  4794    sqlite3_finalize(pInsert);
  4795    sqlite3_free(zQuery);
  4796    sqlite3_free(zInsert);
  4797  }
  4798  
  4799  
  4800  /*
  4801  ** Try to transfer all rows of the schema that match zWhere.  For
  4802  ** each row, invoke xForEach() on the object defined by that row.
  4803  ** If an error is encountered while moving forward through the
  4804  ** sqlite_master table, try again moving backwards.
  4805  */
  4806  static void tryToCloneSchema(
  4807    ShellState *p,
  4808    sqlite3 *newDb,
  4809    const char *zWhere,
  4810    void (*xForEach)(ShellState*,sqlite3*,const char*)
  4811  ){
  4812    sqlite3_stmt *pQuery = 0;
  4813    char *zQuery = 0;
  4814    int rc;
  4815    const unsigned char *zName;
  4816    const unsigned char *zSql;
  4817    char *zErrMsg = 0;
  4818  
  4819    zQuery = sqlite3_mprintf("SELECT name, sql FROM sqlite_master"
  4820                             " WHERE %s", zWhere);
  4821    rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0);
  4822    if( rc ){
  4823      utf8_printf(stderr, "Error: (%d) %s on [%s]\n",
  4824                      sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db),
  4825                      zQuery);
  4826      goto end_schema_xfer;
  4827    }
  4828    while( (rc = sqlite3_step(pQuery))==SQLITE_ROW ){
  4829      zName = sqlite3_column_text(pQuery, 0);
  4830      zSql = sqlite3_column_text(pQuery, 1);
  4831      printf("%s... ", zName); fflush(stdout);
  4832      sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg);
  4833      if( zErrMsg ){
  4834        utf8_printf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql);
  4835        sqlite3_free(zErrMsg);
  4836        zErrMsg = 0;
  4837      }
  4838      if( xForEach ){
  4839        xForEach(p, newDb, (const char*)zName);
  4840      }
  4841      printf("done\n");
  4842    }
  4843    if( rc!=SQLITE_DONE ){
  4844      sqlite3_finalize(pQuery);
  4845      sqlite3_free(zQuery);
  4846      zQuery = sqlite3_mprintf("SELECT name, sql FROM sqlite_master"
  4847                               " WHERE %s ORDER BY rowid DESC", zWhere);
  4848      rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0);
  4849      if( rc ){
  4850        utf8_printf(stderr, "Error: (%d) %s on [%s]\n",
  4851                        sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db),
  4852                        zQuery);
  4853        goto end_schema_xfer;
  4854      }
  4855      while( (rc = sqlite3_step(pQuery))==SQLITE_ROW ){
  4856        zName = sqlite3_column_text(pQuery, 0);
  4857        zSql = sqlite3_column_text(pQuery, 1);
  4858        printf("%s... ", zName); fflush(stdout);
  4859        sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg);
  4860        if( zErrMsg ){
  4861          utf8_printf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql);
  4862          sqlite3_free(zErrMsg);
  4863          zErrMsg = 0;
  4864        }
  4865        if( xForEach ){
  4866          xForEach(p, newDb, (const char*)zName);
  4867        }
  4868        printf("done\n");
  4869      }
  4870    }
  4871  end_schema_xfer:
  4872    sqlite3_finalize(pQuery);
  4873    sqlite3_free(zQuery);
  4874  }
  4875  
  4876  /*
  4877  ** Open a new database file named "zNewDb".  Try to recover as much information
  4878  ** as possible out of the main database (which might be corrupt) and write it
  4879  ** into zNewDb.
  4880  */
  4881  static void tryToClone(ShellState *p, const char *zNewDb){
  4882    int rc;
  4883    sqlite3 *newDb = 0;
  4884    if( access(zNewDb,0)==0 ){
  4885      utf8_printf(stderr, "File \"%s\" already exists.\n", zNewDb);
  4886      return;
  4887    }
  4888    rc = sqlite3_open(zNewDb, &newDb);
  4889    if( rc ){
  4890      utf8_printf(stderr, "Cannot create output database: %s\n",
  4891              sqlite3_errmsg(newDb));
  4892    }else{
  4893      sqlite3_exec(p->db, "PRAGMA writable_schema=ON;", 0, 0, 0);
  4894      sqlite3_exec(newDb, "BEGIN EXCLUSIVE;", 0, 0, 0);
  4895      tryToCloneSchema(p, newDb, "type='table'", tryToCloneData);
  4896      tryToCloneSchema(p, newDb, "type!='table'", 0);
  4897      sqlite3_exec(newDb, "COMMIT;", 0, 0, 0);
  4898      sqlite3_exec(p->db, "PRAGMA writable_schema=OFF;", 0, 0, 0);
  4899    }
  4900    sqlite3_close(newDb);
  4901  }
  4902  
  4903  /*
  4904  ** Change the output file back to stdout
  4905  */
  4906  static void output_reset(ShellState *p){
  4907    if( p->outfile[0]=='|' ){
  4908  #ifndef SQLITE_OMIT_POPEN
  4909      pclose(p->out);
  4910  #endif
  4911    }else{
  4912      output_file_close(p->out);
  4913    }
  4914    p->outfile[0] = 0;
  4915    p->out = stdout;
  4916  }
  4917  
  4918  /*
  4919  ** Run an SQL command and return the single integer result.
  4920  */
  4921  static int db_int(ShellState *p, const char *zSql){
  4922    sqlite3_stmt *pStmt;
  4923    int res = 0;
  4924    sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
  4925    if( pStmt && sqlite3_step(pStmt)==SQLITE_ROW ){
  4926      res = sqlite3_column_int(pStmt,0);
  4927    }
  4928    sqlite3_finalize(pStmt);
  4929    return res;
  4930  }
  4931  
  4932  /*
  4933  ** Convert a 2-byte or 4-byte big-endian integer into a native integer
  4934  */
  4935  static unsigned int get2byteInt(unsigned char *a){
  4936    return (a[0]<<8) + a[1];
  4937  }
  4938  static unsigned int get4byteInt(unsigned char *a){
  4939    return (a[0]<<24) + (a[1]<<16) + (a[2]<<8) + a[3];
  4940  }
  4941  
  4942  /*
  4943  ** Implementation of the ".info" command.
  4944  **
  4945  ** Return 1 on error, 2 to exit, and 0 otherwise.
  4946  */
  4947  static int shell_dbinfo_command(ShellState *p, int nArg, char **azArg){
  4948    static const struct { const char *zName; int ofst; } aField[] = {
  4949       { "file change counter:",  24  },
  4950       { "database page count:",  28  },
  4951       { "freelist page count:",  36  },
  4952       { "schema cookie:",        40  },
  4953       { "schema format:",        44  },
  4954       { "default cache size:",   48  },
  4955       { "autovacuum top root:",  52  },
  4956       { "incremental vacuum:",   64  },
  4957       { "text encoding:",        56  },
  4958       { "user version:",         60  },
  4959       { "application id:",       68  },
  4960       { "software version:",     96  },
  4961    };
  4962    static const struct { const char *zName; const char *zSql; } aQuery[] = {
  4963       { "number of tables:",
  4964         "SELECT count(*) FROM %s WHERE type='table'" },
  4965       { "number of indexes:",
  4966         "SELECT count(*) FROM %s WHERE type='index'" },
  4967       { "number of triggers:",
  4968         "SELECT count(*) FROM %s WHERE type='trigger'" },
  4969       { "number of views:",
  4970         "SELECT count(*) FROM %s WHERE type='view'" },
  4971       { "schema size:",
  4972         "SELECT total(length(sql)) FROM %s" },
  4973    };
  4974    int i;
  4975    char *zSchemaTab;
  4976    char *zDb = nArg>=2 ? azArg[1] : "main";
  4977    sqlite3_stmt *pStmt = 0;
  4978    unsigned char aHdr[100];
  4979    open_db(p, 0);
  4980    if( p->db==0 ) return 1;
  4981    sqlite3_prepare_v2(p->db,"SELECT data FROM sqlite_dbpage(?1) WHERE pgno=1",
  4982                       -1, &pStmt, 0);
  4983    sqlite3_bind_text(pStmt, 1, zDb, -1, SQLITE_STATIC);
  4984    if( sqlite3_step(pStmt)==SQLITE_ROW
  4985     && sqlite3_column_bytes(pStmt,0)>100
  4986    ){
  4987      memcpy(aHdr, sqlite3_column_blob(pStmt,0), 100);
  4988      sqlite3_finalize(pStmt);
  4989    }else{
  4990      raw_printf(stderr, "unable to read database header\n");
  4991      sqlite3_finalize(pStmt);
  4992      return 1;
  4993    }
  4994    i = get2byteInt(aHdr+16);
  4995    if( i==1 ) i = 65536;
  4996    utf8_printf(p->out, "%-20s %d\n", "database page size:", i);
  4997    utf8_printf(p->out, "%-20s %d\n", "write format:", aHdr[18]);
  4998    utf8_printf(p->out, "%-20s %d\n", "read format:", aHdr[19]);
  4999    utf8_printf(p->out, "%-20s %d\n", "reserved bytes:", aHdr[20]);
  5000    for(i=0; i<ArraySize(aField); i++){
  5001      int ofst = aField[i].ofst;
  5002      unsigned int val = get4byteInt(aHdr + ofst);
  5003      utf8_printf(p->out, "%-20s %u", aField[i].zName, val);
  5004      switch( ofst ){
  5005        case 56: {
  5006          if( val==1 ) raw_printf(p->out, " (utf8)");
  5007          if( val==2 ) raw_printf(p->out, " (utf16le)");
  5008          if( val==3 ) raw_printf(p->out, " (utf16be)");
  5009        }
  5010      }
  5011      raw_printf(p->out, "\n");
  5012    }
  5013    if( zDb==0 ){
  5014      zSchemaTab = sqlite3_mprintf("main.sqlite_master");
  5015    }else if( strcmp(zDb,"temp")==0 ){
  5016      zSchemaTab = sqlite3_mprintf("%s", "sqlite_temp_master");
  5017    }else{
  5018      zSchemaTab = sqlite3_mprintf("\"%w\".sqlite_master", zDb);
  5019    }
  5020    for(i=0; i<ArraySize(aQuery); i++){
  5021      char *zSql = sqlite3_mprintf(aQuery[i].zSql, zSchemaTab);
  5022      int val = db_int(p, zSql);
  5023      sqlite3_free(zSql);
  5024      utf8_printf(p->out, "%-20s %d\n", aQuery[i].zName, val);
  5025    }
  5026    sqlite3_free(zSchemaTab);
  5027    return 0;
  5028  }
  5029  
  5030  /*
  5031  ** Print the current sqlite3_errmsg() value to stderr and return 1.
  5032  */
  5033  static int shellDatabaseError(sqlite3 *db){
  5034    const char *zErr = sqlite3_errmsg(db);
  5035    utf8_printf(stderr, "Error: %s\n", zErr);
  5036    return 1;
  5037  }
  5038  
  5039  /*
  5040  ** Print an out-of-memory message to stderr and return 1.
  5041  */
  5042  static int shellNomemError(void){
  5043    raw_printf(stderr, "Error: out of memory\n");
  5044    return 1;
  5045  }
  5046  
  5047  /*
  5048  ** Compare the pattern in zGlob[] against the text in z[].  Return TRUE
  5049  ** if they match and FALSE (0) if they do not match.
  5050  **
  5051  ** Globbing rules:
  5052  **
  5053  **      '*'       Matches any sequence of zero or more characters.
  5054  **
  5055  **      '?'       Matches exactly one character.
  5056  **
  5057  **     [...]      Matches one character from the enclosed list of
  5058  **                characters.
  5059  **
  5060  **     [^...]     Matches one character not in the enclosed list.
  5061  **
  5062  **      '#'       Matches any sequence of one or more digits with an
  5063  **                optional + or - sign in front
  5064  **
  5065  **      ' '       Any span of whitespace matches any other span of
  5066  **                whitespace.
  5067  **
  5068  ** Extra whitespace at the end of z[] is ignored.
  5069  */
  5070  static int testcase_glob(const char *zGlob, const char *z){
  5071    int c, c2;
  5072    int invert;
  5073    int seen;
  5074  
  5075    while( (c = (*(zGlob++)))!=0 ){
  5076      if( IsSpace(c) ){
  5077        if( !IsSpace(*z) ) return 0;
  5078        while( IsSpace(*zGlob) ) zGlob++;
  5079        while( IsSpace(*z) ) z++;
  5080      }else if( c=='*' ){
  5081        while( (c=(*(zGlob++))) == '*' || c=='?' ){
  5082          if( c=='?' && (*(z++))==0 ) return 0;
  5083        }
  5084        if( c==0 ){
  5085          return 1;
  5086        }else if( c=='[' ){
  5087          while( *z && testcase_glob(zGlob-1,z)==0 ){
  5088            z++;
  5089          }
  5090          return (*z)!=0;
  5091        }
  5092        while( (c2 = (*(z++)))!=0 ){
  5093          while( c2!=c ){
  5094            c2 = *(z++);
  5095            if( c2==0 ) return 0;
  5096          }
  5097          if( testcase_glob(zGlob,z) ) return 1;
  5098        }
  5099        return 0;
  5100      }else if( c=='?' ){
  5101        if( (*(z++))==0 ) return 0;
  5102      }else if( c=='[' ){
  5103        int prior_c = 0;
  5104        seen = 0;
  5105        invert = 0;
  5106        c = *(z++);
  5107        if( c==0 ) return 0;
  5108        c2 = *(zGlob++);
  5109        if( c2=='^' ){
  5110          invert = 1;
  5111          c2 = *(zGlob++);
  5112        }
  5113        if( c2==']' ){
  5114          if( c==']' ) seen = 1;
  5115          c2 = *(zGlob++);
  5116        }
  5117        while( c2 && c2!=']' ){
  5118          if( c2=='-' && zGlob[0]!=']' && zGlob[0]!=0 && prior_c>0 ){
  5119            c2 = *(zGlob++);
  5120            if( c>=prior_c && c<=c2 ) seen = 1;
  5121            prior_c = 0;
  5122          }else{
  5123            if( c==c2 ){
  5124              seen = 1;
  5125            }
  5126            prior_c = c2;
  5127          }
  5128          c2 = *(zGlob++);
  5129        }
  5130        if( c2==0 || (seen ^ invert)==0 ) return 0;
  5131      }else if( c=='#' ){
  5132        if( (z[0]=='-' || z[0]=='+') && IsDigit(z[1]) ) z++;
  5133        if( !IsDigit(z[0]) ) return 0;
  5134        z++;
  5135        while( IsDigit(z[0]) ){ z++; }
  5136      }else{
  5137        if( c!=(*(z++)) ) return 0;
  5138      }
  5139    }
  5140    while( IsSpace(*z) ){ z++; }
  5141    return *z==0;
  5142  }
  5143  
  5144  
  5145  /*
  5146  ** Compare the string as a command-line option with either one or two
  5147  ** initial "-" characters.
  5148  */
  5149  static int optionMatch(const char *zStr, const char *zOpt){
  5150    if( zStr[0]!='-' ) return 0;
  5151    zStr++;
  5152    if( zStr[0]=='-' ) zStr++;
  5153    return strcmp(zStr, zOpt)==0;
  5154  }
  5155  
  5156  /*
  5157  ** Delete a file.
  5158  */
  5159  int shellDeleteFile(const char *zFilename){
  5160    int rc;
  5161  #ifdef _WIN32
  5162    wchar_t *z = sqlite3_win32_utf8_to_unicode(zFilename);
  5163    rc = _wunlink(z);
  5164    sqlite3_free(z);
  5165  #else
  5166    rc = unlink(zFilename);
  5167  #endif
  5168    return rc;
  5169  }
  5170  
  5171  
  5172  /*
  5173  ** The implementation of SQL scalar function fkey_collate_clause(), used
  5174  ** by the ".lint fkey-indexes" command. This scalar function is always
  5175  ** called with four arguments - the parent table name, the parent column name,
  5176  ** the child table name and the child column name.
  5177  **
  5178  **   fkey_collate_clause('parent-tab', 'parent-col', 'child-tab', 'child-col')
  5179  **
  5180  ** If either of the named tables or columns do not exist, this function
  5181  ** returns an empty string. An empty string is also returned if both tables
  5182  ** and columns exist but have the same default collation sequence. Or,
  5183  ** if both exist but the default collation sequences are different, this
  5184  ** function returns the string " COLLATE <parent-collation>", where
  5185  ** <parent-collation> is the default collation sequence of the parent column.
  5186  */
  5187  static void shellFkeyCollateClause(
  5188    sqlite3_context *pCtx,
  5189    int nVal,
  5190    sqlite3_value **apVal
  5191  ){
  5192    sqlite3 *db = sqlite3_context_db_handle(pCtx);
  5193    const char *zParent;
  5194    const char *zParentCol;
  5195    const char *zParentSeq;
  5196    const char *zChild;
  5197    const char *zChildCol;
  5198    const char *zChildSeq = 0;  /* Initialize to avoid false-positive warning */
  5199    int rc;
  5200  
  5201    assert( nVal==4 );
  5202    zParent = (const char*)sqlite3_value_text(apVal[0]);
  5203    zParentCol = (const char*)sqlite3_value_text(apVal[1]);
  5204    zChild = (const char*)sqlite3_value_text(apVal[2]);
  5205    zChildCol = (const char*)sqlite3_value_text(apVal[3]);
  5206  
  5207    sqlite3_result_text(pCtx, "", -1, SQLITE_STATIC);
  5208    rc = sqlite3_table_column_metadata(
  5209        db, "main", zParent, zParentCol, 0, &zParentSeq, 0, 0, 0
  5210    );
  5211    if( rc==SQLITE_OK ){
  5212      rc = sqlite3_table_column_metadata(
  5213          db, "main", zChild, zChildCol, 0, &zChildSeq, 0, 0, 0
  5214      );
  5215    }
  5216  
  5217    if( rc==SQLITE_OK && sqlite3_stricmp(zParentSeq, zChildSeq) ){
  5218      char *z = sqlite3_mprintf(" COLLATE %s", zParentSeq);
  5219      sqlite3_result_text(pCtx, z, -1, SQLITE_TRANSIENT);
  5220      sqlite3_free(z);
  5221    }
  5222  }
  5223  
  5224  
  5225  /*
  5226  ** The implementation of dot-command ".lint fkey-indexes".
  5227  */
  5228  static int lintFkeyIndexes(
  5229    ShellState *pState,             /* Current shell tool state */
  5230    char **azArg,                   /* Array of arguments passed to dot command */
  5231    int nArg                        /* Number of entries in azArg[] */
  5232  ){
  5233    sqlite3 *db = pState->db;       /* Database handle to query "main" db of */
  5234    FILE *out = pState->out;        /* Stream to write non-error output to */
  5235    int bVerbose = 0;               /* If -verbose is present */
  5236    int bGroupByParent = 0;         /* If -groupbyparent is present */
  5237    int i;                          /* To iterate through azArg[] */
  5238    const char *zIndent = "";       /* How much to indent CREATE INDEX by */
  5239    int rc;                         /* Return code */
  5240    sqlite3_stmt *pSql = 0;         /* Compiled version of SQL statement below */
  5241  
  5242    /*
  5243    ** This SELECT statement returns one row for each foreign key constraint
  5244    ** in the schema of the main database. The column values are:
  5245    **
  5246    ** 0. The text of an SQL statement similar to:
  5247    **
  5248    **      "EXPLAIN QUERY PLAN SELECT rowid FROM child_table WHERE child_key=?"
  5249    **
  5250    **    This is the same SELECT that the foreign keys implementation needs
  5251    **    to run internally on child tables. If there is an index that can
  5252    **    be used to optimize this query, then it can also be used by the FK
  5253    **    implementation to optimize DELETE or UPDATE statements on the parent
  5254    **    table.
  5255    **
  5256    ** 1. A GLOB pattern suitable for sqlite3_strglob(). If the plan output by
  5257    **    the EXPLAIN QUERY PLAN command matches this pattern, then the schema
  5258    **    contains an index that can be used to optimize the query.
  5259    **
  5260    ** 2. Human readable text that describes the child table and columns. e.g.
  5261    **
  5262    **       "child_table(child_key1, child_key2)"
  5263    **
  5264    ** 3. Human readable text that describes the parent table and columns. e.g.
  5265    **
  5266    **       "parent_table(parent_key1, parent_key2)"
  5267    **
  5268    ** 4. A full CREATE INDEX statement for an index that could be used to
  5269    **    optimize DELETE or UPDATE statements on the parent table. e.g.
  5270    **
  5271    **       "CREATE INDEX child_table_child_key ON child_table(child_key)"
  5272    **
  5273    ** 5. The name of the parent table.
  5274    **
  5275    ** These six values are used by the C logic below to generate the report.
  5276    */
  5277    const char *zSql =
  5278    "SELECT "
  5279      "     'EXPLAIN QUERY PLAN SELECT rowid FROM ' || quote(s.name) || ' WHERE '"
  5280      "  || group_concat(quote(s.name) || '.' || quote(f.[from]) || '=?' "
  5281      "  || fkey_collate_clause("
  5282      "       f.[table], COALESCE(f.[to], p.[name]), s.name, f.[from]),' AND ')"
  5283      ", "
  5284      "     'SEARCH TABLE ' || s.name || ' USING COVERING INDEX*('"
  5285      "  || group_concat('*=?', ' AND ') || ')'"
  5286      ", "
  5287      "     s.name  || '(' || group_concat(f.[from],  ', ') || ')'"
  5288      ", "
  5289      "     f.[table] || '(' || group_concat(COALESCE(f.[to], p.[name])) || ')'"
  5290      ", "
  5291      "     'CREATE INDEX ' || quote(s.name ||'_'|| group_concat(f.[from], '_'))"
  5292      "  || ' ON ' || quote(s.name) || '('"
  5293      "  || group_concat(quote(f.[from]) ||"
  5294      "        fkey_collate_clause("
  5295      "          f.[table], COALESCE(f.[to], p.[name]), s.name, f.[from]), ', ')"
  5296      "  || ');'"
  5297      ", "
  5298      "     f.[table] "
  5299      "FROM sqlite_master AS s, pragma_foreign_key_list(s.name) AS f "
  5300      "LEFT JOIN pragma_table_info AS p ON (pk-1=seq AND p.arg=f.[table]) "
  5301      "GROUP BY s.name, f.id "
  5302      "ORDER BY (CASE WHEN ? THEN f.[table] ELSE s.name END)"
  5303    ;
  5304    const char *zGlobIPK = "SEARCH TABLE * USING INTEGER PRIMARY KEY (rowid=?)";
  5305  
  5306    for(i=2; i<nArg; i++){
  5307      int n = (int)strlen(azArg[i]);
  5308      if( n>1 && sqlite3_strnicmp("-verbose", azArg[i], n)==0 ){
  5309        bVerbose = 1;
  5310      }
  5311      else if( n>1 && sqlite3_strnicmp("-groupbyparent", azArg[i], n)==0 ){
  5312        bGroupByParent = 1;
  5313        zIndent = "    ";
  5314      }
  5315      else{
  5316        raw_printf(stderr, "Usage: %s %s ?-verbose? ?-groupbyparent?\n",
  5317            azArg[0], azArg[1]
  5318        );
  5319        return SQLITE_ERROR;
  5320      }
  5321    }
  5322  
  5323    /* Register the fkey_collate_clause() SQL function */
  5324    rc = sqlite3_create_function(db, "fkey_collate_clause", 4, SQLITE_UTF8,
  5325        0, shellFkeyCollateClause, 0, 0
  5326    );
  5327  
  5328  
  5329    if( rc==SQLITE_OK ){
  5330      rc = sqlite3_prepare_v2(db, zSql, -1, &pSql, 0);
  5331    }
  5332    if( rc==SQLITE_OK ){
  5333      sqlite3_bind_int(pSql, 1, bGroupByParent);
  5334    }
  5335  
  5336    if( rc==SQLITE_OK ){
  5337      int rc2;
  5338      char *zPrev = 0;
  5339      while( SQLITE_ROW==sqlite3_step(pSql) ){
  5340        int res = -1;
  5341        sqlite3_stmt *pExplain = 0;
  5342        const char *zEQP = (const char*)sqlite3_column_text(pSql, 0);
  5343        const char *zGlob = (const char*)sqlite3_column_text(pSql, 1);
  5344        const char *zFrom = (const char*)sqlite3_column_text(pSql, 2);
  5345        const char *zTarget = (const char*)sqlite3_column_text(pSql, 3);
  5346        const char *zCI = (const char*)sqlite3_column_text(pSql, 4);
  5347        const char *zParent = (const char*)sqlite3_column_text(pSql, 5);
  5348  
  5349        rc = sqlite3_prepare_v2(db, zEQP, -1, &pExplain, 0);
  5350        if( rc!=SQLITE_OK ) break;
  5351        if( SQLITE_ROW==sqlite3_step(pExplain) ){
  5352          const char *zPlan = (const char*)sqlite3_column_text(pExplain, 3);
  5353          res = (
  5354                0==sqlite3_strglob(zGlob, zPlan)
  5355             || 0==sqlite3_strglob(zGlobIPK, zPlan)
  5356          );
  5357        }
  5358        rc = sqlite3_finalize(pExplain);
  5359        if( rc!=SQLITE_OK ) break;
  5360  
  5361        if( res<0 ){
  5362          raw_printf(stderr, "Error: internal error");
  5363          break;
  5364        }else{
  5365          if( bGroupByParent
  5366          && (bVerbose || res==0)
  5367          && (zPrev==0 || sqlite3_stricmp(zParent, zPrev))
  5368          ){
  5369            raw_printf(out, "-- Parent table %s\n", zParent);
  5370            sqlite3_free(zPrev);
  5371            zPrev = sqlite3_mprintf("%s", zParent);
  5372          }
  5373  
  5374          if( res==0 ){
  5375            raw_printf(out, "%s%s --> %s\n", zIndent, zCI, zTarget);
  5376          }else if( bVerbose ){
  5377            raw_printf(out, "%s/* no extra indexes required for %s -> %s */\n",
  5378                zIndent, zFrom, zTarget
  5379            );
  5380          }
  5381        }
  5382      }
  5383      sqlite3_free(zPrev);
  5384  
  5385      if( rc!=SQLITE_OK ){
  5386        raw_printf(stderr, "%s\n", sqlite3_errmsg(db));
  5387      }
  5388  
  5389      rc2 = sqlite3_finalize(pSql);
  5390      if( rc==SQLITE_OK && rc2!=SQLITE_OK ){
  5391        rc = rc2;
  5392        raw_printf(stderr, "%s\n", sqlite3_errmsg(db));
  5393      }
  5394    }else{
  5395      raw_printf(stderr, "%s\n", sqlite3_errmsg(db));
  5396    }
  5397  
  5398    return rc;
  5399  }
  5400  
  5401  /*
  5402  ** Implementation of ".lint" dot command.
  5403  */
  5404  static int lintDotCommand(
  5405    ShellState *pState,             /* Current shell tool state */
  5406    char **azArg,                   /* Array of arguments passed to dot command */
  5407    int nArg                        /* Number of entries in azArg[] */
  5408  ){
  5409    int n;
  5410    n = (nArg>=2 ? (int)strlen(azArg[1]) : 0);
  5411    if( n<1 || sqlite3_strnicmp(azArg[1], "fkey-indexes", n) ) goto usage;
  5412    return lintFkeyIndexes(pState, azArg, nArg);
  5413  
  5414   usage:
  5415    raw_printf(stderr, "Usage %s sub-command ?switches...?\n", azArg[0]);
  5416    raw_printf(stderr, "Where sub-commands are:\n");
  5417    raw_printf(stderr, "    fkey-indexes\n");
  5418    return SQLITE_ERROR;
  5419  }
  5420  
  5421  
  5422  /*
  5423  ** If an input line begins with "." then invoke this routine to
  5424  ** process that line.
  5425  **
  5426  ** Return 1 on error, 2 to exit, and 0 otherwise.
  5427  */
  5428  static int do_meta_command(char *zLine, ShellState *p){
  5429    int h = 1;
  5430    int nArg = 0;
  5431    int n, c;
  5432    int rc = 0;
  5433    char *azArg[50];
  5434  
  5435    /* Parse the input line into tokens.
  5436    */
  5437    while( zLine[h] && nArg<ArraySize(azArg) ){
  5438      while( IsSpace(zLine[h]) ){ h++; }
  5439      if( zLine[h]==0 ) break;
  5440      if( zLine[h]=='\'' || zLine[h]=='"' ){
  5441        int delim = zLine[h++];
  5442        azArg[nArg++] = &zLine[h];
  5443        while( zLine[h] && zLine[h]!=delim ){
  5444          if( zLine[h]=='\\' && delim=='"' && zLine[h+1]!=0 ) h++;
  5445          h++;
  5446        }
  5447        if( zLine[h]==delim ){
  5448          zLine[h++] = 0;
  5449        }
  5450        if( delim=='"' ) resolve_backslashes(azArg[nArg-1]);
  5451      }else{
  5452        azArg[nArg++] = &zLine[h];
  5453        while( zLine[h] && !IsSpace(zLine[h]) ){ h++; }
  5454        if( zLine[h] ) zLine[h++] = 0;
  5455        resolve_backslashes(azArg[nArg-1]);
  5456      }
  5457    }
  5458  
  5459    /* Process the input line.
  5460    */
  5461    if( nArg==0 ) return 0; /* no tokens, no error */
  5462    n = strlen30(azArg[0]);
  5463    c = azArg[0][0];
  5464  
  5465  #ifndef SQLITE_OMIT_AUTHORIZATION
  5466    if( c=='a' && strncmp(azArg[0], "auth", n)==0 ){
  5467      if( nArg!=2 ){
  5468        raw_printf(stderr, "Usage: .auth ON|OFF\n");
  5469        rc = 1;
  5470        goto meta_command_exit;
  5471      }
  5472      open_db(p, 0);
  5473      if( booleanValue(azArg[1]) ){
  5474        sqlite3_set_authorizer(p->db, shellAuth, p);
  5475      }else{
  5476        sqlite3_set_authorizer(p->db, 0, 0);
  5477      }
  5478    }else
  5479  #endif
  5480  
  5481    if( (c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0)
  5482     || (c=='s' && n>=3 && strncmp(azArg[0], "save", n)==0)
  5483    ){
  5484      const char *zDestFile = 0;
  5485      const char *zDb = 0;
  5486      sqlite3 *pDest;
  5487      sqlite3_backup *pBackup;
  5488      int j;
  5489      for(j=1; j<nArg; j++){
  5490        const char *z = azArg[j];
  5491        if( z[0]=='-' ){
  5492          while( z[0]=='-' ) z++;
  5493          /* No options to process at this time */
  5494          {
  5495            utf8_printf(stderr, "unknown option: %s\n", azArg[j]);
  5496            return 1;
  5497          }
  5498        }else if( zDestFile==0 ){
  5499          zDestFile = azArg[j];
  5500        }else if( zDb==0 ){
  5501          zDb = zDestFile;
  5502          zDestFile = azArg[j];
  5503        }else{
  5504          raw_printf(stderr, "too many arguments to .backup\n");
  5505          return 1;
  5506        }
  5507      }
  5508      if( zDestFile==0 ){
  5509        raw_printf(stderr, "missing FILENAME argument on .backup\n");
  5510        return 1;
  5511      }
  5512      if( zDb==0 ) zDb = "main";
  5513      rc = sqlite3_open(zDestFile, &pDest);
  5514      if( rc!=SQLITE_OK ){
  5515        utf8_printf(stderr, "Error: cannot open \"%s\"\n", zDestFile);
  5516        sqlite3_close(pDest);
  5517        return 1;
  5518      }
  5519      open_db(p, 0);
  5520      pBackup = sqlite3_backup_init(pDest, "main", p->db, zDb);
  5521      if( pBackup==0 ){
  5522        utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
  5523        sqlite3_close(pDest);
  5524        return 1;
  5525      }
  5526      while(  (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK ){}
  5527      sqlite3_backup_finish(pBackup);
  5528      if( rc==SQLITE_DONE ){
  5529        rc = 0;
  5530      }else{
  5531        utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
  5532        rc = 1;
  5533      }
  5534      sqlite3_close(pDest);
  5535    }else
  5536  
  5537    if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 ){
  5538      if( nArg==2 ){
  5539        bail_on_error = booleanValue(azArg[1]);
  5540      }else{
  5541        raw_printf(stderr, "Usage: .bail on|off\n");
  5542        rc = 1;
  5543      }
  5544    }else
  5545  
  5546    if( c=='b' && n>=3 && strncmp(azArg[0], "binary", n)==0 ){
  5547      if( nArg==2 ){
  5548        if( booleanValue(azArg[1]) ){
  5549          setBinaryMode(p->out, 1);
  5550        }else{
  5551          setTextMode(p->out, 1);
  5552        }
  5553      }else{
  5554        raw_printf(stderr, "Usage: .binary on|off\n");
  5555        rc = 1;
  5556      }
  5557    }else
  5558  
  5559    if( c=='c' && strcmp(azArg[0],"cd")==0 ){
  5560      if( nArg==2 ){
  5561  #if defined(_WIN32) || defined(WIN32)
  5562        wchar_t *z = sqlite3_win32_utf8_to_unicode(azArg[1]);
  5563        rc = !SetCurrentDirectoryW(z);
  5564        sqlite3_free(z);
  5565  #else
  5566        rc = chdir(azArg[1]);
  5567  #endif
  5568        if( rc ){
  5569          utf8_printf(stderr, "Cannot change to directory \"%s\"\n", azArg[1]);
  5570          rc = 1;
  5571        }
  5572      }else{
  5573        raw_printf(stderr, "Usage: .cd DIRECTORY\n");
  5574        rc = 1;
  5575      }
  5576    }else
  5577  
  5578    /* The undocumented ".breakpoint" command causes a call to the no-op
  5579    ** routine named test_breakpoint().
  5580    */
  5581    if( c=='b' && n>=3 && strncmp(azArg[0], "breakpoint", n)==0 ){
  5582      test_breakpoint();
  5583    }else
  5584  
  5585    if( c=='c' && n>=3 && strncmp(azArg[0], "changes", n)==0 ){
  5586      if( nArg==2 ){
  5587        setOrClearFlag(p, SHFLG_CountChanges, azArg[1]);
  5588      }else{
  5589        raw_printf(stderr, "Usage: .changes on|off\n");
  5590        rc = 1;
  5591      }
  5592    }else
  5593  
  5594    /* Cancel output redirection, if it is currently set (by .testcase)
  5595    ** Then read the content of the testcase-out.txt file and compare against
  5596    ** azArg[1].  If there are differences, report an error and exit.
  5597    */
  5598    if( c=='c' && n>=3 && strncmp(azArg[0], "check", n)==0 ){
  5599      char *zRes = 0;
  5600      output_reset(p);
  5601      if( nArg!=2 ){
  5602        raw_printf(stderr, "Usage: .check GLOB-PATTERN\n");
  5603        rc = 2;
  5604      }else if( (zRes = readFile("testcase-out.txt", 0))==0 ){
  5605        raw_printf(stderr, "Error: cannot read 'testcase-out.txt'\n");
  5606        rc = 2;
  5607      }else if( testcase_glob(azArg[1],zRes)==0 ){
  5608        utf8_printf(stderr,
  5609                   "testcase-%s FAILED\n Expected: [%s]\n      Got: [%s]\n",
  5610                   p->zTestcase, azArg[1], zRes);
  5611        rc = 1;
  5612      }else{
  5613        utf8_printf(stdout, "testcase-%s ok\n", p->zTestcase);
  5614        p->nCheck++;
  5615      }
  5616      sqlite3_free(zRes);
  5617    }else
  5618  
  5619    if( c=='c' && strncmp(azArg[0], "clone", n)==0 ){
  5620      if( nArg==2 ){
  5621        tryToClone(p, azArg[1]);
  5622      }else{
  5623        raw_printf(stderr, "Usage: .clone FILENAME\n");
  5624        rc = 1;
  5625      }
  5626    }else
  5627  
  5628    if( c=='d' && n>1 && strncmp(azArg[0], "databases", n)==0 ){
  5629      ShellState data;
  5630      char *zErrMsg = 0;
  5631      open_db(p, 0);
  5632      memcpy(&data, p, sizeof(data));
  5633      data.showHeader = 0;
  5634      data.cMode = data.mode = MODE_List;
  5635      sqlite3_snprintf(sizeof(data.colSeparator),data.colSeparator,": ");
  5636      data.cnt = 0;
  5637      sqlite3_exec(p->db, "SELECT name, file FROM pragma_database_list",
  5638                   callback, &data, &zErrMsg);
  5639      if( zErrMsg ){
  5640        utf8_printf(stderr,"Error: %s\n", zErrMsg);
  5641        sqlite3_free(zErrMsg);
  5642        rc = 1;
  5643      }
  5644    }else
  5645  
  5646    if( c=='d' && strncmp(azArg[0], "dbinfo", n)==0 ){
  5647      rc = shell_dbinfo_command(p, nArg, azArg);
  5648    }else
  5649  
  5650    if( c=='d' && strncmp(azArg[0], "dump", n)==0 ){
  5651      const char *zLike = 0;
  5652      int i;
  5653      int savedShowHeader = p->showHeader;
  5654      ShellClearFlag(p, SHFLG_PreserveRowid|SHFLG_Newlines);
  5655      for(i=1; i<nArg; i++){
  5656        if( azArg[i][0]=='-' ){
  5657          const char *z = azArg[i]+1;
  5658          if( z[0]=='-' ) z++;
  5659          if( strcmp(z,"preserve-rowids")==0 ){
  5660  #ifdef SQLITE_OMIT_VIRTUALTABLE
  5661            raw_printf(stderr, "The --preserve-rowids option is not compatible"
  5662                               " with SQLITE_OMIT_VIRTUALTABLE\n");
  5663            rc = 1;
  5664            goto meta_command_exit;
  5665  #else
  5666            ShellSetFlag(p, SHFLG_PreserveRowid);
  5667  #endif
  5668          }else
  5669          if( strcmp(z,"newlines")==0 ){
  5670            ShellSetFlag(p, SHFLG_Newlines);
  5671          }else
  5672          {
  5673            raw_printf(stderr, "Unknown option \"%s\" on \".dump\"\n", azArg[i]);
  5674            rc = 1;
  5675            goto meta_command_exit;
  5676          }
  5677        }else if( zLike ){
  5678          raw_printf(stderr, "Usage: .dump ?--preserve-rowids? "
  5679                             "?--newlines? ?LIKE-PATTERN?\n");
  5680          rc = 1;
  5681          goto meta_command_exit;
  5682        }else{
  5683          zLike = azArg[i];
  5684        }
  5685      }
  5686      open_db(p, 0);
  5687      /* When playing back a "dump", the content might appear in an order
  5688      ** which causes immediate foreign key constraints to be violated.
  5689      ** So disable foreign-key constraint enforcement to prevent problems. */
  5690      raw_printf(p->out, "PRAGMA foreign_keys=OFF;\n");
  5691      raw_printf(p->out, "BEGIN TRANSACTION;\n");
  5692      p->writableSchema = 0;
  5693      p->showHeader = 0;
  5694      /* Set writable_schema=ON since doing so forces SQLite to initialize
  5695      ** as much of the schema as it can even if the sqlite_master table is
  5696      ** corrupt. */
  5697      sqlite3_exec(p->db, "SAVEPOINT dump; PRAGMA writable_schema=ON", 0, 0, 0);
  5698      p->nErr = 0;
  5699      if( zLike==0 ){
  5700        run_schema_dump_query(p,
  5701          "SELECT name, type, sql FROM sqlite_master "
  5702          "WHERE sql NOT NULL AND type=='table' AND name!='sqlite_sequence'"
  5703        );
  5704        run_schema_dump_query(p,
  5705          "SELECT name, type, sql FROM sqlite_master "
  5706          "WHERE name=='sqlite_sequence'"
  5707        );
  5708        run_table_dump_query(p,
  5709          "SELECT sql FROM sqlite_master "
  5710          "WHERE sql NOT NULL AND type IN ('index','trigger','view')", 0
  5711        );
  5712      }else{
  5713        char *zSql;
  5714        zSql = sqlite3_mprintf(
  5715          "SELECT name, type, sql FROM sqlite_master "
  5716          "WHERE tbl_name LIKE %Q AND type=='table'"
  5717          "  AND sql NOT NULL", zLike);
  5718        run_schema_dump_query(p,zSql);
  5719        sqlite3_free(zSql);
  5720        zSql = sqlite3_mprintf(
  5721          "SELECT sql FROM sqlite_master "
  5722          "WHERE sql NOT NULL"
  5723          "  AND type IN ('index','trigger','view')"
  5724          "  AND tbl_name LIKE %Q", zLike);
  5725        run_table_dump_query(p, zSql, 0);
  5726        sqlite3_free(zSql);
  5727      }
  5728      if( p->writableSchema ){
  5729        raw_printf(p->out, "PRAGMA writable_schema=OFF;\n");
  5730        p->writableSchema = 0;
  5731      }
  5732      sqlite3_exec(p->db, "PRAGMA writable_schema=OFF;", 0, 0, 0);
  5733      sqlite3_exec(p->db, "RELEASE dump;", 0, 0, 0);
  5734      raw_printf(p->out, p->nErr ? "ROLLBACK; -- due to errors\n" : "COMMIT;\n");
  5735      p->showHeader = savedShowHeader;
  5736    }else
  5737  
  5738    if( c=='e' && strncmp(azArg[0], "echo", n)==0 ){
  5739      if( nArg==2 ){
  5740        setOrClearFlag(p, SHFLG_Echo, azArg[1]);
  5741      }else{
  5742        raw_printf(stderr, "Usage: .echo on|off\n");
  5743        rc = 1;
  5744      }
  5745    }else
  5746  
  5747    if( c=='e' && strncmp(azArg[0], "eqp", n)==0 ){
  5748      if( nArg==2 ){
  5749        if( strcmp(azArg[1],"full")==0 ){
  5750          p->autoEQP = 2;
  5751        }else{
  5752          p->autoEQP = booleanValue(azArg[1]);
  5753        }
  5754      }else{
  5755        raw_printf(stderr, "Usage: .eqp on|off|full\n");
  5756        rc = 1;
  5757      }
  5758    }else
  5759  
  5760    if( c=='e' && strncmp(azArg[0], "exit", n)==0 ){
  5761      if( nArg>1 && (rc = (int)integerValue(azArg[1]))!=0 ) exit(rc);
  5762      rc = 2;
  5763    }else
  5764  
  5765    /* The ".explain" command is automatic now.  It is largely pointless.  It
  5766    ** retained purely for backwards compatibility */
  5767    if( c=='e' && strncmp(azArg[0], "explain", n)==0 ){
  5768      int val = 1;
  5769      if( nArg>=2 ){
  5770        if( strcmp(azArg[1],"auto")==0 ){
  5771          val = 99;
  5772        }else{
  5773          val =  booleanValue(azArg[1]);
  5774        }
  5775      }
  5776      if( val==1 && p->mode!=MODE_Explain ){
  5777        p->normalMode = p->mode;
  5778        p->mode = MODE_Explain;
  5779        p->autoExplain = 0;
  5780      }else if( val==0 ){
  5781        if( p->mode==MODE_Explain ) p->mode = p->normalMode;
  5782        p->autoExplain = 0;
  5783      }else if( val==99 ){
  5784        if( p->mode==MODE_Explain ) p->mode = p->normalMode;
  5785        p->autoExplain = 1;
  5786      }
  5787    }else
  5788  
  5789    if( c=='f' && strncmp(azArg[0], "fullschema", n)==0 ){
  5790      ShellState data;
  5791      char *zErrMsg = 0;
  5792      int doStats = 0;
  5793      memcpy(&data, p, sizeof(data));
  5794      data.showHeader = 0;
  5795      data.cMode = data.mode = MODE_Semi;
  5796      if( nArg==2 && optionMatch(azArg[1], "indent") ){
  5797        data.cMode = data.mode = MODE_Pretty;
  5798        nArg = 1;
  5799      }
  5800      if( nArg!=1 ){
  5801        raw_printf(stderr, "Usage: .fullschema ?--indent?\n");
  5802        rc = 1;
  5803        goto meta_command_exit;
  5804      }
  5805      open_db(p, 0);
  5806      rc = sqlite3_exec(p->db,
  5807         "SELECT sql FROM"
  5808         "  (SELECT sql sql, type type, tbl_name tbl_name, name name, rowid x"
  5809         "     FROM sqlite_master UNION ALL"
  5810         "   SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
  5811         "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%' "
  5812         "ORDER BY rowid",
  5813         callback, &data, &zErrMsg
  5814      );
  5815      if( rc==SQLITE_OK ){
  5816        sqlite3_stmt *pStmt;
  5817        rc = sqlite3_prepare_v2(p->db,
  5818                 "SELECT rowid FROM sqlite_master"
  5819                 " WHERE name GLOB 'sqlite_stat[134]'",
  5820                 -1, &pStmt, 0);
  5821        doStats = sqlite3_step(pStmt)==SQLITE_ROW;
  5822        sqlite3_finalize(pStmt);
  5823      }
  5824      if( doStats==0 ){
  5825        raw_printf(p->out, "/* No STAT tables available */\n");
  5826      }else{
  5827        raw_printf(p->out, "ANALYZE sqlite_master;\n");
  5828        sqlite3_exec(p->db, "SELECT 'ANALYZE sqlite_master'",
  5829                     callback, &data, &zErrMsg);
  5830        data.cMode = data.mode = MODE_Insert;
  5831        data.zDestTable = "sqlite_stat1";
  5832        shell_exec(p->db, "SELECT * FROM sqlite_stat1",
  5833                   shell_callback, &data,&zErrMsg);
  5834        data.zDestTable = "sqlite_stat3";
  5835        shell_exec(p->db, "SELECT * FROM sqlite_stat3",
  5836                   shell_callback, &data,&zErrMsg);
  5837        data.zDestTable = "sqlite_stat4";
  5838        shell_exec(p->db, "SELECT * FROM sqlite_stat4",
  5839                   shell_callback, &data, &zErrMsg);
  5840        raw_printf(p->out, "ANALYZE sqlite_master;\n");
  5841      }
  5842    }else
  5843  
  5844    if( c=='h' && strncmp(azArg[0], "headers", n)==0 ){
  5845      if( nArg==2 ){
  5846        p->showHeader = booleanValue(azArg[1]);
  5847      }else{
  5848        raw_printf(stderr, "Usage: .headers on|off\n");
  5849        rc = 1;
  5850      }
  5851    }else
  5852  
  5853    if( c=='h' && strncmp(azArg[0], "help", n)==0 ){
  5854      utf8_printf(p->out, "%s", zHelp);
  5855    }else
  5856  
  5857    if( c=='i' && strncmp(azArg[0], "import", n)==0 ){
  5858      char *zTable;               /* Insert data into this table */
  5859      char *zFile;                /* Name of file to extra content from */
  5860      sqlite3_stmt *pStmt = NULL; /* A statement */
  5861      int nCol;                   /* Number of columns in the table */
  5862      int nByte;                  /* Number of bytes in an SQL string */
  5863      int i, j;                   /* Loop counters */
  5864      int needCommit;             /* True to COMMIT or ROLLBACK at end */
  5865      int nSep;                   /* Number of bytes in p->colSeparator[] */
  5866      char *zSql;                 /* An SQL statement */
  5867      ImportCtx sCtx;             /* Reader context */
  5868      char *(SQLITE_CDECL *xRead)(ImportCtx*); /* Func to read one value */
  5869      int (SQLITE_CDECL *xCloser)(FILE*);      /* Func to close file */
  5870  
  5871      if( nArg!=3 ){
  5872        raw_printf(stderr, "Usage: .import FILE TABLE\n");
  5873        goto meta_command_exit;
  5874      }
  5875      zFile = azArg[1];
  5876      zTable = azArg[2];
  5877      seenInterrupt = 0;
  5878      memset(&sCtx, 0, sizeof(sCtx));
  5879      open_db(p, 0);
  5880      nSep = strlen30(p->colSeparator);
  5881      if( nSep==0 ){
  5882        raw_printf(stderr,
  5883                   "Error: non-null column separator required for import\n");
  5884        return 1;
  5885      }
  5886      if( nSep>1 ){
  5887        raw_printf(stderr, "Error: multi-character column separators not allowed"
  5888                        " for import\n");
  5889        return 1;
  5890      }
  5891      nSep = strlen30(p->rowSeparator);
  5892      if( nSep==0 ){
  5893        raw_printf(stderr, "Error: non-null row separator required for import\n");
  5894        return 1;
  5895      }
  5896      if( nSep==2 && p->mode==MODE_Csv && strcmp(p->rowSeparator, SEP_CrLf)==0 ){
  5897        /* When importing CSV (only), if the row separator is set to the
  5898        ** default output row separator, change it to the default input
  5899        ** row separator.  This avoids having to maintain different input
  5900        ** and output row separators. */
  5901        sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Row);
  5902        nSep = strlen30(p->rowSeparator);
  5903      }
  5904      if( nSep>1 ){
  5905        raw_printf(stderr, "Error: multi-character row separators not allowed"
  5906                        " for import\n");
  5907        return 1;
  5908      }
  5909      sCtx.zFile = zFile;
  5910      sCtx.nLine = 1;
  5911      if( sCtx.zFile[0]=='|' ){
  5912  #ifdef SQLITE_OMIT_POPEN
  5913        raw_printf(stderr, "Error: pipes are not supported in this OS\n");
  5914        return 1;
  5915  #else
  5916        sCtx.in = popen(sCtx.zFile+1, "r");
  5917        sCtx.zFile = "<pipe>";
  5918        xCloser = pclose;
  5919  #endif
  5920      }else{
  5921        sCtx.in = fopen(sCtx.zFile, "rb");
  5922        xCloser = fclose;
  5923      }
  5924      if( p->mode==MODE_Ascii ){
  5925        xRead = ascii_read_one_field;
  5926      }else{
  5927        xRead = csv_read_one_field;
  5928      }
  5929      if( sCtx.in==0 ){
  5930        utf8_printf(stderr, "Error: cannot open \"%s\"\n", zFile);
  5931        return 1;
  5932      }
  5933      sCtx.cColSep = p->colSeparator[0];
  5934      sCtx.cRowSep = p->rowSeparator[0];
  5935      zSql = sqlite3_mprintf("SELECT * FROM %s", zTable);
  5936      if( zSql==0 ){
  5937        raw_printf(stderr, "Error: out of memory\n");
  5938        xCloser(sCtx.in);
  5939        return 1;
  5940      }
  5941      nByte = strlen30(zSql);
  5942      rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
  5943      import_append_char(&sCtx, 0);    /* To ensure sCtx.z is allocated */
  5944      if( rc && sqlite3_strglob("no such table: *", sqlite3_errmsg(p->db))==0 ){
  5945        char *zCreate = sqlite3_mprintf("CREATE TABLE %s", zTable);
  5946        char cSep = '(';
  5947        while( xRead(&sCtx) ){
  5948          zCreate = sqlite3_mprintf("%z%c\n  \"%w\" TEXT", zCreate, cSep, sCtx.z);
  5949          cSep = ',';
  5950          if( sCtx.cTerm!=sCtx.cColSep ) break;
  5951        }
  5952        if( cSep=='(' ){
  5953          sqlite3_free(zCreate);
  5954          sqlite3_free(sCtx.z);
  5955          xCloser(sCtx.in);
  5956          utf8_printf(stderr,"%s: empty file\n", sCtx.zFile);
  5957          return 1;
  5958        }
  5959        zCreate = sqlite3_mprintf("%z\n)", zCreate);
  5960        rc = sqlite3_exec(p->db, zCreate, 0, 0, 0);
  5961        sqlite3_free(zCreate);
  5962        if( rc ){
  5963          utf8_printf(stderr, "CREATE TABLE %s(...) failed: %s\n", zTable,
  5964                  sqlite3_errmsg(p->db));
  5965          sqlite3_free(sCtx.z);
  5966          xCloser(sCtx.in);
  5967          return 1;
  5968        }
  5969        rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
  5970      }
  5971      sqlite3_free(zSql);
  5972      if( rc ){
  5973        if (pStmt) sqlite3_finalize(pStmt);
  5974        utf8_printf(stderr,"Error: %s\n", sqlite3_errmsg(p->db));
  5975        xCloser(sCtx.in);
  5976        return 1;
  5977      }
  5978      nCol = sqlite3_column_count(pStmt);
  5979      sqlite3_finalize(pStmt);
  5980      pStmt = 0;
  5981      if( nCol==0 ) return 0; /* no columns, no error */
  5982      zSql = sqlite3_malloc64( nByte*2 + 20 + nCol*2 );
  5983      if( zSql==0 ){
  5984        raw_printf(stderr, "Error: out of memory\n");
  5985        xCloser(sCtx.in);
  5986        return 1;
  5987      }
  5988      sqlite3_snprintf(nByte+20, zSql, "INSERT INTO \"%w\" VALUES(?", zTable);
  5989      j = strlen30(zSql);
  5990      for(i=1; i<nCol; i++){
  5991        zSql[j++] = ',';
  5992        zSql[j++] = '?';
  5993      }
  5994      zSql[j++] = ')';
  5995      zSql[j] = 0;
  5996      rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
  5997      sqlite3_free(zSql);
  5998      if( rc ){
  5999        utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
  6000        if (pStmt) sqlite3_finalize(pStmt);
  6001        xCloser(sCtx.in);
  6002        return 1;
  6003      }
  6004      needCommit = sqlite3_get_autocommit(p->db);
  6005      if( needCommit ) sqlite3_exec(p->db, "BEGIN", 0, 0, 0);
  6006      do{
  6007        int startLine = sCtx.nLine;
  6008        for(i=0; i<nCol; i++){
  6009          char *z = xRead(&sCtx);
  6010          /*
  6011          ** Did we reach end-of-file before finding any columns?
  6012          ** If so, stop instead of NULL filling the remaining columns.
  6013          */
  6014          if( z==0 && i==0 ) break;
  6015          /*
  6016          ** Did we reach end-of-file OR end-of-line before finding any
  6017          ** columns in ASCII mode?  If so, stop instead of NULL filling
  6018          ** the remaining columns.
  6019          */
  6020          if( p->mode==MODE_Ascii && (z==0 || z[0]==0) && i==0 ) break;
  6021          sqlite3_bind_text(pStmt, i+1, z, -1, SQLITE_TRANSIENT);
  6022          if( i<nCol-1 && sCtx.cTerm!=sCtx.cColSep ){
  6023            utf8_printf(stderr, "%s:%d: expected %d columns but found %d - "
  6024                            "filling the rest with NULL\n",
  6025                            sCtx.zFile, startLine, nCol, i+1);
  6026            i += 2;
  6027            while( i<=nCol ){ sqlite3_bind_null(pStmt, i); i++; }
  6028          }
  6029        }
  6030        if( sCtx.cTerm==sCtx.cColSep ){
  6031          do{
  6032            xRead(&sCtx);
  6033            i++;
  6034          }while( sCtx.cTerm==sCtx.cColSep );
  6035          utf8_printf(stderr, "%s:%d: expected %d columns but found %d - "
  6036                          "extras ignored\n",
  6037                          sCtx.zFile, startLine, nCol, i);
  6038        }
  6039        if( i>=nCol ){
  6040          sqlite3_step(pStmt);
  6041          rc = sqlite3_reset(pStmt);
  6042          if( rc!=SQLITE_OK ){
  6043            utf8_printf(stderr, "%s:%d: INSERT failed: %s\n", sCtx.zFile,
  6044                        startLine, sqlite3_errmsg(p->db));
  6045          }
  6046        }
  6047      }while( sCtx.cTerm!=EOF );
  6048  
  6049      xCloser(sCtx.in);
  6050      sqlite3_free(sCtx.z);
  6051      sqlite3_finalize(pStmt);
  6052      if( needCommit ) sqlite3_exec(p->db, "COMMIT", 0, 0, 0);
  6053    }else
  6054  
  6055  #ifndef SQLITE_UNTESTABLE
  6056    if( c=='i' && strncmp(azArg[0], "imposter", n)==0 ){
  6057      char *zSql;
  6058      char *zCollist = 0;
  6059      sqlite3_stmt *pStmt;
  6060      int tnum = 0;
  6061      int i;
  6062      if( nArg!=3 ){
  6063        utf8_printf(stderr, "Usage: .imposter INDEX IMPOSTER\n");
  6064        rc = 1;
  6065        goto meta_command_exit;
  6066      }
  6067      open_db(p, 0);
  6068      zSql = sqlite3_mprintf("SELECT rootpage FROM sqlite_master"
  6069                             " WHERE name='%q' AND type='index'", azArg[1]);
  6070      sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
  6071      sqlite3_free(zSql);
  6072      if( sqlite3_step(pStmt)==SQLITE_ROW ){
  6073        tnum = sqlite3_column_int(pStmt, 0);
  6074      }
  6075      sqlite3_finalize(pStmt);
  6076      if( tnum==0 ){
  6077        utf8_printf(stderr, "no such index: \"%s\"\n", azArg[1]);
  6078        rc = 1;
  6079        goto meta_command_exit;
  6080      }
  6081      zSql = sqlite3_mprintf("PRAGMA index_xinfo='%q'", azArg[1]);
  6082      rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
  6083      sqlite3_free(zSql);
  6084      i = 0;
  6085      while( sqlite3_step(pStmt)==SQLITE_ROW ){
  6086        char zLabel[20];
  6087        const char *zCol = (const char*)sqlite3_column_text(pStmt,2);
  6088        i++;
  6089        if( zCol==0 ){
  6090          if( sqlite3_column_int(pStmt,1)==-1 ){
  6091            zCol = "_ROWID_";
  6092          }else{
  6093            sqlite3_snprintf(sizeof(zLabel),zLabel,"expr%d",i);
  6094            zCol = zLabel;
  6095          }
  6096        }
  6097        if( zCollist==0 ){
  6098          zCollist = sqlite3_mprintf("\"%w\"", zCol);
  6099        }else{
  6100          zCollist = sqlite3_mprintf("%z,\"%w\"", zCollist, zCol);
  6101        }
  6102      }
  6103      sqlite3_finalize(pStmt);
  6104      zSql = sqlite3_mprintf(
  6105            "CREATE TABLE \"%w\"(%s,PRIMARY KEY(%s))WITHOUT ROWID",
  6106            azArg[2], zCollist, zCollist);
  6107      sqlite3_free(zCollist);
  6108      rc = sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->db, "main", 1, tnum);
  6109      if( rc==SQLITE_OK ){
  6110        rc = sqlite3_exec(p->db, zSql, 0, 0, 0);
  6111        sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->db, "main", 0, 0);
  6112        if( rc ){
  6113          utf8_printf(stderr, "Error in [%s]: %s\n", zSql, sqlite3_errmsg(p->db));
  6114        }else{
  6115          utf8_printf(stdout, "%s;\n", zSql);
  6116          raw_printf(stdout,
  6117             "WARNING: writing to an imposter table will corrupt the index!\n"
  6118          );
  6119        }
  6120      }else{
  6121        raw_printf(stderr, "SQLITE_TESTCTRL_IMPOSTER returns %d\n", rc);
  6122        rc = 1;
  6123      }
  6124      sqlite3_free(zSql);
  6125    }else
  6126  #endif /* !defined(SQLITE_OMIT_TEST_CONTROL) */
  6127  
  6128  #ifdef SQLITE_ENABLE_IOTRACE
  6129    if( c=='i' && strncmp(azArg[0], "iotrace", n)==0 ){
  6130      SQLITE_API extern void (SQLITE_CDECL *sqlite3IoTrace)(const char*, ...);
  6131      if( iotrace && iotrace!=stdout ) fclose(iotrace);
  6132      iotrace = 0;
  6133      if( nArg<2 ){
  6134        sqlite3IoTrace = 0;
  6135      }else if( strcmp(azArg[1], "-")==0 ){
  6136        sqlite3IoTrace = iotracePrintf;
  6137        iotrace = stdout;
  6138      }else{
  6139        iotrace = fopen(azArg[1], "w");
  6140        if( iotrace==0 ){
  6141          utf8_printf(stderr, "Error: cannot open \"%s\"\n", azArg[1]);
  6142          sqlite3IoTrace = 0;
  6143          rc = 1;
  6144        }else{
  6145          sqlite3IoTrace = iotracePrintf;
  6146        }
  6147      }
  6148    }else
  6149  #endif
  6150  
  6151    if( c=='l' && n>=5 && strncmp(azArg[0], "limits", n)==0 ){
  6152      static const struct {
  6153         const char *zLimitName;   /* Name of a limit */
  6154         int limitCode;            /* Integer code for that limit */
  6155      } aLimit[] = {
  6156        { "length",                SQLITE_LIMIT_LENGTH                    },
  6157        { "sql_length",            SQLITE_LIMIT_SQL_LENGTH                },
  6158        { "column",                SQLITE_LIMIT_COLUMN                    },
  6159        { "expr_depth",            SQLITE_LIMIT_EXPR_DEPTH                },
  6160        { "compound_select",       SQLITE_LIMIT_COMPOUND_SELECT           },
  6161        { "vdbe_op",               SQLITE_LIMIT_VDBE_OP                   },
  6162        { "function_arg",          SQLITE_LIMIT_FUNCTION_ARG              },
  6163        { "attached",              SQLITE_LIMIT_ATTACHED                  },
  6164        { "like_pattern_length",   SQLITE_LIMIT_LIKE_PATTERN_LENGTH       },
  6165        { "variable_number",       SQLITE_LIMIT_VARIABLE_NUMBER           },
  6166        { "trigger_depth",         SQLITE_LIMIT_TRIGGER_DEPTH             },
  6167        { "worker_threads",        SQLITE_LIMIT_WORKER_THREADS            },
  6168      };
  6169      int i, n2;
  6170      open_db(p, 0);
  6171      if( nArg==1 ){
  6172        for(i=0; i<ArraySize(aLimit); i++){
  6173          printf("%20s %d\n", aLimit[i].zLimitName,
  6174                 sqlite3_limit(p->db, aLimit[i].limitCode, -1));
  6175        }
  6176      }else if( nArg>3 ){
  6177        raw_printf(stderr, "Usage: .limit NAME ?NEW-VALUE?\n");
  6178        rc = 1;
  6179        goto meta_command_exit;
  6180      }else{
  6181        int iLimit = -1;
  6182        n2 = strlen30(azArg[1]);
  6183        for(i=0; i<ArraySize(aLimit); i++){
  6184          if( sqlite3_strnicmp(aLimit[i].zLimitName, azArg[1], n2)==0 ){
  6185            if( iLimit<0 ){
  6186              iLimit = i;
  6187            }else{
  6188              utf8_printf(stderr, "ambiguous limit: \"%s\"\n", azArg[1]);
  6189              rc = 1;
  6190              goto meta_command_exit;
  6191            }
  6192          }
  6193        }
  6194        if( iLimit<0 ){
  6195          utf8_printf(stderr, "unknown limit: \"%s\"\n"
  6196                          "enter \".limits\" with no arguments for a list.\n",
  6197                           azArg[1]);
  6198          rc = 1;
  6199          goto meta_command_exit;
  6200        }
  6201        if( nArg==3 ){
  6202          sqlite3_limit(p->db, aLimit[iLimit].limitCode,
  6203                        (int)integerValue(azArg[2]));
  6204        }
  6205        printf("%20s %d\n", aLimit[iLimit].zLimitName,
  6206               sqlite3_limit(p->db, aLimit[iLimit].limitCode, -1));
  6207      }
  6208    }else
  6209  
  6210    if( c=='l' && n>2 && strncmp(azArg[0], "lint", n)==0 ){
  6211      open_db(p, 0);
  6212      lintDotCommand(p, azArg, nArg);
  6213    }else
  6214  
  6215  #ifndef SQLITE_OMIT_LOAD_EXTENSION
  6216    if( c=='l' && strncmp(azArg[0], "load", n)==0 ){
  6217      const char *zFile, *zProc;
  6218      char *zErrMsg = 0;
  6219      if( nArg<2 ){
  6220        raw_printf(stderr, "Usage: .load FILE ?ENTRYPOINT?\n");
  6221        rc = 1;
  6222        goto meta_command_exit;
  6223      }
  6224      zFile = azArg[1];
  6225      zProc = nArg>=3 ? azArg[2] : 0;
  6226      open_db(p, 0);
  6227      rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg);
  6228      if( rc!=SQLITE_OK ){
  6229        utf8_printf(stderr, "Error: %s\n", zErrMsg);
  6230        sqlite3_free(zErrMsg);
  6231        rc = 1;
  6232      }
  6233    }else
  6234  #endif
  6235  
  6236    if( c=='l' && strncmp(azArg[0], "log", n)==0 ){
  6237      if( nArg!=2 ){
  6238        raw_printf(stderr, "Usage: .log FILENAME\n");
  6239        rc = 1;
  6240      }else{
  6241        const char *zFile = azArg[1];
  6242        output_file_close(p->pLog);
  6243        p->pLog = output_file_open(zFile);
  6244      }
  6245    }else
  6246  
  6247    if( c=='m' && strncmp(azArg[0], "mode", n)==0 ){
  6248      const char *zMode = nArg>=2 ? azArg[1] : "";
  6249      int n2 = (int)strlen(zMode);
  6250      int c2 = zMode[0];
  6251      if( c2=='l' && n2>2 && strncmp(azArg[1],"lines",n2)==0 ){
  6252        p->mode = MODE_Line;
  6253        sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Row);
  6254      }else if( c2=='c' && strncmp(azArg[1],"columns",n2)==0 ){
  6255        p->mode = MODE_Column;
  6256        sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Row);
  6257      }else if( c2=='l' && n2>2 && strncmp(azArg[1],"list",n2)==0 ){
  6258        p->mode = MODE_List;
  6259        sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Column);
  6260        sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Row);
  6261      }else if( c2=='h' && strncmp(azArg[1],"html",n2)==0 ){
  6262        p->mode = MODE_Html;
  6263      }else if( c2=='t' && strncmp(azArg[1],"tcl",n2)==0 ){
  6264        p->mode = MODE_Tcl;
  6265        sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Space);
  6266        sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Row);
  6267      }else if( c2=='c' && strncmp(azArg[1],"csv",n2)==0 ){
  6268        p->mode = MODE_Csv;
  6269        sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Comma);
  6270        sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_CrLf);
  6271      }else if( c2=='t' && strncmp(azArg[1],"tabs",n2)==0 ){
  6272        p->mode = MODE_List;
  6273        sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Tab);
  6274      }else if( c2=='i' && strncmp(azArg[1],"insert",n2)==0 ){
  6275        p->mode = MODE_Insert;
  6276        set_table_name(p, nArg>=3 ? azArg[2] : "table");
  6277      }else if( c2=='q' && strncmp(azArg[1],"quote",n2)==0 ){
  6278        p->mode = MODE_Quote;
  6279      }else if( c2=='a' && strncmp(azArg[1],"ascii",n2)==0 ){
  6280        p->mode = MODE_Ascii;
  6281        sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Unit);
  6282        sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_Record);
  6283      }else if( nArg==1 ){
  6284        raw_printf(p->out, "current output mode: %s\n", modeDescr[p->mode]);
  6285      }else{
  6286        raw_printf(stderr, "Error: mode should be one of: "
  6287           "ascii column csv html insert line list quote tabs tcl\n");
  6288        rc = 1;
  6289      }
  6290      p->cMode = p->mode;
  6291    }else
  6292  
  6293    if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 ){
  6294      if( nArg==2 ){
  6295        sqlite3_snprintf(sizeof(p->nullValue), p->nullValue,
  6296                         "%.*s", (int)ArraySize(p->nullValue)-1, azArg[1]);
  6297      }else{
  6298        raw_printf(stderr, "Usage: .nullvalue STRING\n");
  6299        rc = 1;
  6300      }
  6301    }else
  6302  
  6303    if( c=='o' && strncmp(azArg[0], "open", n)==0 && n>=2 ){
  6304      char *zNewFilename;  /* Name of the database file to open */
  6305      int iName = 1;       /* Index in azArg[] of the filename */
  6306      int newFlag = 0;     /* True to delete file before opening */
  6307      /* Close the existing database */
  6308      session_close_all(p);
  6309      sqlite3_close(p->db);
  6310      p->db = 0;
  6311      p->zDbFilename = 0;
  6312      sqlite3_free(p->zFreeOnClose);
  6313      p->zFreeOnClose = 0;
  6314      /* Check for command-line arguments */
  6315      for(iName=1; iName<nArg && azArg[iName][0]=='-'; iName++){
  6316        const char *z = azArg[iName];
  6317        if( optionMatch(z,"new") ){
  6318          newFlag = 1;
  6319        }else if( z[0]=='-' ){
  6320          utf8_printf(stderr, "unknown option: %s\n", z);
  6321          rc = 1;
  6322          goto meta_command_exit;
  6323        }
  6324      }
  6325      /* If a filename is specified, try to open it first */
  6326      zNewFilename = nArg>iName ? sqlite3_mprintf("%s", azArg[iName]) : 0;
  6327      if( zNewFilename ){
  6328        if( newFlag ) shellDeleteFile(zNewFilename);
  6329        p->zDbFilename = zNewFilename;
  6330        open_db(p, 1);
  6331        if( p->db==0 ){
  6332          utf8_printf(stderr, "Error: cannot open '%s'\n", zNewFilename);
  6333          sqlite3_free(zNewFilename);
  6334        }else{
  6335          p->zFreeOnClose = zNewFilename;
  6336        }
  6337      }
  6338      if( p->db==0 ){
  6339        /* As a fall-back open a TEMP database */
  6340        p->zDbFilename = 0;
  6341        open_db(p, 0);
  6342      }
  6343    }else
  6344  
  6345    if( c=='o'
  6346     && (strncmp(azArg[0], "output", n)==0 || strncmp(azArg[0], "once", n)==0)
  6347    ){
  6348      const char *zFile = nArg>=2 ? azArg[1] : "stdout";
  6349      if( nArg>2 ){
  6350        utf8_printf(stderr, "Usage: .%s FILE\n", azArg[0]);
  6351        rc = 1;
  6352        goto meta_command_exit;
  6353      }
  6354      if( n>1 && strncmp(azArg[0], "once", n)==0 ){
  6355        if( nArg<2 ){
  6356          raw_printf(stderr, "Usage: .once FILE\n");
  6357          rc = 1;
  6358          goto meta_command_exit;
  6359        }
  6360        p->outCount = 2;
  6361      }else{
  6362        p->outCount = 0;
  6363      }
  6364      output_reset(p);
  6365      if( zFile[0]=='|' ){
  6366  #ifdef SQLITE_OMIT_POPEN
  6367        raw_printf(stderr, "Error: pipes are not supported in this OS\n");
  6368        rc = 1;
  6369        p->out = stdout;
  6370  #else
  6371        p->out = popen(zFile + 1, "w");
  6372        if( p->out==0 ){
  6373          utf8_printf(stderr,"Error: cannot open pipe \"%s\"\n", zFile + 1);
  6374          p->out = stdout;
  6375          rc = 1;
  6376        }else{
  6377          sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile);
  6378        }
  6379  #endif
  6380      }else{
  6381        p->out = output_file_open(zFile);
  6382        if( p->out==0 ){
  6383          if( strcmp(zFile,"off")!=0 ){
  6384            utf8_printf(stderr,"Error: cannot write to \"%s\"\n", zFile);
  6385          }
  6386          p->out = stdout;
  6387          rc = 1;
  6388        } else {
  6389          sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile);
  6390        }
  6391      }
  6392    }else
  6393  
  6394    if( c=='p' && n>=3 && strncmp(azArg[0], "print", n)==0 ){
  6395      int i;
  6396      for(i=1; i<nArg; i++){
  6397        if( i>1 ) raw_printf(p->out, " ");
  6398        utf8_printf(p->out, "%s", azArg[i]);
  6399      }
  6400      raw_printf(p->out, "\n");
  6401    }else
  6402  
  6403    if( c=='p' && strncmp(azArg[0], "prompt", n)==0 ){
  6404      if( nArg >= 2) {
  6405        strncpy(mainPrompt,azArg[1],(int)ArraySize(mainPrompt)-1);
  6406      }
  6407      if( nArg >= 3) {
  6408        strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1);
  6409      }
  6410    }else
  6411  
  6412    if( c=='q' && strncmp(azArg[0], "quit", n)==0 ){
  6413      rc = 2;
  6414    }else
  6415  
  6416    if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 ){
  6417      FILE *alt;
  6418      if( nArg!=2 ){
  6419        raw_printf(stderr, "Usage: .read FILE\n");
  6420        rc = 1;
  6421        goto meta_command_exit;
  6422      }
  6423      alt = fopen(azArg[1], "rb");
  6424      if( alt==0 ){
  6425        utf8_printf(stderr,"Error: cannot open \"%s\"\n", azArg[1]);
  6426        rc = 1;
  6427      }else{
  6428        rc = process_input(p, alt);
  6429        fclose(alt);
  6430      }
  6431    }else
  6432  
  6433    if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 ){
  6434      const char *zSrcFile;
  6435      const char *zDb;
  6436      sqlite3 *pSrc;
  6437      sqlite3_backup *pBackup;
  6438      int nTimeout = 0;
  6439  
  6440      if( nArg==2 ){
  6441        zSrcFile = azArg[1];
  6442        zDb = "main";
  6443      }else if( nArg==3 ){
  6444        zSrcFile = azArg[2];
  6445        zDb = azArg[1];
  6446      }else{
  6447        raw_printf(stderr, "Usage: .restore ?DB? FILE\n");
  6448        rc = 1;
  6449        goto meta_command_exit;
  6450      }
  6451      rc = sqlite3_open(zSrcFile, &pSrc);
  6452      if( rc!=SQLITE_OK ){
  6453        utf8_printf(stderr, "Error: cannot open \"%s\"\n", zSrcFile);
  6454        sqlite3_close(pSrc);
  6455        return 1;
  6456      }
  6457      open_db(p, 0);
  6458      pBackup = sqlite3_backup_init(p->db, zDb, pSrc, "main");
  6459      if( pBackup==0 ){
  6460        utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
  6461        sqlite3_close(pSrc);
  6462        return 1;
  6463      }
  6464      while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK
  6465            || rc==SQLITE_BUSY  ){
  6466        if( rc==SQLITE_BUSY ){
  6467          if( nTimeout++ >= 3 ) break;
  6468          sqlite3_sleep(100);
  6469        }
  6470      }
  6471      sqlite3_backup_finish(pBackup);
  6472      if( rc==SQLITE_DONE ){
  6473        rc = 0;
  6474      }else if( rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){
  6475        raw_printf(stderr, "Error: source database is busy\n");
  6476        rc = 1;
  6477      }else{
  6478        utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
  6479        rc = 1;
  6480      }
  6481      sqlite3_close(pSrc);
  6482    }else
  6483  
  6484  
  6485    if( c=='s' && strncmp(azArg[0], "scanstats", n)==0 ){
  6486      if( nArg==2 ){
  6487        p->scanstatsOn = booleanValue(azArg[1]);
  6488  #ifndef SQLITE_ENABLE_STMT_SCANSTATUS
  6489        raw_printf(stderr, "Warning: .scanstats not available in this build.\n");
  6490  #endif
  6491      }else{
  6492        raw_printf(stderr, "Usage: .scanstats on|off\n");
  6493        rc = 1;
  6494      }
  6495    }else
  6496  
  6497    if( c=='s' && strncmp(azArg[0], "schema", n)==0 ){
  6498      ShellText sSelect;
  6499      ShellState data;
  6500      char *zErrMsg = 0;
  6501      const char *zDiv = 0;
  6502      int iSchema = 0;
  6503  
  6504      open_db(p, 0);
  6505      memcpy(&data, p, sizeof(data));
  6506      data.showHeader = 0;
  6507      data.cMode = data.mode = MODE_Semi;
  6508      initText(&sSelect);
  6509      if( nArg>=2 && optionMatch(azArg[1], "indent") ){
  6510        data.cMode = data.mode = MODE_Pretty;
  6511        nArg--;
  6512        if( nArg==2 ) azArg[1] = azArg[2];
  6513      }
  6514      if( nArg==2 && azArg[1][0]!='-' ){
  6515        int i;
  6516        for(i=0; azArg[1][i]; i++) azArg[1][i] = ToLower(azArg[1][i]);
  6517        if( strcmp(azArg[1],"sqlite_master")==0 ){
  6518          char *new_argv[2], *new_colv[2];
  6519          new_argv[0] = "CREATE TABLE sqlite_master (\n"
  6520                        "  type text,\n"
  6521                        "  name text,\n"
  6522                        "  tbl_name text,\n"
  6523                        "  rootpage integer,\n"
  6524                        "  sql text\n"
  6525                        ")";
  6526          new_argv[1] = 0;
  6527          new_colv[0] = "sql";
  6528          new_colv[1] = 0;
  6529          callback(&data, 1, new_argv, new_colv);
  6530          rc = SQLITE_OK;
  6531        }else if( strcmp(azArg[1],"sqlite_temp_master")==0 ){
  6532          char *new_argv[2], *new_colv[2];
  6533          new_argv[0] = "CREATE TEMP TABLE sqlite_temp_master (\n"
  6534                        "  type text,\n"
  6535                        "  name text,\n"
  6536                        "  tbl_name text,\n"
  6537                        "  rootpage integer,\n"
  6538                        "  sql text\n"
  6539                        ")";
  6540          new_argv[1] = 0;
  6541          new_colv[0] = "sql";
  6542          new_colv[1] = 0;
  6543          callback(&data, 1, new_argv, new_colv);
  6544          rc = SQLITE_OK;
  6545        }else{
  6546          zDiv = "(";
  6547        }
  6548      }else if( nArg==1 ){
  6549        zDiv = "(";
  6550      }else{
  6551        raw_printf(stderr, "Usage: .schema ?--indent? ?LIKE-PATTERN?\n");
  6552        rc = 1;
  6553        goto meta_command_exit;
  6554      }
  6555      if( zDiv ){
  6556        sqlite3_stmt *pStmt = 0;
  6557        rc = sqlite3_prepare_v2(p->db, "SELECT name FROM pragma_database_list",
  6558                                -1, &pStmt, 0);
  6559        if( rc ){
  6560          utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db));
  6561          sqlite3_finalize(pStmt);
  6562          rc = 1;
  6563          goto meta_command_exit;
  6564        }
  6565        appendText(&sSelect, "SELECT sql FROM", 0);
  6566        iSchema = 0;
  6567        while( sqlite3_step(pStmt)==SQLITE_ROW ){
  6568          const char *zDb = (const char*)sqlite3_column_text(pStmt, 0);
  6569          char zScNum[30];
  6570          sqlite3_snprintf(sizeof(zScNum), zScNum, "%d", ++iSchema);
  6571          appendText(&sSelect, zDiv, 0);
  6572          zDiv = " UNION ALL ";
  6573          if( strcmp(zDb, "main")!=0 ){
  6574            appendText(&sSelect, "SELECT shell_add_schema(sql,", 0);
  6575            appendText(&sSelect, zDb, '"');
  6576            appendText(&sSelect, ") AS sql, type, tbl_name, name, rowid,", 0);
  6577            appendText(&sSelect, zScNum, 0);
  6578            appendText(&sSelect, " AS snum, ", 0);
  6579            appendText(&sSelect, zDb, '\'');
  6580            appendText(&sSelect, " AS sname FROM ", 0);
  6581            appendText(&sSelect, zDb, '"');
  6582            appendText(&sSelect, ".sqlite_master", 0);
  6583          }else{
  6584            appendText(&sSelect, "SELECT sql, type, tbl_name, name, rowid, ", 0);
  6585            appendText(&sSelect, zScNum, 0);
  6586            appendText(&sSelect, " AS snum, 'main' AS sname FROM sqlite_master",0);
  6587          }
  6588        }
  6589        sqlite3_finalize(pStmt);
  6590        appendText(&sSelect, ") WHERE ", 0);
  6591        if( nArg>1 ){
  6592          char *zQarg = sqlite3_mprintf("%Q", azArg[1]);
  6593          if( strchr(azArg[1], '.') ){
  6594            appendText(&sSelect, "lower(printf('%s.%s',sname,tbl_name))", 0);
  6595          }else{
  6596            appendText(&sSelect, "lower(tbl_name)", 0);
  6597          }
  6598          appendText(&sSelect, strchr(azArg[1], '*') ? " GLOB " : " LIKE ", 0);
  6599          appendText(&sSelect, zQarg, 0);
  6600          appendText(&sSelect, " AND ", 0);
  6601          sqlite3_free(zQarg);
  6602        }
  6603        appendText(&sSelect, "type!='meta' AND sql IS NOT NULL"
  6604                             " ORDER BY snum, rowid", 0);
  6605        rc = sqlite3_exec(p->db, sSelect.z, callback, &data, &zErrMsg);
  6606        freeText(&sSelect);
  6607      }
  6608      if( zErrMsg ){
  6609        utf8_printf(stderr,"Error: %s\n", zErrMsg);
  6610        sqlite3_free(zErrMsg);
  6611        rc = 1;
  6612      }else if( rc != SQLITE_OK ){
  6613        raw_printf(stderr,"Error: querying schema information\n");
  6614        rc = 1;
  6615      }else{
  6616        rc = 0;
  6617      }
  6618    }else
  6619  
  6620  #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_SELECTTRACE)
  6621    if( c=='s' && n==11 && strncmp(azArg[0], "selecttrace", n)==0 ){
  6622      sqlite3SelectTrace = (int)integerValue(azArg[1]);
  6623    }else
  6624  #endif
  6625  
  6626  #if defined(SQLITE_ENABLE_SESSION)
  6627    if( c=='s' && strncmp(azArg[0],"session",n)==0 && n>=3 ){
  6628      OpenSession *pSession = &p->aSession[0];
  6629      char **azCmd = &azArg[1];
  6630      int iSes = 0;
  6631      int nCmd = nArg - 1;
  6632      int i;
  6633      if( nArg<=1 ) goto session_syntax_error;
  6634      open_db(p, 0);
  6635      if( nArg>=3 ){
  6636        for(iSes=0; iSes<p->nSession; iSes++){
  6637          if( strcmp(p->aSession[iSes].zName, azArg[1])==0 ) break;
  6638        }
  6639        if( iSes<p->nSession ){
  6640          pSession = &p->aSession[iSes];
  6641          azCmd++;
  6642          nCmd--;
  6643        }else{
  6644          pSession = &p->aSession[0];
  6645          iSes = 0;
  6646        }
  6647      }
  6648  
  6649      /* .session attach TABLE
  6650      ** Invoke the sqlite3session_attach() interface to attach a particular
  6651      ** table so that it is never filtered.
  6652      */
  6653      if( strcmp(azCmd[0],"attach")==0 ){
  6654        if( nCmd!=2 ) goto session_syntax_error;
  6655        if( pSession->p==0 ){
  6656          session_not_open:
  6657          raw_printf(stderr, "ERROR: No sessions are open\n");
  6658        }else{
  6659          rc = sqlite3session_attach(pSession->p, azCmd[1]);
  6660          if( rc ){
  6661            raw_printf(stderr, "ERROR: sqlite3session_attach() returns %d\n", rc);
  6662            rc = 0;
  6663          }
  6664        }
  6665      }else
  6666  
  6667      /* .session changeset FILE
  6668      ** .session patchset FILE
  6669      ** Write a changeset or patchset into a file.  The file is overwritten.
  6670      */
  6671      if( strcmp(azCmd[0],"changeset")==0 || strcmp(azCmd[0],"patchset")==0 ){
  6672        FILE *out = 0;
  6673        if( nCmd!=2 ) goto session_syntax_error;
  6674        if( pSession->p==0 ) goto session_not_open;
  6675        out = fopen(azCmd[1], "wb");
  6676        if( out==0 ){
  6677          utf8_printf(stderr, "ERROR: cannot open \"%s\" for writing\n", azCmd[1]);
  6678        }else{
  6679          int szChng;
  6680          void *pChng;
  6681          if( azCmd[0][0]=='c' ){
  6682            rc = sqlite3session_changeset(pSession->p, &szChng, &pChng);
  6683          }else{
  6684            rc = sqlite3session_patchset(pSession->p, &szChng, &pChng);
  6685          }
  6686          if( rc ){
  6687            printf("Error: error code %d\n", rc);
  6688            rc = 0;
  6689          }
  6690          if( pChng
  6691            && fwrite(pChng, szChng, 1, out)!=1 ){
  6692            raw_printf(stderr, "ERROR: Failed to write entire %d-byte output\n",
  6693                    szChng);
  6694          }
  6695          sqlite3_free(pChng);
  6696          fclose(out);
  6697        }
  6698      }else
  6699  
  6700      /* .session close
  6701      ** Close the identified session
  6702      */
  6703      if( strcmp(azCmd[0], "close")==0 ){
  6704        if( nCmd!=1 ) goto session_syntax_error;
  6705        if( p->nSession ){
  6706          session_close(pSession);
  6707          p->aSession[iSes] = p->aSession[--p->nSession];
  6708        }
  6709      }else
  6710  
  6711      /* .session enable ?BOOLEAN?
  6712      ** Query or set the enable flag
  6713      */
  6714      if( strcmp(azCmd[0], "enable")==0 ){
  6715        int ii;
  6716        if( nCmd>2 ) goto session_syntax_error;
  6717        ii = nCmd==1 ? -1 : booleanValue(azCmd[1]);
  6718        if( p->nSession ){
  6719          ii = sqlite3session_enable(pSession->p, ii);
  6720          utf8_printf(p->out, "session %s enable flag = %d\n",
  6721                      pSession->zName, ii);
  6722        }
  6723      }else
  6724  
  6725      /* .session filter GLOB ....
  6726      ** Set a list of GLOB patterns of table names to be excluded.
  6727      */
  6728      if( strcmp(azCmd[0], "filter")==0 ){
  6729        int ii, nByte;
  6730        if( nCmd<2 ) goto session_syntax_error;
  6731        if( p->nSession ){
  6732          for(ii=0; ii<pSession->nFilter; ii++){
  6733            sqlite3_free(pSession->azFilter[ii]);
  6734          }
  6735          sqlite3_free(pSession->azFilter);
  6736          nByte = sizeof(pSession->azFilter[0])*(nCmd-1);
  6737          pSession->azFilter = sqlite3_malloc( nByte );
  6738          if( pSession->azFilter==0 ){
  6739            raw_printf(stderr, "Error: out or memory\n");
  6740            exit(1);
  6741          }
  6742          for(ii=1; ii<nCmd; ii++){
  6743            pSession->azFilter[ii-1] = sqlite3_mprintf("%s", azCmd[ii]);
  6744          }
  6745          pSession->nFilter = ii-1;
  6746        }
  6747      }else
  6748  
  6749      /* .session indirect ?BOOLEAN?
  6750      ** Query or set the indirect flag
  6751      */
  6752      if( strcmp(azCmd[0], "indirect")==0 ){
  6753        int ii;
  6754        if( nCmd>2 ) goto session_syntax_error;
  6755        ii = nCmd==1 ? -1 : booleanValue(azCmd[1]);
  6756        if( p->nSession ){
  6757          ii = sqlite3session_indirect(pSession->p, ii);
  6758          utf8_printf(p->out, "session %s indirect flag = %d\n",
  6759                      pSession->zName, ii);
  6760        }
  6761      }else
  6762  
  6763      /* .session isempty
  6764      ** Determine if the session is empty
  6765      */
  6766      if( strcmp(azCmd[0], "isempty")==0 ){
  6767        int ii;
  6768        if( nCmd!=1 ) goto session_syntax_error;
  6769        if( p->nSession ){
  6770          ii = sqlite3session_isempty(pSession->p);
  6771          utf8_printf(p->out, "session %s isempty flag = %d\n",
  6772                      pSession->zName, ii);
  6773        }
  6774      }else
  6775  
  6776      /* .session list
  6777      ** List all currently open sessions
  6778      */
  6779      if( strcmp(azCmd[0],"list")==0 ){
  6780        for(i=0; i<p->nSession; i++){
  6781          utf8_printf(p->out, "%d %s\n", i, p->aSession[i].zName);
  6782        }
  6783      }else
  6784  
  6785      /* .session open DB NAME
  6786      ** Open a new session called NAME on the attached database DB.
  6787      ** DB is normally "main".
  6788      */
  6789      if( strcmp(azCmd[0],"open")==0 ){
  6790        char *zName;
  6791        if( nCmd!=3 ) goto session_syntax_error;
  6792        zName = azCmd[2];
  6793        if( zName[0]==0 ) goto session_syntax_error;
  6794        for(i=0; i<p->nSession; i++){
  6795          if( strcmp(p->aSession[i].zName,zName)==0 ){
  6796            utf8_printf(stderr, "Session \"%s\" already exists\n", zName);
  6797            goto meta_command_exit;
  6798          }
  6799        }
  6800        if( p->nSession>=ArraySize(p->aSession) ){
  6801          raw_printf(stderr, "Maximum of %d sessions\n", ArraySize(p->aSession));
  6802          goto meta_command_exit;
  6803        }
  6804        pSession = &p->aSession[p->nSession];
  6805        rc = sqlite3session_create(p->db, azCmd[1], &pSession->p);
  6806        if( rc ){
  6807          raw_printf(stderr, "Cannot open session: error code=%d\n", rc);
  6808          rc = 0;
  6809          goto meta_command_exit;
  6810        }
  6811        pSession->nFilter = 0;
  6812        sqlite3session_table_filter(pSession->p, session_filter, pSession);
  6813        p->nSession++;
  6814        pSession->zName = sqlite3_mprintf("%s", zName);
  6815      }else
  6816      /* If no command name matches, show a syntax error */
  6817      session_syntax_error:
  6818      session_help(p);
  6819    }else
  6820  #endif
  6821  
  6822  #ifdef SQLITE_DEBUG
  6823    /* Undocumented commands for internal testing.  Subject to change
  6824    ** without notice. */
  6825    if( c=='s' && n>=10 && strncmp(azArg[0], "selftest-", 9)==0 ){
  6826      if( strncmp(azArg[0]+9, "boolean", n-9)==0 ){
  6827        int i, v;
  6828        for(i=1; i<nArg; i++){
  6829          v = booleanValue(azArg[i]);
  6830          utf8_printf(p->out, "%s: %d 0x%x\n", azArg[i], v, v);
  6831        }
  6832      }
  6833      if( strncmp(azArg[0]+9, "integer", n-9)==0 ){
  6834        int i; sqlite3_int64 v;
  6835        for(i=1; i<nArg; i++){
  6836          char zBuf[200];
  6837          v = integerValue(azArg[i]);
  6838          sqlite3_snprintf(sizeof(zBuf),zBuf,"%s: %lld 0x%llx\n", azArg[i],v,v);
  6839          utf8_printf(p->out, "%s", zBuf);
  6840        }
  6841      }
  6842    }else
  6843  #endif
  6844  
  6845    if( c=='s' && n>=4 && strncmp(azArg[0],"selftest",n)==0 ){
  6846      int bIsInit = 0;         /* True to initialize the SELFTEST table */
  6847      int bVerbose = 0;        /* Verbose output */
  6848      int bSelftestExists;     /* True if SELFTEST already exists */
  6849      int i, k;                /* Loop counters */
  6850      int nTest = 0;           /* Number of tests runs */
  6851      int nErr = 0;            /* Number of errors seen */
  6852      ShellText str;           /* Answer for a query */
  6853      sqlite3_stmt *pStmt = 0; /* Query against the SELFTEST table */
  6854  
  6855      open_db(p,0);
  6856      for(i=1; i<nArg; i++){
  6857        const char *z = azArg[i];
  6858        if( z[0]=='-' && z[1]=='-' ) z++;
  6859        if( strcmp(z,"-init")==0 ){
  6860          bIsInit = 1;
  6861        }else
  6862        if( strcmp(z,"-v")==0 ){
  6863          bVerbose++;
  6864        }else
  6865        {
  6866          utf8_printf(stderr, "Unknown option \"%s\" on \"%s\"\n",
  6867                      azArg[i], azArg[0]);
  6868          raw_printf(stderr, "Should be one of: --init -v\n");
  6869          rc = 1;
  6870          goto meta_command_exit;
  6871        }
  6872      }
  6873      if( sqlite3_table_column_metadata(p->db,"main","selftest",0,0,0,0,0,0)
  6874             != SQLITE_OK ){
  6875        bSelftestExists = 0;
  6876      }else{
  6877        bSelftestExists = 1;
  6878      }
  6879      if( bIsInit ){
  6880        createSelftestTable(p);
  6881        bSelftestExists = 1;
  6882      }
  6883      initText(&str);
  6884      appendText(&str, "x", 0);
  6885      for(k=bSelftestExists; k>=0; k--){
  6886        if( k==1 ){
  6887          rc = sqlite3_prepare_v2(p->db,
  6888              "SELECT tno,op,cmd,ans FROM selftest ORDER BY tno",
  6889              -1, &pStmt, 0);
  6890        }else{
  6891          rc = sqlite3_prepare_v2(p->db,
  6892            "VALUES(0,'memo','Missing SELFTEST table - default checks only',''),"
  6893            "      (1,'run','PRAGMA integrity_check','ok')",
  6894            -1, &pStmt, 0);
  6895        }
  6896        if( rc ){
  6897          raw_printf(stderr, "Error querying the selftest table\n");
  6898          rc = 1;
  6899          sqlite3_finalize(pStmt);
  6900          goto meta_command_exit;
  6901        }
  6902        for(i=1; sqlite3_step(pStmt)==SQLITE_ROW; i++){
  6903          int tno = sqlite3_column_int(pStmt, 0);
  6904          const char *zOp = (const char*)sqlite3_column_text(pStmt, 1);
  6905          const char *zSql = (const char*)sqlite3_column_text(pStmt, 2);
  6906          const char *zAns = (const char*)sqlite3_column_text(pStmt, 3);
  6907  
  6908          k = 0;
  6909          if( bVerbose>0 ){
  6910            char *zQuote = sqlite3_mprintf("%q", zSql);
  6911            printf("%d: %s %s\n", tno, zOp, zSql);
  6912            sqlite3_free(zQuote);
  6913          }
  6914          if( strcmp(zOp,"memo")==0 ){
  6915            utf8_printf(p->out, "%s\n", zSql);
  6916          }else
  6917          if( strcmp(zOp,"run")==0 ){
  6918            char *zErrMsg = 0;
  6919            str.n = 0;
  6920            str.z[0] = 0;
  6921            rc = sqlite3_exec(p->db, zSql, captureOutputCallback, &str, &zErrMsg);
  6922            nTest++;
  6923            if( bVerbose ){
  6924              utf8_printf(p->out, "Result: %s\n", str.z);
  6925            }
  6926            if( rc || zErrMsg ){
  6927              nErr++;
  6928              rc = 1;
  6929              utf8_printf(p->out, "%d: error-code-%d: %s\n", tno, rc, zErrMsg);
  6930              sqlite3_free(zErrMsg);
  6931            }else if( strcmp(zAns,str.z)!=0 ){
  6932              nErr++;
  6933              rc = 1;
  6934              utf8_printf(p->out, "%d: Expected: [%s]\n", tno, zAns);
  6935              utf8_printf(p->out, "%d:      Got: [%s]\n", tno, str.z);
  6936            }
  6937          }else
  6938          {
  6939            utf8_printf(stderr,
  6940              "Unknown operation \"%s\" on selftest line %d\n", zOp, tno);
  6941            rc = 1;
  6942            break;
  6943          }
  6944        } /* End loop over rows of content from SELFTEST */
  6945        sqlite3_finalize(pStmt);
  6946      } /* End loop over k */
  6947      freeText(&str);
  6948      utf8_printf(p->out, "%d errors out of %d tests\n", nErr, nTest);
  6949    }else
  6950  
  6951    if( c=='s' && strncmp(azArg[0], "separator", n)==0 ){
  6952      if( nArg<2 || nArg>3 ){
  6953        raw_printf(stderr, "Usage: .separator COL ?ROW?\n");
  6954        rc = 1;
  6955      }
  6956      if( nArg>=2 ){
  6957        sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator,
  6958                         "%.*s", (int)ArraySize(p->colSeparator)-1, azArg[1]);
  6959      }
  6960      if( nArg>=3 ){
  6961        sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator,
  6962                         "%.*s", (int)ArraySize(p->rowSeparator)-1, azArg[2]);
  6963      }
  6964    }else
  6965  
  6966    if( c=='s' && n>=4 && strncmp(azArg[0],"sha3sum",n)==0 ){
  6967      const char *zLike = 0;   /* Which table to checksum. 0 means everything */
  6968      int i;                   /* Loop counter */
  6969      int bSchema = 0;         /* Also hash the schema */
  6970      int bSeparate = 0;       /* Hash each table separately */
  6971      int iSize = 224;         /* Hash algorithm to use */
  6972      int bDebug = 0;          /* Only show the query that would have run */
  6973      sqlite3_stmt *pStmt;     /* For querying tables names */
  6974      char *zSql;              /* SQL to be run */
  6975      char *zSep;              /* Separator */
  6976      ShellText sSql;          /* Complete SQL for the query to run the hash */
  6977      ShellText sQuery;        /* Set of queries used to read all content */
  6978      open_db(p, 0);
  6979      for(i=1; i<nArg; i++){
  6980        const char *z = azArg[i];
  6981        if( z[0]=='-' ){
  6982          z++;
  6983          if( z[0]=='-' ) z++;
  6984          if( strcmp(z,"schema")==0 ){
  6985            bSchema = 1;
  6986          }else
  6987          if( strcmp(z,"sha3-224")==0 || strcmp(z,"sha3-256")==0
  6988           || strcmp(z,"sha3-384")==0 || strcmp(z,"sha3-512")==0
  6989          ){
  6990            iSize = atoi(&z[5]);
  6991          }else
  6992          if( strcmp(z,"debug")==0 ){
  6993            bDebug = 1;
  6994          }else
  6995          {
  6996            utf8_printf(stderr, "Unknown option \"%s\" on \"%s\"\n",
  6997                        azArg[i], azArg[0]);
  6998            raw_printf(stderr, "Should be one of: --schema"
  6999                               " --sha3-224 --sha3-255 --sha3-384 --sha3-512\n");
  7000            rc = 1;
  7001            goto meta_command_exit;
  7002          }
  7003        }else if( zLike ){
  7004          raw_printf(stderr, "Usage: .sha3sum ?OPTIONS? ?LIKE-PATTERN?\n");
  7005          rc = 1;
  7006          goto meta_command_exit;
  7007        }else{
  7008          zLike = z;
  7009          bSeparate = 1;
  7010          if( sqlite3_strlike("sqlite_%", zLike, 0)==0 ) bSchema = 1;
  7011        }
  7012      }
  7013      if( bSchema ){
  7014        zSql = "SELECT lower(name) FROM sqlite_master"
  7015               " WHERE type='table' AND coalesce(rootpage,0)>1"
  7016               " UNION ALL SELECT 'sqlite_master'"
  7017               " ORDER BY 1 collate nocase";
  7018      }else{
  7019        zSql = "SELECT lower(name) FROM sqlite_master"
  7020               " WHERE type='table' AND coalesce(rootpage,0)>1"
  7021               " AND name NOT LIKE 'sqlite_%'"
  7022               " ORDER BY 1 collate nocase";
  7023      }
  7024      sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
  7025      initText(&sQuery);
  7026      initText(&sSql);
  7027      appendText(&sSql, "WITH [sha3sum$query](a,b) AS(",0);
  7028      zSep = "VALUES(";
  7029      while( SQLITE_ROW==sqlite3_step(pStmt) ){
  7030        const char *zTab = (const char*)sqlite3_column_text(pStmt,0);
  7031        if( zLike && sqlite3_strlike(zLike, zTab, 0)!=0 ) continue;
  7032        if( strncmp(zTab, "sqlite_",7)!=0 ){
  7033          appendText(&sQuery,"SELECT * FROM ", 0);
  7034          appendText(&sQuery,zTab,'"');
  7035          appendText(&sQuery," NOT INDEXED;", 0);
  7036        }else if( strcmp(zTab, "sqlite_master")==0 ){
  7037          appendText(&sQuery,"SELECT type,name,tbl_name,sql FROM sqlite_master"
  7038                             " ORDER BY name;", 0);
  7039        }else if( strcmp(zTab, "sqlite_sequence")==0 ){
  7040          appendText(&sQuery,"SELECT name,seq FROM sqlite_sequence"
  7041                             " ORDER BY name;", 0);
  7042        }else if( strcmp(zTab, "sqlite_stat1")==0 ){
  7043          appendText(&sQuery,"SELECT tbl,idx,stat FROM sqlite_stat1"
  7044                             " ORDER BY tbl,idx;", 0);
  7045        }else if( strcmp(zTab, "sqlite_stat3")==0
  7046               || strcmp(zTab, "sqlite_stat4")==0 ){
  7047          appendText(&sQuery, "SELECT * FROM ", 0);
  7048          appendText(&sQuery, zTab, 0);
  7049          appendText(&sQuery, " ORDER BY tbl, idx, rowid;\n", 0);
  7050        }
  7051        appendText(&sSql, zSep, 0);
  7052        appendText(&sSql, sQuery.z, '\'');
  7053        sQuery.n = 0;
  7054        appendText(&sSql, ",", 0);
  7055        appendText(&sSql, zTab, '\'');
  7056        zSep = "),(";
  7057      }
  7058      sqlite3_finalize(pStmt);
  7059      if( bSeparate ){
  7060        zSql = sqlite3_mprintf(
  7061            "%s))"
  7062            " SELECT lower(hex(sha3_query(a,%d))) AS hash, b AS label"
  7063            "   FROM [sha3sum$query]",
  7064            sSql.z, iSize);
  7065      }else{
  7066        zSql = sqlite3_mprintf(
  7067            "%s))"
  7068            " SELECT lower(hex(sha3_query(group_concat(a,''),%d))) AS hash"
  7069            "   FROM [sha3sum$query]",
  7070            sSql.z, iSize);
  7071      }
  7072      freeText(&sQuery);
  7073      freeText(&sSql);
  7074      if( bDebug ){
  7075        utf8_printf(p->out, "%s\n", zSql);
  7076      }else{
  7077        shell_exec(p->db, zSql, shell_callback, p, 0);
  7078      }
  7079      sqlite3_free(zSql);
  7080    }else
  7081  
  7082    if( c=='s'
  7083     && (strncmp(azArg[0], "shell", n)==0 || strncmp(azArg[0],"system",n)==0)
  7084    ){
  7085      char *zCmd;
  7086      int i, x;
  7087      if( nArg<2 ){
  7088        raw_printf(stderr, "Usage: .system COMMAND\n");
  7089        rc = 1;
  7090        goto meta_command_exit;
  7091      }
  7092      zCmd = sqlite3_mprintf(strchr(azArg[1],' ')==0?"%s":"\"%s\"", azArg[1]);
  7093      for(i=2; i<nArg; i++){
  7094        zCmd = sqlite3_mprintf(strchr(azArg[i],' ')==0?"%z %s":"%z \"%s\"",
  7095                               zCmd, azArg[i]);
  7096      }
  7097      x = system(zCmd);
  7098      sqlite3_free(zCmd);
  7099      if( x ) raw_printf(stderr, "System command returns %d\n", x);
  7100    }else
  7101  
  7102    if( c=='s' && strncmp(azArg[0], "show", n)==0 ){
  7103      static const char *azBool[] = { "off", "on", "full", "unk" };
  7104      int i;
  7105      if( nArg!=1 ){
  7106        raw_printf(stderr, "Usage: .show\n");
  7107        rc = 1;
  7108        goto meta_command_exit;
  7109      }
  7110      utf8_printf(p->out, "%12.12s: %s\n","echo",
  7111                                    azBool[ShellHasFlag(p, SHFLG_Echo)]);
  7112      utf8_printf(p->out, "%12.12s: %s\n","eqp", azBool[p->autoEQP&3]);
  7113      utf8_printf(p->out, "%12.12s: %s\n","explain",
  7114           p->mode==MODE_Explain ? "on" : p->autoExplain ? "auto" : "off");
  7115      utf8_printf(p->out,"%12.12s: %s\n","headers", azBool[p->showHeader!=0]);
  7116      utf8_printf(p->out, "%12.12s: %s\n","mode", modeDescr[p->mode]);
  7117      utf8_printf(p->out, "%12.12s: ", "nullvalue");
  7118        output_c_string(p->out, p->nullValue);
  7119        raw_printf(p->out, "\n");
  7120      utf8_printf(p->out,"%12.12s: %s\n","output",
  7121              strlen30(p->outfile) ? p->outfile : "stdout");
  7122      utf8_printf(p->out,"%12.12s: ", "colseparator");
  7123        output_c_string(p->out, p->colSeparator);
  7124        raw_printf(p->out, "\n");
  7125      utf8_printf(p->out,"%12.12s: ", "rowseparator");
  7126        output_c_string(p->out, p->rowSeparator);
  7127        raw_printf(p->out, "\n");
  7128      utf8_printf(p->out, "%12.12s: %s\n","stats", azBool[p->statsOn!=0]);
  7129      utf8_printf(p->out, "%12.12s: ", "width");
  7130      for (i=0;i<(int)ArraySize(p->colWidth) && p->colWidth[i] != 0;i++) {
  7131        raw_printf(p->out, "%d ", p->colWidth[i]);
  7132      }
  7133      raw_printf(p->out, "\n");
  7134      utf8_printf(p->out, "%12.12s: %s\n", "filename",
  7135                  p->zDbFilename ? p->zDbFilename : "");
  7136    }else
  7137  
  7138    if( c=='s' && strncmp(azArg[0], "stats", n)==0 ){
  7139      if( nArg==2 ){
  7140        p->statsOn = booleanValue(azArg[1]);
  7141      }else if( nArg==1 ){
  7142        display_stats(p->db, p, 0);
  7143      }else{
  7144        raw_printf(stderr, "Usage: .stats ?on|off?\n");
  7145        rc = 1;
  7146      }
  7147    }else
  7148  
  7149    if( (c=='t' && n>1 && strncmp(azArg[0], "tables", n)==0)
  7150     || (c=='i' && (strncmp(azArg[0], "indices", n)==0
  7151                   || strncmp(azArg[0], "indexes", n)==0) )
  7152    ){
  7153      sqlite3_stmt *pStmt;
  7154      char **azResult;
  7155      int nRow, nAlloc;
  7156      int ii;
  7157      ShellText s;
  7158      initText(&s);
  7159      open_db(p, 0);
  7160      rc = sqlite3_prepare_v2(p->db, "PRAGMA database_list", -1, &pStmt, 0);
  7161      if( rc ) return shellDatabaseError(p->db);
  7162  
  7163      if( nArg>2 && c=='i' ){
  7164        /* It is an historical accident that the .indexes command shows an error
  7165        ** when called with the wrong number of arguments whereas the .tables
  7166        ** command does not. */
  7167        raw_printf(stderr, "Usage: .indexes ?LIKE-PATTERN?\n");
  7168        rc = 1;
  7169        goto meta_command_exit;
  7170      }
  7171      for(ii=0; sqlite3_step(pStmt)==SQLITE_ROW; ii++){
  7172        const char *zDbName = (const char*)sqlite3_column_text(pStmt, 1);
  7173        if( zDbName==0 ) continue;
  7174        if( s.z && s.z[0] ) appendText(&s, " UNION ALL ", 0);
  7175        if( sqlite3_stricmp(zDbName, "main")==0 ){
  7176          appendText(&s, "SELECT name FROM ", 0);
  7177        }else{
  7178          appendText(&s, "SELECT ", 0);
  7179          appendText(&s, zDbName, '\'');
  7180          appendText(&s, "||'.'||name FROM ", 0);
  7181        }
  7182        appendText(&s, zDbName, '"');
  7183        appendText(&s, ".sqlite_master ", 0);
  7184        if( c=='t' ){
  7185          appendText(&s," WHERE type IN ('table','view')"
  7186                        "   AND name NOT LIKE 'sqlite_%'"
  7187                        "   AND name LIKE ?1", 0);
  7188        }else{
  7189          appendText(&s," WHERE type='index'"
  7190                        "   AND tbl_name LIKE ?1", 0);
  7191        }
  7192      }
  7193      rc = sqlite3_finalize(pStmt);
  7194      appendText(&s, " ORDER BY 1", 0);
  7195      rc = sqlite3_prepare_v2(p->db, s.z, -1, &pStmt, 0);
  7196      freeText(&s);
  7197      if( rc ) return shellDatabaseError(p->db);
  7198  
  7199      /* Run the SQL statement prepared by the above block. Store the results
  7200      ** as an array of nul-terminated strings in azResult[].  */
  7201      nRow = nAlloc = 0;
  7202      azResult = 0;
  7203      if( nArg>1 ){
  7204        sqlite3_bind_text(pStmt, 1, azArg[1], -1, SQLITE_TRANSIENT);
  7205      }else{
  7206        sqlite3_bind_text(pStmt, 1, "%", -1, SQLITE_STATIC);
  7207      }
  7208      while( sqlite3_step(pStmt)==SQLITE_ROW ){
  7209        if( nRow>=nAlloc ){
  7210          char **azNew;
  7211          int n2 = nAlloc*2 + 10;
  7212          azNew = sqlite3_realloc64(azResult, sizeof(azResult[0])*n2);
  7213          if( azNew==0 ){
  7214            rc = shellNomemError();
  7215            break;
  7216          }
  7217          nAlloc = n2;
  7218          azResult = azNew;
  7219        }
  7220        azResult[nRow] = sqlite3_mprintf("%s", sqlite3_column_text(pStmt, 0));
  7221        if( 0==azResult[nRow] ){
  7222          rc = shellNomemError();
  7223          break;
  7224        }
  7225        nRow++;
  7226      }
  7227      if( sqlite3_finalize(pStmt)!=SQLITE_OK ){
  7228        rc = shellDatabaseError(p->db);
  7229      }
  7230  
  7231      /* Pretty-print the contents of array azResult[] to the output */
  7232      if( rc==0 && nRow>0 ){
  7233        int len, maxlen = 0;
  7234        int i, j;
  7235        int nPrintCol, nPrintRow;
  7236        for(i=0; i<nRow; i++){
  7237          len = strlen30(azResult[i]);
  7238          if( len>maxlen ) maxlen = len;
  7239        }
  7240        nPrintCol = 80/(maxlen+2);
  7241        if( nPrintCol<1 ) nPrintCol = 1;
  7242        nPrintRow = (nRow + nPrintCol - 1)/nPrintCol;
  7243        for(i=0; i<nPrintRow; i++){
  7244          for(j=i; j<nRow; j+=nPrintRow){
  7245            char *zSp = j<nPrintRow ? "" : "  ";
  7246            utf8_printf(p->out, "%s%-*s", zSp, maxlen,
  7247                        azResult[j] ? azResult[j]:"");
  7248          }
  7249          raw_printf(p->out, "\n");
  7250        }
  7251      }
  7252  
  7253      for(ii=0; ii<nRow; ii++) sqlite3_free(azResult[ii]);
  7254      sqlite3_free(azResult);
  7255    }else
  7256  
  7257    /* Begin redirecting output to the file "testcase-out.txt" */
  7258    if( c=='t' && strcmp(azArg[0],"testcase")==0 ){
  7259      output_reset(p);
  7260      p->out = output_file_open("testcase-out.txt");
  7261      if( p->out==0 ){
  7262        raw_printf(stderr, "Error: cannot open 'testcase-out.txt'\n");
  7263      }
  7264      if( nArg>=2 ){
  7265        sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "%s", azArg[1]);
  7266      }else{
  7267        sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "?");
  7268      }
  7269    }else
  7270  
  7271  #ifndef SQLITE_UNTESTABLE
  7272    if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 && nArg>=2 ){
  7273      static const struct {
  7274         const char *zCtrlName;   /* Name of a test-control option */
  7275         int ctrlCode;            /* Integer code for that option */
  7276      } aCtrl[] = {
  7277        { "prng_save",             SQLITE_TESTCTRL_PRNG_SAVE              },
  7278        { "prng_restore",          SQLITE_TESTCTRL_PRNG_RESTORE           },
  7279        { "prng_reset",            SQLITE_TESTCTRL_PRNG_RESET             },
  7280        { "bitvec_test",           SQLITE_TESTCTRL_BITVEC_TEST            },
  7281        { "fault_install",         SQLITE_TESTCTRL_FAULT_INSTALL          },
  7282        { "benign_malloc_hooks",   SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS    },
  7283        { "pending_byte",          SQLITE_TESTCTRL_PENDING_BYTE           },
  7284        { "assert",                SQLITE_TESTCTRL_ASSERT                 },
  7285        { "always",                SQLITE_TESTCTRL_ALWAYS                 },
  7286        { "reserve",               SQLITE_TESTCTRL_RESERVE                },
  7287        { "optimizations",         SQLITE_TESTCTRL_OPTIMIZATIONS          },
  7288        { "iskeyword",             SQLITE_TESTCTRL_ISKEYWORD              },
  7289        { "byteorder",             SQLITE_TESTCTRL_BYTEORDER              },
  7290        { "never_corrupt",         SQLITE_TESTCTRL_NEVER_CORRUPT          },
  7291        { "imposter",              SQLITE_TESTCTRL_IMPOSTER               },
  7292      };
  7293      int testctrl = -1;
  7294      int rc2 = 0;
  7295      int i, n2;
  7296      open_db(p, 0);
  7297  
  7298      /* convert testctrl text option to value. allow any unique prefix
  7299      ** of the option name, or a numerical value. */
  7300      n2 = strlen30(azArg[1]);
  7301      for(i=0; i<ArraySize(aCtrl); i++){
  7302        if( strncmp(azArg[1], aCtrl[i].zCtrlName, n2)==0 ){
  7303          if( testctrl<0 ){
  7304            testctrl = aCtrl[i].ctrlCode;
  7305          }else{
  7306            utf8_printf(stderr, "ambiguous option name: \"%s\"\n", azArg[1]);
  7307            testctrl = -1;
  7308            break;
  7309          }
  7310        }
  7311      }
  7312      if( testctrl<0 ) testctrl = (int)integerValue(azArg[1]);
  7313      if( (testctrl<SQLITE_TESTCTRL_FIRST) || (testctrl>SQLITE_TESTCTRL_LAST) ){
  7314        utf8_printf(stderr,"Error: invalid testctrl option: %s\n", azArg[1]);
  7315      }else{
  7316        switch(testctrl){
  7317  
  7318          /* sqlite3_test_control(int, db, int) */
  7319          case SQLITE_TESTCTRL_OPTIMIZATIONS:
  7320          case SQLITE_TESTCTRL_RESERVE:
  7321            if( nArg==3 ){
  7322              int opt = (int)strtol(azArg[2], 0, 0);
  7323              rc2 = sqlite3_test_control(testctrl, p->db, opt);
  7324              raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2);
  7325            } else {
  7326              utf8_printf(stderr,"Error: testctrl %s takes a single int option\n",
  7327                      azArg[1]);
  7328            }
  7329            break;
  7330  
  7331          /* sqlite3_test_control(int) */
  7332          case SQLITE_TESTCTRL_PRNG_SAVE:
  7333          case SQLITE_TESTCTRL_PRNG_RESTORE:
  7334          case SQLITE_TESTCTRL_PRNG_RESET:
  7335          case SQLITE_TESTCTRL_BYTEORDER:
  7336            if( nArg==2 ){
  7337              rc2 = sqlite3_test_control(testctrl);
  7338              raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2);
  7339            } else {
  7340              utf8_printf(stderr,"Error: testctrl %s takes no options\n",
  7341                          azArg[1]);
  7342            }
  7343            break;
  7344  
  7345          /* sqlite3_test_control(int, uint) */
  7346          case SQLITE_TESTCTRL_PENDING_BYTE:
  7347            if( nArg==3 ){
  7348              unsigned int opt = (unsigned int)integerValue(azArg[2]);
  7349              rc2 = sqlite3_test_control(testctrl, opt);
  7350              raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2);
  7351            } else {
  7352              utf8_printf(stderr,"Error: testctrl %s takes a single unsigned"
  7353                             " int option\n", azArg[1]);
  7354            }
  7355            break;
  7356  
  7357          /* sqlite3_test_control(int, int) */
  7358          case SQLITE_TESTCTRL_ASSERT:
  7359          case SQLITE_TESTCTRL_ALWAYS:
  7360          case SQLITE_TESTCTRL_NEVER_CORRUPT:
  7361            if( nArg==3 ){
  7362              int opt = booleanValue(azArg[2]);
  7363              rc2 = sqlite3_test_control(testctrl, opt);
  7364              raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2);
  7365            } else {
  7366              utf8_printf(stderr,"Error: testctrl %s takes a single int option\n",
  7367                              azArg[1]);
  7368            }
  7369            break;
  7370  
  7371          /* sqlite3_test_control(int, char *) */
  7372  #ifdef SQLITE_N_KEYWORD
  7373          case SQLITE_TESTCTRL_ISKEYWORD:
  7374            if( nArg==3 ){
  7375              const char *opt = azArg[2];
  7376              rc2 = sqlite3_test_control(testctrl, opt);
  7377              raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2);
  7378            } else {
  7379              utf8_printf(stderr,
  7380                          "Error: testctrl %s takes a single char * option\n",
  7381                          azArg[1]);
  7382            }
  7383            break;
  7384  #endif
  7385  
  7386          case SQLITE_TESTCTRL_IMPOSTER:
  7387            if( nArg==5 ){
  7388              rc2 = sqlite3_test_control(testctrl, p->db,
  7389                            azArg[2],
  7390                            integerValue(azArg[3]),
  7391                            integerValue(azArg[4]));
  7392              raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2);
  7393            }else{
  7394              raw_printf(stderr,"Usage: .testctrl imposter dbName onoff tnum\n");
  7395            }
  7396            break;
  7397  
  7398          case SQLITE_TESTCTRL_BITVEC_TEST:
  7399          case SQLITE_TESTCTRL_FAULT_INSTALL:
  7400          case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS:
  7401          default:
  7402            utf8_printf(stderr,
  7403                        "Error: CLI support for testctrl %s not implemented\n",
  7404                        azArg[1]);
  7405            break;
  7406        }
  7407      }
  7408    }else
  7409  #endif /* !defined(SQLITE_UNTESTABLE) */
  7410  
  7411    if( c=='t' && n>4 && strncmp(azArg[0], "timeout", n)==0 ){
  7412      open_db(p, 0);
  7413      sqlite3_busy_timeout(p->db, nArg>=2 ? (int)integerValue(azArg[1]) : 0);
  7414    }else
  7415  
  7416    if( c=='t' && n>=5 && strncmp(azArg[0], "timer", n)==0 ){
  7417      if( nArg==2 ){
  7418        enableTimer = booleanValue(azArg[1]);
  7419        if( enableTimer && !HAS_TIMER ){
  7420          raw_printf(stderr, "Error: timer not available on this system.\n");
  7421          enableTimer = 0;
  7422        }
  7423      }else{
  7424        raw_printf(stderr, "Usage: .timer on|off\n");
  7425        rc = 1;
  7426      }
  7427    }else
  7428  
  7429    if( c=='t' && strncmp(azArg[0], "trace", n)==0 ){
  7430      open_db(p, 0);
  7431      if( nArg!=2 ){
  7432        raw_printf(stderr, "Usage: .trace FILE|off\n");
  7433        rc = 1;
  7434        goto meta_command_exit;
  7435      }
  7436      output_file_close(p->traceOut);
  7437      p->traceOut = output_file_open(azArg[1]);
  7438  #if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT)
  7439      if( p->traceOut==0 ){
  7440        sqlite3_trace_v2(p->db, 0, 0, 0);
  7441      }else{
  7442        sqlite3_trace_v2(p->db, SQLITE_TRACE_STMT, sql_trace_callback,p->traceOut);
  7443      }
  7444  #endif
  7445    }else
  7446  
  7447  #if SQLITE_USER_AUTHENTICATION
  7448    if( c=='u' && strncmp(azArg[0], "user", n)==0 ){
  7449      if( nArg<2 ){
  7450        raw_printf(stderr, "Usage: .user SUBCOMMAND ...\n");
  7451        rc = 1;
  7452        goto meta_command_exit;
  7453      }
  7454      open_db(p, 0);
  7455      if( strcmp(azArg[1],"login")==0 ){
  7456        if( nArg!=4 ){
  7457          raw_printf(stderr, "Usage: .user login USER PASSWORD\n");
  7458          rc = 1;
  7459          goto meta_command_exit;
  7460        }
  7461        rc = sqlite3_user_authenticate(p->db, azArg[2], azArg[3],
  7462                                      (int)strlen(azArg[3]));
  7463        if( rc ){
  7464          utf8_printf(stderr, "Authentication failed for user %s\n", azArg[2]);
  7465          rc = 1;
  7466        }
  7467      }else if( strcmp(azArg[1],"add")==0 ){
  7468        if( nArg!=5 ){
  7469          raw_printf(stderr, "Usage: .user add USER PASSWORD ISADMIN\n");
  7470          rc = 1;
  7471          goto meta_command_exit;
  7472        }
  7473        rc = sqlite3_user_add(p->db, azArg[2],
  7474                              azArg[3], (int)strlen(azArg[3]),
  7475                              booleanValue(azArg[4]));
  7476        if( rc ){
  7477          raw_printf(stderr, "User-Add failed: %d\n", rc);
  7478          rc = 1;
  7479        }
  7480      }else if( strcmp(azArg[1],"edit")==0 ){
  7481        if( nArg!=5 ){
  7482          raw_printf(stderr, "Usage: .user edit USER PASSWORD ISADMIN\n");
  7483          rc = 1;
  7484          goto meta_command_exit;
  7485        }
  7486        rc = sqlite3_user_change(p->db, azArg[2],
  7487                                azArg[3], (int)strlen(azArg[3]),
  7488                                booleanValue(azArg[4]));
  7489        if( rc ){
  7490          raw_printf(stderr, "User-Edit failed: %d\n", rc);
  7491          rc = 1;
  7492        }
  7493      }else if( strcmp(azArg[1],"delete")==0 ){
  7494        if( nArg!=3 ){
  7495          raw_printf(stderr, "Usage: .user delete USER\n");
  7496          rc = 1;
  7497          goto meta_command_exit;
  7498        }
  7499        rc = sqlite3_user_delete(p->db, azArg[2]);
  7500        if( rc ){
  7501          raw_printf(stderr, "User-Delete failed: %d\n", rc);
  7502          rc = 1;
  7503        }
  7504      }else{
  7505        raw_printf(stderr, "Usage: .user login|add|edit|delete ...\n");
  7506        rc = 1;
  7507        goto meta_command_exit;
  7508      }
  7509    }else
  7510  #endif /* SQLITE_USER_AUTHENTICATION */
  7511  
  7512    if( c=='v' && strncmp(azArg[0], "version", n)==0 ){
  7513      utf8_printf(p->out, "SQLite %s %s\n" /*extra-version-info*/,
  7514          sqlite3_libversion(), sqlite3_sourceid());
  7515    }else
  7516  
  7517    if( c=='v' && strncmp(azArg[0], "vfsinfo", n)==0 ){
  7518      const char *zDbName = nArg==2 ? azArg[1] : "main";
  7519      sqlite3_vfs *pVfs = 0;
  7520      if( p->db ){
  7521        sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFS_POINTER, &pVfs);
  7522        if( pVfs ){
  7523          utf8_printf(p->out, "vfs.zName      = \"%s\"\n", pVfs->zName);
  7524          raw_printf(p->out, "vfs.iVersion   = %d\n", pVfs->iVersion);
  7525          raw_printf(p->out, "vfs.szOsFile   = %d\n", pVfs->szOsFile);
  7526          raw_printf(p->out, "vfs.mxPathname = %d\n", pVfs->mxPathname);
  7527        }
  7528      }
  7529    }else
  7530  
  7531    if( c=='v' && strncmp(azArg[0], "vfslist", n)==0 ){
  7532      sqlite3_vfs *pVfs;
  7533      sqlite3_vfs *pCurrent = 0;
  7534      if( p->db ){
  7535        sqlite3_file_control(p->db, "main", SQLITE_FCNTL_VFS_POINTER, &pCurrent);
  7536      }
  7537      for(pVfs=sqlite3_vfs_find(0); pVfs; pVfs=pVfs->pNext){
  7538        utf8_printf(p->out, "vfs.zName      = \"%s\"%s\n", pVfs->zName,
  7539             pVfs==pCurrent ? "  <--- CURRENT" : "");
  7540        raw_printf(p->out, "vfs.iVersion   = %d\n", pVfs->iVersion);
  7541        raw_printf(p->out, "vfs.szOsFile   = %d\n", pVfs->szOsFile);
  7542        raw_printf(p->out, "vfs.mxPathname = %d\n", pVfs->mxPathname);
  7543        if( pVfs->pNext ){
  7544          raw_printf(p->out, "-----------------------------------\n");
  7545        }
  7546      }
  7547    }else
  7548  
  7549    if( c=='v' && strncmp(azArg[0], "vfsname", n)==0 ){
  7550      const char *zDbName = nArg==2 ? azArg[1] : "main";
  7551      char *zVfsName = 0;
  7552      if( p->db ){
  7553        sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFSNAME, &zVfsName);
  7554        if( zVfsName ){
  7555          utf8_printf(p->out, "%s\n", zVfsName);
  7556          sqlite3_free(zVfsName);
  7557        }
  7558      }
  7559    }else
  7560  
  7561  #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_WHERETRACE)
  7562    if( c=='w' && strncmp(azArg[0], "wheretrace", n)==0 ){
  7563      sqlite3WhereTrace = nArg>=2 ? booleanValue(azArg[1]) : 0xff;
  7564    }else
  7565  #endif
  7566  
  7567    if( c=='w' && strncmp(azArg[0], "width", n)==0 ){
  7568      int j;
  7569      assert( nArg<=ArraySize(azArg) );
  7570      for(j=1; j<nArg && j<ArraySize(p->colWidth); j++){
  7571        p->colWidth[j-1] = (int)integerValue(azArg[j]);
  7572      }
  7573    }else
  7574  
  7575    {
  7576      utf8_printf(stderr, "Error: unknown command or invalid arguments: "
  7577        " \"%s\". Enter \".help\" for help\n", azArg[0]);
  7578      rc = 1;
  7579    }
  7580  
  7581  meta_command_exit:
  7582    if( p->outCount ){
  7583      p->outCount--;
  7584      if( p->outCount==0 ) output_reset(p);
  7585    }
  7586    return rc;
  7587  }
  7588  
  7589  /*
  7590  ** Return TRUE if a semicolon occurs anywhere in the first N characters
  7591  ** of string z[].
  7592  */
  7593  static int line_contains_semicolon(const char *z, int N){
  7594    int i;
  7595    for(i=0; i<N; i++){  if( z[i]==';' ) return 1; }
  7596    return 0;
  7597  }
  7598  
  7599  /*
  7600  ** Test to see if a line consists entirely of whitespace.
  7601  */
  7602  static int _all_whitespace(const char *z){
  7603    for(; *z; z++){
  7604      if( IsSpace(z[0]) ) continue;
  7605      if( *z=='/' && z[1]=='*' ){
  7606        z += 2;
  7607        while( *z && (*z!='*' || z[1]!='/') ){ z++; }
  7608        if( *z==0 ) return 0;
  7609        z++;
  7610        continue;
  7611      }
  7612      if( *z=='-' && z[1]=='-' ){
  7613        z += 2;
  7614        while( *z && *z!='\n' ){ z++; }
  7615        if( *z==0 ) return 1;
  7616        continue;
  7617      }
  7618      return 0;
  7619    }
  7620    return 1;
  7621  }
  7622  
  7623  /*
  7624  ** Return TRUE if the line typed in is an SQL command terminator other
  7625  ** than a semi-colon.  The SQL Server style "go" command is understood
  7626  ** as is the Oracle "/".
  7627  */
  7628  static int line_is_command_terminator(const char *zLine){
  7629    while( IsSpace(zLine[0]) ){ zLine++; };
  7630    if( zLine[0]=='/' && _all_whitespace(&zLine[1]) ){
  7631      return 1;  /* Oracle */
  7632    }
  7633    if( ToLower(zLine[0])=='g' && ToLower(zLine[1])=='o'
  7634           && _all_whitespace(&zLine[2]) ){
  7635      return 1;  /* SQL Server */
  7636    }
  7637    return 0;
  7638  }
  7639  
  7640  /*
  7641  ** Return true if zSql is a complete SQL statement.  Return false if it
  7642  ** ends in the middle of a string literal or C-style comment.
  7643  */
  7644  static int line_is_complete(char *zSql, int nSql){
  7645    int rc;
  7646    if( zSql==0 ) return 1;
  7647    zSql[nSql] = ';';
  7648    zSql[nSql+1] = 0;
  7649    rc = sqlite3_complete(zSql);
  7650    zSql[nSql] = 0;
  7651    return rc;
  7652  }
  7653  
  7654  /*
  7655  ** Run a single line of SQL
  7656  */
  7657  static int runOneSqlLine(ShellState *p, char *zSql, FILE *in, int startline){
  7658    int rc;
  7659    char *zErrMsg = 0;
  7660  
  7661    open_db(p, 0);
  7662    if( ShellHasFlag(p,SHFLG_Backslash) ) resolve_backslashes(zSql);
  7663    BEGIN_TIMER;
  7664    rc = shell_exec(p->db, zSql, shell_callback, p, &zErrMsg);
  7665    END_TIMER;
  7666    if( rc || zErrMsg ){
  7667      char zPrefix[100];
  7668      if( in!=0 || !stdin_is_interactive ){
  7669        sqlite3_snprintf(sizeof(zPrefix), zPrefix,
  7670                         "Error: near line %d:", startline);
  7671      }else{
  7672        sqlite3_snprintf(sizeof(zPrefix), zPrefix, "Error:");
  7673      }
  7674      if( zErrMsg!=0 ){
  7675        utf8_printf(stderr, "%s %s\n", zPrefix, zErrMsg);
  7676        sqlite3_free(zErrMsg);
  7677        zErrMsg = 0;
  7678      }else{
  7679        utf8_printf(stderr, "%s %s\n", zPrefix, sqlite3_errmsg(p->db));
  7680      }
  7681      return 1;
  7682    }else if( ShellHasFlag(p, SHFLG_CountChanges) ){
  7683      raw_printf(p->out, "changes: %3d   total_changes: %d\n",
  7684              sqlite3_changes(p->db), sqlite3_total_changes(p->db));
  7685    }
  7686    return 0;
  7687  }
  7688  
  7689  
  7690  /*
  7691  ** Read input from *in and process it.  If *in==0 then input
  7692  ** is interactive - the user is typing it it.  Otherwise, input
  7693  ** is coming from a file or device.  A prompt is issued and history
  7694  ** is saved only if input is interactive.  An interrupt signal will
  7695  ** cause this routine to exit immediately, unless input is interactive.
  7696  **
  7697  ** Return the number of errors.
  7698  */
  7699  static int process_input(ShellState *p, FILE *in){
  7700    char *zLine = 0;          /* A single input line */
  7701    char *zSql = 0;           /* Accumulated SQL text */
  7702    int nLine;                /* Length of current line */
  7703    int nSql = 0;             /* Bytes of zSql[] used */
  7704    int nAlloc = 0;           /* Allocated zSql[] space */
  7705    int nSqlPrior = 0;        /* Bytes of zSql[] used by prior line */
  7706    int rc;                   /* Error code */
  7707    int errCnt = 0;           /* Number of errors seen */
  7708    int lineno = 0;           /* Current line number */
  7709    int startline = 0;        /* Line number for start of current input */
  7710  
  7711    while( errCnt==0 || !bail_on_error || (in==0 && stdin_is_interactive) ){
  7712      fflush(p->out);
  7713      zLine = one_input_line(in, zLine, nSql>0);
  7714      if( zLine==0 ){
  7715        /* End of input */
  7716        if( in==0 && stdin_is_interactive ) printf("\n");
  7717        break;
  7718      }
  7719      if( seenInterrupt ){
  7720        if( in!=0 ) break;
  7721        seenInterrupt = 0;
  7722      }
  7723      lineno++;
  7724      if( nSql==0 && _all_whitespace(zLine) ){
  7725        if( ShellHasFlag(p, SHFLG_Echo) ) printf("%s\n", zLine);
  7726        continue;
  7727      }
  7728      if( zLine && zLine[0]=='.' && nSql==0 ){
  7729        if( ShellHasFlag(p, SHFLG_Echo) ) printf("%s\n", zLine);
  7730        rc = do_meta_command(zLine, p);
  7731        if( rc==2 ){ /* exit requested */
  7732          break;
  7733        }else if( rc ){
  7734          errCnt++;
  7735        }
  7736        continue;
  7737      }
  7738      if( line_is_command_terminator(zLine) && line_is_complete(zSql, nSql) ){
  7739        memcpy(zLine,";",2);
  7740      }
  7741      nLine = strlen30(zLine);
  7742      if( nSql+nLine+2>=nAlloc ){
  7743        nAlloc = nSql+nLine+100;
  7744        zSql = realloc(zSql, nAlloc);
  7745        if( zSql==0 ){
  7746          raw_printf(stderr, "Error: out of memory\n");
  7747          exit(1);
  7748        }
  7749      }
  7750      nSqlPrior = nSql;
  7751      if( nSql==0 ){
  7752        int i;
  7753        for(i=0; zLine[i] && IsSpace(zLine[i]); i++){}
  7754        assert( nAlloc>0 && zSql!=0 );
  7755        memcpy(zSql, zLine+i, nLine+1-i);
  7756        startline = lineno;
  7757        nSql = nLine-i;
  7758      }else{
  7759        zSql[nSql++] = '\n';
  7760        memcpy(zSql+nSql, zLine, nLine+1);
  7761        nSql += nLine;
  7762      }
  7763      if( nSql && line_contains_semicolon(&zSql[nSqlPrior], nSql-nSqlPrior)
  7764                  && sqlite3_complete(zSql) ){
  7765        errCnt += runOneSqlLine(p, zSql, in, startline);
  7766        nSql = 0;
  7767        if( p->outCount ){
  7768          output_reset(p);
  7769          p->outCount = 0;
  7770        }
  7771      }else if( nSql && _all_whitespace(zSql) ){
  7772        if( ShellHasFlag(p, SHFLG_Echo) ) printf("%s\n", zSql);
  7773        nSql = 0;
  7774      }
  7775    }
  7776    if( nSql && !_all_whitespace(zSql) ){
  7777      runOneSqlLine(p, zSql, in, startline);
  7778    }
  7779    free(zSql);
  7780    free(zLine);
  7781    return errCnt>0;
  7782  }
  7783  
  7784  /*
  7785  ** Return a pathname which is the user's home directory.  A
  7786  ** 0 return indicates an error of some kind.
  7787  */
  7788  static char *find_home_dir(int clearFlag){
  7789    static char *home_dir = NULL;
  7790    if( clearFlag ){
  7791      free(home_dir);
  7792      home_dir = 0;
  7793      return 0;
  7794    }
  7795    if( home_dir ) return home_dir;
  7796  
  7797  #if !defined(_WIN32) && !defined(WIN32) && !defined(_WIN32_WCE) \
  7798       && !defined(__RTP__) && !defined(_WRS_KERNEL)
  7799    {
  7800      struct passwd *pwent;
  7801      uid_t uid = getuid();
  7802      if( (pwent=getpwuid(uid)) != NULL) {
  7803        home_dir = pwent->pw_dir;
  7804      }
  7805    }
  7806  #endif
  7807  
  7808  #if defined(_WIN32_WCE)
  7809    /* Windows CE (arm-wince-mingw32ce-gcc) does not provide getenv()
  7810     */
  7811    home_dir = "/";
  7812  #else
  7813  
  7814  #if defined(_WIN32) || defined(WIN32)
  7815    if (!home_dir) {
  7816      home_dir = getenv("USERPROFILE");
  7817    }
  7818  #endif
  7819  
  7820    if (!home_dir) {
  7821      home_dir = getenv("HOME");
  7822    }
  7823  
  7824  #if defined(_WIN32) || defined(WIN32)
  7825    if (!home_dir) {
  7826      char *zDrive, *zPath;
  7827      int n;
  7828      zDrive = getenv("HOMEDRIVE");
  7829      zPath = getenv("HOMEPATH");
  7830      if( zDrive && zPath ){
  7831        n = strlen30(zDrive) + strlen30(zPath) + 1;
  7832        home_dir = malloc( n );
  7833        if( home_dir==0 ) return 0;
  7834        sqlite3_snprintf(n, home_dir, "%s%s", zDrive, zPath);
  7835        return home_dir;
  7836      }
  7837      home_dir = "c:\\";
  7838    }
  7839  #endif
  7840  
  7841  #endif /* !_WIN32_WCE */
  7842  
  7843    if( home_dir ){
  7844      int n = strlen30(home_dir) + 1;
  7845      char *z = malloc( n );
  7846      if( z ) memcpy(z, home_dir, n);
  7847      home_dir = z;
  7848    }
  7849  
  7850    return home_dir;
  7851  }
  7852  
  7853  /*
  7854  ** Read input from the file given by sqliterc_override.  Or if that
  7855  ** parameter is NULL, take input from ~/.sqliterc
  7856  **
  7857  ** Returns the number of errors.
  7858  */
  7859  static void process_sqliterc(
  7860    ShellState *p,                  /* Configuration data */
  7861    const char *sqliterc_override   /* Name of config file. NULL to use default */
  7862  ){
  7863    char *home_dir = NULL;
  7864    const char *sqliterc = sqliterc_override;
  7865    char *zBuf = 0;
  7866    FILE *in = NULL;
  7867  
  7868    if (sqliterc == NULL) {
  7869      home_dir = find_home_dir(0);
  7870      if( home_dir==0 ){
  7871        raw_printf(stderr, "-- warning: cannot find home directory;"
  7872                        " cannot read ~/.sqliterc\n");
  7873        return;
  7874      }
  7875      sqlite3_initialize();
  7876      zBuf = sqlite3_mprintf("%s/.sqliterc",home_dir);
  7877      sqliterc = zBuf;
  7878    }
  7879    in = fopen(sqliterc,"rb");
  7880    if( in ){
  7881      if( stdin_is_interactive ){
  7882        utf8_printf(stderr,"-- Loading resources from %s\n",sqliterc);
  7883      }
  7884      process_input(p,in);
  7885      fclose(in);
  7886    }
  7887    sqlite3_free(zBuf);
  7888  }
  7889  
  7890  /*
  7891  ** Show available command line options
  7892  */
  7893  static const char zOptions[] =
  7894    "   -ascii               set output mode to 'ascii'\n"
  7895    "   -bail                stop after hitting an error\n"
  7896    "   -batch               force batch I/O\n"
  7897    "   -column              set output mode to 'column'\n"
  7898    "   -cmd COMMAND         run \"COMMAND\" before reading stdin\n"
  7899    "   -csv                 set output mode to 'csv'\n"
  7900    "   -echo                print commands before execution\n"
  7901    "   -init FILENAME       read/process named file\n"
  7902    "   -[no]header          turn headers on or off\n"
  7903  #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
  7904    "   -heap SIZE           Size of heap for memsys3 or memsys5\n"
  7905  #endif
  7906    "   -help                show this message\n"
  7907    "   -html                set output mode to HTML\n"
  7908    "   -interactive         force interactive I/O\n"
  7909    "   -line                set output mode to 'line'\n"
  7910    "   -list                set output mode to 'list'\n"
  7911    "   -lookaside SIZE N    use N entries of SZ bytes for lookaside memory\n"
  7912    "   -mmap N              default mmap size set to N\n"
  7913  #ifdef SQLITE_ENABLE_MULTIPLEX
  7914    "   -multiplex           enable the multiplexor VFS\n"
  7915  #endif
  7916    "   -newline SEP         set output row separator. Default: '\\n'\n"
  7917    "   -nullvalue TEXT      set text string for NULL values. Default ''\n"
  7918    "   -pagecache SIZE N    use N slots of SZ bytes each for page cache memory\n"
  7919    "   -quote               set output mode to 'quote'\n"
  7920    "   -separator SEP       set output column separator. Default: '|'\n"
  7921    "   -stats               print memory stats before each finalize\n"
  7922    "   -version             show SQLite version\n"
  7923    "   -vfs NAME            use NAME as the default VFS\n"
  7924  #ifdef SQLITE_ENABLE_VFSTRACE
  7925    "   -vfstrace            enable tracing of all VFS calls\n"
  7926  #endif
  7927  ;
  7928  static void usage(int showDetail){
  7929    utf8_printf(stderr,
  7930        "Usage: %s [OPTIONS] FILENAME [SQL]\n"
  7931        "FILENAME is the name of an SQLite database. A new database is created\n"
  7932        "if the file does not previously exist.\n", Argv0);
  7933    if( showDetail ){
  7934      utf8_printf(stderr, "OPTIONS include:\n%s", zOptions);
  7935    }else{
  7936      raw_printf(stderr, "Use the -help option for additional information\n");
  7937    }
  7938    exit(1);
  7939  }
  7940  
  7941  /*
  7942  ** Initialize the state information in data
  7943  */
  7944  static void main_init(ShellState *data) {
  7945    memset(data, 0, sizeof(*data));
  7946    data->normalMode = data->cMode = data->mode = MODE_List;
  7947    data->autoExplain = 1;
  7948    memcpy(data->colSeparator,SEP_Column, 2);
  7949    memcpy(data->rowSeparator,SEP_Row, 2);
  7950    data->showHeader = 0;
  7951    data->shellFlgs = SHFLG_Lookaside;
  7952    sqlite3_config(SQLITE_CONFIG_URI, 1);
  7953    sqlite3_config(SQLITE_CONFIG_LOG, shellLog, data);
  7954    sqlite3_config(SQLITE_CONFIG_MULTITHREAD);
  7955    sqlite3_snprintf(sizeof(mainPrompt), mainPrompt,"sqlite> ");
  7956    sqlite3_snprintf(sizeof(continuePrompt), continuePrompt,"   ...> ");
  7957  }
  7958  
  7959  /*
  7960  ** Output text to the console in a font that attracts extra attention.
  7961  */
  7962  #ifdef _WIN32
  7963  static void printBold(const char *zText){
  7964    HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
  7965    CONSOLE_SCREEN_BUFFER_INFO defaultScreenInfo;
  7966    GetConsoleScreenBufferInfo(out, &defaultScreenInfo);
  7967    SetConsoleTextAttribute(out,
  7968           FOREGROUND_RED|FOREGROUND_INTENSITY
  7969    );
  7970    printf("%s", zText);
  7971    SetConsoleTextAttribute(out, defaultScreenInfo.wAttributes);
  7972  }
  7973  #else
  7974  static void printBold(const char *zText){
  7975    printf("\033[1m%s\033[0m", zText);
  7976  }
  7977  #endif
  7978  
  7979  /*
  7980  ** Get the argument to an --option.  Throw an error and die if no argument
  7981  ** is available.
  7982  */
  7983  static char *cmdline_option_value(int argc, char **argv, int i){
  7984    if( i==argc ){
  7985      utf8_printf(stderr, "%s: Error: missing argument to %s\n",
  7986              argv[0], argv[argc-1]);
  7987      exit(1);
  7988    }
  7989    return argv[i];
  7990  }
  7991  
  7992  #ifndef SQLITE_SHELL_IS_UTF8
  7993  #  if (defined(_WIN32) || defined(WIN32)) && defined(_MSC_VER)
  7994  #    define SQLITE_SHELL_IS_UTF8          (0)
  7995  #  else
  7996  #    define SQLITE_SHELL_IS_UTF8          (1)
  7997  #  endif
  7998  #endif
  7999  
  8000  #if SQLITE_SHELL_IS_UTF8
  8001  int SQLITE_CDECL main(int argc, char **argv){
  8002  #else
  8003  int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
  8004    char **argv;
  8005  #endif
  8006    char *zErrMsg = 0;
  8007    ShellState data;
  8008    const char *zInitFile = 0;
  8009    int i;
  8010    int rc = 0;
  8011    int warnInmemoryDb = 0;
  8012    int readStdin = 1;
  8013    int nCmd = 0;
  8014    char **azCmd = 0;
  8015  
  8016    setBinaryMode(stdin, 0);
  8017    setvbuf(stderr, 0, _IONBF, 0); /* Make sure stderr is unbuffered */
  8018    stdin_is_interactive = isatty(0);
  8019    stdout_is_console = isatty(1);
  8020  
  8021  #if USE_SYSTEM_SQLITE+0!=1
  8022    if( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,60)!=0 ){
  8023      utf8_printf(stderr, "SQLite header and source version mismatch\n%s\n%s\n",
  8024              sqlite3_sourceid(), SQLITE_SOURCE_ID);
  8025      exit(1);
  8026    }
  8027  #endif
  8028    main_init(&data);
  8029  #if !SQLITE_SHELL_IS_UTF8
  8030    sqlite3_initialize();
  8031    argv = sqlite3_malloc64(sizeof(argv[0])*argc);
  8032    if( argv==0 ){
  8033      raw_printf(stderr, "out of memory\n");
  8034      exit(1);
  8035    }
  8036    for(i=0; i<argc; i++){
  8037      argv[i] = sqlite3_win32_unicode_to_utf8(wargv[i]);
  8038      if( argv[i]==0 ){
  8039        raw_printf(stderr, "out of memory\n");
  8040        exit(1);
  8041      }
  8042    }
  8043  #endif
  8044    assert( argc>=1 && argv && argv[0] );
  8045    Argv0 = argv[0];
  8046  
  8047    /* Make sure we have a valid signal handler early, before anything
  8048    ** else is done.
  8049    */
  8050  #ifdef SIGINT
  8051    signal(SIGINT, interrupt_handler);
  8052  #endif
  8053  
  8054  #ifdef SQLITE_SHELL_DBNAME_PROC
  8055    {
  8056      /* If the SQLITE_SHELL_DBNAME_PROC macro is defined, then it is the name
  8057      ** of a C-function that will provide the name of the database file.  Use
  8058      ** this compile-time option to embed this shell program in larger
  8059      ** applications. */
  8060      extern void SQLITE_SHELL_DBNAME_PROC(const char**);
  8061      SQLITE_SHELL_DBNAME_PROC(&data.zDbFilename);
  8062      warnInmemoryDb = 0;
  8063    }
  8064  #endif
  8065  
  8066    /* Do an initial pass through the command-line argument to locate
  8067    ** the name of the database file, the name of the initialization file,
  8068    ** the size of the alternative malloc heap,
  8069    ** and the first command to execute.
  8070    */
  8071    for(i=1; i<argc; i++){
  8072      char *z;
  8073      z = argv[i];
  8074      if( z[0]!='-' ){
  8075        if( data.zDbFilename==0 ){
  8076          data.zDbFilename = z;
  8077        }else{
  8078          /* Excesss arguments are interpreted as SQL (or dot-commands) and
  8079          ** mean that nothing is read from stdin */
  8080          readStdin = 0;
  8081          nCmd++;
  8082          azCmd = realloc(azCmd, sizeof(azCmd[0])*nCmd);
  8083          if( azCmd==0 ){
  8084            raw_printf(stderr, "out of memory\n");
  8085            exit(1);
  8086          }
  8087          azCmd[nCmd-1] = z;
  8088        }
  8089      }
  8090      if( z[1]=='-' ) z++;
  8091      if( strcmp(z,"-separator")==0
  8092       || strcmp(z,"-nullvalue")==0
  8093       || strcmp(z,"-newline")==0
  8094       || strcmp(z,"-cmd")==0
  8095      ){
  8096        (void)cmdline_option_value(argc, argv, ++i);
  8097      }else if( strcmp(z,"-init")==0 ){
  8098        zInitFile = cmdline_option_value(argc, argv, ++i);
  8099      }else if( strcmp(z,"-batch")==0 ){
  8100        /* Need to check for batch mode here to so we can avoid printing
  8101        ** informational messages (like from process_sqliterc) before
  8102        ** we do the actual processing of arguments later in a second pass.
  8103        */
  8104        stdin_is_interactive = 0;
  8105      }else if( strcmp(z,"-heap")==0 ){
  8106  #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
  8107        const char *zSize;
  8108        sqlite3_int64 szHeap;
  8109  
  8110        zSize = cmdline_option_value(argc, argv, ++i);
  8111        szHeap = integerValue(zSize);
  8112        if( szHeap>0x7fff0000 ) szHeap = 0x7fff0000;
  8113        sqlite3_config(SQLITE_CONFIG_HEAP, malloc((int)szHeap), (int)szHeap, 64);
  8114  #else
  8115        (void)cmdline_option_value(argc, argv, ++i);
  8116  #endif
  8117      }else if( strcmp(z,"-pagecache")==0 ){
  8118        int n, sz;
  8119        sz = (int)integerValue(cmdline_option_value(argc,argv,++i));
  8120        if( sz>70000 ) sz = 70000;
  8121        if( sz<0 ) sz = 0;
  8122        n = (int)integerValue(cmdline_option_value(argc,argv,++i));
  8123        sqlite3_config(SQLITE_CONFIG_PAGECACHE,
  8124                      (n>0 && sz>0) ? malloc(n*sz) : 0, sz, n);
  8125        data.shellFlgs |= SHFLG_Pagecache;
  8126      }else if( strcmp(z,"-lookaside")==0 ){
  8127        int n, sz;
  8128        sz = (int)integerValue(cmdline_option_value(argc,argv,++i));
  8129        if( sz<0 ) sz = 0;
  8130        n = (int)integerValue(cmdline_option_value(argc,argv,++i));
  8131        if( n<0 ) n = 0;
  8132        sqlite3_config(SQLITE_CONFIG_LOOKASIDE, sz, n);
  8133        if( sz*n==0 ) data.shellFlgs &= ~SHFLG_Lookaside;
  8134  #ifdef SQLITE_ENABLE_VFSTRACE
  8135      }else if( strcmp(z,"-vfstrace")==0 ){
  8136        extern int vfstrace_register(
  8137           const char *zTraceName,
  8138           const char *zOldVfsName,
  8139           int (*xOut)(const char*,void*),
  8140           void *pOutArg,
  8141           int makeDefault
  8142        );
  8143        vfstrace_register("trace",0,(int(*)(const char*,void*))fputs,stderr,1);
  8144  #endif
  8145  #ifdef SQLITE_ENABLE_MULTIPLEX
  8146      }else if( strcmp(z,"-multiplex")==0 ){
  8147        extern int sqlite3_multiple_initialize(const char*,int);
  8148        sqlite3_multiplex_initialize(0, 1);
  8149  #endif
  8150      }else if( strcmp(z,"-mmap")==0 ){
  8151        sqlite3_int64 sz = integerValue(cmdline_option_value(argc,argv,++i));
  8152        sqlite3_config(SQLITE_CONFIG_MMAP_SIZE, sz, sz);
  8153      }else if( strcmp(z,"-vfs")==0 ){
  8154        sqlite3_vfs *pVfs = sqlite3_vfs_find(cmdline_option_value(argc,argv,++i));
  8155        if( pVfs ){
  8156          sqlite3_vfs_register(pVfs, 1);
  8157        }else{
  8158          utf8_printf(stderr, "no such VFS: \"%s\"\n", argv[i]);
  8159          exit(1);
  8160        }
  8161      }
  8162    }
  8163    if( data.zDbFilename==0 ){
  8164  #ifndef SQLITE_OMIT_MEMORYDB
  8165      data.zDbFilename = ":memory:";
  8166      warnInmemoryDb = argc==1;
  8167  #else
  8168      utf8_printf(stderr,"%s: Error: no database filename specified\n", Argv0);
  8169      return 1;
  8170  #endif
  8171    }
  8172    data.out = stdout;
  8173  
  8174    /* Go ahead and open the database file if it already exists.  If the
  8175    ** file does not exist, delay opening it.  This prevents empty database
  8176    ** files from being created if a user mistypes the database name argument
  8177    ** to the sqlite command-line tool.
  8178    */
  8179    if( access(data.zDbFilename, 0)==0 ){
  8180      open_db(&data, 0);
  8181    }
  8182  
  8183    /* Process the initialization file if there is one.  If no -init option
  8184    ** is given on the command line, look for a file named ~/.sqliterc and
  8185    ** try to process it.
  8186    */
  8187    process_sqliterc(&data,zInitFile);
  8188  
  8189    /* Make a second pass through the command-line argument and set
  8190    ** options.  This second pass is delayed until after the initialization
  8191    ** file is processed so that the command-line arguments will override
  8192    ** settings in the initialization file.
  8193    */
  8194    for(i=1; i<argc; i++){
  8195      char *z = argv[i];
  8196      if( z[0]!='-' ) continue;
  8197      if( z[1]=='-' ){ z++; }
  8198      if( strcmp(z,"-init")==0 ){
  8199        i++;
  8200      }else if( strcmp(z,"-html")==0 ){
  8201        data.mode = MODE_Html;
  8202      }else if( strcmp(z,"-list")==0 ){
  8203        data.mode = MODE_List;
  8204      }else if( strcmp(z,"-quote")==0 ){
  8205        data.mode = MODE_Quote;
  8206      }else if( strcmp(z,"-line")==0 ){
  8207        data.mode = MODE_Line;
  8208      }else if( strcmp(z,"-column")==0 ){
  8209        data.mode = MODE_Column;
  8210      }else if( strcmp(z,"-csv")==0 ){
  8211        data.mode = MODE_Csv;
  8212        memcpy(data.colSeparator,",",2);
  8213      }else if( strcmp(z,"-ascii")==0 ){
  8214        data.mode = MODE_Ascii;
  8215        sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator,
  8216                         SEP_Unit);
  8217        sqlite3_snprintf(sizeof(data.rowSeparator), data.rowSeparator,
  8218                         SEP_Record);
  8219      }else if( strcmp(z,"-separator")==0 ){
  8220        sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator,
  8221                         "%s",cmdline_option_value(argc,argv,++i));
  8222      }else if( strcmp(z,"-newline")==0 ){
  8223        sqlite3_snprintf(sizeof(data.rowSeparator), data.rowSeparator,
  8224                         "%s",cmdline_option_value(argc,argv,++i));
  8225      }else if( strcmp(z,"-nullvalue")==0 ){
  8226        sqlite3_snprintf(sizeof(data.nullValue), data.nullValue,
  8227                         "%s",cmdline_option_value(argc,argv,++i));
  8228      }else if( strcmp(z,"-header")==0 ){
  8229        data.showHeader = 1;
  8230      }else if( strcmp(z,"-noheader")==0 ){
  8231        data.showHeader = 0;
  8232      }else if( strcmp(z,"-echo")==0 ){
  8233        ShellSetFlag(&data, SHFLG_Echo);
  8234      }else if( strcmp(z,"-eqp")==0 ){
  8235        data.autoEQP = 1;
  8236      }else if( strcmp(z,"-eqpfull")==0 ){
  8237        data.autoEQP = 2;
  8238      }else if( strcmp(z,"-stats")==0 ){
  8239        data.statsOn = 1;
  8240      }else if( strcmp(z,"-scanstats")==0 ){
  8241        data.scanstatsOn = 1;
  8242      }else if( strcmp(z,"-backslash")==0 ){
  8243        /* Undocumented command-line option: -backslash
  8244        ** Causes C-style backslash escapes to be evaluated in SQL statements
  8245        ** prior to sending the SQL into SQLite.  Useful for injecting
  8246        ** crazy bytes in the middle of SQL statements for testing and debugging.
  8247        */
  8248        ShellSetFlag(&data, SHFLG_Backslash);
  8249      }else if( strcmp(z,"-bail")==0 ){
  8250        bail_on_error = 1;
  8251      }else if( strcmp(z,"-version")==0 ){
  8252        printf("%s %s\n", sqlite3_libversion(), sqlite3_sourceid());
  8253        return 0;
  8254      }else if( strcmp(z,"-interactive")==0 ){
  8255        stdin_is_interactive = 1;
  8256      }else if( strcmp(z,"-batch")==0 ){
  8257        stdin_is_interactive = 0;
  8258      }else if( strcmp(z,"-heap")==0 ){
  8259        i++;
  8260      }else if( strcmp(z,"-pagecache")==0 ){
  8261        i+=2;
  8262      }else if( strcmp(z,"-lookaside")==0 ){
  8263        i+=2;
  8264      }else if( strcmp(z,"-mmap")==0 ){
  8265        i++;
  8266      }else if( strcmp(z,"-vfs")==0 ){
  8267        i++;
  8268  #ifdef SQLITE_ENABLE_VFSTRACE
  8269      }else if( strcmp(z,"-vfstrace")==0 ){
  8270        i++;
  8271  #endif
  8272  #ifdef SQLITE_ENABLE_MULTIPLEX
  8273      }else if( strcmp(z,"-multiplex")==0 ){
  8274        i++;
  8275  #endif
  8276      }else if( strcmp(z,"-help")==0 ){
  8277        usage(1);
  8278      }else if( strcmp(z,"-cmd")==0 ){
  8279        /* Run commands that follow -cmd first and separately from commands
  8280        ** that simply appear on the command-line.  This seems goofy.  It would
  8281        ** be better if all commands ran in the order that they appear.  But
  8282        ** we retain the goofy behavior for historical compatibility. */
  8283        if( i==argc-1 ) break;
  8284        z = cmdline_option_value(argc,argv,++i);
  8285        if( z[0]=='.' ){
  8286          rc = do_meta_command(z, &data);
  8287          if( rc && bail_on_error ) return rc==2 ? 0 : rc;
  8288        }else{
  8289          open_db(&data, 0);
  8290          rc = shell_exec(data.db, z, shell_callback, &data, &zErrMsg);
  8291          if( zErrMsg!=0 ){
  8292            utf8_printf(stderr,"Error: %s\n", zErrMsg);
  8293            if( bail_on_error ) return rc!=0 ? rc : 1;
  8294          }else if( rc!=0 ){
  8295            utf8_printf(stderr,"Error: unable to process SQL \"%s\"\n", z);
  8296            if( bail_on_error ) return rc;
  8297          }
  8298        }
  8299      }else{
  8300        utf8_printf(stderr,"%s: Error: unknown option: %s\n", Argv0, z);
  8301        raw_printf(stderr,"Use -help for a list of options.\n");
  8302        return 1;
  8303      }
  8304      data.cMode = data.mode;
  8305    }
  8306  
  8307    if( !readStdin ){
  8308      /* Run all arguments that do not begin with '-' as if they were separate
  8309      ** command-line inputs, except for the argToSkip argument which contains
  8310      ** the database filename.
  8311      */
  8312      for(i=0; i<nCmd; i++){
  8313        if( azCmd[i][0]=='.' ){
  8314          rc = do_meta_command(azCmd[i], &data);
  8315          if( rc ) return rc==2 ? 0 : rc;
  8316        }else{
  8317          open_db(&data, 0);
  8318          rc = shell_exec(data.db, azCmd[i], shell_callback, &data, &zErrMsg);
  8319          if( zErrMsg!=0 ){
  8320            utf8_printf(stderr,"Error: %s\n", zErrMsg);
  8321            return rc!=0 ? rc : 1;
  8322          }else if( rc!=0 ){
  8323            utf8_printf(stderr,"Error: unable to process SQL: %s\n", azCmd[i]);
  8324            return rc;
  8325          }
  8326        }
  8327      }
  8328      free(azCmd);
  8329    }else{
  8330      /* Run commands received from standard input
  8331      */
  8332      if( stdin_is_interactive ){
  8333        char *zHome;
  8334        char *zHistory = 0;
  8335        int nHistory;
  8336        printf(
  8337          "SQLite version %s %.19s\n" /*extra-version-info*/
  8338          "Enter \".help\" for usage hints.\n",
  8339          sqlite3_libversion(), sqlite3_sourceid()
  8340        );
  8341        if( warnInmemoryDb ){
  8342          printf("Connected to a ");
  8343          printBold("transient in-memory database");
  8344          printf(".\nUse \".open FILENAME\" to reopen on a "
  8345                 "persistent database.\n");
  8346        }
  8347        zHome = find_home_dir(0);
  8348        if( zHome ){
  8349          nHistory = strlen30(zHome) + 20;
  8350          if( (zHistory = malloc(nHistory))!=0 ){
  8351            sqlite3_snprintf(nHistory, zHistory,"%s/.sqlite_history", zHome);
  8352          }
  8353        }
  8354        if( zHistory ){ shell_read_history(zHistory); }
  8355  #if HAVE_READLINE || HAVE_EDITLINE
  8356        rl_attempted_completion_function = readline_completion;
  8357  #elif HAVE_LINENOISE
  8358        linenoiseSetCompletionCallback(linenoise_completion);
  8359  #endif
  8360        rc = process_input(&data, 0);
  8361        if( zHistory ){
  8362          shell_stifle_history(2000);
  8363          shell_write_history(zHistory);
  8364          free(zHistory);
  8365        }
  8366      }else{
  8367        rc = process_input(&data, stdin);
  8368      }
  8369    }
  8370    set_table_name(&data, 0);
  8371    if( data.db ){
  8372      session_close_all(&data);
  8373      sqlite3_close(data.db);
  8374    }
  8375    sqlite3_free(data.zFreeOnClose);
  8376    find_home_dir(1);
  8377  #if !SQLITE_SHELL_IS_UTF8
  8378    for(i=0; i<argc; i++) sqlite3_free(argv[i]);
  8379    sqlite3_free(argv);
  8380  #endif
  8381    return rc;
  8382  }