/ Hex Artifact Content
Login

Artifact 9d75c83c13fb1b96e60c56cce96146d84c4c8b3d18d11bd85e0759ebf744bcb2:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  ******.** This f
0180: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64  ile contains cod
0190: 65 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  e to implement t
01a0: 68 65 20 22 73 71 6c 69 74 65 22 20 63 6f 6d 6d  he "sqlite" comm
01b0: 61 6e 64 20 6c 69 6e 65 0a 2a 2a 20 75 74 69 6c  and line.** util
01c0: 69 74 79 20 66 6f 72 20 61 63 63 65 73 73 69 6e  ity for accessin
01d0: 67 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  g SQLite databas
01e0: 65 73 2e 0a 2a 2f 0a 23 69 66 20 28 64 65 66 69  es..*/.#if (defi
01f0: 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64  ned(_WIN32) || d
0200: 65 66 69 6e 65 64 28 57 49 4e 33 32 29 29 20 26  efined(WIN32)) &
0210: 26 20 21 64 65 66 69 6e 65 64 28 5f 43 52 54 5f  & !defined(_CRT_
0220: 53 45 43 55 52 45 5f 4e 4f 5f 57 41 52 4e 49 4e  SECURE_NO_WARNIN
0230: 47 53 29 0a 2f 2a 20 54 68 69 73 20 6e 65 65 64  GS)./* This need
0240: 73 20 74 6f 20 63 6f 6d 65 20 62 65 66 6f 72 65  s to come before
0250: 20 61 6e 79 20 69 6e 63 6c 75 64 65 73 20 66 6f   any includes fo
0260: 72 20 4d 53 56 43 20 63 6f 6d 70 69 6c 65 72 20  r MSVC compiler 
0270: 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 43 52 54 5f  */.#define _CRT_
0280: 53 45 43 55 52 45 5f 4e 4f 5f 57 41 52 4e 49 4e  SECURE_NO_WARNIN
0290: 47 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  GS.#endif../*.**
02a0: 20 57 61 72 6e 69 6e 67 20 70 72 61 67 6d 61 73   Warning pragmas
02b0: 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 6d 73 76   copied from msv
02c0: 63 2e 68 20 69 6e 20 74 68 65 20 63 6f 72 65 2e  c.h in the core.
02d0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
02e0: 5f 4d 53 43 5f 56 45 52 29 0a 23 70 72 61 67 6d  _MSC_VER).#pragm
02f0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0300: 65 20 3a 20 34 30 35 34 29 0a 23 70 72 61 67 6d  e : 4054).#pragm
0310: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0320: 65 20 3a 20 34 30 35 35 29 0a 23 70 72 61 67 6d  e : 4055).#pragm
0330: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0340: 65 20 3a 20 34 31 30 30 29 0a 23 70 72 61 67 6d  e : 4100).#pragm
0350: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0360: 65 20 3a 20 34 31 32 37 29 0a 23 70 72 61 67 6d  e : 4127).#pragm
0370: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0380: 65 20 3a 20 34 31 33 30 29 0a 23 70 72 61 67 6d  e : 4130).#pragm
0390: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
03a0: 65 20 3a 20 34 31 35 32 29 0a 23 70 72 61 67 6d  e : 4152).#pragm
03b0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
03c0: 65 20 3a 20 34 31 38 39 29 0a 23 70 72 61 67 6d  e : 4189).#pragm
03d0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
03e0: 65 20 3a 20 34 32 30 36 29 0a 23 70 72 61 67 6d  e : 4206).#pragm
03f0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0400: 65 20 3a 20 34 32 31 30 29 0a 23 70 72 61 67 6d  e : 4210).#pragm
0410: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0420: 65 20 3a 20 34 32 33 32 29 0a 23 70 72 61 67 6d  e : 4232).#pragm
0430: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0440: 65 20 3a 20 34 32 34 34 29 0a 23 70 72 61 67 6d  e : 4244).#pragm
0450: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0460: 65 20 3a 20 34 33 30 35 29 0a 23 70 72 61 67 6d  e : 4305).#pragm
0470: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0480: 65 20 3a 20 34 33 30 36 29 0a 23 70 72 61 67 6d  e : 4306).#pragm
0490: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
04a0: 65 20 3a 20 34 37 30 32 29 0a 23 70 72 61 67 6d  e : 4702).#pragm
04b0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
04c0: 65 20 3a 20 34 37 30 36 29 0a 23 65 6e 64 69 66  e : 4706).#endif
04d0: 20 2f 2a 20 64 65 66 69 6e 65 64 28 5f 4d 53 43   /* defined(_MSC
04e0: 5f 56 45 52 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  _VER) */../*.** 
04f0: 4e 6f 20 73 75 70 70 6f 72 74 20 66 6f 72 20 6c  No support for l
0500: 6f 61 64 61 62 6c 65 20 65 78 74 65 6e 73 69 6f  oadable extensio
0510: 6e 73 20 69 6e 20 56 78 57 6f 72 6b 73 2e 0a 2a  ns in VxWorks..*
0520: 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 5f  /.#if (defined(_
0530: 5f 52 54 50 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  _RTP__) || defin
0540: 65 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 29  ed(_WRS_KERNEL))
0550: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
0560: 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
0570: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
0580: 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
0590: 49 4f 4e 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ION 1.#endif../*
05a0: 0a 2a 2a 20 45 6e 61 62 6c 65 20 6c 61 72 67 65  .** Enable large
05b0: 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 20 66 6f  -file support fo
05c0: 72 20 66 6f 70 65 6e 28 29 20 61 6e 64 20 66 72  r fopen() and fr
05d0: 69 65 6e 64 73 20 6f 6e 20 75 6e 69 78 2e 0a 2a  iends on unix..*
05e0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
05f0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64  _DISABLE_LFS.# d
0600: 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c  efine _LARGE_FIL
0610: 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64  E       1.# ifnd
0620: 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ef _FILE_OFFSET_
0630: 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20  BITS.#   define 
0640: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
0650: 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64  S 64.# endif.# d
0660: 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45  efine _LARGEFILE
0670: 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66  _SOURCE 1.#endif
0680: 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  ..#include <stdl
0690: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
06a0: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
06b0: 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e  de <stdio.h>.#in
06c0: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
06d0: 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74  .#include "sqlit
06e0: 65 33 2e 68 22 0a 23 69 66 20 53 51 4c 49 54 45  e3.h".#if SQLITE
06f0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
0700: 54 49 4f 4e 0a 23 20 69 6e 63 6c 75 64 65 20 22  TION.# include "
0710: 73 71 6c 69 74 65 33 75 73 65 72 61 75 74 68 2e  sqlite3userauth.
0720: 68 22 0a 23 65 6e 64 69 66 0a 23 69 6e 63 6c 75  h".#endif.#inclu
0730: 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69 6e  de <ctype.h>.#in
0740: 63 6c 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e  clude <stdarg.h>
0750: 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  ..#if !defined(_
0760: 57 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e  WIN32) && !defin
0770: 65 64 28 57 49 4e 33 32 29 0a 23 20 69 6e 63 6c  ed(WIN32).# incl
0780: 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 0a 23  ude <signal.h>.#
0790: 20 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 52   if !defined(__R
07a0: 54 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  TP__) && !define
07b0: 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a 23  d(_WRS_KERNEL).#
07c0: 20 20 69 6e 63 6c 75 64 65 20 3c 70 77 64 2e 68    include <pwd.h
07d0: 3e 0a 23 20 65 6e 64 69 66 0a 23 20 69 6e 63 6c  >.# endif.# incl
07e0: 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 23  ude <unistd.h>.#
07f0: 20 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79   include <sys/ty
0800: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 23  pes.h>.#endif..#
0810: 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 45  if HAVE_READLINE
0820: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 72 65 61 64  .# include <read
0830: 6c 69 6e 65 2f 72 65 61 64 6c 69 6e 65 2e 68 3e  line/readline.h>
0840: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 72 65 61 64  .# include <read
0850: 6c 69 6e 65 2f 68 69 73 74 6f 72 79 2e 68 3e 0a  line/history.h>.
0860: 23 65 6e 64 69 66 0a 0a 23 69 66 20 48 41 56 45  #endif..#if HAVE
0870: 5f 45 44 49 54 4c 49 4e 45 0a 23 20 69 6e 63 6c  _EDITLINE.# incl
0880: 75 64 65 20 3c 65 64 69 74 6c 69 6e 65 2f 72 65  ude <editline/re
0890: 61 64 6c 69 6e 65 2e 68 3e 0a 23 65 6e 64 69 66  adline.h>.#endif
08a0: 0a 0a 23 69 66 20 48 41 56 45 5f 45 44 49 54 4c  ..#if HAVE_EDITL
08b0: 49 4e 45 20 7c 7c 20 48 41 56 45 5f 52 45 41 44  INE || HAVE_READ
08c0: 4c 49 4e 45 0a 0a 23 20 64 65 66 69 6e 65 20 73  LINE..# define s
08d0: 68 65 6c 6c 5f 61 64 64 5f 68 69 73 74 6f 72 79  hell_add_history
08e0: 28 58 29 20 61 64 64 5f 68 69 73 74 6f 72 79 28  (X) add_history(
08f0: 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c  X).# define shel
0900: 6c 5f 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58  l_read_history(X
0910: 29 20 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58  ) read_history(X
0920: 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c  ).# define shell
0930: 5f 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28 58  _write_history(X
0940: 29 20 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28  ) write_history(
0950: 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c  X).# define shel
0960: 6c 5f 73 74 69 66 6c 65 5f 68 69 73 74 6f 72 79  l_stifle_history
0970: 28 58 29 20 73 74 69 66 6c 65 5f 68 69 73 74 6f  (X) stifle_histo
0980: 72 79 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  ry(X).# define s
0990: 68 65 6c 6c 5f 72 65 61 64 6c 69 6e 65 28 58 29  hell_readline(X)
09a0: 20 72 65 61 64 6c 69 6e 65 28 58 29 0a 0a 23 65   readline(X)..#e
09b0: 6c 69 66 20 48 41 56 45 5f 4c 49 4e 45 4e 4f 49  lif HAVE_LINENOI
09c0: 53 45 0a 0a 23 20 69 6e 63 6c 75 64 65 20 22 6c  SE..# include "l
09d0: 69 6e 65 6e 6f 69 73 65 2e 68 22 0a 23 20 64 65  inenoise.h".# de
09e0: 66 69 6e 65 20 73 68 65 6c 6c 5f 61 64 64 5f 68  fine shell_add_h
09f0: 69 73 74 6f 72 79 28 58 29 20 6c 69 6e 65 6e 6f  istory(X) lineno
0a00: 69 73 65 48 69 73 74 6f 72 79 41 64 64 28 58 29  iseHistoryAdd(X)
0a10: 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f  .# define shell_
0a20: 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58 29 20  read_history(X) 
0a30: 6c 69 6e 65 6e 6f 69 73 65 48 69 73 74 6f 72 79  linenoiseHistory
0a40: 4c 6f 61 64 28 58 29 0a 23 20 64 65 66 69 6e 65  Load(X).# define
0a50: 20 73 68 65 6c 6c 5f 77 72 69 74 65 5f 68 69 73   shell_write_his
0a60: 74 6f 72 79 28 58 29 20 6c 69 6e 65 6e 6f 69 73  tory(X) linenois
0a70: 65 48 69 73 74 6f 72 79 53 61 76 65 28 58 29 0a  eHistorySave(X).
0a80: 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 73  # define shell_s
0a90: 74 69 66 6c 65 5f 68 69 73 74 6f 72 79 28 58 29  tifle_history(X)
0aa0: 20 6c 69 6e 65 6e 6f 69 73 65 48 69 73 74 6f 72   linenoiseHistor
0ab0: 79 53 65 74 4d 61 78 4c 65 6e 28 58 29 0a 23 20  ySetMaxLen(X).# 
0ac0: 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 72 65 61  define shell_rea
0ad0: 64 6c 69 6e 65 28 58 29 20 6c 69 6e 65 6e 6f 69  dline(X) linenoi
0ae0: 73 65 28 58 29 0a 0a 23 65 6c 73 65 0a 0a 23 20  se(X)..#else..# 
0af0: 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 72 65 61  define shell_rea
0b00: 64 5f 68 69 73 74 6f 72 79 28 58 29 0a 23 20 64  d_history(X).# d
0b10: 65 66 69 6e 65 20 73 68 65 6c 6c 5f 77 72 69 74  efine shell_writ
0b20: 65 5f 68 69 73 74 6f 72 79 28 58 29 0a 23 20 64  e_history(X).# d
0b30: 65 66 69 6e 65 20 73 68 65 6c 6c 5f 73 74 69 66  efine shell_stif
0b40: 6c 65 5f 68 69 73 74 6f 72 79 28 58 29 0a 0a 23  le_history(X)..#
0b50: 20 64 65 66 69 6e 65 20 53 48 45 4c 4c 5f 55 53   define SHELL_US
0b60: 45 5f 4c 4f 43 41 4c 5f 47 45 54 4c 49 4e 45 20  E_LOCAL_GETLINE 
0b70: 31 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 20 64  1.#endif...#if d
0b80: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c  efined(_WIN32) |
0b90: 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29  | defined(WIN32)
0ba0: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 69 6f 2e 68  .# include <io.h
0bb0: 3e 0a 23 20 69 6e 63 6c 75 64 65 20 3c 66 63 6e  >.# include <fcn
0bc0: 74 6c 2e 68 3e 0a 23 20 64 65 66 69 6e 65 20 69  tl.h>.# define i
0bd0: 73 61 74 74 79 28 68 29 20 5f 69 73 61 74 74 79  satty(h) _isatty
0be0: 28 68 29 0a 23 20 69 66 6e 64 65 66 20 61 63 63  (h).# ifndef acc
0bf0: 65 73 73 0a 23 20 20 64 65 66 69 6e 65 20 61 63  ess.#  define ac
0c00: 63 65 73 73 28 66 2c 6d 29 20 5f 61 63 63 65 73  cess(f,m) _acces
0c10: 73 28 28 66 29 2c 28 6d 29 29 0a 23 20 65 6e 64  s((f),(m)).# end
0c20: 69 66 0a 23 20 75 6e 64 65 66 20 70 6f 70 65 6e  if.# undef popen
0c30: 0a 23 20 64 65 66 69 6e 65 20 70 6f 70 65 6e 20  .# define popen 
0c40: 5f 70 6f 70 65 6e 0a 23 20 75 6e 64 65 66 20 70  _popen.# undef p
0c50: 63 6c 6f 73 65 0a 23 20 64 65 66 69 6e 65 20 70  close.# define p
0c60: 63 6c 6f 73 65 20 5f 70 63 6c 6f 73 65 0a 23 65  close _pclose.#e
0c70: 6c 73 65 0a 20 2f 2a 20 4d 61 6b 65 20 73 75 72  lse. /* Make sur
0c80: 65 20 69 73 61 74 74 79 28 29 20 68 61 73 20 61  e isatty() has a
0c90: 20 70 72 6f 74 6f 74 79 70 65 2e 20 2a 2f 0a 20   prototype. */. 
0ca0: 65 78 74 65 72 6e 20 69 6e 74 20 69 73 61 74 74  extern int isatt
0cb0: 79 28 69 6e 74 29 3b 0a 0a 23 20 69 66 20 21 64  y(int);..# if !d
0cc0: 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29 20  efined(__RTP__) 
0cd0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 52 53  && !defined(_WRS
0ce0: 5f 4b 45 52 4e 45 4c 29 0a 20 20 2f 2a 20 70 6f  _KERNEL).  /* po
0cf0: 70 65 6e 20 61 6e 64 20 70 63 6c 6f 73 65 20 61  pen and pclose a
0d00: 72 65 20 6e 6f 74 20 43 38 39 20 66 75 6e 63 74  re not C89 funct
0d10: 69 6f 6e 73 20 61 6e 64 20 73 6f 20 61 72 65 0a  ions and so are.
0d20: 20 20 2a 2a 20 73 6f 6d 65 74 69 6d 65 73 20 6f    ** sometimes o
0d30: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
0d40: 3c 73 74 64 69 6f 2e 68 3e 20 68 65 61 64 65 72  <stdio.h> header
0d50: 20 2a 2f 0a 20 20 20 65 78 74 65 72 6e 20 46 49   */.   extern FI
0d60: 4c 45 20 2a 70 6f 70 65 6e 28 63 6f 6e 73 74 20  LE *popen(const 
0d70: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
0d80: 2a 29 3b 0a 20 20 20 65 78 74 65 72 6e 20 69 6e  *);.   extern in
0d90: 74 20 70 63 6c 6f 73 65 28 46 49 4c 45 2a 29 3b  t pclose(FILE*);
0da0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
0db0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f  e SQLITE_OMIT_PO
0dc0: 50 45 4e 20 31 0a 23 20 65 6e 64 69 66 0a 23 65  PEN 1.# endif.#e
0dd0: 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
0de0: 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 2f 2a  d(_WIN32_WCE)./*
0df0: 20 57 69 6e 64 6f 77 73 20 43 45 20 28 61 72 6d   Windows CE (arm
0e00: 2d 77 69 6e 63 65 2d 6d 69 6e 67 77 33 32 63 65  -wince-mingw32ce
0e10: 2d 67 63 63 29 20 64 6f 65 73 20 6e 6f 74 20 70  -gcc) does not p
0e20: 72 6f 76 69 64 65 20 69 73 61 74 74 79 28 29 0a  rovide isatty().
0e30: 20 2a 20 74 68 75 73 20 77 65 20 61 6c 77 61 79   * thus we alway
0e40: 73 20 61 73 73 75 6d 65 20 74 68 61 74 20 77 65  s assume that we
0e50: 20 68 61 76 65 20 61 20 63 6f 6e 73 6f 6c 65 2e   have a console.
0e60: 20 54 68 61 74 20 63 61 6e 20 62 65 0a 20 2a 20   That can be. * 
0e70: 6f 76 65 72 72 69 64 64 65 6e 20 77 69 74 68 20  overridden with 
0e80: 74 68 65 20 2d 62 61 74 63 68 20 63 6f 6d 6d 61  the -batch comma
0e90: 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a  nd line option..
0ea0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 61 74   */.#define isat
0eb0: 74 79 28 78 29 20 31 0a 23 65 6e 64 69 66 0a 0a  ty(x) 1.#endif..
0ec0: 2f 2a 20 63 74 79 70 65 20 6d 61 63 72 6f 73 20  /* ctype macros 
0ed0: 74 68 61 74 20 77 6f 72 6b 20 77 69 74 68 20 73  that work with s
0ee0: 69 67 6e 65 64 20 63 68 61 72 61 63 74 65 72 73  igned characters
0ef0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 53 70   */.#define IsSp
0f00: 61 63 65 28 58 29 20 20 69 73 73 70 61 63 65 28  ace(X)  isspace(
0f10: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 58  (unsigned char)X
0f20: 29 0a 23 64 65 66 69 6e 65 20 49 73 44 69 67 69  ).#define IsDigi
0f30: 74 28 58 29 20 20 69 73 64 69 67 69 74 28 28 75  t(X)  isdigit((u
0f40: 6e 73 69 67 6e 65 64 20 63 68 61 72 29 58 29 0a  nsigned char)X).
0f50: 23 64 65 66 69 6e 65 20 54 6f 4c 6f 77 65 72 28  #define ToLower(
0f60: 58 29 20 20 28 63 68 61 72 29 74 6f 6c 6f 77 65  X)  (char)tolowe
0f70: 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
0f80: 29 58 29 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  )X)..#if defined
0f90: 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69  (_WIN32) || defi
0fa0: 6e 65 64 28 57 49 4e 33 32 29 0a 23 69 6e 63 6c  ned(WIN32).#incl
0fb0: 75 64 65 20 3c 77 69 6e 64 6f 77 73 2e 68 3e 0a  ude <windows.h>.
0fc0: 0a 2f 2a 20 73 74 72 69 6e 67 20 63 6f 6e 76 65  ./* string conve
0fd0: 72 73 69 6f 6e 20 72 6f 75 74 69 6e 65 73 20 6f  rsion routines o
0fe0: 6e 6c 79 20 6e 65 65 64 65 64 20 6f 6e 20 57 69  nly needed on Wi
0ff0: 6e 33 32 20 2a 2f 0a 65 78 74 65 72 6e 20 63 68  n32 */.extern ch
1000: 61 72 20 2a 73 71 6c 69 74 65 33 5f 77 69 6e 33  ar *sqlite3_win3
1010: 32 5f 75 6e 69 63 6f 64 65 5f 74 6f 5f 75 74 66  2_unicode_to_utf
1020: 38 28 4c 50 43 57 53 54 52 29 3b 0a 65 78 74 65  8(LPCWSTR);.exte
1030: 72 6e 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  rn char *sqlite3
1040: 5f 77 69 6e 33 32 5f 6d 62 63 73 5f 74 6f 5f 75  _win32_mbcs_to_u
1050: 74 66 38 5f 76 32 28 63 6f 6e 73 74 20 63 68 61  tf8_v2(const cha
1060: 72 20 2a 2c 20 69 6e 74 29 3b 0a 65 78 74 65 72  r *, int);.exter
1070: 6e 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  n char *sqlite3_
1080: 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 6d 62  win32_utf8_to_mb
1090: 63 73 5f 76 32 28 63 6f 6e 73 74 20 63 68 61 72  cs_v2(const char
10a0: 20 2a 2c 20 69 6e 74 29 3b 0a 65 78 74 65 72 6e   *, int);.extern
10b0: 20 4c 50 57 53 54 52 20 73 71 6c 69 74 65 33 5f   LPWSTR sqlite3_
10c0: 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 75 6e  win32_utf8_to_un
10d0: 69 63 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72  icode(const char
10e0: 20 2a 7a 54 65 78 74 29 3b 0a 23 65 6e 64 69 66   *zText);.#endif
10f0: 0a 0a 2f 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c  ../* On Windows,
1100: 20 77 65 20 6e 6f 72 6d 61 6c 6c 79 20 72 75 6e   we normally run
1110: 20 77 69 74 68 20 6f 75 74 70 75 74 20 6d 6f 64   with output mod
1120: 65 20 6f 66 20 54 45 58 54 20 73 6f 20 74 68 61  e of TEXT so tha
1130: 74 20 5c 6e 20 63 68 61 72 61 63 74 65 72 73 0a  t \n characters.
1140: 2a 2a 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ** are automatic
1150: 61 6c 6c 79 20 74 72 61 6e 73 6c 61 74 65 64 20  ally translated 
1160: 69 6e 74 6f 20 5c 72 5c 6e 2e 20 20 48 6f 77 65  into \r\n.  Howe
1170: 76 65 72 2c 20 74 68 69 73 20 62 65 68 61 76 69  ver, this behavi
1180: 6f 72 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62  or needs.** to b
1190: 65 20 64 69 73 61 62 6c 65 64 20 69 6e 20 73 6f  e disabled in so
11a0: 6d 65 20 63 61 73 65 73 20 28 65 78 3a 20 77 68  me cases (ex: wh
11b0: 65 6e 20 67 65 6e 65 72 61 74 69 6e 67 20 43 53  en generating CS
11c0: 56 20 6f 75 74 70 75 74 20 61 6e 64 20 77 68 65  V output and whe
11d0: 6e 0a 2a 2a 20 72 65 6e 64 65 72 69 6e 67 20 71  n.** rendering q
11e0: 75 6f 74 65 64 20 73 74 72 69 6e 67 73 20 74 68  uoted strings th
11f0: 61 74 20 63 6f 6e 74 61 69 6e 20 5c 6e 20 63 68  at contain \n ch
1200: 61 72 61 63 74 65 72 73 29 2e 20 20 54 68 65 20  aracters).  The 
1210: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 72 6f 75  following.** rou
1220: 74 69 6e 65 73 20 74 61 6b 65 20 63 61 72 65 20  tines take care 
1230: 6f 66 20 74 68 61 74 2e 0a 2a 2f 0a 23 69 66 20  of that..*/.#if 
1240: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
1250: 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
1260: 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65  ).static void se
1270: 74 42 69 6e 61 72 79 4d 6f 64 65 28 46 49 4c 45  tBinaryMode(FILE
1280: 20 2a 66 69 6c 65 2c 20 69 6e 74 20 69 73 4f 75   *file, int isOu
1290: 74 70 75 74 29 7b 0a 20 20 69 66 28 20 69 73 4f  tput){.  if( isO
12a0: 75 74 70 75 74 20 29 20 66 66 6c 75 73 68 28 66  utput ) fflush(f
12b0: 69 6c 65 29 3b 0a 20 20 5f 73 65 74 6d 6f 64 65  ile);.  _setmode
12c0: 28 5f 66 69 6c 65 6e 6f 28 66 69 6c 65 29 2c 20  (_fileno(file), 
12d0: 5f 4f 5f 42 49 4e 41 52 59 29 3b 0a 7d 0a 73 74  _O_BINARY);.}.st
12e0: 61 74 69 63 20 76 6f 69 64 20 73 65 74 54 65 78  atic void setTex
12f0: 74 4d 6f 64 65 28 46 49 4c 45 20 2a 66 69 6c 65  tMode(FILE *file
1300: 2c 20 69 6e 74 20 69 73 4f 75 74 70 75 74 29 7b  , int isOutput){
1310: 0a 20 20 69 66 28 20 69 73 4f 75 74 70 75 74 20  .  if( isOutput 
1320: 29 20 66 66 6c 75 73 68 28 66 69 6c 65 29 3b 0a  ) fflush(file);.
1330: 20 20 5f 73 65 74 6d 6f 64 65 28 5f 66 69 6c 65    _setmode(_file
1340: 6e 6f 28 66 69 6c 65 29 2c 20 5f 4f 5f 54 45 58  no(file), _O_TEX
1350: 54 29 3b 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65  T);.}.#else.# de
1360: 66 69 6e 65 20 73 65 74 42 69 6e 61 72 79 4d 6f  fine setBinaryMo
1370: 64 65 28 58 2c 59 29 0a 23 20 64 65 66 69 6e 65  de(X,Y).# define
1380: 20 73 65 74 54 65 78 74 4d 6f 64 65 28 58 2c 59   setTextMode(X,Y
1390: 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 54 72  ).#endif.../* Tr
13a0: 75 65 20 69 66 20 74 68 65 20 74 69 6d 65 72 20  ue if the timer 
13b0: 69 73 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 73 74  is enabled */.st
13c0: 61 74 69 63 20 69 6e 74 20 65 6e 61 62 6c 65 54  atic int enableT
13d0: 69 6d 65 72 20 3d 20 30 3b 0a 0a 2f 2a 20 52 65  imer = 0;../* Re
13e0: 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
13f0: 20 77 61 6c 6c 2d 63 6c 6f 63 6b 20 74 69 6d 65   wall-clock time
1400: 20 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74   */.static sqlit
1410: 65 33 5f 69 6e 74 36 34 20 74 69 6d 65 4f 66 44  e3_int64 timeOfD
1420: 61 79 28 76 6f 69 64 29 7b 0a 20 20 73 74 61 74  ay(void){.  stat
1430: 69 63 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ic sqlite3_vfs *
1440: 63 6c 6f 63 6b 56 66 73 20 3d 20 30 3b 0a 20 20  clockVfs = 0;.  
1450: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 74 3b  sqlite3_int64 t;
1460: 0a 20 20 69 66 28 20 63 6c 6f 63 6b 56 66 73 3d  .  if( clockVfs=
1470: 3d 30 20 29 20 63 6c 6f 63 6b 56 66 73 20 3d 20  =0 ) clockVfs = 
1480: 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1490: 28 30 29 3b 0a 20 20 69 66 28 20 63 6c 6f 63 6b  (0);.  if( clock
14a0: 56 66 73 2d 3e 69 56 65 72 73 69 6f 6e 3e 3d 32  Vfs->iVersion>=2
14b0: 20 26 26 20 63 6c 6f 63 6b 56 66 73 2d 3e 78 43   && clockVfs->xC
14c0: 75 72 72 65 6e 74 54 69 6d 65 49 6e 74 36 34 21  urrentTimeInt64!
14d0: 3d 30 20 29 7b 0a 20 20 20 20 63 6c 6f 63 6b 56  =0 ){.    clockV
14e0: 66 73 2d 3e 78 43 75 72 72 65 6e 74 54 69 6d 65  fs->xCurrentTime
14f0: 49 6e 74 36 34 28 63 6c 6f 63 6b 56 66 73 2c 20  Int64(clockVfs, 
1500: 26 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  &t);.  }else{.  
1510: 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 20 20    double r;.    
1520: 63 6c 6f 63 6b 56 66 73 2d 3e 78 43 75 72 72 65  clockVfs->xCurre
1530: 6e 74 54 69 6d 65 28 63 6c 6f 63 6b 56 66 73 2c  ntTime(clockVfs,
1540: 20 26 72 29 3b 0a 20 20 20 20 74 20 3d 20 28 73   &r);.    t = (s
1550: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 28 72 2a  qlite3_int64)(r*
1560: 38 36 34 30 30 30 30 30 2e 30 29 3b 0a 20 20 7d  86400000.0);.  }
1570: 0a 20 20 72 65 74 75 72 6e 20 74 3b 0a 7d 0a 0a  .  return t;.}..
1580: 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49  #if !defined(_WI
1590: 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65 64  N32) && !defined
15a0: 28 57 49 4e 33 32 29 20 26 26 20 21 64 65 66 69  (WIN32) && !defi
15b0: 6e 65 64 28 5f 5f 6d 69 6e 75 78 29 0a 23 69 6e  ned(__minux).#in
15c0: 63 6c 75 64 65 20 3c 73 79 73 2f 74 69 6d 65 2e  clude <sys/time.
15d0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73  h>.#include <sys
15e0: 2f 72 65 73 6f 75 72 63 65 2e 68 3e 0a 0a 2f 2a  /resource.h>../*
15f0: 20 56 78 57 6f 72 6b 73 20 64 6f 65 73 20 6e 6f   VxWorks does no
1600: 74 20 73 75 70 70 6f 72 74 20 67 65 74 72 75 73  t support getrus
1610: 61 67 65 28 29 20 61 73 20 66 61 72 20 61 73 20  age() as far as 
1620: 77 65 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  we can determine
1630: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1640: 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 20 7c 7c 20  _WRS_KERNEL) || 
1650: 64 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29  defined(__RTP__)
1660: 0a 73 74 72 75 63 74 20 72 75 73 61 67 65 20 7b  .struct rusage {
1670: 0a 20 20 73 74 72 75 63 74 20 74 69 6d 65 76 61  .  struct timeva
1680: 6c 20 72 75 5f 75 74 69 6d 65 3b 20 2f 2a 20 75  l ru_utime; /* u
1690: 73 65 72 20 43 50 55 20 74 69 6d 65 20 75 73 65  ser CPU time use
16a0: 64 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 74 69  d */.  struct ti
16b0: 6d 65 76 61 6c 20 72 75 5f 73 74 69 6d 65 3b 20  meval ru_stime; 
16c0: 2f 2a 20 73 79 73 74 65 6d 20 43 50 55 20 74 69  /* system CPU ti
16d0: 6d 65 20 75 73 65 64 20 2a 2f 0a 7d 3b 0a 23 64  me used */.};.#d
16e0: 65 66 69 6e 65 20 67 65 74 72 75 73 61 67 65 28  efine getrusage(
16f0: 41 2c 42 29 20 6d 65 6d 73 65 74 28 42 2c 30 2c  A,B) memset(B,0,
1700: 73 69 7a 65 6f 66 28 2a 42 29 29 0a 23 65 6e 64  sizeof(*B)).#end
1710: 69 66 0a 0a 2f 2a 20 53 61 76 65 64 20 72 65 73  if../* Saved res
1720: 6f 75 72 63 65 20 69 6e 66 6f 72 6d 61 74 69 6f  ource informatio
1730: 6e 20 66 6f 72 20 74 68 65 20 62 65 67 69 6e 6e  n for the beginn
1740: 69 6e 67 20 6f 66 20 61 6e 20 6f 70 65 72 61 74  ing of an operat
1750: 69 6f 6e 20 2a 2f 0a 73 74 61 74 69 63 20 73 74  ion */.static st
1760: 72 75 63 74 20 72 75 73 61 67 65 20 73 42 65 67  ruct rusage sBeg
1770: 69 6e 3b 20 20 2f 2a 20 43 50 55 20 74 69 6d 65  in;  /* CPU time
1780: 20 61 74 20 73 74 61 72 74 20 2a 2f 0a 73 74 61   at start */.sta
1790: 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  tic sqlite3_int6
17a0: 34 20 69 42 65 67 69 6e 3b 20 20 2f 2a 20 57 61  4 iBegin;  /* Wa
17b0: 6c 6c 2d 63 6c 6f 63 6b 20 74 69 6d 65 20 61 74  ll-clock time at
17c0: 20 73 74 61 72 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   start */../*.**
17d0: 20 42 65 67 69 6e 20 74 69 6d 69 6e 67 20 61 6e   Begin timing an
17e0: 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2f 0a 73 74   operation.*/.st
17f0: 61 74 69 63 20 76 6f 69 64 20 62 65 67 69 6e 54  atic void beginT
1800: 69 6d 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66  imer(void){.  if
1810: 28 20 65 6e 61 62 6c 65 54 69 6d 65 72 20 29 7b  ( enableTimer ){
1820: 0a 20 20 20 20 67 65 74 72 75 73 61 67 65 28 52  .    getrusage(R
1830: 55 53 41 47 45 5f 53 45 4c 46 2c 20 26 73 42 65  USAGE_SELF, &sBe
1840: 67 69 6e 29 3b 0a 20 20 20 20 69 42 65 67 69 6e  gin);.    iBegin
1850: 20 3d 20 74 69 6d 65 4f 66 44 61 79 28 29 3b 0a   = timeOfDay();.
1860: 20 20 7d 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e    }.}../* Return
1870: 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
1880: 6f 66 20 74 77 6f 20 74 69 6d 65 5f 73 74 72 75  of two time_stru
1890: 63 74 73 20 69 6e 20 73 65 63 6f 6e 64 73 20 2a  cts in seconds *
18a0: 2f 0a 73 74 61 74 69 63 20 64 6f 75 62 6c 65 20  /.static double 
18b0: 74 69 6d 65 44 69 66 66 28 73 74 72 75 63 74 20  timeDiff(struct 
18c0: 74 69 6d 65 76 61 6c 20 2a 70 53 74 61 72 74 2c  timeval *pStart,
18d0: 20 73 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20   struct timeval 
18e0: 2a 70 45 6e 64 29 7b 0a 20 20 72 65 74 75 72 6e  *pEnd){.  return
18f0: 20 28 70 45 6e 64 2d 3e 74 76 5f 75 73 65 63 20   (pEnd->tv_usec 
1900: 2d 20 70 53 74 61 72 74 2d 3e 74 76 5f 75 73 65  - pStart->tv_use
1910: 63 29 2a 30 2e 30 30 30 30 30 31 20 2b 0a 20 20  c)*0.000001 +.  
1920: 20 20 20 20 20 20 20 28 64 6f 75 62 6c 65 29 28         (double)(
1930: 70 45 6e 64 2d 3e 74 76 5f 73 65 63 20 2d 20 70  pEnd->tv_sec - p
1940: 53 74 61 72 74 2d 3e 74 76 5f 73 65 63 29 3b 0a  Start->tv_sec);.
1950: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  }../*.** Print t
1960: 68 65 20 74 69 6d 69 6e 67 20 72 65 73 75 6c 74  he timing result
1970: 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  s..*/.static voi
1980: 64 20 65 6e 64 54 69 6d 65 72 28 76 6f 69 64 29  d endTimer(void)
1990: 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69  {.  if( enableTi
19a0: 6d 65 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  mer ){.    sqlit
19b0: 65 33 5f 69 6e 74 36 34 20 69 45 6e 64 20 3d 20  e3_int64 iEnd = 
19c0: 74 69 6d 65 4f 66 44 61 79 28 29 3b 0a 20 20 20  timeOfDay();.   
19d0: 20 73 74 72 75 63 74 20 72 75 73 61 67 65 20 73   struct rusage s
19e0: 45 6e 64 3b 0a 20 20 20 20 67 65 74 72 75 73 61  End;.    getrusa
19f0: 67 65 28 52 55 53 41 47 45 5f 53 45 4c 46 2c 20  ge(RUSAGE_SELF, 
1a00: 26 73 45 6e 64 29 3b 0a 20 20 20 20 70 72 69 6e  &sEnd);.    prin
1a10: 74 66 28 22 52 75 6e 20 54 69 6d 65 3a 20 72 65  tf("Run Time: re
1a20: 61 6c 20 25 2e 33 66 20 75 73 65 72 20 25 66 20  al %.3f user %f 
1a30: 73 79 73 20 25 66 5c 6e 22 2c 0a 20 20 20 20 20  sys %f\n",.     
1a40: 20 20 28 69 45 6e 64 20 2d 20 69 42 65 67 69 6e    (iEnd - iBegin
1a50: 29 2a 30 2e 30 30 31 2c 0a 20 20 20 20 20 20 20  )*0.001,.       
1a60: 74 69 6d 65 44 69 66 66 28 26 73 42 65 67 69 6e  timeDiff(&sBegin
1a70: 2e 72 75 5f 75 74 69 6d 65 2c 20 26 73 45 6e 64  .ru_utime, &sEnd
1a80: 2e 72 75 5f 75 74 69 6d 65 29 2c 0a 20 20 20 20  .ru_utime),.    
1a90: 20 20 20 74 69 6d 65 44 69 66 66 28 26 73 42 65     timeDiff(&sBe
1aa0: 67 69 6e 2e 72 75 5f 73 74 69 6d 65 2c 20 26 73  gin.ru_stime, &s
1ab0: 45 6e 64 2e 72 75 5f 73 74 69 6d 65 29 29 3b 0a  End.ru_stime));.
1ac0: 20 20 7d 0a 7d 0a 0a 23 64 65 66 69 6e 65 20 42    }.}..#define B
1ad0: 45 47 49 4e 5f 54 49 4d 45 52 20 62 65 67 69 6e  EGIN_TIMER begin
1ae0: 54 69 6d 65 72 28 29 0a 23 64 65 66 69 6e 65 20  Timer().#define 
1af0: 45 4e 44 5f 54 49 4d 45 52 20 65 6e 64 54 69 6d  END_TIMER endTim
1b00: 65 72 28 29 0a 23 64 65 66 69 6e 65 20 48 41 53  er().#define HAS
1b10: 5f 54 49 4d 45 52 20 31 0a 0a 23 65 6c 69 66 20  _TIMER 1..#elif 
1b20: 28 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29  (defined(_WIN32)
1b30: 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33   || defined(WIN3
1b40: 32 29 29 0a 0a 2f 2a 20 53 61 76 65 64 20 72 65  2))../* Saved re
1b50: 73 6f 75 72 63 65 20 69 6e 66 6f 72 6d 61 74 69  source informati
1b60: 6f 6e 20 66 6f 72 20 74 68 65 20 62 65 67 69 6e  on for the begin
1b70: 6e 69 6e 67 20 6f 66 20 61 6e 20 6f 70 65 72 61  ning of an opera
1b80: 74 69 6f 6e 20 2a 2f 0a 73 74 61 74 69 63 20 48  tion */.static H
1b90: 41 4e 44 4c 45 20 68 50 72 6f 63 65 73 73 3b 0a  ANDLE hProcess;.
1ba0: 73 74 61 74 69 63 20 46 49 4c 45 54 49 4d 45 20  static FILETIME 
1bb0: 66 74 4b 65 72 6e 65 6c 42 65 67 69 6e 3b 0a 73  ftKernelBegin;.s
1bc0: 74 61 74 69 63 20 46 49 4c 45 54 49 4d 45 20 66  tatic FILETIME f
1bd0: 74 55 73 65 72 42 65 67 69 6e 3b 0a 73 74 61 74  tUserBegin;.stat
1be0: 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  ic sqlite3_int64
1bf0: 20 66 74 57 61 6c 6c 42 65 67 69 6e 3b 0a 74 79   ftWallBegin;.ty
1c00: 70 65 64 65 66 20 42 4f 4f 4c 20 28 57 49 4e 41  pedef BOOL (WINA
1c10: 50 49 20 2a 47 45 54 50 52 4f 43 54 49 4d 45 53  PI *GETPROCTIMES
1c20: 29 28 48 41 4e 44 4c 45 2c 20 4c 50 46 49 4c 45  )(HANDLE, LPFILE
1c30: 54 49 4d 45 2c 20 4c 50 46 49 4c 45 54 49 4d 45  TIME, LPFILETIME
1c40: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 20 20 20 20 20 4c 50 46 49 4c 45 54 49 4d 45        LPFILETIME
1c70: 2c 20 4c 50 46 49 4c 45 54 49 4d 45 29 3b 0a 73  , LPFILETIME);.s
1c80: 74 61 74 69 63 20 47 45 54 50 52 4f 43 54 49 4d  tatic GETPROCTIM
1c90: 45 53 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d  ES getProcessTim
1ca0: 65 73 41 64 64 72 20 3d 20 4e 55 4c 4c 3b 0a 0a  esAddr = NULL;..
1cb0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
1cc0: 65 65 20 69 66 20 77 65 20 68 61 76 65 20 74 69  ee if we have ti
1cd0: 6d 65 72 20 73 75 70 70 6f 72 74 2e 20 20 52 65  mer support.  Re
1ce0: 74 75 72 6e 20 31 20 69 66 20 6e 65 63 65 73 73  turn 1 if necess
1cf0: 61 72 79 0a 2a 2a 20 73 75 70 70 6f 72 74 20 66  ary.** support f
1d00: 6f 75 6e 64 20 28 6f 72 20 66 6f 75 6e 64 20 70  ound (or found p
1d10: 72 65 76 69 6f 75 73 6c 79 29 2e 0a 2a 2f 0a 73  reviously)..*/.s
1d20: 74 61 74 69 63 20 69 6e 74 20 68 61 73 54 69 6d  tatic int hasTim
1d30: 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20  er(void){.  if( 
1d40: 67 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41  getProcessTimesA
1d50: 64 64 72 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ddr ){.    retur
1d60: 6e 20 31 3b 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  n 1;.  } else {.
1d70: 20 20 20 20 2f 2a 20 47 65 74 50 72 6f 63 65 73      /* GetProces
1d80: 73 54 69 6d 65 73 28 29 20 69 73 6e 27 74 20 73  sTimes() isn't s
1d90: 75 70 70 6f 72 74 65 64 20 69 6e 20 57 49 4e 39  upported in WIN9
1da0: 35 20 61 6e 64 20 73 6f 6d 65 20 6f 74 68 65 72  5 and some other
1db0: 20 57 69 6e 64 6f 77 73 0a 20 20 20 20 2a 2a 20   Windows.    ** 
1dc0: 76 65 72 73 69 6f 6e 73 2e 20 53 65 65 20 69 66  versions. See if
1dd0: 20 74 68 65 20 76 65 72 73 69 6f 6e 20 77 65 20   the version we 
1de0: 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 68  are running on h
1df0: 61 73 20 69 74 2c 20 61 6e 64 20 69 66 20 69 74  as it, and if it
1e00: 0a 20 20 20 20 2a 2a 20 64 6f 65 73 2c 20 73 61  .    ** does, sa
1e10: 76 65 20 6f 66 66 20 61 20 70 6f 69 6e 74 65 72  ve off a pointer
1e20: 20 74 6f 20 69 74 20 61 6e 64 20 74 68 65 20 63   to it and the c
1e30: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 68  urrent process h
1e40: 61 6e 64 6c 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  andle..    */.  
1e50: 20 20 68 50 72 6f 63 65 73 73 20 3d 20 47 65 74    hProcess = Get
1e60: 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29  CurrentProcess()
1e70: 3b 0a 20 20 20 20 69 66 28 20 68 50 72 6f 63 65  ;.    if( hProce
1e80: 73 73 20 29 7b 0a 20 20 20 20 20 20 48 49 4e 53  ss ){.      HINS
1e90: 54 41 4e 43 45 20 68 69 6e 73 74 4c 69 62 20 3d  TANCE hinstLib =
1ea0: 20 4c 6f 61 64 4c 69 62 72 61 72 79 28 54 45 58   LoadLibrary(TEX
1eb0: 54 28 22 4b 65 72 6e 65 6c 33 32 2e 64 6c 6c 22  T("Kernel32.dll"
1ec0: 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 4e 55  ));.      if( NU
1ed0: 4c 4c 20 21 3d 20 68 69 6e 73 74 4c 69 62 20 29  LL != hinstLib )
1ee0: 7b 0a 20 20 20 20 20 20 20 20 67 65 74 50 72 6f  {.        getPro
1ef0: 63 65 73 73 54 69 6d 65 73 41 64 64 72 20 3d 0a  cessTimesAddr =.
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 28 47 45 54              (GET
1f10: 50 52 4f 43 54 49 4d 45 53 29 20 47 65 74 50 72  PROCTIMES) GetPr
1f20: 6f 63 41 64 64 72 65 73 73 28 68 69 6e 73 74 4c  ocAddress(hinstL
1f30: 69 62 2c 20 22 47 65 74 50 72 6f 63 65 73 73 54  ib, "GetProcessT
1f40: 69 6d 65 73 22 29 3b 0a 20 20 20 20 20 20 20 20  imes");.        
1f50: 69 66 28 20 4e 55 4c 4c 20 21 3d 20 67 65 74 50  if( NULL != getP
1f60: 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64 72 20  rocessTimesAddr 
1f70: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ){.          ret
1f80: 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  urn 1;.        }
1f90: 0a 20 20 20 20 20 20 20 20 46 72 65 65 4c 69 62  .        FreeLib
1fa0: 72 61 72 79 28 68 69 6e 73 74 4c 69 62 29 3b 0a  rary(hinstLib);.
1fb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1fc0: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
1fd0: 0a 2f 2a 0a 2a 2a 20 42 65 67 69 6e 20 74 69 6d  ./*.** Begin tim
1fe0: 69 6e 67 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e  ing an operation
1ff0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2000: 62 65 67 69 6e 54 69 6d 65 72 28 76 6f 69 64 29  beginTimer(void)
2010: 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69  {.  if( enableTi
2020: 6d 65 72 20 26 26 20 67 65 74 50 72 6f 63 65 73  mer && getProces
2030: 73 54 69 6d 65 73 41 64 64 72 20 29 7b 0a 20 20  sTimesAddr ){.  
2040: 20 20 46 49 4c 45 54 49 4d 45 20 66 74 43 72 65    FILETIME ftCre
2050: 61 74 69 6f 6e 2c 20 66 74 45 78 69 74 3b 0a 20  ation, ftExit;. 
2060: 20 20 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d     getProcessTim
2070: 65 73 41 64 64 72 28 68 50 72 6f 63 65 73 73 2c  esAddr(hProcess,
2080: 26 66 74 43 72 65 61 74 69 6f 6e 2c 26 66 74 45  &ftCreation,&ftE
2090: 78 69 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  xit,.           
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 66 74               &ft
20b0: 4b 65 72 6e 65 6c 42 65 67 69 6e 2c 26 66 74 55  KernelBegin,&ftU
20c0: 73 65 72 42 65 67 69 6e 29 3b 0a 20 20 20 20 66  serBegin);.    f
20d0: 74 57 61 6c 6c 42 65 67 69 6e 20 3d 20 74 69 6d  tWallBegin = tim
20e0: 65 4f 66 44 61 79 28 29 3b 0a 20 20 7d 0a 7d 0a  eOfDay();.  }.}.
20f0: 0a 2f 2a 20 52 65 74 75 72 6e 20 74 68 65 20 64  ./* Return the d
2100: 69 66 66 65 72 65 6e 63 65 20 6f 66 20 74 77 6f  ifference of two
2110: 20 46 49 4c 45 54 49 4d 45 20 73 74 72 75 63 74   FILETIME struct
2120: 73 20 69 6e 20 73 65 63 6f 6e 64 73 20 2a 2f 0a  s in seconds */.
2130: 73 74 61 74 69 63 20 64 6f 75 62 6c 65 20 74 69  static double ti
2140: 6d 65 44 69 66 66 28 46 49 4c 45 54 49 4d 45 20  meDiff(FILETIME 
2150: 2a 70 53 74 61 72 74 2c 20 46 49 4c 45 54 49 4d  *pStart, FILETIM
2160: 45 20 2a 70 45 6e 64 29 7b 0a 20 20 73 71 6c 69  E *pEnd){.  sqli
2170: 74 65 5f 69 6e 74 36 34 20 69 36 34 53 74 61 72  te_int64 i64Star
2180: 74 20 3d 20 2a 28 28 73 71 6c 69 74 65 5f 69 6e  t = *((sqlite_in
2190: 74 36 34 20 2a 29 20 70 53 74 61 72 74 29 3b 0a  t64 *) pStart);.
21a0: 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69    sqlite_int64 i
21b0: 36 34 45 6e 64 20 3d 20 2a 28 28 73 71 6c 69 74  64End = *((sqlit
21c0: 65 5f 69 6e 74 36 34 20 2a 29 20 70 45 6e 64 29  e_int64 *) pEnd)
21d0: 3b 0a 20 20 72 65 74 75 72 6e 20 28 64 6f 75 62  ;.  return (doub
21e0: 6c 65 29 20 28 28 69 36 34 45 6e 64 20 2d 20 69  le) ((i64End - i
21f0: 36 34 53 74 61 72 74 29 20 2f 20 31 30 30 30 30  64Start) / 10000
2200: 30 30 30 2e 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  000.0);.}../*.**
2210: 20 50 72 69 6e 74 20 74 68 65 20 74 69 6d 69 6e   Print the timin
2220: 67 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 73 74  g results..*/.st
2230: 61 74 69 63 20 76 6f 69 64 20 65 6e 64 54 69 6d  atic void endTim
2240: 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20  er(void){.  if( 
2250: 65 6e 61 62 6c 65 54 69 6d 65 72 20 26 26 20 67  enableTimer && g
2260: 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64  etProcessTimesAd
2270: 64 72 29 7b 0a 20 20 20 20 46 49 4c 45 54 49 4d  dr){.    FILETIM
2280: 45 20 66 74 43 72 65 61 74 69 6f 6e 2c 20 66 74  E ftCreation, ft
2290: 45 78 69 74 2c 20 66 74 4b 65 72 6e 65 6c 45 6e  Exit, ftKernelEn
22a0: 64 2c 20 66 74 55 73 65 72 45 6e 64 3b 0a 20 20  d, ftUserEnd;.  
22b0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
22c0: 66 74 57 61 6c 6c 45 6e 64 20 3d 20 74 69 6d 65  ftWallEnd = time
22d0: 4f 66 44 61 79 28 29 3b 0a 20 20 20 20 67 65 74  OfDay();.    get
22e0: 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64 72  ProcessTimesAddr
22f0: 28 68 50 72 6f 63 65 73 73 2c 26 66 74 43 72 65  (hProcess,&ftCre
2300: 61 74 69 6f 6e 2c 26 66 74 45 78 69 74 2c 26 66  ation,&ftExit,&f
2310: 74 4b 65 72 6e 65 6c 45 6e 64 2c 26 66 74 55 73  tKernelEnd,&ftUs
2320: 65 72 45 6e 64 29 3b 0a 20 20 20 20 70 72 69 6e  erEnd);.    prin
2330: 74 66 28 22 52 75 6e 20 54 69 6d 65 3a 20 72 65  tf("Run Time: re
2340: 61 6c 20 25 2e 33 66 20 75 73 65 72 20 25 66 20  al %.3f user %f 
2350: 73 79 73 20 25 66 5c 6e 22 2c 0a 20 20 20 20 20  sys %f\n",.     
2360: 20 20 28 66 74 57 61 6c 6c 45 6e 64 20 2d 20 66    (ftWallEnd - f
2370: 74 57 61 6c 6c 42 65 67 69 6e 29 2a 30 2e 30 30  tWallBegin)*0.00
2380: 31 2c 0a 20 20 20 20 20 20 20 74 69 6d 65 44 69  1,.       timeDi
2390: 66 66 28 26 66 74 55 73 65 72 42 65 67 69 6e 2c  ff(&ftUserBegin,
23a0: 20 26 66 74 55 73 65 72 45 6e 64 29 2c 0a 20 20   &ftUserEnd),.  
23b0: 20 20 20 20 20 74 69 6d 65 44 69 66 66 28 26 66       timeDiff(&f
23c0: 74 4b 65 72 6e 65 6c 42 65 67 69 6e 2c 20 26 66  tKernelBegin, &f
23d0: 74 4b 65 72 6e 65 6c 45 6e 64 29 29 3b 0a 20 20  tKernelEnd));.  
23e0: 7d 0a 7d 0a 0a 23 64 65 66 69 6e 65 20 42 45 47  }.}..#define BEG
23f0: 49 4e 5f 54 49 4d 45 52 20 62 65 67 69 6e 54 69  IN_TIMER beginTi
2400: 6d 65 72 28 29 0a 23 64 65 66 69 6e 65 20 45 4e  mer().#define EN
2410: 44 5f 54 49 4d 45 52 20 65 6e 64 54 69 6d 65 72  D_TIMER endTimer
2420: 28 29 0a 23 64 65 66 69 6e 65 20 48 41 53 5f 54  ().#define HAS_T
2430: 49 4d 45 52 20 68 61 73 54 69 6d 65 72 28 29 0a  IMER hasTimer().
2440: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 42  .#else.#define B
2450: 45 47 49 4e 5f 54 49 4d 45 52 0a 23 64 65 66 69  EGIN_TIMER.#defi
2460: 6e 65 20 45 4e 44 5f 54 49 4d 45 52 0a 23 64 65  ne END_TIMER.#de
2470: 66 69 6e 65 20 48 41 53 5f 54 49 4d 45 52 20 30  fine HAS_TIMER 0
2480: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
2490: 73 65 64 20 74 6f 20 70 72 65 76 65 6e 74 20 77  sed to prevent w
24a0: 61 72 6e 69 6e 67 73 20 61 62 6f 75 74 20 75 6e  arnings about un
24b0: 75 73 65 64 20 70 61 72 61 6d 65 74 65 72 73 0a  used parameters.
24c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
24d0: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
24e0: 76 6f 69 64 29 28 78 29 0a 0a 2f 2a 0a 2a 2a 20  void)(x)../*.** 
24f0: 49 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  If the following
2500: 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
2510: 65 6e 20 63 6f 6d 6d 61 6e 64 20 65 78 65 63 75  en command execu
2520: 74 69 6f 6e 20 73 74 6f 70 73 0a 2a 2a 20 61 74  tion stops.** at
2530: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 77 65 20   an error if we 
2540: 61 72 65 20 6e 6f 74 20 69 6e 74 65 72 61 63 74  are not interact
2550: 69 76 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ive..*/.static i
2560: 6e 74 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72  nt bail_on_error
2570: 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 72   = 0;../*.** Thr
2580: 65 61 74 20 73 74 64 69 6e 20 61 73 20 61 6e 20  eat stdin as an 
2590: 69 6e 74 65 72 61 63 74 69 76 65 20 69 6e 70 75  interactive inpu
25a0: 74 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  t if the followi
25b0: 6e 67 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 69  ng variable.** i
25c0: 73 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77 69  s true.  Otherwi
25d0: 73 65 2c 20 61 73 73 75 6d 65 20 73 74 64 69 6e  se, assume stdin
25e0: 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f   is connected to
25f0: 20 61 20 66 69 6c 65 20 6f 72 20 70 69 70 65 2e   a file or pipe.
2600: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
2610: 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74  tdin_is_interact
2620: 69 76 65 20 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20  ive = 1;../*.** 
2630: 4f 6e 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65  On Windows syste
2640: 6d 73 20 77 65 20 68 61 76 65 20 74 6f 20 6b 6e  ms we have to kn
2650: 6f 77 20 69 66 20 73 74 61 6e 64 61 72 64 20 6f  ow if standard o
2660: 75 74 70 75 74 20 69 73 20 61 20 63 6f 6e 73 6f  utput is a conso
2670: 6c 65 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74  le.** in order t
2680: 6f 20 74 72 61 6e 73 6c 61 74 65 20 55 54 46 2d  o translate UTF-
2690: 38 20 69 6e 74 6f 20 4d 42 43 53 2e 20 20 54 68  8 into MBCS.  Th
26a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69  e following vari
26b0: 61 62 6c 65 20 69 73 0a 2a 2a 20 74 72 75 65 20  able is.** true 
26c0: 69 66 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 69  if translation i
26d0: 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73  s required..*/.s
26e0: 74 61 74 69 63 20 69 6e 74 20 73 74 64 6f 75 74  tatic int stdout
26f0: 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20 3d 20 31 3b  _is_console = 1;
2700: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
2710: 6f 77 69 6e 67 20 69 73 20 74 68 65 20 6f 70 65  owing is the ope
2720: 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  n SQLite databas
2730: 65 2e 20 20 57 65 20 6d 61 6b 65 20 61 20 70 6f  e.  We make a po
2740: 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68 69 73  inter.** to this
2750: 20 64 61 74 61 62 61 73 65 20 61 20 73 74 61 74   database a stat
2760: 69 63 20 76 61 72 69 61 62 6c 65 20 73 6f 20 74  ic variable so t
2770: 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 61 63  hat it can be ac
2780: 63 65 73 73 65 64 0a 2a 2a 20 62 79 20 74 68 65  cessed.** by the
2790: 20 53 49 47 49 4e 54 20 68 61 6e 64 6c 65 72 20   SIGINT handler 
27a0: 74 6f 20 69 6e 74 65 72 72 75 70 74 20 64 61 74  to interrupt dat
27b0: 61 62 61 73 65 20 70 72 6f 63 65 73 73 69 6e 67  abase processing
27c0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69  ..*/.static sqli
27d0: 74 65 33 20 2a 67 6c 6f 62 61 6c 44 62 20 3d 20  te3 *globalDb = 
27e0: 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 72 75 65 20 69  0;../*.** True i
27f0: 66 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 28  f an interrupt (
2800: 43 6f 6e 74 72 6f 6c 2d 43 29 20 68 61 73 20 62  Control-C) has b
2810: 65 65 6e 20 72 65 63 65 69 76 65 64 2e 0a 2a 2f  een received..*/
2820: 0a 73 74 61 74 69 63 20 76 6f 6c 61 74 69 6c 65  .static volatile
2830: 20 69 6e 74 20 73 65 65 6e 49 6e 74 65 72 72 75   int seenInterru
2840: 70 74 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54  pt = 0;../*.** T
2850: 68 69 73 20 69 73 20 74 68 65 20 6e 61 6d 65 20  his is the name 
2860: 6f 66 20 6f 75 72 20 70 72 6f 67 72 61 6d 2e 20  of our program. 
2870: 49 74 20 69 73 20 73 65 74 20 69 6e 20 6d 61 69  It is set in mai
2880: 6e 28 29 2c 20 75 73 65 64 0a 2a 2a 20 69 6e 20  n(), used.** in 
2890: 61 20 6e 75 6d 62 65 72 20 6f 66 20 6f 74 68 65  a number of othe
28a0: 72 20 70 6c 61 63 65 73 2c 20 6d 6f 73 74 6c 79  r places, mostly
28b0: 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
28c0: 67 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ges..*/.static c
28d0: 68 61 72 20 2a 41 72 67 76 30 3b 0a 0a 2f 2a 0a  har *Argv0;../*.
28e0: 2a 2a 20 50 72 6f 6d 70 74 20 73 74 72 69 6e 67  ** Prompt string
28f0: 73 2e 20 49 6e 69 74 69 61 6c 69 7a 65 64 20 69  s. Initialized i
2900: 6e 20 6d 61 69 6e 2e 20 53 65 74 74 61 62 6c 65  n main. Settable
2910: 20 77 69 74 68 0a 2a 2a 20 20 20 2e 70 72 6f 6d   with.**   .prom
2920: 70 74 20 6d 61 69 6e 20 63 6f 6e 74 69 6e 75 65  pt main continue
2930: 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  .*/.static char 
2940: 6d 61 69 6e 50 72 6f 6d 70 74 5b 32 30 5d 3b 20  mainPrompt[20]; 
2950: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 6c 69 6e      /* First lin
2960: 65 20 70 72 6f 6d 70 74 2e 20 64 65 66 61 75 6c  e prompt. defaul
2970: 74 3a 20 22 73 71 6c 69 74 65 3e 20 22 2a 2f 0a  t: "sqlite> "*/.
2980: 73 74 61 74 69 63 20 63 68 61 72 20 63 6f 6e 74  static char cont
2990: 69 6e 75 65 50 72 6f 6d 70 74 5b 32 30 5d 3b 20  inuePrompt[20]; 
29a0: 2f 2a 20 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 20  /* Continuation 
29b0: 70 72 6f 6d 70 74 2e 20 64 65 66 61 75 6c 74 3a  prompt. default:
29c0: 20 22 20 20 20 2e 2e 2e 3e 20 22 20 2a 2f 0a 0a   "   ...> " */..
29d0: 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72 20 6f 75 74  /*.** Render out
29e0: 70 75 74 20 6c 69 6b 65 20 66 70 72 69 6e 74 66  put like fprintf
29f0: 28 29 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20  ().  Except, if 
2a00: 74 68 65 20 6f 75 74 70 75 74 20 69 73 20 67 6f  the output is go
2a10: 69 6e 67 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  ing to the.** co
2a20: 6e 73 6f 6c 65 20 61 6e 64 20 69 66 20 74 68 69  nsole and if thi
2a30: 73 20 69 73 20 72 75 6e 6e 69 6e 67 20 6f 6e 20  s is running on 
2a40: 61 20 57 69 6e 64 6f 77 73 20 6d 61 63 68 69 6e  a Windows machin
2a50: 65 2c 20 74 72 61 6e 73 6c 61 74 65 20 74 68 65  e, translate the
2a60: 0a 2a 2a 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  .** output from 
2a70: 55 54 46 2d 38 20 69 6e 74 6f 20 4d 42 43 53 2e  UTF-8 into MBCS.
2a80: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2a90: 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e  _WIN32) || defin
2aa0: 65 64 28 57 49 4e 33 32 29 0a 76 6f 69 64 20 75  ed(WIN32).void u
2ab0: 74 66 38 5f 70 72 69 6e 74 66 28 46 49 4c 45 20  tf8_printf(FILE 
2ac0: 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  *out, const char
2ad0: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
2ae0: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20  .  va_list ap;. 
2af0: 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46   va_start(ap, zF
2b00: 6f 72 6d 61 74 29 3b 0a 20 20 69 66 28 20 73 74  ormat);.  if( st
2b10: 64 6f 75 74 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20  dout_is_console 
2b20: 26 26 20 28 6f 75 74 3d 3d 73 74 64 6f 75 74 20  && (out==stdout 
2b30: 7c 7c 20 6f 75 74 3d 3d 73 74 64 65 72 72 29 20  || out==stderr) 
2b40: 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 31 20  ){.    char *z1 
2b50: 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e  = sqlite3_vmprin
2b60: 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  tf(zFormat, ap);
2b70: 0a 20 20 20 20 63 68 61 72 20 2a 7a 32 20 3d 20  .    char *z2 = 
2b80: 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74  sqlite3_win32_ut
2b90: 66 38 5f 74 6f 5f 6d 62 63 73 5f 76 32 28 7a 31  f8_to_mbcs_v2(z1
2ba0: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
2bb0: 33 5f 66 72 65 65 28 7a 31 29 3b 0a 20 20 20 20  3_free(z1);.    
2bc0: 66 70 75 74 73 28 7a 32 2c 20 6f 75 74 29 3b 0a  fputs(z2, out);.
2bd0: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2be0: 28 7a 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (z2);.  }else{. 
2bf0: 20 20 20 76 66 70 72 69 6e 74 66 28 6f 75 74 2c     vfprintf(out,
2c00: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20   zFormat, ap);. 
2c10: 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b   }.  va_end(ap);
2c20: 0a 7d 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  .}.#elif !define
2c30: 64 28 75 74 66 38 5f 70 72 69 6e 74 66 29 0a 23  d(utf8_printf).#
2c40: 20 64 65 66 69 6e 65 20 75 74 66 38 5f 70 72 69   define utf8_pri
2c50: 6e 74 66 20 66 70 72 69 6e 74 66 0a 23 65 6e 64  ntf fprintf.#end
2c60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72  if../*.** Render
2c70: 20 6f 75 74 70 75 74 20 6c 69 6b 65 20 66 70 72   output like fpr
2c80: 69 6e 74 66 28 29 2e 20 20 54 68 69 73 20 73 68  intf().  This sh
2c90: 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64  ould not be used
2ca0: 20 6f 6e 20 61 6e 79 74 68 69 6e 67 20 74 68 61   on anything tha
2cb0: 74 0a 2a 2a 20 69 6e 63 6c 75 64 65 73 20 73 74  t.** includes st
2cc0: 72 69 6e 67 20 66 6f 72 6d 61 74 74 69 6e 67 20  ring formatting 
2cd0: 28 65 2e 67 2e 20 22 25 73 22 29 2e 0a 2a 2f 0a  (e.g. "%s")..*/.
2ce0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 72 61 77  #if !defined(raw
2cf0: 5f 70 72 69 6e 74 66 29 0a 23 20 64 65 66 69 6e  _printf).# defin
2d00: 65 20 72 61 77 5f 70 72 69 6e 74 66 20 66 70 72  e raw_printf fpr
2d10: 69 6e 74 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  intf.#endif../*.
2d20: 2a 2a 20 57 72 69 74 65 20 49 2f 4f 20 74 72 61  ** Write I/O tra
2d30: 63 65 73 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ces to the follo
2d40: 77 69 6e 67 20 73 74 72 65 61 6d 2e 0a 2a 2f 0a  wing stream..*/.
2d50: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2d60: 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 73 74 61  ABLE_IOTRACE.sta
2d70: 74 69 63 20 46 49 4c 45 20 2a 69 6f 74 72 61 63  tic FILE *iotrac
2d80: 65 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  e = 0;.#endif../
2d90: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
2da0: 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 70 72 69  e works like pri
2db0: 6e 74 66 20 69 6e 20 74 68 61 74 20 69 74 73 20  ntf in that its 
2dc0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
2dd0: 73 20 61 0a 2a 2a 20 66 6f 72 6d 61 74 20 73 74  s a.** format st
2de0: 72 69 6e 67 20 61 6e 64 20 73 75 62 73 65 71 75  ring and subsequ
2df0: 65 6e 74 20 61 72 67 75 6d 65 6e 74 73 20 61 72  ent arguments ar
2e00: 65 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 73  e values to be s
2e10: 75 62 73 74 69 74 75 74 65 64 0a 2a 2a 20 69 6e  ubstituted.** in
2e20: 20 70 6c 61 63 65 20 6f 66 20 25 20 66 69 65 6c   place of % fiel
2e30: 64 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  ds.  The result 
2e40: 6f 66 20 66 6f 72 6d 61 74 74 69 6e 67 20 74 68  of formatting th
2e50: 69 73 20 73 74 72 69 6e 67 0a 2a 2a 20 69 73 20  is string.** is 
2e60: 77 72 69 74 74 65 6e 20 74 6f 20 69 6f 74 72 61  written to iotra
2e70: 63 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ce..*/.#ifdef SQ
2e80: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
2e90: 41 43 45 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ACE.static void 
2ea0: 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 69 6f 74  SQLITE_CDECL iot
2eb0: 72 61 63 65 50 72 69 6e 74 66 28 63 6f 6e 73 74  racePrintf(const
2ec0: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
2ed0: 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20  ...){.  va_list 
2ee0: 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  ap;.  char *z;. 
2ef0: 20 69 66 28 20 69 6f 74 72 61 63 65 3d 3d 30 20   if( iotrace==0 
2f00: 29 20 72 65 74 75 72 6e 3b 0a 20 20 76 61 5f 73  ) return;.  va_s
2f10: 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74  tart(ap, zFormat
2f20: 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
2f30: 5f 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61  _vmprintf(zForma
2f40: 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64  t, ap);.  va_end
2f50: 28 61 70 29 3b 0a 20 20 75 74 66 38 5f 70 72 69  (ap);.  utf8_pri
2f60: 6e 74 66 28 69 6f 74 72 61 63 65 2c 20 22 25 73  ntf(iotrace, "%s
2f70: 22 2c 20 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33  ", z);.  sqlite3
2f80: 5f 66 72 65 65 28 7a 29 3b 0a 7d 0a 23 65 6e 64  _free(z);.}.#end
2f90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74  if../*.** Output
2fa0: 20 73 74 72 69 6e 67 20 7a 55 74 66 20 74 6f 20   string zUtf to 
2fb0: 73 74 72 65 61 6d 20 70 4f 75 74 20 61 73 20 77  stream pOut as w
2fc0: 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 49 66   characters.  If
2fd0: 20 77 20 69 73 20 6e 65 67 61 74 69 76 65 2c 0a   w is negative,.
2fe0: 2a 2a 20 74 68 65 6e 20 72 69 67 68 74 2d 6a 75  ** then right-ju
2ff0: 73 74 69 66 79 20 74 68 65 20 74 65 78 74 2e 20  stify the text. 
3000: 20 57 20 69 73 20 74 68 65 20 77 69 64 74 68 20   W is the width 
3010: 69 6e 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  in UTF-8 charact
3020: 65 72 73 2c 20 6e 6f 74 0a 2a 2a 20 69 6e 20 62  ers, not.** in b
3030: 79 74 65 73 2e 20 20 54 68 69 73 20 69 73 20 64  ytes.  This is d
3040: 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68  ifferent from th
3050: 65 20 25 2a 2e 2a 73 20 73 70 65 63 69 66 69 63  e %*.*s specific
3060: 61 74 69 6f 6e 20 69 6e 20 70 72 69 6e 74 66 0a  ation in printf.
3070: 2a 2a 20 73 69 6e 63 65 20 77 69 74 68 20 25 2a  ** since with %*
3080: 2e 2a 73 20 74 68 65 20 77 69 64 74 68 20 69 73  .*s the width is
3090: 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79 74   measured in byt
30a0: 65 73 2c 20 6e 6f 74 20 63 68 61 72 61 63 74 65  es, not characte
30b0: 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  rs..*/.static vo
30c0: 69 64 20 75 74 66 38 5f 77 69 64 74 68 5f 70 72  id utf8_width_pr
30d0: 69 6e 74 28 46 49 4c 45 20 2a 70 4f 75 74 2c 20  int(FILE *pOut, 
30e0: 69 6e 74 20 77 2c 20 63 6f 6e 73 74 20 63 68 61  int w, const cha
30f0: 72 20 2a 7a 55 74 66 29 7b 0a 20 20 69 6e 74 20  r *zUtf){.  int 
3100: 69 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e  i;.  int n;.  in
3110: 74 20 61 77 20 3d 20 77 3c 30 20 3f 20 2d 77 20  t aw = w<0 ? -w 
3120: 3a 20 77 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  : w;.  char zBuf
3130: 5b 31 30 30 30 5d 3b 0a 20 20 69 66 28 20 61 77  [1000];.  if( aw
3140: 3e 28 69 6e 74 29 73 69 7a 65 6f 66 28 7a 42 75  >(int)sizeof(zBu
3150: 66 29 2f 33 20 29 20 61 77 20 3d 20 28 69 6e 74  f)/3 ) aw = (int
3160: 29 73 69 7a 65 6f 66 28 7a 42 75 66 29 2f 33 3b  )sizeof(zBuf)/3;
3170: 0a 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 7a 55  .  for(i=n=0; zU
3180: 74 66 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20  tf[i]; i++){.   
3190: 20 69 66 28 20 28 7a 55 74 66 5b 69 5d 26 30 78   if( (zUtf[i]&0x
31a0: 63 30 29 21 3d 30 78 38 30 20 29 7b 0a 20 20 20  c0)!=0x80 ){.   
31b0: 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 69 66     n++;.      if
31c0: 28 20 6e 3d 3d 61 77 20 29 7b 0a 20 20 20 20 20  ( n==aw ){.     
31d0: 20 20 20 64 6f 7b 20 69 2b 2b 3b 20 7d 77 68 69     do{ i++; }whi
31e0: 6c 65 28 20 28 7a 55 74 66 5b 69 5d 26 30 78 63  le( (zUtf[i]&0xc
31f0: 30 29 3d 3d 30 78 38 30 20 29 3b 0a 20 20 20 20  0)==0x80 );.    
3200: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
3210: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69   }.    }.  }.  i
3220: 66 28 20 6e 3e 3d 61 77 20 29 7b 0a 20 20 20 20  f( n>=aw ){.    
3230: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 4f 75 74  utf8_printf(pOut
3240: 2c 20 22 25 2e 2a 73 22 2c 20 69 2c 20 7a 55 74  , "%.*s", i, zUt
3250: 66 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  f);.  }else if( 
3260: 77 3c 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  w<0 ){.    utf8_
3270: 70 72 69 6e 74 66 28 70 4f 75 74 2c 20 22 25 2a  printf(pOut, "%*
3280: 73 25 73 22 2c 20 61 77 2d 6e 2c 20 22 22 2c 20  s%s", aw-n, "", 
3290: 7a 55 74 66 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  zUtf);.  }else{.
32a0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
32b0: 70 4f 75 74 2c 20 22 25 73 25 2a 73 22 2c 20 7a  pOut, "%s%*s", z
32c0: 55 74 66 2c 20 61 77 2d 6e 2c 20 22 22 29 3b 0a  Utf, aw-n, "");.
32d0: 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 44 65    }.}.../*.** De
32e0: 74 65 72 6d 69 6e 65 73 20 69 66 20 61 20 73 74  termines if a st
32f0: 72 69 6e 67 20 69 73 20 61 20 6e 75 6d 62 65 72  ring is a number
3300: 20 6f 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61 74   of not..*/.stat
3310: 69 63 20 69 6e 74 20 69 73 4e 75 6d 62 65 72 28  ic int isNumber(
3320: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
3330: 6e 74 20 2a 72 65 61 6c 6e 75 6d 29 7b 0a 20 20  nt *realnum){.  
3340: 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 7c 7c 20 2a  if( *z=='-' || *
3350: 7a 3d 3d 27 2b 27 20 29 20 7a 2b 2b 3b 0a 20 20  z=='+' ) z++;.  
3360: 69 66 28 20 21 49 73 44 69 67 69 74 28 2a 7a 29  if( !IsDigit(*z)
3370: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
3380: 3b 0a 20 20 7d 0a 20 20 7a 2b 2b 3b 0a 20 20 69  ;.  }.  z++;.  i
3390: 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65  f( realnum ) *re
33a0: 61 6c 6e 75 6d 20 3d 20 30 3b 0a 20 20 77 68 69  alnum = 0;.  whi
33b0: 6c 65 28 20 49 73 44 69 67 69 74 28 2a 7a 29 20  le( IsDigit(*z) 
33c0: 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 69 66 28 20  ){ z++; }.  if( 
33d0: 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 7a  *z=='.' ){.    z
33e0: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 21 49 73 44  ++;.    if( !IsD
33f0: 69 67 69 74 28 2a 7a 29 20 29 20 72 65 74 75 72  igit(*z) ) retur
3400: 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  n 0;.    while( 
3410: 49 73 44 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a  IsDigit(*z) ){ z
3420: 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20 72 65  ++; }.    if( re
3430: 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d  alnum ) *realnum
3440: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 1;.  }.  if( 
3450: 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27  *z=='e' || *z=='
3460: 45 27 20 29 7b 0a 20 20 20 20 7a 2b 2b 3b 0a 20  E' ){.    z++;. 
3470: 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 7c     if( *z=='+' |
3480: 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  | *z=='-' ) z++;
3490: 0a 20 20 20 20 69 66 28 20 21 49 73 44 69 67 69  .    if( !IsDigi
34a0: 74 28 2a 7a 29 20 29 20 72 65 74 75 72 6e 20 30  t(*z) ) return 0
34b0: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 49 73 44  ;.    while( IsD
34c0: 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a 2b 2b 3b  igit(*z) ){ z++;
34d0: 20 7d 0a 20 20 20 20 69 66 28 20 72 65 61 6c 6e   }.    if( realn
34e0: 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20  um ) *realnum = 
34f0: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  1;.  }.  return 
3500: 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  *z==0;.}../*.** 
3510: 43 6f 6d 70 75 74 65 20 61 20 73 74 72 69 6e 67  Compute a string
3520: 20 6c 65 6e 67 74 68 20 74 68 61 74 20 69 73 20   length that is 
3530: 6c 69 6d 69 74 65 64 20 74 6f 20 77 68 61 74 20  limited to what 
3540: 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e  can be stored in
3550: 0a 2a 2a 20 6c 6f 77 65 72 20 33 30 20 62 69 74  .** lower 30 bit
3560: 73 20 6f 66 20 61 20 33 32 2d 62 69 74 20 73 69  s of a 32-bit si
3570: 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  gned integer..*/
3580: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 74 72 6c  .static int strl
3590: 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 20  en30(const char 
35a0: 2a 7a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *z){.  const cha
35b0: 72 20 2a 7a 32 20 3d 20 7a 3b 0a 20 20 77 68 69  r *z2 = z;.  whi
35c0: 6c 65 28 20 2a 7a 32 20 29 7b 20 7a 32 2b 2b 3b  le( *z2 ){ z2++;
35d0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 78 33 66   }.  return 0x3f
35e0: 66 66 66 66 66 66 20 26 20 28 69 6e 74 29 28 7a  ffffff & (int)(z
35f0: 32 20 2d 20 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  2 - z);.}../*.**
3600: 20 52 65 74 75 72 6e 20 74 68 65 20 6c 65 6e 67   Return the leng
3610: 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 20 69  th of a string i
3620: 6e 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 4d  n characters.  M
3630: 75 6c 74 69 62 79 74 65 20 55 54 46 38 20 63 68  ultibyte UTF8 ch
3640: 61 72 61 63 74 65 72 73 0a 2a 2a 20 63 6f 75 6e  aracters.** coun
3650: 74 20 61 73 20 61 20 73 69 6e 67 6c 65 20 63 68  t as a single ch
3660: 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 73 74 61 74  aracter..*/.stat
3670: 69 63 20 69 6e 74 20 73 74 72 6c 65 6e 43 68 61  ic int strlenCha
3680: 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  r(const char *z)
3690: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  {.  int n = 0;. 
36a0: 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20   while( *z ){.  
36b0: 20 20 69 66 28 20 28 30 78 63 30 26 2a 28 7a 2b    if( (0xc0&*(z+
36c0: 2b 29 29 21 3d 30 78 38 30 20 29 20 6e 2b 2b 3b  +))!=0x80 ) n++;
36d0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 3b  .  }.  return n;
36e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  .}../*.** This r
36f0: 6f 75 74 69 6e 65 20 72 65 61 64 73 20 61 20 6c  outine reads a l
3700: 69 6e 65 20 6f 66 20 74 65 78 74 20 66 72 6f 6d  ine of text from
3710: 20 46 49 4c 45 20 69 6e 2c 20 73 74 6f 72 65 73   FILE in, stores
3720: 0a 2a 2a 20 74 68 65 20 74 65 78 74 20 69 6e 20  .** the text in 
3730: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
3740: 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 61 6e  from malloc() an
3750: 64 20 72 65 74 75 72 6e 73 20 61 20 70 6f 69 6e  d returns a poin
3760: 74 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 65  ter.** to the te
3770: 78 74 2e 20 20 4e 55 4c 4c 20 69 73 20 72 65 74  xt.  NULL is ret
3780: 75 72 6e 65 64 20 61 74 20 65 6e 64 20 6f 66 20  urned at end of 
3790: 66 69 6c 65 2c 20 6f 72 20 69 66 20 6d 61 6c 6c  file, or if mall
37a0: 6f 63 28 29 0a 2a 2a 20 66 61 69 6c 73 2e 0a 2a  oc().** fails..*
37b0: 2a 0a 2a 2a 20 49 66 20 7a 4c 69 6e 65 20 69 73  *.** If zLine is
37c0: 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69   not NULL then i
37d0: 74 20 69 73 20 61 20 6d 61 6c 6c 6f 63 65 64 20  t is a malloced 
37e0: 62 75 66 66 65 72 20 72 65 74 75 72 6e 65 64 20  buffer returned 
37f0: 66 72 6f 6d 0a 2a 2a 20 61 20 70 72 65 76 69 6f  from.** a previo
3800: 75 73 20 63 61 6c 6c 20 74 6f 20 74 68 69 73 20  us call to this 
3810: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 6d 61 79  routine that may
3820: 20 62 65 20 72 65 75 73 65 64 2e 0a 2a 2f 0a 73   be reused..*/.s
3830: 74 61 74 69 63 20 63 68 61 72 20 2a 6c 6f 63 61  tatic char *loca
3840: 6c 5f 67 65 74 6c 69 6e 65 28 63 68 61 72 20 2a  l_getline(char *
3850: 7a 4c 69 6e 65 2c 20 46 49 4c 45 20 2a 69 6e 29  zLine, FILE *in)
3860: 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 20 3d 20  {.  int nLine = 
3870: 7a 4c 69 6e 65 3d 3d 30 20 3f 20 30 20 3a 20 31  zLine==0 ? 0 : 1
3880: 30 30 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b  00;.  int n = 0;
3890: 0a 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a  ..  while( 1 ){.
38a0: 20 20 20 20 69 66 28 20 6e 2b 31 30 30 3e 6e 4c      if( n+100>nL
38b0: 69 6e 65 20 29 7b 0a 20 20 20 20 20 20 6e 4c 69  ine ){.      nLi
38c0: 6e 65 20 3d 20 6e 4c 69 6e 65 2a 32 20 2b 20 31  ne = nLine*2 + 1
38d0: 30 30 3b 0a 20 20 20 20 20 20 7a 4c 69 6e 65 20  00;.      zLine 
38e0: 3d 20 72 65 61 6c 6c 6f 63 28 7a 4c 69 6e 65 2c  = realloc(zLine,
38f0: 20 6e 4c 69 6e 65 29 3b 0a 20 20 20 20 20 20 69   nLine);.      i
3900: 66 28 20 7a 4c 69 6e 65 3d 3d 30 20 29 20 72 65  f( zLine==0 ) re
3910: 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20  turn 0;.    }.  
3920: 20 20 69 66 28 20 66 67 65 74 73 28 26 7a 4c 69    if( fgets(&zLi
3930: 6e 65 5b 6e 5d 2c 20 6e 4c 69 6e 65 20 2d 20 6e  ne[n], nLine - n
3940: 2c 20 69 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  , in)==0 ){.    
3950: 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20    if( n==0 ){.  
3960: 20 20 20 20 20 20 66 72 65 65 28 7a 4c 69 6e 65        free(zLine
3970: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
3980: 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 0;.      }.   
3990: 20 20 20 7a 4c 69 6e 65 5b 6e 5d 20 3d 20 30 3b     zLine[n] = 0;
39a0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
39b0: 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 7a    }.    while( z
39c0: 4c 69 6e 65 5b 6e 5d 20 29 20 6e 2b 2b 3b 0a 20  Line[n] ) n++;. 
39d0: 20 20 20 69 66 28 20 6e 3e 30 20 26 26 20 7a 4c     if( n>0 && zL
39e0: 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 6e 27 20 29  ine[n-1]=='\n' )
39f0: 7b 0a 20 20 20 20 20 20 6e 2d 2d 3b 0a 20 20 20  {.      n--;.   
3a00: 20 20 20 69 66 28 20 6e 3e 30 20 26 26 20 7a 4c     if( n>0 && zL
3a10: 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 72 27 20 29  ine[n-1]=='\r' )
3a20: 20 6e 2d 2d 3b 0a 20 20 20 20 20 20 7a 4c 69 6e   n--;.      zLin
3a30: 65 5b 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  e[n] = 0;.      
3a40: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
3a50: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49  .#if defined(_WI
3a60: 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  N32) || defined(
3a70: 57 49 4e 33 32 29 0a 20 20 2f 2a 20 46 6f 72 20  WIN32).  /* For 
3a80: 69 6e 74 65 72 61 63 74 69 76 65 20 69 6e 70 75  interactive inpu
3a90: 74 20 6f 6e 20 57 69 6e 64 6f 77 73 20 73 79 73  t on Windows sys
3aa0: 74 65 6d 73 2c 20 74 72 61 6e 73 6c 61 74 65 20  tems, translate 
3ab0: 74 68 65 0a 20 20 2a 2a 20 6d 75 6c 74 69 2d 62  the.  ** multi-b
3ac0: 79 74 65 20 63 68 61 72 61 63 74 65 72 73 65 74  yte characterset
3ad0: 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 74 6f   characters into
3ae0: 20 55 54 46 2d 38 2e 20 2a 2f 0a 20 20 69 66 28   UTF-8. */.  if(
3af0: 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61   stdin_is_intera
3b00: 63 74 69 76 65 20 26 26 20 69 6e 3d 3d 73 74 64  ctive && in==std
3b10: 69 6e 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a  in ){.    char *
3b20: 7a 54 72 61 6e 73 20 3d 20 73 71 6c 69 74 65 33  zTrans = sqlite3
3b30: 5f 77 69 6e 33 32 5f 6d 62 63 73 5f 74 6f 5f 75  _win32_mbcs_to_u
3b40: 74 66 38 5f 76 32 28 7a 4c 69 6e 65 2c 20 30 29  tf8_v2(zLine, 0)
3b50: 3b 0a 20 20 20 20 69 66 28 20 7a 54 72 61 6e 73  ;.    if( zTrans
3b60: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 54   ){.      int nT
3b70: 72 61 6e 73 20 3d 20 73 74 72 6c 65 6e 33 30 28  rans = strlen30(
3b80: 7a 54 72 61 6e 73 29 2b 31 3b 0a 20 20 20 20 20  zTrans)+1;.     
3b90: 20 69 66 28 20 6e 54 72 61 6e 73 3e 6e 4c 69 6e   if( nTrans>nLin
3ba0: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69  e ){.        zLi
3bb0: 6e 65 20 3d 20 72 65 61 6c 6c 6f 63 28 7a 4c 69  ne = realloc(zLi
3bc0: 6e 65 2c 20 6e 54 72 61 6e 73 29 3b 0a 20 20 20  ne, nTrans);.   
3bd0: 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 3d 3d       if( zLine==
3be0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
3bf0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 54 72 61  qlite3_free(zTra
3c00: 6e 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  ns);.          r
3c10: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20  eturn 0;.       
3c20: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
3c30: 20 6d 65 6d 63 70 79 28 7a 4c 69 6e 65 2c 20 7a   memcpy(zLine, z
3c40: 54 72 61 6e 73 2c 20 6e 54 72 61 6e 73 29 3b 0a  Trans, nTrans);.
3c50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
3c60: 65 65 28 7a 54 72 61 6e 73 29 3b 0a 20 20 20 20  ee(zTrans);.    
3c70: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
3c80: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
3c90: 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
3ca0: 29 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 7a 4c  ) */.  return zL
3cb0: 69 6e 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  ine;.}../*.** Re
3cc0: 74 72 69 65 76 65 20 61 20 73 69 6e 67 6c 65 20  trieve a single 
3cd0: 6c 69 6e 65 20 6f 66 20 69 6e 70 75 74 20 74 65  line of input te
3ce0: 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 69 6e 3d  xt..**.** If in=
3cf0: 3d 30 20 74 68 65 6e 20 72 65 61 64 20 66 72 6f  =0 then read fro
3d00: 6d 20 73 74 61 6e 64 61 72 64 20 69 6e 70 75 74  m standard input
3d10: 20 61 6e 64 20 70 72 6f 6d 70 74 20 62 65 66 6f   and prompt befo
3d20: 72 65 20 65 61 63 68 20 6c 69 6e 65 2e 0a 2a 2a  re each line..**
3d30: 20 49 66 20 69 73 43 6f 6e 74 69 6e 75 61 74 69   If isContinuati
3d40: 6f 6e 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  on is true, then
3d50: 20 61 20 63 6f 6e 74 69 6e 75 61 74 69 6f 6e 20   a continuation 
3d60: 70 72 6f 6d 70 74 20 69 73 20 61 70 70 72 6f 70  prompt is approp
3d70: 72 69 61 74 65 2e 0a 2a 2a 20 49 66 20 69 73 43  riate..** If isC
3d80: 6f 6e 74 69 6e 75 61 74 69 6f 6e 20 69 73 20 7a  ontinuation is z
3d90: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6d 61  ero, then the ma
3da0: 69 6e 20 70 72 6f 6d 70 74 20 73 68 6f 75 6c 64  in prompt should
3db0: 20 62 65 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20   be used..**.** 
3dc0: 49 66 20 7a 50 72 69 6f 72 20 69 73 20 6e 6f 74  If zPrior is not
3dd0: 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 69 73   NULL then it is
3de0: 20 61 20 62 75 66 66 65 72 20 66 72 6f 6d 20 61   a buffer from a
3df0: 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 74   prior call to t
3e00: 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74  his.** routine t
3e10: 68 61 74 20 63 61 6e 20 62 65 20 72 65 75 73 65  hat can be reuse
3e20: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 73  d..**.** The res
3e30: 75 6c 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ult is stored in
3e40: 20 73 70 61 63 65 20 6f 62 74 61 69 6e 65 64 20   space obtained 
3e50: 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 61 6e  from malloc() an
3e60: 64 20 6d 75 73 74 20 65 69 74 68 65 72 0a 2a 2a  d must either.**
3e70: 20 62 65 20 66 72 65 65 64 20 62 79 20 74 68 65   be freed by the
3e80: 20 63 61 6c 6c 65 72 20 6f 72 20 65 6c 73 65 20   caller or else 
3e90: 70 61 73 73 65 64 20 62 61 63 6b 20 69 6e 74 6f  passed back into
3ea0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 76 69   this routine vi
3eb0: 61 20 74 68 65 0a 2a 2a 20 7a 50 72 69 6f 72 20  a the.** zPrior 
3ec0: 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 72 65 75  argument for reu
3ed0: 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68  se..*/.static ch
3ee0: 61 72 20 2a 6f 6e 65 5f 69 6e 70 75 74 5f 6c 69  ar *one_input_li
3ef0: 6e 65 28 46 49 4c 45 20 2a 69 6e 2c 20 63 68 61  ne(FILE *in, cha
3f00: 72 20 2a 7a 50 72 69 6f 72 2c 20 69 6e 74 20 69  r *zPrior, int i
3f10: 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 29 7b 0a  sContinuation){.
3f20: 20 20 63 68 61 72 20 2a 7a 50 72 6f 6d 70 74 3b    char *zPrompt;
3f30: 0a 20 20 63 68 61 72 20 2a 7a 52 65 73 75 6c 74  .  char *zResult
3f40: 3b 0a 20 20 69 66 28 20 69 6e 21 3d 30 20 29 7b  ;.  if( in!=0 ){
3f50: 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 3d 20 6c  .    zResult = l
3f60: 6f 63 61 6c 5f 67 65 74 6c 69 6e 65 28 7a 50 72  ocal_getline(zPr
3f70: 69 6f 72 2c 20 69 6e 29 3b 0a 20 20 7d 65 6c 73  ior, in);.  }els
3f80: 65 7b 0a 20 20 20 20 7a 50 72 6f 6d 70 74 20 3d  e{.    zPrompt =
3f90: 20 69 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 20   isContinuation 
3fa0: 3f 20 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74  ? continuePrompt
3fb0: 20 3a 20 6d 61 69 6e 50 72 6f 6d 70 74 3b 0a 23   : mainPrompt;.#
3fc0: 69 66 20 53 48 45 4c 4c 5f 55 53 45 5f 4c 4f 43  if SHELL_USE_LOC
3fd0: 41 4c 5f 47 45 54 4c 49 4e 45 0a 20 20 20 20 70  AL_GETLINE.    p
3fe0: 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 50 72 6f  rintf("%s", zPro
3ff0: 6d 70 74 29 3b 0a 20 20 20 20 66 66 6c 75 73 68  mpt);.    fflush
4000: 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20 7a 52  (stdout);.    zR
4010: 65 73 75 6c 74 20 3d 20 6c 6f 63 61 6c 5f 67 65  esult = local_ge
4020: 74 6c 69 6e 65 28 7a 50 72 69 6f 72 2c 20 73 74  tline(zPrior, st
4030: 64 69 6e 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20  din);.#else.    
4040: 66 72 65 65 28 7a 50 72 69 6f 72 29 3b 0a 20 20  free(zPrior);.  
4050: 20 20 7a 52 65 73 75 6c 74 20 3d 20 73 68 65 6c    zResult = shel
4060: 6c 5f 72 65 61 64 6c 69 6e 65 28 7a 50 72 6f 6d  l_readline(zProm
4070: 70 74 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65  pt);.    if( zRe
4080: 73 75 6c 74 20 26 26 20 2a 7a 52 65 73 75 6c 74  sult && *zResult
4090: 20 29 20 73 68 65 6c 6c 5f 61 64 64 5f 68 69 73   ) shell_add_his
40a0: 74 6f 72 79 28 7a 52 65 73 75 6c 74 29 3b 0a 23  tory(zResult);.#
40b0: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 72 65 74 75  endif.  }.  retu
40c0: 72 6e 20 7a 52 65 73 75 6c 74 3b 0a 7d 0a 2f 2a  rn zResult;.}./*
40d0: 0a 2a 2a 20 41 20 76 61 72 69 61 62 6c 65 20 6c  .** A variable l
40e0: 65 6e 67 74 68 20 73 74 72 69 6e 67 20 74 6f 20  ength string to 
40f0: 77 68 69 63 68 20 6f 6e 65 20 63 61 6e 20 61 70  which one can ap
4100: 70 65 6e 64 20 74 65 78 74 2e 0a 2a 2f 0a 74 79  pend text..*/.ty
4110: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 68 65  pedef struct She
4120: 6c 6c 54 65 78 74 20 53 68 65 6c 6c 54 65 78 74  llText ShellText
4130: 3b 0a 73 74 72 75 63 74 20 53 68 65 6c 6c 54 65  ;.struct ShellTe
4140: 78 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  xt {.  char *z;.
4150: 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 6e    int n;.  int n
4160: 41 6c 6c 6f 63 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  Alloc;.};../*.**
4170: 20 49 6e 69 74 69 61 6c 69 7a 65 20 61 6e 64 20   Initialize and 
4180: 64 65 73 74 72 6f 79 20 61 20 53 68 65 6c 6c 54  destroy a ShellT
4190: 65 78 74 20 6f 62 6a 65 63 74 0a 2a 2f 0a 73 74  ext object.*/.st
41a0: 61 74 69 63 20 76 6f 69 64 20 69 6e 69 74 54 65  atic void initTe
41b0: 78 74 28 53 68 65 6c 6c 54 65 78 74 20 2a 70 29  xt(ShellText *p)
41c0: 7b 0a 20 20 6d 65 6d 73 65 74 28 70 2c 20 30 2c  {.  memset(p, 0,
41d0: 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 7d 0a   sizeof(*p));.}.
41e0: 73 74 61 74 69 63 20 76 6f 69 64 20 66 72 65 65  static void free
41f0: 54 65 78 74 28 53 68 65 6c 6c 54 65 78 74 20 2a  Text(ShellText *
4200: 70 29 7b 0a 20 20 66 72 65 65 28 70 2d 3e 7a 29  p){.  free(p->z)
4210: 3b 0a 20 20 69 6e 69 74 54 65 78 74 28 70 29 3b  ;.  initText(p);
4220: 0a 7d 0a 0a 2f 2a 20 7a 49 6e 20 69 73 20 65 69  .}../* zIn is ei
4230: 74 68 65 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ther a pointer t
4240: 6f 20 61 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61  o a NULL-termina
4250: 74 65 64 20 73 74 72 69 6e 67 20 69 6e 20 6d 65  ted string in me
4260: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  mory obtained.**
4270: 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2c 20   from malloc(), 
4280: 6f 72 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65  or a NULL pointe
4290: 72 2e 20 54 68 65 20 73 74 72 69 6e 67 20 70 6f  r. The string po
42a0: 69 6e 74 65 64 20 74 6f 20 62 79 20 7a 41 70 70  inted to by zApp
42b0: 65 6e 64 20 69 73 0a 2a 2a 20 61 64 64 65 64 20  end is.** added 
42c0: 74 6f 20 7a 49 6e 2c 20 61 6e 64 20 74 68 65 20  to zIn, and the 
42d0: 72 65 73 75 6c 74 20 72 65 74 75 72 6e 65 64 20  result returned 
42e0: 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  in memory obtain
42f0: 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
4300: 2e 0a 2a 2a 20 7a 49 6e 2c 20 69 66 20 69 74 20  ..** zIn, if it 
4310: 77 61 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 73  was not NULL, is
4320: 20 66 72 65 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66   freed..**.** If
4330: 20 74 68 65 20 74 68 69 72 64 20 61 72 67 75 6d   the third argum
4340: 65 6e 74 2c 20 71 75 6f 74 65 2c 20 69 73 20 6e  ent, quote, is n
4350: 6f 74 20 27 5c 30 27 2c 20 74 68 65 6e 20 69 74  ot '\0', then it
4360: 20 69 73 20 75 73 65 64 20 61 73 20 61 0a 2a 2a   is used as a.**
4370: 20 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72   quote character
4380: 20 66 6f 72 20 7a 41 70 70 65 6e 64 2e 0a 2a 2f   for zAppend..*/
4390: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
43a0: 65 6e 64 54 65 78 74 28 53 68 65 6c 6c 54 65 78  endText(ShellTex
43b0: 74 20 2a 70 2c 20 63 68 61 72 20 63 6f 6e 73 74  t *p, char const
43c0: 20 2a 7a 41 70 70 65 6e 64 2c 20 63 68 61 72 20   *zAppend, char 
43d0: 71 75 6f 74 65 29 7b 0a 20 20 69 6e 74 20 6c 65  quote){.  int le
43e0: 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
43f0: 74 20 6e 41 70 70 65 6e 64 20 3d 20 73 74 72 6c  t nAppend = strl
4400: 65 6e 33 30 28 7a 41 70 70 65 6e 64 29 3b 0a 0a  en30(zAppend);..
4410: 20 20 6c 65 6e 20 3d 20 6e 41 70 70 65 6e 64 2b    len = nAppend+
4420: 70 2d 3e 6e 2b 31 3b 0a 20 20 69 66 28 20 71 75  p->n+1;.  if( qu
4430: 6f 74 65 20 29 7b 0a 20 20 20 20 6c 65 6e 20 2b  ote ){.    len +
4440: 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  = 2;.    for(i=0
4450: 3b 20 69 3c 6e 41 70 70 65 6e 64 3b 20 69 2b 2b  ; i<nAppend; i++
4460: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 41 70  ){.      if( zAp
4470: 70 65 6e 64 5b 69 5d 3d 3d 71 75 6f 74 65 20 29  pend[i]==quote )
4480: 20 6c 65 6e 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   len++;.    }.  
4490: 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 2b 6c 65  }..  if( p->n+le
44a0: 6e 3e 3d 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a  n>=p->nAlloc ){.
44b0: 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20      p->nAlloc = 
44c0: 70 2d 3e 6e 41 6c 6c 6f 63 2a 32 20 2b 20 6c 65  p->nAlloc*2 + le
44d0: 6e 20 2b 20 32 30 3b 0a 20 20 20 20 70 2d 3e 7a  n + 20;.    p->z
44e0: 20 3d 20 72 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c   = realloc(p->z,
44f0: 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20   p->nAlloc);.   
4500: 20 69 66 28 20 70 2d 3e 7a 3d 3d 30 20 29 7b 0a   if( p->z==0 ){.
4510: 20 20 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20        memset(p, 
4520: 30 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a  0, sizeof(*p));.
4530: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
4540: 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66 28 20 71    }.  }..  if( q
4550: 75 6f 74 65 20 29 7b 0a 20 20 20 20 63 68 61 72  uote ){.    char
4560: 20 2a 7a 43 73 72 20 3d 20 70 2d 3e 7a 2b 70 2d   *zCsr = p->z+p-
4570: 3e 6e 3b 0a 20 20 20 20 2a 7a 43 73 72 2b 2b 20  >n;.    *zCsr++ 
4580: 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20 66 6f 72  = quote;.    for
4590: 28 69 3d 30 3b 20 69 3c 6e 41 70 70 65 6e 64 3b  (i=0; i<nAppend;
45a0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 2a 7a 43   i++){.      *zC
45b0: 73 72 2b 2b 20 3d 20 7a 41 70 70 65 6e 64 5b 69  sr++ = zAppend[i
45c0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 41 70  ];.      if( zAp
45d0: 70 65 6e 64 5b 69 5d 3d 3d 71 75 6f 74 65 20 29  pend[i]==quote )
45e0: 20 2a 7a 43 73 72 2b 2b 20 3d 20 71 75 6f 74 65   *zCsr++ = quote
45f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
4600: 72 2b 2b 20 3d 20 71 75 6f 74 65 3b 0a 20 20 20  r++ = quote;.   
4610: 20 70 2d 3e 6e 20 3d 20 28 69 6e 74 29 28 7a 43   p->n = (int)(zC
4620: 73 72 20 2d 20 70 2d 3e 7a 29 3b 0a 20 20 20 20  sr - p->z);.    
4630: 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20  *zCsr = '\0';.  
4640: 7d 65 6c 73 65 7b 0a 20 20 20 20 6d 65 6d 63 70  }else{.    memcp
4650: 79 28 70 2d 3e 7a 2b 70 2d 3e 6e 2c 20 7a 41 70  y(p->z+p->n, zAp
4660: 70 65 6e 64 2c 20 6e 41 70 70 65 6e 64 29 3b 0a  pend, nAppend);.
4670: 20 20 20 20 70 2d 3e 6e 20 2b 3d 20 6e 41 70 70      p->n += nApp
4680: 65 6e 64 3b 0a 20 20 20 20 70 2d 3e 7a 5b 70 2d  end;.    p->z[p-
4690: 3e 6e 5d 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 0a  >n] = '\0';.  }.
46a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74  }../*.** Attempt
46b0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
46c0: 20 69 64 65 6e 74 69 66 69 65 72 20 7a 4e 61 6d   identifier zNam
46d0: 65 20 6e 65 65 64 73 20 74 6f 20 62 65 20 71 75  e needs to be qu
46e0: 6f 74 65 64 2c 20 65 69 74 68 65 72 0a 2a 2a 20  oted, either.** 
46f0: 62 65 63 61 75 73 65 20 69 74 20 63 6f 6e 74 61  because it conta
4700: 69 6e 73 20 6e 6f 6e 2d 61 6c 70 68 61 6e 75 6d  ins non-alphanum
4710: 65 72 69 63 20 63 68 61 72 61 63 74 65 72 73 2c  eric characters,
4720: 20 6f 72 20 62 65 63 61 75 73 65 20 69 74 20 69   or because it i
4730: 73 20 61 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 6b  s an.** SQLite k
4740: 65 79 77 6f 72 64 2e 20 20 42 65 20 63 6f 6e 73  eyword.  Be cons
4750: 65 72 76 61 74 69 76 65 20 69 6e 20 74 68 69 73  ervative in this
4760: 20 65 73 74 69 6d 61 74 65 3a 20 20 57 68 65 6e   estimate:  When
4770: 20 69 6e 20 64 6f 75 62 74 20 61 73 73 75 6d 65   in doubt assume
4780: 0a 2a 2a 20 74 68 61 74 20 71 75 6f 74 69 6e 67  .** that quoting
4790: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
47a0: 0a 2a 2a 20 52 65 74 75 72 6e 20 27 22 27 20 69  .** Return '"' i
47b0: 66 20 71 75 6f 74 69 6e 67 20 69 73 20 72 65 71  f quoting is req
47c0: 75 69 72 65 64 2e 20 20 52 65 74 75 72 6e 20 30  uired.  Return 0
47d0: 20 69 66 20 6e 6f 20 71 75 6f 74 69 6e 67 20 69   if no quoting i
47e0: 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73  s required..*/.s
47f0: 74 61 74 69 63 20 63 68 61 72 20 71 75 6f 74 65  tatic char quote
4800: 43 68 61 72 28 63 6f 6e 73 74 20 63 68 61 72 20  Char(const char 
4810: 2a 7a 4e 61 6d 65 29 7b 0a 20 20 2f 2a 20 41 6c  *zName){.  /* Al
4820: 6c 20 53 51 4c 69 74 65 20 6b 65 79 77 6f 72 64  l SQLite keyword
4830: 73 2c 20 69 6e 20 61 6c 70 68 61 62 65 74 69 63  s, in alphabetic
4840: 61 6c 20 6f 72 64 65 72 20 2a 2f 0a 20 20 73 74  al order */.  st
4850: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
4860: 2a 61 7a 4b 65 79 77 6f 72 64 73 5b 5d 20 3d 20  *azKeywords[] = 
4870: 7b 0a 20 20 20 20 22 41 42 4f 52 54 22 2c 20 22  {.    "ABORT", "
4880: 41 43 54 49 4f 4e 22 2c 20 22 41 44 44 22 2c 20  ACTION", "ADD", 
4890: 22 41 46 54 45 52 22 2c 20 22 41 4c 4c 22 2c 20  "AFTER", "ALL", 
48a0: 22 41 4c 54 45 52 22 2c 20 22 41 4e 41 4c 59 5a  "ALTER", "ANALYZ
48b0: 45 22 2c 20 22 41 4e 44 22 2c 20 22 41 53 22 2c  E", "AND", "AS",
48c0: 0a 20 20 20 20 22 41 53 43 22 2c 20 22 41 54 54  .    "ASC", "ATT
48d0: 41 43 48 22 2c 20 22 41 55 54 4f 49 4e 43 52 45  ACH", "AUTOINCRE
48e0: 4d 45 4e 54 22 2c 20 22 42 45 46 4f 52 45 22 2c  MENT", "BEFORE",
48f0: 20 22 42 45 47 49 4e 22 2c 20 22 42 45 54 57 45   "BEGIN", "BETWE
4900: 45 4e 22 2c 20 22 42 59 22 2c 0a 20 20 20 20 22  EN", "BY",.    "
4910: 43 41 53 43 41 44 45 22 2c 20 22 43 41 53 45 22  CASCADE", "CASE"
4920: 2c 20 22 43 41 53 54 22 2c 20 22 43 48 45 43 4b  , "CAST", "CHECK
4930: 22 2c 20 22 43 4f 4c 4c 41 54 45 22 2c 20 22 43  ", "COLLATE", "C
4940: 4f 4c 55 4d 4e 22 2c 20 22 43 4f 4d 4d 49 54 22  OLUMN", "COMMIT"
4950: 2c 0a 20 20 20 20 22 43 4f 4e 46 4c 49 43 54 22  ,.    "CONFLICT"
4960: 2c 20 22 43 4f 4e 53 54 52 41 49 4e 54 22 2c 20  , "CONSTRAINT", 
4970: 22 43 52 45 41 54 45 22 2c 20 22 43 52 4f 53 53  "CREATE", "CROSS
4980: 22 2c 20 22 43 55 52 52 45 4e 54 5f 44 41 54 45  ", "CURRENT_DATE
4990: 22 2c 0a 20 20 20 20 22 43 55 52 52 45 4e 54 5f  ",.    "CURRENT_
49a0: 54 49 4d 45 22 2c 20 22 43 55 52 52 45 4e 54 5f  TIME", "CURRENT_
49b0: 54 49 4d 45 53 54 41 4d 50 22 2c 20 22 44 41 54  TIMESTAMP", "DAT
49c0: 41 42 41 53 45 22 2c 20 22 44 45 46 41 55 4c 54  ABASE", "DEFAULT
49d0: 22 2c 20 22 44 45 46 45 52 52 41 42 4c 45 22 2c  ", "DEFERRABLE",
49e0: 0a 20 20 20 20 22 44 45 46 45 52 52 45 44 22 2c  .    "DEFERRED",
49f0: 20 22 44 45 4c 45 54 45 22 2c 20 22 44 45 53 43   "DELETE", "DESC
4a00: 22 2c 20 22 44 45 54 41 43 48 22 2c 20 22 44 49  ", "DETACH", "DI
4a10: 53 54 49 4e 43 54 22 2c 20 22 44 52 4f 50 22 2c  STINCT", "DROP",
4a20: 20 22 45 41 43 48 22 2c 0a 20 20 20 20 22 45 4c   "EACH",.    "EL
4a30: 53 45 22 2c 20 22 45 4e 44 22 2c 20 22 45 53 43  SE", "END", "ESC
4a40: 41 50 45 22 2c 20 22 45 58 43 45 50 54 22 2c 20  APE", "EXCEPT", 
4a50: 22 45 58 43 4c 55 53 49 56 45 22 2c 20 22 45 58  "EXCLUSIVE", "EX
4a60: 49 53 54 53 22 2c 20 22 45 58 50 4c 41 49 4e 22  ISTS", "EXPLAIN"
4a70: 2c 0a 20 20 20 20 22 46 41 49 4c 22 2c 20 22 46  ,.    "FAIL", "F
4a80: 4f 52 22 2c 20 22 46 4f 52 45 49 47 4e 22 2c 20  OR", "FOREIGN", 
4a90: 22 46 52 4f 4d 22 2c 20 22 46 55 4c 4c 22 2c 20  "FROM", "FULL", 
4aa0: 22 47 4c 4f 42 22 2c 20 22 47 52 4f 55 50 22 2c  "GLOB", "GROUP",
4ab0: 20 22 48 41 56 49 4e 47 22 2c 20 22 49 46 22 2c   "HAVING", "IF",
4ac0: 0a 20 20 20 20 22 49 47 4e 4f 52 45 22 2c 20 22  .    "IGNORE", "
4ad0: 49 4d 4d 45 44 49 41 54 45 22 2c 20 22 49 4e 22  IMMEDIATE", "IN"
4ae0: 2c 20 22 49 4e 44 45 58 22 2c 20 22 49 4e 44 45  , "INDEX", "INDE
4af0: 58 45 44 22 2c 20 22 49 4e 49 54 49 41 4c 4c 59  XED", "INITIALLY
4b00: 22 2c 20 22 49 4e 4e 45 52 22 2c 0a 20 20 20 20  ", "INNER",.    
4b10: 22 49 4e 53 45 52 54 22 2c 20 22 49 4e 53 54 45  "INSERT", "INSTE
4b20: 41 44 22 2c 20 22 49 4e 54 45 52 53 45 43 54 22  AD", "INTERSECT"
4b30: 2c 20 22 49 4e 54 4f 22 2c 20 22 49 53 22 2c 20  , "INTO", "IS", 
4b40: 22 49 53 4e 55 4c 4c 22 2c 20 22 4a 4f 49 4e 22  "ISNULL", "JOIN"
4b50: 2c 20 22 4b 45 59 22 2c 0a 20 20 20 20 22 4c 45  , "KEY",.    "LE
4b60: 46 54 22 2c 20 22 4c 49 4b 45 22 2c 20 22 4c 49  FT", "LIKE", "LI
4b70: 4d 49 54 22 2c 20 22 4d 41 54 43 48 22 2c 20 22  MIT", "MATCH", "
4b80: 4e 41 54 55 52 41 4c 22 2c 20 22 4e 4f 22 2c 20  NATURAL", "NO", 
4b90: 22 4e 4f 54 22 2c 20 22 4e 4f 54 4e 55 4c 4c 22  "NOT", "NOTNULL"
4ba0: 2c 0a 20 20 20 20 22 4e 55 4c 4c 22 2c 20 22 4f  ,.    "NULL", "O
4bb0: 46 22 2c 20 22 4f 46 46 53 45 54 22 2c 20 22 4f  F", "OFFSET", "O
4bc0: 4e 22 2c 20 22 4f 52 22 2c 20 22 4f 52 44 45 52  N", "OR", "ORDER
4bd0: 22 2c 20 22 4f 55 54 45 52 22 2c 20 22 50 4c 41  ", "OUTER", "PLA
4be0: 4e 22 2c 20 22 50 52 41 47 4d 41 22 2c 0a 20 20  N", "PRAGMA",.  
4bf0: 20 20 22 50 52 49 4d 41 52 59 22 2c 20 22 51 55    "PRIMARY", "QU
4c00: 45 52 59 22 2c 20 22 52 41 49 53 45 22 2c 20 22  ERY", "RAISE", "
4c10: 52 45 43 55 52 53 49 56 45 22 2c 20 22 52 45 46  RECURSIVE", "REF
4c20: 45 52 45 4e 43 45 53 22 2c 20 22 52 45 47 45 58  ERENCES", "REGEX
4c30: 50 22 2c 0a 20 20 20 20 22 52 45 49 4e 44 45 58  P",.    "REINDEX
4c40: 22 2c 20 22 52 45 4c 45 41 53 45 22 2c 20 22 52  ", "RELEASE", "R
4c50: 45 4e 41 4d 45 22 2c 20 22 52 45 50 4c 41 43 45  ENAME", "REPLACE
4c60: 22 2c 20 22 52 45 53 54 52 49 43 54 22 2c 20 22  ", "RESTRICT", "
4c70: 52 49 47 48 54 22 2c 0a 20 20 20 20 22 52 4f 4c  RIGHT",.    "ROL
4c80: 4c 42 41 43 4b 22 2c 20 22 52 4f 57 22 2c 20 22  LBACK", "ROW", "
4c90: 53 41 56 45 50 4f 49 4e 54 22 2c 20 22 53 45 4c  SAVEPOINT", "SEL
4ca0: 45 43 54 22 2c 20 22 53 45 54 22 2c 20 22 54 41  ECT", "SET", "TA
4cb0: 42 4c 45 22 2c 20 22 54 45 4d 50 22 2c 0a 20 20  BLE", "TEMP",.  
4cc0: 20 20 22 54 45 4d 50 4f 52 41 52 59 22 2c 20 22    "TEMPORARY", "
4cd0: 54 48 45 4e 22 2c 20 22 54 4f 22 2c 20 22 54 52  THEN", "TO", "TR
4ce0: 41 4e 53 41 43 54 49 4f 4e 22 2c 20 22 54 52 49  ANSACTION", "TRI
4cf0: 47 47 45 52 22 2c 20 22 55 4e 49 4f 4e 22 2c 20  GGER", "UNION", 
4d00: 22 55 4e 49 51 55 45 22 2c 0a 20 20 20 20 22 55  "UNIQUE",.    "U
4d10: 50 44 41 54 45 22 2c 20 22 55 53 49 4e 47 22 2c  PDATE", "USING",
4d20: 20 22 56 41 43 55 55 4d 22 2c 20 22 56 41 4c 55   "VACUUM", "VALU
4d30: 45 53 22 2c 20 22 56 49 45 57 22 2c 20 22 56 49  ES", "VIEW", "VI
4d40: 52 54 55 41 4c 22 2c 20 22 57 48 45 4e 22 2c 20  RTUAL", "WHEN", 
4d50: 22 57 48 45 52 45 22 2c 0a 20 20 20 20 22 57 49  "WHERE",.    "WI
4d60: 54 48 22 2c 20 22 57 49 54 48 4f 55 54 22 2c 0a  TH", "WITHOUT",.
4d70: 20 20 7d 3b 0a 20 20 69 6e 74 20 69 2c 20 6c 77    };.  int i, lw
4d80: 72 2c 20 75 70 72 2c 20 6d 69 64 2c 20 63 3b 0a  r, upr, mid, c;.
4d90: 20 20 69 66 28 20 21 69 73 61 6c 70 68 61 28 28    if( !isalpha((
4da0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 7a 4e  unsigned char)zN
4db0: 61 6d 65 5b 30 5d 29 20 26 26 20 7a 4e 61 6d 65  ame[0]) && zName
4dc0: 5b 30 5d 21 3d 27 5f 27 20 29 20 72 65 74 75 72  [0]!='_' ) retur
4dd0: 6e 20 27 22 27 3b 0a 20 20 66 6f 72 28 69 3d 30  n '"';.  for(i=0
4de0: 3b 20 7a 4e 61 6d 65 5b 69 5d 3b 20 69 2b 2b 29  ; zName[i]; i++)
4df0: 7b 0a 20 20 20 20 69 66 28 20 21 69 73 61 6c 6e  {.    if( !isaln
4e00: 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
4e10: 72 29 7a 4e 61 6d 65 5b 69 5d 29 20 26 26 20 7a  r)zName[i]) && z
4e20: 4e 61 6d 65 5b 69 5d 21 3d 27 5f 27 20 29 20 72  Name[i]!='_' ) r
4e30: 65 74 75 72 6e 20 27 22 27 3b 0a 20 20 7d 0a 20  eturn '"';.  }. 
4e40: 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70 72 20   lwr = 0;.  upr 
4e50: 3d 20 73 69 7a 65 6f 66 28 61 7a 4b 65 79 77 6f  = sizeof(azKeywo
4e60: 72 64 73 29 2f 73 69 7a 65 6f 66 28 61 7a 4b 65  rds)/sizeof(azKe
4e70: 79 77 6f 72 64 73 5b 30 5d 29 20 2d 20 31 3b 0a  ywords[0]) - 1;.
4e80: 20 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70    while( lwr<=up
4e90: 72 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28  r ){.    mid = (
4ea0: 6c 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20  lwr+upr)/2;.    
4eb0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72 69  c = sqlite3_stri
4ec0: 63 6d 70 28 61 7a 4b 65 79 77 6f 72 64 73 5b 6d  cmp(azKeywords[m
4ed0: 69 64 5d 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  id], zName);.   
4ee0: 20 69 66 28 20 63 3d 3d 30 20 29 20 72 65 74 75   if( c==0 ) retu
4ef0: 72 6e 20 27 22 27 3b 0a 20 20 20 20 69 66 28 20  rn '"';.    if( 
4f00: 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 6c 77 72  c<0 ){.      lwr
4f10: 20 3d 20 6d 69 64 2b 31 3b 0a 20 20 20 20 7d 65   = mid+1;.    }e
4f20: 6c 73 65 7b 0a 20 20 20 20 20 20 75 70 72 20 3d  lse{.      upr =
4f30: 20 6d 69 64 2d 31 3b 0a 20 20 20 20 7d 0a 20 20   mid-1;.    }.  
4f40: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
4f50: 0a 2f 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74  ./*.** SQL funct
4f60: 69 6f 6e 3a 20 20 73 68 65 6c 6c 5f 61 64 64 5f  ion:  shell_add_
4f70: 73 63 68 65 6d 61 28 53 2c 58 29 0a 2a 2a 0a 2a  schema(S,X).**.*
4f80: 2a 20 41 64 64 20 74 68 65 20 73 63 68 65 6d 61  * Add the schema
4f90: 20 6e 61 6d 65 20 58 20 74 6f 20 74 68 65 20 43   name X to the C
4fa0: 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  REATE statement 
4fb0: 69 6e 20 53 20 61 6e 64 20 72 65 74 75 72 6e 20  in S and return 
4fc0: 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 20 45  the result..** E
4fd0: 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  xamples:.**.**  
4fe0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
4ff0: 31 28 78 29 20 20 20 2d 3e 20 20 20 43 52 45 41  1(x)   ->   CREA
5000: 54 45 20 54 41 42 4c 45 20 78 79 7a 2e 74 31 28  TE TABLE xyz.t1(
5010: 78 29 3b 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 20 77  x);.**.** Also w
5020: 6f 72 6b 73 20 6f 6e 0a 2a 2a 0a 2a 2a 20 20 20  orks on.**.**   
5030: 20 43 52 45 41 54 45 20 49 4e 44 45 58 0a 2a 2a   CREATE INDEX.**
5040: 20 20 20 20 43 52 45 41 54 45 20 55 4e 49 51 55      CREATE UNIQU
5050: 45 20 49 4e 44 45 58 0a 2a 2a 20 20 20 20 43 52  E INDEX.**    CR
5060: 45 41 54 45 20 56 49 45 57 0a 2a 2a 20 20 20 20  EATE VIEW.**    
5070: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 0a 2a  CREATE TRIGGER.*
5080: 2a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  *    CREATE VIRT
5090: 55 41 4c 20 54 41 42 4c 45 0a 2a 2a 0a 2a 2a 20  UAL TABLE.**.** 
50a0: 54 68 69 73 20 55 44 46 20 69 73 20 75 73 65 64  This UDF is used
50b0: 20 62 79 20 74 68 65 20 2e 73 63 68 65 6d 61 20   by the .schema 
50c0: 63 6f 6d 6d 61 6e 64 20 74 6f 20 69 6e 73 65 72  command to inser
50d0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6e 61 6d  t the schema nam
50e0: 65 20 6f 66 0a 2a 2a 20 61 74 74 61 63 68 65 64  e of.** attached
50f0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 74 6f 20   databases into 
5100: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 74 68  the middle of th
5110: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
5120: 73 71 6c 20 66 69 65 6c 64 2e 0a 2a 2f 0a 73 74  sql field..*/.st
5130: 61 74 69 63 20 76 6f 69 64 20 73 68 65 6c 6c 41  atic void shellA
5140: 64 64 53 63 68 65 6d 61 4e 61 6d 65 28 0a 20 20  ddSchemaName(.  
5150: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
5160: 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20 6e 56 61  *pCtx,.  int nVa
5170: 6c 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  l,.  sqlite3_val
5180: 75 65 20 2a 2a 61 70 56 61 6c 0a 29 7b 0a 20 20  ue **apVal.){.  
5190: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
51a0: 72 20 2a 61 50 72 65 66 69 78 5b 5d 20 3d 20 7b  r *aPrefix[] = {
51b0: 0a 20 20 20 20 20 22 54 41 42 4c 45 22 2c 0a 20  .     "TABLE",. 
51c0: 20 20 20 20 22 49 4e 44 45 58 22 2c 0a 20 20 20      "INDEX",.   
51d0: 20 20 22 55 4e 49 51 55 45 20 49 4e 44 45 58 22    "UNIQUE INDEX"
51e0: 2c 0a 20 20 20 20 20 22 56 49 45 57 22 2c 0a 20  ,.     "VIEW",. 
51f0: 20 20 20 20 22 54 52 49 47 47 45 52 22 2c 0a 20      "TRIGGER",. 
5200: 20 20 20 20 22 56 49 52 54 55 41 4c 20 54 41 42      "VIRTUAL TAB
5210: 4c 45 22 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69  LE".  };.  int i
5220: 20 3d 20 30 3b 0a 20 20 63 6f 6e 73 74 20 63 68   = 0;.  const ch
5230: 61 72 20 2a 7a 49 6e 20 3d 20 28 63 6f 6e 73 74  ar *zIn = (const
5240: 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76   char*)sqlite3_v
5250: 61 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b  alue_text(apVal[
5260: 30 5d 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  0]);.  const cha
5270: 72 20 2a 7a 53 63 68 65 6d 61 20 3d 20 28 63 6f  r *zSchema = (co
5280: 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
5290: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 70 56  3_value_text(apV
52a0: 61 6c 5b 31 5d 29 3b 0a 20 20 61 73 73 65 72 74  al[1]);.  assert
52b0: 28 20 6e 56 61 6c 3d 3d 32 20 29 3b 0a 20 20 69  ( nVal==2 );.  i
52c0: 66 28 20 7a 49 6e 21 3d 30 20 26 26 20 73 74 72  f( zIn!=0 && str
52d0: 6e 63 6d 70 28 7a 49 6e 2c 20 22 43 52 45 41 54  ncmp(zIn, "CREAT
52e0: 45 20 22 2c 20 37 29 3d 3d 30 20 29 7b 0a 20 20  E ", 7)==0 ){.  
52f0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a    for(i=0; i<siz
5300: 65 6f 66 28 61 50 72 65 66 69 78 29 2f 73 69 7a  eof(aPrefix)/siz
5310: 65 6f 66 28 61 50 72 65 66 69 78 5b 30 5d 29 3b  eof(aPrefix[0]);
5320: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 6e 74   i++){.      int
5330: 20 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 50   n = strlen30(aP
5340: 72 65 66 69 78 5b 69 5d 29 3b 0a 20 20 20 20 20  refix[i]);.     
5350: 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 49 6e   if( strncmp(zIn
5360: 2b 37 2c 20 61 50 72 65 66 69 78 5b 69 5d 2c 20  +7, aPrefix[i], 
5370: 6e 29 3d 3d 30 20 26 26 20 7a 49 6e 5b 6e 2b 37  n)==0 && zIn[n+7
5380: 5d 3d 3d 27 20 27 20 29 7b 0a 20 20 20 20 20 20  ]==' ' ){.      
5390: 20 20 63 68 61 72 20 63 51 75 6f 74 65 20 3d 20    char cQuote = 
53a0: 71 75 6f 74 65 43 68 61 72 28 7a 53 63 68 65 6d  quoteChar(zSchem
53b0: 61 29 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72  a);.        char
53c0: 20 2a 7a 3b 0a 20 20 20 20 20 20 20 20 69 66 28   *z;.        if(
53d0: 20 63 51 75 6f 74 65 20 29 7b 0a 20 20 20 20 20   cQuote ){.     
53e0: 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f      z = sqlite3_
53f0: 6d 70 72 69 6e 74 66 28 22 25 2e 2a 73 20 5c 22  mprintf("%.*s \"
5400: 25 77 5c 22 2e 25 73 22 2c 20 6e 2b 37 2c 20 7a  %w\".%s", n+7, z
5410: 49 6e 2c 20 7a 53 63 68 65 6d 61 2c 20 7a 49 6e  In, zSchema, zIn
5420: 2b 6e 2b 38 29 3b 0a 20 20 20 20 20 20 20 20 7d  +n+8);.        }
5430: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
5440: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  z = sqlite3_mpri
5450: 6e 74 66 28 22 25 2e 2a 73 20 25 73 2e 25 73 22  ntf("%.*s %s.%s"
5460: 2c 20 6e 2b 37 2c 20 7a 49 6e 2c 20 7a 53 63 68  , n+7, zIn, zSch
5470: 65 6d 61 2c 20 7a 49 6e 2b 6e 2b 38 29 3b 0a 20  ema, zIn+n+8);. 
5480: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5490: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
54a0: 74 65 78 74 28 70 43 74 78 2c 20 7a 2c 20 2d 31  text(pCtx, z, -1
54b0: 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b  , sqlite3_free);
54c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b  .        return;
54d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
54e0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73   }.  sqlite3_res
54f0: 75 6c 74 5f 76 61 6c 75 65 28 70 43 74 78 2c 20  ult_value(pCtx, 
5500: 61 70 56 61 6c 5b 30 5d 29 3b 0a 7d 0a 0a 2f 2a  apVal[0]);.}../*
5510: 0a 2a 2a 20 54 68 65 20 73 6f 75 72 63 65 20 63  .** The source c
5520: 6f 64 65 20 66 6f 72 20 73 65 76 65 72 61 6c 20  ode for several 
5530: 72 75 6e 2d 74 69 6d 65 20 6c 6f 61 64 61 62 6c  run-time loadabl
5540: 65 20 65 78 74 65 6e 73 69 6f 6e 73 20 69 73 20  e extensions is 
5550: 69 6e 73 65 72 74 65 64 0a 2a 2a 20 62 65 6c 6f  inserted.** belo
5560: 77 20 62 79 20 74 68 65 20 2e 2e 2f 74 6f 6f 6c  w by the ../tool
5570: 2f 6d 6b 73 68 65 6c 6c 63 2e 74 63 6c 20 73 63  /mkshellc.tcl sc
5580: 72 69 70 74 2e 20 20 42 65 66 6f 72 65 20 70 72  ript.  Before pr
5590: 6f 63 65 73 73 69 6e 67 20 74 68 61 74 20 69 6e  ocessing that in
55a0: 63 6c 75 64 65 64 0a 2a 2a 20 63 6f 64 65 2c 20  cluded.** code, 
55b0: 77 65 20 6e 65 65 64 20 74 6f 20 6f 76 65 72 72  we need to overr
55c0: 69 64 65 20 73 6f 6d 65 20 6d 61 63 72 6f 73 20  ide some macros 
55d0: 74 6f 20 6d 61 6b 65 20 74 68 65 20 69 6e 63 6c  to make the incl
55e0: 75 64 65 64 20 70 72 6f 67 72 61 6d 20 63 6f 64  uded program cod
55f0: 65 0a 2a 2a 20 77 6f 72 6b 20 68 65 72 65 20 69  e.** work here i
5600: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
5610: 74 68 69 73 20 72 65 67 75 6c 61 72 20 70 72 6f  this regular pro
5620: 67 72 61 6d 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  gram..*/.#define
5630: 20 53 51 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f   SQLITE_EXTENSIO
5640: 4e 5f 49 4e 49 54 31 0a 23 64 65 66 69 6e 65 20  N_INIT1.#define 
5650: 53 51 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e  SQLITE_EXTENSION
5660: 5f 49 4e 49 54 32 28 58 29 0a 0a 49 4e 43 4c 55  _INIT2(X)..INCLU
5670: 44 45 20 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 73  DE ../ext/misc/s
5680: 68 61 74 68 72 65 65 2e 63 0a 49 4e 43 4c 55 44  hathree.c.INCLUD
5690: 45 20 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 66 69  E ../ext/misc/fi
56a0: 6c 65 69 6f 2e 63 0a 0a 23 69 66 20 64 65 66 69  leio.c..#if defi
56b0: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
56c0: 45 5f 53 45 53 53 49 4f 4e 29 0a 2f 2a 0a 2a 2a  E_SESSION)./*.**
56d0: 20 53 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   State informati
56e0: 6f 6e 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  on for a single 
56f0: 6f 70 65 6e 20 73 65 73 73 69 6f 6e 0a 2a 2f 0a  open session.*/.
5700: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4f  typedef struct O
5710: 70 65 6e 53 65 73 73 69 6f 6e 20 4f 70 65 6e 53  penSession OpenS
5720: 65 73 73 69 6f 6e 3b 0a 73 74 72 75 63 74 20 4f  ession;.struct O
5730: 70 65 6e 53 65 73 73 69 6f 6e 20 7b 0a 20 20 63  penSession {.  c
5740: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
5750: 20 20 20 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f          /* Symbo
5760: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 69  lic name for thi
5770: 73 20 73 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 69  s session */.  i
5780: 6e 74 20 6e 46 69 6c 74 65 72 3b 20 20 20 20 20  nt nFilter;     
5790: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
57a0: 72 20 6f 66 20 78 46 69 6c 74 65 72 20 72 65 6a  r of xFilter rej
57b0: 65 63 74 69 6f 6e 20 47 4c 4f 42 20 70 61 74 74  ection GLOB patt
57c0: 65 72 6e 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  erns */.  char *
57d0: 2a 61 7a 46 69 6c 74 65 72 3b 20 20 20 20 20 20  *azFilter;      
57e0: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 78     /* Array of x
57f0: 46 69 6c 74 65 72 20 72 65 6a 65 63 74 69 6f 6e  Filter rejection
5800: 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 2a   GLOB patterns *
5810: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 73 73  /.  sqlite3_sess
5820: 69 6f 6e 20 2a 70 3b 20 20 20 20 20 20 2f 2a 20  ion *p;      /* 
5830: 54 68 65 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e  The open session
5840: 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 0a 0a 2f   */.};.#endif../
5850: 2a 0a 2a 2a 20 53 68 65 6c 6c 20 6f 75 74 70 75  *.** Shell outpu
5860: 74 20 6d 6f 64 65 20 69 6e 66 6f 72 6d 61 74 69  t mode informati
5870: 6f 6e 20 66 72 6f 6d 20 62 65 66 6f 72 65 20 22  on from before "
5880: 2e 65 78 70 6c 61 69 6e 20 6f 6e 22 2c 0a 2a 2a  .explain on",.**
5890: 20 73 61 76 65 64 20 73 6f 20 74 68 61 74 20 69   saved so that i
58a0: 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65  t can be restore
58b0: 64 20 62 79 20 22 2e 65 78 70 6c 61 69 6e 20 6f  d by ".explain o
58c0: 66 66 22 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ff".*/.typedef s
58d0: 74 72 75 63 74 20 53 61 76 65 64 4d 6f 64 65 49  truct SavedModeI
58e0: 6e 66 6f 20 53 61 76 65 64 4d 6f 64 65 49 6e 66  nfo SavedModeInf
58f0: 6f 3b 0a 73 74 72 75 63 74 20 53 61 76 65 64 4d  o;.struct SavedM
5900: 6f 64 65 49 6e 66 6f 20 7b 0a 20 20 69 6e 74 20  odeInfo {.  int 
5910: 76 61 6c 69 64 3b 20 20 20 20 20 20 20 20 20 20  valid;          
5920: 2f 2a 20 49 73 20 74 68 65 72 65 20 6c 65 67 69  /* Is there legi
5930: 74 20 64 61 74 61 20 69 6e 20 68 65 72 65 3f 20  t data in here? 
5940: 2a 2f 0a 20 20 69 6e 74 20 6d 6f 64 65 3b 20 20  */.  int mode;  
5950: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 65           /* Mode
5960: 20 70 72 69 6f 72 20 74 6f 20 22 2e 65 78 70 6c   prior to ".expl
5970: 61 69 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69 6e 74  ain on" */.  int
5980: 20 73 68 6f 77 48 65 61 64 65 72 3b 20 20 20 20   showHeader;    
5990: 20 2f 2a 20 54 68 65 20 22 2e 68 65 61 64 65 72   /* The ".header
59a0: 22 20 73 65 74 74 69 6e 67 20 70 72 69 6f 72 20  " setting prior 
59b0: 74 6f 20 22 2e 65 78 70 6c 61 69 6e 20 6f 6e 22  to ".explain on"
59c0: 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6c 57 69 64   */.  int colWid
59d0: 74 68 5b 31 30 30 5d 3b 20 20 2f 2a 20 43 6f 6c  th[100];  /* Col
59e0: 75 6d 6e 20 77 69 64 74 68 73 20 70 72 69 6f 72  umn widths prior
59f0: 20 74 6f 20 22 2e 65 78 70 6c 61 69 6e 20 6f 6e   to ".explain on
5a00: 22 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  " */.};../*.** S
5a10: 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
5a20: 20 61 62 6f 75 74 20 74 68 65 20 64 61 74 61 62   about the datab
5a30: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
5a40: 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 61  s contained in a
5a50: 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
5a60: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
5a70: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 74 79 70  tructure..*/.typ
5a80: 65 64 65 66 20 73 74 72 75 63 74 20 53 68 65 6c  edef struct Shel
5a90: 6c 53 74 61 74 65 20 53 68 65 6c 6c 53 74 61 74  lState ShellStat
5aa0: 65 3b 0a 73 74 72 75 63 74 20 53 68 65 6c 6c 53  e;.struct ShellS
5ab0: 74 61 74 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  tate {.  sqlite3
5ac0: 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
5ad0: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
5ae0: 2a 2f 0a 20 20 69 6e 74 20 61 75 74 6f 45 78 70  */.  int autoExp
5af0: 6c 61 69 6e 3b 20 20 20 20 20 20 20 2f 2a 20 41  lain;       /* A
5b00: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 74 75 72  utomatically tur
5b10: 6e 20 6f 6e 20 2e 65 78 70 6c 61 69 6e 20 6d 6f  n on .explain mo
5b20: 64 65 20 2a 2f 0a 20 20 69 6e 74 20 61 75 74 6f  de */.  int auto
5b30: 45 51 50 3b 20 20 20 20 20 20 20 20 20 20 20 2f  EQP;           /
5b40: 2a 20 52 75 6e 20 45 58 50 4c 41 49 4e 20 51 55  * Run EXPLAIN QU
5b50: 45 52 59 20 50 4c 41 4e 20 70 72 69 6f 72 20 74  ERY PLAN prior t
5b60: 6f 20 73 65 61 63 68 20 53 51 4c 20 73 74 6d 74  o seach SQL stmt
5b70: 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61 74 73 4f   */.  int statsO
5b80: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
5b90: 54 72 75 65 20 74 6f 20 64 69 73 70 6c 61 79 20  True to display 
5ba0: 6d 65 6d 6f 72 79 20 73 74 61 74 73 20 62 65 66  memory stats bef
5bb0: 6f 72 65 20 65 61 63 68 20 66 69 6e 61 6c 69 7a  ore each finaliz
5bc0: 65 20 2a 2f 0a 20 20 69 6e 74 20 73 63 61 6e 73  e */.  int scans
5bd0: 74 61 74 73 4f 6e 3b 20 20 20 20 20 20 20 2f 2a  tatsOn;       /*
5be0: 20 54 72 75 65 20 74 6f 20 64 69 73 70 6c 61 79   True to display
5bf0: 20 73 63 61 6e 20 73 74 61 74 73 20 62 65 66 6f   scan stats befo
5c00: 72 65 20 65 61 63 68 20 66 69 6e 61 6c 69 7a 65  re each finalize
5c10: 20 2a 2f 0a 20 20 69 6e 74 20 6f 75 74 43 6f 75   */.  int outCou
5c20: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nt;          /* 
5c30: 52 65 76 65 72 74 20 74 6f 20 73 74 64 6f 75 74  Revert to stdout
5c40: 20 77 68 65 6e 20 72 65 61 63 68 69 6e 67 20 7a   when reaching z
5c50: 65 72 6f 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  ero */.  int cnt
5c60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
5c70: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 63  /* Number of rec
5c80: 6f 72 64 73 20 64 69 73 70 6c 61 79 65 64 20 73  ords displayed s
5c90: 6f 20 66 61 72 20 2a 2f 0a 20 20 46 49 4c 45 20  o far */.  FILE 
5ca0: 2a 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  *out;           
5cb0: 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
5cc0: 74 73 20 68 65 72 65 20 2a 2f 0a 20 20 46 49 4c  ts here */.  FIL
5cd0: 45 20 2a 74 72 61 63 65 4f 75 74 3b 20 20 20 20  E *traceOut;    
5ce0: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 66 6f      /* Output fo
5cf0: 72 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  r sqlite3_trace(
5d00: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  ) */.  int nErr;
5d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5d20: 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
5d30: 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
5d40: 6d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  mode;           
5d50: 20 20 20 2f 2a 20 41 6e 20 6f 75 74 70 75 74 20     /* An output 
5d60: 6d 6f 64 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  mode setting */.
5d70: 20 20 69 6e 74 20 63 4d 6f 64 65 3b 20 20 20 20    int cMode;    
5d80: 20 20 20 20 20 20 20 20 20 2f 2a 20 74 65 6d 70           /* temp
5d90: 6f 72 61 72 79 20 6f 75 74 70 75 74 20 6d 6f 64  orary output mod
5da0: 65 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  e for the curren
5db0: 74 20 71 75 65 72 79 20 2a 2f 0a 20 20 69 6e 74  t query */.  int
5dc0: 20 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 20 20 20 20   normalMode;    
5dd0: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6d 6f      /* Output mo
5de0: 64 65 20 62 65 66 6f 72 65 20 22 2e 65 78 70 6c  de before ".expl
5df0: 61 69 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69 6e 74  ain on" */.  int
5e00: 20 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 3b   writableSchema;
5e10: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 50      /* True if P
5e20: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
5e30: 63 68 65 6d 61 3d 4f 4e 20 2a 2f 0a 20 20 69 6e  chema=ON */.  in
5e40: 74 20 73 68 6f 77 48 65 61 64 65 72 3b 20 20 20  t showHeader;   
5e50: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
5e60: 73 68 6f 77 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  show column name
5e70: 73 20 69 6e 20 4c 69 73 74 20 6f 72 20 43 6f 6c  s in List or Col
5e80: 75 6d 6e 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  umn mode */.  in
5e90: 74 20 6e 43 68 65 63 6b 3b 20 20 20 20 20 20 20  t nCheck;       
5ea0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
5eb0: 66 20 22 2e 63 68 65 63 6b 22 20 63 6f 6d 6d 61  f ".check" comma
5ec0: 6e 64 73 20 72 75 6e 20 2a 2f 0a 20 20 75 6e 73  nds run */.  uns
5ed0: 69 67 6e 65 64 20 73 68 65 6c 6c 46 6c 67 73 3b  igned shellFlgs;
5ee0: 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66      /* Various f
5ef0: 6c 61 67 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lags */.  char *
5f00: 7a 44 65 73 74 54 61 62 6c 65 3b 20 20 20 20 20  zDestTable;     
5f10: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 65 73 74   /* Name of dest
5f20: 69 6e 61 74 69 6f 6e 20 74 61 62 6c 65 20 77 68  ination table wh
5f30: 65 6e 20 4d 4f 44 45 5f 49 6e 73 65 72 74 20 2a  en MODE_Insert *
5f40: 2f 0a 20 20 63 68 61 72 20 7a 54 65 73 74 63 61  /.  char zTestca
5f50: 73 65 5b 33 30 5d 3b 20 20 20 20 2f 2a 20 4e 61  se[30];    /* Na
5f60: 6d 65 20 6f 66 20 63 75 72 72 65 6e 74 20 74 65  me of current te
5f70: 73 74 20 63 61 73 65 20 2a 2f 0a 20 20 63 68 61  st case */.  cha
5f80: 72 20 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 32  r colSeparator[2
5f90: 30 5d 3b 20 2f 2a 20 43 6f 6c 75 6d 6e 20 73 65  0]; /* Column se
5fa0: 70 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65  parator characte
5fb0: 72 20 66 6f 72 20 73 65 76 65 72 61 6c 20 6d 6f  r for several mo
5fc0: 64 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 72 6f  des */.  char ro
5fd0: 77 53 65 70 61 72 61 74 6f 72 5b 32 30 5d 3b 20  wSeparator[20]; 
5fe0: 2f 2a 20 52 6f 77 20 73 65 70 61 72 61 74 6f 72  /* Row separator
5ff0: 20 63 68 61 72 61 63 74 65 72 20 66 6f 72 20 4d   character for M
6000: 4f 44 45 5f 41 73 63 69 69 20 2a 2f 0a 20 20 69  ODE_Ascii */.  i
6010: 6e 74 20 63 6f 6c 57 69 64 74 68 5b 31 30 30 5d  nt colWidth[100]
6020: 3b 20 20 20 20 20 2f 2a 20 52 65 71 75 65 73 74  ;     /* Request
6030: 65 64 20 77 69 64 74 68 20 6f 66 20 65 61 63 68  ed width of each
6040: 20 63 6f 6c 75 6d 6e 20 77 68 65 6e 20 69 6e 20   column when in 
6050: 63 6f 6c 75 6d 6e 20 6d 6f 64 65 2a 2f 0a 20 20  column mode*/.  
6060: 69 6e 74 20 61 63 74 75 61 6c 57 69 64 74 68 5b  int actualWidth[
6070: 31 30 30 5d 3b 20 20 2f 2a 20 41 63 74 75 61 6c  100];  /* Actual
6080: 20 77 69 64 74 68 20 6f 66 20 65 61 63 68 20 63   width of each c
6090: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
60a0: 6e 75 6c 6c 56 61 6c 75 65 5b 32 30 5d 3b 20 20  nullValue[20];  
60b0: 20 20 2f 2a 20 54 68 65 20 74 65 78 74 20 74 6f    /* The text to
60c0: 20 70 72 69 6e 74 20 77 68 65 6e 20 61 20 4e 55   print when a NU
60d0: 4c 4c 20 63 6f 6d 65 73 20 62 61 63 6b 20 66 72  LL comes back fr
60e0: 6f 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  om.             
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
6100: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
6110: 20 63 68 61 72 20 6f 75 74 66 69 6c 65 5b 46 49   char outfile[FI
6120: 4c 45 4e 41 4d 45 5f 4d 41 58 5d 3b 20 2f 2a 20  LENAME_MAX]; /* 
6130: 46 69 6c 65 6e 61 6d 65 20 66 6f 72 20 2a 6f 75  Filename for *ou
6140: 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
6150: 72 20 2a 7a 44 62 46 69 6c 65 6e 61 6d 65 3b 20  r *zDbFilename; 
6160: 20 20 20 2f 2a 20 6e 61 6d 65 20 6f 66 20 74 68     /* name of th
6170: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
6180: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 46 72 65 65  */.  char *zFree
6190: 4f 6e 43 6c 6f 73 65 3b 20 20 20 20 20 20 20 20  OnClose;        
61a0: 20 2f 2a 20 46 69 6c 65 6e 61 6d 65 20 74 6f 20   /* Filename to 
61b0: 66 72 65 65 20 77 68 65 6e 20 63 6c 6f 73 69 6e  free when closin
61c0: 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
61d0: 72 20 2a 7a 56 66 73 3b 20 20 20 20 20 20 20 20  r *zVfs;        
61e0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 56 46     /* Name of VF
61f0: 53 20 74 6f 20 75 73 65 20 2a 2f 0a 20 20 73 71  S to use */.  sq
6200: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
6210: 74 3b 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20  t;   /* Current 
6220: 73 74 61 74 65 6d 65 6e 74 20 69 66 20 61 6e 79  statement if any
6230: 2e 20 2a 2f 0a 20 20 46 49 4c 45 20 2a 70 4c 6f  . */.  FILE *pLo
6240: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
6250: 20 57 72 69 74 65 20 6c 6f 67 20 6f 75 74 70 75   Write log outpu
6260: 74 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  t here */.  int 
6270: 2a 61 69 49 6e 64 65 6e 74 3b 20 20 20 20 20 20  *aiIndent;      
6280: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 69     /* Array of i
6290: 6e 64 65 6e 74 73 20 75 73 65 64 20 69 6e 20 4d  ndents used in M
62a0: 4f 44 45 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20  ODE_Explain */. 
62b0: 20 69 6e 74 20 6e 49 6e 64 65 6e 74 3b 20 20 20   int nIndent;   
62c0: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
62d0: 6f 66 20 61 72 72 61 79 20 61 69 49 6e 64 65 6e  of array aiInden
62e0: 74 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 49 6e  t[] */.  int iIn
62f0: 64 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  dent;           
6300: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 75 72 72  /* Index of curr
6310: 65 6e 74 20 6f 70 20 69 6e 20 61 69 49 6e 64 65  ent op in aiInde
6320: 6e 74 5b 5d 20 2a 2f 0a 23 69 66 20 64 65 66 69  nt[] */.#if defi
6330: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
6340: 45 5f 53 45 53 53 49 4f 4e 29 0a 20 20 69 6e 74  E_SESSION).  int
6350: 20 6e 53 65 73 73 69 6f 6e 3b 20 20 20 20 20 20   nSession;      
6360: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6370: 20 6f 66 20 61 63 74 69 76 65 20 73 65 73 73 69   of active sessi
6380: 6f 6e 73 20 2a 2f 0a 20 20 4f 70 65 6e 53 65 73  ons */.  OpenSes
6390: 73 69 6f 6e 20 61 53 65 73 73 69 6f 6e 5b 34 5d  sion aSession[4]
63a0: 3b 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73  ;  /* Array of s
63b0: 65 73 73 69 6f 6e 73 2e 20 20 5b 30 5d 20 69 73  essions.  [0] is
63c0: 20 69 6e 20 66 6f 63 75 73 2e 20 2a 2f 0a 23 65   in focus. */.#e
63d0: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ndif.};../*.** T
63e0: 68 65 73 65 20 61 72 65 20 74 68 65 20 61 6c 6c  hese are the all
63f0: 6f 77 65 64 20 73 68 65 6c 6c 46 6c 67 73 20 76  owed shellFlgs v
6400: 61 6c 75 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  alues.*/.#define
6410: 20 53 48 46 4c 47 5f 53 63 72 61 74 63 68 20 20   SHFLG_Scratch  
6420: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31        0x00000001
6430: 20 2f 2a 20 54 68 65 20 2d 2d 73 63 72 61 74 63   /* The --scratc
6440: 68 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  h option is used
6450: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 46 4c   */.#define SHFL
6460: 47 5f 50 61 67 65 63 61 63 68 65 20 20 20 20 20  G_Pagecache     
6470: 20 30 78 30 30 30 30 30 30 30 32 20 2f 2a 20 54   0x00000002 /* T
6480: 68 65 20 2d 2d 70 61 67 65 63 61 63 68 65 20 6f  he --pagecache o
6490: 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20 2a 2f  ption is used */
64a0: 0a 23 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 4c  .#define SHFLG_L
64b0: 6f 6f 6b 61 73 69 64 65 20 20 20 20 20 20 30 78  ookaside      0x
64c0: 30 30 30 30 30 30 30 34 20 2f 2a 20 4c 6f 6f 6b  00000004 /* Look
64d0: 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 69 73 20  aside memory is 
64e0: 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
64f0: 53 48 46 4c 47 5f 42 61 63 6b 73 6c 61 73 68 20  SHFLG_Backslash 
6500: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38 20       0x00000008 
6510: 2f 2a 20 54 68 65 20 2d 2d 62 61 63 6b 73 6c 61  /* The --backsla
6520: 73 68 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  sh option is use
6530: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 46  d */.#define SHF
6540: 4c 47 5f 50 72 65 73 65 72 76 65 52 6f 77 69 64  LG_PreserveRowid
6550: 20 20 30 78 30 30 30 30 30 30 31 30 20 2f 2a 20    0x00000010 /* 
6560: 2e 64 75 6d 70 20 70 72 65 73 65 72 76 65 73 20  .dump preserves 
6570: 72 6f 77 69 64 20 76 61 6c 75 65 73 20 2a 2f 0a  rowid values */.
6580: 23 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 4e 65  #define SHFLG_Ne
6590: 77 6c 69 6e 65 73 20 20 20 20 20 20 20 30 78 30  wlines       0x0
65a0: 30 30 30 30 30 32 30 20 2f 2a 20 2e 64 75 6d 70  0000020 /* .dump
65b0: 20 2d 2d 6e 65 77 6c 69 6e 65 20 66 6c 61 67 20   --newline flag 
65c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 46 4c 47  */.#define SHFLG
65d0: 5f 43 6f 75 6e 74 43 68 61 6e 67 65 73 20 20 20  _CountChanges   
65e0: 30 78 30 30 30 30 30 30 34 30 20 2f 2a 20 2e 63  0x00000040 /* .c
65f0: 68 61 6e 67 65 73 20 73 65 74 74 69 6e 67 20 2a  hanges setting *
6600: 2f 0a 23 64 65 66 69 6e 65 20 53 48 46 4c 47 5f  /.#define SHFLG_
6610: 45 63 68 6f 20 20 20 20 20 20 20 20 20 20 20 30  Echo           0
6620: 78 30 30 30 30 30 30 38 30 20 2f 2a 20 2e 65 63  x00000080 /* .ec
6630: 68 6f 20 6f 72 20 2d 2d 65 63 68 6f 20 73 65 74  ho or --echo set
6640: 74 69 6e 67 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ting */../*.** M
6650: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
6660: 67 20 61 6e 64 20 73 65 74 74 69 6e 67 20 73 68  g and setting sh
6670: 65 6c 6c 46 6c 67 73 0a 2a 2f 0a 23 64 65 66 69  ellFlgs.*/.#defi
6680: 6e 65 20 53 68 65 6c 6c 48 61 73 46 6c 61 67 28  ne ShellHasFlag(
6690: 50 2c 58 29 20 20 20 20 28 28 28 50 29 2d 3e 73  P,X)    (((P)->s
66a0: 68 65 6c 6c 46 6c 67 73 20 26 20 28 58 29 29 21  hellFlgs & (X))!
66b0: 3d 30 29 0a 23 64 65 66 69 6e 65 20 53 68 65 6c  =0).#define Shel
66c0: 6c 53 65 74 46 6c 61 67 28 50 2c 58 29 20 20 20  lSetFlag(P,X)   
66d0: 20 28 28 50 29 2d 3e 73 68 65 6c 6c 46 6c 67 73   ((P)->shellFlgs
66e0: 7c 3d 28 58 29 29 0a 23 64 65 66 69 6e 65 20 53  |=(X)).#define S
66f0: 68 65 6c 6c 43 6c 65 61 72 46 6c 61 67 28 50 2c  hellClearFlag(P,
6700: 58 29 20 20 28 28 50 29 2d 3e 73 68 65 6c 6c 46  X)  ((P)->shellF
6710: 6c 67 73 26 3d 28 7e 28 58 29 29 29 0a 0a 2f 2a  lgs&=(~(X)))../*
6720: 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20 74 68  .** These are th
6730: 65 20 61 6c 6c 6f 77 65 64 20 6d 6f 64 65 73 2e  e allowed modes.
6740: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45  .*/.#define MODE
6750: 5f 4c 69 6e 65 20 20 20 20 20 30 20 20 2f 2a 20  _Line     0  /* 
6760: 4f 6e 65 20 63 6f 6c 75 6d 6e 20 70 65 72 20 6c  One column per l
6770: 69 6e 65 2e 20 20 42 6c 61 6e 6b 20 6c 69 6e 65  ine.  Blank line
6780: 20 62 65 74 77 65 65 6e 20 72 65 63 6f 72 64 73   between records
6790: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45   */.#define MODE
67a0: 5f 43 6f 6c 75 6d 6e 20 20 20 31 20 20 2f 2a 20  _Column   1  /* 
67b0: 4f 6e 65 20 72 65 63 6f 72 64 20 70 65 72 20 6c  One record per l
67c0: 69 6e 65 20 69 6e 20 6e 65 61 74 20 63 6f 6c 75  ine in neat colu
67d0: 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  mns */.#define M
67e0: 4f 44 45 5f 4c 69 73 74 20 20 20 20 20 32 20 20  ODE_List     2  
67f0: 2f 2a 20 4f 6e 65 20 72 65 63 6f 72 64 20 70 65  /* One record pe
6800: 72 20 6c 69 6e 65 20 77 69 74 68 20 61 20 73 65  r line with a se
6810: 70 61 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  parator */.#defi
6820: 6e 65 20 4d 4f 44 45 5f 53 65 6d 69 20 20 20 20  ne MODE_Semi    
6830: 20 33 20 20 2f 2a 20 53 61 6d 65 20 61 73 20 4d   3  /* Same as M
6840: 4f 44 45 5f 4c 69 73 74 20 62 75 74 20 61 70 70  ODE_List but app
6850: 65 6e 64 20 22 3b 22 20 74 6f 20 65 61 63 68 20  end ";" to each 
6860: 6c 69 6e 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  line */.#define 
6870: 4d 4f 44 45 5f 48 74 6d 6c 20 20 20 20 20 34 20  MODE_Html     4 
6880: 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 6e 20   /* Generate an 
6890: 58 48 54 4d 4c 20 74 61 62 6c 65 20 2a 2f 0a 23  XHTML table */.#
68a0: 64 65 66 69 6e 65 20 4d 4f 44 45 5f 49 6e 73 65  define MODE_Inse
68b0: 72 74 20 20 20 35 20 20 2f 2a 20 47 65 6e 65 72  rt   5  /* Gener
68c0: 61 74 65 20 53 51 4c 20 22 69 6e 73 65 72 74 22  ate SQL "insert"
68d0: 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 23   statements */.#
68e0: 64 65 66 69 6e 65 20 4d 4f 44 45 5f 51 75 6f 74  define MODE_Quot
68f0: 65 20 20 20 20 36 20 20 2f 2a 20 51 75 6f 74 65  e    6  /* Quote
6900: 20 76 61 6c 75 65 73 20 61 73 20 66 6f 72 20 53   values as for S
6910: 51 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f  QL */.#define MO
6920: 44 45 5f 54 63 6c 20 20 20 20 20 20 37 20 20 2f  DE_Tcl      7  /
6930: 2a 20 47 65 6e 65 72 61 74 65 20 41 4e 53 49 2d  * Generate ANSI-
6940: 43 20 6f 72 20 54 43 4c 20 71 75 6f 74 65 64 20  C or TCL quoted 
6950: 65 6c 65 6d 65 6e 74 73 20 2a 2f 0a 23 64 65 66  elements */.#def
6960: 69 6e 65 20 4d 4f 44 45 5f 43 73 76 20 20 20 20  ine MODE_Csv    
6970: 20 20 38 20 20 2f 2a 20 51 75 6f 74 65 20 73 74    8  /* Quote st
6980: 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73 20 61  rings, numbers a
6990: 72 65 20 70 6c 61 69 6e 20 2a 2f 0a 23 64 65 66  re plain */.#def
69a0: 69 6e 65 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e  ine MODE_Explain
69b0: 20 20 39 20 20 2f 2a 20 4c 69 6b 65 20 4d 4f 44    9  /* Like MOD
69c0: 45 5f 43 6f 6c 75 6d 6e 2c 20 62 75 74 20 64 6f  E_Column, but do
69d0: 20 6e 6f 74 20 74 72 75 6e 63 61 74 65 20 64 61   not truncate da
69e0: 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f  ta */.#define MO
69f0: 44 45 5f 41 73 63 69 69 20 20 20 31 30 20 20 2f  DE_Ascii   10  /
6a00: 2a 20 55 73 65 20 41 53 43 49 49 20 75 6e 69 74  * Use ASCII unit
6a10: 20 61 6e 64 20 72 65 63 6f 72 64 20 73 65 70 61   and record sepa
6a20: 72 61 74 6f 72 73 20 28 30 78 31 46 2f 30 78 31  rators (0x1F/0x1
6a30: 45 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f  E) */.#define MO
6a40: 44 45 5f 50 72 65 74 74 79 20 20 31 31 20 20 2f  DE_Pretty  11  /
6a50: 2a 20 50 72 65 74 74 79 2d 70 72 69 6e 74 20 73  * Pretty-print s
6a60: 63 68 65 6d 61 73 20 2a 2f 0a 0a 73 74 61 74 69  chemas */..stati
6a70: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6d 6f  c const char *mo
6a80: 64 65 44 65 73 63 72 5b 5d 20 3d 20 7b 0a 20 20  deDescr[] = {.  
6a90: 22 6c 69 6e 65 22 2c 0a 20 20 22 63 6f 6c 75 6d  "line",.  "colum
6aa0: 6e 22 2c 0a 20 20 22 6c 69 73 74 22 2c 0a 20 20  n",.  "list",.  
6ab0: 22 73 65 6d 69 22 2c 0a 20 20 22 68 74 6d 6c 22  "semi",.  "html"
6ac0: 2c 0a 20 20 22 69 6e 73 65 72 74 22 2c 0a 20 20  ,.  "insert",.  
6ad0: 22 71 75 6f 74 65 22 2c 0a 20 20 22 74 63 6c 22  "quote",.  "tcl"
6ae0: 2c 0a 20 20 22 63 73 76 22 2c 0a 20 20 22 65 78  ,.  "csv",.  "ex
6af0: 70 6c 61 69 6e 22 2c 0a 20 20 22 61 73 63 69 69  plain",.  "ascii
6b00: 22 2c 0a 20 20 22 70 72 65 74 74 79 70 72 69 6e  ",.  "prettyprin
6b10: 74 22 2c 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  t",.};../*.** Th
6b20: 65 73 65 20 61 72 65 20 74 68 65 20 63 6f 6c 75  ese are the colu
6b30: 6d 6e 2f 72 6f 77 2f 6c 69 6e 65 20 73 65 70 61  mn/row/line sepa
6b40: 72 61 74 6f 72 73 20 75 73 65 64 20 62 79 20 74  rators used by t
6b50: 68 65 20 76 61 72 69 6f 75 73 0a 2a 2a 20 69 6d  he various.** im
6b60: 70 6f 72 74 2f 65 78 70 6f 72 74 20 6d 6f 64 65  port/export mode
6b70: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 45  s..*/.#define SE
6b80: 50 5f 43 6f 6c 75 6d 6e 20 20 20 20 22 7c 22 0a  P_Column    "|".
6b90: 23 64 65 66 69 6e 65 20 53 45 50 5f 52 6f 77 20  #define SEP_Row 
6ba0: 20 20 20 20 20 20 22 5c 6e 22 0a 23 64 65 66 69        "\n".#defi
6bb0: 6e 65 20 53 45 50 5f 54 61 62 20 20 20 20 20 20  ne SEP_Tab      
6bc0: 20 22 5c 74 22 0a 23 64 65 66 69 6e 65 20 53 45   "\t".#define SE
6bd0: 50 5f 53 70 61 63 65 20 20 20 20 20 22 20 22 0a  P_Space     " ".
6be0: 23 64 65 66 69 6e 65 20 53 45 50 5f 43 6f 6d 6d  #define SEP_Comm
6bf0: 61 20 20 20 20 20 22 2c 22 0a 23 64 65 66 69 6e  a     ",".#defin
6c00: 65 20 53 45 50 5f 43 72 4c 66 20 20 20 20 20 20  e SEP_CrLf      
6c10: 22 5c 72 5c 6e 22 0a 23 64 65 66 69 6e 65 20 53  "\r\n".#define S
6c20: 45 50 5f 55 6e 69 74 20 20 20 20 20 20 22 5c 78  EP_Unit      "\x
6c30: 31 46 22 0a 23 64 65 66 69 6e 65 20 53 45 50 5f  1F".#define SEP_
6c40: 52 65 63 6f 72 64 20 20 20 20 22 5c 78 31 45 22  Record    "\x1E"
6c50: 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d 62 65 72 20 6f  ../*.** Number o
6c60: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 6e  f elements in an
6c70: 20 61 72 72 61 79 0a 2a 2f 0a 23 64 65 66 69 6e   array.*/.#defin
6c80: 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20  e ArraySize(X)  
6c90: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
6ca0: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 0a 0a 2f  sizeof(X[0]))../
6cb0: 2a 0a 2a 2a 20 41 20 63 61 6c 6c 62 61 63 6b 20  *.** A callback 
6cc0: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
6cd0: 6c 6f 67 28 29 20 69 6e 74 65 72 66 61 63 65 2e  log() interface.
6ce0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
6cf0: 73 68 65 6c 6c 4c 6f 67 28 76 6f 69 64 20 2a 70  shellLog(void *p
6d00: 41 72 67 2c 20 69 6e 74 20 69 45 72 72 43 6f 64  Arg, int iErrCod
6d10: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
6d20: 4d 73 67 29 7b 0a 20 20 53 68 65 6c 6c 53 74 61  Msg){.  ShellSta
6d30: 74 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74  te *p = (ShellSt
6d40: 61 74 65 2a 29 70 41 72 67 3b 0a 20 20 69 66 28  ate*)pArg;.  if(
6d50: 20 70 2d 3e 70 4c 6f 67 3d 3d 30 20 29 20 72 65   p->pLog==0 ) re
6d60: 74 75 72 6e 3b 0a 20 20 75 74 66 38 5f 70 72 69  turn;.  utf8_pri
6d70: 6e 74 66 28 70 2d 3e 70 4c 6f 67 2c 20 22 28 25  ntf(p->pLog, "(%
6d80: 64 29 20 25 73 5c 6e 22 2c 20 69 45 72 72 43 6f  d) %s\n", iErrCo
6d90: 64 65 2c 20 7a 4d 73 67 29 3b 0a 20 20 66 66 6c  de, zMsg);.  ffl
6da0: 75 73 68 28 70 2d 3e 70 4c 6f 67 29 3b 0a 7d 0a  ush(p->pLog);.}.
6db0: 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 68  ./*.** Output th
6dc0: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
6dd0: 73 20 61 20 68 65 78 2d 65 6e 63 6f 64 65 64 20  s a hex-encoded 
6de0: 62 6c 6f 62 20 28 65 67 2e 20 58 27 31 32 33 34  blob (eg. X'1234
6df0: 27 20 29 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ' ).*/.static vo
6e00: 69 64 20 6f 75 74 70 75 74 5f 68 65 78 5f 62 6c  id output_hex_bl
6e10: 6f 62 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f  ob(FILE *out, co
6e20: 6e 73 74 20 76 6f 69 64 20 2a 70 42 6c 6f 62 2c  nst void *pBlob,
6e30: 20 69 6e 74 20 6e 42 6c 6f 62 29 7b 0a 20 20 69   int nBlob){.  i
6e40: 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 42  nt i;.  char *zB
6e50: 6c 6f 62 20 3d 20 28 63 68 61 72 20 2a 29 70 42  lob = (char *)pB
6e60: 6c 6f 62 3b 0a 20 20 72 61 77 5f 70 72 69 6e 74  lob;.  raw_print
6e70: 66 28 6f 75 74 2c 22 58 27 22 29 3b 0a 20 20 66  f(out,"X'");.  f
6e80: 6f 72 28 69 3d 30 3b 20 69 3c 6e 42 6c 6f 62 3b  or(i=0; i<nBlob;
6e90: 20 69 2b 2b 29 7b 20 72 61 77 5f 70 72 69 6e 74   i++){ raw_print
6ea0: 66 28 6f 75 74 2c 22 25 30 32 78 22 2c 7a 42 6c  f(out,"%02x",zBl
6eb0: 6f 62 5b 69 5d 26 30 78 66 66 29 3b 20 7d 0a 20  ob[i]&0xff); }. 
6ec0: 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
6ed0: 22 27 22 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46  "'");.}../*.** F
6ee0: 69 6e 64 20 61 20 73 74 72 69 6e 67 20 74 68 61  ind a string tha
6ef0: 74 20 69 73 20 6e 6f 74 20 66 6f 75 6e 64 20 61  t is not found a
6f00: 6e 79 77 68 65 72 65 20 69 6e 20 7a 5b 5d 2e 20  nywhere in z[]. 
6f10: 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65   Return a pointe
6f20: 72 0a 2a 2a 20 74 6f 20 74 68 61 74 20 73 74 72  r.** to that str
6f30: 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74  ing..**.** Try t
6f40: 6f 20 75 73 65 20 7a 41 20 61 6e 64 20 7a 42 20  o use zA and zB 
6f50: 66 69 72 73 74 2e 20 20 49 66 20 62 6f 74 68 20  first.  If both 
6f60: 6f 66 20 74 68 6f 73 65 20 61 72 65 20 61 6c 72  of those are alr
6f70: 65 61 64 79 20 66 6f 75 6e 64 20 69 6e 20 7a 5b  eady found in z[
6f80: 5d 0a 2a 2a 20 74 68 65 6e 20 6d 61 6b 65 20 75  ].** then make u
6f90: 70 20 73 6f 6d 65 20 73 74 72 69 6e 67 20 61 6e  p some string an
6fa0: 64 20 73 74 6f 72 65 20 69 74 20 69 6e 20 74 68  d store it in th
6fb0: 65 20 62 75 66 66 65 72 20 7a 42 75 66 2e 0a 2a  e buffer zBuf..*
6fc0: 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63  /.static const c
6fd0: 68 61 72 20 2a 75 6e 75 73 65 64 5f 73 74 72 69  har *unused_stri
6fe0: 6e 67 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ng(.  const char
6ff0: 20 2a 7a 2c 20 20 20 20 20 20 20 20 20 20 20 20   *z,            
7000: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
7010: 74 20 6d 75 73 74 20 6e 6f 74 20 61 70 70 65 61  t must not appea
7020: 72 20 61 6e 79 77 68 65 72 65 20 69 6e 20 7a 20  r anywhere in z 
7030: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
7040: 2a 7a 41 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  *zA, const char 
7050: 2a 7a 42 2c 20 20 20 2f 2a 20 54 72 79 20 74 68  *zB,   /* Try th
7060: 65 73 65 20 66 69 72 73 74 20 2a 2f 0a 20 20 63  ese first */.  c
7070: 68 61 72 20 2a 7a 42 75 66 20 20 20 20 20 20 20  har *zBuf       
7080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7090: 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 73 74 6f   /* Space to sto
70a0: 72 65 20 61 20 67 65 6e 65 72 61 74 65 64 20 73  re a generated s
70b0: 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 75 6e  tring */.){.  un
70c0: 73 69 67 6e 65 64 20 69 20 3d 20 30 3b 0a 20 20  signed i = 0;.  
70d0: 69 66 28 20 73 74 72 73 74 72 28 7a 2c 20 7a 41  if( strstr(z, zA
70e0: 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 7a 41  )==0 ) return zA
70f0: 3b 0a 20 20 69 66 28 20 73 74 72 73 74 72 28 7a  ;.  if( strstr(z
7100: 2c 20 7a 42 29 3d 3d 30 20 29 20 72 65 74 75 72  , zB)==0 ) retur
7110: 6e 20 7a 42 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  n zB;.  do{.    
7120: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
7130: 28 32 30 2c 7a 42 75 66 2c 22 28 25 73 25 75 29  (20,zBuf,"(%s%u)
7140: 22 2c 20 7a 41 2c 20 69 2b 2b 29 3b 0a 20 20 7d  ", zA, i++);.  }
7150: 77 68 69 6c 65 28 20 73 74 72 73 74 72 28 7a 2c  while( strstr(z,
7160: 7a 42 75 66 29 21 3d 30 20 29 3b 0a 20 20 72 65  zBuf)!=0 );.  re
7170: 74 75 72 6e 20 7a 42 75 66 3b 0a 7d 0a 0a 2f 2a  turn zBuf;.}../*
7180: 0a 2a 2a 20 4f 75 74 70 75 74 20 74 68 65 20 67  .** Output the g
7190: 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61  iven string as a
71a0: 20 71 75 6f 74 65 64 20 73 74 72 69 6e 67 20 75   quoted string u
71b0: 73 69 6e 67 20 53 51 4c 20 71 75 6f 74 69 6e 67  sing SQL quoting
71c0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2a   conventions..**
71d0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 6f 75  .** See also: ou
71e0: 74 70 75 74 5f 71 75 6f 74 65 64 5f 65 73 63 61  tput_quoted_esca
71f0: 70 65 64 5f 73 74 72 69 6e 67 28 29 0a 2a 2f 0a  ped_string().*/.
7200: 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70  static void outp
7210: 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67  ut_quoted_string
7220: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73  (FILE *out, cons
7230: 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e  t char *z){.  in
7240: 74 20 69 3b 0a 20 20 63 68 61 72 20 63 3b 0a 20  t i;.  char c;. 
7250: 20 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 6f   setBinaryMode(o
7260: 75 74 2c 20 31 29 3b 0a 20 20 66 6f 72 28 69 3d  ut, 1);.  for(i=
7270: 30 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30  0; (c = z[i])!=0
7280: 20 26 26 20 63 21 3d 27 5c 27 27 3b 20 69 2b 2b   && c!='\''; i++
7290: 29 7b 7d 0a 20 20 69 66 28 20 63 3d 3d 30 20 29  ){}.  if( c==0 )
72a0: 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  {.    utf8_print
72b0: 66 28 6f 75 74 2c 22 27 25 73 27 22 2c 7a 29 3b  f(out,"'%s'",z);
72c0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 61  .  }else{.    ra
72d0: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 27  w_printf(out, "'
72e0: 22 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 2a  ");.    while( *
72f0: 7a 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69  z ){.      for(i
7300: 3d 30 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d  =0; (c = z[i])!=
7310: 30 20 26 26 20 63 21 3d 27 5c 27 27 3b 20 69 2b  0 && c!='\''; i+
7320: 2b 29 7b 7d 0a 20 20 20 20 20 20 69 66 28 20 63  +){}.      if( c
7330: 3d 3d 27 5c 27 27 20 29 20 69 2b 2b 3b 0a 20 20  =='\'' ) i++;.  
7340: 20 20 20 20 69 66 28 20 69 20 29 7b 0a 20 20 20      if( i ){.   
7350: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
7360: 28 6f 75 74 2c 20 22 25 2e 2a 73 22 2c 20 69 2c  (out, "%.*s", i,
7370: 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 7a 20 2b   z);.        z +
7380: 3d 20 69 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = i;.      }.   
7390: 20 20 20 69 66 28 20 63 3d 3d 27 5c 27 27 20 29     if( c=='\'' )
73a0: 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
73b0: 69 6e 74 66 28 6f 75 74 2c 20 22 27 22 29 3b 0a  intf(out, "'");.
73c0: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
73d0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
73e0: 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20  if( c==0 ){.    
73f0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
7400: 20 7d 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20   }.      z++;.  
7410: 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69 6e    }.    raw_prin
7420: 74 66 28 6f 75 74 2c 20 22 27 22 29 3b 0a 20 20  tf(out, "'");.  
7430: 7d 0a 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28  }.  setTextMode(
7440: 6f 75 74 2c 20 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  out, 1);.}../*.*
7450: 2a 20 4f 75 74 70 75 74 20 74 68 65 20 67 69 76  * Output the giv
7460: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 71  en string as a q
7470: 75 6f 74 65 64 20 73 74 72 69 6e 67 20 75 73 69  uoted string usi
7480: 6e 67 20 53 51 4c 20 71 75 6f 74 69 6e 67 20 63  ng SQL quoting c
7490: 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2a 20 41  onventions..** A
74a0: 64 64 69 74 69 6f 6e 61 6c 6c 6c 79 20 2c 20 65  dditionallly , e
74b0: 73 63 61 70 65 20 74 68 65 20 22 5c 6e 22 20 61  scape the "\n" a
74c0: 6e 64 20 22 5c 72 22 20 63 68 61 72 61 63 74 65  nd "\r" characte
74d0: 72 73 20 73 6f 20 74 68 61 74 20 74 68 65 79 20  rs so that they 
74e0: 64 6f 20 6e 6f 74 0a 2a 2a 20 67 65 74 20 63 6f  do not.** get co
74f0: 72 72 75 70 74 65 64 20 62 79 20 65 6e 64 2d 6f  rrupted by end-o
7500: 66 2d 6c 69 6e 65 20 74 72 61 6e 73 6c 61 74 69  f-line translati
7510: 6f 6e 20 66 61 63 69 6c 69 74 69 65 73 20 69 6e  on facilities in
7520: 20 73 6f 6d 65 20 6f 70 65 72 61 74 69 6e 67 0a   some operating.
7530: 2a 2a 20 73 79 73 74 65 6d 73 2e 0a 2a 2a 0a 2a  ** systems..**.*
7540: 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 6f  * This is like o
7550: 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74 72  utput_quoted_str
7560: 69 6e 67 28 29 20 62 75 74 20 77 69 74 68 20 74  ing() but with t
7570: 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 74  he addition of t
7580: 68 65 20 5c 72 5c 6e 0a 2a 2a 20 65 73 63 61 70  he \r\n.** escap
7590: 65 20 6d 65 63 68 61 6e 69 73 6d 2e 0a 2a 2f 0a  e mechanism..*/.
75a0: 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70  static void outp
75b0: 75 74 5f 71 75 6f 74 65 64 5f 65 73 63 61 70 65  ut_quoted_escape
75c0: 64 5f 73 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f  d_string(FILE *o
75d0: 75 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ut, const char *
75e0: 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63  z){.  int i;.  c
75f0: 68 61 72 20 63 3b 0a 20 20 73 65 74 42 69 6e 61  har c;.  setBina
7600: 72 79 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a  ryMode(out, 1);.
7610: 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20    for(i=0; (c = 
7620: 7a 5b 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27  z[i])!=0 && c!='
7630: 5c 27 27 20 26 26 20 63 21 3d 27 5c 6e 27 20 26  \'' && c!='\n' &
7640: 26 20 63 21 3d 27 5c 72 27 3b 20 69 2b 2b 29 7b  & c!='\r'; i++){
7650: 7d 0a 20 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a  }.  if( c==0 ){.
7660: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
7670: 6f 75 74 2c 22 27 25 73 27 22 2c 7a 29 3b 0a 20  out,"'%s'",z);. 
7680: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 6f 6e 73   }else{.    cons
7690: 74 20 63 68 61 72 20 2a 7a 4e 4c 20 3d 20 30 3b  t char *zNL = 0;
76a0: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
76b0: 2a 7a 43 52 20 3d 20 30 3b 0a 20 20 20 20 69 6e  *zCR = 0;.    in
76c0: 74 20 6e 4e 4c 20 3d 20 30 3b 0a 20 20 20 20 69  t nNL = 0;.    i
76d0: 6e 74 20 6e 43 52 20 3d 20 30 3b 0a 20 20 20 20  nt nCR = 0;.    
76e0: 63 68 61 72 20 7a 42 75 66 31 5b 32 30 5d 2c 20  char zBuf1[20], 
76f0: 7a 42 75 66 32 5b 32 30 5d 3b 0a 20 20 20 20 66  zBuf2[20];.    f
7700: 6f 72 28 69 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b  or(i=0; z[i]; i+
7710: 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b  +){.      if( z[
7720: 69 5d 3d 3d 27 5c 6e 27 20 29 20 6e 4e 4c 2b 2b  i]=='\n' ) nNL++
7730: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 69 5d  ;.      if( z[i]
7740: 3d 3d 27 5c 72 27 20 29 20 6e 43 52 2b 2b 3b 0a  =='\r' ) nCR++;.
7750: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 4e      }.    if( nN
7760: 4c 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  L ){.      raw_p
7770: 72 69 6e 74 66 28 6f 75 74 2c 20 22 72 65 70 6c  rintf(out, "repl
7780: 61 63 65 28 22 29 3b 0a 20 20 20 20 20 20 7a 4e  ace(");.      zN
7790: 4c 20 3d 20 75 6e 75 73 65 64 5f 73 74 72 69 6e  L = unused_strin
77a0: 67 28 7a 2c 20 22 5c 5c 6e 22 2c 20 22 5c 5c 30  g(z, "\\n", "\\0
77b0: 31 32 22 2c 20 7a 42 75 66 31 29 3b 0a 20 20 20  12", zBuf1);.   
77c0: 20 7d 0a 20 20 20 20 69 66 28 20 6e 43 52 20 29   }.    if( nCR )
77d0: 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
77e0: 74 66 28 6f 75 74 2c 20 22 72 65 70 6c 61 63 65  tf(out, "replace
77f0: 28 22 29 3b 0a 20 20 20 20 20 20 7a 43 52 20 3d  (");.      zCR =
7800: 20 75 6e 75 73 65 64 5f 73 74 72 69 6e 67 28 7a   unused_string(z
7810: 2c 20 22 5c 5c 72 22 2c 20 22 5c 5c 30 31 35 22  , "\\r", "\\015"
7820: 2c 20 7a 42 75 66 32 29 3b 0a 20 20 20 20 7d 0a  , zBuf2);.    }.
7830: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
7840: 75 74 2c 20 22 27 22 29 3b 0a 20 20 20 20 77 68  ut, "'");.    wh
7850: 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 20  ile( *z ){.     
7860: 20 66 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20 7a   for(i=0; (c = z
7870: 5b 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27 5c  [i])!=0 && c!='\
7880: 6e 27 20 26 26 20 63 21 3d 27 5c 72 27 20 26 26  n' && c!='\r' &&
7890: 20 63 21 3d 27 5c 27 27 3b 20 69 2b 2b 29 7b 7d   c!='\''; i++){}
78a0: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c  .      if( c=='\
78b0: 27 27 20 29 20 69 2b 2b 3b 0a 20 20 20 20 20 20  '' ) i++;.      
78c0: 69 66 28 20 69 20 29 7b 0a 20 20 20 20 20 20 20  if( i ){.       
78d0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74   utf8_printf(out
78e0: 2c 20 22 25 2e 2a 73 22 2c 20 69 2c 20 7a 29 3b  , "%.*s", i, z);
78f0: 0a 20 20 20 20 20 20 20 20 7a 20 2b 3d 20 69 3b  .        z += i;
7900: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
7910: 66 28 20 63 3d 3d 27 5c 27 27 20 29 7b 0a 20 20  f( c=='\'' ){.  
7920: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
7930: 28 6f 75 74 2c 20 22 27 22 29 3b 0a 20 20 20 20  (out, "'");.    
7940: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
7950: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
7960: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  c==0 ){.        
7970: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
7980: 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20       z++;.      
7990: 69 66 28 20 63 3d 3d 27 5c 6e 27 20 29 7b 0a 20  if( c=='\n' ){. 
79a0: 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
79b0: 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a 4e 4c  f(out, "%s", zNL
79c0: 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69  );.        conti
79d0: 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  nue;.      }.   
79e0: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
79f0: 74 2c 20 22 25 73 22 2c 20 7a 43 52 29 3b 0a 20  t, "%s", zCR);. 
7a00: 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69     }.    raw_pri
7a10: 6e 74 66 28 6f 75 74 2c 20 22 27 22 29 3b 0a 20  ntf(out, "'");. 
7a20: 20 20 20 69 66 28 20 6e 43 52 20 29 7b 0a 20 20     if( nCR ){.  
7a30: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
7a40: 75 74 2c 20 22 2c 27 25 73 27 2c 63 68 61 72 28  ut, ",'%s',char(
7a50: 31 33 29 29 22 2c 20 7a 43 52 29 3b 0a 20 20 20  13))", zCR);.   
7a60: 20 7d 0a 20 20 20 20 69 66 28 20 6e 4e 4c 20 29   }.    if( nNL )
7a70: 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
7a80: 74 66 28 6f 75 74 2c 20 22 2c 27 25 73 27 2c 63  tf(out, ",'%s',c
7a90: 68 61 72 28 31 30 29 29 22 2c 20 7a 4e 4c 29 3b  har(10))", zNL);
7aa0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 65 74  .    }.  }.  set
7ab0: 54 65 78 74 4d 6f 64 65 28 6f 75 74 2c 20 31 29  TextMode(out, 1)
7ac0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75  ;.}../*.** Outpu
7ad0: 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69  t the given stri
7ae0: 6e 67 20 61 73 20 61 20 71 75 6f 74 65 64 20 61  ng as a quoted a
7af0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 43 20 6f 72  ccording to C or
7b00: 20 54 43 4c 20 71 75 6f 74 69 6e 67 20 72 75 6c   TCL quoting rul
7b10: 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es..*/.static vo
7b20: 69 64 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69  id output_c_stri
7b30: 6e 67 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f  ng(FILE *out, co
7b40: 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20  nst char *z){.  
7b50: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 63 3b 0a  unsigned int c;.
7b60: 20 20 66 70 75 74 63 28 27 22 27 2c 20 6f 75 74    fputc('"', out
7b70: 29 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 20 3d  );.  while( (c =
7b80: 20 2a 28 7a 2b 2b 29 29 21 3d 30 20 29 7b 0a 20   *(z++))!=0 ){. 
7b90: 20 20 20 69 66 28 20 63 3d 3d 27 5c 5c 27 20 29     if( c=='\\' )
7ba0: 7b 0a 20 20 20 20 20 20 66 70 75 74 63 28 63 2c  {.      fputc(c,
7bb0: 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 70 75   out);.      fpu
7bc0: 74 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20 20 20  tc(c, out);.    
7bd0: 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 22 27  }else if( c=='"'
7be0: 20 29 7b 0a 20 20 20 20 20 20 66 70 75 74 63 28   ){.      fputc(
7bf0: 27 5c 5c 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20  '\\', out);.    
7c00: 20 20 66 70 75 74 63 28 27 22 27 2c 20 6f 75 74    fputc('"', out
7c10: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
7c20: 20 63 3d 3d 27 5c 74 27 20 29 7b 0a 20 20 20 20   c=='\t' ){.    
7c30: 20 20 66 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75    fputc('\\', ou
7c40: 74 29 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28  t);.      fputc(
7c50: 27 74 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d  't', out);.    }
7c60: 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c 6e 27  else if( c=='\n'
7c70: 20 29 7b 0a 20 20 20 20 20 20 66 70 75 74 63 28   ){.      fputc(
7c80: 27 5c 5c 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20  '\\', out);.    
7c90: 20 20 66 70 75 74 63 28 27 6e 27 2c 20 6f 75 74    fputc('n', out
7ca0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
7cb0: 20 63 3d 3d 27 5c 72 27 20 29 7b 0a 20 20 20 20   c=='\r' ){.    
7cc0: 20 20 66 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75    fputc('\\', ou
7cd0: 74 29 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28  t);.      fputc(
7ce0: 27 72 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d  'r', out);.    }
7cf0: 65 6c 73 65 20 69 66 28 20 21 69 73 70 72 69 6e  else if( !isprin
7d00: 74 28 63 26 30 78 66 66 29 20 29 7b 0a 20 20 20  t(c&0xff) ){.   
7d10: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
7d20: 74 2c 20 22 5c 5c 25 30 33 6f 22 2c 20 63 26 30  t, "\\%03o", c&0
7d30: 78 66 66 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  xff);.    }else{
7d40: 0a 20 20 20 20 20 20 66 70 75 74 63 28 63 2c 20  .      fputc(c, 
7d50: 6f 75 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  out);.    }.  }.
7d60: 20 20 66 70 75 74 63 28 27 22 27 2c 20 6f 75 74    fputc('"', out
7d70: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70  );.}../*.** Outp
7d80: 75 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  ut the given str
7d90: 69 6e 67 20 77 69 74 68 20 63 68 61 72 61 63 74  ing with charact
7da0: 65 72 73 20 74 68 61 74 20 61 72 65 20 73 70 65  ers that are spe
7db0: 63 69 61 6c 20 74 6f 0a 2a 2a 20 48 54 4d 4c 20  cial to.** HTML 
7dc0: 65 73 63 61 70 65 64 2e 0a 2a 2f 0a 73 74 61 74  escaped..*/.stat
7dd0: 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 68  ic void output_h
7de0: 74 6d 6c 5f 73 74 72 69 6e 67 28 46 49 4c 45 20  tml_string(FILE 
7df0: 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  *out, const char
7e00: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
7e10: 20 69 66 28 20 7a 3d 3d 30 20 29 20 7a 20 3d 20   if( z==0 ) z = 
7e20: 22 22 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20  "";.  while( *z 
7e30: 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  ){.    for(i=0; 
7e40: 20 20 7a 5b 69 5d 0a 20 20 20 20 20 20 20 20 20    z[i].         
7e50: 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 3c 27 0a     && z[i]!='<'.
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 7a              && z
7e70: 5b 69 5d 21 3d 27 26 27 0a 20 20 20 20 20 20 20  [i]!='&'.       
7e80: 20 20 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 3e       && z[i]!='>
7e90: 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  '.            &&
7ea0: 20 7a 5b 69 5d 21 3d 27 5c 22 27 0a 20 20 20 20   z[i]!='\"'.    
7eb0: 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69 5d 21          && z[i]!
7ec0: 3d 27 5c 27 27 3b 0a 20 20 20 20 20 20 20 20 69  ='\'';.        i
7ed0: 2b 2b 29 7b 7d 0a 20 20 20 20 69 66 28 20 69 3e  ++){}.    if( i>
7ee0: 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  0 ){.      utf8_
7ef0: 70 72 69 6e 74 66 28 6f 75 74 2c 22 25 2e 2a 73  printf(out,"%.*s
7f00: 22 2c 69 2c 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  ",i,z);.    }.  
7f10: 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 3c 27 20    if( z[i]=='<' 
7f20: 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
7f30: 6e 74 66 28 6f 75 74 2c 22 26 6c 74 3b 22 29 3b  ntf(out,"&lt;");
7f40: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  .    }else if( z
7f50: 5b 69 5d 3d 3d 27 26 27 20 29 7b 0a 20 20 20 20  [i]=='&' ){.    
7f60: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
7f70: 2c 22 26 61 6d 70 3b 22 29 3b 0a 20 20 20 20 7d  ,"&amp;");.    }
7f80: 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27  else if( z[i]=='
7f90: 3e 27 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  >' ){.      raw_
7fa0: 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 67 74 3b  printf(out,"&gt;
7fb0: 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ");.    }else if
7fc0: 28 20 7a 5b 69 5d 3d 3d 27 5c 22 27 20 29 7b 0a  ( z[i]=='\"' ){.
7fd0: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
7fe0: 28 6f 75 74 2c 22 26 71 75 6f 74 3b 22 29 3b 0a  (out,"&quot;");.
7ff0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b      }else if( z[
8000: 69 5d 3d 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20  i]=='\'' ){.    
8010: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
8020: 2c 22 26 23 33 39 3b 22 29 3b 0a 20 20 20 20 7d  ,"&#39;");.    }
8030: 65 6c 73 65 7b 0a 20 20 20 20 20 20 62 72 65 61  else{.      brea
8040: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 20 2b  k;.    }.    z +
8050: 3d 20 69 20 2b 20 31 3b 0a 20 20 7d 0a 7d 0a 0a  = i + 1;.  }.}..
8060: 2f 2a 0a 2a 2a 20 49 66 20 61 20 66 69 65 6c 64  /*.** If a field
8070: 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 63 68   contains any ch
8080: 61 72 61 63 74 65 72 20 69 64 65 6e 74 69 66 69  aracter identifi
8090: 65 64 20 62 79 20 61 20 31 20 69 6e 20 74 68 65  ed by a 1 in the
80a0: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 61 72   following.** ar
80b0: 72 61 79 2c 20 74 68 65 6e 20 74 68 65 20 73 74  ray, then the st
80c0: 72 69 6e 67 20 6d 75 73 74 20 62 65 20 71 75 6f  ring must be quo
80d0: 74 65 64 20 66 6f 72 20 43 53 56 2e 0a 2a 2f 0a  ted for CSV..*/.
80e0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
80f0: 72 20 6e 65 65 64 43 73 76 51 75 6f 74 65 5b 5d  r needCsvQuote[]
8100: 20 3d 20 7b 0a 20 20 31 2c 20 31 2c 20 31 2c 20   = {.  1, 1, 1, 
8110: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20  1, 1, 1, 1, 1,  
8120: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8130: 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c  1, 1, 1,.  1, 1,
8140: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8150: 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  1,   1, 1, 1, 1,
8160: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31   1, 1, 1, 1,.  1
8170: 2c 20 30 2c 20 31 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 1, 0, 0, 0,
8180: 20 30 2c 20 31 2c 20 20 20 30 2c 20 30 2c 20 30   0, 1,   0, 0, 0
8190: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
81a0: 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  .  0, 0, 0, 0, 0
81b0: 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20  , 0, 0, 0,   0, 
81c0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
81d0: 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c 20  , 0,.  0, 0, 0, 
81e0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20  0, 0, 0, 0, 0,  
81f0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
8200: 30 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c  0, 0, 0,.  0, 0,
8210: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
8220: 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c  0,   0, 0, 0, 0,
8230: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30   0, 0, 0, 0,.  0
8240: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
8250: 20 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30   0, 0,   0, 0, 0
8260: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
8270: 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  .  0, 0, 0, 0, 0
8280: 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20  , 0, 0, 0,   0, 
8290: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
82a0: 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20  , 1,.  1, 1, 1, 
82b0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20  1, 1, 1, 1, 1,  
82c0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
82d0: 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c  1, 1, 1,.  1, 1,
82e0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
82f0: 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  1,   1, 1, 1, 1,
8300: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31   1, 1, 1, 1,.  1
8310: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
8320: 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31   1, 1,   1, 1, 1
8330: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
8340: 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  .  1, 1, 1, 1, 1
8350: 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20  , 1, 1, 1,   1, 
8360: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8370: 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20  , 1,.  1, 1, 1, 
8380: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20  1, 1, 1, 1, 1,  
8390: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
83a0: 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c  1, 1, 1,.  1, 1,
83b0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
83c0: 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  1,   1, 1, 1, 1,
83d0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31   1, 1, 1, 1,.  1
83e0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
83f0: 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31   1, 1,   1, 1, 1
8400: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
8410: 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  .  1, 1, 1, 1, 1
8420: 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20  , 1, 1, 1,   1, 
8430: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8440: 2c 20 31 2c 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4f  , 1,.};../*.** O
8450: 75 74 70 75 74 20 61 20 73 69 6e 67 6c 65 20 74  utput a single t
8460: 65 72 6d 20 6f 66 20 43 53 56 2e 20 20 41 63 74  erm of CSV.  Act
8470: 75 61 6c 6c 79 2c 20 70 2d 3e 63 6f 6c 53 65 70  ually, p->colSep
8480: 61 72 61 74 6f 72 20 69 73 20 75 73 65 64 20 66  arator is used f
8490: 6f 72 0a 2a 2a 20 74 68 65 20 73 65 70 61 72 61  or.** the separa
84a0: 74 6f 72 2c 20 77 68 69 63 68 20 6d 61 79 20 6f  tor, which may o
84b0: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 20 63  r may not be a c
84c0: 6f 6d 6d 61 2e 20 20 70 2d 3e 6e 75 6c 6c 56 61  omma.  p->nullVa
84d0: 6c 75 65 20 69 73 0a 2a 2a 20 74 68 65 20 6e 75  lue is.** the nu
84e0: 6c 6c 20 76 61 6c 75 65 2e 20 20 53 74 72 69 6e  ll value.  Strin
84f0: 67 73 20 61 72 65 20 71 75 6f 74 65 64 20 69 66  gs are quoted if
8500: 20 6e 65 63 65 73 73 61 72 79 2e 20 20 54 68 65   necessary.  The
8510: 20 73 65 70 61 72 61 74 6f 72 0a 2a 2a 20 69 73   separator.** is
8520: 20 6f 6e 6c 79 20 69 73 73 75 65 64 20 69 66 20   only issued if 
8530: 62 53 65 70 20 69 73 20 74 72 75 65 2e 0a 2a 2f  bSep is true..*/
8540: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74  .static void out
8550: 70 75 74 5f 63 73 76 28 53 68 65 6c 6c 53 74 61  put_csv(ShellSta
8560: 74 65 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61  te *p, const cha
8570: 72 20 2a 7a 2c 20 69 6e 74 20 62 53 65 70 29 7b  r *z, int bSep){
8580: 0a 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20 70  .  FILE *out = p
8590: 2d 3e 6f 75 74 3b 0a 20 20 69 66 28 20 7a 3d 3d  ->out;.  if( z==
85a0: 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  0 ){.    utf8_pr
85b0: 69 6e 74 66 28 6f 75 74 2c 22 25 73 22 2c 70 2d  intf(out,"%s",p-
85c0: 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 7d  >nullValue);.  }
85d0: 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20 69 3b  else{.    int i;
85e0: 0a 20 20 20 20 69 6e 74 20 6e 53 65 70 20 3d 20  .    int nSep = 
85f0: 73 74 72 6c 65 6e 33 30 28 70 2d 3e 63 6f 6c 53  strlen30(p->colS
8600: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 66  eparator);.    f
8610: 6f 72 28 69 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b  or(i=0; z[i]; i+
8620: 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 65  +){.      if( ne
8630: 65 64 43 73 76 51 75 6f 74 65 5b 28 28 75 6e 73  edCsvQuote[((uns
8640: 69 67 6e 65 64 20 63 68 61 72 2a 29 7a 29 5b 69  igned char*)z)[i
8650: 5d 5d 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 28  ]].         || (
8660: 7a 5b 69 5d 3d 3d 70 2d 3e 63 6f 6c 53 65 70 61  z[i]==p->colSepa
8670: 72 61 74 6f 72 5b 30 5d 20 26 26 0a 20 20 20 20  rator[0] &&.    
8680: 20 20 20 20 20 20 20 20 20 28 6e 53 65 70 3d 3d           (nSep==
8690: 31 20 7c 7c 20 6d 65 6d 63 6d 70 28 7a 2c 20 70  1 || memcmp(z, p
86a0: 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 20  ->colSeparator, 
86b0: 6e 53 65 70 29 3d 3d 30 29 29 20 29 7b 0a 20 20  nSep)==0)) ){.  
86c0: 20 20 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20        i = 0;.   
86d0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
86e0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
86f0: 28 20 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ( i==0 ){.      
8700: 70 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a  putc('"', out);.
8710: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a        for(i=0; z
8720: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  [i]; i++){.     
8730: 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 22 27     if( z[i]=='"'
8740: 20 29 20 70 75 74 63 28 27 22 27 2c 20 6f 75 74   ) putc('"', out
8750: 29 3b 0a 20 20 20 20 20 20 20 20 70 75 74 63 28  );.        putc(
8760: 7a 5b 69 5d 2c 20 6f 75 74 29 3b 0a 20 20 20 20  z[i], out);.    
8770: 20 20 7d 0a 20 20 20 20 20 20 70 75 74 63 28 27    }.      putc('
8780: 22 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65  "', out);.    }e
8790: 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  lse{.      utf8_
87a0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22  printf(out, "%s"
87b0: 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , z);.    }.  }.
87c0: 20 20 69 66 28 20 62 53 65 70 20 29 7b 0a 20 20    if( bSep ){.  
87d0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
87e0: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63  >out, "%s", p->c
87f0: 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  olSeparator);.  
8800: 7d 0a 7d 0a 0a 23 69 66 64 65 66 20 53 49 47 49  }.}..#ifdef SIGI
8810: 4e 54 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  NT./*.** This ro
8820: 75 74 69 6e 65 20 72 75 6e 73 20 77 68 65 6e 20  utine runs when 
8830: 74 68 65 20 75 73 65 72 20 70 72 65 73 73 65 73  the user presses
8840: 20 43 74 72 6c 2d 43 0a 2a 2f 0a 73 74 61 74 69   Ctrl-C.*/.stati
8850: 63 20 76 6f 69 64 20 69 6e 74 65 72 72 75 70 74  c void interrupt
8860: 5f 68 61 6e 64 6c 65 72 28 69 6e 74 20 4e 6f 74  _handler(int Not
8870: 55 73 65 64 29 7b 0a 20 20 55 4e 55 53 45 44 5f  Used){.  UNUSED_
8880: 50 41 52 41 4d 45 54 45 52 28 4e 6f 74 55 73 65  PARAMETER(NotUse
8890: 64 29 3b 0a 20 20 73 65 65 6e 49 6e 74 65 72 72  d);.  seenInterr
88a0: 75 70 74 2b 2b 3b 0a 20 20 69 66 28 20 73 65 65  upt++;.  if( see
88b0: 6e 49 6e 74 65 72 72 75 70 74 3e 32 20 29 20 65  nInterrupt>2 ) e
88c0: 78 69 74 28 31 29 3b 0a 20 20 69 66 28 20 67 6c  xit(1);.  if( gl
88d0: 6f 62 61 6c 44 62 20 29 20 73 71 6c 69 74 65 33  obalDb ) sqlite3
88e0: 5f 69 6e 74 65 72 72 75 70 74 28 67 6c 6f 62 61  _interrupt(globa
88f0: 6c 44 62 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  lDb);.}.#endif..
8900: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
8910: 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
8920: 4e 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 65  N./*.** When the
8930: 20 22 2e 61 75 74 68 20 4f 4e 22 20 69 73 20 73   ".auth ON" is s
8940: 65 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  et, the followin
8950: 67 20 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6c  g authorizer cal
8960: 6c 62 61 63 6b 20 69 73 0a 2a 2a 20 69 6e 76 6f  lback is.** invo
8970: 6b 65 64 2e 20 20 49 74 20 61 6c 77 61 79 73 20  ked.  It always 
8980: 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
8990: 4b 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  K..*/.static int
89a0: 20 73 68 65 6c 6c 41 75 74 68 28 0a 20 20 76 6f   shellAuth(.  vo
89b0: 69 64 20 2a 70 43 6c 69 65 6e 74 44 61 74 61 2c  id *pClientData,
89c0: 0a 20 20 69 6e 74 20 6f 70 2c 0a 20 20 63 6f 6e  .  int op,.  con
89d0: 73 74 20 63 68 61 72 20 2a 7a 41 31 2c 0a 20 20  st char *zA1,.  
89e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 32 2c  const char *zA2,
89f0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
8a00: 41 33 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  A3,.  const char
8a10: 20 2a 7a 41 34 0a 29 7b 0a 20 20 53 68 65 6c 6c   *zA4.){.  Shell
8a20: 53 74 61 74 65 20 2a 70 20 3d 20 28 53 68 65 6c  State *p = (Shel
8a30: 6c 53 74 61 74 65 2a 29 70 43 6c 69 65 6e 74 44  lState*)pClientD
8a40: 61 74 61 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  ata;.  static co
8a50: 6e 73 74 20 63 68 61 72 20 2a 61 7a 41 63 74 69  nst char *azActi
8a60: 6f 6e 5b 5d 20 3d 20 7b 20 30 2c 0a 20 20 20 20  on[] = { 0,.    
8a70: 20 22 43 52 45 41 54 45 5f 49 4e 44 45 58 22 2c   "CREATE_INDEX",
8a80: 20 20 20 20 20 20 20 20 20 22 43 52 45 41 54 45           "CREATE
8a90: 5f 54 41 42 4c 45 22 2c 20 20 20 20 20 20 20 20  _TABLE",        
8aa0: 20 22 43 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e   "CREATE_TEMP_IN
8ab0: 44 45 58 22 2c 0a 20 20 20 20 20 22 43 52 45 41  DEX",.     "CREA
8ac0: 54 45 5f 54 45 4d 50 5f 54 41 42 4c 45 22 2c 20  TE_TEMP_TABLE", 
8ad0: 20 20 20 22 43 52 45 41 54 45 5f 54 45 4d 50 5f     "CREATE_TEMP_
8ae0: 54 52 49 47 47 45 52 22 2c 20 20 22 43 52 45 41  TRIGGER",  "CREA
8af0: 54 45 5f 54 45 4d 50 5f 56 49 45 57 22 2c 0a 20  TE_TEMP_VIEW",. 
8b00: 20 20 20 20 22 43 52 45 41 54 45 5f 54 52 49 47      "CREATE_TRIG
8b10: 47 45 52 22 2c 20 20 20 20 20 20 20 22 43 52 45  GER",       "CRE
8b20: 41 54 45 5f 56 49 45 57 22 2c 20 20 20 20 20 20  ATE_VIEW",      
8b30: 20 20 20 20 22 44 45 4c 45 54 45 22 2c 0a 20 20      "DELETE",.  
8b40: 20 20 20 22 44 52 4f 50 5f 49 4e 44 45 58 22 2c     "DROP_INDEX",
8b50: 20 20 20 20 20 20 20 20 20 20 20 22 44 52 4f 50             "DROP
8b60: 5f 54 41 42 4c 45 22 2c 20 20 20 20 20 20 20 20  _TABLE",        
8b70: 20 20 20 22 44 52 4f 50 5f 54 45 4d 50 5f 49 4e     "DROP_TEMP_IN
8b80: 44 45 58 22 2c 0a 20 20 20 20 20 22 44 52 4f 50  DEX",.     "DROP
8b90: 5f 54 45 4d 50 5f 54 41 42 4c 45 22 2c 20 20 20  _TEMP_TABLE",   
8ba0: 20 20 20 22 44 52 4f 50 5f 54 45 4d 50 5f 54 52     "DROP_TEMP_TR
8bb0: 49 47 47 45 52 22 2c 20 20 20 20 22 44 52 4f 50  IGGER",    "DROP
8bc0: 5f 54 45 4d 50 5f 56 49 45 57 22 2c 0a 20 20 20  _TEMP_VIEW",.   
8bd0: 20 20 22 44 52 4f 50 5f 54 52 49 47 47 45 52 22    "DROP_TRIGGER"
8be0: 2c 20 20 20 20 20 20 20 20 20 22 44 52 4f 50 5f  ,         "DROP_
8bf0: 56 49 45 57 22 2c 20 20 20 20 20 20 20 20 20 20  VIEW",          
8c00: 20 20 22 49 4e 53 45 52 54 22 2c 0a 20 20 20 20    "INSERT",.    
8c10: 20 22 50 52 41 47 4d 41 22 2c 20 20 20 20 20 20   "PRAGMA",      
8c20: 20 20 20 20 20 20 20 20 20 22 52 45 41 44 22 2c           "READ",
8c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c40: 20 22 53 45 4c 45 43 54 22 2c 0a 20 20 20 20 20   "SELECT",.     
8c50: 22 54 52 41 4e 53 41 43 54 49 4f 4e 22 2c 20 20  "TRANSACTION",  
8c60: 20 20 20 20 20 20 20 20 22 55 50 44 41 54 45 22          "UPDATE"
8c70: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
8c80: 22 41 54 54 41 43 48 22 2c 0a 20 20 20 20 20 22  "ATTACH",.     "
8c90: 44 45 54 41 43 48 22 2c 20 20 20 20 20 20 20 20  DETACH",        
8ca0: 20 20 20 20 20 20 20 22 41 4c 54 45 52 5f 54 41         "ALTER_TA
8cb0: 42 4c 45 22 2c 20 20 20 20 20 20 20 20 20 20 22  BLE",          "
8cc0: 52 45 49 4e 44 45 58 22 2c 0a 20 20 20 20 20 22  REINDEX",.     "
8cd0: 41 4e 41 4c 59 5a 45 22 2c 20 20 20 20 20 20 20  ANALYZE",       
8ce0: 20 20 20 20 20 20 20 22 43 52 45 41 54 45 5f 56         "CREATE_V
8cf0: 54 41 42 4c 45 22 2c 20 20 20 20 20 20 20 20 22  TABLE",        "
8d00: 44 52 4f 50 5f 56 54 41 42 4c 45 22 2c 0a 20 20  DROP_VTABLE",.  
8d10: 20 20 20 22 46 55 4e 43 54 49 4f 4e 22 2c 20 20     "FUNCTION",  
8d20: 20 20 20 20 20 20 20 20 20 20 20 22 53 41 56 45             "SAVE
8d30: 50 4f 49 4e 54 22 2c 20 20 20 20 20 20 20 20 20  POINT",         
8d40: 20 20 20 22 52 45 43 55 52 53 49 56 45 22 0a 20     "RECURSIVE". 
8d50: 20 7d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63   };.  int i;.  c
8d60: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 5b 34 5d  onst char *az[4]
8d70: 3b 0a 20 20 61 7a 5b 30 5d 20 3d 20 7a 41 31 3b  ;.  az[0] = zA1;
8d80: 0a 20 20 61 7a 5b 31 5d 20 3d 20 7a 41 32 3b 0a  .  az[1] = zA2;.
8d90: 20 20 61 7a 5b 32 5d 20 3d 20 7a 41 33 3b 0a 20    az[2] = zA3;. 
8da0: 20 61 7a 5b 33 5d 20 3d 20 7a 41 34 3b 0a 20 20   az[3] = zA4;.  
8db0: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
8dc0: 75 74 2c 20 22 61 75 74 68 6f 72 69 7a 65 72 3a  ut, "authorizer:
8dd0: 20 25 73 22 2c 20 61 7a 41 63 74 69 6f 6e 5b 6f   %s", azAction[o
8de0: 70 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p]);.  for(i=0; 
8df0: 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 72  i<4; i++){.    r
8e00: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
8e10: 2c 20 22 20 22 29 3b 0a 20 20 20 20 69 66 28 20  , " ");.    if( 
8e20: 61 7a 5b 69 5d 20 29 7b 0a 20 20 20 20 20 20 6f  az[i] ){.      o
8e30: 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70  utput_c_string(p
8e40: 2d 3e 6f 75 74 2c 20 61 7a 5b 69 5d 29 3b 0a 20  ->out, az[i]);. 
8e50: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8e60: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
8e70: 74 2c 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20  t, "NULL");.    
8e80: 7d 0a 20 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e  }.  }.  raw_prin
8e90: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29  tf(p->out, "\n")
8ea0: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
8eb0: 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  E_OK;.}.#endif..
8ec0: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 61 20 73 63  /*.** Print a sc
8ed0: 68 65 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20  hema statement. 
8ee0: 20 50 61 72 74 20 6f 66 20 4d 4f 44 45 5f 53 65   Part of MODE_Se
8ef0: 6d 69 20 61 6e 64 20 4d 4f 44 45 5f 50 72 65 74  mi and MODE_Pret
8f00: 74 79 20 6f 75 74 70 75 74 2e 0a 2a 2a 0a 2a 2a  ty output..**.**
8f10: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f   This routine co
8f20: 6e 76 65 72 74 73 20 73 6f 6d 65 20 43 52 45 41  nverts some CREA
8f30: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
8f40: 6e 74 73 20 66 6f 72 20 73 68 61 64 6f 77 20 74  nts for shadow t
8f50: 61 62 6c 65 73 0a 2a 2a 20 69 6e 20 46 54 53 33  ables.** in FTS3
8f60: 2f 34 2f 35 20 69 6e 74 6f 20 43 52 45 41 54 45  /4/5 into CREATE
8f70: 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58   TABLE IF NOT EX
8f80: 49 53 54 53 20 73 74 61 74 65 6d 65 6e 74 73 2e  ISTS statements.
8f90: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
8fa0: 70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28  printSchemaLine(
8fb0: 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74  FILE *out, const
8fc0: 20 63 68 61 72 20 2a 7a 2c 20 63 6f 6e 73 74 20   char *z, const 
8fd0: 63 68 61 72 20 2a 7a 54 61 69 6c 29 7b 0a 20 20  char *zTail){.  
8fe0: 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67  if( sqlite3_strg
8ff0: 6c 6f 62 28 22 43 52 45 41 54 45 20 54 41 42 4c  lob("CREATE TABL
9000: 45 20 5b 27 5c 22 5d 2a 22 2c 20 7a 29 3d 3d 30  E ['\"]*", z)==0
9010: 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
9020: 6e 74 66 28 6f 75 74 2c 20 22 43 52 45 41 54 45  ntf(out, "CREATE
9030: 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58   TABLE IF NOT EX
9040: 49 53 54 53 20 25 73 25 73 22 2c 20 7a 2b 31 33  ISTS %s%s", z+13
9050: 2c 20 7a 54 61 69 6c 29 3b 0a 20 20 7d 65 6c 73  , zTail);.  }els
9060: 65 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  e{.    utf8_prin
9070: 74 66 28 6f 75 74 2c 20 22 25 73 25 73 22 2c 20  tf(out, "%s%s", 
9080: 7a 2c 20 7a 54 61 69 6c 29 3b 0a 20 20 7d 0a 7d  z, zTail);.  }.}
9090: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 72 69  .static void pri
90a0: 6e 74 53 63 68 65 6d 61 4c 69 6e 65 4e 28 46 49  ntSchemaLineN(FI
90b0: 4c 45 20 2a 6f 75 74 2c 20 63 68 61 72 20 2a 7a  LE *out, char *z
90c0: 2c 20 69 6e 74 20 6e 2c 20 63 6f 6e 73 74 20 63  , int n, const c
90d0: 68 61 72 20 2a 7a 54 61 69 6c 29 7b 0a 20 20 63  har *zTail){.  c
90e0: 68 61 72 20 63 20 3d 20 7a 5b 6e 5d 3b 0a 20 20  har c = z[n];.  
90f0: 7a 5b 6e 5d 20 3d 20 30 3b 0a 20 20 70 72 69 6e  z[n] = 0;.  prin
9100: 74 53 63 68 65 6d 61 4c 69 6e 65 28 6f 75 74 2c  tSchemaLine(out,
9110: 20 7a 2c 20 7a 54 61 69 6c 29 3b 0a 20 20 7a 5b   z, zTail);.  z[
9120: 6e 5d 20 3d 20 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  n] = c;.}../*.**
9130: 20 54 68 69 73 20 69 73 20 74 68 65 20 63 61 6c   This is the cal
9140: 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 74 68  lback routine th
9150: 61 74 20 74 68 65 20 73 68 65 6c 6c 0a 2a 2a 20  at the shell.** 
9160: 69 6e 76 6f 6b 65 73 20 66 6f 72 20 65 61 63 68  invokes for each
9170: 20 72 6f 77 20 6f 66 20 61 20 71 75 65 72 79 20   row of a query 
9180: 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  result..*/.stati
9190: 63 20 69 6e 74 20 73 68 65 6c 6c 5f 63 61 6c 6c  c int shell_call
91a0: 62 61 63 6b 28 0a 20 20 76 6f 69 64 20 2a 70 41  back(.  void *pA
91b0: 72 67 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c 20  rg,.  int nArg, 
91c0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
91d0: 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d   of result colum
91e0: 6e 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ns */.  char **a
91f0: 7a 41 72 67 2c 20 20 20 20 2f 2a 20 54 65 78 74  zArg,    /* Text
9200: 20 6f 66 20 65 61 63 68 20 72 65 73 75 6c 74 20   of each result 
9210: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72  column */.  char
9220: 20 2a 2a 61 7a 43 6f 6c 2c 20 20 20 20 2f 2a 20   **azCol,    /* 
9230: 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  Column names */.
9240: 20 20 69 6e 74 20 2a 61 69 54 79 70 65 20 20 20    int *aiType   
9250: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 74 79 70     /* Column typ
9260: 65 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69  es */.){.  int i
9270: 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  ;.  ShellState *
9280: 70 20 3d 20 28 53 68 65 6c 6c 53 74 61 74 65 2a  p = (ShellState*
9290: 29 70 41 72 67 3b 0a 0a 20 20 73 77 69 74 63 68  )pArg;..  switch
92a0: 28 20 70 2d 3e 63 4d 6f 64 65 20 29 7b 0a 20 20  ( p->cMode ){.  
92b0: 20 20 63 61 73 65 20 4d 4f 44 45 5f 4c 69 6e 65    case MODE_Line
92c0: 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 77 20  : {.      int w 
92d0: 3d 20 35 3b 0a 20 20 20 20 20 20 69 66 28 20 61  = 5;.      if( a
92e0: 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b  zArg==0 ) break;
92f0: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
9300: 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
9310: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
9320: 73 74 72 6c 65 6e 33 30 28 61 7a 43 6f 6c 5b 69  strlen30(azCol[i
9330: 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22  ] ? azCol[i] : "
9340: 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ");.        if( 
9350: 6c 65 6e 3e 77 20 29 20 77 20 3d 20 6c 65 6e 3b  len>w ) w = len;
9360: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
9370: 66 28 20 70 2d 3e 63 6e 74 2b 2b 3e 30 20 29 20  f( p->cnt++>0 ) 
9380: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
9390: 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77  ut, "%s", p->row
93a0: 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
93b0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
93c0: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
93d0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
93e0: 6f 75 74 2c 22 25 2a 73 20 3d 20 25 73 25 73 22  out,"%*s = %s%s"
93f0: 2c 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 0a 20  , w, azCol[i],. 
9400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
9410: 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b  zArg[i] ? azArg[
9420: 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75  i] : p->nullValu
9430: 65 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  e, p->rowSeparat
9440: 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
9450: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
9460: 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 45 78      case MODE_Ex
9470: 70 6c 61 69 6e 3a 0a 20 20 20 20 63 61 73 65 20  plain:.    case 
9480: 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  MODE_Column: {. 
9490: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
94a0: 74 20 69 6e 74 20 61 45 78 70 6c 61 69 6e 57 69  t int aExplainWi
94b0: 64 74 68 73 5b 5d 20 3d 20 7b 34 2c 20 31 33 2c  dths[] = {4, 13,
94c0: 20 34 2c 20 34 2c 20 34 2c 20 31 33 2c 20 32 2c   4, 4, 4, 13, 2,
94d0: 20 31 33 7d 3b 0a 20 20 20 20 20 20 63 6f 6e 73   13};.      cons
94e0: 74 20 69 6e 74 20 2a 63 6f 6c 57 69 64 74 68 3b  t int *colWidth;
94f0: 0a 20 20 20 20 20 20 69 6e 74 20 73 68 6f 77 48  .      int showH
9500: 64 72 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  dr;.      char *
9510: 72 6f 77 53 65 70 3b 0a 20 20 20 20 20 20 69 66  rowSep;.      if
9520: 28 20 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45  ( p->cMode==MODE
9530: 5f 43 6f 6c 75 6d 6e 20 29 7b 0a 20 20 20 20 20  _Column ){.     
9540: 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20 70 2d     colWidth = p-
9550: 3e 63 6f 6c 57 69 64 74 68 3b 0a 20 20 20 20 20  >colWidth;.     
9560: 20 20 20 73 68 6f 77 48 64 72 20 3d 20 70 2d 3e     showHdr = p->
9570: 73 68 6f 77 48 65 61 64 65 72 3b 0a 20 20 20 20  showHeader;.    
9580: 20 20 20 20 72 6f 77 53 65 70 20 3d 20 70 2d 3e      rowSep = p->
9590: 72 6f 77 53 65 70 61 72 61 74 6f 72 3b 0a 20 20  rowSeparator;.  
95a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
95b0: 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20 61 45     colWidth = aE
95c0: 78 70 6c 61 69 6e 57 69 64 74 68 73 3b 0a 20 20  xplainWidths;.  
95d0: 20 20 20 20 20 20 73 68 6f 77 48 64 72 20 3d 20        showHdr = 
95e0: 31 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 53 65  1;.        rowSe
95f0: 70 20 3d 20 53 45 50 5f 52 6f 77 3b 0a 20 20 20  p = SEP_Row;.   
9600: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
9610: 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 29 7b 0a 20 20  ->cnt++==0 ){.  
9620: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
9630: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
9640: 20 20 20 20 20 20 20 69 6e 74 20 77 2c 20 6e 3b         int w, n;
9650: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
9660: 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 63 6f  <ArraySize(p->co
9670: 6c 57 69 64 74 68 29 20 29 7b 0a 20 20 20 20 20  lWidth) ){.     
9680: 20 20 20 20 20 20 20 77 20 3d 20 63 6f 6c 57 69         w = colWi
9690: 64 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20  dth[i];.        
96a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
96b0: 20 20 20 20 20 77 20 3d 20 30 3b 0a 20 20 20 20       w = 0;.    
96c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
96d0: 20 20 69 66 28 20 77 3d 3d 30 20 29 7b 0a 20 20    if( w==0 ){.  
96e0: 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 73 74            w = st
96f0: 72 6c 65 6e 43 68 61 72 28 61 7a 43 6f 6c 5b 69  rlenChar(azCol[i
9700: 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22  ] ? azCol[i] : "
9710: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
9720: 69 66 28 20 77 3c 31 30 20 29 20 77 20 3d 20 31  if( w<10 ) w = 1
9730: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  0;.            n
9740: 20 3d 20 73 74 72 6c 65 6e 43 68 61 72 28 61 7a   = strlenChar(az
9750: 41 72 67 20 26 26 20 61 7a 41 72 67 5b 69 5d 20  Arg && azArg[i] 
9760: 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e  ? azArg[i] : p->
9770: 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20  nullValue);.    
9780: 20 20 20 20 20 20 20 20 69 66 28 20 77 3c 6e 20          if( w<n 
9790: 29 20 77 20 3d 20 6e 3b 0a 20 20 20 20 20 20 20  ) w = n;.       
97a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69     }.          i
97b0: 66 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70  f( i<ArraySize(p
97c0: 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20 29  ->actualWidth) )
97d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 2d  {.            p-
97e0: 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69 5d 20  >actualWidth[i] 
97f0: 3d 20 77 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = w;.          }
9800: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  .          if( s
9810: 68 6f 77 48 64 72 20 29 7b 0a 20 20 20 20 20 20  howHdr ){.      
9820: 20 20 20 20 20 20 75 74 66 38 5f 77 69 64 74 68        utf8_width
9830: 5f 70 72 69 6e 74 28 70 2d 3e 6f 75 74 2c 20 77  _print(p->out, w
9840: 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20  , azCol[i]);.   
9850: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
9860: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
9870: 22 2c 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 72  ", i==nArg-1 ? r
9880: 6f 77 53 65 70 20 3a 20 22 20 20 22 29 3b 0a 20  owSep : "  ");. 
9890: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
98a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
98b0: 20 73 68 6f 77 48 64 72 20 29 7b 0a 20 20 20 20   showHdr ){.    
98c0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
98d0: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
98e0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 77 3b 0a           int w;.
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
9900: 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61  i<ArraySize(p->a
9910: 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b 0a 20  ctualWidth) ){. 
9920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 20                w 
9930: 3d 20 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68  = p->actualWidth
9940: 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  [i];.           
9950: 20 20 20 20 69 66 28 20 77 3c 30 20 29 20 77 20      if( w<0 ) w 
9960: 3d 20 2d 77 3b 0a 20 20 20 20 20 20 20 20 20 20  = -w;.          
9970: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
9980: 20 20 20 20 20 20 20 20 77 20 3d 20 31 30 3b 0a          w = 10;.
9990: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
99a0: 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
99b0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 2d  rintf(p->out,"%-
99c0: 2a 2e 2a 73 25 73 22 2c 77 2c 77 2c 0a 20 20 20  *.*s%s",w,w,.   
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  "---------------
99f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20  -----------".   
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a30: 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  "---------------
9a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 2c 0a 20 20  -----------",.  
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a80: 20 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 72 6f    i==nArg-1 ? ro
9a90: 77 53 65 70 20 3a 20 22 20 20 22 29 3b 0a 20 20  wSep : "  ");.  
9aa0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9ab0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
9ac0: 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29    if( azArg==0 )
9ad0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f   break;.      fo
9ae0: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
9af0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  ++){.        int
9b00: 20 77 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   w;.        if( 
9b10: 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61  i<ArraySize(p->a
9b20: 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b 0a 20  ctualWidth) ){. 
9b30: 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 70 2d            w = p-
9b40: 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69 5d 3b  >actualWidth[i];
9b50: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
9b60: 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 31             w = 1
9b70: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
9b80: 20 20 20 20 20 69 66 28 20 70 2d 3e 63 4d 6f 64       if( p->cMod
9b90: 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20  e==MODE_Explain 
9ba0: 26 26 20 61 7a 41 72 67 5b 69 5d 20 26 26 20 73  && azArg[i] && s
9bb0: 74 72 6c 65 6e 43 68 61 72 28 61 7a 41 72 67 5b  trlenChar(azArg[
9bc0: 69 5d 29 3e 77 20 29 7b 0a 20 20 20 20 20 20 20  i])>w ){.       
9bd0: 20 20 20 77 20 3d 20 73 74 72 6c 65 6e 43 68 61     w = strlenCha
9be0: 72 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  r(azArg[i]);.   
9bf0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
9c00: 66 28 20 69 3d 3d 31 20 26 26 20 70 2d 3e 61 69  f( i==1 && p->ai
9c10: 49 6e 64 65 6e 74 20 26 26 20 70 2d 3e 70 53 74  Indent && p->pSt
9c20: 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  mt ){.          
9c30: 69 66 28 20 70 2d 3e 69 49 6e 64 65 6e 74 3c 70  if( p->iIndent<p
9c40: 2d 3e 6e 49 6e 64 65 6e 74 20 29 7b 0a 20 20 20  ->nIndent ){.   
9c50: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
9c60: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2a  intf(p->out, "%*
9c70: 2e 73 22 2c 20 70 2d 3e 61 69 49 6e 64 65 6e 74  .s", p->aiIndent
9c80: 5b 70 2d 3e 69 49 6e 64 65 6e 74 5d 2c 20 22 22  [p->iIndent], ""
9c90: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
9ca0: 20 20 20 20 20 20 20 20 20 70 2d 3e 69 49 6e 64           p->iInd
9cb0: 65 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  ent++;.        }
9cc0: 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 77 69  .        utf8_wi
9cd0: 64 74 68 5f 70 72 69 6e 74 28 70 2d 3e 6f 75 74  dth_print(p->out
9ce0: 2c 20 77 2c 20 61 7a 41 72 67 5b 69 5d 20 3f 20  , w, azArg[i] ? 
9cf0: 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75  azArg[i] : p->nu
9d00: 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20  llValue);.      
9d10: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
9d20: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 69 3d 3d 6e  >out, "%s", i==n
9d30: 41 72 67 2d 31 20 3f 20 72 6f 77 53 65 70 20 3a  Arg-1 ? rowSep :
9d40: 20 22 20 20 22 29 3b 0a 20 20 20 20 20 20 7d 0a   "  ");.      }.
9d50: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9d60: 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45   }.    case MODE
9d70: 5f 53 65 6d 69 3a 20 7b 20 20 20 2f 2a 20 2e 73  _Semi: {   /* .s
9d80: 63 68 65 6d 61 20 61 6e 64 20 2e 66 75 6c 6c 73  chema and .fulls
9d90: 63 68 65 6d 61 20 6f 75 74 70 75 74 20 2a 2f 0a  chema output */.
9da0: 20 20 20 20 20 20 70 72 69 6e 74 53 63 68 65 6d        printSchem
9db0: 61 4c 69 6e 65 28 70 2d 3e 6f 75 74 2c 20 61 7a  aLine(p->out, az
9dc0: 41 72 67 5b 30 5d 2c 20 22 3b 5c 6e 22 29 3b 0a  Arg[0], ";\n");.
9dd0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9de0: 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45   }.    case MODE
9df0: 5f 50 72 65 74 74 79 3a 20 7b 20 20 2f 2a 20 2e  _Pretty: {  /* .
9e00: 73 63 68 65 6d 61 20 61 6e 64 20 2e 66 75 6c 6c  schema and .full
9e10: 73 63 68 65 6d 61 20 77 69 74 68 20 2d 2d 69 6e  schema with --in
9e20: 64 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 63 68  dent */.      ch
9e30: 61 72 20 2a 7a 3b 0a 20 20 20 20 20 20 69 6e 74  ar *z;.      int
9e40: 20 6a 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 50   j;.      int nP
9e50: 61 72 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  aren = 0;.      
9e60: 63 68 61 72 20 63 45 6e 64 20 3d 20 30 3b 0a 20  char cEnd = 0;. 
9e70: 20 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20       char c;.   
9e80: 20 20 20 69 6e 74 20 6e 4c 69 6e 65 20 3d 20 30     int nLine = 0
9e90: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
9ea0: 6e 41 72 67 3d 3d 31 20 29 3b 0a 20 20 20 20 20  nArg==1 );.     
9eb0: 20 69 66 28 20 61 7a 41 72 67 5b 30 5d 3d 3d 30   if( azArg[0]==0
9ec0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
9ed0: 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 6c  if( sqlite3_strl
9ee0: 69 6b 65 28 22 43 52 45 41 54 45 20 56 49 45 57  ike("CREATE VIEW
9ef0: 25 22 2c 20 61 7a 41 72 67 5b 30 5d 2c 20 30 29  %", azArg[0], 0)
9f00: 3d 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20 73 71  ==0.       || sq
9f10: 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 22 43  lite3_strlike("C
9f20: 52 45 41 54 45 20 54 52 49 47 25 22 2c 20 61 7a  REATE TRIG%", az
9f30: 41 72 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a 20 20  Arg[0], 0)==0.  
9f40: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 75      ){.        u
9f50: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
9f60: 74 2c 20 22 25 73 3b 5c 6e 22 2c 20 61 7a 41 72  t, "%s;\n", azAr
9f70: 67 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 62  g[0]);.        b
9f80: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
9f90: 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f      z = sqlite3_
9fa0: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 61 7a  mprintf("%s", az
9fb0: 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20 20 6a  Arg[0]);.      j
9fc0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 66 6f 72 28   = 0;.      for(
9fd0: 69 3d 30 3b 20 49 73 53 70 61 63 65 28 7a 5b 69  i=0; IsSpace(z[i
9fe0: 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20  ]); i++){}.     
9ff0: 20 66 6f 72 28 3b 20 28 63 20 3d 20 7a 5b 69 5d   for(; (c = z[i]
a000: 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  )!=0; i++){.    
a010: 20 20 20 20 69 66 28 20 49 73 53 70 61 63 65 28      if( IsSpace(
a020: 63 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  c) ){.          
a030: 69 66 28 20 49 73 53 70 61 63 65 28 7a 5b 6a 2d  if( IsSpace(z[j-
a040: 31 5d 29 20 7c 7c 20 7a 5b 6a 2d 31 5d 3d 3d 27  1]) || z[j-1]=='
a050: 28 27 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  (' ) continue;. 
a060: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
a070: 20 28 63 3d 3d 27 28 27 20 7c 7c 20 63 3d 3d 27   (c=='(' || c=='
a080: 29 27 29 20 26 26 20 6a 3e 30 20 26 26 20 49 73  )') && j>0 && Is
a090: 53 70 61 63 65 28 7a 5b 6a 2d 31 5d 29 20 29 7b  Space(z[j-1]) ){
a0a0: 0a 20 20 20 20 20 20 20 20 20 20 6a 2d 2d 3b 0a  .          j--;.
a0b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a0c0: 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 63 3b 0a 20 20    z[j++] = c;.  
a0d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 77 68 69 6c      }.      whil
a0e0: 65 28 20 6a 3e 30 20 26 26 20 49 73 53 70 61 63  e( j>0 && IsSpac
a0f0: 65 28 7a 5b 6a 2d 31 5d 29 20 29 7b 20 6a 2d 2d  e(z[j-1]) ){ j--
a100: 3b 20 7d 0a 20 20 20 20 20 20 7a 5b 6a 5d 20 3d  ; }.      z[j] =
a110: 20 30 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74   0;.      if( st
a120: 72 6c 65 6e 33 30 28 7a 29 3e 3d 37 39 20 29 7b  rlen30(z)>=79 ){
a130: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 6a  .        for(i=j
a140: 3d 30 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d  =0; (c = z[i])!=
a150: 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  0; i++){.       
a160: 20 20 20 69 66 28 20 63 3d 3d 63 45 6e 64 20 29     if( c==cEnd )
a170: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 45  {.            cE
a180: 6e 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  nd = 0;.        
a190: 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
a1a0: 22 27 20 7c 7c 20 63 3d 3d 27 5c 27 27 20 7c 7c  "' || c=='\'' ||
a1b0: 20 63 3d 3d 27 60 27 20 29 7b 0a 20 20 20 20 20   c=='`' ){.     
a1c0: 20 20 20 20 20 20 20 63 45 6e 64 20 3d 20 63 3b         cEnd = c;
a1d0: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
a1e0: 20 69 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20   if( c=='[' ){. 
a1f0: 20 20 20 20 20 20 20 20 20 20 20 63 45 6e 64 20             cEnd 
a200: 3d 20 27 5d 27 3b 0a 20 20 20 20 20 20 20 20 20  = ']';.         
a210: 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 28   }else if( c=='(
a220: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ' ){.           
a230: 20 6e 50 61 72 65 6e 2b 2b 3b 0a 20 20 20 20 20   nParen++;.     
a240: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63       }else if( c
a250: 3d 3d 27 29 27 20 29 7b 0a 20 20 20 20 20 20 20  ==')' ){.       
a260: 20 20 20 20 20 6e 50 61 72 65 6e 2d 2d 3b 0a 20       nParen--;. 
a270: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e             if( n
a280: 4c 69 6e 65 3e 30 20 26 26 20 6e 50 61 72 65 6e  Line>0 && nParen
a290: 3d 3d 30 20 26 26 20 6a 3e 30 20 29 7b 0a 20 20  ==0 && j>0 ){.  
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e              prin
a2b0: 74 53 63 68 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e  tSchemaLineN(p->
a2c0: 6f 75 74 2c 20 7a 2c 20 6a 2c 20 22 5c 6e 22 29  out, z, j, "\n")
a2d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
a2e0: 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  j = 0;.         
a2f0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
a300: 0a 20 20 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b  .          z[j++
a310: 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 20  ] = c;.         
a320: 20 69 66 28 20 6e 50 61 72 65 6e 3d 3d 31 20 26   if( nParen==1 &
a330: 26 20 28 63 3d 3d 27 28 27 20 7c 7c 20 63 3d 3d  & (c=='(' || c==
a340: 27 2c 27 20 7c 7c 20 63 3d 3d 27 5c 6e 27 29 20  ',' || c=='\n') 
a350: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
a360: 66 28 20 63 3d 3d 27 5c 6e 27 20 29 20 6a 2d 2d  f( c=='\n' ) j--
a370: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ;.            pr
a380: 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 4e 28 70  intSchemaLineN(p
a390: 2d 3e 6f 75 74 2c 20 7a 2c 20 6a 2c 20 22 5c 6e  ->out, z, j, "\n
a3a0: 20 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20    ");.          
a3b0: 20 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    j = 0;.       
a3c0: 20 20 20 20 20 6e 4c 69 6e 65 2b 2b 3b 0a 20 20       nLine++;.  
a3d0: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28            while(
a3e0: 20 49 73 53 70 61 63 65 28 7a 5b 69 2b 31 5d 29   IsSpace(z[i+1])
a3f0: 20 29 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20   ){ i++; }.     
a400: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
a410: 0a 20 20 20 20 20 20 20 20 7a 5b 6a 5d 20 3d 20  .        z[j] = 
a420: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  0;.      }.     
a430: 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65   printSchemaLine
a440: 28 70 2d 3e 6f 75 74 2c 20 7a 2c 20 22 3b 5c 6e  (p->out, z, ";\n
a450: 22 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ");.      sqlite
a460: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20  3_free(z);.     
a470: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
a480: 20 20 63 61 73 65 20 4d 4f 44 45 5f 4c 69 73 74    case MODE_List
a490: 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  : {.      if( p-
a4a0: 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e  >cnt++==0 && p->
a4b0: 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20  showHeader ){.  
a4c0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
a4d0: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
a4e0: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
a4f0: 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 25 73 22  tf(p->out,"%s%s"
a500: 2c 61 7a 43 6f 6c 5b 69 5d 2c 0a 20 20 20 20 20  ,azCol[i],.     
a510: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 3d 3d               i==
a520: 6e 41 72 67 2d 31 20 3f 20 70 2d 3e 72 6f 77 53  nArg-1 ? p->rowS
a530: 65 70 61 72 61 74 6f 72 20 3a 20 70 2d 3e 63 6f  eparator : p->co
a540: 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  lSeparator);.   
a550: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
a560: 20 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d       if( azArg==
a570: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
a580: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
a590: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
a5a0: 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b  char *z = azArg[
a5b0: 69 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  i];.        if( 
a5c0: 7a 3d 3d 30 20 29 20 7a 20 3d 20 70 2d 3e 6e 75  z==0 ) z = p->nu
a5d0: 6c 6c 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20  llValue;.       
a5e0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
a5f0: 6f 75 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20  out, "%s", z);. 
a600: 20 20 20 20 20 20 20 69 66 28 20 69 3c 6e 41 72         if( i<nAr
a610: 67 2d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20  g-1 ){.         
a620: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
a630: 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f  out, "%s", p->co
a640: 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  lSeparator);.   
a650: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
a660: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
a670: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
a680: 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
a690: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
a6a0: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
a6b0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
a6c0: 4d 4f 44 45 5f 48 74 6d 6c 3a 20 7b 0a 20 20 20  MODE_Html: {.   
a6d0: 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d     if( p->cnt++=
a6e0: 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61  =0 && p->showHea
a6f0: 64 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 72  der ){.        r
a700: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
a710: 2c 22 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20 20  ,"<TR>");.      
a720: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
a730: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
a740: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
a750: 3e 6f 75 74 2c 22 3c 54 48 3e 22 29 3b 0a 20 20  >out,"<TH>");.  
a760: 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 68          output_h
a770: 74 6d 6c 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75  tml_string(p->ou
a780: 74 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20  t, azCol[i]);.  
a790: 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
a7a0: 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 48 3e  tf(p->out,"</TH>
a7b0: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  \n");.        }.
a7c0: 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
a7d0: 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52 3e  tf(p->out,"</TR>
a7e0: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  \n");.      }.  
a7f0: 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30      if( azArg==0
a800: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
a810: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
a820: 74 2c 22 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20  t,"<TR>");.     
a830: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
a840: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
a850: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
a860: 74 2c 22 3c 54 44 3e 22 29 3b 0a 20 20 20 20 20  t,"<TD>");.     
a870: 20 20 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73     output_html_s
a880: 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a  tring(p->out, az
a890: 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69  Arg[i] ? azArg[i
a8a0: 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  ] : p->nullValue
a8b0: 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  );.        raw_p
a8c0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f  rintf(p->out,"</
a8d0: 54 44 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d  TD>\n");.      }
a8e0: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
a8f0: 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52 3e 5c  f(p->out,"</TR>\
a900: 6e 22 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  n");.      break
a910: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
a920: 20 4d 4f 44 45 5f 54 63 6c 3a 20 7b 0a 20 20 20   MODE_Tcl: {.   
a930: 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d     if( p->cnt++=
a940: 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61  =0 && p->showHea
a950: 64 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66  der ){.        f
a960: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
a970: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
a980: 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28  output_c_string(
a990: 70 2d 3e 6f 75 74 2c 61 7a 43 6f 6c 5b 69 5d 20  p->out,azCol[i] 
a9a0: 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29  ? azCol[i] : "")
a9b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 69  ;.          if(i
a9c0: 3c 6e 41 72 67 2d 31 29 20 75 74 66 38 5f 70 72  <nArg-1) utf8_pr
a9d0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
a9e0: 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  ", p->colSeparat
a9f0: 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  or);.        }. 
aa00: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
aa10: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
aa20: 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72   p->rowSeparator
aa30: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
aa40: 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20   if( azArg==0 ) 
aa50: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72  break;.      for
aa60: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
aa70: 2b 29 7b 0a 20 20 20 20 20 20 20 20 6f 75 74 70  +){.        outp
aa80: 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f  ut_c_string(p->o
aa90: 75 74 2c 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61  ut, azArg[i] ? a
aaa0: 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c  zArg[i] : p->nul
aab0: 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20  lValue);.       
aac0: 20 69 66 28 69 3c 6e 41 72 67 2d 31 29 20 75 74   if(i<nArg-1) ut
aad0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
aae0: 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65  , "%s", p->colSe
aaf0: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
ab00: 7d 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  }.      utf8_pri
ab10: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
ab20: 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
ab30: 72 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  r);.      break;
ab40: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
ab50: 4d 4f 44 45 5f 43 73 76 3a 20 7b 0a 20 20 20 20  MODE_Csv: {.    
ab60: 20 20 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28    setBinaryMode(
ab70: 70 2d 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20  p->out, 1);.    
ab80: 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d    if( p->cnt++==
ab90: 30 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64  0 && p->showHead
aba0: 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f  er ){.        fo
abb0: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
abc0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f  ++){.          o
abd0: 75 74 70 75 74 5f 63 73 76 28 70 2c 20 61 7a 43  utput_csv(p, azC
abe0: 6f 6c 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d  ol[i] ? azCol[i]
abf0: 20 3a 20 22 22 2c 20 69 3c 6e 41 72 67 2d 31 29   : "", i<nArg-1)
ac00: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
ac10: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
ac20: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d  p->out, "%s", p-
ac30: 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a  >rowSeparator);.
ac40: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
ac50: 28 20 6e 41 72 67 3e 30 20 29 7b 0a 20 20 20 20  ( nArg>0 ){.    
ac60: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
ac70: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
ac80: 20 20 20 20 20 6f 75 74 70 75 74 5f 63 73 76 28       output_csv(
ac90: 70 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 69 3c 6e  p, azArg[i], i<n
aca0: 41 72 67 2d 31 29 3b 0a 20 20 20 20 20 20 20 20  Arg-1);.        
acb0: 7d 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  }.        utf8_p
acc0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
acd0: 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  s", p->rowSepara
ace0: 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  tor);.      }.  
acf0: 20 20 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28      setTextMode(
ad00: 70 2d 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20  p->out, 1);.    
ad10: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
ad20: 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 49 6e 73     case MODE_Ins
ad30: 65 72 74 3a 20 7b 0a 20 20 20 20 20 20 69 66 28  ert: {.      if(
ad40: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
ad50: 6b 3b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  k;.      utf8_pr
ad60: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 49 4e 53  intf(p->out,"INS
ad70: 45 52 54 20 49 4e 54 4f 20 25 73 22 2c 70 2d 3e  ERT INTO %s",p->
ad80: 7a 44 65 73 74 54 61 62 6c 65 29 3b 0a 20 20 20  zDestTable);.   
ad90: 20 20 20 69 66 28 20 70 2d 3e 73 68 6f 77 48 65     if( p->showHe
ada0: 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20  ader ){.        
adb0: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
adc0: 74 2c 22 28 22 29 3b 0a 20 20 20 20 20 20 20 20  t,"(");.        
add0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
ade0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
adf0: 20 69 66 28 20 69 3e 30 20 29 20 72 61 77 5f 70   if( i>0 ) raw_p
ae00: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2c  rintf(p->out, ",
ae10: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ");.          if
ae20: 28 20 71 75 6f 74 65 43 68 61 72 28 61 7a 43 6f  ( quoteChar(azCo
ae30: 6c 5b 69 5d 29 20 29 7b 0a 20 20 20 20 20 20 20  l[i]) ){.       
ae40: 20 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 73       char *z = s
ae50: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
ae60: 5c 22 25 77 5c 22 22 2c 20 61 7a 43 6f 6c 5b 69  \"%w\"", azCol[i
ae70: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
ae80: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
ae90: 75 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20  ut, "%s", z);.  
aea0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
aeb0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20  3_free(z);.     
aec0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
aed0: 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
aee0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
aef0: 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20   azCol[i]);.    
af00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
af10: 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  }.        raw_pr
af20: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 29 22 29  intf(p->out,")")
af30: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
af40: 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20  p->cnt++;.      
af50: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
af60: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 72   i++){.        r
af70: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
af80: 2c 20 69 3e 30 20 3f 20 22 2c 22 20 3a 20 22 20  , i>0 ? "," : " 
af90: 56 41 4c 55 45 53 28 22 29 3b 0a 20 20 20 20 20  VALUES(");.     
afa0: 20 20 20 69 66 28 20 28 61 7a 41 72 67 5b 69 5d     if( (azArg[i]
afb0: 3d 3d 30 29 20 7c 7c 20 28 61 69 54 79 70 65 20  ==0) || (aiType 
afc0: 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51  && aiType[i]==SQ
afd0: 4c 49 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20  LITE_NULL) ){.  
afe0: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
aff0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c  ntf(p->out,"NULL
b000: 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ");.        }els
b010: 65 20 69 66 28 20 61 69 54 79 70 65 20 26 26 20  e if( aiType && 
b020: 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54  aiType[i]==SQLIT
b030: 45 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20  E_TEXT ){.      
b040: 20 20 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73      if( ShellHas
b050: 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 4e 65  Flag(p, SHFLG_Ne
b060: 77 6c 69 6e 65 73 29 20 29 7b 0a 20 20 20 20 20  wlines) ){.     
b070: 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75         output_qu
b080: 6f 74 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f  oted_string(p->o
b090: 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  ut, azArg[i]);. 
b0a0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 70              outp
b0c0: 75 74 5f 71 75 6f 74 65 64 5f 65 73 63 61 70 65  ut_quoted_escape
b0d0: 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  d_string(p->out,
b0e0: 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20   azArg[i]);.    
b0f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
b100: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
b110: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
b120: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 29 7b  QLITE_INTEGER ){
b130: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
b140: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
b150: 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  s", azArg[i]);. 
b160: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
b170: 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70   aiType && aiTyp
b180: 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f  e[i]==SQLITE_FLO
b190: 41 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  AT ){.          
b1a0: 63 68 61 72 20 7a 5b 35 30 5d 3b 0a 20 20 20 20  char z[50];.    
b1b0: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d        double r =
b1c0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
b1d0: 64 6f 75 62 6c 65 28 70 2d 3e 70 53 74 6d 74 2c  double(p->pStmt,
b1e0: 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   i);.          s
b1f0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
b200: 35 30 2c 7a 2c 22 25 21 2e 32 30 67 22 2c 20 72  50,z,"%!.20g", r
b210: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  );.          raw
b220: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
b230: 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20  "%s", z);.      
b240: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79    }else if( aiTy
b250: 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d  pe && aiType[i]=
b260: 3d 53 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20  =SQLITE_BLOB && 
b270: 70 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  p->pStmt ){.    
b280: 20 20 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64        const void
b290: 20 2a 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65   *pBlob = sqlite
b2a0: 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d  3_column_blob(p-
b2b0: 3e 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  >pStmt, i);.    
b2c0: 20 20 20 20 20 20 69 6e 74 20 6e 42 6c 6f 62 20        int nBlob 
b2d0: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
b2e0: 5f 62 79 74 65 73 28 70 2d 3e 70 53 74 6d 74 2c  _bytes(p->pStmt,
b2f0: 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f   i);.          o
b300: 75 74 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 70  utput_hex_blob(p
b310: 2d 3e 6f 75 74 2c 20 70 42 6c 6f 62 2c 20 6e 42  ->out, pBlob, nB
b320: 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  lob);.        }e
b330: 6c 73 65 20 69 66 28 20 69 73 4e 75 6d 62 65 72  lse if( isNumber
b340: 28 61 7a 41 72 67 5b 69 5d 2c 20 30 29 20 29 7b  (azArg[i], 0) ){
b350: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
b360: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
b370: 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  s", azArg[i]);. 
b380: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
b390: 20 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c   ShellHasFlag(p,
b3a0: 20 53 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 29   SHFLG_Newlines)
b3b0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75   ){.          ou
b3c0: 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69  tput_quoted_stri
b3d0: 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67  ng(p->out, azArg
b3e0: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  [i]);.        }e
b3f0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6f  lse{.          o
b400: 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 65 73 63  utput_quoted_esc
b410: 61 70 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f  aped_string(p->o
b420: 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  ut, azArg[i]);. 
b430: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
b440: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
b450: 66 28 70 2d 3e 6f 75 74 2c 22 29 3b 5c 6e 22 29  f(p->out,");\n")
b460: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
b470: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
b480: 44 45 5f 51 75 6f 74 65 3a 20 7b 0a 20 20 20 20  DE_Quote: {.    
b490: 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29    if( azArg==0 )
b4a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66   break;.      if
b4b0: 28 20 70 2d 3e 63 6e 74 3d 3d 30 20 26 26 20 70  ( p->cnt==0 && p
b4c0: 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a  ->showHeader ){.
b4d0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
b4e0: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
b4f0: 20 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 30           if( i>0
b500: 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d   ) raw_printf(p-
b510: 3e 6f 75 74 2c 20 22 2c 22 29 3b 0a 20 20 20 20  >out, ",");.    
b520: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f        output_quo
b530: 74 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75  ted_string(p->ou
b540: 74 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20  t, azCol[i]);.  
b550: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
b560: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
b570: 74 2c 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d  t,"\n");.      }
b580: 0a 20 20 20 20 20 20 70 2d 3e 63 6e 74 2b 2b 3b  .      p->cnt++;
b590: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
b5a0: 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
b5b0: 20 20 20 20 20 20 69 66 28 20 69 3e 30 20 29 20        if( i>0 ) 
b5c0: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
b5d0: 74 2c 20 22 2c 22 29 3b 0a 20 20 20 20 20 20 20  t, ",");.       
b5e0: 20 69 66 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d   if( (azArg[i]==
b5f0: 30 29 20 7c 7c 20 28 61 69 54 79 70 65 20 26 26  0) || (aiType &&
b600: 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49   aiType[i]==SQLI
b610: 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20  TE_NULL) ){.    
b620: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
b630: 66 28 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29  f(p->out,"NULL")
b640: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
b650: 69 66 28 20 61 69 54 79 70 65 20 26 26 20 61 69  if( aiType && ai
b660: 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f  Type[i]==SQLITE_
b670: 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 20 20  TEXT ){.        
b680: 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f    output_quoted_
b690: 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61  string(p->out, a
b6a0: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
b6b0: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79    }else if( aiTy
b6c0: 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d  pe && aiType[i]=
b6d0: 3d 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20  =SQLITE_INTEGER 
b6e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
b6f0: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
b700: 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  "%s", azArg[i]);
b710: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69  .        }else i
b720: 66 28 20 61 69 54 79 70 65 20 26 26 20 61 69 54  f( aiType && aiT
b730: 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 46  ype[i]==SQLITE_F
b740: 4c 4f 41 54 20 29 7b 0a 20 20 20 20 20 20 20 20  LOAT ){.        
b750: 20 20 63 68 61 72 20 7a 5b 35 30 5d 3b 0a 20 20    char z[50];.  
b760: 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72          double r
b770: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
b780: 6e 5f 64 6f 75 62 6c 65 28 70 2d 3e 70 53 74 6d  n_double(p->pStm
b790: 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20  t, i);.         
b7a0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
b7b0: 66 28 35 30 2c 7a 2c 22 25 21 2e 32 30 67 22 2c  f(50,z,"%!.20g",
b7c0: 20 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72   r);.          r
b7d0: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
b7e0: 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  , "%s", z);.    
b7f0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69      }else if( ai
b800: 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69  Type && aiType[i
b810: 5d 3d 3d 53 51 4c 49 54 45 5f 42 4c 4f 42 20 26  ]==SQLITE_BLOB &
b820: 26 20 70 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20  & p->pStmt ){.  
b830: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 76 6f          const vo
b840: 69 64 20 2a 70 42 6c 6f 62 20 3d 20 73 71 6c 69  id *pBlob = sqli
b850: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28  te3_column_blob(
b860: 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20  p->pStmt, i);.  
b870: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 42 6c 6f          int nBlo
b880: 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  b = sqlite3_colu
b890: 6d 6e 5f 62 79 74 65 73 28 70 2d 3e 70 53 74 6d  mn_bytes(p->pStm
b8a0: 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20  t, i);.         
b8b0: 20 6f 75 74 70 75 74 5f 68 65 78 5f 62 6c 6f 62   output_hex_blob
b8c0: 28 70 2d 3e 6f 75 74 2c 20 70 42 6c 6f 62 2c 20  (p->out, pBlob, 
b8d0: 6e 42 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20  nBlob);.        
b8e0: 7d 65 6c 73 65 20 69 66 28 20 69 73 4e 75 6d 62  }else if( isNumb
b8f0: 65 72 28 61 7a 41 72 67 5b 69 5d 2c 20 30 29 20  er(azArg[i], 0) 
b900: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
b910: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
b920: 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  "%s", azArg[i]);
b930: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
b940: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
b950: 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70  _quoted_string(p
b960: 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29  ->out, azArg[i])
b970: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
b980: 20 20 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72    }.      raw_pr
b990: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 5c 6e 22  intf(p->out,"\n"
b9a0: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
b9b0: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d      }.    case M
b9c0: 4f 44 45 5f 41 73 63 69 69 3a 20 7b 0a 20 20 20  ODE_Ascii: {.   
b9d0: 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d     if( p->cnt++=
b9e0: 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61  =0 && p->showHea
b9f0: 64 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66  der ){.        f
ba00: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
ba10: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
ba20: 69 66 28 20 69 3e 30 20 29 20 75 74 66 38 5f 70  if( i>0 ) utf8_p
ba30: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
ba40: 73 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61  s", p->colSepara
ba50: 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  tor);.          
ba60: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
ba70: 75 74 2c 22 25 73 22 2c 61 7a 43 6f 6c 5b 69 5d  ut,"%s",azCol[i]
ba80: 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22   ? azCol[i] : ""
ba90: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
baa0: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
bab0: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
bac0: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
bad0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
bae0: 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72  f( azArg==0 ) br
baf0: 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  eak;.      for(i
bb00: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
bb10: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3e  {.        if( i>
bb20: 30 20 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28  0 ) utf8_printf(
bb30: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d  p->out, "%s", p-
bb40: 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a  >colSeparator);.
bb50: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
bb60: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c  ntf(p->out,"%s",
bb70: 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67  azArg[i] ? azArg
bb80: 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c  [i] : p->nullVal
bb90: 75 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ue);.      }.   
bba0: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
bbb0: 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e  ->out, "%s", p->
bbc0: 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  rowSeparator);. 
bbd0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
bbe0: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  }.  }.  return 0
bbf0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
bc00: 69 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  is the callback 
bc10: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 74 68 65  routine that the
bc20: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0a   SQLite library.
bc30: 2a 2a 20 69 6e 76 6f 6b 65 73 20 66 6f 72 20 65  ** invokes for e
bc40: 61 63 68 20 72 6f 77 20 6f 66 20 61 20 71 75 65  ach row of a que
bc50: 72 79 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74  ry result..*/.st
bc60: 61 74 69 63 20 69 6e 74 20 63 61 6c 6c 62 61 63  atic int callbac
bc70: 6b 28 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e  k(void *pArg, in
bc80: 74 20 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61  t nArg, char **a
bc90: 7a 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 43  zArg, char **azC
bca0: 6f 6c 29 7b 0a 20 20 2f 2a 20 73 69 6e 63 65 20  ol){.  /* since 
bcb0: 77 65 20 64 6f 6e 27 74 20 68 61 76 65 20 74 79  we don't have ty
bcc0: 70 65 20 69 6e 66 6f 2c 20 63 61 6c 6c 20 74 68  pe info, call th
bcd0: 65 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b  e shell_callback
bce0: 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 76 61 6c   with a NULL val
bcf0: 75 65 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 73  ue */.  return s
bd00: 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 28 70 41  hell_callback(pA
bd10: 72 67 2c 20 6e 41 72 67 2c 20 61 7a 41 72 67 2c  rg, nArg, azArg,
bd20: 20 61 7a 43 6f 6c 2c 20 4e 55 4c 4c 29 3b 0a 7d   azCol, NULL);.}
bd30: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
bd40: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75  the callback rou
bd50: 74 69 6e 65 20 66 72 6f 6d 20 73 71 6c 69 74 65  tine from sqlite
bd60: 33 5f 65 78 65 63 28 29 20 74 68 61 74 20 61 70  3_exec() that ap
bd70: 70 65 6e 64 73 20 61 6c 6c 0a 2a 2a 20 6f 75 74  pends all.** out
bd80: 70 75 74 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64  put onto the end
bd90: 20 6f 66 20 61 20 53 68 65 6c 6c 54 65 78 74 20   of a ShellText 
bda0: 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69  object..*/.stati
bdb0: 63 20 69 6e 74 20 63 61 70 74 75 72 65 4f 75 74  c int captureOut
bdc0: 70 75 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  putCallback(void
bdd0: 20 2a 70 41 72 67 2c 20 69 6e 74 20 6e 41 72 67   *pArg, int nArg
bde0: 2c 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20  , char **azArg, 
bdf0: 63 68 61 72 20 2a 2a 61 7a 29 7b 0a 20 20 53 68  char **az){.  Sh
be00: 65 6c 6c 54 65 78 74 20 2a 70 20 3d 20 28 53 68  ellText *p = (Sh
be10: 65 6c 6c 54 65 78 74 2a 29 70 41 72 67 3b 0a 20  ellText*)pArg;. 
be20: 20 69 6e 74 20 69 3b 0a 20 20 55 4e 55 53 45 44   int i;.  UNUSED
be30: 5f 50 41 52 41 4d 45 54 45 52 28 61 7a 29 3b 0a  _PARAMETER(az);.
be40: 20 20 69 66 28 20 70 2d 3e 6e 20 29 20 61 70 70    if( p->n ) app
be50: 65 6e 64 54 65 78 74 28 70 2c 20 22 7c 22 2c 20  endText(p, "|", 
be60: 30 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  0);.  for(i=0; i
be70: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
be80: 20 69 66 28 20 69 20 29 20 61 70 70 65 6e 64 54   if( i ) appendT
be90: 65 78 74 28 70 2c 20 22 2c 22 2c 20 30 29 3b 0a  ext(p, ",", 0);.
bea0: 20 20 20 20 69 66 28 20 61 7a 41 72 67 5b 69 5d      if( azArg[i]
beb0: 20 29 20 61 70 70 65 6e 64 54 65 78 74 28 70 2c   ) appendText(p,
bec0: 20 61 7a 41 72 67 5b 69 5d 2c 20 30 29 3b 0a 20   azArg[i], 0);. 
bed0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
bee0: 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65  ../*.** Generate
bef0: 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
bf00: 53 45 4c 46 54 45 53 54 20 74 61 62 6c 65 20 69  SELFTEST table i
bf10: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
bf20: 61 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ase..*/.static v
bf30: 6f 69 64 20 63 72 65 61 74 65 53 65 6c 66 74 65  oid createSelfte
bf40: 73 74 54 61 62 6c 65 28 53 68 65 6c 6c 53 74 61  stTable(ShellSta
bf50: 74 65 20 2a 70 29 7b 0a 20 20 63 68 61 72 20 2a  te *p){.  char *
bf60: 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 73  zErrMsg = 0;.  s
bf70: 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
bf80: 62 2c 0a 20 20 20 20 22 53 41 56 45 50 4f 49 4e  b,.    "SAVEPOIN
bf90: 54 20 73 65 6c 66 74 65 73 74 5f 69 6e 69 74 3b  T selftest_init;
bfa0: 5c 6e 22 0a 20 20 20 20 22 43 52 45 41 54 45 20  \n".    "CREATE 
bfb0: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49  TABLE IF NOT EXI
bfc0: 53 54 53 20 73 65 6c 66 74 65 73 74 28 5c 6e 22  STS selftest(\n"
bfd0: 0a 20 20 20 20 22 20 20 74 6e 6f 20 49 4e 54 45  .    "  tno INTE
bfe0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
bff0: 5c 6e 22 20 20 20 2f 2a 20 54 65 73 74 20 6e 75  \n"   /* Test nu
c000: 6d 62 65 72 20 2a 2f 0a 20 20 20 20 22 20 20 6f  mber */.    "  o
c010: 70 20 54 45 58 54 2c 5c 6e 22 20 20 20 20 20 20  p TEXT,\n"      
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c030: 4f 70 65 72 61 74 6f 72 3a 20 20 6d 65 6d 6f 20  Operator:  memo 
c040: 72 75 6e 20 2a 2f 0a 20 20 20 20 22 20 20 63 6d  run */.    "  cm
c050: 64 20 54 45 58 54 2c 5c 6e 22 20 20 20 20 20 20  d TEXT,\n"      
c060: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
c070: 6f 6d 6d 61 6e 64 20 74 65 78 74 20 2a 2f 0a 20  ommand text */. 
c080: 20 20 20 22 20 20 61 6e 73 20 54 45 58 54 5c 6e     "  ans TEXT\n
c090: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
c0a0: 20 20 20 20 2f 2a 20 44 65 73 69 72 65 64 20 61      /* Desired a
c0b0: 6e 73 77 65 72 20 2a 2f 0a 20 20 20 20 22 29 3b  nswer */.    ");
c0c0: 22 0a 20 20 20 20 22 43 52 45 41 54 45 20 54 45  ".    "CREATE TE
c0d0: 4d 50 20 54 41 42 4c 45 20 5b 5f 73 68 65 6c 6c  MP TABLE [_shell
c0e0: 24 73 65 6c 66 5d 28 6f 70 2c 63 6d 64 2c 61 6e  $self](op,cmd,an
c0f0: 73 29 3b 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45  s);\n".    "INSE
c100: 52 54 20 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24  RT INTO [_shell$
c110: 73 65 6c 66 5d 28 72 6f 77 69 64 2c 6f 70 2c 63  self](rowid,op,c
c120: 6d 64 29 5c 6e 22 0a 20 20 20 20 22 20 20 56 41  md)\n".    "  VA
c130: 4c 55 45 53 28 63 6f 61 6c 65 73 63 65 28 28 53  LUES(coalesce((S
c140: 45 4c 45 43 54 20 28 6d 61 78 28 74 6e 6f 29 2b  ELECT (max(tno)+
c150: 31 30 30 29 2f 31 30 20 46 52 4f 4d 20 73 65 6c  100)/10 FROM sel
c160: 66 74 65 73 74 29 2c 31 30 29 2c 5c 6e 22 0a 20  ftest),10),\n". 
c170: 20 20 20 22 20 20 20 20 20 20 20 20 20 27 6d 65     "         'me
c180: 6d 6f 27 2c 27 54 65 73 74 73 20 67 65 6e 65 72  mo','Tests gener
c190: 61 74 65 64 20 62 79 20 2d 2d 69 6e 69 74 27 29  ated by --init')
c1a0: 3b 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45 52 54  ;\n".    "INSERT
c1b0: 20 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65   INTO [_shell$se
c1c0: 6c 66 5d 5c 6e 22 0a 20 20 20 20 22 20 20 53 45  lf]\n".    "  SE
c1d0: 4c 45 43 54 20 27 72 75 6e 27 2c 5c 6e 22 0a 20  LECT 'run',\n". 
c1e0: 20 20 20 22 20 20 20 20 27 53 45 4c 45 43 54 20     "    'SELECT 
c1f0: 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 27  hex(sha3_query('
c200: 27 53 45 4c 45 43 54 20 74 79 70 65 2c 6e 61 6d  'SELECT type,nam
c210: 65 2c 74 62 6c 5f 6e 61 6d 65 2c 73 71 6c 20 22  e,tbl_name,sql "
c220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c240: 20 20 22 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d    "FROM sqlite_m
c250: 61 73 74 65 72 20 4f 52 44 45 52 20 42 59 20 32  aster ORDER BY 2
c260: 27 27 2c 32 32 34 29 29 27 2c 5c 6e 22 0a 20 20  '',224))',\n".  
c270: 20 20 22 20 20 20 20 68 65 78 28 73 68 61 33 5f    "    hex(sha3_
c280: 71 75 65 72 79 28 27 53 45 4c 45 43 54 20 74 79  query('SELECT ty
c290: 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65  pe,name,tbl_name
c2a0: 2c 73 71 6c 20 22 0a 20 20 20 20 20 20 20 20 20  ,sql ".         
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2c0: 20 22 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61   "FROM sqlite_ma
c2d0: 73 74 65 72 20 4f 52 44 45 52 20 42 59 20 32 27  ster ORDER BY 2'
c2e0: 2c 32 32 34 29 29 3b 5c 6e 22 0a 20 20 20 20 22  ,224));\n".    "
c2f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b 5f 73 68  INSERT INTO [_sh
c300: 65 6c 6c 24 73 65 6c 66 5d 5c 6e 22 0a 20 20 20  ell$self]\n".   
c310: 20 22 20 20 53 45 4c 45 43 54 20 27 72 75 6e 27   "  SELECT 'run'
c320: 2c 22 0a 20 20 20 20 22 20 20 20 20 27 53 45 4c  ,".    "    'SEL
c330: 45 43 54 20 68 65 78 28 73 68 61 33 5f 71 75 65  ECT hex(sha3_que
c340: 72 79 28 27 27 53 45 4c 45 43 54 20 2a 20 46 52  ry(''SELECT * FR
c350: 4f 4d 20 5c 22 27 20 7c 7c 22 0a 20 20 20 20 22  OM \"' ||".    "
c360: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 27          printf('
c370: 25 77 27 2c 6e 61 6d 65 29 20 7c 7c 20 27 5c 22  %w',name) || '\"
c380: 20 4e 4f 54 20 49 4e 44 45 58 45 44 27 27 2c 32   NOT INDEXED'',2
c390: 32 34 29 29 27 2c 5c 6e 22 0a 20 20 20 20 22 20  24))',\n".    " 
c3a0: 20 20 20 68 65 78 28 73 68 61 33 5f 71 75 65 72     hex(sha3_quer
c3b0: 79 28 70 72 69 6e 74 66 28 27 53 45 4c 45 43 54  y(printf('SELECT
c3c0: 20 2a 20 46 52 4f 4d 20 5c 22 25 77 5c 22 20 4e   * FROM \"%w\" N
c3d0: 4f 54 20 49 4e 44 45 58 45 44 27 2c 6e 61 6d 65  OT INDEXED',name
c3e0: 29 2c 32 32 34 29 29 5c 6e 22 0a 20 20 20 20 22  ),224))\n".    "
c3f0: 20 20 46 52 4f 4d 20 28 5c 6e 22 0a 20 20 20 20    FROM (\n".    
c400: 22 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65  "    SELECT name
c410: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
c420: 74 65 72 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  ter\n".    "    
c430: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62   WHERE type='tab
c440: 6c 65 27 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  le'\n".    "    
c450: 20 20 20 41 4e 44 20 6e 61 6d 65 3c 3e 27 73 65     AND name<>'se
c460: 6c 66 74 65 73 74 27 5c 6e 22 0a 20 20 20 20 22  lftest'\n".    "
c470: 20 20 20 20 20 20 20 41 4e 44 20 63 6f 61 6c 65         AND coale
c480: 73 63 65 28 72 6f 6f 74 70 61 67 65 2c 30 29 3e  sce(rootpage,0)>
c490: 30 5c 6e 22 0a 20 20 20 20 22 20 20 29 5c 6e 22  0\n".    "  )\n"
c4a0: 0a 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20  .    " ORDER BY 
c4b0: 6e 61 6d 65 3b 5c 6e 22 0a 20 20 20 20 22 49 4e  name;\n".    "IN
c4c0: 53 45 52 54 20 49 4e 54 4f 20 5b 5f 73 68 65 6c  SERT INTO [_shel
c4d0: 6c 24 73 65 6c 66 5d 5c 6e 22 0a 20 20 20 20 22  l$self]\n".    "
c4e0: 20 20 56 41 4c 55 45 53 28 27 72 75 6e 27 2c 27    VALUES('run','
c4f0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
c500: 5f 63 68 65 63 6b 27 2c 27 6f 6b 27 29 3b 5c 6e  _check','ok');\n
c510: 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  ".    "INSERT IN
c520: 54 4f 20 73 65 6c 66 74 65 73 74 28 74 6e 6f 2c  TO selftest(tno,
c530: 6f 70 2c 63 6d 64 2c 61 6e 73 29 22 0a 20 20 20  op,cmd,ans)".   
c540: 20 22 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64   "  SELECT rowid
c550: 2a 31 30 2c 6f 70 2c 63 6d 64 2c 61 6e 73 20 46  *10,op,cmd,ans F
c560: 52 4f 4d 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66  ROM [_shell$self
c570: 5d 3b 5c 6e 22 0a 20 20 20 20 22 44 52 4f 50 20  ];\n".    "DROP 
c580: 54 41 42 4c 45 20 5b 5f 73 68 65 6c 6c 24 73 65  TABLE [_shell$se
c590: 6c 66 5d 3b 22 0a 20 20 20 20 2c 30 2c 30 2c 26  lf];".    ,0,0,&
c5a0: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20  zErrMsg);.  if( 
c5b0: 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 75  zErrMsg ){.    u
c5c0: 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
c5d0: 72 2c 20 22 53 45 4c 46 54 45 53 54 20 69 6e 69  r, "SELFTEST ini
c5e0: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 66 61 69 6c  tialization fail
c5f0: 75 72 65 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72  ure: %s\n", zErr
c600: 4d 73 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Msg);.    sqlite
c610: 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b  3_free(zErrMsg);
c620: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65  .  }.  sqlite3_e
c630: 78 65 63 28 70 2d 3e 64 62 2c 20 22 52 45 4c 45  xec(p->db, "RELE
c640: 41 53 45 20 73 65 6c 66 74 65 73 74 5f 69 6e 69  ASE selftest_ini
c650: 74 22 2c 30 2c 30 2c 30 29 3b 0a 7d 0a 0a 0a 2f  t",0,0,0);.}.../
c660: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 65 73  *.** Set the des
c670: 74 69 6e 61 74 69 6f 6e 20 74 61 62 6c 65 20 66  tination table f
c680: 69 65 6c 64 20 6f 66 20 74 68 65 20 53 68 65 6c  ield of the Shel
c690: 6c 53 74 61 74 65 20 73 74 72 75 63 74 75 72 65  lState structure
c6a0: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 61 6d 65 20   to.** the name 
c6b0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 67 69 76  of the table giv
c6c0: 65 6e 2e 20 20 45 73 63 61 70 65 20 61 6e 79 20  en.  Escape any 
c6d0: 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 73  quote characters
c6e0: 20 69 6e 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65   in the.** table
c6f0: 20 6e 61 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69 63   name..*/.static
c700: 20 76 6f 69 64 20 73 65 74 5f 74 61 62 6c 65 5f   void set_table_
c710: 6e 61 6d 65 28 53 68 65 6c 6c 53 74 61 74 65 20  name(ShellState 
c720: 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  *p, const char *
c730: 7a 4e 61 6d 65 29 7b 0a 20 20 69 6e 74 20 69 2c  zName){.  int i,
c740: 20 6e 3b 0a 20 20 69 6e 74 20 63 51 75 6f 74 65   n;.  int cQuote
c750: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20  ;.  char *z;..  
c760: 69 66 28 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c  if( p->zDestTabl
c770: 65 20 29 7b 0a 20 20 20 20 66 72 65 65 28 70 2d  e ){.    free(p-
c780: 3e 7a 44 65 73 74 54 61 62 6c 65 29 3b 0a 20 20  >zDestTable);.  
c790: 20 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20    p->zDestTable 
c7a0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a  = 0;.  }.  if( z
c7b0: 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74 75 72 6e  Name==0 ) return
c7c0: 3b 0a 20 20 63 51 75 6f 74 65 20 3d 20 71 75 6f  ;.  cQuote = quo
c7d0: 74 65 43 68 61 72 28 7a 4e 61 6d 65 29 3b 0a 20  teChar(zName);. 
c7e0: 20 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 4e   n = strlen30(zN
c7f0: 61 6d 65 29 3b 0a 20 20 69 66 28 20 63 51 75 6f  ame);.  if( cQuo
c800: 74 65 20 29 20 6e 20 2b 3d 20 6e 2b 32 3b 0a 20  te ) n += n+2;. 
c810: 20 7a 20 3d 20 70 2d 3e 7a 44 65 73 74 54 61 62   z = p->zDestTab
c820: 6c 65 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 2b 31  le = malloc( n+1
c830: 20 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29   );.  if( z==0 )
c840: 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
c850: 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
c860: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22  out of memory\n"
c870: 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a  );.    exit(1);.
c880: 20 20 7d 0a 20 20 6e 20 3d 20 30 3b 0a 20 20 69    }.  n = 0;.  i
c890: 66 28 20 63 51 75 6f 74 65 20 29 20 7a 5b 6e 2b  f( cQuote ) z[n+
c8a0: 2b 5d 20 3d 20 63 51 75 6f 74 65 3b 0a 20 20 66  +] = cQuote;.  f
c8b0: 6f 72 28 69 3d 30 3b 20 7a 4e 61 6d 65 5b 69 5d  or(i=0; zName[i]
c8c0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 7a 5b 6e 2b  ; i++){.    z[n+
c8d0: 2b 5d 20 3d 20 7a 4e 61 6d 65 5b 69 5d 3b 0a 20  +] = zName[i];. 
c8e0: 20 20 20 69 66 28 20 7a 4e 61 6d 65 5b 69 5d 3d     if( zName[i]=
c8f0: 3d 63 51 75 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d  =cQuote ) z[n++]
c900: 20 3d 20 63 51 75 6f 74 65 3b 0a 20 20 7d 0a 20   = cQuote;.  }. 
c910: 20 69 66 28 20 63 51 75 6f 74 65 20 29 20 7a 5b   if( cQuote ) z[
c920: 6e 2b 2b 5d 20 3d 20 63 51 75 6f 74 65 3b 0a 20  n++] = cQuote;. 
c930: 20 7a 5b 6e 5d 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f   z[n] = 0;.}.../
c940: 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 20 71  *.** Execute a q
c950: 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 20 74  uery statement t
c960: 68 61 74 20 77 69 6c 6c 20 67 65 6e 65 72 61 74  hat will generat
c970: 65 20 53 51 4c 20 6f 75 74 70 75 74 2e 20 20 50  e SQL output.  P
c980: 72 69 6e 74 0a 2a 2a 20 74 68 65 20 72 65 73 75  rint.** the resu
c990: 6c 74 20 63 6f 6c 75 6d 6e 73 2c 20 63 6f 6d 6d  lt columns, comm
c9a0: 61 2d 73 65 70 61 72 61 74 65 64 2c 20 6f 6e 20  a-separated, on 
c9b0: 61 20 6c 69 6e 65 20 61 6e 64 20 74 68 65 6e 20  a line and then 
c9c0: 61 64 64 20 61 0a 2a 2a 20 73 65 6d 69 63 6f 6c  add a.** semicol
c9d0: 6f 6e 20 74 65 72 6d 69 6e 61 74 6f 72 20 74 6f  on terminator to
c9e0: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 61 74   the end of that
c9f0: 20 6c 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   line..**.** If 
ca00: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
ca10: 6c 75 6d 6e 73 20 69 73 20 31 20 61 6e 64 20 74  lumns is 1 and t
ca20: 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  hat column conta
ca30: 69 6e 73 20 74 65 78 74 20 22 2d 2d 22 0a 2a 2a  ins text "--".**
ca40: 20 74 68 65 6e 20 77 72 69 74 65 20 74 68 65 20   then write the 
ca50: 73 65 6d 69 63 6f 6c 6f 6e 20 6f 6e 20 61 20 73  semicolon on a s
ca60: 65 70 61 72 61 74 65 20 6c 69 6e 65 2e 20 20 54  eparate line.  T
ca70: 68 61 74 20 77 61 79 2c 20 69 66 20 61 0a 2a 2a  hat way, if a.**
ca80: 20 22 2d 2d 22 20 63 6f 6d 6d 65 6e 74 20 6f 63   "--" comment oc
ca90: 63 75 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  curs at the end 
caa0: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
cab0: 2c 20 74 68 65 20 63 6f 6d 6d 65 6e 74 0a 2a 2a  , the comment.**
cac0: 20 77 6f 6e 27 74 20 63 6f 6e 73 75 6d 65 20 74   won't consume t
cad0: 68 65 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 65 72  he semicolon ter
cae0: 6d 69 6e 61 74 6f 72 2e 0a 2a 2f 0a 73 74 61 74  minator..*/.stat
caf0: 69 63 20 69 6e 74 20 72 75 6e 5f 74 61 62 6c 65  ic int run_table
cb00: 5f 64 75 6d 70 5f 71 75 65 72 79 28 0a 20 20 53  _dump_query(.  S
cb10: 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 20 20  hellState *p,   
cb20: 20 20 20 20 20 20 20 20 2f 2a 20 51 75 65 72 79          /* Query
cb30: 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 6f   context */.  co
cb40: 6e 73 74 20 63 68 61 72 20 2a 7a 53 65 6c 65 63  nst char *zSelec
cb50: 74 2c 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t,     /* SELECT
cb60: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78   statement to ex
cb70: 74 72 61 63 74 20 63 6f 6e 74 65 6e 74 20 2a 2f  tract content */
cb80: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
cb90: 46 69 72 73 74 52 6f 77 20 20 20 20 2f 2a 20 50  FirstRow    /* P
cba0: 72 69 6e 74 20 62 65 66 6f 72 65 20 66 69 72 73  rint before firs
cbb0: 74 20 72 6f 77 2c 20 69 66 20 6e 6f 74 20 4e 55  t row, if not NU
cbc0: 4c 4c 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  LL */.){.  sqlit
cbd0: 65 33 5f 73 74 6d 74 20 2a 70 53 65 6c 65 63 74  e3_stmt *pSelect
cbe0: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e  ;.  int rc;.  in
cbf0: 74 20 6e 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74  t nResult;.  int
cc00: 20 69 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   i;.  const char
cc10: 20 2a 7a 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   *z;.  rc = sqli
cc20: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
cc30: 2d 3e 64 62 2c 20 7a 53 65 6c 65 63 74 2c 20 2d  ->db, zSelect, -
cc40: 31 2c 20 26 70 53 65 6c 65 63 74 2c 20 30 29 3b  1, &pSelect, 0);
cc50: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
cc60: 45 5f 4f 4b 20 7c 7c 20 21 70 53 65 6c 65 63 74  E_OK || !pSelect
cc70: 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
cc80: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a  ntf(p->out, "/**
cc90: 2a 2a 20 45 52 52 4f 52 3a 20 28 25 64 29 20 25  ** ERROR: (%d) %
cca0: 73 20 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 72 63 2c  s *****/\n", rc,
ccb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ccc0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
ccd0: 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 69 66 28  p->db));.    if(
cce0: 20 28 72 63 26 30 78 66 66 29 21 3d 53 51 4c 49   (rc&0xff)!=SQLI
ccf0: 54 45 5f 43 4f 52 52 55 50 54 20 29 20 70 2d 3e  TE_CORRUPT ) p->
cd00: 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 72 65 74 75  nErr++;.    retu
cd10: 72 6e 20 72 63 3b 0a 20 20 7d 0a 20 20 72 63 20  rn rc;.  }.  rc 
cd20: 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
cd30: 53 65 6c 65 63 74 29 3b 0a 20 20 6e 52 65 73 75  Select);.  nResu
cd40: 6c 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  lt = sqlite3_col
cd50: 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 65 6c 65 63  umn_count(pSelec
cd60: 74 29 3b 0a 20 20 77 68 69 6c 65 28 20 72 63 3d  t);.  while( rc=
cd70: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20  =SQLITE_ROW ){. 
cd80: 20 20 20 69 66 28 20 7a 46 69 72 73 74 52 6f 77     if( zFirstRow
cd90: 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
cda0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
cdb0: 73 22 2c 20 7a 46 69 72 73 74 52 6f 77 29 3b 0a  s", zFirstRow);.
cdc0: 20 20 20 20 20 20 7a 46 69 72 73 74 52 6f 77 20        zFirstRow 
cdd0: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a  = 0;.    }.    z
cde0: 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
cdf0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
ce00: 65 78 74 28 70 53 65 6c 65 63 74 2c 20 30 29 3b  ext(pSelect, 0);
ce10: 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
ce20: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a  (p->out, "%s", z
ce30: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20  );.    for(i=1; 
ce40: 69 3c 6e 52 65 73 75 6c 74 3b 20 69 2b 2b 29 7b  i<nResult; i++){
ce50: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
ce60: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2c 25 73 22  tf(p->out, ",%s"
ce70: 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  , sqlite3_column
ce80: 5f 74 65 78 74 28 70 53 65 6c 65 63 74 2c 20 69  _text(pSelect, i
ce90: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ));.    }.    if
cea0: 28 20 7a 3d 3d 30 20 29 20 7a 20 3d 20 22 22 3b  ( z==0 ) z = "";
ceb0: 0a 20 20 20 20 77 68 69 6c 65 28 20 7a 5b 30 5d  .    while( z[0]
cec0: 20 26 26 20 28 7a 5b 30 5d 21 3d 27 2d 27 20 7c   && (z[0]!='-' |
ced0: 7c 20 7a 5b 31 5d 21 3d 27 2d 27 29 20 29 20 7a  | z[1]!='-') ) z
cee0: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d  ++;.    if( z[0]
cef0: 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
cf00: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
cf10: 3b 5c 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ;\n");.    }else
cf20: 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
cf30: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 3b 5c 6e 22  tf(p->out, ";\n"
cf40: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  );.    }.    rc 
cf50: 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
cf60: 53 65 6c 65 63 74 29 3b 0a 20 20 7d 0a 20 20 72  Select);.  }.  r
cf70: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  c = sqlite3_fina
cf80: 6c 69 7a 65 28 70 53 65 6c 65 63 74 29 3b 0a 20  lize(pSelect);. 
cf90: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
cfa0: 4f 4b 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  OK ){.    utf8_p
cfb0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f  rintf(p->out, "/
cfc0: 2a 2a 2a 2a 20 45 52 52 4f 52 3a 20 28 25 64 29  **** ERROR: (%d)
cfd0: 20 25 73 20 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 72   %s *****/\n", r
cfe0: 63 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  c,.             
cff0: 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
d000: 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 69  g(p->db));.    i
d010: 66 28 20 28 72 63 26 30 78 66 66 29 21 3d 53 51  f( (rc&0xff)!=SQ
d020: 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 29 20 70  LITE_CORRUPT ) p
d030: 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ->nErr++;.  }.  
d040: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
d050: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 73 70 61  .** Allocate spa
d060: 63 65 20 61 6e 64 20 73 61 76 65 20 6f 66 66 20  ce and save off 
d070: 63 75 72 72 65 6e 74 20 65 72 72 6f 72 20 73 74  current error st
d080: 72 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ring..*/.static 
d090: 63 68 61 72 20 2a 73 61 76 65 5f 65 72 72 5f 6d  char *save_err_m
d0a0: 73 67 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  sg(.  sqlite3 *d
d0b0: 62 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b            /* 
d0c0: 44 61 74 61 62 61 73 65 20 74 6f 20 71 75 65 72  Database to quer
d0d0: 79 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6e 45  y */.){.  int nE
d0e0: 72 72 4d 73 67 20 3d 20 31 2b 73 74 72 6c 65 6e  rrMsg = 1+strlen
d0f0: 33 30 28 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  30(sqlite3_errms
d100: 67 28 64 62 29 29 3b 0a 20 20 63 68 61 72 20 2a  g(db));.  char *
d110: 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
d120: 33 5f 6d 61 6c 6c 6f 63 36 34 28 6e 45 72 72 4d  3_malloc64(nErrM
d130: 73 67 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 4d  sg);.  if( zErrM
d140: 73 67 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  sg ){.    memcpy
d150: 28 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69 74 65  (zErrMsg, sqlite
d160: 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 6e 45  3_errmsg(db), nE
d170: 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 65  rrMsg);.  }.  re
d180: 74 75 72 6e 20 7a 45 72 72 4d 73 67 3b 0a 7d 0a  turn zErrMsg;.}.
d190: 0a 23 69 66 64 65 66 20 5f 5f 6c 69 6e 75 78 5f  .#ifdef __linux_
d1a0: 5f 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20  _./*.** Attempt 
d1b0: 74 6f 20 64 69 73 70 6c 61 79 20 49 2f 4f 20 73  to display I/O s
d1c0: 74 61 74 73 20 6f 6e 20 4c 69 6e 75 78 20 75 73  tats on Linux us
d1d0: 69 6e 67 20 2f 70 72 6f 63 2f 50 49 44 2f 69 6f  ing /proc/PID/io
d1e0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
d1f0: 64 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74  displayLinuxIoSt
d200: 61 74 73 28 46 49 4c 45 20 2a 6f 75 74 29 7b 0a  ats(FILE *out){.
d210: 20 20 46 49 4c 45 20 2a 69 6e 3b 0a 20 20 63 68    FILE *in;.  ch
d220: 61 72 20 7a 5b 32 30 30 5d 3b 0a 20 20 73 71 6c  ar z[200];.  sql
d230: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
d240: 7a 65 6f 66 28 7a 29 2c 20 7a 2c 20 22 2f 70 72  zeof(z), z, "/pr
d250: 6f 63 2f 25 64 2f 69 6f 22 2c 20 67 65 74 70 69  oc/%d/io", getpi
d260: 64 28 29 29 3b 0a 20 20 69 6e 20 3d 20 66 6f 70  d());.  in = fop
d270: 65 6e 28 7a 2c 20 22 72 62 22 29 3b 0a 20 20 69  en(z, "rb");.  i
d280: 66 28 20 69 6e 3d 3d 30 20 29 20 72 65 74 75 72  f( in==0 ) retur
d290: 6e 3b 0a 20 20 77 68 69 6c 65 28 20 66 67 65 74  n;.  while( fget
d2a0: 73 28 7a 2c 20 73 69 7a 65 6f 66 28 7a 29 2c 20  s(z, sizeof(z), 
d2b0: 69 6e 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 74  in)!=0 ){.    st
d2c0: 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
d2d0: 74 20 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  t {.      const 
d2e0: 63 68 61 72 20 2a 7a 50 61 74 74 65 72 6e 3b 0a  char *zPattern;.
d2f0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
d300: 20 2a 7a 44 65 73 63 3b 0a 20 20 20 20 7d 20 61   *zDesc;.    } a
d310: 54 72 61 6e 73 5b 5d 20 3d 20 7b 0a 20 20 20 20  Trans[] = {.    
d320: 20 20 7b 20 22 72 63 68 61 72 3a 20 22 2c 20 20    { "rchar: ",  
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d340: 22 42 79 74 65 73 20 72 65 63 65 69 76 65 64 20  "Bytes received 
d350: 62 79 20 72 65 61 64 28 29 3a 22 20 7d 2c 0a 20  by read():" },. 
d360: 20 20 20 20 20 7b 20 22 77 63 68 61 72 3a 20 22       { "wchar: "
d370: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
d380: 20 20 20 22 42 79 74 65 73 20 73 65 6e 74 20 74     "Bytes sent t
d390: 6f 20 77 72 69 74 65 28 29 3a 22 20 20 20 20 7d  o write():"    }
d3a0: 2c 0a 20 20 20 20 20 20 7b 20 22 73 79 73 63 72  ,.      { "syscr
d3b0: 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  : ",            
d3c0: 20 20 20 20 20 20 22 52 65 61 64 28 29 20 73 79        "Read() sy
d3d0: 73 74 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20  stem calls:"    
d3e0: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73 79    },.      { "sy
d3f0: 73 63 77 3a 20 22 2c 20 20 20 20 20 20 20 20 20  scw: ",         
d400: 20 20 20 20 20 20 20 20 20 22 57 72 69 74 65 28           "Write(
d410: 29 20 73 79 73 74 65 6d 20 63 61 6c 6c 73 3a 22  ) system calls:"
d420: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
d430: 22 72 65 61 64 5f 62 79 74 65 73 3a 20 22 2c 20  "read_bytes: ", 
d440: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 79 74              "Byt
d450: 65 73 20 72 65 61 64 20 66 72 6f 6d 20 73 74 6f  es read from sto
d460: 72 61 67 65 3a 22 20 20 7d 2c 0a 20 20 20 20 20  rage:"  },.     
d470: 20 7b 20 22 77 72 69 74 65 5f 62 79 74 65 73 3a   { "write_bytes:
d480: 20 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 22   ",            "
d490: 42 79 74 65 73 20 77 72 69 74 74 65 6e 20 74 6f  Bytes written to
d4a0: 20 73 74 6f 72 61 67 65 3a 22 20 7d 2c 0a 20 20   storage:" },.  
d4b0: 20 20 20 20 7b 20 22 63 61 6e 63 65 6c 6c 65 64      { "cancelled
d4c0: 5f 77 72 69 74 65 5f 62 79 74 65 73 3a 20 22 2c  _write_bytes: ",
d4d0: 20 20 22 43 61 6e 63 65 6c 6c 65 64 20 77 72 69    "Cancelled wri
d4e0: 74 65 20 62 79 74 65 73 3a 22 20 20 20 20 7d 2c  te bytes:"    },
d4f0: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20  .    };.    int 
d500: 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
d510: 69 3c 41 72 72 61 79 53 69 7a 65 28 61 54 72 61  i<ArraySize(aTra
d520: 6e 73 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ns); i++){.     
d530: 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73 74   int n = (int)st
d540: 72 6c 65 6e 28 61 54 72 61 6e 73 5b 69 5d 2e 7a  rlen(aTrans[i].z
d550: 50 61 74 74 65 72 6e 29 3b 0a 20 20 20 20 20 20  Pattern);.      
d560: 69 66 28 20 73 74 72 6e 63 6d 70 28 61 54 72 61  if( strncmp(aTra
d570: 6e 73 5b 69 5d 2e 7a 50 61 74 74 65 72 6e 2c 20  ns[i].zPattern, 
d580: 7a 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  z, n)==0 ){.    
d590: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
d5a0: 6f 75 74 2c 20 22 25 2d 33 36 73 20 25 73 22 2c  out, "%-36s %s",
d5b0: 20 61 54 72 61 6e 73 5b 69 5d 2e 7a 44 65 73 63   aTrans[i].zDesc
d5c0: 2c 20 26 7a 5b 6e 5d 29 3b 0a 20 20 20 20 20 20  , &z[n]);.      
d5d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
d5e0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 63 6c  .    }.  }.  fcl
d5f0: 6f 73 65 28 69 6e 29 3b 0a 7d 0a 23 65 6e 64 69  ose(in);.}.#endi
d600: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61 79  f../*.** Display
d610: 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20 6f   a single line o
d620: 66 20 73 74 61 74 75 73 20 75 73 69 6e 67 20 36  f status using 6
d630: 34 2d 62 69 74 20 76 61 6c 75 65 73 2e 0a 2a 2f  4-bit values..*/
d640: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64 69 73  .static void dis
d650: 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 0a 20 20  playStatLine(.  
d660: 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 20  ShellState *p,  
d670: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
d680: 20 73 68 65 6c 6c 20 63 6f 6e 74 65 78 74 20 2a   shell context *
d690: 2f 0a 20 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c  /.  char *zLabel
d6a0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ,             /*
d6b0: 20 4c 61 62 65 6c 20 66 6f 72 20 74 68 69 73 20   Label for this 
d6c0: 6f 6e 65 20 6c 69 6e 65 20 2a 2f 0a 20 20 63 68  one line */.  ch
d6d0: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 20 20 20  ar *zFormat,    
d6e0: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 6d 61          /* Forma
d6f0: 74 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  t for the result
d700: 20 2a 2f 0a 20 20 69 6e 74 20 69 53 74 61 74 75   */.  int iStatu
d710: 73 43 74 72 6c 2c 20 20 20 20 20 20 20 20 20 20  sCtrl,          
d720: 2f 2a 20 57 68 69 63 68 20 73 74 61 74 75 73 20  /* Which status 
d730: 74 6f 20 64 69 73 70 6c 61 79 20 2a 2f 0a 20 20  to display */.  
d740: 69 6e 74 20 62 52 65 73 65 74 20 20 20 20 20 20  int bReset      
d750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
d760: 65 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73  e to reset the s
d770: 74 61 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  tats */.){.  sql
d780: 69 74 65 33 5f 69 6e 74 36 34 20 69 43 75 72 20  ite3_int64 iCur 
d790: 3d 20 2d 31 3b 0a 20 20 73 71 6c 69 74 65 33 5f  = -1;.  sqlite3_
d7a0: 69 6e 74 36 34 20 69 48 69 77 74 72 20 3d 20 2d  int64 iHiwtr = -
d7b0: 31 3b 0a 20 20 69 6e 74 20 69 2c 20 6e 50 65 72  1;.  int i, nPer
d7c0: 63 65 6e 74 3b 0a 20 20 63 68 61 72 20 7a 4c 69  cent;.  char zLi
d7d0: 6e 65 5b 32 30 30 5d 3b 0a 20 20 73 71 6c 69 74  ne[200];.  sqlit
d7e0: 65 33 5f 73 74 61 74 75 73 36 34 28 69 53 74 61  e3_status64(iSta
d7f0: 74 75 73 43 74 72 6c 2c 20 26 69 43 75 72 2c 20  tusCtrl, &iCur, 
d800: 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29  &iHiwtr, bReset)
d810: 3b 0a 20 20 66 6f 72 28 69 3d 30 2c 20 6e 50 65  ;.  for(i=0, nPe
d820: 72 63 65 6e 74 3d 30 3b 20 7a 46 6f 72 6d 61 74  rcent=0; zFormat
d830: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  [i]; i++){.    i
d840: 66 28 20 7a 46 6f 72 6d 61 74 5b 69 5d 3d 3d 27  f( zFormat[i]=='
d850: 25 27 20 29 20 6e 50 65 72 63 65 6e 74 2b 2b 3b  %' ) nPercent++;
d860: 0a 20 20 7d 0a 20 20 69 66 28 20 6e 50 65 72 63  .  }.  if( nPerc
d870: 65 6e 74 3e 31 20 29 7b 0a 20 20 20 20 73 71 6c  ent>1 ){.    sql
d880: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
d890: 7a 65 6f 66 28 7a 4c 69 6e 65 29 2c 20 7a 4c 69  zeof(zLine), zLi
d8a0: 6e 65 2c 20 7a 46 6f 72 6d 61 74 2c 20 69 43 75  ne, zFormat, iCu
d8b0: 72 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 7d 65  r, iHiwtr);.  }e
d8c0: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
d8d0: 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
d8e0: 28 7a 4c 69 6e 65 29 2c 20 7a 4c 69 6e 65 2c 20  (zLine), zLine, 
d8f0: 7a 46 6f 72 6d 61 74 2c 20 69 48 69 77 74 72 29  zFormat, iHiwtr)
d900: 3b 0a 20 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e  ;.  }.  raw_prin
d910: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 33 36  tf(p->out, "%-36
d920: 73 20 25 73 5c 6e 22 2c 20 7a 4c 61 62 65 6c 2c  s %s\n", zLabel,
d930: 20 7a 4c 69 6e 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a   zLine);.}../*.*
d940: 2a 20 44 69 73 70 6c 61 79 20 6d 65 6d 6f 72 79  * Display memory
d950: 20 73 74 61 74 73 2e 0a 2a 2f 0a 73 74 61 74 69   stats..*/.stati
d960: 63 20 69 6e 74 20 64 69 73 70 6c 61 79 5f 73 74  c int display_st
d970: 61 74 73 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ats(.  sqlite3 *
d980: 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
d990: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74     /* Database t
d9a0: 6f 20 71 75 65 72 79 20 2a 2f 0a 20 20 53 68 65  o query */.  She
d9b0: 6c 6c 53 74 61 74 65 20 2a 70 41 72 67 2c 20 20  llState *pArg,  
d9c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
d9d0: 74 65 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74  ter to ShellStat
d9e0: 65 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 73 65  e */.  int bRese
d9f0: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
da00: 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 72 65     /* True to re
da10: 73 65 74 20 74 68 65 20 73 74 61 74 73 20 2a 2f  set the stats */
da20: 0a 29 7b 0a 20 20 69 6e 74 20 69 43 75 72 3b 0a  .){.  int iCur;.
da30: 20 20 69 6e 74 20 69 48 69 77 74 72 3b 0a 0a 20    int iHiwtr;.. 
da40: 20 69 66 28 20 70 41 72 67 20 26 26 20 70 41 72   if( pArg && pAr
da50: 67 2d 3e 6f 75 74 20 29 7b 0a 20 20 20 20 64 69  g->out ){.    di
da60: 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41  splayStatLine(pA
da70: 72 67 2c 20 22 4d 65 6d 6f 72 79 20 55 73 65 64  rg, "Memory Used
da80: 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64  :",.       "%lld
da90: 20 28 6d 61 78 20 25 6c 6c 64 29 20 62 79 74 65   (max %lld) byte
daa0: 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55  s", SQLITE_STATU
dab0: 53 5f 4d 45 4d 4f 52 59 5f 55 53 45 44 2c 20 62  S_MEMORY_USED, b
dac0: 52 65 73 65 74 29 3b 0a 20 20 20 20 64 69 73 70  Reset);.    disp
dad0: 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72 67  layStatLine(pArg
dae0: 2c 20 22 4e 75 6d 62 65 72 20 6f 66 20 4f 75 74  , "Number of Out
daf0: 73 74 61 6e 64 69 6e 67 20 41 6c 6c 6f 63 61 74  standing Allocat
db00: 69 6f 6e 73 3a 22 2c 0a 20 20 20 20 20 20 20 22  ions:",.       "
db10: 25 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29 22  %lld (max %lld)"
db20: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  , SQLITE_STATUS_
db30: 4d 41 4c 4c 4f 43 5f 43 4f 55 4e 54 2c 20 62 52  MALLOC_COUNT, bR
db40: 65 73 65 74 29 3b 0a 20 20 20 20 69 66 28 20 70  eset);.    if( p
db50: 41 72 67 2d 3e 73 68 65 6c 6c 46 6c 67 73 20 26  Arg->shellFlgs &
db60: 20 53 48 46 4c 47 5f 50 61 67 65 63 61 63 68 65   SHFLG_Pagecache
db70: 20 29 7b 0a 20 20 20 20 20 20 64 69 73 70 6c 61   ){.      displa
db80: 79 53 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20  yStatLine(pArg, 
db90: 22 4e 75 6d 62 65 72 20 6f 66 20 50 63 61 63 68  "Number of Pcach
dba0: 65 20 50 61 67 65 73 20 55 73 65 64 3a 22 2c 0a  e Pages Used:",.
dbb0: 20 20 20 20 20 20 20 20 20 22 25 6c 6c 64 20 28           "%lld (
dbc0: 6d 61 78 20 25 6c 6c 64 29 20 70 61 67 65 73 22  max %lld) pages"
dbd0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  , SQLITE_STATUS_
dbe0: 50 41 47 45 43 41 43 48 45 5f 55 53 45 44 2c 20  PAGECACHE_USED, 
dbf0: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 7d 0a 20  bReset);.    }. 
dc00: 20 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69     displayStatLi
dc10: 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d 62 65 72  ne(pArg, "Number
dc20: 20 6f 66 20 50 63 61 63 68 65 20 4f 76 65 72 66   of Pcache Overf
dc30: 6c 6f 77 20 42 79 74 65 73 3a 22 2c 0a 20 20 20  low Bytes:",.   
dc40: 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25      "%lld (max %
dc50: 6c 6c 64 29 20 62 79 74 65 73 22 2c 20 53 51 4c  lld) bytes", SQL
dc60: 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43  ITE_STATUS_PAGEC
dc70: 41 43 48 45 5f 4f 56 45 52 46 4c 4f 57 2c 20 62  ACHE_OVERFLOW, b
dc80: 52 65 73 65 74 29 3b 0a 20 20 20 20 69 66 28 20  Reset);.    if( 
dc90: 70 41 72 67 2d 3e 73 68 65 6c 6c 46 6c 67 73 20  pArg->shellFlgs 
dca0: 26 20 53 48 46 4c 47 5f 53 63 72 61 74 63 68 20  & SHFLG_Scratch 
dcb0: 29 7b 0a 20 20 20 20 20 20 64 69 73 70 6c 61 79  ){.      display
dcc0: 53 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20 22  StatLine(pArg, "
dcd0: 4e 75 6d 62 65 72 20 6f 66 20 53 63 72 61 74 63  Number of Scratc
dce0: 68 20 41 6c 6c 6f 63 61 74 69 6f 6e 73 20 55 73  h Allocations Us
dcf0: 65 64 3a 22 2c 0a 20 20 20 20 20 20 20 20 20 22  ed:",.         "
dd00: 25 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29 22  %lld (max %lld)"
dd10: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  , SQLITE_STATUS_
dd20: 53 43 52 41 54 43 48 5f 55 53 45 44 2c 20 62 52  SCRATCH_USED, bR
dd30: 65 73 65 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20  eset);.    }.   
dd40: 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65   displayStatLine
dd50: 28 70 41 72 67 2c 20 22 4e 75 6d 62 65 72 20 6f  (pArg, "Number o
dd60: 66 20 53 63 72 61 74 63 68 20 4f 76 65 72 66 6c  f Scratch Overfl
dd70: 6f 77 20 42 79 74 65 73 3a 22 2c 0a 20 20 20 20  ow Bytes:",.    
dd80: 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25 6c     "%lld (max %l
dd90: 6c 64 29 20 62 79 74 65 73 22 2c 20 53 51 4c 49  ld) bytes", SQLI
dda0: 54 45 5f 53 54 41 54 55 53 5f 53 43 52 41 54 43  TE_STATUS_SCRATC
ddb0: 48 5f 4f 56 45 52 46 4c 4f 57 2c 20 62 52 65 73  H_OVERFLOW, bRes
ddc0: 65 74 29 3b 0a 20 20 20 20 64 69 73 70 6c 61 79  et);.    display
ddd0: 53 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20 22  StatLine(pArg, "
dde0: 4c 61 72 67 65 73 74 20 41 6c 6c 6f 63 61 74 69  Largest Allocati
ddf0: 6f 6e 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c  on:",.       "%l
de00: 6c 64 20 62 79 74 65 73 22 2c 20 53 51 4c 49 54  ld bytes", SQLIT
de10: 45 5f 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f  E_STATUS_MALLOC_
de20: 53 49 5a 45 2c 20 62 52 65 73 65 74 29 3b 0a 20  SIZE, bReset);. 
de30: 20 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69     displayStatLi
de40: 6e 65 28 70 41 72 67 2c 20 22 4c 61 72 67 65 73  ne(pArg, "Larges
de50: 74 20 50 63 61 63 68 65 20 41 6c 6c 6f 63 61 74  t Pcache Allocat
de60: 69 6f 6e 3a 22 2c 0a 20 20 20 20 20 20 20 22 25  ion:",.       "%
de70: 6c 6c 64 20 62 79 74 65 73 22 2c 20 53 51 4c 49  lld bytes", SQLI
de80: 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41  TE_STATUS_PAGECA
de90: 43 48 45 5f 53 49 5a 45 2c 20 62 52 65 73 65 74  CHE_SIZE, bReset
dea0: 29 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74  );.    displaySt
deb0: 61 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4c 61  atLine(pArg, "La
dec0: 72 67 65 73 74 20 53 63 72 61 74 63 68 20 41 6c  rgest Scratch Al
ded0: 6c 6f 63 61 74 69 6f 6e 3a 22 2c 0a 20 20 20 20  location:",.    
dee0: 20 20 20 22 25 6c 6c 64 20 62 79 74 65 73 22 2c     "%lld bytes",
def0: 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 53   SQLITE_STATUS_S
df00: 43 52 41 54 43 48 5f 53 49 5a 45 2c 20 62 52 65  CRATCH_SIZE, bRe
df10: 73 65 74 29 3b 0a 23 69 66 64 65 66 20 59 59 54  set);.#ifdef YYT
df20: 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
df30: 48 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  H.    displaySta
df40: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 44 65 65  tLine(pArg, "Dee
df50: 70 65 73 74 20 50 61 72 73 65 72 20 53 74 61 63  pest Parser Stac
df60: 6b 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c  k:",.       "%ll
df70: 64 20 28 6d 61 78 20 25 6c 6c 64 29 22 2c 20 53  d (max %lld)", S
df80: 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 52  QLITE_STATUS_PAR
df90: 53 45 52 5f 53 54 41 43 4b 2c 20 62 52 65 73 65  SER_STACK, bRese
dfa0: 74 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 0a  t);.#endif.  }..
dfb0: 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70 41    if( pArg && pA
dfc0: 72 67 2d 3e 6f 75 74 20 26 26 20 64 62 20 29 7b  rg->out && db ){
dfd0: 0a 20 20 20 20 69 66 28 20 70 41 72 67 2d 3e 73  .    if( pArg->s
dfe0: 68 65 6c 6c 46 6c 67 73 20 26 20 53 48 46 4c 47  hellFlgs & SHFLG
dff0: 5f 4c 6f 6f 6b 61 73 69 64 65 20 29 7b 0a 20 20  _Lookaside ){.  
e000: 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75      iHiwtr = iCu
e010: 72 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 73 71  r = -1;.      sq
e020: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
e030: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
e040: 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 55 53  TUS_LOOKASIDE_US
e050: 45 44 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ED,.            
e060: 20 20 20 20 20 20 20 20 20 20 20 20 26 69 43 75              &iCu
e070: 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65 73  r, &iHiwtr, bRes
e080: 65 74 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  et);.      raw_p
e090: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
e0b0: 4c 6f 6f 6b 61 73 69 64 65 20 53 6c 6f 74 73 20  Lookaside Slots 
e0c0: 55 73 65 64 3a 20 20 20 20 20 20 20 20 20 20 20  Used:           
e0d0: 20 20 20 20 20 25 64 20 28 6d 61 78 20 25 64 29       %d (max %d)
e0e0: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
e0f0: 20 20 20 69 43 75 72 2c 20 69 48 69 77 74 72 29     iCur, iHiwtr)
e100: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
e110: 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51  db_status(db, SQ
e120: 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f  LITE_DBSTATUS_LO
e130: 4f 4b 41 53 49 44 45 5f 48 49 54 2c 0a 20 20 20  OKASIDE_HIT,.   
e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e150: 20 20 20 20 20 26 69 43 75 72 2c 20 26 69 48 69       &iCur, &iHi
e160: 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20  wtr, bReset);.  
e170: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
e180: 41 72 67 2d 3e 6f 75 74 2c 20 22 53 75 63 63 65  Arg->out, "Succe
e190: 73 73 66 75 6c 20 6c 6f 6f 6b 61 73 69 64 65 20  ssful lookaside 
e1a0: 61 74 74 65 6d 70 74 73 3a 20 20 20 20 20 20 20  attempts:       
e1b0: 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  %d\n",.         
e1c0: 20 20 20 20 20 69 48 69 77 74 72 29 3b 0a 20 20       iHiwtr);.  
e1d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e1e0: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e1f0: 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53  _DBSTATUS_LOOKAS
e200: 49 44 45 5f 4d 49 53 53 5f 53 49 5a 45 2c 0a 20  IDE_MISS_SIZE,. 
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e220: 20 20 20 20 20 20 20 26 69 43 75 72 2c 20 26 69         &iCur, &i
e230: 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a  Hiwtr, bReset);.
e240: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
e250: 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f  (pArg->out, "Loo
e260: 6b 61 73 69 64 65 20 66 61 69 6c 75 72 65 73 20  kaside failures 
e270: 64 75 65 20 74 6f 20 73 69 7a 65 3a 20 20 20 20  due to size:    
e280: 20 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20    %d\n",.       
e290: 20 20 20 20 20 20 20 69 48 69 77 74 72 29 3b 0a         iHiwtr);.
e2a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62        sqlite3_db
e2b0: 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49  _status(db, SQLI
e2c0: 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b  TE_DBSTATUS_LOOK
e2d0: 41 53 49 44 45 5f 4d 49 53 53 5f 46 55 4c 4c 2c  ASIDE_MISS_FULL,
e2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e2f0: 20 20 20 20 20 20 20 20 20 26 69 43 75 72 2c 20           &iCur, 
e300: 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29  &iHiwtr, bReset)
e310: 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  ;.      raw_prin
e320: 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c  tf(pArg->out, "L
e330: 6f 6f 6b 61 73 69 64 65 20 66 61 69 6c 75 72 65  ookaside failure
e340: 73 20 64 75 65 20 74 6f 20 4f 4f 4d 3a 20 20 20  s due to OOM:   
e350: 20 20 20 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20      %d\n",.     
e360: 20 20 20 20 20 20 20 20 20 69 48 69 77 74 72 29           iHiwtr)
e370: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 48 69 77  ;.    }.    iHiw
e380: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
e390: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e3a0: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e3b0: 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
e3c0: 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48  USED, &iCur, &iH
e3d0: 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20  iwtr, bReset);. 
e3e0: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
e3f0: 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 72 20  rg->out, "Pager 
e400: 48 65 61 70 20 55 73 61 67 65 3a 20 20 20 20 20  Heap Usage:     
e410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
e420: 64 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20  d bytes\n",.    
e430: 20 20 20 20 20 20 20 20 69 43 75 72 29 3b 0a 20          iCur);. 
e440: 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72     iHiwtr = iCur
e450: 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74   = -1;.    sqlit
e460: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c  e3_db_status(db,
e470: 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
e480: 5f 43 41 43 48 45 5f 48 49 54 2c 20 26 69 43 75  _CACHE_HIT, &iCu
e490: 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b 0a  r, &iHiwtr, 1);.
e4a0: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
e4b0: 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 20  Arg->out, "Page 
e4c0: 63 61 63 68 65 20 68 69 74 73 3a 20 20 20 20 20  cache hits:     
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4e0: 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20  %d\n", iCur);.  
e4f0: 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20    iHiwtr = iCur 
e500: 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  = -1;.    sqlite
e510: 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20  3_db_status(db, 
e520: 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
e530: 43 41 43 48 45 5f 4d 49 53 53 2c 20 26 69 43 75  CACHE_MISS, &iCu
e540: 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b 0a  r, &iHiwtr, 1);.
e550: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
e560: 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 20  Arg->out, "Page 
e570: 63 61 63 68 65 20 6d 69 73 73 65 73 3a 20 20 20  cache misses:   
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e590: 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20  %d\n", iCur);.  
e5a0: 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20    iHiwtr = iCur 
e5b0: 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  = -1;.    sqlite
e5c0: 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20  3_db_status(db, 
e5d0: 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
e5e0: 43 41 43 48 45 5f 57 52 49 54 45 2c 20 26 69 43  CACHE_WRITE, &iC
e5f0: 75 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b  ur, &iHiwtr, 1);
e600: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e610: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65  pArg->out, "Page
e620: 20 63 61 63 68 65 20 77 72 69 74 65 73 3a 20 20   cache writes:  
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e640: 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20   %d\n", iCur);. 
e650: 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72     iHiwtr = iCur
e660: 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74   = -1;.    sqlit
e670: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c  e3_db_status(db,
e680: 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
e690: 5f 53 43 48 45 4d 41 5f 55 53 45 44 2c 20 26 69  _SCHEMA_USED, &i
e6a0: 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52  Cur, &iHiwtr, bR
e6b0: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
e6c0: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e6d0: 20 22 53 63 68 65 6d 61 20 48 65 61 70 20 55 73   "Schema Heap Us
e6e0: 61 67 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  age:            
e6f0: 20 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c         %d bytes\
e700: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
e710: 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74  iCur);.    iHiwt
e720: 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20  r = iCur = -1;. 
e730: 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74     sqlite3_db_st
e740: 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f  atus(db, SQLITE_
e750: 44 42 53 54 41 54 55 53 5f 53 54 4d 54 5f 55 53  DBSTATUS_STMT_US
e760: 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77  ED, &iCur, &iHiw
e770: 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  tr, bReset);.   
e780: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
e790: 2d 3e 6f 75 74 2c 20 22 53 74 61 74 65 6d 65 6e  ->out, "Statemen
e7a0: 74 20 48 65 61 70 2f 4c 6f 6f 6b 61 73 69 64 65  t Heap/Lookaside
e7b0: 20 55 73 61 67 65 3a 20 20 20 20 20 20 25 64 20   Usage:      %d 
e7c0: 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20 20 20  bytes\n",.      
e7d0: 20 20 20 20 20 20 69 43 75 72 29 3b 0a 20 20 7d        iCur);.  }
e7e0: 0a 0a 20 20 69 66 28 20 70 41 72 67 20 26 26 20  ..  if( pArg && 
e7f0: 70 41 72 67 2d 3e 6f 75 74 20 26 26 20 64 62 20  pArg->out && db 
e800: 26 26 20 70 41 72 67 2d 3e 70 53 74 6d 74 20 29  && pArg->pStmt )
e810: 7b 0a 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c  {.    iCur = sql
e820: 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73  ite3_stmt_status
e830: 28 70 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51  (pArg->pStmt, SQ
e840: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
e850: 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 2c 0a 20  FULLSCAN_STEP,. 
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 52                bR
e880: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
e890: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e8a0: 20 22 46 75 6c 6c 73 63 61 6e 20 53 74 65 70 73   "Fullscan Steps
e8b0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
e8c0: 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43         %d\n", iC
e8d0: 75 72 29 3b 0a 20 20 20 20 69 43 75 72 20 3d 20  ur);.    iCur = 
e8e0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
e8f0: 74 75 73 28 70 41 72 67 2d 3e 70 53 74 6d 74 2c  tus(pArg->pStmt,
e900: 20 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54   SQLITE_STMTSTAT
e910: 55 53 5f 53 4f 52 54 2c 20 62 52 65 73 65 74 29  US_SORT, bReset)
e920: 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  ;.    raw_printf
e930: 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 53 6f 72  (pArg->out, "Sor
e940: 74 20 4f 70 65 72 61 74 69 6f 6e 73 3a 20 20 20  t Operations:   
e950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e960: 20 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a    %d\n", iCur);.
e970: 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69 74      iCur = sqlit
e980: 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 70  e3_stmt_status(p
e990: 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49  Arg->pStmt, SQLI
e9a0: 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 41 55  TE_STMTSTATUS_AU
e9b0: 54 4f 49 4e 44 45 58 2c 62 52 65 73 65 74 29 3b  TOINDEX,bReset);
e9c0: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e9d0: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 41 75 74 6f  pArg->out, "Auto
e9e0: 69 6e 64 65 78 20 49 6e 73 65 72 74 73 3a 20 20  index Inserts:  
e9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea00: 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20   %d\n", iCur);. 
ea10: 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69 74 65     iCur = sqlite
ea20: 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 70 41  3_stmt_status(pA
ea30: 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54  rg->pStmt, SQLIT
ea40: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f  E_STMTSTATUS_VM_
ea50: 53 54 45 50 2c 20 62 52 65 73 65 74 29 3b 0a 20  STEP, bReset);. 
ea60: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
ea70: 72 67 2d 3e 6f 75 74 2c 20 22 56 69 72 74 75 61  rg->out, "Virtua
ea80: 6c 20 4d 61 63 68 69 6e 65 20 53 74 65 70 73 3a  l Machine Steps:
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
eaa0: 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 7d  d\n", iCur);.  }
eab0: 0a 0a 23 69 66 64 65 66 20 5f 5f 6c 69 6e 75 78  ..#ifdef __linux
eac0: 5f 5f 0a 20 20 64 69 73 70 6c 61 79 4c 69 6e 75  __.  displayLinu
ead0: 78 49 6f 53 74 61 74 73 28 70 41 72 67 2d 3e 6f  xIoStats(pArg->o
eae0: 75 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  ut);.#endif..  /
eaf0: 2a 20 44 6f 20 6e 6f 74 20 72 65 6d 6f 76 65 20  * Do not remove 
eb00: 74 68 69 73 20 6d 61 63 68 69 6e 65 20 72 65 61  this machine rea
eb10: 64 61 62 6c 65 20 63 6f 6d 6d 65 6e 74 3a 20 65  dable comment: e
eb20: 78 74 72 61 2d 73 74 61 74 73 2d 6f 75 74 70 75  xtra-stats-outpu
eb30: 74 2d 68 65 72 65 20 2a 2f 0a 0a 20 20 72 65 74  t-here */..  ret
eb40: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
eb50: 44 69 73 70 6c 61 79 20 73 63 61 6e 20 73 74 61  Display scan sta
eb60: 74 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ts..*/.static vo
eb70: 69 64 20 64 69 73 70 6c 61 79 5f 73 63 61 6e 73  id display_scans
eb80: 74 61 74 73 28 0a 20 20 73 71 6c 69 74 65 33 20  tats(.  sqlite3 
eb90: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
eba0: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
ebb0: 61 73 65 20 74 6f 20 71 75 65 72 79 20 2a 2f 0a  ase to query */.
ebc0: 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 41    ShellState *pA
ebd0: 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20  rg              
ebe0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
ebf0: 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 29 7b  ShellState */.){
ec00: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
ec10: 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
ec20: 53 54 41 54 55 53 0a 20 20 55 4e 55 53 45 44 5f  STATUS.  UNUSED_
ec30: 50 41 52 41 4d 45 54 45 52 28 64 62 29 3b 0a 20  PARAMETER(db);. 
ec40: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
ec50: 52 28 70 41 72 67 29 3b 0a 23 65 6c 73 65 0a 20  R(pArg);.#else. 
ec60: 20 69 6e 74 20 69 2c 20 6b 2c 20 6e 2c 20 6d 78   int i, k, n, mx
ec70: 3b 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70  ;.  raw_printf(p
ec80: 41 72 67 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d  Arg->out, "-----
ec90: 2d 2d 2d 20 73 63 61 6e 73 74 61 74 73 20 2d 2d  --- scanstats --
eca0: 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 20 20 6d 78  ------\n");.  mx
ecb0: 20 3d 20 30 3b 0a 20 20 66 6f 72 28 6b 3d 30 3b   = 0;.  for(k=0;
ecc0: 20 6b 3c 3d 6d 78 3b 20 6b 2b 2b 29 7b 0a 20 20   k<=mx; k++){.  
ecd0: 20 20 64 6f 75 62 6c 65 20 72 45 73 74 4c 6f 6f    double rEstLoo
ece0: 70 20 3d 20 31 2e 30 3b 0a 20 20 20 20 66 6f 72  p = 1.0;.    for
ecf0: 28 69 3d 6e 3d 30 3b 20 31 3b 20 69 2b 2b 29 7b  (i=n=0; 1; i++){
ed00: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
ed10: 74 6d 74 20 2a 70 20 3d 20 70 41 72 67 2d 3e 70  tmt *p = pArg->p
ed20: 53 74 6d 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  Stmt;.      sqli
ed30: 74 65 33 5f 69 6e 74 36 34 20 6e 4c 6f 6f 70 2c  te3_int64 nLoop,
ed40: 20 6e 56 69 73 69 74 3b 0a 20 20 20 20 20 20 64   nVisit;.      d
ed50: 6f 75 62 6c 65 20 72 45 73 74 3b 0a 20 20 20 20  ouble rEst;.    
ed60: 20 20 69 6e 74 20 69 53 69 64 3b 0a 20 20 20 20    int iSid;.    
ed70: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
ed80: 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20 69 66  xplain;.      if
ed90: 28 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73  ( sqlite3_stmt_s
eda0: 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20  canstatus(p, i, 
edb0: 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f  SQLITE_SCANSTAT_
edc0: 4e 4c 4f 4f 50 2c 20 28 76 6f 69 64 2a 29 26 6e  NLOOP, (void*)&n
edd0: 4c 6f 6f 70 29 20 29 7b 0a 20 20 20 20 20 20 20  Loop) ){.       
ede0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
edf0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74        sqlite3_st
ee00: 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c  mt_scanstatus(p,
ee10: 20 69 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53   i, SQLITE_SCANS
ee20: 54 41 54 5f 53 45 4c 45 43 54 49 44 2c 20 28 76  TAT_SELECTID, (v
ee30: 6f 69 64 2a 29 26 69 53 69 64 29 3b 0a 20 20 20  oid*)&iSid);.   
ee40: 20 20 20 69 66 28 20 69 53 69 64 3e 6d 78 20 29     if( iSid>mx )
ee50: 20 6d 78 20 3d 20 69 53 69 64 3b 0a 20 20 20 20   mx = iSid;.    
ee60: 20 20 69 66 28 20 69 53 69 64 21 3d 6b 20 29 20    if( iSid!=k ) 
ee70: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
ee80: 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  if( n==0 ){.    
ee90: 20 20 20 20 72 45 73 74 4c 6f 6f 70 20 3d 20 28      rEstLoop = (
eea0: 64 6f 75 62 6c 65 29 6e 4c 6f 6f 70 3b 0a 20 20  double)nLoop;.  
eeb0: 20 20 20 20 20 20 69 66 28 20 6b 3e 30 20 29 20        if( k>0 ) 
eec0: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
eed0: 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20  >out, "-------- 
eee0: 73 75 62 71 75 65 72 79 20 25 64 20 2d 2d 2d 2d  subquery %d ----
eef0: 2d 2d 2d 5c 6e 22 2c 20 6b 29 3b 0a 20 20 20 20  ---\n", k);.    
ef00: 20 20 7d 0a 20 20 20 20 20 20 6e 2b 2b 3b 0a 20    }.      n++;. 
ef10: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d       sqlite3_stm
ef20: 74 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c 20  t_scanstatus(p, 
ef30: 69 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54  i, SQLITE_SCANST
ef40: 41 54 5f 4e 56 49 53 49 54 2c 20 28 76 6f 69 64  AT_NVISIT, (void
ef50: 2a 29 26 6e 56 69 73 69 74 29 3b 0a 20 20 20 20  *)&nVisit);.    
ef60: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73    sqlite3_stmt_s
ef70: 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20  canstatus(p, i, 
ef80: 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f  SQLITE_SCANSTAT_
ef90: 45 53 54 2c 20 28 76 6f 69 64 2a 29 26 72 45 73  EST, (void*)&rEs
efa0: 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
efb0: 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75  3_stmt_scanstatu
efc0: 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45 5f 53  s(p, i, SQLITE_S
efd0: 43 41 4e 53 54 41 54 5f 45 58 50 4c 41 49 4e 2c  CANSTAT_EXPLAIN,
efe0: 20 28 76 6f 69 64 2a 29 26 7a 45 78 70 6c 61 69   (void*)&zExplai
eff0: 6e 29 3b 0a 20 20 20 20 20 20 75 74 66 38 5f 70  n);.      utf8_p
f000: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
f010: 20 22 4c 6f 6f 70 20 25 32 64 3a 20 25 73 5c 6e   "Loop %2d: %s\n
f020: 22 2c 20 6e 2c 20 7a 45 78 70 6c 61 69 6e 29 3b  ", n, zExplain);
f030: 0a 20 20 20 20 20 20 72 45 73 74 4c 6f 6f 70 20  .      rEstLoop 
f040: 2a 3d 20 72 45 73 74 3b 0a 20 20 20 20 20 20 72  *= rEst;.      r
f050: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
f060: 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20 20 22  out,.          "
f070: 20 20 20 20 20 20 20 20 20 6e 4c 6f 6f 70 3d 25           nLoop=%
f080: 2d 38 6c 6c 64 20 6e 52 6f 77 3d 25 2d 38 6c 6c  -8lld nRow=%-8ll
f090: 64 20 65 73 74 52 6f 77 3d 25 2d 38 6c 6c 64 20  d estRow=%-8lld 
f0a0: 65 73 74 52 6f 77 2f 4c 6f 6f 70 3d 25 2d 38 67  estRow/Loop=%-8g
f0b0: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 6e  \n",.          n
f0c0: 4c 6f 6f 70 2c 20 6e 56 69 73 69 74 2c 20 28 73  Loop, nVisit, (s
f0d0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 28 72 45  qlite3_int64)(rE
f0e0: 73 74 4c 6f 6f 70 2b 30 2e 35 29 2c 20 72 45 73  stLoop+0.5), rEs
f0f0: 74 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d  t.      );.    }
f100: 0a 20 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e 74  .  }.  raw_print
f110: 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 2d 2d  f(pArg->out, "--
f120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 23  ---------\n");.#
f140: 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  endif.}../*.** P
f150: 61 72 61 6d 65 74 65 72 20 61 7a 41 72 72 61 79  arameter azArray
f160: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 7a 65 72   points to a zer
f170: 6f 2d 74 65 72 6d 69 6e 61 74 65 64 20 61 72 72  o-terminated arr
f180: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 2e 20 7a  ay of strings. z
f190: 53 74 72 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  Str.** points to
f1a0: 20 61 20 73 69 6e 67 6c 65 20 6e 75 6c 2d 74 65   a single nul-te
f1b0: 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67 2e  rminated string.
f1c0: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
f1d0: 20 69 66 20 7a 53 74 72 0a 2a 2a 20 69 73 20 65   if zStr.** is e
f1e0: 71 75 61 6c 2c 20 61 63 63 6f 72 64 69 6e 67 20  qual, according 
f1f0: 74 6f 20 73 74 72 63 6d 70 28 29 2c 20 74 6f 20  to strcmp(), to 
f200: 61 6e 79 20 6f 66 20 74 68 65 20 73 74 72 69 6e  any of the strin
f210: 67 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 2e  gs in the array.
f220: 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72  .** Otherwise, r
f230: 65 74 75 72 6e 20 7a 65 72 6f 2e 0a 2a 2f 0a 73  eturn zero..*/.s
f240: 74 61 74 69 63 20 69 6e 74 20 73 74 72 5f 69 6e  tatic int str_in
f250: 5f 61 72 72 61 79 28 63 6f 6e 73 74 20 63 68 61  _array(const cha
f260: 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73 74 20 63  r *zStr, const c
f270: 68 61 72 20 2a 2a 61 7a 41 72 72 61 79 29 7b 0a  har **azArray){.
f280: 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69    int i;.  for(i
f290: 3d 30 3b 20 61 7a 41 72 72 61 79 5b 69 5d 3b 20  =0; azArray[i]; 
f2a0: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 30 3d  i++){.    if( 0=
f2b0: 3d 73 74 72 63 6d 70 28 7a 53 74 72 2c 20 61 7a  =strcmp(zStr, az
f2c0: 41 72 72 61 79 5b 69 5d 29 20 29 20 72 65 74 75  Array[i]) ) retu
f2d0: 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75  rn 1;.  }.  retu
f2e0: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  rn 0;.}../*.** I
f2f0: 66 20 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  f compiled state
f300: 6d 65 6e 74 20 70 53 71 6c 20 61 70 70 65 61 72  ment pSql appear
f310: 73 20 74 6f 20 62 65 20 61 6e 20 45 58 50 4c 41  s to be an EXPLA
f320: 49 4e 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c  IN statement, al
f330: 6c 6f 63 61 74 65 0a 2a 2a 20 61 6e 64 20 70 6f  locate.** and po
f340: 70 75 6c 61 74 65 20 74 68 65 20 53 68 65 6c 6c  pulate the Shell
f350: 53 74 61 74 65 2e 61 69 49 6e 64 65 6e 74 5b 5d  State.aiIndent[]
f360: 20 61 72 72 61 79 20 77 69 74 68 20 74 68 65 20   array with the 
f370: 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 73 70 61  number of.** spa
f380: 63 65 73 20 65 61 63 68 20 6f 70 63 6f 64 65 20  ces each opcode 
f390: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
f3a0: 65 64 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ed before it is 
f3b0: 6f 75 74 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  output..**.** Th
f3c0: 65 20 69 6e 64 65 6e 74 69 6e 67 20 72 75 6c 65  e indenting rule
f3d0: 73 20 61 72 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  s are:.**.**    
f3e0: 20 2a 20 46 6f 72 20 65 61 63 68 20 22 4e 65 78   * For each "Nex
f3f0: 74 22 2c 20 22 50 72 65 76 22 2c 20 22 56 4e 65  t", "Prev", "VNe
f400: 78 74 22 20 6f 72 20 22 56 50 72 65 76 22 20 69  xt" or "VPrev" i
f410: 6e 73 74 72 75 63 74 69 6f 6e 2c 20 69 6e 64 65  nstruction, inde
f420: 6e 74 0a 2a 2a 20 20 20 20 20 20 20 61 6c 6c 20  nt.**       all 
f430: 6f 70 63 6f 64 65 73 20 74 68 61 74 20 6f 63 63  opcodes that occ
f440: 75 72 20 62 65 74 77 65 65 6e 20 74 68 65 20 70  ur between the p
f450: 32 20 6a 75 6d 70 20 64 65 73 74 69 6e 61 74 69  2 jump destinati
f460: 6f 6e 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64  on and the opcod
f470: 65 0a 2a 2a 20 20 20 20 20 20 20 69 74 73 65 6c  e.**       itsel
f480: 66 20 62 79 20 32 20 73 70 61 63 65 73 2e 0a 2a  f by 2 spaces..*
f490: 2a 0a 2a 2a 20 20 20 20 20 2a 20 46 6f 72 20 65  *.**     * For e
f4a0: 61 63 68 20 22 47 6f 74 6f 22 2c 20 69 66 20 74  ach "Goto", if t
f4b0: 68 65 20 6a 75 6d 70 20 64 65 73 74 69 6e 61 74  he jump destinat
f4c0: 69 6f 6e 20 69 73 20 65 61 72 6c 69 65 72 20 69  ion is earlier i
f4d0: 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  n the program.**
f4e0: 20 20 20 20 20 20 20 61 6e 64 20 65 6e 64 73 20         and ends 
f4f0: 6f 6e 20 6f 6e 65 20 6f 66 3a 0a 2a 2a 20 20 20  on one of:.**   
f500: 20 20 20 20 20 20 20 59 69 65 6c 64 20 20 53 65         Yield  Se
f510: 65 6b 47 74 20 20 53 65 65 6b 4c 74 20 20 52 6f  ekGt  SeekLt  Ro
f520: 77 53 65 74 52 65 61 64 20 20 52 65 77 69 6e 64  wSetRead  Rewind
f530: 0a 2a 2a 20 20 20 20 20 20 20 6f 72 20 69 66 20  .**       or if 
f540: 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  the P1 parameter
f550: 20 69 73 20 6f 6e 65 20 69 6e 73 74 65 61 64 20   is one instead 
f560: 6f 66 20 7a 65 72 6f 2c 0a 2a 2a 20 20 20 20 20  of zero,.**     
f570: 20 20 74 68 65 6e 20 69 6e 64 65 6e 74 20 61 6c    then indent al
f580: 6c 20 6f 70 63 6f 64 65 73 20 62 65 74 77 65 65  l opcodes betwee
f590: 6e 20 74 68 65 20 65 61 72 6c 69 65 72 20 69 6e  n the earlier in
f5a0: 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 20 20 20  struction.**    
f5b0: 20 20 20 61 6e 64 20 22 47 6f 74 6f 22 20 62 79     and "Goto" by
f5c0: 20 32 20 73 70 61 63 65 73 2e 0a 2a 2f 0a 73 74   2 spaces..*/.st
f5d0: 61 74 69 63 20 76 6f 69 64 20 65 78 70 6c 61 69  atic void explai
f5e0: 6e 5f 64 61 74 61 5f 70 72 65 70 61 72 65 28 53  n_data_prepare(S
f5f0: 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 73 71  hellState *p, sq
f600: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 71 6c  lite3_stmt *pSql
f610: 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ){.  const char 
f620: 2a 7a 53 71 6c 3b 20 20 20 20 20 20 20 20 20 20  *zSql;          
f630: 20 20 20 20 20 2f 2a 20 54 68 65 20 74 65 78 74       /* The text
f640: 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74   of the SQL stat
f650: 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ement */.  const
f660: 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
f670: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
f680: 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
f690: 68 69 73 20 69 73 20 61 6e 20 45 58 50 4c 41 49  his is an EXPLAI
f6a0: 4e 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 62 59 69  N */.  int *abYi
f6b0: 65 6c 64 20 3d 20 30 3b 20 20 20 20 20 20 20 20  eld = 0;        
f6c0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
f6d0: 66 20 6f 70 20 69 73 20 61 6e 20 4f 50 5f 59 69  f op is an OP_Yi
f6e0: 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c  eld */.  int nAl
f6f0: 6c 6f 63 20 3d 20 30 3b 20 20 20 20 20 20 20 20  loc = 0;        
f700: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
f710: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 70 2d  cated size of p-
f720: 3e 61 69 49 6e 64 65 6e 74 5b 5d 2c 20 61 62 59  >aiIndent[], abY
f730: 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 69 4f  ield */.  int iO
f740: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
f750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
f760: 65 78 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e 20  ex of operation 
f770: 69 6e 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b 5d  in p->aiIndent[]
f780: 20 2a 2f 0a 0a 20 20 63 6f 6e 73 74 20 63 68 61   */..  const cha
f790: 72 20 2a 61 7a 4e 65 78 74 5b 5d 20 3d 20 7b 20  r *azNext[] = { 
f7a0: 22 4e 65 78 74 22 2c 20 22 50 72 65 76 22 2c 20  "Next", "Prev", 
f7b0: 22 56 50 72 65 76 22 2c 20 22 56 4e 65 78 74 22  "VPrev", "VNext"
f7c0: 2c 20 22 53 6f 72 74 65 72 4e 65 78 74 22 2c 0a  , "SorterNext",.
f7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7e0: 20 20 20 20 20 20 20 20 20 20 20 22 4e 65 78 74             "Next
f7f0: 49 66 4f 70 65 6e 22 2c 20 22 50 72 65 76 49 66  IfOpen", "PrevIf
f800: 4f 70 65 6e 22 2c 20 30 20 7d 3b 0a 20 20 63 6f  Open", 0 };.  co
f810: 6e 73 74 20 63 68 61 72 20 2a 61 7a 59 69 65 6c  nst char *azYiel
f820: 64 5b 5d 20 3d 20 7b 20 22 59 69 65 6c 64 22 2c  d[] = { "Yield",
f830: 20 22 53 65 65 6b 4c 54 22 2c 20 22 53 65 65 6b   "SeekLT", "Seek
f840: 47 54 22 2c 20 22 52 6f 77 53 65 74 52 65 61 64  GT", "RowSetRead
f850: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
f860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
f870: 52 65 77 69 6e 64 22 2c 20 30 20 7d 3b 0a 20 20  Rewind", 0 };.  
f880: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 47 6f  const char *azGo
f890: 74 6f 5b 5d 20 3d 20 7b 20 22 47 6f 74 6f 22 2c  to[] = { "Goto",
f8a0: 20 30 20 7d 3b 0a 0a 20 20 2f 2a 20 54 72 79 20   0 };..  /* Try 
f8b0: 74 6f 20 66 69 67 75 72 65 20 6f 75 74 20 69 66  to figure out if
f8c0: 20 74 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20   this is really 
f8d0: 61 6e 20 45 58 50 4c 41 49 4e 20 73 74 61 74 65  an EXPLAIN state
f8e0: 6d 65 6e 74 2e 20 49 66 20 74 68 69 73 0a 20 20  ment. If this.  
f8f0: 2a 2a 20 63 61 6e 6e 6f 74 20 62 65 20 76 65 72  ** cannot be ver
f900: 69 66 69 65 64 2c 20 72 65 74 75 72 6e 20 65 61  ified, return ea
f910: 72 6c 79 2e 20 20 2a 2f 0a 20 20 69 66 28 20 73  rly.  */.  if( s
f920: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
f930: 75 6e 74 28 70 53 71 6c 29 21 3d 38 20 29 7b 0a  unt(pSql)!=8 ){.
f940: 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70      p->cMode = p
f950: 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 72 65 74 75  ->mode;.    retu
f960: 72 6e 3b 0a 20 20 7d 0a 20 20 7a 53 71 6c 20 3d  rn;.  }.  zSql =
f970: 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 70 53 71   sqlite3_sql(pSq
f980: 6c 29 3b 0a 20 20 69 66 28 20 7a 53 71 6c 3d 3d  l);.  if( zSql==
f990: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 66 6f  0 ) return;.  fo
f9a0: 72 28 7a 3d 7a 53 71 6c 3b 20 2a 7a 3d 3d 27 20  r(z=zSql; *z==' 
f9b0: 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 74 27 20 7c 7c  ' || *z=='\t' ||
f9c0: 20 2a 7a 3d 3d 27 5c 6e 27 20 7c 7c 20 2a 7a 3d   *z=='\n' || *z=
f9d0: 3d 27 5c 66 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 72  ='\f' || *z=='\r
f9e0: 27 3b 20 7a 2b 2b 29 3b 0a 20 20 69 66 28 20 73  '; z++);.  if( s
f9f0: 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28  qlite3_strnicmp(
fa00: 7a 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20 37 29  z, "explain", 7)
fa10: 20 29 7b 0a 20 20 20 20 70 2d 3e 63 4d 6f 64 65   ){.    p->cMode
fa20: 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20   = p->mode;.    
fa30: 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 66  return;.  }..  f
fa40: 6f 72 28 69 4f 70 3d 30 3b 20 53 51 4c 49 54 45  or(iOp=0; SQLITE
fa50: 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f 73 74  _ROW==sqlite3_st
fa60: 65 70 28 70 53 71 6c 29 3b 20 69 4f 70 2b 2b 29  ep(pSql); iOp++)
fa70: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
fa80: 20 69 6e 74 20 69 41 64 64 72 20 3d 20 73 71 6c   int iAddr = sql
fa90: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  ite3_column_int(
faa0: 70 53 71 6c 2c 20 30 29 3b 0a 20 20 20 20 63 6f  pSql, 0);.    co
fab0: 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 20 3d 20  nst char *zOp = 
fac0: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
fad0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
fae0: 28 70 53 71 6c 2c 20 31 29 3b 0a 0a 20 20 20 20  (pSql, 1);..    
faf0: 2f 2a 20 53 65 74 20 70 32 20 74 6f 20 74 68 65  /* Set p2 to the
fb00: 20 50 32 20 66 69 65 6c 64 20 6f 66 20 74 68 65   P2 field of the
fb10: 20 63 75 72 72 65 6e 74 20 6f 70 63 6f 64 65 2e   current opcode.
fb20: 20 54 68 65 6e 2c 20 61 73 73 75 6d 69 6e 67 20   Then, assuming 
fb30: 74 68 61 74 0a 20 20 20 20 2a 2a 20 70 32 20 69  that.    ** p2 i
fb40: 73 20 61 6e 20 69 6e 73 74 72 75 63 74 69 6f 6e  s an instruction
fb50: 20 61 64 64 72 65 73 73 2c 20 73 65 74 20 76 61   address, set va
fb60: 72 69 61 62 6c 65 20 70 32 6f 70 20 74 6f 20 74  riable p2op to t
fb70: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 61 74  he index of that
fb80: 0a 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74  .    ** instruct
fb90: 69 6f 6e 20 69 6e 20 74 68 65 20 61 69 49 6e 64  ion in the aiInd
fba0: 65 6e 74 5b 5d 20 61 72 72 61 79 2e 20 70 32 20  ent[] array. p2 
fbb0: 61 6e 64 20 70 32 6f 70 20 6d 61 79 20 62 65 20  and p2op may be 
fbc0: 64 69 66 66 65 72 65 6e 74 20 69 66 0a 20 20 20  different if.   
fbd0: 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
fbe0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 70  instruction is p
fbf0: 61 72 74 20 6f 66 20 61 20 73 75 62 2d 70 72 6f  art of a sub-pro
fc00: 67 72 61 6d 20 67 65 6e 65 72 61 74 65 64 20 62  gram generated b
fc10: 79 20 61 6e 0a 20 20 20 20 2a 2a 20 53 51 4c 20  y an.    ** SQL 
fc20: 74 72 69 67 67 65 72 20 6f 72 20 66 6f 72 65 69  trigger or forei
fc30: 67 6e 20 6b 65 79 2e 20 20 2a 2f 0a 20 20 20 20  gn key.  */.    
fc40: 69 6e 74 20 70 32 20 3d 20 73 71 6c 69 74 65 33  int p2 = sqlite3
fc50: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71 6c  _column_int(pSql
fc60: 2c 20 33 29 3b 0a 20 20 20 20 69 6e 74 20 70 32  , 3);.    int p2
fc70: 6f 70 20 3d 20 28 70 32 20 2b 20 28 69 4f 70 2d  op = (p2 + (iOp-
fc80: 69 41 64 64 72 29 29 3b 0a 0a 20 20 20 20 2f 2a  iAddr));..    /*
fc90: 20 47 72 6f 77 20 74 68 65 20 70 2d 3e 61 69 49   Grow the p->aiI
fca0: 6e 64 65 6e 74 20 61 72 72 61 79 20 61 73 20 72  ndent array as r
fcb0: 65 71 75 69 72 65 64 20 2a 2f 0a 20 20 20 20 69  equired */.    i
fcc0: 66 28 20 69 4f 70 3e 3d 6e 41 6c 6c 6f 63 20 29  f( iOp>=nAlloc )
fcd0: 7b 0a 20 20 20 20 20 20 69 66 28 20 69 4f 70 3d  {.      if( iOp=
fce0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
fcf0: 20 44 6f 20 66 75 72 74 68 65 72 20 76 65 72 66   Do further verf
fd00: 69 63 61 74 69 6f 6e 20 74 68 61 74 20 74 68 69  ication that thi
fd10: 73 20 69 73 20 65 78 70 6c 61 69 6e 20 6f 75 74  s is explain out
fd20: 70 75 74 2e 20 20 41 62 6f 72 74 20 69 66 0a 20  put.  Abort if. 
fd30: 20 20 20 20 20 20 20 2a 2a 20 69 74 20 69 73 20         ** it is 
fd40: 6e 6f 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  not */.        s
fd50: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
fd60: 20 2a 65 78 70 6c 61 69 6e 43 6f 6c 73 5b 5d 20   *explainCols[] 
fd70: 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 22  = {.           "
fd80: 61 64 64 72 22 2c 20 22 6f 70 63 6f 64 65 22 2c  addr", "opcode",
fd90: 20 22 70 31 22 2c 20 22 70 32 22 2c 20 22 70 33   "p1", "p2", "p3
fda0: 22 2c 20 22 70 34 22 2c 20 22 70 35 22 2c 20 22  ", "p4", "p5", "
fdb0: 63 6f 6d 6d 65 6e 74 22 20 7d 3b 0a 20 20 20 20  comment" };.    
fdc0: 20 20 20 20 69 6e 74 20 6a 6a 3b 0a 20 20 20 20      int jj;.    
fdd0: 20 20 20 20 66 6f 72 28 6a 6a 3d 30 3b 20 6a 6a      for(jj=0; jj
fde0: 3c 41 72 72 61 79 53 69 7a 65 28 65 78 70 6c 61  <ArraySize(expla
fdf0: 69 6e 43 6f 6c 73 29 3b 20 6a 6a 2b 2b 29 7b 0a  inCols); jj++){.
fe00: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73 74            if( st
fe10: 72 63 6d 70 28 73 71 6c 69 74 65 33 5f 63 6f 6c  rcmp(sqlite3_col
fe20: 75 6d 6e 5f 6e 61 6d 65 28 70 53 71 6c 2c 6a 6a  umn_name(pSql,jj
fe30: 29 2c 65 78 70 6c 61 69 6e 43 6f 6c 73 5b 6a 6a  ),explainCols[jj
fe40: 5d 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ])!=0 ){.       
fe50: 20 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20       p->cMode = 
fe60: 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20 20  p->mode;.       
fe70: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
fe80: 65 74 28 70 53 71 6c 29 3b 0a 20 20 20 20 20 20  et(pSql);.      
fe90: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
fea0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
feb0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
fec0: 20 20 6e 41 6c 6c 6f 63 20 2b 3d 20 31 30 30 3b    nAlloc += 100;
fed0: 0a 20 20 20 20 20 20 70 2d 3e 61 69 49 6e 64 65  .      p->aiInde
fee0: 6e 74 20 3d 20 28 69 6e 74 2a 29 73 71 6c 69 74  nt = (int*)sqlit
fef0: 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 70 2d 3e  e3_realloc64(p->
ff00: 61 69 49 6e 64 65 6e 74 2c 20 6e 41 6c 6c 6f 63  aiIndent, nAlloc
ff10: 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 20  *sizeof(int));. 
ff20: 20 20 20 20 20 61 62 59 69 65 6c 64 20 3d 20 28       abYield = (
ff30: 69 6e 74 2a 29 73 71 6c 69 74 65 33 5f 72 65 61  int*)sqlite3_rea
ff40: 6c 6c 6f 63 36 34 28 61 62 59 69 65 6c 64 2c 20  lloc64(abYield, 
ff50: 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f 66 28 69 6e  nAlloc*sizeof(in
ff60: 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  t));.    }.    a
ff70: 62 59 69 65 6c 64 5b 69 4f 70 5d 20 3d 20 73 74  bYield[iOp] = st
ff80: 72 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c 20  r_in_array(zOp, 
ff90: 61 7a 59 69 65 6c 64 29 3b 0a 20 20 20 20 70 2d  azYield);.    p-
ffa0: 3e 61 69 49 6e 64 65 6e 74 5b 69 4f 70 5d 20 3d  >aiIndent[iOp] =
ffb0: 20 30 3b 0a 20 20 20 20 70 2d 3e 6e 49 6e 64 65   0;.    p->nInde
ffc0: 6e 74 20 3d 20 69 4f 70 2b 31 3b 0a 0a 20 20 20  nt = iOp+1;..   
ffd0: 20 69 66 28 20 73 74 72 5f 69 6e 5f 61 72 72 61   if( str_in_arra
ffe0: 79 28 7a 4f 70 2c 20 61 7a 4e 65 78 74 29 20 29  y(zOp, azNext) )
fff0: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 70 32  {.      for(i=p2
10000 6f 70 3b 20 69 3c 69 4f 70 3b 20 69 2b 2b 29 20  op; i<iOp; i++) 
10010 70 2d 3e 61 69 49 6e 64 65 6e 74 5b 69 5d 20 2b  p->aiIndent[i] +
10020 3d 20 32 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  = 2;.    }.    i
10030 66 28 20 73 74 72 5f 69 6e 5f 61 72 72 61 79 28  f( str_in_array(
10040 7a 4f 70 2c 20 61 7a 47 6f 74 6f 29 20 26 26 20  zOp, azGoto) && 
10050 70 32 6f 70 3c 70 2d 3e 6e 49 6e 64 65 6e 74 0a  p2op<p->nIndent.
10060 20 20 20 20 20 26 26 20 28 61 62 59 69 65 6c 64       && (abYield
10070 5b 70 32 6f 70 5d 20 7c 7c 20 73 71 6c 69 74 65  [p2op] || sqlite
10080 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71  3_column_int(pSq
10090 6c 2c 20 32 29 29 0a 20 20 20 20 29 7b 0a 20 20  l, 2)).    ){.  
100a0 20 20 20 20 66 6f 72 28 69 3d 70 32 6f 70 3b 20      for(i=p2op; 
100b0 69 3c 69 4f 70 3b 20 69 2b 2b 29 20 70 2d 3e 61  i<iOp; i++) p->a
100c0 69 49 6e 64 65 6e 74 5b 69 5d 20 2b 3d 20 32 3b  iIndent[i] += 2;
100d0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 70 2d  .    }.  }..  p-
100e0 3e 69 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 20 20  >iIndent = 0;.  
100f0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 62 59  sqlite3_free(abY
10100 69 65 6c 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  ield);.  sqlite3
10110 5f 72 65 73 65 74 28 70 53 71 6c 29 3b 0a 7d 0a  _reset(pSql);.}.
10120 0a 2f 2a 0a 2a 2a 20 46 72 65 65 20 74 68 65 20  ./*.** Free the 
10130 61 72 72 61 79 20 61 6c 6c 6f 63 61 74 65 64 20  array allocated 
10140 62 79 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f  by explain_data_
10150 70 72 65 70 61 72 65 28 29 2e 0a 2a 2f 0a 73 74  prepare()..*/.st
10160 61 74 69 63 20 76 6f 69 64 20 65 78 70 6c 61 69  atic void explai
10170 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 53 68  n_data_delete(Sh
10180 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20  ellState *p){.  
10190 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 2d 3e  sqlite3_free(p->
101a0 61 69 49 6e 64 65 6e 74 29 3b 0a 20 20 70 2d 3e  aiIndent);.  p->
101b0 61 69 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 20 20  aiIndent = 0;.  
101c0 70 2d 3e 6e 49 6e 64 65 6e 74 20 3d 20 30 3b 0a  p->nIndent = 0;.
101d0 20 20 70 2d 3e 69 49 6e 64 65 6e 74 20 3d 20 30    p->iIndent = 0
101e0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  ;.}../*.** Disab
101f0 6c 65 20 61 6e 64 20 72 65 73 74 6f 72 65 20 2e  le and restore .
10200 77 68 65 72 65 74 72 61 63 65 20 61 6e 64 20 2e  wheretrace and .
10210 73 65 6c 65 63 74 74 72 61 63 65 20 73 65 74 74  selecttrace sett
10220 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ings..*/.#if def
10230 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
10240 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
10250 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
10260 43 54 54 52 41 43 45 29 0a 65 78 74 65 72 6e 20  CTTRACE).extern 
10270 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
10280 74 54 72 61 63 65 3b 0a 73 74 61 74 69 63 20 69  tTrace;.static i
10290 6e 74 20 73 61 76 65 64 53 65 6c 65 63 74 54 72  nt savedSelectTr
102a0 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ace;.#endif.#if 
102b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
102c0 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
102d0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 57  (SQLITE_ENABLE_W
102e0 48 45 52 45 54 52 41 43 45 29 0a 65 78 74 65 72  HERETRACE).exter
102f0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  n int sqlite3Whe
10300 72 65 54 72 61 63 65 3b 0a 73 74 61 74 69 63 20  reTrace;.static 
10310 69 6e 74 20 73 61 76 65 64 57 68 65 72 65 54 72  int savedWhereTr
10320 61 63 65 3b 0a 23 65 6e 64 69 66 0a 73 74 61 74  ace;.#endif.stat
10330 69 63 20 76 6f 69 64 20 64 69 73 61 62 6c 65 5f  ic void disable_
10340 64 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65  debug_trace_mode
10350 73 28 76 6f 69 64 29 7b 0a 23 69 66 20 64 65 66  s(void){.#if def
10360 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
10370 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
10380 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
10390 43 54 54 52 41 43 45 29 0a 20 20 73 61 76 65 64  CTTRACE).  saved
103a0 53 65 6c 65 63 74 54 72 61 63 65 20 3d 20 73 71  SelectTrace = sq
103b0 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
103c0 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ;.  sqlite3Selec
103d0 74 54 72 61 63 65 20 3d 20 30 3b 0a 23 65 6e 64  tTrace = 0;.#end
103e0 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
103f0 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
10400 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
10410 4e 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45  NABLE_WHERETRACE
10420 29 0a 20 20 73 61 76 65 64 57 68 65 72 65 54 72  ).  savedWhereTr
10430 61 63 65 20 3d 20 73 71 6c 69 74 65 33 57 68 65  ace = sqlite3Whe
10440 72 65 54 72 61 63 65 3b 0a 20 20 73 71 6c 69 74  reTrace;.  sqlit
10450 65 33 57 68 65 72 65 54 72 61 63 65 20 3d 20 30  e3WhereTrace = 0
10460 3b 0a 23 65 6e 64 69 66 0a 7d 0a 73 74 61 74 69  ;.#endif.}.stati
10470 63 20 76 6f 69 64 20 72 65 73 74 6f 72 65 5f 64  c void restore_d
10480 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65 73  ebug_trace_modes
10490 28 76 6f 69 64 29 7b 0a 23 69 66 20 64 65 66 69  (void){.#if defi
104a0 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
104b0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
104c0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43  ITE_ENABLE_SELEC
104d0 54 54 52 41 43 45 29 0a 20 20 73 71 6c 69 74 65  TTRACE).  sqlite
104e0 33 53 65 6c 65 63 74 54 72 61 63 65 20 3d 20 73  3SelectTrace = s
104f0 61 76 65 64 53 65 6c 65 63 74 54 72 61 63 65 3b  avedSelectTrace;
10500 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
10510 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
10520 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
10530 49 54 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45  ITE_ENABLE_WHERE
10540 54 52 41 43 45 29 0a 20 20 73 71 6c 69 74 65 33  TRACE).  sqlite3
10550 57 68 65 72 65 54 72 61 63 65 20 3d 20 73 61 76  WhereTrace = sav
10560 65 64 57 68 65 72 65 54 72 61 63 65 3b 0a 23 65  edWhereTrace;.#e
10570 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75  ndif.}../*.** Ru
10580 6e 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  n a prepared sta
10590 74 65 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63  tement.*/.static
105a0 20 76 6f 69 64 20 65 78 65 63 5f 70 72 65 70 61   void exec_prepa
105b0 72 65 64 5f 73 74 6d 74 28 0a 20 20 53 68 65 6c  red_stmt(.  Shel
105c0 6c 53 74 61 74 65 20 2a 70 41 72 67 2c 20 20 20  lState *pArg,   
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
105f0 50 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c 6c  Pointer to Shell
10600 53 74 61 74 65 20 2a 2f 0a 20 20 73 71 6c 69 74  State */.  sqlit
10610 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10630 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
10640 74 61 74 6d 65 6e 74 20 74 6f 20 72 75 6e 20 2a  tatment to run *
10650 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62  /.  int (*xCallb
10660 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  ack)(void*,int,c
10670 68 61 72 2a 2a 2c 63 68 61 72 2a 2a 2c 69 6e 74  har**,char**,int
10680 2a 29 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  *)   /* Callback
10690 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a   function */.){.
106a0 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 2f 2a 20    int rc;..  /* 
106b0 70 65 72 66 6f 72 6d 20 74 68 65 20 66 69 72 73  perform the firs
106c0 74 20 73 74 65 70 2e 20 20 74 68 69 73 20 77 69  t step.  this wi
106d0 6c 6c 20 74 65 6c 6c 20 75 73 20 69 66 20 77 65  ll tell us if we
106e0 0a 20 20 2a 2a 20 68 61 76 65 20 61 20 72 65 73  .  ** have a res
106f0 75 6c 74 20 73 65 74 20 6f 72 20 6e 6f 74 20 61  ult set or not a
10700 6e 64 20 68 6f 77 20 77 69 64 65 20 69 74 20 69  nd how wide it i
10710 73 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73  s..  */.  rc = s
10720 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
10730 74 29 3b 0a 20 20 2f 2a 20 69 66 20 77 65 20 68  t);.  /* if we h
10740 61 76 65 20 61 20 72 65 73 75 6c 74 20 73 65 74  ave a result set
10750 2e 2e 2e 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c  ... */.  if( SQL
10760 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29 7b  ITE_ROW == rc ){
10770 0a 20 20 20 20 2f 2a 20 69 66 20 77 65 20 68 61  .    /* if we ha
10780 76 65 20 61 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e  ve a callback...
10790 20 2a 2f 0a 20 20 20 20 69 66 28 20 78 43 61 6c   */.    if( xCal
107a0 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 2f  lback ){.      /
107b0 2a 20 61 6c 6c 6f 63 61 74 65 20 73 70 61 63 65  * allocate space
107c0 20 66 6f 72 20 63 6f 6c 20 6e 61 6d 65 20 70 74   for col name pt
107d0 72 2c 20 76 61 6c 75 65 20 70 74 72 2c 20 61 6e  r, value ptr, an
107e0 64 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 20 20  d type */.      
107f0 69 6e 74 20 6e 43 6f 6c 20 3d 20 73 71 6c 69 74  int nCol = sqlit
10800 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
10810 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 76 6f  pStmt);.      vo
10820 69 64 20 2a 70 44 61 74 61 20 3d 20 73 71 6c 69  id *pData = sqli
10830 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 33 2a 6e  te3_malloc64(3*n
10840 43 6f 6c 2a 73 69 7a 65 6f 66 28 63 6f 6e 73 74  Col*sizeof(const
10850 20 63 68 61 72 2a 29 20 2b 20 31 29 3b 0a 20 20   char*) + 1);.  
10860 20 20 20 20 69 66 28 20 21 70 44 61 74 61 20 29      if( !pData )
10870 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
10880 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
10890 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
108a0 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 73 20    char **azCols 
108b0 3d 20 28 63 68 61 72 20 2a 2a 29 70 44 61 74 61  = (char **)pData
108c0 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 73 20  ;      /* Names 
108d0 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  of result column
108e0 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 68 61  s */.        cha
108f0 72 20 2a 2a 61 7a 56 61 6c 73 20 3d 20 26 61 7a  r **azVals = &az
10900 43 6f 6c 73 5b 6e 43 6f 6c 5d 3b 20 20 20 20 20  Cols[nCol];     
10910 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
10920 20 20 20 20 20 20 20 20 69 6e 74 20 2a 61 69 54          int *aiT
10930 79 70 65 73 20 3d 20 28 69 6e 74 20 2a 29 26 61  ypes = (int *)&a
10940 7a 56 61 6c 73 5b 6e 43 6f 6c 5d 3b 20 2f 2a 20  zVals[nCol]; /* 
10950 52 65 73 75 6c 74 20 74 79 70 65 73 20 2a 2f 0a  Result types */.
10960 20 20 20 20 20 20 20 20 69 6e 74 20 69 2c 20 78          int i, x
10970 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
10980 28 73 69 7a 65 6f 66 28 69 6e 74 29 20 3c 3d 20  (sizeof(int) <= 
10990 73 69 7a 65 6f 66 28 63 68 61 72 20 2a 29 29 3b  sizeof(char *));
109a0 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 61 76 65  .        /* save
109b0 20 6f 66 66 20 70 74 72 73 20 74 6f 20 63 6f 6c   off ptrs to col
109c0 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 20  umn names */.   
109d0 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
109e0 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nCol; i++){.    
109f0 20 20 20 20 20 20 61 7a 43 6f 6c 73 5b 69 5d 20        azCols[i] 
10a00 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
10a10 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 70 53  3_column_name(pS
10a20 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20  tmt, i);.       
10a30 20 7d 0a 20 20 20 20 20 20 20 20 64 6f 7b 0a 20   }.        do{. 
10a40 20 20 20 20 20 20 20 20 20 2f 2a 20 65 78 74 72           /* extr
10a50 61 63 74 20 74 68 65 20 64 61 74 61 20 61 6e 64  act the data and
10a60 20 64 61 74 61 20 74 79 70 65 73 20 2a 2f 0a 20   data types */. 
10a70 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30           for(i=0
10a80 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a  ; i<nCol; i++){.
10a90 20 20 20 20 20 20 20 20 20 20 20 20 61 69 54 79              aiTy
10aa0 70 65 73 5b 69 5d 20 3d 20 78 20 3d 20 73 71 6c  pes[i] = x = sql
10ab0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
10ac0 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  (pStmt, i);.    
10ad0 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 53          if( x==S
10ae0 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20 70 41  QLITE_BLOB && pA
10af0 72 67 20 26 26 20 70 41 72 67 2d 3e 63 4d 6f 64  rg && pArg->cMod
10b00 65 3d 3d 4d 4f 44 45 5f 49 6e 73 65 72 74 20 29  e==MODE_Insert )
10b10 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
10b20 61 7a 56 61 6c 73 5b 69 5d 20 3d 20 22 22 3b 0a  azVals[i] = "";.
10b30 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73              }els
10b40 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e{.             
10b50 20 61 7a 56 61 6c 73 5b 69 5d 20 3d 20 28 63 68   azVals[i] = (ch
10b60 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
10b70 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69  mn_text(pStmt, i
10b80 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
10b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
10ba0 20 21 61 7a 56 61 6c 73 5b 69 5d 20 26 26 20 28   !azVals[i] && (
10bb0 61 69 54 79 70 65 73 5b 69 5d 21 3d 53 51 4c 49  aiTypes[i]!=SQLI
10bc0 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20  TE_NULL) ){.    
10bd0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
10be0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
10bf0 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
10c00 3b 20 2f 2a 20 66 72 6f 6d 20 66 6f 72 20 2a 2f  ; /* from for */
10c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
10c20 20 20 20 20 20 20 20 20 20 7d 20 2f 2a 20 65 6e           } /* en
10c30 64 20 66 6f 72 20 2a 2f 0a 0a 20 20 20 20 20 20  d for */..      
10c40 20 20 20 20 2f 2a 20 69 66 20 64 61 74 61 20 61      /* if data a
10c50 6e 64 20 74 79 70 65 73 20 65 78 74 72 61 63 74  nd types extract
10c60 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2e  ed successfully.
10c70 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  .. */.          
10c80 69 66 28 20 53 51 4c 49 54 45 5f 52 4f 57 20 3d  if( SQLITE_ROW =
10c90 3d 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20  = rc ){.        
10ca0 20 20 20 20 2f 2a 20 63 61 6c 6c 20 74 68 65 20      /* call the 
10cb0 73 75 70 70 6c 69 65 64 20 63 61 6c 6c 62 61 63  supplied callbac
10cc0 6b 20 77 69 74 68 20 74 68 65 20 72 65 73 75 6c  k with the resul
10cd0 74 20 72 6f 77 20 64 61 74 61 20 2a 2f 0a 20 20  t row data */.  
10ce0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 78 43            if( xC
10cf0 61 6c 6c 62 61 63 6b 28 70 41 72 67 2c 20 6e 43  allback(pArg, nC
10d00 6f 6c 2c 20 61 7a 56 61 6c 73 2c 20 61 7a 43 6f  ol, azVals, azCo
10d10 6c 73 2c 20 61 69 54 79 70 65 73 29 20 29 7b 0a  ls, aiTypes) ){.
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
10d30 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b   = SQLITE_ABORT;
10d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c  .            }el
10d50 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
10d60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73    rc = sqlite3_s
10d70 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  tep(pStmt);.    
10d80 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
10d90 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 20      }.        } 
10da0 77 68 69 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f  while( SQLITE_RO
10db0 57 20 3d 3d 20 72 63 20 29 3b 0a 20 20 20 20 20  W == rc );.     
10dc0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
10dd0 70 44 61 74 61 29 3b 0a 20 20 20 20 20 20 7d 0a  pData);.      }.
10de0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10df0 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 72 63 20   do{.        rc 
10e00 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
10e10 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 7d 20 77  Stmt);.      } w
10e20 68 69 6c 65 28 20 72 63 20 3d 3d 20 53 51 4c 49  hile( rc == SQLI
10e30 54 45 5f 52 4f 57 20 29 3b 0a 20 20 20 20 7d 0a  TE_ROW );.    }.
10e40 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 65    }.}../*.** Exe
10e50 63 75 74 65 20 61 20 73 74 61 74 65 6d 65 6e 74  cute a statement
10e60 20 6f 72 20 73 65 74 20 6f 66 20 73 74 61 74 65   or set of state
10e70 6d 65 6e 74 73 2e 20 20 50 72 69 6e 74 0a 2a 2a  ments.  Print.**
10e80 20 61 6e 79 20 72 65 73 75 6c 74 20 72 6f 77 73   any result rows
10e90 2f 63 6f 6c 75 6d 6e 73 20 64 65 70 65 6e 64 69  /columns dependi
10ea0 6e 67 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e  ng on the curren
10eb0 74 20 6d 6f 64 65 0a 2a 2a 20 73 65 74 20 76 69  t mode.** set vi
10ec0 61 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 63  a the supplied c
10ed0 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20 54  allback..**.** T
10ee0 68 69 73 20 69 73 20 76 65 72 79 20 73 69 6d 69  his is very simi
10ef0 6c 61 72 20 74 6f 20 53 51 4c 69 74 65 27 73 20  lar to SQLite's 
10f00 62 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65 33  built-in sqlite3
10f10 5f 65 78 65 63 28 29 0a 2a 2a 20 66 75 6e 63 74  _exec().** funct
10f20 69 6f 6e 20 65 78 63 65 70 74 20 69 74 20 74 61  ion except it ta
10f30 6b 65 73 20 61 20 73 6c 69 67 68 74 6c 79 20 64  kes a slightly d
10f40 69 66 66 65 72 65 6e 74 20 63 61 6c 6c 62 61 63  ifferent callbac
10f50 6b 0a 2a 2a 20 61 6e 64 20 63 61 6c 6c 62 61 63  k.** and callbac
10f60 6b 20 64 61 74 61 20 61 72 67 75 6d 65 6e 74 2e  k data argument.
10f70 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
10f80 68 65 6c 6c 5f 65 78 65 63 28 0a 20 20 73 71 6c  hell_exec(.  sql
10f90 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
10fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fb0 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 6f 70 65         /* An ope
10fc0 6e 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  n database */.  
10fd0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
10fe0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
10ff0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c            /* SQL
11000 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64   to be evaluated
11010 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c   */.  int (*xCal
11020 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
11030 2c 63 68 61 72 2a 2a 2c 63 68 61 72 2a 2a 2c 69  ,char**,char**,i
11040 6e 74 2a 29 2c 20 20 20 2f 2a 20 43 61 6c 6c 62  nt*),   /* Callb
11050 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ack function */.
11060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 28              /* (
11090 6e 6f 74 20 74 68 65 20 73 61 6d 65 20 61 73 20  not the same as 
110a0 73 71 6c 69 74 65 33 5f 65 78 65 63 29 20 2a 2f  sqlite3_exec) */
110b0 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
110c0 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20  Arg,            
110d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
110e0 50 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c 6c  Pointer to Shell
110f0 53 74 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20  State */.  char 
11100 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20 20 20 20  **pzErrMsg      
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11120 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 73       /* Error ms
11130 67 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  g written here *
11140 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  /.){.  sqlite3_s
11150 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 4e 55 4c  tmt *pStmt = NUL
11160 4c 3b 20 20 20 20 20 2f 2a 20 53 74 61 74 65 6d  L;     /* Statem
11170 65 6e 74 20 74 6f 20 65 78 65 63 75 74 65 2e 20  ent to execute. 
11180 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
11190 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
111a0 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 43       /* Return C
111b0 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 32  ode */.  int rc2
111c0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
111d0 7a 4c 65 66 74 6f 76 65 72 3b 20 20 20 20 20 20  zLeftover;      
111e0 20 20 20 20 2f 2a 20 54 61 69 6c 20 6f 66 20 75      /* Tail of u
111f0 6e 70 72 6f 63 65 73 73 65 64 20 53 51 4c 20 2a  nprocessed SQL *
11200 2f 0a 0a 20 20 69 66 28 20 70 7a 45 72 72 4d 73  /..  if( pzErrMs
11210 67 20 29 7b 0a 20 20 20 20 2a 70 7a 45 72 72 4d  g ){.    *pzErrM
11220 73 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 7d 0a 0a  sg = NULL;.  }..
11230 20 20 77 68 69 6c 65 28 20 7a 53 71 6c 5b 30 5d    while( zSql[0]
11240 20 26 26 20 28 53 51 4c 49 54 45 5f 4f 4b 20 3d   && (SQLITE_OK =
11250 3d 20 72 63 29 20 29 7b 0a 20 20 20 20 73 74 61  = rc) ){.    sta
11260 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
11270 7a 53 74 6d 74 53 71 6c 3b 0a 20 20 20 20 72 63  zStmtSql;.    rc
11280 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
11290 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c 20  re_v2(db, zSql, 
112a0 2d 31 2c 20 26 70 53 74 6d 74 2c 20 26 7a 4c 65  -1, &pStmt, &zLe
112b0 66 74 6f 76 65 72 29 3b 0a 20 20 20 20 69 66 28  ftover);.    if(
112c0 20 53 51 4c 49 54 45 5f 4f 4b 20 21 3d 20 72 63   SQLITE_OK != rc
112d0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 7a   ){.      if( pz
112e0 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20  ErrMsg ){.      
112f0 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 73 61    *pzErrMsg = sa
11300 76 65 5f 65 72 72 5f 6d 73 67 28 64 62 29 3b 0a  ve_err_msg(db);.
11310 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
11320 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21 70 53  e{.      if( !pS
11330 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  tmt ){.        /
11340 2a 20 74 68 69 73 20 68 61 70 70 65 6e 73 20 66  * this happens f
11350 6f 72 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 72 20  or a comment or 
11360 77 68 69 74 65 2d 73 70 61 63 65 20 2a 2f 0a 20  white-space */. 
11370 20 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c         zSql = zL
11380 65 66 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 20  eftover;.       
11390 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28   while( IsSpace(
113a0 7a 53 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c 2b  zSql[0]) ) zSql+
113b0 2b 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69  +;.        conti
113c0 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  nue;.      }.   
113d0 20 20 20 7a 53 74 6d 74 53 71 6c 20 3d 20 73 71     zStmtSql = sq
113e0 6c 69 74 65 33 5f 73 71 6c 28 70 53 74 6d 74 29  lite3_sql(pStmt)
113f0 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 53 74 6d  ;.      if( zStm
11400 74 53 71 6c 3d 3d 30 20 29 20 7a 53 74 6d 74 53  tSql==0 ) zStmtS
11410 71 6c 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 77  ql = "";.      w
11420 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 53  hile( IsSpace(zS
11430 74 6d 74 53 71 6c 5b 30 5d 29 20 29 20 7a 53 74  tmtSql[0]) ) zSt
11440 6d 74 53 71 6c 2b 2b 3b 0a 0a 20 20 20 20 20 20  mtSql++;..      
11450 2f 2a 20 73 61 76 65 20 6f 66 66 20 74 68 65 20  /* save off the 
11460 70 72 65 70 61 72 65 64 20 73 74 61 74 6d 65 6e  prepared statmen
11470 74 20 68 61 6e 64 6c 65 20 61 6e 64 20 72 65 73  t handle and res
11480 65 74 20 72 6f 77 20 63 6f 75 6e 74 20 2a 2f 0a  et row count */.
11490 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20 29        if( pArg )
114a0 7b 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e  {.        pArg->
114b0 70 53 74 6d 74 20 3d 20 70 53 74 6d 74 3b 0a 20  pStmt = pStmt;. 
114c0 20 20 20 20 20 20 20 70 41 72 67 2d 3e 63 6e 74         pArg->cnt
114d0 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20   = 0;.      }.. 
114e0 20 20 20 20 20 2f 2a 20 65 63 68 6f 20 74 68 65       /* echo the
114f0 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 69   sql statement i
11500 66 20 65 63 68 6f 20 6f 6e 20 2a 2f 0a 20 20 20  f echo on */.   
11510 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20 53     if( pArg && S
11520 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 41 72 67  hellHasFlag(pArg
11530 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29 20 29 7b  , SHFLG_Echo) ){
11540 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
11550 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
11560 22 25 73 5c 6e 22 2c 20 7a 53 74 6d 74 53 71 6c  "%s\n", zStmtSql
11570 20 3f 20 7a 53 74 6d 74 53 71 6c 20 3a 20 7a 53   ? zStmtSql : zS
11580 71 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ql);.      }..  
11590 20 20 20 20 2f 2a 20 53 68 6f 77 20 74 68 65 20      /* Show the 
115a0 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
115b0 41 4e 20 69 66 20 2e 65 71 70 20 69 73 20 6f 6e  AN if .eqp is on
115c0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 41   */.      if( pA
115d0 72 67 20 26 26 20 70 41 72 67 2d 3e 61 75 74 6f  rg && pArg->auto
115e0 45 51 50 20 26 26 20 73 71 6c 69 74 65 33 5f 73  EQP && sqlite3_s
115f0 74 72 6c 69 6b 65 28 22 45 58 50 4c 41 49 4e 25  trlike("EXPLAIN%
11600 22 2c 7a 53 74 6d 74 53 71 6c 2c 30 29 21 3d 30  ",zStmtSql,0)!=0
11610 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
11620 74 65 33 5f 73 74 6d 74 20 2a 70 45 78 70 6c 61  te3_stmt *pExpla
11630 69 6e 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72  in;.        char
11640 20 2a 7a 45 51 50 3b 0a 20 20 20 20 20 20 20 20   *zEQP;.        
11650 64 69 73 61 62 6c 65 5f 64 65 62 75 67 5f 74 72  disable_debug_tr
11660 61 63 65 5f 6d 6f 64 65 73 28 29 3b 0a 20 20 20  ace_modes();.   
11670 20 20 20 20 20 7a 45 51 50 20 3d 20 73 71 6c 69       zEQP = sqli
11680 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 45 58 50  te3_mprintf("EXP
11690 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
116a0 25 73 22 2c 20 7a 53 74 6d 74 53 71 6c 29 3b 0a  %s", zStmtSql);.
116b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
116c0 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
116d0 64 62 2c 20 7a 45 51 50 2c 20 2d 31 2c 20 26 70  db, zEQP, -1, &p
116e0 45 78 70 6c 61 69 6e 2c 20 30 29 3b 0a 20 20 20  Explain, 0);.   
116f0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
11700 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
11710 20 20 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74      while( sqlit
11720 65 33 5f 73 74 65 70 28 70 45 78 70 6c 61 69 6e  e3_step(pExplain
11730 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
11740 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 77  .            raw
11750 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
11760 74 2c 22 2d 2d 45 51 50 2d 2d 20 25 64 2c 22 2c  t,"--EQP-- %d,",
11770 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
11780 6e 74 28 70 45 78 70 6c 61 69 6e 2c 20 30 29 29  nt(pExplain, 0))
11790 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61  ;.            ra
117a0 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
117b0 75 74 2c 22 25 64 2c 22 2c 20 73 71 6c 69 74 65  ut,"%d,", sqlite
117c0 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45 78  3_column_int(pEx
117d0 70 6c 61 69 6e 2c 20 31 29 29 3b 0a 20 20 20 20  plain, 1));.    
117e0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
117f0 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25 64  tf(pArg->out,"%d
11800 2c 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ,", sqlite3_colu
11810 6d 6e 5f 69 6e 74 28 70 45 78 70 6c 61 69 6e 2c  mn_int(pExplain,
11820 20 32 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20   2));.          
11830 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41    utf8_printf(pA
11840 72 67 2d 3e 6f 75 74 2c 22 25 73 5c 6e 22 2c 20  rg->out,"%s\n", 
11850 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
11860 65 78 74 28 70 45 78 70 6c 61 69 6e 2c 20 33 29  ext(pExplain, 3)
11870 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
11880 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11890 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
118a0 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20  e(pExplain);.   
118b0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
118c0 65 28 7a 45 51 50 29 3b 0a 20 20 20 20 20 20 20  e(zEQP);.       
118d0 20 69 66 28 20 70 41 72 67 2d 3e 61 75 74 6f 45   if( pArg->autoE
118e0 51 50 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20 20  QP>=2 ){.       
118f0 20 20 20 2f 2a 20 41 6c 73 6f 20 64 6f 20 61 6e     /* Also do an
11900 20 45 58 50 4c 41 49 4e 20 66 6f 72 20 22 2e 65   EXPLAIN for ".e
11910 71 70 20 66 75 6c 6c 22 20 6d 6f 64 65 20 2a 2f  qp full" mode */
11920 0a 20 20 20 20 20 20 20 20 20 20 7a 45 51 50 20  .          zEQP 
11930 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
11940 66 28 22 45 58 50 4c 41 49 4e 20 25 73 22 2c 20  f("EXPLAIN %s", 
11950 7a 53 74 6d 74 53 71 6c 29 3b 0a 20 20 20 20 20  zStmtSql);.     
11960 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
11970 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c  3_prepare_v2(db,
11980 20 7a 45 51 50 2c 20 2d 31 2c 20 26 70 45 78 70   zEQP, -1, &pExp
11990 6c 61 69 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20  lain, 0);.      
119a0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
119b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
119c0 20 20 20 20 20 70 41 72 67 2d 3e 63 4d 6f 64 65       pArg->cMode
119d0 20 3d 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 3b   = MODE_Explain;
119e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 78 70  .            exp
119f0 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72  lain_data_prepar
11a00 65 28 70 41 72 67 2c 20 70 45 78 70 6c 61 69 6e  e(pArg, pExplain
11a10 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  );.            e
11a20 78 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74 6d  xec_prepared_stm
11a30 74 28 70 41 72 67 2c 20 70 45 78 70 6c 61 69 6e  t(pArg, pExplain
11a40 2c 20 78 43 61 6c 6c 62 61 63 6b 29 3b 0a 20 20  , xCallback);.  
11a50 20 20 20 20 20 20 20 20 20 20 65 78 70 6c 61 69            explai
11a60 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 70 41  n_data_delete(pA
11a70 72 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  rg);.          }
11a80 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11a90 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78 70  e3_finalize(pExp
11aa0 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  lain);.         
11ab0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
11ac0 51 50 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  QP);.        }. 
11ad0 20 20 20 20 20 20 20 72 65 73 74 6f 72 65 5f 64         restore_d
11ae0 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65 73  ebug_trace_modes
11af0 28 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  ();.      }..   
11b00 20 20 20 69 66 28 20 70 41 72 67 20 29 7b 0a 20     if( pArg ){. 
11b10 20 20 20 20 20 20 20 70 41 72 67 2d 3e 63 4d 6f         pArg->cMo
11b20 64 65 20 3d 20 70 41 72 67 2d 3e 6d 6f 64 65 3b  de = pArg->mode;
11b30 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 41 72  .        if( pAr
11b40 67 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 0a 20  g->autoExplain. 
11b50 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74          && sqlit
11b60 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
11b70 70 53 74 6d 74 29 3d 3d 38 0a 20 20 20 20 20 20  pStmt)==8.      
11b80 20 20 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74     && sqlite3_st
11b90 72 6c 69 6b 65 28 22 45 58 50 4c 41 49 4e 25 22  rlike("EXPLAIN%"
11ba0 2c 20 7a 53 74 6d 74 53 71 6c 2c 30 29 3d 3d 30  , zStmtSql,0)==0
11bb0 0a 20 20 20 20 20 20 20 20 29 7b 0a 20 20 20 20  .        ){.    
11bc0 20 20 20 20 20 20 70 41 72 67 2d 3e 63 4d 6f 64        pArg->cMod
11bd0 65 20 3d 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e  e = MODE_Explain
11be0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  ;.        }..   
11bf0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73       /* If the s
11c00 68 65 6c 6c 20 69 73 20 63 75 72 72 65 6e 74 6c  hell is currentl
11c10 79 20 69 6e 20 22 2e 65 78 70 6c 61 69 6e 22 20  y in ".explain" 
11c20 6d 6f 64 65 2c 20 67 61 74 68 65 72 20 74 68 65  mode, gather the
11c30 20 65 78 74 72 61 0a 20 20 20 20 20 20 20 20 2a   extra.        *
11c40 2a 20 64 61 74 61 20 72 65 71 75 69 72 65 64 20  * data required 
11c50 74 6f 20 61 64 64 20 69 6e 64 65 6e 74 73 20 74  to add indents t
11c60 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 2a 2f 0a  o the output.*/.
11c70 20 20 20 20 20 20 20 20 69 66 28 20 70 41 72 67          if( pArg
11c80 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78  ->cMode==MODE_Ex
11c90 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20  plain ){.       
11ca0 20 20 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f     explain_data_
11cb0 70 72 65 70 61 72 65 28 70 41 72 67 2c 20 70 53  prepare(pArg, pS
11cc0 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  tmt);.        }.
11cd0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 65        }..      e
11ce0 78 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74 6d  xec_prepared_stm
11cf0 74 28 70 41 72 67 2c 20 70 53 74 6d 74 2c 20 78  t(pArg, pStmt, x
11d00 43 61 6c 6c 62 61 63 6b 29 3b 0a 20 20 20 20 20  Callback);.     
11d10 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f 64 65   explain_data_de
11d20 6c 65 74 65 28 70 41 72 67 29 3b 0a 0a 20 20 20  lete(pArg);..   
11d30 20 20 20 2f 2a 20 70 72 69 6e 74 20 75 73 61 67     /* print usag
11d40 65 20 73 74 61 74 73 20 69 66 20 73 74 61 74 73  e stats if stats
11d50 20 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28   on */.      if(
11d60 20 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e 73   pArg && pArg->s
11d70 74 61 74 73 4f 6e 20 29 7b 0a 20 20 20 20 20 20  tatsOn ){.      
11d80 20 20 64 69 73 70 6c 61 79 5f 73 74 61 74 73 28    display_stats(
11d90 64 62 2c 20 70 41 72 67 2c 20 30 29 3b 0a 20 20  db, pArg, 0);.  
11da0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
11db0 70 72 69 6e 74 20 6c 6f 6f 70 2d 63 6f 75 6e 74  print loop-count
11dc0 65 72 73 20 69 66 20 72 65 71 75 69 72 65 64 20  ers if required 
11dd0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 41 72  */.      if( pAr
11de0 67 20 26 26 20 70 41 72 67 2d 3e 73 63 61 6e 73  g && pArg->scans
11df0 74 61 74 73 4f 6e 20 29 7b 0a 20 20 20 20 20 20  tatsOn ){.      
11e00 20 20 64 69 73 70 6c 61 79 5f 73 63 61 6e 73 74    display_scanst
11e10 61 74 73 28 64 62 2c 20 70 41 72 67 29 3b 0a 20  ats(db, pArg);. 
11e20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
11e30 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 73 74   Finalize the st
11e40 61 74 65 6d 65 6e 74 20 6a 75 73 74 20 65 78 65  atement just exe
11e50 63 75 74 65 64 2e 20 49 66 20 74 68 69 73 20 66  cuted. If this f
11e60 61 69 6c 73 2c 20 73 61 76 65 20 61 0a 20 20 20  ails, save a.   
11e70 20 20 20 2a 2a 20 63 6f 70 79 20 6f 66 20 74 68     ** copy of th
11e80 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  e error message.
11e90 20 4f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20   Otherwise, set 
11ea0 7a 53 71 6c 20 74 6f 20 70 6f 69 6e 74 20 74 6f  zSql to point to
11eb0 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6e 65   the.      ** ne
11ec0 78 74 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  xt statement to 
11ed0 65 78 65 63 75 74 65 2e 20 2a 2f 0a 20 20 20 20  execute. */.    
11ee0 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f    rc2 = sqlite3_
11ef0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
11f00 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
11f10 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 20 72 63  QLITE_NOMEM ) rc
11f20 20 3d 20 72 63 32 3b 0a 20 20 20 20 20 20 69 66   = rc2;.      if
11f30 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
11f40 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 20  ){.        zSql 
11f50 3d 20 7a 4c 65 66 74 6f 76 65 72 3b 0a 20 20 20  = zLeftover;.   
11f60 20 20 20 20 20 77 68 69 6c 65 28 20 49 73 53 70       while( IsSp
11f70 61 63 65 28 7a 53 71 6c 5b 30 5d 29 20 29 20 7a  ace(zSql[0]) ) z
11f80 53 71 6c 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c  Sql++;.      }el
11f90 73 65 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20  se if( pzErrMsg 
11fa0 29 7b 0a 20 20 20 20 20 20 20 20 2a 70 7a 45 72  ){.        *pzEr
11fb0 72 4d 73 67 20 3d 20 73 61 76 65 5f 65 72 72 5f  rMsg = save_err_
11fc0 6d 73 67 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  msg(db);.      }
11fd0 0a 0a 20 20 20 20 20 20 2f 2a 20 63 6c 65 61 72  ..      /* clear
11fe0 20 73 61 76 65 64 20 73 74 6d 74 20 68 61 6e 64   saved stmt hand
11ff0 6c 65 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  le */.      if( 
12000 70 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20  pArg ){.        
12010 70 41 72 67 2d 3e 70 53 74 6d 74 20 3d 20 4e 55  pArg->pStmt = NU
12020 4c 4c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  LL;.      }.    
12030 7d 0a 20 20 7d 20 2f 2a 20 65 6e 64 20 77 68 69  }.  } /* end whi
12040 6c 65 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20  le */..  return 
12050 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 6c  rc;.}../*.** Rel
12060 65 61 73 65 20 6d 65 6d 6f 72 79 20 70 72 65 76  ease memory prev
12070 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64  iously allocated
12080 20 62 79 20 74 61 62 6c 65 43 6f 6c 75 6d 6e 4c   by tableColumnL
12090 69 73 74 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  ist()..*/.static
120a0 20 76 6f 69 64 20 66 72 65 65 43 6f 6c 75 6d 6e   void freeColumn
120b0 4c 69 73 74 28 63 68 61 72 20 2a 2a 61 7a 43 6f  List(char **azCo
120c0 6c 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  l){.  int i;.  f
120d0 6f 72 28 69 3d 31 3b 20 61 7a 43 6f 6c 5b 69 5d  or(i=1; azCol[i]
120e0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  ; i++){.    sqli
120f0 74 65 33 5f 66 72 65 65 28 61 7a 43 6f 6c 5b 69  te3_free(azCol[i
12100 5d 29 3b 0a 20 20 7d 0a 20 20 2f 2a 20 61 7a 43  ]);.  }.  /* azC
12110 6f 6c 5b 30 5d 20 69 73 20 61 20 73 74 61 74 69  ol[0] is a stati
12120 63 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 73 71  c string */.  sq
12130 6c 69 74 65 33 5f 66 72 65 65 28 61 7a 43 6f 6c  lite3_free(azCol
12140 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  );.}../*.** Retu
12150 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 70 6f 69  rn a list of poi
12160 6e 74 65 72 73 20 74 6f 20 73 74 72 69 6e 67 73  nters to strings
12170 20 77 68 69 63 68 20 61 72 65 20 74 68 65 20 6e   which are the n
12180 61 6d 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 63  ames of all.** c
12190 6f 6c 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65 20  olumns in table 
121a0 7a 54 61 62 2e 20 20 20 54 68 65 20 6d 65 6d 6f  zTab.   The memo
121b0 72 79 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6e  ry to hold the n
121c0 61 6d 65 73 20 69 73 20 64 79 6e 61 6d 69 63 61  ames is dynamica
121d0 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  lly.** allocated
121e0 20 61 6e 64 20 6d 75 73 74 20 62 65 20 72 65 6c   and must be rel
121f0 65 61 73 65 64 20 62 79 20 74 68 65 20 63 61 6c  eased by the cal
12200 6c 65 72 20 75 73 69 6e 67 20 61 20 73 75 62 73  ler using a subs
12210 65 71 75 65 6e 74 20 63 61 6c 6c 0a 2a 2a 20 74  equent call.** t
12220 6f 20 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74  o freeColumnList
12230 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 7a  ()..**.** The az
12240 43 6f 6c 5b 30 5d 20 65 6e 74 72 79 20 69 73 20  Col[0] entry is 
12250 75 73 75 61 6c 6c 79 20 4e 55 4c 4c 2e 20 20 48  usually NULL.  H
12260 6f 77 65 76 65 72 2c 20 69 66 20 7a 54 61 62 20  owever, if zTab 
12270 63 6f 6e 74 61 69 6e 73 20 61 20 72 6f 77 69 64  contains a rowid
12280 0a 2a 2a 20 76 61 6c 75 65 20 74 68 61 74 20 6e  .** value that n
12290 65 65 64 73 20 74 6f 20 62 65 20 70 72 65 73 65  eeds to be prese
122a0 72 76 65 64 2c 20 74 68 65 6e 20 61 7a 43 6f 6c  rved, then azCol
122b0 5b 30 5d 20 69 73 20 66 69 6c 6c 65 64 20 69 6e  [0] is filled in
122c0 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 61 6d   with the.** nam
122d0 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 63  e of the rowid c
122e0 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  olumn..**.** The
122f0 20 66 69 72 73 74 20 72 65 67 75 6c 61 72 20 63   first regular c
12300 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62  olumn in the tab
12310 6c 65 20 69 73 20 61 7a 43 6f 6c 5b 31 5d 2e 20  le is azCol[1]. 
12320 20 54 68 65 20 6c 69 73 74 20 69 73 20 74 65 72   The list is ter
12330 6d 69 6e 61 74 65 64 0a 2a 2a 20 62 79 20 61 6e  minated.** by an
12340 20 65 6e 74 72 79 20 77 69 74 68 20 61 7a 43 6f   entry with azCo
12350 6c 5b 69 5d 3d 3d 30 2e 0a 2a 2f 0a 73 74 61 74  l[i]==0..*/.stat
12360 69 63 20 63 68 61 72 20 2a 2a 74 61 62 6c 65 43  ic char **tableC
12370 6f 6c 75 6d 6e 4c 69 73 74 28 53 68 65 6c 6c 53  olumnList(ShellS
12380 74 61 74 65 20 2a 70 2c 20 63 6f 6e 73 74 20 63  tate *p, const c
12390 68 61 72 20 2a 7a 54 61 62 29 7b 0a 20 20 63 68  har *zTab){.  ch
123a0 61 72 20 2a 2a 61 7a 43 6f 6c 20 3d 20 30 3b 0a  ar **azCol = 0;.
123b0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
123c0 70 53 74 6d 74 3b 0a 20 20 63 68 61 72 20 2a 7a  pStmt;.  char *z
123d0 53 71 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 20  Sql;.  int nCol 
123e0 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f  = 0;.  int nAllo
123f0 63 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 50 4b  c = 0;.  int nPK
12400 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e   = 0;       /* N
12410 75 6d 62 65 72 20 6f 66 20 50 52 49 4d 41 52 59  umber of PRIMARY
12420 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 73 65 65   KEY columns see
12430 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 50 4b  n */.  int isIPK
12440 20 3d 20 30 3b 20 20 20 20 20 2f 2a 20 54 72 75   = 0;     /* Tru
12450 65 20 69 66 20 6f 6e 65 20 50 52 49 4d 41 52 59  e if one PRIMARY
12460 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   KEY column of t
12470 79 70 65 20 49 4e 54 45 47 45 52 20 2a 2f 0a 20  ype INTEGER */. 
12480 20 69 6e 74 20 70 72 65 73 65 72 76 65 52 6f 77   int preserveRow
12490 69 64 20 3d 20 53 68 65 6c 6c 48 61 73 46 6c 61  id = ShellHasFla
124a0 67 28 70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65  g(p, SHFLG_Prese
124b0 72 76 65 52 6f 77 69 64 29 3b 0a 20 20 69 6e 74  rveRowid);.  int
124c0 20 72 63 3b 0a 0a 20 20 7a 53 71 6c 20 3d 20 73   rc;..  zSql = s
124d0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
124e0 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66  PRAGMA table_inf
124f0 6f 3d 25 51 22 2c 20 7a 54 61 62 29 3b 0a 20 20  o=%Q", zTab);.  
12500 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
12510 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
12520 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
12530 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66   0);.  sqlite3_f
12540 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 69 66 28  ree(zSql);.  if(
12550 20 72 63 20 29 20 72 65 74 75 72 6e 20 30 3b 0a   rc ) return 0;.
12560 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65 33    while( sqlite3
12570 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51  _step(pStmt)==SQ
12580 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
12590 69 66 28 20 6e 43 6f 6c 3e 3d 6e 41 6c 6c 6f 63  if( nCol>=nAlloc
125a0 2d 32 20 29 7b 0a 20 20 20 20 20 20 6e 41 6c 6c  -2 ){.      nAll
125b0 6f 63 20 3d 20 6e 41 6c 6c 6f 63 2a 32 20 2b 20  oc = nAlloc*2 + 
125c0 6e 43 6f 6c 20 2b 20 31 30 3b 0a 20 20 20 20 20  nCol + 10;.     
125d0 20 61 7a 43 6f 6c 20 3d 20 73 71 6c 69 74 65 33   azCol = sqlite3
125e0 5f 72 65 61 6c 6c 6f 63 28 61 7a 43 6f 6c 2c 20  _realloc(azCol, 
125f0 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f 66 28 61 7a  nAlloc*sizeof(az
12600 43 6f 6c 5b 30 5d 29 29 3b 0a 20 20 20 20 20 20  Col[0]));.      
12610 69 66 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 7b 0a  if( azCol==0 ){.
12620 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
12630 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
12640 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  r: out of memory
12650 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 65 78  \n");.        ex
12660 69 74 28 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20  it(1);.      }. 
12670 20 20 20 7d 0a 20 20 20 20 61 7a 43 6f 6c 5b 2b     }.    azCol[+
12680 2b 6e 43 6f 6c 5d 20 3d 20 73 71 6c 69 74 65 33  +nCol] = sqlite3
12690 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 73  _mprintf("%s", s
126a0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
126b0 78 74 28 70 53 74 6d 74 2c 20 31 29 29 3b 0a 20  xt(pStmt, 1));. 
126c0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 63     if( sqlite3_c
126d0 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c  olumn_int(pStmt,
126e0 20 35 29 20 29 7b 0a 20 20 20 20 20 20 6e 50 4b   5) ){.      nPK
126f0 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 50  ++;.      if( nP
12700 4b 3d 3d 31 0a 20 20 20 20 20 20 20 26 26 20 73  K==1.       && s
12710 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 28  qlite3_stricmp((
12720 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
12730 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
12740 70 53 74 6d 74 2c 32 29 2c 0a 20 20 20 20 20 20  pStmt,2),.      
12750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12760 20 20 20 20 22 49 4e 54 45 47 45 52 22 29 3d 3d      "INTEGER")==
12770 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
12780 20 20 20 69 73 49 50 4b 20 3d 20 31 3b 0a 20 20     isIPK = 1;.  
12790 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
127a0 20 20 20 69 73 49 50 4b 20 3d 20 30 3b 0a 20 20     isIPK = 0;.  
127b0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
127c0 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
127d0 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 61 7a 43  ze(pStmt);.  azC
127e0 6f 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 7a 43  ol[0] = 0;.  azC
127f0 6f 6c 5b 6e 43 6f 6c 2b 31 5d 20 3d 20 30 3b 0a  ol[nCol+1] = 0;.
12800 0a 20 20 2f 2a 20 54 68 65 20 64 65 63 69 73 69  .  /* The decisi
12810 6f 6e 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  on of whether or
12820 20 6e 6f 74 20 61 20 72 6f 77 69 64 20 72 65 61   not a rowid rea
12830 6c 6c 79 20 6e 65 65 64 73 20 74 6f 20 62 65 20  lly needs to be 
12840 70 72 65 73 65 72 76 65 64 0a 20 20 2a 2a 20 69  preserved.  ** i
12850 73 20 74 72 69 63 6b 79 2e 20 20 57 65 20 6e 65  s tricky.  We ne
12860 76 65 72 20 6e 65 65 64 20 74 6f 20 70 72 65 73  ver need to pres
12870 65 72 76 65 20 61 20 72 6f 77 69 64 20 66 6f 72  erve a rowid for
12880 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44   a WITHOUT ROWID
12890 20 74 61 62 6c 65 0a 20 20 2a 2a 20 6f 72 20 61   table.  ** or a
128a0 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 49   table with an I
128b0 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
128c0 45 59 2e 20 20 57 65 20 61 72 65 20 75 6e 61 62  EY.  We are unab
128d0 6c 65 20 74 6f 20 70 72 65 73 65 72 76 65 0a 20  le to preserve. 
128e0 20 2a 2a 20 72 6f 77 69 64 73 20 6f 6e 20 74 61   ** rowids on ta
128f0 62 6c 65 73 20 77 68 65 72 65 20 74 68 65 20 72  bles where the r
12900 6f 77 69 64 20 69 73 20 69 6e 61 63 63 65 73 73  owid is inaccess
12910 69 62 6c 65 20 62 65 63 61 75 73 65 20 74 68 65  ible because the
12920 72 65 20 61 72 65 20 6f 74 68 65 72 0a 20 20 2a  re are other.  *
12930 2a 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  * columns in the
12940 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 72 6f   table named "ro
12950 77 69 64 22 2c 20 22 5f 72 6f 77 69 64 5f 22 2c  wid", "_rowid_",
12960 20 61 6e 64 20 22 6f 69 64 22 2e 0a 20 20 2a 2f   and "oid"..  */
12970 0a 20 20 69 66 28 20 70 72 65 73 65 72 76 65 52  .  if( preserveR
12980 6f 77 69 64 20 26 26 20 69 73 49 50 4b 20 29 7b  owid && isIPK ){
12990 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 73 69 6e  .    /* If a sin
129a0 67 6c 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  gle PRIMARY KEY 
129b0 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 79 70 65  column with type
129c0 20 49 4e 54 45 47 45 52 20 77 61 73 20 73 65 65   INTEGER was see
129d0 6e 2c 20 74 68 65 6e 20 69 74 0a 20 20 20 20 2a  n, then it.    *
129e0 2a 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61 6c  * might be an al
129f0 69 73 65 20 66 6f 72 20 74 68 65 20 52 4f 57 49  ise for the ROWI
12a00 44 2e 20 20 42 75 74 20 69 74 20 6d 69 67 68 74  D.  But it might
12a10 20 61 6c 73 6f 20 62 65 20 61 20 57 49 54 48 4f   also be a WITHO
12a20 55 54 20 52 4f 57 49 44 0a 20 20 20 20 2a 2a 20  UT ROWID.    ** 
12a30 74 61 62 6c 65 20 6f 72 20 61 20 49 4e 54 45 47  table or a INTEG
12a40 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 44  ER PRIMARY KEY D
12a50 45 53 43 20 63 6f 6c 75 6d 6e 2c 20 6e 65 69 74  ESC column, neit
12a60 68 65 72 20 6f 66 20 77 68 69 63 68 20 61 72 65  her of which are
12a70 0a 20 20 20 20 2a 2a 20 52 4f 57 49 44 20 61 6c  .    ** ROWID al
12a80 69 61 73 65 73 2e 20 20 54 6f 20 64 69 73 74 69  iases.  To disti
12a90 6e 67 75 69 73 68 20 74 68 65 73 65 20 63 61 73  nguish these cas
12aa0 65 73 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65  es, check to see
12ab0 20 69 66 0a 20 20 20 20 2a 2a 20 74 68 65 72 65   if.    ** there
12ac0 20 69 73 20 61 20 22 70 6b 22 20 65 6e 74 72 79   is a "pk" entry
12ad0 20 69 6e 20 22 50 52 41 47 4d 41 20 69 6e 64 65   in "PRAGMA inde
12ae0 78 5f 6c 69 73 74 22 2e 20 20 54 68 65 72 65 20  x_list".  There 
12af0 77 69 6c 6c 20 62 65 0a 20 20 20 20 2a 2a 20 6e  will be.    ** n
12b00 6f 20 22 70 6b 22 20 69 6e 64 65 78 20 69 66 20  o "pk" index if 
12b10 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
12b20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20 61 6c 69  really is an ali
12b30 61 73 20 66 6f 72 20 74 68 65 20 52 4f 57 49 44  as for the ROWID
12b40 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 7a 53 71  ..    */.    zSq
12b50 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  l = sqlite3_mpri
12b60 6e 74 66 28 22 53 45 4c 45 43 54 20 31 20 46 52  ntf("SELECT 1 FR
12b70 4f 4d 20 70 72 61 67 6d 61 5f 69 6e 64 65 78 5f  OM pragma_index_
12b80 6c 69 73 74 28 25 51 29 22 0a 20 20 20 20 20 20  list(%Q)".      
12b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ba0 20 20 20 20 20 22 20 57 48 45 52 45 20 6f 72 69       " WHERE ori
12bb0 67 69 6e 3d 27 70 6b 27 22 2c 20 7a 54 61 62 29  gin='pk'", zTab)
12bc0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
12bd0 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
12be0 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26  >db, zSql, -1, &
12bf0 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 73  pStmt, 0);.    s
12c00 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
12c10 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b  );.    if( rc ){
12c20 0a 20 20 20 20 20 20 66 72 65 65 43 6f 6c 75 6d  .      freeColum
12c30 6e 4c 69 73 74 28 61 7a 43 6f 6c 29 3b 0a 20 20  nList(azCol);.  
12c40 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
12c50 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
12c60 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
12c70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  ;.    sqlite3_fi
12c80 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
12c90 20 20 20 70 72 65 73 65 72 76 65 52 6f 77 69 64     preserveRowid
12ca0 20 3d 20 72 63 3d 3d 53 51 4c 49 54 45 5f 52 4f   = rc==SQLITE_RO
12cb0 57 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 72 65  W;.  }.  if( pre
12cc0 73 65 72 76 65 52 6f 77 69 64 20 29 7b 0a 20 20  serveRowid ){.  
12cd0 20 20 2f 2a 20 4f 6e 6c 79 20 70 72 65 73 65 72    /* Only preser
12ce0 76 65 20 74 68 65 20 72 6f 77 69 64 20 69 66 20  ve the rowid if 
12cf0 77 65 20 63 61 6e 20 66 69 6e 64 20 61 20 6e 61  we can find a na
12d00 6d 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68  me to use for th
12d10 65 0a 20 20 20 20 2a 2a 20 72 6f 77 69 64 20 2a  e.    ** rowid *
12d20 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 68 61  /.    static cha
12d30 72 20 2a 61 7a 52 6f 77 69 64 5b 5d 20 3d 20 7b  r *azRowid[] = {
12d40 20 22 72 6f 77 69 64 22 2c 20 22 5f 72 6f 77 69   "rowid", "_rowi
12d50 64 5f 22 2c 20 22 6f 69 64 22 20 7d 3b 0a 20 20  d_", "oid" };.  
12d60 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 20 20    int i, j;.    
12d70 66 6f 72 28 6a 3d 30 3b 20 6a 3c 33 3b 20 6a 2b  for(j=0; j<3; j+
12d80 2b 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  +){.      for(i=
12d90 31 3b 20 69 3c 3d 6e 43 6f 6c 3b 20 69 2b 2b 29  1; i<=nCol; i++)
12da0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  {.        if( sq
12db0 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 61 7a  lite3_stricmp(az
12dc0 52 6f 77 69 64 5b 6a 5d 2c 61 7a 43 6f 6c 5b 69  Rowid[j],azCol[i
12dd0 5d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  ])==0 ) break;. 
12de0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
12df0 20 69 3e 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20   i>nCol ){.     
12e00 20 20 20 2f 2a 20 41 74 20 74 68 69 73 20 70 6f     /* At this po
12e10 69 6e 74 2c 20 77 65 20 6b 6e 6f 77 20 74 68 61  int, we know tha
12e20 74 20 61 7a 52 6f 77 69 64 5b 6a 5d 20 69 73 20  t azRowid[j] is 
12e30 6e 6f 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  not the name of 
12e40 61 6e 79 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f  any.        ** o
12e50 72 64 69 6e 61 72 79 20 63 6f 6c 75 6d 6e 20 69  rdinary column i
12e60 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 56 65  n the table.  Ve
12e70 72 69 66 79 20 74 68 61 74 20 61 7a 52 6f 77 69  rify that azRowi
12e80 64 5b 6a 5d 20 69 73 20 61 20 76 61 6c 69 64 0a  d[j] is a valid.
12e90 20 20 20 20 20 20 20 20 2a 2a 20 6e 61 6d 65 20          ** name 
12ea0 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 62 65  for the rowid be
12eb0 66 6f 72 65 20 61 64 64 69 6e 67 20 69 74 20 74  fore adding it t
12ec0 6f 20 61 7a 43 6f 6c 5b 30 5d 2e 20 20 57 49 54  o azCol[0].  WIT
12ed0 48 4f 55 54 20 52 4f 57 49 44 0a 20 20 20 20 20  HOUT ROWID.     
12ee0 20 20 20 2a 2a 20 74 61 62 6c 65 73 20 77 69 6c     ** tables wil
12ef0 6c 20 66 61 69 6c 20 74 68 69 73 20 6c 61 73 74  l fail this last
12f00 20 63 68 65 63 6b 20 2a 2f 0a 20 20 20 20 20 20   check */.      
12f10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74    rc = sqlite3_t
12f20 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
12f30 64 61 74 61 28 70 2d 3e 64 62 2c 30 2c 7a 54 61  data(p->db,0,zTa
12f40 62 2c 61 7a 52 6f 77 69 64 5b 6a 5d 2c 30 2c 30  b,azRowid[j],0,0
12f50 2c 30 2c 30 2c 30 29 3b 0a 20 20 20 20 20 20 20  ,0,0,0);.       
12f60 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
12f70 4f 4b 20 29 20 61 7a 43 6f 6c 5b 30 5d 20 3d 20  OK ) azCol[0] = 
12f80 61 7a 52 6f 77 69 64 5b 6a 5d 3b 0a 20 20 20 20  azRowid[j];.    
12f90 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
12fa0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
12fb0 65 74 75 72 6e 20 61 7a 43 6f 6c 3b 0a 7d 0a 0a  eturn azCol;.}..
12fc0 2f 2a 0a 2a 2a 20 54 6f 67 67 6c 65 20 74 68 65  /*.** Toggle the
12fd0 20 72 65 76 65 72 73 65 5f 75 6e 6f 72 64 65 72   reverse_unorder
12fe0 65 64 5f 73 65 6c 65 63 74 73 20 73 65 74 74 69  ed_selects setti
12ff0 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ng..*/.static vo
13000 69 64 20 74 6f 67 67 6c 65 53 65 6c 65 63 74 4f  id toggleSelectO
13010 72 64 65 72 28 73 71 6c 69 74 65 33 20 2a 64 62  rder(sqlite3 *db
13020 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
13030 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20  t *pStmt = 0;.  
13040 69 6e 74 20 69 53 65 74 74 69 6e 67 20 3d 20 30  int iSetting = 0
13050 3b 0a 20 20 63 68 61 72 20 7a 53 74 6d 74 5b 31  ;.  char zStmt[1
13060 30 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 70  00];.  sqlite3_p
13070 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 22 50  repare_v2(db, "P
13080 52 41 47 4d 41 20 72 65 76 65 72 73 65 5f 75 6e  RAGMA reverse_un
13090 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 22  ordered_selects"
130a0 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
130b0 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  ;.  if( sqlite3_
130c0 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c  step(pStmt)==SQL
130d0 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69  ITE_ROW ){.    i
130e0 53 65 74 74 69 6e 67 20 3d 20 73 71 6c 69 74 65  Setting = sqlite
130f0 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74  3_column_int(pSt
13100 6d 74 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 73 71  mt, 0);.  }.  sq
13110 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
13120 53 74 6d 74 29 3b 0a 20 20 73 71 6c 69 74 65 33  Stmt);.  sqlite3
13130 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
13140 28 7a 53 74 6d 74 29 2c 20 7a 53 74 6d 74 2c 0a  (zStmt), zStmt,.
13150 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 72         "PRAGMA r
13160 65 76 65 72 73 65 5f 75 6e 6f 72 64 65 72 65 64  everse_unordered
13170 5f 73 65 6c 65 63 74 73 28 25 64 29 22 2c 20 21  _selects(%d)", !
13180 69 53 65 74 74 69 6e 67 29 3b 0a 20 20 73 71 6c  iSetting);.  sql
13190 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53  ite3_exec(db, zS
131a0 74 6d 74 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 7d  tmt, 0, 0, 0);.}
131b0 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
131c0 61 20 64 69 66 66 65 72 65 6e 74 20 63 61 6c 6c  a different call
131d0 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 75 73 65  back routine use
131e0 64 20 66 6f 72 20 64 75 6d 70 69 6e 67 20 74 68  d for dumping th
131f0 65 20 64 61 74 61 62 61 73 65 2e 0a 2a 2a 20 45  e database..** E
13200 61 63 68 20 72 6f 77 20 72 65 63 65 69 76 65 64  ach row received
13210 20 62 79 20 74 68 69 73 20 63 61 6c 6c 62 61 63   by this callbac
13220 6b 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  k consists of a 
13230 74 61 62 6c 65 20 6e 61 6d 65 2c 0a 2a 2a 20 74  table name,.** t
13240 68 65 20 74 61 62 6c 65 20 74 79 70 65 20 28 22  he table type ("
13250 69 6e 64 65 78 22 20 6f 72 20 22 74 61 62 6c 65  index" or "table
13260 22 29 20 61 6e 64 20 53 51 4c 20 74 6f 20 63 72  ") and SQL to cr
13270 65 61 74 65 20 74 68 65 20 74 61 62 6c 65 2e 0a  eate the table..
13280 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
13290 73 68 6f 75 6c 64 20 70 72 69 6e 74 20 74 65 78  should print tex
132a0 74 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20  t sufficient to 
132b0 72 65 63 72 65 61 74 65 20 74 68 65 20 74 61 62  recreate the tab
132c0 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  le..*/.static in
132d0 74 20 64 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 28  t dump_callback(
132e0 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
132f0 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41  nArg, char **azA
13300 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 4e 6f 74  rg, char **azNot
13310 55 73 65 64 29 7b 0a 20 20 69 6e 74 20 72 63 3b  Used){.  int rc;
13320 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13330 54 61 62 6c 65 3b 0a 20 20 63 6f 6e 73 74 20 63  Table;.  const c
13340 68 61 72 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f  har *zType;.  co
13350 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  nst char *zSql;.
13360 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 20    ShellState *p 
13370 3d 20 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 29  = (ShellState *)
13380 70 41 72 67 3b 0a 0a 20 20 55 4e 55 53 45 44 5f  pArg;..  UNUSED_
13390 50 41 52 41 4d 45 54 45 52 28 61 7a 4e 6f 74 55  PARAMETER(azNotU
133a0 73 65 64 29 3b 0a 20 20 69 66 28 20 6e 41 72 67  sed);.  if( nArg
133b0 21 3d 33 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  !=3 ) return 1;.
133c0 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41 72 67    zTable = azArg
133d0 5b 30 5d 3b 0a 20 20 7a 54 79 70 65 20 3d 20 61  [0];.  zType = a
133e0 7a 41 72 67 5b 31 5d 3b 0a 20 20 7a 53 71 6c 20  zArg[1];.  zSql 
133f0 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 0a 20 20 69  = azArg[2];..  i
13400 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62 6c 65  f( strcmp(zTable
13410 2c 20 22 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  , "sqlite_sequen
13420 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  ce")==0 ){.    r
13430 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
13440 2c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 73  , "DELETE FROM s
13450 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 5c  qlite_sequence;\
13460 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  n");.  }else if(
13470 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62   sqlite3_strglob
13480 28 22 73 71 6c 69 74 65 5f 73 74 61 74 3f 22 2c  ("sqlite_stat?",
13490 20 7a 54 61 62 6c 65 29 3d 3d 30 20 29 7b 0a 20   zTable)==0 ){. 
134a0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
134b0 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20 73  >out, "ANALYZE s
134c0 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e 22  qlite_master;\n"
134d0 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  );.  }else if( s
134e0 74 72 6e 63 6d 70 28 7a 54 61 62 6c 65 2c 20 22  trncmp(zTable, "
134f0 73 71 6c 69 74 65 5f 22 2c 20 37 29 3d 3d 30 20  sqlite_", 7)==0 
13500 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  ){.    return 0;
13510 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
13520 6e 63 6d 70 28 7a 53 71 6c 2c 20 22 43 52 45 41  ncmp(zSql, "CREA
13530 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
13540 22 2c 20 32 30 29 3d 3d 30 20 29 7b 0a 20 20 20  ", 20)==0 ){.   
13550 20 63 68 61 72 20 2a 7a 49 6e 73 3b 0a 20 20 20   char *zIns;.   
13560 20 69 66 28 20 21 70 2d 3e 77 72 69 74 61 62 6c   if( !p->writabl
13570 65 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 20  eSchema ){.     
13580 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
13590 75 74 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74  ut, "PRAGMA writ
135a0 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 5c  able_schema=ON;\
135b0 6e 22 29 3b 0a 20 20 20 20 20 20 70 2d 3e 77 72  n");.      p->wr
135c0 69 74 61 62 6c 65 53 63 68 65 6d 61 20 3d 20 31  itableSchema = 1
135d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 49 6e 73  ;.    }.    zIns
135e0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
135f0 74 66 28 0a 20 20 20 20 20 20 20 22 49 4e 53 45  tf(.       "INSE
13600 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f 6d  RT INTO sqlite_m
13610 61 73 74 65 72 28 74 79 70 65 2c 6e 61 6d 65 2c  aster(type,name,
13620 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70 61 67  tbl_name,rootpag
13630 65 2c 73 71 6c 29 22 0a 20 20 20 20 20 20 20 22  e,sql)".       "
13640 56 41 4c 55 45 53 28 27 74 61 62 6c 65 27 2c 27  VALUES('table','
13650 25 71 27 2c 27 25 71 27 2c 30 2c 27 25 71 27 29  %q','%q',0,'%q')
13660 3b 22 2c 0a 20 20 20 20 20 20 20 7a 54 61 62 6c  ;",.       zTabl
13670 65 2c 20 7a 54 61 62 6c 65 2c 20 7a 53 71 6c 29  e, zTable, zSql)
13680 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  ;.    utf8_print
13690 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22  f(p->out, "%s\n"
136a0 2c 20 7a 49 6e 73 29 3b 0a 20 20 20 20 73 71 6c  , zIns);.    sql
136b0 69 74 65 33 5f 66 72 65 65 28 7a 49 6e 73 29 3b  ite3_free(zIns);
136c0 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
136d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 72 69 6e   }else{.    prin
136e0 74 53 63 68 65 6d 61 4c 69 6e 65 28 70 2d 3e 6f  tSchemaLine(p->o
136f0 75 74 2c 20 7a 53 71 6c 2c 20 22 3b 5c 6e 22 29  ut, zSql, ";\n")
13700 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 73 74 72  ;.  }..  if( str
13710 63 6d 70 28 7a 54 79 70 65 2c 20 22 74 61 62 6c  cmp(zType, "tabl
13720 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53 68  e")==0 ){.    Sh
13730 65 6c 6c 54 65 78 74 20 73 53 65 6c 65 63 74 3b  ellText sSelect;
13740 0a 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20 73  .    ShellText s
13750 54 61 62 6c 65 3b 0a 20 20 20 20 63 68 61 72 20  Table;.    char 
13760 2a 2a 61 7a 43 6f 6c 3b 0a 20 20 20 20 69 6e 74  **azCol;.    int
13770 20 69 3b 0a 20 20 20 20 63 68 61 72 20 2a 73 61   i;.    char *sa
13780 76 65 64 44 65 73 74 54 61 62 6c 65 3b 0a 20 20  vedDestTable;.  
13790 20 20 69 6e 74 20 73 61 76 65 64 4d 6f 64 65 3b    int savedMode;
137a0 0a 0a 20 20 20 20 61 7a 43 6f 6c 20 3d 20 74 61  ..    azCol = ta
137b0 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 70 2c  bleColumnList(p,
137c0 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 69 66   zTable);.    if
137d0 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20  ( azCol==0 ){.  
137e0 20 20 20 20 70 2d 3e 6e 45 72 72 2b 2b 3b 0a 20      p->nErr++;. 
137f0 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20       return 0;. 
13800 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 41 6c 77     }..    /* Alw
13810 61 79 73 20 71 75 6f 74 65 20 74 68 65 20 74 61  ays quote the ta
13820 62 6c 65 20 6e 61 6d 65 2c 20 65 76 65 6e 20 69  ble name, even i
13830 66 20 69 74 20 61 70 70 65 61 72 73 20 74 6f 20  f it appears to 
13840 62 65 20 70 75 72 65 20 61 73 63 69 69 2c 0a 20  be pure ascii,. 
13850 20 20 20 2a 2a 20 69 6e 20 63 61 73 65 20 69 74     ** in case it
13860 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20 45   is a keyword. E
13870 78 3a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  x:  INSERT INTO 
13880 22 74 61 62 6c 65 22 20 2e 2e 2e 20 2a 2f 0a 20  "table" ... */. 
13890 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 54 61     initText(&sTa
138a0 62 6c 65 29 3b 0a 20 20 20 20 61 70 70 65 6e 64  ble);.    append
138b0 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20 7a 54  Text(&sTable, zT
138c0 61 62 6c 65 2c 20 71 75 6f 74 65 43 68 61 72 28  able, quoteChar(
138d0 7a 54 61 62 6c 65 29 29 3b 0a 20 20 20 20 2f 2a  zTable));.    /*
138e0 20 49 66 20 70 72 65 73 65 72 76 69 6e 67 20 74   If preserving t
138f0 68 65 20 72 6f 77 69 64 2c 20 61 64 64 20 61 20  he rowid, add a 
13900 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 66 74 65  column list afte
13910 72 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  r the table name
13920 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 6f 74 68 65  ..    ** In othe
13930 72 20 77 6f 72 64 73 3a 20 20 22 49 4e 53 45 52  r words:  "INSER
13940 54 20 49 4e 54 4f 20 74 61 62 28 72 6f 77 69 64  T INTO tab(rowid
13950 2c 61 2c 62 2c 63 2c 2e 2e 2e 29 20 56 41 4c 55  ,a,b,c,...) VALU
13960 45 53 28 2e 2e 2e 29 22 0a 20 20 20 20 2a 2a 20  ES(...)".    ** 
13970 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 75  instead of the u
13980 73 75 61 6c 20 22 49 4e 53 45 52 54 20 49 4e 54  sual "INSERT INT
13990 4f 20 74 61 62 20 56 41 4c 55 45 53 28 2e 2e 2e  O tab VALUES(...
139a0 29 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  )"..    */.    i
139b0 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b 0a 20  f( azCol[0] ){. 
139c0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
139d0 26 73 54 61 62 6c 65 2c 20 22 28 22 2c 20 30 29  &sTable, "(", 0)
139e0 3b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  ;.      appendTe
139f0 78 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43 6f  xt(&sTable, azCo
13a00 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20  l[0], 0);.      
13a10 66 6f 72 28 69 3d 31 3b 20 61 7a 43 6f 6c 5b 69  for(i=1; azCol[i
13a20 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ]; i++){.       
13a30 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 54 61   appendText(&sTa
13a40 62 6c 65 2c 20 22 2c 22 2c 20 30 29 3b 0a 20 20  ble, ",", 0);.  
13a50 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
13a60 28 26 73 54 61 62 6c 65 2c 20 61 7a 43 6f 6c 5b  (&sTable, azCol[
13a70 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28 61 7a  i], quoteChar(az
13a80 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20 20 20  Col[i]));.      
13a90 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
13aa0 78 74 28 26 73 54 61 62 6c 65 2c 20 22 29 22 2c  xt(&sTable, ")",
13ab0 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   0);.    }..    
13ac0 2f 2a 20 42 75 69 6c 64 20 61 6e 20 61 70 70 72  /* Build an appr
13ad0 6f 70 72 69 61 74 65 20 53 45 4c 45 43 54 20 73  opriate SELECT s
13ae0 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20 20  tatement */.    
13af0 69 6e 69 74 54 65 78 74 28 26 73 53 65 6c 65 63  initText(&sSelec
13b00 74 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65  t);.    appendTe
13b10 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53 45  xt(&sSelect, "SE
13b20 4c 45 43 54 20 22 2c 20 30 29 3b 0a 20 20 20 20  LECT ", 0);.    
13b30 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b 0a  if( azCol[0] ){.
13b40 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
13b50 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43 6f 6c  (&sSelect, azCol
13b60 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20 61  [0], 0);.      a
13b70 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
13b80 63 74 2c 20 22 2c 22 2c 20 30 29 3b 0a 20 20 20  ct, ",", 0);.   
13b90 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20   }.    for(i=1; 
13ba0 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  azCol[i]; i++){.
13bb0 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
13bc0 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43 6f 6c  (&sSelect, azCol
13bd0 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28 61  [i], quoteChar(a
13be0 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20 20  zCol[i]));.     
13bf0 20 69 66 28 20 61 7a 43 6f 6c 5b 69 2b 31 5d 20   if( azCol[i+1] 
13c00 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  ){.        appen
13c10 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
13c20 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  ",", 0);.      }
13c30 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65 65 43  .    }.    freeC
13c40 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f 6c 29  olumnList(azCol)
13c50 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78 74  ;.    appendText
13c60 28 26 73 53 65 6c 65 63 74 2c 20 22 20 46 52 4f  (&sSelect, " FRO
13c70 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 61 70 70  M ", 0);.    app
13c80 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
13c90 2c 20 7a 54 61 62 6c 65 2c 20 71 75 6f 74 65 43  , zTable, quoteC
13ca0 68 61 72 28 7a 54 61 62 6c 65 29 29 3b 0a 0a 20  har(zTable));.. 
13cb0 20 20 20 73 61 76 65 64 44 65 73 74 54 61 62 6c     savedDestTabl
13cc0 65 20 3d 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c  e = p->zDestTabl
13cd0 65 3b 0a 20 20 20 20 73 61 76 65 64 4d 6f 64 65  e;.    savedMode
13ce0 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20   = p->mode;.    
13cf0 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d 20  p->zDestTable = 
13d00 73 54 61 62 6c 65 2e 7a 3b 0a 20 20 20 20 70 2d  sTable.z;.    p-
13d10 3e 6d 6f 64 65 20 3d 20 70 2d 3e 63 4d 6f 64 65  >mode = p->cMode
13d20 20 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a   = MODE_Insert;.
13d30 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65      rc = shell_e
13d40 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c 65  xec(p->db, sSele
13d50 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c  ct.z, shell_call
13d60 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20 20  back, p, 0);.   
13d70 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d   if( (rc&0xff)==
13d80 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 29  SQLITE_CORRUPT )
13d90 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
13da0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a  tf(p->out, "/***
13db0 2a 2a 2a 20 43 4f 52 52 55 50 54 49 4f 4e 20 45  *** CORRUPTION E
13dc0 52 52 4f 52 20 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e 22  RROR *******/\n"
13dd0 29 3b 0a 20 20 20 20 20 20 74 6f 67 67 6c 65 53  );.      toggleS
13de0 65 6c 65 63 74 4f 72 64 65 72 28 70 2d 3e 64 62  electOrder(p->db
13df0 29 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  );.      shell_e
13e00 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c 65  xec(p->db, sSele
13e10 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c  ct.z, shell_call
13e20 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20 20  back, p, 0);.   
13e30 20 20 20 74 6f 67 67 6c 65 53 65 6c 65 63 74 4f     toggleSelectO
13e40 72 64 65 72 28 70 2d 3e 64 62 29 3b 0a 20 20 20  rder(p->db);.   
13e50 20 7d 0a 20 20 20 20 70 2d 3e 7a 44 65 73 74 54   }.    p->zDestT
13e60 61 62 6c 65 20 3d 20 73 61 76 65 64 44 65 73 74  able = savedDest
13e70 54 61 62 6c 65 3b 0a 20 20 20 20 70 2d 3e 6d 6f  Table;.    p->mo
13e80 64 65 20 3d 20 73 61 76 65 64 4d 6f 64 65 3b 0a  de = savedMode;.
13e90 20 20 20 20 66 72 65 65 54 65 78 74 28 26 73 54      freeText(&sT
13ea0 61 62 6c 65 29 3b 0a 20 20 20 20 66 72 65 65 54  able);.    freeT
13eb0 65 78 74 28 26 73 53 65 6c 65 63 74 29 3b 0a 20  ext(&sSelect);. 
13ec0 20 20 20 69 66 28 20 72 63 20 29 20 70 2d 3e 6e     if( rc ) p->n
13ed0 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74  Err++;.  }.  ret
13ee0 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
13ef0 52 75 6e 20 7a 51 75 65 72 79 2e 20 20 55 73 65  Run zQuery.  Use
13f00 20 64 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 28 29   dump_callback()
13f10 20 61 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   as the callback
13f20 20 72 6f 75 74 69 6e 65 20 73 6f 20 74 68 61 74   routine so that
13f30 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  .** the contents
13f40 20 6f 66 20 74 68 65 20 71 75 65 72 79 20 61 72   of the query ar
13f50 65 20 6f 75 74 70 75 74 20 61 73 20 53 51 4c 20  e output as SQL 
13f60 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
13f70 2a 20 49 66 20 77 65 20 67 65 74 20 61 20 53 51  * If we get a SQ
13f80 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72  LITE_CORRUPT err
13f90 6f 72 2c 20 72 65 72 75 6e 20 74 68 65 20 71 75  or, rerun the qu
13fa0 65 72 79 20 61 66 74 65 72 20 61 70 70 65 6e 64  ery after append
13fb0 69 6e 67 0a 2a 2a 20 22 4f 52 44 45 52 20 42 59  ing.** "ORDER BY
13fc0 20 72 6f 77 69 64 20 44 45 53 43 22 20 74 6f 20   rowid DESC" to 
13fd0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 61 74  the end..*/.stat
13fe0 69 63 20 69 6e 74 20 72 75 6e 5f 73 63 68 65 6d  ic int run_schem
13ff0 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 0a 20 20  a_dump_query(.  
14000 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a 20  ShellState *p,. 
14010 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51 75   const char *zQu
14020 65 72 79 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b  ery.){.  int rc;
14030 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20  .  char *zErr = 
14040 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
14050 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 51  3_exec(p->db, zQ
14060 75 65 72 79 2c 20 64 75 6d 70 5f 63 61 6c 6c 62  uery, dump_callb
14070 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b 0a  ack, p, &zErr);.
14080 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
14090 5f 43 4f 52 52 55 50 54 20 29 7b 0a 20 20 20 20  _CORRUPT ){.    
140a0 63 68 61 72 20 2a 7a 51 32 3b 0a 20 20 20 20 69  char *zQ2;.    i
140b0 6e 74 20 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 33  nt len = strlen3
140c0 30 28 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 72  0(zQuery);.    r
140d0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
140e0 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 43 4f 52 52 55  , "/****** CORRU
140f0 50 54 49 4f 4e 20 45 52 52 4f 52 20 2a 2a 2a 2a  PTION ERROR ****
14100 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20 20 20 20 69 66  ***/\n");.    if
14110 28 20 7a 45 72 72 20 29 7b 0a 20 20 20 20 20 20  ( zErr ){.      
14120 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
14130 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 25 73 20  ut, "/****** %s 
14140 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 7a 45 72 72  ******/\n", zErr
14150 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
14160 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 20  _free(zErr);.   
14170 20 20 20 7a 45 72 72 20 3d 20 30 3b 0a 20 20 20     zErr = 0;.   
14180 20 7d 0a 20 20 20 20 7a 51 32 20 3d 20 6d 61 6c   }.    zQ2 = mal
14190 6c 6f 63 28 20 6c 65 6e 2b 31 30 30 20 29 3b 0a  loc( len+100 );.
141a0 20 20 20 20 69 66 28 20 7a 51 32 3d 3d 30 20 29      if( zQ2==0 )
141b0 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20   return rc;.    
141c0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
141d0 28 6c 65 6e 2b 31 30 30 2c 20 7a 51 32 2c 20 22  (len+100, zQ2, "
141e0 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  %s ORDER BY rowi
141f0 64 20 44 45 53 43 22 2c 20 7a 51 75 65 72 79 29  d DESC", zQuery)
14200 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
14210 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a  e3_exec(p->db, z
14220 51 32 2c 20 64 75 6d 70 5f 63 61 6c 6c 62 61 63  Q2, dump_callbac
14230 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b 0a 20 20  k, p, &zErr);.  
14240 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
14250 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
14260 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 45  >out, "/****** E
14270 52 52 4f 52 3a 20 25 73 20 2a 2a 2a 2a 2a 2a 2f  RROR: %s ******/
14280 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20  \n", zErr);.    
14290 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
142a0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
142b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
142c0 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a  te3_free(zErr);.
142d0 20 20 20 20 66 72 65 65 28 7a 51 32 29 3b 0a 20      free(zQ2);. 
142e0 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
142f0 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 78 74 20 6f 66  }../*.** Text of
14300 20 61 20 68 65 6c 70 20 6d 65 73 73 61 67 65 0a   a help message.
14310 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 7a  */.static char z
14320 48 65 6c 70 5b 5d 20 3d 0a 23 69 66 6e 64 65 66  Help[] =.#ifndef
14330 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
14340 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 22 2e 61  HORIZATION.  ".a
14350 75 74 68 20 4f 4e 7c 4f 46 46 20 20 20 20 20 20  uth ON|OFF      
14360 20 20 20 20 20 53 68 6f 77 20 61 75 74 68 6f 72       Show author
14370 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 73 5c 6e  izer callbacks\n
14380 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 62 61 63  ".#endif.  ".bac
14390 6b 75 70 20 3f 44 42 3f 20 46 49 4c 45 20 20 20  kup ?DB? FILE   
143a0 20 20 20 42 61 63 6b 75 70 20 44 42 20 28 64 65     Backup DB (de
143b0 66 61 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29 20  fault \"main\") 
143c0 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 62  to FILE\n".  ".b
143d0 61 69 6c 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20  ail on|off      
143e0 20 20 20 20 20 53 74 6f 70 20 61 66 74 65 72 20       Stop after 
143f0 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72 6f 72  hitting an error
14400 2e 20 20 44 65 66 61 75 6c 74 20 4f 46 46 5c 6e  .  Default OFF\n
14410 22 0a 20 20 22 2e 62 69 6e 61 72 79 20 6f 6e 7c  ".  ".binary on|
14420 6f 66 66 20 20 20 20 20 20 20 20 20 54 75 72 6e  off         Turn
14430 20 62 69 6e 61 72 79 20 6f 75 74 70 75 74 20 6f   binary output o
14440 6e 20 6f 72 20 6f 66 66 2e 20 20 44 65 66 61 75  n or off.  Defau
14450 6c 74 20 4f 46 46 5c 6e 22 0a 20 20 22 2e 63 64  lt OFF\n".  ".cd
14460 20 44 49 52 45 43 54 4f 52 59 20 20 20 20 20 20   DIRECTORY      
14470 20 20 20 20 43 68 61 6e 67 65 20 74 68 65 20 77      Change the w
14480 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72 79  orking directory
14490 20 74 6f 20 44 49 52 45 43 54 4f 52 59 5c 6e 22   to DIRECTORY\n"
144a0 0a 20 20 22 2e 63 68 61 6e 67 65 73 20 6f 6e 7c  .  ".changes on|
144b0 6f 66 66 20 20 20 20 20 20 20 20 53 68 6f 77 20  off        Show 
144c0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 63  number of rows c
144d0 68 61 6e 67 65 64 20 62 79 20 53 51 4c 5c 6e 22  hanged by SQL\n"
144e0 0a 20 20 22 2e 63 68 65 63 6b 20 47 4c 4f 42 20  .  ".check GLOB 
144f0 20 20 20 20 20 20 20 20 20 20 20 46 61 69 6c 20             Fail 
14500 69 66 20 6f 75 74 70 75 74 20 73 69 6e 63 65 20  if output since 
14510 2e 74 65 73 74 63 61 73 65 20 64 6f 65 73 20 6e  .testcase does n
14520 6f 74 20 6d 61 74 63 68 5c 6e 22 0a 20 20 22 2e  ot match\n".  ".
14530 63 6c 6f 6e 65 20 4e 45 57 44 42 20 20 20 20 20  clone NEWDB     
14540 20 20 20 20 20 20 43 6c 6f 6e 65 20 64 61 74 61        Clone data
14550 20 69 6e 74 6f 20 4e 45 57 44 42 20 66 72 6f 6d   into NEWDB from
14560 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61   the existing da
14570 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64 61  tabase\n".  ".da
14580 74 61 62 61 73 65 73 20 20 20 20 20 20 20 20 20  tabases         
14590 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73 20 61      List names a
145a0 6e 64 20 66 69 6c 65 73 20 6f 66 20 61 74 74 61  nd files of atta
145b0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 5c 6e  ched databases\n
145c0 22 0a 20 20 22 2e 64 62 69 6e 66 6f 20 3f 44 42  ".  ".dbinfo ?DB
145d0 3f 20 20 20 20 20 20 20 20 20 20 20 53 68 6f 77  ?           Show
145e0 20 73 74 61 74 75 73 20 69 6e 66 6f 72 6d 61 74   status informat
145f0 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64 61  ion about the da
14600 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64 75  tabase\n".  ".du
14610 6d 70 20 3f 54 41 42 4c 45 3f 20 2e 2e 2e 20 20  mp ?TABLE? ...  
14620 20 20 20 20 44 75 6d 70 20 74 68 65 20 64 61 74      Dump the dat
14630 61 62 61 73 65 20 69 6e 20 61 6e 20 53 51 4c 20  abase in an SQL 
14640 74 65 78 74 20 66 6f 72 6d 61 74 5c 6e 22 0a 20  text format\n". 
14650 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
14660 20 20 20 20 20 20 20 20 20 20 20 49 66 20 54 41             If TA
14670 42 4c 45 20 73 70 65 63 69 66 69 65 64 2c 20 6f  BLE specified, o
14680 6e 6c 79 20 64 75 6d 70 20 74 61 62 6c 65 73 20  nly dump tables 
14690 6d 61 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22 20  matching\n".  " 
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146b0 20 20 20 20 20 20 20 20 4c 49 4b 45 20 70 61 74          LIKE pat
146c0 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 20  tern TABLE.\n". 
146d0 20 22 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66 20 20   ".echo on|off  
146e0 20 20 20 20 20 20 20 20 20 54 75 72 6e 20 63 6f           Turn co
146f0 6d 6d 61 6e 64 20 65 63 68 6f 20 6f 6e 20 6f 72  mmand echo on or
14700 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 65 71 70 20   off\n".  ".eqp 
14710 6f 6e 7c 6f 66 66 7c 66 75 6c 6c 20 20 20 20 20  on|off|full     
14720 20 20 45 6e 61 62 6c 65 20 6f 72 20 64 69 73 61    Enable or disa
14730 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 45 58  ble automatic EX
14740 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
14750 5c 6e 22 0a 20 20 22 2e 65 78 69 74 20 20 20 20  \n".  ".exit    
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
14770 69 74 20 74 68 69 73 20 70 72 6f 67 72 61 6d 5c  it this program\
14780 6e 22 0a 2f 2a 20 42 65 63 61 75 73 65 20 65 78  n"./* Because ex
14790 70 6c 61 69 6e 20 6d 6f 64 65 20 63 6f 6d 65 73  plain mode comes
147a0 20 6f 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   on automaticall
147b0 79 20 6e 6f 77 2c 20 74 68 65 20 22 2e 65 78 70  y now, the ".exp
147c0 6c 61 69 6e 22 20 6d 6f 64 65 0a 2a 2a 20 69 73  lain" mode.** is
147d0 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
147e0 65 20 68 65 6c 70 20 73 63 72 65 65 6e 2e 20 20  e help screen.  
147f0 49 74 20 69 73 20 73 74 69 6c 6c 20 73 75 70 70  It is still supp
14800 6f 72 74 65 64 20 66 6f 72 20 6c 65 67 61 63 79  orted for legacy
14810 2c 20 68 6f 77 65 76 65 72 20 2a 2f 0a 2f 2a 22  , however */./*"
14820 2e 65 78 70 6c 61 69 6e 20 3f 6f 6e 7c 6f 66 66  .explain ?on|off
14830 7c 61 75 74 6f 3f 20 54 75 72 6e 20 45 58 50 4c  |auto? Turn EXPL
14840 41 49 4e 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  AIN output mode 
14850 6f 6e 20 6f 72 20 6f 66 66 20 6f 72 20 74 6f 20  on or off or to 
14860 61 75 74 6f 6d 61 74 69 63 5c 6e 22 2a 2f 0a 20  automatic\n"*/. 
14870 20 22 2e 66 75 6c 6c 73 63 68 65 6d 61 20 3f 2d   ".fullschema ?-
14880 2d 69 6e 64 65 6e 74 3f 20 53 68 6f 77 20 73 63  -indent? Show sc
14890 68 65 6d 61 20 61 6e 64 20 74 68 65 20 63 6f 6e  hema and the con
148a0 74 65 6e 74 20 6f 66 20 73 71 6c 69 74 65 5f 73  tent of sqlite_s
148b0 74 61 74 20 74 61 62 6c 65 73 5c 6e 22 0a 20 20  tat tables\n".  
148c0 22 2e 68 65 61 64 65 72 73 20 6f 6e 7c 6f 66 66  ".headers on|off
148d0 20 20 20 20 20 20 20 20 54 75 72 6e 20 64 69 73          Turn dis
148e0 70 6c 61 79 20 6f 66 20 68 65 61 64 65 72 73 20  play of headers 
148f0 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20 20 22  on or off\n".  "
14900 2e 68 65 6c 70 20 20 20 20 20 20 20 20 20 20 20  .help           
14910 20 20 20 20 20 20 20 53 68 6f 77 20 74 68 69 73         Show this
14920 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20 20 22 2e   message\n".  ".
14930 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42 4c  import FILE TABL
14940 45 20 20 20 20 20 49 6d 70 6f 72 74 20 64 61 74  E     Import dat
14950 61 20 66 72 6f 6d 20 46 49 4c 45 20 69 6e 74 6f  a from FILE into
14960 20 54 41 42 4c 45 5c 6e 22 0a 23 69 66 6e 64 65   TABLE\n".#ifnde
14970 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
14980 53 54 5f 43 4f 4e 54 52 4f 4c 0a 20 20 22 2e 69  ST_CONTROL.  ".i
14990 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20 54 41  mposter INDEX TA
149a0 42 4c 45 20 20 43 72 65 61 74 65 20 69 6d 70 6f  BLE  Create impo
149b0 73 74 65 72 20 74 61 62 6c 65 20 54 41 42 4c 45  ster table TABLE
149c0 20 6f 6e 20 69 6e 64 65 78 20 49 4e 44 45 58 5c   on index INDEX\
149d0 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 69 6e  n".#endif.  ".in
149e0 64 65 78 65 73 20 3f 54 41 42 4c 45 3f 20 20 20  dexes ?TABLE?   
149f0 20 20 20 20 53 68 6f 77 20 6e 61 6d 65 73 20 6f      Show names o
14a00 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 5c 6e 22  f all indexes\n"
14a10 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 66 20               If 
14a30 54 41 42 4c 45 20 73 70 65 63 69 66 69 65 64 2c  TABLE specified,
14a40 20 6f 6e 6c 79 20 73 68 6f 77 20 69 6e 64 65 78   only show index
14a50 65 73 20 66 6f 72 20 74 61 62 6c 65 73 5c 6e 22  es for tables\n"
14a60 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 74               mat
14a80 63 68 69 6e 67 20 4c 49 4b 45 20 70 61 74 74 65  ching LIKE patte
14a90 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 23 69 66  rn TABLE.\n".#if
14aa0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
14ab0 45 5f 49 4f 54 52 41 43 45 0a 20 20 22 2e 69 6f  E_IOTRACE.  ".io
14ac0 74 72 61 63 65 20 46 49 4c 45 20 20 20 20 20 20  trace FILE      
14ad0 20 20 20 20 45 6e 61 62 6c 65 20 49 2f 4f 20 64      Enable I/O d
14ae0 69 61 67 6e 6f 73 74 69 63 20 6c 6f 67 67 69 6e  iagnostic loggin
14af0 67 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 23 65 6e  g to FILE\n".#en
14b00 64 69 66 0a 20 20 22 2e 6c 69 6d 69 74 20 3f 4c  dif.  ".limit ?L
14b10 49 4d 49 54 3f 20 3f 56 41 4c 3f 20 20 20 44 69  IMIT? ?VAL?   Di
14b20 73 70 6c 61 79 20 6f 72 20 63 68 61 6e 67 65 20  splay or change 
14b30 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 6e 20  the value of an 
14b40 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5c 6e 22 0a  SQLITE_LIMIT\n".
14b50 20 20 22 2e 6c 69 6e 74 20 4f 50 54 49 4f 4e 53    ".lint OPTIONS
14b60 20 20 20 20 20 20 20 20 20 20 52 65 70 6f 72 74            Report
14b70 20 70 6f 74 65 6e 74 69 61 6c 20 73 63 68 65 6d   potential schem
14b80 61 20 69 73 73 75 65 73 2e 20 4f 70 74 69 6f 6e  a issues. Option
14b90 73 3a 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  s:\n".  "       
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 66 6b 65 79 2d 69 6e 64 65 78 65 73 20 20    fkey-indexes  
14bc0 20 20 20 46 69 6e 64 20 6d 69 73 73 69 6e 67 20     Find missing 
14bd0 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 64 65  foreign key inde
14be0 78 65 73 5c 6e 22 0a 23 69 66 6e 64 65 66 20 53  xes\n".#ifndef S
14bf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
14c00 45 58 54 45 4e 53 49 4f 4e 0a 20 20 22 2e 6c 6f  EXTENSION.  ".lo
14c10 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59 3f 20  ad FILE ?ENTRY? 
14c20 20 20 20 20 4c 6f 61 64 20 61 6e 20 65 78 74 65      Load an exte
14c30 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 5c 6e 22  nsion library\n"
14c40 0a 23 65 6e 64 69 66 0a 20 20 22 2e 6c 6f 67 20  .#endif.  ".log 
14c50 46 49 4c 45 7c 6f 66 66 20 20 20 20 20 20 20 20  FILE|off        
14c60 20 20 54 75 72 6e 20 6c 6f 67 67 69 6e 67 20 6f    Turn logging o
14c70 6e 20 6f 72 20 6f 66 66 2e 20 20 46 49 4c 45 20  n or off.  FILE 
14c80 63 61 6e 20 62 65 20 73 74 64 65 72 72 2f 73 74  can be stderr/st
14c90 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 6d 6f 64 65  dout\n".  ".mode
14ca0 20 4d 4f 44 45 20 3f 54 41 42 4c 45 3f 20 20 20   MODE ?TABLE?   
14cb0 20 20 53 65 74 20 6f 75 74 70 75 74 20 6d 6f 64    Set output mod
14cc0 65 20 77 68 65 72 65 20 4d 4f 44 45 20 69 73 20  e where MODE is 
14cd0 6f 6e 65 20 6f 66 3a 5c 6e 22 0a 20 20 22 20 20  one of:\n".  "  
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cf0 20 20 20 20 20 20 20 61 73 63 69 69 20 20 20 20         ascii    
14d00 43 6f 6c 75 6d 6e 73 2f 72 6f 77 73 20 64 65 6c  Columns/rows del
14d10 69 6d 69 74 65 64 20 62 79 20 30 78 31 46 20 61  imited by 0x1F a
14d20 6e 64 20 30 78 31 45 5c 6e 22 0a 20 20 22 20 20  nd 0x1E\n".  "  
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d40 20 20 20 20 20 20 20 63 73 76 20 20 20 20 20 20         csv      
14d50 43 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20  Comma-separated 
14d60 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 20 20 20  values\n".  "   
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20 20 20 4c        column   L
14d90 65 66 74 2d 61 6c 69 67 6e 65 64 20 63 6f 6c 75  eft-aligned colu
14da0 6d 6e 73 2e 20 20 28 53 65 65 20 2e 77 69 64 74  mns.  (See .widt
14db0 68 29 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  h)\n".  "       
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 68 74 6d 6c 20 20 20 20 20 48 54 4d 4c 20    html     HTML 
14de0 3c 74 61 62 6c 65 3e 20 63 6f 64 65 5c 6e 22 0a  <table> code\n".
14df0 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
14e00 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
14e10 72 74 20 20 20 53 51 4c 20 69 6e 73 65 72 74 20  rt   SQL insert 
14e20 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72 20 54  statements for T
14e30 41 42 4c 45 5c 6e 22 0a 20 20 22 20 20 20 20 20  ABLE\n".  "     
14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e50 20 20 20 20 6c 69 6e 65 20 20 20 20 20 4f 6e 65      line     One
14e60 20 76 61 6c 75 65 20 70 65 72 20 6c 69 6e 65 5c   value per line\
14e70 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
14e90 69 73 74 20 20 20 20 20 56 61 6c 75 65 73 20 64  ist     Values d
14ea0 65 6c 69 6d 69 74 65 64 20 62 79 20 5c 22 7c 5c  elimited by \"|\
14eb0 22 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  "\n".  "        
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ed0 20 71 75 6f 74 65 20 20 20 20 45 73 63 61 70 65   quote    Escape
14ee0 20 61 6e 73 77 65 72 73 20 61 73 20 66 6f 72 20   answers as for 
14ef0 53 51 4c 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  SQL\n".  "      
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 74 61 62 73 20 20 20 20 20 54 61 62 2d     tabs     Tab-
14f20 73 65 70 61 72 61 74 65 64 20 76 61 6c 75 65 73  separated values
14f30 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f50 74 63 6c 20 20 20 20 20 20 54 43 4c 20 6c 69 73  tcl      TCL lis
14f60 74 20 65 6c 65 6d 65 6e 74 73 5c 6e 22 0a 20 20  t elements\n".  
14f70 22 2e 6e 75 6c 6c 76 61 6c 75 65 20 53 54 52 49  ".nullvalue STRI
14f80 4e 47 20 20 20 20 20 20 55 73 65 20 53 54 52 49  NG      Use STRI
14f90 4e 47 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 4e  NG in place of N
14fa0 55 4c 4c 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20  ULL values\n".  
14fb0 22 2e 6f 6e 63 65 20 46 49 4c 45 4e 41 4d 45 20  ".once FILENAME 
14fc0 20 20 20 20 20 20 20 20 4f 75 74 70 75 74 20 66          Output f
14fd0 6f 72 20 74 68 65 20 6e 65 78 74 20 53 51 4c 20  or the next SQL 
14fe0 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 74 6f 20  command only to 
14ff0 46 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22 2e  FILENAME\n".  ".
15000 6f 70 65 6e 20 3f 4f 50 54 49 4f 4e 53 3f 20 3f  open ?OPTIONS? ?
15010 46 49 4c 45 3f 20 43 6c 6f 73 65 20 65 78 69 73  FILE? Close exis
15020 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 61 6e  ting database an
15030 64 20 72 65 6f 70 65 6e 20 46 49 4c 45 5c 6e 22  d reopen FILE\n"
15040 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
15050 20 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65               The
15060 20 2d 2d 6e 65 77 20 6f 70 74 69 6f 6e 20 73 74   --new option st
15070 61 72 74 73 20 77 69 74 68 20 61 6e 20 65 6d 70  arts with an emp
15080 74 79 20 66 69 6c 65 5c 6e 22 0a 20 20 22 2e 6f  ty file\n".  ".o
15090 75 74 70 75 74 20 3f 46 49 4c 45 4e 41 4d 45 3f  utput ?FILENAME?
150a0 20 20 20 20 20 53 65 6e 64 20 6f 75 74 70 75 74       Send output
150b0 20 74 6f 20 46 49 4c 45 4e 41 4d 45 20 6f 72 20   to FILENAME or 
150c0 73 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 70 72  stdout\n".  ".pr
150d0 69 6e 74 20 53 54 52 49 4e 47 2e 2e 2e 20 20 20  int STRING...   
150e0 20 20 20 20 50 72 69 6e 74 20 6c 69 74 65 72 61      Print litera
150f0 6c 20 53 54 52 49 4e 47 5c 6e 22 0a 20 20 22 2e  l STRING\n".  ".
15100 70 72 6f 6d 70 74 20 4d 41 49 4e 20 43 4f 4e 54  prompt MAIN CONT
15110 49 4e 55 45 20 20 52 65 70 6c 61 63 65 20 74 68  INUE  Replace th
15120 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f 6d 70  e standard promp
15130 74 73 5c 6e 22 0a 20 20 22 2e 71 75 69 74 20 20  ts\n".  ".quit  
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 45 78 69 74 20 74 68 69 73 20 70 72 6f 67 72 61  Exit this progra
15160 6d 5c 6e 22 0a 20 20 22 2e 72 65 61 64 20 46 49  m\n".  ".read FI
15170 4c 45 4e 41 4d 45 20 20 20 20 20 20 20 20 20 45  LENAME         E
15180 78 65 63 75 74 65 20 53 51 4c 20 69 6e 20 46 49  xecute SQL in FI
15190 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22 2e 72 65  LENAME\n".  ".re
151a0 73 74 6f 72 65 20 3f 44 42 3f 20 46 49 4c 45 20  store ?DB? FILE 
151b0 20 20 20 20 52 65 73 74 6f 72 65 20 63 6f 6e 74      Restore cont
151c0 65 6e 74 20 6f 66 20 44 42 20 28 64 65 66 61 75  ent of DB (defau
151d0 6c 74 20 5c 22 6d 61 69 6e 5c 22 29 20 66 72 6f  lt \"main\") fro
151e0 6d 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73 61  m FILE\n".  ".sa
151f0 76 65 20 46 49 4c 45 20 20 20 20 20 20 20 20 20  ve FILE         
15200 20 20 20 20 57 72 69 74 65 20 69 6e 2d 6d 65 6d      Write in-mem
15210 6f 72 79 20 64 61 74 61 62 61 73 65 20 69 6e 74  ory database int
15220 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73 63  o FILE\n".  ".sc
15230 61 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66 20 20  anstats on|off  
15240 20 20 20 20 54 75 72 6e 20 73 71 6c 69 74 65 33      Turn sqlite3
15250 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75 73  _stmt_scanstatus
15260 28 29 20 6d 65 74 72 69 63 73 20 6f 6e 20 6f 72  () metrics on or
15270 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 73 63 68 65   off\n".  ".sche
15280 6d 61 20 3f 50 41 54 54 45 52 4e 3f 20 20 20 20  ma ?PATTERN?    
15290 20 20 53 68 6f 77 20 74 68 65 20 43 52 45 41 54    Show the CREAT
152a0 45 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 74  E statements mat
152b0 63 68 69 6e 67 20 50 41 54 54 45 52 4e 5c 6e 22  ching PATTERN\n"
152c0 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64                Ad
152e0 64 20 2d 2d 69 6e 64 65 6e 74 20 66 6f 72 20 70  d --indent for p
152f0 72 65 74 74 79 2d 70 72 69 6e 74 69 6e 67 5c 6e  retty-printing\n
15300 22 0a 20 20 22 2e 73 65 6c 66 74 65 73 74 20 3f  ".  ".selftest ?
15310 2d 2d 69 6e 69 74 3f 20 20 20 20 20 52 75 6e 20  --init?     Run 
15320 74 65 73 74 73 20 64 65 66 69 6e 65 64 20 69 6e  tests defined in
15330 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74 61   the SELFTEST ta
15340 62 6c 65 5c 6e 22 0a 20 20 22 2e 73 65 70 61 72  ble\n".  ".separ
15350 61 74 6f 72 20 43 4f 4c 20 3f 52 4f 57 3f 20 20  ator COL ?ROW?  
15360 20 43 68 61 6e 67 65 20 74 68 65 20 63 6f 6c 75   Change the colu
15370 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 61 6e 64  mn separator and
15380 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 74 68 65 20   optionally the 
15390 72 6f 77 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  row\n".  "      
153a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153b0 20 20 20 73 65 70 61 72 61 74 6f 72 20 66 6f 72     separator for
153c0 20 62 6f 74 68 20 74 68 65 20 6f 75 74 70 75 74   both the output
153d0 20 6d 6f 64 65 20 61 6e 64 20 2e 69 6d 70 6f 72   mode and .impor
153e0 74 5c 6e 22 0a 23 69 66 20 64 65 66 69 6e 65 64  t\n".#if defined
153f0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
15400 45 53 53 49 4f 4e 29 0a 20 20 22 2e 73 65 73 73  ESSION).  ".sess
15410 69 6f 6e 20 43 4d 44 20 2e 2e 2e 20 20 20 20 20  ion CMD ...     
15420 20 20 43 72 65 61 74 65 20 6f 72 20 63 6f 6e 74    Create or cont
15430 72 6f 6c 20 73 65 73 73 69 6f 6e 73 5c 6e 22 0a  rol sessions\n".
15440 23 65 6e 64 69 66 0a 20 20 22 2e 73 68 61 33 73  #endif.  ".sha3s
15450 75 6d 20 3f 4f 50 54 49 4f 4e 53 2e 2e 2e 3f 20  um ?OPTIONS...? 
15460 20 43 6f 6d 70 75 74 65 20 61 20 53 48 41 33 20   Compute a SHA3 
15470 68 61 73 68 20 6f 66 20 64 61 74 61 62 61 73 65  hash of database
15480 20 63 6f 6e 74 65 6e 74 5c 6e 22 0a 20 20 22 2e   content\n".  ".
15490 73 68 65 6c 6c 20 43 4d 44 20 41 52 47 53 2e 2e  shell CMD ARGS..
154a0 2e 20 20 20 20 20 52 75 6e 20 43 4d 44 20 41 52  .     Run CMD AR
154b0 47 53 2e 2e 2e 20 69 6e 20 61 20 73 79 73 74 65  GS... in a syste
154c0 6d 20 73 68 65 6c 6c 5c 6e 22 0a 20 20 22 2e 73  m shell\n".  ".s
154d0 68 6f 77 20 20 20 20 20 20 20 20 20 20 20 20 20  how             
154e0 20 20 20 20 20 53 68 6f 77 20 74 68 65 20 63 75       Show the cu
154f0 72 72 65 6e 74 20 76 61 6c 75 65 73 20 66 6f 72  rrent values for
15500 20 76 61 72 69 6f 75 73 20 73 65 74 74 69 6e 67   various setting
15510 73 5c 6e 22 0a 20 20 22 2e 73 74 61 74 73 20 3f  s\n".  ".stats ?
15520 6f 6e 7c 6f 66 66 3f 20 20 20 20 20 20 20 20 53  on|off?        S
15530 68 6f 77 20 73 74 61 74 73 20 6f 72 20 74 75 72  how stats or tur
15540 6e 20 73 74 61 74 73 20 6f 6e 20 6f 72 20 6f 66  n stats on or of
15550 66 5c 6e 22 0a 20 20 22 2e 73 79 73 74 65 6d 20  f\n".  ".system 
15560 43 4d 44 20 41 52 47 53 2e 2e 2e 20 20 20 20 52  CMD ARGS...    R
15570 75 6e 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20 69  un CMD ARGS... i
15580 6e 20 61 20 73 79 73 74 65 6d 20 73 68 65 6c 6c  n a system shell
15590 5c 6e 22 0a 20 20 22 2e 74 61 62 6c 65 73 20 3f  \n".  ".tables ?
155a0 54 41 42 4c 45 3f 20 20 20 20 20 20 20 20 4c 69  TABLE?        Li
155b0 73 74 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c  st names of tabl
155c0 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  es\n".  "       
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 20 20 49 66 20 54 41 42 4c 45 20 73 70 65 63 69    If TABLE speci
155f0 66 69 65 64 2c 20 6f 6e 6c 79 20 6c 69 73 74 20  fied, only list 
15600 74 61 62 6c 65 73 20 6d 61 74 63 68 69 6e 67 5c  tables matching\
15610 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
15630 49 4b 45 20 70 61 74 74 65 72 6e 20 54 41 42 4c  IKE pattern TABL
15640 45 2e 5c 6e 22 0a 20 20 22 2e 74 65 73 74 63 61  E.\n".  ".testca
15650 73 65 20 4e 41 4d 45 20 20 20 20 20 20 20 20 20  se NAME         
15660 42 65 67 69 6e 20 72 65 64 69 72 65 63 74 69 6e  Begin redirectin
15670 67 20 6f 75 74 70 75 74 20 74 6f 20 27 74 65 73  g output to 'tes
15680 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c 6e  tcase-out.txt'\n
15690 22 0a 20 20 22 2e 74 69 6d 65 6f 75 74 20 4d 53  ".  ".timeout MS
156a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 79 20              Try 
156b0 6f 70 65 6e 69 6e 67 20 6c 6f 63 6b 65 64 20 74  opening locked t
156c0 61 62 6c 65 73 20 66 6f 72 20 4d 53 20 6d 69 6c  ables for MS mil
156d0 6c 69 73 65 63 6f 6e 64 73 5c 6e 22 0a 20 20 22  liseconds\n".  "
156e0 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 20 20 20  .timer on|off   
156f0 20 20 20 20 20 20 20 54 75 72 6e 20 53 51 4c 20         Turn SQL 
15700 74 69 6d 65 72 20 6f 6e 20 6f 72 20 6f 66 66 5c  timer on or off\
15710 6e 22 0a 20 20 22 2e 74 72 61 63 65 20 46 49 4c  n".  ".trace FIL
15720 45 7c 6f 66 66 20 20 20 20 20 20 20 20 4f 75 74  E|off        Out
15730 70 75 74 20 65 61 63 68 20 53 51 4c 20 73 74 61  put each SQL sta
15740 74 65 6d 65 6e 74 20 61 73 20 69 74 20 69 73 20  tement as it is 
15750 72 75 6e 5c 6e 22 0a 20 20 22 2e 76 66 73 69 6e  run\n".  ".vfsin
15760 66 6f 20 3f 41 55 58 3f 20 20 20 20 20 20 20 20  fo ?AUX?        
15770 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
15780 75 74 20 74 68 65 20 74 6f 70 2d 6c 65 76 65 6c  ut the top-level
15790 20 56 46 53 5c 6e 22 0a 20 20 22 2e 76 66 73 6c   VFS\n".  ".vfsl
157a0 69 73 74 20 20 20 20 20 20 20 20 20 20 20 20 20  ist             
157b0 20 20 4c 69 73 74 20 61 6c 6c 20 61 76 61 69 6c    List all avail
157c0 61 62 6c 65 20 56 46 53 65 73 5c 6e 22 0a 20 20  able VFSes\n".  
157d0 22 2e 76 66 73 6e 61 6d 65 20 3f 41 55 58 3f 20  ".vfsname ?AUX? 
157e0 20 20 20 20 20 20 20 20 50 72 69 6e 74 20 74 68          Print th
157f0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 56 46  e name of the VF
15800 53 20 73 74 61 63 6b 5c 6e 22 0a 20 20 22 2e 77  S stack\n".  ".w
15810 69 64 74 68 20 4e 55 4d 31 20 4e 55 4d 32 20 2e  idth NUM1 NUM2 .
15820 2e 2e 20 20 20 53 65 74 20 63 6f 6c 75 6d 6e 20  ..   Set column 
15830 77 69 64 74 68 73 20 66 6f 72 20 5c 22 63 6f 6c  widths for \"col
15840 75 6d 6e 5c 22 20 6d 6f 64 65 5c 6e 22 0a 20 20  umn\" mode\n".  
15850 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
15860 20 20 20 20 20 20 20 20 20 20 4e 65 67 61 74 69            Negati
15870 76 65 20 76 61 6c 75 65 73 20 72 69 67 68 74 2d  ve values right-
15880 6a 75 73 74 69 66 79 5c 6e 22 0a 3b 0a 0a 23 69  justify\n".;..#i
15890 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
158a0 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29  _ENABLE_SESSION)
158b0 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 68 65 6c  ./*.** Print hel
158c0 70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  p information fo
158d0 72 20 74 68 65 20 22 2e 73 65 73 73 69 6f 6e 73  r the ".sessions
158e0 22 20 63 6f 6d 6d 61 6e 64 0a 2a 2f 0a 76 6f 69  " command.*/.voi
158f0 64 20 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28 53  d session_help(S
15900 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20  hellState *p){. 
15910 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
15920 75 74 2c 0a 20 20 20 20 22 2e 73 65 73 73 69 6f  ut,.    ".sessio
15930 6e 20 3f 4e 41 4d 45 3f 20 53 55 42 43 4f 4d 4d  n ?NAME? SUBCOMM
15940 41 4e 44 20 3f 41 52 47 53 2e 2e 2e 3f 5c 6e 22  AND ?ARGS...?\n"
15950 0a 20 20 20 20 22 49 66 20 3f 4e 41 4d 45 3f 20  .    "If ?NAME? 
15960 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 20  is omitted, the 
15970 66 69 72 73 74 20 64 65 66 69 6e 65 64 20 73 65  first defined se
15980 73 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 5c 6e  ssion is used.\n
15990 22 0a 20 20 20 20 22 53 75 62 63 6f 6d 6d 61 6e  ".    "Subcomman
159a0 64 73 3a 5c 6e 22 0a 20 20 20 20 22 20 20 20 61  ds:\n".    "   a
159b0 74 74 61 63 68 20 54 41 42 4c 45 20 20 20 20 20  ttach TABLE     
159c0 20 20 20 20 20 20 20 20 41 74 74 61 63 68 20 54          Attach T
159d0 41 42 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20 20  ABLE\n".    "   
159e0 63 68 61 6e 67 65 73 65 74 20 46 49 4c 45 20 20  changeset FILE  
159f0 20 20 20 20 20 20 20 20 20 57 72 69 74 65 20 61           Write a
15a00 20 63 68 61 6e 67 65 73 65 74 20 69 6e 74 6f 20   changeset into 
15a10 46 49 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20 20  FILE\n".    "   
15a20 63 6c 6f 73 65 20 20 20 20 20 20 20 20 20 20 20  close           
15a30 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65 20 6f           Close o
15a40 6e 65 20 73 65 73 73 69 6f 6e 5c 6e 22 0a 20 20  ne session\n".  
15a50 20 20 22 20 20 20 65 6e 61 62 6c 65 20 3f 42 4f    "   enable ?BO
15a60 4f 4c 45 41 4e 3f 20 20 20 20 20 20 20 20 20 53  OLEAN?         S
15a70 65 74 20 6f 72 20 71 75 65 72 79 20 74 68 65 20  et or query the 
15a80 65 6e 61 62 6c 65 20 62 69 74 5c 6e 22 0a 20 20  enable bit\n".  
15a90 20 20 22 20 20 20 66 69 6c 74 65 72 20 47 4c 4f    "   filter GLO
15aa0 42 2e 2e 2e 20 20 20 20 20 20 20 20 20 20 20 52  B...           R
15ab0 65 6a 65 63 74 20 74 61 62 6c 65 73 20 6d 61 74  eject tables mat
15ac0 63 68 69 6e 67 20 47 4c 4f 42 73 5c 6e 22 0a 20  ching GLOBs\n". 
15ad0 20 20 20 22 20 20 20 69 6e 64 69 72 65 63 74 20     "   indirect 
15ae0 3f 42 4f 4f 4c 45 41 4e 3f 20 20 20 20 20 20 20  ?BOOLEAN?       
15af0 4d 61 72 6b 20 6f 72 20 71 75 65 72 79 20 74 68  Mark or query th
15b00 65 20 69 6e 64 69 72 65 63 74 20 73 74 61 74 75  e indirect statu
15b10 73 5c 6e 22 0a 20 20 20 20 22 20 20 20 69 73 65  s\n".    "   ise
15b20 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20 20  mpty            
15b30 20 20 20 20 20 20 51 75 65 72 79 20 77 68 65 74        Query whet
15b40 68 65 72 20 74 68 65 20 73 65 73 73 69 6f 6e 20  her the session 
15b50 69 73 20 65 6d 70 74 79 5c 6e 22 0a 20 20 20 20  is empty\n".    
15b60 22 20 20 20 6c 69 73 74 20 20 20 20 20 20 20 20  "   list        
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 73               Lis
15b80 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  t currently open
15b90 20 73 65 73 73 69 6f 6e 20 6e 61 6d 65 73 5c 6e   session names\n
15ba0 22 0a 20 20 20 20 22 20 20 20 6f 70 65 6e 20 44  ".    "   open D
15bb0 42 20 4e 41 4d 45 20 20 20 20 20 20 20 20 20 20  B NAME          
15bc0 20 20 20 4f 70 65 6e 20 61 20 6e 65 77 20 73 65     Open a new se
15bd0 73 73 69 6f 6e 20 6f 6e 20 44 42 5c 6e 22 0a 20  ssion on DB\n". 
15be0 20 20 20 22 20 20 20 70 61 74 63 68 73 65 74 20     "   patchset 
15bf0 46 49 4c 45 20 20 20 20 20 20 20 20 20 20 20 20  FILE            
15c00 57 72 69 74 65 20 61 20 70 61 74 63 68 73 65 74  Write a patchset
15c10 20 69 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20   into FILE\n".  
15c20 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  );.}.#endif.../*
15c30 20 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e   Forward referen
15c40 63 65 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  ce */.static int
15c50 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28 53   process_input(S
15c60 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 46 49  hellState *p, FI
15c70 4c 45 20 2a 69 6e 29 3b 0a 0a 2f 2a 0a 2a 2a 20  LE *in);../*.** 
15c80 52 65 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  Read the content
15c90 20 6f 66 20 66 69 6c 65 20 7a 4e 61 6d 65 20 69   of file zName i
15ca0 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69  nto memory obtai
15cb0 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
15cc0 5f 6d 61 6c 6c 6f 63 36 34 28 29 0a 2a 2a 20 61  _malloc64().** a
15cd0 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e  nd return a poin
15ce0 74 65 72 20 74 6f 20 74 68 65 20 62 75 66 66 65  ter to the buffe
15cf0 72 2e 20 54 68 65 20 63 61 6c 6c 65 72 20 69 73  r. The caller is
15d00 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
15d10 20 66 72 65 65 69 6e 67 0a 2a 2a 20 74 68 65 20   freeing.** the 
15d20 6d 65 6d 6f 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66  memory..**.** If
15d30 20 70 61 72 61 6d 65 74 65 72 20 70 6e 42 79 74   parameter pnByt
15d40 65 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 28  e is not NULL, (
15d50 2a 70 6e 42 79 74 65 29 20 69 73 20 73 65 74 20  *pnByte) is set 
15d60 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
15d70 20 62 79 74 65 73 0a 2a 2a 20 72 65 61 64 2e 0a   bytes.** read..
15d80 2a 2a 0a 2a 2a 20 46 6f 72 20 63 6f 6e 76 65 6e  **.** For conven
15d90 69 65 6e 63 65 2c 20 61 20 6e 75 6c 2d 74 65 72  ience, a nul-ter
15da0 6d 69 6e 61 74 6f 72 20 62 79 74 65 20 69 73 20  minator byte is 
15db0 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64 20  always appended 
15dc0 74 6f 20 74 68 65 20 64 61 74 61 20 72 65 61 64  to the data read
15dd0 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 66 69 6c  .** from the fil
15de0 65 20 62 65 66 6f 72 65 20 74 68 65 20 62 75 66  e before the buf
15df0 66 65 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e  fer is returned.
15e00 20 54 68 69 73 20 62 79 74 65 20 69 73 20 6e 6f   This byte is no
15e10 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 0a 2a 2a  t included in.**
15e20 20 74 68 65 20 66 69 6e 61 6c 20 76 61 6c 75 65   the final value
15e30 20 6f 66 20 28 2a 70 6e 42 79 74 65 29 2c 20 69   of (*pnByte), i
15e40 66 20 61 70 70 6c 69 63 61 62 6c 65 2e 0a 2a 2a  f applicable..**
15e50 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74 75  .** NULL is retu
15e60 72 6e 65 64 20 69 66 20 61 6e 79 20 65 72 72 6f  rned if any erro
15e70 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
15e80 2e 20 54 68 65 20 66 69 6e 61 6c 20 76 61 6c 75  . The final valu
15e90 65 20 6f 66 20 2a 70 6e 42 79 74 65 0a 2a 2a 20  e of *pnByte.** 
15ea0 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 20  is undefined in 
15eb0 74 68 69 73 20 63 61 73 65 2e 0a 2a 2f 0a 73 74  this case..*/.st
15ec0 61 74 69 63 20 63 68 61 72 20 2a 72 65 61 64 46  atic char *readF
15ed0 69 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ile(const char *
15ee0 7a 4e 61 6d 65 2c 20 69 6e 74 20 2a 70 6e 42 79  zName, int *pnBy
15ef0 74 65 29 7b 0a 20 20 46 49 4c 45 20 2a 69 6e 20  te){.  FILE *in 
15f00 3d 20 66 6f 70 65 6e 28 7a 4e 61 6d 65 2c 20 22  = fopen(zName, "
15f10 72 62 22 29 3b 0a 20 20 6c 6f 6e 67 20 6e 49 6e  rb");.  long nIn
15f20 3b 0a 20 20 73 69 7a 65 5f 74 20 6e 52 65 61 64  ;.  size_t nRead
15f30 3b 0a 20 20 63 68 61 72 20 2a 70 42 75 66 3b 0a  ;.  char *pBuf;.
15f40 20 20 69 66 28 20 69 6e 3d 3d 30 20 29 20 72 65    if( in==0 ) re
15f50 74 75 72 6e 20 30 3b 0a 20 20 66 73 65 65 6b 28  turn 0;.  fseek(
15f60 69 6e 2c 20 30 2c 20 53 45 45 4b 5f 45 4e 44 29  in, 0, SEEK_END)
15f70 3b 0a 20 20 6e 49 6e 20 3d 20 66 74 65 6c 6c 28  ;.  nIn = ftell(
15f80 69 6e 29 3b 0a 20 20 72 65 77 69 6e 64 28 69 6e  in);.  rewind(in
15f90 29 3b 0a 20 20 70 42 75 66 20 3d 20 73 71 6c 69  );.  pBuf = sqli
15fa0 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 20 6e 49  te3_malloc64( nI
15fb0 6e 2b 31 20 29 3b 0a 20 20 69 66 28 20 70 42 75  n+1 );.  if( pBu
15fc0 66 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  f==0 ) return 0;
15fd0 0a 20 20 6e 52 65 61 64 20 3d 20 66 72 65 61 64  .  nRead = fread
15fe0 28 70 42 75 66 2c 20 6e 49 6e 2c 20 31 2c 20 69  (pBuf, nIn, 1, i
15ff0 6e 29 3b 0a 20 20 66 63 6c 6f 73 65 28 69 6e 29  n);.  fclose(in)
16000 3b 0a 20 20 69 66 28 20 6e 52 65 61 64 21 3d 31  ;.  if( nRead!=1
16010 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
16020 66 72 65 65 28 70 42 75 66 29 3b 0a 20 20 20 20  free(pBuf);.    
16030 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
16040 70 42 75 66 5b 6e 49 6e 5d 20 3d 20 30 3b 0a 20  pBuf[nIn] = 0;. 
16050 20 69 66 28 20 70 6e 42 79 74 65 20 29 20 2a 70   if( pnByte ) *p
16060 6e 42 79 74 65 20 3d 20 6e 49 6e 3b 0a 20 20 72  nByte = nIn;.  r
16070 65 74 75 72 6e 20 70 42 75 66 3b 0a 7d 0a 0a 23  eturn pBuf;.}..#
16080 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
16090 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e  E_ENABLE_SESSION
160a0 29 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20  )./*.** Close a 
160b0 73 69 6e 67 6c 65 20 4f 70 65 6e 53 65 73 73 69  single OpenSessi
160c0 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 72 65  on object and re
160d0 6c 65 61 73 65 20 61 6c 6c 20 6f 66 20 69 74 73  lease all of its
160e0 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 72   associated.** r
160f0 65 73 6f 75 72 63 65 73 2e 0a 2a 2f 0a 73 74 61  esources..*/.sta
16100 74 69 63 20 76 6f 69 64 20 73 65 73 73 69 6f 6e  tic void session
16110 5f 63 6c 6f 73 65 28 4f 70 65 6e 53 65 73 73 69  _close(OpenSessi
16120 6f 6e 20 2a 70 53 65 73 73 69 6f 6e 29 7b 0a 20  on *pSession){. 
16130 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
16140 33 73 65 73 73 69 6f 6e 5f 64 65 6c 65 74 65 28  3session_delete(
16150 70 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20  pSession->p);.  
16160 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53 65  sqlite3_free(pSe
16170 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 29 3b 0a 20  ssion->zName);. 
16180 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 53 65 73   for(i=0; i<pSes
16190 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20 69  sion->nFilter; i
161a0 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
161b0 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e  _free(pSession->
161c0 61 7a 46 69 6c 74 65 72 5b 69 5d 29 3b 0a 20 20  azFilter[i]);.  
161d0 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  }.  sqlite3_free
161e0 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c  (pSession->azFil
161f0 74 65 72 29 3b 0a 20 20 6d 65 6d 73 65 74 28 70  ter);.  memset(p
16200 53 65 73 73 69 6f 6e 2c 20 30 2c 20 73 69 7a 65  Session, 0, size
16210 6f 66 28 4f 70 65 6e 53 65 73 73 69 6f 6e 29 29  of(OpenSession))
16220 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
16230 2a 20 43 6c 6f 73 65 20 61 6c 6c 20 4f 70 65 6e  * Close all Open
16240 53 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 73 20  Session objects 
16250 61 6e 64 20 72 65 6c 65 61 73 65 20 61 6c 6c 20  and release all 
16260 61 73 73 6f 63 69 61 74 65 64 20 72 65 73 6f 75  associated resou
16270 72 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  rces..*/.#if def
16280 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
16290 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 73 74 61 74  LE_SESSION).stat
162a0 69 63 20 76 6f 69 64 20 73 65 73 73 69 6f 6e 5f  ic void session_
162b0 63 6c 6f 73 65 5f 61 6c 6c 28 53 68 65 6c 6c 53  close_all(ShellS
162c0 74 61 74 65 20 2a 70 29 7b 0a 20 20 69 6e 74 20  tate *p){.  int 
162d0 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  i;.  for(i=0; i<
162e0 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b  p->nSession; i++
162f0 29 7b 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 63  ){.    session_c
16300 6c 6f 73 65 28 26 70 2d 3e 61 53 65 73 73 69 6f  lose(&p->aSessio
16310 6e 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e  n[i]);.  }.  p->
16320 6e 53 65 73 73 69 6f 6e 20 3d 20 30 3b 0a 7d 0a  nSession = 0;.}.
16330 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
16340 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c 6c  ession_close_all
16350 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
16360 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * Implementation
16370 20 6f 66 20 74 68 65 20 78 46 69 6c 74 65 72 20   of the xFilter 
16380 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
16390 6f 70 65 6e 20 73 65 73 73 69 6f 6e 2e 20 20 4f  open session.  O
163a0 6d 69 74 0a 2a 2a 20 61 6e 79 20 74 61 62 6c 65  mit.** any table
163b0 73 20 6e 61 6d 65 64 20 62 79 20 22 2e 73 65 73  s named by ".ses
163c0 73 69 6f 6e 20 66 69 6c 74 65 72 22 20 62 75 74  sion filter" but
163d0 20 6c 65 74 20 61 6c 6c 20 6f 74 68 65 72 20 74   let all other t
163e0 61 62 6c 65 20 74 68 72 6f 75 67 68 2e 0a 2a 2f  able through..*/
163f0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
16400 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49  ITE_ENABLE_SESSI
16410 4f 4e 29 0a 73 74 61 74 69 63 20 69 6e 74 20 73  ON).static int s
16420 65 73 73 69 6f 6e 5f 66 69 6c 74 65 72 28 76 6f  ession_filter(vo
16430 69 64 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74 20  id *pCtx, const 
16440 63 68 61 72 20 2a 7a 54 61 62 29 7b 0a 20 20 4f  char *zTab){.  O
16450 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70 53 65 73  penSession *pSes
16460 73 69 6f 6e 20 3d 20 28 4f 70 65 6e 53 65 73 73  sion = (OpenSess
16470 69 6f 6e 2a 29 70 43 74 78 3b 0a 20 20 69 6e 74  ion*)pCtx;.  int
16480 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   i;.  for(i=0; i
16490 3c 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74  <pSession->nFilt
164a0 65 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  er; i++){.    if
164b0 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f  ( sqlite3_strglo
164c0 62 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  b(pSession->azFi
164d0 6c 74 65 72 5b 69 5d 2c 20 7a 54 61 62 29 3d 3d  lter[i], zTab)==
164e0 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
164f0 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  }.  return 1;.}.
16500 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
16510 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61  ke sure the data
16520 62 61 73 65 20 69 73 20 6f 70 65 6e 2e 20 20 49  base is open.  I
16530 66 20 69 74 20 69 73 20 6e 6f 74 2c 20 74 68 65  f it is not, the
16540 6e 20 6f 70 65 6e 20 69 74 2e 20 20 49 66 0a 2a  n open it.  If.*
16550 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  * the database f
16560 61 69 6c 73 20 74 6f 20 6f 70 65 6e 2c 20 70 72  ails to open, pr
16570 69 6e 74 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  int an error mes
16580 73 61 67 65 20 61 6e 64 20 65 78 69 74 2e 0a 2a  sage and exit..*
16590 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 70  /.static void op
165a0 65 6e 5f 64 62 28 53 68 65 6c 6c 53 74 61 74 65  en_db(ShellState
165b0 20 2a 70 2c 20 69 6e 74 20 6b 65 65 70 41 6c 69   *p, int keepAli
165c0 76 65 29 7b 0a 20 20 69 66 28 20 70 2d 3e 64 62  ve){.  if( p->db
165d0 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
165e0 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b  e3_initialize();
165f0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6f 70 65  .    sqlite3_ope
16600 6e 28 70 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d 65  n(p->zDbFilename
16610 2c 20 26 70 2d 3e 64 62 29 3b 0a 20 20 20 20 67  , &p->db);.    g
16620 6c 6f 62 61 6c 44 62 20 3d 20 70 2d 3e 64 62 3b  lobalDb = p->db;
16630 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d  .    if( p->db==
16640 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4f 4b 21 3d  0 || SQLITE_OK!=
16650 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
16660 70 2d 3e 64 62 29 20 29 7b 0a 20 20 20 20 20 20  p->db) ){.      
16670 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
16680 72 72 2c 22 45 72 72 6f 72 3a 20 75 6e 61 62 6c  rr,"Error: unabl
16690 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
166a0 73 65 20 5c 22 25 73 5c 22 3a 20 25 73 5c 6e 22  se \"%s\": %s\n"
166b0 2c 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a  ,.          p->z
166c0 44 62 46 69 6c 65 6e 61 6d 65 2c 20 73 71 6c 69  DbFilename, sqli
166d0 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62  te3_errmsg(p->db
166e0 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6b 65  ));.      if( ke
166f0 65 70 41 6c 69 76 65 20 29 20 72 65 74 75 72 6e  epAlive ) return
16700 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31 29 3b  ;.      exit(1);
16710 0a 20 20 20 20 7d 0a 23 69 66 6e 64 65 66 20 53  .    }.#ifndef S
16720 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
16730 45 58 54 45 4e 53 49 4f 4e 0a 20 20 20 20 73 71  EXTENSION.    sq
16740 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61  lite3_enable_loa
16750 64 5f 65 78 74 65 6e 73 69 6f 6e 28 70 2d 3e 64  d_extension(p->d
16760 62 2c 20 31 29 3b 0a 23 65 6e 64 69 66 0a 20 20  b, 1);.#endif.  
16770 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 69 6f    sqlite3_fileio
16780 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 30 2c 20  _init(p->db, 0, 
16790 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
167a0 73 68 61 74 68 72 65 65 5f 69 6e 69 74 28 70 2d  shathree_init(p-
167b0 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  >db, 0, 0);.    
167c0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
167d0 75 6e 63 74 69 6f 6e 28 70 2d 3e 64 62 2c 20 22  unction(p->db, "
167e0 73 68 65 6c 6c 5f 61 64 64 5f 73 63 68 65 6d 61  shell_add_schema
167f0 22 2c 20 32 2c 20 53 51 4c 49 54 45 5f 55 54 46  ", 2, SQLITE_UTF
16800 38 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  8, 0,.          
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16820 20 20 73 68 65 6c 6c 41 64 64 53 63 68 65 6d 61    shellAddSchema
16830 4e 61 6d 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Name, 0, 0);.   
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16850 20 20 20 20 20 20 20 20 20 0a 20 20 7d 0a 7d 0a           .  }.}.
16860 0a 2f 2a 0a 2a 2a 20 44 6f 20 43 2d 6c 61 6e 67  ./*.** Do C-lang
16870 75 61 67 65 20 73 74 79 6c 65 20 64 65 71 75 6f  uage style dequo
16880 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 5c  ting..**.**    \
16890 61 20 20 20 20 2d 3e 20 61 6c 61 72 6d 0a 2a 2a  a    -> alarm.**
168a0 20 20 20 20 5c 62 20 20 20 20 2d 3e 20 62 61 63      \b    -> bac
168b0 6b 73 70 61 63 65 0a 2a 2a 20 20 20 20 5c 74 20  kspace.**    \t 
168c0 20 20 20 2d 3e 20 74 61 62 0a 2a 2a 20 20 20 20     -> tab.**    
168d0 5c 6e 20 20 20 20 2d 3e 20 6e 65 77 6c 69 6e 65  \n    -> newline
168e0 0a 2a 2a 20 20 20 20 5c 76 20 20 20 20 2d 3e 20  .**    \v    -> 
168f0 76 65 72 74 69 63 61 6c 20 74 61 62 0a 2a 2a 20  vertical tab.** 
16900 20 20 20 5c 66 20 20 20 20 2d 3e 20 66 6f 72 6d     \f    -> form
16910 20 66 65 65 64 0a 2a 2a 20 20 20 20 5c 72 20 20   feed.**    \r  
16920 20 20 2d 3e 20 63 61 72 72 69 61 67 65 20 72 65    -> carriage re
16930 74 75 72 6e 0a 2a 2a 20 20 20 20 5c 73 20 20 20  turn.**    \s   
16940 20 2d 3e 20 73 70 61 63 65 0a 2a 2a 20 20 20 20   -> space.**    
16950 5c 22 20 20 20 20 2d 3e 20 22 0a 2a 2a 20 20 20  \"    -> ".**   
16960 20 5c 27 20 20 20 20 2d 3e 20 27 0a 2a 2a 20 20   \'    -> '.**  
16970 20 20 5c 5c 20 20 20 20 2d 3e 20 62 61 63 6b 73    \\    -> backs
16980 6c 61 73 68 0a 2a 2a 20 20 20 20 5c 4e 4e 4e 20  lash.**    \NNN 
16990 20 2d 3e 20 61 73 63 69 69 20 63 68 61 72 61 63   -> ascii charac
169a0 74 65 72 20 4e 4e 4e 20 69 6e 20 6f 63 74 61 6c  ter NNN in octal
169b0 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
169c0 72 65 73 6f 6c 76 65 5f 62 61 63 6b 73 6c 61 73  resolve_backslas
169d0 68 65 73 28 63 68 61 72 20 2a 7a 29 7b 0a 20 20  hes(char *z){.  
169e0 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 63 68 61 72  int i, j;.  char
169f0 20 63 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20   c;.  while( *z 
16a00 26 26 20 2a 7a 21 3d 27 5c 5c 27 20 29 20 7a 2b  && *z!='\\' ) z+
16a10 2b 3b 0a 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20  +;.  for(i=j=0; 
16a20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69  (c = z[i])!=0; i
16a30 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 69 66  ++, j++){.    if
16a40 28 20 63 3d 3d 27 5c 5c 27 20 26 26 20 7a 5b 69  ( c=='\\' && z[i
16a50 2b 31 5d 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  +1]!=0 ){.      
16a60 63 20 3d 20 7a 5b 2b 2b 69 5d 3b 0a 20 20 20 20  c = z[++i];.    
16a70 20 20 69 66 28 20 63 3d 3d 27 61 27 20 29 7b 0a    if( c=='a' ){.
16a80 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 61 27          c = '\a'
16a90 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
16aa0 28 20 63 3d 3d 27 62 27 20 29 7b 0a 20 20 20 20  ( c=='b' ){.    
16ab0 20 20 20 20 63 20 3d 20 27 5c 62 27 3b 0a 20 20      c = '\b';.  
16ac0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
16ad0 3d 27 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='t' ){.        
16ae0 63 20 3d 20 27 5c 74 27 3b 0a 20 20 20 20 20 20  c = '\t';.      
16af0 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 6e 27  }else if( c=='n'
16b00 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20   ){.        c = 
16b10 27 5c 6e 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73  '\n';.      }els
16b20 65 20 69 66 28 20 63 3d 3d 27 76 27 20 29 7b 0a  e if( c=='v' ){.
16b30 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 76 27          c = '\v'
16b40 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
16b50 28 20 63 3d 3d 27 66 27 20 29 7b 0a 20 20 20 20  ( c=='f' ){.    
16b60 20 20 20 20 63 20 3d 20 27 5c 66 27 3b 0a 20 20      c = '\f';.  
16b70 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
16b80 3d 27 72 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='r' ){.        
16b90 63 20 3d 20 27 5c 72 27 3b 0a 20 20 20 20 20 20  c = '\r';.      
16ba0 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 22 27  }else if( c=='"'
16bb0 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20   ){.        c = 
16bc0 27 22 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  '"';.      }else
16bd0 20 69 66 28 20 63 3d 3d 27 5c 27 27 20 29 7b 0a   if( c=='\'' ){.
16be0 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 27 27          c = '\''
16bf0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
16c00 28 20 63 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20 20  ( c=='\\' ){.   
16c10 20 20 20 20 20 63 20 3d 20 27 5c 5c 27 3b 0a 20       c = '\\';. 
16c20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63       }else if( c
16c30 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 37 27 20  >='0' && c<='7' 
16c40 29 7b 0a 20 20 20 20 20 20 20 20 63 20 2d 3d 20  ){.        c -= 
16c50 27 30 27 3b 0a 20 20 20 20 20 20 20 20 69 66 28  '0';.        if(
16c60 20 7a 5b 69 2b 31 5d 3e 3d 27 30 27 20 26 26 20   z[i+1]>='0' && 
16c70 7a 5b 69 2b 31 5d 3c 3d 27 37 27 20 29 7b 0a 20  z[i+1]<='7' ){. 
16c80 20 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20           i++;.  
16c90 20 20 20 20 20 20 20 20 63 20 3d 20 28 63 3c 3c          c = (c<<
16ca0 33 29 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b  3) + z[i] - '0';
16cb0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 7a  .          if( z
16cc0 5b 69 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b  [i+1]>='0' && z[
16cd0 69 2b 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20  i+1]<='7' ){.   
16ce0 20 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20           i++;.  
16cf0 20 20 20 20 20 20 20 20 20 20 63 20 3d 20 28 63            c = (c
16d00 3c 3c 33 29 20 2b 20 7a 5b 69 5d 20 2d 20 27 30  <<3) + z[i] - '0
16d10 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  ';.          }. 
16d20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
16d30 0a 20 20 20 20 7d 0a 20 20 20 20 7a 5b 6a 5d 20  .    }.    z[j] 
16d40 3d 20 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6a  = c;.  }.  if( j
16d50 3c 69 20 29 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 7d  <i ) z[j] = 0;.}
16d60 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
16d70 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 68 65  he value of a he
16d80 78 61 64 65 63 69 6d 61 6c 20 64 69 67 69 74 2e  xadecimal digit.
16d90 20 20 52 65 74 75 72 6e 20 2d 31 20 69 66 20 74    Return -1 if t
16da0 68 65 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20 6e  he input.** is n
16db0 6f 74 20 61 20 68 65 78 20 64 69 67 69 74 2e 0a  ot a hex digit..
16dc0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 68 65  */.static int he
16dd0 78 44 69 67 69 74 56 61 6c 75 65 28 63 68 61 72  xDigitValue(char
16de0 20 63 29 7b 0a 20 20 69 66 28 20 63 3e 3d 27 30   c){.  if( c>='0
16df0 27 20 26 26 20 63 3c 3d 27 39 27 20 29 20 72 65  ' && c<='9' ) re
16e00 74 75 72 6e 20 63 20 2d 20 27 30 27 3b 0a 20 20  turn c - '0';.  
16e10 69 66 28 20 63 3e 3d 27 61 27 20 26 26 20 63 3c  if( c>='a' && c<
16e20 3d 27 66 27 20 29 20 72 65 74 75 72 6e 20 63 20  ='f' ) return c 
16e30 2d 20 27 61 27 20 2b 20 31 30 3b 0a 20 20 69 66  - 'a' + 10;.  if
16e40 28 20 63 3e 3d 27 41 27 20 26 26 20 63 3c 3d 27  ( c>='A' && c<='
16e50 46 27 20 29 20 72 65 74 75 72 6e 20 63 20 2d 20  F' ) return c - 
16e60 27 41 27 20 2b 20 31 30 3b 0a 20 20 72 65 74 75  'A' + 10;.  retu
16e70 72 6e 20 2d 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn -1;.}../*.** 
16e80 49 6e 74 65 72 70 72 65 74 20 7a 41 72 67 20 61  Interpret zArg a
16e90 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  s an integer val
16ea0 75 65 2c 20 70 6f 73 73 69 62 6c 79 20 77 69 74  ue, possibly wit
16eb0 68 20 73 75 66 66 69 78 65 73 2e 0a 2a 2f 0a 73  h suffixes..*/.s
16ec0 74 61 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e  tatic sqlite3_in
16ed0 74 36 34 20 69 6e 74 65 67 65 72 56 61 6c 75 65  t64 integerValue
16ee0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72  (const char *zAr
16ef0 67 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e  g){.  sqlite3_in
16f00 74 36 34 20 76 20 3d 20 30 3b 0a 20 20 73 74 61  t64 v = 0;.  sta
16f10 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
16f20 20 7b 20 63 68 61 72 20 2a 7a 53 75 66 66 69 78   { char *zSuffix
16f30 3b 20 69 6e 74 20 69 4d 75 6c 74 3b 20 7d 20 61  ; int iMult; } a
16f40 4d 75 6c 74 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b  Mult[] = {.    {
16f50 20 22 4b 69 42 22 2c 20 31 30 32 34 20 7d 2c 0a   "KiB", 1024 },.
16f60 20 20 20 20 7b 20 22 4d 69 42 22 2c 20 31 30 32      { "MiB", 102
16f70 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20  4*1024 },.    { 
16f80 22 47 69 42 22 2c 20 31 30 32 34 2a 31 30 32 34  "GiB", 1024*1024
16f90 2a 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22  *1024 },.    { "
16fa0 4b 42 22 2c 20 20 31 30 30 30 20 7d 2c 0a 20 20  KB",  1000 },.  
16fb0 20 20 7b 20 22 4d 42 22 2c 20 20 31 30 30 30 30    { "MB",  10000
16fc0 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 47 42 22  00 },.    { "GB"
16fd0 2c 20 20 31 30 30 30 30 30 30 30 30 30 20 7d 2c  ,  1000000000 },
16fe0 0a 20 20 20 20 7b 20 22 4b 22 2c 20 20 20 31 30  .    { "K",   10
16ff0 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 22 2c  00 },.    { "M",
17000 20 20 20 31 30 30 30 30 30 30 20 7d 2c 0a 20 20     1000000 },.  
17010 20 20 7b 20 22 47 22 2c 20 20 20 31 30 30 30 30    { "G",   10000
17020 30 30 30 30 30 20 7d 2c 0a 20 20 7d 3b 0a 20 20  00000 },.  };.  
17030 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 69 73 4e  int i;.  int isN
17040 65 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 7a 41  eg = 0;.  if( zA
17050 72 67 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20  rg[0]=='-' ){.  
17060 20 20 69 73 4e 65 67 20 3d 20 31 3b 0a 20 20 20    isNeg = 1;.   
17070 20 7a 41 72 67 2b 2b 3b 0a 20 20 7d 65 6c 73 65   zArg++;.  }else
17080 20 69 66 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 2b   if( zArg[0]=='+
17090 27 20 29 7b 0a 20 20 20 20 7a 41 72 67 2b 2b 3b  ' ){.    zArg++;
170a0 0a 20 20 7d 0a 20 20 69 66 28 20 7a 41 72 67 5b  .  }.  if( zArg[
170b0 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41 72 67 5b  0]=='0' && zArg[
170c0 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 69  1]=='x' ){.    i
170d0 6e 74 20 78 3b 0a 20 20 20 20 7a 41 72 67 20 2b  nt x;.    zArg +
170e0 3d 20 32 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  = 2;.    while( 
170f0 28 78 20 3d 20 68 65 78 44 69 67 69 74 56 61 6c  (x = hexDigitVal
17100 75 65 28 7a 41 72 67 5b 30 5d 29 29 3e 3d 30 20  ue(zArg[0]))>=0 
17110 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 28 76 3c  ){.      v = (v<
17120 3c 34 29 20 2b 20 78 3b 0a 20 20 20 20 20 20 7a  <4) + x;.      z
17130 41 72 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  Arg++;.    }.  }
17140 65 6c 73 65 7b 0a 20 20 20 20 77 68 69 6c 65 28  else{.    while(
17150 20 49 73 44 69 67 69 74 28 7a 41 72 67 5b 30 5d   IsDigit(zArg[0]
17160 29 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 76  ) ){.      v = v
17170 2a 31 30 20 2b 20 7a 41 72 67 5b 30 5d 20 2d 20  *10 + zArg[0] - 
17180 27 30 27 3b 0a 20 20 20 20 20 20 7a 41 72 67 2b  '0';.      zArg+
17190 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66  +;.    }.  }.  f
171a0 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53  or(i=0; i<ArrayS
171b0 69 7a 65 28 61 4d 75 6c 74 29 3b 20 69 2b 2b 29  ize(aMult); i++)
171c0 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
171d0 33 5f 73 74 72 69 63 6d 70 28 61 4d 75 6c 74 5b  3_stricmp(aMult[
171e0 69 5d 2e 7a 53 75 66 66 69 78 2c 20 7a 41 72 67  i].zSuffix, zArg
171f0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20  )==0 ){.      v 
17200 2a 3d 20 61 4d 75 6c 74 5b 69 5d 2e 69 4d 75 6c  *= aMult[i].iMul
17210 74 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  t;.      break;.
17220 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
17230 72 6e 20 69 73 4e 65 67 3f 20 2d 76 20 3a 20 76  rn isNeg? -v : v
17240 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  ;.}../*.** Inter
17250 70 72 65 74 20 7a 41 72 67 20 61 73 20 65 69 74  pret zArg as eit
17260 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  her an integer o
17270 72 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  r a boolean valu
17280 65 2e 20 20 52 65 74 75 72 6e 20 31 20 6f 72 20  e.  Return 1 or 
17290 30 0a 2a 2a 20 66 6f 72 20 54 52 55 45 20 61 6e  0.** for TRUE an
172a0 64 20 46 41 4c 53 45 2e 20 20 52 65 74 75 72 6e  d FALSE.  Return
172b0 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
172c0 75 65 20 69 66 20 61 70 70 72 6f 70 72 69 61 74  ue if appropriat
172d0 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
172e0 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 63 6f   booleanValue(co
172f0 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 29 7b  nst char *zArg){
17300 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20  .  int i;.  if( 
17310 7a 41 72 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20  zArg[0]=='0' && 
17320 7a 41 72 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a  zArg[1]=='x' ){.
17330 20 20 20 20 66 6f 72 28 69 3d 32 3b 20 68 65 78      for(i=2; hex
17340 44 69 67 69 74 56 61 6c 75 65 28 7a 41 72 67 5b  DigitValue(zArg[
17350 69 5d 29 3e 3d 30 3b 20 69 2b 2b 29 7b 7d 0a 20  i])>=0; i++){}. 
17360 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6f 72 28   }else{.    for(
17370 69 3d 30 3b 20 7a 41 72 67 5b 69 5d 3e 3d 27 30  i=0; zArg[i]>='0
17380 27 20 26 26 20 7a 41 72 67 5b 69 5d 3c 3d 27 39  ' && zArg[i]<='9
17390 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 7d 0a 20 20  '; i++){}.  }.  
173a0 69 66 28 20 69 3e 30 20 26 26 20 7a 41 72 67 5b  if( i>0 && zArg[
173b0 69 5d 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 28  i]==0 ) return (
173c0 69 6e 74 29 28 69 6e 74 65 67 65 72 56 61 6c 75  int)(integerValu
173d0 65 28 7a 41 72 67 29 20 26 20 30 78 66 66 66 66  e(zArg) & 0xffff
173e0 66 66 66 66 29 3b 0a 20 20 69 66 28 20 73 71 6c  ffff);.  if( sql
173f0 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72  ite3_stricmp(zAr
17400 67 2c 20 22 6f 6e 22 29 3d 3d 30 20 7c 7c 20 73  g, "on")==0 || s
17410 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a  qlite3_stricmp(z
17420 41 72 67 2c 22 79 65 73 22 29 3d 3d 30 20 29 7b  Arg,"yes")==0 ){
17430 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
17440 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
17450 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 20 22  _stricmp(zArg, "
17460 6f 66 66 22 29 3d 3d 30 20 7c 7c 20 73 71 6c 69  off")==0 || sqli
17470 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67  te3_stricmp(zArg
17480 2c 22 6e 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ,"no")==0 ){.   
17490 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
174a0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
174b0 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 74  err, "ERROR: Not
174c0 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
174d0 3a 20 5c 22 25 73 5c 22 2e 20 41 73 73 75 6d 69  : \"%s\". Assumi
174e0 6e 67 20 5c 22 6e 6f 5c 22 2e 5c 6e 22 2c 0a 20  ng \"no\".\n",. 
174f0 20 20 20 20 20 20 20 20 20 7a 41 72 67 29 3b 0a           zArg);.
17500 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
17510 2a 0a 2a 2a 20 53 65 74 20 6f 72 20 63 6c 65 61  *.** Set or clea
17520 72 20 61 20 73 68 65 6c 6c 20 66 6c 61 67 20 61  r a shell flag a
17530 63 63 6f 72 64 69 6e 67 20 74 6f 20 61 20 62 6f  ccording to a bo
17540 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a  olean value..*/.
17550 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 4f  static void setO
17560 72 43 6c 65 61 72 46 6c 61 67 28 53 68 65 6c 6c  rClearFlag(Shell
17570 53 74 61 74 65 20 2a 70 2c 20 75 6e 73 69 67 6e  State *p, unsign
17580 65 64 20 6d 46 6c 61 67 2c 20 63 6f 6e 73 74 20  ed mFlag, const 
17590 63 68 61 72 20 2a 7a 41 72 67 29 7b 0a 20 20 69  char *zArg){.  i
175a0 66 28 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  f( booleanValue(
175b0 7a 41 72 67 29 20 29 7b 0a 20 20 20 20 53 68 65  zArg) ){.    She
175c0 6c 6c 53 65 74 46 6c 61 67 28 70 2c 20 6d 46 6c  llSetFlag(p, mFl
175d0 61 67 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ag);.  }else{.  
175e0 20 20 53 68 65 6c 6c 43 6c 65 61 72 46 6c 61 67    ShellClearFlag
175f0 28 70 2c 20 6d 46 6c 61 67 29 3b 0a 20 20 7d 0a  (p, mFlag);.  }.
17600 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61  }../*.** Close a
17610 6e 20 6f 75 74 70 75 74 20 66 69 6c 65 2c 20 61  n output file, a
17620 73 73 75 6d 69 6e 67 20 69 74 20 69 73 20 6e 6f  ssuming it is no
17630 74 20 73 74 64 65 72 72 20 6f 72 20 73 74 64 6f  t stderr or stdo
17640 75 74 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  ut.*/.static voi
17650 64 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c  d output_file_cl
17660 6f 73 65 28 46 49 4c 45 20 2a 66 29 7b 0a 20 20  ose(FILE *f){.  
17670 69 66 28 20 66 20 26 26 20 66 21 3d 73 74 64 6f  if( f && f!=stdo
17680 75 74 20 26 26 20 66 21 3d 73 74 64 65 72 72 20  ut && f!=stderr 
17690 29 20 66 63 6c 6f 73 65 28 66 29 3b 0a 7d 0a 0a  ) fclose(f);.}..
176a0 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 6f 70 65  /*.** Try to ope
176b0 6e 20 61 6e 20 6f 75 74 70 75 74 20 66 69 6c 65  n an output file
176c0 2e 20 20 20 54 68 65 20 6e 61 6d 65 73 20 22 73  .   The names "s
176d0 74 64 6f 75 74 22 20 61 6e 64 20 22 73 74 64 65  tdout" and "stde
176e0 72 72 22 20 61 72 65 0a 2a 2a 20 72 65 63 6f 67  rr" are.** recog
176f0 6e 69 7a 65 64 20 61 6e 64 20 64 6f 20 74 68 65  nized and do the
17700 20 72 69 67 68 74 20 74 68 69 6e 67 2e 20 20 4e   right thing.  N
17710 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20  ULL is returned 
17720 69 66 20 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a  if the output.**
17730 20 66 69 6c 65 6e 61 6d 65 20 69 73 20 22 6f 66   filename is "of
17740 66 22 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 46 49  f"..*/.static FI
17750 4c 45 20 2a 6f 75 74 70 75 74 5f 66 69 6c 65 5f  LE *output_file_
17760 6f 70 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  open(const char 
17770 2a 7a 46 69 6c 65 29 7b 0a 20 20 46 49 4c 45 20  *zFile){.  FILE 
17780 2a 66 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70  *f;.  if( strcmp
17790 28 7a 46 69 6c 65 2c 22 73 74 64 6f 75 74 22 29  (zFile,"stdout")
177a0 3d 3d 30 20 29 7b 0a 20 20 20 20 66 20 3d 20 73  ==0 ){.    f = s
177b0 74 64 6f 75 74 3b 0a 20 20 7d 65 6c 73 65 20 69  tdout;.  }else i
177c0 66 28 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c  f( strcmp(zFile,
177d0 20 22 73 74 64 65 72 72 22 29 3d 3d 30 20 29 7b   "stderr")==0 ){
177e0 0a 20 20 20 20 66 20 3d 20 73 74 64 65 72 72 3b  .    f = stderr;
177f0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
17800 63 6d 70 28 7a 46 69 6c 65 2c 20 22 6f 66 66 22  cmp(zFile, "off"
17810 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66 20 3d 20  )==0 ){.    f = 
17820 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
17830 66 20 3d 20 66 6f 70 65 6e 28 7a 46 69 6c 65 2c  f = fopen(zFile,
17840 20 22 77 62 22 29 3b 0a 20 20 20 20 69 66 28 20   "wb");.    if( 
17850 66 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74  f==0 ){.      ut
17860 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
17870 2c 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74  , "Error: cannot
17880 20 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c   open \"%s\"\n",
17890 20 7a 46 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 20   zFile);.    }. 
178a0 20 7d 0a 20 20 72 65 74 75 72 6e 20 66 3b 0a 7d   }.  return f;.}
178b0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
178c0 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
178d0 29 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ).#if !defined(S
178e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
178f0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
17900 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
17910 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 0a 2a 2a 20  NG_POINT)./*.** 
17920 41 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 68 61  A routine for ha
17930 6e 64 6c 69 6e 67 20 6f 75 74 70 75 74 20 66 72  ndling output fr
17940 6f 6d 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  om sqlite3_trace
17950 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ()..*/.static in
17960 74 20 73 71 6c 5f 74 72 61 63 65 5f 63 61 6c 6c  t sql_trace_call
17970 62 61 63 6b 28 0a 20 20 75 6e 73 69 67 6e 65 64  back(.  unsigned
17980 20 6d 54 79 70 65 2c 0a 20 20 76 6f 69 64 20 2a   mType,.  void *
17990 70 41 72 67 2c 0a 20 20 76 6f 69 64 20 2a 70 50  pArg,.  void *pP
179a0 2c 0a 20 20 76 6f 69 64 20 2a 70 58 0a 29 7b 0a  ,.  void *pX.){.
179b0 20 20 46 49 4c 45 20 2a 66 20 3d 20 28 46 49 4c    FILE *f = (FIL
179c0 45 2a 29 70 41 72 67 3b 0a 20 20 55 4e 55 53 45  E*)pArg;.  UNUSE
179d0 44 5f 50 41 52 41 4d 45 54 45 52 28 6d 54 79 70  D_PARAMETER(mTyp
179e0 65 29 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52  e);.  UNUSED_PAR
179f0 41 4d 45 54 45 52 28 70 50 29 3b 0a 20 20 69 66  AMETER(pP);.  if
17a00 28 20 66 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ( f ){.    const
17a10 20 63 68 61 72 20 2a 7a 20 3d 20 28 63 6f 6e 73   char *z = (cons
17a20 74 20 63 68 61 72 2a 29 70 58 3b 0a 20 20 20 20  t char*)pX;.    
17a30 69 6e 74 20 69 20 3d 20 28 69 6e 74 29 73 74 72  int i = (int)str
17a40 6c 65 6e 28 7a 29 3b 0a 20 20 20 20 77 68 69 6c  len(z);.    whil
17a50 65 28 20 69 3e 30 20 26 26 20 7a 5b 69 2d 31 5d  e( i>0 && z[i-1]
17a60 3d 3d 27 3b 27 20 29 7b 20 69 2d 2d 3b 20 7d 0a  ==';' ){ i--; }.
17a70 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
17a80 66 2c 20 22 25 2e 2a 73 3b 5c 6e 22 2c 20 69 2c  f, "%.*s;\n", i,
17a90 20 7a 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72   z);.  }.  retur
17aa0 6e 20 30 3b 0a 7d 0a 23 65 6e 64 69 66 0a 23 65  n 0;.}.#endif.#e
17ab0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6e 6f  ndif../*.** A no
17ac0 2d 6f 70 20 72 6f 75 74 69 6e 65 20 74 68 61 74  -op routine that
17ad0 20 72 75 6e 73 20 77 69 74 68 20 74 68 65 20 22   runs with the "
17ae0 2e 62 72 65 61 6b 70 6f 69 6e 74 22 20 64 6f 63  .breakpoint" doc
17af0 2d 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20  -command.  This 
17b00 69 73 0a 2a 2a 20 61 20 75 73 65 66 75 6c 20 73  is.** a useful s
17b10 70 6f 74 20 74 6f 20 73 65 74 20 61 20 64 65 62  pot to set a deb
17b20 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74  ugger breakpoint
17b30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
17b40 20 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74   test_breakpoint
17b50 28 76 6f 69 64 29 7b 0a 20 20 73 74 61 74 69 63  (void){.  static
17b60 20 69 6e 74 20 6e 43 61 6c 6c 20 3d 20 30 3b 0a   int nCall = 0;.
17b70 20 20 6e 43 61 6c 6c 2b 2b 3b 0a 7d 0a 0a 2f 2a    nCall++;.}../*
17b80 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 75 73  .** An object us
17b90 65 64 20 74 6f 20 72 65 61 64 20 61 20 43 53 56  ed to read a CSV
17ba0 20 61 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73   and other files
17bb0 20 66 6f 72 20 69 6d 70 6f 72 74 2e 0a 2a 2f 0a   for import..*/.
17bc0 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
17bd0 6d 70 6f 72 74 43 74 78 20 49 6d 70 6f 72 74 43  mportCtx ImportC
17be0 74 78 3b 0a 73 74 72 75 63 74 20 49 6d 70 6f 72  tx;.struct Impor
17bf0 74 43 74 78 20 7b 0a 20 20 63 6f 6e 73 74 20 63  tCtx {.  const c
17c00 68 61 72 20 2a 7a 46 69 6c 65 3b 20 20 2f 2a 20  har *zFile;  /* 
17c10 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 70 75  Name of the inpu
17c20 74 20 66 69 6c 65 20 2a 2f 0a 20 20 46 49 4c 45  t file */.  FILE
17c30 20 2a 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20   *in;           
17c40 2f 2a 20 52 65 61 64 20 74 68 65 20 43 53 56 20  /* Read the CSV 
17c50 74 65 78 74 20 66 72 6f 6d 20 74 68 69 73 20 69  text from this i
17c60 6e 70 75 74 20 73 74 72 65 61 6d 20 2a 2f 0a 20  nput stream */. 
17c70 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
17c80 20 20 20 20 20 2f 2a 20 41 63 63 75 6d 75 6c 61       /* Accumula
17c90 74 65 64 20 74 65 78 74 20 66 6f 72 20 61 20 66  ted text for a f
17ca0 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  ield */.  int n;
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17cc0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
17cd0 20 69 6e 20 7a 20 2a 2f 0a 20 20 69 6e 74 20 6e   in z */.  int n
17ce0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
17cf0 2a 20 53 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  * Space allocate
17d00 64 20 66 6f 72 20 7a 5b 5d 20 2a 2f 0a 20 20 69  d for z[] */.  i
17d10 6e 74 20 6e 4c 69 6e 65 3b 20 20 20 20 20 20 20  nt nLine;       
17d20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6c 69     /* Current li
17d30 6e 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 69  ne number */.  i
17d40 6e 74 20 62 4e 6f 74 46 69 72 73 74 3b 20 20 20  nt bNotFirst;   
17d50 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 6e     /* True if on
17d60 65 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 20  e or more bytes 
17d70 61 6c 72 65 61 64 79 20 72 65 61 64 20 2a 2f 0a  already read */.
17d80 20 20 69 6e 74 20 63 54 65 72 6d 3b 20 20 20 20    int cTerm;    
17d90 20 20 20 20 20 20 2f 2a 20 43 68 61 72 61 63 74        /* Charact
17da0 65 72 20 74 68 61 74 20 74 65 72 6d 69 6e 61 74  er that terminat
17db0 65 64 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  ed the most rece
17dc0 6e 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e  nt field */.  in
17dd0 74 20 63 43 6f 6c 53 65 70 3b 20 20 20 20 20 20  t cColSep;      
17de0 20 20 2f 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 20    /* The column 
17df0 73 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63  separator charac
17e00 74 65 72 2e 20 20 28 55 73 75 61 6c 6c 79 20 22  ter.  (Usually "
17e10 2c 22 29 20 2a 2f 0a 20 20 69 6e 74 20 63 52 6f  ,") */.  int cRo
17e20 77 53 65 70 3b 20 20 20 20 20 20 20 20 2f 2a 20  wSep;        /* 
17e30 54 68 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f  The row separato
17e40 72 20 63 68 61 72 61 63 74 65 72 2e 20 20 28 55  r character.  (U
17e50 73 75 61 6c 6c 79 20 22 5c 6e 22 29 20 2a 2f 0a  sually "\n") */.
17e60 7d 3b 0a 0a 2f 2a 20 41 70 70 65 6e 64 20 61 20  };../* Append a 
17e70 73 69 6e 67 6c 65 20 62 79 74 65 20 74 6f 20 7a  single byte to z
17e80 5b 5d 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  [] */.static voi
17e90 64 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f  d import_append_
17ea0 63 68 61 72 28 49 6d 70 6f 72 74 43 74 78 20 2a  char(ImportCtx *
17eb0 70 2c 20 69 6e 74 20 63 29 7b 0a 20 20 69 66 28  p, int c){.  if(
17ec0 20 70 2d 3e 6e 2b 31 3e 3d 70 2d 3e 6e 41 6c 6c   p->n+1>=p->nAll
17ed0 6f 63 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 41 6c  oc ){.    p->nAl
17ee0 6c 6f 63 20 2b 3d 20 70 2d 3e 6e 41 6c 6c 6f 63  loc += p->nAlloc
17ef0 20 2b 20 31 30 30 3b 0a 20 20 20 20 70 2d 3e 7a   + 100;.    p->z
17f00 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c   = sqlite3_reall
17f10 6f 63 36 34 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41  oc64(p->z, p->nA
17f20 6c 6c 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 70  lloc);.    if( p
17f30 2d 3e 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ->z==0 ){.      
17f40 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
17f50 72 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  r, "out of memor
17f60 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 65 78 69  y\n");.      exi
17f70 74 28 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  t(1);.    }.  }.
17f80 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 2b 2b 5d 20 3d    p->z[p->n++] =
17f90 20 28 63 68 61 72 29 63 3b 0a 7d 0a 0a 2f 2a 20   (char)c;.}../* 
17fa0 52 65 61 64 20 61 20 73 69 6e 67 6c 65 20 66 69  Read a single fi
17fb0 65 6c 64 20 6f 66 20 43 53 56 20 74 65 78 74 2e  eld of CSV text.
17fc0 20 20 43 6f 6d 70 61 74 69 62 6c 65 20 77 69 74    Compatible wit
17fd0 68 20 72 66 63 34 31 38 30 20 61 6e 64 20 65 78  h rfc4180 and ex
17fe0 74 65 6e 64 65 64 0a 2a 2a 20 77 69 74 68 20 74  tended.** with t
17ff0 68 65 20 6f 70 74 69 6f 6e 20 6f 66 20 68 61 76  he option of hav
18000 69 6e 67 20 61 20 73 65 70 61 72 61 74 6f 72 20  ing a separator 
18010 6f 74 68 65 72 20 74 68 61 6e 20 22 2c 22 2e 0a  other than ","..
18020 2a 2a 0a 2a 2a 20 20 20 2b 20 20 49 6e 70 75 74  **.**   +  Input
18030 20 63 6f 6d 65 73 20 66 72 6f 6d 20 70 2d 3e 69   comes from p->i
18040 6e 2e 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65  n..**   +  Store
18050 20 72 65 73 75 6c 74 73 20 69 6e 20 70 2d 3e 7a   results in p->z
18060 20 6f 66 20 6c 65 6e 67 74 68 20 70 2d 3e 6e 2e   of length p->n.
18070 20 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20    Space to hold 
18080 70 2d 3e 7a 20 63 6f 6d 65 73 0a 2a 2a 20 20 20  p->z comes.**   
18090 20 20 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f     from sqlite3_
180a0 6d 61 6c 6c 6f 63 36 34 28 29 2e 0a 2a 2a 20 20  malloc64()..**  
180b0 20 2b 20 20 55 73 65 20 70 2d 3e 63 53 65 70 20   +  Use p->cSep 
180c0 61 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 73 65  as the column se
180d0 70 61 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65  parator.  The de
180e0 66 61 75 6c 74 20 69 73 20 22 2c 22 2e 0a 2a 2a  fault is ","..**
180f0 20 20 20 2b 20 20 55 73 65 20 70 2d 3e 72 53 65     +  Use p->rSe
18100 70 20 61 73 20 74 68 65 20 72 6f 77 20 73 65 70  p as the row sep
18110 61 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66  arator.  The def
18120 61 75 6c 74 20 69 73 20 22 5c 6e 22 2e 0a 2a 2a  ault is "\n"..**
18130 20 20 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b     +  Keep track
18140 20 6f 66 20 74 68 65 20 6c 69 6e 65 20 6e 75 6d   of the line num
18150 62 65 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e  ber in p->nLine.
18160 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74  .**   +  Store t
18170 68 65 20 63 68 61 72 61 63 74 65 72 20 74 68 61  he character tha
18180 74 20 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65  t terminates the
18190 20 66 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65   field in p->cTe
181a0 72 6d 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20  rm.  Store.**   
181b0 20 20 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66     EOF on end-of
181c0 2d 66 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52  -file..**   +  R
181d0 65 70 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72  eport syntax err
181e0 6f 72 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f  ors on stderr.*/
181f0 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 53 51  .static char *SQ
18200 4c 49 54 45 5f 43 44 45 43 4c 20 63 73 76 5f 72  LITE_CDECL csv_r
18210 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d  ead_one_field(Im
18220 70 6f 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69  portCtx *p){.  i
18230 6e 74 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70  nt c;.  int cSep
18240 20 3d 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20   = p->cColSep;. 
18250 20 69 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63   int rSep = p->c
18260 52 6f 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d  RowSep;.  p->n =
18270 20 30 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28   0;.  c = fgetc(
18280 70 2d 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d  p->in);.  if( c=
18290 3d 45 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65  =EOF || seenInte
182a0 72 72 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e  rrupt ){.    p->
182b0 63 54 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20  cTerm = EOF;.   
182c0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
182d0 20 69 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a 20   if( c=='"' ){. 
182e0 20 20 20 69 6e 74 20 70 63 2c 20 70 70 63 3b 0a     int pc, ppc;.
182f0 20 20 20 20 69 6e 74 20 73 74 61 72 74 4c 69 6e      int startLin
18300 65 20 3d 20 70 2d 3e 6e 4c 69 6e 65 3b 0a 20 20  e = p->nLine;.  
18310 20 20 69 6e 74 20 63 51 75 6f 74 65 20 3d 20 63    int cQuote = c
18320 3b 0a 20 20 20 20 70 63 20 3d 20 70 70 63 20 3d  ;.    pc = ppc =
18330 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 31   0;.    while( 1
18340 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 66 67   ){.      c = fg
18350 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20  etc(p->in);.    
18360 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20 29 20    if( c==rSep ) 
18370 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20  p->nLine++;.    
18380 20 20 69 66 28 20 63 3d 3d 63 51 75 6f 74 65 20    if( c==cQuote 
18390 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ){.        if( p
183a0 63 3d 3d 63 51 75 6f 74 65 20 29 7b 0a 20 20 20  c==cQuote ){.   
183b0 20 20 20 20 20 20 20 70 63 20 3d 20 30 3b 0a 20         pc = 0;. 
183c0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
183d0 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
183e0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
183f0 63 3d 3d 63 53 65 70 20 26 26 20 70 63 3d 3d 63  c==cSep && pc==c
18400 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c  Quote).       ||
18410 20 28 63 3d 3d 72 53 65 70 20 26 26 20 70 63 3d   (c==rSep && pc=
18420 3d 63 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20  =cQuote).       
18430 7c 7c 20 28 63 3d 3d 72 53 65 70 20 26 26 20 70  || (c==rSep && p
18440 63 3d 3d 27 5c 72 27 20 26 26 20 70 70 63 3d 3d  c=='\r' && ppc==
18450 63 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c  cQuote).       |
18460 7c 20 28 63 3d 3d 45 4f 46 20 26 26 20 70 63 3d  | (c==EOF && pc=
18470 3d 63 51 75 6f 74 65 29 0a 20 20 20 20 20 20 29  =cQuote).      )
18480 7b 0a 20 20 20 20 20 20 20 20 64 6f 7b 20 70 2d  {.        do{ p-
18490 3e 6e 2d 2d 3b 20 7d 77 68 69 6c 65 28 20 70 2d  >n--; }while( p-
184a0 3e 7a 5b 70 2d 3e 6e 5d 21 3d 63 51 75 6f 74 65  >z[p->n]!=cQuote
184b0 20 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 63   );.        p->c
184c0 54 65 72 6d 20 3d 20 63 3b 0a 20 20 20 20 20 20  Term = c;.      
184d0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
184e0 0a 20 20 20 20 20 20 69 66 28 20 70 63 3d 3d 63  .      if( pc==c
184f0 51 75 6f 74 65 20 26 26 20 63 21 3d 27 5c 72 27  Quote && c!='\r'
18500 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38   ){.        utf8
18510 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
18520 22 25 73 3a 25 64 3a 20 75 6e 65 73 63 61 70 65  "%s:%d: unescape
18530 64 20 25 63 20 63 68 61 72 61 63 74 65 72 5c 6e  d %c character\n
18540 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
18550 20 20 20 70 2d 3e 7a 46 69 6c 65 2c 20 70 2d 3e     p->zFile, p->
18560 6e 4c 69 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a  nLine, cQuote);.
18570 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
18580 28 20 63 3d 3d 45 4f 46 20 29 7b 0a 20 20 20 20  ( c==EOF ){.    
18590 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
185a0 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20  stderr, "%s:%d: 
185b0 75 6e 74 65 72 6d 69 6e 61 74 65 64 20 25 63 2d  unterminated %c-
185c0 71 75 6f 74 65 64 20 66 69 65 6c 64 5c 6e 22 2c  quoted field\n",
185d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
185e0 20 70 2d 3e 7a 46 69 6c 65 2c 20 73 74 61 72 74   p->zFile, start
185f0 4c 69 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20  Line, cQuote);. 
18600 20 20 20 20 20 20 20 70 2d 3e 63 54 65 72 6d 20         p->cTerm 
18610 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = c;.        bre
18620 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
18630 20 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f    import_append_
18640 63 68 61 72 28 70 2c 20 63 29 3b 0a 20 20 20 20  char(p, c);.    
18650 20 20 70 70 63 20 3d 20 70 63 3b 0a 20 20 20 20    ppc = pc;.    
18660 20 20 70 63 20 3d 20 63 3b 0a 20 20 20 20 7d 0a    pc = c;.    }.
18670 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
18680 49 66 20 74 68 69 73 20 69 73 20 74 68 65 20 66  If this is the f
18690 69 72 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67  irst field being
186a0 20 70 61 72 73 65 64 20 61 6e 64 20 69 74 20 62   parsed and it b
186b0 65 67 69 6e 73 20 77 69 74 68 20 74 68 65 0a 20  egins with the. 
186c0 20 20 20 2a 2a 20 55 54 46 2d 38 20 42 4f 4d 20     ** UTF-8 BOM 
186d0 20 28 30 78 45 46 20 42 42 20 42 46 29 20 74 68   (0xEF BB BF) th
186e0 65 6e 20 73 6b 69 70 20 74 68 65 20 42 4f 4d 20  en skip the BOM 
186f0 2a 2f 0a 20 20 20 20 69 66 28 20 28 63 26 30 78  */.    if( (c&0x
18700 66 66 29 3d 3d 30 78 65 66 20 26 26 20 70 2d 3e  ff)==0xef && p->
18710 62 4e 6f 74 46 69 72 73 74 3d 3d 30 20 29 7b 0a  bNotFirst==0 ){.
18720 20 20 20 20 20 20 69 6d 70 6f 72 74 5f 61 70 70        import_app
18730 65 6e 64 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a  end_char(p, c);.
18740 20 20 20 20 20 20 63 20 3d 20 66 67 65 74 63 28        c = fgetc(
18750 70 2d 3e 69 6e 29 3b 0a 20 20 20 20 20 20 69 66  p->in);.      if
18760 28 20 28 63 26 30 78 66 66 29 3d 3d 30 78 62 62  ( (c&0xff)==0xbb
18770 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6d 70 6f   ){.        impo
18780 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70  rt_append_char(p
18790 2c 20 63 29 3b 0a 20 20 20 20 20 20 20 20 63 20  , c);.        c 
187a0 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a  = fgetc(p->in);.
187b0 20 20 20 20 20 20 20 20 69 66 28 20 28 63 26 30          if( (c&0
187c0 78 66 66 29 3d 3d 30 78 62 66 20 29 7b 0a 20 20  xff)==0xbf ){.  
187d0 20 20 20 20 20 20 20 20 70 2d 3e 62 4e 6f 74 46          p->bNotF
187e0 69 72 73 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  irst = 1;.      
187f0 20 20 20 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20      p->n = 0;.  
18800 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
18810 73 76 5f 72 65 61 64 5f 6f 6e 65 5f 66 69 65 6c  sv_read_one_fiel
18820 64 28 70 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  d(p);.        }.
18830 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
18840 20 20 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20    while( c!=EOF 
18850 26 26 20 63 21 3d 63 53 65 70 20 26 26 20 63 21  && c!=cSep && c!
18860 3d 72 53 65 70 20 29 7b 0a 20 20 20 20 20 20 69  =rSep ){.      i
18870 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61  mport_append_cha
18880 72 28 70 2c 20 63 29 3b 0a 20 20 20 20 20 20 63  r(p, c);.      c
18890 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b   = fgetc(p->in);
188a0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 63  .    }.    if( c
188b0 3d 3d 72 53 65 70 20 29 7b 0a 20 20 20 20 20 20  ==rSep ){.      
188c0 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20  p->nLine++;.    
188d0 20 20 69 66 28 20 70 2d 3e 6e 3e 30 20 26 26 20    if( p->n>0 && 
188e0 70 2d 3e 7a 5b 70 2d 3e 6e 2d 31 5d 3d 3d 27 5c  p->z[p->n-1]=='\
188f0 72 27 20 29 20 70 2d 3e 6e 2d 2d 3b 0a 20 20 20  r' ) p->n--;.   
18900 20 7d 0a 20 20 20 20 70 2d 3e 63 54 65 72 6d 20   }.    p->cTerm 
18910 3d 20 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  = c;.  }.  if( p
18920 2d 3e 7a 20 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d  ->z ) p->z[p->n]
18930 20 3d 20 30 3b 0a 20 20 70 2d 3e 62 4e 6f 74 46   = 0;.  p->bNotF
18940 69 72 73 74 20 3d 20 31 3b 0a 20 20 72 65 74 75  irst = 1;.  retu
18950 72 6e 20 70 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 20 52  rn p->z;.}../* R
18960 65 61 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65  ead a single fie
18970 6c 64 20 6f 66 20 41 53 43 49 49 20 64 65 6c 69  ld of ASCII deli
18980 6d 69 74 65 64 20 74 65 78 74 2e 0a 2a 2a 0a 2a  mited text..**.*
18990 2a 20 20 20 2b 20 20 49 6e 70 75 74 20 63 6f 6d  *   +  Input com
189a0 65 73 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a  es from p->in..*
189b0 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 72 65 73  *   +  Store res
189c0 75 6c 74 73 20 69 6e 20 70 2d 3e 7a 20 6f 66 20  ults in p->z of 
189d0 6c 65 6e 67 74 68 20 70 2d 3e 6e 2e 20 20 53 70  length p->n.  Sp
189e0 61 63 65 20 74 6f 20 68 6f 6c 64 20 70 2d 3e 7a  ace to hold p->z
189f0 20 63 6f 6d 65 73 0a 2a 2a 20 20 20 20 20 20 66   comes.**      f
18a00 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
18a10 6f 63 36 34 28 29 2e 0a 2a 2a 20 20 20 2b 20 20  oc64()..**   +  
18a20 55 73 65 20 70 2d 3e 63 53 65 70 20 61 73 20 74  Use p->cSep as t
18a30 68 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61  he column separa
18a40 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c  tor.  The defaul
18a50 74 20 69 73 20 22 5c 78 31 46 22 2e 0a 2a 2a 20  t is "\x1F"..** 
18a60 20 20 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70    +  Use p->rSep
18a70 20 61 73 20 74 68 65 20 72 6f 77 20 73 65 70 61   as the row sepa
18a80 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61  rator.  The defa
18a90 75 6c 74 20 69 73 20 22 5c 78 31 45 22 2e 0a 2a  ult is "\x1E"..*
18aa0 2a 20 20 20 2b 20 20 4b 65 65 70 20 74 72 61 63  *   +  Keep trac
18ab0 6b 20 6f 66 20 74 68 65 20 72 6f 77 20 6e 75 6d  k of the row num
18ac0 62 65 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e  ber in p->nLine.
18ad0 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74  .**   +  Store t
18ae0 68 65 20 63 68 61 72 61 63 74 65 72 20 74 68 61  he character tha
18af0 74 20 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65  t terminates the
18b00 20 66 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65   field in p->cTe
18b10 72 6d 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20  rm.  Store.**   
18b20 20 20 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66     EOF on end-of
18b30 2d 66 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52  -file..**   +  R
18b40 65 70 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72  eport syntax err
18b50 6f 72 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f  ors on stderr.*/
18b60 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 53 51  .static char *SQ
18b70 4c 49 54 45 5f 43 44 45 43 4c 20 61 73 63 69 69  LITE_CDECL ascii
18b80 5f 72 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28  _read_one_field(
18b90 49 6d 70 6f 72 74 43 74 78 20 2a 70 29 7b 0a 20  ImportCtx *p){. 
18ba0 20 69 6e 74 20 63 3b 0a 20 20 69 6e 74 20 63 53   int c;.  int cS
18bb0 65 70 20 3d 20 70 2d 3e 63 43 6f 6c 53 65 70 3b  ep = p->cColSep;
18bc0 0a 20 20 69 6e 74 20 72 53 65 70 20 3d 20 70 2d  .  int rSep = p-
18bd0 3e 63 52 6f 77 53 65 70 3b 0a 20 20 70 2d 3e 6e  >cRowSep;.  p->n
18be0 20 3d 20 30 3b 0a 20 20 63 20 3d 20 66 67 65 74   = 0;.  c = fget
18bf0 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 69 66 28 20  c(p->in);.  if( 
18c00 63 3d 3d 45 4f 46 20 7c 7c 20 73 65 65 6e 49 6e  c==EOF || seenIn
18c10 74 65 72 72 75 70 74 20 29 7b 0a 20 20 20 20 70  terrupt ){.    p
18c20 2d 3e 63 54 65 72 6d 20 3d 20 45 4f 46 3b 0a 20  ->cTerm = EOF;. 
18c30 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
18c40 0a 20 20 77 68 69 6c 65 28 20 63 21 3d 45 4f 46  .  while( c!=EOF
18c50 20 26 26 20 63 21 3d 63 53 65 70 20 26 26 20 63   && c!=cSep && c
18c60 21 3d 72 53 65 70 20 29 7b 0a 20 20 20 20 69 6d  !=rSep ){.    im
18c70 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72  port_append_char
18c80 28 70 2c 20 63 29 3b 0a 20 20 20 20 63 20 3d 20  (p, c);.    c = 
18c90 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20  fgetc(p->in);.  
18ca0 7d 0a 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20  }.  if( c==rSep 
18cb0 29 7b 0a 20 20 20 20 70 2d 3e 6e 4c 69 6e 65 2b  ){.    p->nLine+
18cc0 2b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 63 54 65 72  +;.  }.  p->cTer
18cd0 6d 20 3d 20 63 3b 0a 20 20 69 66 28 20 70 2d 3e  m = c;.  if( p->
18ce0 7a 20 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d  z ) p->z[p->n] =
18cf0 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e   0;.  return p->
18d00 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20  z;.}../*.** Try 
18d10 74 6f 20 74 72 61 6e 73 66 65 72 20 64 61 74 61  to transfer data
18d20 20 66 6f 72 20 74 61 62 6c 65 20 7a 54 61 62 6c   for table zTabl
18d30 65 2e 20 20 49 66 20 61 6e 20 65 72 72 6f 72 20  e.  If an error 
18d40 69 73 20 73 65 65 6e 20 77 68 69 6c 65 0a 2a 2a  is seen while.**
18d50 20 6d 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 2c   moving forward,
18d60 20 74 72 79 20 74 6f 20 67 6f 20 62 61 63 6b 77   try to go backw
18d70 61 72 64 73 2e 20 20 54 68 65 20 62 61 63 6b 77  ards.  The backw
18d80 61 72 64 73 20 6d 6f 76 65 6d 65 6e 74 20 77 6f  ards movement wo
18d90 6e 27 74 0a 2a 2a 20 77 6f 72 6b 20 66 6f 72 20  n't.** work for 
18da0 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
18db0 62 6c 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  bles..*/.static 
18dc0 76 6f 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65 44  void tryToCloneD
18dd0 61 74 61 28 0a 20 20 53 68 65 6c 6c 53 74 61 74  ata(.  ShellStat
18de0 65 20 2a 70 2c 0a 20 20 73 71 6c 69 74 65 33 20  e *p,.  sqlite3 
18df0 2a 6e 65 77 44 62 2c 0a 20 20 63 6f 6e 73 74 20  *newDb,.  const 
18e00 63 68 61 72 20 2a 7a 54 61 62 6c 65 0a 29 7b 0a  char *zTable.){.
18e10 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
18e20 70 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 73 71  pQuery = 0;.  sq
18e30 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 49 6e 73  lite3_stmt *pIns
18e40 65 72 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  ert = 0;.  char 
18e50 2a 7a 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63  *zQuery = 0;.  c
18e60 68 61 72 20 2a 7a 49 6e 73 65 72 74 20 3d 20 30  har *zInsert = 0
18e70 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e  ;.  int rc;.  in
18e80 74 20 69 2c 20 6a 2c 20 6e 3b 0a 20 20 69 6e 74  t i, j, n;.  int
18e90 20 6e 54 61 62 6c 65 20 3d 20 28 69 6e 74 29 73   nTable = (int)s
18ea0 74 72 6c 65 6e 28 7a 54 61 62 6c 65 29 3b 0a 20  trlen(zTable);. 
18eb0 20 69 6e 74 20 6b 20 3d 20 30 3b 0a 20 20 69 6e   int k = 0;.  in
18ec0 74 20 63 6e 74 20 3d 20 30 3b 0a 20 20 63 6f 6e  t cnt = 0;.  con
18ed0 73 74 20 69 6e 74 20 73 70 69 6e 52 61 74 65 20  st int spinRate 
18ee0 3d 20 31 30 30 30 30 3b 0a 0a 20 20 7a 51 75 65  = 10000;..  zQue
18ef0 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ry = sqlite3_mpr
18f00 69 6e 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46  intf("SELECT * F
18f10 52 4f 4d 20 5c 22 25 77 5c 22 22 2c 20 7a 54 61  ROM \"%w\"", zTa
18f20 62 6c 65 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ble);.  rc = sql
18f30 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
18f40 70 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d  p->db, zQuery, -
18f50 31 2c 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a  1, &pQuery, 0);.
18f60 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
18f70 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
18f80 72 72 2c 20 22 45 72 72 6f 72 20 25 64 3a 20 25  rr, "Error %d: %
18f90 73 20 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20  s on [%s]\n",.  
18fa0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
18fb0 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f  3_extended_errco
18fc0 64 65 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74  de(p->db), sqlit
18fd0 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29  e3_errmsg(p->db)
18fe0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 51  ,.            zQ
18ff0 75 65 72 79 29 3b 0a 20 20 20 20 67 6f 74 6f 20  uery);.    goto 
19000 65 6e 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20  end_data_xfer;. 
19010 20 7d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33   }.  n = sqlite3
19020 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 51  _column_count(pQ
19030 75 65 72 79 29 3b 0a 20 20 7a 49 6e 73 65 72 74  uery);.  zInsert
19040 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f   = sqlite3_mallo
19050 63 36 34 28 32 30 30 20 2b 20 6e 54 61 62 6c 65  c64(200 + nTable
19060 20 2b 20 6e 2a 33 29 3b 0a 20 20 69 66 28 20 7a   + n*3);.  if( z
19070 49 6e 73 65 72 74 3d 3d 30 20 29 7b 0a 20 20 20  Insert==0 ){.   
19080 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
19090 72 72 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  rr, "out of memo
190a0 72 79 5c 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f  ry\n");.    goto
190b0 20 65 6e 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a   end_data_xfer;.
190c0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e    }.  sqlite3_sn
190d0 70 72 69 6e 74 66 28 32 30 30 2b 6e 54 61 62 6c  printf(200+nTabl
190e0 65 2c 7a 49 6e 73 65 72 74 2c 0a 20 20 20 20 20  e,zInsert,.     
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
19100 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20  NSERT OR IGNORE 
19110 49 4e 54 4f 20 5c 22 25 73 5c 22 20 56 41 4c 55  INTO \"%s\" VALU
19120 45 53 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a  ES(?", zTable);.
19130 20 20 69 20 3d 20 28 69 6e 74 29 73 74 72 6c 65    i = (int)strle
19140 6e 28 7a 49 6e 73 65 72 74 29 3b 0a 20 20 66 6f  n(zInsert);.  fo
19150 72 28 6a 3d 31 3b 20 6a 3c 6e 3b 20 6a 2b 2b 29  r(j=1; j<n; j++)
19160 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a 49 6e  {.    memcpy(zIn
19170 73 65 72 74 2b 69 2c 20 22 2c 3f 22 2c 20 32 29  sert+i, ",?", 2)
19180 3b 0a 20 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20  ;.    i += 2;.  
19190 7d 0a 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65  }.  memcpy(zInse
191a0 72 74 2b 69 2c 20 22 29 3b 22 2c 20 33 29 3b 0a  rt+i, ");", 3);.
191b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
191c0 72 65 70 61 72 65 5f 76 32 28 6e 65 77 44 62 2c  repare_v2(newDb,
191d0 20 7a 49 6e 73 65 72 74 2c 20 2d 31 2c 20 26 70   zInsert, -1, &p
191e0 49 6e 73 65 72 74 2c 20 30 29 3b 0a 20 20 69 66  Insert, 0);.  if
191f0 28 20 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38  ( rc ){.    utf8
19200 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
19210 22 45 72 72 6f 72 20 25 64 3a 20 25 73 20 6f 6e  "Error %d: %s on
19220 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20   [%s]\n",.      
19230 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78        sqlite3_ex
19240 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 6e  tended_errcode(n
19250 65 77 44 62 29 2c 20 73 71 6c 69 74 65 33 5f 65  ewDb), sqlite3_e
19260 72 72 6d 73 67 28 6e 65 77 44 62 29 2c 0a 20 20  rrmsg(newDb),.  
19270 20 20 20 20 20 20 20 20 20 20 7a 51 75 65 72 79            zQuery
19280 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f  );.    goto end_
19290 64 61 74 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20  data_xfer;.  }. 
192a0 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 32 3b 20 6b   for(k=0; k<2; k
192b0 2b 2b 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20  ++){.    while( 
192c0 28 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74  (rc = sqlite3_st
192d0 65 70 28 70 51 75 65 72 79 29 29 3d 3d 53 51 4c  ep(pQuery))==SQL
192e0 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20  ITE_ROW ){.     
192f0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
19300 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 77 69  ++){.        swi
19310 74 63 68 28 20 73 71 6c 69 74 65 33 5f 63 6f 6c  tch( sqlite3_col
19320 75 6d 6e 5f 74 79 70 65 28 70 51 75 65 72 79 2c  umn_type(pQuery,
19330 20 69 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20   i) ){.         
19340 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 55 4c   case SQLITE_NUL
19350 4c 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  L: {.           
19360 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
19370 6c 6c 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 29  ll(pInsert, i+1)
19380 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
19390 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  eak;.          }
193a0 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20  .          case 
193b0 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3a 20  SQLITE_INTEGER: 
193c0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
193d0 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
193e0 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 2c 20 73  (pInsert, i+1, s
193f0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
19400 74 36 34 28 70 51 75 65 72 79 2c 69 29 29 3b 0a  t64(pQuery,i));.
19410 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
19420 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
19430 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
19440 4c 49 54 45 5f 46 4c 4f 41 54 3a 20 7b 0a 20 20  LITE_FLOAT: {.  
19450 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
19460 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70 49  3_bind_double(pI
19470 6e 73 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c 69  nsert, i+1, sqli
19480 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
19490 65 28 70 51 75 65 72 79 2c 69 29 29 3b 0a 20 20  e(pQuery,i));.  
194a0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
194b0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
194c0 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
194d0 54 45 5f 54 45 58 54 3a 20 7b 0a 20 20 20 20 20  TE_TEXT: {.     
194e0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62         sqlite3_b
194f0 69 6e 64 5f 74 65 78 74 28 70 49 6e 73 65 72 74  ind_text(pInsert
19500 2c 20 69 2b 31 2c 0a 20 20 20 20 20 20 20 20 20  , i+1,.         
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19520 20 20 20 20 28 63 6f 6e 73 74 20 63 68 61 72 2a      (const char*
19530 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
19540 74 65 78 74 28 70 51 75 65 72 79 2c 69 29 2c 0a  text(pQuery,i),.
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c               -1,
19570 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
19580 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
19590 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ak;.          }.
195a0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
195b0 51 4c 49 54 45 5f 42 4c 4f 42 3a 20 7b 0a 20 20  QLITE_BLOB: {.  
195c0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
195d0 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 70 49 6e 73  3_bind_blob(pIns
195e0 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65  ert, i+1, sqlite
195f0 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 51  3_column_blob(pQ
19600 75 65 72 79 2c 69 29 2c 0a 20 20 20 20 20 20 20  uery,i),.       
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19630 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c       sqlite3_col
19640 75 6d 6e 5f 62 79 74 65 73 28 70 51 75 65 72 79  umn_bytes(pQuery
19650 2c 69 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ,i),.           
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
19690 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
196a0 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ak;.          }.
196b0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
196c0 7d 20 2f 2a 20 45 6e 64 20 66 6f 72 20 2a 2f 0a  } /* End for */.
196d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
196e0 65 33 5f 73 74 65 70 28 70 49 6e 73 65 72 74 29  e3_step(pInsert)
196f0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
19700 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21  SQLITE_OK && rc!
19710 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 72  =SQLITE_ROW && r
19720 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c!=SQLITE_DONE )
19730 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
19740 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
19750 72 72 6f 72 20 25 64 3a 20 25 73 5c 6e 22 2c 20  rror %d: %s\n", 
19760 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
19770 5f 65 72 72 63 6f 64 65 28 6e 65 77 44 62 29 2c  _errcode(newDb),
19780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19790 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
197a0 5f 65 72 72 6d 73 67 28 6e 65 77 44 62 29 29 3b  _errmsg(newDb));
197b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
197c0 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 49 6e  qlite3_reset(pIn
197d0 73 65 72 74 29 3b 0a 20 20 20 20 20 20 63 6e 74  sert);.      cnt
197e0 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 28 63  ++;.      if( (c
197f0 6e 74 25 73 70 69 6e 52 61 74 65 29 3d 3d 30 20  nt%spinRate)==0 
19800 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74  ){.        print
19810 66 28 22 25 63 5c 62 22 2c 20 22 7c 2f 2d 5c 5c  f("%c\b", "|/-\\
19820 22 5b 28 63 6e 74 2f 73 70 69 6e 52 61 74 65 29  "[(cnt/spinRate)
19830 25 34 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 66  %4]);.        ff
19840 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20  lush(stdout);.  
19850 20 20 20 20 7d 0a 20 20 20 20 7d 20 2f 2a 20 45      }.    } /* E
19860 6e 64 20 77 68 69 6c 65 20 2a 2f 0a 20 20 20 20  nd while */.    
19870 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
19880 4f 4e 45 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ONE ) break;.   
19890 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
198a0 65 28 70 51 75 65 72 79 29 3b 0a 20 20 20 20 73  e(pQuery);.    s
198b0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65  qlite3_free(zQue
198c0 72 79 29 3b 0a 20 20 20 20 7a 51 75 65 72 79 20  ry);.    zQuery 
198d0 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
198e0 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  f("SELECT * FROM
198f0 20 5c 22 25 77 5c 22 20 4f 52 44 45 52 20 42 59   \"%w\" ORDER BY
19900 20 72 6f 77 69 64 20 44 45 53 43 3b 22 2c 0a 20   rowid DESC;",. 
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19920 20 20 20 20 20 20 20 20 20 20 20 20 7a 54 61 62              zTab
19930 6c 65 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  le);.    rc = sq
19940 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
19950 28 70 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20  (p->db, zQuery, 
19960 2d 31 2c 20 26 70 51 75 65 72 79 2c 20 30 29 3b  -1, &pQuery, 0);
19970 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20  .    if( rc ){. 
19980 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
19990 28 73 74 64 65 72 72 2c 20 22 57 61 72 6e 69 6e  (stderr, "Warnin
199a0 67 3a 20 63 61 6e 6e 6f 74 20 73 74 65 70 20 5c  g: cannot step \
199b0 22 25 73 5c 22 20 62 61 63 6b 77 61 72 64 73 22  "%s\" backwards"
199c0 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 20  , zTable);.     
199d0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
199e0 7d 20 2f 2a 20 45 6e 64 20 66 6f 72 28 6b 3d 30  } /* End for(k=0
199f0 2e 2e 2e 29 20 2a 2f 0a 0a 65 6e 64 5f 64 61 74  ...) */..end_dat
19a00 61 5f 78 66 65 72 3a 0a 20 20 73 71 6c 69 74 65  a_xfer:.  sqlite
19a10 33 5f 66 69 6e 61 6c 69 7a 65 28 70 51 75 65 72  3_finalize(pQuer
19a20 79 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  y);.  sqlite3_fi
19a30 6e 61 6c 69 7a 65 28 70 49 6e 73 65 72 74 29 3b  nalize(pInsert);
19a40 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
19a50 7a 51 75 65 72 79 29 3b 0a 20 20 73 71 6c 69 74  zQuery);.  sqlit
19a60 65 33 5f 66 72 65 65 28 7a 49 6e 73 65 72 74 29  e3_free(zInsert)
19a70 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20  ;.}.../*.** Try 
19a80 74 6f 20 74 72 61 6e 73 66 65 72 20 61 6c 6c 20  to transfer all 
19a90 72 6f 77 73 20 6f 66 20 74 68 65 20 73 63 68 65  rows of the sche
19aa0 6d 61 20 74 68 61 74 20 6d 61 74 63 68 20 7a 57  ma that match zW
19ab0 68 65 72 65 2e 20 20 46 6f 72 0a 2a 2a 20 65 61  here.  For.** ea
19ac0 63 68 20 72 6f 77 2c 20 69 6e 76 6f 6b 65 20 78  ch row, invoke x
19ad0 46 6f 72 45 61 63 68 28 29 20 6f 6e 20 74 68 65  ForEach() on the
19ae0 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 64 20   object defined 
19af0 62 79 20 74 68 61 74 20 72 6f 77 2e 0a 2a 2a 20  by that row..** 
19b00 49 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65  If an error is e
19b10 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
19b20 20 6d 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 20   moving forward 
19b30 74 68 72 6f 75 67 68 20 74 68 65 0a 2a 2a 20 73  through the.** s
19b40 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
19b50 6c 65 2c 20 74 72 79 20 61 67 61 69 6e 20 6d 6f  le, try again mo
19b60 76 69 6e 67 20 62 61 63 6b 77 61 72 64 73 2e 0a  ving backwards..
19b70 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  */.static void t
19b80 72 79 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28  ryToCloneSchema(
19b90 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
19ba0 2c 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77  ,.  sqlite3 *new
19bb0 44 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  Db,.  const char
19bc0 20 2a 7a 57 68 65 72 65 2c 0a 20 20 76 6f 69 64   *zWhere,.  void
19bd0 20 28 2a 78 46 6f 72 45 61 63 68 29 28 53 68 65   (*xForEach)(She
19be0 6c 6c 53 74 61 74 65 2a 2c 73 71 6c 69 74 65 33  llState*,sqlite3
19bf0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29  *,const char*).)
19c00 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
19c10 20 2a 70 51 75 65 72 79 20 3d 20 30 3b 0a 20 20   *pQuery = 0;.  
19c20 63 68 61 72 20 2a 7a 51 75 65 72 79 20 3d 20 30  char *zQuery = 0
19c30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 6f  ;.  int rc;.  co
19c40 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
19c50 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 63 6f 6e 73  r *zName;.  cons
19c60 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
19c70 2a 7a 53 71 6c 3b 0a 20 20 63 68 61 72 20 2a 7a  *zSql;.  char *z
19c80 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 7a  ErrMsg = 0;..  z
19c90 51 75 65 72 79 20 3d 20 73 71 6c 69 74 65 33 5f  Query = sqlite3_
19ca0 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20  mprintf("SELECT 
19cb0 6e 61 6d 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73  name, sql FROM s
19cc0 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20  qlite_master".  
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ce0 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45           " WHERE
19cf0 20 25 73 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20   %s", zWhere);. 
19d00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
19d10 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
19d20 7a 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75  zQuery, -1, &pQu
19d30 65 72 79 2c 20 30 29 3b 0a 20 20 69 66 28 20 72  ery, 0);.  if( r
19d40 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  c ){.    utf8_pr
19d50 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
19d60 72 6f 72 3a 20 28 25 64 29 20 25 73 20 6f 6e 20  ror: (%d) %s on 
19d70 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20  [%s]\n",.       
19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
19d90 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72  ite3_extended_er
19da0 72 63 6f 64 65 28 70 2d 3e 64 62 29 2c 20 73 71  rcode(p->db), sq
19db0 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e  lite3_errmsg(p->
19dc0 64 62 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  db),.           
19dd0 20 20 20 20 20 20 20 20 20 7a 51 75 65 72 79 29           zQuery)
19de0 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 73  ;.    goto end_s
19df0 63 68 65 6d 61 5f 78 66 65 72 3b 0a 20 20 7d 0a  chema_xfer;.  }.
19e00 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73    while( (rc = s
19e10 71 6c 69 74 65 33 5f 73 74 65 70 28 70 51 75 65  qlite3_step(pQue
19e20 72 79 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57  ry))==SQLITE_ROW
19e30 20 29 7b 0a 20 20 20 20 7a 4e 61 6d 65 20 3d 20   ){.    zName = 
19e40 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
19e50 65 78 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a  ext(pQuery, 0);.
19e60 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
19e70 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
19e80 51 75 65 72 79 2c 20 31 29 3b 0a 20 20 20 20 70  Query, 1);.    p
19e90 72 69 6e 74 66 28 22 25 73 2e 2e 2e 20 22 2c 20  rintf("%s... ", 
19ea0 7a 4e 61 6d 65 29 3b 20 66 66 6c 75 73 68 28 73  zName); fflush(s
19eb0 74 64 6f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69  tdout);.    sqli
19ec0 74 65 33 5f 65 78 65 63 28 6e 65 77 44 62 2c 20  te3_exec(newDb, 
19ed0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 53 71  (const char*)zSq
19ee0 6c 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d 73  l, 0, 0, &zErrMs
19ef0 67 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72  g);.    if( zErr
19f00 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66  Msg ){.      utf
19f10 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
19f20 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 53 51 4c   "Error: %s\nSQL
19f30 3a 20 5b 25 73 5d 5c 6e 22 2c 20 7a 45 72 72 4d  : [%s]\n", zErrM
19f40 73 67 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  sg, zSql);.     
19f50 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
19f60 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 7a 45  rrMsg);.      zE
19f70 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d  rrMsg = 0;.    }
19f80 0a 20 20 20 20 69 66 28 20 78 46 6f 72 45 61 63  .    if( xForEac
19f90 68 20 29 7b 0a 20 20 20 20 20 20 78 46 6f 72 45  h ){.      xForE
19fa0 61 63 68 28 70 2c 20 6e 65 77 44 62 2c 20 28 63  ach(p, newDb, (c
19fb0 6f 6e 73 74 20 63 68 61 72 2a 29 7a 4e 61 6d 65  onst char*)zName
19fc0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 72 69  );.    }.    pri
19fd0 6e 74 66 28 22 64 6f 6e 65 5c 6e 22 29 3b 0a 20  ntf("done\n");. 
19fe0 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
19ff0 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20  ITE_DONE ){.    
1a000 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
1a010 28 70 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71  (pQuery);.    sq
1a020 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72  lite3_free(zQuer
1a030 79 29 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d  y);.    zQuery =
1a040 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
1a050 28 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 73  ("SELECT name, s
1a060 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ql FROM sqlite_m
1a070 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20  aster".         
1a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a090 20 20 20 20 22 20 57 48 45 52 45 20 25 73 20 4f      " WHERE %s O
1a0a0 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
1a0b0 53 43 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20  SC", zWhere);.  
1a0c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
1a0d0 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
1a0e0 20 7a 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51   zQuery, -1, &pQ
1a0f0 75 65 72 79 2c 20 30 29 3b 0a 20 20 20 20 69 66  uery, 0);.    if
1a100 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74  ( rc ){.      ut
1a110 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
1a120 2c 20 22 45 72 72 6f 72 3a 20 28 25 64 29 20 25  , "Error: (%d) %
1a130 73 20 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20  s on [%s]\n",.  
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a150 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65      sqlite3_exte
1a160 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 70 2d 3e  nded_errcode(p->
1a170 64 62 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  db), sqlite3_err
1a180 6d 73 67 28 70 2d 3e 64 62 29 2c 0a 20 20 20 20  msg(p->db),.    
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 20    zQuery);.     
1a1b0 20 67 6f 74 6f 20 65 6e 64 5f 73 63 68 65 6d 61   goto end_schema
1a1c0 5f 78 66 65 72 3b 0a 20 20 20 20 7d 0a 20 20 20  _xfer;.    }.   
1a1d0 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71   while( (rc = sq
1a1e0 6c 69 74 65 33 5f 73 74 65 70 28 70 51 75 65 72  lite3_step(pQuer
1a1f0 79 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  y))==SQLITE_ROW 
1a200 29 7b 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  ){.      zName =
1a210 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1a220 74 65 78 74 28 70 51 75 65 72 79 2c 20 30 29 3b  text(pQuery, 0);
1a230 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  .      zSql = sq
1a240 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
1a250 74 28 70 51 75 65 72 79 2c 20 31 29 3b 0a 20 20  t(pQuery, 1);.  
1a260 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 2e 2e      printf("%s..
1a270 2e 20 22 2c 20 7a 4e 61 6d 65 29 3b 20 66 66 6c  . ", zName); ffl
1a280 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20  ush(stdout);.   
1a290 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28     sqlite3_exec(
1a2a0 6e 65 77 44 62 2c 20 28 63 6f 6e 73 74 20 63 68  newDb, (const ch
1a2b0 61 72 2a 29 7a 53 71 6c 2c 20 30 2c 20 30 2c 20  ar*)zSql, 0, 0, 
1a2c0 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
1a2d0 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a   if( zErrMsg ){.
1a2e0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
1a2f0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
1a300 6f 72 3a 20 25 73 5c 6e 53 51 4c 3a 20 5b 25 73  or: %s\nSQL: [%s
1a310 5d 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 2c 20 7a  ]\n", zErrMsg, z
1a320 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Sql);.        sq
1a330 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d  lite3_free(zErrM
1a340 73 67 29 3b 0a 20 20 20 20 20 20 20 20 7a 45 72  sg);.        zEr
1a350 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 20 20  rMsg = 0;.      
1a360 7d 0a 20 20 20 20 20 20 69 66 28 20 78 46 6f 72  }.      if( xFor
1a370 45 61 63 68 20 29 7b 0a 20 20 20 20 20 20 20 20  Each ){.        
1a380 78 46 6f 72 45 61 63 68 28 70 2c 20 6e 65 77 44  xForEach(p, newD
1a390 62 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  b, (const char*)
1a3a0 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a  zName);.      }.
1a3b0 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 64 6f        printf("do
1a3c0 6e 65 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20  ne\n");.    }.  
1a3d0 7d 0a 65 6e 64 5f 73 63 68 65 6d 61 5f 78 66 65  }.end_schema_xfe
1a3e0 72 3a 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  r:.  sqlite3_fin
1a3f0 61 6c 69 7a 65 28 70 51 75 65 72 79 29 3b 0a 20  alize(pQuery);. 
1a400 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51   sqlite3_free(zQ
1a410 75 65 72 79 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  uery);.}../*.** 
1a420 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62  Open a new datab
1a430 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 64 20 22  ase file named "
1a440 7a 4e 65 77 44 62 22 2e 20 20 54 72 79 20 74 6f  zNewDb".  Try to
1a450 20 72 65 63 6f 76 65 72 20 61 73 20 6d 75 63 68   recover as much
1a460 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
1a470 61 73 20 70 6f 73 73 69 62 6c 65 20 6f 75 74 20  as possible out 
1a480 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  of the main data
1a490 62 61 73 65 20 28 77 68 69 63 68 20 6d 69 67 68  base (which migh
1a4a0 74 20 62 65 20 63 6f 72 72 75 70 74 29 20 61 6e  t be corrupt) an
1a4b0 64 20 77 72 69 74 65 20 69 74 0a 2a 2a 20 69 6e  d write it.** in
1a4c0 74 6f 20 7a 4e 65 77 44 62 2e 0a 2a 2f 0a 73 74  to zNewDb..*/.st
1a4d0 61 74 69 63 20 76 6f 69 64 20 74 72 79 54 6f 43  atic void tryToC
1a4e0 6c 6f 6e 65 28 53 68 65 6c 6c 53 74 61 74 65 20  lone(ShellState 
1a4f0 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  *p, const char *
1a500 7a 4e 65 77 44 62 29 7b 0a 20 20 69 6e 74 20 72  zNewDb){.  int r
1a510 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e 65  c;.  sqlite3 *ne
1a520 77 44 62 20 3d 20 30 3b 0a 20 20 69 66 28 20 61  wDb = 0;.  if( a
1a530 63 63 65 73 73 28 7a 4e 65 77 44 62 2c 30 29 3d  ccess(zNewDb,0)=
1a540 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  =0 ){.    utf8_p
1a550 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 46  rintf(stderr, "F
1a560 69 6c 65 20 5c 22 25 73 5c 22 20 61 6c 72 65 61  ile \"%s\" alrea
1a570 64 79 20 65 78 69 73 74 73 2e 5c 6e 22 2c 20 7a  dy exists.\n", z
1a580 4e 65 77 44 62 29 3b 0a 20 20 20 20 72 65 74 75  NewDb);.    retu
1a590 72 6e 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  rn;.  }.  rc = s
1a5a0 71 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 4e 65 77  qlite3_open(zNew
1a5b0 44 62 2c 20 26 6e 65 77 44 62 29 3b 0a 20 20 69  Db, &newDb);.  i
1a5c0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 75 74 66  f( rc ){.    utf
1a5d0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
1a5e0 20 22 43 61 6e 6e 6f 74 20 63 72 65 61 74 65 20   "Cannot create 
1a5f0 6f 75 74 70 75 74 20 64 61 74 61 62 61 73 65 3a  output database:
1a600 20 25 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20   %s\n",.        
1a610 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d      sqlite3_errm
1a620 73 67 28 6e 65 77 44 62 29 29 3b 0a 20 20 7d 65  sg(newDb));.  }e
1a630 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
1a640 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52  _exec(p->db, "PR
1a650 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
1a660 68 65 6d 61 3d 4f 4e 3b 22 2c 20 30 2c 20 30 2c  hema=ON;", 0, 0,
1a670 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
1a680 5f 65 78 65 63 28 6e 65 77 44 62 2c 20 22 42 45  _exec(newDb, "BE
1a690 47 49 4e 20 45 58 43 4c 55 53 49 56 45 3b 22 2c  GIN EXCLUSIVE;",
1a6a0 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 74   0, 0, 0);.    t
1a6b0 72 79 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28  ryToCloneSchema(
1a6c0 70 2c 20 6e 65 77 44 62 2c 20 22 74 79 70 65 3d  p, newDb, "type=
1a6d0 27 74 61 62 6c 65 27 22 2c 20 74 72 79 54 6f 43  'table'", tryToC
1a6e0 6c 6f 6e 65 44 61 74 61 29 3b 0a 20 20 20 20 74  loneData);.    t
1a6f0 72 79 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28  ryToCloneSchema(
1a700 70 2c 20 6e 65 77 44 62 2c 20 22 74 79 70 65 21  p, newDb, "type!
1a710 3d 27 74 61 62 6c 65 27 22 2c 20 30 29 3b 0a 20  ='table'", 0);. 
1a720 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28     sqlite3_exec(
1a730 6e 65 77 44 62 2c 20 22 43 4f 4d 4d 49 54 3b 22  newDb, "COMMIT;"
1a740 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
1a750 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
1a760 64 62 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74  db, "PRAGMA writ
1a770 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 3b  able_schema=OFF;
1a780 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  ", 0, 0, 0);.  }
1a790 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  .  sqlite3_close
1a7a0 28 6e 65 77 44 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  (newDb);.}../*.*
1a7b0 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6f 75 74  * Change the out
1a7c0 70 75 74 20 66 69 6c 65 20 62 61 63 6b 20 74 6f  put file back to
1a7d0 20 73 74 64 6f 75 74 0a 2a 2f 0a 73 74 61 74 69   stdout.*/.stati
1a7e0 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 72 65  c void output_re
1a7f0 73 65 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  set(ShellState *
1a800 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74  p){.  if( p->out
1a810 66 69 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29 7b 0a  file[0]=='|' ){.
1a820 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1a830 4d 49 54 5f 50 4f 50 45 4e 0a 20 20 20 20 70 63  MIT_POPEN.    pc
1a840 6c 6f 73 65 28 70 2d 3e 6f 75 74 29 3b 0a 23 65  lose(p->out);.#e
1a850 6e 64 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ndif.  }else{.  
1a860 20 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c    output_file_cl
1a870 6f 73 65 28 70 2d 3e 6f 75 74 29 3b 0a 20 20 7d  ose(p->out);.  }
1a880 0a 20 20 70 2d 3e 6f 75 74 66 69 6c 65 5b 30 5d  .  p->outfile[0]
1a890 20 3d 20 30 3b 0a 20 20 70 2d 3e 6f 75 74 20 3d   = 0;.  p->out =
1a8a0 20 73 74 64 6f 75 74 3b 0a 7d 0a 0a 2f 2a 0a 2a   stdout;.}../*.*
1a8b0 2a 20 52 75 6e 20 61 6e 20 53 51 4c 20 63 6f 6d  * Run an SQL com
1a8c0 6d 61 6e 64 20 61 6e 64 20 72 65 74 75 72 6e 20  mand and return 
1a8d0 74 68 65 20 73 69 6e 67 6c 65 20 69 6e 74 65 67  the single integ
1a8e0 65 72 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74  er result..*/.st
1a8f0 61 74 69 63 20 69 6e 74 20 64 62 5f 69 6e 74 28  atic int db_int(
1a900 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63  ShellState *p, c
1a910 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 29  onst char *zSql)
1a920 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
1a930 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72   *pStmt;.  int r
1a940 65 73 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  es = 0;.  sqlite
1a950 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e  3_prepare_v2(p->
1a960 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70  db, zSql, -1, &p
1a970 53 74 6d 74 2c 20 30 29 3b 0a 20 20 69 66 28 20  Stmt, 0);.  if( 
1a980 70 53 74 6d 74 20 26 26 20 73 71 6c 69 74 65 33  pStmt && sqlite3
1a990 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51  _step(pStmt)==SQ
1a9a0 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
1a9b0 72 65 73 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  res = sqlite3_co
1a9c0 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 30  lumn_int(pStmt,0
1a9d0 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
1a9e0 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
1a9f0 3b 0a 20 20 72 65 74 75 72 6e 20 72 65 73 3b 0a  ;.  return res;.
1aa00 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  }../*.** Convert
1aa10 20 61 20 32 2d 62 79 74 65 20 6f 72 20 34 2d 62   a 2-byte or 4-b
1aa20 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
1aa30 6e 74 65 67 65 72 20 69 6e 74 6f 20 61 20 6e 61  nteger into a na
1aa40 74 69 76 65 20 69 6e 74 65 67 65 72 0a 2a 2f 0a  tive integer.*/.
1aa50 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20  static unsigned 
1aa60 69 6e 74 20 67 65 74 32 62 79 74 65 49 6e 74 28  int get2byteInt(
1aa70 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61  unsigned char *a
1aa80 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30  ){.  return (a[0
1aa90 5d 3c 3c 38 29 20 2b 20 61 5b 31 5d 3b 0a 7d 0a  ]<<8) + a[1];.}.
1aaa0 73 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20  static unsigned 
1aab0 69 6e 74 20 67 65 74 34 62 79 74 65 49 6e 74 28  int get4byteInt(
1aac0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61  unsigned char *a
1aad0 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30  ){.  return (a[0
1aae0 5d 3c 3c 32 34 29 20 2b 20 28 61 5b 31 5d 3c 3c  ]<<24) + (a[1]<<
1aaf0 31 36 29 20 2b 20 28 61 5b 32 5d 3c 3c 38 29 20  16) + (a[2]<<8) 
1ab00 2b 20 61 5b 33 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  + a[3];.}../*.**
1ab10 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   Implementation 
1ab20 6f 66 20 74 68 65 20 22 2e 69 6e 66 6f 22 20 63  of the ".info" c
1ab30 6f 6d 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 52 65  ommand..**.** Re
1ab40 74 75 72 6e 20 31 20 6f 6e 20 65 72 72 6f 72 2c  turn 1 on error,
1ab50 20 32 20 74 6f 20 65 78 69 74 2c 20 61 6e 64 20   2 to exit, and 
1ab60 30 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a  0 otherwise..*/.
1ab70 73 74 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c  static int shell
1ab80 5f 64 62 69 6e 66 6f 5f 63 6f 6d 6d 61 6e 64 28  _dbinfo_command(
1ab90 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 69  ShellState *p, i
1aba0 6e 74 20 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a  nt nArg, char **
1abb0 61 7a 41 72 67 29 7b 0a 20 20 73 74 61 74 69 63  azArg){.  static
1abc0 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 20   const struct { 
1abd0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
1abe0 65 3b 20 69 6e 74 20 6f 66 73 74 3b 20 7d 20 61  e; int ofst; } a
1abf0 46 69 65 6c 64 5b 5d 20 3d 20 7b 0a 20 20 20 20  Field[] = {.    
1ac00 20 7b 20 22 66 69 6c 65 20 63 68 61 6e 67 65 20   { "file change 
1ac10 63 6f 75 6e 74 65 72 3a 22 2c 20 20 32 34 20 20  counter:",  24  
1ac20 7d 2c 0a 20 20 20 20 20 7b 20 22 64 61 74 61 62  },.     { "datab
1ac30 61 73 65 20 70 61 67 65 20 63 6f 75 6e 74 3a 22  ase page count:"
1ac40 2c 20 20 32 38 20 20 7d 2c 0a 20 20 20 20 20 7b  ,  28  },.     {
1ac50 20 22 66 72 65 65 6c 69 73 74 20 70 61 67 65 20   "freelist page 
1ac60 63 6f 75 6e 74 3a 22 2c 20 20 33 36 20 20 7d 2c  count:",  36  },
1ac70 0a 20 20 20 20 20 7b 20 22 73 63 68 65 6d 61 20  .     { "schema 
1ac80 63 6f 6f 6b 69 65 3a 22 2c 20 20 20 20 20 20 20  cookie:",       
1ac90 20 34 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   40  },.     { "
1aca0 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 3a 22 2c  schema format:",
1acb0 20 20 20 20 20 20 20 20 34 34 20 20 7d 2c 0a 20          44  },. 
1acc0 20 20 20 20 7b 20 22 64 65 66 61 75 6c 74 20 63      { "default c
1acd0 61 63 68 65 20 73 69 7a 65 3a 22 2c 20 20 20 34  ache size:",   4
1ace0 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 75  8  },.     { "au
1acf0 74 6f 76 61 63 75 75 6d 20 74 6f 70 20 72 6f 6f  tovacuum top roo
1ad00 74 3a 22 2c 20 20 35 32 20 20 7d 2c 0a 20 20 20  t:",  52  },.   
1ad10 20 20 7b 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c    { "incremental
1ad20 20 76 61 63 75 75 6d 3a 22 2c 20 20 20 36 34 20   vacuum:",   64 
1ad30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 74 65 78 74   },.     { "text
1ad40 20 65 6e 63 6f 64 69 6e 67 3a 22 2c 20 20 20 20   encoding:",    
1ad50 20 20 20 20 35 36 20 20 7d 2c 0a 20 20 20 20 20      56  },.     
1ad60 7b 20 22 75 73 65 72 20 76 65 72 73 69 6f 6e 3a  { "user version:
1ad70 22 2c 20 20 20 20 20 20 20 20 20 36 30 20 20 7d  ",         60  }
1ad80 2c 0a 20 20 20 20 20 7b 20 22 61 70 70 6c 69 63  ,.     { "applic
1ad90 61 74 69 6f 6e 20 69 64 3a 22 2c 20 20 20 20 20  ation id:",     
1ada0 20 20 36 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20    68  },.     { 
1adb0 22 73 6f 66 74 77 61 72 65 20 76 65 72 73 69 6f  "software versio
1adc0 6e 3a 22 2c 20 20 20 20 20 39 36 20 20 7d 2c 0a  n:",     96  },.
1add0 20 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f    };.  static co
1ade0 6e 73 74 20 73 74 72 75 63 74 20 7b 20 63 6f 6e  nst struct { con
1adf0 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
1ae00 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
1ae10 3b 20 7d 20 61 51 75 65 72 79 5b 5d 20 3d 20 7b  ; } aQuery[] = {
1ae20 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62 65 72 20  .     { "number 
1ae30 6f 66 20 74 61 62 6c 65 73 3a 22 2c 0a 20 20 20  of tables:",.   
1ae40 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e      "SELECT coun
1ae50 74 28 2a 29 20 46 52 4f 4d 20 25 73 20 57 48 45  t(*) FROM %s WHE
1ae60 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 22  RE type='table'"
1ae70 20 7d 2c 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62   },.     { "numb
1ae80 65 72 20 6f 66 20 69 6e 64 65 78 65 73 3a 22 2c  er of indexes:",
1ae90 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
1aea0 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73  count(*) FROM %s
1aeb0 20 57 48 45 52 45 20 74 79 70 65 3d 27 69 6e 64   WHERE type='ind
1aec0 65 78 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22  ex'" },.     { "
1aed0 6e 75 6d 62 65 72 20 6f 66 20 74 72 69 67 67 65  number of trigge
1aee0 72 73 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45  rs:",.       "SE
1aef0 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
1af00 4f 4d 20 25 73 20 57 48 45 52 45 20 74 79 70 65  OM %s WHERE type
1af10 3d 27 74 72 69 67 67 65 72 27 22 20 7d 2c 0a 20  ='trigger'" },. 
1af20 20 20 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66      { "number of
1af30 20 76 69 65 77 73 3a 22 2c 0a 20 20 20 20 20 20   views:",.      
1af40 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   "SELECT count(*
1af50 29 20 46 52 4f 4d 20 25 73 20 57 48 45 52 45 20  ) FROM %s WHERE 
1af60 74 79 70 65 3d 27 76 69 65 77 27 22 20 7d 2c 0a  type='view'" },.
1af70 20 20 20 20 20 7b 20 22 73 63 68 65 6d 61 20 73       { "schema s
1af80 69 7a 65 3a 22 2c 0a 20 20 20 20 20 20 20 22 53  ize:",.       "S
1af90 45 4c 45 43 54 20 74 6f 74 61 6c 28 6c 65 6e 67  ELECT total(leng
1afa0 74 68 28 73 71 6c 29 29 20 46 52 4f 4d 20 25 73  th(sql)) FROM %s
1afb0 22 20 7d 2c 0a 20 20 7d 3b 0a 20 20 73 71 6c 69  " },.  };.  sqli
1afc0 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
1afd0 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  = 0;.  int i;.  
1afe0 63 68 61 72 20 2a 7a 53 63 68 65 6d 61 54 61 62  char *zSchemaTab
1aff0 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62 20 3d 20  ;.  char *zDb = 
1b000 6e 41 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b  nArg>=2 ? azArg[
1b010 31 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a 20 20 75  1] : "main";.  u
1b020 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 48 64  nsigned char aHd
1b030 72 5b 31 30 30 5d 3b 0a 20 20 6f 70 65 6e 5f 64  r[100];.  open_d
1b040 62 28 70 2c 20 30 29 3b 0a 20 20 69 66 28 20 70  b(p, 0);.  if( p
1b050 2d 3e 64 62 3d 3d 30 20 29 20 72 65 74 75 72 6e  ->db==0 ) return
1b060 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69   1;.  sqlite3_fi
1b070 6c 65 5f 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62  le_control(p->db
1b080 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43  , zDb, SQLITE_FC
1b090 4e 54 4c 5f 46 49 4c 45 5f 50 4f 49 4e 54 45 52  NTL_FILE_POINTER
1b0a0 2c 20 26 70 46 69 6c 65 29 3b 0a 20 20 69 66 28  , &pFile);.  if(
1b0b0 20 70 46 69 6c 65 3d 3d 30 20 7c 7c 20 70 46 69   pFile==0 || pFi
1b0c0 6c 65 2d 3e 70 4d 65 74 68 6f 64 73 3d 3d 30 20  le->pMethods==0 
1b0d0 7c 7c 20 70 46 69 6c 65 2d 3e 70 4d 65 74 68 6f  || pFile->pMetho
1b0e0 64 73 2d 3e 78 52 65 61 64 3d 3d 30 20 29 7b 0a  ds->xRead==0 ){.
1b0f0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
1b100 7d 0a 20 20 69 20 3d 20 70 46 69 6c 65 2d 3e 70  }.  i = pFile->p
1b110 4d 65 74 68 6f 64 73 2d 3e 78 52 65 61 64 28 70  Methods->xRead(p
1b120 46 69 6c 65 2c 20 61 48 64 72 2c 20 31 30 30 2c  File, aHdr, 100,
1b130 20 30 29 3b 0a 20 20 69 66 28 20 69 21 3d 53 51   0);.  if( i!=SQ
1b140 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
1b150 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1b160 2c 20 22 75 6e 61 62 6c 65 20 74 6f 20 72 65 61  , "unable to rea
1b170 64 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  d database heade
1b180 72 5c 6e 22 29 3b 0a 20 20 20 20 72 65 74 75 72  r\n");.    retur
1b190 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 20 3d 20 67  n 1;.  }.  i = g
1b1a0 65 74 32 62 79 74 65 49 6e 74 28 61 48 64 72 2b  et2byteInt(aHdr+
1b1b0 31 36 29 3b 0a 20 20 69 66 28 20 69 3d 3d 31 20  16);.  if( i==1 
1b1c0 29 20 69 20 3d 20 36 35 35 33 36 3b 0a 20 20 75  ) i = 65536;.  u
1b1d0 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
1b1e0 74 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c  t, "%-20s %d\n",
1b1f0 20 22 64 61 74 61 62 61 73 65 20 70 61 67 65 20   "database page 
1b200 73 69 7a 65 3a 22 2c 20 69 29 3b 0a 20 20 75 74  size:", i);.  ut
1b210 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
1b220 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20  , "%-20s %d\n", 
1b230 22 77 72 69 74 65 20 66 6f 72 6d 61 74 3a 22 2c  "write format:",
1b240 20 61 48 64 72 5b 31 38 5d 29 3b 0a 20 20 75 74   aHdr[18]);.  ut
1b250 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
1b260 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20  , "%-20s %d\n", 
1b270 22 72 65 61 64 20 66 6f 72 6d 61 74 3a 22 2c 20  "read format:", 
1b280 61 48 64 72 5b 31 39 5d 29 3b 0a 20 20 75 74 66  aHdr[19]);.  utf
1b290 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
1b2a0 20 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22   "%-20s %d\n", "
1b2b0 72 65 73 65 72 76 65 64 20 62 79 74 65 73 3a 22  reserved bytes:"
1b2c0 2c 20 61 48 64 72 5b 32 30 5d 29 3b 0a 20 20 66  , aHdr[20]);.  f
1b2d0 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53  or(i=0; i<ArrayS
1b2e0 69 7a 65 28 61 46 69 65 6c 64 29 3b 20 69 2b 2b  ize(aField); i++
1b2f0 29 7b 0a 20 20 20 20 69 6e 74 20 6f 66 73 74 20  ){.    int ofst 
1b300 3d 20 61 46 69 65 6c 64 5b 69 5d 2e 6f 66 73 74  = aField[i].ofst
1b310 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  ;.    unsigned i
1b320 6e 74 20 76 61 6c 20 3d 20 67 65 74 34 62 79 74  nt val = get4byt
1b330 65 49 6e 74 28 61 48 64 72 20 2b 20 6f 66 73 74  eInt(aHdr + ofst
1b340 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
1b350 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30  tf(p->out, "%-20
1b360 73 20 25 75 22 2c 20 61 46 69 65 6c 64 5b 69 5d  s %u", aField[i]
1b370 2e 7a 4e 61 6d 65 2c 20 76 61 6c 29 3b 0a 20 20  .zName, val);.  
1b380 20 20 73 77 69 74 63 68 28 20 6f 66 73 74 20 29    switch( ofst )
1b390 7b 0a 20 20 20 20 20 20 63 61 73 65 20 35 36 3a  {.      case 56:
1b3a0 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 76   {.        if( v
1b3b0 61 6c 3d 3d 31 20 29 20 72 61 77 5f 70 72 69 6e  al==1 ) raw_prin
1b3c0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20 28 75 74  tf(p->out, " (ut
1b3d0 66 38 29 22 29 3b 0a 20 20 20 20 20 20 20 20 69  f8)");.        i
1b3e0 66 28 20 76 61 6c 3d 3d 32 20 29 20 72 61 77 5f  f( val==2 ) raw_
1b3f0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
1b400 20 28 75 74 66 31 36 6c 65 29 22 29 3b 0a 20 20   (utf16le)");.  
1b410 20 20 20 20 20 20 69 66 28 20 76 61 6c 3d 3d 33        if( val==3
1b420 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d   ) raw_printf(p-
1b430 3e 6f 75 74 2c 20 22 20 28 75 74 66 31 36 62 65  >out, " (utf16be
1b440 29 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  )");.      }.   
1b450 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74   }.    raw_print
1b460 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b  f(p->out, "\n");
1b470 0a 20 20 7d 0a 20 20 69 66 28 20 7a 44 62 3d 3d  .  }.  if( zDb==
1b480 30 20 29 7b 0a 20 20 20 20 7a 53 63 68 65 6d 61  0 ){.    zSchema
1b490 54 61 62 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Tab = sqlite3_mp
1b4a0 72 69 6e 74 66 28 22 6d 61 69 6e 2e 73 71 6c 69  rintf("main.sqli
1b4b0 74 65 5f 6d 61 73 74 65 72 22 29 3b 0a 20 20 7d  te_master");.  }
1b4c0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
1b4d0 7a 44 62 2c 22 74 65 6d 70 22 29 3d 3d 30 20 29  zDb,"temp")==0 )
1b4e0 7b 0a 20 20 20 20 7a 53 63 68 65 6d 61 54 61 62  {.    zSchemaTab
1b4f0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
1b500 74 66 28 22 25 73 22 2c 20 22 73 71 6c 69 74 65  tf("%s", "sqlite
1b510 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 29 3b 0a  _temp_master");.
1b520 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 53 63    }else{.    zSc
1b530 68 65 6d 61 54 61 62 20 3d 20 73 71 6c 69 74 65  hemaTab = sqlite
1b540 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22 25 77 5c  3_mprintf("\"%w\
1b550 22 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  ".sqlite_master"
1b560 2c 20 7a 44 62 29 3b 0a 20 20 7d 0a 20 20 66 6f  , zDb);.  }.  fo
1b570 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69  r(i=0; i<ArraySi
1b580 7a 65 28 61 51 75 65 72 79 29 3b 20 69 2b 2b 29  ze(aQuery); i++)
1b590 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c  {.    char *zSql
1b5a0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
1b5b0 74 66 28 61 51 75 65 72 79 5b 69 5d 2e 7a 53 71  tf(aQuery[i].zSq
1b5c0 6c 2c 20 7a 53 63 68 65 6d 61 54 61 62 29 3b 0a  l, zSchemaTab);.
1b5d0 20 20 20 20 69 6e 74 20 76 61 6c 20 3d 20 64 62      int val = db
1b5e0 5f 69 6e 74 28 70 2c 20 7a 53 71 6c 29 3b 0a 20  _int(p, zSql);. 
1b5f0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
1b600 7a 53 71 6c 29 3b 0a 20 20 20 20 75 74 66 38 5f  zSql);.    utf8_
1b610 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
1b620 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 61 51 75  %-20s %d\n", aQu
1b630 65 72 79 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 76 61  ery[i].zName, va
1b640 6c 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  l);.  }.  sqlite
1b650 33 5f 66 72 65 65 28 7a 53 63 68 65 6d 61 54 61  3_free(zSchemaTa
1b660 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a  b);.  return 0;.
1b670 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  }../*.** Print t
1b680 68 65 20 63 75 72 72 65 6e 74 20 73 71 6c 69 74  he current sqlit
1b690 65 33 5f 65 72 72 6d 73 67 28 29 20 76 61 6c 75  e3_errmsg() valu
1b6a0 65 20 74 6f 20 73 74 64 65 72 72 20 61 6e 64 20  e to stderr and 
1b6b0 72 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61  return 1..*/.sta
1b6c0 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 44 61 74  tic int shellDat
1b6d0 61 62 61 73 65 45 72 72 6f 72 28 73 71 6c 69 74  abaseError(sqlit
1b6e0 65 33 20 2a 64 62 29 7b 0a 20 20 63 6f 6e 73 74  e3 *db){.  const
1b6f0 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 73 71   char *zErr = sq
1b700 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29  lite3_errmsg(db)
1b710 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28  ;.  utf8_printf(
1b720 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
1b730 25 73 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20 20  %s\n", zErr);.  
1b740 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a  return 1;.}../*.
1b750 2a 2a 20 50 72 69 6e 74 20 61 6e 20 6f 75 74 2d  ** Print an out-
1b760 6f 66 2d 6d 65 6d 6f 72 79 20 6d 65 73 73 61 67  of-memory messag
1b770 65 20 74 6f 20 73 74 64 65 72 72 20 61 6e 64 20  e to stderr and 
1b780 72 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61  return 1..*/.sta
1b790 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 4e 6f 6d  tic int shellNom
1b7a0 65 6d 45 72 72 6f 72 28 76 6f 69 64 29 7b 0a 20  emError(void){. 
1b7b0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
1b7c0 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74 20  rr, "Error: out 
1b7d0 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20  of memory\n");. 
1b7e0 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a   return 1;.}../*
1b7f0 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
1b800 70 61 74 74 65 72 6e 20 69 6e 20 7a 47 6c 6f 62  pattern in zGlob
1b810 5b 5d 20 61 67 61 69 6e 73 74 20 74 68 65 20 74  [] against the t
1b820 65 78 74 20 69 6e 20 7a 5b 5d 2e 20 20 52 65 74  ext in z[].  Ret
1b830 75 72 6e 20 54 52 55 45 0a 2a 2a 20 69 66 20 74  urn TRUE.** if t
1b840 68 65 79 20 6d 61 74 63 68 20 61 6e 64 20 46 41  hey match and FA
1b850 4c 53 45 20 28 30 29 20 69 66 20 74 68 65 79 20  LSE (0) if they 
1b860 64 6f 20 6e 6f 74 20 6d 61 74 63 68 2e 0a 2a 2a  do not match..**
1b870 0a 2a 2a 20 47 6c 6f 62 62 69 6e 67 20 72 75 6c  .** Globbing rul
1b880 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27  es:.**.**      '
1b890 2a 27 20 20 20 20 20 20 20 4d 61 74 63 68 65 73  *'       Matches
1b8a0 20 61 6e 79 20 73 65 71 75 65 6e 63 65 20 6f 66   any sequence of
1b8b0 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68   zero or more ch
1b8c0 61 72 61 63 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  aracters..**.** 
1b8d0 20 20 20 20 20 27 3f 27 20 20 20 20 20 20 20 4d       '?'       M
1b8e0 61 74 63 68 65 73 20 65 78 61 63 74 6c 79 20 6f  atches exactly o
1b8f0 6e 65 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2a  ne character..**
1b900 0a 2a 2a 20 20 20 20 20 5b 2e 2e 2e 5d 20 20 20  .**     [...]   
1b910 20 20 20 4d 61 74 63 68 65 73 20 6f 6e 65 20 63     Matches one c
1b920 68 61 72 61 63 74 65 72 20 66 72 6f 6d 20 74 68  haracter from th
1b930 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69 73 74 20  e enclosed list 
1b940 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  of.**           
1b950 20 20 20 20 20 63 68 61 72 61 63 74 65 72 73 2e       characters.
1b960 0a 2a 2a 0a 2a 2a 20 20 20 20 20 5b 5e 2e 2e 2e  .**.**     [^...
1b970 5d 20 20 20 20 20 4d 61 74 63 68 65 73 20 6f 6e  ]     Matches on
1b980 65 20 63 68 61 72 61 63 74 65 72 20 6e 6f 74 20  e character not 
1b990 69 6e 20 74 68 65 20 65 6e 63 6c 6f 73 65 64 20  in the enclosed 
1b9a0 6c 69 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  list..**.**     
1b9b0 20 27 23 27 20 20 20 20 20 20 20 4d 61 74 63 68   '#'       Match
1b9c0 65 73 20 61 6e 79 20 73 65 71 75 65 6e 63 65 20  es any sequence 
1b9d0 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 64  of one or more d
1b9e0 69 67 69 74 73 20 77 69 74 68 20 61 6e 0a 2a 2a  igits with an.**
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba00 6f 70 74 69 6f 6e 61 6c 20 2b 20 6f 72 20 2d 20  optional + or - 
1ba10 73 69 67 6e 20 69 6e 20 66 72 6f 6e 74 0a 2a 2a  sign in front.**
1ba20 0a 2a 2a 20 20 20 20 20 20 27 20 27 20 20 20 20  .**      ' '    
1ba30 20 20 20 41 6e 79 20 73 70 61 6e 20 6f 66 20 77     Any span of w
1ba40 68 69 74 65 73 70 61 63 65 20 6d 61 74 63 68 65  hitespace matche
1ba50 73 20 61 6e 79 20 6f 74 68 65 72 20 73 70 61 6e  s any other span
1ba60 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   of.**          
1ba70 20 20 20 20 20 20 77 68 69 74 65 73 70 61 63 65        whitespace
1ba80 2e 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 20 77 68  ..**.** Extra wh
1ba90 69 74 65 73 70 61 63 65 20 61 74 20 74 68 65 20  itespace at the 
1baa0 65 6e 64 20 6f 66 20 7a 5b 5d 20 69 73 20 69 67  end of z[] is ig
1bab0 6e 6f 72 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  nored..*/.static
1bac0 20 69 6e 74 20 74 65 73 74 63 61 73 65 5f 67 6c   int testcase_gl
1bad0 6f 62 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ob(const char *z
1bae0 47 6c 6f 62 2c 20 63 6f 6e 73 74 20 63 68 61 72  Glob, const char
1baf0 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 63 2c 20 63   *z){.  int c, c
1bb00 32 3b 0a 20 20 69 6e 74 20 69 6e 76 65 72 74 3b  2;.  int invert;
1bb10 0a 20 20 69 6e 74 20 73 65 65 6e 3b 0a 0a 20 20  .  int seen;..  
1bb20 77 68 69 6c 65 28 20 28 63 20 3d 20 28 2a 28 7a  while( (c = (*(z
1bb30 47 6c 6f 62 2b 2b 29 29 29 21 3d 30 20 29 7b 0a  Glob++)))!=0 ){.
1bb40 20 20 20 20 69 66 28 20 49 73 53 70 61 63 65 28      if( IsSpace(
1bb50 63 29 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  c) ){.      if( 
1bb60 21 49 73 53 70 61 63 65 28 2a 7a 29 20 29 20 72  !IsSpace(*z) ) r
1bb70 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 77  eturn 0;.      w
1bb80 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 2a 7a  hile( IsSpace(*z
1bb90 47 6c 6f 62 29 20 29 20 7a 47 6c 6f 62 2b 2b 3b  Glob) ) zGlob++;
1bba0 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 49 73  .      while( Is
1bbb0 53 70 61 63 65 28 2a 7a 29 20 29 20 7a 2b 2b 3b  Space(*z) ) z++;
1bbc0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
1bbd0 3d 3d 27 2a 27 20 29 7b 0a 20 20 20 20 20 20 77  =='*' ){.      w
1bbe0 68 69 6c 65 28 20 28 63 3d 28 2a 28 7a 47 6c 6f  hile( (c=(*(zGlo
1bbf0 62 2b 2b 29 29 29 20 3d 3d 20 27 2a 27 20 7c 7c  b++))) == '*' ||
1bc00 20 63 3d 3d 27 3f 27 20 29 7b 0a 20 20 20 20 20   c=='?' ){.     
1bc10 20 20 20 69 66 28 20 63 3d 3d 27 3f 27 20 26 26     if( c=='?' &&
1bc20 20 28 2a 28 7a 2b 2b 29 29 3d 3d 30 20 29 20 72   (*(z++))==0 ) r
1bc30 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 7d  eturn 0;.      }
1bc40 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20  .      if( c==0 
1bc50 29 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ){.        retur
1bc60 6e 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  n 1;.      }else
1bc70 20 69 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20   if( c=='[' ){. 
1bc80 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a         while( *z
1bc90 20 26 26 20 74 65 73 74 63 61 73 65 5f 67 6c 6f   && testcase_glo
1bca0 62 28 7a 47 6c 6f 62 2d 31 2c 7a 29 3d 3d 30 20  b(zGlob-1,z)==0 
1bcb0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 2b 2b  ){.          z++
1bcc0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1bcd0 20 20 20 20 72 65 74 75 72 6e 20 28 2a 7a 29 21      return (*z)!
1bce0 3d 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  =0;.      }.    
1bcf0 20 20 77 68 69 6c 65 28 20 28 63 32 20 3d 20 28    while( (c2 = (
1bd00 2a 28 7a 2b 2b 29 29 29 21 3d 30 20 29 7b 0a 20  *(z++)))!=0 ){. 
1bd10 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 63 32         while( c2
1bd20 21 3d 63 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=c ){.         
1bd30 20 63 32 20 3d 20 2a 28 7a 2b 2b 29 3b 0a 20 20   c2 = *(z++);.  
1bd40 20 20 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d          if( c2==
1bd50 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
1bd60 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1bd70 69 66 28 20 74 65 73 74 63 61 73 65 5f 67 6c 6f  if( testcase_glo
1bd80 62 28 7a 47 6c 6f 62 2c 7a 29 20 29 20 72 65 74  b(zGlob,z) ) ret
1bd90 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  urn 1;.      }. 
1bda0 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20       return 0;. 
1bdb0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
1bdc0 27 3f 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28  '?' ){.      if(
1bdd0 20 28 2a 28 7a 2b 2b 29 29 3d 3d 30 20 29 20 72   (*(z++))==0 ) r
1bde0 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c  eturn 0;.    }el
1bdf0 73 65 20 69 66 28 20 63 3d 3d 27 5b 27 20 29 7b  se if( c=='[' ){
1be00 0a 20 20 20 20 20 20 69 6e 74 20 70 72 69 6f 72  .      int prior
1be10 5f 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 65  _c = 0;.      se
1be20 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e  en = 0;.      in
1be30 76 65 72 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  vert = 0;.      
1be40 63 20 3d 20 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20  c = *(z++);.    
1be50 20 20 69 66 28 20 63 3d 3d 30 20 29 20 72 65 74    if( c==0 ) ret
1be60 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 63 32 20  urn 0;.      c2 
1be70 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20  = *(zGlob++);.  
1be80 20 20 20 20 69 66 28 20 63 32 3d 3d 27 5e 27 20      if( c2=='^' 
1be90 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 65 72  ){.        inver
1bea0 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 63  t = 1;.        c
1beb0 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a  2 = *(zGlob++);.
1bec0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
1bed0 28 20 63 32 3d 3d 27 5d 27 20 29 7b 0a 20 20 20  ( c2==']' ){.   
1bee0 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5d 27 20       if( c==']' 
1bef0 29 20 73 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20  ) seen = 1;.    
1bf00 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62      c2 = *(zGlob
1bf10 2b 2b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ++);.      }.   
1bf20 20 20 20 77 68 69 6c 65 28 20 63 32 20 26 26 20     while( c2 && 
1bf30 63 32 21 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20  c2!=']' ){.     
1bf40 20 20 20 69 66 28 20 63 32 3d 3d 27 2d 27 20 26     if( c2=='-' &
1bf50 26 20 7a 47 6c 6f 62 5b 30 5d 21 3d 27 5d 27 20  & zGlob[0]!=']' 
1bf60 26 26 20 7a 47 6c 6f 62 5b 30 5d 21 3d 30 20 26  && zGlob[0]!=0 &
1bf70 26 20 70 72 69 6f 72 5f 63 3e 30 20 29 7b 0a 20  & prior_c>0 ){. 
1bf80 20 20 20 20 20 20 20 20 20 63 32 20 3d 20 2a 28           c2 = *(
1bf90 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20  zGlob++);.      
1bfa0 20 20 20 20 69 66 28 20 63 3e 3d 70 72 69 6f 72      if( c>=prior
1bfb0 5f 63 20 26 26 20 63 3c 3d 63 32 20 29 20 73 65  _c && c<=c2 ) se
1bfc0 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  en = 1;.        
1bfd0 20 20 70 72 69 6f 72 5f 63 20 3d 20 30 3b 0a 20    prior_c = 0;. 
1bfe0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1bff0 20 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 63          if( c==c
1c000 32 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  2 ){.           
1c010 20 73 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20   seen = 1;.     
1c020 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1c030 20 70 72 69 6f 72 5f 63 20 3d 20 63 32 3b 0a 20   prior_c = c2;. 
1c040 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1c050 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29   c2 = *(zGlob++)
1c060 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1c070 69 66 28 20 63 32 3d 3d 30 20 7c 7c 20 28 73 65  if( c2==0 || (se
1c080 65 6e 20 5e 20 69 6e 76 65 72 74 29 3d 3d 30 20  en ^ invert)==0 
1c090 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
1c0a0 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 23 27  }else if( c=='#'
1c0b0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 7a   ){.      if( (z
1c0c0 5b 30 5d 3d 3d 27 2d 27 20 7c 7c 20 7a 5b 30 5d  [0]=='-' || z[0]
1c0d0 3d 3d 27 2b 27 29 20 26 26 20 49 73 44 69 67 69  =='+') && IsDigi
1c0e0 74 28 7a 5b 31 5d 29 20 29 20 7a 2b 2b 3b 0a 20  t(z[1]) ) z++;. 
1c0f0 20 20 20 20 20 69 66 28 20 21 49 73 44 69 67 69       if( !IsDigi
1c100 74 28 7a 5b 30 5d 29 20 29 20 72 65 74 75 72 6e  t(z[0]) ) return
1c110 20 30 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20   0;.      z++;. 
1c120 20 20 20 20 20 77 68 69 6c 65 28 20 49 73 44 69       while( IsDi
1c130 67 69 74 28 7a 5b 30 5d 29 20 29 7b 20 7a 2b 2b  git(z[0]) ){ z++
1c140 3b 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ; }.    }else{. 
1c150 20 20 20 20 20 69 66 28 20 63 21 3d 28 2a 28 7a       if( c!=(*(z
1c160 2b 2b 29 29 20 29 20 72 65 74 75 72 6e 20 30 3b  ++)) ) return 0;
1c170 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 77 68 69  .    }.  }.  whi
1c180 6c 65 28 20 49 73 53 70 61 63 65 28 2a 7a 29 20  le( IsSpace(*z) 
1c190 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 72 65 74 75  ){ z++; }.  retu
1c1a0 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 0a 2f 2a  rn *z==0;.}.../*
1c1b0 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
1c1c0 73 74 72 69 6e 67 20 61 73 20 61 20 63 6f 6d 6d  string as a comm
1c1d0 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 20  and-line option 
1c1e0 77 69 74 68 20 65 69 74 68 65 72 20 6f 6e 65 20  with either one 
1c1f0 6f 72 20 74 77 6f 0a 2a 2a 20 69 6e 69 74 69 61  or two.** initia
1c200 6c 20 22 2d 22 20 63 68 61 72 61 63 74 65 72 73  l "-" characters
1c210 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1c220 6f 70 74 69 6f 6e 4d 61 74 63 68 28 63 6f 6e 73  optionMatch(cons
1c230 74 20 63 68 61 72 20 2a 7a 53 74 72 2c 20 63 6f  t char *zStr, co
1c240 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 29 7b  nst char *zOpt){
1c250 0a 20 20 69 66 28 20 7a 53 74 72 5b 30 5d 21 3d  .  if( zStr[0]!=
1c260 27 2d 27 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  '-' ) return 0;.
1c270 20 20 7a 53 74 72 2b 2b 3b 0a 20 20 69 66 28 20    zStr++;.  if( 
1c280 7a 53 74 72 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a  zStr[0]=='-' ) z
1c290 53 74 72 2b 2b 3b 0a 20 20 72 65 74 75 72 6e 20  Str++;.  return 
1c2a0 73 74 72 63 6d 70 28 7a 53 74 72 2c 20 7a 4f 70  strcmp(zStr, zOp
1c2b0 74 29 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  t)==0;.}../*.** 
1c2c0 44 65 6c 65 74 65 20 61 20 66 69 6c 65 2e 0a 2a  Delete a file..*
1c2d0 2f 0a 69 6e 74 20 73 68 65 6c 6c 44 65 6c 65 74  /.int shellDelet
1c2e0 65 46 69 6c 65 28 63 6f 6e 73 74 20 63 68 61 72  eFile(const char
1c2f0 20 2a 7a 46 69 6c 65 6e 61 6d 65 29 7b 0a 20 20   *zFilename){.  
1c300 69 6e 74 20 72 63 3b 0a 23 69 66 64 65 66 20 5f  int rc;.#ifdef _
1c310 57 49 4e 33 32 0a 20 20 77 63 68 61 72 5f 74 20  WIN32.  wchar_t 
1c320 2a 7a 20 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e  *z = sqlite3_win
1c330 33 32 5f 75 74 66 38 5f 74 6f 5f 75 6e 69 63 6f  32_utf8_to_unico
1c340 64 65 28 7a 46 69 6c 65 6e 61 6d 65 29 3b 0a 20  de(zFilename);. 
1c350 20 72 63 20 3d 20 5f 77 75 6e 6c 69 6e 6b 28 7a   rc = _wunlink(z
1c360 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
1c370 65 28 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 72 63  e(z);.#else.  rc
1c380 20 3d 20 75 6e 6c 69 6e 6b 28 7a 46 69 6c 65 6e   = unlink(zFilen
1c390 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72  ame);.#endif.  r
1c3a0 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a  eturn rc;.}.../*
1c3b0 0a 2a 2a 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e  .** The implemen
1c3c0 74 61 74 69 6f 6e 20 6f 66 20 53 51 4c 20 73 63  tation of SQL sc
1c3d0 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 66 6b  alar function fk
1c3e0 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73  ey_collate_claus
1c3f0 65 28 29 2c 20 75 73 65 64 0a 2a 2a 20 62 79 20  e(), used.** by 
1c400 74 68 65 20 22 2e 6c 69 6e 74 20 66 6b 65 79 2d  the ".lint fkey-
1c410 69 6e 64 65 78 65 73 22 20 63 6f 6d 6d 61 6e 64  indexes" command
1c420 2e 20 54 68 69 73 20 73 63 61 6c 61 72 20 66 75  . This scalar fu
1c430 6e 63 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73  nction is always
1c440 0a 2a 2a 20 63 61 6c 6c 65 64 20 77 69 74 68 20  .** called with 
1c450 66 6f 75 72 20 61 72 67 75 6d 65 6e 74 73 20 2d  four arguments -
1c460 20 74 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c   the parent tabl
1c470 65 20 6e 61 6d 65 2c 20 74 68 65 20 70 61 72 65  e name, the pare
1c480 6e 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2c 0a  nt column name,.
1c490 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 74 61 62  ** the child tab
1c4a0 6c 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20  le name and the 
1c4b0 63 68 69 6c 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  child column nam
1c4c0 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 66 6b 65 79 5f  e..**.**   fkey_
1c4d0 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28 27  collate_clause('
1c4e0 70 61 72 65 6e 74 2d 74 61 62 27 2c 20 27 70 61  parent-tab', 'pa
1c4f0 72 65 6e 74 2d 63 6f 6c 27 2c 20 27 63 68 69 6c  rent-col', 'chil
1c500 64 2d 74 61 62 27 2c 20 27 63 68 69 6c 64 2d 63  d-tab', 'child-c
1c510 6f 6c 27 29 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69  ol').**.** If ei
1c520 74 68 65 72 20 6f 66 20 74 68 65 20 6e 61 6d 65  ther of the name
1c530 64 20 74 61 62 6c 65 73 20 6f 72 20 63 6f 6c 75  d tables or colu
1c540 6d 6e 73 20 64 6f 20 6e 6f 74 20 65 78 69 73 74  mns do not exist
1c550 2c 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 0a  , this function.
1c560 2a 2a 20 72 65 74 75 72 6e 73 20 61 6e 20 65 6d  ** returns an em
1c570 70 74 79 20 73 74 72 69 6e 67 2e 20 41 6e 20 65  pty string. An e
1c580 6d 70 74 79 20 73 74 72 69 6e 67 20 69 73 20 61  mpty string is a
1c590 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 69 66 20  lso returned if 
1c5a0 62 6f 74 68 20 74 61 62 6c 65 73 0a 2a 2a 20 61  both tables.** a
1c5b0 6e 64 20 63 6f 6c 75 6d 6e 73 20 65 78 69 73 74  nd columns exist
1c5c0 20 62 75 74 20 68 61 76 65 20 74 68 65 20 73 61   but have the sa
1c5d0 6d 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  me default colla
1c5e0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e 20 4f  tion sequence. O
1c5f0 72 2c 0a 2a 2a 20 69 66 20 62 6f 74 68 20 65 78  r,.** if both ex
1c600 69 73 74 20 62 75 74 20 74 68 65 20 64 65 66 61  ist but the defa
1c610 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
1c620 71 75 65 6e 63 65 73 20 61 72 65 20 64 69 66 66  quences are diff
1c630 65 72 65 6e 74 2c 20 74 68 69 73 0a 2a 2a 20 66  erent, this.** f
1c640 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1c650 74 68 65 20 73 74 72 69 6e 67 20 22 20 43 4f 4c  the string " COL
1c660 4c 41 54 45 20 3c 70 61 72 65 6e 74 2d 63 6f 6c  LATE <parent-col
1c670 6c 61 74 69 6f 6e 3e 22 2c 20 77 68 65 72 65 0a  lation>", where.
1c680 2a 2a 20 3c 70 61 72 65 6e 74 2d 63 6f 6c 6c 61  ** <parent-colla
1c690 74 69 6f 6e 3e 20 69 73 20 74 68 65 20 64 65 66  tion> is the def
1c6a0 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ault collation s
1c6b0 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 70  equence of the p
1c6c0 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f  arent column..*/
1c6d0 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 68 65  .static void she
1c6e0 6c 6c 46 6b 65 79 43 6f 6c 6c 61 74 65 43 6c 61  llFkeyCollateCla
1c6f0 75 73 65 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  use(.  sqlite3_c
1c700 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 0a 20 20  ontext *pCtx,.  
1c710 69 6e 74 20 6e 56 61 6c 2c 0a 20 20 73 71 6c 69  int nVal,.  sqli
1c720 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61  te3_value **apVa
1c730 6c 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  l.){.  sqlite3 *
1c740 64 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e  db = sqlite3_con
1c750 74 65 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28 70  text_db_handle(p
1c760 43 74 78 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68  Ctx);.  const ch
1c770 61 72 20 2a 7a 50 61 72 65 6e 74 3b 0a 20 20 63  ar *zParent;.  c
1c780 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 72 65  onst char *zPare
1c790 6e 74 43 6f 6c 3b 0a 20 20 63 6f 6e 73 74 20 63  ntCol;.  const c
1c7a0 68 61 72 20 2a 7a 50 61 72 65 6e 74 53 65 71 3b  har *zParentSeq;
1c7b0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1c7c0 43 68 69 6c 64 3b 0a 20 20 63 6f 6e 73 74 20 63  Child;.  const c
1c7d0 68 61 72 20 2a 7a 43 68 69 6c 64 43 6f 6c 3b 0a  har *zChildCol;.
1c7e0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
1c7f0 68 69 6c 64 53 65 71 20 3d 20 30 3b 20 20 2f 2a  hildSeq = 0;  /*
1c800 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 6f 20 61   Initialize to a
1c810 76 6f 69 64 20 66 61 6c 73 65 2d 70 6f 73 69 74  void false-posit
1c820 69 76 65 20 77 61 72 6e 69 6e 67 20 2a 2f 0a 20  ive warning */. 
1c830 20 69 6e 74 20 72 63 3b 0a 0a 20 20 61 73 73 65   int rc;..  asse
1c840 72 74 28 20 6e 56 61 6c 3d 3d 34 20 29 3b 0a 20  rt( nVal==4 );. 
1c850 20 7a 50 61 72 65 6e 74 20 3d 20 28 63 6f 6e 73   zParent = (cons
1c860 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
1c870 76 61 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c  value_text(apVal
1c880 5b 30 5d 29 3b 0a 20 20 7a 50 61 72 65 6e 74 43  [0]);.  zParentC
1c890 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  ol = (const char
1c8a0 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
1c8b0 74 65 78 74 28 61 70 56 61 6c 5b 31 5d 29 3b 0a  text(apVal[1]);.
1c8c0 20 20 7a 43 68 69 6c 64 20 3d 20 28 63 6f 6e 73    zChild = (cons
1c8d0 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
1c8e0 76 61 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c  value_text(apVal
1c8f0 5b 32 5d 29 3b 0a 20 20 7a 43 68 69 6c 64 43 6f  [2]);.  zChildCo
1c900 6c 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  l = (const char*
1c910 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
1c920 65 78 74 28 61 70 56 61 6c 5b 33 5d 29 3b 0a 0a  ext(apVal[3]);..
1c930 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
1c940 5f 74 65 78 74 28 70 43 74 78 2c 20 22 22 2c 20  _text(pCtx, "", 
1c950 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  -1, SQLITE_STATI
1c960 43 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  C);.  rc = sqlit
1c970 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f  e3_table_column_
1c980 6d 65 74 61 64 61 74 61 28 0a 20 20 20 20 20 20  metadata(.      
1c990 64 62 2c 20 22 6d 61 69 6e 22 2c 20 7a 50 61 72  db, "main", zPar
1c9a0 65 6e 74 2c 20 7a 50 61 72 65 6e 74 43 6f 6c 2c  ent, zParentCol,
1c9b0 20 30 2c 20 26 7a 50 61 72 65 6e 74 53 65 71 2c   0, &zParentSeq,
1c9c0 20 30 2c 20 30 2c 20 30 0a 20 20 29 3b 0a 20 20   0, 0, 0.  );.  
1c9d0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1c9e0 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
1c9f0 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
1ca00 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20 20  mn_metadata(.   
1ca10 20 20 20 20 20 64 62 2c 20 22 6d 61 69 6e 22 2c       db, "main",
1ca20 20 7a 43 68 69 6c 64 2c 20 7a 43 68 69 6c 64 43   zChild, zChildC
1ca30 6f 6c 2c 20 30 2c 20 26 7a 43 68 69 6c 64 53 65  ol, 0, &zChildSe
1ca40 71 2c 20 30 2c 20 30 2c 20 30 0a 20 20 20 20 29  q, 0, 0, 0.    )
1ca50 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72 63 3d  ;.  }..  if( rc=
1ca60 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 73 71  =SQLITE_OK && sq
1ca70 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 50  lite3_stricmp(zP
1ca80 61 72 65 6e 74 53 65 71 2c 20 7a 43 68 69 6c 64  arentSeq, zChild
1ca90 53 65 71 29 20 29 7b 0a 20 20 20 20 63 68 61 72  Seq) ){.    char
1caa0 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70   *z = sqlite3_mp
1cab0 72 69 6e 74 66 28 22 20 43 4f 4c 4c 41 54 45 20  rintf(" COLLATE 
1cac0 25 73 22 2c 20 7a 50 61 72 65 6e 74 53 65 71 29  %s", zParentSeq)
1cad0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  ;.    sqlite3_re
1cae0 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c 20  sult_text(pCtx, 
1caf0 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52  z, -1, SQLITE_TR
1cb00 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 73 71  ANSIENT);.    sq
1cb10 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20  lite3_free(z);. 
1cb20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65   }.}.../*.** The
1cb30 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1cb40 6f 66 20 64 6f 74 2d 63 6f 6d 6d 61 6e 64 20 22  of dot-command "
1cb50 2e 6c 69 6e 74 20 66 6b 65 79 2d 69 6e 64 65 78  .lint fkey-index
1cb60 65 73 22 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  es"..*/.static i
1cb70 6e 74 20 6c 69 6e 74 46 6b 65 79 49 6e 64 65 78  nt lintFkeyIndex
1cb80 65 73 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65  es(.  ShellState
1cb90 20 2a 70 53 74 61 74 65 2c 20 20 20 20 20 20 20   *pState,       
1cba0 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
1cbb0 20 73 68 65 6c 6c 20 74 6f 6f 6c 20 73 74 61 74   shell tool stat
1cbc0 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
1cbd0 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20  Arg,            
1cbe0 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
1cbf0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  of arguments pas
1cc00 73 65 64 20 74 6f 20 64 6f 74 20 63 6f 6d 6d 61  sed to dot comma
1cc10 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  nd */.  int nArg
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc30 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1cc40 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
1cc50 61 7a 41 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20  azArg[] */.){.  
1cc60 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 53  sqlite3 *db = pS
1cc70 74 61 74 65 2d 3e 64 62 3b 20 20 20 20 20 20 20  tate->db;       
1cc80 2f 2a 20 44 61 74 61 62 61 73 65 20 68 61 6e 64  /* Database hand
1cc90 6c 65 20 74 6f 20 71 75 65 72 79 20 22 6d 61 69  le to query "mai
1cca0 6e 22 20 64 62 20 6f 66 20 2a 2f 0a 20 20 46 49  n" db of */.  FI
1ccb0 4c 45 20 2a 6f 75 74 20 3d 20 70 53 74 61 74 65  LE *out = pState
1ccc0 2d 3e 6f 75 74 3b 20 20 20 20 20 20 20 20 2f 2a  ->out;        /*
1ccd0 20 53 74 72 65 61 6d 20 74 6f 20 77 72 69 74 65   Stream to write
1cce0 20 6e 6f 6e 2d 65 72 72 6f 72 20 6f 75 74 70 75   non-error outpu
1ccf0 74 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 62 56  t to */.  int bV
1cd00 65 72 62 6f 73 65 20 3d 20 30 3b 20 20 20 20 20  erbose = 0;     
1cd10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
1cd20 2d 76 65 72 62 6f 73 65 20 69 73 20 70 72 65 73  -verbose is pres
1cd30 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 62 47 72  ent */.  int bGr
1cd40 6f 75 70 42 79 50 61 72 65 6e 74 20 3d 20 30 3b  oupByParent = 0;
1cd50 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 2d           /* If -
1cd60 67 72 6f 75 70 62 79 70 61 72 65 6e 74 20 69 73  groupbyparent is
1cd70 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 69 6e   present */.  in
1cd80 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cda0 20 54 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f   To iterate thro
1cdb0 75 67 68 20 61 7a 41 72 67 5b 5d 20 2a 2f 0a 20  ugh azArg[] */. 
1cdc0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 6e   const char *zIn
1cdd0 64 65 6e 74 20 3d 20 22 22 3b 20 20 20 20 20 20  dent = "";      
1cde0 20 2f 2a 20 48 6f 77 20 6d 75 63 68 20 74 6f 20   /* How much to 
1cdf0 69 6e 64 65 6e 74 20 43 52 45 41 54 45 20 49 4e  indent CREATE IN
1ce00 44 45 58 20 62 79 20 2a 2f 0a 20 20 69 6e 74 20  DEX by */.  int 
1ce10 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
1ce20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1ce30 65 74 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 20 20  eturn code */.  
1ce40 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
1ce50 71 6c 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ql = 0;         
1ce60 2f 2a 20 43 6f 6d 70 69 6c 65 64 20 76 65 72 73  /* Compiled vers
1ce70 69 6f 6e 20 6f 66 20 53 51 4c 20 73 74 61 74 65  ion of SQL state
1ce80 6d 65 6e 74 20 62 65 6c 6f 77 20 2a 2f 0a 0a 20  ment below */.. 
1ce90 20 2f 2a 0a 20 20 2a 2a 20 54 68 69 73 20 53 45   /*.  ** This SE
1cea0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 72  LECT statement r
1ceb0 65 74 75 72 6e 73 20 6f 6e 65 20 72 6f 77 20 66  eturns one row f
1cec0 6f 72 20 65 61 63 68 20 66 6f 72 65 69 67 6e 20  or each foreign 
1ced0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20  key constraint. 
1cee0 20 2a 2a 20 69 6e 20 74 68 65 20 73 63 68 65 6d   ** in the schem
1cef0 61 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61  a of the main da
1cf00 74 61 62 61 73 65 2e 20 54 68 65 20 63 6f 6c 75  tabase. The colu
1cf10 6d 6e 20 76 61 6c 75 65 73 20 61 72 65 3a 0a 20  mn values are:. 
1cf20 20 2a 2a 0a 20 20 2a 2a 20 30 2e 20 54 68 65 20   **.  ** 0. The 
1cf30 74 65 78 74 20 6f 66 20 61 6e 20 53 51 4c 20 73  text of an SQL s
1cf40 74 61 74 65 6d 65 6e 74 20 73 69 6d 69 6c 61 72  tatement similar
1cf50 20 74 6f 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20   to:.  **.  **  
1cf60 20 20 20 20 22 45 58 50 4c 41 49 4e 20 51 55 45      "EXPLAIN QUE
1cf70 52 59 20 50 4c 41 4e 20 53 45 4c 45 43 54 20 72  RY PLAN SELECT r
1cf80 6f 77 69 64 20 46 52 4f 4d 20 63 68 69 6c 64 5f  owid FROM child_
1cf90 74 61 62 6c 65 20 57 48 45 52 45 20 63 68 69 6c  table WHERE chil
1cfa0 64 5f 6b 65 79 3d 3f 22 0a 20 20 2a 2a 0a 20 20  d_key=?".  **.  
1cfb0 2a 2a 20 20 20 20 54 68 69 73 20 69 73 20 74 68  **    This is th
1cfc0 65 20 73 61 6d 65 20 53 45 4c 45 43 54 20 74 68  e same SELECT th
1cfd0 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  at the foreign k
1cfe0 65 79 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  eys implementati
1cff0 6f 6e 20 6e 65 65 64 73 0a 20 20 2a 2a 20 20 20  on needs.  **   
1d000 20 74 6f 20 72 75 6e 20 69 6e 74 65 72 6e 61 6c   to run internal
1d010 6c 79 20 6f 6e 20 63 68 69 6c 64 20 74 61 62 6c  ly on child tabl
1d020 65 73 2e 20 49 66 20 74 68 65 72 65 20 69 73 20  es. If there is 
1d030 61 6e 20 69 6e 64 65 78 20 74 68 61 74 20 63 61  an index that ca
1d040 6e 0a 20 20 2a 2a 20 20 20 20 62 65 20 75 73 65  n.  **    be use
1d050 64 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 74 68  d to optimize th
1d060 69 73 20 71 75 65 72 79 2c 20 74 68 65 6e 20 69  is query, then i
1d070 74 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73  t can also be us
1d080 65 64 20 62 79 20 74 68 65 20 46 4b 0a 20 20 2a  ed by the FK.  *
1d090 2a 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74  *    implementat
1d0a0 69 6f 6e 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20  ion to optimize 
1d0b0 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
1d0c0 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 20 74   statements on t
1d0d0 68 65 20 70 61 72 65 6e 74 0a 20 20 2a 2a 20 20  he parent.  **  
1d0e0 20 20 74 61 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20    table..  **.  
1d0f0 2a 2a 20 31 2e 20 41 20 47 4c 4f 42 20 70 61 74  ** 1. A GLOB pat
1d100 74 65 72 6e 20 73 75 69 74 61 62 6c 65 20 66 6f  tern suitable fo
1d110 72 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f  r sqlite3_strglo
1d120 62 28 29 2e 20 49 66 20 74 68 65 20 70 6c 61 6e  b(). If the plan
1d130 20 6f 75 74 70 75 74 20 62 79 0a 20 20 2a 2a 20   output by.  ** 
1d140 20 20 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51     the EXPLAIN Q
1d150 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e  UERY PLAN comman
1d160 64 20 6d 61 74 63 68 65 73 20 74 68 69 73 20 70  d matches this p
1d170 61 74 74 65 72 6e 2c 20 74 68 65 6e 20 74 68 65  attern, then the
1d180 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20 20 20 20   schema.  **    
1d190 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e 64 65  contains an inde
1d1a0 78 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  x that can be us
1d1b0 65 64 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 74  ed to optimize t
1d1c0 68 65 20 71 75 65 72 79 2e 0a 20 20 2a 2a 0a 20  he query..  **. 
1d1d0 20 2a 2a 20 32 2e 20 48 75 6d 61 6e 20 72 65 61   ** 2. Human rea
1d1e0 64 61 62 6c 65 20 74 65 78 74 20 74 68 61 74 20  dable text that 
1d1f0 64 65 73 63 72 69 62 65 73 20 74 68 65 20 63 68  describes the ch
1d200 69 6c 64 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  ild table and co
1d210 6c 75 6d 6e 73 2e 20 65 2e 67 2e 0a 20 20 2a 2a  lumns. e.g..  **
1d220 0a 20 20 2a 2a 20 20 20 20 20 20 20 22 63 68 69  .  **       "chi
1d230 6c 64 5f 74 61 62 6c 65 28 63 68 69 6c 64 5f 6b  ld_table(child_k
1d240 65 79 31 2c 20 63 68 69 6c 64 5f 6b 65 79 32 29  ey1, child_key2)
1d250 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 33 2e 20 48  ".  **.  ** 3. H
1d260 75 6d 61 6e 20 72 65 61 64 61 62 6c 65 20 74 65  uman readable te
1d270 78 74 20 74 68 61 74 20 64 65 73 63 72 69 62 65  xt that describe
1d280 73 20 74 68 65 20 70 61 72 65 6e 74 20 74 61 62  s the parent tab
1d290 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 2e 20  le and columns. 
1d2a0 65 2e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  e.g..  **.  **  
1d2b0 20 20 20 20 20 22 70 61 72 65 6e 74 5f 74 61 62       "parent_tab
1d2c0 6c 65 28 70 61 72 65 6e 74 5f 6b 65 79 31 2c 20  le(parent_key1, 
1d2d0 70 61 72 65 6e 74 5f 6b 65 79 32 29 22 0a 20 20  parent_key2)".  
1d2e0 2a 2a 0a 20 20 2a 2a 20 34 2e 20 41 20 66 75 6c  **.  ** 4. A ful
1d2f0 6c 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  l CREATE INDEX s
1d300 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 61 6e 20  tatement for an 
1d310 69 6e 64 65 78 20 74 68 61 74 20 63 6f 75 6c 64  index that could
1d320 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20 2a 2a   be used to.  **
1d330 20 20 20 20 6f 70 74 69 6d 69 7a 65 20 44 45 4c      optimize DEL
1d340 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
1d350 61 74 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20  atements on the 
1d360 70 61 72 65 6e 74 20 74 61 62 6c 65 2e 20 65 2e  parent table. e.
1d370 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20  g..  **.  **    
1d380 20 20 20 22 43 52 45 41 54 45 20 49 4e 44 45 58     "CREATE INDEX
1d390 20 63 68 69 6c 64 5f 74 61 62 6c 65 5f 63 68 69   child_table_chi
1d3a0 6c 64 5f 6b 65 79 20 4f 4e 20 63 68 69 6c 64 5f  ld_key ON child_
1d3b0 74 61 62 6c 65 28 63 68 69 6c 64 5f 6b 65 79 29  table(child_key)
1d3c0 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 35 2e 20 54  ".  **.  ** 5. T
1d3d0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70  he name of the p
1d3e0 61 72 65 6e 74 20 74 61 62 6c 65 2e 0a 20 20 2a  arent table..  *
1d3f0 2a 0a 20 20 2a 2a 20 54 68 65 73 65 20 73 69 78  *.  ** These six
1d400 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
1d410 20 62 79 20 74 68 65 20 43 20 6c 6f 67 69 63 20   by the C logic 
1d420 62 65 6c 6f 77 20 74 6f 20 67 65 6e 65 72 61 74  below to generat
1d430 65 20 74 68 65 20 72 65 70 6f 72 74 2e 0a 20 20  e the report..  
1d440 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1d450 2a 7a 53 71 6c 20 3d 0a 20 20 22 53 45 4c 45 43  *zSql =.  "SELEC
1d460 54 20 22 0a 20 20 20 20 22 20 20 20 20 20 27 45  T ".    "     'E
1d470 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
1d480 4e 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46  N SELECT rowid F
1d490 52 4f 4d 20 27 20 7c 7c 20 71 75 6f 74 65 28 73  ROM ' || quote(s
1d4a0 2e 6e 61 6d 65 29 20 7c 7c 20 27 20 57 48 45 52  .name) || ' WHER
1d4b0 45 20 27 22 0a 20 20 20 20 22 20 20 7c 7c 20 67  E '".    "  || g
1d4c0 72 6f 75 70 5f 63 6f 6e 63 61 74 28 71 75 6f 74  roup_concat(quot
1d4d0 65 28 73 2e 6e 61 6d 65 29 20 7c 7c 20 27 2e 27  e(s.name) || '.'
1d4e0 20 7c 7c 20 71 75 6f 74 65 28 66 2e 5b 66 72 6f   || quote(f.[fro
1d4f0 6d 5d 29 20 7c 7c 20 27 3d 3f 27 20 22 0a 20 20  m]) || '=?' ".  
1d500 20 20 22 20 20 7c 7c 20 66 6b 65 79 5f 63 6f 6c    "  || fkey_col
1d510 6c 61 74 65 5f 63 6c 61 75 73 65 28 22 0a 20 20  late_clause(".  
1d520 20 20 22 20 20 20 20 20 20 20 66 2e 5b 74 61 62    "       f.[tab
1d530 6c 65 5d 2c 20 43 4f 41 4c 45 53 43 45 28 66 2e  le], COALESCE(f.
1d540 5b 74 6f 5d 2c 20 70 2e 5b 6e 61 6d 65 5d 29 2c  [to], p.[name]),
1d550 20 73 2e 6e 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d   s.name, f.[from
1d560 5d 29 2c 27 20 41 4e 44 20 27 29 22 0a 20 20 20  ]),' AND ')".   
1d570 20 22 2c 20 22 0a 20 20 20 20 22 20 20 20 20 20   ", ".    "     
1d580 27 53 45 41 52 43 48 20 54 41 42 4c 45 20 27 20  'SEARCH TABLE ' 
1d590 7c 7c 20 73 2e 6e 61 6d 65 20 7c 7c 20 27 20 55  || s.name || ' U
1d5a0 53 49 4e 47 20 43 4f 56 45 52 49 4e 47 20 49 4e  SING COVERING IN
1d5b0 44 45 58 2a 28 27 22 0a 20 20 20 20 22 20 20 7c  DEX*('".    "  |
1d5c0 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 27  | group_concat('
1d5d0 2a 3d 3f 27 2c 20 27 20 41 4e 44 20 27 29 20 7c  *=?', ' AND ') |
1d5e0 7c 20 27 29 27 22 0a 20 20 20 20 22 2c 20 22 0a  | ')'".    ", ".
1d5f0 20 20 20 20 22 20 20 20 20 20 73 2e 6e 61 6d 65      "     s.name
1d600 20 20 7c 7c 20 27 28 27 20 7c 7c 20 67 72 6f 75    || '(' || grou
1d610 70 5f 63 6f 6e 63 61 74 28 66 2e 5b 66 72 6f 6d  p_concat(f.[from
1d620 5d 2c 20 20 27 2c 20 27 29 20 7c 7c 20 27 29 27  ],  ', ') || ')'
1d630 22 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20 22  ".    ", ".    "
1d640 20 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 20 7c       f.[table] |
1d650 7c 20 27 28 27 20 7c 7c 20 67 72 6f 75 70 5f 63  | '(' || group_c
1d660 6f 6e 63 61 74 28 43 4f 41 4c 45 53 43 45 28 66  oncat(COALESCE(f
1d670 2e 5b 74 6f 5d 2c 20 70 2e 5b 6e 61 6d 65 5d 29  .[to], p.[name])
1d680 29 20 7c 7c 20 27 29 27 22 0a 20 20 20 20 22 2c  ) || ')'".    ",
1d690 20 22 0a 20 20 20 20 22 20 20 20 20 20 27 43 52   ".    "     'CR
1d6a0 45 41 54 45 20 49 4e 44 45 58 20 27 20 7c 7c 20  EATE INDEX ' || 
1d6b0 71 75 6f 74 65 28 73 2e 6e 61 6d 65 20 7c 7c 27  quote(s.name ||'
1d6c0 5f 27 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61  _'|| group_conca
1d6d0 74 28 66 2e 5b 66 72 6f 6d 5d 2c 20 27 5f 27 29  t(f.[from], '_')
1d6e0 29 22 0a 20 20 20 20 22 20 20 7c 7c 20 27 20 4f  )".    "  || ' O
1d6f0 4e 20 27 20 7c 7c 20 71 75 6f 74 65 28 73 2e 6e  N ' || quote(s.n
1d700 61 6d 65 29 20 7c 7c 20 27 28 27 22 0a 20 20 20  ame) || '('".   
1d710 20 22 20 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e   "  || group_con
1d720 63 61 74 28 71 75 6f 74 65 28 66 2e 5b 66 72 6f  cat(quote(f.[fro
1d730 6d 5d 29 20 7c 7c 22 0a 20 20 20 20 22 20 20 20  m]) ||".    "   
1d740 20 20 20 20 20 66 6b 65 79 5f 63 6f 6c 6c 61 74       fkey_collat
1d750 65 5f 63 6c 61 75 73 65 28 22 0a 20 20 20 20 22  e_clause(".    "
1d760 20 20 20 20 20 20 20 20 20 20 66 2e 5b 74 61 62            f.[tab
1d770 6c 65 5d 2c 20 43 4f 41 4c 45 53 43 45 28 66 2e  le], COALESCE(f.
1d780 5b 74 6f 5d 2c 20 70 2e 5b 6e 61 6d 65 5d 29 2c  [to], p.[name]),
1d790 20 73 2e 6e 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d   s.name, f.[from
1d7a0 5d 29 2c 20 27 2c 20 27 29 22 0a 20 20 20 20 22  ]), ', ')".    "
1d7b0 20 20 7c 7c 20 27 29 3b 27 22 0a 20 20 20 20 22    || ');'".    "
1d7c0 2c 20 22 0a 20 20 20 20 22 20 20 20 20 20 66 2e  , ".    "     f.
1d7d0 5b 74 61 62 6c 65 5d 20 22 0a 20 20 20 20 22 46  [table] ".    "F
1d7e0 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1d7f0 72 20 41 53 20 73 2c 20 70 72 61 67 6d 61 5f 66  r AS s, pragma_f
1d800 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28  oreign_key_list(
1d810 73 2e 6e 61 6d 65 29 20 41 53 20 66 20 22 0a 20  s.name) AS f ". 
1d820 20 20 20 22 4c 45 46 54 20 4a 4f 49 4e 20 70 72     "LEFT JOIN pr
1d830 61 67 6d 61 5f 74 61 62 6c 65 5f 69 6e 66 6f 20  agma_table_info 
1d840 41 53 20 70 20 4f 4e 20 28 70 6b 2d 31 3d 73 65  AS p ON (pk-1=se
1d850 71 20 41 4e 44 20 70 2e 61 72 67 3d 66 2e 5b 74  q AND p.arg=f.[t
1d860 61 62 6c 65 5d 29 20 22 0a 20 20 20 20 22 47 52  able]) ".    "GR
1d870 4f 55 50 20 42 59 20 73 2e 6e 61 6d 65 2c 20 66  OUP BY s.name, f
1d880 2e 69 64 20 22 0a 20 20 20 20 22 4f 52 44 45 52  .id ".    "ORDER
1d890 20 42 59 20 28 43 41 53 45 20 57 48 45 4e 20 3f   BY (CASE WHEN ?
1d8a0 20 54 48 45 4e 20 66 2e 5b 74 61 62 6c 65 5d 20   THEN f.[table] 
1d8b0 45 4c 53 45 20 73 2e 6e 61 6d 65 20 45 4e 44 29  ELSE s.name END)
1d8c0 22 0a 20 20 3b 0a 20 20 63 6f 6e 73 74 20 63 68  ".  ;.  const ch
1d8d0 61 72 20 2a 7a 47 6c 6f 62 49 50 4b 20 3d 20 22  ar *zGlobIPK = "
1d8e0 53 45 41 52 43 48 20 54 41 42 4c 45 20 2a 20 55  SEARCH TABLE * U
1d8f0 53 49 4e 47 20 49 4e 54 45 47 45 52 20 50 52 49  SING INTEGER PRI
1d900 4d 41 52 59 20 4b 45 59 20 28 72 6f 77 69 64 3d  MARY KEY (rowid=
1d910 3f 29 22 3b 0a 0a 20 20 66 6f 72 28 69 3d 32 3b  ?)";..  for(i=2;
1d920 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
1d930 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29     int n = (int)
1d940 73 74 72 6c 65 6e 28 61 7a 41 72 67 5b 69 5d 29  strlen(azArg[i])
1d950 3b 0a 20 20 20 20 69 66 28 20 6e 3e 31 20 26 26  ;.    if( n>1 &&
1d960 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
1d970 70 28 22 2d 76 65 72 62 6f 73 65 22 2c 20 61 7a  p("-verbose", az
1d980 41 72 67 5b 69 5d 2c 20 6e 29 3d 3d 30 20 29 7b  Arg[i], n)==0 ){
1d990 0a 20 20 20 20 20 20 62 56 65 72 62 6f 73 65 20  .      bVerbose 
1d9a0 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65  = 1;.    }.    e
1d9b0 6c 73 65 20 69 66 28 20 6e 3e 31 20 26 26 20 73  lse if( n>1 && s
1d9c0 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28  qlite3_strnicmp(
1d9d0 22 2d 67 72 6f 75 70 62 79 70 61 72 65 6e 74 22  "-groupbyparent"
1d9e0 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 6e 29 3d 3d  , azArg[i], n)==
1d9f0 30 20 29 7b 0a 20 20 20 20 20 20 62 47 72 6f 75  0 ){.      bGrou
1da00 70 42 79 50 61 72 65 6e 74 20 3d 20 31 3b 0a 20  pByParent = 1;. 
1da10 20 20 20 20 20 7a 49 6e 64 65 6e 74 20 3d 20 22       zIndent = "
1da20 20 20 20 20 22 3b 0a 20 20 20 20 7d 0a 20 20 20      ";.    }.   
1da30 20 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77   else{.      raw
1da40 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1da50 22 55 73 61 67 65 3a 20 25 73 20 25 73 20 3f 2d  "Usage: %s %s ?-
1da60 76 65 72 62 6f 73 65 3f 20 3f 2d 67 72 6f 75 70  verbose? ?-group
1da70 62 79 70 61 72 65 6e 74 3f 5c 6e 22 2c 0a 20 20  byparent?\n",.  
1da80 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b 30 5d          azArg[0]
1da90 2c 20 61 7a 41 72 67 5b 31 5d 0a 20 20 20 20 20  , azArg[1].     
1daa0 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   );.      return
1dab0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
1dac0 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52     }.  }..  /* R
1dad0 65 67 69 73 74 65 72 20 74 68 65 20 66 6b 65 79  egister the fkey
1dae0 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28  _collate_clause(
1daf0 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 2a  ) SQL function *
1db00 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
1db10 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
1db20 28 64 62 2c 20 22 66 6b 65 79 5f 63 6f 6c 6c 61  (db, "fkey_colla
1db30 74 65 5f 63 6c 61 75 73 65 22 2c 20 34 2c 20 53  te_clause", 4, S
1db40 51 4c 49 54 45 5f 55 54 46 38 2c 0a 20 20 20 20  QLITE_UTF8,.    
1db50 20 20 30 2c 20 73 68 65 6c 6c 46 6b 65 79 43 6f    0, shellFkeyCo
1db60 6c 6c 61 74 65 43 6c 61 75 73 65 2c 20 30 2c 20  llateClause, 0, 
1db70 30 0a 20 20 29 3b 0a 0a 0a 20 20 69 66 28 20 72  0.  );...  if( r
1db80 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1db90 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1dba0 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20  _prepare_v2(db, 
1dbb0 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 71 6c 2c  zSql, -1, &pSql,
1dbc0 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   0);.  }.  if( r
1dbd0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1dbe0 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
1dbf0 5f 69 6e 74 28 70 53 71 6c 2c 20 31 2c 20 62 47  _int(pSql, 1, bG
1dc00 72 6f 75 70 42 79 50 61 72 65 6e 74 29 3b 0a 20  roupByParent);. 
1dc10 20 7d 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   }..  if( rc==SQ
1dc20 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69  LITE_OK ){.    i
1dc30 6e 74 20 72 63 32 3b 0a 20 20 20 20 63 68 61 72  nt rc2;.    char
1dc40 20 2a 7a 50 72 65 76 20 3d 20 30 3b 0a 20 20 20   *zPrev = 0;.   
1dc50 20 77 68 69 6c 65 28 20 53 51 4c 49 54 45 5f 52   while( SQLITE_R
1dc60 4f 57 3d 3d 73 71 6c 69 74 65 33 5f 73 74 65 70  OW==sqlite3_step
1dc70 28 70 53 71 6c 29 20 29 7b 0a 20 20 20 20 20 20  (pSql) ){.      
1dc80 69 6e 74 20 72 65 73 20 3d 20 2d 31 3b 0a 20 20  int res = -1;.  
1dc90 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
1dca0 20 2a 70 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a   *pExplain = 0;.
1dcb0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
1dcc0 20 2a 7a 45 51 50 20 3d 20 28 63 6f 6e 73 74 20   *zEQP = (const 
1dcd0 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
1dce0 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20  lumn_text(pSql, 
1dcf0 30 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  0);.      const 
1dd00 63 68 61 72 20 2a 7a 47 6c 6f 62 20 3d 20 28 63  char *zGlob = (c
1dd10 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
1dd20 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
1dd30 53 71 6c 2c 20 31 29 3b 0a 20 20 20 20 20 20 63  Sql, 1);.      c
1dd40 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 72 6f 6d  onst char *zFrom
1dd50 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
1dd60 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
1dd70 65 78 74 28 70 53 71 6c 2c 20 32 29 3b 0a 20 20  ext(pSql, 2);.  
1dd80 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1dd90 7a 54 61 72 67 65 74 20 3d 20 28 63 6f 6e 73 74  zTarget = (const
1dda0 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
1ddb0 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c  olumn_text(pSql,
1ddc0 20 33 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74   3);.      const
1ddd0 20 63 68 61 72 20 2a 7a 43 49 20 3d 20 28 63 6f   char *zCI = (co
1dde0 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
1ddf0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
1de00 71 6c 2c 20 34 29 3b 0a 20 20 20 20 20 20 63 6f  ql, 4);.      co
1de10 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 72 65 6e  nst char *zParen
1de20 74 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  t = (const char*
1de30 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
1de40 74 65 78 74 28 70 53 71 6c 2c 20 35 29 3b 0a 0a  text(pSql, 5);..
1de50 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1de60 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62  e3_prepare_v2(db
1de70 2c 20 7a 45 51 50 2c 20 2d 31 2c 20 26 70 45 78  , zEQP, -1, &pEx
1de80 70 6c 61 69 6e 2c 20 30 29 3b 0a 20 20 20 20 20  plain, 0);.     
1de90 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1dea0 4f 4b 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  OK ) break;.    
1deb0 20 20 69 66 28 20 53 51 4c 49 54 45 5f 52 4f 57    if( SQLITE_ROW
1dec0 3d 3d 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ==sqlite3_step(p
1ded0 45 78 70 6c 61 69 6e 29 20 29 7b 0a 20 20 20 20  Explain) ){.    
1dee0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1def0 7a 50 6c 61 6e 20 3d 20 28 63 6f 6e 73 74 20 63  zPlan = (const c
1df00 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
1df10 75 6d 6e 5f 74 65 78 74 28 70 45 78 70 6c 61 69  umn_text(pExplai
1df20 6e 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 72  n, 3);.        r
1df30 65 73 20 3d 20 28 0a 20 20 20 20 20 20 20 20 20  es = (.         
1df40 20 20 20 20 20 30 3d 3d 73 71 6c 69 74 65 33 5f       0==sqlite3_
1df50 73 74 72 67 6c 6f 62 28 7a 47 6c 6f 62 2c 20 7a  strglob(zGlob, z
1df60 50 6c 61 6e 29 0a 20 20 20 20 20 20 20 20 20 20  Plan).          
1df70 20 7c 7c 20 30 3d 3d 73 71 6c 69 74 65 33 5f 73   || 0==sqlite3_s
1df80 74 72 67 6c 6f 62 28 7a 47 6c 6f 62 49 50 4b 2c  trglob(zGlobIPK,
1df90 20 7a 50 6c 61 6e 29 0a 20 20 20 20 20 20 20 20   zPlan).        
1dfa0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1dfb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69   rc = sqlite3_fi
1dfc0 6e 61 6c 69 7a 65 28 70 45 78 70 6c 61 69 6e 29  nalize(pExplain)
1dfd0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1dfe0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 62 72 65 61  SQLITE_OK ) brea
1dff0 6b 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 72 65  k;..      if( re
1e000 73 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  s<0 ){.        r
1e010 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1e020 2c 20 22 45 72 72 6f 72 3a 20 69 6e 74 65 72 6e  , "Error: intern
1e030 61 6c 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20  al error");.    
1e040 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1e050 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1e060 69 66 28 20 62 47 72 6f 75 70 42 79 50 61 72 65  if( bGroupByPare
1e070 6e 74 0a 20 20 20 20 20 20 20 20 26 26 20 28 62  nt.        && (b
1e080 56 65 72 62 6f 73 65 20 7c 7c 20 72 65 73 3d 3d  Verbose || res==
1e090 30 29 0a 20 20 20 20 20 20 20 20 26 26 20 28 7a  0).        && (z
1e0a0 50 72 65 76 3d 3d 30 20 7c 7c 20 73 71 6c 69 74  Prev==0 || sqlit
1e0b0 65 33 5f 73 74 72 69 63 6d 70 28 7a 50 61 72 65  e3_stricmp(zPare
1e0c0 6e 74 2c 20 7a 50 72 65 76 29 29 0a 20 20 20 20  nt, zPrev)).    
1e0d0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20      ){.         
1e0e0 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
1e0f0 20 22 2d 2d 20 50 61 72 65 6e 74 20 74 61 62 6c   "-- Parent tabl
1e100 65 20 25 73 5c 6e 22 2c 20 7a 50 61 72 65 6e 74  e %s\n", zParent
1e110 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
1e120 69 74 65 33 5f 66 72 65 65 28 7a 50 72 65 76 29  ite3_free(zPrev)
1e130 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 50 72 65  ;.          zPre
1e140 76 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  v = sqlite3_mpri
1e150 6e 74 66 28 22 25 73 22 2c 20 7a 50 61 72 65 6e  ntf("%s", zParen
1e160 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20  t);.        }.. 
1e170 20 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d         if( res==
1e180 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  0 ){.          r
1e190 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
1e1a0 25 73 25 73 20 2d 2d 3e 20 25 73 5c 6e 22 2c 20  %s%s --> %s\n", 
1e1b0 7a 49 6e 64 65 6e 74 2c 20 7a 43 49 2c 20 7a 54  zIndent, zCI, zT
1e1c0 61 72 67 65 74 29 3b 0a 20 20 20 20 20 20 20 20  arget);.        
1e1d0 7d 65 6c 73 65 20 69 66 28 20 62 56 65 72 62 6f  }else if( bVerbo
1e1e0 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  se ){.          
1e1f0 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  raw_printf(out, 
1e200 22 25 73 2f 2a 20 6e 6f 20 65 78 74 72 61 20 69  "%s/* no extra i
1e210 6e 64 65 78 65 73 20 72 65 71 75 69 72 65 64 20  ndexes required 
1e220 66 6f 72 20 25 73 20 2d 3e 20 25 73 20 2a 2f 5c  for %s -> %s */\
1e230 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
1e240 20 20 7a 49 6e 64 65 6e 74 2c 20 7a 46 72 6f 6d    zIndent, zFrom
1e250 2c 20 7a 54 61 72 67 65 74 0a 20 20 20 20 20 20  , zTarget.      
1e260 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20 7d      );.        }
1e270 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1e280 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
1e290 7a 50 72 65 76 29 3b 0a 0a 20 20 20 20 69 66 28  zPrev);..    if(
1e2a0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1e2b0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
1e2c0 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 5c 6e  tf(stderr, "%s\n
1e2d0 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
1e2e0 67 28 64 62 29 29 3b 0a 20 20 20 20 7d 0a 0a 20  g(db));.    }.. 
1e2f0 20 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33     rc2 = sqlite3
1e300 5f 66 69 6e 61 6c 69 7a 65 28 70 53 71 6c 29 3b  _finalize(pSql);
1e310 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
1e320 49 54 45 5f 4f 4b 20 26 26 20 72 63 32 21 3d 53  ITE_OK && rc2!=S
1e330 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1e340 20 20 72 63 20 3d 20 72 63 32 3b 0a 20 20 20 20    rc = rc2;.    
1e350 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
1e360 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73 71 6c  err, "%s\n", sql
1e370 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29  ite3_errmsg(db))
1e380 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1e390 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
1e3a0 73 74 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20  stderr, "%s\n", 
1e3b0 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64  sqlite3_errmsg(d
1e3c0 62 29 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  b));.  }..  retu
1e3d0 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
1e3e0 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  Implementation o
1e3f0 66 20 22 2e 6c 69 6e 74 22 20 64 6f 74 20 63 6f  f ".lint" dot co
1e400 6d 6d 61 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  mmand..*/.static
1e410 20 69 6e 74 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d   int lintDotComm
1e420 61 6e 64 28 0a 20 20 53 68 65 6c 6c 53 74 61 74  and(.  ShellStat
1e430 65 20 2a 70 53 74 61 74 65 2c 20 20 20 20 20 20  e *pState,      
1e440 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
1e450 74 20 73 68 65 6c 6c 20 74 6f 6f 6c 20 73 74 61  t shell tool sta
1e460 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  te */.  char **a
1e470 7a 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20  zArg,           
1e480 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
1e490 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
1e4a0 73 73 65 64 20 74 6f 20 64 6f 74 20 63 6f 6d 6d  ssed to dot comm
1e4b0 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72  and */.  int nAr
1e4c0 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g               
1e4d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1e4e0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
1e4f0 20 61 7a 41 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20   azArg[] */.){. 
1e500 20 69 6e 74 20 6e 3b 0a 20 20 6e 20 3d 20 28 6e   int n;.  n = (n
1e510 41 72 67 3e 3d 32 20 3f 20 28 69 6e 74 29 73 74  Arg>=2 ? (int)st
1e520 72 6c 65 6e 28 61 7a 41 72 67 5b 31 5d 29 20 3a  rlen(azArg[1]) :
1e530 20 30 29 3b 0a 20 20 69 66 28 20 6e 3c 31 20 7c   0);.  if( n<1 |
1e540 7c 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  | sqlite3_strnic
1e550 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20 22 66 6b  mp(azArg[1], "fk
1e560 65 79 2d 69 6e 64 65 78 65 73 22 2c 20 6e 29 20  ey-indexes", n) 
1e570 29 20 67 6f 74 6f 20 75 73 61 67 65 3b 0a 20 20  ) goto usage;.  
1e580 72 65 74 75 72 6e 20 6c 69 6e 74 46 6b 65 79 49  return lintFkeyI
1e590 6e 64 65 78 65 73 28 70 53 74 61 74 65 2c 20 61  ndexes(pState, a
1e5a0 7a 41 72 67 2c 20 6e 41 72 67 29 3b 0a 0a 20 75  zArg, nArg);.. u
1e5b0 73 61 67 65 3a 0a 20 20 72 61 77 5f 70 72 69 6e  sage:.  raw_prin
1e5c0 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
1e5d0 65 20 25 73 20 73 75 62 2d 63 6f 6d 6d 61 6e 64  e %s sub-command
1e5e0 20 3f 73 77 69 74 63 68 65 73 2e 2e 2e 3f 5c 6e   ?switches...?\n
1e5f0 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20  ", azArg[0]);.  
1e600 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
1e610 72 2c 20 22 57 68 65 72 65 20 73 75 62 2d 63 6f  r, "Where sub-co
1e620 6d 6d 61 6e 64 73 20 61 72 65 3a 5c 6e 22 29 3b  mmands are:\n");
1e630 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74  .  raw_printf(st
1e640 64 65 72 72 2c 20 22 20 20 20 20 66 6b 65 79 2d  derr, "    fkey-
1e650 69 6e 64 65 78 65 73 5c 6e 22 29 3b 0a 20 20 72  indexes\n");.  r
1e660 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
1e670 4f 52 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 49 66  OR;.}.../*.** If
1e680 20 61 6e 20 69 6e 70 75 74 20 6c 69 6e 65 20 62   an input line b
1e690 65 67 69 6e 73 20 77 69 74 68 20 22 2e 22 20 74  egins with "." t
1e6a0 68 65 6e 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  hen invoke this 
1e6b0 72 6f 75 74 69 6e 65 20 74 6f 0a 2a 2a 20 70 72  routine to.** pr
1e6c0 6f 63 65 73 73 20 74 68 61 74 20 6c 69 6e 65 2e  ocess that line.
1e6d0 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20  .**.** Return 1 
1e6e0 6f 6e 20 65 72 72 6f 72 2c 20 32 20 74 6f 20 65  on error, 2 to e
1e6f0 78 69 74 2c 20 61 6e 64 20 30 20 6f 74 68 65 72  xit, and 0 other
1e700 77 69 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  wise..*/.static 
1e710 69 6e 74 20 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d  int do_meta_comm
1e720 61 6e 64 28 63 68 61 72 20 2a 7a 4c 69 6e 65 2c  and(char *zLine,
1e730 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b   ShellState *p){
1e740 0a 20 20 69 6e 74 20 68 20 3d 20 31 3b 0a 20 20  .  int h = 1;.  
1e750 69 6e 74 20 6e 41 72 67 20 3d 20 30 3b 0a 20 20  int nArg = 0;.  
1e760 69 6e 74 20 6e 2c 20 63 3b 0a 20 20 69 6e 74 20  int n, c;.  int 
1e770 72 63 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a  rc = 0;.  char *
1e780 61 7a 41 72 67 5b 35 30 5d 3b 0a 0a 20 20 2f 2a  azArg[50];..  /*
1e790 20 50 61 72 73 65 20 74 68 65 20 69 6e 70 75 74   Parse the input
1e7a0 20 6c 69 6e 65 20 69 6e 74 6f 20 74 6f 6b 65 6e   line into token
1e7b0 73 2e 0a 20 20 2a 2f 0a 20 20 77 68 69 6c 65 28  s..  */.  while(
1e7c0 20 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 6e 41 72   zLine[h] && nAr
1e7d0 67 3c 41 72 72 61 79 53 69 7a 65 28 61 7a 41 72  g<ArraySize(azAr
1e7e0 67 29 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28  g) ){.    while(
1e7f0 20 49 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 68   IsSpace(zLine[h
1e800 5d 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20  ]) ){ h++; }.   
1e810 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 30   if( zLine[h]==0
1e820 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 69 66   ) break;.    if
1e830 28 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 5c 27 27  ( zLine[h]=='\''
1e840 20 7c 7c 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 22   || zLine[h]=='"
1e850 27 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 64  ' ){.      int d
1e860 65 6c 69 6d 20 3d 20 7a 4c 69 6e 65 5b 68 2b 2b  elim = zLine[h++
1e870 5d 3b 0a 20 20 20 20 20 20 61 7a 41 72 67 5b 6e  ];.      azArg[n
1e880 41 72 67 2b 2b 5d 20 3d 20 26 7a 4c 69 6e 65 5b  Arg++] = &zLine[
1e890 68 5d 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28  h];.      while(
1e8a0 20 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 7a 4c 69   zLine[h] && zLi
1e8b0 6e 65 5b 68 5d 21 3d 64 65 6c 69 6d 20 29 7b 0a  ne[h]!=delim ){.
1e8c0 20 20 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e          if( zLin
1e8d0 65 5b 68 5d 3d 3d 27 5c 5c 27 20 26 26 20 64 65  e[h]=='\\' && de
1e8e0 6c 69 6d 3d 3d 27 22 27 20 26 26 20 7a 4c 69 6e  lim=='"' && zLin
1e8f0 65 5b 68 2b 31 5d 21 3d 30 20 29 20 68 2b 2b 3b  e[h+1]!=0 ) h++;
1e900 0a 20 20 20 20 20 20 20 20 68 2b 2b 3b 0a 20 20  .        h++;.  
1e910 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
1e920 7a 4c 69 6e 65 5b 68 5d 3d 3d 64 65 6c 69 6d 20  zLine[h]==delim 
1e930 29 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e 65  ){.        zLine
1e940 5b 68 2b 2b 5d 20 3d 20 30 3b 0a 20 20 20 20 20  [h++] = 0;.     
1e950 20 7d 0a 20 20 20 20 20 20 69 66 28 20 64 65 6c   }.      if( del
1e960 69 6d 3d 3d 27 22 27 20 29 20 72 65 73 6f 6c 76  im=='"' ) resolv
1e970 65 5f 62 61 63 6b 73 6c 61 73 68 65 73 28 61 7a  e_backslashes(az
1e980 41 72 67 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20 20  Arg[nArg-1]);.  
1e990 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
1e9a0 7a 41 72 67 5b 6e 41 72 67 2b 2b 5d 20 3d 20 26  zArg[nArg++] = &
1e9b0 7a 4c 69 6e 65 5b 68 5d 3b 0a 20 20 20 20 20 20  zLine[h];.      
1e9c0 77 68 69 6c 65 28 20 7a 4c 69 6e 65 5b 68 5d 20  while( zLine[h] 
1e9d0 26 26 20 21 49 73 53 70 61 63 65 28 7a 4c 69 6e  && !IsSpace(zLin
1e9e0 65 5b 68 5d 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a  e[h]) ){ h++; }.
1e9f0 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b        if( zLine[
1ea00 68 5d 20 29 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 20  h] ) zLine[h++] 
1ea10 3d 20 30 3b 0a 20 20 20 20 20 20 72 65 73 6f 6c  = 0;.      resol
1ea20 76 65 5f 62 61 63 6b 73 6c 61 73 68 65 73 28 61  ve_backslashes(a
1ea30 7a 41 72 67 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20  zArg[nArg-1]);. 
1ea40 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50     }.  }..  /* P
1ea50 72 6f 63 65 73 73 20 74 68 65 20 69 6e 70 75 74  rocess the input
1ea60 20 6c 69 6e 65 2e 0a 20 20 2a 2f 0a 20 20 69 66   line..  */.  if
1ea70 28 20 6e 41 72 67 3d 3d 30 20 29 20 72 65 74 75  ( nArg==0 ) retu
1ea80 72 6e 20 30 3b 20 2f 2a 20 6e 6f 20 74 6f 6b 65  rn 0; /* no toke
1ea90 6e 73 2c 20 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a  ns, no error */.
1eaa0 20 20 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 61    n = strlen30(a
1eab0 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 63 20 3d 20  zArg[0]);.  c = 
1eac0 61 7a 41 72 67 5b 30 5d 5b 30 5d 3b 0a 0a 23 69  azArg[0][0];..#i
1ead0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1eae0 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
1eaf0 20 20 69 66 28 20 63 3d 3d 27 61 27 20 26 26 20    if( c=='a' && 
1eb00 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
1eb10 2c 20 22 61 75 74 68 22 2c 20 6e 29 3d 3d 30 20  , "auth", n)==0 
1eb20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21  ){.    if( nArg!
1eb30 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  =2 ){.      raw_
1eb40 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1eb50 55 73 61 67 65 3a 20 2e 61 75 74 68 20 4f 4e 7c  Usage: .auth ON|
1eb60 4f 46 46 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  OFF\n");.      r
1eb70 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74  c = 1;.      got
1eb80 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
1eb90 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f  xit;.    }.    o
1eba0 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20  pen_db(p, 0);.  
1ebb0 20 20 69 66 28 20 62 6f 6f 6c 65 61 6e 56 61 6c    if( booleanVal
1ebc0 75 65 28 61 7a 41 72 67 5b 31 5d 29 20 29 7b 0a  ue(azArg[1]) ){.
1ebd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65        sqlite3_se
1ebe0 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 70 2d 3e  t_authorizer(p->
1ebf0 64 62 2c 20 73 68 65 6c 6c 41 75 74 68 2c 20 70  db, shellAuth, p
1ec00 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1ec10 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 74 5f      sqlite3_set_
1ec20 61 75 74 68 6f 72 69 7a 65 72 28 70 2d 3e 64 62  authorizer(p->db
1ec30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  , 0, 0);.    }. 
1ec40 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
1ec50 20 69 66 28 20 28 63 3d 3d 27 62 27 20 26 26 20   if( (c=='b' && 
1ec60 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28  n>=3 && strncmp(
1ec70 61 7a 41 72 67 5b 30 5d 2c 20 22 62 61 63 6b 75  azArg[0], "backu
1ec80 70 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 20 7c 7c  p", n)==0).   ||
1ec90 20 28 63 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 33   (c=='s' && n>=3
1eca0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
1ecb0 67 5b 30 5d 2c 20 22 73 61 76 65 22 2c 20 6e 29  g[0], "save", n)
1ecc0 3d 3d 30 29 0a 20 20 29 7b 0a 20 20 20 20 63 6f  ==0).  ){.    co
1ecd0 6e 73 74 20 63 68 61 72 20 2a 7a 44 65 73 74 46  nst char *zDestF
1ece0 69 6c 65 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e  ile = 0;.    con
1ecf0 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30  st char *zDb = 0
1ed00 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a 70  ;.    sqlite3 *p
1ed10 44 65 73 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  Dest;.    sqlite
1ed20 33 5f 62 61 63 6b 75 70 20 2a 70 42 61 63 6b 75  3_backup *pBacku
1ed30 70 3b 0a 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20  p;.    int j;.  
1ed40 20 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e 41 72    for(j=1; j<nAr
1ed50 67 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 63  g; j++){.      c
1ed60 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 61  onst char *z = a
1ed70 7a 41 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 69  zArg[j];.      i
1ed80 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a  f( z[0]=='-' ){.
1ed90 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a          while( z
1eda0 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a  [0]=='-' ) z++;.
1edb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 20 6f 70          /* No op
1edc0 74 69 6f 6e 73 20 74 6f 20 70 72 6f 63 65 73 73  tions to process
1edd0 20 61 74 20 74 68 69 73 20 74 69 6d 65 20 2a 2f   at this time */
1ede0 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
1edf0 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
1ee00 28 73 74 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77  (stderr, "unknow
1ee10 6e 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c  n option: %s\n",
1ee20 20 61 7a 41 72 67 5b 6a 5d 29 3b 0a 20 20 20 20   azArg[j]);.    
1ee30 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
1ee40 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1ee50 7d 65 6c 73 65 20 69 66 28 20 7a 44 65 73 74 46  }else if( zDestF
1ee60 69 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ile==0 ){.      
1ee70 20 20 7a 44 65 73 74 46 69 6c 65 20 3d 20 61 7a    zDestFile = az
1ee80 41 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 65  Arg[j];.      }e
1ee90 6c 73 65 20 69 66 28 20 7a 44 62 3d 3d 30 20 29  lse if( zDb==0 )
1eea0 7b 0a 20 20 20 20 20 20 20 20 7a 44 62 20 3d 20  {.        zDb = 
1eeb0 7a 44 65 73 74 46 69 6c 65 3b 0a 20 20 20 20 20  zDestFile;.     
1eec0 20 20 20 7a 44 65 73 74 46 69 6c 65 20 3d 20 61     zDestFile = a
1eed0 7a 41 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d  zArg[j];.      }
1eee0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 61  else{.        ra
1eef0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1ef00 20 22 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d   "too many argum
1ef10 65 6e 74 73 20 74 6f 20 2e 62 61 63 6b 75 70 5c  ents to .backup\
1ef20 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74  n");.        ret
1ef30 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  urn 1;.      }. 
1ef40 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 44 65     }.    if( zDe
1ef50 73 74 46 69 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  stFile==0 ){.   
1ef60 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
1ef70 64 65 72 72 2c 20 22 6d 69 73 73 69 6e 67 20 46  derr, "missing F
1ef80 49 4c 45 4e 41 4d 45 20 61 72 67 75 6d 65 6e 74  ILENAME argument
1ef90 20 6f 6e 20 2e 62 61 63 6b 75 70 5c 6e 22 29 3b   on .backup\n");
1efa0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
1efb0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a  .    }.    if( z
1efc0 44 62 3d 3d 30 20 29 20 7a 44 62 20 3d 20 22 6d  Db==0 ) zDb = "m
1efd0 61 69 6e 22 3b 0a 20 20 20 20 72 63 20 3d 20 73  ain";.    rc = s
1efe0 71 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 44 65 73  qlite3_open(zDes
1eff0 74 46 69 6c 65 2c 20 26 70 44 65 73 74 29 3b 0a  tFile, &pDest);.
1f000 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1f010 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 75  TE_OK ){.      u
1f020 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
1f030 72 2c 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f  r, "Error: canno
1f040 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22  t open \"%s\"\n"
1f050 2c 20 7a 44 65 73 74 46 69 6c 65 29 3b 0a 20 20  , zDestFile);.  
1f060 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73      sqlite3_clos
1f070 65 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  e(pDest);.      
1f080 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
1f090 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
1f0a0 29 3b 0a 20 20 20 20 70 42 61 63 6b 75 70 20 3d  );.    pBackup =
1f0b0 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f   sqlite3_backup_
1f0c0 69 6e 69 74 28 70 44 65 73 74 2c 20 22 6d 61 69  init(pDest, "mai
1f0d0 6e 22 2c 20 70 2d 3e 64 62 2c 20 7a 44 62 29 3b  n", p->db, zDb);
1f0e0 0a 20 20 20 20 69 66 28 20 70 42 61 63 6b 75 70  .    if( pBackup
1f0f0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66  ==0 ){.      utf
1f100 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
1f110 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20   "Error: %s\n", 
1f120 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70  sqlite3_errmsg(p
1f130 44 65 73 74 29 29 3b 0a 20 20 20 20 20 20 73 71  Dest));.      sq
1f140 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 44 65 73  lite3_close(pDes
1f150 74 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  t);.      return
1f160 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68   1;.    }.    wh
1f170 69 6c 65 28 20 20 28 72 63 20 3d 20 73 71 6c 69  ile(  (rc = sqli
1f180 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28  te3_backup_step(
1f190 70 42 61 63 6b 75 70 2c 31 30 30 29 29 3d 3d 53  pBackup,100))==S
1f1a0 51 4c 49 54 45 5f 4f 4b 20 29 7b 7d 0a 20 20 20  QLITE_OK ){}.   
1f1b0 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f   sqlite3_backup_
1f1c0 66 69 6e 69 73 68 28 70 42 61 63 6b 75 70 29 3b  finish(pBackup);
1f1d0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
1f1e0 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20  ITE_DONE ){.    
1f1f0 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65    rc = 0;.    }e
1f200 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  lse{.      utf8_
1f210 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1f220 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71  Error: %s\n", sq
1f230 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 44 65  lite3_errmsg(pDe
1f240 73 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  st));.      rc =
1f250 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71   1;.    }.    sq
1f260 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 44 65 73  lite3_close(pDes
1f270 74 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  t);.  }else..  i
1f280 66 28 20 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d  f( c=='b' && n>=
1f290 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  3 && strncmp(azA
1f2a0 72 67 5b 30 5d 2c 20 22 62 61 69 6c 22 2c 20 6e  rg[0], "bail", n
1f2b0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
1f2c0 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
1f2d0 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 3d   bail_on_error =
1f2e0 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a   booleanValue(az
1f2f0 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c  Arg[1]);.    }el
1f300 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  se{.      raw_pr
1f310 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
1f320 61 67 65 3a 20 2e 62 61 69 6c 20 6f 6e 7c 6f 66  age: .bail on|of
1f330 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  f\n");.      rc 
1f340 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 1;.    }.  }el
1f350 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 62 27  se..  if( c=='b'
1f360 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
1f370 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62  cmp(azArg[0], "b
1f380 69 6e 61 72 79 22 2c 20 6e 29 3d 3d 30 20 29 7b  inary", n)==0 ){
1f390 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32  .    if( nArg==2
1f3a0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 6f   ){.      if( bo
1f3b0 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
1f3c0 5b 31 5d 29 20 29 7b 0a 20 20 20 20 20 20 20 20  [1]) ){.        
1f3d0 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 70 2d  setBinaryMode(p-
1f3e0 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  >out, 1);.      
1f3f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
1f400 65 74 54 65 78 74 4d 6f 64 65 28 70 2d 3e 6f 75  etTextMode(p->ou
1f410 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20  t, 1);.      }. 
1f420 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1f430 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
1f440 72 2c 20 22 55 73 61 67 65 3a 20 2e 62 69 6e 61  r, "Usage: .bina
1f450 72 79 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20  ry on|off\n");. 
1f460 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
1f470 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
1f480 28 20 63 3d 3d 27 63 27 20 26 26 20 73 74 72 63  ( c=='c' && strc
1f490 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 22 63 64 22  mp(azArg[0],"cd"
1f4a0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
1f4b0 6e 41 72 67 3d 3d 32 20 29 7b 0a 23 69 66 20 64  nArg==2 ){.#if d
1f4c0 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c  efined(_WIN32) |
1f4d0 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29  | defined(WIN32)
1f4e0 0a 20 20 20 20 20 20 77 63 68 61 72 5f 74 20 2a  .      wchar_t *
1f4f0 7a 20 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e 33  z = sqlite3_win3
1f500 32 5f 75 74 66 38 5f 74 6f 5f 75 6e 69 63 6f 64  2_utf8_to_unicod
1f510 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  e(azArg[1]);.   
1f520 20 20 20 72 63 20 3d 20 21 53 65 74 43 75 72 72     rc = !SetCurr
1f530 65 6e 74 44 69 72 65 63 74 6f 72 79 57 28 7a 29  entDirectoryW(z)
1f540 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
1f550 66 72 65 65 28 7a 29 3b 0a 23 65 6c 73 65 0a 20  free(z);.#else. 
1f560 20 20 20 20 20 72 63 20 3d 20 63 68 64 69 72 28       rc = chdir(
1f570 61 7a 41 72 67 5b 31 5d 29 3b 0a 23 65 6e 64 69  azArg[1]);.#endi
1f580 66 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29  f.      if( rc )
1f590 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
1f5a0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 43  rintf(stderr, "C
1f5b0 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 74 6f 20  annot change to 
1f5c0 64 69 72 65 63 74 6f 72 79 20 5c 22 25 73 5c 22  directory \"%s\"
1f5d0 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a  \n", azArg[1]);.
1f5e0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
1f5f0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
1f600 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
1f610 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
1f620 67 65 3a 20 2e 63 64 20 44 49 52 45 43 54 4f 52  ge: .cd DIRECTOR
1f630 59 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  Y\n");.      rc 
1f640 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 1;.    }.  }el
1f650 73 65 0a 0a 20 20 2f 2a 20 54 68 65 20 75 6e 64  se..  /* The und
1f660 6f 63 75 6d 65 6e 74 65 64 20 22 2e 62 72 65 61  ocumented ".brea
1f670 6b 70 6f 69 6e 74 22 20 63 6f 6d 6d 61 6e 64 20  kpoint" command 
1f680 63 61 75 73 65 73 20 61 20 63 61 6c 6c 20 74 6f  causes a call to
1f690 20 74 68 65 20 6e 6f 2d 6f 70 0a 20 20 2a 2a 20   the no-op.  ** 
1f6a0 72 6f 75 74 69 6e 65 20 6e 61 6d 65 64 20 74 65  routine named te
1f6b0 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 29 2e  st_breakpoint().
1f6c0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27  .  */.  if( c=='
1f6d0 62 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74  b' && n>=3 && st
1f6e0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
1f6f0 22 62 72 65 61 6b 70 6f 69 6e 74 22 2c 20 6e 29  "breakpoint", n)
1f700 3d 3d 30 20 29 7b 0a 20 20 20 20 74 65 73 74 5f  ==0 ){.    test_
1f710 62 72 65 61 6b 70 6f 69 6e 74 28 29 3b 0a 20 20  breakpoint();.  
1f720 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
1f730 27 63 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73  'c' && n>=3 && s
1f740 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
1f750 20 22 63 68 61 6e 67 65 73 22 2c 20 6e 29 3d 3d   "changes", n)==
1f760 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
1f770 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 65  g==2 ){.      se
1f780 74 4f 72 43 6c 65 61 72 46 6c 61 67 28 70 2c 20  tOrClearFlag(p, 
1f790 53 48 46 4c 47 5f 43 6f 75 6e 74 43 68 61 6e 67  SHFLG_CountChang
1f7a0 65 73 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  es, azArg[1]);. 
1f7b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1f7c0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
1f7d0 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 68 61 6e  r, "Usage: .chan
1f7e0 67 65 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a  ges on|off\n");.
1f7f0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
1f800 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f    }.  }else..  /
1f810 2a 20 43 61 6e 63 65 6c 20 6f 75 74 70 75 74 20  * Cancel output 
1f820 72 65 64 69 72 65 63 74 69 6f 6e 2c 20 69 66 20  redirection, if 
1f830 69 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  it is currently 
1f840 73 65 74 20 28 62 79 20 2e 74 65 73 74 63 61 73  set (by .testcas
1f850 65 29 0a 20 20 2a 2a 20 54 68 65 6e 20 72 65 61  e).  ** Then rea
1f860 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  d the content of
1f870 20 74 68 65 20 74 65 73 74 63 61 73 65 2d 6f 75   the testcase-ou
1f880 74 2e 74 78 74 20 66 69 6c 65 20 61 6e 64 20 63  t.txt file and c
1f890 6f 6d 70 61 72 65 20 61 67 61 69 6e 73 74 0a 20  ompare against. 
1f8a0 20 2a 2a 20 61 7a 41 72 67 5b 31 5d 2e 20 20 49   ** azArg[1].  I
1f8b0 66 20 74 68 65 72 65 20 61 72 65 20 64 69 66 66  f there are diff
1f8c0 65 72 65 6e 63 65 73 2c 20 72 65 70 6f 72 74 20  erences, report 
1f8d0 61 6e 20 65 72 72 6f 72 20 61 6e 64 20 65 78 69  an error and exi
1f8e0 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 3d  t..  */.  if( c=
1f8f0 3d 27 63 27 20 26 26 20 6e 3e 3d 33 20 26 26 20  ='c' && n>=3 && 
1f900 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
1f910 2c 20 22 63 68 65 63 6b 22 2c 20 6e 29 3d 3d 30  , "check", n)==0
1f920 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 52   ){.    char *zR
1f930 65 73 20 3d 20 30 3b 0a 20 20 20 20 6f 75 74 70  es = 0;.    outp
1f940 75 74 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20  ut_reset(p);.   
1f950 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29 7b 0a   if( nArg!=2 ){.
1f960 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1f970 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
1f980 20 2e 63 68 65 63 6b 20 47 4c 4f 42 2d 50 41 54   .check GLOB-PAT
1f990 54 45 52 4e 5c 6e 22 29 3b 0a 20 20 20 20 20 20  TERN\n");.      
1f9a0 72 63 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73  rc = 2;.    }els
1f9b0 65 20 69 66 28 20 28 7a 52 65 73 20 3d 20 72 65  e if( (zRes = re
1f9c0 61 64 46 69 6c 65 28 22 74 65 73 74 63 61 73 65  adFile("testcase
1f9d0 2d 6f 75 74 2e 74 78 74 22 2c 20 30 29 29 3d 3d  -out.txt", 0))==
1f9e0 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
1f9f0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1fa00 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 72 65 61  rror: cannot rea
1fa10 64 20 27 74 65 73 74 63 61 73 65 2d 6f 75 74 2e  d 'testcase-out.
1fa20 74 78 74 27 5c 6e 22 29 3b 0a 20 20 20 20 20 20  txt'\n");.      
1fa30 72 63 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73  rc = 2;.    }els
1fa40 65 20 69 66 28 20 74 65 73 74 63 61 73 65 5f 67  e if( testcase_g
1fa50 6c 6f 62 28 61 7a 41 72 67 5b 31 5d 2c 7a 52 65  lob(azArg[1],zRe
1fa60 73 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  s)==0 ){.      u
1fa70 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
1fa80 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1fa90 20 20 20 20 22 74 65 73 74 63 61 73 65 2d 25 73      "testcase-%s
1faa0 20 46 41 49 4c 45 44 5c 6e 20 45 78 70 65 63 74   FAILED\n Expect
1fab0 65 64 3a 20 5b 25 73 5d 5c 6e 20 20 20 20 20 20  ed: [%s]\n      
1fac0 47 6f 74 3a 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20  Got: [%s]\n",.  
1fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1fae0 2d 3e 7a 54 65 73 74 63 61 73 65 2c 20 61 7a 41  ->zTestcase, azA
1faf0 72 67 5b 31 5d 2c 20 7a 52 65 73 29 3b 0a 20 20  rg[1], zRes);.  
1fb00 20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 20 20      rc = 2;.    
1fb10 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66  }else{.      utf
1fb20 38 5f 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c  8_printf(stdout,
1fb30 20 22 74 65 73 74 63 61 73 65 2d 25 73 20 6f 6b   "testcase-%s ok
1fb40 5c 6e 22 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73  \n", p->zTestcas
1fb50 65 29 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68  e);.      p->nCh
1fb60 65 63 6b 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  eck++;.    }.   
1fb70 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 52   sqlite3_free(zR
1fb80 65 73 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  es);.  }else..  
1fb90 69 66 28 20 63 3d 3d 27 63 27 20 26 26 20 73 74  if( c=='c' && st
1fba0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
1fbb0 22 63 6c 6f 6e 65 22 2c 20 6e 29 3d 3d 30 20 29  "clone", n)==0 )
1fbc0 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d  {.    if( nArg==
1fbd0 32 20 29 7b 0a 20 20 20 20 20 20 74 72 79 54 6f  2 ){.      tryTo
1fbe0 43 6c 6f 6e 65 28 70 2c 20 61 7a 41 72 67 5b 31  Clone(p, azArg[1
1fbf0 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ]);.    }else{. 
1fc00 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
1fc10 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
1fc20 2e 63 6c 6f 6e 65 20 46 49 4c 45 4e 41 4d 45 5c  .clone FILENAME\
1fc30 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
1fc40 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
1fc50 0a 0a 20 20 69 66 28 20 63 3d 3d 27 64 27 20 26  ..  if( c=='d' &
1fc60 26 20 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70  & n>1 && strncmp
1fc70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 64 61 74 61  (azArg[0], "data
1fc80 62 61 73 65 73 22 2c 20 6e 29 3d 3d 30 20 29 7b  bases", n)==0 ){
1fc90 0a 20 20 20 20 53 68 65 6c 6c 53 74 61 74 65 20  .    ShellState 
1fca0 64 61 74 61 3b 0a 20 20 20 20 63 68 61 72 20 2a  data;.    char *
1fcb0 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
1fcc0 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a   open_db(p, 0);.
1fcd0 20 20 20 20 6d 65 6d 63 70 79 28 26 64 61 74 61      memcpy(&data
1fce0 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64 61 74 61  , p, sizeof(data
1fcf0 29 29 3b 0a 20 20 20 20 64 61 74 61 2e 73 68 6f  ));.    data.sho
1fd00 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20 20  wHeader = 0;.   
1fd10 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64 61   data.cMode = da
1fd20 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c  ta.mode = MODE_L
1fd30 69 73 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ist;.    sqlite3
1fd40 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
1fd50 28 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74  (data.colSeparat
1fd60 6f 72 29 2c 64 61 74 61 2e 63 6f 6c 53 65 70 61  or),data.colSepa
1fd70 72 61 74 6f 72 2c 22 3a 20 22 29 3b 0a 20 20 20  rator,": ");.   
1fd80 20 64 61 74 61 2e 63 6e 74 20 3d 20 30 3b 0a 20   data.cnt = 0;. 
1fd90 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28     sqlite3_exec(
1fda0 70 2d 3e 64 62 2c 20 22 53 45 4c 45 43 54 20 6e  p->db, "SELECT n
1fdb0 61 6d 65 2c 20 66 69 6c 65 20 46 52 4f 4d 20 70  ame, file FROM p
1fdc0 72 61 67 6d 61 5f 64 61 74 61 62 61 73 65 5f 6c  ragma_database_l
1fdd0 69 73 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ist",.          
1fde0 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c         callback,
1fdf0 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67   &data, &zErrMsg
1fe00 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d  );.    if( zErrM
1fe10 73 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  sg ){.      utf8
1fe20 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
1fe30 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45  Error: %s\n", zE
1fe40 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71  rrMsg);.      sq
1fe50 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d  lite3_free(zErrM
1fe60 73 67 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  sg);.      rc = 
1fe70 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
1fe80 0a 0a 20 20 69 66 28 20 63 3d 3d 27 64 27 20 26  ..  if( c=='d' &
1fe90 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
1fea0 30 5d 2c 20 22 64 62 69 6e 66 6f 22 2c 20 6e 29  0], "dbinfo", n)
1feb0 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
1fec0 73 68 65 6c 6c 5f 64 62 69 6e 66 6f 5f 63 6f 6d  shell_dbinfo_com
1fed0 6d 61 6e 64 28 70 2c 20 6e 41 72 67 2c 20 61 7a  mand(p, nArg, az
1fee0 41 72 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  Arg);.  }else.. 
1fef0 20 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20 73   if( c=='d' && s
1ff00 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
1ff10 20 22 64 75 6d 70 22 2c 20 6e 29 3d 3d 30 20 29   "dump", n)==0 )
1ff20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
1ff30 20 2a 7a 4c 69 6b 65 20 3d 20 30 3b 0a 20 20 20   *zLike = 0;.   
1ff40 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
1ff50 73 61 76 65 64 53 68 6f 77 48 65 61 64 65 72 20  savedShowHeader 
1ff60 3d 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 3b  = p->showHeader;
1ff70 0a 20 20 20 20 53 68 65 6c 6c 43 6c 65 61 72 46  .    ShellClearF
1ff80 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 50 72 65  lag(p, SHFLG_Pre
1ff90 73 65 72 76 65 52 6f 77 69 64 7c 53 48 46 4c 47  serveRowid|SHFLG
1ffa0 5f 4e 65 77 6c 69 6e 65 73 29 3b 0a 20 20 20 20  _Newlines);.    
1ffb0 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b  for(i=1; i<nArg;
1ffc0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
1ffd0 20 61 7a 41 72 67 5b 69 5d 5b 30 5d 3d 3d 27 2d   azArg[i][0]=='-
1ffe0 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e  ' ){.        con
1fff0 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41  st char *z = azA
20000 72 67 5b 69 5d 2b 31 3b 0a 20 20 20 20 20 20 20  rg[i]+1;.       
20010 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29   if( z[0]=='-' )
20020 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66   z++;.        if
20030 28 20 73 74 72 63 6d 70 28 7a 2c 22 70 72 65 73  ( strcmp(z,"pres
20040 65 72 76 65 2d 72 6f 77 69 64 73 22 29 3d 3d 30  erve-rowids")==0
20050 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   ){.#ifdef SQLIT
20060 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
20070 42 4c 45 0a 20 20 20 20 20 20 20 20 20 20 72 61  BLE.          ra
20080 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
20090 20 22 54 68 65 20 2d 2d 70 72 65 73 65 72 76 65   "The --preserve
200a0 2d 72 6f 77 69 64 73 20 6f 70 74 69 6f 6e 20 69  -rowids option i
200b0 73 20 6e 6f 74 20 63 6f 6d 70 61 74 69 62 6c 65  s not compatible
200c0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
200d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
200e0 20 77 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49   with SQLITE_OMI
200f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 5c 6e  T_VIRTUALTABLE\n
20100 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63  ");.          rc
20110 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   = 1;.          
20120 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
20130 64 5f 65 78 69 74 3b 0a 23 65 6c 73 65 0a 20 20  d_exit;.#else.  
20140 20 20 20 20 20 20 20 20 53 68 65 6c 6c 53 65 74          ShellSet
20150 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 50 72  Flag(p, SHFLG_Pr
20160 65 73 65 72 76 65 52 6f 77 69 64 29 3b 0a 23 65  eserveRowid);.#e
20170 6e 64 69 66 0a 20 20 20 20 20 20 20 20 7d 65 6c  ndif.        }el
20180 73 65 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  se.        if( s
20190 74 72 63 6d 70 28 7a 2c 22 6e 65 77 6c 69 6e 65  trcmp(z,"newline
201a0 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  s")==0 ){.      
201b0 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67      ShellSetFlag
201c0 28 70 2c 20 53 48 46 4c 47 5f 4e 65 77 6c 69 6e  (p, SHFLG_Newlin
201d0 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  es);.        }el
201e0 73 65 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  se.        {.   
201f0 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
20200 66 28 73 74 64 65 72 72 2c 20 22 55 6e 6b 6e 6f  f(stderr, "Unkno
20210 77 6e 20 6f 70 74 69 6f 6e 20 5c 22 25 73 5c 22  wn option \"%s\"
20220 20 6f 6e 20 5c 22 2e 64 75 6d 70 5c 22 5c 6e 22   on \".dump\"\n"
20230 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
20240 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
20250 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65           goto me
20260 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
20270 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
20280 20 7d 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b 65   }else if( zLike
20290 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
202a0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
202b0 55 73 61 67 65 3a 20 2e 64 75 6d 70 20 3f 2d 2d  Usage: .dump ?--
202c0 70 72 65 73 65 72 76 65 2d 72 6f 77 69 64 73 3f  preserve-rowids?
202d0 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
202e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3f                "?
202f0 2d 2d 6e 65 77 6c 69 6e 65 73 3f 20 3f 4c 49 4b  --newlines? ?LIK
20300 45 2d 50 41 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a  E-PATTERN?\n");.
20310 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
20320 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74          goto met
20330 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
20340 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
20350 20 20 20 20 20 7a 4c 69 6b 65 20 3d 20 61 7a 41       zLike = azA
20360 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20 7d 0a 20  rg[i];.      }. 
20370 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62     }.    open_db
20380 28 70 2c 20 30 29 3b 0a 20 20 20 20 2f 2a 20 57  (p, 0);.    /* W
20390 68 65 6e 20 70 6c 61 79 69 6e 67 20 62 61 63 6b  hen playing back
203a0 20 61 20 22 64 75 6d 70 22 2c 20 74 68 65 20 63   a "dump", the c
203b0 6f 6e 74 65 6e 74 20 6d 69 67 68 74 20 61 70 70  ontent might app
203c0 65 61 72 20 69 6e 20 61 6e 20 6f 72 64 65 72 0a  ear in an order.
203d0 20 20 20 20 2a 2a 20 77 68 69 63 68 20 63 61 75      ** which cau
203e0 73 65 73 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  ses immediate fo
203f0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
20400 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c  aints to be viol
20410 61 74 65 64 2e 0a 20 20 20 20 2a 2a 20 53 6f 20  ated..    ** So 
20420 64 69 73 61 62 6c 65 20 66 6f 72 65 69 67 6e 2d  disable foreign-
20430 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 65  key constraint e
20440 6e 66 6f 72 63 65 6d 65 6e 74 20 74 6f 20 70 72  nforcement to pr
20450 65 76 65 6e 74 20 70 72 6f 62 6c 65 6d 73 2e 20  event problems. 
20460 2a 2f 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74  */.    raw_print
20470 66 28 70 2d 3e 6f 75 74 2c 20 22 50 52 41 47 4d  f(p->out, "PRAGM
20480 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f  A foreign_keys=O
20490 46 46 3b 5c 6e 22 29 3b 0a 20 20 20 20 72 61 77  FF;\n");.    raw
204a0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
204b0 22 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49  "BEGIN TRANSACTI
204c0 4f 4e 3b 5c 6e 22 29 3b 0a 20 20 20 20 70 2d 3e  ON;\n");.    p->
204d0 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20 3d  writableSchema =
204e0 20 30 3b 0a 20 20 20 20 70 2d 3e 73 68 6f 77 48   0;.    p->showH
204f0 65 61 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 2f  eader = 0;.    /
20500 2a 20 53 65 74 20 77 72 69 74 61 62 6c 65 5f 73  * Set writable_s
20510 63 68 65 6d 61 3d 4f 4e 20 73 69 6e 63 65 20 64  chema=ON since d
20520 6f 69 6e 67 20 73 6f 20 66 6f 72 63 65 73 20 53  oing so forces S
20530 51 4c 69 74 65 20 74 6f 20 69 6e 69 74 69 61 6c  QLite to initial
20540 69 7a 65 0a 20 20 20 20 2a 2a 20 61 73 20 6d 75  ize.    ** as mu
20550 63 68 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ch of the schema
20560 20 61 73 20 69 74 20 63 61 6e 20 65 76 65 6e 20   as it can even 
20570 69 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  if the sqlite_ma
20580 73 74 65 72 20 74 61 62 6c 65 20 69 73 0a 20 20  ster table is.  
20590 20 20 2a 2a 20 63 6f 72 72 75 70 74 2e 20 2a 2f    ** corrupt. */
205a0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65  .    sqlite3_exe
205b0 63 28 70 2d 3e 64 62 2c 20 22 53 41 56 45 50 4f  c(p->db, "SAVEPO
205c0 49 4e 54 20 64 75 6d 70 3b 20 50 52 41 47 4d 41  INT dump; PRAGMA
205d0 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
205e0 3d 4f 4e 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  =ON", 0, 0, 0);.
205f0 20 20 20 20 70 2d 3e 6e 45 72 72 20 3d 20 30 3b      p->nErr = 0;
20600 0a 20 20 20 20 69 66 28 20 7a 4c 69 6b 65 3d 3d  .    if( zLike==
20610 30 20 29 7b 0a 20 20 20 20 20 20 72 75 6e 5f 73  0 ){.      run_s
20620 63 68 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79  chema_dump_query
20630 28 70 2c 0a 20 20 20 20 20 20 20 20 22 53 45 4c  (p,.        "SEL
20640 45 43 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c 20  ECT name, type, 
20650 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
20660 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20 20 20  master ".       
20670 20 22 57 48 45 52 45 20 73 71 6c 20 4e 4f 54 20   "WHERE sql NOT 
20680 4e 55 4c 4c 20 41 4e 44 20 74 79 70 65 3d 3d 27  NULL AND type=='
20690 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 21  table' AND name!
206a0 3d 27 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  ='sqlite_sequenc
206b0 65 27 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  e'".      );.   
206c0 20 20 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64 75     run_schema_du
206d0 6d 70 5f 71 75 65 72 79 28 70 2c 0a 20 20 20 20  mp_query(p,.    
206e0 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
206f0 2c 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d  , type, sql FROM
20700 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22   sqlite_master "
20710 0a 20 20 20 20 20 20 20 20 22 57 48 45 52 45 20  .        "WHERE 
20720 6e 61 6d 65 3d 3d 27 73 71 6c 69 74 65 5f 73 65  name=='sqlite_se
20730 71 75 65 6e 63 65 27 22 0a 20 20 20 20 20 20 29  quence'".      )
20740 3b 0a 20 20 20 20 20 20 72 75 6e 5f 74 61 62 6c  ;.      run_tabl
20750 65 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 0a  e_dump_query(p,.
20760 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
20770 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
20780 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20 20 20  master ".       
20790 20 22 57 48 45 52 45 20 73 71 6c 20 4e 4f 54 20   "WHERE sql NOT 
207a0 4e 55 4c 4c 20 41 4e 44 20 74 79 70 65 20 49 4e  NULL AND type IN
207b0 20 28 27 69 6e 64 65 78 27 2c 27 74 72 69 67 67   ('index','trigg
207c0 65 72 27 2c 27 76 69 65 77 27 29 22 2c 20 30 0a  er','view')", 0.
207d0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d 65 6c        );.    }el
207e0 73 65 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  se{.      char *
207f0 7a 53 71 6c 3b 0a 20 20 20 20 20 20 7a 53 71 6c  zSql;.      zSql
20800 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
20810 74 66 28 0a 20 20 20 20 20 20 20 20 22 53 45 4c  tf(.        "SEL
20820 45 43 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c 20  ECT name, type, 
20830 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
20840 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20 20 20  master ".       
20850 20 22 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d 65   "WHERE tbl_name
20860 20 4c 49 4b 45 20 25 51 20 41 4e 44 20 74 79 70   LIKE %Q AND typ
20870 65 3d 3d 27 74 61 62 6c 65 27 22 0a 20 20 20 20  e=='table'".    
20880 20 20 20 20 22 20 20 41 4e 44 20 73 71 6c 20 4e      "  AND sql N
20890 4f 54 20 4e 55 4c 4c 22 2c 20 7a 4c 69 6b 65 29  OT NULL", zLike)
208a0 3b 0a 20 20 20 20 20 20 72 75 6e 5f 73 63 68 65  ;.      run_sche
208b0 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c  ma_dump_query(p,
208c0 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 73 71 6c  zSql);.      sql
208d0 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b  ite3_free(zSql);
208e0 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  .      zSql = sq
208f0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20  lite3_mprintf(. 
20900 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 73         "SELECT s
20910 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ql FROM sqlite_m
20920 61 73 74 65 72 20 22 0a 20 20 20 20 20 20 20 20  aster ".        
20930 22 57 48 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e  "WHERE sql NOT N
20940 55 4c 4c 22 0a 20 20 20 20 20 20 20 20 22 20 20  ULL".        "  
20950 41 4e 44 20 74 79 70 65 20 49 4e 20 28 27 69 6e  AND type IN ('in
20960 64 65 78 27 2c 27 74 72 69 67 67 65 72 27 2c 27  dex','trigger','
20970 76 69 65 77 27 29 22 0a 20 20 20 20 20 20 20 20  view')".        
20980 22 20 20 41 4e 44 20 74 62 6c 5f 6e 61 6d 65 20  "  AND tbl_name 
20990 4c 49 4b 45 20 25 51 22 2c 20 7a 4c 69 6b 65 29  LIKE %Q", zLike)
209a0 3b 0a 20 20 20 20 20 20 72 75 6e 5f 74 61 62 6c  ;.      run_tabl
209b0 65 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 20  e_dump_query(p, 
209c0 7a 53 71 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20  zSql, 0);.      
209d0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71  sqlite3_free(zSq
209e0 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  l);.    }.    if
209f0 28 20 70 2d 3e 77 72 69 74 61 62 6c 65 53 63 68  ( p->writableSch
20a00 65 6d 61 20 29 7b 0a 20 20 20 20 20 20 72 61 77  ema ){.      raw
20a10 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
20a20 22 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65  "PRAGMA writable
20a30 5f 73 63 68 65 6d 61 3d 4f 46 46 3b 5c 6e 22 29  _schema=OFF;\n")
20a40 3b 0a 20 20 20 20 20 20 70 2d 3e 77 72 69 74 61  ;.      p->writa
20a50 62 6c 65 53 63 68 65 6d 61 20 3d 20 30 3b 0a 20  bleSchema = 0;. 
20a60 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
20a70 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52  _exec(p->db, "PR
20a80 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
20a90 68 65 6d 61 3d 4f 46 46 3b 22 2c 20 30 2c 20 30  hema=OFF;", 0, 0
20aa0 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
20ab0 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 52  3_exec(p->db, "R
20ac0 45 4c 45 41 53 45 20 64 75 6d 70 3b 22 2c 20 30  ELEASE dump;", 0
20ad0 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 72 61 77  , 0, 0);.    raw
20ae0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
20af0 70 2d 3e 6e 45 72 72 20 3f 20 22 52 4f 4c 4c 42  p->nErr ? "ROLLB
20b00 41 43 4b 3b 20 2d 2d 20 64 75 65 20 74 6f 20 65  ACK; -- due to e
20b10 72 72 6f 72 73 5c 6e 22 20 3a 20 22 43 4f 4d 4d  rrors\n" : "COMM
20b20 49 54 3b 5c 6e 22 29 3b 0a 20 20 20 20 70 2d 3e  IT;\n");.    p->
20b30 73 68 6f 77 48 65 61 64 65 72 20 3d 20 73 61 76  showHeader = sav
20b40 65 64 53 68 6f 77 48 65 61 64 65 72 3b 0a 20 20  edShowHeader;.  
20b50 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
20b60 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'e' && strncmp(a
20b70 7a 41 72 67 5b 30 5d 2c 20 22 65 63 68 6f 22 2c  zArg[0], "echo",
20b80 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66   n)==0 ){.    if
20b90 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20  ( nArg==2 ){.   
20ba0 20 20 20 73 65 74 4f 72 43 6c 65 61 72 46 6c 61     setOrClearFla
20bb0 67 28 70 2c 20 53 48 46 4c 47 5f 45 63 68 6f 2c  g(p, SHFLG_Echo,
20bc0 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
20bd0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77  }else{.      raw
20be0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
20bf0 22 55 73 61 67 65 3a 20 2e 65 63 68 6f 20 6f 6e  "Usage: .echo on
20c00 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20  |off\n");.      
20c10 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rc = 1;.    }.  
20c20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
20c30 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'e' && strncmp(a
20c40 7a 41 72 67 5b 30 5d 2c 20 22 65 71 70 22 2c 20  zArg[0], "eqp", 
20c50 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
20c60 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
20c70 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41    if( strcmp(azA
20c80 72 67 5b 31 5d 2c 22 66 75 6c 6c 22 29 3d 3d 30  rg[1],"full")==0
20c90 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 61   ){.        p->a
20ca0 75 74 6f 45 51 50 20 3d 20 32 3b 0a 20 20 20 20  utoEQP = 2;.    
20cb0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
20cc0 20 70 2d 3e 61 75 74 6f 45 51 50 20 3d 20 62 6f   p->autoEQP = bo
20cd0 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
20ce0 5b 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [1]);.      }.  
20cf0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
20d00 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
20d10 2c 20 22 55 73 61 67 65 3a 20 2e 65 71 70 20 6f  , "Usage: .eqp o
20d20 6e 7c 6f 66 66 7c 66 75 6c 6c 5c 6e 22 29 3b 0a  n|off|full\n");.
20d30 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
20d40 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
20d50 66 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74 72  f( c=='e' && str
20d60 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
20d70 65 78 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  exit", n)==0 ){.
20d80 20 20 20 20 69 66 28 20 6e 41 72 67 3e 31 20 26      if( nArg>1 &
20d90 26 20 28 72 63 20 3d 20 28 69 6e 74 29 69 6e 74  & (rc = (int)int
20da0 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b  egerValue(azArg[
20db0 31 5d 29 29 21 3d 30 20 29 20 65 78 69 74 28 72  1]))!=0 ) exit(r
20dc0 63 29 3b 0a 20 20 20 20 72 63 20 3d 20 32 3b 0a  c);.    rc = 2;.
20dd0 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 54 68    }else..  /* Th
20de0 65 20 22 2e 65 78 70 6c 61 69 6e 22 20 63 6f 6d  e ".explain" com
20df0 6d 61 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69  mand is automati
20e00 63 20 6e 6f 77 2e 20 20 49 74 20 69 73 20 6c 61  c now.  It is la
20e10 72 67 65 6c 79 20 70 6f 69 6e 74 6c 65 73 73 2e  rgely pointless.
20e20 20 20 49 74 0a 20 20 2a 2a 20 72 65 74 61 69 6e    It.  ** retain
20e30 65 64 20 70 75 72 65 6c 79 20 66 6f 72 20 62 61  ed purely for ba
20e40 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
20e50 69 6c 69 74 79 20 2a 2f 0a 20 20 69 66 28 20 63  ility */.  if( c
20e60 3d 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70  =='e' && strncmp
20e70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 65 78 70 6c  (azArg[0], "expl
20e80 61 69 6e 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ain", n)==0 ){. 
20e90 20 20 20 69 6e 74 20 76 61 6c 20 3d 20 31 3b 0a     int val = 1;.
20ea0 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 32 20      if( nArg>=2 
20eb0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72  ){.      if( str
20ec0 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 61 75  cmp(azArg[1],"au
20ed0 74 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  to")==0 ){.     
20ee0 20 20 20 76 61 6c 20 3d 20 39 39 3b 0a 20 20 20     val = 99;.   
20ef0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20f00 20 20 76 61 6c 20 3d 20 20 62 6f 6f 6c 65 61 6e    val =  boolean
20f10 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b  Value(azArg[1]);
20f20 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
20f30 20 20 20 69 66 28 20 76 61 6c 3d 3d 31 20 26 26     if( val==1 &&
20f40 20 70 2d 3e 6d 6f 64 65 21 3d 4d 4f 44 45 5f 45   p->mode!=MODE_E
20f50 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20  xplain ){.      
20f60 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 20 3d 20  p->normalMode = 
20f70 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20 70  p->mode;.      p
20f80 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 45 78  ->mode = MODE_Ex
20f90 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20 70 2d 3e  plain;.      p->
20fa0 61 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20 30 3b  autoExplain = 0;
20fb0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 76  .    }else if( v
20fc0 61 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  al==0 ){.      i
20fd0 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45  f( p->mode==MODE
20fe0 5f 45 78 70 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f  _Explain ) p->mo
20ff0 64 65 20 3d 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f  de = p->normalMo
21000 64 65 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75 74  de;.      p->aut
21010 6f 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20  oExplain = 0;.  
21020 20 20 7d 65 6c 73 65 20 69 66 28 20 76 61 6c 3d    }else if( val=
21030 3d 39 39 20 29 7b 0a 20 20 20 20 20 20 69 66 28  =99 ){.      if(
21040 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45   p->mode==MODE_E
21050 78 70 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f 64 65  xplain ) p->mode
21060 20 3d 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65   = p->normalMode
21070 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45  ;.      p->autoE
21080 78 70 6c 61 69 6e 20 3d 20 31 3b 0a 20 20 20 20  xplain = 1;.    
21090 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
210a0 20 63 3d 3d 27 66 27 20 26 26 20 73 74 72 6e 63   c=='f' && strnc
210b0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 66 75  mp(azArg[0], "fu
210c0 6c 6c 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d 30  llschema", n)==0
210d0 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 53 74 61   ){.    ShellSta
210e0 74 65 20 64 61 74 61 3b 0a 20 20 20 20 63 68 61  te data;.    cha
210f0 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  r *zErrMsg = 0;.
21100 20 20 20 20 69 6e 74 20 64 6f 53 74 61 74 73 20      int doStats 
21110 3d 20 30 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28  = 0;.    memcpy(
21120 26 64 61 74 61 2c 20 70 2c 20 73 69 7a 65 6f 66  &data, p, sizeof
21130 28 64 61 74 61 29 29 3b 0a 20 20 20 20 64 61 74  (data));.    dat
21140 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30  a.showHeader = 0
21150 3b 0a 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65  ;.    data.cMode
21160 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d   = data.mode = M
21170 4f 44 45 5f 53 65 6d 69 3b 0a 20 20 20 20 69 66  ODE_Semi;.    if
21180 28 20 6e 41 72 67 3d 3d 32 20 26 26 20 6f 70 74  ( nArg==2 && opt
21190 69 6f 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b 31  ionMatch(azArg[1
211a0 5d 2c 20 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a  ], "indent") ){.
211b0 20 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65        data.cMode
211c0 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d   = data.mode = M
211d0 4f 44 45 5f 50 72 65 74 74 79 3b 0a 20 20 20 20  ODE_Pretty;.    
211e0 20 20 6e 41 72 67 20 3d 20 31 3b 0a 20 20 20 20    nArg = 1;.    
211f0 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d  }.    if( nArg!=
21200 31 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  1 ){.      raw_p
21210 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
21220 73 61 67 65 3a 20 2e 66 75 6c 6c 73 63 68 65 6d  sage: .fullschem
21230 61 20 3f 2d 2d 69 6e 64 65 6e 74 3f 5c 6e 22 29  a ?--indent?\n")
21240 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
21250 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
21260 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
21270 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28    }.    open_db(
21280 70 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20  p, 0);.    rc = 
21290 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
212a0 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  db,.       "SELE
212b0 43 54 20 73 71 6c 20 46 52 4f 4d 22 0a 20 20 20  CT sql FROM".   
212c0 20 20 20 20 22 20 20 28 53 45 4c 45 43 54 20 73      "  (SELECT s
212d0 71 6c 20 73 71 6c 2c 20 74 79 70 65 20 74 79 70  ql sql, type typ
212e0 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 74 62 6c 5f  e, tbl_name tbl_
212f0 6e 61 6d 65 2c 20 6e 61 6d 65 20 6e 61 6d 65 2c  name, name name,
21300 20 72 6f 77 69 64 20 78 22 0a 20 20 20 20 20 20   rowid x".      
21310 20 22 20 20 20 20 20 46 52 4f 4d 20 73 71 6c 69   "     FROM sqli
21320 74 65 5f 6d 61 73 74 65 72 20 55 4e 49 4f 4e 20  te_master UNION 
21330 41 4c 4c 22 0a 20 20 20 20 20 20 20 22 20 20 20  ALL".       "   
21340 53 45 4c 45 43 54 20 73 71 6c 2c 20 74 79 70 65  SELECT sql, type
21350 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65  , tbl_name, name
21360 2c 20 72 6f 77 69 64 20 46 52 4f 4d 20 73 71 6c  , rowid FROM sql
21370 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29  ite_temp_master)
21380 20 22 0a 20 20 20 20 20 20 20 22 57 48 45 52 45   ".       "WHERE
21390 20 74 79 70 65 21 3d 27 6d 65 74 61 27 20 41 4e   type!='meta' AN
213a0 44 20 73 71 6c 20 4e 4f 54 4e 55 4c 4c 20 41 4e  D sql NOTNULL AN
213b0 44 20 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b 45 20  D name NOT LIKE 
213c0 27 73 71 6c 69 74 65 5f 25 27 20 22 0a 20 20 20  'sqlite_%' ".   
213d0 20 20 20 20 22 4f 52 44 45 52 20 42 59 20 72 6f      "ORDER BY ro
213e0 77 69 64 22 2c 0a 20 20 20 20 20 20 20 63 61 6c  wid",.       cal
213f0 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a  lback, &data, &z
21400 45 72 72 4d 73 67 0a 20 20 20 20 29 3b 0a 20 20  ErrMsg.    );.  
21410 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
21420 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  _OK ){.      sql
21430 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
21440 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
21450 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
21460 70 2d 3e 64 62 2c 0a 20 20 20 20 20 20 20 20 20  p->db,.         
21470 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 72 6f        "SELECT ro
21480 77 69 64 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  wid FROM sqlite_
21490 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20  master".        
214a0 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20 6e         " WHERE n
214b0 61 6d 65 20 47 4c 4f 42 20 27 73 71 6c 69 74 65  ame GLOB 'sqlite
214c0 5f 73 74 61 74 5b 31 33 34 5d 27 22 2c 0a 20 20  _stat[134]'",.  
214d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c               -1,
214e0 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20   &pStmt, 0);.   
214f0 20 20 20 64 6f 53 74 61 74 73 20 3d 20 73 71 6c     doStats = sql
21500 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
21510 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  ==SQLITE_ROW;.  
21520 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
21530 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
21540 20 7d 0a 20 20 20 20 69 66 28 20 64 6f 53 74 61   }.    if( doSta
21550 74 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ts==0 ){.      r
21560 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
21570 2c 20 22 2f 2a 20 4e 6f 20 53 54 41 54 20 74 61  , "/* No STAT ta
21580 62 6c 65 73 20 61 76 61 69 6c 61 62 6c 65 20 2a  bles available *
21590 2f 5c 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  /\n");.    }else
215a0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
215b0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c  tf(p->out, "ANAL
215c0 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  YZE sqlite_maste
215d0 72 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 73 71  r;\n");.      sq
215e0 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
215f0 2c 20 22 53 45 4c 45 43 54 20 27 41 4e 41 4c 59  , "SELECT 'ANALY
21600 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ZE sqlite_master
21610 27 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  '",.            
21620 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c         callback,
21630 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67   &data, &zErrMsg
21640 29 3b 0a 20 20 20 20 20 20 64 61 74 61 2e 63 4d  );.      data.cM
21650 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20  ode = data.mode 
21660 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a 20  = MODE_Insert;. 
21670 20 20 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54       data.zDestT
21680 61 62 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73  able = "sqlite_s
21690 74 61 74 31 22 3b 0a 20 20 20 20 20 20 73 68 65  tat1";.      she
216a0 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22  ll_exec(p->db, "
216b0 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
216c0 6c 69 74 65 5f 73 74 61 74 31 22 2c 0a 20 20 20  lite_stat1",.   
216d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68                sh
216e0 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64  ell_callback, &d
216f0 61 74 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ata,&zErrMsg);. 
21700 20 20 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54       data.zDestT
21710 61 62 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73  able = "sqlite_s
21720 74 61 74 33 22 3b 0a 20 20 20 20 20 20 73 68 65  tat3";.      she
21730 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22  ll_exec(p->db, "
21740 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
21750 6c 69 74 65 5f 73 74 61 74 33 22 2c 0a 20 20 20  lite_stat3",.   
21760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68                sh
21770 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64  ell_callback, &d
21780 61 74 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ata,&zErrMsg);. 
21790 20 20 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54       data.zDestT
217a0 61 62 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73  able = "sqlite_s
217b0 74 61 74 34 22 3b 0a 20 20 20 20 20 20 73 68 65  tat4";.      she
217c0 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22  ll_exec(p->db, "
217d0 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
217e0 6c 69 74 65 5f 73 74 61 74 34 22 2c 0a 20 20 20  lite_stat4",.   
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68                sh
21800 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64  ell_callback, &d
21810 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a  ata, &zErrMsg);.
21820 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
21830 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a  (p->out, "ANALYZ
21840 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  E sqlite_master;
21850 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  \n");.    }.  }e
21860 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 68  lse..  if( c=='h
21870 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
21880 72 67 5b 30 5d 2c 20 22 68 65 61 64 65 72 73 22  rg[0], "headers"
21890 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
218a0 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20  f( nArg==2 ){.  
218b0 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61 64 65      p->showHeade
218c0 72 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65  r = booleanValue
218d0 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20  (azArg[1]);.    
218e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77  }else{.      raw
218f0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
21900 22 55 73 61 67 65 3a 20 2e 68 65 61 64 65 72 73  "Usage: .headers
21910 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20   on|off\n");.   
21920 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
21930 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
21940 63 3d 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d  c=='h' && strncm
21950 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 68 65 6c  p(azArg[0], "hel
21960 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  p", n)==0 ){.   
21970 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
21980 6f 75 74 2c 20 22 25 73 22 2c 20 7a 48 65 6c 70  out, "%s", zHelp
21990 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66  );.  }else..  if
219a0 28 20 63 3d 3d 27 69 27 20 26 26 20 73 74 72 6e  ( c=='i' && strn
219b0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69  cmp(azArg[0], "i
219c0 6d 70 6f 72 74 22 2c 20 6e 29 3d 3d 30 20 29 7b  mport", n)==0 ){
219d0 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 61 62 6c  .    char *zTabl
219e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
219f0 20 2f 2a 20 49 6e 73 65 72 74 20 64 61 74 61 20   /* Insert data 
21a00 69 6e 74 6f 20 74 68 69 73 20 74 61 62 6c 65 20  into this table 
21a10 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 46 69  */.    char *zFi
21a20 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
21a30 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 66 69     /* Name of fi
21a40 6c 65 20 74 6f 20 65 78 74 72 61 20 63 6f 6e 74  le to extra cont
21a50 65 6e 74 20 66 72 6f 6d 20 2a 2f 0a 20 20 20 20  ent from */.    
21a60 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
21a70 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20 2f 2a 20 41  tmt = NULL; /* A
21a80 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
21a90 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20    int nCol;     
21aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21ab0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
21ac0 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ns in the table 
21ad0 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 42 79 74 65  */.    int nByte
21ae0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21af0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21b00 62 79 74 65 73 20 69 6e 20 61 6e 20 53 51 4c 20  bytes in an SQL 
21b10 73 74 72 69 6e 67 20 2a 2f 0a 20 20 20 20 69 6e  string */.    in
21b20 74 20 69 2c 20 6a 3b 20 20 20 20 20 20 20 20 20  t i, j;         
21b30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
21b40 70 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  p counters */.  
21b50 20 20 69 6e 74 20 6e 65 65 64 43 6f 6d 6d 69 74    int needCommit
21b60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
21b70 20 54 72 75 65 20 74 6f 20 43 4f 4d 4d 49 54 20   True to COMMIT 
21b80 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 61 74 20 65  or ROLLBACK at e
21b90 6e 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 53  nd */.    int nS
21ba0 65 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ep;             
21bb0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21bc0 6f 66 20 62 79 74 65 73 20 69 6e 20 70 2d 3e 63  of bytes in p->c
21bd0 6f 6c 53 65 70 61 72 61 74 6f 72 5b 5d 20 2a 2f  olSeparator[] */
21be0 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  .    char *zSql;
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c00 20 2f 2a 20 41 6e 20 53 51 4c 20 73 74 61 74 65   /* An SQL state
21c10 6d 65 6e 74 20 2a 2f 0a 20 20 20 20 49 6d 70 6f  ment */.    Impo
21c20 72 74 43 74 78 20 73 43 74 78 3b 20 20 20 20 20  rtCtx sCtx;     
21c30 20 20 20 20 20 20 20 20 2f 2a 20 52 65 61 64 65          /* Reade
21c40 72 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20  r context */.   
21c50 20 63 68 61 72 20 2a 28 53 51 4c 49 54 45 5f 43   char *(SQLITE_C
21c60 44 45 43 4c 20 2a 78 52 65 61 64 29 28 49 6d 70  DECL *xRead)(Imp
21c70 6f 72 74 43 74 78 2a 29 3b 20 2f 2a 20 46 75 6e  ortCtx*); /* Fun
21c80 63 20 74 6f 20 72 65 61 64 20 6f 6e 65 20 76 61  c to read one va
21c90 6c 75 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 28  lue */.    int (
21ca0 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 78 43  SQLITE_CDECL *xC
21cb0 6c 6f 73 65 72 29 28 46 49 4c 45 2a 29 3b 20 20  loser)(FILE*);  
21cc0 20 20 20 20 2f 2a 20 46 75 6e 63 20 74 6f 20 63      /* Func to c
21cd0 6c 6f 73 65 20 66 69 6c 65 20 2a 2f 0a 0a 20 20  lose file */..  
21ce0 20 20 69 66 28 20 6e 41 72 67 21 3d 33 20 29 7b    if( nArg!=3 ){
21cf0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
21d00 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
21d10 3a 20 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54  : .import FILE T
21d20 41 42 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ABLE\n");.      
21d30 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
21d40 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
21d50 20 20 7a 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b    zFile = azArg[
21d60 31 5d 3b 0a 20 20 20 20 7a 54 61 62 6c 65 20 3d  1];.    zTable =
21d70 20 61 7a 41 72 67 5b 32 5d 3b 0a 20 20 20 20 73   azArg[2];.    s
21d80 65 65 6e 49 6e 74 65 72 72 75 70 74 20 3d 20 30  eenInterrupt = 0
21d90 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 73 43  ;.    memset(&sC
21da0 74 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43  tx, 0, sizeof(sC
21db0 74 78 29 29 3b 0a 20 20 20 20 6f 70 65 6e 5f 64  tx));.    open_d
21dc0 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6e 53 65  b(p, 0);.    nSe
21dd0 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e  p = strlen30(p->
21de0 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  colSeparator);. 
21df0 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30 20 29     if( nSep==0 )
21e00 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
21e10 74 66 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20  tf(stderr,.     
21e20 20 20 20 20 20 20 20 20 20 20 20 20 22 45 72 72              "Err
21e30 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 63 6f 6c  or: non-null col
21e40 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 72 65  umn separator re
21e50 71 75 69 72 65 64 20 66 6f 72 20 69 6d 70 6f 72  quired for impor
21e60 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  t\n");.      ret
21e70 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
21e80 20 69 66 28 20 6e 53 65 70 3e 31 20 29 7b 0a 20   if( nSep>1 ){. 
21e90 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
21ea0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
21eb0 6d 75 6c 74 69 2d 63 68 61 72 61 63 74 65 72 20  multi-character 
21ec0 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72  column separator
21ed0 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20  s not allowed". 
21ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ef0 20 20 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72       " for impor
21f00 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  t\n");.      ret
21f10 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
21f20 20 6e 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30   nSep = strlen30
21f30 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72  (p->rowSeparator
21f40 29 3b 0a 20 20 20 20 69 66 28 20 6e 53 65 70 3d  );.    if( nSep=
21f50 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  =0 ){.      raw_
21f60 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
21f70 45 72 72 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20  Error: non-null 
21f80 72 6f 77 20 73 65 70 61 72 61 74 6f 72 20 72 65  row separator re
21f90 71 75 69 72 65 64 20 66 6f 72 20 69 6d 70 6f 72  quired for impor
21fa0 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  t\n");.      ret
21fb0 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
21fc0 20 69 66 28 20 6e 53 65 70 3d 3d 32 20 26 26 20   if( nSep==2 && 
21fd0 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 43 73  p->mode==MODE_Cs
21fe0 76 20 26 26 20 73 74 72 63 6d 70 28 70 2d 3e 72  v && strcmp(p->r
21ff0 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50  owSeparator, SEP
22000 5f 43 72 4c 66 29 3d 3d 30 20 29 7b 0a 20 20 20  _CrLf)==0 ){.   
22010 20 20 20 2f 2a 20 57 68 65 6e 20 69 6d 70 6f 72     /* When impor
22020 74 69 6e 67 20 43 53 56 20 28 6f 6e 6c 79 29 2c  ting CSV (only),
22030 20 69 66 20 74 68 65 20 72 6f 77 20 73 65 70 61   if the row sepa
22040 72 61 74 6f 72 20 69 73 20 73 65 74 20 74 6f 20  rator is set to 
22050 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 64 65 66  the.      ** def
22060 61 75 6c 74 20 6f 75 74 70 75 74 20 72 6f 77 20  ault output row 
22070 73 65 70 61 72 61 74 6f 72 2c 20 63 68 61 6e 67  separator, chang
22080 65 20 69 74 20 74 6f 20 74 68 65 20 64 65 66 61  e it to the defa
22090 75 6c 74 20 69 6e 70 75 74 0a 20 20 20 20 20 20  ult input.      
220a0 2a 2a 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72  ** row separator
220b0 2e 20 20 54 68 69 73 20 61 76 6f 69 64 73 20 68  .  This avoids h
220c0 61 76 69 6e 67 20 74 6f 20 6d 61 69 6e 74 61 69  aving to maintai
220d0 6e 20 64 69 66 66 65 72 65 6e 74 20 69 6e 70 75  n different inpu
220e0 74 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 6f  t.      ** and o
220f0 75 74 70 75 74 20 72 6f 77 20 73 65 70 61 72 61  utput row separa
22100 74 6f 72 73 2e 20 2a 2f 0a 20 20 20 20 20 20 73  tors. */.      s
22110 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
22120 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70  sizeof(p->rowSep
22130 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53  arator), p->rowS
22140 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f  eparator, SEP_Ro
22150 77 29 3b 0a 20 20 20 20 20 20 6e 53 65 70 20 3d  w);.      nSep =
22160 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 72 6f 77   strlen30(p->row
22170 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
22180 7d 0a 20 20 20 20 69 66 28 20 6e 53 65 70 3e 31  }.    if( nSep>1
22190 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
221a0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
221b0 72 6f 72 3a 20 6d 75 6c 74 69 2d 63 68 61 72 61  ror: multi-chara
221c0 63 74 65 72 20 72 6f 77 20 73 65 70 61 72 61 74  cter row separat
221d0 6f 72 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 22  ors not allowed"
221e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
221f0 20 20 20 20 20 20 20 22 20 66 6f 72 20 69 6d 70         " for imp
22200 6f 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  ort\n");.      r
22210 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
22220 20 20 20 73 43 74 78 2e 7a 46 69 6c 65 20 3d 20     sCtx.zFile = 
22230 7a 46 69 6c 65 3b 0a 20 20 20 20 73 43 74 78 2e  zFile;.    sCtx.
22240 6e 4c 69 6e 65 20 3d 20 31 3b 0a 20 20 20 20 69  nLine = 1;.    i
22250 66 28 20 73 43 74 78 2e 7a 46 69 6c 65 5b 30 5d  f( sCtx.zFile[0]
22260 3d 3d 27 7c 27 20 29 7b 0a 23 69 66 64 65 66 20  =='|' ){.#ifdef 
22270 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f 50 45  SQLITE_OMIT_POPE
22280 4e 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  N.      raw_prin
22290 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
222a0 72 3a 20 70 69 70 65 73 20 61 72 65 20 6e 6f 74  r: pipes are not
222b0 20 73 75 70 70 6f 72 74 65 64 20 69 6e 20 74 68   supported in th
222c0 69 73 20 4f 53 5c 6e 22 29 3b 0a 20 20 20 20 20  is OS\n");.     
222d0 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65   return 1;.#else
222e0 0a 20 20 20 20 20 20 73 43 74 78 2e 69 6e 20 3d  .      sCtx.in =
222f0 20 70 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c   popen(sCtx.zFil
22300 65 2b 31 2c 20 22 72 22 29 3b 0a 20 20 20 20 20  e+1, "r");.     
22310 20 73 43 74 78 2e 7a 46 69 6c 65 20 3d 20 22 3c   sCtx.zFile = "<
22320 70 69 70 65 3e 22 3b 0a 20 20 20 20 20 20 78 43  pipe>";.      xC
22330 6c 6f 73 65 72 20 3d 20 70 63 6c 6f 73 65 3b 0a  loser = pclose;.
22340 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65  #endif.    }else
22350 7b 0a 20 20 20 20 20 20 73 43 74 78 2e 69 6e 20  {.      sCtx.in 
22360 3d 20 66 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69  = fopen(sCtx.zFi
22370 6c 65 2c 20 22 72 62 22 29 3b 0a 20 20 20 20 20  le, "rb");.     
22380 20 78 43 6c 6f 73 65 72 20 3d 20 66 63 6c 6f 73   xCloser = fclos
22390 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  e;.    }.    if(
223a0 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 41   p->mode==MODE_A
223b0 73 63 69 69 20 29 7b 0a 20 20 20 20 20 20 78 52  scii ){.      xR
223c0 65 61 64 20 3d 20 61 73 63 69 69 5f 72 65 61 64  ead = ascii_read
223d0 5f 6f 6e 65 5f 66 69 65 6c 64 3b 0a 20 20 20 20  _one_field;.    
223e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 78 52 65  }else{.      xRe
223f0 61 64 20 3d 20 63 73 76 5f 72 65 61 64 5f 6f 6e  ad = csv_read_on
22400 65 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d 0a 20  e_field;.    }. 
22410 20 20 20 69 66 28 20 73 43 74 78 2e 69 6e 3d 3d     if( sCtx.in==
22420 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  0 ){.      utf8_
22430 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
22440 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70  Error: cannot op
22450 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46  en \"%s\"\n", zF
22460 69 6c 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ile);.      retu
22470 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
22480 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 3d 20 70  sCtx.cColSep = p
22490 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 30  ->colSeparator[0
224a0 5d 3b 0a 20 20 20 20 73 43 74 78 2e 63 52 6f 77  ];.    sCtx.cRow
224b0 53 65 70 20 3d 20 70 2d 3e 72 6f 77 53 65 70 61  Sep = p->rowSepa
224c0 72 61 74 6f 72 5b 30 5d 3b 0a 20 20 20 20 7a 53  rator[0];.    zS
224d0 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
224e0 69 6e 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46  intf("SELECT * F
224f0 52 4f 4d 20 25 73 22 2c 20 7a 54 61 62 6c 65 29  ROM %s", zTable)
22500 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d  ;.    if( zSql==
22510 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
22520 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
22530 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d  rror: out of mem
22540 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 78  ory\n");.      x
22550 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b  Closer(sCtx.in);
22560 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
22570 0a 20 20 20 20 7d 0a 20 20 20 20 6e 42 79 74 65  .    }.    nByte
22580 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 53 71 6c   = strlen30(zSql
22590 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
225a0 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
225b0 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20  ->db, zSql, -1, 
225c0 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  &pStmt, 0);.    
225d0 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68  import_append_ch
225e0 61 72 28 26 73 43 74 78 2c 20 30 29 3b 20 20 20  ar(&sCtx, 0);   
225f0 20 2f 2a 20 54 6f 20 65 6e 73 75 72 65 20 73 43   /* To ensure sC
22600 74 78 2e 7a 20 69 73 20 61 6c 6c 6f 63 61 74 65  tx.z is allocate
22610 64 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 20  d */.    if( rc 
22620 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c  && sqlite3_strgl
22630 6f 62 28 22 6e 6f 20 73 75 63 68 20 74 61 62 6c  ob("no such tabl
22640 65 3a 20 2a 22 2c 20 73 71 6c 69 74 65 33 5f 65  e: *", sqlite3_e
22650 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3d 3d 30  rrmsg(p->db))==0
22660 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a   ){.      char *
22670 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65  zCreate = sqlite
22680 33 5f 6d 70 72 69 6e 74 66 28 22 43 52 45 41 54  3_mprintf("CREAT
22690 45 20 54 41 42 4c 45 20 25 73 22 2c 20 7a 54 61  E TABLE %s", zTa
226a0 62 6c 65 29 3b 0a 20 20 20 20 20 20 63 68 61 72  ble);.      char
226b0 20 63 53 65 70 20 3d 20 27 28 27 3b 0a 20 20 20   cSep = '(';.   
226c0 20 20 20 77 68 69 6c 65 28 20 78 52 65 61 64 28     while( xRead(
226d0 26 73 43 74 78 29 20 29 7b 0a 20 20 20 20 20 20  &sCtx) ){.      
226e0 20 20 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69    zCreate = sqli
226f0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 25  te3_mprintf("%z%
22700 63 5c 6e 20 20 5c 22 25 77 5c 22 20 54 45 58 54  c\n  \"%w\" TEXT
22710 22 2c 20 7a 43 72 65 61 74 65 2c 20 63 53 65 70  ", zCreate, cSep
22720 2c 20 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20  , sCtx.z);.     
22730 20 20 20 63 53 65 70 20 3d 20 27 2c 27 3b 0a 20     cSep = ',';. 
22740 20 20 20 20 20 20 20 69 66 28 20 73 43 74 78 2e         if( sCtx.
22750 63 54 65 72 6d 21 3d 73 43 74 78 2e 63 43 6f 6c  cTerm!=sCtx.cCol
22760 53 65 70 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  Sep ) break;.   
22770 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63     }.      if( c
22780 53 65 70 3d 3d 27 28 27 20 29 7b 0a 20 20 20 20  Sep=='(' ){.    
22790 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
227a0 28 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20  (zCreate);.     
227b0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
227c0 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20  sCtx.z);.       
227d0 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e   xCloser(sCtx.in
227e0 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  );.        utf8_
227f0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25  printf(stderr,"%
22800 73 3a 20 65 6d 70 74 79 20 66 69 6c 65 5c 6e 22  s: empty file\n"
22810 2c 20 73 43 74 78 2e 7a 46 69 6c 65 29 3b 0a 20  , sCtx.zFile);. 
22820 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
22830 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
22840 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33  Create = sqlite3
22850 5f 6d 70 72 69 6e 74 66 28 22 25 7a 5c 6e 29 22  _mprintf("%z\n)"
22860 2c 20 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20  , zCreate);.    
22870 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
22880 78 65 63 28 70 2d 3e 64 62 2c 20 7a 43 72 65 61  xec(p->db, zCrea
22890 74 65 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  te, 0, 0, 0);.  
228a0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
228b0 28 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20  (zCreate);.     
228c0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
228d0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
228e0 74 64 65 72 72 2c 20 22 43 52 45 41 54 45 20 54  tderr, "CREATE T
228f0 41 42 4c 45 20 25 73 28 2e 2e 2e 29 20 66 61 69  ABLE %s(...) fai
22900 6c 65 64 3a 20 25 73 5c 6e 22 2c 20 7a 54 61 62  led: %s\n", zTab
22910 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  le,.            
22920 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d      sqlite3_errm
22930 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20  sg(p->db));.    
22940 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
22950 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20  (sCtx.z);.      
22960 20 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69    xCloser(sCtx.i
22970 6e 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  n);.        retu
22980 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rn 1;.      }.  
22990 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
229a0 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
229b0 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53  b, zSql, -1, &pS
229c0 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  tmt, 0);.    }. 
229d0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
229e0 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20 72  zSql);.    if( r
229f0 63 20 29 7b 0a 20 20 20 20 20 20 69 66 20 28 70  c ){.      if (p
22a00 53 74 6d 74 29 20 73 71 6c 69 74 65 33 5f 66 69  Stmt) sqlite3_fi
22a10 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
22a20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
22a30 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
22a40 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
22a50 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20  rrmsg(p->db));. 
22a60 20 20 20 20 20 78 43 6c 6f 73 65 72 28 73 43 74       xCloser(sCt
22a70 78 2e 69 6e 29 3b 0a 20 20 20 20 20 20 72 65 74  x.in);.      ret
22a80 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
22a90 20 6e 43 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f   nCol = sqlite3_
22aa0 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74  column_count(pSt
22ab0 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  mt);.    sqlite3
22ac0 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
22ad0 3b 0a 20 20 20 20 70 53 74 6d 74 20 3d 20 30 3b  ;.    pStmt = 0;
22ae0 0a 20 20 20 20 69 66 28 20 6e 43 6f 6c 3d 3d 30  .    if( nCol==0
22af0 20 29 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a 20   ) return 0; /* 
22b00 6e 6f 20 63 6f 6c 75 6d 6e 73 2c 20 6e 6f 20 65  no columns, no e
22b10 72 72 6f 72 20 2a 2f 0a 20 20 20 20 7a 53 71 6c  rror */.    zSql
22b20 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f   = sqlite3_mallo
22b30 63 36 34 28 20 6e 42 79 74 65 2a 32 20 2b 20 32  c64( nByte*2 + 2
22b40 30 20 2b 20 6e 43 6f 6c 2a 32 20 29 3b 0a 20 20  0 + nCol*2 );.  
22b50 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
22b60 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
22b70 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
22b80 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c  : out of memory\
22b90 6e 22 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73  n");.      xClos
22ba0 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
22bb0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
22bc0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73   }.    sqlite3_s
22bd0 6e 70 72 69 6e 74 66 28 6e 42 79 74 65 2b 32 30  nprintf(nByte+20
22be0 2c 20 7a 53 71 6c 2c 20 22 49 4e 53 45 52 54 20  , zSql, "INSERT 
22bf0 49 4e 54 4f 20 5c 22 25 77 5c 22 20 56 41 4c 55  INTO \"%w\" VALU
22c00 45 53 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a  ES(?", zTable);.
22c10 20 20 20 20 6a 20 3d 20 73 74 72 6c 65 6e 33 30      j = strlen30
22c20 28 7a 53 71 6c 29 3b 0a 20 20 20 20 66 6f 72 28  (zSql);.    for(
22c30 69 3d 31 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b  i=1; i<nCol; i++
22c40 29 7b 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6a 2b  ){.      zSql[j+
22c50 2b 5d 20 3d 20 27 2c 27 3b 0a 20 20 20 20 20 20  +] = ',';.      
22c60 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d 20 27 3f 27 3b  zSql[j++] = '?';
22c70 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 5b  .    }.    zSql[
22c80 6a 2b 2b 5d 20 3d 20 27 29 27 3b 0a 20 20 20 20  j++] = ')';.    
22c90 7a 53 71 6c 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20  zSql[j] = 0;.   
22ca0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
22cb0 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
22cc0 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74  zSql, -1, &pStmt
22cd0 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
22ce0 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  3_free(zSql);.  
22cf0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
22d00 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
22d10 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73  derr, "Error: %s
22d20 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  \n", sqlite3_err
22d30 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  msg(p->db));.   
22d40 20 20 20 69 66 20 28 70 53 74 6d 74 29 20 73 71     if (pStmt) sq
22d50 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
22d60 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 78 43 6c  Stmt);.      xCl
22d70 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
22d80 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
22d90 20 20 20 7d 0a 20 20 20 20 6e 65 65 64 43 6f 6d     }.    needCom
22da0 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 5f 67 65  mit = sqlite3_ge
22db0 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 70 2d 3e  t_autocommit(p->
22dc0 64 62 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 65  db);.    if( nee
22dd0 64 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74 65  dCommit ) sqlite
22de0 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 42  3_exec(p->db, "B
22df0 45 47 49 4e 22 2c 20 30 2c 20 30 2c 20 30 29 3b  EGIN", 0, 0, 0);
22e00 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 69  .    do{.      i
22e10 6e 74 20 73 74 61 72 74 4c 69 6e 65 20 3d 20 73  nt startLine = s
22e20 43 74 78 2e 6e 4c 69 6e 65 3b 0a 20 20 20 20 20  Ctx.nLine;.     
22e30 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c   for(i=0; i<nCol
22e40 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
22e50 63 68 61 72 20 2a 7a 20 3d 20 78 52 65 61 64 28  char *z = xRead(
22e60 26 73 43 74 78 29 3b 0a 20 20 20 20 20 20 20 20  &sCtx);.        
22e70 2f 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 44 69  /*.        ** Di
22e80 64 20 77 65 20 72 65 61 63 68 20 65 6e 64 2d 6f  d we reach end-o
22e90 66 2d 66 69 6c 65 20 62 65 66 6f 72 65 20 66 69  f-file before fi
22ea0 6e 64 69 6e 67 20 61 6e 79 20 63 6f 6c 75 6d 6e  nding any column
22eb0 73 3f 0a 20 20 20 20 20 20 20 20 2a 2a 20 49 66  s?.        ** If
22ec0 20 73 6f 2c 20 73 74 6f 70 20 69 6e 73 74 65 61   so, stop instea
22ed0 64 20 6f 66 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e  d of NULL fillin
22ee0 67 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  g the remaining 
22ef0 63 6f 6c 75 6d 6e 73 2e 0a 20 20 20 20 20 20 20  columns..       
22f00 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
22f10 7a 3d 3d 30 20 26 26 20 69 3d 3d 30 20 29 20 62  z==0 && i==0 ) b
22f20 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 2f 2a  reak;.        /*
22f30 0a 20 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20  .        ** Did 
22f40 77 65 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d  we reach end-of-
22f50 66 69 6c 65 20 4f 52 20 65 6e 64 2d 6f 66 2d 6c  file OR end-of-l
22f60 69 6e 65 20 62 65 66 6f 72 65 20 66 69 6e 64 69  ine before findi
22f70 6e 67 20 61 6e 79 0a 20 20 20 20 20 20 20 20 2a  ng any.        *
22f80 2a 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 41 53 43  * columns in ASC
22f90 49 49 20 6d 6f 64 65 3f 20 20 49 66 20 73 6f 2c  II mode?  If so,
22fa0 20 73 74 6f 70 20 69 6e 73 74 65 61 64 20 6f 66   stop instead of
22fb0 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 0a 20 20   NULL filling.  
22fc0 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 6d        ** the rem
22fd0 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a  aining columns..
22fe0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
22ff0 20 20 20 69 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d     if( p->mode==
23000 4d 4f 44 45 5f 41 73 63 69 69 20 26 26 20 28 7a  MODE_Ascii && (z
23010 3d 3d 30 20 7c 7c 20 7a 5b 30 5d 3d 3d 30 29 20  ==0 || z[0]==0) 
23020 26 26 20 69 3d 3d 30 20 29 20 62 72 65 61 6b 3b  && i==0 ) break;
23030 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
23040 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
23050 2c 20 69 2b 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  , i+1, z, -1, SQ
23060 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
23070 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3c 6e  .        if( i<n
23080 43 6f 6c 2d 31 20 26 26 20 73 43 74 78 2e 63 54  Col-1 && sCtx.cT
23090 65 72 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65  erm!=sCtx.cColSe
230a0 70 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  p ){.          u
230b0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
230c0 72 2c 20 22 25 73 3a 25 64 3a 20 65 78 70 65 63  r, "%s:%d: expec
230d0 74 65 64 20 25 64 20 63 6f 6c 75 6d 6e 73 20 62  ted %d columns b
230e0 75 74 20 66 6f 75 6e 64 20 25 64 20 2d 20 22 0a  ut found %d - ".
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23100 20 20 20 20 20 20 20 20 20 20 22 66 69 6c 6c 69            "filli
23110 6e 67 20 74 68 65 20 72 65 73 74 20 77 69 74 68  ng the rest with
23120 20 4e 55 4c 4c 5c 6e 22 2c 0a 20 20 20 20 20 20   NULL\n",.      
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23140 20 20 20 20 73 43 74 78 2e 7a 46 69 6c 65 2c 20      sCtx.zFile, 
23150 73 74 61 72 74 4c 69 6e 65 2c 20 6e 43 6f 6c 2c  startLine, nCol,
23160 20 69 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 20   i+1);.         
23170 20 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 20   i += 2;.       
23180 20 20 20 77 68 69 6c 65 28 20 69 3c 3d 6e 43 6f     while( i<=nCo
23190 6c 20 29 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e  l ){ sqlite3_bin
231a0 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 29  d_null(pStmt, i)
231b0 3b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  ; i++; }.       
231c0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
231d0 20 69 66 28 20 73 43 74 78 2e 63 54 65 72 6d 3d   if( sCtx.cTerm=
231e0 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 7b  =sCtx.cColSep ){
231f0 0a 20 20 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  .        do{.   
23200 20 20 20 20 20 20 20 78 52 65 61 64 28 26 73 43         xRead(&sC
23210 74 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  tx);.          i
23220 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 77 68 69  ++;.        }whi
23230 6c 65 28 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d  le( sCtx.cTerm==
23240 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 3b 0a  sCtx.cColSep );.
23250 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
23260 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a  ntf(stderr, "%s:
23270 25 64 3a 20 65 78 70 65 63 74 65 64 20 25 64 20  %d: expected %d 
23280 63 6f 6c 75 6d 6e 73 20 62 75 74 20 66 6f 75 6e  columns but foun
23290 64 20 25 64 20 2d 20 22 0a 20 20 20 20 20 20 20  d %d - ".       
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232b0 20 22 65 78 74 72 61 73 20 69 67 6e 6f 72 65 64   "extras ignored
232c0 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
232d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 43 74               sCt
232e0 78 2e 7a 46 69 6c 65 2c 20 73 74 61 72 74 4c 69  x.zFile, startLi
232f0 6e 65 2c 20 6e 43 6f 6c 2c 20 69 29 3b 0a 20 20  ne, nCol, i);.  
23300 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
23310 69 3e 3d 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20  i>=nCol ){.     
23320 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28     sqlite3_step(
23330 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20  pStmt);.        
23340 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73  rc = sqlite3_res
23350 65 74 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  et(pStmt);.     
23360 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
23370 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
23380 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
23390 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 49 4e  derr, "%s:%d: IN
233a0 53 45 52 54 20 66 61 69 6c 65 64 3a 20 25 73 5c  SERT failed: %s\
233b0 6e 22 2c 20 73 43 74 78 2e 7a 46 69 6c 65 2c 0a  n", sCtx.zFile,.
233c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233d0 20 20 20 20 20 20 73 74 61 72 74 4c 69 6e 65 2c        startLine,
233e0 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
233f0 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20  p->db));.       
23400 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
23410 77 68 69 6c 65 28 20 73 43 74 78 2e 63 54 65 72  while( sCtx.cTer
23420 6d 21 3d 45 4f 46 20 29 3b 0a 0a 20 20 20 20 78  m!=EOF );..    x
23430 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b  Closer(sCtx.in);
23440 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
23450 65 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 73  e(sCtx.z);.    s
23460 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
23470 70 53 74 6d 74 29 3b 0a 20 20 20 20 69 66 28 20  pStmt);.    if( 
23480 6e 65 65 64 43 6f 6d 6d 69 74 20 29 20 73 71 6c  needCommit ) sql
23490 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
234a0 20 22 43 4f 4d 4d 49 54 22 2c 20 30 2c 20 30 2c   "COMMIT", 0, 0,
234b0 20 30 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 69   0);.  }else..#i
234c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
234d0 45 53 54 41 42 4c 45 0a 20 20 69 66 28 20 63 3d  ESTABLE.  if( c=
234e0 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='i' && strncmp(
234f0 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d 70 6f 73  azArg[0], "impos
23500 74 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ter", n)==0 ){. 
23510 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20     char *zSql;. 
23520 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 69 73     char *zCollis
23530 74 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  t = 0;.    sqlit
23540 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
23550 20 20 20 20 69 6e 74 20 74 6e 75 6d 20 3d 20 30      int tnum = 0
23560 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
23570 20 69 66 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a   if( nArg!=3 ){.
23580 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
23590 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
235a0 3a 20 2e 69 6d 70 6f 73 74 65 72 20 49 4e 44 45  : .imposter INDE
235b0 58 20 49 4d 50 4f 53 54 45 52 5c 6e 22 29 3b 0a  X IMPOSTER\n");.
235c0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
235d0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
235e0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
235f0 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  }.    open_db(p,
23600 20 30 29 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20   0);.    zSql = 
23610 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
23620 22 53 45 4c 45 43 54 20 72 6f 6f 74 70 61 67 65  "SELECT rootpage
23630 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
23640 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20  ter".           
23650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23660 22 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 25 71  " WHERE name='%q
23670 27 20 41 4e 44 20 74 79 70 65 3d 27 69 6e 64 65  ' AND type='inde
23680 78 27 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a  x'", azArg[1]);.
23690 20 20 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70      sqlite3_prep
236a0 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53  are_v2(p->db, zS
236b0 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  ql, -1, &pStmt, 
236c0 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
236d0 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20  free(zSql);.    
236e0 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70  if( sqlite3_step
236f0 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
23700 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 74 6e 75  ROW ){.      tnu
23710 6d 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  m = sqlite3_colu
23720 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 20 30 29  mn_int(pStmt, 0)
23730 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
23740 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
23750 6d 74 29 3b 0a 20 20 20 20 69 66 28 20 74 6e 75  mt);.    if( tnu
23760 6d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74  m==0 ){.      ut
23770 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
23780 2c 20 22 6e 6f 20 73 75 63 68 20 69 6e 64 65 78  , "no such index
23790 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41  : \"%s\"\n", azA
237a0 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 72 63  rg[1]);.      rc
237b0 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f   = 1;.      goto
237c0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
237d0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53  it;.    }.    zS
237e0 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
237f0 69 6e 74 66 28 22 50 52 41 47 4d 41 20 69 6e 64  intf("PRAGMA ind
23800 65 78 5f 78 69 6e 66 6f 3d 27 25 71 27 22 2c 20  ex_xinfo='%q'", 
23810 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 72  azArg[1]);.    r
23820 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
23830 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53  are_v2(p->db, zS
23840 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  ql, -1, &pStmt, 
23850 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
23860 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20  free(zSql);.    
23870 69 20 3d 20 30 3b 0a 20 20 20 20 77 68 69 6c 65  i = 0;.    while
23880 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ( sqlite3_step(p
23890 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
238a0 57 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20  W ){.      char 
238b0 7a 4c 61 62 65 6c 5b 32 30 5d 3b 0a 20 20 20 20  zLabel[20];.    
238c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
238d0 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  ol = (const char
238e0 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
238f0 5f 74 65 78 74 28 70 53 74 6d 74 2c 32 29 3b 0a  _text(pStmt,2);.
23900 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20        i++;.     
23910 20 69 66 28 20 7a 43 6f 6c 3d 3d 30 20 29 7b 0a   if( zCol==0 ){.
23920 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
23930 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70  te3_column_int(p
23940 53 74 6d 74 2c 31 29 3d 3d 2d 31 20 29 7b 0a 20  Stmt,1)==-1 ){. 
23950 20 20 20 20 20 20 20 20 20 7a 43 6f 6c 20 3d 20           zCol = 
23960 22 5f 52 4f 57 49 44 5f 22 3b 0a 20 20 20 20 20  "_ROWID_";.     
23970 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
23980 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
23990 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c 61 62  intf(sizeof(zLab
239a0 65 6c 29 2c 7a 4c 61 62 65 6c 2c 22 65 78 70 72  el),zLabel,"expr
239b0 25 64 22 2c 69 29 3b 0a 20 20 20 20 20 20 20 20  %d",i);.        
239c0 20 20 7a 43 6f 6c 20 3d 20 7a 4c 61 62 65 6c 3b    zCol = zLabel;
239d0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
239e0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 43 6f   }.      if( zCo
239f0 6c 6c 69 73 74 3d 3d 30 20 29 7b 0a 20 20 20 20  llist==0 ){.    
23a00 20 20 20 20 7a 43 6f 6c 6c 69 73 74 20 3d 20 73      zCollist = s
23a10 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
23a20 5c 22 25 77 5c 22 22 2c 20 7a 43 6f 6c 29 3b 0a  \"%w\"", zCol);.
23a30 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
23a40 20 20 20 20 20 7a 43 6f 6c 6c 69 73 74 20 3d 20       zCollist = 
23a50 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
23a60 22 25 7a 2c 5c 22 25 77 5c 22 22 2c 20 7a 43 6f  "%z,\"%w\"", zCo
23a70 6c 6c 69 73 74 2c 20 7a 43 6f 6c 29 3b 0a 20 20  llist, zCol);.  
23a80 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
23a90 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
23aa0 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 7a 53 71  (pStmt);.    zSq
23ab0 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  l = sqlite3_mpri
23ac0 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20 20 22  ntf(.          "
23ad0 43 52 45 41 54 45 20 54 41 42 4c 45 20 5c 22 25  CREATE TABLE \"%
23ae0 77 5c 22 28 25 73 2c 50 52 49 4d 41 52 59 20 4b  w\"(%s,PRIMARY K
23af0 45 59 28 25 73 29 29 57 49 54 48 4f 55 54 20 52  EY(%s))WITHOUT R
23b00 4f 57 49 44 22 2c 0a 20 20 20 20 20 20 20 20 20  OWID",.         
23b10 20 61 7a 41 72 67 5b 32 5d 2c 20 7a 43 6f 6c 6c   azArg[2], zColl
23b20 69 73 74 2c 20 7a 43 6f 6c 6c 69 73 74 29 3b 0a  ist, zCollist);.
23b30 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
23b40 28 7a 43 6f 6c 6c 69 73 74 29 3b 0a 20 20 20 20  (zCollist);.    
23b50 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73  rc = sqlite3_tes
23b60 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
23b70 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54  _TESTCTRL_IMPOST
23b80 45 52 2c 20 70 2d 3e 64 62 2c 20 22 6d 61 69 6e  ER, p->db, "main
23b90 22 2c 20 31 2c 20 74 6e 75 6d 29 3b 0a 20 20 20  ", 1, tnum);.   
23ba0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
23bb0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
23bc0 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
23bd0 3e 64 62 2c 20 7a 53 71 6c 2c 20 30 2c 20 30 2c  >db, zSql, 0, 0,
23be0 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
23bf0 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
23c00 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
23c10 49 4d 50 4f 53 54 45 52 2c 20 70 2d 3e 64 62 2c  IMPOSTER, p->db,
23c20 20 22 6d 61 69 6e 22 2c 20 30 2c 20 30 29 3b 0a   "main", 0, 0);.
23c30 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a        if( rc ){.
23c40 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
23c50 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
23c60 6f 72 20 69 6e 20 5b 25 73 5d 3a 20 25 73 5c 6e  or in [%s]: %s\n
23c70 22 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  ", zSql, sqlite3
23c80 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b  _errmsg(p->db));
23c90 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
23ca0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
23cb0 66 28 73 74 64 6f 75 74 2c 20 22 25 73 3b 5c 6e  f(stdout, "%s;\n
23cc0 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20  ", zSql);.      
23cd0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
23ce0 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  out,.           
23cf0 22 57 41 52 4e 49 4e 47 3a 20 77 72 69 74 69 6e  "WARNING: writin
23d00 67 20 74 6f 20 61 6e 20 69 6d 70 6f 73 74 65 72  g to an imposter
23d10 20 74 61 62 6c 65 20 77 69 6c 6c 20 63 6f 72 72   table will corr
23d20 75 70 74 20 74 68 65 20 69 6e 64 65 78 21 5c 6e  upt the index!\n
23d30 22 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20  ".        );.   
23d40 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
23d50 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
23d60 28 73 74 64 65 72 72 2c 20 22 53 51 4c 49 54 45  (stderr, "SQLITE
23d70 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54  _TESTCTRL_IMPOST
23d80 45 52 20 72 65 74 75 72 6e 73 20 25 64 5c 6e 22  ER returns %d\n"
23d90 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 72 63 20  , rc);.      rc 
23da0 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  = 1;.    }.    s
23db0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
23dc0 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  );.  }else.#endi
23dd0 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
23de0 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 53 54 5f 43  LITE_OMIT_TEST_C
23df0 4f 4e 54 52 4f 4c 29 20 2a 2f 0a 0a 23 69 66 64  ONTROL) */..#ifd
23e00 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
23e10 5f 49 4f 54 52 41 43 45 0a 20 20 69 66 28 20 63  _IOTRACE.  if( c
23e20 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70  =='i' && strncmp
23e30 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6f 74 72  (azArg[0], "iotr
23e40 61 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ace", n)==0 ){. 
23e50 20 20 20 53 51 4c 49 54 45 5f 41 50 49 20 65 78     SQLITE_API ex
23e60 74 65 72 6e 20 76 6f 69 64 20 28 53 51 4c 49 54  tern void (SQLIT
23e70 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33  E_CDECL *sqlite3
23e80 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63  IoTrace)(const c
23e90 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 20 20  har*, ...);.    
23ea0 69 66 28 20 69 6f 74 72 61 63 65 20 26 26 20 69  if( iotrace && i
23eb0 6f 74 72 61 63 65 21 3d 73 74 64 6f 75 74 20 29  otrace!=stdout )
23ec0 20 66 63 6c 6f 73 65 28 69 6f 74 72 61 63 65 29   fclose(iotrace)
23ed0 3b 0a 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20  ;.    iotrace = 
23ee0 30 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c  0;.    if( nArg<
23ef0 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  2 ){.      sqlit
23f00 65 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a 20  e3IoTrace = 0;. 
23f10 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
23f20 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20 22 2d  cmp(azArg[1], "-
23f30 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ")==0 ){.      s
23f40 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 3d 20  qlite3IoTrace = 
23f50 69 6f 74 72 61 63 65 50 72 69 6e 74 66 3b 0a 20  iotracePrintf;. 
23f60 20 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20 73       iotrace = s
23f70 74 64 6f 75 74 3b 0a 20 20 20 20 7d 65 6c 73 65  tdout;.    }else
23f80 7b 0a 20 20 20 20 20 20 69 6f 74 72 61 63 65 20  {.      iotrace 
23f90 3d 20 66 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d  = fopen(azArg[1]
23fa0 2c 20 22 77 22 29 3b 0a 20 20 20 20 20 20 69 66  , "w");.      if
23fb0 28 20 69 6f 74 72 61 63 65 3d 3d 30 20 29 7b 0a  ( iotrace==0 ){.
23fc0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
23fd0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
23fe0 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  or: cannot open 
23ff0 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67  \"%s\"\n", azArg
24000 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 71  [1]);.        sq
24010 6c 69 74 65 33 49 6f 54 72 61 63 65 20 3d 20 30  lite3IoTrace = 0
24020 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
24030 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
24040 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6f         sqlite3Io
24050 54 72 61 63 65 20 3d 20 69 6f 74 72 61 63 65 50  Trace = iotraceP
24060 72 69 6e 74 66 3b 0a 20 20 20 20 20 20 7d 0a 20  rintf;.      }. 
24070 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e     }.  }else.#en
24080 64 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c  dif..  if( c=='l
24090 27 20 26 26 20 6e 3e 3d 35 20 26 26 20 73 74 72  ' && n>=5 && str
240a0 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
240b0 6c 69 6d 69 74 73 22 2c 20 6e 29 3d 3d 30 20 29  limits", n)==0 )
240c0 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
240d0 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20  st struct {.    
240e0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
240f0 4c 69 6d 69 74 4e 61 6d 65 3b 20 20 20 2f 2a 20  LimitName;   /* 
24100 4e 61 6d 65 20 6f 66 20 61 20 6c 69 6d 69 74 20  Name of a limit 
24110 2a 2f 0a 20 20 20 20 20 20 20 69 6e 74 20 6c 69  */.       int li
24120 6d 69 74 43 6f 64 65 3b 20 20 20 20 20 20 20 20  mitCode;        
24130 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 63      /* Integer c
24140 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6c 69 6d  ode for that lim
24150 69 74 20 2a 2f 0a 20 20 20 20 7d 20 61 4c 69 6d  it */.    } aLim
24160 69 74 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b  it[] = {.      {
24170 20 22 6c 65 6e 67 74 68 22 2c 20 20 20 20 20 20   "length",      
24180 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
24190 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20 20 20  _LIMIT_LENGTH   
241a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241b0 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73 71 6c   },.      { "sql
241c0 5f 6c 65 6e 67 74 68 22 2c 20 20 20 20 20 20 20  _length",       
241d0 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49       SQLITE_LIMI
241e0 54 5f 53 51 4c 5f 4c 45 4e 47 54 48 20 20 20 20  T_SQL_LENGTH    
241f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
24200 20 20 20 20 20 7b 20 22 63 6f 6c 75 6d 6e 22 2c       { "column",
24210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24220 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c  SQLITE_LIMIT_COL
24230 55 4d 4e 20 20 20 20 20 20 20 20 20 20 20 20 20  UMN             
24240 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
24250 7b 20 22 65 78 70 72 5f 64 65 70 74 68 22 2c 20  { "expr_depth", 
24260 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
24270 45 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50  E_LIMIT_EXPR_DEP
24280 54 48 20 20 20 20 20 20 20 20 20 20 20 20 20 20  TH              
24290 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 63 6f    },.      { "co
242a0 6d 70 6f 75 6e 64 5f 73 65 6c 65 63 74 22 2c 20  mpound_select", 
242b0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d        SQLITE_LIM
242c0 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45  IT_COMPOUND_SELE
242d0 43 54 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  CT           },.
242e0 20 20 20 20 20 20 7b 20 22 76 64 62 65 5f 6f 70        { "vdbe_op
242f0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
24300 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 44   SQLITE_LIMIT_VD
24310 42 45 5f 4f 50 20 20 20 20 20 20 20 20 20 20 20  BE_OP           
24320 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
24330 20 7b 20 22 66 75 6e 63 74 69 6f 6e 5f 61 72 67   { "function_arg
24340 22 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  ",          SQLI
24350 54 45 5f 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f  TE_LIMIT_FUNCTIO
24360 4e 5f 41 52 47 20 20 20 20 20 20 20 20 20 20 20  N_ARG           
24370 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 61     },.      { "a
24380 74 74 61 63 68 65 64 22 2c 20 20 20 20 20 20 20  ttached",       
24390 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49         SQLITE_LI
243a0 4d 49 54 5f 41 54 54 41 43 48 45 44 20 20 20 20  MIT_ATTACHED    
243b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
243c0 0a 20 20 20 20 20 20 7b 20 22 6c 69 6b 65 5f 70  .      { "like_p
243d0 61 74 74 65 72 6e 5f 6c 65 6e 67 74 68 22 2c 20  attern_length", 
243e0 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c    SQLITE_LIMIT_L
243f0 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47  IKE_PATTERN_LENG
24400 54 48 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  TH       },.    
24410 20 20 7b 20 22 76 61 72 69 61 62 6c 65 5f 6e 75    { "variable_nu
24420 6d 62 65 72 22 2c 20 20 20 20 20 20 20 53 51 4c  mber",       SQL
24430 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42  ITE_LIMIT_VARIAB
24440 4c 45 5f 4e 55 4d 42 45 52 20 20 20 20 20 20 20  LE_NUMBER       
24450 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
24460 74 72 69 67 67 65 72 5f 64 65 70 74 68 22 2c 20  trigger_depth", 
24470 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
24480 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50  IMIT_TRIGGER_DEP
24490 54 48 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  TH             }
244a0 2c 0a 20 20 20 20 20 20 7b 20 22 77 6f 72 6b 65  ,.      { "worke
244b0 72 5f 74 68 72 65 61 64 73 22 2c 20 20 20 20 20  r_threads",     
244c0 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
244d0 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 20  WORKER_THREADS  
244e0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
244f0 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6e   };.    int i, n
24500 32 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70  2;.    open_db(p
24510 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 6e 41  , 0);.    if( nA
24520 72 67 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 66  rg==1 ){.      f
24530 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53  or(i=0; i<ArrayS
24540 69 7a 65 28 61 4c 69 6d 69 74 29 3b 20 69 2b 2b  ize(aLimit); i++
24550 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74  ){.        print
24560 66 28 22 25 32 30 73 20 25 64 5c 6e 22 2c 20 61  f("%20s %d\n", a
24570 4c 69 6d 69 74 5b 69 5d 2e 7a 4c 69 6d 69 74 4e  Limit[i].zLimitN
24580 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
24590 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69      sqlite3_limi
245a0 74 28 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b  t(p->db, aLimit[
245b0 69 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 20 2d 31  i].limitCode, -1
245c0 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
245d0 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3e 33  }else if( nArg>3
245e0 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
245f0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
24600 61 67 65 3a 20 2e 6c 69 6d 69 74 20 4e 41 4d 45  age: .limit NAME
24610 20 3f 4e 45 57 2d 56 41 4c 55 45 3f 5c 6e 22 29   ?NEW-VALUE?\n")
24620 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
24630 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
24640 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
24650 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
24660 6e 74 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a  nt iLimit = -1;.
24670 20 20 20 20 20 20 6e 32 20 3d 20 73 74 72 6c 65        n2 = strle
24680 6e 33 30 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  n30(azArg[1]);. 
24690 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
246a0 41 72 72 61 79 53 69 7a 65 28 61 4c 69 6d 69 74  ArraySize(aLimit
246b0 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ); i++){.       
246c0 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72   if( sqlite3_str
246d0 6e 69 63 6d 70 28 61 4c 69 6d 69 74 5b 69 5d 2e  nicmp(aLimit[i].
246e0 7a 4c 69 6d 69 74 4e 61 6d 65 2c 20 61 7a 41 72  zLimitName, azAr
246f0 67 5b 31 5d 2c 20 6e 32 29 3d 3d 30 20 29 7b 0a  g[1], n2)==0 ){.
24700 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 4c            if( iL
24710 69 6d 69 74 3c 30 20 29 7b 0a 20 20 20 20 20 20  imit<0 ){.      
24720 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 69        iLimit = i
24730 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
24740 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  e{.            u
24750 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
24760 72 2c 20 22 61 6d 62 69 67 75 6f 75 73 20 6c 69  r, "ambiguous li
24770 6d 69 74 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20  mit: \"%s\"\n", 
24780 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
24790 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
247a0 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
247b0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
247c0 74 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  t;.          }. 
247d0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
247e0 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69  .      if( iLimi
247f0 74 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75  t<0 ){.        u
24800 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
24810 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6c 69 6d 69  r, "unknown limi
24820 74 3a 20 5c 22 25 73 5c 22 5c 6e 22 0a 20 20 20  t: \"%s\"\n".   
24830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24840 20 20 20 20 20 22 65 6e 74 65 72 20 5c 22 2e 6c       "enter \".l
24850 69 6d 69 74 73 5c 22 20 77 69 74 68 20 6e 6f 20  imits\" with no 
24860 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 61 20  arguments for a 
24870 6c 69 73 74 2e 5c 6e 22 2c 0a 20 20 20 20 20 20  list.\n",.      
24880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24890 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20     azArg[1]);.  
248a0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
248b0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
248c0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
248d0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
248e0 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20  nArg==3 ){.     
248f0 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74     sqlite3_limit
24900 28 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69  (p->db, aLimit[i
24910 4c 69 6d 69 74 5d 2e 6c 69 6d 69 74 43 6f 64 65  Limit].limitCode
24920 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24930 20 20 20 20 20 20 20 20 28 69 6e 74 29 69 6e 74          (int)int
24940 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b  egerValue(azArg[
24950 32 5d 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  2]));.      }.  
24960 20 20 20 20 70 72 69 6e 74 66 28 22 25 32 30 73      printf("%20s
24970 20 25 64 5c 6e 22 2c 20 61 4c 69 6d 69 74 5b 69   %d\n", aLimit[i
24980 4c 69 6d 69 74 5d 2e 7a 4c 69 6d 69 74 4e 61 6d  Limit].zLimitNam
24990 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
249a0 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d  sqlite3_limit(p-
249b0 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d  >db, aLimit[iLim
249c0 69 74 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 20 2d  it].limitCode, -
249d0 31 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  1));.    }.  }el
249e0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27  se..  if( c=='l'
249f0 20 26 26 20 6e 3e 32 20 26 26 20 73 74 72 6e 63   && n>2 && strnc
24a00 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 69  mp(azArg[0], "li
24a10 6e 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  nt", n)==0 ){.  
24a20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
24a30 0a 20 20 20 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d  .    lintDotComm
24a40 61 6e 64 28 70 2c 20 61 7a 41 72 67 2c 20 6e 41  and(p, azArg, nA
24a50 72 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 69  rg);.  }else..#i
24a60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24a70 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
24a80 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26  .  if( c=='l' &&
24a90 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
24aa0 5d 2c 20 22 6c 6f 61 64 22 2c 20 6e 29 3d 3d 30  ], "load", n)==0
24ab0 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
24ac0 61 72 20 2a 7a 46 69 6c 65 2c 20 2a 7a 50 72 6f  ar *zFile, *zPro
24ad0 63 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72  c;.    char *zEr
24ae0 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 69 66  rMsg = 0;.    if
24af0 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20  ( nArg<2 ){.    
24b00 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
24b10 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6c 6f  err, "Usage: .lo
24b20 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59 50 4f  ad FILE ?ENTRYPO
24b30 49 4e 54 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20  INT?\n");.      
24b40 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f  rc = 1;.      go
24b50 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
24b60 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  exit;.    }.    
24b70 7a 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d  zFile = azArg[1]
24b80 3b 0a 20 20 20 20 7a 50 72 6f 63 20 3d 20 6e 41  ;.    zProc = nA
24b90 72 67 3e 3d 33 20 3f 20 61 7a 41 72 67 5b 32 5d  rg>=3 ? azArg[2]
24ba0 20 3a 20 30 3b 0a 20 20 20 20 6f 70 65 6e 5f 64   : 0;.    open_d
24bb0 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 72 63 20  b(p, 0);.    rc 
24bc0 3d 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65  = sqlite3_load_e
24bd0 78 74 65 6e 73 69 6f 6e 28 70 2d 3e 64 62 2c 20  xtension(p->db, 
24be0 7a 46 69 6c 65 2c 20 7a 50 72 6f 63 2c 20 26 7a  zFile, zProc, &z
24bf0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66 28  ErrMsg);.    if(
24c00 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
24c10 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
24c20 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
24c30 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d  or: %s\n", zErrM
24c40 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  sg);.      sqlit
24c50 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
24c60 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
24c70 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65      }.  }else.#e
24c80 6e 64 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27  ndif..  if( c=='
24c90 6c 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  l' && strncmp(az
24ca0 41 72 67 5b 30 5d 2c 20 22 6c 6f 67 22 2c 20 6e  Arg[0], "log", n
24cb0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
24cc0 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20  nArg!=2 ){.     
24cd0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
24ce0 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6c 6f 67  rr, "Usage: .log
24cf0 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b 0a 20   FILENAME\n");. 
24d00 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
24d10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f   }else{.      co
24d20 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 20  nst char *zFile 
24d30 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20  = azArg[1];.    
24d40 20 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c    output_file_cl
24d50 6f 73 65 28 70 2d 3e 70 4c 6f 67 29 3b 0a 20 20  ose(p->pLog);.  
24d60 20 20 20 20 70 2d 3e 70 4c 6f 67 20 3d 20 6f 75      p->pLog = ou
24d70 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a  tput_file_open(z
24d80 46 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  File);.    }.  }
24d90 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
24da0 6d 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  m' && strncmp(az
24db0 41 72 67 5b 30 5d 2c 20 22 6d 6f 64 65 22 2c 20  Arg[0], "mode", 
24dc0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e  n)==0 ){.    con
24dd0 73 74 20 63 68 61 72 20 2a 7a 4d 6f 64 65 20 3d  st char *zMode =
24de0 20 6e 41 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67   nArg>=2 ? azArg
24df0 5b 31 5d 20 3a 20 22 22 3b 0a 20 20 20 20 69 6e  [1] : "";.    in
24e00 74 20 6e 32 20 3d 20 28 69 6e 74 29 73 74 72 6c  t n2 = (int)strl
24e10 65 6e 28 7a 4d 6f 64 65 29 3b 0a 20 20 20 20 69  en(zMode);.    i
24e20 6e 74 20 63 32 20 3d 20 7a 4d 6f 64 65 5b 30 5d  nt c2 = zMode[0]
24e30 3b 0a 20 20 20 20 69 66 28 20 63 32 3d 3d 27 6c  ;.    if( c2=='l
24e40 27 20 26 26 20 6e 32 3e 32 20 26 26 20 73 74 72  ' && n2>2 && str
24e50 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c  ncmp(azArg[1],"l
24e60 69 6e 65 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  ines",n2)==0 ){.
24e70 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
24e80 4d 4f 44 45 5f 4c 69 6e 65 3b 0a 20 20 20 20 20  MODE_Line;.     
24e90 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
24ea0 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53  f(sizeof(p->rowS
24eb0 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f  eparator), p->ro
24ec0 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f  wSeparator, SEP_
24ed0 52 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  Row);.    }else 
24ee0 69 66 28 20 63 32 3d 3d 27 63 27 20 26 26 20 73  if( c2=='c' && s
24ef0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  trncmp(azArg[1],
24f00 22 63 6f 6c 75 6d 6e 73 22 2c 6e 32 29 3d 3d 30  "columns",n2)==0
24f10 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64   ){.      p->mod
24f20 65 20 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b  e = MODE_Column;
24f30 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
24f40 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
24f50 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c  ->rowSeparator),
24f60 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72   p->rowSeparator
24f70 2c 20 53 45 50 5f 52 6f 77 29 3b 0a 20 20 20 20  , SEP_Row);.    
24f80 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 6c  }else if( c2=='l
24f90 27 20 26 26 20 6e 32 3e 32 20 26 26 20 73 74 72  ' && n2>2 && str
24fa0 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c  ncmp(azArg[1],"l
24fb0 69 73 74 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20  ist",n2)==0 ){. 
24fc0 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d       p->mode = M
24fd0 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 20 20 20 20  ODE_List;.      
24fe0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
24ff0 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65  (sizeof(p->colSe
25000 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c  parator), p->col
25010 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43  Separator, SEP_C
25020 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20 73 71  olumn);.      sq
25030 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
25040 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61  izeof(p->rowSepa
25050 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65  rator), p->rowSe
25060 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77  parator, SEP_Row
25070 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
25080 20 63 32 3d 3d 27 68 27 20 26 26 20 73 74 72 6e   c2=='h' && strn
25090 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 68 74  cmp(azArg[1],"ht
250a0 6d 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  ml",n2)==0 ){.  
250b0 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
250c0 44 45 5f 48 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c  DE_Html;.    }el
250d0 73 65 20 69 66 28 20 63 32 3d 3d 27 74 27 20 26  se if( c2=='t' &
250e0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
250f0 31 5d 2c 22 74 63 6c 22 2c 6e 32 29 3d 3d 30 20  1],"tcl",n2)==0 
25100 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65  ){.      p->mode
25110 20 3d 20 4d 4f 44 45 5f 54 63 6c 3b 0a 20 20 20   = MODE_Tcl;.   
25120 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
25130 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f  ntf(sizeof(p->co
25140 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e  lSeparator), p->
25150 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 20 53 45  colSeparator, SE
25160 50 5f 53 70 61 63 65 29 3b 0a 20 20 20 20 20 20  P_Space);.      
25170 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
25180 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65  (sizeof(p->rowSe
25190 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77  parator), p->row
251a0 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52  Separator, SEP_R
251b0 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ow);.    }else i
251c0 66 28 20 63 32 3d 3d 27 63 27 20 26 26 20 73 74  f( c2=='c' && st
251d0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
251e0 63 73 76 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20  csv",n2)==0 ){. 
251f0 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d       p->mode = M
25200 4f 44 45 5f 43 73 76 3b 0a 20 20 20 20 20 20 73  ODE_Csv;.      s
25210 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
25220 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70  sizeof(p->colSep
25230 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53  arator), p->colS
25240 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 6f  eparator, SEP_Co
25250 6d 6d 61 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  mma);.      sqli
25260 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
25270 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61  eof(p->rowSepara
25280 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61  tor), p->rowSepa
25290 72 61 74 6f 72 2c 20 53 45 50 5f 43 72 4c 66 29  rator, SEP_CrLf)
252a0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
252b0 63 32 3d 3d 27 74 27 20 26 26 20 73 74 72 6e 63  c2=='t' && strnc
252c0 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 74 61 62  mp(azArg[1],"tab
252d0 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20  s",n2)==0 ){.   
252e0 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44     p->mode = MOD
252f0 45 5f 4c 69 73 74 3b 0a 20 20 20 20 20 20 73 71  E_List;.      sq
25300 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
25310 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61  izeof(p->colSepa
25320 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65  rator), p->colSe
25330 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 54 61 62  parator, SEP_Tab
25340 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
25350 20 63 32 3d 3d 27 69 27 20 26 26 20 73 74 72 6e   c2=='i' && strn
25360 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 69 6e  cmp(azArg[1],"in
25370 73 65 72 74 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  sert",n2)==0 ){.
25380 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
25390 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20  MODE_Insert;.   
253a0 20 20 20 73 65 74 5f 74 61 62 6c 65 5f 6e 61 6d     set_table_nam
253b0 65 28 70 2c 20 6e 41 72 67 3e 3d 33 20 3f 20 61  e(p, nArg>=3 ? a
253c0 7a 41 72 67 5b 32 5d 20 3a 20 22 74 61 62 6c 65  zArg[2] : "table
253d0 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ");.    }else if
253e0 28 20 63 32 3d 3d 27 71 27 20 26 26 20 73 74 72  ( c2=='q' && str
253f0 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 71  ncmp(azArg[1],"q
25400 75 6f 74 65 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  uote",n2)==0 ){.
25410 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
25420 4d 4f 44 45 5f 51 75 6f 74 65 3b 0a 20 20 20 20  MODE_Quote;.    
25430 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 61  }else if( c2=='a
25440 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
25450 72 67 5b 31 5d 2c 22 61 73 63 69 69 22 2c 6e 32  rg[1],"ascii",n2
25460 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d  )==0 ){.      p-
25470 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 41 73 63  >mode = MODE_Asc
25480 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ii;.      sqlite
25490 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
254a0 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  f(p->colSeparato
254b0 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61  r), p->colSepara
254c0 74 6f 72 2c 20 53 45 50 5f 55 6e 69 74 29 3b 0a  tor, SEP_Unit);.
254d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
254e0 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d  printf(sizeof(p-
254f0 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20  >rowSeparator), 
25500 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c  p->rowSeparator,
25510 20 53 45 50 5f 52 65 63 6f 72 64 29 3b 0a 20 20   SEP_Record);.  
25520 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67    }else if( nArg
25530 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 72 61 77  ==1 ){.      raw
25540 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
25550 22 63 75 72 72 65 6e 74 20 6f 75 74 70 75 74 20  "current output 
25560 6d 6f 64 65 3a 20 25 73 5c 6e 22 2c 20 6d 6f 64  mode: %s\n", mod
25570 65 44 65 73 63 72 5b 70 2d 3e 6d 6f 64 65 5d 29  eDescr[p->mode])
25580 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
25590 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
255a0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 6f  derr, "Error: mo
255b0 64 65 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65  de should be one
255c0 20 6f 66 3a 20 22 0a 20 20 20 20 20 20 20 20 20   of: ".         
255d0 22 61 73 63 69 69 20 63 6f 6c 75 6d 6e 20 63 73  "ascii column cs
255e0 76 20 68 74 6d 6c 20 69 6e 73 65 72 74 20 6c 69  v html insert li
255f0 6e 65 20 6c 69 73 74 20 71 75 6f 74 65 20 74 61  ne list quote ta
25600 62 73 20 74 63 6c 5c 6e 22 29 3b 0a 20 20 20 20  bs tcl\n");.    
25610 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
25620 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70      p->cMode = p
25630 2d 3e 6d 6f 64 65 3b 0a 20 20 7d 65 6c 73 65 0a  ->mode;.  }else.
25640 0a 20 20 69 66 28 20 63 3d 3d 27 6e 27 20 26 26  .  if( c=='n' &&
25650 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
25660 5d 2c 20 22 6e 75 6c 6c 76 61 6c 75 65 22 2c 20  ], "nullvalue", 
25670 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
25680 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
25690 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
256a0 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 6e 75 6c  tf(sizeof(p->nul
256b0 6c 56 61 6c 75 65 29 2c 20 70 2d 3e 6e 75 6c 6c  lValue), p->null
256c0 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 20 20 20  Value,.         
256d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25                "%
256e0 2e 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61 79  .*s", (int)Array
256f0 53 69 7a 65 28 70 2d 3e 6e 75 6c 6c 56 61 6c 75  Size(p->nullValu
25700 65 29 2d 31 2c 20 61 7a 41 72 67 5b 31 5d 29 3b  e)-1, azArg[1]);
25710 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
25720 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
25730 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6e 75  err, "Usage: .nu
25740 6c 6c 76 61 6c 75 65 20 53 54 52 49 4e 47 5c 6e  llvalue STRING\n
25750 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
25760 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
25770 0a 20 20 69 66 28 20 63 3d 3d 27 6f 27 20 26 26  .  if( c=='o' &&
25780 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
25790 5d 2c 20 22 6f 70 65 6e 22 2c 20 6e 29 3d 3d 30  ], "open", n)==0
257a0 20 26 26 20 6e 3e 3d 32 20 29 7b 0a 20 20 20 20   && n>=2 ){.    
257b0 63 68 61 72 20 2a 7a 4e 65 77 46 69 6c 65 6e 61  char *zNewFilena
257c0 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  me;  /* Name of 
257d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
257e0 65 20 74 6f 20 6f 70 65 6e 20 2a 2f 0a 20 20 20  e to open */.   
257f0 20 69 6e 74 20 69 4e 61 6d 65 20 3d 20 31 3b 20   int iName = 1; 
25800 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
25810 6e 20 61 7a 41 72 67 5b 5d 20 6f 66 20 74 68 65  n azArg[] of the
25820 20 66 69 6c 65 6e 61 6d 65 20 2a 2f 0a 20 20 20   filename */.   
25830 20 69 6e 74 20 6e 65 77 46 6c 61 67 20 3d 20 30   int newFlag = 0
25840 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f  ;     /* True to
25850 20 64 65 6c 65 74 65 20 66 69 6c 65 20 62 65 66   delete file bef
25860 6f 72 65 20 6f 70 65 6e 69 6e 67 20 2a 2f 0a 20  ore opening */. 
25870 20 20 20 2f 2a 20 43 6c 6f 73 65 20 74 68 65 20     /* Close the 
25880 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
25890 65 20 2a 2f 0a 20 20 20 20 73 65 73 73 69 6f 6e  e */.    session
258a0 5f 63 6c 6f 73 65 5f 61 6c 6c 28 70 29 3b 0a 20  _close_all(p);. 
258b0 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65     sqlite3_close
258c0 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 70 2d 3e  (p->db);.    p->
258d0 64 62 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 7a  db = 0;.    p->z
258e0 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a  DbFilename = 0;.
258f0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
25900 28 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65  (p->zFreeOnClose
25910 29 3b 0a 20 20 20 20 70 2d 3e 7a 46 72 65 65 4f  );.    p->zFreeO
25920 6e 43 6c 6f 73 65 20 3d 20 30 3b 0a 20 20 20 20  nClose = 0;.    
25930 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 63 6f 6d  /* Check for com
25940 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65  mand-line argume
25950 6e 74 73 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69  nts */.    for(i
25960 4e 61 6d 65 3d 31 3b 20 69 4e 61 6d 65 3c 6e 41  Name=1; iName<nA
25970 72 67 20 26 26 20 61 7a 41 72 67 5b 69 4e 61 6d  rg && azArg[iNam
25980 65 5d 5b 30 5d 3d 3d 27 2d 27 3b 20 69 4e 61 6d  e][0]=='-'; iNam
25990 65 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  e++){.      cons
259a0 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72  t char *z = azAr
259b0 67 5b 69 4e 61 6d 65 5d 3b 0a 20 20 20 20 20 20  g[iName];.      
259c0 69 66 28 20 6f 70 74 69 6f 6e 4d 61 74 63 68 28  if( optionMatch(
259d0 7a 2c 22 6e 65 77 22 29 20 29 7b 0a 20 20 20 20  z,"new") ){.    
259e0 20 20 20 20 6e 65 77 46 6c 61 67 20 3d 20 31 3b      newFlag = 1;
259f0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
25a00 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20   z[0]=='-' ){.  
25a10 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
25a20 66 28 73 74 64 65 72 72 2c 20 22 75 6e 6b 6e 6f  f(stderr, "unkno
25a30 77 6e 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22  wn option: %s\n"
25a40 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 72 63  , z);.        rc
25a50 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f   = 1;.        go
25a60 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
25a70 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  exit;.      }.  
25a80 20 20 7d 0a 20 20 20 20 2f 2a 20 49 66 20 61 20    }.    /* If a 
25a90 66 69 6c 65 6e 61 6d 65 20 69 73 20 73 70 65 63  filename is spec
25aa0 69 66 69 65 64 2c 20 74 72 79 20 74 6f 20 6f 70  ified, try to op
25ab0 65 6e 20 69 74 20 66 69 72 73 74 20 2a 2f 0a 20  en it first */. 
25ac0 20 20 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 20     zNewFilename 
25ad0 3d 20 6e 41 72 67 3e 69 4e 61 6d 65 20 3f 20 73  = nArg>iName ? s
25ae0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
25af0 25 73 22 2c 20 61 7a 41 72 67 5b 69 4e 61 6d 65  %s", azArg[iName
25b00 5d 29 20 3a 20 30 3b 0a 20 20 20 20 69 66 28 20  ]) : 0;.    if( 
25b10 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 20 29 7b 0a  zNewFilename ){.
25b20 20 20 20 20 20 20 69 66 28 20 6e 65 77 46 6c 61        if( newFla
25b30 67 20 29 20 73 68 65 6c 6c 44 65 6c 65 74 65 46  g ) shellDeleteF
25b40 69 6c 65 28 7a 4e 65 77 46 69 6c 65 6e 61 6d 65  ile(zNewFilename
25b50 29 3b 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62 46  );.      p->zDbF
25b60 69 6c 65 6e 61 6d 65 20 3d 20 7a 4e 65 77 46 69  ilename = zNewFi
25b70 6c 65 6e 61 6d 65 3b 0a 20 20 20 20 20 20 6f 70  lename;.      op
25b80 65 6e 5f 64 62 28 70 2c 20 31 29 3b 0a 20 20 20  en_db(p, 1);.   
25b90 20 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20     if( p->db==0 
25ba0 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
25bb0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
25bc0 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70  Error: cannot op
25bd0 65 6e 20 27 25 73 27 5c 6e 22 2c 20 7a 4e 65 77  en '%s'\n", zNew
25be0 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 20  Filename);.     
25bf0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
25c00 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20  zNewFilename);. 
25c10 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
25c20 20 20 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c      p->zFreeOnCl
25c30 6f 73 65 20 3d 20 7a 4e 65 77 46 69 6c 65 6e 61  ose = zNewFilena
25c40 6d 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  me;.      }.    
25c50 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d  }.    if( p->db=
25c60 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  =0 ){.      /* A
25c70 73 20 61 20 66 61 6c 6c 2d 62 61 63 6b 20 6f 70  s a fall-back op
25c80 65 6e 20 61 20 54 45 4d 50 20 64 61 74 61 62 61  en a TEMP databa
25c90 73 65 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 7a  se */.      p->z
25ca0 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a  DbFilename = 0;.
25cb0 20 20 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c        open_db(p,
25cc0 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   0);.    }.  }el
25cd0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6f 27  se..  if( c=='o'
25ce0 0a 20 20 20 26 26 20 28 73 74 72 6e 63 6d 70 28  .   && (strncmp(
25cf0 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 75 74 70 75  azArg[0], "outpu
25d00 74 22 2c 20 6e 29 3d 3d 30 20 7c 7c 20 73 74 72  t", n)==0 || str
25d10 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
25d20 6f 6e 63 65 22 2c 20 6e 29 3d 3d 30 29 0a 20 20  once", n)==0).  
25d30 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ){.    const cha
25d40 72 20 2a 7a 46 69 6c 65 20 3d 20 6e 41 72 67 3e  r *zFile = nArg>
25d50 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20  =2 ? azArg[1] : 
25d60 22 73 74 64 6f 75 74 22 3b 0a 20 20 20 20 69 66  "stdout";.    if
25d70 28 20 6e 41 72 67 3e 32 20 29 7b 0a 20 20 20 20  ( nArg>2 ){.    
25d80 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
25d90 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 25  derr, "Usage: .%
25da0 73 20 46 49 4c 45 5c 6e 22 2c 20 61 7a 41 72 67  s FILE\n", azArg
25db0 5b 30 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  [0]);.      rc =
25dc0 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
25dd0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
25de0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
25df0 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>1 && strncmp(a
25e00 7a 41 72 67 5b 30 5d 2c 20 22 6f 6e 63 65 22 2c  zArg[0], "once",
25e10 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   n)==0 ){.      
25e20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20  if( nArg<2 ){.  
25e30 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
25e40 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
25e50 20 2e 6f 6e 63 65 20 46 49 4c 45 5c 6e 22 29 3b   .once FILE\n");
25e60 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
25e70 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  .        goto me
25e80 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
25e90 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
25ea0 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d 20 32 3b 0a  ->outCount = 2;.
25eb0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
25ec0 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d 20 30   p->outCount = 0
25ed0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f 75 74 70  ;.    }.    outp
25ee0 75 74 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20  ut_reset(p);.   
25ef0 20 69 66 28 20 7a 46 69 6c 65 5b 30 5d 3d 3d 27   if( zFile[0]=='
25f00 7c 27 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c  |' ){.#ifdef SQL
25f10 49 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20  ITE_OMIT_POPEN. 
25f20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
25f30 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
25f40 70 69 70 65 73 20 61 72 65 20 6e 6f 74 20 73 75  pipes are not su
25f50 70 70 6f 72 74 65 64 20 69 6e 20 74 68 69 73 20  pported in this 
25f60 4f 53 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  OS\n");.      rc
25f70 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 2d 3e 6f   = 1;.      p->o
25f80 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 23 65 6c  ut = stdout;.#el
25f90 73 65 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20  se.      p->out 
25fa0 3d 20 70 6f 70 65 6e 28 7a 46 69 6c 65 20 2b 20  = popen(zFile + 
25fb0 31 2c 20 22 77 22 29 3b 0a 20 20 20 20 20 20 69  1, "w");.      i
25fc0 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a  f( p->out==0 ){.
25fd0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
25fe0 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
25ff0 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 70  r: cannot open p
26000 69 70 65 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a  ipe \"%s\"\n", z
26010 46 69 6c 65 20 2b 20 31 29 3b 0a 20 20 20 20 20  File + 1);.     
26020 20 20 20 70 2d 3e 6f 75 74 20 3d 20 73 74 64 6f     p->out = stdo
26030 75 74 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ut;.        rc =
26040 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   1;.      }else{
26050 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
26060 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
26070 28 70 2d 3e 6f 75 74 66 69 6c 65 29 2c 20 70 2d  (p->outfile), p-
26080 3e 6f 75 74 66 69 6c 65 2c 20 22 25 73 22 2c 20  >outfile, "%s", 
26090 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 7d 0a  zFile);.      }.
260a0 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65  #endif.    }else
260b0 7b 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d  {.      p->out =
260c0 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65   output_file_ope
260d0 6e 28 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20  n(zFile);.      
260e0 69 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b  if( p->out==0 ){
260f0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
26100 63 6d 70 28 7a 46 69 6c 65 2c 22 6f 66 66 22 29  cmp(zFile,"off")
26110 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
26120 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
26130 65 72 72 2c 22 45 72 72 6f 72 3a 20 63 61 6e 6e  err,"Error: cann
26140 6f 74 20 77 72 69 74 65 20 74 6f 20 5c 22 25 73  ot write to \"%s
26150 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65 29 3b 0a 20  \"\n", zFile);. 
26160 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
26170 20 70 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74   p->out = stdout
26180 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
26190 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ;.      } else {
261a0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
261b0 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
261c0 28 70 2d 3e 6f 75 74 66 69 6c 65 29 2c 20 70 2d  (p->outfile), p-
261d0 3e 6f 75 74 66 69 6c 65 2c 20 22 25 73 22 2c 20  >outfile, "%s", 
261e0 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 7d 0a  zFile);.      }.
261f0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
26200 20 69 66 28 20 63 3d 3d 27 70 27 20 26 26 20 6e   if( c=='p' && n
26210 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=3 && strncmp(a
26220 7a 41 72 67 5b 30 5d 2c 20 22 70 72 69 6e 74 22  zArg[0], "print"
26230 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
26240 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d  nt i;.    for(i=
26250 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  1; i<nArg; i++){
26260 0a 20 20 20 20 20 20 69 66 28 20 69 3e 31 20 29  .      if( i>1 )
26270 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
26280 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 20 20  ut, " ");.      
26290 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
262a0 75 74 2c 20 22 25 73 22 2c 20 61 7a 41 72 67 5b  ut, "%s", azArg[
262b0 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  i]);.    }.    r
262c0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
262d0 2c 20 22 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65  , "\n");.  }else
262e0 0a 0a 20 20 69 66 28 20 63 3d 3d 27 70 27 20 26  ..  if( c=='p' &
262f0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
26300 30 5d 2c 20 22 70 72 6f 6d 70 74 22 2c 20 6e 29  0], "prompt", n)
26310 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
26320 41 72 67 20 3e 3d 20 32 29 20 7b 0a 20 20 20 20  Arg >= 2) {.    
26330 20 20 73 74 72 6e 63 70 79 28 6d 61 69 6e 50 72    strncpy(mainPr
26340 6f 6d 70 74 2c 61 7a 41 72 67 5b 31 5d 2c 28 69  ompt,azArg[1],(i
26350 6e 74 29 41 72 72 61 79 53 69 7a 65 28 6d 61 69  nt)ArraySize(mai
26360 6e 50 72 6f 6d 70 74 29 2d 31 29 3b 0a 20 20 20  nPrompt)-1);.   
26370 20 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67 20   }.    if( nArg 
26380 3e 3d 20 33 29 20 7b 0a 20 20 20 20 20 20 73 74  >= 3) {.      st
26390 72 6e 63 70 79 28 63 6f 6e 74 69 6e 75 65 50 72  rncpy(continuePr
263a0 6f 6d 70 74 2c 61 7a 41 72 67 5b 32 5d 2c 28 69  ompt,azArg[2],(i
263b0 6e 74 29 41 72 72 61 79 53 69 7a 65 28 63 6f 6e  nt)ArraySize(con
263c0 74 69 6e 75 65 50 72 6f 6d 70 74 29 2d 31 29 3b  tinuePrompt)-1);
263d0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
263e0 20 20 69 66 28 20 63 3d 3d 27 71 27 20 26 26 20    if( c=='q' && 
263f0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
26400 2c 20 22 71 75 69 74 22 2c 20 6e 29 3d 3d 30 20  , "quit", n)==0 
26410 29 7b 0a 20 20 20 20 72 63 20 3d 20 32 3b 0a 20  ){.    rc = 2;. 
26420 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
26430 3d 27 72 27 20 26 26 20 6e 3e 3d 33 20 26 26 20  ='r' && n>=3 && 
26440 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
26450 2c 20 22 72 65 61 64 22 2c 20 6e 29 3d 3d 30 20  , "read", n)==0 
26460 29 7b 0a 20 20 20 20 46 49 4c 45 20 2a 61 6c 74  ){.    FILE *alt
26470 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d  ;.    if( nArg!=
26480 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  2 ){.      raw_p
26490 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
264a0 73 61 67 65 3a 20 2e 72 65 61 64 20 46 49 4c 45  sage: .read FILE
264b0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
264c0 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
264d0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
264e0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c 74 20  ;.    }.    alt 
264f0 3d 20 66 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d  = fopen(azArg[1]
26500 2c 20 22 72 62 22 29 3b 0a 20 20 20 20 69 66 28  , "rb");.    if(
26510 20 61 6c 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20   alt==0 ){.     
26520 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
26530 65 72 72 2c 22 45 72 72 6f 72 3a 20 63 61 6e 6e  err,"Error: cann
26540 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e  ot open \"%s\"\n
26550 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ", azArg[1]);.  
26560 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
26570 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
26580 3d 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28  = process_input(
26590 70 2c 20 61 6c 74 29 3b 0a 20 20 20 20 20 20 66  p, alt);.      f
265a0 63 6c 6f 73 65 28 61 6c 74 29 3b 0a 20 20 20 20  close(alt);.    
265b0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
265c0 20 63 3d 3d 27 72 27 20 26 26 20 6e 3e 3d 33 20   c=='r' && n>=3 
265d0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
265e0 5b 30 5d 2c 20 22 72 65 73 74 6f 72 65 22 2c 20  [0], "restore", 
265f0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e  n)==0 ){.    con
26600 73 74 20 63 68 61 72 20 2a 7a 53 72 63 46 69 6c  st char *zSrcFil
26610 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  e;.    const cha
26620 72 20 2a 7a 44 62 3b 0a 20 20 20 20 73 71 6c 69  r *zDb;.    sqli
26630 74 65 33 20 2a 70 53 72 63 3b 0a 20 20 20 20 73  te3 *pSrc;.    s
26640 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 70  qlite3_backup *p
26650 42 61 63 6b 75 70 3b 0a 20 20 20 20 69 6e 74 20  Backup;.    int 
26660 6e 54 69 6d 65 6f 75 74 20 3d 20 30 3b 0a 0a 20  nTimeout = 0;.. 
26670 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29     if( nArg==2 )
26680 7b 0a 20 20 20 20 20 20 7a 53 72 63 46 69 6c 65  {.      zSrcFile
26690 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20   = azArg[1];.   
266a0 20 20 20 7a 44 62 20 3d 20 22 6d 61 69 6e 22 3b     zDb = "main";
266b0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e  .    }else if( n
266c0 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20  Arg==3 ){.      
266d0 7a 53 72 63 46 69 6c 65 20 3d 20 61 7a 41 72 67  zSrcFile = azArg
266e0 5b 32 5d 3b 0a 20 20 20 20 20 20 7a 44 62 20 3d  [2];.      zDb =
266f0 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 7d   azArg[1];.    }
26700 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
26710 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
26720 55 73 61 67 65 3a 20 2e 72 65 73 74 6f 72 65 20  Usage: .restore 
26730 3f 44 42 3f 20 46 49 4c 45 5c 6e 22 29 3b 0a 20  ?DB? FILE\n");. 
26740 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
26750 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d     goto meta_com
26760 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d  mand_exit;.    }
26770 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
26780 33 5f 6f 70 65 6e 28 7a 53 72 63 46 69 6c 65 2c  3_open(zSrcFile,
26790 20 26 70 53 72 63 29 3b 0a 20 20 20 20 69 66 28   &pSrc);.    if(
267a0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
267b0 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
267c0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
267d0 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  or: cannot open 
267e0 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 53 72 63 46  \"%s\"\n", zSrcF
267f0 69 6c 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ile);.      sqli
26800 74 65 33 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b  te3_close(pSrc);
26810 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
26820 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f  .    }.    open_
26830 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 70 42  db(p, 0);.    pB
26840 61 63 6b 75 70 20 3d 20 73 71 6c 69 74 65 33 5f  ackup = sqlite3_
26850 62 61 63 6b 75 70 5f 69 6e 69 74 28 70 2d 3e 64  backup_init(p->d
26860 62 2c 20 7a 44 62 2c 20 70 53 72 63 2c 20 22 6d  b, zDb, pSrc, "m
26870 61 69 6e 22 29 3b 0a 20 20 20 20 69 66 28 20 70  ain");.    if( p
26880 42 61 63 6b 75 70 3d 3d 30 20 29 7b 0a 20 20 20  Backup==0 ){.   
26890 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
268a0 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25  tderr, "Error: %
268b0 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72  s\n", sqlite3_er
268c0 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20  rmsg(p->db));.  
268d0 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73      sqlite3_clos
268e0 65 28 70 53 72 63 29 3b 0a 20 20 20 20 20 20 72  e(pSrc);.      r
268f0 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
26900 20 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20     while( (rc = 
26910 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73  sqlite3_backup_s
26920 74 65 70 28 70 42 61 63 6b 75 70 2c 31 30 30 29  tep(pBackup,100)
26930 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  )==SQLITE_OK.   
26940 20 20 20 20 20 20 20 7c 7c 20 72 63 3d 3d 53 51         || rc==SQ
26950 4c 49 54 45 5f 42 55 53 59 20 20 29 7b 0a 20 20  LITE_BUSY  ){.  
26960 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
26970 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
26980 20 20 20 69 66 28 20 6e 54 69 6d 65 6f 75 74 2b     if( nTimeout+
26990 2b 20 3e 3d 20 33 20 29 20 62 72 65 61 6b 3b 0a  + >= 3 ) break;.
269a0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
269b0 73 6c 65 65 70 28 31 30 30 29 3b 0a 20 20 20 20  sleep(100);.    
269c0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
269d0 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
269e0 69 73 68 28 70 42 61 63 6b 75 70 29 3b 0a 20 20  ish(pBackup);.  
269f0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
26a00 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 72  _DONE ){.      r
26a10 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  c = 0;.    }else
26a20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
26a30 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
26a40 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20  TE_LOCKED ){.   
26a50 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
26a60 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 73 6f  derr, "Error: so
26a70 75 72 63 65 20 64 61 74 61 62 61 73 65 20 69 73  urce database is
26a80 20 62 75 73 79 5c 6e 22 29 3b 0a 20 20 20 20 20   busy\n");.     
26a90 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c   rc = 1;.    }el
26aa0 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70  se{.      utf8_p
26ab0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
26ac0 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c  rror: %s\n", sql
26ad0 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
26ae0 62 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  b));.      rc = 
26af0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  1;.    }.    sql
26b00 69 74 65 33 5f 63 6c 6f 73 65 28 70 53 72 63 29  ite3_close(pSrc)
26b10 3b 0a 20 20 7d 65 6c 73 65 0a 0a 0a 20 20 69 66  ;.  }else...  if
26b20 28 20 63 3d 3d 27 73 27 20 26 26 20 73 74 72 6e  ( c=='s' && strn
26b30 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73  cmp(azArg[0], "s
26b40 63 61 6e 73 74 61 74 73 22 2c 20 6e 29 3d 3d 30  canstats", n)==0
26b50 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
26b60 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  ==2 ){.      p->
26b70 73 63 61 6e 73 74 61 74 73 4f 6e 20 3d 20 62 6f  scanstatsOn = bo
26b80 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
26b90 5b 31 5d 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  [1]);.#ifndef SQ
26ba0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
26bb0 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20  _SCANSTATUS.    
26bc0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
26bd0 65 72 72 2c 20 22 57 61 72 6e 69 6e 67 3a 20 2e  err, "Warning: .
26be0 73 63 61 6e 73 74 61 74 73 20 6e 6f 74 20 61 76  scanstats not av
26bf0 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 69 73 20  ailable in this 
26c00 62 75 69 6c 64 2e 5c 6e 22 29 3b 0a 23 65 6e 64  build.\n");.#end
26c10 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  if.    }else{.  
26c20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
26c30 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
26c40 73 63 61 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66  scanstats on|off
26c50 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
26c60 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
26c70 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20  e..  if( c=='s' 
26c80 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
26c90 5b 30 5d 2c 20 22 73 63 68 65 6d 61 22 2c 20 6e  [0], "schema", n
26ca0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53 68 65 6c  )==0 ){.    Shel
26cb0 6c 54 65 78 74 20 73 53 65 6c 65 63 74 3b 0a 20  lText sSelect;. 
26cc0 20 20 20 53 68 65 6c 6c 53 74 61 74 65 20 64 61     ShellState da
26cd0 74 61 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45  ta;.    char *zE
26ce0 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 63  rrMsg = 0;.    c
26cf0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 69 76 20  onst char *zDiv 
26d00 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 69 53 63  = 0;.    int iSc
26d10 68 65 6d 61 20 3d 20 30 3b 0a 0a 20 20 20 20 6f  hema = 0;..    o
26d20 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20  pen_db(p, 0);.  
26d30 20 20 6d 65 6d 63 70 79 28 26 64 61 74 61 2c 20    memcpy(&data, 
26d40 70 2c 20 73 69 7a 65 6f 66 28 64 61 74 61 29 29  p, sizeof(data))
26d50 3b 0a 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48  ;.    data.showH
26d60 65 61 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 64  eader = 0;.    d
26d70 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61  ata.cMode = data
26d80 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 53 65 6d  .mode = MODE_Sem
26d90 69 3b 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28  i;.    initText(
26da0 26 73 53 65 6c 65 63 74 29 3b 0a 20 20 20 20 69  &sSelect);.    i
26db0 66 28 20 6e 41 72 67 3e 3d 32 20 26 26 20 6f 70  f( nArg>=2 && op
26dc0 74 69 6f 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b  tionMatch(azArg[
26dd0 31 5d 2c 20 22 69 6e 64 65 6e 74 22 29 20 29 7b  1], "indent") ){
26de0 0a 20 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64  .      data.cMod
26df0 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20  e = data.mode = 
26e00 4d 4f 44 45 5f 50 72 65 74 74 79 3b 0a 20 20 20  MODE_Pretty;.   
26e10 20 20 20 6e 41 72 67 2d 2d 3b 0a 20 20 20 20 20     nArg--;.     
26e20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 20 61   if( nArg==2 ) a
26e30 7a 41 72 67 5b 31 5d 20 3d 20 61 7a 41 72 67 5b  zArg[1] = azArg[
26e40 32 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  2];.    }.    if
26e50 28 20 6e 41 72 67 3d 3d 32 20 26 26 20 61 7a 41  ( nArg==2 && azA
26e60 72 67 5b 31 5d 5b 30 5d 21 3d 27 2d 27 20 29 7b  rg[1][0]!='-' ){
26e70 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  .      int i;.  
26e80 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 61 7a 41      for(i=0; azA
26e90 72 67 5b 31 5d 5b 69 5d 3b 20 69 2b 2b 29 20 61  rg[1][i]; i++) a
26ea0 7a 41 72 67 5b 31 5d 5b 69 5d 20 3d 20 54 6f 4c  zArg[1][i] = ToL
26eb0 6f 77 65 72 28 61 7a 41 72 67 5b 31 5d 5b 69 5d  ower(azArg[1][i]
26ec0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72  );.      if( str
26ed0 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 73 71  cmp(azArg[1],"sq
26ee0 6c 69 74 65 5f 6d 61 73 74 65 72 22 29 3d 3d 30  lite_master")==0
26ef0 20 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72   ){.        char
26f00 20 2a 6e 65 77 5f 61 72 67 76 5b 32 5d 2c 20 2a   *new_argv[2], *
26f10 6e 65 77 5f 63 6f 6c 76 5b 32 5d 3b 0a 20 20 20  new_colv[2];.   
26f20 20 20 20 20 20 6e 65 77 5f 61 72 67 76 5b 30 5d       new_argv[0]
26f30 20 3d 20 22 43 52 45 41 54 45 20 54 41 42 4c 45   = "CREATE TABLE
26f40 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28   sqlite_master (
26f50 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n".            
26f60 20 20 20 20 20 20 20 20 20 20 22 20 20 74 79 70            "  typ
26f70 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20  e text,\n".     
26f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f90 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e   "  name text,\n
26fa0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
26fb0 20 20 20 20 20 20 20 20 22 20 20 74 62 6c 5f 6e          "  tbl_n
26fc0 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ame text,\n".   
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fe0 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65 20 69     "  rootpage i
26ff0 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20 20  nteger,\n".     
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a   "  sql text\n".
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27030 20 20 20 20 20 20 22 29 22 3b 0a 20 20 20 20 20        ")";.     
27040 20 20 20 6e 65 77 5f 61 72 67 76 5b 31 5d 20 3d     new_argv[1] =
27050 20 30 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f   0;.        new_
27060 63 6f 6c 76 5b 30 5d 20 3d 20 22 73 71 6c 22 3b  colv[0] = "sql";
27070 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c  .        new_col
27080 76 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  v[1] = 0;.      
27090 20 20 63 61 6c 6c 62 61 63 6b 28 26 64 61 74 61    callback(&data
270a0 2c 20 31 2c 20 6e 65 77 5f 61 72 67 76 2c 20 6e  , 1, new_argv, n
270b0 65 77 5f 63 6f 6c 76 29 3b 0a 20 20 20 20 20 20  ew_colv);.      
270c0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
270d0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
270e0 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31  ( strcmp(azArg[1
270f0 5d 2c 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  ],"sqlite_temp_m
27100 61 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20  aster")==0 ){.  
27110 20 20 20 20 20 20 63 68 61 72 20 2a 6e 65 77 5f        char *new_
27120 61 72 67 76 5b 32 5d 2c 20 2a 6e 65 77 5f 63 6f  argv[2], *new_co
27130 6c 76 5b 32 5d 3b 0a 20 20 20 20 20 20 20 20 6e  lv[2];.        n
27140 65 77 5f 61 72 67 76 5b 30 5d 20 3d 20 22 43 52  ew_argv[0] = "CR
27150 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
27160 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
27170 65 72 20 28 5c 6e 22 0a 20 20 20 20 20 20 20 20  er (\n".        
27180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
27190 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20   type text,\n". 
271a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271b0 20 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65 78       "  name tex
271c0 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20  t,\n".          
271d0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 74              "  t
271e0 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22  bl_name text,\n"
271f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27200 20 20 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61         "  rootpa
27210 67 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20  ge integer,\n". 
27220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27230 20 20 20 20 20 22 20 20 73 71 6c 20 74 65 78 74       "  sql text
27240 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n".            
27250 20 20 20 20 20 20 20 20 20 20 22 29 22 3b 0a 20            ")";. 
27260 20 20 20 20 20 20 20 6e 65 77 5f 61 72 67 76 5b         new_argv[
27270 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  1] = 0;.        
27280 6e 65 77 5f 63 6f 6c 76 5b 30 5d 20 3d 20 22 73  new_colv[0] = "s
27290 71 6c 22 3b 0a 20 20 20 20 20 20 20 20 6e 65 77  ql";.        new
272a0 5f 63 6f 6c 76 5b 31 5d 20 3d 20 30 3b 0a 20 20  _colv[1] = 0;.  
272b0 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 28 26        callback(&
272c0 64 61 74 61 2c 20 31 2c 20 6e 65 77 5f 61 72 67  data, 1, new_arg
272d0 76 2c 20 6e 65 77 5f 63 6f 6c 76 29 3b 0a 20 20  v, new_colv);.  
272e0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
272f0 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  E_OK;.      }els
27300 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 69 76 20  e{.        zDiv 
27310 3d 20 22 28 22 3b 0a 20 20 20 20 20 20 7d 0a 20  = "(";.      }. 
27320 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72     }else if( nAr
27330 67 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 7a 44  g==1 ){.      zD
27340 69 76 20 3d 20 22 28 22 3b 0a 20 20 20 20 7d 65  iv = "(";.    }e
27350 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
27360 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
27370 73 61 67 65 3a 20 2e 73 63 68 65 6d 61 20 3f 2d  sage: .schema ?-
27380 2d 69 6e 64 65 6e 74 3f 20 3f 4c 49 4b 45 2d 50  -indent? ?LIKE-P
27390 41 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20  ATTERN?\n");.   
273a0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
273b0 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61   goto meta_comma
273c0 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20  nd_exit;.    }. 
273d0 20 20 20 69 66 28 20 7a 44 69 76 20 29 7b 0a 20     if( zDiv ){. 
273e0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d       sqlite3_stm
273f0 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20  t *pStmt = 0;.  
27400 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
27410 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
27420 62 2c 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 20  b, "SELECT name 
27430 46 52 4f 4d 20 70 72 61 67 6d 61 5f 64 61 74 61  FROM pragma_data
27440 62 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20 20  base_list",.    
27450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27460 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70            -1, &p
27470 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20  Stmt, 0);.      
27480 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
27490 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
274a0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73  derr, "Error: %s
274b0 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  \n", sqlite3_err
274c0 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  msg(p->db));.   
274d0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e       sqlite3_fin
274e0 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
274f0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
27500 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
27510 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
27520 20 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65      }.      appe
27530 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
27540 20 22 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f   "SELECT sql FRO
27550 4d 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 53  M", 0);.      iS
27560 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 20  chema = 0;.     
27570 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f   while( sqlite3_
27580 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c  step(pStmt)==SQL
27590 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20  ITE_ROW ){.     
275a0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
275b0 44 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  Db = (const char
275c0 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
275d0 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 30 29 3b  _text(pStmt, 0);
275e0 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 7a 53  .        char zS
275f0 63 4e 75 6d 5b 33 30 5d 3b 0a 20 20 20 20 20 20  cNum[30];.      
27600 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
27610 74 66 28 73 69 7a 65 6f 66 28 7a 53 63 4e 75 6d  tf(sizeof(zScNum
27620 29 2c 20 7a 53 63 4e 75 6d 2c 20 22 25 64 22 2c  ), zScNum, "%d",
27630 20 2b 2b 69 53 63 68 65 6d 61 29 3b 0a 20 20 20   ++iSchema);.   
27640 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
27650 26 73 53 65 6c 65 63 74 2c 20 7a 44 69 76 2c 20  &sSelect, zDiv, 
27660 30 29 3b 0a 20 20 20 20 20 20 20 20 7a 44 69 76  0);.        zDiv
27670 20 3d 20 22 20 55 4e 49 4f 4e 20 41 4c 4c 20 22   = " UNION ALL "
27680 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74  ;.        if( st
27690 72 63 6d 70 28 7a 44 62 2c 20 22 6d 61 69 6e 22  rcmp(zDb, "main"
276a0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
276b0 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53    appendText(&sS
276c0 65 6c 65 63 74 2c 20 22 53 45 4c 45 43 54 20 73  elect, "SELECT s
276d0 68 65 6c 6c 5f 61 64 64 5f 73 63 68 65 6d 61 28  hell_add_schema(
276e0 73 71 6c 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20  sql,", 0);.     
276f0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
27700 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20 27  &sSelect, zDb, '
27710 22 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  "');.          a
27720 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
27730 63 74 2c 20 22 29 20 41 53 20 73 71 6c 2c 20 74  ct, ") AS sql, t
27740 79 70 65 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e  ype, tbl_name, n
27750 61 6d 65 2c 20 72 6f 77 69 64 2c 22 2c 20 30 29  ame, rowid,", 0)
27760 3b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65  ;.          appe
27770 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
27780 20 7a 53 63 4e 75 6d 2c 20 30 29 3b 0a 20 20 20   zScNum, 0);.   
27790 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
277a0 74 28 26 73 53 65 6c 65 63 74 2c 20 22 20 41 53  t(&sSelect, " AS
277b0 20 73 6e 75 6d 2c 20 22 2c 20 30 29 3b 0a 20 20   snum, ", 0);.  
277c0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
277d0 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 44 62  xt(&sSelect, zDb
277e0 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20 20 20 20  , '\'');.       
277f0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
27800 53 65 6c 65 63 74 2c 20 22 20 41 53 20 73 6e 61  Select, " AS sna
27810 6d 65 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20  me FROM ", 0);. 
27820 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54           appendT
27830 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 44  ext(&sSelect, zD
27840 62 2c 20 27 22 27 29 3b 0a 20 20 20 20 20 20 20  b, '"');.       
27850 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
27860 53 65 6c 65 63 74 2c 20 22 2e 73 71 6c 69 74 65  Select, ".sqlite
27870 5f 6d 61 73 74 65 72 22 2c 20 30 29 3b 0a 20 20  _master", 0);.  
27880 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
27890 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
278a0 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53 45 4c  t(&sSelect, "SEL
278b0 45 43 54 20 73 71 6c 2c 20 74 79 70 65 2c 20 74  ECT sql, type, t
278c0 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20 72  bl_name, name, r
278d0 6f 77 69 64 2c 20 22 2c 20 30 29 3b 0a 20 20 20  owid, ", 0);.   
278e0 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
278f0 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 53 63 4e  t(&sSelect, zScN
27900 75 6d 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  um, 0);.        
27910 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53    appendText(&sS
27920 65 6c 65 63 74 2c 20 22 20 41 53 20 73 6e 75 6d  elect, " AS snum
27930 2c 20 27 6d 61 69 6e 27 20 41 53 20 73 6e 61 6d  , 'main' AS snam
27940 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
27950 73 74 65 72 22 2c 30 29 3b 0a 20 20 20 20 20 20  ster",0);.      
27960 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
27970 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
27980 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  ze(pStmt);.     
27990 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
279a0 6c 65 63 74 2c 20 22 29 20 57 48 45 52 45 20 22  lect, ") WHERE "
279b0 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
279c0 6e 41 72 67 3e 31 20 29 7b 0a 20 20 20 20 20 20  nArg>1 ){.      
279d0 20 20 63 68 61 72 20 2a 7a 51 61 72 67 20 3d 20    char *zQarg = 
279e0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
279f0 22 25 51 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b  "%Q", azArg[1]);
27a00 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
27a10 63 68 72 28 61 7a 41 72 67 5b 31 5d 2c 20 27 2e  chr(azArg[1], '.
27a20 27 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ') ){.          
27a30 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
27a40 65 63 74 2c 20 22 6c 6f 77 65 72 28 70 72 69 6e  ect, "lower(prin
27a50 74 66 28 27 25 73 2e 25 73 27 2c 73 6e 61 6d 65  tf('%s.%s',sname
27a60 2c 74 62 6c 5f 6e 61 6d 65 29 29 22 2c 20 30 29  ,tbl_name))", 0)
27a70 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
27a80 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e  .          appen
27a90 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
27aa0 22 6c 6f 77 65 72 28 74 62 6c 5f 6e 61 6d 65 29  "lower(tbl_name)
27ab0 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  ", 0);.        }
27ac0 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54  .        appendT
27ad0 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 73 74  ext(&sSelect, st
27ae0 72 63 68 72 28 61 7a 41 72 67 5b 31 5d 2c 20 27  rchr(azArg[1], '
27af0 2a 27 29 20 3f 20 22 20 47 4c 4f 42 20 22 20 3a  *') ? " GLOB " :
27b00 20 22 20 4c 49 4b 45 20 22 2c 20 30 29 3b 0a 20   " LIKE ", 0);. 
27b10 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
27b20 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 51 61 72  t(&sSelect, zQar
27b30 67 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61  g, 0);.        a
27b40 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
27b50 63 74 2c 20 22 20 41 4e 44 20 22 2c 20 30 29 3b  ct, " AND ", 0);
27b60 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
27b70 5f 66 72 65 65 28 7a 51 61 72 67 29 3b 0a 20 20  _free(zQarg);.  
27b80 20 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65      }.      appe
27b90 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
27ba0 20 22 74 79 70 65 21 3d 27 6d 65 74 61 27 20 41   "type!='meta' A
27bb0 4e 44 20 73 71 6c 20 49 53 20 4e 4f 54 20 4e 55  ND sql IS NOT NU
27bc0 4c 4c 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  LL".            
27bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27be0 20 4f 52 44 45 52 20 42 59 20 73 6e 75 6d 2c 20   ORDER BY snum, 
27bf0 72 6f 77 69 64 22 2c 20 30 29 3b 0a 20 20 20 20  rowid", 0);.    
27c00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
27c10 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c 65  xec(p->db, sSele
27c20 63 74 2e 7a 2c 20 63 61 6c 6c 62 61 63 6b 2c 20  ct.z, callback, 
27c30 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29  &data, &zErrMsg)
27c40 3b 0a 20 20 20 20 20 20 66 72 65 65 54 65 78 74  ;.      freeText
27c50 28 26 73 53 65 6c 65 63 74 29 3b 0a 20 20 20 20  (&sSelect);.    
27c60 7d 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73  }.    if( zErrMs
27c70 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  g ){.      utf8_
27c80 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45  printf(stderr,"E
27c90 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72  rror: %s\n", zEr
27ca0 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c  rMsg);.      sql
27cb0 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73  ite3_free(zErrMs
27cc0 67 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  g);.      rc = 1
27cd0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
27ce0 72 63 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20  rc != SQLITE_OK 
27cf0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
27d00 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
27d10 72 3a 20 71 75 65 72 79 69 6e 67 20 73 63 68 65  r: querying sche
27d20 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e  ma information\n
27d30 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
27d40 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
27d50 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d     rc = 0;.    }
27d60 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 20 64 65  .  }else..#if de
27d70 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
27d80 55 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  UG) && defined(S
27d90 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c  QLITE_ENABLE_SEL
27da0 45 43 54 54 52 41 43 45 29 0a 20 20 69 66 28 20  ECTTRACE).  if( 
27db0 63 3d 3d 27 73 27 20 26 26 20 6e 3d 3d 31 31 20  c=='s' && n==11 
27dc0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
27dd0 5b 30 5d 2c 20 22 73 65 6c 65 63 74 74 72 61 63  [0], "selecttrac
27de0 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  e", n)==0 ){.   
27df0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 54 72   sqlite3SelectTr
27e00 61 63 65 20 3d 20 28 69 6e 74 29 69 6e 74 65 67  ace = (int)integ
27e10 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d  erValue(azArg[1]
27e20 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  );.  }else.#endi
27e30 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
27e40 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53  QLITE_ENABLE_SES
27e50 53 49 4f 4e 29 0a 20 20 69 66 28 20 63 3d 3d 27  SION).  if( c=='
27e60 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  s' && strncmp(az
27e70 41 72 67 5b 30 5d 2c 22 73 65 73 73 69 6f 6e 22  Arg[0],"session"
27e80 2c 6e 29 3d 3d 30 20 26 26 20 6e 3e 3d 33 20 29  ,n)==0 && n>=3 )
27e90 7b 0a 20 20 20 20 4f 70 65 6e 53 65 73 73 69 6f  {.    OpenSessio
27ea0 6e 20 2a 70 53 65 73 73 69 6f 6e 20 3d 20 26 70  n *pSession = &p
27eb0 2d 3e 61 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a 20  ->aSession[0];. 
27ec0 20 20 20 63 68 61 72 20 2a 2a 61 7a 43 6d 64 20     char **azCmd 
27ed0 3d 20 26 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20  = &azArg[1];.   
27ee0 20 69 6e 74 20 69 53 65 73 20 3d 20 30 3b 0a 20   int iSes = 0;. 
27ef0 20 20 20 69 6e 74 20 6e 43 6d 64 20 3d 20 6e 41     int nCmd = nA
27f00 72 67 20 2d 20 31 3b 0a 20 20 20 20 69 6e 74 20  rg - 1;.    int 
27f10 69 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c  i;.    if( nArg<
27f20 3d 31 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f  =1 ) goto sessio
27f30 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a  n_syntax_error;.
27f40 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
27f50 29 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e  );.    if( nArg>
27f60 3d 33 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28  =3 ){.      for(
27f70 69 53 65 73 3d 30 3b 20 69 53 65 73 3c 70 2d 3e  iSes=0; iSes<p->
27f80 6e 53 65 73 73 69 6f 6e 3b 20 69 53 65 73 2b 2b  nSession; iSes++
27f90 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
27fa0 74 72 63 6d 70 28 70 2d 3e 61 53 65 73 73 69 6f  trcmp(p->aSessio
27fb0 6e 5b 69 53 65 73 5d 2e 7a 4e 61 6d 65 2c 20 61  n[iSes].zName, a
27fc0 7a 41 72 67 5b 31 5d 29 3d 3d 30 20 29 20 62 72  zArg[1])==0 ) br
27fd0 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
27fe0 20 20 20 69 66 28 20 69 53 65 73 3c 70 2d 3e 6e     if( iSes<p->n
27ff0 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20  Session ){.     
28000 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20 26 70     pSession = &p
28010 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d  ->aSession[iSes]
28020 3b 0a 20 20 20 20 20 20 20 20 61 7a 43 6d 64 2b  ;.        azCmd+
28030 2b 3b 0a 20 20 20 20 20 20 20 20 6e 43 6d 64 2d  +;.        nCmd-
28040 2d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  -;.      }else{.
28050 20 20 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e          pSession
28060 20 3d 20 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b   = &p->aSession[
28070 30 5d 3b 0a 20 20 20 20 20 20 20 20 69 53 65 73  0];.        iSes
28080 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
28090 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73    }..    /* .ses
280a0 73 69 6f 6e 20 61 74 74 61 63 68 20 54 41 42 4c  sion attach TABL
280b0 45 0a 20 20 20 20 2a 2a 20 49 6e 76 6f 6b 65 20  E.    ** Invoke 
280c0 74 68 65 20 73 71 6c 69 74 65 33 73 65 73 73 69  the sqlite3sessi
280d0 6f 6e 5f 61 74 74 61 63 68 28 29 20 69 6e 74 65  on_attach() inte
280e0 72 66 61 63 65 20 74 6f 20 61 74 74 61 63 68 20  rface to attach 
280f0 61 20 70 61 72 74 69 63 75 6c 61 72 0a 20 20 20  a particular.   
28100 20 2a 2a 20 74 61 62 6c 65 20 73 6f 20 74 68 61   ** table so tha
28110 74 20 69 74 20 69 73 20 6e 65 76 65 72 20 66 69  t it is never fi
28120 6c 74 65 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20  ltered..    */. 
28130 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a     if( strcmp(az
28140 43 6d 64 5b 30 5d 2c 22 61 74 74 61 63 68 22 29  Cmd[0],"attach")
28150 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
28160 20 6e 43 6d 64 21 3d 32 20 29 20 67 6f 74 6f 20   nCmd!=2 ) goto 
28170 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65  session_syntax_e
28180 72 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20  rror;.      if( 
28190 70 53 65 73 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29  pSession->p==0 )
281a0 7b 0a 20 20 20 20 20 20 20 20 73 65 73 73 69 6f  {.        sessio
281b0 6e 5f 6e 6f 74 5f 6f 70 65 6e 3a 0a 20 20 20 20  n_not_open:.    
281c0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
281d0 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 4e  tderr, "ERROR: N
281e0 6f 20 73 65 73 73 69 6f 6e 73 20 61 72 65 20 6f  o sessions are o
281f0 70 65 6e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d  pen\n");.      }
28200 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63  else{.        rc
28210 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f   = sqlite3sessio
28220 6e 5f 61 74 74 61 63 68 28 70 53 65 73 73 69 6f  n_attach(pSessio
28230 6e 2d 3e 70 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b  n->p, azCmd[1]);
28240 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 20  .        if( rc 
28250 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  ){.          raw
28260 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
28270 22 45 52 52 4f 52 3a 20 73 71 6c 69 74 65 33 73  "ERROR: sqlite3s
28280 65 73 73 69 6f 6e 5f 61 74 74 61 63 68 28 29 20  ession_attach() 
28290 72 65 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20 72  returns %d\n", r
282a0 63 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63  c);.          rc
282b0 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
282c0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
282d0 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69  e..    /* .sessi
282e0 6f 6e 20 63 68 61 6e 67 65 73 65 74 20 46 49 4c  on changeset FIL
282f0 45 0a 20 20 20 20 2a 2a 20 2e 73 65 73 73 69 6f  E.    ** .sessio
28300 6e 20 70 61 74 63 68 73 65 74 20 46 49 4c 45 0a  n patchset FILE.
28310 20 20 20 20 2a 2a 20 57 72 69 74 65 20 61 20 63      ** Write a c
28320 68 61 6e 67 65 73 65 74 20 6f 72 20 70 61 74 63  hangeset or patc
28330 68 73 65 74 20 69 6e 74 6f 20 61 20 66 69 6c 65  hset into a file
28340 2e 20 20 54 68 65 20 66 69 6c 65 20 69 73 20 6f  .  The file is o
28350 76 65 72 77 72 69 74 74 65 6e 2e 0a 20 20 20 20  verwritten..    
28360 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d  */.    if( strcm
28370 70 28 61 7a 43 6d 64 5b 30 5d 2c 22 63 68 61 6e  p(azCmd[0],"chan
28380 67 65 73 65 74 22 29 3d 3d 30 20 7c 7c 20 73 74  geset")==0 || st
28390 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 22 70  rcmp(azCmd[0],"p
283a0 61 74 63 68 73 65 74 22 29 3d 3d 30 20 29 7b 0a  atchset")==0 ){.
283b0 20 20 20 20 20 20 46 49 4c 45 20 2a 6f 75 74 20        FILE *out 
283c0 3d 20 30 3b 0a 20 20 20 20 20 20 69 66 28 20 6e  = 0;.      if( n
283d0 43 6d 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65  Cmd!=2 ) goto se
283e0 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
283f0 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53  or;.      if( pS
28400 65 73 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 20 67  ession->p==0 ) g
28410 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 6e 6f 74 5f  oto session_not_
28420 6f 70 65 6e 3b 0a 20 20 20 20 20 20 6f 75 74 20  open;.      out 
28430 3d 20 66 6f 70 65 6e 28 61 7a 43 6d 64 5b 31 5d  = fopen(azCmd[1]
28440 2c 20 22 77 62 22 29 3b 0a 20 20 20 20 20 20 69  , "wb");.      i
28450 66 28 20 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20  f( out==0 ){.   
28460 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
28470 28 73 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a  (stderr, "ERROR:
28480 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25   cannot open \"%
28490 73 5c 22 20 66 6f 72 20 77 72 69 74 69 6e 67 5c  s\" for writing\
284a0 6e 22 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20  n", azCmd[1]);. 
284b0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
284c0 20 20 20 20 69 6e 74 20 73 7a 43 68 6e 67 3b 0a      int szChng;.
284d0 20 20 20 20 20 20 20 20 76 6f 69 64 20 2a 70 43          void *pC
284e0 68 6e 67 3b 0a 20 20 20 20 20 20 20 20 69 66 28  hng;.        if(
284f0 20 61 7a 43 6d 64 5b 30 5d 5b 30 5d 3d 3d 27 63   azCmd[0][0]=='c
28500 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  ' ){.          r
28510 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73 69  c = sqlite3sessi
28520 6f 6e 5f 63 68 61 6e 67 65 73 65 74 28 70 53 65  on_changeset(pSe
28530 73 73 69 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68 6e  ssion->p, &szChn
28540 67 2c 20 26 70 43 68 6e 67 29 3b 0a 20 20 20 20  g, &pChng);.    
28550 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
28560 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
28570 33 73 65 73 73 69 6f 6e 5f 70 61 74 63 68 73 65  3session_patchse
28580 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 26  t(pSession->p, &
28590 73 7a 43 68 6e 67 2c 20 26 70 43 68 6e 67 29 3b  szChng, &pChng);
285a0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
285b0 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
285c0 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 45         printf("E
285d0 72 72 6f 72 3a 20 65 72 72 6f 72 20 63 6f 64 65  rror: error code
285e0 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20   %d\n", rc);.   
285f0 20 20 20 20 20 20 20 72 63 20 3d 20 30 3b 0a 20         rc = 0;. 
28600 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
28610 20 69 66 28 20 70 43 68 6e 67 0a 20 20 20 20 20   if( pChng.     
28620 20 20 20 20 20 26 26 20 66 77 72 69 74 65 28 70       && fwrite(p
28630 43 68 6e 67 2c 20 73 7a 43 68 6e 67 2c 20 31 2c  Chng, szChng, 1,
28640 20 6f 75 74 29 21 3d 31 20 29 7b 0a 20 20 20 20   out)!=1 ){.    
28650 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
28660 28 73 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a  (stderr, "ERROR:
28670 20 46 61 69 6c 65 64 20 74 6f 20 77 72 69 74 65   Failed to write
28680 20 65 6e 74 69 72 65 20 25 64 2d 62 79 74 65 20   entire %d-byte 
28690 6f 75 74 70 75 74 5c 6e 22 2c 0a 20 20 20 20 20  output\n",.     
286a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 7a 43               szC
286b0 68 6e 67 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  hng);.        }.
286c0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
286d0 66 72 65 65 28 70 43 68 6e 67 29 3b 0a 20 20 20  free(pChng);.   
286e0 20 20 20 20 20 66 63 6c 6f 73 65 28 6f 75 74 29       fclose(out)
286f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
28700 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73  lse..    /* .ses
28710 73 69 6f 6e 20 63 6c 6f 73 65 0a 20 20 20 20 2a  sion close.    *
28720 2a 20 43 6c 6f 73 65 20 74 68 65 20 69 64 65 6e  * Close the iden
28730 74 69 66 69 65 64 20 73 65 73 73 69 6f 6e 0a 20  tified session. 
28740 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74     */.    if( st
28750 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22  rcmp(azCmd[0], "
28760 63 6c 6f 73 65 22 29 3d 3d 30 20 29 7b 0a 20 20  close")==0 ){.  
28770 20 20 20 20 69 66 28 20 6e 43 6d 64 21 3d 31 20      if( nCmd!=1 
28780 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73  ) goto session_s
28790 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20  yntax_error;.   
287a0 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73 73 69     if( p->nSessi
287b0 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 73 65  on ){.        se
287c0 73 73 69 6f 6e 5f 63 6c 6f 73 65 28 70 53 65 73  ssion_close(pSes
287d0 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 70  sion);.        p
287e0 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d  ->aSession[iSes]
287f0 20 3d 20 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 2d   = p->aSession[-
28800 2d 70 2d 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20  -p->nSession];. 
28810 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
28820 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f  ..    /* .sessio
28830 6e 20 65 6e 61 62 6c 65 20 3f 42 4f 4f 4c 45 41  n enable ?BOOLEA
28840 4e 3f 0a 20 20 20 20 2a 2a 20 51 75 65 72 79 20  N?.    ** Query 
28850 6f 72 20 73 65 74 20 74 68 65 20 65 6e 61 62 6c  or set the enabl
28860 65 20 66 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20  e flag.    */.  
28870 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43    if( strcmp(azC
28880 6d 64 5b 30 5d 2c 20 22 65 6e 61 62 6c 65 22 29  md[0], "enable")
28890 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ==0 ){.      int
288a0 20 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e   ii;.      if( n
288b0 43 6d 64 3e 32 20 29 20 67 6f 74 6f 20 73 65 73  Cmd>2 ) goto ses
288c0 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f  sion_syntax_erro
288d0 72 3b 0a 20 20 20 20 20 20 69 69 20 3d 20 6e 43  r;.      ii = nC
288e0 6d 64 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f 6f  md==1 ? -1 : boo
288f0 6c 65 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64 5b  leanValue(azCmd[
28900 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  1]);.      if( p
28910 2d 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20  ->nSession ){.  
28920 20 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74        ii = sqlit
28930 65 33 73 65 73 73 69 6f 6e 5f 65 6e 61 62 6c 65  e3session_enable
28940 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 69 69  (pSession->p, ii
28950 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  );.        utf8_
28960 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
28970 73 65 73 73 69 6f 6e 20 25 73 20 65 6e 61 62 6c  session %s enabl
28980 65 20 66 6c 61 67 20 3d 20 25 64 5c 6e 22 2c 0a  e flag = %d\n",.
28990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289a0 20 20 20 20 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e      pSession->zN
289b0 61 6d 65 2c 20 69 69 29 3b 0a 20 20 20 20 20 20  ame, ii);.      
289c0 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20  }.    }else..   
289d0 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 66 69 6c   /* .session fil
289e0 74 65 72 20 47 4c 4f 42 20 2e 2e 2e 2e 0a 20 20  ter GLOB .....  
289f0 20 20 2a 2a 20 53 65 74 20 61 20 6c 69 73 74 20    ** Set a list 
28a00 6f 66 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 73  of GLOB patterns
28a10 20 6f 66 20 74 61 62 6c 65 20 6e 61 6d 65 73 20   of table names 
28a20 74 6f 20 62 65 20 65 78 63 6c 75 64 65 64 2e 0a  to be excluded..
28a30 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73      */.    if( s
28a40 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20  trcmp(azCmd[0], 
28a50 22 66 69 6c 74 65 72 22 29 3d 3d 30 20 29 7b 0a  "filter")==0 ){.
28a60 20 20 20 20 20 20 69 6e 74 20 69 69 2c 20 6e 42        int ii, nB
28a70 79 74 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e  yte;.      if( n
28a80 43 6d 64 3c 32 20 29 20 67 6f 74 6f 20 73 65 73  Cmd<2 ) goto ses
28a90 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f  sion_syntax_erro
28aa0 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  r;.      if( p->
28ab0 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20  nSession ){.    
28ac0 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
28ad0 3c 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74  <pSession->nFilt
28ae0 65 72 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  er; ii++){.     
28af0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
28b00 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  e(pSession->azFi
28b10 6c 74 65 72 5b 69 69 5d 29 3b 0a 20 20 20 20 20  lter[ii]);.     
28b20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
28b30 69 74 65 33 5f 66 72 65 65 28 70 53 65 73 73 69  ite3_free(pSessi
28b40 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 29 3b 0a 20  on->azFilter);. 
28b50 20 20 20 20 20 20 20 6e 42 79 74 65 20 3d 20 73         nByte = s
28b60 69 7a 65 6f 66 28 70 53 65 73 73 69 6f 6e 2d 3e  izeof(pSession->
28b70 61 7a 46 69 6c 74 65 72 5b 30 5d 29 2a 28 6e 43  azFilter[0])*(nC
28b80 6d 64 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 70  md-1);.        p
28b90 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65  Session->azFilte
28ba0 72 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  r = sqlite3_mall
28bb0 6f 63 28 20 6e 42 79 74 65 20 29 3b 0a 20 20 20  oc( nByte );.   
28bc0 20 20 20 20 20 69 66 28 20 70 53 65 73 73 69 6f       if( pSessio
28bd0 6e 2d 3e 61 7a 46 69 6c 74 65 72 3d 3d 30 20 29  n->azFilter==0 )
28be0 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f  {.          raw_
28bf0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
28c00 45 72 72 6f 72 3a 20 6f 75 74 20 6f 72 20 6d 65  Error: out or me
28c10 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20  mory\n");.      
28c20 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20      exit(1);.   
28c30 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66       }.        f
28c40 6f 72 28 69 69 3d 31 3b 20 69 69 3c 6e 43 6d 64  or(ii=1; ii<nCmd
28c50 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
28c60 20 20 20 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46     pSession->azF
28c70 69 6c 74 65 72 5b 69 69 2d 31 5d 20 3d 20 73 71  ilter[ii-1] = sq
28c80 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
28c90 73 22 2c 20 61 7a 43 6d 64 5b 69 69 5d 29 3b 0a  s", azCmd[ii]);.
28ca0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
28cb0 20 20 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c    pSession->nFil
28cc0 74 65 72 20 3d 20 69 69 2d 31 3b 0a 20 20 20 20  ter = ii-1;.    
28cd0 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20    }.    }else.. 
28ce0 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 69     /* .session i
28cf0 6e 64 69 72 65 63 74 20 3f 42 4f 4f 4c 45 41 4e  ndirect ?BOOLEAN
28d00 3f 0a 20 20 20 20 2a 2a 20 51 75 65 72 79 20 6f  ?.    ** Query o
28d10 72 20 73 65 74 20 74 68 65 20 69 6e 64 69 72 65  r set the indire
28d20 63 74 20 66 6c 61 67 0a 20 20 20 20 2a 2f 0a 20  ct flag.    */. 
28d30 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a     if( strcmp(az
28d40 43 6d 64 5b 30 5d 2c 20 22 69 6e 64 69 72 65 63  Cmd[0], "indirec
28d50 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  t")==0 ){.      
28d60 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 69 66  int ii;.      if
28d70 28 20 6e 43 6d 64 3e 32 20 29 20 67 6f 74 6f 20  ( nCmd>2 ) goto 
28d80 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65  session_syntax_e
28d90 72 72 6f 72 3b 0a 20 20 20 20 20 20 69 69 20 3d  rror;.      ii =
28da0 20 6e 43 6d 64 3d 3d 31 20 3f 20 2d 31 20 3a 20   nCmd==1 ? -1 : 
28db0 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 43  booleanValue(azC
28dc0 6d 64 5b 31 5d 29 3b 0a 20 20 20 20 20 20 69 66  md[1]);.      if
28dd0 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 29 7b  ( p->nSession ){
28de0 0a 20 20 20 20 20 20 20 20 69 69 20 3d 20 73 71  .        ii = sq
28df0 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 69 6e 64  lite3session_ind
28e00 69 72 65 63 74 28 70 53 65 73 73 69 6f 6e 2d 3e  irect(pSession->
28e10 70 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 20 20  p, ii);.        
28e20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
28e30 75 74 2c 20 22 73 65 73 73 69 6f 6e 20 25 73 20  ut, "session %s 
28e40 69 6e 64 69 72 65 63 74 20 66 6c 61 67 20 3d 20  indirect flag = 
28e50 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  %d\n",.         
28e60 20 20 20 20 20 20 20 20 20 20 20 70 53 65 73 73             pSess
28e70 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29 3b  ion->zName, ii);
28e80 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
28e90 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73  se..    /* .sess
28ea0 69 6f 6e 20 69 73 65 6d 70 74 79 0a 20 20 20 20  ion isempty.    
28eb0 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20  ** Determine if 
28ec0 74 68 65 20 73 65 73 73 69 6f 6e 20 69 73 20 65  the session is e
28ed0 6d 70 74 79 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mpty.    */.    
28ee0 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64  if( strcmp(azCmd
28ef0 5b 30 5d 2c 20 22 69 73 65 6d 70 74 79 22 29 3d  [0], "isempty")=
28f00 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
28f10 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43  ii;.      if( nC
28f20 6d 64 21 3d 31 20 29 20 67 6f 74 6f 20 73 65 73  md!=1 ) goto ses
28f30 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f  sion_syntax_erro
28f40 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  r;.      if( p->
28f50 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20  nSession ){.    
28f60 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33      ii = sqlite3
28f70 73 65 73 73 69 6f 6e 5f 69 73 65 6d 70 74 79 28  session_isempty(
28f80 70 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20  pSession->p);.  
28f90 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
28fa0 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65 73 73 69  f(p->out, "sessi
28fb0 6f 6e 20 25 73 20 69 73 65 6d 70 74 79 20 66 6c  on %s isempty fl
28fc0 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20 20 20 20  ag = %d\n",.    
28fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fe0 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c  pSession->zName,
28ff0 20 69 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   ii);.      }.  
29000 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20    }else..    /* 
29010 2e 73 65 73 73 69 6f 6e 20 6c 69 73 74 0a 20 20  .session list.  
29020 20 20 2a 2a 20 4c 69 73 74 20 61 6c 6c 20 63 75    ** List all cu
29030 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 73 65 73  rrently open ses
29040 73 69 6f 6e 73 0a 20 20 20 20 2a 2f 0a 20 20 20  sions.    */.   
29050 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d   if( strcmp(azCm
29060 64 5b 30 5d 2c 22 6c 69 73 74 22 29 3d 3d 30 20  d[0],"list")==0 
29070 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  ){.      for(i=0
29080 3b 20 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b  ; i<p->nSession;
29090 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 75   i++){.        u
290a0 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
290b0 74 2c 20 22 25 64 20 25 73 5c 6e 22 2c 20 69 2c  t, "%d %s\n", i,
290c0 20 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 5d 2e   p->aSession[i].
290d0 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a  zName);.      }.
290e0 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f      }else..    /
290f0 2a 20 2e 73 65 73 73 69 6f 6e 20 6f 70 65 6e 20  * .session open 
29100 44 42 20 4e 41 4d 45 0a 20 20 20 20 2a 2a 20 4f  DB NAME.    ** O
29110 70 65 6e 20 61 20 6e 65 77 20 73 65 73 73 69 6f  pen a new sessio
29120 6e 20 63 61 6c 6c 65 64 20 4e 41 4d 45 20 6f 6e  n called NAME on
29130 20 74 68 65 20 61 74 74 61 63 68 65 64 20 64 61   the attached da
29140 74 61 62 61 73 65 20 44 42 2e 0a 20 20 20 20 2a  tabase DB..    *
29150 2a 20 44 42 20 69 73 20 6e 6f 72 6d 61 6c 6c 79  * DB is normally
29160 20 22 6d 61 69 6e 22 2e 0a 20 20 20 20 2a 2f 0a   "main"..    */.
29170 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61      if( strcmp(a
29180 7a 43 6d 64 5b 30 5d 2c 22 6f 70 65 6e 22 29 3d  zCmd[0],"open")=
29190 3d 30 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72  =0 ){.      char
291a0 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20 69   *zName;.      i
291b0 66 28 20 6e 43 6d 64 21 3d 33 20 29 20 67 6f 74  f( nCmd!=3 ) got
291c0 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78  o session_syntax
291d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7a 4e  _error;.      zN
291e0 61 6d 65 20 3d 20 61 7a 43 6d 64 5b 32 5d 3b 0a  ame = azCmd[2];.
291f0 20 20 20 20 20 20 69 66 28 20 7a 4e 61 6d 65 5b        if( zName[
29200 30 5d 3d 3d 30 20 29 20 67 6f 74 6f 20 73 65 73  0]==0 ) goto ses
29210 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f  sion_syntax_erro
29220 72 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  r;.      for(i=0
29230 3b 20 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b  ; i<p->nSession;
29240 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
29250 66 28 20 73 74 72 63 6d 70 28 70 2d 3e 61 53 65  f( strcmp(p->aSe
29260 73 73 69 6f 6e 5b 69 5d 2e 7a 4e 61 6d 65 2c 7a  ssion[i].zName,z
29270 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Name)==0 ){.    
29280 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
29290 66 28 73 74 64 65 72 72 2c 20 22 53 65 73 73 69  f(stderr, "Sessi
292a0 6f 6e 20 5c 22 25 73 5c 22 20 61 6c 72 65 61 64  on \"%s\" alread
292b0 79 20 65 78 69 73 74 73 5c 6e 22 2c 20 7a 4e 61  y exists\n", zNa
292c0 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67  me);.          g
292d0 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
292e0 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 20 20 7d  _exit;.        }
292f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
29300 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 3e 3d  f( p->nSession>=
29310 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 53 65  ArraySize(p->aSe
29320 73 73 69 6f 6e 29 20 29 7b 0a 20 20 20 20 20 20  ssion) ){.      
29330 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
29340 65 72 72 2c 20 22 4d 61 78 69 6d 75 6d 20 6f 66  err, "Maximum of
29350 20 25 64 20 73 65 73 73 69 6f 6e 73 5c 6e 22 2c   %d sessions\n",
29360 20 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 53   ArraySize(p->aS
29370 65 73 73 69 6f 6e 29 29 3b 0a 20 20 20 20 20 20  ession));.      
29380 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
29390 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20  and_exit;.      
293a0 7d 0a 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e  }.      pSession
293b0 20 3d 20 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b   = &p->aSession[
293c0 70 2d 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20  p->nSession];.  
293d0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
293e0 73 65 73 73 69 6f 6e 5f 63 72 65 61 74 65 28 70  session_create(p
293f0 2d 3e 64 62 2c 20 61 7a 43 6d 64 5b 31 5d 2c 20  ->db, azCmd[1], 
29400 26 70 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20  &pSession->p);. 
29410 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20       if( rc ){. 
29420 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
29430 66 28 73 74 64 65 72 72 2c 20 22 43 61 6e 6e 6f  f(stderr, "Canno
29440 74 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 3a 20  t open session: 
29450 65 72 72 6f 72 20 63 6f 64 65 3d 25 64 5c 6e 22  error code=%d\n"
29460 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72  , rc);.        r
29470 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 67  c = 0;.        g
29480 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
29490 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20  _exit;.      }. 
294a0 20 20 20 20 20 70 53 65 73 73 69 6f 6e 2d 3e 6e       pSession->n
294b0 46 69 6c 74 65 72 20 3d 20 30 3b 0a 20 20 20 20  Filter = 0;.    
294c0 20 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e    sqlite3session
294d0 5f 74 61 62 6c 65 5f 66 69 6c 74 65 72 28 70 53  _table_filter(pS
294e0 65 73 73 69 6f 6e 2d 3e 70 2c 20 73 65 73 73 69  ession->p, sessi
294f0 6f 6e 5f 66 69 6c 74 65 72 2c 20 70 53 65 73 73  on_filter, pSess
29500 69 6f 6e 29 3b 0a 20 20 20 20 20 20 70 2d 3e 6e  ion);.      p->n
29510 53 65 73 73 69 6f 6e 2b 2b 3b 0a 20 20 20 20 20  Session++;.     
29520 20 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65   pSession->zName
29530 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
29540 74 66 28 22 25 73 22 2c 20 7a 4e 61 6d 65 29 3b  tf("%s", zName);
29550 0a 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 2f  .    }else.    /
29560 2a 20 49 66 20 6e 6f 20 63 6f 6d 6d 61 6e 64 20  * If no command 
29570 6e 61 6d 65 20 6d 61 74 63 68 65 73 2c 20 73 68  name matches, sh
29580 6f 77 20 61 20 73 79 6e 74 61 78 20 65 72 72 6f  ow a syntax erro
29590 72 20 2a 2f 0a 20 20 20 20 73 65 73 73 69 6f 6e  r */.    session
295a0 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3a 0a 20  _syntax_error:. 
295b0 20 20 20 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28     session_help(
295c0 70 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64  p);.  }else.#end
295d0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
295e0 45 5f 44 45 42 55 47 0a 20 20 2f 2a 20 55 6e 64  E_DEBUG.  /* Und
295f0 6f 63 75 6d 65 6e 74 65 64 20 63 6f 6d 6d 61 6e  ocumented comman
29600 64 73 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20  ds for internal 
29610 74 65 73 74 69 6e 67 2e 20 20 53 75 62 6a 65 63  testing.  Subjec
29620 74 20 74 6f 20 63 68 61 6e 67 65 0a 20 20 2a 2a  t to change.  **
29630 20 77 69 74 68 6f 75 74 20 6e 6f 74 69 63 65 2e   without notice.
29640 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 73 27   */.  if( c=='s'
29650 20 26 26 20 6e 3e 3d 31 30 20 26 26 20 73 74 72   && n>=10 && str
29660 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
29670 73 65 6c 66 74 65 73 74 2d 22 2c 20 39 29 3d 3d  selftest-", 9)==
29680 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 74 72  0 ){.    if( str
29690 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2b 39 2c  ncmp(azArg[0]+9,
296a0 20 22 62 6f 6f 6c 65 61 6e 22 2c 20 6e 2d 39 29   "boolean", n-9)
296b0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ==0 ){.      int
296c0 20 69 2c 20 76 3b 0a 20 20 20 20 20 20 66 6f 72   i, v;.      for
296d0 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=1; i<nArg; i+
296e0 2b 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20  +){.        v = 
296f0 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
29700 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[i]);.        
29710 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
29720 75 74 2c 20 22 25 73 3a 20 25 64 20 30 78 25 78  ut, "%s: %d 0x%x
29730 5c 6e 22 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 76  \n", azArg[i], v
29740 2c 20 76 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , v);.      }.  
29750 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72 6e    }.    if( strn
29760 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20  cmp(azArg[0]+9, 
29770 22 69 6e 74 65 67 65 72 22 2c 20 6e 2d 39 29 3d  "integer", n-9)=
29780 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
29790 69 3b 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  i; sqlite3_int64
297a0 20 76 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   v;.      for(i=
297b0 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  1; i<nArg; i++){
297c0 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 7a 42  .        char zB
297d0 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 20 20 20  uf[200];.       
297e0 20 76 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75   v = integerValu
297f0 65 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  e(azArg[i]);.   
29800 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
29810 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 42 75  rintf(sizeof(zBu
29820 66 29 2c 7a 42 75 66 2c 22 25 73 3a 20 25 6c 6c  f),zBuf,"%s: %ll
29830 64 20 30 78 25 6c 6c 78 5c 6e 22 2c 20 61 7a 41  d 0x%llx\n", azA
29840 72 67 5b 69 5d 2c 76 2c 76 29 3b 0a 20 20 20 20  rg[i],v,v);.    
29850 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
29860 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 42  p->out, "%s", zB
29870 75 66 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  uf);.      }.   
29880 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69   }.  }else.#endi
29890 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20  f..  if( c=='s' 
298a0 26 26 20 6e 3e 3d 34 20 26 26 20 73 74 72 6e 63  && n>=4 && strnc
298b0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 22 73 65 6c  mp(azArg[0],"sel
298c0 66 74 65 73 74 22 2c 6e 29 3d 3d 30 20 29 7b 0a  ftest",n)==0 ){.
298d0 20 20 20 20 69 6e 74 20 62 49 73 49 6e 69 74 20      int bIsInit 
298e0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
298f0 54 72 75 65 20 74 6f 20 69 6e 69 74 69 61 6c 69  True to initiali
29900 7a 65 20 74 68 65 20 53 45 4c 46 54 45 53 54 20  ze the SELFTEST 
29910 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
29920 20 62 56 65 72 62 6f 73 65 20 3d 20 30 3b 20 20   bVerbose = 0;  
29930 20 20 20 20 20 20 2f 2a 20 56 65 72 62 6f 73 65        /* Verbose
29940 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 20 20 69   output */.    i
29950 6e 74 20 62 53 65 6c 66 74 65 73 74 45 78 69 73  nt bSelftestExis
29960 74 73 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  ts;     /* True 
29970 69 66 20 53 45 4c 46 54 45 53 54 20 61 6c 72 65  if SELFTEST alre
29980 61 64 79 20 65 78 69 73 74 73 20 2a 2f 0a 20 20  ady exists */.  
29990 20 20 69 6e 74 20 69 2c 20 6b 3b 20 20 20 20 20    int i, k;     
299a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
299b0 6f 70 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  op counters */. 
299c0 20 20 20 69 6e 74 20 6e 54 65 73 74 20 3d 20 30     int nTest = 0
299d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
299e0 75 6d 62 65 72 20 6f 66 20 74 65 73 74 73 20 72  umber of tests r
299f0 75 6e 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  uns */.    int n
29a00 45 72 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Err = 0;        
29a10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
29a20 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
29a30 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20 73 74      ShellText st
29a40 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
29a50 41 6e 73 77 65 72 20 66 6f 72 20 61 20 71 75 65  Answer for a que
29a60 72 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ry */.    sqlite
29a70 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
29a80 30 3b 20 2f 2a 20 51 75 65 72 79 20 61 67 61 69  0; /* Query agai
29a90 6e 73 74 20 74 68 65 20 53 45 4c 46 54 45 53 54  nst the SELFTEST
29aa0 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 20 20 6f   table */..    o
29ab0 70 65 6e 5f 64 62 28 70 2c 30 29 3b 0a 20 20 20  pen_db(p,0);.   
29ac0 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67   for(i=1; i<nArg
29ad0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f  ; i++){.      co
29ae0 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a  nst char *z = az
29af0 41 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66  Arg[i];.      if
29b00 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 26 26 20 7a  ( z[0]=='-' && z
29b10 5b 31 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a  [1]=='-' ) z++;.
29b20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70        if( strcmp
29b30 28 7a 2c 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29  (z,"-init")==0 )
29b40 7b 0a 20 20 20 20 20 20 20 20 62 49 73 49 6e 69  {.        bIsIni
29b50 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c  t = 1;.      }el
29b60 73 65 0a 20 20 20 20 20 20 69 66 28 20 73 74 72  se.      if( str
29b70 63 6d 70 28 7a 2c 22 2d 76 22 29 3d 3d 30 20 29  cmp(z,"-v")==0 )
29b80 7b 0a 20 20 20 20 20 20 20 20 62 56 65 72 62 6f  {.        bVerbo
29b90 73 65 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  se++;.      }els
29ba0 65 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  e.      {.      
29bb0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
29bc0 64 65 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f  derr, "Unknown o
29bd0 70 74 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20  ption \"%s\" on 
29be0 5c 22 25 73 5c 22 5c 6e 22 2c 0a 20 20 20 20 20  \"%s\"\n",.     
29bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
29c00 7a 41 72 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30  zArg[i], azArg[0
29c10 5d 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f  ]);.        raw_
29c20 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
29c30 53 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66  Should be one of
29c40 3a 20 2d 2d 69 6e 69 74 20 2d 76 5c 6e 22 29 3b  : --init -v\n");
29c50 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
29c60 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  .        goto me
29c70 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
29c80 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
29c90 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74     if( sqlite3_t
29ca0 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
29cb0 64 61 74 61 28 70 2d 3e 64 62 2c 22 6d 61 69 6e  data(p->db,"main
29cc0 22 2c 22 73 65 6c 66 74 65 73 74 22 2c 30 2c 30  ","selftest",0,0
29cd0 2c 30 2c 30 2c 30 2c 30 29 0a 20 20 20 20 20 20  ,0,0,0,0).      
29ce0 20 20 20 20 20 21 3d 20 53 51 4c 49 54 45 5f 4f       != SQLITE_O
29cf0 4b 20 29 7b 0a 20 20 20 20 20 20 62 53 65 6c 66  K ){.      bSelf
29d00 74 65 73 74 45 78 69 73 74 73 20 3d 20 30 3b 0a  testExists = 0;.
29d10 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
29d20 20 62 53 65 6c 66 74 65 73 74 45 78 69 73 74 73   bSelftestExists
29d30 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
29d40 69 66 28 20 62 49 73 49 6e 69 74 20 29 7b 0a 20  if( bIsInit ){. 
29d50 20 20 20 20 20 63 72 65 61 74 65 53 65 6c 66 74       createSelft
29d60 65 73 74 54 61 62 6c 65 28 70 29 3b 0a 20 20 20  estTable(p);.   
29d70 20 20 20 62 53 65 6c 66 74 65 73 74 45 78 69 73     bSelftestExis
29d80 74 73 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  ts = 1;.    }.  
29d90 20 20 69 6e 69 74 54 65 78 74 28 26 73 74 72 29    initText(&str)
29da0 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78 74  ;.    appendText
29db0 28 26 73 74 72 2c 20 22 78 22 2c 20 30 29 3b 0a  (&str, "x", 0);.
29dc0 20 20 20 20 66 6f 72 28 6b 3d 62 53 65 6c 66 74      for(k=bSelft
29dd0 65 73 74 45 78 69 73 74 73 3b 20 6b 3e 3d 30 3b  estExists; k>=0;
29de0 20 6b 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28   k--){.      if(
29df0 20 6b 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 20   k==1 ){.       
29e00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
29e10 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 0a  epare_v2(p->db,.
29e20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 45 4c              "SEL
29e30 45 43 54 20 74 6e 6f 2c 6f 70 2c 63 6d 64 2c 61  ECT tno,op,cmd,a
29e40 6e 73 20 46 52 4f 4d 20 73 65 6c 66 74 65 73 74  ns FROM selftest
29e50 20 4f 52 44 45 52 20 42 59 20 74 6e 6f 22 2c 0a   ORDER BY tno",.
29e60 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20              -1, 
29e70 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  &pStmt, 0);.    
29e80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
29e90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
29ea0 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 0a  epare_v2(p->db,.
29eb0 20 20 20 20 20 20 20 20 20 20 22 56 41 4c 55 45            "VALUE
29ec0 53 28 30 2c 27 6d 65 6d 6f 27 2c 27 4d 69 73 73  S(0,'memo','Miss
29ed0 69 6e 67 20 53 45 4c 46 54 45 53 54 20 74 61 62  ing SELFTEST tab
29ee0 6c 65 20 2d 20 64 65 66 61 75 6c 74 20 63 68 65  le - default che
29ef0 63 6b 73 20 6f 6e 6c 79 27 2c 27 27 29 2c 22 0a  cks only',''),".
29f00 20 20 20 20 20 20 20 20 20 20 22 20 20 20 20 20            "     
29f10 20 28 31 2c 27 72 75 6e 27 2c 27 50 52 41 47 4d   (1,'run','PRAGM
29f20 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
29f30 6b 27 2c 27 6f 6b 27 29 22 2c 0a 20 20 20 20 20  k','ok')",.     
29f40 20 20 20 20 20 2d 31 2c 20 26 70 53 74 6d 74 2c       -1, &pStmt,
29f50 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   0);.      }.   
29f60 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
29f70 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
29f80 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20 71  stderr, "Error q
29f90 75 65 72 79 69 6e 67 20 74 68 65 20 73 65 6c 66  uerying the self
29fa0 74 65 73 74 20 74 61 62 6c 65 5c 6e 22 29 3b 0a  test table\n");.
29fb0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
29fc0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
29fd0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
29fe0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  .        goto me
29ff0 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
2a000 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66  .      }.      f
2a010 6f 72 28 69 3d 31 3b 20 73 71 6c 69 74 65 33 5f  or(i=1; sqlite3_
2a020 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c  step(pStmt)==SQL
2a030 49 54 45 5f 52 4f 57 3b 20 69 2b 2b 29 7b 0a 20  ITE_ROW; i++){. 
2a040 20 20 20 20 20 20 20 69 6e 74 20 74 6e 6f 20 3d         int tno =
2a050 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2a060 69 6e 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20  int(pStmt, 0);. 
2a070 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2a080 72 20 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73 74 20  r *zOp = (const 
2a090 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
2a0a0 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c  lumn_text(pStmt,
2a0b0 20 31 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e   1);.        con
2a0c0 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20  st char *zSql = 
2a0d0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
2a0e0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
2a0f0 28 70 53 74 6d 74 2c 20 32 29 3b 0a 20 20 20 20  (pStmt, 2);.    
2a100 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
2a110 7a 41 6e 73 20 3d 20 28 63 6f 6e 73 74 20 63 68  zAns = (const ch
2a120 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
2a130 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 33  mn_text(pStmt, 3
2a140 29 3b 0a 0a 20 20 20 20 20 20 20 20 6b 20 3d 20  );..        k = 
2a150 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 62  0;.        if( b
2a160 56 65 72 62 6f 73 65 3e 30 20 29 7b 0a 20 20 20  Verbose>0 ){.   
2a170 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 51 75         char *zQu
2a180 6f 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ote = sqlite3_mp
2a190 72 69 6e 74 66 28 22 25 71 22 2c 20 7a 53 71 6c  rintf("%q", zSql
2a1a0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72 69  );.          pri
2a1b0 6e 74 66 28 22 25 64 3a 20 25 73 20 25 73 5c 6e  ntf("%d: %s %s\n
2a1c0 22 2c 20 74 6e 6f 2c 20 7a 4f 70 2c 20 7a 53 71  ", tno, zOp, zSq
2a1d0 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  l);.          sq
2a1e0 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75 6f 74  lite3_free(zQuot
2a1f0 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  e);.        }.  
2a200 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70        if( strcmp
2a210 28 7a 4f 70 2c 22 6d 65 6d 6f 22 29 3d 3d 30 20  (zOp,"memo")==0 
2a220 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
2a230 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2a240 20 22 25 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a   "%s\n", zSql);.
2a250 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20          }else.  
2a260 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70        if( strcmp
2a270 28 7a 4f 70 2c 22 72 75 6e 22 29 3d 3d 30 20 29  (zOp,"run")==0 )
2a280 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72  {.          char
2a290 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20   *zErrMsg = 0;. 
2a2a0 20 20 20 20 20 20 20 20 20 73 74 72 2e 6e 20 3d           str.n =
2a2b0 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 73 74   0;.          st
2a2c0 72 2e 7a 5b 30 5d 20 3d 20 30 3b 0a 20 20 20 20  r.z[0] = 0;.    
2a2d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2a2e0 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a  e3_exec(p->db, z
2a2f0 53 71 6c 2c 20 63 61 70 74 75 72 65 4f 75 74 70  Sql, captureOutp
2a300 75 74 43 61 6c 6c 62 61 63 6b 2c 20 26 73 74 72  utCallback, &str
2a310 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  , &zErrMsg);.   
2a320 20 20 20 20 20 20 20 6e 54 65 73 74 2b 2b 3b 0a         nTest++;.
2a330 20 20 20 20 20 20 20 20 20 20 69 66 28 20 62 56            if( bV
2a340 65 72 62 6f 73 65 20 29 7b 0a 20 20 20 20 20 20  erbose ){.      
2a350 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2a360 66 28 70 2d 3e 6f 75 74 2c 20 22 52 65 73 75 6c  f(p->out, "Resul
2a370 74 3a 20 25 73 5c 6e 22 2c 20 73 74 72 2e 7a 29  t: %s\n", str.z)
2a380 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
2a390 20 20 20 20 20 20 20 20 69 66 28 20 72 63 20 7c          if( rc |
2a3a0 7c 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20  | zErrMsg ){.   
2a3b0 20 20 20 20 20 20 20 20 20 6e 45 72 72 2b 2b 3b           nErr++;
2a3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20  .            rc 
2a3d0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20  = 1;.           
2a3e0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
2a3f0 6f 75 74 2c 20 22 25 64 3a 20 65 72 72 6f 72 2d  out, "%d: error-
2a400 63 6f 64 65 2d 25 64 3a 20 25 73 5c 6e 22 2c 20  code-%d: %s\n", 
2a410 74 6e 6f 2c 20 72 63 2c 20 7a 45 72 72 4d 73 67  tno, rc, zErrMsg
2a420 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
2a430 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
2a440 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Msg);.          
2a450 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
2a460 28 7a 41 6e 73 2c 73 74 72 2e 7a 29 21 3d 30 20  (zAns,str.z)!=0 
2a470 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ){.            n
2a480 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20  Err++;.         
2a490 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
2a4a0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
2a4b0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 3a 20  tf(p->out, "%d: 
2a4c0 45 78 70 65 63 74 65 64 3a 20 5b 25 73 5d 5c 6e  Expected: [%s]\n
2a4d0 22 2c 20 74 6e 6f 2c 20 7a 41 6e 73 29 3b 0a 20  ", tno, zAns);. 
2a4e0 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
2a4f0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2a500 25 64 3a 20 20 20 20 20 20 47 6f 74 3a 20 5b 25  %d:      Got: [%
2a510 73 5d 5c 6e 22 2c 20 74 6e 6f 2c 20 73 74 72 2e  s]\n", tno, str.
2a520 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  z);.          }.
2a530 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20          }else.  
2a540 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2a550 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
2a560 64 65 72 72 2c 0a 20 20 20 20 20 20 20 20 20 20  derr,.          
2a570 20 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61    "Unknown opera
2a580 74 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 73  tion \"%s\" on s
2a590 65 6c 66 74 65 73 74 20 6c 69 6e 65 20 25 64 5c  elftest line %d\
2a5a0 6e 22 2c 20 7a 4f 70 2c 20 74 6e 6f 29 3b 0a 20  n", zOp, tno);. 
2a5b0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b           rc = 1;
2a5c0 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
2a5d0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2a5e0 20 20 7d 20 2f 2a 20 45 6e 64 20 6c 6f 6f 70 20    } /* End loop 
2a5f0 6f 76 65 72 20 72 6f 77 73 20 6f 66 20 63 6f 6e  over rows of con
2a600 74 65 6e 74 20 66 72 6f 6d 20 53 45 4c 46 54 45  tent from SELFTE
2a610 53 54 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  ST */.      sqli
2a620 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
2a630 6d 74 29 3b 0a 20 20 20 20 7d 20 2f 2a 20 45 6e  mt);.    } /* En
2a640 64 20 6c 6f 6f 70 20 6f 76 65 72 20 6b 20 2a 2f  d loop over k */
2a650 0a 20 20 20 20 66 72 65 65 54 65 78 74 28 26 73  .    freeText(&s
2a660 74 72 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  tr);.    utf8_pr
2a670 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64  intf(p->out, "%d
2a680 20 65 72 72 6f 72 73 20 6f 75 74 20 6f 66 20 25   errors out of %
2a690 64 20 74 65 73 74 73 5c 6e 22 2c 20 6e 45 72 72  d tests\n", nErr
2a6a0 2c 20 6e 54 65 73 74 29 3b 0a 20 20 7d 65 6c 73  , nTest);.  }els
2a6b0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20  e..  if( c=='s' 
2a6c0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
2a6d0 5b 30 5d 2c 20 22 73 65 70 61 72 61 74 6f 72 22  [0], "separator"
2a6e0 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
2a6f0 66 28 20 6e 41 72 67 3c 32 20 7c 7c 20 6e 41 72  f( nArg<2 || nAr
2a700 67 3e 33 20 29 7b 0a 20 20 20 20 20 20 72 61 77  g>3 ){.      raw
2a710 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2a720 22 55 73 61 67 65 3a 20 2e 73 65 70 61 72 61 74  "Usage: .separat
2a730 6f 72 20 43 4f 4c 20 3f 52 4f 57 3f 5c 6e 22 29  or COL ?ROW?\n")
2a740 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2a750 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41      }.    if( nA
2a760 72 67 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20 73  rg>=2 ){.      s
2a770 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
2a780 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70  sizeof(p->colSep
2a790 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53  arator), p->colS
2a7a0 65 70 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20  eparator,.      
2a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7c0 20 22 25 2e 2a 73 22 2c 20 28 69 6e 74 29 41 72   "%.*s", (int)Ar
2a7d0 72 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 53 65  raySize(p->colSe
2a7e0 70 61 72 61 74 6f 72 29 2d 31 2c 20 61 7a 41 72  parator)-1, azAr
2a7f0 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  g[1]);.    }.   
2a800 20 69 66 28 20 6e 41 72 67 3e 3d 33 20 29 7b 0a   if( nArg>=3 ){.
2a810 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
2a820 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d  printf(sizeof(p-
2a830 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20  >rowSeparator), 
2a840 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c  p->rowSeparator,
2a850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a860 20 20 20 20 20 20 20 20 22 25 2e 2a 73 22 2c 20          "%.*s", 
2a870 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65 28 70  (int)ArraySize(p
2a880 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2d  ->rowSeparator)-
2a890 31 2c 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20  1, azArg[2]);.  
2a8a0 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
2a8b0 66 28 20 63 3d 3d 27 73 27 20 26 26 20 6e 3e 3d  f( c=='s' && n>=
2a8c0 34 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  4 && strncmp(azA
2a8d0 72 67 5b 30 5d 2c 22 73 68 61 33 73 75 6d 22 2c  rg[0],"sha3sum",
2a8e0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e  n)==0 ){.    con
2a8f0 73 74 20 63 68 61 72 20 2a 7a 4c 69 6b 65 20 3d  st char *zLike =
2a900 20 30 3b 20 20 20 2f 2a 20 57 68 69 63 68 20 74   0;   /* Which t
2a910 61 62 6c 65 20 74 6f 20 63 68 65 63 6b 73 75 6d  able to checksum
2a920 2e 20 30 20 6d 65 61 6e 73 20 65 76 65 72 79 74  . 0 means everyt
2a930 68 69 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20  hing */.    int 
2a940 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
2a950 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
2a960 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nter */.    int 
2a970 62 53 63 68 65 6d 61 20 3d 20 30 3b 20 20 20 20  bSchema = 0;    
2a980 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 68 61 73       /* Also has
2a990 68 20 74 68 65 20 73 63 68 65 6d 61 20 2a 2f 0a  h the schema */.
2a9a0 20 20 20 20 69 6e 74 20 62 53 65 70 61 72 61 74      int bSeparat
2a9b0 65 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20  e = 0;       /* 
2a9c0 48 61 73 68 20 65 61 63 68 20 74 61 62 6c 65 20  Hash each table 
2a9d0 73 65 70 61 72 61 74 65 6c 79 20 2a 2f 0a 20 20  separately */.  
2a9e0 20 20 69 6e 74 20 69 53 69 7a 65 20 3d 20 32 32    int iSize = 22
2a9f0 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61  4;         /* Ha
2aa00 73 68 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  sh algorithm to 
2aa10 75 73 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62  use */.    int b
2aa20 44 65 62 75 67 20 3d 20 30 3b 20 20 20 20 20 20  Debug = 0;      
2aa30 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 73 68 6f 77      /* Only show
2aa40 20 74 68 65 20 71 75 65 72 79 20 74 68 61 74 20   the query that 
2aa50 77 6f 75 6c 64 20 68 61 76 65 20 72 75 6e 20 2a  would have run *
2aa60 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  /.    sqlite3_st
2aa70 6d 74 20 2a 70 53 74 6d 74 3b 20 20 20 20 20 2f  mt *pStmt;     /
2aa80 2a 20 46 6f 72 20 71 75 65 72 79 69 6e 67 20 74  * For querying t
2aa90 61 62 6c 65 73 20 6e 61 6d 65 73 20 2a 2f 0a 20  ables names */. 
2aaa0 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20     char *zSql;  
2aab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
2aac0 51 4c 20 74 6f 20 62 65 20 72 75 6e 20 2a 2f 0a  QL to be run */.
2aad0 20 20 20 20 63 68 61 72 20 2a 7a 53 65 70 3b 20      char *zSep; 
2aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2aaf0 53 65 70 61 72 61 74 6f 72 20 2a 2f 0a 20 20 20  Separator */.   
2ab00 20 53 68 65 6c 6c 54 65 78 74 20 73 53 71 6c 3b   ShellText sSql;
2ab10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
2ab20 70 6c 65 74 65 20 53 51 4c 20 66 6f 72 20 74 68  plete SQL for th
2ab30 65 20 71 75 65 72 79 20 74 6f 20 72 75 6e 20 74  e query to run t
2ab40 68 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 53  he hash */.    S
2ab50 68 65 6c 6c 54 65 78 74 20 73 51 75 65 72 79 3b  hellText sQuery;
2ab60 20 20 20 20 20 20 20 20 2f 2a 20 53 65 74 20 6f          /* Set o
2ab70 66 20 71 75 65 72 69 65 73 20 75 73 65 64 20 74  f queries used t
2ab80 6f 20 72 65 61 64 20 61 6c 6c 20 63 6f 6e 74 65  o read all conte
2ab90 6e 74 20 2a 2f 0a 20 20 20 20 6f 70 65 6e 5f 64  nt */.    open_d
2aba0 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 66 6f 72  b(p, 0);.    for
2abb0 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=1; i<nArg; i+
2abc0 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  +){.      const 
2abd0 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b  char *z = azArg[
2abe0 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b  i];.      if( z[
2abf0 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20  0]=='-' ){.     
2ac00 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20     z++;.        
2ac10 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20  if( z[0]=='-' ) 
2ac20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28  z++;.        if(
2ac30 20 73 74 72 63 6d 70 28 7a 2c 22 73 63 68 65 6d   strcmp(z,"schem
2ac40 61 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  a")==0 ){.      
2ac50 20 20 20 20 62 53 63 68 65 6d 61 20 3d 20 31 3b      bSchema = 1;
2ac60 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  .        }else. 
2ac70 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
2ac80 70 28 7a 2c 22 73 68 61 33 2d 32 32 34 22 29 3d  p(z,"sha3-224")=
2ac90 3d 30 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22  =0 || strcmp(z,"
2aca0 73 68 61 33 2d 32 35 36 22 29 3d 3d 30 0a 20 20  sha3-256")==0.  
2acb0 20 20 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70         || strcmp
2acc0 28 7a 2c 22 73 68 61 33 2d 33 38 34 22 29 3d 3d  (z,"sha3-384")==
2acd0 30 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73  0 || strcmp(z,"s
2ace0 68 61 33 2d 35 31 32 22 29 3d 3d 30 0a 20 20 20  ha3-512")==0.   
2acf0 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
2ad00 20 20 69 53 69 7a 65 20 3d 20 61 74 6f 69 28 26    iSize = atoi(&
2ad10 7a 5b 35 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d  z[5]);.        }
2ad20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 69 66 28  else.        if(
2ad30 20 73 74 72 63 6d 70 28 7a 2c 22 64 65 62 75 67   strcmp(z,"debug
2ad40 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
2ad50 20 20 20 62 44 65 62 75 67 20 3d 20 31 3b 0a 20     bDebug = 1;. 
2ad60 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20         }else.   
2ad70 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
2ad80 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
2ad90 65 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70  err, "Unknown op
2ada0 74 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c  tion \"%s\" on \
2adb0 22 25 73 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20  "%s\"\n",.      
2adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2add0 61 7a 41 72 67 5b 69 5d 2c 20 61 7a 41 72 67 5b  azArg[i], azArg[
2ade0 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  0]);.          r
2adf0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
2ae00 2c 20 22 53 68 6f 75 6c 64 20 62 65 20 6f 6e 65  , "Should be one
2ae10 20 6f 66 3a 20 2d 2d 73 63 68 65 6d 61 22 0a 20   of: --schema". 
2ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae30 20 20 20 20 20 20 20 20 20 20 20 20 22 20 2d 2d              " --
2ae40 73 68 61 33 2d 32 32 34 20 2d 2d 73 68 61 33 2d  sha3-224 --sha3-
2ae50 32 35 35 20 2d 2d 73 68 61 33 2d 33 38 34 20 2d  255 --sha3-384 -
2ae60 2d 73 68 61 33 2d 35 31 32 5c 6e 22 29 3b 0a 20  -sha3-512\n");. 
2ae70 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b           rc = 1;
2ae80 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
2ae90 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2aea0 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
2aeb0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 4c 69     }else if( zLi
2aec0 6b 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  ke ){.        ra
2aed0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2aee0 20 22 55 73 61 67 65 3a 20 2e 73 68 61 33 73 75   "Usage: .sha3su
2aef0 6d 20 3f 4f 50 54 49 4f 4e 53 3f 20 3f 4c 49 4b  m ?OPTIONS? ?LIK
2af00 45 2d 50 41 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a  E-PATTERN?\n");.
2af10 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
2af20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74          goto met
2af30 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2af40 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
2af50 20 20 20 20 20 7a 4c 69 6b 65 20 3d 20 7a 3b 0a       zLike = z;.
2af60 20 20 20 20 20 20 20 20 62 53 65 70 61 72 61 74          bSeparat
2af70 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  e = 1;.        i
2af80 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69  f( sqlite3_strli
2af90 6b 65 28 22 73 71 6c 69 74 65 5f 25 22 2c 20 7a  ke("sqlite_%", z
2afa0 4c 69 6b 65 2c 20 30 29 3d 3d 30 20 29 20 62 53  Like, 0)==0 ) bS
2afb0 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20 20 20 20  chema = 1;.     
2afc0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
2afd0 20 62 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20   bSchema ){.    
2afe0 20 20 7a 53 71 6c 20 3d 20 22 53 45 4c 45 43 54    zSql = "SELECT
2aff0 20 6c 6f 77 65 72 28 6e 61 6d 65 29 20 46 52 4f   lower(name) FRO
2b000 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  M sqlite_master"
2b010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20  .             " 
2b020 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c  WHERE type='tabl
2b030 65 27 20 41 4e 44 20 63 6f 61 6c 65 73 63 65 28  e' AND coalesce(
2b040 72 6f 6f 74 70 61 67 65 2c 30 29 3e 31 22 0a 20  rootpage,0)>1". 
2b050 20 20 20 20 20 20 20 20 20 20 20 20 22 20 55 4e              " UN
2b060 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 27  ION ALL SELECT '
2b070 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 27 22 0a  sqlite_master'".
2b080 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f               " O
2b090 52 44 45 52 20 42 59 20 31 20 63 6f 6c 6c 61 74  RDER BY 1 collat
2b0a0 65 20 6e 6f 63 61 73 65 22 3b 0a 20 20 20 20 7d  e nocase";.    }
2b0b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c  else{.      zSql
2b0c0 20 3d 20 22 53 45 4c 45 43 54 20 6c 6f 77 65 72   = "SELECT lower
2b0d0 28 6e 61 6d 65 29 20 46 52 4f 4d 20 73 71 6c 69  (name) FROM sqli
2b0e0 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20  te_master".     
2b0f0 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20          " WHERE 
2b100 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41 4e 44  type='table' AND
2b110 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f 74 70 61   coalesce(rootpa
2b120 67 65 2c 30 29 3e 31 22 0a 20 20 20 20 20 20 20  ge,0)>1".       
2b130 20 20 20 20 20 20 22 20 41 4e 44 20 6e 61 6d 65        " AND name
2b140 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69 74   NOT LIKE 'sqlit
2b150 65 5f 25 27 22 0a 20 20 20 20 20 20 20 20 20 20  e_%'".          
2b160 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 31 20     " ORDER BY 1 
2b170 63 6f 6c 6c 61 74 65 20 6e 6f 63 61 73 65 22 3b  collate nocase";
2b180 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
2b190 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
2b1a0 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26  >db, zSql, -1, &
2b1b0 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69  pStmt, 0);.    i
2b1c0 6e 69 74 54 65 78 74 28 26 73 51 75 65 72 79 29  nitText(&sQuery)
2b1d0 3b 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28 26  ;.    initText(&
2b1e0 73 53 71 6c 29 3b 0a 20 20 20 20 61 70 70 65 6e  sSql);.    appen
2b1f0 64 54 65 78 74 28 26 73 53 71 6c 2c 20 22 57 49  dText(&sSql, "WI
2b200 54 48 20 5b 73 68 61 33 73 75 6d 24 71 75 65 72  TH [sha3sum$quer
2b210 79 5d 28 61 2c 62 29 20 41 53 28 22 2c 30 29 3b  y](a,b) AS(",0);
2b220 0a 20 20 20 20 7a 53 65 70 20 3d 20 22 56 41 4c  .    zSep = "VAL
2b230 55 45 53 28 22 3b 0a 20 20 20 20 77 68 69 6c 65  UES(";.    while
2b240 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71  ( SQLITE_ROW==sq
2b250 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
2b260 29 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  ) ){.      const
2b270 20 63 68 61 72 20 2a 7a 54 61 62 20 3d 20 28 63   char *zTab = (c
2b280 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
2b290 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
2b2a0 53 74 6d 74 2c 30 29 3b 0a 20 20 20 20 20 20 69  Stmt,0);.      i
2b2b0 66 28 20 7a 4c 69 6b 65 20 26 26 20 73 71 6c 69  f( zLike && sqli
2b2c0 74 65 33 5f 73 74 72 6c 69 6b 65 28 7a 4c 69 6b  te3_strlike(zLik
2b2d0 65 2c 20 7a 54 61 62 2c 20 30 29 21 3d 30 20 29  e, zTab, 0)!=0 )
2b2e0 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
2b2f0 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 54 61   if( strncmp(zTa
2b300 62 2c 20 22 73 71 6c 69 74 65 5f 22 2c 37 29 21  b, "sqlite_",7)!
2b310 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70  =0 ){.        ap
2b320 70 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79  pendText(&sQuery
2b330 2c 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  ,"SELECT * FROM 
2b340 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61  ", 0);.        a
2b350 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65 72  ppendText(&sQuer
2b360 79 2c 7a 54 61 62 2c 27 22 27 29 3b 0a 20 20 20  y,zTab,'"');.   
2b370 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2b380 26 73 51 75 65 72 79 2c 22 20 4e 4f 54 20 49 4e  &sQuery," NOT IN
2b390 44 45 58 45 44 3b 22 2c 20 30 29 3b 0a 20 20 20  DEXED;", 0);.   
2b3a0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
2b3b0 63 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c 69 74  cmp(zTab, "sqlit
2b3c0 65 5f 6d 61 73 74 65 72 22 29 3d 3d 30 20 29 7b  e_master")==0 ){
2b3d0 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54  .        appendT
2b3e0 65 78 74 28 26 73 51 75 65 72 79 2c 22 53 45 4c  ext(&sQuery,"SEL
2b3f0 45 43 54 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62  ECT type,name,tb
2b400 6c 5f 6e 61 6d 65 2c 73 71 6c 20 46 52 4f 4d 20  l_name,sql FROM 
2b410 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20  sqlite_master". 
2b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b430 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44 45            " ORDE
2b440 52 20 42 59 20 6e 61 6d 65 3b 22 2c 20 30 29 3b  R BY name;", 0);
2b450 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
2b460 20 73 74 72 63 6d 70 28 7a 54 61 62 2c 20 22 73   strcmp(zTab, "s
2b470 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 22 29  qlite_sequence")
2b480 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
2b490 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65 72  ppendText(&sQuer
2b4a0 79 2c 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 73  y,"SELECT name,s
2b4b0 65 71 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73  eq FROM sqlite_s
2b4c0 65 71 75 65 6e 63 65 22 0a 20 20 20 20 20 20 20  equence".       
2b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4e0 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 6e      " ORDER BY n
2b4f0 61 6d 65 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20  ame;", 0);.     
2b500 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
2b510 70 28 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f  p(zTab, "sqlite_
2b520 73 74 61 74 31 22 29 3d 3d 30 20 29 7b 0a 20 20  stat1")==0 ){.  
2b530 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
2b540 28 26 73 51 75 65 72 79 2c 22 53 45 4c 45 43 54  (&sQuery,"SELECT
2b550 20 74 62 6c 2c 69 64 78 2c 73 74 61 74 20 46 52   tbl,idx,stat FR
2b560 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 22  OM sqlite_stat1"
2b570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b580 20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52              " OR
2b590 44 45 52 20 42 59 20 74 62 6c 2c 69 64 78 3b 22  DER BY tbl,idx;"
2b5a0 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  , 0);.      }els
2b5b0 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61  e if( strcmp(zTa
2b5c0 62 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74 33  b, "sqlite_stat3
2b5d0 22 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20  ")==0.          
2b5e0 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 54 61     || strcmp(zTa
2b5f0 62 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74 34  b, "sqlite_stat4
2b600 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
2b610 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75   appendText(&sQu
2b620 65 72 79 2c 20 22 53 45 4c 45 43 54 20 2a 20 46  ery, "SELECT * F
2b630 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  ROM ", 0);.     
2b640 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
2b650 51 75 65 72 79 2c 20 7a 54 61 62 2c 20 30 29 3b  Query, zTab, 0);
2b660 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54  .        appendT
2b670 65 78 74 28 26 73 51 75 65 72 79 2c 20 22 20 4f  ext(&sQuery, " O
2b680 52 44 45 52 20 42 59 20 74 62 6c 2c 20 69 64 78  RDER BY tbl, idx
2b690 2c 20 72 6f 77 69 64 3b 5c 6e 22 2c 20 30 29 3b  , rowid;\n", 0);
2b6a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
2b6b0 70 70 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c  ppendText(&sSql,
2b6c0 20 7a 53 65 70 2c 20 30 29 3b 0a 20 20 20 20 20   zSep, 0);.     
2b6d0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 71   appendText(&sSq
2b6e0 6c 2c 20 73 51 75 65 72 79 2e 7a 2c 20 27 5c 27  l, sQuery.z, '\'
2b6f0 27 29 3b 0a 20 20 20 20 20 20 73 51 75 65 72 79  ');.      sQuery
2b700 2e 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 61 70  .n = 0;.      ap
2b710 70 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20  pendText(&sSql, 
2b720 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 61  ",", 0);.      a
2b730 70 70 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c  ppendText(&sSql,
2b740 20 7a 54 61 62 2c 20 27 5c 27 27 29 3b 0a 20 20   zTab, '\'');.  
2b750 20 20 20 20 7a 53 65 70 20 3d 20 22 29 2c 28 22      zSep = "),("
2b760 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
2b770 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
2b780 6d 74 29 3b 0a 20 20 20 20 69 66 28 20 62 53 65  mt);.    if( bSe
2b790 70 61 72 61 74 65 20 29 7b 0a 20 20 20 20 20 20  parate ){.      
2b7a0 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zSql = sqlite3_m
2b7b0 70 72 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20  printf(.        
2b7c0 20 20 22 25 73 29 29 22 0a 20 20 20 20 20 20 20    "%s))".       
2b7d0 20 20 20 22 20 53 45 4c 45 43 54 20 6c 6f 77 65     " SELECT lowe
2b7e0 72 28 68 65 78 28 73 68 61 33 5f 71 75 65 72 79  r(hex(sha3_query
2b7f0 28 61 2c 25 64 29 29 29 20 41 53 20 68 61 73 68  (a,%d))) AS hash
2b800 2c 20 62 20 41 53 20 6c 61 62 65 6c 22 0a 20 20  , b AS label".  
2b810 20 20 20 20 20 20 20 20 22 20 20 20 46 52 4f 4d          "   FROM
2b820 20 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d   [sha3sum$query]
2b830 22 2c 0a 20 20 20 20 20 20 20 20 20 20 73 53 71  ",.          sSq
2b840 6c 2e 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20 20  l.z, iSize);.   
2b850 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53   }else{.      zS
2b860 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
2b870 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20 20  intf(.          
2b880 22 25 73 29 29 22 0a 20 20 20 20 20 20 20 20 20  "%s))".         
2b890 20 22 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28   " SELECT lower(
2b8a0 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 67  hex(sha3_query(g
2b8b0 72 6f 75 70 5f 63 6f 6e 63 61 74 28 61 2c 27 27  roup_concat(a,''
2b8c0 29 2c 25 64 29 29 29 20 41 53 20 68 61 73 68 22  ),%d))) AS hash"
2b8d0 0a 20 20 20 20 20 20 20 20 20 20 22 20 20 20 46  .          "   F
2b8e0 52 4f 4d 20 5b 73 68 61 33 73 75 6d 24 71 75 65  ROM [sha3sum$que
2b8f0 72 79 5d 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ry]",.          
2b900 73 53 71 6c 2e 7a 2c 20 69 53 69 7a 65 29 3b 0a  sSql.z, iSize);.
2b910 20 20 20 20 7d 0a 20 20 20 20 66 72 65 65 54 65      }.    freeTe
2b920 78 74 28 26 73 51 75 65 72 79 29 3b 0a 20 20 20  xt(&sQuery);.   
2b930 20 66 72 65 65 54 65 78 74 28 26 73 53 71 6c 29   freeText(&sSql)
2b940 3b 0a 20 20 20 20 69 66 28 20 62 44 65 62 75 67  ;.    if( bDebug
2b950 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
2b960 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2b970 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  s\n", zSql);.   
2b980 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 68   }else{.      sh
2b990 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  ell_exec(p->db, 
2b9a0 7a 53 71 6c 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c  zSql, shell_call
2b9b0 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20 20  back, p, 0);.   
2b9c0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66   }.    sqlite3_f
2b9d0 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c  ree(zSql);.  }el
2b9e0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27  se..  if( c=='s'
2b9f0 0a 20 20 20 26 26 20 28 73 74 72 6e 63 6d 70 28  .   && (strncmp(
2ba00 61 7a 41 72 67 5b 30 5d 2c 20 22 73 68 65 6c 6c  azArg[0], "shell
2ba10 22 2c 20 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e  ", n)==0 || strn
2ba20 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 22 73 79  cmp(azArg[0],"sy
2ba30 73 74 65 6d 22 2c 6e 29 3d 3d 30 29 0a 20 20 29  stem",n)==0).  )
2ba40 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6d 64  {.    char *zCmd
2ba50 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 78 3b 0a  ;.    int i, x;.
2ba60 20 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29      if( nArg<2 )
2ba70 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
2ba80 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
2ba90 65 3a 20 2e 73 79 73 74 65 6d 20 43 4f 4d 4d 41  e: .system COMMA
2baa0 4e 44 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  ND\n");.      rc
2bab0 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f   = 1;.      goto
2bac0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
2bad0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 43  it;.    }.    zC
2bae0 6d 64 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  md = sqlite3_mpr
2baf0 69 6e 74 66 28 73 74 72 63 68 72 28 61 7a 41 72  intf(strchr(azAr
2bb00 67 5b 31 5d 2c 27 20 27 29 3d 3d 30 3f 22 25 73  g[1],' ')==0?"%s
2bb10 22 3a 22 5c 22 25 73 5c 22 22 2c 20 61 7a 41 72  ":"\"%s\"", azAr
2bb20 67 5b 31 5d 29 3b 0a 20 20 20 20 66 6f 72 28 69  g[1]);.    for(i
2bb30 3d 32 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =2; i<nArg; i++)
2bb40 7b 0a 20 20 20 20 20 20 7a 43 6d 64 20 3d 20 73  {.      zCmd = s
2bb50 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 73  qlite3_mprintf(s
2bb60 74 72 63 68 72 28 61 7a 41 72 67 5b 69 5d 2c 27  trchr(azArg[i],'
2bb70 20 27 29 3d 3d 30 3f 22 25 7a 20 25 73 22 3a 22   ')==0?"%z %s":"
2bb80 25 7a 20 5c 22 25 73 5c 22 22 2c 0a 20 20 20 20  %z \"%s\"",.    
2bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bba0 20 20 20 20 20 20 20 20 20 7a 43 6d 64 2c 20 61           zCmd, a
2bbb0 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a  zArg[i]);.    }.
2bbc0 20 20 20 20 78 20 3d 20 73 79 73 74 65 6d 28 7a      x = system(z
2bbd0 43 6d 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Cmd);.    sqlite
2bbe0 33 5f 66 72 65 65 28 7a 43 6d 64 29 3b 0a 20 20  3_free(zCmd);.  
2bbf0 20 20 69 66 28 20 78 20 29 20 72 61 77 5f 70 72    if( x ) raw_pr
2bc00 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 79  intf(stderr, "Sy
2bc10 73 74 65 6d 20 63 6f 6d 6d 61 6e 64 20 72 65 74  stem command ret
2bc20 75 72 6e 73 20 25 64 5c 6e 22 2c 20 78 29 3b 0a  urns %d\n", x);.
2bc30 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
2bc40 3d 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70  =='s' && strncmp
2bc50 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 68 6f 77  (azArg[0], "show
2bc60 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
2bc70 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
2bc80 72 20 2a 61 7a 42 6f 6f 6c 5b 5d 20 3d 20 7b 20  r *azBool[] = { 
2bc90 22 6f 66 66 22 2c 20 22 6f 6e 22 2c 20 22 66 75  "off", "on", "fu
2bca0 6c 6c 22 2c 20 22 75 6e 6b 22 20 7d 3b 0a 20 20  ll", "unk" };.  
2bcb0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 66 28    int i;.    if(
2bcc0 20 6e 41 72 67 21 3d 31 20 29 7b 0a 20 20 20 20   nArg!=1 ){.    
2bcd0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2bce0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 68  err, "Usage: .sh
2bcf0 6f 77 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  ow\n");.      rc
2bd00 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f   = 1;.      goto
2bd10 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
2bd20 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 75 74  it;.    }.    ut
2bd30 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
2bd40 2c 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e  , "%12.12s: %s\n
2bd50 22 2c 22 65 63 68 6f 22 2c 0a 20 20 20 20 20 20  ","echo",.      
2bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd70 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 42 6f              azBo
2bd80 6f 6c 5b 53 68 65 6c 6c 48 61 73 46 6c 61 67 28  ol[ShellHasFlag(
2bd90 70 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29 5d 29  p, SHFLG_Echo)])
2bda0 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  ;.    utf8_print
2bdb0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31  f(p->out, "%12.1
2bdc0 32 73 3a 20 25 73 5c 6e 22 2c 22 65 71 70 22 2c  2s: %s\n","eqp",
2bdd0 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 61 75 74 6f 45   azBool[p->autoE
2bde0 51 50 26 33 5d 29 3b 0a 20 20 20 20 75 74 66 38  QP&3]);.    utf8
2bdf0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2be00 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c  "%12.12s: %s\n",
2be10 22 65 78 70 6c 61 69 6e 22 2c 0a 20 20 20 20 20  "explain",.     
2be20 20 20 20 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44      p->mode==MOD
2be30 45 5f 45 78 70 6c 61 69 6e 20 3f 20 22 6f 6e 22  E_Explain ? "on"
2be40 20 3a 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61 69   : p->autoExplai
2be50 6e 20 3f 20 22 61 75 74 6f 22 20 3a 20 22 6f 66  n ? "auto" : "of
2be60 66 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  f");.    utf8_pr
2be70 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32  intf(p->out,"%12
2be80 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 68 65 61  .12s: %s\n","hea
2be90 64 65 72 73 22 2c 20 61 7a 42 6f 6f 6c 5b 70 2d  ders", azBool[p-
2bea0 3e 73 68 6f 77 48 65 61 64 65 72 21 3d 30 5d 29  >showHeader!=0])
2beb0 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  ;.    utf8_print
2bec0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31  f(p->out, "%12.1
2bed0 32 73 3a 20 25 73 5c 6e 22 2c 22 6d 6f 64 65 22  2s: %s\n","mode"
2bee0 2c 20 6d 6f 64 65 44 65 73 63 72 5b 70 2d 3e 6d  , modeDescr[p->m
2bef0 6f 64 65 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f  ode]);.    utf8_
2bf00 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2bf10 25 31 32 2e 31 32 73 3a 20 22 2c 20 22 6e 75 6c  %12.12s: ", "nul
2bf20 6c 76 61 6c 75 65 22 29 3b 0a 20 20 20 20 20 20  lvalue");.      
2bf30 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28  output_c_string(
2bf40 70 2d 3e 6f 75 74 2c 20 70 2d 3e 6e 75 6c 6c 56  p->out, p->nullV
2bf50 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 72 61 77  alue);.      raw
2bf60 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2bf70 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66 38 5f  "\n");.    utf8_
2bf80 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
2bf90 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 6f  12.12s: %s\n","o
2bfa0 75 74 70 75 74 22 2c 0a 20 20 20 20 20 20 20 20  utput",.        
2bfb0 20 20 20 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e      strlen30(p->
2bfc0 6f 75 74 66 69 6c 65 29 20 3f 20 70 2d 3e 6f 75  outfile) ? p->ou
2bfd0 74 66 69 6c 65 20 3a 20 22 73 74 64 6f 75 74 22  tfile : "stdout"
2bfe0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2bff0 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31  tf(p->out,"%12.1
2c000 32 73 3a 20 22 2c 20 22 63 6f 6c 73 65 70 61 72  2s: ", "colsepar
2c010 61 74 6f 72 22 29 3b 0a 20 20 20 20 20 20 6f 75  ator");.      ou
2c020 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d  tput_c_string(p-
2c030 3e 6f 75 74 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  >out, p->colSepa
2c040 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 72 61  rator);.      ra
2c050 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
2c060 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66 38   "\n");.    utf8
2c070 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
2c080 25 31 32 2e 31 32 73 3a 20 22 2c 20 22 72 6f 77  %12.12s: ", "row
2c090 73 65 70 61 72 61 74 6f 72 22 29 3b 0a 20 20 20  separator");.   
2c0a0 20 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69     output_c_stri
2c0b0 6e 67 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 72 6f  ng(p->out, p->ro
2c0c0 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  wSeparator);.   
2c0d0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
2c0e0 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20  >out, "\n");.   
2c0f0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
2c100 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 25  out, "%12.12s: %
2c110 73 5c 6e 22 2c 22 73 74 61 74 73 22 2c 20 61 7a  s\n","stats", az
2c120 42 6f 6f 6c 5b 70 2d 3e 73 74 61 74 73 4f 6e 21  Bool[p->statsOn!
2c130 3d 30 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  =0]);.    utf8_p
2c140 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2c150 31 32 2e 31 32 73 3a 20 22 2c 20 22 77 69 64 74  12.12s: ", "widt
2c160 68 22 29 3b 0a 20 20 20 20 66 6f 72 20 28 69 3d  h");.    for (i=
2c170 30 3b 69 3c 28 69 6e 74 29 41 72 72 61 79 53 69  0;i<(int)ArraySi
2c180 7a 65 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 20  ze(p->colWidth) 
2c190 26 26 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 69  && p->colWidth[i
2c1a0 5d 20 21 3d 20 30 3b 69 2b 2b 29 20 7b 0a 20 20  ] != 0;i++) {.  
2c1b0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
2c1c0 2d 3e 6f 75 74 2c 20 22 25 64 20 22 2c 20 70 2d  ->out, "%d ", p-
2c1d0 3e 63 6f 6c 57 69 64 74 68 5b 69 5d 29 3b 0a 20  >colWidth[i]);. 
2c1e0 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69     }.    raw_pri
2c1f0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22  ntf(p->out, "\n"
2c200 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2c210 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e  tf(p->out, "%12.
2c220 31 32 73 3a 20 25 73 5c 6e 22 2c 20 22 66 69 6c  12s: %s\n", "fil
2c230 65 6e 61 6d 65 22 2c 0a 20 20 20 20 20 20 20 20  ename",.        
2c240 20 20 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69          p->zDbFi
2c250 6c 65 6e 61 6d 65 20 3f 20 70 2d 3e 7a 44 62 46  lename ? p->zDbF
2c260 69 6c 65 6e 61 6d 65 20 3a 20 22 22 29 3b 0a 20  ilename : "");. 
2c270 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
2c280 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='s' && strncmp(
2c290 61 7a 41 72 67 5b 30 5d 2c 20 22 73 74 61 74 73  azArg[0], "stats
2c2a0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
2c2b0 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20  if( nArg==2 ){. 
2c2c0 20 20 20 20 20 70 2d 3e 73 74 61 74 73 4f 6e 20       p->statsOn 
2c2d0 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61  = booleanValue(a
2c2e0 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
2c2f0 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 31 20  lse if( nArg==1 
2c300 29 7b 0a 20 20 20 20 20 20 64 69 73 70 6c 61 79  ){.      display
2c310 5f 73 74 61 74 73 28 70 2d 3e 64 62 2c 20 70 2c  _stats(p->db, p,
2c320 20 30 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   0);.    }else{.
2c330 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2c340 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
2c350 20 2e 73 74 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f   .stats ?on|off?
2c360 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
2c370 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
2c380 65 0a 0a 20 20 69 66 28 20 28 63 3d 3d 27 74 27  e..  if( (c=='t'
2c390 20 26 26 20 6e 3e 31 20 26 26 20 73 74 72 6e 63   && n>1 && strnc
2c3a0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 61  mp(azArg[0], "ta
2c3b0 62 6c 65 73 22 2c 20 6e 29 3d 3d 30 29 0a 20 20  bles", n)==0).  
2c3c0 20 7c 7c 20 28 63 3d 3d 27 69 27 20 26 26 20 28   || (c=='i' && (
2c3d0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
2c3e0 2c 20 22 69 6e 64 69 63 65 73 22 2c 20 6e 29 3d  , "indices", n)=
2c3f0 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =0.             
2c400 20 20 20 20 7c 7c 20 73 74 72 6e 63 6d 70 28 61      || strncmp(a
2c410 7a 41 72 67 5b 30 5d 2c 20 22 69 6e 64 65 78 65  zArg[0], "indexe
2c420 73 22 2c 20 6e 29 3d 3d 30 29 20 29 0a 20 20 29  s", n)==0) ).  )
2c430 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  {.    sqlite3_st
2c440 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 20 20 63  mt *pStmt;.    c
2c450 68 61 72 20 2a 2a 61 7a 52 65 73 75 6c 74 3b 0a  har **azResult;.
2c460 20 20 20 20 69 6e 74 20 6e 52 6f 77 2c 20 6e 41      int nRow, nA
2c470 6c 6c 6f 63 3b 0a 20 20 20 20 69 6e 74 20 69 69  lloc;.    int ii
2c480 3b 0a 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20  ;.    ShellText 
2c490 73 3b 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28  s;.    initText(
2c4a0 26 73 29 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62  &s);.    open_db
2c4b0 28 70 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d  (p, 0);.    rc =
2c4c0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
2c4d0 5f 76 32 28 70 2d 3e 64 62 2c 20 22 50 52 41 47  _v2(p->db, "PRAG
2c4e0 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74  MA database_list
2c4f0 22 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30  ", -1, &pStmt, 0
2c500 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
2c510 72 65 74 75 72 6e 20 73 68 65 6c 6c 44 61 74 61  return shellData
2c520 62 61 73 65 45 72 72 6f 72 28 70 2d 3e 64 62 29  baseError(p->db)
2c530 3b 0a 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e  ;..    if( nArg>
2c540 32 20 26 26 20 63 3d 3d 27 69 27 20 29 7b 0a 20  2 && c=='i' ){. 
2c550 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 61 6e       /* It is an
2c560 20 68 69 73 74 6f 72 69 63 61 6c 20 61 63 63 69   historical acci
2c570 64 65 6e 74 20 74 68 61 74 20 74 68 65 20 2e 69  dent that the .i
2c580 6e 64 65 78 65 73 20 63 6f 6d 6d 61 6e 64 20 73  ndexes command s
2c590 68 6f 77 73 20 61 6e 20 65 72 72 6f 72 0a 20 20  hows an error.  
2c5a0 20 20 20 20 2a 2a 20 77 68 65 6e 20 63 61 6c 6c      ** when call
2c5b0 65 64 20 77 69 74 68 20 74 68 65 20 77 72 6f 6e  ed with the wron
2c5c0 67 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  g number of argu
2c5d0 6d 65 6e 74 73 20 77 68 65 72 65 61 73 20 74 68  ments whereas th
2c5e0 65 20 2e 74 61 62 6c 65 73 0a 20 20 20 20 20 20  e .tables.      
2c5f0 2a 2a 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20  ** command does 
2c600 6e 6f 74 2e 20 2a 2f 0a 20 20 20 20 20 20 72 61  not. */.      ra
2c610 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2c620 20 22 55 73 61 67 65 3a 20 2e 69 6e 64 65 78 65   "Usage: .indexe
2c630 73 20 3f 4c 49 4b 45 2d 50 41 54 54 45 52 4e 3f  s ?LIKE-PATTERN?
2c640 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
2c650 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
2c660 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
2c670 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28  ;.    }.    for(
2c680 69 69 3d 30 3b 20 73 71 6c 69 74 65 33 5f 73 74  ii=0; sqlite3_st
2c690 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
2c6a0 45 5f 52 4f 57 3b 20 69 69 2b 2b 29 7b 0a 20 20  E_ROW; ii++){.  
2c6b0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
2c6c0 7a 44 62 4e 61 6d 65 20 3d 20 28 63 6f 6e 73 74  zDbName = (const
2c6d0 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
2c6e0 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74  olumn_text(pStmt
2c6f0 2c 20 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 1);.      if( 
2c700 7a 44 62 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e  zDbName==0 ) con
2c710 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28  tinue;.      if(
2c720 20 73 2e 7a 20 26 26 20 73 2e 7a 5b 30 5d 20 29   s.z && s.z[0] )
2c730 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20   appendText(&s, 
2c740 22 20 55 4e 49 4f 4e 20 41 4c 4c 20 22 2c 20 30  " UNION ALL ", 0
2c750 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  );.      if( sql
2c760 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 44 62  ite3_stricmp(zDb
2c770 4e 61 6d 65 2c 20 22 6d 61 69 6e 22 29 3d 3d 30  Name, "main")==0
2c780 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65   ){.        appe
2c790 6e 64 54 65 78 74 28 26 73 2c 20 22 53 45 4c 45  ndText(&s, "SELE
2c7a0 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 22 2c 20  CT name FROM ", 
2c7b0 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  0);.      }else{
2c7c0 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54  .        appendT
2c7d0 65 78 74 28 26 73 2c 20 22 53 45 4c 45 43 54 20  ext(&s, "SELECT 
2c7e0 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61  ", 0);.        a
2c7f0 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20 7a 44  ppendText(&s, zD
2c800 62 4e 61 6d 65 2c 20 27 5c 27 27 29 3b 0a 20 20  bName, '\'');.  
2c810 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
2c820 28 26 73 2c 20 22 7c 7c 27 2e 27 7c 7c 6e 61 6d  (&s, "||'.'||nam
2c830 65 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20  e FROM ", 0);.  
2c840 20 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65      }.      appe
2c850 6e 64 54 65 78 74 28 26 73 2c 20 7a 44 62 4e 61  ndText(&s, zDbNa
2c860 6d 65 2c 20 27 22 27 29 3b 0a 20 20 20 20 20 20  me, '"');.      
2c870 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20 22  appendText(&s, "
2c880 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22  .sqlite_master "
2c890 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
2c8a0 63 3d 3d 27 74 27 20 29 7b 0a 20 20 20 20 20 20  c=='t' ){.      
2c8b0 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c    appendText(&s,
2c8c0 22 20 57 48 45 52 45 20 74 79 70 65 20 49 4e 20  " WHERE type IN 
2c8d0 28 27 74 61 62 6c 65 27 2c 27 76 69 65 77 27 29  ('table','view')
2c8e0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
2c8f0 20 20 20 20 20 20 20 20 22 20 20 20 41 4e 44 20          "   AND 
2c900 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73  name NOT LIKE 's
2c910 71 6c 69 74 65 5f 25 27 22 0a 20 20 20 20 20 20  qlite_%'".      
2c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c930 22 20 20 20 41 4e 44 20 6e 61 6d 65 20 4c 49 4b  "   AND name LIK
2c940 45 20 3f 31 22 2c 20 30 29 3b 0a 20 20 20 20 20  E ?1", 0);.     
2c950 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
2c960 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 22 20  appendText(&s," 
2c970 57 48 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65  WHERE type='inde
2c980 78 27 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  x'".            
2c990 20 20 20 20 20 20 20 20 20 20 22 20 20 20 41 4e            "   AN
2c9a0 44 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20  D tbl_name LIKE 
2c9b0 3f 31 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  ?1", 0);.      }
2c9c0 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20  .    }.    rc = 
2c9d0 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
2c9e0 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 61 70 70  (pStmt);.    app
2c9f0 65 6e 64 54 65 78 74 28 26 73 2c 20 22 20 4f 52  endText(&s, " OR
2ca00 44 45 52 20 42 59 20 31 22 2c 20 30 29 3b 0a 20  DER BY 1", 0);. 
2ca10 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
2ca20 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
2ca30 2c 20 73 2e 7a 2c 20 2d 31 2c 20 26 70 53 74 6d  , s.z, -1, &pStm
2ca40 74 2c 20 30 29 3b 0a 20 20 20 20 66 72 65 65 54  t, 0);.    freeT
2ca50 65 78 74 28 26 73 29 3b 0a 20 20 20 20 69 66 28  ext(&s);.    if(
2ca60 20 72 63 20 29 20 72 65 74 75 72 6e 20 73 68 65   rc ) return she
2ca70 6c 6c 44 61 74 61 62 61 73 65 45 72 72 6f 72 28  llDatabaseError(
2ca80 70 2d 3e 64 62 29 3b 0a 0a 20 20 20 20 2f 2a 20  p->db);..    /* 
2ca90 52 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74  Run the SQL stat
2caa0 65 6d 65 6e 74 20 70 72 65 70 61 72 65 64 20 62  ement prepared b
2cab0 79 20 74 68 65 20 61 62 6f 76 65 20 62 6c 6f 63  y the above bloc
2cac0 6b 2e 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  k. Store the res
2cad0 75 6c 74 73 0a 20 20 20 20 2a 2a 20 61 73 20 61  ults.    ** as a
2cae0 6e 20 61 72 72 61 79 20 6f 66 20 6e 75 6c 2d 74  n array of nul-t
2caf0 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67  erminated string
2cb00 73 20 69 6e 20 61 7a 52 65 73 75 6c 74 5b 5d 2e  s in azResult[].
2cb10 20 20 2a 2f 0a 20 20 20 20 6e 52 6f 77 20 3d 20    */.    nRow = 
2cb20 6e 41 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  nAlloc = 0;.    
2cb30 61 7a 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  azResult = 0;.  
2cb40 20 20 69 66 28 20 6e 41 72 67 3e 31 20 29 7b 0a    if( nArg>1 ){.
2cb50 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69        sqlite3_bi
2cb60 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31  nd_text(pStmt, 1
2cb70 2c 20 61 7a 41 72 67 5b 31 5d 2c 20 2d 31 2c 20  , azArg[1], -1, 
2cb80 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
2cb90 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2cba0 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
2cbb0 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20  _text(pStmt, 1, 
2cbc0 22 25 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  "%", -1, SQLITE_
2cbd0 53 54 41 54 49 43 29 3b 0a 20 20 20 20 7d 0a 20  STATIC);.    }. 
2cbe0 20 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65     while( sqlite
2cbf0 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53  3_step(pStmt)==S
2cc00 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20  QLITE_ROW ){.   
2cc10 20 20 20 69 66 28 20 6e 52 6f 77 3e 3d 6e 41 6c     if( nRow>=nAl
2cc20 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 20 20 63  loc ){.        c
2cc30 68 61 72 20 2a 2a 61 7a 4e 65 77 3b 0a 20 20 20  har **azNew;.   
2cc40 20 20 20 20 20 69 6e 74 20 6e 32 20 3d 20 6e 41       int n2 = nA
2cc50 6c 6c 6f 63 2a 32 20 2b 20 31 30 3b 0a 20 20 20  lloc*2 + 10;.   
2cc60 20 20 20 20 20 61 7a 4e 65 77 20 3d 20 73 71 6c       azNew = sql
2cc70 69 74 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 61  ite3_realloc64(a
2cc80 7a 52 65 73 75 6c 74 2c 20 73 69 7a 65 6f 66 28  zResult, sizeof(
2cc90 61 7a 52 65 73 75 6c 74 5b 30 5d 29 2a 6e 32 29  azResult[0])*n2)
2cca0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 7a  ;.        if( az
2ccb0 4e 65 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  New==0 ){.      
2ccc0 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 4e 6f      rc = shellNo
2ccd0 6d 65 6d 45 72 72 6f 72 28 29 3b 0a 20 20 20 20  memError();.    
2cce0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2ccf0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e       }.        n
2cd00 41 6c 6c 6f 63 20 3d 20 6e 32 3b 0a 20 20 20 20  Alloc = n2;.    
2cd10 20 20 20 20 61 7a 52 65 73 75 6c 74 20 3d 20 61      azResult = a
2cd20 7a 4e 65 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  zNew;.      }.  
2cd30 20 20 20 20 61 7a 52 65 73 75 6c 74 5b 6e 52 6f      azResult[nRo
2cd40 77 5d 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  w] = sqlite3_mpr
2cd50 69 6e 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74  intf("%s", sqlit
2cd60 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
2cd70 53 74 6d 74 2c 20 30 29 29 3b 0a 20 20 20 20 20  Stmt, 0));.     
2cd80 20 69 66 28 20 30 3d 3d 61 7a 52 65 73 75 6c 74   if( 0==azResult
2cd90 5b 6e 52 6f 77 5d 20 29 7b 0a 20 20 20 20 20 20  [nRow] ){.      
2cda0 20 20 72 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65    rc = shellNome
2cdb0 6d 45 72 72 6f 72 28 29 3b 0a 20 20 20 20 20 20  mError();.      
2cdc0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
2cdd0 0a 20 20 20 20 20 20 6e 52 6f 77 2b 2b 3b 0a 20  .      nRow++;. 
2cde0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
2cdf0 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
2ce00 74 6d 74 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  tmt)!=SQLITE_OK 
2ce10 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 68  ){.      rc = sh
2ce20 65 6c 6c 44 61 74 61 62 61 73 65 45 72 72 6f 72  ellDatabaseError
2ce30 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 7d 0a 0a  (p->db);.    }..
2ce40 20 20 20 20 2f 2a 20 50 72 65 74 74 79 2d 70 72      /* Pretty-pr
2ce50 69 6e 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  int the contents
2ce60 20 6f 66 20 61 72 72 61 79 20 61 7a 52 65 73 75   of array azResu
2ce70 6c 74 5b 5d 20 74 6f 20 74 68 65 20 6f 75 74 70  lt[] to the outp
2ce80 75 74 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63  ut */.    if( rc
2ce90 3d 3d 30 20 26 26 20 6e 52 6f 77 3e 30 20 29 7b  ==0 && nRow>0 ){
2cea0 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 2c 20  .      int len, 
2ceb0 6d 61 78 6c 65 6e 20 3d 20 30 3b 0a 20 20 20 20  maxlen = 0;.    
2cec0 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 20 20    int i, j;.    
2ced0 20 20 69 6e 74 20 6e 50 72 69 6e 74 43 6f 6c 2c    int nPrintCol,
2cee0 20 6e 50 72 69 6e 74 52 6f 77 3b 0a 20 20 20 20   nPrintRow;.    
2cef0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 52 6f    for(i=0; i<nRo
2cf00 77 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  w; i++){.       
2cf10 20 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28   len = strlen30(
2cf20 61 7a 52 65 73 75 6c 74 5b 69 5d 29 3b 0a 20 20  azResult[i]);.  
2cf30 20 20 20 20 20 20 69 66 28 20 6c 65 6e 3e 6d 61        if( len>ma
2cf40 78 6c 65 6e 20 29 20 6d 61 78 6c 65 6e 20 3d 20  xlen ) maxlen = 
2cf50 6c 65 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  len;.      }.   
2cf60 20 20 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20 38     nPrintCol = 8
2cf70 30 2f 28 6d 61 78 6c 65 6e 2b 32 29 3b 0a 20 20  0/(maxlen+2);.  
2cf80 20 20 20 20 69 66 28 20 6e 50 72 69 6e 74 43 6f      if( nPrintCo
2cf90 6c 3c 31 20 29 20 6e 50 72 69 6e 74 43 6f 6c 20  l<1 ) nPrintCol 
2cfa0 3d 20 31 3b 0a 20 20 20 20 20 20 6e 50 72 69 6e  = 1;.      nPrin
2cfb0 74 52 6f 77 20 3d 20 28 6e 52 6f 77 20 2b 20 6e  tRow = (nRow + n
2cfc0 50 72 69 6e 74 43 6f 6c 20 2d 20 31 29 2f 6e 50  PrintCol - 1)/nP
2cfd0 72 69 6e 74 43 6f 6c 3b 0a 20 20 20 20 20 20 66  rintCol;.      f
2cfe0 6f 72 28 69 3d 30 3b 20 69 3c 6e 50 72 69 6e 74  or(i=0; i<nPrint
2cff0 52 6f 77 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Row; i++){.     
2d000 20 20 20 66 6f 72 28 6a 3d 69 3b 20 6a 3c 6e 52     for(j=i; j<nR
2d010 6f 77 3b 20 6a 2b 3d 6e 50 72 69 6e 74 52 6f 77  ow; j+=nPrintRow
2d020 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61  ){.          cha
2d030 72 20 2a 7a 53 70 20 3d 20 6a 3c 6e 50 72 69 6e  r *zSp = j<nPrin
2d040 74 52 6f 77 20 3f 20 22 22 20 3a 20 22 20 20 22  tRow ? "" : "  "
2d050 3b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38  ;.          utf8
2d060 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2d070 22 25 73 25 2d 2a 73 22 2c 20 7a 53 70 2c 20 6d  "%s%-*s", zSp, m
2d080 61 78 6c 65 6e 2c 0a 20 20 20 20 20 20 20 20 20  axlen,.         
2d090 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 52               azR
2d0a0 65 73 75 6c 74 5b 6a 5d 20 3f 20 61 7a 52 65 73  esult[j] ? azRes
2d0b0 75 6c 74 5b 6a 5d 3a 22 22 29 3b 0a 20 20 20 20  ult[j]:"");.    
2d0c0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61      }.        ra
2d0d0 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
2d0e0 20 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a   "\n");.      }.
2d0f0 20 20 20 20 7d 0a 0a 20 20 20 20 66 6f 72 28 69      }..    for(i
2d100 69 3d 30 3b 20 69 69 3c 6e 52 6f 77 3b 20 69 69  i=0; ii<nRow; ii
2d110 2b 2b 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ++) sqlite3_free
2d120 28 61 7a 52 65 73 75 6c 74 5b 69 69 5d 29 3b 0a  (azResult[ii]);.
2d130 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2d140 28 61 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d 65  (azResult);.  }e
2d150 6c 73 65 0a 0a 20 20 2f 2a 20 42 65 67 69 6e 20  lse..  /* Begin 
2d160 72 65 64 69 72 65 63 74 69 6e 67 20 6f 75 74 70  redirecting outp
2d170 75 74 20 74 6f 20 74 68 65 20 66 69 6c 65 20 22  ut to the file "
2d180 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74  testcase-out.txt
2d190 22 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 74  " */.  if( c=='t
2d1a0 27 20 26 26 20 73 74 72 63 6d 70 28 61 7a 41 72  ' && strcmp(azAr
2d1b0 67 5b 30 5d 2c 22 74 65 73 74 63 61 73 65 22 29  g[0],"testcase")
2d1c0 3d 3d 30 20 29 7b 0a 20 20 20 20 6f 75 74 70 75  ==0 ){.    outpu
2d1d0 74 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20  t_reset(p);.    
2d1e0 70 2d 3e 6f 75 74 20 3d 20 6f 75 74 70 75 74 5f  p->out = output_
2d1f0 66 69 6c 65 5f 6f 70 65 6e 28 22 74 65 73 74 63  file_open("testc
2d200 61 73 65 2d 6f 75 74 2e 74 78 74 22 29 3b 0a 20  ase-out.txt");. 
2d210 20 20 20 69 66 28 20 70 2d 3e 6f 75 74 3d 3d 30     if( p->out==0
2d220 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
2d230 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
2d240 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
2d250 20 27 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74   'testcase-out.t
2d260 78 74 27 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20  xt'\n");.    }. 
2d270 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 32 20 29     if( nArg>=2 )
2d280 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
2d290 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
2d2a0 70 2d 3e 7a 54 65 73 74 63 61 73 65 29 2c 20 70  p->zTestcase), p
2d2b0 2d 3e 7a 54 65 73 74 63 61 73 65 2c 20 22 25 73  ->zTestcase, "%s
2d2c0 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ", azArg[1]);.  
2d2d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
2d2e0 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
2d2f0 73 69 7a 65 6f 66 28 70 2d 3e 7a 54 65 73 74 63  sizeof(p->zTestc
2d300 61 73 65 29 2c 20 70 2d 3e 7a 54 65 73 74 63 61  ase), p->zTestca
2d310 73 65 2c 20 22 3f 22 29 3b 0a 20 20 20 20 7d 0a  se, "?");.    }.
2d320 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65 66    }else..#ifndef
2d330 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2d340 4c 45 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20  LE.  if( c=='t' 
2d350 26 26 20 6e 3e 3d 38 20 26 26 20 73 74 72 6e 63  && n>=8 && strnc
2d360 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 65  mp(azArg[0], "te
2d370 73 74 63 74 72 6c 22 2c 20 6e 29 3d 3d 30 20 26  stctrl", n)==0 &
2d380 26 20 6e 41 72 67 3e 3d 32 20 29 7b 0a 20 20 20  & nArg>=2 ){.   
2d390 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74   static const st
2d3a0 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 63 6f  ruct {.       co
2d3b0 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 72 6c 4e  nst char *zCtrlN
2d3c0 61 6d 65 3b 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ame;   /* Name o
2d3d0 66 20 61 20 74 65 73 74 2d 63 6f 6e 74 72 6f 6c  f a test-control
2d3e0 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 20   option */.     
2d3f0 20 20 69 6e 74 20 63 74 72 6c 43 6f 64 65 3b 20    int ctrlCode; 
2d400 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
2d410 74 65 67 65 72 20 63 6f 64 65 20 66 6f 72 20 74  teger code for t
2d420 68 61 74 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20 20  hat option */.  
2d430 20 20 7d 20 61 43 74 72 6c 5b 5d 20 3d 20 7b 0a    } aCtrl[] = {.
2d440 20 20 20 20 20 20 7b 20 22 70 72 6e 67 5f 73 61        { "prng_sa
2d450 76 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ve",            
2d460 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2d470 5f 50 52 4e 47 5f 53 41 56 45 20 20 20 20 20 20  _PRNG_SAVE      
2d480 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
2d490 20 7b 20 22 70 72 6e 67 5f 72 65 73 74 6f 72 65   { "prng_restore
2d4a0 22 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  ",          SQLI
2d4b0 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47  TE_TESTCTRL_PRNG
2d4c0 5f 52 45 53 54 4f 52 45 20 20 20 20 20 20 20 20  _RESTORE        
2d4d0 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 70     },.      { "p
2d4e0 72 6e 67 5f 72 65 73 65 74 22 2c 20 20 20 20 20  rng_reset",     
2d4f0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45         SQLITE_TE
2d500 53 54 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53 45  STCTRL_PRNG_RESE
2d510 54 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  T             },
2d520 0a 20 20 20 20 20 20 7b 20 22 62 69 74 76 65 63  .      { "bitvec
2d530 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20 20 20  _test",         
2d540 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52    SQLITE_TESTCTR
2d550 4c 5f 42 49 54 56 45 43 5f 54 45 53 54 20 20 20  L_BITVEC_TEST   
2d560 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
2d570 20 20 7b 20 22 66 61 75 6c 74 5f 69 6e 73 74 61    { "fault_insta
2d580 6c 6c 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c  ll",         SQL
2d590 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 46 41 55  ITE_TESTCTRL_FAU
2d5a0 4c 54 5f 49 4e 53 54 41 4c 4c 20 20 20 20 20 20  LT_INSTALL      
2d5b0 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
2d5c0 62 65 6e 69 67 6e 5f 6d 61 6c 6c 6f 63 5f 68 6f  benign_malloc_ho
2d5d0 6f 6b 73 22 2c 20 20 20 53 51 4c 49 54 45 5f 54  oks",   SQLITE_T
2d5e0 45 53 54 43 54 52 4c 5f 42 45 4e 49 47 4e 5f 4d  ESTCTRL_BENIGN_M
2d5f0 41 4c 4c 4f 43 5f 48 4f 4f 4b 53 20 20 20 20 7d  ALLOC_HOOKS    }
2d600 2c 0a 20 20 20 20 20 20 7b 20 22 70 65 6e 64 69  ,.      { "pendi
2d610 6e 67 5f 62 79 74 65 22 2c 20 20 20 20 20 20 20  ng_byte",       
2d620 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54     SQLITE_TESTCT
2d630 52 4c 5f 50 45 4e 44 49 4e 47 5f 42 59 54 45 20  RL_PENDING_BYTE 
2d640 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2d650 20 20 20 7b 20 22 61 73 73 65 72 74 22 2c 20 20     { "assert",  
2d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
2d670 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 53  LITE_TESTCTRL_AS
2d680 53 45 52 54 20 20 20 20 20 20 20 20 20 20 20 20  SERT            
2d690 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
2d6a0 22 61 6c 77 61 79 73 22 2c 20 20 20 20 20 20 20  "always",       
2d6b0 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
2d6c0 54 45 53 54 43 54 52 4c 5f 41 4c 57 41 59 53 20  TESTCTRL_ALWAYS 
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6e0 7d 2c 0a 20 20 20 20 20 20 7b 20 22 72 65 73 65  },.      { "rese
2d6f0 72 76 65 22 2c 20 20 20 20 20 20 20 20 20 20 20  rve",           
2d700 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43      SQLITE_TESTC
2d710 54 52 4c 5f 52 45 53 45 52 56 45 20 20 20 20 20  TRL_RESERVE     
2d720 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
2d730 20 20 20 20 7b 20 22 6f 70 74 69 6d 69 7a 61 74      { "optimizat
2d740 69 6f 6e 73 22 2c 20 20 20 20 20 20 20 20 20 53  ions",         S
2d750 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
2d760 50 54 49 4d 49 5a 41 54 49 4f 4e 53 20 20 20 20  PTIMIZATIONS    
2d770 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
2d780 20 22 69 73 6b 65 79 77 6f 72 64 22 2c 20 20 20   "iskeyword",   
2d790 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
2d7a0 5f 54 45 53 54 43 54 52 4c 5f 49 53 4b 45 59 57  _TESTCTRL_ISKEYW
2d7b0 4f 52 44 20 20 20 20 20 20 20 20 20 20 20 20 20  ORD             
2d7c0 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73 63 72   },.      { "scr
2d7d0 61 74 63 68 6d 61 6c 6c 6f 63 22 2c 20 20 20 20  atchmalloc",    
2d7e0 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54       SQLITE_TEST
2d7f0 43 54 52 4c 5f 53 43 52 41 54 43 48 4d 41 4c 4c  CTRL_SCRATCHMALL
2d800 4f 43 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  OC          },. 
2d810 20 20 20 20 20 7b 20 22 62 79 74 65 6f 72 64 65       { "byteorde
2d820 72 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  r",             
2d830 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2d840 42 59 54 45 4f 52 44 45 52 20 20 20 20 20 20 20  BYTEORDER       
2d850 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
2d860 7b 20 22 6e 65 76 65 72 5f 63 6f 72 72 75 70 74  { "never_corrupt
2d870 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49 54  ",         SQLIT
2d880 45 5f 54 45 53 54 43 54 52 4c 5f 4e 45 56 45 52  E_TESTCTRL_NEVER
2d890 5f 43 4f 52 52 55 50 54 20 20 20 20 20 20 20 20  _CORRUPT        
2d8a0 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 69 6d    },.      { "im
2d8b0 70 6f 73 74 65 72 22 2c 20 20 20 20 20 20 20 20  poster",        
2d8c0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53        SQLITE_TES
2d8d0 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 20 20  TCTRL_IMPOSTER  
2d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
2d8f0 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 74      };.    int t
2d900 65 73 74 63 74 72 6c 20 3d 20 2d 31 3b 0a 20 20  estctrl = -1;.  
2d910 20 20 69 6e 74 20 72 63 32 20 3d 20 30 3b 0a 20    int rc2 = 0;. 
2d920 20 20 20 69 6e 74 20 69 2c 20 6e 32 3b 0a 20 20     int i, n2;.  
2d930 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
2d940 0a 0a 20 20 20 20 2f 2a 20 63 6f 6e 76 65 72 74  ..    /* convert
2d950 20 74 65 73 74 63 74 72 6c 20 74 65 78 74 20 6f   testctrl text o
2d960 70 74 69 6f 6e 20 74 6f 20 76 61 6c 75 65 2e 20  ption to value. 
2d970 61 6c 6c 6f 77 20 61 6e 79 20 75 6e 69 71 75 65  allow any unique
2d980 20 70 72 65 66 69 78 0a 20 20 20 20 2a 2a 20 6f   prefix.    ** o
2d990 66 20 74 68 65 20 6f 70 74 69 6f 6e 20 6e 61 6d  f the option nam
2d9a0 65 2c 20 6f 72 20 61 20 6e 75 6d 65 72 69 63 61  e, or a numerica
2d9b0 6c 20 76 61 6c 75 65 2e 20 2a 2f 0a 20 20 20 20  l value. */.    
2d9c0 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a  n2 = strlen30(az
2d9d0 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 66 6f 72  Arg[1]);.    for
2d9e0 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
2d9f0 65 28 61 43 74 72 6c 29 3b 20 69 2b 2b 29 7b 0a  e(aCtrl); i++){.
2da00 20 20 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d        if( strncm
2da10 70 28 61 7a 41 72 67 5b 31 5d 2c 20 61 43 74 72  p(azArg[1], aCtr
2da20 6c 5b 69 5d 2e 7a 43 74 72 6c 4e 61 6d 65 2c 20  l[i].zCtrlName, 
2da30 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n2)==0 ){.      
2da40 20 20 69 66 28 20 74 65 73 74 63 74 72 6c 3c 30    if( testctrl<0
2da50 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 65   ){.          te
2da60 73 74 63 74 72 6c 20 3d 20 61 43 74 72 6c 5b 69  stctrl = aCtrl[i
2da70 5d 2e 63 74 72 6c 43 6f 64 65 3b 0a 20 20 20 20  ].ctrlCode;.    
2da80 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2da90 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2daa0 28 73 74 64 65 72 72 2c 20 22 61 6d 62 69 67 75  (stderr, "ambigu
2dab0 6f 75 73 20 6f 70 74 69 6f 6e 20 6e 61 6d 65 3a  ous option name:
2dac0 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72   \"%s\"\n", azAr
2dad0 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  g[1]);.         
2dae0 20 74 65 73 74 63 74 72 6c 20 3d 20 2d 31 3b 0a   testctrl = -1;.
2daf0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
2db00 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2db10 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
2db20 20 74 65 73 74 63 74 72 6c 3c 30 20 29 20 74 65   testctrl<0 ) te
2db30 73 74 63 74 72 6c 20 3d 20 28 69 6e 74 29 69 6e  stctrl = (int)in
2db40 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67  tegerValue(azArg
2db50 5b 31 5d 29 3b 0a 20 20 20 20 69 66 28 20 28 74  [1]);.    if( (t
2db60 65 73 74 63 74 72 6c 3c 53 51 4c 49 54 45 5f 54  estctrl<SQLITE_T
2db70 45 53 54 43 54 52 4c 5f 46 49 52 53 54 29 20 7c  ESTCTRL_FIRST) |
2db80 7c 20 28 74 65 73 74 63 74 72 6c 3e 53 51 4c 49  | (testctrl>SQLI
2db90 54 45 5f 54 45 53 54 43 54 52 4c 5f 4c 41 53 54  TE_TESTCTRL_LAST
2dba0 29 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  ) ){.      utf8_
2dbb0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45  printf(stderr,"E
2dbc0 72 72 6f 72 3a 20 69 6e 76 61 6c 69 64 20 74 65  rror: invalid te
2dbd0 73 74 63 74 72 6c 20 6f 70 74 69 6f 6e 3a 20 25  stctrl option: %
2dbe0 73 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b  s\n", azArg[1]);
2dbf0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2dc00 20 20 73 77 69 74 63 68 28 74 65 73 74 63 74 72    switch(testctr
2dc10 6c 29 7b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20  l){..        /* 
2dc20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
2dc30 74 72 6f 6c 28 69 6e 74 2c 20 64 62 2c 20 69 6e  trol(int, db, in
2dc40 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 61  t) */.        ca
2dc50 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
2dc60 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53  RL_OPTIMIZATIONS
2dc70 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  :.        case S
2dc80 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 52  QLITE_TESTCTRL_R
2dc90 45 53 45 52 56 45 3a 0a 20 20 20 20 20 20 20 20  ESERVE:.        
2dca0 20 20 69 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b    if( nArg==3 ){
2dcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
2dcc0 20 6f 70 74 20 3d 20 28 69 6e 74 29 73 74 72 74   opt = (int)strt
2dcd0 6f 6c 28 61 7a 41 72 67 5b 32 5d 2c 20 30 2c 20  ol(azArg[2], 0, 
2dce0 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
2dcf0 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65  rc2 = sqlite3_te
2dd00 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63  st_control(testc
2dd10 74 72 6c 2c 20 70 2d 3e 64 62 2c 20 6f 70 74 29  trl, p->db, opt)
2dd20 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61  ;.            ra
2dd30 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
2dd40 20 22 25 64 20 28 30 78 25 30 38 78 29 5c 6e 22   "%d (0x%08x)\n"
2dd50 2c 20 72 63 32 2c 20 72 63 32 29 3b 0a 20 20 20  , rc2, rc2);.   
2dd60 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
2dd70 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
2dd80 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
2dd90 45 72 72 6f 72 3a 20 74 65 73 74 63 74 72 6c 20  Error: testctrl 
2dda0 25 73 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c  %s takes a singl
2ddb0 65 20 69 6e 74 20 6f 70 74 69 6f 6e 5c 6e 22 2c  e int option\n",
2ddc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ddd0 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a       azArg[1]);.
2dde0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2ddf0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20        break;..  
2de00 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33        /* sqlite3
2de10 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e  _test_control(in
2de20 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 61  t) */.        ca
2de30 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
2de40 52 4c 5f 50 52 4e 47 5f 53 41 56 45 3a 0a 20 20  RL_PRNG_SAVE:.  
2de50 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
2de60 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f  E_TESTCTRL_PRNG_
2de70 52 45 53 54 4f 52 45 3a 0a 20 20 20 20 20 20 20  RESTORE:.       
2de80 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53   case SQLITE_TES
2de90 54 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53 45 54  TCTRL_PRNG_RESET
2dea0 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  :.        case S
2deb0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 42  QLITE_TESTCTRL_B
2dec0 59 54 45 4f 52 44 45 52 3a 0a 20 20 20 20 20 20  YTEORDER:.      
2ded0 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
2dee0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ){.            r
2def0 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73  c2 = sqlite3_tes
2df00 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74  t_control(testct
2df10 72 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  rl);.           
2df20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
2df30 75 74 2c 20 22 25 64 20 28 30 78 25 30 38 78 29  ut, "%d (0x%08x)
2df40 5c 6e 22 2c 20 72 63 32 2c 20 72 63 32 29 3b 0a  \n", rc2, rc2);.
2df50 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
2df60 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75   {.            u
2df70 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
2df80 72 2c 22 45 72 72 6f 72 3a 20 74 65 73 74 63 74  r,"Error: testct
2df90 72 6c 20 25 73 20 74 61 6b 65 73 20 6e 6f 20 6f  rl %s takes no o
2dfa0 70 74 69 6f 6e 73 5c 6e 22 2c 0a 20 20 20 20 20  ptions\n",.     
2dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfc0 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20     azArg[1]);.  
2dfd0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2dfe0 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20      break;..    
2dff0 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74      /* sqlite3_t
2e000 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c  est_control(int,
2e010 20 75 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20   uint) */.      
2e020 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
2e030 53 54 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f 42  STCTRL_PENDING_B
2e040 59 54 45 3a 0a 20 20 20 20 20 20 20 20 20 20 69  YTE:.          i
2e050 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20  f( nArg==3 ){.  
2e060 20 20 20 20 20 20 20 20 20 20 75 6e 73 69 67 6e            unsign
2e070 65 64 20 69 6e 74 20 6f 70 74 20 3d 20 28 75 6e  ed int opt = (un
2e080 73 69 67 6e 65 64 20 69 6e 74 29 69 6e 74 65 67  signed int)integ
2e090 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 32 5d  erValue(azArg[2]
2e0a0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  );.            r
2e0b0 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73  c2 = sqlite3_tes
2e0c0 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74  t_control(testct
2e0d0 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20 20  rl, opt);.      
2e0e0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2e0f0 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30 78  (p->out, "%d (0x
2e100 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20 72  %08x)\n", rc2, r
2e110 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  c2);.          }
2e120 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
2e130 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2e140 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 74  stderr,"Error: t
2e150 65 73 74 63 74 72 6c 20 25 73 20 74 61 6b 65 73  estctrl %s takes
2e160 20 61 20 73 69 6e 67 6c 65 20 75 6e 73 69 67 6e   a single unsign
2e170 65 64 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed".            
2e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2e190 20 69 6e 74 20 6f 70 74 69 6f 6e 5c 6e 22 2c 20   int option\n", 
2e1a0 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
2e1b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
2e1c0 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20   break;..       
2e1d0 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74   /* sqlite3_test
2e1e0 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20 69 6e  _control(int, in
2e1f0 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 61  t) */.        ca
2e200 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
2e210 52 4c 5f 41 53 53 45 52 54 3a 0a 20 20 20 20 20  RL_ASSERT:.     
2e220 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
2e230 45 53 54 43 54 52 4c 5f 41 4c 57 41 59 53 3a 0a  ESTCTRL_ALWAYS:.
2e240 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
2e250 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e 45 56  ITE_TESTCTRL_NEV
2e260 45 52 5f 43 4f 52 52 55 50 54 3a 0a 20 20 20 20  ER_CORRUPT:.    
2e270 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d        if( nArg==
2e280 33 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  3 ){.           
2e290 20 69 6e 74 20 6f 70 74 20 3d 20 62 6f 6f 6c 65   int opt = boole
2e2a0 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 32 5d  anValue(azArg[2]
2e2b0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  );.            r
2e2c0 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73  c2 = sqlite3_tes
2e2d0 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74  t_control(testct
2e2e0 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20 20  rl, opt);.      
2e2f0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2e300 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30 78  (p->out, "%d (0x
2e310 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20 72  %08x)\n", rc2, r
2e320 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  c2);.          }
2e330 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
2e340 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2e350 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 74  stderr,"Error: t
2e360 65 73 74 63 74 72 6c 20 25 73 20 74 61 6b 65 73  estctrl %s takes
2e370 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 20 6f 70   a single int op
2e380 74 69 6f 6e 5c 6e 22 2c 0a 20 20 20 20 20 20 20  tion\n",.       
2e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e3a0 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a       azArg[1]);.
2e3b0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2e3c0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20        break;..  
2e3d0 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33        /* sqlite3
2e3e0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e  _test_control(in
2e3f0 74 2c 20 63 68 61 72 20 2a 29 20 2a 2f 0a 23 69  t, char *) */.#i
2e400 66 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 4b 45  fdef SQLITE_N_KE
2e410 59 57 4f 52 44 0a 20 20 20 20 20 20 20 20 63 61  YWORD.        ca
2e420 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
2e430 52 4c 5f 49 53 4b 45 59 57 4f 52 44 3a 0a 20 20  RL_ISKEYWORD:.  
2e440 20 20 20 20 20 20 20 20 69 66 28 20 6e 41 72 67          if( nArg
2e450 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==3 ){.         
2e460 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6f     const char *o
2e470 70 74 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 20  pt = azArg[2];. 
2e480 20 20 20 20 20 20 20 20 20 20 20 72 63 32 20 3d             rc2 =
2e490 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
2e4a0 6e 74 72 6f 6c 28 74 65 73 74 63 74 72 6c 2c 20  ntrol(testctrl, 
2e4b0 6f 70 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  opt);.          
2e4c0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
2e4d0 6f 75 74 2c 20 22 25 64 20 28 30 78 25 30 38 78  out, "%d (0x%08x
2e4e0 29 5c 6e 22 2c 20 72 63 32 2c 20 72 63 32 29 3b  )\n", rc2, rc2);
2e4f0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
2e500 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
2e510 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2e520 72 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  rr,.            
2e530 20 20 20 20 20 20 20 20 20 20 20 20 22 45 72 72              "Err
2e540 6f 72 3a 20 74 65 73 74 63 74 72 6c 20 25 73 20  or: testctrl %s 
2e550 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20 63  takes a single c
2e560 68 61 72 20 2a 20 6f 70 74 69 6f 6e 5c 6e 22 2c  har * option\n",
2e570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e580 20 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b 31           azArg[1
2e590 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ]);.          }.
2e5a0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
2e5b0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 20  .#endif..       
2e5c0 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53   case SQLITE_TES
2e5d0 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 3a 0a  TCTRL_IMPOSTER:.
2e5e0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 41            if( nA
2e5f0 72 67 3d 3d 35 20 29 7b 0a 20 20 20 20 20 20 20  rg==5 ){.       
2e600 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c 69 74       rc2 = sqlit
2e610 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
2e620 74 65 73 74 63 74 72 6c 2c 20 70 2d 3e 64 62 2c  testctrl, p->db,
2e630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e640 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2e650 5b 32 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  [2],.           
2e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2e670 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72  ntegerValue(azAr
2e680 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20 20 20 20  g[3]),.         
2e690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6a0 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a   integerValue(az
2e6b0 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20 20 20 20  Arg[4]));.      
2e6c0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2e6d0 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30 78  (p->out, "%d (0x
2e6e0 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20 72  %08x)\n", rc2, r
2e6f0 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  c2);.          }
2e700 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
2e710 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2e720 65 72 72 2c 22 55 73 61 67 65 3a 20 2e 74 65 73  err,"Usage: .tes
2e730 74 63 74 72 6c 20 69 6d 70 6f 73 74 65 72 20 64  tctrl imposter d
2e740 62 4e 61 6d 65 20 6f 6e 6f 66 66 20 74 6e 75 6d  bName onoff tnum
2e750 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
2e760 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  }.          brea
2e770 6b 3b 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65  k;..        case
2e780 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2e790 5f 42 49 54 56 45 43 5f 54 45 53 54 3a 0a 20 20  _BITVEC_TEST:.  
2e7a0 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
2e7b0 45 5f 54 45 53 54 43 54 52 4c 5f 46 41 55 4c 54  E_TESTCTRL_FAULT
2e7c0 5f 49 4e 53 54 41 4c 4c 3a 0a 20 20 20 20 20 20  _INSTALL:.      
2e7d0 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
2e7e0 53 54 43 54 52 4c 5f 42 45 4e 49 47 4e 5f 4d 41  STCTRL_BENIGN_MA
2e7f0 4c 4c 4f 43 5f 48 4f 4f 4b 53 3a 0a 20 20 20 20  LLOC_HOOKS:.    
2e800 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
2e810 54 45 53 54 43 54 52 4c 5f 53 43 52 41 54 43 48  TESTCTRL_SCRATCH
2e820 4d 41 4c 4c 4f 43 3a 0a 20 20 20 20 20 20 20 20  MALLOC:.        
2e830 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20  default:.       
2e840 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
2e850 74 64 65 72 72 2c 0a 20 20 20 20 20 20 20 20 20  tderr,.         
2e860 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45 72               "Er
2e870 72 6f 72 3a 20 43 4c 49 20 73 75 70 70 6f 72 74  ror: CLI support
2e880 20 66 6f 72 20 74 65 73 74 63 74 72 6c 20 25 73   for testctrl %s
2e890 20 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64   not implemented
2e8a0 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
2e8b0 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2e8c0 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [1]);.          
2e8d0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
2e8e0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e     }.  }else.#en
2e8f0 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
2e900 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2e910 45 29 20 2a 2f 0a 0a 20 20 69 66 28 20 63 3d 3d  E) */..  if( c==
2e920 27 74 27 20 26 26 20 6e 3e 34 20 26 26 20 73 74  't' && n>4 && st
2e930 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2e940 22 74 69 6d 65 6f 75 74 22 2c 20 6e 29 3d 3d 30  "timeout", n)==0
2e950 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   ){.    open_db(
2e960 70 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  p, 0);.    sqlit
2e970 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
2e980 70 2d 3e 64 62 2c 20 6e 41 72 67 3e 3d 32 20 3f  p->db, nArg>=2 ?
2e990 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c   (int)integerVal
2e9a0 75 65 28 61 7a 41 72 67 5b 31 5d 29 20 3a 20 30  ue(azArg[1]) : 0
2e9b0 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66  );.  }else..  if
2e9c0 28 20 63 3d 3d 27 74 27 20 26 26 20 6e 3e 3d 35  ( c=='t' && n>=5
2e9d0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
2e9e0 67 5b 30 5d 2c 20 22 74 69 6d 65 72 22 2c 20 6e  g[0], "timer", n
2e9f0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
2ea00 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
2ea10 20 65 6e 61 62 6c 65 54 69 6d 65 72 20 3d 20 62   enableTimer = b
2ea20 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72  ooleanValue(azAr
2ea30 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28  g[1]);.      if(
2ea40 20 65 6e 61 62 6c 65 54 69 6d 65 72 20 26 26 20   enableTimer && 
2ea50 21 48 41 53 5f 54 49 4d 45 52 20 29 7b 0a 20 20  !HAS_TIMER ){.  
2ea60 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2ea70 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
2ea80 20 74 69 6d 65 72 20 6e 6f 74 20 61 76 61 69 6c   timer not avail
2ea90 61 62 6c 65 20 6f 6e 20 74 68 69 73 20 73 79 73  able on this sys
2eaa0 74 65 6d 2e 5c 6e 22 29 3b 0a 20 20 20 20 20 20  tem.\n");.      
2eab0 20 20 65 6e 61 62 6c 65 54 69 6d 65 72 20 3d 20    enableTimer = 
2eac0 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
2ead0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
2eae0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2eaf0 55 73 61 67 65 3a 20 2e 74 69 6d 65 72 20 6f 6e  Usage: .timer on
2eb00 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20  |off\n");.      
2eb10 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rc = 1;.    }.  
2eb20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
2eb30 27 74 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  't' && strncmp(a
2eb40 7a 41 72 67 5b 30 5d 2c 20 22 74 72 61 63 65 22  zArg[0], "trace"
2eb50 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f  , n)==0 ){.    o
2eb60 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20  pen_db(p, 0);.  
2eb70 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29 7b    if( nArg!=2 ){
2eb80 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
2eb90 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
2eba0 3a 20 2e 74 72 61 63 65 20 46 49 4c 45 7c 6f 66  : .trace FILE|of
2ebb0 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  f\n");.      rc 
2ebc0 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  = 1;.      goto 
2ebd0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2ebe0 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f 75 74  t;.    }.    out
2ebf0 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28 70  put_file_close(p
2ec00 2d 3e 74 72 61 63 65 4f 75 74 29 3b 0a 20 20 20  ->traceOut);.   
2ec10 20 70 2d 3e 74 72 61 63 65 4f 75 74 20 3d 20 6f   p->traceOut = o
2ec20 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28  utput_file_open(
2ec30 61 7a 41 72 67 5b 31 5d 29 3b 0a 23 69 66 20 21  azArg[1]);.#if !
2ec40 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2ec50 4d 49 54 5f 54 52 41 43 45 29 20 26 26 20 21 64  MIT_TRACE) && !d
2ec60 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2ec70 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
2ec80 54 29 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72  T).    if( p->tr
2ec90 61 63 65 4f 75 74 3d 3d 30 20 29 7b 0a 20 20 20  aceOut==0 ){.   
2eca0 20 20 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65     sqlite3_trace
2ecb0 5f 76 32 28 70 2d 3e 64 62 2c 20 30 2c 20 30 2c  _v2(p->db, 0, 0,
2ecc0 20 30 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   0);.    }else{.
2ecd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 72        sqlite3_tr
2ece0 61 63 65 5f 76 32 28 70 2d 3e 64 62 2c 20 53 51  ace_v2(p->db, SQ
2ecf0 4c 49 54 45 5f 54 52 41 43 45 5f 53 54 4d 54 2c  LITE_TRACE_STMT,
2ed00 20 73 71 6c 5f 74 72 61 63 65 5f 63 61 6c 6c 62   sql_trace_callb
2ed10 61 63 6b 2c 70 2d 3e 74 72 61 63 65 4f 75 74 29  ack,p->traceOut)
2ed20 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
2ed30 20 7d 65 6c 73 65 0a 0a 23 69 66 20 53 51 4c 49   }else..#if SQLI
2ed40 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
2ed50 43 41 54 49 4f 4e 0a 20 20 69 66 28 20 63 3d 3d  CATION.  if( c==
2ed60 27 75 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'u' && strncmp(a
2ed70 7a 41 72 67 5b 30 5d 2c 20 22 75 73 65 72 22 2c  zArg[0], "user",
2ed80 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66   n)==0 ){.    if
2ed90 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20  ( nArg<2 ){.    
2eda0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2edb0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73  err, "Usage: .us
2edc0 65 72 20 53 55 42 43 4f 4d 4d 41 4e 44 20 2e 2e  er SUBCOMMAND ..
2edd0 2e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  .\n");.      rc 
2ede0 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  = 1;.      goto 
2edf0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2ee00 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65  t;.    }.    ope
2ee10 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20  n_db(p, 0);.    
2ee20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67  if( strcmp(azArg
2ee30 5b 31 5d 2c 22 6c 6f 67 69 6e 22 29 3d 3d 30 20  [1],"login")==0 
2ee40 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72  ){.      if( nAr
2ee50 67 21 3d 34 20 29 7b 0a 20 20 20 20 20 20 20 20  g!=4 ){.        
2ee60 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2ee70 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73 65 72  r, "Usage: .user
2ee80 20 6c 6f 67 69 6e 20 55 53 45 52 20 50 41 53 53   login USER PASS
2ee90 57 4f 52 44 5c 6e 22 29 3b 0a 20 20 20 20 20 20  WORD\n");.      
2eea0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
2eeb0 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
2eec0 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20  and_exit;.      
2eed0 7d 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  }.      rc = sql
2eee0 69 74 65 33 5f 75 73 65 72 5f 61 75 74 68 65 6e  ite3_user_authen
2eef0 74 69 63 61 74 65 28 70 2d 3e 64 62 2c 20 61 7a  ticate(p->db, az
2ef00 41 72 67 5b 32 5d 2c 20 61 7a 41 72 67 5b 33 5d  Arg[2], azArg[3]
2ef10 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef30 20 20 20 20 20 20 28 69 6e 74 29 73 74 72 6c 65        (int)strle
2ef40 6e 28 61 7a 41 72 67 5b 33 5d 29 29 3b 0a 20 20  n(azArg[3]));.  
2ef50 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
2ef60 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2ef70 66 28 73 74 64 65 72 72 2c 20 22 41 75 74 68 65  f(stderr, "Authe
2ef80 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64  ntication failed
2ef90 20 66 6f 72 20 75 73 65 72 20 25 73 5c 6e 22 2c   for user %s\n",
2efa0 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20   azArg[2]);.    
2efb0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2efc0 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66    }.    }else if
2efd0 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31  ( strcmp(azArg[1
2efe0 5d 2c 22 61 64 64 22 29 3d 3d 30 20 29 7b 0a 20  ],"add")==0 ){. 
2eff0 20 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 35       if( nArg!=5
2f000 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
2f010 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2f020 55 73 61 67 65 3a 20 2e 75 73 65 72 20 61 64 64  Usage: .user add
2f030 20 55 53 45 52 20 50 41 53 53 57 4f 52 44 20 49   USER PASSWORD I
2f040 53 41 44 4d 49 4e 5c 6e 22 29 3b 0a 20 20 20 20  SADMIN\n");.    
2f050 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2f060 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
2f070 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
2f080 20 20 7d 0a 20 20 20 20 20 20 72 63 20 3d 20 73    }.      rc = s
2f090 71 6c 69 74 65 33 5f 75 73 65 72 5f 61 64 64 28  qlite3_user_add(
2f0a0 70 2d 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d 2c  p->db, azArg[2],
2f0b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
2f0d0 72 67 5b 33 5d 2c 20 28 69 6e 74 29 73 74 72 6c  rg[3], (int)strl
2f0e0 65 6e 28 61 7a 41 72 67 5b 33 5d 29 2c 0a 20 20  en(azArg[3]),.  
2f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f100 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 65 61            boolea
2f110 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 34 5d 29  nValue(azArg[4])
2f120 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20  );.      if( rc 
2f130 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
2f140 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
2f150 73 65 72 2d 41 64 64 20 66 61 69 6c 65 64 3a 20  ser-Add failed: 
2f160 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20  %d\n", rc);.    
2f170 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2f180 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66    }.    }else if
2f190 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31  ( strcmp(azArg[1
2f1a0 5d 2c 22 65 64 69 74 22 29 3d 3d 30 20 29 7b 0a  ],"edit")==0 ){.
2f1b0 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d        if( nArg!=
2f1c0 35 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  5 ){.        raw
2f1d0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2f1e0 22 55 73 61 67 65 3a 20 2e 75 73 65 72 20 65 64  "Usage: .user ed
2f1f0 69 74 20 55 53 45 52 20 50 41 53 53 57 4f 52 44  it USER PASSWORD
2f200 20 49 53 41 44 4d 49 4e 5c 6e 22 29 3b 0a 20 20   ISADMIN\n");.  
2f210 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2f220 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
2f230 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
2f240 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20 3d      }.      rc =
2f250 20 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 63 68   sqlite3_user_ch
2f260 61 6e 67 65 28 70 2d 3e 64 62 2c 20 61 7a 41 72  ange(p->db, azAr
2f270 67 5b 32 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  g[2],.          
2f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f290 20 20 20 20 61 7a 41 72 67 5b 33 5d 2c 20 28 69      azArg[3], (i
2f2a0 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72 67 5b  nt)strlen(azArg[
2f2b0 33 5d 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  3]),.           
2f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2d0 20 20 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28     booleanValue(
2f2e0 61 7a 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20 20  azArg[4]));.    
2f2f0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
2f300 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2f310 74 64 65 72 72 2c 20 22 55 73 65 72 2d 45 64 69  tderr, "User-Edi
2f320 74 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c  t failed: %d\n",
2f330 20 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63   rc);.        rc
2f340 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 1;.      }.  
2f350 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
2f360 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 64 65 6c  mp(azArg[1],"del
2f370 65 74 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ete")==0 ){.    
2f380 20 20 69 66 28 20 6e 41 72 67 21 3d 33 20 29 7b    if( nArg!=3 ){
2f390 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
2f3a0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
2f3b0 67 65 3a 20 2e 75 73 65 72 20 64 65 6c 65 74 65  ge: .user delete
2f3c0 20 55 53 45 52 5c 6e 22 29 3b 0a 20 20 20 20 20   USER\n");.     
2f3d0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
2f3e0 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d     goto meta_com
2f3f0 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20  mand_exit;.     
2f400 20 7d 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71   }.      rc = sq
2f410 6c 69 74 65 33 5f 75 73 65 72 5f 64 65 6c 65 74  lite3_user_delet
2f420 65 28 70 2d 3e 64 62 2c 20 61 7a 41 72 67 5b 32  e(p->db, azArg[2
2f430 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  ]);.      if( rc
2f440 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
2f450 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2f460 55 73 65 72 2d 44 65 6c 65 74 65 20 66 61 69 6c  User-Delete fail
2f470 65 64 3a 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a  ed: %d\n", rc);.
2f480 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
2f490 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
2f4a0 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
2f4b0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
2f4c0 67 65 3a 20 2e 75 73 65 72 20 6c 6f 67 69 6e 7c  ge: .user login|
2f4d0 61 64 64 7c 65 64 69 74 7c 64 65 6c 65 74 65 20  add|edit|delete 
2f4e0 2e 2e 2e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  ...\n");.      r
2f4f0 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74  c = 1;.      got
2f500 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
2f510 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  xit;.    }.  }el
2f520 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  se.#endif /* SQL
2f530 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
2f540 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 20 20 69 66  ICATION */..  if
2f550 28 20 63 3d 3d 27 76 27 20 26 26 20 73 74 72 6e  ( c=='v' && strn
2f560 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 76  cmp(azArg[0], "v
2f570 65 72 73 69 6f 6e 22 2c 20 6e 29 3d 3d 30 20 29  ersion", n)==0 )
2f580 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  {.    utf8_print
2f590 66 28 70 2d 3e 6f 75 74 2c 20 22 53 51 4c 69 74  f(p->out, "SQLit
2f5a0 65 20 25 73 20 25 73 5c 6e 22 20 2f 2a 65 78 74  e %s %s\n" /*ext
2f5b0 72 61 2d 76 65 72 73 69 6f 6e 2d 69 6e 66 6f 2a  ra-version-info*
2f5c0 2f 2c 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  /,.        sqlit
2f5d0 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c  e3_libversion(),
2f5e0 20 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69   sqlite3_sourcei
2f5f0 64 28 29 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  d());.  }else.. 
2f600 20 69 66 28 20 63 3d 3d 27 76 27 20 26 26 20 73   if( c=='v' && s
2f610 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
2f620 20 22 76 66 73 69 6e 66 6f 22 2c 20 6e 29 3d 3d   "vfsinfo", n)==
2f630 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
2f640 68 61 72 20 2a 7a 44 62 4e 61 6d 65 20 3d 20 6e  har *zDbName = n
2f650 41 72 67 3d 3d 32 20 3f 20 61 7a 41 72 67 5b 31  Arg==2 ? azArg[1
2f660 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a 20 20 20 20  ] : "main";.    
2f670 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
2f680 73 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70  s = 0;.    if( p
2f690 2d 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 73 71  ->db ){.      sq
2f6a0 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
2f6b0 6f 6c 28 70 2d 3e 64 62 2c 20 7a 44 62 4e 61 6d  ol(p->db, zDbNam
2f6c0 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  e, SQLITE_FCNTL_
2f6d0 56 46 53 5f 50 4f 49 4e 54 45 52 2c 20 26 70 56  VFS_POINTER, &pV
2f6e0 66 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  fs);.      if( p
2f6f0 56 66 73 20 29 7b 0a 20 20 20 20 20 20 20 20 75  Vfs ){.        u
2f700 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
2f710 74 2c 20 22 76 66 73 2e 7a 4e 61 6d 65 20 20 20  t, "vfs.zName   
2f720 20 20 20 3d 20 5c 22 25 73 5c 22 5c 6e 22 2c 20     = \"%s\"\n", 
2f730 70 56 66 73 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20  pVfs->zName);.  
2f740 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2f750 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 69 56  (p->out, "vfs.iV
2f760 65 72 73 69 6f 6e 20 20 20 3d 20 25 64 5c 6e 22  ersion   = %d\n"
2f770 2c 20 70 56 66 73 2d 3e 69 56 65 72 73 69 6f 6e  , pVfs->iVersion
2f780 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  );.        raw_p
2f790 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76  rintf(p->out, "v
2f7a0 66 73 2e 73 7a 4f 73 46 69 6c 65 20 20 20 3d 20  fs.szOsFile   = 
2f7b0 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 73 7a 4f  %d\n", pVfs->szO
2f7c0 73 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 20 20  sFile);.        
2f7d0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
2f7e0 74 2c 20 22 76 66 73 2e 6d 78 50 61 74 68 6e 61  t, "vfs.mxPathna
2f7f0 6d 65 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73  me = %d\n", pVfs
2f800 2d 3e 6d 78 50 61 74 68 6e 61 6d 65 29 3b 0a 20  ->mxPathname);. 
2f810 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
2f820 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
2f830 76 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  v' && strncmp(az
2f840 41 72 67 5b 30 5d 2c 20 22 76 66 73 6c 69 73 74  Arg[0], "vfslist
2f850 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
2f860 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
2f870 73 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76  s;.    sqlite3_v
2f880 66 73 20 2a 70 43 75 72 72 65 6e 74 20 3d 20 30  fs *pCurrent = 0
2f890 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 20  ;.    if( p->db 
2f8a0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2f8b0 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 70 2d  _file_control(p-
2f8c0 3e 64 62 2c 20 22 6d 61 69 6e 22 2c 20 53 51 4c  >db, "main", SQL
2f8d0 49 54 45 5f 46 43 4e 54 4c 5f 56 46 53 5f 50 4f  ITE_FCNTL_VFS_PO
2f8e0 49 4e 54 45 52 2c 20 26 70 43 75 72 72 65 6e 74  INTER, &pCurrent
2f8f0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72  );.    }.    for
2f900 28 70 56 66 73 3d 73 71 6c 69 74 65 33 5f 76 66  (pVfs=sqlite3_vf
2f910 73 5f 66 69 6e 64 28 30 29 3b 20 70 56 66 73 3b  s_find(0); pVfs;
2f920 20 70 56 66 73 3d 70 56 66 73 2d 3e 70 4e 65 78   pVfs=pVfs->pNex
2f930 74 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70  t){.      utf8_p
2f940 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76  rintf(p->out, "v
2f950 66 73 2e 7a 4e 61 6d 65 20 20 20 20 20 20 3d 20  fs.zName      = 
2f960 5c 22 25 73 5c 22 25 73 5c 6e 22 2c 20 70 56 66  \"%s\"%s\n", pVf
2f970 73 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  s->zName,.      
2f980 20 20 20 20 20 70 56 66 73 3d 3d 70 43 75 72 72       pVfs==pCurr
2f990 65 6e 74 20 3f 20 22 20 20 3c 2d 2d 2d 20 43 55  ent ? "  <--- CU
2f9a0 52 52 45 4e 54 22 20 3a 20 22 22 29 3b 0a 20 20  RRENT" : "");.  
2f9b0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
2f9c0 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 69 56 65 72  ->out, "vfs.iVer
2f9d0 73 69 6f 6e 20 20 20 3d 20 25 64 5c 6e 22 2c 20  sion   = %d\n", 
2f9e0 70 56 66 73 2d 3e 69 56 65 72 73 69 6f 6e 29 3b  pVfs->iVersion);
2f9f0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
2fa00 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 73  f(p->out, "vfs.s
2fa10 7a 4f 73 46 69 6c 65 20 20 20 3d 20 25 64 5c 6e  zOsFile   = %d\n
2fa20 22 2c 20 70 56 66 73 2d 3e 73 7a 4f 73 46 69 6c  ", pVfs->szOsFil
2fa30 65 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  e);.      raw_pr
2fa40 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66  intf(p->out, "vf
2fa50 73 2e 6d 78 50 61 74 68 6e 61 6d 65 20 3d 20 25  s.mxPathname = %
2fa60 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 6d 78 50 61  d\n", pVfs->mxPa
2fa70 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69  thname);.      i
2fa80 66 28 20 70 56 66 73 2d 3e 70 4e 65 78 74 20 29  f( pVfs->pNext )
2fa90 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
2faa0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2d 2d  intf(p->out, "--
2fab0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fac0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fad0 2d 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  -\n");.      }. 
2fae0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
2faf0 69 66 28 20 63 3d 3d 27 76 27 20 26 26 20 73 74  if( c=='v' && st
2fb00 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2fb10 22 76 66 73 6e 61 6d 65 22 2c 20 6e 29 3d 3d 30  "vfsname", n)==0
2fb20 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
2fb30 61 72 20 2a 7a 44 62 4e 61 6d 65 20 3d 20 6e 41  ar *zDbName = nA
2fb40 72 67 3d 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d  rg==2 ? azArg[1]
2fb50 20 3a 20 22 6d 61 69 6e 22 3b 0a 20 20 20 20 63   : "main";.    c
2fb60 68 61 72 20 2a 7a 56 66 73 4e 61 6d 65 20 3d 20  har *zVfsName = 
2fb70 30 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62  0;.    if( p->db
2fb80 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2fb90 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 70  3_file_control(p
2fba0 2d 3e 64 62 2c 20 7a 44 62 4e 61 6d 65 2c 20 53  ->db, zDbName, S
2fbb0 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 56 46 53 4e  QLITE_FCNTL_VFSN
2fbc0 41 4d 45 2c 20 26 7a 56 66 73 4e 61 6d 65 29 3b  AME, &zVfsName);
2fbd0 0a 20 20 20 20 20 20 69 66 28 20 7a 56 66 73 4e  .      if( zVfsN
2fbe0 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 75  ame ){.        u
2fbf0 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
2fc00 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 56 66 73 4e  t, "%s\n", zVfsN
2fc10 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71  ame);.        sq
2fc20 6c 69 74 65 33 5f 66 72 65 65 28 7a 56 66 73 4e  lite3_free(zVfsN
2fc30 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ame);.      }.  
2fc40 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66    }.  }else..#if
2fc50 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2fc60 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
2fc70 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2fc80 57 48 45 52 45 54 52 41 43 45 29 0a 20 20 69 66  WHERETRACE).  if
2fc90 28 20 63 3d 3d 27 77 27 20 26 26 20 73 74 72 6e  ( c=='w' && strn
2fca0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 77  cmp(azArg[0], "w
2fcb0 68 65 72 65 74 72 61 63 65 22 2c 20 6e 29 3d 3d  heretrace", n)==
2fcc0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
2fcd0 57 68 65 72 65 54 72 61 63 65 20 3d 20 6e 41 72  WhereTrace = nAr
2fce0 67 3e 3d 32 20 3f 20 62 6f 6f 6c 65 61 6e 56 61  g>=2 ? booleanVa
2fcf0 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 20 3a 20  lue(azArg[1]) : 
2fd00 30 78 66 66 3b 0a 20 20 7d 65 6c 73 65 0a 23 65  0xff;.  }else.#e
2fd10 6e 64 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27  ndif..  if( c=='
2fd20 77 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  w' && strncmp(az
2fd30 41 72 67 5b 30 5d 2c 20 22 77 69 64 74 68 22 2c  Arg[0], "width",
2fd40 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e   n)==0 ){.    in
2fd50 74 20 6a 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t j;.    assert(
2fd60 20 6e 41 72 67 3c 3d 41 72 72 61 79 53 69 7a 65   nArg<=ArraySize
2fd70 28 61 7a 41 72 67 29 20 29 3b 0a 20 20 20 20 66  (azArg) );.    f
2fd80 6f 72 28 6a 3d 31 3b 20 6a 3c 6e 41 72 67 20 26  or(j=1; j<nArg &
2fd90 26 20 6a 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  & j<ArraySize(p-
2fda0 3e 63 6f 6c 57 69 64 74 68 29 3b 20 6a 2b 2b 29  >colWidth); j++)
2fdb0 7b 0a 20 20 20 20 20 20 70 2d 3e 63 6f 6c 57 69  {.      p->colWi
2fdc0 64 74 68 5b 6a 2d 31 5d 20 3d 20 28 69 6e 74 29  dth[j-1] = (int)
2fdd0 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41  integerValue(azA
2fde0 72 67 5b 6a 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  rg[j]);.    }.  
2fdf0 7d 65 6c 73 65 0a 0a 20 20 7b 0a 20 20 20 20 75  }else..  {.    u
2fe00 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
2fe10 72 2c 20 22 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f  r, "Error: unkno
2fe20 77 6e 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 69 6e  wn command or in
2fe30 76 61 6c 69 64 20 61 72 67 75 6d 65 6e 74 73 3a  valid arguments:
2fe40 20 22 0a 20 20 20 20 20 20 22 20 5c 22 25 73 5c   ".      " \"%s\
2fe50 22 2e 20 45 6e 74 65 72 20 5c 22 2e 68 65 6c 70  ". Enter \".help
2fe60 5c 22 20 66 6f 72 20 68 65 6c 70 5c 6e 22 2c 20  \" for help\n", 
2fe70 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20 72  azArg[0]);.    r
2fe80 63 20 3d 20 31 3b 0a 20 20 7d 0a 0a 6d 65 74 61  c = 1;.  }..meta
2fe90 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3a 0a 20  _command_exit:. 
2fea0 20 69 66 28 20 70 2d 3e 6f 75 74 43 6f 75 6e 74   if( p->outCount
2feb0 20 29 7b 0a 20 20 20 20 70 2d 3e 6f 75 74 43 6f   ){.    p->outCo
2fec0 75 6e 74 2d 2d 3b 0a 20 20 20 20 69 66 28 20 70  unt--;.    if( p
2fed0 2d 3e 6f 75 74 43 6f 75 6e 74 3d 3d 30 20 29 20  ->outCount==0 ) 
2fee0 6f 75 74 70 75 74 5f 72 65 73 65 74 28 70 29 3b  output_reset(p);
2fef0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
2ff00 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
2ff10 6e 20 54 52 55 45 20 69 66 20 61 20 73 65 6d 69  n TRUE if a semi
2ff20 63 6f 6c 6f 6e 20 6f 63 63 75 72 73 20 61 6e 79  colon occurs any
2ff30 77 68 65 72 65 20 69 6e 20 74 68 65 20 66 69 72  where in the fir
2ff40 73 74 20 4e 20 63 68 61 72 61 63 74 65 72 73 0a  st N characters.
2ff50 2a 2a 20 6f 66 20 73 74 72 69 6e 67 20 7a 5b 5d  ** of string z[]
2ff60 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
2ff70 6c 69 6e 65 5f 63 6f 6e 74 61 69 6e 73 5f 73 65  line_contains_se
2ff80 6d 69 63 6f 6c 6f 6e 28 63 6f 6e 73 74 20 63 68  micolon(const ch
2ff90 61 72 20 2a 7a 2c 20 69 6e 74 20 4e 29 7b 0a 20  ar *z, int N){. 
2ffa0 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d   int i;.  for(i=
2ffb0 30 3b 20 69 3c 4e 3b 20 69 2b 2b 29 7b 20 20 69  0; i<N; i++){  i
2ffc0 66 28 20 7a 5b 69 5d 3d 3d 27 3b 27 20 29 20 72  f( z[i]==';' ) r
2ffd0 65 74 75 72 6e 20 31 3b 20 7d 0a 20 20 72 65 74  eturn 1; }.  ret
2ffe0 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
2fff0 54 65 73 74 20 74 6f 20 73 65 65 20 69 66 20 61  Test to see if a
30000 20 6c 69 6e 65 20 63 6f 6e 73 69 73 74 73 20 65   line consists e
30010 6e 74 69 72 65 6c 79 20 6f 66 20 77 68 69 74 65  ntirely of white
30020 73 70 61 63 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  space..*/.static
30030 20 69 6e 74 20 5f 61 6c 6c 5f 77 68 69 74 65 73   int _all_whites
30040 70 61 63 65 28 63 6f 6e 73 74 20 63 68 61 72 20  pace(const char 
30050 2a 7a 29 7b 0a 20 20 66 6f 72 28 3b 20 2a 7a 3b  *z){.  for(; *z;
30060 20 7a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 49   z++){.    if( I
30070 73 53 70 61 63 65 28 7a 5b 30 5d 29 20 29 20 63  sSpace(z[0]) ) c
30080 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 69 66 28  ontinue;.    if(
30090 20 2a 7a 3d 3d 27 2f 27 20 26 26 20 7a 5b 31 5d   *z=='/' && z[1]
300a0 3d 3d 27 2a 27 20 29 7b 0a 20 20 20 20 20 20 7a  =='*' ){.      z
300b0 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 77 68 69   += 2;.      whi
300c0 6c 65 28 20 2a 7a 20 26 26 20 28 2a 7a 21 3d 27  le( *z && (*z!='
300d0 2a 27 20 7c 7c 20 7a 5b 31 5d 21 3d 27 2f 27 29  *' || z[1]!='/')
300e0 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20 20 20   ){ z++; }.     
300f0 20 69 66 28 20 2a 7a 3d 3d 30 20 29 20 72 65 74   if( *z==0 ) ret
30100 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 7a 2b 2b  urn 0;.      z++
30110 3b 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65  ;.      continue
30120 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
30130 2a 7a 3d 3d 27 2d 27 20 26 26 20 7a 5b 31 5d 3d  *z=='-' && z[1]=
30140 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 7a 20  ='-' ){.      z 
30150 2b 3d 20 32 3b 0a 20 20 20 20 20 20 77 68 69 6c  += 2;.      whil
30160 65 28 20 2a 7a 20 26 26 20 2a 7a 21 3d 27 5c 6e  e( *z && *z!='\n
30170 27 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20 20  ' ){ z++; }.    
30180 20 20 69 66 28 20 2a 7a 3d 3d 30 20 29 20 72 65    if( *z==0 ) re
30190 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 63 6f  turn 1;.      co
301a0 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 20 20  ntinue;.    }.  
301b0 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
301c0 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f    return 1;.}../
301d0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45  *.** Return TRUE
301e0 20 69 66 20 74 68 65 20 6c 69 6e 65 20 74 79 70   if the line typ
301f0 65 64 20 69 6e 20 69 73 20 61 6e 20 53 51 4c 20  ed in is an SQL 
30200 63 6f 6d 6d 61 6e 64 20 74 65 72 6d 69 6e 61 74  command terminat
30210 6f 72 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  or other.** than
30220 20 61 20 73 65 6d 69 2d 63 6f 6c 6f 6e 2e 20 20   a semi-colon.  
30230 54 68 65 20 53 51 4c 20 53 65 72 76 65 72 20 73  The SQL Server s
30240 74 79 6c 65 20 22 67 6f 22 20 63 6f 6d 6d 61 6e  tyle "go" comman
30250 64 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 0a  d is understood.
30260 2a 2a 20 61 73 20 69 73 20 74 68 65 20 4f 72 61  ** as is the Ora
30270 63 6c 65 20 22 2f 22 2e 0a 2a 2f 0a 73 74 61 74  cle "/"..*/.stat
30280 69 63 20 69 6e 74 20 6c 69 6e 65 5f 69 73 5f 63  ic int line_is_c
30290 6f 6d 6d 61 6e 64 5f 74 65 72 6d 69 6e 61 74 6f  ommand_terminato
302a0 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c  r(const char *zL
302b0 69 6e 65 29 7b 0a 20 20 77 68 69 6c 65 28 20 49  ine){.  while( I
302c0 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 30 5d 29  sSpace(zLine[0])
302d0 20 29 7b 20 7a 4c 69 6e 65 2b 2b 3b 20 7d 3b 0a   ){ zLine++; };.
302e0 20 20 69 66 28 20 7a 4c 69 6e 65 5b 30 5d 3d 3d    if( zLine[0]==
302f0 27 2f 27 20 26 26 20 5f 61 6c 6c 5f 77 68 69 74  '/' && _all_whit
30300 65 73 70 61 63 65 28 26 7a 4c 69 6e 65 5b 31 5d  espace(&zLine[1]
30310 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
30320 31 3b 20 20 2f 2a 20 4f 72 61 63 6c 65 20 2a 2f  1;  /* Oracle */
30330 0a 20 20 7d 0a 20 20 69 66 28 20 54 6f 4c 6f 77  .  }.  if( ToLow
30340 65 72 28 7a 4c 69 6e 65 5b 30 5d 29 3d 3d 27 67  er(zLine[0])=='g
30350 27 20 26 26 20 54 6f 4c 6f 77 65 72 28 7a 4c 69  ' && ToLower(zLi
30360 6e 65 5b 31 5d 29 3d 3d 27 6f 27 0a 20 20 20 20  ne[1])=='o'.    
30370 20 20 20 20 20 26 26 20 5f 61 6c 6c 5f 77 68 69       && _all_whi
30380 74 65 73 70 61 63 65 28 26 7a 4c 69 6e 65 5b 32  tespace(&zLine[2
30390 5d 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ]) ){.    return
303a0 20 31 3b 20 20 2f 2a 20 53 51 4c 20 53 65 72 76   1;  /* SQL Serv
303b0 65 72 20 2a 2f 0a 20 20 7d 0a 20 20 72 65 74 75  er */.  }.  retu
303c0 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  rn 0;.}../*.** R
303d0 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 7a 53  eturn true if zS
303e0 71 6c 20 69 73 20 61 20 63 6f 6d 70 6c 65 74 65  ql is a complete
303f0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20   SQL statement. 
30400 20 52 65 74 75 72 6e 20 66 61 6c 73 65 20 69 66   Return false if
30410 20 69 74 0a 2a 2a 20 65 6e 64 73 20 69 6e 20 74   it.** ends in t
30420 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 73  he middle of a s
30430 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 6f 72  tring literal or
30440 20 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74   C-style comment
30450 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
30460 6c 69 6e 65 5f 69 73 5f 63 6f 6d 70 6c 65 74 65  line_is_complete
30470 28 63 68 61 72 20 2a 7a 53 71 6c 2c 20 69 6e 74  (char *zSql, int
30480 20 6e 53 71 6c 29 7b 0a 20 20 69 6e 74 20 72 63   nSql){.  int rc
30490 3b 0a 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20  ;.  if( zSql==0 
304a0 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7a 53  ) return 1;.  zS
304b0 71 6c 5b 6e 53 71 6c 5d 20 3d 20 27 3b 27 3b 0a  ql[nSql] = ';';.
304c0 20 20 7a 53 71 6c 5b 6e 53 71 6c 2b 31 5d 20 3d    zSql[nSql+1] =
304d0 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
304e0 65 33 5f 63 6f 6d 70 6c 65 74 65 28 7a 53 71 6c  e3_complete(zSql
304f0 29 3b 0a 20 20 7a 53 71 6c 5b 6e 53 71 6c 5d 20  );.  zSql[nSql] 
30500 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  = 0;.  return rc
30510 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 61  ;.}../*.** Run a
30520 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20 6f 66 20   single line of 
30530 53 51 4c 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  SQL.*/.static in
30540 74 20 72 75 6e 4f 6e 65 53 71 6c 4c 69 6e 65 28  t runOneSqlLine(
30550 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63  ShellState *p, c
30560 68 61 72 20 2a 7a 53 71 6c 2c 20 46 49 4c 45 20  har *zSql, FILE 
30570 2a 69 6e 2c 20 69 6e 74 20 73 74 61 72 74 6c 69  *in, int startli
30580 6e 65 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  ne){.  int rc;. 
30590 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d   char *zErrMsg =
305a0 20 30 3b 0a 0a 20 20 6f 70 65 6e 5f 64 62 28 70   0;..  open_db(p
305b0 2c 20 30 29 3b 0a 20 20 69 66 28 20 53 68 65 6c  , 0);.  if( Shel
305c0 6c 48 61 73 46 6c 61 67 28 70 2c 53 48 46 4c 47  lHasFlag(p,SHFLG
305d0 5f 42 61 63 6b 73 6c 61 73 68 29 20 29 20 72 65  _Backslash) ) re
305e0 73 6f 6c 76 65 5f 62 61 63 6b 73 6c 61 73 68 65  solve_backslashe
305f0 73 28 7a 53 71 6c 29 3b 0a 20 20 42 45 47 49 4e  s(zSql);.  BEGIN
30600 5f 54 49 4d 45 52 3b 0a 20 20 72 63 20 3d 20 73  _TIMER;.  rc = s
30610 68 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c  hell_exec(p->db,
30620 20 7a 53 71 6c 2c 20 73 68 65 6c 6c 5f 63 61 6c   zSql, shell_cal
30630 6c 62 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72 4d  lback, p, &zErrM
30640 73 67 29 3b 0a 20 20 45 4e 44 5f 54 49 4d 45 52  sg);.  END_TIMER
30650 3b 0a 20 20 69 66 28 20 72 63 20 7c 7c 20 7a 45  ;.  if( rc || zE
30660 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 63 68 61  rrMsg ){.    cha
30670 72 20 7a 50 72 65 66 69 78 5b 31 30 30 5d 3b 0a  r zPrefix[100];.
30680 20 20 20 20 69 66 28 20 69 6e 21 3d 30 20 7c 7c      if( in!=0 ||
30690 20 21 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72   !stdin_is_inter
306a0 61 63 74 69 76 65 20 29 7b 0a 20 20 20 20 20 20  active ){.      
306b0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
306c0 28 73 69 7a 65 6f 66 28 7a 50 72 65 66 69 78 29  (sizeof(zPrefix)
306d0 2c 20 7a 50 72 65 66 69 78 2c 0a 20 20 20 20 20  , zPrefix,.     
306e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306f0 20 20 22 45 72 72 6f 72 3a 20 6e 65 61 72 20 6c    "Error: near l
30700 69 6e 65 20 25 64 3a 22 2c 20 73 74 61 72 74 6c  ine %d:", startl
30710 69 6e 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ine);.    }else{
30720 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
30730 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
30740 50 72 65 66 69 78 29 2c 20 7a 50 72 65 66 69 78  Prefix), zPrefix
30750 2c 20 22 45 72 72 6f 72 3a 22 29 3b 0a 20 20 20  , "Error:");.   
30760 20 7d 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d   }.    if( zErrM
30770 73 67 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  sg!=0 ){.      u
30780 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
30790 72 2c 20 22 25 73 20 25 73 5c 6e 22 2c 20 7a 50  r, "%s %s\n", zP
307a0 72 65 66 69 78 2c 20 7a 45 72 72 4d 73 67 29 3b  refix, zErrMsg);
307b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
307c0 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20  ree(zErrMsg);.  
307d0 20 20 20 20 7a 45 72 72 4d 73 67 20 3d 20 30 3b      zErrMsg = 0;
307e0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
307f0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
30800 64 65 72 72 2c 20 22 25 73 20 25 73 5c 6e 22 2c  derr, "%s %s\n",
30810 20 7a 50 72 65 66 69 78 2c 20 73 71 6c 69 74 65   zPrefix, sqlite
30820 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29  3_errmsg(p->db))
30830 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
30840 72 6e 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66  rn 1;.  }else if
30850 28 20 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70  ( ShellHasFlag(p
30860 2c 20 53 48 46 4c 47 5f 43 6f 75 6e 74 43 68 61  , SHFLG_CountCha
30870 6e 67 65 73 29 20 29 7b 0a 20 20 20 20 72 61 77  nges) ){.    raw
30880 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
30890 22 63 68 61 6e 67 65 73 3a 20 25 33 64 20 20 20  "changes: %3d   
308a0 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 3a 20 25  total_changes: %
308b0 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  d\n",.          
308c0 20 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65    sqlite3_change
308d0 73 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65  s(p->db), sqlite
308e0 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
308f0 70 2d 3e 64 62 29 29 3b 0a 20 20 7d 0a 20 20 72  p->db));.  }.  r
30900 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a  eturn 0;.}.../*.
30910 2a 2a 20 52 65 61 64 20 69 6e 70 75 74 20 66 72  ** Read input fr
30920 6f 6d 20 2a 69 6e 20 61 6e 64 20 70 72 6f 63 65  om *in and proce
30930 73 73 20 69 74 2e 20 20 49 66 20 2a 69 6e 3d 3d  ss it.  If *in==
30940 30 20 74 68 65 6e 20 69 6e 70 75 74 0a 2a 2a 20  0 then input.** 
30950 69 73 20 69 6e 74 65 72 61 63 74 69 76 65 20 2d  is interactive -
30960 20 74 68 65 20 75 73 65 72 20 69 73 20 74 79 70   the user is typ
30970 69 6e 67 20 69 74 20 69 74 2e 20 20 4f 74 68 65  ing it it.  Othe
30980 72 77 69 73 65 2c 20 69 6e 70 75 74 0a 2a 2a 20  rwise, input.** 
30990 69 73 20 63 6f 6d 69 6e 67 20 66 72 6f 6d 20 61  is coming from a
309a0 20 66 69 6c 65 20 6f 72 20 64 65 76 69 63 65 2e   file or device.
309b0 20 20 41 20 70 72 6f 6d 70 74 20 69 73 20 69 73    A prompt is is
309c0 73 75 65 64 20 61 6e 64 20 68 69 73 74 6f 72 79  sued and history
309d0 0a 2a 2a 20 69 73 20 73 61 76 65 64 20 6f 6e 6c  .** is saved onl
309e0 79 20 69 66 20 69 6e 70 75 74 20 69 73 20 69 6e  y if input is in
309f0 74 65 72 61 63 74 69 76 65 2e 20 20 41 6e 20 69  teractive.  An i
30a00 6e 74 65 72 72 75 70 74 20 73 69 67 6e 61 6c 20  nterrupt signal 
30a10 77 69 6c 6c 0a 2a 2a 20 63 61 75 73 65 20 74 68  will.** cause th
30a20 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 65 78  is routine to ex
30a30 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20  it immediately, 
30a40 75 6e 6c 65 73 73 20 69 6e 70 75 74 20 69 73 20  unless input is 
30a50 69 6e 74 65 72 61 63 74 69 76 65 2e 0a 2a 2a 0a  interactive..**.
30a60 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
30a70 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 2e 0a  mber of errors..
30a80 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 70 72  */.static int pr
30a90 6f 63 65 73 73 5f 69 6e 70 75 74 28 53 68 65 6c  ocess_input(Shel
30aa0 6c 53 74 61 74 65 20 2a 70 2c 20 46 49 4c 45 20  lState *p, FILE 
30ab0 2a 69 6e 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4c  *in){.  char *zL
30ac0 69 6e 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ine = 0;        
30ad0 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 69 6e    /* A single in
30ae0 70 75 74 20 6c 69 6e 65 20 2a 2f 0a 20 20 63 68  put line */.  ch
30af0 61 72 20 2a 7a 53 71 6c 20 3d 20 30 3b 20 20 20  ar *zSql = 0;   
30b00 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 75 6d          /* Accum
30b10 75 6c 61 74 65 64 20 53 51 4c 20 74 65 78 74 20  ulated SQL text 
30b20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 3b 20  */.  int nLine; 
30b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30b40 2a 20 4c 65 6e 67 74 68 20 6f 66 20 63 75 72 72  * Length of curr
30b50 65 6e 74 20 6c 69 6e 65 20 2a 2f 0a 20 20 69 6e  ent line */.  in
30b60 74 20 6e 53 71 6c 20 3d 20 30 3b 20 20 20 20 20  t nSql = 0;     
30b70 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73          /* Bytes
30b80 20 6f 66 20 7a 53 71 6c 5b 5d 20 75 73 65 64 20   of zSql[] used 
30b90 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 20  */.  int nAlloc 
30ba0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  = 0;           /
30bb0 2a 20 41 6c 6c 6f 63 61 74 65 64 20 7a 53 71 6c  * Allocated zSql
30bc0 5b 5d 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  [] space */.  in
30bd0 74 20 6e 53 71 6c 50 72 69 6f 72 20 3d 20 30 3b  t nSqlPrior = 0;
30be0 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73          /* Bytes
30bf0 20 6f 66 20 7a 53 71 6c 5b 5d 20 75 73 65 64 20   of zSql[] used 
30c00 62 79 20 70 72 69 6f 72 20 6c 69 6e 65 20 2a 2f  by prior line */
30c10 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
30c20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
30c30 45 72 72 6f 72 20 63 6f 64 65 20 2a 2f 0a 20 20  Error code */.  
30c40 69 6e 74 20 65 72 72 43 6e 74 20 3d 20 30 3b 20  int errCnt = 0; 
30c50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
30c60 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
30c70 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 69 6e 65  en */.  int line
30c80 6e 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  no = 0;         
30c90 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6c 69 6e    /* Current lin
30ca0 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 69 6e  e number */.  in
30cb0 74 20 73 74 61 72 74 6c 69 6e 65 20 3d 20 30 3b  t startline = 0;
30cc0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 65 20          /* Line 
30cd0 6e 75 6d 62 65 72 20 66 6f 72 20 73 74 61 72 74  number for start
30ce0 20 6f 66 20 63 75 72 72 65 6e 74 20 69 6e 70 75   of current inpu
30cf0 74 20 2a 2f 0a 0a 20 20 77 68 69 6c 65 28 20 65  t */..  while( e
30d00 72 72 43 6e 74 3d 3d 30 20 7c 7c 20 21 62 61 69  rrCnt==0 || !bai
30d10 6c 5f 6f 6e 5f 65 72 72 6f 72 20 7c 7c 20 28 69  l_on_error || (i
30d20 6e 3d 3d 30 20 26 26 20 73 74 64 69 6e 5f 69 73  n==0 && stdin_is
30d30 5f 69 6e 74 65 72 61 63 74 69 76 65 29 20 29 7b  _interactive) ){
30d40 0a 20 20 20 20 66 66 6c 75 73 68 28 70 2d 3e 6f  .    fflush(p->o
30d50 75 74 29 3b 0a 20 20 20 20 7a 4c 69 6e 65 20 3d  ut);.    zLine =
30d60 20 6f 6e 65 5f 69 6e 70 75 74 5f 6c 69 6e 65 28   one_input_line(
30d70 69 6e 2c 20 7a 4c 69 6e 65 2c 20 6e 53 71 6c 3e  in, zLine, nSql>
30d80 30 29 3b 0a 20 20 20 20 69 66 28 20 7a 4c 69 6e  0);.    if( zLin
30d90 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  e==0 ){.      /*
30da0 20 45 6e 64 20 6f 66 20 69 6e 70 75 74 20 2a 2f   End of input */
30db0 0a 20 20 20 20 20 20 69 66 28 20 69 6e 3d 3d 30  .      if( in==0
30dc0 20 26 26 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74   && stdin_is_int
30dd0 65 72 61 63 74 69 76 65 20 29 20 70 72 69 6e 74  eractive ) print
30de0 66 28 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62  f("\n");.      b
30df0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
30e00 69 66 28 20 73 65 65 6e 49 6e 74 65 72 72 75 70  if( seenInterrup
30e10 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 69  t ){.      if( i
30e20 6e 21 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  n!=0 ) break;.  
30e30 20 20 20 20 73 65 65 6e 49 6e 74 65 72 72 75 70      seenInterrup
30e40 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  t = 0;.    }.   
30e50 20 6c 69 6e 65 6e 6f 2b 2b 3b 0a 20 20 20 20 69   lineno++;.    i
30e60 66 28 20 6e 53 71 6c 3d 3d 30 20 26 26 20 5f 61  f( nSql==0 && _a
30e70 6c 6c 5f 77 68 69 74 65 73 70 61 63 65 28 7a 4c  ll_whitespace(zL
30e80 69 6e 65 29 20 29 7b 0a 20 20 20 20 20 20 69 66  ine) ){.      if
30e90 28 20 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70  ( ShellHasFlag(p
30ea0 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29 20 29 20  , SHFLG_Echo) ) 
30eb0 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 7a  printf("%s\n", z
30ec0 4c 69 6e 65 29 3b 0a 20 20 20 20 20 20 63 6f 6e  Line);.      con
30ed0 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20  tinue;.    }.   
30ee0 20 69 66 28 20 7a 4c 69 6e 65 20 26 26 20 7a 4c   if( zLine && zL
30ef0 69 6e 65 5b 30 5d 3d 3d 27 2e 27 20 26 26 20 6e  ine[0]=='.' && n
30f00 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Sql==0 ){.      
30f10 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c 61 67  if( ShellHasFlag
30f20 28 70 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29 20  (p, SHFLG_Echo) 
30f30 29 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c  ) printf("%s\n",
30f40 20 7a 4c 69 6e 65 29 3b 0a 20 20 20 20 20 20 72   zLine);.      r
30f50 63 20 3d 20 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d  c = do_meta_comm
30f60 61 6e 64 28 7a 4c 69 6e 65 2c 20 70 29 3b 0a 20  and(zLine, p);. 
30f70 20 20 20 20 20 69 66 28 20 72 63 3d 3d 32 20 29       if( rc==2 )
30f80 7b 20 2f 2a 20 65 78 69 74 20 72 65 71 75 65 73  { /* exit reques
30f90 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 62  ted */.        b
30fa0 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  reak;.      }els
30fb0 65 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20  e if( rc ){.    
30fc0 20 20 20 20 65 72 72 43 6e 74 2b 2b 3b 0a 20 20      errCnt++;.  
30fd0 20 20 20 20 7d 0a 20 20 20 20 20 20 63 6f 6e 74      }.      cont
30fe0 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20  inue;.    }.    
30ff0 69 66 28 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d 6d  if( line_is_comm
31000 61 6e 64 5f 74 65 72 6d 69 6e 61 74 6f 72 28 7a  and_terminator(z
31010 4c 69 6e 65 29 20 26 26 20 6c 69 6e 65 5f 69 73  Line) && line_is
31020 5f 63 6f 6d 70 6c 65 74 65 28 7a 53 71 6c 2c 20  _complete(zSql, 
31030 6e 53 71 6c 29 20 29 7b 0a 20 20 20 20 20 20 6d  nSql) ){.      m
31040 65 6d 63 70 79 28 7a 4c 69 6e 65 2c 22 3b 22 2c  emcpy(zLine,";",
31050 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 4c  2);.    }.    nL
31060 69 6e 65 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a  ine = strlen30(z
31070 4c 69 6e 65 29 3b 0a 20 20 20 20 69 66 28 20 6e  Line);.    if( n
31080 53 71 6c 2b 6e 4c 69 6e 65 2b 32 3e 3d 6e 41 6c  Sql+nLine+2>=nAl
31090 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 6e 41 6c  loc ){.      nAl
310a0 6c 6f 63 20 3d 20 6e 53 71 6c 2b 6e 4c 69 6e 65  loc = nSql+nLine
310b0 2b 31 30 30 3b 0a 20 20 20 20 20 20 7a 53 71 6c  +100;.      zSql
310c0 20 3d 20 72 65 61 6c 6c 6f 63 28 7a 53 71 6c 2c   = realloc(zSql,
310d0 20 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20 20 20   nAlloc);.      
310e0 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
310f0 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
31100 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
31110 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c  : out of memory\
31120 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 65 78 69  n");.        exi
31130 74 28 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  t(1);.      }.  
31140 20 20 7d 0a 20 20 20 20 6e 53 71 6c 50 72 69 6f    }.    nSqlPrio
31150 72 20 3d 20 6e 53 71 6c 3b 0a 20 20 20 20 69 66  r = nSql;.    if
31160 28 20 6e 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( nSql==0 ){.   
31170 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20     int i;.      
31180 66 6f 72 28 69 3d 30 3b 20 7a 4c 69 6e 65 5b 69  for(i=0; zLine[i
31190 5d 20 26 26 20 49 73 53 70 61 63 65 28 7a 4c 69  ] && IsSpace(zLi
311a0 6e 65 5b 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20  ne[i]); i++){}. 
311b0 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 6c       assert( nAl
311c0 6c 6f 63 3e 30 20 26 26 20 7a 53 71 6c 21 3d 30  loc>0 && zSql!=0
311d0 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79   );.      memcpy
311e0 28 7a 53 71 6c 2c 20 7a 4c 69 6e 65 2b 69 2c 20  (zSql, zLine+i, 
311f0 6e 4c 69 6e 65 2b 31 2d 69 29 3b 0a 20 20 20 20  nLine+1-i);.    
31200 20 20 73 74 61 72 74 6c 69 6e 65 20 3d 20 6c 69    startline = li
31210 6e 65 6e 6f 3b 0a 20 20 20 20 20 20 6e 53 71 6c  neno;.      nSql
31220 20 3d 20 6e 4c 69 6e 65 2d 69 3b 0a 20 20 20 20   = nLine-i;.    
31230 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53 71  }else{.      zSq
31240 6c 5b 6e 53 71 6c 2b 2b 5d 20 3d 20 27 5c 6e 27  l[nSql++] = '\n'
31250 3b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 7a  ;.      memcpy(z
31260 53 71 6c 2b 6e 53 71 6c 2c 20 7a 4c 69 6e 65 2c  Sql+nSql, zLine,
31270 20 6e 4c 69 6e 65 2b 31 29 3b 0a 20 20 20 20 20   nLine+1);.     
31280 20 6e 53 71 6c 20 2b 3d 20 6e 4c 69 6e 65 3b 0a   nSql += nLine;.
31290 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 53      }.    if( nS
312a0 71 6c 20 26 26 20 6c 69 6e 65 5f 63 6f 6e 74 61  ql && line_conta
312b0 69 6e 73 5f 73 65 6d 69 63 6f 6c 6f 6e 28 26 7a  ins_semicolon(&z
312c0 53 71 6c 5b 6e 53 71 6c 50 72 69 6f 72 5d 2c 20  Sql[nSqlPrior], 
312d0 6e 53 71 6c 2d 6e 53 71 6c 50 72 69 6f 72 29 0a  nSql-nSqlPrior).
312e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312f0 26 26 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c  && sqlite3_compl
31300 65 74 65 28 7a 53 71 6c 29 20 29 7b 0a 20 20 20  ete(zSql) ){.   
31310 20 20 20 65 72 72 43 6e 74 20 2b 3d 20 72 75 6e     errCnt += run
31320 4f 6e 65 53 71 6c 4c 69 6e 65 28 70 2c 20 7a 53  OneSqlLine(p, zS
31330 71 6c 2c 20 69 6e 2c 20 73 74 61 72 74 6c 69 6e  ql, in, startlin
31340 65 29 3b 0a 20 20 20 20 20 20 6e 53 71 6c 20 3d  e);.      nSql =
31350 20 30 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   0;.      if( p-
31360 3e 6f 75 74 43 6f 75 6e 74 20 29 7b 0a 20 20 20  >outCount ){.   
31370 20 20 20 20 20 6f 75 74 70 75 74 5f 72 65 73 65       output_rese
31380 74 28 70 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  t(p);.        p-
31390 3e 6f 75 74 43 6f 75 6e 74 20 3d 20 30 3b 0a 20  >outCount = 0;. 
313a0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
313b0 20 69 66 28 20 6e 53 71 6c 20 26 26 20 5f 61 6c   if( nSql && _al
313c0 6c 5f 77 68 69 74 65 73 70 61 63 65 28 7a 53 71  l_whitespace(zSq
313d0 6c 29 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  l) ){.      if( 
313e0 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20  ShellHasFlag(p, 
313f0 53 48 46 4c 47 5f 45 63 68 6f 29 20 29 20 70 72  SHFLG_Echo) ) pr
31400 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 7a 53 71  intf("%s\n", zSq
31410 6c 29 3b 0a 20 20 20 20 20 20 6e 53 71 6c 20 3d  l);.      nSql =
31420 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
31430 69 66 28 20 6e 53 71 6c 20 26 26 20 21 5f 61 6c  if( nSql && !_al
31440 6c 5f 77 68 69 74 65 73 70 61 63 65 28 7a 53 71  l_whitespace(zSq
31450 6c 29 20 29 7b 0a 20 20 20 20 72 75 6e 4f 6e 65  l) ){.    runOne
31460 53 71 6c 4c 69 6e 65 28 70 2c 20 7a 53 71 6c 2c  SqlLine(p, zSql,
31470 20 69 6e 2c 20 73 74 61 72 74 6c 69 6e 65 29 3b   in, startline);
31480 0a 20 20 7d 0a 20 20 66 72 65 65 28 7a 53 71 6c  .  }.  free(zSql
31490 29 3b 0a 20 20 66 72 65 65 28 7a 4c 69 6e 65 29  );.  free(zLine)
314a0 3b 0a 20 20 72 65 74 75 72 6e 20 65 72 72 43 6e  ;.  return errCn
314b0 74 3e 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  t>0;.}../*.** Re
314c0 74 75 72 6e 20 61 20 70 61 74 68 6e 61 6d 65 20  turn a pathname 
314d0 77 68 69 63 68 20 69 73 20 74 68 65 20 75 73 65  which is the use
314e0 72 27 73 20 68 6f 6d 65 20 64 69 72 65 63 74 6f  r's home directo
314f0 72 79 2e 20 20 41 0a 2a 2a 20 30 20 72 65 74 75  ry.  A.** 0 retu
31500 72 6e 20 69 6e 64 69 63 61 74 65 73 20 61 6e 20  rn indicates an 
31510 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69  error of some ki
31520 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68  nd..*/.static ch
31530 61 72 20 2a 66 69 6e 64 5f 68 6f 6d 65 5f 64 69  ar *find_home_di
31540 72 28 69 6e 74 20 63 6c 65 61 72 46 6c 61 67 29  r(int clearFlag)
31550 7b 0a 20 20 73 74 61 74 69 63 20 63 68 61 72 20  {.  static char 
31560 2a 68 6f 6d 65 5f 64 69 72 20 3d 20 4e 55 4c 4c  *home_dir = NULL
31570 3b 0a 20 20 69 66 28 20 63 6c 65 61 72 46 6c 61  ;.  if( clearFla
31580 67 20 29 7b 0a 20 20 20 20 66 72 65 65 28 68 6f  g ){.    free(ho
31590 6d 65 5f 64 69 72 29 3b 0a 20 20 20 20 68 6f 6d  me_dir);.    hom
315a0 65 5f 64 69 72 20 3d 20 30 3b 0a 20 20 20 20 72  e_dir = 0;.    r
315b0 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69  eturn 0;.  }.  i
315c0 66 28 20 68 6f 6d 65 5f 64 69 72 20 29 20 72 65  f( home_dir ) re
315d0 74 75 72 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a 0a  turn home_dir;..
315e0 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49  #if !defined(_WI
315f0 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65 64  N32) && !defined
31600 28 57 49 4e 33 32 29 20 26 26 20 21 64 65 66 69  (WIN32) && !defi
31610 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 20  ned(_WIN32_WCE) 
31620 5c 0a 20 20 20 20 20 26 26 20 21 64 65 66 69 6e  \.     && !defin
31630 65 64 28 5f 5f 52 54 50 5f 5f 29 20 26 26 20 21  ed(__RTP__) && !
31640 64 65 66 69 6e 65 64 28 5f 57 52 53 5f 4b 45 52  defined(_WRS_KER
31650 4e 45 4c 29 0a 20 20 7b 0a 20 20 20 20 73 74 72  NEL).  {.    str
31660 75 63 74 20 70 61 73 73 77 64 20 2a 70 77 65 6e  uct passwd *pwen
31670 74 3b 0a 20 20 20 20 75 69 64 5f 74 20 75 69 64  t;.    uid_t uid
31680 20 3d 20 67 65 74 75 69 64 28 29 3b 0a 20 20 20   = getuid();.   
31690 20 69 66 28 20 28 70 77 65 6e 74 3d 67 65 74 70   if( (pwent=getp
316a0 77 75 69 64 28 75 69 64 29 29 20 21 3d 20 4e 55  wuid(uid)) != NU
316b0 4c 4c 29 20 7b 0a 20 20 20 20 20 20 68 6f 6d 65  LL) {.      home
316c0 5f 64 69 72 20 3d 20 70 77 65 6e 74 2d 3e 70 77  _dir = pwent->pw
316d0 5f 64 69 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _dir;.    }.  }.
316e0 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
316f0 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a  ned(_WIN32_WCE).
31700 20 20 2f 2a 20 57 69 6e 64 6f 77 73 20 43 45 20    /* Windows CE 
31710 28 61 72 6d 2d 77 69 6e 63 65 2d 6d 69 6e 67 77  (arm-wince-mingw
31720 33 32 63 65 2d 67 63 63 29 20 64 6f 65 73 20 6e  32ce-gcc) does n
31730 6f 74 20 70 72 6f 76 69 64 65 20 67 65 74 65 6e  ot provide geten
31740 76 28 29 0a 20 20 20 2a 2f 0a 20 20 68 6f 6d 65  v().   */.  home
31750 5f 64 69 72 20 3d 20 22 2f 22 3b 0a 23 65 6c 73  _dir = "/";.#els
31760 65 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  e..#if defined(_
31770 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65  WIN32) || define
31780 64 28 57 49 4e 33 32 29 0a 20 20 69 66 20 28 21  d(WIN32).  if (!
31790 68 6f 6d 65 5f 64 69 72 29 20 7b 0a 20 20 20 20  home_dir) {.    
317a0 68 6f 6d 65 5f 64 69 72 20 3d 20 67 65 74 65 6e  home_dir = geten
317b0 76 28 22 55 53 45 52 50 52 4f 46 49 4c 45 22 29  v("USERPROFILE")
317c0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
317d0 69 66 20 28 21 68 6f 6d 65 5f 64 69 72 29 20 7b  if (!home_dir) {
317e0 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20  .    home_dir = 
317f0 67 65 74 65 6e 76 28 22 48 4f 4d 45 22 29 3b 0a  getenv("HOME");.
31800 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65 64    }..#if defined
31810 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69  (_WIN32) || defi
31820 6e 65 64 28 57 49 4e 33 32 29 0a 20 20 69 66 20  ned(WIN32).  if 
31830 28 21 68 6f 6d 65 5f 64 69 72 29 20 7b 0a 20 20  (!home_dir) {.  
31840 20 20 63 68 61 72 20 2a 7a 44 72 69 76 65 2c 20    char *zDrive, 
31850 2a 7a 50 61 74 68 3b 0a 20 20 20 20 69 6e 74 20  *zPath;.    int 
31860 6e 3b 0a 20 20 20 20 7a 44 72 69 76 65 20 3d 20  n;.    zDrive = 
31870 67 65 74 65 6e 76 28 22 48 4f 4d 45 44 52 49 56  getenv("HOMEDRIV
31880 45 22 29 3b 0a 20 20 20 20 7a 50 61 74 68 20 3d  E");.    zPath =
31890 20 67 65 74 65 6e 76 28 22 48 4f 4d 45 50 41 54   getenv("HOMEPAT
318a0 48 22 29 3b 0a 20 20 20 20 69 66 28 20 7a 44 72  H");.    if( zDr
318b0 69 76 65 20 26 26 20 7a 50 61 74 68 20 29 7b 0a  ive && zPath ){.
318c0 20 20 20 20 20 20 6e 20 3d 20 73 74 72 6c 65 6e        n = strlen
318d0 33 30 28 7a 44 72 69 76 65 29 20 2b 20 73 74 72  30(zDrive) + str
318e0 6c 65 6e 33 30 28 7a 50 61 74 68 29 20 2b 20 31  len30(zPath) + 1
318f0 3b 0a 20 20 20 20 20 20 68 6f 6d 65 5f 64 69 72  ;.      home_dir
31900 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 20 29 3b 0a   = malloc( n );.
31910 20 20 20 20 20 20 69 66 28 20 68 6f 6d 65 5f 64        if( home_d
31920 69 72 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  ir==0 ) return 0
31930 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
31940 73 6e 70 72 69 6e 74 66 28 6e 2c 20 68 6f 6d 65  snprintf(n, home
31950 5f 64 69 72 2c 20 22 25 73 25 73 22 2c 20 7a 44  _dir, "%s%s", zD
31960 72 69 76 65 2c 20 7a 50 61 74 68 29 3b 0a 20 20  rive, zPath);.  
31970 20 20 20 20 72 65 74 75 72 6e 20 68 6f 6d 65 5f      return home_
31980 64 69 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 68  dir;.    }.    h
31990 6f 6d 65 5f 64 69 72 20 3d 20 22 63 3a 5c 5c 22  ome_dir = "c:\\"
319a0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 65  ;.  }.#endif..#e
319b0 6e 64 69 66 20 2f 2a 20 21 5f 57 49 4e 33 32 5f  ndif /* !_WIN32_
319c0 57 43 45 20 2a 2f 0a 0a 20 20 69 66 28 20 68 6f  WCE */..  if( ho
319d0 6d 65 5f 64 69 72 20 29 7b 0a 20 20 20 20 69 6e  me_dir ){.    in
319e0 74 20 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 68  t n = strlen30(h
319f0 6f 6d 65 5f 64 69 72 29 20 2b 20 31 3b 0a 20 20  ome_dir) + 1;.  
31a00 20 20 63 68 61 72 20 2a 7a 20 3d 20 6d 61 6c 6c    char *z = mall
31a10 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20 69 66 28  oc( n );.    if(
31a20 20 7a 20 29 20 6d 65 6d 63 70 79 28 7a 2c 20 68   z ) memcpy(z, h
31a30 6f 6d 65 5f 64 69 72 2c 20 6e 29 3b 0a 20 20 20  ome_dir, n);.   
31a40 20 68 6f 6d 65 5f 64 69 72 20 3d 20 7a 3b 0a 20   home_dir = z;. 
31a50 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 68 6f 6d   }..  return hom
31a60 65 5f 64 69 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  e_dir;.}../*.** 
31a70 52 65 61 64 20 69 6e 70 75 74 20 66 72 6f 6d 20  Read input from 
31a80 74 68 65 20 66 69 6c 65 20 67 69 76 65 6e 20 62  the file given b
31a90 79 20 73 71 6c 69 74 65 72 63 5f 6f 76 65 72 72  y sqliterc_overr
31aa0 69 64 65 2e 20 20 4f 72 20 69 66 20 74 68 61 74  ide.  Or if that
31ab0 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69 73  .** parameter is
31ac0 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 69 6e 70 75   NULL, take inpu
31ad0 74 20 66 72 6f 6d 20 7e 2f 2e 73 71 6c 69 74 65  t from ~/.sqlite
31ae0 72 63 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73  rc.**.** Returns
31af0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
31b00 72 72 6f 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63  rrors..*/.static
31b10 20 76 6f 69 64 20 70 72 6f 63 65 73 73 5f 73 71   void process_sq
31b20 6c 69 74 65 72 63 28 0a 20 20 53 68 65 6c 6c 53  literc(.  ShellS
31b30 74 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20 20  tate *p,        
31b40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
31b50 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
31b60 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
31b70 2a 73 71 6c 69 74 65 72 63 5f 6f 76 65 72 72 69  *sqliterc_overri
31b80 64 65 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  de   /* Name of 
31b90 63 6f 6e 66 69 67 20 66 69 6c 65 2e 20 4e 55 4c  config file. NUL
31ba0 4c 20 74 6f 20 75 73 65 20 64 65 66 61 75 6c 74  L to use default
31bb0 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 68   */.){.  char *h
31bc0 6f 6d 65 5f 64 69 72 20 3d 20 4e 55 4c 4c 3b 0a  ome_dir = NULL;.
31bd0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71    const char *sq
31be0 6c 69 74 65 72 63 20 3d 20 73 71 6c 69 74 65 72  literc = sqliter
31bf0 63 5f 6f 76 65 72 72 69 64 65 3b 0a 20 20 63 68  c_override;.  ch
31c00 61 72 20 2a 7a 42 75 66 20 3d 20 30 3b 0a 20 20  ar *zBuf = 0;.  
31c10 46 49 4c 45 20 2a 69 6e 20 3d 20 4e 55 4c 4c 3b  FILE *in = NULL;
31c20 0a 0a 20 20 69 66 20 28 73 71 6c 69 74 65 72 63  ..  if (sqliterc
31c30 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20   == NULL) {.    
31c40 68 6f 6d 65 5f 64 69 72 20 3d 20 66 69 6e 64 5f  home_dir = find_
31c50 68 6f 6d 65 5f 64 69 72 28 30 29 3b 0a 20 20 20  home_dir(0);.   
31c60 20 69 66 28 20 68 6f 6d 65 5f 64 69 72 3d 3d 30   if( home_dir==0
31c70 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
31c80 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 2d 2d  intf(stderr, "--
31c90 20 77 61 72 6e 69 6e 67 3a 20 63 61 6e 6e 6f 74   warning: cannot
31ca0 20 66 69 6e 64 20 68 6f 6d 65 20 64 69 72 65 63   find home direc
31cb0 74 6f 72 79 3b 22 0a 20 20 20 20 20 20 20 20 20  tory;".         
31cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 63               " c
31cd0 61 6e 6e 6f 74 20 72 65 61 64 20 7e 2f 2e 73 71  annot read ~/.sq
31ce0 6c 69 74 65 72 63 5c 6e 22 29 3b 0a 20 20 20 20  literc\n");.    
31cf0 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a    return;.    }.
31d00 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74      sqlite3_init
31d10 69 61 6c 69 7a 65 28 29 3b 0a 20 20 20 20 7a 42  ialize();.    zB
31d20 75 66 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  uf = sqlite3_mpr
31d30 69 6e 74 66 28 22 25 73 2f 2e 73 71 6c 69 74 65  intf("%s/.sqlite
31d40 72 63 22 2c 68 6f 6d 65 5f 64 69 72 29 3b 0a 20  rc",home_dir);. 
31d50 20 20 20 73 71 6c 69 74 65 72 63 20 3d 20 7a 42     sqliterc = zB
31d60 75 66 3b 0a 20 20 7d 0a 20 20 69 6e 20 3d 20 66  uf;.  }.  in = f
31d70 6f 70 65 6e 28 73 71 6c 69 74 65 72 63 2c 22 72  open(sqliterc,"r
31d80 62 22 29 3b 0a 20 20 69 66 28 20 69 6e 20 29 7b  b");.  if( in ){
31d90 0a 20 20 20 20 69 66 28 20 73 74 64 69 6e 5f 69  .    if( stdin_i
31da0 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 29 7b  s_interactive ){
31db0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
31dc0 74 66 28 73 74 64 65 72 72 2c 22 2d 2d 20 4c 6f  tf(stderr,"-- Lo
31dd0 61 64 69 6e 67 20 72 65 73 6f 75 72 63 65 73 20  ading resources 
31de0 66 72 6f 6d 20 25 73 5c 6e 22 2c 73 71 6c 69 74  from %s\n",sqlit
31df0 65 72 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  erc);.    }.    
31e00 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28 70 2c  process_input(p,
31e10 69 6e 29 3b 0a 20 20 20 20 66 63 6c 6f 73 65 28  in);.    fclose(
31e20 69 6e 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  in);.  }.  sqlit
31e30 65 33 5f 66 72 65 65 28 7a 42 75 66 29 3b 0a 7d  e3_free(zBuf);.}
31e40 0a 0a 2f 2a 0a 2a 2a 20 53 68 6f 77 20 61 76 61  ../*.** Show ava
31e50 69 6c 61 62 6c 65 20 63 6f 6d 6d 61 6e 64 20 6c  ilable command l
31e60 69 6e 65 20 6f 70 74 69 6f 6e 73 0a 2a 2f 0a 73  ine options.*/.s
31e70 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
31e80 20 7a 4f 70 74 69 6f 6e 73 5b 5d 20 3d 0a 20 20   zOptions[] =.  
31e90 22 20 20 20 2d 61 73 63 69 69 20 20 20 20 20 20  "   -ascii      
31ea0 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75 74           set out
31eb0 70 75 74 20 6d 6f 64 65 20 74 6f 20 27 61 73 63  put mode to 'asc
31ec0 69 69 27 5c 6e 22 0a 20 20 22 20 20 20 2d 62 61  ii'\n".  "   -ba
31ed0 69 6c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  il              
31ee0 20 20 73 74 6f 70 20 61 66 74 65 72 20 68 69 74    stop after hit
31ef0 74 69 6e 67 20 61 6e 20 65 72 72 6f 72 5c 6e 22  ting an error\n"
31f00 0a 20 20 22 20 20 20 2d 62 61 74 63 68 20 20 20  .  "   -batch   
31f10 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 63              forc
31f20 65 20 62 61 74 63 68 20 49 2f 4f 5c 6e 22 0a 20  e batch I/O\n". 
31f30 20 22 20 20 20 2d 63 6f 6c 75 6d 6e 20 20 20 20   "   -column    
31f40 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75            set ou
31f50 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27 63 6f  tput mode to 'co
31f60 6c 75 6d 6e 27 5c 6e 22 0a 20 20 22 20 20 20 2d  lumn'\n".  "   -
31f70 63 6d 64 20 43 4f 4d 4d 41 4e 44 20 20 20 20 20  cmd COMMAND     
31f80 20 20 20 20 72 75 6e 20 5c 22 43 4f 4d 4d 41 4e      run \"COMMAN
31f90 44 5c 22 20 62 65 66 6f 72 65 20 72 65 61 64 69  D\" before readi
31fa0 6e 67 20 73 74 64 69 6e 5c 6e 22 0a 20 20 22 20  ng stdin\n".  " 
31fb0 20 20 2d 63 73 76 20 20 20 20 20 20 20 20 20 20    -csv          
31fc0 20 20 20 20 20 20 20 73 65 74 20 6f 75 74 70 75         set outpu
31fd0 74 20 6d 6f 64 65 20 74 6f 20 27 63 73 76 27 5c  t mode to 'csv'\
31fe0 6e 22 0a 20 20 22 20 20 20 2d 65 63 68 6f 20 20  n".  "   -echo  
31ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
32000 69 6e 74 20 63 6f 6d 6d 61 6e 64 73 20 62 65 66  int commands bef
32010 6f 72 65 20 65 78 65 63 75 74 69 6f 6e 5c 6e 22  ore execution\n"
32020 0a 20 20 22 20 20 20 2d 69 6e 69 74 20 46 49 4c  .  "   -init FIL
32030 45 4e 41 4d 45 20 20 20 20 20 20 20 72 65 61 64  ENAME       read
32040 2f 70 72 6f 63 65 73 73 20 6e 61 6d 65 64 20 66  /process named f
32050 69 6c 65 5c 6e 22 0a 20 20 22 20 20 20 2d 5b 6e  ile\n".  "   -[n
32060 6f 5d 68 65 61 64 65 72 20 20 20 20 20 20 20 20  o]header        
32070 20 20 74 75 72 6e 20 68 65 61 64 65 72 73 20 6f    turn headers o
32080 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 23 69 66 20  n or off\n".#if 
32090 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
320a0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 29 20 7c  NABLE_MEMSYS3) |
320b0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
320c0 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 29  _ENABLE_MEMSYS5)
320d0 0a 20 20 22 20 20 20 2d 68 65 61 70 20 53 49 5a  .  "   -heap SIZ
320e0 45 20 20 20 20 20 20 20 20 20 20 20 53 69 7a 65  E           Size
320f0 20 6f 66 20 68 65 61 70 20 66 6f 72 20 6d 65 6d   of heap for mem
32100 73 79 73 33 20 6f 72 20 6d 65 6d 73 79 73 35 5c  sys3 or memsys5\
32110 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 20 20 20  n".#endif.  "   
32120 2d 68 65 6c 70 20 20 20 20 20 20 20 20 20 20 20  -help           
32130 20 20 20 20 20 73 68 6f 77 20 74 68 69 73 20 6d       show this m
32140 65 73 73 61 67 65 5c 6e 22 0a 20 20 22 20 20 20  essage\n".  "   
32150 2d 68 74 6d 6c 20 20 20 20 20 20 20 20 20 20 20  -html           
32160 20 20 20 20 20 73 65 74 20 6f 75 74 70 75 74 20       set output 
32170 6d 6f 64 65 20 74 6f 20 48 54 4d 4c 5c 6e 22 0a  mode to HTML\n".
32180 20 20 22 20 20 20 2d 69 6e 74 65 72 61 63 74 69    "   -interacti
32190 76 65 20 20 20 20 20 20 20 20 20 66 6f 72 63 65  ve         force
321a0 20 69 6e 74 65 72 61 63 74 69 76 65 20 49 2f 4f   interactive I/O
321b0 5c 6e 22 0a 20 20 22 20 20 20 2d 6c 69 6e 65 20  \n".  "   -line 
321c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
321d0 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74  et output mode t
321e0 6f 20 27 6c 69 6e 65 27 5c 6e 22 0a 20 20 22 20  o 'line'\n".  " 
321f0 20 20 2d 6c 69 73 74 20 20 20 20 20 20 20 20 20    -list         
32200 20 20 20 20 20 20 20 73 65 74 20 6f 75 74 70 75         set outpu
32210 74 20 6d 6f 64 65 20 74 6f 20 27 6c 69 73 74 27  t mode to 'list'
32220 5c 6e 22 0a 20 20 22 20 20 20 2d 6c 6f 6f 6b 61  \n".  "   -looka
32230 73 69 64 65 20 53 49 5a 45 20 4e 20 20 20 20 75  side SIZE N    u
32240 73 65 20 4e 20 65 6e 74 72 69 65 73 20 6f 66 20  se N entries of 
32250 53 5a 20 62 79 74 65 73 20 66 6f 72 20 6c 6f 6f  SZ bytes for loo
32260 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 5c 6e 22  kaside memory\n"
32270 0a 20 20 22 20 20 20 2d 6d 6d 61 70 20 4e 20 20  .  "   -mmap N  
32280 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
32290 75 6c 74 20 6d 6d 61 70 20 73 69 7a 65 20 73 65  ult mmap size se
322a0 74 20 74 6f 20 4e 5c 6e 22 0a 23 69 66 64 65 66  t to N\n".#ifdef
322b0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
322c0 55 4c 54 49 50 4c 45 58 0a 20 20 22 20 20 20 2d  ULTIPLEX.  "   -
322d0 6d 75 6c 74 69 70 6c 65 78 20 20 20 20 20 20 20  multiplex       
322e0 20 20 20 20 65 6e 61 62 6c 65 20 74 68 65 20 6d      enable the m
322f0 75 6c 74 69 70 6c 65 78 6f 72 20 56 46 53 5c 6e  ultiplexor VFS\n
32300 22 0a 23 65 6e 64 69 66 0a 20 20 22 20 20 20 2d  ".#endif.  "   -
32310 6e 65 77 6c 69 6e 65 20 53 45 50 20 20 20 20 20  newline SEP     
32320 20 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 72      set output r
32330 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20 44 65  ow separator. De
32340 66 61 75 6c 74 3a 20 27 5c 5c 6e 27 5c 6e 22 0a  fault: '\\n'\n".
32350 20 20 22 20 20 20 2d 6e 75 6c 6c 76 61 6c 75 65    "   -nullvalue
32360 20 54 45 58 54 20 20 20 20 20 20 73 65 74 20 74   TEXT      set t
32370 65 78 74 20 73 74 72 69 6e 67 20 66 6f 72 20 4e  ext string for N
32380 55 4c 4c 20 76 61 6c 75 65 73 2e 20 44 65 66 61  ULL values. Defa
32390 75 6c 74 20 27 27 5c 6e 22 0a 20 20 22 20 20 20  ult ''\n".  "   
323a0 2d 70 61 67 65 63 61 63 68 65 20 53 49 5a 45 20  -pagecache SIZE 
323b0 4e 20 20 20 20 75 73 65 20 4e 20 73 6c 6f 74 73  N    use N slots
323c0 20 6f 66 20 53 5a 20 62 79 74 65 73 20 65 61 63   of SZ bytes eac
323d0 68 20 66 6f 72 20 70 61 67 65 20 63 61 63 68 65  h for page cache
323e0 20 6d 65 6d 6f 72 79 5c 6e 22 0a 20 20 22 20 20   memory\n".  "  
323f0 20 2d 71 75 6f 74 65 20 20 20 20 20 20 20 20 20   -quote         
32400 20 20 20 20 20 20 73 65 74 20 6f 75 74 70 75 74        set output
32410 20 6d 6f 64 65 20 74 6f 20 27 71 75 6f 74 65 27   mode to 'quote'
32420 5c 6e 22 0a 20 20 22 20 20 20 2d 73 63 72 61 74  \n".  "   -scrat
32430 63 68 20 53 49 5a 45 20 4e 20 20 20 20 20 20 75  ch SIZE N      u
32440 73 65 20 4e 20 73 6c 6f 74 73 20 6f 66 20 53 5a  se N slots of SZ
32450 20 62 79 74 65 73 20 65 61 63 68 20 66 6f 72 20   bytes each for 
32460 73 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 5c 6e  scratch memory\n
32470 22 0a 20 20 22 20 20 20 2d 73 65 70 61 72 61 74  ".  "   -separat
32480 6f 72 20 53 45 50 20 20 20 20 20 20 20 73 65 74  or SEP       set
32490 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 20 73   output column s
324a0 65 70 61 72 61 74 6f 72 2e 20 44 65 66 61 75 6c  eparator. Defaul
324b0 74 3a 20 27 7c 27 5c 6e 22 0a 20 20 22 20 20 20  t: '|'\n".  "   
324c0 2d 73 74 61 74 73 20 20 20 20 20 20 20 20 20 20  -stats          
324d0 20 20 20 20 20 70 72 69 6e 74 20 6d 65 6d 6f 72       print memor
324e0 79 20 73 74 61 74 73 20 62 65 66 6f 72 65 20 65  y stats before e
324f0 61 63 68 20 66 69 6e 61 6c 69 7a 65 5c 6e 22 0a  ach finalize\n".
32500 20 20 22 20 20 20 2d 76 65 72 73 69 6f 6e 20 20    "   -version  
32510 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 20             show 
32520 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 5c 6e  SQLite version\n
32530 22 0a 20 20 22 20 20 20 2d 76 66 73 20 4e 41 4d  ".  "   -vfs NAM
32540 45 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65  E            use
32550 20 4e 41 4d 45 20 61 73 20 74 68 65 20 64 65 66   NAME as the def
32560 61 75 6c 74 20 56 46 53 5c 6e 22 0a 23 69 66 64  ault VFS\n".#ifd
32570 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
32580 5f 56 46 53 54 52 41 43 45 0a 20 20 22 20 20 20  _VFSTRACE.  "   
32590 2d 76 66 73 74 72 61 63 65 20 20 20 20 20 20 20  -vfstrace       
325a0 20 20 20 20 20 65 6e 61 62 6c 65 20 74 72 61 63       enable trac
325b0 69 6e 67 20 6f 66 20 61 6c 6c 20 56 46 53 20 63  ing of all VFS c
325c0 61 6c 6c 73 5c 6e 22 0a 23 65 6e 64 69 66 0a 3b  alls\n".#endif.;
325d0 0a 73 74 61 74 69 63 20 76 6f 69 64 20 75 73 61  .static void usa
325e0 67 65 28 69 6e 74 20 73 68 6f 77 44 65 74 61 69  ge(int showDetai
325f0 6c 29 7b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74  l){.  utf8_print
32600 66 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20 20  f(stderr,.      
32610 22 55 73 61 67 65 3a 20 25 73 20 5b 4f 50 54 49  "Usage: %s [OPTI
32620 4f 4e 53 5d 20 46 49 4c 45 4e 41 4d 45 20 5b 53  ONS] FILENAME [S
32630 51 4c 5d 5c 6e 22 0a 20 20 20 20 20 20 22 46 49  QL]\n".      "FI
32640 4c 45 4e 41 4d 45 20 69 73 20 74 68 65 20 6e 61  LENAME is the na
32650 6d 65 20 6f 66 20 61 6e 20 53 51 4c 69 74 65 20  me of an SQLite 
32660 64 61 74 61 62 61 73 65 2e 20 41 20 6e 65 77 20  database. A new 
32670 64 61 74 61 62 61 73 65 20 69 73 20 63 72 65 61  database is crea
32680 74 65 64 5c 6e 22 0a 20 20 20 20 20 20 22 69 66  ted\n".      "if
32690 20 74 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e   the file does n
326a0 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 65 78  ot previously ex
326b0 69 73 74 2e 5c 6e 22 2c 20 41 72 67 76 30 29 3b  ist.\n", Argv0);
326c0 0a 20 20 69 66 28 20 73 68 6f 77 44 65 74 61 69  .  if( showDetai
326d0 6c 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  l ){.    utf8_pr
326e0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 4f 50  intf(stderr, "OP
326f0 54 49 4f 4e 53 20 69 6e 63 6c 75 64 65 3a 5c 6e  TIONS include:\n
32700 25 73 22 2c 20 7a 4f 70 74 69 6f 6e 73 29 3b 0a  %s", zOptions);.
32710 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 61 77    }else{.    raw
32720 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
32730 22 55 73 65 20 74 68 65 20 2d 68 65 6c 70 20 6f  "Use the -help o
32740 70 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69  ption for additi
32750 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
32760 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 65 78 69 74  \n");.  }.  exit
32770 28 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e  (1);.}../*.** In
32780 69 74 69 61 6c 69 7a 65 20 74 68 65 20 73 74 61  itialize the sta
32790 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  te information i
327a0 6e 20 64 61 74 61 0a 2a 2f 0a 73 74 61 74 69 63  n data.*/.static
327b0 20 76 6f 69 64 20 6d 61 69 6e 5f 69 6e 69 74 28   void main_init(
327c0 53 68 65 6c 6c 53 74 61 74 65 20 2a 64 61 74 61  ShellState *data
327d0 29 20 7b 0a 20 20 6d 65 6d 73 65 74 28 64 61 74  ) {.  memset(dat
327e0 61 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 64 61  a, 0, sizeof(*da
327f0 74 61 29 29 3b 0a 20 20 64 61 74 61 2d 3e 6e 6f  ta));.  data->no
32800 72 6d 61 6c 4d 6f 64 65 20 3d 20 64 61 74 61 2d  rmalMode = data-
32810 3e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2d 3e 6d  >cMode = data->m
32820 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b  ode = MODE_List;
32830 0a 20 20 64 61 74 61 2d 3e 61 75 74 6f 45 78 70  .  data->autoExp
32840 6c 61 69 6e 20 3d 20 31 3b 0a 20 20 6d 65 6d 63  lain = 1;.  memc
32850 70 79 28 64 61 74 61 2d 3e 63 6f 6c 53 65 70 61  py(data->colSepa
32860 72 61 74 6f 72 2c 53 45 50 5f 43 6f 6c 75 6d 6e  rator,SEP_Column
32870 2c 20 32 29 3b 0a 20 20 6d 65 6d 63 70 79 28 64  , 2);.  memcpy(d
32880 61 74 61 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  ata->rowSeparato
32890 72 2c 53 45 50 5f 52 6f 77 2c 20 32 29 3b 0a 20  r,SEP_Row, 2);. 
328a0 20 64 61 74 61 2d 3e 73 68 6f 77 48 65 61 64 65   data->showHeade
328b0 72 20 3d 20 30 3b 0a 20 20 64 61 74 61 2d 3e 73  r = 0;.  data->s
328c0 68 65 6c 6c 46 6c 67 73 20 3d 20 53 48 46 4c 47  hellFlgs = SHFLG
328d0 5f 4c 6f 6f 6b 61 73 69 64 65 3b 0a 20 20 73 71  _Lookaside;.  sq
328e0 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c  lite3_config(SQL
328f0 49 54 45 5f 43 4f 4e 46 49 47 5f 55 52 49 2c 20  ITE_CONFIG_URI, 
32900 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  1);.  sqlite3_co
32910 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46  nfig(SQLITE_CONF
32920 49 47 5f 4c 4f 47 2c 20 73 68 65 6c 6c 4c 6f 67  IG_LOG, shellLog
32930 2c 20 64 61 74 61 29 3b 0a 20 20 73 71 6c 69 74  , data);.  sqlit
32940 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45  e3_config(SQLITE
32950 5f 43 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52  _CONFIG_MULTITHR
32960 45 41 44 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  EAD);.  sqlite3_
32970 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
32980 6d 61 69 6e 50 72 6f 6d 70 74 29 2c 20 6d 61 69  mainPrompt), mai
32990 6e 50 72 6f 6d 70 74 2c 22 73 71 6c 69 74 65 3e  nPrompt,"sqlite>
329a0 20 22 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73   ");.  sqlite3_s
329b0 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 63  nprintf(sizeof(c
329c0 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74 29 2c 20  ontinuePrompt), 
329d0 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74 2c 22  continuePrompt,"
329e0 20 20 20 2e 2e 2e 3e 20 22 29 3b 0a 7d 0a 0a 2f     ...> ");.}../
329f0 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 65 78 74  *.** Output text
32a00 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20   to the console 
32a10 69 6e 20 61 20 66 6f 6e 74 20 74 68 61 74 20 61  in a font that a
32a20 74 74 72 61 63 74 73 20 65 78 74 72 61 20 61 74  ttracts extra at
32a30 74 65 6e 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64  tention..*/.#ifd
32a40 65 66 20 5f 57 49 4e 33 32 0a 73 74 61 74 69 63  ef _WIN32.static
32a50 20 76 6f 69 64 20 70 72 69 6e 74 42 6f 6c 64 28   void printBold(
32a60 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 65 78  const char *zTex
32a70 74 29 7b 0a 20 20 48 41 4e 44 4c 45 20 6f 75 74  t){.  HANDLE out
32a80 20 3d 20 47 65 74 53 74 64 48 61 6e 64 6c 65 28   = GetStdHandle(
32a90 53 54 44 5f 4f 55 54 50 55 54 5f 48 41 4e 44 4c  STD_OUTPUT_HANDL
32aa0 45 29 3b 0a 20 20 43 4f 4e 53 4f 4c 45 5f 53 43  E);.  CONSOLE_SC
32ab0 52 45 45 4e 5f 42 55 46 46 45 52 5f 49 4e 46 4f  REEN_BUFFER_INFO
32ac0 20 64 65 66 61 75 6c 74 53 63 72 65 65 6e 49 6e   defaultScreenIn
32ad0 66 6f 3b 0a 20 20 47 65 74 43 6f 6e 73 6f 6c 65  fo;.  GetConsole
32ae0 53 63 72 65 65 6e 42 75 66 66 65 72 49 6e 66 6f  ScreenBufferInfo
32af0 28 6f 75 74 2c 20 26 64 65 66 61 75 6c 74 53 63  (out, &defaultSc
32b00 72 65 65 6e 49 6e 66 6f 29 3b 0a 20 20 53 65 74  reenInfo);.  Set
32b10 43 6f 6e 73 6f 6c 65 54 65 78 74 41 74 74 72 69  ConsoleTextAttri
32b20 62 75 74 65 28 6f 75 74 2c 0a 20 20 20 20 20 20  bute(out,.      
32b30 20 20 20 46 4f 52 45 47 52 4f 55 4e 44 5f 52 45     FOREGROUND_RE
32b40 44 7c 46 4f 52 45 47 52 4f 55 4e 44 5f 49 4e 54  D|FOREGROUND_INT
32b50 45 4e 53 49 54 59 0a 20 20 29 3b 0a 20 20 70 72  ENSITY.  );.  pr
32b60 69 6e 74 66 28 22 25 73 22 2c 20 7a 54 65 78 74  intf("%s", zText
32b70 29 3b 0a 20 20 53 65 74 43 6f 6e 73 6f 6c 65 54  );.  SetConsoleT
32b80 65 78 74 41 74 74 72 69 62 75 74 65 28 6f 75 74  extAttribute(out
32b90 2c 20 64 65 66 61 75 6c 74 53 63 72 65 65 6e 49  , defaultScreenI
32ba0 6e 66 6f 2e 77 41 74 74 72 69 62 75 74 65 73 29  nfo.wAttributes)
32bb0 3b 0a 7d 0a 23 65 6c 73 65 0a 73 74 61 74 69 63  ;.}.#else.static
32bc0 20 76 6f 69 64 20 70 72 69 6e 74 42 6f 6c 64 28   void printBold(
32bd0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 65 78  const char *zTex
32be0 74 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 5c 30  t){.  printf("\0
32bf0 33 33 5b 31 6d 25 73 5c 30 33 33 5b 30 6d 22 2c  33[1m%s\033[0m",
32c00 20 7a 54 65 78 74 29 3b 0a 7d 0a 23 65 6e 64 69   zText);.}.#endi
32c10 66 0a 0a 2f 2a 0a 2a 2a 20 47 65 74 20 74 68 65  f../*.** Get the
32c20 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 6e 20   argument to an 
32c30 2d 2d 6f 70 74 69 6f 6e 2e 20 20 54 68 72 6f 77  --option.  Throw
32c40 20 61 6e 20 65 72 72 6f 72 20 61 6e 64 20 64 69   an error and di
32c50 65 20 69 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74  e if no argument
32c60 0a 2a 2a 20 69 73 20 61 76 61 69 6c 61 62 6c 65  .** is available
32c70 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72  ..*/.static char
32c80 20 2a 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e   *cmdline_option
32c90 5f 76 61 6c 75 65 28 69 6e 74 20 61 72 67 63 2c  _value(int argc,
32ca0 20 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 69 6e   char **argv, in
32cb0 74 20 69 29 7b 0a 20 20 69 66 28 20 69 3d 3d 61  t i){.  if( i==a
32cc0 72 67 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  rgc ){.    utf8_
32cd0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
32ce0 25 73 3a 20 45 72 72 6f 72 3a 20 6d 69 73 73 69  %s: Error: missi
32cf0 6e 67 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 25  ng argument to %
32d00 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
32d10 20 20 61 72 67 76 5b 30 5d 2c 20 61 72 67 76 5b    argv[0], argv[
32d20 61 72 67 63 2d 31 5d 29 3b 0a 20 20 20 20 65 78  argc-1]);.    ex
32d30 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20 72 65 74  it(1);.  }.  ret
32d40 75 72 6e 20 61 72 67 76 5b 69 5d 3b 0a 7d 0a 0a  urn argv[i];.}..
32d50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 53  #ifndef SQLITE_S
32d60 48 45 4c 4c 5f 49 53 5f 55 54 46 38 0a 23 20 20  HELL_IS_UTF8.#  
32d70 69 66 20 28 64 65 66 69 6e 65 64 28 5f 57 49 4e  if (defined(_WIN
32d80 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57  32) || defined(W
32d90 49 4e 33 32 29 29 20 26 26 20 64 65 66 69 6e 65  IN32)) && define
32da0 64 28 5f 4d 53 43 5f 56 45 52 29 0a 23 20 20 20  d(_MSC_VER).#   
32db0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53   define SQLITE_S
32dc0 48 45 4c 4c 5f 49 53 5f 55 54 46 38 20 20 20 20  HELL_IS_UTF8    
32dd0 20 20 20 20 20 20 28 30 29 0a 23 20 20 65 6c 73        (0).#  els
32de0 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51  e.#    define SQ
32df0 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55 54  LITE_SHELL_IS_UT
32e00 46 38 20 20 20 20 20 20 20 20 20 20 28 31 29 0a  F8          (1).
32e10 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  #  endif.#endif.
32e20 0a 23 69 66 20 53 51 4c 49 54 45 5f 53 48 45 4c  .#if SQLITE_SHEL
32e30 4c 5f 49 53 5f 55 54 46 38 0a 69 6e 74 20 53 51  L_IS_UTF8.int SQ
32e40 4c 49 54 45 5f 43 44 45 43 4c 20 6d 61 69 6e 28  LITE_CDECL main(
32e50 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a  int argc, char *
32e60 2a 61 72 67 76 29 7b 0a 23 65 6c 73 65 0a 69 6e  *argv){.#else.in
32e70 74 20 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 77  t SQLITE_CDECL w
32e80 6d 61 69 6e 28 69 6e 74 20 61 72 67 63 2c 20 77  main(int argc, w
32e90 63 68 61 72 5f 74 20 2a 2a 77 61 72 67 76 29 7b  char_t **wargv){
32ea0 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 3b 0a  .  char **argv;.
32eb0 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 7a  #endif.  char *z
32ec0 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 53 68  ErrMsg = 0;.  Sh
32ed0 65 6c 6c 53 74 61 74 65 20 64 61 74 61 3b 0a 20  ellState data;. 
32ee0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 6e   const char *zIn
32ef0 69 74 46 69 6c 65 20 3d 20 30 3b 0a 20 20 69 6e  itFile = 0;.  in
32f00 74 20 69 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20  t i;.  int rc = 
32f10 30 3b 0a 20 20 69 6e 74 20 77 61 72 6e 49 6e 6d  0;.  int warnInm
32f20 65 6d 6f 72 79 44 62 20 3d 20 30 3b 0a 20 20 69  emoryDb = 0;.  i
32f30 6e 74 20 72 65 61 64 53 74 64 69 6e 20 3d 20 31  nt readStdin = 1
32f40 3b 0a 20 20 69 6e 74 20 6e 43 6d 64 20 3d 20 30  ;.  int nCmd = 0
32f50 3b 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6d 64  ;.  char **azCmd
32f60 20 3d 20 30 3b 0a 0a 20 20 73 65 74 42 69 6e 61   = 0;..  setBina
32f70 72 79 4d 6f 64 65 28 73 74 64 69 6e 2c 20 30 29  ryMode(stdin, 0)
32f80 3b 0a 20 20 73 65 74 76 62 75 66 28 73 74 64 65  ;.  setvbuf(stde
32f90 72 72 2c 20 30 2c 20 5f 49 4f 4e 42 46 2c 20 30  rr, 0, _IONBF, 0
32fa0 29 3b 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  ); /* Make sure 
32fb0 73 74 64 65 72 72 20 69 73 20 75 6e 62 75 66 66  stderr is unbuff
32fc0 65 72 65 64 20 2a 2f 0a 20 20 73 74 64 69 6e 5f  ered */.  stdin_
32fd0 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 3d  is_interactive =
32fe0 20 69 73 61 74 74 79 28 30 29 3b 0a 20 20 73 74   isatty(0);.  st
32ff0 64 6f 75 74 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20  dout_is_console 
33000 3d 20 69 73 61 74 74 79 28 31 29 3b 0a 0a 23 69  = isatty(1);..#i
33010 66 20 55 53 45 5f 53 59 53 54 45 4d 5f 53 51 4c  f USE_SYSTEM_SQL
33020 49 54 45 2b 30 21 3d 31 0a 20 20 69 66 28 20 73  ITE+0!=1.  if( s
33030 74 72 63 6d 70 28 73 71 6c 69 74 65 33 5f 73 6f  trcmp(sqlite3_so
33040 75 72 63 65 69 64 28 29 2c 53 51 4c 49 54 45 5f  urceid(),SQLITE_
33050 53 4f 55 52 43 45 5f 49 44 29 21 3d 30 20 29 7b  SOURCE_ID)!=0 ){
33060 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
33070 28 73 74 64 65 72 72 2c 20 22 53 51 4c 69 74 65  (stderr, "SQLite
33080 20 68 65 61 64 65 72 20 61 6e 64 20 73 6f 75 72   header and sour
33090 63 65 20 76 65 72 73 69 6f 6e 20 6d 69 73 6d 61  ce version misma
330a0 74 63 68 5c 6e 25 73 5c 6e 25 73 5c 6e 22 2c 0a  tch\n%s\n%s\n",.
330b0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
330c0 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20  te3_sourceid(), 
330d0 53 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49 44  SQLITE_SOURCE_ID
330e0 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a  );.    exit(1);.
330f0 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 6d 61 69    }.#endif.  mai
33100 6e 5f 69 6e 69 74 28 26 64 61 74 61 29 3b 0a 23  n_init(&data);.#
33110 69 66 20 21 53 51 4c 49 54 45 5f 53 48 45 4c 4c  if !SQLITE_SHELL
33120 5f 49 53 5f 55 54 46 38 0a 20 20 73 71 6c 69 74  _IS_UTF8.  sqlit
33130 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b  e3_initialize();
33140 0a 20 20 61 72 67 76 20 3d 20 73 71 6c 69 74 65  .  argv = sqlite
33150 33 5f 6d 61 6c 6c 6f 63 36 34 28 73 69 7a 65 6f  3_malloc64(sizeo
33160 66 28 61 72 67 76 5b 30 5d 29 2a 61 72 67 63 29  f(argv[0])*argc)
33170 3b 0a 20 20 69 66 28 20 61 72 67 76 3d 3d 30 20  ;.  if( argv==0 
33180 29 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74  ){.    raw_print
33190 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f  f(stderr, "out o
331a0 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20  f memory\n");.  
331b0 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20    exit(1);.  }. 
331c0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
331d0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 72 67 76  ; i++){.    argv
331e0 5b 69 5d 20 3d 20 73 71 6c 69 74 65 33 5f 77 69  [i] = sqlite3_wi
331f0 6e 33 32 5f 75 6e 69 63 6f 64 65 5f 74 6f 5f 75  n32_unicode_to_u
33200 74 66 38 28 77 61 72 67 76 5b 69 5d 29 3b 0a 20  tf8(wargv[i]);. 
33210 20 20 20 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d     if( argv[i]==
33220 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
33230 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f  rintf(stderr, "o
33240 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut of memory\n")
33250 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31 29 3b  ;.      exit(1);
33260 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
33270 66 0a 20 20 61 73 73 65 72 74 28 20 61 72 67 63  f.  assert( argc
33280 3e 3d 31 20 26 26 20 61 72 67 76 20 26 26 20 61  >=1 && argv && a
33290 72 67 76 5b 30 5d 20 29 3b 0a 20 20 41 72 67 76  rgv[0] );.  Argv
332a0 30 20 3d 20 61 72 67 76 5b 30 5d 3b 0a 0a 20 20  0 = argv[0];..  
332b0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20  /* Make sure we 
332c0 68 61 76 65 20 61 20 76 61 6c 69 64 20 73 69 67  have a valid sig
332d0 6e 61 6c 20 68 61 6e 64 6c 65 72 20 65 61 72 6c  nal handler earl
332e0 79 2c 20 62 65 66 6f 72 65 20 61 6e 79 74 68 69  y, before anythi
332f0 6e 67 0a 20 20 2a 2a 20 65 6c 73 65 20 69 73 20  ng.  ** else is 
33300 64 6f 6e 65 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  done..  */.#ifde
33310 66 20 53 49 47 49 4e 54 0a 20 20 73 69 67 6e 61  f SIGINT.  signa
33320 6c 28 53 49 47 49 4e 54 2c 20 69 6e 74 65 72 72  l(SIGINT, interr
33330 75 70 74 5f 68 61 6e 64 6c 65 72 29 3b 0a 23 65  upt_handler);.#e
33340 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
33350 49 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45  ITE_SHELL_DBNAME
33360 5f 50 52 4f 43 0a 20 20 7b 0a 20 20 20 20 2f 2a  _PROC.  {.    /*
33370 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   If the SQLITE_S
33380 48 45 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52 4f 43  HELL_DBNAME_PROC
33390 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
333a0 64 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  d, then it is th
333b0 65 20 6e 61 6d 65 0a 20 20 20 20 2a 2a 20 6f 66  e name.    ** of
333c0 20 61 20 43 2d 66 75 6e 63 74 69 6f 6e 20 74 68   a C-function th
333d0 61 74 20 77 69 6c 6c 20 70 72 6f 76 69 64 65 20  at will provide 
333e0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
333f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
33400 55 73 65 0a 20 20 20 20 2a 2a 20 74 68 69 73 20  Use.    ** this 
33410 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
33420 69 6f 6e 20 74 6f 20 65 6d 62 65 64 20 74 68 69  ion to embed thi
33430 73 20 73 68 65 6c 6c 20 70 72 6f 67 72 61 6d 20  s shell program 
33440 69 6e 20 6c 61 72 67 65 72 0a 20 20 20 20 2a 2a  in larger.    **
33450 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 20 2a   applications. *
33460 2f 0a 20 20 20 20 65 78 74 65 72 6e 20 76 6f 69  /.    extern voi
33470 64 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 44  d SQLITE_SHELL_D
33480 42 4e 41 4d 45 5f 50 52 4f 43 28 63 6f 6e 73 74  BNAME_PROC(const
33490 20 63 68 61 72 2a 2a 29 3b 0a 20 20 20 20 53 51   char**);.    SQ
334a0 4c 49 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d  LITE_SHELL_DBNAM
334b0 45 5f 50 52 4f 43 28 26 64 61 74 61 2e 7a 44 62  E_PROC(&data.zDb
334c0 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 77  Filename);.    w
334d0 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20 3d 20  arnInmemoryDb = 
334e0 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  0;.  }.#endif.. 
334f0 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 69 74 69 61   /* Do an initia
33500 6c 20 70 61 73 73 20 74 68 72 6f 75 67 68 20 74  l pass through t
33510 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  he command-line 
33520 61 72 67 75 6d 65 6e 74 20 74 6f 20 6c 6f 63 61  argument to loca
33530 74 65 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65  te.  ** the name
33540 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
33550 20 66 69 6c 65 2c 20 74 68 65 20 6e 61 6d 65 20   file, the name 
33560 6f 66 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  of the initializ
33570 61 74 69 6f 6e 20 66 69 6c 65 2c 0a 20 20 2a 2a  ation file,.  **
33580 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
33590 20 61 6c 74 65 72 6e 61 74 69 76 65 20 6d 61 6c   alternative mal
335a0 6c 6f 63 20 68 65 61 70 2c 0a 20 20 2a 2a 20 61  loc heap,.  ** a
335b0 6e 64 20 74 68 65 20 66 69 72 73 74 20 63 6f 6d  nd the first com
335c0 6d 61 6e 64 20 74 6f 20 65 78 65 63 75 74 65 2e  mand to execute.
335d0 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 31 3b  .  */.  for(i=1;
335e0 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
335f0 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20     char *z;.    
33600 7a 20 3d 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20  z = argv[i];.   
33610 20 69 66 28 20 7a 5b 30 5d 21 3d 27 2d 27 20 29   if( z[0]!='-' )
33620 7b 0a 20 20 20 20 20 20 69 66 28 20 64 61 74 61  {.      if( data
33630 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 3d 3d 30 20  .zDbFilename==0 
33640 29 7b 0a 20 20 20 20 20 20 20 20 64 61 74 61 2e  ){.        data.
33650 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20 7a 3b  zDbFilename = z;
33660 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
33670 20 20 20 20 20 20 2f 2a 20 45 78 63 65 73 73 73        /* Excesss
33680 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 69   arguments are i
33690 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 53 51  nterpreted as SQ
336a0 4c 20 28 6f 72 20 64 6f 74 2d 63 6f 6d 6d 61 6e  L (or dot-comman
336b0 64 73 29 20 61 6e 64 0a 20 20 20 20 20 20 20 20  ds) and.        
336c0 2a 2a 20 6d 65 61 6e 20 74 68 61 74 20 6e 6f 74  ** mean that not
336d0 68 69 6e 67 20 69 73 20 72 65 61 64 20 66 72 6f  hing is read fro
336e0 6d 20 73 74 64 69 6e 20 2a 2f 0a 20 20 20 20 20  m stdin */.     
336f0 20 20 20 72 65 61 64 53 74 64 69 6e 20 3d 20 30     readStdin = 0
33700 3b 0a 20 20 20 20 20 20 20 20 6e 43 6d 64 2b 2b  ;.        nCmd++
33710 3b 0a 20 20 20 20 20 20 20 20 61 7a 43 6d 64 20  ;.        azCmd 
33720 3d 20 72 65 61 6c 6c 6f 63 28 61 7a 43 6d 64 2c  = realloc(azCmd,
33730 20 73 69 7a 65 6f 66 28 61 7a 43 6d 64 5b 30 5d   sizeof(azCmd[0]
33740 29 2a 6e 43 6d 64 29 3b 0a 20 20 20 20 20 20 20  )*nCmd);.       
33750 20 69 66 28 20 61 7a 43 6d 64 3d 3d 30 20 29 7b   if( azCmd==0 ){
33760 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
33770 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f  rintf(stderr, "o
33780 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut of memory\n")
33790 3b 0a 20 20 20 20 20 20 20 20 20 20 65 78 69 74  ;.          exit
337a0 28 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  (1);.        }. 
337b0 20 20 20 20 20 20 20 61 7a 43 6d 64 5b 6e 43 6d         azCmd[nCm
337c0 64 2d 31 5d 20 3d 20 7a 3b 0a 20 20 20 20 20 20  d-1] = z;.      
337d0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
337e0 7a 5b 31 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  z[1]=='-' ) z++;
337f0 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28  .    if( strcmp(
33800 7a 2c 22 2d 73 65 70 61 72 61 74 6f 72 22 29 3d  z,"-separator")=
33810 3d 30 0a 20 20 20 20 20 7c 7c 20 73 74 72 63 6d  =0.     || strcm
33820 70 28 7a 2c 22 2d 6e 75 6c 6c 76 61 6c 75 65 22  p(z,"-nullvalue"
33830 29 3d 3d 30 0a 20 20 20 20 20 7c 7c 20 73 74 72  )==0.     || str
33840 63 6d 70 28 7a 2c 22 2d 6e 65 77 6c 69 6e 65 22  cmp(z,"-newline"
33850 29 3d 3d 30 0a 20 20 20 20 20 7c 7c 20 73 74 72  )==0.     || str
33860 63 6d 70 28 7a 2c 22 2d 63 6d 64 22 29 3d 3d 30  cmp(z,"-cmd")==0
33870 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 28 76  .    ){.      (v
33880 6f 69 64 29 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  oid)cmdline_opti
33890 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61  on_value(argc, a
338a0 72 67 76 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 7d  rgv, ++i);.    }
338b0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
338c0 7a 2c 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b  z,"-init")==0 ){
338d0 0a 20 20 20 20 20 20 7a 49 6e 69 74 46 69 6c 65  .      zInitFile
338e0 20 3d 20 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f   = cmdline_optio
338f0 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72  n_value(argc, ar
33900 67 76 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 7d 65  gv, ++i);.    }e
33910 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
33920 2c 22 2d 62 61 74 63 68 22 29 3d 3d 30 20 29 7b  ,"-batch")==0 ){
33930 0a 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  .      /* Need t
33940 6f 20 63 68 65 63 6b 20 66 6f 72 20 62 61 74 63  o check for batc
33950 68 20 6d 6f 64 65 20 68 65 72 65 20 74 6f 20 73  h mode here to s
33960 6f 20 77 65 20 63 61 6e 20 61 76 6f 69 64 20 70  o we can avoid p
33970 72 69 6e 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a  rinting.      **
33980 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 61 6c 20 6d   informational m
33990 65 73 73 61 67 65 73 20 28 6c 69 6b 65 20 66 72  essages (like fr
339a0 6f 6d 20 70 72 6f 63 65 73 73 5f 73 71 6c 69 74  om process_sqlit
339b0 65 72 63 29 20 62 65 66 6f 72 65 0a 20 20 20 20  erc) before.    
339c0 20 20 2a 2a 20 77 65 20 64 6f 20 74 68 65 20 61    ** we do the a
339d0 63 74 75 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ctual processing
339e0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 6c 61   of arguments la
339f0 74 65 72 20 69 6e 20 61 20 73 65 63 6f 6e 64 20  ter in a second 
33a00 70 61 73 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  pass..      */. 
33a10 20 20 20 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e       stdin_is_in
33a20 74 65 72 61 63 74 69 76 65 20 3d 20 30 3b 0a 20  teractive = 0;. 
33a30 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
33a40 63 6d 70 28 7a 2c 22 2d 68 65 61 70 22 29 3d 3d  cmp(z,"-heap")==
33a50 30 20 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64  0 ){.#if defined
33a60 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
33a70 45 4d 53 59 53 33 29 20 7c 7c 20 64 65 66 69 6e  EMSYS3) || defin
33a80 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
33a90 5f 4d 45 4d 53 59 53 35 29 0a 20 20 20 20 20 20  _MEMSYS5).      
33aa0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 69 7a  const char *zSiz
33ab0 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
33ac0 5f 69 6e 74 36 34 20 73 7a 48 65 61 70 3b 0a 0a  _int64 szHeap;..
33ad0 20 20 20 20 20 20 7a 53 69 7a 65 20 3d 20 63 6d        zSize = cm
33ae0 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
33af0 75 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20 2b  ue(argc, argv, +
33b00 2b 69 29 3b 0a 20 20 20 20 20 20 73 7a 48 65 61  +i);.      szHea
33b10 70 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65  p = integerValue
33b20 28 7a 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 69  (zSize);.      i
33b30 66 28 20 73 7a 48 65 61 70 3e 30 78 37 66 66 66  f( szHeap>0x7fff
33b40 30 30 30 30 20 29 20 73 7a 48 65 61 70 20 3d 20  0000 ) szHeap = 
33b50 30 78 37 66 66 66 30 30 30 30 3b 0a 20 20 20 20  0x7fff0000;.    
33b60 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
33b70 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48  (SQLITE_CONFIG_H
33b80 45 41 50 2c 20 6d 61 6c 6c 6f 63 28 28 69 6e 74  EAP, malloc((int
33b90 29 73 7a 48 65 61 70 29 2c 20 28 69 6e 74 29 73  )szHeap), (int)s
33ba0 7a 48 65 61 70 2c 20 36 34 29 3b 0a 23 65 6c 73  zHeap, 64);.#els
33bb0 65 0a 20 20 20 20 20 20 28 76 6f 69 64 29 63 6d  e.      (void)cm
33bc0 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
33bd0 75 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20 2b  ue(argc, argv, +
33be0 2b 69 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  +i);.#endif.    
33bf0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
33c00 28 7a 2c 22 2d 73 63 72 61 74 63 68 22 29 3d 3d  (z,"-scratch")==
33c10 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e  0 ){.      int n
33c20 2c 20 73 7a 3b 0a 20 20 20 20 20 20 73 7a 20 3d  , sz;.      sz =
33c30 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c   (int)integerVal
33c40 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f  ue(cmdline_optio
33c50 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67  n_value(argc,arg
33c60 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 69  v,++i));.      i
33c70 66 28 20 73 7a 3e 34 30 30 30 30 30 20 29 20 73  f( sz>400000 ) s
33c80 7a 20 3d 20 34 30 30 30 30 30 3b 0a 20 20 20 20  z = 400000;.    
33c90 20 20 69 66 28 20 73 7a 3c 32 35 30 30 20 29 20    if( sz<2500 ) 
33ca0 73 7a 20 3d 20 32 35 30 30 3b 0a 20 20 20 20 20  sz = 2500;.     
33cb0 20 6e 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65   n = (int)intege
33cc0 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f  rValue(cmdline_o
33cd0 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63  ption_value(argc
33ce0 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20  ,argv,++i));.   
33cf0 20 20 20 69 66 28 20 6e 3e 31 30 20 29 20 6e 20     if( n>10 ) n 
33d00 3d 20 31 30 3b 0a 20 20 20 20 20 20 69 66 28 20  = 10;.      if( 
33d10 6e 3c 31 20 29 20 6e 20 3d 20 31 3b 0a 20 20 20  n<1 ) n = 1;.   
33d20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
33d30 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  g(SQLITE_CONFIG_
33d40 53 43 52 41 54 43 48 2c 20 6d 61 6c 6c 6f 63 28  SCRATCH, malloc(
33d50 6e 2a 73 7a 2b 31 29 2c 20 73 7a 2c 20 6e 29 3b  n*sz+1), sz, n);
33d60 0a 20 20 20 20 20 20 64 61 74 61 2e 73 68 65 6c  .      data.shel
33d70 6c 46 6c 67 73 20 7c 3d 20 53 48 46 4c 47 5f 53  lFlgs |= SHFLG_S
33d80 63 72 61 74 63 68 3b 0a 20 20 20 20 7d 65 6c 73  cratch;.    }els
33d90 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
33da0 2d 70 61 67 65 63 61 63 68 65 22 29 3d 3d 30 20  -pagecache")==0 
33db0 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 2c 20  ){.      int n, 
33dc0 73 7a 3b 0a 20 20 20 20 20 20 73 7a 20 3d 20 28  sz;.      sz = (
33dd0 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65  int)integerValue
33de0 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f  (cmdline_option_
33df0 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c  value(argc,argv,
33e00 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66 28  ++i));.      if(
33e10 20 73 7a 3e 37 30 30 30 30 20 29 20 73 7a 20 3d   sz>70000 ) sz =
33e20 20 37 30 30 30 30 3b 0a 20 20 20 20 20 20 69 66   70000;.      if
33e30 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 30 3b  ( sz<0 ) sz = 0;
33e40 0a 20 20 20 20 20 20 6e 20 3d 20 28 69 6e 74 29  .      n = (int)
33e50 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64  integerValue(cmd
33e60 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
33e70 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
33e80 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
33e90 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43  _config(SQLITE_C
33ea0 4f 4e 46 49 47 5f 50 41 47 45 43 41 43 48 45 2c  ONFIG_PAGECACHE,
33eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33ec0 20 20 20 20 20 28 6e 3e 30 20 26 26 20 73 7a 3e       (n>0 && sz>
33ed0 30 29 20 3f 20 6d 61 6c 6c 6f 63 28 6e 2a 73 7a  0) ? malloc(n*sz
33ee0 29 20 3a 20 30 2c 20 73 7a 2c 20 6e 29 3b 0a 20  ) : 0, sz, n);. 
33ef0 20 20 20 20 20 64 61 74 61 2e 73 68 65 6c 6c 46       data.shellF
33f00 6c 67 73 20 7c 3d 20 53 48 46 4c 47 5f 50 61 67  lgs |= SHFLG_Pag
33f10 65 63 61 63 68 65 3b 0a 20 20 20 20 7d 65 6c 73  ecache;.    }els
33f20 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
33f30 2d 6c 6f 6f 6b 61 73 69 64 65 22 29 3d 3d 30 20  -lookaside")==0 
33f40 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 2c 20  ){.      int n, 
33f50 73 7a 3b 0a 20 20 20 20 20 20 73 7a 20 3d 20 28  sz;.      sz = (
33f60 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65  int)integerValue
33f70 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f  (cmdline_option_
33f80 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c  value(argc,argv,
33f90 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66 28  ++i));.      if(
33fa0 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 30 3b 0a   sz<0 ) sz = 0;.
33fb0 20 20 20 20 20 20 6e 20 3d 20 28 69 6e 74 29 69        n = (int)i
33fc0 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64 6c  ntegerValue(cmdl
33fd0 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65  ine_option_value
33fe0 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29  (argc,argv,++i))
33ff0 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 3c 30 20  ;.      if( n<0 
34000 29 20 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 73  ) n = 0;.      s
34010 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
34020 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 4f 4b  LITE_CONFIG_LOOK
34030 41 53 49 44 45 2c 20 73 7a 2c 20 6e 29 3b 0a 20  ASIDE, sz, n);. 
34040 20 20 20 20 20 69 66 28 20 73 7a 2a 6e 3d 3d 30       if( sz*n==0
34050 20 29 20 64 61 74 61 2e 73 68 65 6c 6c 46 6c 67   ) data.shellFlg
34060 73 20 26 3d 20 7e 53 48 46 4c 47 5f 4c 6f 6f 6b  s &= ~SHFLG_Look
34070 61 73 69 64 65 3b 0a 23 69 66 64 65 66 20 53 51  aside;.#ifdef SQ
34080 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53 54  LITE_ENABLE_VFST
34090 52 41 43 45 0a 20 20 20 20 7d 65 6c 73 65 20 69  RACE.    }else i
340a0 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76 66  f( strcmp(z,"-vf
340b0 73 74 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20  strace")==0 ){. 
340c0 20 20 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20       extern int 
340d0 76 66 73 74 72 61 63 65 5f 72 65 67 69 73 74 65  vfstrace_registe
340e0 72 28 0a 20 20 20 20 20 20 20 20 20 63 6f 6e 73  r(.         cons
340f0 74 20 63 68 61 72 20 2a 7a 54 72 61 63 65 4e 61  t char *zTraceNa
34100 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 63 6f 6e  me,.         con
34110 73 74 20 63 68 61 72 20 2a 7a 4f 6c 64 56 66 73  st char *zOldVfs
34120 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 69  Name,.         i
34130 6e 74 20 28 2a 78 4f 75 74 29 28 63 6f 6e 73 74  nt (*xOut)(const
34140 20 63 68 61 72 2a 2c 76 6f 69 64 2a 29 2c 0a 20   char*,void*),. 
34150 20 20 20 20 20 20 20 20 76 6f 69 64 20 2a 70 4f          void *pO
34160 75 74 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20  utArg,.         
34170 69 6e 74 20 6d 61 6b 65 44 65 66 61 75 6c 74 0a  int makeDefault.
34180 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 76        );.      v
34190 66 73 74 72 61 63 65 5f 72 65 67 69 73 74 65 72  fstrace_register
341a0 28 22 74 72 61 63 65 22 2c 30 2c 28 69 6e 74 28  ("trace",0,(int(
341b0 2a 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 76  *)(const char*,v
341c0 6f 69 64 2a 29 29 66 70 75 74 73 2c 73 74 64 65  oid*))fputs,stde
341d0 72 72 2c 31 29 3b 0a 23 65 6e 64 69 66 0a 23 69  rr,1);.#endif.#i
341e0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
341f0 4c 45 5f 4d 55 4c 54 49 50 4c 45 58 0a 20 20 20  LE_MULTIPLEX.   
34200 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
34210 70 28 7a 2c 22 2d 6d 75 6c 74 69 70 6c 65 78 22  p(z,"-multiplex"
34220 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 65 78  )==0 ){.      ex
34230 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
34240 5f 6d 75 6c 74 69 70 6c 65 5f 69 6e 69 74 69 61  _multiple_initia
34250 6c 69 7a 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  lize(const char*
34260 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  ,int);.      sql
34270 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69  ite3_multiplex_i
34280 6e 69 74 69 61 6c 69 7a 65 28 30 2c 20 31 29 3b  nitialize(0, 1);
34290 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73  .#endif.    }els
342a0 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
342b0 2d 6d 6d 61 70 22 29 3d 3d 30 20 29 7b 0a 20 20  -mmap")==0 ){.  
342c0 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36      sqlite3_int6
342d0 34 20 73 7a 20 3d 20 69 6e 74 65 67 65 72 56 61  4 sz = integerVa
342e0 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  lue(cmdline_opti
342f0 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72  on_value(argc,ar
34300 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20  gv,++i));.      
34310 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53  sqlite3_config(S
34320 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41  QLITE_CONFIG_MMA
34330 50 5f 53 49 5a 45 2c 20 73 7a 2c 20 73 7a 29 3b  P_SIZE, sz, sz);
34340 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
34350 74 72 63 6d 70 28 7a 2c 22 2d 76 66 73 22 29 3d  trcmp(z,"-vfs")=
34360 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
34370 74 65 33 5f 76 66 73 20 2a 70 56 66 73 20 3d 20  te3_vfs *pVfs = 
34380 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
34390 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f  (cmdline_option_
343a0 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c  value(argc,argv,
343b0 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66 28  ++i));.      if(
343c0 20 70 56 66 73 20 29 7b 0a 20 20 20 20 20 20 20   pVfs ){.       
343d0 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67   sqlite3_vfs_reg
343e0 69 73 74 65 72 28 70 56 66 73 2c 20 31 29 3b 0a  ister(pVfs, 1);.
343f0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
34400 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
34410 28 73 74 64 65 72 72 2c 20 22 6e 6f 20 73 75 63  (stderr, "no suc
34420 68 20 56 46 53 3a 20 5c 22 25 73 5c 22 5c 6e 22  h VFS: \"%s\"\n"
34430 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20  , argv[i]);.    
34440 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20      exit(1);.   
34450 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
34460 20 69 66 28 20 64 61 74 61 2e 7a 44 62 46 69 6c   if( data.zDbFil
34470 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a 23 69 66 6e  ename==0 ){.#ifn
34480 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
34490 4d 45 4d 4f 52 59 44 42 0a 20 20 20 20 64 61 74  MEMORYDB.    dat
344a0 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20  a.zDbFilename = 
344b0 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 20 20 20 20  ":memory:";.    
344c0 77 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20 3d  warnInmemoryDb =
344d0 20 61 72 67 63 3d 3d 31 3b 0a 23 65 6c 73 65 0a   argc==1;.#else.
344e0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
344f0 73 74 64 65 72 72 2c 22 25 73 3a 20 45 72 72 6f  stderr,"%s: Erro
34500 72 3a 20 6e 6f 20 64 61 74 61 62 61 73 65 20 66  r: no database f
34510 69 6c 65 6e 61 6d 65 20 73 70 65 63 69 66 69 65  ilename specifie
34520 64 5c 6e 22 2c 20 41 72 67 76 30 29 3b 0a 20 20  d\n", Argv0);.  
34530 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e 64    return 1;.#end
34540 69 66 0a 20 20 7d 0a 20 20 64 61 74 61 2e 6f 75  if.  }.  data.ou
34550 74 20 3d 20 73 74 64 6f 75 74 3b 0a 0a 20 20 2f  t = stdout;..  /
34560 2a 20 47 6f 20 61 68 65 61 64 20 61 6e 64 20 6f  * Go ahead and o
34570 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  pen the database
34580 20 66 69 6c 65 20 69 66 20 69 74 20 61 6c 72 65   file if it alre
34590 61 64 79 20 65 78 69 73 74 73 2e 20 20 49 66 20  ady exists.  If 
345a0 74 68 65 0a 20 20 2a 2a 20 66 69 6c 65 20 64 6f  the.  ** file do
345b0 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 64 65  es not exist, de
345c0 6c 61 79 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20  lay opening it. 
345d0 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 65   This prevents e
345e0 6d 70 74 79 20 64 61 74 61 62 61 73 65 0a 20 20  mpty database.  
345f0 2a 2a 20 66 69 6c 65 73 20 66 72 6f 6d 20 62 65  ** files from be
34600 69 6e 67 20 63 72 65 61 74 65 64 20 69 66 20 61  ing created if a
34610 20 75 73 65 72 20 6d 69 73 74 79 70 65 73 20 74   user mistypes t
34620 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  he database name
34630 20 61 72 67 75 6d 65 6e 74 0a 20 20 2a 2a 20 74   argument.  ** t
34640 6f 20 74 68 65 20 73 71 6c 69 74 65 20 63 6f 6d  o the sqlite com
34650 6d 61 6e 64 2d 6c 69 6e 65 20 74 6f 6f 6c 2e 0a  mand-line tool..
34660 20 20 2a 2f 0a 20 20 69 66 28 20 61 63 63 65 73    */.  if( acces
34670 73 28 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61  s(data.zDbFilena
34680 6d 65 2c 20 30 29 3d 3d 30 20 29 7b 0a 20 20 20  me, 0)==0 ){.   
34690 20 6f 70 65 6e 5f 64 62 28 26 64 61 74 61 2c 20   open_db(&data, 
346a0 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 72  0);.  }..  /* Pr
346b0 6f 63 65 73 73 20 74 68 65 20 69 6e 69 74 69 61  ocess the initia
346c0 6c 69 7a 61 74 69 6f 6e 20 66 69 6c 65 20 69 66  lization file if
346d0 20 74 68 65 72 65 20 69 73 20 6f 6e 65 2e 20 20   there is one.  
346e0 49 66 20 6e 6f 20 2d 69 6e 69 74 20 6f 70 74 69  If no -init opti
346f0 6f 6e 0a 20 20 2a 2a 20 69 73 20 67 69 76 65 6e  on.  ** is given
34700 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   on the command 
34710 6c 69 6e 65 2c 20 6c 6f 6f 6b 20 66 6f 72 20 61  line, look for a
34720 20 66 69 6c 65 20 6e 61 6d 65 64 20 7e 2f 2e 73   file named ~/.s
34730 71 6c 69 74 65 72 63 20 61 6e 64 0a 20 20 2a 2a  qliterc and.  **
34740 20 74 72 79 20 74 6f 20 70 72 6f 63 65 73 73 20   try to process 
34750 69 74 2e 0a 20 20 2a 2f 0a 20 20 70 72 6f 63 65  it..  */.  proce
34760 73 73 5f 73 71 6c 69 74 65 72 63 28 26 64 61 74  ss_sqliterc(&dat
34770 61 2c 7a 49 6e 69 74 46 69 6c 65 29 3b 0a 0a 20  a,zInitFile);.. 
34780 20 2f 2a 20 4d 61 6b 65 20 61 20 73 65 63 6f 6e   /* Make a secon
34790 64 20 70 61 73 73 20 74 68 72 6f 75 67 68 20 74  d pass through t
347a0 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  he command-line 
347b0 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 73 65 74  argument and set
347c0 0a 20 20 2a 2a 20 6f 70 74 69 6f 6e 73 2e 20 20  .  ** options.  
347d0 54 68 69 73 20 73 65 63 6f 6e 64 20 70 61 73 73  This second pass
347e0 20 69 73 20 64 65 6c 61 79 65 64 20 75 6e 74 69   is delayed unti
347f0 6c 20 61 66 74 65 72 20 74 68 65 20 69 6e 69 74  l after the init
34800 69 61 6c 69 7a 61 74 69 6f 6e 0a 20 20 2a 2a 20  ialization.  ** 
34810 66 69 6c 65 20 69 73 20 70 72 6f 63 65 73 73 65  file is processe
34820 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 6f  d so that the co
34830 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d  mmand-line argum
34840 65 6e 74 73 20 77 69 6c 6c 20 6f 76 65 72 72 69  ents will overri
34850 64 65 0a 20 20 2a 2a 20 73 65 74 74 69 6e 67 73  de.  ** settings
34860 20 69 6e 20 74 68 65 20 69 6e 69 74 69 61 6c 69   in the initiali
34870 7a 61 74 69 6f 6e 20 66 69 6c 65 2e 0a 20 20 2a  zation file..  *
34880 2f 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 61  /.  for(i=1; i<a
34890 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 63  rgc; i++){.    c
348a0 68 61 72 20 2a 7a 20 3d 20 61 72 67 76 5b 69 5d  har *z = argv[i]
348b0 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 21 3d  ;.    if( z[0]!=
348c0 27 2d 27 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  '-' ) continue;.
348d0 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d 3d 27 2d      if( z[1]=='-
348e0 27 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20 20  ' ){ z++; }.    
348f0 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 69  if( strcmp(z,"-i
34900 6e 69 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nit")==0 ){.    
34910 20 20 69 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65    i++;.    }else
34920 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
34930 68 74 6d 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  html")==0 ){.   
34940 20 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d     data.mode = M
34950 4f 44 45 5f 48 74 6d 6c 3b 0a 20 20 20 20 7d 65  ODE_Html;.    }e
34960 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
34970 2c 22 2d 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a  ,"-list")==0 ){.
34980 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20        data.mode 
34990 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 20  = MODE_List;.   
349a0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
349b0 70 28 7a 2c 22 2d 71 75 6f 74 65 22 29 3d 3d 30  p(z,"-quote")==0
349c0 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d   ){.      data.m
349d0 6f 64 65 20 3d 20 4d 4f 44 45 5f 51 75 6f 74 65  ode = MODE_Quote
349e0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
349f0 73 74 72 63 6d 70 28 7a 2c 22 2d 6c 69 6e 65 22  strcmp(z,"-line"
34a00 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
34a10 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c  ta.mode = MODE_L
34a20 69 6e 65 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ine;.    }else i
34a30 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 6f  f( strcmp(z,"-co
34a40 6c 75 6d 6e 22 29 3d 3d 30 20 29 7b 0a 20 20 20  lumn")==0 ){.   
34a50 20 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d     data.mode = M
34a60 4f 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20  ODE_Column;.    
34a70 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
34a80 28 7a 2c 22 2d 63 73 76 22 29 3d 3d 30 20 29 7b  (z,"-csv")==0 ){
34a90 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65  .      data.mode
34aa0 20 3d 20 4d 4f 44 45 5f 43 73 76 3b 0a 20 20 20   = MODE_Csv;.   
34ab0 20 20 20 6d 65 6d 63 70 79 28 64 61 74 61 2e 63     memcpy(data.c
34ac0 6f 6c 53 65 70 61 72 61 74 6f 72 2c 22 2c 22 2c  olSeparator,",",
34ad0 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  2);.    }else if
34ae0 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 61 73 63  ( strcmp(z,"-asc
34af0 69 69 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ii")==0 ){.     
34b00 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44   data.mode = MOD
34b10 45 5f 41 73 63 69 69 3b 0a 20 20 20 20 20 20 73  E_Ascii;.      s
34b20 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
34b30 73 69 7a 65 6f 66 28 64 61 74 61 2e 63 6f 6c 53  sizeof(data.colS
34b40 65 70 61 72 61 74 6f 72 29 2c 20 64 61 74 61 2e  eparator), data.
34b50 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 0a 20 20  colSeparator,.  
34b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b70 20 20 20 20 20 53 45 50 5f 55 6e 69 74 29 3b 0a       SEP_Unit);.
34b80 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
34b90 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61  printf(sizeof(da
34ba0 74 61 2e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  ta.rowSeparator)
34bb0 2c 20 64 61 74 61 2e 72 6f 77 53 65 70 61 72 61  , data.rowSepara
34bc0 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  tor,.           
34bd0 20 20 20 20 20 20 20 20 20 20 20 20 53 45 50 5f              SEP_
34be0 52 65 63 6f 72 64 29 3b 0a 20 20 20 20 7d 65 6c  Record);.    }el
34bf0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
34c00 22 2d 73 65 70 61 72 61 74 6f 72 22 29 3d 3d 30  "-separator")==0
34c10 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
34c20 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
34c30 66 28 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61  f(data.colSepara
34c40 74 6f 72 29 2c 20 64 61 74 61 2e 63 6f 6c 53 65  tor), data.colSe
34c50 70 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20  parator,.       
34c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c70 22 25 73 22 2c 63 6d 64 6c 69 6e 65 5f 6f 70 74  "%s",cmdline_opt
34c80 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
34c90 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 7d  rgv,++i));.    }
34ca0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
34cb0 7a 2c 22 2d 6e 65 77 6c 69 6e 65 22 29 3d 3d 30  z,"-newline")==0
34cc0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
34cd0 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
34ce0 66 28 64 61 74 61 2e 72 6f 77 53 65 70 61 72 61  f(data.rowSepara
34cf0 74 6f 72 29 2c 20 64 61 74 61 2e 72 6f 77 53 65  tor), data.rowSe
34d00 70 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20  parator,.       
34d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d20 22 25 73 22 2c 63 6d 64 6c 69 6e 65 5f 6f 70 74  "%s",cmdline_opt
34d30 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
34d40 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 7d  rgv,++i));.    }
34d50 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
34d60 7a 2c 22 2d 6e 75 6c 6c 76 61 6c 75 65 22 29 3d  z,"-nullvalue")=
34d70 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
34d80 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
34d90 65 6f 66 28 64 61 74 61 2e 6e 75 6c 6c 56 61 6c  eof(data.nullVal
34da0 75 65 29 2c 20 64 61 74 61 2e 6e 75 6c 6c 56 61  ue), data.nullVa
34db0 6c 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  lue,.           
34dc0 20 20 20 20 20 20 20 20 20 20 20 20 22 25 73 22              "%s"
34dd0 2c 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f  ,cmdline_option_
34de0 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c  value(argc,argv,
34df0 2b 2b 69 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ++i));.    }else
34e00 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
34e10 68 65 61 64 65 72 22 29 3d 3d 30 20 29 7b 0a 20  header")==0 ){. 
34e20 20 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65       data.showHe
34e30 61 64 65 72 20 3d 20 31 3b 0a 20 20 20 20 7d 65  ader = 1;.    }e
34e40 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
34e50 2c 22 2d 6e 6f 68 65 61 64 65 72 22 29 3d 3d 30  ,"-noheader")==0
34e60 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 73   ){.      data.s
34e70 68 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20  howHeader = 0;. 
34e80 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
34e90 63 6d 70 28 7a 2c 22 2d 65 63 68 6f 22 29 3d 3d  cmp(z,"-echo")==
34ea0 30 20 29 7b 0a 20 20 20 20 20 20 53 68 65 6c 6c  0 ){.      Shell
34eb0 53 65 74 46 6c 61 67 28 26 64 61 74 61 2c 20 53  SetFlag(&data, S
34ec0 48 46 4c 47 5f 45 63 68 6f 29 3b 0a 20 20 20 20  HFLG_Echo);.    
34ed0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
34ee0 28 7a 2c 22 2d 65 71 70 22 29 3d 3d 30 20 29 7b  (z,"-eqp")==0 ){
34ef0 0a 20 20 20 20 20 20 64 61 74 61 2e 61 75 74 6f  .      data.auto
34f00 45 51 50 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  EQP = 1;.    }el
34f10 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
34f20 22 2d 65 71 70 66 75 6c 6c 22 29 3d 3d 30 20 29  "-eqpfull")==0 )
34f30 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 61 75 74  {.      data.aut
34f40 6f 45 51 50 20 3d 20 32 3b 0a 20 20 20 20 7d 65  oEQP = 2;.    }e
34f50 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
34f60 2c 22 2d 73 74 61 74 73 22 29 3d 3d 30 20 29 7b  ,"-stats")==0 ){
34f70 0a 20 20 20 20 20 20 64 61 74 61 2e 73 74 61 74  .      data.stat
34f80 73 4f 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  sOn = 1;.    }el
34f90 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
34fa0 22 2d 73 63 61 6e 73 74 61 74 73 22 29 3d 3d 30  "-scanstats")==0
34fb0 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 73   ){.      data.s
34fc0 63 61 6e 73 74 61 74 73 4f 6e 20 3d 20 31 3b 0a  canstatsOn = 1;.
34fd0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
34fe0 72 63 6d 70 28 7a 2c 22 2d 62 61 63 6b 73 6c 61  rcmp(z,"-backsla
34ff0 73 68 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  sh")==0 ){.     
35000 20 2f 2a 20 55 6e 64 6f 63 75 6d 65 6e 74 65 64   /* Undocumented
35010 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70   command-line op
35020 74 69 6f 6e 3a 20 2d 62 61 63 6b 73 6c 61 73 68  tion: -backslash
35030 0a 20 20 20 20 20 20 2a 2a 20 43 61 75 73 65 73  .      ** Causes
35040 20 43 2d 73 74 79 6c 65 20 62 61 63 6b 73 6c 61   C-style backsla
35050 73 68 20 65 73 63 61 70 65 73 20 74 6f 20 62 65  sh escapes to be
35060 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 53 51   evaluated in SQ
35070 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 20  L statements.   
35080 20 20 20 2a 2a 20 70 72 69 6f 72 20 74 6f 20 73     ** prior to s
35090 65 6e 64 69 6e 67 20 74 68 65 20 53 51 4c 20 69  ending the SQL i
350a0 6e 74 6f 20 53 51 4c 69 74 65 2e 20 20 55 73 65  nto SQLite.  Use
350b0 66 75 6c 20 66 6f 72 20 69 6e 6a 65 63 74 69 6e  ful for injectin
350c0 67 0a 20 20 20 20 20 20 2a 2a 20 63 72 61 7a 79  g.      ** crazy
350d0 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 6d 69   bytes in the mi
350e0 64 64 6c 65 20 6f 66 20 53 51 4c 20 73 74 61 74  ddle of SQL stat
350f0 65 6d 65 6e 74 73 20 66 6f 72 20 74 65 73 74 69  ements for testi
35100 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67  ng and debugging
35110 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
35120 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28 26 64   ShellSetFlag(&d
35130 61 74 61 2c 20 53 48 46 4c 47 5f 42 61 63 6b 73  ata, SHFLG_Backs
35140 6c 61 73 68 29 3b 0a 20 20 20 20 7d 65 6c 73 65  lash);.    }else
35150 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
35160 62 61 69 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  bail")==0 ){.   
35170 20 20 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72     bail_on_error
35180 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
35190 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76  if( strcmp(z,"-v
351a0 65 72 73 69 6f 6e 22 29 3d 3d 30 20 29 7b 0a 20  ersion")==0 ){. 
351b0 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 20       printf("%s 
351c0 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 6c  %s\n", sqlite3_l
351d0 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c  ibversion(), sql
351e0 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 29  ite3_sourceid())
351f0 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ;.      return 0
35200 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
35210 73 74 72 63 6d 70 28 7a 2c 22 2d 69 6e 74 65 72  strcmp(z,"-inter
35220 61 63 74 69 76 65 22 29 3d 3d 30 20 29 7b 0a 20  active")==0 ){. 
35230 20 20 20 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e       stdin_is_in
35240 74 65 72 61 63 74 69 76 65 20 3d 20 31 3b 0a 20  teractive = 1;. 
35250 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
35260 63 6d 70 28 7a 2c 22 2d 62 61 74 63 68 22 29 3d  cmp(z,"-batch")=
35270 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 74 64 69  =0 ){.      stdi
35280 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65  n_is_interactive
35290 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 0;.    }else 
352a0 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68  if( strcmp(z,"-h
352b0 65 61 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  eap")==0 ){.    
352c0 20 20 69 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65    i++;.    }else
352d0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
352e0 73 63 72 61 74 63 68 22 29 3d 3d 30 20 29 7b 0a  scratch")==0 ){.
352f0 20 20 20 20 20 20 69 2b 3d 32 3b 0a 20 20 20 20        i+=2;.    
35300 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
35310 28 7a 2c 22 2d 70 61 67 65 63 61 63 68 65 22 29  (z,"-pagecache")
35320 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 3d  ==0 ){.      i+=
35330 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  2;.    }else if(
35340 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6c 6f 6f 6b   strcmp(z,"-look
35350 61 73 69 64 65 22 29 3d 3d 30 20 29 7b 0a 20 20  aside")==0 ){.  
35360 20 20 20 20 69 2b 3d 32 3b 0a 20 20 20 20 7d 65      i+=2;.    }e
35370 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
35380 2c 22 2d 6d 6d 61 70 22 29 3d 3d 30 20 29 7b 0a  ,"-mmap")==0 ){.
35390 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 7d        i++;.    }
353a0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
353b0 7a 2c 22 2d 76 66 73 22 29 3d 3d 30 20 29 7b 0a  z,"-vfs")==0 ){.
353c0 20 20 20 20 20 20 69 2b 2b 3b 0a 23 69 66 64 65        i++;.#ifde
353d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
353e0 56 46 53 54 52 41 43 45 0a 20 20 20 20 7d 65 6c  VFSTRACE.    }el
353f0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
35400 22 2d 76 66 73 74 72 61 63 65 22 29 3d 3d 30 20  "-vfstrace")==0 
35410 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 23 65  ){.      i++;.#e
35420 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
35430 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 50  TE_ENABLE_MULTIP
35440 4c 45 58 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  LEX.    }else if
35450 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d 75 6c  ( strcmp(z,"-mul
35460 74 69 70 6c 65 78 22 29 3d 3d 30 20 29 7b 0a 20  tiplex")==0 ){. 
35470 20 20 20 20 20 69 2b 2b 3b 0a 23 65 6e 64 69 66       i++;.#endif
35480 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
35490 74 72 63 6d 70 28 7a 2c 22 2d 68 65 6c 70 22 29  trcmp(z,"-help")
354a0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 73 61  ==0 ){.      usa
354b0 67 65 28 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ge(1);.    }else
354c0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
354d0 63 6d 64 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  cmd")==0 ){.    
354e0 20 20 2f 2a 20 52 75 6e 20 63 6f 6d 6d 61 6e 64    /* Run command
354f0 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 20 2d 63  s that follow -c
35500 6d 64 20 66 69 72 73 74 20 61 6e 64 20 73 65 70  md first and sep
35510 61 72 61 74 65 6c 79 20 66 72 6f 6d 20 63 6f 6d  arately from com
35520 6d 61 6e 64 73 0a 20 20 20 20 20 20 2a 2a 20 74  mands.      ** t
35530 68 61 74 20 73 69 6d 70 6c 79 20 61 70 70 65 61  hat simply appea
35540 72 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  r on the command
35550 2d 6c 69 6e 65 2e 20 20 54 68 69 73 20 73 65 65  -line.  This see
35560 6d 73 20 67 6f 6f 66 79 2e 20 20 49 74 20 77 6f  ms goofy.  It wo
35570 75 6c 64 0a 20 20 20 20 20 20 2a 2a 20 62 65 20  uld.      ** be 
35580 62 65 74 74 65 72 20 69 66 20 61 6c 6c 20 63 6f  better if all co
35590 6d 6d 61 6e 64 73 20 72 61 6e 20 69 6e 20 74 68  mmands ran in th
355a0 65 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65  e order that the
355b0 79 20 61 70 70 65 61 72 2e 20 20 42 75 74 0a 20  y appear.  But. 
355c0 20 20 20 20 20 2a 2a 20 77 65 20 72 65 74 61 69       ** we retai
355d0 6e 20 74 68 65 20 67 6f 6f 66 79 20 62 65 68 61  n the goofy beha
355e0 76 69 6f 72 20 66 6f 72 20 68 69 73 74 6f 72 69  vior for histori
355f0 63 61 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  cal compatibilit
35600 79 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  y. */.      if( 
35610 69 3d 3d 61 72 67 63 2d 31 20 29 20 62 72 65 61  i==argc-1 ) brea
35620 6b 3b 0a 20 20 20 20 20 20 7a 20 3d 20 63 6d 64  k;.      z = cmd
35630 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
35640 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
35650 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d  ;.      if( z[0]
35660 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 20  =='.' ){.       
35670 20 72 63 20 3d 20 64 6f 5f 6d 65 74 61 5f 63 6f   rc = do_meta_co
35680 6d 6d 61 6e 64 28 7a 2c 20 26 64 61 74 61 29 3b  mmand(z, &data);
35690 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 20  .        if( rc 
356a0 26 26 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72  && bail_on_error
356b0 20 29 20 72 65 74 75 72 6e 20 72 63 3d 3d 32 20   ) return rc==2 
356c0 3f 20 30 20 3a 20 72 63 3b 0a 20 20 20 20 20 20  ? 0 : rc;.      
356d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6f  }else{.        o
356e0 70 65 6e 5f 64 62 28 26 64 61 74 61 2c 20 30 29  pen_db(&data, 0)
356f0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
35700 68 65 6c 6c 5f 65 78 65 63 28 64 61 74 61 2e 64  hell_exec(data.d
35710 62 2c 20 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c  b, z, shell_call
35720 62 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45  back, &data, &zE
35730 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20  rrMsg);.        
35740 69 66 28 20 7a 45 72 72 4d 73 67 21 3d 30 20 29  if( zErrMsg!=0 )
35750 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38  {.          utf8
35760 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
35770 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45  Error: %s\n", zE
35780 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20  rrMsg);.        
35790 20 20 69 66 28 20 62 61 69 6c 5f 6f 6e 5f 65 72    if( bail_on_er
357a0 72 6f 72 20 29 20 72 65 74 75 72 6e 20 72 63 21  ror ) return rc!
357b0 3d 30 20 3f 20 72 63 20 3a 20 31 3b 0a 20 20 20  =0 ? rc : 1;.   
357c0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72       }else if( r
357d0 63 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  c!=0 ){.        
357e0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
357f0 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 75 6e 61  derr,"Error: una
35800 62 6c 65 20 74 6f 20 70 72 6f 63 65 73 73 20 53  ble to process S
35810 51 4c 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 29  QL \"%s\"\n", z)
35820 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
35830 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 29 20  bail_on_error ) 
35840 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 20  return rc;.     
35850 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
35860 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74   }else{.      ut
35870 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
35880 2c 22 25 73 3a 20 45 72 72 6f 72 3a 20 75 6e 6b  ,"%s: Error: unk
35890 6e 6f 77 6e 20 6f 70 74 69 6f 6e 3a 20 25 73 5c  nown option: %s\
358a0 6e 22 2c 20 41 72 67 76 30 2c 20 7a 29 3b 0a 20  n", Argv0, z);. 
358b0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
358c0 73 74 64 65 72 72 2c 22 55 73 65 20 2d 68 65 6c  stderr,"Use -hel
358d0 70 20 66 6f 72 20 61 20 6c 69 73 74 20 6f 66 20  p for a list of 
358e0 6f 70 74 69 6f 6e 73 2e 5c 6e 22 29 3b 0a 20 20  options.\n");.  
358f0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
35900 20 20 7d 0a 20 20 20 20 64 61 74 61 2e 63 4d 6f    }.    data.cMo
35910 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 3b 0a  de = data.mode;.
35920 20 20 7d 0a 0a 20 20 69 66 28 20 21 72 65 61 64    }..  if( !read
35930 53 74 64 69 6e 20 29 7b 0a 20 20 20 20 2f 2a 20  Stdin ){.    /* 
35940 52 75 6e 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74  Run all argument
35950 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 62 65  s that do not be
35960 67 69 6e 20 77 69 74 68 20 27 2d 27 20 61 73 20  gin with '-' as 
35970 69 66 20 74 68 65 79 20 77 65 72 65 20 73 65 70  if they were sep
35980 61 72 61 74 65 0a 20 20 20 20 2a 2a 20 63 6f 6d  arate.    ** com
35990 6d 61 6e 64 2d 6c 69 6e 65 20 69 6e 70 75 74 73  mand-line inputs
359a0 2c 20 65 78 63 65 70 74 20 66 6f 72 20 74 68 65  , except for the
359b0 20 61 72 67 54 6f 53 6b 69 70 20 61 72 67 75 6d   argToSkip argum
359c0 65 6e 74 20 77 68 69 63 68 20 63 6f 6e 74 61 69  ent which contai
359d0 6e 73 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61  ns.    ** the da
359e0 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65 2e  tabase filename.
359f0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  .    */.    for(
35a00 69 3d 30 3b 20 69 3c 6e 43 6d 64 3b 20 69 2b 2b  i=0; i<nCmd; i++
35a10 29 7b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 43  ){.      if( azC
35a20 6d 64 5b 69 5d 5b 30 5d 3d 3d 27 2e 27 20 29 7b  md[i][0]=='.' ){
35a30 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 64 6f  .        rc = do
35a40 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28 61 7a  _meta_command(az
35a50 43 6d 64 5b 69 5d 2c 20 26 64 61 74 61 29 3b 0a  Cmd[i], &data);.
35a60 20 20 20 20 20 20 20 20 69 66 28 20 72 63 20 29          if( rc )
35a70 20 72 65 74 75 72 6e 20 72 63 3d 3d 32 20 3f 20   return rc==2 ? 
35a80 30 20 3a 20 72 63 3b 0a 20 20 20 20 20 20 7d 65  0 : rc;.      }e
35a90 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6f 70 65  lse{.        ope
35aa0 6e 5f 64 62 28 26 64 61 74 61 2c 20 30 29 3b 0a  n_db(&data, 0);.
35ab0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 68 65          rc = she
35ac0 6c 6c 5f 65 78 65 63 28 64 61 74 61 2e 64 62 2c  ll_exec(data.db,
35ad0 20 61 7a 43 6d 64 5b 69 5d 2c 20 73 68 65 6c 6c   azCmd[i], shell
35ae0 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61  _callback, &data
35af0 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  , &zErrMsg);.   
35b00 20 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67       if( zErrMsg
35b10 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
35b20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
35b30 65 72 72 2c 22 45 72 72 6f 72 3a 20 25 73 5c 6e  err,"Error: %s\n
35b40 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  ", zErrMsg);.   
35b50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
35b60 21 3d 30 20 3f 20 72 63 20 3a 20 31 3b 0a 20 20  !=0 ? rc : 1;.  
35b70 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
35b80 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  rc!=0 ){.       
35b90 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
35ba0 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 75 6e  tderr,"Error: un
35bb0 61 62 6c 65 20 74 6f 20 70 72 6f 63 65 73 73 20  able to process 
35bc0 53 51 4c 3a 20 25 73 5c 6e 22 2c 20 61 7a 43 6d  SQL: %s\n", azCm
35bd0 64 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  d[i]);.         
35be0 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20   return rc;.    
35bf0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
35c00 20 20 7d 0a 20 20 20 20 66 72 65 65 28 61 7a 43    }.    free(azC
35c10 6d 64 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  md);.  }else{.  
35c20 20 20 2f 2a 20 52 75 6e 20 63 6f 6d 6d 61 6e 64    /* Run command
35c30 73 20 72 65 63 65 69 76 65 64 20 66 72 6f 6d 20  s received from 
35c40 73 74 61 6e 64 61 72 64 20 69 6e 70 75 74 0a 20  standard input. 
35c50 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74     */.    if( st
35c60 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69  din_is_interacti
35c70 76 65 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72  ve ){.      char
35c80 20 2a 7a 48 6f 6d 65 3b 0a 20 20 20 20 20 20 63   *zHome;.      c
35c90 68 61 72 20 2a 7a 48 69 73 74 6f 72 79 20 3d 20  har *zHistory = 
35ca0 30 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69  0;.      int nHi
35cb0 73 74 6f 72 79 3b 0a 20 20 20 20 20 20 70 72 69  story;.      pri
35cc0 6e 74 66 28 0a 20 20 20 20 20 20 20 20 22 53 51  ntf(.        "SQ
35cd0 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 25 73 20  Lite version %s 
35ce0 25 2e 31 39 73 5c 6e 22 20 2f 2a 65 78 74 72 61  %.19s\n" /*extra
35cf0 2d 76 65 72 73 69 6f 6e 2d 69 6e 66 6f 2a 2f 0a  -version-info*/.
35d00 20 20 20 20 20 20 20 20 22 45 6e 74 65 72 20 5c          "Enter \
35d10 22 2e 68 65 6c 70 5c 22 20 66 6f 72 20 75 73 61  ".help\" for usa
35d20 67 65 20 68 69 6e 74 73 2e 5c 6e 22 2c 0a 20 20  ge hints.\n",.  
35d30 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69        sqlite3_li
35d40 62 76 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69  bversion(), sqli
35d50 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 0a 20  te3_sourceid(). 
35d60 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 69 66       );.      if
35d70 28 20 77 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62  ( warnInmemoryDb
35d80 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e   ){.        prin
35d90 74 66 28 22 43 6f 6e 6e 65 63 74 65 64 20 74 6f  tf("Connected to
35da0 20 61 20 22 29 3b 0a 20 20 20 20 20 20 20 20 70   a ");.        p
35db0 72 69 6e 74 42 6f 6c 64 28 22 74 72 61 6e 73 69  rintBold("transi
35dc0 65 6e 74 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  ent in-memory da
35dd0 74 61 62 61 73 65 22 29 3b 0a 20 20 20 20 20 20  tabase");.      
35de0 20 20 70 72 69 6e 74 66 28 22 2e 5c 6e 55 73 65    printf(".\nUse
35df0 20 5c 22 2e 6f 70 65 6e 20 46 49 4c 45 4e 41 4d   \".open FILENAM
35e00 45 5c 22 20 74 6f 20 72 65 6f 70 65 6e 20 6f 6e  E\" to reopen on
35e10 20 61 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   a ".           
35e20 20 20 20 20 22 70 65 72 73 69 73 74 65 6e 74 20      "persistent 
35e30 64 61 74 61 62 61 73 65 2e 5c 6e 22 29 3b 0a 20  database.\n");. 
35e40 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 48 6f       }.      zHo
35e50 6d 65 20 3d 20 66 69 6e 64 5f 68 6f 6d 65 5f 64  me = find_home_d
35e60 69 72 28 30 29 3b 0a 20 20 20 20 20 20 69 66 28  ir(0);.      if(
35e70 20 7a 48 6f 6d 65 20 29 7b 0a 20 20 20 20 20 20   zHome ){.      
35e80 20 20 6e 48 69 73 74 6f 72 79 20 3d 20 73 74 72    nHistory = str
35e90 6c 65 6e 33 30 28 7a 48 6f 6d 65 29 20 2b 20 32  len30(zHome) + 2
35ea0 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  0;.        if( (
35eb0 7a 48 69 73 74 6f 72 79 20 3d 20 6d 61 6c 6c 6f  zHistory = mallo
35ec0 63 28 6e 48 69 73 74 6f 72 79 29 29 21 3d 30 20  c(nHistory))!=0 
35ed0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
35ee0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 48  ite3_snprintf(nH
35ef0 69 73 74 6f 72 79 2c 20 7a 48 69 73 74 6f 72 79  istory, zHistory
35f00 2c 22 25 73 2f 2e 73 71 6c 69 74 65 5f 68 69 73  ,"%s/.sqlite_his
35f10 74 6f 72 79 22 2c 20 7a 48 6f 6d 65 29 3b 0a 20  tory", zHome);. 
35f20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
35f30 0a 20 20 20 20 20 20 69 66 28 20 7a 48 69 73 74  .      if( zHist
35f40 6f 72 79 20 29 7b 20 73 68 65 6c 6c 5f 72 65 61  ory ){ shell_rea
35f50 64 5f 68 69 73 74 6f 72 79 28 7a 48 69 73 74 6f  d_history(zHisto
35f60 72 79 29 3b 20 7d 0a 20 20 20 20 20 20 72 63 20  ry); }.      rc 
35f70 3d 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28  = process_input(
35f80 26 64 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  &data, 0);.     
35f90 20 69 66 28 20 7a 48 69 73 74 6f 72 79 20 29 7b   if( zHistory ){
35fa0 0a 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f 73  .        shell_s
35fb0 74 69 66 6c 65 5f 68 69 73 74 6f 72 79 28 31 30  tifle_history(10
35fc0 30 29 3b 0a 20 20 20 20 20 20 20 20 73 68 65 6c  0);.        shel
35fd0 6c 5f 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28  l_write_history(
35fe0 7a 48 69 73 74 6f 72 79 29 3b 0a 20 20 20 20 20  zHistory);.     
35ff0 20 20 20 66 72 65 65 28 7a 48 69 73 74 6f 72 79     free(zHistory
36000 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
36010 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
36020 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28 26   process_input(&
36030 64 61 74 61 2c 20 73 74 64 69 6e 29 3b 0a 20 20  data, stdin);.  
36040 20 20 7d 0a 20 20 7d 0a 20 20 73 65 74 5f 74 61    }.  }.  set_ta
36050 62 6c 65 5f 6e 61 6d 65 28 26 64 61 74 61 2c 20  ble_name(&data, 
36060 30 29 3b 0a 20 20 69 66 28 20 64 61 74 61 2e 64  0);.  if( data.d
36070 62 20 29 7b 0a 20 20 20 20 73 65 73 73 69 6f 6e  b ){.    session
36080 5f 63 6c 6f 73 65 5f 61 6c 6c 28 26 64 61 74 61  _close_all(&data
36090 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  );.    sqlite3_c
360a0 6c 6f 73 65 28 64 61 74 61 2e 64 62 29 3b 0a 20  lose(data.db);. 
360b0 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65   }.  sqlite3_fre
360c0 65 28 64 61 74 61 2e 7a 46 72 65 65 4f 6e 43 6c  e(data.zFreeOnCl
360d0 6f 73 65 29 3b 0a 20 20 66 69 6e 64 5f 68 6f 6d  ose);.  find_hom
360e0 65 5f 64 69 72 28 31 29 3b 0a 23 69 66 20 21 53  e_dir(1);.#if !S
360f0 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55  QLITE_SHELL_IS_U
36100 54 46 38 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  TF8.  for(i=0; i
36110 3c 61 72 67 63 3b 20 69 2b 2b 29 20 73 71 6c 69  <argc; i++) sqli
36120 74 65 33 5f 66 72 65 65 28 61 72 67 76 5b 69 5d  te3_free(argv[i]
36130 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
36140 65 28 61 72 67 76 29 3b 0a 23 65 6e 64 69 66 0a  e(argv);.#endif.
36150 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a       return rc;.}.