/ Hex Artifact Content
Login

Artifact 7cea439c3f7f2e4ed6eb4b3a633cd93dccb1349241400de4da0c1291285ed514:


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 74 79 70 65 64 65 66 20 73 71  e3.h".typedef sq
06f0: 6c 69 74 65 33 5f 69 6e 74 36 34 20 69 36 34 3b  lite3_int64 i64;
0700: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 33  .typedef sqlite3
0710: 5f 75 69 6e 74 36 34 20 75 36 34 3b 0a 74 79 70  _uint64 u64;.typ
0720: 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68  edef unsigned ch
0730: 61 72 20 75 38 3b 0a 23 69 66 20 53 51 4c 49 54  ar u8;.#if SQLIT
0740: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
0750: 41 54 49 4f 4e 0a 23 20 69 6e 63 6c 75 64 65 20  ATION.# include 
0760: 22 73 71 6c 69 74 65 33 75 73 65 72 61 75 74 68  "sqlite3userauth
0770: 2e 68 22 0a 23 65 6e 64 69 66 0a 23 69 6e 63 6c  .h".#endif.#incl
0780: 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69  ude <ctype.h>.#i
0790: 6e 63 6c 75 64 65 20 3c 73 74 64 61 72 67 2e 68  nclude <stdarg.h
07a0: 3e 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  >..#if !defined(
07b0: 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65 66 69  _WIN32) && !defi
07c0: 6e 65 64 28 57 49 4e 33 32 29 0a 23 20 69 6e 63  ned(WIN32).# inc
07d0: 6c 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 0a  lude <signal.h>.
07e0: 23 20 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f  # if !defined(__
07f0: 52 54 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e  RTP__) && !defin
0800: 65 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a  ed(_WRS_KERNEL).
0810: 23 20 20 69 6e 63 6c 75 64 65 20 3c 70 77 64 2e  #  include <pwd.
0820: 68 3e 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  h>.# endif.#endi
0830: 66 0a 23 69 66 20 28 21 64 65 66 69 6e 65 64 28  f.#if (!defined(
0840: 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65 66 69  _WIN32) && !defi
0850: 6e 65 64 28 57 49 4e 33 32 29 29 20 7c 7c 20 64  ned(WIN32)) || d
0860: 65 66 69 6e 65 64 28 5f 5f 4d 49 4e 47 57 33 32  efined(__MINGW32
0870: 5f 5f 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 75  __).# include <u
0880: 6e 69 73 74 64 2e 68 3e 0a 23 20 69 6e 63 6c 75  nistd.h>.# inclu
0890: 64 65 20 3c 64 69 72 65 6e 74 2e 68 3e 0a 23 20  de <dirent.h>.# 
08a0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e  if defined(__MIN
08b0: 47 57 33 32 5f 5f 29 0a 23 20 20 64 65 66 69 6e  GW32__).#  defin
08c0: 65 20 44 49 52 45 4e 54 20 64 69 72 65 6e 74 0a  e DIRENT dirent.
08d0: 23 20 20 69 66 6e 64 65 66 20 53 5f 49 53 4c 4e  #  ifndef S_ISLN
08e0: 4b 0a 23 20 20 20 64 65 66 69 6e 65 20 53 5f 49  K.#   define S_I
08f0: 53 4c 4e 4b 28 6d 6f 64 65 29 20 28 30 29 0a 23  SLNK(mode) (0).#
0900: 20 20 65 6e 64 69 66 0a 23 20 65 6e 64 69 66 0a    endif.# endif.
0910: 23 65 6e 64 69 66 0a 23 69 6e 63 6c 75 64 65 20  #endif.#include 
0920: 3c 73 79 73 2f 74 79 70 65 73 2e 68 3e 0a 23 69  <sys/types.h>.#i
0930: 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 74 61 74  nclude <sys/stat
0940: 2e 68 3e 0a 0a 23 69 66 20 48 41 56 45 5f 52 45  .h>..#if HAVE_RE
0950: 41 44 4c 49 4e 45 0a 23 20 69 6e 63 6c 75 64 65  ADLINE.# include
0960: 20 3c 72 65 61 64 6c 69 6e 65 2f 72 65 61 64 6c   <readline/readl
0970: 69 6e 65 2e 68 3e 0a 23 20 69 6e 63 6c 75 64 65  ine.h>.# include
0980: 20 3c 72 65 61 64 6c 69 6e 65 2f 68 69 73 74 6f   <readline/histo
0990: 72 79 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 23 69  ry.h>.#endif..#i
09a0: 66 20 48 41 56 45 5f 45 44 49 54 4c 49 4e 45 0a  f HAVE_EDITLINE.
09b0: 23 20 69 6e 63 6c 75 64 65 20 3c 65 64 69 74 6c  # include <editl
09c0: 69 6e 65 2f 72 65 61 64 6c 69 6e 65 2e 68 3e 0a  ine/readline.h>.
09d0: 23 65 6e 64 69 66 0a 0a 23 69 66 20 48 41 56 45  #endif..#if HAVE
09e0: 5f 45 44 49 54 4c 49 4e 45 20 7c 7c 20 48 41 56  _EDITLINE || HAV
09f0: 45 5f 52 45 41 44 4c 49 4e 45 0a 0a 23 20 64 65  E_READLINE..# de
0a00: 66 69 6e 65 20 73 68 65 6c 6c 5f 61 64 64 5f 68  fine shell_add_h
0a10: 69 73 74 6f 72 79 28 58 29 20 61 64 64 5f 68 69  istory(X) add_hi
0a20: 73 74 6f 72 79 28 58 29 0a 23 20 64 65 66 69 6e  story(X).# defin
0a30: 65 20 73 68 65 6c 6c 5f 72 65 61 64 5f 68 69 73  e shell_read_his
0a40: 74 6f 72 79 28 58 29 20 72 65 61 64 5f 68 69 73  tory(X) read_his
0a50: 74 6f 72 79 28 58 29 0a 23 20 64 65 66 69 6e 65  tory(X).# define
0a60: 20 73 68 65 6c 6c 5f 77 72 69 74 65 5f 68 69 73   shell_write_his
0a70: 74 6f 72 79 28 58 29 20 77 72 69 74 65 5f 68 69  tory(X) write_hi
0a80: 73 74 6f 72 79 28 58 29 0a 23 20 64 65 66 69 6e  story(X).# defin
0a90: 65 20 73 68 65 6c 6c 5f 73 74 69 66 6c 65 5f 68  e shell_stifle_h
0aa0: 69 73 74 6f 72 79 28 58 29 20 73 74 69 66 6c 65  istory(X) stifle
0ab0: 5f 68 69 73 74 6f 72 79 28 58 29 0a 23 20 64 65  _history(X).# de
0ac0: 66 69 6e 65 20 73 68 65 6c 6c 5f 72 65 61 64 6c  fine shell_readl
0ad0: 69 6e 65 28 58 29 20 72 65 61 64 6c 69 6e 65 28  ine(X) readline(
0ae0: 58 29 0a 0a 23 65 6c 69 66 20 48 41 56 45 5f 4c  X)..#elif HAVE_L
0af0: 49 4e 45 4e 4f 49 53 45 0a 0a 23 20 69 6e 63 6c  INENOISE..# incl
0b00: 75 64 65 20 22 6c 69 6e 65 6e 6f 69 73 65 2e 68  ude "linenoise.h
0b10: 22 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c  ".# define shell
0b20: 5f 61 64 64 5f 68 69 73 74 6f 72 79 28 58 29 20  _add_history(X) 
0b30: 6c 69 6e 65 6e 6f 69 73 65 48 69 73 74 6f 72 79  linenoiseHistory
0b40: 41 64 64 28 58 29 0a 23 20 64 65 66 69 6e 65 20  Add(X).# define 
0b50: 73 68 65 6c 6c 5f 72 65 61 64 5f 68 69 73 74 6f  shell_read_histo
0b60: 72 79 28 58 29 20 6c 69 6e 65 6e 6f 69 73 65 48  ry(X) linenoiseH
0b70: 69 73 74 6f 72 79 4c 6f 61 64 28 58 29 0a 23 20  istoryLoad(X).# 
0b80: 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 77 72 69  define shell_wri
0b90: 74 65 5f 68 69 73 74 6f 72 79 28 58 29 20 6c 69  te_history(X) li
0ba0: 6e 65 6e 6f 69 73 65 48 69 73 74 6f 72 79 53 61  nenoiseHistorySa
0bb0: 76 65 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  ve(X).# define s
0bc0: 68 65 6c 6c 5f 73 74 69 66 6c 65 5f 68 69 73 74  hell_stifle_hist
0bd0: 6f 72 79 28 58 29 20 6c 69 6e 65 6e 6f 69 73 65  ory(X) linenoise
0be0: 48 69 73 74 6f 72 79 53 65 74 4d 61 78 4c 65 6e  HistorySetMaxLen
0bf0: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65  (X).# define she
0c00: 6c 6c 5f 72 65 61 64 6c 69 6e 65 28 58 29 20 6c  ll_readline(X) l
0c10: 69 6e 65 6e 6f 69 73 65 28 58 29 0a 0a 23 65 6c  inenoise(X)..#el
0c20: 73 65 0a 0a 23 20 64 65 66 69 6e 65 20 73 68 65  se..# define she
0c30: 6c 6c 5f 72 65 61 64 5f 68 69 73 74 6f 72 79 28  ll_read_history(
0c40: 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c  X).# define shel
0c50: 6c 5f 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28  l_write_history(
0c60: 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c  X).# define shel
0c70: 6c 5f 73 74 69 66 6c 65 5f 68 69 73 74 6f 72 79  l_stifle_history
0c80: 28 58 29 0a 0a 23 20 64 65 66 69 6e 65 20 53 48  (X)..# define SH
0c90: 45 4c 4c 5f 55 53 45 5f 4c 4f 43 41 4c 5f 47 45  ELL_USE_LOCAL_GE
0ca0: 54 4c 49 4e 45 20 31 0a 23 65 6e 64 69 66 0a 0a  TLINE 1.#endif..
0cb0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49  .#if defined(_WI
0cc0: 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  N32) || defined(
0cd0: 57 49 4e 33 32 29 0a 23 20 69 6e 63 6c 75 64 65  WIN32).# include
0ce0: 20 3c 69 6f 2e 68 3e 0a 23 20 69 6e 63 6c 75 64   <io.h>.# includ
0cf0: 65 20 3c 66 63 6e 74 6c 2e 68 3e 0a 23 20 64 65  e <fcntl.h>.# de
0d00: 66 69 6e 65 20 69 73 61 74 74 79 28 68 29 20 5f  fine isatty(h) _
0d10: 69 73 61 74 74 79 28 68 29 0a 23 20 69 66 6e 64  isatty(h).# ifnd
0d20: 65 66 20 61 63 63 65 73 73 0a 23 20 20 64 65 66  ef access.#  def
0d30: 69 6e 65 20 61 63 63 65 73 73 28 66 2c 6d 29 20  ine access(f,m) 
0d40: 5f 61 63 63 65 73 73 28 28 66 29 2c 28 6d 29 29  _access((f),(m))
0d50: 0a 23 20 65 6e 64 69 66 0a 23 20 75 6e 64 65 66  .# endif.# undef
0d60: 20 70 6f 70 65 6e 0a 23 20 64 65 66 69 6e 65 20   popen.# define 
0d70: 70 6f 70 65 6e 20 5f 70 6f 70 65 6e 0a 23 20 75  popen _popen.# u
0d80: 6e 64 65 66 20 70 63 6c 6f 73 65 0a 23 20 64 65  ndef pclose.# de
0d90: 66 69 6e 65 20 70 63 6c 6f 73 65 20 5f 70 63 6c  fine pclose _pcl
0da0: 6f 73 65 0a 23 65 6c 73 65 0a 20 2f 2a 20 4d 61  ose.#else. /* Ma
0db0: 6b 65 20 73 75 72 65 20 69 73 61 74 74 79 28 29  ke sure isatty()
0dc0: 20 68 61 73 20 61 20 70 72 6f 74 6f 74 79 70 65   has a prototype
0dd0: 2e 20 2a 2f 0a 20 65 78 74 65 72 6e 20 69 6e 74  . */. extern int
0de0: 20 69 73 61 74 74 79 28 69 6e 74 29 3b 0a 0a 23   isatty(int);..#
0df0: 20 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 52   if !defined(__R
0e00: 54 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  TP__) && !define
0e10: 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a 20  d(_WRS_KERNEL). 
0e20: 20 2f 2a 20 70 6f 70 65 6e 20 61 6e 64 20 70 63   /* popen and pc
0e30: 6c 6f 73 65 20 61 72 65 20 6e 6f 74 20 43 38 39  lose are not C89
0e40: 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 20 73   functions and s
0e50: 6f 20 61 72 65 0a 20 20 2a 2a 20 73 6f 6d 65 74  o are.  ** somet
0e60: 69 6d 65 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  imes omitted fro
0e70: 6d 20 74 68 65 20 3c 73 74 64 69 6f 2e 68 3e 20  m the <stdio.h> 
0e80: 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 65 78 74  header */.   ext
0e90: 65 72 6e 20 46 49 4c 45 20 2a 70 6f 70 65 6e 28  ern FILE *popen(
0ea0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
0eb0: 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 65 78 74  t char*);.   ext
0ec0: 65 72 6e 20 69 6e 74 20 70 63 6c 6f 73 65 28 46  ern int pclose(F
0ed0: 49 4c 45 2a 29 3b 0a 23 20 65 6c 73 65 0a 23 20  ILE*);.# else.# 
0ee0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
0ef0: 4d 49 54 5f 50 4f 50 45 4e 20 31 0a 23 20 65 6e  MIT_POPEN 1.# en
0f00: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  dif.#endif..#if 
0f10: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57  defined(_WIN32_W
0f20: 43 45 29 0a 2f 2a 20 57 69 6e 64 6f 77 73 20 43  CE)./* Windows C
0f30: 45 20 28 61 72 6d 2d 77 69 6e 63 65 2d 6d 69 6e  E (arm-wince-min
0f40: 67 77 33 32 63 65 2d 67 63 63 29 20 64 6f 65 73  gw32ce-gcc) does
0f50: 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 69 73 61   not provide isa
0f60: 74 74 79 28 29 0a 20 2a 20 74 68 75 73 20 77 65  tty(). * thus we
0f70: 20 61 6c 77 61 79 73 20 61 73 73 75 6d 65 20 74   always assume t
0f80: 68 61 74 20 77 65 20 68 61 76 65 20 61 20 63 6f  hat we have a co
0f90: 6e 73 6f 6c 65 2e 20 54 68 61 74 20 63 61 6e 20  nsole. That can 
0fa0: 62 65 0a 20 2a 20 6f 76 65 72 72 69 64 64 65 6e  be. * overridden
0fb0: 20 77 69 74 68 20 74 68 65 20 2d 62 61 74 63 68   with the -batch
0fc0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
0fd0: 74 69 6f 6e 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e  tion.. */.#defin
0fe0: 65 20 69 73 61 74 74 79 28 78 29 20 31 0a 23 65  e isatty(x) 1.#e
0ff0: 6e 64 69 66 0a 0a 2f 2a 20 63 74 79 70 65 20 6d  ndif../* ctype m
1000: 61 63 72 6f 73 20 74 68 61 74 20 77 6f 72 6b 20  acros that work 
1010: 77 69 74 68 20 73 69 67 6e 65 64 20 63 68 61 72  with signed char
1020: 61 63 74 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  acters */.#defin
1030: 65 20 49 73 53 70 61 63 65 28 58 29 20 20 69 73  e IsSpace(X)  is
1040: 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20  space((unsigned 
1050: 63 68 61 72 29 58 29 0a 23 64 65 66 69 6e 65 20  char)X).#define 
1060: 49 73 44 69 67 69 74 28 58 29 20 20 69 73 64 69  IsDigit(X)  isdi
1070: 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
1080: 61 72 29 58 29 0a 23 64 65 66 69 6e 65 20 54 6f  ar)X).#define To
1090: 4c 6f 77 65 72 28 58 29 20 20 28 63 68 61 72 29  Lower(X)  (char)
10a0: 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
10b0: 64 20 63 68 61 72 29 58 29 0a 0a 23 69 66 20 64  d char)X)..#if d
10c0: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c  efined(_WIN32) |
10d0: 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29  | defined(WIN32)
10e0: 0a 23 69 6e 63 6c 75 64 65 20 3c 77 69 6e 64 6f  .#include <windo
10f0: 77 73 2e 68 3e 0a 0a 2f 2a 20 73 74 72 69 6e 67  ws.h>../* string
1100: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 72 6f 75 74   conversion rout
1110: 69 6e 65 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64  ines only needed
1120: 20 6f 6e 20 57 69 6e 33 32 20 2a 2f 0a 65 78 74   on Win32 */.ext
1130: 65 72 6e 20 63 68 61 72 20 2a 73 71 6c 69 74 65  ern char *sqlite
1140: 33 5f 77 69 6e 33 32 5f 75 6e 69 63 6f 64 65 5f  3_win32_unicode_
1150: 74 6f 5f 75 74 66 38 28 4c 50 43 57 53 54 52 29  to_utf8(LPCWSTR)
1160: 3b 0a 65 78 74 65 72 6e 20 63 68 61 72 20 2a 73  ;.extern char *s
1170: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 6d 62 63  qlite3_win32_mbc
1180: 73 5f 74 6f 5f 75 74 66 38 5f 76 32 28 63 6f 6e  s_to_utf8_v2(con
1190: 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
11a0: 0a 65 78 74 65 72 6e 20 63 68 61 72 20 2a 73 71  .extern char *sq
11b0: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74 66 38  lite3_win32_utf8
11c0: 5f 74 6f 5f 6d 62 63 73 5f 76 32 28 63 6f 6e 73  _to_mbcs_v2(cons
11d0: 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
11e0: 65 78 74 65 72 6e 20 4c 50 57 53 54 52 20 73 71  extern LPWSTR sq
11f0: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74 66 38  lite3_win32_utf8
1200: 5f 74 6f 5f 75 6e 69 63 6f 64 65 28 63 6f 6e 73  _to_unicode(cons
1210: 74 20 63 68 61 72 20 2a 7a 54 65 78 74 29 3b 0a  t char *zText);.
1220: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 6e 20 57 69  #endif../* On Wi
1230: 6e 64 6f 77 73 2c 20 77 65 20 6e 6f 72 6d 61 6c  ndows, we normal
1240: 6c 79 20 72 75 6e 20 77 69 74 68 20 6f 75 74 70  ly run with outp
1250: 75 74 20 6d 6f 64 65 20 6f 66 20 54 45 58 54 20  ut mode of TEXT 
1260: 73 6f 20 74 68 61 74 20 5c 6e 20 63 68 61 72 61  so that \n chara
1270: 63 74 65 72 73 0a 2a 2a 20 61 72 65 20 61 75 74  cters.** are aut
1280: 6f 6d 61 74 69 63 61 6c 6c 79 20 74 72 61 6e 73  omatically trans
1290: 6c 61 74 65 64 20 69 6e 74 6f 20 5c 72 5c 6e 2e  lated into \r\n.
12a0: 20 20 48 6f 77 65 76 65 72 2c 20 74 68 69 73 20    However, this 
12b0: 62 65 68 61 76 69 6f 72 20 6e 65 65 64 73 0a 2a  behavior needs.*
12c0: 2a 20 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64  * to be disabled
12d0: 20 69 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 28   in some cases (
12e0: 65 78 3a 20 77 68 65 6e 20 67 65 6e 65 72 61 74  ex: when generat
12f0: 69 6e 67 20 43 53 56 20 6f 75 74 70 75 74 20 61  ing CSV output a
1300: 6e 64 20 77 68 65 6e 0a 2a 2a 20 72 65 6e 64 65  nd when.** rende
1310: 72 69 6e 67 20 71 75 6f 74 65 64 20 73 74 72 69  ring quoted stri
1320: 6e 67 73 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ngs that contain
1330: 20 5c 6e 20 63 68 61 72 61 63 74 65 72 73 29 2e   \n characters).
1340: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a    The following.
1350: 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 61 6b 65  ** routines take
1360: 20 63 61 72 65 20 6f 66 20 74 68 61 74 2e 0a 2a   care of that..*
1370: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57  /.#if defined(_W
1380: 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64  IN32) || defined
1390: 28 57 49 4e 33 32 29 0a 73 74 61 74 69 63 20 76  (WIN32).static v
13a0: 6f 69 64 20 73 65 74 42 69 6e 61 72 79 4d 6f 64  oid setBinaryMod
13b0: 65 28 46 49 4c 45 20 2a 66 69 6c 65 2c 20 69 6e  e(FILE *file, in
13c0: 74 20 69 73 4f 75 74 70 75 74 29 7b 0a 20 20 69  t isOutput){.  i
13d0: 66 28 20 69 73 4f 75 74 70 75 74 20 29 20 66 66  f( isOutput ) ff
13e0: 6c 75 73 68 28 66 69 6c 65 29 3b 0a 20 20 5f 73  lush(file);.  _s
13f0: 65 74 6d 6f 64 65 28 5f 66 69 6c 65 6e 6f 28 66  etmode(_fileno(f
1400: 69 6c 65 29 2c 20 5f 4f 5f 42 49 4e 41 52 59 29  ile), _O_BINARY)
1410: 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ;.}.static void 
1420: 73 65 74 54 65 78 74 4d 6f 64 65 28 46 49 4c 45  setTextMode(FILE
1430: 20 2a 66 69 6c 65 2c 20 69 6e 74 20 69 73 4f 75   *file, int isOu
1440: 74 70 75 74 29 7b 0a 20 20 69 66 28 20 69 73 4f  tput){.  if( isO
1450: 75 74 70 75 74 20 29 20 66 66 6c 75 73 68 28 66  utput ) fflush(f
1460: 69 6c 65 29 3b 0a 20 20 5f 73 65 74 6d 6f 64 65  ile);.  _setmode
1470: 28 5f 66 69 6c 65 6e 6f 28 66 69 6c 65 29 2c 20  (_fileno(file), 
1480: 5f 4f 5f 54 45 58 54 29 3b 0a 7d 0a 23 65 6c 73  _O_TEXT);.}.#els
1490: 65 0a 23 20 64 65 66 69 6e 65 20 73 65 74 42 69  e.# define setBi
14a0: 6e 61 72 79 4d 6f 64 65 28 58 2c 59 29 0a 23 20  naryMode(X,Y).# 
14b0: 64 65 66 69 6e 65 20 73 65 74 54 65 78 74 4d 6f  define setTextMo
14c0: 64 65 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 0a  de(X,Y).#endif..
14d0: 0a 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20  ./* True if the 
14e0: 74 69 6d 65 72 20 69 73 20 65 6e 61 62 6c 65 64  timer is enabled
14f0: 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65   */.static int e
1500: 6e 61 62 6c 65 54 69 6d 65 72 20 3d 20 30 3b 0a  nableTimer = 0;.
1510: 0a 2f 2a 20 52 65 74 75 72 6e 20 74 68 65 20 63  ./* Return the c
1520: 75 72 72 65 6e 74 20 77 61 6c 6c 2d 63 6c 6f 63  urrent wall-cloc
1530: 6b 20 74 69 6d 65 20 2a 2f 0a 73 74 61 74 69 63  k time */.static
1540: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 74   sqlite3_int64 t
1550: 69 6d 65 4f 66 44 61 79 28 76 6f 69 64 29 7b 0a  imeOfDay(void){.
1560: 20 20 73 74 61 74 69 63 20 73 71 6c 69 74 65 33    static sqlite3
1570: 5f 76 66 73 20 2a 63 6c 6f 63 6b 56 66 73 20 3d  _vfs *clockVfs =
1580: 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   0;.  sqlite3_in
1590: 74 36 34 20 74 3b 0a 20 20 69 66 28 20 63 6c 6f  t64 t;.  if( clo
15a0: 63 6b 56 66 73 3d 3d 30 20 29 20 63 6c 6f 63 6b  ckVfs==0 ) clock
15b0: 56 66 73 20 3d 20 73 71 6c 69 74 65 33 5f 76 66  Vfs = sqlite3_vf
15c0: 73 5f 66 69 6e 64 28 30 29 3b 0a 20 20 69 66 28  s_find(0);.  if(
15d0: 20 63 6c 6f 63 6b 56 66 73 2d 3e 69 56 65 72 73   clockVfs->iVers
15e0: 69 6f 6e 3e 3d 32 20 26 26 20 63 6c 6f 63 6b 56  ion>=2 && clockV
15f0: 66 73 2d 3e 78 43 75 72 72 65 6e 74 54 69 6d 65  fs->xCurrentTime
1600: 49 6e 74 36 34 21 3d 30 20 29 7b 0a 20 20 20 20  Int64!=0 ){.    
1610: 63 6c 6f 63 6b 56 66 73 2d 3e 78 43 75 72 72 65  clockVfs->xCurre
1620: 6e 74 54 69 6d 65 49 6e 74 36 34 28 63 6c 6f 63  ntTimeInt64(cloc
1630: 6b 56 66 73 2c 20 26 74 29 3b 0a 20 20 7d 65 6c  kVfs, &t);.  }el
1640: 73 65 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72  se{.    double r
1650: 3b 0a 20 20 20 20 63 6c 6f 63 6b 56 66 73 2d 3e  ;.    clockVfs->
1660: 78 43 75 72 72 65 6e 74 54 69 6d 65 28 63 6c 6f  xCurrentTime(clo
1670: 63 6b 56 66 73 2c 20 26 72 29 3b 0a 20 20 20 20  ckVfs, &r);.    
1680: 74 20 3d 20 28 73 71 6c 69 74 65 33 5f 69 6e 74  t = (sqlite3_int
1690: 36 34 29 28 72 2a 38 36 34 30 30 30 30 30 2e 30  64)(r*86400000.0
16a0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
16b0: 74 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e  t;.}..#if !defin
16c0: 65 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64  ed(_WIN32) && !d
16d0: 65 66 69 6e 65 64 28 57 49 4e 33 32 29 20 26 26  efined(WIN32) &&
16e0: 20 21 64 65 66 69 6e 65 64 28 5f 5f 6d 69 6e 75   !defined(__minu
16f0: 78 29 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73  x).#include <sys
1700: 2f 74 69 6d 65 2e 68 3e 0a 23 69 6e 63 6c 75 64  /time.h>.#includ
1710: 65 20 3c 73 79 73 2f 72 65 73 6f 75 72 63 65 2e  e <sys/resource.
1720: 68 3e 0a 0a 2f 2a 20 56 78 57 6f 72 6b 73 20 64  h>../* VxWorks d
1730: 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
1740: 67 65 74 72 75 73 61 67 65 28 29 20 61 73 20 66  getrusage() as f
1750: 61 72 20 61 73 20 77 65 20 63 61 6e 20 64 65 74  ar as we can det
1760: 65 72 6d 69 6e 65 20 2a 2f 0a 23 69 66 20 64 65  ermine */.#if de
1770: 66 69 6e 65 64 28 5f 57 52 53 5f 4b 45 52 4e 45  fined(_WRS_KERNE
1780: 4c 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  L) || defined(__
1790: 52 54 50 5f 5f 29 0a 73 74 72 75 63 74 20 72 75  RTP__).struct ru
17a0: 73 61 67 65 20 7b 0a 20 20 73 74 72 75 63 74 20  sage {.  struct 
17b0: 74 69 6d 65 76 61 6c 20 72 75 5f 75 74 69 6d 65  timeval ru_utime
17c0: 3b 20 2f 2a 20 75 73 65 72 20 43 50 55 20 74 69  ; /* user CPU ti
17d0: 6d 65 20 75 73 65 64 20 2a 2f 0a 20 20 73 74 72  me used */.  str
17e0: 75 63 74 20 74 69 6d 65 76 61 6c 20 72 75 5f 73  uct timeval ru_s
17f0: 74 69 6d 65 3b 20 2f 2a 20 73 79 73 74 65 6d 20  time; /* system 
1800: 43 50 55 20 74 69 6d 65 20 75 73 65 64 20 2a 2f  CPU time used */
1810: 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 67 65 74 72  .};.#define getr
1820: 75 73 61 67 65 28 41 2c 42 29 20 6d 65 6d 73 65  usage(A,B) memse
1830: 74 28 42 2c 30 2c 73 69 7a 65 6f 66 28 2a 42 29  t(B,0,sizeof(*B)
1840: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 53 61 76  ).#endif../* Sav
1850: 65 64 20 72 65 73 6f 75 72 63 65 20 69 6e 66 6f  ed resource info
1860: 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  rmation for the 
1870: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 6e 20  beginning of an 
1880: 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 73 74 61  operation */.sta
1890: 74 69 63 20 73 74 72 75 63 74 20 72 75 73 61 67  tic struct rusag
18a0: 65 20 73 42 65 67 69 6e 3b 20 20 2f 2a 20 43 50  e sBegin;  /* CP
18b0: 55 20 74 69 6d 65 20 61 74 20 73 74 61 72 74 20  U time at start 
18c0: 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74 65  */.static sqlite
18d0: 33 5f 69 6e 74 36 34 20 69 42 65 67 69 6e 3b 20  3_int64 iBegin; 
18e0: 20 2f 2a 20 57 61 6c 6c 2d 63 6c 6f 63 6b 20 74   /* Wall-clock t
18f0: 69 6d 65 20 61 74 20 73 74 61 72 74 20 2a 2f 0a  ime at start */.
1900: 0a 2f 2a 0a 2a 2a 20 42 65 67 69 6e 20 74 69 6d  ./*.** Begin tim
1910: 69 6e 67 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e  ing an operation
1920: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
1930: 62 65 67 69 6e 54 69 6d 65 72 28 76 6f 69 64 29  beginTimer(void)
1940: 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69  {.  if( enableTi
1950: 6d 65 72 20 29 7b 0a 20 20 20 20 67 65 74 72 75  mer ){.    getru
1960: 73 61 67 65 28 52 55 53 41 47 45 5f 53 45 4c 46  sage(RUSAGE_SELF
1970: 2c 20 26 73 42 65 67 69 6e 29 3b 0a 20 20 20 20  , &sBegin);.    
1980: 69 42 65 67 69 6e 20 3d 20 74 69 6d 65 4f 66 44  iBegin = timeOfD
1990: 61 79 28 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20  ay();.  }.}../* 
19a0: 52 65 74 75 72 6e 20 74 68 65 20 64 69 66 66 65  Return the diffe
19b0: 72 65 6e 63 65 20 6f 66 20 74 77 6f 20 74 69 6d  rence of two tim
19c0: 65 5f 73 74 72 75 63 74 73 20 69 6e 20 73 65 63  e_structs in sec
19d0: 6f 6e 64 73 20 2a 2f 0a 73 74 61 74 69 63 20 64  onds */.static d
19e0: 6f 75 62 6c 65 20 74 69 6d 65 44 69 66 66 28 73  ouble timeDiff(s
19f0: 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20 2a 70  truct timeval *p
1a00: 53 74 61 72 74 2c 20 73 74 72 75 63 74 20 74 69  Start, struct ti
1a10: 6d 65 76 61 6c 20 2a 70 45 6e 64 29 7b 0a 20 20  meval *pEnd){.  
1a20: 72 65 74 75 72 6e 20 28 70 45 6e 64 2d 3e 74 76  return (pEnd->tv
1a30: 5f 75 73 65 63 20 2d 20 70 53 74 61 72 74 2d 3e  _usec - pStart->
1a40: 74 76 5f 75 73 65 63 29 2a 30 2e 30 30 30 30 30  tv_usec)*0.00000
1a50: 31 20 2b 0a 20 20 20 20 20 20 20 20 20 28 64 6f  1 +.         (do
1a60: 75 62 6c 65 29 28 70 45 6e 64 2d 3e 74 76 5f 73  uble)(pEnd->tv_s
1a70: 65 63 20 2d 20 70 53 74 61 72 74 2d 3e 74 76 5f  ec - pStart->tv_
1a80: 73 65 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  sec);.}../*.** P
1a90: 72 69 6e 74 20 74 68 65 20 74 69 6d 69 6e 67 20  rint the timing 
1aa0: 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 73 74 61 74  results..*/.stat
1ab0: 69 63 20 76 6f 69 64 20 65 6e 64 54 69 6d 65 72  ic void endTimer
1ac0: 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20 65 6e  (void){.  if( en
1ad0: 61 62 6c 65 54 69 6d 65 72 20 29 7b 0a 20 20 20  ableTimer ){.   
1ae0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 69   sqlite3_int64 i
1af0: 45 6e 64 20 3d 20 74 69 6d 65 4f 66 44 61 79 28  End = timeOfDay(
1b00: 29 3b 0a 20 20 20 20 73 74 72 75 63 74 20 72 75  );.    struct ru
1b10: 73 61 67 65 20 73 45 6e 64 3b 0a 20 20 20 20 67  sage sEnd;.    g
1b20: 65 74 72 75 73 61 67 65 28 52 55 53 41 47 45 5f  etrusage(RUSAGE_
1b30: 53 45 4c 46 2c 20 26 73 45 6e 64 29 3b 0a 20 20  SELF, &sEnd);.  
1b40: 20 20 70 72 69 6e 74 66 28 22 52 75 6e 20 54 69    printf("Run Ti
1b50: 6d 65 3a 20 72 65 61 6c 20 25 2e 33 66 20 75 73  me: real %.3f us
1b60: 65 72 20 25 66 20 73 79 73 20 25 66 5c 6e 22 2c  er %f sys %f\n",
1b70: 0a 20 20 20 20 20 20 20 28 69 45 6e 64 20 2d 20  .       (iEnd - 
1b80: 69 42 65 67 69 6e 29 2a 30 2e 30 30 31 2c 0a 20  iBegin)*0.001,. 
1b90: 20 20 20 20 20 20 74 69 6d 65 44 69 66 66 28 26        timeDiff(&
1ba0: 73 42 65 67 69 6e 2e 72 75 5f 75 74 69 6d 65 2c  sBegin.ru_utime,
1bb0: 20 26 73 45 6e 64 2e 72 75 5f 75 74 69 6d 65 29   &sEnd.ru_utime)
1bc0: 2c 0a 20 20 20 20 20 20 20 74 69 6d 65 44 69 66  ,.       timeDif
1bd0: 66 28 26 73 42 65 67 69 6e 2e 72 75 5f 73 74 69  f(&sBegin.ru_sti
1be0: 6d 65 2c 20 26 73 45 6e 64 2e 72 75 5f 73 74 69  me, &sEnd.ru_sti
1bf0: 6d 65 29 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 64 65  me));.  }.}..#de
1c00: 66 69 6e 65 20 42 45 47 49 4e 5f 54 49 4d 45 52  fine BEGIN_TIMER
1c10: 20 62 65 67 69 6e 54 69 6d 65 72 28 29 0a 23 64   beginTimer().#d
1c20: 65 66 69 6e 65 20 45 4e 44 5f 54 49 4d 45 52 20  efine END_TIMER 
1c30: 65 6e 64 54 69 6d 65 72 28 29 0a 23 64 65 66 69  endTimer().#defi
1c40: 6e 65 20 48 41 53 5f 54 49 4d 45 52 20 31 0a 0a  ne HAS_TIMER 1..
1c50: 23 65 6c 69 66 20 28 64 65 66 69 6e 65 64 28 5f  #elif (defined(_
1c60: 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65  WIN32) || define
1c70: 64 28 57 49 4e 33 32 29 29 0a 0a 2f 2a 20 53 61  d(WIN32))../* Sa
1c80: 76 65 64 20 72 65 73 6f 75 72 63 65 20 69 6e 66  ved resource inf
1c90: 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  ormation for the
1ca0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 6e   beginning of an
1cb0: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 73 74   operation */.st
1cc0: 61 74 69 63 20 48 41 4e 44 4c 45 20 68 50 72 6f  atic HANDLE hPro
1cd0: 63 65 73 73 3b 0a 73 74 61 74 69 63 20 46 49 4c  cess;.static FIL
1ce0: 45 54 49 4d 45 20 66 74 4b 65 72 6e 65 6c 42 65  ETIME ftKernelBe
1cf0: 67 69 6e 3b 0a 73 74 61 74 69 63 20 46 49 4c 45  gin;.static FILE
1d00: 54 49 4d 45 20 66 74 55 73 65 72 42 65 67 69 6e  TIME ftUserBegin
1d10: 3b 0a 73 74 61 74 69 63 20 73 71 6c 69 74 65 33  ;.static sqlite3
1d20: 5f 69 6e 74 36 34 20 66 74 57 61 6c 6c 42 65 67  _int64 ftWallBeg
1d30: 69 6e 3b 0a 74 79 70 65 64 65 66 20 42 4f 4f 4c  in;.typedef BOOL
1d40: 20 28 57 49 4e 41 50 49 20 2a 47 45 54 50 52 4f   (WINAPI *GETPRO
1d50: 43 54 49 4d 45 53 29 28 48 41 4e 44 4c 45 2c 20  CTIMES)(HANDLE, 
1d60: 4c 50 46 49 4c 45 54 49 4d 45 2c 20 4c 50 46 49  LPFILETIME, LPFI
1d70: 4c 45 54 49 4d 45 2c 0a 20 20 20 20 20 20 20 20  LETIME,.        
1d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d90: 20 20 20 20 20 20 20 20 20 20 20 20 4c 50 46 49              LPFI
1da0: 4c 45 54 49 4d 45 2c 20 4c 50 46 49 4c 45 54 49  LETIME, LPFILETI
1db0: 4d 45 29 3b 0a 73 74 61 74 69 63 20 47 45 54 50  ME);.static GETP
1dc0: 52 4f 43 54 49 4d 45 53 20 67 65 74 50 72 6f 63  ROCTIMES getProc
1dd0: 65 73 73 54 69 6d 65 73 41 64 64 72 20 3d 20 4e  essTimesAddr = N
1de0: 55 4c 4c 3b 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63  ULL;../*.** Chec
1df0: 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 68  k to see if we h
1e00: 61 76 65 20 74 69 6d 65 72 20 73 75 70 70 6f 72  ave timer suppor
1e10: 74 2e 20 20 52 65 74 75 72 6e 20 31 20 69 66 20  t.  Return 1 if 
1e20: 6e 65 63 65 73 73 61 72 79 0a 2a 2a 20 73 75 70  necessary.** sup
1e30: 70 6f 72 74 20 66 6f 75 6e 64 20 28 6f 72 20 66  port found (or f
1e40: 6f 75 6e 64 20 70 72 65 76 69 6f 75 73 6c 79 29  ound previously)
1e50: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1e60: 68 61 73 54 69 6d 65 72 28 76 6f 69 64 29 7b 0a  hasTimer(void){.
1e70: 20 20 69 66 28 20 67 65 74 50 72 6f 63 65 73 73    if( getProcess
1e80: 54 69 6d 65 73 41 64 64 72 20 29 7b 0a 20 20 20  TimesAddr ){.   
1e90: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 20 65   return 1;.  } e
1ea0: 6c 73 65 20 7b 0a 20 20 20 20 2f 2a 20 47 65 74  lse {.    /* Get
1eb0: 50 72 6f 63 65 73 73 54 69 6d 65 73 28 29 20 69  ProcessTimes() i
1ec0: 73 6e 27 74 20 73 75 70 70 6f 72 74 65 64 20 69  sn't supported i
1ed0: 6e 20 57 49 4e 39 35 20 61 6e 64 20 73 6f 6d 65  n WIN95 and some
1ee0: 20 6f 74 68 65 72 20 57 69 6e 64 6f 77 73 0a 20   other Windows. 
1ef0: 20 20 20 2a 2a 20 76 65 72 73 69 6f 6e 73 2e 20     ** versions. 
1f00: 53 65 65 20 69 66 20 74 68 65 20 76 65 72 73 69  See if the versi
1f10: 6f 6e 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e  on we are runnin
1f20: 67 20 6f 6e 20 68 61 73 20 69 74 2c 20 61 6e 64  g on has it, and
1f30: 20 69 66 20 69 74 0a 20 20 20 20 2a 2a 20 64 6f   if it.    ** do
1f40: 65 73 2c 20 73 61 76 65 20 6f 66 66 20 61 20 70  es, save off a p
1f50: 6f 69 6e 74 65 72 20 74 6f 20 69 74 20 61 6e 64  ointer to it and
1f60: 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
1f70: 63 65 73 73 20 68 61 6e 64 6c 65 2e 0a 20 20 20  cess handle..   
1f80: 20 2a 2f 0a 20 20 20 20 68 50 72 6f 63 65 73 73   */.    hProcess
1f90: 20 3d 20 47 65 74 43 75 72 72 65 6e 74 50 72 6f   = GetCurrentPro
1fa0: 63 65 73 73 28 29 3b 0a 20 20 20 20 69 66 28 20  cess();.    if( 
1fb0: 68 50 72 6f 63 65 73 73 20 29 7b 0a 20 20 20 20  hProcess ){.    
1fc0: 20 20 48 49 4e 53 54 41 4e 43 45 20 68 69 6e 73    HINSTANCE hins
1fd0: 74 4c 69 62 20 3d 20 4c 6f 61 64 4c 69 62 72 61  tLib = LoadLibra
1fe0: 72 79 28 54 45 58 54 28 22 4b 65 72 6e 65 6c 33  ry(TEXT("Kernel3
1ff0: 32 2e 64 6c 6c 22 29 29 3b 0a 20 20 20 20 20 20  2.dll"));.      
2000: 69 66 28 20 4e 55 4c 4c 20 21 3d 20 68 69 6e 73  if( NULL != hins
2010: 74 4c 69 62 20 29 7b 0a 20 20 20 20 20 20 20 20  tLib ){.        
2020: 67 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41  getProcessTimesA
2030: 64 64 72 20 3d 0a 20 20 20 20 20 20 20 20 20 20  ddr =.          
2040: 20 20 28 47 45 54 50 52 4f 43 54 49 4d 45 53 29    (GETPROCTIMES)
2050: 20 47 65 74 50 72 6f 63 41 64 64 72 65 73 73 28   GetProcAddress(
2060: 68 69 6e 73 74 4c 69 62 2c 20 22 47 65 74 50 72  hinstLib, "GetPr
2070: 6f 63 65 73 73 54 69 6d 65 73 22 29 3b 0a 20 20  ocessTimes");.  
2080: 20 20 20 20 20 20 69 66 28 20 4e 55 4c 4c 20 21        if( NULL !
2090: 3d 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d 65  = getProcessTime
20a0: 73 41 64 64 72 20 29 7b 0a 20 20 20 20 20 20 20  sAddr ){.       
20b0: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
20c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 46       }.        F
20d0: 72 65 65 4c 69 62 72 61 72 79 28 68 69 6e 73 74  reeLibrary(hinst
20e0: 4c 69 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Lib);.      }.  
20f0: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
2100: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 42 65 67   0;.}../*.** Beg
2110: 69 6e 20 74 69 6d 69 6e 67 20 61 6e 20 6f 70 65  in timing an ope
2120: 72 61 74 69 6f 6e 0a 2a 2f 0a 73 74 61 74 69 63  ration.*/.static
2130: 20 76 6f 69 64 20 62 65 67 69 6e 54 69 6d 65 72   void beginTimer
2140: 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20 65 6e  (void){.  if( en
2150: 61 62 6c 65 54 69 6d 65 72 20 26 26 20 67 65 74  ableTimer && get
2160: 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64 72  ProcessTimesAddr
2170: 20 29 7b 0a 20 20 20 20 46 49 4c 45 54 49 4d 45   ){.    FILETIME
2180: 20 66 74 43 72 65 61 74 69 6f 6e 2c 20 66 74 45   ftCreation, ftE
2190: 78 69 74 3b 0a 20 20 20 20 67 65 74 50 72 6f 63  xit;.    getProc
21a0: 65 73 73 54 69 6d 65 73 41 64 64 72 28 68 50 72  essTimesAddr(hPr
21b0: 6f 63 65 73 73 2c 26 66 74 43 72 65 61 74 69 6f  ocess,&ftCreatio
21c0: 6e 2c 26 66 74 45 78 69 74 2c 0a 20 20 20 20 20  n,&ftExit,.     
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e0: 20 20 20 26 66 74 4b 65 72 6e 65 6c 42 65 67 69     &ftKernelBegi
21f0: 6e 2c 26 66 74 55 73 65 72 42 65 67 69 6e 29 3b  n,&ftUserBegin);
2200: 0a 20 20 20 20 66 74 57 61 6c 6c 42 65 67 69 6e  .    ftWallBegin
2210: 20 3d 20 74 69 6d 65 4f 66 44 61 79 28 29 3b 0a   = timeOfDay();.
2220: 20 20 7d 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e    }.}../* Return
2230: 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
2240: 6f 66 20 74 77 6f 20 46 49 4c 45 54 49 4d 45 20  of two FILETIME 
2250: 73 74 72 75 63 74 73 20 69 6e 20 73 65 63 6f 6e  structs in secon
2260: 64 73 20 2a 2f 0a 73 74 61 74 69 63 20 64 6f 75  ds */.static dou
2270: 62 6c 65 20 74 69 6d 65 44 69 66 66 28 46 49 4c  ble timeDiff(FIL
2280: 45 54 49 4d 45 20 2a 70 53 74 61 72 74 2c 20 46  ETIME *pStart, F
2290: 49 4c 45 54 49 4d 45 20 2a 70 45 6e 64 29 7b 0a  ILETIME *pEnd){.
22a0: 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69    sqlite_int64 i
22b0: 36 34 53 74 61 72 74 20 3d 20 2a 28 28 73 71 6c  64Start = *((sql
22c0: 69 74 65 5f 69 6e 74 36 34 20 2a 29 20 70 53 74  ite_int64 *) pSt
22d0: 61 72 74 29 3b 0a 20 20 73 71 6c 69 74 65 5f 69  art);.  sqlite_i
22e0: 6e 74 36 34 20 69 36 34 45 6e 64 20 3d 20 2a 28  nt64 i64End = *(
22f0: 28 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 29  (sqlite_int64 *)
2300: 20 70 45 6e 64 29 3b 0a 20 20 72 65 74 75 72 6e   pEnd);.  return
2310: 20 28 64 6f 75 62 6c 65 29 20 28 28 69 36 34 45   (double) ((i64E
2320: 6e 64 20 2d 20 69 36 34 53 74 61 72 74 29 20 2f  nd - i64Start) /
2330: 20 31 30 30 30 30 30 30 30 2e 30 29 3b 0a 7d 0a   10000000.0);.}.
2340: 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65  ./*.** Print the
2350: 20 74 69 6d 69 6e 67 20 72 65 73 75 6c 74 73 2e   timing results.
2360: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2370: 65 6e 64 54 69 6d 65 72 28 76 6f 69 64 29 7b 0a  endTimer(void){.
2380: 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69 6d 65    if( enableTime
2390: 72 20 26 26 20 67 65 74 50 72 6f 63 65 73 73 54  r && getProcessT
23a0: 69 6d 65 73 41 64 64 72 29 7b 0a 20 20 20 20 46  imesAddr){.    F
23b0: 49 4c 45 54 49 4d 45 20 66 74 43 72 65 61 74 69  ILETIME ftCreati
23c0: 6f 6e 2c 20 66 74 45 78 69 74 2c 20 66 74 4b 65  on, ftExit, ftKe
23d0: 72 6e 65 6c 45 6e 64 2c 20 66 74 55 73 65 72 45  rnelEnd, ftUserE
23e0: 6e 64 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  nd;.    sqlite3_
23f0: 69 6e 74 36 34 20 66 74 57 61 6c 6c 45 6e 64 20  int64 ftWallEnd 
2400: 3d 20 74 69 6d 65 4f 66 44 61 79 28 29 3b 0a 20  = timeOfDay();. 
2410: 20 20 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d     getProcessTim
2420: 65 73 41 64 64 72 28 68 50 72 6f 63 65 73 73 2c  esAddr(hProcess,
2430: 26 66 74 43 72 65 61 74 69 6f 6e 2c 26 66 74 45  &ftCreation,&ftE
2440: 78 69 74 2c 26 66 74 4b 65 72 6e 65 6c 45 6e 64  xit,&ftKernelEnd
2450: 2c 26 66 74 55 73 65 72 45 6e 64 29 3b 0a 20 20  ,&ftUserEnd);.  
2460: 20 20 70 72 69 6e 74 66 28 22 52 75 6e 20 54 69    printf("Run Ti
2470: 6d 65 3a 20 72 65 61 6c 20 25 2e 33 66 20 75 73  me: real %.3f us
2480: 65 72 20 25 66 20 73 79 73 20 25 66 5c 6e 22 2c  er %f sys %f\n",
2490: 0a 20 20 20 20 20 20 20 28 66 74 57 61 6c 6c 45  .       (ftWallE
24a0: 6e 64 20 2d 20 66 74 57 61 6c 6c 42 65 67 69 6e  nd - ftWallBegin
24b0: 29 2a 30 2e 30 30 31 2c 0a 20 20 20 20 20 20 20  )*0.001,.       
24c0: 74 69 6d 65 44 69 66 66 28 26 66 74 55 73 65 72  timeDiff(&ftUser
24d0: 42 65 67 69 6e 2c 20 26 66 74 55 73 65 72 45 6e  Begin, &ftUserEn
24e0: 64 29 2c 0a 20 20 20 20 20 20 20 74 69 6d 65 44  d),.       timeD
24f0: 69 66 66 28 26 66 74 4b 65 72 6e 65 6c 42 65 67  iff(&ftKernelBeg
2500: 69 6e 2c 20 26 66 74 4b 65 72 6e 65 6c 45 6e 64  in, &ftKernelEnd
2510: 29 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 64 65 66 69  ));.  }.}..#defi
2520: 6e 65 20 42 45 47 49 4e 5f 54 49 4d 45 52 20 62  ne BEGIN_TIMER b
2530: 65 67 69 6e 54 69 6d 65 72 28 29 0a 23 64 65 66  eginTimer().#def
2540: 69 6e 65 20 45 4e 44 5f 54 49 4d 45 52 20 65 6e  ine END_TIMER en
2550: 64 54 69 6d 65 72 28 29 0a 23 64 65 66 69 6e 65  dTimer().#define
2560: 20 48 41 53 5f 54 49 4d 45 52 20 68 61 73 54 69   HAS_TIMER hasTi
2570: 6d 65 72 28 29 0a 0a 23 65 6c 73 65 0a 23 64 65  mer()..#else.#de
2580: 66 69 6e 65 20 42 45 47 49 4e 5f 54 49 4d 45 52  fine BEGIN_TIMER
2590: 0a 23 64 65 66 69 6e 65 20 45 4e 44 5f 54 49 4d  .#define END_TIM
25a0: 45 52 0a 23 64 65 66 69 6e 65 20 48 41 53 5f 54  ER.#define HAS_T
25b0: 49 4d 45 52 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  IMER 0.#endif../
25c0: 2a 0a 2a 2a 20 55 73 65 64 20 74 6f 20 70 72 65  *.** Used to pre
25d0: 76 65 6e 74 20 77 61 72 6e 69 6e 67 73 20 61 62  vent warnings ab
25e0: 6f 75 74 20 75 6e 75 73 65 64 20 70 61 72 61 6d  out unused param
25f0: 65 74 65 72 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  eters.*/.#define
2600: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
2610: 52 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a 0a  R(x) (void)(x)..
2620: 2f 2a 0a 2a 2a 20 4e 75 6d 62 65 72 20 6f 66 20  /*.** Number of 
2630: 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 6e 20 61  elements in an a
2640: 72 72 61 79 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  rray.*/.#define 
2650: 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 28 69  ArraySize(X)  (i
2660: 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69  nt)(sizeof(X)/si
2670: 7a 65 6f 66 28 58 5b 30 5d 29 29 0a 0a 2f 2a 0a  zeof(X[0]))../*.
2680: 2a 2a 20 49 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ** If the follow
2690: 69 6e 67 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ing flag is set,
26a0: 20 74 68 65 6e 20 63 6f 6d 6d 61 6e 64 20 65 78   then command ex
26b0: 65 63 75 74 69 6f 6e 20 73 74 6f 70 73 0a 2a 2a  ecution stops.**
26c0: 20 61 74 20 61 6e 20 65 72 72 6f 72 20 69 66 20   at an error if 
26d0: 77 65 20 61 72 65 20 6e 6f 74 20 69 6e 74 65 72  we are not inter
26e0: 61 63 74 69 76 65 2e 0a 2a 2f 0a 73 74 61 74 69  active..*/.stati
26f0: 63 20 69 6e 74 20 62 61 69 6c 5f 6f 6e 5f 65 72  c int bail_on_er
2700: 72 6f 72 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20  ror = 0;../*.** 
2710: 54 68 72 65 61 74 20 73 74 64 69 6e 20 61 73 20  Threat stdin as 
2720: 61 6e 20 69 6e 74 65 72 61 63 74 69 76 65 20 69  an interactive i
2730: 6e 70 75 74 20 69 66 20 74 68 65 20 66 6f 6c 6c  nput if the foll
2740: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 0a 2a  owing variable.*
2750: 2a 20 69 73 20 74 72 75 65 2e 20 20 4f 74 68 65  * is true.  Othe
2760: 72 77 69 73 65 2c 20 61 73 73 75 6d 65 20 73 74  rwise, assume st
2770: 64 69 6e 20 69 73 20 63 6f 6e 6e 65 63 74 65 64  din is connected
2780: 20 74 6f 20 61 20 66 69 6c 65 20 6f 72 20 70 69   to a file or pi
2790: 70 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  pe..*/.static in
27a0: 74 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72  t stdin_is_inter
27b0: 61 63 74 69 76 65 20 3d 20 31 3b 0a 0a 2f 2a 0a  active = 1;../*.
27c0: 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 20 73 79  ** On Windows sy
27d0: 73 74 65 6d 73 20 77 65 20 68 61 76 65 20 74 6f  stems we have to
27e0: 20 6b 6e 6f 77 20 69 66 20 73 74 61 6e 64 61 72   know if standar
27f0: 64 20 6f 75 74 70 75 74 20 69 73 20 61 20 63 6f  d output is a co
2800: 6e 73 6f 6c 65 0a 2a 2a 20 69 6e 20 6f 72 64 65  nsole.** in orde
2810: 72 20 74 6f 20 74 72 61 6e 73 6c 61 74 65 20 55  r to translate U
2820: 54 46 2d 38 20 69 6e 74 6f 20 4d 42 43 53 2e 20  TF-8 into MBCS. 
2830: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
2840: 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 74 72  ariable is.** tr
2850: 75 65 20 69 66 20 74 72 61 6e 73 6c 61 74 69 6f  ue if translatio
2860: 6e 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  n is required..*
2870: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 74 64  /.static int std
2880: 6f 75 74 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20 3d  out_is_console =
2890: 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   1;../*.** The f
28a0: 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 74 68 65 20  ollowing is the 
28b0: 6f 70 65 6e 20 53 51 4c 69 74 65 20 64 61 74 61  open SQLite data
28c0: 62 61 73 65 2e 20 20 57 65 20 6d 61 6b 65 20 61  base.  We make a
28d0: 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74   pointer.** to t
28e0: 68 69 73 20 64 61 74 61 62 61 73 65 20 61 20 73  his database a s
28f0: 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 20 73  tatic variable s
2900: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
2910: 20 61 63 63 65 73 73 65 64 0a 2a 2a 20 62 79 20   accessed.** by 
2920: 74 68 65 20 53 49 47 49 4e 54 20 68 61 6e 64 6c  the SIGINT handl
2930: 65 72 20 74 6f 20 69 6e 74 65 72 72 75 70 74 20  er to interrupt 
2940: 64 61 74 61 62 61 73 65 20 70 72 6f 63 65 73 73  database process
2950: 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 73  ing..*/.static s
2960: 71 6c 69 74 65 33 20 2a 67 6c 6f 62 61 6c 44 62  qlite3 *globalDb
2970: 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 72 75   = 0;../*.** Tru
2980: 65 20 69 66 20 61 6e 20 69 6e 74 65 72 72 75 70  e if an interrup
2990: 74 20 28 43 6f 6e 74 72 6f 6c 2d 43 29 20 68 61  t (Control-C) ha
29a0: 73 20 62 65 65 6e 20 72 65 63 65 69 76 65 64 2e  s been received.
29b0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 6c 61 74  .*/.static volat
29c0: 69 6c 65 20 69 6e 74 20 73 65 65 6e 49 6e 74 65  ile int seenInte
29d0: 72 72 75 70 74 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a  rrupt = 0;../*.*
29e0: 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6e 61  * This is the na
29f0: 6d 65 20 6f 66 20 6f 75 72 20 70 72 6f 67 72 61  me of our progra
2a00: 6d 2e 20 49 74 20 69 73 20 73 65 74 20 69 6e 20  m. It is set in 
2a10: 6d 61 69 6e 28 29 2c 20 75 73 65 64 0a 2a 2a 20  main(), used.** 
2a20: 69 6e 20 61 20 6e 75 6d 62 65 72 20 6f 66 20 6f  in a number of o
2a30: 74 68 65 72 20 70 6c 61 63 65 73 2c 20 6d 6f 73  ther places, mos
2a40: 74 6c 79 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  tly for error me
2a50: 73 73 61 67 65 73 2e 0a 2a 2f 0a 73 74 61 74 69  ssages..*/.stati
2a60: 63 20 63 68 61 72 20 2a 41 72 67 76 30 3b 0a 0a  c char *Argv0;..
2a70: 2f 2a 0a 2a 2a 20 50 72 6f 6d 70 74 20 73 74 72  /*.** Prompt str
2a80: 69 6e 67 73 2e 20 49 6e 69 74 69 61 6c 69 7a 65  ings. Initialize
2a90: 64 20 69 6e 20 6d 61 69 6e 2e 20 53 65 74 74 61  d in main. Setta
2aa0: 62 6c 65 20 77 69 74 68 0a 2a 2a 20 20 20 2e 70  ble with.**   .p
2ab0: 72 6f 6d 70 74 20 6d 61 69 6e 20 63 6f 6e 74 69  rompt main conti
2ac0: 6e 75 65 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68  nue.*/.static ch
2ad0: 61 72 20 6d 61 69 6e 50 72 6f 6d 70 74 5b 32 30  ar mainPrompt[20
2ae0: 5d 3b 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20  ];     /* First 
2af0: 6c 69 6e 65 20 70 72 6f 6d 70 74 2e 20 64 65 66  line prompt. def
2b00: 61 75 6c 74 3a 20 22 73 71 6c 69 74 65 3e 20 22  ault: "sqlite> "
2b10: 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 63  */.static char c
2b20: 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74 5b 32 30  ontinuePrompt[20
2b30: 5d 3b 20 2f 2a 20 43 6f 6e 74 69 6e 75 61 74 69  ]; /* Continuati
2b40: 6f 6e 20 70 72 6f 6d 70 74 2e 20 64 65 66 61 75  on prompt. defau
2b50: 6c 74 3a 20 22 20 20 20 2e 2e 2e 3e 20 22 20 2a  lt: "   ...> " *
2b60: 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72 20  /../*.** Render 
2b70: 6f 75 74 70 75 74 20 6c 69 6b 65 20 66 70 72 69  output like fpri
2b80: 6e 74 66 28 29 2e 20 20 45 78 63 65 70 74 2c 20  ntf().  Except, 
2b90: 69 66 20 74 68 65 20 6f 75 74 70 75 74 20 69 73  if the output is
2ba0: 20 67 6f 69 6e 67 20 74 6f 20 74 68 65 0a 2a 2a   going to the.**
2bb0: 20 63 6f 6e 73 6f 6c 65 20 61 6e 64 20 69 66 20   console and if 
2bc0: 74 68 69 73 20 69 73 20 72 75 6e 6e 69 6e 67 20  this is running 
2bd0: 6f 6e 20 61 20 57 69 6e 64 6f 77 73 20 6d 61 63  on a Windows mac
2be0: 68 69 6e 65 2c 20 74 72 61 6e 73 6c 61 74 65 20  hine, translate 
2bf0: 74 68 65 0a 2a 2a 20 6f 75 74 70 75 74 20 66 72  the.** output fr
2c00: 6f 6d 20 55 54 46 2d 38 20 69 6e 74 6f 20 4d 42  om UTF-8 into MB
2c10: 43 53 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  CS..*/.#if defin
2c20: 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65  ed(_WIN32) || de
2c30: 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 76 6f 69  fined(WIN32).voi
2c40: 64 20 75 74 66 38 5f 70 72 69 6e 74 66 28 46 49  d utf8_printf(FI
2c50: 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63  LE *out, const c
2c60: 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e  har *zFormat, ..
2c70: 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70  .){.  va_list ap
2c80: 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c  ;.  va_start(ap,
2c90: 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 69 66 28   zFormat);.  if(
2ca0: 20 73 74 64 6f 75 74 5f 69 73 5f 63 6f 6e 73 6f   stdout_is_conso
2cb0: 6c 65 20 26 26 20 28 6f 75 74 3d 3d 73 74 64 6f  le && (out==stdo
2cc0: 75 74 20 7c 7c 20 6f 75 74 3d 3d 73 74 64 65 72  ut || out==stder
2cd0: 72 29 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a  r) ){.    char *
2ce0: 7a 31 20 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70  z1 = sqlite3_vmp
2cf0: 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61  rintf(zFormat, a
2d00: 70 29 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 32  p);.    char *z2
2d10: 20 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32   = sqlite3_win32
2d20: 5f 75 74 66 38 5f 74 6f 5f 6d 62 63 73 5f 76 32  _utf8_to_mbcs_v2
2d30: 28 7a 31 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  (z1, 0);.    sql
2d40: 69 74 65 33 5f 66 72 65 65 28 7a 31 29 3b 0a 20  ite3_free(z1);. 
2d50: 20 20 20 66 70 75 74 73 28 7a 32 2c 20 6f 75 74     fputs(z2, out
2d60: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  );.    sqlite3_f
2d70: 72 65 65 28 7a 32 29 3b 0a 20 20 7d 65 6c 73 65  ree(z2);.  }else
2d80: 7b 0a 20 20 20 20 76 66 70 72 69 6e 74 66 28 6f  {.    vfprintf(o
2d90: 75 74 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29  ut, zFormat, ap)
2da0: 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61  ;.  }.  va_end(a
2db0: 70 29 3b 0a 7d 0a 23 65 6c 69 66 20 21 64 65 66  p);.}.#elif !def
2dc0: 69 6e 65 64 28 75 74 66 38 5f 70 72 69 6e 74 66  ined(utf8_printf
2dd0: 29 0a 23 20 64 65 66 69 6e 65 20 75 74 66 38 5f  ).# define utf8_
2de0: 70 72 69 6e 74 66 20 66 70 72 69 6e 74 66 0a 23  printf fprintf.#
2df0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 6e  endif../*.** Ren
2e00: 64 65 72 20 6f 75 74 70 75 74 20 6c 69 6b 65 20  der output like 
2e10: 66 70 72 69 6e 74 66 28 29 2e 20 20 54 68 69 73  fprintf().  This
2e20: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75   should not be u
2e30: 73 65 64 20 6f 6e 20 61 6e 79 74 68 69 6e 67 20  sed on anything 
2e40: 74 68 61 74 0a 2a 2a 20 69 6e 63 6c 75 64 65 73  that.** includes
2e50: 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 74 69   string formatti
2e60: 6e 67 20 28 65 2e 67 2e 20 22 25 73 22 29 2e 0a  ng (e.g. "%s")..
2e70: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2e80: 72 61 77 5f 70 72 69 6e 74 66 29 0a 23 20 64 65  raw_printf).# de
2e90: 66 69 6e 65 20 72 61 77 5f 70 72 69 6e 74 66 20  fine raw_printf 
2ea0: 66 70 72 69 6e 74 66 0a 23 65 6e 64 69 66 0a 0a  fprintf.#endif..
2eb0: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 49 2f 4f 20  /*.** Write I/O 
2ec0: 74 72 61 63 65 73 20 74 6f 20 74 68 65 20 66 6f  traces to the fo
2ed0: 6c 6c 6f 77 69 6e 67 20 73 74 72 65 61 6d 2e 0a  llowing stream..
2ee0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2ef0: 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a  _ENABLE_IOTRACE.
2f00: 73 74 61 74 69 63 20 46 49 4c 45 20 2a 69 6f 74  static FILE *iot
2f10: 72 61 63 65 20 3d 20 30 3b 0a 23 65 6e 64 69 66  race = 0;.#endif
2f20: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
2f30: 74 69 6e 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20  tine works like 
2f40: 70 72 69 6e 74 66 20 69 6e 20 74 68 61 74 20 69  printf in that i
2f50: 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  ts first argumen
2f60: 74 20 69 73 20 61 0a 2a 2a 20 66 6f 72 6d 61 74  t is a.** format
2f70: 20 73 74 72 69 6e 67 20 61 6e 64 20 73 75 62 73   string and subs
2f80: 65 71 75 65 6e 74 20 61 72 67 75 6d 65 6e 74 73  equent arguments
2f90: 20 61 72 65 20 76 61 6c 75 65 73 20 74 6f 20 62   are values to b
2fa0: 65 20 73 75 62 73 74 69 74 75 74 65 64 0a 2a 2a  e substituted.**
2fb0: 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 25 20 66   in place of % f
2fc0: 69 65 6c 64 73 2e 20 20 54 68 65 20 72 65 73 75  ields.  The resu
2fd0: 6c 74 20 6f 66 20 66 6f 72 6d 61 74 74 69 6e 67  lt of formatting
2fe0: 20 74 68 69 73 20 73 74 72 69 6e 67 0a 2a 2a 20   this string.** 
2ff0: 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20 69 6f  is written to io
3000: 74 72 61 63 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  trace..*/.#ifdef
3010: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
3020: 4f 54 52 41 43 45 0a 73 74 61 74 69 63 20 76 6f  OTRACE.static vo
3030: 69 64 20 53 51 4c 49 54 45 5f 43 44 45 43 4c 20  id SQLITE_CDECL 
3040: 69 6f 74 72 61 63 65 50 72 69 6e 74 66 28 63 6f  iotracePrintf(co
3050: 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  nst char *zForma
3060: 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69  t, ...){.  va_li
3070: 73 74 20 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a  st ap;.  char *z
3080: 3b 0a 20 20 69 66 28 20 69 6f 74 72 61 63 65 3d  ;.  if( iotrace=
3090: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 76  =0 ) return;.  v
30a0: 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72  a_start(ap, zFor
30b0: 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  mat);.  z = sqli
30c0: 74 65 33 5f 76 6d 70 72 69 6e 74 66 28 7a 46 6f  te3_vmprintf(zFo
30d0: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f  rmat, ap);.  va_
30e0: 65 6e 64 28 61 70 29 3b 0a 20 20 75 74 66 38 5f  end(ap);.  utf8_
30f0: 70 72 69 6e 74 66 28 69 6f 74 72 61 63 65 2c 20  printf(iotrace, 
3100: 22 25 73 22 2c 20 7a 29 3b 0a 20 20 73 71 6c 69  "%s", z);.  sqli
3110: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 7d 0a 23  te3_free(z);.}.#
3120: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74  endif../*.** Out
3130: 70 75 74 20 73 74 72 69 6e 67 20 7a 55 74 66 20  put string zUtf 
3140: 74 6f 20 73 74 72 65 61 6d 20 70 4f 75 74 20 61  to stream pOut a
3150: 73 20 77 20 63 68 61 72 61 63 74 65 72 73 2e 20  s w characters. 
3160: 20 49 66 20 77 20 69 73 20 6e 65 67 61 74 69 76   If w is negativ
3170: 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 69 67 68 74  e,.** then right
3180: 2d 6a 75 73 74 69 66 79 20 74 68 65 20 74 65 78  -justify the tex
3190: 74 2e 20 20 57 20 69 73 20 74 68 65 20 77 69 64  t.  W is the wid
31a0: 74 68 20 69 6e 20 55 54 46 2d 38 20 63 68 61 72  th in UTF-8 char
31b0: 61 63 74 65 72 73 2c 20 6e 6f 74 0a 2a 2a 20 69  acters, not.** i
31c0: 6e 20 62 79 74 65 73 2e 20 20 54 68 69 73 20 69  n bytes.  This i
31d0: 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
31e0: 20 74 68 65 20 25 2a 2e 2a 73 20 73 70 65 63 69   the %*.*s speci
31f0: 66 69 63 61 74 69 6f 6e 20 69 6e 20 70 72 69 6e  fication in prin
3200: 74 66 0a 2a 2a 20 73 69 6e 63 65 20 77 69 74 68  tf.** since with
3210: 20 25 2a 2e 2a 73 20 74 68 65 20 77 69 64 74 68   %*.*s the width
3220: 20 69 73 20 6d 65 61 73 75 72 65 64 20 69 6e 20   is measured in 
3230: 62 79 74 65 73 2c 20 6e 6f 74 20 63 68 61 72 61  bytes, not chara
3240: 63 74 65 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63  cters..*/.static
3250: 20 76 6f 69 64 20 75 74 66 38 5f 77 69 64 74 68   void utf8_width
3260: 5f 70 72 69 6e 74 28 46 49 4c 45 20 2a 70 4f 75  _print(FILE *pOu
3270: 74 2c 20 69 6e 74 20 77 2c 20 63 6f 6e 73 74 20  t, int w, const 
3280: 63 68 61 72 20 2a 7a 55 74 66 29 7b 0a 20 20 69  char *zUtf){.  i
3290: 6e 74 20 69 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20  nt i;.  int n;. 
32a0: 20 69 6e 74 20 61 77 20 3d 20 77 3c 30 20 3f 20   int aw = w<0 ? 
32b0: 2d 77 20 3a 20 77 3b 0a 20 20 63 68 61 72 20 7a  -w : w;.  char z
32c0: 42 75 66 5b 31 30 30 30 5d 3b 0a 20 20 69 66 28  Buf[1000];.  if(
32d0: 20 61 77 3e 28 69 6e 74 29 73 69 7a 65 6f 66 28   aw>(int)sizeof(
32e0: 7a 42 75 66 29 2f 33 20 29 20 61 77 20 3d 20 28  zBuf)/3 ) aw = (
32f0: 69 6e 74 29 73 69 7a 65 6f 66 28 7a 42 75 66 29  int)sizeof(zBuf)
3300: 2f 33 3b 0a 20 20 66 6f 72 28 69 3d 6e 3d 30 3b  /3;.  for(i=n=0;
3310: 20 7a 55 74 66 5b 69 5d 3b 20 69 2b 2b 29 7b 0a   zUtf[i]; i++){.
3320: 20 20 20 20 69 66 28 20 28 7a 55 74 66 5b 69 5d      if( (zUtf[i]
3330: 26 30 78 63 30 29 21 3d 30 78 38 30 20 29 7b 0a  &0xc0)!=0x80 ){.
3340: 20 20 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20        n++;.     
3350: 20 69 66 28 20 6e 3d 3d 61 77 20 29 7b 0a 20 20   if( n==aw ){.  
3360: 20 20 20 20 20 20 64 6f 7b 20 69 2b 2b 3b 20 7d        do{ i++; }
3370: 77 68 69 6c 65 28 20 28 7a 55 74 66 5b 69 5d 26  while( (zUtf[i]&
3380: 30 78 63 30 29 3d 3d 30 78 38 30 20 29 3b 0a 20  0xc0)==0x80 );. 
3390: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
33a0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
33b0: 20 20 69 66 28 20 6e 3e 3d 61 77 20 29 7b 0a 20    if( n>=aw ){. 
33c0: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
33d0: 4f 75 74 2c 20 22 25 2e 2a 73 22 2c 20 69 2c 20  Out, "%.*s", i, 
33e0: 7a 55 74 66 29 3b 0a 20 20 7d 65 6c 73 65 20 69  zUtf);.  }else i
33f0: 66 28 20 77 3c 30 20 29 7b 0a 20 20 20 20 75 74  f( w<0 ){.    ut
3400: 66 38 5f 70 72 69 6e 74 66 28 70 4f 75 74 2c 20  f8_printf(pOut, 
3410: 22 25 2a 73 25 73 22 2c 20 61 77 2d 6e 2c 20 22  "%*s%s", aw-n, "
3420: 22 2c 20 7a 55 74 66 29 3b 0a 20 20 7d 65 6c 73  ", zUtf);.  }els
3430: 65 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  e{.    utf8_prin
3440: 74 66 28 70 4f 75 74 2c 20 22 25 73 25 2a 73 22  tf(pOut, "%s%*s"
3450: 2c 20 7a 55 74 66 2c 20 61 77 2d 6e 2c 20 22 22  , zUtf, aw-n, ""
3460: 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  );.  }.}.../*.**
3470: 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 61   Determines if a
3480: 20 73 74 72 69 6e 67 20 69 73 20 61 20 6e 75 6d   string is a num
3490: 62 65 72 20 6f 66 20 6e 6f 74 2e 0a 2a 2f 0a 73  ber of not..*/.s
34a0: 74 61 74 69 63 20 69 6e 74 20 69 73 4e 75 6d 62  tatic int isNumb
34b0: 65 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  er(const char *z
34c0: 2c 20 69 6e 74 20 2a 72 65 61 6c 6e 75 6d 29 7b  , int *realnum){
34d0: 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 7c  .  if( *z=='-' |
34e0: 7c 20 2a 7a 3d 3d 27 2b 27 20 29 20 7a 2b 2b 3b  | *z=='+' ) z++;
34f0: 0a 20 20 69 66 28 20 21 49 73 44 69 67 69 74 28  .  if( !IsDigit(
3500: 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  *z) ){.    retur
3510: 6e 20 30 3b 0a 20 20 7d 0a 20 20 7a 2b 2b 3b 0a  n 0;.  }.  z++;.
3520: 20 20 69 66 28 20 72 65 61 6c 6e 75 6d 20 29 20    if( realnum ) 
3530: 2a 72 65 61 6c 6e 75 6d 20 3d 20 30 3b 0a 20 20  *realnum = 0;.  
3540: 77 68 69 6c 65 28 20 49 73 44 69 67 69 74 28 2a  while( IsDigit(*
3550: 7a 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 69  z) ){ z++; }.  i
3560: 66 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20  f( *z=='.' ){.  
3570: 20 20 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20 21    z++;.    if( !
3580: 49 73 44 69 67 69 74 28 2a 7a 29 20 29 20 72 65  IsDigit(*z) ) re
3590: 74 75 72 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c  turn 0;.    whil
35a0: 65 28 20 49 73 44 69 67 69 74 28 2a 7a 29 20 29  e( IsDigit(*z) )
35b0: 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28  { z++; }.    if(
35c0: 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c   realnum ) *real
35d0: 6e 75 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69  num = 1;.  }.  i
35e0: 66 28 20 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a  f( *z=='e' || *z
35f0: 3d 3d 27 45 27 20 29 7b 0a 20 20 20 20 7a 2b 2b  =='E' ){.    z++
3600: 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2b  ;.    if( *z=='+
3610: 27 20 7c 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20 7a  ' || *z=='-' ) z
3620: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 21 49 73 44  ++;.    if( !IsD
3630: 69 67 69 74 28 2a 7a 29 20 29 20 72 65 74 75 72  igit(*z) ) retur
3640: 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  n 0;.    while( 
3650: 49 73 44 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a  IsDigit(*z) ){ z
3660: 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20 72 65  ++; }.    if( re
3670: 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d  alnum ) *realnum
3680: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75   = 1;.  }.  retu
3690: 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a  rn *z==0;.}../*.
36a0: 2a 2a 20 43 6f 6d 70 75 74 65 20 61 20 73 74 72  ** Compute a str
36b0: 69 6e 67 20 6c 65 6e 67 74 68 20 74 68 61 74 20  ing length that 
36c0: 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 77 68  is limited to wh
36d0: 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64  at can be stored
36e0: 20 69 6e 0a 2a 2a 20 6c 6f 77 65 72 20 33 30 20   in.** lower 30 
36f0: 62 69 74 73 20 6f 66 20 61 20 33 32 2d 62 69 74  bits of a 32-bit
3700: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e   signed integer.
3710: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
3720: 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68  trlen30(const ch
3730: 61 72 20 2a 7a 29 7b 0a 20 20 63 6f 6e 73 74 20  ar *z){.  const 
3740: 63 68 61 72 20 2a 7a 32 20 3d 20 7a 3b 0a 20 20  char *z2 = z;.  
3750: 77 68 69 6c 65 28 20 2a 7a 32 20 29 7b 20 7a 32  while( *z2 ){ z2
3760: 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  ++; }.  return 0
3770: 78 33 66 66 66 66 66 66 66 20 26 20 28 69 6e 74  x3fffffff & (int
3780: 29 28 7a 32 20 2d 20 7a 29 3b 0a 7d 0a 0a 2f 2a  )(z2 - z);.}../*
3790: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6c  .** Return the l
37a0: 65 6e 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e  ength of a strin
37b0: 67 20 69 6e 20 63 68 61 72 61 63 74 65 72 73 2e  g in characters.
37c0: 20 20 4d 75 6c 74 69 62 79 74 65 20 55 54 46 38    Multibyte UTF8
37d0: 20 63 68 61 72 61 63 74 65 72 73 0a 2a 2a 20 63   characters.** c
37e0: 6f 75 6e 74 20 61 73 20 61 20 73 69 6e 67 6c 65  ount as a single
37f0: 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 73   character..*/.s
3800: 74 61 74 69 63 20 69 6e 74 20 73 74 72 6c 65 6e  tatic int strlen
3810: 43 68 61 72 28 63 6f 6e 73 74 20 63 68 61 72 20  Char(const char 
3820: 2a 7a 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30  *z){.  int n = 0
3830: 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b  ;.  while( *z ){
3840: 0a 20 20 20 20 69 66 28 20 28 30 78 63 30 26 2a  .    if( (0xc0&*
3850: 28 7a 2b 2b 29 29 21 3d 30 78 38 30 20 29 20 6e  (z++))!=0x80 ) n
3860: 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ++;.  }.  return
3870: 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69   n;.}../*.** Thi
3880: 73 20 72 6f 75 74 69 6e 65 20 72 65 61 64 73 20  s routine reads 
3890: 61 20 6c 69 6e 65 20 6f 66 20 74 65 78 74 20 66  a line of text f
38a0: 72 6f 6d 20 46 49 4c 45 20 69 6e 2c 20 73 74 6f  rom FILE in, sto
38b0: 72 65 73 0a 2a 2a 20 74 68 65 20 74 65 78 74 20  res.** the text 
38c0: 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  in memory obtain
38d0: 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
38e0: 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 70   and returns a p
38f0: 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68 65  ointer.** to the
3900: 20 74 65 78 74 2e 20 20 4e 55 4c 4c 20 69 73 20   text.  NULL is 
3910: 72 65 74 75 72 6e 65 64 20 61 74 20 65 6e 64 20  returned at end 
3920: 6f 66 20 66 69 6c 65 2c 20 6f 72 20 69 66 20 6d  of file, or if m
3930: 61 6c 6c 6f 63 28 29 0a 2a 2a 20 66 61 69 6c 73  alloc().** fails
3940: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 7a 4c 69 6e 65  ..**.** If zLine
3950: 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
3960: 6e 20 69 74 20 69 73 20 61 20 6d 61 6c 6c 6f 63  n it is a malloc
3970: 65 64 20 62 75 66 66 65 72 20 72 65 74 75 72 6e  ed buffer return
3980: 65 64 20 66 72 6f 6d 0a 2a 2a 20 61 20 70 72 65  ed from.** a pre
3990: 76 69 6f 75 73 20 63 61 6c 6c 20 74 6f 20 74 68  vious call to th
39a0: 69 73 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  is routine that 
39b0: 6d 61 79 20 62 65 20 72 65 75 73 65 64 2e 0a 2a  may be reused..*
39c0: 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 6c  /.static char *l
39d0: 6f 63 61 6c 5f 67 65 74 6c 69 6e 65 28 63 68 61  ocal_getline(cha
39e0: 72 20 2a 7a 4c 69 6e 65 2c 20 46 49 4c 45 20 2a  r *zLine, FILE *
39f0: 69 6e 29 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65  in){.  int nLine
3a00: 20 3d 20 7a 4c 69 6e 65 3d 3d 30 20 3f 20 30 20   = zLine==0 ? 0 
3a10: 3a 20 31 30 30 3b 0a 20 20 69 6e 74 20 6e 20 3d  : 100;.  int n =
3a20: 20 30 3b 0a 0a 20 20 77 68 69 6c 65 28 20 31 20   0;..  while( 1 
3a30: 29 7b 0a 20 20 20 20 69 66 28 20 6e 2b 31 30 30  ){.    if( n+100
3a40: 3e 6e 4c 69 6e 65 20 29 7b 0a 20 20 20 20 20 20  >nLine ){.      
3a50: 6e 4c 69 6e 65 20 3d 20 6e 4c 69 6e 65 2a 32 20  nLine = nLine*2 
3a60: 2b 20 31 30 30 3b 0a 20 20 20 20 20 20 7a 4c 69  + 100;.      zLi
3a70: 6e 65 20 3d 20 72 65 61 6c 6c 6f 63 28 7a 4c 69  ne = realloc(zLi
3a80: 6e 65 2c 20 6e 4c 69 6e 65 29 3b 0a 20 20 20 20  ne, nLine);.    
3a90: 20 20 69 66 28 20 7a 4c 69 6e 65 3d 3d 30 20 29    if( zLine==0 )
3aa0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
3ab0: 0a 20 20 20 20 69 66 28 20 66 67 65 74 73 28 26  .    if( fgets(&
3ac0: 7a 4c 69 6e 65 5b 6e 5d 2c 20 6e 4c 69 6e 65 20  zLine[n], nLine 
3ad0: 2d 20 6e 2c 20 69 6e 29 3d 3d 30 20 29 7b 0a 20  - n, in)==0 ){. 
3ae0: 20 20 20 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b       if( n==0 ){
3af0: 0a 20 20 20 20 20 20 20 20 66 72 65 65 28 7a 4c  .        free(zL
3b00: 69 6e 65 29 3b 0a 20 20 20 20 20 20 20 20 72 65  ine);.        re
3b10: 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a  turn 0;.      }.
3b20: 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6e 5d 20 3d        zLine[n] =
3b30: 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   0;.      break;
3b40: 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65  .    }.    while
3b50: 28 20 7a 4c 69 6e 65 5b 6e 5d 20 29 20 6e 2b 2b  ( zLine[n] ) n++
3b60: 3b 0a 20 20 20 20 69 66 28 20 6e 3e 30 20 26 26  ;.    if( n>0 &&
3b70: 20 7a 4c 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 6e   zLine[n-1]=='\n
3b80: 27 20 29 7b 0a 20 20 20 20 20 20 6e 2d 2d 3b 0a  ' ){.      n--;.
3b90: 20 20 20 20 20 20 69 66 28 20 6e 3e 30 20 26 26        if( n>0 &&
3ba0: 20 7a 4c 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 72   zLine[n-1]=='\r
3bb0: 27 20 29 20 6e 2d 2d 3b 0a 20 20 20 20 20 20 7a  ' ) n--;.      z
3bc0: 4c 69 6e 65 5b 6e 5d 20 3d 20 30 3b 0a 20 20 20  Line[n] = 0;.   
3bd0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
3be0: 20 20 7d 0a 23 69 66 20 64 65 66 69 6e 65 64 28    }.#if defined(
3bf0: 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e  _WIN32) || defin
3c00: 65 64 28 57 49 4e 33 32 29 0a 20 20 2f 2a 20 46  ed(WIN32).  /* F
3c10: 6f 72 20 69 6e 74 65 72 61 63 74 69 76 65 20 69  or interactive i
3c20: 6e 70 75 74 20 6f 6e 20 57 69 6e 64 6f 77 73 20  nput on Windows 
3c30: 73 79 73 74 65 6d 73 2c 20 74 72 61 6e 73 6c 61  systems, transla
3c40: 74 65 20 74 68 65 0a 20 20 2a 2a 20 6d 75 6c 74  te the.  ** mult
3c50: 69 2d 62 79 74 65 20 63 68 61 72 61 63 74 65 72  i-byte character
3c60: 73 65 74 20 63 68 61 72 61 63 74 65 72 73 20 69  set characters i
3c70: 6e 74 6f 20 55 54 46 2d 38 2e 20 2a 2f 0a 20 20  nto UTF-8. */.  
3c80: 69 66 28 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74  if( stdin_is_int
3c90: 65 72 61 63 74 69 76 65 20 26 26 20 69 6e 3d 3d  eractive && in==
3ca0: 73 74 64 69 6e 20 29 7b 0a 20 20 20 20 63 68 61  stdin ){.    cha
3cb0: 72 20 2a 7a 54 72 61 6e 73 20 3d 20 73 71 6c 69  r *zTrans = sqli
3cc0: 74 65 33 5f 77 69 6e 33 32 5f 6d 62 63 73 5f 74  te3_win32_mbcs_t
3cd0: 6f 5f 75 74 66 38 5f 76 32 28 7a 4c 69 6e 65 2c  o_utf8_v2(zLine,
3ce0: 20 30 29 3b 0a 20 20 20 20 69 66 28 20 7a 54 72   0);.    if( zTr
3cf0: 61 6e 73 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ans ){.      int
3d00: 20 6e 54 72 61 6e 73 20 3d 20 73 74 72 6c 65 6e   nTrans = strlen
3d10: 33 30 28 7a 54 72 61 6e 73 29 2b 31 3b 0a 20 20  30(zTrans)+1;.  
3d20: 20 20 20 20 69 66 28 20 6e 54 72 61 6e 73 3e 6e      if( nTrans>n
3d30: 4c 69 6e 65 20 29 7b 0a 20 20 20 20 20 20 20 20  Line ){.        
3d40: 7a 4c 69 6e 65 20 3d 20 72 65 61 6c 6c 6f 63 28  zLine = realloc(
3d50: 7a 4c 69 6e 65 2c 20 6e 54 72 61 6e 73 29 3b 0a  zLine, nTrans);.
3d60: 20 20 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e          if( zLin
3d70: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  e==0 ){.        
3d80: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
3d90: 54 72 61 6e 73 29 3b 0a 20 20 20 20 20 20 20 20  Trans);.        
3da0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20    return 0;.    
3db0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
3dc0: 20 20 20 20 6d 65 6d 63 70 79 28 7a 4c 69 6e 65      memcpy(zLine
3dd0: 2c 20 7a 54 72 61 6e 73 2c 20 6e 54 72 61 6e 73  , zTrans, nTrans
3de0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3df0: 5f 66 72 65 65 28 7a 54 72 61 6e 73 29 3b 0a 20  _free(zTrans);. 
3e00: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
3e10: 2f 2a 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33  /* defined(_WIN3
3e20: 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49  2) || defined(WI
3e30: 4e 33 32 29 20 2a 2f 0a 20 20 72 65 74 75 72 6e  N32) */.  return
3e40: 20 7a 4c 69 6e 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   zLine;.}../*.**
3e50: 20 52 65 74 72 69 65 76 65 20 61 20 73 69 6e 67   Retrieve a sing
3e60: 6c 65 20 6c 69 6e 65 20 6f 66 20 69 6e 70 75 74  le line of input
3e70: 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   text..**.** If 
3e80: 69 6e 3d 3d 30 20 74 68 65 6e 20 72 65 61 64 20  in==0 then read 
3e90: 66 72 6f 6d 20 73 74 61 6e 64 61 72 64 20 69 6e  from standard in
3ea0: 70 75 74 20 61 6e 64 20 70 72 6f 6d 70 74 20 62  put and prompt b
3eb0: 65 66 6f 72 65 20 65 61 63 68 20 6c 69 6e 65 2e  efore each line.
3ec0: 0a 2a 2a 20 49 66 20 69 73 43 6f 6e 74 69 6e 75  .** If isContinu
3ed0: 61 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20 74  ation is true, t
3ee0: 68 65 6e 20 61 20 63 6f 6e 74 69 6e 75 61 74 69  hen a continuati
3ef0: 6f 6e 20 70 72 6f 6d 70 74 20 69 73 20 61 70 70  on prompt is app
3f00: 72 6f 70 72 69 61 74 65 2e 0a 2a 2a 20 49 66 20  ropriate..** If 
3f10: 69 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 20 69  isContinuation i
3f20: 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  s zero, then the
3f30: 20 6d 61 69 6e 20 70 72 6f 6d 70 74 20 73 68 6f   main prompt sho
3f40: 75 6c 64 20 62 65 20 75 73 65 64 2e 0a 2a 2a 0a  uld be used..**.
3f50: 2a 2a 20 49 66 20 7a 50 72 69 6f 72 20 69 73 20  ** If zPrior is 
3f60: 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74  not NULL then it
3f70: 20 69 73 20 61 20 62 75 66 66 65 72 20 66 72 6f   is a buffer fro
3f80: 6d 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74  m a prior call t
3f90: 6f 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e  o this.** routin
3fa0: 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 72 65  e that can be re
3fb0: 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  used..**.** The 
3fc0: 72 65 73 75 6c 74 20 69 73 20 73 74 6f 72 65 64  result is stored
3fd0: 20 69 6e 20 73 70 61 63 65 20 6f 62 74 61 69 6e   in space obtain
3fe0: 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
3ff0: 20 61 6e 64 20 6d 75 73 74 20 65 69 74 68 65 72   and must either
4000: 0a 2a 2a 20 62 65 20 66 72 65 65 64 20 62 79 20  .** be freed by 
4010: 74 68 65 20 63 61 6c 6c 65 72 20 6f 72 20 65 6c  the caller or el
4020: 73 65 20 70 61 73 73 65 64 20 62 61 63 6b 20 69  se passed back i
4030: 6e 74 6f 20 74 68 69 73 20 72 6f 75 74 69 6e 65  nto this routine
4040: 20 76 69 61 20 74 68 65 0a 2a 2a 20 7a 50 72 69   via the.** zPri
4050: 6f 72 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20  or argument for 
4060: 72 65 75 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  reuse..*/.static
4070: 20 63 68 61 72 20 2a 6f 6e 65 5f 69 6e 70 75 74   char *one_input
4080: 5f 6c 69 6e 65 28 46 49 4c 45 20 2a 69 6e 2c 20  _line(FILE *in, 
4090: 63 68 61 72 20 2a 7a 50 72 69 6f 72 2c 20 69 6e  char *zPrior, in
40a0: 74 20 69 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e  t isContinuation
40b0: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 50 72 6f 6d  ){.  char *zProm
40c0: 70 74 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65 73  pt;.  char *zRes
40d0: 75 6c 74 3b 0a 20 20 69 66 28 20 69 6e 21 3d 30  ult;.  if( in!=0
40e0: 20 29 7b 0a 20 20 20 20 7a 52 65 73 75 6c 74 20   ){.    zResult 
40f0: 3d 20 6c 6f 63 61 6c 5f 67 65 74 6c 69 6e 65 28  = local_getline(
4100: 7a 50 72 69 6f 72 2c 20 69 6e 29 3b 0a 20 20 7d  zPrior, in);.  }
4110: 65 6c 73 65 7b 0a 20 20 20 20 7a 50 72 6f 6d 70  else{.    zPromp
4120: 74 20 3d 20 69 73 43 6f 6e 74 69 6e 75 61 74 69  t = isContinuati
4130: 6f 6e 20 3f 20 63 6f 6e 74 69 6e 75 65 50 72 6f  on ? continuePro
4140: 6d 70 74 20 3a 20 6d 61 69 6e 50 72 6f 6d 70 74  mpt : mainPrompt
4150: 3b 0a 23 69 66 20 53 48 45 4c 4c 5f 55 53 45 5f  ;.#if SHELL_USE_
4160: 4c 4f 43 41 4c 5f 47 45 54 4c 49 4e 45 0a 20 20  LOCAL_GETLINE.  
4170: 20 20 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a    printf("%s", z
4180: 50 72 6f 6d 70 74 29 3b 0a 20 20 20 20 66 66 6c  Prompt);.    ffl
4190: 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20  ush(stdout);.   
41a0: 20 7a 52 65 73 75 6c 74 20 3d 20 6c 6f 63 61 6c   zResult = local
41b0: 5f 67 65 74 6c 69 6e 65 28 7a 50 72 69 6f 72 2c  _getline(zPrior,
41c0: 20 73 74 64 69 6e 29 3b 0a 23 65 6c 73 65 0a 20   stdin);.#else. 
41d0: 20 20 20 66 72 65 65 28 7a 50 72 69 6f 72 29 3b     free(zPrior);
41e0: 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 3d 20 73  .    zResult = s
41f0: 68 65 6c 6c 5f 72 65 61 64 6c 69 6e 65 28 7a 50  hell_readline(zP
4200: 72 6f 6d 70 74 29 3b 0a 20 20 20 20 69 66 28 20  rompt);.    if( 
4210: 7a 52 65 73 75 6c 74 20 26 26 20 2a 7a 52 65 73  zResult && *zRes
4220: 75 6c 74 20 29 20 73 68 65 6c 6c 5f 61 64 64 5f  ult ) shell_add_
4230: 68 69 73 74 6f 72 79 28 7a 52 65 73 75 6c 74 29  history(zResult)
4240: 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 72  ;.#endif.  }.  r
4250: 65 74 75 72 6e 20 7a 52 65 73 75 6c 74 3b 0a 7d  eturn zResult;.}
4260: 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  .../*.** Return 
4270: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 68  the value of a h
4280: 65 78 61 64 65 63 69 6d 61 6c 20 64 69 67 69 74  exadecimal digit
4290: 2e 20 20 52 65 74 75 72 6e 20 2d 31 20 69 66 20  .  Return -1 if 
42a0: 74 68 65 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20  the input.** is 
42b0: 6e 6f 74 20 61 20 68 65 78 20 64 69 67 69 74 2e  not a hex digit.
42c0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 68  .*/.static int h
42d0: 65 78 44 69 67 69 74 56 61 6c 75 65 28 63 68 61  exDigitValue(cha
42e0: 72 20 63 29 7b 0a 20 20 69 66 28 20 63 3e 3d 27  r c){.  if( c>='
42f0: 30 27 20 26 26 20 63 3c 3d 27 39 27 20 29 20 72  0' && c<='9' ) r
4300: 65 74 75 72 6e 20 63 20 2d 20 27 30 27 3b 0a 20  eturn c - '0';. 
4310: 20 69 66 28 20 63 3e 3d 27 61 27 20 26 26 20 63   if( c>='a' && c
4320: 3c 3d 27 66 27 20 29 20 72 65 74 75 72 6e 20 63  <='f' ) return c
4330: 20 2d 20 27 61 27 20 2b 20 31 30 3b 0a 20 20 69   - 'a' + 10;.  i
4340: 66 28 20 63 3e 3d 27 41 27 20 26 26 20 63 3c 3d  f( c>='A' && c<=
4350: 27 46 27 20 29 20 72 65 74 75 72 6e 20 63 20 2d  'F' ) return c -
4360: 20 27 41 27 20 2b 20 31 30 3b 0a 20 20 72 65 74   'A' + 10;.  ret
4370: 75 72 6e 20 2d 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn -1;.}../*.**
4380: 20 49 6e 74 65 72 70 72 65 74 20 7a 41 72 67 20   Interpret zArg 
4390: 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  as an integer va
43a0: 6c 75 65 2c 20 70 6f 73 73 69 62 6c 79 20 77 69  lue, possibly wi
43b0: 74 68 20 73 75 66 66 69 78 65 73 2e 0a 2a 2f 0a  th suffixes..*/.
43c0: 73 74 61 74 69 63 20 73 71 6c 69 74 65 33 5f 69  static sqlite3_i
43d0: 6e 74 36 34 20 69 6e 74 65 67 65 72 56 61 6c 75  nt64 integerValu
43e0: 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41  e(const char *zA
43f0: 72 67 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69  rg){.  sqlite3_i
4400: 6e 74 36 34 20 76 20 3d 20 30 3b 0a 20 20 73 74  nt64 v = 0;.  st
4410: 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
4420: 74 20 7b 20 63 68 61 72 20 2a 7a 53 75 66 66 69  t { char *zSuffi
4430: 78 3b 20 69 6e 74 20 69 4d 75 6c 74 3b 20 7d 20  x; int iMult; } 
4440: 61 4d 75 6c 74 5b 5d 20 3d 20 7b 0a 20 20 20 20  aMult[] = {.    
4450: 7b 20 22 4b 69 42 22 2c 20 31 30 32 34 20 7d 2c  { "KiB", 1024 },
4460: 0a 20 20 20 20 7b 20 22 4d 69 42 22 2c 20 31 30  .    { "MiB", 10
4470: 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b  24*1024 },.    {
4480: 20 22 47 69 42 22 2c 20 31 30 32 34 2a 31 30 32   "GiB", 1024*102
4490: 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20  4*1024 },.    { 
44a0: 22 4b 42 22 2c 20 20 31 30 30 30 20 7d 2c 0a 20  "KB",  1000 },. 
44b0: 20 20 20 7b 20 22 4d 42 22 2c 20 20 31 30 30 30     { "MB",  1000
44c0: 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 47 42  000 },.    { "GB
44d0: 22 2c 20 20 31 30 30 30 30 30 30 30 30 30 20 7d  ",  1000000000 }
44e0: 2c 0a 20 20 20 20 7b 20 22 4b 22 2c 20 20 20 31  ,.    { "K",   1
44f0: 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 22  000 },.    { "M"
4500: 2c 20 20 20 31 30 30 30 30 30 30 20 7d 2c 0a 20  ,   1000000 },. 
4510: 20 20 20 7b 20 22 47 22 2c 20 20 20 31 30 30 30     { "G",   1000
4520: 30 30 30 30 30 30 20 7d 2c 0a 20 20 7d 3b 0a 20  000000 },.  };. 
4530: 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 69 73   int i;.  int is
4540: 4e 65 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 7a  Neg = 0;.  if( z
4550: 41 72 67 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20  Arg[0]=='-' ){. 
4560: 20 20 20 69 73 4e 65 67 20 3d 20 31 3b 0a 20 20     isNeg = 1;.  
4570: 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 7d 65 6c 73    zArg++;.  }els
4580: 65 20 69 66 28 20 7a 41 72 67 5b 30 5d 3d 3d 27  e if( zArg[0]=='
4590: 2b 27 20 29 7b 0a 20 20 20 20 7a 41 72 67 2b 2b  +' ){.    zArg++
45a0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 41 72 67  ;.  }.  if( zArg
45b0: 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41 72 67  [0]=='0' && zArg
45c0: 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20  [1]=='x' ){.    
45d0: 69 6e 74 20 78 3b 0a 20 20 20 20 7a 41 72 67 20  int x;.    zArg 
45e0: 2b 3d 20 32 3b 0a 20 20 20 20 77 68 69 6c 65 28  += 2;.    while(
45f0: 20 28 78 20 3d 20 68 65 78 44 69 67 69 74 56 61   (x = hexDigitVa
4600: 6c 75 65 28 7a 41 72 67 5b 30 5d 29 29 3e 3d 30  lue(zArg[0]))>=0
4610: 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 28 76   ){.      v = (v
4620: 3c 3c 34 29 20 2b 20 78 3b 0a 20 20 20 20 20 20  <<4) + x;.      
4630: 7a 41 72 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  zArg++;.    }.  
4640: 7d 65 6c 73 65 7b 0a 20 20 20 20 77 68 69 6c 65  }else{.    while
4650: 28 20 49 73 44 69 67 69 74 28 7a 41 72 67 5b 30  ( IsDigit(zArg[0
4660: 5d 29 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  ]) ){.      v = 
4670: 76 2a 31 30 20 2b 20 7a 41 72 67 5b 30 5d 20 2d  v*10 + zArg[0] -
4680: 20 27 30 27 3b 0a 20 20 20 20 20 20 7a 41 72 67   '0';.      zArg
4690: 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ++;.    }.  }.  
46a0: 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79  for(i=0; i<Array
46b0: 53 69 7a 65 28 61 4d 75 6c 74 29 3b 20 69 2b 2b  Size(aMult); i++
46c0: 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ){.    if( sqlit
46d0: 65 33 5f 73 74 72 69 63 6d 70 28 61 4d 75 6c 74  e3_stricmp(aMult
46e0: 5b 69 5d 2e 7a 53 75 66 66 69 78 2c 20 7a 41 72  [i].zSuffix, zAr
46f0: 67 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 76  g)==0 ){.      v
4700: 20 2a 3d 20 61 4d 75 6c 74 5b 69 5d 2e 69 4d 75   *= aMult[i].iMu
4710: 6c 74 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  lt;.      break;
4720: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
4730: 75 72 6e 20 69 73 4e 65 67 3f 20 2d 76 20 3a 20  urn isNeg? -v : 
4740: 76 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20 76 61  v;.}../*.** A va
4750: 72 69 61 62 6c 65 20 6c 65 6e 67 74 68 20 73 74  riable length st
4760: 72 69 6e 67 20 74 6f 20 77 68 69 63 68 20 6f 6e  ring to which on
4770: 65 20 63 61 6e 20 61 70 70 65 6e 64 20 74 65 78  e can append tex
4780: 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  t..*/.typedef st
4790: 72 75 63 74 20 53 68 65 6c 6c 54 65 78 74 20 53  ruct ShellText S
47a0: 68 65 6c 6c 54 65 78 74 3b 0a 73 74 72 75 63 74  hellText;.struct
47b0: 20 53 68 65 6c 6c 54 65 78 74 20 7b 0a 20 20 63   ShellText {.  c
47c0: 68 61 72 20 2a 7a 3b 0a 20 20 69 6e 74 20 6e 3b  har *z;.  int n;
47d0: 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 0a 7d  .  int nAlloc;.}
47e0: 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c  ;../*.** Initial
47f0: 69 7a 65 20 61 6e 64 20 64 65 73 74 72 6f 79 20  ize and destroy 
4800: 61 20 53 68 65 6c 6c 54 65 78 74 20 6f 62 6a 65  a ShellText obje
4810: 63 74 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  ct.*/.static voi
4820: 64 20 69 6e 69 74 54 65 78 74 28 53 68 65 6c 6c  d initText(Shell
4830: 54 65 78 74 20 2a 70 29 7b 0a 20 20 6d 65 6d 73  Text *p){.  mems
4840: 65 74 28 70 2c 20 30 2c 20 73 69 7a 65 6f 66 28  et(p, 0, sizeof(
4850: 2a 70 29 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  *p));.}.static v
4860: 6f 69 64 20 66 72 65 65 54 65 78 74 28 53 68 65  oid freeText(She
4870: 6c 6c 54 65 78 74 20 2a 70 29 7b 0a 20 20 66 72  llText *p){.  fr
4880: 65 65 28 70 2d 3e 7a 29 3b 0a 20 20 69 6e 69 74  ee(p->z);.  init
4890: 54 65 78 74 28 70 29 3b 0a 7d 0a 0a 2f 2a 20 7a  Text(p);.}../* z
48a0: 49 6e 20 69 73 20 65 69 74 68 65 72 20 61 20 70  In is either a p
48b0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 4e 55 4c 4c  ointer to a NULL
48c0: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
48d0: 6e 67 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74  ng in memory obt
48e0: 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 6d 61  ained.** from ma
48f0: 6c 6c 6f 63 28 29 2c 20 6f 72 20 61 20 4e 55 4c  lloc(), or a NUL
4900: 4c 20 70 6f 69 6e 74 65 72 2e 20 54 68 65 20 73  L pointer. The s
4910: 74 72 69 6e 67 20 70 6f 69 6e 74 65 64 20 74 6f  tring pointed to
4920: 20 62 79 20 7a 41 70 70 65 6e 64 20 69 73 0a 2a   by zAppend is.*
4930: 2a 20 61 64 64 65 64 20 74 6f 20 7a 49 6e 2c 20  * added to zIn, 
4940: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72  and the result r
4950: 65 74 75 72 6e 65 64 20 69 6e 20 6d 65 6d 6f 72  eturned in memor
4960: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
4970: 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 20 7a 49 6e  malloc()..** zIn
4980: 2c 20 69 66 20 69 74 20 77 61 73 20 6e 6f 74 20  , if it was not 
4990: 4e 55 4c 4c 2c 20 69 73 20 66 72 65 65 64 2e 0a  NULL, is freed..
49a0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 68 69  **.** If the thi
49b0: 72 64 20 61 72 67 75 6d 65 6e 74 2c 20 71 75 6f  rd argument, quo
49c0: 74 65 2c 20 69 73 20 6e 6f 74 20 27 5c 30 27 2c  te, is not '\0',
49d0: 20 74 68 65 6e 20 69 74 20 69 73 20 75 73 65 64   then it is used
49e0: 20 61 73 20 61 0a 2a 2a 20 71 75 6f 74 65 20 63   as a.** quote c
49f0: 68 61 72 61 63 74 65 72 20 66 6f 72 20 7a 41 70  haracter for zAp
4a00: 70 65 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  pend..*/.static 
4a10: 76 6f 69 64 20 61 70 70 65 6e 64 54 65 78 74 28  void appendText(
4a20: 53 68 65 6c 6c 54 65 78 74 20 2a 70 2c 20 63 68  ShellText *p, ch
4a30: 61 72 20 63 6f 6e 73 74 20 2a 7a 41 70 70 65 6e  ar const *zAppen
4a40: 64 2c 20 63 68 61 72 20 71 75 6f 74 65 29 7b 0a  d, char quote){.
4a50: 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 69 6e 74    int len;.  int
4a60: 20 69 3b 0a 20 20 69 6e 74 20 6e 41 70 70 65 6e   i;.  int nAppen
4a70: 64 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 41 70  d = strlen30(zAp
4a80: 70 65 6e 64 29 3b 0a 0a 20 20 6c 65 6e 20 3d 20  pend);..  len = 
4a90: 6e 41 70 70 65 6e 64 2b 70 2d 3e 6e 2b 31 3b 0a  nAppend+p->n+1;.
4aa0: 20 20 69 66 28 20 71 75 6f 74 65 20 29 7b 0a 20    if( quote ){. 
4ab0: 20 20 20 6c 65 6e 20 2b 3d 20 32 3b 0a 20 20 20     len += 2;.   
4ac0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 70 70   for(i=0; i<nApp
4ad0: 65 6e 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  end; i++){.     
4ae0: 20 69 66 28 20 7a 41 70 70 65 6e 64 5b 69 5d 3d   if( zAppend[i]=
4af0: 3d 71 75 6f 74 65 20 29 20 6c 65 6e 2b 2b 3b 0a  =quote ) len++;.
4b00: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66 28      }.  }..  if(
4b10: 20 70 2d 3e 6e 2b 6c 65 6e 3e 3d 70 2d 3e 6e 41   p->n+len>=p->nA
4b20: 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  lloc ){.    p->n
4b30: 41 6c 6c 6f 63 20 3d 20 70 2d 3e 6e 41 6c 6c 6f  Alloc = p->nAllo
4b40: 63 2a 32 20 2b 20 6c 65 6e 20 2b 20 32 30 3b 0a  c*2 + len + 20;.
4b50: 20 20 20 20 70 2d 3e 7a 20 3d 20 72 65 61 6c 6c      p->z = reall
4b60: 6f 63 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c  oc(p->z, p->nAll
4b70: 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  oc);.    if( p->
4b80: 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6d 65  z==0 ){.      me
4b90: 6d 73 65 74 28 70 2c 20 30 2c 20 73 69 7a 65 6f  mset(p, 0, sizeo
4ba0: 66 28 2a 70 29 29 3b 0a 20 20 20 20 20 20 72 65  f(*p));.      re
4bb0: 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  turn;.    }.  }.
4bc0: 0a 20 20 69 66 28 20 71 75 6f 74 65 20 29 7b 0a  .  if( quote ){.
4bd0: 20 20 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d      char *zCsr =
4be0: 20 70 2d 3e 7a 2b 70 2d 3e 6e 3b 0a 20 20 20 20   p->z+p->n;.    
4bf0: 2a 7a 43 73 72 2b 2b 20 3d 20 71 75 6f 74 65 3b  *zCsr++ = quote;
4c00: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
4c10: 6e 41 70 70 65 6e 64 3b 20 69 2b 2b 29 7b 0a 20  nAppend; i++){. 
4c20: 20 20 20 20 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a       *zCsr++ = z
4c30: 41 70 70 65 6e 64 5b 69 5d 3b 0a 20 20 20 20 20  Append[i];.     
4c40: 20 69 66 28 20 7a 41 70 70 65 6e 64 5b 69 5d 3d   if( zAppend[i]=
4c50: 3d 71 75 6f 74 65 20 29 20 2a 7a 43 73 72 2b 2b  =quote ) *zCsr++
4c60: 20 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20 7d 0a   = quote;.    }.
4c70: 20 20 20 20 2a 7a 43 73 72 2b 2b 20 3d 20 71 75      *zCsr++ = qu
4c80: 6f 74 65 3b 0a 20 20 20 20 70 2d 3e 6e 20 3d 20  ote;.    p->n = 
4c90: 28 69 6e 74 29 28 7a 43 73 72 20 2d 20 70 2d 3e  (int)(zCsr - p->
4ca0: 7a 29 3b 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20  z);.    *zCsr = 
4cb0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  '\0';.  }else{. 
4cc0: 20 20 20 6d 65 6d 63 70 79 28 70 2d 3e 7a 2b 70     memcpy(p->z+p
4cd0: 2d 3e 6e 2c 20 7a 41 70 70 65 6e 64 2c 20 6e 41  ->n, zAppend, nA
4ce0: 70 70 65 6e 64 29 3b 0a 20 20 20 20 70 2d 3e 6e  ppend);.    p->n
4cf0: 20 2b 3d 20 6e 41 70 70 65 6e 64 3b 0a 20 20 20   += nAppend;.   
4d00: 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d 20 27 5c   p->z[p->n] = '\
4d10: 30 27 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  0';.  }.}../*.**
4d20: 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65   Attempt to dete
4d30: 72 6d 69 6e 65 20 69 66 20 69 64 65 6e 74 69 66  rmine if identif
4d40: 69 65 72 20 7a 4e 61 6d 65 20 6e 65 65 64 73 20  ier zName needs 
4d50: 74 6f 20 62 65 20 71 75 6f 74 65 64 2c 20 65 69  to be quoted, ei
4d60: 74 68 65 72 0a 2a 2a 20 62 65 63 61 75 73 65 20  ther.** because 
4d70: 69 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 6e 2d  it contains non-
4d80: 61 6c 70 68 61 6e 75 6d 65 72 69 63 20 63 68 61  alphanumeric cha
4d90: 72 61 63 74 65 72 73 2c 20 6f 72 20 62 65 63 61  racters, or beca
4da0: 75 73 65 20 69 74 20 69 73 20 61 6e 0a 2a 2a 20  use it is an.** 
4db0: 53 51 4c 69 74 65 20 6b 65 79 77 6f 72 64 2e 20  SQLite keyword. 
4dc0: 20 42 65 20 63 6f 6e 73 65 72 76 61 74 69 76 65   Be conservative
4dd0: 20 69 6e 20 74 68 69 73 20 65 73 74 69 6d 61 74   in this estimat
4de0: 65 3a 20 20 57 68 65 6e 20 69 6e 20 64 6f 75 62  e:  When in doub
4df0: 74 20 61 73 73 75 6d 65 0a 2a 2a 20 74 68 61 74  t assume.** that
4e00: 20 71 75 6f 74 69 6e 67 20 69 73 20 72 65 71 75   quoting is requ
4e10: 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75  ired..**.** Retu
4e20: 72 6e 20 27 22 27 20 69 66 20 71 75 6f 74 69 6e  rn '"' if quotin
4e30: 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 20 20  g is required.  
4e40: 52 65 74 75 72 6e 20 30 20 69 66 20 6e 6f 20 71  Return 0 if no q
4e50: 75 6f 74 69 6e 67 20 69 73 20 72 65 71 75 69 72  uoting is requir
4e60: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68  ed..*/.static ch
4e70: 61 72 20 71 75 6f 74 65 43 68 61 72 28 63 6f 6e  ar quoteChar(con
4e80: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b  st char *zName){
4e90: 0a 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 69 74 65  .  /* All SQLite
4ea0: 20 6b 65 79 77 6f 72 64 73 2c 20 69 6e 20 61 6c   keywords, in al
4eb0: 70 68 61 62 65 74 69 63 61 6c 20 6f 72 64 65 72  phabetical order
4ec0: 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f 6e   */.  static con
4ed0: 73 74 20 63 68 61 72 20 2a 61 7a 4b 65 79 77 6f  st char *azKeywo
4ee0: 72 64 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 22 41  rds[] = {.    "A
4ef0: 42 4f 52 54 22 2c 20 22 41 43 54 49 4f 4e 22 2c  BORT", "ACTION",
4f00: 20 22 41 44 44 22 2c 20 22 41 46 54 45 52 22 2c   "ADD", "AFTER",
4f10: 20 22 41 4c 4c 22 2c 20 22 41 4c 54 45 52 22 2c   "ALL", "ALTER",
4f20: 20 22 41 4e 41 4c 59 5a 45 22 2c 20 22 41 4e 44   "ANALYZE", "AND
4f30: 22 2c 20 22 41 53 22 2c 0a 20 20 20 20 22 41 53  ", "AS",.    "AS
4f40: 43 22 2c 20 22 41 54 54 41 43 48 22 2c 20 22 41  C", "ATTACH", "A
4f50: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 22 2c 20 22  UTOINCREMENT", "
4f60: 42 45 46 4f 52 45 22 2c 20 22 42 45 47 49 4e 22  BEFORE", "BEGIN"
4f70: 2c 20 22 42 45 54 57 45 45 4e 22 2c 20 22 42 59  , "BETWEEN", "BY
4f80: 22 2c 0a 20 20 20 20 22 43 41 53 43 41 44 45 22  ",.    "CASCADE"
4f90: 2c 20 22 43 41 53 45 22 2c 20 22 43 41 53 54 22  , "CASE", "CAST"
4fa0: 2c 20 22 43 48 45 43 4b 22 2c 20 22 43 4f 4c 4c  , "CHECK", "COLL
4fb0: 41 54 45 22 2c 20 22 43 4f 4c 55 4d 4e 22 2c 20  ATE", "COLUMN", 
4fc0: 22 43 4f 4d 4d 49 54 22 2c 0a 20 20 20 20 22 43  "COMMIT",.    "C
4fd0: 4f 4e 46 4c 49 43 54 22 2c 20 22 43 4f 4e 53 54  ONFLICT", "CONST
4fe0: 52 41 49 4e 54 22 2c 20 22 43 52 45 41 54 45 22  RAINT", "CREATE"
4ff0: 2c 20 22 43 52 4f 53 53 22 2c 20 22 43 55 52 52  , "CROSS", "CURR
5000: 45 4e 54 5f 44 41 54 45 22 2c 0a 20 20 20 20 22  ENT_DATE",.    "
5010: 43 55 52 52 45 4e 54 5f 54 49 4d 45 22 2c 20 22  CURRENT_TIME", "
5020: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
5030: 50 22 2c 20 22 44 41 54 41 42 41 53 45 22 2c 20  P", "DATABASE", 
5040: 22 44 45 46 41 55 4c 54 22 2c 20 22 44 45 46 45  "DEFAULT", "DEFE
5050: 52 52 41 42 4c 45 22 2c 0a 20 20 20 20 22 44 45  RRABLE",.    "DE
5060: 46 45 52 52 45 44 22 2c 20 22 44 45 4c 45 54 45  FERRED", "DELETE
5070: 22 2c 20 22 44 45 53 43 22 2c 20 22 44 45 54 41  ", "DESC", "DETA
5080: 43 48 22 2c 20 22 44 49 53 54 49 4e 43 54 22 2c  CH", "DISTINCT",
5090: 20 22 44 52 4f 50 22 2c 20 22 45 41 43 48 22 2c   "DROP", "EACH",
50a0: 0a 20 20 20 20 22 45 4c 53 45 22 2c 20 22 45 4e  .    "ELSE", "EN
50b0: 44 22 2c 20 22 45 53 43 41 50 45 22 2c 20 22 45  D", "ESCAPE", "E
50c0: 58 43 45 50 54 22 2c 20 22 45 58 43 4c 55 53 49  XCEPT", "EXCLUSI
50d0: 56 45 22 2c 20 22 45 58 49 53 54 53 22 2c 20 22  VE", "EXISTS", "
50e0: 45 58 50 4c 41 49 4e 22 2c 0a 20 20 20 20 22 46  EXPLAIN",.    "F
50f0: 41 49 4c 22 2c 20 22 46 4f 52 22 2c 20 22 46 4f  AIL", "FOR", "FO
5100: 52 45 49 47 4e 22 2c 20 22 46 52 4f 4d 22 2c 20  REIGN", "FROM", 
5110: 22 46 55 4c 4c 22 2c 20 22 47 4c 4f 42 22 2c 20  "FULL", "GLOB", 
5120: 22 47 52 4f 55 50 22 2c 20 22 48 41 56 49 4e 47  "GROUP", "HAVING
5130: 22 2c 20 22 49 46 22 2c 0a 20 20 20 20 22 49 47  ", "IF",.    "IG
5140: 4e 4f 52 45 22 2c 20 22 49 4d 4d 45 44 49 41 54  NORE", "IMMEDIAT
5150: 45 22 2c 20 22 49 4e 22 2c 20 22 49 4e 44 45 58  E", "IN", "INDEX
5160: 22 2c 20 22 49 4e 44 45 58 45 44 22 2c 20 22 49  ", "INDEXED", "I
5170: 4e 49 54 49 41 4c 4c 59 22 2c 20 22 49 4e 4e 45  NITIALLY", "INNE
5180: 52 22 2c 0a 20 20 20 20 22 49 4e 53 45 52 54 22  R",.    "INSERT"
5190: 2c 20 22 49 4e 53 54 45 41 44 22 2c 20 22 49 4e  , "INSTEAD", "IN
51a0: 54 45 52 53 45 43 54 22 2c 20 22 49 4e 54 4f 22  TERSECT", "INTO"
51b0: 2c 20 22 49 53 22 2c 20 22 49 53 4e 55 4c 4c 22  , "IS", "ISNULL"
51c0: 2c 20 22 4a 4f 49 4e 22 2c 20 22 4b 45 59 22 2c  , "JOIN", "KEY",
51d0: 0a 20 20 20 20 22 4c 45 46 54 22 2c 20 22 4c 49  .    "LEFT", "LI
51e0: 4b 45 22 2c 20 22 4c 49 4d 49 54 22 2c 20 22 4d  KE", "LIMIT", "M
51f0: 41 54 43 48 22 2c 20 22 4e 41 54 55 52 41 4c 22  ATCH", "NATURAL"
5200: 2c 20 22 4e 4f 22 2c 20 22 4e 4f 54 22 2c 20 22  , "NO", "NOT", "
5210: 4e 4f 54 4e 55 4c 4c 22 2c 0a 20 20 20 20 22 4e  NOTNULL",.    "N
5220: 55 4c 4c 22 2c 20 22 4f 46 22 2c 20 22 4f 46 46  ULL", "OF", "OFF
5230: 53 45 54 22 2c 20 22 4f 4e 22 2c 20 22 4f 52 22  SET", "ON", "OR"
5240: 2c 20 22 4f 52 44 45 52 22 2c 20 22 4f 55 54 45  , "ORDER", "OUTE
5250: 52 22 2c 20 22 50 4c 41 4e 22 2c 20 22 50 52 41  R", "PLAN", "PRA
5260: 47 4d 41 22 2c 0a 20 20 20 20 22 50 52 49 4d 41  GMA",.    "PRIMA
5270: 52 59 22 2c 20 22 51 55 45 52 59 22 2c 20 22 52  RY", "QUERY", "R
5280: 41 49 53 45 22 2c 20 22 52 45 43 55 52 53 49 56  AISE", "RECURSIV
5290: 45 22 2c 20 22 52 45 46 45 52 45 4e 43 45 53 22  E", "REFERENCES"
52a0: 2c 20 22 52 45 47 45 58 50 22 2c 0a 20 20 20 20  , "REGEXP",.    
52b0: 22 52 45 49 4e 44 45 58 22 2c 20 22 52 45 4c 45  "REINDEX", "RELE
52c0: 41 53 45 22 2c 20 22 52 45 4e 41 4d 45 22 2c 20  ASE", "RENAME", 
52d0: 22 52 45 50 4c 41 43 45 22 2c 20 22 52 45 53 54  "REPLACE", "REST
52e0: 52 49 43 54 22 2c 20 22 52 49 47 48 54 22 2c 0a  RICT", "RIGHT",.
52f0: 20 20 20 20 22 52 4f 4c 4c 42 41 43 4b 22 2c 20      "ROLLBACK", 
5300: 22 52 4f 57 22 2c 20 22 53 41 56 45 50 4f 49 4e  "ROW", "SAVEPOIN
5310: 54 22 2c 20 22 53 45 4c 45 43 54 22 2c 20 22 53  T", "SELECT", "S
5320: 45 54 22 2c 20 22 54 41 42 4c 45 22 2c 20 22 54  ET", "TABLE", "T
5330: 45 4d 50 22 2c 0a 20 20 20 20 22 54 45 4d 50 4f  EMP",.    "TEMPO
5340: 52 41 52 59 22 2c 20 22 54 48 45 4e 22 2c 20 22  RARY", "THEN", "
5350: 54 4f 22 2c 20 22 54 52 41 4e 53 41 43 54 49 4f  TO", "TRANSACTIO
5360: 4e 22 2c 20 22 54 52 49 47 47 45 52 22 2c 20 22  N", "TRIGGER", "
5370: 55 4e 49 4f 4e 22 2c 20 22 55 4e 49 51 55 45 22  UNION", "UNIQUE"
5380: 2c 0a 20 20 20 20 22 55 50 44 41 54 45 22 2c 20  ,.    "UPDATE", 
5390: 22 55 53 49 4e 47 22 2c 20 22 56 41 43 55 55 4d  "USING", "VACUUM
53a0: 22 2c 20 22 56 41 4c 55 45 53 22 2c 20 22 56 49  ", "VALUES", "VI
53b0: 45 57 22 2c 20 22 56 49 52 54 55 41 4c 22 2c 20  EW", "VIRTUAL", 
53c0: 22 57 48 45 4e 22 2c 20 22 57 48 45 52 45 22 2c  "WHEN", "WHERE",
53d0: 0a 20 20 20 20 22 57 49 54 48 22 2c 20 22 57 49  .    "WITH", "WI
53e0: 54 48 4f 55 54 22 2c 0a 20 20 7d 3b 0a 20 20 69  THOUT",.  };.  i
53f0: 6e 74 20 69 2c 20 6c 77 72 2c 20 75 70 72 2c 20  nt i, lwr, upr, 
5400: 6d 69 64 2c 20 63 3b 0a 20 20 69 66 28 20 21 69  mid, c;.  if( !i
5410: 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
5420: 20 63 68 61 72 29 7a 4e 61 6d 65 5b 30 5d 29 20   char)zName[0]) 
5430: 26 26 20 7a 4e 61 6d 65 5b 30 5d 21 3d 27 5f 27  && zName[0]!='_'
5440: 20 29 20 72 65 74 75 72 6e 20 27 22 27 3b 0a 20   ) return '"';. 
5450: 20 66 6f 72 28 69 3d 30 3b 20 7a 4e 61 6d 65 5b   for(i=0; zName[
5460: 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  i]; i++){.    if
5470: 28 20 21 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69  ( !isalnum((unsi
5480: 67 6e 65 64 20 63 68 61 72 29 7a 4e 61 6d 65 5b  gned char)zName[
5490: 69 5d 29 20 26 26 20 7a 4e 61 6d 65 5b 69 5d 21  i]) && zName[i]!
54a0: 3d 27 5f 27 20 29 20 72 65 74 75 72 6e 20 27 22  ='_' ) return '"
54b0: 27 3b 0a 20 20 7d 0a 20 20 6c 77 72 20 3d 20 30  ';.  }.  lwr = 0
54c0: 3b 0a 20 20 75 70 72 20 3d 20 73 69 7a 65 6f 66  ;.  upr = sizeof
54d0: 28 61 7a 4b 65 79 77 6f 72 64 73 29 2f 73 69 7a  (azKeywords)/siz
54e0: 65 6f 66 28 61 7a 4b 65 79 77 6f 72 64 73 5b 30  eof(azKeywords[0
54f0: 5d 29 20 2d 20 31 3b 0a 20 20 77 68 69 6c 65 28  ]) - 1;.  while(
5500: 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20   lwr<=upr ){.   
5510: 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29   mid = (lwr+upr)
5520: 2f 32 3b 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  /2;.    c = sqli
5530: 74 65 33 5f 73 74 72 69 63 6d 70 28 61 7a 4b 65  te3_stricmp(azKe
5540: 79 77 6f 72 64 73 5b 6d 69 64 5d 2c 20 7a 4e 61  ywords[mid], zNa
5550: 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 63 3d 3d  me);.    if( c==
5560: 30 20 29 20 72 65 74 75 72 6e 20 27 22 27 3b 0a  0 ) return '"';.
5570: 20 20 20 20 69 66 28 20 63 3c 30 20 29 7b 0a 20      if( c<0 ){. 
5580: 20 20 20 20 20 6c 77 72 20 3d 20 6d 69 64 2b 31       lwr = mid+1
5590: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
55a0: 20 20 20 75 70 72 20 3d 20 6d 69 64 2d 31 3b 0a     upr = mid-1;.
55b0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
55c0: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  rn 0;.}../*.** C
55d0: 6f 6e 73 74 72 75 63 74 20 61 20 66 61 6b 65 20  onstruct a fake 
55e0: 6f 62 6a 65 63 74 20 6e 61 6d 65 20 61 6e 64 20  object name and 
55f0: 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 74 6f 20 64  column list to d
5600: 65 73 63 72 69 62 65 20 74 68 65 20 73 74 72 75  escribe the stru
5610: 63 74 75 72 65 0a 2a 2a 20 6f 66 20 74 68 65 20  cture.** of the 
5620: 76 69 65 77 2c 20 76 69 72 74 75 61 6c 20 74 61  view, virtual ta
5630: 62 6c 65 2c 20 6f 72 20 74 61 62 6c 65 20 76 61  ble, or table va
5640: 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 20 7a 53  lued function zS
5650: 63 68 65 6d 61 2e 7a 4e 61 6d 65 2e 0a 2a 2f 0a  chema.zName..*/.
5660: 73 74 61 74 69 63 20 63 68 61 72 20 2a 73 68 65  static char *she
5670: 6c 6c 46 61 6b 65 53 63 68 65 6d 61 28 0a 20 20  llFakeSchema(.  
5680: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
5690: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
56a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
56b0: 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  on containing th
56c0: 65 20 76 74 61 62 20 2a 2f 0a 20 20 63 6f 6e 73  e vtab */.  cons
56d0: 74 20 63 68 61 72 20 2a 7a 53 63 68 65 6d 61 2c  t char *zSchema,
56e0: 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 6f 66      /* Schema of
56f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 6f   the database ho
5700: 6c 64 69 6e 67 20 74 68 65 20 76 74 61 62 20 2a  lding the vtab *
5710: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
5720: 7a 4e 61 6d 65 20 20 20 20 20 20 20 2f 2a 20 54  zName       /* T
5730: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 76  he name of the v
5740: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
5750: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
5760: 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20  t *pStmt = 0;.  
5770: 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 53 68  char *zSql;.  Sh
5780: 65 6c 6c 54 65 78 74 20 73 3b 0a 20 20 63 68 61  ellText s;.  cha
5790: 72 20 63 51 75 6f 74 65 3b 0a 20 20 63 68 61 72  r cQuote;.  char
57a0: 20 2a 7a 44 69 76 20 3d 20 22 28 22 3b 0a 20 20   *zDiv = "(";.  
57b0: 69 6e 74 20 6e 52 6f 77 20 3d 20 30 3b 0a 0a 20  int nRow = 0;.. 
57c0: 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f   zSql = sqlite3_
57d0: 6d 70 72 69 6e 74 66 28 22 50 52 41 47 4d 41 20  mprintf("PRAGMA 
57e0: 5c 22 25 77 5c 22 2e 74 61 62 6c 65 5f 69 6e 66  \"%w\".table_inf
57f0: 6f 3d 25 51 3b 22 2c 0a 20 20 20 20 20 20 20 20  o=%Q;",.        
5800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5810: 20 7a 53 63 68 65 6d 61 20 3f 20 7a 53 63 68 65   zSchema ? zSche
5820: 6d 61 20 3a 20 22 6d 61 69 6e 22 2c 20 7a 4e 61  ma : "main", zNa
5830: 6d 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 70  me);.  sqlite3_p
5840: 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 53  repare_v2(db, zS
5850: 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  ql, -1, &pStmt, 
5860: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  0);.  sqlite3_fr
5870: 65 65 28 7a 53 71 6c 29 3b 0a 20 20 69 6e 69 74  ee(zSql);.  init
5880: 54 65 78 74 28 26 73 29 3b 0a 20 20 69 66 28 20  Text(&s);.  if( 
5890: 7a 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 63  zSchema ){.    c
58a0: 51 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61  Quote = quoteCha
58b0: 72 28 7a 53 63 68 65 6d 61 29 3b 0a 20 20 20 20  r(zSchema);.    
58c0: 69 66 28 20 63 51 75 6f 74 65 20 26 26 20 73 71  if( cQuote && sq
58d0: 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 53  lite3_stricmp(zS
58e0: 63 68 65 6d 61 2c 22 74 65 6d 70 22 29 3d 3d 30  chema,"temp")==0
58f0: 20 29 20 63 51 75 6f 74 65 20 3d 20 30 3b 0a 20   ) cQuote = 0;. 
5900: 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
5910: 2c 20 7a 53 63 68 65 6d 61 2c 20 63 51 75 6f 74  , zSchema, cQuot
5920: 65 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65  e);.    appendTe
5930: 78 74 28 26 73 2c 20 22 2e 22 2c 20 30 29 3b 0a  xt(&s, ".", 0);.
5940: 20 20 7d 0a 20 20 63 51 75 6f 74 65 20 3d 20 71    }.  cQuote = q
5950: 75 6f 74 65 43 68 61 72 28 7a 4e 61 6d 65 29 3b  uoteChar(zName);
5960: 0a 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73  .  appendText(&s
5970: 2c 20 7a 4e 61 6d 65 2c 20 63 51 75 6f 74 65 29  , zName, cQuote)
5980: 3b 0a 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74  ;.  while( sqlit
5990: 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d  e3_step(pStmt)==
59a0: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20  SQLITE_ROW ){.  
59b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
59c0: 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  ol = (const char
59d0: 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
59e0: 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 29 3b  _text(pStmt, 1);
59f0: 0a 20 20 20 20 6e 52 6f 77 2b 2b 3b 0a 20 20 20  .    nRow++;.   
5a00: 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20   appendText(&s, 
5a10: 7a 44 69 76 2c 20 30 29 3b 0a 20 20 20 20 7a 44  zDiv, 0);.    zD
5a20: 69 76 20 3d 20 22 2c 22 3b 0a 20 20 20 20 63 51  iv = ",";.    cQ
5a30: 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61 72  uote = quoteChar
5a40: 28 7a 43 6f 6c 29 3b 0a 20 20 20 20 61 70 70 65  (zCol);.    appe
5a50: 6e 64 54 65 78 74 28 26 73 2c 20 7a 43 6f 6c 2c  ndText(&s, zCol,
5a60: 20 63 51 75 6f 74 65 29 3b 0a 20 20 7d 0a 20 20   cQuote);.  }.  
5a70: 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20 22  appendText(&s, "
5a80: 29 22 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65  )", 0);.  sqlite
5a90: 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
5aa0: 29 3b 0a 20 20 69 66 28 20 6e 52 6f 77 3d 3d 30  );.  if( nRow==0
5ab0: 20 29 7b 0a 20 20 20 20 66 72 65 65 54 65 78 74   ){.    freeText
5ac0: 28 26 73 29 3b 0a 20 20 20 20 73 2e 7a 20 3d 20  (&s);.    s.z = 
5ad0: 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  0;.  }.  return 
5ae0: 73 2e 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 51  s.z;.}../*.** SQ
5af0: 4c 20 66 75 6e 63 74 69 6f 6e 3a 20 20 73 68 65  L function:  she
5b00: 6c 6c 5f 6d 6f 64 75 6c 65 5f 73 63 68 65 6d 61  ll_module_schema
5b10: 28 58 29 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  (X).**.** Return
5b20: 20 61 20 66 61 6b 65 20 73 63 68 65 6d 61 20 66   a fake schema f
5b30: 6f 72 20 74 68 65 20 74 61 62 6c 65 2d 76 61 6c  or the table-val
5b40: 75 65 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20  ued function or 
5b50: 65 70 6f 6e 79 6d 6f 75 73 20 76 69 72 74 75 61  eponymous virtua
5b60: 6c 0a 2a 2a 20 74 61 62 6c 65 20 58 2e 0a 2a 2f  l.** table X..*/
5b70: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 68 65  .static void she
5b80: 6c 6c 4d 6f 64 75 6c 65 53 63 68 65 6d 61 28 0a  llModuleSchema(.
5b90: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
5ba0: 74 20 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20 6e  t *pCtx,.  int n
5bb0: 56 61 6c 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76  Val,.  sqlite3_v
5bc0: 61 6c 75 65 20 2a 2a 61 70 56 61 6c 0a 29 7b 0a  alue **apVal.){.
5bd0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
5be0: 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  ame = (const cha
5bf0: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
5c00: 5f 74 65 78 74 28 61 70 56 61 6c 5b 30 5d 29 3b  _text(apVal[0]);
5c10: 0a 20 20 63 68 61 72 20 2a 7a 46 61 6b 65 20 3d  .  char *zFake =
5c20: 20 73 68 65 6c 6c 46 61 6b 65 53 63 68 65 6d 61   shellFakeSchema
5c30: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
5c40: 5f 64 62 5f 68 61 6e 64 6c 65 28 70 43 74 78 29  _db_handle(pCtx)
5c50: 2c 20 30 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 55  , 0, zName);.  U
5c60: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
5c70: 6e 56 61 6c 29 3b 0a 20 20 69 66 28 20 7a 46 61  nVal);.  if( zFa
5c80: 6b 65 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ke ){.    sqlite
5c90: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43  3_result_text(pC
5ca0: 74 78 2c 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  tx, sqlite3_mpri
5cb0: 6e 74 66 28 22 2f 2a 20 25 73 20 2a 2f 22 2c 20  ntf("/* %s */", 
5cc0: 7a 46 61 6b 65 29 2c 0a 20 20 20 20 20 20 20 20  zFake),.        
5cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ce0: 2d 31 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  -1, sqlite3_free
5cf0: 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 46 61 6b  );.    free(zFak
5d00: 65 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  e);.  }.}../*.**
5d10: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 3a 20 20   SQL function:  
5d20: 73 68 65 6c 6c 5f 61 64 64 5f 73 63 68 65 6d 61  shell_add_schema
5d30: 28 53 2c 58 29 0a 2a 2a 0a 2a 2a 20 41 64 64 20  (S,X).**.** Add 
5d40: 74 68 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20  the schema name 
5d50: 58 20 74 6f 20 74 68 65 20 43 52 45 41 54 45 20  X to the CREATE 
5d60: 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 53 20 61  statement in S a
5d70: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
5d80: 73 75 6c 74 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65  sult..** Example
5d90: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 43 52 45 41  s:.**.**    CREA
5da0: 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 20 20  TE TABLE t1(x)  
5db0: 20 2d 3e 20 20 20 43 52 45 41 54 45 20 54 41 42   ->   CREATE TAB
5dc0: 4c 45 20 78 79 7a 2e 74 31 28 78 29 3b 0a 2a 2a  LE xyz.t1(x);.**
5dd0: 0a 2a 2a 20 41 6c 73 6f 20 77 6f 72 6b 73 20 6f  .** Also works o
5de0: 6e 0a 2a 2a 0a 2a 2a 20 20 20 20 43 52 45 41 54  n.**.**    CREAT
5df0: 45 20 49 4e 44 45 58 0a 2a 2a 20 20 20 20 43 52  E INDEX.**    CR
5e00: 45 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45  EATE UNIQUE INDE
5e10: 58 0a 2a 2a 20 20 20 20 43 52 45 41 54 45 20 56  X.**    CREATE V
5e20: 49 45 57 0a 2a 2a 20 20 20 20 43 52 45 41 54 45  IEW.**    CREATE
5e30: 20 54 52 49 47 47 45 52 0a 2a 2a 20 20 20 20 43   TRIGGER.**    C
5e40: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
5e50: 42 4c 45 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 55  BLE.**.** This U
5e60: 44 46 20 69 73 20 75 73 65 64 20 62 79 20 74 68  DF is used by th
5e70: 65 20 2e 73 63 68 65 6d 61 20 63 6f 6d 6d 61 6e  e .schema comman
5e80: 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20  d to insert the 
5e90: 73 63 68 65 6d 61 20 6e 61 6d 65 20 6f 66 0a 2a  schema name of.*
5ea0: 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  * attached datab
5eb0: 61 73 65 73 20 69 6e 74 6f 20 74 68 65 20 6d 69  ases into the mi
5ec0: 64 64 6c 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ddle of the sqli
5ed0: 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 66 69  te_master.sql fi
5ee0: 65 6c 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  eld..*/.static v
5ef0: 6f 69 64 20 73 68 65 6c 6c 41 64 64 53 63 68 65  oid shellAddSche
5f00: 6d 61 4e 61 6d 65 28 0a 20 20 73 71 6c 69 74 65  maName(.  sqlite
5f10: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
5f20: 0a 20 20 69 6e 74 20 6e 56 61 6c 2c 0a 20 20 73  .  int nVal,.  s
5f30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
5f40: 70 56 61 6c 0a 29 7b 0a 20 20 73 74 61 74 69 63  pVal.){.  static
5f50: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 50 72   const char *aPr
5f60: 65 66 69 78 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  efix[] = {.     
5f70: 22 54 41 42 4c 45 22 2c 0a 20 20 20 20 20 22 49  "TABLE",.     "I
5f80: 4e 44 45 58 22 2c 0a 20 20 20 20 20 22 55 4e 49  NDEX",.     "UNI
5f90: 51 55 45 20 49 4e 44 45 58 22 2c 0a 20 20 20 20  QUE INDEX",.    
5fa0: 20 22 56 49 45 57 22 2c 0a 20 20 20 20 20 22 54   "VIEW",.     "T
5fb0: 52 49 47 47 45 52 22 2c 0a 20 20 20 20 20 22 56  RIGGER",.     "V
5fc0: 49 52 54 55 41 4c 20 54 41 42 4c 45 22 0a 20 20  IRTUAL TABLE".  
5fd0: 7d 3b 0a 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a  };.  int i = 0;.
5fe0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49    const char *zI
5ff0: 6e 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  n = (const char*
6000: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
6010: 65 78 74 28 61 70 56 61 6c 5b 30 5d 29 3b 0a 20  ext(apVal[0]);. 
6020: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 63   const char *zSc
6030: 68 65 6d 61 20 3d 20 28 63 6f 6e 73 74 20 63 68  hema = (const ch
6040: 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
6050: 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 31 5d 29  e_text(apVal[1])
6060: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
6070: 7a 4e 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20 63  zName = (const c
6080: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
6090: 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 32 5d  ue_text(apVal[2]
60a0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  );.  sqlite3 *db
60b0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65   = sqlite3_conte
60c0: 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28 70 43 74  xt_db_handle(pCt
60d0: 78 29 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52  x);.  UNUSED_PAR
60e0: 41 4d 45 54 45 52 28 6e 56 61 6c 29 3b 0a 20 20  AMETER(nVal);.  
60f0: 69 66 28 20 7a 49 6e 21 3d 30 20 26 26 20 73 74  if( zIn!=0 && st
6100: 72 6e 63 6d 70 28 7a 49 6e 2c 20 22 43 52 45 41  rncmp(zIn, "CREA
6110: 54 45 20 22 2c 20 37 29 3d 3d 30 20 29 7b 0a 20  TE ", 7)==0 ){. 
6120: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 28 69     for(i=0; i<(i
6130: 6e 74 29 28 73 69 7a 65 6f 66 28 61 50 72 65 66  nt)(sizeof(aPref
6140: 69 78 29 2f 73 69 7a 65 6f 66 28 61 50 72 65 66  ix)/sizeof(aPref
6150: 69 78 5b 30 5d 29 29 3b 20 69 2b 2b 29 7b 0a 20  ix[0])); i++){. 
6160: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 74 72       int n = str
6170: 6c 65 6e 33 30 28 61 50 72 65 66 69 78 5b 69 5d  len30(aPrefix[i]
6180: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72  );.      if( str
6190: 6e 63 6d 70 28 7a 49 6e 2b 37 2c 20 61 50 72 65  ncmp(zIn+7, aPre
61a0: 66 69 78 5b 69 5d 2c 20 6e 29 3d 3d 30 20 26 26  fix[i], n)==0 &&
61b0: 20 7a 49 6e 5b 6e 2b 37 5d 3d 3d 27 20 27 20 29   zIn[n+7]==' ' )
61c0: 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a  {.        char *
61d0: 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 63  z = 0;.        c
61e0: 68 61 72 20 2a 7a 46 61 6b 65 20 3d 20 30 3b 0a  har *zFake = 0;.
61f0: 20 20 20 20 20 20 20 20 69 66 28 20 7a 53 63 68          if( zSch
6200: 65 6d 61 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ema ){.         
6210: 20 63 68 61 72 20 63 51 75 6f 74 65 20 3d 20 71   char cQuote = q
6220: 75 6f 74 65 43 68 61 72 28 7a 53 63 68 65 6d 61  uoteChar(zSchema
6230: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
6240: 20 63 51 75 6f 74 65 20 26 26 20 73 71 6c 69 74   cQuote && sqlit
6250: 65 33 5f 73 74 72 69 63 6d 70 28 7a 53 63 68 65  e3_stricmp(zSche
6260: 6d 61 2c 22 74 65 6d 70 22 29 21 3d 30 20 29 7b  ma,"temp")!=0 ){
6270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 20 3d  .            z =
6280: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
6290: 28 22 25 2e 2a 73 20 5c 22 25 77 5c 22 2e 25 73  ("%.*s \"%w\".%s
62a0: 22 2c 20 6e 2b 37 2c 20 7a 49 6e 2c 20 7a 53 63  ", n+7, zIn, zSc
62b0: 68 65 6d 61 2c 20 7a 49 6e 2b 6e 2b 38 29 3b 0a  hema, zIn+n+8);.
62c0: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
62d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 20 3d  .            z =
62e0: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
62f0: 28 22 25 2e 2a 73 20 25 73 2e 25 73 22 2c 20 6e  ("%.*s %s.%s", n
6300: 2b 37 2c 20 7a 49 6e 2c 20 7a 53 63 68 65 6d 61  +7, zIn, zSchema
6310: 2c 20 7a 49 6e 2b 6e 2b 38 29 3b 0a 20 20 20 20  , zIn+n+8);.    
6320: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
6330: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 4e  }.        if( zN
6340: 61 6d 65 0a 20 20 20 20 20 20 20 20 20 26 26 20  ame.         && 
6350: 61 50 72 65 66 69 78 5b 69 5d 5b 30 5d 3d 3d 27  aPrefix[i][0]=='
6360: 56 27 0a 20 20 20 20 20 20 20 20 20 26 26 20 28  V'.         && (
6370: 7a 46 61 6b 65 20 3d 20 73 68 65 6c 6c 46 61 6b  zFake = shellFak
6380: 65 53 63 68 65 6d 61 28 64 62 2c 20 7a 53 63 68  eSchema(db, zSch
6390: 65 6d 61 2c 20 7a 4e 61 6d 65 29 29 21 3d 30 0a  ema, zName))!=0.
63a0: 20 20 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20          ){.     
63b0: 20 20 20 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b       if( z==0 ){
63c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 20 3d  .            z =
63d0: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
63e0: 28 22 25 73 5c 6e 2f 2a 20 25 73 20 2a 2f 22 2c  ("%s\n/* %s */",
63f0: 20 7a 49 6e 2c 20 7a 46 61 6b 65 29 3b 0a 20 20   zIn, zFake);.  
6400: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
6410: 20 20 20 20 20 20 20 20 20 20 20 7a 20 3d 20 73             z = s
6420: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
6430: 25 7a 5c 6e 2f 2a 20 25 73 20 2a 2f 22 2c 20 7a  %z\n/* %s */", z
6440: 2c 20 7a 46 61 6b 65 29 3b 0a 20 20 20 20 20 20  , zFake);.      
6450: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
6460: 66 72 65 65 28 7a 46 61 6b 65 29 3b 0a 20 20 20  free(zFake);.   
6470: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
6480: 66 28 20 7a 20 29 7b 0a 20 20 20 20 20 20 20 20  f( z ){.        
6490: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
64a0: 5f 74 65 78 74 28 70 43 74 78 2c 20 7a 2c 20 2d  _text(pCtx, z, -
64b0: 31 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29  1, sqlite3_free)
64c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ;.          retu
64d0: 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
64e0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
64f0: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
6500: 5f 76 61 6c 75 65 28 70 43 74 78 2c 20 61 70 56  _value(pCtx, apV
6510: 61 6c 5b 30 5d 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  al[0]);.}../*.**
6520: 20 54 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65   The source code
6530: 20 66 6f 72 20 73 65 76 65 72 61 6c 20 72 75 6e   for several run
6540: 2d 74 69 6d 65 20 6c 6f 61 64 61 62 6c 65 20 65  -time loadable e
6550: 78 74 65 6e 73 69 6f 6e 73 20 69 73 20 69 6e 73  xtensions is ins
6560: 65 72 74 65 64 0a 2a 2a 20 62 65 6c 6f 77 20 62  erted.** below b
6570: 79 20 74 68 65 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b  y the ../tool/mk
6580: 73 68 65 6c 6c 63 2e 74 63 6c 20 73 63 72 69 70  shellc.tcl scrip
6590: 74 2e 20 20 42 65 66 6f 72 65 20 70 72 6f 63 65  t.  Before proce
65a0: 73 73 69 6e 67 20 74 68 61 74 20 69 6e 63 6c 75  ssing that inclu
65b0: 64 65 64 0a 2a 2a 20 63 6f 64 65 2c 20 77 65 20  ded.** code, we 
65c0: 6e 65 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65  need to override
65d0: 20 73 6f 6d 65 20 6d 61 63 72 6f 73 20 74 6f 20   some macros to 
65e0: 6d 61 6b 65 20 74 68 65 20 69 6e 63 6c 75 64 65  make the include
65f0: 64 20 70 72 6f 67 72 61 6d 20 63 6f 64 65 0a 2a  d program code.*
6600: 2a 20 77 6f 72 6b 20 68 65 72 65 20 69 6e 20 74  * work here in t
6610: 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 74 68 69  he middle of thi
6620: 73 20 72 65 67 75 6c 61 72 20 70 72 6f 67 72 61  s regular progra
6630: 6d 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  m..*/.#define SQ
6640: 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f 49  LITE_EXTENSION_I
6650: 4e 49 54 31 0a 23 64 65 66 69 6e 65 20 53 51 4c  NIT1.#define SQL
6660: 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f 49 4e  ITE_EXTENSION_IN
6670: 49 54 32 28 58 29 20 28 76 6f 69 64 29 28 58 29  IT2(X) (void)(X)
6680: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57  ..#if defined(_W
6690: 49 4e 33 32 29 20 26 26 20 64 65 66 69 6e 65 64  IN32) && defined
66a0: 28 5f 4d 53 43 5f 56 45 52 29 0a 49 4e 43 4c 55  (_MSC_VER).INCLU
66b0: 44 45 20 74 65 73 74 5f 77 69 6e 64 69 72 65 6e  DE test_windiren
66c0: 74 2e 68 0a 49 4e 43 4c 55 44 45 20 74 65 73 74  t.h.INCLUDE test
66d0: 5f 77 69 6e 64 69 72 65 6e 74 2e 63 0a 23 64 65  _windirent.c.#de
66e0: 66 69 6e 65 20 64 69 72 65 6e 74 20 44 49 52 45  fine dirent DIRE
66f0: 4e 54 0a 23 65 6e 64 69 66 0a 49 4e 43 4c 55 44  NT.#endif.INCLUD
6700: 45 20 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 73 68  E ../ext/misc/sh
6710: 61 74 68 72 65 65 2e 63 0a 49 4e 43 4c 55 44 45  athree.c.INCLUDE
6720: 20 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 66 69 6c   ../ext/misc/fil
6730: 65 69 6f 2e 63 0a 49 4e 43 4c 55 44 45 20 2e 2e  eio.c.INCLUDE ..
6740: 2f 65 78 74 2f 6d 69 73 63 2f 63 6f 6d 70 6c 65  /ext/misc/comple
6750: 74 69 6f 6e 2e 63 0a 49 4e 43 4c 55 44 45 20 2e  tion.c.INCLUDE .
6760: 2e 2f 65 78 74 2f 6d 69 73 63 2f 61 70 70 65 6e  ./ext/misc/appen
6770: 64 76 66 73 2e 63 0a 23 69 66 64 65 66 20 53 51  dvfs.c.#ifdef SQ
6780: 4c 49 54 45 5f 48 41 56 45 5f 5a 4c 49 42 0a 49  LITE_HAVE_ZLIB.I
6790: 4e 43 4c 55 44 45 20 2e 2e 2f 65 78 74 2f 6d 69  NCLUDE ../ext/mi
67a0: 73 63 2f 7a 69 70 66 69 6c 65 2e 63 0a 49 4e 43  sc/zipfile.c.INC
67b0: 4c 55 44 45 20 2e 2e 2f 65 78 74 2f 6d 69 73 63  LUDE ../ext/misc
67c0: 2f 73 71 6c 61 72 2e 63 0a 23 65 6e 64 69 66 0a  /sqlar.c.#endif.
67d0: 49 4e 43 4c 55 44 45 20 2e 2e 2f 65 78 74 2f 65  INCLUDE ../ext/e
67e0: 78 70 65 72 74 2f 73 71 6c 69 74 65 33 65 78 70  xpert/sqlite3exp
67f0: 65 72 74 2e 68 0a 49 4e 43 4c 55 44 45 20 2e 2e  ert.h.INCLUDE ..
6800: 2f 65 78 74 2f 65 78 70 65 72 74 2f 73 71 6c 69  /ext/expert/sqli
6810: 74 65 33 65 78 70 65 72 74 2e 63 0a 0a 23 69 66  te3expert.c..#if
6820: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
6830: 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a  ENABLE_SESSION).
6840: 2f 2a 0a 2a 2a 20 53 74 61 74 65 20 69 6e 66 6f  /*.** State info
6850: 72 6d 61 74 69 6f 6e 20 66 6f 72 20 61 20 73 69  rmation for a si
6860: 6e 67 6c 65 20 6f 70 65 6e 20 73 65 73 73 69 6f  ngle open sessio
6870: 6e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  n.*/.typedef str
6880: 75 63 74 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20  uct OpenSession 
6890: 4f 70 65 6e 53 65 73 73 69 6f 6e 3b 0a 73 74 72  OpenSession;.str
68a0: 75 63 74 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20  uct OpenSession 
68b0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
68d0: 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  Symbolic name fo
68e0: 72 20 74 68 69 73 20 73 65 73 73 69 6f 6e 20 2a  r this session *
68f0: 2f 0a 20 20 69 6e 74 20 6e 46 69 6c 74 65 72 3b  /.  int nFilter;
6900: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6910: 4e 75 6d 62 65 72 20 6f 66 20 78 46 69 6c 74 65  Number of xFilte
6920: 72 20 72 65 6a 65 63 74 69 6f 6e 20 47 4c 4f 42  r rejection GLOB
6930: 20 70 61 74 74 65 72 6e 73 20 2a 2f 0a 20 20 63   patterns */.  c
6940: 68 61 72 20 2a 2a 61 7a 46 69 6c 74 65 72 3b 20  har **azFilter; 
6950: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
6960: 20 6f 66 20 78 46 69 6c 74 65 72 20 72 65 6a 65   of xFilter reje
6970: 63 74 69 6f 6e 20 47 4c 4f 42 20 70 61 74 74 65  ction GLOB patte
6980: 72 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  rns */.  sqlite3
6990: 5f 73 65 73 73 69 6f 6e 20 2a 70 3b 20 20 20 20  _session *p;    
69a0: 20 20 2f 2a 20 54 68 65 20 6f 70 65 6e 20 73 65    /* The open se
69b0: 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a 23 65 6e 64  ssion */.};.#end
69c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 68 65 6c 6c 20  if../*.** Shell 
69d0: 6f 75 74 70 75 74 20 6d 6f 64 65 20 69 6e 66 6f  output mode info
69e0: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 62 65 66  rmation from bef
69f0: 6f 72 65 20 22 2e 65 78 70 6c 61 69 6e 20 6f 6e  ore ".explain on
6a00: 22 2c 0a 2a 2a 20 73 61 76 65 64 20 73 6f 20 74  ",.** saved so t
6a10: 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
6a20: 73 74 6f 72 65 64 20 62 79 20 22 2e 65 78 70 6c  stored by ".expl
6a30: 61 69 6e 20 6f 66 66 22 0a 2a 2f 0a 74 79 70 65  ain off".*/.type
6a40: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 64  def struct Saved
6a50: 4d 6f 64 65 49 6e 66 6f 20 53 61 76 65 64 4d 6f  ModeInfo SavedMo
6a60: 64 65 49 6e 66 6f 3b 0a 73 74 72 75 63 74 20 53  deInfo;.struct S
6a70: 61 76 65 64 4d 6f 64 65 49 6e 66 6f 20 7b 0a 20  avedModeInfo {. 
6a80: 20 69 6e 74 20 76 61 6c 69 64 3b 20 20 20 20 20   int valid;     
6a90: 20 20 20 20 20 2f 2a 20 49 73 20 74 68 65 72 65       /* Is there
6aa0: 20 6c 65 67 69 74 20 64 61 74 61 20 69 6e 20 68   legit data in h
6ab0: 65 72 65 3f 20 2a 2f 0a 20 20 69 6e 74 20 6d 6f  ere? */.  int mo
6ac0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  de;           /*
6ad0: 20 4d 6f 64 65 20 70 72 69 6f 72 20 74 6f 20 22   Mode prior to "
6ae0: 2e 65 78 70 6c 61 69 6e 20 6f 6e 22 20 2a 2f 0a  .explain on" */.
6af0: 20 20 69 6e 74 20 73 68 6f 77 48 65 61 64 65 72    int showHeader
6b00: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 2e 68  ;     /* The ".h
6b10: 65 61 64 65 72 22 20 73 65 74 74 69 6e 67 20 70  eader" setting p
6b20: 72 69 6f 72 20 74 6f 20 22 2e 65 78 70 6c 61 69  rior to ".explai
6b30: 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69 6e 74 20 63  n on" */.  int c
6b40: 6f 6c 57 69 64 74 68 5b 31 30 30 5d 3b 20 20 2f  olWidth[100];  /
6b50: 2a 20 43 6f 6c 75 6d 6e 20 77 69 64 74 68 73 20  * Column widths 
6b60: 70 72 69 6f 72 20 74 6f 20 22 2e 65 78 70 6c 61  prior to ".expla
6b70: 69 6e 20 6f 6e 22 20 2a 2f 0a 7d 3b 0a 0a 74 79  in on" */.};..ty
6b80: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
6b90: 65 72 74 49 6e 66 6f 20 45 78 70 65 72 74 49 6e  ertInfo ExpertIn
6ba0: 66 6f 3b 0a 73 74 72 75 63 74 20 45 78 70 65 72  fo;.struct Exper
6bb0: 74 49 6e 66 6f 20 7b 0a 20 20 73 71 6c 69 74 65  tInfo {.  sqlite
6bc0: 33 65 78 70 65 72 74 20 2a 70 45 78 70 65 72 74  3expert *pExpert
6bd0: 3b 0a 20 20 69 6e 74 20 62 56 65 72 62 6f 73 65  ;.  int bVerbose
6be0: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 61 74  ;.};../*.** Stat
6bf0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  e information ab
6c00: 6f 75 74 20 74 68 65 20 64 61 74 61 62 61 73 65  out the database
6c10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
6c20: 6f 6e 74 61 69 6e 65 64 20 69 6e 20 61 6e 0a 2a  ontained in an.*
6c30: 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
6c40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
6c50: 63 74 75 72 65 2e 0a 2a 2f 0a 74 79 70 65 64 65  cture..*/.typede
6c60: 66 20 73 74 72 75 63 74 20 53 68 65 6c 6c 53 74  f struct ShellSt
6c70: 61 74 65 20 53 68 65 6c 6c 53 74 61 74 65 3b 0a  ate ShellState;.
6c80: 73 74 72 75 63 74 20 53 68 65 6c 6c 53 74 61 74  struct ShellStat
6c90: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
6ca0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
6cb0: 54 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  The database */.
6cc0: 20 20 75 38 20 61 75 74 6f 45 78 70 6c 61 69 6e    u8 autoExplain
6cd0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 75 74 6f  ;        /* Auto
6ce0: 6d 61 74 69 63 61 6c 6c 79 20 74 75 72 6e 20 6f  matically turn o
6cf0: 6e 20 2e 65 78 70 6c 61 69 6e 20 6d 6f 64 65 20  n .explain mode 
6d00: 2a 2f 0a 20 20 75 38 20 61 75 74 6f 45 51 50 3b  */.  u8 autoEQP;
6d10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
6d20: 75 6e 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  un EXPLAIN QUERY
6d30: 20 50 4c 41 4e 20 70 72 69 6f 72 20 74 6f 20 73   PLAN prior to s
6d40: 65 61 63 68 20 53 51 4c 20 73 74 6d 74 20 2a 2f  each SQL stmt */
6d50: 0a 20 20 75 38 20 73 74 61 74 73 4f 6e 3b 20 20  .  u8 statsOn;  
6d60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
6d70: 65 20 74 6f 20 64 69 73 70 6c 61 79 20 6d 65 6d  e to display mem
6d80: 6f 72 79 20 73 74 61 74 73 20 62 65 66 6f 72 65  ory stats before
6d90: 20 65 61 63 68 20 66 69 6e 61 6c 69 7a 65 20 2a   each finalize *
6da0: 2f 0a 20 20 75 38 20 73 63 61 6e 73 74 61 74 73  /.  u8 scanstats
6db0: 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72  On;        /* Tr
6dc0: 75 65 20 74 6f 20 64 69 73 70 6c 61 79 20 73 63  ue to display sc
6dd0: 61 6e 20 73 74 61 74 73 20 62 65 66 6f 72 65 20  an stats before 
6de0: 65 61 63 68 20 66 69 6e 61 6c 69 7a 65 20 2a 2f  each finalize */
6df0: 0a 20 20 75 38 20 6f 70 65 6e 4d 6f 64 65 3b 20  .  u8 openMode; 
6e00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 48 45            /* SHE
6e10: 4c 4c 5f 4f 50 45 4e 5f 4e 4f 52 4d 41 4c 2c 20  LL_OPEN_NORMAL, 
6e20: 5f 41 50 50 45 4e 44 56 46 53 2c 20 6f 72 20 5f  _APPENDVFS, or _
6e30: 5a 49 50 46 49 4c 45 20 2a 2f 0a 20 20 75 38 20  ZIPFILE */.  u8 
6e40: 64 6f 58 64 67 4f 70 65 6e 3b 20 20 20 20 20 20  doXdgOpen;      
6e50: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 73 74      /* Invoke st
6e60: 61 72 74 2f 6f 70 65 6e 2f 78 64 67 2d 6f 70 65  art/open/xdg-ope
6e70: 6e 20 69 6e 20 6f 75 74 70 75 74 5f 72 65 73 65  n in output_rese
6e80: 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6f 75 74  t() */.  int out
6e90: 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20  Count;          
6ea0: 2f 2a 20 52 65 76 65 72 74 20 74 6f 20 73 74 64  /* Revert to std
6eb0: 6f 75 74 20 77 68 65 6e 20 72 65 61 63 68 69 6e  out when reachin
6ec0: 67 20 7a 65 72 6f 20 2a 2f 0a 20 20 69 6e 74 20  g zero */.  int 
6ed0: 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  cnt;            
6ee0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
6ef0: 72 65 63 6f 72 64 73 20 64 69 73 70 6c 61 79 65  records displaye
6f00: 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 46 49  d so far */.  FI
6f10: 4c 45 20 2a 6f 75 74 3b 20 20 20 20 20 20 20 20  LE *out;        
6f20: 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65       /* Write re
6f30: 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 20 20  sults here */.  
6f40: 46 49 4c 45 20 2a 74 72 61 63 65 4f 75 74 3b 20  FILE *traceOut; 
6f50: 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74         /* Output
6f60: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 74 72 61   for sqlite3_tra
6f70: 63 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ce() */.  int nE
6f80: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
6f90: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
6fa0: 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  rors seen */.  i
6fb0: 6e 74 20 6d 6f 64 65 3b 20 20 20 20 20 20 20 20  nt mode;        
6fc0: 20 20 20 20 20 20 2f 2a 20 41 6e 20 6f 75 74 70        /* An outp
6fd0: 75 74 20 6d 6f 64 65 20 73 65 74 74 69 6e 67 20  ut mode setting 
6fe0: 2a 2f 0a 20 20 69 6e 74 20 6d 6f 64 65 50 72 69  */.  int modePri
6ff0: 6f 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  or;         /* S
7000: 61 76 65 64 20 6d 6f 64 65 20 2a 2f 0a 20 20 69  aved mode */.  i
7010: 6e 74 20 63 4d 6f 64 65 3b 20 20 20 20 20 20 20  nt cMode;       
7020: 20 20 20 20 20 20 2f 2a 20 74 65 6d 70 6f 72 61        /* tempora
7030: 72 79 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 66  ry output mode f
7040: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 71  or the current q
7050: 75 65 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 6f  uery */.  int no
7060: 72 6d 61 6c 4d 6f 64 65 3b 20 20 20 20 20 20 20  rmalMode;       
7070: 20 2f 2a 20 4f 75 74 70 75 74 20 6d 6f 64 65 20   /* Output mode 
7080: 62 65 66 6f 72 65 20 22 2e 65 78 70 6c 61 69 6e  before ".explain
7090: 20 6f 6e 22 20 2a 2f 0a 20 20 69 6e 74 20 77 72   on" */.  int wr
70a0: 69 74 61 62 6c 65 53 63 68 65 6d 61 3b 20 20 20  itableSchema;   
70b0: 20 2f 2a 20 54 72 75 65 20 69 66 20 50 52 41 47   /* True if PRAG
70c0: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
70d0: 6d 61 3d 4f 4e 20 2a 2f 0a 20 20 69 6e 74 20 73  ma=ON */.  int s
70e0: 68 6f 77 48 65 61 64 65 72 3b 20 20 20 20 20 20  howHeader;      
70f0: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 73 68 6f    /* True to sho
7100: 77 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69  w column names i
7110: 6e 20 4c 69 73 74 20 6f 72 20 43 6f 6c 75 6d 6e  n List or Column
7120: 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   mode */.  int n
7130: 43 68 65 63 6b 3b 20 20 20 20 20 20 20 20 20 20  Check;          
7140: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 22    /* Number of "
7150: 2e 63 68 65 63 6b 22 20 63 6f 6d 6d 61 6e 64 73  .check" commands
7160: 20 72 75 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e   run */.  unsign
7170: 65 64 20 73 68 65 6c 6c 46 6c 67 73 3b 20 20 20  ed shellFlgs;   
7180: 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67   /* Various flag
7190: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 65  s */.  char *zDe
71a0: 73 74 54 61 62 6c 65 3b 20 20 20 20 20 20 2f 2a  stTable;      /*
71b0: 20 4e 61 6d 65 20 6f 66 20 64 65 73 74 69 6e 61   Name of destina
71c0: 74 69 6f 6e 20 74 61 62 6c 65 20 77 68 65 6e 20  tion table when 
71d0: 4d 4f 44 45 5f 49 6e 73 65 72 74 20 2a 2f 0a 20  MODE_Insert */. 
71e0: 20 63 68 61 72 20 2a 7a 54 65 6d 70 46 69 6c 65   char *zTempFile
71f0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 6f  ;       /* Tempo
7200: 72 61 72 79 20 66 69 6c 65 20 74 68 61 74 20 6d  rary file that m
7210: 69 67 68 74 20 6e 65 65 64 20 64 65 6c 65 74 69  ight need deleti
7220: 6e 67 20 2a 2f 0a 20 20 63 68 61 72 20 7a 54 65  ng */.  char zTe
7230: 73 74 63 61 73 65 5b 33 30 5d 3b 20 20 20 20 2f  stcase[30];    /
7240: 2a 20 4e 61 6d 65 20 6f 66 20 63 75 72 72 65 6e  * Name of curren
7250: 74 20 74 65 73 74 20 63 61 73 65 20 2a 2f 0a 20  t test case */. 
7260: 20 63 68 61 72 20 63 6f 6c 53 65 70 61 72 61 74   char colSeparat
7270: 6f 72 5b 32 30 5d 3b 20 2f 2a 20 43 6f 6c 75 6d  or[20]; /* Colum
7280: 6e 20 73 65 70 61 72 61 74 6f 72 20 63 68 61 72  n separator char
7290: 61 63 74 65 72 20 66 6f 72 20 73 65 76 65 72 61  acter for severa
72a0: 6c 20 6d 6f 64 65 73 20 2a 2f 0a 20 20 63 68 61  l modes */.  cha
72b0: 72 20 72 6f 77 53 65 70 61 72 61 74 6f 72 5b 32  r rowSeparator[2
72c0: 30 5d 3b 20 2f 2a 20 52 6f 77 20 73 65 70 61 72  0]; /* Row separ
72d0: 61 74 6f 72 20 63 68 61 72 61 63 74 65 72 20 66  ator character f
72e0: 6f 72 20 4d 4f 44 45 5f 41 73 63 69 69 20 2a 2f  or MODE_Ascii */
72f0: 0a 20 20 63 68 61 72 20 63 6f 6c 53 65 70 50 72  .  char colSepPr
7300: 69 6f 72 5b 32 30 5d 3b 20 20 2f 2a 20 53 61 76  ior[20];  /* Sav
7310: 65 64 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61  ed column separa
7320: 74 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 72 6f  tor */.  char ro
7330: 77 53 65 70 50 72 69 6f 72 5b 32 30 5d 3b 20 20  wSepPrior[20];  
7340: 2f 2a 20 53 61 76 65 64 20 72 6f 77 20 73 65 70  /* Saved row sep
7350: 61 72 61 74 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  arator */.  int 
7360: 63 6f 6c 57 69 64 74 68 5b 31 30 30 5d 3b 20 20  colWidth[100];  
7370: 20 20 20 2f 2a 20 52 65 71 75 65 73 74 65 64 20     /* Requested 
7380: 77 69 64 74 68 20 6f 66 20 65 61 63 68 20 63 6f  width of each co
7390: 6c 75 6d 6e 20 77 68 65 6e 20 69 6e 20 63 6f 6c  lumn when in col
73a0: 75 6d 6e 20 6d 6f 64 65 2a 2f 0a 20 20 69 6e 74  umn mode*/.  int
73b0: 20 61 63 74 75 61 6c 57 69 64 74 68 5b 31 30 30   actualWidth[100
73c0: 5d 3b 20 20 2f 2a 20 41 63 74 75 61 6c 20 77 69  ];  /* Actual wi
73d0: 64 74 68 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  dth of each colu
73e0: 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 6e 75 6c  mn */.  char nul
73f0: 6c 56 61 6c 75 65 5b 32 30 5d 3b 20 20 20 20 2f  lValue[20];    /
7400: 2a 20 54 68 65 20 74 65 78 74 20 74 6f 20 70 72  * The text to pr
7410: 69 6e 74 20 77 68 65 6e 20 61 20 4e 55 4c 4c 20  int when a NULL 
7420: 63 6f 6d 65 73 20 62 61 63 6b 20 66 72 6f 6d 0a  comes back from.
7430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7440: 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20           ** the 
7450: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 68  database */.  ch
7460: 61 72 20 6f 75 74 66 69 6c 65 5b 46 49 4c 45 4e  ar outfile[FILEN
7470: 41 4d 45 5f 4d 41 58 5d 3b 20 2f 2a 20 46 69 6c  AME_MAX]; /* Fil
7480: 65 6e 61 6d 65 20 66 6f 72 20 2a 6f 75 74 20 2a  ename for *out *
7490: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
74a0: 7a 44 62 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20  zDbFilename;    
74b0: 2f 2a 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  /* name of the d
74c0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a  atabase file */.
74d0: 20 20 63 68 61 72 20 2a 7a 46 72 65 65 4f 6e 43    char *zFreeOnC
74e0: 6c 6f 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  lose;         /*
74f0: 20 46 69 6c 65 6e 61 6d 65 20 74 6f 20 66 72 65   Filename to fre
7500: 65 20 77 68 65 6e 20 63 6c 6f 73 69 6e 67 20 2a  e when closing *
7510: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
7520: 7a 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  zVfs;           
7530: 2f 2a 20 4e 61 6d 65 20 6f 66 20 56 46 53 20 74  /* Name of VFS t
7540: 6f 20 75 73 65 20 2a 2f 0a 20 20 73 71 6c 69 74  o use */.  sqlit
7550: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 20  e3_stmt *pStmt; 
7560: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 74 61    /* Current sta
7570: 74 65 6d 65 6e 74 20 69 66 20 61 6e 79 2e 20 2a  tement if any. *
7580: 2f 0a 20 20 46 49 4c 45 20 2a 70 4c 6f 67 3b 20  /.  FILE *pLog; 
7590: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72             /* Wr
75a0: 69 74 65 20 6c 6f 67 20 6f 75 74 70 75 74 20 68  ite log output h
75b0: 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69  ere */.  int *ai
75c0: 49 6e 64 65 6e 74 3b 20 20 20 20 20 20 20 20 20  Indent;         
75d0: 2f 2a 20 41 72 72 61 79 20 6f 66 20 69 6e 64 65  /* Array of inde
75e0: 6e 74 73 20 75 73 65 64 20 69 6e 20 4d 4f 44 45  nts used in MODE
75f0: 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 69 6e  _Explain */.  in
7600: 74 20 6e 49 6e 64 65 6e 74 3b 20 20 20 20 20 20  t nIndent;      
7610: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
7620: 61 72 72 61 79 20 61 69 49 6e 64 65 6e 74 5b 5d  array aiIndent[]
7630: 20 2a 2f 0a 20 20 69 6e 74 20 69 49 6e 64 65 6e   */.  int iInden
7640: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
7650: 49 6e 64 65 78 20 6f 66 20 63 75 72 72 65 6e 74  Index of current
7660: 20 6f 70 20 69 6e 20 61 69 49 6e 64 65 6e 74 5b   op in aiIndent[
7670: 5d 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ] */.#if defined
7680: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
7690: 45 53 53 49 4f 4e 29 0a 20 20 69 6e 74 20 6e 53  ESSION).  int nS
76a0: 65 73 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ession;         
76b0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
76c0: 20 61 63 74 69 76 65 20 73 65 73 73 69 6f 6e 73   active sessions
76d0: 20 2a 2f 0a 20 20 4f 70 65 6e 53 65 73 73 69 6f   */.  OpenSessio
76e0: 6e 20 61 53 65 73 73 69 6f 6e 5b 34 5d 3b 20 20  n aSession[4];  
76f0: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 65 73 73  /* Array of sess
7700: 69 6f 6e 73 2e 20 20 5b 30 5d 20 69 73 20 69 6e  ions.  [0] is in
7710: 20 66 6f 63 75 73 2e 20 2a 2f 0a 23 65 6e 64 69   focus. */.#endi
7720: 66 0a 20 20 45 78 70 65 72 74 49 6e 66 6f 20 65  f.  ExpertInfo e
7730: 78 70 65 72 74 3b 20 20 20 20 20 20 20 20 2f 2a  xpert;        /*
7740: 20 56 61 6c 69 64 20 69 66 20 70 72 65 76 69 6f   Valid if previo
7750: 75 73 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 22  us command was "
7760: 2e 65 78 70 65 72 74 20 4f 50 54 2e 2e 2e 22 20  .expert OPT..." 
7770: 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 20 41 6c 6c 6f 77  */.};.../* Allow
7780: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 68  ed values for Sh
7790: 65 6c 6c 53 74 61 74 65 2e 61 75 74 6f 45 51 50  ellState.autoEQP
77a0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 55 54 4f  .*/.#define AUTO
77b0: 45 51 50 5f 6f 66 66 20 20 20 20 20 20 30 0a 23  EQP_off      0.#
77c0: 64 65 66 69 6e 65 20 41 55 54 4f 45 51 50 5f 6f  define AUTOEQP_o
77d0: 6e 20 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e  n       1.#defin
77e0: 65 20 41 55 54 4f 45 51 50 5f 74 72 69 67 67 65  e AUTOEQP_trigge
77f0: 72 20 20 32 0a 23 64 65 66 69 6e 65 20 41 55 54  r  2.#define AUT
7800: 4f 45 51 50 5f 66 75 6c 6c 20 20 20 20 20 33 0a  OEQP_full     3.
7810: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
7820: 65 73 20 66 6f 72 20 53 68 65 6c 6c 53 74 61 74  es for ShellStat
7830: 65 2e 6f 70 65 6e 4d 6f 64 65 0a 2a 2f 0a 23 64  e.openMode.*/.#d
7840: 65 66 69 6e 65 20 53 48 45 4c 4c 5f 4f 50 45 4e  efine SHELL_OPEN
7850: 5f 55 4e 53 50 45 43 20 20 20 20 20 30 20 20 20  _UNSPEC     0   
7860: 20 20 20 2f 2a 20 4e 6f 20 6f 70 65 6e 2d 6d 6f     /* No open-mo
7870: 64 65 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a  de specified */.
7880: 23 64 65 66 69 6e 65 20 53 48 45 4c 4c 5f 4f 50  #define SHELL_OP
7890: 45 4e 5f 4e 4f 52 4d 41 4c 20 20 20 20 20 31 20  EN_NORMAL     1 
78a0: 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20 64       /* Normal d
78b0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a  atabase file */.
78c0: 23 64 65 66 69 6e 65 20 53 48 45 4c 4c 5f 4f 50  #define SHELL_OP
78d0: 45 4e 5f 41 50 50 45 4e 44 56 46 53 20 20 32 20  EN_APPENDVFS  2 
78e0: 20 20 20 20 20 2f 2a 20 55 73 65 20 61 70 70 65       /* Use appe
78f0: 6e 64 76 66 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ndvfs */.#define
7900: 20 53 48 45 4c 4c 5f 4f 50 45 4e 5f 5a 49 50 46   SHELL_OPEN_ZIPF
7910: 49 4c 45 20 20 20 20 33 20 20 20 20 20 20 2f 2a  ILE    3      /*
7920: 20 55 73 65 20 74 68 65 20 7a 69 70 66 69 6c 65   Use the zipfile
7930: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
7940: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 61  /../*.** These a
7950: 72 65 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 73  re the allowed s
7960: 68 65 6c 6c 46 6c 67 73 20 76 61 6c 75 65 73 0a  hellFlgs values.
7970: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 46 4c 47  */.#define SHFLG
7980: 5f 50 61 67 65 63 61 63 68 65 20 20 20 20 20 20  _Pagecache      
7990: 30 78 30 30 30 30 30 30 30 31 20 2f 2a 20 54 68  0x00000001 /* Th
79a0: 65 20 2d 2d 70 61 67 65 63 61 63 68 65 20 6f 70  e --pagecache op
79b0: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 2a 2f 0a  tion is used */.
79c0: 23 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 4c 6f  #define SHFLG_Lo
79d0: 6f 6b 61 73 69 64 65 20 20 20 20 20 20 30 78 30  okaside      0x0
79e0: 30 30 30 30 30 30 32 20 2f 2a 20 4c 6f 6f 6b 61  0000002 /* Looka
79f0: 73 69 64 65 20 6d 65 6d 6f 72 79 20 69 73 20 75  side memory is u
7a00: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
7a10: 48 46 4c 47 5f 42 61 63 6b 73 6c 61 73 68 20 20  HFLG_Backslash  
7a20: 20 20 20 20 30 78 30 30 30 30 30 30 30 34 20 2f      0x00000004 /
7a30: 2a 20 54 68 65 20 2d 2d 62 61 63 6b 73 6c 61 73  * The --backslas
7a40: 68 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  h option is used
7a50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 46 4c   */.#define SHFL
7a60: 47 5f 50 72 65 73 65 72 76 65 52 6f 77 69 64 20  G_PreserveRowid 
7a70: 20 30 78 30 30 30 30 30 30 30 38 20 2f 2a 20 2e   0x00000008 /* .
7a80: 64 75 6d 70 20 70 72 65 73 65 72 76 65 73 20 72  dump preserves r
7a90: 6f 77 69 64 20 76 61 6c 75 65 73 20 2a 2f 0a 23  owid values */.#
7aa0: 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 4e 65 77  define SHFLG_New
7ab0: 6c 69 6e 65 73 20 20 20 20 20 20 20 30 78 30 30  lines       0x00
7ac0: 30 30 30 30 31 30 20 2f 2a 20 2e 64 75 6d 70 20  000010 /* .dump 
7ad0: 2d 2d 6e 65 77 6c 69 6e 65 20 66 6c 61 67 20 2a  --newline flag *
7ae0: 2f 0a 23 64 65 66 69 6e 65 20 53 48 46 4c 47 5f  /.#define SHFLG_
7af0: 43 6f 75 6e 74 43 68 61 6e 67 65 73 20 20 20 30  CountChanges   0
7b00: 78 30 30 30 30 30 30 32 30 20 2f 2a 20 2e 63 68  x00000020 /* .ch
7b10: 61 6e 67 65 73 20 73 65 74 74 69 6e 67 20 2a 2f  anges setting */
7b20: 0a 23 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 45  .#define SHFLG_E
7b30: 63 68 6f 20 20 20 20 20 20 20 20 20 20 20 30 78  cho           0x
7b40: 30 30 30 30 30 30 34 30 20 2f 2a 20 2e 65 63 68  00000040 /* .ech
7b50: 6f 20 6f 72 20 2d 2d 65 63 68 6f 20 73 65 74 74  o or --echo sett
7b60: 69 6e 67 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61  ing */../*.** Ma
7b70: 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67  cros for testing
7b80: 20 61 6e 64 20 73 65 74 74 69 6e 67 20 73 68 65   and setting she
7b90: 6c 6c 46 6c 67 73 0a 2a 2f 0a 23 64 65 66 69 6e  llFlgs.*/.#defin
7ba0: 65 20 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 50  e ShellHasFlag(P
7bb0: 2c 58 29 20 20 20 20 28 28 28 50 29 2d 3e 73 68  ,X)    (((P)->sh
7bc0: 65 6c 6c 46 6c 67 73 20 26 20 28 58 29 29 21 3d  ellFlgs & (X))!=
7bd0: 30 29 0a 23 64 65 66 69 6e 65 20 53 68 65 6c 6c  0).#define Shell
7be0: 53 65 74 46 6c 61 67 28 50 2c 58 29 20 20 20 20  SetFlag(P,X)    
7bf0: 28 28 50 29 2d 3e 73 68 65 6c 6c 46 6c 67 73 7c  ((P)->shellFlgs|
7c00: 3d 28 58 29 29 0a 23 64 65 66 69 6e 65 20 53 68  =(X)).#define Sh
7c10: 65 6c 6c 43 6c 65 61 72 46 6c 61 67 28 50 2c 58  ellClearFlag(P,X
7c20: 29 20 20 28 28 50 29 2d 3e 73 68 65 6c 6c 46 6c  )  ((P)->shellFl
7c30: 67 73 26 3d 28 7e 28 58 29 29 29 0a 0a 2f 2a 0a  gs&=(~(X)))../*.
7c40: 2a 2a 20 54 68 65 73 65 20 61 72 65 20 74 68 65  ** These are the
7c50: 20 61 6c 6c 6f 77 65 64 20 6d 6f 64 65 73 2e 0a   allowed modes..
7c60: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f  */.#define MODE_
7c70: 4c 69 6e 65 20 20 20 20 20 30 20 20 2f 2a 20 4f  Line     0  /* O
7c80: 6e 65 20 63 6f 6c 75 6d 6e 20 70 65 72 20 6c 69  ne column per li
7c90: 6e 65 2e 20 20 42 6c 61 6e 6b 20 6c 69 6e 65 20  ne.  Blank line 
7ca0: 62 65 74 77 65 65 6e 20 72 65 63 6f 72 64 73 20  between records 
7cb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f  */.#define MODE_
7cc0: 43 6f 6c 75 6d 6e 20 20 20 31 20 20 2f 2a 20 4f  Column   1  /* O
7cd0: 6e 65 20 72 65 63 6f 72 64 20 70 65 72 20 6c 69  ne record per li
7ce0: 6e 65 20 69 6e 20 6e 65 61 74 20 63 6f 6c 75 6d  ne in neat colum
7cf0: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f  ns */.#define MO
7d00: 44 45 5f 4c 69 73 74 20 20 20 20 20 32 20 20 2f  DE_List     2  /
7d10: 2a 20 4f 6e 65 20 72 65 63 6f 72 64 20 70 65 72  * One record per
7d20: 20 6c 69 6e 65 20 77 69 74 68 20 61 20 73 65 70   line with a sep
7d30: 61 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  arator */.#defin
7d40: 65 20 4d 4f 44 45 5f 53 65 6d 69 20 20 20 20 20  e MODE_Semi     
7d50: 33 20 20 2f 2a 20 53 61 6d 65 20 61 73 20 4d 4f  3  /* Same as MO
7d60: 44 45 5f 4c 69 73 74 20 62 75 74 20 61 70 70 65  DE_List but appe
7d70: 6e 64 20 22 3b 22 20 74 6f 20 65 61 63 68 20 6c  nd ";" to each l
7d80: 69 6e 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ine */.#define M
7d90: 4f 44 45 5f 48 74 6d 6c 20 20 20 20 20 34 20 20  ODE_Html     4  
7da0: 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 6e 20 58  /* Generate an X
7db0: 48 54 4d 4c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  HTML table */.#d
7dc0: 65 66 69 6e 65 20 4d 4f 44 45 5f 49 6e 73 65 72  efine MODE_Inser
7dd0: 74 20 20 20 35 20 20 2f 2a 20 47 65 6e 65 72 61  t   5  /* Genera
7de0: 74 65 20 53 51 4c 20 22 69 6e 73 65 72 74 22 20  te SQL "insert" 
7df0: 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 23 64  statements */.#d
7e00: 65 66 69 6e 65 20 4d 4f 44 45 5f 51 75 6f 74 65  efine MODE_Quote
7e10: 20 20 20 20 36 20 20 2f 2a 20 51 75 6f 74 65 20      6  /* Quote 
7e20: 76 61 6c 75 65 73 20 61 73 20 66 6f 72 20 53 51  values as for SQ
7e30: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44  L */.#define MOD
7e40: 45 5f 54 63 6c 20 20 20 20 20 20 37 20 20 2f 2a  E_Tcl      7  /*
7e50: 20 47 65 6e 65 72 61 74 65 20 41 4e 53 49 2d 43   Generate ANSI-C
7e60: 20 6f 72 20 54 43 4c 20 71 75 6f 74 65 64 20 65   or TCL quoted e
7e70: 6c 65 6d 65 6e 74 73 20 2a 2f 0a 23 64 65 66 69  lements */.#defi
7e80: 6e 65 20 4d 4f 44 45 5f 43 73 76 20 20 20 20 20  ne MODE_Csv     
7e90: 20 38 20 20 2f 2a 20 51 75 6f 74 65 20 73 74 72   8  /* Quote str
7ea0: 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  ings, numbers ar
7eb0: 65 20 70 6c 61 69 6e 20 2a 2f 0a 23 64 65 66 69  e plain */.#defi
7ec0: 6e 65 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20  ne MODE_Explain 
7ed0: 20 39 20 20 2f 2a 20 4c 69 6b 65 20 4d 4f 44 45   9  /* Like MODE
7ee0: 5f 43 6f 6c 75 6d 6e 2c 20 62 75 74 20 64 6f 20  _Column, but do 
7ef0: 6e 6f 74 20 74 72 75 6e 63 61 74 65 20 64 61 74  not truncate dat
7f00: 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44  a */.#define MOD
7f10: 45 5f 41 73 63 69 69 20 20 20 31 30 20 20 2f 2a  E_Ascii   10  /*
7f20: 20 55 73 65 20 41 53 43 49 49 20 75 6e 69 74 20   Use ASCII unit 
7f30: 61 6e 64 20 72 65 63 6f 72 64 20 73 65 70 61 72  and record separ
7f40: 61 74 6f 72 73 20 28 30 78 31 46 2f 30 78 31 45  ators (0x1F/0x1E
7f50: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44  ) */.#define MOD
7f60: 45 5f 50 72 65 74 74 79 20 20 31 31 20 20 2f 2a  E_Pretty  11  /*
7f70: 20 50 72 65 74 74 79 2d 70 72 69 6e 74 20 73 63   Pretty-print sc
7f80: 68 65 6d 61 73 20 2a 2f 0a 0a 73 74 61 74 69 63  hemas */..static
7f90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6d 6f 64   const char *mod
7fa0: 65 44 65 73 63 72 5b 5d 20 3d 20 7b 0a 20 20 22  eDescr[] = {.  "
7fb0: 6c 69 6e 65 22 2c 0a 20 20 22 63 6f 6c 75 6d 6e  line",.  "column
7fc0: 22 2c 0a 20 20 22 6c 69 73 74 22 2c 0a 20 20 22  ",.  "list",.  "
7fd0: 73 65 6d 69 22 2c 0a 20 20 22 68 74 6d 6c 22 2c  semi",.  "html",
7fe0: 0a 20 20 22 69 6e 73 65 72 74 22 2c 0a 20 20 22  .  "insert",.  "
7ff0: 71 75 6f 74 65 22 2c 0a 20 20 22 74 63 6c 22 2c  quote",.  "tcl",
8000: 0a 20 20 22 63 73 76 22 2c 0a 20 20 22 65 78 70  .  "csv",.  "exp
8010: 6c 61 69 6e 22 2c 0a 20 20 22 61 73 63 69 69 22  lain",.  "ascii"
8020: 2c 0a 20 20 22 70 72 65 74 74 79 70 72 69 6e 74  ,.  "prettyprint
8030: 22 2c 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ",.};../*.** The
8040: 73 65 20 61 72 65 20 74 68 65 20 63 6f 6c 75 6d  se are the colum
8050: 6e 2f 72 6f 77 2f 6c 69 6e 65 20 73 65 70 61 72  n/row/line separ
8060: 61 74 6f 72 73 20 75 73 65 64 20 62 79 20 74 68  ators used by th
8070: 65 20 76 61 72 69 6f 75 73 0a 2a 2a 20 69 6d 70  e various.** imp
8080: 6f 72 74 2f 65 78 70 6f 72 74 20 6d 6f 64 65 73  ort/export modes
8090: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 45 50  ..*/.#define SEP
80a0: 5f 43 6f 6c 75 6d 6e 20 20 20 20 22 7c 22 0a 23  _Column    "|".#
80b0: 64 65 66 69 6e 65 20 53 45 50 5f 52 6f 77 20 20  define SEP_Row  
80c0: 20 20 20 20 20 22 5c 6e 22 0a 23 64 65 66 69 6e       "\n".#defin
80d0: 65 20 53 45 50 5f 54 61 62 20 20 20 20 20 20 20  e SEP_Tab       
80e0: 22 5c 74 22 0a 23 64 65 66 69 6e 65 20 53 45 50  "\t".#define SEP
80f0: 5f 53 70 61 63 65 20 20 20 20 20 22 20 22 0a 23  _Space     " ".#
8100: 64 65 66 69 6e 65 20 53 45 50 5f 43 6f 6d 6d 61  define SEP_Comma
8110: 20 20 20 20 20 22 2c 22 0a 23 64 65 66 69 6e 65       ",".#define
8120: 20 53 45 50 5f 43 72 4c 66 20 20 20 20 20 20 22   SEP_CrLf      "
8130: 5c 72 5c 6e 22 0a 23 64 65 66 69 6e 65 20 53 45  \r\n".#define SE
8140: 50 5f 55 6e 69 74 20 20 20 20 20 20 22 5c 78 31  P_Unit      "\x1
8150: 46 22 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 52  F".#define SEP_R
8160: 65 63 6f 72 64 20 20 20 20 22 5c 78 31 45 22 0a  ecord    "\x1E".
8170: 0a 2f 2a 0a 2a 2a 20 41 20 63 61 6c 6c 62 61 63  ./*.** A callbac
8180: 6b 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  k for the sqlite
8190: 33 5f 6c 6f 67 28 29 20 69 6e 74 65 72 66 61 63  3_log() interfac
81a0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  e..*/.static voi
81b0: 64 20 73 68 65 6c 6c 4c 6f 67 28 76 6f 69 64 20  d shellLog(void 
81c0: 2a 70 41 72 67 2c 20 69 6e 74 20 69 45 72 72 43  *pArg, int iErrC
81d0: 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ode, const char 
81e0: 2a 7a 4d 73 67 29 7b 0a 20 20 53 68 65 6c 6c 53  *zMsg){.  ShellS
81f0: 74 61 74 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c  tate *p = (Shell
8200: 53 74 61 74 65 2a 29 70 41 72 67 3b 0a 20 20 69  State*)pArg;.  i
8210: 66 28 20 70 2d 3e 70 4c 6f 67 3d 3d 30 20 29 20  f( p->pLog==0 ) 
8220: 72 65 74 75 72 6e 3b 0a 20 20 75 74 66 38 5f 70  return;.  utf8_p
8230: 72 69 6e 74 66 28 70 2d 3e 70 4c 6f 67 2c 20 22  rintf(p->pLog, "
8240: 28 25 64 29 20 25 73 5c 6e 22 2c 20 69 45 72 72  (%d) %s\n", iErr
8250: 43 6f 64 65 2c 20 7a 4d 73 67 29 3b 0a 20 20 66  Code, zMsg);.  f
8260: 66 6c 75 73 68 28 70 2d 3e 70 4c 6f 67 29 3b 0a  flush(p->pLog);.
8270: 7d 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e  }../*.** SQL fun
8280: 63 74 69 6f 6e 3a 20 20 73 68 65 6c 6c 5f 70 75  ction:  shell_pu
8290: 74 73 6e 6c 28 58 29 0a 2a 2a 0a 2a 2a 20 57 72  tsnl(X).**.** Wr
82a0: 69 74 65 20 74 68 65 20 74 65 78 74 20 58 20 74  ite the text X t
82b0: 6f 20 74 68 65 20 73 63 72 65 65 6e 20 28 6f 72  o the screen (or
82c0: 20 77 68 61 74 65 76 65 72 20 6f 75 74 70 75 74   whatever output
82d0: 20 69 73 20 62 65 69 6e 67 20 64 69 72 65 63 74   is being direct
82e0: 65 64 29 0a 2a 2a 20 61 64 64 69 6e 67 20 61 20  ed).** adding a 
82f0: 6e 65 77 6c 69 6e 65 20 61 74 20 74 68 65 20 65  newline at the e
8300: 6e 64 2c 20 61 6e 64 20 74 68 65 6e 20 72 65 74  nd, and then ret
8310: 75 72 6e 20 58 2e 0a 2a 2f 0a 73 74 61 74 69 63  urn X..*/.static
8320: 20 76 6f 69 64 20 73 68 65 6c 6c 50 75 74 73 46   void shellPutsF
8330: 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  unc(.  sqlite3_c
8340: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 0a 20 20  ontext *pCtx,.  
8350: 69 6e 74 20 6e 56 61 6c 2c 0a 20 20 73 71 6c 69  int nVal,.  sqli
8360: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61  te3_value **apVa
8370: 6c 0a 29 7b 0a 20 20 53 68 65 6c 6c 53 74 61 74  l.){.  ShellStat
8380: 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74 61  e *p = (ShellSta
8390: 74 65 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72  te*)sqlite3_user
83a0: 5f 64 61 74 61 28 70 43 74 78 29 3b 0a 20 20 28  _data(pCtx);.  (
83b0: 76 6f 69 64 29 6e 56 61 6c 3b 0a 20 20 75 74 66  void)nVal;.  utf
83c0: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
83d0: 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33   "%s\n", sqlite3
83e0: 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 70 56 61  _value_text(apVa
83f0: 6c 5b 30 5d 29 29 3b 0a 20 20 73 71 6c 69 74 65  l[0]));.  sqlite
8400: 33 5f 72 65 73 75 6c 74 5f 76 61 6c 75 65 28 70  3_result_value(p
8410: 43 74 78 2c 20 61 70 56 61 6c 5b 30 5d 29 3b 0a  Ctx, apVal[0]);.
8420: 7d 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e  }../*.** SQL fun
8430: 63 74 69 6f 6e 3a 20 20 20 65 64 69 74 28 56 41  ction:   edit(VA
8440: 4c 55 45 29 0a 2a 2a 20 20 20 20 20 20 20 20 20  LUE).**         
8450: 20 20 20 20 20 20 20 20 65 64 69 74 28 56 41 4c          edit(VAL
8460: 55 45 2c 45 44 49 54 4f 52 29 0a 2a 2a 0a 2a 2a  UE,EDITOR).**.**
8470: 20 54 68 65 73 65 20 73 74 65 70 73 3a 0a 2a 2a   These steps:.**
8480: 0a 2a 2a 20 20 20 20 20 28 31 29 20 57 72 69 74  .**     (1) Writ
8490: 65 20 56 41 4c 55 45 20 69 6e 74 6f 20 61 20 74  e VALUE into a t
84a0: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e 0a 2a  emporary file..*
84b0: 2a 20 20 20 20 20 28 32 29 20 52 75 6e 20 70 72  *     (2) Run pr
84c0: 6f 67 72 61 6d 20 45 44 49 54 4f 52 20 6f 6e 20  ogram EDITOR on 
84d0: 74 68 61 74 20 74 65 6d 70 6f 72 61 72 79 20 66  that temporary f
84e0: 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 28 33 29 20  ile..**     (3) 
84f0: 52 65 61 64 20 74 68 65 20 74 65 6d 70 6f 72 61  Read the tempora
8500: 72 79 20 66 69 6c 65 20 62 61 63 6b 20 61 6e 64  ry file back and
8510: 20 72 65 74 75 72 6e 20 69 74 73 20 63 6f 6e 74   return its cont
8520: 65 6e 74 20 61 73 20 74 68 65 20 72 65 73 75 6c  ent as the resul
8530: 74 2e 0a 2a 2a 20 20 20 20 20 28 34 29 20 44 65  t..**     (4) De
8540: 6c 65 74 65 20 74 68 65 20 74 65 6d 70 6f 72 61  lete the tempora
8550: 72 79 20 66 69 6c 65 0a 2a 2a 0a 2a 2a 20 49 66  ry file.**.** If
8560: 20 74 68 65 20 45 44 49 54 4f 52 20 61 72 67 75   the EDITOR argu
8570: 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
8580: 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
8590: 6e 20 74 68 65 20 56 49 53 55 41 4c 0a 2a 2a 20  n the VISUAL.** 
85a0: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
85b0: 61 62 6c 65 2e 20 20 49 66 20 73 74 69 6c 6c 20  able.  If still 
85c0: 74 68 65 72 65 20 69 73 20 6e 6f 20 45 44 49 54  there is no EDIT
85d0: 4f 52 2c 20 74 68 72 6f 75 67 68 20 61 6e 20 65  OR, through an e
85e0: 72 72 6f 72 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f  rror..**.** Also
85f0: 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 20   throw an error 
8600: 69 66 20 74 68 65 20 45 44 49 54 4f 52 20 70 72  if the EDITOR pr
8610: 6f 67 72 61 6d 20 72 65 74 75 72 6e 73 20 61 20  ogram returns a 
8620: 6e 6f 6e 2d 7a 65 72 6f 20 65 78 69 74 20 63 6f  non-zero exit co
8630: 64 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  de..*/.static vo
8640: 69 64 20 65 64 69 74 46 75 6e 63 28 0a 20 20 73  id editFunc(.  s
8650: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
8660: 63 6f 6e 74 65 78 74 2c 0a 20 20 69 6e 74 20 61  context,.  int a
8670: 72 67 63 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76  rgc,.  sqlite3_v
8680: 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  alue **argv.){. 
8690: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 64   const char *zEd
86a0: 69 74 6f 72 3b 0a 20 20 63 68 61 72 20 2a 7a 54  itor;.  char *zT
86b0: 65 6d 70 46 69 6c 65 20 3d 20 30 3b 0a 20 20 73  empFile = 0;.  s
86c0: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 68  qlite3 *db;.  ch
86d0: 61 72 20 2a 7a 43 6d 64 20 3d 20 30 3b 0a 20 20  ar *zCmd = 0;.  
86e0: 69 6e 74 20 62 42 69 6e 3b 0a 20 20 69 6e 74 20  int bBin;.  int 
86f0: 72 63 3b 0a 20 20 46 49 4c 45 20 2a 66 20 3d 20  rc;.  FILE *f = 
8700: 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  0;.  sqlite3_int
8710: 36 34 20 73 7a 3b 0a 20 20 73 71 6c 69 74 65 33  64 sz;.  sqlite3
8720: 5f 69 6e 74 36 34 20 78 3b 0a 20 20 75 6e 73 69  _int64 x;.  unsi
8730: 67 6e 65 64 20 63 68 61 72 20 2a 70 20 3d 20 30  gned char *p = 0
8740: 3b 0a 0a 20 20 69 66 28 20 61 72 67 63 3d 3d 32  ;..  if( argc==2
8750: 20 29 7b 0a 20 20 20 20 7a 45 64 69 74 6f 72 20   ){.    zEditor 
8760: 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
8770: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
8780: 74 28 61 72 67 76 5b 31 5d 29 3b 0a 20 20 7d 65  t(argv[1]);.  }e
8790: 6c 73 65 7b 0a 20 20 20 20 7a 45 64 69 74 6f 72  lse{.    zEditor
87a0: 20 3d 20 67 65 74 65 6e 76 28 22 56 49 53 55 41   = getenv("VISUA
87b0: 4c 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a  L");.  }.  if( z
87c0: 45 64 69 74 6f 72 3d 3d 30 20 29 7b 0a 20 20 20  Editor==0 ){.   
87d0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
87e0: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22  error(context, "
87f0: 6e 6f 20 65 64 69 74 6f 72 20 66 6f 72 20 65 64  no editor for ed
8800: 69 74 28 29 22 2c 20 2d 31 29 3b 0a 20 20 20 20  it()", -1);.    
8810: 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 69 66  return;.  }.  if
8820: 28 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  ( sqlite3_value_
8830: 74 79 70 65 28 61 72 67 76 5b 30 5d 29 3d 3d 53  type(argv[0])==S
8840: 51 4c 49 54 45 5f 4e 55 4c 4c 20 29 7b 0a 20 20  QLITE_NULL ){.  
8850: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
8860: 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20  _error(context, 
8870: 22 4e 55 4c 4c 20 69 6e 70 75 74 20 74 6f 20 65  "NULL input to e
8880: 64 69 74 28 29 22 2c 20 2d 31 29 3b 0a 20 20 20  dit()", -1);.   
8890: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 64   return;.  }.  d
88a0: 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  b = sqlite3_cont
88b0: 65 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28 63 6f  ext_db_handle(co
88c0: 6e 74 65 78 74 29 3b 0a 20 20 7a 54 65 6d 70 46  ntext);.  zTempF
88d0: 69 6c 65 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  ile = 0;.  sqlit
88e0: 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
88f0: 64 62 2c 20 30 2c 20 53 51 4c 49 54 45 5f 46 43  db, 0, SQLITE_FC
8900: 4e 54 4c 5f 54 45 4d 50 46 49 4c 45 4e 41 4d 45  NTL_TEMPFILENAME
8910: 2c 20 26 7a 54 65 6d 70 46 69 6c 65 29 3b 0a 20  , &zTempFile);. 
8920: 20 69 66 28 20 7a 54 65 6d 70 46 69 6c 65 3d 3d   if( zTempFile==
8930: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
8940: 5f 75 69 6e 74 36 34 20 72 20 3d 20 30 3b 0a 20  _uint64 r = 0;. 
8950: 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f     sqlite3_rando
8960: 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 72 29 2c  mness(sizeof(r),
8970: 20 26 72 29 3b 0a 20 20 20 20 7a 54 65 6d 70 46   &r);.    zTempF
8980: 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ile = sqlite3_mp
8990: 72 69 6e 74 66 28 22 74 65 6d 70 25 6c 6c 78 22  rintf("temp%llx"
89a0: 2c 20 72 29 3b 0a 20 20 20 20 69 66 28 20 7a 54  , r);.    if( zT
89b0: 65 6d 70 46 69 6c 65 3d 3d 30 20 29 7b 0a 20 20  empFile==0 ){.  
89c0: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
89d0: 6c 74 5f 65 72 72 6f 72 5f 6e 6f 6d 65 6d 28 63  lt_error_nomem(c
89e0: 6f 6e 74 65 78 74 29 3b 0a 20 20 20 20 20 20 72  ontext);.      r
89f0: 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  eturn;.    }.  }
8a00: 0a 20 20 62 42 69 6e 20 3d 20 73 71 6c 69 74 65  .  bBin = sqlite
8a10: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 61 72 67  3_value_type(arg
8a20: 76 5b 30 5d 29 3d 3d 53 51 4c 49 54 45 5f 42 4c  v[0])==SQLITE_BL
8a30: 4f 42 3b 0a 20 20 66 20 3d 20 66 6f 70 65 6e 28  OB;.  f = fopen(
8a40: 7a 54 65 6d 70 46 69 6c 65 2c 20 62 42 69 6e 20  zTempFile, bBin 
8a50: 3f 20 22 77 62 22 20 3a 20 22 77 22 29 3b 0a 20  ? "wb" : "w");. 
8a60: 20 69 66 28 20 66 3d 3d 30 20 29 7b 0a 20 20 20   if( f==0 ){.   
8a70: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
8a80: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22  error(context, "
8a90: 65 64 69 74 28 29 20 63 61 6e 6e 6f 74 20 6f 70  edit() cannot op
8aa0: 65 6e 20 74 65 6d 70 20 66 69 6c 65 22 2c 20 2d  en temp file", -
8ab0: 31 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 64 69  1);.    goto edi
8ac0: 74 5f 66 75 6e 63 5f 65 6e 64 3b 0a 20 20 7d 0a  t_func_end;.  }.
8ad0: 20 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76    sz = sqlite3_v
8ae0: 61 6c 75 65 5f 62 79 74 65 73 28 61 72 67 76 5b  alue_bytes(argv[
8af0: 30 5d 29 3b 0a 20 20 69 66 28 20 62 42 69 6e 20  0]);.  if( bBin 
8b00: 29 7b 0a 20 20 20 20 78 20 3d 20 66 77 72 69 74  ){.    x = fwrit
8b10: 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  e(sqlite3_value_
8b20: 62 6c 6f 62 28 61 72 67 76 5b 30 5d 29 2c 20 31  blob(argv[0]), 1
8b30: 2c 20 73 7a 2c 20 66 29 3b 0a 20 20 7d 65 6c 73  , sz, f);.  }els
8b40: 65 7b 0a 20 20 20 20 78 20 3d 20 66 77 72 69 74  e{.    x = fwrit
8b50: 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  e(sqlite3_value_
8b60: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 31  text(argv[0]), 1
8b70: 2c 20 73 7a 2c 20 66 29 3b 0a 20 20 7d 0a 20 20  , sz, f);.  }.  
8b80: 66 63 6c 6f 73 65 28 66 29 3b 0a 20 20 66 20 3d  fclose(f);.  f =
8b90: 20 30 3b 0a 20 20 69 66 28 20 78 21 3d 73 7a 20   0;.  if( x!=sz 
8ba0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72  ){.    sqlite3_r
8bb0: 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74  esult_error(cont
8bc0: 65 78 74 2c 20 22 65 64 69 74 28 29 20 63 6f 75  ext, "edit() cou
8bd0: 6c 64 20 6e 6f 74 20 77 72 69 74 65 20 74 68 65  ld not write the
8be0: 20 77 68 6f 6c 65 20 66 69 6c 65 22 2c 20 2d 31   whole file", -1
8bf0: 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 64 69 74  );.    goto edit
8c00: 5f 66 75 6e 63 5f 65 6e 64 3b 0a 20 20 7d 0a 20  _func_end;.  }. 
8c10: 20 7a 43 6d 64 20 3d 20 73 71 6c 69 74 65 33 5f   zCmd = sqlite3_
8c20: 6d 70 72 69 6e 74 66 28 22 25 73 20 5c 22 25 73  mprintf("%s \"%s
8c30: 5c 22 22 2c 20 7a 45 64 69 74 6f 72 2c 20 7a 54  \"", zEditor, zT
8c40: 65 6d 70 46 69 6c 65 29 3b 0a 20 20 69 66 28 20  empFile);.  if( 
8c50: 7a 43 6d 64 3d 3d 30 20 29 7b 0a 20 20 20 20 73  zCmd==0 ){.    s
8c60: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
8c70: 72 6f 72 5f 6e 6f 6d 65 6d 28 63 6f 6e 74 65 78  ror_nomem(contex
8c80: 74 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 64 69  t);.    goto edi
8c90: 74 5f 66 75 6e 63 5f 65 6e 64 3b 0a 20 20 7d 0a  t_func_end;.  }.
8ca0: 20 20 72 63 20 3d 20 73 79 73 74 65 6d 28 7a 43    rc = system(zC
8cb0: 6d 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66  md);.  sqlite3_f
8cc0: 72 65 65 28 7a 43 6d 64 29 3b 0a 20 20 69 66 28  ree(zCmd);.  if(
8cd0: 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
8ce0: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
8cf0: 63 6f 6e 74 65 78 74 2c 20 22 45 44 49 54 4f 52  context, "EDITOR
8d00: 20 72 65 74 75 72 6e 65 64 20 6e 6f 6e 2d 7a 65   returned non-ze
8d10: 72 6f 22 2c 20 2d 31 29 3b 0a 20 20 20 20 67 6f  ro", -1);.    go
8d20: 74 6f 20 65 64 69 74 5f 66 75 6e 63 5f 65 6e 64  to edit_func_end
8d30: 3b 0a 20 20 7d 0a 20 20 66 20 3d 20 66 6f 70 65  ;.  }.  f = fope
8d40: 6e 28 7a 54 65 6d 70 46 69 6c 65 2c 20 62 42 69  n(zTempFile, bBi
8d50: 6e 20 3f 20 22 72 62 22 20 3a 20 22 72 22 29 3b  n ? "rb" : "r");
8d60: 0a 20 20 69 66 28 20 66 3d 3d 30 20 29 7b 0a 20  .  if( f==0 ){. 
8d70: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
8d80: 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
8d90: 0a 20 20 20 20 20 20 22 65 64 69 74 28 29 20 63  .      "edit() c
8da0: 61 6e 6e 6f 74 20 72 65 6f 70 65 6e 20 74 65 6d  annot reopen tem
8db0: 70 20 66 69 6c 65 20 61 66 74 65 72 20 65 64 69  p file after edi
8dc0: 74 22 2c 20 2d 31 29 3b 0a 20 20 20 20 67 6f 74  t", -1);.    got
8dd0: 6f 20 65 64 69 74 5f 66 75 6e 63 5f 65 6e 64 3b  o edit_func_end;
8de0: 0a 20 20 7d 0a 20 20 66 73 65 65 6b 28 66 2c 20  .  }.  fseek(f, 
8df0: 30 2c 20 53 45 45 4b 5f 45 4e 44 29 3b 0a 20 20  0, SEEK_END);.  
8e00: 73 7a 20 3d 20 66 74 65 6c 6c 28 66 29 3b 0a 20  sz = ftell(f);. 
8e10: 20 72 65 77 69 6e 64 28 66 29 3b 0a 20 20 70 20   rewind(f);.  p 
8e20: 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  = sqlite3_malloc
8e30: 36 34 28 20 73 7a 2b 28 62 42 69 6e 3d 3d 30 29  64( sz+(bBin==0)
8e40: 20 29 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 29   );.  if( p==0 )
8e50: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  {.    sqlite3_re
8e60: 73 75 6c 74 5f 65 72 72 6f 72 5f 6e 6f 6d 65 6d  sult_error_nomem
8e70: 28 63 6f 6e 74 65 78 74 29 3b 0a 20 20 20 20 67  (context);.    g
8e80: 6f 74 6f 20 65 64 69 74 5f 66 75 6e 63 5f 65 6e  oto edit_func_en
8e90: 64 3b 0a 20 20 7d 0a 20 20 69 66 28 20 62 42 69  d;.  }.  if( bBi
8ea0: 6e 20 29 7b 0a 20 20 20 20 78 20 3d 20 66 72 65  n ){.    x = fre
8eb0: 61 64 28 70 2c 20 31 2c 20 73 7a 2c 20 66 29 3b  ad(p, 1, sz, f);
8ec0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 20  .  }else{.    x 
8ed0: 3d 20 66 72 65 61 64 28 70 2c 20 31 2c 20 73 7a  = fread(p, 1, sz
8ee0: 2c 20 66 29 3b 0a 20 20 20 20 70 5b 73 7a 5d 20  , f);.    p[sz] 
8ef0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 66 63 6c 6f 73  = 0;.  }.  fclos
8f00: 65 28 66 29 3b 0a 20 20 66 20 3d 20 30 3b 0a 20  e(f);.  f = 0;. 
8f10: 20 69 66 28 20 78 21 3d 73 7a 20 29 7b 0a 20 20   if( x!=sz ){.  
8f20: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
8f30: 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20  _error(context, 
8f40: 22 63 6f 75 6c 64 20 6e 6f 74 20 72 65 61 64 20  "could not read 
8f50: 62 61 63 6b 20 74 68 65 20 77 68 6f 6c 65 20 66  back the whole f
8f60: 69 6c 65 22 2c 20 2d 31 29 3b 0a 20 20 20 20 67  ile", -1);.    g
8f70: 6f 74 6f 20 65 64 69 74 5f 66 75 6e 63 5f 65 6e  oto edit_func_en
8f80: 64 3b 0a 20 20 7d 0a 20 20 69 66 28 20 62 42 69  d;.  }.  if( bBi
8f90: 6e 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  n ){.    sqlite3
8fa0: 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 36 34 28 63  _result_blob64(c
8fb0: 6f 6e 74 65 78 74 2c 20 70 2c 20 73 7a 2c 20 73  ontext, p, sz, s
8fc0: 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20  qlite3_free);.  
8fd0: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
8fe0: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 36 34  e3_result_text64
8ff0: 28 63 6f 6e 74 65 78 74 2c 20 28 63 6f 6e 73 74  (context, (const
9000: 20 63 68 61 72 2a 29 70 2c 20 73 7a 2c 0a 20 20   char*)p, sz,.  
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9020: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
9030: 66 72 65 65 2c 20 53 51 4c 49 54 45 5f 55 54 46  free, SQLITE_UTF
9040: 38 29 3b 0a 20 20 7d 0a 20 20 70 20 3d 20 30 3b  8);.  }.  p = 0;
9050: 0a 0a 65 64 69 74 5f 66 75 6e 63 5f 65 6e 64 3a  ..edit_func_end:
9060: 0a 20 20 69 66 28 20 66 20 29 20 66 63 6c 6f 73  .  if( f ) fclos
9070: 65 28 66 29 3b 0a 20 20 75 6e 6c 69 6e 6b 28 7a  e(f);.  unlink(z
9080: 54 65 6d 70 46 69 6c 65 29 3b 0a 20 20 73 71 6c  TempFile);.  sql
9090: 69 74 65 33 5f 66 72 65 65 28 7a 54 65 6d 70 46  ite3_free(zTempF
90a0: 69 6c 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  ile);.  sqlite3_
90b0: 66 72 65 65 28 70 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  free(p);.}../*.*
90c0: 2a 20 53 61 76 65 20 6f 72 20 72 65 73 74 6f 72  * Save or restor
90d0: 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f 75  e the current ou
90e0: 74 70 75 74 20 6d 6f 64 65 0a 2a 2f 0a 73 74 61  tput mode.*/.sta
90f0: 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 4d  tic void outputM
9100: 6f 64 65 50 75 73 68 28 53 68 65 6c 6c 53 74 61  odePush(ShellSta
9110: 74 65 20 2a 70 29 7b 0a 20 20 70 2d 3e 6d 6f 64  te *p){.  p->mod
9120: 65 50 72 69 6f 72 20 3d 20 70 2d 3e 6d 6f 64 65  ePrior = p->mode
9130: 3b 0a 20 20 6d 65 6d 63 70 79 28 70 2d 3e 63 6f  ;.  memcpy(p->co
9140: 6c 53 65 70 50 72 69 6f 72 2c 20 70 2d 3e 63 6f  lSepPrior, p->co
9150: 6c 53 65 70 61 72 61 74 6f 72 2c 20 73 69 7a 65  lSeparator, size
9160: 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  of(p->colSeparat
9170: 6f 72 29 29 3b 0a 20 20 6d 65 6d 63 70 79 28 70  or));.  memcpy(p
9180: 2d 3e 72 6f 77 53 65 70 50 72 69 6f 72 2c 20 70  ->rowSepPrior, p
9190: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20  ->rowSeparator, 
91a0: 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70  sizeof(p->rowSep
91b0: 61 72 61 74 6f 72 29 29 3b 0a 7d 0a 73 74 61 74  arator));.}.stat
91c0: 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 4d 6f  ic void outputMo
91d0: 64 65 50 6f 70 28 53 68 65 6c 6c 53 74 61 74 65  dePop(ShellState
91e0: 20 2a 70 29 7b 0a 20 20 70 2d 3e 6d 6f 64 65 20   *p){.  p->mode 
91f0: 3d 20 70 2d 3e 6d 6f 64 65 50 72 69 6f 72 3b 0a  = p->modePrior;.
9200: 20 20 6d 65 6d 63 70 79 28 70 2d 3e 63 6f 6c 53    memcpy(p->colS
9210: 65 70 61 72 61 74 6f 72 2c 20 70 2d 3e 63 6f 6c  eparator, p->col
9220: 53 65 70 50 72 69 6f 72 2c 20 73 69 7a 65 6f 66  SepPrior, sizeof
9230: 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72  (p->colSeparator
9240: 29 29 3b 0a 20 20 6d 65 6d 63 70 79 28 70 2d 3e  ));.  memcpy(p->
9250: 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 70 2d  rowSeparator, p-
9260: 3e 72 6f 77 53 65 70 50 72 69 6f 72 2c 20 73 69  >rowSepPrior, si
9270: 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72  zeof(p->rowSepar
9280: 61 74 6f 72 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ator));.}../*.**
9290: 20 4f 75 74 70 75 74 20 74 68 65 20 67 69 76 65   Output the give
92a0: 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 68 65  n string as a he
92b0: 78 2d 65 6e 63 6f 64 65 64 20 62 6c 6f 62 20 28  x-encoded blob (
92c0: 65 67 2e 20 58 27 31 32 33 34 27 20 29 0a 2a 2f  eg. X'1234' ).*/
92d0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74  .static void out
92e0: 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 46 49 4c  put_hex_blob(FIL
92f0: 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 76 6f  E *out, const vo
9300: 69 64 20 2a 70 42 6c 6f 62 2c 20 69 6e 74 20 6e  id *pBlob, int n
9310: 42 6c 6f 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a  Blob){.  int i;.
9320: 20 20 63 68 61 72 20 2a 7a 42 6c 6f 62 20 3d 20    char *zBlob = 
9330: 28 63 68 61 72 20 2a 29 70 42 6c 6f 62 3b 0a 20  (char *)pBlob;. 
9340: 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
9350: 22 58 27 22 29 3b 0a 20 20 66 6f 72 28 69 3d 30  "X'");.  for(i=0
9360: 3b 20 69 3c 6e 42 6c 6f 62 3b 20 69 2b 2b 29 7b  ; i<nBlob; i++){
9370: 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
9380: 22 25 30 32 78 22 2c 7a 42 6c 6f 62 5b 69 5d 26  "%02x",zBlob[i]&
9390: 30 78 66 66 29 3b 20 7d 0a 20 20 72 61 77 5f 70  0xff); }.  raw_p
93a0: 72 69 6e 74 66 28 6f 75 74 2c 22 27 22 29 3b 0a  rintf(out,"'");.
93b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 46 69 6e 64 20 61 20  }../*.** Find a 
93c0: 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 6e  string that is n
93d0: 6f 74 20 66 6f 75 6e 64 20 61 6e 79 77 68 65 72  ot found anywher
93e0: 65 20 69 6e 20 7a 5b 5d 2e 20 20 52 65 74 75 72  e in z[].  Retur
93f0: 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 74  n a pointer.** t
9400: 6f 20 74 68 61 74 20 73 74 72 69 6e 67 2e 0a 2a  o that string..*
9410: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 75 73 65 20  *.** Try to use 
9420: 7a 41 20 61 6e 64 20 7a 42 20 66 69 72 73 74 2e  zA and zB first.
9430: 20 20 49 66 20 62 6f 74 68 20 6f 66 20 74 68 6f    If both of tho
9440: 73 65 20 61 72 65 20 61 6c 72 65 61 64 79 20 66  se are already f
9450: 6f 75 6e 64 20 69 6e 20 7a 5b 5d 0a 2a 2a 20 74  ound in z[].** t
9460: 68 65 6e 20 6d 61 6b 65 20 75 70 20 73 6f 6d 65  hen make up some
9470: 20 73 74 72 69 6e 67 20 61 6e 64 20 73 74 6f 72   string and stor
9480: 65 20 69 74 20 69 6e 20 74 68 65 20 62 75 66 66  e it in the buff
9490: 65 72 20 7a 42 75 66 2e 0a 2a 2f 0a 73 74 61 74  er zBuf..*/.stat
94a0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 75  ic const char *u
94b0: 6e 75 73 65 64 5f 73 74 72 69 6e 67 28 0a 20 20  nused_string(.  
94c0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 20  const char *z,  
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94e0: 20 20 2f 2a 20 52 65 73 75 6c 74 20 6d 75 73 74    /* Result must
94f0: 20 6e 6f 74 20 61 70 70 65 61 72 20 61 6e 79 77   not appear anyw
9500: 68 65 72 65 20 69 6e 20 7a 20 2a 2f 0a 20 20 63  here in z */.  c
9510: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 2c 20 63  onst char *zA, c
9520: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 42 2c 20 20  onst char *zB,  
9530: 20 2f 2a 20 54 72 79 20 74 68 65 73 65 20 66 69   /* Try these fi
9540: 72 73 74 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  rst */.  char *z
9550: 42 75 66 20 20 20 20 20 20 20 20 20 20 20 20 20  Buf             
9560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
9570: 61 63 65 20 74 6f 20 73 74 6f 72 65 20 61 20 67  ace to store a g
9580: 65 6e 65 72 61 74 65 64 20 73 74 72 69 6e 67 20  enerated string 
9590: 2a 2f 0a 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64  */.){.  unsigned
95a0: 20 69 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 74   i = 0;.  if( st
95b0: 72 73 74 72 28 7a 2c 20 7a 41 29 3d 3d 30 20 29  rstr(z, zA)==0 )
95c0: 20 72 65 74 75 72 6e 20 7a 41 3b 0a 20 20 69 66   return zA;.  if
95d0: 28 20 73 74 72 73 74 72 28 7a 2c 20 7a 42 29 3d  ( strstr(z, zB)=
95e0: 3d 30 20 29 20 72 65 74 75 72 6e 20 7a 42 3b 0a  =0 ) return zB;.
95f0: 20 20 64 6f 7b 0a 20 20 20 20 73 71 6c 69 74 65    do{.    sqlite
9600: 33 5f 73 6e 70 72 69 6e 74 66 28 32 30 2c 7a 42  3_snprintf(20,zB
9610: 75 66 2c 22 28 25 73 25 75 29 22 2c 20 7a 41 2c  uf,"(%s%u)", zA,
9620: 20 69 2b 2b 29 3b 0a 20 20 7d 77 68 69 6c 65 28   i++);.  }while(
9630: 20 73 74 72 73 74 72 28 7a 2c 7a 42 75 66 29 21   strstr(z,zBuf)!
9640: 3d 30 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a  =0 );.  return z
9650: 42 75 66 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75  Buf;.}../*.** Ou
9660: 74 70 75 74 20 74 68 65 20 67 69 76 65 6e 20 73  tput the given s
9670: 74 72 69 6e 67 20 61 73 20 61 20 71 75 6f 74 65  tring as a quote
9680: 64 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 53  d string using S
9690: 51 4c 20 71 75 6f 74 69 6e 67 20 63 6f 6e 76 65  QL quoting conve
96a0: 6e 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  ntions..**.** Se
96b0: 65 20 61 6c 73 6f 3a 20 6f 75 74 70 75 74 5f 71  e also: output_q
96c0: 75 6f 74 65 64 5f 65 73 63 61 70 65 64 5f 73 74  uoted_escaped_st
96d0: 72 69 6e 67 28 29 0a 2a 2f 0a 73 74 61 74 69 63  ring().*/.static
96e0: 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 71 75 6f   void output_quo
96f0: 74 65 64 5f 73 74 72 69 6e 67 28 46 49 4c 45 20  ted_string(FILE 
9700: 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  *out, const char
9710: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
9720: 20 63 68 61 72 20 63 3b 0a 20 20 73 65 74 42 69   char c;.  setBi
9730: 6e 61 72 79 4d 6f 64 65 28 6f 75 74 2c 20 31 29  naryMode(out, 1)
9740: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 20  ;.  for(i=0; (c 
9750: 3d 20 7a 5b 69 5d 29 21 3d 30 20 26 26 20 63 21  = z[i])!=0 && c!
9760: 3d 27 5c 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20  ='\''; i++){}.  
9770: 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20  if( c==0 ){.    
9780: 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c  utf8_printf(out,
9790: 22 27 25 73 27 22 2c 7a 29 3b 0a 20 20 7d 65 6c  "'%s'",z);.  }el
97a0: 73 65 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e  se{.    raw_prin
97b0: 74 66 28 6f 75 74 2c 20 22 27 22 29 3b 0a 20 20  tf(out, "'");.  
97c0: 20 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20    while( *z ){. 
97d0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 28 63       for(i=0; (c
97e0: 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26 26 20 63   = z[i])!=0 && c
97f0: 21 3d 27 5c 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20  !='\''; i++){}. 
9800: 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c 27 27       if( c=='\''
9810: 20 29 20 69 2b 2b 3b 0a 20 20 20 20 20 20 69 66   ) i++;.      if
9820: 28 20 69 20 29 7b 0a 20 20 20 20 20 20 20 20 75  ( i ){.        u
9830: 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  tf8_printf(out, 
9840: 22 25 2e 2a 73 22 2c 20 69 2c 20 7a 29 3b 0a 20  "%.*s", i, z);. 
9850: 20 20 20 20 20 20 20 7a 20 2b 3d 20 69 3b 0a 20         z += i;. 
9860: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
9870: 20 63 3d 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20   c=='\'' ){.    
9880: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
9890: 75 74 2c 20 22 27 22 29 3b 0a 20 20 20 20 20 20  ut, "'");.      
98a0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
98b0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d    }.      if( c=
98c0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 62 72  =0 ){.        br
98d0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
98e0: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20     z++;.    }.  
98f0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
9900: 2c 20 22 27 22 29 3b 0a 20 20 7d 0a 20 20 73 65  , "'");.  }.  se
9910: 74 54 65 78 74 4d 6f 64 65 28 6f 75 74 2c 20 31  tTextMode(out, 1
9920: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70  );.}../*.** Outp
9930: 75 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  ut the given str
9940: 69 6e 67 20 61 73 20 61 20 71 75 6f 74 65 64 20  ing as a quoted 
9950: 73 74 72 69 6e 67 20 75 73 69 6e 67 20 53 51 4c  string using SQL
9960: 20 71 75 6f 74 69 6e 67 20 63 6f 6e 76 65 6e 74   quoting convent
9970: 69 6f 6e 73 2e 0a 2a 2a 20 41 64 64 69 74 69 6f  ions..** Additio
9980: 6e 61 6c 6c 6c 79 20 2c 20 65 73 63 61 70 65 20  nallly , escape 
9990: 74 68 65 20 22 5c 6e 22 20 61 6e 64 20 22 5c 72  the "\n" and "\r
99a0: 22 20 63 68 61 72 61 63 74 65 72 73 20 73 6f 20  " characters so 
99b0: 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74  that they do not
99c0: 0a 2a 2a 20 67 65 74 20 63 6f 72 72 75 70 74 65  .** get corrupte
99d0: 64 20 62 79 20 65 6e 64 2d 6f 66 2d 6c 69 6e 65  d by end-of-line
99e0: 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 66 61 63   translation fac
99f0: 69 6c 69 74 69 65 73 20 69 6e 20 73 6f 6d 65 20  ilities in some 
9a00: 6f 70 65 72 61 74 69 6e 67 0a 2a 2a 20 73 79 73  operating.** sys
9a10: 74 65 6d 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tems..**.** This
9a20: 20 69 73 20 6c 69 6b 65 20 6f 75 74 70 75 74 5f   is like output_
9a30: 71 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 29 20  quoted_string() 
9a40: 62 75 74 20 77 69 74 68 20 74 68 65 20 61 64 64  but with the add
9a50: 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 5c 72 5c  ition of the \r\
9a60: 6e 0a 2a 2a 20 65 73 63 61 70 65 20 6d 65 63 68  n.** escape mech
9a70: 61 6e 69 73 6d 2e 0a 2a 2f 0a 73 74 61 74 69 63  anism..*/.static
9a80: 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 71 75 6f   void output_quo
9a90: 74 65 64 5f 65 73 63 61 70 65 64 5f 73 74 72 69  ted_escaped_stri
9aa0: 6e 67 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f  ng(FILE *out, co
9ab0: 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20  nst char *z){.  
9ac0: 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 63 3b  int i;.  char c;
9ad0: 0a 20 20 73 65 74 42 69 6e 61 72 79 4d 6f 64 65  .  setBinaryMode
9ae0: 28 6f 75 74 2c 20 31 29 3b 0a 20 20 66 6f 72 28  (out, 1);.  for(
9af0: 69 3d 30 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21  i=0; (c = z[i])!
9b00: 3d 30 20 26 26 20 63 21 3d 27 5c 27 27 20 26 26  =0 && c!='\'' &&
9b10: 20 63 21 3d 27 5c 6e 27 20 26 26 20 63 21 3d 27   c!='\n' && c!='
9b20: 5c 72 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69 66  \r'; i++){}.  if
9b30: 28 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74  ( c==0 ){.    ut
9b40: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 27  f8_printf(out,"'
9b50: 25 73 27 22 2c 7a 29 3b 0a 20 20 7d 65 6c 73 65  %s'",z);.  }else
9b60: 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
9b70: 20 2a 7a 4e 4c 20 3d 20 30 3b 0a 20 20 20 20 63   *zNL = 0;.    c
9b80: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 52 20 3d  onst char *zCR =
9b90: 20 30 3b 0a 20 20 20 20 69 6e 74 20 6e 4e 4c 20   0;.    int nNL 
9ba0: 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 6e 43 52  = 0;.    int nCR
9bb0: 20 3d 20 30 3b 0a 20 20 20 20 63 68 61 72 20 7a   = 0;.    char z
9bc0: 42 75 66 31 5b 32 30 5d 2c 20 7a 42 75 66 32 5b  Buf1[20], zBuf2[
9bd0: 32 30 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  20];.    for(i=0
9be0: 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20  ; z[i]; i++){.  
9bf0: 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c      if( z[i]=='\
9c00: 6e 27 20 29 20 6e 4e 4c 2b 2b 3b 0a 20 20 20 20  n' ) nNL++;.    
9c10: 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 72 27    if( z[i]=='\r'
9c20: 20 29 20 6e 43 52 2b 2b 3b 0a 20 20 20 20 7d 0a   ) nCR++;.    }.
9c30: 20 20 20 20 69 66 28 20 6e 4e 4c 20 29 7b 0a 20      if( nNL ){. 
9c40: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
9c50: 6f 75 74 2c 20 22 72 65 70 6c 61 63 65 28 22 29  out, "replace(")
9c60: 3b 0a 20 20 20 20 20 20 7a 4e 4c 20 3d 20 75 6e  ;.      zNL = un
9c70: 75 73 65 64 5f 73 74 72 69 6e 67 28 7a 2c 20 22  used_string(z, "
9c80: 5c 5c 6e 22 2c 20 22 5c 5c 30 31 32 22 2c 20 7a  \\n", "\\012", z
9c90: 42 75 66 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Buf1);.    }.   
9ca0: 20 69 66 28 20 6e 43 52 20 29 7b 0a 20 20 20 20   if( nCR ){.    
9cb0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
9cc0: 2c 20 22 72 65 70 6c 61 63 65 28 22 29 3b 0a 20  , "replace(");. 
9cd0: 20 20 20 20 20 7a 43 52 20 3d 20 75 6e 75 73 65       zCR = unuse
9ce0: 64 5f 73 74 72 69 6e 67 28 7a 2c 20 22 5c 5c 72  d_string(z, "\\r
9cf0: 22 2c 20 22 5c 5c 30 31 35 22 2c 20 7a 42 75 66  ", "\\015", zBuf
9d00: 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 61  2);.    }.    ra
9d10: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 27  w_printf(out, "'
9d20: 22 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 2a  ");.    while( *
9d30: 7a 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69  z ){.      for(i
9d40: 3d 30 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d  =0; (c = z[i])!=
9d50: 30 20 26 26 20 63 21 3d 27 5c 6e 27 20 26 26 20  0 && c!='\n' && 
9d60: 63 21 3d 27 5c 72 27 20 26 26 20 63 21 3d 27 5c  c!='\r' && c!='\
9d70: 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20  ''; i++){}.     
9d80: 20 69 66 28 20 63 3d 3d 27 5c 27 27 20 29 20 69   if( c=='\'' ) i
9d90: 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 69 20  ++;.      if( i 
9da0: 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
9db0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 2e 2a  printf(out, "%.*
9dc0: 73 22 2c 20 69 2c 20 7a 29 3b 0a 20 20 20 20 20  s", i, z);.     
9dd0: 20 20 20 7a 20 2b 3d 20 69 3b 0a 20 20 20 20 20     z += i;.     
9de0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d   }.      if( c==
9df0: 27 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 20 20  '\'' ){.        
9e00: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  raw_printf(out, 
9e10: 22 27 22 29 3b 0a 20 20 20 20 20 20 20 20 63 6f  "'");.        co
9e20: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a  ntinue;.      }.
9e30: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29        if( c==0 )
9e40: 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  {.        break;
9e50: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
9e60: 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d  ++;.      if( c=
9e70: 3d 27 5c 6e 27 20 29 7b 0a 20 20 20 20 20 20 20  ='\n' ){.       
9e80: 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
9e90: 20 22 25 73 22 2c 20 7a 4e 4c 29 3b 0a 20 20 20   "%s", zNL);.   
9ea0: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20       continue;. 
9eb0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 61 77       }.      raw
9ec0: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73  _printf(out, "%s
9ed0: 22 2c 20 7a 43 52 29 3b 0a 20 20 20 20 7d 0a 20  ", zCR);.    }. 
9ee0: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
9ef0: 74 2c 20 22 27 22 29 3b 0a 20 20 20 20 69 66 28  t, "'");.    if(
9f00: 20 6e 43 52 20 29 7b 0a 20 20 20 20 20 20 72 61   nCR ){.      ra
9f10: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 2c  w_printf(out, ",
9f20: 27 25 73 27 2c 63 68 61 72 28 31 33 29 29 22 2c  '%s',char(13))",
9f30: 20 7a 43 52 29 3b 0a 20 20 20 20 7d 0a 20 20 20   zCR);.    }.   
9f40: 20 69 66 28 20 6e 4e 4c 20 29 7b 0a 20 20 20 20   if( nNL ){.    
9f50: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
9f60: 2c 20 22 2c 27 25 73 27 2c 63 68 61 72 28 31 30  , ",'%s',char(10
9f70: 29 29 22 2c 20 7a 4e 4c 29 3b 0a 20 20 20 20 7d  ))", zNL);.    }
9f80: 0a 20 20 7d 0a 20 20 73 65 74 54 65 78 74 4d 6f  .  }.  setTextMo
9f90: 64 65 28 6f 75 74 2c 20 31 29 3b 0a 7d 0a 0a 2f  de(out, 1);.}../
9fa0: 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 68 65 20  *.** Output the 
9fb0: 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20  given string as 
9fc0: 61 20 71 75 6f 74 65 64 20 61 63 63 6f 72 64 69  a quoted accordi
9fd0: 6e 67 20 74 6f 20 43 20 6f 72 20 54 43 4c 20 71  ng to C or TCL q
9fe0: 75 6f 74 69 6e 67 20 72 75 6c 65 73 2e 0a 2a 2f  uoting rules..*/
9ff0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74  .static void out
a000: 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 46 49 4c  put_c_string(FIL
a010: 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68  E *out, const ch
a020: 61 72 20 2a 7a 29 7b 0a 20 20 75 6e 73 69 67 6e  ar *z){.  unsign
a030: 65 64 20 69 6e 74 20 63 3b 0a 20 20 66 70 75 74  ed int c;.  fput
a040: 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20 20 77  c('"', out);.  w
a050: 68 69 6c 65 28 20 28 63 20 3d 20 2a 28 7a 2b 2b  hile( (c = *(z++
a060: 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  ))!=0 ){.    if(
a070: 20 63 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20 20 20   c=='\\' ){.    
a080: 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74 29 3b    fputc(c, out);
a090: 0a 20 20 20 20 20 20 66 70 75 74 63 28 63 2c 20  .      fputc(c, 
a0a0: 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  out);.    }else 
a0b0: 69 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a 20 20  if( c=='"' ){.  
a0c0: 20 20 20 20 66 70 75 74 63 28 27 5c 5c 27 2c 20      fputc('\\', 
a0d0: 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 70 75 74  out);.      fput
a0e0: 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20 20 20  c('"', out);.   
a0f0: 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c   }else if( c=='\
a100: 74 27 20 29 7b 0a 20 20 20 20 20 20 66 70 75 74  t' ){.      fput
a110: 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b 0a 20 20  c('\\', out);.  
a120: 20 20 20 20 66 70 75 74 63 28 27 74 27 2c 20 6f      fputc('t', o
a130: 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ut);.    }else i
a140: 66 28 20 63 3d 3d 27 5c 6e 27 20 29 7b 0a 20 20  f( c=='\n' ){.  
a150: 20 20 20 20 66 70 75 74 63 28 27 5c 5c 27 2c 20      fputc('\\', 
a160: 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 70 75 74  out);.      fput
a170: 63 28 27 6e 27 2c 20 6f 75 74 29 3b 0a 20 20 20  c('n', out);.   
a180: 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c   }else if( c=='\
a190: 72 27 20 29 7b 0a 20 20 20 20 20 20 66 70 75 74  r' ){.      fput
a1a0: 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b 0a 20 20  c('\\', out);.  
a1b0: 20 20 20 20 66 70 75 74 63 28 27 72 27 2c 20 6f      fputc('r', o
a1c0: 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ut);.    }else i
a1d0: 66 28 20 21 69 73 70 72 69 6e 74 28 63 26 30 78  f( !isprint(c&0x
a1e0: 66 66 29 20 29 7b 0a 20 20 20 20 20 20 72 61 77  ff) ){.      raw
a1f0: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 5c  _printf(out, "\\
a200: 25 30 33 6f 22 2c 20 63 26 30 78 66 66 29 3b 0a  %03o", c&0xff);.
a210: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
a220: 20 66 70 75 74 63 28 63 2c 20 6f 75 74 29 3b 0a   fputc(c, out);.
a230: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 70 75 74      }.  }.  fput
a240: 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 7d 0a 0a  c('"', out);.}..
a250: 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 68 65  /*.** Output the
a260: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 77 69   given string wi
a270: 74 68 20 63 68 61 72 61 63 74 65 72 73 20 74 68  th characters th
a280: 61 74 20 61 72 65 20 73 70 65 63 69 61 6c 20 74  at are special t
a290: 6f 0a 2a 2a 20 48 54 4d 4c 20 65 73 63 61 70 65  o.** HTML escape
a2a0: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
a2b0: 64 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74  d output_html_st
a2c0: 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75 74 2c 20  ring(FILE *out, 
a2d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
a2e0: 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a    int i;.  if( z
a2f0: 3d 3d 30 20 29 20 7a 20 3d 20 22 22 3b 0a 20 20  ==0 ) z = "";.  
a300: 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20  while( *z ){.   
a310: 20 66 6f 72 28 69 3d 30 3b 20 20 20 7a 5b 69 5d   for(i=0;   z[i]
a320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
a330: 7a 5b 69 5d 21 3d 27 3c 27 0a 20 20 20 20 20 20  z[i]!='<'.      
a340: 20 20 20 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27        && z[i]!='
a350: 26 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  &'.            &
a360: 26 20 7a 5b 69 5d 21 3d 27 3e 27 0a 20 20 20 20  & z[i]!='>'.    
a370: 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69 5d 21          && z[i]!
a380: 3d 27 5c 22 27 0a 20 20 20 20 20 20 20 20 20 20  ='\"'.          
a390: 20 20 26 26 20 7a 5b 69 5d 21 3d 27 5c 27 27 3b    && z[i]!='\'';
a3a0: 0a 20 20 20 20 20 20 20 20 69 2b 2b 29 7b 7d 0a  .        i++){}.
a3b0: 20 20 20 20 69 66 28 20 69 3e 30 20 29 7b 0a 20      if( i>0 ){. 
a3c0: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
a3d0: 28 6f 75 74 2c 22 25 2e 2a 73 22 2c 69 2c 7a 29  (out,"%.*s",i,z)
a3e0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
a3f0: 7a 5b 69 5d 3d 3d 27 3c 27 20 29 7b 0a 20 20 20  z[i]=='<' ){.   
a400: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
a410: 74 2c 22 26 6c 74 3b 22 29 3b 0a 20 20 20 20 7d  t,"&lt;");.    }
a420: 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27  else if( z[i]=='
a430: 26 27 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  &' ){.      raw_
a440: 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 61 6d 70  printf(out,"&amp
a450: 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ;");.    }else i
a460: 66 28 20 7a 5b 69 5d 3d 3d 27 3e 27 20 29 7b 0a  f( z[i]=='>' ){.
a470: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
a480: 28 6f 75 74 2c 22 26 67 74 3b 22 29 3b 0a 20 20  (out,"&gt;");.  
a490: 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d    }else if( z[i]
a4a0: 3d 3d 27 5c 22 27 20 29 7b 0a 20 20 20 20 20 20  =='\"' ){.      
a4b0: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22  raw_printf(out,"
a4c0: 26 71 75 6f 74 3b 22 29 3b 0a 20 20 20 20 7d 65  &quot;");.    }e
a4d0: 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c  lse if( z[i]=='\
a4e0: 27 27 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  '' ){.      raw_
a4f0: 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 23 33 39  printf(out,"&#39
a500: 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ;");.    }else{.
a510: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
a520: 20 7d 0a 20 20 20 20 7a 20 2b 3d 20 69 20 2b 20   }.    z += i + 
a530: 31 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  1;.  }.}../*.** 
a540: 49 66 20 61 20 66 69 65 6c 64 20 63 6f 6e 74 61  If a field conta
a550: 69 6e 73 20 61 6e 79 20 63 68 61 72 61 63 74 65  ins any characte
a560: 72 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  r identified by 
a570: 61 20 31 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  a 1 in the follo
a580: 77 69 6e 67 0a 2a 2a 20 61 72 72 61 79 2c 20 74  wing.** array, t
a590: 68 65 6e 20 74 68 65 20 73 74 72 69 6e 67 20 6d  hen the string m
a5a0: 75 73 74 20 62 65 20 71 75 6f 74 65 64 20 66 6f  ust be quoted fo
a5b0: 72 20 43 53 56 2e 0a 2a 2f 0a 73 74 61 74 69 63  r CSV..*/.static
a5c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 6e 65 65 64   const char need
a5d0: 43 73 76 51 75 6f 74 65 5b 5d 20 3d 20 7b 0a 20  CsvQuote[] = {. 
a5e0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
a5f0: 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c  1, 1, 1,   1, 1,
a600: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
a610: 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  1,.  1, 1, 1, 1,
a620: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31   1, 1, 1, 1,   1
a630: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
a640: 20 31 2c 20 31 2c 0a 20 20 31 2c 20 30 2c 20 31   1, 1,.  1, 0, 1
a650: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  , 0, 0, 0, 0, 1,
a660: 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30     0, 0, 0, 0, 0
a670: 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20  , 0, 0, 0,.  0, 
a680: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
a690: 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20  , 0,   0, 0, 0, 
a6a0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20  0, 0, 0, 0, 0,. 
a6b0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
a6c0: 30 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c  0, 0, 0,   0, 0,
a6d0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
a6e0: 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c  0,.  0, 0, 0, 0,
a6f0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20 30   0, 0, 0, 0,   0
a700: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
a710: 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30   0, 0,.  0, 0, 0
a720: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
a730: 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30     0, 0, 0, 0, 0
a740: 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20  , 0, 0, 0,.  0, 
a750: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
a760: 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20  , 0,   0, 0, 0, 
a770: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 0a 20  0, 0, 0, 0, 1,. 
a780: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
a790: 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c  1, 1, 1,   1, 1,
a7a0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
a7b0: 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  1,.  1, 1, 1, 1,
a7c0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31   1, 1, 1, 1,   1
a7d0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
a7e0: 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31   1, 1,.  1, 1, 1
a7f0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
a800: 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31     1, 1, 1, 1, 1
a810: 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20  , 1, 1, 1,.  1, 
a820: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
a830: 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20  , 1,   1, 1, 1, 
a840: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20  1, 1, 1, 1, 1,. 
a850: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
a860: 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c  1, 1, 1,   1, 1,
a870: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
a880: 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  1,.  1, 1, 1, 1,
a890: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31   1, 1, 1, 1,   1
a8a0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
a8b0: 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31   1, 1,.  1, 1, 1
a8c0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
a8d0: 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31     1, 1, 1, 1, 1
a8e0: 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20  , 1, 1, 1,.  1, 
a8f0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
a900: 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20  , 1,   1, 1, 1, 
a910: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 7d  1, 1, 1, 1, 1,.}
a920: 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20  ;../*.** Output 
a930: 61 20 73 69 6e 67 6c 65 20 74 65 72 6d 20 6f 66  a single term of
a940: 20 43 53 56 2e 20 20 41 63 74 75 61 6c 6c 79 2c   CSV.  Actually,
a950: 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72   p->colSeparator
a960: 20 69 73 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20   is used for.** 
a970: 74 68 65 20 73 65 70 61 72 61 74 6f 72 2c 20 77  the separator, w
a980: 68 69 63 68 20 6d 61 79 20 6f 72 20 6d 61 79 20  hich may or may 
a990: 6e 6f 74 20 62 65 20 61 20 63 6f 6d 6d 61 2e 20  not be a comma. 
a9a0: 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 20 69 73   p->nullValue is
a9b0: 0a 2a 2a 20 74 68 65 20 6e 75 6c 6c 20 76 61 6c  .** the null val
a9c0: 75 65 2e 20 20 53 74 72 69 6e 67 73 20 61 72 65  ue.  Strings are
a9d0: 20 71 75 6f 74 65 64 20 69 66 20 6e 65 63 65 73   quoted if neces
a9e0: 73 61 72 79 2e 20 20 54 68 65 20 73 65 70 61 72  sary.  The separ
a9f0: 61 74 6f 72 0a 2a 2a 20 69 73 20 6f 6e 6c 79 20  ator.** is only 
aa00: 69 73 73 75 65 64 20 69 66 20 62 53 65 70 20 69  issued if bSep i
aa10: 73 20 74 72 75 65 2e 0a 2a 2f 0a 73 74 61 74 69  s true..*/.stati
aa20: 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 63 73  c void output_cs
aa30: 76 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c  v(ShellState *p,
aa40: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
aa50: 69 6e 74 20 62 53 65 70 29 7b 0a 20 20 46 49 4c  int bSep){.  FIL
aa60: 45 20 2a 6f 75 74 20 3d 20 70 2d 3e 6f 75 74 3b  E *out = p->out;
aa70: 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  .  if( z==0 ){. 
aa80: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f     utf8_printf(o
aa90: 75 74 2c 22 25 73 22 2c 70 2d 3e 6e 75 6c 6c 56  ut,"%s",p->nullV
aaa0: 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  alue);.  }else{.
aab0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69      int i;.    i
aac0: 6e 74 20 6e 53 65 70 20 3d 20 73 74 72 6c 65 6e  nt nSep = strlen
aad0: 33 30 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  30(p->colSeparat
aae0: 6f 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  or);.    for(i=0
aaf0: 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20  ; z[i]; i++){.  
ab00: 20 20 20 20 69 66 28 20 6e 65 65 64 43 73 76 51      if( needCsvQ
ab10: 75 6f 74 65 5b 28 28 75 6e 73 69 67 6e 65 64 20  uote[((unsigned 
ab20: 63 68 61 72 2a 29 7a 29 5b 69 5d 5d 0a 20 20 20  char*)z)[i]].   
ab30: 20 20 20 20 20 20 7c 7c 20 28 7a 5b 69 5d 3d 3d        || (z[i]==
ab40: 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b  p->colSeparator[
ab50: 30 5d 20 26 26 0a 20 20 20 20 20 20 20 20 20 20  0] &&.          
ab60: 20 20 20 28 6e 53 65 70 3d 3d 31 20 7c 7c 20 6d     (nSep==1 || m
ab70: 65 6d 63 6d 70 28 7a 2c 20 70 2d 3e 63 6f 6c 53  emcmp(z, p->colS
ab80: 65 70 61 72 61 74 6f 72 2c 20 6e 53 65 70 29 3d  eparator, nSep)=
ab90: 3d 30 29 29 20 29 7b 0a 20 20 20 20 20 20 20 20  =0)) ){.        
aba0: 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 62  i = 0;.        b
abb0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
abc0: 20 20 7d 0a 20 20 20 20 69 66 28 20 69 3d 3d 30    }.    if( i==0
abd0: 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a   ){.      char *
abe0: 7a 51 75 6f 74 65 64 20 3d 20 73 71 6c 69 74 65  zQuoted = sqlite
abf0: 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22 25 77 5c  3_mprintf("\"%w\
ac00: 22 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 75 74  "", z);.      ut
ac10: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  f8_printf(out, "
ac20: 25 73 22 2c 20 7a 51 75 6f 74 65 64 29 3b 0a 20  %s", zQuoted);. 
ac30: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
ac40: 65 28 7a 51 75 6f 74 65 64 29 3b 0a 20 20 20 20  e(zQuoted);.    
ac50: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66  }else{.      utf
ac60: 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25  8_printf(out, "%
ac70: 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  s", z);.    }.  
ac80: 7d 0a 20 20 69 66 28 20 62 53 65 70 20 29 7b 0a  }.  if( bSep ){.
ac90: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
aca0: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d  p->out, "%s", p-
acb0: 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a  >colSeparator);.
acc0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69    }.}../*.** Thi
acd0: 73 20 72 6f 75 74 69 6e 65 20 72 75 6e 73 20 77  s routine runs w
ace0: 68 65 6e 20 74 68 65 20 75 73 65 72 20 70 72 65  hen the user pre
acf0: 73 73 65 73 20 43 74 72 6c 2d 43 0a 2a 2f 0a 73  sses Ctrl-C.*/.s
ad00: 74 61 74 69 63 20 76 6f 69 64 20 69 6e 74 65 72  tatic void inter
ad10: 72 75 70 74 5f 68 61 6e 64 6c 65 72 28 69 6e 74  rupt_handler(int
ad20: 20 4e 6f 74 55 73 65 64 29 7b 0a 20 20 55 4e 55   NotUsed){.  UNU
ad30: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 4e 6f  SED_PARAMETER(No
ad40: 74 55 73 65 64 29 3b 0a 20 20 73 65 65 6e 49 6e  tUsed);.  seenIn
ad50: 74 65 72 72 75 70 74 2b 2b 3b 0a 20 20 69 66 28  terrupt++;.  if(
ad60: 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74 3e 32   seenInterrupt>2
ad70: 20 29 20 65 78 69 74 28 31 29 3b 0a 20 20 69 66   ) exit(1);.  if
ad80: 28 20 67 6c 6f 62 61 6c 44 62 20 29 20 73 71 6c  ( globalDb ) sql
ad90: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 67  ite3_interrupt(g
ada0: 6c 6f 62 61 6c 44 62 29 3b 0a 7d 0a 0a 23 69 66  lobalDb);.}..#if
adb0: 20 28 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32   (defined(_WIN32
adc0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e  ) || defined(WIN
add0: 33 32 29 29 20 26 26 20 21 64 65 66 69 6e 65 64  32)) && !defined
ade0: 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 2f 2a 0a  (_WIN32_WCE)./*.
adf0: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
ae00: 72 75 6e 73 20 66 6f 72 20 63 6f 6e 73 6f 6c 65  runs for console
ae10: 20 65 76 65 6e 74 73 20 28 65 2e 67 2e 20 43 74   events (e.g. Ct
ae20: 72 6c 2d 43 29 20 6f 6e 20 57 69 6e 33 32 0a 2a  rl-C) on Win32.*
ae30: 2f 0a 73 74 61 74 69 63 20 42 4f 4f 4c 20 57 49  /.static BOOL WI
ae40: 4e 41 50 49 20 43 6f 6e 73 6f 6c 65 43 74 72 6c  NAPI ConsoleCtrl
ae50: 48 61 6e 64 6c 65 72 28 0a 20 20 44 57 4f 52 44  Handler(.  DWORD
ae60: 20 64 77 43 74 72 6c 54 79 70 65 20 2f 2a 20 4f   dwCtrlType /* O
ae70: 6e 65 20 6f 66 20 74 68 65 20 43 54 52 4c 5f 2a  ne of the CTRL_*
ae80: 5f 45 56 45 4e 54 20 63 6f 6e 73 74 61 6e 74 73  _EVENT constants
ae90: 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 64 77 43   */.){.  if( dwC
aea0: 74 72 6c 54 79 70 65 3d 3d 43 54 52 4c 5f 43 5f  trlType==CTRL_C_
aeb0: 45 56 45 4e 54 20 29 7b 0a 20 20 20 20 69 6e 74  EVENT ){.    int
aec0: 65 72 72 75 70 74 5f 68 61 6e 64 6c 65 72 28 30  errupt_handler(0
aed0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 52  );.    return TR
aee0: 55 45 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  UE;.  }.  return
aef0: 20 46 41 4c 53 45 3b 0a 7d 0a 23 65 6e 64 69 66   FALSE;.}.#endif
af00: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
af10: 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
af20: 49 4f 4e 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  ION./*.** When t
af30: 68 65 20 22 2e 61 75 74 68 20 4f 4e 22 20 69 73  he ".auth ON" is
af40: 20 73 65 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77   set, the follow
af50: 69 6e 67 20 61 75 74 68 6f 72 69 7a 65 72 20 63  ing authorizer c
af60: 61 6c 6c 62 61 63 6b 20 69 73 0a 2a 2a 20 69 6e  allback is.** in
af70: 76 6f 6b 65 64 2e 20 20 49 74 20 61 6c 77 61 79  voked.  It alway
af80: 73 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  s returns SQLITE
af90: 5f 4f 4b 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  _OK..*/.static i
afa0: 6e 74 20 73 68 65 6c 6c 41 75 74 68 28 0a 20 20  nt shellAuth(.  
afb0: 76 6f 69 64 20 2a 70 43 6c 69 65 6e 74 44 61 74  void *pClientDat
afc0: 61 2c 0a 20 20 69 6e 74 20 6f 70 2c 0a 20 20 63  a,.  int op,.  c
afd0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 31 2c 0a  onst char *zA1,.
afe0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
aff0: 32 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  2,.  const char 
b000: 2a 7a 41 33 2c 0a 20 20 63 6f 6e 73 74 20 63 68  *zA3,.  const ch
b010: 61 72 20 2a 7a 41 34 0a 29 7b 0a 20 20 53 68 65  ar *zA4.){.  She
b020: 6c 6c 53 74 61 74 65 20 2a 70 20 3d 20 28 53 68  llState *p = (Sh
b030: 65 6c 6c 53 74 61 74 65 2a 29 70 43 6c 69 65 6e  ellState*)pClien
b040: 74 44 61 74 61 3b 0a 20 20 73 74 61 74 69 63 20  tData;.  static 
b050: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 41 63  const char *azAc
b060: 74 69 6f 6e 5b 5d 20 3d 20 7b 20 30 2c 0a 20 20  tion[] = { 0,.  
b070: 20 20 20 22 43 52 45 41 54 45 5f 49 4e 44 45 58     "CREATE_INDEX
b080: 22 2c 20 20 20 20 20 20 20 20 20 22 43 52 45 41  ",         "CREA
b090: 54 45 5f 54 41 42 4c 45 22 2c 20 20 20 20 20 20  TE_TABLE",      
b0a0: 20 20 20 22 43 52 45 41 54 45 5f 54 45 4d 50 5f     "CREATE_TEMP_
b0b0: 49 4e 44 45 58 22 2c 0a 20 20 20 20 20 22 43 52  INDEX",.     "CR
b0c0: 45 41 54 45 5f 54 45 4d 50 5f 54 41 42 4c 45 22  EATE_TEMP_TABLE"
b0d0: 2c 20 20 20 20 22 43 52 45 41 54 45 5f 54 45 4d  ,    "CREATE_TEM
b0e0: 50 5f 54 52 49 47 47 45 52 22 2c 20 20 22 43 52  P_TRIGGER",  "CR
b0f0: 45 41 54 45 5f 54 45 4d 50 5f 56 49 45 57 22 2c  EATE_TEMP_VIEW",
b100: 0a 20 20 20 20 20 22 43 52 45 41 54 45 5f 54 52  .     "CREATE_TR
b110: 49 47 47 45 52 22 2c 20 20 20 20 20 20 20 22 43  IGGER",       "C
b120: 52 45 41 54 45 5f 56 49 45 57 22 2c 20 20 20 20  REATE_VIEW",    
b130: 20 20 20 20 20 20 22 44 45 4c 45 54 45 22 2c 0a        "DELETE",.
b140: 20 20 20 20 20 22 44 52 4f 50 5f 49 4e 44 45 58       "DROP_INDEX
b150: 22 2c 20 20 20 20 20 20 20 20 20 20 20 22 44 52  ",           "DR
b160: 4f 50 5f 54 41 42 4c 45 22 2c 20 20 20 20 20 20  OP_TABLE",      
b170: 20 20 20 20 20 22 44 52 4f 50 5f 54 45 4d 50 5f       "DROP_TEMP_
b180: 49 4e 44 45 58 22 2c 0a 20 20 20 20 20 22 44 52  INDEX",.     "DR
b190: 4f 50 5f 54 45 4d 50 5f 54 41 42 4c 45 22 2c 20  OP_TEMP_TABLE", 
b1a0: 20 20 20 20 20 22 44 52 4f 50 5f 54 45 4d 50 5f       "DROP_TEMP_
b1b0: 54 52 49 47 47 45 52 22 2c 20 20 20 20 22 44 52  TRIGGER",    "DR
b1c0: 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22 2c 0a 20  OP_TEMP_VIEW",. 
b1d0: 20 20 20 20 22 44 52 4f 50 5f 54 52 49 47 47 45      "DROP_TRIGGE
b1e0: 52 22 2c 20 20 20 20 20 20 20 20 20 22 44 52 4f  R",         "DRO
b1f0: 50 5f 56 49 45 57 22 2c 20 20 20 20 20 20 20 20  P_VIEW",        
b200: 20 20 20 20 22 49 4e 53 45 52 54 22 2c 0a 20 20      "INSERT",.  
b210: 20 20 20 22 50 52 41 47 4d 41 22 2c 20 20 20 20     "PRAGMA",    
b220: 20 20 20 20 20 20 20 20 20 20 20 22 52 45 41 44             "READ
b230: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
b240: 20 20 20 22 53 45 4c 45 43 54 22 2c 0a 20 20 20     "SELECT",.   
b250: 20 20 22 54 52 41 4e 53 41 43 54 49 4f 4e 22 2c    "TRANSACTION",
b260: 20 20 20 20 20 20 20 20 20 20 22 55 50 44 41 54            "UPDAT
b270: 45 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  E",             
b280: 20 20 22 41 54 54 41 43 48 22 2c 0a 20 20 20 20    "ATTACH",.    
b290: 20 22 44 45 54 41 43 48 22 2c 20 20 20 20 20 20   "DETACH",      
b2a0: 20 20 20 20 20 20 20 20 20 22 41 4c 54 45 52 5f           "ALTER_
b2b0: 54 41 42 4c 45 22 2c 20 20 20 20 20 20 20 20 20  TABLE",         
b2c0: 20 22 52 45 49 4e 44 45 58 22 2c 0a 20 20 20 20   "REINDEX",.    
b2d0: 20 22 41 4e 41 4c 59 5a 45 22 2c 20 20 20 20 20   "ANALYZE",     
b2e0: 20 20 20 20 20 20 20 20 20 22 43 52 45 41 54 45           "CREATE
b2f0: 5f 56 54 41 42 4c 45 22 2c 20 20 20 20 20 20 20  _VTABLE",       
b300: 20 22 44 52 4f 50 5f 56 54 41 42 4c 45 22 2c 0a   "DROP_VTABLE",.
b310: 20 20 20 20 20 22 46 55 4e 43 54 49 4f 4e 22 2c       "FUNCTION",
b320: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 41               "SA
b330: 56 45 50 4f 49 4e 54 22 2c 20 20 20 20 20 20 20  VEPOINT",       
b340: 20 20 20 20 20 22 52 45 43 55 52 53 49 56 45 22       "RECURSIVE"
b350: 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  .  };.  int i;. 
b360: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 5b   const char *az[
b370: 34 5d 3b 0a 20 20 61 7a 5b 30 5d 20 3d 20 7a 41  4];.  az[0] = zA
b380: 31 3b 0a 20 20 61 7a 5b 31 5d 20 3d 20 7a 41 32  1;.  az[1] = zA2
b390: 3b 0a 20 20 61 7a 5b 32 5d 20 3d 20 7a 41 33 3b  ;.  az[2] = zA3;
b3a0: 0a 20 20 61 7a 5b 33 5d 20 3d 20 7a 41 34 3b 0a  .  az[3] = zA4;.
b3b0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
b3c0: 3e 6f 75 74 2c 20 22 61 75 74 68 6f 72 69 7a 65  >out, "authorize
b3d0: 72 3a 20 25 73 22 2c 20 61 7a 41 63 74 69 6f 6e  r: %s", azAction
b3e0: 5b 6f 70 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30  [op]);.  for(i=0
b3f0: 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<4; i++){.   
b400: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
b410: 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 69 66  ut, " ");.    if
b420: 28 20 61 7a 5b 69 5d 20 29 7b 0a 20 20 20 20 20  ( az[i] ){.     
b430: 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67   output_c_string
b440: 28 70 2d 3e 6f 75 74 2c 20 61 7a 5b 69 5d 29 3b  (p->out, az[i]);
b450: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
b460: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
b470: 6f 75 74 2c 20 22 4e 55 4c 4c 22 29 3b 0a 20 20  out, "NULL");.  
b480: 20 20 7d 0a 20 20 7d 0a 20 20 72 61 77 5f 70 72    }.  }.  raw_pr
b490: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
b4a0: 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  ");.  return SQL
b4b0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  ITE_OK;.}.#endif
b4c0: 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 61 20  ../*.** Print a 
b4d0: 73 63 68 65 6d 61 20 73 74 61 74 65 6d 65 6e 74  schema statement
b4e0: 2e 20 20 50 61 72 74 20 6f 66 20 4d 4f 44 45 5f  .  Part of MODE_
b4f0: 53 65 6d 69 20 61 6e 64 20 4d 4f 44 45 5f 50 72  Semi and MODE_Pr
b500: 65 74 74 79 20 6f 75 74 70 75 74 2e 0a 2a 2a 0a  etty output..**.
b510: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
b520: 63 6f 6e 76 65 72 74 73 20 73 6f 6d 65 20 43 52  converts some CR
b530: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
b540: 6d 65 6e 74 73 20 66 6f 72 20 73 68 61 64 6f 77  ments for shadow
b550: 20 74 61 62 6c 65 73 0a 2a 2a 20 69 6e 20 46 54   tables.** in FT
b560: 53 33 2f 34 2f 35 20 69 6e 74 6f 20 43 52 45 41  S3/4/5 into CREA
b570: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  TE TABLE IF NOT 
b580: 45 58 49 53 54 53 20 73 74 61 74 65 6d 65 6e 74  EXISTS statement
b590: 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  s..*/.static voi
b5a0: 64 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e  d printSchemaLin
b5b0: 65 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e  e(FILE *out, con
b5c0: 73 74 20 63 68 61 72 20 2a 7a 2c 20 63 6f 6e 73  st char *z, cons
b5d0: 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 29 7b 0a  t char *zTail){.
b5e0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
b5f0: 72 67 6c 6f 62 28 22 43 52 45 41 54 45 20 54 41  rglob("CREATE TA
b600: 42 4c 45 20 5b 27 5c 22 5d 2a 22 2c 20 7a 29 3d  BLE ['\"]*", z)=
b610: 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  =0 ){.    utf8_p
b620: 72 69 6e 74 66 28 6f 75 74 2c 20 22 43 52 45 41  rintf(out, "CREA
b630: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  TE TABLE IF NOT 
b640: 45 58 49 53 54 53 20 25 73 25 73 22 2c 20 7a 2b  EXISTS %s%s", z+
b650: 31 33 2c 20 7a 54 61 69 6c 29 3b 0a 20 20 7d 65  13, zTail);.  }e
b660: 6c 73 65 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  lse{.    utf8_pr
b670: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 25 73 22  intf(out, "%s%s"
b680: 2c 20 7a 2c 20 7a 54 61 69 6c 29 3b 0a 20 20 7d  , z, zTail);.  }
b690: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70  .}.static void p
b6a0: 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 4e 28  rintSchemaLineN(
b6b0: 46 49 4c 45 20 2a 6f 75 74 2c 20 63 68 61 72 20  FILE *out, char 
b6c0: 2a 7a 2c 20 69 6e 74 20 6e 2c 20 63 6f 6e 73 74  *z, int n, const
b6d0: 20 63 68 61 72 20 2a 7a 54 61 69 6c 29 7b 0a 20   char *zTail){. 
b6e0: 20 63 68 61 72 20 63 20 3d 20 7a 5b 6e 5d 3b 0a   char c = z[n];.
b6f0: 20 20 7a 5b 6e 5d 20 3d 20 30 3b 0a 20 20 70 72    z[n] = 0;.  pr
b700: 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 6f 75  intSchemaLine(ou
b710: 74 2c 20 7a 2c 20 7a 54 61 69 6c 29 3b 0a 20 20  t, z, zTail);.  
b720: 7a 5b 6e 5d 20 3d 20 63 3b 0a 7d 0a 0a 2f 2a 0a  z[n] = c;.}../*.
b730: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
b740: 66 20 73 74 72 69 6e 67 20 7a 5b 5d 20 68 61 73  f string z[] has
b750: 20 6e 6f 74 68 69 6e 67 20 62 75 74 20 77 68 69   nothing but whi
b760: 74 65 73 70 61 63 65 20 61 6e 64 20 63 6f 6d 6d  tespace and comm
b770: 65 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 65  ents to the.** e
b780: 6e 64 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  nd of the first 
b790: 6c 69 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  line..*/.static 
b7a0: 69 6e 74 20 77 73 54 6f 45 6f 6c 28 63 6f 6e 73  int wsToEol(cons
b7b0: 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e  t char *z){.  in
b7c0: 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  t i;.  for(i=0; 
b7d0: 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  z[i]; i++){.    
b7e0: 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 6e 27 20 29  if( z[i]=='\n' )
b7f0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 69   return 1;.    i
b800: 66 28 20 49 73 53 70 61 63 65 28 7a 5b 69 5d 29  f( IsSpace(z[i])
b810: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
b820: 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 2d 27 20 26   if( z[i]=='-' &
b830: 26 20 7a 5b 69 2b 31 5d 3d 3d 27 2d 27 20 29 20  & z[i+1]=='-' ) 
b840: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 72 65  return 1;.    re
b850: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 72 65  turn 0;.  }.  re
b860: 74 75 72 6e 20 31 3b 0a 7d 0a 20 20 20 20 0a 0a  turn 1;.}.    ..
b870: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
b880: 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69  e callback routi
b890: 6e 65 20 74 68 61 74 20 74 68 65 20 73 68 65 6c  ne that the shel
b8a0: 6c 0a 2a 2a 20 69 6e 76 6f 6b 65 73 20 66 6f 72  l.** invokes for
b8b0: 20 65 61 63 68 20 72 6f 77 20 6f 66 20 61 20 71   each row of a q
b8c0: 75 65 72 79 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a  uery result..*/.
b8d0: 73 74 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c  static int shell
b8e0: 5f 63 61 6c 6c 62 61 63 6b 28 0a 20 20 76 6f 69  _callback(.  voi
b8f0: 64 20 2a 70 41 72 67 2c 0a 20 20 69 6e 74 20 6e  d *pArg,.  int n
b900: 41 72 67 2c 20 20 20 20 20 20 20 20 2f 2a 20 4e  Arg,        /* N
b910: 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20  umber of result 
b920: 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 63 68 61  columns */.  cha
b930: 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20 20 2f 2a  r **azArg,    /*
b940: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 72 65   Text of each re
b950: 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  sult column */. 
b960: 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 2c 20 20   char **azCol,  
b970: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
b980: 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 54 79  s */.  int *aiTy
b990: 70 65 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  pe      /* Colum
b9a0: 6e 20 74 79 70 65 73 20 2a 2f 0a 29 7b 0a 20 20  n types */.){.  
b9b0: 69 6e 74 20 69 3b 0a 20 20 53 68 65 6c 6c 53 74  int i;.  ShellSt
b9c0: 61 74 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53  ate *p = (ShellS
b9d0: 74 61 74 65 2a 29 70 41 72 67 3b 0a 0a 20 20 69  tate*)pArg;..  i
b9e0: 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 72 65  f( azArg==0 ) re
b9f0: 74 75 72 6e 20 30 3b 0a 20 20 73 77 69 74 63 68  turn 0;.  switch
ba00: 28 20 70 2d 3e 63 4d 6f 64 65 20 29 7b 0a 20 20  ( p->cMode ){.  
ba10: 20 20 63 61 73 65 20 4d 4f 44 45 5f 4c 69 6e 65    case MODE_Line
ba20: 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 77 20  : {.      int w 
ba30: 3d 20 35 3b 0a 20 20 20 20 20 20 69 66 28 20 61  = 5;.      if( a
ba40: 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b  zArg==0 ) break;
ba50: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
ba60: 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
ba70: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
ba80: 73 74 72 6c 65 6e 33 30 28 61 7a 43 6f 6c 5b 69  strlen30(azCol[i
ba90: 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22  ] ? azCol[i] : "
baa0: 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ");.        if( 
bab0: 6c 65 6e 3e 77 20 29 20 77 20 3d 20 6c 65 6e 3b  len>w ) w = len;
bac0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
bad0: 66 28 20 70 2d 3e 63 6e 74 2b 2b 3e 30 20 29 20  f( p->cnt++>0 ) 
bae0: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
baf0: 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77  ut, "%s", p->row
bb00: 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
bb10: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
bb20: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
bb30: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
bb40: 6f 75 74 2c 22 25 2a 73 20 3d 20 25 73 25 73 22  out,"%*s = %s%s"
bb50: 2c 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 0a 20  , w, azCol[i],. 
bb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
bb70: 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b  zArg[i] ? azArg[
bb80: 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75  i] : p->nullValu
bb90: 65 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  e, p->rowSeparat
bba0: 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
bbb0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
bbc0: 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 45 78      case MODE_Ex
bbd0: 70 6c 61 69 6e 3a 0a 20 20 20 20 63 61 73 65 20  plain:.    case 
bbe0: 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  MODE_Column: {. 
bbf0: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
bc00: 74 20 69 6e 74 20 61 45 78 70 6c 61 69 6e 57 69  t int aExplainWi
bc10: 64 74 68 73 5b 5d 20 3d 20 7b 34 2c 20 31 33 2c  dths[] = {4, 13,
bc20: 20 34 2c 20 34 2c 20 34 2c 20 31 33 2c 20 32 2c   4, 4, 4, 13, 2,
bc30: 20 31 33 7d 3b 0a 20 20 20 20 20 20 63 6f 6e 73   13};.      cons
bc40: 74 20 69 6e 74 20 2a 63 6f 6c 57 69 64 74 68 3b  t int *colWidth;
bc50: 0a 20 20 20 20 20 20 69 6e 74 20 73 68 6f 77 48  .      int showH
bc60: 64 72 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  dr;.      char *
bc70: 72 6f 77 53 65 70 3b 0a 20 20 20 20 20 20 69 66  rowSep;.      if
bc80: 28 20 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45  ( p->cMode==MODE
bc90: 5f 43 6f 6c 75 6d 6e 20 29 7b 0a 20 20 20 20 20  _Column ){.     
bca0: 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20 70 2d     colWidth = p-
bcb0: 3e 63 6f 6c 57 69 64 74 68 3b 0a 20 20 20 20 20  >colWidth;.     
bcc0: 20 20 20 73 68 6f 77 48 64 72 20 3d 20 70 2d 3e     showHdr = p->
bcd0: 73 68 6f 77 48 65 61 64 65 72 3b 0a 20 20 20 20  showHeader;.    
bce0: 20 20 20 20 72 6f 77 53 65 70 20 3d 20 70 2d 3e      rowSep = p->
bcf0: 72 6f 77 53 65 70 61 72 61 74 6f 72 3b 0a 20 20  rowSeparator;.  
bd00: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
bd10: 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20 61 45     colWidth = aE
bd20: 78 70 6c 61 69 6e 57 69 64 74 68 73 3b 0a 20 20  xplainWidths;.  
bd30: 20 20 20 20 20 20 73 68 6f 77 48 64 72 20 3d 20        showHdr = 
bd40: 31 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 53 65  1;.        rowSe
bd50: 70 20 3d 20 53 45 50 5f 52 6f 77 3b 0a 20 20 20  p = SEP_Row;.   
bd60: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
bd70: 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 29 7b 0a 20 20  ->cnt++==0 ){.  
bd80: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
bd90: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
bda0: 20 20 20 20 20 20 20 69 6e 74 20 77 2c 20 6e 3b         int w, n;
bdb0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
bdc0: 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 63 6f  <ArraySize(p->co
bdd0: 6c 57 69 64 74 68 29 20 29 7b 0a 20 20 20 20 20  lWidth) ){.     
bde0: 20 20 20 20 20 20 20 77 20 3d 20 63 6f 6c 57 69         w = colWi
bdf0: 64 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20  dth[i];.        
be00: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
be10: 20 20 20 20 20 77 20 3d 20 30 3b 0a 20 20 20 20       w = 0;.    
be20: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
be30: 20 20 69 66 28 20 77 3d 3d 30 20 29 7b 0a 20 20    if( w==0 ){.  
be40: 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 73 74            w = st
be50: 72 6c 65 6e 43 68 61 72 28 61 7a 43 6f 6c 5b 69  rlenChar(azCol[i
be60: 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22  ] ? azCol[i] : "
be70: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
be80: 69 66 28 20 77 3c 31 30 20 29 20 77 20 3d 20 31  if( w<10 ) w = 1
be90: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  0;.            n
bea0: 20 3d 20 73 74 72 6c 65 6e 43 68 61 72 28 61 7a   = strlenChar(az
beb0: 41 72 67 20 26 26 20 61 7a 41 72 67 5b 69 5d 20  Arg && azArg[i] 
bec0: 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e  ? azArg[i] : p->
bed0: 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20  nullValue);.    
bee0: 20 20 20 20 20 20 20 20 69 66 28 20 77 3c 6e 20          if( w<n 
bef0: 29 20 77 20 3d 20 6e 3b 0a 20 20 20 20 20 20 20  ) w = n;.       
bf00: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69     }.          i
bf10: 66 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70  f( i<ArraySize(p
bf20: 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20 29  ->actualWidth) )
bf30: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 2d  {.            p-
bf40: 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69 5d 20  >actualWidth[i] 
bf50: 3d 20 77 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = w;.          }
bf60: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  .          if( s
bf70: 68 6f 77 48 64 72 20 29 7b 0a 20 20 20 20 20 20  howHdr ){.      
bf80: 20 20 20 20 20 20 75 74 66 38 5f 77 69 64 74 68        utf8_width
bf90: 5f 70 72 69 6e 74 28 70 2d 3e 6f 75 74 2c 20 77  _print(p->out, w
bfa0: 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20  , azCol[i]);.   
bfb0: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
bfc0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
bfd0: 22 2c 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 72  ", i==nArg-1 ? r
bfe0: 6f 77 53 65 70 20 3a 20 22 20 20 22 29 3b 0a 20  owSep : "  ");. 
bff0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
c000: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
c010: 20 73 68 6f 77 48 64 72 20 29 7b 0a 20 20 20 20   showHdr ){.    
c020: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
c030: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
c040: 20 20 20 20 20 20 20 20 20 69 6e 74 20 77 3b 0a           int w;.
c050: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
c060: 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61  i<ArraySize(p->a
c070: 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b 0a 20  ctualWidth) ){. 
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 20                w 
c090: 3d 20 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68  = p->actualWidth
c0a0: 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  [i];.           
c0b0: 20 20 20 20 69 66 28 20 77 3c 30 20 29 20 77 20      if( w<0 ) w 
c0c0: 3d 20 2d 77 3b 0a 20 20 20 20 20 20 20 20 20 20  = -w;.          
c0d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
c0e0: 20 20 20 20 20 20 20 20 77 20 3d 20 31 30 3b 0a          w = 10;.
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
c100: 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
c110: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 2d  rintf(p->out,"%-
c120: 2a 2e 2a 73 25 73 22 2c 77 2c 77 2c 0a 20 20 20  *.*s%s",w,w,.   
c130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c140: 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  "---------------
c150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20  -----------".   
c180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c190: 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  "---------------
c1a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c1b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c1c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 2c 0a 20 20  -----------",.  
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1e0: 20 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 72 6f    i==nArg-1 ? ro
c1f0: 77 53 65 70 20 3a 20 22 20 20 22 29 3b 0a 20 20  wSep : "  ");.  
c200: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
c210: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
c220: 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29    if( azArg==0 )
c230: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f   break;.      fo
c240: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
c250: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  ++){.        int
c260: 20 77 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   w;.        if( 
c270: 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61  i<ArraySize(p->a
c280: 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b 0a 20  ctualWidth) ){. 
c290: 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 70 2d            w = p-
c2a0: 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69 5d 3b  >actualWidth[i];
c2b0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
c2c0: 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 31             w = 1
c2d0: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
c2e0: 20 20 20 20 20 69 66 28 20 70 2d 3e 63 4d 6f 64       if( p->cMod
c2f0: 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20  e==MODE_Explain 
c300: 26 26 20 61 7a 41 72 67 5b 69 5d 20 26 26 20 73  && azArg[i] && s
c310: 74 72 6c 65 6e 43 68 61 72 28 61 7a 41 72 67 5b  trlenChar(azArg[
c320: 69 5d 29 3e 77 20 29 7b 0a 20 20 20 20 20 20 20  i])>w ){.       
c330: 20 20 20 77 20 3d 20 73 74 72 6c 65 6e 43 68 61     w = strlenCha
c340: 72 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  r(azArg[i]);.   
c350: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
c360: 66 28 20 69 3d 3d 31 20 26 26 20 70 2d 3e 61 69  f( i==1 && p->ai
c370: 49 6e 64 65 6e 74 20 26 26 20 70 2d 3e 70 53 74  Indent && p->pSt
c380: 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  mt ){.          
c390: 69 66 28 20 70 2d 3e 69 49 6e 64 65 6e 74 3c 70  if( p->iIndent<p
c3a0: 2d 3e 6e 49 6e 64 65 6e 74 20 29 7b 0a 20 20 20  ->nIndent ){.   
c3b0: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
c3c0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2a  intf(p->out, "%*
c3d0: 2e 73 22 2c 20 70 2d 3e 61 69 49 6e 64 65 6e 74  .s", p->aiIndent
c3e0: 5b 70 2d 3e 69 49 6e 64 65 6e 74 5d 2c 20 22 22  [p->iIndent], ""
c3f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
c400: 20 20 20 20 20 20 20 20 20 70 2d 3e 69 49 6e 64           p->iInd
c410: 65 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  ent++;.        }
c420: 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 77 69  .        utf8_wi
c430: 64 74 68 5f 70 72 69 6e 74 28 70 2d 3e 6f 75 74  dth_print(p->out
c440: 2c 20 77 2c 20 61 7a 41 72 67 5b 69 5d 20 3f 20  , w, azArg[i] ? 
c450: 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75  azArg[i] : p->nu
c460: 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20  llValue);.      
c470: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
c480: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 69 3d 3d 6e  >out, "%s", i==n
c490: 41 72 67 2d 31 20 3f 20 72 6f 77 53 65 70 20 3a  Arg-1 ? rowSep :
c4a0: 20 22 20 20 22 29 3b 0a 20 20 20 20 20 20 7d 0a   "  ");.      }.
c4b0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c4c0: 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45   }.    case MODE
c4d0: 5f 53 65 6d 69 3a 20 7b 20 20 20 2f 2a 20 2e 73  _Semi: {   /* .s
c4e0: 63 68 65 6d 61 20 61 6e 64 20 2e 66 75 6c 6c 73  chema and .fulls
c4f0: 63 68 65 6d 61 20 6f 75 74 70 75 74 20 2a 2f 0a  chema output */.
c500: 20 20 20 20 20 20 70 72 69 6e 74 53 63 68 65 6d        printSchem
c510: 61 4c 69 6e 65 28 70 2d 3e 6f 75 74 2c 20 61 7a  aLine(p->out, az
c520: 41 72 67 5b 30 5d 2c 20 22 3b 5c 6e 22 29 3b 0a  Arg[0], ";\n");.
c530: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c540: 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45   }.    case MODE
c550: 5f 50 72 65 74 74 79 3a 20 7b 20 20 2f 2a 20 2e  _Pretty: {  /* .
c560: 73 63 68 65 6d 61 20 61 6e 64 20 2e 66 75 6c 6c  schema and .full
c570: 73 63 68 65 6d 61 20 77 69 74 68 20 2d 2d 69 6e  schema with --in
c580: 64 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 63 68  dent */.      ch
c590: 61 72 20 2a 7a 3b 0a 20 20 20 20 20 20 69 6e 74  ar *z;.      int
c5a0: 20 6a 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 50   j;.      int nP
c5b0: 61 72 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  aren = 0;.      
c5c0: 63 68 61 72 20 63 45 6e 64 20 3d 20 30 3b 0a 20  char cEnd = 0;. 
c5d0: 20 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20       char c;.   
c5e0: 20 20 20 69 6e 74 20 6e 4c 69 6e 65 20 3d 20 30     int nLine = 0
c5f0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
c600: 6e 41 72 67 3d 3d 31 20 29 3b 0a 20 20 20 20 20  nArg==1 );.     
c610: 20 69 66 28 20 61 7a 41 72 67 5b 30 5d 3d 3d 30   if( azArg[0]==0
c620: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
c630: 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 6c  if( sqlite3_strl
c640: 69 6b 65 28 22 43 52 45 41 54 45 20 56 49 45 57  ike("CREATE VIEW
c650: 25 22 2c 20 61 7a 41 72 67 5b 30 5d 2c 20 30 29  %", azArg[0], 0)
c660: 3d 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20 73 71  ==0.       || sq
c670: 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 22 43  lite3_strlike("C
c680: 52 45 41 54 45 20 54 52 49 47 25 22 2c 20 61 7a  REATE TRIG%", az
c690: 41 72 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a 20 20  Arg[0], 0)==0.  
c6a0: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 75      ){.        u
c6b0: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
c6c0: 74 2c 20 22 25 73 3b 5c 6e 22 2c 20 61 7a 41 72  t, "%s;\n", azAr
c6d0: 67 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 62  g[0]);.        b
c6e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
c6f0: 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f      z = sqlite3_
c700: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 61 7a  mprintf("%s", az
c710: 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20 20 6a  Arg[0]);.      j
c720: 20 3d 20 30 3b 0a 20 20 20 20 20 20 66 6f 72 28   = 0;.      for(
c730: 69 3d 30 3b 20 49 73 53 70 61 63 65 28 7a 5b 69  i=0; IsSpace(z[i
c740: 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20  ]); i++){}.     
c750: 20 66 6f 72 28 3b 20 28 63 20 3d 20 7a 5b 69 5d   for(; (c = z[i]
c760: 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  )!=0; i++){.    
c770: 20 20 20 20 69 66 28 20 49 73 53 70 61 63 65 28      if( IsSpace(
c780: 63 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  c) ){.          
c790: 69 66 28 20 7a 5b 6a 2d 31 5d 3d 3d 27 5c 72 27  if( z[j-1]=='\r'
c7a0: 20 29 20 7a 5b 6a 2d 31 5d 20 3d 20 27 5c 6e 27   ) z[j-1] = '\n'
c7b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
c7c0: 49 73 53 70 61 63 65 28 7a 5b 6a 2d 31 5d 29 20  IsSpace(z[j-1]) 
c7d0: 7c 7c 20 7a 5b 6a 2d 31 5d 3d 3d 27 28 27 20 29  || z[j-1]=='(' )
c7e0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
c7f0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 63 3d     }else if( (c=
c800: 3d 27 28 27 20 7c 7c 20 63 3d 3d 27 29 27 29 20  ='(' || c==')') 
c810: 26 26 20 6a 3e 30 20 26 26 20 49 73 53 70 61 63  && j>0 && IsSpac
c820: 65 28 7a 5b 6a 2d 31 5d 29 20 29 7b 0a 20 20 20  e(z[j-1]) ){.   
c830: 20 20 20 20 20 20 20 6a 2d 2d 3b 0a 20 20 20 20         j--;.    
c840: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 5b      }.        z[
c850: 6a 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20  j++] = c;.      
c860: 7d 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 6a  }.      while( j
c870: 3e 30 20 26 26 20 49 73 53 70 61 63 65 28 7a 5b  >0 && IsSpace(z[
c880: 6a 2d 31 5d 29 20 29 7b 20 6a 2d 2d 3b 20 7d 0a  j-1]) ){ j--; }.
c890: 20 20 20 20 20 20 7a 5b 6a 5d 20 3d 20 30 3b 0a        z[j] = 0;.
c8a0: 20 20 20 20 20 20 69 66 28 20 73 74 72 6c 65 6e        if( strlen
c8b0: 33 30 28 7a 29 3e 3d 37 39 20 29 7b 0a 20 20 20  30(z)>=79 ){.   
c8c0: 20 20 20 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20       for(i=j=0; 
c8d0: 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69  (c = z[i])!=0; i
c8e0: 2b 2b 29 7b 20 20 2f 2a 20 43 6f 70 79 20 63 68  ++){  /* Copy ch
c8f0: 61 6e 67 65 73 20 66 72 6f 6d 20 7a 5b 69 5d 20  anges from z[i] 
c900: 62 61 63 6b 20 74 6f 20 7a 5b 6a 5d 20 2a 2f 0a  back to z[j] */.
c910: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63 3d            if( c=
c920: 3d 63 45 6e 64 20 29 7b 0a 20 20 20 20 20 20 20  =cEnd ){.       
c930: 20 20 20 20 20 63 45 6e 64 20 3d 20 30 3b 0a 20       cEnd = 0;. 
c940: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69           }else i
c950: 66 28 20 63 3d 3d 27 22 27 20 7c 7c 20 63 3d 3d  f( c=='"' || c==
c960: 27 5c 27 27 20 7c 7c 20 63 3d 3d 27 60 27 20 29  '\'' || c=='`' )
c970: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 45  {.            cE
c980: 6e 64 20 3d 20 63 3b 0a 20 20 20 20 20 20 20 20  nd = c;.        
c990: 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
c9a0: 5b 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  [' ){.          
c9b0: 20 20 63 45 6e 64 20 3d 20 27 5d 27 3b 0a 20 20    cEnd = ']';.  
c9c0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
c9d0: 28 20 63 3d 3d 27 2d 27 20 26 26 20 7a 5b 69 2b  ( c=='-' && z[i+
c9e0: 31 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20  1]=='-' ){.     
c9f0: 20 20 20 20 20 20 20 63 45 6e 64 20 3d 20 27 5c         cEnd = '\
ca00: 6e 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  n';.          }e
ca10: 6c 73 65 20 69 66 28 20 63 3d 3d 27 28 27 20 29  lse if( c=='(' )
ca20: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 50  {.            nP
ca30: 61 72 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20  aren++;.        
ca40: 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
ca50: 29 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  )' ){.          
ca60: 20 20 6e 50 61 72 65 6e 2d 2d 3b 0a 20 20 20 20    nParen--;.    
ca70: 20 20 20 20 20 20 20 20 69 66 28 20 6e 4c 69 6e          if( nLin
ca80: 65 3e 30 20 26 26 20 6e 50 61 72 65 6e 3d 3d 30  e>0 && nParen==0
ca90: 20 26 26 20 6a 3e 30 20 29 7b 0a 20 20 20 20 20   && j>0 ){.     
caa0: 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 53 63           printSc
cab0: 68 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e 6f 75 74  hemaLineN(p->out
cac0: 2c 20 7a 2c 20 6a 2c 20 22 5c 6e 22 29 3b 0a 20  , z, j, "\n");. 
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6a 20 3d               j =
cae0: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   0;.            
caf0: 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  }.          }.  
cb00: 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d          z[j++] =
cb10: 20 63 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66   c;.          if
cb20: 28 20 6e 50 61 72 65 6e 3d 3d 31 20 26 26 20 63  ( nParen==1 && c
cb30: 45 6e 64 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  End==0.         
cb40: 20 20 26 26 20 28 63 3d 3d 27 28 27 20 7c 7c 20    && (c=='(' || 
cb50: 63 3d 3d 27 5c 6e 27 20 7c 7c 20 28 63 3d 3d 27  c=='\n' || (c=='
cb60: 2c 27 20 26 26 20 21 77 73 54 6f 45 6f 6c 28 7a  ,' && !wsToEol(z
cb70: 2b 69 2b 31 29 29 29 0a 20 20 20 20 20 20 20 20  +i+1))).        
cb80: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20    ){.           
cb90: 20 69 66 28 20 63 3d 3d 27 5c 6e 27 20 29 20 6a   if( c=='\n' ) j
cba0: 2d 2d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  --;.            
cbb0: 70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 4e  printSchemaLineN
cbc0: 28 70 2d 3e 6f 75 74 2c 20 7a 2c 20 6a 2c 20 22  (p->out, z, j, "
cbd0: 5c 6e 20 20 22 29 3b 0a 20 20 20 20 20 20 20 20  \n  ");.        
cbe0: 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20      j = 0;.     
cbf0: 20 20 20 20 20 20 20 6e 4c 69 6e 65 2b 2b 3b 0a         nLine++;.
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
cc10: 65 28 20 49 73 53 70 61 63 65 28 7a 5b 69 2b 31  e( IsSpace(z[i+1
cc20: 5d 29 20 29 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20  ]) ){ i++; }.   
cc30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
cc40: 20 7d 0a 20 20 20 20 20 20 20 20 7a 5b 6a 5d 20   }.        z[j] 
cc50: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
cc60: 20 20 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69     printSchemaLi
cc70: 6e 65 28 70 2d 3e 6f 75 74 2c 20 7a 2c 20 22 3b  ne(p->out, z, ";
cc80: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  \n");.      sqli
cc90: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 20  te3_free(z);.   
cca0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
ccb0: 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 4c 69      case MODE_Li
ccc0: 73 74 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20  st: {.      if( 
ccd0: 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20 70  p->cnt++==0 && p
cce0: 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a  ->showHeader ){.
ccf0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
cd00: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
cd10: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
cd20: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 25  intf(p->out,"%s%
cd30: 73 22 2c 61 7a 43 6f 6c 5b 69 5d 2c 0a 20 20 20  s",azCol[i],.   
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
cd50: 3d 3d 6e 41 72 67 2d 31 20 3f 20 70 2d 3e 72 6f  ==nArg-1 ? p->ro
cd60: 77 53 65 70 61 72 61 74 6f 72 20 3a 20 70 2d 3e  wSeparator : p->
cd70: 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  colSeparator);. 
cd80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
cd90: 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41 72 67  .      if( azArg
cda0: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
cdb0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
cdc0: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
cdd0: 20 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72    char *z = azAr
cde0: 67 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 69 66  g[i];.        if
cdf0: 28 20 7a 3d 3d 30 20 29 20 7a 20 3d 20 70 2d 3e  ( z==0 ) z = p->
ce00: 6e 75 6c 6c 56 61 6c 75 65 3b 0a 20 20 20 20 20  nullValue;.     
ce10: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
ce20: 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 29 3b  ->out, "%s", z);
ce30: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3c 6e  .        if( i<n
ce40: 41 72 67 2d 31 20 29 7b 0a 20 20 20 20 20 20 20  Arg-1 ){.       
ce50: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
ce60: 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e  ->out, "%s", p->
ce70: 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  colSeparator);. 
ce80: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
ce90: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
cea0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
ceb0: 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
cec0: 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  r);.        }.  
ced0: 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61      }.      brea
cee0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
cef0: 65 20 4d 4f 44 45 5f 48 74 6d 6c 3a 20 7b 0a 20  e MODE_Html: {. 
cf00: 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b       if( p->cnt+
cf10: 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77 48  +==0 && p->showH
cf20: 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20 20  eader ){.       
cf30: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
cf40: 75 74 2c 22 3c 54 52 3e 22 29 3b 0a 20 20 20 20  ut,"<TR>");.    
cf50: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
cf60: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
cf70: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
cf80: 70 2d 3e 6f 75 74 2c 22 3c 54 48 3e 22 29 3b 0a  p->out,"<TH>");.
cf90: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
cfa0: 5f 68 74 6d 6c 5f 73 74 72 69 6e 67 28 70 2d 3e  _html_string(p->
cfb0: 6f 75 74 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a  out, azCol[i]);.
cfc0: 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
cfd0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54  intf(p->out,"</T
cfe0: 48 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  H>\n");.        
cff0: 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  }.        raw_pr
d000: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54  intf(p->out,"</T
d010: 52 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a  R>\n");.      }.
d020: 20 20 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d        if( azArg=
d030: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
d040: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
d050: 6f 75 74 2c 22 3c 54 52 3e 22 29 3b 0a 20 20 20  out,"<TR>");.   
d060: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
d070: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
d080: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
d090: 6f 75 74 2c 22 3c 54 44 3e 22 29 3b 0a 20 20 20  out,"<TD>");.   
d0a0: 20 20 20 20 20 6f 75 74 70 75 74 5f 68 74 6d 6c       output_html
d0b0: 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20  _string(p->out, 
d0c0: 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67  azArg[i] ? azArg
d0d0: 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c  [i] : p->nullVal
d0e0: 75 65 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77  ue);.        raw
d0f0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
d100: 3c 2f 54 44 3e 5c 6e 22 29 3b 0a 20 20 20 20 20  </TD>\n");.     
d110: 20 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69   }.      raw_pri
d120: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52  ntf(p->out,"</TR
d130: 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62 72 65  >\n");.      bre
d140: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
d150: 73 65 20 4d 4f 44 45 5f 54 63 6c 3a 20 7b 0a 20  se MODE_Tcl: {. 
d160: 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b       if( p->cnt+
d170: 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77 48  +==0 && p->showH
d180: 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20 20  eader ){.       
d190: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
d1a0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
d1b0: 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e    output_c_strin
d1c0: 67 28 70 2d 3e 6f 75 74 2c 61 7a 43 6f 6c 5b 69  g(p->out,azCol[i
d1d0: 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22  ] ? azCol[i] : "
d1e0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ");.          if
d1f0: 28 69 3c 6e 41 72 67 2d 31 29 20 75 74 66 38 5f  (i<nArg-1) utf8_
d200: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
d210: 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  %s", p->colSepar
d220: 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d  ator);.        }
d230: 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
d240: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
d250: 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  ", p->rowSeparat
d260: 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
d270: 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20     if( azArg==0 
d280: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66  ) break;.      f
d290: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
d2a0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 6f 75  i++){.        ou
d2b0: 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d  tput_c_string(p-
d2c0: 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 20 3f  >out, azArg[i] ?
d2d0: 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e   azArg[i] : p->n
d2e0: 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20  ullValue);.     
d2f0: 20 20 20 69 66 28 69 3c 6e 41 72 67 2d 31 29 20     if(i<nArg-1) 
d300: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
d310: 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c  ut, "%s", p->col
d320: 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
d330: 20 20 7d 0a 20 20 20 20 20 20 75 74 66 38 5f 70    }.      utf8_p
d340: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
d350: 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  s", p->rowSepara
d360: 74 6f 72 29 3b 0a 20 20 20 20 20 20 62 72 65 61  tor);.      brea
d370: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
d380: 65 20 4d 4f 44 45 5f 43 73 76 3a 20 7b 0a 20 20  e MODE_Csv: {.  
d390: 20 20 20 20 73 65 74 42 69 6e 61 72 79 4d 6f 64      setBinaryMod
d3a0: 65 28 70 2d 3e 6f 75 74 2c 20 31 29 3b 0a 20 20  e(p->out, 1);.  
d3b0: 20 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b      if( p->cnt++
d3c0: 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77 48 65  ==0 && p->showHe
d3d0: 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20  ader ){.        
d3e0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
d3f0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
d400: 20 6f 75 74 70 75 74 5f 63 73 76 28 70 2c 20 61   output_csv(p, a
d410: 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b  zCol[i] ? azCol[
d420: 69 5d 20 3a 20 22 22 2c 20 69 3c 6e 41 72 67 2d  i] : "", i<nArg-
d430: 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  1);.        }.  
d440: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
d450: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
d460: 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
d470: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
d480: 69 66 28 20 6e 41 72 67 3e 30 20 29 7b 0a 20 20  if( nArg>0 ){.  
d490: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
d4a0: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
d4b0: 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63 73         output_cs
d4c0: 76 28 70 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 69  v(p, azArg[i], i
d4d0: 3c 6e 41 72 67 2d 31 29 3b 0a 20 20 20 20 20 20  <nArg-1);.      
d4e0: 20 20 7d 0a 20 20 20 20 20 20 20 20 75 74 66 38    }.        utf8
d4f0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
d500: 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61  "%s", p->rowSepa
d510: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a  rator);.      }.
d520: 20 20 20 20 20 20 73 65 74 54 65 78 74 4d 6f 64        setTextMod
d530: 65 28 70 2d 3e 6f 75 74 2c 20 31 29 3b 0a 20 20  e(p->out, 1);.  
d540: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
d550: 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 49  .    case MODE_I
d560: 6e 73 65 72 74 3a 20 7b 0a 20 20 20 20 20 20 69  nsert: {.      i
d570: 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72  f( azArg==0 ) br
d580: 65 61 6b 3b 0a 20 20 20 20 20 20 75 74 66 38 5f  eak;.      utf8_
d590: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 49  printf(p->out,"I
d5a0: 4e 53 45 52 54 20 49 4e 54 4f 20 25 73 22 2c 70  NSERT INTO %s",p
d5b0: 2d 3e 7a 44 65 73 74 54 61 62 6c 65 29 3b 0a 20  ->zDestTable);. 
d5c0: 20 20 20 20 20 69 66 28 20 70 2d 3e 73 68 6f 77       if( p->show
d5d0: 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20  Header ){.      
d5e0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
d5f0: 6f 75 74 2c 22 28 22 29 3b 0a 20 20 20 20 20 20  out,"(");.      
d600: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
d610: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
d620: 20 20 20 69 66 28 20 69 3e 30 20 29 20 72 61 77     if( i>0 ) raw
d630: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
d640: 22 2c 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ",");.          
d650: 69 66 28 20 71 75 6f 74 65 43 68 61 72 28 61 7a  if( quoteChar(az
d660: 43 6f 6c 5b 69 5d 29 20 29 7b 0a 20 20 20 20 20  Col[i]) ){.     
d670: 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 20 3d         char *z =
d680: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
d690: 28 22 5c 22 25 77 5c 22 22 2c 20 61 7a 43 6f 6c  ("\"%w\"", azCol
d6a0: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [i]);.          
d6b0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
d6c0: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a  >out, "%s", z);.
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d6e0: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 20  te3_free(z);.   
d6f0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
d700: 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
d710: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
d720: 22 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20  ", azCol[i]);.  
d730: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
d740: 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f    }.        raw_
d750: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 29  printf(p->out,")
d760: 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
d770: 20 20 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20    p->cnt++;.    
d780: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
d790: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
d7a0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
d7b0: 75 74 2c 20 69 3e 30 20 3f 20 22 2c 22 20 3a 20  ut, i>0 ? "," : 
d7c0: 22 20 56 41 4c 55 45 53 28 22 29 3b 0a 20 20 20  " VALUES(");.   
d7d0: 20 20 20 20 20 69 66 28 20 28 61 7a 41 72 67 5b       if( (azArg[
d7e0: 69 5d 3d 3d 30 29 20 7c 7c 20 28 61 69 54 79 70  i]==0) || (aiTyp
d7f0: 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d  e && aiType[i]==
d800: 53 51 4c 49 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a  SQLITE_NULL) ){.
d810: 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
d820: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 4e 55  rintf(p->out,"NU
d830: 4c 4c 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  LL");.        }e
d840: 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26  lse if( aiType &
d850: 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c  & aiType[i]==SQL
d860: 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  ITE_TEXT ){.    
d870: 20 20 20 20 20 20 69 66 28 20 53 68 65 6c 6c 48        if( ShellH
d880: 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f  asFlag(p, SHFLG_
d890: 4e 65 77 6c 69 6e 65 73 29 20 29 7b 0a 20 20 20  Newlines) ){.   
d8a0: 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f           output_
d8b0: 71 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70 2d  quoted_string(p-
d8c0: 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  >out, azArg[i]);
d8d0: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
d8e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 75  {.            ou
d8f0: 74 70 75 74 5f 71 75 6f 74 65 64 5f 65 73 63 61  tput_quoted_esca
d900: 70 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75  ped_string(p->ou
d910: 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20  t, azArg[i]);.  
d920: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
d930: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79    }else if( aiTy
d940: 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d  pe && aiType[i]=
d950: 3d 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20  =SQLITE_INTEGER 
d960: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
d970: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
d980: 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  "%s", azArg[i]);
d990: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69  .        }else i
d9a0: 66 28 20 61 69 54 79 70 65 20 26 26 20 61 69 54  f( aiType && aiT
d9b0: 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 46  ype[i]==SQLITE_F
d9c0: 4c 4f 41 54 20 29 7b 0a 20 20 20 20 20 20 20 20  LOAT ){.        
d9d0: 20 20 63 68 61 72 20 7a 5b 35 30 5d 3b 0a 20 20    char z[50];.  
d9e0: 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72          double r
d9f0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
da00: 6e 5f 64 6f 75 62 6c 65 28 70 2d 3e 70 53 74 6d  n_double(p->pStm
da10: 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20  t, i);.         
da20: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
da30: 66 28 35 30 2c 7a 2c 22 25 21 2e 32 30 67 22 2c  f(50,z,"%!.20g",
da40: 20 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72   r);.          r
da50: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
da60: 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  , "%s", z);.    
da70: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69      }else if( ai
da80: 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69  Type && aiType[i
da90: 5d 3d 3d 53 51 4c 49 54 45 5f 42 4c 4f 42 20 26  ]==SQLITE_BLOB &
daa0: 26 20 70 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20  & p->pStmt ){.  
dab0: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 76 6f          const vo
dac0: 69 64 20 2a 70 42 6c 6f 62 20 3d 20 73 71 6c 69  id *pBlob = sqli
dad0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28  te3_column_blob(
dae0: 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20  p->pStmt, i);.  
daf0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 42 6c 6f          int nBlo
db00: 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  b = sqlite3_colu
db10: 6d 6e 5f 62 79 74 65 73 28 70 2d 3e 70 53 74 6d  mn_bytes(p->pStm
db20: 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20  t, i);.         
db30: 20 6f 75 74 70 75 74 5f 68 65 78 5f 62 6c 6f 62   output_hex_blob
db40: 28 70 2d 3e 6f 75 74 2c 20 70 42 6c 6f 62 2c 20  (p->out, pBlob, 
db50: 6e 42 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20  nBlob);.        
db60: 7d 65 6c 73 65 20 69 66 28 20 69 73 4e 75 6d 62  }else if( isNumb
db70: 65 72 28 61 7a 41 72 67 5b 69 5d 2c 20 30 29 20  er(azArg[i], 0) 
db80: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
db90: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
dba0: 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  "%s", azArg[i]);
dbb0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69  .        }else i
dbc0: 66 28 20 53 68 65 6c 6c 48 61 73 46 6c 61 67 28  f( ShellHasFlag(
dbd0: 70 2c 20 53 48 46 4c 47 5f 4e 65 77 6c 69 6e 65  p, SHFLG_Newline
dbe0: 73 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  s) ){.          
dbf0: 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74  output_quoted_st
dc00: 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41  ring(p->out, azA
dc10: 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[i]);.        
dc20: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
dc30: 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 65   output_quoted_e
dc40: 73 63 61 70 65 64 5f 73 74 72 69 6e 67 28 70 2d  scaped_string(p-
dc50: 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  >out, azArg[i]);
dc60: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
dc70: 20 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69   }.      raw_pri
dc80: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 29 3b 5c 6e  ntf(p->out,");\n
dc90: 22 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ");.      break;
dca0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
dcb0: 4d 4f 44 45 5f 51 75 6f 74 65 3a 20 7b 0a 20 20  MODE_Quote: {.  
dcc0: 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30      if( azArg==0
dcd0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
dce0: 69 66 28 20 70 2d 3e 63 6e 74 3d 3d 30 20 26 26  if( p->cnt==0 &&
dcf0: 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29   p->showHeader )
dd00: 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d  {.        for(i=
dd10: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
dd20: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
dd30: 3e 30 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28  >0 ) raw_printf(
dd40: 70 2d 3e 6f 75 74 2c 20 22 2c 22 29 3b 0a 20 20  p->out, ",");.  
dd50: 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71          output_q
dd60: 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e  uoted_string(p->
dd70: 6f 75 74 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a  out, azCol[i]);.
dd80: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
dd90: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
dda0: 6f 75 74 2c 22 5c 6e 22 29 3b 0a 20 20 20 20 20  out,"\n");.     
ddb0: 20 7d 0a 20 20 20 20 20 20 70 2d 3e 63 6e 74 2b   }.      p->cnt+
ddc0: 2b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  +;.      for(i=0
ddd0: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
dde0: 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 30 20          if( i>0 
ddf0: 29 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e  ) raw_printf(p->
de00: 6f 75 74 2c 20 22 2c 22 29 3b 0a 20 20 20 20 20  out, ",");.     
de10: 20 20 20 69 66 28 20 28 61 7a 41 72 67 5b 69 5d     if( (azArg[i]
de20: 3d 3d 30 29 20 7c 7c 20 28 61 69 54 79 70 65 20  ==0) || (aiType 
de30: 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51  && aiType[i]==SQ
de40: 4c 49 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20  LITE_NULL) ){.  
de50: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
de60: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c  ntf(p->out,"NULL
de70: 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ");.        }els
de80: 65 20 69 66 28 20 61 69 54 79 70 65 20 26 26 20  e if( aiType && 
de90: 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54  aiType[i]==SQLIT
dea0: 45 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20  E_TEXT ){.      
deb0: 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65      output_quote
dec0: 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  d_string(p->out,
ded0: 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20   azArg[i]);.    
dee0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69      }else if( ai
def0: 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69  Type && aiType[i
df00: 5d 3d 3d 53 51 4c 49 54 45 5f 49 4e 54 45 47 45  ]==SQLITE_INTEGE
df10: 52 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  R ){.          u
df20: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
df30: 74 2c 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d  t,"%s", azArg[i]
df40: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
df50: 20 69 66 28 20 61 69 54 79 70 65 20 26 26 20 61   if( aiType && a
df60: 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45  iType[i]==SQLITE
df70: 5f 46 4c 4f 41 54 20 29 7b 0a 20 20 20 20 20 20  _FLOAT ){.      
df80: 20 20 20 20 63 68 61 72 20 7a 5b 35 30 5d 3b 0a      char z[50];.
df90: 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
dfa0: 20 72 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c   r = sqlite3_col
dfb0: 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 2d 3e 70 53  umn_double(p->pS
dfc0: 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20  tmt, i);.       
dfd0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
dfe0: 6e 74 66 28 35 30 2c 7a 2c 22 25 21 2e 32 30 67  ntf(50,z,"%!.20g
dff0: 22 2c 20 72 29 3b 0a 20 20 20 20 20 20 20 20 20  ", r);.         
e000: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
e010: 75 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20  ut, "%s", z);.  
e020: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
e030: 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65  aiType && aiType
e040: 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 42 4c 4f 42  [i]==SQLITE_BLOB
e050: 20 26 26 20 70 2d 3e 70 53 74 6d 74 20 29 7b 0a   && p->pStmt ){.
e060: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
e070: 76 6f 69 64 20 2a 70 42 6c 6f 62 20 3d 20 73 71  void *pBlob = sq
e080: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
e090: 62 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b 0a  b(p->pStmt, i);.
e0a0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 42            int nB
e0b0: 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  lob = sqlite3_co
e0c0: 6c 75 6d 6e 5f 62 79 74 65 73 28 70 2d 3e 70 53  lumn_bytes(p->pS
e0d0: 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20  tmt, i);.       
e0e0: 20 20 20 6f 75 74 70 75 74 5f 68 65 78 5f 62 6c     output_hex_bl
e0f0: 6f 62 28 70 2d 3e 6f 75 74 2c 20 70 42 6c 6f 62  ob(p->out, pBlob
e100: 2c 20 6e 42 6c 6f 62 29 3b 0a 20 20 20 20 20 20  , nBlob);.      
e110: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 73 4e 75    }else if( isNu
e120: 6d 62 65 72 28 61 7a 41 72 67 5b 69 5d 2c 20 30  mber(azArg[i], 0
e130: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  ) ){.          u
e140: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
e150: 74 2c 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d  t,"%s", azArg[i]
e160: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
e170: 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70  {.          outp
e180: 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67  ut_quoted_string
e190: 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69  (p->out, azArg[i
e1a0: 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ]);.        }.  
e1b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 61 77 5f      }.      raw_
e1c0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 5c  printf(p->out,"\
e1d0: 6e 22 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  n");.      break
e1e0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
e1f0: 20 4d 4f 44 45 5f 41 73 63 69 69 3a 20 7b 0a 20   MODE_Ascii: {. 
e200: 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b       if( p->cnt+
e210: 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77 48  +==0 && p->showH
e220: 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20 20  eader ){.       
e230: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
e240: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
e250: 20 20 69 66 28 20 69 3e 30 20 29 20 75 74 66 38    if( i>0 ) utf8
e260: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
e270: 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  "%s", p->colSepa
e280: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  rator);.        
e290: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
e2a0: 3e 6f 75 74 2c 22 25 73 22 2c 61 7a 43 6f 6c 5b  >out,"%s",azCol[
e2b0: 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20  i] ? azCol[i] : 
e2c0: 22 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  "");.        }. 
e2d0: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
e2e0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
e2f0: 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72   p->rowSeparator
e300: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
e310: 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20   if( azArg==0 ) 
e320: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72  break;.      for
e330: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
e340: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
e350: 69 3e 30 20 29 20 75 74 66 38 5f 70 72 69 6e 74  i>0 ) utf8_print
e360: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
e370: 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29  p->colSeparator)
e380: 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  ;.        utf8_p
e390: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73  rintf(p->out,"%s
e3a0: 22 2c 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41  ",azArg[i] ? azA
e3b0: 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56  rg[i] : p->nullV
e3c0: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  alue);.      }. 
e3d0: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
e3e0: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
e3f0: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
e400: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
e410: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
e420: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69   0;.}../*.** Thi
e430: 73 20 69 73 20 74 68 65 20 63 61 6c 6c 62 61 63  s is the callbac
e440: 6b 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 74  k routine that t
e450: 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
e460: 79 0a 2a 2a 20 69 6e 76 6f 6b 65 73 20 66 6f 72  y.** invokes for
e470: 20 65 61 63 68 20 72 6f 77 20 6f 66 20 61 20 71   each row of a q
e480: 75 65 72 79 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a  uery result..*/.
e490: 73 74 61 74 69 63 20 69 6e 74 20 63 61 6c 6c 62  static int callb
e4a0: 61 63 6b 28 76 6f 69 64 20 2a 70 41 72 67 2c 20  ack(void *pArg, 
e4b0: 69 6e 74 20 6e 41 72 67 2c 20 63 68 61 72 20 2a  int nArg, char *
e4c0: 2a 61 7a 41 72 67 2c 20 63 68 61 72 20 2a 2a 61  *azArg, char **a
e4d0: 7a 43 6f 6c 29 7b 0a 20 20 2f 2a 20 73 69 6e 63  zCol){.  /* sinc
e4e0: 65 20 77 65 20 64 6f 6e 27 74 20 68 61 76 65 20  e we don't have 
e4f0: 74 79 70 65 20 69 6e 66 6f 2c 20 63 61 6c 6c 20  type info, call 
e500: 74 68 65 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61  the shell_callba
e510: 63 6b 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 76  ck with a NULL v
e520: 61 6c 75 65 20 2a 2f 0a 20 20 72 65 74 75 72 6e  alue */.  return
e530: 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 28   shell_callback(
e540: 70 41 72 67 2c 20 6e 41 72 67 2c 20 61 7a 41 72  pArg, nArg, azAr
e550: 67 2c 20 61 7a 43 6f 6c 2c 20 4e 55 4c 4c 29 3b  g, azCol, NULL);
e560: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69  .}../*.** This i
e570: 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72  s the callback r
e580: 6f 75 74 69 6e 65 20 66 72 6f 6d 20 73 71 6c 69  outine from sqli
e590: 74 65 33 5f 65 78 65 63 28 29 20 74 68 61 74 20  te3_exec() that 
e5a0: 61 70 70 65 6e 64 73 20 61 6c 6c 0a 2a 2a 20 6f  appends all.** o
e5b0: 75 74 70 75 74 20 6f 6e 74 6f 20 74 68 65 20 65  utput onto the e
e5c0: 6e 64 20 6f 66 20 61 20 53 68 65 6c 6c 54 65 78  nd of a ShellTex
e5d0: 74 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61  t object..*/.sta
e5e0: 74 69 63 20 69 6e 74 20 63 61 70 74 75 72 65 4f  tic int captureO
e5f0: 75 74 70 75 74 43 61 6c 6c 62 61 63 6b 28 76 6f  utputCallback(vo
e600: 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20 6e 41  id *pArg, int nA
e610: 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41 72 67  rg, char **azArg
e620: 2c 20 63 68 61 72 20 2a 2a 61 7a 29 7b 0a 20 20  , char **az){.  
e630: 53 68 65 6c 6c 54 65 78 74 20 2a 70 20 3d 20 28  ShellText *p = (
e640: 53 68 65 6c 6c 54 65 78 74 2a 29 70 41 72 67 3b  ShellText*)pArg;
e650: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 55 4e 55 53  .  int i;.  UNUS
e660: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61 7a 29  ED_PARAMETER(az)
e670: 3b 0a 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30  ;.  if( azArg==0
e680: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 69   ) return 0;.  i
e690: 66 28 20 70 2d 3e 6e 20 29 20 61 70 70 65 6e 64  f( p->n ) append
e6a0: 54 65 78 74 28 70 2c 20 22 7c 22 2c 20 30 29 3b  Text(p, "|", 0);
e6b0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41  .  for(i=0; i<nA
e6c0: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  rg; i++){.    if
e6d0: 28 20 69 20 29 20 61 70 70 65 6e 64 54 65 78 74  ( i ) appendText
e6e0: 28 70 2c 20 22 2c 22 2c 20 30 29 3b 0a 20 20 20  (p, ",", 0);.   
e6f0: 20 69 66 28 20 61 7a 41 72 67 5b 69 5d 20 29 20   if( azArg[i] ) 
e700: 61 70 70 65 6e 64 54 65 78 74 28 70 2c 20 61 7a  appendText(p, az
e710: 41 72 67 5b 69 5d 2c 20 30 29 3b 0a 20 20 7d 0a  Arg[i], 0);.  }.
e720: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
e730: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 6e  *.** Generate an
e740: 20 61 70 70 72 6f 70 72 69 61 74 65 20 53 45 4c   appropriate SEL
e750: 46 54 45 53 54 20 74 61 62 6c 65 20 69 6e 20 74  FTEST table in t
e760: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
e770: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
e780: 20 63 72 65 61 74 65 53 65 6c 66 74 65 73 74 54   createSelftestT
e790: 61 62 6c 65 28 53 68 65 6c 6c 53 74 61 74 65 20  able(ShellState 
e7a0: 2a 70 29 7b 0a 20 20 63 68 61 72 20 2a 7a 45 72  *p){.  char *zEr
e7b0: 72 4d 73 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69  rMsg = 0;.  sqli
e7c0: 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 0a  te3_exec(p->db,.
e7d0: 20 20 20 20 22 53 41 56 45 50 4f 49 4e 54 20 73      "SAVEPOINT s
e7e0: 65 6c 66 74 65 73 74 5f 69 6e 69 74 3b 5c 6e 22  elftest_init;\n"
e7f0: 0a 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  .    "CREATE TAB
e800: 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53  LE IF NOT EXISTS
e810: 20 73 65 6c 66 74 65 73 74 28 5c 6e 22 0a 20 20   selftest(\n".  
e820: 20 20 22 20 20 74 6e 6f 20 49 4e 54 45 47 45 52    "  tno INTEGER
e830: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 5c 6e 22   PRIMARY KEY,\n"
e840: 20 20 20 2f 2a 20 54 65 73 74 20 6e 75 6d 62 65     /* Test numbe
e850: 72 20 2a 2f 0a 20 20 20 20 22 20 20 6f 70 20 54  r */.    "  op T
e860: 45 58 54 2c 5c 6e 22 20 20 20 20 20 20 20 20 20  EXT,\n"         
e870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
e880: 72 61 74 6f 72 3a 20 20 6d 65 6d 6f 20 72 75 6e  rator:  memo run
e890: 20 2a 2f 0a 20 20 20 20 22 20 20 63 6d 64 20 54   */.    "  cmd T
e8a0: 45 58 54 2c 5c 6e 22 20 20 20 20 20 20 20 20 20  EXT,\n"         
e8b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 6d           /* Comm
e8c0: 61 6e 64 20 74 65 78 74 20 2a 2f 0a 20 20 20 20  and text */.    
e8d0: 22 20 20 61 6e 73 20 54 45 58 54 5c 6e 22 20 20  "  ans TEXT\n"  
e8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8f0: 20 2f 2a 20 44 65 73 69 72 65 64 20 61 6e 73 77   /* Desired answ
e900: 65 72 20 2a 2f 0a 20 20 20 20 22 29 3b 22 0a 20  er */.    ");". 
e910: 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 20     "CREATE TEMP 
e920: 54 41 42 4c 45 20 5b 5f 73 68 65 6c 6c 24 73 65  TABLE [_shell$se
e930: 6c 66 5d 28 6f 70 2c 63 6d 64 2c 61 6e 73 29 3b  lf](op,cmd,ans);
e940: 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20  \n".    "INSERT 
e950: 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c  INTO [_shell$sel
e960: 66 5d 28 72 6f 77 69 64 2c 6f 70 2c 63 6d 64 29  f](rowid,op,cmd)
e970: 5c 6e 22 0a 20 20 20 20 22 20 20 56 41 4c 55 45  \n".    "  VALUE
e980: 53 28 63 6f 61 6c 65 73 63 65 28 28 53 45 4c 45  S(coalesce((SELE
e990: 43 54 20 28 6d 61 78 28 74 6e 6f 29 2b 31 30 30  CT (max(tno)+100
e9a0: 29 2f 31 30 20 46 52 4f 4d 20 73 65 6c 66 74 65  )/10 FROM selfte
e9b0: 73 74 29 2c 31 30 29 2c 5c 6e 22 0a 20 20 20 20  st),10),\n".    
e9c0: 22 20 20 20 20 20 20 20 20 20 27 6d 65 6d 6f 27  "         'memo'
e9d0: 2c 27 54 65 73 74 73 20 67 65 6e 65 72 61 74 65  ,'Tests generate
e9e0: 64 20 62 79 20 2d 2d 69 6e 69 74 27 29 3b 5c 6e  d by --init');\n
e9f0: 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  ".    "INSERT IN
ea00: 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d  TO [_shell$self]
ea10: 5c 6e 22 0a 20 20 20 20 22 20 20 53 45 4c 45 43  \n".    "  SELEC
ea20: 54 20 27 72 75 6e 27 2c 5c 6e 22 0a 20 20 20 20  T 'run',\n".    
ea30: 22 20 20 20 20 27 53 45 4c 45 43 54 20 68 65 78  "    'SELECT hex
ea40: 28 73 68 61 33 5f 71 75 65 72 79 28 27 27 53 45  (sha3_query(''SE
ea50: 4c 45 43 54 20 74 79 70 65 2c 6e 61 6d 65 2c 74  LECT type,name,t
ea60: 62 6c 5f 6e 61 6d 65 2c 73 71 6c 20 22 0a 20 20  bl_name,sql ".  
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
ea90: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
eaa0: 65 72 20 4f 52 44 45 52 20 42 59 20 32 27 27 2c  er ORDER BY 2'',
eab0: 32 32 34 29 29 27 2c 5c 6e 22 0a 20 20 20 20 22  224))',\n".    "
eac0: 20 20 20 20 68 65 78 28 73 68 61 33 5f 71 75 65      hex(sha3_que
ead0: 72 79 28 27 53 45 4c 45 43 54 20 74 79 70 65 2c  ry('SELECT type,
eae0: 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c 73 71  name,tbl_name,sq
eaf0: 6c 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  l ".            
eb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
eb10: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
eb20: 72 20 4f 52 44 45 52 20 42 59 20 32 27 2c 32 32  r ORDER BY 2',22
eb30: 34 29 29 3b 5c 6e 22 0a 20 20 20 20 22 49 4e 53  4));\n".    "INS
eb40: 45 52 54 20 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c  ERT INTO [_shell
eb50: 24 73 65 6c 66 5d 5c 6e 22 0a 20 20 20 20 22 20  $self]\n".    " 
eb60: 20 53 45 4c 45 43 54 20 27 72 75 6e 27 2c 22 0a   SELECT 'run',".
eb70: 20 20 20 20 22 20 20 20 20 27 53 45 4c 45 43 54      "    'SELECT
eb80: 20 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28   hex(sha3_query(
eb90: 27 27 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  ''SELECT * FROM 
eba0: 5c 22 27 20 7c 7c 22 0a 20 20 20 20 22 20 20 20  \"' ||".    "   
ebb0: 20 20 20 20 20 70 72 69 6e 74 66 28 27 25 77 27       printf('%w'
ebc0: 2c 6e 61 6d 65 29 20 7c 7c 20 27 5c 22 20 4e 4f  ,name) || '\" NO
ebd0: 54 20 49 4e 44 45 58 45 44 27 27 2c 32 32 34 29  T INDEXED'',224)
ebe0: 29 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  )',\n".    "    
ebf0: 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 70  hex(sha3_query(p
ec00: 72 69 6e 74 66 28 27 53 45 4c 45 43 54 20 2a 20  rintf('SELECT * 
ec10: 46 52 4f 4d 20 5c 22 25 77 5c 22 20 4e 4f 54 20  FROM \"%w\" NOT 
ec20: 49 4e 44 45 58 45 44 27 2c 6e 61 6d 65 29 2c 32  INDEXED',name),2
ec30: 32 34 29 29 5c 6e 22 0a 20 20 20 20 22 20 20 46  24))\n".    "  F
ec40: 52 4f 4d 20 28 5c 6e 22 0a 20 20 20 20 22 20 20  ROM (\n".    "  
ec50: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
ec60: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
ec70: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 57 48  \n".    "     WH
ec80: 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
ec90: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  \n".    "       
eca0: 41 4e 44 20 6e 61 6d 65 3c 3e 27 73 65 6c 66 74  AND name<>'selft
ecb0: 65 73 74 27 5c 6e 22 0a 20 20 20 20 22 20 20 20  est'\n".    "   
ecc0: 20 20 20 20 41 4e 44 20 63 6f 61 6c 65 73 63 65      AND coalesce
ecd0: 28 72 6f 6f 74 70 61 67 65 2c 30 29 3e 30 5c 6e  (rootpage,0)>0\n
ece0: 22 0a 20 20 20 20 22 20 20 29 5c 6e 22 0a 20 20  ".    "  )\n".  
ecf0: 20 20 22 20 4f 52 44 45 52 20 42 59 20 6e 61 6d    " ORDER BY nam
ed00: 65 3b 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45 52  e;\n".    "INSER
ed10: 54 20 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24 73  T INTO [_shell$s
ed20: 65 6c 66 5d 5c 6e 22 0a 20 20 20 20 22 20 20 56  elf]\n".    "  V
ed30: 41 4c 55 45 53 28 27 72 75 6e 27 2c 27 50 52 41  ALUES('run','PRA
ed40: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
ed50: 65 63 6b 27 2c 27 6f 6b 27 29 3b 5c 6e 22 0a 20  eck','ok');\n". 
ed60: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
ed70: 73 65 6c 66 74 65 73 74 28 74 6e 6f 2c 6f 70 2c  selftest(tno,op,
ed80: 63 6d 64 2c 61 6e 73 29 22 0a 20 20 20 20 22 20  cmd,ans)".    " 
ed90: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2a 31 30   SELECT rowid*10
eda0: 2c 6f 70 2c 63 6d 64 2c 61 6e 73 20 46 52 4f 4d  ,op,cmd,ans FROM
edb0: 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 3b 5c   [_shell$self];\
edc0: 6e 22 0a 20 20 20 20 22 44 52 4f 50 20 54 41 42  n".    "DROP TAB
edd0: 4c 45 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d  LE [_shell$self]
ede0: 3b 22 0a 20 20 20 20 2c 30 2c 30 2c 26 7a 45 72  ;".    ,0,0,&zEr
edf0: 72 4d 73 67 29 3b 0a 20 20 69 66 28 20 7a 45 72  rMsg);.  if( zEr
ee00: 72 4d 73 67 20 29 7b 0a 20 20 20 20 75 74 66 38  rMsg ){.    utf8
ee10: 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
ee20: 22 53 45 4c 46 54 45 53 54 20 69 6e 69 74 69 61  "SELFTEST initia
ee30: 6c 69 7a 61 74 69 6f 6e 20 66 61 69 6c 75 72 65  lization failure
ee40: 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  : %s\n", zErrMsg
ee50: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  );.    sqlite3_f
ee60: 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20  ree(zErrMsg);.  
ee70: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63  }.  sqlite3_exec
ee80: 28 70 2d 3e 64 62 2c 20 22 52 45 4c 45 41 53 45  (p->db, "RELEASE
ee90: 20 73 65 6c 66 74 65 73 74 5f 69 6e 69 74 22 2c   selftest_init",
eea0: 30 2c 30 2c 30 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  0,0,0);.}.../*.*
eeb0: 2a 20 53 65 74 20 74 68 65 20 64 65 73 74 69 6e  * Set the destin
eec0: 61 74 69 6f 6e 20 74 61 62 6c 65 20 66 69 65 6c  ation table fiel
eed0: 64 20 6f 66 20 74 68 65 20 53 68 65 6c 6c 53 74  d of the ShellSt
eee0: 61 74 65 20 73 74 72 75 63 74 75 72 65 20 74 6f  ate structure to
eef0: 0a 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  .** the name of 
ef00: 74 68 65 20 74 61 62 6c 65 20 67 69 76 65 6e 2e  the table given.
ef10: 20 20 45 73 63 61 70 65 20 61 6e 79 20 71 75 6f    Escape any quo
ef20: 74 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  te characters in
ef30: 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6e 61   the.** table na
ef40: 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  me..*/.static vo
ef50: 69 64 20 73 65 74 5f 74 61 62 6c 65 5f 6e 61 6d  id set_table_nam
ef60: 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c  e(ShellState *p,
ef70: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
ef80: 6d 65 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6e 3b  me){.  int i, n;
ef90: 0a 20 20 63 68 61 72 20 63 51 75 6f 74 65 3b 0a  .  char cQuote;.
efa0: 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66    char *z;..  if
efb0: 28 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20  ( p->zDestTable 
efc0: 29 7b 0a 20 20 20 20 66 72 65 65 28 70 2d 3e 7a  ){.    free(p->z
efd0: 44 65 73 74 54 61 62 6c 65 29 3b 0a 20 20 20 20  DestTable);.    
efe0: 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d 20  p->zDestTable = 
eff0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 4e 61  0;.  }.  if( zNa
f000: 6d 65 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a  me==0 ) return;.
f010: 20 20 63 51 75 6f 74 65 20 3d 20 71 75 6f 74 65    cQuote = quote
f020: 43 68 61 72 28 7a 4e 61 6d 65 29 3b 0a 20 20 6e  Char(zName);.  n
f030: 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 4e 61 6d   = strlen30(zNam
f040: 65 29 3b 0a 20 20 69 66 28 20 63 51 75 6f 74 65  e);.  if( cQuote
f050: 20 29 20 6e 20 2b 3d 20 6e 2b 32 3b 0a 20 20 7a   ) n += n+2;.  z
f060: 20 3d 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65   = p->zDestTable
f070: 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 2b 31 20 29   = malloc( n+1 )
f080: 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  ;.  if( z==0 ){.
f090: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
f0a0: 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 6f 75  tderr,"Error: ou
f0b0: 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b  t of memory\n");
f0c0: 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20  .    exit(1);.  
f0d0: 7d 0a 20 20 6e 20 3d 20 30 3b 0a 20 20 69 66 28  }.  n = 0;.  if(
f0e0: 20 63 51 75 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d   cQuote ) z[n++]
f0f0: 20 3d 20 63 51 75 6f 74 65 3b 0a 20 20 66 6f 72   = cQuote;.  for
f100: 28 69 3d 30 3b 20 7a 4e 61 6d 65 5b 69 5d 3b 20  (i=0; zName[i]; 
f110: 69 2b 2b 29 7b 0a 20 20 20 20 7a 5b 6e 2b 2b 5d  i++){.    z[n++]
f120: 20 3d 20 7a 4e 61 6d 65 5b 69 5d 3b 0a 20 20 20   = zName[i];.   
f130: 20 69 66 28 20 7a 4e 61 6d 65 5b 69 5d 3d 3d 63   if( zName[i]==c
f140: 51 75 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d  Quote ) z[n++] =
f150: 20 63 51 75 6f 74 65 3b 0a 20 20 7d 0a 20 20 69   cQuote;.  }.  i
f160: 66 28 20 63 51 75 6f 74 65 20 29 20 7a 5b 6e 2b  f( cQuote ) z[n+
f170: 2b 5d 20 3d 20 63 51 75 6f 74 65 3b 0a 20 20 7a  +] = cQuote;.  z
f180: 5b 6e 5d 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a  [n] = 0;.}.../*.
f190: 2a 2a 20 45 78 65 63 75 74 65 20 61 20 71 75 65  ** Execute a que
f1a0: 72 79 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  ry statement tha
f1b0: 74 20 77 69 6c 6c 20 67 65 6e 65 72 61 74 65 20  t will generate 
f1c0: 53 51 4c 20 6f 75 74 70 75 74 2e 20 20 50 72 69  SQL output.  Pri
f1d0: 6e 74 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  nt.** the result
f1e0: 20 63 6f 6c 75 6d 6e 73 2c 20 63 6f 6d 6d 61 2d   columns, comma-
f1f0: 73 65 70 61 72 61 74 65 64 2c 20 6f 6e 20 61 20  separated, on a 
f200: 6c 69 6e 65 20 61 6e 64 20 74 68 65 6e 20 61 64  line and then ad
f210: 64 20 61 0a 2a 2a 20 73 65 6d 69 63 6f 6c 6f 6e  d a.** semicolon
f220: 20 74 65 72 6d 69 6e 61 74 6f 72 20 74 6f 20 74   terminator to t
f230: 68 65 20 65 6e 64 20 6f 66 20 74 68 61 74 20 6c  he end of that l
f240: 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ine..**.** If th
f250: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
f260: 6d 6e 73 20 69 73 20 31 20 61 6e 64 20 74 68 61  mns is 1 and tha
f270: 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  t column contain
f280: 73 20 74 65 78 74 20 22 2d 2d 22 0a 2a 2a 20 74  s text "--".** t
f290: 68 65 6e 20 77 72 69 74 65 20 74 68 65 20 73 65  hen write the se
f2a0: 6d 69 63 6f 6c 6f 6e 20 6f 6e 20 61 20 73 65 70  micolon on a sep
f2b0: 61 72 61 74 65 20 6c 69 6e 65 2e 20 20 54 68 61  arate line.  Tha
f2c0: 74 20 77 61 79 2c 20 69 66 20 61 0a 2a 2a 20 22  t way, if a.** "
f2d0: 2d 2d 22 20 63 6f 6d 6d 65 6e 74 20 6f 63 63 75  --" comment occu
f2e0: 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  rs at the end of
f2f0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2c 20   the statement, 
f300: 74 68 65 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 77  the comment.** w
f310: 6f 6e 27 74 20 63 6f 6e 73 75 6d 65 20 74 68 65  on't consume the
f320: 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 65 72 6d 69   semicolon termi
f330: 6e 61 74 6f 72 2e 0a 2a 2f 0a 73 74 61 74 69 63  nator..*/.static
f340: 20 69 6e 74 20 72 75 6e 5f 74 61 62 6c 65 5f 64   int run_table_d
f350: 75 6d 70 5f 71 75 65 72 79 28 0a 20 20 53 68 65  ump_query(.  She
f360: 6c 6c 53 74 61 74 65 20 2a 70 2c 20 20 20 20 20  llState *p,     
f370: 20 20 20 20 20 20 2f 2a 20 51 75 65 72 79 20 63        /* Query c
f380: 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73  ontext */.  cons
f390: 74 20 63 68 61 72 20 2a 7a 53 65 6c 65 63 74 2c  t char *zSelect,
f3a0: 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73       /* SELECT s
f3b0: 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78 74 72  tatement to extr
f3c0: 61 63 74 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20  act content */. 
f3d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
f3e0: 72 73 74 52 6f 77 20 20 20 20 2f 2a 20 50 72 69  rstRow    /* Pri
f3f0: 6e 74 20 62 65 66 6f 72 65 20 66 69 72 73 74 20  nt before first 
f400: 72 6f 77 2c 20 69 66 20 6e 6f 74 20 4e 55 4c 4c  row, if not NULL
f410: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
f420: 5f 73 74 6d 74 20 2a 70 53 65 6c 65 63 74 3b 0a  _stmt *pSelect;.
f430: 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
f440: 6e 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20 69  nResult;.  int i
f450: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
f460: 7a 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  z;.  rc = sqlite
f470: 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e  3_prepare_v2(p->
f480: 64 62 2c 20 7a 53 65 6c 65 63 74 2c 20 2d 31 2c  db, zSelect, -1,
f490: 20 26 70 53 65 6c 65 63 74 2c 20 30 29 3b 0a 20   &pSelect, 0);. 
f4a0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
f4b0: 4f 4b 20 7c 7c 20 21 70 53 65 6c 65 63 74 20 29  OK || !pSelect )
f4c0: 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  {.    utf8_print
f4d0: 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a  f(p->out, "/****
f4e0: 20 45 52 52 4f 52 3a 20 28 25 64 29 20 25 73 20   ERROR: (%d) %s 
f4f0: 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20  *****/\n", rc,. 
f500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f510: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d  qlite3_errmsg(p-
f520: 3e 64 62 29 29 3b 0a 20 20 20 20 69 66 28 20 28  >db));.    if( (
f530: 72 63 26 30 78 66 66 29 21 3d 53 51 4c 49 54 45  rc&0xff)!=SQLITE
f540: 5f 43 4f 52 52 55 50 54 20 29 20 70 2d 3e 6e 45  _CORRUPT ) p->nE
f550: 72 72 2b 2b 3b 0a 20 20 20 20 72 65 74 75 72 6e  rr++;.    return
f560: 20 72 63 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20   rc;.  }.  rc = 
f570: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 65  sqlite3_step(pSe
f580: 6c 65 63 74 29 3b 0a 20 20 6e 52 65 73 75 6c 74  lect);.  nResult
f590: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
f5a0: 6e 5f 63 6f 75 6e 74 28 70 53 65 6c 65 63 74 29  n_count(pSelect)
f5b0: 3b 0a 20 20 77 68 69 6c 65 28 20 72 63 3d 3d 53  ;.  while( rc==S
f5c0: 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20  QLITE_ROW ){.   
f5d0: 20 69 66 28 20 7a 46 69 72 73 74 52 6f 77 20 29   if( zFirstRow )
f5e0: 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
f5f0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
f600: 2c 20 7a 46 69 72 73 74 52 6f 77 29 3b 0a 20 20  , zFirstRow);.  
f610: 20 20 20 20 7a 46 69 72 73 74 52 6f 77 20 3d 20      zFirstRow = 
f620: 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 20 3d  0;.    }.    z =
f630: 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
f640: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
f650: 74 28 70 53 65 6c 65 63 74 2c 20 30 29 3b 0a 20  t(pSelect, 0);. 
f660: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
f670: 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 29 3b  ->out, "%s", z);
f680: 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c  .    for(i=1; i<
f690: 6e 52 65 73 75 6c 74 3b 20 69 2b 2b 29 7b 0a 20  nResult; i++){. 
f6a0: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
f6b0: 28 70 2d 3e 6f 75 74 2c 20 22 2c 25 73 22 2c 20  (p->out, ",%s", 
f6c0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
f6d0: 65 78 74 28 70 53 65 6c 65 63 74 2c 20 69 29 29  ext(pSelect, i))
f6e0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
f6f0: 7a 3d 3d 30 20 29 20 7a 20 3d 20 22 22 3b 0a 20  z==0 ) z = "";. 
f700: 20 20 20 77 68 69 6c 65 28 20 7a 5b 30 5d 20 26     while( z[0] &
f710: 26 20 28 7a 5b 30 5d 21 3d 27 2d 27 20 7c 7c 20  & (z[0]!='-' || 
f720: 7a 5b 31 5d 21 3d 27 2d 27 29 20 29 20 7a 2b 2b  z[1]!='-') ) z++
f730: 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 20 29  ;.    if( z[0] )
f740: 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
f750: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 3b 5c  tf(p->out, "\n;\
f760: 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  n");.    }else{.
f770: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
f780: 28 70 2d 3e 6f 75 74 2c 20 22 3b 5c 6e 22 29 3b  (p->out, ";\n");
f790: 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20  .    }.    rc = 
f7a0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 65  sqlite3_step(pSe
f7b0: 6c 65 63 74 29 3b 0a 20 20 7d 0a 20 20 72 63 20  lect);.  }.  rc 
f7c0: 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
f7d0: 7a 65 28 70 53 65 6c 65 63 74 29 3b 0a 20 20 69  ze(pSelect);.  i
f7e0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
f7f0: 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
f800: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a  ntf(p->out, "/**
f810: 2a 2a 20 45 52 52 4f 52 3a 20 28 25 64 29 20 25  ** ERROR: (%d) %
f820: 73 20 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 72 63 2c  s *****/\n", rc,
f830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f840: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
f850: 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 69 66 28  p->db));.    if(
f860: 20 28 72 63 26 30 78 66 66 29 21 3d 53 51 4c 49   (rc&0xff)!=SQLI
f870: 54 45 5f 43 4f 52 52 55 50 54 20 29 20 70 2d 3e  TE_CORRUPT ) p->
f880: 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65  nErr++;.  }.  re
f890: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
f8a0: 2a 20 41 6c 6c 6f 63 61 74 65 20 73 70 61 63 65  * Allocate space
f8b0: 20 61 6e 64 20 73 61 76 65 20 6f 66 66 20 63 75   and save off cu
f8c0: 72 72 65 6e 74 20 65 72 72 6f 72 20 73 74 72 69  rrent error stri
f8d0: 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68  ng..*/.static ch
f8e0: 61 72 20 2a 73 61 76 65 5f 65 72 72 5f 6d 73 67  ar *save_err_msg
f8f0: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  (.  sqlite3 *db 
f900: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
f910: 74 61 62 61 73 65 20 74 6f 20 71 75 65 72 79 20  tabase to query 
f920: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6e 45 72 72  */.){.  int nErr
f930: 4d 73 67 20 3d 20 31 2b 73 74 72 6c 65 6e 33 30  Msg = 1+strlen30
f940: 28 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28  (sqlite3_errmsg(
f950: 64 62 29 29 3b 0a 20 20 63 68 61 72 20 2a 7a 45  db));.  char *zE
f960: 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 5f  rrMsg = sqlite3_
f970: 6d 61 6c 6c 6f 63 36 34 28 6e 45 72 72 4d 73 67  malloc64(nErrMsg
f980: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 4d 73 67  );.  if( zErrMsg
f990: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a   ){.    memcpy(z
f9a0: 45 72 72 4d 73 67 2c 20 73 71 6c 69 74 65 33 5f  ErrMsg, sqlite3_
f9b0: 65 72 72 6d 73 67 28 64 62 29 2c 20 6e 45 72 72  errmsg(db), nErr
f9c0: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Msg);.  }.  retu
f9d0: 72 6e 20 7a 45 72 72 4d 73 67 3b 0a 7d 0a 0a 23  rn zErrMsg;.}..#
f9e0: 69 66 64 65 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a  ifdef __linux__.
f9f0: 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f  /*.** Attempt to
fa00: 20 64 69 73 70 6c 61 79 20 49 2f 4f 20 73 74 61   display I/O sta
fa10: 74 73 20 6f 6e 20 4c 69 6e 75 78 20 75 73 69 6e  ts on Linux usin
fa20: 67 20 2f 70 72 6f 63 2f 50 49 44 2f 69 6f 0a 2a  g /proc/PID/io.*
fa30: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64 69  /.static void di
fa40: 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74 61 74  splayLinuxIoStat
fa50: 73 28 46 49 4c 45 20 2a 6f 75 74 29 7b 0a 20 20  s(FILE *out){.  
fa60: 46 49 4c 45 20 2a 69 6e 3b 0a 20 20 63 68 61 72  FILE *in;.  char
fa70: 20 7a 5b 32 30 30 5d 3b 0a 20 20 73 71 6c 69 74   z[200];.  sqlit
fa80: 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
fa90: 6f 66 28 7a 29 2c 20 7a 2c 20 22 2f 70 72 6f 63  of(z), z, "/proc
faa0: 2f 25 64 2f 69 6f 22 2c 20 67 65 74 70 69 64 28  /%d/io", getpid(
fab0: 29 29 3b 0a 20 20 69 6e 20 3d 20 66 6f 70 65 6e  ));.  in = fopen
fac0: 28 7a 2c 20 22 72 62 22 29 3b 0a 20 20 69 66 28  (z, "rb");.  if(
fad0: 20 69 6e 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b   in==0 ) return;
fae0: 0a 20 20 77 68 69 6c 65 28 20 66 67 65 74 73 28  .  while( fgets(
faf0: 7a 2c 20 73 69 7a 65 6f 66 28 7a 29 2c 20 69 6e  z, sizeof(z), in
fb00: 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74  )!=0 ){.    stat
fb10: 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
fb20: 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
fb30: 61 72 20 2a 7a 50 61 74 74 65 72 6e 3b 0a 20 20  ar *zPattern;.  
fb40: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
fb50: 7a 44 65 73 63 3b 0a 20 20 20 20 7d 20 61 54 72  zDesc;.    } aTr
fb60: 61 6e 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ans[] = {.      
fb70: 7b 20 22 72 63 68 61 72 3a 20 22 2c 20 20 20 20  { "rchar: ",    
fb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
fb90: 79 74 65 73 20 72 65 63 65 69 76 65 64 20 62 79  ytes received by
fba0: 20 72 65 61 64 28 29 3a 22 20 7d 2c 0a 20 20 20   read():" },.   
fbb0: 20 20 20 7b 20 22 77 63 68 61 72 3a 20 22 2c 20     { "wchar: ", 
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbd0: 20 22 42 79 74 65 73 20 73 65 6e 74 20 74 6f 20   "Bytes sent to 
fbe0: 77 72 69 74 65 28 29 3a 22 20 20 20 20 7d 2c 0a  write():"    },.
fbf0: 20 20 20 20 20 20 7b 20 22 73 79 73 63 72 3a 20        { "syscr: 
fc00: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
fc10: 20 20 20 20 22 52 65 61 64 28 29 20 73 79 73 74      "Read() syst
fc20: 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20 20 20  em calls:"      
fc30: 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73 79 73 63  },.      { "sysc
fc40: 77 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20 20  w: ",           
fc50: 20 20 20 20 20 20 20 22 57 72 69 74 65 28 29 20         "Write() 
fc60: 73 79 73 74 65 6d 20 63 61 6c 6c 73 3a 22 20 20  system calls:"  
fc70: 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 72     },.      { "r
fc80: 65 61 64 5f 62 79 74 65 73 3a 20 22 2c 20 20 20  ead_bytes: ",   
fc90: 20 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73            "Bytes
fca0: 20 72 65 61 64 20 66 72 6f 6d 20 73 74 6f 72 61   read from stora
fcb0: 67 65 3a 22 20 20 7d 2c 0a 20 20 20 20 20 20 7b  ge:"  },.      {
fcc0: 20 22 77 72 69 74 65 5f 62 79 74 65 73 3a 20 22   "write_bytes: "
fcd0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 22 42 79  ,            "By
fce0: 74 65 73 20 77 72 69 74 74 65 6e 20 74 6f 20 73  tes written to s
fcf0: 74 6f 72 61 67 65 3a 22 20 7d 2c 0a 20 20 20 20  torage:" },.    
fd00: 20 20 7b 20 22 63 61 6e 63 65 6c 6c 65 64 5f 77    { "cancelled_w
fd10: 72 69 74 65 5f 62 79 74 65 73 3a 20 22 2c 20 20  rite_bytes: ",  
fd20: 22 43 61 6e 63 65 6c 6c 65 64 20 77 72 69 74 65  "Cancelled write
fd30: 20 62 79 74 65 73 3a 22 20 20 20 20 7d 2c 0a 20   bytes:"    },. 
fd40: 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b     };.    int i;
fd50: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
fd60: 41 72 72 61 79 53 69 7a 65 28 61 54 72 61 6e 73  ArraySize(aTrans
fd70: 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  ); i++){.      i
fd80: 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28  nt n = strlen30(
fd90: 61 54 72 61 6e 73 5b 69 5d 2e 7a 50 61 74 74 65  aTrans[i].zPatte
fda0: 72 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73  rn);.      if( s
fdb0: 74 72 6e 63 6d 70 28 61 54 72 61 6e 73 5b 69 5d  trncmp(aTrans[i]
fdc0: 2e 7a 50 61 74 74 65 72 6e 2c 20 7a 2c 20 6e 29  .zPattern, z, n)
fdd0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75  ==0 ){.        u
fde0: 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  tf8_printf(out, 
fdf0: 22 25 2d 33 36 73 20 25 73 22 2c 20 61 54 72 61  "%-36s %s", aTra
fe00: 6e 73 5b 69 5d 2e 7a 44 65 73 63 2c 20 26 7a 5b  ns[i].zDesc, &z[
fe10: 6e 5d 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  n]);.        bre
fe20: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
fe30: 7d 0a 20 20 7d 0a 20 20 66 63 6c 6f 73 65 28 69  }.  }.  fclose(i
fe40: 6e 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  n);.}.#endif../*
fe50: 0a 2a 2a 20 44 69 73 70 6c 61 79 20 61 20 73 69  .** Display a si
fe60: 6e 67 6c 65 20 6c 69 6e 65 20 6f 66 20 73 74 61  ngle line of sta
fe70: 74 75 73 20 75 73 69 6e 67 20 36 34 2d 62 69 74  tus using 64-bit
fe80: 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 73 74 61 74   values..*/.stat
fe90: 69 63 20 76 6f 69 64 20 64 69 73 70 6c 61 79 53  ic void displayS
fea0: 74 61 74 4c 69 6e 65 28 0a 20 20 53 68 65 6c 6c  tatLine(.  Shell
feb0: 53 74 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20  State *p,       
fec0: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 68 65 6c       /* The shel
fed0: 6c 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63  l context */.  c
fee0: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 20 20 20  har *zLabel,    
fef0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 62 65           /* Labe
ff00: 6c 20 66 6f 72 20 74 68 69 73 20 6f 6e 65 20 6c  l for this one l
ff10: 69 6e 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ine */.  char *z
ff20: 46 6f 72 6d 61 74 2c 20 20 20 20 20 20 20 20 20  Format,         
ff30: 20 20 20 2f 2a 20 46 6f 72 6d 61 74 20 66 6f 72     /* Format for
ff40: 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20   the result */. 
ff50: 20 69 6e 74 20 69 53 74 61 74 75 73 43 74 72 6c   int iStatusCtrl
ff60: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ,          /* Wh
ff70: 69 63 68 20 73 74 61 74 75 73 20 74 6f 20 64 69  ich status to di
ff80: 73 70 6c 61 79 20 2a 2f 0a 20 20 69 6e 74 20 62  splay */.  int b
ff90: 52 65 73 65 74 20 20 20 20 20 20 20 20 20 20 20  Reset           
ffa0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
ffb0: 72 65 73 65 74 20 74 68 65 20 73 74 61 74 73 20  reset the stats 
ffc0: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  */.){.  sqlite3_
ffd0: 69 6e 74 36 34 20 69 43 75 72 20 3d 20 2d 31 3b  int64 iCur = -1;
ffe0: 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
fff0: 20 69 48 69 77 74 72 20 3d 20 2d 31 3b 0a 20 20   iHiwtr = -1;.  
10000 69 6e 74 20 69 2c 20 6e 50 65 72 63 65 6e 74 3b  int i, nPercent;
10010 0a 20 20 63 68 61 72 20 7a 4c 69 6e 65 5b 32 30  .  char zLine[20
10020 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  0];.  sqlite3_st
10030 61 74 75 73 36 34 28 69 53 74 61 74 75 73 43 74  atus64(iStatusCt
10040 72 6c 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77  rl, &iCur, &iHiw
10050 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 66  tr, bReset);.  f
10060 6f 72 28 69 3d 30 2c 20 6e 50 65 72 63 65 6e 74  or(i=0, nPercent
10070 3d 30 3b 20 7a 46 6f 72 6d 61 74 5b 69 5d 3b 20  =0; zFormat[i]; 
10080 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 46  i++){.    if( zF
10090 6f 72 6d 61 74 5b 69 5d 3d 3d 27 25 27 20 29 20  ormat[i]=='%' ) 
100a0 6e 50 65 72 63 65 6e 74 2b 2b 3b 0a 20 20 7d 0a  nPercent++;.  }.
100b0 20 20 69 66 28 20 6e 50 65 72 63 65 6e 74 3e 31    if( nPercent>1
100c0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
100d0 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
100e0 7a 4c 69 6e 65 29 2c 20 7a 4c 69 6e 65 2c 20 7a  zLine), zLine, z
100f0 46 6f 72 6d 61 74 2c 20 69 43 75 72 2c 20 69 48  Format, iCur, iH
10100 69 77 74 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  iwtr);.  }else{.
10110 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
10120 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c 69 6e  intf(sizeof(zLin
10130 65 29 2c 20 7a 4c 69 6e 65 2c 20 7a 46 6f 72 6d  e), zLine, zForm
10140 61 74 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 7d  at, iHiwtr);.  }
10150 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d  .  raw_printf(p-
10160 3e 6f 75 74 2c 20 22 25 2d 33 36 73 20 25 73 5c  >out, "%-36s %s\
10170 6e 22 2c 20 7a 4c 61 62 65 6c 2c 20 7a 4c 69 6e  n", zLabel, zLin
10180 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  e);.}../*.** Dis
10190 70 6c 61 79 20 6d 65 6d 6f 72 79 20 73 74 61 74  play memory stat
101a0 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  s..*/.static int
101b0 20 64 69 73 70 6c 61 79 5f 73 74 61 74 73 28 0a   display_stats(.
101c0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20    sqlite3 *db,  
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
101e0 20 44 61 74 61 62 61 73 65 20 74 6f 20 71 75 65   Database to que
101f0 72 79 20 2a 2f 0a 20 20 53 68 65 6c 6c 53 74 61  ry */.  ShellSta
10200 74 65 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20  te *pArg,       
10210 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
10220 6f 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a  o ShellState */.
10230 20 20 69 6e 74 20 62 52 65 73 65 74 20 20 20 20    int bReset    
10240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10250 20 54 72 75 65 20 74 6f 20 72 65 73 65 74 20 74   True to reset t
10260 68 65 20 73 74 61 74 73 20 2a 2f 0a 29 7b 0a 20  he stats */.){. 
10270 20 69 6e 74 20 69 43 75 72 3b 0a 20 20 69 6e 74   int iCur;.  int
10280 20 69 48 69 77 74 72 3b 0a 0a 20 20 69 66 28 20   iHiwtr;..  if( 
10290 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75  pArg && pArg->ou
102a0 74 20 29 7b 0a 20 20 20 20 64 69 73 70 6c 61 79  t ){.    display
102b0 53 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20 22  StatLine(pArg, "
102c0 4d 65 6d 6f 72 79 20 55 73 65 64 3a 22 2c 0a 20  Memory Used:",. 
102d0 20 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78        "%lld (max
102e0 20 25 6c 6c 64 29 20 62 79 74 65 73 22 2c 20 53   %lld) bytes", S
102f0 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 45 4d  QLITE_STATUS_MEM
10300 4f 52 59 5f 55 53 45 44 2c 20 62 52 65 73 65 74  ORY_USED, bReset
10310 29 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74  );.    displaySt
10320 61 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4e 75  atLine(pArg, "Nu
10330 6d 62 65 72 20 6f 66 20 4f 75 74 73 74 61 6e 64  mber of Outstand
10340 69 6e 67 20 41 6c 6c 6f 63 61 74 69 6f 6e 73 3a  ing Allocations:
10350 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64 20  ",.       "%lld 
10360 28 6d 61 78 20 25 6c 6c 64 29 22 2c 20 53 51 4c  (max %lld)", SQL
10370 49 54 45 5f 53 54 41 54 55 53 5f 4d 41 4c 4c 4f  ITE_STATUS_MALLO
10380 43 5f 43 4f 55 4e 54 2c 20 62 52 65 73 65 74 29  C_COUNT, bReset)
10390 3b 0a 20 20 20 20 69 66 28 20 70 41 72 67 2d 3e  ;.    if( pArg->
103a0 73 68 65 6c 6c 46 6c 67 73 20 26 20 53 48 46 4c  shellFlgs & SHFL
103b0 47 5f 50 61 67 65 63 61 63 68 65 20 29 7b 0a 20  G_Pagecache ){. 
103c0 20 20 20 20 20 64 69 73 70 6c 61 79 53 74 61 74       displayStat
103d0 4c 69 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d 62  Line(pArg, "Numb
103e0 65 72 20 6f 66 20 50 63 61 63 68 65 20 50 61 67  er of Pcache Pag
103f0 65 73 20 55 73 65 64 3a 22 2c 0a 20 20 20 20 20  es Used:",.     
10400 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25      "%lld (max %
10410 6c 6c 64 29 20 70 61 67 65 73 22 2c 20 53 51 4c  lld) pages", SQL
10420 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43  ITE_STATUS_PAGEC
10430 41 43 48 45 5f 55 53 45 44 2c 20 62 52 65 73 65  ACHE_USED, bRese
10440 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 69  t);.    }.    di
10450 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41  splayStatLine(pA
10460 72 67 2c 20 22 4e 75 6d 62 65 72 20 6f 66 20 50  rg, "Number of P
10470 63 61 63 68 65 20 4f 76 65 72 66 6c 6f 77 20 42  cache Overflow B
10480 79 74 65 73 3a 22 2c 0a 20 20 20 20 20 20 20 22  ytes:",.       "
10490 25 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29 20  %lld (max %lld) 
104a0 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f 53  bytes", SQLITE_S
104b0 54 41 54 55 53 5f 50 41 47 45 43 41 43 48 45 5f  TATUS_PAGECACHE_
104c0 4f 56 45 52 46 4c 4f 57 2c 20 62 52 65 73 65 74  OVERFLOW, bReset
104d0 29 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74  );.    displaySt
104e0 61 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4c 61  atLine(pArg, "La
104f0 72 67 65 73 74 20 41 6c 6c 6f 63 61 74 69 6f 6e  rgest Allocation
10500 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64  :",.       "%lld
10510 20 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f   bytes", SQLITE_
10520 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 53 49  STATUS_MALLOC_SI
10530 5a 45 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  ZE, bReset);.   
10540 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65   displayStatLine
10550 28 70 41 72 67 2c 20 22 4c 61 72 67 65 73 74 20  (pArg, "Largest 
10560 50 63 61 63 68 65 20 41 6c 6c 6f 63 61 74 69 6f  Pcache Allocatio
10570 6e 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c  n:",.       "%ll
10580 64 20 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45  d bytes", SQLITE
10590 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41 43 48  _STATUS_PAGECACH
105a0 45 5f 53 49 5a 45 2c 20 62 52 65 73 65 74 29 3b  E_SIZE, bReset);
105b0 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
105c0 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 20  AXSTACKDEPTH.   
105d0 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65   displayStatLine
105e0 28 70 41 72 67 2c 20 22 44 65 65 70 65 73 74 20  (pArg, "Deepest 
105f0 50 61 72 73 65 72 20 53 74 61 63 6b 3a 22 2c 0a  Parser Stack:",.
10600 20 20 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61         "%lld (ma
10610 78 20 25 6c 6c 64 29 22 2c 20 53 51 4c 49 54 45  x %lld)", SQLITE
10620 5f 53 54 41 54 55 53 5f 50 41 52 53 45 52 5f 53  _STATUS_PARSER_S
10630 54 41 43 4b 2c 20 62 52 65 73 65 74 29 3b 0a 23  TACK, bReset);.#
10640 65 6e 64 69 66 0a 20 20 7d 0a 0a 20 20 69 66 28  endif.  }..  if(
10650 20 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f   pArg && pArg->o
10660 75 74 20 26 26 20 64 62 20 29 7b 0a 20 20 20 20  ut && db ){.    
10670 69 66 28 20 70 41 72 67 2d 3e 73 68 65 6c 6c 46  if( pArg->shellF
10680 6c 67 73 20 26 20 53 48 46 4c 47 5f 4c 6f 6f 6b  lgs & SHFLG_Look
10690 61 73 69 64 65 20 29 7b 0a 20 20 20 20 20 20 69  aside ){.      i
106a0 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d  Hiwtr = iCur = -
106b0 31 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  1;.      sqlite3
106c0 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53  _db_status(db, S
106d0 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c  QLITE_DBSTATUS_L
106e0 4f 4f 4b 41 53 49 44 45 5f 55 53 45 44 2c 0a 20  OOKASIDE_USED,. 
106f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10700 20 20 20 20 20 20 20 26 69 43 75 72 2c 20 26 69         &iCur, &i
10710 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a  Hiwtr, bReset);.
10720 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
10730 28 70 41 72 67 2d 3e 6f 75 74 2c 0a 20 20 20 20  (pArg->out,.    
10740 20 20 20 20 20 20 20 20 20 20 22 4c 6f 6f 6b 61            "Looka
10750 73 69 64 65 20 53 6c 6f 74 73 20 55 73 65 64 3a  side Slots Used:
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10770 25 64 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c 0a  %d (max %d)\n",.
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 43                iC
10790 75 72 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 20  ur, iHiwtr);.   
107a0 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74     sqlite3_db_st
107b0 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f  atus(db, SQLITE_
107c0 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49  DBSTATUS_LOOKASI
107d0 44 45 5f 48 49 54 2c 0a 20 20 20 20 20 20 20 20  DE_HIT,.        
107e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107f0 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20  &iCur, &iHiwtr, 
10800 62 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20 72  bReset);.      r
10810 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
10820 6f 75 74 2c 20 22 53 75 63 63 65 73 73 66 75 6c  out, "Successful
10830 20 6c 6f 6f 6b 61 73 69 64 65 20 61 74 74 65 6d   lookaside attem
10840 70 74 73 3a 20 20 20 20 20 20 20 25 64 5c 6e 22  pts:       %d\n"
10850 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
10860 69 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20 73  iHiwtr);.      s
10870 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73  qlite3_db_status
10880 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54  (db, SQLITE_DBST
10890 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d  ATUS_LOOKASIDE_M
108a0 49 53 53 5f 53 49 5a 45 2c 0a 20 20 20 20 20 20  ISS_SIZE,.      
108b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108c0 20 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72    &iCur, &iHiwtr
108d0 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 20  , bReset);.     
108e0 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
108f0 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 6b 61 73 69 64  ->out, "Lookasid
10900 65 20 66 61 69 6c 75 72 65 73 20 64 75 65 20 74  e failures due t
10910 6f 20 73 69 7a 65 3a 20 20 20 20 20 20 25 64 5c  o size:      %d\
10920 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
10930 20 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20 20    iHiwtr);.     
10940 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74   sqlite3_db_stat
10950 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42  us(db, SQLITE_DB
10960 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45  STATUS_LOOKASIDE
10970 5f 4d 49 53 53 5f 46 55 4c 4c 2c 0a 20 20 20 20  _MISS_FULL,.    
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10990 20 20 20 20 26 69 43 75 72 2c 20 26 69 48 69 77      &iCur, &iHiw
109a0 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  tr, bReset);.   
109b0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
109c0 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 6b 61 73  rg->out, "Lookas
109d0 69 64 65 20 66 61 69 6c 75 72 65 73 20 64 75 65  ide failures due
109e0 20 74 6f 20 4f 4f 4d 3a 20 20 20 20 20 20 20 25   to OOM:       %
109f0 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  d\n",.          
10a00 20 20 20 20 69 48 69 77 74 72 29 3b 0a 20 20 20      iHiwtr);.   
10a10 20 7d 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20   }.    iHiwtr = 
10a20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73  iCur = -1;.    s
10a30 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73  qlite3_db_status
10a40 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54  (db, SQLITE_DBST
10a50 41 54 55 53 5f 43 41 43 48 45 5f 55 53 45 44 2c  ATUS_CACHE_USED,
10a60 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
10a70 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61   bReset);.    ra
10a80 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
10a90 75 74 2c 20 22 50 61 67 65 72 20 48 65 61 70 20  ut, "Pager Heap 
10aa0 55 73 61 67 65 3a 20 20 20 20 20 20 20 20 20 20  Usage:          
10ab0 20 20 20 20 20 20 20 20 20 20 25 64 20 62 79 74            %d byt
10ac0 65 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  es\n",.         
10ad0 20 20 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48     iCur);.    iH
10ae0 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31  iwtr = iCur = -1
10af0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62  ;.    sqlite3_db
10b00 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49  _status(db, SQLI
10b10 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48  TE_DBSTATUS_CACH
10b20 45 5f 48 49 54 2c 20 26 69 43 75 72 2c 20 26 69  E_HIT, &iCur, &i
10b30 48 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72  Hiwtr, 1);.    r
10b40 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
10b50 6f 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65  out, "Page cache
10b60 20 68 69 74 73 3a 20 20 20 20 20 20 20 20 20 20   hits:          
10b70 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22             %d\n"
10b80 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69  , iCur);.    iHi
10b90 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b  wtr = iCur = -1;
10ba0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
10bb0 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
10bc0 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45  E_DBSTATUS_CACHE
10bd0 5f 4d 49 53 53 2c 20 26 69 43 75 72 2c 20 26 69  _MISS, &iCur, &i
10be0 48 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72  Hiwtr, 1);.    r
10bf0 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
10c00 6f 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65  out, "Page cache
10c10 20 6d 69 73 73 65 73 3a 20 20 20 20 20 20 20 20   misses:        
10c20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22             %d\n"
10c30 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69  , iCur);.    iHi
10c40 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b  wtr = iCur = -1;
10c50 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
10c60 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
10c70 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45  E_DBSTATUS_CACHE
10c80 5f 57 52 49 54 45 2c 20 26 69 43 75 72 2c 20 26  _WRITE, &iCur, &
10c90 69 48 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20  iHiwtr, 1);.    
10ca0 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
10cb0 3e 6f 75 74 2c 20 22 50 61 67 65 20 63 61 63 68  >out, "Page cach
10cc0 65 20 77 72 69 74 65 73 3a 20 20 20 20 20 20 20  e writes:       
10cd0 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e              %d\n
10ce0 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48  ", iCur);.    iH
10cf0 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31  iwtr = iCur = -1
10d00 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62  ;.    sqlite3_db
10d10 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49  _status(db, SQLI
10d20 54 45 5f 44 42 53 54 41 54 55 53 5f 53 43 48 45  TE_DBSTATUS_SCHE
10d30 4d 41 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20  MA_USED, &iCur, 
10d40 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29  &iHiwtr, bReset)
10d50 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  ;.    raw_printf
10d60 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 53 63 68  (pArg->out, "Sch
10d70 65 6d 61 20 48 65 61 70 20 55 73 61 67 65 3a 20  ema Heap Usage: 
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d90 20 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 0a 20    %d bytes\n",. 
10da0 20 20 20 20 20 20 20 20 20 20 20 69 43 75 72 29             iCur)
10db0 3b 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69  ;.    iHiwtr = i
10dc0 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71  Cur = -1;.    sq
10dd0 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
10de0 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
10df0 54 55 53 5f 53 54 4d 54 5f 55 53 45 44 2c 20 26  TUS_STMT_USED, &
10e00 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62  iCur, &iHiwtr, b
10e10 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f  Reset);.    raw_
10e20 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
10e30 2c 20 22 53 74 61 74 65 6d 65 6e 74 20 48 65 61  , "Statement Hea
10e40 70 2f 4c 6f 6f 6b 61 73 69 64 65 20 55 73 61 67  p/Lookaside Usag
10e50 65 3a 20 20 20 20 20 20 25 64 20 62 79 74 65 73  e:      %d bytes
10e60 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
10e70 20 69 43 75 72 29 3b 0a 20 20 7d 0a 0a 20 20 69   iCur);.  }..  i
10e80 66 28 20 70 41 72 67 20 26 26 20 70 41 72 67 2d  f( pArg && pArg-
10e90 3e 6f 75 74 20 26 26 20 64 62 20 26 26 20 70 41  >out && db && pA
10ea0 72 67 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20  rg->pStmt ){.   
10eb0 20 69 43 75 72 20 3d 20 73 71 6c 69 74 65 33 5f   iCur = sqlite3_
10ec0 73 74 6d 74 5f 73 74 61 74 75 73 28 70 41 72 67  stmt_status(pArg
10ed0 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f  ->pStmt, SQLITE_
10ee0 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53  STMTSTATUS_FULLS
10ef0 43 41 4e 5f 53 54 45 50 2c 0a 20 20 20 20 20 20  CAN_STEP,.      
10f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f10 20 20 20 20 20 20 20 20 20 62 52 65 73 65 74 29           bReset)
10f20 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  ;.    raw_printf
10f30 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 46 75 6c  (pArg->out, "Ful
10f40 6c 73 63 61 6e 20 53 74 65 70 73 3a 20 20 20 20  lscan Steps:    
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f60 20 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a    %d\n", iCur);.
10f70 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69 74      iCur = sqlit
10f80 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 70  e3_stmt_status(p
10f90 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49  Arg->pStmt, SQLI
10fa0 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
10fb0 52 54 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  RT, bReset);.   
10fc0 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
10fd0 2d 3e 6f 75 74 2c 20 22 53 6f 72 74 20 4f 70 65  ->out, "Sort Ope
10fe0 72 61 74 69 6f 6e 73 3a 20 20 20 20 20 20 20 20  rations:        
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c               %d\
11000 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69  n", iCur);.    i
11010 43 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74  Cur = sqlite3_st
11020 6d 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e  mt_status(pArg->
11030 70 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54  pStmt, SQLITE_ST
11040 4d 54 53 54 41 54 55 53 5f 41 55 54 4f 49 4e 44  MTSTATUS_AUTOIND
11050 45 58 2c 62 52 65 73 65 74 29 3b 0a 20 20 20 20  EX,bReset);.    
11060 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
11070 3e 6f 75 74 2c 20 22 41 75 74 6f 69 6e 64 65 78  >out, "Autoindex
11080 20 49 6e 73 65 72 74 73 3a 20 20 20 20 20 20 20   Inserts:       
11090 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e              %d\n
110a0 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 43  ", iCur);.    iC
110b0 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d  ur = sqlite3_stm
110c0 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70  t_status(pArg->p
110d0 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d  Stmt, SQLITE_STM
110e0 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 2c  TSTATUS_VM_STEP,
110f0 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61   bReset);.    ra
11100 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
11110 75 74 2c 20 22 56 69 72 74 75 61 6c 20 4d 61 63  ut, "Virtual Mac
11120 68 69 6e 65 20 53 74 65 70 73 3a 20 20 20 20 20  hine Steps:     
11130 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c            %d\n",
11140 20 69 43 75 72 29 3b 0a 20 20 7d 0a 0a 23 69 66   iCur);.  }..#if
11150 64 65 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 20 20  def __linux__.  
11160 64 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74  displayLinuxIoSt
11170 61 74 73 28 70 41 72 67 2d 3e 6f 75 74 29 3b 0a  ats(pArg->out);.
11180 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 44 6f 20  #endif..  /* Do 
11190 6e 6f 74 20 72 65 6d 6f 76 65 20 74 68 69 73 20  not remove this 
111a0 6d 61 63 68 69 6e 65 20 72 65 61 64 61 62 6c 65  machine readable
111b0 20 63 6f 6d 6d 65 6e 74 3a 20 65 78 74 72 61 2d   comment: extra-
111c0 73 74 61 74 73 2d 6f 75 74 70 75 74 2d 68 65 72  stats-output-her
111d0 65 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20 30  e */..  return 0
111e0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c  ;.}../*.** Displ
111f0 61 79 20 73 63 61 6e 20 73 74 61 74 73 2e 0a 2a  ay scan stats..*
11200 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64 69  /.static void di
11210 73 70 6c 61 79 5f 73 63 61 6e 73 74 61 74 73 28  splay_scanstats(
11220 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11240 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74     /* Database t
11250 6f 20 71 75 65 72 79 20 2a 2f 0a 20 20 53 68 65  o query */.  She
11260 6c 6c 53 74 61 74 65 20 2a 70 41 72 67 20 20 20  llState *pArg   
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11280 50 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c 6c  Pointer to Shell
11290 53 74 61 74 65 20 2a 2f 0a 29 7b 0a 23 69 66 6e  State */.){.#ifn
112a0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
112b0 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
112c0 53 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  S.  UNUSED_PARAM
112d0 45 54 45 52 28 64 62 29 3b 0a 20 20 55 4e 55 53  ETER(db);.  UNUS
112e0 45 44 5f 50 41 52 41 4d 45 54 45 52 28 70 41 72  ED_PARAMETER(pAr
112f0 67 29 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20  g);.#else.  int 
11300 69 2c 20 6b 2c 20 6e 2c 20 6d 78 3b 0a 20 20 72  i, k, n, mx;.  r
11310 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
11320 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73  out, "-------- s
11330 63 61 6e 73 74 61 74 73 20 2d 2d 2d 2d 2d 2d 2d  canstats -------
11340 2d 5c 6e 22 29 3b 0a 20 20 6d 78 20 3d 20 30 3b  -\n");.  mx = 0;
11350 0a 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 3d 6d  .  for(k=0; k<=m
11360 78 3b 20 6b 2b 2b 29 7b 0a 20 20 20 20 64 6f 75  x; k++){.    dou
11370 62 6c 65 20 72 45 73 74 4c 6f 6f 70 20 3d 20 31  ble rEstLoop = 1
11380 2e 30 3b 0a 20 20 20 20 66 6f 72 28 69 3d 6e 3d  .0;.    for(i=n=
11390 30 3b 20 31 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  0; 1; i++){.    
113a0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
113b0 70 20 3d 20 70 41 72 67 2d 3e 70 53 74 6d 74 3b  p = pArg->pStmt;
113c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
113d0 6e 74 36 34 20 6e 4c 6f 6f 70 2c 20 6e 56 69 73  nt64 nLoop, nVis
113e0 69 74 3b 0a 20 20 20 20 20 20 64 6f 75 62 6c 65  it;.      double
113f0 20 72 45 73 74 3b 0a 20 20 20 20 20 20 69 6e 74   rEst;.      int
11400 20 69 53 69 64 3b 0a 20 20 20 20 20 20 63 6f 6e   iSid;.      con
11410 73 74 20 63 68 61 72 20 2a 7a 45 78 70 6c 61 69  st char *zExplai
11420 6e 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  n;.      if( sql
11430 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74  ite3_stmt_scanst
11440 61 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54  atus(p, i, SQLIT
11450 45 5f 53 43 41 4e 53 54 41 54 5f 4e 4c 4f 4f 50  E_SCANSTAT_NLOOP
11460 2c 20 28 76 6f 69 64 2a 29 26 6e 4c 6f 6f 70 29  , (void*)&nLoop)
11470 20 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61   ){.        brea
11480 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
11490 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63   sqlite3_stmt_sc
114a0 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53  anstatus(p, i, S
114b0 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 53  QLITE_SCANSTAT_S
114c0 45 4c 45 43 54 49 44 2c 20 28 76 6f 69 64 2a 29  ELECTID, (void*)
114d0 26 69 53 69 64 29 3b 0a 20 20 20 20 20 20 69 66  &iSid);.      if
114e0 28 20 69 53 69 64 3e 6d 78 20 29 20 6d 78 20 3d  ( iSid>mx ) mx =
114f0 20 69 53 69 64 3b 0a 20 20 20 20 20 20 69 66 28   iSid;.      if(
11500 20 69 53 69 64 21 3d 6b 20 29 20 63 6f 6e 74 69   iSid!=k ) conti
11510 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e  nue;.      if( n
11520 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
11530 45 73 74 4c 6f 6f 70 20 3d 20 28 64 6f 75 62 6c  EstLoop = (doubl
11540 65 29 6e 4c 6f 6f 70 3b 0a 20 20 20 20 20 20 20  e)nLoop;.       
11550 20 69 66 28 20 6b 3e 30 20 29 20 72 61 77 5f 70   if( k>0 ) raw_p
11560 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
11570 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 75 62 71 75   "-------- subqu
11580 65 72 79 20 25 64 20 2d 2d 2d 2d 2d 2d 2d 5c 6e  ery %d -------\n
11590 22 2c 20 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ", k);.      }. 
115a0 20 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20       n++;.      
115b0 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61  sqlite3_stmt_sca
115c0 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51  nstatus(p, i, SQ
115d0 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 4e 56  LITE_SCANSTAT_NV
115e0 49 53 49 54 2c 20 28 76 6f 69 64 2a 29 26 6e 56  ISIT, (void*)&nV
115f0 69 73 69 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  isit);.      sql
11600 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74  ite3_stmt_scanst
11610 61 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54  atus(p, i, SQLIT
11620 45 5f 53 43 41 4e 53 54 41 54 5f 45 53 54 2c 20  E_SCANSTAT_EST, 
11630 28 76 6f 69 64 2a 29 26 72 45 73 74 29 3b 0a 20  (void*)&rEst);. 
11640 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d       sqlite3_stm
11650 74 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c 20  t_scanstatus(p, 
11660 69 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54  i, SQLITE_SCANST
11670 41 54 5f 45 58 50 4c 41 49 4e 2c 20 28 76 6f 69  AT_EXPLAIN, (voi
11680 64 2a 29 26 7a 45 78 70 6c 61 69 6e 29 3b 0a 20  d*)&zExplain);. 
11690 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
116a0 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f  (pArg->out, "Loo
116b0 70 20 25 32 64 3a 20 25 73 5c 6e 22 2c 20 6e 2c  p %2d: %s\n", n,
116c0 20 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20   zExplain);.    
116d0 20 20 72 45 73 74 4c 6f 6f 70 20 2a 3d 20 72 45    rEstLoop *= rE
116e0 73 74 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  st;.      raw_pr
116f0 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 0a  intf(pArg->out,.
11700 20 20 20 20 20 20 20 20 20 20 22 20 20 20 20 20            "     
11710 20 20 20 20 6e 4c 6f 6f 70 3d 25 2d 38 6c 6c 64      nLoop=%-8lld
11720 20 6e 52 6f 77 3d 25 2d 38 6c 6c 64 20 65 73 74   nRow=%-8lld est
11730 52 6f 77 3d 25 2d 38 6c 6c 64 20 65 73 74 52 6f  Row=%-8lld estRo
11740 77 2f 4c 6f 6f 70 3d 25 2d 38 67 5c 6e 22 2c 0a  w/Loop=%-8g\n",.
11750 20 20 20 20 20 20 20 20 20 20 6e 4c 6f 6f 70 2c            nLoop,
11760 20 6e 56 69 73 69 74 2c 20 28 73 71 6c 69 74 65   nVisit, (sqlite
11770 33 5f 69 6e 74 36 34 29 28 72 45 73 74 4c 6f 6f  3_int64)(rEstLoo
11780 70 2b 30 2e 35 29 2c 20 72 45 73 74 0a 20 20 20  p+0.5), rEst.   
11790 20 20 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a     );.    }.  }.
117a0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
117b0 67 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d  g->out, "-------
117c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
117d0 2d 2d 2d 2d 5c 6e 22 29 3b 0a 23 65 6e 64 69 66  ----\n");.#endif
117e0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65  .}../*.** Parame
117f0 74 65 72 20 61 7a 41 72 72 61 79 20 70 6f 69 6e  ter azArray poin
11800 74 73 20 74 6f 20 61 20 7a 65 72 6f 2d 74 65 72  ts to a zero-ter
11810 6d 69 6e 61 74 65 64 20 61 72 72 61 79 20 6f 66  minated array of
11820 20 73 74 72 69 6e 67 73 2e 20 7a 53 74 72 0a 2a   strings. zStr.*
11830 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 73 69  * points to a si
11840 6e 67 6c 65 20 6e 75 6c 2d 74 65 72 6d 69 6e 61  ngle nul-termina
11850 74 65 64 20 73 74 72 69 6e 67 2e 20 52 65 74 75  ted string. Retu
11860 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 7a  rn non-zero if z
11870 53 74 72 0a 2a 2a 20 69 73 20 65 71 75 61 6c 2c  Str.** is equal,
11880 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 73 74   according to st
11890 72 63 6d 70 28 29 2c 20 74 6f 20 61 6e 79 20 6f  rcmp(), to any o
118a0 66 20 74 68 65 20 73 74 72 69 6e 67 73 20 69 6e  f the strings in
118b0 20 74 68 65 20 61 72 72 61 79 2e 0a 2a 2a 20 4f   the array..** O
118c0 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e  therwise, return
118d0 20 7a 65 72 6f 2e 0a 2a 2f 0a 73 74 61 74 69 63   zero..*/.static
118e0 20 69 6e 74 20 73 74 72 5f 69 6e 5f 61 72 72 61   int str_in_arra
118f0 79 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53  y(const char *zS
11900 74 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tr, const char *
11910 2a 61 7a 41 72 72 61 79 29 7b 0a 20 20 69 6e 74  *azArray){.  int
11920 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 61   i;.  for(i=0; a
11930 7a 41 72 72 61 79 5b 69 5d 3b 20 69 2b 2b 29 7b  zArray[i]; i++){
11940 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63  .    if( 0==strc
11950 6d 70 28 7a 53 74 72 2c 20 61 7a 41 72 72 61 79  mp(zStr, azArray
11960 5b 69 5d 29 20 29 20 72 65 74 75 72 6e 20 31 3b  [i]) ) return 1;
11970 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
11980 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d  .}../*.** If com
11990 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 20  piled statement 
119a0 70 53 71 6c 20 61 70 70 65 61 72 73 20 74 6f 20  pSql appears to 
119b0 62 65 20 61 6e 20 45 58 50 4c 41 49 4e 20 73 74  be an EXPLAIN st
119c0 61 74 65 6d 65 6e 74 2c 20 61 6c 6c 6f 63 61 74  atement, allocat
119d0 65 0a 2a 2a 20 61 6e 64 20 70 6f 70 75 6c 61 74  e.** and populat
119e0 65 20 74 68 65 20 53 68 65 6c 6c 53 74 61 74 65  e the ShellState
119f0 2e 61 69 49 6e 64 65 6e 74 5b 5d 20 61 72 72 61  .aiIndent[] arra
11a00 79 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65  y with the numbe
11a10 72 20 6f 66 0a 2a 2a 20 73 70 61 63 65 73 20 65  r of.** spaces e
11a20 61 63 68 20 6f 70 63 6f 64 65 20 73 68 6f 75 6c  ach opcode shoul
11a30 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 65  d be indented be
11a40 66 6f 72 65 20 69 74 20 69 73 20 6f 75 74 70 75  fore it is outpu
11a50 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 64  t..**.** The ind
11a60 65 6e 74 69 6e 67 20 72 75 6c 65 73 20 61 72 65  enting rules are
11a70 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 46 6f  :.**.**     * Fo
11a80 72 20 65 61 63 68 20 22 4e 65 78 74 22 2c 20 22  r each "Next", "
11a90 50 72 65 76 22 2c 20 22 56 4e 65 78 74 22 20 6f  Prev", "VNext" o
11aa0 72 20 22 56 50 72 65 76 22 20 69 6e 73 74 72 75  r "VPrev" instru
11ab0 63 74 69 6f 6e 2c 20 69 6e 64 65 6e 74 0a 2a 2a  ction, indent.**
11ac0 20 20 20 20 20 20 20 61 6c 6c 20 6f 70 63 6f 64         all opcod
11ad0 65 73 20 74 68 61 74 20 6f 63 63 75 72 20 62 65  es that occur be
11ae0 74 77 65 65 6e 20 74 68 65 20 70 32 20 6a 75 6d  tween the p2 jum
11af0 70 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 61 6e  p destination an
11b00 64 20 74 68 65 20 6f 70 63 6f 64 65 0a 2a 2a 20  d the opcode.** 
11b10 20 20 20 20 20 20 69 74 73 65 6c 66 20 62 79 20        itself by 
11b20 32 20 73 70 61 63 65 73 2e 0a 2a 2a 0a 2a 2a 20  2 spaces..**.** 
11b30 20 20 20 20 2a 20 46 6f 72 20 65 61 63 68 20 22      * For each "
11b40 47 6f 74 6f 22 2c 20 69 66 20 74 68 65 20 6a 75  Goto", if the ju
11b50 6d 70 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69  mp destination i
11b60 73 20 65 61 72 6c 69 65 72 20 69 6e 20 74 68 65  s earlier in the
11b70 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 20 20 20 20   program.**     
11b80 20 20 61 6e 64 20 65 6e 64 73 20 6f 6e 20 6f 6e    and ends on on
11b90 65 20 6f 66 3a 0a 2a 2a 20 20 20 20 20 20 20 20  e of:.**        
11ba0 20 20 59 69 65 6c 64 20 20 53 65 65 6b 47 74 20    Yield  SeekGt 
11bb0 20 53 65 65 6b 4c 74 20 20 52 6f 77 53 65 74 52   SeekLt  RowSetR
11bc0 65 61 64 20 20 52 65 77 69 6e 64 0a 2a 2a 20 20  ead  Rewind.**  
11bd0 20 20 20 20 20 6f 72 20 69 66 20 74 68 65 20 50       or if the P
11be0 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6f  1 parameter is o
11bf0 6e 65 20 69 6e 73 74 65 61 64 20 6f 66 20 7a 65  ne instead of ze
11c00 72 6f 2c 0a 2a 2a 20 20 20 20 20 20 20 74 68 65  ro,.**       the
11c10 6e 20 69 6e 64 65 6e 74 20 61 6c 6c 20 6f 70 63  n indent all opc
11c20 6f 64 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  odes between the
11c30 20 65 61 72 6c 69 65 72 20 69 6e 73 74 72 75 63   earlier instruc
11c40 74 69 6f 6e 0a 2a 2a 20 20 20 20 20 20 20 61 6e  tion.**       an
11c50 64 20 22 47 6f 74 6f 22 20 62 79 20 32 20 73 70  d "Goto" by 2 sp
11c60 61 63 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  aces..*/.static 
11c70 76 6f 69 64 20 65 78 70 6c 61 69 6e 5f 64 61 74  void explain_dat
11c80 61 5f 70 72 65 70 61 72 65 28 53 68 65 6c 6c 53  a_prepare(ShellS
11c90 74 61 74 65 20 2a 70 2c 20 73 71 6c 69 74 65 33  tate *p, sqlite3
11ca0 5f 73 74 6d 74 20 2a 70 53 71 6c 29 7b 0a 20 20  _stmt *pSql){.  
11cb0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
11cc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11cd0 2f 2a 20 54 68 65 20 74 65 78 74 20 6f 66 20 74  /* The text of t
11ce0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
11cf0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
11d00 20 2a 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   *z;            
11d10 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f        /* Used to
11d20 20 63 68 65 63 6b 20 69 66 20 74 68 69 73 20 69   check if this i
11d30 73 20 61 6e 20 45 58 50 4c 41 49 4e 20 2a 2f 0a  s an EXPLAIN */.
11d40 20 20 69 6e 74 20 2a 61 62 59 69 65 6c 64 20 3d    int *abYield =
11d50 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
11d60 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 70 20    /* True if op 
11d70 69 73 20 61 6e 20 4f 50 5f 59 69 65 6c 64 20 2a  is an OP_Yield *
11d80 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d  /.  int nAlloc =
11d90 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
11da0 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
11db0 20 73 69 7a 65 20 6f 66 20 70 2d 3e 61 69 49 6e   size of p->aiIn
11dc0 64 65 6e 74 5b 5d 2c 20 61 62 59 69 65 6c 64 20  dent[], abYield 
11dd0 2a 2f 0a 20 20 69 6e 74 20 69 4f 70 3b 20 20 20  */.  int iOp;   
11de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11df0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
11e00 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 2d   operation in p-
11e10 3e 61 69 49 6e 64 65 6e 74 5b 5d 20 2a 2f 0a 0a  >aiIndent[] */..
11e20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a    const char *az
11e30 4e 65 78 74 5b 5d 20 3d 20 7b 20 22 4e 65 78 74  Next[] = { "Next
11e40 22 2c 20 22 50 72 65 76 22 2c 20 22 56 50 72 65  ", "Prev", "VPre
11e50 76 22 2c 20 22 56 4e 65 78 74 22 2c 20 22 53 6f  v", "VNext", "So
11e60 72 74 65 72 4e 65 78 74 22 2c 0a 20 20 20 20 20  rterNext",.     
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e80 20 20 20 20 20 20 22 4e 65 78 74 49 66 4f 70 65        "NextIfOpe
11e90 6e 22 2c 20 22 50 72 65 76 49 66 4f 70 65 6e 22  n", "PrevIfOpen"
11ea0 2c 20 30 20 7d 3b 0a 20 20 63 6f 6e 73 74 20 63  , 0 };.  const c
11eb0 68 61 72 20 2a 61 7a 59 69 65 6c 64 5b 5d 20 3d  har *azYield[] =
11ec0 20 7b 20 22 59 69 65 6c 64 22 2c 20 22 53 65 65   { "Yield", "See
11ed0 6b 4c 54 22 2c 20 22 53 65 65 6b 47 54 22 2c 20  kLT", "SeekGT", 
11ee0 22 52 6f 77 53 65 74 52 65 61 64 22 2c 0a 20 20  "RowSetRead",.  
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f00 20 20 20 20 20 20 20 20 20 20 22 52 65 77 69 6e            "Rewin
11f10 64 22 2c 20 30 20 7d 3b 0a 20 20 63 6f 6e 73 74  d", 0 };.  const
11f20 20 63 68 61 72 20 2a 61 7a 47 6f 74 6f 5b 5d 20   char *azGoto[] 
11f30 3d 20 7b 20 22 47 6f 74 6f 22 2c 20 30 20 7d 3b  = { "Goto", 0 };
11f40 0a 0a 20 20 2f 2a 20 54 72 79 20 74 6f 20 66 69  ..  /* Try to fi
11f50 67 75 72 65 20 6f 75 74 20 69 66 20 74 68 69 73  gure out if this
11f60 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 45 58   is really an EX
11f70 50 4c 41 49 4e 20 73 74 61 74 65 6d 65 6e 74 2e  PLAIN statement.
11f80 20 49 66 20 74 68 69 73 0a 20 20 2a 2a 20 63 61   If this.  ** ca
11f90 6e 6e 6f 74 20 62 65 20 76 65 72 69 66 69 65 64  nnot be verified
11fa0 2c 20 72 65 74 75 72 6e 20 65 61 72 6c 79 2e 20  , return early. 
11fb0 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
11fc0 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70  3_column_count(p
11fd0 53 71 6c 29 21 3d 38 20 29 7b 0a 20 20 20 20 70  Sql)!=8 ){.    p
11fe0 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64  ->cMode = p->mod
11ff0 65 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  e;.    return;. 
12000 20 7d 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69   }.  zSql = sqli
12010 74 65 33 5f 73 71 6c 28 70 53 71 6c 29 3b 0a 20  te3_sql(pSql);. 
12020 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 20 72   if( zSql==0 ) r
12030 65 74 75 72 6e 3b 0a 20 20 66 6f 72 28 7a 3d 7a  eturn;.  for(z=z
12040 53 71 6c 3b 20 2a 7a 3d 3d 27 20 27 20 7c 7c 20  Sql; *z==' ' || 
12050 2a 7a 3d 3d 27 5c 74 27 20 7c 7c 20 2a 7a 3d 3d  *z=='\t' || *z==
12060 27 5c 6e 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 66 27  '\n' || *z=='\f'
12070 20 7c 7c 20 2a 7a 3d 3d 27 5c 72 27 3b 20 7a 2b   || *z=='\r'; z+
12080 2b 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  +);.  if( sqlite
12090 33 5f 73 74 72 6e 69 63 6d 70 28 7a 2c 20 22 65  3_strnicmp(z, "e
120a0 78 70 6c 61 69 6e 22 2c 20 37 29 20 29 7b 0a 20  xplain", 7) ){. 
120b0 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d     p->cMode = p-
120c0 3e 6d 6f 64 65 3b 0a 20 20 20 20 72 65 74 75 72  >mode;.    retur
120d0 6e 3b 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 69 4f  n;.  }..  for(iO
120e0 70 3d 30 3b 20 53 51 4c 49 54 45 5f 52 4f 57 3d  p=0; SQLITE_ROW=
120f0 3d 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53  =sqlite3_step(pS
12100 71 6c 29 3b 20 69 4f 70 2b 2b 29 7b 0a 20 20 20  ql); iOp++){.   
12110 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
12120 69 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 5f  iAddr = sqlite3_
12130 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c  column_int(pSql,
12140 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63   0);.    const c
12150 68 61 72 20 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73  har *zOp = (cons
12160 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
12170 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c  column_text(pSql
12180 2c 20 31 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65  , 1);..    /* Se
12190 74 20 70 32 20 74 6f 20 74 68 65 20 50 32 20 66  t p2 to the P2 f
121a0 69 65 6c 64 20 6f 66 20 74 68 65 20 63 75 72 72  ield of the curr
121b0 65 6e 74 20 6f 70 63 6f 64 65 2e 20 54 68 65 6e  ent opcode. Then
121c0 2c 20 61 73 73 75 6d 69 6e 67 20 74 68 61 74 0a  , assuming that.
121d0 20 20 20 20 2a 2a 20 70 32 20 69 73 20 61 6e 20      ** p2 is an 
121e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 64 64 72  instruction addr
121f0 65 73 73 2c 20 73 65 74 20 76 61 72 69 61 62 6c  ess, set variabl
12200 65 20 70 32 6f 70 20 74 6f 20 74 68 65 20 69 6e  e p2op to the in
12210 64 65 78 20 6f 66 20 74 68 61 74 0a 20 20 20 20  dex of that.    
12220 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  ** instruction i
12230 6e 20 74 68 65 20 61 69 49 6e 64 65 6e 74 5b 5d  n the aiIndent[]
12240 20 61 72 72 61 79 2e 20 70 32 20 61 6e 64 20 70   array. p2 and p
12250 32 6f 70 20 6d 61 79 20 62 65 20 64 69 66 66 65  2op may be diffe
12260 72 65 6e 74 20 69 66 0a 20 20 20 20 2a 2a 20 74  rent if.    ** t
12270 68 65 20 63 75 72 72 65 6e 74 20 69 6e 73 74 72  he current instr
12280 75 63 74 69 6f 6e 20 69 73 20 70 61 72 74 20 6f  uction is part o
12290 66 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  f a sub-program 
122a0 67 65 6e 65 72 61 74 65 64 20 62 79 20 61 6e 0a  generated by an.
122b0 20 20 20 20 2a 2a 20 53 51 4c 20 74 72 69 67 67      ** SQL trigg
122c0 65 72 20 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65  er or foreign ke
122d0 79 2e 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 70  y.  */.    int p
122e0 32 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  2 = sqlite3_colu
122f0 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 33 29 3b  mn_int(pSql, 3);
12300 0a 20 20 20 20 69 6e 74 20 70 32 6f 70 20 3d 20  .    int p2op = 
12310 28 70 32 20 2b 20 28 69 4f 70 2d 69 41 64 64 72  (p2 + (iOp-iAddr
12320 29 29 3b 0a 0a 20 20 20 20 2f 2a 20 47 72 6f 77  ));..    /* Grow
12330 20 74 68 65 20 70 2d 3e 61 69 49 6e 64 65 6e 74   the p->aiIndent
12340 20 61 72 72 61 79 20 61 73 20 72 65 71 75 69 72   array as requir
12350 65 64 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 4f  ed */.    if( iO
12360 70 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20  p>=nAlloc ){.   
12370 20 20 20 69 66 28 20 69 4f 70 3d 3d 30 20 29 7b     if( iOp==0 ){
12380 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 66  .        /* Do f
12390 75 72 74 68 65 72 20 76 65 72 66 69 63 61 74 69  urther verficati
123a0 6f 6e 20 74 68 61 74 20 74 68 69 73 20 69 73 20  on that this is 
123b0 65 78 70 6c 61 69 6e 20 6f 75 74 70 75 74 2e 20  explain output. 
123c0 20 41 62 6f 72 74 20 69 66 0a 20 20 20 20 20 20   Abort if.      
123d0 20 20 2a 2a 20 69 74 20 69 73 20 6e 6f 74 20 2a    ** it is not *
123e0 2f 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63  /.        static
123f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 65 78 70   const char *exp
12400 6c 61 69 6e 43 6f 6c 73 5b 5d 20 3d 20 7b 0a 20  lainCols[] = {. 
12410 20 20 20 20 20 20 20 20 20 20 22 61 64 64 72 22            "addr"
12420 2c 20 22 6f 70 63 6f 64 65 22 2c 20 22 70 31 22  , "opcode", "p1"
12430 2c 20 22 70 32 22 2c 20 22 70 33 22 2c 20 22 70  , "p2", "p3", "p
12440 34 22 2c 20 22 70 35 22 2c 20 22 63 6f 6d 6d 65  4", "p5", "comme
12450 6e 74 22 20 7d 3b 0a 20 20 20 20 20 20 20 20 69  nt" };.        i
12460 6e 74 20 6a 6a 3b 0a 20 20 20 20 20 20 20 20 66  nt jj;.        f
12470 6f 72 28 6a 6a 3d 30 3b 20 6a 6a 3c 41 72 72 61  or(jj=0; jj<Arra
12480 79 53 69 7a 65 28 65 78 70 6c 61 69 6e 43 6f 6c  ySize(explainCol
12490 73 29 3b 20 6a 6a 2b 2b 29 7b 0a 20 20 20 20 20  s); jj++){.     
124a0 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
124b0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
124c0 61 6d 65 28 70 53 71 6c 2c 6a 6a 29 2c 65 78 70  ame(pSql,jj),exp
124d0 6c 61 69 6e 43 6f 6c 73 5b 6a 6a 5d 29 21 3d 30  lainCols[jj])!=0
124e0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
124f0 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f  p->cMode = p->mo
12500 64 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  de;.            
12510 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 53  sqlite3_reset(pS
12520 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ql);.           
12530 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20   return;.       
12540 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
12550 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 41 6c       }.      nAl
12560 6c 6f 63 20 2b 3d 20 31 30 30 3b 0a 20 20 20 20  loc += 100;.    
12570 20 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20 3d 20    p->aiIndent = 
12580 28 69 6e 74 2a 29 73 71 6c 69 74 65 33 5f 72 65  (int*)sqlite3_re
12590 61 6c 6c 6f 63 36 34 28 70 2d 3e 61 69 49 6e 64  alloc64(p->aiInd
125a0 65 6e 74 2c 20 6e 41 6c 6c 6f 63 2a 73 69 7a 65  ent, nAlloc*size
125b0 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20 20  of(int));.      
125c0 61 62 59 69 65 6c 64 20 3d 20 28 69 6e 74 2a 29  abYield = (int*)
125d0 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 36  sqlite3_realloc6
125e0 34 28 61 62 59 69 65 6c 64 2c 20 6e 41 6c 6c 6f  4(abYield, nAllo
125f0 63 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a  c*sizeof(int));.
12600 20 20 20 20 7d 0a 20 20 20 20 61 62 59 69 65 6c      }.    abYiel
12610 64 5b 69 4f 70 5d 20 3d 20 73 74 72 5f 69 6e 5f  d[iOp] = str_in_
12620 61 72 72 61 79 28 7a 4f 70 2c 20 61 7a 59 69 65  array(zOp, azYie
12630 6c 64 29 3b 0a 20 20 20 20 70 2d 3e 61 69 49 6e  ld);.    p->aiIn
12640 64 65 6e 74 5b 69 4f 70 5d 20 3d 20 30 3b 0a 20  dent[iOp] = 0;. 
12650 20 20 20 70 2d 3e 6e 49 6e 64 65 6e 74 20 3d 20     p->nIndent = 
12660 69 4f 70 2b 31 3b 0a 0a 20 20 20 20 69 66 28 20  iOp+1;..    if( 
12670 73 74 72 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70  str_in_array(zOp
12680 2c 20 61 7a 4e 65 78 74 29 20 29 7b 0a 20 20 20  , azNext) ){.   
12690 20 20 20 66 6f 72 28 69 3d 70 32 6f 70 3b 20 69     for(i=p2op; i
126a0 3c 69 4f 70 3b 20 69 2b 2b 29 20 70 2d 3e 61 69  <iOp; i++) p->ai
126b0 49 6e 64 65 6e 74 5b 69 5d 20 2b 3d 20 32 3b 0a  Indent[i] += 2;.
126c0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74      }.    if( st
126d0 72 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c 20  r_in_array(zOp, 
126e0 61 7a 47 6f 74 6f 29 20 26 26 20 70 32 6f 70 3c  azGoto) && p2op<
126f0 70 2d 3e 6e 49 6e 64 65 6e 74 0a 20 20 20 20 20  p->nIndent.     
12700 26 26 20 28 61 62 59 69 65 6c 64 5b 70 32 6f 70  && (abYield[p2op
12710 5d 20 7c 7c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ] || sqlite3_col
12720 75 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 32 29  umn_int(pSql, 2)
12730 29 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 66  ).    ){.      f
12740 6f 72 28 69 3d 70 32 6f 70 3b 20 69 3c 69 4f 70  or(i=p2op; i<iOp
12750 3b 20 69 2b 2b 29 20 70 2d 3e 61 69 49 6e 64 65  ; i++) p->aiInde
12760 6e 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20 20 20 20  nt[i] += 2;.    
12770 7d 0a 20 20 7d 0a 0a 20 20 70 2d 3e 69 49 6e 64  }.  }..  p->iInd
12780 65 6e 74 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  ent = 0;.  sqlit
12790 65 33 5f 66 72 65 65 28 61 62 59 69 65 6c 64 29  e3_free(abYield)
127a0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65  ;.  sqlite3_rese
127b0 74 28 70 53 71 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  t(pSql);.}../*.*
127c0 2a 20 46 72 65 65 20 74 68 65 20 61 72 72 61 79  * Free the array
127d0 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 65 78   allocated by ex
127e0 70 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61  plain_data_prepa
127f0 72 65 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  re()..*/.static 
12800 76 6f 69 64 20 65 78 70 6c 61 69 6e 5f 64 61 74  void explain_dat
12810 61 5f 64 65 6c 65 74 65 28 53 68 65 6c 6c 53 74  a_delete(ShellSt
12820 61 74 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74  ate *p){.  sqlit
12830 65 33 5f 66 72 65 65 28 70 2d 3e 61 69 49 6e 64  e3_free(p->aiInd
12840 65 6e 74 29 3b 0a 20 20 70 2d 3e 61 69 49 6e 64  ent);.  p->aiInd
12850 65 6e 74 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 49  ent = 0;.  p->nI
12860 6e 64 65 6e 74 20 3d 20 30 3b 0a 20 20 70 2d 3e  ndent = 0;.  p->
12870 69 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 7d 0a 0a  iIndent = 0;.}..
12880 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 61 6e  /*.** Disable an
12890 64 20 72 65 73 74 6f 72 65 20 2e 77 68 65 72 65  d restore .where
128a0 74 72 61 63 65 20 61 6e 64 20 2e 73 65 6c 65 63  trace and .selec
128b0 74 74 72 61 63 65 20 73 65 74 74 69 6e 67 73 2e  ttrace settings.
128c0 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
128d0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
128e0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
128f0 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
12900 43 45 29 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  CE).extern int s
12910 71 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63  qlite3SelectTrac
12920 65 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 73 61  e;.static int sa
12930 76 65 64 53 65 6c 65 63 74 54 72 61 63 65 3b 0a  vedSelectTrace;.
12940 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
12950 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
12960 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
12970 54 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45 54  TE_ENABLE_WHERET
12980 52 41 43 45 29 0a 65 78 74 65 72 6e 20 69 6e 74  RACE).extern int
12990 20 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61   sqlite3WhereTra
129a0 63 65 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 73  ce;.static int s
129b0 61 76 65 64 57 68 65 72 65 54 72 61 63 65 3b 0a  avedWhereTrace;.
129c0 23 65 6e 64 69 66 0a 73 74 61 74 69 63 20 76 6f  #endif.static vo
129d0 69 64 20 64 69 73 61 62 6c 65 5f 64 65 62 75 67  id disable_debug
129e0 5f 74 72 61 63 65 5f 6d 6f 64 65 73 28 76 6f 69  _trace_modes(voi
129f0 64 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  d){.#if defined(
12a00 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
12a10 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
12a20 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
12a30 43 45 29 0a 20 20 73 61 76 65 64 53 65 6c 65 63  CE).  savedSelec
12a40 74 54 72 61 63 65 20 3d 20 73 71 6c 69 74 65 33  tTrace = sqlite3
12a50 53 65 6c 65 63 74 54 72 61 63 65 3b 0a 20 20 73  SelectTrace;.  s
12a60 71 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63  qlite3SelectTrac
12a70 65 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 23 69  e = 0;.#endif.#i
12a80 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
12a90 5f 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  _DEBUG) && defin
12aa0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
12ab0 5f 57 48 45 52 45 54 52 41 43 45 29 0a 20 20 73  _WHERETRACE).  s
12ac0 61 76 65 64 57 68 65 72 65 54 72 61 63 65 20 3d  avedWhereTrace =
12ad0 20 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61   sqlite3WhereTra
12ae0 63 65 3b 0a 20 20 73 71 6c 69 74 65 33 57 68 65  ce;.  sqlite3Whe
12af0 72 65 54 72 61 63 65 20 3d 20 30 3b 0a 23 65 6e  reTrace = 0;.#en
12b00 64 69 66 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69  dif.}.static voi
12b10 64 20 72 65 73 74 6f 72 65 5f 64 65 62 75 67 5f  d restore_debug_
12b20 74 72 61 63 65 5f 6d 6f 64 65 73 28 76 6f 69 64  trace_modes(void
12b30 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ){.#if defined(S
12b40 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
12b50 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
12b60 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
12b70 45 29 0a 20 20 73 71 6c 69 74 65 33 53 65 6c 65  E).  sqlite3Sele
12b80 63 74 54 72 61 63 65 20 3d 20 73 61 76 65 64 53  ctTrace = savedS
12b90 65 6c 65 63 74 54 72 61 63 65 3b 0a 23 65 6e 64  electTrace;.#end
12ba0 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
12bb0 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
12bc0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
12bd0 4e 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45  NABLE_WHERETRACE
12be0 29 0a 20 20 73 71 6c 69 74 65 33 57 68 65 72 65  ).  sqlite3Where
12bf0 54 72 61 63 65 20 3d 20 73 61 76 65 64 57 68 65  Trace = savedWhe
12c00 72 65 54 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a  reTrace;.#endif.
12c10 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 61 20 70  }../*.** Run a p
12c20 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
12c30 74 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  t.*/.static void
12c40 20 65 78 65 63 5f 70 72 65 70 61 72 65 64 5f 73   exec_prepared_s
12c50 74 6d 74 28 0a 20 20 53 68 65 6c 6c 53 74 61 74  tmt(.  ShellStat
12c60 65 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20  e *pArg,        
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
12c90 65 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74 65  er to ShellState
12ca0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   */.  sqlite3_st
12cb0 6d 74 20 2a 70 53 74 6d 74 2c 20 20 20 20 20 20  mt *pStmt,      
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cd0 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 6d 65         /* Statme
12ce0 6e 74 20 74 6f 20 72 75 6e 20 2a 2f 0a 20 20 69  nt to run */.  i
12cf0 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28  nt (*xCallback)(
12d00 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 2a 2a  void*,int,char**
12d10 2c 63 68 61 72 2a 2a 2c 69 6e 74 2a 29 20 20 20  ,char**,int*)   
12d20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  /* Callback func
12d30 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  tion */.){.  int
12d40 20 72 63 3b 0a 0a 20 20 2f 2a 20 70 65 72 66 6f   rc;..  /* perfo
12d50 72 6d 20 74 68 65 20 66 69 72 73 74 20 73 74 65  rm the first ste
12d60 70 2e 20 20 74 68 69 73 20 77 69 6c 6c 20 74 65  p.  this will te
12d70 6c 6c 20 75 73 20 69 66 20 77 65 0a 20 20 2a 2a  ll us if we.  **
12d80 20 68 61 76 65 20 61 20 72 65 73 75 6c 74 20 73   have a result s
12d90 65 74 20 6f 72 20 6e 6f 74 20 61 6e 64 20 68 6f  et or not and ho
12da0 77 20 77 69 64 65 20 69 74 20 69 73 2e 0a 20 20  w wide it is..  
12db0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
12dc0 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 20  3_step(pStmt);. 
12dd0 20 2f 2a 20 69 66 20 77 65 20 68 61 76 65 20 61   /* if we have a
12de0 20 72 65 73 75 6c 74 20 73 65 74 2e 2e 2e 20 2a   result set... *
12df0 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 52  /.  if( SQLITE_R
12e00 4f 57 20 3d 3d 20 72 63 20 29 7b 0a 20 20 20 20  OW == rc ){.    
12e10 2f 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20  /* if we have a 
12e20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 2a 2f 0a 20  callback... */. 
12e30 20 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63 6b     if( xCallback
12e40 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 61 6c 6c   ){.      /* all
12e50 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 20  ocate space for 
12e60 63 6f 6c 20 6e 61 6d 65 20 70 74 72 2c 20 76 61  col name ptr, va
12e70 6c 75 65 20 70 74 72 2c 20 61 6e 64 20 74 79 70  lue ptr, and typ
12e80 65 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 6e  e */.      int n
12e90 43 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  Col = sqlite3_co
12ea0 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74  lumn_count(pStmt
12eb0 29 3b 0a 20 20 20 20 20 20 76 6f 69 64 20 2a 70  );.      void *p
12ec0 44 61 74 61 20 3d 20 73 71 6c 69 74 65 33 5f 6d  Data = sqlite3_m
12ed0 61 6c 6c 6f 63 36 34 28 33 2a 6e 43 6f 6c 2a 73  alloc64(3*nCol*s
12ee0 69 7a 65 6f 66 28 63 6f 6e 73 74 20 63 68 61 72  izeof(const char
12ef0 2a 29 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 69  *) + 1);.      i
12f00 66 28 20 21 70 44 61 74 61 20 29 7b 0a 20 20 20  f( !pData ){.   
12f10 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
12f20 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 7d 65  _NOMEM;.      }e
12f30 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 63 68 61  lse{.        cha
12f40 72 20 2a 2a 61 7a 43 6f 6c 73 20 3d 20 28 63 68  r **azCols = (ch
12f50 61 72 20 2a 2a 29 70 44 61 74 61 3b 20 20 20 20  ar **)pData;    
12f60 20 20 2f 2a 20 4e 61 6d 65 73 20 6f 66 20 72 65    /* Names of re
12f70 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  sult columns */.
12f80 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 2a 61          char **a
12f90 7a 56 61 6c 73 20 3d 20 26 61 7a 43 6f 6c 73 5b  zVals = &azCols[
12fa0 6e 43 6f 6c 5d 3b 20 20 20 20 20 20 20 2f 2a 20  nCol];       /* 
12fb0 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 20 20 20  Results */.     
12fc0 20 20 20 69 6e 74 20 2a 61 69 54 79 70 65 73 20     int *aiTypes 
12fd0 3d 20 28 69 6e 74 20 2a 29 26 61 7a 56 61 6c 73  = (int *)&azVals
12fe0 5b 6e 43 6f 6c 5d 3b 20 2f 2a 20 52 65 73 75 6c  [nCol]; /* Resul
12ff0 74 20 74 79 70 65 73 20 2a 2f 0a 20 20 20 20 20  t types */.     
13000 20 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20 20     int i, x;.   
13010 20 20 20 20 20 61 73 73 65 72 74 28 73 69 7a 65       assert(size
13020 6f 66 28 69 6e 74 29 20 3c 3d 20 73 69 7a 65 6f  of(int) <= sizeo
13030 66 28 63 68 61 72 20 2a 29 29 3b 0a 20 20 20 20  f(char *));.    
13040 20 20 20 20 2f 2a 20 73 61 76 65 20 6f 66 66 20      /* save off 
13050 70 74 72 73 20 74 6f 20 63 6f 6c 75 6d 6e 20 6e  ptrs to column n
13060 61 6d 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  ames */.        
13070 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b  for(i=0; i<nCol;
13080 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
13090 20 61 7a 43 6f 6c 73 5b 69 5d 20 3d 20 28 63 68   azCols[i] = (ch
130a0 61 72 20 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  ar *)sqlite3_col
130b0 75 6d 6e 5f 6e 61 6d 65 28 70 53 74 6d 74 2c 20  umn_name(pStmt, 
130c0 69 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  i);.        }.  
130d0 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
130e0 20 20 20 20 2f 2a 20 65 78 74 72 61 63 74 20 74      /* extract t
130f0 68 65 20 64 61 74 61 20 61 6e 64 20 64 61 74 61  he data and data
13100 20 74 79 70 65 73 20 2a 2f 0a 20 20 20 20 20 20   types */.      
13110 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
13120 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Col; i++){.     
13130 20 20 20 20 20 20 20 61 69 54 79 70 65 73 5b 69         aiTypes[i
13140 5d 20 3d 20 78 20 3d 20 73 71 6c 69 74 65 33 5f  ] = x = sqlite3_
13150 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d  column_type(pStm
13160 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20  t, i);.         
13170 20 20 20 69 66 28 20 78 3d 3d 53 51 4c 49 54 45     if( x==SQLITE
13180 5f 42 4c 4f 42 20 26 26 20 70 41 72 67 20 26 26  _BLOB && pArg &&
13190 20 70 41 72 67 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f   pArg->cMode==MO
131a0 44 45 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20  DE_Insert ){.   
131b0 20 20 20 20 20 20 20 20 20 20 20 61 7a 56 61 6c             azVal
131c0 73 5b 69 5d 20 3d 20 22 22 3b 0a 20 20 20 20 20  s[i] = "";.     
131d0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
131e0 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 56 61              azVa
131f0 6c 73 5b 69 5d 20 3d 20 28 63 68 61 72 2a 29 73  ls[i] = (char*)s
13200 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
13210 78 74 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20  xt(pStmt, i);.  
13220 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
13230 20 20 20 20 20 20 20 20 69 66 28 20 21 61 7a 56          if( !azV
13240 61 6c 73 5b 69 5d 20 26 26 20 28 61 69 54 79 70  als[i] && (aiTyp
13250 65 73 5b 69 5d 21 3d 53 51 4c 49 54 45 5f 4e 55  es[i]!=SQLITE_NU
13260 4c 4c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  LL) ){.         
13270 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
13280 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 20 20  _NOMEM;.        
13290 20 20 20 20 20 20 62 72 65 61 6b 3b 20 2f 2a 20        break; /* 
132a0 66 72 6f 6d 20 66 6f 72 20 2a 2f 0a 20 20 20 20  from for */.    
132b0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
132c0 20 20 20 20 7d 20 2f 2a 20 65 6e 64 20 66 6f 72      } /* end for
132d0 20 2a 2f 0a 0a 20 20 20 20 20 20 20 20 20 20 2f   */..          /
132e0 2a 20 69 66 20 64 61 74 61 20 61 6e 64 20 74 79  * if data and ty
132f0 70 65 73 20 65 78 74 72 61 63 74 65 64 20 73 75  pes extracted su
13300 63 63 65 73 73 66 75 6c 6c 79 2e 2e 2e 20 2a 2f  ccessfully... */
13310 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 53  .          if( S
13320 51 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20  QLITE_ROW == rc 
13330 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ){.            /
13340 2a 20 63 61 6c 6c 20 74 68 65 20 73 75 70 70 6c  * call the suppl
13350 69 65 64 20 63 61 6c 6c 62 61 63 6b 20 77 69 74  ied callback wit
13360 68 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77  h the result row
13370 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 20 20 20   data */.       
13380 20 20 20 20 20 69 66 28 20 78 43 61 6c 6c 62 61       if( xCallba
13390 63 6b 28 70 41 72 67 2c 20 6e 43 6f 6c 2c 20 61  ck(pArg, nCol, a
133a0 7a 56 61 6c 73 2c 20 61 7a 43 6f 6c 73 2c 20 61  zVals, azCols, a
133b0 69 54 79 70 65 73 29 20 29 7b 0a 20 20 20 20 20  iTypes) ){.     
133c0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
133d0 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20  LITE_ABORT;.    
133e0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
13400 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
13410 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 20  Stmt);.         
13420 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
13430 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65  .        } while
13440 28 20 53 51 4c 49 54 45 5f 52 4f 57 20 3d 3d 20  ( SQLITE_ROW == 
13450 72 63 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  rc );.        sq
13460 6c 69 74 65 33 5f 66 72 65 65 28 70 44 61 74 61  lite3_free(pData
13470 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
13480 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 6f 7b 0a  else{.      do{.
13490 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
134a0 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
134b0 3b 0a 20 20 20 20 20 20 7d 20 77 68 69 6c 65 28  ;.      } while(
134c0 20 72 63 20 3d 3d 20 53 51 4c 49 54 45 5f 52 4f   rc == SQLITE_RO
134d0 57 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  W );.    }.  }.}
134e0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
134f0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
13500 4c 45 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75  LE./*.** This fu
13510 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
13520 20 74 6f 20 70 72 6f 63 65 73 73 20 53 51 4c 20   to process SQL 
13530 69 66 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  if the previous 
13540 73 68 65 6c 6c 20 63 6f 6d 6d 61 6e 64 0a 2a 2a  shell command.**
13550 20 77 61 73 20 22 2e 65 78 70 65 72 74 22 2e 20   was ".expert". 
13560 49 74 20 70 61 73 73 65 73 20 74 68 65 20 53 51  It passes the SQ
13570 4c 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  L in the second 
13580 61 72 67 75 6d 65 6e 74 20 64 69 72 65 63 74 6c  argument directl
13590 79 20 74 6f 0a 2a 2a 20 74 68 65 20 73 71 6c 69  y to.** the sqli
135a0 74 65 33 65 78 70 65 72 74 20 6f 62 6a 65 63 74  te3expert object
135b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 73 75 63 63 65  ..**.** If succe
135c0 73 73 66 75 6c 2c 20 53 51 4c 49 54 45 5f 4f 4b  ssful, SQLITE_OK
135d0 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 4f 74   is returned. Ot
135e0 68 65 72 77 69 73 65 2c 20 61 6e 20 53 51 4c 69  herwise, an SQLi
135f0 74 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65  te error.** code
13600 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  . In this case, 
13610 28 2a 70 7a 45 72 72 29 20 6d 61 79 20 62 65 20  (*pzErr) may be 
13620 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  set to point to 
13630 61 20 62 75 66 66 65 72 20 63 6f 6e 74 61 69 6e  a buffer contain
13640 69 6e 67 0a 2a 2a 20 61 6e 20 45 6e 67 6c 69 73  ing.** an Englis
13650 68 20 6c 61 6e 67 75 61 67 65 20 65 72 72 6f 72  h language error
13660 20 6d 65 73 73 61 67 65 2e 20 49 74 20 69 73 20   message. It is 
13670 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69 6c 69  the responsibili
13680 74 79 20 6f 66 20 74 68 65 0a 2a 2a 20 63 61 6c  ty of the.** cal
13690 6c 65 72 20 74 6f 20 65 76 65 6e 74 75 61 6c 6c  ler to eventuall
136a0 79 20 66 72 65 65 20 74 68 69 73 20 62 75 66 66  y free this buff
136b0 65 72 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  er using sqlite3
136c0 5f 66 72 65 65 28 29 2e 0a 2a 2f 0a 73 74 61 74  _free()..*/.stat
136d0 69 63 20 69 6e 74 20 65 78 70 65 72 74 48 61 6e  ic int expertHan
136e0 64 6c 65 53 51 4c 28 0a 20 20 53 68 65 6c 6c 53  dleSQL(.  ShellS
136f0 74 61 74 65 20 2a 70 53 74 61 74 65 2c 20 0a 20  tate *pState, . 
13700 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71   const char *zSq
13710 6c 2c 20 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45  l, .  char **pzE
13720 72 72 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20  rr.){.  assert( 
13730 70 53 74 61 74 65 2d 3e 65 78 70 65 72 74 2e 70  pState->expert.p
13740 45 78 70 65 72 74 20 29 3b 0a 20 20 61 73 73 65  Expert );.  asse
13750 72 74 28 20 70 7a 45 72 72 3d 3d 30 20 7c 7c 20  rt( pzErr==0 || 
13760 2a 70 7a 45 72 72 3d 3d 30 20 29 3b 0a 20 20 72  *pzErr==0 );.  r
13770 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 65 78  eturn sqlite3_ex
13780 70 65 72 74 5f 73 71 6c 28 70 53 74 61 74 65 2d  pert_sql(pState-
13790 3e 65 78 70 65 72 74 2e 70 45 78 70 65 72 74 2c  >expert.pExpert,
137a0 20 7a 53 71 6c 2c 20 70 7a 45 72 72 29 3b 0a 7d   zSql, pzErr);.}
137b0 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ../*.** This fun
137c0 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20  ction is called 
137d0 65 69 74 68 65 72 20 74 6f 20 73 69 6c 65 6e 74  either to silent
137e0 6c 79 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20  ly clean up the 
137f0 6f 62 6a 65 63 74 0a 2a 2a 20 63 72 65 61 74 65  object.** create
13800 64 20 62 79 20 74 68 65 20 22 2e 65 78 70 65 72  d by the ".exper
13810 74 22 20 63 6f 6d 6d 61 6e 64 20 28 69 66 20 62  t" command (if b
13820 43 61 6e 63 65 6c 3d 3d 31 29 2c 20 6f 72 20 74  Cancel==1), or t
13830 6f 20 67 65 6e 65 72 61 74 65 20 61 20 0a 2a 2a  o generate a .**
13840 20 72 65 70 6f 72 74 20 66 72 6f 6d 20 69 74 20   report from it 
13850 61 6e 64 20 74 68 65 6e 20 63 6c 65 61 6e 20 69  and then clean i
13860 74 20 75 70 20 28 69 66 20 62 43 61 6e 63 65 6c  t up (if bCancel
13870 3d 3d 30 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 73  ==0)..**.** If s
13880 75 63 63 65 73 73 66 75 6c 2c 20 53 51 4c 49 54  uccessful, SQLIT
13890 45 5f 4f 4b 20 69 73 20 72 65 74 75 72 6e 65 64  E_OK is returned
138a0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 61 6e 20  . Otherwise, an 
138b0 53 51 4c 69 74 65 20 65 72 72 6f 72 0a 2a 2a 20  SQLite error.** 
138c0 63 6f 64 65 2e 20 49 6e 20 74 68 69 73 20 63 61  code. In this ca
138d0 73 65 2c 20 28 2a 70 7a 45 72 72 29 20 6d 61 79  se, (*pzErr) may
138e0 20 62 65 20 73 65 74 20 74 6f 20 70 6f 69 6e 74   be set to point
138f0 20 74 6f 20 61 20 62 75 66 66 65 72 20 63 6f 6e   to a buffer con
13900 74 61 69 6e 69 6e 67 0a 2a 2a 20 61 6e 20 45 6e  taining.** an En
13910 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65  glish language e
13920 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 49 74  rror message. It
13930 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69   is the responsi
13940 62 69 6c 69 74 79 20 6f 66 20 74 68 65 0a 2a 2a  bility of the.**
13950 20 63 61 6c 6c 65 72 20 74 6f 20 65 76 65 6e 74   caller to event
13960 75 61 6c 6c 79 20 66 72 65 65 20 74 68 69 73 20  ually free this 
13970 62 75 66 66 65 72 20 75 73 69 6e 67 20 73 71 6c  buffer using sql
13980 69 74 65 33 5f 66 72 65 65 28 29 2e 0a 2a 2f 0a  ite3_free()..*/.
13990 73 74 61 74 69 63 20 69 6e 74 20 65 78 70 65 72  static int exper
139a0 74 46 69 6e 69 73 68 28 0a 20 20 53 68 65 6c 6c  tFinish(.  Shell
139b0 53 74 61 74 65 20 2a 70 53 74 61 74 65 2c 0a 20  State *pState,. 
139c0 20 69 6e 74 20 62 43 61 6e 63 65 6c 2c 0a 20 20   int bCancel,.  
139d0 63 68 61 72 20 2a 2a 70 7a 45 72 72 0a 29 7b 0a  char **pzErr.){.
139e0 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
139f0 45 5f 4f 4b 3b 0a 20 20 73 71 6c 69 74 65 33 65  E_OK;.  sqlite3e
13a00 78 70 65 72 74 20 2a 70 20 3d 20 70 53 74 61 74  xpert *p = pStat
13a10 65 2d 3e 65 78 70 65 72 74 2e 70 45 78 70 65 72  e->expert.pExper
13a20 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 20 29  t;.  assert( p )
13a30 3b 0a 20 20 61 73 73 65 72 74 28 20 62 43 61 6e  ;.  assert( bCan
13a40 63 65 6c 20 7c 7c 20 70 7a 45 72 72 3d 3d 30 20  cel || pzErr==0 
13a50 7c 7c 20 2a 70 7a 45 72 72 3d 3d 30 20 29 3b 0a  || *pzErr==0 );.
13a60 20 20 69 66 28 20 62 43 61 6e 63 65 6c 3d 3d 30    if( bCancel==0
13a70 20 29 7b 0a 20 20 20 20 46 49 4c 45 20 2a 6f 75   ){.    FILE *ou
13a80 74 20 3d 20 70 53 74 61 74 65 2d 3e 6f 75 74 3b  t = pState->out;
13a90 0a 20 20 20 20 69 6e 74 20 62 56 65 72 62 6f 73  .    int bVerbos
13aa0 65 20 3d 20 70 53 74 61 74 65 2d 3e 65 78 70 65  e = pState->expe
13ab0 72 74 2e 62 56 65 72 62 6f 73 65 3b 0a 0a 20 20  rt.bVerbose;..  
13ac0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
13ad0 78 70 65 72 74 5f 61 6e 61 6c 79 7a 65 28 70 2c  xpert_analyze(p,
13ae0 20 70 7a 45 72 72 29 3b 0a 20 20 20 20 69 66 28   pzErr);.    if(
13af0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
13b00 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 51 75 65  {.      int nQue
13b10 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 70  ry = sqlite3_exp
13b20 65 72 74 5f 63 6f 75 6e 74 28 70 29 3b 0a 20 20  ert_count(p);.  
13b30 20 20 20 20 69 6e 74 20 69 3b 0a 0a 20 20 20 20      int i;..    
13b40 20 20 69 66 28 20 62 56 65 72 62 6f 73 65 20 29    if( bVerbose )
13b50 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  {.        const 
13b60 63 68 61 72 20 2a 7a 43 61 6e 64 20 3d 20 73 71  char *zCand = sq
13b70 6c 69 74 65 33 5f 65 78 70 65 72 74 5f 72 65 70  lite3_expert_rep
13b80 6f 72 74 28 70 2c 30 2c 45 58 50 45 52 54 5f 52  ort(p,0,EXPERT_R
13b90 45 50 4f 52 54 5f 43 41 4e 44 49 44 41 54 45 53  EPORT_CANDIDATES
13ba0 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  );.        raw_p
13bb0 72 69 6e 74 66 28 6f 75 74 2c 20 22 2d 2d 20 43  rintf(out, "-- C
13bc0 61 6e 64 69 64 61 74 65 73 20 2d 2d 2d 2d 2d 2d  andidates ------
13bd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13be0 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 20 20 20  -------\n");.   
13bf0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
13c00 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 43 61  out, "%s\n", zCa
13c10 6e 64 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  nd);.      }.   
13c20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 51     for(i=0; i<nQ
13c30 75 65 72 79 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  uery; i++){.    
13c40 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
13c50 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 65  zSql = sqlite3_e
13c60 78 70 65 72 74 5f 72 65 70 6f 72 74 28 70 2c 20  xpert_report(p, 
13c70 69 2c 20 45 58 50 45 52 54 5f 52 45 50 4f 52 54  i, EXPERT_REPORT
13c80 5f 53 51 4c 29 3b 0a 20 20 20 20 20 20 20 20 63  _SQL);.        c
13c90 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 64 78 20  onst char *zIdx 
13ca0 3d 20 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74  = sqlite3_expert
13cb0 5f 72 65 70 6f 72 74 28 70 2c 20 69 2c 20 45 58  _report(p, i, EX
13cc0 50 45 52 54 5f 52 45 50 4f 52 54 5f 49 4e 44 45  PERT_REPORT_INDE
13cd0 58 45 53 29 3b 0a 20 20 20 20 20 20 20 20 63 6f  XES);.        co
13ce0 6e 73 74 20 63 68 61 72 20 2a 7a 45 51 50 20 3d  nst char *zEQP =
13cf0 20 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f   sqlite3_expert_
13d00 72 65 70 6f 72 74 28 70 2c 20 69 2c 20 45 58 50  report(p, i, EXP
13d10 45 52 54 5f 52 45 50 4f 52 54 5f 50 4c 41 4e 29  ERT_REPORT_PLAN)
13d20 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 49  ;.        if( zI
13d30 64 78 3d 3d 30 20 29 20 7a 49 64 78 20 3d 20 22  dx==0 ) zIdx = "
13d40 28 6e 6f 20 6e 65 77 20 69 6e 64 65 78 65 73 29  (no new indexes)
13d50 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 69 66 28  \n";.        if(
13d60 20 62 56 65 72 62 6f 73 65 20 29 7b 0a 20 20 20   bVerbose ){.   
13d70 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
13d80 66 28 6f 75 74 2c 20 22 2d 2d 20 51 75 65 72 79  f(out, "-- Query
13d90 20 25 64 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   %d ------------
13da0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13db0 2d 2d 2d 2d 5c 6e 22 2c 69 2b 31 29 3b 0a 20 20  ----\n",i+1);.  
13dc0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
13dd0 74 66 28 6f 75 74 2c 20 22 25 73 5c 6e 5c 6e 22  tf(out, "%s\n\n"
13de0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 20  , zSql);.       
13df0 20 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70   }.        raw_p
13e00 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 5c 6e  rintf(out, "%s\n
13e10 22 2c 20 7a 49 64 78 29 3b 0a 20 20 20 20 20 20  ", zIdx);.      
13e20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
13e30 2c 20 22 25 73 5c 6e 22 2c 20 7a 45 51 50 29 3b  , "%s\n", zEQP);
13e40 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
13e50 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 70   }.  sqlite3_exp
13e60 65 72 74 5f 64 65 73 74 72 6f 79 28 70 29 3b 0a  ert_destroy(p);.
13e70 20 20 70 53 74 61 74 65 2d 3e 65 78 70 65 72 74    pState->expert
13e80 2e 70 45 78 70 65 72 74 20 3d 20 30 3b 0a 20 20  .pExpert = 0;.  
13e90 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
13ea0 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69  .** Implementati
13eb0 6f 6e 20 6f 66 20 22 2e 65 78 70 65 72 74 22 20  on of ".expert" 
13ec0 64 6f 74 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a  dot command..*/.
13ed0 73 74 61 74 69 63 20 69 6e 74 20 65 78 70 65 72  static int exper
13ee0 74 44 6f 74 43 6f 6d 6d 61 6e 64 28 0a 20 20 53  tDotCommand(.  S
13ef0 68 65 6c 6c 53 74 61 74 65 20 2a 70 53 74 61 74  hellState *pStat
13f00 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e,             /
13f10 2a 20 43 75 72 72 65 6e 74 20 73 68 65 6c 6c 20  * Current shell 
13f20 74 6f 6f 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20  tool state */.  
13f30 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20  char **azArg,   
13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f50 2f 2a 20 41 72 72 61 79 20 6f 66 20 61 72 67 75  /* Array of argu
13f60 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
13f70 64 6f 74 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  dot command */. 
13f80 20 69 6e 74 20 6e 41 72 67 20 20 20 20 20 20 20   int nArg       
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fa0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
13fb0 74 72 69 65 73 20 69 6e 20 61 7a 41 72 67 5b 5d  tries in azArg[]
13fc0 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20   */.){.  int rc 
13fd0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 63  = SQLITE_OK;.  c
13fe0 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20  har *zErr = 0;. 
13ff0 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 69 53   int i;.  int iS
14000 61 6d 70 6c 65 20 3d 20 30 3b 0a 0a 20 20 61 73  ample = 0;..  as
14010 73 65 72 74 28 20 70 53 74 61 74 65 2d 3e 65 78  sert( pState->ex
14020 70 65 72 74 2e 70 45 78 70 65 72 74 3d 3d 30 20  pert.pExpert==0 
14030 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 70 53 74  );.  memset(&pSt
14040 61 74 65 2d 3e 65 78 70 65 72 74 2c 20 30 2c 20  ate->expert, 0, 
14050 73 69 7a 65 6f 66 28 45 78 70 65 72 74 49 6e 66  sizeof(ExpertInf
14060 6f 29 29 3b 0a 0a 20 20 66 6f 72 28 69 3d 31 3b  o));..  for(i=1;
14070 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
14080 26 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  & i<nArg; i++){.
14090 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a      char *z = az
140a0 41 72 67 5b 69 5d 3b 0a 20 20 20 20 69 6e 74 20  Arg[i];.    int 
140b0 6e 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d  n;.    if( z[0]=
140c0 3d 27 2d 27 20 26 26 20 7a 5b 31 5d 3d 3d 27 2d  ='-' && z[1]=='-
140d0 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 6e 20 3d  ' ) z++;.    n =
140e0 20 73 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20 20   strlen30(z);.  
140f0 20 20 69 66 28 20 6e 3e 3d 32 20 26 26 20 30 3d    if( n>=2 && 0=
14100 3d 73 74 72 6e 63 6d 70 28 7a 2c 20 22 2d 76 65  =strncmp(z, "-ve
14110 72 62 6f 73 65 22 2c 20 6e 29 20 29 7b 0a 20 20  rbose", n) ){.  
14120 20 20 20 20 70 53 74 61 74 65 2d 3e 65 78 70 65      pState->expe
14130 72 74 2e 62 56 65 72 62 6f 73 65 20 3d 20 31 3b  rt.bVerbose = 1;
14140 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20  .    }.    else 
14150 69 66 28 20 6e 3e 3d 32 20 26 26 20 30 3d 3d 73  if( n>=2 && 0==s
14160 74 72 6e 63 6d 70 28 7a 2c 20 22 2d 73 61 6d 70  trncmp(z, "-samp
14170 6c 65 22 2c 20 6e 29 20 29 7b 0a 20 20 20 20 20  le", n) ){.     
14180 20 69 66 28 20 69 3d 3d 28 6e 41 72 67 2d 31 29   if( i==(nArg-1)
14190 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
141a0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
141b0 6f 70 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20  option requires 
141c0 61 6e 20 61 72 67 75 6d 65 6e 74 3a 20 25 73 5c  an argument: %s\
141d0 6e 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20  n", z);.        
141e0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
141f0 52 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  R;.      }else{.
14200 20 20 20 20 20 20 20 20 69 53 61 6d 70 6c 65 20          iSample 
14210 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61  = (int)integerVa
14220 6c 75 65 28 61 7a 41 72 67 5b 2b 2b 69 5d 29 3b  lue(azArg[++i]);
14230 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 53 61  .        if( iSa
14240 6d 70 6c 65 3c 30 20 7c 7c 20 69 53 61 6d 70 6c  mple<0 || iSampl
14250 65 3e 31 30 30 20 29 7b 0a 20 20 20 20 20 20 20  e>100 ){.       
14260 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
14270 64 65 72 72 2c 20 22 76 61 6c 75 65 20 6f 75 74  derr, "value out
14280 20 6f 66 20 72 61 6e 67 65 3a 20 25 73 5c 6e 22   of range: %s\n"
14290 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
142a0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
142b0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
142c0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
142d0 7d 0a 20 20 20 20 65 6c 73 65 7b 0a 20 20 20 20  }.    else{.    
142e0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
142f0 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f 70  err, "unknown op
14300 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 7a 29 3b  tion: %s\n", z);
14310 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
14320 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  TE_ERROR;.    }.
14330 20 20 7d 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53    }..  if( rc==S
14340 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
14350 70 53 74 61 74 65 2d 3e 65 78 70 65 72 74 2e 70  pState->expert.p
14360 45 78 70 65 72 74 20 3d 20 73 71 6c 69 74 65 33  Expert = sqlite3
14370 5f 65 78 70 65 72 74 5f 6e 65 77 28 70 53 74 61  _expert_new(pSta
14380 74 65 2d 3e 64 62 2c 20 26 7a 45 72 72 29 3b 0a  te->db, &zErr);.
14390 20 20 20 20 69 66 28 20 70 53 74 61 74 65 2d 3e      if( pState->
143a0 65 78 70 65 72 74 2e 70 45 78 70 65 72 74 3d 3d  expert.pExpert==
143b0 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
143c0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 73  rintf(stderr, "s
143d0 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f 6e 65  qlite3_expert_ne
143e0 77 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 29 3b  w: %s\n", zErr);
143f0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
14400 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65  TE_ERROR;.    }e
14410 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
14420 65 33 5f 65 78 70 65 72 74 5f 63 6f 6e 66 69 67  e3_expert_config
14430 28 0a 20 20 20 20 20 20 20 20 20 20 70 53 74 61  (.          pSta
14440 74 65 2d 3e 65 78 70 65 72 74 2e 70 45 78 70 65  te->expert.pExpe
14450 72 74 2c 20 45 58 50 45 52 54 5f 43 4f 4e 46 49  rt, EXPERT_CONFI
14460 47 5f 53 41 4d 50 4c 45 2c 20 69 53 61 6d 70 6c  G_SAMPLE, iSampl
14470 65 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d  e.      );.    }
14480 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 72  .  }..  return r
14490 63 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69  c;.}.#endif /* i
144a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
144b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
144c0 2f 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65  /../*.** Execute
144d0 20 61 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20   a statement or 
144e0 73 65 74 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  set of statement
144f0 73 2e 20 20 50 72 69 6e 74 0a 2a 2a 20 61 6e 79  s.  Print.** any
14500 20 72 65 73 75 6c 74 20 72 6f 77 73 2f 63 6f 6c   result rows/col
14510 75 6d 6e 73 20 64 65 70 65 6e 64 69 6e 67 20 6f  umns depending o
14520 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f  n the current mo
14530 64 65 0a 2a 2a 20 73 65 74 20 76 69 61 20 74 68  de.** set via th
14540 65 20 73 75 70 70 6c 69 65 64 20 63 61 6c 6c 62  e supplied callb
14550 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ack..**.** This 
14560 69 73 20 76 65 72 79 20 73 69 6d 69 6c 61 72 20  is very similar 
14570 74 6f 20 53 51 4c 69 74 65 27 73 20 62 75 69 6c  to SQLite's buil
14580 74 2d 69 6e 20 73 71 6c 69 74 65 33 5f 65 78 65  t-in sqlite3_exe
14590 63 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  c().** function 
145a0 65 78 63 65 70 74 20 69 74 20 74 61 6b 65 73 20  except it takes 
145b0 61 20 73 6c 69 67 68 74 6c 79 20 64 69 66 66 65  a slightly diffe
145c0 72 65 6e 74 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a  rent callback.**
145d0 20 61 6e 64 20 63 61 6c 6c 62 61 63 6b 20 64 61   and callback da
145e0 74 61 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  ta argument..*/.
145f0 73 74 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c  static int shell
14600 5f 65 78 65 63 28 0a 20 20 73 71 6c 69 74 65 33  _exec(.  sqlite3
14610 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20   *db,           
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 2f 2a 20 41 6e 20 6f 70 65 6e 20 64 61     /* An open da
14640 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
14650 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20  t char *zSql,   
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14670 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 74 6f 20        /* SQL to 
14680 62 65 20 65 76 61 6c 75 61 74 65 64 20 2a 2f 0a  be evaluated */.
14690 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63    int (*xCallbac
146a0 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61  k)(void*,int,cha
146b0 72 2a 2a 2c 63 68 61 72 2a 2a 2c 69 6e 74 2a 29  r**,char**,int*)
146c0 2c 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  ,   /* Callback 
146d0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
146e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14700 20 20 20 20 20 20 20 20 2f 2a 20 28 6e 6f 74 20          /* (not 
14710 74 68 65 20 73 61 6d 65 20 61 73 20 73 71 6c 69  the same as sqli
14720 74 65 33 5f 65 78 65 63 29 20 2a 2f 0a 20 20 53  te3_exec) */.  S
14730 68 65 6c 6c 53 74 61 74 65 20 2a 70 41 72 67 2c  hellState *pArg,
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14750 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
14760 74 65 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74  ter to ShellStat
14770 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  e */.  char **pz
14780 45 72 72 4d 73 67 20 20 20 20 20 20 20 20 20 20  ErrMsg          
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 2f 2a 20 45 72 72 6f 72 20 6d 73 67 20 77 72   /* Error msg wr
147b0 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b  itten here */.){
147c0 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
147d0 2a 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20 20  *pStmt = NULL;  
147e0 20 20 20 2f 2a 20 53 74 61 74 65 6d 65 6e 74 20     /* Statement 
147f0 74 6f 20 65 78 65 63 75 74 65 2e 20 2a 2f 0a 20  to execute. */. 
14800 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
14810 5f 4f 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20  _OK;            
14820 20 2f 2a 20 52 65 74 75 72 6e 20 43 6f 64 65 20   /* Return Code 
14830 2a 2f 0a 20 20 69 6e 74 20 72 63 32 3b 0a 20 20  */.  int rc2;.  
14840 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66  const char *zLef
14850 74 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20  tover;          
14860 2f 2a 20 54 61 69 6c 20 6f 66 20 75 6e 70 72 6f  /* Tail of unpro
14870 63 65 73 73 65 64 20 53 51 4c 20 2a 2f 0a 0a 20  cessed SQL */.. 
14880 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b   if( pzErrMsg ){
14890 0a 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d  .    *pzErrMsg =
148a0 20 4e 55 4c 4c 3b 0a 20 20 7d 0a 0a 23 69 66 6e   NULL;.  }..#ifn
148b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
148c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
148d0 66 28 20 70 41 72 67 2d 3e 65 78 70 65 72 74 2e  f( pArg->expert.
148e0 70 45 78 70 65 72 74 20 29 7b 0a 20 20 20 20 72  pExpert ){.    r
148f0 63 20 3d 20 65 78 70 65 72 74 48 61 6e 64 6c 65  c = expertHandle
14900 53 51 4c 28 70 41 72 67 2c 20 7a 53 71 6c 2c 20  SQL(pArg, zSql, 
14910 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 72  pzErrMsg);.    r
14920 65 74 75 72 6e 20 65 78 70 65 72 74 46 69 6e 69  eturn expertFini
14930 73 68 28 70 41 72 67 2c 20 28 72 63 21 3d 53 51  sh(pArg, (rc!=SQ
14940 4c 49 54 45 5f 4f 4b 29 2c 20 70 7a 45 72 72 4d  LITE_OK), pzErrM
14950 73 67 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  sg);.  }.#endif.
14960 0a 20 20 77 68 69 6c 65 28 20 7a 53 71 6c 5b 30  .  while( zSql[0
14970 5d 20 26 26 20 28 53 51 4c 49 54 45 5f 4f 4b 20  ] && (SQLITE_OK 
14980 3d 3d 20 72 63 29 20 29 7b 0a 20 20 20 20 73 74  == rc) ){.    st
14990 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
149a0 2a 7a 53 74 6d 74 53 71 6c 3b 0a 20 20 20 20 72  *zStmtSql;.    r
149b0 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
149c0 61 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c  are_v2(db, zSql,
149d0 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 26 7a 4c   -1, &pStmt, &zL
149e0 65 66 74 6f 76 65 72 29 3b 0a 20 20 20 20 69 66  eftover);.    if
149f0 28 20 53 51 4c 49 54 45 5f 4f 4b 20 21 3d 20 72  ( SQLITE_OK != r
14a00 63 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  c ){.      if( p
14a10 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20  zErrMsg ){.     
14a20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 73     *pzErrMsg = s
14a30 61 76 65 5f 65 72 72 5f 6d 73 67 28 64 62 29 3b  ave_err_msg(db);
14a40 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
14a50 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21 70  se{.      if( !p
14a60 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Stmt ){.        
14a70 2f 2a 20 74 68 69 73 20 68 61 70 70 65 6e 73 20  /* this happens 
14a80 66 6f 72 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 72  for a comment or
14a90 20 77 68 69 74 65 2d 73 70 61 63 65 20 2a 2f 0a   white-space */.
14aa0 20 20 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a          zSql = z
14ab0 4c 65 66 74 6f 76 65 72 3b 0a 20 20 20 20 20 20  Leftover;.      
14ac0 20 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65    while( IsSpace
14ad0 28 7a 53 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c  (zSql[0]) ) zSql
14ae0 2b 2b 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74  ++;.        cont
14af0 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20  inue;.      }.  
14b00 20 20 20 20 7a 53 74 6d 74 53 71 6c 20 3d 20 73      zStmtSql = s
14b10 71 6c 69 74 65 33 5f 73 71 6c 28 70 53 74 6d 74  qlite3_sql(pStmt
14b20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 53 74  );.      if( zSt
14b30 6d 74 53 71 6c 3d 3d 30 20 29 20 7a 53 74 6d 74  mtSql==0 ) zStmt
14b40 53 71 6c 20 3d 20 22 22 3b 0a 20 20 20 20 20 20  Sql = "";.      
14b50 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a  while( IsSpace(z
14b60 53 74 6d 74 53 71 6c 5b 30 5d 29 20 29 20 7a 53  StmtSql[0]) ) zS
14b70 74 6d 74 53 71 6c 2b 2b 3b 0a 0a 20 20 20 20 20  tmtSql++;..     
14b80 20 2f 2a 20 73 61 76 65 20 6f 66 66 20 74 68 65   /* save off the
14b90 20 70 72 65 70 61 72 65 64 20 73 74 61 74 6d 65   prepared statme
14ba0 6e 74 20 68 61 6e 64 6c 65 20 61 6e 64 20 72 65  nt handle and re
14bb0 73 65 74 20 72 6f 77 20 63 6f 75 6e 74 20 2a 2f  set row count */
14bc0 0a 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20  .      if( pArg 
14bd0 29 7b 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d  ){.        pArg-
14be0 3e 70 53 74 6d 74 20 3d 20 70 53 74 6d 74 3b 0a  >pStmt = pStmt;.
14bf0 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e 63 6e          pArg->cn
14c00 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a  t = 0;.      }..
14c10 20 20 20 20 20 20 2f 2a 20 65 63 68 6f 20 74 68        /* echo th
14c20 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20  e sql statement 
14c30 69 66 20 65 63 68 6f 20 6f 6e 20 2a 2f 0a 20 20  if echo on */.  
14c40 20 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20      if( pArg && 
14c50 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 41 72  ShellHasFlag(pAr
14c60 67 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29 20 29  g, SHFLG_Echo) )
14c70 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
14c80 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
14c90 20 22 25 73 5c 6e 22 2c 20 7a 53 74 6d 74 53 71   "%s\n", zStmtSq
14ca0 6c 20 3f 20 7a 53 74 6d 74 53 71 6c 20 3a 20 7a  l ? zStmtSql : z
14cb0 53 71 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  Sql);.      }.. 
14cc0 20 20 20 20 20 2f 2a 20 53 68 6f 77 20 74 68 65       /* Show the
14cd0 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
14ce0 4c 41 4e 20 69 66 20 2e 65 71 70 20 69 73 20 6f  LAN if .eqp is o
14cf0 6e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  n */.      if( p
14d00 41 72 67 20 26 26 20 70 41 72 67 2d 3e 61 75 74  Arg && pArg->aut
14d10 6f 45 51 50 20 26 26 20 73 71 6c 69 74 65 33 5f  oEQP && sqlite3_
14d20 73 74 72 6c 69 6b 65 28 22 45 58 50 4c 41 49 4e  strlike("EXPLAIN
14d30 25 22 2c 7a 53 74 6d 74 53 71 6c 2c 30 29 21 3d  %",zStmtSql,0)!=
14d40 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
14d50 69 74 65 33 5f 73 74 6d 74 20 2a 70 45 78 70 6c  ite3_stmt *pExpl
14d60 61 69 6e 3b 0a 20 20 20 20 20 20 20 20 63 68 61  ain;.        cha
14d70 72 20 2a 7a 45 51 50 3b 0a 20 20 20 20 20 20 20  r *zEQP;.       
14d80 20 69 6e 74 20 74 72 69 67 67 65 72 45 51 50 20   int triggerEQP 
14d90 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 64 69 73  = 0;.        dis
14da0 61 62 6c 65 5f 64 65 62 75 67 5f 74 72 61 63 65  able_debug_trace
14db0 5f 6d 6f 64 65 73 28 29 3b 0a 20 20 20 20 20 20  _modes();.      
14dc0 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e    sqlite3_db_con
14dd0 66 69 67 28 64 62 2c 20 53 51 4c 49 54 45 5f 44  fig(db, SQLITE_D
14de0 42 43 4f 4e 46 49 47 5f 54 52 49 47 47 45 52 5f  BCONFIG_TRIGGER_
14df0 45 51 50 2c 20 2d 31 2c 20 26 74 72 69 67 67 65  EQP, -1, &trigge
14e00 72 45 51 50 29 3b 0a 20 20 20 20 20 20 20 20 69  rEQP);.        i
14e10 66 28 20 70 41 72 67 2d 3e 61 75 74 6f 45 51 50  f( pArg->autoEQP
14e20 3e 3d 41 55 54 4f 45 51 50 5f 74 72 69 67 67 65  >=AUTOEQP_trigge
14e30 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  r ){.          s
14e40 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67  qlite3_db_config
14e50 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 43 4f  (db, SQLITE_DBCO
14e60 4e 46 49 47 5f 54 52 49 47 47 45 52 5f 45 51 50  NFIG_TRIGGER_EQP
14e70 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 1, 0);.       
14e80 20 7d 0a 20 20 20 20 20 20 20 20 7a 45 51 50 20   }.        zEQP 
14e90 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
14ea0 66 28 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59  f("EXPLAIN QUERY
14eb0 20 50 4c 41 4e 20 25 73 22 2c 20 7a 53 74 6d 74   PLAN %s", zStmt
14ec0 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 72 63  Sql);.        rc
14ed0 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
14ee0 72 65 5f 76 32 28 64 62 2c 20 7a 45 51 50 2c 20  re_v2(db, zEQP, 
14ef0 2d 31 2c 20 26 70 45 78 70 6c 61 69 6e 2c 20 30  -1, &pExplain, 0
14f00 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
14f10 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
14f20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28            while(
14f30 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 45   sqlite3_step(pE
14f40 78 70 6c 61 69 6e 29 3d 3d 53 51 4c 49 54 45 5f  xplain)==SQLITE_
14f50 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ROW ){.         
14f60 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
14f70 72 67 2d 3e 6f 75 74 2c 22 2d 2d 45 51 50 2d 2d  rg->out,"--EQP--
14f80 20 25 64 2c 22 2c 73 71 6c 69 74 65 33 5f 63 6f   %d,",sqlite3_co
14f90 6c 75 6d 6e 5f 69 6e 74 28 70 45 78 70 6c 61 69  lumn_int(pExplai
14fa0 6e 2c 20 30 29 29 3b 0a 20 20 20 20 20 20 20 20  n, 0));.        
14fb0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
14fc0 41 72 67 2d 3e 6f 75 74 2c 22 25 64 2c 22 2c 20  Arg->out,"%d,", 
14fd0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
14fe0 6e 74 28 70 45 78 70 6c 61 69 6e 2c 20 31 29 29  nt(pExplain, 1))
14ff0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61  ;.            ra
15000 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
15010 75 74 2c 22 25 64 2c 22 2c 20 73 71 6c 69 74 65  ut,"%d,", sqlite
15020 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45 78  3_column_int(pEx
15030 70 6c 61 69 6e 2c 20 32 29 29 3b 0a 20 20 20 20  plain, 2));.    
15040 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
15050 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25  ntf(pArg->out,"%
15060 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f  s\n", sqlite3_co
15070 6c 75 6d 6e 5f 74 65 78 74 28 70 45 78 70 6c 61  lumn_text(pExpla
15080 69 6e 2c 20 33 29 29 3b 0a 20 20 20 20 20 20 20  in, 3));.       
15090 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
150a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
150b0 69 6e 61 6c 69 7a 65 28 70 45 78 70 6c 61 69 6e  inalize(pExplain
150c0 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
150d0 65 33 5f 66 72 65 65 28 7a 45 51 50 29 3b 0a 20  e3_free(zEQP);. 
150e0 20 20 20 20 20 20 20 69 66 28 20 70 41 72 67 2d         if( pArg-
150f0 3e 61 75 74 6f 45 51 50 3e 3d 41 55 54 4f 45 51  >autoEQP>=AUTOEQ
15100 50 5f 66 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  P_full ){.      
15110 20 20 20 20 2f 2a 20 41 6c 73 6f 20 64 6f 20 61      /* Also do a
15120 6e 20 45 58 50 4c 41 49 4e 20 66 6f 72 20 22 2e  n EXPLAIN for ".
15130 65 71 70 20 66 75 6c 6c 22 20 6d 6f 64 65 20 2a  eqp full" mode *
15140 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 45 51 50  /.          zEQP
15150 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
15160 74 66 28 22 45 58 50 4c 41 49 4e 20 25 73 22 2c  tf("EXPLAIN %s",
15170 20 7a 53 74 6d 74 53 71 6c 29 3b 0a 20 20 20 20   zStmtSql);.    
15180 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
15190 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62  e3_prepare_v2(db
151a0 2c 20 7a 45 51 50 2c 20 2d 31 2c 20 26 70 45 78  , zEQP, -1, &pEx
151b0 70 6c 61 69 6e 2c 20 30 29 3b 0a 20 20 20 20 20  plain, 0);.     
151c0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
151d0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
151e0 20 20 20 20 20 20 70 41 72 67 2d 3e 63 4d 6f 64        pArg->cMod
151f0 65 20 3d 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e  e = MODE_Explain
15200 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 78  ;.            ex
15210 70 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61  plain_data_prepa
15220 72 65 28 70 41 72 67 2c 20 70 45 78 70 6c 61 69  re(pArg, pExplai
15230 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  n);.            
15240 65 78 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74  exec_prepared_st
15250 6d 74 28 70 41 72 67 2c 20 70 45 78 70 6c 61 69  mt(pArg, pExplai
15260 6e 2c 20 78 43 61 6c 6c 62 61 63 6b 29 3b 0a 20  n, xCallback);. 
15270 20 20 20 20 20 20 20 20 20 20 20 65 78 70 6c 61             expla
15280 69 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 70  in_data_delete(p
15290 41 72 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Arg);.          
152a0 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  }.          sqli
152b0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78  te3_finalize(pEx
152c0 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 20 20  plain);.        
152d0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
152e0 45 51 50 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  EQP);.        }.
152f0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
15300 64 62 5f 63 6f 6e 66 69 67 28 64 62 2c 20 53 51  db_config(db, SQ
15310 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 54 52  LITE_DBCONFIG_TR
15320 49 47 47 45 52 5f 45 51 50 2c 20 74 72 69 67 67  IGGER_EQP, trigg
15330 65 72 45 51 50 2c 20 30 29 3b 0a 20 20 20 20 20  erEQP, 0);.     
15340 20 20 20 72 65 73 74 6f 72 65 5f 64 65 62 75 67     restore_debug
15350 5f 74 72 61 63 65 5f 6d 6f 64 65 73 28 29 3b 0a  _trace_modes();.
15360 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
15370 66 28 20 70 41 72 67 20 29 7b 0a 20 20 20 20 20  f( pArg ){.     
15380 20 20 20 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d     pArg->cMode =
15390 20 70 41 72 67 2d 3e 6d 6f 64 65 3b 0a 20 20 20   pArg->mode;.   
153a0 20 20 20 20 20 69 66 28 20 70 41 72 67 2d 3e 61       if( pArg->a
153b0 75 74 6f 45 78 70 6c 61 69 6e 0a 20 20 20 20 20  utoExplain.     
153c0 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 5f 63      && sqlite3_c
153d0 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d  olumn_count(pStm
153e0 74 29 3d 3d 38 0a 20 20 20 20 20 20 20 20 20 26  t)==8.         &
153f0 26 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b  & sqlite3_strlik
15400 65 28 22 45 58 50 4c 41 49 4e 25 22 2c 20 7a 53  e("EXPLAIN%", zS
15410 74 6d 74 53 71 6c 2c 30 29 3d 3d 30 0a 20 20 20  tmtSql,0)==0.   
15420 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
15430 20 20 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20    pArg->cMode = 
15440 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20  MODE_Explain;.  
15450 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
15460 20 2f 2a 20 49 66 20 74 68 65 20 73 68 65 6c 6c   /* If the shell
15470 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
15480 20 22 2e 65 78 70 6c 61 69 6e 22 20 6d 6f 64 65   ".explain" mode
15490 2c 20 67 61 74 68 65 72 20 74 68 65 20 65 78 74  , gather the ext
154a0 72 61 0a 20 20 20 20 20 20 20 20 2a 2a 20 64 61  ra.        ** da
154b0 74 61 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  ta required to a
154c0 64 64 20 69 6e 64 65 6e 74 73 20 74 6f 20 74 68  dd indents to th
154d0 65 20 6f 75 74 70 75 74 2e 2a 2f 0a 20 20 20 20  e output.*/.    
154e0 20 20 20 20 69 66 28 20 70 41 72 67 2d 3e 63 4d      if( pArg->cM
154f0 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69  ode==MODE_Explai
15500 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 65  n ){.          e
15510 78 70 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70  xplain_data_prep
15520 61 72 65 28 70 41 72 67 2c 20 70 53 74 6d 74 29  are(pArg, pStmt)
15530 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
15540 20 20 7d 0a 0a 20 20 20 20 20 20 65 78 65 63 5f    }..      exec_
15550 70 72 65 70 61 72 65 64 5f 73 74 6d 74 28 70 41  prepared_stmt(pA
15560 72 67 2c 20 70 53 74 6d 74 2c 20 78 43 61 6c 6c  rg, pStmt, xCall
15570 62 61 63 6b 29 3b 0a 20 20 20 20 20 20 65 78 70  back);.      exp
15580 6c 61 69 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65  lain_data_delete
15590 28 70 41 72 67 29 3b 0a 0a 20 20 20 20 20 20 2f  (pArg);..      /
155a0 2a 20 70 72 69 6e 74 20 75 73 61 67 65 20 73 74  * print usage st
155b0 61 74 73 20 69 66 20 73 74 61 74 73 20 6f 6e 20  ats if stats on 
155c0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 41 72  */.      if( pAr
155d0 67 20 26 26 20 70 41 72 67 2d 3e 73 74 61 74 73  g && pArg->stats
155e0 4f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69  On ){.        di
155f0 73 70 6c 61 79 5f 73 74 61 74 73 28 64 62 2c 20  splay_stats(db, 
15600 70 41 72 67 2c 20 30 29 3b 0a 20 20 20 20 20 20  pArg, 0);.      
15610 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 70 72 69 6e  }..      /* prin
15620 74 20 6c 6f 6f 70 2d 63 6f 75 6e 74 65 72 73 20  t loop-counters 
15630 69 66 20 72 65 71 75 69 72 65 64 20 2a 2f 0a 20  if required */. 
15640 20 20 20 20 20 69 66 28 20 70 41 72 67 20 26 26       if( pArg &&
15650 20 70 41 72 67 2d 3e 73 63 61 6e 73 74 61 74 73   pArg->scanstats
15660 4f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69  On ){.        di
15670 73 70 6c 61 79 5f 73 63 61 6e 73 74 61 74 73 28  splay_scanstats(
15680 64 62 2c 20 70 41 72 67 29 3b 0a 20 20 20 20 20  db, pArg);.     
15690 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 46 69 6e   }..      /* Fin
156a0 61 6c 69 7a 65 20 74 68 65 20 73 74 61 74 65 6d  alize the statem
156b0 65 6e 74 20 6a 75 73 74 20 65 78 65 63 75 74 65  ent just execute
156c0 64 2e 20 49 66 20 74 68 69 73 20 66 61 69 6c 73  d. If this fails
156d0 2c 20 73 61 76 65 20 61 0a 20 20 20 20 20 20 2a  , save a.      *
156e0 2a 20 63 6f 70 79 20 6f 66 20 74 68 65 20 65 72  * copy of the er
156f0 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 4f 74 68  ror message. Oth
15700 65 72 77 69 73 65 2c 20 73 65 74 20 7a 53 71 6c  erwise, set zSql
15710 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
15720 0a 20 20 20 20 20 20 2a 2a 20 6e 65 78 74 20 73  .      ** next s
15730 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78 65 63  tatement to exec
15740 75 74 65 2e 20 2a 2f 0a 20 20 20 20 20 20 72 63  ute. */.      rc
15750 32 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  2 = sqlite3_fina
15760 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
15770 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
15780 45 5f 4e 4f 4d 45 4d 20 29 20 72 63 20 3d 20 72  E_NOMEM ) rc = r
15790 63 32 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  c2;.      if( rc
157a0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
157b0 20 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c         zSql = zL
157c0 65 66 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 20  eftover;.       
157d0 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28   while( IsSpace(
157e0 7a 53 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c 2b  zSql[0]) ) zSql+
157f0 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  +;.      }else i
15800 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20  f( pzErrMsg ){. 
15810 20 20 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67         *pzErrMsg
15820 20 3d 20 73 61 76 65 5f 65 72 72 5f 6d 73 67 28   = save_err_msg(
15830 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  db);.      }..  
15840 20 20 20 20 2f 2a 20 63 6c 65 61 72 20 73 61 76      /* clear sav
15850 65 64 20 73 74 6d 74 20 68 61 6e 64 6c 65 20 2a  ed stmt handle *
15860 2f 0a 20 20 20 20 20 20 69 66 28 20 70 41 72 67  /.      if( pArg
15870 20 29 7b 0a 20 20 20 20 20 20 20 20 70 41 72 67   ){.        pArg
15880 2d 3e 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 0a  ->pStmt = NULL;.
15890 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
158a0 7d 20 2f 2a 20 65 6e 64 20 77 68 69 6c 65 20 2a  } /* end while *
158b0 2f 0a 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  /..  return rc;.
158c0 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 6c 65 61 73 65  }../*.** Release
158d0 20 6d 65 6d 6f 72 79 20 70 72 65 76 69 6f 75 73   memory previous
158e0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  ly allocated by 
158f0 74 61 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28  tableColumnList(
15900 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  )..*/.static voi
15910 64 20 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74  d freeColumnList
15920 28 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 29 7b 0a  (char **azCol){.
15930 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69    int i;.  for(i
15940 3d 31 3b 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b  =1; azCol[i]; i+
15950 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  +){.    sqlite3_
15960 66 72 65 65 28 61 7a 43 6f 6c 5b 69 5d 29 3b 0a  free(azCol[i]);.
15970 20 20 7d 0a 20 20 2f 2a 20 61 7a 43 6f 6c 5b 30    }.  /* azCol[0
15980 5d 20 69 73 20 61 20 73 74 61 74 69 63 20 73 74  ] is a static st
15990 72 69 6e 67 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ring */.  sqlite
159a0 33 5f 66 72 65 65 28 61 7a 43 6f 6c 29 3b 0a 7d  3_free(azCol);.}
159b0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61  ../*.** Return a
159c0 20 6c 69 73 74 20 6f 66 20 70 6f 69 6e 74 65 72   list of pointer
159d0 73 20 74 6f 20 73 74 72 69 6e 67 73 20 77 68 69  s to strings whi
159e0 63 68 20 61 72 65 20 74 68 65 20 6e 61 6d 65 73  ch are the names
159f0 20 6f 66 20 61 6c 6c 0a 2a 2a 20 63 6f 6c 75 6d   of all.** colum
15a00 6e 73 20 69 6e 20 74 61 62 6c 65 20 7a 54 61 62  ns in table zTab
15a10 2e 20 20 20 54 68 65 20 6d 65 6d 6f 72 79 20 74  .   The memory t
15a20 6f 20 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 73  o hold the names
15a30 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
15a40 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64  ** allocated and
15a50 20 6d 75 73 74 20 62 65 20 72 65 6c 65 61 73 65   must be release
15a60 64 20 62 79 20 74 68 65 20 63 61 6c 6c 65 72 20  d by the caller 
15a70 75 73 69 6e 67 20 61 20 73 75 62 73 65 71 75 65  using a subseque
15a80 6e 74 20 63 61 6c 6c 0a 2a 2a 20 74 6f 20 66 72  nt call.** to fr
15a90 65 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 29 2e 0a  eeColumnList()..
15aa0 2a 2a 0a 2a 2a 20 54 68 65 20 61 7a 43 6f 6c 5b  **.** The azCol[
15ab0 30 5d 20 65 6e 74 72 79 20 69 73 20 75 73 75 61  0] entry is usua
15ac0 6c 6c 79 20 4e 55 4c 4c 2e 20 20 48 6f 77 65 76  lly NULL.  Howev
15ad0 65 72 2c 20 69 66 20 7a 54 61 62 20 63 6f 6e 74  er, if zTab cont
15ae0 61 69 6e 73 20 61 20 72 6f 77 69 64 0a 2a 2a 20  ains a rowid.** 
15af0 76 61 6c 75 65 20 74 68 61 74 20 6e 65 65 64 73  value that needs
15b00 20 74 6f 20 62 65 20 70 72 65 73 65 72 76 65 64   to be preserved
15b10 2c 20 74 68 65 6e 20 61 7a 43 6f 6c 5b 30 5d 20  , then azCol[0] 
15b20 69 73 20 66 69 6c 6c 65 64 20 69 6e 20 77 69 74  is filled in wit
15b30 68 20 74 68 65 0a 2a 2a 20 6e 61 6d 65 20 6f 66  h the.** name of
15b40 20 74 68 65 20 72 6f 77 69 64 20 63 6f 6c 75 6d   the rowid colum
15b50 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72  n..**.** The fir
15b60 73 74 20 72 65 67 75 6c 61 72 20 63 6f 6c 75 6d  st regular colum
15b70 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69  n in the table i
15b80 73 20 61 7a 43 6f 6c 5b 31 5d 2e 20 20 54 68 65  s azCol[1].  The
15b90 20 6c 69 73 74 20 69 73 20 74 65 72 6d 69 6e 61   list is termina
15ba0 74 65 64 0a 2a 2a 20 62 79 20 61 6e 20 65 6e 74  ted.** by an ent
15bb0 72 79 20 77 69 74 68 20 61 7a 43 6f 6c 5b 69 5d  ry with azCol[i]
15bc0 3d 3d 30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ==0..*/.static c
15bd0 68 61 72 20 2a 2a 74 61 62 6c 65 43 6f 6c 75 6d  har **tableColum
15be0 6e 4c 69 73 74 28 53 68 65 6c 6c 53 74 61 74 65  nList(ShellState
15bf0 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   *p, const char 
15c00 2a 7a 54 61 62 29 7b 0a 20 20 63 68 61 72 20 2a  *zTab){.  char *
15c10 2a 61 7a 43 6f 6c 20 3d 20 30 3b 0a 20 20 73 71  *azCol = 0;.  sq
15c20 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
15c30 74 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  t;.  char *zSql;
15c40 0a 20 20 69 6e 74 20 6e 43 6f 6c 20 3d 20 30 3b  .  int nCol = 0;
15c50 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20  .  int nAlloc = 
15c60 30 3b 0a 20 20 69 6e 74 20 6e 50 4b 20 3d 20 30  0;.  int nPK = 0
15c70 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
15c80 72 20 6f 66 20 50 52 49 4d 41 52 59 20 4b 45 59  r of PRIMARY KEY
15c90 20 63 6f 6c 75 6d 6e 73 20 73 65 65 6e 20 2a 2f   columns seen */
15ca0 0a 20 20 69 6e 74 20 69 73 49 50 4b 20 3d 20 30  .  int isIPK = 0
15cb0 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
15cc0 20 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59   one PRIMARY KEY
15cd0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 79 70 65 20   column of type 
15ce0 49 4e 54 45 47 45 52 20 2a 2f 0a 20 20 69 6e 74  INTEGER */.  int
15cf0 20 70 72 65 73 65 72 76 65 52 6f 77 69 64 20 3d   preserveRowid =
15d00 20 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c   ShellHasFlag(p,
15d10 20 53 48 46 4c 47 5f 50 72 65 73 65 72 76 65 52   SHFLG_PreserveR
15d20 6f 77 69 64 29 3b 0a 20 20 69 6e 74 20 72 63 3b  owid);.  int rc;
15d30 0a 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74  ..  zSql = sqlit
15d40 65 33 5f 6d 70 72 69 6e 74 66 28 22 50 52 41 47  e3_mprintf("PRAG
15d50 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 3d 25 51  MA table_info=%Q
15d60 22 2c 20 7a 54 61 62 29 3b 0a 20 20 72 63 20 3d  ", zTab);.  rc =
15d70 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
15d80 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c  _v2(p->db, zSql,
15d90 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
15da0 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
15db0 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 72 63 20  zSql);.  if( rc 
15dc0 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 77 68  ) return 0;.  wh
15dd0 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65  ile( sqlite3_ste
15de0 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45  p(pStmt)==SQLITE
15df0 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 66 28 20  _ROW ){.    if( 
15e00 6e 43 6f 6c 3e 3d 6e 41 6c 6c 6f 63 2d 32 20 29  nCol>=nAlloc-2 )
15e10 7b 0a 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d  {.      nAlloc =
15e20 20 6e 41 6c 6c 6f 63 2a 32 20 2b 20 6e 43 6f 6c   nAlloc*2 + nCol
15e30 20 2b 20 31 30 3b 0a 20 20 20 20 20 20 61 7a 43   + 10;.      azC
15e40 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61  ol = sqlite3_rea
15e50 6c 6c 6f 63 28 61 7a 43 6f 6c 2c 20 6e 41 6c 6c  lloc(azCol, nAll
15e60 6f 63 2a 73 69 7a 65 6f 66 28 61 7a 43 6f 6c 5b  oc*sizeof(azCol[
15e70 30 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  0]));.      if( 
15e80 61 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20  azCol==0 ){.    
15e90 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
15ea0 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f  tderr, "Error: o
15eb0 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut of memory\n")
15ec0 3b 0a 20 20 20 20 20 20 20 20 65 78 69 74 28 31  ;.        exit(1
15ed0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
15ee0 0a 20 20 20 20 61 7a 43 6f 6c 5b 2b 2b 6e 43 6f  .    azCol[++nCo
15ef0 6c 5d 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  l] = sqlite3_mpr
15f00 69 6e 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74  intf("%s", sqlit
15f10 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
15f20 53 74 6d 74 2c 20 31 29 29 3b 0a 20 20 20 20 69  Stmt, 1));.    i
15f30 66 28 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  f( sqlite3_colum
15f40 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 20 35 29 20  n_int(pStmt, 5) 
15f50 29 7b 0a 20 20 20 20 20 20 6e 50 4b 2b 2b 3b 0a  ){.      nPK++;.
15f60 20 20 20 20 20 20 69 66 28 20 6e 50 4b 3d 3d 31        if( nPK==1
15f70 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74  .       && sqlit
15f80 65 33 5f 73 74 72 69 63 6d 70 28 28 63 6f 6e 73  e3_stricmp((cons
15f90 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
15fa0 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d  column_text(pStm
15fb0 74 2c 32 29 2c 0a 20 20 20 20 20 20 20 20 20 20  t,2),.          
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 22 49 4e 54 45 47 45 52 22 29 3d 3d 30 0a 20 20  "INTEGER")==0.  
15fe0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
15ff0 73 49 50 4b 20 3d 20 31 3b 0a 20 20 20 20 20 20  sIPK = 1;.      
16000 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69  }else{.        i
16010 73 49 50 4b 20 3d 20 30 3b 0a 20 20 20 20 20 20  sIPK = 0;.      
16020 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  }.    }.  }.  sq
16030 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
16040 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 61 7a 43  Stmt);.  if( azC
16050 6f 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  ol==0 ) return 0
16060 3b 0a 20 20 61 7a 43 6f 6c 5b 30 5d 20 3d 20 30  ;.  azCol[0] = 0
16070 3b 0a 20 20 61 7a 43 6f 6c 5b 6e 43 6f 6c 2b 31  ;.  azCol[nCol+1
16080 5d 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65  ] = 0;..  /* The
16090 20 64 65 63 69 73 69 6f 6e 20 6f 66 20 77 68 65   decision of whe
160a0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 72 6f  ther or not a ro
160b0 77 69 64 20 72 65 61 6c 6c 79 20 6e 65 65 64 73  wid really needs
160c0 20 74 6f 20 62 65 20 70 72 65 73 65 72 76 65 64   to be preserved
160d0 0a 20 20 2a 2a 20 69 73 20 74 72 69 63 6b 79 2e  .  ** is tricky.
160e0 20 20 57 65 20 6e 65 76 65 72 20 6e 65 65 64 20    We never need 
160f0 74 6f 20 70 72 65 73 65 72 76 65 20 61 20 72 6f  to preserve a ro
16100 77 69 64 20 66 6f 72 20 61 20 57 49 54 48 4f 55  wid for a WITHOU
16110 54 20 52 4f 57 49 44 20 74 61 62 6c 65 0a 20 20  T ROWID table.  
16120 2a 2a 20 6f 72 20 61 20 74 61 62 6c 65 20 77 69  ** or a table wi
16130 74 68 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52  th an INTEGER PR
16140 49 4d 41 52 59 20 4b 45 59 2e 20 20 57 65 20 61  IMARY KEY.  We a
16150 72 65 20 75 6e 61 62 6c 65 20 74 6f 20 70 72 65  re unable to pre
16160 73 65 72 76 65 0a 20 20 2a 2a 20 72 6f 77 69 64  serve.  ** rowid
16170 73 20 6f 6e 20 74 61 62 6c 65 73 20 77 68 65 72  s on tables wher
16180 65 20 74 68 65 20 72 6f 77 69 64 20 69 73 20 69  e the rowid is i
16190 6e 61 63 63 65 73 73 69 62 6c 65 20 62 65 63 61  naccessible beca
161a0 75 73 65 20 74 68 65 72 65 20 61 72 65 20 6f 74  use there are ot
161b0 68 65 72 0a 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73  her.  ** columns
161c0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61   in the table na
161d0 6d 65 64 20 22 72 6f 77 69 64 22 2c 20 22 5f 72  med "rowid", "_r
161e0 6f 77 69 64 5f 22 2c 20 61 6e 64 20 22 6f 69 64  owid_", and "oid
161f0 22 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 72  "..  */.  if( pr
16200 65 73 65 72 76 65 52 6f 77 69 64 20 26 26 20 69  eserveRowid && i
16210 73 49 50 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  sIPK ){.    /* I
16220 66 20 61 20 73 69 6e 67 6c 65 20 50 52 49 4d 41  f a single PRIMA
16230 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 77 69  RY KEY column wi
16240 74 68 20 74 79 70 65 20 49 4e 54 45 47 45 52 20  th type INTEGER 
16250 77 61 73 20 73 65 65 6e 2c 20 74 68 65 6e 20 69  was seen, then i
16260 74 0a 20 20 20 20 2a 2a 20 6d 69 67 68 74 20 62  t.    ** might b
16270 65 20 61 6e 20 61 6c 69 73 65 20 66 6f 72 20 74  e an alise for t
16280 68 65 20 52 4f 57 49 44 2e 20 20 42 75 74 20 69  he ROWID.  But i
16290 74 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20  t might also be 
162a0 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a  a WITHOUT ROWID.
162b0 20 20 20 20 2a 2a 20 74 61 62 6c 65 20 6f 72 20      ** table or 
162c0 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
162d0 59 20 4b 45 59 20 44 45 53 43 20 63 6f 6c 75 6d  Y KEY DESC colum
162e0 6e 2c 20 6e 65 69 74 68 65 72 20 6f 66 20 77 68  n, neither of wh
162f0 69 63 68 20 61 72 65 0a 20 20 20 20 2a 2a 20 52  ich are.    ** R
16300 4f 57 49 44 20 61 6c 69 61 73 65 73 2e 20 20 54  OWID aliases.  T
16310 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 74 68  o distinguish th
16320 65 73 65 20 63 61 73 65 73 2c 20 63 68 65 63 6b  ese cases, check
16330 20 74 6f 20 73 65 65 20 69 66 0a 20 20 20 20 2a   to see if.    *
16340 2a 20 74 68 65 72 65 20 69 73 20 61 20 22 70 6b  * there is a "pk
16350 22 20 65 6e 74 72 79 20 69 6e 20 22 50 52 41 47  " entry in "PRAG
16360 4d 41 20 69 6e 64 65 78 5f 6c 69 73 74 22 2e 20  MA index_list". 
16370 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 0a 20   There will be. 
16380 20 20 20 2a 2a 20 6e 6f 20 22 70 6b 22 20 69 6e     ** no "pk" in
16390 64 65 78 20 69 66 20 74 68 65 20 50 52 49 4d 41  dex if the PRIMA
163a0 52 59 20 4b 45 59 20 72 65 61 6c 6c 79 20 69 73  RY KEY really is
163b0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
163c0 65 20 52 4f 57 49 44 2e 0a 20 20 20 20 2a 2f 0a  e ROWID..    */.
163d0 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
163e0 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45  e3_mprintf("SELE
163f0 43 54 20 31 20 46 52 4f 4d 20 70 72 61 67 6d 61  CT 1 FROM pragma
16400 5f 69 6e 64 65 78 5f 6c 69 73 74 28 25 51 29 22  _index_list(%Q)"
16410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16420 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48              " WH
16430 45 52 45 20 6f 72 69 67 69 6e 3d 27 70 6b 27 22  ERE origin='pk'"
16440 2c 20 7a 54 61 62 29 3b 0a 20 20 20 20 72 63 20  , zTab);.    rc 
16450 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
16460 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  e_v2(p->db, zSql
16470 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
16480 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
16490 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66  ee(zSql);.    if
164a0 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 66 72  ( rc ){.      fr
164b0 65 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43  eeColumnList(azC
164c0 6f 6c 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  ol);.      retur
164d0 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  n 0;.    }.    r
164e0 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70  c = sqlite3_step
164f0 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c  (pStmt);.    sql
16500 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
16510 74 6d 74 29 3b 0a 20 20 20 20 70 72 65 73 65 72  tmt);.    preser
16520 76 65 52 6f 77 69 64 20 3d 20 72 63 3d 3d 53 51  veRowid = rc==SQ
16530 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 7d 0a 20 20  LITE_ROW;.  }.  
16540 69 66 28 20 70 72 65 73 65 72 76 65 52 6f 77 69  if( preserveRowi
16550 64 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  d ){.    /* Only
16560 20 70 72 65 73 65 72 76 65 20 74 68 65 20 72 6f   preserve the ro
16570 77 69 64 20 69 66 20 77 65 20 63 61 6e 20 66 69  wid if we can fi
16580 6e 64 20 61 20 6e 61 6d 65 20 74 6f 20 75 73 65  nd a name to use
16590 20 66 6f 72 20 74 68 65 0a 20 20 20 20 2a 2a 20   for the.    ** 
165a0 72 6f 77 69 64 20 2a 2f 0a 20 20 20 20 73 74 61  rowid */.    sta
165b0 74 69 63 20 63 68 61 72 20 2a 61 7a 52 6f 77 69  tic char *azRowi
165c0 64 5b 5d 20 3d 20 7b 20 22 72 6f 77 69 64 22 2c  d[] = { "rowid",
165d0 20 22 5f 72 6f 77 69 64 5f 22 2c 20 22 6f 69 64   "_rowid_", "oid
165e0 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20  " };.    int i, 
165f0 6a 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  j;.    for(j=0; 
16600 6a 3c 33 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  j<3; j++){.     
16610 20 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 43 6f   for(i=1; i<=nCo
16620 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  l; i++){.       
16630 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72   if( sqlite3_str
16640 69 63 6d 70 28 61 7a 52 6f 77 69 64 5b 6a 5d 2c  icmp(azRowid[j],
16650 61 7a 43 6f 6c 5b 69 5d 29 3d 3d 30 20 29 20 62  azCol[i])==0 ) b
16660 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
16670 20 20 20 20 69 66 28 20 69 3e 6e 43 6f 6c 20 29      if( i>nCol )
16680 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 74 20  {.        /* At 
16690 74 68 69 73 20 70 6f 69 6e 74 2c 20 77 65 20 6b  this point, we k
166a0 6e 6f 77 20 74 68 61 74 20 61 7a 52 6f 77 69 64  now that azRowid
166b0 5b 6a 5d 20 69 73 20 6e 6f 74 20 74 68 65 20 6e  [j] is not the n
166c0 61 6d 65 20 6f 66 20 61 6e 79 0a 20 20 20 20 20  ame of any.     
166d0 20 20 20 2a 2a 20 6f 72 64 69 6e 61 72 79 20 63     ** ordinary c
166e0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62  olumn in the tab
166f0 6c 65 2e 20 20 56 65 72 69 66 79 20 74 68 61 74  le.  Verify that
16700 20 61 7a 52 6f 77 69 64 5b 6a 5d 20 69 73 20 61   azRowid[j] is a
16710 20 76 61 6c 69 64 0a 20 20 20 20 20 20 20 20 2a   valid.        *
16720 2a 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 72  * name for the r
16730 6f 77 69 64 20 62 65 66 6f 72 65 20 61 64 64 69  owid before addi
16740 6e 67 20 69 74 20 74 6f 20 61 7a 43 6f 6c 5b 30  ng it to azCol[0
16750 5d 2e 20 20 57 49 54 48 4f 55 54 20 52 4f 57 49  ].  WITHOUT ROWI
16760 44 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62  D.        ** tab
16770 6c 65 73 20 77 69 6c 6c 20 66 61 69 6c 20 74 68  les will fail th
16780 69 73 20 6c 61 73 74 20 63 68 65 63 6b 20 2a 2f  is last check */
16790 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
167a0 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
167b0 6d 6e 5f 6d 65 74 61 64 61 74 61 28 70 2d 3e 64  mn_metadata(p->d
167c0 62 2c 30 2c 7a 54 61 62 2c 61 7a 52 6f 77 69 64  b,0,zTab,azRowid
167d0 5b 6a 5d 2c 30 2c 30 2c 30 2c 30 2c 30 29 3b 0a  [j],0,0,0,0,0);.
167e0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
167f0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 61 7a 43 6f  SQLITE_OK ) azCo
16800 6c 5b 30 5d 20 3d 20 61 7a 52 6f 77 69 64 5b 6a  l[0] = azRowid[j
16810 5d 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  ];.        break
16820 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
16830 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 61 7a 43    }.  return azC
16840 6f 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 6f 67  ol;.}../*.** Tog
16850 67 6c 65 20 74 68 65 20 72 65 76 65 72 73 65 5f  gle the reverse_
16860 75 6e 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74  unordered_select
16870 73 20 73 65 74 74 69 6e 67 2e 0a 2a 2f 0a 73 74  s setting..*/.st
16880 61 74 69 63 20 76 6f 69 64 20 74 6f 67 67 6c 65  atic void toggle
16890 53 65 6c 65 63 74 4f 72 64 65 72 28 73 71 6c 69  SelectOrder(sqli
168a0 74 65 33 20 2a 64 62 29 7b 0a 20 20 73 71 6c 69  te3 *db){.  sqli
168b0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20  te3_stmt *pStmt 
168c0 3d 20 30 3b 0a 20 20 69 6e 74 20 69 53 65 74 74  = 0;.  int iSett
168d0 69 6e 67 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  ing = 0;.  char 
168e0 7a 53 74 6d 74 5b 31 30 30 5d 3b 0a 20 20 73 71  zStmt[100];.  sq
168f0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
16900 28 64 62 2c 20 22 50 52 41 47 4d 41 20 72 65 76  (db, "PRAGMA rev
16910 65 72 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73  erse_unordered_s
16920 65 6c 65 63 74 73 22 2c 20 2d 31 2c 20 26 70 53  elects", -1, &pS
16930 74 6d 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 73  tmt, 0);.  if( s
16940 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
16950 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  t)==SQLITE_ROW )
16960 7b 0a 20 20 20 20 69 53 65 74 74 69 6e 67 20 3d  {.    iSetting =
16970 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
16980 69 6e 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20  int(pStmt, 0);. 
16990 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   }.  sqlite3_fin
169a0 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
169b0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
169c0 28 73 69 7a 65 6f 66 28 7a 53 74 6d 74 29 2c 20  (sizeof(zStmt), 
169d0 7a 53 74 6d 74 2c 0a 20 20 20 20 20 20 20 22 50  zStmt,.       "P
169e0 52 41 47 4d 41 20 72 65 76 65 72 73 65 5f 75 6e  RAGMA reverse_un
169f0 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 28  ordered_selects(
16a00 25 64 29 22 2c 20 21 69 53 65 74 74 69 6e 67 29  %d)", !iSetting)
16a10 3b 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63  ;.  sqlite3_exec
16a20 28 64 62 2c 20 7a 53 74 6d 74 2c 20 30 2c 20 30  (db, zStmt, 0, 0
16a30 2c 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  , 0);.}../*.** T
16a40 68 69 73 20 69 73 20 61 20 64 69 66 66 65 72 65  his is a differe
16a50 6e 74 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74  nt callback rout
16a60 69 6e 65 20 75 73 65 64 20 66 6f 72 20 64 75 6d  ine used for dum
16a70 70 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ping the databas
16a80 65 2e 0a 2a 2a 20 45 61 63 68 20 72 6f 77 20 72  e..** Each row r
16a90 65 63 65 69 76 65 64 20 62 79 20 74 68 69 73 20  eceived by this 
16aa0 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 73 69 73 74  callback consist
16ab0 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  s of a table nam
16ac0 65 2c 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  e,.** the table 
16ad0 74 79 70 65 20 28 22 69 6e 64 65 78 22 20 6f 72  type ("index" or
16ae0 20 22 74 61 62 6c 65 22 29 20 61 6e 64 20 53 51   "table") and SQ
16af0 4c 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  L to create the 
16b00 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 69 73 20 72  table..** This r
16b10 6f 75 74 69 6e 65 20 73 68 6f 75 6c 64 20 70 72  outine should pr
16b20 69 6e 74 20 74 65 78 74 20 73 75 66 66 69 63 69  int text suffici
16b30 65 6e 74 20 74 6f 20 72 65 63 72 65 61 74 65 20  ent to recreate 
16b40 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  the table..*/.st
16b50 61 74 69 63 20 69 6e 74 20 64 75 6d 70 5f 63 61  atic int dump_ca
16b60 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72  llback(void *pAr
16b70 67 2c 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61  g, int nArg, cha
16b80 72 20 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72 20  r **azArg, char 
16b90 2a 2a 61 7a 4e 6f 74 55 73 65 64 29 7b 0a 20 20  **azNotUsed){.  
16ba0 69 6e 74 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20  int rc;.  const 
16bb0 63 68 61 72 20 2a 7a 54 61 62 6c 65 3b 0a 20 20  char *zTable;.  
16bc0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
16bd0 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  e;.  const char 
16be0 2a 7a 53 71 6c 3b 0a 20 20 53 68 65 6c 6c 53 74  *zSql;.  ShellSt
16bf0 61 74 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53  ate *p = (ShellS
16c00 74 61 74 65 20 2a 29 70 41 72 67 3b 0a 0a 20 20  tate *)pArg;..  
16c10 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
16c20 28 61 7a 4e 6f 74 55 73 65 64 29 3b 0a 20 20 69  (azNotUsed);.  i
16c30 66 28 20 6e 41 72 67 21 3d 33 20 7c 7c 20 61 7a  f( nArg!=3 || az
16c40 41 72 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  Arg==0 ) return 
16c50 30 3b 0a 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a  0;.  zTable = az
16c60 41 72 67 5b 30 5d 3b 0a 20 20 7a 54 79 70 65 20  Arg[0];.  zType 
16c70 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 7a 53  = azArg[1];.  zS
16c80 71 6c 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 0a  ql = azArg[2];..
16c90 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61    if( strcmp(zTa
16ca0 62 6c 65 2c 20 22 73 71 6c 69 74 65 5f 73 65 71  ble, "sqlite_seq
16cb0 75 65 6e 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20  uence")==0 ){.  
16cc0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
16cd0 6f 75 74 2c 20 22 44 45 4c 45 54 45 20 46 52 4f  out, "DELETE FRO
16ce0 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  M sqlite_sequenc
16cf0 65 3b 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 20  e;\n");.  }else 
16d00 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67  if( sqlite3_strg
16d10 6c 6f 62 28 22 73 71 6c 69 74 65 5f 73 74 61 74  lob("sqlite_stat
16d20 3f 22 2c 20 7a 54 61 62 6c 65 29 3d 3d 30 20 29  ?", zTable)==0 )
16d30 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
16d40 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a  (p->out, "ANALYZ
16d50 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  E sqlite_master;
16d60 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  \n");.  }else if
16d70 28 20 73 74 72 6e 63 6d 70 28 7a 54 61 62 6c 65  ( strncmp(zTable
16d80 2c 20 22 73 71 6c 69 74 65 5f 22 2c 20 37 29 3d  , "sqlite_", 7)=
16d90 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
16da0 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   0;.  }else if( 
16db0 73 74 72 6e 63 6d 70 28 7a 53 71 6c 2c 20 22 43  strncmp(zSql, "C
16dc0 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
16dd0 42 4c 45 22 2c 20 32 30 29 3d 3d 30 20 29 7b 0a  BLE", 20)==0 ){.
16de0 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 73 3b 0a      char *zIns;.
16df0 20 20 20 20 69 66 28 20 21 70 2d 3e 77 72 69 74      if( !p->writ
16e00 61 62 6c 65 53 63 68 65 6d 61 20 29 7b 0a 20 20  ableSchema ){.  
16e10 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
16e20 2d 3e 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 77  ->out, "PRAGMA w
16e30 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
16e40 4e 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 70 2d  N;\n");.      p-
16e50 3e 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20  >writableSchema 
16e60 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a  = 1;.    }.    z
16e70 49 6e 73 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Ins = sqlite3_mp
16e80 72 69 6e 74 66 28 0a 20 20 20 20 20 20 20 22 49  rintf(.       "I
16e90 4e 53 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74  NSERT INTO sqlit
16ea0 65 5f 6d 61 73 74 65 72 28 74 79 70 65 2c 6e 61  e_master(type,na
16eb0 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74  me,tbl_name,root
16ec0 70 61 67 65 2c 73 71 6c 29 22 0a 20 20 20 20 20  page,sql)".     
16ed0 20 20 22 56 41 4c 55 45 53 28 27 74 61 62 6c 65    "VALUES('table
16ee0 27 2c 27 25 71 27 2c 27 25 71 27 2c 30 2c 27 25  ','%q','%q',0,'%
16ef0 71 27 29 3b 22 2c 0a 20 20 20 20 20 20 20 7a 54  q');",.       zT
16f00 61 62 6c 65 2c 20 7a 54 61 62 6c 65 2c 20 7a 53  able, zTable, zS
16f10 71 6c 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  ql);.    utf8_pr
16f20 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
16f30 5c 6e 22 2c 20 7a 49 6e 73 29 3b 0a 20 20 20 20  \n", zIns);.    
16f40 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 49 6e  sqlite3_free(zIn
16f50 73 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  s);.    return 0
16f60 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
16f70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70  rintSchemaLine(p
16f80 2d 3e 6f 75 74 2c 20 7a 53 71 6c 2c 20 22 3b 5c  ->out, zSql, ";\
16f90 6e 22 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  n");.  }..  if( 
16fa0 73 74 72 63 6d 70 28 7a 54 79 70 65 2c 20 22 74  strcmp(zType, "t
16fb0 61 62 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  able")==0 ){.   
16fc0 20 53 68 65 6c 6c 54 65 78 74 20 73 53 65 6c 65   ShellText sSele
16fd0 63 74 3b 0a 20 20 20 20 53 68 65 6c 6c 54 65 78  ct;.    ShellTex
16fe0 74 20 73 54 61 62 6c 65 3b 0a 20 20 20 20 63 68  t sTable;.    ch
16ff0 61 72 20 2a 2a 61 7a 43 6f 6c 3b 0a 20 20 20 20  ar **azCol;.    
17000 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
17010 2a 73 61 76 65 64 44 65 73 74 54 61 62 6c 65 3b  *savedDestTable;
17020 0a 20 20 20 20 69 6e 74 20 73 61 76 65 64 4d 6f  .    int savedMo
17030 64 65 3b 0a 0a 20 20 20 20 61 7a 43 6f 6c 20 3d  de;..    azCol =
17040 20 74 61 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74   tableColumnList
17050 28 70 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20  (p, zTable);.   
17060 20 69 66 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 7b   if( azCol==0 ){
17070 0a 20 20 20 20 20 20 70 2d 3e 6e 45 72 72 2b 2b  .      p->nErr++
17080 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  ;.      return 0
17090 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
170a0 41 6c 77 61 79 73 20 71 75 6f 74 65 20 74 68 65  Always quote the
170b0 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 65 76 65   table name, eve
170c0 6e 20 69 66 20 69 74 20 61 70 70 65 61 72 73 20  n if it appears 
170d0 74 6f 20 62 65 20 70 75 72 65 20 61 73 63 69 69  to be pure ascii
170e0 2c 0a 20 20 20 20 2a 2a 20 69 6e 20 63 61 73 65  ,.    ** in case
170f0 20 69 74 20 69 73 20 61 20 6b 65 79 77 6f 72 64   it is a keyword
17100 2e 20 45 78 3a 20 20 49 4e 53 45 52 54 20 49 4e  . Ex:  INSERT IN
17110 54 4f 20 22 74 61 62 6c 65 22 20 2e 2e 2e 20 2a  TO "table" ... *
17120 2f 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28 26  /.    initText(&
17130 73 54 61 62 6c 65 29 3b 0a 20 20 20 20 61 70 70  sTable);.    app
17140 65 6e 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c  endText(&sTable,
17150 20 7a 54 61 62 6c 65 2c 20 71 75 6f 74 65 43 68   zTable, quoteCh
17160 61 72 28 7a 54 61 62 6c 65 29 29 3b 0a 20 20 20  ar(zTable));.   
17170 20 2f 2a 20 49 66 20 70 72 65 73 65 72 76 69 6e   /* If preservin
17180 67 20 74 68 65 20 72 6f 77 69 64 2c 20 61 64 64  g the rowid, add
17190 20 61 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61   a column list a
171a0 66 74 65 72 20 74 68 65 20 74 61 62 6c 65 20 6e  fter the table n
171b0 61 6d 65 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 6f  ame..    ** In o
171c0 74 68 65 72 20 77 6f 72 64 73 3a 20 20 22 49 4e  ther words:  "IN
171d0 53 45 52 54 20 49 4e 54 4f 20 74 61 62 28 72 6f  SERT INTO tab(ro
171e0 77 69 64 2c 61 2c 62 2c 63 2c 2e 2e 2e 29 20 56  wid,a,b,c,...) V
171f0 41 4c 55 45 53 28 2e 2e 2e 29 22 0a 20 20 20 20  ALUES(...)".    
17200 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  ** instead of th
17210 65 20 75 73 75 61 6c 20 22 49 4e 53 45 52 54 20  e usual "INSERT 
17220 49 4e 54 4f 20 74 61 62 20 56 41 4c 55 45 53 28  INTO tab VALUES(
17230 2e 2e 2e 29 22 2e 0a 20 20 20 20 2a 2f 0a 20 20  ...)"..    */.  
17240 20 20 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29    if( azCol[0] )
17250 7b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  {.      appendTe
17260 78 74 28 26 73 54 61 62 6c 65 2c 20 22 28 22 2c  xt(&sTable, "(",
17270 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e   0);.      appen
17280 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20 61  dText(&sTable, a
17290 7a 43 6f 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20  zCol[0], 0);.   
172a0 20 20 20 66 6f 72 28 69 3d 31 3b 20 61 7a 43 6f     for(i=1; azCo
172b0 6c 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  l[i]; i++){.    
172c0 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
172d0 73 54 61 62 6c 65 2c 20 22 2c 22 2c 20 30 29 3b  sTable, ",", 0);
172e0 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54  .        appendT
172f0 65 78 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43  ext(&sTable, azC
17300 6f 6c 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72  ol[i], quoteChar
17310 28 61 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20  (azCol[i]));.   
17320 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e     }.      appen
17330 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20 22  dText(&sTable, "
17340 29 22 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20  )", 0);.    }.. 
17350 20 20 20 2f 2a 20 42 75 69 6c 64 20 61 6e 20 61     /* Build an a
17360 70 70 72 6f 70 72 69 61 74 65 20 53 45 4c 45 43  ppropriate SELEC
17370 54 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  T statement */. 
17380 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 53 65     initText(&sSe
17390 6c 65 63 74 29 3b 0a 20 20 20 20 61 70 70 65 6e  lect);.    appen
173a0 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
173b0 22 53 45 4c 45 43 54 20 22 2c 20 30 29 3b 0a 20  "SELECT ", 0);. 
173c0 20 20 20 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20     if( azCol[0] 
173d0 29 7b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54  ){.      appendT
173e0 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a  ext(&sSelect, az
173f0 43 6f 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20  Col[0], 0);.    
17400 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53    appendText(&sS
17410 65 6c 65 63 74 2c 20 22 2c 22 2c 20 30 29 3b 0a  elect, ",", 0);.
17420 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d      }.    for(i=
17430 31 3b 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b  1; azCol[i]; i++
17440 29 7b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54  ){.      appendT
17450 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a  ext(&sSelect, az
17460 43 6f 6c 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61  Col[i], quoteCha
17470 72 28 61 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20  r(azCol[i]));.  
17480 20 20 20 20 69 66 28 20 61 7a 43 6f 6c 5b 69 2b      if( azCol[i+
17490 31 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70  1] ){.        ap
174a0 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
174b0 74 2c 20 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20  t, ",", 0);.    
174c0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66 72    }.    }.    fr
174d0 65 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43  eeColumnList(azC
174e0 6f 6c 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  ol);.    appendT
174f0 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 20  ext(&sSelect, " 
17500 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20  FROM ", 0);.    
17510 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
17520 65 63 74 2c 20 7a 54 61 62 6c 65 2c 20 71 75 6f  ect, zTable, quo
17530 74 65 43 68 61 72 28 7a 54 61 62 6c 65 29 29 3b  teChar(zTable));
17540 0a 0a 20 20 20 20 73 61 76 65 64 44 65 73 74 54  ..    savedDestT
17550 61 62 6c 65 20 3d 20 70 2d 3e 7a 44 65 73 74 54  able = p->zDestT
17560 61 62 6c 65 3b 0a 20 20 20 20 73 61 76 65 64 4d  able;.    savedM
17570 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20  ode = p->mode;. 
17580 20 20 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65     p->zDestTable
17590 20 3d 20 73 54 61 62 6c 65 2e 7a 3b 0a 20 20 20   = sTable.z;.   
175a0 20 70 2d 3e 6d 6f 64 65 20 3d 20 70 2d 3e 63 4d   p->mode = p->cM
175b0 6f 64 65 20 3d 20 4d 4f 44 45 5f 49 6e 73 65 72  ode = MODE_Inser
175c0 74 3b 0a 20 20 20 20 72 63 20 3d 20 73 68 65 6c  t;.    rc = shel
175d0 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 73 53  l_exec(p->db, sS
175e0 65 6c 65 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63  elect.z, shell_c
175f0 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a  allback, p, 0);.
17600 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66      if( (rc&0xff
17610 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  )==SQLITE_CORRUP
17620 54 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  T ){.      raw_p
17630 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f  rintf(p->out, "/
17640 2a 2a 2a 2a 2a 2a 20 43 4f 52 52 55 50 54 49 4f  ****** CORRUPTIO
17650 4e 20 45 52 52 4f 52 20 2a 2a 2a 2a 2a 2a 2a 2f  N ERROR *******/
17660 5c 6e 22 29 3b 0a 20 20 20 20 20 20 74 6f 67 67  \n");.      togg
17670 6c 65 53 65 6c 65 63 74 4f 72 64 65 72 28 70 2d  leSelectOrder(p-
17680 3e 64 62 29 3b 0a 20 20 20 20 20 20 73 68 65 6c  >db);.      shel
17690 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 73 53  l_exec(p->db, sS
176a0 65 6c 65 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63  elect.z, shell_c
176b0 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a  allback, p, 0);.
176c0 20 20 20 20 20 20 74 6f 67 67 6c 65 53 65 6c 65        toggleSele
176d0 63 74 4f 72 64 65 72 28 70 2d 3e 64 62 29 3b 0a  ctOrder(p->db);.
176e0 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 44 65      }.    p->zDe
176f0 73 74 54 61 62 6c 65 20 3d 20 73 61 76 65 64 44  stTable = savedD
17700 65 73 74 54 61 62 6c 65 3b 0a 20 20 20 20 70 2d  estTable;.    p-
17710 3e 6d 6f 64 65 20 3d 20 73 61 76 65 64 4d 6f 64  >mode = savedMod
17720 65 3b 0a 20 20 20 20 66 72 65 65 54 65 78 74 28  e;.    freeText(
17730 26 73 54 61 62 6c 65 29 3b 0a 20 20 20 20 66 72  &sTable);.    fr
17740 65 65 54 65 78 74 28 26 73 53 65 6c 65 63 74 29  eeText(&sSelect)
17750 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 70  ;.    if( rc ) p
17760 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ->nErr++;.  }.  
17770 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
17780 2a 2a 20 52 75 6e 20 7a 51 75 65 72 79 2e 20 20  ** Run zQuery.  
17790 55 73 65 20 64 75 6d 70 5f 63 61 6c 6c 62 61 63  Use dump_callbac
177a0 6b 28 29 20 61 73 20 74 68 65 20 63 61 6c 6c 62  k() as the callb
177b0 61 63 6b 20 72 6f 75 74 69 6e 65 20 73 6f 20 74  ack routine so t
177c0 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65  hat.** the conte
177d0 6e 74 73 20 6f 66 20 74 68 65 20 71 75 65 72 79  nts of the query
177e0 20 61 72 65 20 6f 75 74 70 75 74 20 61 73 20 53   are output as S
177f0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  QL statements..*
17800 2a 0a 2a 2a 20 49 66 20 77 65 20 67 65 74 20 61  *.** If we get a
17810 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
17820 65 72 72 6f 72 2c 20 72 65 72 75 6e 20 74 68 65  error, rerun the
17830 20 71 75 65 72 79 20 61 66 74 65 72 20 61 70 70   query after app
17840 65 6e 64 69 6e 67 0a 2a 2a 20 22 4f 52 44 45 52  ending.** "ORDER
17850 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 22 20   BY rowid DESC" 
17860 74 6f 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  to the end..*/.s
17870 74 61 74 69 63 20 69 6e 74 20 72 75 6e 5f 73 63  tatic int run_sc
17880 68 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28  hema_dump_query(
17890 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
178a0 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
178b0 7a 51 75 65 72 79 0a 29 7b 0a 20 20 69 6e 74 20  zQuery.){.  int 
178c0 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72  rc;.  char *zErr
178d0 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
178e0 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
178f0 20 7a 51 75 65 72 79 2c 20 64 75 6d 70 5f 63 61   zQuery, dump_ca
17900 6c 6c 62 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72  llback, p, &zErr
17910 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
17920 49 54 45 5f 43 4f 52 52 55 50 54 20 29 7b 0a 20  ITE_CORRUPT ){. 
17930 20 20 20 63 68 61 72 20 2a 7a 51 32 3b 0a 20 20     char *zQ2;.  
17940 20 20 69 6e 74 20 6c 65 6e 20 3d 20 73 74 72 6c    int len = strl
17950 65 6e 33 30 28 7a 51 75 65 72 79 29 3b 0a 20 20  en30(zQuery);.  
17960 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
17970 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 43 4f  out, "/****** CO
17980 52 52 55 50 54 49 4f 4e 20 45 52 52 4f 52 20 2a  RRUPTION ERROR *
17990 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20 20 20  ******/\n");.   
179a0 20 69 66 28 20 7a 45 72 72 20 29 7b 0a 20 20 20   if( zErr ){.   
179b0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
179c0 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20  ->out, "/****** 
179d0 25 73 20 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 7a  %s ******/\n", z
179e0 45 72 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Err);.      sqli
179f0 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a  te3_free(zErr);.
17a00 20 20 20 20 20 20 7a 45 72 72 20 3d 20 30 3b 0a        zErr = 0;.
17a10 20 20 20 20 7d 0a 20 20 20 20 7a 51 32 20 3d 20      }.    zQ2 = 
17a20 6d 61 6c 6c 6f 63 28 20 6c 65 6e 2b 31 30 30 20  malloc( len+100 
17a30 29 3b 0a 20 20 20 20 69 66 28 20 7a 51 32 3d 3d  );.    if( zQ2==
17a40 30 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20  0 ) return rc;. 
17a50 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
17a60 6e 74 66 28 6c 65 6e 2b 31 30 30 2c 20 7a 51 32  ntf(len+100, zQ2
17a70 2c 20 22 25 73 20 4f 52 44 45 52 20 42 59 20 72  , "%s ORDER BY r
17a80 6f 77 69 64 20 44 45 53 43 22 2c 20 7a 51 75 65  owid DESC", zQue
17a90 72 79 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  ry);.    rc = sq
17aa0 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
17ab0 2c 20 7a 51 32 2c 20 64 75 6d 70 5f 63 61 6c 6c  , zQ2, dump_call
17ac0 62 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b  back, p, &zErr);
17ad0 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20  .    if( rc ){. 
17ae0 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
17af0 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a  (p->out, "/*****
17b00 2a 20 45 52 52 4f 52 3a 20 25 73 20 2a 2a 2a 2a  * ERROR: %s ****
17b10 2a 2a 2f 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20  **/\n", zErr);. 
17b20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17b30 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
17b40 55 50 54 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  UPT;.    }.    s
17b50 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
17b60 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 51 32 29  );.    free(zQ2)
17b70 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
17b80 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 78 74  c;.}../*.** Text
17b90 20 6f 66 20 61 20 68 65 6c 70 20 6d 65 73 73 61   of a help messa
17ba0 67 65 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  ge.*/.static cha
17bb0 72 20 7a 48 65 6c 70 5b 5d 20 3d 0a 23 69 66 20  r zHelp[] =.#if 
17bc0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
17bd0 41 56 45 5f 5a 4c 49 42 29 20 26 26 20 21 64 65  AVE_ZLIB) && !de
17be0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
17bf0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
17c00 20 20 22 2e 61 72 63 68 69 76 65 20 2e 2e 2e 20    ".archive ... 
17c10 20 20 20 20 20 20 20 20 20 20 4d 61 6e 61 67 65            Manage
17c20 20 53 51 4c 20 61 72 63 68 69 76 65 73 3a 20 5c   SQL archives: \
17c30 22 2e 61 72 63 68 69 76 65 20 2d 2d 68 65 6c 70  ".archive --help
17c40 5c 22 20 66 6f 72 20 64 65 74 61 69 6c 73 5c 6e  \" for details\n
17c50 22 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ".#endif.#ifndef
17c60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
17c70 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 22 2e 61  HORIZATION.  ".a
17c80 75 74 68 20 4f 4e 7c 4f 46 46 20 20 20 20 20 20  uth ON|OFF      
17c90 20 20 20 20 20 53 68 6f 77 20 61 75 74 68 6f 72       Show author
17ca0 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 73 5c 6e  izer callbacks\n
17cb0 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 62 61 63  ".#endif.  ".bac
17cc0 6b 75 70 20 3f 44 42 3f 20 46 49 4c 45 20 20 20  kup ?DB? FILE   
17cd0 20 20 20 42 61 63 6b 75 70 20 44 42 20 28 64 65     Backup DB (de
17ce0 66 61 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29 20  fault \"main\") 
17cf0 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 62  to FILE\n".  ".b
17d00 61 69 6c 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20  ail on|off      
17d10 20 20 20 20 20 53 74 6f 70 20 61 66 74 65 72 20       Stop after 
17d20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72 6f 72  hitting an error
17d30 2e 20 20 44 65 66 61 75 6c 74 20 4f 46 46 5c 6e  .  Default OFF\n
17d40 22 0a 20 20 22 2e 62 69 6e 61 72 79 20 6f 6e 7c  ".  ".binary on|
17d50 6f 66 66 20 20 20 20 20 20 20 20 20 54 75 72 6e  off         Turn
17d60 20 62 69 6e 61 72 79 20 6f 75 74 70 75 74 20 6f   binary output o
17d70 6e 20 6f 72 20 6f 66 66 2e 20 20 44 65 66 61 75  n or off.  Defau
17d80 6c 74 20 4f 46 46 5c 6e 22 0a 20 20 22 2e 63 64  lt OFF\n".  ".cd
17d90 20 44 49 52 45 43 54 4f 52 59 20 20 20 20 20 20   DIRECTORY      
17da0 20 20 20 20 43 68 61 6e 67 65 20 74 68 65 20 77      Change the w
17db0 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72 79  orking directory
17dc0 20 74 6f 20 44 49 52 45 43 54 4f 52 59 5c 6e 22   to DIRECTORY\n"
17dd0 0a 20 20 22 2e 63 68 61 6e 67 65 73 20 6f 6e 7c  .  ".changes on|
17de0 6f 66 66 20 20 20 20 20 20 20 20 53 68 6f 77 20  off        Show 
17df0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 63  number of rows c
17e00 68 61 6e 67 65 64 20 62 79 20 53 51 4c 5c 6e 22  hanged by SQL\n"
17e10 0a 20 20 22 2e 63 68 65 63 6b 20 47 4c 4f 42 20  .  ".check GLOB 
17e20 20 20 20 20 20 20 20 20 20 20 20 46 61 69 6c 20             Fail 
17e30 69 66 20 6f 75 74 70 75 74 20 73 69 6e 63 65 20  if output since 
17e40 2e 74 65 73 74 63 61 73 65 20 64 6f 65 73 20 6e  .testcase does n
17e50 6f 74 20 6d 61 74 63 68 5c 6e 22 0a 20 20 22 2e  ot match\n".  ".
17e60 63 6c 6f 6e 65 20 4e 45 57 44 42 20 20 20 20 20  clone NEWDB     
17e70 20 20 20 20 20 20 43 6c 6f 6e 65 20 64 61 74 61        Clone data
17e80 20 69 6e 74 6f 20 4e 45 57 44 42 20 66 72 6f 6d   into NEWDB from
17e90 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61   the existing da
17ea0 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64 61  tabase\n".  ".da
17eb0 74 61 62 61 73 65 73 20 20 20 20 20 20 20 20 20  tabases         
17ec0 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73 20 61      List names a
17ed0 6e 64 20 66 69 6c 65 73 20 6f 66 20 61 74 74 61  nd files of atta
17ee0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 5c 6e  ched databases\n
17ef0 22 0a 20 20 22 2e 64 62 69 6e 66 6f 20 3f 44 42  ".  ".dbinfo ?DB
17f00 3f 20 20 20 20 20 20 20 20 20 20 20 53 68 6f 77  ?           Show
17f10 20 73 74 61 74 75 73 20 69 6e 66 6f 72 6d 61 74   status informat
17f20 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64 61  ion about the da
17f30 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64 75  tabase\n".  ".du
17f40 6d 70 20 3f 54 41 42 4c 45 3f 20 2e 2e 2e 20 20  mp ?TABLE? ...  
17f50 20 20 20 20 44 75 6d 70 20 74 68 65 20 64 61 74      Dump the dat
17f60 61 62 61 73 65 20 69 6e 20 61 6e 20 53 51 4c 20  abase in an SQL 
17f70 74 65 78 74 20 66 6f 72 6d 61 74 5c 6e 22 0a 20  text format\n". 
17f80 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
17f90 20 20 20 20 20 20 20 20 20 20 20 49 66 20 54 41             If TA
17fa0 42 4c 45 20 73 70 65 63 69 66 69 65 64 2c 20 6f  BLE specified, o
17fb0 6e 6c 79 20 64 75 6d 70 20 74 61 62 6c 65 73 20  nly dump tables 
17fc0 6d 61 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22 20  matching\n".  " 
17fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fe0 20 20 20 20 20 20 20 20 4c 49 4b 45 20 70 61 74          LIKE pat
17ff0 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 20  tern TABLE.\n". 
18000 20 22 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66 20 20   ".echo on|off  
18010 20 20 20 20 20 20 20 20 20 54 75 72 6e 20 63 6f           Turn co
18020 6d 6d 61 6e 64 20 65 63 68 6f 20 6f 6e 20 6f 72  mmand echo on or
18030 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 65 71 70 20   off\n".  ".eqp 
18040 6f 6e 7c 6f 66 66 7c 66 75 6c 6c 20 20 20 20 20  on|off|full     
18050 20 20 45 6e 61 62 6c 65 20 6f 72 20 64 69 73 61    Enable or disa
18060 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 45 58  ble automatic EX
18070 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
18080 5c 6e 22 0a 20 20 22 2e 65 78 63 65 6c 20 20 20  \n".  ".excel   
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
180a0 73 70 6c 61 79 20 74 68 65 20 6f 75 74 70 75 74  splay the output
180b0 20 6f 66 20 6e 65 78 74 20 63 6f 6d 6d 61 6e 64   of next command
180c0 20 69 6e 20 61 20 73 70 72 65 61 64 73 68 65 65   in a spreadshee
180d0 74 5c 6e 22 0a 20 20 22 2e 65 78 69 74 20 20 20  t\n".  ".exit   
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
180f0 78 69 74 20 74 68 69 73 20 70 72 6f 67 72 61 6d  xit this program
18100 5c 6e 22 0a 20 20 22 2e 65 78 70 65 72 74 20 20  \n".  ".expert  
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 58                EX
18120 50 45 52 49 4d 45 4e 54 41 4c 2e 20 53 75 67 67  PERIMENTAL. Sugg
18130 65 73 74 20 69 6e 64 65 78 65 73 20 66 6f 72 20  est indexes for 
18140 73 70 65 63 69 66 69 65 64 20 71 75 65 72 69 65  specified querie
18150 73 5c 6e 22 0a 2f 2a 20 42 65 63 61 75 73 65 20  s\n"./* Because 
18160 65 78 70 6c 61 69 6e 20 6d 6f 64 65 20 63 6f 6d  explain mode com
18170 65 73 20 6f 6e 20 61 75 74 6f 6d 61 74 69 63 61  es on automatica
18180 6c 6c 79 20 6e 6f 77 2c 20 74 68 65 20 22 2e 65  lly now, the ".e
18190 78 70 6c 61 69 6e 22 20 6d 6f 64 65 0a 2a 2a 20  xplain" mode.** 
181a0 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
181b0 74 68 65 20 68 65 6c 70 20 73 63 72 65 65 6e 2e  the help screen.
181c0 20 20 49 74 20 69 73 20 73 74 69 6c 6c 20 73 75    It is still su
181d0 70 70 6f 72 74 65 64 20 66 6f 72 20 6c 65 67 61  pported for lega
181e0 63 79 2c 20 68 6f 77 65 76 65 72 20 2a 2f 0a 2f  cy, however */./
181f0 2a 22 2e 65 78 70 6c 61 69 6e 20 3f 6f 6e 7c 6f  *".explain ?on|o
18200 66 66 7c 61 75 74 6f 3f 20 54 75 72 6e 20 45 58  ff|auto? Turn EX
18210 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 6d 6f 64  PLAIN output mod
18220 65 20 6f 6e 20 6f 72 20 6f 66 66 20 6f 72 20 74  e on or off or t
18230 6f 20 61 75 74 6f 6d 61 74 69 63 5c 6e 22 2a 2f  o automatic\n"*/
18240 0a 20 20 22 2e 66 75 6c 6c 73 63 68 65 6d 61 20  .  ".fullschema 
18250 3f 2d 2d 69 6e 64 65 6e 74 3f 20 53 68 6f 77 20  ?--indent? Show 
18260 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20 63  schema and the c
18270 6f 6e 74 65 6e 74 20 6f 66 20 73 71 6c 69 74 65  ontent of sqlite
18280 5f 73 74 61 74 20 74 61 62 6c 65 73 5c 6e 22 0a  _stat tables\n".
18290 20 20 22 2e 68 65 61 64 65 72 73 20 6f 6e 7c 6f    ".headers on|o
182a0 66 66 20 20 20 20 20 20 20 20 54 75 72 6e 20 64  ff        Turn d
182b0 69 73 70 6c 61 79 20 6f 66 20 68 65 61 64 65 72  isplay of header
182c0 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20  s on or off\n". 
182d0 20 22 2e 68 65 6c 70 20 20 20 20 20 20 20 20 20   ".help         
182e0 20 20 20 20 20 20 20 20 20 53 68 6f 77 20 74 68           Show th
182f0 69 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20 20  is message\n".  
18300 22 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41  ".import FILE TA
18310 42 4c 45 20 20 20 20 20 49 6d 70 6f 72 74 20 64  BLE     Import d
18320 61 74 61 20 66 72 6f 6d 20 46 49 4c 45 20 69 6e  ata from FILE in
18330 74 6f 20 54 41 42 4c 45 5c 6e 22 0a 23 69 66 6e  to TABLE\n".#ifn
18340 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18350 54 45 53 54 5f 43 4f 4e 54 52 4f 4c 0a 20 20 22  TEST_CONTROL.  "
18360 2e 69 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20  .imposter INDEX 
18370 54 41 42 4c 45 20 20 43 72 65 61 74 65 20 69 6d  TABLE  Create im
18380 70 6f 73 74 65 72 20 74 61 62 6c 65 20 54 41 42  poster table TAB
18390 4c 45 20 6f 6e 20 69 6e 64 65 78 20 49 4e 44 45  LE on index INDE
183a0 58 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e  X\n".#endif.  ".
183b0 69 6e 64 65 78 65 73 20 3f 54 41 42 4c 45 3f 20  indexes ?TABLE? 
183c0 20 20 20 20 20 20 53 68 6f 77 20 6e 61 6d 65 73        Show names
183d0 20 6f 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 5c   of all indexes\
183e0 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
18400 66 20 54 41 42 4c 45 20 73 70 65 63 69 66 69 65  f TABLE specifie
18410 64 2c 20 6f 6e 6c 79 20 73 68 6f 77 20 69 6e 64  d, only show ind
18420 65 78 65 73 20 66 6f 72 20 74 61 62 6c 65 73 5c  exes for tables\
18430 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
18450 61 74 63 68 69 6e 67 20 4c 49 4b 45 20 70 61 74  atching LIKE pat
18460 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 23  tern TABLE.\n".#
18470 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
18480 42 4c 45 5f 49 4f 54 52 41 43 45 0a 20 20 22 2e  BLE_IOTRACE.  ".
18490 69 6f 74 72 61 63 65 20 46 49 4c 45 20 20 20 20  iotrace FILE    
184a0 20 20 20 20 20 20 45 6e 61 62 6c 65 20 49 2f 4f        Enable I/O
184b0 20 64 69 61 67 6e 6f 73 74 69 63 20 6c 6f 67 67   diagnostic logg
184c0 69 6e 67 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 23  ing to FILE\n".#
184d0 65 6e 64 69 66 0a 20 20 22 2e 6c 69 6d 69 74 20  endif.  ".limit 
184e0 3f 4c 49 4d 49 54 3f 20 3f 56 41 4c 3f 20 20 20  ?LIMIT? ?VAL?   
184f0 44 69 73 70 6c 61 79 20 6f 72 20 63 68 61 6e 67  Display or chang
18500 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61  e the value of a
18510 6e 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5c 6e  n SQLITE_LIMIT\n
18520 22 0a 20 20 22 2e 6c 69 6e 74 20 4f 50 54 49 4f  ".  ".lint OPTIO
18530 4e 53 20 20 20 20 20 20 20 20 20 20 52 65 70 6f  NS          Repo
18540 72 74 20 70 6f 74 65 6e 74 69 61 6c 20 73 63 68  rt potential sch
18550 65 6d 61 20 69 73 73 75 65 73 2e 20 4f 70 74 69  ema issues. Opti
18560 6f 6e 73 3a 5c 6e 22 0a 20 20 22 20 20 20 20 20  ons:\n".  "     
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 20 20 20 66 6b 65 79 2d 69 6e 64 65 78 65 73      fkey-indexes
18590 20 20 20 20 20 46 69 6e 64 20 6d 69 73 73 69 6e       Find missin
185a0 67 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e  g foreign key in
185b0 64 65 78 65 73 5c 6e 22 0a 23 69 66 6e 64 65 66  dexes\n".#ifndef
185c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
185d0 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 22 2e  D_EXTENSION.  ".
185e0 6c 6f 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59  load FILE ?ENTRY
185f0 3f 20 20 20 20 20 4c 6f 61 64 20 61 6e 20 65 78  ?     Load an ex
18600 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 5c  tension library\
18610 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 6c 6f  n".#endif.  ".lo
18620 67 20 46 49 4c 45 7c 6f 66 66 20 20 20 20 20 20  g FILE|off      
18630 20 20 20 20 54 75 72 6e 20 6c 6f 67 67 69 6e 67      Turn logging
18640 20 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 46 49 4c   on or off.  FIL
18650 45 20 63 61 6e 20 62 65 20 73 74 64 65 72 72 2f  E can be stderr/
18660 73 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 6d 6f  stdout\n".  ".mo
18670 64 65 20 4d 4f 44 45 20 3f 54 41 42 4c 45 3f 20  de MODE ?TABLE? 
18680 20 20 20 20 53 65 74 20 6f 75 74 70 75 74 20 6d      Set output m
18690 6f 64 65 20 77 68 65 72 65 20 4d 4f 44 45 20 69  ode where MODE i
186a0 73 20 6f 6e 65 20 6f 66 3a 5c 6e 22 0a 20 20 22  s one of:\n".  "
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186c0 20 20 20 20 20 20 20 20 20 61 73 63 69 69 20 20           ascii  
186d0 20 20 43 6f 6c 75 6d 6e 73 2f 72 6f 77 73 20 64    Columns/rows d
186e0 65 6c 69 6d 69 74 65 64 20 62 79 20 30 78 31 46  elimited by 0x1F
186f0 20 61 6e 64 20 30 78 31 45 5c 6e 22 0a 20 20 22   and 0x1E\n".  "
18700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18710 20 20 20 20 20 20 20 20 20 63 73 76 20 20 20 20           csv    
18720 20 20 43 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65    Comma-separate
18730 64 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 20  d values\n".  " 
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20 20          column  
18760 20 4c 65 66 74 2d 61 6c 69 67 6e 65 64 20 63 6f   Left-aligned co
18770 6c 75 6d 6e 73 2e 20 20 28 53 65 65 20 2e 77 69  lumns.  (See .wi
18780 64 74 68 29 5c 6e 22 0a 20 20 22 20 20 20 20 20  dth)\n".  "     
18790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187a0 20 20 20 20 68 74 6d 6c 20 20 20 20 20 48 54 4d      html     HTM
187b0 4c 20 3c 74 61 62 6c 65 3e 20 63 6f 64 65 5c 6e  L <table> code\n
187c0 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
187e0 73 65 72 74 20 20 20 53 51 4c 20 69 6e 73 65 72  sert   SQL inser
187f0 74 20 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72  t statements for
18800 20 54 41 42 4c 45 5c 6e 22 0a 20 20 22 20 20 20   TABLE\n".  "   
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18820 20 20 20 20 20 20 6c 69 6e 65 20 20 20 20 20 4f        line     O
18830 6e 65 20 76 61 6c 75 65 20 70 65 72 20 6c 69 6e  ne value per lin
18840 65 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  e\n".  "        
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 20 6c 69 73 74 20 20 20 20 20 56 61 6c 75 65 73   list     Values
18870 20 64 65 6c 69 6d 69 74 65 64 20 62 79 20 5c 22   delimited by \"
18880 7c 5c 22 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  |\"\n".  "      
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 20 20 71 75 6f 74 65 20 20 20 20 45 73 63 61     quote    Esca
188b0 70 65 20 61 6e 73 77 65 72 73 20 61 73 20 66 6f  pe answers as fo
188c0 72 20 53 51 4c 5c 6e 22 0a 20 20 22 20 20 20 20  r SQL\n".  "    
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 20 20 20 20 20 74 61 62 73 20 20 20 20 20 54 61       tabs     Ta
188f0 62 2d 73 65 70 61 72 61 74 65 64 20 76 61 6c 75  b-separated valu
18900 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  es\n".  "       
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18920 20 20 74 63 6c 20 20 20 20 20 20 54 43 4c 20 6c    tcl      TCL l
18930 69 73 74 20 65 6c 65 6d 65 6e 74 73 5c 6e 22 0a  ist elements\n".
18940 20 20 22 2e 6e 75 6c 6c 76 61 6c 75 65 20 53 54    ".nullvalue ST
18950 52 49 4e 47 20 20 20 20 20 20 55 73 65 20 53 54  RING      Use ST
18960 52 49 4e 47 20 69 6e 20 70 6c 61 63 65 20 6f 66  RING in place of
18970 20 4e 55 4c 4c 20 76 61 6c 75 65 73 5c 6e 22 0a   NULL values\n".
18980 20 20 22 2e 6f 6e 63 65 20 28 2d 65 7c 2d 78 7c    ".once (-e|-x|
18990 46 49 4c 45 29 20 20 20 20 20 4f 75 74 70 75 74  FILE)     Output
189a0 20 66 6f 72 20 74 68 65 20 6e 65 78 74 20 53 51   for the next SQ
189b0 4c 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 74  L command only t
189c0 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 20 20 20  o FILE\n".  "   
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 20 20 20 20 20 20 6f 72 20 69 6e 76 6f 6b 65 20        or invoke 
189f0 73 79 73 74 65 6d 20 74 65 78 74 20 65 64 69 74  system text edit
18a00 6f 72 20 28 2d 65 29 20 6f 72 20 73 70 72 65 61  or (-e) or sprea
18a10 64 73 68 65 65 74 20 28 2d 78 29 5c 6e 22 0a 20  dsheet (-x)\n". 
18a20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
18a30 20 20 20 20 20 20 20 20 20 20 20 6f 6e 20 74 68             on th
18a40 65 20 6f 75 74 70 75 74 2e 5c 6e 22 0a 20 20 22  e output.\n".  "
18a50 2e 6f 70 65 6e 20 3f 4f 50 54 49 4f 4e 53 3f 20  .open ?OPTIONS? 
18a60 3f 46 49 4c 45 3f 20 43 6c 6f 73 65 20 65 78 69  ?FILE? Close exi
18a70 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 61  sting database a
18a80 6e 64 20 72 65 6f 70 65 6e 20 46 49 4c 45 5c 6e  nd reopen FILE\n
18a90 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 68                Th
18ab0 65 20 2d 2d 6e 65 77 20 6f 70 74 69 6f 6e 20 73  e --new option s
18ac0 74 61 72 74 73 20 77 69 74 68 20 61 6e 20 65 6d  tarts with an em
18ad0 70 74 79 20 66 69 6c 65 5c 6e 22 0a 20 20 22 2e  pty file\n".  ".
18ae0 6f 75 74 70 75 74 20 3f 46 49 4c 45 3f 20 20 20  output ?FILE?   
18af0 20 20 20 20 20 20 53 65 6e 64 20 6f 75 74 70 75        Send outpu
18b00 74 20 74 6f 20 46 49 4c 45 20 6f 72 20 73 74 64  t to FILE or std
18b10 6f 75 74 5c 6e 22 0a 20 20 22 2e 70 72 69 6e 74  out\n".  ".print
18b20 20 53 54 52 49 4e 47 2e 2e 2e 20 20 20 20 20 20   STRING...      
18b30 20 50 72 69 6e 74 20 6c 69 74 65 72 61 6c 20 53   Print literal S
18b40 54 52 49 4e 47 5c 6e 22 0a 20 20 22 2e 70 72 6f  TRING\n".  ".pro
18b50 6d 70 74 20 4d 41 49 4e 20 43 4f 4e 54 49 4e 55  mpt MAIN CONTINU
18b60 45 20 20 52 65 70 6c 61 63 65 20 74 68 65 20 73  E  Replace the s
18b70 74 61 6e 64 61 72 64 20 70 72 6f 6d 70 74 73 5c  tandard prompts\
18b80 6e 22 0a 20 20 22 2e 71 75 69 74 20 20 20 20 20  n".  ".quit     
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 69               Exi
18ba0 74 20 74 68 69 73 20 70 72 6f 67 72 61 6d 5c 6e  t this program\n
18bb0 22 0a 20 20 22 2e 72 65 61 64 20 46 49 4c 45 4e  ".  ".read FILEN
18bc0 41 4d 45 20 20 20 20 20 20 20 20 20 45 78 65 63  AME         Exec
18bd0 75 74 65 20 53 51 4c 20 69 6e 20 46 49 4c 45 4e  ute SQL in FILEN
18be0 41 4d 45 5c 6e 22 0a 20 20 22 2e 72 65 73 74 6f  AME\n".  ".resto
18bf0 72 65 20 3f 44 42 3f 20 46 49 4c 45 20 20 20 20  re ?DB? FILE    
18c00 20 52 65 73 74 6f 72 65 20 63 6f 6e 74 65 6e 74   Restore content
18c10 20 6f 66 20 44 42 20 28 64 65 66 61 75 6c 74 20   of DB (default 
18c20 5c 22 6d 61 69 6e 5c 22 29 20 66 72 6f 6d 20 46  \"main\") from F
18c30 49 4c 45 5c 6e 22 0a 20 20 22 2e 73 61 76 65 20  ILE\n".  ".save 
18c40 46 49 4c 45 20 20 20 20 20 20 20 20 20 20 20 20  FILE            
18c50 20 57 72 69 74 65 20 69 6e 2d 6d 65 6d 6f 72 79   Write in-memory
18c60 20 64 61 74 61 62 61 73 65 20 69 6e 74 6f 20 46   database into F
18c70 49 4c 45 5c 6e 22 0a 20 20 22 2e 73 63 61 6e 73  ILE\n".  ".scans
18c80 74 61 74 73 20 6f 6e 7c 6f 66 66 20 20 20 20 20  tats on|off     
18c90 20 54 75 72 6e 20 73 71 6c 69 74 65 33 5f 73 74   Turn sqlite3_st
18ca0 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 28 29 20  mt_scanstatus() 
18cb0 6d 65 74 72 69 63 73 20 6f 6e 20 6f 72 20 6f 66  metrics on or of
18cc0 66 5c 6e 22 0a 20 20 22 2e 73 63 68 65 6d 61 20  f\n".  ".schema 
18cd0 3f 50 41 54 54 45 52 4e 3f 20 20 20 20 20 20 53  ?PATTERN?      S
18ce0 68 6f 77 20 74 68 65 20 43 52 45 41 54 45 20 73  how the CREATE s
18cf0 74 61 74 65 6d 65 6e 74 73 20 6d 61 74 63 68 69  tatements matchi
18d00 6e 67 20 50 41 54 54 45 52 4e 5c 6e 22 0a 20 20  ng PATTERN\n".  
18d10 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
18d20 20 20 20 20 20 20 20 20 20 20 20 41 64 64 20 2d             Add -
18d30 2d 69 6e 64 65 6e 74 20 66 6f 72 20 70 72 65 74  -indent for pret
18d40 74 79 2d 70 72 69 6e 74 69 6e 67 5c 6e 22 0a 20  ty-printing\n". 
18d50 20 22 2e 73 65 6c 66 74 65 73 74 20 3f 2d 2d 69   ".selftest ?--i
18d60 6e 69 74 3f 20 20 20 20 20 52 75 6e 20 74 65 73  nit?     Run tes
18d70 74 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68  ts defined in th
18d80 65 20 53 45 4c 46 54 45 53 54 20 74 61 62 6c 65  e SELFTEST table
18d90 5c 6e 22 0a 20 20 22 2e 73 65 70 61 72 61 74 6f  \n".  ".separato
18da0 72 20 43 4f 4c 20 3f 52 4f 57 3f 20 20 20 43 68  r COL ?ROW?   Ch
18db0 61 6e 67 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ange the column 
18dc0 73 65 70 61 72 61 74 6f 72 20 61 6e 64 20 6f 70  separator and op
18dd0 74 69 6f 6e 61 6c 6c 79 20 74 68 65 20 72 6f 77  tionally the row
18de0 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
18df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e00 73 65 70 61 72 61 74 6f 72 20 66 6f 72 20 62 6f  separator for bo
18e10 74 68 20 74 68 65 20 6f 75 74 70 75 74 20 6d 6f  th the output mo
18e20 64 65 20 61 6e 64 20 2e 69 6d 70 6f 72 74 5c 6e  de and .import\n
18e30 22 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ".#if defined(SQ
18e40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53  LITE_ENABLE_SESS
18e50 49 4f 4e 29 0a 20 20 22 2e 73 65 73 73 69 6f 6e  ION).  ".session
18e60 20 43 4d 44 20 2e 2e 2e 20 20 20 20 20 20 20 43   CMD ...       C
18e70 72 65 61 74 65 20 6f 72 20 63 6f 6e 74 72 6f 6c  reate or control
18e80 20 73 65 73 73 69 6f 6e 73 5c 6e 22 0a 23 65 6e   sessions\n".#en
18e90 64 69 66 0a 20 20 22 2e 73 68 61 33 73 75 6d 20  dif.  ".sha3sum 
18ea0 3f 4f 50 54 49 4f 4e 53 2e 2e 2e 3f 20 20 43 6f  ?OPTIONS...?  Co
18eb0 6d 70 75 74 65 20 61 20 53 48 41 33 20 68 61 73  mpute a SHA3 has
18ec0 68 20 6f 66 20 64 61 74 61 62 61 73 65 20 63 6f  h of database co
18ed0 6e 74 65 6e 74 5c 6e 22 0a 20 20 22 2e 73 68 65  ntent\n".  ".she
18ee0 6c 6c 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20 20  ll CMD ARGS...  
18ef0 20 20 20 52 75 6e 20 43 4d 44 20 41 52 47 53 2e     Run CMD ARGS.
18f00 2e 2e 20 69 6e 20 61 20 73 79 73 74 65 6d 20 73  .. in a system s
18f10 68 65 6c 6c 5c 6e 22 0a 20 20 22 2e 73 68 6f 77  hell\n".  ".show
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 53 68 6f 77 20 74 68 65 20 63 75 72 72 65    Show the curre
18f40 6e 74 20 76 61 6c 75 65 73 20 66 6f 72 20 76 61  nt values for va
18f50 72 69 6f 75 73 20 73 65 74 74 69 6e 67 73 5c 6e  rious settings\n
18f60 22 0a 20 20 22 2e 73 74 61 74 73 20 3f 6f 6e 7c  ".  ".stats ?on|
18f70 6f 66 66 3f 20 20 20 20 20 20 20 20 53 68 6f 77  off?        Show
18f80 20 73 74 61 74 73 20 6f 72 20 74 75 72 6e 20 73   stats or turn s
18f90 74 61 74 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e  tats on or off\n
18fa0 22 0a 20 20 22 2e 73 79 73 74 65 6d 20 43 4d 44  ".  ".system CMD
18fb0 20 41 52 47 53 2e 2e 2e 20 20 20 20 52 75 6e 20   ARGS...    Run 
18fc0 43 4d 44 20 41 52 47 53 2e 2e 2e 20 69 6e 20 61  CMD ARGS... in a
18fd0 20 73 79 73 74 65 6d 20 73 68 65 6c 6c 5c 6e 22   system shell\n"
18fe0 0a 20 20 22 2e 74 61 62 6c 65 73 20 3f 54 41 42  .  ".tables ?TAB
18ff0 4c 45 3f 20 20 20 20 20 20 20 20 4c 69 73 74 20  LE?        List 
19000 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73 5c  names of tables\
19010 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
19020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
19030 66 20 54 41 42 4c 45 20 73 70 65 63 69 66 69 65  f TABLE specifie
19040 64 2c 20 6f 6e 6c 79 20 6c 69 73 74 20 74 61 62  d, only list tab
19050 6c 65 73 20 6d 61 74 63 68 69 6e 67 5c 6e 22 0a  les matching\n".
19060 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
19070 20 20 20 20 20 20 20 20 20 20 20 20 4c 49 4b 45              LIKE
19080 20 70 61 74 74 65 72 6e 20 54 41 42 4c 45 2e 5c   pattern TABLE.\
19090 6e 22 0a 20 20 22 2e 74 65 73 74 63 61 73 65 20  n".  ".testcase 
190a0 4e 41 4d 45 20 20 20 20 20 20 20 20 20 42 65 67  NAME         Beg
190b0 69 6e 20 72 65 64 69 72 65 63 74 69 6e 67 20 6f  in redirecting o
190c0 75 74 70 75 74 20 74 6f 20 27 74 65 73 74 63 61  utput to 'testca
190d0 73 65 2d 6f 75 74 2e 74 78 74 27 5c 6e 22 0a 20  se-out.txt'\n". 
190e0 20 22 2e 74 69 6d 65 6f 75 74 20 4d 53 20 20 20   ".timeout MS   
190f0 20 20 20 20 20 20 20 20 20 54 72 79 20 6f 70 65           Try ope
19100 6e 69 6e 67 20 6c 6f 63 6b 65 64 20 74 61 62 6c  ning locked tabl
19110 65 73 20 66 6f 72 20 4d 53 20 6d 69 6c 6c 69 73  es for MS millis
19120 65 63 6f 6e 64 73 5c 6e 22 0a 20 20 22 2e 74 69  econds\n".  ".ti
19130 6d 65 72 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20  mer on|off      
19140 20 20 20 20 54 75 72 6e 20 53 51 4c 20 74 69 6d      Turn SQL tim
19150 65 72 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a  er on or off\n".
19160 20 20 22 2e 74 72 61 63 65 20 46 49 4c 45 7c 6f    ".trace FILE|o
19170 66 66 20 20 20 20 20 20 20 20 4f 75 74 70 75 74  ff        Output
19180 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d   each SQL statem
19190 65 6e 74 20 61 73 20 69 74 20 69 73 20 72 75 6e  ent as it is run
191a0 5c 6e 22 0a 20 20 22 2e 76 66 73 69 6e 66 6f 20  \n".  ".vfsinfo 
191b0 3f 41 55 58 3f 20 20 20 20 20 20 20 20 20 49 6e  ?AUX?         In
191c0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
191d0 74 68 65 20 74 6f 70 2d 6c 65 76 65 6c 20 56 46  the top-level VF
191e0 53 5c 6e 22 0a 20 20 22 2e 76 66 73 6c 69 73 74  S\n".  ".vfslist
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
19200 69 73 74 20 61 6c 6c 20 61 76 61 69 6c 61 62 6c  ist all availabl
19210 65 20 56 46 53 65 73 5c 6e 22 0a 20 20 22 2e 76  e VFSes\n".  ".v
19220 66 73 6e 61 6d 65 20 3f 41 55 58 3f 20 20 20 20  fsname ?AUX?    
19230 20 20 20 20 20 50 72 69 6e 74 20 74 68 65 20 6e       Print the n
19240 61 6d 65 20 6f 66 20 74 68 65 20 56 46 53 20 73  ame of the VFS s
19250 74 61 63 6b 5c 6e 22 0a 20 20 22 2e 77 69 64 74  tack\n".  ".widt
19260 68 20 4e 55 4d 31 20 4e 55 4d 32 20 2e 2e 2e 20  h NUM1 NUM2 ... 
19270 20 20 53 65 74 20 63 6f 6c 75 6d 6e 20 77 69 64    Set column wid
19280 74 68 73 20 66 6f 72 20 5c 22 63 6f 6c 75 6d 6e  ths for \"column
19290 5c 22 20 6d 6f 64 65 5c 6e 22 0a 20 20 22 20 20  \" mode\n".  "  
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192b0 20 20 20 20 20 20 20 4e 65 67 61 74 69 76 65 20         Negative 
192c0 76 61 6c 75 65 73 20 72 69 67 68 74 2d 6a 75 73  values right-jus
192d0 74 69 66 79 5c 6e 22 0a 3b 0a 0a 23 69 66 20 64  tify\n".;..#if d
192e0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
192f0 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 2f 2a  ABLE_SESSION)./*
19300 0a 2a 2a 20 50 72 69 6e 74 20 68 65 6c 70 20 69  .** Print help i
19310 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74  nformation for t
19320 68 65 20 22 2e 73 65 73 73 69 6f 6e 73 22 20 63  he ".sessions" c
19330 6f 6d 6d 61 6e 64 0a 2a 2f 0a 76 6f 69 64 20 73  ommand.*/.void s
19340 65 73 73 69 6f 6e 5f 68 65 6c 70 28 53 68 65 6c  ession_help(Shel
19350 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 72 61  lState *p){.  ra
19360 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
19370 0a 20 20 20 20 22 2e 73 65 73 73 69 6f 6e 20 3f  .    ".session ?
19380 4e 41 4d 45 3f 20 53 55 42 43 4f 4d 4d 41 4e 44  NAME? SUBCOMMAND
19390 20 3f 41 52 47 53 2e 2e 2e 3f 5c 6e 22 0a 20 20   ?ARGS...?\n".  
193a0 20 20 22 49 66 20 3f 4e 41 4d 45 3f 20 69 73 20    "If ?NAME? is 
193b0 6f 6d 69 74 74 65 64 2c 20 74 68 65 20 66 69 72  omitted, the fir
193c0 73 74 20 64 65 66 69 6e 65 64 20 73 65 73 73 69  st defined sessi
193d0 6f 6e 20 69 73 20 75 73 65 64 2e 5c 6e 22 0a 20  on is used.\n". 
193e0 20 20 20 22 53 75 62 63 6f 6d 6d 61 6e 64 73 3a     "Subcommands:
193f0 5c 6e 22 0a 20 20 20 20 22 20 20 20 61 74 74 61  \n".    "   atta
19400 63 68 20 54 41 42 4c 45 20 20 20 20 20 20 20 20  ch TABLE        
19410 20 20 20 20 20 41 74 74 61 63 68 20 54 41 42 4c       Attach TABL
19420 45 5c 6e 22 0a 20 20 20 20 22 20 20 20 63 68 61  E\n".    "   cha
19430 6e 67 65 73 65 74 20 46 49 4c 45 20 20 20 20 20  ngeset FILE     
19440 20 20 20 20 20 20 57 72 69 74 65 20 61 20 63 68        Write a ch
19450 61 6e 67 65 73 65 74 20 69 6e 74 6f 20 46 49 4c  angeset into FIL
19460 45 5c 6e 22 0a 20 20 20 20 22 20 20 20 63 6c 6f  E\n".    "   clo
19470 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  se              
19480 20 20 20 20 20 20 43 6c 6f 73 65 20 6f 6e 65 20        Close one 
19490 73 65 73 73 69 6f 6e 5c 6e 22 0a 20 20 20 20 22  session\n".    "
194a0 20 20 20 65 6e 61 62 6c 65 20 3f 42 4f 4f 4c 45     enable ?BOOLE
194b0 41 4e 3f 20 20 20 20 20 20 20 20 20 53 65 74 20  AN?         Set 
194c0 6f 72 20 71 75 65 72 79 20 74 68 65 20 65 6e 61  or query the ena
194d0 62 6c 65 20 62 69 74 5c 6e 22 0a 20 20 20 20 22  ble bit\n".    "
194e0 20 20 20 66 69 6c 74 65 72 20 47 4c 4f 42 2e 2e     filter GLOB..
194f0 2e 20 20 20 20 20 20 20 20 20 20 20 52 65 6a 65  .           Reje
19500 63 74 20 74 61 62 6c 65 73 20 6d 61 74 63 68 69  ct tables matchi
19510 6e 67 20 47 4c 4f 42 73 5c 6e 22 0a 20 20 20 20  ng GLOBs\n".    
19520 22 20 20 20 69 6e 64 69 72 65 63 74 20 3f 42 4f  "   indirect ?BO
19530 4f 4c 45 41 4e 3f 20 20 20 20 20 20 20 4d 61 72  OLEAN?       Mar
19540 6b 20 6f 72 20 71 75 65 72 79 20 74 68 65 20 69  k or query the i
19550 6e 64 69 72 65 63 74 20 73 74 61 74 75 73 5c 6e  ndirect status\n
19560 22 0a 20 20 20 20 22 20 20 20 69 73 65 6d 70 74  ".    "   isempt
19570 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y               
19580 20 20 20 51 75 65 72 79 20 77 68 65 74 68 65 72     Query whether
19590 20 74 68 65 20 73 65 73 73 69 6f 6e 20 69 73 20   the session is 
195a0 65 6d 70 74 79 5c 6e 22 0a 20 20 20 20 22 20 20  empty\n".    "  
195b0 20 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20   list           
195c0 20 20 20 20 20 20 20 20 20 20 4c 69 73 74 20 63            List c
195d0 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 73 65  urrently open se
195e0 73 73 69 6f 6e 20 6e 61 6d 65 73 5c 6e 22 0a 20  ssion names\n". 
195f0 20 20 20 22 20 20 20 6f 70 65 6e 20 44 42 20 4e     "   open DB N
19600 41 4d 45 20 20 20 20 20 20 20 20 20 20 20 20 20  AME             
19610 4f 70 65 6e 20 61 20 6e 65 77 20 73 65 73 73 69  Open a new sessi
19620 6f 6e 20 6f 6e 20 44 42 5c 6e 22 0a 20 20 20 20  on on DB\n".    
19630 22 20 20 20 70 61 74 63 68 73 65 74 20 46 49 4c  "   patchset FIL
19640 45 20 20 20 20 20 20 20 20 20 20 20 20 57 72 69  E            Wri
19650 74 65 20 61 20 70 61 74 63 68 73 65 74 20 69 6e  te a patchset in
19660 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 29 3b 0a  to FILE\n".  );.
19670 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 46 6f  }.#endif.../* Fo
19680 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65 20  rward reference 
19690 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 70 72  */.static int pr
196a0 6f 63 65 73 73 5f 69 6e 70 75 74 28 53 68 65 6c  ocess_input(Shel
196b0 6c 53 74 61 74 65 20 2a 70 2c 20 46 49 4c 45 20  lState *p, FILE 
196c0 2a 69 6e 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 61  *in);../*.** Rea
196d0 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  d the content of
196e0 20 66 69 6c 65 20 7a 4e 61 6d 65 20 69 6e 74 6f   file zName into
196f0 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
19700 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
19710 6c 6c 6f 63 36 34 28 29 0a 2a 2a 20 61 6e 64 20  lloc64().** and 
19720 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  return a pointer
19730 20 74 6f 20 74 68 65 20 62 75 66 66 65 72 2e 20   to the buffer. 
19740 54 68 65 20 63 61 6c 6c 65 72 20 69 73 20 72 65  The caller is re
19750 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 66 72  sponsible for fr
19760 65 65 69 6e 67 0a 2a 2a 20 74 68 65 20 6d 65 6d  eeing.** the mem
19770 6f 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 70 61  ory..**.** If pa
19780 72 61 6d 65 74 65 72 20 70 6e 42 79 74 65 20 69  rameter pnByte i
19790 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 28 2a 70 6e  s not NULL, (*pn
197a0 42 79 74 65 29 20 69 73 20 73 65 74 20 74 6f 20  Byte) is set to 
197b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
197c0 74 65 73 0a 2a 2a 20 72 65 61 64 2e 0a 2a 2a 0a  tes.** read..**.
197d0 2a 2a 20 46 6f 72 20 63 6f 6e 76 65 6e 69 65 6e  ** For convenien
197e0 63 65 2c 20 61 20 6e 75 6c 2d 74 65 72 6d 69 6e  ce, a nul-termin
197f0 61 74 6f 72 20 62 79 74 65 20 69 73 20 61 6c 77  ator byte is alw
19800 61 79 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20  ays appended to 
19810 74 68 65 20 64 61 74 61 20 72 65 61 64 0a 2a 2a  the data read.**
19820 20 66 72 6f 6d 20 74 68 65 20 66 69 6c 65 20 62   from the file b
19830 65 66 6f 72 65 20 74 68 65 20 62 75 66 66 65 72  efore the buffer
19840 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 54 68   is returned. Th
19850 69 73 20 62 79 74 65 20 69 73 20 6e 6f 74 20 69  is byte is not i
19860 6e 63 6c 75 64 65 64 20 69 6e 0a 2a 2a 20 74 68  ncluded in.** th
19870 65 20 66 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  e final value of
19880 20 28 2a 70 6e 42 79 74 65 29 2c 20 69 66 20 61   (*pnByte), if a
19890 70 70 6c 69 63 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  pplicable..**.**
198a0 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65   NULL is returne
198b0 64 20 69 66 20 61 6e 79 20 65 72 72 6f 72 20 69  d if any error i
198c0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 54  s encountered. T
198d0 68 65 20 66 69 6e 61 6c 20 76 61 6c 75 65 20 6f  he final value o
198e0 66 20 2a 70 6e 42 79 74 65 0a 2a 2a 20 69 73 20  f *pnByte.** is 
198f0 75 6e 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69  undefined in thi
19900 73 20 63 61 73 65 2e 0a 2a 2f 0a 73 74 61 74 69  s case..*/.stati
19910 63 20 63 68 61 72 20 2a 72 65 61 64 46 69 6c 65  c char *readFile
19920 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61  (const char *zNa
19930 6d 65 2c 20 69 6e 74 20 2a 70 6e 42 79 74 65 29  me, int *pnByte)
19940 7b 0a 20 20 46 49 4c 45 20 2a 69 6e 20 3d 20 66  {.  FILE *in = f
19950 6f 70 65 6e 28 7a 4e 61 6d 65 2c 20 22 72 62 22  open(zName, "rb"
19960 29 3b 0a 20 20 6c 6f 6e 67 20 6e 49 6e 3b 0a 20  );.  long nIn;. 
19970 20 73 69 7a 65 5f 74 20 6e 52 65 61 64 3b 0a 20   size_t nRead;. 
19980 20 63 68 61 72 20 2a 70 42 75 66 3b 0a 20 20 69   char *pBuf;.  i
19990 66 28 20 69 6e 3d 3d 30 20 29 20 72 65 74 75 72  f( in==0 ) retur
199a0 6e 20 30 3b 0a 20 20 66 73 65 65 6b 28 69 6e 2c  n 0;.  fseek(in,
199b0 20 30 2c 20 53 45 45 4b 5f 45 4e 44 29 3b 0a 20   0, SEEK_END);. 
199c0 20 6e 49 6e 20 3d 20 66 74 65 6c 6c 28 69 6e 29   nIn = ftell(in)
199d0 3b 0a 20 20 72 65 77 69 6e 64 28 69 6e 29 3b 0a  ;.  rewind(in);.
199e0 20 20 70 42 75 66 20 3d 20 73 71 6c 69 74 65 33    pBuf = sqlite3
199f0 5f 6d 61 6c 6c 6f 63 36 34 28 20 6e 49 6e 2b 31  _malloc64( nIn+1
19a00 20 29 3b 0a 20 20 69 66 28 20 70 42 75 66 3d 3d   );.  if( pBuf==
19a10 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
19a20 6e 52 65 61 64 20 3d 20 66 72 65 61 64 28 70 42  nRead = fread(pB
19a30 75 66 2c 20 6e 49 6e 2c 20 31 2c 20 69 6e 29 3b  uf, nIn, 1, in);
19a40 0a 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a 20  .  fclose(in);. 
19a50 20 69 66 28 20 6e 52 65 61 64 21 3d 31 20 29 7b   if( nRead!=1 ){
19a60 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
19a70 65 28 70 42 75 66 29 3b 0a 20 20 20 20 72 65 74  e(pBuf);.    ret
19a80 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 70 42 75  urn 0;.  }.  pBu
19a90 66 5b 6e 49 6e 5d 20 3d 20 30 3b 0a 20 20 69 66  f[nIn] = 0;.  if
19aa0 28 20 70 6e 42 79 74 65 20 29 20 2a 70 6e 42 79  ( pnByte ) *pnBy
19ab0 74 65 20 3d 20 6e 49 6e 3b 0a 20 20 72 65 74 75  te = nIn;.  retu
19ac0 72 6e 20 70 42 75 66 3b 0a 7d 0a 0a 23 69 66 20  rn pBuf;.}..#if 
19ad0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
19ae0 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 2f  NABLE_SESSION)./
19af0 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 73 69 6e  *.** Close a sin
19b00 67 6c 65 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20  gle OpenSession 
19b10 6f 62 6a 65 63 74 20 61 6e 64 20 72 65 6c 65 61  object and relea
19b20 73 65 20 61 6c 6c 20 6f 66 20 69 74 73 20 61 73  se all of its as
19b30 73 6f 63 69 61 74 65 64 0a 2a 2a 20 72 65 73 6f  sociated.** reso
19b40 75 72 63 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63  urces..*/.static
19b50 20 76 6f 69 64 20 73 65 73 73 69 6f 6e 5f 63 6c   void session_cl
19b60 6f 73 65 28 4f 70 65 6e 53 65 73 73 69 6f 6e 20  ose(OpenSession 
19b70 2a 70 53 65 73 73 69 6f 6e 29 7b 0a 20 20 69 6e  *pSession){.  in
19b80 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 73 65  t i;.  sqlite3se
19b90 73 73 69 6f 6e 5f 64 65 6c 65 74 65 28 70 53 65  ssion_delete(pSe
19ba0 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 73 71 6c  ssion->p);.  sql
19bb0 69 74 65 33 5f 66 72 65 65 28 70 53 65 73 73 69  ite3_free(pSessi
19bc0 6f 6e 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 66 6f  on->zName);.  fo
19bd0 72 28 69 3d 30 3b 20 69 3c 70 53 65 73 73 69 6f  r(i=0; i<pSessio
19be0 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20 69 2b 2b 29  n->nFilter; i++)
19bf0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  {.    sqlite3_fr
19c00 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46  ee(pSession->azF
19c10 69 6c 74 65 72 5b 69 5d 29 3b 0a 20 20 7d 0a 20  ilter[i]);.  }. 
19c20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53   sqlite3_free(pS
19c30 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72  ession->azFilter
19c40 29 3b 0a 20 20 6d 65 6d 73 65 74 28 70 53 65 73  );.  memset(pSes
19c50 73 69 6f 6e 2c 20 30 2c 20 73 69 7a 65 6f 66 28  sion, 0, sizeof(
19c60 4f 70 65 6e 53 65 73 73 69 6f 6e 29 29 3b 0a 7d  OpenSession));.}
19c70 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
19c80 6c 6f 73 65 20 61 6c 6c 20 4f 70 65 6e 53 65 73  lose all OpenSes
19c90 73 69 6f 6e 20 6f 62 6a 65 63 74 73 20 61 6e 64  sion objects and
19ca0 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 61 73 73   release all ass
19cb0 6f 63 69 61 74 65 64 20 72 65 73 6f 75 72 63 65  ociated resource
19cc0 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  s..*/.#if define
19cd0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
19ce0 53 45 53 53 49 4f 4e 29 0a 73 74 61 74 69 63 20  SESSION).static 
19cf0 76 6f 69 64 20 73 65 73 73 69 6f 6e 5f 63 6c 6f  void session_clo
19d00 73 65 5f 61 6c 6c 28 53 68 65 6c 6c 53 74 61 74  se_all(ShellStat
19d10 65 20 2a 70 29 7b 0a 20 20 69 6e 74 20 69 3b 0a  e *p){.  int i;.
19d20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
19d30 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b 29 7b 0a  nSession; i++){.
19d40 20 20 20 20 73 65 73 73 69 6f 6e 5f 63 6c 6f 73      session_clos
19d50 65 28 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69  e(&p->aSession[i
19d60 5d 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6e 53 65  ]);.  }.  p->nSe
19d70 73 73 69 6f 6e 20 3d 20 30 3b 0a 7d 0a 23 65 6c  ssion = 0;.}.#el
19d80 73 65 0a 23 20 64 65 66 69 6e 65 20 73 65 73 73  se.# define sess
19d90 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c 6c 28 58 29  ion_close_all(X)
19da0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
19db0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
19dc0 20 74 68 65 20 78 46 69 6c 74 65 72 20 66 75 6e   the xFilter fun
19dd0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 6f 70 65  ction for an ope
19de0 6e 20 73 65 73 73 69 6f 6e 2e 20 20 4f 6d 69 74  n session.  Omit
19df0 0a 2a 2a 20 61 6e 79 20 74 61 62 6c 65 73 20 6e  .** any tables n
19e00 61 6d 65 64 20 62 79 20 22 2e 73 65 73 73 69 6f  amed by ".sessio
19e10 6e 20 66 69 6c 74 65 72 22 20 62 75 74 20 6c 65  n filter" but le
19e20 74 20 61 6c 6c 20 6f 74 68 65 72 20 74 61 62 6c  t all other tabl
19e30 65 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 23 69  e through..*/.#i
19e40 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
19e50 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29  _ENABLE_SESSION)
19e60 0a 73 74 61 74 69 63 20 69 6e 74 20 73 65 73 73  .static int sess
19e70 69 6f 6e 5f 66 69 6c 74 65 72 28 76 6f 69 64 20  ion_filter(void 
19e80 2a 70 43 74 78 2c 20 63 6f 6e 73 74 20 63 68 61  *pCtx, const cha
19e90 72 20 2a 7a 54 61 62 29 7b 0a 20 20 4f 70 65 6e  r *zTab){.  Open
19ea0 53 65 73 73 69 6f 6e 20 2a 70 53 65 73 73 69 6f  Session *pSessio
19eb0 6e 20 3d 20 28 4f 70 65 6e 53 65 73 73 69 6f 6e  n = (OpenSession
19ec0 2a 29 70 43 74 78 3b 0a 20 20 69 6e 74 20 69 3b  *)pCtx;.  int i;
19ed0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 53  .  for(i=0; i<pS
19ee0 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b  ession->nFilter;
19ef0 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 73   i++){.    if( s
19f00 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 70  qlite3_strglob(p
19f10 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65  Session->azFilte
19f20 72 5b 69 5d 2c 20 7a 54 61 62 29 3d 3d 30 20 29  r[i], zTab)==0 )
19f30 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
19f40 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e   return 1;.}.#en
19f50 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  dif../*.** Try t
19f60 6f 20 64 65 64 75 63 65 20 74 68 65 20 74 79 70  o deduce the typ
19f70 65 20 6f 66 20 66 69 6c 65 20 66 6f 72 20 7a 4e  e of file for zN
19f80 61 6d 65 20 62 61 73 65 64 20 6f 6e 20 69 74 73  ame based on its
19f90 20 63 6f 6e 74 65 6e 74 2e 20 20 52 65 74 75 72   content.  Retur
19fa0 6e 0a 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20  n.** one of the 
19fb0 53 48 45 4c 4c 5f 4f 50 45 4e 5f 2a 20 63 6f 6e  SHELL_OPEN_* con
19fc0 73 74 61 6e 74 73 2e 0a 2a 2f 0a 73 74 61 74 69  stants..*/.stati
19fd0 63 20 69 6e 74 20 64 65 64 75 63 65 44 61 74 61  c int deduceData
19fe0 62 61 73 65 54 79 70 65 28 63 6f 6e 73 74 20 63  baseType(const c
19ff0 68 61 72 20 2a 7a 4e 61 6d 65 29 7b 0a 20 20 46  har *zName){.  F
1a000 49 4c 45 20 2a 66 20 3d 20 66 6f 70 65 6e 28 7a  ILE *f = fopen(z
1a010 4e 61 6d 65 2c 20 22 72 62 22 29 3b 0a 20 20 73  Name, "rb");.  s
1a020 69 7a 65 5f 74 20 6e 3b 0a 20 20 69 6e 74 20 72  ize_t n;.  int r
1a030 63 20 3d 20 53 48 45 4c 4c 5f 4f 50 45 4e 5f 55  c = SHELL_OPEN_U
1a040 4e 53 50 45 43 3b 0a 20 20 63 68 61 72 20 7a 42  NSPEC;.  char zB
1a050 75 66 5b 31 30 30 5d 3b 0a 20 20 69 66 28 20 66  uf[100];.  if( f
1a060 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 53 48 45  ==0 ) return SHE
1a070 4c 4c 5f 4f 50 45 4e 5f 4e 4f 52 4d 41 4c 3b 0a  LL_OPEN_NORMAL;.
1a080 20 20 66 73 65 65 6b 28 66 2c 20 2d 32 35 2c 20    fseek(f, -25, 
1a090 53 45 45 4b 5f 45 4e 44 29 3b 0a 20 20 6e 20 3d  SEEK_END);.  n =
1a0a0 20 66 72 65 61 64 28 7a 42 75 66 2c 20 32 35 2c   fread(zBuf, 25,
1a0b0 20 31 2c 20 66 29 3b 0a 20 20 69 66 28 20 6e 3d   1, f);.  if( n=
1a0c0 3d 31 20 26 26 20 6d 65 6d 63 6d 70 28 7a 42 75  =1 && memcmp(zBu
1a0d0 66 2c 20 22 53 74 61 72 74 2d 4f 66 2d 53 51 4c  f, "Start-Of-SQL
1a0e0 69 74 65 33 2d 22 2c 20 31 37 29 3d 3d 30 20 29  ite3-", 17)==0 )
1a0f0 7b 0a 20 20 20 20 72 63 20 3d 20 53 48 45 4c 4c  {.    rc = SHELL
1a100 5f 4f 50 45 4e 5f 41 50 50 45 4e 44 56 46 53 3b  _OPEN_APPENDVFS;
1a110 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 73  .  }else{.    fs
1a120 65 65 6b 28 66 2c 20 2d 32 32 2c 20 53 45 45 4b  eek(f, -22, SEEK
1a130 5f 45 4e 44 29 3b 0a 20 20 20 20 6e 20 3d 20 66  _END);.    n = f
1a140 72 65 61 64 28 7a 42 75 66 2c 20 32 32 2c 20 31  read(zBuf, 22, 1
1a150 2c 20 66 29 3b 0a 20 20 20 20 69 66 28 20 6e 3d  , f);.    if( n=
1a160 3d 31 20 26 26 20 7a 42 75 66 5b 30 5d 3d 3d 30  =1 && zBuf[0]==0
1a170 78 35 30 20 26 26 20 7a 42 75 66 5b 31 5d 3d 3d  x50 && zBuf[1]==
1a180 30 78 34 62 20 26 26 20 7a 42 75 66 5b 32 5d 3d  0x4b && zBuf[2]=
1a190 3d 30 78 30 35 0a 20 20 20 20 20 20 20 26 26 20  =0x05.       && 
1a1a0 7a 42 75 66 5b 33 5d 3d 3d 30 78 30 36 20 29 7b  zBuf[3]==0x06 ){
1a1b0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 48 45 4c  .      rc = SHEL
1a1c0 4c 5f 4f 50 45 4e 5f 5a 49 50 46 49 4c 45 3b 0a  L_OPEN_ZIPFILE;.
1a1d0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 63 6c 6f      }.  }.  fclo
1a1e0 73 65 28 66 29 3b 0a 20 20 72 65 74 75 72 6e 20  se(f);.  return 
1a1f0 72 63 3b 20 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d  rc;  .}../*.** M
1a200 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74  ake sure the dat
1a210 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2e 20 20  abase is open.  
1a220 49 66 20 69 74 20 69 73 20 6e 6f 74 2c 20 74 68  If it is not, th
1a230 65 6e 20 6f 70 65 6e 20 69 74 2e 20 20 49 66 0a  en open it.  If.
1a240 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
1a250 66 61 69 6c 73 20 74 6f 20 6f 70 65 6e 2c 20 70  fails to open, p
1a260 72 69 6e 74 20 61 6e 20 65 72 72 6f 72 20 6d 65  rint an error me
1a270 73 73 61 67 65 20 61 6e 64 20 65 78 69 74 2e 0a  ssage and exit..
1a280 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
1a290 70 65 6e 5f 64 62 28 53 68 65 6c 6c 53 74 61 74  pen_db(ShellStat
1a2a0 65 20 2a 70 2c 20 69 6e 74 20 6b 65 65 70 41 6c  e *p, int keepAl
1a2b0 69 76 65 29 7b 0a 20 20 69 66 28 20 70 2d 3e 64  ive){.  if( p->d
1a2c0 62 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  b==0 ){.    sqli
1a2d0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
1a2e0 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6f 70 65  ;.    if( p->ope
1a2f0 6e 4d 6f 64 65 3d 3d 53 48 45 4c 4c 5f 4f 50 45  nMode==SHELL_OPE
1a300 4e 5f 55 4e 53 50 45 43 20 26 26 20 61 63 63 65  N_UNSPEC && acce
1a310 73 73 28 70 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d  ss(p->zDbFilenam
1a320 65 2c 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  e,0)==0 ){.     
1a330 20 70 2d 3e 6f 70 65 6e 4d 6f 64 65 20 3d 20 28   p->openMode = (
1a340 75 38 29 64 65 64 75 63 65 44 61 74 61 62 61 73  u8)deduceDatabas
1a350 65 54 79 70 65 28 70 2d 3e 7a 44 62 46 69 6c 65  eType(p->zDbFile
1a360 6e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  name);.    }.   
1a370 20 73 77 69 74 63 68 28 20 70 2d 3e 6f 70 65 6e   switch( p->open
1a380 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  Mode ){.      ca
1a390 73 65 20 53 48 45 4c 4c 5f 4f 50 45 4e 5f 41 50  se SHELL_OPEN_AP
1a3a0 50 45 4e 44 56 46 53 3a 20 7b 0a 20 20 20 20 20  PENDVFS: {.     
1a3b0 20 20 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f     sqlite3_open_
1a3c0 76 32 28 70 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d  v2(p->zDbFilenam
1a3d0 65 2c 20 26 70 2d 3e 64 62 2c 20 0a 20 20 20 20  e, &p->db, .    
1a3e0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50         SQLITE_OP
1a3f0 45 4e 5f 52 45 41 44 57 52 49 54 45 7c 53 51 4c  EN_READWRITE|SQL
1a400 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 2c  ITE_OPEN_CREATE,
1a410 20 22 61 70 6e 64 76 66 73 22 29 3b 0a 20 20 20   "apndvfs");.   
1a420 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1a430 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 53    }.      case S
1a440 48 45 4c 4c 5f 4f 50 45 4e 5f 5a 49 50 46 49 4c  HELL_OPEN_ZIPFIL
1a450 45 3a 20 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  E: {.        sql
1a460 69 74 65 33 5f 6f 70 65 6e 28 22 3a 6d 65 6d 6f  ite3_open(":memo
1a470 72 79 3a 22 2c 20 26 70 2d 3e 64 62 29 3b 0a 20  ry:", &p->db);. 
1a480 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1a490 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65      }.      case
1a4a0 20 53 48 45 4c 4c 5f 4f 50 45 4e 5f 55 4e 53 50   SHELL_OPEN_UNSP
1a4b0 45 43 3a 0a 20 20 20 20 20 20 63 61 73 65 20 53  EC:.      case S
1a4c0 48 45 4c 4c 5f 4f 50 45 4e 5f 4e 4f 52 4d 41 4c  HELL_OPEN_NORMAL
1a4d0 3a 20 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  : {.        sqli
1a4e0 74 65 33 5f 6f 70 65 6e 28 70 2d 3e 7a 44 62 46  te3_open(p->zDbF
1a4f0 69 6c 65 6e 61 6d 65 2c 20 26 70 2d 3e 64 62 29  ilename, &p->db)
1a500 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
1a510 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1a520 20 20 20 67 6c 6f 62 61 6c 44 62 20 3d 20 70 2d     globalDb = p-
1a530 3e 64 62 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  >db;.    if( p->
1a540 64 62 3d 3d 30 20 7c 7c 20 53 51 4c 49 54 45 5f  db==0 || SQLITE_
1a550 4f 4b 21 3d 73 71 6c 69 74 65 33 5f 65 72 72 63  OK!=sqlite3_errc
1a560 6f 64 65 28 70 2d 3e 64 62 29 20 29 7b 0a 20 20  ode(p->db) ){.  
1a570 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1a580 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 75  stderr,"Error: u
1a590 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61  nable to open da
1a5a0 74 61 62 61 73 65 20 5c 22 25 73 5c 22 3a 20 25  tabase \"%s\": %
1a5b0 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
1a5c0 70 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d 65 2c 20  p->zDbFilename, 
1a5d0 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70  sqlite3_errmsg(p
1a5e0 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 69 66  ->db));.      if
1a5f0 28 20 6b 65 65 70 41 6c 69 76 65 20 29 20 72 65  ( keepAlive ) re
1a600 74 75 72 6e 3b 0a 20 20 20 20 20 20 65 78 69 74  turn;.      exit
1a610 28 31 29 3b 0a 20 20 20 20 7d 0a 23 69 66 6e 64  (1);.    }.#ifnd
1a620 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  ef SQLITE_OMIT_L
1a630 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20  OAD_EXTENSION.  
1a640 20 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65    sqlite3_enable
1a650 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
1a660 70 2d 3e 64 62 2c 20 31 29 3b 0a 23 65 6e 64 69  p->db, 1);.#endi
1a670 66 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  f.    sqlite3_fi
1a680 6c 65 69 6f 5f 69 6e 69 74 28 70 2d 3e 64 62 2c  leio_init(p->db,
1a690 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69   0, 0);.    sqli
1a6a0 74 65 33 5f 73 68 61 74 68 72 65 65 5f 69 6e 69  te3_shathree_ini
1a6b0 74 28 70 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a  t(p->db, 0, 0);.
1a6c0 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70      sqlite3_comp
1a6d0 6c 65 74 69 6f 6e 5f 69 6e 69 74 28 70 2d 3e 64  letion_init(p->d
1a6e0 62 2c 20 30 2c 20 30 29 3b 0a 23 69 66 64 65 66  b, 0, 0);.#ifdef
1a6f0 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 5a 4c 49   SQLITE_HAVE_ZLI
1a700 42 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 7a 69  B.    sqlite3_zi
1a710 70 66 69 6c 65 5f 69 6e 69 74 28 70 2d 3e 64 62  pfile_init(p->db
1a720 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  , 0, 0);.    sql
1a730 69 74 65 33 5f 73 71 6c 61 72 5f 69 6e 69 74 28  ite3_sqlar_init(
1a740 70 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 23 65  p->db, 0, 0);.#e
1a750 6e 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33  ndif.    sqlite3
1a760 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
1a770 28 70 2d 3e 64 62 2c 20 22 73 68 65 6c 6c 5f 61  (p->db, "shell_a
1a780 64 64 5f 73 63 68 65 6d 61 22 2c 20 33 2c 20 53  dd_schema", 3, S
1a790 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 0a 20  QLITE_UTF8, 0,. 
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7b0 20 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c             shell
1a7c0 41 64 64 53 63 68 65 6d 61 4e 61 6d 65 2c 20 30  AddSchemaName, 0
1a7d0 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
1a7e0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
1a7f0 6e 28 70 2d 3e 64 62 2c 20 22 73 68 65 6c 6c 5f  n(p->db, "shell_
1a800 6d 6f 64 75 6c 65 5f 73 63 68 65 6d 61 22 2c 20  module_schema", 
1a810 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
1a820 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1a840 68 65 6c 6c 4d 6f 64 75 6c 65 53 63 68 65 6d 61  hellModuleSchema
1a850 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  , 0, 0);.    sql
1a860 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
1a870 74 69 6f 6e 28 70 2d 3e 64 62 2c 20 22 73 68 65  tion(p->db, "she
1a880 6c 6c 5f 70 75 74 73 6e 6c 22 2c 20 31 2c 20 53  ll_putsnl", 1, S
1a890 51 4c 49 54 45 5f 55 54 46 38 2c 20 70 2c 0a 20  QLITE_UTF8, p,. 
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8b0 20 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c             shell
1a8c0 50 75 74 73 46 75 6e 63 2c 20 30 2c 20 30 29 3b  PutsFunc, 0, 0);
1a8d0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65  .    sqlite3_cre
1a8e0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 70 2d 3e  ate_function(p->
1a8f0 64 62 2c 20 22 65 64 69 74 22 2c 20 31 2c 20 53  db, "edit", 1, S
1a900 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 0a 20  QLITE_UTF8, 0,. 
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 20 20 20 20 20 20 20 20 20 65 64 69 74 46             editF
1a930 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  unc, 0, 0);.    
1a940 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
1a950 75 6e 63 74 69 6f 6e 28 70 2d 3e 64 62 2c 20 22  unction(p->db, "
1a960 65 64 69 74 22 2c 20 32 2c 20 53 51 4c 49 54 45  edit", 2, SQLITE
1a970 5f 55 54 46 38 2c 20 30 2c 0a 20 20 20 20 20 20  _UTF8, 0,.      
1a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a990 20 20 20 20 20 20 65 64 69 74 46 75 6e 63 2c 20        editFunc, 
1a9a0 30 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70  0, 0);.    if( p
1a9b0 2d 3e 6f 70 65 6e 4d 6f 64 65 3d 3d 53 48 45 4c  ->openMode==SHEL
1a9c0 4c 5f 4f 50 45 4e 5f 5a 49 50 46 49 4c 45 20 29  L_OPEN_ZIPFILE )
1a9d0 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 53  {.      char *zS
1a9e0 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
1a9f0 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20 22  intf(.         "
1aa00 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
1aa10 41 42 4c 45 20 7a 69 70 20 55 53 49 4e 47 20 7a  ABLE zip USING z
1aa20 69 70 66 69 6c 65 28 25 51 29 3b 22 2c 20 70 2d  ipfile(%Q);", p-
1aa30 3e 7a 44 62 46 69 6c 65 6e 61 6d 65 29 3b 0a 20  >zDbFilename);. 
1aa40 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65       sqlite3_exe
1aa50 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 30  c(p->db, zSql, 0
1aa60 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  , 0, 0);.      s
1aa70 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
1aa80 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  );.    }.  }.}..
1aa90 23 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e  #if HAVE_READLIN
1aaa0 45 20 7c 7c 20 48 41 56 45 5f 45 44 49 54 4c 49  E || HAVE_EDITLI
1aab0 4e 45 0a 2f 2a 0a 2a 2a 20 52 65 61 64 6c 69 6e  NE./*.** Readlin
1aac0 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 63 61 6c  e completion cal
1aad0 6c 62 61 63 6b 73 0a 2a 2f 0a 73 74 61 74 69 63  lbacks.*/.static
1aae0 20 63 68 61 72 20 2a 72 65 61 64 6c 69 6e 65 5f   char *readline_
1aaf0 63 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72  completion_gener
1ab00 61 74 6f 72 28 63 6f 6e 73 74 20 63 68 61 72 20  ator(const char 
1ab10 2a 74 65 78 74 2c 20 69 6e 74 20 73 74 61 74 65  *text, int state
1ab20 29 7b 0a 20 20 73 74 61 74 69 63 20 73 71 6c 69  ){.  static sqli
1ab30 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20  te3_stmt *pStmt 
1ab40 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65  = 0;.  char *zRe
1ab50 74 3b 0a 20 20 69 66 28 20 73 74 61 74 65 3d 3d  t;.  if( state==
1ab60 30 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  0 ){.    char *z
1ab70 53 71 6c 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Sql;.    sqlite3
1ab80 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
1ab90 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
1aba0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45  ite3_mprintf("SE
1abb0 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 63 61  LECT DISTINCT ca
1abc0 6e 64 69 64 61 74 65 20 43 4f 4c 4c 41 54 45 20  ndidate COLLATE 
1abd0 6e 6f 63 61 73 65 22 0a 20 20 20 20 20 20 20 20  nocase".        
1abe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abf0 20 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d 70 6c     "  FROM compl
1ac00 65 74 69 6f 6e 28 25 51 29 20 4f 52 44 45 52 20  etion(%Q) ORDER 
1ac10 42 59 20 31 22 2c 20 74 65 78 74 29 3b 0a 20 20  BY 1", text);.  
1ac20 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72    sqlite3_prepar
1ac30 65 5f 76 32 28 67 6c 6f 62 61 6c 44 62 2c 20 7a  e_v2(globalDb, z
1ac40 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
1ac50 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
1ac60 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 7d  _free(zSql);.  }
1ac70 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73  .  if( sqlite3_s
1ac80 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49  tep(pStmt)==SQLI
1ac90 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 7a 52  TE_ROW ){.    zR
1aca0 65 74 20 3d 20 73 74 72 64 75 70 28 28 63 6f 6e  et = strdup((con
1acb0 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
1acc0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
1acd0 6d 74 2c 20 30 29 29 3b 0a 20 20 7d 65 6c 73 65  mt, 0));.  }else
1ace0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  {.    sqlite3_fi
1acf0 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
1ad00 20 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20     pStmt = 0;.  
1ad10 20 20 7a 52 65 74 20 3d 20 30 3b 0a 20 20 7d 0a    zRet = 0;.  }.
1ad20 20 20 72 65 74 75 72 6e 20 7a 52 65 74 3b 0a 7d    return zRet;.}
1ad30 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 2a 72  .static char **r
1ad40 65 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 69  eadline_completi
1ad50 6f 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  on(const char *z
1ad60 54 65 78 74 2c 20 69 6e 74 20 69 53 74 61 72 74  Text, int iStart
1ad70 2c 20 69 6e 74 20 69 45 6e 64 29 7b 0a 20 20 72  , int iEnd){.  r
1ad80 6c 5f 61 74 74 65 6d 70 74 65 64 5f 63 6f 6d 70  l_attempted_comp
1ad90 6c 65 74 69 6f 6e 5f 6f 76 65 72 20 3d 20 31 3b  letion_over = 1;
1ada0 0a 20 20 72 65 74 75 72 6e 20 72 6c 5f 63 6f 6d  .  return rl_com
1adb0 70 6c 65 74 69 6f 6e 5f 6d 61 74 63 68 65 73 28  pletion_matches(
1adc0 7a 54 65 78 74 2c 20 72 65 61 64 6c 69 6e 65 5f  zText, readline_
1add0 63 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72  completion_gener
1ade0 61 74 6f 72 29 3b 0a 7d 0a 0a 23 65 6c 69 66 20  ator);.}..#elif 
1adf0 48 41 56 45 5f 4c 49 4e 45 4e 4f 49 53 45 0a 2f  HAVE_LINENOISE./
1ae00 2a 0a 2a 2a 20 4c 69 6e 65 6e 6f 69 73 65 20 63  *.** Linenoise c
1ae10 6f 6d 70 6c 65 74 69 6f 6e 20 63 61 6c 6c 62 61  ompletion callba
1ae20 63 6b 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  ck.*/.static voi
1ae30 64 20 6c 69 6e 65 6e 6f 69 73 65 5f 63 6f 6d 70  d linenoise_comp
1ae40 6c 65 74 69 6f 6e 28 63 6f 6e 73 74 20 63 68 61  letion(const cha
1ae50 72 20 2a 7a 4c 69 6e 65 2c 20 6c 69 6e 65 6e 6f  r *zLine, lineno
1ae60 69 73 65 43 6f 6d 70 6c 65 74 69 6f 6e 73 20 2a  iseCompletions *
1ae70 6c 63 29 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65  lc){.  int nLine
1ae80 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 4c 69 6e   = strlen30(zLin
1ae90 65 29 3b 0a 20 20 69 6e 74 20 69 2c 20 69 53 74  e);.  int i, iSt
1aea0 61 72 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  art;.  sqlite3_s
1aeb0 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a  tmt *pStmt = 0;.
1aec0 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
1aed0 63 68 61 72 20 7a 42 75 66 5b 31 30 30 30 5d 3b  char zBuf[1000];
1aee0 0a 0a 20 20 69 66 28 20 6e 4c 69 6e 65 3e 73 69  ..  if( nLine>si
1aef0 7a 65 6f 66 28 7a 42 75 66 29 2d 33 30 20 29 20  zeof(zBuf)-30 ) 
1af00 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 7a 4c  return;.  if( zL
1af10 69 6e 65 5b 30 5d 3d 3d 27 2e 27 20 29 20 72 65  ine[0]=='.' ) re
1af20 74 75 72 6e 3b 0a 20 20 66 6f 72 28 69 3d 6e 4c  turn;.  for(i=nL
1af30 69 6e 65 2d 31 3b 20 69 3e 3d 30 20 26 26 20 28  ine-1; i>=0 && (
1af40 69 73 61 6c 6e 75 6d 28 7a 4c 69 6e 65 5b 69 5d  isalnum(zLine[i]
1af50 29 20 7c 7c 20 7a 4c 69 6e 65 5b 69 5d 3d 3d 27  ) || zLine[i]=='
1af60 5f 27 29 3b 20 69 2d 2d 29 7b 7d 0a 20 20 69 66  _'); i--){}.  if
1af70 28 20 69 3d 3d 6e 4c 69 6e 65 2d 31 20 29 20 72  ( i==nLine-1 ) r
1af80 65 74 75 72 6e 3b 0a 20 20 69 53 74 61 72 74 20  eturn;.  iStart 
1af90 3d 20 69 2b 31 3b 0a 20 20 6d 65 6d 63 70 79 28  = i+1;.  memcpy(
1afa0 7a 42 75 66 2c 20 7a 4c 69 6e 65 2c 20 69 53 74  zBuf, zLine, iSt
1afb0 61 72 74 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73  art);.  zSql = s
1afc0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1afd0 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20  SELECT DISTINCT 
1afe0 63 61 6e 64 69 64 61 74 65 20 43 4f 4c 4c 41 54  candidate COLLAT
1aff0 45 20 6e 6f 63 61 73 65 22 0a 20 20 20 20 20 20  E nocase".      
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d 70 6c     "  FROM compl
1b020 65 74 69 6f 6e 28 25 51 2c 25 51 29 20 4f 52 44  etion(%Q,%Q) ORD
1b030 45 52 20 42 59 20 31 22 2c 0a 20 20 20 20 20 20  ER BY 1",.      
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 20 20 26 7a 4c 69 6e 65 5b 69 53 74 61 72 74     &zLine[iStart
1b060 5d 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 73 71 6c  ], zLine);.  sql
1b070 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
1b080 67 6c 6f 62 61 6c 44 62 2c 20 7a 53 71 6c 2c 20  globalDb, zSql, 
1b090 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
1b0a0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
1b0b0 53 71 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Sql);.  sqlite3_
1b0c0 65 78 65 63 28 67 6c 6f 62 61 6c 44 62 2c 20 22  exec(globalDb, "
1b0d0 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e  PRAGMA page_coun
1b0e0 74 22 2c 20 30 2c 20 30 2c 20 30 29 3b 20 2f 2a  t", 0, 0, 0); /*
1b0f0 20 4c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61   Load the schema
1b100 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 73 71 6c   */.  while( sql
1b110 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
1b120 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a  ==SQLITE_ROW ){.
1b130 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1b140 7a 43 6f 6d 70 6c 65 74 69 6f 6e 20 3d 20 28 63  zCompletion = (c
1b150 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
1b160 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
1b170 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6e  Stmt, 0);.    in
1b180 74 20 6e 43 6f 6d 70 6c 65 74 69 6f 6e 20 3d 20  t nCompletion = 
1b190 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
1b1a0 79 74 65 73 28 70 53 74 6d 74 2c 20 30 29 3b 0a  ytes(pStmt, 0);.
1b1b0 20 20 20 20 69 66 28 20 69 53 74 61 72 74 2b 6e      if( iStart+n
1b1c0 43 6f 6d 70 6c 65 74 69 6f 6e 20 3c 20 73 69 7a  Completion < siz
1b1d0 65 6f 66 28 7a 42 75 66 29 2d 31 20 29 7b 0a 20  eof(zBuf)-1 ){. 
1b1e0 20 20 20 20 20 6d 65 6d 63 70 79 28 7a 42 75 66       memcpy(zBuf
1b1f0 2b 69 53 74 61 72 74 2c 20 7a 43 6f 6d 70 6c 65  +iStart, zComple
1b200 74 69 6f 6e 2c 20 6e 43 6f 6d 70 6c 65 74 69 6f  tion, nCompletio
1b210 6e 2b 31 29 3b 0a 20 20 20 20 20 20 6c 69 6e 65  n+1);.      line
1b220 6e 6f 69 73 65 41 64 64 43 6f 6d 70 6c 65 74 69  noiseAddCompleti
1b230 6f 6e 28 6c 63 2c 20 7a 42 75 66 29 3b 0a 20 20  on(lc, zBuf);.  
1b240 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65    }.  }.  sqlite
1b250 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
1b260 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
1b270 2a 2a 20 44 6f 20 43 2d 6c 61 6e 67 75 61 67 65  ** Do C-language
1b280 20 73 74 79 6c 65 20 64 65 71 75 6f 74 69 6e 67   style dequoting
1b290 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 5c 61 20 20 20  ..**.**    \a   
1b2a0 20 2d 3e 20 61 6c 61 72 6d 0a 2a 2a 20 20 20 20   -> alarm.**    
1b2b0 5c 62 20 20 20 20 2d 3e 20 62 61 63 6b 73 70 61  \b    -> backspa
1b2c0 63 65 0a 2a 2a 20 20 20 20 5c 74 20 20 20 20 2d  ce.**    \t    -
1b2d0 3e 20 74 61 62 0a 2a 2a 20 20 20 20 5c 6e 20 20  > tab.**    \n  
1b2e0 20 20 2d 3e 20 6e 65 77 6c 69 6e 65 0a 2a 2a 20    -> newline.** 
1b2f0 20 20 20 5c 76 20 20 20 20 2d 3e 20 76 65 72 74     \v    -> vert
1b300 69 63 61 6c 20 74 61 62 0a 2a 2a 20 20 20 20 5c  ical tab.**    \
1b310 66 20 20 20 20 2d 3e 20 66 6f 72 6d 20 66 65 65  f    -> form fee
1b320 64 0a 2a 2a 20 20 20 20 5c 72 20 20 20 20 2d 3e  d.**    \r    ->
1b330 20 63 61 72 72 69 61 67 65 20 72 65 74 75 72 6e   carriage return
1b340 0a 2a 2a 20 20 20 20 5c 73 20 20 20 20 2d 3e 20  .**    \s    -> 
1b350 73 70 61 63 65 0a 2a 2a 20 20 20 20 5c 22 20 20  space.**    \"  
1b360 20 20 2d 3e 20 22 0a 2a 2a 20 20 20 20 5c 27 20    -> ".**    \' 
1b370 20 20 20 2d 3e 20 27 0a 2a 2a 20 20 20 20 5c 5c     -> '.**    \\
1b380 20 20 20 20 2d 3e 20 62 61 63 6b 73 6c 61 73 68      -> backslash
1b390 0a 2a 2a 20 20 20 20 5c 4e 4e 4e 20 20 2d 3e 20  .**    \NNN  -> 
1b3a0 61 73 63 69 69 20 63 68 61 72 61 63 74 65 72 20  ascii character 
1b3b0 4e 4e 4e 20 69 6e 20 6f 63 74 61 6c 0a 2a 2f 0a  NNN in octal.*/.
1b3c0 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 73 6f  static void reso
1b3d0 6c 76 65 5f 62 61 63 6b 73 6c 61 73 68 65 73 28  lve_backslashes(
1b3e0 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20  char *z){.  int 
1b3f0 69 2c 20 6a 3b 0a 20 20 63 68 61 72 20 63 3b 0a  i, j;.  char c;.
1b400 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 2a    while( *z && *
1b410 7a 21 3d 27 5c 5c 27 20 29 20 7a 2b 2b 3b 0a 20  z!='\\' ) z++;. 
1b420 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 28 63 20 3d   for(i=j=0; (c =
1b430 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b 2c 20   z[i])!=0; i++, 
1b440 6a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 63 3d  j++){.    if( c=
1b450 3d 27 5c 5c 27 20 26 26 20 7a 5b 69 2b 31 5d 21  ='\\' && z[i+1]!
1b460 3d 30 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  =0 ){.      c = 
1b470 7a 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20 20 69 66  z[++i];.      if
1b480 28 20 63 3d 3d 27 61 27 20 29 7b 0a 20 20 20 20  ( c=='a' ){.    
1b490 20 20 20 20 63 20 3d 20 27 5c 61 27 3b 0a 20 20      c = '\a';.  
1b4a0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
1b4b0 3d 27 62 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='b' ){.        
1b4c0 63 20 3d 20 27 5c 62 27 3b 0a 20 20 20 20 20 20  c = '\b';.      
1b4d0 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 74 27  }else if( c=='t'
1b4e0 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20   ){.        c = 
1b4f0 27 5c 74 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73  '\t';.      }els
1b500 65 20 69 66 28 20 63 3d 3d 27 6e 27 20 29 7b 0a  e if( c=='n' ){.
1b510 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 6e 27          c = '\n'
1b520 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
1b530 28 20 63 3d 3d 27 76 27 20 29 7b 0a 20 20 20 20  ( c=='v' ){.    
1b540 20 20 20 20 63 20 3d 20 27 5c 76 27 3b 0a 20 20      c = '\v';.  
1b550 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
1b560 3d 27 66 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='f' ){.        
1b570 63 20 3d 20 27 5c 66 27 3b 0a 20 20 20 20 20 20  c = '\f';.      
1b580 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 72 27  }else if( c=='r'
1b590 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20   ){.        c = 
1b5a0 27 5c 72 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73  '\r';.      }els
1b5b0 65 20 69 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a  e if( c=='"' ){.
1b5c0 20 20 20 20 20 20 20 20 63 20 3d 20 27 22 27 3b          c = '"';
1b5d0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
1b5e0 20 63 3d 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20   c=='\'' ){.    
1b5f0 20 20 20 20 63 20 3d 20 27 5c 27 27 3b 0a 20 20      c = '\'';.  
1b600 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
1b610 3d 27 5c 5c 27 20 29 7b 0a 20 20 20 20 20 20 20  ='\\' ){.       
1b620 20 63 20 3d 20 27 5c 5c 27 3b 0a 20 20 20 20 20   c = '\\';.     
1b630 20 7d 65 6c 73 65 20 69 66 28 20 63 3e 3d 27 30   }else if( c>='0
1b640 27 20 26 26 20 63 3c 3d 27 37 27 20 29 7b 0a 20  ' && c<='7' ){. 
1b650 20 20 20 20 20 20 20 63 20 2d 3d 20 27 30 27 3b         c -= '0';
1b660 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69  .        if( z[i
1b670 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 69 2b  +1]>='0' && z[i+
1b680 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20 20 20  1]<='7' ){.     
1b690 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20       i++;.      
1b6a0 20 20 20 20 63 20 3d 20 28 63 3c 3c 33 29 20 2b      c = (c<<3) +
1b6b0 20 7a 5b 69 5d 20 2d 20 27 30 27 3b 0a 20 20 20   z[i] - '0';.   
1b6c0 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69 2b 31         if( z[i+1
1b6d0 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 69 2b 31 5d  ]>='0' && z[i+1]
1b6e0 3c 3d 27 37 27 20 29 7b 0a 20 20 20 20 20 20 20  <='7' ){.       
1b6f0 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20       i++;.      
1b700 20 20 20 20 20 20 63 20 3d 20 28 63 3c 3c 33 29        c = (c<<3)
1b710 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b 0a 20   + z[i] - '0';. 
1b720 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1b730 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
1b740 20 7d 0a 20 20 20 20 7a 5b 6a 5d 20 3d 20 63 3b   }.    z[j] = c;
1b750 0a 20 20 7d 0a 20 20 69 66 28 20 6a 3c 69 20 29  .  }.  if( j<i )
1b760 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a   z[j] = 0;.}../*
1b770 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 7a 41  .** Interpret zA
1b780 72 67 20 61 73 20 65 69 74 68 65 72 20 61 6e 20  rg as either an 
1b790 69 6e 74 65 67 65 72 20 6f 72 20 61 20 62 6f 6f  integer or a boo
1b7a0 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 52 65 74  lean value.  Ret
1b7b0 75 72 6e 20 31 20 6f 72 20 30 0a 2a 2a 20 66 6f  urn 1 or 0.** fo
1b7c0 72 20 54 52 55 45 20 61 6e 64 20 46 41 4c 53 45  r TRUE and FALSE
1b7d0 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 69 6e  .  Return the in
1b7e0 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61  teger value if a
1b7f0 70 70 72 6f 70 72 69 61 74 65 2e 0a 2a 2f 0a 73  ppropriate..*/.s
1b800 74 61 74 69 63 20 69 6e 74 20 62 6f 6f 6c 65 61  tatic int boolea
1b810 6e 56 61 6c 75 65 28 63 6f 6e 73 74 20 63 68 61  nValue(const cha
1b820 72 20 2a 7a 41 72 67 29 7b 0a 20 20 69 6e 74 20  r *zArg){.  int 
1b830 69 3b 0a 20 20 69 66 28 20 7a 41 72 67 5b 30 5d  i;.  if( zArg[0]
1b840 3d 3d 27 30 27 20 26 26 20 7a 41 72 67 5b 31 5d  =='0' && zArg[1]
1b850 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 66 6f 72  =='x' ){.    for
1b860 28 69 3d 32 3b 20 68 65 78 44 69 67 69 74 56 61  (i=2; hexDigitVa
1b870 6c 75 65 28 7a 41 72 67 5b 69 5d 29 3e 3d 30 3b  lue(zArg[i])>=0;
1b880 20 69 2b 2b 29 7b 7d 0a 20 20 7d 65 6c 73 65 7b   i++){}.  }else{
1b890 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 41  .    for(i=0; zA
1b8a0 72 67 5b 69 5d 3e 3d 27 30 27 20 26 26 20 7a 41  rg[i]>='0' && zA
1b8b0 72 67 5b 69 5d 3c 3d 27 39 27 3b 20 69 2b 2b 29  rg[i]<='9'; i++)
1b8c0 7b 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 3e 30  {}.  }.  if( i>0
1b8d0 20 26 26 20 7a 41 72 67 5b 69 5d 3d 3d 30 20 29   && zArg[i]==0 )
1b8e0 20 72 65 74 75 72 6e 20 28 69 6e 74 29 28 69 6e   return (int)(in
1b8f0 74 65 67 65 72 56 61 6c 75 65 28 7a 41 72 67 29  tegerValue(zArg)
1b900 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a   & 0xffffffff);.
1b910 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
1b920 72 69 63 6d 70 28 7a 41 72 67 2c 20 22 6f 6e 22  ricmp(zArg, "on"
1b930 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f  )==0 || sqlite3_
1b940 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 22 79 65  stricmp(zArg,"ye
1b950 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65  s")==0 ){.    re
1b960 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 66  turn 1;.  }.  if
1b970 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  ( sqlite3_stricm
1b980 70 28 7a 41 72 67 2c 20 22 6f 66 66 22 29 3d 3d  p(zArg, "off")==
1b990 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74 72  0 || sqlite3_str
1b9a0 69 63 6d 70 28 7a 41 72 67 2c 22 6e 6f 22 29 3d  icmp(zArg,"no")=
1b9b0 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
1b9c0 20 30 3b 0a 20 20 7d 0a 20 20 75 74 66 38 5f 70   0;.  }.  utf8_p
1b9d0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1b9e0 52 52 4f 52 3a 20 4e 6f 74 20 61 20 62 6f 6f 6c  RROR: Not a bool
1b9f0 65 61 6e 20 76 61 6c 75 65 3a 20 5c 22 25 73 5c  ean value: \"%s\
1ba00 22 2e 20 41 73 73 75 6d 69 6e 67 20 5c 22 6e 6f  ". Assuming \"no
1ba10 5c 22 2e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  \".\n",.        
1ba20 20 20 7a 41 72 67 29 3b 0a 20 20 72 65 74 75 72    zArg);.  retur
1ba30 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65  n 0;.}../*.** Se
1ba40 74 20 6f 72 20 63 6c 65 61 72 20 61 20 73 68 65  t or clear a she
1ba50 6c 6c 20 66 6c 61 67 20 61 63 63 6f 72 64 69 6e  ll flag accordin
1ba60 67 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76  g to a boolean v
1ba70 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
1ba80 76 6f 69 64 20 73 65 74 4f 72 43 6c 65 61 72 46  void setOrClearF
1ba90 6c 61 67 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  lag(ShellState *
1baa0 70 2c 20 75 6e 73 69 67 6e 65 64 20 6d 46 6c 61  p, unsigned mFla
1bab0 67 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  g, const char *z
1bac0 41 72 67 29 7b 0a 20 20 69 66 28 20 62 6f 6f 6c  Arg){.  if( bool
1bad0 65 61 6e 56 61 6c 75 65 28 7a 41 72 67 29 20 29  eanValue(zArg) )
1bae0 7b 0a 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c  {.    ShellSetFl
1baf0 61 67 28 70 2c 20 6d 46 6c 61 67 29 3b 0a 20 20  ag(p, mFlag);.  
1bb00 7d 65 6c 73 65 7b 0a 20 20 20 20 53 68 65 6c 6c  }else{.    Shell
1bb10 43 6c 65 61 72 46 6c 61 67 28 70 2c 20 6d 46 6c  ClearFlag(p, mFl
1bb20 61 67 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ag);.  }.}../*.*
1bb30 2a 20 43 6c 6f 73 65 20 61 6e 20 6f 75 74 70 75  * Close an outpu
1bb40 74 20 66 69 6c 65 2c 20 61 73 73 75 6d 69 6e 67  t file, assuming
1bb50 20 69 74 20 69 73 20 6e 6f 74 20 73 74 64 65 72   it is not stder
1bb60 72 20 6f 72 20 73 74 64 6f 75 74 0a 2a 2f 0a 73  r or stdout.*/.s
1bb70 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75  tatic void outpu
1bb80 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28 46 49 4c  t_file_close(FIL
1bb90 45 20 2a 66 29 7b 0a 20 20 69 66 28 20 66 20 26  E *f){.  if( f &
1bba0 26 20 66 21 3d 73 74 64 6f 75 74 20 26 26 20 66  & f!=stdout && f
1bbb0 21 3d 73 74 64 65 72 72 20 29 20 66 63 6c 6f 73  !=stderr ) fclos
1bbc0 65 28 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  e(f);.}../*.** T
1bbd0 72 79 20 74 6f 20 6f 70 65 6e 20 61 6e 20 6f 75  ry to open an ou
1bbe0 74 70 75 74 20 66 69 6c 65 2e 20 20 20 54 68 65  tput file.   The
1bbf0 20 6e 61 6d 65 73 20 22 73 74 64 6f 75 74 22 20   names "stdout" 
1bc00 61 6e 64 20 22 73 74 64 65 72 72 22 20 61 72 65  and "stderr" are
1bc10 0a 2a 2a 20 72 65 63 6f 67 6e 69 7a 65 64 20 61  .** recognized a
1bc20 6e 64 20 64 6f 20 74 68 65 20 72 69 67 68 74 20  nd do the right 
1bc30 74 68 69 6e 67 2e 20 20 4e 55 4c 4c 20 69 73 20  thing.  NULL is 
1bc40 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
1bc50 6f 75 74 70 75 74 0a 2a 2a 20 66 69 6c 65 6e 61  output.** filena
1bc60 6d 65 20 69 73 20 22 6f 66 66 22 2e 0a 2a 2f 0a  me is "off"..*/.
1bc70 73 74 61 74 69 63 20 46 49 4c 45 20 2a 6f 75 74  static FILE *out
1bc80 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 63 6f  put_file_open(co
1bc90 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c  nst char *zFile,
1bca0 20 69 6e 74 20 62 54 65 78 74 4d 6f 64 65 29 7b   int bTextMode){
1bcb0 0a 20 20 46 49 4c 45 20 2a 66 3b 0a 20 20 69 66  .  FILE *f;.  if
1bcc0 28 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c 22  ( strcmp(zFile,"
1bcd0 73 74 64 6f 75 74 22 29 3d 3d 30 20 29 7b 0a 20  stdout")==0 ){. 
1bce0 20 20 20 66 20 3d 20 73 74 64 6f 75 74 3b 0a 20     f = stdout;. 
1bcf0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
1bd00 70 28 7a 46 69 6c 65 2c 20 22 73 74 64 65 72 72  p(zFile, "stderr
1bd10 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66 20 3d  ")==0 ){.    f =
1bd20 20 73 74 64 65 72 72 3b 0a 20 20 7d 65 6c 73 65   stderr;.  }else
1bd30 20 69 66 28 20 73 74 72 63 6d 70 28 7a 46 69 6c   if( strcmp(zFil
1bd40 65 2c 20 22 6f 66 66 22 29 3d 3d 30 20 29 7b 0a  e, "off")==0 ){.
1bd50 20 20 20 20 66 20 3d 20 30 3b 0a 20 20 7d 65 6c      f = 0;.  }el
1bd60 73 65 7b 0a 20 20 20 20 66 20 3d 20 66 6f 70 65  se{.    f = fope
1bd70 6e 28 7a 46 69 6c 65 2c 20 62 54 65 78 74 4d 6f  n(zFile, bTextMo
1bd80 64 65 20 3f 20 22 77 22 20 3a 20 22 77 62 22 29  de ? "w" : "wb")
1bd90 3b 0a 20 20 20 20 69 66 28 20 66 3d 3d 30 20 29  ;.    if( f==0 )
1bda0 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
1bdb0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
1bdc0 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  or: cannot open 
1bdd0 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65  \"%s\"\n", zFile
1bde0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
1bdf0 65 74 75 72 6e 20 66 3b 0a 7d 0a 0a 23 69 66 20  eturn f;.}..#if 
1be00 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1be10 55 4e 54 45 53 54 41 42 4c 45 29 0a 23 69 66 20  UNTESTABLE).#if 
1be20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1be30 4f 4d 49 54 5f 54 52 41 43 45 29 20 26 26 20 21  OMIT_TRACE) && !
1be40 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1be50 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
1be60 4e 54 29 0a 2f 2a 0a 2a 2a 20 41 20 72 6f 75 74  NT)./*.** A rout
1be70 69 6e 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ine for handling
1be80 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 73 71 6c   output from sql
1be90 69 74 65 33 5f 74 72 61 63 65 28 29 2e 0a 2a 2f  ite3_trace()..*/
1bea0 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 5f  .static int sql_
1beb0 74 72 61 63 65 5f 63 61 6c 6c 62 61 63 6b 28 0a  trace_callback(.
1bec0 20 20 75 6e 73 69 67 6e 65 64 20 6d 54 79 70 65    unsigned mType
1bed0 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 2c 0a  ,.  void *pArg,.
1bee0 20 20 76 6f 69 64 20 2a 70 50 2c 0a 20 20 76 6f    void *pP,.  vo
1bef0 69 64 20 2a 70 58 0a 29 7b 0a 20 20 46 49 4c 45  id *pX.){.  FILE
1bf00 20 2a 66 20 3d 20 28 46 49 4c 45 2a 29 70 41 72   *f = (FILE*)pAr
1bf10 67 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  g;.  UNUSED_PARA
1bf20 4d 45 54 45 52 28 6d 54 79 70 65 29 3b 0a 20 20  METER(mType);.  
1bf30 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
1bf40 28 70 50 29 3b 0a 20 20 69 66 28 20 66 20 29 7b  (pP);.  if( f ){
1bf50 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
1bf60 2a 7a 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  *z = (const char
1bf70 2a 29 70 58 3b 0a 20 20 20 20 69 6e 74 20 69 20  *)pX;.    int i 
1bf80 3d 20 73 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20  = strlen30(z);. 
1bf90 20 20 20 77 68 69 6c 65 28 20 69 3e 30 20 26 26     while( i>0 &&
1bfa0 20 7a 5b 69 2d 31 5d 3d 3d 27 3b 27 20 29 7b 20   z[i-1]==';' ){ 
1bfb0 69 2d 2d 3b 20 7d 0a 20 20 20 20 75 74 66 38 5f  i--; }.    utf8_
1bfc0 70 72 69 6e 74 66 28 66 2c 20 22 25 2e 2a 73 3b  printf(f, "%.*s;
1bfd0 5c 6e 22 2c 20 69 2c 20 7a 29 3b 0a 20 20 7d 0a  \n", i, z);.  }.
1bfe0 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 23 65    return 0;.}.#e
1bff0 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
1c000 2a 2a 20 41 20 6e 6f 2d 6f 70 20 72 6f 75 74 69  ** A no-op routi
1c010 6e 65 20 74 68 61 74 20 72 75 6e 73 20 77 69 74  ne that runs wit
1c020 68 20 74 68 65 20 22 2e 62 72 65 61 6b 70 6f 69  h the ".breakpoi
1c030 6e 74 22 20 64 6f 63 2d 63 6f 6d 6d 61 6e 64 2e  nt" doc-command.
1c040 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 61 20 75    This is.** a u
1c050 73 65 66 75 6c 20 73 70 6f 74 20 74 6f 20 73 65  seful spot to se
1c060 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
1c070 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 73 74 61 74  akpoint..*/.stat
1c080 69 63 20 76 6f 69 64 20 74 65 73 74 5f 62 72 65  ic void test_bre
1c090 61 6b 70 6f 69 6e 74 28 76 6f 69 64 29 7b 0a 20  akpoint(void){. 
1c0a0 20 73 74 61 74 69 63 20 69 6e 74 20 6e 43 61 6c   static int nCal
1c0b0 6c 20 3d 20 30 3b 0a 20 20 6e 43 61 6c 6c 2b 2b  l = 0;.  nCall++
1c0c0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  ;.}../*.** An ob
1c0d0 6a 65 63 74 20 75 73 65 64 20 74 6f 20 72 65 61  ject used to rea
1c0e0 64 20 61 20 43 53 56 20 61 6e 64 20 6f 74 68 65  d a CSV and othe
1c0f0 72 20 66 69 6c 65 73 20 66 6f 72 20 69 6d 70 6f  r files for impo
1c100 72 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  rt..*/.typedef s
1c110 74 72 75 63 74 20 49 6d 70 6f 72 74 43 74 78 20  truct ImportCtx 
1c120 49 6d 70 6f 72 74 43 74 78 3b 0a 73 74 72 75 63  ImportCtx;.struc
1c130 74 20 49 6d 70 6f 72 74 43 74 78 20 7b 0a 20 20  t ImportCtx {.  
1c140 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
1c150 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  e;  /* Name of t
1c160 68 65 20 69 6e 70 75 74 20 66 69 6c 65 20 2a 2f  he input file */
1c170 0a 20 20 46 49 4c 45 20 2a 69 6e 3b 20 20 20 20  .  FILE *in;    
1c180 20 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74         /* Read t
1c190 68 65 20 43 53 56 20 74 65 78 74 20 66 72 6f 6d  he CSV text from
1c1a0 20 74 68 69 73 20 69 6e 70 75 74 20 73 74 72 65   this input stre
1c1b0 61 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b  am */.  char *z;
1c1c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
1c1d0 63 63 75 6d 75 6c 61 74 65 64 20 74 65 78 74 20  ccumulated text 
1c1e0 66 6f 72 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20  for a field */. 
1c1f0 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
1c200 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1c210 66 20 62 79 74 65 73 20 69 6e 20 7a 20 2a 2f 0a  f bytes in z */.
1c220 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20    int nAlloc;   
1c230 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 61        /* Space a
1c240 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 7a 5b 5d  llocated for z[]
1c250 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 3b   */.  int nLine;
1c260 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
1c270 72 65 6e 74 20 6c 69 6e 65 20 6e 75 6d 62 65 72  rent line number
1c280 20 2a 2f 0a 20 20 69 6e 74 20 62 4e 6f 74 46 69   */.  int bNotFi
1c290 72 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 72 75  rst;      /* Tru
1c2a0 65 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  e if one or more
1c2b0 20 62 79 74 65 73 20 61 6c 72 65 61 64 79 20 72   bytes already r
1c2c0 65 61 64 20 2a 2f 0a 20 20 69 6e 74 20 63 54 65  ead */.  int cTe
1c2d0 72 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rm;          /* 
1c2e0 43 68 61 72 61 63 74 65 72 20 74 68 61 74 20 74  Character that t
1c2f0 65 72 6d 69 6e 61 74 65 64 20 74 68 65 20 6d 6f  erminated the mo
1c300 73 74 20 72 65 63 65 6e 74 20 66 69 65 6c 64 20  st recent field 
1c310 2a 2f 0a 20 20 69 6e 74 20 63 43 6f 6c 53 65 70  */.  int cColSep
1c320 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1c330 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72  column separator
1c340 20 63 68 61 72 61 63 74 65 72 2e 20 20 28 55 73   character.  (Us
1c350 75 61 6c 6c 79 20 22 2c 22 29 20 2a 2f 0a 20 20  ually ",") */.  
1c360 69 6e 74 20 63 52 6f 77 53 65 70 3b 20 20 20 20  int cRowSep;    
1c370 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 20 73      /* The row s
1c380 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63 74  eparator charact
1c390 65 72 2e 20 20 28 55 73 75 61 6c 6c 79 20 22 5c  er.  (Usually "\
1c3a0 6e 22 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 70  n") */.};../* Ap
1c3b0 70 65 6e 64 20 61 20 73 69 6e 67 6c 65 20 62 79  pend a single by
1c3c0 74 65 20 74 6f 20 7a 5b 5d 20 2a 2f 0a 73 74 61  te to z[] */.sta
1c3d0 74 69 63 20 76 6f 69 64 20 69 6d 70 6f 72 74 5f  tic void import_
1c3e0 61 70 70 65 6e 64 5f 63 68 61 72 28 49 6d 70 6f  append_char(Impo
1c3f0 72 74 43 74 78 20 2a 70 2c 20 69 6e 74 20 63 29  rtCtx *p, int c)
1c400 7b 0a 20 20 69 66 28 20 70 2d 3e 6e 2b 31 3e 3d  {.  if( p->n+1>=
1c410 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20  p->nAlloc ){.   
1c420 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2b 3d 20 70 2d   p->nAlloc += p-
1c430 3e 6e 41 6c 6c 6f 63 20 2b 20 31 30 30 3b 0a 20  >nAlloc + 100;. 
1c440 20 20 20 70 2d 3e 7a 20 3d 20 73 71 6c 69 74 65     p->z = sqlite
1c450 33 5f 72 65 61 6c 6c 6f 63 36 34 28 70 2d 3e 7a  3_realloc64(p->z
1c460 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20  , p->nAlloc);.  
1c470 20 20 69 66 28 20 70 2d 3e 7a 3d 3d 30 20 29 7b    if( p->z==0 ){
1c480 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
1c490 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f  f(stderr, "out o
1c4a0 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20  f memory\n");.  
1c4b0 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20      exit(1);.   
1c4c0 20 7d 0a 20 20 7d 0a 20 20 70 2d 3e 7a 5b 70 2d   }.  }.  p->z[p-
1c4d0 3e 6e 2b 2b 5d 20 3d 20 28 63 68 61 72 29 63 3b  >n++] = (char)c;
1c4e0 0a 7d 0a 0a 2f 2a 20 52 65 61 64 20 61 20 73 69  .}../* Read a si
1c4f0 6e 67 6c 65 20 66 69 65 6c 64 20 6f 66 20 43 53  ngle field of CS
1c500 56 20 74 65 78 74 2e 20 20 43 6f 6d 70 61 74 69  V text.  Compati
1c510 62 6c 65 20 77 69 74 68 20 72 66 63 34 31 38 30  ble with rfc4180
1c520 20 61 6e 64 20 65 78 74 65 6e 64 65 64 0a 2a 2a   and extended.**
1c530 20 77 69 74 68 20 74 68 65 20 6f 70 74 69 6f 6e   with the option
1c540 20 6f 66 20 68 61 76 69 6e 67 20 61 20 73 65 70   of having a sep
1c550 61 72 61 74 6f 72 20 6f 74 68 65 72 20 74 68 61  arator other tha
1c560 6e 20 22 2c 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 2b  n ","..**.**   +
1c570 20 20 49 6e 70 75 74 20 63 6f 6d 65 73 20 66 72    Input comes fr
1c580 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a 2a 20 20 20 2b  om p->in..**   +
1c590 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1c5a0 69 6e 20 70 2d 3e 7a 20 6f 66 20 6c 65 6e 67 74  in p->z of lengt
1c5b0 68 20 70 2d 3e 6e 2e 20 20 53 70 61 63 65 20 74  h p->n.  Space t
1c5c0 6f 20 68 6f 6c 64 20 70 2d 3e 7a 20 63 6f 6d 65  o hold p->z come
1c5d0 73 0a 2a 2a 20 20 20 20 20 20 66 72 6f 6d 20 73  s.**      from s
1c5e0 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28  qlite3_malloc64(
1c5f0 29 2e 0a 2a 2a 20 20 20 2b 20 20 55 73 65 20 70  )..**   +  Use p
1c600 2d 3e 63 53 65 70 20 61 73 20 74 68 65 20 63 6f  ->cSep as the co
1c610 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 2e 20  lumn separator. 
1c620 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 73 20   The default is 
1c630 22 2c 22 2e 0a 2a 2a 20 20 20 2b 20 20 55 73 65  ","..**   +  Use
1c640 20 70 2d 3e 72 53 65 70 20 61 73 20 74 68 65 20   p->rSep as the 
1c650 72 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20 20  row separator.  
1c660 54 68 65 20 64 65 66 61 75 6c 74 20 69 73 20 22  The default is "
1c670 5c 6e 22 2e 0a 2a 2a 20 20 20 2b 20 20 4b 65 65  \n"..**   +  Kee
1c680 70 20 74 72 61 63 6b 20 6f 66 20 74 68 65 20 6c  p track of the l
1c690 69 6e 65 20 6e 75 6d 62 65 72 20 69 6e 20 70 2d  ine number in p-
1c6a0 3e 6e 4c 69 6e 65 2e 0a 2a 2a 20 20 20 2b 20 20  >nLine..**   +  
1c6b0 53 74 6f 72 65 20 74 68 65 20 63 68 61 72 61 63  Store the charac
1c6c0 74 65 72 20 74 68 61 74 20 74 65 72 6d 69 6e 61  ter that termina
1c6d0 74 65 73 20 74 68 65 20 66 69 65 6c 64 20 69 6e  tes the field in
1c6e0 20 70 2d 3e 63 54 65 72 6d 2e 20 20 53 74 6f 72   p->cTerm.  Stor
1c6f0 65 0a 2a 2a 20 20 20 20 20 20 45 4f 46 20 6f 6e  e.**      EOF on
1c700 20 65 6e 64 2d 6f 66 2d 66 69 6c 65 2e 0a 2a 2a   end-of-file..**
1c710 20 20 20 2b 20 20 52 65 70 6f 72 74 20 73 79 6e     +  Report syn
1c720 74 61 78 20 65 72 72 6f 72 73 20 6f 6e 20 73 74  tax errors on st
1c730 64 65 72 72 0a 2a 2f 0a 73 74 61 74 69 63 20 63  derr.*/.static c
1c740 68 61 72 20 2a 53 51 4c 49 54 45 5f 43 44 45 43  har *SQLITE_CDEC
1c750 4c 20 63 73 76 5f 72 65 61 64 5f 6f 6e 65 5f 66  L csv_read_one_f
1c760 69 65 6c 64 28 49 6d 70 6f 72 74 43 74 78 20 2a  ield(ImportCtx *
1c770 70 29 7b 0a 20 20 69 6e 74 20 63 3b 0a 20 20 69  p){.  int c;.  i
1c780 6e 74 20 63 53 65 70 20 3d 20 70 2d 3e 63 43 6f  nt cSep = p->cCo
1c790 6c 53 65 70 3b 0a 20 20 69 6e 74 20 72 53 65 70  lSep;.  int rSep
1c7a0 20 3d 20 70 2d 3e 63 52 6f 77 53 65 70 3b 0a 20   = p->cRowSep;. 
1c7b0 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20 63 20 3d   p->n = 0;.  c =
1c7c0 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20   fgetc(p->in);. 
1c7d0 20 69 66 28 20 63 3d 3d 45 4f 46 20 7c 7c 20 73   if( c==EOF || s
1c7e0 65 65 6e 49 6e 74 65 72 72 75 70 74 20 29 7b 0a  eenInterrupt ){.
1c7f0 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20 45      p->cTerm = E
1c800 4f 46 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  OF;.    return 0
1c810 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 3d 3d 27  ;.  }.  if( c=='
1c820 22 27 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 63  "' ){.    int pc
1c830 2c 20 70 70 63 3b 0a 20 20 20 20 69 6e 74 20 73  , ppc;.    int s
1c840 74 61 72 74 4c 69 6e 65 20 3d 20 70 2d 3e 6e 4c  tartLine = p->nL
1c850 69 6e 65 3b 0a 20 20 20 20 69 6e 74 20 63 51 75  ine;.    int cQu
1c860 6f 74 65 20 3d 20 63 3b 0a 20 20 20 20 70 63 20  ote = c;.    pc 
1c870 3d 20 70 70 63 20 3d 20 30 3b 0a 20 20 20 20 77  = ppc = 0;.    w
1c880 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 20  hile( 1 ){.     
1c890 20 63 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e   c = fgetc(p->in
1c8a0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d  );.      if( c==
1c8b0 72 53 65 70 20 29 20 70 2d 3e 6e 4c 69 6e 65 2b  rSep ) p->nLine+
1c8c0 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d  +;.      if( c==
1c8d0 63 51 75 6f 74 65 20 29 7b 0a 20 20 20 20 20 20  cQuote ){.      
1c8e0 20 20 69 66 28 20 70 63 3d 3d 63 51 75 6f 74 65    if( pc==cQuote
1c8f0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 63   ){.          pc
1c900 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
1c910 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
1c920 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
1c930 20 20 69 66 28 20 28 63 3d 3d 63 53 65 70 20 26    if( (c==cSep &
1c940 26 20 70 63 3d 3d 63 51 75 6f 74 65 29 0a 20 20  & pc==cQuote).  
1c950 20 20 20 20 20 7c 7c 20 28 63 3d 3d 72 53 65 70       || (c==rSep
1c960 20 26 26 20 70 63 3d 3d 63 51 75 6f 74 65 29 0a   && pc==cQuote).
1c970 20 20 20 20 20 20 20 7c 7c 20 28 63 3d 3d 72 53         || (c==rS
1c980 65 70 20 26 26 20 70 63 3d 3d 27 5c 72 27 20 26  ep && pc=='\r' &
1c990 26 20 70 70 63 3d 3d 63 51 75 6f 74 65 29 0a 20  & ppc==cQuote). 
1c9a0 20 20 20 20 20 20 7c 7c 20 28 63 3d 3d 45 4f 46        || (c==EOF
1c9b0 20 26 26 20 70 63 3d 3d 63 51 75 6f 74 65 29 0a   && pc==cQuote).
1c9c0 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
1c9d0 20 64 6f 7b 20 70 2d 3e 6e 2d 2d 3b 20 7d 77 68   do{ p->n--; }wh
1c9e0 69 6c 65 28 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 21  ile( p->z[p->n]!
1c9f0 3d 63 51 75 6f 74 65 20 29 3b 0a 20 20 20 20 20  =cQuote );.     
1ca00 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20 63 3b     p->cTerm = c;
1ca10 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
1ca20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
1ca30 28 20 70 63 3d 3d 63 51 75 6f 74 65 20 26 26 20  ( pc==cQuote && 
1ca40 63 21 3d 27 5c 72 27 20 29 7b 0a 20 20 20 20 20  c!='\r' ){.     
1ca50 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1ca60 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 75  tderr, "%s:%d: u
1ca70 6e 65 73 63 61 70 65 64 20 25 63 20 63 68 61 72  nescaped %c char
1ca80 61 63 74 65 72 5c 6e 22 2c 0a 20 20 20 20 20 20  acter\n",.      
1ca90 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a 46 69            p->zFi
1caa0 6c 65 2c 20 70 2d 3e 6e 4c 69 6e 65 2c 20 63 51  le, p->nLine, cQ
1cab0 75 6f 74 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  uote);.      }. 
1cac0 20 20 20 20 20 69 66 28 20 63 3d 3d 45 4f 46 20       if( c==EOF 
1cad0 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
1cae0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1caf0 25 73 3a 25 64 3a 20 75 6e 74 65 72 6d 69 6e 61  %s:%d: untermina
1cb00 74 65 64 20 25 63 2d 71 75 6f 74 65 64 20 66 69  ted %c-quoted fi
1cb10 65 6c 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  eld\n",.        
1cb20 20 20 20 20 20 20 20 20 70 2d 3e 7a 46 69 6c 65          p->zFile
1cb30 2c 20 73 74 61 72 74 4c 69 6e 65 2c 20 63 51 75  , startLine, cQu
1cb40 6f 74 65 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  ote);.        p-
1cb50 3e 63 54 65 72 6d 20 3d 20 63 3b 0a 20 20 20 20  >cTerm = c;.    
1cb60 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1cb70 20 7d 0a 20 20 20 20 20 20 69 6d 70 6f 72 74 5f   }.      import_
1cb80 61 70 70 65 6e 64 5f 63 68 61 72 28 70 2c 20 63  append_char(p, c
1cb90 29 3b 0a 20 20 20 20 20 20 70 70 63 20 3d 20 70  );.      ppc = p
1cba0 63 3b 0a 20 20 20 20 20 20 70 63 20 3d 20 63 3b  c;.      pc = c;
1cbb0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1cbc0 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
1cbd0 73 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c  s the first fiel
1cbe0 64 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 61  d being parsed a
1cbf0 6e 64 20 69 74 20 62 65 67 69 6e 73 20 77 69 74  nd it begins wit
1cc00 68 20 74 68 65 0a 20 20 20 20 2a 2a 20 55 54 46  h the.    ** UTF
1cc10 2d 38 20 42 4f 4d 20 20 28 30 78 45 46 20 42 42  -8 BOM  (0xEF BB
1cc20 20 42 46 29 20 74 68 65 6e 20 73 6b 69 70 20 74   BF) then skip t
1cc30 68 65 20 42 4f 4d 20 2a 2f 0a 20 20 20 20 69 66  he BOM */.    if
1cc40 28 20 28 63 26 30 78 66 66 29 3d 3d 30 78 65 66  ( (c&0xff)==0xef
1cc50 20 26 26 20 70 2d 3e 62 4e 6f 74 46 69 72 73 74   && p->bNotFirst
1cc60 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6d 70  ==0 ){.      imp
1cc70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28  ort_append_char(
1cc80 70 2c 20 63 29 3b 0a 20 20 20 20 20 20 63 20 3d  p, c);.      c =
1cc90 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20   fgetc(p->in);. 
1cca0 20 20 20 20 20 69 66 28 20 28 63 26 30 78 66 66       if( (c&0xff
1ccb0 29 3d 3d 30 78 62 62 20 29 7b 0a 20 20 20 20 20  )==0xbb ){.     
1ccc0 20 20 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64     import_append
1ccd0 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a 20 20 20  _char(p, c);.   
1cce0 20 20 20 20 20 63 20 3d 20 66 67 65 74 63 28 70       c = fgetc(p
1ccf0 2d 3e 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 69  ->in);.        i
1cd00 66 28 20 28 63 26 30 78 66 66 29 3d 3d 30 78 62  f( (c&0xff)==0xb
1cd10 66 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  f ){.          p
1cd20 2d 3e 62 4e 6f 74 46 69 72 73 74 20 3d 20 31 3b  ->bNotFirst = 1;
1cd30 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 6e 20  .          p->n 
1cd40 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 72  = 0;.          r
1cd50 65 74 75 72 6e 20 63 73 76 5f 72 65 61 64 5f 6f  eturn csv_read_o
1cd60 6e 65 5f 66 69 65 6c 64 28 70 29 3b 0a 20 20 20  ne_field(p);.   
1cd70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
1cd80 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20     }.    while( 
1cd90 63 21 3d 45 4f 46 20 26 26 20 63 21 3d 63 53 65  c!=EOF && c!=cSe
1cda0 70 20 26 26 20 63 21 3d 72 53 65 70 20 29 7b 0a  p && c!=rSep ){.
1cdb0 20 20 20 20 20 20 69 6d 70 6f 72 74 5f 61 70 70        import_app
1cdc0 65 6e 64 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a  end_char(p, c);.
1cdd0 20 20 20 20 20 20 63 20 3d 20 66 67 65 74 63 28        c = fgetc(
1cde0 70 2d 3e 69 6e 29 3b 0a 20 20 20 20 7d 0a 20 20  p->in);.    }.  
1cdf0 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20 29 7b    if( c==rSep ){
1ce00 0a 20 20 20 20 20 20 70 2d 3e 6e 4c 69 6e 65 2b  .      p->nLine+
1ce10 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  +;.      if( p->
1ce20 6e 3e 30 20 26 26 20 70 2d 3e 7a 5b 70 2d 3e 6e  n>0 && p->z[p->n
1ce30 2d 31 5d 3d 3d 27 5c 72 27 20 29 20 70 2d 3e 6e  -1]=='\r' ) p->n
1ce40 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  --;.    }.    p-
1ce50 3e 63 54 65 72 6d 20 3d 20 63 3b 0a 20 20 7d 0a  >cTerm = c;.  }.
1ce60 20 20 69 66 28 20 70 2d 3e 7a 20 29 20 70 2d 3e    if( p->z ) p->
1ce70 7a 5b 70 2d 3e 6e 5d 20 3d 20 30 3b 0a 20 20 70  z[p->n] = 0;.  p
1ce80 2d 3e 62 4e 6f 74 46 69 72 73 74 20 3d 20 31 3b  ->bNotFirst = 1;
1ce90 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a 3b 0a  .  return p->z;.
1cea0 7d 0a 0a 2f 2a 20 52 65 61 64 20 61 20 73 69 6e  }../* Read a sin
1ceb0 67 6c 65 20 66 69 65 6c 64 20 6f 66 20 41 53 43  gle field of ASC
1cec0 49 49 20 64 65 6c 69 6d 69 74 65 64 20 74 65 78  II delimited tex
1ced0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 2b 20 20 49 6e  t..**.**   +  In
1cee0 70 75 74 20 63 6f 6d 65 73 20 66 72 6f 6d 20 70  put comes from p
1cef0 2d 3e 69 6e 2e 0a 2a 2a 20 20 20 2b 20 20 53 74  ->in..**   +  St
1cf00 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1cf10 2d 3e 7a 20 6f 66 20 6c 65 6e 67 74 68 20 70 2d  ->z of length p-
1cf20 3e 6e 2e 20 20 53 70 61 63 65 20 74 6f 20 68 6f  >n.  Space to ho
1cf30 6c 64 20 70 2d 3e 7a 20 63 6f 6d 65 73 0a 2a 2a  ld p->z comes.**
1cf40 20 20 20 20 20 20 66 72 6f 6d 20 73 71 6c 69 74        from sqlit
1cf50 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 29 2e 0a 2a  e3_malloc64()..*
1cf60 2a 20 20 20 2b 20 20 55 73 65 20 70 2d 3e 63 53  *   +  Use p->cS
1cf70 65 70 20 61 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ep as the column
1cf80 20 73 65 70 61 72 61 74 6f 72 2e 20 20 54 68 65   separator.  The
1cf90 20 64 65 66 61 75 6c 74 20 69 73 20 22 5c 78 31   default is "\x1
1cfa0 46 22 2e 0a 2a 2a 20 20 20 2b 20 20 55 73 65 20  F"..**   +  Use 
1cfb0 70 2d 3e 72 53 65 70 20 61 73 20 74 68 65 20 72  p->rSep as the r
1cfc0 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20 20 54  ow separator.  T
1cfd0 68 65 20 64 65 66 61 75 6c 74 20 69 73 20 22 5c  he default is "\
1cfe0 78 31 45 22 2e 0a 2a 2a 20 20 20 2b 20 20 4b 65  x1E"..**   +  Ke
1cff0 65 70 20 74 72 61 63 6b 20 6f 66 20 74 68 65 20  ep track of the 
1d000 72 6f 77 20 6e 75 6d 62 65 72 20 69 6e 20 70 2d  row number in p-
1d010 3e 6e 4c 69 6e 65 2e 0a 2a 2a 20 20 20 2b 20 20  >nLine..**   +  
1d020 53 74 6f 72 65 20 74 68 65 20 63 68 61 72 61 63  Store the charac
1d030 74 65 72 20 74 68 61 74 20 74 65 72 6d 69 6e 61  ter that termina
1d040 74 65 73 20 74 68 65 20 66 69 65 6c 64 20 69 6e  tes the field in
1d050 20 70 2d 3e 63 54 65 72 6d 2e 20 20 53 74 6f 72   p->cTerm.  Stor
1d060 65 0a 2a 2a 20 20 20 20 20 20 45 4f 46 20 6f 6e  e.**      EOF on
1d070 20 65 6e 64 2d 6f 66 2d 66 69 6c 65 2e 0a 2a 2a   end-of-file..**
1d080 20 20 20 2b 20 20 52 65 70 6f 72 74 20 73 79 6e     +  Report syn
1d090 74 61 78 20 65 72 72 6f 72 73 20 6f 6e 20 73 74  tax errors on st
1d0a0 64 65 72 72 0a 2a 2f 0a 73 74 61 74 69 63 20 63  derr.*/.static c
1d0b0 68 61 72 20 2a 53 51 4c 49 54 45 5f 43 44 45 43  har *SQLITE_CDEC
1d0c0 4c 20 61 73 63 69 69 5f 72 65 61 64 5f 6f 6e 65  L ascii_read_one
1d0d0 5f 66 69 65 6c 64 28 49 6d 70 6f 72 74 43 74 78  _field(ImportCtx
1d0e0 20 2a 70 29 7b 0a 20 20 69 6e 74 20 63 3b 0a 20   *p){.  int c;. 
1d0f0 20 69 6e 74 20 63 53 65 70 20 3d 20 70 2d 3e 63   int cSep = p->c
1d100 43 6f 6c 53 65 70 3b 0a 20 20 69 6e 74 20 72 53  ColSep;.  int rS
1d110 65 70 20 3d 20 70 2d 3e 63 52 6f 77 53 65 70 3b  ep = p->cRowSep;
1d120 0a 20 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20 63  .  p->n = 0;.  c
1d130 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b   = fgetc(p->in);
1d140 0a 20 20 69 66 28 20 63 3d 3d 45 4f 46 20 7c 7c  .  if( c==EOF ||
1d150 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74 20 29   seenInterrupt )
1d160 7b 0a 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d  {.    p->cTerm =
1d170 20 45 4f 46 3b 0a 20 20 20 20 72 65 74 75 72 6e   EOF;.    return
1d180 20 30 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28   0;.  }.  while(
1d190 20 63 21 3d 45 4f 46 20 26 26 20 63 21 3d 63 53   c!=EOF && c!=cS
1d1a0 65 70 20 26 26 20 63 21 3d 72 53 65 70 20 29 7b  ep && c!=rSep ){
1d1b0 0a 20 20 20 20 69 6d 70 6f 72 74 5f 61 70 70 65  .    import_appe
1d1c0 6e 64 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a 20  nd_char(p, c);. 
1d1d0 20 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d 3e     c = fgetc(p->
1d1e0 69 6e 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63  in);.  }.  if( c
1d1f0 3d 3d 72 53 65 70 20 29 7b 0a 20 20 20 20 70 2d  ==rSep ){.    p-
1d200 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 7d 0a 20 20  >nLine++;.  }.  
1d210 70 2d 3e 63 54 65 72 6d 20 3d 20 63 3b 0a 20 20  p->cTerm = c;.  
1d220 69 66 28 20 70 2d 3e 7a 20 29 20 70 2d 3e 7a 5b  if( p->z ) p->z[
1d230 70 2d 3e 6e 5d 20 3d 20 30 3b 0a 20 20 72 65 74  p->n] = 0;.  ret
1d240 75 72 6e 20 70 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 0a  urn p->z;.}../*.
1d250 2a 2a 20 54 72 79 20 74 6f 20 74 72 61 6e 73 66  ** Try to transf
1d260 65 72 20 64 61 74 61 20 66 6f 72 20 74 61 62 6c  er data for tabl
1d270 65 20 7a 54 61 62 6c 65 2e 20 20 49 66 20 61 6e  e zTable.  If an
1d280 20 65 72 72 6f 72 20 69 73 20 73 65 65 6e 20 77   error is seen w
1d290 68 69 6c 65 0a 2a 2a 20 6d 6f 76 69 6e 67 20 66  hile.** moving f
1d2a0 6f 72 77 61 72 64 2c 20 74 72 79 20 74 6f 20 67  orward, try to g
1d2b0 6f 20 62 61 63 6b 77 61 72 64 73 2e 20 20 54 68  o backwards.  Th
1d2c0 65 20 62 61 63 6b 77 61 72 64 73 20 6d 6f 76 65  e backwards move
1d2d0 6d 65 6e 74 20 77 6f 6e 27 74 0a 2a 2a 20 77 6f  ment won't.** wo
1d2e0 72 6b 20 66 6f 72 20 57 49 54 48 4f 55 54 20 52  rk for WITHOUT R
1d2f0 4f 57 49 44 20 74 61 62 6c 65 73 2e 0a 2a 2f 0a  OWID tables..*/.
1d300 73 74 61 74 69 63 20 76 6f 69 64 20 74 72 79 54  static void tryT
1d310 6f 43 6c 6f 6e 65 44 61 74 61 28 0a 20 20 53 68  oCloneData(.  Sh
1d320 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a 20 20 73  ellState *p,.  s
1d330 71 6c 69 74 65 33 20 2a 6e 65 77 44 62 2c 0a 20  qlite3 *newDb,. 
1d340 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
1d350 62 6c 65 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  ble.){.  sqlite3
1d360 5f 73 74 6d 74 20 2a 70 51 75 65 72 79 20 3d 20  _stmt *pQuery = 
1d370 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  0;.  sqlite3_stm
1d380 74 20 2a 70 49 6e 73 65 72 74 20 3d 20 30 3b 0a  t *pInsert = 0;.
1d390 20 20 63 68 61 72 20 2a 7a 51 75 65 72 79 20 3d    char *zQuery =
1d3a0 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 49 6e 73   0;.  char *zIns
1d3b0 65 72 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  ert = 0;.  int r
1d3c0 63 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 2c 20 6e  c;.  int i, j, n
1d3d0 3b 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 20 3d  ;.  int nTable =
1d3e0 20 73 74 72 6c 65 6e 33 30 28 7a 54 61 62 6c 65   strlen30(zTable
1d3f0 29 3b 0a 20 20 69 6e 74 20 6b 20 3d 20 30 3b 0a  );.  int k = 0;.
1d400 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 20    int cnt = 0;. 
1d410 20 63 6f 6e 73 74 20 69 6e 74 20 73 70 69 6e 52   const int spinR
1d420 61 74 65 20 3d 20 31 30 30 30 30 3b 0a 0a 20 20  ate = 10000;..  
1d430 7a 51 75 65 72 79 20 3d 20 73 71 6c 69 74 65 33  zQuery = sqlite3
1d440 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54  _mprintf("SELECT
1d450 20 2a 20 46 52 4f 4d 20 5c 22 25 77 5c 22 22 2c   * FROM \"%w\"",
1d460 20 7a 54 61 62 6c 65 29 3b 0a 20 20 72 63 20 3d   zTable);.  rc =
1d470 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
1d480 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 51 75 65 72  _v2(p->db, zQuer
1d490 79 2c 20 2d 31 2c 20 26 70 51 75 65 72 79 2c 20  y, -1, &pQuery, 
1d4a0 30 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  0);.  if( rc ){.
1d4b0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1d4c0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20 25  stderr, "Error %
1d4d0 64 3a 20 25 73 20 6f 6e 20 5b 25 73 5d 5c 6e 22  d: %s on [%s]\n"
1d4e0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ,.            sq
1d4f0 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
1d500 72 72 63 6f 64 65 28 70 2d 3e 64 62 29 2c 20 73  rrcode(p->db), s
1d510 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d  qlite3_errmsg(p-
1d520 3e 64 62 29 2c 0a 20 20 20 20 20 20 20 20 20 20  >db),.          
1d530 20 20 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 67    zQuery);.    g
1d540 6f 74 6f 20 65 6e 64 5f 64 61 74 61 5f 78 66 65  oto end_data_xfe
1d550 72 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73 71 6c  r;.  }.  n = sql
1d560 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
1d570 74 28 70 51 75 65 72 79 29 3b 0a 20 20 7a 49 6e  t(pQuery);.  zIn
1d580 73 65 72 74 20 3d 20 73 71 6c 69 74 65 33 5f 6d  sert = sqlite3_m
1d590 61 6c 6c 6f 63 36 34 28 32 30 30 20 2b 20 6e 54  alloc64(200 + nT
1d5a0 61 62 6c 65 20 2b 20 6e 2a 33 29 3b 0a 20 20 69  able + n*3);.  i
1d5b0 66 28 20 7a 49 6e 73 65 72 74 3d 3d 30 20 29 7b  f( zInsert==0 ){
1d5c0 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
1d5d0 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f 66 20  stderr, "out of 
1d5e0 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20  memory\n");.    
1d5f0 67 6f 74 6f 20 65 6e 64 5f 64 61 74 61 5f 78 66  goto end_data_xf
1d600 65 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  er;.  }.  sqlite
1d610 33 5f 73 6e 70 72 69 6e 74 66 28 32 30 30 2b 6e  3_snprintf(200+n
1d620 54 61 62 6c 65 2c 7a 49 6e 73 65 72 74 2c 0a 20  Table,zInsert,. 
1d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d640 20 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e    "INSERT OR IGN
1d650 4f 52 45 20 49 4e 54 4f 20 5c 22 25 73 5c 22 20  ORE INTO \"%s\" 
1d660 56 41 4c 55 45 53 28 3f 22 2c 20 7a 54 61 62 6c  VALUES(?", zTabl
1d670 65 29 3b 0a 20 20 69 20 3d 20 73 74 72 6c 65 6e  e);.  i = strlen
1d680 33 30 28 7a 49 6e 73 65 72 74 29 3b 0a 20 20 66  30(zInsert);.  f
1d690 6f 72 28 6a 3d 31 3b 20 6a 3c 6e 3b 20 6a 2b 2b  or(j=1; j<n; j++
1d6a0 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a 49  ){.    memcpy(zI
1d6b0 6e 73 65 72 74 2b 69 2c 20 22 2c 3f 22 2c 20 32  nsert+i, ",?", 2
1d6c0 29 3b 0a 20 20 20 20 69 20 2b 3d 20 32 3b 0a 20  );.    i += 2;. 
1d6d0 20 7d 0a 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73   }.  memcpy(zIns
1d6e0 65 72 74 2b 69 2c 20 22 29 3b 22 2c 20 33 29 3b  ert+i, ");", 3);
1d6f0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
1d700 70 72 65 70 61 72 65 5f 76 32 28 6e 65 77 44 62  prepare_v2(newDb
1d710 2c 20 7a 49 6e 73 65 72 74 2c 20 2d 31 2c 20 26  , zInsert, -1, &
1d720 70 49 6e 73 65 72 74 2c 20 30 29 3b 0a 20 20 69  pInsert, 0);.  i
1d730 66 28 20 72 63 20 29 7b 0a 20 20 20 20 75 74 66  f( rc ){.    utf
1d740 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
1d750 20 22 45 72 72 6f 72 20 25 64 3a 20 25 73 20 6f   "Error %d: %s o
1d760 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20  n [%s]\n",.     
1d770 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65         sqlite3_e
1d780 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28  xtended_errcode(
1d790 6e 65 77 44 62 29 2c 20 73 71 6c 69 74 65 33 5f  newDb), sqlite3_
1d7a0 65 72 72 6d 73 67 28 6e 65 77 44 62 29 2c 0a 20  errmsg(newDb),. 
1d7b0 20 20 20 20 20 20 20 20 20 20 20 7a 51 75 65 72             zQuer
1d7c0 79 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64  y);.    goto end
1d7d0 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20 7d 0a  _data_xfer;.  }.
1d7e0 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 32 3b 20    for(k=0; k<2; 
1d7f0 6b 2b 2b 29 7b 0a 20 20 20 20 77 68 69 6c 65 28  k++){.    while(
1d800 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73   (rc = sqlite3_s
1d810 74 65 70 28 70 51 75 65 72 79 29 29 3d 3d 53 51  tep(pQuery))==SQ
1d820 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
1d830 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
1d840 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 77  i++){.        sw
1d850 69 74 63 68 28 20 73 71 6c 69 74 65 33 5f 63 6f  itch( sqlite3_co
1d860 6c 75 6d 6e 5f 74 79 70 65 28 70 51 75 65 72 79  lumn_type(pQuery
1d870 2c 20 69 29 20 29 7b 0a 20 20 20 20 20 20 20 20  , i) ){.        
1d880 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 55    case SQLITE_NU
1d890 4c 4c 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20  LL: {.          
1d8a0 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e    sqlite3_bind_n
1d8b0 75 6c 6c 28 70 49 6e 73 65 72 74 2c 20 69 2b 31  ull(pInsert, i+1
1d8c0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  );.            b
1d8d0 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
1d8e0 7d 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65  }.          case
1d8f0 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3a   SQLITE_INTEGER:
1d900 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
1d910 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
1d920 34 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 2c 20  4(pInsert, i+1, 
1d930 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
1d940 6e 74 36 34 28 70 51 75 65 72 79 2c 69 29 29 3b  nt64(pQuery,i));
1d950 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
1d960 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ak;.          }.
1d970 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
1d980 51 4c 49 54 45 5f 46 4c 4f 41 54 3a 20 7b 0a 20  QLITE_FLOAT: {. 
1d990 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
1d9a0 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70  e3_bind_double(p
1d9b0 49 6e 73 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c  Insert, i+1, sql
1d9c0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
1d9d0 6c 65 28 70 51 75 65 72 79 2c 69 29 29 3b 0a 20  le(pQuery,i));. 
1d9e0 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1d9f0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1da00 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
1da10 49 54 45 5f 54 45 58 54 3a 20 7b 0a 20 20 20 20  ITE_TEXT: {.    
1da20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1da30 62 69 6e 64 5f 74 65 78 74 28 70 49 6e 73 65 72  bind_text(pInser
1da40 74 2c 20 69 2b 31 2c 0a 20 20 20 20 20 20 20 20  t, i+1,.        
1da50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da60 20 20 20 20 20 28 63 6f 6e 73 74 20 63 68 61 72       (const char
1da70 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
1da80 5f 74 65 78 74 28 70 51 75 65 72 79 2c 69 29 2c  _text(pQuery,i),
1da90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 31                -1
1dab0 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
1dac0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
1dad0 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  eak;.          }
1dae0 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20  .          case 
1daf0 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 20 7b 0a 20  SQLITE_BLOB: {. 
1db00 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
1db10 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 70 49 6e  e3_bind_blob(pIn
1db20 73 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74  sert, i+1, sqlit
1db30 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70  e3_column_blob(p
1db40 51 75 65 72 79 2c 69 29 2c 0a 20 20 20 20 20 20  Query,i),.      
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db70 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f        sqlite3_co
1db80 6c 75 6d 6e 5f 62 79 74 65 73 28 70 51 75 65 72  lumn_bytes(pQuer
1db90 79 2c 69 29 2c 0a 20 20 20 20 20 20 20 20 20 20  y,i),.          
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbc0 20 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29    SQLITE_STATIC)
1dbd0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
1dbe0 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  eak;.          }
1dbf0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1dc00 20 7d 20 2f 2a 20 45 6e 64 20 66 6f 72 20 2a 2f   } /* End for */
1dc10 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1dc20 74 65 33 5f 73 74 65 70 28 70 49 6e 73 65 72 74  te3_step(pInsert
1dc30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
1dc40 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63  =SQLITE_OK && rc
1dc50 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26 26 20  !=SQLITE_ROW && 
1dc60 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc!=SQLITE_DONE 
1dc70 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
1dc80 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1dc90 45 72 72 6f 72 20 25 64 3a 20 25 73 5c 6e 22 2c  Error %d: %s\n",
1dca0 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
1dcb0 64 5f 65 72 72 63 6f 64 65 28 6e 65 77 44 62 29  d_errcode(newDb)
1dcc0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1dcd0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1dce0 33 5f 65 72 72 6d 73 67 28 6e 65 77 44 62 29 29  3_errmsg(newDb))
1dcf0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1dd00 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 49  sqlite3_reset(pI
1dd10 6e 73 65 72 74 29 3b 0a 20 20 20 20 20 20 63 6e  nsert);.      cn
1dd20 74 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 28  t++;.      if( (
1dd30 63 6e 74 25 73 70 69 6e 52 61 74 65 29 3d 3d 30  cnt%spinRate)==0
1dd40 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e   ){.        prin
1dd50 74 66 28 22 25 63 5c 62 22 2c 20 22 7c 2f 2d 5c  tf("%c\b", "|/-\
1dd60 5c 22 5b 28 63 6e 74 2f 73 70 69 6e 52 61 74 65  \"[(cnt/spinRate
1dd70 29 25 34 5d 29 3b 0a 20 20 20 20 20 20 20 20 66  )%4]);.        f
1dd80 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 20  flush(stdout);. 
1dd90 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 2f 2a 20       }.    } /* 
1dda0 45 6e 64 20 77 68 69 6c 65 20 2a 2f 0a 20 20 20  End while */.   
1ddb0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1ddc0 44 4f 4e 45 20 29 20 62 72 65 61 6b 3b 0a 20 20  DONE ) break;.  
1ddd0 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
1dde0 7a 65 28 70 51 75 65 72 79 29 3b 0a 20 20 20 20  ze(pQuery);.    
1ddf0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75  sqlite3_free(zQu
1de00 65 72 79 29 3b 0a 20 20 20 20 7a 51 75 65 72 79  ery);.    zQuery
1de10 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
1de20 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  tf("SELECT * FRO
1de30 4d 20 5c 22 25 77 5c 22 20 4f 52 44 45 52 20 42  M \"%w\" ORDER B
1de40 59 20 72 6f 77 69 64 20 44 45 53 43 3b 22 2c 0a  Y rowid DESC;",.
1de50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 54 61               zTa
1de70 62 6c 65 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  ble);.    rc = s
1de80 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
1de90 32 28 70 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c  2(p->db, zQuery,
1dea0 20 2d 31 2c 20 26 70 51 75 65 72 79 2c 20 30 29   -1, &pQuery, 0)
1deb0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a  ;.    if( rc ){.
1dec0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
1ded0 66 28 73 74 64 65 72 72 2c 20 22 57 61 72 6e 69  f(stderr, "Warni
1dee0 6e 67 3a 20 63 61 6e 6e 6f 74 20 73 74 65 70 20  ng: cannot step 
1def0 5c 22 25 73 5c 22 20 62 61 63 6b 77 61 72 64 73  \"%s\" backwards
1df00 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20  ", zTable);.    
1df10 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
1df20 20 7d 20 2f 2a 20 45 6e 64 20 66 6f 72 28 6b 3d   } /* End for(k=
1df30 30 2e 2e 2e 29 20 2a 2f 0a 0a 65 6e 64 5f 64 61  0...) */..end_da
1df40 74 61 5f 78 66 65 72 3a 0a 20 20 73 71 6c 69 74  ta_xfer:.  sqlit
1df50 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 51 75 65  e3_finalize(pQue
1df60 72 79 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66  ry);.  sqlite3_f
1df70 69 6e 61 6c 69 7a 65 28 70 49 6e 73 65 72 74 29  inalize(pInsert)
1df80 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
1df90 28 7a 51 75 65 72 79 29 3b 0a 20 20 73 71 6c 69  (zQuery);.  sqli
1dfa0 74 65 33 5f 66 72 65 65 28 7a 49 6e 73 65 72 74  te3_free(zInsert
1dfb0 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 72 79  );.}.../*.** Try
1dfc0 20 74 6f 20 74 72 61 6e 73 66 65 72 20 61 6c 6c   to transfer all
1dfd0 20 72 6f 77 73 20 6f 66 20 74 68 65 20 73 63 68   rows of the sch
1dfe0 65 6d 61 20 74 68 61 74 20 6d 61 74 63 68 20 7a  ema that match z
1dff0 57 68 65 72 65 2e 20 20 46 6f 72 0a 2a 2a 20 65  Where.  For.** e
1e000 61 63 68 20 72 6f 77 2c 20 69 6e 76 6f 6b 65 20  ach row, invoke 
1e010 78 46 6f 72 45 61 63 68 28 29 20 6f 6e 20 74 68  xForEach() on th
1e020 65 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 64  e object defined
1e030 20 62 79 20 74 68 61 74 20 72 6f 77 2e 0a 2a 2a   by that row..**
1e040 20 49 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20   If an error is 
1e050 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
1e060 65 20 6d 6f 76 69 6e 67 20 66 6f 72 77 61 72 64  e moving forward
1e070 20 74 68 72 6f 75 67 68 20 74 68 65 0a 2a 2a 20   through the.** 
1e080 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
1e090 62 6c 65 2c 20 74 72 79 20 61 67 61 69 6e 20 6d  ble, try again m
1e0a0 6f 76 69 6e 67 20 62 61 63 6b 77 61 72 64 73 2e  oving backwards.
1e0b0 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
1e0c0 74 72 79 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61  tryToCloneSchema
1e0d0 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  (.  ShellState *
1e0e0 70 2c 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e 65  p,.  sqlite3 *ne
1e0f0 77 44 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61  wDb,.  const cha
1e100 72 20 2a 7a 57 68 65 72 65 2c 0a 20 20 76 6f 69  r *zWhere,.  voi
1e110 64 20 28 2a 78 46 6f 72 45 61 63 68 29 28 53 68  d (*xForEach)(Sh
1e120 65 6c 6c 53 74 61 74 65 2a 2c 73 71 6c 69 74 65  ellState*,sqlite
1e130 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a  3*,const char*).
1e140 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
1e150 74 20 2a 70 51 75 65 72 79 20 3d 20 30 3b 0a 20  t *pQuery = 0;. 
1e160 20 63 68 61 72 20 2a 7a 51 75 65 72 79 20 3d 20   char *zQuery = 
1e170 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63  0;.  int rc;.  c
1e180 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
1e190 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 63 6f 6e  ar *zName;.  con
1e1a0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
1e1b0 20 2a 7a 53 71 6c 3b 0a 20 20 63 68 61 72 20 2a   *zSql;.  char *
1e1c0 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20  zErrMsg = 0;..  
1e1d0 7a 51 75 65 72 79 20 3d 20 73 71 6c 69 74 65 33  zQuery = sqlite3
1e1e0 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54  _mprintf("SELECT
1e1f0 20 6e 61 6d 65 2c 20 73 71 6c 20 46 52 4f 4d 20   name, sql FROM 
1e200 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20  sqlite_master". 
1e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e220 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52            " WHER
1e230 45 20 25 73 22 2c 20 7a 57 68 65 72 65 29 3b 0a  E %s", zWhere);.
1e240 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
1e250 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
1e260 20 7a 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51   zQuery, -1, &pQ
1e270 75 65 72 79 2c 20 30 29 3b 0a 20 20 69 66 28 20  uery, 0);.  if( 
1e280 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  rc ){.    utf8_p
1e290 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1e2a0 72 72 6f 72 3a 20 28 25 64 29 20 25 73 20 6f 6e  rror: (%d) %s on
1e2b0 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20   [%s]\n",.      
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
1e2d0 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
1e2e0 72 72 63 6f 64 65 28 70 2d 3e 64 62 29 2c 20 73  rrcode(p->db), s
1e2f0 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d  qlite3_errmsg(p-
1e300 3e 64 62 29 2c 0a 20 20 20 20 20 20 20 20 20 20  >db),.          
1e310 20 20 20 20 20 20 20 20 20 20 7a 51 75 65 72 79            zQuery
1e320 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f  );.    goto end_
1e330 73 63 68 65 6d 61 5f 78 66 65 72 3b 0a 20 20 7d  schema_xfer;.  }
1e340 0a 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20  .  while( (rc = 
1e350 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 51 75  sqlite3_step(pQu
1e360 65 72 79 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  ery))==SQLITE_RO
1e370 57 20 29 7b 0a 20 20 20 20 7a 4e 61 6d 65 20 3d  W ){.    zName =
1e380 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1e390 74 65 78 74 28 70 51 75 65 72 79 2c 20 30 29 3b  text(pQuery, 0);
1e3a0 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
1e3b0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
1e3c0 70 51 75 65 72 79 2c 20 31 29 3b 0a 20 20 20 20  pQuery, 1);.    
1e3d0 70 72 69 6e 74 66 28 22 25 73 2e 2e 2e 20 22 2c  printf("%s... ",
1e3e0 20 7a 4e 61 6d 65 29 3b 20 66 66 6c 75 73 68 28   zName); fflush(
1e3f0 73 74 64 6f 75 74 29 3b 0a 20 20 20 20 73 71 6c  stdout);.    sql
1e400 69 74 65 33 5f 65 78 65 63 28 6e 65 77 44 62 2c  ite3_exec(newDb,
1e410 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 53   (const char*)zS
1e420 71 6c 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d  ql, 0, 0, &zErrM
1e430 73 67 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 72  sg);.    if( zEr
1e440 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 75 74  rMsg ){.      ut
1e450 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
1e460 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 53 51  , "Error: %s\nSQ
1e470 4c 3a 20 5b 25 73 5d 5c 6e 22 2c 20 7a 45 72 72  L: [%s]\n", zErr
1e480 4d 73 67 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  Msg, zSql);.    
1e490 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
1e4a0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 7a  ErrMsg);.      z
1e4b0 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
1e4c0 7d 0a 20 20 20 20 69 66 28 20 78 46 6f 72 45 61  }.    if( xForEa
1e4d0 63 68 20 29 7b 0a 20 20 20 20 20 20 78 46 6f 72  ch ){.      xFor
1e4e0 45 61 63 68 28 70 2c 20 6e 65 77 44 62 2c 20 28  Each(p, newDb, (
1e4f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 4e 61 6d  const char*)zNam
1e500 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 72  e);.    }.    pr
1e510 69 6e 74 66 28 22 64 6f 6e 65 5c 6e 22 29 3b 0a  intf("done\n");.
1e520 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51    }.  if( rc!=SQ
1e530 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
1e540 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
1e550 65 28 70 51 75 65 72 79 29 3b 0a 20 20 20 20 73  e(pQuery);.    s
1e560 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65  qlite3_free(zQue
1e570 72 79 29 3b 0a 20 20 20 20 7a 51 75 65 72 79 20  ry);.    zQuery 
1e580 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
1e590 66 28 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20  f("SELECT name, 
1e5a0 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
1e5b0 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20  master".        
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5d0 20 20 20 20 20 22 20 57 48 45 52 45 20 25 73 20       " WHERE %s 
1e5e0 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44  ORDER BY rowid D
1e5f0 45 53 43 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20  ESC", zWhere);. 
1e600 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
1e610 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
1e620 2c 20 7a 51 75 65 72 79 2c 20 2d 31 2c 20 26 70  , zQuery, -1, &p
1e630 51 75 65 72 79 2c 20 30 29 3b 0a 20 20 20 20 69  Query, 0);.    i
1e640 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 75  f( rc ){.      u
1e650 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
1e660 72 2c 20 22 45 72 72 6f 72 3a 20 28 25 64 29 20  r, "Error: (%d) 
1e670 25 73 20 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20  %s on [%s]\n",. 
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e690 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74       sqlite3_ext
1e6a0 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 70 2d  ended_errcode(p-
1e6b0 3e 64 62 29 2c 20 73 71 6c 69 74 65 33 5f 65 72  >db), sqlite3_er
1e6c0 72 6d 73 67 28 70 2d 3e 64 62 29 2c 0a 20 20 20  rmsg(p->db),.   
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6e0 20 20 20 7a 51 75 65 72 79 29 3b 0a 20 20 20 20     zQuery);.    
1e6f0 20 20 67 6f 74 6f 20 65 6e 64 5f 73 63 68 65 6d    goto end_schem
1e700 61 5f 78 66 65 72 3b 0a 20 20 20 20 7d 0a 20 20  a_xfer;.    }.  
1e710 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73    while( (rc = s
1e720 71 6c 69 74 65 33 5f 73 74 65 70 28 70 51 75 65  qlite3_step(pQue
1e730 72 79 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57  ry))==SQLITE_ROW
1e740 20 29 7b 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20   ){.      zName 
1e750 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
1e760 5f 74 65 78 74 28 70 51 75 65 72 79 2c 20 30 29  _text(pQuery, 0)
1e770 3b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73  ;.      zSql = s
1e780 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1e790 78 74 28 70 51 75 65 72 79 2c 20 31 29 3b 0a 20  xt(pQuery, 1);. 
1e7a0 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 2e       printf("%s.
1e7b0 2e 2e 20 22 2c 20 7a 4e 61 6d 65 29 3b 20 66 66  .. ", zName); ff
1e7c0 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20  lush(stdout);.  
1e7d0 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63      sqlite3_exec
1e7e0 28 6e 65 77 44 62 2c 20 28 63 6f 6e 73 74 20 63  (newDb, (const c
1e7f0 68 61 72 2a 29 7a 53 71 6c 2c 20 30 2c 20 30 2c  har*)zSql, 0, 0,
1e800 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20   &zErrMsg);.    
1e810 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b    if( zErrMsg ){
1e820 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
1e830 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1e840 72 6f 72 3a 20 25 73 5c 6e 53 51 4c 3a 20 5b 25  ror: %s\nSQL: [%
1e850 73 5d 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 2c 20  s]\n", zErrMsg, 
1e860 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 73  zSql);.        s
1e870 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
1e880 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20 7a 45  Msg);.        zE
1e890 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 20  rrMsg = 0;.     
1e8a0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 78 46 6f   }.      if( xFo
1e8b0 72 45 61 63 68 20 29 7b 0a 20 20 20 20 20 20 20  rEach ){.       
1e8c0 20 78 46 6f 72 45 61 63 68 28 70 2c 20 6e 65 77   xForEach(p, new
1e8d0 44 62 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  Db, (const char*
1e8e0 29 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d  )zName);.      }
1e8f0 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 64  .      printf("d
1e900 6f 6e 65 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20  one\n");.    }. 
1e910 20 7d 0a 65 6e 64 5f 73 63 68 65 6d 61 5f 78 66   }.end_schema_xf
1e920 65 72 3a 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  er:.  sqlite3_fi
1e930 6e 61 6c 69 7a 65 28 70 51 75 65 72 79 29 3b 0a  nalize(pQuery);.
1e940 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
1e950 51 75 65 72 79 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  Query);.}../*.**
1e960 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74 61   Open a new data
1e970 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 64 20  base file named 
1e980 22 7a 4e 65 77 44 62 22 2e 20 20 54 72 79 20 74  "zNewDb".  Try t
1e990 6f 20 72 65 63 6f 76 65 72 20 61 73 20 6d 75 63  o recover as muc
1e9a0 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  h information.**
1e9b0 20 61 73 20 70 6f 73 73 69 62 6c 65 20 6f 75 74   as possible out
1e9c0 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   of the main dat
1e9d0 61 62 61 73 65 20 28 77 68 69 63 68 20 6d 69 67  abase (which mig
1e9e0 68 74 20 62 65 20 63 6f 72 72 75 70 74 29 20 61  ht be corrupt) a
1e9f0 6e 64 20 77 72 69 74 65 20 69 74 0a 2a 2a 20 69  nd write it.** i
1ea00 6e 74 6f 20 7a 4e 65 77 44 62 2e 0a 2a 2f 0a 73  nto zNewDb..*/.s
1ea10 74 61 74 69 63 20 76 6f 69 64 20 74 72 79 54 6f  tatic void tryTo
1ea20 43 6c 6f 6e 65 28 53 68 65 6c 6c 53 74 61 74 65  Clone(ShellState
1ea30 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   *p, const char 
1ea40 2a 7a 4e 65 77 44 62 29 7b 0a 20 20 69 6e 74 20  *zNewDb){.  int 
1ea50 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e  rc;.  sqlite3 *n
1ea60 65 77 44 62 20 3d 20 30 3b 0a 20 20 69 66 28 20  ewDb = 0;.  if( 
1ea70 61 63 63 65 73 73 28 7a 4e 65 77 44 62 2c 30 29  access(zNewDb,0)
1ea80 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  ==0 ){.    utf8_
1ea90 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1eaa0 46 69 6c 65 20 5c 22 25 73 5c 22 20 61 6c 72 65  File \"%s\" alre
1eab0 61 64 79 20 65 78 69 73 74 73 2e 5c 6e 22 2c 20  ady exists.\n", 
1eac0 7a 4e 65 77 44 62 29 3b 0a 20 20 20 20 72 65 74  zNewDb);.    ret
1ead0 75 72 6e 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  urn;.  }.  rc = 
1eae0 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 4e 65  sqlite3_open(zNe
1eaf0 77 44 62 2c 20 26 6e 65 77 44 62 29 3b 0a 20 20  wDb, &newDb);.  
1eb00 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 75 74  if( rc ){.    ut
1eb10 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
1eb20 2c 20 22 43 61 6e 6e 6f 74 20 63 72 65 61 74 65  , "Cannot create
1eb30 20 6f 75 74 70 75 74 20 64 61 74 61 62 61 73 65   output database
1eb40 3a 20 25 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20  : %s\n",.       
1eb50 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72       sqlite3_err
1eb60 6d 73 67 28 6e 65 77 44 62 29 29 3b 0a 20 20 7d  msg(newDb));.  }
1eb70 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
1eb80 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 50  3_exec(p->db, "P
1eb90 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
1eba0 63 68 65 6d 61 3d 4f 4e 3b 22 2c 20 30 2c 20 30  chema=ON;", 0, 0
1ebb0 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
1ebc0 33 5f 65 78 65 63 28 6e 65 77 44 62 2c 20 22 42  3_exec(newDb, "B
1ebd0 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 3b 22  EGIN EXCLUSIVE;"
1ebe0 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
1ebf0 74 72 79 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61  tryToCloneSchema
1ec00 28 70 2c 20 6e 65 77 44 62 2c 20 22 74 79 70 65  (p, newDb, "type
1ec10 3d 27 74 61 62 6c 65 27 22 2c 20 74 72 79 54 6f  ='table'", tryTo
1ec20 43 6c 6f 6e 65 44 61 74 61 29 3b 0a 20 20 20 20  CloneData);.    
1ec30 74 72 79 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61  tryToCloneSchema
1ec40 28 70 2c 20 6e 65 77 44 62 2c 20 22 74 79 70 65  (p, newDb, "type
1ec50 21 3d 27 74 61 62 6c 65 27 22 2c 20 30 29 3b 0a  !='table'", 0);.
1ec60 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63      sqlite3_exec
1ec70 28 6e 65 77 44 62 2c 20 22 43 4f 4d 4d 49 54 3b  (newDb, "COMMIT;
1ec80 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20  ", 0, 0, 0);.   
1ec90 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
1eca0 3e 64 62 2c 20 22 50 52 41 47 4d 41 20 77 72 69  >db, "PRAGMA wri
1ecb0 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46  table_schema=OFF
1ecc0 3b 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  ;", 0, 0, 0);.  
1ecd0 7d 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  }.  sqlite3_clos
1ece0 65 28 6e 65 77 44 62 29 3b 0a 7d 0a 0a 2f 2a 0a  e(newDb);.}../*.
1ecf0 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6f 75  ** Change the ou
1ed00 74 70 75 74 20 66 69 6c 65 20 62 61 63 6b 20 74  tput file back t
1ed10 6f 20 73 74 64 6f 75 74 2e 0a 2a 2a 0a 2a 2a 20  o stdout..**.** 
1ed20 49 66 20 74 68 65 20 70 2d 3e 64 6f 58 64 67 4f  If the p->doXdgO
1ed30 70 65 6e 20 66 6c 61 67 20 69 73 20 73 65 74 2c  pen flag is set,
1ed40 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 20   that means the 
1ed50 6f 75 74 70 75 74 20 77 61 73 20 62 65 69 6e 67  output was being
1ed60 0a 2a 2a 20 72 65 64 69 72 65 63 74 65 64 20 74  .** redirected t
1ed70 6f 20 61 20 74 65 6d 70 6f 72 61 72 79 20 66 69  o a temporary fi
1ed80 6c 65 20 6e 61 6d 65 64 20 62 79 20 70 2d 3e 7a  le named by p->z
1ed90 54 65 6d 70 46 69 6c 65 2e 20 20 49 6e 20 74 68  TempFile.  In th
1eda0 61 74 20 63 61 73 65 2c 0a 2a 2a 20 6c 61 75 6e  at case,.** laun
1edb0 63 68 20 73 74 61 72 74 2f 6f 70 65 6e 2f 78 64  ch start/open/xd
1edc0 67 2d 6f 70 65 6e 20 6f 6e 20 74 68 61 74 20 74  g-open on that t
1edd0 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e 0a 2a  emporary file..*
1ede0 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75  /.static void ou
1edf0 74 70 75 74 5f 72 65 73 65 74 28 53 68 65 6c 6c  tput_reset(Shell
1ee00 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69 66 28  State *p){.  if(
1ee10 20 70 2d 3e 6f 75 74 66 69 6c 65 5b 30 5d 3d 3d   p->outfile[0]==
1ee20 27 7c 27 20 29 7b 0a 23 69 66 6e 64 65 66 20 53  '|' ){.#ifndef S
1ee30 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e  QLITE_OMIT_POPEN
1ee40 0a 20 20 20 20 70 63 6c 6f 73 65 28 70 2d 3e 6f  .    pclose(p->o
1ee50 75 74 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  ut);.#endif.  }e
1ee60 6c 73 65 7b 0a 20 20 20 20 6f 75 74 70 75 74 5f  lse{.    output_
1ee70 66 69 6c 65 5f 63 6c 6f 73 65 28 70 2d 3e 6f 75  file_close(p->ou
1ee80 74 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64  t);.    if( p->d
1ee90 6f 58 64 67 4f 70 65 6e 20 29 7b 0a 20 20 20 20  oXdgOpen ){.    
1eea0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 58    const char *zX
1eeb0 64 67 4f 70 65 6e 43 6d 64 20 3d 0a 23 69 66 20  dgOpenCmd =.#if 
1eec0 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 0a  defined(_WIN32).
1eed0 20 20 20 20 20 20 22 73 74 61 72 74 22 3b 0a 23        "start";.#
1eee0 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 41  elif defined(__A
1eef0 50 50 4c 45 5f 5f 29 0a 20 20 20 20 20 20 22 6f  PPLE__).      "o
1ef00 70 65 6e 22 3b 0a 23 65 6c 73 65 0a 20 20 20 20  pen";.#else.    
1ef10 20 20 22 78 64 67 2d 6f 70 65 6e 22 3b 0a 23 65    "xdg-open";.#e
1ef20 6e 64 69 66 0a 20 20 20 20 20 20 63 68 61 72 20  ndif.      char 
1ef30 2a 7a 43 6d 64 3b 0a 20 20 20 20 20 20 7a 43 6d  *zCmd;.      zCm
1ef40 64 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  d = sqlite3_mpri
1ef50 6e 74 66 28 22 25 73 20 25 73 22 2c 20 7a 58 64  ntf("%s %s", zXd
1ef60 67 4f 70 65 6e 43 6d 64 2c 20 70 2d 3e 7a 54 65  gOpenCmd, p->zTe
1ef70 6d 70 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 69  mpFile);.      i
1ef80 66 28 20 73 79 73 74 65 6d 28 7a 43 6d 64 29 20  f( system(zCmd) 
1ef90 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
1efa0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1efb0 46 61 69 6c 65 64 3a 20 5b 25 73 5d 5c 6e 22 2c  Failed: [%s]\n",
1efc0 20 7a 43 6d 64 29 3b 0a 20 20 20 20 20 20 7d 0a   zCmd);.      }.
1efd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
1efe0 65 65 28 7a 43 6d 64 29 3b 0a 20 20 20 20 20 20  ee(zCmd);.      
1eff0 6f 75 74 70 75 74 4d 6f 64 65 50 6f 70 28 70 29  outputModePop(p)
1f000 3b 0a 20 20 20 20 20 20 70 2d 3e 64 6f 58 64 67  ;.      p->doXdg
1f010 4f 70 65 6e 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  Open = 0;.    }.
1f020 20 20 7d 0a 20 20 70 2d 3e 6f 75 74 66 69 6c 65    }.  p->outfile
1f030 5b 30 5d 20 3d 20 30 3b 0a 20 20 70 2d 3e 6f 75  [0] = 0;.  p->ou
1f040 74 20 3d 20 73 74 64 6f 75 74 3b 0a 7d 0a 0a 2f  t = stdout;.}../
1f050 2a 0a 2a 2a 20 52 75 6e 20 61 6e 20 53 51 4c 20  *.** Run an SQL 
1f060 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65 74 75  command and retu
1f070 72 6e 20 74 68 65 20 73 69 6e 67 6c 65 20 69 6e  rn the single in
1f080 74 65 67 65 72 20 72 65 73 75 6c 74 2e 0a 2a 2f  teger result..*/
1f090 0a 73 74 61 74 69 63 20 69 6e 74 20 64 62 5f 69  .static int db_i
1f0a0 6e 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  nt(ShellState *p
1f0b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53  , const char *zS
1f0c0 71 6c 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ql){.  sqlite3_s
1f0d0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
1f0e0 74 20 72 65 73 20 3d 20 30 3b 0a 20 20 73 71 6c  t res = 0;.  sql
1f0f0 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
1f100 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c  p->db, zSql, -1,
1f110 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 69   &pStmt, 0);.  i
1f120 66 28 20 70 53 74 6d 74 20 26 26 20 73 71 6c 69  f( pStmt && sqli
1f130 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3d  te3_step(pStmt)=
1f140 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20  =SQLITE_ROW ){. 
1f150 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
1f160 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d  _column_int(pStm
1f170 74 2c 30 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  t,0);.  }.  sqli
1f180 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
1f190 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 65  mt);.  return re
1f1a0 73 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  s;.}../*.** Conv
1f1b0 65 72 74 20 61 20 32 2d 62 79 74 65 20 6f 72 20  ert a 2-byte or 
1f1c0 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
1f1d0 6e 20 69 6e 74 65 67 65 72 20 69 6e 74 6f 20 61  n integer into a
1f1e0 20 6e 61 74 69 76 65 20 69 6e 74 65 67 65 72 0a   native integer.
1f1f0 2a 2f 0a 73 74 61 74 69 63 20 75 6e 73 69 67 6e  */.static unsign
1f200 65 64 20 69 6e 74 20 67 65 74 32 62 79 74 65 49  ed int get2byteI
1f210 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
1f220 20 2a 61 29 7b 0a 20 20 72 65 74 75 72 6e 20 28   *a){.  return (
1f230 61 5b 30 5d 3c 3c 38 29 20 2b 20 61 5b 31 5d 3b  a[0]<<8) + a[1];
1f240 0a 7d 0a 73 74 61 74 69 63 20 75 6e 73 69 67 6e  .}.static unsign
1f250 65 64 20 69 6e 74 20 67 65 74 34 62 79 74 65 49  ed int get4byteI
1f260 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
1f270 20 2a 61 29 7b 0a 20 20 72 65 74 75 72 6e 20 28   *a){.  return (
1f280 61 5b 30 5d 3c 3c 32 34 29 20 2b 20 28 61 5b 31  a[0]<<24) + (a[1
1f290 5d 3c 3c 31 36 29 20 2b 20 28 61 5b 32 5d 3c 3c  ]<<16) + (a[2]<<
1f2a0 38 29 20 2b 20 61 5b 33 5d 3b 0a 7d 0a 0a 2f 2a  8) + a[3];.}../*
1f2b0 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69  .** Implementati
1f2c0 6f 6e 20 6f 66 20 74 68 65 20 22 2e 69 6e 66 6f  on of the ".info
1f2d0 22 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a  " command..**.**
1f2e0 20 52 65 74 75 72 6e 20 31 20 6f 6e 20 65 72 72   Return 1 on err
1f2f0 6f 72 2c 20 32 20 74 6f 20 65 78 69 74 2c 20 61  or, 2 to exit, a
1f300 6e 64 20 30 20 6f 74 68 65 72 77 69 73 65 2e 0a  nd 0 otherwise..
1f310 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 68  */.static int sh
1f320 65 6c 6c 5f 64 62 69 6e 66 6f 5f 63 6f 6d 6d 61  ell_dbinfo_comma
1f330 6e 64 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  nd(ShellState *p
1f340 2c 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61 72  , int nArg, char
1f350 20 2a 2a 61 7a 41 72 67 29 7b 0a 20 20 73 74 61   **azArg){.  sta
1f360 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
1f370 20 7b 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a   { const char *z
1f380 4e 61 6d 65 3b 20 69 6e 74 20 6f 66 73 74 3b 20  Name; int ofst; 
1f390 7d 20 61 46 69 65 6c 64 5b 5d 20 3d 20 7b 0a 20  } aField[] = {. 
1f3a0 20 20 20 20 7b 20 22 66 69 6c 65 20 63 68 61 6e      { "file chan
1f3b0 67 65 20 63 6f 75 6e 74 65 72 3a 22 2c 20 20 32  ge counter:",  2
1f3c0 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 64 61  4  },.     { "da
1f3d0 74 61 62 61 73 65 20 70 61 67 65 20 63 6f 75 6e  tabase page coun
1f3e0 74 3a 22 2c 20 20 32 38 20 20 7d 2c 0a 20 20 20  t:",  28  },.   
1f3f0 20 20 7b 20 22 66 72 65 65 6c 69 73 74 20 70 61    { "freelist pa
1f400 67 65 20 63 6f 75 6e 74 3a 22 2c 20 20 33 36 20  ge count:",  36 
1f410 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 63 68 65   },.     { "sche
1f420 6d 61 20 63 6f 6f 6b 69 65 3a 22 2c 20 20 20 20  ma cookie:",    
1f430 20 20 20 20 34 30 20 20 7d 2c 0a 20 20 20 20 20      40  },.     
1f440 7b 20 22 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  { "schema format
1f450 3a 22 2c 20 20 20 20 20 20 20 20 34 34 20 20 7d  :",        44  }
1f460 2c 0a 20 20 20 20 20 7b 20 22 64 65 66 61 75 6c  ,.     { "defaul
1f470 74 20 63 61 63 68 65 20 73 69 7a 65 3a 22 2c 20  t cache size:", 
1f480 20 20 34 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20    48  },.     { 
1f490 22 61 75 74 6f 76 61 63 75 75 6d 20 74 6f 70 20  "autovacuum top 
1f4a0 72 6f 6f 74 3a 22 2c 20 20 35 32 20 20 7d 2c 0a  root:",  52  },.
1f4b0 20 20 20 20 20 7b 20 22 69 6e 63 72 65 6d 65 6e       { "incremen
1f4c0 74 61 6c 20 76 61 63 75 75 6d 3a 22 2c 20 20 20  tal vacuum:",   
1f4d0 36 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 74  64  },.     { "t
1f4e0 65 78 74 20 65 6e 63 6f 64 69 6e 67 3a 22 2c 20  ext encoding:", 
1f4f0 20 20 20 20 20 20 20 35 36 20 20 7d 2c 0a 20 20         56  },.  
1f500 20 20 20 7b 20 22 75 73 65 72 20 76 65 72 73 69     { "user versi
1f510 6f 6e 3a 22 2c 20 20 20 20 20 20 20 20 20 36 30  on:",         60
1f520 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 70 70    },.     { "app
1f530 6c 69 63 61 74 69 6f 6e 20 69 64 3a 22 2c 20 20  lication id:",  
1f540 20 20 20 20 20 36 38 20 20 7d 2c 0a 20 20 20 20       68  },.    
1f550 20 7b 20 22 73 6f 66 74 77 61 72 65 20 76 65 72   { "software ver
1f560 73 69 6f 6e 3a 22 2c 20 20 20 20 20 39 36 20 20  sion:",     96  
1f570 7d 2c 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63  },.  };.  static
1f580 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 20   const struct { 
1f590 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
1f5a0 65 3b 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e; const char *z
1f5b0 53 71 6c 3b 20 7d 20 61 51 75 65 72 79 5b 5d 20  Sql; } aQuery[] 
1f5c0 3d 20 7b 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62  = {.     { "numb
1f5d0 65 72 20 6f 66 20 74 61 62 6c 65 73 3a 22 2c 0a  er of tables:",.
1f5e0 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 63         "SELECT c
1f5f0 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73 20  ount(*) FROM %s 
1f600 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c  WHERE type='tabl
1f610 65 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 6e  e'" },.     { "n
1f620 75 6d 62 65 72 20 6f 66 20 69 6e 64 65 78 65 73  umber of indexes
1f630 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  :",.       "SELE
1f640 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
1f650 20 25 73 20 57 48 45 52 45 20 74 79 70 65 3d 27   %s WHERE type='
1f660 69 6e 64 65 78 27 22 20 7d 2c 0a 20 20 20 20 20  index'" },.     
1f670 7b 20 22 6e 75 6d 62 65 72 20 6f 66 20 74 72 69  { "number of tri
1f680 67 67 65 72 73 3a 22 2c 0a 20 20 20 20 20 20 20  ggers:",.       
1f690 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  "SELECT count(*)
1f6a0 20 46 52 4f 4d 20 25 73 20 57 48 45 52 45 20 74   FROM %s WHERE t
1f6b0 79 70 65 3d 27 74 72 69 67 67 65 72 27 22 20 7d  ype='trigger'" }
1f6c0 2c 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62 65 72  ,.     { "number
1f6d0 20 6f 66 20 76 69 65 77 73 3a 22 2c 0a 20 20 20   of views:",.   
1f6e0 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e      "SELECT coun
1f6f0 74 28 2a 29 20 46 52 4f 4d 20 25 73 20 57 48 45  t(*) FROM %s WHE
1f700 52 45 20 74 79 70 65 3d 27 76 69 65 77 27 22 20  RE type='view'" 
1f710 7d 2c 0a 20 20 20 20 20 7b 20 22 73 63 68 65 6d  },.     { "schem
1f720 61 20 73 69 7a 65 3a 22 2c 0a 20 20 20 20 20 20  a size:",.      
1f730 20 22 53 45 4c 45 43 54 20 74 6f 74 61 6c 28 6c   "SELECT total(l
1f740 65 6e 67 74 68 28 73 71 6c 29 29 20 46 52 4f 4d  ength(sql)) FROM
1f750 20 25 73 22 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69   %s" },.  };.  i
1f760 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 53  nt i;.  char *zS
1f770 63 68 65 6d 61 54 61 62 3b 0a 20 20 63 68 61 72  chemaTab;.  char
1f780 20 2a 7a 44 62 20 3d 20 6e 41 72 67 3e 3d 32 20   *zDb = nArg>=2 
1f790 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d 61  ? azArg[1] : "ma
1f7a0 69 6e 22 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  in";.  sqlite3_s
1f7b0 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a  tmt *pStmt = 0;.
1f7c0 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20    unsigned char 
1f7d0 61 48 64 72 5b 31 30 30 5d 3b 0a 20 20 6f 70 65  aHdr[100];.  ope
1f7e0 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 69 66  n_db(p, 0);.  if
1f7f0 28 20 70 2d 3e 64 62 3d 3d 30 20 29 20 72 65 74  ( p->db==0 ) ret
1f800 75 72 6e 20 31 3b 0a 20 20 73 71 6c 69 74 65 33  urn 1;.  sqlite3
1f810 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
1f820 62 2c 22 53 45 4c 45 43 54 20 64 61 74 61 20 46  b,"SELECT data F
1f830 52 4f 4d 20 73 71 6c 69 74 65 5f 64 62 70 61 67  ROM sqlite_dbpag
1f840 65 28 3f 31 29 20 57 48 45 52 45 20 70 67 6e 6f  e(?1) WHERE pgno
1f850 3d 31 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  =1",.           
1f860 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70            -1, &p
1f870 53 74 6d 74 2c 20 30 29 3b 0a 20 20 73 71 6c 69  Stmt, 0);.  sqli
1f880 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53  te3_bind_text(pS
1f890 74 6d 74 2c 20 31 2c 20 7a 44 62 2c 20 2d 31 2c  tmt, 1, zDb, -1,
1f8a0 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
1f8b0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73  .  if( sqlite3_s
1f8c0 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49  tep(pStmt)==SQLI
1f8d0 54 45 5f 52 4f 57 0a 20 20 20 26 26 20 73 71 6c  TE_ROW.   && sql
1f8e0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
1f8f0 73 28 70 53 74 6d 74 2c 30 29 3e 31 30 30 0a 20  s(pStmt,0)>100. 
1f900 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 61   ){.    memcpy(a
1f910 48 64 72 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  Hdr, sqlite3_col
1f920 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 30  umn_blob(pStmt,0
1f930 29 2c 20 31 30 30 29 3b 0a 20 20 20 20 73 71 6c  ), 100);.    sql
1f940 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
1f950 74 6d 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  tmt);.  }else{. 
1f960 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
1f970 64 65 72 72 2c 20 22 75 6e 61 62 6c 65 20 74 6f  derr, "unable to
1f980 20 72 65 61 64 20 64 61 74 61 62 61 73 65 20 68   read database h
1f990 65 61 64 65 72 5c 6e 22 29 3b 0a 20 20 20 20 73  eader\n");.    s
1f9a0 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1f9b0 70 53 74 6d 74 29 3b 0a 20 20 20 20 72 65 74 75  pStmt);.    retu
1f9c0 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 20 3d 20  rn 1;.  }.  i = 
1f9d0 67 65 74 32 62 79 74 65 49 6e 74 28 61 48 64 72  get2byteInt(aHdr
1f9e0 2b 31 36 29 3b 0a 20 20 69 66 28 20 69 3d 3d 31  +16);.  if( i==1
1f9f0 20 29 20 69 20 3d 20 36 35 35 33 36 3b 0a 20 20   ) i = 65536;.  
1fa00 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
1fa10 75 74 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e 22  ut, "%-20s %d\n"
1fa20 2c 20 22 64 61 74 61 62 61 73 65 20 70 61 67 65  , "database page
1fa30 20 73 69 7a 65 3a 22 2c 20 69 29 3b 0a 20 20 75   size:", i);.  u
1fa40 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
1fa50 74 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c  t, "%-20s %d\n",
1fa60 20 22 77 72 69 74 65 20 66 6f 72 6d 61 74 3a 22   "write format:"
1fa70 2c 20 61 48 64 72 5b 31 38 5d 29 3b 0a 20 20 75  , aHdr[18]);.  u
1fa80 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
1fa90 74 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c  t, "%-20s %d\n",
1faa0 20 22 72 65 61 64 20 66 6f 72 6d 61 74 3a 22 2c   "read format:",
1fab0 20 61 48 64 72 5b 31 39 5d 29 3b 0a 20 20 75 74   aHdr[19]);.  ut
1fac0 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
1fad0 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20  , "%-20s %d\n", 
1fae0 22 72 65 73 65 72 76 65 64 20 62 79 74 65 73 3a  "reserved bytes:
1faf0 22 2c 20 61 48 64 72 5b 32 30 5d 29 3b 0a 20 20  ", aHdr[20]);.  
1fb00 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79  for(i=0; i<Array
1fb10 53 69 7a 65 28 61 46 69 65 6c 64 29 3b 20 69 2b  Size(aField); i+
1fb20 2b 29 7b 0a 20 20 20 20 69 6e 74 20 6f 66 73 74  +){.    int ofst
1fb30 20 3d 20 61 46 69 65 6c 64 5b 69 5d 2e 6f 66 73   = aField[i].ofs
1fb40 74 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  t;.    unsigned 
1fb50 69 6e 74 20 76 61 6c 20 3d 20 67 65 74 34 62 79  int val = get4by
1fb60 74 65 49 6e 74 28 61 48 64 72 20 2b 20 6f 66 73  teInt(aHdr + ofs
1fb70 74 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  t);.    utf8_pri
1fb80 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32  ntf(p->out, "%-2
1fb90 30 73 20 25 75 22 2c 20 61 46 69 65 6c 64 5b 69  0s %u", aField[i
1fba0 5d 2e 7a 4e 61 6d 65 2c 20 76 61 6c 29 3b 0a 20  ].zName, val);. 
1fbb0 20 20 20 73 77 69 74 63 68 28 20 6f 66 73 74 20     switch( ofst 
1fbc0 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 35 36  ){.      case 56
1fbd0 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
1fbe0 76 61 6c 3d 3d 31 20 29 20 72 61 77 5f 70 72 69  val==1 ) raw_pri
1fbf0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20 28 75  ntf(p->out, " (u
1fc00 74 66 38 29 22 29 3b 0a 20 20 20 20 20 20 20 20  tf8)");.        
1fc10 69 66 28 20 76 61 6c 3d 3d 32 20 29 20 72 61 77  if( val==2 ) raw
1fc20 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
1fc30 22 20 28 75 74 66 31 36 6c 65 29 22 29 3b 0a 20  " (utf16le)");. 
1fc40 20 20 20 20 20 20 20 69 66 28 20 76 61 6c 3d 3d         if( val==
1fc50 33 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28 70  3 ) raw_printf(p
1fc60 2d 3e 6f 75 74 2c 20 22 20 28 75 74 66 31 36 62  ->out, " (utf16b
1fc70 65 29 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  e)");.      }.  
1fc80 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69 6e    }.    raw_prin
1fc90 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29  tf(p->out, "\n")
1fca0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 44 62 3d  ;.  }.  if( zDb=
1fcb0 3d 30 20 29 7b 0a 20 20 20 20 7a 53 63 68 65 6d  =0 ){.    zSchem
1fcc0 61 54 61 62 20 3d 20 73 71 6c 69 74 65 33 5f 6d  aTab = sqlite3_m
1fcd0 70 72 69 6e 74 66 28 22 6d 61 69 6e 2e 73 71 6c  printf("main.sql
1fce0 69 74 65 5f 6d 61 73 74 65 72 22 29 3b 0a 20 20  ite_master");.  
1fcf0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
1fd00 28 7a 44 62 2c 22 74 65 6d 70 22 29 3d 3d 30 20  (zDb,"temp")==0 
1fd10 29 7b 0a 20 20 20 20 7a 53 63 68 65 6d 61 54 61  ){.    zSchemaTa
1fd20 62 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  b = sqlite3_mpri
1fd30 6e 74 66 28 22 25 73 22 2c 20 22 73 71 6c 69 74  ntf("%s", "sqlit
1fd40 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 29 3b  e_temp_master");
1fd50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 53  .  }else{.    zS
1fd60 63 68 65 6d 61 54 61 62 20 3d 20 73 71 6c 69 74  chemaTab = sqlit
1fd70 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22 25 77  e3_mprintf("\"%w
1fd80 5c 22 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  \".sqlite_master
1fd90 22 2c 20 7a 44 62 29 3b 0a 20 20 7d 0a 20 20 66  ", zDb);.  }.  f
1fda0 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53  or(i=0; i<ArrayS
1fdb0 69 7a 65 28 61 51 75 65 72 79 29 3b 20 69 2b 2b  ize(aQuery); i++
1fdc0 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71  ){.    char *zSq
1fdd0 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  l = sqlite3_mpri
1fde0 6e 74 66 28 61 51 75 65 72 79 5b 69 5d 2e 7a 53  ntf(aQuery[i].zS
1fdf0 71 6c 2c 20 7a 53 63 68 65 6d 61 54 61 62 29 3b  ql, zSchemaTab);
1fe00 0a 20 20 20 20 69 6e 74 20 76 61 6c 20 3d 20 64  .    int val = d
1fe10 62 5f 69 6e 74 28 70 2c 20 7a 53 71 6c 29 3b 0a  b_int(p, zSql);.
1fe20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
1fe30 28 7a 53 71 6c 29 3b 0a 20 20 20 20 75 74 66 38  (zSql);.    utf8
1fe40 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
1fe50 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 61 51  "%-20s %d\n", aQ
1fe60 75 65 72 79 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 76  uery[i].zName, v
1fe70 61 6c 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  al);.  }.  sqlit
1fe80 65 33 5f 66 72 65 65 28 7a 53 63 68 65 6d 61 54  e3_free(zSchemaT
1fe90 61 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b  ab);.  return 0;
1fea0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  .}../*.** Print 
1feb0 74 68 65 20 63 75 72 72 65 6e 74 20 73 71 6c 69  the current sqli
1fec0 74 65 33 5f 65 72 72 6d 73 67 28 29 20 76 61 6c  te3_errmsg() val
1fed0 75 65 20 74 6f 20 73 74 64 65 72 72 20 61 6e 64  ue to stderr and
1fee0 20 72 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a 73 74   return 1..*/.st
1fef0 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 44 61  atic int shellDa
1ff00 74 61 62 61 73 65 45 72 72 6f 72 28 73 71 6c 69  tabaseError(sqli
1ff10 74 65 33 20 2a 64 62 29 7b 0a 20 20 63 6f 6e 73  te3 *db){.  cons
1ff20 74 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 73  t char *zErr = s
1ff30 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
1ff40 29 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74 66  );.  utf8_printf
1ff50 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
1ff60 20 25 73 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20   %s\n", zErr);. 
1ff70 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a   return 1;.}../*
1ff80 0a 2a 2a 20 50 72 69 6e 74 20 61 6e 20 6f 75 74  .** Print an out
1ff90 2d 6f 66 2d 6d 65 6d 6f 72 79 20 6d 65 73 73 61  -of-memory messa
1ffa0 67 65 20 74 6f 20 73 74 64 65 72 72 20 61 6e 64  ge to stderr and
1ffb0 20 72 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a 73 74   return 1..*/.st
1ffc0 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 4e 6f  atic int shellNo
1ffd0 6d 65 6d 45 72 72 6f 72 28 76 6f 69 64 29 7b 0a  memError(void){.
1ffe0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
1fff0 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74  err, "Error: out
20000 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a   of memory\n");.
20010 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f    return 1;.}../
20020 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65  *.** Compare the
20030 20 70 61 74 74 65 72 6e 20 69 6e 20 7a 47 6c 6f   pattern in zGlo
20040 62 5b 5d 20 61 67 61 69 6e 73 74 20 74 68 65 20  b[] against the 
20050 74 65 78 74 20 69 6e 20 7a 5b 5d 2e 20 20 52 65  text in z[].  Re
20060 74 75 72 6e 20 54 52 55 45 0a 2a 2a 20 69 66 20  turn TRUE.** if 
20070 74 68 65 79 20 6d 61 74 63 68 20 61 6e 64 20 46  they match and F
20080 41 4c 53 45 20 28 30 29 20 69 66 20 74 68 65 79  ALSE (0) if they
20090 20 64 6f 20 6e 6f 74 20 6d 61 74 63 68 2e 0a 2a   do not match..*
200a0 2a 0a 2a 2a 20 47 6c 6f 62 62 69 6e 67 20 72 75  *.** Globbing ru
200b0 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  les:.**.**      
200c0 27 2a 27 20 20 20 20 20 20 20 4d 61 74 63 68 65  '*'       Matche
200d0 73 20 61 6e 79 20 73 65 71 75 65 6e 63 65 20 6f  s any sequence o
200e0 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63  f zero or more c
200f0 68 61 72 61 63 74 65 72 73 2e 0a 2a 2a 0a 2a 2a  haracters..**.**
20100 20 20 20 20 20 20 27 3f 27 20 20 20 20 20 20 20        '?'       
20110 4d 61 74 63 68 65 73 20 65 78 61 63 74 6c 79 20  Matches exactly 
20120 6f 6e 65 20 63 68 61 72 61 63 74 65 72 2e 0a 2a  one character..*
20130 2a 0a 2a 2a 20 20 20 20 20 5b 2e 2e 2e 5d 20 20  *.**     [...]  
20140 20 20 20 20 4d 61 74 63 68 65 73 20 6f 6e 65 20      Matches one 
20150 63 68 61 72 61 63 74 65 72 20 66 72 6f 6d 20 74  character from t
20160 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69 73 74  he enclosed list
20170 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   of.**          
20180 20 20 20 20 20 20 63 68 61 72 61 63 74 65 72 73        characters
20190 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 5b 5e 2e 2e  ..**.**     [^..
201a0 2e 5d 20 20 20 20 20 4d 61 74 63 68 65 73 20 6f  .]     Matches o
201b0 6e 65 20 63 68 61 72 61 63 74 65 72 20 6e 6f 74  ne character not
201c0 20 69 6e 20 74 68 65 20 65 6e 63 6c 6f 73 65 64   in the enclosed
201d0 20 6c 69 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20   list..**.**    
201e0 20 20 27 23 27 20 20 20 20 20 20 20 4d 61 74 63    '#'       Matc
201f0 68 65 73 20 61 6e 79 20 73 65 71 75 65 6e 63 65  hes any sequence
20200 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   of one or more 
20210 64 69 67 69 74 73 20 77 69 74 68 20 61 6e 0a 2a  digits with an.*
20220 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
20230 20 6f 70 74 69 6f 6e 61 6c 20 2b 20 6f 72 20 2d   optional + or -
20240 20 73 69 67 6e 20 69 6e 20 66 72 6f 6e 74 0a 2a   sign in front.*
20250 2a 0a 2a 2a 20 20 20 20 20 20 27 20 27 20 20 20  *.**      ' '   
20260 20 20 20 20 41 6e 79 20 73 70 61 6e 20 6f 66 20      Any span of 
20270 77 68 69 74 65 73 70 61 63 65 20 6d 61 74 63 68  whitespace match
20280 65 73 20 61 6e 79 20 6f 74 68 65 72 20 73 70 61  es any other spa
20290 6e 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  n of.**         
202a0 20 20 20 20 20 20 20 77 68 69 74 65 73 70 61 63         whitespac
202b0 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 20 77  e..**.** Extra w
202c0 68 69 74 65 73 70 61 63 65 20 61 74 20 74 68 65  hitespace at the
202d0 20 65 6e 64 20 6f 66 20 7a 5b 5d 20 69 73 20 69   end of z[] is i
202e0 67 6e 6f 72 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  gnored..*/.stati
202f0 63 20 69 6e 74 20 74 65 73 74 63 61 73 65 5f 67  c int testcase_g
20300 6c 6f 62 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  lob(const char *
20310 7a 47 6c 6f 62 2c 20 63 6f 6e 73 74 20 63 68 61  zGlob, const cha
20320 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 63 2c 20  r *z){.  int c, 
20330 63 32 3b 0a 20 20 69 6e 74 20 69 6e 76 65 72 74  c2;.  int invert
20340 3b 0a 20 20 69 6e 74 20 73 65 65 6e 3b 0a 0a 20  ;.  int seen;.. 
20350 20 77 68 69 6c 65 28 20 28 63 20 3d 20 28 2a 28   while( (c = (*(
20360 7a 47 6c 6f 62 2b 2b 29 29 29 21 3d 30 20 29 7b  zGlob++)))!=0 ){
20370 0a 20 20 20 20 69 66 28 20 49 73 53 70 61 63 65  .    if( IsSpace
20380 28 63 29 20 29 7b 0a 20 20 20 20 20 20 69 66 28  (c) ){.      if(
20390 20 21 49 73 53 70 61 63 65 28 2a 7a 29 20 29 20   !IsSpace(*z) ) 
203a0 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
203b0 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 2a  while( IsSpace(*
203c0 7a 47 6c 6f 62 29 20 29 20 7a 47 6c 6f 62 2b 2b  zGlob) ) zGlob++
203d0 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 49  ;.      while( I
203e0 73 53 70 61 63 65 28 2a 7a 29 20 29 20 7a 2b 2b  sSpace(*z) ) z++
203f0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
20400 63 3d 3d 27 2a 27 20 29 7b 0a 20 20 20 20 20 20  c=='*' ){.      
20410 77 68 69 6c 65 28 20 28 63 3d 28 2a 28 7a 47 6c  while( (c=(*(zGl
20420 6f 62 2b 2b 29 29 29 20 3d 3d 20 27 2a 27 20 7c  ob++))) == '*' |
20430 7c 20 63 3d 3d 27 3f 27 20 29 7b 0a 20 20 20 20  | c=='?' ){.    
20440 20 20 20 20 69 66 28 20 63 3d 3d 27 3f 27 20 26      if( c=='?' &
20450 26 20 28 2a 28 7a 2b 2b 29 29 3d 3d 30 20 29 20  & (*(z++))==0 ) 
20460 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
20470 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30  }.      if( c==0
20480 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75   ){.        retu
20490 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73  rn 1;.      }els
204a0 65 20 69 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a  e if( c=='[' ){.
204b0 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a          while( *
204c0 7a 20 26 26 20 74 65 73 74 63 61 73 65 5f 67 6c  z && testcase_gl
204d0 6f 62 28 7a 47 6c 6f 62 2d 31 2c 7a 29 3d 3d 30  ob(zGlob-1,z)==0
204e0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 2b   ){.          z+
204f0 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
20500 20 20 20 20 20 72 65 74 75 72 6e 20 28 2a 7a 29       return (*z)
20510 21 3d 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  !=0;.      }.   
20520 20 20 20 77 68 69 6c 65 28 20 28 63 32 20 3d 20     while( (c2 = 
20530 28 2a 28 7a 2b 2b 29 29 29 21 3d 30 20 29 7b 0a  (*(z++)))!=0 ){.
20540 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 63          while( c
20550 32 21 3d 63 20 29 7b 0a 20 20 20 20 20 20 20 20  2!=c ){.        
20560 20 20 63 32 20 3d 20 2a 28 7a 2b 2b 29 3b 0a 20    c2 = *(z++);. 
20570 20 20 20 20 20 20 20 20 20 69 66 28 20 63 32 3d           if( c2=
20580 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
20590 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
205a0 20 69 66 28 20 74 65 73 74 63 61 73 65 5f 67 6c   if( testcase_gl
205b0 6f 62 28 7a 47 6c 6f 62 2c 7a 29 20 29 20 72 65  ob(zGlob,z) ) re
205c0 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a  turn 1;.      }.
205d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a        return 0;.
205e0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
205f0 3d 27 3f 27 20 29 7b 0a 20 20 20 20 20 20 69 66  ='?' ){.      if
20600 28 20 28 2a 28 7a 2b 2b 29 29 3d 3d 30 20 29 20  ( (*(z++))==0 ) 
20610 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65  return 0;.    }e
20620 6c 73 65 20 69 66 28 20 63 3d 3d 27 5b 27 20 29  lse if( c=='[' )
20630 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 72 69 6f  {.      int prio
20640 72 5f 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 73  r_c = 0;.      s
20650 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 69  een = 0;.      i
20660 6e 76 65 72 74 20 3d 20 30 3b 0a 20 20 20 20 20  nvert = 0;.     
20670 20 63 20 3d 20 2a 28 7a 2b 2b 29 3b 0a 20 20 20   c = *(z++);.   
20680 20 20 20 69 66 28 20 63 3d 3d 30 20 29 20 72 65     if( c==0 ) re
20690 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 63 32  turn 0;.      c2
206a0 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20   = *(zGlob++);. 
206b0 20 20 20 20 20 69 66 28 20 63 32 3d 3d 27 5e 27       if( c2=='^'
206c0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 65   ){.        inve
206d0 72 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  rt = 1;.        
206e0 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b  c2 = *(zGlob++);
206f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
20700 66 28 20 63 32 3d 3d 27 5d 27 20 29 7b 0a 20 20  f( c2==']' ){.  
20710 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5d 27        if( c==']'
20720 20 29 20 73 65 65 6e 20 3d 20 31 3b 0a 20 20 20   ) seen = 1;.   
20730 20 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f       c2 = *(zGlo
20740 62 2b 2b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  b++);.      }.  
20750 20 20 20 20 77 68 69 6c 65 28 20 63 32 20 26 26      while( c2 &&
20760 20 63 32 21 3d 27 5d 27 20 29 7b 0a 20 20 20 20   c2!=']' ){.    
20770 20 20 20 20 69 66 28 20 63 32 3d 3d 27 2d 27 20      if( c2=='-' 
20780 26 26 20 7a 47 6c 6f 62 5b 30 5d 21 3d 27 5d 27  && zGlob[0]!=']'
20790 20 26 26 20 7a 47 6c 6f 62 5b 30 5d 21 3d 30 20   && zGlob[0]!=0 
207a0 26 26 20 70 72 69 6f 72 5f 63 3e 30 20 29 7b 0a  && prior_c>0 ){.
207b0 20 20 20 20 20 20 20 20 20 20 63 32 20 3d 20 2a            c2 = *
207c0 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20  (zGlob++);.     
207d0 20 20 20 20 20 69 66 28 20 63 3e 3d 70 72 69 6f       if( c>=prio
207e0 72 5f 63 20 26 26 20 63 3c 3d 63 32 20 29 20 73  r_c && c<=c2 ) s
207f0 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  een = 1;.       
20800 20 20 20 70 72 69 6f 72 5f 63 20 3d 20 30 3b 0a     prior_c = 0;.
20810 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
20820 20 20 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d           if( c==
20830 63 32 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  c2 ){.          
20840 20 20 73 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20    seen = 1;.    
20850 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
20860 20 20 70 72 69 6f 72 5f 63 20 3d 20 63 32 3b 0a    prior_c = c2;.
20870 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
20880 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b    c2 = *(zGlob++
20890 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
208a0 20 69 66 28 20 63 32 3d 3d 30 20 7c 7c 20 28 73   if( c2==0 || (s
208b0 65 65 6e 20 5e 20 69 6e 76 65 72 74 29 3d 3d 30  een ^ invert)==0
208c0 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
208d0 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 23   }else if( c=='#
208e0 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  ' ){.      if( (
208f0 7a 5b 30 5d 3d 3d 27 2d 27 20 7c 7c 20 7a 5b 30  z[0]=='-' || z[0
20900 5d 3d 3d 27 2b 27 29 20 26 26 20 49 73 44 69 67  ]=='+') && IsDig
20910 69 74 28 7a 5b 31 5d 29 20 29 20 7a 2b 2b 3b 0a  it(z[1]) ) z++;.
20920 20 20 20 20 20 20 69 66 28 20 21 49 73 44 69 67        if( !IsDig
20930 69 74 28 7a 5b 30 5d 29 20 29 20 72 65 74 75 72  it(z[0]) ) retur
20940 6e 20 30 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a  n 0;.      z++;.
20950 20 20 20 20 20 20 77 68 69 6c 65 28 20 49 73 44        while( IsD
20960 69 67 69 74 28 7a 5b 30 5d 29 20 29 7b 20 7a 2b  igit(z[0]) ){ z+
20970 2b 3b 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  +; }.    }else{.
20980 20 20 20 20 20 20 69 66 28 20 63 21 3d 28 2a 28        if( c!=(*(
20990 7a 2b 2b 29 29 20 29 20 72 65 74 75 72 6e 20 30  z++)) ) return 0
209a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 77 68  ;.    }.  }.  wh
209b0 69 6c 65 28 20 49 73 53 70 61 63 65 28 2a 7a 29  ile( IsSpace(*z)
209c0 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 72 65 74   ){ z++; }.  ret
209d0 75 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 0a 2f  urn *z==0;.}.../
209e0 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65  *.** Compare the
209f0 20 73 74 72 69 6e 67 20 61 73 20 61 20 63 6f 6d   string as a com
20a00 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand-line option
20a10 20 77 69 74 68 20 65 69 74 68 65 72 20 6f 6e 65   with either one
20a20 20 6f 72 20 74 77 6f 0a 2a 2a 20 69 6e 69 74 69   or two.** initi
20a30 61 6c 20 22 2d 22 20 63 68 61 72 61 63 74 65 72  al "-" character
20a40 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  s..*/.static int
20a50 20 6f 70 74 69 6f 6e 4d 61 74 63 68 28 63 6f 6e   optionMatch(con
20a60 73 74 20 63 68 61 72 20 2a 7a 53 74 72 2c 20 63  st char *zStr, c
20a70 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 29  onst char *zOpt)
20a80 7b 0a 20 20 69 66 28 20 7a 53 74 72 5b 30 5d 21  {.  if( zStr[0]!
20a90 3d 27 2d 27 20 29 20 72 65 74 75 72 6e 20 30 3b  ='-' ) return 0;
20aa0 0a 20 20 7a 53 74 72 2b 2b 3b 0a 20 20 69 66 28  .  zStr++;.  if(
20ab0 20 7a 53 74 72 5b 30 5d 3d 3d 27 2d 27 20 29 20   zStr[0]=='-' ) 
20ac0 7a 53 74 72 2b 2b 3b 0a 20 20 72 65 74 75 72 6e  zStr++;.  return
20ad0 20 73 74 72 63 6d 70 28 7a 53 74 72 2c 20 7a 4f   strcmp(zStr, zO
20ae0 70 74 29 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  pt)==0;.}../*.**
20af0 20 44 65 6c 65 74 65 20 61 20 66 69 6c 65 2e 0a   Delete a file..
20b00 2a 2f 0a 69 6e 74 20 73 68 65 6c 6c 44 65 6c 65  */.int shellDele
20b10 74 65 46 69 6c 65 28 63 6f 6e 73 74 20 63 68 61  teFile(const cha
20b20 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 29 7b 0a 20  r *zFilename){. 
20b30 20 69 6e 74 20 72 63 3b 0a 23 69 66 64 65 66 20   int rc;.#ifdef 
20b40 5f 57 49 4e 33 32 0a 20 20 77 63 68 61 72 5f 74  _WIN32.  wchar_t
20b50 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33 5f 77 69   *z = sqlite3_wi
20b60 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 75 6e 69 63  n32_utf8_to_unic
20b70 6f 64 65 28 7a 46 69 6c 65 6e 61 6d 65 29 3b 0a  ode(zFilename);.
20b80 20 20 72 63 20 3d 20 5f 77 75 6e 6c 69 6e 6b 28    rc = _wunlink(
20b90 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  z);.  sqlite3_fr
20ba0 65 65 28 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 72  ee(z);.#else.  r
20bb0 63 20 3d 20 75 6e 6c 69 6e 6b 28 7a 46 69 6c 65  c = unlink(zFile
20bc0 6e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20  name);.#endif.  
20bd0 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
20be0 0a 2a 2a 20 54 72 79 20 74 6f 20 64 65 6c 65 74  .** Try to delet
20bf0 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  e the temporary 
20c00 66 69 6c 65 20 28 69 66 20 74 68 65 72 65 20 69  file (if there i
20c10 73 20 6f 6e 65 29 20 61 6e 64 20 66 72 65 65 20  s one) and free 
20c20 74 68 65 0a 2a 2a 20 6d 65 6d 6f 72 79 20 75 73  the.** memory us
20c30 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6e  ed to hold the n
20c40 61 6d 65 20 6f 66 20 74 68 65 20 74 65 6d 70 20  ame of the temp 
20c50 66 69 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  file..*/.static 
20c60 76 6f 69 64 20 63 6c 65 61 72 54 65 6d 70 46 69  void clearTempFi
20c70 6c 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  le(ShellState *p
20c80 29 7b 0a 20 20 69 66 28 20 70 2d 3e 7a 54 65 6d  ){.  if( p->zTem
20c90 70 46 69 6c 65 3d 3d 30 20 29 20 72 65 74 75 72  pFile==0 ) retur
20ca0 6e 3b 0a 20 20 69 66 28 20 70 2d 3e 64 6f 58 64  n;.  if( p->doXd
20cb0 67 4f 70 65 6e 20 29 20 72 65 74 75 72 6e 3b 0a  gOpen ) return;.
20cc0 20 20 69 66 28 20 73 68 65 6c 6c 44 65 6c 65 74    if( shellDelet
20cd0 65 46 69 6c 65 28 70 2d 3e 7a 54 65 6d 70 46 69  eFile(p->zTempFi
20ce0 6c 65 29 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  le) ) return;.  
20cf0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 2d 3e  sqlite3_free(p->
20d00 7a 54 65 6d 70 46 69 6c 65 29 3b 0a 20 20 70 2d  zTempFile);.  p-
20d10 3e 7a 54 65 6d 70 46 69 6c 65 20 3d 20 30 3b 0a  >zTempFile = 0;.
20d20 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20  }../*.** Create 
20d30 61 20 6e 65 77 20 74 65 6d 70 20 66 69 6c 65 20  a new temp file 
20d40 6e 61 6d 65 20 77 69 74 68 20 74 68 65 20 67 69  name with the gi
20d50 76 65 6e 20 73 75 66 66 69 78 2e 0a 2a 2f 0a 73  ven suffix..*/.s
20d60 74 61 74 69 63 20 76 6f 69 64 20 6e 65 77 54 65  tatic void newTe
20d70 6d 70 46 69 6c 65 28 53 68 65 6c 6c 53 74 61 74  mpFile(ShellStat
20d80 65 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  e *p, const char
20d90 20 2a 7a 53 75 66 66 69 78 29 7b 0a 20 20 63 6c   *zSuffix){.  cl
20da0 65 61 72 54 65 6d 70 46 69 6c 65 28 70 29 3b 0a  earTempFile(p);.
20db0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70    sqlite3_free(p
20dc0 2d 3e 7a 54 65 6d 70 46 69 6c 65 29 3b 0a 20 20  ->zTempFile);.  
20dd0 70 2d 3e 7a 54 65 6d 70 46 69 6c 65 20 3d 20 30  p->zTempFile = 0
20de0 3b 0a 20 20 69 66 28 20 70 2d 3e 64 62 20 29 7b  ;.  if( p->db ){
20df0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c  .    sqlite3_fil
20e00 65 5f 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c  e_control(p->db,
20e10 20 30 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c   0, SQLITE_FCNTL
20e20 5f 54 45 4d 50 46 49 4c 45 4e 41 4d 45 2c 20 26  _TEMPFILENAME, &
20e30 70 2d 3e 7a 54 65 6d 70 46 69 6c 65 29 3b 0a 20  p->zTempFile);. 
20e40 20 7d 0a 20 20 69 66 28 20 70 2d 3e 7a 54 65 6d   }.  if( p->zTem
20e50 70 46 69 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  pFile==0 ){.    
20e60 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 72  sqlite3_uint64 r
20e70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61  ;.    sqlite3_ra
20e80 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28  ndomness(sizeof(
20e90 72 29 2c 20 26 72 29 3b 0a 20 20 20 20 70 2d 3e  r), &r);.    p->
20ea0 7a 54 65 6d 70 46 69 6c 65 20 3d 20 73 71 6c 69  zTempFile = sqli
20eb0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 74 65 6d  te3_mprintf("tem
20ec0 70 25 6c 6c 78 2e 25 73 22 2c 20 72 2c 20 7a 53  p%llx.%s", r, zS
20ed0 75 66 66 69 78 29 3b 0a 20 20 7d 65 6c 73 65 7b  uffix);.  }else{
20ee0 0a 20 20 20 20 70 2d 3e 7a 54 65 6d 70 46 69 6c  .    p->zTempFil
20ef0 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e = sqlite3_mpri
20f00 6e 74 66 28 22 25 7a 2e 25 73 22 2c 20 70 2d 3e  ntf("%z.%s", p->
20f10 7a 54 65 6d 70 46 69 6c 65 2c 20 7a 53 75 66 66  zTempFile, zSuff
20f20 69 78 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  ix);.  }.  if( p
20f30 2d 3e 7a 54 65 6d 70 46 69 6c 65 3d 3d 30 20 29  ->zTempFile==0 )
20f40 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
20f50 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f 66  (stderr, "out of
20f60 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20   memory\n");.   
20f70 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 7d 0a   exit(1);.  }.}.
20f80 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6d 70 6c  ../*.** The impl
20f90 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 53 51  ementation of SQ
20fa0 4c 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  L scalar functio
20fb0 6e 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63  n fkey_collate_c
20fc0 6c 61 75 73 65 28 29 2c 20 75 73 65 64 0a 2a 2a  lause(), used.**
20fd0 20 62 79 20 74 68 65 20 22 2e 6c 69 6e 74 20 66   by the ".lint f
20fe0 6b 65 79 2d 69 6e 64 65 78 65 73 22 20 63 6f 6d  key-indexes" com
20ff0 6d 61 6e 64 2e 20 54 68 69 73 20 73 63 61 6c 61  mand. This scala
21000 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6c  r function is al
21010 77 61 79 73 0a 2a 2a 20 63 61 6c 6c 65 64 20 77  ways.** called w
21020 69 74 68 20 66 6f 75 72 20 61 72 67 75 6d 65 6e  ith four argumen
21030 74 73 20 2d 20 74 68 65 20 70 61 72 65 6e 74 20  ts - the parent 
21040 74 61 62 6c 65 20 6e 61 6d 65 2c 20 74 68 65 20  table name, the 
21050 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6e 61  parent column na
21060 6d 65 2c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  me,.** the child
21070 20 74 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20   table name and 
21080 74 68 65 20 63 68 69 6c 64 20 63 6f 6c 75 6d 6e  the child column
21090 20 6e 61 6d 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 66   name..**.**   f
210a0 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75  key_collate_clau
210b0 73 65 28 27 70 61 72 65 6e 74 2d 74 61 62 27 2c  se('parent-tab',
210c0 20 27 70 61 72 65 6e 74 2d 63 6f 6c 27 2c 20 27   'parent-col', '
210d0 63 68 69 6c 64 2d 74 61 62 27 2c 20 27 63 68 69  child-tab', 'chi
210e0 6c 64 2d 63 6f 6c 27 29 0a 2a 2a 0a 2a 2a 20 49  ld-col').**.** I
210f0 66 20 65 69 74 68 65 72 20 6f 66 20 74 68 65 20  f either of the 
21100 6e 61 6d 65 64 20 74 61 62 6c 65 73 20 6f 72 20  named tables or 
21110 63 6f 6c 75 6d 6e 73 20 64 6f 20 6e 6f 74 20 65  columns do not e
21120 78 69 73 74 2c 20 74 68 69 73 20 66 75 6e 63 74  xist, this funct
21130 69 6f 6e 0a 2a 2a 20 72 65 74 75 72 6e 73 20 61  ion.** returns a
21140 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20  n empty string. 
21150 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  An empty string 
21160 69 73 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64  is also returned
21170 20 69 66 20 62 6f 74 68 20 74 61 62 6c 65 73 0a   if both tables.
21180 2a 2a 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 20 65  ** and columns e
21190 78 69 73 74 20 62 75 74 20 68 61 76 65 20 74 68  xist but have th
211a0 65 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20 63  e same default c
211b0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
211c0 65 2e 20 4f 72 2c 0a 2a 2a 20 69 66 20 62 6f 74  e. Or,.** if bot
211d0 68 20 65 78 69 73 74 20 62 75 74 20 74 68 65 20  h exist but the 
211e0 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
211f0 6e 20 73 65 71 75 65 6e 63 65 73 20 61 72 65 20  n sequences are 
21200 64 69 66 66 65 72 65 6e 74 2c 20 74 68 69 73 0a  different, this.
21210 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  ** function retu
21220 72 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 22  rns the string "
21230 20 43 4f 4c 4c 41 54 45 20 3c 70 61 72 65 6e 74   COLLATE <parent
21240 2d 63 6f 6c 6c 61 74 69 6f 6e 3e 22 2c 20 77 68  -collation>", wh
21250 65 72 65 0a 2a 2a 20 3c 70 61 72 65 6e 74 2d 63  ere.** <parent-c
21260 6f 6c 6c 61 74 69 6f 6e 3e 20 69 73 20 74 68 65  ollation> is the
21270 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
21280 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  on sequence of t
21290 68 65 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e  he parent column
212a0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
212b0 20 73 68 65 6c 6c 46 6b 65 79 43 6f 6c 6c 61 74   shellFkeyCollat
212c0 65 43 6c 61 75 73 65 28 0a 20 20 73 71 6c 69 74  eClause(.  sqlit
212d0 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
212e0 2c 0a 20 20 69 6e 74 20 6e 56 61 6c 2c 0a 20 20  ,.  int nVal,.  
212f0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
21300 61 70 56 61 6c 0a 29 7b 0a 20 20 73 71 6c 69 74  apVal.){.  sqlit
21310 65 33 20 2a 64 62 20 3d 20 73 71 6c 69 74 65 33  e3 *db = sqlite3
21320 5f 63 6f 6e 74 65 78 74 5f 64 62 5f 68 61 6e 64  _context_db_hand
21330 6c 65 28 70 43 74 78 29 3b 0a 20 20 63 6f 6e 73  le(pCtx);.  cons
21340 74 20 63 68 61 72 20 2a 7a 50 61 72 65 6e 74 3b  t char *zParent;
21350 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
21360 50 61 72 65 6e 74 43 6f 6c 3b 0a 20 20 63 6f 6e  ParentCol;.  con
21370 73 74 20 63 68 61 72 20 2a 7a 50 61 72 65 6e 74  st char *zParent
21380 53 65 71 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  Seq;.  const cha
21390 72 20 2a 7a 43 68 69 6c 64 3b 0a 20 20 63 6f 6e  r *zChild;.  con
213a0 73 74 20 63 68 61 72 20 2a 7a 43 68 69 6c 64 43  st char *zChildC
213b0 6f 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ol;.  const char
213c0 20 2a 7a 43 68 69 6c 64 53 65 71 20 3d 20 30 3b   *zChildSeq = 0;
213d0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
213e0 74 6f 20 61 76 6f 69 64 20 66 61 6c 73 65 2d 70  to avoid false-p
213f0 6f 73 69 74 69 76 65 20 77 61 72 6e 69 6e 67 20  ositive warning 
21400 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  */.  int rc;..  
21410 61 73 73 65 72 74 28 20 6e 56 61 6c 3d 3d 34 20  assert( nVal==4 
21420 29 3b 0a 20 20 7a 50 61 72 65 6e 74 20 3d 20 28  );.  zParent = (
21430 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
21440 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61  te3_value_text(a
21450 70 56 61 6c 5b 30 5d 29 3b 0a 20 20 7a 50 61 72  pVal[0]);.  zPar
21460 65 6e 74 43 6f 6c 20 3d 20 28 63 6f 6e 73 74 20  entCol = (const 
21470 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
21480 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 31  lue_text(apVal[1
21490 5d 29 3b 0a 20 20 7a 43 68 69 6c 64 20 3d 20 28  ]);.  zChild = (
214a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
214b0 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61  te3_value_text(a
214c0 70 56 61 6c 5b 32 5d 29 3b 0a 20 20 7a 43 68 69  pVal[2]);.  zChi
214d0 6c 64 43 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63  ldCol = (const c
214e0 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
214f0 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 33 5d  ue_text(apVal[3]
21500 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  );..  sqlite3_re
21510 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c 20  sult_text(pCtx, 
21520 22 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53  "", -1, SQLITE_S
21530 54 41 54 49 43 29 3b 0a 20 20 72 63 20 3d 20 73  TATIC);.  rc = s
21540 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
21550 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20  umn_metadata(.  
21560 20 20 20 20 64 62 2c 20 22 6d 61 69 6e 22 2c 20      db, "main", 
21570 7a 50 61 72 65 6e 74 2c 20 7a 50 61 72 65 6e 74  zParent, zParent
21580 43 6f 6c 2c 20 30 2c 20 26 7a 50 61 72 65 6e 74  Col, 0, &zParent
21590 53 65 71 2c 20 30 2c 20 30 2c 20 30 0a 20 20 29  Seq, 0, 0, 0.  )
215a0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
215b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
215c0 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  = sqlite3_table_
215d0 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28  column_metadata(
215e0 0a 20 20 20 20 20 20 20 20 64 62 2c 20 22 6d 61  .        db, "ma
215f0 69 6e 22 2c 20 7a 43 68 69 6c 64 2c 20 7a 43 68  in", zChild, zCh
21600 69 6c 64 43 6f 6c 2c 20 30 2c 20 26 7a 43 68 69  ildCol, 0, &zChi
21610 6c 64 53 65 71 2c 20 30 2c 20 30 2c 20 30 0a 20  ldSeq, 0, 0, 0. 
21620 20 20 20 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28     );.  }..  if(
21630 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
21640 26 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  & sqlite3_stricm
21650 70 28 7a 50 61 72 65 6e 74 53 65 71 2c 20 7a 43  p(zParentSeq, zC
21660 68 69 6c 64 53 65 71 29 20 29 7b 0a 20 20 20 20  hildSeq) ){.    
21670 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69 74 65  char *z = sqlite
21680 33 5f 6d 70 72 69 6e 74 66 28 22 20 43 4f 4c 4c  3_mprintf(" COLL
21690 41 54 45 20 25 73 22 2c 20 7a 50 61 72 65 6e 74  ATE %s", zParent
216a0 53 65 71 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Seq);.    sqlite
216b0 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43  3_result_text(pC
216c0 74 78 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  tx, z, -1, SQLIT
216d0 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
216e0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
216f0 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  );.  }.}.../*.**
21700 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   The implementat
21710 69 6f 6e 20 6f 66 20 64 6f 74 2d 63 6f 6d 6d 61  ion of dot-comma
21720 6e 64 20 22 2e 6c 69 6e 74 20 66 6b 65 79 2d 69  nd ".lint fkey-i
21730 6e 64 65 78 65 73 22 2e 0a 2a 2f 0a 73 74 61 74  ndexes"..*/.stat
21740 69 63 20 69 6e 74 20 6c 69 6e 74 46 6b 65 79 49  ic int lintFkeyI
21750 6e 64 65 78 65 73 28 0a 20 20 53 68 65 6c 6c 53  ndexes(.  ShellS
21760 74 61 74 65 20 2a 70 53 74 61 74 65 2c 20 20 20  tate *pState,   
21770 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
21780 72 65 6e 74 20 73 68 65 6c 6c 20 74 6f 6f 6c 20  rent shell tool 
21790 73 74 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20  state */.  char 
217a0 2a 2a 61 7a 41 72 67 2c 20 20 20 20 20 20 20 20  **azArg,        
217b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
217c0 72 61 79 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ray of arguments
217d0 20 70 61 73 73 65 64 20 74 6f 20 64 6f 74 20 63   passed to dot c
217e0 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
217f0 6e 41 72 67 20 20 20 20 20 20 20 20 20 20 20 20  nArg            
21800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
21810 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
21820 20 69 6e 20 61 7a 41 72 67 5b 5d 20 2a 2f 0a 29   in azArg[] */.)
21830 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  {.  sqlite3 *db 
21840 3d 20 70 53 74 61 74 65 2d 3e 64 62 3b 20 20 20  = pState->db;   
21850 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
21860 68 61 6e 64 6c 65 20 74 6f 20 71 75 65 72 79 20  handle to query 
21870 22 6d 61 69 6e 22 20 64 62 20 6f 66 20 2a 2f 0a  "main" db of */.
21880 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20 70 53    FILE *out = pS
21890 74 61 74 65 2d 3e 6f 75 74 3b 20 20 20 20 20 20  tate->out;      
218a0 20 20 2f 2a 20 53 74 72 65 61 6d 20 74 6f 20 77    /* Stream to w
218b0 72 69 74 65 20 6e 6f 6e 2d 65 72 72 6f 72 20 6f  rite non-error o
218c0 75 74 70 75 74 20 74 6f 20 2a 2f 0a 20 20 69 6e  utput to */.  in
218d0 74 20 62 56 65 72 62 6f 73 65 20 3d 20 30 3b 20  t bVerbose = 0; 
218e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
218f0 20 49 66 20 2d 76 65 72 62 6f 73 65 20 69 73 20   If -verbose is 
21900 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 69 6e 74  present */.  int
21910 20 62 47 72 6f 75 70 42 79 50 61 72 65 6e 74 20   bGroupByParent 
21920 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
21930 49 66 20 2d 67 72 6f 75 70 62 79 70 61 72 65 6e  If -groupbyparen
21940 74 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  t is present */.
21950 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21970 20 20 2f 2a 20 54 6f 20 69 74 65 72 61 74 65 20    /* To iterate 
21980 74 68 72 6f 75 67 68 20 61 7a 41 72 67 5b 5d 20  through azArg[] 
21990 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
219a0 2a 7a 49 6e 64 65 6e 74 20 3d 20 22 22 3b 20 20  *zIndent = "";  
219b0 20 20 20 20 20 2f 2a 20 48 6f 77 20 6d 75 63 68       /* How much
219c0 20 74 6f 20 69 6e 64 65 6e 74 20 43 52 45 41 54   to indent CREAT
219d0 45 20 49 4e 44 45 58 20 62 79 20 2a 2f 0a 20 20  E INDEX by */.  
219e0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
219f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a00 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 2a  /* Return code *
21a10 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  /.  sqlite3_stmt
21a20 20 2a 70 53 71 6c 20 3d 20 30 3b 20 20 20 20 20   *pSql = 0;     
21a30 20 20 20 20 2f 2a 20 43 6f 6d 70 69 6c 65 64 20      /* Compiled 
21a40 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 20 73  version of SQL s
21a50 74 61 74 65 6d 65 6e 74 20 62 65 6c 6f 77 20 2a  tatement below *
21a60 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 54 68 69  /..  /*.  ** Thi
21a70 73 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  s SELECT stateme
21a80 6e 74 20 72 65 74 75 72 6e 73 20 6f 6e 65 20 72  nt returns one r
21a90 6f 77 20 66 6f 72 20 65 61 63 68 20 66 6f 72 65  ow for each fore
21aa0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
21ab0 6e 74 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 73  nt.  ** in the s
21ac0 63 68 65 6d 61 20 6f 66 20 74 68 65 20 6d 61 69  chema of the mai
21ad0 6e 20 64 61 74 61 62 61 73 65 2e 20 54 68 65 20  n database. The 
21ae0 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 61 72  column values ar
21af0 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 30 2e 20  e:.  **.  ** 0. 
21b00 54 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 53  The text of an S
21b10 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 73 69 6d  QL statement sim
21b20 69 6c 61 72 20 74 6f 3a 0a 20 20 2a 2a 0a 20 20  ilar to:.  **.  
21b30 2a 2a 20 20 20 20 20 20 22 45 58 50 4c 41 49 4e  **      "EXPLAIN
21b40 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45   QUERY PLAN SELE
21b50 43 54 20 31 20 46 52 4f 4d 20 63 68 69 6c 64 5f  CT 1 FROM child_
21b60 74 61 62 6c 65 20 57 48 45 52 45 20 63 68 69 6c  table WHERE chil
21b70 64 5f 6b 65 79 3d 3f 22 0a 20 20 2a 2a 0a 20 20  d_key=?".  **.  
21b80 2a 2a 20 20 20 20 54 68 69 73 20 53 45 4c 45 43  **    This SELEC
21b90 54 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  T is similar to 
21ba0 74 68 65 20 6f 6e 65 20 74 68 61 74 20 74 68 65  the one that the
21bb0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6d   foreign keys im
21bc0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 20 20 2a  plementation.  *
21bd0 2a 20 20 20 20 6e 65 65 64 73 20 74 6f 20 72 75  *    needs to ru
21be0 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 20 6f 6e 20  n internally on 
21bf0 63 68 69 6c 64 20 74 61 62 6c 65 73 2e 20 49 66  child tables. If
21c00 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 64   there is an ind
21c10 65 78 20 74 68 61 74 20 63 61 6e 0a 20 20 2a 2a  ex that can.  **
21c20 20 20 20 20 62 65 20 75 73 65 64 20 74 6f 20 6f      be used to o
21c30 70 74 69 6d 69 7a 65 20 74 68 69 73 20 71 75 65  ptimize this que
21c40 72 79 2c 20 74 68 65 6e 20 69 74 20 63 61 6e 20  ry, then it can 
21c50 61 6c 73 6f 20 62 65 20 75 73 65 64 20 62 79 20  also be used by 
21c60 74 68 65 20 46 4b 0a 20 20 2a 2a 20 20 20 20 69  the FK.  **    i
21c70 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
21c80 20 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45 54 45   optimize DELETE
21c90 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
21ca0 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 70 61 72  ments on the par
21cb0 65 6e 74 0a 20 20 2a 2a 20 20 20 20 74 61 62 6c  ent.  **    tabl
21cc0 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 31 2e 20  e..  **.  ** 1. 
21cd0 41 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 20 73  A GLOB pattern s
21ce0 75 69 74 61 62 6c 65 20 66 6f 72 20 73 71 6c 69  uitable for sqli
21cf0 74 65 33 5f 73 74 72 67 6c 6f 62 28 29 2e 20 49  te3_strglob(). I
21d00 66 20 74 68 65 20 70 6c 61 6e 20 6f 75 74 70 75  f the plan outpu
21d10 74 20 62 79 0a 20 20 2a 2a 20 20 20 20 74 68 65  t by.  **    the
21d20 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
21d30 4c 41 4e 20 63 6f 6d 6d 61 6e 64 20 6d 61 74 63  LAN command matc
21d40 68 65 73 20 74 68 69 73 20 70 61 74 74 65 72 6e  hes this pattern
21d50 2c 20 74 68 65 6e 20 74 68 65 20 73 63 68 65 6d  , then the schem
21d60 61 0a 20 20 2a 2a 20 20 20 20 63 6f 6e 74 61 69  a.  **    contai
21d70 6e 73 20 61 6e 20 69 6e 64 65 78 20 74 68 61 74  ns an index that
21d80 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
21d90 6f 70 74 69 6d 69 7a 65 20 74 68 65 20 71 75 65  optimize the que
21da0 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 32 2e  ry..  **.  ** 2.
21db0 20 48 75 6d 61 6e 20 72 65 61 64 61 62 6c 65 20   Human readable 
21dc0 74 65 78 74 20 74 68 61 74 20 64 65 73 63 72 69  text that descri
21dd0 62 65 73 20 74 68 65 20 63 68 69 6c 64 20 74 61  bes the child ta
21de0 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 2e  ble and columns.
21df0 20 65 2e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20   e.g..  **.  ** 
21e00 20 20 20 20 20 20 22 63 68 69 6c 64 5f 74 61 62        "child_tab
21e10 6c 65 28 63 68 69 6c 64 5f 6b 65 79 31 2c 20 63  le(child_key1, c
21e20 68 69 6c 64 5f 6b 65 79 32 29 22 0a 20 20 2a 2a  hild_key2)".  **
21e30 0a 20 20 2a 2a 20 33 2e 20 48 75 6d 61 6e 20 72  .  ** 3. Human r
21e40 65 61 64 61 62 6c 65 20 74 65 78 74 20 74 68 61  eadable text tha
21e50 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
21e60 70 61 72 65 6e 74 20 74 61 62 6c 65 20 61 6e 64  parent table and
21e70 20 63 6f 6c 75 6d 6e 73 2e 20 65 2e 67 2e 0a 20   columns. e.g.. 
21e80 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20 20 22   **.  **       "
21e90 70 61 72 65 6e 74 5f 74 61 62 6c 65 28 70 61 72  parent_table(par
21ea0 65 6e 74 5f 6b 65 79 31 2c 20 70 61 72 65 6e 74  ent_key1, parent
21eb0 5f 6b 65 79 32 29 22 0a 20 20 2a 2a 0a 20 20 2a  _key2)".  **.  *
21ec0 2a 20 34 2e 20 41 20 66 75 6c 6c 20 43 52 45 41  * 4. A full CREA
21ed0 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
21ee0 6e 74 20 66 6f 72 20 61 6e 20 69 6e 64 65 78 20  nt for an index 
21ef0 74 68 61 74 20 63 6f 75 6c 64 20 62 65 20 75 73  that could be us
21f00 65 64 20 74 6f 0a 20 20 2a 2a 20 20 20 20 6f 70  ed to.  **    op
21f10 74 69 6d 69 7a 65 20 44 45 4c 45 54 45 20 6f 72  timize DELETE or
21f20 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
21f30 74 73 20 6f 6e 20 74 68 65 20 70 61 72 65 6e 74  ts on the parent
21f40 20 74 61 62 6c 65 2e 20 65 2e 67 2e 0a 20 20 2a   table. e.g..  *
21f50 2a 0a 20 20 2a 2a 20 20 20 20 20 20 20 22 43 52  *.  **       "CR
21f60 45 41 54 45 20 49 4e 44 45 58 20 63 68 69 6c 64  EATE INDEX child
21f70 5f 74 61 62 6c 65 5f 63 68 69 6c 64 5f 6b 65 79  _table_child_key
21f80 20 4f 4e 20 63 68 69 6c 64 5f 74 61 62 6c 65 28   ON child_table(
21f90 63 68 69 6c 64 5f 6b 65 79 29 22 0a 20 20 2a 2a  child_key)".  **
21fa0 0a 20 20 2a 2a 20 35 2e 20 54 68 65 20 6e 61 6d  .  ** 5. The nam
21fb0 65 20 6f 66 20 74 68 65 20 70 61 72 65 6e 74 20  e of the parent 
21fc0 74 61 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  table..  **.  **
21fd0 20 54 68 65 73 65 20 73 69 78 20 76 61 6c 75 65   These six value
21fe0 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  s are used by th
21ff0 65 20 43 20 6c 6f 67 69 63 20 62 65 6c 6f 77 20  e C logic below 
22000 74 6f 20 67 65 6e 65 72 61 74 65 20 74 68 65 20  to generate the 
22010 72 65 70 6f 72 74 2e 0a 20 20 2a 2f 0a 20 20 63  report..  */.  c
22020 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 20  onst char *zSql 
22030 3d 0a 20 20 22 53 45 4c 45 43 54 20 22 0a 20 20  =.  "SELECT ".  
22040 20 20 22 20 20 20 20 20 27 45 58 50 4c 41 49 4e    "     'EXPLAIN
22050 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45   QUERY PLAN SELE
22060 43 54 20 31 20 46 52 4f 4d 20 27 20 7c 7c 20 71  CT 1 FROM ' || q
22070 75 6f 74 65 28 73 2e 6e 61 6d 65 29 20 7c 7c 20  uote(s.name) || 
22080 27 20 57 48 45 52 45 20 27 22 0a 20 20 20 20 22  ' WHERE '".    "
22090 20 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61    || group_conca
220a0 74 28 71 75 6f 74 65 28 73 2e 6e 61 6d 65 29 20  t(quote(s.name) 
220b0 7c 7c 20 27 2e 27 20 7c 7c 20 71 75 6f 74 65 28  || '.' || quote(
220c0 66 2e 5b 66 72 6f 6d 5d 29 20 7c 7c 20 27 3d 3f  f.[from]) || '=?
220d0 27 20 22 0a 20 20 20 20 22 20 20 7c 7c 20 66 6b  ' ".    "  || fk
220e0 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73  ey_collate_claus
220f0 65 28 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  e(".    "       
22100 66 2e 5b 74 61 62 6c 65 5d 2c 20 43 4f 41 4c 45  f.[table], COALE
22110 53 43 45 28 66 2e 5b 74 6f 5d 2c 20 70 2e 5b 6e  SCE(f.[to], p.[n
22120 61 6d 65 5d 29 2c 20 73 2e 6e 61 6d 65 2c 20 66  ame]), s.name, f
22130 2e 5b 66 72 6f 6d 5d 29 2c 27 20 41 4e 44 20 27  .[from]),' AND '
22140 29 22 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20  )".    ", ".    
22150 22 20 20 20 20 20 27 53 45 41 52 43 48 20 54 41  "     'SEARCH TA
22160 42 4c 45 20 27 20 7c 7c 20 73 2e 6e 61 6d 65 20  BLE ' || s.name 
22170 7c 7c 20 27 20 55 53 49 4e 47 20 43 4f 56 45 52  || ' USING COVER
22180 49 4e 47 20 49 4e 44 45 58 2a 28 27 22 0a 20 20  ING INDEX*('".  
22190 20 20 22 20 20 7c 7c 20 67 72 6f 75 70 5f 63 6f    "  || group_co
221a0 6e 63 61 74 28 27 2a 3d 3f 27 2c 20 27 20 41 4e  ncat('*=?', ' AN
221b0 44 20 27 29 20 7c 7c 20 27 29 27 22 0a 20 20 20  D ') || ')'".   
221c0 20 22 2c 20 22 0a 20 20 20 20 22 20 20 20 20 20   ", ".    "     
221d0 73 2e 6e 61 6d 65 20 20 7c 7c 20 27 28 27 20 7c  s.name  || '(' |
221e0 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 66  | group_concat(f
221f0 2e 5b 66 72 6f 6d 5d 2c 20 20 27 2c 20 27 29 20  .[from],  ', ') 
22200 7c 7c 20 27 29 27 22 0a 20 20 20 20 22 2c 20 22  || ')'".    ", "
22210 0a 20 20 20 20 22 20 20 20 20 20 66 2e 5b 74 61  .    "     f.[ta
22220 62 6c 65 5d 20 7c 7c 20 27 28 27 20 7c 7c 20 67  ble] || '(' || g
22230 72 6f 75 70 5f 63 6f 6e 63 61 74 28 43 4f 41 4c  roup_concat(COAL
22240 45 53 43 45 28 66 2e 5b 74 6f 5d 2c 20 70 2e 5b  ESCE(f.[to], p.[
22250 6e 61 6d 65 5d 29 29 20 7c 7c 20 27 29 27 22 0a  name])) || ')'".
22260 20 20 20 20 22 2c 20 22 0a 20 20 20 20 22 20 20      ", ".    "  
22270 20 20 20 27 43 52 45 41 54 45 20 49 4e 44 45 58     'CREATE INDEX
22280 20 27 20 7c 7c 20 71 75 6f 74 65 28 73 2e 6e 61   ' || quote(s.na
22290 6d 65 20 7c 7c 27 5f 27 7c 7c 20 67 72 6f 75 70  me ||'_'|| group
222a0 5f 63 6f 6e 63 61 74 28 66 2e 5b 66 72 6f 6d 5d  _concat(f.[from]
222b0 2c 20 27 5f 27 29 29 22 0a 20 20 20 20 22 20 20  , '_'))".    "  
222c0 7c 7c 20 27 20 4f 4e 20 27 20 7c 7c 20 71 75 6f  || ' ON ' || quo
222d0 74 65 28 73 2e 6e 61 6d 65 29 20 7c 7c 20 27 28  te(s.name) || '(
222e0 27 22 0a 20 20 20 20 22 20 20 7c 7c 20 67 72 6f  '".    "  || gro
222f0 75 70 5f 63 6f 6e 63 61 74 28 71 75 6f 74 65 28  up_concat(quote(
22300 66 2e 5b 66 72 6f 6d 5d 29 20 7c 7c 22 0a 20 20  f.[from]) ||".  
22310 20 20 22 20 20 20 20 20 20 20 20 66 6b 65 79 5f    "        fkey_
22320 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28 22  collate_clause("
22330 0a 20 20 20 20 22 20 20 20 20 20 20 20 20 20 20  .    "          
22340 66 2e 5b 74 61 62 6c 65 5d 2c 20 43 4f 41 4c 45  f.[table], COALE
22350 53 43 45 28 66 2e 5b 74 6f 5d 2c 20 70 2e 5b 6e  SCE(f.[to], p.[n
22360 61 6d 65 5d 29 2c 20 73 2e 6e 61 6d 65 2c 20 66  ame]), s.name, f
22370 2e 5b 66 72 6f 6d 5d 29 2c 20 27 2c 20 27 29 22  .[from]), ', ')"
22380 0a 20 20 20 20 22 20 20 7c 7c 20 27 29 3b 27 22  .    "  || ');'"
22390 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20 22 20  .    ", ".    " 
223a0 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 20 22 0a      f.[table] ".
223b0 20 20 20 20 22 46 52 4f 4d 20 73 71 6c 69 74 65      "FROM sqlite
223c0 5f 6d 61 73 74 65 72 20 41 53 20 73 2c 20 70 72  _master AS s, pr
223d0 61 67 6d 61 5f 66 6f 72 65 69 67 6e 5f 6b 65 79  agma_foreign_key
223e0 5f 6c 69 73 74 28 73 2e 6e 61 6d 65 29 20 41 53  _list(s.name) AS
223f0 20 66 20 22 0a 20 20 20 20 22 4c 45 46 54 20 4a   f ".    "LEFT J
22400 4f 49 4e 20 70 72 61 67 6d 61 5f 74 61 62 6c 65  OIN pragma_table
22410 5f 69 6e 66 6f 20 41 53 20 70 20 4f 4e 20 28 70  _info AS p ON (p
22420 6b 2d 31 3d 73 65 71 20 41 4e 44 20 70 2e 61 72  k-1=seq AND p.ar
22430 67 3d 66 2e 5b 74 61 62 6c 65 5d 29 20 22 0a 20  g=f.[table]) ". 
22440 20 20 20 22 47 52 4f 55 50 20 42 59 20 73 2e 6e     "GROUP BY s.n
22450 61 6d 65 2c 20 66 2e 69 64 20 22 0a 20 20 20 20  ame, f.id ".    
22460 22 4f 52 44 45 52 20 42 59 20 28 43 41 53 45 20  "ORDER BY (CASE 
22470 57 48 45 4e 20 3f 20 54 48 45 4e 20 66 2e 5b 74  WHEN ? THEN f.[t
22480 61 62 6c 65 5d 20 45 4c 53 45 20 73 2e 6e 61 6d  able] ELSE s.nam
22490 65 20 45 4e 44 29 22 0a 20 20 3b 0a 20 20 63 6f  e END)".  ;.  co
224a0 6e 73 74 20 63 68 61 72 20 2a 7a 47 6c 6f 62 49  nst char *zGlobI
224b0 50 4b 20 3d 20 22 53 45 41 52 43 48 20 54 41 42  PK = "SEARCH TAB
224c0 4c 45 20 2a 20 55 53 49 4e 47 20 49 4e 54 45 47  LE * USING INTEG
224d0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 28  ER PRIMARY KEY (
224e0 72 6f 77 69 64 3d 3f 29 22 3b 0a 0a 20 20 66 6f  rowid=?)";..  fo
224f0 72 28 69 3d 32 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=2; i<nArg; i
22500 2b 2b 29 7b 0a 20 20 20 20 69 6e 74 20 6e 20 3d  ++){.    int n =
22510 20 73 74 72 6c 65 6e 33 30 28 61 7a 41 72 67 5b   strlen30(azArg[
22520 69 5d 29 3b 0a 20 20 20 20 69 66 28 20 6e 3e 31  i]);.    if( n>1
22530 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72 6e   && sqlite3_strn
22540 69 63 6d 70 28 22 2d 76 65 72 62 6f 73 65 22 2c  icmp("-verbose",
22550 20 61 7a 41 72 67 5b 69 5d 2c 20 6e 29 3d 3d 30   azArg[i], n)==0
22560 20 29 7b 0a 20 20 20 20 20 20 62 56 65 72 62 6f   ){.      bVerbo
22570 73 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  se = 1;.    }.  
22580 20 20 65 6c 73 65 20 69 66 28 20 6e 3e 31 20 26    else if( n>1 &
22590 26 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  & sqlite3_strnic
225a0 6d 70 28 22 2d 67 72 6f 75 70 62 79 70 61 72 65  mp("-groupbypare
225b0 6e 74 22 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 6e  nt", azArg[i], n
225c0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 47  )==0 ){.      bG
225d0 72 6f 75 70 42 79 50 61 72 65 6e 74 20 3d 20 31  roupByParent = 1
225e0 3b 0a 20 20 20 20 20 20 7a 49 6e 64 65 6e 74 20  ;.      zIndent 
225f0 3d 20 22 20 20 20 20 22 3b 0a 20 20 20 20 7d 0a  = "    ";.    }.
22600 20 20 20 20 65 6c 73 65 7b 0a 20 20 20 20 20 20      else{.      
22610 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
22620 72 2c 20 22 55 73 61 67 65 3a 20 25 73 20 25 73  r, "Usage: %s %s
22630 20 3f 2d 76 65 72 62 6f 73 65 3f 20 3f 2d 67 72   ?-verbose? ?-gr
22640 6f 75 70 62 79 70 61 72 65 6e 74 3f 5c 6e 22 2c  oupbyparent?\n",
22650 0a 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67  .          azArg
22660 5b 30 5d 2c 20 61 7a 41 72 67 5b 31 5d 0a 20 20  [0], azArg[1].  
22670 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 65 74      );.      ret
22680 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
22690 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
226a0 2a 20 52 65 67 69 73 74 65 72 20 74 68 65 20 66  * Register the f
226b0 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75  key_collate_clau
226c0 73 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  se() SQL functio
226d0 6e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  n */.  rc = sqli
226e0 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
226f0 69 6f 6e 28 64 62 2c 20 22 66 6b 65 79 5f 63 6f  ion(db, "fkey_co
22700 6c 6c 61 74 65 5f 63 6c 61 75 73 65 22 2c 20 34  llate_clause", 4
22710 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 0a 20  , SQLITE_UTF8,. 
22720 20 20 20 20 20 30 2c 20 73 68 65 6c 6c 46 6b 65       0, shellFke
22730 79 43 6f 6c 6c 61 74 65 43 6c 61 75 73 65 2c 20  yCollateClause, 
22740 30 2c 20 30 0a 20 20 29 3b 0a 0a 0a 20 20 69 66  0, 0.  );...  if
22750 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
22760 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
22770 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64  te3_prepare_v2(d
22780 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53  b, zSql, -1, &pS
22790 71 6c 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66  ql, 0);.  }.  if
227a0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
227b0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62  ){.    sqlite3_b
227c0 69 6e 64 5f 69 6e 74 28 70 53 71 6c 2c 20 31 2c  ind_int(pSql, 1,
227d0 20 62 47 72 6f 75 70 42 79 50 61 72 65 6e 74 29   bGroupByParent)
227e0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72 63 3d  ;.  }..  if( rc=
227f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
22800 20 20 69 6e 74 20 72 63 32 3b 0a 20 20 20 20 63    int rc2;.    c
22810 68 61 72 20 2a 7a 50 72 65 76 20 3d 20 30 3b 0a  har *zPrev = 0;.
22820 20 20 20 20 77 68 69 6c 65 28 20 53 51 4c 49 54      while( SQLIT
22830 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f 73  E_ROW==sqlite3_s
22840 74 65 70 28 70 53 71 6c 29 20 29 7b 0a 20 20 20  tep(pSql) ){.   
22850 20 20 20 69 6e 74 20 72 65 73 20 3d 20 2d 31 3b     int res = -1;
22860 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
22870 74 6d 74 20 2a 70 45 78 70 6c 61 69 6e 20 3d 20  tmt *pExplain = 
22880 30 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  0;.      const c
22890 68 61 72 20 2a 7a 45 51 50 20 3d 20 28 63 6f 6e  har *zEQP = (con
228a0 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
228b0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71  _column_text(pSq
228c0 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 63 6f 6e  l, 0);.      con
228d0 73 74 20 63 68 61 72 20 2a 7a 47 6c 6f 62 20 3d  st char *zGlob =
228e0 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
228f0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
22900 74 28 70 53 71 6c 2c 20 31 29 3b 0a 20 20 20 20  t(pSql, 1);.    
22910 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
22920 72 6f 6d 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  rom = (const cha
22930 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
22940 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 32 29 3b  n_text(pSql, 2);
22950 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
22960 72 20 2a 7a 54 61 72 67 65 74 20 3d 20 28 63 6f  r *zTarget = (co
22970 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
22980 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
22990 71 6c 2c 20 33 29 3b 0a 20 20 20 20 20 20 63 6f  ql, 3);.      co
229a0 6e 73 74 20 63 68 61 72 20 2a 7a 43 49 20 3d 20  nst char *zCI = 
229b0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
229c0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
229d0 28 70 53 71 6c 2c 20 34 29 3b 0a 20 20 20 20 20  (pSql, 4);.     
229e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61   const char *zPa
229f0 72 65 6e 74 20 3d 20 28 63 6f 6e 73 74 20 63 68  rent = (const ch
22a00 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
22a10 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 35 29  mn_text(pSql, 5)
22a20 3b 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ;..      rc = sq
22a30 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
22a40 28 64 62 2c 20 7a 45 51 50 2c 20 2d 31 2c 20 26  (db, zEQP, -1, &
22a50 70 45 78 70 6c 61 69 6e 2c 20 30 29 3b 0a 20 20  pExplain, 0);.  
22a60 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
22a70 54 45 5f 4f 4b 20 29 20 62 72 65 61 6b 3b 0a 20  TE_OK ) break;. 
22a80 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f       if( SQLITE_
22a90 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f 73 74 65  ROW==sqlite3_ste
22aa0 70 28 70 45 78 70 6c 61 69 6e 29 20 29 7b 0a 20  p(pExplain) ){. 
22ab0 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
22ac0 72 20 2a 7a 50 6c 61 6e 20 3d 20 28 63 6f 6e 73  r *zPlan = (cons
22ad0 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
22ae0 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 45 78 70  column_text(pExp
22af0 6c 61 69 6e 2c 20 33 29 3b 0a 20 20 20 20 20 20  lain, 3);.      
22b00 20 20 72 65 73 20 3d 20 28 0a 20 20 20 20 20 20    res = (.      
22b10 20 20 20 20 20 20 20 20 30 3d 3d 73 71 6c 69 74          0==sqlit
22b20 65 33 5f 73 74 72 67 6c 6f 62 28 7a 47 6c 6f 62  e3_strglob(zGlob
22b30 2c 20 7a 50 6c 61 6e 29 0a 20 20 20 20 20 20 20  , zPlan).       
22b40 20 20 20 20 7c 7c 20 30 3d 3d 73 71 6c 69 74 65      || 0==sqlite
22b50 33 5f 73 74 72 67 6c 6f 62 28 7a 47 6c 6f 62 49  3_strglob(zGlobI
22b60 50 4b 2c 20 7a 50 6c 61 6e 29 0a 20 20 20 20 20  PK, zPlan).     
22b70 20 20 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20     );.      }.  
22b80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22b90 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78 70 6c 61  _finalize(pExpla
22ba0 69 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  in);.      if( r
22bb0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 62  c!=SQLITE_OK ) b
22bc0 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 69 66 28  reak;..      if(
22bd0 20 72 65 73 3c 30 20 29 7b 0a 20 20 20 20 20 20   res<0 ){.      
22be0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
22bf0 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 69 6e 74  err, "Error: int
22c00 65 72 6e 61 6c 20 65 72 72 6f 72 22 29 3b 0a 20  ernal error");. 
22c10 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
22c20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
22c30 20 20 20 69 66 28 20 62 47 72 6f 75 70 42 79 50     if( bGroupByP
22c40 61 72 65 6e 74 0a 20 20 20 20 20 20 20 20 26 26  arent.        &&
22c50 20 28 62 56 65 72 62 6f 73 65 20 7c 7c 20 72 65   (bVerbose || re
22c60 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 26 26  s==0).        &&
22c70 20 28 7a 50 72 65 76 3d 3d 30 20 7c 7c 20 73 71   (zPrev==0 || sq
22c80 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 50  lite3_stricmp(zP
22c90 61 72 65 6e 74 2c 20 7a 50 72 65 76 29 29 0a 20  arent, zPrev)). 
22ca0 20 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20         ){.      
22cb0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
22cc0 75 74 2c 20 22 2d 2d 20 50 61 72 65 6e 74 20 74  ut, "-- Parent t
22cd0 61 62 6c 65 20 25 73 5c 6e 22 2c 20 7a 50 61 72  able %s\n", zPar
22ce0 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ent);.          
22cf0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 50 72  sqlite3_free(zPr
22d00 65 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7a  ev);.          z
22d10 50 72 65 76 20 3d 20 73 71 6c 69 74 65 33 5f 6d  Prev = sqlite3_m
22d20 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 50 61  printf("%s", zPa
22d30 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  rent);.        }
22d40 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65  ..        if( re
22d50 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
22d60 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
22d70 2c 20 22 25 73 25 73 20 2d 2d 3e 20 25 73 5c 6e  , "%s%s --> %s\n
22d80 22 2c 20 7a 49 6e 64 65 6e 74 2c 20 7a 43 49 2c  ", zIndent, zCI,
22d90 20 7a 54 61 72 67 65 74 29 3b 0a 20 20 20 20 20   zTarget);.     
22da0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 62 56 65     }else if( bVe
22db0 72 62 6f 73 65 20 29 7b 0a 20 20 20 20 20 20 20  rbose ){.       
22dc0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
22dd0 74 2c 20 22 25 73 2f 2a 20 6e 6f 20 65 78 74 72  t, "%s/* no extr
22de0 61 20 69 6e 64 65 78 65 73 20 72 65 71 75 69 72  a indexes requir
22df0 65 64 20 66 6f 72 20 25 73 20 2d 3e 20 25 73 20  ed for %s -> %s 
22e00 2a 2f 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  */\n",.         
22e10 20 20 20 20 20 7a 49 6e 64 65 6e 74 2c 20 7a 46       zIndent, zF
22e20 72 6f 6d 2c 20 7a 54 61 72 67 65 74 0a 20 20 20  rom, zTarget.   
22e30 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20         );.      
22e40 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
22e50 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  }.    sqlite3_fr
22e60 65 65 28 7a 50 72 65 76 29 3b 0a 0a 20 20 20 20  ee(zPrev);..    
22e70 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
22e80 4b 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  K ){.      raw_p
22e90 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25  rintf(stderr, "%
22ea0 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72  s\n", sqlite3_er
22eb0 72 6d 73 67 28 64 62 29 29 3b 0a 20 20 20 20 7d  rmsg(db));.    }
22ec0 0a 0a 20 20 20 20 72 63 32 20 3d 20 73 71 6c 69  ..    rc2 = sqli
22ed0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 71  te3_finalize(pSq
22ee0 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  l);.    if( rc==
22ef0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 32  SQLITE_OK && rc2
22f00 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
22f10 20 20 20 20 20 72 63 20 3d 20 72 63 32 3b 0a 20       rc = rc2;. 
22f20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
22f30 73 74 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20  stderr, "%s\n", 
22f40 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64  sqlite3_errmsg(d
22f50 62 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  b));.    }.  }el
22f60 73 65 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e  se{.    raw_prin
22f70 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 5c 6e  tf(stderr, "%s\n
22f80 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
22f90 67 28 64 62 29 29 3b 0a 20 20 7d 0a 0a 20 20 72  g(db));.  }..  r
22fa0 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
22fb0 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** Implementatio
22fc0 6e 20 6f 66 20 22 2e 6c 69 6e 74 22 20 64 6f 74  n of ".lint" dot
22fd0 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 73 74 61   command..*/.sta
22fe0 74 69 63 20 69 6e 74 20 6c 69 6e 74 44 6f 74 43  tic int lintDotC
22ff0 6f 6d 6d 61 6e 64 28 0a 20 20 53 68 65 6c 6c 53  ommand(.  ShellS
23000 74 61 74 65 20 2a 70 53 74 61 74 65 2c 20 20 20  tate *pState,   
23010 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
23020 72 65 6e 74 20 73 68 65 6c 6c 20 74 6f 6f 6c 20  rent shell tool 
23030 73 74 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20  state */.  char 
23040 2a 2a 61 7a 41 72 67 2c 20 20 20 20 20 20 20 20  **azArg,        
23050 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
23060 72 61 79 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ray of arguments
23070 20 70 61 73 73 65 64 20 74 6f 20 64 6f 74 20 63   passed to dot c
23080 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
23090 6e 41 72 67 20 20 20 20 20 20 20 20 20 20 20 20  nArg            
230a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
230b0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
230c0 20 69 6e 20 61 7a 41 72 67 5b 5d 20 2a 2f 0a 29   in azArg[] */.)
230d0 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 6e 20 3d  {.  int n;.  n =
230e0 20 28 6e 41 72 67 3e 3d 32 20 3f 20 73 74 72 6c   (nArg>=2 ? strl
230f0 65 6e 33 30 28 61 7a 41 72 67 5b 31 5d 29 20 3a  en30(azArg[1]) :
23100 20 30 29 3b 0a 20 20 69 66 28 20 6e 3c 31 20 7c   0);.  if( n<1 |
23110 7c 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  | sqlite3_strnic
23120 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20 22 66 6b  mp(azArg[1], "fk
23130 65 79 2d 69 6e 64 65 78 65 73 22 2c 20 6e 29 20  ey-indexes", n) 
23140 29 20 67 6f 74 6f 20 75 73 61 67 65 3b 0a 20 20  ) goto usage;.  
23150 72 65 74 75 72 6e 20 6c 69 6e 74 46 6b 65 79 49  return lintFkeyI
23160 6e 64 65 78 65 73 28 70 53 74 61 74 65 2c 20 61  ndexes(pState, a
23170 7a 41 72 67 2c 20 6e 41 72 67 29 3b 0a 0a 20 75  zArg, nArg);.. u
23180 73 61 67 65 3a 0a 20 20 72 61 77 5f 70 72 69 6e  sage:.  raw_prin
23190 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
231a0 65 20 25 73 20 73 75 62 2d 63 6f 6d 6d 61 6e 64  e %s sub-command
231b0 20 3f 73 77 69 74 63 68 65 73 2e 2e 2e 3f 5c 6e   ?switches...?\n
231c0 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20  ", azArg[0]);.  
231d0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
231e0 72 2c 20 22 57 68 65 72 65 20 73 75 62 2d 63 6f  r, "Where sub-co
231f0 6d 6d 61 6e 64 73 20 61 72 65 3a 5c 6e 22 29 3b  mmands are:\n");
23200 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74  .  raw_printf(st
23210 64 65 72 72 2c 20 22 20 20 20 20 66 6b 65 79 2d  derr, "    fkey-
23220 69 6e 64 65 78 65 73 5c 6e 22 29 3b 0a 20 20 72  indexes\n");.  r
23230 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
23240 4f 52 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69  OR;.}..#if !defi
23250 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
23260 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26  VIRTUALTABLE) &&
23270 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
23280 48 41 56 45 5f 5a 4c 49 42 29 0a 2f 2a 2a 2a 2a  HAVE_ZLIB)./****
23290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
232a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
232b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
232c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
232d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
232e0 20 54 68 65 20 22 2e 61 72 63 68 69 76 65 22 20   The ".archive" 
232f0 6f 72 20 22 2e 61 72 22 20 63 6f 6d 6d 61 6e 64  or ".ar" command
23300 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
23310 20 73 68 65 6c 6c 50 72 65 70 61 72 65 28 0a 20   shellPrepare(. 
23320 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20   sqlite3 *db, . 
23330 20 69 6e 74 20 2a 70 52 63 2c 20 0a 20 20 63 6f   int *pRc, .  co
23340 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20  nst char *zSql, 
23350 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
23360 2a 2a 70 70 53 74 6d 74 0a 29 7b 0a 20 20 2a 70  **ppStmt.){.  *p
23370 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 69 66 28  pStmt = 0;.  if(
23380 20 2a 70 52 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b   *pRc==SQLITE_OK
23390 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63 20 3d   ){.    int rc =
233a0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
233b0 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c 20 2d 31  _v2(db, zSql, -1
233c0 2c 20 70 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20  , ppStmt, 0);.  
233d0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
233e0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 61 77  _OK ){.      raw
233f0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
23400 22 73 71 6c 20 65 72 72 6f 72 3a 20 25 73 20 28  "sql error: %s (
23410 25 64 29 5c 6e 22 2c 20 0a 20 20 20 20 20 20 20  %d)\n", .       
23420 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
23430 67 28 64 62 29 2c 20 73 71 6c 69 74 65 33 5f 65  g(db), sqlite3_e
23440 72 72 63 6f 64 65 28 64 62 29 0a 20 20 20 20 20  rrcode(db).     
23450 20 29 3b 0a 20 20 20 20 20 20 2a 70 52 63 20 3d   );.      *pRc =
23460 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d   rc;.    }.  }.}
23470 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 68  ..static void sh
23480 65 6c 6c 50 72 65 70 61 72 65 50 72 69 6e 74 66  ellPreparePrintf
23490 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
234a0 20 0a 20 20 69 6e 74 20 2a 70 52 63 2c 20 0a 20   .  int *pRc, . 
234b0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a   sqlite3_stmt **
234c0 70 70 53 74 6d 74 2c 0a 20 20 63 6f 6e 73 74 20  ppStmt,.  const 
234d0 63 68 61 72 20 2a 7a 46 6d 74 2c 20 0a 20 20 2e  char *zFmt, .  .
234e0 2e 2e 0a 29 7b 0a 20 20 2a 70 70 53 74 6d 74 20  ...){.  *ppStmt 
234f0 3d 20 30 3b 0a 20 20 69 66 28 20 2a 70 52 63 3d  = 0;.  if( *pRc=
23500 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
23510 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20    va_list ap;.  
23520 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20 76    char *z;.    v
23530 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6d 74  a_start(ap, zFmt
23540 29 3b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  );.    z = sqlit
23550 65 33 5f 76 6d 70 72 69 6e 74 66 28 7a 46 6d 74  e3_vmprintf(zFmt
23560 2c 20 61 70 29 3b 0a 20 20 20 20 69 66 28 20 7a  , ap);.    if( z
23570 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2a 70 52  ==0 ){.      *pR
23580 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
23590 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
235a0 20 20 20 73 68 65 6c 6c 50 72 65 70 61 72 65 28     shellPrepare(
235b0 64 62 2c 20 70 52 63 2c 20 7a 2c 20 70 70 53 74  db, pRc, z, ppSt
235c0 6d 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  mt);.      sqlit
235d0 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 20 20  e3_free(z);.    
235e0 7d 0a 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 20  }.  }.}..static 
235f0 76 6f 69 64 20 73 68 65 6c 6c 46 69 6e 61 6c 69  void shellFinali
23600 7a 65 28 0a 20 20 69 6e 74 20 2a 70 52 63 2c 20  ze(.  int *pRc, 
23610 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
23620 2a 70 53 74 6d 74 0a 29 7b 0a 20 20 69 66 28 20  *pStmt.){.  if( 
23630 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 73 71 6c  pStmt ){.    sql
23640 69 74 65 33 20 2a 64 62 20 3d 20 73 71 6c 69 74  ite3 *db = sqlit
23650 65 33 5f 64 62 5f 68 61 6e 64 6c 65 28 70 53 74  e3_db_handle(pSt
23660 6d 74 29 3b 0a 20 20 20 20 69 6e 74 20 72 63 20  mt);.    int rc 
23670 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
23680 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 69  ze(pStmt);.    i
23690 66 28 20 2a 70 52 63 3d 3d 53 51 4c 49 54 45 5f  f( *pRc==SQLITE_
236a0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  OK ){.      if( 
236b0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
236c0 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
236d0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 51 4c  ntf(stderr, "SQL
236e0 20 65 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73   error: %s\n", s
236f0 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
23700 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
23710 20 20 2a 70 52 63 20 3d 20 72 63 3b 0a 20 20 20    *pRc = rc;.   
23720 20 7d 0a 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63   }.  }.}..static
23730 20 76 6f 69 64 20 73 68 65 6c 6c 52 65 73 65 74   void shellReset
23740 28 0a 20 20 69 6e 74 20 2a 70 52 63 2c 20 0a 20  (.  int *pRc, . 
23750 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
23760 53 74 6d 74 0a 29 7b 0a 20 20 69 6e 74 20 72 63  Stmt.){.  int rc
23770 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74   = sqlite3_reset
23780 28 70 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 2a  (pStmt);.  if( *
23790 70 52 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  pRc==SQLITE_OK )
237a0 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  {.    if( rc!=SQ
237b0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
237c0 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 73   sqlite3 *db = s
237d0 71 6c 69 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65  qlite3_db_handle
237e0 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 72  (pStmt);.      r
237f0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
23800 2c 20 22 53 51 4c 20 65 72 72 6f 72 3a 20 25 73  , "SQL error: %s
23810 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  \n", sqlite3_err
23820 6d 73 67 28 64 62 29 29 3b 0a 20 20 20 20 7d 0a  msg(db));.    }.
23830 20 20 20 20 2a 70 52 63 20 3d 20 72 63 3b 0a 20      *pRc = rc;. 
23840 20 7d 0a 7d 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63   }.}./*.** Struc
23850 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 69 6e  ture representin
23860 67 20 61 20 73 69 6e 67 6c 65 20 22 2e 61 72 22  g a single ".ar"
23870 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 74 79 70   command..*/.typ
23880 65 64 65 66 20 73 74 72 75 63 74 20 41 72 43 6f  edef struct ArCo
23890 6d 6d 61 6e 64 20 41 72 43 6f 6d 6d 61 6e 64 3b  mmand ArCommand;
238a0 0a 73 74 72 75 63 74 20 41 72 43 6f 6d 6d 61 6e  .struct ArComman
238b0 64 20 7b 0a 20 20 75 38 20 65 43 6d 64 3b 20 20  d {.  u8 eCmd;  
238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238d0 20 20 20 20 20 20 2f 2a 20 41 6e 20 41 52 5f 43        /* An AR_C
238e0 4d 44 5f 2a 20 76 61 6c 75 65 20 2a 2f 0a 20 20  MD_* value */.  
238f0 75 38 20 62 56 65 72 62 6f 73 65 3b 20 20 20 20  u8 bVerbose;    
23900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23910 2f 2a 20 54 72 75 65 20 69 66 20 2d 2d 76 65 72  /* True if --ver
23920 62 6f 73 65 20 2a 2f 0a 20 20 75 38 20 62 5a 69  bose */.  u8 bZi
23930 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
23940 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
23950 65 20 69 66 20 74 68 65 20 61 72 63 68 69 76 65  e if the archive
23960 20 69 73 20 61 20 5a 49 50 20 2a 2f 0a 20 20 75   is a ZIP */.  u
23970 38 20 62 44 72 79 52 75 6e 3b 20 20 20 20 20 20  8 bDryRun;      
23980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23990 2a 20 54 72 75 65 20 69 66 20 2d 2d 64 72 79 2d  * True if --dry-
239a0 72 75 6e 20 2a 2f 0a 20 20 75 38 20 62 41 70 70  run */.  u8 bApp
239b0 65 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  end;            
239c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
239d0 20 69 66 20 2d 2d 61 70 70 65 6e 64 20 2a 2f 0a   if --append */.
239e0 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20    int nArg;     
239f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
23a10 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73  ommand arguments
23a20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 72 63   */.  char *zSrc
23a30 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
23a40 20 20 20 20 20 20 2f 2a 20 22 73 71 6c 61 72 22        /* "sqlar"
23a50 2c 20 22 7a 69 70 66 69 6c 65 28 24 66 69 6c 65  , "zipfile($file
23a60 29 22 20 6f 72 20 22 7a 69 70 22 20 2a 2f 0a 20  )" or "zip" */. 
23a70 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
23a80 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
23a90 20 2f 2a 20 2d 2d 66 69 6c 65 20 61 72 67 75 6d   /* --file argum
23aa0 65 6e 74 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  ent, or NULL */.
23ab0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
23ac0 69 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ir;             
23ad0 20 20 2f 2a 20 2d 2d 64 69 72 65 63 74 6f 72 79    /* --directory
23ae0 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 20 4e 55   argument, or NU
23af0 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  LL */.  char **a
23b00 7a 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  zArg;           
23b10 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
23b20 20 6f 66 20 63 6f 6d 6d 61 6e 64 20 61 72 67 75   of command argu
23b30 6d 65 6e 74 73 20 2a 2f 0a 20 20 53 68 65 6c 6c  ments */.  Shell
23b40 53 74 61 74 65 20 2a 70 3b 20 20 20 20 20 20 20  State *p;       
23b50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 68             /* Sh
23b60 65 6c 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20 73  ell state */.  s
23b70 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
23b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23b90 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 74 61  * Database conta
23ba0 69 6e 69 6e 67 20 74 68 65 20 61 72 63 68 69 76  ining the archiv
23bb0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  e */.};../*.** P
23bc0 72 69 6e 74 20 61 20 75 73 61 67 65 20 6d 65 73  rint a usage mes
23bd0 73 61 67 65 20 66 6f 72 20 74 68 65 20 2e 61 72  sage for the .ar
23be0 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 73 74 64 65   command to stde
23bf0 72 72 20 61 6e 64 20 72 65 74 75 72 6e 20 53 51  rr and return SQ
23c00 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2f 0a 73  LITE_ERROR..*/.s
23c10 74 61 74 69 63 20 69 6e 74 20 61 72 55 73 61 67  tatic int arUsag
23c20 65 28 46 49 4c 45 20 2a 66 29 7b 0a 20 20 72 61  e(FILE *f){.  ra
23c30 77 5f 70 72 69 6e 74 66 28 66 2c 0a 22 5c 6e 22  w_printf(f,."\n"
23c40 0a 22 55 73 61 67 65 3a 20 2e 61 72 20 5b 4f 50  ."Usage: .ar [OP
23c50 54 49 4f 4e 2e 2e 2e 5d 20 5b 46 49 4c 45 2e 2e  TION...] [FILE..
23c60 2e 5d 5c 6e 22 0a 22 54 68 65 20 2e 61 72 20 63  .]\n"."The .ar c
23c70 6f 6d 6d 61 6e 64 20 6d 61 6e 61 67 65 73 20 73  ommand manages s
23c80 71 6c 61 72 20 61 72 63 68 69 76 65 73 2e 5c 6e  qlar archives.\n
23c90 22 0a 22 5c 6e 22 0a 22 45 78 61 6d 70 6c 65 73  "."\n"."Examples
23ca0 3a 5c 6e 22 0a 22 20 20 2e 61 72 20 2d 63 66 20  :\n"."  .ar -cf 
23cb0 61 72 63 68 69 76 65 2e 73 61 72 20 66 6f 6f 20  archive.sar foo 
23cc0 62 61 72 20 20 20 20 23 20 43 72 65 61 74 65 20  bar    # Create 
23cd0 61 72 63 68 69 76 65 2e 73 61 72 20 66 72 6f 6d  archive.sar from
23ce0 20 66 69 6c 65 73 20 66 6f 6f 20 61 6e 64 20 62   files foo and b
23cf0 61 72 5c 6e 22 0a 22 20 20 2e 61 72 20 2d 74 66  ar\n"."  .ar -tf
23d00 20 61 72 63 68 69 76 65 2e 73 61 72 20 20 20 20   archive.sar    
23d10 20 20 20 20 20 20 20 20 23 20 4c 69 73 74 20 6d          # List m
23d20 65 6d 62 65 72 73 20 6f 66 20 61 72 63 68 69 76  embers of archiv
23d30 65 2e 73 61 72 5c 6e 22 0a 22 20 20 2e 61 72 20  e.sar\n"."  .ar 
23d40 2d 78 76 66 20 61 72 63 68 69 76 65 2e 73 61 72  -xvf archive.sar
23d50 20 20 20 20 20 20 20 20 20 20 20 23 20 56 65 72             # Ver
23d60 62 6f 73 65 6c 79 20 65 78 74 72 61 63 74 20 66  bosely extract f
23d70 69 6c 65 73 20 66 72 6f 6d 20 61 72 63 68 69 76  iles from archiv
23d80 65 2e 73 61 72 5c 6e 22 0a 22 5c 6e 22 0a 22 45  e.sar\n"."\n"."E
23d90 61 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ach command line
23da0 20 6d 75 73 74 20 66 65 61 74 75 72 65 20 65 78   must feature ex
23db0 61 63 74 6c 79 20 6f 6e 65 20 63 6f 6d 6d 61 6e  actly one comman
23dc0 64 20 6f 70 74 69 6f 6e 3a 5c 6e 22 0a 22 20 20  d option:\n"."  
23dd0 2d 63 2c 20 2d 2d 63 72 65 61 74 65 20 20 20 20  -c, --create    
23de0 20 20 20 20 20 20 20 20 20 20 20 43 72 65 61 74             Creat
23df0 65 20 61 20 6e 65 77 20 61 72 63 68 69 76 65 5c  e a new archive\
23e00 6e 22 0a 22 20 20 2d 75 2c 20 2d 2d 75 70 64 61  n"."  -u, --upda
23e10 74 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  te              
23e20 20 55 70 64 61 74 65 20 6f 72 20 61 64 64 20 66   Update or add f
23e30 69 6c 65 73 20 74 6f 20 61 6e 20 65 78 69 73 74  iles to an exist
23e40 69 6e 67 20 61 72 63 68 69 76 65 5c 6e 22 0a 22  ing archive\n"."
23e50 20 20 2d 74 2c 20 2d 2d 6c 69 73 74 20 20 20 20    -t, --list    
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 73               Lis
23e70 74 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 72  t contents of ar
23e80 63 68 69 76 65 5c 6e 22 0a 22 20 20 2d 78 2c 20  chive\n"."  -x, 
23e90 2d 2d 65 78 74 72 61 63 74 20 20 20 20 20 20 20  --extract       
23ea0 20 20 20 20 20 20 20 45 78 74 72 61 63 74 20 66         Extract f
23eb0 69 6c 65 73 20 66 72 6f 6d 20 61 72 63 68 69 76  iles from archiv
23ec0 65 5c 6e 22 0a 22 5c 6e 22 0a 22 41 6e 64 20 7a  e\n"."\n"."And z
23ed0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69  ero or more opti
23ee0 6f 6e 61 6c 20 6f 70 74 69 6f 6e 73 3a 5c 6e 22  onal options:\n"
23ef0 0a 22 20 20 2d 76 2c 20 2d 2d 76 65 72 62 6f 73  ."  -v, --verbos
23f00 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50  e              P
23f10 72 69 6e 74 20 65 61 63 68 20 66 69 6c 65 6e 61  rint each filena
23f20 6d 65 20 61 73 20 69 74 20 69 73 20 70 72 6f 63  me as it is proc
23f30 65 73 73 65 64 5c 6e 22 0a 22 20 20 2d 66 20 46  essed\n"."  -f F
23f40 49 4c 45 2c 20 2d 2d 66 69 6c 65 20 46 49 4c 45  ILE, --file FILE
23f50 20 20 20 20 20 20 20 4f 70 65 72 61 74 65 20 6f         Operate o
23f60 6e 20 61 72 63 68 69 76 65 20 46 49 4c 45 20 28  n archive FILE (
23f70 64 65 66 61 75 6c 74 20 69 73 20 63 75 72 72 65  default is curre
23f80 6e 74 20 64 62 29 5c 6e 22 0a 22 20 20 2d 61 20  nt db)\n"."  -a 
23f90 46 49 4c 45 2c 20 2d 2d 61 70 70 65 6e 64 20 46  FILE, --append F
23fa0 49 4c 45 20 20 20 20 20 4f 70 65 72 61 74 65 20  ILE     Operate 
23fb0 6f 6e 20 46 49 4c 45 20 6f 70 65 6e 65 64 20 75  on FILE opened u
23fc0 73 69 6e 67 20 74 68 65 20 61 70 6e 64 76 66 73  sing the apndvfs
23fd0 20 56 46 53 5c 6e 22 0a 22 20 20 2d 43 20 44 49   VFS\n"."  -C DI
23fe0 52 2c 20 2d 2d 64 69 72 65 63 74 6f 72 79 20 44  R, --directory D
23ff0 49 52 20 20 20 20 43 68 61 6e 67 65 20 74 6f 20  IR    Change to 
24000 64 69 72 65 63 74 6f 72 79 20 44 49 52 20 74 6f  directory DIR to
24010 20 72 65 61 64 2f 65 78 74 72 61 63 74 20 66 69   read/extract fi
24020 6c 65 73 5c 6e 22 0a 22 20 20 2d 6e 2c 20 2d 2d  les\n"."  -n, --
24030 64 72 79 72 75 6e 20 20 20 20 20 20 20 20 20 20  dryrun          
24040 20 20 20 20 20 53 68 6f 77 20 74 68 65 20 53 51       Show the SQ
24050 4c 20 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76  L that would hav
24060 65 20 6f 63 63 75 72 72 65 64 5c 6e 22 0a 22 5c  e occurred\n"."\
24070 6e 22 0a 22 53 65 65 20 61 6c 73 6f 3a 20 68 74  n"."See also: ht
24080 74 70 3a 2f 2f 73 71 6c 69 74 65 2e 6f 72 67 2f  tp://sqlite.org/
24090 63 6c 69 2e 68 74 6d 6c 23 73 71 6c 61 72 5f 61  cli.html#sqlar_a
240a0 72 63 68 69 76 65 5f 73 75 70 70 6f 72 74 5c 6e  rchive_support\n
240b0 22 0a 22 5c 6e 22 0a 29 3b 0a 20 20 72 65 74 75  "."\n".);.  retu
240c0 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b  rn SQLITE_ERROR;
240d0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  .}../*.** Print 
240e0 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
240f0 20 66 6f 72 20 74 68 65 20 2e 61 72 20 63 6f 6d   for the .ar com
24100 6d 61 6e 64 20 74 6f 20 73 74 64 65 72 72 20 61  mand to stderr a
24110 6e 64 20 72 65 74 75 72 6e 20 0a 2a 2a 20 53 51  nd return .** SQ
24120 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2f 0a 73  LITE_ERROR..*/.s
24130 74 61 74 69 63 20 69 6e 74 20 61 72 45 72 72 6f  tatic int arErro
24140 72 4d 73 67 28 63 6f 6e 73 74 20 63 68 61 72 20  rMsg(const char 
24150 2a 7a 46 6d 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76  *zFmt, ...){.  v
24160 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63 68 61  a_list ap;.  cha
24170 72 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61 72 74  r *z;.  va_start
24180 28 61 70 2c 20 7a 46 6d 74 29 3b 0a 20 20 7a 20  (ap, zFmt);.  z 
24190 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e  = sqlite3_vmprin
241a0 74 66 28 7a 46 6d 74 2c 20 61 70 29 3b 0a 20 20  tf(zFmt, ap);.  
241b0 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 72 61  va_end(ap);.  ra
241c0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
241d0 20 22 45 72 72 6f 72 3a 20 25 73 20 28 74 72 79   "Error: %s (try
241e0 20 5c 22 2e 61 72 20 2d 2d 68 65 6c 70 5c 22 29   \".ar --help\")
241f0 5c 6e 22 2c 20 7a 29 3b 0a 20 20 73 71 6c 69 74  \n", z);.  sqlit
24200 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
24210 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
24220 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 56 61 6c 75  R;.}../*.** Valu
24230 65 73 20 66 6f 72 20 41 72 43 6f 6d 6d 61 6e 64  es for ArCommand
24240 2e 65 43 6d 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  .eCmd..*/.#defin
24250 65 20 41 52 5f 43 4d 44 5f 43 52 45 41 54 45 20  e AR_CMD_CREATE 
24260 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20        1.#define 
24270 41 52 5f 43 4d 44 5f 45 58 54 52 41 43 54 20 20  AR_CMD_EXTRACT  
24280 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20 41 52      2.#define AR
24290 5f 43 4d 44 5f 4c 49 53 54 20 20 20 20 20 20 20  _CMD_LIST       
242a0 20 20 33 0a 23 64 65 66 69 6e 65 20 41 52 5f 43    3.#define AR_C
242b0 4d 44 5f 55 50 44 41 54 45 20 20 20 20 20 20 20  MD_UPDATE       
242c0 34 0a 23 64 65 66 69 6e 65 20 41 52 5f 43 4d 44  4.#define AR_CMD
242d0 5f 48 45 4c 50 20 20 20 20 20 20 20 20 20 35 0a  _HELP         5.
242e0 0a 2f 2a 0a 2a 2a 20 4f 74 68 65 72 20 28 6e 6f  ./*.** Other (no
242f0 6e 2d 63 6f 6d 6d 61 6e 64 29 20 73 77 69 74 63  n-command) switc
24300 68 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  hes..*/.#define 
24310 41 52 5f 53 57 49 54 43 48 5f 56 45 52 42 4f 53  AR_SWITCH_VERBOS
24320 45 20 20 20 20 20 36 0a 23 64 65 66 69 6e 65 20  E     6.#define 
24330 41 52 5f 53 57 49 54 43 48 5f 46 49 4c 45 20 20  AR_SWITCH_FILE  
24340 20 20 20 20 20 20 37 0a 23 64 65 66 69 6e 65 20        7.#define 
24350 41 52 5f 53 57 49 54 43 48 5f 44 49 52 45 43 54  AR_SWITCH_DIRECT
24360 4f 52 59 20 20 20 38 0a 23 64 65 66 69 6e 65 20  ORY   8.#define 
24370 41 52 5f 53 57 49 54 43 48 5f 41 50 50 45 4e 44  AR_SWITCH_APPEND
24380 20 20 20 20 20 20 39 0a 23 64 65 66 69 6e 65 20        9.#define 
24390 41 52 5f 53 57 49 54 43 48 5f 44 52 59 52 55 4e  AR_SWITCH_DRYRUN
243a0 20 20 20 20 20 31 30 0a 0a 73 74 61 74 69 63 20       10..static 
243b0 69 6e 74 20 61 72 50 72 6f 63 65 73 73 53 77 69  int arProcessSwi
243c0 74 63 68 28 41 72 43 6f 6d 6d 61 6e 64 20 2a 70  tch(ArCommand *p
243d0 41 72 2c 20 69 6e 74 20 65 53 77 69 74 63 68 2c  Ar, int eSwitch,
243e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72   const char *zAr
243f0 67 29 7b 0a 20 20 73 77 69 74 63 68 28 20 65 53  g){.  switch( eS
24400 77 69 74 63 68 20 29 7b 0a 20 20 20 20 63 61 73  witch ){.    cas
24410 65 20 41 52 5f 43 4d 44 5f 43 52 45 41 54 45 3a  e AR_CMD_CREATE:
24420 0a 20 20 20 20 63 61 73 65 20 41 52 5f 43 4d 44  .    case AR_CMD
24430 5f 45 58 54 52 41 43 54 3a 0a 20 20 20 20 63 61  _EXTRACT:.    ca
24440 73 65 20 41 52 5f 43 4d 44 5f 4c 49 53 54 3a 0a  se AR_CMD_LIST:.
24450 20 20 20 20 63 61 73 65 20 41 52 5f 43 4d 44 5f      case AR_CMD_
24460 55 50 44 41 54 45 3a 0a 20 20 20 20 63 61 73 65  UPDATE:.    case
24470 20 41 52 5f 43 4d 44 5f 48 45 4c 50 3a 0a 20 20   AR_CMD_HELP:.  
24480 20 20 20 20 69 66 28 20 70 41 72 2d 3e 65 43 6d      if( pAr->eCm
24490 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 74  d ){.        ret
244a0 75 72 6e 20 61 72 45 72 72 6f 72 4d 73 67 28 22  urn arErrorMsg("
244b0 6d 75 6c 74 69 70 6c 65 20 63 6f 6d 6d 61 6e 64  multiple command
244c0 20 6f 70 74 69 6f 6e 73 22 29 3b 0a 20 20 20 20   options");.    
244d0 20 20 7d 0a 20 20 20 20 20 20 70 41 72 2d 3e 65    }.      pAr->e
244e0 43 6d 64 20 3d 20 65 53 77 69 74 63 68 3b 0a 20  Cmd = eSwitch;. 
244f0 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20       break;..   
24500 20 63 61 73 65 20 41 52 5f 53 57 49 54 43 48 5f   case AR_SWITCH_
24510 44 52 59 52 55 4e 3a 0a 20 20 20 20 20 20 70 41  DRYRUN:.      pA
24520 72 2d 3e 62 44 72 79 52 75 6e 20 3d 20 31 3b 0a  r->bDryRun = 1;.
24530 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
24540 20 63 61 73 65 20 41 52 5f 53 57 49 54 43 48 5f   case AR_SWITCH_
24550 56 45 52 42 4f 53 45 3a 0a 20 20 20 20 20 20 70  VERBOSE:.      p
24560 41 72 2d 3e 62 56 65 72 62 6f 73 65 20 3d 20 31  Ar->bVerbose = 1
24570 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
24580 20 20 20 63 61 73 65 20 41 52 5f 53 57 49 54 43     case AR_SWITC
24590 48 5f 41 50 50 45 4e 44 3a 0a 20 20 20 20 20 20  H_APPEND:.      
245a0 70 41 72 2d 3e 62 41 70 70 65 6e 64 20 3d 20 31  pAr->bAppend = 1
245b0 3b 0a 20 20 20 20 20 20 2f 2a 20 46 61 6c 6c 20  ;.      /* Fall 
245c0 74 68 72 75 20 69 6e 74 6f 20 2d 2d 66 69 6c 65  thru into --file
245d0 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 41 52 5f   */.    case AR_
245e0 53 57 49 54 43 48 5f 46 49 4c 45 3a 0a 20 20 20  SWITCH_FILE:.   
245f0 20 20 20 70 41 72 2d 3e 7a 46 69 6c 65 20 3d 20     pAr->zFile = 
24600 7a 41 72 67 3b 0a 20 20 20 20 20 20 62 72 65 61  zArg;.      brea
24610 6b 3b 0a 20 20 20 20 63 61 73 65 20 41 52 5f 53  k;.    case AR_S
24620 57 49 54 43 48 5f 44 49 52 45 43 54 4f 52 59 3a  WITCH_DIRECTORY:
24630 0a 20 20 20 20 20 20 70 41 72 2d 3e 7a 44 69 72  .      pAr->zDir
24640 20 3d 20 7a 41 72 67 3b 0a 20 20 20 20 20 20 62   = zArg;.      b
24650 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 72 65 74  reak;.  }..  ret
24660 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
24670 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 73 65 20 74 68  ../*.** Parse th
24680 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 66  e command line f
24690 6f 72 20 61 6e 20 22 2e 61 72 22 20 63 6f 6d 6d  or an ".ar" comm
246a0 61 6e 64 2e 20 54 68 65 20 72 65 73 75 6c 74 73  and. The results
246b0 20 61 72 65 20 77 72 69 74 74 65 6e 20 69 6e 74   are written int
246c0 6f 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 28  o.** structure (
246d0 2a 70 41 72 29 2e 20 53 51 4c 49 54 45 5f 4f 4b  *pAr). SQLITE_OK
246e0 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
246f0 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
24700 20 69 73 20 70 61 72 73 65 64 0a 2a 2a 20 73 75   is parsed.** su
24710 63 63 65 73 73 66 75 6c 6c 79 2c 20 6f 74 68 65  ccessfully, othe
24720 72 77 69 73 65 20 61 6e 20 65 72 72 6f 72 20 6d  rwise an error m
24730 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74 65  essage is writte
24740 6e 20 74 6f 20 73 74 64 65 72 72 20 61 6e 64 20  n to stderr and 
24750 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  .** SQLITE_ERROR
24760 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74   returned..*/.st
24770 61 74 69 63 20 69 6e 74 20 61 72 50 61 72 73 65  atic int arParse
24780 43 6f 6d 6d 61 6e 64 28 0a 20 20 63 68 61 72 20  Command(.  char 
24790 2a 2a 61 7a 41 72 67 2c 20 20 20 20 20 20 20 20  **azArg,        
247a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
247b0 72 61 79 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ray of arguments
247c0 20 70 61 73 73 65 64 20 74 6f 20 64 6f 74 20 63   passed to dot c
247d0 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
247e0 6e 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20  nArg,           
247f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24800 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
24810 20 69 6e 20 61 7a 41 72 67 5b 5d 20 2a 2f 0a 20   in azArg[] */. 
24820 20 41 72 43 6f 6d 6d 61 6e 64 20 2a 70 41 72 20   ArCommand *pAr 
24830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24840 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74 68 69   /* Populate thi
24850 73 20 6f 62 6a 65 63 74 20 2a 2f 0a 29 7b 0a 20  s object */.){. 
24860 20 73 74 72 75 63 74 20 41 72 53 77 69 74 63 68   struct ArSwitch
24870 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
24880 72 20 2a 7a 4c 6f 6e 67 3b 0a 20 20 20 20 63 68  r *zLong;.    ch
24890 61 72 20 63 53 68 6f 72 74 3b 0a 20 20 20 20 75  ar cShort;.    u
248a0 38 20 65 53 77 69 74 63 68 3b 0a 20 20 20 20 75  8 eSwitch;.    u
248b0 38 20 62 41 72 67 3b 0a 20 20 7d 20 61 53 77 69  8 bArg;.  } aSwi
248c0 74 63 68 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20  tch[] = {.    { 
248d0 22 63 72 65 61 74 65 22 2c 20 20 20 20 27 63 27  "create",    'c'
248e0 2c 20 41 52 5f 43 4d 44 5f 43 52 45 41 54 45 2c  , AR_CMD_CREATE,
248f0 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 20 20         0 },.    
24900 7b 20 22 65 78 74 72 61 63 74 22 2c 20 20 20 27  { "extract",   '
24910 78 27 2c 20 41 52 5f 43 4d 44 5f 45 58 54 52 41  x', AR_CMD_EXTRA
24920 43 54 2c 20 20 20 20 20 20 30 20 7d 2c 0a 20 20  CT,      0 },.  
24930 20 20 7b 20 22 6c 69 73 74 22 2c 20 20 20 20 20    { "list",     
24940 20 27 74 27 2c 20 41 52 5f 43 4d 44 5f 4c 49 53   't', AR_CMD_LIS
24950 54 2c 20 20 20 20 20 20 20 20 20 30 20 7d 2c 0a  T,         0 },.
24960 20 20 20 20 7b 20 22 75 70 64 61 74 65 22 2c 20      { "update", 
24970 20 20 20 27 75 27 2c 20 41 52 5f 43 4d 44 5f 55     'u', AR_CMD_U
24980 50 44 41 54 45 2c 20 20 20 20 20 20 20 30 20 7d  PDATE,       0 }
24990 2c 0a 20 20 20 20 7b 20 22 68 65 6c 70 22 2c 20  ,.    { "help", 
249a0 20 20 20 20 20 27 68 27 2c 20 41 52 5f 43 4d 44       'h', AR_CMD
249b0 5f 48 45 4c 50 2c 20 20 20 20 20 20 20 20 20 30  _HELP,         0
249c0 20 7d 2c 0a 20 20 20 20 7b 20 22 76 65 72 62 6f   },.    { "verbo
249d0 73 65 22 2c 20 20 20 27 76 27 2c 20 41 52 5f 53  se",   'v', AR_S
249e0 57 49 54 43 48 5f 56 45 52 42 4f 53 45 2c 20 20  WITCH_VERBOSE,  
249f0 20 30 20 7d 2c 0a 20 20 20 20 7b 20 22 66 69 6c   0 },.    { "fil
24a00 65 22 2c 20 20 20 20 20 20 27 66 27 2c 20 41 52  e",      'f', AR
24a10 5f 53 57 49 54 43 48 5f 46 49 4c 45 2c 20 20 20  _SWITCH_FILE,   
24a20 20 20 20 31 20 7d 2c 0a 20 20 20 20 7b 20 22 61     1 },.    { "a
24a30 70 70 65 6e 64 22 2c 20 20 20 20 27 61 27 2c 20  ppend",    'a', 
24a40 41 52 5f 53 57 49 54 43 48 5f 41 50 50 45 4e 44  AR_SWITCH_APPEND
24a50 2c 20 20 20 20 31 20 7d 2c 0a 20 20 20 20 7b 20  ,    1 },.    { 
24a60 22 64 69 72 65 63 74 6f 72 79 22 2c 20 27 43 27  "directory", 'C'
24a70 2c 20 41 52 5f 53 57 49 54 43 48 5f 44 49 52 45  , AR_SWITCH_DIRE
24a80 43 54 4f 52 59 2c 20 31 20 7d 2c 0a 20 20 20 20  CTORY, 1 },.    
24a90 7b 20 22 64 72 79 72 75 6e 22 2c 20 20 20 20 27  { "dryrun",    '
24aa0 6e 27 2c 20 41 52 5f 53 57 49 54 43 48 5f 44 52  n', AR_SWITCH_DR
24ab0 59 52 55 4e 2c 20 20 20 20 30 20 7d 2c 0a 20 20  YRUN,    0 },.  
24ac0 7d 3b 0a 20 20 69 6e 74 20 6e 53 77 69 74 63 68  };.  int nSwitch
24ad0 20 3d 20 73 69 7a 65 6f 66 28 61 53 77 69 74 63   = sizeof(aSwitc
24ae0 68 29 20 2f 20 73 69 7a 65 6f 66 28 73 74 72 75  h) / sizeof(stru
24af0 63 74 20 41 72 53 77 69 74 63 68 29 3b 0a 20 20  ct ArSwitch);.  
24b00 73 74 72 75 63 74 20 41 72 53 77 69 74 63 68 20  struct ArSwitch 
24b10 2a 70 45 6e 64 20 3d 20 26 61 53 77 69 74 63 68  *pEnd = &aSwitch
24b20 5b 6e 53 77 69 74 63 68 5d 3b 0a 0a 20 20 69 66  [nSwitch];..  if
24b30 28 20 6e 41 72 67 3c 3d 31 20 29 7b 0a 20 20 20  ( nArg<=1 ){.   
24b40 20 72 65 74 75 72 6e 20 61 72 55 73 61 67 65 28   return arUsage(
24b50 73 74 64 65 72 72 29 3b 0a 20 20 7d 65 6c 73 65  stderr);.  }else
24b60 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20  {.    char *z = 
24b70 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 6d 65  azArg[1];.    me
24b80 6d 73 65 74 28 70 41 72 2c 20 30 2c 20 73 69 7a  mset(pAr, 0, siz
24b90 65 6f 66 28 41 72 43 6f 6d 6d 61 6e 64 29 29 3b  eof(ArCommand));
24ba0 0a 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 21 3d  ..    if( z[0]!=
24bb0 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  '-' ){.      /* 
24bc0 54 72 61 64 69 74 69 6f 6e 61 6c 20 73 74 79 6c  Traditional styl
24bd0 65 20 5b 74 61 72 5d 20 69 6e 76 6f 63 61 74 69  e [tar] invocati
24be0 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20  on */.      int 
24bf0 69 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 41 72  i;.      int iAr
24c00 67 20 3d 20 32 3b 0a 20 20 20 20 20 20 66 6f 72  g = 2;.      for
24c10 28 69 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29  (i=0; z[i]; i++)
24c20 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  {.        const 
24c30 63 68 61 72 20 2a 7a 41 72 67 20 3d 20 30 3b 0a  char *zArg = 0;.
24c40 20 20 20 20 20 20 20 20 73 74 72 75 63 74 20 41          struct A
24c50 72 53 77 69 74 63 68 20 2a 70 4f 70 74 3b 0a 20  rSwitch *pOpt;. 
24c60 20 20 20 20 20 20 20 66 6f 72 28 70 4f 70 74 3d         for(pOpt=
24c70 26 61 53 77 69 74 63 68 5b 30 5d 3b 20 70 4f 70  &aSwitch[0]; pOp
24c80 74 3c 70 45 6e 64 3b 20 70 4f 70 74 2b 2b 29 7b  t<pEnd; pOpt++){
24c90 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 7a  .          if( z
24ca0 5b 69 5d 3d 3d 70 4f 70 74 2d 3e 63 53 68 6f 72  [i]==pOpt->cShor
24cb0 74 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  t ) break;.     
24cc0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
24cd0 20 70 4f 70 74 3d 3d 70 45 6e 64 20 29 7b 0a 20   pOpt==pEnd ){. 
24ce0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24cf0 61 72 45 72 72 6f 72 4d 73 67 28 22 75 6e 72 65  arErrorMsg("unre
24d00 63 6f 67 6e 69 7a 65 64 20 6f 70 74 69 6f 6e 3a  cognized option:
24d10 20 25 63 22 2c 20 7a 5b 69 5d 29 3b 0a 20 20 20   %c", z[i]);.   
24d20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
24d30 66 28 20 70 4f 70 74 2d 3e 62 41 72 67 20 29 7b  f( pOpt->bArg ){
24d40 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
24d50 41 72 67 3e 3d 6e 41 72 67 20 29 7b 0a 20 20 20  Arg>=nArg ){.   
24d60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24d70 61 72 45 72 72 6f 72 4d 73 67 28 22 6f 70 74 69  arErrorMsg("opti
24d80 6f 6e 20 72 65 71 75 69 72 65 73 20 61 6e 20 61  on requires an a
24d90 72 67 75 6d 65 6e 74 3a 20 25 63 22 2c 7a 5b 69  rgument: %c",z[i
24da0 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ]);.          }.
24db0 20 20 20 20 20 20 20 20 20 20 7a 41 72 67 20 3d            zArg =
24dc0 20 61 7a 41 72 67 5b 69 41 72 67 2b 2b 5d 3b 0a   azArg[iArg++];.
24dd0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
24de0 20 20 69 66 28 20 61 72 50 72 6f 63 65 73 73 53    if( arProcessS
24df0 77 69 74 63 68 28 70 41 72 2c 20 70 4f 70 74 2d  witch(pAr, pOpt-
24e00 3e 65 53 77 69 74 63 68 2c 20 7a 41 72 67 29 20  >eSwitch, zArg) 
24e10 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
24e20 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 7d 0a 20  ERROR;.      }. 
24e30 20 20 20 20 20 70 41 72 2d 3e 6e 41 72 67 20 3d       pAr->nArg =
24e40 20 6e 41 72 67 2d 69 41 72 67 3b 0a 20 20 20 20   nArg-iArg;.    
24e50 20 20 69 66 28 20 70 41 72 2d 3e 6e 41 72 67 3e    if( pAr->nArg>
24e60 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 41 72  0 ){.        pAr
24e70 2d 3e 61 7a 41 72 67 20 3d 20 26 61 7a 41 72 67  ->azArg = &azArg
24e80 5b 69 41 72 67 5d 3b 0a 20 20 20 20 20 20 7d 0a  [iArg];.      }.
24e90 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
24ea0 20 2f 2a 20 4e 6f 6e 2d 74 72 61 64 69 74 69 6f   /* Non-traditio
24eb0 6e 61 6c 20 69 6e 76 6f 63 61 74 69 6f 6e 20 2a  nal invocation *
24ec0 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 41 72 67  /.      int iArg
24ed0 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 41 72 67  ;.      for(iArg
24ee0 3d 31 3b 20 69 41 72 67 3c 6e 41 72 67 3b 20 69  =1; iArg<nArg; i
24ef0 41 72 67 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  Arg++){.        
24f00 69 6e 74 20 6e 3b 0a 20 20 20 20 20 20 20 20 7a  int n;.        z
24f10 20 3d 20 61 7a 41 72 67 5b 69 41 72 67 5d 3b 0a   = azArg[iArg];.
24f20 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d          if( z[0]
24f30 21 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20  !='-' ){.       
24f40 20 20 20 2f 2a 20 41 6c 6c 20 72 65 6d 61 69 6e     /* All remain
24f50 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ing command line
24f60 20 77 6f 72 64 73 20 61 72 65 20 63 6f 6d 6d 61   words are comma
24f70 6e 64 20 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f  nd arguments. */
24f80 0a 20 20 20 20 20 20 20 20 20 20 70 41 72 2d 3e  .          pAr->
24f90 61 7a 41 72 67 20 3d 20 26 61 7a 41 72 67 5b 69  azArg = &azArg[i
24fa0 41 72 67 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  Arg];.          
24fb0 70 41 72 2d 3e 6e 41 72 67 20 3d 20 6e 41 72 67  pAr->nArg = nArg
24fc0 2d 69 41 72 67 3b 0a 20 20 20 20 20 20 20 20 20  -iArg;.         
24fd0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
24fe0 7d 0a 20 20 20 20 20 20 20 20 6e 20 3d 20 73 74  }.        n = st
24ff0 72 6c 65 6e 33 30 28 7a 29 3b 0a 0a 20 20 20 20  rlen30(z);..    
25000 20 20 20 20 69 66 28 20 7a 5b 31 5d 21 3d 27 2d      if( z[1]!='-
25010 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ' ){.          i
25020 6e 74 20 69 3b 0a 20 20 20 20 20 20 20 20 20 20  nt i;.          
25030 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 73  /* One or more s
25040 68 6f 72 74 20 6f 70 74 69 6f 6e 73 20 2a 2f 0a  hort options */.
25050 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d            for(i=
25060 31 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  1; i<n; i++){.  
25070 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
25080 63 68 61 72 20 2a 7a 41 72 67 20 3d 20 30 3b 0a  char *zArg = 0;.
25090 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 75              stru
250a0 63 74 20 41 72 53 77 69 74 63 68 20 2a 70 4f 70  ct ArSwitch *pOp
250b0 74 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  t;.            f
250c0 6f 72 28 70 4f 70 74 3d 26 61 53 77 69 74 63 68  or(pOpt=&aSwitch
250d0 5b 30 5d 3b 20 70 4f 70 74 3c 70 45 6e 64 3b 20  [0]; pOpt<pEnd; 
250e0 70 4f 70 74 2b 2b 29 7b 0a 20 20 20 20 20 20 20  pOpt++){.       
250f0 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d         if( z[i]=
25100 3d 70 4f 70 74 2d 3e 63 53 68 6f 72 74 20 29 20  =pOpt->cShort ) 
25110 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
25120 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
25130 20 69 66 28 20 70 4f 70 74 3d 3d 70 45 6e 64 20   if( pOpt==pEnd 
25140 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
25150 20 72 65 74 75 72 6e 20 61 72 45 72 72 6f 72 4d   return arErrorM
25160 73 67 28 22 75 6e 72 65 63 6f 67 6e 69 7a 65 64  sg("unrecognized
25170 20 6f 70 74 69 6f 6e 3a 20 25 63 5c 6e 22 2c 20   option: %c\n", 
25180 7a 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  z[i]);.         
25190 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
251a0 20 69 66 28 20 70 4f 70 74 2d 3e 62 41 72 67 20   if( pOpt->bArg 
251b0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
251c0 20 69 66 28 20 69 3c 28 6e 2d 31 29 20 29 7b 0a   if( i<(n-1) ){.
251d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251e0 7a 41 72 67 20 3d 20 26 7a 5b 69 2b 31 5d 3b 0a  zArg = &z[i+1];.
251f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25200 69 20 3d 20 6e 3b 0a 20 20 20 20 20 20 20 20 20  i = n;.         
25210 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
25220 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
25230 69 41 72 67 3e 3d 28 6e 41 72 67 2d 31 29 20 29  iArg>=(nArg-1) )
25240 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
25250 20 20 20 20 72 65 74 75 72 6e 20 61 72 45 72 72      return arErr
25260 6f 72 4d 73 67 28 22 6f 70 74 69 6f 6e 20 72 65  orMsg("option re
25270 71 75 69 72 65 73 20 61 6e 20 61 72 67 75 6d 65  quires an argume
25280 6e 74 3a 20 25 63 5c 6e 22 2c 7a 5b 69 5d 29 3b  nt: %c\n",z[i]);
25290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
252a0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
252b0 20 20 20 7a 41 72 67 20 3d 20 61 7a 41 72 67 5b     zArg = azArg[
252c0 2b 2b 69 41 72 67 5d 3b 0a 20 20 20 20 20 20 20  ++iArg];.       
252d0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
252e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
252f0 20 20 20 69 66 28 20 61 72 50 72 6f 63 65 73 73     if( arProcess
25300 53 77 69 74 63 68 28 70 41 72 2c 20 70 4f 70 74  Switch(pAr, pOpt
25310 2d 3e 65 53 77 69 74 63 68 2c 20 7a 41 72 67 29  ->eSwitch, zArg)
25320 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45   ) return SQLITE
25330 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20  _ERROR;.        
25340 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73    }.        }els
25350 65 20 69 66 28 20 7a 5b 32 5d 3d 3d 27 5c 30 27  e if( z[2]=='\0'
25360 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
25370 20 41 20 2d 2d 20 6f 70 74 69 6f 6e 2c 20 69 6e   A -- option, in
25380 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 61 6c  dicating that al
25390 6c 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6d 6d  l remaining comm
253a0 61 6e 64 20 6c 69 6e 65 20 77 6f 72 64 73 0a 20  and line words. 
253b0 20 20 20 20 20 20 20 20 20 2a 2a 20 61 72 65 20           ** are 
253c0 63 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74  command argument
253d0 73 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  s.  */.         
253e0 20 70 41 72 2d 3e 61 7a 41 72 67 20 3d 20 26 61   pAr->azArg = &a
253f0 7a 41 72 67 5b 69 41 72 67 2b 31 5d 3b 0a 20 20  zArg[iArg+1];.  
25400 20 20 20 20 20 20 20 20 70 41 72 2d 3e 6e 41 72          pAr->nAr
25410 67 20 3d 20 6e 41 72 67 2d 69 41 72 67 2d 31 3b  g = nArg-iArg-1;
25420 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
25430 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
25440 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  .          /* A 
25450 6c 6f 6e 67 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20  long option */. 
25460 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
25470 68 61 72 20 2a 7a 41 72 67 20 3d 20 30 3b 20 20  har *zArg = 0;  
25480 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
25490 67 75 6d 65 6e 74 20 66 6f 72 20 6f 70 74 69 6f  gument for optio
254a0 6e 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 20  n, if any */.   
254b0 20 20 20 20 20 20 20 73 74 72 75 63 74 20 41 72         struct Ar
254c0 53 77 69 74 63 68 20 2a 70 4d 61 74 63 68 20 3d  Switch *pMatch =
254d0 20 30 3b 20 20 20 20 20 20 2f 2a 20 4d 61 74 63   0;      /* Matc
254e0 68 69 6e 67 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20  hing option */. 
254f0 20 20 20 20 20 20 20 20 20 73 74 72 75 63 74 20           struct 
25500 41 72 53 77 69 74 63 68 20 2a 70 4f 70 74 3b 20  ArSwitch *pOpt; 
25510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 74             /* It
25520 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 20 20  erator */.      
25530 20 20 20 20 66 6f 72 28 70 4f 70 74 3d 26 61 53      for(pOpt=&aS
25540 77 69 74 63 68 5b 30 5d 3b 20 70 4f 70 74 3c 70  witch[0]; pOpt<p
25550 45 6e 64 3b 20 70 4f 70 74 2b 2b 29 7b 0a 20 20  End; pOpt++){.  
25560 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
25570 63 68 61 72 20 2a 7a 4c 6f 6e 67 20 3d 20 70 4f  char *zLong = pO
25580 70 74 2d 3e 7a 4c 6f 6e 67 3b 0a 20 20 20 20 20  pt->zLong;.     
25590 20 20 20 20 20 20 20 69 66 28 20 28 6e 2d 32 29         if( (n-2)
255a0 3c 3d 73 74 72 6c 65 6e 33 30 28 7a 4c 6f 6e 67  <=strlen30(zLong
255b0 29 20 26 26 20 30 3d 3d 6d 65 6d 63 6d 70 28 26  ) && 0==memcmp(&
255c0 7a 5b 32 5d 2c 20 7a 4c 6f 6e 67 2c 20 6e 2d 32  z[2], zLong, n-2
255d0 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ) ){.           
255e0 20 20 20 69 66 28 20 70 4d 61 74 63 68 20 29 7b     if( pMatch ){
255f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25600 20 72 65 74 75 72 6e 20 61 72 45 72 72 6f 72 4d   return arErrorM
25610 73 67 28 22 61 6d 62 69 67 75 6f 75 73 20 6f 70  sg("ambiguous op
25620 74 69 6f 6e 3a 20 25 73 22 2c 7a 29 3b 0a 20 20  tion: %s",z);.  
25630 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73              }els
25640 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e{.             
25650 20 20 20 70 4d 61 74 63 68 20 3d 20 70 4f 70 74     pMatch = pOpt
25660 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
25670 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
25680 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20            }..   
25690 20 20 20 20 20 20 20 69 66 28 20 70 4d 61 74 63         if( pMatc
256a0 68 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  h==0 ){.        
256b0 20 20 20 20 72 65 74 75 72 6e 20 61 72 45 72 72      return arErr
256c0 6f 72 4d 73 67 28 22 75 6e 72 65 63 6f 67 6e 69  orMsg("unrecogni
256d0 7a 65 64 20 6f 70 74 69 6f 6e 3a 20 25 73 22 2c  zed option: %s",
256e0 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d   z);.          }
256f0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
25700 4d 61 74 63 68 2d 3e 62 41 72 67 20 29 7b 0a 20  Match->bArg ){. 
25710 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69             if( i
25720 41 72 67 3e 3d 28 6e 41 72 67 2d 31 29 20 29 7b  Arg>=(nArg-1) ){
25730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
25740 65 74 75 72 6e 20 61 72 45 72 72 6f 72 4d 73 67  eturn arErrorMsg
25750 28 22 6f 70 74 69 6f 6e 20 72 65 71 75 69 72 65  ("option require
25760 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 3a 20 25  s an argument: %
25770 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20  s", z);.        
25780 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
25790 20 20 7a 41 72 67 20 3d 20 61 7a 41 72 67 5b 2b    zArg = azArg[+
257a0 2b 69 41 72 67 5d 3b 0a 20 20 20 20 20 20 20 20  +iArg];.        
257b0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
257c0 28 20 61 72 50 72 6f 63 65 73 73 53 77 69 74 63  ( arProcessSwitc
257d0 68 28 70 41 72 2c 20 70 4d 61 74 63 68 2d 3e 65  h(pAr, pMatch->e
257e0 53 77 69 74 63 68 2c 20 7a 41 72 67 29 20 29 20  Switch, zArg) ) 
257f0 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
25800 52 4f 52 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ROR;.        }. 
25810 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
25820 0a 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ..  return SQLIT
25830 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  E_OK;.}../*.** T
25840 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 73 73  his function ass
25850 75 6d 65 73 20 74 68 61 74 20 61 6c 6c 20 61 72  umes that all ar
25860 67 75 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  guments within t
25870 68 65 20 41 72 43 6f 6d 6d 61 6e 64 2e 61 7a 41  he ArCommand.azA
25880 72 67 5b 5d 0a 2a 2a 20 61 72 72 61 79 20 72 65  rg[].** array re
25890 66 65 72 20 74 6f 20 61 72 63 68 69 76 65 20 6d  fer to archive m
258a0 65 6d 62 65 72 73 2c 20 61 73 20 66 6f 72 20 74  embers, as for t
258b0 68 65 20 2d 2d 65 78 74 72 61 63 74 20 6f 72 20  he --extract or 
258c0 2d 2d 6c 69 73 74 20 63 6f 6d 6d 61 6e 64 73 2e  --list commands.
258d0 20 0a 2a 2a 20 49 74 20 63 68 65 63 6b 73 20 74   .** It checks t
258e0 68 61 74 20 65 61 63 68 20 6f 66 20 74 68 65 6d  hat each of them
258f0 20 61 72 65 20 70 72 65 73 65 6e 74 2e 20 49 66   are present. If
25900 20 61 6e 79 20 73 70 65 63 69 66 69 65 64 20 66   any specified f
25910 69 6c 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 70 72  ile is not.** pr
25920 65 73 65 6e 74 20 69 6e 20 74 68 65 20 61 72 63  esent in the arc
25930 68 69 76 65 2c 20 61 6e 20 65 72 72 6f 72 20 69  hive, an error i
25940 73 20 70 72 69 6e 74 65 64 20 74 6f 20 73 74 64  s printed to std
25950 65 72 72 20 61 6e 64 20 61 6e 20 65 72 72 6f 72  err and an error
25960 0a 2a 2a 20 63 6f 64 65 20 72 65 74 75 72 6e 65  .** code returne
25970 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
25980 20 61 6c 6c 20 73 70 65 63 69 66 69 65 64 20 61   all specified a
25990 72 67 75 6d 65 6e 74 73 20 61 72 65 20 70 72 65  rguments are pre
259a0 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 61  sent in.** the a
259b0 72 63 68 69 76 65 2c 20 53 51 4c 49 54 45 5f 4f  rchive, SQLITE_O
259c0 4b 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  K is returned..*
259d0 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
259e0 6f 6e 20 73 74 72 69 70 73 20 61 6e 79 20 74 72  on strips any tr
259f0 61 69 6c 69 6e 67 20 27 2f 27 20 63 68 61 72 61  ailing '/' chara
25a00 63 74 65 72 73 20 66 72 6f 6d 20 65 61 63 68 20  cters from each 
25a10 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 20 54 68 69  argument..** Thi
25a20 73 20 69 73 20 63 6f 6e 73 69 73 74 65 6e 74 20  s is consistent 
25a30 77 69 74 68 20 74 68 65 20 77 61 79 20 74 68 65  with the way the
25a40 20 5b 74 61 72 5d 20 63 6f 6d 6d 61 6e 64 20 73   [tar] command s
25a50 65 65 6d 73 20 74 6f 20 77 6f 72 6b 20 6f 6e 0a  eems to work on.
25a60 2a 2a 20 4c 69 6e 75 78 2e 0a 2a 2f 0a 73 74 61  ** Linux..*/.sta
25a70 74 69 63 20 69 6e 74 20 61 72 43 68 65 63 6b 45  tic int arCheckE
25a80 6e 74 72 69 65 73 28 41 72 43 6f 6d 6d 61 6e 64  ntries(ArCommand
25a90 20 2a 70 41 72 29 7b 0a 20 20 69 6e 74 20 72 63   *pAr){.  int rc
25aa0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
25ab0 69 66 28 20 70 41 72 2d 3e 6e 41 72 67 20 29 7b  if( pAr->nArg ){
25ac0 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20  .    int i, j;. 
25ad0 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20     sqlite3_stmt 
25ae0 2a 70 54 65 73 74 20 3d 20 30 3b 0a 0a 20 20 20  *pTest = 0;..   
25af0 20 73 68 65 6c 6c 50 72 65 70 61 72 65 50 72 69   shellPreparePri
25b00 6e 74 66 28 70 41 72 2d 3e 64 62 2c 20 26 72 63  ntf(pAr->db, &rc
25b10 2c 20 26 70 54 65 73 74 2c 0a 20 20 20 20 20 20  , &pTest,.      
25b20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 20 46    "SELECT name F
25b30 52 4f 4d 20 25 73 20 57 48 45 52 45 20 6e 61 6d  ROM %s WHERE nam
25b40 65 3d 24 6e 61 6d 65 22 2c 20 0a 20 20 20 20 20  e=$name", .     
25b50 20 20 20 70 41 72 2d 3e 7a 53 72 63 54 61 62 6c     pAr->zSrcTabl
25b60 65 0a 20 20 20 20 29 3b 0a 20 20 20 20 6a 20 3d  e.    );.    j =
25b70 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
25b80 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 70 54  rameter_index(pT
25b90 65 73 74 2c 20 22 24 6e 61 6d 65 22 29 3b 0a 20  est, "$name");. 
25ba0 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 41     for(i=0; i<pA
25bb0 72 2d 3e 6e 41 72 67 20 26 26 20 72 63 3d 3d 53  r->nArg && rc==S
25bc0 51 4c 49 54 45 5f 4f 4b 3b 20 69 2b 2b 29 7b 0a  QLITE_OK; i++){.
25bd0 20 20 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20        char *z = 
25be0 70 41 72 2d 3e 61 7a 41 72 67 5b 69 5d 3b 0a 20  pAr->azArg[i];. 
25bf0 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 74 72       int n = str
25c00 6c 65 6e 33 30 28 7a 29 3b 0a 20 20 20 20 20 20  len30(z);.      
25c10 69 6e 74 20 62 4f 6b 20 3d 20 30 3b 0a 20 20 20  int bOk = 0;.   
25c20 20 20 20 77 68 69 6c 65 28 20 6e 3e 30 20 26 26     while( n>0 &&
25c30 20 7a 5b 6e 2d 31 5d 3d 3d 27 2f 27 20 29 20 6e   z[n-1]=='/' ) n
25c40 2d 2d 3b 0a 20 20 20 20 20 20 7a 5b 6e 5d 20 3d  --;.      z[n] =
25c50 20 27 5c 30 27 3b 0a 20 20 20 20 20 20 73 71 6c   '\0';.      sql
25c60 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70  ite3_bind_text(p
25c70 54 65 73 74 2c 20 6a 2c 20 7a 2c 20 2d 31 2c 20  Test, j, z, -1, 
25c80 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
25c90 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45        if( SQLITE
25ca0 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f 73 74  _ROW==sqlite3_st
25cb0 65 70 28 70 54 65 73 74 29 20 29 7b 0a 20 20 20  ep(pTest) ){.   
25cc0 20 20 20 20 20 62 4f 6b 20 3d 20 31 3b 0a 20 20       bOk = 1;.  
25cd0 20 20 20 20 7d 0a 20 20 20 20 20 20 73 68 65 6c      }.      shel
25ce0 6c 52 65 73 65 74 28 26 72 63 2c 20 70 54 65 73  lReset(&rc, pTes
25cf0 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  t);.      if( rc
25d00 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 62  ==SQLITE_OK && b
25d10 4f 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  Ok==0 ){.       
25d20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
25d30 65 72 72 2c 20 22 6e 6f 74 20 66 6f 75 6e 64 20  err, "not found 
25d40 69 6e 20 61 72 63 68 69 76 65 3a 20 25 73 5c 6e  in archive: %s\n
25d50 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 72  ", z);.        r
25d60 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
25d70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
25d80 20 20 20 20 73 68 65 6c 6c 46 69 6e 61 6c 69 7a      shellFinaliz
25d90 65 28 26 72 63 2c 20 70 54 65 73 74 29 3b 0a 20  e(&rc, pTest);. 
25da0 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
25db0 7d 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 6d 61 74 20  }../*.** Format 
25dc0 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 74  a WHERE clause t
25dd0 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20  hat can be used 
25de0 61 67 61 69 6e 73 74 20 74 68 65 20 22 73 71 6c  against the "sql
25df0 61 72 22 20 74 61 62 6c 65 20 74 6f 0a 2a 2a 20  ar" table to.** 
25e00 69 64 65 6e 74 69 66 79 20 61 6c 6c 20 61 72 63  identify all arc
25e10 68 69 76 65 20 6d 65 6d 62 65 72 73 20 74 68 61  hive members tha
25e20 74 20 6d 61 74 63 68 20 74 68 65 20 63 6f 6d 6d  t match the comm
25e30 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 68 65  and arguments he
25e40 6c 64 0a 2a 2a 20 69 6e 20 28 2a 70 41 72 29 2e  ld.** in (*pAr).
25e50 20 4c 65 61 76 65 20 74 68 69 73 20 57 48 45 52   Leave this WHER
25e60 45 20 63 6c 61 75 73 65 20 69 6e 20 28 2a 70 7a  E clause in (*pz
25e70 57 68 65 72 65 29 20 62 65 66 6f 72 65 20 72 65  Where) before re
25e80 74 75 72 6e 69 6e 67 2e 0a 2a 2a 20 54 68 65 20  turning..** The 
25e90 63 61 6c 6c 65 72 20 69 73 20 72 65 73 70 6f 6e  caller is respon
25ea0 73 69 62 6c 65 20 66 6f 72 20 65 76 65 6e 74 75  sible for eventu
25eb0 61 6c 6c 79 20 63 61 6c 6c 69 6e 67 20 73 71 6c  ally calling sql
25ec0 69 74 65 33 5f 66 72 65 65 28 29 20 6f 6e 0a 2a  ite3_free() on.*
25ed0 2a 20 61 6e 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 28  * any non-NULL (
25ee0 2a 70 7a 57 68 65 72 65 29 20 76 61 6c 75 65 2e  *pzWhere) value.
25ef0 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
25f00 61 72 57 68 65 72 65 43 6c 61 75 73 65 28 0a 20  arWhereClause(. 
25f10 20 69 6e 74 20 2a 70 52 63 2c 20 0a 20 20 41 72   int *pRc, .  Ar
25f20 43 6f 6d 6d 61 6e 64 20 2a 70 41 72 2c 20 0a 20  Command *pAr, . 
25f30 20 63 68 61 72 20 2a 2a 70 7a 57 68 65 72 65 20   char **pzWhere 
25f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f50 20 2f 2a 20 4f 55 54 3a 20 4e 65 77 20 57 48 45   /* OUT: New WHE
25f60 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 29 7b 0a  RE clause */.){.
25f70 20 20 63 68 61 72 20 2a 7a 57 68 65 72 65 20 3d    char *zWhere =
25f80 20 30 3b 0a 20 20 69 66 28 20 2a 70 52 63 3d 3d   0;.  if( *pRc==
25f90 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
25fa0 20 69 66 28 20 70 41 72 2d 3e 6e 41 72 67 3d 3d   if( pAr->nArg==
25fb0 30 20 29 7b 0a 20 20 20 20 20 20 7a 57 68 65 72  0 ){.      zWher
25fc0 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e = sqlite3_mpri
25fd0 6e 74 66 28 22 31 22 29 3b 0a 20 20 20 20 7d 65  ntf("1");.    }e
25fe0 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  lse{.      int i
25ff0 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  ;.      const ch
26000 61 72 20 2a 7a 53 65 70 20 3d 20 22 22 3b 0a 20  ar *zSep = "";. 
26010 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
26020 70 41 72 2d 3e 6e 41 72 67 3b 20 69 2b 2b 29 7b  pAr->nArg; i++){
26030 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
26040 68 61 72 20 2a 7a 20 3d 20 70 41 72 2d 3e 61 7a  har *z = pAr->az
26050 41 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20  Arg[i];.        
26060 7a 57 68 65 72 65 20 3d 20 73 71 6c 69 74 65 33  zWhere = sqlite3
26070 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20 20  _mprintf(.      
26080 20 20 20 20 22 25 7a 25 73 20 6e 61 6d 65 20 3d      "%z%s name =
26090 20 27 25 71 27 20 4f 52 20 73 75 62 73 74 72 28   '%q' OR substr(
260a0 6e 61 6d 65 2c 31 2c 25 64 29 20 3d 20 27 25 71  name,1,%d) = '%q
260b0 2f 27 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20  /'", .          
260c0 7a 57 68 65 72 65 2c 20 7a 53 65 70 2c 20 7a 2c  zWhere, zSep, z,
260d0 20 73 74 72 6c 65 6e 33 30 28 7a 29 2b 31 2c 20   strlen30(z)+1, 
260e0 7a 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20  z.        );.   
260f0 20 20 20 20 20 69 66 28 20 7a 57 68 65 72 65 3d       if( zWhere=
26100 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
26110 2a 70 52 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f  *pRc = SQLITE_NO
26120 4d 45 4d 3b 0a 20 20 20 20 20 20 20 20 20 20 62  MEM;.          b
26130 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
26140 20 20 20 20 20 20 20 20 7a 53 65 70 20 3d 20 22          zSep = "
26150 20 4f 52 20 22 3b 0a 20 20 20 20 20 20 7d 0a 20   OR ";.      }. 
26160 20 20 20 7d 0a 20 20 7d 0a 20 20 2a 70 7a 57 68     }.  }.  *pzWh
26170 65 72 65 20 3d 20 7a 57 68 65 72 65 3b 0a 7d 0a  ere = zWhere;.}.
26180 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74  ./*.** Implement
26190 61 74 69 6f 6e 20 6f 66 20 2e 61 72 20 22 6c 69  ation of .ar "li
261a0 73 54 22 20 63 6f 6d 6d 61 6e 64 2e 20 0a 2a 2f  sT" command. .*/
261b0 0a 73 74 61 74 69 63 20 69 6e 74 20 61 72 4c 69  .static int arLi
261c0 73 74 43 6f 6d 6d 61 6e 64 28 41 72 43 6f 6d 6d  stCommand(ArComm
261d0 61 6e 64 20 2a 70 41 72 29 7b 0a 20 20 63 6f 6e  and *pAr){.  con
261e0 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20  st char *zSql = 
261f0 22 53 45 4c 45 43 54 20 25 73 20 46 52 4f 4d 20  "SELECT %s FROM 
26200 25 73 20 57 48 45 52 45 20 25 73 22 3b 20 0a 20  %s WHERE %s"; . 
26210 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43   const char *azC
26220 6f 6c 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 22 6e  ols[] = {.    "n
26230 61 6d 65 22 2c 0a 20 20 20 20 22 6c 73 6d 6f 64  ame",.    "lsmod
26240 65 28 6d 6f 64 65 29 2c 20 73 7a 2c 20 64 61 74  e(mode), sz, dat
26250 65 74 69 6d 65 28 6d 74 69 6d 65 2c 20 27 75 6e  etime(mtime, 'un
26260 69 78 65 70 6f 63 68 27 29 2c 20 6e 61 6d 65 22  ixepoch'), name"
26270 0a 20 20 7d 3b 0a 0a 20 20 63 68 61 72 20 2a 7a  .  };..  char *z
26280 57 68 65 72 65 20 3d 20 30 3b 0a 20 20 73 71 6c  Where = 0;.  sql
26290 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 71 6c 20  ite3_stmt *pSql 
262a0 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  = 0;.  int rc;..
262b0 20 20 72 63 20 3d 20 61 72 43 68 65 63 6b 45 6e    rc = arCheckEn
262c0 74 72 69 65 73 28 70 41 72 29 3b 0a 20 20 61 72  tries(pAr);.  ar
262d0 57 68 65 72 65 43 6c 61 75 73 65 28 26 72 63 2c  WhereClause(&rc,
262e0 20 70 41 72 2c 20 26 7a 57 68 65 72 65 29 3b 0a   pAr, &zWhere);.
262f0 0a 20 20 73 68 65 6c 6c 50 72 65 70 61 72 65 50  .  shellPrepareP
26300 72 69 6e 74 66 28 70 41 72 2d 3e 64 62 2c 20 26  rintf(pAr->db, &
26310 72 63 2c 20 26 70 53 71 6c 2c 20 7a 53 71 6c 2c  rc, &pSql, zSql,
26320 20 61 7a 43 6f 6c 73 5b 70 41 72 2d 3e 62 56 65   azCols[pAr->bVe
26330 72 62 6f 73 65 5d 2c 0a 20 20 20 20 20 20 20 20  rbose],.        
26340 20 20 20 20 20 20 20 20 20 20 20 20 20 70 41 72               pAr
26350 2d 3e 7a 53 72 63 54 61 62 6c 65 2c 20 7a 57 68  ->zSrcTable, zWh
26360 65 72 65 29 3b 0a 20 20 69 66 28 20 70 41 72 2d  ere);.  if( pAr-
26370 3e 62 44 72 79 52 75 6e 20 29 7b 0a 20 20 20 20  >bDryRun ){.    
26380 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41 72 2d  utf8_printf(pAr-
26390 3e 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22 2c  >p->out, "%s\n",
263a0 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 70 53 71   sqlite3_sql(pSq
263b0 6c 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  l));.  }else{.  
263c0 20 20 77 68 69 6c 65 28 20 72 63 3d 3d 53 51 4c    while( rc==SQL
263d0 49 54 45 5f 4f 4b 20 26 26 20 53 51 4c 49 54 45  ITE_OK && SQLITE
263e0 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f 73 74  _ROW==sqlite3_st
263f0 65 70 28 70 53 71 6c 29 20 29 7b 0a 20 20 20 20  ep(pSql) ){.    
26400 20 20 69 66 28 20 70 41 72 2d 3e 62 56 65 72 62    if( pAr->bVerb
26410 6f 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20 75  ose ){.        u
26420 74 66 38 5f 70 72 69 6e 74 66 28 70 41 72 2d 3e  tf8_printf(pAr->
26430 70 2d 3e 6f 75 74 2c 20 22 25 73 20 25 20 31 30  p->out, "%s % 10
26440 64 20 20 25 73 20 20 25 73 5c 6e 22 2c 0a 20 20  d  %s  %s\n",.  
26450 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
26460 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
26470 71 6c 2c 20 30 29 2c 0a 20 20 20 20 20 20 20 20  ql, 0),.        
26480 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
26490 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 31 29 2c  mn_int(pSql, 1),
264a0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71   .            sq
264b0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
264c0 74 28 70 53 71 6c 2c 20 32 29 2c 0a 20 20 20 20  t(pSql, 2),.    
264d0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
264e0 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c  column_text(pSql
264f0 2c 20 33 29 0a 20 20 20 20 20 20 20 20 29 3b 0a  , 3).        );.
26500 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
26510 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
26520 28 70 41 72 2d 3e 70 2d 3e 6f 75 74 2c 20 22 25  (pAr->p->out, "%
26530 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f  s\n", sqlite3_co
26540 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20  lumn_text(pSql, 
26550 30 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  0));.      }.   
26560 20 7d 0a 20 20 7d 0a 20 20 73 68 65 6c 6c 46 69   }.  }.  shellFi
26570 6e 61 6c 69 7a 65 28 26 72 63 2c 20 70 53 71 6c  nalize(&rc, pSql
26580 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
26590 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d  }.../*.** Implem
265a0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 2e 61 72 20  entation of .ar 
265b0 22 65 58 74 72 61 63 74 22 20 63 6f 6d 6d 61 6e  "eXtract" comman
265c0 64 2e 20 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  d. .*/.static in
265d0 74 20 61 72 45 78 74 72 61 63 74 43 6f 6d 6d 61  t arExtractComma
265e0 6e 64 28 41 72 43 6f 6d 6d 61 6e 64 20 2a 70 41  nd(ArCommand *pA
265f0 72 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  r){.  const char
26600 20 2a 7a 53 71 6c 31 20 3d 20 0a 20 20 20 20 22   *zSql1 = .    "
26610 53 45 4c 45 43 54 20 22 0a 20 20 20 20 22 20 28  SELECT ".    " (
26620 24 64 69 72 20 7c 7c 20 6e 61 6d 65 29 2c 22 0a  $dir || name),".
26630 20 20 20 20 22 20 77 72 69 74 65 66 69 6c 65 28      " writefile(
26640 28 24 64 69 72 20 7c 7c 20 6e 61 6d 65 29 2c 20  ($dir || name), 
26650 25 73 2c 20 6d 6f 64 65 2c 20 6d 74 69 6d 65 29  %s, mode, mtime)
26660 20 22 0a 20 20 20 20 22 46 52 4f 4d 20 25 73 20   ".    "FROM %s 
26670 57 48 45 52 45 20 28 25 73 29 20 41 4e 44 20 28  WHERE (%s) AND (
26680 64 61 74 61 20 49 53 20 4e 55 4c 4c 20 4f 52 20  data IS NULL OR 
26690 24 64 69 72 4f 6e 6c 79 20 3d 20 30 29 22 3b 0a  $dirOnly = 0)";.
266a0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  .  const char *a
266b0 7a 45 78 74 72 61 41 72 67 5b 5d 20 3d 20 7b 20  zExtraArg[] = { 
266c0 0a 20 20 20 20 22 73 71 6c 61 72 5f 75 6e 63 6f  .    "sqlar_unco
266d0 6d 70 72 65 73 73 28 64 61 74 61 2c 20 73 7a 29  mpress(data, sz)
266e0 22 2c 0a 20 20 20 20 22 64 61 74 61 22 0a 20 20  ",.    "data".  
266f0 7d 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  };..  sqlite3_st
26700 6d 74 20 2a 70 53 71 6c 20 3d 20 30 3b 0a 20 20  mt *pSql = 0;.  
26710 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
26720 4f 4b 3b 0a 20 20 63 68 61 72 20 2a 7a 44 69 72  OK;.  char *zDir
26730 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 57   = 0;.  char *zW
26740 68 65 72 65 20 3d 20 30 3b 0a 20 20 69 6e 74 20  here = 0;.  int 
26750 69 2c 20 6a 3b 0a 0a 20 20 2f 2a 20 49 66 20 61  i, j;..  /* If a
26760 72 67 75 6d 65 6e 74 73 20 61 72 65 20 73 70 65  rguments are spe
26770 63 69 66 69 65 64 2c 20 63 68 65 63 6b 20 74 68  cified, check th
26780 61 74 20 74 68 65 79 20 61 63 74 75 61 6c 6c 79  at they actually
26790 20 65 78 69 73 74 20 77 69 74 68 69 6e 0a 20 20   exist within.  
267a0 2a 2a 20 74 68 65 20 61 72 63 68 69 76 65 20 62  ** the archive b
267b0 65 66 6f 72 65 20 70 72 6f 63 65 65 64 69 6e 67  efore proceeding
267c0 2e 20 41 6e 64 20 66 6f 72 6d 75 6c 61 74 65 20  . And formulate 
267d0 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 74  a WHERE clause t
267e0 6f 0a 20 20 2a 2a 20 6d 61 74 63 68 20 74 68 65  o.  ** match the
267f0 6d 2e 20 20 2a 2f 0a 20 20 72 63 20 3d 20 61 72  m.  */.  rc = ar
26800 43 68 65 63 6b 45 6e 74 72 69 65 73 28 70 41 72  CheckEntries(pAr
26810 29 3b 0a 20 20 61 72 57 68 65 72 65 43 6c 61 75  );.  arWhereClau
26820 73 65 28 26 72 63 2c 20 70 41 72 2c 20 26 7a 57  se(&rc, pAr, &zW
26830 68 65 72 65 29 3b 0a 0a 20 20 69 66 28 20 72 63  here);..  if( rc
26840 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
26850 20 20 20 69 66 28 20 70 41 72 2d 3e 7a 44 69 72     if( pAr->zDir
26860 20 29 7b 0a 20 20 20 20 20 20 7a 44 69 72 20 3d   ){.      zDir =
26870 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
26880 28 22 25 73 2f 22 2c 20 70 41 72 2d 3e 7a 44 69  ("%s/", pAr->zDi
26890 72 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  r);.    }else{. 
268a0 20 20 20 20 20 7a 44 69 72 20 3d 20 73 71 6c 69       zDir = sqli
268b0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 22 29 3b  te3_mprintf("");
268c0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a  .    }.    if( z
268d0 44 69 72 3d 3d 30 20 29 20 72 63 20 3d 20 53 51  Dir==0 ) rc = SQ
268e0 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a  LITE_NOMEM;.  }.
268f0 0a 20 20 73 68 65 6c 6c 50 72 65 70 61 72 65 50  .  shellPrepareP
26900 72 69 6e 74 66 28 70 41 72 2d 3e 64 62 2c 20 26  rintf(pAr->db, &
26910 72 63 2c 20 26 70 53 71 6c 2c 20 7a 53 71 6c 31  rc, &pSql, zSql1
26920 2c 20 0a 20 20 20 20 20 20 61 7a 45 78 74 72 61  , .      azExtra
26930 41 72 67 5b 70 41 72 2d 3e 62 5a 69 70 5d 2c 20  Arg[pAr->bZip], 
26940 70 41 72 2d 3e 7a 53 72 63 54 61 62 6c 65 2c 20  pAr->zSrcTable, 
26950 7a 57 68 65 72 65 0a 20 20 29 3b 0a 0a 20 20 69  zWhere.  );..  i
26960 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
26970 20 29 7b 0a 20 20 20 20 6a 20 3d 20 73 71 6c 69   ){.    j = sqli
26980 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
26990 65 72 5f 69 6e 64 65 78 28 70 53 71 6c 2c 20 22  er_index(pSql, "
269a0 24 64 69 72 22 29 3b 0a 20 20 20 20 73 71 6c 69  $dir");.    sqli
269b0 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53  te3_bind_text(pS
269c0 71 6c 2c 20 6a 2c 20 7a 44 69 72 2c 20 2d 31 2c  ql, j, zDir, -1,
269d0 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
269e0 0a 0a 20 20 20 20 2f 2a 20 52 75 6e 20 74 68 65  ..    /* Run the
269f0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
26a00 74 20 74 77 69 63 65 2e 20 54 68 65 20 66 69 72  t twice. The fir
26a10 73 74 20 74 69 6d 65 2c 20 77 72 69 74 65 66 69  st time, writefi
26a20 6c 65 28 29 20 69 73 20 63 61 6c 6c 65 64 0a 20  le() is called. 
26a30 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 61 72     ** for all ar
26a40 63 68 69 76 65 20 6d 65 6d 62 65 72 73 20 74 68  chive members th
26a50 61 74 20 73 68 6f 75 6c 64 20 62 65 20 65 78 74  at should be ext
26a60 72 61 63 74 65 64 2e 20 54 68 65 20 73 65 63 6f  racted. The seco
26a70 6e 64 20 74 69 6d 65 2c 0a 20 20 20 20 2a 2a 20  nd time,.    ** 
26a80 6f 6e 6c 79 20 66 6f 72 20 74 68 65 20 64 69 72  only for the dir
26a90 65 63 74 6f 72 69 65 73 2e 20 54 68 69 73 20 69  ectories. This i
26aa0 73 20 62 65 63 61 75 73 65 20 74 68 65 20 74 69  s because the ti
26ab0 6d 65 73 74 61 6d 70 73 20 66 6f 72 0a 20 20 20  mestamps for.   
26ac0 20 2a 2a 20 65 78 74 72 61 63 74 65 64 20 64 69   ** extracted di
26ad0 72 65 63 74 6f 72 69 65 73 20 6d 75 73 74 20 62  rectories must b
26ae0 65 20 72 65 73 65 74 20 61 66 74 65 72 20 74 68  e reset after th
26af0 65 79 20 61 72 65 20 70 6f 70 75 6c 61 74 65 64  ey are populated
26b00 20 28 61 73 0a 20 20 20 20 2a 2a 20 70 6f 70 75   (as.    ** popu
26b10 6c 61 74 69 6e 67 20 74 68 65 6d 20 63 68 61 6e  lating them chan
26b20 67 65 73 20 74 68 65 20 74 69 6d 65 73 74 61 6d  ges the timestam
26b30 70 29 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  p).  */.    for(
26b40 69 3d 30 3b 20 69 3c 32 3b 20 69 2b 2b 29 7b 0a  i=0; i<2; i++){.
26b50 20 20 20 20 20 20 6a 20 3d 20 73 71 6c 69 74 65        j = sqlite
26b60 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
26b70 5f 69 6e 64 65 78 28 70 53 71 6c 2c 20 22 24 64  _index(pSql, "$d
26b80 69 72 4f 6e 6c 79 22 29 3b 0a 20 20 20 20 20 20  irOnly");.      
26b90 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
26ba0 28 70 53 71 6c 2c 20 6a 2c 20 69 29 3b 0a 20 20  (pSql, j, i);.  
26bb0 20 20 20 20 69 66 28 20 70 41 72 2d 3e 62 44 72      if( pAr->bDr
26bc0 79 52 75 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  yRun ){.        
26bd0 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41 72 2d  utf8_printf(pAr-
26be0 3e 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22 2c  >p->out, "%s\n",
26bf0 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 70 53 71   sqlite3_sql(pSq
26c00 6c 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  l));.      }else
26c10 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  {.        while(
26c20 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
26c30 26 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71  & SQLITE_ROW==sq
26c40 6c 69 74 65 33 5f 73 74 65 70 28 70 53 71 6c 29  lite3_step(pSql)
26c50 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
26c60 28 20 69 3d 3d 30 20 26 26 20 70 41 72 2d 3e 62  ( i==0 && pAr->b
26c70 56 65 72 62 6f 73 65 20 29 7b 0a 20 20 20 20 20  Verbose ){.     
26c80 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
26c90 74 66 28 70 41 72 2d 3e 70 2d 3e 6f 75 74 2c 20  tf(pAr->p->out, 
26ca0 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f  "%s\n", sqlite3_
26cb0 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c  column_text(pSql
26cc0 2c 20 30 29 29 3b 0a 20 20 20 20 20 20 20 20 20  , 0));.         
26cd0 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
26ce0 20 20 20 7d 0a 20 20 20 20 20 20 73 68 65 6c 6c     }.      shell
26cf0 52 65 73 65 74 28 26 72 63 2c 20 70 53 71 6c 29  Reset(&rc, pSql)
26d00 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 68 65 6c  ;.    }.    shel
26d10 6c 46 69 6e 61 6c 69 7a 65 28 26 72 63 2c 20 70  lFinalize(&rc, p
26d20 53 71 6c 29 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c  Sql);.  }..  sql
26d30 69 74 65 33 5f 66 72 65 65 28 7a 44 69 72 29 3b  ite3_free(zDir);
26d40 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
26d50 7a 57 68 65 72 65 29 3b 0a 20 20 72 65 74 75 72  zWhere);.  retur
26d60 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  n rc;.}../*.** R
26d70 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  un the SQL state
26d80 6d 65 6e 74 20 69 6e 20 7a 53 71 6c 2e 20 20 4f  ment in zSql.  O
26d90 72 20 69 66 20 64 6f 69 6e 67 20 61 20 2d 2d 64  r if doing a --d
26da0 72 79 72 75 6e 2c 20 6d 65 72 65 6c 79 20 70 72  ryrun, merely pr
26db0 69 6e 74 20 69 74 20 6f 75 74 2e 0a 2a 2f 0a 73  int it out..*/.s
26dc0 74 61 74 69 63 20 69 6e 74 20 61 72 45 78 65 63  tatic int arExec
26dd0 53 71 6c 28 41 72 43 6f 6d 6d 61 6e 64 20 2a 70  Sql(ArCommand *p
26de0 41 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  Ar, const char *
26df0 7a 53 71 6c 29 7b 0a 20 20 69 6e 74 20 72 63 3b  zSql){.  int rc;
26e00 0a 20 20 69 66 28 20 70 41 72 2d 3e 62 44 72 79  .  if( pAr->bDry
26e10 52 75 6e 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  Run ){.    utf8_
26e20 70 72 69 6e 74 66 28 70 41 72 2d 3e 70 2d 3e 6f  printf(pAr->p->o
26e30 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 53 71 6c  ut, "%s\n", zSql
26e40 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
26e50 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a  TE_OK;.  }else{.
26e60 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d      char *zErr =
26e70 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   0;.    rc = sql
26e80 69 74 65 33 5f 65 78 65 63 28 70 41 72 2d 3e 64  ite3_exec(pAr->d
26e90 62 2c 20 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 26  b, zSql, 0, 0, &
26ea0 7a 45 72 72 29 3b 0a 20 20 20 20 69 66 28 20 7a  zErr);.    if( z
26eb0 45 72 72 20 29 7b 0a 20 20 20 20 20 20 75 74 66  Err ){.      utf
26ec0 38 5f 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c  8_printf(stdout,
26ed0 20 22 45 52 52 4f 52 3a 20 25 73 5c 6e 22 2c 20   "ERROR: %s\n", 
26ee0 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 73 71 6c  zErr);.      sql
26ef0 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b  ite3_free(zErr);
26f00 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
26f10 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  urn rc;.}.../*.*
26f20 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * Implementation
26f30 20 6f 66 20 2e 61 72 20 22 63 72 65 61 74 65 22   of .ar "create"
26f40 20 61 6e 64 20 22 75 70 64 61 74 65 22 20 63 6f   and "update" co
26f50 6d 6d 61 6e 64 73 2e 0a 2a 2a 0a 2a 2a 20 43 72  mmands..**.** Cr
26f60 65 61 74 65 20 74 68 65 20 22 73 71 6c 61 72 22  eate the "sqlar"
26f70 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61   table in the da
26f80 74 61 62 61 73 65 20 69 66 20 69 74 20 64 6f 65  tabase if it doe
26f90 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 65 78  s not already ex
26fa0 69 73 74 2e 0a 2a 2a 20 54 68 65 6e 20 61 64 64  ist..** Then add
26fb0 20 65 61 63 68 20 66 69 6c 65 20 69 6e 20 74 68   each file in th
26fc0 65 20 61 7a 46 69 6c 65 5b 5d 20 61 72 72 61 79  e azFile[] array
26fd0 20 74 6f 20 74 68 65 20 61 72 63 68 69 76 65 2e   to the archive.
26fe0 20 44 69 72 65 63 74 6f 72 69 65 73 0a 2a 2a 20   Directories.** 
26ff0 61 72 65 20 61 64 64 65 64 20 72 65 63 75 72 73  are added recurs
27000 69 76 65 6c 79 2e 20 49 66 20 61 72 67 75 6d 65  ively. If argume
27010 6e 74 20 62 56 65 72 62 6f 73 65 20 69 73 20 6e  nt bVerbose is n
27020 6f 6e 2d 7a 65 72 6f 2c 20 61 20 6d 65 73 73 61  on-zero, a messa
27030 67 65 20 69 73 0a 2a 2a 20 70 72 69 6e 74 65 64  ge is.** printed
27040 20 6f 6e 20 73 74 64 6f 75 74 20 66 6f 72 20 65   on stdout for e
27050 61 63 68 20 66 69 6c 65 20 61 72 63 68 69 76 65  ach file archive
27060 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 72 65  d..**.** The cre
27070 61 74 65 20 63 6f 6d 6d 61 6e 64 20 69 73 20 74  ate command is t
27080 68 65 20 73 61 6d 65 20 61 73 20 75 70 64 61 74  he same as updat
27090 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 69  e, except that i
270a0 74 20 64 72 6f 70 73 0a 2a 2a 20 61 6e 79 20 65  t drops.** any e
270b0 78 69 73 74 69 6e 67 20 22 73 71 6c 61 72 22 20  xisting "sqlar" 
270c0 74 61 62 6c 65 20 62 65 66 6f 72 65 20 62 65 67  table before beg
270d0 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69  inning..*/.stati
270e0 63 20 69 6e 74 20 61 72 43 72 65 61 74 65 4f 72  c int arCreateOr
270f0 55 70 64 61 74 65 43 6f 6d 6d 61 6e 64 28 0a 20  UpdateCommand(. 
27100 20 41 72 43 6f 6d 6d 61 6e 64 20 2a 70 41 72 2c   ArCommand *pAr,
27110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27120 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
27130 6d 65 6e 74 73 20 61 6e 64 20 6f 70 74 69 6f 6e  ments and option
27140 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 70 64 61  s */.  int bUpda
27150 74 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  te              
27160 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 66         /* true f
27170 6f 72 20 61 20 2d 2d 63 72 65 61 74 65 2e 20 20  or a --create.  
27180 66 61 6c 73 65 20 66 6f 72 20 2d 2d 75 70 64 61  false for --upda
27190 74 65 20 2a 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74  te */.){.  const
271a0 20 63 68 61 72 20 2a 7a 43 72 65 61 74 65 20 3d   char *zCreate =
271b0 20 0a 20 20 20 20 20 20 22 43 52 45 41 54 45 20   .      "CREATE 
271c0 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49  TABLE IF NOT EXI
271d0 53 54 53 20 73 71 6c 61 72 28 5c 6e 22 0a 20 20  STS sqlar(\n".  
271e0 20 20 20 20 22 20 20 6e 61 6d 65 20 54 45 58 54      "  name TEXT
271f0 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 20 2d   PRIMARY KEY,  -
27200 2d 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 69  - name of the fi
27210 6c 65 5c 6e 22 0a 20 20 20 20 20 20 22 20 20 6d  le\n".      "  m
27220 6f 64 65 20 49 4e 54 2c 20 20 20 20 20 20 20 20  ode INT,        
27230 20 20 20 20 20 20 20 2d 2d 20 61 63 63 65 73 73         -- access
27240 20 70 65 72 6d 69 73 73 69 6f 6e 73 5c 6e 22 0a   permissions\n".
27250 20 20 20 20 20 20 22 20 20 6d 74 69 6d 65 20 49        "  mtime I
27260 4e 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  NT,             
27270 20 2d 2d 20 6c 61 73 74 20 6d 6f 64 69 66 69 63   -- last modific
27280 61 74 69 6f 6e 20 74 69 6d 65 5c 6e 22 0a 20 20  ation time\n".  
27290 20 20 20 20 22 20 20 73 7a 20 49 4e 54 2c 20 20      "  sz INT,  
272a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
272b0 2d 20 6f 72 69 67 69 6e 61 6c 20 66 69 6c 65 20  - original file 
272c0 73 69 7a 65 5c 6e 22 0a 20 20 20 20 20 20 22 20  size\n".      " 
272d0 20 64 61 74 61 20 42 4c 4f 42 20 20 20 20 20 20   data BLOB      
272e0 20 20 20 20 20 20 20 20 20 2d 2d 20 63 6f 6d 70           -- comp
272f0 72 65 73 73 65 64 20 63 6f 6e 74 65 6e 74 5c 6e  ressed content\n
27300 22 0a 20 20 20 20 20 20 22 29 22 3b 0a 20 20 63  ".      ")";.  c
27310 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 72 6f 70  onst char *zDrop
27320 20 3d 20 22 44 52 4f 50 20 54 41 42 4c 45 20 49   = "DROP TABLE I
27330 46 20 45 58 49 53 54 53 20 73 71 6c 61 72 22 3b  F EXISTS sqlar";
27340 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
27350 49 6e 73 65 72 74 46 6d 74 20 3d 20 0a 20 20 20  InsertFmt = .   
27360 20 20 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20    "REPLACE INTO 
27370 73 71 6c 61 72 28 6e 61 6d 65 2c 6d 6f 64 65 2c  sqlar(name,mode,
27380 6d 74 69 6d 65 2c 73 7a 2c 64 61 74 61 29 5c 6e  mtime,sz,data)\n
27390 22 0a 20 20 20 20 20 22 20 20 53 45 4c 45 43 54  ".     "  SELECT
273a0 5c 6e 22 0a 20 20 20 20 20 22 20 20 20 20 25 73  \n".     "    %s
273b0 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 20 20 6d  ,\n".     "    m
273c0 6f 64 65 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ode,\n".     "  
273d0 20 20 6d 74 69 6d 65 2c 5c 6e 22 0a 20 20 20 20    mtime,\n".    
273e0 20 22 20 20 20 20 43 41 53 45 20 73 75 62 73 74   "    CASE subst
273f0 72 28 6c 73 6d 6f 64 65 28 6d 6f 64 65 29 2c 31  r(lsmode(mode),1
27400 2c 31 29 5c 6e 22 0a 20 20 20 20 20 22 20 20 20  ,1)\n".     "   
27410 20 20 20 57 48 45 4e 20 27 2d 27 20 54 48 45 4e     WHEN '-' THEN
27420 20 6c 65 6e 67 74 68 28 64 61 74 61 29 5c 6e 22   length(data)\n"
27430 0a 20 20 20 20 20 22 20 20 20 20 20 20 57 48 45  .     "      WHE
27440 4e 20 27 64 27 20 54 48 45 4e 20 30 5c 6e 22 0a  N 'd' THEN 0\n".
27450 20 20 20 20 20 22 20 20 20 20 20 20 45 4c 53 45       "      ELSE
27460 20 2d 31 20 45 4e 44 2c 5c 6e 22 0a 20 20 20 20   -1 END,\n".    
27470 20 22 20 20 20 20 43 41 53 45 20 57 48 45 4e 20   "    CASE WHEN 
27480 6c 73 6d 6f 64 65 28 6d 6f 64 65 29 20 4c 49 4b  lsmode(mode) LIK
27490 45 20 27 64 25 25 27 20 54 48 45 4e 20 4e 55 4c  E 'd%%' THEN NUL
274a0 4c 20 65 6c 73 65 20 64 61 74 61 20 45 4e 44 5c  L else data END\
274b0 6e 22 0a 20 20 20 20 20 22 20 20 46 52 4f 4d 20  n".     "  FROM 
274c0 66 73 64 69 72 28 25 51 2c 25 51 29 5c 6e 22 0a  fsdir(%Q,%Q)\n".
274d0 20 20 20 20 20 22 20 20 57 48 45 52 45 20 6c 73       "  WHERE ls
274e0 6d 6f 64 65 28 6d 6f 64 65 29 20 4e 4f 54 20 4c  mode(mode) NOT L
274f0 49 4b 45 20 27 3f 25 25 27 3b 22 3b 0a 20 20 69  IKE '?%%';";.  i
27500 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
27510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
27520 2a 20 46 6f 72 20 69 74 65 72 61 74 69 6e 67 20  * For iterating 
27530 74 68 72 6f 75 67 68 20 61 7a 46 69 6c 65 5b 5d  through azFile[]
27540 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
27550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27560 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
27570 63 6f 64 65 20 2a 2f 0a 0a 20 20 72 63 20 3d 20  code */..  rc = 
27580 61 72 45 78 65 63 53 71 6c 28 70 41 72 2c 20 22  arExecSql(pAr, "
27590 53 41 56 45 50 4f 49 4e 54 20 61 72 3b 22 29 3b  SAVEPOINT ar;");
275a0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
275b0 45 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20 72 63  E_OK ) return rc
275c0 3b 0a 20 20 69 66 28 20 62 55 70 64 61 74 65 3d  ;.  if( bUpdate=
275d0 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 61  =0 ){.    rc = a
275e0 72 45 78 65 63 53 71 6c 28 70 41 72 2c 20 7a 44  rExecSql(pAr, zD
275f0 72 6f 70 29 3b 0a 20 20 20 20 69 66 28 20 72 63  rop);.    if( rc
27600 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 65  !=SQLITE_OK ) re
27610 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 20 20 72  turn rc;.  }.  r
27620 63 20 3d 20 61 72 45 78 65 63 53 71 6c 28 70 41  c = arExecSql(pA
27630 72 2c 20 7a 43 72 65 61 74 65 29 3b 0a 20 20 66  r, zCreate);.  f
27640 6f 72 28 69 3d 30 3b 20 69 3c 70 41 72 2d 3e 6e  or(i=0; i<pAr->n
27650 41 72 67 20 26 26 20 72 63 3d 3d 53 51 4c 49 54  Arg && rc==SQLIT
27660 45 5f 4f 4b 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  E_OK; i++){.    
27670 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 73 71 6c  char *zSql = sql
27680 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 7a 49 6e  ite3_mprintf(zIn
27690 73 65 72 74 46 6d 74 2c 0a 20 20 20 20 20 20 20  sertFmt,.       
276a0 20 70 41 72 2d 3e 62 56 65 72 62 6f 73 65 20 3f   pAr->bVerbose ?
276b0 20 22 73 68 65 6c 6c 5f 70 75 74 73 6e 6c 28 6e   "shell_putsnl(n
276c0 61 6d 65 29 22 20 3a 20 22 6e 61 6d 65 22 2c 0a  ame)" : "name",.
276d0 20 20 20 20 20 20 20 20 70 41 72 2d 3e 61 7a 41          pAr->azA
276e0 72 67 5b 69 5d 2c 20 70 41 72 2d 3e 7a 44 69 72  rg[i], pAr->zDir
276f0 29 3b 0a 20 20 20 20 72 63 20 3d 20 61 72 45 78  );.    rc = arEx
27700 65 63 53 71 6c 28 70 41 72 2c 20 7a 53 71 6c 29  ecSql(pAr, zSql)
27710 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
27720 65 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 0a 20 20  ee(zSql);.  }.  
27730 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
27740 4b 20 29 7b 0a 20 20 20 20 61 72 45 78 65 63 53  K ){.    arExecS
27750 71 6c 28 70 41 72 2c 20 22 52 4f 4c 4c 42 41 43  ql(pAr, "ROLLBAC
27760 4b 20 54 4f 20 61 72 3b 20 52 45 4c 45 41 53 45  K TO ar; RELEASE
27770 20 61 72 3b 22 29 3b 0a 20 20 7d 65 6c 73 65 7b   ar;");.  }else{
27780 0a 20 20 20 20 72 63 20 3d 20 61 72 45 78 65 63  .    rc = arExec
27790 53 71 6c 28 70 41 72 2c 20 22 52 45 4c 45 41 53  Sql(pAr, "RELEAS
277a0 45 20 61 72 3b 22 29 3b 0a 20 20 7d 0a 20 20 72  E ar;");.  }.  r
277b0 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
277c0 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** Implementatio
277d0 6e 20 6f 66 20 22 2e 61 72 22 20 64 6f 74 20 63  n of ".ar" dot c
277e0 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69  ommand..*/.stati
277f0 63 20 69 6e 74 20 61 72 44 6f 74 43 6f 6d 6d 61  c int arDotComma
27800 6e 64 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65  nd(.  ShellState
27810 20 2a 70 53 74 61 74 65 2c 20 20 20 20 20 20 20   *pState,       
27820 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
27830 20 73 68 65 6c 6c 20 74 6f 6f 6c 20 73 74 61 74   shell tool stat
27840 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
27850 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20  Arg,            
27860 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
27870 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  of arguments pas
27880 73 65 64 20 74 6f 20 64 6f 74 20 63 6f 6d 6d 61  sed to dot comma
27890 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  nd */.  int nArg
278a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
278c0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
278d0 61 7a 41 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20  azArg[] */.){.  
278e0 41 72 43 6f 6d 6d 61 6e 64 20 63 6d 64 3b 0a 20  ArCommand cmd;. 
278f0 20 69 6e 74 20 72 63 3b 0a 20 20 6d 65 6d 73 65   int rc;.  memse
27900 74 28 26 63 6d 64 2c 20 30 2c 20 73 69 7a 65 6f  t(&cmd, 0, sizeo
27910 66 28 63 6d 64 29 29 3b 0a 20 20 72 63 20 3d 20  f(cmd));.  rc = 
27920 61 72 50 61 72 73 65 43 6f 6d 6d 61 6e 64 28 61  arParseCommand(a
27930 7a 41 72 67 2c 20 6e 41 72 67 2c 20 26 63 6d 64  zArg, nArg, &cmd
27940 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
27950 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 6e  ITE_OK ){.    in
27960 74 20 65 44 62 54 79 70 65 20 3d 20 53 48 45 4c  t eDbType = SHEL
27970 4c 5f 4f 50 45 4e 5f 55 4e 53 50 45 43 3b 0a 20  L_OPEN_UNSPEC;. 
27980 20 20 20 63 6d 64 2e 70 20 3d 20 70 53 74 61 74     cmd.p = pStat
27990 65 3b 0a 20 20 20 20 63 6d 64 2e 64 62 20 3d 20  e;.    cmd.db = 
279a0 70 53 74 61 74 65 2d 3e 64 62 3b 0a 20 20 20 20  pState->db;.    
279b0 69 66 28 20 63 6d 64 2e 7a 46 69 6c 65 20 29 7b  if( cmd.zFile ){
279c0 0a 20 20 20 20 20 20 65 44 62 54 79 70 65 20 3d  .      eDbType =
279d0 20 64 65 64 75 63 65 44 61 74 61 62 61 73 65 54   deduceDatabaseT
279e0 79 70 65 28 63 6d 64 2e 7a 46 69 6c 65 29 3b 0a  ype(cmd.zFile);.
279f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
27a00 20 65 44 62 54 79 70 65 20 3d 20 70 53 74 61 74   eDbType = pStat
27a10 65 2d 3e 6f 70 65 6e 4d 6f 64 65 3b 0a 20 20 20  e->openMode;.   
27a20 20 7d 0a 20 20 20 20 69 66 28 20 65 44 62 54 79   }.    if( eDbTy
27a30 70 65 3d 3d 53 48 45 4c 4c 5f 4f 50 45 4e 5f 5a  pe==SHELL_OPEN_Z
27a40 49 50 46 49 4c 45 20 29 7b 0a 20 20 20 20 20 20  IPFILE ){.      
27a50 69 66 28 20 63 6d 64 2e 7a 46 69 6c 65 3d 3d 30  if( cmd.zFile==0
27a60 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6d 64 2e   ){.        cmd.
27a70 7a 53 72 63 54 61 62 6c 65 20 3d 20 73 71 6c 69  zSrcTable = sqli
27a80 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 7a 69 70  te3_mprintf("zip
27a90 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ");.      }else{
27aa0 0a 20 20 20 20 20 20 20 20 63 6d 64 2e 7a 53 72  .        cmd.zSr
27ab0 63 54 61 62 6c 65 20 3d 20 73 71 6c 69 74 65 33  cTable = sqlite3
27ac0 5f 6d 70 72 69 6e 74 66 28 22 7a 69 70 66 69 6c  _mprintf("zipfil
27ad0 65 28 25 51 29 22 2c 20 63 6d 64 2e 7a 46 69 6c  e(%Q)", cmd.zFil
27ae0 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
27af0 20 20 69 66 28 20 63 6d 64 2e 65 43 6d 64 3d 3d    if( cmd.eCmd==
27b00 41 52 5f 43 4d 44 5f 43 52 45 41 54 45 20 7c 7c  AR_CMD_CREATE ||
27b10 20 63 6d 64 2e 65 43 6d 64 3d 3d 41 52 5f 43 4d   cmd.eCmd==AR_CM
27b20 44 5f 55 50 44 41 54 45 20 29 7b 0a 20 20 20 20  D_UPDATE ){.    
27b30 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
27b40 73 74 64 65 72 72 2c 20 22 7a 69 70 20 61 72 63  stderr, "zip arc
27b50 68 69 76 65 73 20 61 72 65 20 72 65 61 64 2d 6f  hives are read-o
27b60 6e 6c 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20  nly\n");.       
27b70 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
27b80 4f 52 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  OR;.        goto
27b90 20 65 6e 64 5f 61 72 5f 63 6f 6d 6d 61 6e 64 3b   end_ar_command;
27ba0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63  .      }.      c
27bb0 6d 64 2e 62 5a 69 70 20 3d 20 31 3b 0a 20 20 20  md.bZip = 1;.   
27bc0 20 7d 65 6c 73 65 20 69 66 28 20 63 6d 64 2e 7a   }else if( cmd.z
27bd0 46 69 6c 65 20 29 7b 0a 20 20 20 20 20 20 69 6e  File ){.      in
27be0 74 20 66 6c 61 67 73 3b 0a 20 20 20 20 20 20 69  t flags;.      i
27bf0 66 28 20 63 6d 64 2e 62 41 70 70 65 6e 64 20 29  f( cmd.bAppend )
27c00 20 65 44 62 54 79 70 65 20 3d 20 53 48 45 4c 4c   eDbType = SHELL
27c10 5f 4f 50 45 4e 5f 41 50 50 45 4e 44 56 46 53 3b  _OPEN_APPENDVFS;
27c20 0a 20 20 20 20 20 20 69 66 28 20 63 6d 64 2e 65  .      if( cmd.e
27c30 43 6d 64 3d 3d 41 52 5f 43 4d 44 5f 43 52 45 41  Cmd==AR_CMD_CREA
27c40 54 45 20 7c 7c 20 63 6d 64 2e 65 43 6d 64 3d 3d  TE || cmd.eCmd==
27c50 41 52 5f 43 4d 44 5f 55 50 44 41 54 45 20 29 7b  AR_CMD_UPDATE ){
27c60 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 20 3d  .        flags =
27c70 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
27c80 44 57 52 49 54 45 7c 53 51 4c 49 54 45 5f 4f 50  DWRITE|SQLITE_OP
27c90 45 4e 5f 43 52 45 41 54 45 3b 0a 20 20 20 20 20  EN_CREATE;.     
27ca0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
27cb0 66 6c 61 67 73 20 3d 20 53 51 4c 49 54 45 5f 4f  flags = SQLITE_O
27cc0 50 45 4e 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  PEN_READONLY;.  
27cd0 20 20 20 20 7d 0a 20 20 20 20 20 20 63 6d 64 2e      }.      cmd.
27ce0 64 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 66  db = 0;.      if
27cf0 28 20 63 6d 64 2e 62 44 72 79 52 75 6e 20 29 7b  ( cmd.bDryRun ){
27d00 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
27d10 69 6e 74 66 28 70 53 74 61 74 65 2d 3e 6f 75 74  intf(pState->out
27d20 2c 20 22 2d 2d 20 6f 70 65 6e 20 64 61 74 61 62  , "-- open datab
27d30 61 73 65 20 27 25 73 27 25 73 5c 6e 22 2c 20 63  ase '%s'%s\n", c
27d40 6d 64 2e 7a 46 69 6c 65 2c 0a 20 20 20 20 20 20  md.zFile,.      
27d50 20 20 20 20 20 20 20 65 44 62 54 79 70 65 3d 3d         eDbType==
27d60 53 48 45 4c 4c 5f 4f 50 45 4e 5f 41 50 50 45 4e  SHELL_OPEN_APPEN
27d70 44 56 46 53 20 3f 20 22 20 75 73 69 6e 67 20 27  DVFS ? " using '
27d80 61 70 6e 64 76 66 73 27 22 20 3a 20 22 22 29 3b  apndvfs'" : "");
27d90 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
27da0 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  c = sqlite3_open
27db0 5f 76 32 28 63 6d 64 2e 7a 46 69 6c 65 2c 20 26  _v2(cmd.zFile, &
27dc0 63 6d 64 2e 64 62 2c 20 66 6c 61 67 73 2c 20 0a  cmd.db, flags, .
27dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 44 62               eDb
27de0 54 79 70 65 3d 3d 53 48 45 4c 4c 5f 4f 50 45 4e  Type==SHELL_OPEN
27df0 5f 41 50 50 45 4e 44 56 46 53 20 3f 20 22 61 70  _APPENDVFS ? "ap
27e00 6e 64 76 66 73 22 20 3a 20 30 29 3b 0a 20 20 20  ndvfs" : 0);.   
27e10 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
27e20 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
27e30 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
27e40 72 72 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e  rr, "cannot open
27e50 20 66 69 6c 65 3a 20 25 73 20 28 25 73 29 5c 6e   file: %s (%s)\n
27e60 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
27e70 63 6d 64 2e 7a 46 69 6c 65 2c 20 73 71 6c 69 74  cmd.zFile, sqlit
27e80 65 33 5f 65 72 72 6d 73 67 28 63 6d 64 2e 64 62  e3_errmsg(cmd.db
27e90 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20  ).        );.   
27ea0 20 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 61 72       goto end_ar
27eb0 5f 63 6f 6d 6d 61 6e 64 3b 0a 20 20 20 20 20 20  _command;.      
27ec0 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  }.      sqlite3_
27ed0 66 69 6c 65 69 6f 5f 69 6e 69 74 28 63 6d 64 2e  fileio_init(cmd.
27ee0 64 62 2c 20 30 2c 20 30 29 3b 0a 23 69 66 64 65  db, 0, 0);.#ifde
27ef0 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 5a 4c  f SQLITE_HAVE_ZL
27f00 49 42 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  IB.      sqlite3
27f10 5f 73 71 6c 61 72 5f 69 6e 69 74 28 63 6d 64 2e  _sqlar_init(cmd.
27f20 64 62 2c 20 30 2c 20 30 29 3b 0a 23 65 6e 64 69  db, 0, 0);.#endi
27f30 66 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  f.      sqlite3_
27f40 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
27f50 63 6d 64 2e 64 62 2c 20 22 73 68 65 6c 6c 5f 70  cmd.db, "shell_p
27f60 75 74 73 6e 6c 22 2c 20 31 2c 20 53 51 4c 49 54  utsnl", 1, SQLIT
27f70 45 5f 55 54 46 38 2c 20 63 6d 64 2e 70 2c 0a 20  E_UTF8, cmd.p,. 
27f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f90 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65               she
27fa0 6c 6c 50 75 74 73 46 75 6e 63 2c 20 30 2c 20 30  llPutsFunc, 0, 0
27fb0 29 3b 0a 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  );..    }.    if
27fc0 28 20 63 6d 64 2e 7a 53 72 63 54 61 62 6c 65 3d  ( cmd.zSrcTable=
27fd0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
27fe0 63 6d 64 2e 65 43 6d 64 21 3d 41 52 5f 43 4d 44  cmd.eCmd!=AR_CMD
27ff0 5f 43 52 45 41 54 45 0a 20 20 20 20 20 20 20 26  _CREATE.       &
28000 26 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  & sqlite3_table_
28010 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28  column_metadata(
28020 63 6d 64 2e 64 62 2c 30 2c 22 73 71 6c 61 72 22  cmd.db,0,"sqlar"
28030 2c 22 6e 61 6d 65 22 2c 30 2c 30 2c 30 2c 30 2c  ,"name",0,0,0,0,
28040 30 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  0).      ){.    
28050 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
28060 73 74 64 65 72 72 2c 20 22 64 61 74 61 62 61 73  stderr, "databas
28070 65 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  e does not conta
28080 69 6e 20 61 6e 20 27 73 71 6c 61 72 27 20 74 61  in an 'sqlar' ta
28090 62 6c 65 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20  ble\n");.       
280a0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
280b0 4f 52 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  OR;.        goto
280c0 20 65 6e 64 5f 61 72 5f 63 6f 6d 6d 61 6e 64 3b   end_ar_command;
280d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63  .      }.      c
280e0 6d 64 2e 7a 53 72 63 54 61 62 6c 65 20 3d 20 73  md.zSrcTable = s
280f0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
28100 73 71 6c 61 72 22 29 3b 0a 20 20 20 20 7d 0a 0a  sqlar");.    }..
28110 20 20 20 20 73 77 69 74 63 68 28 20 63 6d 64 2e      switch( cmd.
28120 65 43 6d 64 20 29 7b 0a 20 20 20 20 20 20 63 61  eCmd ){.      ca
28130 73 65 20 41 52 5f 43 4d 44 5f 43 52 45 41 54 45  se AR_CMD_CREATE
28140 3a 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 61  :.        rc = a
28150 72 43 72 65 61 74 65 4f 72 55 70 64 61 74 65 43  rCreateOrUpdateC
28160 6f 6d 6d 61 6e 64 28 26 63 6d 64 2c 20 30 29 3b  ommand(&cmd, 0);
28170 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
28180 0a 20 20 20 20 20 20 63 61 73 65 20 41 52 5f 43  .      case AR_C
28190 4d 44 5f 45 58 54 52 41 43 54 3a 0a 20 20 20 20  MD_EXTRACT:.    
281a0 20 20 20 20 72 63 20 3d 20 61 72 45 78 74 72 61      rc = arExtra
281b0 63 74 43 6f 6d 6d 61 6e 64 28 26 63 6d 64 29 3b  ctCommand(&cmd);
281c0 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
281d0 0a 20 20 20 20 20 20 63 61 73 65 20 41 52 5f 43  .      case AR_C
281e0 4d 44 5f 4c 49 53 54 3a 0a 20 20 20 20 20 20 20  MD_LIST:.       
281f0 20 72 63 20 3d 20 61 72 4c 69 73 74 43 6f 6d 6d   rc = arListComm
28200 61 6e 64 28 26 63 6d 64 29 3b 0a 20 20 20 20 20  and(&cmd);.     
28210 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20     break;..     
28220 20 63 61 73 65 20 41 52 5f 43 4d 44 5f 48 45 4c   case AR_CMD_HEL
28230 50 3a 0a 20 20 20 20 20 20 20 20 61 72 55 73 61  P:.        arUsa
28240 67 65 28 70 53 74 61 74 65 2d 3e 6f 75 74 29 3b  ge(pState->out);
28250 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
28260 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a  .      default:.
28270 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
28280 63 6d 64 2e 65 43 6d 64 3d 3d 41 52 5f 43 4d 44  cmd.eCmd==AR_CMD
28290 5f 55 50 44 41 54 45 20 29 3b 0a 20 20 20 20 20  _UPDATE );.     
282a0 20 20 20 72 63 20 3d 20 61 72 43 72 65 61 74 65     rc = arCreate
282b0 4f 72 55 70 64 61 74 65 43 6f 6d 6d 61 6e 64 28  OrUpdateCommand(
282c0 26 63 6d 64 2c 20 31 29 3b 0a 20 20 20 20 20 20  &cmd, 1);.      
282d0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
282e0 20 7d 0a 65 6e 64 5f 61 72 5f 63 6f 6d 6d 61 6e   }.end_ar_comman
282f0 64 3a 0a 20 20 69 66 28 20 63 6d 64 2e 64 62 21  d:.  if( cmd.db!
28300 3d 70 53 74 61 74 65 2d 3e 64 62 20 29 7b 0a 20  =pState->db ){. 
28310 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65     sqlite3_close
28320 28 63 6d 64 2e 64 62 29 3b 0a 20 20 7d 0a 20 20  (cmd.db);.  }.  
28330 73 71 6c 69 74 65 33 5f 66 72 65 65 28 63 6d 64  sqlite3_free(cmd
28340 2e 7a 53 72 63 54 61 62 6c 65 29 3b 0a 0a 20 20  .zSrcTable);..  
28350 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 2f 2a 20  return rc;.}./* 
28360 45 6e 64 20 6f 66 20 74 68 65 20 22 2e 61 72 63  End of the ".arc
28370 68 69 76 65 22 20 6f 72 20 22 2e 61 72 22 20 63  hive" or ".ar" c
28380 6f 6d 6d 61 6e 64 20 6c 6f 67 69 63 0a 2a 2a 2a  ommand logic.***
28390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
283a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
283b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
283c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
283d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
283e0 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
283f0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
28400 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20 26 26  VIRTUALTABLE) &&
28410 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28420 48 41 56 45 5f 5a 4c 49 42 29 20 2a 2f 0a 0a 0a  HAVE_ZLIB) */...
28430 2f 2a 0a 2a 2a 20 49 66 20 61 6e 20 69 6e 70 75  /*.** If an inpu
28440 74 20 6c 69 6e 65 20 62 65 67 69 6e 73 20 77 69  t line begins wi
28450 74 68 20 22 2e 22 20 74 68 65 6e 20 69 6e 76 6f  th "." then invo
28460 6b 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ke this routine 
28470 74 6f 0a 2a 2a 20 70 72 6f 63 65 73 73 20 74 68  to.** process th
28480 61 74 20 6c 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 52  at line..**.** R
28490 65 74 75 72 6e 20 31 20 6f 6e 20 65 72 72 6f 72  eturn 1 on error
284a0 2c 20 32 20 74 6f 20 65 78 69 74 2c 20 61 6e 64  , 2 to exit, and
284b0 20 30 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f   0 otherwise..*/
284c0 0a 73 74 61 74 69 63 20 69 6e 74 20 64 6f 5f 6d  .static int do_m
284d0 65 74 61 5f 63 6f 6d 6d 61 6e 64 28 63 68 61 72  eta_command(char
284e0 20 2a 7a 4c 69 6e 65 2c 20 53 68 65 6c 6c 53 74   *zLine, ShellSt
284f0 61 74 65 20 2a 70 29 7b 0a 20 20 69 6e 74 20 68  ate *p){.  int h
28500 20 3d 20 31 3b 0a 20 20 69 6e 74 20 6e 41 72 67   = 1;.  int nArg
28510 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 2c 20 63   = 0;.  int n, c
28520 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 30 3b 0a  ;.  int rc = 0;.
28530 20 20 63 68 61 72 20 2a 61 7a 41 72 67 5b 35 30    char *azArg[50
28540 5d 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ];..#ifndef SQLI
28550 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
28560 41 42 4c 45 0a 20 20 69 66 28 20 70 2d 3e 65 78  ABLE.  if( p->ex
28570 70 65 72 74 2e 70 45 78 70 65 72 74 20 29 7b 0a  pert.pExpert ){.
28580 20 20 20 20 65 78 70 65 72 74 46 69 6e 69 73 68      expertFinish
28590 28 70 2c 20 31 2c 20 30 29 3b 0a 20 20 7d 0a 23  (p, 1, 0);.  }.#
285a0 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 50 61 72 73  endif..  /* Pars
285b0 65 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e 65  e the input line
285c0 20 69 6e 74 6f 20 74 6f 6b 65 6e 73 2e 0a 20 20   into tokens..  
285d0 2a 2f 0a 20 20 77 68 69 6c 65 28 20 7a 4c 69 6e  */.  while( zLin
285e0 65 5b 68 5d 20 26 26 20 6e 41 72 67 3c 41 72 72  e[h] && nArg<Arr
285f0 61 79 53 69 7a 65 28 61 7a 41 72 67 29 20 29 7b  aySize(azArg) ){
28600 0a 20 20 20 20 77 68 69 6c 65 28 20 49 73 53 70  .    while( IsSp
28610 61 63 65 28 7a 4c 69 6e 65 5b 68 5d 29 20 29 7b  ace(zLine[h]) ){
28620 20 68 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20   h++; }.    if( 
28630 7a 4c 69 6e 65 5b 68 5d 3d 3d 30 20 29 20 62 72  zLine[h]==0 ) br
28640 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 7a 4c 69  eak;.    if( zLi
28650 6e 65 5b 68 5d 3d 3d 27 5c 27 27 20 7c 7c 20 7a  ne[h]=='\'' || z
28660 4c 69 6e 65 5b 68 5d 3d 3d 27 22 27 20 29 7b 0a  Line[h]=='"' ){.
28670 20 20 20 20 20 20 69 6e 74 20 64 65 6c 69 6d 20        int delim 
28680 3d 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 3b 0a 20 20  = zLine[h++];.  
28690 20 20 20 20 61 7a 41 72 67 5b 6e 41 72 67 2b 2b      azArg[nArg++
286a0 5d 20 3d 20 26 7a 4c 69 6e 65 5b 68 5d 3b 0a 20  ] = &zLine[h];. 
286b0 20 20 20 20 20 77 68 69 6c 65 28 20 7a 4c 69 6e       while( zLin
286c0 65 5b 68 5d 20 26 26 20 7a 4c 69 6e 65 5b 68 5d  e[h] && zLine[h]
286d0 21 3d 64 65 6c 69 6d 20 29 7b 0a 20 20 20 20 20  !=delim ){.     
286e0 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 3d     if( zLine[h]=
286f0 3d 27 5c 5c 27 20 26 26 20 64 65 6c 69 6d 3d 3d  ='\\' && delim==
28700 27 22 27 20 26 26 20 7a 4c 69 6e 65 5b 68 2b 31  '"' && zLine[h+1
28710 5d 21 3d 30 20 29 20 68 2b 2b 3b 0a 20 20 20 20  ]!=0 ) h++;.    
28720 20 20 20 20 68 2b 2b 3b 0a 20 20 20 20 20 20 7d      h++;.      }
28730 0a 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65  .      if( zLine
28740 5b 68 5d 3d 3d 64 65 6c 69 6d 20 29 7b 0a 20 20  [h]==delim ){.  
28750 20 20 20 20 20 20 7a 4c 69 6e 65 5b 68 2b 2b 5d        zLine[h++]
28760 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
28770 20 20 20 20 69 66 28 20 64 65 6c 69 6d 3d 3d 27      if( delim=='
28780 22 27 20 29 20 72 65 73 6f 6c 76 65 5f 62 61 63  "' ) resolve_bac
28790 6b 73 6c 61 73 68 65 73 28 61 7a 41 72 67 5b 6e  kslashes(azArg[n
287a0 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20 7d 65 6c  Arg-1]);.    }el
287b0 73 65 7b 0a 20 20 20 20 20 20 61 7a 41 72 67 5b  se{.      azArg[
287c0 6e 41 72 67 2b 2b 5d 20 3d 20 26 7a 4c 69 6e 65  nArg++] = &zLine
287d0 5b 68 5d 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  [h];.      while
287e0 28 20 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 21 49  ( zLine[h] && !I
287f0 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d 29  sSpace(zLine[h])
28800 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20 20   ){ h++; }.     
28810 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 20 29 20   if( zLine[h] ) 
28820 7a 4c 69 6e 65 5b 68 2b 2b 5d 20 3d 20 30 3b 0a  zLine[h++] = 0;.
28830 20 20 20 20 20 20 72 65 73 6f 6c 76 65 5f 62 61        resolve_ba
28840 63 6b 73 6c 61 73 68 65 73 28 61 7a 41 72 67 5b  ckslashes(azArg[
28850 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20 7d 0a  nArg-1]);.    }.
28860 20 20 7d 0a 0a 20 20 2f 2a 20 50 72 6f 63 65 73    }..  /* Proces
28870 73 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e 65  s the input line
28880 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e 41 72  ..  */.  if( nAr
28890 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  g==0 ) return 0;
288a0 20 2f 2a 20 6e 6f 20 74 6f 6b 65 6e 73 2c 20 6e   /* no tokens, n
288b0 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 20 6e 20 3d  o error */.  n =
288c0 20 73 74 72 6c 65 6e 33 30 28 61 7a 41 72 67 5b   strlen30(azArg[
288d0 30 5d 29 3b 0a 20 20 63 20 3d 20 61 7a 41 72 67  0]);.  c = azArg
288e0 5b 30 5d 5b 30 5d 3b 0a 20 20 63 6c 65 61 72 54  [0][0];.  clearT
288f0 65 6d 70 46 69 6c 65 28 70 29 3b 0a 0a 23 69 66  empFile(p);..#if
28900 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28910 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
28920 20 69 66 28 20 63 3d 3d 27 61 27 20 26 26 20 73   if( c=='a' && s
28930 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
28940 20 22 61 75 74 68 22 2c 20 6e 29 3d 3d 30 20 29   "auth", n)==0 )
28950 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d  {.    if( nArg!=
28960 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  2 ){.      raw_p
28970 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
28980 73 61 67 65 3a 20 2e 61 75 74 68 20 4f 4e 7c 4f  sage: .auth ON|O
28990 46 46 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  FF\n");.      rc
289a0 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f   = 1;.      goto
289b0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
289c0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70  it;.    }.    op
289d0 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20  en_db(p, 0);.   
289e0 20 69 66 28 20 62 6f 6f 6c 65 61 6e 56 61 6c 75   if( booleanValu
289f0 65 28 61 7a 41 72 67 5b 31 5d 29 20 29 7b 0a 20  e(azArg[1]) ){. 
28a00 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 74       sqlite3_set
28a10 5f 61 75 74 68 6f 72 69 7a 65 72 28 70 2d 3e 64  _authorizer(p->d
28a20 62 2c 20 73 68 65 6c 6c 41 75 74 68 2c 20 70 29  b, shellAuth, p)
28a30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
28a40 20 20 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61     sqlite3_set_a
28a50 75 74 68 6f 72 69 7a 65 72 28 70 2d 3e 64 62 2c  uthorizer(p->db,
28a60 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20   0, 0);.    }.  
28a70 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23 69  }else.#endif..#i
28a80 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
28a90 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
28aa0 42 4c 45 29 20 26 26 20 64 65 66 69 6e 65 64 28  BLE) && defined(
28ab0 53 51 4c 49 54 45 5f 48 41 56 45 5f 5a 4c 49 42  SQLITE_HAVE_ZLIB
28ac0 29 0a 20 20 69 66 28 20 63 3d 3d 27 61 27 20 26  ).  if( c=='a' &
28ad0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
28ae0 30 5d 2c 20 22 61 72 63 68 69 76 65 22 2c 20 6e  0], "archive", n
28af0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f 70 65 6e  )==0 ){.    open
28b00 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 72  _db(p, 0);.    r
28b10 63 20 3d 20 61 72 44 6f 74 43 6f 6d 6d 61 6e 64  c = arDotCommand
28b20 28 70 2c 20 61 7a 41 72 67 2c 20 6e 41 72 67 29  (p, azArg, nArg)
28b30 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
28b40 0a 0a 20 20 69 66 28 20 28 63 3d 3d 27 62 27 20  ..  if( (c=='b' 
28b50 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63  && n>=3 && strnc
28b60 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62 61  mp(azArg[0], "ba
28b70 63 6b 75 70 22 2c 20 6e 29 3d 3d 30 29 0a 20 20  ckup", n)==0).  
28b80 20 7c 7c 20 28 63 3d 3d 27 73 27 20 26 26 20 6e   || (c=='s' && n
28b90 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=3 && strncmp(a
28ba0 7a 41 72 67 5b 30 5d 2c 20 22 73 61 76 65 22 2c  zArg[0], "save",
28bb0 20 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a 20 20 20   n)==0).  ){.   
28bc0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 65   const char *zDe
28bd0 73 74 46 69 6c 65 20 3d 20 30 3b 0a 20 20 20 20  stFile = 0;.    
28be0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20  const char *zDb 
28bf0 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
28c00 20 2a 70 44 65 73 74 3b 0a 20 20 20 20 73 71 6c   *pDest;.    sql
28c10 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 70 42 61  ite3_backup *pBa
28c20 63 6b 75 70 3b 0a 20 20 20 20 69 6e 74 20 6a 3b  ckup;.    int j;
28c30 0a 20 20 20 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c  .    for(j=1; j<
28c40 6e 41 72 67 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  nArg; j++){.    
28c50 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20    const char *z 
28c60 3d 20 61 7a 41 72 67 5b 6a 5d 3b 0a 20 20 20 20  = azArg[j];.    
28c70 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20    if( z[0]=='-' 
28c80 29 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  ){.        while
28c90 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b  ( z[0]=='-' ) z+
28ca0 2b 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f  +;.        /* No
28cb0 20 6f 70 74 69 6f 6e 73 20 74 6f 20 70 72 6f 63   options to proc
28cc0 65 73 73 20 61 74 20 74 68 69 73 20 74 69 6d 65  ess at this time
28cd0 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 0a 20 20   */.        {.  
28ce0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
28cf0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 75 6e 6b  ntf(stderr, "unk
28d00 6e 6f 77 6e 20 6f 70 74 69 6f 6e 3a 20 25 73 5c  nown option: %s\
28d10 6e 22 2c 20 61 7a 41 72 67 5b 6a 5d 29 3b 0a 20  n", azArg[j]);. 
28d20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28d30 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  1;.        }.   
28d40 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 44 65     }else if( zDe
28d50 73 74 46 69 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  stFile==0 ){.   
28d60 20 20 20 20 20 7a 44 65 73 74 46 69 6c 65 20 3d       zDestFile =
28d70 20 61 7a 41 72 67 5b 6a 5d 3b 0a 20 20 20 20 20   azArg[j];.     
28d80 20 7d 65 6c 73 65 20 69 66 28 20 7a 44 62 3d 3d   }else if( zDb==
28d90 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 62  0 ){.        zDb
28da0 20 3d 20 7a 44 65 73 74 46 69 6c 65 3b 0a 20 20   = zDestFile;.  
28db0 20 20 20 20 20 20 7a 44 65 73 74 46 69 6c 65 20        zDestFile 
28dc0 3d 20 61 7a 41 72 67 5b 6a 5d 3b 0a 20 20 20 20  = azArg[j];.    
28dd0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
28de0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
28df0 72 72 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 61 72  rr, "too many ar
28e00 67 75 6d 65 6e 74 73 20 74 6f 20 2e 62 61 63 6b  guments to .back
28e10 75 70 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  up\n");.        
28e20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20  return 1;.      
28e30 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
28e40 7a 44 65 73 74 46 69 6c 65 3d 3d 30 20 29 7b 0a  zDestFile==0 ){.
28e50 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
28e60 28 73 74 64 65 72 72 2c 20 22 6d 69 73 73 69 6e  (stderr, "missin
28e70 67 20 46 49 4c 45 4e 41 4d 45 20 61 72 67 75 6d  g FILENAME argum
28e80 65 6e 74 20 6f 6e 20 2e 62 61 63 6b 75 70 5c 6e  ent on .backup\n
28e90 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ");.      return
28ea0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   1;.    }.    if
28eb0 28 20 7a 44 62 3d 3d 30 20 29 20 7a 44 62 20 3d  ( zDb==0 ) zDb =
28ec0 20 22 6d 61 69 6e 22 3b 0a 20 20 20 20 72 63 20   "main";.    rc 
28ed0 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 7a  = sqlite3_open(z
28ee0 44 65 73 74 46 69 6c 65 2c 20 26 70 44 65 73 74  DestFile, &pDest
28ef0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
28f00 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
28f10 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
28f20 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 63 61  derr, "Error: ca
28f30 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22  nnot open \"%s\"
28f40 5c 6e 22 2c 20 7a 44 65 73 74 46 69 6c 65 29 3b  \n", zDestFile);
28f50 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63  .      sqlite3_c
28f60 6c 6f 73 65 28 70 44 65 73 74 29 3b 0a 20 20 20  lose(pDest);.   
28f70 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
28f80 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70   }.    open_db(p
28f90 2c 20 30 29 3b 0a 20 20 20 20 70 42 61 63 6b 75  , 0);.    pBacku
28fa0 70 20 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b  p = sqlite3_back
28fb0 75 70 5f 69 6e 69 74 28 70 44 65 73 74 2c 20 22  up_init(pDest, "
28fc0 6d 61 69 6e 22 2c 20 70 2d 3e 64 62 2c 20 7a 44  main", p->db, zD
28fd0 62 29 3b 0a 20 20 20 20 69 66 28 20 70 42 61 63  b);.    if( pBac
28fe0 6b 75 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  kup==0 ){.      
28ff0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
29000 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e  rr, "Error: %s\n
29010 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
29020 67 28 70 44 65 73 74 29 29 3b 0a 20 20 20 20 20  g(pDest));.     
29030 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70   sqlite3_close(p
29040 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72 65 74  Dest);.      ret
29050 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
29060 20 77 68 69 6c 65 28 20 20 28 72 63 20 3d 20 73   while(  (rc = s
29070 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74  qlite3_backup_st
29080 65 70 28 70 42 61 63 6b 75 70 2c 31 30 30 29 29  ep(pBackup,100))
29090 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 7d 0a  ==SQLITE_OK ){}.
290a0 20 20 20 20 73 71 6c 69 74 65 33 5f 62 61 63 6b      sqlite3_back
290b0 75 70 5f 66 69 6e 69 73 68 28 70 42 61 63 6b 75  up_finish(pBacku
290c0 70 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  p);.    if( rc==
290d0 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20  SQLITE_DONE ){. 
290e0 20 20 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20       rc = 0;.   
290f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74   }else{.      ut
29100 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
29110 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  , "Error: %s\n",
29120 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
29130 70 44 65 73 74 29 29 3b 0a 20 20 20 20 20 20 72  pDest));.      r
29140 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  c = 1;.    }.   
29150 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70   sqlite3_close(p
29160 44 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  Dest);.  }else..
29170 20 20 69 66 28 20 63 3d 3d 27 62 27 20 26 26 20    if( c=='b' && 
29180 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28  n>=3 && strncmp(
29190 61 7a 41 72 67 5b 30 5d 2c 20 22 62 61 69 6c 22  azArg[0], "bail"
291a0 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
291b0 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20  f( nArg==2 ){.  
291c0 20 20 20 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f      bail_on_erro
291d0 72 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65  r = booleanValue
291e0 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20  (azArg[1]);.    
291f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77  }else{.      raw
29200 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
29210 22 55 73 61 67 65 3a 20 2e 62 61 69 6c 20 6f 6e  "Usage: .bail on
29220 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20  |off\n");.      
29230 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rc = 1;.    }.  
29240 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
29250 27 62 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73  'b' && n>=3 && s
29260 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
29270 20 22 62 69 6e 61 72 79 22 2c 20 6e 29 3d 3d 30   "binary", n)==0
29280 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
29290 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==2 ){.      if(
292a0 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a   booleanValue(az
292b0 41 72 67 5b 31 5d 29 20 29 7b 0a 20 20 20 20 20  Arg[1]) ){.     
292c0 20 20 20 73 65 74 42 69 6e 61 72 79 4d 6f 64 65     setBinaryMode
292d0 28 70 2d 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20  (p->out, 1);.   
292e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
292f0 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28 70 2d    setTextMode(p-
29300 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  >out, 1);.      
29310 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
29320 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
29330 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 62  derr, "Usage: .b
29340 69 6e 61 72 79 20 6f 6e 7c 6f 66 66 5c 6e 22 29  inary on|off\n")
29350 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
29360 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
29370 20 69 66 28 20 63 3d 3d 27 63 27 20 26 26 20 73   if( c=='c' && s
29380 74 72 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 22  trcmp(azArg[0],"
29390 63 64 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  cd")==0 ){.    i
293a0 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 23 69  f( nArg==2 ){.#i
293b0 66 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  f defined(_WIN32
293c0 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e  ) || defined(WIN
293d0 33 32 29 0a 20 20 20 20 20 20 77 63 68 61 72 5f  32).      wchar_
293e0 74 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33 5f 77  t *z = sqlite3_w
293f0 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 75 6e 69  in32_utf8_to_uni
29400 63 6f 64 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a  code(azArg[1]);.
29410 20 20 20 20 20 20 72 63 20 3d 20 21 53 65 74 43        rc = !SetC
29420 75 72 72 65 6e 74 44 69 72 65 63 74 6f 72 79 57  urrentDirectoryW
29430 28 7a 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  (z);.      sqlit
29440 65 33 5f 66 72 65 65 28 7a 29 3b 0a 23 65 6c 73  e3_free(z);.#els
29450 65 0a 20 20 20 20 20 20 72 63 20 3d 20 63 68 64  e.      rc = chd
29460 69 72 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 23 65  ir(azArg[1]);.#e
29470 6e 64 69 66 0a 20 20 20 20 20 20 69 66 28 20 72  ndif.      if( r
29480 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  c ){.        utf
29490 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
294a0 20 22 43 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20   "Cannot change 
294b0 74 6f 20 64 69 72 65 63 74 6f 72 79 20 5c 22 25  to directory \"%
294c0 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d  s\"\n", azArg[1]
294d0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
294e0 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
294f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
29500 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
29510 55 73 61 67 65 3a 20 2e 63 64 20 44 49 52 45 43  Usage: .cd DIREC
29520 54 4f 52 59 5c 6e 22 29 3b 0a 20 20 20 20 20 20  TORY\n");.      
29530 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rc = 1;.    }.  
29540 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 54 68 65 20  }else..  /* The 
29550 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 22 2e 62  undocumented ".b
29560 72 65 61 6b 70 6f 69 6e 74 22 20 63 6f 6d 6d 61  reakpoint" comma
29570 6e 64 20 63 61 75 73 65 73 20 61 20 63 61 6c 6c  nd causes a call
29580 20 74 6f 20 74 68 65 20 6e 6f 2d 6f 70 0a 20 20   to the no-op.  
29590 2a 2a 20 72 6f 75 74 69 6e 65 20 6e 61 6d 65 64  ** routine named
295a0 20 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74   test_breakpoint
295b0 28 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63  ()..  */.  if( c
295c0 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20 26 26  =='b' && n>=3 &&
295d0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
295e0 5d 2c 20 22 62 72 65 61 6b 70 6f 69 6e 74 22 2c  ], "breakpoint",
295f0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 74 65   n)==0 ){.    te
29600 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 29 3b  st_breakpoint();
29610 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
29620 63 3d 3d 27 63 27 20 26 26 20 6e 3e 3d 33 20 26  c=='c' && n>=3 &
29630 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
29640 30 5d 2c 20 22 63 68 61 6e 67 65 73 22 2c 20 6e  0], "changes", n
29650 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
29660 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
29670 20 73 65 74 4f 72 43 6c 65 61 72 46 6c 61 67 28   setOrClearFlag(
29680 70 2c 20 53 48 46 4c 47 5f 43 6f 75 6e 74 43 68  p, SHFLG_CountCh
29690 61 6e 67 65 73 2c 20 61 7a 41 72 67 5b 31 5d 29  anges, azArg[1])
296a0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
296b0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
296c0 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 63  derr, "Usage: .c
296d0 68 61 6e 67 65 73 20 6f 6e 7c 6f 66 66 5c 6e 22  hanges on|off\n"
296e0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
296f0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
29700 20 20 2f 2a 20 43 61 6e 63 65 6c 20 6f 75 74 70    /* Cancel outp
29710 75 74 20 72 65 64 69 72 65 63 74 69 6f 6e 2c 20  ut redirection, 
29720 69 66 20 69 74 20 69 73 20 63 75 72 72 65 6e 74  if it is current
29730 6c 79 20 73 65 74 20 28 62 79 20 2e 74 65 73 74  ly set (by .test
29740 63 61 73 65 29 0a 20 20 2a 2a 20 54 68 65 6e 20  case).  ** Then 
29750 72 65 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  read the content
29760 20 6f 66 20 74 68 65 20 74 65 73 74 63 61 73 65   of the testcase
29770 2d 6f 75 74 2e 74 78 74 20 66 69 6c 65 20 61 6e  -out.txt file an
29780 64 20 63 6f 6d 70 61 72 65 20 61 67 61 69 6e 73  d compare agains
29790 74 0a 20 20 2a 2a 20 61 7a 41 72 67 5b 31 5d 2e  t.  ** azArg[1].
297a0 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 64    If there are d
297b0 69 66 66 65 72 65 6e 63 65 73 2c 20 72 65 70 6f  ifferences, repo
297c0 72 74 20 61 6e 20 65 72 72 6f 72 20 61 6e 64 20  rt an error and 
297d0 65 78 69 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  exit..  */.  if(
297e0 20 63 3d 3d 27 63 27 20 26 26 20 6e 3e 3d 33 20   c=='c' && n>=3 
297f0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
29800 5b 30 5d 2c 20 22 63 68 65 63 6b 22 2c 20 6e 29  [0], "check", n)
29810 3d 3d 30 20 29 7b 0a 20 20 20 20 63 68 61 72 20  ==0 ){.    char 
29820 2a 7a 52 65 73 20 3d 20 30 3b 0a 20 20 20 20 6f  *zRes = 0;.    o
29830 75 74 70 75 74 5f 72 65 73 65 74 28 70 29 3b 0a  utput_reset(p);.
29840 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20      if( nArg!=2 
29850 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
29860 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
29870 67 65 3a 20 2e 63 68 65 63 6b 20 47 4c 4f 42 2d  ge: .check GLOB-
29880 50 41 54 54 45 52 4e 5c 6e 22 29 3b 0a 20 20 20  PATTERN\n");.   
29890 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 20 20 7d     rc = 2;.    }
298a0 65 6c 73 65 20 69 66 28 20 28 7a 52 65 73 20 3d  else if( (zRes =
298b0 20 72 65 61 64 46 69 6c 65 28 22 74 65 73 74 63   readFile("testc
298c0 61 73 65 2d 6f 75 74 2e 74 78 74 22 2c 20 30 29  ase-out.txt", 0)
298d0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61  )==0 ){.      ra
298e0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
298f0 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20   "Error: cannot 
29900 72 65 61 64 20 27 74 65 73 74 63 61 73 65 2d 6f  read 'testcase-o
29910 75 74 2e 74 78 74 27 5c 6e 22 29 3b 0a 20 20 20  ut.txt'\n");.   
29920 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 20 20 7d     rc = 2;.    }
29930 65 6c 73 65 20 69 66 28 20 74 65 73 74 63 61 73  else if( testcas
29940 65 5f 67 6c 6f 62 28 61 7a 41 72 67 5b 31 5d 2c  e_glob(azArg[1],
29950 7a 52 65 73 29 3d 3d 30 20 29 7b 0a 20 20 20 20  zRes)==0 ){.    
29960 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
29970 64 65 72 72 2c 0a 20 20 20 20 20 20 20 20 20 20  derr,.          
29980 20 20 20 20 20 20 20 22 74 65 73 74 63 61 73 65         "testcase
29990 2d 25 73 20 46 41 49 4c 45 44 5c 6e 20 45 78 70  -%s FAILED\n Exp
299a0 65 63 74 65 64 3a 20 5b 25 73 5d 5c 6e 20 20 20  ected: [%s]\n   
299b0 20 20 20 47 6f 74 3a 20 5b 25 73 5d 5c 6e 22 2c     Got: [%s]\n",
299c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
299d0 20 20 70 2d 3e 7a 54 65 73 74 63 61 73 65 2c 20    p->zTestcase, 
299e0 61 7a 41 72 67 5b 31 5d 2c 20 7a 52 65 73 29 3b  azArg[1], zRes);
299f0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
29a00 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
29a10 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 6f  utf8_printf(stdo
29a20 75 74 2c 20 22 74 65 73 74 63 61 73 65 2d 25 73  ut, "testcase-%s
29a30 20 6f 6b 5c 6e 22 2c 20 70 2d 3e 7a 54 65 73 74   ok\n", p->zTest
29a40 63 61 73 65 29 3b 0a 20 20 20 20 20 20 70 2d 3e  case);.      p->
29a50 6e 43 68 65 63 6b 2b 2b 3b 0a 20 20 20 20 7d 0a  nCheck++;.    }.
29a60 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
29a70 28 7a 52 65 73 29 3b 0a 20 20 7d 65 6c 73 65 0a  (zRes);.  }else.
29a80 0a 20 20 69 66 28 20 63 3d 3d 27 63 27 20 26 26  .  if( c=='c' &&
29a90 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
29aa0 5d 2c 20 22 63 6c 6f 6e 65 22 2c 20 6e 29 3d 3d  ], "clone", n)==
29ab0 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
29ac0 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 74 72  g==2 ){.      tr
29ad0 79 54 6f 43 6c 6f 6e 65 28 70 2c 20 61 7a 41 72  yToClone(p, azAr
29ae0 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  g[1]);.    }else
29af0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
29b00 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
29b10 65 3a 20 2e 63 6c 6f 6e 65 20 46 49 4c 45 4e 41  e: .clone FILENA
29b20 4d 45 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  ME\n");.      rc
29b30 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 1;.    }.  }e
29b40 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 64  lse..  if( c=='d
29b50 27 20 26 26 20 6e 3e 31 20 26 26 20 73 74 72 6e  ' && n>1 && strn
29b60 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 64  cmp(azArg[0], "d
29b70 61 74 61 62 61 73 65 73 22 2c 20 6e 29 3d 3d 30  atabases", n)==0
29b80 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 53 74 61   ){.    ShellSta
29b90 74 65 20 64 61 74 61 3b 0a 20 20 20 20 63 68 61  te data;.    cha
29ba0 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  r *zErrMsg = 0;.
29bb0 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
29bc0 29 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 64  );.    memcpy(&d
29bd0 61 74 61 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64  ata, p, sizeof(d
29be0 61 74 61 29 29 3b 0a 20 20 20 20 64 61 74 61 2e  ata));.    data.
29bf0 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a  showHeader = 0;.
29c00 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d      data.cMode =
29c10 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44   data.mode = MOD
29c20 45 5f 4c 69 73 74 3b 0a 20 20 20 20 73 71 6c 69  E_List;.    sqli
29c30 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
29c40 65 6f 66 28 64 61 74 61 2e 63 6f 6c 53 65 70 61  eof(data.colSepa
29c50 72 61 74 6f 72 29 2c 64 61 74 61 2e 63 6f 6c 53  rator),data.colS
29c60 65 70 61 72 61 74 6f 72 2c 22 3a 20 22 29 3b 0a  eparator,": ");.
29c70 20 20 20 20 64 61 74 61 2e 63 6e 74 20 3d 20 30      data.cnt = 0
29c80 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78  ;.    sqlite3_ex
29c90 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45 43  ec(p->db, "SELEC
29ca0 54 20 6e 61 6d 65 2c 20 66 69 6c 65 20 46 52 4f  T name, file FRO
29cb0 4d 20 70 72 61 67 6d 61 5f 64 61 74 61 62 61 73  M pragma_databas
29cc0 65 5f 6c 69 73 74 22 2c 0a 20 20 20 20 20 20 20  e_list",.       
29cd0 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61            callba
29ce0 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72  ck, &data, &zErr
29cf0 4d 73 67 29 3b 0a 20 20 20 20 69 66 28 20 7a 45  Msg);.    if( zE
29d00 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 75  rrMsg ){.      u
29d10 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
29d20 72 2c 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  r,"Error: %s\n",
29d30 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20   zErrMsg);.     
29d40 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
29d50 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 72 63  rrMsg);.      rc
29d60 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 1;.    }.  }e
29d70 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 64  lse..  if( c=='d
29d80 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
29d90 72 67 5b 30 5d 2c 20 22 64 62 69 6e 66 6f 22 2c  rg[0], "dbinfo",
29da0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63   n)==0 ){.    rc
29db0 20 3d 20 73 68 65 6c 6c 5f 64 62 69 6e 66 6f 5f   = shell_dbinfo_
29dc0 63 6f 6d 6d 61 6e 64 28 70 2c 20 6e 41 72 67 2c  command(p, nArg,
29dd0 20 61 7a 41 72 67 29 3b 0a 20 20 7d 65 6c 73 65   azArg);.  }else
29de0 0a 0a 20 20 69 66 28 20 63 3d 3d 27 64 27 20 26  ..  if( c=='d' &
29df0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
29e00 30 5d 2c 20 22 64 75 6d 70 22 2c 20 6e 29 3d 3d  0], "dump", n)==
29e10 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
29e20 68 61 72 20 2a 7a 4c 69 6b 65 20 3d 20 30 3b 0a  har *zLike = 0;.
29e30 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69      int i;.    i
29e40 6e 74 20 73 61 76 65 64 53 68 6f 77 48 65 61 64  nt savedShowHead
29e50 65 72 20 3d 20 70 2d 3e 73 68 6f 77 48 65 61 64  er = p->showHead
29e60 65 72 3b 0a 20 20 20 20 53 68 65 6c 6c 43 6c 65  er;.    ShellCle
29e70 61 72 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f  arFlag(p, SHFLG_
29e80 50 72 65 73 65 72 76 65 52 6f 77 69 64 7c 53 48  PreserveRowid|SH
29e90 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 29 3b 0a 20  FLG_Newlines);. 
29ea0 20 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 41     for(i=1; i<nA
29eb0 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
29ec0 69 66 28 20 61 7a 41 72 67 5b 69 5d 5b 30 5d 3d  if( azArg[i][0]=
29ed0 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='-' ){.        
29ee0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
29ef0 61 7a 41 72 67 5b 69 5d 2b 31 3b 0a 20 20 20 20  azArg[i]+1;.    
29f00 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d      if( z[0]=='-
29f10 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20  ' ) z++;.       
29f20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 70   if( strcmp(z,"p
29f30 72 65 73 65 72 76 65 2d 72 6f 77 69 64 73 22 29  reserve-rowids")
29f40 3d 3d 30 20 29 7b 0a 23 69 66 64 65 66 20 53 51  ==0 ){.#ifdef SQ
29f50 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
29f60 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 20 20 20  LTABLE.         
29f70 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
29f80 72 72 2c 20 22 54 68 65 20 2d 2d 70 72 65 73 65  rr, "The --prese
29f90 72 76 65 2d 72 6f 77 69 64 73 20 6f 70 74 69 6f  rve-rowids optio
29fa0 6e 20 69 73 20 6e 6f 74 20 63 6f 6d 70 61 74 69  n is not compati
29fb0 62 6c 65 22 0a 20 20 20 20 20 20 20 20 20 20 20  ble".           
29fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fd0 20 20 22 20 77 69 74 68 20 53 51 4c 49 54 45 5f    " with SQLITE_
29fe0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
29ff0 45 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  E\n");.         
2a000 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   rc = 1;.       
2a010 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d     goto meta_com
2a020 6d 61 6e 64 5f 65 78 69 74 3b 0a 23 65 6c 73 65  mand_exit;.#else
2a030 0a 20 20 20 20 20 20 20 20 20 20 53 68 65 6c 6c  .          Shell
2a040 53 65 74 46 6c 61 67 28 70 2c 20 53 48 46 4c 47  SetFlag(p, SHFLG
2a050 5f 50 72 65 73 65 72 76 65 52 6f 77 69 64 29 3b  _PreserveRowid);
2a060 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20  .#endif.        
2a070 7d 65 6c 73 65 0a 20 20 20 20 20 20 20 20 69 66  }else.        if
2a080 28 20 73 74 72 63 6d 70 28 7a 2c 22 6e 65 77 6c  ( strcmp(z,"newl
2a090 69 6e 65 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ines")==0 ){.   
2a0a0 20 20 20 20 20 20 20 53 68 65 6c 6c 53 65 74 46         ShellSetF
2a0b0 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 4e 65 77  lag(p, SHFLG_New
2a0c0 6c 69 6e 65 73 29 3b 0a 20 20 20 20 20 20 20 20  lines);.        
2a0d0 7d 65 6c 73 65 0a 20 20 20 20 20 20 20 20 7b 0a  }else.        {.
2a0e0 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
2a0f0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 6e  intf(stderr, "Un
2a100 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e 20 5c 22 25  known option \"%
2a110 73 5c 22 20 6f 6e 20 5c 22 2e 64 75 6d 70 5c 22  s\" on \".dump\"
2a120 5c 6e 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a  \n", azArg[i]);.
2a130 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31            rc = 1
2a140 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
2a150 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
2a160 69 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  it;.        }.  
2a170 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 4c      }else if( zL
2a180 69 6b 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ike ){.        r
2a190 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
2a1a0 2c 20 22 55 73 61 67 65 3a 20 2e 64 75 6d 70 20  , "Usage: .dump 
2a1b0 3f 2d 2d 70 72 65 73 65 72 76 65 2d 72 6f 77 69  ?--preserve-rowi
2a1c0 64 73 3f 20 22 0a 20 20 20 20 20 20 20 20 20 20  ds? ".          
2a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1e0 20 22 3f 2d 2d 6e 65 77 6c 69 6e 65 73 3f 20 3f   "?--newlines? ?
2a1f0 4c 49 4b 45 2d 50 41 54 54 45 52 4e 3f 5c 6e 22  LIKE-PATTERN?\n"
2a200 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
2a210 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  1;.        goto 
2a220 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2a230 74 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  t;.      }else{.
2a240 20 20 20 20 20 20 20 20 7a 4c 69 6b 65 20 3d 20          zLike = 
2a250 61 7a 41 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20  azArg[i];.      
2a260 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e  }.    }.    open
2a270 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 2f  _db(p, 0);.    /
2a280 2a 20 57 68 65 6e 20 70 6c 61 79 69 6e 67 20 62  * When playing b
2a290 61 63 6b 20 61 20 22 64 75 6d 70 22 2c 20 74 68  ack a "dump", th
2a2a0 65 20 63 6f 6e 74 65 6e 74 20 6d 69 67 68 74 20  e content might 
2a2b0 61 70 70 65 61 72 20 69 6e 20 61 6e 20 6f 72 64  appear in an ord
2a2c0 65 72 0a 20 20 20 20 2a 2a 20 77 68 69 63 68 20  er.    ** which 
2a2d0 63 61 75 73 65 73 20 69 6d 6d 65 64 69 61 74 65  causes immediate
2a2e0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2a2f0 73 74 72 61 69 6e 74 73 20 74 6f 20 62 65 20 76  straints to be v
2a300 69 6f 6c 61 74 65 64 2e 0a 20 20 20 20 2a 2a 20  iolated..    ** 
2a310 53 6f 20 64 69 73 61 62 6c 65 20 66 6f 72 65 69  So disable forei
2a320 67 6e 2d 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn-key constrain
2a330 74 20 65 6e 66 6f 72 63 65 6d 65 6e 74 20 74 6f  t enforcement to
2a340 20 70 72 65 76 65 6e 74 20 70 72 6f 62 6c 65 6d   prevent problem
2a350 73 2e 20 2a 2f 0a 20 20 20 20 72 61 77 5f 70 72  s. */.    raw_pr
2a360 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 50 52  intf(p->out, "PR
2a370 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79  AGMA foreign_key
2a380 73 3d 4f 46 46 3b 5c 6e 22 29 3b 0a 20 20 20 20  s=OFF;\n");.    
2a390 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
2a3a0 74 2c 20 22 42 45 47 49 4e 20 54 52 41 4e 53 41  t, "BEGIN TRANSA
2a3b0 43 54 49 4f 4e 3b 5c 6e 22 29 3b 0a 20 20 20 20  CTION;\n");.    
2a3c0 70 2d 3e 77 72 69 74 61 62 6c 65 53 63 68 65 6d  p->writableSchem
2a3d0 61 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 73 68  a = 0;.    p->sh
2a3e0 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20  owHeader = 0;.  
2a3f0 20 20 2f 2a 20 53 65 74 20 77 72 69 74 61 62 6c    /* Set writabl
2a400 65 5f 73 63 68 65 6d 61 3d 4f 4e 20 73 69 6e 63  e_schema=ON sinc
2a410 65 20 64 6f 69 6e 67 20 73 6f 20 66 6f 72 63 65  e doing so force
2a420 73 20 53 51 4c 69 74 65 20 74 6f 20 69 6e 69 74  s SQLite to init
2a430 69 61 6c 69 7a 65 0a 20 20 20 20 2a 2a 20 61 73  ialize.    ** as
2a440 20 6d 75 63 68 20 6f 66 20 74 68 65 20 73 63 68   much of the sch
2a450 65 6d 61 20 61 73 20 69 74 20 63 61 6e 20 65 76  ema as it can ev
2a460 65 6e 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  en if the sqlite
2a470 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69 73  _master table is
2a480 0a 20 20 20 20 2a 2a 20 63 6f 72 72 75 70 74 2e  .    ** corrupt.
2a490 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   */.    sqlite3_
2a4a0 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 41 56  exec(p->db, "SAV
2a4b0 45 50 4f 49 4e 54 20 64 75 6d 70 3b 20 50 52 41  EPOINT dump; PRA
2a4c0 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
2a4d0 65 6d 61 3d 4f 4e 22 2c 20 30 2c 20 30 2c 20 30  ema=ON", 0, 0, 0
2a4e0 29 3b 0a 20 20 20 20 70 2d 3e 6e 45 72 72 20 3d  );.    p->nErr =
2a4f0 20 30 3b 0a 20 20 20 20 69 66 28 20 7a 4c 69 6b   0;.    if( zLik
2a500 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 75  e==0 ){.      ru
2a510 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71 75  n_schema_dump_qu
2a520 65 72 79 28 70 2c 0a 20 20 20 20 20 20 20 20 22  ery(p,.        "
2a530 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 74 79 70  SELECT name, typ
2a540 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  e, sql FROM sqli
2a550 74 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20  te_master ".    
2a560 20 20 20 20 22 57 48 45 52 45 20 73 71 6c 20 4e      "WHERE sql N
2a570 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 74 79 70 65  OT NULL AND type
2a580 3d 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61  =='table' AND na
2a590 6d 65 21 3d 27 73 71 6c 69 74 65 5f 73 65 71 75  me!='sqlite_sequ
2a5a0 65 6e 63 65 27 22 0a 20 20 20 20 20 20 29 3b 0a  ence'".      );.
2a5b0 20 20 20 20 20 20 72 75 6e 5f 73 63 68 65 6d 61        run_schema
2a5c0 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 0a 20  _dump_query(p,. 
2a5d0 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
2a5e0 61 6d 65 2c 20 74 79 70 65 2c 20 73 71 6c 20 46  ame, type, sql F
2a5f0 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
2a600 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48 45  r ".        "WHE
2a610 52 45 20 6e 61 6d 65 3d 3d 27 73 71 6c 69 74 65  RE name=='sqlite
2a620 5f 73 65 71 75 65 6e 63 65 27 22 0a 20 20 20 20  _sequence'".    
2a630 20 20 29 3b 0a 20 20 20 20 20 20 72 75 6e 5f 74    );.      run_t
2a640 61 62 6c 65 5f 64 75 6d 70 5f 71 75 65 72 79 28  able_dump_query(
2a650 70 2c 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45  p,.        "SELE
2a660 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  CT sql FROM sqli
2a670 74 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20  te_master ".    
2a680 20 20 20 20 22 57 48 45 52 45 20 73 71 6c 20 4e      "WHERE sql N
2a690 4f 54 20 4e 55 4c 4c 20 41 4e 44 20 74 79 70 65  OT NULL AND type
2a6a0 20 49 4e 20 28 27 69 6e 64 65 78 27 2c 27 74 72   IN ('index','tr
2a6b0 69 67 67 65 72 27 2c 27 76 69 65 77 27 29 22 2c  igger','view')",
2a6c0 20 30 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20   0.      );.    
2a6d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61  }else{.      cha
2a6e0 72 20 2a 7a 53 71 6c 3b 0a 20 20 20 20 20 20 7a  r *zSql;.      z
2a6f0 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Sql = sqlite3_mp
2a700 72 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 22  rintf(.        "
2a710 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 74 79 70  SELECT name, typ
2a720 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  e, sql FROM sqli
2a730 74 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20  te_master ".    
2a740 20 20 20 20 22 57 48 45 52 45 20 74 62 6c 5f 6e      "WHERE tbl_n
2a750 61 6d 65 20 4c 49 4b 45 20 25 51 20 41 4e 44 20  ame LIKE %Q AND 
2a760 74 79 70 65 3d 3d 27 74 61 62 6c 65 27 22 0a 20  type=='table'". 
2a770 20 20 20 20 20 20 20 22 20 20 41 4e 44 20 73 71         "  AND sq
2a780 6c 20 4e 4f 54 20 4e 55 4c 4c 22 2c 20 7a 4c 69  l NOT NULL", zLi
2a790 6b 65 29 3b 0a 20 20 20 20 20 20 72 75 6e 5f 73  ke);.      run_s
2a7a0 63 68 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79  chema_dump_query
2a7b0 28 70 2c 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20  (p,zSql);.      
2a7c0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71  sqlite3_free(zSq
2a7d0 6c 29 3b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d  l);.      zSql =
2a7e0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2a7f0 28 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43  (.        "SELEC
2a800 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74  T sql FROM sqlit
2a810 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20  e_master ".     
2a820 20 20 20 22 57 48 45 52 45 20 73 71 6c 20 4e 4f     "WHERE sql NO
2a830 54 20 4e 55 4c 4c 22 0a 20 20 20 20 20 20 20 20  T NULL".        
2a840 22 20 20 41 4e 44 20 74 79 70 65 20 49 4e 20 28  "  AND type IN (
2a850 27 69 6e 64 65 78 27 2c 27 74 72 69 67 67 65 72  'index','trigger
2a860 27 2c 27 76 69 65 77 27 29 22 0a 20 20 20 20 20  ','view')".     
2a870 20 20 20 22 20 20 41 4e 44 20 74 62 6c 5f 6e 61     "  AND tbl_na
2a880 6d 65 20 4c 49 4b 45 20 25 51 22 2c 20 7a 4c 69  me LIKE %Q", zLi
2a890 6b 65 29 3b 0a 20 20 20 20 20 20 72 75 6e 5f 74  ke);.      run_t
2a8a0 61 62 6c 65 5f 64 75 6d 70 5f 71 75 65 72 79 28  able_dump_query(
2a8b0 70 2c 20 7a 53 71 6c 2c 20 30 29 3b 0a 20 20 20  p, zSql, 0);.   
2a8c0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2a8d0 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zSql);.    }.   
2a8e0 20 69 66 28 20 70 2d 3e 77 72 69 74 61 62 6c 65   if( p->writable
2a8f0 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20  Schema ){.      
2a900 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
2a910 74 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74 61  t, "PRAGMA writa
2a920 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 3b 5c  ble_schema=OFF;\
2a930 6e 22 29 3b 0a 20 20 20 20 20 20 70 2d 3e 77 72  n");.      p->wr
2a940 69 74 61 62 6c 65 53 63 68 65 6d 61 20 3d 20 30  itableSchema = 0
2a950 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
2a960 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
2a970 22 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65  "PRAGMA writable
2a980 5f 73 63 68 65 6d 61 3d 4f 46 46 3b 22 2c 20 30  _schema=OFF;", 0
2a990 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  , 0, 0);.    sql
2a9a0 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
2a9b0 20 22 52 45 4c 45 41 53 45 20 64 75 6d 70 3b 22   "RELEASE dump;"
2a9c0 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
2a9d0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
2a9e0 74 2c 20 70 2d 3e 6e 45 72 72 20 3f 20 22 52 4f  t, p->nErr ? "RO
2a9f0 4c 4c 42 41 43 4b 3b 20 2d 2d 20 64 75 65 20 74  LLBACK; -- due t
2aa00 6f 20 65 72 72 6f 72 73 5c 6e 22 20 3a 20 22 43  o errors\n" : "C
2aa10 4f 4d 4d 49 54 3b 5c 6e 22 29 3b 0a 20 20 20 20  OMMIT;\n");.    
2aa20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  p->showHeader = 
2aa30 73 61 76 65 64 53 68 6f 77 48 65 61 64 65 72 3b  savedShowHeader;
2aa40 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
2aa50 63 3d 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d  c=='e' && strncm
2aa60 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 65 63 68  p(azArg[0], "ech
2aa70 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  o", n)==0 ){.   
2aa80 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
2aa90 20 20 20 20 20 20 73 65 74 4f 72 43 6c 65 61 72        setOrClear
2aaa0 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 45 63  Flag(p, SHFLG_Ec
2aab0 68 6f 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  ho, azArg[1]);. 
2aac0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2aad0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2aae0 72 2c 20 22 55 73 61 67 65 3a 20 2e 65 63 68 6f  r, "Usage: .echo
2aaf0 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20   on|off\n");.   
2ab00 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
2ab10 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
2ab20 63 3d 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d  c=='e' && strncm
2ab30 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 65 71 70  p(azArg[0], "eqp
2ab40 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
2ab50 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20  if( nArg==2 ){. 
2ab60 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
2ab70 61 7a 41 72 67 5b 31 5d 2c 22 66 75 6c 6c 22 29  azArg[1],"full")
2ab80 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ==0 ){.        p
2ab90 2d 3e 61 75 74 6f 45 51 50 20 3d 20 41 55 54 4f  ->autoEQP = AUTO
2aba0 45 51 50 5f 66 75 6c 6c 3b 0a 20 20 20 20 20 20  EQP_full;.      
2abb0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
2abc0 28 61 7a 41 72 67 5b 31 5d 2c 22 74 72 69 67 67  (azArg[1],"trigg
2abd0 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  er")==0 ){.     
2abe0 20 20 20 70 2d 3e 61 75 74 6f 45 51 50 20 3d 20     p->autoEQP = 
2abf0 41 55 54 4f 45 51 50 5f 74 72 69 67 67 65 72 3b  AUTOEQP_trigger;
2ac00 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
2ac10 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45 51 50        p->autoEQP
2ac20 20 3d 20 28 75 38 29 62 6f 6f 6c 65 61 6e 56 61   = (u8)booleanVa
2ac30 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  lue(azArg[1]);. 
2ac40 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
2ac50 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
2ac60 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
2ac70 65 3a 20 2e 65 71 70 20 6f 66 66 7c 6f 6e 7c 74  e: .eqp off|on|t
2ac80 72 69 67 67 65 72 7c 66 75 6c 6c 5c 6e 22 29 3b  rigger|full\n");
2ac90 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
2aca0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
2acb0 69 66 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74  if( c=='e' && st
2acc0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2acd0 22 65 78 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b  "exit", n)==0 ){
2ace0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 31 20  .    if( nArg>1 
2acf0 26 26 20 28 72 63 20 3d 20 28 69 6e 74 29 69 6e  && (rc = (int)in
2ad00 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67  tegerValue(azArg
2ad10 5b 31 5d 29 29 21 3d 30 20 29 20 65 78 69 74 28  [1]))!=0 ) exit(
2ad20 72 63 29 3b 0a 20 20 20 20 72 63 20 3d 20 32 3b  rc);.    rc = 2;
2ad30 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 54  .  }else..  /* T
2ad40 68 65 20 22 2e 65 78 70 6c 61 69 6e 22 20 63 6f  he ".explain" co
2ad50 6d 6d 61 6e 64 20 69 73 20 61 75 74 6f 6d 61 74  mmand is automat
2ad60 69 63 20 6e 6f 77 2e 20 20 49 74 20 69 73 20 6c  ic now.  It is l
2ad70 61 72 67 65 6c 79 20 70 6f 69 6e 74 6c 65 73 73  argely pointless
2ad80 2e 20 20 49 74 0a 20 20 2a 2a 20 72 65 74 61 69  .  It.  ** retai
2ad90 6e 65 64 20 70 75 72 65 6c 79 20 66 6f 72 20 62  ned purely for b
2ada0 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69  ackwards compati
2adb0 62 69 6c 69 74 79 20 2a 2f 0a 20 20 69 66 28 20  bility */.  if( 
2adc0 63 3d 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d  c=='e' && strncm
2add0 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 65 78 70  p(azArg[0], "exp
2ade0 6c 61 69 6e 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  lain", n)==0 ){.
2adf0 20 20 20 20 69 6e 74 20 76 61 6c 20 3d 20 31 3b      int val = 1;
2ae00 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 32  .    if( nArg>=2
2ae10 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 74   ){.      if( st
2ae20 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 61  rcmp(azArg[1],"a
2ae30 75 74 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  uto")==0 ){.    
2ae40 20 20 20 20 76 61 6c 20 3d 20 39 39 3b 0a 20 20      val = 99;.  
2ae50 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2ae60 20 20 20 76 61 6c 20 3d 20 20 62 6f 6f 6c 65 61     val =  boolea
2ae70 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
2ae80 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2ae90 20 20 20 20 69 66 28 20 76 61 6c 3d 3d 31 20 26      if( val==1 &
2aea0 26 20 70 2d 3e 6d 6f 64 65 21 3d 4d 4f 44 45 5f  & p->mode!=MODE_
2aeb0 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20  Explain ){.     
2aec0 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 20 3d   p->normalMode =
2aed0 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20   p->mode;.      
2aee0 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 45  p->mode = MODE_E
2aef0 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20 70 2d  xplain;.      p-
2af00 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20 30  >autoExplain = 0
2af10 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2af20 76 61 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  val==0 ){.      
2af30 69 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44  if( p->mode==MOD
2af40 45 5f 45 78 70 6c 61 69 6e 20 29 20 70 2d 3e 6d  E_Explain ) p->m
2af50 6f 64 65 20 3d 20 70 2d 3e 6e 6f 72 6d 61 6c 4d  ode = p->normalM
2af60 6f 64 65 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75  ode;.      p->au
2af70 74 6f 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20  toExplain = 0;. 
2af80 20 20 20 7d 65 6c 73 65 20 69 66 28 20 76 61 6c     }else if( val
2af90 3d 3d 39 39 20 29 7b 0a 20 20 20 20 20 20 69 66  ==99 ){.      if
2afa0 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f  ( p->mode==MODE_
2afb0 45 78 70 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f 64  Explain ) p->mod
2afc0 65 20 3d 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64  e = p->normalMod
2afd0 65 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75 74 6f  e;.      p->auto
2afe0 45 78 70 6c 61 69 6e 20 3d 20 31 3b 0a 20 20 20  Explain = 1;.   
2aff0 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e   }.  }else..#ifn
2b000 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b010 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
2b020 66 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74 72  f( c=='e' && str
2b030 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
2b040 65 78 70 65 72 74 22 2c 20 6e 29 3d 3d 30 20 29  expert", n)==0 )
2b050 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  {.    open_db(p,
2b060 20 30 29 3b 0a 20 20 20 20 65 78 70 65 72 74 44   0);.    expertD
2b070 6f 74 43 6f 6d 6d 61 6e 64 28 70 2c 20 61 7a 41  otCommand(p, azA
2b080 72 67 2c 20 6e 41 72 67 29 3b 0a 20 20 7d 65 6c  rg, nArg);.  }el
2b090 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  se.#endif..  if(
2b0a0 20 63 3d 3d 27 66 27 20 26 26 20 73 74 72 6e 63   c=='f' && strnc
2b0b0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 66 75  mp(azArg[0], "fu
2b0c0 6c 6c 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d 30  llschema", n)==0
2b0d0 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 53 74 61   ){.    ShellSta
2b0e0 74 65 20 64 61 74 61 3b 0a 20 20 20 20 63 68 61  te data;.    cha
2b0f0 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  r *zErrMsg = 0;.
2b100 20 20 20 20 69 6e 74 20 64 6f 53 74 61 74 73 20      int doStats 
2b110 3d 20 30 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28  = 0;.    memcpy(
2b120 26 64 61 74 61 2c 20 70 2c 20 73 69 7a 65 6f 66  &data, p, sizeof
2b130 28 64 61 74 61 29 29 3b 0a 20 20 20 20 64 61 74  (data));.    dat
2b140 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30  a.showHeader = 0
2b150 3b 0a 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65  ;.    data.cMode
2b160 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d   = data.mode = M
2b170 4f 44 45 5f 53 65 6d 69 3b 0a 20 20 20 20 69 66  ODE_Semi;.    if
2b180 28 20 6e 41 72 67 3d 3d 32 20 26 26 20 6f 70 74  ( nArg==2 && opt
2b190 69 6f 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b 31  ionMatch(azArg[1
2b1a0 5d 2c 20 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a  ], "indent") ){.
2b1b0 20 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65        data.cMode
2b1c0 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d   = data.mode = M
2b1d0 4f 44 45 5f 50 72 65 74 74 79 3b 0a 20 20 20 20  ODE_Pretty;.    
2b1e0 20 20 6e 41 72 67 20 3d 20 31 3b 0a 20 20 20 20    nArg = 1;.    
2b1f0 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d  }.    if( nArg!=
2b200 31 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  1 ){.      raw_p
2b210 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
2b220 73 61 67 65 3a 20 2e 66 75 6c 6c 73 63 68 65 6d  sage: .fullschem
2b230 61 20 3f 2d 2d 69 6e 64 65 6e 74 3f 5c 6e 22 29  a ?--indent?\n")
2b240 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2b250 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
2b260 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
2b270 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28    }.    open_db(
2b280 70 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20  p, 0);.    rc = 
2b290 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
2b2a0 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  db,.       "SELE
2b2b0 43 54 20 73 71 6c 20 46 52 4f 4d 22 0a 20 20 20  CT sql FROM".   
2b2c0 20 20 20 20 22 20 20 28 53 45 4c 45 43 54 20 73      "  (SELECT s
2b2d0 71 6c 20 73 71 6c 2c 20 74 79 70 65 20 74 79 70  ql sql, type typ
2b2e0 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 74 62 6c 5f  e, tbl_name tbl_
2b2f0 6e 61 6d 65 2c 20 6e 61 6d 65 20 6e 61 6d 65 2c  name, name name,
2b300 20 72 6f 77 69 64 20 78 22 0a 20 20 20 20 20 20   rowid x".      
2b310 20 22 20 20 20 20 20 46 52 4f 4d 20 73 71 6c 69   "     FROM sqli
2b320 74 65 5f 6d 61 73 74 65 72 20 55 4e 49 4f 4e 20  te_master UNION 
2b330 41 4c 4c 22 0a 20 20 20 20 20 20 20 22 20 20 20  ALL".       "   
2b340 53 45 4c 45 43 54 20 73 71 6c 2c 20 74 79 70 65  SELECT sql, type
2b350 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65  , tbl_name, name
2b360 2c 20 72 6f 77 69 64 20 46 52 4f 4d 20 73 71 6c  , rowid FROM sql
2b370 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29  ite_temp_master)
2b380 20 22 0a 20 20 20 20 20 20 20 22 57 48 45 52 45   ".       "WHERE
2b390 20 74 79 70 65 21 3d 27 6d 65 74 61 27 20 41 4e   type!='meta' AN
2b3a0 44 20 73 71 6c 20 4e 4f 54 4e 55 4c 4c 20 41 4e  D sql NOTNULL AN
2b3b0 44 20 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b 45 20  D name NOT LIKE 
2b3c0 27 73 71 6c 69 74 65 5f 25 27 20 22 0a 20 20 20  'sqlite_%' ".   
2b3d0 20 20 20 20 22 4f 52 44 45 52 20 42 59 20 72 6f      "ORDER BY ro
2b3e0 77 69 64 22 2c 0a 20 20 20 20 20 20 20 63 61 6c  wid",.       cal
2b3f0 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a  lback, &data, &z
2b400 45 72 72 4d 73 67 0a 20 20 20 20 29 3b 0a 20 20  ErrMsg.    );.  
2b410 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2b420 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  _OK ){.      sql
2b430 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
2b440 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
2b450 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
2b460 70 2d 3e 64 62 2c 0a 20 20 20 20 20 20 20 20 20  p->db,.         
2b470 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 72 6f        "SELECT ro
2b480 77 69 64 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  wid FROM sqlite_
2b490 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20  master".        
2b4a0 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20 6e         " WHERE n
2b4b0 61 6d 65 20 47 4c 4f 42 20 27 73 71 6c 69 74 65  ame GLOB 'sqlite
2b4c0 5f 73 74 61 74 5b 31 33 34 5d 27 22 2c 0a 20 20  _stat[134]'",.  
2b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c               -1,
2b4e0 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20   &pStmt, 0);.   
2b4f0 20 20 20 64 6f 53 74 61 74 73 20 3d 20 73 71 6c     doStats = sql
2b500 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
2b510 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  ==SQLITE_ROW;.  
2b520 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
2b530 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
2b540 20 7d 0a 20 20 20 20 69 66 28 20 64 6f 53 74 61   }.    if( doSta
2b550 74 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ts==0 ){.      r
2b560 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
2b570 2c 20 22 2f 2a 20 4e 6f 20 53 54 41 54 20 74 61  , "/* No STAT ta
2b580 62 6c 65 73 20 61 76 61 69 6c 61 62 6c 65 20 2a  bles available *
2b590 2f 5c 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  /\n");.    }else
2b5a0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
2b5b0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c  tf(p->out, "ANAL
2b5c0 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  YZE sqlite_maste
2b5d0 72 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 73 71  r;\n");.      sq
2b5e0 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
2b5f0 2c 20 22 53 45 4c 45 43 54 20 27 41 4e 41 4c 59  , "SELECT 'ANALY
2b600 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ZE sqlite_master
2b610 27 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  '",.            
2b620 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c         callback,
2b630 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67   &data, &zErrMsg
2b640 29 3b 0a 20 20 20 20 20 20 64 61 74 61 2e 63 4d  );.      data.cM
2b650 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20  ode = data.mode 
2b660 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a 20  = MODE_Insert;. 
2b670 20 20 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54       data.zDestT
2b680 61 62 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73  able = "sqlite_s
2b690 74 61 74 31 22 3b 0a 20 20 20 20 20 20 73 68 65  tat1";.      she
2b6a0 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22  ll_exec(p->db, "
2b6b0 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
2b6c0 6c 69 74 65 5f 73 74 61 74 31 22 2c 0a 20 20 20  lite_stat1",.   
2b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68                sh
2b6e0 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64  ell_callback, &d
2b6f0 61 74 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ata,&zErrMsg);. 
2b700 20 20 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54       data.zDestT
2b710 61 62 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73  able = "sqlite_s
2b720 74 61 74 33 22 3b 0a 20 20 20 20 20 20 73 68 65  tat3";.      she
2b730 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22  ll_exec(p->db, "
2b740 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
2b750 6c 69 74 65 5f 73 74 61 74 33 22 2c 0a 20 20 20  lite_stat3",.   
2b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68                sh
2b770 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64  ell_callback, &d
2b780 61 74 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ata,&zErrMsg);. 
2b790 20 20 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54       data.zDestT
2b7a0 61 62 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73  able = "sqlite_s
2b7b0 74 61 74 34 22 3b 0a 20 20 20 20 20 20 73 68 65  tat4";.      she
2b7c0 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22  ll_exec(p->db, "
2b7d0 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
2b7e0 6c 69 74 65 5f 73 74 61 74 34 22 2c 0a 20 20 20  lite_stat4",.   
2b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68                sh
2b800 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64  ell_callback, &d
2b810 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a  ata, &zErrMsg);.
2b820 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2b830 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a  (p->out, "ANALYZ
2b840 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  E sqlite_master;
2b850 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  \n");.    }.  }e
2b860 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 68  lse..  if( c=='h
2b870 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
2b880 72 67 5b 30 5d 2c 20 22 68 65 61 64 65 72 73 22  rg[0], "headers"
2b890 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
2b8a0 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20  f( nArg==2 ){.  
2b8b0 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61 64 65      p->showHeade
2b8c0 72 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65  r = booleanValue
2b8d0 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20  (azArg[1]);.    
2b8e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77  }else{.      raw
2b8f0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2b900 22 55 73 61 67 65 3a 20 2e 68 65 61 64 65 72 73  "Usage: .headers
2b910 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20   on|off\n");.   
2b920 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
2b930 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
2b940 63 3d 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d  c=='h' && strncm
2b950 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 68 65 6c  p(azArg[0], "hel
2b960 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  p", n)==0 ){.   
2b970 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
2b980 6f 75 74 2c 20 22 25 73 22 2c 20 7a 48 65 6c 70  out, "%s", zHelp
2b990 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66  );.  }else..  if
2b9a0 28 20 63 3d 3d 27 69 27 20 26 26 20 73 74 72 6e  ( c=='i' && strn
2b9b0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69  cmp(azArg[0], "i
2b9c0 6d 70 6f 72 74 22 2c 20 6e 29 3d 3d 30 20 29 7b  mport", n)==0 ){
2b9d0 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 61 62 6c  .    char *zTabl
2b9e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
2b9f0 20 2f 2a 20 49 6e 73 65 72 74 20 64 61 74 61 20   /* Insert data 
2ba00 69 6e 74 6f 20 74 68 69 73 20 74 61 62 6c 65 20  into this table 
2ba10 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 46 69  */.    char *zFi
2ba20 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
2ba30 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 66 69     /* Name of fi
2ba40 6c 65 20 74 6f 20 65 78 74 72 61 20 63 6f 6e 74  le to extra cont
2ba50 65 6e 74 20 66 72 6f 6d 20 2a 2f 0a 20 20 20 20  ent from */.    
2ba60 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
2ba70 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20 2f 2a 20 41  tmt = NULL; /* A
2ba80 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
2ba90 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20    int nCol;     
2baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2bab0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
2bac0 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ns in the table 
2bad0 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 42 79 74 65  */.    int nByte
2bae0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2baf0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2bb00 62 79 74 65 73 20 69 6e 20 61 6e 20 53 51 4c 20  bytes in an SQL 
2bb10 73 74 72 69 6e 67 20 2a 2f 0a 20 20 20 20 69 6e  string */.    in
2bb20 74 20 69 2c 20 6a 3b 20 20 20 20 20 20 20 20 20  t i, j;         
2bb30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
2bb40 70 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  p counters */.  
2bb50 20 20 69 6e 74 20 6e 65 65 64 43 6f 6d 6d 69 74    int needCommit
2bb60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
2bb70 20 54 72 75 65 20 74 6f 20 43 4f 4d 4d 49 54 20   True to COMMIT 
2bb80 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 61 74 20 65  or ROLLBACK at e
2bb90 6e 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 53  nd */.    int nS
2bba0 65 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ep;             
2bbb0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2bbc0 6f 66 20 62 79 74 65 73 20 69 6e 20 70 2d 3e 63  of bytes in p->c
2bbd0 6f 6c 53 65 70 61 72 61 74 6f 72 5b 5d 20 2a 2f  olSeparator[] */
2bbe0 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  .    char *zSql;
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc00 20 2f 2a 20 41 6e 20 53 51 4c 20 73 74 61 74 65   /* An SQL state
2bc10 6d 65 6e 74 20 2a 2f 0a 20 20 20 20 49 6d 70 6f  ment */.    Impo
2bc20 72 74 43 74 78 20 73 43 74 78 3b 20 20 20 20 20  rtCtx sCtx;     
2bc30 20 20 20 20 20 20 20 20 2f 2a 20 52 65 61 64 65          /* Reade
2bc40 72 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20  r context */.   
2bc50 20 63 68 61 72 20 2a 28 53 51 4c 49 54 45 5f 43   char *(SQLITE_C
2bc60 44 45 43 4c 20 2a 78 52 65 61 64 29 28 49 6d 70  DECL *xRead)(Imp
2bc70 6f 72 74 43 74 78 2a 29 3b 20 2f 2a 20 46 75 6e  ortCtx*); /* Fun
2bc80 63 20 74 6f 20 72 65 61 64 20 6f 6e 65 20 76 61  c to read one va
2bc90 6c 75 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 28  lue */.    int (
2bca0 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 78 43  SQLITE_CDECL *xC
2bcb0 6c 6f 73 65 72 29 28 46 49 4c 45 2a 29 3b 20 20  loser)(FILE*);  
2bcc0 20 20 20 20 2f 2a 20 46 75 6e 63 20 74 6f 20 63      /* Func to c
2bcd0 6c 6f 73 65 20 66 69 6c 65 20 2a 2f 0a 0a 20 20  lose file */..  
2bce0 20 20 69 66 28 20 6e 41 72 67 21 3d 33 20 29 7b    if( nArg!=3 ){
2bcf0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
2bd00 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
2bd10 3a 20 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54  : .import FILE T
2bd20 41 42 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ABLE\n");.      
2bd30 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2bd40 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
2bd50 20 20 7a 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b    zFile = azArg[
2bd60 31 5d 3b 0a 20 20 20 20 7a 54 61 62 6c 65 20 3d  1];.    zTable =
2bd70 20 61 7a 41 72 67 5b 32 5d 3b 0a 20 20 20 20 73   azArg[2];.    s
2bd80 65 65 6e 49 6e 74 65 72 72 75 70 74 20 3d 20 30  eenInterrupt = 0
2bd90 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 73 43  ;.    memset(&sC
2bda0 74 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43  tx, 0, sizeof(sC
2bdb0 74 78 29 29 3b 0a 20 20 20 20 6f 70 65 6e 5f 64  tx));.    open_d
2bdc0 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6e 53 65  b(p, 0);.    nSe
2bdd0 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e  p = strlen30(p->
2bde0 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  colSeparator);. 
2bdf0 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30 20 29     if( nSep==0 )
2be00 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
2be10 74 66 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20  tf(stderr,.     
2be20 20 20 20 20 20 20 20 20 20 20 20 20 22 45 72 72              "Err
2be30 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 63 6f 6c  or: non-null col
2be40 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 72 65  umn separator re
2be50 71 75 69 72 65 64 20 66 6f 72 20 69 6d 70 6f 72  quired for impor
2be60 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  t\n");.      ret
2be70 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
2be80 20 69 66 28 20 6e 53 65 70 3e 31 20 29 7b 0a 20   if( nSep>1 ){. 
2be90 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2bea0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
2beb0 6d 75 6c 74 69 2d 63 68 61 72 61 63 74 65 72 20  multi-character 
2bec0 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72  column separator
2bed0 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20  s not allowed". 
2bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bef0 20 20 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72       " for impor
2bf00 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  t\n");.      ret
2bf10 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
2bf20 20 6e 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30   nSep = strlen30
2bf30 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72  (p->rowSeparator
2bf40 29 3b 0a 20 20 20 20 69 66 28 20 6e 53 65 70 3d  );.    if( nSep=
2bf50 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  =0 ){.      raw_
2bf60 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2bf70 45 72 72 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20  Error: non-null 
2bf80 72 6f 77 20 73 65 70 61 72 61 74 6f 72 20 72 65  row separator re
2bf90 71 75 69 72 65 64 20 66 6f 72 20 69 6d 70 6f 72  quired for impor
2bfa0 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  t\n");.      ret
2bfb0 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
2bfc0 20 69 66 28 20 6e 53 65 70 3d 3d 32 20 26 26 20   if( nSep==2 && 
2bfd0 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 43 73  p->mode==MODE_Cs
2bfe0 76 20 26 26 20 73 74 72 63 6d 70 28 70 2d 3e 72  v && strcmp(p->r
2bff0 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50  owSeparator, SEP
2c000 5f 43 72 4c 66 29 3d 3d 30 20 29 7b 0a 20 20 20  _CrLf)==0 ){.   
2c010 20 20 20 2f 2a 20 57 68 65 6e 20 69 6d 70 6f 72     /* When impor
2c020 74 69 6e 67 20 43 53 56 20 28 6f 6e 6c 79 29 2c  ting CSV (only),
2c030 20 69 66 20 74 68 65 20 72 6f 77 20 73 65 70 61   if the row sepa
2c040 72 61 74 6f 72 20 69 73 20 73 65 74 20 74 6f 20  rator is set to 
2c050 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 64 65 66  the.      ** def
2c060 61 75 6c 74 20 6f 75 74 70 75 74 20 72 6f 77 20  ault output row 
2c070 73 65 70 61 72 61 74 6f 72 2c 20 63 68 61 6e 67  separator, chang
2c080 65 20 69 74 20 74 6f 20 74 68 65 20 64 65 66 61  e it to the defa
2c090 75 6c 74 20 69 6e 70 75 74 0a 20 20 20 20 20 20  ult input.      
2c0a0 2a 2a 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72  ** row separator
2c0b0 2e 20 20 54 68 69 73 20 61 76 6f 69 64 73 20 68  .  This avoids h
2c0c0 61 76 69 6e 67 20 74 6f 20 6d 61 69 6e 74 61 69  aving to maintai
2c0d0 6e 20 64 69 66 66 65 72 65 6e 74 20 69 6e 70 75  n different inpu
2c0e0 74 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 6f  t.      ** and o
2c0f0 75 74 70 75 74 20 72 6f 77 20 73 65 70 61 72 61  utput row separa
2c100 74 6f 72 73 2e 20 2a 2f 0a 20 20 20 20 20 20 73  tors. */.      s
2c110 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
2c120 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70  sizeof(p->rowSep
2c130 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53  arator), p->rowS
2c140 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f  eparator, SEP_Ro
2c150 77 29 3b 0a 20 20 20 20 20 20 6e 53 65 70 20 3d  w);.      nSep =
2c160 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 72 6f 77   strlen30(p->row
2c170 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
2c180 7d 0a 20 20 20 20 69 66 28 20 6e 53 65 70 3e 31  }.    if( nSep>1
2c190 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
2c1a0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
2c1b0 72 6f 72 3a 20 6d 75 6c 74 69 2d 63 68 61 72 61  ror: multi-chara
2c1c0 63 74 65 72 20 72 6f 77 20 73 65 70 61 72 61 74  cter row separat
2c1d0 6f 72 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 22  ors not allowed"
2c1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c1f0 20 20 20 20 20 20 20 22 20 66 6f 72 20 69 6d 70         " for imp
2c200 6f 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  ort\n");.      r
2c210 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
2c220 20 20 20 73 43 74 78 2e 7a 46 69 6c 65 20 3d 20     sCtx.zFile = 
2c230 7a 46 69 6c 65 3b 0a 20 20 20 20 73 43 74 78 2e  zFile;.    sCtx.
2c240 6e 4c 69 6e 65 20 3d 20 31 3b 0a 20 20 20 20 69  nLine = 1;.    i
2c250 66 28 20 73 43 74 78 2e 7a 46 69 6c 65 5b 30 5d  f( sCtx.zFile[0]
2c260 3d 3d 27 7c 27 20 29 7b 0a 23 69 66 64 65 66 20  =='|' ){.#ifdef 
2c270 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f 50 45  SQLITE_OMIT_POPE
2c280 4e 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  N.      raw_prin
2c290 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
2c2a0 72 3a 20 70 69 70 65 73 20 61 72 65 20 6e 6f 74  r: pipes are not
2c2b0 20 73 75 70 70 6f 72 74 65 64 20 69 6e 20 74 68   supported in th
2c2c0 69 73 20 4f 53 5c 6e 22 29 3b 0a 20 20 20 20 20  is OS\n");.     
2c2d0 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65   return 1;.#else
2c2e0 0a 20 20 20 20 20 20 73 43 74 78 2e 69 6e 20 3d  .      sCtx.in =
2c2f0 20 70 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c   popen(sCtx.zFil
2c300 65 2b 31 2c 20 22 72 22 29 3b 0a 20 20 20 20 20  e+1, "r");.     
2c310 20 73 43 74 78 2e 7a 46 69 6c 65 20 3d 20 22 3c   sCtx.zFile = "<
2c320 70 69 70 65 3e 22 3b 0a 20 20 20 20 20 20 78 43  pipe>";.      xC
2c330 6c 6f 73 65 72 20 3d 20 70 63 6c 6f 73 65 3b 0a  loser = pclose;.
2c340 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65  #endif.    }else
2c350 7b 0a 20 20 20 20 20 20 73 43 74 78 2e 69 6e 20  {.      sCtx.in 
2c360 3d 20 66 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69  = fopen(sCtx.zFi
2c370 6c 65 2c 20 22 72 62 22 29 3b 0a 20 20 20 20 20  le, "rb");.     
2c380 20 78 43 6c 6f 73 65 72 20 3d 20 66 63 6c 6f 73   xCloser = fclos
2c390 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  e;.    }.    if(
2c3a0 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 41   p->mode==MODE_A
2c3b0 73 63 69 69 20 29 7b 0a 20 20 20 20 20 20 78 52  scii ){.      xR
2c3c0 65 61 64 20 3d 20 61 73 63 69 69 5f 72 65 61 64  ead = ascii_read
2c3d0 5f 6f 6e 65 5f 66 69 65 6c 64 3b 0a 20 20 20 20  _one_field;.    
2c3e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 78 52 65  }else{.      xRe
2c3f0 61 64 20 3d 20 63 73 76 5f 72 65 61 64 5f 6f 6e  ad = csv_read_on
2c400 65 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d 0a 20  e_field;.    }. 
2c410 20 20 20 69 66 28 20 73 43 74 78 2e 69 6e 3d 3d     if( sCtx.in==
2c420 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  0 ){.      utf8_
2c430 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2c440 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70  Error: cannot op
2c450 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46  en \"%s\"\n", zF
2c460 69 6c 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ile);.      retu
2c470 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
2c480 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 3d 20 70  sCtx.cColSep = p
2c490 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 30  ->colSeparator[0
2c4a0 5d 3b 0a 20 20 20 20 73 43 74 78 2e 63 52 6f 77  ];.    sCtx.cRow
2c4b0 53 65 70 20 3d 20 70 2d 3e 72 6f 77 53 65 70 61  Sep = p->rowSepa
2c4c0 72 61 74 6f 72 5b 30 5d 3b 0a 20 20 20 20 7a 53  rator[0];.    zS
2c4d0 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
2c4e0 69 6e 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46  intf("SELECT * F
2c4f0 52 4f 4d 20 25 73 22 2c 20 7a 54 61 62 6c 65 29  ROM %s", zTable)
2c500 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d  ;.    if( zSql==
2c510 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
2c520 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
2c530 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d  rror: out of mem
2c540 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 78  ory\n");.      x
2c550 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b  Closer(sCtx.in);
2c560 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
2c570 0a 20 20 20 20 7d 0a 20 20 20 20 6e 42 79 74 65  .    }.    nByte
2c580 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 53 71 6c   = strlen30(zSql
2c590 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
2c5a0 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
2c5b0 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20  ->db, zSql, -1, 
2c5c0 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  &pStmt, 0);.    
2c5d0 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68  import_append_ch
2c5e0 61 72 28 26 73 43 74 78 2c 20 30 29 3b 20 20 20  ar(&sCtx, 0);   
2c5f0 20 2f 2a 20 54 6f 20 65 6e 73 75 72 65 20 73 43   /* To ensure sC
2c600 74 78 2e 7a 20 69 73 20 61 6c 6c 6f 63 61 74 65  tx.z is allocate
2c610 64 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 20  d */.    if( rc 
2c620 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c  && sqlite3_strgl
2c630 6f 62 28 22 6e 6f 20 73 75 63 68 20 74 61 62 6c  ob("no such tabl
2c640 65 3a 20 2a 22 2c 20 73 71 6c 69 74 65 33 5f 65  e: *", sqlite3_e
2c650 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3d 3d 30  rrmsg(p->db))==0
2c660 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a   ){.      char *
2c670 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65  zCreate = sqlite
2c680 33 5f 6d 70 72 69 6e 74 66 28 22 43 52 45 41 54  3_mprintf("CREAT
2c690 45 20 54 41 42 4c 45 20 25 73 22 2c 20 7a 54 61  E TABLE %s", zTa
2c6a0 62 6c 65 29 3b 0a 20 20 20 20 20 20 63 68 61 72  ble);.      char
2c6b0 20 63 53 65 70 20 3d 20 27 28 27 3b 0a 20 20 20   cSep = '(';.   
2c6c0 20 20 20 77 68 69 6c 65 28 20 78 52 65 61 64 28     while( xRead(
2c6d0 26 73 43 74 78 29 20 29 7b 0a 20 20 20 20 20 20  &sCtx) ){.      
2c6e0 20 20 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69    zCreate = sqli
2c6f0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 25  te3_mprintf("%z%
2c700 63 5c 6e 20 20 5c 22 25 77 5c 22 20 54 45 58 54  c\n  \"%w\" TEXT
2c710 22 2c 20 7a 43 72 65 61 74 65 2c 20 63 53 65 70  ", zCreate, cSep
2c720 2c 20 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20  , sCtx.z);.     
2c730 20 20 20 63 53 65 70 20 3d 20 27 2c 27 3b 0a 20     cSep = ',';. 
2c740 20 20 20 20 20 20 20 69 66 28 20 73 43 74 78 2e         if( sCtx.
2c750 63 54 65 72 6d 21 3d 73 43 74 78 2e 63 43 6f 6c  cTerm!=sCtx.cCol
2c760 53 65 70 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  Sep ) break;.   
2c770 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63     }.      if( c
2c780 53 65 70 3d 3d 27 28 27 20 29 7b 0a 20 20 20 20  Sep=='(' ){.    
2c790 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2c7a0 28 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20  (zCreate);.     
2c7b0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2c7c0 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20  sCtx.z);.       
2c7d0 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e   xCloser(sCtx.in
2c7e0 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  );.        utf8_
2c7f0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25  printf(stderr,"%
2c800 73 3a 20 65 6d 70 74 79 20 66 69 6c 65 5c 6e 22  s: empty file\n"
2c810 2c 20 73 43 74 78 2e 7a 46 69 6c 65 29 3b 0a 20  , sCtx.zFile);. 
2c820 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
2c830 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
2c840 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33  Create = sqlite3
2c850 5f 6d 70 72 69 6e 74 66 28 22 25 7a 5c 6e 29 22  _mprintf("%z\n)"
2c860 2c 20 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20  , zCreate);.    
2c870 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
2c880 78 65 63 28 70 2d 3e 64 62 2c 20 7a 43 72 65 61  xec(p->db, zCrea
2c890 74 65 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  te, 0, 0, 0);.  
2c8a0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2c8b0 28 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20  (zCreate);.     
2c8c0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
2c8d0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
2c8e0 74 64 65 72 72 2c 20 22 43 52 45 41 54 45 20 54  tderr, "CREATE T
2c8f0 41 42 4c 45 20 25 73 28 2e 2e 2e 29 20 66 61 69  ABLE %s(...) fai
2c900 6c 65 64 3a 20 25 73 5c 6e 22 2c 20 7a 54 61 62  led: %s\n", zTab
2c910 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  le,.            
2c920 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d      sqlite3_errm
2c930 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20  sg(p->db));.    
2c940 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2c950 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20  (sCtx.z);.      
2c960 20 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69    xCloser(sCtx.i
2c970 6e 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  n);.        retu
2c980 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rn 1;.      }.  
2c990 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2c9a0 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
2c9b0 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53  b, zSql, -1, &pS
2c9c0 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  tmt, 0);.    }. 
2c9d0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2c9e0 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20 72  zSql);.    if( r
2c9f0 63 20 29 7b 0a 20 20 20 20 20 20 69 66 20 28 70  c ){.      if (p
2ca00 53 74 6d 74 29 20 73 71 6c 69 74 65 33 5f 66 69  Stmt) sqlite3_fi
2ca10 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
2ca20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2ca30 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
2ca40 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
2ca50 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20  rrmsg(p->db));. 
2ca60 20 20 20 20 20 78 43 6c 6f 73 65 72 28 73 43 74       xCloser(sCt
2ca70 78 2e 69 6e 29 3b 0a 20 20 20 20 20 20 72 65 74  x.in);.      ret
2ca80 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
2ca90 20 6e 43 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f   nCol = sqlite3_
2caa0 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74  column_count(pSt
2cab0 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  mt);.    sqlite3
2cac0 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
2cad0 3b 0a 20 20 20 20 70 53 74 6d 74 20 3d 20 30 3b  ;.    pStmt = 0;
2cae0 0a 20 20 20 20 69 66 28 20 6e 43 6f 6c 3d 3d 30  .    if( nCol==0
2caf0 20 29 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a 20   ) return 0; /* 
2cb00 6e 6f 20 63 6f 6c 75 6d 6e 73 2c 20 6e 6f 20 65  no columns, no e
2cb10 72 72 6f 72 20 2a 2f 0a 20 20 20 20 7a 53 71 6c  rror */.    zSql
2cb20 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f   = sqlite3_mallo
2cb30 63 36 34 28 20 6e 42 79 74 65 2a 32 20 2b 20 32  c64( nByte*2 + 2
2cb40 30 20 2b 20 6e 43 6f 6c 2a 32 20 29 3b 0a 20 20  0 + nCol*2 );.  
2cb50 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
2cb60 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
2cb70 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
2cb80 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c  : out of memory\
2cb90 6e 22 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73  n");.      xClos
2cba0 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
2cbb0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
2cbc0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73   }.    sqlite3_s
2cbd0 6e 70 72 69 6e 74 66 28 6e 42 79 74 65 2b 32 30  nprintf(nByte+20
2cbe0 2c 20 7a 53 71 6c 2c 20 22 49 4e 53 45 52 54 20  , zSql, "INSERT 
2cbf0 49 4e 54 4f 20 5c 22 25 77 5c 22 20 56 41 4c 55  INTO \"%w\" VALU
2cc00 45 53 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a  ES(?", zTable);.
2cc10 20 20 20 20 6a 20 3d 20 73 74 72 6c 65 6e 33 30      j = strlen30
2cc20 28 7a 53 71 6c 29 3b 0a 20 20 20 20 66 6f 72 28  (zSql);.    for(
2cc30 69 3d 31 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b  i=1; i<nCol; i++
2cc40 29 7b 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6a 2b  ){.      zSql[j+
2cc50 2b 5d 20 3d 20 27 2c 27 3b 0a 20 20 20 20 20 20  +] = ',';.      
2cc60 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d 20 27 3f 27 3b  zSql[j++] = '?';
2cc70 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 5b  .    }.    zSql[
2cc80 6a 2b 2b 5d 20 3d 20 27 29 27 3b 0a 20 20 20 20  j++] = ')';.    
2cc90 7a 53 71 6c 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20  zSql[j] = 0;.   
2cca0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
2ccb0 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
2ccc0 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74  zSql, -1, &pStmt
2ccd0 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
2cce0 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  3_free(zSql);.  
2ccf0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
2cd00 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
2cd10 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73  derr, "Error: %s
2cd20 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  \n", sqlite3_err
2cd30 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  msg(p->db));.   
2cd40 20 20 20 69 66 20 28 70 53 74 6d 74 29 20 73 71     if (pStmt) sq
2cd50 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
2cd60 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 78 43 6c  Stmt);.      xCl
2cd70 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
2cd80 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
2cd90 20 20 20 7d 0a 20 20 20 20 6e 65 65 64 43 6f 6d     }.    needCom
2cda0 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 5f 67 65  mit = sqlite3_ge
2cdb0 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 70 2d 3e  t_autocommit(p->
2cdc0 64 62 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 65  db);.    if( nee
2cdd0 64 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74 65  dCommit ) sqlite
2cde0 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 42  3_exec(p->db, "B
2cdf0 45 47 49 4e 22 2c 20 30 2c 20 30 2c 20 30 29 3b  EGIN", 0, 0, 0);
2ce00 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 69  .    do{.      i
2ce10 6e 74 20 73 74 61 72 74 4c 69 6e 65 20 3d 20 73  nt startLine = s
2ce20 43 74 78 2e 6e 4c 69 6e 65 3b 0a 20 20 20 20 20  Ctx.nLine;.     
2ce30 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c   for(i=0; i<nCol
2ce40 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
2ce50 63 68 61 72 20 2a 7a 20 3d 20 78 52 65 61 64 28  char *z = xRead(
2ce60 26 73 43 74 78 29 3b 0a 20 20 20 20 20 20 20 20  &sCtx);.        
2ce70 2f 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 44 69  /*.        ** Di
2ce80 64 20 77 65 20 72 65 61 63 68 20 65 6e 64 2d 6f  d we reach end-o
2ce90 66 2d 66 69 6c 65 20 62 65 66 6f 72 65 20 66 69  f-file before fi
2cea0 6e 64 69 6e 67 20 61 6e 79 20 63 6f 6c 75 6d 6e  nding any column
2ceb0 73 3f 0a 20 20 20 20 20 20 20 20 2a 2a 20 49 66  s?.        ** If
2cec0 20 73 6f 2c 20 73 74 6f 70 20 69 6e 73 74 65 61   so, stop instea
2ced0 64 20 6f 66 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e  d of NULL fillin
2cee0 67 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  g the remaining 
2cef0 63 6f 6c 75 6d 6e 73 2e 0a 20 20 20 20 20 20 20  columns..       
2cf00 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
2cf10 7a 3d 3d 30 20 26 26 20 69 3d 3d 30 20 29 20 62  z==0 && i==0 ) b
2cf20 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 2f 2a  reak;.        /*
2cf30 0a 20 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20  .        ** Did 
2cf40 77 65 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d  we reach end-of-
2cf50 66 69 6c 65 20 4f 52 20 65 6e 64 2d 6f 66 2d 6c  file OR end-of-l
2cf60 69 6e 65 20 62 65 66 6f 72 65 20 66 69 6e 64 69  ine before findi
2cf70 6e 67 20 61 6e 79 0a 20 20 20 20 20 20 20 20 2a  ng any.        *
2cf80 2a 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 41 53 43  * columns in ASC
2cf90 49 49 20 6d 6f 64 65 3f 20 20 49 66 20 73 6f 2c  II mode?  If so,
2cfa0 20 73 74 6f 70 20 69 6e 73 74 65 61 64 20 6f 66   stop instead of
2cfb0 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 0a 20 20   NULL filling.  
2cfc0 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 6d        ** the rem
2cfd0 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a  aining columns..
2cfe0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
2cff0 20 20 20 69 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d     if( p->mode==
2d000 4d 4f 44 45 5f 41 73 63 69 69 20 26 26 20 28 7a  MODE_Ascii && (z
2d010 3d 3d 30 20 7c 7c 20 7a 5b 30 5d 3d 3d 30 29 20  ==0 || z[0]==0) 
2d020 26 26 20 69 3d 3d 30 20 29 20 62 72 65 61 6b 3b  && i==0 ) break;
2d030 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2d040 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
2d050 2c 20 69 2b 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  , i+1, z, -1, SQ
2d060 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
2d070 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3c 6e  .        if( i<n
2d080 43 6f 6c 2d 31 20 26 26 20 73 43 74 78 2e 63 54  Col-1 && sCtx.cT
2d090 65 72 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65  erm!=sCtx.cColSe
2d0a0 70 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  p ){.          u
2d0b0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
2d0c0 72 2c 20 22 25 73 3a 25 64 3a 20 65 78 70 65 63  r, "%s:%d: expec
2d0d0 74 65 64 20 25 64 20 63 6f 6c 75 6d 6e 73 20 62  ted %d columns b
2d0e0 75 74 20 66 6f 75 6e 64 20 25 64 20 2d 20 22 0a  ut found %d - ".
2d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d100 20 20 20 20 20 20 20 20 20 20 22 66 69 6c 6c 69            "filli
2d110 6e 67 20 74 68 65 20 72 65 73 74 20 77 69 74 68  ng the rest with
2d120 20 4e 55 4c 4c 5c 6e 22 2c 0a 20 20 20 20 20 20   NULL\n",.      
2d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d140 20 20 20 20 73 43 74 78 2e 7a 46 69 6c 65 2c 20      sCtx.zFile, 
2d150 73 74 61 72 74 4c 69 6e 65 2c 20 6e 43 6f 6c 2c  startLine, nCol,
2d160 20 69 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 20   i+1);.         
2d170 20 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 20   i += 2;.       
2d180 20 20 20 77 68 69 6c 65 28 20 69 3c 3d 6e 43 6f     while( i<=nCo
2d190 6c 20 29 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e  l ){ sqlite3_bin
2d1a0 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 29  d_null(pStmt, i)
2d1b0 3b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  ; i++; }.       
2d1c0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
2d1d0 20 69 66 28 20 73 43 74 78 2e 63 54 65 72 6d 3d   if( sCtx.cTerm=
2d1e0 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 7b  =sCtx.cColSep ){
2d1f0 0a 20 20 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  .        do{.   
2d200 20 20 20 20 20 20 20 78 52 65 61 64 28 26 73 43         xRead(&sC
2d210 74 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  tx);.          i
2d220 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 77 68 69  ++;.        }whi
2d230 6c 65 28 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d  le( sCtx.cTerm==
2d240 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 3b 0a  sCtx.cColSep );.
2d250 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
2d260 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a  ntf(stderr, "%s:
2d270 25 64 3a 20 65 78 70 65 63 74 65 64 20 25 64 20  %d: expected %d 
2d280 63 6f 6c 75 6d 6e 73 20 62 75 74 20 66 6f 75 6e  columns but foun
2d290 64 20 25 64 20 2d 20 22 0a 20 20 20 20 20 20 20  d %d - ".       
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2b0 20 22 65 78 74 72 61 73 20 69 67 6e 6f 72 65 64   "extras ignored
2d2c0 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
2d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 43 74               sCt
2d2e0 78 2e 7a 46 69 6c 65 2c 20 73 74 61 72 74 4c 69  x.zFile, startLi
2d2f0 6e 65 2c 20 6e 43 6f 6c 2c 20 69 29 3b 0a 20 20  ne, nCol, i);.  
2d300 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
2d310 69 3e 3d 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20  i>=nCol ){.     
2d320 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28     sqlite3_step(
2d330 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20  pStmt);.        
2d340 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73  rc = sqlite3_res
2d350 65 74 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  et(pStmt);.     
2d360 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
2d370 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
2d380 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
2d390 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 49 4e  derr, "%s:%d: IN
2d3a0 53 45 52 54 20 66 61 69 6c 65 64 3a 20 25 73 5c  SERT failed: %s\
2d3b0 6e 22 2c 20 73 43 74 78 2e 7a 46 69 6c 65 2c 0a  n", sCtx.zFile,.
2d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3d0 20 20 20 20 20 20 73 74 61 72 74 4c 69 6e 65 2c        startLine,
2d3e0 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
2d3f0 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20  p->db));.       
2d400 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
2d410 77 68 69 6c 65 28 20 73 43 74 78 2e 63 54 65 72  while( sCtx.cTer
2d420 6d 21 3d 45 4f 46 20 29 3b 0a 0a 20 20 20 20 78  m!=EOF );..    x
2d430 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b  Closer(sCtx.in);
2d440 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
2d450 65 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 73  e(sCtx.z);.    s
2d460 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
2d470 70 53 74 6d 74 29 3b 0a 20 20 20 20 69 66 28 20  pStmt);.    if( 
2d480 6e 65 65 64 43 6f 6d 6d 69 74 20 29 20 73 71 6c  needCommit ) sql
2d490 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
2d4a0 20 22 43 4f 4d 4d 49 54 22 2c 20 30 2c 20 30 2c   "COMMIT", 0, 0,
2d4b0 20 30 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 69   0);.  }else..#i
2d4c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
2d4d0 45 53 54 41 42 4c 45 0a 20 20 69 66 28 20 63 3d  ESTABLE.  if( c=
2d4e0 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='i' && strncmp(
2d4f0 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d 70 6f 73  azArg[0], "impos
2d500 74 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ter", n)==0 ){. 
2d510 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20     char *zSql;. 
2d520 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 69 73     char *zCollis
2d530 74 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  t = 0;.    sqlit
2d540 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
2d550 20 20 20 20 69 6e 74 20 74 6e 75 6d 20 3d 20 30      int tnum = 0
2d560 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
2d570 20 69 66 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a   if( nArg!=3 ){.
2d580 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2d590 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
2d5a0 3a 20 2e 69 6d 70 6f 73 74 65 72 20 49 4e 44 45  : .imposter INDE
2d5b0 58 20 49 4d 50 4f 53 54 45 52 5c 6e 22 29 3b 0a  X IMPOSTER\n");.
2d5c0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2d5d0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
2d5e0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
2d5f0 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  }.    open_db(p,
2d600 20 30 29 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20   0);.    zSql = 
2d610 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
2d620 22 53 45 4c 45 43 54 20 72 6f 6f 74 70 61 67 65  "SELECT rootpage
2d630 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
2d640 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20  ter".           
2d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d660 22 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 25 71  " WHERE name='%q
2d670 27 20 41 4e 44 20 74 79 70 65 3d 27 69 6e 64 65  ' AND type='inde
2d680 78 27 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a  x'", azArg[1]);.
2d690 20 20 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70      sqlite3_prep
2d6a0 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53  are_v2(p->db, zS
2d6b0 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  ql, -1, &pStmt, 
2d6c0 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
2d6d0 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20  free(zSql);.    
2d6e0 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70  if( sqlite3_step
2d6f0 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
2d700 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 74 6e 75  ROW ){.      tnu
2d710 6d 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  m = sqlite3_colu
2d720 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 20 30 29  mn_int(pStmt, 0)
2d730 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
2d740 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
2d750 6d 74 29 3b 0a 20 20 20 20 69 66 28 20 74 6e 75  mt);.    if( tnu
2d760 6d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74  m==0 ){.      ut
2d770 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
2d780 2c 20 22 6e 6f 20 73 75 63 68 20 69 6e 64 65 78  , "no such index
2d790 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41  : \"%s\"\n", azA
2d7a0 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 72 63  rg[1]);.      rc
2d7b0 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f   = 1;.      goto
2d7c0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
2d7d0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53  it;.    }.    zS
2d7e0 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
2d7f0 69 6e 74 66 28 22 50 52 41 47 4d 41 20 69 6e 64  intf("PRAGMA ind
2d800 65 78 5f 78 69 6e 66 6f 3d 27 25 71 27 22 2c 20  ex_xinfo='%q'", 
2d810 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 72  azArg[1]);.    r
2d820 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
2d830 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53  are_v2(p->db, zS
2d840 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  ql, -1, &pStmt, 
2d850 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
2d860 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20  free(zSql);.    
2d870 69 20 3d 20 30 3b 0a 20 20 20 20 77 68 69 6c 65  i = 0;.    while
2d880 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ( sqlite3_step(p
2d890 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
2d8a0 57 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20  W ){.      char 
2d8b0 7a 4c 61 62 65 6c 5b 32 30 5d 3b 0a 20 20 20 20  zLabel[20];.    
2d8c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
2d8d0 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  ol = (const char
2d8e0 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
2d8f0 5f 74 65 78 74 28 70 53 74 6d 74 2c 32 29 3b 0a  _text(pStmt,2);.
2d900 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20        i++;.     
2d910 20 69 66 28 20 7a 43 6f 6c 3d 3d 30 20 29 7b 0a   if( zCol==0 ){.
2d920 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
2d930 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70  te3_column_int(p
2d940 53 74 6d 74 2c 31 29 3d 3d 2d 31 20 29 7b 0a 20  Stmt,1)==-1 ){. 
2d950 20 20 20 20 20 20 20 20 20 7a 43 6f 6c 20 3d 20           zCol = 
2d960 22 5f 52 4f 57 49 44 5f 22 3b 0a 20 20 20 20 20  "_ROWID_";.     
2d970 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2d980 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2d990 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c 61 62  intf(sizeof(zLab
2d9a0 65 6c 29 2c 7a 4c 61 62 65 6c 2c 22 65 78 70 72  el),zLabel,"expr
2d9b0 25 64 22 2c 69 29 3b 0a 20 20 20 20 20 20 20 20  %d",i);.        
2d9c0 20 20 7a 43 6f 6c 20 3d 20 7a 4c 61 62 65 6c 3b    zCol = zLabel;
2d9d0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2d9e0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 43 6f   }.      if( zCo
2d9f0 6c 6c 69 73 74 3d 3d 30 20 29 7b 0a 20 20 20 20  llist==0 ){.    
2da00 20 20 20 20 7a 43 6f 6c 6c 69 73 74 20 3d 20 73      zCollist = s
2da10 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
2da20 5c 22 25 77 5c 22 22 2c 20 7a 43 6f 6c 29 3b 0a  \"%w\"", zCol);.
2da30 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
2da40 20 20 20 20 20 7a 43 6f 6c 6c 69 73 74 20 3d 20       zCollist = 
2da50 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
2da60 22 25 7a 2c 5c 22 25 77 5c 22 22 2c 20 7a 43 6f  "%z,\"%w\"", zCo
2da70 6c 6c 69 73 74 2c 20 7a 43 6f 6c 29 3b 0a 20 20  llist, zCol);.  
2da80 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2da90 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
2daa0 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 7a 53 71  (pStmt);.    zSq
2dab0 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  l = sqlite3_mpri
2dac0 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20 20 22  ntf(.          "
2dad0 43 52 45 41 54 45 20 54 41 42 4c 45 20 5c 22 25  CREATE TABLE \"%
2dae0 77 5c 22 28 25 73 2c 50 52 49 4d 41 52 59 20 4b  w\"(%s,PRIMARY K
2daf0 45 59 28 25 73 29 29 57 49 54 48 4f 55 54 20 52  EY(%s))WITHOUT R
2db00 4f 57 49 44 22 2c 0a 20 20 20 20 20 20 20 20 20  OWID",.         
2db10 20 61 7a 41 72 67 5b 32 5d 2c 20 7a 43 6f 6c 6c   azArg[2], zColl
2db20 69 73 74 2c 20 7a 43 6f 6c 6c 69 73 74 29 3b 0a  ist, zCollist);.
2db30 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2db40 28 7a 43 6f 6c 6c 69 73 74 29 3b 0a 20 20 20 20  (zCollist);.    
2db50 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73  rc = sqlite3_tes
2db60 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
2db70 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54  _TESTCTRL_IMPOST
2db80 45 52 2c 20 70 2d 3e 64 62 2c 20 22 6d 61 69 6e  ER, p->db, "main
2db90 22 2c 20 31 2c 20 74 6e 75 6d 29 3b 0a 20 20 20  ", 1, tnum);.   
2dba0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2dbb0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
2dbc0 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
2dbd0 3e 64 62 2c 20 7a 53 71 6c 2c 20 30 2c 20 30 2c  >db, zSql, 0, 0,
2dbe0 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
2dbf0 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
2dc00 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2dc10 49 4d 50 4f 53 54 45 52 2c 20 70 2d 3e 64 62 2c  IMPOSTER, p->db,
2dc20 20 22 6d 61 69 6e 22 2c 20 30 2c 20 30 29 3b 0a   "main", 0, 0);.
2dc30 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a        if( rc ){.
2dc40 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
2dc50 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
2dc60 6f 72 20 69 6e 20 5b 25 73 5d 3a 20 25 73 5c 6e  or in [%s]: %s\n
2dc70 22 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  ", zSql, sqlite3
2dc80 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b  _errmsg(p->db));
2dc90 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
2dca0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2dcb0 66 28 73 74 64 6f 75 74 2c 20 22 25 73 3b 5c 6e  f(stdout, "%s;\n
2dcc0 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20  ", zSql);.      
2dcd0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2dce0 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  out,.           
2dcf0 22 57 41 52 4e 49 4e 47 3a 20 77 72 69 74 69 6e  "WARNING: writin
2dd00 67 20 74 6f 20 61 6e 20 69 6d 70 6f 73 74 65 72  g to an imposter
2dd10 20 74 61 62 6c 65 20 77 69 6c 6c 20 63 6f 72 72   table will corr
2dd20 75 70 74 20 74 68 65 20 69 6e 64 65 78 21 5c 6e  upt the index!\n
2dd30 22 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20  ".        );.   
2dd40 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
2dd50 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2dd60 28 73 74 64 65 72 72 2c 20 22 53 51 4c 49 54 45  (stderr, "SQLITE
2dd70 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54  _TESTCTRL_IMPOST
2dd80 45 52 20 72 65 74 75 72 6e 73 20 25 64 5c 6e 22  ER returns %d\n"
2dd90 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 72 63 20  , rc);.      rc 
2dda0 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  = 1;.    }.    s
2ddb0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
2ddc0 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  );.  }else.#endi
2ddd0 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
2dde0 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 53 54 5f 43  LITE_OMIT_TEST_C
2ddf0 4f 4e 54 52 4f 4c 29 20 2a 2f 0a 0a 23 69 66 64  ONTROL) */..#ifd
2de00 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2de10 5f 49 4f 54 52 41 43 45 0a 20 20 69 66 28 20 63  _IOTRACE.  if( c
2de20 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70  =='i' && strncmp
2de30 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6f 74 72  (azArg[0], "iotr
2de40 61 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ace", n)==0 ){. 
2de50 20 20 20 53 51 4c 49 54 45 5f 41 50 49 20 65 78     SQLITE_API ex
2de60 74 65 72 6e 20 76 6f 69 64 20 28 53 51 4c 49 54  tern void (SQLIT
2de70 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33  E_CDECL *sqlite3
2de80 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63  IoTrace)(const c
2de90 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 20 20  har*, ...);.    
2dea0 69 66 28 20 69 6f 74 72 61 63 65 20 26 26 20 69  if( iotrace && i
2deb0 6f 74 72 61 63 65 21 3d 73 74 64 6f 75 74 20 29  otrace!=stdout )
2dec0 20 66 63 6c 6f 73 65 28 69 6f 74 72 61 63 65 29   fclose(iotrace)
2ded0 3b 0a 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20  ;.    iotrace = 
2dee0 30 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c  0;.    if( nArg<
2def0 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  2 ){.      sqlit
2df00 65 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a 20  e3IoTrace = 0;. 
2df10 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
2df20 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20 22 2d  cmp(azArg[1], "-
2df30 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ")==0 ){.      s
2df40 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 3d 20  qlite3IoTrace = 
2df50 69 6f 74 72 61 63 65 50 72 69 6e 74 66 3b 0a 20  iotracePrintf;. 
2df60 20 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20 73       iotrace = s
2df70 74 64 6f 75 74 3b 0a 20 20 20 20 7d 65 6c 73 65  tdout;.    }else
2df80 7b 0a 20 20 20 20 20 20 69 6f 74 72 61 63 65 20  {.      iotrace 
2df90 3d 20 66 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d  = fopen(azArg[1]
2dfa0 2c 20 22 77 22 29 3b 0a 20 20 20 20 20 20 69 66  , "w");.      if
2dfb0 28 20 69 6f 74 72 61 63 65 3d 3d 30 20 29 7b 0a  ( iotrace==0 ){.
2dfc0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
2dfd0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
2dfe0 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  or: cannot open 
2dff0 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67  \"%s\"\n", azArg
2e000 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 71  [1]);.        sq
2e010 6c 69 74 65 33 49 6f 54 72 61 63 65 20 3d 20 30  lite3IoTrace = 0
2e020 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
2e030 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2e040 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6f         sqlite3Io
2e050 54 72 61 63 65 20 3d 20 69 6f 74 72 61 63 65 50  Trace = iotraceP
2e060 72 69 6e 74 66 3b 0a 20 20 20 20 20 20 7d 0a 20  rintf;.      }. 
2e070 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e     }.  }else.#en
2e080 64 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c  dif..  if( c=='l
2e090 27 20 26 26 20 6e 3e 3d 35 20 26 26 20 73 74 72  ' && n>=5 && str
2e0a0 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
2e0b0 6c 69 6d 69 74 73 22 2c 20 6e 29 3d 3d 30 20 29  limits", n)==0 )
2e0c0 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
2e0d0 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20  st struct {.    
2e0e0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
2e0f0 4c 69 6d 69 74 4e 61 6d 65 3b 20 20 20 2f 2a 20  LimitName;   /* 
2e100 4e 61 6d 65 20 6f 66 20 61 20 6c 69 6d 69 74 20  Name of a limit 
2e110 2a 2f 0a 20 20 20 20 20 20 20 69 6e 74 20 6c 69  */.       int li
2e120 6d 69 74 43 6f 64 65 3b 20 20 20 20 20 20 20 20  mitCode;        
2e130 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 63      /* Integer c
2e140 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6c 69 6d  ode for that lim
2e150 69 74 20 2a 2f 0a 20 20 20 20 7d 20 61 4c 69 6d  it */.    } aLim
2e160 69 74 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b  it[] = {.      {
2e170 20 22 6c 65 6e 67 74 68 22 2c 20 20 20 20 20 20   "length",      
2e180 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
2e190 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20 20 20  _LIMIT_LENGTH   
2e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1b0 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73 71 6c   },.      { "sql
2e1c0 5f 6c 65 6e 67 74 68 22 2c 20 20 20 20 20 20 20  _length",       
2e1d0 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49       SQLITE_LIMI
2e1e0 54 5f 53 51 4c 5f 4c 45 4e 47 54 48 20 20 20 20  T_SQL_LENGTH    
2e1f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2e200 20 20 20 20 20 7b 20 22 63 6f 6c 75 6d 6e 22 2c       { "column",
2e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e220 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c  SQLITE_LIMIT_COL
2e230 55 4d 4e 20 20 20 20 20 20 20 20 20 20 20 20 20  UMN             
2e240 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
2e250 7b 20 22 65 78 70 72 5f 64 65 70 74 68 22 2c 20  { "expr_depth", 
2e260 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
2e270 45 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50  E_LIMIT_EXPR_DEP
2e280 54 48 20 20 20 20 20 20 20 20 20 20 20 20 20 20  TH              
2e290 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 63 6f    },.      { "co
2e2a0 6d 70 6f 75 6e 64 5f 73 65 6c 65 63 74 22 2c 20  mpound_select", 
2e2b0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d        SQLITE_LIM
2e2c0 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45  IT_COMPOUND_SELE
2e2d0 43 54 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  CT           },.
2e2e0 20 20 20 20 20 20 7b 20 22 76 64 62 65 5f 6f 70        { "vdbe_op
2e2f0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
2e300 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 44   SQLITE_LIMIT_VD
2e310 42 45 5f 4f 50 20 20 20 20 20 20 20 20 20 20 20  BE_OP           
2e320 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
2e330 20 7b 20 22 66 75 6e 63 74 69 6f 6e 5f 61 72 67   { "function_arg
2e340 22 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  ",          SQLI
2e350 54 45 5f 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f  TE_LIMIT_FUNCTIO
2e360 4e 5f 41 52 47 20 20 20 20 20 20 20 20 20 20 20  N_ARG           
2e370 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 61     },.      { "a
2e380 74 74 61 63 68 65 64 22 2c 20 20 20 20 20 20 20  ttached",       
2e390 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49         SQLITE_LI
2e3a0 4d 49 54 5f 41 54 54 41 43 48 45 44 20 20 20 20  MIT_ATTACHED    
2e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
2e3c0 0a 20 20 20 20 20 20 7b 20 22 6c 69 6b 65 5f 70  .      { "like_p
2e3d0 61 74 74 65 72 6e 5f 6c 65 6e 67 74 68 22 2c 20  attern_length", 
2e3e0 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c    SQLITE_LIMIT_L
2e3f0 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47  IKE_PATTERN_LENG
2e400 54 48 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  TH       },.    
2e410 20 20 7b 20 22 76 61 72 69 61 62 6c 65 5f 6e 75    { "variable_nu
2e420 6d 62 65 72 22 2c 20 20 20 20 20 20 20 53 51 4c  mber",       SQL
2e430 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42  ITE_LIMIT_VARIAB
2e440 4c 45 5f 4e 55 4d 42 45 52 20 20 20 20 20 20 20  LE_NUMBER       
2e450 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
2e460 74 72 69 67 67 65 72 5f 64 65 70 74 68 22 2c 20  trigger_depth", 
2e470 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
2e480 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50  IMIT_TRIGGER_DEP
2e490 54 48 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  TH             }
2e4a0 2c 0a 20 20 20 20 20 20 7b 20 22 77 6f 72 6b 65  ,.      { "worke
2e4b0 72 5f 74 68 72 65 61 64 73 22 2c 20 20 20 20 20  r_threads",     
2e4c0 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
2e4d0 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 20  WORKER_THREADS  
2e4e0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2e4f0 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6e   };.    int i, n
2e500 32 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70  2;.    open_db(p
2e510 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 6e 41  , 0);.    if( nA
2e520 72 67 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 66  rg==1 ){.      f
2e530 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53  or(i=0; i<ArrayS
2e540 69 7a 65 28 61 4c 69 6d 69 74 29 3b 20 69 2b 2b  ize(aLimit); i++
2e550 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74  ){.        print
2e560 66 28 22 25 32 30 73 20 25 64 5c 6e 22 2c 20 61  f("%20s %d\n", a
2e570 4c 69 6d 69 74 5b 69 5d 2e 7a 4c 69 6d 69 74 4e  Limit[i].zLimitN
2e580 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
2e590 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69      sqlite3_limi
2e5a0 74 28 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b  t(p->db, aLimit[
2e5b0 69 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 20 2d 31  i].limitCode, -1
2e5c0 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
2e5d0 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3e 33  }else if( nArg>3
2e5e0 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
2e5f0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
2e600 61 67 65 3a 20 2e 6c 69 6d 69 74 20 4e 41 4d 45  age: .limit NAME
2e610 20 3f 4e 45 57 2d 56 41 4c 55 45 3f 5c 6e 22 29   ?NEW-VALUE?\n")
2e620 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2e630 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
2e640 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
2e650 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
2e660 6e 74 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a  nt iLimit = -1;.
2e670 20 20 20 20 20 20 6e 32 20 3d 20 73 74 72 6c 65        n2 = strle
2e680 6e 33 30 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  n30(azArg[1]);. 
2e690 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
2e6a0 41 72 72 61 79 53 69 7a 65 28 61 4c 69 6d 69 74  ArraySize(aLimit
2e6b0 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ); i++){.       
2e6c0 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72   if( sqlite3_str
2e6d0 6e 69 63 6d 70 28 61 4c 69 6d 69 74 5b 69 5d 2e  nicmp(aLimit[i].
2e6e0 7a 4c 69 6d 69 74 4e 61 6d 65 2c 20 61 7a 41 72  zLimitName, azAr
2e6f0 67 5b 31 5d 2c 20 6e 32 29 3d 3d 30 20 29 7b 0a  g[1], n2)==0 ){.
2e700 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 4c            if( iL
2e710 69 6d 69 74 3c 30 20 29 7b 0a 20 20 20 20 20 20  imit<0 ){.      
2e720 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 69        iLimit = i
2e730 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
2e740 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  e{.            u
2e750 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
2e760 72 2c 20 22 61 6d 62 69 67 75 6f 75 73 20 6c 69  r, "ambiguous li
2e770 6d 69 74 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20  mit: \"%s\"\n", 
2e780 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
2e790 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2e7a0 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
2e7b0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2e7c0 74 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  t;.          }. 
2e7d0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
2e7e0 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69  .      if( iLimi
2e7f0 74 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75  t<0 ){.        u
2e800 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
2e810 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6c 69 6d 69  r, "unknown limi
2e820 74 3a 20 5c 22 25 73 5c 22 5c 6e 22 0a 20 20 20  t: \"%s\"\n".   
2e830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e840 20 20 20 20 20 22 65 6e 74 65 72 20 5c 22 2e 6c       "enter \".l
2e850 69 6d 69 74 73 5c 22 20 77 69 74 68 20 6e 6f 20  imits\" with no 
2e860 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 61 20  arguments for a 
2e870 6c 69 73 74 2e 5c 6e 22 2c 0a 20 20 20 20 20 20  list.\n",.      
2e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e890 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20     azArg[1]);.  
2e8a0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2e8b0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
2e8c0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
2e8d0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
2e8e0 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20  nArg==3 ){.     
2e8f0 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74     sqlite3_limit
2e900 28 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69  (p->db, aLimit[i
2e910 4c 69 6d 69 74 5d 2e 6c 69 6d 69 74 43 6f 64 65  Limit].limitCode
2e920 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2e930 20 20 20 20 20 20 20 20 28 69 6e 74 29 69 6e 74          (int)int
2e940 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b  egerValue(azArg[
2e950 32 5d 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  2]));.      }.  
2e960 20 20 20 20 70 72 69 6e 74 66 28 22 25 32 30 73      printf("%20s
2e970 20 25 64 5c 6e 22 2c 20 61 4c 69 6d 69 74 5b 69   %d\n", aLimit[i
2e980 4c 69 6d 69 74 5d 2e 7a 4c 69 6d 69 74 4e 61 6d  Limit].zLimitNam
2e990 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
2e9a0 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d  sqlite3_limit(p-
2e9b0 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d  >db, aLimit[iLim
2e9c0 69 74 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 20 2d  it].limitCode, -
2e9d0 31 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  1));.    }.  }el
2e9e0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27  se..  if( c=='l'
2e9f0 20 26 26 20 6e 3e 32 20 26 26 20 73 74 72 6e 63   && n>2 && strnc
2ea00 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 69  mp(azArg[0], "li
2ea10 6e 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  nt", n)==0 ){.  
2ea20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
2ea30 0a 20 20 20 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d  .    lintDotComm
2ea40 61 6e 64 28 70 2c 20 61 7a 41 72 67 2c 20 6e 41  and(p, azArg, nA
2ea50 72 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 69  rg);.  }else..#i
2ea60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ea70 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
2ea80 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26  .  if( c=='l' &&
2ea90 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2eaa0 5d 2c 20 22 6c 6f 61 64 22 2c 20 6e 29 3d 3d 30  ], "load", n)==0
2eab0 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
2eac0 61 72 20 2a 7a 46 69 6c 65 2c 20 2a 7a 50 72 6f  ar *zFile, *zPro
2ead0 63 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72  c;.    char *zEr
2eae0 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 69 66  rMsg = 0;.    if
2eaf0 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20  ( nArg<2 ){.    
2eb00 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2eb10 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6c 6f  err, "Usage: .lo
2eb20 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59 50 4f  ad FILE ?ENTRYPO
2eb30 49 4e 54 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20  INT?\n");.      
2eb40 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f  rc = 1;.      go
2eb50 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
2eb60 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  exit;.    }.    
2eb70 7a 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d  zFile = azArg[1]
2eb80 3b 0a 20 20 20 20 7a 50 72 6f 63 20 3d 20 6e 41  ;.    zProc = nA
2eb90 72 67 3e 3d 33 20 3f 20 61 7a 41 72 67 5b 32 5d  rg>=3 ? azArg[2]
2eba0 20 3a 20 30 3b 0a 20 20 20 20 6f 70 65 6e 5f 64   : 0;.    open_d
2ebb0 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 72 63 20  b(p, 0);.    rc 
2ebc0 3d 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65  = sqlite3_load_e
2ebd0 78 74 65 6e 73 69 6f 6e 28 70 2d 3e 64 62 2c 20  xtension(p->db, 
2ebe0 7a 46 69 6c 65 2c 20 7a 50 72 6f 63 2c 20 26 7a  zFile, zProc, &z
2ebf0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66 28  ErrMsg);.    if(
2ec00 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
2ec10 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
2ec20 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
2ec30 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d  or: %s\n", zErrM
2ec40 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  sg);.      sqlit
2ec50 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
2ec60 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2ec70 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65      }.  }else.#e
2ec80 6e 64 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27  ndif..  if( c=='
2ec90 6c 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  l' && strncmp(az
2eca0 41 72 67 5b 30 5d 2c 20 22 6c 6f 67 22 2c 20 6e  Arg[0], "log", n
2ecb0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
2ecc0 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20  nArg!=2 ){.     
2ecd0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2ece0 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6c 6f 67  rr, "Usage: .log
2ecf0 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b 0a 20   FILENAME\n");. 
2ed00 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2ed10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f   }else{.      co
2ed20 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 20  nst char *zFile 
2ed30 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20  = azArg[1];.    
2ed40 20 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c    output_file_cl
2ed50 6f 73 65 28 70 2d 3e 70 4c 6f 67 29 3b 0a 20 20  ose(p->pLog);.  
2ed60 20 20 20 20 70 2d 3e 70 4c 6f 67 20 3d 20 6f 75      p->pLog = ou
2ed70 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a  tput_file_open(z
2ed80 46 69 6c 65 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  File, 0);.    }.
2ed90 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
2eda0 3d 3d 27 6d 27 20 26 26 20 73 74 72 6e 63 6d 70  =='m' && strncmp
2edb0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6d 6f 64 65  (azArg[0], "mode
2edc0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
2edd0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f 64  const char *zMod
2ede0 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 61 7a  e = nArg>=2 ? az
2edf0 41 72 67 5b 31 5d 20 3a 20 22 22 3b 0a 20 20 20  Arg[1] : "";.   
2ee00 20 69 6e 74 20 6e 32 20 3d 20 73 74 72 6c 65 6e   int n2 = strlen
2ee10 33 30 28 7a 4d 6f 64 65 29 3b 0a 20 20 20 20 69  30(zMode);.    i
2ee20 6e 74 20 63 32 20 3d 20 7a 4d 6f 64 65 5b 30 5d  nt c2 = zMode[0]
2ee30 3b 0a 20 20 20 20 69 66 28 20 63 32 3d 3d 27 6c  ;.    if( c2=='l
2ee40 27 20 26 26 20 6e 32 3e 32 20 26 26 20 73 74 72  ' && n2>2 && str
2ee50 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c  ncmp(azArg[1],"l
2ee60 69 6e 65 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  ines",n2)==0 ){.
2ee70 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
2ee80 4d 4f 44 45 5f 4c 69 6e 65 3b 0a 20 20 20 20 20  MODE_Line;.     
2ee90 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2eea0 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53  f(sizeof(p->rowS
2eeb0 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f  eparator), p->ro
2eec0 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f  wSeparator, SEP_
2eed0 52 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  Row);.    }else 
2eee0 69 66 28 20 63 32 3d 3d 27 63 27 20 26 26 20 73  if( c2=='c' && s
2eef0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  trncmp(azArg[1],
2ef00 22 63 6f 6c 75 6d 6e 73 22 2c 6e 32 29 3d 3d 30  "columns",n2)==0
2ef10 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64   ){.      p->mod
2ef20 65 20 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b  e = MODE_Column;
2ef30 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
2ef40 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
2ef50 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c  ->rowSeparator),
2ef60 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72   p->rowSeparator
2ef70 2c 20 53 45 50 5f 52 6f 77 29 3b 0a 20 20 20 20  , SEP_Row);.    
2ef80 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 6c  }else if( c2=='l
2ef90 27 20 26 26 20 6e 32 3e 32 20 26 26 20 73 74 72  ' && n2>2 && str
2efa0 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c  ncmp(azArg[1],"l
2efb0 69 73 74 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20  ist",n2)==0 ){. 
2efc0 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d       p->mode = M
2efd0 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 20 20 20 20  ODE_List;.      
2efe0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
2eff0 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65  (sizeof(p->colSe
2f000 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c  parator), p->col
2f010 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43  Separator, SEP_C
2f020 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20 73 71  olumn);.      sq
2f030 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
2f040 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61  izeof(p->rowSepa
2f050 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65  rator), p->rowSe
2f060 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77  parator, SEP_Row
2f070 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
2f080 20 63 32 3d 3d 27 68 27 20 26 26 20 73 74 72 6e   c2=='h' && strn
2f090 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 68 74  cmp(azArg[1],"ht
2f0a0 6d 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  ml",n2)==0 ){.  
2f0b0 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
2f0c0 44 45 5f 48 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c  DE_Html;.    }el
2f0d0 73 65 20 69 66 28 20 63 32 3d 3d 27 74 27 20 26  se if( c2=='t' &
2f0e0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
2f0f0 31 5d 2c 22 74 63 6c 22 2c 6e 32 29 3d 3d 30 20  1],"tcl",n2)==0 
2f100 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65  ){.      p->mode
2f110 20 3d 20 4d 4f 44 45 5f 54 63 6c 3b 0a 20 20 20   = MODE_Tcl;.   
2f120 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
2f130 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f  ntf(sizeof(p->co
2f140 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e  lSeparator), p->
2f150 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 20 53 45  colSeparator, SE
2f160 50 5f 53 70 61 63 65 29 3b 0a 20 20 20 20 20 20  P_Space);.      
2f170 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
2f180 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65  (sizeof(p->rowSe
2f190 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77  parator), p->row
2f1a0 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52  Separator, SEP_R
2f1b0 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ow);.    }else i
2f1c0 66 28 20 63 32 3d 3d 27 63 27 20 26 26 20 73 74  f( c2=='c' && st
2f1d0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
2f1e0 63 73 76 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20  csv",n2)==0 ){. 
2f1f0 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d       p->mode = M
2f200 4f 44 45 5f 43 73 76 3b 0a 20 20 20 20 20 20 73  ODE_Csv;.      s
2f210 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
2f220 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70  sizeof(p->colSep
2f230 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53  arator), p->colS
2f240 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 6f  eparator, SEP_Co
2f250 6d 6d 61 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  mma);.      sqli
2f260 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
2f270 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61  eof(p->rowSepara
2f280 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61  tor), p->rowSepa
2f290 72 61 74 6f 72 2c 20 53 45 50 5f 43 72 4c 66 29  rator, SEP_CrLf)
2f2a0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2f2b0 63 32 3d 3d 27 74 27 20 26 26 20 73 74 72 6e 63  c2=='t' && strnc
2f2c0 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 74 61 62  mp(azArg[1],"tab
2f2d0 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20  s",n2)==0 ){.   
2f2e0 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44     p->mode = MOD
2f2f0 45 5f 4c 69 73 74 3b 0a 20 20 20 20 20 20 73 71  E_List;.      sq
2f300 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
2f310 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61  izeof(p->colSepa
2f320 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65  rator), p->colSe
2f330 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 54 61 62  parator, SEP_Tab
2f340 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
2f350 20 63 32 3d 3d 27 69 27 20 26 26 20 73 74 72 6e   c2=='i' && strn
2f360 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 69 6e  cmp(azArg[1],"in
2f370 73 65 72 74 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  sert",n2)==0 ){.
2f380 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
2f390 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20  MODE_Insert;.   
2f3a0 20 20 20 73 65 74 5f 74 61 62 6c 65 5f 6e 61 6d     set_table_nam
2f3b0 65 28 70 2c 20 6e 41 72 67 3e 3d 33 20 3f 20 61  e(p, nArg>=3 ? a
2f3c0 7a 41 72 67 5b 32 5d 20 3a 20 22 74 61 62 6c 65  zArg[2] : "table
2f3d0 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ");.    }else if
2f3e0 28 20 63 32 3d 3d 27 71 27 20 26 26 20 73 74 72  ( c2=='q' && str
2f3f0 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 71  ncmp(azArg[1],"q
2f400 75 6f 74 65 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  uote",n2)==0 ){.
2f410 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
2f420 4d 4f 44 45 5f 51 75 6f 74 65 3b 0a 20 20 20 20  MODE_Quote;.    
2f430 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 61  }else if( c2=='a
2f440 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
2f450 72 67 5b 31 5d 2c 22 61 73 63 69 69 22 2c 6e 32  rg[1],"ascii",n2
2f460 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d  )==0 ){.      p-
2f470 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 41 73 63  >mode = MODE_Asc
2f480 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ii;.      sqlite
2f490 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
2f4a0 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  f(p->colSeparato
2f4b0 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61  r), p->colSepara
2f4c0 74 6f 72 2c 20 53 45 50 5f 55 6e 69 74 29 3b 0a  tor, SEP_Unit);.
2f4d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
2f4e0 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d  printf(sizeof(p-
2f4f0 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20  >rowSeparator), 
2f500 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c  p->rowSeparator,
2f510 20 53 45 50 5f 52 65 63 6f 72 64 29 3b 0a 20 20   SEP_Record);.  
2f520 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67    }else if( nArg
2f530 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 72 61 77  ==1 ){.      raw
2f540 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2f550 22 63 75 72 72 65 6e 74 20 6f 75 74 70 75 74 20  "current output 
2f560 6d 6f 64 65 3a 20 25 73 5c 6e 22 2c 20 6d 6f 64  mode: %s\n", mod
2f570 65 44 65 73 63 72 5b 70 2d 3e 6d 6f 64 65 5d 29  eDescr[p->mode])
2f580 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2f590 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2f5a0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 6f  derr, "Error: mo
2f5b0 64 65 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65  de should be one
2f5c0 20 6f 66 3a 20 22 0a 20 20 20 20 20 20 20 20 20   of: ".         
2f5d0 22 61 73 63 69 69 20 63 6f 6c 75 6d 6e 20 63 73  "ascii column cs
2f5e0 76 20 68 74 6d 6c 20 69 6e 73 65 72 74 20 6c 69  v html insert li
2f5f0 6e 65 20 6c 69 73 74 20 71 75 6f 74 65 20 74 61  ne list quote ta
2f600 62 73 20 74 63 6c 5c 6e 22 29 3b 0a 20 20 20 20  bs tcl\n");.    
2f610 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
2f620 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70      p->cMode = p
2f630 2d 3e 6d 6f 64 65 3b 0a 20 20 7d 65 6c 73 65 0a  ->mode;.  }else.
2f640 0a 20 20 69 66 28 20 63 3d 3d 27 6e 27 20 26 26  .  if( c=='n' &&
2f650 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2f660 5d 2c 20 22 6e 75 6c 6c 76 61 6c 75 65 22 2c 20  ], "nullvalue", 
2f670 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
2f680 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
2f690 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2f6a0 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 6e 75 6c  tf(sizeof(p->nul
2f6b0 6c 56 61 6c 75 65 29 2c 20 70 2d 3e 6e 75 6c 6c  lValue), p->null
2f6c0 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 20 20 20  Value,.         
2f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25                "%
2f6e0 2e 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61 79  .*s", (int)Array
2f6f0 53 69 7a 65 28 70 2d 3e 6e 75 6c 6c 56 61 6c 75  Size(p->nullValu
2f700 65 29 2d 31 2c 20 61 7a 41 72 67 5b 31 5d 29 3b  e)-1, azArg[1]);
2f710 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2f720 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2f730 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6e 75  err, "Usage: .nu
2f740 6c 6c 76 61 6c 75 65 20 53 54 52 49 4e 47 5c 6e  llvalue STRING\n
2f750 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2f760 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
2f770 0a 20 20 69 66 28 20 63 3d 3d 27 6f 27 20 26 26  .  if( c=='o' &&
2f780 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2f790 5d 2c 20 22 6f 70 65 6e 22 2c 20 6e 29 3d 3d 30  ], "open", n)==0
2f7a0 20 26 26 20 6e 3e 3d 32 20 29 7b 0a 20 20 20 20   && n>=2 ){.    
2f7b0 63 68 61 72 20 2a 7a 4e 65 77 46 69 6c 65 6e 61  char *zNewFilena
2f7c0 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  me;  /* Name of 
2f7d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2f7e0 65 20 74 6f 20 6f 70 65 6e 20 2a 2f 0a 20 20 20  e to open */.   
2f7f0 20 69 6e 74 20 69 4e 61 6d 65 20 3d 20 31 3b 20   int iName = 1; 
2f800 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
2f810 6e 20 61 7a 41 72 67 5b 5d 20 6f 66 20 74 68 65  n azArg[] of the
2f820 20 66 69 6c 65 6e 61 6d 65 20 2a 2f 0a 20 20 20   filename */.   
2f830 20 69 6e 74 20 6e 65 77 46 6c 61 67 20 3d 20 30   int newFlag = 0
2f840 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f  ;     /* True to
2f850 20 64 65 6c 65 74 65 20 66 69 6c 65 20 62 65 66   delete file bef
2f860 6f 72 65 20 6f 70 65 6e 69 6e 67 20 2a 2f 0a 20  ore opening */. 
2f870 20 20 20 2f 2a 20 43 6c 6f 73 65 20 74 68 65 20     /* Close the 
2f880 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
2f890 65 20 2a 2f 0a 20 20 20 20 73 65 73 73 69 6f 6e  e */.    session
2f8a0 5f 63 6c 6f 73 65 5f 61 6c 6c 28 70 29 3b 0a 20  _close_all(p);. 
2f8b0 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65     sqlite3_close
2f8c0 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 70 2d 3e  (p->db);.    p->
2f8d0 64 62 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 7a  db = 0;.    p->z
2f8e0 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a  DbFilename = 0;.
2f8f0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2f900 28 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65  (p->zFreeOnClose
2f910 29 3b 0a 20 20 20 20 70 2d 3e 7a 46 72 65 65 4f  );.    p->zFreeO
2f920 6e 43 6c 6f 73 65 20 3d 20 30 3b 0a 20 20 20 20  nClose = 0;.    
2f930 70 2d 3e 6f 70 65 6e 4d 6f 64 65 20 3d 20 53 48  p->openMode = SH
2f940 45 4c 4c 5f 4f 50 45 4e 5f 55 4e 53 50 45 43 3b  ELL_OPEN_UNSPEC;
2f950 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f  .    /* Check fo
2f960 72 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61  r command-line a
2f970 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 20 20  rguments */.    
2f980 66 6f 72 28 69 4e 61 6d 65 3d 31 3b 20 69 4e 61  for(iName=1; iNa
2f990 6d 65 3c 6e 41 72 67 20 26 26 20 61 7a 41 72 67  me<nArg && azArg
2f9a0 5b 69 4e 61 6d 65 5d 5b 30 5d 3d 3d 27 2d 27 3b  [iName][0]=='-';
2f9b0 20 69 4e 61 6d 65 2b 2b 29 7b 0a 20 20 20 20 20   iName++){.     
2f9c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d   const char *z =
2f9d0 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 3b 0a 20   azArg[iName];. 
2f9e0 20 20 20 20 20 69 66 28 20 6f 70 74 69 6f 6e 4d       if( optionM
2f9f0 61 74 63 68 28 7a 2c 22 6e 65 77 22 29 20 29 7b  atch(z,"new") ){
2fa00 0a 20 20 20 20 20 20 20 20 6e 65 77 46 6c 61 67  .        newFlag
2fa10 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 1;.#ifdef SQL
2fa20 49 54 45 5f 48 41 56 45 5f 5a 49 50 0a 20 20 20  ITE_HAVE_ZIP.   
2fa30 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 74     }else if( opt
2fa40 69 6f 6e 4d 61 74 63 68 28 7a 2c 20 22 7a 69 70  ionMatch(z, "zip
2fa50 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d  ") ){.        p-
2fa60 3e 6f 70 65 6e 4d 6f 64 65 20 3d 20 53 48 45 4c  >openMode = SHEL
2fa70 4c 5f 4f 50 45 4e 5f 5a 49 50 46 49 4c 45 3b 0a  L_OPEN_ZIPFILE;.
2fa80 23 65 6e 64 69 66 0a 20 20 20 20 20 20 7d 65 6c  #endif.      }el
2fa90 73 65 20 69 66 28 20 6f 70 74 69 6f 6e 4d 61 74  se if( optionMat
2faa0 63 68 28 7a 2c 20 22 61 70 70 65 6e 64 22 29 20  ch(z, "append") 
2fab0 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 6f 70  ){.        p->op
2fac0 65 6e 4d 6f 64 65 20 3d 20 53 48 45 4c 4c 5f 4f  enMode = SHELL_O
2fad0 50 45 4e 5f 41 50 50 45 4e 44 56 46 53 3b 0a 20  PEN_APPENDVFS;. 
2fae0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a       }else if( z
2faf0 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
2fb00 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2fb10 73 74 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e  stderr, "unknown
2fb20 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20   option: %s\n", 
2fb30 7a 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  z);.        rc =
2fb40 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   1;.        goto
2fb50 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
2fb60 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  it;.      }.    
2fb70 7d 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 66 69  }.    /* If a fi
2fb80 6c 65 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  lename is specif
2fb90 69 65 64 2c 20 74 72 79 20 74 6f 20 6f 70 65 6e  ied, try to open
2fba0 20 69 74 20 66 69 72 73 74 20 2a 2f 0a 20 20 20   it first */.   
2fbb0 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 20 3d 20   zNewFilename = 
2fbc0 6e 41 72 67 3e 69 4e 61 6d 65 20 3f 20 73 71 6c  nArg>iName ? sql
2fbd0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
2fbe0 22 2c 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 29  ", azArg[iName])
2fbf0 20 3a 20 30 3b 0a 20 20 20 20 69 66 28 20 7a 4e   : 0;.    if( zN
2fc00 65 77 46 69 6c 65 6e 61 6d 65 20 29 7b 0a 20 20  ewFilename ){.  
2fc10 20 20 20 20 69 66 28 20 6e 65 77 46 6c 61 67 20      if( newFlag 
2fc20 29 20 73 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c  ) shellDeleteFil
2fc30 65 28 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 29 3b  e(zNewFilename);
2fc40 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c  .      p->zDbFil
2fc50 65 6e 61 6d 65 20 3d 20 7a 4e 65 77 46 69 6c 65  ename = zNewFile
2fc60 6e 61 6d 65 3b 0a 20 20 20 20 20 20 6f 70 65 6e  name;.      open
2fc70 5f 64 62 28 70 2c 20 31 29 3b 0a 20 20 20 20 20  _db(p, 1);.     
2fc80 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b   if( p->db==0 ){
2fc90 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
2fca0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
2fcb0 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
2fcc0 20 27 25 73 27 5c 6e 22 2c 20 7a 4e 65 77 46 69   '%s'\n", zNewFi
2fcd0 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  lename);.       
2fce0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4e   sqlite3_free(zN
2fcf0 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20  ewFilename);.   
2fd00 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2fd10 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73    p->zFreeOnClos
2fd20 65 20 3d 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65  e = zNewFilename
2fd30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2fd40 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30      if( p->db==0
2fd50 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 20   ){.      /* As 
2fd60 61 20 66 61 6c 6c 2d 62 61 63 6b 20 6f 70 65 6e  a fall-back open
2fd70 20 61 20 54 45 4d 50 20 64 61 74 61 62 61 73 65   a TEMP database
2fd80 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62   */.      p->zDb
2fd90 46 69 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20  Filename = 0;.  
2fda0 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
2fdb0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
2fdc0 0a 0a 20 20 69 66 28 20 28 63 3d 3d 27 6f 27 0a  ..  if( (c=='o'.
2fdd0 20 20 20 20 20 20 20 20 26 26 20 28 73 74 72 6e          && (strn
2fde0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f  cmp(azArg[0], "o
2fdf0 75 74 70 75 74 22 2c 20 6e 29 3d 3d 30 7c 7c 73  utput", n)==0||s
2fe00 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
2fe10 20 22 6f 6e 63 65 22 2c 20 6e 29 3d 3d 30 29 29   "once", n)==0))
2fe20 0a 20 20 20 7c 7c 20 28 63 3d 3d 27 65 27 20 26  .   || (c=='e' &
2fe30 26 20 6e 3d 3d 35 20 26 26 20 73 74 72 63 6d 70  & n==5 && strcmp
2fe40 28 61 7a 41 72 67 5b 30 5d 2c 22 65 78 63 65 6c  (azArg[0],"excel
2fe50 22 29 3d 3d 30 29 0a 20 20 29 7b 0a 20 20 20 20  ")==0).  ){.    
2fe60 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
2fe70 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 61 7a  e = nArg>=2 ? az
2fe80 41 72 67 5b 31 5d 20 3a 20 22 73 74 64 6f 75 74  Arg[1] : "stdout
2fe90 22 3b 0a 20 20 20 20 69 6e 74 20 62 54 78 74 4d  ";.    int bTxtM
2fea0 6f 64 65 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  ode = 0;.    if(
2feb0 20 61 7a 41 72 67 5b 30 5d 5b 30 5d 3d 3d 27 65   azArg[0][0]=='e
2fec0 27 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 72  ' ){.      /* Tr
2fed0 61 6e 73 66 6f 72 6d 20 74 68 65 20 22 2e 65 78  ansform the ".ex
2fee0 63 65 6c 22 20 63 6f 6d 6d 61 6e 64 20 69 6e 74  cel" command int
2fef0 6f 20 22 2e 6f 6e 63 65 20 2d 78 22 20 2a 2f 0a  o ".once -x" */.
2ff00 20 20 20 20 20 20 6e 41 72 67 20 3d 20 32 3b 0a        nArg = 2;.
2ff10 20 20 20 20 20 20 61 7a 41 72 67 5b 30 5d 20 3d        azArg[0] =
2ff20 20 22 6f 6e 63 65 22 3b 0a 20 20 20 20 20 20 7a   "once";.      z
2ff30 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d 20  File = azArg[1] 
2ff40 3d 20 22 2d 78 22 3b 0a 20 20 20 20 20 20 6e 20  = "-x";.      n 
2ff50 3d 20 34 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  = 4;.    }.    i
2ff60 66 28 20 6e 41 72 67 3e 32 20 29 7b 0a 20 20 20  f( nArg>2 ){.   
2ff70 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
2ff80 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
2ff90 25 73 20 5b 2d 65 7c 2d 78 7c 46 49 4c 45 5d 5c  %s [-e|-x|FILE]\
2ffa0 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20  n", azArg[0]);. 
2ffb0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2ffc0 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d     goto meta_com
2ffd0 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d  mand_exit;.    }
2ffe0 0a 20 20 20 20 69 66 28 20 6e 3e 31 20 26 26 20  .    if( n>1 && 
2fff0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
30000 2c 20 22 6f 6e 63 65 22 2c 20 6e 29 3d 3d 30 20  , "once", n)==0 
30010 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72  ){.      if( nAr
30020 67 3c 32 20 29 7b 0a 20 20 20 20 20 20 20 20 72  g<2 ){.        r
30030 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
30040 2c 20 22 55 73 61 67 65 3a 20 2e 6f 6e 63 65 20  , "Usage: .once 
30050 28 2d 65 7c 2d 78 7c 46 49 4c 45 29 5c 6e 22 29  (-e|-x|FILE)\n")
30060 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
30070 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
30080 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
30090 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
300a0 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d 20 32 3b  p->outCount = 2;
300b0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
300c0 20 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d 20    p->outCount = 
300d0 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f 75 74  0;.    }.    out
300e0 70 75 74 5f 72 65 73 65 74 28 70 29 3b 0a 20 20  put_reset(p);.  
300f0 20 20 69 66 28 20 7a 46 69 6c 65 5b 30 5d 3d 3d    if( zFile[0]==
30100 27 2d 27 20 26 26 20 7a 46 69 6c 65 5b 31 5d 3d  '-' && zFile[1]=
30110 3d 27 2d 27 20 29 20 7a 46 69 6c 65 2b 2b 3b 0a  ='-' ) zFile++;.
30120 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
30130 46 69 6c 65 2c 20 22 2d 65 22 29 3d 3d 30 20 7c  File, "-e")==0 |
30140 7c 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c 20  | strcmp(zFile, 
30150 22 2d 78 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  "-x")==0 ){.    
30160 20 20 70 2d 3e 64 6f 58 64 67 4f 70 65 6e 20 3d    p->doXdgOpen =
30170 20 31 3b 0a 20 20 20 20 20 20 6f 75 74 70 75 74   1;.      output
30180 4d 6f 64 65 50 75 73 68 28 70 29 3b 0a 20 20 20  ModePush(p);.   
30190 20 20 20 69 66 28 20 7a 46 69 6c 65 5b 31 5d 3d     if( zFile[1]=
301a0 3d 27 78 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='x' ){.        
301b0 6e 65 77 54 65 6d 70 46 69 6c 65 28 70 2c 20 22  newTempFile(p, "
301c0 63 73 76 22 29 3b 0a 20 20 20 20 20 20 20 20 70  csv");.        p
301d0 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 43 73  ->mode = MODE_Cs
301e0 76 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  v;.        sqlit
301f0 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
30200 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  of(p->colSeparat
30210 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  or), p->colSepar
30220 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6d 6d 61 29  ator, SEP_Comma)
30230 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
30240 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
30250 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  f(p->rowSeparato
30260 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  r), p->rowSepara
30270 74 6f 72 2c 20 53 45 50 5f 43 72 4c 66 29 3b 0a  tor, SEP_CrLf);.
30280 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
30290 20 20 20 20 20 6e 65 77 54 65 6d 70 46 69 6c 65       newTempFile
302a0 28 70 2c 20 22 74 78 74 22 29 3b 0a 20 20 20 20  (p, "txt");.    
302b0 20 20 20 20 62 54 78 74 4d 6f 64 65 20 3d 20 31      bTxtMode = 1
302c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
302d0 7a 46 69 6c 65 20 3d 20 70 2d 3e 7a 54 65 6d 70  zFile = p->zTemp
302e0 46 69 6c 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20  File;.    }.    
302f0 69 66 28 20 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c  if( zFile[0]=='|
30300 27 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  ' ){.#ifdef SQLI
30310 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20  TE_OMIT_POPEN.  
30320 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
30330 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 70  tderr, "Error: p
30340 69 70 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  ipes are not sup
30350 70 6f 72 74 65 64 20 69 6e 20 74 68 69 73 20 4f  ported in this O
30360 53 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  S\n");.      rc 
30370 3d 20 31 3b 0a 20 20 20 20 20 20 70 2d 3e 6f 75  = 1;.      p->ou
30380 74 20 3d 20 73 74 64 6f 75 74 3b 0a 23 65 6c 73  t = stdout;.#els
30390 65 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d  e.      p->out =
303a0 20 70 6f 70 65 6e 28 7a 46 69 6c 65 20 2b 20 31   popen(zFile + 1
303b0 2c 20 22 77 22 29 3b 0a 20 20 20 20 20 20 69 66  , "w");.      if
303c0 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20  ( p->out==0 ){. 
303d0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
303e0 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
303f0 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 70 69  : cannot open pi
30400 70 65 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46  pe \"%s\"\n", zF
30410 69 6c 65 20 2b 20 31 29 3b 0a 20 20 20 20 20 20  ile + 1);.      
30420 20 20 70 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75    p->out = stdou
30430 74 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  t;.        rc = 
30440 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  1;.      }else{.
30450 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
30460 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
30470 70 2d 3e 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e  p->outfile), p->
30480 6f 75 74 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a  outfile, "%s", z
30490 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 7d 0a 23  File);.      }.#
304a0 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b  endif.    }else{
304b0 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20  .      p->out = 
304c0 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e  output_file_open
304d0 28 7a 46 69 6c 65 2c 20 62 54 78 74 4d 6f 64 65  (zFile, bTxtMode
304e0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
304f0 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  out==0 ){.      
30500 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 46 69    if( strcmp(zFi
30510 6c 65 2c 22 6f 66 66 22 29 21 3d 30 20 29 7b 0a  le,"off")!=0 ){.
30520 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
30530 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72  rintf(stderr,"Er
30540 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 77 72 69 74  ror: cannot writ
30550 65 20 74 6f 20 5c 22 25 73 5c 22 5c 6e 22 2c 20  e to \"%s\"\n", 
30560 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 20 20  zFile);.        
30570 7d 0a 20 20 20 20 20 20 20 20 70 2d 3e 6f 75 74  }.        p->out
30580 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20 20 20 20   = stdout;.     
30590 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
305a0 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
305b0 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
305c0 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 6f 75 74  tf(sizeof(p->out
305d0 66 69 6c 65 29 2c 20 70 2d 3e 6f 75 74 66 69 6c  file), p->outfil
305e0 65 2c 20 22 25 73 22 2c 20 7a 46 69 6c 65 29 3b  e, "%s", zFile);
305f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
30600 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
30610 3d 27 70 27 20 26 26 20 6e 3e 3d 33 20 26 26 20  ='p' && n>=3 && 
30620 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
30630 2c 20 22 70 72 69 6e 74 22 2c 20 6e 29 3d 3d 30  , "print", n)==0
30640 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
30650 20 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 41     for(i=1; i<nA
30660 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
30670 69 66 28 20 69 3e 31 20 29 20 72 61 77 5f 70 72  if( i>1 ) raw_pr
30680 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20 22  intf(p->out, " "
30690 29 3b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  );.      utf8_pr
306a0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
306b0 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20  ", azArg[i]);.  
306c0 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69 6e    }.    raw_prin
306d0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29  tf(p->out, "\n")
306e0 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  ;.  }else..  if(
306f0 20 63 3d 3d 27 70 27 20 26 26 20 73 74 72 6e 63   c=='p' && strnc
30700 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 70 72  mp(azArg[0], "pr
30710 6f 6d 70 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  ompt", n)==0 ){.
30720 20 20 20 20 69 66 28 20 6e 41 72 67 20 3e 3d 20      if( nArg >= 
30730 32 29 20 7b 0a 20 20 20 20 20 20 73 74 72 6e 63  2) {.      strnc
30740 70 79 28 6d 61 69 6e 50 72 6f 6d 70 74 2c 61 7a  py(mainPrompt,az
30750 41 72 67 5b 31 5d 2c 28 69 6e 74 29 41 72 72 61  Arg[1],(int)Arra
30760 79 53 69 7a 65 28 6d 61 69 6e 50 72 6f 6d 70 74  ySize(mainPrompt
30770 29 2d 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  )-1);.    }.    
30780 69 66 28 20 6e 41 72 67 20 3e 3d 20 33 29 20 7b  if( nArg >= 3) {
30790 0a 20 20 20 20 20 20 73 74 72 6e 63 70 79 28 63  .      strncpy(c
307a0 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74 2c 61 7a  ontinuePrompt,az
307b0 41 72 67 5b 32 5d 2c 28 69 6e 74 29 41 72 72 61  Arg[2],(int)Arra
307c0 79 53 69 7a 65 28 63 6f 6e 74 69 6e 75 65 50 72  ySize(continuePr
307d0 6f 6d 70 74 29 2d 31 29 3b 0a 20 20 20 20 7d 0a  ompt)-1);.    }.
307e0 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
307f0 3d 3d 27 71 27 20 26 26 20 73 74 72 6e 63 6d 70  =='q' && strncmp
30800 28 61 7a 41 72 67 5b 30 5d 2c 20 22 71 75 69 74  (azArg[0], "quit
30810 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
30820 72 63 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 0a  rc = 2;.  }else.
30830 0a 20 20 69 66 28 20 63 3d 3d 27 72 27 20 26 26  .  if( c=='r' &&
30840 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70   n>=3 && strncmp
30850 28 61 7a 41 72 67 5b 30 5d 2c 20 22 72 65 61 64  (azArg[0], "read
30860 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
30870 46 49 4c 45 20 2a 61 6c 74 3b 0a 20 20 20 20 69  FILE *alt;.    i
30880 66 28 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20  f( nArg!=2 ){.  
30890 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
308a0 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
308b0 72 65 61 64 20 46 49 4c 45 5c 6e 22 29 3b 0a 20  read FILE\n");. 
308c0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
308d0 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d     goto meta_com
308e0 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d  mand_exit;.    }
308f0 0a 20 20 20 20 61 6c 74 20 3d 20 66 6f 70 65 6e  .    alt = fopen
30900 28 61 7a 41 72 67 5b 31 5d 2c 20 22 72 62 22 29  (azArg[1], "rb")
30910 3b 0a 20 20 20 20 69 66 28 20 61 6c 74 3d 3d 30  ;.    if( alt==0
30920 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
30930 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72  rintf(stderr,"Er
30940 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
30950 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72   \"%s\"\n", azAr
30960 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 72 63 20  g[1]);.      rc 
30970 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 1;.    }else{.
30980 20 20 20 20 20 20 72 63 20 3d 20 70 72 6f 63 65        rc = proce
30990 73 73 5f 69 6e 70 75 74 28 70 2c 20 61 6c 74 29  ss_input(p, alt)
309a0 3b 0a 20 20 20 20 20 20 66 63 6c 6f 73 65 28 61  ;.      fclose(a
309b0 6c 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  lt);.    }.  }el
309c0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 72 27  se..  if( c=='r'
309d0 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
309e0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 72  cmp(azArg[0], "r
309f0 65 73 74 6f 72 65 22 2c 20 6e 29 3d 3d 30 20 29  estore", n)==0 )
30a00 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
30a10 20 2a 7a 53 72 63 46 69 6c 65 3b 0a 20 20 20 20   *zSrcFile;.    
30a20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
30a30 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a 70 53  .    sqlite3 *pS
30a40 72 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  rc;.    sqlite3_
30a50 62 61 63 6b 75 70 20 2a 70 42 61 63 6b 75 70 3b  backup *pBackup;
30a60 0a 20 20 20 20 69 6e 74 20 6e 54 69 6d 65 6f 75  .    int nTimeou
30a70 74 20 3d 20 30 3b 0a 0a 20 20 20 20 69 66 28 20  t = 0;..    if( 
30a80 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
30a90 20 7a 53 72 63 46 69 6c 65 20 3d 20 61 7a 41 72   zSrcFile = azAr
30aa0 67 5b 31 5d 3b 0a 20 20 20 20 20 20 7a 44 62 20  g[1];.      zDb 
30ab0 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 20 20 7d 65  = "main";.    }e
30ac0 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 33 20  lse if( nArg==3 
30ad0 29 7b 0a 20 20 20 20 20 20 7a 53 72 63 46 69 6c  ){.      zSrcFil
30ae0 65 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 20 20  e = azArg[2];.  
30af0 20 20 20 20 7a 44 62 20 3d 20 61 7a 41 72 67 5b      zDb = azArg[
30b00 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  1];.    }else{. 
30b10 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
30b20 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
30b30 2e 72 65 73 74 6f 72 65 20 3f 44 42 3f 20 46 49  .restore ?DB? FI
30b40 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  LE\n");.      rc
30b50 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f   = 1;.      goto
30b60 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
30b70 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63  it;.    }.    rc
30b80 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28   = sqlite3_open(
30b90 7a 53 72 63 46 69 6c 65 2c 20 26 70 53 72 63 29  zSrcFile, &pSrc)
30ba0 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
30bb0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
30bc0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
30bd0 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 63 61 6e  err, "Error: can
30be0 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22 5c  not open \"%s\"\
30bf0 6e 22 2c 20 7a 53 72 63 46 69 6c 65 29 3b 0a 20  n", zSrcFile);. 
30c00 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f       sqlite3_clo
30c10 73 65 28 70 53 72 63 29 3b 0a 20 20 20 20 20 20  se(pSrc);.      
30c20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
30c30 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
30c40 29 3b 0a 20 20 20 20 70 42 61 63 6b 75 70 20 3d  );.    pBackup =
30c50 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f   sqlite3_backup_
30c60 69 6e 69 74 28 70 2d 3e 64 62 2c 20 7a 44 62 2c  init(p->db, zDb,
30c70 20 70 53 72 63 2c 20 22 6d 61 69 6e 22 29 3b 0a   pSrc, "main");.
30c80 20 20 20 20 69 66 28 20 70 42 61 63 6b 75 70 3d      if( pBackup=
30c90 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  =0 ){.      utf8
30ca0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
30cb0 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73  "Error: %s\n", s
30cc0 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d  qlite3_errmsg(p-
30cd0 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 73 71 6c  >db));.      sql
30ce0 69 74 65 33 5f 63 6c 6f 73 65 28 70 53 72 63 29  ite3_close(pSrc)
30cf0 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
30d00 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c  ;.    }.    whil
30d10 65 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  e( (rc = sqlite3
30d20 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 70 42 61  _backup_step(pBa
30d30 63 6b 75 70 2c 31 30 30 29 29 3d 3d 53 51 4c 49  ckup,100))==SQLI
30d40 54 45 5f 4f 4b 0a 20 20 20 20 20 20 20 20 20 20  TE_OK.          
30d50 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  || rc==SQLITE_BU
30d60 53 59 20 20 29 7b 0a 20 20 20 20 20 20 69 66 28  SY  ){.      if(
30d70 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
30d80 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
30d90 6e 54 69 6d 65 6f 75 74 2b 2b 20 3e 3d 20 33 20  nTimeout++ >= 3 
30da0 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20  ) break;.       
30db0 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 28 31   sqlite3_sleep(1
30dc0 30 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  00);.      }.   
30dd0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62   }.    sqlite3_b
30de0 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 70 42 61  ackup_finish(pBa
30df0 63 6b 75 70 29 3b 0a 20 20 20 20 69 66 28 20 72  ckup);.    if( r
30e00 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
30e10 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 30 3b 0a  {.      rc = 0;.
30e20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63      }else if( rc
30e30 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c  ==SQLITE_BUSY ||
30e40 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b   rc==SQLITE_LOCK
30e50 45 44 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  ED ){.      raw_
30e60 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
30e70 45 72 72 6f 72 3a 20 73 6f 75 72 63 65 20 64 61  Error: source da
30e80 74 61 62 61 73 65 20 69 73 20 62 75 73 79 5c 6e  tabase is busy\n
30e90 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
30ea0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
30eb0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
30ec0 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25  tderr, "Error: %
30ed0 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72  s\n", sqlite3_er
30ee0 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20  rmsg(p->db));.  
30ef0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
30f00 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c  }.    sqlite3_cl
30f10 6f 73 65 28 70 53 72 63 29 3b 0a 20 20 7d 65 6c  ose(pSrc);.  }el
30f20 73 65 0a 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73  se...  if( c=='s
30f30 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
30f40 72 67 5b 30 5d 2c 20 22 73 63 61 6e 73 74 61 74  rg[0], "scanstat
30f50 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  s", n)==0 ){.   
30f60 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
30f70 20 20 20 20 20 20 70 2d 3e 73 63 61 6e 73 74 61        p->scansta
30f80 74 73 4f 6e 20 3d 20 28 75 38 29 62 6f 6f 6c 65  tsOn = (u8)boole
30f90 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d  anValue(azArg[1]
30fa0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
30fb0 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
30fc0 41 4e 53 54 41 54 55 53 0a 20 20 20 20 20 20 72  ANSTATUS.      r
30fd0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
30fe0 2c 20 22 57 61 72 6e 69 6e 67 3a 20 2e 73 63 61  , "Warning: .sca
30ff0 6e 73 74 61 74 73 20 6e 6f 74 20 61 76 61 69 6c  nstats not avail
31000 61 62 6c 65 20 69 6e 20 74 68 69 73 20 62 75 69  able in this bui
31010 6c 64 2e 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a  ld.\n");.#endif.
31020 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
31030 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
31040 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 63 61  rr, "Usage: .sca
31050 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66 5c 6e 22  nstats on|off\n"
31060 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
31070 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
31080 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20    if( c=='s' && 
31090 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
310a0 2c 20 22 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d  , "schema", n)==
310b0 30 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 54 65  0 ){.    ShellTe
310c0 78 74 20 73 53 65 6c 65 63 74 3b 0a 20 20 20 20  xt sSelect;.    
310d0 53 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61 3b  ShellState data;
310e0 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  .    char *zErrM
310f0 73 67 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73  sg = 0;.    cons
31100 74 20 63 68 61 72 20 2a 7a 44 69 76 20 3d 20 22  t char *zDiv = "
31110 28 22 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  (";.    const ch
31120 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 30 3b 0a 20  ar *zName = 0;. 
31130 20 20 20 69 6e 74 20 69 53 63 68 65 6d 61 20 3d     int iSchema =
31140 20 30 3b 0a 20 20 20 20 69 6e 74 20 62 44 65 62   0;.    int bDeb
31150 75 67 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20  ug = 0;.    int 
31160 69 69 3b 0a 0a 20 20 20 20 6f 70 65 6e 5f 64 62  ii;..    open_db
31170 28 70 2c 20 30 29 3b 0a 20 20 20 20 6d 65 6d 63  (p, 0);.    memc
31180 70 79 28 26 64 61 74 61 2c 20 70 2c 20 73 69 7a  py(&data, p, siz
31190 65 6f 66 28 64 61 74 61 29 29 3b 0a 20 20 20 20  eof(data));.    
311a0 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65 72 20  data.showHeader 
311b0 3d 20 30 3b 0a 20 20 20 20 64 61 74 61 2e 63 4d  = 0;.    data.cM
311c0 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20  ode = data.mode 
311d0 3d 20 4d 4f 44 45 5f 53 65 6d 69 3b 0a 20 20 20  = MODE_Semi;.   
311e0 20 69 6e 69 74 54 65 78 74 28 26 73 53 65 6c 65   initText(&sSele
311f0 63 74 29 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d  ct);.    for(ii=
31200 31 3b 20 69 69 3c 6e 41 72 67 3b 20 69 69 2b 2b  1; ii<nArg; ii++
31210 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 74  ){.      if( opt
31220 69 6f 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b 69  ionMatch(azArg[i
31230 69 5d 2c 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a  i],"indent") ){.
31240 20 20 20 20 20 20 20 20 64 61 74 61 2e 63 4d 6f          data.cMo
31250 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d  de = data.mode =
31260 20 4d 4f 44 45 5f 50 72 65 74 74 79 3b 0a 20 20   MODE_Pretty;.  
31270 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70      }else if( op
31280 74 69 6f 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b  tionMatch(azArg[
31290 69 69 5d 2c 22 64 65 62 75 67 22 29 20 29 7b 0a  ii],"debug") ){.
312a0 20 20 20 20 20 20 20 20 62 44 65 62 75 67 20 3d          bDebug =
312b0 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20   1;.      }else 
312c0 69 66 28 20 7a 4e 61 6d 65 3d 3d 30 20 29 7b 0a  if( zName==0 ){.
312d0 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
312e0 61 7a 41 72 67 5b 69 69 5d 3b 0a 20 20 20 20 20  azArg[ii];.     
312f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
31300 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
31310 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 63 68 65  r, "Usage: .sche
31320 6d 61 20 3f 2d 2d 69 6e 64 65 6e 74 3f 20 3f 4c  ma ?--indent? ?L
31330 49 4b 45 2d 50 41 54 54 45 52 4e 3f 5c 6e 22 29  IKE-PATTERN?\n")
31340 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
31350 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
31360 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
31370 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
31380 20 20 20 20 69 66 28 20 7a 4e 61 6d 65 21 3d 30      if( zName!=0
31390 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 73   ){.      int is
313a0 4d 61 73 74 65 72 20 3d 20 73 71 6c 69 74 65 33  Master = sqlite3
313b0 5f 73 74 72 6c 69 6b 65 28 7a 4e 61 6d 65 2c 20  _strlike(zName, 
313c0 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 2c  "sqlite_master",
313d0 20 30 29 3d 3d 30 3b 0a 20 20 20 20 20 20 69 66   0)==0;.      if
313e0 28 20 69 73 4d 61 73 74 65 72 20 7c 7c 20 73 71  ( isMaster || sq
313f0 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 7a 4e  lite3_strlike(zN
31400 61 6d 65 2c 22 73 71 6c 69 74 65 5f 74 65 6d 70  ame,"sqlite_temp
31410 5f 6d 61 73 74 65 72 22 2c 30 29 3d 3d 30 20 29  _master",0)==0 )
31420 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a  {.        char *
31430 6e 65 77 5f 61 72 67 76 5b 32 5d 2c 20 2a 6e 65  new_argv[2], *ne
31440 77 5f 63 6f 6c 76 5b 32 5d 3b 0a 20 20 20 20 20  w_colv[2];.     
31450 20 20 20 6e 65 77 5f 61 72 67 76 5b 30 5d 20 3d     new_argv[0] =
31460 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
31470 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  (.              
31480 20 20 20 20 20 20 20 20 22 43 52 45 41 54 45 20          "CREATE 
31490 54 41 42 4c 45 20 25 73 20 28 5c 6e 22 0a 20 20  TABLE %s (\n".  
314a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314b0 20 20 20 20 22 20 20 74 79 70 65 20 74 65 78 74      "  type text
314c0 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20  ,\n".           
314d0 20 20 20 20 20 20 20 20 20 20 20 22 20 20 6e 61             "  na
314e0 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20  me text,\n".    
314f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31500 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65    "  tbl_name te
31510 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  xt,\n".         
31520 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
31530 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72  rootpage integer
31540 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20  ,\n".           
31550 20 20 20 20 20 20 20 20 20 20 20 22 20 20 73 71             "  sq
31560 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20 20  l text\n".      
31570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31580 22 29 22 2c 20 69 73 4d 61 73 74 65 72 20 3f 20  ")", isMaster ? 
31590 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20  "sqlite_master" 
315a0 3a 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  : "sqlite_temp_m
315b0 61 73 74 65 72 22 29 3b 0a 20 20 20 20 20 20 20  aster");.       
315c0 20 6e 65 77 5f 61 72 67 76 5b 31 5d 20 3d 20 30   new_argv[1] = 0
315d0 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f  ;.        new_co
315e0 6c 76 5b 30 5d 20 3d 20 22 73 71 6c 22 3b 0a 20  lv[0] = "sql";. 
315f0 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76 5b         new_colv[
31600 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  1] = 0;.        
31610 63 61 6c 6c 62 61 63 6b 28 26 64 61 74 61 2c 20  callback(&data, 
31620 31 2c 20 6e 65 77 5f 61 72 67 76 2c 20 6e 65 77  1, new_argv, new
31630 5f 63 6f 6c 76 29 3b 0a 20 20 20 20 20 20 20 20  _colv);.        
31640 73 71 6c 69 74 65 33 5f 66 72 65 65 28 6e 65 77  sqlite3_free(new
31650 5f 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20 20  _argv[0]);.     
31660 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
31670 20 7a 44 69 76 20 29 7b 0a 20 20 20 20 20 20 73   zDiv ){.      s
31680 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
31690 6d 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  mt = 0;.      rc
316a0 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
316b0 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 22 53 45  re_v2(p->db, "SE
316c0 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 70  LECT name FROM p
316d0 72 61 67 6d 61 5f 64 61 74 61 62 61 73 65 5f 6c  ragma_database_l
316e0 69 73 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ist",.          
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31700 20 20 20 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20      -1, &pStmt, 
31710 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
31720 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38   ){.        utf8
31730 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
31740 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73  "Error: %s\n", s
31750 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d  qlite3_errmsg(p-
31760 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20 20 73  >db));.        s
31770 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
31780 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20  pStmt);.        
31790 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  rc = 1;.        
317a0 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
317b0 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a  d_exit;.      }.
317c0 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
317d0 28 26 73 53 65 6c 65 63 74 2c 20 22 53 45 4c 45  (&sSelect, "SELE
317e0 43 54 20 73 71 6c 20 46 52 4f 4d 22 2c 20 30 29  CT sql FROM", 0)
317f0 3b 0a 20 20 20 20 20 20 69 53 63 68 65 6d 61 20  ;.      iSchema 
31800 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  = 0;.      while
31810 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ( sqlite3_step(p
31820 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
31830 57 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e  W ){.        con
31840 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 28  st char *zDb = (
31850 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
31860 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
31870 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20  pStmt, 0);.     
31880 20 20 20 63 68 61 72 20 7a 53 63 4e 75 6d 5b 33     char zScNum[3
31890 30 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0];.        sqli
318a0 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
318b0 65 6f 66 28 7a 53 63 4e 75 6d 29 2c 20 7a 53 63  eof(zScNum), zSc
318c0 4e 75 6d 2c 20 22 25 64 22 2c 20 2b 2b 69 53 63  Num, "%d", ++iSc
318d0 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 20 20 61  hema);.        a
318e0 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
318f0 63 74 2c 20 7a 44 69 76 2c 20 30 29 3b 0a 20 20  ct, zDiv, 0);.  
31900 20 20 20 20 20 20 7a 44 69 76 20 3d 20 22 20 55        zDiv = " U
31910 4e 49 4f 4e 20 41 4c 4c 20 22 3b 0a 20 20 20 20  NION ALL ";.    
31920 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
31930 73 53 65 6c 65 63 74 2c 20 22 53 45 4c 45 43 54  sSelect, "SELECT
31940 20 73 68 65 6c 6c 5f 61 64 64 5f 73 63 68 65 6d   shell_add_schem
31950 61 28 73 71 6c 2c 22 2c 20 30 29 3b 0a 20 20 20  a(sql,", 0);.   
31960 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
31970 5f 73 74 72 69 63 6d 70 28 7a 44 62 2c 20 22 6d  _stricmp(zDb, "m
31980 61 69 6e 22 29 21 3d 30 20 29 7b 0a 20 20 20 20  ain")!=0 ){.    
31990 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
319a0 28 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20  (&sSelect, zDb, 
319b0 27 22 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  '"');.        }e
319c0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61  lse{.          a
319d0 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
319e0 63 74 2c 20 22 4e 55 4c 4c 22 2c 20 30 29 3b 0a  ct, "NULL", 0);.
319f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
31a00 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53    appendText(&sS
31a10 65 6c 65 63 74 2c 20 22 2c 6e 61 6d 65 29 20 41  elect, ",name) A
31a20 53 20 73 71 6c 2c 20 74 79 70 65 2c 20 74 62 6c  S sql, type, tbl
31a30 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f 77  _name, name, row
31a40 69 64 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  id,", 0);.      
31a50 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53    appendText(&sS
31a60 65 6c 65 63 74 2c 20 7a 53 63 4e 75 6d 2c 20 30  elect, zScNum, 0
31a70 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
31a80 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
31a90 22 20 41 53 20 73 6e 75 6d 2c 20 22 2c 20 30 29  " AS snum, ", 0)
31aa0 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  ;.        append
31ab0 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a  Text(&sSelect, z
31ac0 44 62 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20 20  Db, '\'');.     
31ad0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
31ae0 53 65 6c 65 63 74 2c 20 22 20 41 53 20 73 6e 61  Select, " AS sna
31af0 6d 65 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20  me FROM ", 0);. 
31b00 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
31b10 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c  t(&sSelect, zDb,
31b20 20 27 22 27 29 3b 0a 20 20 20 20 20 20 20 20 61   '"');.        a
31b30 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
31b40 63 74 2c 20 22 2e 73 71 6c 69 74 65 5f 6d 61 73  ct, ".sqlite_mas
31b50 74 65 72 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  ter", 0);.      
31b60 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  }.      sqlite3_
31b70 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
31b80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 49  .#ifdef SQLITE_I
31b90 4e 54 52 4f 53 50 45 43 54 49 4f 4e 5f 50 52 41  NTROSPECTION_PRA
31ba0 47 4d 41 53 0a 20 20 20 20 20 20 69 66 28 20 7a  GMAS.      if( z
31bb0 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20  Name ){.        
31bc0 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
31bd0 65 63 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ect,.           
31be0 22 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45  " UNION ALL SELE
31bf0 43 54 20 73 68 65 6c 6c 5f 6d 6f 64 75 6c 65 5f  CT shell_module_
31c00 73 63 68 65 6d 61 28 6e 61 6d 65 29 2c 22 0a 20  schema(name),". 
31c10 20 20 20 20 20 20 20 20 20 20 22 20 27 74 61 62            " 'tab
31c20 6c 65 27 2c 20 6e 61 6d 65 2c 20 6e 61 6d 65 2c  le', name, name,
31c30 20 6e 61 6d 65 2c 20 39 65 2b 39 39 2c 20 27 6d   name, 9e+99, 'm
31c40 61 69 6e 27 20 46 52 4f 4d 20 70 72 61 67 6d 61  ain' FROM pragma
31c50 5f 6d 6f 64 75 6c 65 5f 6c 69 73 74 22 2c 20 30  _module_list", 0
31c60 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  );.      }.#endi
31c70 66 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  f.      appendTe
31c80 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 29 20  xt(&sSelect, ") 
31c90 57 48 45 52 45 20 22 2c 20 30 29 3b 0a 20 20 20  WHERE ", 0);.   
31ca0 20 20 20 69 66 28 20 7a 4e 61 6d 65 20 29 7b 0a     if( zName ){.
31cb0 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 51          char *zQ
31cc0 61 72 67 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  arg = sqlite3_mp
31cd0 72 69 6e 74 66 28 22 25 51 22 2c 20 7a 4e 61 6d  rintf("%Q", zNam
31ce0 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  e);.        if( 
31cf0 73 74 72 63 68 72 28 7a 4e 61 6d 65 2c 20 27 2e  strchr(zName, '.
31d00 27 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ') ){.          
31d10 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
31d20 65 63 74 2c 20 22 6c 6f 77 65 72 28 70 72 69 6e  ect, "lower(prin
31d30 74 66 28 27 25 73 2e 25 73 27 2c 73 6e 61 6d 65  tf('%s.%s',sname
31d40 2c 74 62 6c 5f 6e 61 6d 65 29 29 22 2c 20 30 29  ,tbl_name))", 0)
31d50 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
31d60 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e  .          appen
31d70 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
31d80 22 6c 6f 77 65 72 28 74 62 6c 5f 6e 61 6d 65 29  "lower(tbl_name)
31d90 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  ", 0);.        }
31da0 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54  .        appendT
31db0 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 73 74  ext(&sSelect, st
31dc0 72 63 68 72 28 7a 4e 61 6d 65 2c 20 27 2a 27 29  rchr(zName, '*')
31dd0 20 3f 20 22 20 47 4c 4f 42 20 22 20 3a 20 22 20   ? " GLOB " : " 
31de0 4c 49 4b 45 20 22 2c 20 30 29 3b 0a 20 20 20 20  LIKE ", 0);.    
31df0 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
31e00 73 53 65 6c 65 63 74 2c 20 7a 51 61 72 67 2c 20  sSelect, zQarg, 
31e10 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65  0);.        appe
31e20 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
31e30 20 22 20 41 4e 44 20 22 2c 20 30 29 3b 0a 20 20   " AND ", 0);.  
31e40 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
31e50 65 65 28 7a 51 61 72 67 29 3b 0a 20 20 20 20 20  ee(zQarg);.     
31e60 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54   }.      appendT
31e70 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 74  ext(&sSelect, "t
31e80 79 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20  ype!='meta' AND 
31e90 73 71 6c 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 22  sql IS NOT NULL"
31ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52              " OR
31ec0 44 45 52 20 42 59 20 73 6e 75 6d 2c 20 72 6f 77  DER BY snum, row
31ed0 69 64 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  id", 0);.      i
31ee0 66 28 20 62 44 65 62 75 67 20 29 7b 0a 20 20 20  f( bDebug ){.   
31ef0 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
31f00 28 70 2d 3e 6f 75 74 2c 20 22 53 51 4c 3a 20 25  (p->out, "SQL: %
31f10 73 3b 5c 6e 22 2c 20 73 53 65 6c 65 63 74 2e 7a  s;\n", sSelect.z
31f20 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
31f30 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
31f40 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
31f50 20 73 53 65 6c 65 63 74 2e 7a 2c 20 63 61 6c 6c   sSelect.z, call
31f60 62 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45  back, &data, &zE
31f70 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 7d 0a  rrMsg);.      }.
31f80 20 20 20 20 20 20 66 72 65 65 54 65 78 74 28 26        freeText(&
31f90 73 53 65 6c 65 63 74 29 3b 0a 20 20 20 20 7d 0a  sSelect);.    }.
31fa0 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20      if( zErrMsg 
31fb0 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
31fc0 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72  intf(stderr,"Err
31fd0 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d  or: %s\n", zErrM
31fe0 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  sg);.      sqlit
31ff0 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
32000 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
32010 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63      }else if( rc
32020 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
32030 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
32040 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
32050 20 71 75 65 72 79 69 6e 67 20 73 63 68 65 6d 61   querying schema
32060 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29   information\n")
32070 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
32080 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
32090 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20   rc = 0;.    }. 
320a0 20 7d 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69   }else..#if defi
320b0 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
320c0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
320d0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43  ITE_ENABLE_SELEC
320e0 54 54 52 41 43 45 29 0a 20 20 69 66 28 20 63 3d  TTRACE).  if( c=
320f0 3d 27 73 27 20 26 26 20 6e 3d 3d 31 31 20 26 26  ='s' && n==11 &&
32100 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
32110 5d 2c 20 22 73 65 6c 65 63 74 74 72 61 63 65 22  ], "selecttrace"
32120 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  , n)==0 ){.    s
32130 71 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63  qlite3SelectTrac
32140 65 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72  e = (int)integer
32150 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b  Value(azArg[1]);
32160 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
32170 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
32180 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49  ITE_ENABLE_SESSI
32190 4f 4e 29 0a 20 20 69 66 28 20 63 3d 3d 27 73 27  ON).  if( c=='s'
321a0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
321b0 67 5b 30 5d 2c 22 73 65 73 73 69 6f 6e 22 2c 6e  g[0],"session",n
321c0 29 3d 3d 30 20 26 26 20 6e 3e 3d 33 20 29 7b 0a  )==0 && n>=3 ){.
321d0 20 20 20 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20      OpenSession 
321e0 2a 70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e  *pSession = &p->
321f0 61 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a 20 20 20  aSession[0];.   
32200 20 63 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20   char **azCmd = 
32210 26 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 69  &azArg[1];.    i
32220 6e 74 20 69 53 65 73 20 3d 20 30 3b 0a 20 20 20  nt iSes = 0;.   
32230 20 69 6e 74 20 6e 43 6d 64 20 3d 20 6e 41 72 67   int nCmd = nArg
32240 20 2d 20 31 3b 0a 20 20 20 20 69 6e 74 20 69 3b   - 1;.    int i;
32250 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c 3d 31  .    if( nArg<=1
32260 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f   ) goto session_
32270 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20  syntax_error;.  
32280 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
32290 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 33  .    if( nArg>=3
322a0 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 53   ){.      for(iS
322b0 65 73 3d 30 3b 20 69 53 65 73 3c 70 2d 3e 6e 53  es=0; iSes<p->nS
322c0 65 73 73 69 6f 6e 3b 20 69 53 65 73 2b 2b 29 7b  ession; iSes++){
322d0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
322e0 63 6d 70 28 70 2d 3e 61 53 65 73 73 69 6f 6e 5b  cmp(p->aSession[
322f0 69 53 65 73 5d 2e 7a 4e 61 6d 65 2c 20 61 7a 41  iSes].zName, azA
32300 72 67 5b 31 5d 29 3d 3d 30 20 29 20 62 72 65 61  rg[1])==0 ) brea
32310 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
32320 20 69 66 28 20 69 53 65 73 3c 70 2d 3e 6e 53 65   if( iSes<p->nSe
32330 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ssion ){.       
32340 20 70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e   pSession = &p->
32350 61 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d 3b 0a  aSession[iSes];.
32360 20 20 20 20 20 20 20 20 61 7a 43 6d 64 2b 2b 3b          azCmd++;
32370 0a 20 20 20 20 20 20 20 20 6e 43 6d 64 2d 2d 3b  .        nCmd--;
32380 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
32390 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d        pSession =
323a0 20 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 30 5d   &p->aSession[0]
323b0 3b 0a 20 20 20 20 20 20 20 20 69 53 65 73 20 3d  ;.        iSes =
323c0 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
323d0 7d 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69  }..    /* .sessi
323e0 6f 6e 20 61 74 74 61 63 68 20 54 41 42 4c 45 0a  on attach TABLE.
323f0 20 20 20 20 2a 2a 20 49 6e 76 6f 6b 65 20 74 68      ** Invoke th
32400 65 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e  e sqlite3session
32410 5f 61 74 74 61 63 68 28 29 20 69 6e 74 65 72 66  _attach() interf
32420 61 63 65 20 74 6f 20 61 74 74 61 63 68 20 61 20  ace to attach a 
32430 70 61 72 74 69 63 75 6c 61 72 0a 20 20 20 20 2a  particular.    *
32440 2a 20 74 61 62 6c 65 20 73 6f 20 74 68 61 74 20  * table so that 
32450 69 74 20 69 73 20 6e 65 76 65 72 20 66 69 6c 74  it is never filt
32460 65 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ered..    */.   
32470 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d   if( strcmp(azCm
32480 64 5b 30 5d 2c 22 61 74 74 61 63 68 22 29 3d 3d  d[0],"attach")==
32490 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  0 ){.      if( n
324a0 43 6d 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65  Cmd!=2 ) goto se
324b0 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
324c0 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53  or;.      if( pS
324d0 65 73 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 7b 0a  ession->p==0 ){.
324e0 20 20 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5f          session_
324f0 6e 6f 74 5f 6f 70 65 6e 3a 0a 20 20 20 20 20 20  not_open:.      
32500 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
32510 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 20  err, "ERROR: No 
32520 73 65 73 73 69 6f 6e 73 20 61 72 65 20 6f 70 65  sessions are ope
32530 6e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  n\n");.      }el
32540 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  se{.        rc =
32550 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f   sqlite3session_
32560 61 74 74 61 63 68 28 70 53 65 73 73 69 6f 6e 2d  attach(pSession-
32570 3e 70 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20  >p, azCmd[1]);. 
32580 20 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b         if( rc ){
32590 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
325a0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
325b0 52 52 4f 52 3a 20 73 71 6c 69 74 65 33 73 65 73  RROR: sqlite3ses
325c0 73 69 6f 6e 5f 61 74 74 61 63 68 28 29 20 72 65  sion_attach() re
325d0 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63 29  turns %d\n", rc)
325e0 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  ;.          rc =
325f0 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
32600 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a      }.    }else.
32610 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
32620 20 63 68 61 6e 67 65 73 65 74 20 46 49 4c 45 0a   changeset FILE.
32630 20 20 20 20 2a 2a 20 2e 73 65 73 73 69 6f 6e 20      ** .session 
32640 70 61 74 63 68 73 65 74 20 46 49 4c 45 0a 20 20  patchset FILE.  
32650 20 20 2a 2a 20 57 72 69 74 65 20 61 20 63 68 61    ** Write a cha
32660 6e 67 65 73 65 74 20 6f 72 20 70 61 74 63 68 73  ngeset or patchs
32670 65 74 20 69 6e 74 6f 20 61 20 66 69 6c 65 2e 20  et into a file. 
32680 20 54 68 65 20 66 69 6c 65 20 69 73 20 6f 76 65   The file is ove
32690 72 77 72 69 74 74 65 6e 2e 0a 20 20 20 20 2a 2f  rwritten..    */
326a0 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28  .    if( strcmp(
326b0 61 7a 43 6d 64 5b 30 5d 2c 22 63 68 61 6e 67 65  azCmd[0],"change
326c0 73 65 74 22 29 3d 3d 30 20 7c 7c 20 73 74 72 63  set")==0 || strc
326d0 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 22 70 61 74  mp(azCmd[0],"pat
326e0 63 68 73 65 74 22 29 3d 3d 30 20 29 7b 0a 20 20  chset")==0 ){.  
326f0 20 20 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20      FILE *out = 
32700 30 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  0;.      if( nCm
32710 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73  d!=2 ) goto sess
32720 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
32730 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53 65 73  ;.      if( pSes
32740 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 20 67 6f 74  sion->p==0 ) got
32750 6f 20 73 65 73 73 69 6f 6e 5f 6e 6f 74 5f 6f 70  o session_not_op
32760 65 6e 3b 0a 20 20 20 20 20 20 6f 75 74 20 3d 20  en;.      out = 
32770 66 6f 70 65 6e 28 61 7a 43 6d 64 5b 31 5d 2c 20  fopen(azCmd[1], 
32780 22 77 62 22 29 3b 0a 20 20 20 20 20 20 69 66 28  "wb");.      if(
32790 20 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20   out==0 ){.     
327a0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
327b0 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 63  tderr, "ERROR: c
327c0 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c  annot open \"%s\
327d0 22 20 66 6f 72 20 77 72 69 74 69 6e 67 5c 6e 22  " for writing\n"
327e0 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20  , azCmd[1]);.   
327f0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
32800 20 20 69 6e 74 20 73 7a 43 68 6e 67 3b 0a 20 20    int szChng;.  
32810 20 20 20 20 20 20 76 6f 69 64 20 2a 70 43 68 6e        void *pChn
32820 67 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61  g;.        if( a
32830 7a 43 6d 64 5b 30 5d 5b 30 5d 3d 3d 27 63 27 20  zCmd[0][0]=='c' 
32840 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
32850 3d 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e  = sqlite3session
32860 5f 63 68 61 6e 67 65 73 65 74 28 70 53 65 73 73  _changeset(pSess
32870 69 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68 6e 67 2c  ion->p, &szChng,
32880 20 26 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20   &pChng);.      
32890 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
328a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73     rc = sqlite3s
328b0 65 73 73 69 6f 6e 5f 70 61 74 63 68 73 65 74 28  ession_patchset(
328c0 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 26 73 7a  pSession->p, &sz
328d0 43 68 6e 67 2c 20 26 70 43 68 6e 67 29 3b 0a 20  Chng, &pChng);. 
328e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
328f0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
32900 20 20 20 20 20 70 72 69 6e 74 66 28 22 45 72 72       printf("Err
32910 6f 72 3a 20 65 72 72 6f 72 20 63 6f 64 65 20 25  or: error code %
32920 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20  d\n", rc);.     
32930 20 20 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20       rc = 0;.   
32940 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
32950 66 28 20 70 43 68 6e 67 0a 20 20 20 20 20 20 20  f( pChng.       
32960 20 20 20 26 26 20 66 77 72 69 74 65 28 70 43 68     && fwrite(pCh
32970 6e 67 2c 20 73 7a 43 68 6e 67 2c 20 31 2c 20 6f  ng, szChng, 1, o
32980 75 74 29 21 3d 31 20 29 7b 0a 20 20 20 20 20 20  ut)!=1 ){.      
32990 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
329a0 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 46  tderr, "ERROR: F
329b0 61 69 6c 65 64 20 74 6f 20 77 72 69 74 65 20 65  ailed to write e
329c0 6e 74 69 72 65 20 25 64 2d 62 79 74 65 20 6f 75  ntire %d-byte ou
329d0 74 70 75 74 5c 6e 22 2c 0a 20 20 20 20 20 20 20  tput\n",.       
329e0 20 20 20 20 20 20 20 20 20 20 20 73 7a 43 68 6e             szChn
329f0 67 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  g);.        }.  
32a00 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
32a10 65 65 28 70 43 68 6e 67 29 3b 0a 20 20 20 20 20  ee(pChng);.     
32a20 20 20 20 66 63 6c 6f 73 65 28 6f 75 74 29 3b 0a     fclose(out);.
32a30 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
32a40 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69  e..    /* .sessi
32a50 6f 6e 20 63 6c 6f 73 65 0a 20 20 20 20 2a 2a 20  on close.    ** 
32a60 43 6c 6f 73 65 20 74 68 65 20 69 64 65 6e 74 69  Close the identi
32a70 66 69 65 64 20 73 65 73 73 69 6f 6e 0a 20 20 20  fied session.   
32a80 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63   */.    if( strc
32a90 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 63 6c  mp(azCmd[0], "cl
32aa0 6f 73 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ose")==0 ){.    
32ab0 20 20 69 66 28 20 6e 43 6d 64 21 3d 31 20 29 20    if( nCmd!=1 ) 
32ac0 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e  goto session_syn
32ad0 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  tax_error;.     
32ae0 20 69 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e   if( p->nSession
32af0 20 29 7b 0a 20 20 20 20 20 20 20 20 73 65 73 73   ){.        sess
32b00 69 6f 6e 5f 63 6c 6f 73 65 28 70 53 65 73 73 69  ion_close(pSessi
32b10 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  on);.        p->
32b20 61 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d 20 3d  aSession[iSes] =
32b30 20 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 2d 2d 70   p->aSession[--p
32b40 2d 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20  ->nSession];.   
32b50 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a     }.    }else..
32b60 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20      /* .session 
32b70 65 6e 61 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f  enable ?BOOLEAN?
32b80 0a 20 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72  .    ** Query or
32b90 20 73 65 74 20 74 68 65 20 65 6e 61 62 6c 65 20   set the enable 
32ba0 66 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20  flag.    */.    
32bb0 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64  if( strcmp(azCmd
32bc0 5b 30 5d 2c 20 22 65 6e 61 62 6c 65 22 29 3d 3d  [0], "enable")==
32bd0 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  0 ){.      int i
32be0 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  i;.      if( nCm
32bf0 64 3e 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69  d>2 ) goto sessi
32c00 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
32c10 0a 20 20 20 20 20 20 69 69 20 3d 20 6e 43 6d 64  .      ii = nCmd
32c20 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c 65  ==1 ? -1 : boole
32c30 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31 5d  anValue(azCmd[1]
32c40 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
32c50 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20  nSession ){.    
32c60 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33      ii = sqlite3
32c70 73 65 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28 70  session_enable(p
32c80 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 69 69 29 3b  Session->p, ii);
32c90 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
32ca0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65  intf(p->out, "se
32cb0 73 73 69 6f 6e 20 25 73 20 65 6e 61 62 6c 65 20  ssion %s enable 
32cc0 66 6c 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20 20  flag = %d\n",.  
32cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ce0 20 20 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d    pSession->zNam
32cf0 65 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 7d 0a  e, ii);.      }.
32d00 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f      }else..    /
32d10 2a 20 2e 73 65 73 73 69 6f 6e 20 66 69 6c 74 65  * .session filte
32d20 72 20 47 4c 4f 42 20 2e 2e 2e 2e 0a 20 20 20 20  r GLOB .....    
32d30 2a 2a 20 53 65 74 20 61 20 6c 69 73 74 20 6f 66  ** Set a list of
32d40 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 6f   GLOB patterns o
32d50 66 20 74 61 62 6c 65 20 6e 61 6d 65 73 20 74 6f  f table names to
32d60 20 62 65 20 65 78 63 6c 75 64 65 64 2e 0a 20 20   be excluded..  
32d70 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72    */.    if( str
32d80 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 66  cmp(azCmd[0], "f
32d90 69 6c 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20  ilter")==0 ){.  
32da0 20 20 20 20 69 6e 74 20 69 69 2c 20 6e 42 79 74      int ii, nByt
32db0 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  e;.      if( nCm
32dc0 64 3c 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69  d<2 ) goto sessi
32dd0 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
32de0 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
32df0 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
32e00 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70    for(ii=0; ii<p
32e10 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72  Session->nFilter
32e20 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
32e30 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
32e40 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74  pSession->azFilt
32e50 65 72 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 20  er[ii]);.       
32e60 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
32e70 65 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e  e3_free(pSession
32e80 2d 3e 61 7a 46 69 6c 74 65 72 29 3b 0a 20 20 20  ->azFilter);.   
32e90 20 20 20 20 20 6e 42 79 74 65 20 3d 20 73 69 7a       nByte = siz
32ea0 65 6f 66 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a  eof(pSession->az
32eb0 46 69 6c 74 65 72 5b 30 5d 29 2a 28 6e 43 6d 64  Filter[0])*(nCmd
32ec0 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 70 53 65  -1);.        pSe
32ed0 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 20  ssion->azFilter 
32ee0 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  = sqlite3_malloc
32ef0 28 20 6e 42 79 74 65 20 29 3b 0a 20 20 20 20 20  ( nByte );.     
32f00 20 20 20 69 66 28 20 70 53 65 73 73 69 6f 6e 2d     if( pSession-
32f10 3e 61 7a 46 69 6c 74 65 72 3d 3d 30 20 29 7b 0a  >azFilter==0 ){.
32f20 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
32f30 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
32f40 72 6f 72 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f  ror: out or memo
32f50 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  ry\n");.        
32f60 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20    exit(1);.     
32f70 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72     }.        for
32f80 28 69 69 3d 31 3b 20 69 69 3c 6e 43 6d 64 3b 20  (ii=1; ii<nCmd; 
32f90 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
32fa0 20 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c   pSession->azFil
32fb0 74 65 72 5b 69 69 2d 31 5d 20 3d 20 73 71 6c 69  ter[ii-1] = sqli
32fc0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
32fd0 2c 20 61 7a 43 6d 64 5b 69 69 5d 29 3b 0a 20 20  , azCmd[ii]);.  
32fe0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
32ff0 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65  pSession->nFilte
33000 72 20 3d 20 69 69 2d 31 3b 0a 20 20 20 20 20 20  r = ii-1;.      
33010 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20  }.    }else..   
33020 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 69 6e 64   /* .session ind
33030 69 72 65 63 74 20 3f 42 4f 4f 4c 45 41 4e 3f 0a  irect ?BOOLEAN?.
33040 20 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20      ** Query or 
33050 73 65 74 20 74 68 65 20 69 6e 64 69 72 65 63 74  set the indirect
33060 20 66 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20   flag.    */.   
33070 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d   if( strcmp(azCm
33080 64 5b 30 5d 2c 20 22 69 6e 64 69 72 65 63 74 22  d[0], "indirect"
33090 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  )==0 ){.      in
330a0 74 20 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20  t ii;.      if( 
330b0 6e 43 6d 64 3e 32 20 29 20 67 6f 74 6f 20 73 65  nCmd>2 ) goto se
330c0 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
330d0 6f 72 3b 0a 20 20 20 20 20 20 69 69 20 3d 20 6e  or;.      ii = n
330e0 43 6d 64 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f  Cmd==1 ? -1 : bo
330f0 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64  oleanValue(azCmd
33100 5b 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  [1]);.      if( 
33110 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20  p->nSession ){. 
33120 20 20 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69         ii = sqli
33130 74 65 33 73 65 73 73 69 6f 6e 5f 69 6e 64 69 72  te3session_indir
33140 65 63 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c  ect(pSession->p,
33150 20 69 69 29 3b 0a 20 20 20 20 20 20 20 20 75 74   ii);.        ut
33160 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
33170 2c 20 22 73 65 73 73 69 6f 6e 20 25 73 20 69 6e  , "session %s in
33180 64 69 72 65 63 74 20 66 6c 61 67 20 3d 20 25 64  direct flag = %d
33190 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
331a0 20 20 20 20 20 20 20 20 20 70 53 65 73 73 69 6f           pSessio
331b0 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29 3b 0a 20  n->zName, ii);. 
331c0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
331d0 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f  ..    /* .sessio
331e0 6e 20 69 73 65 6d 70 74 79 0a 20 20 20 20 2a 2a  n isempty.    **
331f0 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
33200 65 20 73 65 73 73 69 6f 6e 20 69 73 20 65 6d 70  e session is emp
33210 74 79 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  ty.    */.    if
33220 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30  ( strcmp(azCmd[0
33230 5d 2c 20 22 69 73 65 6d 70 74 79 22 29 3d 3d 30  ], "isempty")==0
33240 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69   ){.      int ii
33250 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64  ;.      if( nCmd
33260 21 3d 31 20 29 20 67 6f 74 6f 20 73 65 73 73 69  !=1 ) goto sessi
33270 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
33280 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
33290 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
332a0 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65    ii = sqlite3se
332b0 73 73 69 6f 6e 5f 69 73 65 6d 70 74 79 28 70 53  ssion_isempty(pS
332c0 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20  ession->p);.    
332d0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
332e0 70 2d 3e 6f 75 74 2c 20 22 73 65 73 73 69 6f 6e  p->out, "session
332f0 20 25 73 20 69 73 65 6d 70 74 79 20 66 6c 61 67   %s isempty flag
33300 20 3d 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20   = %d\n",.      
33310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 53                pS
33320 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69  ession->zName, i
33330 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  i);.      }.    
33340 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73  }else..    /* .s
33350 65 73 73 69 6f 6e 20 6c 69 73 74 0a 20 20 20 20  ession list.    
33360 2a 2a 20 4c 69 73 74 20 61 6c 6c 20 63 75 72 72  ** List all curr
33370 65 6e 74 6c 79 20 6f 70 65 6e 20 73 65 73 73 69  ently open sessi
33380 6f 6e 73 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ons.    */.    i
33390 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
333a0 30 5d 2c 22 6c 69 73 74 22 29 3d 3d 30 20 29 7b  0],"list")==0 ){
333b0 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
333c0 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69  i<p->nSession; i
333d0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  ++){.        utf
333e0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
333f0 20 22 25 64 20 25 73 5c 6e 22 2c 20 69 2c 20 70   "%d %s\n", i, p
33400 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 5d 2e 7a 4e  ->aSession[i].zN
33410 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ame);.      }.  
33420 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20    }else..    /* 
33430 2e 73 65 73 73 69 6f 6e 20 6f 70 65 6e 20 44 42  .session open DB
33440 20 4e 41 4d 45 0a 20 20 20 20 2a 2a 20 4f 70 65   NAME.    ** Ope
33450 6e 20 61 20 6e 65 77 20 73 65 73 73 69 6f 6e 20  n a new session 
33460 63 61 6c 6c 65 64 20 4e 41 4d 45 20 6f 6e 20 74  called NAME on t
33470 68 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61  he attached data
33480 62 61 73 65 20 44 42 2e 0a 20 20 20 20 2a 2a 20  base DB..    ** 
33490 44 42 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 22  DB is normally "
334a0 6d 61 69 6e 22 2e 0a 20 20 20 20 2a 2f 0a 20 20  main"..    */.  
334b0 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43    if( strcmp(azC
334c0 6d 64 5b 30 5d 2c 22 6f 70 65 6e 22 29 3d 3d 30  md[0],"open")==0
334d0 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a   ){.      char *
334e0 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20 69 66 28  zName;.      if(
334f0 20 6e 43 6d 64 21 3d 33 20 29 20 67 6f 74 6f 20   nCmd!=3 ) goto 
33500 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65  session_syntax_e
33510 72 72 6f 72 3b 0a 20 20 20 20 20 20 7a 4e 61 6d  rror;.      zNam
33520 65 20 3d 20 61 7a 43 6d 64 5b 32 5d 3b 0a 20 20  e = azCmd[2];.  
33530 20 20 20 20 69 66 28 20 7a 4e 61 6d 65 5b 30 5d      if( zName[0]
33540 3d 3d 30 20 29 20 67 6f 74 6f 20 73 65 73 73 69  ==0 ) goto sessi
33550 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
33560 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
33570 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69  i<p->nSession; i
33580 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
33590 20 73 74 72 63 6d 70 28 70 2d 3e 61 53 65 73 73   strcmp(p->aSess
335a0 69 6f 6e 5b 69 5d 2e 7a 4e 61 6d 65 2c 7a 4e 61  ion[i].zName,zNa
335b0 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  me)==0 ){.      
335c0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
335d0 73 74 64 65 72 72 2c 20 22 53 65 73 73 69 6f 6e  stderr, "Session
335e0 20 5c 22 25 73 5c 22 20 61 6c 72 65 61 64 79 20   \"%s\" already 
335f0 65 78 69 73 74 73 5c 6e 22 2c 20 7a 4e 61 6d 65  exists\n", zName
33600 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
33610 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
33620 78 69 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  xit;.        }. 
33630 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
33640 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 3e 3d 41 72   p->nSession>=Ar
33650 72 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73  raySize(p->aSess
33660 69 6f 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ion) ){.        
33670 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
33680 72 2c 20 22 4d 61 78 69 6d 75 6d 20 6f 66 20 25  r, "Maximum of %
33690 64 20 73 65 73 73 69 6f 6e 73 5c 6e 22 2c 20 41  d sessions\n", A
336a0 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73  rraySize(p->aSes
336b0 73 69 6f 6e 29 29 3b 0a 20 20 20 20 20 20 20 20  sion));.        
336c0 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
336d0 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a  d_exit;.      }.
336e0 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d        pSession =
336f0 20 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 70 2d   &p->aSession[p-
33700 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20  >nSession];.    
33710 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65    rc = sqlite3se
33720 73 73 69 6f 6e 5f 63 72 65 61 74 65 28 70 2d 3e  ssion_create(p->
33730 64 62 2c 20 61 7a 43 6d 64 5b 31 5d 2c 20 26 70  db, azCmd[1], &p
33740 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20  Session->p);.   
33750 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
33760 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
33770 73 74 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20  stderr, "Cannot 
33780 6f 70 65 6e 20 73 65 73 73 69 6f 6e 3a 20 65 72  open session: er
33790 72 6f 72 20 63 6f 64 65 3d 25 64 5c 6e 22 2c 20  ror code=%d\n", 
337a0 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  rc);.        rc 
337b0 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 0;.        got
337c0 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
337d0 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  xit;.      }.   
337e0 20 20 20 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69     pSession->nFi
337f0 6c 74 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20  lter = 0;.      
33800 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 74  sqlite3session_t
33810 61 62 6c 65 5f 66 69 6c 74 65 72 28 70 53 65 73  able_filter(pSes
33820 73 69 6f 6e 2d 3e 70 2c 20 73 65 73 73 69 6f 6e  sion->p, session
33830 5f 66 69 6c 74 65 72 2c 20 70 53 65 73 73 69 6f  _filter, pSessio
33840 6e 29 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 65  n);.      p->nSe
33850 73 73 69 6f 6e 2b 2b 3b 0a 20 20 20 20 20 20 70  ssion++;.      p
33860 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 20 3d  Session->zName =
33870 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
33880 28 22 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  ("%s", zName);. 
33890 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 2f 2a 20     }else.    /* 
338a0 49 66 20 6e 6f 20 63 6f 6d 6d 61 6e 64 20 6e 61  If no command na
338b0 6d 65 20 6d 61 74 63 68 65 73 2c 20 73 68 6f 77  me matches, show
338c0 20 61 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20   a syntax error 
338d0 2a 2f 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 73  */.    session_s
338e0 79 6e 74 61 78 5f 65 72 72 6f 72 3a 0a 20 20 20  yntax_error:.   
338f0 20 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28 70 29   session_help(p)
33900 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
33910 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
33920 44 45 42 55 47 0a 20 20 2f 2a 20 55 6e 64 6f 63  DEBUG.  /* Undoc
33930 75 6d 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 73  umented commands
33940 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 74 65   for internal te
33950 73 74 69 6e 67 2e 20 20 53 75 62 6a 65 63 74 20  sting.  Subject 
33960 74 6f 20 63 68 61 6e 67 65 0a 20 20 2a 2a 20 77  to change.  ** w
33970 69 74 68 6f 75 74 20 6e 6f 74 69 63 65 2e 20 2a  ithout notice. *
33980 2f 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26  /.  if( c=='s' &
33990 26 20 6e 3e 3d 31 30 20 26 26 20 73 74 72 6e 63  & n>=10 && strnc
339a0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 65  mp(azArg[0], "se
339b0 6c 66 74 65 73 74 2d 22 2c 20 39 29 3d 3d 30 20  lftest-", 9)==0 
339c0 29 7b 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63  ){.    if( strnc
339d0 6d 70 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22  mp(azArg[0]+9, "
339e0 62 6f 6f 6c 65 61 6e 22 2c 20 6e 2d 39 29 3d 3d  boolean", n-9)==
339f0 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  0 ){.      int i
33a00 2c 20 76 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  , v;.      for(i
33a10 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =1; i<nArg; i++)
33a20 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 62 6f  {.        v = bo
33a30 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
33a40 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 75 74  [i]);.        ut
33a50 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
33a60 2c 20 22 25 73 3a 20 25 64 20 30 78 25 78 5c 6e  , "%s: %d 0x%x\n
33a70 22 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 76 2c 20  ", azArg[i], v, 
33a80 76 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  v);.      }.    
33a90 7d 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d  }.    if( strncm
33aa0 70 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 69  p(azArg[0]+9, "i
33ab0 6e 74 65 67 65 72 22 2c 20 6e 2d 39 29 3d 3d 30  nteger", n-9)==0
33ac0 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b   ){.      int i;
33ad0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 76   sqlite3_int64 v
33ae0 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b  ;.      for(i=1;
33af0 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
33b00 20 20 20 20 20 20 20 63 68 61 72 20 7a 42 75 66         char zBuf
33b10 5b 32 30 30 5d 3b 0a 20 20 20 20 20 20 20 20 76  [200];.        v
33b20 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28   = integerValue(
33b30 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20  azArg[i]);.     
33b40 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
33b50 6e 74 66 28 73 69 7a 65 6f 66 28 7a 42 75 66 29  ntf(sizeof(zBuf)
33b60 2c 7a 42 75 66 2c 22 25 73 3a 20 25 6c 6c 64 20  ,zBuf,"%s: %lld 
33b70 30 78 25 6c 6c 78 5c 6e 22 2c 20 61 7a 41 72 67  0x%llx\n", azArg
33b80 5b 69 5d 2c 76 2c 76 29 3b 0a 20 20 20 20 20 20  [i],v,v);.      
33b90 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
33ba0 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66  >out, "%s", zBuf
33bb0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
33bc0 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
33bd0 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26  .  if( c=='s' &&
33be0 20 6e 3e 3d 34 20 26 26 20 73 74 72 6e 63 6d 70   n>=4 && strncmp
33bf0 28 61 7a 41 72 67 5b 30 5d 2c 22 73 65 6c 66 74  (azArg[0],"selft
33c00 65 73 74 22 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20  est",n)==0 ){.  
33c10 20 20 69 6e 74 20 62 49 73 49 6e 69 74 20 3d 20    int bIsInit = 
33c20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  0;         /* Tr
33c30 75 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ue to initialize
33c40 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74 61   the SELFTEST ta
33c50 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62  ble */.    int b
33c60 56 65 72 62 6f 73 65 20 3d 20 30 3b 20 20 20 20  Verbose = 0;    
33c70 20 20 20 20 2f 2a 20 56 65 72 62 6f 73 65 20 6f      /* Verbose o
33c80 75 74 70 75 74 20 2a 2f 0a 20 20 20 20 69 6e 74  utput */.    int
33c90 20 62 53 65 6c 66 74 65 73 74 45 78 69 73 74 73   bSelftestExists
33ca0 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
33cb0 20 53 45 4c 46 54 45 53 54 20 61 6c 72 65 61 64   SELFTEST alread
33cc0 79 20 65 78 69 73 74 73 20 2a 2f 0a 20 20 20 20  y exists */.    
33cd0 69 6e 74 20 69 2c 20 6b 3b 20 20 20 20 20 20 20  int i, k;       
33ce0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
33cf0 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20   counters */.   
33d00 20 69 6e 74 20 6e 54 65 73 74 20 3d 20 30 3b 20   int nTest = 0; 
33d10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
33d20 62 65 72 20 6f 66 20 74 65 73 74 73 20 72 75 6e  ber of tests run
33d30 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 45 72  s */.    int nEr
33d40 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
33d50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
33d60 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
33d70 20 20 53 68 65 6c 6c 54 65 78 74 20 73 74 72 3b    ShellText str;
33d80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e             /* An
33d90 73 77 65 72 20 66 6f 72 20 61 20 71 75 65 72 79  swer for a query
33da0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   */.    sqlite3_
33db0 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b  stmt *pStmt = 0;
33dc0 20 2f 2a 20 51 75 65 72 79 20 61 67 61 69 6e 73   /* Query agains
33dd0 74 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74  t the SELFTEST t
33de0 61 62 6c 65 20 2a 2f 0a 0a 20 20 20 20 6f 70 65  able */..    ope
33df0 6e 5f 64 62 28 70 2c 30 29 3b 0a 20 20 20 20 66  n_db(p,0);.    f
33e00 6f 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20  or(i=1; i<nArg; 
33e10 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  i++){.      cons
33e20 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72  t char *z = azAr
33e30 67 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  g[i];.      if( 
33e40 7a 5b 30 5d 3d 3d 27 2d 27 20 26 26 20 7a 5b 31  z[0]=='-' && z[1
33e50 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20  ]=='-' ) z++;.  
33e60 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
33e70 2c 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a  ,"-init")==0 ){.
33e80 20 20 20 20 20 20 20 20 62 49 73 49 6e 69 74 20          bIsInit 
33e90 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 1;.      }else
33ea0 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d  .      if( strcm
33eb0 70 28 7a 2c 22 2d 76 22 29 3d 3d 30 20 29 7b 0a  p(z,"-v")==0 ){.
33ec0 20 20 20 20 20 20 20 20 62 56 65 72 62 6f 73 65          bVerbose
33ed0 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a  ++;.      }else.
33ee0 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
33ef0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
33f00 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74  rr, "Unknown opt
33f10 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22  ion \"%s\" on \"
33f20 25 73 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20  %s\"\n",.       
33f30 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
33f40 72 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29  rg[i], azArg[0])
33f50 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  ;.        raw_pr
33f60 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 68  intf(stderr, "Sh
33f70 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20  ould be one of: 
33f80 2d 2d 69 6e 69 74 20 2d 76 5c 6e 22 29 3b 0a 20  --init -v\n");. 
33f90 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
33fa0 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
33fb0 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
33fc0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
33fd0 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74 61 62   if( sqlite3_tab
33fe0 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
33ff0 74 61 28 70 2d 3e 64 62 2c 22 6d 61 69 6e 22 2c  ta(p->db,"main",
34000 22 73 65 6c 66 74 65 73 74 22 2c 30 2c 30 2c 30  "selftest",0,0,0
34010 2c 30 2c 30 2c 30 29 0a 20 20 20 20 20 20 20 20  ,0,0,0).        
34020 20 20 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20     != SQLITE_OK 
34030 29 7b 0a 20 20 20 20 20 20 62 53 65 6c 66 74 65  ){.      bSelfte
34040 73 74 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20  stExists = 0;.  
34050 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 62    }else{.      b
34060 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d  SelftestExists =
34070 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   1;.    }.    if
34080 28 20 62 49 73 49 6e 69 74 20 29 7b 0a 20 20 20  ( bIsInit ){.   
34090 20 20 20 63 72 65 61 74 65 53 65 6c 66 74 65 73     createSelftes
340a0 74 54 61 62 6c 65 28 70 29 3b 0a 20 20 20 20 20  tTable(p);.     
340b0 20 62 53 65 6c 66 74 65 73 74 45 78 69 73 74 73   bSelftestExists
340c0 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
340d0 69 6e 69 74 54 65 78 74 28 26 73 74 72 29 3b 0a  initText(&str);.
340e0 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
340f0 73 74 72 2c 20 22 78 22 2c 20 30 29 3b 0a 20 20  str, "x", 0);.  
34100 20 20 66 6f 72 28 6b 3d 62 53 65 6c 66 74 65 73    for(k=bSelftes
34110 74 45 78 69 73 74 73 3b 20 6b 3e 3d 30 3b 20 6b  tExists; k>=0; k
34120 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6b  --){.      if( k
34130 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==1 ){.        r
34140 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
34150 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20  are_v2(p->db,.  
34160 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43            "SELEC
34170 54 20 74 6e 6f 2c 6f 70 2c 63 6d 64 2c 61 6e 73  T tno,op,cmd,ans
34180 20 46 52 4f 4d 20 73 65 6c 66 74 65 73 74 20 4f   FROM selftest O
34190 52 44 45 52 20 42 59 20 74 6e 6f 22 2c 0a 20 20  RDER BY tno",.  
341a0 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70            -1, &p
341b0 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20  Stmt, 0);.      
341c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
341d0 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
341e0 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20  are_v2(p->db,.  
341f0 20 20 20 20 20 20 20 20 22 56 41 4c 55 45 53 28          "VALUES(
34200 30 2c 27 6d 65 6d 6f 27 2c 27 4d 69 73 73 69 6e  0,'memo','Missin
34210 67 20 53 45 4c 46 54 45 53 54 20 74 61 62 6c 65  g SELFTEST table
34220 20 2d 20 64 65 66 61 75 6c 74 20 63 68 65 63 6b   - default check
34230 73 20 6f 6e 6c 79 27 2c 27 27 29 2c 22 0a 20 20  s only',''),".  
34240 20 20 20 20 20 20 20 20 22 20 20 20 20 20 20 28          "      (
34250 31 2c 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20  1,'run','PRAGMA 
34260 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27  integrity_check'
34270 2c 27 6f 6b 27 29 22 2c 0a 20 20 20 20 20 20 20  ,'ok')",.       
34280 20 20 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30     -1, &pStmt, 0
34290 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
342a0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
342b0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
342c0 64 65 72 72 2c 20 22 45 72 72 6f 72 20 71 75 65  derr, "Error que
342d0 72 79 69 6e 67 20 74 68 65 20 73 65 6c 66 74 65  rying the selfte
342e0 73 74 20 74 61 62 6c 65 5c 6e 22 29 3b 0a 20 20  st table\n");.  
342f0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
34300 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
34310 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
34320 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
34330 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
34340 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72       }.      for
34350 28 69 3d 31 3b 20 73 71 6c 69 74 65 33 5f 73 74  (i=1; sqlite3_st
34360 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
34370 45 5f 52 4f 57 3b 20 69 2b 2b 29 7b 0a 20 20 20  E_ROW; i++){.   
34380 20 20 20 20 20 69 6e 74 20 74 6e 6f 20 3d 20 73       int tno = s
34390 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
343a0 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20  t(pStmt, 0);.   
343b0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
343c0 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73 74 20 63 68  *zOp = (const ch
343d0 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
343e0 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31  mn_text(pStmt, 1
343f0 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74  );.        const
34400 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 28 63   char *zSql = (c
34410 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
34420 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
34430 53 74 6d 74 2c 20 32 29 3b 0a 20 20 20 20 20 20  Stmt, 2);.      
34440 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
34450 6e 73 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  ns = (const char
34460 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
34470 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 33 29 3b  _text(pStmt, 3);
34480 0a 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b  ..        k = 0;
34490 0a 20 20 20 20 20 20 20 20 69 66 28 20 62 56 65  .        if( bVe
344a0 72 62 6f 73 65 3e 30 20 29 7b 0a 20 20 20 20 20  rbose>0 ){.     
344b0 20 20 20 20 20 63 68 61 72 20 2a 7a 51 75 6f 74       char *zQuot
344c0 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e = sqlite3_mpri
344d0 6e 74 66 28 22 25 71 22 2c 20 7a 53 71 6c 29 3b  ntf("%q", zSql);
344e0 0a 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74  .          print
344f0 66 28 22 25 64 3a 20 25 73 20 25 73 5c 6e 22 2c  f("%d: %s %s\n",
34500 20 74 6e 6f 2c 20 7a 4f 70 2c 20 7a 53 71 6c 29   tno, zOp, zSql)
34510 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
34520 74 65 33 5f 66 72 65 65 28 7a 51 75 6f 74 65 29  te3_free(zQuote)
34530 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
34540 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
34550 4f 70 2c 22 6d 65 6d 6f 22 29 3d 3d 30 20 29 7b  Op,"memo")==0 ){
34560 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
34570 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
34580 25 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20  %s\n", zSql);.  
34590 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20        }else.    
345a0 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
345b0 4f 70 2c 22 72 75 6e 22 29 3d 3d 30 20 29 7b 0a  Op,"run")==0 ){.
345c0 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
345d0 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
345e0 20 20 20 20 20 20 20 73 74 72 2e 6e 20 3d 20 30         str.n = 0
345f0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 2e  ;.          str.
34600 7a 5b 30 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  z[0] = 0;.      
34610 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
34620 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71  _exec(p->db, zSq
34630 6c 2c 20 63 61 70 74 75 72 65 4f 75 74 70 75 74  l, captureOutput
34640 43 61 6c 6c 62 61 63 6b 2c 20 26 73 74 72 2c 20  Callback, &str, 
34650 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
34660 20 20 20 20 20 6e 54 65 73 74 2b 2b 3b 0a 20 20       nTest++;.  
34670 20 20 20 20 20 20 20 20 69 66 28 20 62 56 65 72          if( bVer
34680 62 6f 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20  bose ){.        
34690 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
346a0 70 2d 3e 6f 75 74 2c 20 22 52 65 73 75 6c 74 3a  p->out, "Result:
346b0 20 25 73 5c 6e 22 2c 20 73 74 72 2e 7a 29 3b 0a   %s\n", str.z);.
346c0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
346d0 20 20 20 20 20 20 69 66 28 20 72 63 20 7c 7c 20        if( rc || 
346e0 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20  zErrMsg ){.     
346f0 20 20 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a 20         nErr++;. 
34700 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
34710 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  1;.            u
34720 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
34730 74 2c 20 22 25 64 3a 20 65 72 72 6f 72 2d 63 6f  t, "%d: error-co
34740 64 65 2d 25 64 3a 20 25 73 5c 6e 22 2c 20 74 6e  de-%d: %s\n", tn
34750 6f 2c 20 72 63 2c 20 7a 45 72 72 4d 73 67 29 3b  o, rc, zErrMsg);
34760 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
34770 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73  ite3_free(zErrMs
34780 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  g);.          }e
34790 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
347a0 41 6e 73 2c 73 74 72 2e 7a 29 21 3d 30 20 29 7b  Ans,str.z)!=0 ){
347b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 45 72  .            nEr
347c0 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  r++;.           
347d0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   rc = 1;.       
347e0 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
347f0 28 70 2d 3e 6f 75 74 2c 20 22 25 64 3a 20 45 78  (p->out, "%d: Ex
34800 70 65 63 74 65 64 3a 20 5b 25 73 5d 5c 6e 22 2c  pected: [%s]\n",
34810 20 74 6e 6f 2c 20 7a 41 6e 73 29 3b 0a 20 20 20   tno, zAns);.   
34820 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
34830 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64  intf(p->out, "%d
34840 3a 20 20 20 20 20 20 47 6f 74 3a 20 5b 25 73 5d  :      Got: [%s]
34850 5c 6e 22 2c 20 74 6e 6f 2c 20 73 74 72 2e 7a 29  \n", tno, str.z)
34860 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
34870 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20        }else.    
34880 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
34890 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
348a0 72 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  rr,.            
348b0 22 55 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69  "Unknown operati
348c0 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 73 65 6c  on \"%s\" on sel
348d0 66 74 65 73 74 20 6c 69 6e 65 20 25 64 5c 6e 22  ftest line %d\n"
348e0 2c 20 7a 4f 70 2c 20 74 6e 6f 29 3b 0a 20 20 20  , zOp, tno);.   
348f0 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
34900 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
34910 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
34920 7d 20 2f 2a 20 45 6e 64 20 6c 6f 6f 70 20 6f 76  } /* End loop ov
34930 65 72 20 72 6f 77 73 20 6f 66 20 63 6f 6e 74 65  er rows of conte
34940 6e 74 20 66 72 6f 6d 20 53 45 4c 46 54 45 53 54  nt from SELFTEST
34950 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
34960 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
34970 29 3b 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20  );.    } /* End 
34980 6c 6f 6f 70 20 6f 76 65 72 20 6b 20 2a 2f 0a 20  loop over k */. 
34990 20 20 20 66 72 65 65 54 65 78 74 28 26 73 74 72     freeText(&str
349a0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
349b0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 65  tf(p->out, "%d e
349c0 72 72 6f 72 73 20 6f 75 74 20 6f 66 20 25 64 20  rrors out of %d 
349d0 74 65 73 74 73 5c 6e 22 2c 20 6e 45 72 72 2c 20  tests\n", nErr, 
349e0 6e 54 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 0a  nTest);.  }else.
349f0 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26  .  if( c=='s' &&
34a00 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
34a10 5d 2c 20 22 73 65 70 61 72 61 74 6f 72 22 2c 20  ], "separator", 
34a20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
34a30 20 6e 41 72 67 3c 32 20 7c 7c 20 6e 41 72 67 3e   nArg<2 || nArg>
34a40 33 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  3 ){.      raw_p
34a50 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
34a60 73 61 67 65 3a 20 2e 73 65 70 61 72 61 74 6f 72  sage: .separator
34a70 20 43 4f 4c 20 3f 52 4f 57 3f 5c 6e 22 29 3b 0a   COL ?ROW?\n");.
34a80 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
34a90 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67    }.    if( nArg
34aa0 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  >=2 ){.      sql
34ab0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
34ac0 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72  zeof(p->colSepar
34ad0 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70  ator), p->colSep
34ae0 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20  arator,.        
34af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
34b00 25 2e 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61  %.*s", (int)Arra
34b10 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 53 65 70 61  ySize(p->colSepa
34b20 72 61 74 6f 72 29 2d 31 2c 20 61 7a 41 72 67 5b  rator)-1, azArg[
34b30 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  1]);.    }.    i
34b40 66 28 20 6e 41 72 67 3e 3d 33 20 29 7b 0a 20 20  f( nArg>=3 ){.  
34b50 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
34b60 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72  intf(sizeof(p->r
34b70 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d  owSeparator), p-
34b80 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20  >rowSeparator,. 
34b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ba0 20 20 20 20 20 20 22 25 2e 2a 73 22 2c 20 28 69        "%.*s", (i
34bb0 6e 74 29 41 72 72 61 79 53 69 7a 65 28 70 2d 3e  nt)ArraySize(p->
34bc0 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2d 31 2c  rowSeparator)-1,
34bd0 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20   azArg[2]);.    
34be0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
34bf0 20 63 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 34 20   c=='s' && n>=4 
34c00 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
34c10 5b 30 5d 2c 22 73 68 61 33 73 75 6d 22 2c 6e 29  [0],"sha3sum",n)
34c20 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ==0 ){.    const
34c30 20 63 68 61 72 20 2a 7a 4c 69 6b 65 20 3d 20 30   char *zLike = 0
34c40 3b 20 20 20 2f 2a 20 57 68 69 63 68 20 74 61 62  ;   /* Which tab
34c50 6c 65 20 74 6f 20 63 68 65 63 6b 73 75 6d 2e 20  le to checksum. 
34c60 30 20 6d 65 61 6e 73 20 65 76 65 72 79 74 68 69  0 means everythi
34c70 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b  ng */.    int i;
34c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c90 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
34ca0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 53  er */.    int bS
34cb0 63 68 65 6d 61 20 3d 20 30 3b 20 20 20 20 20 20  chema = 0;      
34cc0 20 20 20 2f 2a 20 41 6c 73 6f 20 68 61 73 68 20     /* Also hash 
34cd0 74 68 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  the schema */.  
34ce0 20 20 69 6e 74 20 62 53 65 70 61 72 61 74 65 20    int bSeparate 
34cf0 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  = 0;       /* Ha
34d00 73 68 20 65 61 63 68 20 74 61 62 6c 65 20 73 65  sh each table se
34d10 70 61 72 61 74 65 6c 79 20 2a 2f 0a 20 20 20 20  parately */.    
34d20 69 6e 74 20 69 53 69 7a 65 20 3d 20 32 32 34 3b  int iSize = 224;
34d30 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68           /* Hash
34d40 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
34d50 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 44 65  e */.    int bDe
34d60 62 75 67 20 3d 20 30 3b 20 20 20 20 20 20 20 20  bug = 0;        
34d70 20 20 2f 2a 20 4f 6e 6c 79 20 73 68 6f 77 20 74    /* Only show t
34d80 68 65 20 71 75 65 72 79 20 74 68 61 74 20 77 6f  he query that wo
34d90 75 6c 64 20 68 61 76 65 20 72 75 6e 20 2a 2f 0a  uld have run */.
34da0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
34db0 20 2a 70 53 74 6d 74 3b 20 20 20 20 20 2f 2a 20   *pStmt;     /* 
34dc0 46 6f 72 20 71 75 65 72 79 69 6e 67 20 74 61 62  For querying tab
34dd0 6c 65 73 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 20  les names */.   
34de0 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20   char *zSql;    
34df0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c            /* SQL
34e00 20 74 6f 20 62 65 20 72 75 6e 20 2a 2f 0a 20 20   to be run */.  
34e10 20 20 63 68 61 72 20 2a 7a 53 65 70 3b 20 20 20    char *zSep;   
34e20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65             /* Se
34e30 70 61 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 53  parator */.    S
34e40 68 65 6c 6c 54 65 78 74 20 73 53 71 6c 3b 20 20  hellText sSql;  
34e50 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
34e60 65 74 65 20 53 51 4c 20 66 6f 72 20 74 68 65 20  ete SQL for the 
34e70 71 75 65 72 79 20 74 6f 20 72 75 6e 20 74 68 65  query to run the
34e80 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 53 68 65   hash */.    She
34e90 6c 6c 54 65 78 74 20 73 51 75 65 72 79 3b 20 20  llText sQuery;  
34ea0 20 20 20 20 20 20 2f 2a 20 53 65 74 20 6f 66 20        /* Set of 
34eb0 71 75 65 72 69 65 73 20 75 73 65 64 20 74 6f 20  queries used to 
34ec0 72 65 61 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  read all content
34ed0 20 2a 2f 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   */.    open_db(
34ee0 70 2c 20 30 29 3b 0a 20 20 20 20 66 6f 72 28 69  p, 0);.    for(i
34ef0 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =1; i<nArg; i++)
34f00 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
34f10 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d  ar *z = azArg[i]
34f20 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d  ;.      if( z[0]
34f30 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20  =='-' ){.       
34f40 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66   z++;.        if
34f50 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b  ( z[0]=='-' ) z+
34f60 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  +;.        if( s
34f70 74 72 63 6d 70 28 7a 2c 22 73 63 68 65 6d 61 22  trcmp(z,"schema"
34f80 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
34f90 20 20 62 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20    bSchema = 1;. 
34fa0 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20         }else.   
34fb0 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
34fc0 7a 2c 22 73 68 61 33 2d 32 32 34 22 29 3d 3d 30  z,"sha3-224")==0
34fd0 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68   || strcmp(z,"sh
34fe0 61 33 2d 32 35 36 22 29 3d 3d 30 0a 20 20 20 20  a3-256")==0.    
34ff0 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a       || strcmp(z
35000 2c 22 73 68 61 33 2d 33 38 34 22 29 3d 3d 30 20  ,"sha3-384")==0 
35010 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61  || strcmp(z,"sha
35020 33 2d 35 31 32 22 29 3d 3d 30 0a 20 20 20 20 20  3-512")==0.     
35030 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20     ){.          
35040 69 53 69 7a 65 20 3d 20 61 74 6f 69 28 26 7a 5b  iSize = atoi(&z[
35050 35 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  5]);.        }el
35060 73 65 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  se.        if( s
35070 74 72 63 6d 70 28 7a 2c 22 64 65 62 75 67 22 29  trcmp(z,"debug")
35080 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
35090 20 62 44 65 62 75 67 20 3d 20 31 3b 0a 20 20 20   bDebug = 1;.   
350a0 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20       }else.     
350b0 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75     {.          u
350c0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
350d0 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69  r, "Unknown opti
350e0 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25  on \"%s\" on \"%
350f0 73 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  s\"\n",.        
35100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a                az
35110 41 72 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d  Arg[i], azArg[0]
35120 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  );.          raw
35130 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
35140 22 53 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f  "Should be one o
35150 66 3a 20 2d 2d 73 63 68 65 6d 61 22 0a 20 20 20  f: --schema".   
35160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35170 20 20 20 20 20 20 20 20 20 20 22 20 2d 2d 73 68            " --sh
35180 61 33 2d 32 32 34 20 2d 2d 73 68 61 33 2d 32 35  a3-224 --sha3-25
35190 35 20 2d 2d 73 68 61 33 2d 33 38 34 20 2d 2d 73  5 --sha3-384 --s
351a0 68 61 33 2d 35 31 32 5c 6e 22 29 3b 0a 20 20 20  ha3-512\n");.   
351b0 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
351c0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65           goto me
351d0 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
351e0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
351f0 20 7d 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b 65   }else if( zLike
35200 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
35210 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
35220 55 73 61 67 65 3a 20 2e 73 68 61 33 73 75 6d 20  Usage: .sha3sum 
35230 3f 4f 50 54 49 4f 4e 53 3f 20 3f 4c 49 4b 45 2d  ?OPTIONS? ?LIKE-
35240 50 41 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20  PATTERN?\n");.  
35250 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
35260 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
35270 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
35280 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
35290 20 20 20 7a 4c 69 6b 65 20 3d 20 7a 3b 0a 20 20     zLike = z;.  
352a0 20 20 20 20 20 20 62 53 65 70 61 72 61 74 65 20        bSeparate 
352b0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
352c0 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65   sqlite3_strlike
352d0 28 22 73 71 6c 69 74 65 5f 25 22 2c 20 7a 4c 69  ("sqlite_%", zLi
352e0 6b 65 2c 20 30 29 3d 3d 30 20 29 20 62 53 63 68  ke, 0)==0 ) bSch
352f0 65 6d 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  ema = 1;.      }
35300 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 62  .    }.    if( b
35310 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20  Schema ){.      
35320 7a 53 71 6c 20 3d 20 22 53 45 4c 45 43 54 20 6c  zSql = "SELECT l
35330 6f 77 65 72 28 6e 61 6d 65 29 20 46 52 4f 4d 20  ower(name) FROM 
35340 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20  sqlite_master". 
35350 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48              " WH
35360 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
35370 20 41 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f   AND coalesce(ro
35380 6f 74 70 61 67 65 2c 30 29 3e 31 22 0a 20 20 20  otpage,0)>1".   
35390 20 20 20 20 20 20 20 20 20 20 22 20 55 4e 49 4f            " UNIO
353a0 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 27 73 71  N ALL SELECT 'sq
353b0 6c 69 74 65 5f 6d 61 73 74 65 72 27 22 0a 20 20  lite_master'".  
353c0 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44             " ORD
353d0 45 52 20 42 59 20 31 20 63 6f 6c 6c 61 74 65 20  ER BY 1 collate 
353e0 6e 6f 63 61 73 65 22 3b 0a 20 20 20 20 7d 65 6c  nocase";.    }el
353f0 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d  se{.      zSql =
35400 20 22 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 6e   "SELECT lower(n
35410 61 6d 65 29 20 46 52 4f 4d 20 73 71 6c 69 74 65  ame) FROM sqlite
35420 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20 20  _master".       
35430 20 20 20 20 20 20 22 20 57 48 45 52 45 20 74 79        " WHERE ty
35440 70 65 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 63  pe='table' AND c
35450 6f 61 6c 65 73 63 65 28 72 6f 6f 74 70 61 67 65  oalesce(rootpage
35460 2c 30 29 3e 31 22 0a 20 20 20 20 20 20 20 20 20  ,0)>1".         
35470 20 20 20 20 22 20 41 4e 44 20 6e 61 6d 65 20 4e      " AND name N
35480 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f  OT LIKE 'sqlite_
35490 25 27 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  %'".            
354a0 20 22 20 4f 52 44 45 52 20 42 59 20 31 20 63 6f   " ORDER BY 1 co
354b0 6c 6c 61 74 65 20 6e 6f 63 61 73 65 22 3b 0a 20  llate nocase";. 
354c0 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
354d0 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
354e0 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53  b, zSql, -1, &pS
354f0 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6e 69  tmt, 0);.    ini
35500 74 54 65 78 74 28 26 73 51 75 65 72 79 29 3b 0a  tText(&sQuery);.
35510 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 53      initText(&sS
35520 71 6c 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  ql);.    appendT
35530 65 78 74 28 26 73 53 71 6c 2c 20 22 57 49 54 48  ext(&sSql, "WITH
35540 20 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d   [sha3sum$query]
35550 28 61 2c 62 29 20 41 53 28 22 2c 30 29 3b 0a 20  (a,b) AS(",0);. 
35560 20 20 20 7a 53 65 70 20 3d 20 22 56 41 4c 55 45     zSep = "VALUE
35570 53 28 22 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  S(";.    while( 
35580 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69  SQLITE_ROW==sqli
35590 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 20  te3_step(pStmt) 
355a0 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
355b0 68 61 72 20 2a 7a 54 61 62 20 3d 20 28 63 6f 6e  har *zTab = (con
355c0 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
355d0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
355e0 6d 74 2c 30 29 3b 0a 20 20 20 20 20 20 69 66 28  mt,0);.      if(
355f0 20 7a 4c 69 6b 65 20 26 26 20 73 71 6c 69 74 65   zLike && sqlite
35600 33 5f 73 74 72 6c 69 6b 65 28 7a 4c 69 6b 65 2c  3_strlike(zLike,
35610 20 7a 54 61 62 2c 20 30 29 21 3d 30 20 29 20 63   zTab, 0)!=0 ) c
35620 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69  ontinue;.      i
35630 66 28 20 73 74 72 6e 63 6d 70 28 7a 54 61 62 2c  f( strncmp(zTab,
35640 20 22 73 71 6c 69 74 65 5f 22 2c 37 29 21 3d 30   "sqlite_",7)!=0
35650 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65   ){.        appe
35660 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 22  ndText(&sQuery,"
35670 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 22 2c  SELECT * FROM ",
35680 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70   0);.        app
35690 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c  endText(&sQuery,
356a0 7a 54 61 62 2c 27 22 27 29 3b 0a 20 20 20 20 20  zTab,'"');.     
356b0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
356c0 51 75 65 72 79 2c 22 20 4e 4f 54 20 49 4e 44 45  Query," NOT INDE
356d0 58 45 44 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20  XED;", 0);.     
356e0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
356f0 70 28 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f  p(zTab, "sqlite_
35700 6d 61 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20  master")==0 ){. 
35710 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
35720 74 28 26 73 51 75 65 72 79 2c 22 53 45 4c 45 43  t(&sQuery,"SELEC
35730 54 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f  T type,name,tbl_
35740 6e 61 6d 65 2c 73 71 6c 20 46 52 4f 4d 20 73 71  name,sql FROM sq
35750 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20  lite_master".   
35760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35770 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52 20          " ORDER 
35780 42 59 20 6e 61 6d 65 3b 22 2c 20 30 29 3b 0a 20  BY name;", 0);. 
35790 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
357a0 74 72 63 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c  trcmp(zTab, "sql
357b0 69 74 65 5f 73 65 71 75 65 6e 63 65 22 29 3d 3d  ite_sequence")==
357c0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70  0 ){.        app
357d0 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c  endText(&sQuery,
357e0 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 73 65 71  "SELECT name,seq
357f0 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71   FROM sqlite_seq
35800 75 65 6e 63 65 22 0a 20 20 20 20 20 20 20 20 20  uence".         
35810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35820 20 20 22 20 4f 52 44 45 52 20 42 59 20 6e 61 6d    " ORDER BY nam
35830 65 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  e;", 0);.      }
35840 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
35850 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f 73 74  zTab, "sqlite_st
35860 61 74 31 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  at1")==0 ){.    
35870 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
35880 73 51 75 65 72 79 2c 22 53 45 4c 45 43 54 20 74  sQuery,"SELECT t
35890 62 6c 2c 69 64 78 2c 73 74 61 74 20 46 52 4f 4d  bl,idx,stat FROM
358a0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 22 0a 20   sqlite_stat1". 
358b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358c0 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44 45            " ORDE
358d0 52 20 42 59 20 74 62 6c 2c 69 64 78 3b 22 2c 20  R BY tbl,idx;", 
358e0 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  0);.      }else 
358f0 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62 2c  if( strcmp(zTab,
35900 20 22 73 71 6c 69 74 65 5f 73 74 61 74 33 22 29   "sqlite_stat3")
35910 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
35920 20 7c 7c 20 73 74 72 63 6d 70 28 7a 54 61 62 2c   || strcmp(zTab,
35930 20 22 73 71 6c 69 74 65 5f 73 74 61 74 34 22 29   "sqlite_stat4")
35940 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
35950 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65 72  ppendText(&sQuer
35960 79 2c 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  y, "SELECT * FRO
35970 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  M ", 0);.       
35980 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75   appendText(&sQu
35990 65 72 79 2c 20 7a 54 61 62 2c 20 30 29 3b 0a 20  ery, zTab, 0);. 
359a0 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
359b0 74 28 26 73 51 75 65 72 79 2c 20 22 20 4f 52 44  t(&sQuery, " ORD
359c0 45 52 20 42 59 20 74 62 6c 2c 20 69 64 78 2c 20  ER BY tbl, idx, 
359d0 72 6f 77 69 64 3b 5c 6e 22 2c 20 30 29 3b 0a 20  rowid;\n", 0);. 
359e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70       }.      app
359f0 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a  endText(&sSql, z
35a00 53 65 70 2c 20 30 29 3b 0a 20 20 20 20 20 20 61  Sep, 0);.      a
35a10 70 70 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c  ppendText(&sSql,
35a20 20 73 51 75 65 72 79 2e 7a 2c 20 27 5c 27 27 29   sQuery.z, '\'')
35a30 3b 0a 20 20 20 20 20 20 73 51 75 65 72 79 2e 6e  ;.      sQuery.n
35a40 20 3d 20 30 3b 0a 20 20 20 20 20 20 61 70 70 65   = 0;.      appe
35a50 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 22 2c  ndText(&sSql, ",
35a60 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70  ", 0);.      app
35a70 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a  endText(&sSql, z
35a80 54 61 62 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20  Tab, '\'');.    
35a90 20 20 7a 53 65 70 20 3d 20 22 29 2c 28 22 3b 0a    zSep = "),(";.
35aa0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
35ab0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
35ac0 29 3b 0a 20 20 20 20 69 66 28 20 62 53 65 70 61  );.    if( bSepa
35ad0 72 61 74 65 20 29 7b 0a 20 20 20 20 20 20 7a 53  rate ){.      zS
35ae0 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
35af0 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20 20  intf(.          
35b00 22 25 73 29 29 22 0a 20 20 20 20 20 20 20 20 20  "%s))".         
35b10 20 22 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28   " SELECT lower(
35b20 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 61  hex(sha3_query(a
35b30 2c 25 64 29 29 29 20 41 53 20 68 61 73 68 2c 20  ,%d))) AS hash, 
35b40 62 20 41 53 20 6c 61 62 65 6c 22 0a 20 20 20 20  b AS label".    
35b50 20 20 20 20 20 20 22 20 20 20 46 52 4f 4d 20 5b        "   FROM [
35b60 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d 22 2c  sha3sum$query]",
35b70 0a 20 20 20 20 20 20 20 20 20 20 73 53 71 6c 2e  .          sSql.
35b80 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20 20 20 7d  z, iSize);.    }
35b90 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c  else{.      zSql
35ba0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
35bb0 74 66 28 0a 20 20 20 20 20 20 20 20 20 20 22 25  tf(.          "%
35bc0 73 29 29 22 0a 20 20 20 20 20 20 20 20 20 20 22  s))".          "
35bd0 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65   SELECT lower(he
35be0 78 28 73 68 61 33 5f 71 75 65 72 79 28 67 72 6f  x(sha3_query(gro
35bf0 75 70 5f 63 6f 6e 63 61 74 28 61 2c 27 27 29 2c  up_concat(a,''),
35c00 25 64 29 29 29 20 41 53 20 68 61 73 68 22 0a 20  %d))) AS hash". 
35c10 20 20 20 20 20 20 20 20 20 22 20 20 20 46 52 4f           "   FRO
35c20 4d 20 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79  M [sha3sum$query
35c30 5d 22 2c 0a 20 20 20 20 20 20 20 20 20 20 73 53  ]",.          sS
35c40 71 6c 2e 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20  ql.z, iSize);.  
35c50 20 20 7d 0a 20 20 20 20 66 72 65 65 54 65 78 74    }.    freeText
35c60 28 26 73 51 75 65 72 79 29 3b 0a 20 20 20 20 66  (&sQuery);.    f
35c70 72 65 65 54 65 78 74 28 26 73 53 71 6c 29 3b 0a  reeText(&sSql);.
35c80 20 20 20 20 69 66 28 20 62 44 65 62 75 67 20 29      if( bDebug )
35c90 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
35ca0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c  ntf(p->out, "%s\
35cb0 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 7d  n", zSql);.    }
35cc0 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 68 65 6c  else{.      shel
35cd0 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53  l_exec(p->db, zS
35ce0 71 6c 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61  ql, shell_callba
35cf0 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20 20 20 7d  ck, p, 0);.    }
35d00 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
35d10 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65  e(zSql);.  }else
35d20 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 0a 20  ..  if( c=='s'. 
35d30 20 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a    && (strncmp(az
35d40 41 72 67 5b 30 5d 2c 20 22 73 68 65 6c 6c 22 2c  Arg[0], "shell",
35d50 20 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d   n)==0 || strncm
35d60 70 28 61 7a 41 72 67 5b 30 5d 2c 22 73 79 73 74  p(azArg[0],"syst
35d70 65 6d 22 2c 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a  em",n)==0).  ){.
35d80 20 20 20 20 63 68 61 72 20 2a 7a 43 6d 64 3b 0a      char *zCmd;.
35d90 20 20 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20      int i, x;.  
35da0 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a    if( nArg<2 ){.
35db0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
35dc0 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
35dd0 20 2e 73 79 73 74 65 6d 20 43 4f 4d 4d 41 4e 44   .system COMMAND
35de0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
35df0 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
35e00 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
35e10 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 43 6d 64  ;.    }.    zCmd
35e20 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
35e30 74 66 28 73 74 72 63 68 72 28 61 7a 41 72 67 5b  tf(strchr(azArg[
35e40 31 5d 2c 27 20 27 29 3d 3d 30 3f 22 25 73 22 3a  1],' ')==0?"%s":
35e50 22 5c 22 25 73 5c 22 22 2c 20 61 7a 41 72 67 5b  "\"%s\"", azArg[
35e60 31 5d 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 32  1]);.    for(i=2
35e70 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
35e80 20 20 20 20 20 20 7a 43 6d 64 20 3d 20 73 71 6c        zCmd = sql
35e90 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 73 74 72  ite3_mprintf(str
35ea0 63 68 72 28 61 7a 41 72 67 5b 69 5d 2c 27 20 27  chr(azArg[i],' '
35eb0 29 3d 3d 30 3f 22 25 7a 20 25 73 22 3a 22 25 7a  )==0?"%z %s":"%z
35ec0 20 5c 22 25 73 5c 22 22 2c 0a 20 20 20 20 20 20   \"%s\"",.      
35ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ee0 20 20 20 20 20 20 20 7a 43 6d 64 2c 20 61 7a 41         zCmd, azA
35ef0 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  rg[i]);.    }.  
35f00 20 20 78 20 3d 20 73 79 73 74 65 6d 28 7a 43 6d    x = system(zCm
35f10 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  d);.    sqlite3_
35f20 66 72 65 65 28 7a 43 6d 64 29 3b 0a 20 20 20 20  free(zCmd);.    
35f30 69 66 28 20 78 20 29 20 72 61 77 5f 70 72 69 6e  if( x ) raw_prin
35f40 74 66 28 73 74 64 65 72 72 2c 20 22 53 79 73 74  tf(stderr, "Syst
35f50 65 6d 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72  em command retur
35f60 6e 73 20 25 64 5c 6e 22 2c 20 78 29 3b 0a 20 20  ns %d\n", x);.  
35f70 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
35f80 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  's' && strncmp(a
35f90 7a 41 72 67 5b 30 5d 2c 20 22 73 68 6f 77 22 2c  zArg[0], "show",
35fa0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74   n)==0 ){.    st
35fb0 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
35fc0 2a 61 7a 42 6f 6f 6c 5b 5d 20 3d 20 7b 20 22 6f  *azBool[] = { "o
35fd0 66 66 22 2c 20 22 6f 6e 22 2c 20 22 74 72 69 67  ff", "on", "trig
35fe0 67 65 72 22 2c 20 22 66 75 6c 6c 22 7d 3b 0a 20  ger", "full"};. 
35ff0 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 66     int i;.    if
36000 28 20 6e 41 72 67 21 3d 31 20 29 7b 0a 20 20 20  ( nArg!=1 ){.   
36010 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
36020 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73  derr, "Usage: .s
36030 68 6f 77 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  how\n");.      r
36040 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74  c = 1;.      got
36050 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
36060 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 75  xit;.    }.    u
36070 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
36080 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c  t, "%12.12s: %s\
36090 6e 22 2c 22 65 63 68 6f 22 2c 0a 20 20 20 20 20  n","echo",.     
360a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360b0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 42               azB
360c0 6f 6f 6c 5b 53 68 65 6c 6c 48 61 73 46 6c 61 67  ool[ShellHasFlag
360d0 28 70 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29 5d  (p, SHFLG_Echo)]
360e0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
360f0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e  tf(p->out, "%12.
36100 31 32 73 3a 20 25 73 5c 6e 22 2c 22 65 71 70 22  12s: %s\n","eqp"
36110 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 61 75 74 6f  , azBool[p->auto
36120 45 51 50 26 33 5d 29 3b 0a 20 20 20 20 75 74 66  EQP&3]);.    utf
36130 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
36140 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22   "%12.12s: %s\n"
36150 2c 22 65 78 70 6c 61 69 6e 22 2c 0a 20 20 20 20  ,"explain",.    
36160 20 20 20 20 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f       p->mode==MO
36170 44 45 5f 45 78 70 6c 61 69 6e 20 3f 20 22 6f 6e  DE_Explain ? "on
36180 22 20 3a 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61  " : p->autoExpla
36190 69 6e 20 3f 20 22 61 75 74 6f 22 20 3a 20 22 6f  in ? "auto" : "o
361a0 66 66 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  ff");.    utf8_p
361b0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31  rintf(p->out,"%1
361c0 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 68 65  2.12s: %s\n","he
361d0 61 64 65 72 73 22 2c 20 61 7a 42 6f 6f 6c 5b 70  aders", azBool[p
361e0 2d 3e 73 68 6f 77 48 65 61 64 65 72 21 3d 30 5d  ->showHeader!=0]
361f0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
36200 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e  tf(p->out, "%12.
36210 31 32 73 3a 20 25 73 5c 6e 22 2c 22 6d 6f 64 65  12s: %s\n","mode
36220 22 2c 20 6d 6f 64 65 44 65 73 63 72 5b 70 2d 3e  ", modeDescr[p->
36230 6d 6f 64 65 5d 29 3b 0a 20 20 20 20 75 74 66 38  mode]);.    utf8
36240 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
36250 22 25 31 32 2e 31 32 73 3a 20 22 2c 20 22 6e 75  "%12.12s: ", "nu
36260 6c 6c 76 61 6c 75 65 22 29 3b 0a 20 20 20 20 20  llvalue");.     
36270 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67   output_c_string
36280 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 6e 75 6c 6c  (p->out, p->null
36290 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 72 61  Value);.      ra
362a0 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
362b0 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66 38   "\n");.    utf8
362c0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
362d0 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22  %12.12s: %s\n","
362e0 6f 75 74 70 75 74 22 2c 0a 20 20 20 20 20 20 20  output",.       
362f0 20 20 20 20 20 73 74 72 6c 65 6e 33 30 28 70 2d       strlen30(p-
36300 3e 6f 75 74 66 69 6c 65 29 20 3f 20 70 2d 3e 6f  >outfile) ? p->o
36310 75 74 66 69 6c 65 20 3a 20 22 73 74 64 6f 75 74  utfile : "stdout
36320 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ");.    utf8_pri
36330 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e  ntf(p->out,"%12.
36340 31 32 73 3a 20 22 2c 20 22 63 6f 6c 73 65 70 61  12s: ", "colsepa
36350 72 61 74 6f 72 22 29 3b 0a 20 20 20 20 20 20 6f  rator");.      o
36360 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70  utput_c_string(p
36370 2d 3e 6f 75 74 2c 20 70 2d 3e 63 6f 6c 53 65 70  ->out, p->colSep
36380 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 72  arator);.      r
36390 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
363a0 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66  , "\n");.    utf
363b0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
363c0 22 25 31 32 2e 31 32 73 3a 20 22 2c 20 22 72 6f  "%12.12s: ", "ro
363d0 77 73 65 70 61 72 61 74 6f 72 22 29 3b 0a 20 20  wseparator");.  
363e0 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72      output_c_str
363f0 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 72  ing(p->out, p->r
36400 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
36410 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
36420 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20  ->out, "\n");.  
36430 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
36440 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20  >out, "%12.12s: 
36450 25 73 5c 6e 22 2c 22 73 74 61 74 73 22 2c 20 61  %s\n","stats", a
36460 7a 42 6f 6f 6c 5b 70 2d 3e 73 74 61 74 73 4f 6e  zBool[p->statsOn
36470 21 3d 30 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f  !=0]);.    utf8_
36480 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
36490 25 31 32 2e 31 32 73 3a 20 22 2c 20 22 77 69 64  %12.12s: ", "wid
364a0 74 68 22 29 3b 0a 20 20 20 20 66 6f 72 20 28 69  th");.    for (i
364b0 3d 30 3b 69 3c 28 69 6e 74 29 41 72 72 61 79 53  =0;i<(int)ArrayS
364c0 69 7a 65 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29  ize(p->colWidth)
364d0 20 26 26 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b   && p->colWidth[
364e0 69 5d 20 21 3d 20 30 3b 69 2b 2b 29 20 7b 0a 20  i] != 0;i++) {. 
364f0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
36500 70 2d 3e 6f 75 74 2c 20 22 25 64 20 22 2c 20 70  p->out, "%d ", p
36510 2d 3e 63 6f 6c 57 69 64 74 68 5b 69 5d 29 3b 0a  ->colWidth[i]);.
36520 20 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72      }.    raw_pr
36530 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
36540 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ");.    utf8_pri
36550 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32  ntf(p->out, "%12
36560 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 20 22 66 69  .12s: %s\n", "fi
36570 6c 65 6e 61 6d 65 22 2c 0a 20 20 20 20 20 20 20  lename",.       
36580 20 20 20 20 20 20 20 20 20 70 2d 3e 7a 44 62 46           p->zDbF
36590 69 6c 65 6e 61 6d 65 20 3f 20 70 2d 3e 7a 44 62  ilename ? p->zDb
365a0 46 69 6c 65 6e 61 6d 65 20 3a 20 22 22 29 3b 0a  Filename : "");.
365b0 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
365c0 3d 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70  =='s' && strncmp
365d0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 74 61 74  (azArg[0], "stat
365e0 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  s", n)==0 ){.   
365f0 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
36600 20 20 20 20 20 20 70 2d 3e 73 74 61 74 73 4f 6e        p->statsOn
36610 20 3d 20 28 75 38 29 62 6f 6f 6c 65 61 6e 56 61   = (u8)booleanVa
36620 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  lue(azArg[1]);. 
36630 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72     }else if( nAr
36640 67 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 64 69  g==1 ){.      di
36650 73 70 6c 61 79 5f 73 74 61 74 73 28 70 2d 3e 64  splay_stats(p->d
36660 62 2c 20 70 2c 20 30 29 3b 0a 20 20 20 20 7d 65  b, p, 0);.    }e
36670 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
36680 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
36690 73 61 67 65 3a 20 2e 73 74 61 74 73 20 3f 6f 6e  sage: .stats ?on
366a0 7c 6f 66 66 3f 5c 6e 22 29 3b 0a 20 20 20 20 20  |off?\n");.     
366b0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
366c0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 28 63   }else..  if( (c
366d0 3d 3d 27 74 27 20 26 26 20 6e 3e 31 20 26 26 20  =='t' && n>1 && 
366e0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
366f0 2c 20 22 74 61 62 6c 65 73 22 2c 20 6e 29 3d 3d  , "tables", n)==
36700 30 29 0a 20 20 20 7c 7c 20 28 63 3d 3d 27 69 27  0).   || (c=='i'
36710 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a 41   && (strncmp(azA
36720 72 67 5b 30 5d 2c 20 22 69 6e 64 69 63 65 73 22  rg[0], "indices"
36730 2c 20 6e 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  , n)==0.        
36740 20 20 20 20 20 20 20 20 20 7c 7c 20 73 74 72 6e           || strn
36750 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69  cmp(azArg[0], "i
36760 6e 64 65 78 65 73 22 2c 20 6e 29 3d 3d 30 29 20  ndexes", n)==0) 
36770 29 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ).  ){.    sqlit
36780 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
36790 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 52 65 73      char **azRes
367a0 75 6c 74 3b 0a 20 20 20 20 69 6e 74 20 6e 52 6f  ult;.    int nRo
367b0 77 2c 20 6e 41 6c 6c 6f 63 3b 0a 20 20 20 20 69  w, nAlloc;.    i
367c0 6e 74 20 69 69 3b 0a 20 20 20 20 53 68 65 6c 6c  nt ii;.    Shell
367d0 54 65 78 74 20 73 3b 0a 20 20 20 20 69 6e 69 74  Text s;.    init
367e0 54 65 78 74 28 26 73 29 3b 0a 20 20 20 20 6f 70  Text(&s);.    op
367f0 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20  en_db(p, 0);.   
36800 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
36810 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
36820 22 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65  "PRAGMA database
36830 5f 6c 69 73 74 22 2c 20 2d 31 2c 20 26 70 53 74  _list", -1, &pSt
36840 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  mt, 0);.    if( 
36850 72 63 20 29 20 72 65 74 75 72 6e 20 73 68 65 6c  rc ) return shel
36860 6c 44 61 74 61 62 61 73 65 45 72 72 6f 72 28 70  lDatabaseError(p
36870 2d 3e 64 62 29 3b 0a 0a 20 20 20 20 69 66 28 20  ->db);..    if( 
36880 6e 41 72 67 3e 32 20 26 26 20 63 3d 3d 27 69 27  nArg>2 && c=='i'
36890 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20   ){.      /* It 
368a0 69 73 20 61 6e 20 68 69 73 74 6f 72 69 63 61 6c  is an historical
368b0 20 61 63 63 69 64 65 6e 74 20 74 68 61 74 20 74   accident that t
368c0 68 65 20 2e 69 6e 64 65 78 65 73 20 63 6f 6d 6d  he .indexes comm
368d0 61 6e 64 20 73 68 6f 77 73 20 61 6e 20 65 72 72  and shows an err
368e0 6f 72 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e  or.      ** when
368f0 20 63 61 6c 6c 65 64 20 77 69 74 68 20 74 68 65   called with the
36900 20 77 72 6f 6e 67 20 6e 75 6d 62 65 72 20 6f 66   wrong number of
36910 20 61 72 67 75 6d 65 6e 74 73 20 77 68 65 72 65   arguments where
36920 61 73 20 74 68 65 20 2e 74 61 62 6c 65 73 0a 20  as the .tables. 
36930 20 20 20 20 20 2a 2a 20 63 6f 6d 6d 61 6e 64 20       ** command 
36940 64 6f 65 73 20 6e 6f 74 2e 20 2a 2f 0a 20 20 20  does not. */.   
36950 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
36960 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 69  derr, "Usage: .i
36970 6e 64 65 78 65 73 20 3f 4c 49 4b 45 2d 50 41 54  ndexes ?LIKE-PAT
36980 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20 20  TERN?\n");.     
36990 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
369a0 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
369b0 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
369c0 20 66 6f 72 28 69 69 3d 30 3b 20 73 71 6c 69 74   for(ii=0; sqlit
369d0 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d  e3_step(pStmt)==
369e0 53 51 4c 49 54 45 5f 52 4f 57 3b 20 69 69 2b 2b  SQLITE_ROW; ii++
369f0 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
36a00 68 61 72 20 2a 7a 44 62 4e 61 6d 65 20 3d 20 28  har *zDbName = (
36a10 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
36a20 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
36a30 70 53 74 6d 74 2c 20 31 29 3b 0a 20 20 20 20 20  pStmt, 1);.     
36a40 20 69 66 28 20 7a 44 62 4e 61 6d 65 3d 3d 30 20   if( zDbName==0 
36a50 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
36a60 20 20 69 66 28 20 73 2e 7a 20 26 26 20 73 2e 7a    if( s.z && s.z
36a70 5b 30 5d 20 29 20 61 70 70 65 6e 64 54 65 78 74  [0] ) appendText
36a80 28 26 73 2c 20 22 20 55 4e 49 4f 4e 20 41 4c 4c  (&s, " UNION ALL
36a90 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66   ", 0);.      if
36aa0 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  ( sqlite3_stricm
36ab0 70 28 7a 44 62 4e 61 6d 65 2c 20 22 6d 61 69 6e  p(zDbName, "main
36ac0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
36ad0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20   appendText(&s, 
36ae0 22 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  "SELECT name FRO
36af0 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  M ", 0);.      }
36b00 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 70  else{.        ap
36b10 70 65 6e 64 54 65 78 74 28 26 73 2c 20 22 53 45  pendText(&s, "SE
36b20 4c 45 43 54 20 22 2c 20 30 29 3b 0a 20 20 20 20  LECT ", 0);.    
36b30 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
36b40 73 2c 20 7a 44 62 4e 61 6d 65 2c 20 27 5c 27 27  s, zDbName, '\''
36b50 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
36b60 64 54 65 78 74 28 26 73 2c 20 22 7c 7c 27 2e 27  dText(&s, "||'.'
36b70 7c 7c 6e 61 6d 65 20 46 52 4f 4d 20 22 2c 20 30  ||name FROM ", 0
36b80 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
36b90 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20   appendText(&s, 
36ba0 7a 44 62 4e 61 6d 65 2c 20 27 22 27 29 3b 0a 20  zDbName, '"');. 
36bb0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
36bc0 26 73 2c 20 22 2e 73 71 6c 69 74 65 5f 6d 61 73  &s, ".sqlite_mas
36bd0 74 65 72 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  ter ", 0);.     
36be0 20 69 66 28 20 63 3d 3d 27 74 27 20 29 7b 0a 20   if( c=='t' ){. 
36bf0 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
36c00 74 28 26 73 2c 22 20 57 48 45 52 45 20 74 79 70  t(&s," WHERE typ
36c10 65 20 49 4e 20 28 27 74 61 62 6c 65 27 2c 27 76  e IN ('table','v
36c20 69 65 77 27 29 22 0a 20 20 20 20 20 20 20 20 20  iew')".         
36c30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
36c40 20 41 4e 44 20 6e 61 6d 65 20 4e 4f 54 20 4c 49   AND name NOT LI
36c50 4b 45 20 27 73 71 6c 69 74 65 5f 25 27 22 0a 20  KE 'sqlite_%'". 
36c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c70 20 20 20 20 20 22 20 20 20 41 4e 44 20 6e 61 6d       "   AND nam
36c80 65 20 4c 49 4b 45 20 3f 31 22 2c 20 30 29 3b 0a  e LIKE ?1", 0);.
36c90 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
36ca0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
36cb0 26 73 2c 22 20 57 48 45 52 45 20 74 79 70 65 3d  &s," WHERE type=
36cc0 27 69 6e 64 65 78 27 22 0a 20 20 20 20 20 20 20  'index'".       
36cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
36ce0 20 20 20 41 4e 44 20 74 62 6c 5f 6e 61 6d 65 20     AND tbl_name 
36cf0 4c 49 4b 45 20 3f 31 22 2c 20 30 29 3b 0a 20 20  LIKE ?1", 0);.  
36d00 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
36d10 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e  rc = sqlite3_fin
36d20 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
36d30 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c    appendText(&s,
36d40 20 22 20 4f 52 44 45 52 20 42 59 20 31 22 2c 20   " ORDER BY 1", 
36d50 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  0);.    rc = sql
36d60 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
36d70 70 2d 3e 64 62 2c 20 73 2e 7a 2c 20 2d 31 2c 20  p->db, s.z, -1, 
36d80 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  &pStmt, 0);.    
36d90 66 72 65 65 54 65 78 74 28 26 73 29 3b 0a 20 20  freeText(&s);.  
36da0 20 20 69 66 28 20 72 63 20 29 20 72 65 74 75 72    if( rc ) retur
36db0 6e 20 73 68 65 6c 6c 44 61 74 61 62 61 73 65 45  n shellDatabaseE
36dc0 72 72 6f 72 28 70 2d 3e 64 62 29 3b 0a 0a 20 20  rror(p->db);..  
36dd0 20 20 2f 2a 20 52 75 6e 20 74 68 65 20 53 51 4c    /* Run the SQL
36de0 20 73 74 61 74 65 6d 65 6e 74 20 70 72 65 70 61   statement prepa
36df0 72 65 64 20 62 79 20 74 68 65 20 61 62 6f 76 65  red by the above
36e00 20 62 6c 6f 63 6b 2e 20 53 74 6f 72 65 20 74 68   block. Store th
36e10 65 20 72 65 73 75 6c 74 73 0a 20 20 20 20 2a 2a  e results.    **
36e20 20 61 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20   as an array of 
36e30 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 73  nul-terminated s
36e40 74 72 69 6e 67 73 20 69 6e 20 61 7a 52 65 73 75  trings in azResu
36e50 6c 74 5b 5d 2e 20 20 2a 2f 0a 20 20 20 20 6e 52  lt[].  */.    nR
36e60 6f 77 20 3d 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b  ow = nAlloc = 0;
36e70 0a 20 20 20 20 61 7a 52 65 73 75 6c 74 20 3d 20  .    azResult = 
36e80 30 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e  0;.    if( nArg>
36e90 31 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  1 ){.      sqlit
36ea0 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74  e3_bind_text(pSt
36eb0 6d 74 2c 20 31 2c 20 61 7a 41 72 67 5b 31 5d 2c  mt, 1, azArg[1],
36ec0 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e   -1, SQLITE_TRAN
36ed0 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d 65 6c 73  SIENT);.    }els
36ee0 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
36ef0 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
36f00 2c 20 31 2c 20 22 25 22 2c 20 2d 31 2c 20 53 51  , 1, "%", -1, SQ
36f10 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
36f20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 73    }.    while( s
36f30 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
36f40 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  t)==SQLITE_ROW )
36f50 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 52 6f 77  {.      if( nRow
36f60 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  >=nAlloc ){.    
36f70 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 4e 65 77      char **azNew
36f80 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 32  ;.        int n2
36f90 20 3d 20 6e 41 6c 6c 6f 63 2a 32 20 2b 20 31 30   = nAlloc*2 + 10
36fa0 3b 0a 20 20 20 20 20 20 20 20 61 7a 4e 65 77 20  ;.        azNew 
36fb0 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f  = sqlite3_reallo
36fc0 63 36 34 28 61 7a 52 65 73 75 6c 74 2c 20 73 69  c64(azResult, si
36fd0 7a 65 6f 66 28 61 7a 52 65 73 75 6c 74 5b 30 5d  zeof(azResult[0]
36fe0 29 2a 6e 32 29 3b 0a 20 20 20 20 20 20 20 20 69  )*n2);.        i
36ff0 66 28 20 61 7a 4e 65 77 3d 3d 30 20 29 7b 0a 20  f( azNew==0 ){. 
37000 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 68           rc = sh
37010 65 6c 6c 4e 6f 6d 65 6d 45 72 72 6f 72 28 29 3b  ellNomemError();
37020 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
37030 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
37040 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e 32 3b      nAlloc = n2;
37050 0a 20 20 20 20 20 20 20 20 61 7a 52 65 73 75 6c  .        azResul
37060 74 20 3d 20 61 7a 4e 65 77 3b 0a 20 20 20 20 20  t = azNew;.     
37070 20 7d 0a 20 20 20 20 20 20 61 7a 52 65 73 75 6c   }.      azResul
37080 74 5b 6e 52 6f 77 5d 20 3d 20 73 71 6c 69 74 65  t[nRow] = sqlite
37090 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
370a0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
370b0 65 78 74 28 70 53 74 6d 74 2c 20 30 29 29 3b 0a  ext(pStmt, 0));.
370c0 20 20 20 20 20 20 69 66 28 20 30 3d 3d 61 7a 52        if( 0==azR
370d0 65 73 75 6c 74 5b 6e 52 6f 77 5d 20 29 7b 0a 20  esult[nRow] ){. 
370e0 20 20 20 20 20 20 20 72 63 20 3d 20 73 68 65 6c         rc = shel
370f0 6c 4e 6f 6d 65 6d 45 72 72 6f 72 28 29 3b 0a 20  lNomemError();. 
37100 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
37110 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 52 6f 77      }.      nRow
37120 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
37130 28 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  ( sqlite3_finali
37140 7a 65 28 70 53 74 6d 74 29 21 3d 53 51 4c 49 54  ze(pStmt)!=SQLIT
37150 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
37160 20 3d 20 73 68 65 6c 6c 44 61 74 61 62 61 73 65   = shellDatabase
37170 45 72 72 6f 72 28 70 2d 3e 64 62 29 3b 0a 20 20  Error(p->db);.  
37180 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 50 72 65 74    }..    /* Pret
37190 74 79 2d 70 72 69 6e 74 20 74 68 65 20 63 6f 6e  ty-print the con
371a0 74 65 6e 74 73 20 6f 66 20 61 72 72 61 79 20 61  tents of array a
371b0 7a 52 65 73 75 6c 74 5b 5d 20 74 6f 20 74 68 65  zResult[] to the
371c0 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 20 20 69   output */.    i
371d0 66 28 20 72 63 3d 3d 30 20 26 26 20 6e 52 6f 77  f( rc==0 && nRow
371e0 3e 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  >0 ){.      int 
371f0 6c 65 6e 2c 20 6d 61 78 6c 65 6e 20 3d 20 30 3b  len, maxlen = 0;
37200 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6a 3b  .      int i, j;
37210 0a 20 20 20 20 20 20 69 6e 74 20 6e 50 72 69 6e  .      int nPrin
37220 74 43 6f 6c 2c 20 6e 50 72 69 6e 74 52 6f 77 3b  tCol, nPrintRow;
37230 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
37240 69 3c 6e 52 6f 77 3b 20 69 2b 2b 29 7b 0a 20 20  i<nRow; i++){.  
37250 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 74 72 6c        len = strl
37260 65 6e 33 30 28 61 7a 52 65 73 75 6c 74 5b 69 5d  en30(azResult[i]
37270 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6c  );.        if( l
37280 65 6e 3e 6d 61 78 6c 65 6e 20 29 20 6d 61 78 6c  en>maxlen ) maxl
37290 65 6e 20 3d 20 6c 65 6e 3b 0a 20 20 20 20 20 20  en = len;.      
372a0 7d 0a 20 20 20 20 20 20 6e 50 72 69 6e 74 43 6f  }.      nPrintCo
372b0 6c 20 3d 20 38 30 2f 28 6d 61 78 6c 65 6e 2b 32  l = 80/(maxlen+2
372c0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 50 72  );.      if( nPr
372d0 69 6e 74 43 6f 6c 3c 31 20 29 20 6e 50 72 69 6e  intCol<1 ) nPrin
372e0 74 43 6f 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20  tCol = 1;.      
372f0 6e 50 72 69 6e 74 52 6f 77 20 3d 20 28 6e 52 6f  nPrintRow = (nRo
37300 77 20 2b 20 6e 50 72 69 6e 74 43 6f 6c 20 2d 20  w + nPrintCol - 
37310 31 29 2f 6e 50 72 69 6e 74 43 6f 6c 3b 0a 20 20  1)/nPrintCol;.  
37320 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
37330 50 72 69 6e 74 52 6f 77 3b 20 69 2b 2b 29 7b 0a  PrintRow; i++){.
37340 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 69 3b          for(j=i;
37350 20 6a 3c 6e 52 6f 77 3b 20 6a 2b 3d 6e 50 72 69   j<nRow; j+=nPri
37360 6e 74 52 6f 77 29 7b 0a 20 20 20 20 20 20 20 20  ntRow){.        
37370 20 20 63 68 61 72 20 2a 7a 53 70 20 3d 20 6a 3c    char *zSp = j<
37380 6e 50 72 69 6e 74 52 6f 77 20 3f 20 22 22 20 3a  nPrintRow ? "" :
37390 20 22 20 20 22 3b 0a 20 20 20 20 20 20 20 20 20   "  ";.         
373a0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
373b0 6f 75 74 2c 20 22 25 73 25 2d 2a 73 22 2c 20 7a  out, "%s%-*s", z
373c0 53 70 2c 20 6d 61 78 6c 65 6e 2c 0a 20 20 20 20  Sp, maxlen,.    
373d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373e0 20 20 61 7a 52 65 73 75 6c 74 5b 6a 5d 20 3f 20    azResult[j] ? 
373f0 61 7a 52 65 73 75 6c 74 5b 6a 5d 3a 22 22 29 3b  azResult[j]:"");
37400 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
37410 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
37420 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20  >out, "\n");.   
37430 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
37440 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 6e 52 6f  for(ii=0; ii<nRo
37450 77 3b 20 69 69 2b 2b 29 20 73 71 6c 69 74 65 33  w; ii++) sqlite3
37460 5f 66 72 65 65 28 61 7a 52 65 73 75 6c 74 5b 69  _free(azResult[i
37470 69 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  i]);.    sqlite3
37480 5f 66 72 65 65 28 61 7a 52 65 73 75 6c 74 29 3b  _free(azResult);
37490 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 42  .  }else..  /* B
374a0 65 67 69 6e 20 72 65 64 69 72 65 63 74 69 6e 67  egin redirecting
374b0 20 6f 75 74 70 75 74 20 74 6f 20 74 68 65 20 66   output to the f
374c0 69 6c 65 20 22 74 65 73 74 63 61 73 65 2d 6f 75  ile "testcase-ou
374d0 74 2e 74 78 74 22 20 2a 2f 0a 20 20 69 66 28 20  t.txt" */.  if( 
374e0 63 3d 3d 27 74 27 20 26 26 20 73 74 72 63 6d 70  c=='t' && strcmp
374f0 28 61 7a 41 72 67 5b 30 5d 2c 22 74 65 73 74 63  (azArg[0],"testc
37500 61 73 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ase")==0 ){.    
37510 6f 75 74 70 75 74 5f 72 65 73 65 74 28 70 29 3b  output_reset(p);
37520 0a 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 6f 75  .    p->out = ou
37530 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 22  tput_file_open("
37540 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74  testcase-out.txt
37550 22 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70  ", 0);.    if( p
37560 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ->out==0 ){.    
37570 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
37580 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 63 61 6e  err, "Error: can
37590 6e 6f 74 20 6f 70 65 6e 20 27 74 65 73 74 63 61  not open 'testca
375a0 73 65 2d 6f 75 74 2e 74 78 74 27 5c 6e 22 29 3b  se-out.txt'\n");
375b0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e  .    }.    if( n
375c0 41 72 67 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg>=2 ){.      
375d0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf