/ Hex Artifact Content
Login

Artifact bcde676be8aef998449e4fc8076c671257f41cbfe0cf39c87464b4558e6abf9a:


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 69 66 6e 64 65  .# endif.# ifnde
0d60: 66 20 75 6e 6c 69 6e 6b 0a 23 20 20 64 65 66 69  f unlink.#  defi
0d70: 6e 65 20 75 6e 6c 69 6e 6b 20 5f 75 6e 6c 69 6e  ne unlink _unlin
0d80: 6b 0a 23 20 65 6e 64 69 66 0a 23 20 75 6e 64 65  k.# endif.# unde
0d90: 66 20 70 6f 70 65 6e 0a 23 20 64 65 66 69 6e 65  f popen.# define
0da0: 20 70 6f 70 65 6e 20 5f 70 6f 70 65 6e 0a 23 20   popen _popen.# 
0db0: 75 6e 64 65 66 20 70 63 6c 6f 73 65 0a 23 20 64  undef pclose.# d
0dc0: 65 66 69 6e 65 20 70 63 6c 6f 73 65 20 5f 70 63  efine pclose _pc
0dd0: 6c 6f 73 65 0a 23 65 6c 73 65 0a 20 2f 2a 20 4d  lose.#else. /* M
0de0: 61 6b 65 20 73 75 72 65 20 69 73 61 74 74 79 28  ake sure isatty(
0df0: 29 20 68 61 73 20 61 20 70 72 6f 74 6f 74 79 70  ) has a prototyp
0e00: 65 2e 20 2a 2f 0a 20 65 78 74 65 72 6e 20 69 6e  e. */. extern in
0e10: 74 20 69 73 61 74 74 79 28 69 6e 74 29 3b 0a 0a  t isatty(int);..
0e20: 23 20 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f  # if !defined(__
0e30: 52 54 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e  RTP__) && !defin
0e40: 65 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a  ed(_WRS_KERNEL).
0e50: 20 20 2f 2a 20 70 6f 70 65 6e 20 61 6e 64 20 70    /* popen and p
0e60: 63 6c 6f 73 65 20 61 72 65 20 6e 6f 74 20 43 38  close are not C8
0e70: 39 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 20  9 functions and 
0e80: 73 6f 20 61 72 65 0a 20 20 2a 2a 20 73 6f 6d 65  so are.  ** some
0e90: 74 69 6d 65 73 20 6f 6d 69 74 74 65 64 20 66 72  times omitted fr
0ea0: 6f 6d 20 74 68 65 20 3c 73 74 64 69 6f 2e 68 3e  om the <stdio.h>
0eb0: 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 65 78   header */.   ex
0ec0: 74 65 72 6e 20 46 49 4c 45 20 2a 70 6f 70 65 6e  tern FILE *popen
0ed0: 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
0ee0: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 65 78  st char*);.   ex
0ef0: 74 65 72 6e 20 69 6e 74 20 70 63 6c 6f 73 65 28  tern int pclose(
0f00: 46 49 4c 45 2a 29 3b 0a 23 20 65 6c 73 65 0a 23  FILE*);.# else.#
0f10: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
0f20: 4f 4d 49 54 5f 50 4f 50 45 4e 20 31 0a 23 20 65  OMIT_POPEN 1.# e
0f30: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 23 69 66  ndif.#endif..#if
0f40: 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f   defined(_WIN32_
0f50: 57 43 45 29 0a 2f 2a 20 57 69 6e 64 6f 77 73 20  WCE)./* Windows 
0f60: 43 45 20 28 61 72 6d 2d 77 69 6e 63 65 2d 6d 69  CE (arm-wince-mi
0f70: 6e 67 77 33 32 63 65 2d 67 63 63 29 20 64 6f 65  ngw32ce-gcc) doe
0f80: 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 69 73  s not provide is
0f90: 61 74 74 79 28 29 0a 20 2a 20 74 68 75 73 20 77  atty(). * thus w
0fa0: 65 20 61 6c 77 61 79 73 20 61 73 73 75 6d 65 20  e always assume 
0fb0: 74 68 61 74 20 77 65 20 68 61 76 65 20 61 20 63  that we have a c
0fc0: 6f 6e 73 6f 6c 65 2e 20 54 68 61 74 20 63 61 6e  onsole. That can
0fd0: 20 62 65 0a 20 2a 20 6f 76 65 72 72 69 64 64 65   be. * overridde
0fe0: 6e 20 77 69 74 68 20 74 68 65 20 2d 62 61 74 63  n with the -batc
0ff0: 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  h command line o
1000: 70 74 69 6f 6e 2e 0a 20 2a 2f 0a 23 64 65 66 69  ption.. */.#defi
1010: 6e 65 20 69 73 61 74 74 79 28 78 29 20 31 0a 23  ne isatty(x) 1.#
1020: 65 6e 64 69 66 0a 0a 2f 2a 20 63 74 79 70 65 20  endif../* ctype 
1030: 6d 61 63 72 6f 73 20 74 68 61 74 20 77 6f 72 6b  macros that work
1040: 20 77 69 74 68 20 73 69 67 6e 65 64 20 63 68 61   with signed cha
1050: 72 61 63 74 65 72 73 20 2a 2f 0a 23 64 65 66 69  racters */.#defi
1060: 6e 65 20 49 73 53 70 61 63 65 28 58 29 20 20 69  ne IsSpace(X)  i
1070: 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
1080: 20 63 68 61 72 29 58 29 0a 23 64 65 66 69 6e 65   char)X).#define
1090: 20 49 73 44 69 67 69 74 28 58 29 20 20 69 73 64   IsDigit(X)  isd
10a0: 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
10b0: 68 61 72 29 58 29 0a 23 64 65 66 69 6e 65 20 54  har)X).#define T
10c0: 6f 4c 6f 77 65 72 28 58 29 20 20 28 63 68 61 72  oLower(X)  (char
10d0: 29 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e  )tolower((unsign
10e0: 65 64 20 63 68 61 72 29 58 29 0a 0a 23 69 66 20  ed char)X)..#if 
10f0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
1100: 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
1110: 29 0a 23 69 6e 63 6c 75 64 65 20 3c 77 69 6e 64  ).#include <wind
1120: 6f 77 73 2e 68 3e 0a 0a 2f 2a 20 73 74 72 69 6e  ows.h>../* strin
1130: 67 20 63 6f 6e 76 65 72 73 69 6f 6e 20 72 6f 75  g conversion rou
1140: 74 69 6e 65 73 20 6f 6e 6c 79 20 6e 65 65 64 65  tines only neede
1150: 64 20 6f 6e 20 57 69 6e 33 32 20 2a 2f 0a 65 78  d on Win32 */.ex
1160: 74 65 72 6e 20 63 68 61 72 20 2a 73 71 6c 69 74  tern char *sqlit
1170: 65 33 5f 77 69 6e 33 32 5f 75 6e 69 63 6f 64 65  e3_win32_unicode
1180: 5f 74 6f 5f 75 74 66 38 28 4c 50 43 57 53 54 52  _to_utf8(LPCWSTR
1190: 29 3b 0a 65 78 74 65 72 6e 20 63 68 61 72 20 2a  );.extern char *
11a0: 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 6d 62  sqlite3_win32_mb
11b0: 63 73 5f 74 6f 5f 75 74 66 38 5f 76 32 28 63 6f  cs_to_utf8_v2(co
11c0: 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
11d0: 3b 0a 65 78 74 65 72 6e 20 63 68 61 72 20 2a 73  ;.extern char *s
11e0: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74 66  qlite3_win32_utf
11f0: 38 5f 74 6f 5f 6d 62 63 73 5f 76 32 28 63 6f 6e  8_to_mbcs_v2(con
1200: 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
1210: 0a 65 78 74 65 72 6e 20 4c 50 57 53 54 52 20 73  .extern LPWSTR s
1220: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74 66  qlite3_win32_utf
1230: 38 5f 74 6f 5f 75 6e 69 63 6f 64 65 28 63 6f 6e  8_to_unicode(con
1240: 73 74 20 63 68 61 72 20 2a 7a 54 65 78 74 29 3b  st char *zText);
1250: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 6e 20 57  .#endif../* On W
1260: 69 6e 64 6f 77 73 2c 20 77 65 20 6e 6f 72 6d 61  indows, we norma
1270: 6c 6c 79 20 72 75 6e 20 77 69 74 68 20 6f 75 74  lly run with out
1280: 70 75 74 20 6d 6f 64 65 20 6f 66 20 54 45 58 54  put mode of TEXT
1290: 20 73 6f 20 74 68 61 74 20 5c 6e 20 63 68 61 72   so that \n char
12a0: 61 63 74 65 72 73 0a 2a 2a 20 61 72 65 20 61 75  acters.** are au
12b0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 74 72 61 6e  tomatically tran
12c0: 73 6c 61 74 65 64 20 69 6e 74 6f 20 5c 72 5c 6e  slated into \r\n
12d0: 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 69 73  .  However, this
12e0: 20 62 65 68 61 76 69 6f 72 20 6e 65 65 64 73 0a   behavior needs.
12f0: 2a 2a 20 74 6f 20 62 65 20 64 69 73 61 62 6c 65  ** to be disable
1300: 64 20 69 6e 20 73 6f 6d 65 20 63 61 73 65 73 20  d in some cases 
1310: 28 65 78 3a 20 77 68 65 6e 20 67 65 6e 65 72 61  (ex: when genera
1320: 74 69 6e 67 20 43 53 56 20 6f 75 74 70 75 74 20  ting CSV output 
1330: 61 6e 64 20 77 68 65 6e 0a 2a 2a 20 72 65 6e 64  and when.** rend
1340: 65 72 69 6e 67 20 71 75 6f 74 65 64 20 73 74 72  ering quoted str
1350: 69 6e 67 73 20 74 68 61 74 20 63 6f 6e 74 61 69  ings that contai
1360: 6e 20 5c 6e 20 63 68 61 72 61 63 74 65 72 73 29  n \n characters)
1370: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1380: 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 61 6b  .** routines tak
1390: 65 20 63 61 72 65 20 6f 66 20 74 68 61 74 2e 0a  e care of that..
13a0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
13b0: 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65  WIN32) || define
13c0: 64 28 57 49 4e 33 32 29 0a 73 74 61 74 69 63 20  d(WIN32).static 
13d0: 76 6f 69 64 20 73 65 74 42 69 6e 61 72 79 4d 6f  void setBinaryMo
13e0: 64 65 28 46 49 4c 45 20 2a 66 69 6c 65 2c 20 69  de(FILE *file, i
13f0: 6e 74 20 69 73 4f 75 74 70 75 74 29 7b 0a 20 20  nt isOutput){.  
1400: 69 66 28 20 69 73 4f 75 74 70 75 74 20 29 20 66  if( isOutput ) f
1410: 66 6c 75 73 68 28 66 69 6c 65 29 3b 0a 20 20 5f  flush(file);.  _
1420: 73 65 74 6d 6f 64 65 28 5f 66 69 6c 65 6e 6f 28  setmode(_fileno(
1430: 66 69 6c 65 29 2c 20 5f 4f 5f 42 49 4e 41 52 59  file), _O_BINARY
1440: 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  );.}.static void
1450: 20 73 65 74 54 65 78 74 4d 6f 64 65 28 46 49 4c   setTextMode(FIL
1460: 45 20 2a 66 69 6c 65 2c 20 69 6e 74 20 69 73 4f  E *file, int isO
1470: 75 74 70 75 74 29 7b 0a 20 20 69 66 28 20 69 73  utput){.  if( is
1480: 4f 75 74 70 75 74 20 29 20 66 66 6c 75 73 68 28  Output ) fflush(
1490: 66 69 6c 65 29 3b 0a 20 20 5f 73 65 74 6d 6f 64  file);.  _setmod
14a0: 65 28 5f 66 69 6c 65 6e 6f 28 66 69 6c 65 29 2c  e(_fileno(file),
14b0: 20 5f 4f 5f 54 45 58 54 29 3b 0a 7d 0a 23 65 6c   _O_TEXT);.}.#el
14c0: 73 65 0a 23 20 64 65 66 69 6e 65 20 73 65 74 42  se.# define setB
14d0: 69 6e 61 72 79 4d 6f 64 65 28 58 2c 59 29 0a 23  inaryMode(X,Y).#
14e0: 20 64 65 66 69 6e 65 20 73 65 74 54 65 78 74 4d   define setTextM
14f0: 6f 64 65 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a  ode(X,Y).#endif.
1500: 0a 0a 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65  ../* True if the
1510: 20 74 69 6d 65 72 20 69 73 20 65 6e 61 62 6c 65   timer is enable
1520: 64 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d */.static int 
1530: 65 6e 61 62 6c 65 54 69 6d 65 72 20 3d 20 30 3b  enableTimer = 0;
1540: 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 68 65 20  ../* Return the 
1550: 63 75 72 72 65 6e 74 20 77 61 6c 6c 2d 63 6c 6f  current wall-clo
1560: 63 6b 20 74 69 6d 65 20 2a 2f 0a 73 74 61 74 69  ck time */.stati
1570: 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  c sqlite3_int64 
1580: 74 69 6d 65 4f 66 44 61 79 28 76 6f 69 64 29 7b  timeOfDay(void){
1590: 0a 20 20 73 74 61 74 69 63 20 73 71 6c 69 74 65  .  static sqlite
15a0: 33 5f 76 66 73 20 2a 63 6c 6f 63 6b 56 66 73 20  3_vfs *clockVfs 
15b0: 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69  = 0;.  sqlite3_i
15c0: 6e 74 36 34 20 74 3b 0a 20 20 69 66 28 20 63 6c  nt64 t;.  if( cl
15d0: 6f 63 6b 56 66 73 3d 3d 30 20 29 20 63 6c 6f 63  ockVfs==0 ) cloc
15e0: 6b 56 66 73 20 3d 20 73 71 6c 69 74 65 33 5f 76  kVfs = sqlite3_v
15f0: 66 73 5f 66 69 6e 64 28 30 29 3b 0a 20 20 69 66  fs_find(0);.  if
1600: 28 20 63 6c 6f 63 6b 56 66 73 2d 3e 69 56 65 72  ( clockVfs->iVer
1610: 73 69 6f 6e 3e 3d 32 20 26 26 20 63 6c 6f 63 6b  sion>=2 && clock
1620: 56 66 73 2d 3e 78 43 75 72 72 65 6e 74 54 69 6d  Vfs->xCurrentTim
1630: 65 49 6e 74 36 34 21 3d 30 20 29 7b 0a 20 20 20  eInt64!=0 ){.   
1640: 20 63 6c 6f 63 6b 56 66 73 2d 3e 78 43 75 72 72   clockVfs->xCurr
1650: 65 6e 74 54 69 6d 65 49 6e 74 36 34 28 63 6c 6f  entTimeInt64(clo
1660: 63 6b 56 66 73 2c 20 26 74 29 3b 0a 20 20 7d 65  ckVfs, &t);.  }e
1670: 6c 73 65 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20  lse{.    double 
1680: 72 3b 0a 20 20 20 20 63 6c 6f 63 6b 56 66 73 2d  r;.    clockVfs-
1690: 3e 78 43 75 72 72 65 6e 74 54 69 6d 65 28 63 6c  >xCurrentTime(cl
16a0: 6f 63 6b 56 66 73 2c 20 26 72 29 3b 0a 20 20 20  ockVfs, &r);.   
16b0: 20 74 20 3d 20 28 73 71 6c 69 74 65 33 5f 69 6e   t = (sqlite3_in
16c0: 74 36 34 29 28 72 2a 38 36 34 30 30 30 30 30 2e  t64)(r*86400000.
16d0: 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  0);.  }.  return
16e0: 20 74 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69   t;.}..#if !defi
16f0: 6e 65 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21  ned(_WIN32) && !
1700: 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 20 26  defined(WIN32) &
1710: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 6d 69 6e  & !defined(__min
1720: 75 78 29 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79  ux).#include <sy
1730: 73 2f 74 69 6d 65 2e 68 3e 0a 23 69 6e 63 6c 75  s/time.h>.#inclu
1740: 64 65 20 3c 73 79 73 2f 72 65 73 6f 75 72 63 65  de <sys/resource
1750: 2e 68 3e 0a 0a 2f 2a 20 56 78 57 6f 72 6b 73 20  .h>../* VxWorks 
1760: 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
1770: 20 67 65 74 72 75 73 61 67 65 28 29 20 61 73 20   getrusage() as 
1780: 66 61 72 20 61 73 20 77 65 20 63 61 6e 20 64 65  far as we can de
1790: 74 65 72 6d 69 6e 65 20 2a 2f 0a 23 69 66 20 64  termine */.#if d
17a0: 65 66 69 6e 65 64 28 5f 57 52 53 5f 4b 45 52 4e  efined(_WRS_KERN
17b0: 45 4c 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  EL) || defined(_
17c0: 5f 52 54 50 5f 5f 29 0a 73 74 72 75 63 74 20 72  _RTP__).struct r
17d0: 75 73 61 67 65 20 7b 0a 20 20 73 74 72 75 63 74  usage {.  struct
17e0: 20 74 69 6d 65 76 61 6c 20 72 75 5f 75 74 69 6d   timeval ru_utim
17f0: 65 3b 20 2f 2a 20 75 73 65 72 20 43 50 55 20 74  e; /* user CPU t
1800: 69 6d 65 20 75 73 65 64 20 2a 2f 0a 20 20 73 74  ime used */.  st
1810: 72 75 63 74 20 74 69 6d 65 76 61 6c 20 72 75 5f  ruct timeval ru_
1820: 73 74 69 6d 65 3b 20 2f 2a 20 73 79 73 74 65 6d  stime; /* system
1830: 20 43 50 55 20 74 69 6d 65 20 75 73 65 64 20 2a   CPU time used *
1840: 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 67 65 74  /.};.#define get
1850: 72 75 73 61 67 65 28 41 2c 42 29 20 6d 65 6d 73  rusage(A,B) mems
1860: 65 74 28 42 2c 30 2c 73 69 7a 65 6f 66 28 2a 42  et(B,0,sizeof(*B
1870: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 53 61  )).#endif../* Sa
1880: 76 65 64 20 72 65 73 6f 75 72 63 65 20 69 6e 66  ved resource inf
1890: 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  ormation for the
18a0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 6e   beginning of an
18b0: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 73 74   operation */.st
18c0: 61 74 69 63 20 73 74 72 75 63 74 20 72 75 73 61  atic struct rusa
18d0: 67 65 20 73 42 65 67 69 6e 3b 20 20 2f 2a 20 43  ge sBegin;  /* C
18e0: 50 55 20 74 69 6d 65 20 61 74 20 73 74 61 72 74  PU time at start
18f0: 20 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74   */.static sqlit
1900: 65 33 5f 69 6e 74 36 34 20 69 42 65 67 69 6e 3b  e3_int64 iBegin;
1910: 20 20 2f 2a 20 57 61 6c 6c 2d 63 6c 6f 63 6b 20    /* Wall-clock 
1920: 74 69 6d 65 20 61 74 20 73 74 61 72 74 20 2a 2f  time at start */
1930: 0a 0a 2f 2a 0a 2a 2a 20 42 65 67 69 6e 20 74 69  ../*.** Begin ti
1940: 6d 69 6e 67 20 61 6e 20 6f 70 65 72 61 74 69 6f  ming an operatio
1950: 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  n.*/.static void
1960: 20 62 65 67 69 6e 54 69 6d 65 72 28 76 6f 69 64   beginTimer(void
1970: 29 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54  ){.  if( enableT
1980: 69 6d 65 72 20 29 7b 0a 20 20 20 20 67 65 74 72  imer ){.    getr
1990: 75 73 61 67 65 28 52 55 53 41 47 45 5f 53 45 4c  usage(RUSAGE_SEL
19a0: 46 2c 20 26 73 42 65 67 69 6e 29 3b 0a 20 20 20  F, &sBegin);.   
19b0: 20 69 42 65 67 69 6e 20 3d 20 74 69 6d 65 4f 66   iBegin = timeOf
19c0: 44 61 79 28 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  Day();.  }.}../*
19d0: 20 52 65 74 75 72 6e 20 74 68 65 20 64 69 66 66   Return the diff
19e0: 65 72 65 6e 63 65 20 6f 66 20 74 77 6f 20 74 69  erence of two ti
19f0: 6d 65 5f 73 74 72 75 63 74 73 20 69 6e 20 73 65  me_structs in se
1a00: 63 6f 6e 64 73 20 2a 2f 0a 73 74 61 74 69 63 20  conds */.static 
1a10: 64 6f 75 62 6c 65 20 74 69 6d 65 44 69 66 66 28  double timeDiff(
1a20: 73 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20 2a  struct timeval *
1a30: 70 53 74 61 72 74 2c 20 73 74 72 75 63 74 20 74  pStart, struct t
1a40: 69 6d 65 76 61 6c 20 2a 70 45 6e 64 29 7b 0a 20  imeval *pEnd){. 
1a50: 20 72 65 74 75 72 6e 20 28 70 45 6e 64 2d 3e 74   return (pEnd->t
1a60: 76 5f 75 73 65 63 20 2d 20 70 53 74 61 72 74 2d  v_usec - pStart-
1a70: 3e 74 76 5f 75 73 65 63 29 2a 30 2e 30 30 30 30  >tv_usec)*0.0000
1a80: 30 31 20 2b 0a 20 20 20 20 20 20 20 20 20 28 64  01 +.         (d
1a90: 6f 75 62 6c 65 29 28 70 45 6e 64 2d 3e 74 76 5f  ouble)(pEnd->tv_
1aa0: 73 65 63 20 2d 20 70 53 74 61 72 74 2d 3e 74 76  sec - pStart->tv
1ab0: 5f 73 65 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  _sec);.}../*.** 
1ac0: 50 72 69 6e 74 20 74 68 65 20 74 69 6d 69 6e 67  Print the timing
1ad0: 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 73 74 61   results..*/.sta
1ae0: 74 69 63 20 76 6f 69 64 20 65 6e 64 54 69 6d 65  tic void endTime
1af0: 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20 65  r(void){.  if( e
1b00: 6e 61 62 6c 65 54 69 6d 65 72 20 29 7b 0a 20 20  nableTimer ){.  
1b10: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1b20: 69 45 6e 64 20 3d 20 74 69 6d 65 4f 66 44 61 79  iEnd = timeOfDay
1b30: 28 29 3b 0a 20 20 20 20 73 74 72 75 63 74 20 72  ();.    struct r
1b40: 75 73 61 67 65 20 73 45 6e 64 3b 0a 20 20 20 20  usage sEnd;.    
1b50: 67 65 74 72 75 73 61 67 65 28 52 55 53 41 47 45  getrusage(RUSAGE
1b60: 5f 53 45 4c 46 2c 20 26 73 45 6e 64 29 3b 0a 20  _SELF, &sEnd);. 
1b70: 20 20 20 70 72 69 6e 74 66 28 22 52 75 6e 20 54     printf("Run T
1b80: 69 6d 65 3a 20 72 65 61 6c 20 25 2e 33 66 20 75  ime: real %.3f u
1b90: 73 65 72 20 25 66 20 73 79 73 20 25 66 5c 6e 22  ser %f sys %f\n"
1ba0: 2c 0a 20 20 20 20 20 20 20 28 69 45 6e 64 20 2d  ,.       (iEnd -
1bb0: 20 69 42 65 67 69 6e 29 2a 30 2e 30 30 31 2c 0a   iBegin)*0.001,.
1bc0: 20 20 20 20 20 20 20 74 69 6d 65 44 69 66 66 28         timeDiff(
1bd0: 26 73 42 65 67 69 6e 2e 72 75 5f 75 74 69 6d 65  &sBegin.ru_utime
1be0: 2c 20 26 73 45 6e 64 2e 72 75 5f 75 74 69 6d 65  , &sEnd.ru_utime
1bf0: 29 2c 0a 20 20 20 20 20 20 20 74 69 6d 65 44 69  ),.       timeDi
1c00: 66 66 28 26 73 42 65 67 69 6e 2e 72 75 5f 73 74  ff(&sBegin.ru_st
1c10: 69 6d 65 2c 20 26 73 45 6e 64 2e 72 75 5f 73 74  ime, &sEnd.ru_st
1c20: 69 6d 65 29 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 64  ime));.  }.}..#d
1c30: 65 66 69 6e 65 20 42 45 47 49 4e 5f 54 49 4d 45  efine BEGIN_TIME
1c40: 52 20 62 65 67 69 6e 54 69 6d 65 72 28 29 0a 23  R beginTimer().#
1c50: 64 65 66 69 6e 65 20 45 4e 44 5f 54 49 4d 45 52  define END_TIMER
1c60: 20 65 6e 64 54 69 6d 65 72 28 29 0a 23 64 65 66   endTimer().#def
1c70: 69 6e 65 20 48 41 53 5f 54 49 4d 45 52 20 31 0a  ine HAS_TIMER 1.
1c80: 0a 23 65 6c 69 66 20 28 64 65 66 69 6e 65 64 28  .#elif (defined(
1c90: 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e  _WIN32) || defin
1ca0: 65 64 28 57 49 4e 33 32 29 29 0a 0a 2f 2a 20 53  ed(WIN32))../* S
1cb0: 61 76 65 64 20 72 65 73 6f 75 72 63 65 20 69 6e  aved resource in
1cc0: 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68  formation for th
1cd0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61  e beginning of a
1ce0: 6e 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 73  n operation */.s
1cf0: 74 61 74 69 63 20 48 41 4e 44 4c 45 20 68 50 72  tatic HANDLE hPr
1d00: 6f 63 65 73 73 3b 0a 73 74 61 74 69 63 20 46 49  ocess;.static FI
1d10: 4c 45 54 49 4d 45 20 66 74 4b 65 72 6e 65 6c 42  LETIME ftKernelB
1d20: 65 67 69 6e 3b 0a 73 74 61 74 69 63 20 46 49 4c  egin;.static FIL
1d30: 45 54 49 4d 45 20 66 74 55 73 65 72 42 65 67 69  ETIME ftUserBegi
1d40: 6e 3b 0a 73 74 61 74 69 63 20 73 71 6c 69 74 65  n;.static sqlite
1d50: 33 5f 69 6e 74 36 34 20 66 74 57 61 6c 6c 42 65  3_int64 ftWallBe
1d60: 67 69 6e 3b 0a 74 79 70 65 64 65 66 20 42 4f 4f  gin;.typedef BOO
1d70: 4c 20 28 57 49 4e 41 50 49 20 2a 47 45 54 50 52  L (WINAPI *GETPR
1d80: 4f 43 54 49 4d 45 53 29 28 48 41 4e 44 4c 45 2c  OCTIMES)(HANDLE,
1d90: 20 4c 50 46 49 4c 45 54 49 4d 45 2c 20 4c 50 46   LPFILETIME, LPF
1da0: 49 4c 45 54 49 4d 45 2c 0a 20 20 20 20 20 20 20  ILETIME,.       
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 50 46               LPF
1dd0: 49 4c 45 54 49 4d 45 2c 20 4c 50 46 49 4c 45 54  ILETIME, LPFILET
1de0: 49 4d 45 29 3b 0a 73 74 61 74 69 63 20 47 45 54  IME);.static GET
1df0: 50 52 4f 43 54 49 4d 45 53 20 67 65 74 50 72 6f  PROCTIMES getPro
1e00: 63 65 73 73 54 69 6d 65 73 41 64 64 72 20 3d 20  cessTimesAddr = 
1e10: 4e 55 4c 4c 3b 0a 0a 2f 2a 0a 2a 2a 20 43 68 65  NULL;../*.** Che
1e20: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20  ck to see if we 
1e30: 68 61 76 65 20 74 69 6d 65 72 20 73 75 70 70 6f  have timer suppo
1e40: 72 74 2e 20 20 52 65 74 75 72 6e 20 31 20 69 66  rt.  Return 1 if
1e50: 20 6e 65 63 65 73 73 61 72 79 0a 2a 2a 20 73 75   necessary.** su
1e60: 70 70 6f 72 74 20 66 6f 75 6e 64 20 28 6f 72 20  pport found (or 
1e70: 66 6f 75 6e 64 20 70 72 65 76 69 6f 75 73 6c 79  found previously
1e80: 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  )..*/.static int
1e90: 20 68 61 73 54 69 6d 65 72 28 76 6f 69 64 29 7b   hasTimer(void){
1ea0: 0a 20 20 69 66 28 20 67 65 74 50 72 6f 63 65 73  .  if( getProces
1eb0: 73 54 69 6d 65 73 41 64 64 72 20 29 7b 0a 20 20  sTimesAddr ){.  
1ec0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 20    return 1;.  } 
1ed0: 65 6c 73 65 20 7b 0a 20 20 20 20 2f 2a 20 47 65  else {.    /* Ge
1ee0: 74 50 72 6f 63 65 73 73 54 69 6d 65 73 28 29 20  tProcessTimes() 
1ef0: 69 73 6e 27 74 20 73 75 70 70 6f 72 74 65 64 20  isn't supported 
1f00: 69 6e 20 57 49 4e 39 35 20 61 6e 64 20 73 6f 6d  in WIN95 and som
1f10: 65 20 6f 74 68 65 72 20 57 69 6e 64 6f 77 73 0a  e other Windows.
1f20: 20 20 20 20 2a 2a 20 76 65 72 73 69 6f 6e 73 2e      ** versions.
1f30: 20 53 65 65 20 69 66 20 74 68 65 20 76 65 72 73   See if the vers
1f40: 69 6f 6e 20 77 65 20 61 72 65 20 72 75 6e 6e 69  ion we are runni
1f50: 6e 67 20 6f 6e 20 68 61 73 20 69 74 2c 20 61 6e  ng on has it, an
1f60: 64 20 69 66 20 69 74 0a 20 20 20 20 2a 2a 20 64  d if it.    ** d
1f70: 6f 65 73 2c 20 73 61 76 65 20 6f 66 66 20 61 20  oes, save off a 
1f80: 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 20 61 6e  pointer to it an
1f90: 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  d the current pr
1fa0: 6f 63 65 73 73 20 68 61 6e 64 6c 65 2e 0a 20 20  ocess handle..  
1fb0: 20 20 2a 2f 0a 20 20 20 20 68 50 72 6f 63 65 73    */.    hProces
1fc0: 73 20 3d 20 47 65 74 43 75 72 72 65 6e 74 50 72  s = GetCurrentPr
1fd0: 6f 63 65 73 73 28 29 3b 0a 20 20 20 20 69 66 28  ocess();.    if(
1fe0: 20 68 50 72 6f 63 65 73 73 20 29 7b 0a 20 20 20   hProcess ){.   
1ff0: 20 20 20 48 49 4e 53 54 41 4e 43 45 20 68 69 6e     HINSTANCE hin
2000: 73 74 4c 69 62 20 3d 20 4c 6f 61 64 4c 69 62 72  stLib = LoadLibr
2010: 61 72 79 28 54 45 58 54 28 22 4b 65 72 6e 65 6c  ary(TEXT("Kernel
2020: 33 32 2e 64 6c 6c 22 29 29 3b 0a 20 20 20 20 20  32.dll"));.     
2030: 20 69 66 28 20 4e 55 4c 4c 20 21 3d 20 68 69 6e   if( NULL != hin
2040: 73 74 4c 69 62 20 29 7b 0a 20 20 20 20 20 20 20  stLib ){.       
2050: 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73   getProcessTimes
2060: 41 64 64 72 20 3d 0a 20 20 20 20 20 20 20 20 20  Addr =.         
2070: 20 20 20 28 47 45 54 50 52 4f 43 54 49 4d 45 53     (GETPROCTIMES
2080: 29 20 47 65 74 50 72 6f 63 41 64 64 72 65 73 73  ) GetProcAddress
2090: 28 68 69 6e 73 74 4c 69 62 2c 20 22 47 65 74 50  (hinstLib, "GetP
20a0: 72 6f 63 65 73 73 54 69 6d 65 73 22 29 3b 0a 20  rocessTimes");. 
20b0: 20 20 20 20 20 20 20 69 66 28 20 4e 55 4c 4c 20         if( NULL 
20c0: 21 3d 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d  != getProcessTim
20d0: 65 73 41 64 64 72 20 29 7b 0a 20 20 20 20 20 20  esAddr ){.      
20e0: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
20f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2100: 46 72 65 65 4c 69 62 72 61 72 79 28 68 69 6e 73  FreeLibrary(hins
2110: 74 4c 69 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  tLib);.      }. 
2120: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
2130: 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 42 65  n 0;.}../*.** Be
2140: 67 69 6e 20 74 69 6d 69 6e 67 20 61 6e 20 6f 70  gin timing an op
2150: 65 72 61 74 69 6f 6e 0a 2a 2f 0a 73 74 61 74 69  eration.*/.stati
2160: 63 20 76 6f 69 64 20 62 65 67 69 6e 54 69 6d 65  c void beginTime
2170: 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20 65  r(void){.  if( e
2180: 6e 61 62 6c 65 54 69 6d 65 72 20 26 26 20 67 65  nableTimer && ge
2190: 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64  tProcessTimesAdd
21a0: 72 20 29 7b 0a 20 20 20 20 46 49 4c 45 54 49 4d  r ){.    FILETIM
21b0: 45 20 66 74 43 72 65 61 74 69 6f 6e 2c 20 66 74  E ftCreation, ft
21c0: 45 78 69 74 3b 0a 20 20 20 20 67 65 74 50 72 6f  Exit;.    getPro
21d0: 63 65 73 73 54 69 6d 65 73 41 64 64 72 28 68 50  cessTimesAddr(hP
21e0: 72 6f 63 65 73 73 2c 26 66 74 43 72 65 61 74 69  rocess,&ftCreati
21f0: 6f 6e 2c 26 66 74 45 78 69 74 2c 0a 20 20 20 20  on,&ftExit,.    
2200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2210: 20 20 20 20 26 66 74 4b 65 72 6e 65 6c 42 65 67      &ftKernelBeg
2220: 69 6e 2c 26 66 74 55 73 65 72 42 65 67 69 6e 29  in,&ftUserBegin)
2230: 3b 0a 20 20 20 20 66 74 57 61 6c 6c 42 65 67 69  ;.    ftWallBegi
2240: 6e 20 3d 20 74 69 6d 65 4f 66 44 61 79 28 29 3b  n = timeOfDay();
2250: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72  .  }.}../* Retur
2260: 6e 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65  n the difference
2270: 20 6f 66 20 74 77 6f 20 46 49 4c 45 54 49 4d 45   of two FILETIME
2280: 20 73 74 72 75 63 74 73 20 69 6e 20 73 65 63 6f   structs in seco
2290: 6e 64 73 20 2a 2f 0a 73 74 61 74 69 63 20 64 6f  nds */.static do
22a0: 75 62 6c 65 20 74 69 6d 65 44 69 66 66 28 46 49  uble timeDiff(FI
22b0: 4c 45 54 49 4d 45 20 2a 70 53 74 61 72 74 2c 20  LETIME *pStart, 
22c0: 46 49 4c 45 54 49 4d 45 20 2a 70 45 6e 64 29 7b  FILETIME *pEnd){
22d0: 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
22e0: 69 36 34 53 74 61 72 74 20 3d 20 2a 28 28 73 71  i64Start = *((sq
22f0: 6c 69 74 65 5f 69 6e 74 36 34 20 2a 29 20 70 53  lite_int64 *) pS
2300: 74 61 72 74 29 3b 0a 20 20 73 71 6c 69 74 65 5f  tart);.  sqlite_
2310: 69 6e 74 36 34 20 69 36 34 45 6e 64 20 3d 20 2a  int64 i64End = *
2320: 28 28 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a  ((sqlite_int64 *
2330: 29 20 70 45 6e 64 29 3b 0a 20 20 72 65 74 75 72  ) pEnd);.  retur
2340: 6e 20 28 64 6f 75 62 6c 65 29 20 28 28 69 36 34  n (double) ((i64
2350: 45 6e 64 20 2d 20 69 36 34 53 74 61 72 74 29 20  End - i64Start) 
2360: 2f 20 31 30 30 30 30 30 30 30 2e 30 29 3b 0a 7d  / 10000000.0);.}
2370: 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68  ../*.** Print th
2380: 65 20 74 69 6d 69 6e 67 20 72 65 73 75 6c 74 73  e timing results
2390: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
23a0: 20 65 6e 64 54 69 6d 65 72 28 76 6f 69 64 29 7b   endTimer(void){
23b0: 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69 6d  .  if( enableTim
23c0: 65 72 20 26 26 20 67 65 74 50 72 6f 63 65 73 73  er && getProcess
23d0: 54 69 6d 65 73 41 64 64 72 29 7b 0a 20 20 20 20  TimesAddr){.    
23e0: 46 49 4c 45 54 49 4d 45 20 66 74 43 72 65 61 74  FILETIME ftCreat
23f0: 69 6f 6e 2c 20 66 74 45 78 69 74 2c 20 66 74 4b  ion, ftExit, ftK
2400: 65 72 6e 65 6c 45 6e 64 2c 20 66 74 55 73 65 72  ernelEnd, ftUser
2410: 45 6e 64 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  End;.    sqlite3
2420: 5f 69 6e 74 36 34 20 66 74 57 61 6c 6c 45 6e 64  _int64 ftWallEnd
2430: 20 3d 20 74 69 6d 65 4f 66 44 61 79 28 29 3b 0a   = timeOfDay();.
2440: 20 20 20 20 67 65 74 50 72 6f 63 65 73 73 54 69      getProcessTi
2450: 6d 65 73 41 64 64 72 28 68 50 72 6f 63 65 73 73  mesAddr(hProcess
2460: 2c 26 66 74 43 72 65 61 74 69 6f 6e 2c 26 66 74  ,&ftCreation,&ft
2470: 45 78 69 74 2c 26 66 74 4b 65 72 6e 65 6c 45 6e  Exit,&ftKernelEn
2480: 64 2c 26 66 74 55 73 65 72 45 6e 64 29 3b 0a 20  d,&ftUserEnd);. 
2490: 20 20 20 70 72 69 6e 74 66 28 22 52 75 6e 20 54     printf("Run T
24a0: 69 6d 65 3a 20 72 65 61 6c 20 25 2e 33 66 20 75  ime: real %.3f u
24b0: 73 65 72 20 25 66 20 73 79 73 20 25 66 5c 6e 22  ser %f sys %f\n"
24c0: 2c 0a 20 20 20 20 20 20 20 28 66 74 57 61 6c 6c  ,.       (ftWall
24d0: 45 6e 64 20 2d 20 66 74 57 61 6c 6c 42 65 67 69  End - ftWallBegi
24e0: 6e 29 2a 30 2e 30 30 31 2c 0a 20 20 20 20 20 20  n)*0.001,.      
24f0: 20 74 69 6d 65 44 69 66 66 28 26 66 74 55 73 65   timeDiff(&ftUse
2500: 72 42 65 67 69 6e 2c 20 26 66 74 55 73 65 72 45  rBegin, &ftUserE
2510: 6e 64 29 2c 0a 20 20 20 20 20 20 20 74 69 6d 65  nd),.       time
2520: 44 69 66 66 28 26 66 74 4b 65 72 6e 65 6c 42 65  Diff(&ftKernelBe
2530: 67 69 6e 2c 20 26 66 74 4b 65 72 6e 65 6c 45 6e  gin, &ftKernelEn
2540: 64 29 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 64 65 66  d));.  }.}..#def
2550: 69 6e 65 20 42 45 47 49 4e 5f 54 49 4d 45 52 20  ine BEGIN_TIMER 
2560: 62 65 67 69 6e 54 69 6d 65 72 28 29 0a 23 64 65  beginTimer().#de
2570: 66 69 6e 65 20 45 4e 44 5f 54 49 4d 45 52 20 65  fine END_TIMER e
2580: 6e 64 54 69 6d 65 72 28 29 0a 23 64 65 66 69 6e  ndTimer().#defin
2590: 65 20 48 41 53 5f 54 49 4d 45 52 20 68 61 73 54  e HAS_TIMER hasT
25a0: 69 6d 65 72 28 29 0a 0a 23 65 6c 73 65 0a 23 64  imer()..#else.#d
25b0: 65 66 69 6e 65 20 42 45 47 49 4e 5f 54 49 4d 45  efine BEGIN_TIME
25c0: 52 0a 23 64 65 66 69 6e 65 20 45 4e 44 5f 54 49  R.#define END_TI
25d0: 4d 45 52 0a 23 64 65 66 69 6e 65 20 48 41 53 5f  MER.#define HAS_
25e0: 54 49 4d 45 52 20 30 0a 23 65 6e 64 69 66 0a 0a  TIMER 0.#endif..
25f0: 2f 2a 0a 2a 2a 20 55 73 65 64 20 74 6f 20 70 72  /*.** Used to pr
2600: 65 76 65 6e 74 20 77 61 72 6e 69 6e 67 73 20 61  event warnings a
2610: 62 6f 75 74 20 75 6e 75 73 65 64 20 70 61 72 61  bout unused para
2620: 6d 65 74 65 72 73 0a 2a 2f 0a 23 64 65 66 69 6e  meters.*/.#defin
2630: 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  e UNUSED_PARAMET
2640: 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a  ER(x) (void)(x).
2650: 0a 2f 2a 0a 2a 2a 20 4e 75 6d 62 65 72 20 6f 66  ./*.** Number of
2660: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 6e 20   elements in an 
2670: 61 72 72 61 79 0a 2a 2f 0a 23 64 65 66 69 6e 65  array.*/.#define
2680: 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 28   ArraySize(X)  (
2690: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
26a0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 0a 0a 2f 2a  izeof(X[0]))../*
26b0: 0a 2a 2a 20 49 66 20 74 68 65 20 66 6f 6c 6c 6f  .** If the follo
26c0: 77 69 6e 67 20 66 6c 61 67 20 69 73 20 73 65 74  wing flag is set
26d0: 2c 20 74 68 65 6e 20 63 6f 6d 6d 61 6e 64 20 65  , then command e
26e0: 78 65 63 75 74 69 6f 6e 20 73 74 6f 70 73 0a 2a  xecution stops.*
26f0: 2a 20 61 74 20 61 6e 20 65 72 72 6f 72 20 69 66  * at an error if
2700: 20 77 65 20 61 72 65 20 6e 6f 74 20 69 6e 74 65   we are not inte
2710: 72 61 63 74 69 76 65 2e 0a 2a 2f 0a 73 74 61 74  ractive..*/.stat
2720: 69 63 20 69 6e 74 20 62 61 69 6c 5f 6f 6e 5f 65  ic int bail_on_e
2730: 72 72 6f 72 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a  rror = 0;../*.**
2740: 20 54 68 72 65 61 74 20 73 74 64 69 6e 20 61 73   Threat stdin as
2750: 20 61 6e 20 69 6e 74 65 72 61 63 74 69 76 65 20   an interactive 
2760: 69 6e 70 75 74 20 69 66 20 74 68 65 20 66 6f 6c  input if the fol
2770: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 0a  lowing variable.
2780: 2a 2a 20 69 73 20 74 72 75 65 2e 20 20 4f 74 68  ** is true.  Oth
2790: 65 72 77 69 73 65 2c 20 61 73 73 75 6d 65 20 73  erwise, assume s
27a0: 74 64 69 6e 20 69 73 20 63 6f 6e 6e 65 63 74 65  tdin is connecte
27b0: 64 20 74 6f 20 61 20 66 69 6c 65 20 6f 72 20 70  d to a file or p
27c0: 69 70 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ipe..*/.static i
27d0: 6e 74 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65  nt stdin_is_inte
27e0: 72 61 63 74 69 76 65 20 3d 20 31 3b 0a 0a 2f 2a  ractive = 1;../*
27f0: 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 20 73  .** On Windows s
2800: 79 73 74 65 6d 73 20 77 65 20 68 61 76 65 20 74  ystems we have t
2810: 6f 20 6b 6e 6f 77 20 69 66 20 73 74 61 6e 64 61  o know if standa
2820: 72 64 20 6f 75 74 70 75 74 20 69 73 20 61 20 63  rd output is a c
2830: 6f 6e 73 6f 6c 65 0a 2a 2a 20 69 6e 20 6f 72 64  onsole.** in ord
2840: 65 72 20 74 6f 20 74 72 61 6e 73 6c 61 74 65 20  er to translate 
2850: 55 54 46 2d 38 20 69 6e 74 6f 20 4d 42 43 53 2e  UTF-8 into MBCS.
2860: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2870: 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 74  variable is.** t
2880: 72 75 65 20 69 66 20 74 72 61 6e 73 6c 61 74 69  rue if translati
2890: 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  on is required..
28a0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 74  */.static int st
28b0: 64 6f 75 74 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20  dout_is_console 
28c0: 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  = 1;../*.** The 
28d0: 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 74 68 65  following is the
28e0: 20 6f 70 65 6e 20 53 51 4c 69 74 65 20 64 61 74   open SQLite dat
28f0: 61 62 61 73 65 2e 20 20 57 65 20 6d 61 6b 65 20  abase.  We make 
2900: 61 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20  a pointer.** to 
2910: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 61 20  this database a 
2920: 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 20  static variable 
2930: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
2940: 65 20 61 63 63 65 73 73 65 64 0a 2a 2a 20 62 79  e accessed.** by
2950: 20 74 68 65 20 53 49 47 49 4e 54 20 68 61 6e 64   the SIGINT hand
2960: 6c 65 72 20 74 6f 20 69 6e 74 65 72 72 75 70 74  ler to interrupt
2970: 20 64 61 74 61 62 61 73 65 20 70 72 6f 63 65 73   database proces
2980: 73 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  sing..*/.static 
2990: 73 71 6c 69 74 65 33 20 2a 67 6c 6f 62 61 6c 44  sqlite3 *globalD
29a0: 62 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 72  b = 0;../*.** Tr
29b0: 75 65 20 69 66 20 61 6e 20 69 6e 74 65 72 72 75  ue if an interru
29c0: 70 74 20 28 43 6f 6e 74 72 6f 6c 2d 43 29 20 68  pt (Control-C) h
29d0: 61 73 20 62 65 65 6e 20 72 65 63 65 69 76 65 64  as been received
29e0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 6c 61  ..*/.static vola
29f0: 74 69 6c 65 20 69 6e 74 20 73 65 65 6e 49 6e 74  tile int seenInt
2a00: 65 72 72 75 70 74 20 3d 20 30 3b 0a 0a 2f 2a 0a  errupt = 0;../*.
2a10: 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6e  ** This is the n
2a20: 61 6d 65 20 6f 66 20 6f 75 72 20 70 72 6f 67 72  ame of our progr
2a30: 61 6d 2e 20 49 74 20 69 73 20 73 65 74 20 69 6e  am. It is set in
2a40: 20 6d 61 69 6e 28 29 2c 20 75 73 65 64 0a 2a 2a   main(), used.**
2a50: 20 69 6e 20 61 20 6e 75 6d 62 65 72 20 6f 66 20   in a number of 
2a60: 6f 74 68 65 72 20 70 6c 61 63 65 73 2c 20 6d 6f  other places, mo
2a70: 73 74 6c 79 20 66 6f 72 20 65 72 72 6f 72 20 6d  stly for error m
2a80: 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 73 74 61 74  essages..*/.stat
2a90: 69 63 20 63 68 61 72 20 2a 41 72 67 76 30 3b 0a  ic char *Argv0;.
2aa0: 0a 2f 2a 0a 2a 2a 20 50 72 6f 6d 70 74 20 73 74  ./*.** Prompt st
2ab0: 72 69 6e 67 73 2e 20 49 6e 69 74 69 61 6c 69 7a  rings. Initializ
2ac0: 65 64 20 69 6e 20 6d 61 69 6e 2e 20 53 65 74 74  ed in main. Sett
2ad0: 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 20 20 2e  able with.**   .
2ae0: 70 72 6f 6d 70 74 20 6d 61 69 6e 20 63 6f 6e 74  prompt main cont
2af0: 69 6e 75 65 0a 2a 2f 0a 73 74 61 74 69 63 20 63  inue.*/.static c
2b00: 68 61 72 20 6d 61 69 6e 50 72 6f 6d 70 74 5b 32  har mainPrompt[2
2b10: 30 5d 3b 20 20 20 20 20 2f 2a 20 46 69 72 73 74  0];     /* First
2b20: 20 6c 69 6e 65 20 70 72 6f 6d 70 74 2e 20 64 65   line prompt. de
2b30: 66 61 75 6c 74 3a 20 22 73 71 6c 69 74 65 3e 20  fault: "sqlite> 
2b40: 22 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  "*/.static char 
2b50: 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74 5b 32  continuePrompt[2
2b60: 30 5d 3b 20 2f 2a 20 43 6f 6e 74 69 6e 75 61 74  0]; /* Continuat
2b70: 69 6f 6e 20 70 72 6f 6d 70 74 2e 20 64 65 66 61  ion prompt. defa
2b80: 75 6c 74 3a 20 22 20 20 20 2e 2e 2e 3e 20 22 20  ult: "   ...> " 
2b90: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72  */../*.** Render
2ba0: 20 6f 75 74 70 75 74 20 6c 69 6b 65 20 66 70 72   output like fpr
2bb0: 69 6e 74 66 28 29 2e 20 20 45 78 63 65 70 74 2c  intf().  Except,
2bc0: 20 69 66 20 74 68 65 20 6f 75 74 70 75 74 20 69   if the output i
2bd0: 73 20 67 6f 69 6e 67 20 74 6f 20 74 68 65 0a 2a  s going to the.*
2be0: 2a 20 63 6f 6e 73 6f 6c 65 20 61 6e 64 20 69 66  * console and if
2bf0: 20 74 68 69 73 20 69 73 20 72 75 6e 6e 69 6e 67   this is running
2c00: 20 6f 6e 20 61 20 57 69 6e 64 6f 77 73 20 6d 61   on a Windows ma
2c10: 63 68 69 6e 65 2c 20 74 72 61 6e 73 6c 61 74 65  chine, translate
2c20: 20 74 68 65 0a 2a 2a 20 6f 75 74 70 75 74 20 66   the.** output f
2c30: 72 6f 6d 20 55 54 46 2d 38 20 69 6e 74 6f 20 4d  rom UTF-8 into M
2c40: 42 43 53 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  BCS..*/.#if defi
2c50: 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64  ned(_WIN32) || d
2c60: 65 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 76 6f  efined(WIN32).vo
2c70: 69 64 20 75 74 66 38 5f 70 72 69 6e 74 66 28 46  id utf8_printf(F
2c80: 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20  ILE *out, const 
2c90: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e  char *zFormat, .
2ca0: 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61  ..){.  va_list a
2cb0: 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  p;.  va_start(ap
2cc0: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 69 66  , zFormat);.  if
2cd0: 28 20 73 74 64 6f 75 74 5f 69 73 5f 63 6f 6e 73  ( stdout_is_cons
2ce0: 6f 6c 65 20 26 26 20 28 6f 75 74 3d 3d 73 74 64  ole && (out==std
2cf0: 6f 75 74 20 7c 7c 20 6f 75 74 3d 3d 73 74 64 65  out || out==stde
2d00: 72 72 29 20 29 7b 0a 20 20 20 20 63 68 61 72 20  rr) ){.    char 
2d10: 2a 7a 31 20 3d 20 73 71 6c 69 74 65 33 5f 76 6d  *z1 = sqlite3_vm
2d20: 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20  printf(zFormat, 
2d30: 61 70 29 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  ap);.    char *z
2d40: 32 20 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e 33  2 = sqlite3_win3
2d50: 32 5f 75 74 66 38 5f 74 6f 5f 6d 62 63 73 5f 76  2_utf8_to_mbcs_v
2d60: 32 28 7a 31 2c 20 30 29 3b 0a 20 20 20 20 73 71  2(z1, 0);.    sq
2d70: 6c 69 74 65 33 5f 66 72 65 65 28 7a 31 29 3b 0a  lite3_free(z1);.
2d80: 20 20 20 20 66 70 75 74 73 28 7a 32 2c 20 6f 75      fputs(z2, ou
2d90: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  t);.    sqlite3_
2da0: 66 72 65 65 28 7a 32 29 3b 0a 20 20 7d 65 6c 73  free(z2);.  }els
2db0: 65 7b 0a 20 20 20 20 76 66 70 72 69 6e 74 66 28  e{.    vfprintf(
2dc0: 6f 75 74 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70  out, zFormat, ap
2dd0: 29 3b 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28  );.  }.  va_end(
2de0: 61 70 29 3b 0a 7d 0a 23 65 6c 69 66 20 21 64 65  ap);.}.#elif !de
2df0: 66 69 6e 65 64 28 75 74 66 38 5f 70 72 69 6e 74  fined(utf8_print
2e00: 66 29 0a 23 20 64 65 66 69 6e 65 20 75 74 66 38  f).# define utf8
2e10: 5f 70 72 69 6e 74 66 20 66 70 72 69 6e 74 66 0a  _printf fprintf.
2e20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
2e30: 6e 64 65 72 20 6f 75 74 70 75 74 20 6c 69 6b 65  nder output like
2e40: 20 66 70 72 69 6e 74 66 28 29 2e 20 20 54 68 69   fprintf().  Thi
2e50: 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20  s should not be 
2e60: 75 73 65 64 20 6f 6e 20 61 6e 79 74 68 69 6e 67  used on anything
2e70: 20 74 68 61 74 0a 2a 2a 20 69 6e 63 6c 75 64 65   that.** include
2e80: 73 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 74  s string formatt
2e90: 69 6e 67 20 28 65 2e 67 2e 20 22 25 73 22 29 2e  ing (e.g. "%s").
2ea0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2eb0: 28 72 61 77 5f 70 72 69 6e 74 66 29 0a 23 20 64  (raw_printf).# d
2ec0: 65 66 69 6e 65 20 72 61 77 5f 70 72 69 6e 74 66  efine raw_printf
2ed0: 20 66 70 72 69 6e 74 66 0a 23 65 6e 64 69 66 0a   fprintf.#endif.
2ee0: 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 49 2f 4f  ./*.** Write I/O
2ef0: 20 74 72 61 63 65 73 20 74 6f 20 74 68 65 20 66   traces to the f
2f00: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 65 61 6d 2e  ollowing stream.
2f10: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2f20: 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
2f30: 0a 73 74 61 74 69 63 20 46 49 4c 45 20 2a 69 6f  .static FILE *io
2f40: 74 72 61 63 65 20 3d 20 30 3b 0a 23 65 6e 64 69  trace = 0;.#endi
2f50: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  f../*.** This ro
2f60: 75 74 69 6e 65 20 77 6f 72 6b 73 20 6c 69 6b 65  utine works like
2f70: 20 70 72 69 6e 74 66 20 69 6e 20 74 68 61 74 20   printf in that 
2f80: 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65  its first argume
2f90: 6e 74 20 69 73 20 61 0a 2a 2a 20 66 6f 72 6d 61  nt is a.** forma
2fa0: 74 20 73 74 72 69 6e 67 20 61 6e 64 20 73 75 62  t string and sub
2fb0: 73 65 71 75 65 6e 74 20 61 72 67 75 6d 65 6e 74  sequent argument
2fc0: 73 20 61 72 65 20 76 61 6c 75 65 73 20 74 6f 20  s are values to 
2fd0: 62 65 20 73 75 62 73 74 69 74 75 74 65 64 0a 2a  be substituted.*
2fe0: 2a 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 25 20  * in place of % 
2ff0: 66 69 65 6c 64 73 2e 20 20 54 68 65 20 72 65 73  fields.  The res
3000: 75 6c 74 20 6f 66 20 66 6f 72 6d 61 74 74 69 6e  ult of formattin
3010: 67 20 74 68 69 73 20 73 74 72 69 6e 67 0a 2a 2a  g this string.**
3020: 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20 69   is written to i
3030: 6f 74 72 61 63 65 2e 0a 2a 2f 0a 23 69 66 64 65  otrace..*/.#ifde
3040: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
3050: 49 4f 54 52 41 43 45 0a 73 74 61 74 69 63 20 76  IOTRACE.static v
3060: 6f 69 64 20 53 51 4c 49 54 45 5f 43 44 45 43 4c  oid SQLITE_CDECL
3070: 20 69 6f 74 72 61 63 65 50 72 69 6e 74 66 28 63   iotracePrintf(c
3080: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
3090: 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c  at, ...){.  va_l
30a0: 69 73 74 20 61 70 3b 0a 20 20 63 68 61 72 20 2a  ist ap;.  char *
30b0: 7a 3b 0a 20 20 69 66 28 20 69 6f 74 72 61 63 65  z;.  if( iotrace
30c0: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
30d0: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f  va_start(ap, zFo
30e0: 72 6d 61 74 29 3b 0a 20 20 7a 20 3d 20 73 71 6c  rmat);.  z = sql
30f0: 69 74 65 33 5f 76 6d 70 72 69 6e 74 66 28 7a 46  ite3_vmprintf(zF
3100: 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61  ormat, ap);.  va
3110: 5f 65 6e 64 28 61 70 29 3b 0a 20 20 75 74 66 38  _end(ap);.  utf8
3120: 5f 70 72 69 6e 74 66 28 69 6f 74 72 61 63 65 2c  _printf(iotrace,
3130: 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 73 71 6c   "%s", z);.  sql
3140: 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 7d 0a  ite3_free(z);.}.
3150: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 75  #endif../*.** Ou
3160: 74 70 75 74 20 73 74 72 69 6e 67 20 7a 55 74 66  tput string zUtf
3170: 20 74 6f 20 73 74 72 65 61 6d 20 70 4f 75 74 20   to stream pOut 
3180: 61 73 20 77 20 63 68 61 72 61 63 74 65 72 73 2e  as w characters.
3190: 20 20 49 66 20 77 20 69 73 20 6e 65 67 61 74 69    If w is negati
31a0: 76 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 69 67 68  ve,.** then righ
31b0: 74 2d 6a 75 73 74 69 66 79 20 74 68 65 20 74 65  t-justify the te
31c0: 78 74 2e 20 20 57 20 69 73 20 74 68 65 20 77 69  xt.  W is the wi
31d0: 64 74 68 20 69 6e 20 55 54 46 2d 38 20 63 68 61  dth in UTF-8 cha
31e0: 72 61 63 74 65 72 73 2c 20 6e 6f 74 0a 2a 2a 20  racters, not.** 
31f0: 69 6e 20 62 79 74 65 73 2e 20 20 54 68 69 73 20  in bytes.  This 
3200: 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  is different fro
3210: 6d 20 74 68 65 20 25 2a 2e 2a 73 20 73 70 65 63  m the %*.*s spec
3220: 69 66 69 63 61 74 69 6f 6e 20 69 6e 20 70 72 69  ification in pri
3230: 6e 74 66 0a 2a 2a 20 73 69 6e 63 65 20 77 69 74  ntf.** since wit
3240: 68 20 25 2a 2e 2a 73 20 74 68 65 20 77 69 64 74  h %*.*s the widt
3250: 68 20 69 73 20 6d 65 61 73 75 72 65 64 20 69 6e  h is measured in
3260: 20 62 79 74 65 73 2c 20 6e 6f 74 20 63 68 61 72   bytes, not char
3270: 61 63 74 65 72 73 2e 0a 2a 2f 0a 73 74 61 74 69  acters..*/.stati
3280: 63 20 76 6f 69 64 20 75 74 66 38 5f 77 69 64 74  c void utf8_widt
3290: 68 5f 70 72 69 6e 74 28 46 49 4c 45 20 2a 70 4f  h_print(FILE *pO
32a0: 75 74 2c 20 69 6e 74 20 77 2c 20 63 6f 6e 73 74  ut, int w, const
32b0: 20 63 68 61 72 20 2a 7a 55 74 66 29 7b 0a 20 20   char *zUtf){.  
32c0: 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 6e 3b 0a  int i;.  int n;.
32d0: 20 20 69 6e 74 20 61 77 20 3d 20 77 3c 30 20 3f    int aw = w<0 ?
32e0: 20 2d 77 20 3a 20 77 3b 0a 20 20 63 68 61 72 20   -w : w;.  char 
32f0: 7a 42 75 66 5b 31 30 30 30 5d 3b 0a 20 20 69 66  zBuf[1000];.  if
3300: 28 20 61 77 3e 28 69 6e 74 29 73 69 7a 65 6f 66  ( aw>(int)sizeof
3310: 28 7a 42 75 66 29 2f 33 20 29 20 61 77 20 3d 20  (zBuf)/3 ) aw = 
3320: 28 69 6e 74 29 73 69 7a 65 6f 66 28 7a 42 75 66  (int)sizeof(zBuf
3330: 29 2f 33 3b 0a 20 20 66 6f 72 28 69 3d 6e 3d 30  )/3;.  for(i=n=0
3340: 3b 20 7a 55 74 66 5b 69 5d 3b 20 69 2b 2b 29 7b  ; zUtf[i]; i++){
3350: 0a 20 20 20 20 69 66 28 20 28 7a 55 74 66 5b 69  .    if( (zUtf[i
3360: 5d 26 30 78 63 30 29 21 3d 30 78 38 30 20 29 7b  ]&0xc0)!=0x80 ){
3370: 0a 20 20 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20  .      n++;.    
3380: 20 20 69 66 28 20 6e 3d 3d 61 77 20 29 7b 0a 20    if( n==aw ){. 
3390: 20 20 20 20 20 20 20 64 6f 7b 20 69 2b 2b 3b 20         do{ i++; 
33a0: 7d 77 68 69 6c 65 28 20 28 7a 55 74 66 5b 69 5d  }while( (zUtf[i]
33b0: 26 30 78 63 30 29 3d 3d 30 78 38 30 20 29 3b 0a  &0xc0)==0x80 );.
33c0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
33d0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
33e0: 0a 20 20 69 66 28 20 6e 3e 3d 61 77 20 29 7b 0a  .  if( n>=aw ){.
33f0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
3400: 70 4f 75 74 2c 20 22 25 2e 2a 73 22 2c 20 69 2c  pOut, "%.*s", i,
3410: 20 7a 55 74 66 29 3b 0a 20 20 7d 65 6c 73 65 20   zUtf);.  }else 
3420: 69 66 28 20 77 3c 30 20 29 7b 0a 20 20 20 20 75  if( w<0 ){.    u
3430: 74 66 38 5f 70 72 69 6e 74 66 28 70 4f 75 74 2c  tf8_printf(pOut,
3440: 20 22 25 2a 73 25 73 22 2c 20 61 77 2d 6e 2c 20   "%*s%s", aw-n, 
3450: 22 22 2c 20 7a 55 74 66 29 3b 0a 20 20 7d 65 6c  "", zUtf);.  }el
3460: 73 65 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  se{.    utf8_pri
3470: 6e 74 66 28 70 4f 75 74 2c 20 22 25 73 25 2a 73  ntf(pOut, "%s%*s
3480: 22 2c 20 7a 55 74 66 2c 20 61 77 2d 6e 2c 20 22  ", zUtf, aw-n, "
3490: 22 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a  ");.  }.}.../*.*
34a0: 2a 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  * Determines if 
34b0: 61 20 73 74 72 69 6e 67 20 69 73 20 61 20 6e 75  a string is a nu
34c0: 6d 62 65 72 20 6f 66 20 6e 6f 74 2e 0a 2a 2f 0a  mber of not..*/.
34d0: 73 74 61 74 69 63 20 69 6e 74 20 69 73 4e 75 6d  static int isNum
34e0: 62 65 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ber(const char *
34f0: 7a 2c 20 69 6e 74 20 2a 72 65 61 6c 6e 75 6d 29  z, int *realnum)
3500: 7b 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20  {.  if( *z=='-' 
3510: 7c 7c 20 2a 7a 3d 3d 27 2b 27 20 29 20 7a 2b 2b  || *z=='+' ) z++
3520: 3b 0a 20 20 69 66 28 20 21 49 73 44 69 67 69 74  ;.  if( !IsDigit
3530: 28 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (*z) ){.    retu
3540: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 7a 2b 2b 3b  rn 0;.  }.  z++;
3550: 0a 20 20 69 66 28 20 72 65 61 6c 6e 75 6d 20 29  .  if( realnum )
3560: 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 30 3b 0a 20   *realnum = 0;. 
3570: 20 77 68 69 6c 65 28 20 49 73 44 69 67 69 74 28   while( IsDigit(
3580: 2a 7a 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20  *z) ){ z++; }.  
3590: 69 66 28 20 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20  if( *z=='.' ){. 
35a0: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20     z++;.    if( 
35b0: 21 49 73 44 69 67 69 74 28 2a 7a 29 20 29 20 72  !IsDigit(*z) ) r
35c0: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 77 68 69  eturn 0;.    whi
35d0: 6c 65 28 20 49 73 44 69 67 69 74 28 2a 7a 29 20  le( IsDigit(*z) 
35e0: 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20 20 69 66  ){ z++; }.    if
35f0: 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61  ( realnum ) *rea
3600: 6c 6e 75 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  lnum = 1;.  }.  
3610: 69 66 28 20 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a  if( *z=='e' || *
3620: 7a 3d 3d 27 45 27 20 29 7b 0a 20 20 20 20 7a 2b  z=='E' ){.    z+
3630: 2b 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27  +;.    if( *z=='
3640: 2b 27 20 7c 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20  +' || *z=='-' ) 
3650: 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20 21 49 73  z++;.    if( !Is
3660: 44 69 67 69 74 28 2a 7a 29 20 29 20 72 65 74 75  Digit(*z) ) retu
3670: 72 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28  rn 0;.    while(
3680: 20 49 73 44 69 67 69 74 28 2a 7a 29 20 29 7b 20   IsDigit(*z) ){ 
3690: 7a 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20 72  z++; }.    if( r
36a0: 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75  ealnum ) *realnu
36b0: 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  m = 1;.  }.  ret
36c0: 75 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 2f 2a  urn *z==0;.}../*
36d0: 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 61 20 73 74  .** Compute a st
36e0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 74 68 61 74  ring length that
36f0: 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 77   is limited to w
3700: 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65  hat can be store
3710: 64 20 69 6e 0a 2a 2a 20 6c 6f 77 65 72 20 33 30  d in.** lower 30
3720: 20 62 69 74 73 20 6f 66 20 61 20 33 32 2d 62 69   bits of a 32-bi
3730: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
3740: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
3750: 73 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63  strlen30(const c
3760: 68 61 72 20 2a 7a 29 7b 0a 20 20 63 6f 6e 73 74  har *z){.  const
3770: 20 63 68 61 72 20 2a 7a 32 20 3d 20 7a 3b 0a 20   char *z2 = z;. 
3780: 20 77 68 69 6c 65 28 20 2a 7a 32 20 29 7b 20 7a   while( *z2 ){ z
3790: 32 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20  2++; }.  return 
37a0: 30 78 33 66 66 66 66 66 66 66 20 26 20 28 69 6e  0x3fffffff & (in
37b0: 74 29 28 7a 32 20 2d 20 7a 29 3b 0a 7d 0a 0a 2f  t)(z2 - z);.}../
37c0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
37d0: 6c 65 6e 67 74 68 20 6f 66 20 61 20 73 74 72 69  length of a stri
37e0: 6e 67 20 69 6e 20 63 68 61 72 61 63 74 65 72 73  ng in characters
37f0: 2e 20 20 4d 75 6c 74 69 62 79 74 65 20 55 54 46  .  Multibyte UTF
3800: 38 20 63 68 61 72 61 63 74 65 72 73 0a 2a 2a 20  8 characters.** 
3810: 63 6f 75 6e 74 20 61 73 20 61 20 73 69 6e 67 6c  count as a singl
3820: 65 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a  e character..*/.
3830: 73 74 61 74 69 63 20 69 6e 74 20 73 74 72 6c 65  static int strle
3840: 6e 43 68 61 72 28 63 6f 6e 73 74 20 63 68 61 72  nChar(const char
3850: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20   *z){.  int n = 
3860: 30 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20 29  0;.  while( *z )
3870: 7b 0a 20 20 20 20 69 66 28 20 28 30 78 63 30 26  {.    if( (0xc0&
3880: 2a 28 7a 2b 2b 29 29 21 3d 30 78 38 30 20 29 20  *(z++))!=0x80 ) 
3890: 6e 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  n++;.  }.  retur
38a0: 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  n n;.}../*.** Th
38b0: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 61 64 73  is routine reads
38c0: 20 61 20 6c 69 6e 65 20 6f 66 20 74 65 78 74 20   a line of text 
38d0: 66 72 6f 6d 20 46 49 4c 45 20 69 6e 2c 20 73 74  from FILE in, st
38e0: 6f 72 65 73 0a 2a 2a 20 74 68 65 20 74 65 78 74  ores.** the text
38f0: 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   in memory obtai
3900: 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
3910: 29 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20  ) and returns a 
3920: 70 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68  pointer.** to th
3930: 65 20 74 65 78 74 2e 20 20 4e 55 4c 4c 20 69 73  e text.  NULL is
3940: 20 72 65 74 75 72 6e 65 64 20 61 74 20 65 6e 64   returned at end
3950: 20 6f 66 20 66 69 6c 65 2c 20 6f 72 20 69 66 20   of file, or if 
3960: 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 66 61 69 6c  malloc().** fail
3970: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 7a 4c 69 6e  s..**.** If zLin
3980: 65 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68  e is not NULL th
3990: 65 6e 20 69 74 20 69 73 20 61 20 6d 61 6c 6c 6f  en it is a mallo
39a0: 63 65 64 20 62 75 66 66 65 72 20 72 65 74 75 72  ced buffer retur
39b0: 6e 65 64 20 66 72 6f 6d 0a 2a 2a 20 61 20 70 72  ned from.** a pr
39c0: 65 76 69 6f 75 73 20 63 61 6c 6c 20 74 6f 20 74  evious call to t
39d0: 68 69 73 20 72 6f 75 74 69 6e 65 20 74 68 61 74  his routine that
39e0: 20 6d 61 79 20 62 65 20 72 65 75 73 65 64 2e 0a   may be reused..
39f0: 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a  */.static char *
3a00: 6c 6f 63 61 6c 5f 67 65 74 6c 69 6e 65 28 63 68  local_getline(ch
3a10: 61 72 20 2a 7a 4c 69 6e 65 2c 20 46 49 4c 45 20  ar *zLine, FILE 
3a20: 2a 69 6e 29 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e  *in){.  int nLin
3a30: 65 20 3d 20 7a 4c 69 6e 65 3d 3d 30 20 3f 20 30  e = zLine==0 ? 0
3a40: 20 3a 20 31 30 30 3b 0a 20 20 69 6e 74 20 6e 20   : 100;.  int n 
3a50: 3d 20 30 3b 0a 0a 20 20 77 68 69 6c 65 28 20 31  = 0;..  while( 1
3a60: 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 2b 31 30   ){.    if( n+10
3a70: 30 3e 6e 4c 69 6e 65 20 29 7b 0a 20 20 20 20 20  0>nLine ){.     
3a80: 20 6e 4c 69 6e 65 20 3d 20 6e 4c 69 6e 65 2a 32   nLine = nLine*2
3a90: 20 2b 20 31 30 30 3b 0a 20 20 20 20 20 20 7a 4c   + 100;.      zL
3aa0: 69 6e 65 20 3d 20 72 65 61 6c 6c 6f 63 28 7a 4c  ine = realloc(zL
3ab0: 69 6e 65 2c 20 6e 4c 69 6e 65 29 3b 0a 20 20 20  ine, nLine);.   
3ac0: 20 20 20 69 66 28 20 7a 4c 69 6e 65 3d 3d 30 20     if( zLine==0 
3ad0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
3ae0: 7d 0a 20 20 20 20 69 66 28 20 66 67 65 74 73 28  }.    if( fgets(
3af0: 26 7a 4c 69 6e 65 5b 6e 5d 2c 20 6e 4c 69 6e 65  &zLine[n], nLine
3b00: 20 2d 20 6e 2c 20 69 6e 29 3d 3d 30 20 29 7b 0a   - n, in)==0 ){.
3b10: 20 20 20 20 20 20 69 66 28 20 6e 3d 3d 30 20 29        if( n==0 )
3b20: 7b 0a 20 20 20 20 20 20 20 20 66 72 65 65 28 7a  {.        free(z
3b30: 4c 69 6e 65 29 3b 0a 20 20 20 20 20 20 20 20 72  Line);.        r
3b40: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 7d  eturn 0;.      }
3b50: 0a 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6e 5d 20  .      zLine[n] 
3b60: 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  = 0;.      break
3b70: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c  ;.    }.    whil
3b80: 65 28 20 7a 4c 69 6e 65 5b 6e 5d 20 29 20 6e 2b  e( zLine[n] ) n+
3b90: 2b 3b 0a 20 20 20 20 69 66 28 20 6e 3e 30 20 26  +;.    if( n>0 &
3ba0: 26 20 7a 4c 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c  & zLine[n-1]=='\
3bb0: 6e 27 20 29 7b 0a 20 20 20 20 20 20 6e 2d 2d 3b  n' ){.      n--;
3bc0: 0a 20 20 20 20 20 20 69 66 28 20 6e 3e 30 20 26  .      if( n>0 &
3bd0: 26 20 7a 4c 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c  & zLine[n-1]=='\
3be0: 72 27 20 29 20 6e 2d 2d 3b 0a 20 20 20 20 20 20  r' ) n--;.      
3bf0: 7a 4c 69 6e 65 5b 6e 5d 20 3d 20 30 3b 0a 20 20  zLine[n] = 0;.  
3c00: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
3c10: 0a 20 20 7d 0a 23 69 66 20 64 65 66 69 6e 65 64  .  }.#if defined
3c20: 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69  (_WIN32) || defi
3c30: 6e 65 64 28 57 49 4e 33 32 29 0a 20 20 2f 2a 20  ned(WIN32).  /* 
3c40: 46 6f 72 20 69 6e 74 65 72 61 63 74 69 76 65 20  For interactive 
3c50: 69 6e 70 75 74 20 6f 6e 20 57 69 6e 64 6f 77 73  input on Windows
3c60: 20 73 79 73 74 65 6d 73 2c 20 74 72 61 6e 73 6c   systems, transl
3c70: 61 74 65 20 74 68 65 0a 20 20 2a 2a 20 6d 75 6c  ate the.  ** mul
3c80: 74 69 2d 62 79 74 65 20 63 68 61 72 61 63 74 65  ti-byte characte
3c90: 72 73 65 74 20 63 68 61 72 61 63 74 65 72 73 20  rset characters 
3ca0: 69 6e 74 6f 20 55 54 46 2d 38 2e 20 2a 2f 0a 20  into UTF-8. */. 
3cb0: 20 69 66 28 20 73 74 64 69 6e 5f 69 73 5f 69 6e   if( stdin_is_in
3cc0: 74 65 72 61 63 74 69 76 65 20 26 26 20 69 6e 3d  teractive && in=
3cd0: 3d 73 74 64 69 6e 20 29 7b 0a 20 20 20 20 63 68  =stdin ){.    ch
3ce0: 61 72 20 2a 7a 54 72 61 6e 73 20 3d 20 73 71 6c  ar *zTrans = sql
3cf0: 69 74 65 33 5f 77 69 6e 33 32 5f 6d 62 63 73 5f  ite3_win32_mbcs_
3d00: 74 6f 5f 75 74 66 38 5f 76 32 28 7a 4c 69 6e 65  to_utf8_v2(zLine
3d10: 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 7a 54  , 0);.    if( zT
3d20: 72 61 6e 73 20 29 7b 0a 20 20 20 20 20 20 69 6e  rans ){.      in
3d30: 74 20 6e 54 72 61 6e 73 20 3d 20 73 74 72 6c 65  t nTrans = strle
3d40: 6e 33 30 28 7a 54 72 61 6e 73 29 2b 31 3b 0a 20  n30(zTrans)+1;. 
3d50: 20 20 20 20 20 69 66 28 20 6e 54 72 61 6e 73 3e       if( nTrans>
3d60: 6e 4c 69 6e 65 20 29 7b 0a 20 20 20 20 20 20 20  nLine ){.       
3d70: 20 7a 4c 69 6e 65 20 3d 20 72 65 61 6c 6c 6f 63   zLine = realloc
3d80: 28 7a 4c 69 6e 65 2c 20 6e 54 72 61 6e 73 29 3b  (zLine, nTrans);
3d90: 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 4c 69  .        if( zLi
3da0: 6e 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ne==0 ){.       
3db0: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
3dc0: 7a 54 72 61 6e 73 29 3b 0a 20 20 20 20 20 20 20  zTrans);.       
3dd0: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20     return 0;.   
3de0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
3df0: 20 20 20 20 20 6d 65 6d 63 70 79 28 7a 4c 69 6e       memcpy(zLin
3e00: 65 2c 20 7a 54 72 61 6e 73 2c 20 6e 54 72 61 6e  e, zTrans, nTran
3e10: 73 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  s);.      sqlite
3e20: 33 5f 66 72 65 65 28 7a 54 72 61 6e 73 29 3b 0a  3_free(zTrans);.
3e30: 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
3e40: 20 2f 2a 20 64 65 66 69 6e 65 64 28 5f 57 49 4e   /* defined(_WIN
3e50: 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57  32) || defined(W
3e60: 49 4e 33 32 29 20 2a 2f 0a 20 20 72 65 74 75 72  IN32) */.  retur
3e70: 6e 20 7a 4c 69 6e 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  n zLine;.}../*.*
3e80: 2a 20 52 65 74 72 69 65 76 65 20 61 20 73 69 6e  * Retrieve a sin
3e90: 67 6c 65 20 6c 69 6e 65 20 6f 66 20 69 6e 70 75  gle line of inpu
3ea0: 74 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  t text..**.** If
3eb0: 20 69 6e 3d 3d 30 20 74 68 65 6e 20 72 65 61 64   in==0 then read
3ec0: 20 66 72 6f 6d 20 73 74 61 6e 64 61 72 64 20 69   from standard i
3ed0: 6e 70 75 74 20 61 6e 64 20 70 72 6f 6d 70 74 20  nput and prompt 
3ee0: 62 65 66 6f 72 65 20 65 61 63 68 20 6c 69 6e 65  before each line
3ef0: 2e 0a 2a 2a 20 49 66 20 69 73 43 6f 6e 74 69 6e  ..** If isContin
3f00: 75 61 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20  uation is true, 
3f10: 74 68 65 6e 20 61 20 63 6f 6e 74 69 6e 75 61 74  then a continuat
3f20: 69 6f 6e 20 70 72 6f 6d 70 74 20 69 73 20 61 70  ion prompt is ap
3f30: 70 72 6f 70 72 69 61 74 65 2e 0a 2a 2a 20 49 66  propriate..** If
3f40: 20 69 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 20   isContinuation 
3f50: 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  is zero, then th
3f60: 65 20 6d 61 69 6e 20 70 72 6f 6d 70 74 20 73 68  e main prompt sh
3f70: 6f 75 6c 64 20 62 65 20 75 73 65 64 2e 0a 2a 2a  ould be used..**
3f80: 0a 2a 2a 20 49 66 20 7a 50 72 69 6f 72 20 69 73  .** If zPrior is
3f90: 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69   not NULL then i
3fa0: 74 20 69 73 20 61 20 62 75 66 66 65 72 20 66 72  t is a buffer fr
3fb0: 6f 6d 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20  om a prior call 
3fc0: 74 6f 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69  to this.** routi
3fd0: 6e 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 72  ne that can be r
3fe0: 65 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  eused..**.** The
3ff0: 20 72 65 73 75 6c 74 20 69 73 20 73 74 6f 72 65   result is store
4000: 64 20 69 6e 20 73 70 61 63 65 20 6f 62 74 61 69  d in space obtai
4010: 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
4020: 29 20 61 6e 64 20 6d 75 73 74 20 65 69 74 68 65  ) and must eithe
4030: 72 0a 2a 2a 20 62 65 20 66 72 65 65 64 20 62 79  r.** be freed by
4040: 20 74 68 65 20 63 61 6c 6c 65 72 20 6f 72 20 65   the caller or e
4050: 6c 73 65 20 70 61 73 73 65 64 20 62 61 63 6b 20  lse passed back 
4060: 69 6e 74 6f 20 74 68 69 73 20 72 6f 75 74 69 6e  into this routin
4070: 65 20 76 69 61 20 74 68 65 0a 2a 2a 20 7a 50 72  e via the.** zPr
4080: 69 6f 72 20 61 72 67 75 6d 65 6e 74 20 66 6f 72  ior argument for
4090: 20 72 65 75 73 65 2e 0a 2a 2f 0a 73 74 61 74 69   reuse..*/.stati
40a0: 63 20 63 68 61 72 20 2a 6f 6e 65 5f 69 6e 70 75  c char *one_inpu
40b0: 74 5f 6c 69 6e 65 28 46 49 4c 45 20 2a 69 6e 2c  t_line(FILE *in,
40c0: 20 63 68 61 72 20 2a 7a 50 72 69 6f 72 2c 20 69   char *zPrior, i
40d0: 6e 74 20 69 73 43 6f 6e 74 69 6e 75 61 74 69 6f  nt isContinuatio
40e0: 6e 29 7b 0a 20 20 63 68 61 72 20 2a 7a 50 72 6f  n){.  char *zPro
40f0: 6d 70 74 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65  mpt;.  char *zRe
4100: 73 75 6c 74 3b 0a 20 20 69 66 28 20 69 6e 21 3d  sult;.  if( in!=
4110: 30 20 29 7b 0a 20 20 20 20 7a 52 65 73 75 6c 74  0 ){.    zResult
4120: 20 3d 20 6c 6f 63 61 6c 5f 67 65 74 6c 69 6e 65   = local_getline
4130: 28 7a 50 72 69 6f 72 2c 20 69 6e 29 3b 0a 20 20  (zPrior, in);.  
4140: 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 50 72 6f 6d  }else{.    zProm
4150: 70 74 20 3d 20 69 73 43 6f 6e 74 69 6e 75 61 74  pt = isContinuat
4160: 69 6f 6e 20 3f 20 63 6f 6e 74 69 6e 75 65 50 72  ion ? continuePr
4170: 6f 6d 70 74 20 3a 20 6d 61 69 6e 50 72 6f 6d 70  ompt : mainPromp
4180: 74 3b 0a 23 69 66 20 53 48 45 4c 4c 5f 55 53 45  t;.#if SHELL_USE
4190: 5f 4c 4f 43 41 4c 5f 47 45 54 4c 49 4e 45 0a 20  _LOCAL_GETLINE. 
41a0: 20 20 20 70 72 69 6e 74 66 28 22 25 73 22 2c 20     printf("%s", 
41b0: 7a 50 72 6f 6d 70 74 29 3b 0a 20 20 20 20 66 66  zPrompt);.    ff
41c0: 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20  lush(stdout);.  
41d0: 20 20 7a 52 65 73 75 6c 74 20 3d 20 6c 6f 63 61    zResult = loca
41e0: 6c 5f 67 65 74 6c 69 6e 65 28 7a 50 72 69 6f 72  l_getline(zPrior
41f0: 2c 20 73 74 64 69 6e 29 3b 0a 23 65 6c 73 65 0a  , stdin);.#else.
4200: 20 20 20 20 66 72 65 65 28 7a 50 72 69 6f 72 29      free(zPrior)
4210: 3b 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 3d 20  ;.    zResult = 
4220: 73 68 65 6c 6c 5f 72 65 61 64 6c 69 6e 65 28 7a  shell_readline(z
4230: 50 72 6f 6d 70 74 29 3b 0a 20 20 20 20 69 66 28  Prompt);.    if(
4240: 20 7a 52 65 73 75 6c 74 20 26 26 20 2a 7a 52 65   zResult && *zRe
4250: 73 75 6c 74 20 29 20 73 68 65 6c 6c 5f 61 64 64  sult ) shell_add
4260: 5f 68 69 73 74 6f 72 79 28 7a 52 65 73 75 6c 74  _history(zResult
4270: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20  );.#endif.  }.  
4280: 72 65 74 75 72 6e 20 7a 52 65 73 75 6c 74 3b 0a  return zResult;.
4290: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  }.../*.** Return
42a0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20   the value of a 
42b0: 68 65 78 61 64 65 63 69 6d 61 6c 20 64 69 67 69  hexadecimal digi
42c0: 74 2e 20 20 52 65 74 75 72 6e 20 2d 31 20 69 66  t.  Return -1 if
42d0: 20 74 68 65 20 69 6e 70 75 74 0a 2a 2a 20 69 73   the input.** is
42e0: 20 6e 6f 74 20 61 20 68 65 78 20 64 69 67 69 74   not a hex digit
42f0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
4300: 68 65 78 44 69 67 69 74 56 61 6c 75 65 28 63 68  hexDigitValue(ch
4310: 61 72 20 63 29 7b 0a 20 20 69 66 28 20 63 3e 3d  ar c){.  if( c>=
4320: 27 30 27 20 26 26 20 63 3c 3d 27 39 27 20 29 20  '0' && c<='9' ) 
4330: 72 65 74 75 72 6e 20 63 20 2d 20 27 30 27 3b 0a  return c - '0';.
4340: 20 20 69 66 28 20 63 3e 3d 27 61 27 20 26 26 20    if( c>='a' && 
4350: 63 3c 3d 27 66 27 20 29 20 72 65 74 75 72 6e 20  c<='f' ) return 
4360: 63 20 2d 20 27 61 27 20 2b 20 31 30 3b 0a 20 20  c - 'a' + 10;.  
4370: 69 66 28 20 63 3e 3d 27 41 27 20 26 26 20 63 3c  if( c>='A' && c<
4380: 3d 27 46 27 20 29 20 72 65 74 75 72 6e 20 63 20  ='F' ) return c 
4390: 2d 20 27 41 27 20 2b 20 31 30 3b 0a 20 20 72 65  - 'A' + 10;.  re
43a0: 74 75 72 6e 20 2d 31 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn -1;.}../*.*
43b0: 2a 20 49 6e 74 65 72 70 72 65 74 20 7a 41 72 67  * Interpret zArg
43c0: 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76   as an integer v
43d0: 61 6c 75 65 2c 20 70 6f 73 73 69 62 6c 79 20 77  alue, possibly w
43e0: 69 74 68 20 73 75 66 66 69 78 65 73 2e 0a 2a 2f  ith suffixes..*/
43f0: 0a 73 74 61 74 69 63 20 73 71 6c 69 74 65 33 5f  .static sqlite3_
4400: 69 6e 74 36 34 20 69 6e 74 65 67 65 72 56 61 6c  int64 integerVal
4410: 75 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ue(const char *z
4420: 41 72 67 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  Arg){.  sqlite3_
4430: 69 6e 74 36 34 20 76 20 3d 20 30 3b 0a 20 20 73  int64 v = 0;.  s
4440: 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75  tatic const stru
4450: 63 74 20 7b 20 63 68 61 72 20 2a 7a 53 75 66 66  ct { char *zSuff
4460: 69 78 3b 20 69 6e 74 20 69 4d 75 6c 74 3b 20 7d  ix; int iMult; }
4470: 20 61 4d 75 6c 74 5b 5d 20 3d 20 7b 0a 20 20 20   aMult[] = {.   
4480: 20 7b 20 22 4b 69 42 22 2c 20 31 30 32 34 20 7d   { "KiB", 1024 }
4490: 2c 0a 20 20 20 20 7b 20 22 4d 69 42 22 2c 20 31  ,.    { "MiB", 1
44a0: 30 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20 20  024*1024 },.    
44b0: 7b 20 22 47 69 42 22 2c 20 31 30 32 34 2a 31 30  { "GiB", 1024*10
44c0: 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b  24*1024 },.    {
44d0: 20 22 4b 42 22 2c 20 20 31 30 30 30 20 7d 2c 0a   "KB",  1000 },.
44e0: 20 20 20 20 7b 20 22 4d 42 22 2c 20 20 31 30 30      { "MB",  100
44f0: 30 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 47  0000 },.    { "G
4500: 42 22 2c 20 20 31 30 30 30 30 30 30 30 30 30 20  B",  1000000000 
4510: 7d 2c 0a 20 20 20 20 7b 20 22 4b 22 2c 20 20 20  },.    { "K",   
4520: 31 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 4d  1000 },.    { "M
4530: 22 2c 20 20 20 31 30 30 30 30 30 30 20 7d 2c 0a  ",   1000000 },.
4540: 20 20 20 20 7b 20 22 47 22 2c 20 20 20 31 30 30      { "G",   100
4550: 30 30 30 30 30 30 30 20 7d 2c 0a 20 20 7d 3b 0a  0000000 },.  };.
4560: 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 69    int i;.  int i
4570: 73 4e 65 67 20 3d 20 30 3b 0a 20 20 69 66 28 20  sNeg = 0;.  if( 
4580: 7a 41 72 67 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a  zArg[0]=='-' ){.
4590: 20 20 20 20 69 73 4e 65 67 20 3d 20 31 3b 0a 20      isNeg = 1;. 
45a0: 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 7d 65 6c     zArg++;.  }el
45b0: 73 65 20 69 66 28 20 7a 41 72 67 5b 30 5d 3d 3d  se if( zArg[0]==
45c0: 27 2b 27 20 29 7b 0a 20 20 20 20 7a 41 72 67 2b  '+' ){.    zArg+
45d0: 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 41 72  +;.  }.  if( zAr
45e0: 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41 72  g[0]=='0' && zAr
45f0: 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20 20  g[1]=='x' ){.   
4600: 20 69 6e 74 20 78 3b 0a 20 20 20 20 7a 41 72 67   int x;.    zArg
4610: 20 2b 3d 20 32 3b 0a 20 20 20 20 77 68 69 6c 65   += 2;.    while
4620: 28 20 28 78 20 3d 20 68 65 78 44 69 67 69 74 56  ( (x = hexDigitV
4630: 61 6c 75 65 28 7a 41 72 67 5b 30 5d 29 29 3e 3d  alue(zArg[0]))>=
4640: 30 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 28  0 ){.      v = (
4650: 76 3c 3c 34 29 20 2b 20 78 3b 0a 20 20 20 20 20  v<<4) + x;.     
4660: 20 7a 41 72 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20   zArg++;.    }. 
4670: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 68 69 6c   }else{.    whil
4680: 65 28 20 49 73 44 69 67 69 74 28 7a 41 72 67 5b  e( IsDigit(zArg[
4690: 30 5d 29 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  0]) ){.      v =
46a0: 20 76 2a 31 30 20 2b 20 7a 41 72 67 5b 30 5d 20   v*10 + zArg[0] 
46b0: 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 7a 41 72  - '0';.      zAr
46c0: 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  g++;.    }.  }. 
46d0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
46e0: 79 53 69 7a 65 28 61 4d 75 6c 74 29 3b 20 69 2b  ySize(aMult); i+
46f0: 2b 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  +){.    if( sqli
4700: 74 65 33 5f 73 74 72 69 63 6d 70 28 61 4d 75 6c  te3_stricmp(aMul
4710: 74 5b 69 5d 2e 7a 53 75 66 66 69 78 2c 20 7a 41  t[i].zSuffix, zA
4720: 72 67 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  rg)==0 ){.      
4730: 76 20 2a 3d 20 61 4d 75 6c 74 5b 69 5d 2e 69 4d  v *= aMult[i].iM
4740: 75 6c 74 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  ult;.      break
4750: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
4760: 74 75 72 6e 20 69 73 4e 65 67 3f 20 2d 76 20 3a  turn isNeg? -v :
4770: 20 76 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20 76   v;.}../*.** A v
4780: 61 72 69 61 62 6c 65 20 6c 65 6e 67 74 68 20 73  ariable length s
4790: 74 72 69 6e 67 20 74 6f 20 77 68 69 63 68 20 6f  tring to which o
47a0: 6e 65 20 63 61 6e 20 61 70 70 65 6e 64 20 74 65  ne can append te
47b0: 78 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  xt..*/.typedef s
47c0: 74 72 75 63 74 20 53 68 65 6c 6c 54 65 78 74 20  truct ShellText 
47d0: 53 68 65 6c 6c 54 65 78 74 3b 0a 73 74 72 75 63  ShellText;.struc
47e0: 74 20 53 68 65 6c 6c 54 65 78 74 20 7b 0a 20 20  t ShellText {.  
47f0: 63 68 61 72 20 2a 7a 3b 0a 20 20 69 6e 74 20 6e  char *z;.  int n
4800: 3b 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 0a  ;.  int nAlloc;.
4810: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61  };../*.** Initia
4820: 6c 69 7a 65 20 61 6e 64 20 64 65 73 74 72 6f 79  lize and destroy
4830: 20 61 20 53 68 65 6c 6c 54 65 78 74 20 6f 62 6a   a ShellText obj
4840: 65 63 74 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ect.*/.static vo
4850: 69 64 20 69 6e 69 74 54 65 78 74 28 53 68 65 6c  id initText(Shel
4860: 6c 54 65 78 74 20 2a 70 29 7b 0a 20 20 6d 65 6d  lText *p){.  mem
4870: 73 65 74 28 70 2c 20 30 2c 20 73 69 7a 65 6f 66  set(p, 0, sizeof
4880: 28 2a 70 29 29 3b 0a 7d 0a 73 74 61 74 69 63 20  (*p));.}.static 
4890: 76 6f 69 64 20 66 72 65 65 54 65 78 74 28 53 68  void freeText(Sh
48a0: 65 6c 6c 54 65 78 74 20 2a 70 29 7b 0a 20 20 66  ellText *p){.  f
48b0: 72 65 65 28 70 2d 3e 7a 29 3b 0a 20 20 69 6e 69  ree(p->z);.  ini
48c0: 74 54 65 78 74 28 70 29 3b 0a 7d 0a 0a 2f 2a 20  tText(p);.}../* 
48d0: 7a 49 6e 20 69 73 20 65 69 74 68 65 72 20 61 20  zIn is either a 
48e0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4e 55 4c  pointer to a NUL
48f0: 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72  L-terminated str
4900: 69 6e 67 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62  ing in memory ob
4910: 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 6d  tained.** from m
4920: 61 6c 6c 6f 63 28 29 2c 20 6f 72 20 61 20 4e 55  alloc(), or a NU
4930: 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 54 68 65 20  LL pointer. The 
4940: 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 64 20 74  string pointed t
4950: 6f 20 62 79 20 7a 41 70 70 65 6e 64 20 69 73 0a  o by zAppend is.
4960: 2a 2a 20 61 64 64 65 64 20 74 6f 20 7a 49 6e 2c  ** added to zIn,
4970: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
4980: 72 65 74 75 72 6e 65 64 20 69 6e 20 6d 65 6d 6f  returned in memo
4990: 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
49a0: 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 20 7a 49   malloc()..** zI
49b0: 6e 2c 20 69 66 20 69 74 20 77 61 73 20 6e 6f 74  n, if it was not
49c0: 20 4e 55 4c 4c 2c 20 69 73 20 66 72 65 65 64 2e   NULL, is freed.
49d0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 68  .**.** If the th
49e0: 69 72 64 20 61 72 67 75 6d 65 6e 74 2c 20 71 75  ird argument, qu
49f0: 6f 74 65 2c 20 69 73 20 6e 6f 74 20 27 5c 30 27  ote, is not '\0'
4a00: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 75 73 65  , then it is use
4a10: 64 20 61 73 20 61 0a 2a 2a 20 71 75 6f 74 65 20  d as a.** quote 
4a20: 63 68 61 72 61 63 74 65 72 20 66 6f 72 20 7a 41  character for zA
4a30: 70 70 65 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  ppend..*/.static
4a40: 20 76 6f 69 64 20 61 70 70 65 6e 64 54 65 78 74   void appendText
4a50: 28 53 68 65 6c 6c 54 65 78 74 20 2a 70 2c 20 63  (ShellText *p, c
4a60: 68 61 72 20 63 6f 6e 73 74 20 2a 7a 41 70 70 65  har const *zAppe
4a70: 6e 64 2c 20 63 68 61 72 20 71 75 6f 74 65 29 7b  nd, char quote){
4a80: 0a 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 69 6e  .  int len;.  in
4a90: 74 20 69 3b 0a 20 20 69 6e 74 20 6e 41 70 70 65  t i;.  int nAppe
4aa0: 6e 64 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 41  nd = strlen30(zA
4ab0: 70 70 65 6e 64 29 3b 0a 0a 20 20 6c 65 6e 20 3d  ppend);..  len =
4ac0: 20 6e 41 70 70 65 6e 64 2b 70 2d 3e 6e 2b 31 3b   nAppend+p->n+1;
4ad0: 0a 20 20 69 66 28 20 71 75 6f 74 65 20 29 7b 0a  .  if( quote ){.
4ae0: 20 20 20 20 6c 65 6e 20 2b 3d 20 32 3b 0a 20 20      len += 2;.  
4af0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 70    for(i=0; i<nAp
4b00: 70 65 6e 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  pend; i++){.    
4b10: 20 20 69 66 28 20 7a 41 70 70 65 6e 64 5b 69 5d    if( zAppend[i]
4b20: 3d 3d 71 75 6f 74 65 20 29 20 6c 65 6e 2b 2b 3b  ==quote ) len++;
4b30: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66  .    }.  }..  if
4b40: 28 20 70 2d 3e 6e 2b 6c 65 6e 3e 3d 70 2d 3e 6e  ( p->n+len>=p->n
4b50: 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 70 2d 3e  Alloc ){.    p->
4b60: 6e 41 6c 6c 6f 63 20 3d 20 70 2d 3e 6e 41 6c 6c  nAlloc = p->nAll
4b70: 6f 63 2a 32 20 2b 20 6c 65 6e 20 2b 20 32 30 3b  oc*2 + len + 20;
4b80: 0a 20 20 20 20 70 2d 3e 7a 20 3d 20 72 65 61 6c  .    p->z = real
4b90: 6c 6f 63 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c  loc(p->z, p->nAl
4ba0: 6c 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  loc);.    if( p-
4bb0: 3e 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6d  >z==0 ){.      m
4bc0: 65 6d 73 65 74 28 70 2c 20 30 2c 20 73 69 7a 65  emset(p, 0, size
4bd0: 6f 66 28 2a 70 29 29 3b 0a 20 20 20 20 20 20 72  of(*p));.      r
4be0: 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  eturn;.    }.  }
4bf0: 0a 0a 20 20 69 66 28 20 71 75 6f 74 65 20 29 7b  ..  if( quote ){
4c00: 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 73 72 20  .    char *zCsr 
4c10: 3d 20 70 2d 3e 7a 2b 70 2d 3e 6e 3b 0a 20 20 20  = p->z+p->n;.   
4c20: 20 2a 7a 43 73 72 2b 2b 20 3d 20 71 75 6f 74 65   *zCsr++ = quote
4c30: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
4c40: 3c 6e 41 70 70 65 6e 64 3b 20 69 2b 2b 29 7b 0a  <nAppend; i++){.
4c50: 20 20 20 20 20 20 2a 7a 43 73 72 2b 2b 20 3d 20        *zCsr++ = 
4c60: 7a 41 70 70 65 6e 64 5b 69 5d 3b 0a 20 20 20 20  zAppend[i];.    
4c70: 20 20 69 66 28 20 7a 41 70 70 65 6e 64 5b 69 5d    if( zAppend[i]
4c80: 3d 3d 71 75 6f 74 65 20 29 20 2a 7a 43 73 72 2b  ==quote ) *zCsr+
4c90: 2b 20 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20 7d  + = quote;.    }
4ca0: 0a 20 20 20 20 2a 7a 43 73 72 2b 2b 20 3d 20 71  .    *zCsr++ = q
4cb0: 75 6f 74 65 3b 0a 20 20 20 20 70 2d 3e 6e 20 3d  uote;.    p->n =
4cc0: 20 28 69 6e 74 29 28 7a 43 73 72 20 2d 20 70 2d   (int)(zCsr - p-
4cd0: 3e 7a 29 3b 0a 20 20 20 20 2a 7a 43 73 72 20 3d  >z);.    *zCsr =
4ce0: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 7b 0a   '\0';.  }else{.
4cf0: 20 20 20 20 6d 65 6d 63 70 79 28 70 2d 3e 7a 2b      memcpy(p->z+
4d00: 70 2d 3e 6e 2c 20 7a 41 70 70 65 6e 64 2c 20 6e  p->n, zAppend, n
4d10: 41 70 70 65 6e 64 29 3b 0a 20 20 20 20 70 2d 3e  Append);.    p->
4d20: 6e 20 2b 3d 20 6e 41 70 70 65 6e 64 3b 0a 20 20  n += nAppend;.  
4d30: 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d 20 27    p->z[p->n] = '
4d40: 5c 30 27 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  \0';.  }.}../*.*
4d50: 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74  * Attempt to det
4d60: 65 72 6d 69 6e 65 20 69 66 20 69 64 65 6e 74 69  ermine if identi
4d70: 66 69 65 72 20 7a 4e 61 6d 65 20 6e 65 65 64 73  fier zName needs
4d80: 20 74 6f 20 62 65 20 71 75 6f 74 65 64 2c 20 65   to be quoted, e
4d90: 69 74 68 65 72 0a 2a 2a 20 62 65 63 61 75 73 65  ither.** because
4da0: 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 6e   it contains non
4db0: 2d 61 6c 70 68 61 6e 75 6d 65 72 69 63 20 63 68  -alphanumeric ch
4dc0: 61 72 61 63 74 65 72 73 2c 20 6f 72 20 62 65 63  aracters, or bec
4dd0: 61 75 73 65 20 69 74 20 69 73 20 61 6e 0a 2a 2a  ause it is an.**
4de0: 20 53 51 4c 69 74 65 20 6b 65 79 77 6f 72 64 2e   SQLite keyword.
4df0: 20 20 42 65 20 63 6f 6e 73 65 72 76 61 74 69 76    Be conservativ
4e00: 65 20 69 6e 20 74 68 69 73 20 65 73 74 69 6d 61  e in this estima
4e10: 74 65 3a 20 20 57 68 65 6e 20 69 6e 20 64 6f 75  te:  When in dou
4e20: 62 74 20 61 73 73 75 6d 65 0a 2a 2a 20 74 68 61  bt assume.** tha
4e30: 74 20 71 75 6f 74 69 6e 67 20 69 73 20 72 65 71  t quoting is req
4e40: 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 65 74  uired..**.** Ret
4e50: 75 72 6e 20 27 22 27 20 69 66 20 71 75 6f 74 69  urn '"' if quoti
4e60: 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 20  ng is required. 
4e70: 20 52 65 74 75 72 6e 20 30 20 69 66 20 6e 6f 20   Return 0 if no 
4e80: 71 75 6f 74 69 6e 67 20 69 73 20 72 65 71 75 69  quoting is requi
4e90: 72 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  red..*/.static c
4ea0: 68 61 72 20 71 75 6f 74 65 43 68 61 72 28 63 6f  har quoteChar(co
4eb0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29  nst char *zName)
4ec0: 7b 0a 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 69 74  {.  /* All SQLit
4ed0: 65 20 6b 65 79 77 6f 72 64 73 2c 20 69 6e 20 61  e keywords, in a
4ee0: 6c 70 68 61 62 65 74 69 63 61 6c 20 6f 72 64 65  lphabetical orde
4ef0: 72 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f  r */.  static co
4f00: 6e 73 74 20 63 68 61 72 20 2a 61 7a 4b 65 79 77  nst char *azKeyw
4f10: 6f 72 64 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 22  ords[] = {.    "
4f20: 41 42 4f 52 54 22 2c 20 22 41 43 54 49 4f 4e 22  ABORT", "ACTION"
4f30: 2c 20 22 41 44 44 22 2c 20 22 41 46 54 45 52 22  , "ADD", "AFTER"
4f40: 2c 20 22 41 4c 4c 22 2c 20 22 41 4c 54 45 52 22  , "ALL", "ALTER"
4f50: 2c 20 22 41 4e 41 4c 59 5a 45 22 2c 20 22 41 4e  , "ANALYZE", "AN
4f60: 44 22 2c 20 22 41 53 22 2c 0a 20 20 20 20 22 41  D", "AS",.    "A
4f70: 53 43 22 2c 20 22 41 54 54 41 43 48 22 2c 20 22  SC", "ATTACH", "
4f80: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 22 2c 20  AUTOINCREMENT", 
4f90: 22 42 45 46 4f 52 45 22 2c 20 22 42 45 47 49 4e  "BEFORE", "BEGIN
4fa0: 22 2c 20 22 42 45 54 57 45 45 4e 22 2c 20 22 42  ", "BETWEEN", "B
4fb0: 59 22 2c 0a 20 20 20 20 22 43 41 53 43 41 44 45  Y",.    "CASCADE
4fc0: 22 2c 20 22 43 41 53 45 22 2c 20 22 43 41 53 54  ", "CASE", "CAST
4fd0: 22 2c 20 22 43 48 45 43 4b 22 2c 20 22 43 4f 4c  ", "CHECK", "COL
4fe0: 4c 41 54 45 22 2c 20 22 43 4f 4c 55 4d 4e 22 2c  LATE", "COLUMN",
4ff0: 20 22 43 4f 4d 4d 49 54 22 2c 0a 20 20 20 20 22   "COMMIT",.    "
5000: 43 4f 4e 46 4c 49 43 54 22 2c 20 22 43 4f 4e 53  CONFLICT", "CONS
5010: 54 52 41 49 4e 54 22 2c 20 22 43 52 45 41 54 45  TRAINT", "CREATE
5020: 22 2c 20 22 43 52 4f 53 53 22 2c 20 22 43 55 52  ", "CROSS", "CUR
5030: 52 45 4e 54 5f 44 41 54 45 22 2c 0a 20 20 20 20  RENT_DATE",.    
5040: 22 43 55 52 52 45 4e 54 5f 54 49 4d 45 22 2c 20  "CURRENT_TIME", 
5050: 22 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41  "CURRENT_TIMESTA
5060: 4d 50 22 2c 20 22 44 41 54 41 42 41 53 45 22 2c  MP", "DATABASE",
5070: 20 22 44 45 46 41 55 4c 54 22 2c 20 22 44 45 46   "DEFAULT", "DEF
5080: 45 52 52 41 42 4c 45 22 2c 0a 20 20 20 20 22 44  ERRABLE",.    "D
5090: 45 46 45 52 52 45 44 22 2c 20 22 44 45 4c 45 54  EFERRED", "DELET
50a0: 45 22 2c 20 22 44 45 53 43 22 2c 20 22 44 45 54  E", "DESC", "DET
50b0: 41 43 48 22 2c 20 22 44 49 53 54 49 4e 43 54 22  ACH", "DISTINCT"
50c0: 2c 20 22 44 52 4f 50 22 2c 20 22 45 41 43 48 22  , "DROP", "EACH"
50d0: 2c 0a 20 20 20 20 22 45 4c 53 45 22 2c 20 22 45  ,.    "ELSE", "E
50e0: 4e 44 22 2c 20 22 45 53 43 41 50 45 22 2c 20 22  ND", "ESCAPE", "
50f0: 45 58 43 45 50 54 22 2c 20 22 45 58 43 4c 55 53  EXCEPT", "EXCLUS
5100: 49 56 45 22 2c 20 22 45 58 49 53 54 53 22 2c 20  IVE", "EXISTS", 
5110: 22 45 58 50 4c 41 49 4e 22 2c 0a 20 20 20 20 22  "EXPLAIN",.    "
5120: 46 41 49 4c 22 2c 20 22 46 4f 52 22 2c 20 22 46  FAIL", "FOR", "F
5130: 4f 52 45 49 47 4e 22 2c 20 22 46 52 4f 4d 22 2c  OREIGN", "FROM",
5140: 20 22 46 55 4c 4c 22 2c 20 22 47 4c 4f 42 22 2c   "FULL", "GLOB",
5150: 20 22 47 52 4f 55 50 22 2c 20 22 48 41 56 49 4e   "GROUP", "HAVIN
5160: 47 22 2c 20 22 49 46 22 2c 0a 20 20 20 20 22 49  G", "IF",.    "I
5170: 47 4e 4f 52 45 22 2c 20 22 49 4d 4d 45 44 49 41  GNORE", "IMMEDIA
5180: 54 45 22 2c 20 22 49 4e 22 2c 20 22 49 4e 44 45  TE", "IN", "INDE
5190: 58 22 2c 20 22 49 4e 44 45 58 45 44 22 2c 20 22  X", "INDEXED", "
51a0: 49 4e 49 54 49 41 4c 4c 59 22 2c 20 22 49 4e 4e  INITIALLY", "INN
51b0: 45 52 22 2c 0a 20 20 20 20 22 49 4e 53 45 52 54  ER",.    "INSERT
51c0: 22 2c 20 22 49 4e 53 54 45 41 44 22 2c 20 22 49  ", "INSTEAD", "I
51d0: 4e 54 45 52 53 45 43 54 22 2c 20 22 49 4e 54 4f  NTERSECT", "INTO
51e0: 22 2c 20 22 49 53 22 2c 20 22 49 53 4e 55 4c 4c  ", "IS", "ISNULL
51f0: 22 2c 20 22 4a 4f 49 4e 22 2c 20 22 4b 45 59 22  ", "JOIN", "KEY"
5200: 2c 0a 20 20 20 20 22 4c 45 46 54 22 2c 20 22 4c  ,.    "LEFT", "L
5210: 49 4b 45 22 2c 20 22 4c 49 4d 49 54 22 2c 20 22  IKE", "LIMIT", "
5220: 4d 41 54 43 48 22 2c 20 22 4e 41 54 55 52 41 4c  MATCH", "NATURAL
5230: 22 2c 20 22 4e 4f 22 2c 20 22 4e 4f 54 22 2c 20  ", "NO", "NOT", 
5240: 22 4e 4f 54 4e 55 4c 4c 22 2c 0a 20 20 20 20 22  "NOTNULL",.    "
5250: 4e 55 4c 4c 22 2c 20 22 4f 46 22 2c 20 22 4f 46  NULL", "OF", "OF
5260: 46 53 45 54 22 2c 20 22 4f 4e 22 2c 20 22 4f 52  FSET", "ON", "OR
5270: 22 2c 20 22 4f 52 44 45 52 22 2c 20 22 4f 55 54  ", "ORDER", "OUT
5280: 45 52 22 2c 20 22 50 4c 41 4e 22 2c 20 22 50 52  ER", "PLAN", "PR
5290: 41 47 4d 41 22 2c 0a 20 20 20 20 22 50 52 49 4d  AGMA",.    "PRIM
52a0: 41 52 59 22 2c 20 22 51 55 45 52 59 22 2c 20 22  ARY", "QUERY", "
52b0: 52 41 49 53 45 22 2c 20 22 52 45 43 55 52 53 49  RAISE", "RECURSI
52c0: 56 45 22 2c 20 22 52 45 46 45 52 45 4e 43 45 53  VE", "REFERENCES
52d0: 22 2c 20 22 52 45 47 45 58 50 22 2c 0a 20 20 20  ", "REGEXP",.   
52e0: 20 22 52 45 49 4e 44 45 58 22 2c 20 22 52 45 4c   "REINDEX", "REL
52f0: 45 41 53 45 22 2c 20 22 52 45 4e 41 4d 45 22 2c  EASE", "RENAME",
5300: 20 22 52 45 50 4c 41 43 45 22 2c 20 22 52 45 53   "REPLACE", "RES
5310: 54 52 49 43 54 22 2c 20 22 52 49 47 48 54 22 2c  TRICT", "RIGHT",
5320: 0a 20 20 20 20 22 52 4f 4c 4c 42 41 43 4b 22 2c  .    "ROLLBACK",
5330: 20 22 52 4f 57 22 2c 20 22 53 41 56 45 50 4f 49   "ROW", "SAVEPOI
5340: 4e 54 22 2c 20 22 53 45 4c 45 43 54 22 2c 20 22  NT", "SELECT", "
5350: 53 45 54 22 2c 20 22 54 41 42 4c 45 22 2c 20 22  SET", "TABLE", "
5360: 54 45 4d 50 22 2c 0a 20 20 20 20 22 54 45 4d 50  TEMP",.    "TEMP
5370: 4f 52 41 52 59 22 2c 20 22 54 48 45 4e 22 2c 20  ORARY", "THEN", 
5380: 22 54 4f 22 2c 20 22 54 52 41 4e 53 41 43 54 49  "TO", "TRANSACTI
5390: 4f 4e 22 2c 20 22 54 52 49 47 47 45 52 22 2c 20  ON", "TRIGGER", 
53a0: 22 55 4e 49 4f 4e 22 2c 20 22 55 4e 49 51 55 45  "UNION", "UNIQUE
53b0: 22 2c 0a 20 20 20 20 22 55 50 44 41 54 45 22 2c  ",.    "UPDATE",
53c0: 20 22 55 53 49 4e 47 22 2c 20 22 56 41 43 55 55   "USING", "VACUU
53d0: 4d 22 2c 20 22 56 41 4c 55 45 53 22 2c 20 22 56  M", "VALUES", "V
53e0: 49 45 57 22 2c 20 22 56 49 52 54 55 41 4c 22 2c  IEW", "VIRTUAL",
53f0: 20 22 57 48 45 4e 22 2c 20 22 57 48 45 52 45 22   "WHEN", "WHERE"
5400: 2c 0a 20 20 20 20 22 57 49 54 48 22 2c 20 22 57  ,.    "WITH", "W
5410: 49 54 48 4f 55 54 22 2c 0a 20 20 7d 3b 0a 20 20  ITHOUT",.  };.  
5420: 69 6e 74 20 69 2c 20 6c 77 72 2c 20 75 70 72 2c  int i, lwr, upr,
5430: 20 6d 69 64 2c 20 63 3b 0a 20 20 69 66 28 20 21   mid, c;.  if( !
5440: 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65  isalpha((unsigne
5450: 64 20 63 68 61 72 29 7a 4e 61 6d 65 5b 30 5d 29  d char)zName[0])
5460: 20 26 26 20 7a 4e 61 6d 65 5b 30 5d 21 3d 27 5f   && zName[0]!='_
5470: 27 20 29 20 72 65 74 75 72 6e 20 27 22 27 3b 0a  ' ) return '"';.
5480: 20 20 66 6f 72 28 69 3d 30 3b 20 7a 4e 61 6d 65    for(i=0; zName
5490: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  [i]; i++){.    i
54a0: 66 28 20 21 69 73 61 6c 6e 75 6d 28 28 75 6e 73  f( !isalnum((uns
54b0: 69 67 6e 65 64 20 63 68 61 72 29 7a 4e 61 6d 65  igned char)zName
54c0: 5b 69 5d 29 20 26 26 20 7a 4e 61 6d 65 5b 69 5d  [i]) && zName[i]
54d0: 21 3d 27 5f 27 20 29 20 72 65 74 75 72 6e 20 27  !='_' ) return '
54e0: 22 27 3b 0a 20 20 7d 0a 20 20 6c 77 72 20 3d 20  "';.  }.  lwr = 
54f0: 30 3b 0a 20 20 75 70 72 20 3d 20 73 69 7a 65 6f  0;.  upr = sizeo
5500: 66 28 61 7a 4b 65 79 77 6f 72 64 73 29 2f 73 69  f(azKeywords)/si
5510: 7a 65 6f 66 28 61 7a 4b 65 79 77 6f 72 64 73 5b  zeof(azKeywords[
5520: 30 5d 29 20 2d 20 31 3b 0a 20 20 77 68 69 6c 65  0]) - 1;.  while
5530: 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20  ( lwr<=upr ){.  
5540: 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72    mid = (lwr+upr
5550: 29 2f 32 3b 0a 20 20 20 20 63 20 3d 20 73 71 6c  )/2;.    c = sql
5560: 69 74 65 33 5f 73 74 72 69 63 6d 70 28 61 7a 4b  ite3_stricmp(azK
5570: 65 79 77 6f 72 64 73 5b 6d 69 64 5d 2c 20 7a 4e  eywords[mid], zN
5580: 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 63 3d  ame);.    if( c=
5590: 3d 30 20 29 20 72 65 74 75 72 6e 20 27 22 27 3b  =0 ) return '"';
55a0: 0a 20 20 20 20 69 66 28 20 63 3c 30 20 29 7b 0a  .    if( c<0 ){.
55b0: 20 20 20 20 20 20 6c 77 72 20 3d 20 6d 69 64 2b        lwr = mid+
55c0: 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
55d0: 20 20 20 20 75 70 72 20 3d 20 6d 69 64 2d 31 3b      upr = mid-1;
55e0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
55f0: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
5600: 43 6f 6e 73 74 72 75 63 74 20 61 20 66 61 6b 65  Construct a fake
5610: 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 61 6e 64   object name and
5620: 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 74 6f 20   column list to 
5630: 64 65 73 63 72 69 62 65 20 74 68 65 20 73 74 72  describe the str
5640: 75 63 74 75 72 65 0a 2a 2a 20 6f 66 20 74 68 65  ucture.** of the
5650: 20 76 69 65 77 2c 20 76 69 72 74 75 61 6c 20 74   view, virtual t
5660: 61 62 6c 65 2c 20 6f 72 20 74 61 62 6c 65 20 76  able, or table v
5670: 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 20 7a  alued function z
5680: 53 63 68 65 6d 61 2e 7a 4e 61 6d 65 2e 0a 2a 2f  Schema.zName..*/
5690: 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 73 68  .static char *sh
56a0: 65 6c 6c 46 61 6b 65 53 63 68 65 6d 61 28 0a 20  ellFakeSchema(. 
56b0: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20   sqlite3 *db,   
56c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
56d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
56e0: 69 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ion containing t
56f0: 68 65 20 76 74 61 62 20 2a 2f 0a 20 20 63 6f 6e  he vtab */.  con
5700: 73 74 20 63 68 61 72 20 2a 7a 53 63 68 65 6d 61  st char *zSchema
5710: 2c 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 6f  ,    /* Schema o
5720: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
5730: 6f 6c 64 69 6e 67 20 74 68 65 20 76 74 61 62 20  olding the vtab 
5740: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
5750: 2a 7a 4e 61 6d 65 20 20 20 20 20 20 20 2f 2a 20  *zName       /* 
5760: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
5770: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
5780: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
5790: 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20  mt *pStmt = 0;. 
57a0: 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 53   char *zSql;.  S
57b0: 68 65 6c 6c 54 65 78 74 20 73 3b 0a 20 20 63 68  hellText s;.  ch
57c0: 61 72 20 63 51 75 6f 74 65 3b 0a 20 20 63 68 61  ar cQuote;.  cha
57d0: 72 20 2a 7a 44 69 76 20 3d 20 22 28 22 3b 0a 20  r *zDiv = "(";. 
57e0: 20 69 6e 74 20 6e 52 6f 77 20 3d 20 30 3b 0a 0a   int nRow = 0;..
57f0: 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
5800: 5f 6d 70 72 69 6e 74 66 28 22 50 52 41 47 4d 41  _mprintf("PRAGMA
5810: 20 5c 22 25 77 5c 22 2e 74 61 62 6c 65 5f 69 6e   \"%w\".table_in
5820: 66 6f 3d 25 51 3b 22 2c 0a 20 20 20 20 20 20 20  fo=%Q;",.       
5830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5840: 20 20 7a 53 63 68 65 6d 61 20 3f 20 7a 53 63 68    zSchema ? zSch
5850: 65 6d 61 20 3a 20 22 6d 61 69 6e 22 2c 20 7a 4e  ema : "main", zN
5860: 61 6d 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  ame);.  sqlite3_
5870: 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a  prepare_v2(db, z
5880: 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
5890: 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66   0);.  sqlite3_f
58a0: 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 69 6e 69  ree(zSql);.  ini
58b0: 74 54 65 78 74 28 26 73 29 3b 0a 20 20 69 66 28  tText(&s);.  if(
58c0: 20 7a 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20   zSchema ){.    
58d0: 63 51 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68  cQuote = quoteCh
58e0: 61 72 28 7a 53 63 68 65 6d 61 29 3b 0a 20 20 20  ar(zSchema);.   
58f0: 20 69 66 28 20 63 51 75 6f 74 65 20 26 26 20 73   if( cQuote && s
5900: 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a  qlite3_stricmp(z
5910: 53 63 68 65 6d 61 2c 22 74 65 6d 70 22 29 3d 3d  Schema,"temp")==
5920: 30 20 29 20 63 51 75 6f 74 65 20 3d 20 30 3b 0a  0 ) cQuote = 0;.
5930: 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
5940: 73 2c 20 7a 53 63 68 65 6d 61 2c 20 63 51 75 6f  s, zSchema, cQuo
5950: 74 65 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  te);.    appendT
5960: 65 78 74 28 26 73 2c 20 22 2e 22 2c 20 30 29 3b  ext(&s, ".", 0);
5970: 0a 20 20 7d 0a 20 20 63 51 75 6f 74 65 20 3d 20  .  }.  cQuote = 
5980: 71 75 6f 74 65 43 68 61 72 28 7a 4e 61 6d 65 29  quoteChar(zName)
5990: 3b 0a 20 20 61 70 70 65 6e 64 54 65 78 74 28 26  ;.  appendText(&
59a0: 73 2c 20 7a 4e 61 6d 65 2c 20 63 51 75 6f 74 65  s, zName, cQuote
59b0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 73 71 6c 69  );.  while( sqli
59c0: 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3d  te3_step(pStmt)=
59d0: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20  =SQLITE_ROW ){. 
59e0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
59f0: 43 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  Col = (const cha
5a00: 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
5a10: 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 29  n_text(pStmt, 1)
5a20: 3b 0a 20 20 20 20 6e 52 6f 77 2b 2b 3b 0a 20 20  ;.    nRow++;.  
5a30: 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c    appendText(&s,
5a40: 20 7a 44 69 76 2c 20 30 29 3b 0a 20 20 20 20 7a   zDiv, 0);.    z
5a50: 44 69 76 20 3d 20 22 2c 22 3b 0a 20 20 20 20 63  Div = ",";.    c
5a60: 51 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61  Quote = quoteCha
5a70: 72 28 7a 43 6f 6c 29 3b 0a 20 20 20 20 61 70 70  r(zCol);.    app
5a80: 65 6e 64 54 65 78 74 28 26 73 2c 20 7a 43 6f 6c  endText(&s, zCol
5a90: 2c 20 63 51 75 6f 74 65 29 3b 0a 20 20 7d 0a 20  , cQuote);.  }. 
5aa0: 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20   appendText(&s, 
5ab0: 22 29 22 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  ")", 0);.  sqlit
5ac0: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
5ad0: 74 29 3b 0a 20 20 69 66 28 20 6e 52 6f 77 3d 3d  t);.  if( nRow==
5ae0: 30 20 29 7b 0a 20 20 20 20 66 72 65 65 54 65 78  0 ){.    freeTex
5af0: 74 28 26 73 29 3b 0a 20 20 20 20 73 2e 7a 20 3d  t(&s);.    s.z =
5b00: 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   0;.  }.  return
5b10: 20 73 2e 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53   s.z;.}../*.** S
5b20: 51 4c 20 66 75 6e 63 74 69 6f 6e 3a 20 20 73 68  QL function:  sh
5b30: 65 6c 6c 5f 6d 6f 64 75 6c 65 5f 73 63 68 65 6d  ell_module_schem
5b40: 61 28 58 29 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  a(X).**.** Retur
5b50: 6e 20 61 20 66 61 6b 65 20 73 63 68 65 6d 61 20  n a fake schema 
5b60: 66 6f 72 20 74 68 65 20 74 61 62 6c 65 2d 76 61  for the table-va
5b70: 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72  lued function or
5b80: 20 65 70 6f 6e 79 6d 6f 75 73 20 76 69 72 74 75   eponymous virtu
5b90: 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 58 2e 0a 2a  al.** table X..*
5ba0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 68  /.static void sh
5bb0: 65 6c 6c 4d 6f 64 75 6c 65 53 63 68 65 6d 61 28  ellModuleSchema(
5bc0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
5bd0: 78 74 20 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20  xt *pCtx,.  int 
5be0: 6e 56 61 6c 2c 0a 20 20 73 71 6c 69 74 65 33 5f  nVal,.  sqlite3_
5bf0: 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 0a 29 7b  value **apVal.){
5c00: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
5c10: 4e 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20 63 68  Name = (const ch
5c20: 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
5c30: 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 30 5d 29  e_text(apVal[0])
5c40: 3b 0a 20 20 63 68 61 72 20 2a 7a 46 61 6b 65 20  ;.  char *zFake 
5c50: 3d 20 73 68 65 6c 6c 46 61 6b 65 53 63 68 65 6d  = shellFakeSchem
5c60: 61 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  a(sqlite3_contex
5c70: 74 5f 64 62 5f 68 61 6e 64 6c 65 28 70 43 74 78  t_db_handle(pCtx
5c80: 29 2c 20 30 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20  ), 0, zName);.  
5c90: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
5ca0: 28 6e 56 61 6c 29 3b 0a 20 20 69 66 28 20 7a 46  (nVal);.  if( zF
5cb0: 61 6b 65 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ake ){.    sqlit
5cc0: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70  e3_result_text(p
5cd0: 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 6d 70 72  Ctx, sqlite3_mpr
5ce0: 69 6e 74 66 28 22 2f 2a 20 25 73 20 2a 2f 22 2c  intf("/* %s */",
5cf0: 20 7a 46 61 6b 65 29 2c 0a 20 20 20 20 20 20 20   zFake),.       
5d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d10: 20 2d 31 2c 20 73 71 6c 69 74 65 33 5f 66 72 65   -1, sqlite3_fre
5d20: 65 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 46 61  e);.    free(zFa
5d30: 6b 65 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ke);.  }.}../*.*
5d40: 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 3a 20  * SQL function: 
5d50: 20 73 68 65 6c 6c 5f 61 64 64 5f 73 63 68 65 6d   shell_add_schem
5d60: 61 28 53 2c 58 29 0a 2a 2a 0a 2a 2a 20 41 64 64  a(S,X).**.** Add
5d70: 20 74 68 65 20 73 63 68 65 6d 61 20 6e 61 6d 65   the schema name
5d80: 20 58 20 74 6f 20 74 68 65 20 43 52 45 41 54 45   X to the CREATE
5d90: 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 53 20   statement in S 
5da0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
5db0: 65 73 75 6c 74 2e 0a 2a 2a 20 45 78 61 6d 70 6c  esult..** Exampl
5dc0: 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 43 52 45  es:.**.**    CRE
5dd0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 20  ATE TABLE t1(x) 
5de0: 20 20 2d 3e 20 20 20 43 52 45 41 54 45 20 54 41    ->   CREATE TA
5df0: 42 4c 45 20 78 79 7a 2e 74 31 28 78 29 3b 0a 2a  BLE xyz.t1(x);.*
5e00: 2a 0a 2a 2a 20 41 6c 73 6f 20 77 6f 72 6b 73 20  *.** Also works 
5e10: 6f 6e 0a 2a 2a 0a 2a 2a 20 20 20 20 43 52 45 41  on.**.**    CREA
5e20: 54 45 20 49 4e 44 45 58 0a 2a 2a 20 20 20 20 43  TE INDEX.**    C
5e30: 52 45 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44  REATE UNIQUE IND
5e40: 45 58 0a 2a 2a 20 20 20 20 43 52 45 41 54 45 20  EX.**    CREATE 
5e50: 56 49 45 57 0a 2a 2a 20 20 20 20 43 52 45 41 54  VIEW.**    CREAT
5e60: 45 20 54 52 49 47 47 45 52 0a 2a 2a 20 20 20 20  E TRIGGER.**    
5e70: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
5e80: 41 42 4c 45 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ABLE.**.** This 
5e90: 55 44 46 20 69 73 20 75 73 65 64 20 62 79 20 74  UDF is used by t
5ea0: 68 65 20 2e 73 63 68 65 6d 61 20 63 6f 6d 6d 61  he .schema comma
5eb0: 6e 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65  nd to insert the
5ec0: 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 6f 66 0a   schema name of.
5ed0: 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
5ee0: 62 61 73 65 73 20 69 6e 74 6f 20 74 68 65 20 6d  bases into the m
5ef0: 69 64 64 6c 65 20 6f 66 20 74 68 65 20 73 71 6c  iddle of the sql
5f00: 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 66  ite_master.sql f
5f10: 69 65 6c 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ield..*/.static 
5f20: 76 6f 69 64 20 73 68 65 6c 6c 41 64 64 53 63 68  void shellAddSch
5f30: 65 6d 61 4e 61 6d 65 28 0a 20 20 73 71 6c 69 74  emaName(.  sqlit
5f40: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
5f50: 2c 0a 20 20 69 6e 74 20 6e 56 61 6c 2c 0a 20 20  ,.  int nVal,.  
5f60: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
5f70: 61 70 56 61 6c 0a 29 7b 0a 20 20 73 74 61 74 69  apVal.){.  stati
5f80: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 50  c const char *aP
5f90: 72 65 66 69 78 5b 5d 20 3d 20 7b 0a 20 20 20 20  refix[] = {.    
5fa0: 20 22 54 41 42 4c 45 22 2c 0a 20 20 20 20 20 22   "TABLE",.     "
5fb0: 49 4e 44 45 58 22 2c 0a 20 20 20 20 20 22 55 4e  INDEX",.     "UN
5fc0: 49 51 55 45 20 49 4e 44 45 58 22 2c 0a 20 20 20  IQUE INDEX",.   
5fd0: 20 20 22 56 49 45 57 22 2c 0a 20 20 20 20 20 22    "VIEW",.     "
5fe0: 54 52 49 47 47 45 52 22 2c 0a 20 20 20 20 20 22  TRIGGER",.     "
5ff0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 22 0a 20  VIRTUAL TABLE". 
6000: 20 7d 3b 0a 20 20 69 6e 74 20 69 20 3d 20 30 3b   };.  int i = 0;
6010: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
6020: 49 6e 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  In = (const char
6030: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
6040: 74 65 78 74 28 61 70 56 61 6c 5b 30 5d 29 3b 0a  text(apVal[0]);.
6050: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
6060: 63 68 65 6d 61 20 3d 20 28 63 6f 6e 73 74 20 63  chema = (const c
6070: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
6080: 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 31 5d  ue_text(apVal[1]
6090: 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  );.  const char 
60a0: 2a 7a 4e 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20  *zName = (const 
60b0: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
60c0: 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 32  lue_text(apVal[2
60d0: 5d 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  ]);.  sqlite3 *d
60e0: 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  b = sqlite3_cont
60f0: 65 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28 70 43  ext_db_handle(pC
6100: 74 78 29 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41  tx);.  UNUSED_PA
6110: 52 41 4d 45 54 45 52 28 6e 56 61 6c 29 3b 0a 20  RAMETER(nVal);. 
6120: 20 69 66 28 20 7a 49 6e 21 3d 30 20 26 26 20 73   if( zIn!=0 && s
6130: 74 72 6e 63 6d 70 28 7a 49 6e 2c 20 22 43 52 45  trncmp(zIn, "CRE
6140: 41 54 45 20 22 2c 20 37 29 3d 3d 30 20 29 7b 0a  ATE ", 7)==0 ){.
6150: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 28      for(i=0; i<(
6160: 69 6e 74 29 28 73 69 7a 65 6f 66 28 61 50 72 65  int)(sizeof(aPre
6170: 66 69 78 29 2f 73 69 7a 65 6f 66 28 61 50 72 65  fix)/sizeof(aPre
6180: 66 69 78 5b 30 5d 29 29 3b 20 69 2b 2b 29 7b 0a  fix[0])); i++){.
6190: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 74        int n = st
61a0: 72 6c 65 6e 33 30 28 61 50 72 65 66 69 78 5b 69  rlen30(aPrefix[i
61b0: 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74  ]);.      if( st
61c0: 72 6e 63 6d 70 28 7a 49 6e 2b 37 2c 20 61 50 72  rncmp(zIn+7, aPr
61d0: 65 66 69 78 5b 69 5d 2c 20 6e 29 3d 3d 30 20 26  efix[i], n)==0 &
61e0: 26 20 7a 49 6e 5b 6e 2b 37 5d 3d 3d 27 20 27 20  & zIn[n+7]==' ' 
61f0: 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20  ){.        char 
6200: 2a 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  *z = 0;.        
6210: 63 68 61 72 20 2a 7a 46 61 6b 65 20 3d 20 30 3b  char *zFake = 0;
6220: 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 53 63  .        if( zSc
6230: 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20 20 20  hema ){.        
6240: 20 20 63 68 61 72 20 63 51 75 6f 74 65 20 3d 20    char cQuote = 
6250: 71 75 6f 74 65 43 68 61 72 28 7a 53 63 68 65 6d  quoteChar(zSchem
6260: 61 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  a);.          if
6270: 28 20 63 51 75 6f 74 65 20 26 26 20 73 71 6c 69  ( cQuote && sqli
6280: 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 53 63 68  te3_stricmp(zSch
6290: 65 6d 61 2c 22 74 65 6d 70 22 29 21 3d 30 20 29  ema,"temp")!=0 )
62a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 20  {.            z 
62b0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
62c0: 66 28 22 25 2e 2a 73 20 5c 22 25 77 5c 22 2e 25  f("%.*s \"%w\".%
62d0: 73 22 2c 20 6e 2b 37 2c 20 7a 49 6e 2c 20 7a 53  s", n+7, zIn, zS
62e0: 63 68 65 6d 61 2c 20 7a 49 6e 2b 6e 2b 38 29 3b  chema, zIn+n+8);
62f0: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
6300: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 20  {.            z 
6310: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
6320: 66 28 22 25 2e 2a 73 20 25 73 2e 25 73 22 2c 20  f("%.*s %s.%s", 
6330: 6e 2b 37 2c 20 7a 49 6e 2c 20 7a 53 63 68 65 6d  n+7, zIn, zSchem
6340: 61 2c 20 7a 49 6e 2b 6e 2b 38 29 3b 0a 20 20 20  a, zIn+n+8);.   
6350: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
6360: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a   }.        if( z
6370: 4e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 26 26  Name.         &&
6380: 20 61 50 72 65 66 69 78 5b 69 5d 5b 30 5d 3d 3d   aPrefix[i][0]==
6390: 27 56 27 0a 20 20 20 20 20 20 20 20 20 26 26 20  'V'.         && 
63a0: 28 7a 46 61 6b 65 20 3d 20 73 68 65 6c 6c 46 61  (zFake = shellFa
63b0: 6b 65 53 63 68 65 6d 61 28 64 62 2c 20 7a 53 63  keSchema(db, zSc
63c0: 68 65 6d 61 2c 20 7a 4e 61 6d 65 29 29 21 3d 30  hema, zName))!=0
63d0: 0a 20 20 20 20 20 20 20 20 29 7b 0a 20 20 20 20  .        ){.    
63e0: 20 20 20 20 20 20 69 66 28 20 7a 3d 3d 30 20 29        if( z==0 )
63f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 20  {.            z 
6400: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
6410: 66 28 22 25 73 5c 6e 2f 2a 20 25 73 20 2a 2f 22  f("%s\n/* %s */"
6420: 2c 20 7a 49 6e 2c 20 7a 46 61 6b 65 29 3b 0a 20  , zIn, zFake);. 
6430: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
6440: 20 20 20 20 20 20 20 20 20 20 20 20 7a 20 3d 20              z = 
6450: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
6460: 22 25 7a 5c 6e 2f 2a 20 25 73 20 2a 2f 22 2c 20  "%z\n/* %s */", 
6470: 7a 2c 20 7a 46 61 6b 65 29 3b 0a 20 20 20 20 20  z, zFake);.     
6480: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
6490: 20 66 72 65 65 28 7a 46 61 6b 65 29 3b 0a 20 20   free(zFake);.  
64a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
64b0: 69 66 28 20 7a 20 29 7b 0a 20 20 20 20 20 20 20  if( z ){.       
64c0: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
64d0: 74 5f 74 65 78 74 28 70 43 74 78 2c 20 7a 2c 20  t_text(pCtx, z, 
64e0: 2d 31 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  -1, sqlite3_free
64f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  );.          ret
6500: 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
6510: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
6520: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
6530: 74 5f 76 61 6c 75 65 28 70 43 74 78 2c 20 61 70  t_value(pCtx, ap
6540: 56 61 6c 5b 30 5d 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  Val[0]);.}../*.*
6550: 2a 20 54 68 65 20 73 6f 75 72 63 65 20 63 6f 64  * The source cod
6560: 65 20 66 6f 72 20 73 65 76 65 72 61 6c 20 72 75  e for several ru
6570: 6e 2d 74 69 6d 65 20 6c 6f 61 64 61 62 6c 65 20  n-time loadable 
6580: 65 78 74 65 6e 73 69 6f 6e 73 20 69 73 20 69 6e  extensions is in
6590: 73 65 72 74 65 64 0a 2a 2a 20 62 65 6c 6f 77 20  serted.** below 
65a0: 62 79 20 74 68 65 20 2e 2e 2f 74 6f 6f 6c 2f 6d  by the ../tool/m
65b0: 6b 73 68 65 6c 6c 63 2e 74 63 6c 20 73 63 72 69  kshellc.tcl scri
65c0: 70 74 2e 20 20 42 65 66 6f 72 65 20 70 72 6f 63  pt.  Before proc
65d0: 65 73 73 69 6e 67 20 74 68 61 74 20 69 6e 63 6c  essing that incl
65e0: 75 64 65 64 0a 2a 2a 20 63 6f 64 65 2c 20 77 65  uded.** code, we
65f0: 20 6e 65 65 64 20 74 6f 20 6f 76 65 72 72 69 64   need to overrid
6600: 65 20 73 6f 6d 65 20 6d 61 63 72 6f 73 20 74 6f  e some macros to
6610: 20 6d 61 6b 65 20 74 68 65 20 69 6e 63 6c 75 64   make the includ
6620: 65 64 20 70 72 6f 67 72 61 6d 20 63 6f 64 65 0a  ed program code.
6630: 2a 2a 20 77 6f 72 6b 20 68 65 72 65 20 69 6e 20  ** work here in 
6640: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 74 68  the middle of th
6650: 69 73 20 72 65 67 75 6c 61 72 20 70 72 6f 67 72  is regular progr
6660: 61 6d 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  am..*/.#define S
6670: 51 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f  QLITE_EXTENSION_
6680: 49 4e 49 54 31 0a 23 64 65 66 69 6e 65 20 53 51  INIT1.#define SQ
6690: 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f 49  LITE_EXTENSION_I
66a0: 4e 49 54 32 28 58 29 20 28 76 6f 69 64 29 28 58  NIT2(X) (void)(X
66b0: 29 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  )..#if defined(_
66c0: 57 49 4e 33 32 29 20 26 26 20 64 65 66 69 6e 65  WIN32) && define
66d0: 64 28 5f 4d 53 43 5f 56 45 52 29 0a 49 4e 43 4c  d(_MSC_VER).INCL
66e0: 55 44 45 20 74 65 73 74 5f 77 69 6e 64 69 72 65  UDE test_windire
66f0: 6e 74 2e 68 0a 49 4e 43 4c 55 44 45 20 74 65 73  nt.h.INCLUDE tes
6700: 74 5f 77 69 6e 64 69 72 65 6e 74 2e 63 0a 23 64  t_windirent.c.#d
6710: 65 66 69 6e 65 20 64 69 72 65 6e 74 20 44 49 52  efine dirent DIR
6720: 45 4e 54 0a 23 65 6e 64 69 66 0a 49 4e 43 4c 55  ENT.#endif.INCLU
6730: 44 45 20 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 73  DE ../ext/misc/s
6740: 68 61 74 68 72 65 65 2e 63 0a 49 4e 43 4c 55 44  hathree.c.INCLUD
6750: 45 20 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 66 69  E ../ext/misc/fi
6760: 6c 65 69 6f 2e 63 0a 49 4e 43 4c 55 44 45 20 2e  leio.c.INCLUDE .
6770: 2e 2f 65 78 74 2f 6d 69 73 63 2f 63 6f 6d 70 6c  ./ext/misc/compl
6780: 65 74 69 6f 6e 2e 63 0a 49 4e 43 4c 55 44 45 20  etion.c.INCLUDE 
6790: 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 61 70 70 65  ../ext/misc/appe
67a0: 6e 64 76 66 73 2e 63 0a 23 69 66 64 65 66 20 53  ndvfs.c.#ifdef S
67b0: 51 4c 49 54 45 5f 48 41 56 45 5f 5a 4c 49 42 0a  QLITE_HAVE_ZLIB.
67c0: 49 4e 43 4c 55 44 45 20 2e 2e 2f 65 78 74 2f 6d  INCLUDE ../ext/m
67d0: 69 73 63 2f 7a 69 70 66 69 6c 65 2e 63 0a 49 4e  isc/zipfile.c.IN
67e0: 43 4c 55 44 45 20 2e 2e 2f 65 78 74 2f 6d 69 73  CLUDE ../ext/mis
67f0: 63 2f 73 71 6c 61 72 2e 63 0a 23 65 6e 64 69 66  c/sqlar.c.#endif
6800: 0a 49 4e 43 4c 55 44 45 20 2e 2e 2f 65 78 74 2f  .INCLUDE ../ext/
6810: 65 78 70 65 72 74 2f 73 71 6c 69 74 65 33 65 78  expert/sqlite3ex
6820: 70 65 72 74 2e 68 0a 49 4e 43 4c 55 44 45 20 2e  pert.h.INCLUDE .
6830: 2e 2f 65 78 74 2f 65 78 70 65 72 74 2f 73 71 6c  ./ext/expert/sql
6840: 69 74 65 33 65 78 70 65 72 74 2e 63 0a 0a 23 69  ite3expert.c..#i
6850: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
6860: 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29  _ENABLE_SESSION)
6870: 0a 2f 2a 0a 2a 2a 20 53 74 61 74 65 20 69 6e 66  ./*.** State inf
6880: 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 61 20 73  ormation for a s
6890: 69 6e 67 6c 65 20 6f 70 65 6e 20 73 65 73 73 69  ingle open sessi
68a0: 6f 6e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  on.*/.typedef st
68b0: 72 75 63 74 20 4f 70 65 6e 53 65 73 73 69 6f 6e  ruct OpenSession
68c0: 20 4f 70 65 6e 53 65 73 73 69 6f 6e 3b 0a 73 74   OpenSession;.st
68d0: 72 75 63 74 20 4f 70 65 6e 53 65 73 73 69 6f 6e  ruct OpenSession
68e0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
68f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
6900: 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   Symbolic name f
6910: 6f 72 20 74 68 69 73 20 73 65 73 73 69 6f 6e 20  or this session 
6920: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 6c 74 65 72  */.  int nFilter
6930: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
6940: 20 4e 75 6d 62 65 72 20 6f 66 20 78 46 69 6c 74   Number of xFilt
6950: 65 72 20 72 65 6a 65 63 74 69 6f 6e 20 47 4c 4f  er rejection GLO
6960: 42 20 70 61 74 74 65 72 6e 73 20 2a 2f 0a 20 20  B patterns */.  
6970: 63 68 61 72 20 2a 2a 61 7a 46 69 6c 74 65 72 3b  char **azFilter;
6980: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61           /* Arra
6990: 79 20 6f 66 20 78 46 69 6c 74 65 72 20 72 65 6a  y of xFilter rej
69a0: 65 63 74 69 6f 6e 20 47 4c 4f 42 20 70 61 74 74  ection GLOB patt
69b0: 65 72 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  erns */.  sqlite
69c0: 33 5f 73 65 73 73 69 6f 6e 20 2a 70 3b 20 20 20  3_session *p;   
69d0: 20 20 20 2f 2a 20 54 68 65 20 6f 70 65 6e 20 73     /* The open s
69e0: 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a 23 65 6e  ession */.};.#en
69f0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 68 65 6c 6c  dif../*.** Shell
6a00: 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 69 6e 66   output mode inf
6a10: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 62 65  ormation from be
6a20: 66 6f 72 65 20 22 2e 65 78 70 6c 61 69 6e 20 6f  fore ".explain o
6a30: 6e 22 2c 0a 2a 2a 20 73 61 76 65 64 20 73 6f 20  n",.** saved so 
6a40: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
6a50: 65 73 74 6f 72 65 64 20 62 79 20 22 2e 65 78 70  estored by ".exp
6a60: 6c 61 69 6e 20 6f 66 66 22 0a 2a 2f 0a 74 79 70  lain off".*/.typ
6a70: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
6a80: 64 4d 6f 64 65 49 6e 66 6f 20 53 61 76 65 64 4d  dModeInfo SavedM
6a90: 6f 64 65 49 6e 66 6f 3b 0a 73 74 72 75 63 74 20  odeInfo;.struct 
6aa0: 53 61 76 65 64 4d 6f 64 65 49 6e 66 6f 20 7b 0a  SavedModeInfo {.
6ab0: 20 20 69 6e 74 20 76 61 6c 69 64 3b 20 20 20 20    int valid;    
6ac0: 20 20 20 20 20 20 2f 2a 20 49 73 20 74 68 65 72        /* Is ther
6ad0: 65 20 6c 65 67 69 74 20 64 61 74 61 20 69 6e 20  e legit data in 
6ae0: 68 65 72 65 3f 20 2a 2f 0a 20 20 69 6e 74 20 6d  here? */.  int m
6af0: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ode;           /
6b00: 2a 20 4d 6f 64 65 20 70 72 69 6f 72 20 74 6f 20  * Mode prior to 
6b10: 22 2e 65 78 70 6c 61 69 6e 20 6f 6e 22 20 2a 2f  ".explain on" */
6b20: 0a 20 20 69 6e 74 20 73 68 6f 77 48 65 61 64 65  .  int showHeade
6b30: 72 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 2e  r;     /* The ".
6b40: 68 65 61 64 65 72 22 20 73 65 74 74 69 6e 67 20  header" setting 
6b50: 70 72 69 6f 72 20 74 6f 20 22 2e 65 78 70 6c 61  prior to ".expla
6b60: 69 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69 6e 74 20  in on" */.  int 
6b70: 63 6f 6c 57 69 64 74 68 5b 31 30 30 5d 3b 20 20  colWidth[100];  
6b80: 2f 2a 20 43 6f 6c 75 6d 6e 20 77 69 64 74 68 73  /* Column widths
6b90: 20 70 72 69 6f 72 20 74 6f 20 22 2e 65 78 70 6c   prior to ".expl
6ba0: 61 69 6e 20 6f 6e 22 20 2a 2f 0a 7d 3b 0a 0a 74  ain on" */.};..t
6bb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
6bc0: 70 65 72 74 49 6e 66 6f 20 45 78 70 65 72 74 49  pertInfo ExpertI
6bd0: 6e 66 6f 3b 0a 73 74 72 75 63 74 20 45 78 70 65  nfo;.struct Expe
6be0: 72 74 49 6e 66 6f 20 7b 0a 20 20 73 71 6c 69 74  rtInfo {.  sqlit
6bf0: 65 33 65 78 70 65 72 74 20 2a 70 45 78 70 65 72  e3expert *pExper
6c00: 74 3b 0a 20 20 69 6e 74 20 62 56 65 72 62 6f 73  t;.  int bVerbos
6c10: 65 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 61  e;.};../*.** Sta
6c20: 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  te information a
6c30: 62 6f 75 74 20 74 68 65 20 64 61 74 61 62 61 73  bout the databas
6c40: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
6c50: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 61 6e 0a  contained in an.
6c60: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
6c70: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
6c80: 75 63 74 75 72 65 2e 0a 2a 2f 0a 74 79 70 65 64  ucture..*/.typed
6c90: 65 66 20 73 74 72 75 63 74 20 53 68 65 6c 6c 53  ef struct ShellS
6ca0: 74 61 74 65 20 53 68 65 6c 6c 53 74 61 74 65 3b  tate ShellState;
6cb0: 0a 73 74 72 75 63 74 20 53 68 65 6c 6c 53 74 61  .struct ShellSta
6cc0: 74 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  te {.  sqlite3 *
6cd0: 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  db;           /*
6ce0: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f   The database */
6cf0: 0a 20 20 75 38 20 61 75 74 6f 45 78 70 6c 61 69  .  u8 autoExplai
6d00: 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 75 74  n;        /* Aut
6d10: 6f 6d 61 74 69 63 61 6c 6c 79 20 74 75 72 6e 20  omatically turn 
6d20: 6f 6e 20 2e 65 78 70 6c 61 69 6e 20 6d 6f 64 65  on .explain mode
6d30: 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 45 51 50   */.  u8 autoEQP
6d40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
6d50: 52 75 6e 20 45 58 50 4c 41 49 4e 20 51 55 45 52  Run EXPLAIN QUER
6d60: 59 20 50 4c 41 4e 20 70 72 69 6f 72 20 74 6f 20  Y PLAN prior to 
6d70: 73 65 61 63 68 20 53 51 4c 20 73 74 6d 74 20 2a  seach SQL stmt *
6d80: 2f 0a 20 20 75 38 20 73 74 61 74 73 4f 6e 3b 20  /.  u8 statsOn; 
6d90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
6da0: 75 65 20 74 6f 20 64 69 73 70 6c 61 79 20 6d 65  ue to display me
6db0: 6d 6f 72 79 20 73 74 61 74 73 20 62 65 66 6f 72  mory stats befor
6dc0: 65 20 65 61 63 68 20 66 69 6e 61 6c 69 7a 65 20  e each finalize 
6dd0: 2a 2f 0a 20 20 75 38 20 73 63 61 6e 73 74 61 74  */.  u8 scanstat
6de0: 73 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  sOn;        /* T
6df0: 72 75 65 20 74 6f 20 64 69 73 70 6c 61 79 20 73  rue to display s
6e00: 63 61 6e 20 73 74 61 74 73 20 62 65 66 6f 72 65  can stats before
6e10: 20 65 61 63 68 20 66 69 6e 61 6c 69 7a 65 20 2a   each finalize *
6e20: 2f 0a 20 20 75 38 20 6f 70 65 6e 4d 6f 64 65 3b  /.  u8 openMode;
6e30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 48             /* SH
6e40: 45 4c 4c 5f 4f 50 45 4e 5f 4e 4f 52 4d 41 4c 2c  ELL_OPEN_NORMAL,
6e50: 20 5f 41 50 50 45 4e 44 56 46 53 2c 20 6f 72 20   _APPENDVFS, or 
6e60: 5f 5a 49 50 46 49 4c 45 20 2a 2f 0a 20 20 75 38  _ZIPFILE */.  u8
6e70: 20 64 6f 58 64 67 4f 70 65 6e 3b 20 20 20 20 20   doXdgOpen;     
6e80: 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 73       /* Invoke s
6e90: 74 61 72 74 2f 6f 70 65 6e 2f 78 64 67 2d 6f 70  tart/open/xdg-op
6ea0: 65 6e 20 69 6e 20 6f 75 74 70 75 74 5f 72 65 73  en in output_res
6eb0: 65 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6f 75  et() */.  int ou
6ec0: 74 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20  tCount;         
6ed0: 20 2f 2a 20 52 65 76 65 72 74 20 74 6f 20 73 74   /* Revert to st
6ee0: 64 6f 75 74 20 77 68 65 6e 20 72 65 61 63 68 69  dout when reachi
6ef0: 6e 67 20 7a 65 72 6f 20 2a 2f 0a 20 20 69 6e 74  ng zero */.  int
6f00: 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
6f10: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
6f20: 20 72 65 63 6f 72 64 73 20 64 69 73 70 6c 61 79   records display
6f30: 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 46  ed so far */.  F
6f40: 49 4c 45 20 2a 6f 75 74 3b 20 20 20 20 20 20 20  ILE *out;       
6f50: 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72        /* Write r
6f60: 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 20  esults here */. 
6f70: 20 46 49 4c 45 20 2a 74 72 61 63 65 4f 75 74 3b   FILE *traceOut;
6f80: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
6f90: 74 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 74 72  t for sqlite3_tr
6fa0: 61 63 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ace() */.  int n
6fb0: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
6fc0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
6fd0: 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
6fe0: 69 6e 74 20 6d 6f 64 65 3b 20 20 20 20 20 20 20  int mode;       
6ff0: 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 6f 75 74         /* An out
7000: 70 75 74 20 6d 6f 64 65 20 73 65 74 74 69 6e 67  put mode setting
7010: 20 2a 2f 0a 20 20 69 6e 74 20 6d 6f 64 65 50 72   */.  int modePr
7020: 69 6f 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ior;         /* 
7030: 53 61 76 65 64 20 6d 6f 64 65 20 2a 2f 0a 20 20  Saved mode */.  
7040: 69 6e 74 20 63 4d 6f 64 65 3b 20 20 20 20 20 20  int cMode;      
7050: 20 20 20 20 20 20 20 2f 2a 20 74 65 6d 70 6f 72         /* tempor
7060: 61 72 79 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  ary output mode 
7070: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
7080: 71 75 65 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e  query */.  int n
7090: 6f 72 6d 61 6c 4d 6f 64 65 3b 20 20 20 20 20 20  ormalMode;      
70a0: 20 20 2f 2a 20 4f 75 74 70 75 74 20 6d 6f 64 65    /* Output mode
70b0: 20 62 65 66 6f 72 65 20 22 2e 65 78 70 6c 61 69   before ".explai
70c0: 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69 6e 74 20 77  n on" */.  int w
70d0: 72 69 74 61 62 6c 65 53 63 68 65 6d 61 3b 20 20  ritableSchema;  
70e0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 50 52 41    /* True if PRA
70f0: 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
7100: 65 6d 61 3d 4f 4e 20 2a 2f 0a 20 20 69 6e 74 20  ema=ON */.  int 
7110: 73 68 6f 77 48 65 61 64 65 72 3b 20 20 20 20 20  showHeader;     
7120: 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 73 68     /* True to sh
7130: 6f 77 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ow column names 
7140: 69 6e 20 4c 69 73 74 20 6f 72 20 43 6f 6c 75 6d  in List or Colum
7150: 6e 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  n mode */.  int 
7160: 6e 43 68 65 63 6b 3b 20 20 20 20 20 20 20 20 20  nCheck;         
7170: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
7180: 22 2e 63 68 65 63 6b 22 20 63 6f 6d 6d 61 6e 64  ".check" command
7190: 73 20 72 75 6e 20 2a 2f 0a 20 20 75 6e 73 69 67  s run */.  unsig
71a0: 6e 65 64 20 73 68 65 6c 6c 46 6c 67 73 3b 20 20  ned shellFlgs;  
71b0: 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
71c0: 67 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44  gs */.  char *zD
71d0: 65 73 74 54 61 62 6c 65 3b 20 20 20 20 20 20 2f  estTable;      /
71e0: 2a 20 4e 61 6d 65 20 6f 66 20 64 65 73 74 69 6e  * Name of destin
71f0: 61 74 69 6f 6e 20 74 61 62 6c 65 20 77 68 65 6e  ation table when
7200: 20 4d 4f 44 45 5f 49 6e 73 65 72 74 20 2a 2f 0a   MODE_Insert */.
7210: 20 20 63 68 61 72 20 2a 7a 54 65 6d 70 46 69 6c    char *zTempFil
7220: 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70  e;       /* Temp
7230: 6f 72 61 72 79 20 66 69 6c 65 20 74 68 61 74 20  orary file that 
7240: 6d 69 67 68 74 20 6e 65 65 64 20 64 65 6c 65 74  might need delet
7250: 69 6e 67 20 2a 2f 0a 20 20 63 68 61 72 20 7a 54  ing */.  char zT
7260: 65 73 74 63 61 73 65 5b 33 30 5d 3b 20 20 20 20  estcase[30];    
7270: 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 75 72 72 65  /* Name of curre
7280: 6e 74 20 74 65 73 74 20 63 61 73 65 20 2a 2f 0a  nt test case */.
7290: 20 20 63 68 61 72 20 63 6f 6c 53 65 70 61 72 61    char colSepara
72a0: 74 6f 72 5b 32 30 5d 3b 20 2f 2a 20 43 6f 6c 75  tor[20]; /* Colu
72b0: 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 63 68 61  mn separator cha
72c0: 72 61 63 74 65 72 20 66 6f 72 20 73 65 76 65 72  racter for sever
72d0: 61 6c 20 6d 6f 64 65 73 20 2a 2f 0a 20 20 63 68  al modes */.  ch
72e0: 61 72 20 72 6f 77 53 65 70 61 72 61 74 6f 72 5b  ar rowSeparator[
72f0: 32 30 5d 3b 20 2f 2a 20 52 6f 77 20 73 65 70 61  20]; /* Row sepa
7300: 72 61 74 6f 72 20 63 68 61 72 61 63 74 65 72 20  rator character 
7310: 66 6f 72 20 4d 4f 44 45 5f 41 73 63 69 69 20 2a  for MODE_Ascii *
7320: 2f 0a 20 20 63 68 61 72 20 63 6f 6c 53 65 70 50  /.  char colSepP
7330: 72 69 6f 72 5b 32 30 5d 3b 20 20 2f 2a 20 53 61  rior[20];  /* Sa
7340: 76 65 64 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72  ved column separ
7350: 61 74 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 72  ator */.  char r
7360: 6f 77 53 65 70 50 72 69 6f 72 5b 32 30 5d 3b 20  owSepPrior[20]; 
7370: 20 2f 2a 20 53 61 76 65 64 20 72 6f 77 20 73 65   /* Saved row se
7380: 70 61 72 61 74 6f 72 20 2a 2f 0a 20 20 69 6e 74  parator */.  int
7390: 20 63 6f 6c 57 69 64 74 68 5b 31 30 30 5d 3b 20   colWidth[100]; 
73a0: 20 20 20 20 2f 2a 20 52 65 71 75 65 73 74 65 64      /* Requested
73b0: 20 77 69 64 74 68 20 6f 66 20 65 61 63 68 20 63   width of each c
73c0: 6f 6c 75 6d 6e 20 77 68 65 6e 20 69 6e 20 63 6f  olumn when in co
73d0: 6c 75 6d 6e 20 6d 6f 64 65 2a 2f 0a 20 20 69 6e  lumn mode*/.  in
73e0: 74 20 61 63 74 75 61 6c 57 69 64 74 68 5b 31 30  t actualWidth[10
73f0: 30 5d 3b 20 20 2f 2a 20 41 63 74 75 61 6c 20 77  0];  /* Actual w
7400: 69 64 74 68 20 6f 66 20 65 61 63 68 20 63 6f 6c  idth of each col
7410: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 6e 75  umn */.  char nu
7420: 6c 6c 56 61 6c 75 65 5b 32 30 5d 3b 20 20 20 20  llValue[20];    
7430: 2f 2a 20 54 68 65 20 74 65 78 74 20 74 6f 20 70  /* The text to p
7440: 72 69 6e 74 20 77 68 65 6e 20 61 20 4e 55 4c 4c  rint when a NULL
7450: 20 63 6f 6d 65 73 20 62 61 63 6b 20 66 72 6f 6d   comes back from
7460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7470: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
7480: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63   database */.  c
7490: 68 61 72 20 6f 75 74 66 69 6c 65 5b 46 49 4c 45  har outfile[FILE
74a0: 4e 41 4d 45 5f 4d 41 58 5d 3b 20 2f 2a 20 46 69  NAME_MAX]; /* Fi
74b0: 6c 65 6e 61 6d 65 20 66 6f 72 20 2a 6f 75 74 20  lename for *out 
74c0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
74d0: 2a 7a 44 62 46 69 6c 65 6e 61 6d 65 3b 20 20 20  *zDbFilename;   
74e0: 20 2f 2a 20 6e 61 6d 65 20 6f 66 20 74 68 65 20   /* name of the 
74f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
7500: 0a 20 20 63 68 61 72 20 2a 7a 46 72 65 65 4f 6e  .  char *zFreeOn
7510: 43 6c 6f 73 65 3b 20 20 20 20 20 20 20 20 20 2f  Close;         /
7520: 2a 20 46 69 6c 65 6e 61 6d 65 20 74 6f 20 66 72  * Filename to fr
7530: 65 65 20 77 68 65 6e 20 63 6c 6f 73 69 6e 67 20  ee when closing 
7540: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
7550: 2a 7a 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *zVfs;          
7560: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 56 46 53 20   /* Name of VFS 
7570: 74 6f 20 75 73 65 20 2a 2f 0a 20 20 73 71 6c 69  to use */.  sqli
7580: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
7590: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 74     /* Current st
75a0: 61 74 65 6d 65 6e 74 20 69 66 20 61 6e 79 2e 20  atement if any. 
75b0: 2a 2f 0a 20 20 46 49 4c 45 20 2a 70 4c 6f 67 3b  */.  FILE *pLog;
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
75d0: 72 69 74 65 20 6c 6f 67 20 6f 75 74 70 75 74 20  rite log output 
75e0: 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  here */.  int *a
75f0: 69 49 6e 64 65 6e 74 3b 20 20 20 20 20 20 20 20  iIndent;        
7600: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 69 6e 64   /* Array of ind
7610: 65 6e 74 73 20 75 73 65 64 20 69 6e 20 4d 4f 44  ents used in MOD
7620: 45 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 69  E_Explain */.  i
7630: 6e 74 20 6e 49 6e 64 65 6e 74 3b 20 20 20 20 20  nt nIndent;     
7640: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
7650: 20 61 72 72 61 79 20 61 69 49 6e 64 65 6e 74 5b   array aiIndent[
7660: 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 49 6e 64 65  ] */.  int iInde
7670: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
7680: 20 49 6e 64 65 78 20 6f 66 20 63 75 72 72 65 6e   Index of curren
7690: 74 20 6f 70 20 69 6e 20 61 69 49 6e 64 65 6e 74  t op in aiIndent
76a0: 5b 5d 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  [] */.#if define
76b0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
76c0: 53 45 53 53 49 4f 4e 29 0a 20 20 69 6e 74 20 6e  SESSION).  int n
76d0: 53 65 73 73 69 6f 6e 3b 20 20 20 20 20 20 20 20  Session;        
76e0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
76f0: 66 20 61 63 74 69 76 65 20 73 65 73 73 69 6f 6e  f active session
7700: 73 20 2a 2f 0a 20 20 4f 70 65 6e 53 65 73 73 69  s */.  OpenSessi
7710: 6f 6e 20 61 53 65 73 73 69 6f 6e 5b 34 5d 3b 20  on aSession[4]; 
7720: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 65 73   /* Array of ses
7730: 73 69 6f 6e 73 2e 20 20 5b 30 5d 20 69 73 20 69  sions.  [0] is i
7740: 6e 20 66 6f 63 75 73 2e 20 2a 2f 0a 23 65 6e 64  n focus. */.#end
7750: 69 66 0a 20 20 45 78 70 65 72 74 49 6e 66 6f 20  if.  ExpertInfo 
7760: 65 78 70 65 72 74 3b 20 20 20 20 20 20 20 20 2f  expert;        /
7770: 2a 20 56 61 6c 69 64 20 69 66 20 70 72 65 76 69  * Valid if previ
7780: 6f 75 73 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  ous command was 
7790: 22 2e 65 78 70 65 72 74 20 4f 50 54 2e 2e 2e 22  ".expert OPT..."
77a0: 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 20 41 6c 6c 6f   */.};.../* Allo
77b0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
77c0: 68 65 6c 6c 53 74 61 74 65 2e 61 75 74 6f 45 51  hellState.autoEQ
77d0: 50 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 55 54  P.*/.#define AUT
77e0: 4f 45 51 50 5f 6f 66 66 20 20 20 20 20 20 30 0a  OEQP_off      0.
77f0: 23 64 65 66 69 6e 65 20 41 55 54 4f 45 51 50 5f  #define AUTOEQP_
7800: 6f 6e 20 20 20 20 20 20 20 31 0a 23 64 65 66 69  on       1.#defi
7810: 6e 65 20 41 55 54 4f 45 51 50 5f 74 72 69 67 67  ne AUTOEQP_trigg
7820: 65 72 20 20 32 0a 23 64 65 66 69 6e 65 20 41 55  er  2.#define AU
7830: 54 4f 45 51 50 5f 66 75 6c 6c 20 20 20 20 20 33  TOEQP_full     3
7840: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
7850: 75 65 73 20 66 6f 72 20 53 68 65 6c 6c 53 74 61  ues for ShellSta
7860: 74 65 2e 6f 70 65 6e 4d 6f 64 65 0a 2a 2f 0a 23  te.openMode.*/.#
7870: 64 65 66 69 6e 65 20 53 48 45 4c 4c 5f 4f 50 45  define SHELL_OPE
7880: 4e 5f 55 4e 53 50 45 43 20 20 20 20 20 30 20 20  N_UNSPEC     0  
7890: 20 20 20 20 2f 2a 20 4e 6f 20 6f 70 65 6e 2d 6d      /* No open-m
78a0: 6f 64 65 20 73 70 65 63 69 66 69 65 64 20 2a 2f  ode specified */
78b0: 0a 23 64 65 66 69 6e 65 20 53 48 45 4c 4c 5f 4f  .#define SHELL_O
78c0: 50 45 4e 5f 4e 4f 52 4d 41 4c 20 20 20 20 20 31  PEN_NORMAL     1
78d0: 20 20 20 20 20 20 2f 2a 20 4e 6f 72 6d 61 6c 20        /* Normal 
78e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
78f0: 0a 23 64 65 66 69 6e 65 20 53 48 45 4c 4c 5f 4f  .#define SHELL_O
7900: 50 45 4e 5f 41 50 50 45 4e 44 56 46 53 20 20 32  PEN_APPENDVFS  2
7910: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 61 70 70        /* Use app
7920: 65 6e 64 76 66 73 20 2a 2f 0a 23 64 65 66 69 6e  endvfs */.#defin
7930: 65 20 53 48 45 4c 4c 5f 4f 50 45 4e 5f 5a 49 50  e SHELL_OPEN_ZIP
7940: 46 49 4c 45 20 20 20 20 33 20 20 20 20 20 20 2f  FILE    3      /
7950: 2a 20 55 73 65 20 74 68 65 20 7a 69 70 66 69 6c  * Use the zipfil
7960: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
7970: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 45 4c 4c  */.#define SHELL
7980: 5f 4f 50 45 4e 5f 52 45 41 44 4f 4e 4c 59 20 20  _OPEN_READONLY  
7990: 20 34 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20   4      /* Open 
79a0: 61 20 6e 6f 72 6d 61 6c 20 64 61 74 61 62 61 73  a normal databas
79b0: 65 20 72 65 61 64 2d 6f 6e 6c 79 20 2a 2f 0a 0a  e read-only */..
79c0: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20  /*.** These are 
79d0: 74 68 65 20 61 6c 6c 6f 77 65 64 20 73 68 65 6c  the allowed shel
79e0: 6c 46 6c 67 73 20 76 61 6c 75 65 73 0a 2a 2f 0a  lFlgs values.*/.
79f0: 23 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 50 61  #define SHFLG_Pa
7a00: 67 65 63 61 63 68 65 20 20 20 20 20 20 30 78 30  gecache      0x0
7a10: 30 30 30 30 30 30 31 20 2f 2a 20 54 68 65 20 2d  0000001 /* The -
7a20: 2d 70 61 67 65 63 61 63 68 65 20 6f 70 74 69 6f  -pagecache optio
7a30: 6e 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  n is used */.#de
7a40: 66 69 6e 65 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61  fine SHFLG_Looka
7a50: 73 69 64 65 20 20 20 20 20 20 30 78 30 30 30 30  side      0x0000
7a60: 30 30 30 32 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64  0002 /* Lookasid
7a70: 65 20 6d 65 6d 6f 72 79 20 69 73 20 75 73 65 64  e memory is used
7a80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 46 4c   */.#define SHFL
7a90: 47 5f 42 61 63 6b 73 6c 61 73 68 20 20 20 20 20  G_Backslash     
7aa0: 20 30 78 30 30 30 30 30 30 30 34 20 2f 2a 20 54   0x00000004 /* T
7ab0: 68 65 20 2d 2d 62 61 63 6b 73 6c 61 73 68 20 6f  he --backslash o
7ac0: 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20 2a 2f  ption is used */
7ad0: 0a 23 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 50  .#define SHFLG_P
7ae0: 72 65 73 65 72 76 65 52 6f 77 69 64 20 20 30 78  reserveRowid  0x
7af0: 30 30 30 30 30 30 30 38 20 2f 2a 20 2e 64 75 6d  00000008 /* .dum
7b00: 70 20 70 72 65 73 65 72 76 65 73 20 72 6f 77 69  p preserves rowi
7b10: 64 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66  d values */.#def
7b20: 69 6e 65 20 53 48 46 4c 47 5f 4e 65 77 6c 69 6e  ine SHFLG_Newlin
7b30: 65 73 20 20 20 20 20 20 20 30 78 30 30 30 30 30  es       0x00000
7b40: 30 31 30 20 2f 2a 20 2e 64 75 6d 70 20 2d 2d 6e  010 /* .dump --n
7b50: 65 77 6c 69 6e 65 20 66 6c 61 67 20 2a 2f 0a 23  ewline flag */.#
7b60: 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 43 6f 75  define SHFLG_Cou
7b70: 6e 74 43 68 61 6e 67 65 73 20 20 20 30 78 30 30  ntChanges   0x00
7b80: 30 30 30 30 32 30 20 2f 2a 20 2e 63 68 61 6e 67  000020 /* .chang
7b90: 65 73 20 73 65 74 74 69 6e 67 20 2a 2f 0a 23 64  es setting */.#d
7ba0: 65 66 69 6e 65 20 53 48 46 4c 47 5f 45 63 68 6f  efine SHFLG_Echo
7bb0: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
7bc0: 30 30 30 34 30 20 2f 2a 20 2e 65 63 68 6f 20 6f  00040 /* .echo o
7bd0: 72 20 2d 2d 65 63 68 6f 20 73 65 74 74 69 6e 67  r --echo setting
7be0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
7bf0: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e  s for testing an
7c00: 64 20 73 65 74 74 69 6e 67 20 73 68 65 6c 6c 46  d setting shellF
7c10: 6c 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lgs.*/.#define S
7c20: 68 65 6c 6c 48 61 73 46 6c 61 67 28 50 2c 58 29  hellHasFlag(P,X)
7c30: 20 20 20 20 28 28 28 50 29 2d 3e 73 68 65 6c 6c      (((P)->shell
7c40: 46 6c 67 73 20 26 20 28 58 29 29 21 3d 30 29 0a  Flgs & (X))!=0).
7c50: 23 64 65 66 69 6e 65 20 53 68 65 6c 6c 53 65 74  #define ShellSet
7c60: 46 6c 61 67 28 50 2c 58 29 20 20 20 20 28 28 50  Flag(P,X)    ((P
7c70: 29 2d 3e 73 68 65 6c 6c 46 6c 67 73 7c 3d 28 58  )->shellFlgs|=(X
7c80: 29 29 0a 23 64 65 66 69 6e 65 20 53 68 65 6c 6c  )).#define Shell
7c90: 43 6c 65 61 72 46 6c 61 67 28 50 2c 58 29 20 20  ClearFlag(P,X)  
7ca0: 28 28 50 29 2d 3e 73 68 65 6c 6c 46 6c 67 73 26  ((P)->shellFlgs&
7cb0: 3d 28 7e 28 58 29 29 29 0a 0a 2f 2a 0a 2a 2a 20  =(~(X)))../*.** 
7cc0: 54 68 65 73 65 20 61 72 65 20 74 68 65 20 61 6c  These are the al
7cd0: 6c 6f 77 65 64 20 6d 6f 64 65 73 2e 0a 2a 2f 0a  lowed modes..*/.
7ce0: 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 4c 69 6e  #define MODE_Lin
7cf0: 65 20 20 20 20 20 30 20 20 2f 2a 20 4f 6e 65 20  e     0  /* One 
7d00: 63 6f 6c 75 6d 6e 20 70 65 72 20 6c 69 6e 65 2e  column per line.
7d10: 20 20 42 6c 61 6e 6b 20 6c 69 6e 65 20 62 65 74    Blank line bet
7d20: 77 65 65 6e 20 72 65 63 6f 72 64 73 20 2a 2f 0a  ween records */.
7d30: 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 43 6f 6c  #define MODE_Col
7d40: 75 6d 6e 20 20 20 31 20 20 2f 2a 20 4f 6e 65 20  umn   1  /* One 
7d50: 72 65 63 6f 72 64 20 70 65 72 20 6c 69 6e 65 20  record per line 
7d60: 69 6e 20 6e 65 61 74 20 63 6f 6c 75 6d 6e 73 20  in neat columns 
7d70: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f  */.#define MODE_
7d80: 4c 69 73 74 20 20 20 20 20 32 20 20 2f 2a 20 4f  List     2  /* O
7d90: 6e 65 20 72 65 63 6f 72 64 20 70 65 72 20 6c 69  ne record per li
7da0: 6e 65 20 77 69 74 68 20 61 20 73 65 70 61 72 61  ne with a separa
7db0: 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  tor */.#define M
7dc0: 4f 44 45 5f 53 65 6d 69 20 20 20 20 20 33 20 20  ODE_Semi     3  
7dd0: 2f 2a 20 53 61 6d 65 20 61 73 20 4d 4f 44 45 5f  /* Same as MODE_
7de0: 4c 69 73 74 20 62 75 74 20 61 70 70 65 6e 64 20  List but append 
7df0: 22 3b 22 20 74 6f 20 65 61 63 68 20 6c 69 6e 65  ";" to each line
7e00: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45   */.#define MODE
7e10: 5f 48 74 6d 6c 20 20 20 20 20 34 20 20 2f 2a 20  _Html     4  /* 
7e20: 47 65 6e 65 72 61 74 65 20 61 6e 20 58 48 54 4d  Generate an XHTM
7e30: 4c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  L table */.#defi
7e40: 6e 65 20 4d 4f 44 45 5f 49 6e 73 65 72 74 20 20  ne MODE_Insert  
7e50: 20 35 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20   5  /* Generate 
7e60: 53 51 4c 20 22 69 6e 73 65 72 74 22 20 73 74 61  SQL "insert" sta
7e70: 74 65 6d 65 6e 74 73 20 2a 2f 0a 23 64 65 66 69  tements */.#defi
7e80: 6e 65 20 4d 4f 44 45 5f 51 75 6f 74 65 20 20 20  ne MODE_Quote   
7e90: 20 36 20 20 2f 2a 20 51 75 6f 74 65 20 76 61 6c   6  /* Quote val
7ea0: 75 65 73 20 61 73 20 66 6f 72 20 53 51 4c 20 2a  ues as for SQL *
7eb0: 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 54  /.#define MODE_T
7ec0: 63 6c 20 20 20 20 20 20 37 20 20 2f 2a 20 47 65  cl      7  /* Ge
7ed0: 6e 65 72 61 74 65 20 41 4e 53 49 2d 43 20 6f 72  nerate ANSI-C or
7ee0: 20 54 43 4c 20 71 75 6f 74 65 64 20 65 6c 65 6d   TCL quoted elem
7ef0: 65 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ents */.#define 
7f00: 4d 4f 44 45 5f 43 73 76 20 20 20 20 20 20 38 20  MODE_Csv      8 
7f10: 20 2f 2a 20 51 75 6f 74 65 20 73 74 72 69 6e 67   /* Quote string
7f20: 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 70  s, numbers are p
7f30: 6c 61 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lain */.#define 
7f40: 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 20 39 20  MODE_Explain  9 
7f50: 20 2f 2a 20 4c 69 6b 65 20 4d 4f 44 45 5f 43 6f   /* Like MODE_Co
7f60: 6c 75 6d 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74  lumn, but do not
7f70: 20 74 72 75 6e 63 61 74 65 20 64 61 74 61 20 2a   truncate data *
7f80: 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 41  /.#define MODE_A
7f90: 73 63 69 69 20 20 20 31 30 20 20 2f 2a 20 55 73  scii   10  /* Us
7fa0: 65 20 41 53 43 49 49 20 75 6e 69 74 20 61 6e 64  e ASCII unit and
7fb0: 20 72 65 63 6f 72 64 20 73 65 70 61 72 61 74 6f   record separato
7fc0: 72 73 20 28 30 78 31 46 2f 30 78 31 45 29 20 2a  rs (0x1F/0x1E) *
7fd0: 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 50  /.#define MODE_P
7fe0: 72 65 74 74 79 20 20 31 31 20 20 2f 2a 20 50 72  retty  11  /* Pr
7ff0: 65 74 74 79 2d 70 72 69 6e 74 20 73 63 68 65 6d  etty-print schem
8000: 61 73 20 2a 2f 0a 0a 73 74 61 74 69 63 20 63 6f  as */..static co
8010: 6e 73 74 20 63 68 61 72 20 2a 6d 6f 64 65 44 65  nst char *modeDe
8020: 73 63 72 5b 5d 20 3d 20 7b 0a 20 20 22 6c 69 6e  scr[] = {.  "lin
8030: 65 22 2c 0a 20 20 22 63 6f 6c 75 6d 6e 22 2c 0a  e",.  "column",.
8040: 20 20 22 6c 69 73 74 22 2c 0a 20 20 22 73 65 6d    "list",.  "sem
8050: 69 22 2c 0a 20 20 22 68 74 6d 6c 22 2c 0a 20 20  i",.  "html",.  
8060: 22 69 6e 73 65 72 74 22 2c 0a 20 20 22 71 75 6f  "insert",.  "quo
8070: 74 65 22 2c 0a 20 20 22 74 63 6c 22 2c 0a 20 20  te",.  "tcl",.  
8080: 22 63 73 76 22 2c 0a 20 20 22 65 78 70 6c 61 69  "csv",.  "explai
8090: 6e 22 2c 0a 20 20 22 61 73 63 69 69 22 2c 0a 20  n",.  "ascii",. 
80a0: 20 22 70 72 65 74 74 79 70 72 69 6e 74 22 2c 0a   "prettyprint",.
80b0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  };../*.** These 
80c0: 61 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e 2f 72  are the column/r
80d0: 6f 77 2f 6c 69 6e 65 20 73 65 70 61 72 61 74 6f  ow/line separato
80e0: 72 73 20 75 73 65 64 20 62 79 20 74 68 65 20 76  rs used by the v
80f0: 61 72 69 6f 75 73 0a 2a 2a 20 69 6d 70 6f 72 74  arious.** import
8100: 2f 65 78 70 6f 72 74 20 6d 6f 64 65 73 2e 0a 2a  /export modes..*
8110: 2f 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 43 6f  /.#define SEP_Co
8120: 6c 75 6d 6e 20 20 20 20 22 7c 22 0a 23 64 65 66  lumn    "|".#def
8130: 69 6e 65 20 53 45 50 5f 52 6f 77 20 20 20 20 20  ine SEP_Row     
8140: 20 20 22 5c 6e 22 0a 23 64 65 66 69 6e 65 20 53    "\n".#define S
8150: 45 50 5f 54 61 62 20 20 20 20 20 20 20 22 5c 74  EP_Tab       "\t
8160: 22 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 53 70  ".#define SEP_Sp
8170: 61 63 65 20 20 20 20 20 22 20 22 0a 23 64 65 66  ace     " ".#def
8180: 69 6e 65 20 53 45 50 5f 43 6f 6d 6d 61 20 20 20  ine SEP_Comma   
8190: 20 20 22 2c 22 0a 23 64 65 66 69 6e 65 20 53 45    ",".#define SE
81a0: 50 5f 43 72 4c 66 20 20 20 20 20 20 22 5c 72 5c  P_CrLf      "\r\
81b0: 6e 22 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 55  n".#define SEP_U
81c0: 6e 69 74 20 20 20 20 20 20 22 5c 78 31 46 22 0a  nit      "\x1F".
81d0: 23 64 65 66 69 6e 65 20 53 45 50 5f 52 65 63 6f  #define SEP_Reco
81e0: 72 64 20 20 20 20 22 5c 78 31 45 22 0a 0a 2f 2a  rd    "\x1E"../*
81f0: 0a 2a 2a 20 41 20 63 61 6c 6c 62 61 63 6b 20 66  .** A callback f
8200: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c  or the sqlite3_l
8210: 6f 67 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a  og() interface..
8220: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
8230: 68 65 6c 6c 4c 6f 67 28 76 6f 69 64 20 2a 70 41  hellLog(void *pA
8240: 72 67 2c 20 69 6e 74 20 69 45 72 72 43 6f 64 65  rg, int iErrCode
8250: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d  , const char *zM
8260: 73 67 29 7b 0a 20 20 53 68 65 6c 6c 53 74 61 74  sg){.  ShellStat
8270: 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74 61  e *p = (ShellSta
8280: 74 65 2a 29 70 41 72 67 3b 0a 20 20 69 66 28 20  te*)pArg;.  if( 
8290: 70 2d 3e 70 4c 6f 67 3d 3d 30 20 29 20 72 65 74  p->pLog==0 ) ret
82a0: 75 72 6e 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e  urn;.  utf8_prin
82b0: 74 66 28 70 2d 3e 70 4c 6f 67 2c 20 22 28 25 64  tf(p->pLog, "(%d
82c0: 29 20 25 73 5c 6e 22 2c 20 69 45 72 72 43 6f 64  ) %s\n", iErrCod
82d0: 65 2c 20 7a 4d 73 67 29 3b 0a 20 20 66 66 6c 75  e, zMsg);.  fflu
82e0: 73 68 28 70 2d 3e 70 4c 6f 67 29 3b 0a 7d 0a 0a  sh(p->pLog);.}..
82f0: 2f 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74 69  /*.** SQL functi
8300: 6f 6e 3a 20 20 73 68 65 6c 6c 5f 70 75 74 73 6e  on:  shell_putsn
8310: 6c 28 58 29 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  l(X).**.** Write
8320: 20 74 68 65 20 74 65 78 74 20 58 20 74 6f 20 74   the text X to t
8330: 68 65 20 73 63 72 65 65 6e 20 28 6f 72 20 77 68  he screen (or wh
8340: 61 74 65 76 65 72 20 6f 75 74 70 75 74 20 69 73  atever output is
8350: 20 62 65 69 6e 67 20 64 69 72 65 63 74 65 64 29   being directed)
8360: 0a 2a 2a 20 61 64 64 69 6e 67 20 61 20 6e 65 77  .** adding a new
8370: 6c 69 6e 65 20 61 74 20 74 68 65 20 65 6e 64 2c  line at the end,
8380: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e   and then return
8390: 20 58 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f   X..*/.static vo
83a0: 69 64 20 73 68 65 6c 6c 50 75 74 73 46 75 6e 63  id shellPutsFunc
83b0: 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (.  sqlite3_cont
83c0: 65 78 74 20 2a 70 43 74 78 2c 0a 20 20 69 6e 74  ext *pCtx,.  int
83d0: 20 6e 56 61 6c 2c 0a 20 20 73 71 6c 69 74 65 33   nVal,.  sqlite3
83e0: 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 0a 29  _value **apVal.)
83f0: 7b 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  {.  ShellState *
8400: 70 20 3d 20 28 53 68 65 6c 6c 53 74 61 74 65 2a  p = (ShellState*
8410: 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  )sqlite3_user_da
8420: 74 61 28 70 43 74 78 29 3b 0a 20 20 28 76 6f 69  ta(pCtx);.  (voi
8430: 64 29 6e 56 61 6c 3b 0a 20 20 75 74 66 38 5f 70  d)nVal;.  utf8_p
8440: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
8450: 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  s\n", sqlite3_va
8460: 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 30  lue_text(apVal[0
8470: 5d 29 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72  ]));.  sqlite3_r
8480: 65 73 75 6c 74 5f 76 61 6c 75 65 28 70 43 74 78  esult_value(pCtx
8490: 2c 20 61 70 56 61 6c 5b 30 5d 29 3b 0a 7d 0a 0a  , apVal[0]);.}..
84a0: 2f 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74 69  /*.** SQL functi
84b0: 6f 6e 3a 20 20 20 65 64 69 74 28 56 41 4c 55 45  on:   edit(VALUE
84c0: 29 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ).**            
84d0: 20 20 20 20 20 65 64 69 74 28 56 41 4c 55 45 2c       edit(VALUE,
84e0: 45 44 49 54 4f 52 29 0a 2a 2a 0a 2a 2a 20 54 68  EDITOR).**.** Th
84f0: 65 73 65 20 73 74 65 70 73 3a 0a 2a 2a 0a 2a 2a  ese steps:.**.**
8500: 20 20 20 20 20 28 31 29 20 57 72 69 74 65 20 56       (1) Write V
8510: 41 4c 55 45 20 69 6e 74 6f 20 61 20 74 65 6d 70  ALUE into a temp
8520: 6f 72 61 72 79 20 66 69 6c 65 2e 0a 2a 2a 20 20  orary file..**  
8530: 20 20 20 28 32 29 20 52 75 6e 20 70 72 6f 67 72     (2) Run progr
8540: 61 6d 20 45 44 49 54 4f 52 20 6f 6e 20 74 68 61  am EDITOR on tha
8550: 74 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  t temporary file
8560: 2e 0a 2a 2a 20 20 20 20 20 28 33 29 20 52 65 61  ..**     (3) Rea
8570: 64 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  d the temporary 
8580: 66 69 6c 65 20 62 61 63 6b 20 61 6e 64 20 72 65  file back and re
8590: 74 75 72 6e 20 69 74 73 20 63 6f 6e 74 65 6e 74  turn its content
85a0: 20 61 73 20 74 68 65 20 72 65 73 75 6c 74 2e 0a   as the result..
85b0: 2a 2a 20 20 20 20 20 28 34 29 20 44 65 6c 65 74  **     (4) Delet
85c0: 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  e the temporary 
85d0: 66 69 6c 65 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  file.**.** If th
85e0: 65 20 45 44 49 54 4f 52 20 61 72 67 75 6d 65 6e  e EDITOR argumen
85f0: 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 75 73  t is omitted, us
8600: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74  e the value in t
8610: 68 65 20 56 49 53 55 41 4c 0a 2a 2a 20 65 6e 76  he VISUAL.** env
8620: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
8630: 65 2e 20 20 49 66 20 73 74 69 6c 6c 20 74 68 65  e.  If still the
8640: 72 65 20 69 73 20 6e 6f 20 45 44 49 54 4f 52 2c  re is no EDITOR,
8650: 20 74 68 72 6f 75 67 68 20 61 6e 20 65 72 72 6f   through an erro
8660: 72 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 20 74 68  r..**.** Also th
8670: 72 6f 77 20 61 6e 20 65 72 72 6f 72 20 69 66 20  row an error if 
8680: 74 68 65 20 45 44 49 54 4f 52 20 70 72 6f 67 72  the EDITOR progr
8690: 61 6d 20 72 65 74 75 72 6e 73 20 61 20 6e 6f 6e  am returns a non
86a0: 2d 7a 65 72 6f 20 65 78 69 74 20 63 6f 64 65 2e  -zero exit code.
86b0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
86c0: 54 45 5f 4e 4f 48 41 56 45 5f 53 59 53 54 45 4d  TE_NOHAVE_SYSTEM
86d0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 65 64 69  .static void edi
86e0: 74 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33  tFunc(.  sqlite3
86f0: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
8700: 74 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  t,.  int argc,. 
8710: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
8720: 2a 61 72 67 76 0a 29 7b 0a 20 20 63 6f 6e 73 74  *argv.){.  const
8730: 20 63 68 61 72 20 2a 7a 45 64 69 74 6f 72 3b 0a   char *zEditor;.
8740: 20 20 63 68 61 72 20 2a 7a 54 65 6d 70 46 69 6c    char *zTempFil
8750: 65 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  e = 0;.  sqlite3
8760: 20 2a 64 62 3b 0a 20 20 63 68 61 72 20 2a 7a 43   *db;.  char *zC
8770: 6d 64 20 3d 20 30 3b 0a 20 20 69 6e 74 20 62 42  md = 0;.  int bB
8780: 69 6e 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  in;.  int rc;.  
8790: 46 49 4c 45 20 2a 66 20 3d 20 30 3b 0a 20 20 73  FILE *f = 0;.  s
87a0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b  qlite3_int64 sz;
87b0: 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
87c0: 20 78 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63   x;.  unsigned c
87d0: 68 61 72 20 2a 70 20 3d 20 30 3b 0a 0a 20 20 69  har *p = 0;..  i
87e0: 66 28 20 61 72 67 63 3d 3d 32 20 29 7b 0a 20 20  f( argc==2 ){.  
87f0: 20 20 7a 45 64 69 74 6f 72 20 3d 20 28 63 6f 6e    zEditor = (con
8800: 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
8810: 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76  _value_text(argv
8820: 5b 31 5d 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  [1]);.  }else{. 
8830: 20 20 20 7a 45 64 69 74 6f 72 20 3d 20 67 65 74     zEditor = get
8840: 65 6e 76 28 22 56 49 53 55 41 4c 22 29 3b 0a 20  env("VISUAL");. 
8850: 20 7d 0a 20 20 69 66 28 20 7a 45 64 69 74 6f 72   }.  if( zEditor
8860: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
8870: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
8880: 63 6f 6e 74 65 78 74 2c 20 22 6e 6f 20 65 64 69  context, "no edi
8890: 74 6f 72 20 66 6f 72 20 65 64 69 74 28 29 22 2c  tor for edit()",
88a0: 20 2d 31 29 3b 0a 20 20 20 20 72 65 74 75 72 6e   -1);.    return
88b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
88c0: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 61  te3_value_type(a
88d0: 72 67 76 5b 30 5d 29 3d 3d 53 51 4c 49 54 45 5f  rgv[0])==SQLITE_
88e0: 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 73 71 6c 69  NULL ){.    sqli
88f0: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
8900: 28 63 6f 6e 74 65 78 74 2c 20 22 4e 55 4c 4c 20  (context, "NULL 
8910: 69 6e 70 75 74 20 74 6f 20 65 64 69 74 28 29 22  input to edit()"
8920: 2c 20 2d 31 29 3b 0a 20 20 20 20 72 65 74 75 72  , -1);.    retur
8930: 6e 3b 0a 20 20 7d 0a 20 20 64 62 20 3d 20 73 71  n;.  }.  db = sq
8940: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 64 62  lite3_context_db
8950: 5f 68 61 6e 64 6c 65 28 63 6f 6e 74 65 78 74 29  _handle(context)
8960: 3b 0a 20 20 7a 54 65 6d 70 46 69 6c 65 20 3d 20  ;.  zTempFile = 
8970: 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6c  0;.  sqlite3_fil
8980: 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 30 2c  e_control(db, 0,
8990: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 45   SQLITE_FCNTL_TE
89a0: 4d 50 46 49 4c 45 4e 41 4d 45 2c 20 26 7a 54 65  MPFILENAME, &zTe
89b0: 6d 70 46 69 6c 65 29 3b 0a 20 20 69 66 28 20 7a  mpFile);.  if( z
89c0: 54 65 6d 70 46 69 6c 65 3d 3d 30 20 29 7b 0a 20  TempFile==0 ){. 
89d0: 20 20 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36     sqlite3_uint6
89e0: 34 20 72 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  4 r = 0;.    sql
89f0: 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28  ite3_randomness(
8a00: 73 69 7a 65 6f 66 28 72 29 2c 20 26 72 29 3b 0a  sizeof(r), &r);.
8a10: 20 20 20 20 7a 54 65 6d 70 46 69 6c 65 20 3d 20      zTempFile = 
8a20: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
8a30: 22 74 65 6d 70 25 6c 6c 78 22 2c 20 72 29 3b 0a  "temp%llx", r);.
8a40: 20 20 20 20 69 66 28 20 7a 54 65 6d 70 46 69 6c      if( zTempFil
8a50: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  e==0 ){.      sq
8a60: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
8a70: 6f 72 5f 6e 6f 6d 65 6d 28 63 6f 6e 74 65 78 74  or_nomem(context
8a80: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b  );.      return;
8a90: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 42 69  .    }.  }.  bBi
8aa0: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  n = sqlite3_valu
8ab0: 65 5f 74 79 70 65 28 61 72 67 76 5b 30 5d 29 3d  e_type(argv[0])=
8ac0: 3d 53 51 4c 49 54 45 5f 42 4c 4f 42 3b 0a 20 20  =SQLITE_BLOB;.  
8ad0: 66 20 3d 20 66 6f 70 65 6e 28 7a 54 65 6d 70 46  f = fopen(zTempF
8ae0: 69 6c 65 2c 20 62 42 69 6e 20 3f 20 22 77 62 22  ile, bBin ? "wb"
8af0: 20 3a 20 22 77 22 29 3b 0a 20 20 69 66 28 20 66   : "w");.  if( f
8b00: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
8b10: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
8b20: 63 6f 6e 74 65 78 74 2c 20 22 65 64 69 74 28 29  context, "edit()
8b30: 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 74 65 6d   cannot open tem
8b40: 70 20 66 69 6c 65 22 2c 20 2d 31 29 3b 0a 20 20  p file", -1);.  
8b50: 20 20 67 6f 74 6f 20 65 64 69 74 5f 66 75 6e 63    goto edit_func
8b60: 5f 65 6e 64 3b 0a 20 20 7d 0a 20 20 73 7a 20 3d  _end;.  }.  sz =
8b70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
8b80: 79 74 65 73 28 61 72 67 76 5b 30 5d 29 3b 0a 20  ytes(argv[0]);. 
8b90: 20 69 66 28 20 62 42 69 6e 20 29 7b 0a 20 20 20   if( bBin ){.   
8ba0: 20 78 20 3d 20 66 77 72 69 74 65 28 73 71 6c 69   x = fwrite(sqli
8bb0: 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 61  te3_value_blob(a
8bc0: 72 67 76 5b 30 5d 29 2c 20 31 2c 20 73 7a 2c 20  rgv[0]), 1, sz, 
8bd0: 66 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  f);.  }else{.   
8be0: 20 78 20 3d 20 66 77 72 69 74 65 28 73 71 6c 69   x = fwrite(sqli
8bf0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61  te3_value_text(a
8c00: 72 67 76 5b 30 5d 29 2c 20 31 2c 20 73 7a 2c 20  rgv[0]), 1, sz, 
8c10: 66 29 3b 0a 20 20 7d 0a 20 20 66 63 6c 6f 73 65  f);.  }.  fclose
8c20: 28 66 29 3b 0a 20 20 66 20 3d 20 30 3b 0a 20 20  (f);.  f = 0;.  
8c30: 69 66 28 20 78 21 3d 73 7a 20 29 7b 0a 20 20 20  if( x!=sz ){.   
8c40: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
8c50: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22  error(context, "
8c60: 65 64 69 74 28 29 20 63 6f 75 6c 64 20 6e 6f 74  edit() could not
8c70: 20 77 72 69 74 65 20 74 68 65 20 77 68 6f 6c 65   write the whole
8c80: 20 66 69 6c 65 22 2c 20 2d 31 29 3b 0a 20 20 20   file", -1);.   
8c90: 20 67 6f 74 6f 20 65 64 69 74 5f 66 75 6e 63 5f   goto edit_func_
8ca0: 65 6e 64 3b 0a 20 20 7d 0a 20 20 7a 43 6d 64 20  end;.  }.  zCmd 
8cb0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
8cc0: 66 28 22 25 73 20 5c 22 25 73 5c 22 22 2c 20 7a  f("%s \"%s\"", z
8cd0: 45 64 69 74 6f 72 2c 20 7a 54 65 6d 70 46 69 6c  Editor, zTempFil
8ce0: 65 29 3b 0a 20 20 69 66 28 20 7a 43 6d 64 3d 3d  e);.  if( zCmd==
8cf0: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
8d00: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 6e 6f  _result_error_no
8d10: 6d 65 6d 28 63 6f 6e 74 65 78 74 29 3b 0a 20 20  mem(context);.  
8d20: 20 20 67 6f 74 6f 20 65 64 69 74 5f 66 75 6e 63    goto edit_func
8d30: 5f 65 6e 64 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  _end;.  }.  rc =
8d40: 20 73 79 73 74 65 6d 28 7a 43 6d 64 29 3b 0a 20   system(zCmd);. 
8d50: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43   sqlite3_free(zC
8d60: 6d 64 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  md);.  if( rc ){
8d70: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
8d80: 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
8d90: 74 2c 20 22 45 44 49 54 4f 52 20 72 65 74 75 72  t, "EDITOR retur
8da0: 6e 65 64 20 6e 6f 6e 2d 7a 65 72 6f 22 2c 20 2d  ned non-zero", -
8db0: 31 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 64 69  1);.    goto edi
8dc0: 74 5f 66 75 6e 63 5f 65 6e 64 3b 0a 20 20 7d 0a  t_func_end;.  }.
8dd0: 20 20 66 20 3d 20 66 6f 70 65 6e 28 7a 54 65 6d    f = fopen(zTem
8de0: 70 46 69 6c 65 2c 20 62 42 69 6e 20 3f 20 22 72  pFile, bBin ? "r
8df0: 62 22 20 3a 20 22 72 22 29 3b 0a 20 20 69 66 28  b" : "r");.  if(
8e00: 20 66 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c   f==0 ){.    sql
8e10: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
8e20: 72 28 63 6f 6e 74 65 78 74 2c 0a 20 20 20 20 20  r(context,.     
8e30: 20 22 65 64 69 74 28 29 20 63 61 6e 6e 6f 74 20   "edit() cannot 
8e40: 72 65 6f 70 65 6e 20 74 65 6d 70 20 66 69 6c 65  reopen temp file
8e50: 20 61 66 74 65 72 20 65 64 69 74 22 2c 20 2d 31   after edit", -1
8e60: 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 64 69 74  );.    goto edit
8e70: 5f 66 75 6e 63 5f 65 6e 64 3b 0a 20 20 7d 0a 20  _func_end;.  }. 
8e80: 20 66 73 65 65 6b 28 66 2c 20 30 2c 20 53 45 45   fseek(f, 0, SEE
8e90: 4b 5f 45 4e 44 29 3b 0a 20 20 73 7a 20 3d 20 66  K_END);.  sz = f
8ea0: 74 65 6c 6c 28 66 29 3b 0a 20 20 72 65 77 69 6e  tell(f);.  rewin
8eb0: 64 28 66 29 3b 0a 20 20 70 20 3d 20 73 71 6c 69  d(f);.  p = sqli
8ec0: 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 20 73 7a  te3_malloc64( sz
8ed0: 2b 28 62 42 69 6e 3d 3d 30 29 20 29 3b 0a 20 20  +(bBin==0) );.  
8ee0: 69 66 28 20 70 3d 3d 30 20 29 7b 0a 20 20 20 20  if( p==0 ){.    
8ef0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
8f00: 72 72 6f 72 5f 6e 6f 6d 65 6d 28 63 6f 6e 74 65  rror_nomem(conte
8f10: 78 74 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 64  xt);.    goto ed
8f20: 69 74 5f 66 75 6e 63 5f 65 6e 64 3b 0a 20 20 7d  it_func_end;.  }
8f30: 0a 20 20 69 66 28 20 62 42 69 6e 20 29 7b 0a 20  .  if( bBin ){. 
8f40: 20 20 20 78 20 3d 20 66 72 65 61 64 28 70 2c 20     x = fread(p, 
8f50: 31 2c 20 73 7a 2c 20 66 29 3b 0a 20 20 7d 65 6c  1, sz, f);.  }el
8f60: 73 65 7b 0a 20 20 20 20 78 20 3d 20 66 72 65 61  se{.    x = frea
8f70: 64 28 70 2c 20 31 2c 20 73 7a 2c 20 66 29 3b 0a  d(p, 1, sz, f);.
8f80: 20 20 20 20 70 5b 73 7a 5d 20 3d 20 30 3b 0a 20      p[sz] = 0;. 
8f90: 20 7d 0a 20 20 66 63 6c 6f 73 65 28 66 29 3b 0a   }.  fclose(f);.
8fa0: 20 20 66 20 3d 20 30 3b 0a 20 20 69 66 28 20 78    f = 0;.  if( x
8fb0: 21 3d 73 7a 20 29 7b 0a 20 20 20 20 73 71 6c 69  !=sz ){.    sqli
8fc0: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
8fd0: 28 63 6f 6e 74 65 78 74 2c 20 22 63 6f 75 6c 64  (context, "could
8fe0: 20 6e 6f 74 20 72 65 61 64 20 62 61 63 6b 20 74   not read back t
8ff0: 68 65 20 77 68 6f 6c 65 20 66 69 6c 65 22 2c 20  he whole file", 
9000: 2d 31 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 64  -1);.    goto ed
9010: 69 74 5f 66 75 6e 63 5f 65 6e 64 3b 0a 20 20 7d  it_func_end;.  }
9020: 0a 20 20 69 66 28 20 62 42 69 6e 20 29 7b 0a 20  .  if( bBin ){. 
9030: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
9040: 74 5f 62 6c 6f 62 36 34 28 63 6f 6e 74 65 78 74  t_blob64(context
9050: 2c 20 70 2c 20 73 7a 2c 20 73 71 6c 69 74 65 33  , p, sz, sqlite3
9060: 5f 66 72 65 65 29 3b 0a 20 20 7d 65 6c 73 65 7b  _free);.  }else{
9070: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
9080: 75 6c 74 5f 74 65 78 74 36 34 28 63 6f 6e 74 65  ult_text64(conte
9090: 78 74 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  xt, (const char*
90a0: 29 70 2c 20 73 7a 2c 0a 20 20 20 20 20 20 20 20  )p, sz,.        
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90c0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 2c 20    sqlite3_free, 
90d0: 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
90e0: 7d 0a 20 20 70 20 3d 20 30 3b 0a 0a 65 64 69 74  }.  p = 0;..edit
90f0: 5f 66 75 6e 63 5f 65 6e 64 3a 0a 20 20 69 66 28  _func_end:.  if(
9100: 20 66 20 29 20 66 63 6c 6f 73 65 28 66 29 3b 0a   f ) fclose(f);.
9110: 20 20 75 6e 6c 69 6e 6b 28 7a 54 65 6d 70 46 69    unlink(zTempFi
9120: 6c 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66  le);.  sqlite3_f
9130: 72 65 65 28 7a 54 65 6d 70 46 69 6c 65 29 3b 0a  ree(zTempFile);.
9140: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70    sqlite3_free(p
9150: 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  );.}.#endif /* S
9160: 51 4c 49 54 45 5f 4e 4f 48 41 56 45 5f 53 59 53  QLITE_NOHAVE_SYS
9170: 54 45 4d 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 61  TEM */../*.** Sa
9180: 76 65 20 6f 72 20 72 65 73 74 6f 72 65 20 74 68  ve or restore th
9190: 65 20 63 75 72 72 65 6e 74 20 6f 75 74 70 75 74  e current output
91a0: 20 6d 6f 64 65 0a 2a 2f 0a 73 74 61 74 69 63 20   mode.*/.static 
91b0: 76 6f 69 64 20 6f 75 74 70 75 74 4d 6f 64 65 50  void outputModeP
91c0: 75 73 68 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  ush(ShellState *
91d0: 70 29 7b 0a 20 20 70 2d 3e 6d 6f 64 65 50 72 69  p){.  p->modePri
91e0: 6f 72 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20  or = p->mode;.  
91f0: 6d 65 6d 63 70 79 28 70 2d 3e 63 6f 6c 53 65 70  memcpy(p->colSep
9200: 50 72 69 6f 72 2c 20 70 2d 3e 63 6f 6c 53 65 70  Prior, p->colSep
9210: 61 72 61 74 6f 72 2c 20 73 69 7a 65 6f 66 28 70  arator, sizeof(p
9220: 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 29  ->colSeparator))
9230: 3b 0a 20 20 6d 65 6d 63 70 79 28 70 2d 3e 72 6f  ;.  memcpy(p->ro
9240: 77 53 65 70 50 72 69 6f 72 2c 20 70 2d 3e 72 6f  wSepPrior, p->ro
9250: 77 53 65 70 61 72 61 74 6f 72 2c 20 73 69 7a 65  wSeparator, size
9260: 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  of(p->rowSeparat
9270: 6f 72 29 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  or));.}.static v
9280: 6f 69 64 20 6f 75 74 70 75 74 4d 6f 64 65 50 6f  oid outputModePo
9290: 70 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29  p(ShellState *p)
92a0: 7b 0a 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 70 2d  {.  p->mode = p-
92b0: 3e 6d 6f 64 65 50 72 69 6f 72 3b 0a 20 20 6d 65  >modePrior;.  me
92c0: 6d 63 70 79 28 70 2d 3e 63 6f 6c 53 65 70 61 72  mcpy(p->colSepar
92d0: 61 74 6f 72 2c 20 70 2d 3e 63 6f 6c 53 65 70 50  ator, p->colSepP
92e0: 72 69 6f 72 2c 20 73 69 7a 65 6f 66 28 70 2d 3e  rior, sizeof(p->
92f0: 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 29 3b 0a  colSeparator));.
9300: 20 20 6d 65 6d 63 70 79 28 70 2d 3e 72 6f 77 53    memcpy(p->rowS
9310: 65 70 61 72 61 74 6f 72 2c 20 70 2d 3e 72 6f 77  eparator, p->row
9320: 53 65 70 50 72 69 6f 72 2c 20 73 69 7a 65 6f 66  SepPrior, sizeof
9330: 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72  (p->rowSeparator
9340: 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74  ));.}../*.** Out
9350: 70 75 74 20 74 68 65 20 67 69 76 65 6e 20 73 74  put the given st
9360: 72 69 6e 67 20 61 73 20 61 20 68 65 78 2d 65 6e  ring as a hex-en
9370: 63 6f 64 65 64 20 62 6c 6f 62 20 28 65 67 2e 20  coded blob (eg. 
9380: 58 27 31 32 33 34 27 20 29 0a 2a 2f 0a 73 74 61  X'1234' ).*/.sta
9390: 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f  tic void output_
93a0: 68 65 78 5f 62 6c 6f 62 28 46 49 4c 45 20 2a 6f  hex_blob(FILE *o
93b0: 75 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ut, const void *
93c0: 70 42 6c 6f 62 2c 20 69 6e 74 20 6e 42 6c 6f 62  pBlob, int nBlob
93d0: 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68  ){.  int i;.  ch
93e0: 61 72 20 2a 7a 42 6c 6f 62 20 3d 20 28 63 68 61  ar *zBlob = (cha
93f0: 72 20 2a 29 70 42 6c 6f 62 3b 0a 20 20 72 61 77  r *)pBlob;.  raw
9400: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 58 27 22  _printf(out,"X'"
9410: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
9420: 6e 42 6c 6f 62 3b 20 69 2b 2b 29 7b 20 72 61 77  nBlob; i++){ raw
9430: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 25 30 32  _printf(out,"%02
9440: 78 22 2c 7a 42 6c 6f 62 5b 69 5d 26 30 78 66 66  x",zBlob[i]&0xff
9450: 29 3b 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e 74  ); }.  raw_print
9460: 66 28 6f 75 74 2c 22 27 22 29 3b 0a 7d 0a 0a 2f  f(out,"'");.}../
9470: 2a 0a 2a 2a 20 46 69 6e 64 20 61 20 73 74 72 69  *.** Find a stri
9480: 6e 67 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66  ng that is not f
9490: 6f 75 6e 64 20 61 6e 79 77 68 65 72 65 20 69 6e  ound anywhere in
94a0: 20 7a 5b 5d 2e 20 20 52 65 74 75 72 6e 20 61 20   z[].  Return a 
94b0: 70 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68  pointer.** to th
94c0: 61 74 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  at string..**.**
94d0: 20 54 72 79 20 74 6f 20 75 73 65 20 7a 41 20 61   Try to use zA a
94e0: 6e 64 20 7a 42 20 66 69 72 73 74 2e 20 20 49 66  nd zB first.  If
94f0: 20 62 6f 74 68 20 6f 66 20 74 68 6f 73 65 20 61   both of those a
9500: 72 65 20 61 6c 72 65 61 64 79 20 66 6f 75 6e 64  re already found
9510: 20 69 6e 20 7a 5b 5d 0a 2a 2a 20 74 68 65 6e 20   in z[].** then 
9520: 6d 61 6b 65 20 75 70 20 73 6f 6d 65 20 73 74 72  make up some str
9530: 69 6e 67 20 61 6e 64 20 73 74 6f 72 65 20 69 74  ing and store it
9540: 20 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 7a   in the buffer z
9550: 42 75 66 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  Buf..*/.static c
9560: 6f 6e 73 74 20 63 68 61 72 20 2a 75 6e 75 73 65  onst char *unuse
9570: 64 5f 73 74 72 69 6e 67 28 0a 20 20 63 6f 6e 73  d_string(.  cons
9580: 74 20 63 68 61 72 20 2a 7a 2c 20 20 20 20 20 20  t char *z,      
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
95a0: 20 52 65 73 75 6c 74 20 6d 75 73 74 20 6e 6f 74   Result must not
95b0: 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65   appear anywhere
95c0: 20 69 6e 20 7a 20 2a 2f 0a 20 20 63 6f 6e 73 74   in z */.  const
95d0: 20 63 68 61 72 20 2a 7a 41 2c 20 63 6f 6e 73 74   char *zA, const
95e0: 20 63 68 61 72 20 2a 7a 42 2c 20 20 20 2f 2a 20   char *zB,   /* 
95f0: 54 72 79 20 74 68 65 73 65 20 66 69 72 73 74 20  Try these first 
9600: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 75 66 20  */.  char *zBuf 
9610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9620: 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
9630: 74 6f 20 73 74 6f 72 65 20 61 20 67 65 6e 65 72  to store a gener
9640: 61 74 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29  ated string */.)
9650: 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 20 3d  {.  unsigned i =
9660: 20 30 3b 0a 20 20 69 66 28 20 73 74 72 73 74 72   0;.  if( strstr
9670: 28 7a 2c 20 7a 41 29 3d 3d 30 20 29 20 72 65 74  (z, zA)==0 ) ret
9680: 75 72 6e 20 7a 41 3b 0a 20 20 69 66 28 20 73 74  urn zA;.  if( st
9690: 72 73 74 72 28 7a 2c 20 7a 42 29 3d 3d 30 20 29  rstr(z, zB)==0 )
96a0: 20 72 65 74 75 72 6e 20 7a 42 3b 0a 20 20 64 6f   return zB;.  do
96b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  {.    sqlite3_sn
96c0: 70 72 69 6e 74 66 28 32 30 2c 7a 42 75 66 2c 22  printf(20,zBuf,"
96d0: 28 25 73 25 75 29 22 2c 20 7a 41 2c 20 69 2b 2b  (%s%u)", zA, i++
96e0: 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 73 74 72  );.  }while( str
96f0: 73 74 72 28 7a 2c 7a 42 75 66 29 21 3d 30 20 29  str(z,zBuf)!=0 )
9700: 3b 0a 20 20 72 65 74 75 72 6e 20 7a 42 75 66 3b  ;.  return zBuf;
9710: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74  .}../*.** Output
9720: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
9730: 67 20 61 73 20 61 20 71 75 6f 74 65 64 20 73 74  g as a quoted st
9740: 72 69 6e 67 20 75 73 69 6e 67 20 53 51 4c 20 71  ring using SQL q
9750: 75 6f 74 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f  uoting conventio
9760: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ns..**.** See al
9770: 73 6f 3a 20 6f 75 74 70 75 74 5f 71 75 6f 74 65  so: output_quote
9780: 64 5f 65 73 63 61 70 65 64 5f 73 74 72 69 6e 67  d_escaped_string
9790: 28 29 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  ().*/.static voi
97a0: 64 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f  d output_quoted_
97b0: 73 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75 74  string(FILE *out
97c0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  , const char *z)
97d0: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61  {.  int i;.  cha
97e0: 72 20 63 3b 0a 20 20 73 65 74 42 69 6e 61 72 79  r c;.  setBinary
97f0: 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a 20 20  Mode(out, 1);.  
9800: 66 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20 7a 5b  for(i=0; (c = z[
9810: 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27 5c 27  i])!=0 && c!='\'
9820: 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20  '; i++){}.  if( 
9830: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38  c==0 ){.    utf8
9840: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 25 73  _printf(out,"'%s
9850: 27 22 2c 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  '",z);.  }else{.
9860: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
9870: 75 74 2c 20 22 27 22 29 3b 0a 20 20 20 20 77 68  ut, "'");.    wh
9880: 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 20  ile( *z ){.     
9890: 20 66 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20 7a   for(i=0; (c = z
98a0: 5b 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27 5c  [i])!=0 && c!='\
98b0: 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20  ''; i++){}.     
98c0: 20 69 66 28 20 63 3d 3d 27 5c 27 27 20 29 20 69   if( c=='\'' ) i
98d0: 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 69 20  ++;.      if( i 
98e0: 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
98f0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 2e 2a  printf(out, "%.*
9900: 73 22 2c 20 69 2c 20 7a 29 3b 0a 20 20 20 20 20  s", i, z);.     
9910: 20 20 20 7a 20 2b 3d 20 69 3b 0a 20 20 20 20 20     z += i;.     
9920: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d   }.      if( c==
9930: 27 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 20 20  '\'' ){.        
9940: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  raw_printf(out, 
9950: 22 27 22 29 3b 0a 20 20 20 20 20 20 20 20 63 6f  "'");.        co
9960: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a  ntinue;.      }.
9970: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29        if( c==0 )
9980: 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  {.        break;
9990: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
99a0: 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 61  ++;.    }.    ra
99b0: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 27  w_printf(out, "'
99c0: 22 29 3b 0a 20 20 7d 0a 20 20 73 65 74 54 65 78  ");.  }.  setTex
99d0: 74 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a 7d  tMode(out, 1);.}
99e0: 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74  ../*.** Output t
99f0: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
9a00: 61 73 20 61 20 71 75 6f 74 65 64 20 73 74 72 69  as a quoted stri
9a10: 6e 67 20 75 73 69 6e 67 20 53 51 4c 20 71 75 6f  ng using SQL quo
9a20: 74 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  ting conventions
9a30: 2e 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 6c  ..** Additionall
9a40: 6c 79 20 2c 20 65 73 63 61 70 65 20 74 68 65 20  ly , escape the 
9a50: 22 5c 6e 22 20 61 6e 64 20 22 5c 72 22 20 63 68  "\n" and "\r" ch
9a60: 61 72 61 63 74 65 72 73 20 73 6f 20 74 68 61 74  aracters so that
9a70: 20 74 68 65 79 20 64 6f 20 6e 6f 74 0a 2a 2a 20   they do not.** 
9a80: 67 65 74 20 63 6f 72 72 75 70 74 65 64 20 62 79  get corrupted by
9a90: 20 65 6e 64 2d 6f 66 2d 6c 69 6e 65 20 74 72 61   end-of-line tra
9aa0: 6e 73 6c 61 74 69 6f 6e 20 66 61 63 69 6c 69 74  nslation facilit
9ab0: 69 65 73 20 69 6e 20 73 6f 6d 65 20 6f 70 65 72  ies in some oper
9ac0: 61 74 69 6e 67 0a 2a 2a 20 73 79 73 74 65 6d 73  ating.** systems
9ad0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
9ae0: 6c 69 6b 65 20 6f 75 74 70 75 74 5f 71 75 6f 74  like output_quot
9af0: 65 64 5f 73 74 72 69 6e 67 28 29 20 62 75 74 20  ed_string() but 
9b00: 77 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  with the additio
9b10: 6e 20 6f 66 20 74 68 65 20 5c 72 5c 6e 0a 2a 2a  n of the \r\n.**
9b20: 20 65 73 63 61 70 65 20 6d 65 63 68 61 6e 69 73   escape mechanis
9b30: 6d 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  m..*/.static voi
9b40: 64 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f  d output_quoted_
9b50: 65 73 63 61 70 65 64 5f 73 74 72 69 6e 67 28 46  escaped_string(F
9b60: 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20  ILE *out, const 
9b70: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20  char *z){.  int 
9b80: 69 3b 0a 20 20 63 68 61 72 20 63 3b 0a 20 20 73  i;.  char c;.  s
9b90: 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 6f 75 74  etBinaryMode(out
9ba0: 2c 20 31 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  , 1);.  for(i=0;
9bb0: 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26   (c = z[i])!=0 &
9bc0: 26 20 63 21 3d 27 5c 27 27 20 26 26 20 63 21 3d  & c!='\'' && c!=
9bd0: 27 5c 6e 27 20 26 26 20 63 21 3d 27 5c 72 27 3b  '\n' && c!='\r';
9be0: 20 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 63 3d   i++){}.  if( c=
9bf0: 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  =0 ){.    utf8_p
9c00: 72 69 6e 74 66 28 6f 75 74 2c 22 27 25 73 27 22  rintf(out,"'%s'"
9c10: 2c 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ,z);.  }else{.  
9c20: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
9c30: 4c 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74  L = 0;.    const
9c40: 20 63 68 61 72 20 2a 7a 43 52 20 3d 20 30 3b 0a   char *zCR = 0;.
9c50: 20 20 20 20 69 6e 74 20 6e 4e 4c 20 3d 20 30 3b      int nNL = 0;
9c60: 0a 20 20 20 20 69 6e 74 20 6e 43 52 20 3d 20 30  .    int nCR = 0
9c70: 3b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 31  ;.    char zBuf1
9c80: 5b 32 30 5d 2c 20 7a 42 75 66 32 5b 32 30 5d 3b  [20], zBuf2[20];
9c90: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 5b  .    for(i=0; z[
9ca0: 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  i]; i++){.      
9cb0: 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 6e 27 20 29  if( z[i]=='\n' )
9cc0: 20 6e 4e 4c 2b 2b 3b 0a 20 20 20 20 20 20 69 66   nNL++;.      if
9cd0: 28 20 7a 5b 69 5d 3d 3d 27 5c 72 27 20 29 20 6e  ( z[i]=='\r' ) n
9ce0: 43 52 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  CR++;.    }.    
9cf0: 69 66 28 20 6e 4e 4c 20 29 7b 0a 20 20 20 20 20  if( nNL ){.     
9d00: 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
9d10: 20 22 72 65 70 6c 61 63 65 28 22 29 3b 0a 20 20   "replace(");.  
9d20: 20 20 20 20 7a 4e 4c 20 3d 20 75 6e 75 73 65 64      zNL = unused
9d30: 5f 73 74 72 69 6e 67 28 7a 2c 20 22 5c 5c 6e 22  _string(z, "\\n"
9d40: 2c 20 22 5c 5c 30 31 32 22 2c 20 7a 42 75 66 31  , "\\012", zBuf1
9d50: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
9d60: 20 6e 43 52 20 29 7b 0a 20 20 20 20 20 20 72 61   nCR ){.      ra
9d70: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 72  w_printf(out, "r
9d80: 65 70 6c 61 63 65 28 22 29 3b 0a 20 20 20 20 20  eplace(");.     
9d90: 20 7a 43 52 20 3d 20 75 6e 75 73 65 64 5f 73 74   zCR = unused_st
9da0: 72 69 6e 67 28 7a 2c 20 22 5c 5c 72 22 2c 20 22  ring(z, "\\r", "
9db0: 5c 5c 30 31 35 22 2c 20 7a 42 75 66 32 29 3b 0a  \\015", zBuf2);.
9dc0: 20 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72      }.    raw_pr
9dd0: 69 6e 74 66 28 6f 75 74 2c 20 22 27 22 29 3b 0a  intf(out, "'");.
9de0: 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b      while( *z ){
9df0: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
9e00: 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26 26  (c = z[i])!=0 &&
9e10: 20 63 21 3d 27 5c 6e 27 20 26 26 20 63 21 3d 27   c!='\n' && c!='
9e20: 5c 72 27 20 26 26 20 63 21 3d 27 5c 27 27 3b 20  \r' && c!='\''; 
9e30: 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 69 66 28  i++){}.      if(
9e40: 20 63 3d 3d 27 5c 27 27 20 29 20 69 2b 2b 3b 0a   c=='\'' ) i++;.
9e50: 20 20 20 20 20 20 69 66 28 20 69 20 29 7b 0a 20        if( i ){. 
9e60: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
9e70: 74 66 28 6f 75 74 2c 20 22 25 2e 2a 73 22 2c 20  tf(out, "%.*s", 
9e80: 69 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 7a  i, z);.        z
9e90: 20 2b 3d 20 69 3b 0a 20 20 20 20 20 20 7d 0a 20   += i;.      }. 
9ea0: 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c 27 27       if( c=='\''
9eb0: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
9ec0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 27 22 29  printf(out, "'")
9ed0: 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e  ;.        contin
9ee0: 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ue;.      }.    
9ef0: 20 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20 20    if( c==0 ){.  
9f00: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9f10: 20 20 20 7d 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a     }.      z++;.
9f20: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c 6e        if( c=='\n
9f30: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  ' ){.        raw
9f40: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73  _printf(out, "%s
9f50: 22 2c 20 7a 4e 4c 29 3b 0a 20 20 20 20 20 20 20  ", zNL);.       
9f60: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
9f70: 20 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69   }.      raw_pri
9f80: 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a  ntf(out, "%s", z
9f90: 43 52 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  CR);.    }.    r
9fa0: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
9fb0: 27 22 29 3b 0a 20 20 20 20 69 66 28 20 6e 43 52  '");.    if( nCR
9fc0: 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
9fd0: 69 6e 74 66 28 6f 75 74 2c 20 22 2c 27 25 73 27  intf(out, ",'%s'
9fe0: 2c 63 68 61 72 28 31 33 29 29 22 2c 20 7a 43 52  ,char(13))", zCR
9ff0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
a000: 20 6e 4e 4c 20 29 7b 0a 20 20 20 20 20 20 72 61   nNL ){.      ra
a010: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 2c  w_printf(out, ",
a020: 27 25 73 27 2c 63 68 61 72 28 31 30 29 29 22 2c  '%s',char(10))",
a030: 20 7a 4e 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d   zNL);.    }.  }
a040: 0a 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28 6f  .  setTextMode(o
a050: 75 74 2c 20 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ut, 1);.}../*.**
a060: 20 4f 75 74 70 75 74 20 74 68 65 20 67 69 76 65   Output the give
a070: 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 71 75  n string as a qu
a080: 6f 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  oted according t
a090: 6f 20 43 20 6f 72 20 54 43 4c 20 71 75 6f 74 69  o C or TCL quoti
a0a0: 6e 67 20 72 75 6c 65 73 2e 0a 2a 2f 0a 73 74 61  ng rules..*/.sta
a0b0: 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f  tic void output_
a0c0: 63 5f 73 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f  c_string(FILE *o
a0d0: 75 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ut, const char *
a0e0: 7a 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69  z){.  unsigned i
a0f0: 6e 74 20 63 3b 0a 20 20 66 70 75 74 63 28 27 22  nt c;.  fputc('"
a100: 27 2c 20 6f 75 74 29 3b 0a 20 20 77 68 69 6c 65  ', out);.  while
a110: 28 20 28 63 20 3d 20 2a 28 7a 2b 2b 29 29 21 3d  ( (c = *(z++))!=
a120: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 63 3d 3d  0 ){.    if( c==
a130: 27 5c 5c 27 20 29 7b 0a 20 20 20 20 20 20 66 70  '\\' ){.      fp
a140: 75 74 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20 20  utc(c, out);.   
a150: 20 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74 29     fputc(c, out)
a160: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
a170: 63 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20 20 20  c=='"' ){.      
a180: 66 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29  fputc('\\', out)
a190: 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27 22  ;.      fputc('"
a1a0: 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c  ', out);.    }el
a1b0: 73 65 20 69 66 28 20 63 3d 3d 27 5c 74 27 20 29  se if( c=='\t' )
a1c0: 7b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27 5c  {.      fputc('\
a1d0: 5c 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20  \', out);.      
a1e0: 66 70 75 74 63 28 27 74 27 2c 20 6f 75 74 29 3b  fputc('t', out);
a1f0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
a200: 3d 3d 27 5c 6e 27 20 29 7b 0a 20 20 20 20 20 20  =='\n' ){.      
a210: 66 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29  fputc('\\', out)
a220: 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27 6e  ;.      fputc('n
a230: 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c  ', out);.    }el
a240: 73 65 20 69 66 28 20 63 3d 3d 27 5c 72 27 20 29  se if( c=='\r' )
a250: 7b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27 5c  {.      fputc('\
a260: 5c 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20  \', out);.      
a270: 66 70 75 74 63 28 27 72 27 2c 20 6f 75 74 29 3b  fputc('r', out);
a280: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 21  .    }else if( !
a290: 69 73 70 72 69 6e 74 28 63 26 30 78 66 66 29 20  isprint(c&0xff) 
a2a0: 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
a2b0: 6e 74 66 28 6f 75 74 2c 20 22 5c 5c 25 30 33 6f  ntf(out, "\\%03o
a2c0: 22 2c 20 63 26 30 78 66 66 29 3b 0a 20 20 20 20  ", c&0xff);.    
a2d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 70 75  }else{.      fpu
a2e0: 74 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20 20 20  tc(c, out);.    
a2f0: 7d 0a 20 20 7d 0a 20 20 66 70 75 74 63 28 27 22  }.  }.  fputc('"
a300: 27 2c 20 6f 75 74 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  ', out);.}../*.*
a310: 2a 20 4f 75 74 70 75 74 20 74 68 65 20 67 69 76  * Output the giv
a320: 65 6e 20 73 74 72 69 6e 67 20 77 69 74 68 20 63  en string with c
a330: 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
a340: 72 65 20 73 70 65 63 69 61 6c 20 74 6f 0a 2a 2a  re special to.**
a350: 20 48 54 4d 4c 20 65 73 63 61 70 65 64 2e 0a 2a   HTML escaped..*
a360: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75  /.static void ou
a370: 74 70 75 74 5f 68 74 6d 6c 5f 73 74 72 69 6e 67  tput_html_string
a380: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73  (FILE *out, cons
a390: 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e  t char *z){.  in
a3a0: 74 20 69 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20  t i;.  if( z==0 
a3b0: 29 20 7a 20 3d 20 22 22 3b 0a 20 20 77 68 69 6c  ) z = "";.  whil
a3c0: 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 66 6f 72  e( *z ){.    for
a3d0: 28 69 3d 30 3b 20 20 20 7a 5b 69 5d 0a 20 20 20  (i=0;   z[i].   
a3e0: 20 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69 5d           && z[i]
a3f0: 21 3d 27 3c 27 0a 20 20 20 20 20 20 20 20 20 20  !='<'.          
a400: 20 20 26 26 20 7a 5b 69 5d 21 3d 27 26 27 0a 20    && z[i]!='&'. 
a410: 20 20 20 20 20 20 20 20 20 20 20 26 26 20 7a 5b             && z[
a420: 69 5d 21 3d 27 3e 27 0a 20 20 20 20 20 20 20 20  i]!='>'.        
a430: 20 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 5c 22      && z[i]!='\"
a440: 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  '.            &&
a450: 20 7a 5b 69 5d 21 3d 27 5c 27 27 3b 0a 20 20 20   z[i]!='\'';.   
a460: 20 20 20 20 20 69 2b 2b 29 7b 7d 0a 20 20 20 20       i++){}.    
a470: 69 66 28 20 69 3e 30 20 29 7b 0a 20 20 20 20 20  if( i>0 ){.     
a480: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74   utf8_printf(out
a490: 2c 22 25 2e 2a 73 22 2c 69 2c 7a 29 3b 0a 20 20  ,"%.*s",i,z);.  
a4a0: 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 5b 69 5d    }.    if( z[i]
a4b0: 3d 3d 27 3c 27 20 29 7b 0a 20 20 20 20 20 20 72  =='<' ){.      r
a4c0: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 26  aw_printf(out,"&
a4d0: 6c 74 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  lt;");.    }else
a4e0: 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 26 27 20 29   if( z[i]=='&' )
a4f0: 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
a500: 74 66 28 6f 75 74 2c 22 26 61 6d 70 3b 22 29 3b  tf(out,"&amp;");
a510: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  .    }else if( z
a520: 5b 69 5d 3d 3d 27 3e 27 20 29 7b 0a 20 20 20 20  [i]=='>' ){.    
a530: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
a540: 2c 22 26 67 74 3b 22 29 3b 0a 20 20 20 20 7d 65  ,"&gt;");.    }e
a550: 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c  lse if( z[i]=='\
a560: 22 27 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  "' ){.      raw_
a570: 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 71 75 6f  printf(out,"&quo
a580: 74 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  t;");.    }else 
a590: 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 27 27 20 29  if( z[i]=='\'' )
a5a0: 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
a5b0: 74 66 28 6f 75 74 2c 22 26 23 33 39 3b 22 29 3b  tf(out,"&#39;");
a5c0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
a5d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
a5e0: 20 20 20 7a 20 2b 3d 20 69 20 2b 20 31 3b 0a 20     z += i + 1;. 
a5f0: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 61   }.}../*.** If a
a600: 20 66 69 65 6c 64 20 63 6f 6e 74 61 69 6e 73 20   field contains 
a610: 61 6e 79 20 63 68 61 72 61 63 74 65 72 20 69 64  any character id
a620: 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 31 20  entified by a 1 
a630: 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
a640: 0a 2a 2a 20 61 72 72 61 79 2c 20 74 68 65 6e 20  .** array, then 
a650: 74 68 65 20 73 74 72 69 6e 67 20 6d 75 73 74 20  the string must 
a660: 62 65 20 71 75 6f 74 65 64 20 66 6f 72 20 43 53  be quoted for CS
a670: 56 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e  V..*/.static con
a680: 73 74 20 63 68 61 72 20 6e 65 65 64 43 73 76 51  st char needCsvQ
a690: 75 6f 74 65 5b 5d 20 3d 20 7b 0a 20 20 31 2c 20  uote[] = {.  1, 
a6a0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
a6b0: 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20  , 1,   1, 1, 1, 
a6c0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20  1, 1, 1, 1, 1,. 
a6d0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
a6e0: 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c  1, 1, 1,   1, 1,
a6f0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
a700: 31 2c 0a 20 20 31 2c 20 30 2c 20 31 2c 20 30 2c  1,.  1, 0, 1, 0,
a710: 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 20 20 30   0, 0, 0, 1,   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 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30   0, 0,.  0, 0, 0
a740: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
a750: 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30     0, 0, 0, 0, 0
a760: 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20  , 0, 0, 0,.  0, 
a770: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
a780: 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20  , 0,   0, 0, 0, 
a790: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20  0, 0, 0, 0, 0,. 
a7a0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
a7b0: 30 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c  0, 0, 0,   0, 0,
a7c0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
a7d0: 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c  0,.  0, 0, 0, 0,
a7e0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20 30   0, 0, 0, 0,   0
a7f0: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
a800: 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30   0, 0,.  0, 0, 0
a810: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
a820: 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30     0, 0, 0, 0, 0
a830: 2c 20 30 2c 20 30 2c 20 31 2c 0a 20 20 31 2c 20  , 0, 0, 1,.  1, 
a840: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
a850: 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20  , 1,   1, 1, 1, 
a860: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20  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 20 31 2c 20 31 2c 20 20 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 31 2c 20   1, 1, 1, 1, 1, 
a8a0: 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  1,.  1, 1, 1, 1,
a8b0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 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 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31   1, 1,.  1, 1, 1
a8e0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
a8f0: 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31     1, 1, 1, 1, 1
a900: 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20  , 1, 1, 1,.  1, 
a910: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
a920: 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20  , 1,   1, 1, 1, 
a930: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20  1, 1, 1, 1, 1,. 
a940: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
a950: 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c  1, 1, 1,   1, 1,
a960: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
a970: 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  1,.  1, 1, 1, 1,
a980: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31   1, 1, 1, 1,   1
a990: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
a9a0: 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31   1, 1,.  1, 1, 1
a9b0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
a9c0: 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31     1, 1, 1, 1, 1
a9d0: 2c 20 31 2c 20 31 2c 20 31 2c 0a 7d 3b 0a 0a 2f  , 1, 1, 1,.};../
a9e0: 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 61 20 73 69  *.** Output a si
a9f0: 6e 67 6c 65 20 74 65 72 6d 20 6f 66 20 43 53 56  ngle term of CSV
aa00: 2e 20 20 41 63 74 75 61 6c 6c 79 2c 20 70 2d 3e  .  Actually, p->
aa10: 63 6f 6c 53 65 70 61 72 61 74 6f 72 20 69 73 20  colSeparator is 
aa20: 75 73 65 64 20 66 6f 72 0a 2a 2a 20 74 68 65 20  used for.** the 
aa30: 73 65 70 61 72 61 74 6f 72 2c 20 77 68 69 63 68  separator, which
aa40: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
aa50: 62 65 20 61 20 63 6f 6d 6d 61 2e 20 20 70 2d 3e  be a comma.  p->
aa60: 6e 75 6c 6c 56 61 6c 75 65 20 69 73 0a 2a 2a 20  nullValue is.** 
aa70: 74 68 65 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 20  the null value. 
aa80: 20 53 74 72 69 6e 67 73 20 61 72 65 20 71 75 6f   Strings are quo
aa90: 74 65 64 20 69 66 20 6e 65 63 65 73 73 61 72 79  ted if necessary
aaa0: 2e 20 20 54 68 65 20 73 65 70 61 72 61 74 6f 72  .  The separator
aab0: 0a 2a 2a 20 69 73 20 6f 6e 6c 79 20 69 73 73 75  .** is only issu
aac0: 65 64 20 69 66 20 62 53 65 70 20 69 73 20 74 72  ed if bSep is tr
aad0: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ue..*/.static vo
aae0: 69 64 20 6f 75 74 70 75 74 5f 63 73 76 28 53 68  id output_csv(Sh
aaf0: 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
ab00: 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
ab10: 62 53 65 70 29 7b 0a 20 20 46 49 4c 45 20 2a 6f  bSep){.  FILE *o
ab20: 75 74 20 3d 20 70 2d 3e 6f 75 74 3b 0a 20 20 69  ut = p->out;.  i
ab30: 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 75  f( z==0 ){.    u
ab40: 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22  tf8_printf(out,"
ab50: 25 73 22 2c 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  %s",p->nullValue
ab60: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
ab70: 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6e  int i;.    int n
ab80: 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70  Sep = strlen30(p
ab90: 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b  ->colSeparator);
aba0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 5b  .    for(i=0; z[
abb0: 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  i]; i++){.      
abc0: 69 66 28 20 6e 65 65 64 43 73 76 51 75 6f 74 65  if( needCsvQuote
abd0: 5b 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  [((unsigned char
abe0: 2a 29 7a 29 5b 69 5d 5d 0a 20 20 20 20 20 20 20  *)z)[i]].       
abf0: 20 20 7c 7c 20 28 7a 5b 69 5d 3d 3d 70 2d 3e 63    || (z[i]==p->c
ac00: 6f 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 20 26  olSeparator[0] &
ac10: 26 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28  &.             (
ac20: 6e 53 65 70 3d 3d 31 20 7c 7c 20 6d 65 6d 63 6d  nSep==1 || memcm
ac30: 70 28 7a 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  p(z, p->colSepar
ac40: 61 74 6f 72 2c 20 6e 53 65 70 29 3d 3d 30 29 29  ator, nSep)==0))
ac50: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 20 3d 20   ){.        i = 
ac60: 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  0;.        break
ac70: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
ac80: 20 20 20 20 69 66 28 20 69 3d 3d 30 20 29 7b 0a      if( i==0 ){.
ac90: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 51 75 6f        char *zQuo
aca0: 74 65 64 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ted = sqlite3_mp
acb0: 72 69 6e 74 66 28 22 5c 22 25 77 5c 22 22 2c 20  rintf("\"%w\"", 
acc0: 7a 29 3b 0a 20 20 20 20 20 20 75 74 66 38 5f 70  z);.      utf8_p
acd0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c  rintf(out, "%s",
ace0: 20 7a 51 75 6f 74 65 64 29 3b 0a 20 20 20 20 20   zQuoted);.     
acf0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51   sqlite3_free(zQ
ad00: 75 6f 74 65 64 29 3b 0a 20 20 20 20 7d 65 6c 73  uoted);.    }els
ad10: 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  e{.      utf8_pr
ad20: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
ad30: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  z);.    }.  }.  
ad40: 69 66 28 20 62 53 65 70 20 29 7b 0a 20 20 20 20  if( bSep ){.    
ad50: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
ad60: 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c  ut, "%s", p->col
ad70: 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 7d 0a  Separator);.  }.
ad80: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  }../*.** This ro
ad90: 75 74 69 6e 65 20 72 75 6e 73 20 77 68 65 6e 20  utine runs when 
ada0: 74 68 65 20 75 73 65 72 20 70 72 65 73 73 65 73  the user presses
adb0: 20 43 74 72 6c 2d 43 0a 2a 2f 0a 73 74 61 74 69   Ctrl-C.*/.stati
adc0: 63 20 76 6f 69 64 20 69 6e 74 65 72 72 75 70 74  c void interrupt
add0: 5f 68 61 6e 64 6c 65 72 28 69 6e 74 20 4e 6f 74  _handler(int Not
ade0: 55 73 65 64 29 7b 0a 20 20 55 4e 55 53 45 44 5f  Used){.  UNUSED_
adf0: 50 41 52 41 4d 45 54 45 52 28 4e 6f 74 55 73 65  PARAMETER(NotUse
ae00: 64 29 3b 0a 20 20 73 65 65 6e 49 6e 74 65 72 72  d);.  seenInterr
ae10: 75 70 74 2b 2b 3b 0a 20 20 69 66 28 20 73 65 65  upt++;.  if( see
ae20: 6e 49 6e 74 65 72 72 75 70 74 3e 32 20 29 20 65  nInterrupt>2 ) e
ae30: 78 69 74 28 31 29 3b 0a 20 20 69 66 28 20 67 6c  xit(1);.  if( gl
ae40: 6f 62 61 6c 44 62 20 29 20 73 71 6c 69 74 65 33  obalDb ) sqlite3
ae50: 5f 69 6e 74 65 72 72 75 70 74 28 67 6c 6f 62 61  _interrupt(globa
ae60: 6c 44 62 29 3b 0a 7d 0a 0a 23 69 66 20 28 64 65  lDb);.}..#if (de
ae70: 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c  fined(_WIN32) ||
ae80: 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 29   defined(WIN32))
ae90: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49   && !defined(_WI
aea0: 4e 33 32 5f 57 43 45 29 0a 2f 2a 0a 2a 2a 20 54  N32_WCE)./*.** T
aeb0: 68 69 73 20 72 6f 75 74 69 6e 65 20 72 75 6e 73  his routine runs
aec0: 20 66 6f 72 20 63 6f 6e 73 6f 6c 65 20 65 76 65   for console eve
aed0: 6e 74 73 20 28 65 2e 67 2e 20 43 74 72 6c 2d 43  nts (e.g. Ctrl-C
aee0: 29 20 6f 6e 20 57 69 6e 33 32 0a 2a 2f 0a 73 74  ) on Win32.*/.st
aef0: 61 74 69 63 20 42 4f 4f 4c 20 57 49 4e 41 50 49  atic BOOL WINAPI
af00: 20 43 6f 6e 73 6f 6c 65 43 74 72 6c 48 61 6e 64   ConsoleCtrlHand
af10: 6c 65 72 28 0a 20 20 44 57 4f 52 44 20 64 77 43  ler(.  DWORD dwC
af20: 74 72 6c 54 79 70 65 20 2f 2a 20 4f 6e 65 20 6f  trlType /* One o
af30: 66 20 74 68 65 20 43 54 52 4c 5f 2a 5f 45 56 45  f the CTRL_*_EVE
af40: 4e 54 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  NT constants */.
af50: 29 7b 0a 20 20 69 66 28 20 64 77 43 74 72 6c 54  ){.  if( dwCtrlT
af60: 79 70 65 3d 3d 43 54 52 4c 5f 43 5f 45 56 45 4e  ype==CTRL_C_EVEN
af70: 54 20 29 7b 0a 20 20 20 20 69 6e 74 65 72 72 75  T ){.    interru
af80: 70 74 5f 68 61 6e 64 6c 65 72 28 30 29 3b 0a 20  pt_handler(0);. 
af90: 20 20 20 72 65 74 75 72 6e 20 54 52 55 45 3b 0a     return TRUE;.
afa0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 46 41 4c    }.  return FAL
afb0: 53 45 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  SE;.}.#endif..#i
afc0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
afd0: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
afe0: 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 65 20 22  /*.** When the "
aff0: 2e 61 75 74 68 20 4f 4e 22 20 69 73 20 73 65 74  .auth ON" is set
b000: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
b010: 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62  authorizer callb
b020: 61 63 6b 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65  ack is.** invoke
b030: 64 2e 20 20 49 74 20 61 6c 77 61 79 73 20 72 65  d.  It always re
b040: 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2e  turns SQLITE_OK.
b050: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
b060: 68 65 6c 6c 41 75 74 68 28 0a 20 20 76 6f 69 64  hellAuth(.  void
b070: 20 2a 70 43 6c 69 65 6e 74 44 61 74 61 2c 0a 20   *pClientData,. 
b080: 20 69 6e 74 20 6f 70 2c 0a 20 20 63 6f 6e 73 74   int op,.  const
b090: 20 63 68 61 72 20 2a 7a 41 31 2c 0a 20 20 63 6f   char *zA1,.  co
b0a0: 6e 73 74 20 63 68 61 72 20 2a 7a 41 32 2c 0a 20  nst char *zA2,. 
b0b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 33   const char *zA3
b0c0: 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
b0d0: 7a 41 34 0a 29 7b 0a 20 20 53 68 65 6c 6c 53 74  zA4.){.  ShellSt
b0e0: 61 74 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53  ate *p = (ShellS
b0f0: 74 61 74 65 2a 29 70 43 6c 69 65 6e 74 44 61 74  tate*)pClientDat
b100: 61 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  a;.  static cons
b110: 74 20 63 68 61 72 20 2a 61 7a 41 63 74 69 6f 6e  t char *azAction
b120: 5b 5d 20 3d 20 7b 20 30 2c 0a 20 20 20 20 20 22  [] = { 0,.     "
b130: 43 52 45 41 54 45 5f 49 4e 44 45 58 22 2c 20 20  CREATE_INDEX",  
b140: 20 20 20 20 20 20 20 22 43 52 45 41 54 45 5f 54         "CREATE_T
b150: 41 42 4c 45 22 2c 20 20 20 20 20 20 20 20 20 22  ABLE",         "
b160: 43 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45  CREATE_TEMP_INDE
b170: 58 22 2c 0a 20 20 20 20 20 22 43 52 45 41 54 45  X",.     "CREATE
b180: 5f 54 45 4d 50 5f 54 41 42 4c 45 22 2c 20 20 20  _TEMP_TABLE",   
b190: 20 22 43 52 45 41 54 45 5f 54 45 4d 50 5f 54 52   "CREATE_TEMP_TR
b1a0: 49 47 47 45 52 22 2c 20 20 22 43 52 45 41 54 45  IGGER",  "CREATE
b1b0: 5f 54 45 4d 50 5f 56 49 45 57 22 2c 0a 20 20 20  _TEMP_VIEW",.   
b1c0: 20 20 22 43 52 45 41 54 45 5f 54 52 49 47 47 45    "CREATE_TRIGGE
b1d0: 52 22 2c 20 20 20 20 20 20 20 22 43 52 45 41 54  R",       "CREAT
b1e0: 45 5f 56 49 45 57 22 2c 20 20 20 20 20 20 20 20  E_VIEW",        
b1f0: 20 20 22 44 45 4c 45 54 45 22 2c 0a 20 20 20 20    "DELETE",.    
b200: 20 22 44 52 4f 50 5f 49 4e 44 45 58 22 2c 20 20   "DROP_INDEX",  
b210: 20 20 20 20 20 20 20 20 20 22 44 52 4f 50 5f 54           "DROP_T
b220: 41 42 4c 45 22 2c 20 20 20 20 20 20 20 20 20 20  ABLE",          
b230: 20 22 44 52 4f 50 5f 54 45 4d 50 5f 49 4e 44 45   "DROP_TEMP_INDE
b240: 58 22 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f 54  X",.     "DROP_T
b250: 45 4d 50 5f 54 41 42 4c 45 22 2c 20 20 20 20 20  EMP_TABLE",     
b260: 20 22 44 52 4f 50 5f 54 45 4d 50 5f 54 52 49 47   "DROP_TEMP_TRIG
b270: 47 45 52 22 2c 20 20 20 20 22 44 52 4f 50 5f 54  GER",    "DROP_T
b280: 45 4d 50 5f 56 49 45 57 22 2c 0a 20 20 20 20 20  EMP_VIEW",.     
b290: 22 44 52 4f 50 5f 54 52 49 47 47 45 52 22 2c 20  "DROP_TRIGGER", 
b2a0: 20 20 20 20 20 20 20 20 22 44 52 4f 50 5f 56 49          "DROP_VI
b2b0: 45 57 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  EW",            
b2c0: 22 49 4e 53 45 52 54 22 2c 0a 20 20 20 20 20 22  "INSERT",.     "
b2d0: 50 52 41 47 4d 41 22 2c 20 20 20 20 20 20 20 20  PRAGMA",        
b2e0: 20 20 20 20 20 20 20 22 52 45 41 44 22 2c 20 20         "READ",  
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
b300: 53 45 4c 45 43 54 22 2c 0a 20 20 20 20 20 22 54  SELECT",.     "T
b310: 52 41 4e 53 41 43 54 49 4f 4e 22 2c 20 20 20 20  RANSACTION",    
b320: 20 20 20 20 20 20 22 55 50 44 41 54 45 22 2c 20        "UPDATE", 
b330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
b340: 54 54 41 43 48 22 2c 0a 20 20 20 20 20 22 44 45  TTACH",.     "DE
b350: 54 41 43 48 22 2c 20 20 20 20 20 20 20 20 20 20  TACH",          
b360: 20 20 20 20 20 22 41 4c 54 45 52 5f 54 41 42 4c       "ALTER_TABL
b370: 45 22 2c 20 20 20 20 20 20 20 20 20 20 22 52 45  E",          "RE
b380: 49 4e 44 45 58 22 2c 0a 20 20 20 20 20 22 41 4e  INDEX",.     "AN
b390: 41 4c 59 5a 45 22 2c 20 20 20 20 20 20 20 20 20  ALYZE",         
b3a0: 20 20 20 20 20 22 43 52 45 41 54 45 5f 56 54 41       "CREATE_VTA
b3b0: 42 4c 45 22 2c 20 20 20 20 20 20 20 20 22 44 52  BLE",        "DR
b3c0: 4f 50 5f 56 54 41 42 4c 45 22 2c 0a 20 20 20 20  OP_VTABLE",.    
b3d0: 20 22 46 55 4e 43 54 49 4f 4e 22 2c 20 20 20 20   "FUNCTION",    
b3e0: 20 20 20 20 20 20 20 20 20 22 53 41 56 45 50 4f           "SAVEPO
b3f0: 49 4e 54 22 2c 20 20 20 20 20 20 20 20 20 20 20  INT",           
b400: 20 22 52 45 43 55 52 53 49 56 45 22 0a 20 20 7d   "RECURSIVE".  }
b410: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 6f 6e  ;.  int i;.  con
b420: 73 74 20 63 68 61 72 20 2a 61 7a 5b 34 5d 3b 0a  st char *az[4];.
b430: 20 20 61 7a 5b 30 5d 20 3d 20 7a 41 31 3b 0a 20    az[0] = zA1;. 
b440: 20 61 7a 5b 31 5d 20 3d 20 7a 41 32 3b 0a 20 20   az[1] = zA2;.  
b450: 61 7a 5b 32 5d 20 3d 20 7a 41 33 3b 0a 20 20 61  az[2] = zA3;.  a
b460: 7a 5b 33 5d 20 3d 20 7a 41 34 3b 0a 20 20 75 74  z[3] = zA4;.  ut
b470: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
b480: 2c 20 22 61 75 74 68 6f 72 69 7a 65 72 3a 20 25  , "authorizer: %
b490: 73 22 2c 20 61 7a 41 63 74 69 6f 6e 5b 6f 70 5d  s", azAction[op]
b4a0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
b4b0: 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 72 61 77  4; i++){.    raw
b4c0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
b4d0: 22 20 22 29 3b 0a 20 20 20 20 69 66 28 20 61 7a  " ");.    if( az
b4e0: 5b 69 5d 20 29 7b 0a 20 20 20 20 20 20 6f 75 74  [i] ){.      out
b4f0: 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e  put_c_string(p->
b500: 6f 75 74 2c 20 61 7a 5b 69 5d 29 3b 0a 20 20 20  out, az[i]);.   
b510: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
b520: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
b530: 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a   "NULL");.    }.
b540: 20 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e 74 66    }.  raw_printf
b550: 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a  (p->out, "\n");.
b560: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
b570: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OK;.}.#endif../*
b580: 0a 2a 2a 20 50 72 69 6e 74 20 61 20 73 63 68 65  .** Print a sche
b590: 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 50  ma statement.  P
b5a0: 61 72 74 20 6f 66 20 4d 4f 44 45 5f 53 65 6d 69  art of MODE_Semi
b5b0: 20 61 6e 64 20 4d 4f 44 45 5f 50 72 65 74 74 79   and MODE_Pretty
b5c0: 20 6f 75 74 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 54   output..**.** T
b5d0: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
b5e0: 65 72 74 73 20 73 6f 6d 65 20 43 52 45 41 54 45  erts some CREATE
b5f0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
b600: 73 20 66 6f 72 20 73 68 61 64 6f 77 20 74 61 62  s for shadow tab
b610: 6c 65 73 0a 2a 2a 20 69 6e 20 46 54 53 33 2f 34  les.** in FTS3/4
b620: 2f 35 20 69 6e 74 6f 20 43 52 45 41 54 45 20 54  /5 into CREATE T
b630: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53  ABLE IF NOT EXIS
b640: 54 53 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  TS statements..*
b650: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 72  /.static void pr
b660: 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 46 49  intSchemaLine(FI
b670: 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63  LE *out, const c
b680: 68 61 72 20 2a 7a 2c 20 63 6f 6e 73 74 20 63 68  har *z, const ch
b690: 61 72 20 2a 7a 54 61 69 6c 29 7b 0a 20 20 69 66  ar *zTail){.  if
b6a0: 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f  ( sqlite3_strglo
b6b0: 62 28 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  b("CREATE TABLE 
b6c0: 5b 27 5c 22 5d 2a 22 2c 20 7a 29 3d 3d 30 20 29  ['\"]*", z)==0 )
b6d0: 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  {.    utf8_print
b6e0: 66 28 6f 75 74 2c 20 22 43 52 45 41 54 45 20 54  f(out, "CREATE T
b6f0: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53  ABLE IF NOT EXIS
b700: 54 53 20 25 73 25 73 22 2c 20 7a 2b 31 33 2c 20  TS %s%s", z+13, 
b710: 7a 54 61 69 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b  zTail);.  }else{
b720: 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
b730: 28 6f 75 74 2c 20 22 25 73 25 73 22 2c 20 7a 2c  (out, "%s%s", z,
b740: 20 7a 54 61 69 6c 29 3b 0a 20 20 7d 0a 7d 0a 73   zTail);.  }.}.s
b750: 74 61 74 69 63 20 76 6f 69 64 20 70 72 69 6e 74  tatic void print
b760: 53 63 68 65 6d 61 4c 69 6e 65 4e 28 46 49 4c 45  SchemaLineN(FILE
b770: 20 2a 6f 75 74 2c 20 63 68 61 72 20 2a 7a 2c 20   *out, char *z, 
b780: 69 6e 74 20 6e 2c 20 63 6f 6e 73 74 20 63 68 61  int n, const cha
b790: 72 20 2a 7a 54 61 69 6c 29 7b 0a 20 20 63 68 61  r *zTail){.  cha
b7a0: 72 20 63 20 3d 20 7a 5b 6e 5d 3b 0a 20 20 7a 5b  r c = z[n];.  z[
b7b0: 6e 5d 20 3d 20 30 3b 0a 20 20 70 72 69 6e 74 53  n] = 0;.  printS
b7c0: 63 68 65 6d 61 4c 69 6e 65 28 6f 75 74 2c 20 7a  chemaLine(out, z
b7d0: 2c 20 7a 54 61 69 6c 29 3b 0a 20 20 7a 5b 6e 5d  , zTail);.  z[n]
b7e0: 20 3d 20 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52   = c;.}../*.** R
b7f0: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 73 74  eturn true if st
b800: 72 69 6e 67 20 7a 5b 5d 20 68 61 73 20 6e 6f 74  ring z[] has not
b810: 68 69 6e 67 20 62 75 74 20 77 68 69 74 65 73 70  hing but whitesp
b820: 61 63 65 20 61 6e 64 20 63 6f 6d 6d 65 6e 74 73  ace and comments
b830: 20 74 6f 20 74 68 65 0a 2a 2a 20 65 6e 64 20 6f   to the.** end o
b840: 66 20 74 68 65 20 66 69 72 73 74 20 6c 69 6e 65  f the first line
b850: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
b860: 77 73 54 6f 45 6f 6c 28 63 6f 6e 73 74 20 63 68  wsToEol(const ch
b870: 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b  ar *z){.  int i;
b880: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 7a 5b 69 5d  .  for(i=0; z[i]
b890: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
b8a0: 7a 5b 69 5d 3d 3d 27 5c 6e 27 20 29 20 72 65 74  z[i]=='\n' ) ret
b8b0: 75 72 6e 20 31 3b 0a 20 20 20 20 69 66 28 20 49  urn 1;.    if( I
b8c0: 73 53 70 61 63 65 28 7a 5b 69 5d 29 20 29 20 63  sSpace(z[i]) ) c
b8d0: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 69 66 28  ontinue;.    if(
b8e0: 20 7a 5b 69 5d 3d 3d 27 2d 27 20 26 26 20 7a 5b   z[i]=='-' && z[
b8f0: 69 2b 31 5d 3d 3d 27 2d 27 20 29 20 72 65 74 75  i+1]=='-' ) retu
b900: 72 6e 20 31 3b 0a 20 20 20 20 72 65 74 75 72 6e  rn 1;.    return
b910: 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   0;.  }.  return
b920: 20 31 3b 0a 7d 0a 20 20 20 20 0a 0a 2f 2a 0a 2a   1;.}.    ../*.*
b930: 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63 61  * This is the ca
b940: 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 74  llback routine t
b950: 68 61 74 20 74 68 65 20 73 68 65 6c 6c 0a 2a 2a  hat the shell.**
b960: 20 69 6e 76 6f 6b 65 73 20 66 6f 72 20 65 61 63   invokes for eac
b970: 68 20 72 6f 77 20 6f 66 20 61 20 71 75 65 72 79  h row of a query
b980: 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74   result..*/.stat
b990: 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 63 61 6c  ic int shell_cal
b9a0: 6c 62 61 63 6b 28 0a 20 20 76 6f 69 64 20 2a 70  lback(.  void *p
b9b0: 41 72 67 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c  Arg,.  int nArg,
b9c0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
b9d0: 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75  r of result colu
b9e0: 6d 6e 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  mns */.  char **
b9f0: 61 7a 41 72 67 2c 20 20 20 20 2f 2a 20 54 65 78  azArg,    /* Tex
ba00: 74 20 6f 66 20 65 61 63 68 20 72 65 73 75 6c 74  t of each result
ba10: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
ba20: 72 20 2a 2a 61 7a 43 6f 6c 2c 20 20 20 20 2f 2a  r **azCol,    /*
ba30: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   Column names */
ba40: 0a 20 20 69 6e 74 20 2a 61 69 54 79 70 65 20 20  .  int *aiType  
ba50: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 74 79      /* Column ty
ba60: 70 65 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  pes */.){.  int 
ba70: 69 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  i;.  ShellState 
ba80: 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74 61 74 65  *p = (ShellState
ba90: 2a 29 70 41 72 67 3b 0a 0a 20 20 69 66 28 20 61  *)pArg;..  if( a
baa0: 7a 41 72 67 3d 3d 30 20 29 20 72 65 74 75 72 6e  zArg==0 ) return
bab0: 20 30 3b 0a 20 20 73 77 69 74 63 68 28 20 70 2d   0;.  switch( p-
bac0: 3e 63 4d 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  >cMode ){.    ca
bad0: 73 65 20 4d 4f 44 45 5f 4c 69 6e 65 3a 20 7b 0a  se MODE_Line: {.
bae0: 20 20 20 20 20 20 69 6e 74 20 77 20 3d 20 35 3b        int w = 5;
baf0: 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41 72 67  .      if( azArg
bb00: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
bb10: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
bb20: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
bb30: 20 20 69 6e 74 20 6c 65 6e 20 3d 20 73 74 72 6c    int len = strl
bb40: 65 6e 33 30 28 61 7a 43 6f 6c 5b 69 5d 20 3f 20  en30(azCol[i] ? 
bb50: 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a  azCol[i] : "");.
bb60: 20 20 20 20 20 20 20 20 69 66 28 20 6c 65 6e 3e          if( len>
bb70: 77 20 29 20 77 20 3d 20 6c 65 6e 3b 0a 20 20 20  w ) w = len;.   
bb80: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
bb90: 2d 3e 63 6e 74 2b 2b 3e 30 20 29 20 75 74 66 38  ->cnt++>0 ) utf8
bba0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
bbb0: 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61  "%s", p->rowSepa
bbc0: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 66 6f  rator);.      fo
bbd0: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
bbe0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  ++){.        utf
bbf0: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
bc00: 22 25 2a 73 20 3d 20 25 73 25 73 22 2c 20 77 2c  "%*s = %s%s", w,
bc10: 20 61 7a 43 6f 6c 5b 69 5d 2c 0a 20 20 20 20 20   azCol[i],.     
bc20: 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
bc30: 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a  [i] ? azArg[i] :
bc40: 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 2c 20 70   p->nullValue, p
bc50: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
bc60: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
bc70: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
bc80: 63 61 73 65 20 4d 4f 44 45 5f 45 78 70 6c 61 69  case MODE_Explai
bc90: 6e 3a 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45  n:.    case MODE
bca0: 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 20 20 20  _Column: {.     
bcb0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
bcc0: 74 20 61 45 78 70 6c 61 69 6e 57 69 64 74 68 73  t aExplainWidths
bcd0: 5b 5d 20 3d 20 7b 34 2c 20 31 33 2c 20 34 2c 20  [] = {4, 13, 4, 
bce0: 34 2c 20 34 2c 20 31 33 2c 20 32 2c 20 31 33 7d  4, 4, 13, 2, 13}
bcf0: 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 69 6e  ;.      const in
bd00: 74 20 2a 63 6f 6c 57 69 64 74 68 3b 0a 20 20 20  t *colWidth;.   
bd10: 20 20 20 69 6e 74 20 73 68 6f 77 48 64 72 3b 0a     int showHdr;.
bd20: 20 20 20 20 20 20 63 68 61 72 20 2a 72 6f 77 53        char *rowS
bd30: 65 70 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  ep;.      if( p-
bd40: 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f 43 6f 6c  >cMode==MODE_Col
bd50: 75 6d 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 63  umn ){.        c
bd60: 6f 6c 57 69 64 74 68 20 3d 20 70 2d 3e 63 6f 6c  olWidth = p->col
bd70: 57 69 64 74 68 3b 0a 20 20 20 20 20 20 20 20 73  Width;.        s
bd80: 68 6f 77 48 64 72 20 3d 20 70 2d 3e 73 68 6f 77  howHdr = p->show
bd90: 48 65 61 64 65 72 3b 0a 20 20 20 20 20 20 20 20  Header;.        
bda0: 72 6f 77 53 65 70 20 3d 20 70 2d 3e 72 6f 77 53  rowSep = p->rowS
bdb0: 65 70 61 72 61 74 6f 72 3b 0a 20 20 20 20 20 20  eparator;.      
bdc0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 63  }else{.        c
bdd0: 6f 6c 57 69 64 74 68 20 3d 20 61 45 78 70 6c 61  olWidth = aExpla
bde0: 69 6e 57 69 64 74 68 73 3b 0a 20 20 20 20 20 20  inWidths;.      
bdf0: 20 20 73 68 6f 77 48 64 72 20 3d 20 31 3b 0a 20    showHdr = 1;. 
be00: 20 20 20 20 20 20 20 72 6f 77 53 65 70 20 3d 20         rowSep = 
be10: 53 45 50 5f 52 6f 77 3b 0a 20 20 20 20 20 20 7d  SEP_Row;.      }
be20: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e  .      if( p->cn
be30: 74 2b 2b 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  t++==0 ){.      
be40: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
be50: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
be60: 20 20 20 69 6e 74 20 77 2c 20 6e 3b 0a 20 20 20     int w, n;.   
be70: 20 20 20 20 20 20 20 69 66 28 20 69 3c 41 72 72         if( i<Arr
be80: 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 57 69 64  aySize(p->colWid
be90: 74 68 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  th) ){.         
bea0: 20 20 20 77 20 3d 20 63 6f 6c 57 69 64 74 68 5b     w = colWidth[
beb0: 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  i];.          }e
bec0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
bed0: 20 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   w = 0;.        
bee0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
bef0: 28 20 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ( w==0 ){.      
bf00: 20 20 20 20 20 20 77 20 3d 20 73 74 72 6c 65 6e        w = strlen
bf10: 43 68 61 72 28 61 7a 43 6f 6c 5b 69 5d 20 3f 20  Char(azCol[i] ? 
bf20: 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a  azCol[i] : "");.
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
bf40: 77 3c 31 30 20 29 20 77 20 3d 20 31 30 3b 0a 20  w<10 ) w = 10;. 
bf50: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 73             n = s
bf60: 74 72 6c 65 6e 43 68 61 72 28 61 7a 41 72 67 20  trlenChar(azArg 
bf70: 26 26 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a  && azArg[i] ? az
bf80: 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c  Arg[i] : p->null
bf90: 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20  Value);.        
bfa0: 20 20 20 20 69 66 28 20 77 3c 6e 20 29 20 77 20      if( w<n ) w 
bfb0: 3d 20 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = n;.          }
bfc0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
bfd0: 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 63  <ArraySize(p->ac
bfe0: 74 75 61 6c 57 69 64 74 68 29 20 29 7b 0a 20 20  tualWidth) ){.  
bff0: 20 20 20 20 20 20 20 20 20 20 70 2d 3e 61 63 74            p->act
c000: 75 61 6c 57 69 64 74 68 5b 69 5d 20 3d 20 77 3b  ualWidth[i] = w;
c010: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
c020: 20 20 20 20 20 20 20 69 66 28 20 73 68 6f 77 48         if( showH
c030: 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  dr ){.          
c040: 20 20 75 74 66 38 5f 77 69 64 74 68 5f 70 72 69    utf8_width_pri
c050: 6e 74 28 70 2d 3e 6f 75 74 2c 20 77 2c 20 61 7a  nt(p->out, w, az
c060: 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Col[i]);.       
c070: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
c080: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 69  (p->out, "%s", i
c090: 3d 3d 6e 41 72 67 2d 31 20 3f 20 72 6f 77 53 65  ==nArg-1 ? rowSe
c0a0: 70 20 3a 20 22 20 20 22 29 3b 0a 20 20 20 20 20  p : "  ");.     
c0b0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
c0c0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 68 6f  .        if( sho
c0d0: 77 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20  wHdr ){.        
c0e0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
c0f0: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
c100: 20 20 20 20 20 69 6e 74 20 77 3b 0a 20 20 20 20       int w;.    
c110: 20 20 20 20 20 20 20 20 69 66 28 20 69 3c 41 72          if( i<Ar
c120: 72 61 79 53 69 7a 65 28 70 2d 3e 61 63 74 75 61  raySize(p->actua
c130: 6c 57 69 64 74 68 29 20 29 7b 0a 20 20 20 20 20  lWidth) ){.     
c140: 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 70 2d            w = p-
c150: 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69 5d 3b  >actualWidth[i];
c160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c170: 69 66 28 20 77 3c 30 20 29 20 77 20 3d 20 2d 77  if( w<0 ) w = -w
c180: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65  ;.            }e
c190: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
c1a0: 20 20 20 20 77 20 3d 20 31 30 3b 0a 20 20 20 20      w = 10;.    
c1b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
c1c0: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
c1d0: 66 28 70 2d 3e 6f 75 74 2c 22 25 2d 2a 2e 2a 73  f(p->out,"%-*.*s
c1e0: 25 73 22 2c 77 2c 77 2c 0a 20 20 20 20 20 20 20  %s",w,w,.       
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
c200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c230: 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20 20 20 20 20  -------".       
c240: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
c250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c280: 2d 2d 2d 2d 2d 2d 2d 22 2c 0a 20 20 20 20 20 20  -------",.      
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 3d                i=
c2a0: 3d 6e 41 72 67 2d 31 20 3f 20 72 6f 77 53 65 70  =nArg-1 ? rowSep
c2b0: 20 3a 20 22 20 20 22 29 3b 0a 20 20 20 20 20 20   : "  ");.      
c2c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
c2d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
c2e0: 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65  ( azArg==0 ) bre
c2f0: 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ak;.      for(i=
c300: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
c310: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 77 3b 0a  .        int w;.
c320: 20 20 20 20 20 20 20 20 69 66 28 20 69 3c 41 72          if( i<Ar
c330: 72 61 79 53 69 7a 65 28 70 2d 3e 61 63 74 75 61  raySize(p->actua
c340: 6c 57 69 64 74 68 29 20 29 7b 0a 20 20 20 20 20  lWidth) ){.     
c350: 20 20 20 20 20 20 77 20 3d 20 70 2d 3e 61 63 74        w = p->act
c360: 75 61 6c 57 69 64 74 68 5b 69 5d 3b 0a 20 20 20  ualWidth[i];.   
c370: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
c380: 20 20 20 20 20 20 20 77 20 3d 20 31 30 3b 0a 20         w = 10;. 
c390: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
c3a0: 20 69 66 28 20 70 2d 3e 63 4d 6f 64 65 3d 3d 4d   if( p->cMode==M
c3b0: 4f 44 45 5f 45 78 70 6c 61 69 6e 20 26 26 20 61  ODE_Explain && a
c3c0: 7a 41 72 67 5b 69 5d 20 26 26 20 73 74 72 6c 65  zArg[i] && strle
c3d0: 6e 43 68 61 72 28 61 7a 41 72 67 5b 69 5d 29 3e  nChar(azArg[i])>
c3e0: 77 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77  w ){.          w
c3f0: 20 3d 20 73 74 72 6c 65 6e 43 68 61 72 28 61 7a   = strlenChar(az
c400: 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
c410: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   }.        if( i
c420: 3d 3d 31 20 26 26 20 70 2d 3e 61 69 49 6e 64 65  ==1 && p->aiInde
c430: 6e 74 20 26 26 20 70 2d 3e 70 53 74 6d 74 20 29  nt && p->pStmt )
c440: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
c450: 70 2d 3e 69 49 6e 64 65 6e 74 3c 70 2d 3e 6e 49  p->iIndent<p->nI
c460: 6e 64 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  ndent ){.       
c470: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
c480: 28 70 2d 3e 6f 75 74 2c 20 22 25 2a 2e 73 22 2c  (p->out, "%*.s",
c490: 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b 70 2d 3e   p->aiIndent[p->
c4a0: 69 49 6e 64 65 6e 74 5d 2c 20 22 22 29 3b 0a 20  iIndent], "");. 
c4b0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
c4c0: 20 20 20 20 20 70 2d 3e 69 49 6e 64 65 6e 74 2b       p->iIndent+
c4d0: 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
c4e0: 20 20 20 20 20 75 74 66 38 5f 77 69 64 74 68 5f       utf8_width_
c4f0: 70 72 69 6e 74 28 70 2d 3e 6f 75 74 2c 20 77 2c  print(p->out, w,
c500: 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72   azArg[i] ? azAr
c510: 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61  g[i] : p->nullVa
c520: 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 75 74  lue);.        ut
c530: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
c540: 2c 20 22 25 73 22 2c 20 69 3d 3d 6e 41 72 67 2d  , "%s", i==nArg-
c550: 31 20 3f 20 72 6f 77 53 65 70 20 3a 20 22 20 20  1 ? rowSep : "  
c560: 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
c570: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
c580: 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 53 65 6d     case MODE_Sem
c590: 69 3a 20 7b 20 20 20 2f 2a 20 2e 73 63 68 65 6d  i: {   /* .schem
c5a0: 61 20 61 6e 64 20 2e 66 75 6c 6c 73 63 68 65 6d  a and .fullschem
c5b0: 61 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 20 20  a output */.    
c5c0: 20 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e    printSchemaLin
c5d0: 65 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b  e(p->out, azArg[
c5e0: 30 5d 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20 20 20  0], ";\n");.    
c5f0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
c600: 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 50 72 65     case MODE_Pre
c610: 74 74 79 3a 20 7b 20 20 2f 2a 20 2e 73 63 68 65  tty: {  /* .sche
c620: 6d 61 20 61 6e 64 20 2e 66 75 6c 6c 73 63 68 65  ma and .fullsche
c630: 6d 61 20 77 69 74 68 20 2d 2d 69 6e 64 65 6e 74  ma with --indent
c640: 20 2a 2f 0a 20 20 20 20 20 20 63 68 61 72 20 2a   */.      char *
c650: 7a 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a  z;.      int j;.
c660: 20 20 20 20 20 20 69 6e 74 20 6e 50 61 72 65 6e        int nParen
c670: 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 68 61 72   = 0;.      char
c680: 20 63 45 6e 64 20 3d 20 30 3b 0a 20 20 20 20 20   cEnd = 0;.     
c690: 20 63 68 61 72 20 63 3b 0a 20 20 20 20 20 20 69   char c;.      i
c6a0: 6e 74 20 6e 4c 69 6e 65 20 3d 20 30 3b 0a 20 20  nt nLine = 0;.  
c6b0: 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
c6c0: 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==1 );.      if(
c6d0: 20 61 7a 41 72 67 5b 30 5d 3d 3d 30 20 29 20 62   azArg[0]==0 ) b
c6e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20  reak;.      if( 
c6f0: 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
c700: 22 43 52 45 41 54 45 20 56 49 45 57 25 22 2c 20  "CREATE VIEW%", 
c710: 61 7a 41 72 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a  azArg[0], 0)==0.
c720: 20 20 20 20 20 20 20 7c 7c 20 73 71 6c 69 74 65         || sqlite
c730: 33 5f 73 74 72 6c 69 6b 65 28 22 43 52 45 41 54  3_strlike("CREAT
c740: 45 20 54 52 49 47 25 22 2c 20 61 7a 41 72 67 5b  E TRIG%", azArg[
c750: 30 5d 2c 20 30 29 3d 3d 30 0a 20 20 20 20 20 20  0], 0)==0.      
c760: 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
c770: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
c780: 25 73 3b 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d  %s;\n", azArg[0]
c790: 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  );.        break
c7a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
c7b0: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  z = sqlite3_mpri
c7c0: 6e 74 66 28 22 25 73 22 2c 20 61 7a 41 72 67 5b  ntf("%s", azArg[
c7d0: 30 5d 29 3b 0a 20 20 20 20 20 20 6a 20 3d 20 30  0]);.      j = 0
c7e0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
c7f0: 20 49 73 53 70 61 63 65 28 7a 5b 69 5d 29 3b 20   IsSpace(z[i]); 
c800: 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 66 6f 72  i++){}.      for
c810: 28 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30  (; (c = z[i])!=0
c820: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
c830: 69 66 28 20 49 73 53 70 61 63 65 28 63 29 20 29  if( IsSpace(c) )
c840: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
c850: 7a 5b 6a 2d 31 5d 3d 3d 27 5c 72 27 20 29 20 7a  z[j-1]=='\r' ) z
c860: 5b 6a 2d 31 5d 20 3d 20 27 5c 6e 27 3b 0a 20 20  [j-1] = '\n';.  
c870: 20 20 20 20 20 20 20 20 69 66 28 20 49 73 53 70          if( IsSp
c880: 61 63 65 28 7a 5b 6a 2d 31 5d 29 20 7c 7c 20 7a  ace(z[j-1]) || z
c890: 5b 6a 2d 31 5d 3d 3d 27 28 27 20 29 20 63 6f 6e  [j-1]=='(' ) con
c8a0: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 7d  tinue;.        }
c8b0: 65 6c 73 65 20 69 66 28 20 28 63 3d 3d 27 28 27  else if( (c=='('
c8c0: 20 7c 7c 20 63 3d 3d 27 29 27 29 20 26 26 20 6a   || c==')') && j
c8d0: 3e 30 20 26 26 20 49 73 53 70 61 63 65 28 7a 5b  >0 && IsSpace(z[
c8e0: 6a 2d 31 5d 29 20 29 7b 0a 20 20 20 20 20 20 20  j-1]) ){.       
c8f0: 20 20 20 6a 2d 2d 3b 0a 20 20 20 20 20 20 20 20     j--;.        
c900: 7d 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d  }.        z[j++]
c910: 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = c;.      }.  
c920: 20 20 20 20 77 68 69 6c 65 28 20 6a 3e 30 20 26      while( j>0 &
c930: 26 20 49 73 53 70 61 63 65 28 7a 5b 6a 2d 31 5d  & IsSpace(z[j-1]
c940: 29 20 29 7b 20 6a 2d 2d 3b 20 7d 0a 20 20 20 20  ) ){ j--; }.    
c950: 20 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20    z[j] = 0;.    
c960: 20 20 69 66 28 20 73 74 72 6c 65 6e 33 30 28 7a    if( strlen30(z
c970: 29 3e 3d 37 39 20 29 7b 0a 20 20 20 20 20 20 20  )>=79 ){.       
c980: 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 28 63 20 3d   for(i=j=0; (c =
c990: 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b   z[i])!=0; i++){
c9a0: 20 20 2f 2a 20 43 6f 70 79 20 63 68 61 6e 67 65    /* Copy change
c9b0: 73 20 66 72 6f 6d 20 7a 5b 69 5d 20 62 61 63 6b  s from z[i] back
c9c0: 20 74 6f 20 7a 5b 6a 5d 20 2a 2f 0a 20 20 20 20   to z[j] */.    
c9d0: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 63 45 6e        if( c==cEn
c9e0: 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  d ){.           
c9f0: 20 63 45 6e 64 20 3d 20 30 3b 0a 20 20 20 20 20   cEnd = 0;.     
ca00: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63       }else if( c
ca10: 3d 3d 27 22 27 20 7c 7c 20 63 3d 3d 27 5c 27 27  =='"' || c=='\''
ca20: 20 7c 7c 20 63 3d 3d 27 60 27 20 29 7b 0a 20 20   || c=='`' ){.  
ca30: 20 20 20 20 20 20 20 20 20 20 63 45 6e 64 20 3d            cEnd =
ca40: 20 63 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65   c;.          }e
ca50: 6c 73 65 20 69 66 28 20 63 3d 3d 27 5b 27 20 29  lse if( c=='[' )
ca60: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 45  {.            cE
ca70: 6e 64 20 3d 20 27 5d 27 3b 0a 20 20 20 20 20 20  nd = ']';.      
ca80: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
ca90: 3d 27 2d 27 20 26 26 20 7a 5b 69 2b 31 5d 3d 3d  ='-' && z[i+1]==
caa0: 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  '-' ){.         
cab0: 20 20 20 63 45 6e 64 20 3d 20 27 5c 6e 27 3b 0a     cEnd = '\n';.
cac0: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20            }else 
cad0: 69 66 28 20 63 3d 3d 27 28 27 20 29 7b 0a 20 20  if( c=='(' ){.  
cae0: 20 20 20 20 20 20 20 20 20 20 6e 50 61 72 65 6e            nParen
caf0: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  ++;.          }e
cb00: 6c 73 65 20 69 66 28 20 63 3d 3d 27 29 27 20 29  lse if( c==')' )
cb10: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 50  {.            nP
cb20: 61 72 65 6e 2d 2d 3b 0a 20 20 20 20 20 20 20 20  aren--;.        
cb30: 20 20 20 20 69 66 28 20 6e 4c 69 6e 65 3e 30 20      if( nLine>0 
cb40: 26 26 20 6e 50 61 72 65 6e 3d 3d 30 20 26 26 20  && nParen==0 && 
cb50: 6a 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  j>0 ){.         
cb60: 20 20 20 20 20 70 72 69 6e 74 53 63 68 65 6d 61       printSchema
cb70: 4c 69 6e 65 4e 28 70 2d 3e 6f 75 74 2c 20 7a 2c  LineN(p->out, z,
cb80: 20 6a 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20 20   j, "\n");.     
cb90: 20 20 20 20 20 20 20 20 20 6a 20 3d 20 30 3b 0a           j = 0;.
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
cbb0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
cbc0: 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 63 3b 0a      z[j++] = c;.
cbd0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 50            if( nP
cbe0: 61 72 65 6e 3d 3d 31 20 26 26 20 63 45 6e 64 3d  aren==1 && cEnd=
cbf0: 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 26 26  =0.           &&
cc00: 20 28 63 3d 3d 27 28 27 20 7c 7c 20 63 3d 3d 27   (c=='(' || c=='
cc10: 5c 6e 27 20 7c 7c 20 28 63 3d 3d 27 2c 27 20 26  \n' || (c==',' &
cc20: 26 20 21 77 73 54 6f 45 6f 6c 28 7a 2b 69 2b 31  & !wsToEol(z+i+1
cc30: 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 29 7b  ))).          ){
cc40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
cc50: 20 63 3d 3d 27 5c 6e 27 20 29 20 6a 2d 2d 3b 0a   c=='\n' ) j--;.
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e              prin
cc70: 74 53 63 68 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e  tSchemaLineN(p->
cc80: 6f 75 74 2c 20 7a 2c 20 6a 2c 20 22 5c 6e 20 20  out, z, j, "\n  
cc90: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
cca0: 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  j = 0;.         
ccb0: 20 20 20 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20     nLine++;.    
ccc0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 49          while( I
ccd0: 73 53 70 61 63 65 28 7a 5b 69 2b 31 5d 29 20 29  sSpace(z[i+1]) )
cce0: 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  { i++; }.       
ccf0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
cd00: 20 20 20 20 20 20 20 7a 5b 6a 5d 20 3d 20 30 3b         z[j] = 0;
cd10: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
cd20: 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70  rintSchemaLine(p
cd30: 2d 3e 6f 75 74 2c 20 7a 2c 20 22 3b 5c 6e 22 29  ->out, z, ";\n")
cd40: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
cd50: 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20 20 62  free(z);.      b
cd60: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
cd70: 63 61 73 65 20 4d 4f 44 45 5f 4c 69 73 74 3a 20  case MODE_List: 
cd80: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63  {.      if( p->c
cd90: 6e 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68  nt++==0 && p->sh
cda0: 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20  owHeader ){.    
cdb0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
cdc0: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
cdd0: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
cde0: 28 70 2d 3e 6f 75 74 2c 22 25 73 25 73 22 2c 61  (p->out,"%s%s",a
cdf0: 7a 43 6f 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20  zCol[i],.       
ce00: 20 20 20 20 20 20 20 20 20 20 20 69 3d 3d 6e 41             i==nA
ce10: 72 67 2d 31 20 3f 20 70 2d 3e 72 6f 77 53 65 70  rg-1 ? p->rowSep
ce20: 61 72 61 74 6f 72 20 3a 20 70 2d 3e 63 6f 6c 53  arator : p->colS
ce30: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
ce40: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
ce50: 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20     if( azArg==0 
ce60: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66  ) break;.      f
ce70: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
ce80: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68  i++){.        ch
ce90: 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d  ar *z = azArg[i]
cea0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 3d  ;.        if( z=
ceb0: 3d 30 20 29 20 7a 20 3d 20 70 2d 3e 6e 75 6c 6c  =0 ) z = p->null
cec0: 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 75  Value;.        u
ced0: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
cee0: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
cef0: 20 20 20 20 20 69 66 28 20 69 3c 6e 41 72 67 2d       if( i<nArg-
cf00: 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  1 ){.          u
cf10: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
cf20: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53  t, "%s", p->colS
cf30: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
cf40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
cf50: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
cf60: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d  p->out, "%s", p-
cf70: 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a  >rowSeparator);.
cf80: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
cf90: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
cfa0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
cfb0: 44 45 5f 48 74 6d 6c 3a 20 7b 0a 20 20 20 20 20  DE_Html: {.     
cfc0: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
cfd0: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
cfe0: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  r ){.        raw
cff0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
d000: 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20 20 20 20  <TR>");.        
d010: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
d020: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
d030: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
d040: 75 74 2c 22 3c 54 48 3e 22 29 3b 0a 20 20 20 20  ut,"<TH>");.    
d050: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 68 74 6d        output_htm
d060: 6c 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  l_string(p->out,
d070: 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20   azCol[i]);.    
d080: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
d090: 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 48 3e 5c 6e  (p->out,"</TH>\n
d0a0: 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ");.        }.  
d0b0: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
d0c0: 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e  (p->out,"</TR>\n
d0d0: 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
d0e0: 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29    if( azArg==0 )
d0f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 72 61   break;.      ra
d100: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
d110: 22 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20 20 66  "<TR>");.      f
d120: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
d130: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 72 61  i++){.        ra
d140: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
d150: 22 3c 54 44 3e 22 29 3b 0a 20 20 20 20 20 20 20  "<TD>");.       
d160: 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74 72   output_html_str
d170: 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72  ing(p->out, azAr
d180: 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20  g[i] ? azArg[i] 
d190: 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b  : p->nullValue);
d1a0: 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
d1b0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 44  ntf(p->out,"</TD
d1c0: 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >\n");.      }. 
d1d0: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
d1e0: 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e 22  p->out,"</TR>\n"
d1f0: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
d200: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d      }.    case M
d210: 4f 44 45 5f 54 63 6c 3a 20 7b 0a 20 20 20 20 20  ODE_Tcl: {.     
d220: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
d230: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
d240: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  r ){.        for
d250: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
d260: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75  +){.          ou
d270: 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d  tput_c_string(p-
d280: 3e 6f 75 74 2c 61 7a 43 6f 6c 5b 69 5d 20 3f 20  >out,azCol[i] ? 
d290: 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a  azCol[i] : "");.
d2a0: 20 20 20 20 20 20 20 20 20 20 69 66 28 69 3c 6e            if(i<n
d2b0: 41 72 67 2d 31 29 20 75 74 66 38 5f 70 72 69 6e  Arg-1) utf8_prin
d2c0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
d2d0: 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72   p->colSeparator
d2e0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
d2f0: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
d300: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
d310: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
d320: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
d330: 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72  f( azArg==0 ) br
d340: 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  eak;.      for(i
d350: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
d360: 7b 0a 20 20 20 20 20 20 20 20 6f 75 74 70 75 74  {.        output
d370: 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  _c_string(p->out
d380: 2c 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41  , azArg[i] ? azA
d390: 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56  rg[i] : p->nullV
d3a0: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 69  alue);.        i
d3b0: 66 28 69 3c 6e 41 72 67 2d 31 29 20 75 74 66 38  f(i<nArg-1) utf8
d3c0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
d3d0: 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  "%s", p->colSepa
d3e0: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a  rator);.      }.
d3f0: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
d400: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
d410: 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
d420: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
d430: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
d440: 44 45 5f 43 73 76 3a 20 7b 0a 20 20 20 20 20 20  DE_Csv: {.      
d450: 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 70 2d  setBinaryMode(p-
d460: 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  >out, 1);.      
d470: 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20  if( p->cnt++==0 
d480: 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72  && p->showHeader
d490: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
d4a0: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
d4b0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  ){.          out
d4c0: 70 75 74 5f 63 73 76 28 70 2c 20 61 7a 43 6f 6c  put_csv(p, azCol
d4d0: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
d4e0: 20 22 22 2c 20 69 3c 6e 41 72 67 2d 31 29 3b 0a   "", i<nArg-1);.
d4f0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
d500: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
d510: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
d520: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
d530: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
d540: 6e 41 72 67 3e 30 20 29 7b 0a 20 20 20 20 20 20  nArg>0 ){.      
d550: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
d560: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
d570: 20 20 20 6f 75 74 70 75 74 5f 63 73 76 28 70 2c     output_csv(p,
d580: 20 61 7a 41 72 67 5b 69 5d 2c 20 69 3c 6e 41 72   azArg[i], i<nAr
d590: 67 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  g-1);.        }.
d5a0: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
d5b0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
d5c0: 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
d5d0: 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
d5e0: 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28 70 2d    setTextMode(p-
d5f0: 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  >out, 1);.      
d600: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
d610: 20 63 61 73 65 20 4d 4f 44 45 5f 49 6e 73 65 72   case MODE_Inser
d620: 74 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 61  t: {.      if( a
d630: 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b  zArg==0 ) break;
d640: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
d650: 74 66 28 70 2d 3e 6f 75 74 2c 22 49 4e 53 45 52  tf(p->out,"INSER
d660: 54 20 49 4e 54 4f 20 25 73 22 2c 70 2d 3e 7a 44  T INTO %s",p->zD
d670: 65 73 74 54 61 62 6c 65 29 3b 0a 20 20 20 20 20  estTable);.     
d680: 20 69 66 28 20 70 2d 3e 73 68 6f 77 48 65 61 64   if( p->showHead
d690: 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  er ){.        ra
d6a0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
d6b0: 22 28 22 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  "(");.        fo
d6c0: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
d6d0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
d6e0: 66 28 20 69 3e 30 20 29 20 72 61 77 5f 70 72 69  f( i>0 ) raw_pri
d6f0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2c 22 29  ntf(p->out, ",")
d700: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
d710: 71 75 6f 74 65 43 68 61 72 28 61 7a 43 6f 6c 5b  quoteChar(azCol[
d720: 69 5d 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  i]) ){.         
d730: 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c     char *z = sql
d740: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22  ite3_mprintf("\"
d750: 25 77 5c 22 22 2c 20 61 7a 43 6f 6c 5b 69 5d 29  %w\"", azCol[i])
d760: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74  ;.            ut
d770: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
d780: 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  , "%s", z);.    
d790: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
d7a0: 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20 20 20  free(z);.       
d7b0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
d7c0: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
d7d0: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 61  (p->out, "%s", a
d7e0: 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zCol[i]);.      
d7f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
d800: 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
d810: 74 66 28 70 2d 3e 6f 75 74 2c 22 29 22 29 3b 0a  tf(p->out,")");.
d820: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 2d        }.      p-
d830: 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 66 6f  >cnt++;.      fo
d840: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
d850: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  ++){.        raw
d860: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
d870: 69 3e 30 20 3f 20 22 2c 22 20 3a 20 22 20 56 41  i>0 ? "," : " VA
d880: 4c 55 45 53 28 22 29 3b 0a 20 20 20 20 20 20 20  LUES(");.       
d890: 20 69 66 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d   if( (azArg[i]==
d8a0: 30 29 20 7c 7c 20 28 61 69 54 79 70 65 20 26 26  0) || (aiType &&
d8b0: 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49   aiType[i]==SQLI
d8c0: 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20  TE_NULL) ){.    
d8d0: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
d8e0: 66 28 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29  f(p->out,"NULL")
d8f0: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
d900: 69 66 28 20 61 69 54 79 70 65 20 26 26 20 61 69  if( aiType && ai
d910: 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f  Type[i]==SQLITE_
d920: 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 20 20  TEXT ){.        
d930: 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c    if( ShellHasFl
d940: 61 67 28 70 2c 20 53 48 46 4c 47 5f 4e 65 77 6c  ag(p, SHFLG_Newl
d950: 69 6e 65 73 29 20 29 7b 0a 20 20 20 20 20 20 20  ines) ){.       
d960: 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74       output_quot
d970: 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ed_string(p->out
d980: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
d990: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
d9a0: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
d9b0: 5f 71 75 6f 74 65 64 5f 65 73 63 61 70 65 64 5f  _quoted_escaped_
d9c0: 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61  string(p->out, a
d9d0: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
d9e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
d9f0: 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26  lse if( aiType &
da00: 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c  & aiType[i]==SQL
da10: 49 54 45 5f 49 4e 54 45 47 45 52 20 29 7b 0a 20  ITE_INTEGER ){. 
da20: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
da30: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22  intf(p->out,"%s"
da40: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
da50: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61       }else if( a
da60: 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b  iType && aiType[
da70: 69 5d 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f 41 54  i]==SQLITE_FLOAT
da80: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68   ){.          ch
da90: 61 72 20 7a 5b 35 30 5d 3b 0a 20 20 20 20 20 20  ar z[50];.      
daa0: 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d 20 73      double r = s
dab0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
dac0: 75 62 6c 65 28 70 2d 3e 70 53 74 6d 74 2c 20 69  uble(p->pStmt, i
dad0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
dae0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 35 30  ite3_snprintf(50
daf0: 2c 7a 2c 22 25 21 2e 32 30 67 22 2c 20 72 29 3b  ,z,"%!.20g", r);
db00: 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
db10: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
db20: 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20  s", z);.        
db30: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
db40: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
db50: 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20 70 2d  QLITE_BLOB && p-
db60: 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20  >pStmt ){.      
db70: 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a      const void *
db80: 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  pBlob = sqlite3_
db90: 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d 3e 70  column_blob(p->p
dba0: 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20  Stmt, i);.      
dbb0: 20 20 20 20 69 6e 74 20 6e 42 6c 6f 62 20 3d 20      int nBlob = 
dbc0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
dbd0: 79 74 65 73 28 70 2d 3e 70 53 74 6d 74 2c 20 69  ytes(p->pStmt, i
dbe0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  );.          out
dbf0: 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 70 2d 3e  put_hex_blob(p->
dc00: 6f 75 74 2c 20 70 42 6c 6f 62 2c 20 6e 42 6c 6f  out, pBlob, nBlo
dc10: 62 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  b);.        }els
dc20: 65 20 69 66 28 20 69 73 4e 75 6d 62 65 72 28 61  e if( isNumber(a
dc30: 7a 41 72 67 5b 69 5d 2c 20 30 29 20 29 7b 0a 20  zArg[i], 0) ){. 
dc40: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
dc50: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22  intf(p->out,"%s"
dc60: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
dc70: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 53       }else if( S
dc80: 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
dc90: 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 29 20 29  HFLG_Newlines) )
dca0: 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70  {.          outp
dcb0: 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67  ut_quoted_string
dcc0: 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69  (p->out, azArg[i
dcd0: 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ]);.        }els
dce0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  e{.          out
dcf0: 70 75 74 5f 71 75 6f 74 65 64 5f 65 73 63 61 70  put_quoted_escap
dd00: 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ed_string(p->out
dd10: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
dd20: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
dd30: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
dd40: 70 2d 3e 6f 75 74 2c 22 29 3b 5c 6e 22 29 3b 0a  p->out,");\n");.
dd50: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
dd60: 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45   }.    case MODE
dd70: 5f 51 75 6f 74 65 3a 20 7b 0a 20 20 20 20 20 20  _Quote: {.      
dd80: 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62  if( azArg==0 ) b
dd90: 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20  reak;.      if( 
dda0: 70 2d 3e 63 6e 74 3d 3d 30 20 26 26 20 70 2d 3e  p->cnt==0 && p->
ddb0: 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20  showHeader ){.  
ddc0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
ddd0: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
dde0: 20 20 20 20 20 20 20 69 66 28 20 69 3e 30 20 29         if( i>0 )
ddf0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
de00: 75 74 2c 20 22 2c 22 29 3b 0a 20 20 20 20 20 20  ut, ",");.      
de10: 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65      output_quote
de20: 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  d_string(p->out,
de30: 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20   azCol[i]);.    
de40: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61      }.        ra
de50: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
de60: 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  "\n");.      }. 
de70: 20 20 20 20 20 70 2d 3e 63 6e 74 2b 2b 3b 0a 20       p->cnt++;. 
de80: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
de90: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
dea0: 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 72 61      if( i>0 ) ra
deb0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
dec0: 20 22 2c 22 29 3b 0a 20 20 20 20 20 20 20 20 69   ",");.        i
ded0: 66 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d 30 29  f( (azArg[i]==0)
dee0: 20 7c 7c 20 28 61 69 54 79 70 65 20 26 26 20 61   || (aiType && a
def0: 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45  iType[i]==SQLITE
df00: 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20 20 20  _NULL) ){.      
df10: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
df20: 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29 3b 0a  p->out,"NULL");.
df30: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
df40: 28 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79  ( aiType && aiTy
df50: 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 54 45  pe[i]==SQLITE_TE
df60: 58 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  XT ){.          
df70: 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74  output_quoted_st
df80: 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41  ring(p->out, azA
df90: 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[i]);.        
dfa0: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
dfb0: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
dfc0: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 29 7b  QLITE_INTEGER ){
dfd0: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
dfe0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
dff0: 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  s", azArg[i]);. 
e000: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
e010: 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70   aiType && aiTyp
e020: 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f  e[i]==SQLITE_FLO
e030: 41 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  AT ){.          
e040: 63 68 61 72 20 7a 5b 35 30 5d 3b 0a 20 20 20 20  char z[50];.    
e050: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d        double r =
e060: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
e070: 64 6f 75 62 6c 65 28 70 2d 3e 70 53 74 6d 74 2c  double(p->pStmt,
e080: 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   i);.          s
e090: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
e0a0: 35 30 2c 7a 2c 22 25 21 2e 32 30 67 22 2c 20 72  50,z,"%!.20g", r
e0b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  );.          raw
e0c0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
e0d0: 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20  "%s", z);.      
e0e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79    }else if( aiTy
e0f0: 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d  pe && aiType[i]=
e100: 3d 53 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20  =SQLITE_BLOB && 
e110: 70 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  p->pStmt ){.    
e120: 20 20 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64        const void
e130: 20 2a 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65   *pBlob = sqlite
e140: 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d  3_column_blob(p-
e150: 3e 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  >pStmt, i);.    
e160: 20 20 20 20 20 20 69 6e 74 20 6e 42 6c 6f 62 20        int nBlob 
e170: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
e180: 5f 62 79 74 65 73 28 70 2d 3e 70 53 74 6d 74 2c  _bytes(p->pStmt,
e190: 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f   i);.          o
e1a0: 75 74 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 70  utput_hex_blob(p
e1b0: 2d 3e 6f 75 74 2c 20 70 42 6c 6f 62 2c 20 6e 42  ->out, pBlob, nB
e1c0: 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  lob);.        }e
e1d0: 6c 73 65 20 69 66 28 20 69 73 4e 75 6d 62 65 72  lse if( isNumber
e1e0: 28 61 7a 41 72 67 5b 69 5d 2c 20 30 29 20 29 7b  (azArg[i], 0) ){
e1f0: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
e200: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
e210: 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  s", azArg[i]);. 
e220: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
e230: 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71          output_q
e240: 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e  uoted_string(p->
e250: 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a  out, azArg[i]);.
e260: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
e270: 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  }.      raw_prin
e280: 74 66 28 70 2d 3e 6f 75 74 2c 22 5c 6e 22 29 3b  tf(p->out,"\n");
e290: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
e2a0: 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44    }.    case MOD
e2b0: 45 5f 41 73 63 69 69 3a 20 7b 0a 20 20 20 20 20  E_Ascii: {.     
e2c0: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
e2d0: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
e2e0: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  r ){.        for
e2f0: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
e300: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  +){.          if
e310: 28 20 69 3e 30 20 29 20 75 74 66 38 5f 70 72 69  ( i>0 ) utf8_pri
e320: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
e330: 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
e340: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 75 74  r);.          ut
e350: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
e360: 2c 22 25 73 22 2c 61 7a 43 6f 6c 5b 69 5d 20 3f  ,"%s",azCol[i] ?
e370: 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b   azCol[i] : "");
e380: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
e390: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
e3a0: 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e  ->out, "%s", p->
e3b0: 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  rowSeparator);. 
e3c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
e3d0: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
e3e0: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
e3f0: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
e400: 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 30 20          if( i>0 
e410: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
e420: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63  >out, "%s", p->c
e430: 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  olSeparator);.  
e440: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
e450: 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 61 7a  f(p->out,"%s",az
e460: 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69  Arg[i] ? azArg[i
e470: 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  ] : p->nullValue
e480: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
e490: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
e4a0: 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f  out, "%s", p->ro
e4b0: 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  wSeparator);.   
e4c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
e4d0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
e4e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73  }../*.** This is
e4f0: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f   the callback ro
e500: 75 74 69 6e 65 20 74 68 61 74 20 74 68 65 20 53  utine that the S
e510: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0a 2a 2a  QLite library.**
e520: 20 69 6e 76 6f 6b 65 73 20 66 6f 72 20 65 61 63   invokes for eac
e530: 68 20 72 6f 77 20 6f 66 20 61 20 71 75 65 72 79  h row of a query
e540: 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74   result..*/.stat
e550: 69 63 20 69 6e 74 20 63 61 6c 6c 62 61 63 6b 28  ic int callback(
e560: 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
e570: 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41  nArg, char **azA
e580: 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  rg, char **azCol
e590: 29 7b 0a 20 20 2f 2a 20 73 69 6e 63 65 20 77 65  ){.  /* since we
e5a0: 20 64 6f 6e 27 74 20 68 61 76 65 20 74 79 70 65   don't have type
e5b0: 20 69 6e 66 6f 2c 20 63 61 6c 6c 20 74 68 65 20   info, call the 
e5c0: 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 20 77  shell_callback w
e5d0: 69 74 68 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65  ith a NULL value
e5e0: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 73 68 65   */.  return she
e5f0: 6c 6c 5f 63 61 6c 6c 62 61 63 6b 28 70 41 72 67  ll_callback(pArg
e600: 2c 20 6e 41 72 67 2c 20 61 7a 41 72 67 2c 20 61  , nArg, azArg, a
e610: 7a 43 6f 6c 2c 20 4e 55 4c 4c 29 3b 0a 7d 0a 0a  zCol, NULL);.}..
e620: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
e630: 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69  e callback routi
e640: 6e 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ne from sqlite3_
e650: 65 78 65 63 28 29 20 74 68 61 74 20 61 70 70 65  exec() that appe
e660: 6e 64 73 20 61 6c 6c 0a 2a 2a 20 6f 75 74 70 75  nds all.** outpu
e670: 74 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  t onto the end o
e680: 66 20 61 20 53 68 65 6c 6c 54 65 78 74 20 6f 62  f a ShellText ob
e690: 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ject..*/.static 
e6a0: 69 6e 74 20 63 61 70 74 75 72 65 4f 75 74 70 75  int captureOutpu
e6b0: 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a  tCallback(void *
e6c0: 70 41 72 67 2c 20 69 6e 74 20 6e 41 72 67 2c 20  pArg, int nArg, 
e6d0: 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 63 68  char **azArg, ch
e6e0: 61 72 20 2a 2a 61 7a 29 7b 0a 20 20 53 68 65 6c  ar **az){.  Shel
e6f0: 6c 54 65 78 74 20 2a 70 20 3d 20 28 53 68 65 6c  lText *p = (Shel
e700: 6c 54 65 78 74 2a 29 70 41 72 67 3b 0a 20 20 69  lText*)pArg;.  i
e710: 6e 74 20 69 3b 0a 20 20 55 4e 55 53 45 44 5f 50  nt i;.  UNUSED_P
e720: 41 52 41 4d 45 54 45 52 28 61 7a 29 3b 0a 20 20  ARAMETER(az);.  
e730: 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 72  if( azArg==0 ) r
e740: 65 74 75 72 6e 20 30 3b 0a 20 20 69 66 28 20 70  eturn 0;.  if( p
e750: 2d 3e 6e 20 29 20 61 70 70 65 6e 64 54 65 78 74  ->n ) appendText
e760: 28 70 2c 20 22 7c 22 2c 20 30 29 3b 0a 20 20 66  (p, "|", 0);.  f
e770: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
e780: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 20  i++){.    if( i 
e790: 29 20 61 70 70 65 6e 64 54 65 78 74 28 70 2c 20  ) appendText(p, 
e7a0: 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 69 66 28  ",", 0);.    if(
e7b0: 20 61 7a 41 72 67 5b 69 5d 20 29 20 61 70 70 65   azArg[i] ) appe
e7c0: 6e 64 54 65 78 74 28 70 2c 20 61 7a 41 72 67 5b  ndText(p, azArg[
e7d0: 69 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65  i], 0);.  }.  re
e7e0: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
e7f0: 20 47 65 6e 65 72 61 74 65 20 61 6e 20 61 70 70   Generate an app
e800: 72 6f 70 72 69 61 74 65 20 53 45 4c 46 54 45 53  ropriate SELFTES
e810: 54 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  T table in the m
e820: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  ain database..*/
e830: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 65  .static void cre
e840: 61 74 65 53 65 6c 66 74 65 73 74 54 61 62 6c 65  ateSelftestTable
e850: 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b  (ShellState *p){
e860: 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
e870: 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
e880: 65 78 65 63 28 70 2d 3e 64 62 2c 0a 20 20 20 20  exec(p->db,.    
e890: 22 53 41 56 45 50 4f 49 4e 54 20 73 65 6c 66 74  "SAVEPOINT selft
e8a0: 65 73 74 5f 69 6e 69 74 3b 5c 6e 22 0a 20 20 20  est_init;\n".   
e8b0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49   "CREATE TABLE I
e8c0: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 73 65 6c  F NOT EXISTS sel
e8d0: 66 74 65 73 74 28 5c 6e 22 0a 20 20 20 20 22 20  ftest(\n".    " 
e8e0: 20 74 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49   tno INTEGER PRI
e8f0: 4d 41 52 59 20 4b 45 59 2c 5c 6e 22 20 20 20 2f  MARY KEY,\n"   /
e900: 2a 20 54 65 73 74 20 6e 75 6d 62 65 72 20 2a 2f  * Test number */
e910: 0a 20 20 20 20 22 20 20 6f 70 20 54 45 58 54 2c  .    "  op TEXT,
e920: 5c 6e 22 20 20 20 20 20 20 20 20 20 20 20 20 20  \n"             
e930: 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 6f        /* Operato
e940: 72 3a 20 20 6d 65 6d 6f 20 72 75 6e 20 2a 2f 0a  r:  memo run */.
e950: 20 20 20 20 22 20 20 63 6d 64 20 54 45 58 54 2c      "  cmd TEXT,
e960: 5c 6e 22 20 20 20 20 20 20 20 20 20 20 20 20 20  \n"             
e970: 20 20 20 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20       /* Command 
e980: 74 65 78 74 20 2a 2f 0a 20 20 20 20 22 20 20 61  text */.    "  a
e990: 6e 73 20 54 45 58 54 5c 6e 22 20 20 20 20 20 20  ns TEXT\n"      
e9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e9b0: 44 65 73 69 72 65 64 20 61 6e 73 77 65 72 20 2a  Desired answer *
e9c0: 2f 0a 20 20 20 20 22 29 3b 22 0a 20 20 20 20 22  /.    ");".    "
e9d0: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
e9e0: 45 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 28  E [_shell$self](
e9f0: 6f 70 2c 63 6d 64 2c 61 6e 73 29 3b 5c 6e 22 0a  op,cmd,ans);\n".
ea00: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
ea10: 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 28 72   [_shell$self](r
ea20: 6f 77 69 64 2c 6f 70 2c 63 6d 64 29 5c 6e 22 0a  owid,op,cmd)\n".
ea30: 20 20 20 20 22 20 20 56 41 4c 55 45 53 28 63 6f      "  VALUES(co
ea40: 61 6c 65 73 63 65 28 28 53 45 4c 45 43 54 20 28  alesce((SELECT (
ea50: 6d 61 78 28 74 6e 6f 29 2b 31 30 30 29 2f 31 30  max(tno)+100)/10
ea60: 20 46 52 4f 4d 20 73 65 6c 66 74 65 73 74 29 2c   FROM selftest),
ea70: 31 30 29 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20  10),\n".    "   
ea80: 20 20 20 20 20 20 27 6d 65 6d 6f 27 2c 27 54 65        'memo','Te
ea90: 73 74 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  sts generated by
eaa0: 20 2d 2d 69 6e 69 74 27 29 3b 5c 6e 22 0a 20 20   --init');\n".  
eab0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b    "INSERT INTO [
eac0: 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 5c 6e 22 0a  _shell$self]\n".
ead0: 20 20 20 20 22 20 20 53 45 4c 45 43 54 20 27 72      "  SELECT 'r
eae0: 75 6e 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20  un',\n".    "   
eaf0: 20 27 53 45 4c 45 43 54 20 68 65 78 28 73 68 61   'SELECT hex(sha
eb00: 33 5f 71 75 65 72 79 28 27 27 53 45 4c 45 43 54  3_query(''SELECT
eb10: 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e   type,name,tbl_n
eb20: 61 6d 65 2c 73 71 6c 20 22 0a 20 20 20 20 20 20  ame,sql ".      
eb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb40: 20 20 20 20 20 20 20 20 20 20 20 22 46 52 4f 4d             "FROM
eb50: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f   sqlite_master O
eb60: 52 44 45 52 20 42 59 20 32 27 27 2c 32 32 34 29  RDER BY 2'',224)
eb70: 29 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  )',\n".    "    
eb80: 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 27  hex(sha3_query('
eb90: 53 45 4c 45 43 54 20 74 79 70 65 2c 6e 61 6d 65  SELECT type,name
eba0: 2c 74 62 6c 5f 6e 61 6d 65 2c 73 71 6c 20 22 0a  ,tbl_name,sql ".
ebb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebc0: 20 20 20 20 20 20 20 20 20 20 22 46 52 4f 4d 20            "FROM 
ebd0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f 52  sqlite_master OR
ebe0: 44 45 52 20 42 59 20 32 27 2c 32 32 34 29 29 3b  DER BY 2',224));
ebf0: 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20  \n".    "INSERT 
ec00: 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c  INTO [_shell$sel
ec10: 66 5d 5c 6e 22 0a 20 20 20 20 22 20 20 53 45 4c  f]\n".    "  SEL
ec20: 45 43 54 20 27 72 75 6e 27 2c 22 0a 20 20 20 20  ECT 'run',".    
ec30: 22 20 20 20 20 27 53 45 4c 45 43 54 20 68 65 78  "    'SELECT hex
ec40: 28 73 68 61 33 5f 71 75 65 72 79 28 27 27 53 45  (sha3_query(''SE
ec50: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c 22 27 20  LECT * FROM \"' 
ec60: 7c 7c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  ||".    "       
ec70: 20 70 72 69 6e 74 66 28 27 25 77 27 2c 6e 61 6d   printf('%w',nam
ec80: 65 29 20 7c 7c 20 27 5c 22 20 4e 4f 54 20 49 4e  e) || '\" NOT IN
ec90: 44 45 58 45 44 27 27 2c 32 32 34 29 29 27 2c 5c  DEXED'',224))',\
eca0: 6e 22 0a 20 20 20 20 22 20 20 20 20 68 65 78 28  n".    "    hex(
ecb0: 73 68 61 33 5f 71 75 65 72 79 28 70 72 69 6e 74  sha3_query(print
ecc0: 66 28 27 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  f('SELECT * FROM
ecd0: 20 5c 22 25 77 5c 22 20 4e 4f 54 20 49 4e 44 45   \"%w\" NOT INDE
ece0: 58 45 44 27 2c 6e 61 6d 65 29 2c 32 32 34 29 29  XED',name),224))
ecf0: 5c 6e 22 0a 20 20 20 20 22 20 20 46 52 4f 4d 20  \n".    "  FROM 
ed00: 28 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 53 45  (\n".    "    SE
ed10: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
ed20: 71 6c 69 74 65 5f 6d 61 73 74 65 72 5c 6e 22 0a  qlite_master\n".
ed30: 20 20 20 20 22 20 20 20 20 20 57 48 45 52 45 20      "     WHERE 
ed40: 74 79 70 65 3d 27 74 61 62 6c 65 27 5c 6e 22 0a  type='table'\n".
ed50: 20 20 20 20 22 20 20 20 20 20 20 20 41 4e 44 20      "       AND 
ed60: 6e 61 6d 65 3c 3e 27 73 65 6c 66 74 65 73 74 27  name<>'selftest'
ed70: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  \n".    "       
ed80: 41 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f  AND coalesce(roo
ed90: 74 70 61 67 65 2c 30 29 3e 30 5c 6e 22 0a 20 20  tpage,0)>0\n".  
eda0: 20 20 22 20 20 29 5c 6e 22 0a 20 20 20 20 22 20    "  )\n".    " 
edb0: 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b 5c 6e  ORDER BY name;\n
edc0: 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  ".    "INSERT IN
edd0: 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d  TO [_shell$self]
ede0: 5c 6e 22 0a 20 20 20 20 22 20 20 56 41 4c 55 45  \n".    "  VALUE
edf0: 53 28 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20  S('run','PRAGMA 
ee00: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27  integrity_check'
ee10: 2c 27 6f 6b 27 29 3b 5c 6e 22 0a 20 20 20 20 22  ,'ok');\n".    "
ee20: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 65 6c 66  INSERT INTO self
ee30: 74 65 73 74 28 74 6e 6f 2c 6f 70 2c 63 6d 64 2c  test(tno,op,cmd,
ee40: 61 6e 73 29 22 0a 20 20 20 20 22 20 20 53 45 4c  ans)".    "  SEL
ee50: 45 43 54 20 72 6f 77 69 64 2a 31 30 2c 6f 70 2c  ECT rowid*10,op,
ee60: 63 6d 64 2c 61 6e 73 20 46 52 4f 4d 20 5b 5f 73  cmd,ans FROM [_s
ee70: 68 65 6c 6c 24 73 65 6c 66 5d 3b 5c 6e 22 0a 20  hell$self];\n". 
ee80: 20 20 20 22 44 52 4f 50 20 54 41 42 4c 45 20 5b     "DROP TABLE [
ee90: 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 3b 22 0a 20  _shell$self];". 
eea0: 20 20 20 2c 30 2c 30 2c 26 7a 45 72 72 4d 73 67     ,0,0,&zErrMsg
eeb0: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 4d 73 67  );.  if( zErrMsg
eec0: 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
eed0: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 45 4c  ntf(stderr, "SEL
eee0: 46 54 45 53 54 20 69 6e 69 74 69 61 6c 69 7a 61  FTEST initializa
eef0: 74 69 6f 6e 20 66 61 69 6c 75 72 65 3a 20 25 73  tion failure: %s
ef00: 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20  \n", zErrMsg);. 
ef10: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
ef20: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
ef30: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
ef40: 64 62 2c 20 22 52 45 4c 45 41 53 45 20 73 65 6c  db, "RELEASE sel
ef50: 66 74 65 73 74 5f 69 6e 69 74 22 2c 30 2c 30 2c  ftest_init",0,0,
ef60: 30 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65  0);.}.../*.** Se
ef70: 74 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  t the destinatio
ef80: 6e 20 74 61 62 6c 65 20 66 69 65 6c 64 20 6f 66  n table field of
ef90: 20 74 68 65 20 53 68 65 6c 6c 53 74 61 74 65 20   the ShellState 
efa0: 73 74 72 75 63 74 75 72 65 20 74 6f 0a 2a 2a 20  structure to.** 
efb0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
efc0: 74 61 62 6c 65 20 67 69 76 65 6e 2e 20 20 45 73  table given.  Es
efd0: 63 61 70 65 20 61 6e 79 20 71 75 6f 74 65 20 63  cape any quote c
efe0: 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
eff0: 0a 2a 2a 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a  .** table name..
f000: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
f010: 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 53 68  et_table_name(Sh
f020: 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
f030: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b  st char *zName){
f040: 0a 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 63  .  int i, n;.  c
f050: 68 61 72 20 63 51 75 6f 74 65 3b 0a 20 20 63 68  har cQuote;.  ch
f060: 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 70 2d  ar *z;..  if( p-
f070: 3e 7a 44 65 73 74 54 61 62 6c 65 20 29 7b 0a 20  >zDestTable ){. 
f080: 20 20 20 66 72 65 65 28 70 2d 3e 7a 44 65 73 74     free(p->zDest
f090: 54 61 62 6c 65 29 3b 0a 20 20 20 20 70 2d 3e 7a  Table);.    p->z
f0a0: 44 65 73 74 54 61 62 6c 65 20 3d 20 30 3b 0a 20  DestTable = 0;. 
f0b0: 20 7d 0a 20 20 69 66 28 20 7a 4e 61 6d 65 3d 3d   }.  if( zName==
f0c0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 63 51  0 ) return;.  cQ
f0d0: 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61 72  uote = quoteChar
f0e0: 28 7a 4e 61 6d 65 29 3b 0a 20 20 6e 20 3d 20 73  (zName);.  n = s
f0f0: 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a  trlen30(zName);.
f100: 20 20 69 66 28 20 63 51 75 6f 74 65 20 29 20 6e    if( cQuote ) n
f110: 20 2b 3d 20 6e 2b 32 3b 0a 20 20 7a 20 3d 20 70   += n+2;.  z = p
f120: 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d 20 6d  ->zDestTable = m
f130: 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b 0a 20 20  alloc( n+1 );.  
f140: 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
f150: 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
f160: 72 2c 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66  r,"Error: out of
f170: 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20   memory\n");.   
f180: 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20   exit(1);.  }.  
f190: 6e 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 51 75  n = 0;.  if( cQu
f1a0: 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63  ote ) z[n++] = c
f1b0: 51 75 6f 74 65 3b 0a 20 20 66 6f 72 28 69 3d 30  Quote;.  for(i=0
f1c0: 3b 20 7a 4e 61 6d 65 5b 69 5d 3b 20 69 2b 2b 29  ; zName[i]; i++)
f1d0: 7b 0a 20 20 20 20 7a 5b 6e 2b 2b 5d 20 3d 20 7a  {.    z[n++] = z
f1e0: 4e 61 6d 65 5b 69 5d 3b 0a 20 20 20 20 69 66 28  Name[i];.    if(
f1f0: 20 7a 4e 61 6d 65 5b 69 5d 3d 3d 63 51 75 6f 74   zName[i]==cQuot
f200: 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63 51 75  e ) z[n++] = cQu
f210: 6f 74 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63  ote;.  }.  if( c
f220: 51 75 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d  Quote ) z[n++] =
f230: 20 63 51 75 6f 74 65 3b 0a 20 20 7a 5b 6e 5d 20   cQuote;.  z[n] 
f240: 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45  = 0;.}.../*.** E
f250: 78 65 63 75 74 65 20 61 20 71 75 65 72 79 20 73  xecute a query s
f260: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 77 69  tatement that wi
f270: 6c 6c 20 67 65 6e 65 72 61 74 65 20 53 51 4c 20  ll generate SQL 
f280: 6f 75 74 70 75 74 2e 20 20 50 72 69 6e 74 0a 2a  output.  Print.*
f290: 2a 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  * the result col
f2a0: 75 6d 6e 73 2c 20 63 6f 6d 6d 61 2d 73 65 70 61  umns, comma-sepa
f2b0: 72 61 74 65 64 2c 20 6f 6e 20 61 20 6c 69 6e 65  rated, on a line
f2c0: 20 61 6e 64 20 74 68 65 6e 20 61 64 64 20 61 0a   and then add a.
f2d0: 2a 2a 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 65 72  ** semicolon ter
f2e0: 6d 69 6e 61 74 6f 72 20 74 6f 20 74 68 65 20 65  minator to the e
f2f0: 6e 64 20 6f 66 20 74 68 61 74 20 6c 69 6e 65 2e  nd of that line.
f300: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6e 75  .**.** If the nu
f310: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
f320: 69 73 20 31 20 61 6e 64 20 74 68 61 74 20 63 6f  is 1 and that co
f330: 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 74 65  lumn contains te
f340: 78 74 20 22 2d 2d 22 0a 2a 2a 20 74 68 65 6e 20  xt "--".** then 
f350: 77 72 69 74 65 20 74 68 65 20 73 65 6d 69 63 6f  write the semico
f360: 6c 6f 6e 20 6f 6e 20 61 20 73 65 70 61 72 61 74  lon on a separat
f370: 65 20 6c 69 6e 65 2e 20 20 54 68 61 74 20 77 61  e line.  That wa
f380: 79 2c 20 69 66 20 61 0a 2a 2a 20 22 2d 2d 22 20  y, if a.** "--" 
f390: 63 6f 6d 6d 65 6e 74 20 6f 63 63 75 72 73 20 61  comment occurs a
f3a0: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
f3b0: 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 20   statement, the 
f3c0: 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 77 6f 6e 27 74  comment.** won't
f3d0: 20 63 6f 6e 73 75 6d 65 20 74 68 65 20 73 65 6d   consume the sem
f3e0: 69 63 6f 6c 6f 6e 20 74 65 72 6d 69 6e 61 74 6f  icolon terminato
f3f0: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  r..*/.static int
f400: 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f   run_table_dump_
f410: 71 75 65 72 79 28 0a 20 20 53 68 65 6c 6c 53 74  query(.  ShellSt
f420: 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20  ate *p,         
f430: 20 20 2f 2a 20 51 75 65 72 79 20 63 6f 6e 74 65    /* Query conte
f440: 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
f450: 61 72 20 2a 7a 53 65 6c 65 63 74 2c 20 20 20 20  ar *zSelect,    
f460: 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
f470: 6d 65 6e 74 20 74 6f 20 65 78 74 72 61 63 74 20  ment to extract 
f480: 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e  content */.  con
f490: 73 74 20 63 68 61 72 20 2a 7a 46 69 72 73 74 52  st char *zFirstR
f4a0: 6f 77 20 20 20 20 2f 2a 20 50 72 69 6e 74 20 62  ow    /* Print b
f4b0: 65 66 6f 72 65 20 66 69 72 73 74 20 72 6f 77 2c  efore first row,
f4c0: 20 69 66 20 6e 6f 74 20 4e 55 4c 4c 20 2a 2f 0a   if not NULL */.
f4d0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
f4e0: 74 20 2a 70 53 65 6c 65 63 74 3b 0a 20 20 69 6e  t *pSelect;.  in
f4f0: 74 20 72 63 3b 0a 20 20 69 6e 74 20 6e 52 65 73  t rc;.  int nRes
f500: 75 6c 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  ult;.  int i;.  
f510: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20  const char *z;. 
f520: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
f530: 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
f540: 7a 53 65 6c 65 63 74 2c 20 2d 31 2c 20 26 70 53  zSelect, -1, &pS
f550: 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 69 66 28  elect, 0);.  if(
f560: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
f570: 7c 20 21 70 53 65 6c 65 63 74 20 29 7b 0a 20 20  | !pSelect ){.  
f580: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
f590: 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45 52 52  >out, "/**** ERR
f5a0: 4f 52 3a 20 28 25 64 29 20 25 73 20 2a 2a 2a 2a  OR: (%d) %s ****
f5b0: 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20 20 20 20  */\n", rc,.     
f5c0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
f5d0: 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29  e3_errmsg(p->db)
f5e0: 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30  );.    if( (rc&0
f5f0: 78 66 66 29 21 3d 53 51 4c 49 54 45 5f 43 4f 52  xff)!=SQLITE_COR
f600: 52 55 50 54 20 29 20 70 2d 3e 6e 45 72 72 2b 2b  RUPT ) p->nErr++
f610: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b  ;.    return rc;
f620: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
f630: 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63 74  te3_step(pSelect
f640: 29 3b 0a 20 20 6e 52 65 73 75 6c 74 20 3d 20 73  );.  nResult = s
f650: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
f660: 75 6e 74 28 70 53 65 6c 65 63 74 29 3b 0a 20 20  unt(pSelect);.  
f670: 77 68 69 6c 65 28 20 72 63 3d 3d 53 51 4c 49 54  while( rc==SQLIT
f680: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 66 28  E_ROW ){.    if(
f690: 20 7a 46 69 72 73 74 52 6f 77 20 29 7b 0a 20 20   zFirstRow ){.  
f6a0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
f6b0: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 46  p->out, "%s", zF
f6c0: 69 72 73 74 52 6f 77 29 3b 0a 20 20 20 20 20 20  irstRow);.      
f6d0: 7a 46 69 72 73 74 52 6f 77 20 3d 20 30 3b 0a 20  zFirstRow = 0;. 
f6e0: 20 20 20 7d 0a 20 20 20 20 7a 20 3d 20 28 63 6f     }.    z = (co
f6f0: 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
f700: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
f710: 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 20 20 75  elect, 0);.    u
f720: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
f730: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
f740: 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 52 65 73   for(i=1; i<nRes
f750: 75 6c 74 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ult; i++){.     
f760: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
f770: 6f 75 74 2c 20 22 2c 25 73 22 2c 20 73 71 6c 69  out, ",%s", sqli
f780: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
f790: 70 53 65 6c 65 63 74 2c 20 69 29 29 3b 0a 20 20  pSelect, i));.  
f7a0: 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 3d 3d 30    }.    if( z==0
f7b0: 20 29 20 7a 20 3d 20 22 22 3b 0a 20 20 20 20 77   ) z = "";.    w
f7c0: 68 69 6c 65 28 20 7a 5b 30 5d 20 26 26 20 28 7a  hile( z[0] && (z
f7d0: 5b 30 5d 21 3d 27 2d 27 20 7c 7c 20 7a 5b 31 5d  [0]!='-' || z[1]
f7e0: 21 3d 27 2d 27 29 20 29 20 7a 2b 2b 3b 0a 20 20  !='-') ) z++;.  
f7f0: 20 20 69 66 28 20 7a 5b 30 5d 20 29 7b 0a 20 20    if( z[0] ){.  
f800: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
f810: 2d 3e 6f 75 74 2c 20 22 5c 6e 3b 5c 6e 22 29 3b  ->out, "\n;\n");
f820: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
f830: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
f840: 6f 75 74 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20 20  out, ";\n");.   
f850: 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
f860: 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63 74  te3_step(pSelect
f870: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
f880: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
f890: 53 65 6c 65 63 74 29 3b 0a 20 20 69 66 28 20 72  Select);.  if( r
f8a0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
f8b0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
f8c0: 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45  p->out, "/**** E
f8d0: 52 52 4f 52 3a 20 28 25 64 29 20 25 73 20 2a 2a  RROR: (%d) %s **
f8e0: 2a 2a 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20 20  ***/\n", rc,.   
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
f900: 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
f910: 62 29 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63  b));.    if( (rc
f920: 26 30 78 66 66 29 21 3d 53 51 4c 49 54 45 5f 43  &0xff)!=SQLITE_C
f930: 4f 52 52 55 50 54 20 29 20 70 2d 3e 6e 45 72 72  ORRUPT ) p->nErr
f940: 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ++;.  }.  return
f950: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c   rc;.}../*.** Al
f960: 6c 6f 63 61 74 65 20 73 70 61 63 65 20 61 6e 64  locate space and
f970: 20 73 61 76 65 20 6f 66 66 20 63 75 72 72 65 6e   save off curren
f980: 74 20 65 72 72 6f 72 20 73 74 72 69 6e 67 2e 0a  t error string..
f990: 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a  */.static char *
f9a0: 73 61 76 65 5f 65 72 72 5f 6d 73 67 28 0a 20 20  save_err_msg(.  
f9b0: 73 71 6c 69 74 65 33 20 2a 64 62 20 20 20 20 20  sqlite3 *db     
f9c0: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
f9d0: 73 65 20 74 6f 20 71 75 65 72 79 20 2a 2f 0a 29  se to query */.)
f9e0: 7b 0a 20 20 69 6e 74 20 6e 45 72 72 4d 73 67 20  {.  int nErrMsg 
f9f0: 3d 20 31 2b 73 74 72 6c 65 6e 33 30 28 73 71 6c  = 1+strlen30(sql
fa00: 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29  ite3_errmsg(db))
fa10: 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  ;.  char *zErrMs
fa20: 67 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  g = sqlite3_mall
fa30: 6f 63 36 34 28 6e 45 72 72 4d 73 67 29 3b 0a 20  oc64(nErrMsg);. 
fa40: 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a   if( zErrMsg ){.
fa50: 20 20 20 20 6d 65 6d 63 70 79 28 7a 45 72 72 4d      memcpy(zErrM
fa60: 73 67 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  sg, sqlite3_errm
fa70: 73 67 28 64 62 29 2c 20 6e 45 72 72 4d 73 67 29  sg(db), nErrMsg)
fa80: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
fa90: 45 72 72 4d 73 67 3b 0a 7d 0a 0a 23 69 66 64 65  ErrMsg;.}..#ifde
faa0: 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 2f 2a 0a 2a  f __linux__./*.*
fab0: 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 69 73  * Attempt to dis
fac0: 70 6c 61 79 20 49 2f 4f 20 73 74 61 74 73 20 6f  play I/O stats o
fad0: 6e 20 4c 69 6e 75 78 20 75 73 69 6e 67 20 2f 70  n Linux using /p
fae0: 72 6f 63 2f 50 49 44 2f 69 6f 0a 2a 2f 0a 73 74  roc/PID/io.*/.st
faf0: 61 74 69 63 20 76 6f 69 64 20 64 69 73 70 6c 61  atic void displa
fb00: 79 4c 69 6e 75 78 49 6f 53 74 61 74 73 28 46 49  yLinuxIoStats(FI
fb10: 4c 45 20 2a 6f 75 74 29 7b 0a 20 20 46 49 4c 45  LE *out){.  FILE
fb20: 20 2a 69 6e 3b 0a 20 20 63 68 61 72 20 7a 5b 32   *in;.  char z[2
fb30: 30 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  00];.  sqlite3_s
fb40: 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
fb50: 29 2c 20 7a 2c 20 22 2f 70 72 6f 63 2f 25 64 2f  ), z, "/proc/%d/
fb60: 69 6f 22 2c 20 67 65 74 70 69 64 28 29 29 3b 0a  io", getpid());.
fb70: 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 7a 2c 20    in = fopen(z, 
fb80: 22 72 62 22 29 3b 0a 20 20 69 66 28 20 69 6e 3d  "rb");.  if( in=
fb90: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 77  =0 ) return;.  w
fba0: 68 69 6c 65 28 20 66 67 65 74 73 28 7a 2c 20 73  hile( fgets(z, s
fbb0: 69 7a 65 6f 66 28 7a 29 2c 20 69 6e 29 21 3d 30  izeof(z), in)!=0
fbc0: 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
fbd0: 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20  onst struct {.  
fbe0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
fbf0: 7a 50 61 74 74 65 72 6e 3b 0a 20 20 20 20 20 20  zPattern;.      
fc00: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 65 73  const char *zDes
fc10: 63 3b 0a 20 20 20 20 7d 20 61 54 72 61 6e 73 5b  c;.    } aTrans[
fc20: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 72  ] = {.      { "r
fc30: 63 68 61 72 3a 20 22 2c 20 20 20 20 20 20 20 20  char: ",        
fc40: 20 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73            "Bytes
fc50: 20 72 65 63 65 69 76 65 64 20 62 79 20 72 65 61   received by rea
fc60: 64 28 29 3a 22 20 7d 2c 0a 20 20 20 20 20 20 7b  d():" },.      {
fc70: 20 22 77 63 68 61 72 3a 20 22 2c 20 20 20 20 20   "wchar: ",     
fc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 79               "By
fc90: 74 65 73 20 73 65 6e 74 20 74 6f 20 77 72 69 74  tes sent to writ
fca0: 65 28 29 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20  e():"    },.    
fcb0: 20 20 7b 20 22 73 79 73 63 72 3a 20 22 2c 20 20    { "syscr: ",  
fcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcd0: 22 52 65 61 64 28 29 20 73 79 73 74 65 6d 20 63  "Read() system c
fce0: 61 6c 6c 73 3a 22 20 20 20 20 20 20 7d 2c 0a 20  alls:"      },. 
fcf0: 20 20 20 20 20 7b 20 22 73 79 73 63 77 3a 20 22       { "syscw: "
fd00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
fd10: 20 20 20 22 57 72 69 74 65 28 29 20 73 79 73 74     "Write() syst
fd20: 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20 20 7d  em calls:"     }
fd30: 2c 0a 20 20 20 20 20 20 7b 20 22 72 65 61 64 5f  ,.      { "read_
fd40: 62 79 74 65 73 3a 20 22 2c 20 20 20 20 20 20 20  bytes: ",       
fd50: 20 20 20 20 20 20 22 42 79 74 65 73 20 72 65 61        "Bytes rea
fd60: 64 20 66 72 6f 6d 20 73 74 6f 72 61 67 65 3a 22  d from storage:"
fd70: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 77 72    },.      { "wr
fd80: 69 74 65 5f 62 79 74 65 73 3a 20 22 2c 20 20 20  ite_bytes: ",   
fd90: 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73 20           "Bytes 
fda0: 77 72 69 74 74 65 6e 20 74 6f 20 73 74 6f 72 61  written to stora
fdb0: 67 65 3a 22 20 7d 2c 0a 20 20 20 20 20 20 7b 20  ge:" },.      { 
fdc0: 22 63 61 6e 63 65 6c 6c 65 64 5f 77 72 69 74 65  "cancelled_write
fdd0: 5f 62 79 74 65 73 3a 20 22 2c 20 20 22 43 61 6e  _bytes: ",  "Can
fde0: 63 65 6c 6c 65 64 20 77 72 69 74 65 20 62 79 74  celled write byt
fdf0: 65 73 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20 7d  es:"    },.    }
fe00: 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
fe10: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
fe20: 79 53 69 7a 65 28 61 54 72 61 6e 73 29 3b 20 69  ySize(aTrans); i
fe30: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ++){.      int n
fe40: 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 54 72 61   = strlen30(aTra
fe50: 6e 73 5b 69 5d 2e 7a 50 61 74 74 65 72 6e 29 3b  ns[i].zPattern);
fe60: 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 6e 63  .      if( strnc
fe70: 6d 70 28 61 54 72 61 6e 73 5b 69 5d 2e 7a 50 61  mp(aTrans[i].zPa
fe80: 74 74 65 72 6e 2c 20 7a 2c 20 6e 29 3d 3d 30 20  ttern, z, n)==0 
fe90: 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
fea0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 2d 33  printf(out, "%-3
feb0: 36 73 20 25 73 22 2c 20 61 54 72 61 6e 73 5b 69  6s %s", aTrans[i
fec0: 5d 2e 7a 44 65 73 63 2c 20 26 7a 5b 6e 5d 29 3b  ].zDesc, &z[n]);
fed0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
fee0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
fef0: 7d 0a 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a  }.  fclose(in);.
ff00: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
ff10: 44 69 73 70 6c 61 79 20 61 20 73 69 6e 67 6c 65  Display a single
ff20: 20 6c 69 6e 65 20 6f 66 20 73 74 61 74 75 73 20   line of status 
ff30: 75 73 69 6e 67 20 36 34 2d 62 69 74 20 76 61 6c  using 64-bit val
ff40: 75 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ues..*/.static v
ff50: 6f 69 64 20 64 69 73 70 6c 61 79 53 74 61 74 4c  oid displayStatL
ff60: 69 6e 65 28 0a 20 20 53 68 65 6c 6c 53 74 61 74  ine(.  ShellStat
ff70: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
ff80: 20 2f 2a 20 54 68 65 20 73 68 65 6c 6c 20 63 6f   /* The shell co
ff90: 6e 74 65 78 74 20 2a 2f 0a 20 20 63 68 61 72 20  ntext */.  char 
ffa0: 2a 7a 4c 61 62 65 6c 2c 20 20 20 20 20 20 20 20  *zLabel,        
ffb0: 20 20 20 20 20 2f 2a 20 4c 61 62 65 6c 20 66 6f       /* Label fo
ffc0: 72 20 74 68 69 73 20 6f 6e 65 20 6c 69 6e 65 20  r this one line 
ffd0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 46 6f 72 6d  */.  char *zForm
ffe0: 61 74 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f  at,            /
fff0: 2a 20 46 6f 72 6d 61 74 20 66 6f 72 20 74 68 65  * Format for the
10000 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74   result */.  int
10010 20 69 53 74 61 74 75 73 43 74 72 6c 2c 20 20 20   iStatusCtrl,   
10020 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
10030 73 74 61 74 75 73 20 74 6f 20 64 69 73 70 6c 61  status to displa
10040 79 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 73 65  y */.  int bRese
10050 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
10060 20 2f 2a 20 54 72 75 65 20 74 6f 20 72 65 73 65   /* True to rese
10070 74 20 74 68 65 20 73 74 61 74 73 20 2a 2f 0a 29  t the stats */.)
10080 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  {.  sqlite3_int6
10090 34 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 73  4 iCur = -1;.  s
100a0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 69 48 69  qlite3_int64 iHi
100b0 77 74 72 20 3d 20 2d 31 3b 0a 20 20 69 6e 74 20  wtr = -1;.  int 
100c0 69 2c 20 6e 50 65 72 63 65 6e 74 3b 0a 20 20 63  i, nPercent;.  c
100d0 68 61 72 20 7a 4c 69 6e 65 5b 32 30 30 5d 3b 0a  har zLine[200];.
100e0 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73    sqlite3_status
100f0 36 34 28 69 53 74 61 74 75 73 43 74 72 6c 2c 20  64(iStatusCtrl, 
10100 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20  &iCur, &iHiwtr, 
10110 62 52 65 73 65 74 29 3b 0a 20 20 66 6f 72 28 69  bReset);.  for(i
10120 3d 30 2c 20 6e 50 65 72 63 65 6e 74 3d 30 3b 20  =0, nPercent=0; 
10130 7a 46 6f 72 6d 61 74 5b 69 5d 3b 20 69 2b 2b 29  zFormat[i]; i++)
10140 7b 0a 20 20 20 20 69 66 28 20 7a 46 6f 72 6d 61  {.    if( zForma
10150 74 5b 69 5d 3d 3d 27 25 27 20 29 20 6e 50 65 72  t[i]=='%' ) nPer
10160 63 65 6e 74 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66  cent++;.  }.  if
10170 28 20 6e 50 65 72 63 65 6e 74 3e 31 20 29 7b 0a  ( nPercent>1 ){.
10180 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
10190 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c 69 6e  intf(sizeof(zLin
101a0 65 29 2c 20 7a 4c 69 6e 65 2c 20 7a 46 6f 72 6d  e), zLine, zForm
101b0 61 74 2c 20 69 43 75 72 2c 20 69 48 69 77 74 72  at, iCur, iHiwtr
101c0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
101d0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
101e0 28 73 69 7a 65 6f 66 28 7a 4c 69 6e 65 29 2c 20  (sizeof(zLine), 
101f0 7a 4c 69 6e 65 2c 20 7a 46 6f 72 6d 61 74 2c 20  zLine, zFormat, 
10200 69 48 69 77 74 72 29 3b 0a 20 20 7d 0a 20 20 72  iHiwtr);.  }.  r
10210 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
10220 2c 20 22 25 2d 33 36 73 20 25 73 5c 6e 22 2c 20  , "%-36s %s\n", 
10230 7a 4c 61 62 65 6c 2c 20 7a 4c 69 6e 65 29 3b 0a  zLabel, zLine);.
10240 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61 79  }../*.** Display
10250 20 6d 65 6d 6f 72 79 20 73 74 61 74 73 2e 0a 2a   memory stats..*
10260 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64 69 73  /.static int dis
10270 70 6c 61 79 5f 73 74 61 74 73 28 0a 20 20 73 71  play_stats(.  sq
10280 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20  lite3 *db,      
10290 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
102a0 61 62 61 73 65 20 74 6f 20 71 75 65 72 79 20 2a  abase to query *
102b0 2f 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  /.  ShellState *
102c0 70 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20  pArg,           
102d0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 68  /* Pointer to Sh
102e0 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 20 20 69 6e  ellState */.  in
102f0 74 20 62 52 65 73 65 74 20 20 20 20 20 20 20 20  t bReset        
10300 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
10310 65 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73  e to reset the s
10320 74 61 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  tats */.){.  int
10330 20 69 43 75 72 3b 0a 20 20 69 6e 74 20 69 48 69   iCur;.  int iHi
10340 77 74 72 3b 0a 20 20 46 49 4c 45 20 2a 6f 75 74  wtr;.  FILE *out
10350 3b 0a 20 20 69 66 28 20 70 41 72 67 3d 3d 30 20  ;.  if( pArg==0 
10360 7c 7c 20 70 41 72 67 2d 3e 6f 75 74 3d 3d 30 20  || pArg->out==0 
10370 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 6f 75  ) return 0;.  ou
10380 74 20 3d 20 70 41 72 67 2d 3e 6f 75 74 3b 0a 0a  t = pArg->out;..
10390 20 20 69 66 28 20 70 41 72 67 2d 3e 70 53 74 6d    if( pArg->pStm
103a0 74 20 26 26 20 28 70 41 72 67 2d 3e 73 74 61 74  t && (pArg->stat
103b0 73 4f 6e 20 26 20 32 29 20 29 7b 0a 20 20 20 20  sOn & 2) ){.    
103c0 69 6e 74 20 6e 43 6f 6c 2c 20 69 2c 20 78 3b 0a  int nCol, i, x;.
103d0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
103e0 20 2a 70 53 74 6d 74 20 3d 20 70 41 72 67 2d 3e   *pStmt = pArg->
103f0 70 53 74 6d 74 3b 0a 20 20 20 20 63 68 61 72 20  pStmt;.    char 
10400 7a 5b 31 30 30 5d 3b 0a 20 20 20 20 6e 43 6f 6c  z[100];.    nCol
10410 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
10420 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b 0a  n_count(pStmt);.
10430 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
10440 75 74 2c 20 22 25 2d 33 36 73 20 25 64 5c 6e 22  ut, "%-36s %d\n"
10450 2c 20 22 4e 75 6d 62 65 72 20 6f 66 20 6f 75 74  , "Number of out
10460 70 75 74 20 63 6f 6c 75 6d 6e 73 3a 22 2c 20 6e  put columns:", n
10470 43 6f 6c 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Col);.    for(i=
10480 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b  0; i<nCol; i++){
10490 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
104a0 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
104b0 29 2c 7a 2c 22 43 6f 6c 75 6d 6e 20 25 64 20 25  ),z,"Column %d %
104c0 6e 6e 61 6d 65 3a 22 2c 20 69 2c 20 26 78 29 3b  nname:", i, &x);
104d0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
104e0 74 66 28 6f 75 74 2c 20 22 25 2d 33 36 73 20 25  tf(out, "%-36s %
104f0 73 5c 6e 22 2c 20 7a 2c 20 73 71 6c 69 74 65 33  s\n", z, sqlite3
10500 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 70 53 74  _column_name(pSt
10510 6d 74 2c 69 29 29 3b 0a 23 69 66 6e 64 65 66 20  mt,i));.#ifndef 
10520 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c  SQLITE_OMIT_DECL
10530 54 59 50 45 0a 20 20 20 20 20 20 73 71 6c 69 74  TYPE.      sqlit
10540 65 33 5f 73 6e 70 72 69 6e 74 66 28 33 30 2c 20  e3_snprintf(30, 
10550 7a 2b 78 2c 20 22 64 65 63 6c 61 72 65 64 20 74  z+x, "declared t
10560 79 70 65 3a 22 29 3b 0a 20 20 20 20 20 20 75 74  ype:");.      ut
10570 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  f8_printf(out, "
10580 25 2d 33 36 73 20 25 73 5c 6e 22 2c 20 7a 2c 20  %-36s %s\n", z, 
10590 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
105a0 65 63 6c 74 79 70 65 28 70 53 74 6d 74 2c 20 69  ecltype(pStmt, i
105b0 29 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  ));.#endif.#ifde
105c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
105d0 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a  COLUMN_METADATA.
105e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
105f0 70 72 69 6e 74 66 28 33 30 2c 20 7a 2b 78 2c 20  printf(30, z+x, 
10600 22 64 61 74 61 62 61 73 65 20 6e 61 6d 65 3a 22  "database name:"
10610 29 3b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  );.      utf8_pr
10620 69 6e 74 66 28 6f 75 74 2c 20 22 25 2d 33 36 73  intf(out, "%-36s
10630 20 25 73 5c 6e 22 2c 20 7a 2c 20 73 71 6c 69 74   %s\n", z, sqlit
10640 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
10650 73 65 5f 6e 61 6d 65 28 70 53 74 6d 74 2c 69 29  se_name(pStmt,i)
10660 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
10670 5f 73 6e 70 72 69 6e 74 66 28 33 30 2c 20 7a 2b  _snprintf(30, z+
10680 78 2c 20 22 74 61 62 6c 65 20 6e 61 6d 65 3a 22  x, "table name:"
10690 29 3b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  );.      utf8_pr
106a0 69 6e 74 66 28 6f 75 74 2c 20 22 25 2d 33 36 73  intf(out, "%-36s
106b0 20 25 73 5c 6e 22 2c 20 7a 2c 20 73 71 6c 69 74   %s\n", z, sqlit
106c0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
106d0 6e 61 6d 65 28 70 53 74 6d 74 2c 69 29 29 3b 0a  name(pStmt,i));.
106e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
106f0 70 72 69 6e 74 66 28 33 30 2c 20 7a 2b 78 2c 20  printf(30, z+x, 
10700 22 6f 72 69 67 69 6e 20 6e 61 6d 65 3a 22 29 3b  "origin name:");
10710 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
10720 74 66 28 6f 75 74 2c 20 22 25 2d 33 36 73 20 25  tf(out, "%-36s %
10730 73 5c 6e 22 2c 20 7a 2c 20 73 71 6c 69 74 65 33  s\n", z, sqlite3
10740 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
10750 61 6d 65 28 70 53 74 6d 74 2c 69 29 29 3b 0a 23  ame(pStmt,i));.#
10760 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 7d 0a  endif.    }.  }.
10770 0a 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69  .  displayStatLi
10780 6e 65 28 70 41 72 67 2c 20 22 4d 65 6d 6f 72 79  ne(pArg, "Memory
10790 20 55 73 65 64 3a 22 2c 0a 20 20 20 20 20 22 25   Used:",.     "%
107a0 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29 20 62  lld (max %lld) b
107b0 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f 53 54  ytes", SQLITE_ST
107c0 41 54 55 53 5f 4d 45 4d 4f 52 59 5f 55 53 45 44  ATUS_MEMORY_USED
107d0 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 64 69 73  , bReset);.  dis
107e0 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72  playStatLine(pAr
107f0 67 2c 20 22 4e 75 6d 62 65 72 20 6f 66 20 4f 75  g, "Number of Ou
10800 74 73 74 61 6e 64 69 6e 67 20 41 6c 6c 6f 63 61  tstanding Alloca
10810 74 69 6f 6e 73 3a 22 2c 0a 20 20 20 20 20 22 25  tions:",.     "%
10820 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29 22 2c  lld (max %lld)",
10830 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d   SQLITE_STATUS_M
10840 41 4c 4c 4f 43 5f 43 4f 55 4e 54 2c 20 62 52 65  ALLOC_COUNT, bRe
10850 73 65 74 29 3b 0a 20 20 69 66 28 20 70 41 72 67  set);.  if( pArg
10860 2d 3e 73 68 65 6c 6c 46 6c 67 73 20 26 20 53 48  ->shellFlgs & SH
10870 46 4c 47 5f 50 61 67 65 63 61 63 68 65 20 29 7b  FLG_Pagecache ){
10880 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61 74  .    displayStat
10890 4c 69 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d 62  Line(pArg, "Numb
108a0 65 72 20 6f 66 20 50 63 61 63 68 65 20 50 61 67  er of Pcache Pag
108b0 65 73 20 55 73 65 64 3a 22 2c 0a 20 20 20 20 20  es Used:",.     
108c0 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25 6c 6c    "%lld (max %ll
108d0 64 29 20 70 61 67 65 73 22 2c 20 53 51 4c 49 54  d) pages", SQLIT
108e0 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41 43  E_STATUS_PAGECAC
108f0 48 45 5f 55 53 45 44 2c 20 62 52 65 73 65 74 29  HE_USED, bReset)
10900 3b 0a 20 20 7d 0a 20 20 64 69 73 70 6c 61 79 53  ;.  }.  displayS
10910 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4e  tatLine(pArg, "N
10920 75 6d 62 65 72 20 6f 66 20 50 63 61 63 68 65 20  umber of Pcache 
10930 4f 76 65 72 66 6c 6f 77 20 42 79 74 65 73 3a 22  Overflow Bytes:"
10940 2c 0a 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61  ,.     "%lld (ma
10950 78 20 25 6c 6c 64 29 20 62 79 74 65 73 22 2c 20  x %lld) bytes", 
10960 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41  SQLITE_STATUS_PA
10970 47 45 43 41 43 48 45 5f 4f 56 45 52 46 4c 4f 57  GECACHE_OVERFLOW
10980 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 64 69 73  , bReset);.  dis
10990 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72  playStatLine(pAr
109a0 67 2c 20 22 4c 61 72 67 65 73 74 20 41 6c 6c 6f  g, "Largest Allo
109b0 63 61 74 69 6f 6e 3a 22 2c 0a 20 20 20 20 20 22  cation:",.     "
109c0 25 6c 6c 64 20 62 79 74 65 73 22 2c 20 53 51 4c  %lld bytes", SQL
109d0 49 54 45 5f 53 54 41 54 55 53 5f 4d 41 4c 4c 4f  ITE_STATUS_MALLO
109e0 43 5f 53 49 5a 45 2c 20 62 52 65 73 65 74 29 3b  C_SIZE, bReset);
109f0 0a 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69  .  displayStatLi
10a00 6e 65 28 70 41 72 67 2c 20 22 4c 61 72 67 65 73  ne(pArg, "Larges
10a10 74 20 50 63 61 63 68 65 20 41 6c 6c 6f 63 61 74  t Pcache Allocat
10a20 69 6f 6e 3a 22 2c 0a 20 20 20 20 20 22 25 6c 6c  ion:",.     "%ll
10a30 64 20 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45  d bytes", SQLITE
10a40 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41 43 48  _STATUS_PAGECACH
10a50 45 5f 53 49 5a 45 2c 20 62 52 65 73 65 74 29 3b  E_SIZE, bReset);
10a60 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
10a70 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 64  AXSTACKDEPTH.  d
10a80 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70  isplayStatLine(p
10a90 41 72 67 2c 20 22 44 65 65 70 65 73 74 20 50 61  Arg, "Deepest Pa
10aa0 72 73 65 72 20 53 74 61 63 6b 3a 22 2c 0a 20 20  rser Stack:",.  
10ab0 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25 6c     "%lld (max %l
10ac0 6c 64 29 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ld)", SQLITE_STA
10ad0 54 55 53 5f 50 41 52 53 45 52 5f 53 54 41 43 4b  TUS_PARSER_STACK
10ae0 2c 20 62 52 65 73 65 74 29 3b 0a 23 65 6e 64 69  , bReset);.#endi
10af0 66 0a 0a 20 20 69 66 28 20 64 62 20 29 7b 0a 20  f..  if( db ){. 
10b00 20 20 20 69 66 28 20 70 41 72 67 2d 3e 73 68 65     if( pArg->she
10b10 6c 6c 46 6c 67 73 20 26 20 53 48 46 4c 47 5f 4c  llFlgs & SHFLG_L
10b20 6f 6f 6b 61 73 69 64 65 20 29 7b 0a 20 20 20 20  ookaside ){.    
10b30 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20    iHiwtr = iCur 
10b40 3d 20 2d 31 3b 0a 20 20 20 20 20 20 73 71 6c 69  = -1;.      sqli
10b50 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62  te3_db_status(db
10b60 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  , SQLITE_DBSTATU
10b70 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 55 53 45 44  S_LOOKASIDE_USED
10b80 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
10b90 20 20 20 20 20 20 20 20 20 20 26 69 43 75 72 2c            &iCur,
10ba0 20 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74   &iHiwtr, bReset
10bb0 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  );.      raw_pri
10bc0 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 0a 20  ntf(pArg->out,. 
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c 6f               "Lo
10be0 6f 6b 61 73 69 64 65 20 53 6c 6f 74 73 20 55 73  okaside Slots Us
10bf0 65 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ed:             
10c00 20 20 20 25 64 20 28 6d 61 78 20 25 64 29 5c 6e     %d (max %d)\n
10c10 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
10c20 20 69 43 75 72 2c 20 69 48 69 77 74 72 29 3b 0a   iCur, iHiwtr);.
10c30 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62        sqlite3_db
10c40 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49  _status(db, SQLI
10c50 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b  TE_DBSTATUS_LOOK
10c60 41 53 49 44 45 5f 48 49 54 2c 0a 20 20 20 20 20  ASIDE_HIT,.     
10c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c80 20 20 20 26 69 43 75 72 2c 20 26 69 48 69 77 74     &iCur, &iHiwt
10c90 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  r, bReset);.    
10ca0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
10cb0 67 2d 3e 6f 75 74 2c 20 22 53 75 63 63 65 73 73  g->out, "Success
10cc0 66 75 6c 20 6c 6f 6f 6b 61 73 69 64 65 20 61 74  ful lookaside at
10cd0 74 65 6d 70 74 73 3a 20 20 20 20 20 20 20 25 64  tempts:       %d
10ce0 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
10cf0 20 20 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20     iHiwtr);.    
10d00 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
10d10 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44  tus(db, SQLITE_D
10d20 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44  BSTATUS_LOOKASID
10d30 45 5f 4d 49 53 53 5f 53 49 5a 45 2c 0a 20 20 20  E_MISS_SIZE,.   
10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d50 20 20 20 20 20 26 69 43 75 72 2c 20 26 69 48 69       &iCur, &iHi
10d60 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20  wtr, bReset);.  
10d70 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
10d80 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 6b 61  Arg->out, "Looka
10d90 73 69 64 65 20 66 61 69 6c 75 72 65 73 20 64 75  side failures du
10da0 65 20 74 6f 20 73 69 7a 65 3a 20 20 20 20 20 20  e to size:      
10db0 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  %d\n",.         
10dc0 20 20 20 20 20 69 48 69 77 74 72 29 3b 0a 20 20       iHiwtr);.  
10dd0 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
10de0 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
10df0 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53  _DBSTATUS_LOOKAS
10e00 49 44 45 5f 4d 49 53 53 5f 46 55 4c 4c 2c 0a 20  IDE_MISS_FULL,. 
10e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e20 20 20 20 20 20 20 20 26 69 43 75 72 2c 20 26 69         &iCur, &i
10e30 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a  Hiwtr, bReset);.
10e40 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
10e50 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f  (pArg->out, "Loo
10e60 6b 61 73 69 64 65 20 66 61 69 6c 75 72 65 73 20  kaside failures 
10e70 64 75 65 20 74 6f 20 4f 4f 4d 3a 20 20 20 20 20  due to OOM:     
10e80 20 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20    %d\n",.       
10e90 20 20 20 20 20 20 20 69 48 69 77 74 72 29 3b 0a         iHiwtr);.
10ea0 20 20 20 20 7d 0a 20 20 20 20 69 48 69 77 74 72      }.    iHiwtr
10eb0 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20   = iCur = -1;.  
10ec0 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
10ed0 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44  tus(db, SQLITE_D
10ee0 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f 55 53  BSTATUS_CACHE_US
10ef0 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77  ED, &iCur, &iHiw
10f00 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  tr, bReset);.   
10f10 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
10f20 2d 3e 6f 75 74 2c 20 22 50 61 67 65 72 20 48 65  ->out, "Pager He
10f30 61 70 20 55 73 61 67 65 3a 20 20 20 20 20 20 20  ap Usage:       
10f40 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64 20               %d 
10f50 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20 20 20  bytes\n",.      
10f60 20 20 20 20 20 20 69 43 75 72 29 3b 0a 20 20 20        iCur);.   
10f70 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d   iHiwtr = iCur =
10f80 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   -1;.    sqlite3
10f90 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53  _db_status(db, S
10fa0 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43  QLITE_DBSTATUS_C
10fb0 41 43 48 45 5f 48 49 54 2c 20 26 69 43 75 72 2c  ACHE_HIT, &iCur,
10fc0 20 26 69 48 69 77 74 72 2c 20 31 29 3b 0a 20 20   &iHiwtr, 1);.  
10fd0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
10fe0 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 20 63 61  g->out, "Page ca
10ff0 63 68 65 20 68 69 74 73 3a 20 20 20 20 20 20 20  che hits:       
11000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64                %d
11010 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20  \n", iCur);.    
11020 69 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20  iHiwtr = iCur = 
11030 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  -1;.    sqlite3_
11040 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51  db_status(db, SQ
11050 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41  LITE_DBSTATUS_CA
11060 43 48 45 5f 4d 49 53 53 2c 20 26 69 43 75 72 2c  CHE_MISS, &iCur,
11070 20 26 69 48 69 77 74 72 2c 20 31 29 3b 0a 20 20   &iHiwtr, 1);.  
11080 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
11090 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 20 63 61  g->out, "Page ca
110a0 63 68 65 20 6d 69 73 73 65 73 3a 20 20 20 20 20  che misses:     
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64                %d
110c0 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20  \n", iCur);.    
110d0 69 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20  iHiwtr = iCur = 
110e0 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  -1;.    sqlite3_
110f0 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51  db_status(db, SQ
11100 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41  LITE_DBSTATUS_CA
11110 43 48 45 5f 57 52 49 54 45 2c 20 26 69 43 75 72  CHE_WRITE, &iCur
11120 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b 0a 20  , &iHiwtr, 1);. 
11130 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
11140 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 20 63  rg->out, "Page c
11150 61 63 68 65 20 77 72 69 74 65 73 3a 20 20 20 20  ache writes:    
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
11170 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 20  d\n", iCur);.   
11180 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d   iHiwtr = iCur =
11190 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   -1;.    sqlite3
111a0 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53  _db_status(db, S
111b0 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43  QLITE_DBSTATUS_C
111c0 41 43 48 45 5f 53 50 49 4c 4c 2c 20 26 69 43 75  ACHE_SPILL, &iCu
111d0 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b 0a  r, &iHiwtr, 1);.
111e0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
111f0 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 20  Arg->out, "Page 
11200 63 61 63 68 65 20 73 70 69 6c 6c 73 3a 20 20 20  cache spills:   
11210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11220 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20  %d\n", iCur);.  
11230 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20    iHiwtr = iCur 
11240 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  = -1;.    sqlite
11250 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20  3_db_status(db, 
11260 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
11270 53 43 48 45 4d 41 5f 55 53 45 44 2c 20 26 69 43  SCHEMA_USED, &iC
11280 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65  ur, &iHiwtr, bRe
11290 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70 72  set);.    raw_pr
112a0 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
112b0 22 53 63 68 65 6d 61 20 48 65 61 70 20 55 73 61  "Schema Heap Usa
112c0 67 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ge:             
112d0 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c 6e        %d bytes\n
112e0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ",.            i
112f0 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74 72  Cur);.    iHiwtr
11300 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20   = iCur = -1;.  
11310 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
11320 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44  tus(db, SQLITE_D
11330 42 53 54 41 54 55 53 5f 53 54 4d 54 5f 55 53 45  BSTATUS_STMT_USE
11340 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77 74  D, &iCur, &iHiwt
11350 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  r, bReset);.    
11360 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
11370 3e 6f 75 74 2c 20 22 53 74 61 74 65 6d 65 6e 74  >out, "Statement
11380 20 48 65 61 70 2f 4c 6f 6f 6b 61 73 69 64 65 20   Heap/Lookaside 
11390 55 73 61 67 65 3a 20 20 20 20 20 20 25 64 20 62  Usage:      %d b
113a0 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20  ytes\n",.       
113b0 20 20 20 20 20 69 43 75 72 29 3b 0a 20 20 7d 0a       iCur);.  }.
113c0 0a 20 20 69 66 28 20 70 41 72 67 2d 3e 70 53 74  .  if( pArg->pSt
113d0 6d 74 20 29 7b 0a 20 20 20 20 69 43 75 72 20 3d  mt ){.    iCur =
113e0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74   sqlite3_stmt_st
113f0 61 74 75 73 28 70 41 72 67 2d 3e 70 53 74 6d 74  atus(pArg->pStmt
11400 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  , SQLITE_STMTSTA
11410 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45  TUS_FULLSCAN_STE
11420 50 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  P,.             
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 20 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72    bReset);.    r
11450 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
11460 6f 75 74 2c 20 22 46 75 6c 6c 73 63 61 6e 20 53  out, "Fullscan S
11470 74 65 70 73 3a 20 20 20 20 20 20 20 20 20 20 20  teps:           
11480 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22             %d\n"
11490 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 43 75  , iCur);.    iCu
114a0 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  r = sqlite3_stmt
114b0 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70 53  _status(pArg->pS
114c0 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54  tmt, SQLITE_STMT
114d0 53 54 41 54 55 53 5f 53 4f 52 54 2c 20 62 52 65  STATUS_SORT, bRe
114e0 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70 72  set);.    raw_pr
114f0 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
11500 22 53 6f 72 74 20 4f 70 65 72 61 74 69 6f 6e 73  "Sort Operations
11510 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
11520 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43 75        %d\n", iCu
11530 72 29 3b 0a 20 20 20 20 69 43 75 72 20 3d 20 73  r);.    iCur = s
11540 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74  qlite3_stmt_stat
11550 75 73 28 70 41 72 67 2d 3e 70 53 74 6d 74 2c 20  us(pArg->pStmt, 
11560 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
11570 53 5f 41 55 54 4f 49 4e 44 45 58 2c 62 52 65 73  S_AUTOINDEX,bRes
11580 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69  et);.    raw_pri
11590 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22  ntf(pArg->out, "
115a0 41 75 74 6f 69 6e 64 65 78 20 49 6e 73 65 72 74  Autoindex Insert
115b0 73 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s:              
115c0 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43 75 72       %d\n", iCur
115d0 29 3b 0a 20 20 20 20 69 43 75 72 20 3d 20 73 71  );.    iCur = sq
115e0 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75  lite3_stmt_statu
115f0 73 28 70 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53  s(pArg->pStmt, S
11600 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
11610 5f 56 4d 5f 53 54 45 50 2c 20 62 52 65 73 65 74  _VM_STEP, bReset
11620 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74  );.    raw_print
11630 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 56 69  f(pArg->out, "Vi
11640 72 74 75 61 6c 20 4d 61 63 68 69 6e 65 20 53 74  rtual Machine St
11650 65 70 73 3a 20 20 20 20 20 20 20 20 20 20 20 20  eps:            
11660 20 20 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b     %d\n", iCur);
11670 0a 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69  .    iCur = sqli
11680 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28  te3_stmt_status(
11690 70 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c  pArg->pStmt, SQL
116a0 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 52  ITE_STMTSTATUS_R
116b0 45 50 52 45 50 41 52 45 2c 20 62 52 65 73 65 74  EPREPARE, bReset
116c0 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74  );.    raw_print
116d0 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 52 65  f(pArg->out, "Re
116e0 70 72 65 70 61 72 65 20 6f 70 65 72 61 74 69 6f  prepare operatio
116f0 6e 73 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ns:             
11700 20 20 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b     %d\n", iCur);
11710 0a 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69  .    iCur = sqli
11720 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28  te3_stmt_status(
11730 70 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c  pArg->pStmt, SQL
11740 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 52  ITE_STMTSTATUS_R
11750 55 4e 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  UN, bReset);.   
11760 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
11770 2d 3e 6f 75 74 2c 20 22 4e 75 6d 62 65 72 20 6f  ->out, "Number o
11780 66 20 74 69 6d 65 73 20 72 75 6e 3a 20 20 20 20  f times run:    
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c               %d\
117a0 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69  n", iCur);.    i
117b0 43 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74  Cur = sqlite3_st
117c0 6d 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e  mt_status(pArg->
117d0 70 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54  pStmt, SQLITE_ST
117e0 4d 54 53 54 41 54 55 53 5f 4d 45 4d 55 53 45 44  MTSTATUS_MEMUSED
117f0 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72  , bReset);.    r
11800 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
11810 6f 75 74 2c 20 22 4d 65 6d 6f 72 79 20 75 73 65  out, "Memory use
11820 64 20 62 79 20 70 72 65 70 61 72 65 64 20 73 74  d by prepared st
11830 6d 74 3a 20 20 20 20 20 20 20 20 25 64 5c 6e 22  mt:        %d\n"
11840 2c 20 69 43 75 72 29 3b 0a 20 20 7d 0a 0a 23 69  , iCur);.  }..#i
11850 66 64 65 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 20  fdef __linux__. 
11860 20 64 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53   displayLinuxIoS
11870 74 61 74 73 28 70 41 72 67 2d 3e 6f 75 74 29 3b  tats(pArg->out);
11880 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 44 6f  .#endif..  /* Do
11890 20 6e 6f 74 20 72 65 6d 6f 76 65 20 74 68 69 73   not remove this
118a0 20 6d 61 63 68 69 6e 65 20 72 65 61 64 61 62 6c   machine readabl
118b0 65 20 63 6f 6d 6d 65 6e 74 3a 20 65 78 74 72 61  e comment: extra
118c0 2d 73 74 61 74 73 2d 6f 75 74 70 75 74 2d 68 65  -stats-output-he
118d0 72 65 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20  re */..  return 
118e0 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70  0;.}../*.** Disp
118f0 6c 61 79 20 73 63 61 6e 20 73 74 61 74 73 2e 0a  lay scan stats..
11900 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64  */.static void d
11910 69 73 70 6c 61 79 5f 73 63 61 6e 73 74 61 74 73  isplay_scanstats
11920 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
11930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11940 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
11950 74 6f 20 71 75 65 72 79 20 2a 2f 0a 20 20 53 68  to query */.  Sh
11960 65 6c 6c 53 74 61 74 65 20 2a 70 41 72 67 20 20  ellState *pArg  
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11980 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c   Pointer to Shel
11990 6c 53 74 61 74 65 20 2a 2f 0a 29 7b 0a 23 69 66  lState */.){.#if
119a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
119b0 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
119c0 55 53 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  US.  UNUSED_PARA
119d0 4d 45 54 45 52 28 64 62 29 3b 0a 20 20 55 4e 55  METER(db);.  UNU
119e0 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 70 41  SED_PARAMETER(pA
119f0 72 67 29 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74  rg);.#else.  int
11a00 20 69 2c 20 6b 2c 20 6e 2c 20 6d 78 3b 0a 20 20   i, k, n, mx;.  
11a10 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
11a20 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20  >out, "-------- 
11a30 73 63 61 6e 73 74 61 74 73 20 2d 2d 2d 2d 2d 2d  scanstats ------
11a40 2d 2d 5c 6e 22 29 3b 0a 20 20 6d 78 20 3d 20 30  --\n");.  mx = 0
11a50 3b 0a 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 3d  ;.  for(k=0; k<=
11a60 6d 78 3b 20 6b 2b 2b 29 7b 0a 20 20 20 20 64 6f  mx; k++){.    do
11a70 75 62 6c 65 20 72 45 73 74 4c 6f 6f 70 20 3d 20  uble rEstLoop = 
11a80 31 2e 30 3b 0a 20 20 20 20 66 6f 72 28 69 3d 6e  1.0;.    for(i=n
11a90 3d 30 3b 20 31 3b 20 69 2b 2b 29 7b 0a 20 20 20  =0; 1; i++){.   
11aa0 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20     sqlite3_stmt 
11ab0 2a 70 20 3d 20 70 41 72 67 2d 3e 70 53 74 6d 74  *p = pArg->pStmt
11ac0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
11ad0 69 6e 74 36 34 20 6e 4c 6f 6f 70 2c 20 6e 56 69  int64 nLoop, nVi
11ae0 73 69 74 3b 0a 20 20 20 20 20 20 64 6f 75 62 6c  sit;.      doubl
11af0 65 20 72 45 73 74 3b 0a 20 20 20 20 20 20 69 6e  e rEst;.      in
11b00 74 20 69 53 69 64 3b 0a 20 20 20 20 20 20 63 6f  t iSid;.      co
11b10 6e 73 74 20 63 68 61 72 20 2a 7a 45 78 70 6c 61  nst char *zExpla
11b20 69 6e 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71  in;.      if( sq
11b30 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73  lite3_stmt_scans
11b40 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49  tatus(p, i, SQLI
11b50 54 45 5f 53 43 41 4e 53 54 41 54 5f 4e 4c 4f 4f  TE_SCANSTAT_NLOO
11b60 50 2c 20 28 76 6f 69 64 2a 29 26 6e 4c 6f 6f 70  P, (void*)&nLoop
11b70 29 20 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65  ) ){.        bre
11b80 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
11b90 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73    sqlite3_stmt_s
11ba0 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20  canstatus(p, i, 
11bb0 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f  SQLITE_SCANSTAT_
11bc0 53 45 4c 45 43 54 49 44 2c 20 28 76 6f 69 64 2a  SELECTID, (void*
11bd0 29 26 69 53 69 64 29 3b 0a 20 20 20 20 20 20 69  )&iSid);.      i
11be0 66 28 20 69 53 69 64 3e 6d 78 20 29 20 6d 78 20  f( iSid>mx ) mx 
11bf0 3d 20 69 53 69 64 3b 0a 20 20 20 20 20 20 69 66  = iSid;.      if
11c00 28 20 69 53 69 64 21 3d 6b 20 29 20 63 6f 6e 74  ( iSid!=k ) cont
11c10 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20  inue;.      if( 
11c20 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  n==0 ){.        
11c30 72 45 73 74 4c 6f 6f 70 20 3d 20 28 64 6f 75 62  rEstLoop = (doub
11c40 6c 65 29 6e 4c 6f 6f 70 3b 0a 20 20 20 20 20 20  le)nLoop;.      
11c50 20 20 69 66 28 20 6b 3e 30 20 29 20 72 61 77 5f    if( k>0 ) raw_
11c60 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
11c70 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 75 62 71  , "-------- subq
11c80 75 65 72 79 20 25 64 20 2d 2d 2d 2d 2d 2d 2d 5c  uery %d -------\
11c90 6e 22 2c 20 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  n", k);.      }.
11ca0 20 20 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20        n++;.     
11cb0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63   sqlite3_stmt_sc
11cc0 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53  anstatus(p, i, S
11cd0 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 4e  QLITE_SCANSTAT_N
11ce0 56 49 53 49 54 2c 20 28 76 6f 69 64 2a 29 26 6e  VISIT, (void*)&n
11cf0 56 69 73 69 74 29 3b 0a 20 20 20 20 20 20 73 71  Visit);.      sq
11d00 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73  lite3_stmt_scans
11d10 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49  tatus(p, i, SQLI
11d20 54 45 5f 53 43 41 4e 53 54 41 54 5f 45 53 54 2c  TE_SCANSTAT_EST,
11d30 20 28 76 6f 69 64 2a 29 26 72 45 73 74 29 3b 0a   (void*)&rEst);.
11d40 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74        sqlite3_st
11d50 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c  mt_scanstatus(p,
11d60 20 69 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53   i, SQLITE_SCANS
11d70 54 41 54 5f 45 58 50 4c 41 49 4e 2c 20 28 76 6f  TAT_EXPLAIN, (vo
11d80 69 64 2a 29 26 7a 45 78 70 6c 61 69 6e 29 3b 0a  id*)&zExplain);.
11d90 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
11da0 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f  f(pArg->out, "Lo
11db0 6f 70 20 25 32 64 3a 20 25 73 5c 6e 22 2c 20 6e  op %2d: %s\n", n
11dc0 2c 20 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20  , zExplain);.   
11dd0 20 20 20 72 45 73 74 4c 6f 6f 70 20 2a 3d 20 72     rEstLoop *= r
11de0 45 73 74 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  Est;.      raw_p
11df0 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
11e00 0a 20 20 20 20 20 20 20 20 20 20 22 20 20 20 20  .          "    
11e10 20 20 20 20 20 6e 4c 6f 6f 70 3d 25 2d 38 6c 6c       nLoop=%-8ll
11e20 64 20 6e 52 6f 77 3d 25 2d 38 6c 6c 64 20 65 73  d nRow=%-8lld es
11e30 74 52 6f 77 3d 25 2d 38 6c 6c 64 20 65 73 74 52  tRow=%-8lld estR
11e40 6f 77 2f 4c 6f 6f 70 3d 25 2d 38 67 5c 6e 22 2c  ow/Loop=%-8g\n",
11e50 0a 20 20 20 20 20 20 20 20 20 20 6e 4c 6f 6f 70  .          nLoop
11e60 2c 20 6e 56 69 73 69 74 2c 20 28 73 71 6c 69 74  , nVisit, (sqlit
11e70 65 33 5f 69 6e 74 36 34 29 28 72 45 73 74 4c 6f  e3_int64)(rEstLo
11e80 6f 70 2b 30 2e 35 29 2c 20 72 45 73 74 0a 20 20  op+0.5), rEst.  
11e90 20 20 20 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d      );.    }.  }
11ea0 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41  .  raw_printf(pA
11eb0 72 67 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d  rg->out, "------
11ec0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11ed0 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 23 65 6e 64 69  -----\n");.#endi
11ee0 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d  f.}../*.** Param
11ef0 65 74 65 72 20 61 7a 41 72 72 61 79 20 70 6f 69  eter azArray poi
11f00 6e 74 73 20 74 6f 20 61 20 7a 65 72 6f 2d 74 65  nts to a zero-te
11f10 72 6d 69 6e 61 74 65 64 20 61 72 72 61 79 20 6f  rminated array o
11f20 66 20 73 74 72 69 6e 67 73 2e 20 7a 53 74 72 0a  f strings. zStr.
11f30 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 73  ** points to a s
11f40 69 6e 67 6c 65 20 6e 75 6c 2d 74 65 72 6d 69 6e  ingle nul-termin
11f50 61 74 65 64 20 73 74 72 69 6e 67 2e 20 52 65 74  ated string. Ret
11f60 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20  urn non-zero if 
11f70 7a 53 74 72 0a 2a 2a 20 69 73 20 65 71 75 61 6c  zStr.** is equal
11f80 2c 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 73  , according to s
11f90 74 72 63 6d 70 28 29 2c 20 74 6f 20 61 6e 79 20  trcmp(), to any 
11fa0 6f 66 20 74 68 65 20 73 74 72 69 6e 67 73 20 69  of the strings i
11fb0 6e 20 74 68 65 20 61 72 72 61 79 2e 0a 2a 2a 20  n the array..** 
11fc0 4f 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72  Otherwise, retur
11fd0 6e 20 7a 65 72 6f 2e 0a 2a 2f 0a 73 74 61 74 69  n zero..*/.stati
11fe0 63 20 69 6e 74 20 73 74 72 5f 69 6e 5f 61 72 72  c int str_in_arr
11ff0 61 79 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ay(const char *z
12000 53 74 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  Str, const char 
12010 2a 2a 61 7a 41 72 72 61 79 29 7b 0a 20 20 69 6e  **azArray){.  in
12020 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  t i;.  for(i=0; 
12030 61 7a 41 72 72 61 79 5b 69 5d 3b 20 69 2b 2b 29  azArray[i]; i++)
12040 7b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72  {.    if( 0==str
12050 63 6d 70 28 7a 53 74 72 2c 20 61 7a 41 72 72 61  cmp(zStr, azArra
12060 79 5b 69 5d 29 20 29 20 72 65 74 75 72 6e 20 31  y[i]) ) return 1
12070 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  ;.  }.  return 0
12080 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  ;.}../*.** If co
12090 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
120a0 20 70 53 71 6c 20 61 70 70 65 61 72 73 20 74 6f   pSql appears to
120b0 20 62 65 20 61 6e 20 45 58 50 4c 41 49 4e 20 73   be an EXPLAIN s
120c0 74 61 74 65 6d 65 6e 74 2c 20 61 6c 6c 6f 63 61  tatement, alloca
120d0 74 65 0a 2a 2a 20 61 6e 64 20 70 6f 70 75 6c 61  te.** and popula
120e0 74 65 20 74 68 65 20 53 68 65 6c 6c 53 74 61 74  te the ShellStat
120f0 65 2e 61 69 49 6e 64 65 6e 74 5b 5d 20 61 72 72  e.aiIndent[] arr
12100 61 79 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62  ay with the numb
12110 65 72 20 6f 66 0a 2a 2a 20 73 70 61 63 65 73 20  er of.** spaces 
12120 65 61 63 68 20 6f 70 63 6f 64 65 20 73 68 6f 75  each opcode shou
12130 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62  ld be indented b
12140 65 66 6f 72 65 20 69 74 20 69 73 20 6f 75 74 70  efore it is outp
12150 75 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e  ut..**.** The in
12160 64 65 6e 74 69 6e 67 20 72 75 6c 65 73 20 61 72  denting rules ar
12170 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 46  e:.**.**     * F
12180 6f 72 20 65 61 63 68 20 22 4e 65 78 74 22 2c 20  or each "Next", 
12190 22 50 72 65 76 22 2c 20 22 56 4e 65 78 74 22 20  "Prev", "VNext" 
121a0 6f 72 20 22 56 50 72 65 76 22 20 69 6e 73 74 72  or "VPrev" instr
121b0 75 63 74 69 6f 6e 2c 20 69 6e 64 65 6e 74 0a 2a  uction, indent.*
121c0 2a 20 20 20 20 20 20 20 61 6c 6c 20 6f 70 63 6f  *       all opco
121d0 64 65 73 20 74 68 61 74 20 6f 63 63 75 72 20 62  des that occur b
121e0 65 74 77 65 65 6e 20 74 68 65 20 70 32 20 6a 75  etween the p2 ju
121f0 6d 70 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 61  mp destination a
12200 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 0a 2a 2a  nd the opcode.**
12210 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 62 79         itself by
12220 20 32 20 73 70 61 63 65 73 2e 0a 2a 2a 0a 2a 2a   2 spaces..**.**
12230 20 20 20 20 20 2a 20 46 6f 72 20 65 61 63 68 20       * For each 
12240 22 47 6f 74 6f 22 2c 20 69 66 20 74 68 65 20 6a  "Goto", if the j
12250 75 6d 70 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  ump destination 
12260 69 73 20 65 61 72 6c 69 65 72 20 69 6e 20 74 68  is earlier in th
12270 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 20 20 20  e program.**    
12280 20 20 20 61 6e 64 20 65 6e 64 73 20 6f 6e 20 6f     and ends on o
12290 6e 65 20 6f 66 3a 0a 2a 2a 20 20 20 20 20 20 20  ne of:.**       
122a0 20 20 20 59 69 65 6c 64 20 20 53 65 65 6b 47 74     Yield  SeekGt
122b0 20 20 53 65 65 6b 4c 74 20 20 52 6f 77 53 65 74    SeekLt  RowSet
122c0 52 65 61 64 20 20 52 65 77 69 6e 64 0a 2a 2a 20  Read  Rewind.** 
122d0 20 20 20 20 20 20 6f 72 20 69 66 20 74 68 65 20        or if the 
122e0 50 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P1 parameter is 
122f0 6f 6e 65 20 69 6e 73 74 65 61 64 20 6f 66 20 7a  one instead of z
12300 65 72 6f 2c 0a 2a 2a 20 20 20 20 20 20 20 74 68  ero,.**       th
12310 65 6e 20 69 6e 64 65 6e 74 20 61 6c 6c 20 6f 70  en indent all op
12320 63 6f 64 65 73 20 62 65 74 77 65 65 6e 20 74 68  codes between th
12330 65 20 65 61 72 6c 69 65 72 20 69 6e 73 74 72 75  e earlier instru
12340 63 74 69 6f 6e 0a 2a 2a 20 20 20 20 20 20 20 61  ction.**       a
12350 6e 64 20 22 47 6f 74 6f 22 20 62 79 20 32 20 73  nd "Goto" by 2 s
12360 70 61 63 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63  paces..*/.static
12370 20 76 6f 69 64 20 65 78 70 6c 61 69 6e 5f 64 61   void explain_da
12380 74 61 5f 70 72 65 70 61 72 65 28 53 68 65 6c 6c  ta_prepare(Shell
12390 53 74 61 74 65 20 2a 70 2c 20 73 71 6c 69 74 65  State *p, sqlite
123a0 33 5f 73 74 6d 74 20 2a 70 53 71 6c 29 7b 0a 20  3_stmt *pSql){. 
123b0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71   const char *zSq
123c0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
123d0 20 2f 2a 20 54 68 65 20 74 65 78 74 20 6f 66 20   /* The text of 
123e0 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
123f0 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
12400 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 20 20 20  r *z;           
12410 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74         /* Used t
12420 6f 20 63 68 65 63 6b 20 69 66 20 74 68 69 73 20  o check if this 
12430 69 73 20 61 6e 20 45 58 50 4c 41 49 4e 20 2a 2f  is an EXPLAIN */
12440 0a 20 20 69 6e 74 20 2a 61 62 59 69 65 6c 64 20  .  int *abYield 
12450 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
12460 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 70     /* True if op
12470 20 69 73 20 61 6e 20 4f 50 5f 59 69 65 6c 64 20   is an OP_Yield 
12480 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 20  */.  int nAlloc 
12490 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
124a0 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
124b0 64 20 73 69 7a 65 20 6f 66 20 70 2d 3e 61 69 49  d size of p->aiI
124c0 6e 64 65 6e 74 5b 5d 2c 20 61 62 59 69 65 6c 64  ndent[], abYield
124d0 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 70 3b 20 20   */.  int iOp;  
124e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124f0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
12500 66 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  f operation in p
12510 2d 3e 61 69 49 6e 64 65 6e 74 5b 5d 20 2a 2f 0a  ->aiIndent[] */.
12520 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  .  const char *a
12530 7a 4e 65 78 74 5b 5d 20 3d 20 7b 20 22 4e 65 78  zNext[] = { "Nex
12540 74 22 2c 20 22 50 72 65 76 22 2c 20 22 56 50 72  t", "Prev", "VPr
12550 65 76 22 2c 20 22 56 4e 65 78 74 22 2c 20 22 53  ev", "VNext", "S
12560 6f 72 74 65 72 4e 65 78 74 22 2c 0a 20 20 20 20  orterNext",.    
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12580 20 20 20 20 20 20 20 22 4e 65 78 74 49 66 4f 70         "NextIfOp
12590 65 6e 22 2c 20 22 50 72 65 76 49 66 4f 70 65 6e  en", "PrevIfOpen
125a0 22 2c 20 30 20 7d 3b 0a 20 20 63 6f 6e 73 74 20  ", 0 };.  const 
125b0 63 68 61 72 20 2a 61 7a 59 69 65 6c 64 5b 5d 20  char *azYield[] 
125c0 3d 20 7b 20 22 59 69 65 6c 64 22 2c 20 22 53 65  = { "Yield", "Se
125d0 65 6b 4c 54 22 2c 20 22 53 65 65 6b 47 54 22 2c  ekLT", "SeekGT",
125e0 20 22 52 6f 77 53 65 74 52 65 61 64 22 2c 0a 20   "RowSetRead",. 
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12600 20 20 20 20 20 20 20 20 20 20 20 22 52 65 77 69             "Rewi
12610 6e 64 22 2c 20 30 20 7d 3b 0a 20 20 63 6f 6e 73  nd", 0 };.  cons
12620 74 20 63 68 61 72 20 2a 61 7a 47 6f 74 6f 5b 5d  t char *azGoto[]
12630 20 3d 20 7b 20 22 47 6f 74 6f 22 2c 20 30 20 7d   = { "Goto", 0 }
12640 3b 0a 0a 20 20 2f 2a 20 54 72 79 20 74 6f 20 66  ;..  /* Try to f
12650 69 67 75 72 65 20 6f 75 74 20 69 66 20 74 68 69  igure out if thi
12660 73 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 45  s is really an E
12670 58 50 4c 41 49 4e 20 73 74 61 74 65 6d 65 6e 74  XPLAIN statement
12680 2e 20 49 66 20 74 68 69 73 0a 20 20 2a 2a 20 63  . If this.  ** c
12690 61 6e 6e 6f 74 20 62 65 20 76 65 72 69 66 69 65  annot be verifie
126a0 64 2c 20 72 65 74 75 72 6e 20 65 61 72 6c 79 2e  d, return early.
126b0 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
126c0 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
126d0 70 53 71 6c 29 21 3d 38 20 29 7b 0a 20 20 20 20  pSql)!=8 ){.    
126e0 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f  p->cMode = p->mo
126f0 64 65 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a  de;.    return;.
12700 20 20 7d 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c    }.  zSql = sql
12710 69 74 65 33 5f 73 71 6c 28 70 53 71 6c 29 3b 0a  ite3_sql(pSql);.
12720 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 20    if( zSql==0 ) 
12730 72 65 74 75 72 6e 3b 0a 20 20 66 6f 72 28 7a 3d  return;.  for(z=
12740 7a 53 71 6c 3b 20 2a 7a 3d 3d 27 20 27 20 7c 7c  zSql; *z==' ' ||
12750 20 2a 7a 3d 3d 27 5c 74 27 20 7c 7c 20 2a 7a 3d   *z=='\t' || *z=
12760 3d 27 5c 6e 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 66  ='\n' || *z=='\f
12770 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 72 27 3b 20 7a  ' || *z=='\r'; z
12780 2b 2b 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  ++);.  if( sqlit
12790 65 33 5f 73 74 72 6e 69 63 6d 70 28 7a 2c 20 22  e3_strnicmp(z, "
127a0 65 78 70 6c 61 69 6e 22 2c 20 37 29 20 29 7b 0a  explain", 7) ){.
127b0 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70      p->cMode = p
127c0 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 72 65 74 75  ->mode;.    retu
127d0 72 6e 3b 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 69  rn;.  }..  for(i
127e0 4f 70 3d 30 3b 20 53 51 4c 49 54 45 5f 52 4f 57  Op=0; SQLITE_ROW
127f0 3d 3d 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ==sqlite3_step(p
12800 53 71 6c 29 3b 20 69 4f 70 2b 2b 29 7b 0a 20 20  Sql); iOp++){.  
12810 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74    int i;.    int
12820 20 69 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33   iAddr = sqlite3
12830 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71 6c  _column_int(pSql
12840 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20  , 0);.    const 
12850 63 68 61 72 20 2a 7a 4f 70 20 3d 20 28 63 6f 6e  char *zOp = (con
12860 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
12870 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71  _column_text(pSq
12880 6c 2c 20 31 29 3b 0a 0a 20 20 20 20 2f 2a 20 53  l, 1);..    /* S
12890 65 74 20 70 32 20 74 6f 20 74 68 65 20 50 32 20  et p2 to the P2 
128a0 66 69 65 6c 64 20 6f 66 20 74 68 65 20 63 75 72  field of the cur
128b0 72 65 6e 74 20 6f 70 63 6f 64 65 2e 20 54 68 65  rent opcode. The
128c0 6e 2c 20 61 73 73 75 6d 69 6e 67 20 74 68 61 74  n, assuming that
128d0 0a 20 20 20 20 2a 2a 20 70 32 20 69 73 20 61 6e  .    ** p2 is an
128e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 64 64   instruction add
128f0 72 65 73 73 2c 20 73 65 74 20 76 61 72 69 61 62  ress, set variab
12900 6c 65 20 70 32 6f 70 20 74 6f 20 74 68 65 20 69  le p2op to the i
12910 6e 64 65 78 20 6f 66 20 74 68 61 74 0a 20 20 20  ndex of that.   
12920 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   ** instruction 
12930 69 6e 20 74 68 65 20 61 69 49 6e 64 65 6e 74 5b  in the aiIndent[
12940 5d 20 61 72 72 61 79 2e 20 70 32 20 61 6e 64 20  ] array. p2 and 
12950 70 32 6f 70 20 6d 61 79 20 62 65 20 64 69 66 66  p2op may be diff
12960 65 72 65 6e 74 20 69 66 0a 20 20 20 20 2a 2a 20  erent if.    ** 
12970 74 68 65 20 63 75 72 72 65 6e 74 20 69 6e 73 74  the current inst
12980 72 75 63 74 69 6f 6e 20 69 73 20 70 61 72 74 20  ruction is part 
12990 6f 66 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  of a sub-program
129a0 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 61 6e   generated by an
129b0 0a 20 20 20 20 2a 2a 20 53 51 4c 20 74 72 69 67  .    ** SQL trig
129c0 67 65 72 20 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ger or foreign k
129d0 65 79 2e 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ey.  */.    int 
129e0 70 32 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  p2 = sqlite3_col
129f0 75 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 33 29  umn_int(pSql, 3)
12a00 3b 0a 20 20 20 20 69 6e 74 20 70 32 6f 70 20 3d  ;.    int p2op =
12a10 20 28 70 32 20 2b 20 28 69 4f 70 2d 69 41 64 64   (p2 + (iOp-iAdd
12a20 72 29 29 3b 0a 0a 20 20 20 20 2f 2a 20 47 72 6f  r));..    /* Gro
12a30 77 20 74 68 65 20 70 2d 3e 61 69 49 6e 64 65 6e  w the p->aiInden
12a40 74 20 61 72 72 61 79 20 61 73 20 72 65 71 75 69  t array as requi
12a50 72 65 64 20 2a 2f 0a 20 20 20 20 69 66 28 20 69  red */.    if( i
12a60 4f 70 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20  Op>=nAlloc ){.  
12a70 20 20 20 20 69 66 28 20 69 4f 70 3d 3d 30 20 29      if( iOp==0 )
12a80 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20  {.        /* Do 
12a90 66 75 72 74 68 65 72 20 76 65 72 66 69 63 61 74  further verficat
12aa0 69 6f 6e 20 74 68 61 74 20 74 68 69 73 20 69 73  ion that this is
12ab0 20 65 78 70 6c 61 69 6e 20 6f 75 74 70 75 74 2e   explain output.
12ac0 20 20 41 62 6f 72 74 20 69 66 0a 20 20 20 20 20    Abort if.     
12ad0 20 20 20 2a 2a 20 69 74 20 69 73 20 6e 6f 74 20     ** it is not 
12ae0 2a 2f 0a 20 20 20 20 20 20 20 20 73 74 61 74 69  */.        stati
12af0 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 65 78  c const char *ex
12b00 70 6c 61 69 6e 43 6f 6c 73 5b 5d 20 3d 20 7b 0a  plainCols[] = {.
12b10 20 20 20 20 20 20 20 20 20 20 20 22 61 64 64 72             "addr
12b20 22 2c 20 22 6f 70 63 6f 64 65 22 2c 20 22 70 31  ", "opcode", "p1
12b30 22 2c 20 22 70 32 22 2c 20 22 70 33 22 2c 20 22  ", "p2", "p3", "
12b40 70 34 22 2c 20 22 70 35 22 2c 20 22 63 6f 6d 6d  p4", "p5", "comm
12b50 65 6e 74 22 20 7d 3b 0a 20 20 20 20 20 20 20 20  ent" };.        
12b60 69 6e 74 20 6a 6a 3b 0a 20 20 20 20 20 20 20 20  int jj;.        
12b70 66 6f 72 28 6a 6a 3d 30 3b 20 6a 6a 3c 41 72 72  for(jj=0; jj<Arr
12b80 61 79 53 69 7a 65 28 65 78 70 6c 61 69 6e 43 6f  aySize(explainCo
12b90 6c 73 29 3b 20 6a 6a 2b 2b 29 7b 0a 20 20 20 20  ls); jj++){.    
12ba0 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70        if( strcmp
12bb0 28 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  (sqlite3_column_
12bc0 6e 61 6d 65 28 70 53 71 6c 2c 6a 6a 29 2c 65 78  name(pSql,jj),ex
12bd0 70 6c 61 69 6e 43 6f 6c 73 5b 6a 6a 5d 29 21 3d  plainCols[jj])!=
12be0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
12bf0 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d   p->cMode = p->m
12c00 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ode;.           
12c10 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70   sqlite3_reset(p
12c20 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Sql);.          
12c30 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20    return;.      
12c40 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
12c50 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 41        }.      nA
12c60 6c 6c 6f 63 20 2b 3d 20 31 30 30 3b 0a 20 20 20  lloc += 100;.   
12c70 20 20 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20 3d     p->aiIndent =
12c80 20 28 69 6e 74 2a 29 73 71 6c 69 74 65 33 5f 72   (int*)sqlite3_r
12c90 65 61 6c 6c 6f 63 36 34 28 70 2d 3e 61 69 49 6e  ealloc64(p->aiIn
12ca0 64 65 6e 74 2c 20 6e 41 6c 6c 6f 63 2a 73 69 7a  dent, nAlloc*siz
12cb0 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20  eof(int));.     
12cc0 20 61 62 59 69 65 6c 64 20 3d 20 28 69 6e 74 2a   abYield = (int*
12cd0 29 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63  )sqlite3_realloc
12ce0 36 34 28 61 62 59 69 65 6c 64 2c 20 6e 41 6c 6c  64(abYield, nAll
12cf0 6f 63 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b  oc*sizeof(int));
12d00 0a 20 20 20 20 7d 0a 20 20 20 20 61 62 59 69 65  .    }.    abYie
12d10 6c 64 5b 69 4f 70 5d 20 3d 20 73 74 72 5f 69 6e  ld[iOp] = str_in
12d20 5f 61 72 72 61 79 28 7a 4f 70 2c 20 61 7a 59 69  _array(zOp, azYi
12d30 65 6c 64 29 3b 0a 20 20 20 20 70 2d 3e 61 69 49  eld);.    p->aiI
12d40 6e 64 65 6e 74 5b 69 4f 70 5d 20 3d 20 30 3b 0a  ndent[iOp] = 0;.
12d50 20 20 20 20 70 2d 3e 6e 49 6e 64 65 6e 74 20 3d      p->nIndent =
12d60 20 69 4f 70 2b 31 3b 0a 0a 20 20 20 20 69 66 28   iOp+1;..    if(
12d70 20 73 74 72 5f 69 6e 5f 61 72 72 61 79 28 7a 4f   str_in_array(zO
12d80 70 2c 20 61 7a 4e 65 78 74 29 20 29 7b 0a 20 20  p, azNext) ){.  
12d90 20 20 20 20 66 6f 72 28 69 3d 70 32 6f 70 3b 20      for(i=p2op; 
12da0 69 3c 69 4f 70 3b 20 69 2b 2b 29 20 70 2d 3e 61  i<iOp; i++) p->a
12db0 69 49 6e 64 65 6e 74 5b 69 5d 20 2b 3d 20 32 3b  iIndent[i] += 2;
12dc0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
12dd0 74 72 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c  tr_in_array(zOp,
12de0 20 61 7a 47 6f 74 6f 29 20 26 26 20 70 32 6f 70   azGoto) && p2op
12df0 3c 70 2d 3e 6e 49 6e 64 65 6e 74 0a 20 20 20 20  <p->nIndent.    
12e00 20 26 26 20 28 61 62 59 69 65 6c 64 5b 70 32 6f   && (abYield[p2o
12e10 70 5d 20 7c 7c 20 73 71 6c 69 74 65 33 5f 63 6f  p] || sqlite3_co
12e20 6c 75 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 32  lumn_int(pSql, 2
12e30 29 29 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  )).    ){.      
12e40 66 6f 72 28 69 3d 70 32 6f 70 3b 20 69 3c 69 4f  for(i=p2op; i<iO
12e50 70 3b 20 69 2b 2b 29 20 70 2d 3e 61 69 49 6e 64  p; i++) p->aiInd
12e60 65 6e 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20 20 20  ent[i] += 2;.   
12e70 20 7d 0a 20 20 7d 0a 0a 20 20 70 2d 3e 69 49 6e   }.  }..  p->iIn
12e80 64 65 6e 74 20 3d 20 30 3b 0a 20 20 73 71 6c 69  dent = 0;.  sqli
12e90 74 65 33 5f 66 72 65 65 28 61 62 59 69 65 6c 64  te3_free(abYield
12ea0 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  );.  sqlite3_res
12eb0 65 74 28 70 53 71 6c 29 3b 0a 7d 0a 0a 2f 2a 0a  et(pSql);.}../*.
12ec0 2a 2a 20 46 72 65 65 20 74 68 65 20 61 72 72 61  ** Free the arra
12ed0 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 65  y allocated by e
12ee0 78 70 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70  xplain_data_prep
12ef0 61 72 65 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  are()..*/.static
12f00 20 76 6f 69 64 20 65 78 70 6c 61 69 6e 5f 64 61   void explain_da
12f10 74 61 5f 64 65 6c 65 74 65 28 53 68 65 6c 6c 53  ta_delete(ShellS
12f20 74 61 74 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69  tate *p){.  sqli
12f30 74 65 33 5f 66 72 65 65 28 70 2d 3e 61 69 49 6e  te3_free(p->aiIn
12f40 64 65 6e 74 29 3b 0a 20 20 70 2d 3e 61 69 49 6e  dent);.  p->aiIn
12f50 64 65 6e 74 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e  dent = 0;.  p->n
12f60 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 20 20 70 2d  Indent = 0;.  p-
12f70 3e 69 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 7d 0a  >iIndent = 0;.}.
12f80 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 61  ./*.** Disable a
12f90 6e 64 20 72 65 73 74 6f 72 65 20 2e 77 68 65 72  nd restore .wher
12fa0 65 74 72 61 63 65 20 61 6e 64 20 2e 73 65 6c 65  etrace and .sele
12fb0 63 74 74 72 61 63 65 20 73 65 74 74 69 6e 67 73  cttrace settings
12fc0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
12fd0 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
12fe0 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
12ff0 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52  _ENABLE_SELECTTR
13000 41 43 45 29 0a 65 78 74 65 72 6e 20 69 6e 74 20  ACE).extern int 
13010 73 71 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61  sqlite3SelectTra
13020 63 65 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 73  ce;.static int s
13030 61 76 65 64 53 65 6c 65 63 74 54 72 61 63 65 3b  avedSelectTrace;
13040 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
13050 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
13060 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
13070 49 54 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45  ITE_ENABLE_WHERE
13080 54 52 41 43 45 29 0a 65 78 74 65 72 6e 20 69 6e  TRACE).extern in
13090 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 54 72  t sqlite3WhereTr
130a0 61 63 65 3b 0a 73 74 61 74 69 63 20 69 6e 74 20  ace;.static int 
130b0 73 61 76 65 64 57 68 65 72 65 54 72 61 63 65 3b  savedWhereTrace;
130c0 0a 23 65 6e 64 69 66 0a 73 74 61 74 69 63 20 76  .#endif.static v
130d0 6f 69 64 20 64 69 73 61 62 6c 65 5f 64 65 62 75  oid disable_debu
130e0 67 5f 74 72 61 63 65 5f 6d 6f 64 65 73 28 76 6f  g_trace_modes(vo
130f0 69 64 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64  id){.#if defined
13100 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
13110 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
13120 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52  _ENABLE_SELECTTR
13130 41 43 45 29 0a 20 20 73 61 76 65 64 53 65 6c 65  ACE).  savedSele
13140 63 74 54 72 61 63 65 20 3d 20 73 71 6c 69 74 65  ctTrace = sqlite
13150 33 53 65 6c 65 63 74 54 72 61 63 65 3b 0a 20 20  3SelectTrace;.  
13160 73 71 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61  sqlite3SelectTra
13170 63 65 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 23  ce = 0;.#endif.#
13180 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
13190 45 5f 44 45 42 55 47 29 20 26 26 20 64 65 66 69  E_DEBUG) && defi
131a0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
131b0 45 5f 57 48 45 52 45 54 52 41 43 45 29 0a 20 20  E_WHERETRACE).  
131c0 73 61 76 65 64 57 68 65 72 65 54 72 61 63 65 20  savedWhereTrace 
131d0 3d 20 73 71 6c 69 74 65 33 57 68 65 72 65 54 72  = sqlite3WhereTr
131e0 61 63 65 3b 0a 20 20 73 71 6c 69 74 65 33 57 68  ace;.  sqlite3Wh
131f0 65 72 65 54 72 61 63 65 20 3d 20 30 3b 0a 23 65  ereTrace = 0;.#e
13200 6e 64 69 66 0a 7d 0a 73 74 61 74 69 63 20 76 6f  ndif.}.static vo
13210 69 64 20 72 65 73 74 6f 72 65 5f 64 65 62 75 67  id restore_debug
13220 5f 74 72 61 63 65 5f 6d 6f 64 65 73 28 76 6f 69  _trace_modes(voi
13230 64 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  d){.#if defined(
13240 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
13250 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
13260 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
13270 43 45 29 0a 20 20 73 71 6c 69 74 65 33 53 65 6c  CE).  sqlite3Sel
13280 65 63 74 54 72 61 63 65 20 3d 20 73 61 76 65 64  ectTrace = saved
13290 53 65 6c 65 63 74 54 72 61 63 65 3b 0a 23 65 6e  SelectTrace;.#en
132a0 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
132b0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
132c0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
132d0 45 4e 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43  ENABLE_WHERETRAC
132e0 45 29 0a 20 20 73 71 6c 69 74 65 33 57 68 65 72  E).  sqlite3Wher
132f0 65 54 72 61 63 65 20 3d 20 73 61 76 65 64 57 68  eTrace = savedWh
13300 65 72 65 54 72 61 63 65 3b 0a 23 65 6e 64 69 66  ereTrace;.#endif
13310 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 61 20  .}../*.** Run a 
13320 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
13330 6e 74 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  nt.*/.static voi
13340 64 20 65 78 65 63 5f 70 72 65 70 61 72 65 64 5f  d exec_prepared_
13350 73 74 6d 74 28 0a 20 20 53 68 65 6c 6c 53 74 61  stmt(.  ShellSta
13360 74 65 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20  te *pArg,       
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13380 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
13390 74 65 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74  ter to ShellStat
133a0 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73  e */.  sqlite3_s
133b0 74 6d 74 20 2a 70 53 74 6d 74 20 20 20 20 20 20  tmt *pStmt      
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 6d          /* Statm
133e0 65 6e 74 20 74 6f 20 72 75 6e 20 2a 2f 0a 29 7b  ent to run */.){
133f0 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 2f 2a  .  int rc;..  /*
13400 20 70 65 72 66 6f 72 6d 20 74 68 65 20 66 69 72   perform the fir
13410 73 74 20 73 74 65 70 2e 20 20 74 68 69 73 20 77  st step.  this w
13420 69 6c 6c 20 74 65 6c 6c 20 75 73 20 69 66 20 77  ill tell us if w
13430 65 0a 20 20 2a 2a 20 68 61 76 65 20 61 20 72 65  e.  ** have a re
13440 73 75 6c 74 20 73 65 74 20 6f 72 20 6e 6f 74 20  sult set or not 
13450 61 6e 64 20 68 6f 77 20 77 69 64 65 20 69 74 20  and how wide it 
13460 69 73 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20  is..  */.  rc = 
13470 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
13480 6d 74 29 3b 0a 20 20 2f 2a 20 69 66 20 77 65 20  mt);.  /* if we 
13490 68 61 76 65 20 61 20 72 65 73 75 6c 74 20 73 65  have a result se
134a0 74 2e 2e 2e 20 2a 2f 0a 20 20 69 66 28 20 53 51  t... */.  if( SQ
134b0 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29  LITE_ROW == rc )
134c0 7b 0a 20 20 20 20 2f 2a 20 61 6c 6c 6f 63 61 74  {.    /* allocat
134d0 65 20 73 70 61 63 65 20 66 6f 72 20 63 6f 6c 20  e space for col 
134e0 6e 61 6d 65 20 70 74 72 2c 20 76 61 6c 75 65 20  name ptr, value 
134f0 70 74 72 2c 20 61 6e 64 20 74 79 70 65 20 2a 2f  ptr, and type */
13500 0a 20 20 20 20 69 6e 74 20 6e 43 6f 6c 20 3d 20  .    int nCol = 
13510 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
13520 6f 75 6e 74 28 70 53 74 6d 74 29 3b 0a 20 20 20  ount(pStmt);.   
13530 20 76 6f 69 64 20 2a 70 44 61 74 61 20 3d 20 73   void *pData = s
13540 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28  qlite3_malloc64(
13550 33 2a 6e 43 6f 6c 2a 73 69 7a 65 6f 66 28 63 6f  3*nCol*sizeof(co
13560 6e 73 74 20 63 68 61 72 2a 29 20 2b 20 31 29 3b  nst char*) + 1);
13570 0a 20 20 20 20 69 66 28 20 21 70 44 61 74 61 20  .    if( !pData 
13580 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
13590 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20  LITE_NOMEM;.    
135a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61  }else{.      cha
135b0 72 20 2a 2a 61 7a 43 6f 6c 73 20 3d 20 28 63 68  r **azCols = (ch
135c0 61 72 20 2a 2a 29 70 44 61 74 61 3b 20 20 20 20  ar **)pData;    
135d0 20 20 2f 2a 20 4e 61 6d 65 73 20 6f 66 20 72 65    /* Names of re
135e0 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  sult columns */.
135f0 20 20 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 56        char **azV
13600 61 6c 73 20 3d 20 26 61 7a 43 6f 6c 73 5b 6e 43  als = &azCols[nC
13610 6f 6c 5d 3b 20 20 20 20 20 20 20 2f 2a 20 52 65  ol];       /* Re
13620 73 75 6c 74 73 20 2a 2f 0a 20 20 20 20 20 20 69  sults */.      i
13630 6e 74 20 2a 61 69 54 79 70 65 73 20 3d 20 28 69  nt *aiTypes = (i
13640 6e 74 20 2a 29 26 61 7a 56 61 6c 73 5b 6e 43 6f  nt *)&azVals[nCo
13650 6c 5d 3b 20 2f 2a 20 52 65 73 75 6c 74 20 74 79  l]; /* Result ty
13660 70 65 73 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74  pes */.      int
13670 20 69 2c 20 78 3b 0a 20 20 20 20 20 20 61 73 73   i, x;.      ass
13680 65 72 74 28 73 69 7a 65 6f 66 28 69 6e 74 29 20  ert(sizeof(int) 
13690 3c 3d 20 73 69 7a 65 6f 66 28 63 68 61 72 20 2a  <= sizeof(char *
136a0 29 29 3b 0a 20 20 20 20 20 20 2f 2a 20 73 61 76  ));.      /* sav
136b0 65 20 6f 66 66 20 70 74 72 73 20 74 6f 20 63 6f  e off ptrs to co
136c0 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  lumn names */.  
136d0 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
136e0 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Col; i++){.     
136f0 20 20 20 61 7a 43 6f 6c 73 5b 69 5d 20 3d 20 28     azCols[i] = (
13700 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 5f 63  char *)sqlite3_c
13710 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 70 53 74 6d 74  olumn_name(pStmt
13720 2c 20 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , i);.      }.  
13730 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
13740 2f 2a 20 65 78 74 72 61 63 74 20 74 68 65 20 64  /* extract the d
13750 61 74 61 20 61 6e 64 20 64 61 74 61 20 74 79 70  ata and data typ
13760 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f  es */.        fo
13770 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69  r(i=0; i<nCol; i
13780 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  ++){.          a
13790 69 54 79 70 65 73 5b 69 5d 20 3d 20 78 20 3d 20  iTypes[i] = x = 
137a0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
137b0 79 70 65 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20  ype(pStmt, i);. 
137c0 20 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d           if( x==
137d0 53 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20 70  SQLITE_BLOB && p
137e0 41 72 67 20 26 26 20 70 41 72 67 2d 3e 63 4d 6f  Arg && pArg->cMo
137f0 64 65 3d 3d 4d 4f 44 45 5f 49 6e 73 65 72 74 20  de==MODE_Insert 
13800 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 61  ){.            a
13810 7a 56 61 6c 73 5b 69 5d 20 3d 20 22 22 3b 0a 20  zVals[i] = "";. 
13820 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
13830 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 56 61              azVa
13840 6c 73 5b 69 5d 20 3d 20 28 63 68 61 72 2a 29 73  ls[i] = (char*)s
13850 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
13860 78 74 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20  xt(pStmt, i);.  
13870 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
13880 20 20 20 20 69 66 28 20 21 61 7a 56 61 6c 73 5b      if( !azVals[
13890 69 5d 20 26 26 20 28 61 69 54 79 70 65 73 5b 69  i] && (aiTypes[i
138a0 5d 21 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 29 20  ]!=SQLITE_NULL) 
138b0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ){.            r
138c0 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
138d0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
138e0 65 61 6b 3b 20 2f 2a 20 66 72 6f 6d 20 66 6f 72  eak; /* from for
138f0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   */.          }.
13900 20 20 20 20 20 20 20 20 7d 20 2f 2a 20 65 6e 64          } /* end
13910 20 66 6f 72 20 2a 2f 0a 0a 20 20 20 20 20 20 20   for */..       
13920 20 2f 2a 20 69 66 20 64 61 74 61 20 61 6e 64 20   /* if data and 
13930 74 79 70 65 73 20 65 78 74 72 61 63 74 65 64 20  types extracted 
13940 73 75 63 63 65 73 73 66 75 6c 6c 79 2e 2e 2e 20  successfully... 
13950 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 53  */.        if( S
13960 51 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20  QLITE_ROW == rc 
13970 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
13980 63 61 6c 6c 20 74 68 65 20 73 75 70 70 6c 69 65  call the supplie
13990 64 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20  d callback with 
139a0 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 64  the result row d
139b0 61 74 61 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ata */.         
139c0 20 69 66 28 20 73 68 65 6c 6c 5f 63 61 6c 6c 62   if( shell_callb
139d0 61 63 6b 28 70 41 72 67 2c 20 6e 43 6f 6c 2c 20  ack(pArg, nCol, 
139e0 61 7a 56 61 6c 73 2c 20 61 7a 43 6f 6c 73 2c 20  azVals, azCols, 
139f0 61 69 54 79 70 65 73 29 20 29 7b 0a 20 20 20 20  aiTypes) ){.    
13a00 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
13a10 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 20  ITE_ABORT;.     
13a20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
13a30 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
13a40 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
13a50 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
13a60 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
13a70 77 68 69 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f  while( SQLITE_RO
13a80 57 20 3d 3d 20 72 63 20 29 3b 0a 20 20 20 20 20  W == rc );.     
13a90 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 44   sqlite3_free(pD
13aa0 61 74 61 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ata);.    }.  }.
13ab0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
13ac0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
13ad0 42 4c 45 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BLE./*.** This f
13ae0 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
13af0 64 20 74 6f 20 70 72 6f 63 65 73 73 20 53 51 4c  d to process SQL
13b00 20 69 66 20 74 68 65 20 70 72 65 76 69 6f 75 73   if the previous
13b10 20 73 68 65 6c 6c 20 63 6f 6d 6d 61 6e 64 0a 2a   shell command.*
13b20 2a 20 77 61 73 20 22 2e 65 78 70 65 72 74 22 2e  * was ".expert".
13b30 20 49 74 20 70 61 73 73 65 73 20 74 68 65 20 53   It passes the S
13b40 51 4c 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64  QL in the second
13b50 20 61 72 67 75 6d 65 6e 74 20 64 69 72 65 63 74   argument direct
13b60 6c 79 20 74 6f 0a 2a 2a 20 74 68 65 20 73 71 6c  ly to.** the sql
13b70 69 74 65 33 65 78 70 65 72 74 20 6f 62 6a 65 63  ite3expert objec
13b80 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 73 75 63 63  t..**.** If succ
13b90 65 73 73 66 75 6c 2c 20 53 51 4c 49 54 45 5f 4f  essful, SQLITE_O
13ba0 4b 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 4f  K is returned. O
13bb0 74 68 65 72 77 69 73 65 2c 20 61 6e 20 53 51 4c  therwise, an SQL
13bc0 69 74 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64  ite error.** cod
13bd0 65 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  e. In this case,
13be0 20 28 2a 70 7a 45 72 72 29 20 6d 61 79 20 62 65   (*pzErr) may be
13bf0 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
13c00 20 61 20 62 75 66 66 65 72 20 63 6f 6e 74 61 69   a buffer contai
13c10 6e 69 6e 67 0a 2a 2a 20 61 6e 20 45 6e 67 6c 69  ning.** an Engli
13c20 73 68 20 6c 61 6e 67 75 61 67 65 20 65 72 72 6f  sh language erro
13c30 72 20 6d 65 73 73 61 67 65 2e 20 49 74 20 69 73  r message. It is
13c40 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69 6c   the responsibil
13c50 69 74 79 20 6f 66 20 74 68 65 0a 2a 2a 20 63 61  ity of the.** ca
13c60 6c 6c 65 72 20 74 6f 20 65 76 65 6e 74 75 61 6c  ller to eventual
13c70 6c 79 20 66 72 65 65 20 74 68 69 73 20 62 75 66  ly free this buf
13c80 66 65 72 20 75 73 69 6e 67 20 73 71 6c 69 74 65  fer using sqlite
13c90 33 5f 66 72 65 65 28 29 2e 0a 2a 2f 0a 73 74 61  3_free()..*/.sta
13ca0 74 69 63 20 69 6e 74 20 65 78 70 65 72 74 48 61  tic int expertHa
13cb0 6e 64 6c 65 53 51 4c 28 0a 20 20 53 68 65 6c 6c  ndleSQL(.  Shell
13cc0 53 74 61 74 65 20 2a 70 53 74 61 74 65 2c 20 0a  State *pState, .
13cd0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
13ce0 71 6c 2c 20 0a 20 20 63 68 61 72 20 2a 2a 70 7a  ql, .  char **pz
13cf0 45 72 72 0a 29 7b 0a 20 20 61 73 73 65 72 74 28  Err.){.  assert(
13d00 20 70 53 74 61 74 65 2d 3e 65 78 70 65 72 74 2e   pState->expert.
13d10 70 45 78 70 65 72 74 20 29 3b 0a 20 20 61 73 73  pExpert );.  ass
13d20 65 72 74 28 20 70 7a 45 72 72 3d 3d 30 20 7c 7c  ert( pzErr==0 ||
13d30 20 2a 70 7a 45 72 72 3d 3d 30 20 29 3b 0a 20 20   *pzErr==0 );.  
13d40 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 65  return sqlite3_e
13d50 78 70 65 72 74 5f 73 71 6c 28 70 53 74 61 74 65  xpert_sql(pState
13d60 2d 3e 65 78 70 65 72 74 2e 70 45 78 70 65 72 74  ->expert.pExpert
13d70 2c 20 7a 53 71 6c 2c 20 70 7a 45 72 72 29 3b 0a  , zSql, pzErr);.
13d80 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75  }../*.** This fu
13d90 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
13da0 20 65 69 74 68 65 72 20 74 6f 20 73 69 6c 65 6e   either to silen
13db0 74 6c 79 20 63 6c 65 61 6e 20 75 70 20 74 68 65  tly clean up the
13dc0 20 6f 62 6a 65 63 74 0a 2a 2a 20 63 72 65 61 74   object.** creat
13dd0 65 64 20 62 79 20 74 68 65 20 22 2e 65 78 70 65  ed by the ".expe
13de0 72 74 22 20 63 6f 6d 6d 61 6e 64 20 28 69 66 20  rt" command (if 
13df0 62 43 61 6e 63 65 6c 3d 3d 31 29 2c 20 6f 72 20  bCancel==1), or 
13e00 74 6f 20 67 65 6e 65 72 61 74 65 20 61 20 0a 2a  to generate a .*
13e10 2a 20 72 65 70 6f 72 74 20 66 72 6f 6d 20 69 74  * report from it
13e20 20 61 6e 64 20 74 68 65 6e 20 63 6c 65 61 6e 20   and then clean 
13e30 69 74 20 75 70 20 28 69 66 20 62 43 61 6e 63 65  it up (if bCance
13e40 6c 3d 3d 30 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  l==0)..**.** If 
13e50 73 75 63 63 65 73 73 66 75 6c 2c 20 53 51 4c 49  successful, SQLI
13e60 54 45 5f 4f 4b 20 69 73 20 72 65 74 75 72 6e 65  TE_OK is returne
13e70 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 61 6e  d. Otherwise, an
13e80 20 53 51 4c 69 74 65 20 65 72 72 6f 72 0a 2a 2a   SQLite error.**
13e90 20 63 6f 64 65 2e 20 49 6e 20 74 68 69 73 20 63   code. In this c
13ea0 61 73 65 2c 20 28 2a 70 7a 45 72 72 29 20 6d 61  ase, (*pzErr) ma
13eb0 79 20 62 65 20 73 65 74 20 74 6f 20 70 6f 69 6e  y be set to poin
13ec0 74 20 74 6f 20 61 20 62 75 66 66 65 72 20 63 6f  t to a buffer co
13ed0 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 61 6e 20 45  ntaining.** an E
13ee0 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
13ef0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 49  error message. I
13f00 74 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73  t is the respons
13f10 69 62 69 6c 69 74 79 20 6f 66 20 74 68 65 0a 2a  ibility of the.*
13f20 2a 20 63 61 6c 6c 65 72 20 74 6f 20 65 76 65 6e  * caller to even
13f30 74 75 61 6c 6c 79 20 66 72 65 65 20 74 68 69 73  tually free this
13f40 20 62 75 66 66 65 72 20 75 73 69 6e 67 20 73 71   buffer using sq
13f50 6c 69 74 65 33 5f 66 72 65 65 28 29 2e 0a 2a 2f  lite3_free()..*/
13f60 0a 73 74 61 74 69 63 20 69 6e 74 20 65 78 70 65  .static int expe
13f70 72 74 46 69 6e 69 73 68 28 0a 20 20 53 68 65 6c  rtFinish(.  Shel
13f80 6c 53 74 61 74 65 20 2a 70 53 74 61 74 65 2c 0a  lState *pState,.
13f90 20 20 69 6e 74 20 62 43 61 6e 63 65 6c 2c 0a 20    int bCancel,. 
13fa0 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 0a 29 7b   char **pzErr.){
13fb0 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
13fc0 54 45 5f 4f 4b 3b 0a 20 20 73 71 6c 69 74 65 33  TE_OK;.  sqlite3
13fd0 65 78 70 65 72 74 20 2a 70 20 3d 20 70 53 74 61  expert *p = pSta
13fe0 74 65 2d 3e 65 78 70 65 72 74 2e 70 45 78 70 65  te->expert.pExpe
13ff0 72 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 20  rt;.  assert( p 
14000 29 3b 0a 20 20 61 73 73 65 72 74 28 20 62 43 61  );.  assert( bCa
14010 6e 63 65 6c 20 7c 7c 20 70 7a 45 72 72 3d 3d 30  ncel || pzErr==0
14020 20 7c 7c 20 2a 70 7a 45 72 72 3d 3d 30 20 29 3b   || *pzErr==0 );
14030 0a 20 20 69 66 28 20 62 43 61 6e 63 65 6c 3d 3d  .  if( bCancel==
14040 30 20 29 7b 0a 20 20 20 20 46 49 4c 45 20 2a 6f  0 ){.    FILE *o
14050 75 74 20 3d 20 70 53 74 61 74 65 2d 3e 6f 75 74  ut = pState->out
14060 3b 0a 20 20 20 20 69 6e 74 20 62 56 65 72 62 6f  ;.    int bVerbo
14070 73 65 20 3d 20 70 53 74 61 74 65 2d 3e 65 78 70  se = pState->exp
14080 65 72 74 2e 62 56 65 72 62 6f 73 65 3b 0a 0a 20  ert.bVerbose;.. 
14090 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
140a0 65 78 70 65 72 74 5f 61 6e 61 6c 79 7a 65 28 70  expert_analyze(p
140b0 2c 20 70 7a 45 72 72 29 3b 0a 20 20 20 20 69 66  , pzErr);.    if
140c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
140d0 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 51 75  ){.      int nQu
140e0 65 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 65 78  ery = sqlite3_ex
140f0 70 65 72 74 5f 63 6f 75 6e 74 28 70 29 3b 0a 20  pert_count(p);. 
14100 20 20 20 20 20 69 6e 74 20 69 3b 0a 0a 20 20 20       int i;..   
14110 20 20 20 69 66 28 20 62 56 65 72 62 6f 73 65 20     if( bVerbose 
14120 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74  ){.        const
14130 20 63 68 61 72 20 2a 7a 43 61 6e 64 20 3d 20 73   char *zCand = s
14140 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f 72 65  qlite3_expert_re
14150 70 6f 72 74 28 70 2c 30 2c 45 58 50 45 52 54 5f  port(p,0,EXPERT_
14160 52 45 50 4f 52 54 5f 43 41 4e 44 49 44 41 54 45  REPORT_CANDIDATE
14170 53 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f  S);.        raw_
14180 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 2d 2d 20  printf(out, "-- 
14190 43 61 6e 64 69 64 61 74 65 73 20 2d 2d 2d 2d 2d  Candidates -----
141a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
141b0 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 20 20  --------\n");.  
141c0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
141d0 28 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 43  (out, "%s\n", zC
141e0 61 6e 64 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  and);.      }.  
141f0 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
14200 51 75 65 72 79 3b 20 69 2b 2b 29 7b 0a 20 20 20  Query; i++){.   
14210 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
14220 2a 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *zSql = sqlite3_
14230 65 78 70 65 72 74 5f 72 65 70 6f 72 74 28 70 2c  expert_report(p,
14240 20 69 2c 20 45 58 50 45 52 54 5f 52 45 50 4f 52   i, EXPERT_REPOR
14250 54 5f 53 51 4c 29 3b 0a 20 20 20 20 20 20 20 20  T_SQL);.        
14260 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 64 78  const char *zIdx
14270 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 70 65 72   = sqlite3_exper
14280 74 5f 72 65 70 6f 72 74 28 70 2c 20 69 2c 20 45  t_report(p, i, E
14290 58 50 45 52 54 5f 52 45 50 4f 52 54 5f 49 4e 44  XPERT_REPORT_IND
142a0 45 58 45 53 29 3b 0a 20 20 20 20 20 20 20 20 63  EXES);.        c
142b0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 51 50 20  onst char *zEQP 
142c0 3d 20 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74  = sqlite3_expert
142d0 5f 72 65 70 6f 72 74 28 70 2c 20 69 2c 20 45 58  _report(p, i, EX
142e0 50 45 52 54 5f 52 45 50 4f 52 54 5f 50 4c 41 4e  PERT_REPORT_PLAN
142f0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a  );.        if( z
14300 49 64 78 3d 3d 30 20 29 20 7a 49 64 78 20 3d 20  Idx==0 ) zIdx = 
14310 22 28 6e 6f 20 6e 65 77 20 69 6e 64 65 78 65 73  "(no new indexes
14320 29 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 69 66  )\n";.        if
14330 28 20 62 56 65 72 62 6f 73 65 20 29 7b 0a 20 20  ( bVerbose ){.  
14340 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
14350 74 66 28 6f 75 74 2c 20 22 2d 2d 20 51 75 65 72  tf(out, "-- Quer
14360 79 20 25 64 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  y %d -----------
14370 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14380 2d 2d 2d 2d 2d 5c 6e 22 2c 69 2b 31 29 3b 0a 20  -----\n",i+1);. 
14390 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
143a0 6e 74 66 28 6f 75 74 2c 20 22 25 73 5c 6e 5c 6e  ntf(out, "%s\n\n
143b0 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20  ", zSql);.      
143c0 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f    }.        raw_
143d0 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 5c  printf(out, "%s\
143e0 6e 22 2c 20 7a 49 64 78 29 3b 0a 20 20 20 20 20  n", zIdx);.     
143f0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
14400 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 45 51 50 29  t, "%s\n", zEQP)
14410 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
14420 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65 78    }.  sqlite3_ex
14430 70 65 72 74 5f 64 65 73 74 72 6f 79 28 70 29 3b  pert_destroy(p);
14440 0a 20 20 70 53 74 61 74 65 2d 3e 65 78 70 65 72  .  pState->exper
14450 74 2e 70 45 78 70 65 72 74 20 3d 20 30 3b 0a 20  t.pExpert = 0;. 
14460 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
14470 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74  *.** Implementat
14480 69 6f 6e 20 6f 66 20 22 2e 65 78 70 65 72 74 22  ion of ".expert"
14490 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f   dot command..*/
144a0 0a 73 74 61 74 69 63 20 69 6e 74 20 65 78 70 65  .static int expe
144b0 72 74 44 6f 74 43 6f 6d 6d 61 6e 64 28 0a 20 20  rtDotCommand(.  
144c0 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 53 74 61  ShellState *pSta
144d0 74 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  te,             
144e0 2f 2a 20 43 75 72 72 65 6e 74 20 73 68 65 6c 6c  /* Current shell
144f0 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a 2f 0a 20   tool state */. 
14500 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 20   char **azArg,  
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 61 72 67   /* Array of arg
14530 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f  uments passed to
14540 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a   dot command */.
14550 20 20 69 6e 74 20 6e 41 72 67 20 20 20 20 20 20    int nArg      
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14570 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
14580 6e 74 72 69 65 73 20 69 6e 20 61 7a 41 72 67 5b  ntries in azArg[
14590 5d 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63  ] */.){.  int rc
145a0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
145b0 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a  char *zErr = 0;.
145c0 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 69    int i;.  int i
145d0 53 61 6d 70 6c 65 20 3d 20 30 3b 0a 0a 20 20 61  Sample = 0;..  a
145e0 73 73 65 72 74 28 20 70 53 74 61 74 65 2d 3e 65  ssert( pState->e
145f0 78 70 65 72 74 2e 70 45 78 70 65 72 74 3d 3d 30  xpert.pExpert==0
14600 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 70 53   );.  memset(&pS
14610 74 61 74 65 2d 3e 65 78 70 65 72 74 2c 20 30 2c  tate->expert, 0,
14620 20 73 69 7a 65 6f 66 28 45 78 70 65 72 74 49 6e   sizeof(ExpertIn
14630 66 6f 29 29 3b 0a 0a 20 20 66 6f 72 28 69 3d 31  fo));..  for(i=1
14640 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ; rc==SQLITE_OK 
14650 26 26 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  && i<nArg; i++){
14660 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 61  .    char *z = a
14670 7a 41 72 67 5b 69 5d 3b 0a 20 20 20 20 69 6e 74  zArg[i];.    int
14680 20 6e 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d   n;.    if( z[0]
14690 3d 3d 27 2d 27 20 26 26 20 7a 5b 31 5d 3d 3d 27  =='-' && z[1]=='
146a0 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 6e 20  -' ) z++;.    n 
146b0 3d 20 73 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20  = strlen30(z);. 
146c0 20 20 20 69 66 28 20 6e 3e 3d 32 20 26 26 20 30     if( n>=2 && 0
146d0 3d 3d 73 74 72 6e 63 6d 70 28 7a 2c 20 22 2d 76  ==strncmp(z, "-v
146e0 65 72 62 6f 73 65 22 2c 20 6e 29 20 29 7b 0a 20  erbose", n) ){. 
146f0 20 20 20 20 20 70 53 74 61 74 65 2d 3e 65 78 70       pState->exp
14700 65 72 74 2e 62 56 65 72 62 6f 73 65 20 3d 20 31  ert.bVerbose = 1
14710 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65  ;.    }.    else
14720 20 69 66 28 20 6e 3e 3d 32 20 26 26 20 30 3d 3d   if( n>=2 && 0==
14730 73 74 72 6e 63 6d 70 28 7a 2c 20 22 2d 73 61 6d  strncmp(z, "-sam
14740 70 6c 65 22 2c 20 6e 29 20 29 7b 0a 20 20 20 20  ple", n) ){.    
14750 20 20 69 66 28 20 69 3d 3d 28 6e 41 72 67 2d 31    if( i==(nArg-1
14760 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  ) ){.        raw
14770 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
14780 22 6f 70 74 69 6f 6e 20 72 65 71 75 69 72 65 73  "option requires
14790 20 61 6e 20 61 72 67 75 6d 65 6e 74 3a 20 25 73   an argument: %s
147a0 5c 6e 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20  \n", z);.       
147b0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
147c0 4f 52 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  OR;.      }else{
147d0 0a 20 20 20 20 20 20 20 20 69 53 61 6d 70 6c 65  .        iSample
147e0 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56   = (int)integerV
147f0 61 6c 75 65 28 61 7a 41 72 67 5b 2b 2b 69 5d 29  alue(azArg[++i])
14800 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 53  ;.        if( iS
14810 61 6d 70 6c 65 3c 30 20 7c 7c 20 69 53 61 6d 70  ample<0 || iSamp
14820 6c 65 3e 31 30 30 20 29 7b 0a 20 20 20 20 20 20  le>100 ){.      
14830 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
14840 74 64 65 72 72 2c 20 22 76 61 6c 75 65 20 6f 75  tderr, "value ou
14850 74 20 6f 66 20 72 61 6e 67 65 3a 20 25 73 5c 6e  t of range: %s\n
14860 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20  ", azArg[i]);.  
14870 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
14880 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20  ITE_ERROR;.     
14890 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
148a0 20 7d 0a 20 20 20 20 65 6c 73 65 7b 0a 20 20 20   }.    else{.   
148b0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
148c0 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f  derr, "unknown o
148d0 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 7a 29  ption: %s\n", z)
148e0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
148f0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
14900 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72 63 3d 3d  .  }..  if( rc==
14910 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
14920 20 70 53 74 61 74 65 2d 3e 65 78 70 65 72 74 2e   pState->expert.
14930 70 45 78 70 65 72 74 20 3d 20 73 71 6c 69 74 65  pExpert = sqlite
14940 33 5f 65 78 70 65 72 74 5f 6e 65 77 28 70 53 74  3_expert_new(pSt
14950 61 74 65 2d 3e 64 62 2c 20 26 7a 45 72 72 29 3b  ate->db, &zErr);
14960 0a 20 20 20 20 69 66 28 20 70 53 74 61 74 65 2d  .    if( pState-
14970 3e 65 78 70 65 72 74 2e 70 45 78 70 65 72 74 3d  >expert.pExpert=
14980 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  =0 ){.      raw_
14990 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
149a0 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f 6e  sqlite3_expert_n
149b0 65 77 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 29  ew: %s\n", zErr)
149c0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
149d0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
149e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
149f0 74 65 33 5f 65 78 70 65 72 74 5f 63 6f 6e 66 69  te3_expert_confi
14a00 67 28 0a 20 20 20 20 20 20 20 20 20 20 70 53 74  g(.          pSt
14a10 61 74 65 2d 3e 65 78 70 65 72 74 2e 70 45 78 70  ate->expert.pExp
14a20 65 72 74 2c 20 45 58 50 45 52 54 5f 43 4f 4e 46  ert, EXPERT_CONF
14a30 49 47 5f 53 41 4d 50 4c 45 2c 20 69 53 61 6d 70  IG_SAMPLE, iSamp
14a40 6c 65 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  le.      );.    
14a50 7d 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  }.  }..  return 
14a60 72 63 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  rc;.}.#endif /* 
14a70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
14a80 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
14a90 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74  */../*.** Execut
14aa0 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 6f 72  e a statement or
14ab0 20 73 65 74 20 6f 66 20 73 74 61 74 65 6d 65 6e   set of statemen
14ac0 74 73 2e 20 20 50 72 69 6e 74 0a 2a 2a 20 61 6e  ts.  Print.** an
14ad0 79 20 72 65 73 75 6c 74 20 72 6f 77 73 2f 63 6f  y result rows/co
14ae0 6c 75 6d 6e 73 20 64 65 70 65 6e 64 69 6e 67 20  lumns depending 
14af0 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d  on the current m
14b00 6f 64 65 0a 2a 2a 20 73 65 74 20 76 69 61 20 74  ode.** set via t
14b10 68 65 20 73 75 70 70 6c 69 65 64 20 63 61 6c 6c  he supplied call
14b20 62 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  back..**.** This
14b30 20 69 73 20 76 65 72 79 20 73 69 6d 69 6c 61 72   is very similar
14b40 20 74 6f 20 53 51 4c 69 74 65 27 73 20 62 75 69   to SQLite's bui
14b50 6c 74 2d 69 6e 20 73 71 6c 69 74 65 33 5f 65 78  lt-in sqlite3_ex
14b60 65 63 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  ec().** function
14b70 20 65 78 63 65 70 74 20 69 74 20 74 61 6b 65 73   except it takes
14b80 20 61 20 73 6c 69 67 68 74 6c 79 20 64 69 66 66   a slightly diff
14b90 65 72 65 6e 74 20 63 61 6c 6c 62 61 63 6b 0a 2a  erent callback.*
14ba0 2a 20 61 6e 64 20 63 61 6c 6c 62 61 63 6b 20 64  * and callback d
14bb0 61 74 61 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  ata argument..*/
14bc0 0a 73 74 61 74 69 63 20 69 6e 74 20 73 68 65 6c  .static int shel
14bd0 6c 5f 65 78 65 63 28 0a 20 20 53 68 65 6c 6c 53  l_exec(.  ShellS
14be0 74 61 74 65 20 2a 70 41 72 67 2c 20 20 20 20 20  tate *pArg,     
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
14c10 6f 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a  o ShellState */.
14c20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
14c30 71 6c 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ql,             
14c40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
14c50 51 4c 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74  QL to be evaluat
14c60 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  ed */.  char **p
14c70 7a 45 72 72 4d 73 67 20 20 20 20 20 20 20 20 20  zErrMsg         
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c90 20 20 2f 2a 20 45 72 72 6f 72 20 6d 73 67 20 77    /* Error msg w
14ca0 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29  ritten here */.)
14cb0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
14cc0 20 2a 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20   *pStmt = NULL; 
14cd0 20 20 20 20 2f 2a 20 53 74 61 74 65 6d 65 6e 74      /* Statement
14ce0 20 74 6f 20 65 78 65 63 75 74 65 2e 20 2a 2f 0a   to execute. */.
14cf0 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
14d00 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 20 20 20  E_OK;           
14d10 20 20 2f 2a 20 52 65 74 75 72 6e 20 43 6f 64 65    /* Return Code
14d20 20 2a 2f 0a 20 20 69 6e 74 20 72 63 32 3b 0a 20   */.  int rc2;. 
14d30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65   const char *zLe
14d40 66 74 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20  ftover;         
14d50 20 2f 2a 20 54 61 69 6c 20 6f 66 20 75 6e 70 72   /* Tail of unpr
14d60 6f 63 65 73 73 65 64 20 53 51 4c 20 2a 2f 0a 20  ocessed SQL */. 
14d70 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
14d80 41 72 67 2d 3e 64 62 3b 0a 0a 20 20 69 66 28 20  Arg->db;..  if( 
14d90 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20  pzErrMsg ){.    
14da0 2a 70 7a 45 72 72 4d 73 67 20 3d 20 4e 55 4c 4c  *pzErrMsg = NULL
14db0 3b 0a 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ;.  }..#ifndef S
14dc0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
14dd0 41 4c 54 41 42 4c 45 0a 20 20 69 66 28 20 70 41  ALTABLE.  if( pA
14de0 72 67 2d 3e 65 78 70 65 72 74 2e 70 45 78 70 65  rg->expert.pExpe
14df0 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 65  rt ){.    rc = e
14e00 78 70 65 72 74 48 61 6e 64 6c 65 53 51 4c 28 70  xpertHandleSQL(p
14e10 41 72 67 2c 20 7a 53 71 6c 2c 20 70 7a 45 72 72  Arg, zSql, pzErr
14e20 4d 73 67 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  Msg);.    return
14e30 20 65 78 70 65 72 74 46 69 6e 69 73 68 28 70 41   expertFinish(pA
14e40 72 67 2c 20 28 72 63 21 3d 53 51 4c 49 54 45 5f  rg, (rc!=SQLITE_
14e50 4f 4b 29 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a  OK), pzErrMsg);.
14e60 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 77 68    }.#endif..  wh
14e70 69 6c 65 28 20 7a 53 71 6c 5b 30 5d 20 26 26 20  ile( zSql[0] && 
14e80 28 53 51 4c 49 54 45 5f 4f 4b 20 3d 3d 20 72 63  (SQLITE_OK == rc
14e90 29 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20  ) ){.    static 
14ea0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6d  const char *zStm
14eb0 74 53 71 6c 3b 0a 20 20 20 20 72 63 20 3d 20 73  tSql;.    rc = s
14ec0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
14ed0 32 28 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20  2(db, zSql, -1, 
14ee0 26 70 53 74 6d 74 2c 20 26 7a 4c 65 66 74 6f 76  &pStmt, &zLeftov
14ef0 65 72 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c  er);.    if( SQL
14f00 49 54 45 5f 4f 4b 20 21 3d 20 72 63 20 29 7b 0a  ITE_OK != rc ){.
14f10 20 20 20 20 20 20 69 66 28 20 70 7a 45 72 72 4d        if( pzErrM
14f20 73 67 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 70  sg ){.        *p
14f30 7a 45 72 72 4d 73 67 20 3d 20 73 61 76 65 5f 65  zErrMsg = save_e
14f40 72 72 5f 6d 73 67 28 64 62 29 3b 0a 20 20 20 20  rr_msg(db);.    
14f50 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
14f60 20 20 20 20 20 69 66 28 20 21 70 53 74 6d 74 20       if( !pStmt 
14f70 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 74 68  ){.        /* th
14f80 69 73 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61  is happens for a
14f90 20 63 6f 6d 6d 65 6e 74 20 6f 72 20 77 68 69 74   comment or whit
14fa0 65 2d 73 70 61 63 65 20 2a 2f 0a 20 20 20 20 20  e-space */.     
14fb0 20 20 20 7a 53 71 6c 20 3d 20 7a 4c 65 66 74 6f     zSql = zLefto
14fc0 76 65 72 3b 0a 20 20 20 20 20 20 20 20 77 68 69  ver;.        whi
14fd0 6c 65 28 20 49 73 53 70 61 63 65 28 7a 53 71 6c  le( IsSpace(zSql
14fe0 5b 30 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20  [0]) ) zSql++;. 
14ff0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
15000 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
15010 53 74 6d 74 53 71 6c 20 3d 20 73 71 6c 69 74 65  StmtSql = sqlite
15020 33 5f 73 71 6c 28 70 53 74 6d 74 29 3b 0a 20 20  3_sql(pStmt);.  
15030 20 20 20 20 69 66 28 20 7a 53 74 6d 74 53 71 6c      if( zStmtSql
15040 3d 3d 30 20 29 20 7a 53 74 6d 74 53 71 6c 20 3d  ==0 ) zStmtSql =
15050 20 22 22 3b 0a 20 20 20 20 20 20 77 68 69 6c 65   "";.      while
15060 28 20 49 73 53 70 61 63 65 28 7a 53 74 6d 74 53  ( IsSpace(zStmtS
15070 71 6c 5b 30 5d 29 20 29 20 7a 53 74 6d 74 53 71  ql[0]) ) zStmtSq
15080 6c 2b 2b 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 73  l++;..      /* s
15090 61 76 65 20 6f 66 66 20 74 68 65 20 70 72 65 70  ave off the prep
150a0 61 72 65 64 20 73 74 61 74 6d 65 6e 74 20 68 61  ared statment ha
150b0 6e 64 6c 65 20 61 6e 64 20 72 65 73 65 74 20 72  ndle and reset r
150c0 6f 77 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20  ow count */.    
150d0 20 20 69 66 28 20 70 41 72 67 20 29 7b 0a 20 20    if( pArg ){.  
150e0 20 20 20 20 20 20 70 41 72 67 2d 3e 70 53 74 6d        pArg->pStm
150f0 74 20 3d 20 70 53 74 6d 74 3b 0a 20 20 20 20 20  t = pStmt;.     
15100 20 20 20 70 41 72 67 2d 3e 63 6e 74 20 3d 20 30     pArg->cnt = 0
15110 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
15120 20 2f 2a 20 65 63 68 6f 20 74 68 65 20 73 71 6c   /* echo the sql
15130 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 65 63   statement if ec
15140 68 6f 20 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69  ho on */.      i
15150 66 28 20 70 41 72 67 20 26 26 20 53 68 65 6c 6c  f( pArg && Shell
15160 48 61 73 46 6c 61 67 28 70 41 72 67 2c 20 53 48  HasFlag(pArg, SH
15170 46 4c 47 5f 45 63 68 6f 29 20 29 7b 0a 20 20 20  FLG_Echo) ){.   
15180 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
15190 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 25 73 5c  (pArg->out, "%s\
151a0 6e 22 2c 20 7a 53 74 6d 74 53 71 6c 20 3f 20 7a  n", zStmtSql ? z
151b0 53 74 6d 74 53 71 6c 20 3a 20 7a 53 71 6c 29 3b  StmtSql : zSql);
151c0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
151d0 2f 2a 20 53 68 6f 77 20 74 68 65 20 45 58 50 4c  /* Show the EXPL
151e0 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 69  AIN QUERY PLAN i
151f0 66 20 2e 65 71 70 20 69 73 20 6f 6e 20 2a 2f 0a  f .eqp is on */.
15200 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20 26        if( pArg &
15210 26 20 70 41 72 67 2d 3e 61 75 74 6f 45 51 50 20  & pArg->autoEQP 
15220 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69  && sqlite3_strli
15230 6b 65 28 22 45 58 50 4c 41 49 4e 25 22 2c 7a 53  ke("EXPLAIN%",zS
15240 74 6d 74 53 71 6c 2c 30 29 21 3d 30 20 29 7b 0a  tmtSql,0)!=0 ){.
15250 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
15260 73 74 6d 74 20 2a 70 45 78 70 6c 61 69 6e 3b 0a  stmt *pExplain;.
15270 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45          char *zE
15280 51 50 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  QP;.        int 
15290 74 72 69 67 67 65 72 45 51 50 20 3d 20 30 3b 0a  triggerEQP = 0;.
152a0 20 20 20 20 20 20 20 20 64 69 73 61 62 6c 65 5f          disable_
152b0 64 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65  debug_trace_mode
152c0 73 28 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  s();.        sql
152d0 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 28 64  ite3_db_config(d
152e0 62 2c 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46  b, SQLITE_DBCONF
152f0 49 47 5f 54 52 49 47 47 45 52 5f 45 51 50 2c 20  IG_TRIGGER_EQP, 
15300 2d 31 2c 20 26 74 72 69 67 67 65 72 45 51 50 29  -1, &triggerEQP)
15310 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 41  ;.        if( pA
15320 72 67 2d 3e 61 75 74 6f 45 51 50 3e 3d 41 55 54  rg->autoEQP>=AUT
15330 4f 45 51 50 5f 74 72 69 67 67 65 72 20 29 7b 0a  OEQP_trigger ){.
15340 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
15350 33 5f 64 62 5f 63 6f 6e 66 69 67 28 64 62 2c 20  3_db_config(db, 
15360 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
15370 54 52 49 47 47 45 52 5f 45 51 50 2c 20 31 2c 20  TRIGGER_EQP, 1, 
15380 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0);.        }.  
15390 20 20 20 20 20 20 7a 45 51 50 20 3d 20 73 71 6c        zEQP = sql
153a0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 45 58  ite3_mprintf("EX
153b0 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
153c0 20 25 73 22 2c 20 7a 53 74 6d 74 53 71 6c 29 3b   %s", zStmtSql);
153d0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
153e0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
153f0 28 64 62 2c 20 7a 45 51 50 2c 20 2d 31 2c 20 26  (db, zEQP, -1, &
15400 70 45 78 70 6c 61 69 6e 2c 20 30 29 3b 0a 20 20  pExplain, 0);.  
15410 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
15420 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
15430 20 20 20 20 20 77 68 69 6c 65 28 20 73 71 6c 69       while( sqli
15440 74 65 33 5f 73 74 65 70 28 70 45 78 70 6c 61 69  te3_step(pExplai
15450 6e 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  n)==SQLITE_ROW )
15460 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61  {.            ra
15470 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
15480 75 74 2c 22 2d 2d 45 51 50 2d 2d 20 25 64 2c 22  ut,"--EQP-- %d,"
15490 2c 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  ,sqlite3_column_
154a0 69 6e 74 28 70 45 78 70 6c 61 69 6e 2c 20 30 29  int(pExplain, 0)
154b0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  );.            r
154c0 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
154d0 6f 75 74 2c 22 25 64 2c 22 2c 20 73 71 6c 69 74  out,"%d,", sqlit
154e0 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45  e3_column_int(pE
154f0 78 70 6c 61 69 6e 2c 20 31 29 29 3b 0a 20 20 20  xplain, 1));.   
15500 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
15510 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25  ntf(pArg->out,"%
15520 64 2c 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  d,", sqlite3_col
15530 75 6d 6e 5f 69 6e 74 28 70 45 78 70 6c 61 69 6e  umn_int(pExplain
15540 2c 20 32 29 29 3b 0a 20 20 20 20 20 20 20 20 20  , 2));.         
15550 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
15560 41 72 67 2d 3e 6f 75 74 2c 22 25 73 5c 6e 22 2c  Arg->out,"%s\n",
15570 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
15580 74 65 78 74 28 70 45 78 70 6c 61 69 6e 2c 20 33  text(pExplain, 3
15590 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ));.          }.
155a0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
155b0 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
155c0 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20  ze(pExplain);.  
155d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
155e0 65 65 28 7a 45 51 50 29 3b 0a 20 20 20 20 20 20  ee(zEQP);.      
155f0 20 20 69 66 28 20 70 41 72 67 2d 3e 61 75 74 6f    if( pArg->auto
15600 45 51 50 3e 3d 41 55 54 4f 45 51 50 5f 66 75 6c  EQP>=AUTOEQP_ful
15610 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  l ){.          /
15620 2a 20 41 6c 73 6f 20 64 6f 20 61 6e 20 45 58 50  * Also do an EXP
15630 4c 41 49 4e 20 66 6f 72 20 22 2e 65 71 70 20 66  LAIN for ".eqp f
15640 75 6c 6c 22 20 6d 6f 64 65 20 2a 2f 0a 20 20 20  ull" mode */.   
15650 20 20 20 20 20 20 20 7a 45 51 50 20 3d 20 73 71         zEQP = sq
15660 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 45  lite3_mprintf("E
15670 58 50 4c 41 49 4e 20 25 73 22 2c 20 7a 53 74 6d  XPLAIN %s", zStm
15680 74 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 20  tSql);.         
15690 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
156a0 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 45 51  epare_v2(db, zEQ
156b0 50 2c 20 2d 31 2c 20 26 70 45 78 70 6c 61 69 6e  P, -1, &pExplain
156c0 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
156d0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
156e0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
156f0 20 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d   pArg->cMode = M
15700 4f 44 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20  ODE_Explain;.   
15710 20 20 20 20 20 20 20 20 20 65 78 70 6c 61 69 6e           explain
15720 5f 64 61 74 61 5f 70 72 65 70 61 72 65 28 70 41  _data_prepare(pA
15730 72 67 2c 20 70 45 78 70 6c 61 69 6e 29 3b 0a 20  rg, pExplain);. 
15740 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 5f             exec_
15750 70 72 65 70 61 72 65 64 5f 73 74 6d 74 28 70 41  prepared_stmt(pA
15760 72 67 2c 20 70 45 78 70 6c 61 69 6e 29 3b 0a 20  rg, pExplain);. 
15770 20 20 20 20 20 20 20 20 20 20 20 65 78 70 6c 61             expla
15780 69 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 70  in_data_delete(p
15790 41 72 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Arg);.          
157a0 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  }.          sqli
157b0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78  te3_finalize(pEx
157c0 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 20 20  plain);.        
157d0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
157e0 45 51 50 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  EQP);.        }.
157f0 20 20 20 20 20 20 20 20 69 66 28 20 70 41 72 67          if( pArg
15800 2d 3e 61 75 74 6f 45 51 50 3e 3d 41 55 54 4f 45  ->autoEQP>=AUTOE
15810 51 50 5f 74 72 69 67 67 65 72 20 26 26 20 74 72  QP_trigger && tr
15820 69 67 67 65 72 45 51 50 3d 3d 30 20 29 7b 0a 20  iggerEQP==0 ){. 
15830 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
15840 5f 64 62 5f 63 6f 6e 66 69 67 28 64 62 2c 20 53  _db_config(db, S
15850 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 54  QLITE_DBCONFIG_T
15860 52 49 47 47 45 52 5f 45 51 50 2c 20 30 2c 20 30  RIGGER_EQP, 0, 0
15870 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  );.          /* 
15880 52 65 70 72 65 70 61 72 65 20 70 53 74 6d 74 20  Reprepare pStmt 
15890 62 65 66 6f 72 65 20 72 65 61 63 74 69 76 69 6e  before reactivin
158a0 67 20 74 72 61 63 65 20 6d 6f 64 65 73 20 2a 2f  g trace modes */
158b0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
158c0 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
158d0 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t);.          sq
158e0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
158f0 28 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26  (db, zSql, -1, &
15900 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20  pStmt, 0);.     
15910 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 73     }.        res
15920 74 6f 72 65 5f 64 65 62 75 67 5f 74 72 61 63 65  tore_debug_trace
15930 5f 6d 6f 64 65 73 28 29 3b 0a 20 20 20 20 20 20  _modes();.      
15940 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 70 41 72  }..      if( pAr
15950 67 20 29 7b 0a 20 20 20 20 20 20 20 20 70 41 72  g ){.        pAr
15960 67 2d 3e 63 4d 6f 64 65 20 3d 20 70 41 72 67 2d  g->cMode = pArg-
15970 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 69  >mode;.        i
15980 66 28 20 70 41 72 67 2d 3e 61 75 74 6f 45 78 70  f( pArg->autoExp
15990 6c 61 69 6e 0a 20 20 20 20 20 20 20 20 20 26 26  lain.         &&
159a0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
159b0 63 6f 75 6e 74 28 70 53 74 6d 74 29 3d 3d 38 0a  count(pStmt)==8.
159c0 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69           && sqli
159d0 74 65 33 5f 73 74 72 6c 69 6b 65 28 22 45 58 50  te3_strlike("EXP
159e0 4c 41 49 4e 25 22 2c 20 7a 53 74 6d 74 53 71 6c  LAIN%", zStmtSql
159f0 2c 30 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 29  ,0)==0.        )
15a00 7b 0a 20 20 20 20 20 20 20 20 20 20 70 41 72 67  {.          pArg
15a10 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f 44 45 5f 45  ->cMode = MODE_E
15a20 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20 20 20  xplain;.        
15a30 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  }..        /* If
15a40 20 74 68 65 20 73 68 65 6c 6c 20 69 73 20 63 75   the shell is cu
15a50 72 72 65 6e 74 6c 79 20 69 6e 20 22 2e 65 78 70  rrently in ".exp
15a60 6c 61 69 6e 22 20 6d 6f 64 65 2c 20 67 61 74 68  lain" mode, gath
15a70 65 72 20 74 68 65 20 65 78 74 72 61 0a 20 20 20  er the extra.   
15a80 20 20 20 20 20 2a 2a 20 64 61 74 61 20 72 65 71       ** data req
15a90 75 69 72 65 64 20 74 6f 20 61 64 64 20 69 6e 64  uired to add ind
15aa0 65 6e 74 73 20 74 6f 20 74 68 65 20 6f 75 74 70  ents to the outp
15ab0 75 74 2e 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ut.*/.        if
15ac0 28 20 70 41 72 67 2d 3e 63 4d 6f 64 65 3d 3d 4d  ( pArg->cMode==M
15ad0 4f 44 45 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20  ODE_Explain ){. 
15ae0 20 20 20 20 20 20 20 20 20 65 78 70 6c 61 69 6e           explain
15af0 5f 64 61 74 61 5f 70 72 65 70 61 72 65 28 70 41  _data_prepare(pA
15b00 72 67 2c 20 70 53 74 6d 74 29 3b 0a 20 20 20 20  rg, pStmt);.    
15b10 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20      }.      }.. 
15b20 20 20 20 20 20 65 78 65 63 5f 70 72 65 70 61 72       exec_prepar
15b30 65 64 5f 73 74 6d 74 28 70 41 72 67 2c 20 70 53  ed_stmt(pArg, pS
15b40 74 6d 74 29 3b 0a 20 20 20 20 20 20 65 78 70 6c  tmt);.      expl
15b50 61 69 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28  ain_data_delete(
15b60 70 41 72 67 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  pArg);..      /*
15b70 20 70 72 69 6e 74 20 75 73 61 67 65 20 73 74 61   print usage sta
15b80 74 73 20 69 66 20 73 74 61 74 73 20 6f 6e 20 2a  ts if stats on *
15b90 2f 0a 20 20 20 20 20 20 69 66 28 20 70 41 72 67  /.      if( pArg
15ba0 20 26 26 20 70 41 72 67 2d 3e 73 74 61 74 73 4f   && pArg->statsO
15bb0 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69 73  n ){.        dis
15bc0 70 6c 61 79 5f 73 74 61 74 73 28 64 62 2c 20 70  play_stats(db, p
15bd0 41 72 67 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  Arg, 0);.      }
15be0 0a 0a 20 20 20 20 20 20 2f 2a 20 70 72 69 6e 74  ..      /* print
15bf0 20 6c 6f 6f 70 2d 63 6f 75 6e 74 65 72 73 20 69   loop-counters i
15c00 66 20 72 65 71 75 69 72 65 64 20 2a 2f 0a 20 20  f required */.  
15c10 20 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20      if( pArg && 
15c20 70 41 72 67 2d 3e 73 63 61 6e 73 74 61 74 73 4f  pArg->scanstatsO
15c30 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69 73  n ){.        dis
15c40 70 6c 61 79 5f 73 63 61 6e 73 74 61 74 73 28 64  play_scanstats(d
15c50 62 2c 20 70 41 72 67 29 3b 0a 20 20 20 20 20 20  b, pArg);.      
15c60 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 46 69 6e 61  }..      /* Fina
15c70 6c 69 7a 65 20 74 68 65 20 73 74 61 74 65 6d 65  lize the stateme
15c80 6e 74 20 6a 75 73 74 20 65 78 65 63 75 74 65 64  nt just executed
15c90 2e 20 49 66 20 74 68 69 73 20 66 61 69 6c 73 2c  . If this fails,
15ca0 20 73 61 76 65 20 61 0a 20 20 20 20 20 20 2a 2a   save a.      **
15cb0 20 63 6f 70 79 20 6f 66 20 74 68 65 20 65 72 72   copy of the err
15cc0 6f 72 20 6d 65 73 73 61 67 65 2e 20 4f 74 68 65  or message. Othe
15cd0 72 77 69 73 65 2c 20 73 65 74 20 7a 53 71 6c 20  rwise, set zSql 
15ce0 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 0a  to point to the.
15cf0 20 20 20 20 20 20 2a 2a 20 6e 65 78 74 20 73 74        ** next st
15d00 61 74 65 6d 65 6e 74 20 74 6f 20 65 78 65 63 75  atement to execu
15d10 74 65 2e 20 2a 2f 0a 20 20 20 20 20 20 72 63 32  te. */.      rc2
15d20 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c   = sqlite3_final
15d30 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  ize(pStmt);.    
15d40 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
15d50 5f 4e 4f 4d 45 4d 20 29 20 72 63 20 3d 20 72 63  _NOMEM ) rc = rc
15d60 32 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  2;.      if( rc=
15d70 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
15d80 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c 65        zSql = zLe
15d90 66 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 20 20  ftover;.        
15da0 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a  while( IsSpace(z
15db0 53 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c 2b 2b  Sql[0]) ) zSql++
15dc0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
15dd0 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  ( pzErrMsg ){.  
15de0 20 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20        *pzErrMsg 
15df0 3d 20 73 61 76 65 5f 65 72 72 5f 6d 73 67 28 64  = save_err_msg(d
15e00 62 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  b);.      }..   
15e10 20 20 20 2f 2a 20 63 6c 65 61 72 20 73 61 76 65     /* clear save
15e20 64 20 73 74 6d 74 20 68 61 6e 64 6c 65 20 2a 2f  d stmt handle */
15e30 0a 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20  .      if( pArg 
15e40 29 7b 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d  ){.        pArg-
15e50 3e 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 0a 20  >pStmt = NULL;. 
15e60 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
15e70 20 2f 2a 20 65 6e 64 20 77 68 69 6c 65 20 2a 2f   /* end while */
15e80 0a 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ..  return rc;.}
15e90 0a 0a 2f 2a 0a 2a 2a 20 52 65 6c 65 61 73 65 20  ../*.** Release 
15ea0 6d 65 6d 6f 72 79 20 70 72 65 76 69 6f 75 73 6c  memory previousl
15eb0 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 74  y allocated by t
15ec0 61 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 29  ableColumnList()
15ed0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
15ee0 20 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74 28   freeColumnList(
15ef0 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 29 7b 0a 20  char **azCol){. 
15f00 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d   int i;.  for(i=
15f10 31 3b 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b  1; azCol[i]; i++
15f20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  ){.    sqlite3_f
15f30 72 65 65 28 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20  ree(azCol[i]);. 
15f40 20 7d 0a 20 20 2f 2a 20 61 7a 43 6f 6c 5b 30 5d   }.  /* azCol[0]
15f50 20 69 73 20 61 20 73 74 61 74 69 63 20 73 74 72   is a static str
15f60 69 6e 67 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ing */.  sqlite3
15f70 5f 66 72 65 65 28 61 7a 43 6f 6c 29 3b 0a 7d 0a  _free(azCol);.}.
15f80 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
15f90 6c 69 73 74 20 6f 66 20 70 6f 69 6e 74 65 72 73  list of pointers
15fa0 20 74 6f 20 73 74 72 69 6e 67 73 20 77 68 69 63   to strings whic
15fb0 68 20 61 72 65 20 74 68 65 20 6e 61 6d 65 73 20  h are the names 
15fc0 6f 66 20 61 6c 6c 0a 2a 2a 20 63 6f 6c 75 6d 6e  of all.** column
15fd0 73 20 69 6e 20 74 61 62 6c 65 20 7a 54 61 62 2e  s in table zTab.
15fe0 20 20 20 54 68 65 20 6d 65 6d 6f 72 79 20 74 6f     The memory to
15ff0 20 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 73 20   hold the names 
16000 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a  is dynamically.*
16010 2a 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20  * allocated and 
16020 6d 75 73 74 20 62 65 20 72 65 6c 65 61 73 65 64  must be released
16030 20 62 79 20 74 68 65 20 63 61 6c 6c 65 72 20 75   by the caller u
16040 73 69 6e 67 20 61 20 73 75 62 73 65 71 75 65 6e  sing a subsequen
16050 74 20 63 61 6c 6c 0a 2a 2a 20 74 6f 20 66 72 65  t call.** to fre
16060 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 29 2e 0a 2a  eColumnList()..*
16070 2a 0a 2a 2a 20 54 68 65 20 61 7a 43 6f 6c 5b 30  *.** The azCol[0
16080 5d 20 65 6e 74 72 79 20 69 73 20 75 73 75 61 6c  ] entry is usual
16090 6c 79 20 4e 55 4c 4c 2e 20 20 48 6f 77 65 76 65  ly NULL.  Howeve
160a0 72 2c 20 69 66 20 7a 54 61 62 20 63 6f 6e 74 61  r, if zTab conta
160b0 69 6e 73 20 61 20 72 6f 77 69 64 0a 2a 2a 20 76  ins a rowid.** v
160c0 61 6c 75 65 20 74 68 61 74 20 6e 65 65 64 73 20  alue that needs 
160d0 74 6f 20 62 65 20 70 72 65 73 65 72 76 65 64 2c  to be preserved,
160e0 20 74 68 65 6e 20 61 7a 43 6f 6c 5b 30 5d 20 69   then azCol[0] i
160f0 73 20 66 69 6c 6c 65 64 20 69 6e 20 77 69 74 68  s filled in with
16100 20 74 68 65 0a 2a 2a 20 6e 61 6d 65 20 6f 66 20   the.** name of 
16110 74 68 65 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e  the rowid column
16120 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73  ..**.** The firs
16130 74 20 72 65 67 75 6c 61 72 20 63 6f 6c 75 6d 6e  t regular column
16140 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73   in the table is
16150 20 61 7a 43 6f 6c 5b 31 5d 2e 20 20 54 68 65 20   azCol[1].  The 
16160 6c 69 73 74 20 69 73 20 74 65 72 6d 69 6e 61 74  list is terminat
16170 65 64 0a 2a 2a 20 62 79 20 61 6e 20 65 6e 74 72  ed.** by an entr
16180 79 20 77 69 74 68 20 61 7a 43 6f 6c 5b 69 5d 3d  y with azCol[i]=
16190 3d 30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68  =0..*/.static ch
161a0 61 72 20 2a 2a 74 61 62 6c 65 43 6f 6c 75 6d 6e  ar **tableColumn
161b0 4c 69 73 74 28 53 68 65 6c 6c 53 74 61 74 65 20  List(ShellState 
161c0 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  *p, const char *
161d0 7a 54 61 62 29 7b 0a 20 20 63 68 61 72 20 2a 2a  zTab){.  char **
161e0 61 7a 43 6f 6c 20 3d 20 30 3b 0a 20 20 73 71 6c  azCol = 0;.  sql
161f0 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
16200 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  ;.  char *zSql;.
16210 20 20 69 6e 74 20 6e 43 6f 6c 20 3d 20 30 3b 0a    int nCol = 0;.
16220 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30    int nAlloc = 0
16230 3b 0a 20 20 69 6e 74 20 6e 50 4b 20 3d 20 30 3b  ;.  int nPK = 0;
16240 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16250 20 6f 66 20 50 52 49 4d 41 52 59 20 4b 45 59 20   of PRIMARY KEY 
16260 63 6f 6c 75 6d 6e 73 20 73 65 65 6e 20 2a 2f 0a  columns seen */.
16270 20 20 69 6e 74 20 69 73 49 50 4b 20 3d 20 30 3b    int isIPK = 0;
16280 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
16290 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  one PRIMARY KEY 
162a0 63 6f 6c 75 6d 6e 20 6f 66 20 74 79 70 65 20 49  column of type I
162b0 4e 54 45 47 45 52 20 2a 2f 0a 20 20 69 6e 74 20  NTEGER */.  int 
162c0 70 72 65 73 65 72 76 65 52 6f 77 69 64 20 3d 20  preserveRowid = 
162d0 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20  ShellHasFlag(p, 
162e0 53 48 46 4c 47 5f 50 72 65 73 65 72 76 65 52 6f  SHFLG_PreserveRo
162f0 77 69 64 29 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  wid);.  int rc;.
16300 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65  .  zSql = sqlite
16310 33 5f 6d 70 72 69 6e 74 66 28 22 50 52 41 47 4d  3_mprintf("PRAGM
16320 41 20 74 61 62 6c 65 5f 69 6e 66 6f 3d 25 51 22  A table_info=%Q"
16330 2c 20 7a 54 61 62 29 3b 0a 20 20 72 63 20 3d 20  , zTab);.  rc = 
16340 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
16350 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
16360 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
16370 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
16380 53 71 6c 29 3b 0a 20 20 69 66 28 20 72 63 20 29  Sql);.  if( rc )
16390 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 77 68 69   return 0;.  whi
163a0 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70  le( sqlite3_step
163b0 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
163c0 52 4f 57 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ROW ){.    if( n
163d0 43 6f 6c 3e 3d 6e 41 6c 6c 6f 63 2d 32 20 29 7b  Col>=nAlloc-2 ){
163e0 0a 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20  .      nAlloc = 
163f0 6e 41 6c 6c 6f 63 2a 32 20 2b 20 6e 43 6f 6c 20  nAlloc*2 + nCol 
16400 2b 20 31 30 3b 0a 20 20 20 20 20 20 61 7a 43 6f  + 10;.      azCo
16410 6c 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c  l = sqlite3_real
16420 6c 6f 63 28 61 7a 43 6f 6c 2c 20 6e 41 6c 6c 6f  loc(azCol, nAllo
16430 63 2a 73 69 7a 65 6f 66 28 61 7a 43 6f 6c 5b 30  c*sizeof(azCol[0
16440 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61  ]));.      if( a
16450 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zCol==0 ){.     
16460 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
16470 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75  derr, "Error: ou
16480 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b  t of memory\n");
16490 0a 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29  .        exit(1)
164a0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
164b0 20 20 20 20 61 7a 43 6f 6c 5b 2b 2b 6e 43 6f 6c      azCol[++nCol
164c0 5d 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  ] = sqlite3_mpri
164d0 6e 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74 65  ntf("%s", sqlite
164e0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
164f0 74 6d 74 2c 20 31 29 29 3b 0a 20 20 20 20 69 66  tmt, 1));.    if
16500 28 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  ( sqlite3_column
16510 5f 69 6e 74 28 70 53 74 6d 74 2c 20 35 29 20 29  _int(pStmt, 5) )
16520 7b 0a 20 20 20 20 20 20 6e 50 4b 2b 2b 3b 0a 20  {.      nPK++;. 
16530 20 20 20 20 20 69 66 28 20 6e 50 4b 3d 3d 31 0a       if( nPK==1.
16540 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65         && sqlite
16550 33 5f 73 74 72 69 63 6d 70 28 28 63 6f 6e 73 74  3_stricmp((const
16560 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
16570 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74  olumn_text(pStmt
16580 2c 32 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ,2),.           
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
165a0 49 4e 54 45 47 45 52 22 29 3d 3d 30 0a 20 20 20  INTEGER")==0.   
165b0 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 73     ){.        is
165c0 49 50 4b 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  IPK = 1;.      }
165d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 73  else{.        is
165e0 49 50 4b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  IPK = 0;.      }
165f0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
16600 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
16610 74 6d 74 29 3b 0a 20 20 69 66 28 20 61 7a 43 6f  tmt);.  if( azCo
16620 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  l==0 ) return 0;
16630 0a 20 20 61 7a 43 6f 6c 5b 30 5d 20 3d 20 30 3b  .  azCol[0] = 0;
16640 0a 20 20 61 7a 43 6f 6c 5b 6e 43 6f 6c 2b 31 5d  .  azCol[nCol+1]
16650 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20   = 0;..  /* The 
16660 64 65 63 69 73 69 6f 6e 20 6f 66 20 77 68 65 74  decision of whet
16670 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 72 6f 77  her or not a row
16680 69 64 20 72 65 61 6c 6c 79 20 6e 65 65 64 73 20  id really needs 
16690 74 6f 20 62 65 20 70 72 65 73 65 72 76 65 64 0a  to be preserved.
166a0 20 20 2a 2a 20 69 73 20 74 72 69 63 6b 79 2e 20    ** is tricky. 
166b0 20 57 65 20 6e 65 76 65 72 20 6e 65 65 64 20 74   We never need t
166c0 6f 20 70 72 65 73 65 72 76 65 20 61 20 72 6f 77  o preserve a row
166d0 69 64 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54  id for a WITHOUT
166e0 20 52 4f 57 49 44 20 74 61 62 6c 65 0a 20 20 2a   ROWID table.  *
166f0 2a 20 6f 72 20 61 20 74 61 62 6c 65 20 77 69 74  * or a table wit
16700 68 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49  h an INTEGER PRI
16710 4d 41 52 59 20 4b 45 59 2e 20 20 57 65 20 61 72  MARY KEY.  We ar
16720 65 20 75 6e 61 62 6c 65 20 74 6f 20 70 72 65 73  e unable to pres
16730 65 72 76 65 0a 20 20 2a 2a 20 72 6f 77 69 64 73  erve.  ** rowids
16740 20 6f 6e 20 74 61 62 6c 65 73 20 77 68 65 72 65   on tables where
16750 20 74 68 65 20 72 6f 77 69 64 20 69 73 20 69 6e   the rowid is in
16760 61 63 63 65 73 73 69 62 6c 65 20 62 65 63 61 75  accessible becau
16770 73 65 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  se there are oth
16780 65 72 0a 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 20  er.  ** columns 
16790 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  in the table nam
167a0 65 64 20 22 72 6f 77 69 64 22 2c 20 22 5f 72 6f  ed "rowid", "_ro
167b0 77 69 64 5f 22 2c 20 61 6e 64 20 22 6f 69 64 22  wid_", and "oid"
167c0 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 72 65  ..  */.  if( pre
167d0 73 65 72 76 65 52 6f 77 69 64 20 26 26 20 69 73  serveRowid && is
167e0 49 50 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  IPK ){.    /* If
167f0 20 61 20 73 69 6e 67 6c 65 20 50 52 49 4d 41 52   a single PRIMAR
16800 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 77 69 74  Y KEY column wit
16810 68 20 74 79 70 65 20 49 4e 54 45 47 45 52 20 77  h type INTEGER w
16820 61 73 20 73 65 65 6e 2c 20 74 68 65 6e 20 69 74  as seen, then it
16830 0a 20 20 20 20 2a 2a 20 6d 69 67 68 74 20 62 65  .    ** might be
16840 20 61 6e 20 61 6c 69 73 65 20 66 6f 72 20 74 68   an alise for th
16850 65 20 52 4f 57 49 44 2e 20 20 42 75 74 20 69 74  e ROWID.  But it
16860 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61   might also be a
16870 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a 20   WITHOUT ROWID. 
16880 20 20 20 2a 2a 20 74 61 62 6c 65 20 6f 72 20 61     ** table or a
16890 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
168a0 20 4b 45 59 20 44 45 53 43 20 63 6f 6c 75 6d 6e   KEY DESC column
168b0 2c 20 6e 65 69 74 68 65 72 20 6f 66 20 77 68 69  , neither of whi
168c0 63 68 20 61 72 65 0a 20 20 20 20 2a 2a 20 52 4f  ch are.    ** RO
168d0 57 49 44 20 61 6c 69 61 73 65 73 2e 20 20 54 6f  WID aliases.  To
168e0 20 64 69 73 74 69 6e 67 75 69 73 68 20 74 68 65   distinguish the
168f0 73 65 20 63 61 73 65 73 2c 20 63 68 65 63 6b 20  se cases, check 
16900 74 6f 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a  to see if.    **
16910 20 74 68 65 72 65 20 69 73 20 61 20 22 70 6b 22   there is a "pk"
16920 20 65 6e 74 72 79 20 69 6e 20 22 50 52 41 47 4d   entry in "PRAGM
16930 41 20 69 6e 64 65 78 5f 6c 69 73 74 22 2e 20 20  A index_list".  
16940 54 68 65 72 65 20 77 69 6c 6c 20 62 65 0a 20 20  There will be.  
16950 20 20 2a 2a 20 6e 6f 20 22 70 6b 22 20 69 6e 64    ** no "pk" ind
16960 65 78 20 69 66 20 74 68 65 20 50 52 49 4d 41 52  ex if the PRIMAR
16970 59 20 4b 45 59 20 72 65 61 6c 6c 79 20 69 73 20  Y KEY really is 
16980 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
16990 20 52 4f 57 49 44 2e 0a 20 20 20 20 2a 2f 0a 20   ROWID..    */. 
169a0 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
169b0 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43  3_mprintf("SELEC
169c0 54 20 31 20 46 52 4f 4d 20 70 72 61 67 6d 61 5f  T 1 FROM pragma_
169d0 69 6e 64 65 78 5f 6c 69 73 74 28 25 51 29 22 0a  index_list(%Q)".
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169f0 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45             " WHE
16a00 52 45 20 6f 72 69 67 69 6e 3d 27 70 6b 27 22 2c  RE origin='pk'",
16a10 20 7a 54 61 62 29 3b 0a 20 20 20 20 72 63 20 3d   zTab);.    rc =
16a20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
16a30 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c  _v2(p->db, zSql,
16a40 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
16a50 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
16a60 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28  e(zSql);.    if(
16a70 20 72 63 20 29 7b 0a 20 20 20 20 20 20 66 72 65   rc ){.      fre
16a80 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f  eColumnList(azCo
16a90 6c 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  l);.      return
16aa0 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63   0;.    }.    rc
16ab0 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28   = sqlite3_step(
16ac0 70 53 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69  pStmt);.    sqli
16ad0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
16ae0 6d 74 29 3b 0a 20 20 20 20 70 72 65 73 65 72 76  mt);.    preserv
16af0 65 52 6f 77 69 64 20 3d 20 72 63 3d 3d 53 51 4c  eRowid = rc==SQL
16b00 49 54 45 5f 52 4f 57 3b 0a 20 20 7d 0a 20 20 69  ITE_ROW;.  }.  i
16b10 66 28 20 70 72 65 73 65 72 76 65 52 6f 77 69 64  f( preserveRowid
16b20 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
16b30 70 72 65 73 65 72 76 65 20 74 68 65 20 72 6f 77  preserve the row
16b40 69 64 20 69 66 20 77 65 20 63 61 6e 20 66 69 6e  id if we can fin
16b50 64 20 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20  d a name to use 
16b60 66 6f 72 20 74 68 65 0a 20 20 20 20 2a 2a 20 72  for the.    ** r
16b70 6f 77 69 64 20 2a 2f 0a 20 20 20 20 73 74 61 74  owid */.    stat
16b80 69 63 20 63 68 61 72 20 2a 61 7a 52 6f 77 69 64  ic char *azRowid
16b90 5b 5d 20 3d 20 7b 20 22 72 6f 77 69 64 22 2c 20  [] = { "rowid", 
16ba0 22 5f 72 6f 77 69 64 5f 22 2c 20 22 6f 69 64 22  "_rowid_", "oid"
16bb0 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a   };.    int i, j
16bc0 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  ;.    for(j=0; j
16bd0 3c 33 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  <3; j++){.      
16be0 66 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 43 6f 6c  for(i=1; i<=nCol
16bf0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
16c00 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69  if( sqlite3_stri
16c10 63 6d 70 28 61 7a 52 6f 77 69 64 5b 6a 5d 2c 61  cmp(azRowid[j],a
16c20 7a 43 6f 6c 5b 69 5d 29 3d 3d 30 20 29 20 62 72  zCol[i])==0 ) br
16c30 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
16c40 20 20 20 69 66 28 20 69 3e 6e 43 6f 6c 20 29 7b     if( i>nCol ){
16c50 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 74 20 74  .        /* At t
16c60 68 69 73 20 70 6f 69 6e 74 2c 20 77 65 20 6b 6e  his point, we kn
16c70 6f 77 20 74 68 61 74 20 61 7a 52 6f 77 69 64 5b  ow that azRowid[
16c80 6a 5d 20 69 73 20 6e 6f 74 20 74 68 65 20 6e 61  j] is not the na
16c90 6d 65 20 6f 66 20 61 6e 79 0a 20 20 20 20 20 20  me of any.      
16ca0 20 20 2a 2a 20 6f 72 64 69 6e 61 72 79 20 63 6f    ** ordinary co
16cb0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c  lumn in the tabl
16cc0 65 2e 20 20 56 65 72 69 66 79 20 74 68 61 74 20  e.  Verify that 
16cd0 61 7a 52 6f 77 69 64 5b 6a 5d 20 69 73 20 61 20  azRowid[j] is a 
16ce0 76 61 6c 69 64 0a 20 20 20 20 20 20 20 20 2a 2a  valid.        **
16cf0 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 72 6f   name for the ro
16d00 77 69 64 20 62 65 66 6f 72 65 20 61 64 64 69 6e  wid before addin
16d10 67 20 69 74 20 74 6f 20 61 7a 43 6f 6c 5b 30 5d  g it to azCol[0]
16d20 2e 20 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  .  WITHOUT ROWID
16d30 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c  .        ** tabl
16d40 65 73 20 77 69 6c 6c 20 66 61 69 6c 20 74 68 69  es will fail thi
16d50 73 20 6c 61 73 74 20 63 68 65 63 6b 20 2a 2f 0a  s last check */.
16d60 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
16d70 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  ite3_table_colum
16d80 6e 5f 6d 65 74 61 64 61 74 61 28 70 2d 3e 64 62  n_metadata(p->db
16d90 2c 30 2c 7a 54 61 62 2c 61 7a 52 6f 77 69 64 5b  ,0,zTab,azRowid[
16da0 6a 5d 2c 30 2c 30 2c 30 2c 30 2c 30 29 3b 0a 20  j],0,0,0,0,0);. 
16db0 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
16dc0 51 4c 49 54 45 5f 4f 4b 20 29 20 61 7a 43 6f 6c  QLITE_OK ) azCol
16dd0 5b 30 5d 20 3d 20 61 7a 52 6f 77 69 64 5b 6a 5d  [0] = azRowid[j]
16de0 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
16df0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
16e00 20 7d 0a 20 20 72 65 74 75 72 6e 20 61 7a 43 6f   }.  return azCo
16e10 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 6f 67 67  l;.}../*.** Togg
16e20 6c 65 20 74 68 65 20 72 65 76 65 72 73 65 5f 75  le the reverse_u
16e30 6e 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73  nordered_selects
16e40 20 73 65 74 74 69 6e 67 2e 0a 2a 2f 0a 73 74 61   setting..*/.sta
16e50 74 69 63 20 76 6f 69 64 20 74 6f 67 67 6c 65 53  tic void toggleS
16e60 65 6c 65 63 74 4f 72 64 65 72 28 73 71 6c 69 74  electOrder(sqlit
16e70 65 33 20 2a 64 62 29 7b 0a 20 20 73 71 6c 69 74  e3 *db){.  sqlit
16e80 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d  e3_stmt *pStmt =
16e90 20 30 3b 0a 20 20 69 6e 74 20 69 53 65 74 74 69   0;.  int iSetti
16ea0 6e 67 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a  ng = 0;.  char z
16eb0 53 74 6d 74 5b 31 30 30 5d 3b 0a 20 20 73 71 6c  Stmt[100];.  sql
16ec0 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
16ed0 64 62 2c 20 22 50 52 41 47 4d 41 20 72 65 76 65  db, "PRAGMA reve
16ee0 72 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73 65  rse_unordered_se
16ef0 6c 65 63 74 73 22 2c 20 2d 31 2c 20 26 70 53 74  lects", -1, &pSt
16f00 6d 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 73 71  mt, 0);.  if( sq
16f10 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
16f20 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
16f30 0a 20 20 20 20 69 53 65 74 74 69 6e 67 20 3d 20  .    iSetting = 
16f40 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
16f50 6e 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20  nt(pStmt, 0);.  
16f60 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  }.  sqlite3_fina
16f70 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 73  lize(pStmt);.  s
16f80 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
16f90 73 69 7a 65 6f 66 28 7a 53 74 6d 74 29 2c 20 7a  sizeof(zStmt), z
16fa0 53 74 6d 74 2c 0a 20 20 20 20 20 20 20 22 50 52  Stmt,.       "PR
16fb0 41 47 4d 41 20 72 65 76 65 72 73 65 5f 75 6e 6f  AGMA reverse_uno
16fc0 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 28 25  rdered_selects(%
16fd0 64 29 22 2c 20 21 69 53 65 74 74 69 6e 67 29 3b  d)", !iSetting);
16fe0 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  .  sqlite3_exec(
16ff0 64 62 2c 20 7a 53 74 6d 74 2c 20 30 2c 20 30 2c  db, zStmt, 0, 0,
17000 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68   0);.}../*.** Th
17010 69 73 20 69 73 20 61 20 64 69 66 66 65 72 65 6e  is is a differen
17020 74 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69  t callback routi
17030 6e 65 20 75 73 65 64 20 66 6f 72 20 64 75 6d 70  ne used for dump
17040 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
17050 2e 0a 2a 2a 20 45 61 63 68 20 72 6f 77 20 72 65  ..** Each row re
17060 63 65 69 76 65 64 20 62 79 20 74 68 69 73 20 63  ceived by this c
17070 61 6c 6c 62 61 63 6b 20 63 6f 6e 73 69 73 74 73  allback consists
17080 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
17090 2c 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  ,.** the table t
170a0 79 70 65 20 28 22 69 6e 64 65 78 22 20 6f 72 20  ype ("index" or 
170b0 22 74 61 62 6c 65 22 29 20 61 6e 64 20 53 51 4c  "table") and SQL
170c0 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 74   to create the t
170d0 61 62 6c 65 2e 0a 2a 2a 20 54 68 69 73 20 72 6f  able..** This ro
170e0 75 74 69 6e 65 20 73 68 6f 75 6c 64 20 70 72 69  utine should pri
170f0 6e 74 20 74 65 78 74 20 73 75 66 66 69 63 69 65  nt text sufficie
17100 6e 74 20 74 6f 20 72 65 63 72 65 61 74 65 20 74  nt to recreate t
17110 68 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61  he table..*/.sta
17120 74 69 63 20 69 6e 74 20 64 75 6d 70 5f 63 61 6c  tic int dump_cal
17130 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72 67  lback(void *pArg
17140 2c 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61 72  , int nArg, char
17150 20 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72 20 2a   **azArg, char *
17160 2a 61 7a 4e 6f 74 55 73 65 64 29 7b 0a 20 20 69  *azNotUsed){.  i
17170 6e 74 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20 63  nt rc;.  const c
17180 68 61 72 20 2a 7a 54 61 62 6c 65 3b 0a 20 20 63  har *zTable;.  c
17190 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
171a0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
171b0 7a 53 71 6c 3b 0a 20 20 53 68 65 6c 6c 53 74 61  zSql;.  ShellSta
171c0 74 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74  te *p = (ShellSt
171d0 61 74 65 20 2a 29 70 41 72 67 3b 0a 0a 20 20 55  ate *)pArg;..  U
171e0 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
171f0 61 7a 4e 6f 74 55 73 65 64 29 3b 0a 20 20 69 66  azNotUsed);.  if
17200 28 20 6e 41 72 67 21 3d 33 20 7c 7c 20 61 7a 41  ( nArg!=3 || azA
17210 72 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  rg==0 ) return 0
17220 3b 0a 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41  ;.  zTable = azA
17230 72 67 5b 30 5d 3b 0a 20 20 7a 54 79 70 65 20 3d  rg[0];.  zType =
17240 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 7a 53 71   azArg[1];.  zSq
17250 6c 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 0a 20  l = azArg[2];.. 
17260 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62   if( strcmp(zTab
17270 6c 65 2c 20 22 73 71 6c 69 74 65 5f 73 65 71 75  le, "sqlite_sequ
17280 65 6e 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ence")==0 ){.   
17290 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
172a0 75 74 2c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d  ut, "DELETE FROM
172b0 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
172c0 3b 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ;\n");.  }else i
172d0 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c  f( sqlite3_strgl
172e0 6f 62 28 22 73 71 6c 69 74 65 5f 73 74 61 74 3f  ob("sqlite_stat?
172f0 22 2c 20 7a 54 61 62 6c 65 29 3d 3d 30 20 29 7b  ", zTable)==0 ){
17300 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
17310 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45  p->out, "ANALYZE
17320 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c   sqlite_master;\
17330 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  n");.  }else if(
17340 20 73 74 72 6e 63 6d 70 28 7a 54 61 62 6c 65 2c   strncmp(zTable,
17350 20 22 73 71 6c 69 74 65 5f 22 2c 20 37 29 3d 3d   "sqlite_", 7)==
17360 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 ){.    return 
17370 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  0;.  }else if( s
17380 74 72 6e 63 6d 70 28 7a 53 71 6c 2c 20 22 43 52  trncmp(zSql, "CR
17390 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
173a0 4c 45 22 2c 20 32 30 29 3d 3d 30 20 29 7b 0a 20  LE", 20)==0 ){. 
173b0 20 20 20 63 68 61 72 20 2a 7a 49 6e 73 3b 0a 20     char *zIns;. 
173c0 20 20 20 69 66 28 20 21 70 2d 3e 77 72 69 74 61     if( !p->writa
173d0 62 6c 65 53 63 68 65 6d 61 20 29 7b 0a 20 20 20  bleSchema ){.   
173e0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
173f0 3e 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 77 72  >out, "PRAGMA wr
17400 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e  itable_schema=ON
17410 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 70 2d 3e  ;\n");.      p->
17420 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20 3d  writableSchema =
17430 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 49   1;.    }.    zI
17440 6e 73 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ns = sqlite3_mpr
17450 69 6e 74 66 28 0a 20 20 20 20 20 20 20 22 49 4e  intf(.       "IN
17460 53 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65  SERT INTO sqlite
17470 5f 6d 61 73 74 65 72 28 74 79 70 65 2c 6e 61 6d  _master(type,nam
17480 65 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70  e,tbl_name,rootp
17490 61 67 65 2c 73 71 6c 29 22 0a 20 20 20 20 20 20  age,sql)".      
174a0 20 22 56 41 4c 55 45 53 28 27 74 61 62 6c 65 27   "VALUES('table'
174b0 2c 27 25 71 27 2c 27 25 71 27 2c 30 2c 27 25 71  ,'%q','%q',0,'%q
174c0 27 29 3b 22 2c 0a 20 20 20 20 20 20 20 7a 54 61  ');",.       zTa
174d0 62 6c 65 2c 20 7a 54 61 62 6c 65 2c 20 7a 53 71  ble, zTable, zSq
174e0 6c 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  l);.    utf8_pri
174f0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c  ntf(p->out, "%s\
17500 6e 22 2c 20 7a 49 6e 73 29 3b 0a 20 20 20 20 73  n", zIns);.    s
17510 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 49 6e 73  qlite3_free(zIns
17520 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  );.    return 0;
17530 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 72  .  }else{.    pr
17540 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70 2d  intSchemaLine(p-
17550 3e 6f 75 74 2c 20 7a 53 71 6c 2c 20 22 3b 5c 6e  >out, zSql, ";\n
17560 22 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 73  ");.  }..  if( s
17570 74 72 63 6d 70 28 7a 54 79 70 65 2c 20 22 74 61  trcmp(zType, "ta
17580 62 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ble")==0 ){.    
17590 53 68 65 6c 6c 54 65 78 74 20 73 53 65 6c 65 63  ShellText sSelec
175a0 74 3b 0a 20 20 20 20 53 68 65 6c 6c 54 65 78 74  t;.    ShellText
175b0 20 73 54 61 62 6c 65 3b 0a 20 20 20 20 63 68 61   sTable;.    cha
175c0 72 20 2a 2a 61 7a 43 6f 6c 3b 0a 20 20 20 20 69  r **azCol;.    i
175d0 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 2a  nt i;.    char *
175e0 73 61 76 65 64 44 65 73 74 54 61 62 6c 65 3b 0a  savedDestTable;.
175f0 20 20 20 20 69 6e 74 20 73 61 76 65 64 4d 6f 64      int savedMod
17600 65 3b 0a 0a 20 20 20 20 61 7a 43 6f 6c 20 3d 20  e;..    azCol = 
17610 74 61 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28  tableColumnList(
17620 70 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20  p, zTable);.    
17630 69 66 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 7b 0a  if( azCol==0 ){.
17640 20 20 20 20 20 20 70 2d 3e 6e 45 72 72 2b 2b 3b        p->nErr++;
17650 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
17660 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 41  .    }..    /* A
17670 6c 77 61 79 73 20 71 75 6f 74 65 20 74 68 65 20  lways quote the 
17680 74 61 62 6c 65 20 6e 61 6d 65 2c 20 65 76 65 6e  table name, even
17690 20 69 66 20 69 74 20 61 70 70 65 61 72 73 20 74   if it appears t
176a0 6f 20 62 65 20 70 75 72 65 20 61 73 63 69 69 2c  o be pure ascii,
176b0 0a 20 20 20 20 2a 2a 20 69 6e 20 63 61 73 65 20  .    ** in case 
176c0 69 74 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e  it is a keyword.
176d0 20 45 78 3a 20 20 49 4e 53 45 52 54 20 49 4e 54   Ex:  INSERT INT
176e0 4f 20 22 74 61 62 6c 65 22 20 2e 2e 2e 20 2a 2f  O "table" ... */
176f0 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73  .    initText(&s
17700 54 61 62 6c 65 29 3b 0a 20 20 20 20 61 70 70 65  Table);.    appe
17710 6e 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20  ndText(&sTable, 
17720 7a 54 61 62 6c 65 2c 20 71 75 6f 74 65 43 68 61  zTable, quoteCha
17730 72 28 7a 54 61 62 6c 65 29 29 3b 0a 20 20 20 20  r(zTable));.    
17740 2f 2a 20 49 66 20 70 72 65 73 65 72 76 69 6e 67  /* If preserving
17750 20 74 68 65 20 72 6f 77 69 64 2c 20 61 64 64 20   the rowid, add 
17760 61 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 66  a column list af
17770 74 65 72 20 74 68 65 20 74 61 62 6c 65 20 6e 61  ter the table na
17780 6d 65 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 6f 74  me..    ** In ot
17790 68 65 72 20 77 6f 72 64 73 3a 20 20 22 49 4e 53  her words:  "INS
177a0 45 52 54 20 49 4e 54 4f 20 74 61 62 28 72 6f 77  ERT INTO tab(row
177b0 69 64 2c 61 2c 62 2c 63 2c 2e 2e 2e 29 20 56 41  id,a,b,c,...) VA
177c0 4c 55 45 53 28 2e 2e 2e 29 22 0a 20 20 20 20 2a  LUES(...)".    *
177d0 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  * instead of the
177e0 20 75 73 75 61 6c 20 22 49 4e 53 45 52 54 20 49   usual "INSERT I
177f0 4e 54 4f 20 74 61 62 20 56 41 4c 55 45 53 28 2e  NTO tab VALUES(.
17800 2e 2e 29 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ..)"..    */.   
17810 20 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b   if( azCol[0] ){
17820 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78  .      appendTex
17830 74 28 26 73 54 61 62 6c 65 2c 20 22 28 22 2c 20  t(&sTable, "(", 
17840 30 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e 64  0);.      append
17850 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20 61 7a  Text(&sTable, az
17860 43 6f 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20  Col[0], 0);.    
17870 20 20 66 6f 72 28 69 3d 31 3b 20 61 7a 43 6f 6c    for(i=1; azCol
17880 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  [i]; i++){.     
17890 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
178a0 54 61 62 6c 65 2c 20 22 2c 22 2c 20 30 29 3b 0a  Table, ",", 0);.
178b0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
178c0 78 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43 6f  xt(&sTable, azCo
178d0 6c 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28  l[i], quoteChar(
178e0 61 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20  azCol[i]));.    
178f0 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64    }.      append
17900 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20 22 29  Text(&sTable, ")
17910 22 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ", 0);.    }..  
17920 20 20 2f 2a 20 42 75 69 6c 64 20 61 6e 20 61 70    /* Build an ap
17930 70 72 6f 70 72 69 61 74 65 20 53 45 4c 45 43 54  propriate SELECT
17940 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
17950 20 20 69 6e 69 74 54 65 78 74 28 26 73 53 65 6c    initText(&sSel
17960 65 63 74 29 3b 0a 20 20 20 20 61 70 70 65 6e 64  ect);.    append
17970 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22  Text(&sSelect, "
17980 53 45 4c 45 43 54 20 22 2c 20 30 29 3b 0a 20 20  SELECT ", 0);.  
17990 20 20 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29    if( azCol[0] )
179a0 7b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  {.      appendTe
179b0 78 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43  xt(&sSelect, azC
179c0 6f 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20  ol[0], 0);.     
179d0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
179e0 6c 65 63 74 2c 20 22 2c 22 2c 20 30 29 3b 0a 20  lect, ",", 0);. 
179f0 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 31     }.    for(i=1
17a00 3b 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29  ; azCol[i]; i++)
17a10 7b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  {.      appendTe
17a20 78 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43  xt(&sSelect, azC
17a30 6f 6c 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72  ol[i], quoteChar
17a40 28 61 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20  (azCol[i]));.   
17a50 20 20 20 69 66 28 20 61 7a 43 6f 6c 5b 69 2b 31     if( azCol[i+1
17a60 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70  ] ){.        app
17a70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
17a80 2c 20 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20  , ",", 0);.     
17a90 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65   }.    }.    fre
17aa0 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f  eColumnList(azCo
17ab0 6c 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65  l);.    appendTe
17ac0 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 20 46  xt(&sSelect, " F
17ad0 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 61  ROM ", 0);.    a
17ae0 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
17af0 63 74 2c 20 7a 54 61 62 6c 65 2c 20 71 75 6f 74  ct, zTable, quot
17b00 65 43 68 61 72 28 7a 54 61 62 6c 65 29 29 3b 0a  eChar(zTable));.
17b10 0a 20 20 20 20 73 61 76 65 64 44 65 73 74 54 61  .    savedDestTa
17b20 62 6c 65 20 3d 20 70 2d 3e 7a 44 65 73 74 54 61  ble = p->zDestTa
17b30 62 6c 65 3b 0a 20 20 20 20 73 61 76 65 64 4d 6f  ble;.    savedMo
17b40 64 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20  de = p->mode;.  
17b50 20 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20    p->zDestTable 
17b60 3d 20 73 54 61 62 6c 65 2e 7a 3b 0a 20 20 20 20  = sTable.z;.    
17b70 70 2d 3e 6d 6f 64 65 20 3d 20 70 2d 3e 63 4d 6f  p->mode = p->cMo
17b80 64 65 20 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74  de = MODE_Insert
17b90 3b 0a 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c  ;.    rc = shell
17ba0 5f 65 78 65 63 28 70 2c 20 73 53 65 6c 65 63 74  _exec(p, sSelect
17bb0 2e 7a 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  .z, 0);.    if( 
17bc0 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  (rc&0xff)==SQLIT
17bd0 45 5f 43 4f 52 52 55 50 54 20 29 7b 0a 20 20 20  E_CORRUPT ){.   
17be0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
17bf0 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 43  >out, "/****** C
17c00 4f 52 52 55 50 54 49 4f 4e 20 45 52 52 4f 52 20  ORRUPTION ERROR 
17c10 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20 20  *******/\n");.  
17c20 20 20 20 20 74 6f 67 67 6c 65 53 65 6c 65 63 74      toggleSelect
17c30 4f 72 64 65 72 28 70 2d 3e 64 62 29 3b 0a 20 20  Order(p->db);.  
17c40 20 20 20 20 73 68 65 6c 6c 5f 65 78 65 63 28 70      shell_exec(p
17c50 2c 20 73 53 65 6c 65 63 74 2e 7a 2c 20 30 29 3b  , sSelect.z, 0);
17c60 0a 20 20 20 20 20 20 74 6f 67 67 6c 65 53 65 6c  .      toggleSel
17c70 65 63 74 4f 72 64 65 72 28 70 2d 3e 64 62 29 3b  ectOrder(p->db);
17c80 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 44  .    }.    p->zD
17c90 65 73 74 54 61 62 6c 65 20 3d 20 73 61 76 65 64  estTable = saved
17ca0 44 65 73 74 54 61 62 6c 65 3b 0a 20 20 20 20 70  DestTable;.    p
17cb0 2d 3e 6d 6f 64 65 20 3d 20 73 61 76 65 64 4d 6f  ->mode = savedMo
17cc0 64 65 3b 0a 20 20 20 20 66 72 65 65 54 65 78 74  de;.    freeText
17cd0 28 26 73 54 61 62 6c 65 29 3b 0a 20 20 20 20 66  (&sTable);.    f
17ce0 72 65 65 54 65 78 74 28 26 73 53 65 6c 65 63 74  reeText(&sSelect
17cf0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
17d00 70 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20  p->nErr++;.  }. 
17d10 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
17d20 0a 2a 2a 20 52 75 6e 20 7a 51 75 65 72 79 2e 20  .** Run zQuery. 
17d30 20 55 73 65 20 64 75 6d 70 5f 63 61 6c 6c 62 61   Use dump_callba
17d40 63 6b 28 29 20 61 73 20 74 68 65 20 63 61 6c 6c  ck() as the call
17d50 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 73 6f 20  back routine so 
17d60 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  that.** the cont
17d70 65 6e 74 73 20 6f 66 20 74 68 65 20 71 75 65 72  ents of the quer
17d80 79 20 61 72 65 20 6f 75 74 70 75 74 20 61 73 20  y are output as 
17d90 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  SQL statements..
17da0 2a 2a 0a 2a 2a 20 49 66 20 77 65 20 67 65 74 20  **.** If we get 
17db0 61 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  a SQLITE_CORRUPT
17dc0 20 65 72 72 6f 72 2c 20 72 65 72 75 6e 20 74 68   error, rerun th
17dd0 65 20 71 75 65 72 79 20 61 66 74 65 72 20 61 70  e query after ap
17de0 70 65 6e 64 69 6e 67 0a 2a 2a 20 22 4f 52 44 45  pending.** "ORDE
17df0 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 22  R BY rowid DESC"
17e00 20 74 6f 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   to the end..*/.
17e10 73 74 61 74 69 63 20 69 6e 74 20 72 75 6e 5f 73  static int run_s
17e20 63 68 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79  chema_dump_query
17e30 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  (.  ShellState *
17e40 70 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  p,.  const char 
17e50 2a 7a 51 75 65 72 79 0a 29 7b 0a 20 20 69 6e 74  *zQuery.){.  int
17e60 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72   rc;.  char *zEr
17e70 72 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  r = 0;.  rc = sq
17e80 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
17e90 2c 20 7a 51 75 65 72 79 2c 20 64 75 6d 70 5f 63  , zQuery, dump_c
17ea0 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 26 7a 45 72  allback, p, &zEr
17eb0 72 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  r);.  if( rc==SQ
17ec0 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 29 7b 0a  LITE_CORRUPT ){.
17ed0 20 20 20 20 63 68 61 72 20 2a 7a 51 32 3b 0a 20      char *zQ2;. 
17ee0 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 73 74 72     int len = str
17ef0 6c 65 6e 33 30 28 7a 51 75 65 72 79 29 3b 0a 20  len30(zQuery);. 
17f00 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
17f10 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 43  >out, "/****** C
17f20 4f 52 52 55 50 54 49 4f 4e 20 45 52 52 4f 52 20  ORRUPTION ERROR 
17f30 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20 20  *******/\n");.  
17f40 20 20 69 66 28 20 7a 45 72 72 20 29 7b 0a 20 20    if( zErr ){.  
17f50 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
17f60 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a  p->out, "/******
17f70 20 25 73 20 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20   %s ******/\n", 
17f80 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 73 71 6c  zErr);.      sql
17f90 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b  ite3_free(zErr);
17fa0 0a 20 20 20 20 20 20 7a 45 72 72 20 3d 20 30 3b  .      zErr = 0;
17fb0 0a 20 20 20 20 7d 0a 20 20 20 20 7a 51 32 20 3d  .    }.    zQ2 =
17fc0 20 6d 61 6c 6c 6f 63 28 20 6c 65 6e 2b 31 30 30   malloc( len+100
17fd0 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 51 32 3d   );.    if( zQ2=
17fe0 3d 30 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a  =0 ) return rc;.
17ff0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
18000 69 6e 74 66 28 6c 65 6e 2b 31 30 30 2c 20 7a 51  intf(len+100, zQ
18010 32 2c 20 22 25 73 20 4f 52 44 45 52 20 42 59 20  2, "%s ORDER BY 
18020 72 6f 77 69 64 20 44 45 53 43 22 2c 20 7a 51 75  rowid DESC", zQu
18030 65 72 79 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  ery);.    rc = s
18040 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
18050 62 2c 20 7a 51 32 2c 20 64 75 6d 70 5f 63 61 6c  b, zQ2, dump_cal
18060 6c 62 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29  lback, p, &zErr)
18070 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a  ;.    if( rc ){.
18080 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
18090 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a  f(p->out, "/****
180a0 2a 2a 20 45 52 52 4f 52 3a 20 25 73 20 2a 2a 2a  ** ERROR: %s ***
180b0 2a 2a 2a 2f 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a  ***/\n", zErr);.
180c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
180d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
180e0 52 55 50 54 3b 0a 20 20 20 20 7d 0a 20 20 20 20  RUPT;.    }.    
180f0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
18100 72 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 51 32  r);.    free(zQ2
18110 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
18120 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 78  rc;.}../*.** Tex
18130 74 20 6f 66 20 61 20 68 65 6c 70 20 6d 65 73 73  t of a help mess
18140 61 67 65 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68  age.*/.static ch
18150 61 72 20 7a 48 65 6c 70 5b 5d 20 3d 0a 23 69 66  ar zHelp[] =.#if
18160 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
18170 48 41 56 45 5f 5a 4c 49 42 29 20 26 26 20 21 64  HAVE_ZLIB) && !d
18180 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
18190 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
181a0 0a 20 20 22 2e 61 72 63 68 69 76 65 20 2e 2e 2e  .  ".archive ...
181b0 20 20 20 20 20 20 20 20 20 20 20 4d 61 6e 61 67             Manag
181c0 65 20 53 51 4c 20 61 72 63 68 69 76 65 73 3a 20  e SQL archives: 
181d0 5c 22 2e 61 72 63 68 69 76 65 20 2d 2d 68 65 6c  \".archive --hel
181e0 70 5c 22 20 66 6f 72 20 64 65 74 61 69 6c 73 5c  p\" for details\
181f0 6e 22 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  n".#endif.#ifnde
18200 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
18210 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 22 2e  THORIZATION.  ".
18220 61 75 74 68 20 4f 4e 7c 4f 46 46 20 20 20 20 20  auth ON|OFF     
18230 20 20 20 20 20 20 53 68 6f 77 20 61 75 74 68 6f        Show autho
18240 72 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 73 5c  rizer callbacks\
18250 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 62 61  n".#endif.  ".ba
18260 63 6b 75 70 20 3f 44 42 3f 20 46 49 4c 45 20 20  ckup ?DB? FILE  
18270 20 20 20 20 42 61 63 6b 75 70 20 44 42 20 28 64      Backup DB (d
18280 65 66 61 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29  efault \"main\")
18290 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e   to FILE\n".  ".
182a0 62 61 69 6c 20 6f 6e 7c 6f 66 66 20 20 20 20 20  bail on|off     
182b0 20 20 20 20 20 20 53 74 6f 70 20 61 66 74 65 72        Stop after
182c0 20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72 6f   hitting an erro
182d0 72 2e 20 20 44 65 66 61 75 6c 74 20 4f 46 46 5c  r.  Default OFF\
182e0 6e 22 0a 20 20 22 2e 62 69 6e 61 72 79 20 6f 6e  n".  ".binary on
182f0 7c 6f 66 66 20 20 20 20 20 20 20 20 20 54 75 72  |off         Tur
18300 6e 20 62 69 6e 61 72 79 20 6f 75 74 70 75 74 20  n binary output 
18310 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 44 65 66 61  on or off.  Defa
18320 75 6c 74 20 4f 46 46 5c 6e 22 0a 20 20 22 2e 63  ult OFF\n".  ".c
18330 64 20 44 49 52 45 43 54 4f 52 59 20 20 20 20 20  d DIRECTORY     
18340 20 20 20 20 20 43 68 61 6e 67 65 20 74 68 65 20       Change the 
18350 77 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72  working director
18360 79 20 74 6f 20 44 49 52 45 43 54 4f 52 59 5c 6e  y to DIRECTORY\n
18370 22 0a 20 20 22 2e 63 68 61 6e 67 65 73 20 6f 6e  ".  ".changes on
18380 7c 6f 66 66 20 20 20 20 20 20 20 20 53 68 6f 77  |off        Show
18390 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
183a0 63 68 61 6e 67 65 64 20 62 79 20 53 51 4c 5c 6e  changed by SQL\n
183b0 22 0a 20 20 22 2e 63 68 65 63 6b 20 47 4c 4f 42  ".  ".check GLOB
183c0 20 20 20 20 20 20 20 20 20 20 20 20 46 61 69 6c              Fail
183d0 20 69 66 20 6f 75 74 70 75 74 20 73 69 6e 63 65   if output since
183e0 20 2e 74 65 73 74 63 61 73 65 20 64 6f 65 73 20   .testcase does 
183f0 6e 6f 74 20 6d 61 74 63 68 5c 6e 22 0a 20 20 22  not match\n".  "
18400 2e 63 6c 6f 6e 65 20 4e 45 57 44 42 20 20 20 20  .clone NEWDB    
18410 20 20 20 20 20 20 20 43 6c 6f 6e 65 20 64 61 74         Clone dat
18420 61 20 69 6e 74 6f 20 4e 45 57 44 42 20 66 72 6f  a into NEWDB fro
18430 6d 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 64  m the existing d
18440 61 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64  atabase\n".  ".d
18450 61 74 61 62 61 73 65 73 20 20 20 20 20 20 20 20  atabases        
18460 20 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73 20       List names 
18470 61 6e 64 20 66 69 6c 65 73 20 6f 66 20 61 74 74  and files of att
18480 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 5c  ached databases\
18490 6e 22 0a 20 20 22 2e 64 62 69 6e 66 6f 20 3f 44  n".  ".dbinfo ?D
184a0 42 3f 20 20 20 20 20 20 20 20 20 20 20 53 68 6f  B?           Sho
184b0 77 20 73 74 61 74 75 73 20 69 6e 66 6f 72 6d 61  w status informa
184c0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64  tion about the d
184d0 61 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64  atabase\n".  ".d
184e0 75 6d 70 20 3f 54 41 42 4c 45 3f 20 2e 2e 2e 20  ump ?TABLE? ... 
184f0 20 20 20 20 20 44 75 6d 70 20 74 68 65 20 64 61       Dump the da
18500 74 61 62 61 73 65 20 69 6e 20 61 6e 20 53 51 4c  tabase in an SQL
18510 20 74 65 78 74 20 66 6f 72 6d 61 74 5c 6e 22 0a   text format\n".
18520 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
18530 20 20 20 20 20 20 20 20 20 20 20 20 49 66 20 54              If T
18540 41 42 4c 45 20 73 70 65 63 69 66 69 65 64 2c 20  ABLE specified, 
18550 6f 6e 6c 79 20 64 75 6d 70 20 74 61 62 6c 65 73  only dump tables
18560 20 6d 61 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22   matching\n".  "
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 20 20 20 20 20 20 20 20 4c 49 4b 45 20 70 61           LIKE pa
18590 74 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a  ttern TABLE.\n".
185a0 20 20 22 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66 20    ".echo on|off 
185b0 20 20 20 20 20 20 20 20 20 20 54 75 72 6e 20 63            Turn c
185c0 6f 6d 6d 61 6e 64 20 65 63 68 6f 20 6f 6e 20 6f  ommand echo on o
185d0 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 65 71 70  r off\n".  ".eqp
185e0 20 6f 6e 7c 6f 66 66 7c 66 75 6c 6c 20 20 20 20   on|off|full    
185f0 20 20 20 45 6e 61 62 6c 65 20 6f 72 20 64 69 73     Enable or dis
18600 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 45  able automatic E
18610 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
18620 4e 5c 6e 22 0a 20 20 22 2e 65 78 63 65 6c 20 20  N\n".  ".excel  
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
18640 69 73 70 6c 61 79 20 74 68 65 20 6f 75 74 70 75  isplay the outpu
18650 74 20 6f 66 20 6e 65 78 74 20 63 6f 6d 6d 61 6e  t of next comman
18660 64 20 69 6e 20 61 20 73 70 72 65 61 64 73 68 65  d in a spreadshe
18670 65 74 5c 6e 22 0a 20 20 22 2e 65 78 69 74 20 20  et\n".  ".exit  
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18690 45 78 69 74 20 74 68 69 73 20 70 72 6f 67 72 61  Exit this progra
186a0 6d 5c 6e 22 0a 20 20 22 2e 65 78 70 65 72 74 20  m\n".  ".expert 
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
186c0 58 50 45 52 49 4d 45 4e 54 41 4c 2e 20 53 75 67  XPERIMENTAL. Sug
186d0 67 65 73 74 20 69 6e 64 65 78 65 73 20 66 6f 72  gest indexes for
186e0 20 73 70 65 63 69 66 69 65 64 20 71 75 65 72 69   specified queri
186f0 65 73 5c 6e 22 0a 2f 2a 20 42 65 63 61 75 73 65  es\n"./* Because
18700 20 65 78 70 6c 61 69 6e 20 6d 6f 64 65 20 63 6f   explain mode co
18710 6d 65 73 20 6f 6e 20 61 75 74 6f 6d 61 74 69 63  mes on automatic
18720 61 6c 6c 79 20 6e 6f 77 2c 20 74 68 65 20 22 2e  ally now, the ".
18730 65 78 70 6c 61 69 6e 22 20 6d 6f 64 65 0a 2a 2a  explain" mode.**
18740 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d   is removed from
18750 20 74 68 65 20 68 65 6c 70 20 73 63 72 65 65 6e   the help screen
18760 2e 20 20 49 74 20 69 73 20 73 74 69 6c 6c 20 73  .  It is still s
18770 75 70 70 6f 72 74 65 64 20 66 6f 72 20 6c 65 67  upported for leg
18780 61 63 79 2c 20 68 6f 77 65 76 65 72 20 2a 2f 0a  acy, however */.
18790 2f 2a 22 2e 65 78 70 6c 61 69 6e 20 3f 6f 6e 7c  /*".explain ?on|
187a0 6f 66 66 7c 61 75 74 6f 3f 20 54 75 72 6e 20 45  off|auto? Turn E
187b0 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 6d 6f  XPLAIN output mo
187c0 64 65 20 6f 6e 20 6f 72 20 6f 66 66 20 6f 72 20  de on or off or 
187d0 74 6f 20 61 75 74 6f 6d 61 74 69 63 5c 6e 22 2a  to automatic\n"*
187e0 2f 0a 20 20 22 2e 66 75 6c 6c 73 63 68 65 6d 61  /.  ".fullschema
187f0 20 3f 2d 2d 69 6e 64 65 6e 74 3f 20 53 68 6f 77   ?--indent? Show
18800 20 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20   schema and the 
18810 63 6f 6e 74 65 6e 74 20 6f 66 20 73 71 6c 69 74  content of sqlit
18820 65 5f 73 74 61 74 20 74 61 62 6c 65 73 5c 6e 22  e_stat tables\n"
18830 0a 20 20 22 2e 68 65 61 64 65 72 73 20 6f 6e 7c  .  ".headers on|
18840 6f 66 66 20 20 20 20 20 20 20 20 54 75 72 6e 20  off        Turn 
18850 64 69 73 70 6c 61 79 20 6f 66 20 68 65 61 64 65  display of heade
18860 72 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a  rs on or off\n".
18870 20 20 22 2e 68 65 6c 70 20 20 20 20 20 20 20 20    ".help        
18880 20 20 20 20 20 20 20 20 20 20 53 68 6f 77 20 74            Show t
18890 68 69 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20  his message\n". 
188a0 20 22 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54   ".import FILE T
188b0 41 42 4c 45 20 20 20 20 20 49 6d 70 6f 72 74 20  ABLE     Import 
188c0 64 61 74 61 20 66 72 6f 6d 20 46 49 4c 45 20 69  data from FILE i
188d0 6e 74 6f 20 54 41 42 4c 45 5c 6e 22 0a 23 69 66  nto TABLE\n".#if
188e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
188f0 5f 54 45 53 54 5f 43 4f 4e 54 52 4f 4c 0a 20 20  _TEST_CONTROL.  
18900 22 2e 69 6d 70 6f 73 74 65 72 20 49 4e 44 45 58  ".imposter INDEX
18910 20 54 41 42 4c 45 20 20 43 72 65 61 74 65 20 69   TABLE  Create i
18920 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 54 41  mposter table TA
18930 42 4c 45 20 6f 6e 20 69 6e 64 65 78 20 49 4e 44  BLE on index IND
18940 45 58 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22  EX\n".#endif.  "
18950 2e 69 6e 64 65 78 65 73 20 3f 54 41 42 4c 45 3f  .indexes ?TABLE?
18960 20 20 20 20 20 20 20 53 68 6f 77 20 6e 61 6d 65         Show name
18970 73 20 6f 66 20 61 6c 6c 20 69 6e 64 65 78 65 73  s of all indexes
18980 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189a0 49 66 20 54 41 42 4c 45 20 73 70 65 63 69 66 69  If TABLE specifi
189b0 65 64 2c 20 6f 6e 6c 79 20 73 68 6f 77 20 69 6e  ed, only show in
189c0 64 65 78 65 73 20 66 6f 72 20 74 61 62 6c 65 73  dexes for tables
189d0 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189f0 6d 61 74 63 68 69 6e 67 20 4c 49 4b 45 20 70 61  matching LIKE pa
18a00 74 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a  ttern TABLE.\n".
18a10 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
18a20 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 20 20 22  ABLE_IOTRACE.  "
18a30 2e 69 6f 74 72 61 63 65 20 46 49 4c 45 20 20 20  .iotrace FILE   
18a40 20 20 20 20 20 20 20 45 6e 61 62 6c 65 20 49 2f         Enable I/
18a50 4f 20 64 69 61 67 6e 6f 73 74 69 63 20 6c 6f 67  O diagnostic log
18a60 67 69 6e 67 20 74 6f 20 46 49 4c 45 5c 6e 22 0a  ging to FILE\n".
18a70 23 65 6e 64 69 66 0a 20 20 22 2e 6c 69 6d 69 74  #endif.  ".limit
18a80 20 3f 4c 49 4d 49 54 3f 20 3f 56 41 4c 3f 20 20   ?LIMIT? ?VAL?  
18a90 20 44 69 73 70 6c 61 79 20 6f 72 20 63 68 61 6e   Display or chan
18aa0 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ge the value of 
18ab0 61 6e 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5c  an SQLITE_LIMIT\
18ac0 6e 22 0a 20 20 22 2e 6c 69 6e 74 20 4f 50 54 49  n".  ".lint OPTI
18ad0 4f 4e 53 20 20 20 20 20 20 20 20 20 20 52 65 70  ONS          Rep
18ae0 6f 72 74 20 70 6f 74 65 6e 74 69 61 6c 20 73 63  ort potential sc
18af0 68 65 6d 61 20 69 73 73 75 65 73 2e 20 4f 70 74  hema issues. Opt
18b00 69 6f 6e 73 3a 5c 6e 22 0a 20 20 22 20 20 20 20  ions:\n".  "    
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 20 20 20 66 6b 65 79 2d 69 6e 64 65 78 65       fkey-indexe
18b30 73 20 20 20 20 20 46 69 6e 64 20 6d 69 73 73 69  s     Find missi
18b40 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69  ng foreign key i
18b50 6e 64 65 78 65 73 5c 6e 22 0a 23 69 66 6e 64 65  ndexes\n".#ifnde
18b60 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
18b70 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 22  AD_EXTENSION.  "
18b80 2e 6c 6f 61 64 20 46 49 4c 45 20 3f 45 4e 54 52  .load FILE ?ENTR
18b90 59 3f 20 20 20 20 20 4c 6f 61 64 20 61 6e 20 65  Y?     Load an e
18ba0 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79  xtension library
18bb0 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 6c  \n".#endif.  ".l
18bc0 6f 67 20 46 49 4c 45 7c 6f 66 66 20 20 20 20 20  og FILE|off     
18bd0 20 20 20 20 20 54 75 72 6e 20 6c 6f 67 67 69 6e       Turn loggin
18be0 67 20 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 46 49  g on or off.  FI
18bf0 4c 45 20 63 61 6e 20 62 65 20 73 74 64 65 72 72  LE can be stderr
18c00 2f 73 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 6d  /stdout\n".  ".m
18c10 6f 64 65 20 4d 4f 44 45 20 3f 54 41 42 4c 45 3f  ode MODE ?TABLE?
18c20 20 20 20 20 20 53 65 74 20 6f 75 74 70 75 74 20       Set output 
18c30 6d 6f 64 65 20 77 68 65 72 65 20 4d 4f 44 45 20  mode where MODE 
18c40 69 73 20 6f 6e 65 20 6f 66 3a 5c 6e 22 0a 20 20  is one of:\n".  
18c50 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
18c60 20 20 20 20 20 20 20 20 20 20 61 73 63 69 69 20            ascii 
18c70 20 20 20 43 6f 6c 75 6d 6e 73 2f 72 6f 77 73 20     Columns/rows 
18c80 64 65 6c 69 6d 69 74 65 64 20 62 79 20 30 78 31  delimited by 0x1
18c90 46 20 61 6e 64 20 30 78 31 45 5c 6e 22 0a 20 20  F and 0x1E\n".  
18ca0 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
18cb0 20 20 20 20 20 20 20 20 20 20 63 73 76 20 20 20            csv   
18cc0 20 20 20 43 6f 6d 6d 61 2d 73 65 70 61 72 61 74     Comma-separat
18cd0 65 64 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22  ed values\n".  "
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20           column 
18d00 20 20 4c 65 66 74 2d 61 6c 69 67 6e 65 64 20 63    Left-aligned c
18d10 6f 6c 75 6d 6e 73 2e 20 20 28 53 65 65 20 2e 77  olumns.  (See .w
18d20 69 64 74 68 29 5c 6e 22 0a 20 20 22 20 20 20 20  idth)\n".  "    
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 20 20 20 20 68 74 6d 6c 20 20 20 20 20 48 54       html     HT
18d50 4d 4c 20 3c 74 61 62 6c 65 3e 20 63 6f 64 65 5c  ML <table> code\
18d60 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18d80 6e 73 65 72 74 20 20 20 53 51 4c 20 69 6e 73 65  nsert   SQL inse
18d90 72 74 20 73 74 61 74 65 6d 65 6e 74 73 20 66 6f  rt statements fo
18da0 72 20 54 41 42 4c 45 5c 6e 22 0a 20 20 22 20 20  r TABLE\n".  "  
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dc0 20 20 20 20 20 20 20 6c 69 6e 65 20 20 20 20 20         line     
18dd0 4f 6e 65 20 76 61 6c 75 65 20 70 65 72 20 6c 69  One value per li
18de0 6e 65 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  ne\n".  "       
18df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e00 20 20 6c 69 73 74 20 20 20 20 20 56 61 6c 75 65    list     Value
18e10 73 20 64 65 6c 69 6d 69 74 65 64 20 62 79 20 5c  s delimited by \
18e20 22 7c 5c 22 5c 6e 22 0a 20 20 22 20 20 20 20 20  "|\"\n".  "     
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e40 20 20 20 20 71 75 6f 74 65 20 20 20 20 45 73 63      quote    Esc
18e50 61 70 65 20 61 6e 73 77 65 72 73 20 61 73 20 66  ape answers as f
18e60 6f 72 20 53 51 4c 5c 6e 22 0a 20 20 22 20 20 20  or SQL\n".  "   
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 20 20 74 61 62 73 20 20 20 20 20 54        tabs     T
18e90 61 62 2d 73 65 70 61 72 61 74 65 64 20 76 61 6c  ab-separated val
18ea0 75 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  ues\n".  "      
18eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ec0 20 20 20 74 63 6c 20 20 20 20 20 20 54 43 4c 20     tcl      TCL 
18ed0 6c 69 73 74 20 65 6c 65 6d 65 6e 74 73 5c 6e 22  list elements\n"
18ee0 0a 20 20 22 2e 6e 75 6c 6c 76 61 6c 75 65 20 53  .  ".nullvalue S
18ef0 54 52 49 4e 47 20 20 20 20 20 20 55 73 65 20 53  TRING      Use S
18f00 54 52 49 4e 47 20 69 6e 20 70 6c 61 63 65 20 6f  TRING in place o
18f10 66 20 4e 55 4c 4c 20 76 61 6c 75 65 73 5c 6e 22  f NULL values\n"
18f20 0a 20 20 22 2e 6f 6e 63 65 20 28 2d 65 7c 2d 78  .  ".once (-e|-x
18f30 7c 46 49 4c 45 29 20 20 20 20 20 4f 75 74 70 75  |FILE)     Outpu
18f40 74 20 66 6f 72 20 74 68 65 20 6e 65 78 74 20 53  t for the next S
18f50 51 4c 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20  QL command only 
18f60 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 20 20  to FILE\n".  "  
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f80 20 20 20 20 20 20 20 6f 72 20 69 6e 76 6f 6b 65         or invoke
18f90 20 73 79 73 74 65 6d 20 74 65 78 74 20 65 64 69   system text edi
18fa0 74 6f 72 20 28 2d 65 29 20 6f 72 20 73 70 72 65  tor (-e) or spre
18fb0 61 64 73 68 65 65 74 20 28 2d 78 29 5c 6e 22 0a  adsheet (-x)\n".
18fc0 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e 20 74              on t
18fe0 68 65 20 6f 75 74 70 75 74 2e 5c 6e 22 0a 20 20  he output.\n".  
18ff0 22 2e 6f 70 65 6e 20 3f 4f 50 54 49 4f 4e 53 3f  ".open ?OPTIONS?
19000 20 3f 46 49 4c 45 3f 20 43 6c 6f 73 65 20 65 78   ?FILE? Close ex
19010 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
19020 61 6e 64 20 72 65 6f 70 65 6e 20 46 49 4c 45 5c  and reopen FILE\
19030 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
19050 68 65 20 2d 2d 6e 65 77 20 6f 70 74 69 6f 6e 20  he --new option 
19060 73 74 61 72 74 73 20 77 69 74 68 20 61 6e 20 65  starts with an e
19070 6d 70 74 79 20 66 69 6c 65 5c 6e 22 0a 20 20 22  mpty file\n".  "
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 20 6f           Other o
190a0 70 74 69 6f 6e 73 3a 20 2d 2d 72 65 61 64 6f 6e  ptions: --readon
190b0 6c 79 20 2d 2d 61 70 70 65 6e 64 20 2d 2d 7a 69  ly --append --zi
190c0 70 5c 6e 22 0a 20 20 22 2e 6f 75 74 70 75 74 20  p\n".  ".output 
190d0 3f 46 49 4c 45 3f 20 20 20 20 20 20 20 20 20 53  ?FILE?         S
190e0 65 6e 64 20 6f 75 74 70 75 74 20 74 6f 20 46 49  end output to FI
190f0 4c 45 20 6f 72 20 73 74 64 6f 75 74 5c 6e 22 0a  LE or stdout\n".
19100 20 20 22 2e 70 72 69 6e 74 20 53 54 52 49 4e 47    ".print STRING
19110 2e 2e 2e 20 20 20 20 20 20 20 50 72 69 6e 74 20  ...       Print 
19120 6c 69 74 65 72 61 6c 20 53 54 52 49 4e 47 5c 6e  literal STRING\n
19130 22 0a 20 20 22 2e 70 72 6f 6d 70 74 20 4d 41 49  ".  ".prompt MAI
19140 4e 20 43 4f 4e 54 49 4e 55 45 20 20 52 65 70 6c  N CONTINUE  Repl
19150 61 63 65 20 74 68 65 20 73 74 61 6e 64 61 72 64  ace the standard
19160 20 70 72 6f 6d 70 74 73 5c 6e 22 0a 20 20 22 2e   prompts\n".  ".
19170 71 75 69 74 20 20 20 20 20 20 20 20 20 20 20 20  quit            
19180 20 20 20 20 20 20 45 78 69 74 20 74 68 69 73 20        Exit this 
19190 70 72 6f 67 72 61 6d 5c 6e 22 0a 20 20 22 2e 72  program\n".  ".r
191a0 65 61 64 20 46 49 4c 45 4e 41 4d 45 20 20 20 20  ead FILENAME    
191b0 20 20 20 20 20 45 78 65 63 75 74 65 20 53 51 4c       Execute SQL
191c0 20 69 6e 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 0a   in FILENAME\n".
191d0 20 20 22 2e 72 65 73 74 6f 72 65 20 3f 44 42 3f    ".restore ?DB?
191e0 20 46 49 4c 45 20 20 20 20 20 52 65 73 74 6f 72   FILE     Restor
191f0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 44 42 20  e content of DB 
19200 28 64 65 66 61 75 6c 74 20 5c 22 6d 61 69 6e 5c  (default \"main\
19210 22 29 20 66 72 6f 6d 20 46 49 4c 45 5c 6e 22 0a  ") from FILE\n".
19220 20 20 22 2e 73 61 76 65 20 46 49 4c 45 20 20 20    ".save FILE   
19230 20 20 20 20 20 20 20 20 20 20 57 72 69 74 65 20            Write 
19240 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
19250 73 65 20 69 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a  se into FILE\n".
19260 20 20 22 2e 73 63 61 6e 73 74 61 74 73 20 6f 6e    ".scanstats on
19270 7c 6f 66 66 20 20 20 20 20 20 54 75 72 6e 20 73  |off      Turn s
19280 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e  qlite3_stmt_scan
19290 73 74 61 74 75 73 28 29 20 6d 65 74 72 69 63 73  status() metrics
192a0 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20 20   on or off\n".  
192b0 22 2e 73 63 68 65 6d 61 20 3f 50 41 54 54 45 52  ".schema ?PATTER
192c0 4e 3f 20 20 20 20 20 20 53 68 6f 77 20 74 68 65  N?      Show the
192d0 20 43 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e   CREATE statemen
192e0 74 73 20 6d 61 74 63 68 69 6e 67 20 50 41 54 54  ts matching PATT
192f0 45 52 4e 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  ERN\n".  "      
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19310 20 20 20 20 41 64 64 20 2d 2d 69 6e 64 65 6e 74      Add --indent
19320 20 66 6f 72 20 70 72 65 74 74 79 2d 70 72 69 6e   for pretty-prin
19330 74 69 6e 67 5c 6e 22 0a 20 20 22 2e 73 65 6c 66  ting\n".  ".self
19340 74 65 73 74 20 3f 2d 2d 69 6e 69 74 3f 20 20 20  test ?--init?   
19350 20 20 52 75 6e 20 74 65 73 74 73 20 64 65 66 69    Run tests defi
19360 6e 65 64 20 69 6e 20 74 68 65 20 53 45 4c 46 54  ned in the SELFT
19370 45 53 54 20 74 61 62 6c 65 5c 6e 22 0a 20 20 22  EST table\n".  "
19380 2e 73 65 70 61 72 61 74 6f 72 20 43 4f 4c 20 3f  .separator COL ?
19390 52 4f 57 3f 20 20 20 43 68 61 6e 67 65 20 74 68  ROW?   Change th
193a0 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74  e column separat
193b0 6f 72 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 6c  or and optionall
193c0 79 20 74 68 65 20 72 6f 77 5c 6e 22 0a 20 20 22  y the row\n".  "
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 20 20 20 20 20 20 20 20 73 65 70 61 72 61 74           separat
193f0 6f 72 20 66 6f 72 20 62 6f 74 68 20 74 68 65 20  or for both the 
19400 6f 75 74 70 75 74 20 6d 6f 64 65 20 61 6e 64 20  output mode and 
19410 2e 69 6d 70 6f 72 74 5c 6e 22 0a 23 69 66 20 64  .import\n".#if d
19420 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
19430 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 20 20  ABLE_SESSION).  
19440 22 2e 73 65 73 73 69 6f 6e 20 43 4d 44 20 2e 2e  ".session CMD ..
19450 2e 20 20 20 20 20 20 20 43 72 65 61 74 65 20 6f  .       Create o
19460 72 20 63 6f 6e 74 72 6f 6c 20 73 65 73 73 69 6f  r control sessio
19470 6e 73 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22  ns\n".#endif.  "
19480 2e 73 68 61 33 73 75 6d 20 3f 4f 50 54 49 4f 4e  .sha3sum ?OPTION
19490 53 2e 2e 2e 3f 20 20 43 6f 6d 70 75 74 65 20 61  S...?  Compute a
194a0 20 53 48 41 33 20 68 61 73 68 20 6f 66 20 64 61   SHA3 hash of da
194b0 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74 5c 6e  tabase content\n
194c0 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ".#ifndef SQLITE
194d0 5f 4e 4f 48 41 56 45 5f 53 59 53 54 45 4d 0a 20  _NOHAVE_SYSTEM. 
194e0 20 22 2e 73 68 65 6c 6c 20 43 4d 44 20 41 52 47   ".shell CMD ARG
194f0 53 2e 2e 2e 20 20 20 20 20 52 75 6e 20 43 4d 44  S...     Run CMD
19500 20 41 52 47 53 2e 2e 2e 20 69 6e 20 61 20 73 79   ARGS... in a sy
19510 73 74 65 6d 20 73 68 65 6c 6c 5c 6e 22 0a 23 65  stem shell\n".#e
19520 6e 64 69 66 0a 20 20 22 2e 73 68 6f 77 20 20 20  ndif.  ".show   
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
19540 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20  how the current 
19550 76 61 6c 75 65 73 20 66 6f 72 20 76 61 72 69 6f  values for vario
19560 75 73 20 73 65 74 74 69 6e 67 73 5c 6e 22 0a 20  us settings\n". 
19570 20 22 2e 73 74 61 74 73 20 3f 6f 6e 7c 6f 66 66   ".stats ?on|off
19580 3f 20 20 20 20 20 20 20 20 53 68 6f 77 20 73 74  ?        Show st
19590 61 74 73 20 6f 72 20 74 75 72 6e 20 73 74 61 74  ats or turn stat
195a0 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 23  s on or off\n".#
195b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 4f  ifndef SQLITE_NO
195c0 48 41 56 45 5f 53 59 53 54 45 4d 0a 20 20 22 2e  HAVE_SYSTEM.  ".
195d0 73 79 73 74 65 6d 20 43 4d 44 20 41 52 47 53 2e  system CMD ARGS.
195e0 2e 2e 20 20 20 20 52 75 6e 20 43 4d 44 20 41 52  ..    Run CMD AR
195f0 47 53 2e 2e 2e 20 69 6e 20 61 20 73 79 73 74 65  GS... in a syste
19600 6d 20 73 68 65 6c 6c 5c 6e 22 0a 23 65 6e 64 69  m shell\n".#endi
19610 66 0a 20 20 22 2e 74 61 62 6c 65 73 20 3f 54 41  f.  ".tables ?TA
19620 42 4c 45 3f 20 20 20 20 20 20 20 20 4c 69 73 74  BLE?        List
19630 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73   names of tables
19640 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 49 66 20 54 41 42 4c 45 20 73 70 65 63 69 66 69  If TABLE specifi
19670 65 64 2c 20 6f 6e 6c 79 20 6c 69 73 74 20 74 61  ed, only list ta
19680 62 6c 65 73 20 6d 61 74 63 68 69 6e 67 5c 6e 22  bles matching\n"
19690 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 49 4b               LIK
196b0 45 20 70 61 74 74 65 72 6e 20 54 41 42 4c 45 2e  E pattern TABLE.
196c0 5c 6e 22 0a 20 20 22 2e 74 65 73 74 63 61 73 65  \n".  ".testcase
196d0 20 4e 41 4d 45 20 20 20 20 20 20 20 20 20 42 65   NAME         Be
196e0 67 69 6e 20 72 65 64 69 72 65 63 74 69 6e 67 20  gin redirecting 
196f0 6f 75 74 70 75 74 20 74 6f 20 27 74 65 73 74 63  output to 'testc
19700 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c 6e 22 0a  ase-out.txt'\n".
19710 20 20 22 2e 74 69 6d 65 6f 75 74 20 4d 53 20 20    ".timeout MS  
19720 20 20 20 20 20 20 20 20 20 20 54 72 79 20 6f 70            Try op
19730 65 6e 69 6e 67 20 6c 6f 63 6b 65 64 20 74 61 62  ening locked tab
19740 6c 65 73 20 66 6f 72 20 4d 53 20 6d 69 6c 6c 69  les for MS milli
19750 73 65 63 6f 6e 64 73 5c 6e 22 0a 20 20 22 2e 74  seconds\n".  ".t
19760 69 6d 65 72 20 6f 6e 7c 6f 66 66 20 20 20 20 20  imer on|off     
19770 20 20 20 20 20 54 75 72 6e 20 53 51 4c 20 74 69       Turn SQL ti
19780 6d 65 72 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22  mer on or off\n"
19790 0a 20 20 22 2e 74 72 61 63 65 20 46 49 4c 45 7c  .  ".trace FILE|
197a0 6f 66 66 20 20 20 20 20 20 20 20 4f 75 74 70 75  off        Outpu
197b0 74 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65  t each SQL state
197c0 6d 65 6e 74 20 61 73 20 69 74 20 69 73 20 72 75  ment as it is ru
197d0 6e 5c 6e 22 0a 20 20 22 2e 76 66 73 69 6e 66 6f  n\n".  ".vfsinfo
197e0 20 3f 41 55 58 3f 20 20 20 20 20 20 20 20 20 49   ?AUX?         I
197f0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
19800 20 74 68 65 20 74 6f 70 2d 6c 65 76 65 6c 20 56   the top-level V
19810 46 53 5c 6e 22 0a 20 20 22 2e 76 66 73 6c 69 73  FS\n".  ".vfslis
19820 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
19830 4c 69 73 74 20 61 6c 6c 20 61 76 61 69 6c 61 62  List all availab
19840 6c 65 20 56 46 53 65 73 5c 6e 22 0a 20 20 22 2e  le VFSes\n".  ".
19850 76 66 73 6e 61 6d 65 20 3f 41 55 58 3f 20 20 20  vfsname ?AUX?   
19860 20 20 20 20 20 20 50 72 69 6e 74 20 74 68 65 20        Print the 
19870 6e 61 6d 65 20 6f 66 20 74 68 65 20 56 46 53 20  name of the VFS 
19880 73 74 61 63 6b 5c 6e 22 0a 20 20 22 2e 77 69 64  stack\n".  ".wid
19890 74 68 20 4e 55 4d 31 20 4e 55 4d 32 20 2e 2e 2e  th NUM1 NUM2 ...
198a0 20 20 20 53 65 74 20 63 6f 6c 75 6d 6e 20 77 69     Set column wi
198b0 64 74 68 73 20 66 6f 72 20 5c 22 63 6f 6c 75 6d  dths for \"colum
198c0 6e 5c 22 20 6d 6f 64 65 5c 6e 22 0a 20 20 22 20  n\" mode\n".  " 
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 20 20 20 20 4e 65 67 61 74 69 76 65          Negative
198f0 20 76 61 6c 75 65 73 20 72 69 67 68 74 2d 6a 75   values right-ju
19900 73 74 69 66 79 5c 6e 22 0a 3b 0a 0a 23 69 66 20  stify\n".;..#if 
19910 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
19920 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 2f  NABLE_SESSION)./
19930 2a 0a 2a 2a 20 50 72 69 6e 74 20 68 65 6c 70 20  *.** Print help 
19940 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20  information for 
19950 74 68 65 20 22 2e 73 65 73 73 69 6f 6e 73 22 20  the ".sessions" 
19960 63 6f 6d 6d 61 6e 64 0a 2a 2f 0a 76 6f 69 64 20  command.*/.void 
19970 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28 53 68 65  session_help(She
19980 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 72  llState *p){.  r
19990 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
199a0 2c 0a 20 20 20 20 22 2e 73 65 73 73 69 6f 6e 20  ,.    ".session 
199b0 3f 4e 41 4d 45 3f 20 53 55 42 43 4f 4d 4d 41 4e  ?NAME? SUBCOMMAN
199c0 44 20 3f 41 52 47 53 2e 2e 2e 3f 5c 6e 22 0a 20  D ?ARGS...?\n". 
199d0 20 20 20 22 49 66 20 3f 4e 41 4d 45 3f 20 69 73     "If ?NAME? is
199e0 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 20 66 69   omitted, the fi
199f0 72 73 74 20 64 65 66 69 6e 65 64 20 73 65 73 73  rst defined sess
19a00 69 6f 6e 20 69 73 20 75 73 65 64 2e 5c 6e 22 0a  ion is used.\n".
19a10 20 20 20 20 22 53 75 62 63 6f 6d 6d 61 6e 64 73      "Subcommands
19a20 3a 5c 6e 22 0a 20 20 20 20 22 20 20 20 61 74 74  :\n".    "   att
19a30 61 63 68 20 54 41 42 4c 45 20 20 20 20 20 20 20  ach TABLE       
19a40 20 20 20 20 20 20 41 74 74 61 63 68 20 54 41 42        Attach TAB
19a50 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20 20 63 68  LE\n".    "   ch
19a60 61 6e 67 65 73 65 74 20 46 49 4c 45 20 20 20 20  angeset FILE    
19a70 20 20 20 20 20 20 20 57 72 69 74 65 20 61 20 63         Write a c
19a80 68 61 6e 67 65 73 65 74 20 69 6e 74 6f 20 46 49  hangeset into FI
19a90 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20 20 63 6c  LE\n".    "   cl
19aa0 6f 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  ose             
19ab0 20 20 20 20 20 20 20 43 6c 6f 73 65 20 6f 6e 65         Close one
19ac0 20 73 65 73 73 69 6f 6e 5c 6e 22 0a 20 20 20 20   session\n".    
19ad0 22 20 20 20 65 6e 61 62 6c 65 20 3f 42 4f 4f 4c  "   enable ?BOOL
19ae0 45 41 4e 3f 20 20 20 20 20 20 20 20 20 53 65 74  EAN?         Set
19af0 20 6f 72 20 71 75 65 72 79 20 74 68 65 20 65 6e   or query the en
19b00 61 62 6c 65 20 62 69 74 5c 6e 22 0a 20 20 20 20  able bit\n".    
19b10 22 20 20 20 66 69 6c 74 65 72 20 47 4c 4f 42 2e  "   filter GLOB.
19b20 2e 2e 20 20 20 20 20 20 20 20 20 20 20 52 65 6a  ..           Rej
19b30 65 63 74 20 74 61 62 6c 65 73 20 6d 61 74 63 68  ect tables match
19b40 69 6e 67 20 47 4c 4f 42 73 5c 6e 22 0a 20 20 20  ing GLOBs\n".   
19b50 20 22 20 20 20 69 6e 64 69 72 65 63 74 20 3f 42   "   indirect ?B
19b60 4f 4f 4c 45 41 4e 3f 20 20 20 20 20 20 20 4d 61  OOLEAN?       Ma
19b70 72 6b 20 6f 72 20 71 75 65 72 79 20 74 68 65 20  rk or query the 
19b80 69 6e 64 69 72 65 63 74 20 73 74 61 74 75 73 5c  indirect status\
19b90 6e 22 0a 20 20 20 20 22 20 20 20 69 73 65 6d 70  n".    "   isemp
19ba0 74 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ty              
19bb0 20 20 20 20 51 75 65 72 79 20 77 68 65 74 68 65      Query whethe
19bc0 72 20 74 68 65 20 73 65 73 73 69 6f 6e 20 69 73  r the session is
19bd0 20 65 6d 70 74 79 5c 6e 22 0a 20 20 20 20 22 20   empty\n".    " 
19be0 20 20 6c 69 73 74 20 20 20 20 20 20 20 20 20 20    list          
19bf0 20 20 20 20 20 20 20 20 20 20 20 4c 69 73 74 20             List 
19c00 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 73  currently open s
19c10 65 73 73 69 6f 6e 20 6e 61 6d 65 73 5c 6e 22 0a  ession names\n".
19c20 20 20 20 20 22 20 20 20 6f 70 65 6e 20 44 42 20      "   open DB 
19c30 4e 41 4d 45 20 20 20 20 20 20 20 20 20 20 20 20  NAME            
19c40 20 4f 70 65 6e 20 61 20 6e 65 77 20 73 65 73 73   Open a new sess
19c50 69 6f 6e 20 6f 6e 20 44 42 5c 6e 22 0a 20 20 20  ion on DB\n".   
19c60 20 22 20 20 20 70 61 74 63 68 73 65 74 20 46 49   "   patchset FI
19c70 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 57 72  LE            Wr
19c80 69 74 65 20 61 20 70 61 74 63 68 73 65 74 20 69  ite a patchset i
19c90 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 29 3b  nto FILE\n".  );
19ca0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 46  .}.#endif.../* F
19cb0 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
19cc0 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 70   */.static int p
19cd0 72 6f 63 65 73 73 5f 69 6e 70 75 74 28 53 68 65  rocess_input(She
19ce0 6c 6c 53 74 61 74 65 20 2a 70 2c 20 46 49 4c 45  llState *p, FILE
19cf0 20 2a 69 6e 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65   *in);../*.** Re
19d00 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ad the content o
19d10 66 20 66 69 6c 65 20 7a 4e 61 6d 65 20 69 6e 74  f file zName int
19d20 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  o memory obtaine
19d30 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d  d from sqlite3_m
19d40 61 6c 6c 6f 63 36 34 28 29 0a 2a 2a 20 61 6e 64  alloc64().** and
19d50 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65   return a pointe
19d60 72 20 74 6f 20 74 68 65 20 62 75 66 66 65 72 2e  r to the buffer.
19d70 20 54 68 65 20 63 61 6c 6c 65 72 20 69 73 20 72   The caller is r
19d80 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 66  esponsible for f
19d90 72 65 65 69 6e 67 0a 2a 2a 20 74 68 65 20 6d 65  reeing.** the me
19da0 6d 6f 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 70  mory..**.** If p
19db0 61 72 61 6d 65 74 65 72 20 70 6e 42 79 74 65 20  arameter pnByte 
19dc0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 28 2a 70  is not NULL, (*p
19dd0 6e 42 79 74 65 29 20 69 73 20 73 65 74 20 74 6f  nByte) is set to
19de0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
19df0 79 74 65 73 0a 2a 2a 20 72 65 61 64 2e 0a 2a 2a  ytes.** read..**
19e00 0a 2a 2a 20 46 6f 72 20 63 6f 6e 76 65 6e 69 65  .** For convenie
19e10 6e 63 65 2c 20 61 20 6e 75 6c 2d 74 65 72 6d 69  nce, a nul-termi
19e20 6e 61 74 6f 72 20 62 79 74 65 20 69 73 20 61 6c  nator byte is al
19e30 77 61 79 73 20 61 70 70 65 6e 64 65 64 20 74 6f  ways appended to
19e40 20 74 68 65 20 64 61 74 61 20 72 65 61 64 0a 2a   the data read.*
19e50 2a 20 66 72 6f 6d 20 74 68 65 20 66 69 6c 65 20  * from the file 
19e60 62 65 66 6f 72 65 20 74 68 65 20 62 75 66 66 65  before the buffe
19e70 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 54  r is returned. T
19e80 68 69 73 20 62 79 74 65 20 69 73 20 6e 6f 74 20  his byte is not 
19e90 69 6e 63 6c 75 64 65 64 20 69 6e 0a 2a 2a 20 74  included in.** t
19ea0 68 65 20 66 69 6e 61 6c 20 76 61 6c 75 65 20 6f  he final value o
19eb0 66 20 28 2a 70 6e 42 79 74 65 29 2c 20 69 66 20  f (*pnByte), if 
19ec0 61 70 70 6c 69 63 61 62 6c 65 2e 0a 2a 2a 0a 2a  applicable..**.*
19ed0 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e  * NULL is return
19ee0 65 64 20 69 66 20 61 6e 79 20 65 72 72 6f 72 20  ed if any error 
19ef0 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20  is encountered. 
19f00 54 68 65 20 66 69 6e 61 6c 20 76 61 6c 75 65 20  The final value 
19f10 6f 66 20 2a 70 6e 42 79 74 65 0a 2a 2a 20 69 73  of *pnByte.** is
19f20 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 20 74 68   undefined in th
19f30 69 73 20 63 61 73 65 2e 0a 2a 2f 0a 73 74 61 74  is case..*/.stat
19f40 69 63 20 63 68 61 72 20 2a 72 65 61 64 46 69 6c  ic char *readFil
19f50 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  e(const char *zN
19f60 61 6d 65 2c 20 69 6e 74 20 2a 70 6e 42 79 74 65  ame, int *pnByte
19f70 29 7b 0a 20 20 46 49 4c 45 20 2a 69 6e 20 3d 20  ){.  FILE *in = 
19f80 66 6f 70 65 6e 28 7a 4e 61 6d 65 2c 20 22 72 62  fopen(zName, "rb
19f90 22 29 3b 0a 20 20 6c 6f 6e 67 20 6e 49 6e 3b 0a  ");.  long nIn;.
19fa0 20 20 73 69 7a 65 5f 74 20 6e 52 65 61 64 3b 0a    size_t nRead;.
19fb0 20 20 63 68 61 72 20 2a 70 42 75 66 3b 0a 20 20    char *pBuf;.  
19fc0 69 66 28 20 69 6e 3d 3d 30 20 29 20 72 65 74 75  if( in==0 ) retu
19fd0 72 6e 20 30 3b 0a 20 20 66 73 65 65 6b 28 69 6e  rn 0;.  fseek(in
19fe0 2c 20 30 2c 20 53 45 45 4b 5f 45 4e 44 29 3b 0a  , 0, SEEK_END);.
19ff0 20 20 6e 49 6e 20 3d 20 66 74 65 6c 6c 28 69 6e    nIn = ftell(in
1a000 29 3b 0a 20 20 72 65 77 69 6e 64 28 69 6e 29 3b  );.  rewind(in);
1a010 0a 20 20 70 42 75 66 20 3d 20 73 71 6c 69 74 65  .  pBuf = sqlite
1a020 33 5f 6d 61 6c 6c 6f 63 36 34 28 20 6e 49 6e 2b  3_malloc64( nIn+
1a030 31 20 29 3b 0a 20 20 69 66 28 20 70 42 75 66 3d  1 );.  if( pBuf=
1a040 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
1a050 20 6e 52 65 61 64 20 3d 20 66 72 65 61 64 28 70   nRead = fread(p
1a060 42 75 66 2c 20 6e 49 6e 2c 20 31 2c 20 69 6e 29  Buf, nIn, 1, in)
1a070 3b 0a 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a  ;.  fclose(in);.
1a080 20 20 69 66 28 20 6e 52 65 61 64 21 3d 31 20 29    if( nRead!=1 )
1a090 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  {.    sqlite3_fr
1a0a0 65 65 28 70 42 75 66 29 3b 0a 20 20 20 20 72 65  ee(pBuf);.    re
1a0b0 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 70 42  turn 0;.  }.  pB
1a0c0 75 66 5b 6e 49 6e 5d 20 3d 20 30 3b 0a 20 20 69  uf[nIn] = 0;.  i
1a0d0 66 28 20 70 6e 42 79 74 65 20 29 20 2a 70 6e 42  f( pnByte ) *pnB
1a0e0 79 74 65 20 3d 20 6e 49 6e 3b 0a 20 20 72 65 74  yte = nIn;.  ret
1a0f0 75 72 6e 20 70 42 75 66 3b 0a 7d 0a 0a 23 69 66  urn pBuf;.}..#if
1a100 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1a110 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a  ENABLE_SESSION).
1a120 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 73 69  /*.** Close a si
1a130 6e 67 6c 65 20 4f 70 65 6e 53 65 73 73 69 6f 6e  ngle OpenSession
1a140 20 6f 62 6a 65 63 74 20 61 6e 64 20 72 65 6c 65   object and rele
1a150 61 73 65 20 61 6c 6c 20 6f 66 20 69 74 73 20 61  ase all of its a
1a160 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 72 65 73  ssociated.** res
1a170 6f 75 72 63 65 73 2e 0a 2a 2f 0a 73 74 61 74 69  ources..*/.stati
1a180 63 20 76 6f 69 64 20 73 65 73 73 69 6f 6e 5f 63  c void session_c
1a190 6c 6f 73 65 28 4f 70 65 6e 53 65 73 73 69 6f 6e  lose(OpenSession
1a1a0 20 2a 70 53 65 73 73 69 6f 6e 29 7b 0a 20 20 69   *pSession){.  i
1a1b0 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 73  nt i;.  sqlite3s
1a1c0 65 73 73 69 6f 6e 5f 64 65 6c 65 74 65 28 70 53  ession_delete(pS
1a1d0 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 73 71  ession->p);.  sq
1a1e0 6c 69 74 65 33 5f 66 72 65 65 28 70 53 65 73 73  lite3_free(pSess
1a1f0 69 6f 6e 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 66  ion->zName);.  f
1a200 6f 72 28 69 3d 30 3b 20 69 3c 70 53 65 73 73 69  or(i=0; i<pSessi
1a210 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20 69 2b 2b  on->nFilter; i++
1a220 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  ){.    sqlite3_f
1a230 72 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a  ree(pSession->az
1a240 46 69 6c 74 65 72 5b 69 5d 29 3b 0a 20 20 7d 0a  Filter[i]);.  }.
1a250 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70    sqlite3_free(p
1a260 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65  Session->azFilte
1a270 72 29 3b 0a 20 20 6d 65 6d 73 65 74 28 70 53 65  r);.  memset(pSe
1a280 73 73 69 6f 6e 2c 20 30 2c 20 73 69 7a 65 6f 66  ssion, 0, sizeof
1a290 28 4f 70 65 6e 53 65 73 73 69 6f 6e 29 29 3b 0a  (OpenSession));.
1a2a0 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
1a2b0 43 6c 6f 73 65 20 61 6c 6c 20 4f 70 65 6e 53 65  Close all OpenSe
1a2c0 73 73 69 6f 6e 20 6f 62 6a 65 63 74 73 20 61 6e  ssion objects an
1a2d0 64 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 61 73  d release all as
1a2e0 73 6f 63 69 61 74 65 64 20 72 65 73 6f 75 72 63  sociated resourc
1a2f0 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  es..*/.#if defin
1a300 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1a310 5f 53 45 53 53 49 4f 4e 29 0a 73 74 61 74 69 63  _SESSION).static
1a320 20 76 6f 69 64 20 73 65 73 73 69 6f 6e 5f 63 6c   void session_cl
1a330 6f 73 65 5f 61 6c 6c 28 53 68 65 6c 6c 53 74 61  ose_all(ShellSta
1a340 74 65 20 2a 70 29 7b 0a 20 20 69 6e 74 20 69 3b  te *p){.  int i;
1a350 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d  .  for(i=0; i<p-
1a360 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b 29 7b  >nSession; i++){
1a370 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 63 6c 6f  .    session_clo
1a380 73 65 28 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b  se(&p->aSession[
1a390 69 5d 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6e 53  i]);.  }.  p->nS
1a3a0 65 73 73 69 6f 6e 20 3d 20 30 3b 0a 7d 0a 23 65  ession = 0;.}.#e
1a3b0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 65 73  lse.# define ses
1a3c0 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c 6c 28 58  sion_close_all(X
1a3d0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1a3e0 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  Implementation o
1a3f0 66 20 74 68 65 20 78 46 69 6c 74 65 72 20 66 75  f the xFilter fu
1a400 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 6f 70  nction for an op
1a410 65 6e 20 73 65 73 73 69 6f 6e 2e 20 20 4f 6d 69  en session.  Omi
1a420 74 0a 2a 2a 20 61 6e 79 20 74 61 62 6c 65 73 20  t.** any tables 
1a430 6e 61 6d 65 64 20 62 79 20 22 2e 73 65 73 73 69  named by ".sessi
1a440 6f 6e 20 66 69 6c 74 65 72 22 20 62 75 74 20 6c  on filter" but l
1a450 65 74 20 61 6c 6c 20 6f 74 68 65 72 20 74 61 62  et all other tab
1a460 6c 65 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 23  le through..*/.#
1a470 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1a480 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e  E_ENABLE_SESSION
1a490 29 0a 73 74 61 74 69 63 20 69 6e 74 20 73 65 73  ).static int ses
1a4a0 73 69 6f 6e 5f 66 69 6c 74 65 72 28 76 6f 69 64  sion_filter(void
1a4b0 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74 20 63 68   *pCtx, const ch
1a4c0 61 72 20 2a 7a 54 61 62 29 7b 0a 20 20 4f 70 65  ar *zTab){.  Ope
1a4d0 6e 53 65 73 73 69 6f 6e 20 2a 70 53 65 73 73 69  nSession *pSessi
1a4e0 6f 6e 20 3d 20 28 4f 70 65 6e 53 65 73 73 69 6f  on = (OpenSessio
1a4f0 6e 2a 29 70 43 74 78 3b 0a 20 20 69 6e 74 20 69  n*)pCtx;.  int i
1a500 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
1a510 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72  Session->nFilter
1a520 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
1a530 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28  sqlite3_strglob(
1a540 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74  pSession->azFilt
1a550 65 72 5b 69 5d 2c 20 7a 54 61 62 29 3d 3d 30 20  er[i], zTab)==0 
1a560 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a  ) return 0;.  }.
1a570 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
1a580 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20  ndif../*.** Try 
1a590 74 6f 20 64 65 64 75 63 65 20 74 68 65 20 74 79  to deduce the ty
1a5a0 70 65 20 6f 66 20 66 69 6c 65 20 66 6f 72 20 7a  pe of file for z
1a5b0 4e 61 6d 65 20 62 61 73 65 64 20 6f 6e 20 69 74  Name based on it
1a5c0 73 20 63 6f 6e 74 65 6e 74 2e 20 20 52 65 74 75  s content.  Retu
1a5d0 72 6e 0a 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65  rn.** one of the
1a5e0 20 53 48 45 4c 4c 5f 4f 50 45 4e 5f 2a 20 63 6f   SHELL_OPEN_* co
1a5f0 6e 73 74 61 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  nstants..**.** I
1a600 66 20 74 68 65 20 66 69 6c 65 20 64 6f 65 73 20  f the file does 
1a610 6e 6f 74 20 65 78 69 73 74 20 6f 72 20 69 73 20  not exist or is 
1a620 65 6d 70 74 79 20 62 75 74 20 69 74 73 20 6e 61  empty but its na
1a630 6d 65 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20  me looks like a 
1a640 5a 49 50 0a 2a 2a 20 61 72 63 68 69 76 65 20 61  ZIP.** archive a
1a650 6e 64 20 74 68 65 20 64 66 6c 74 5a 69 70 20 66  nd the dfltZip f
1a660 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68 65  lag is true, the
1a670 6e 20 61 73 73 75 6d 65 20 69 74 20 69 73 20 61  n assume it is a
1a680 20 5a 49 50 20 61 72 63 68 69 76 65 2e 0a 2a 2a   ZIP archive..**
1a690 20 4f 74 68 65 72 77 69 73 65 2c 20 61 73 73 75   Otherwise, assu
1a6a0 6d 65 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 64  me an ordinary d
1a6b0 61 74 61 62 61 73 65 20 72 65 67 61 72 64 6c 65  atabase regardle
1a6c0 73 73 20 6f 66 20 74 68 65 20 66 69 6c 65 6e 61  ss of the filena
1a6d0 6d 65 20 69 66 0a 2a 2a 20 74 68 65 20 74 79 70  me if.** the typ
1a6e0 65 20 63 61 6e 6e 6f 74 20 62 65 20 64 65 74 65  e cannot be dete
1a6f0 72 6d 69 6e 65 64 20 66 72 6f 6d 20 63 6f 6e 74  rmined from cont
1a700 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ent..*/.static i
1a710 6e 74 20 64 65 64 75 63 65 44 61 74 61 62 61 73  nt deduceDatabas
1a720 65 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72  eType(const char
1a730 20 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 64 66 6c   *zName, int dfl
1a740 74 5a 69 70 29 7b 0a 20 20 46 49 4c 45 20 2a 66  tZip){.  FILE *f
1a750 20 3d 20 66 6f 70 65 6e 28 7a 4e 61 6d 65 2c 20   = fopen(zName, 
1a760 22 72 62 22 29 3b 0a 20 20 73 69 7a 65 5f 74 20  "rb");.  size_t 
1a770 6e 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 48  n;.  int rc = SH
1a780 45 4c 4c 5f 4f 50 45 4e 5f 55 4e 53 50 45 43 3b  ELL_OPEN_UNSPEC;
1a790 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30  .  char zBuf[100
1a7a0 5d 3b 0a 20 20 69 66 28 20 66 3d 3d 30 20 29 7b  ];.  if( f==0 ){
1a7b0 0a 20 20 20 20 69 66 28 20 64 66 6c 74 5a 69 70  .    if( dfltZip
1a7c0 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72 6c   && sqlite3_strl
1a7d0 69 6b 65 28 22 25 2e 7a 69 70 22 2c 7a 4e 61 6d  ike("%.zip",zNam
1a7e0 65 2c 30 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  e,0)==0 ) return
1a7f0 20 53 48 45 4c 4c 5f 4f 50 45 4e 5f 5a 49 50 46   SHELL_OPEN_ZIPF
1a800 49 4c 45 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  ILE;.    return 
1a810 53 48 45 4c 4c 5f 4f 50 45 4e 5f 4e 4f 52 4d 41  SHELL_OPEN_NORMA
1a820 4c 3b 0a 20 20 7d 0a 20 20 66 73 65 65 6b 28 66  L;.  }.  fseek(f
1a830 2c 20 2d 32 35 2c 20 53 45 45 4b 5f 45 4e 44 29  , -25, SEEK_END)
1a840 3b 0a 20 20 6e 20 3d 20 66 72 65 61 64 28 7a 42  ;.  n = fread(zB
1a850 75 66 2c 20 32 35 2c 20 31 2c 20 66 29 3b 0a 20  uf, 25, 1, f);. 
1a860 20 69 66 28 20 6e 3d 3d 31 20 26 26 20 6d 65 6d   if( n==1 && mem
1a870 63 6d 70 28 7a 42 75 66 2c 20 22 53 74 61 72 74  cmp(zBuf, "Start
1a880 2d 4f 66 2d 53 51 4c 69 74 65 33 2d 22 2c 20 31  -Of-SQLite3-", 1
1a890 37 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  7)==0 ){.    rc 
1a8a0 3d 20 53 48 45 4c 4c 5f 4f 50 45 4e 5f 41 50 50  = SHELL_OPEN_APP
1a8b0 45 4e 44 56 46 53 3b 0a 20 20 7d 65 6c 73 65 7b  ENDVFS;.  }else{
1a8c0 0a 20 20 20 20 66 73 65 65 6b 28 66 2c 20 2d 32  .    fseek(f, -2
1a8d0 32 2c 20 53 45 45 4b 5f 45 4e 44 29 3b 0a 20 20  2, SEEK_END);.  
1a8e0 20 20 6e 20 3d 20 66 72 65 61 64 28 7a 42 75 66    n = fread(zBuf
1a8f0 2c 20 32 32 2c 20 31 2c 20 66 29 3b 0a 20 20 20  , 22, 1, f);.   
1a900 20 69 66 28 20 6e 3d 3d 31 20 26 26 20 7a 42 75   if( n==1 && zBu
1a910 66 5b 30 5d 3d 3d 30 78 35 30 20 26 26 20 7a 42  f[0]==0x50 && zB
1a920 75 66 5b 31 5d 3d 3d 30 78 34 62 20 26 26 20 7a  uf[1]==0x4b && z
1a930 42 75 66 5b 32 5d 3d 3d 30 78 30 35 0a 20 20 20  Buf[2]==0x05.   
1a940 20 20 20 20 26 26 20 7a 42 75 66 5b 33 5d 3d 3d      && zBuf[3]==
1a950 30 78 30 36 20 29 7b 0a 20 20 20 20 20 20 72 63  0x06 ){.      rc
1a960 20 3d 20 53 48 45 4c 4c 5f 4f 50 45 4e 5f 5a 49   = SHELL_OPEN_ZI
1a970 50 46 49 4c 45 3b 0a 20 20 20 20 7d 65 6c 73 65  PFILE;.    }else
1a980 20 69 66 28 20 6e 3d 3d 30 20 26 26 20 64 66 6c   if( n==0 && dfl
1a990 74 5a 69 70 20 26 26 20 73 71 6c 69 74 65 33 5f  tZip && sqlite3_
1a9a0 73 74 72 6c 69 6b 65 28 22 25 2e 7a 69 70 22 2c  strlike("%.zip",
1a9b0 7a 4e 61 6d 65 2c 30 29 3d 3d 30 20 29 7b 0a 20  zName,0)==0 ){. 
1a9c0 20 20 20 20 20 72 65 74 75 72 6e 20 53 48 45 4c       return SHEL
1a9d0 4c 5f 4f 50 45 4e 5f 5a 49 50 46 49 4c 45 3b 0a  L_OPEN_ZIPFILE;.
1a9e0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 63 6c 6f      }.  }.  fclo
1a9f0 73 65 28 66 29 3b 0a 20 20 72 65 74 75 72 6e 20  se(f);.  return 
1aa00 72 63 3b 20 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d  rc;  .}../*.** M
1aa10 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74  ake sure the dat
1aa20 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2e 20 20  abase is open.  
1aa30 49 66 20 69 74 20 69 73 20 6e 6f 74 2c 20 74 68  If it is not, th
1aa40 65 6e 20 6f 70 65 6e 20 69 74 2e 20 20 49 66 0a  en open it.  If.
1aa50 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
1aa60 66 61 69 6c 73 20 74 6f 20 6f 70 65 6e 2c 20 70  fails to open, p
1aa70 72 69 6e 74 20 61 6e 20 65 72 72 6f 72 20 6d 65  rint an error me
1aa80 73 73 61 67 65 20 61 6e 64 20 65 78 69 74 2e 0a  ssage and exit..
1aa90 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
1aaa0 70 65 6e 5f 64 62 28 53 68 65 6c 6c 53 74 61 74  pen_db(ShellStat
1aab0 65 20 2a 70 2c 20 69 6e 74 20 6b 65 65 70 41 6c  e *p, int keepAl
1aac0 69 76 65 29 7b 0a 20 20 69 66 28 20 70 2d 3e 64  ive){.  if( p->d
1aad0 62 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  b==0 ){.    if( 
1aae0 70 2d 3e 6f 70 65 6e 4d 6f 64 65 3d 3d 53 48 45  p->openMode==SHE
1aaf0 4c 4c 5f 4f 50 45 4e 5f 55 4e 53 50 45 43 20 26  LL_OPEN_UNSPEC &
1ab00 26 20 61 63 63 65 73 73 28 70 2d 3e 7a 44 62 46  & access(p->zDbF
1ab10 69 6c 65 6e 61 6d 65 2c 30 29 3d 3d 30 20 29 7b  ilename,0)==0 ){
1ab20 0a 20 20 20 20 20 20 70 2d 3e 6f 70 65 6e 4d 6f  .      p->openMo
1ab30 64 65 20 3d 20 28 75 38 29 64 65 64 75 63 65 44  de = (u8)deduceD
1ab40 61 74 61 62 61 73 65 54 79 70 65 28 70 2d 3e 7a  atabaseType(p->z
1ab50 44 62 46 69 6c 65 6e 61 6d 65 2c 20 30 29 3b 0a  DbFilename, 0);.
1ab60 20 20 20 20 7d 0a 20 20 20 20 73 77 69 74 63 68      }.    switch
1ab70 28 20 70 2d 3e 6f 70 65 6e 4d 6f 64 65 20 29 7b  ( p->openMode ){
1ab80 0a 20 20 20 20 20 20 63 61 73 65 20 53 48 45 4c  .      case SHEL
1ab90 4c 5f 4f 50 45 4e 5f 41 50 50 45 4e 44 56 46 53  L_OPEN_APPENDVFS
1aba0 3a 20 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  : {.        sqli
1abb0 74 65 33 5f 6f 70 65 6e 5f 76 32 28 70 2d 3e 7a  te3_open_v2(p->z
1abc0 44 62 46 69 6c 65 6e 61 6d 65 2c 20 26 70 2d 3e  DbFilename, &p->
1abd0 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  db, .           
1abe0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
1abf0 57 52 49 54 45 7c 53 51 4c 49 54 45 5f 4f 50 45  WRITE|SQLITE_OPE
1ac00 4e 5f 43 52 45 41 54 45 2c 20 22 61 70 6e 64 76  N_CREATE, "apndv
1ac10 66 73 22 29 3b 0a 20 20 20 20 20 20 20 20 62 72  fs");.        br
1ac20 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
1ac30 20 20 20 63 61 73 65 20 53 48 45 4c 4c 5f 4f 50     case SHELL_OP
1ac40 45 4e 5f 5a 49 50 46 49 4c 45 3a 20 7b 0a 20 20  EN_ZIPFILE: {.  
1ac50 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6f 70        sqlite3_op
1ac60 65 6e 28 22 3a 6d 65 6d 6f 72 79 3a 22 2c 20 26  en(":memory:", &
1ac70 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 20 20  p->db);.        
1ac80 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
1ac90 20 20 20 20 20 63 61 73 65 20 53 48 45 4c 4c 5f       case SHELL_
1aca0 4f 50 45 4e 5f 52 45 41 44 4f 4e 4c 59 3a 20 7b  OPEN_READONLY: {
1acb0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1acc0 5f 6f 70 65 6e 5f 76 32 28 70 2d 3e 7a 44 62 46  _open_v2(p->zDbF
1acd0 69 6c 65 6e 61 6d 65 2c 20 26 70 2d 3e 64 62 2c  ilename, &p->db,
1ace0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
1acf0 44 4f 4e 4c 59 2c 20 30 29 3b 0a 20 20 20 20 20  DONLY, 0);.     
1ad00 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1ad10 7d 0a 20 20 20 20 20 20 63 61 73 65 20 53 48 45  }.      case SHE
1ad20 4c 4c 5f 4f 50 45 4e 5f 55 4e 53 50 45 43 3a 0a  LL_OPEN_UNSPEC:.
1ad30 20 20 20 20 20 20 63 61 73 65 20 53 48 45 4c 4c        case SHELL
1ad40 5f 4f 50 45 4e 5f 4e 4f 52 4d 41 4c 3a 20 7b 0a  _OPEN_NORMAL: {.
1ad50 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1ad60 6f 70 65 6e 28 70 2d 3e 7a 44 62 46 69 6c 65 6e  open(p->zDbFilen
1ad70 61 6d 65 2c 20 26 70 2d 3e 64 62 29 3b 0a 20 20  ame, &p->db);.  
1ad80 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1ad90 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 67     }.    }.    g
1ada0 6c 6f 62 61 6c 44 62 20 3d 20 70 2d 3e 64 62 3b  lobalDb = p->db;
1adb0 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d  .    if( p->db==
1adc0 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4f 4b 21 3d  0 || SQLITE_OK!=
1add0 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
1ade0 70 2d 3e 64 62 29 20 29 7b 0a 20 20 20 20 20 20  p->db) ){.      
1adf0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
1ae00 72 72 2c 22 45 72 72 6f 72 3a 20 75 6e 61 62 6c  rr,"Error: unabl
1ae10 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
1ae20 73 65 20 5c 22 25 73 5c 22 3a 20 25 73 5c 6e 22  se \"%s\": %s\n"
1ae30 2c 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a  ,.          p->z
1ae40 44 62 46 69 6c 65 6e 61 6d 65 2c 20 73 71 6c 69  DbFilename, sqli
1ae50 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62  te3_errmsg(p->db
1ae60 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6b 65  ));.      if( ke
1ae70 65 70 41 6c 69 76 65 20 29 20 72 65 74 75 72 6e  epAlive ) return
1ae80 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31 29 3b  ;.      exit(1);
1ae90 0a 20 20 20 20 7d 0a 23 69 66 6e 64 65 66 20 53  .    }.#ifndef S
1aea0 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
1aeb0 45 58 54 45 4e 53 49 4f 4e 0a 20 20 20 20 73 71  EXTENSION.    sq
1aec0 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61  lite3_enable_loa
1aed0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 70 2d 3e 64  d_extension(p->d
1aee0 62 2c 20 31 29 3b 0a 23 65 6e 64 69 66 0a 20 20  b, 1);.#endif.  
1aef0 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 69 6f    sqlite3_fileio
1af00 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 30 2c 20  _init(p->db, 0, 
1af10 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
1af20 73 68 61 74 68 72 65 65 5f 69 6e 69 74 28 70 2d  shathree_init(p-
1af30 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  >db, 0, 0);.    
1af40 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 69  sqlite3_completi
1af50 6f 6e 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 30  on_init(p->db, 0
1af60 2c 20 30 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  , 0);.#ifdef SQL
1af70 49 54 45 5f 48 41 56 45 5f 5a 4c 49 42 0a 20 20  ITE_HAVE_ZLIB.  
1af80 20 20 73 71 6c 69 74 65 33 5f 7a 69 70 66 69 6c    sqlite3_zipfil
1af90 65 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 30 2c  e_init(p->db, 0,
1afa0 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
1afb0 5f 73 71 6c 61 72 5f 69 6e 69 74 28 70 2d 3e 64  _sqlar_init(p->d
1afc0 62 2c 20 30 2c 20 30 29 3b 0a 23 65 6e 64 69 66  b, 0, 0);.#endif
1afd0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65  .    sqlite3_cre
1afe0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 70 2d 3e  ate_function(p->
1aff0 64 62 2c 20 22 73 68 65 6c 6c 5f 61 64 64 5f 73  db, "shell_add_s
1b000 63 68 65 6d 61 22 2c 20 33 2c 20 53 51 4c 49 54  chema", 3, SQLIT
1b010 45 5f 55 54 46 38 2c 20 30 2c 0a 20 20 20 20 20  E_UTF8, 0,.     
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b030 20 20 20 20 20 20 20 73 68 65 6c 6c 41 64 64 53         shellAddS
1b040 63 68 65 6d 61 4e 61 6d 65 2c 20 30 2c 20 30 29  chemaName, 0, 0)
1b050 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72  ;.    sqlite3_cr
1b060 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 70 2d  eate_function(p-
1b070 3e 64 62 2c 20 22 73 68 65 6c 6c 5f 6d 6f 64 75  >db, "shell_modu
1b080 6c 65 5f 73 63 68 65 6d 61 22 2c 20 31 2c 20 53  le_schema", 1, S
1b090 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 0a 20  QLITE_UTF8, 0,. 
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0b0 20 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c             shell
1b0c0 4d 6f 64 75 6c 65 53 63 68 65 6d 61 2c 20 30 2c  ModuleSchema, 0,
1b0d0 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
1b0e0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
1b0f0 28 70 2d 3e 64 62 2c 20 22 73 68 65 6c 6c 5f 70  (p->db, "shell_p
1b100 75 74 73 6e 6c 22 2c 20 31 2c 20 53 51 4c 49 54  utsnl", 1, SQLIT
1b110 45 5f 55 54 46 38 2c 20 70 2c 0a 20 20 20 20 20  E_UTF8, p,.     
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b130 20 20 20 20 20 20 20 73 68 65 6c 6c 50 75 74 73         shellPuts
1b140 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 23 69 66  Func, 0, 0);.#if
1b150 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 4f 48 41  ndef SQLITE_NOHA
1b160 56 45 5f 53 59 53 54 45 4d 0a 20 20 20 20 73 71  VE_SYSTEM.    sq
1b170 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
1b180 63 74 69 6f 6e 28 70 2d 3e 64 62 2c 20 22 65 64  ction(p->db, "ed
1b190 69 74 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55  it", 1, SQLITE_U
1b1a0 54 46 38 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  TF8, 0,.        
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1c0 20 20 20 20 65 64 69 74 46 75 6e 63 2c 20 30 2c      editFunc, 0,
1b1d0 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
1b1e0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
1b1f0 28 70 2d 3e 64 62 2c 20 22 65 64 69 74 22 2c 20  (p->db, "edit", 
1b200 32 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  2, SQLITE_UTF8, 
1b210 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
1b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1b230 64 69 74 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a  ditFunc, 0, 0);.
1b240 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
1b250 2d 3e 6f 70 65 6e 4d 6f 64 65 3d 3d 53 48 45 4c  ->openMode==SHEL
1b260 4c 5f 4f 50 45 4e 5f 5a 49 50 46 49 4c 45 20 29  L_OPEN_ZIPFILE )
1b270 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 53  {.      char *zS
1b280 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
1b290 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20 22  intf(.         "
1b2a0 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
1b2b0 41 42 4c 45 20 7a 69 70 20 55 53 49 4e 47 20 7a  ABLE zip USING z
1b2c0 69 70 66 69 6c 65 28 25 51 29 3b 22 2c 20 70 2d  ipfile(%Q);", p-
1b2d0 3e 7a 44 62 46 69 6c 65 6e 61 6d 65 29 3b 0a 20  >zDbFilename);. 
1b2e0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65       sqlite3_exe
1b2f0 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 30  c(p->db, zSql, 0
1b300 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  , 0, 0);.      s
1b310 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
1b320 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  );.    }.  }.}..
1b330 23 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e  #if HAVE_READLIN
1b340 45 20 7c 7c 20 48 41 56 45 5f 45 44 49 54 4c 49  E || HAVE_EDITLI
1b350 4e 45 0a 2f 2a 0a 2a 2a 20 52 65 61 64 6c 69 6e  NE./*.** Readlin
1b360 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 63 61 6c  e completion cal
1b370 6c 62 61 63 6b 73 0a 2a 2f 0a 73 74 61 74 69 63  lbacks.*/.static
1b380 20 63 68 61 72 20 2a 72 65 61 64 6c 69 6e 65 5f   char *readline_
1b390 63 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72  completion_gener
1b3a0 61 74 6f 72 28 63 6f 6e 73 74 20 63 68 61 72 20  ator(const char 
1b3b0 2a 74 65 78 74 2c 20 69 6e 74 20 73 74 61 74 65  *text, int state
1b3c0 29 7b 0a 20 20 73 74 61 74 69 63 20 73 71 6c 69  ){.  static sqli
1b3d0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20  te3_stmt *pStmt 
1b3e0 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65  = 0;.  char *zRe
1b3f0 74 3b 0a 20 20 69 66 28 20 73 74 61 74 65 3d 3d  t;.  if( state==
1b400 30 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  0 ){.    char *z
1b410 53 71 6c 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Sql;.    sqlite3
1b420 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
1b430 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
1b440 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45  ite3_mprintf("SE
1b450 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 63 61  LECT DISTINCT ca
1b460 6e 64 69 64 61 74 65 20 43 4f 4c 4c 41 54 45 20  ndidate COLLATE 
1b470 6e 6f 63 61 73 65 22 0a 20 20 20 20 20 20 20 20  nocase".        
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b490 20 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d 70 6c     "  FROM compl
1b4a0 65 74 69 6f 6e 28 25 51 29 20 4f 52 44 45 52 20  etion(%Q) ORDER 
1b4b0 42 59 20 31 22 2c 20 74 65 78 74 29 3b 0a 20 20  BY 1", text);.  
1b4c0 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72    sqlite3_prepar
1b4d0 65 5f 76 32 28 67 6c 6f 62 61 6c 44 62 2c 20 7a  e_v2(globalDb, z
1b4e0 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
1b4f0 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
1b500 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 7d  _free(zSql);.  }
1b510 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73  .  if( sqlite3_s
1b520 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49  tep(pStmt)==SQLI
1b530 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 7a 52  TE_ROW ){.    zR
1b540 65 74 20 3d 20 73 74 72 64 75 70 28 28 63 6f 6e  et = strdup((con
1b550 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
1b560 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
1b570 6d 74 2c 20 30 29 29 3b 0a 20 20 7d 65 6c 73 65  mt, 0));.  }else
1b580 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  {.    sqlite3_fi
1b590 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
1b5a0 20 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20     pStmt = 0;.  
1b5b0 20 20 7a 52 65 74 20 3d 20 30 3b 0a 20 20 7d 0a    zRet = 0;.  }.
1b5c0 20 20 72 65 74 75 72 6e 20 7a 52 65 74 3b 0a 7d    return zRet;.}
1b5d0 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 2a 72  .static char **r
1b5e0 65 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 69  eadline_completi
1b5f0 6f 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  on(const char *z
1b600 54 65 78 74 2c 20 69 6e 74 20 69 53 74 61 72 74  Text, int iStart
1b610 2c 20 69 6e 74 20 69 45 6e 64 29 7b 0a 20 20 72  , int iEnd){.  r
1b620 6c 5f 61 74 74 65 6d 70 74 65 64 5f 63 6f 6d 70  l_attempted_comp
1b630 6c 65 74 69 6f 6e 5f 6f 76 65 72 20 3d 20 31 3b  letion_over = 1;
1b640 0a 20 20 72 65 74 75 72 6e 20 72 6c 5f 63 6f 6d  .  return rl_com
1b650 70 6c 65 74 69 6f 6e 5f 6d 61 74 63 68 65 73 28  pletion_matches(
1b660 7a 54 65 78 74 2c 20 72 65 61 64 6c 69 6e 65 5f  zText, readline_
1b670 63 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72  completion_gener
1b680 61 74 6f 72 29 3b 0a 7d 0a 0a 23 65 6c 69 66 20  ator);.}..#elif 
1b690 48 41 56 45 5f 4c 49 4e 45 4e 4f 49 53 45 0a 2f  HAVE_LINENOISE./
1b6a0 2a 0a 2a 2a 20 4c 69 6e 65 6e 6f 69 73 65 20 63  *.** Linenoise c
1b6b0 6f 6d 70 6c 65 74 69 6f 6e 20 63 61 6c 6c 62 61  ompletion callba
1b6c0 63 6b 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  ck.*/.static voi
1b6d0 64 20 6c 69 6e 65 6e 6f 69 73 65 5f 63 6f 6d 70  d linenoise_comp
1b6e0 6c 65 74 69 6f 6e 28 63 6f 6e 73 74 20 63 68 61  letion(const cha
1b6f0 72 20 2a 7a 4c 69 6e 65 2c 20 6c 69 6e 65 6e 6f  r *zLine, lineno
1b700 69 73 65 43 6f 6d 70 6c 65 74 69 6f 6e 73 20 2a  iseCompletions *
1b710 6c 63 29 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65  lc){.  int nLine
1b720 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 4c 69 6e   = strlen30(zLin
1b730 65 29 3b 0a 20 20 69 6e 74 20 69 2c 20 69 53 74  e);.  int i, iSt
1b740 61 72 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  art;.  sqlite3_s
1b750 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a  tmt *pStmt = 0;.
1b760 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
1b770 63 68 61 72 20 7a 42 75 66 5b 31 30 30 30 5d 3b  char zBuf[1000];
1b780 0a 0a 20 20 69 66 28 20 6e 4c 69 6e 65 3e 73 69  ..  if( nLine>si
1b790 7a 65 6f 66 28 7a 42 75 66 29 2d 33 30 20 29 20  zeof(zBuf)-30 ) 
1b7a0 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 7a 4c  return;.  if( zL
1b7b0 69 6e 65 5b 30 5d 3d 3d 27 2e 27 20 29 20 72 65  ine[0]=='.' ) re
1b7c0 74 75 72 6e 3b 0a 20 20 66 6f 72 28 69 3d 6e 4c  turn;.  for(i=nL
1b7d0 69 6e 65 2d 31 3b 20 69 3e 3d 30 20 26 26 20 28  ine-1; i>=0 && (
1b7e0 69 73 61 6c 6e 75 6d 28 7a 4c 69 6e 65 5b 69 5d  isalnum(zLine[i]
1b7f0 29 20 7c 7c 20 7a 4c 69 6e 65 5b 69 5d 3d 3d 27  ) || zLine[i]=='
1b800 5f 27 29 3b 20 69 2d 2d 29 7b 7d 0a 20 20 69 66  _'); i--){}.  if
1b810 28 20 69 3d 3d 6e 4c 69 6e 65 2d 31 20 29 20 72  ( i==nLine-1 ) r
1b820 65 74 75 72 6e 3b 0a 20 20 69 53 74 61 72 74 20  eturn;.  iStart 
1b830 3d 20 69 2b 31 3b 0a 20 20 6d 65 6d 63 70 79 28  = i+1;.  memcpy(
1b840 7a 42 75 66 2c 20 7a 4c 69 6e 65 2c 20 69 53 74  zBuf, zLine, iSt
1b850 61 72 74 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73  art);.  zSql = s
1b860 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1b870 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20  SELECT DISTINCT 
1b880 63 61 6e 64 69 64 61 74 65 20 43 4f 4c 4c 41 54  candidate COLLAT
1b890 45 20 6e 6f 63 61 73 65 22 0a 20 20 20 20 20 20  E nocase".      
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8b0 20 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d 70 6c     "  FROM compl
1b8c0 65 74 69 6f 6e 28 25 51 2c 25 51 29 20 4f 52 44  etion(%Q,%Q) ORD
1b8d0 45 52 20 42 59 20 31 22 2c 0a 20 20 20 20 20 20  ER BY 1",.      
1b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8f0 20 20 20 26 7a 4c 69 6e 65 5b 69 53 74 61 72 74     &zLine[iStart
1b900 5d 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 73 71 6c  ], zLine);.  sql
1b910 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
1b920 67 6c 6f 62 61 6c 44 62 2c 20 7a 53 71 6c 2c 20  globalDb, zSql, 
1b930 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
1b940 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
1b950 53 71 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Sql);.  sqlite3_
1b960 65 78 65 63 28 67 6c 6f 62 61 6c 44 62 2c 20 22  exec(globalDb, "
1b970 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e  PRAGMA page_coun
1b980 74 22 2c 20 30 2c 20 30 2c 20 30 29 3b 20 2f 2a  t", 0, 0, 0); /*
1b990 20 4c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61   Load the schema
1b9a0 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 73 71 6c   */.  while( sql
1b9b0 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
1b9c0 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a  ==SQLITE_ROW ){.
1b9d0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1b9e0 7a 43 6f 6d 70 6c 65 74 69 6f 6e 20 3d 20 28 63  zCompletion = (c
1b9f0 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
1ba00 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
1ba10 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6e  Stmt, 0);.    in
1ba20 74 20 6e 43 6f 6d 70 6c 65 74 69 6f 6e 20 3d 20  t nCompletion = 
1ba30 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
1ba40 79 74 65 73 28 70 53 74 6d 74 2c 20 30 29 3b 0a  ytes(pStmt, 0);.
1ba50 20 20 20 20 69 66 28 20 69 53 74 61 72 74 2b 6e      if( iStart+n
1ba60 43 6f 6d 70 6c 65 74 69 6f 6e 20 3c 20 73 69 7a  Completion < siz
1ba70 65 6f 66 28 7a 42 75 66 29 2d 31 20 29 7b 0a 20  eof(zBuf)-1 ){. 
1ba80 20 20 20 20 20 6d 65 6d 63 70 79 28 7a 42 75 66       memcpy(zBuf
1ba90 2b 69 53 74 61 72 74 2c 20 7a 43 6f 6d 70 6c 65  +iStart, zComple
1baa0 74 69 6f 6e 2c 20 6e 43 6f 6d 70 6c 65 74 69 6f  tion, nCompletio
1bab0 6e 2b 31 29 3b 0a 20 20 20 20 20 20 6c 69 6e 65  n+1);.      line
1bac0 6e 6f 69 73 65 41 64 64 43 6f 6d 70 6c 65 74 69  noiseAddCompleti
1bad0 6f 6e 28 6c 63 2c 20 7a 42 75 66 29 3b 0a 20 20  on(lc, zBuf);.  
1bae0 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65    }.  }.  sqlite
1baf0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
1bb00 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
1bb10 2a 2a 20 44 6f 20 43 2d 6c 61 6e 67 75 61 67 65  ** Do C-language
1bb20 20 73 74 79 6c 65 20 64 65 71 75 6f 74 69 6e 67   style dequoting
1bb30 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 5c 61 20 20 20  ..**.**    \a   
1bb40 20 2d 3e 20 61 6c 61 72 6d 0a 2a 2a 20 20 20 20   -> alarm.**    
1bb50 5c 62 20 20 20 20 2d 3e 20 62 61 63 6b 73 70 61  \b    -> backspa
1bb60 63 65 0a 2a 2a 20 20 20 20 5c 74 20 20 20 20 2d  ce.**    \t    -
1bb70 3e 20 74 61 62 0a 2a 2a 20 20 20 20 5c 6e 20 20  > tab.**    \n  
1bb80 20 20 2d 3e 20 6e 65 77 6c 69 6e 65 0a 2a 2a 20    -> newline.** 
1bb90 20 20 20 5c 76 20 20 20 20 2d 3e 20 76 65 72 74     \v    -> vert
1bba0 69 63 61 6c 20 74 61 62 0a 2a 2a 20 20 20 20 5c  ical tab.**    \
1bbb0 66 20 20 20 20 2d 3e 20 66 6f 72 6d 20 66 65 65  f    -> form fee
1bbc0 64 0a 2a 2a 20 20 20 20 5c 72 20 20 20 20 2d 3e  d.**    \r    ->
1bbd0 20 63 61 72 72 69 61 67 65 20 72 65 74 75 72 6e   carriage return
1bbe0 0a 2a 2a 20 20 20 20 5c 73 20 20 20 20 2d 3e 20  .**    \s    -> 
1bbf0 73 70 61 63 65 0a 2a 2a 20 20 20 20 5c 22 20 20  space.**    \"  
1bc00 20 20 2d 3e 20 22 0a 2a 2a 20 20 20 20 5c 27 20    -> ".**    \' 
1bc10 20 20 20 2d 3e 20 27 0a 2a 2a 20 20 20 20 5c 5c     -> '.**    \\
1bc20 20 20 20 20 2d 3e 20 62 61 63 6b 73 6c 61 73 68      -> backslash
1bc30 0a 2a 2a 20 20 20 20 5c 4e 4e 4e 20 20 2d 3e 20  .**    \NNN  -> 
1bc40 61 73 63 69 69 20 63 68 61 72 61 63 74 65 72 20  ascii character 
1bc50 4e 4e 4e 20 69 6e 20 6f 63 74 61 6c 0a 2a 2f 0a  NNN in octal.*/.
1bc60 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 73 6f  static void reso
1bc70 6c 76 65 5f 62 61 63 6b 73 6c 61 73 68 65 73 28  lve_backslashes(
1bc80 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20  char *z){.  int 
1bc90 69 2c 20 6a 3b 0a 20 20 63 68 61 72 20 63 3b 0a  i, j;.  char c;.
1bca0 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 2a    while( *z && *
1bcb0 7a 21 3d 27 5c 5c 27 20 29 20 7a 2b 2b 3b 0a 20  z!='\\' ) z++;. 
1bcc0 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 28 63 20 3d   for(i=j=0; (c =
1bcd0 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b 2c 20   z[i])!=0; i++, 
1bce0 6a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 63 3d  j++){.    if( c=
1bcf0 3d 27 5c 5c 27 20 26 26 20 7a 5b 69 2b 31 5d 21  ='\\' && z[i+1]!
1bd00 3d 30 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  =0 ){.      c = 
1bd10 7a 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20 20 69 66  z[++i];.      if
1bd20 28 20 63 3d 3d 27 61 27 20 29 7b 0a 20 20 20 20  ( c=='a' ){.    
1bd30 20 20 20 20 63 20 3d 20 27 5c 61 27 3b 0a 20 20      c = '\a';.  
1bd40 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
1bd50 3d 27 62 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='b' ){.        
1bd60 63 20 3d 20 27 5c 62 27 3b 0a 20 20 20 20 20 20  c = '\b';.      
1bd70 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 74 27  }else if( c=='t'
1bd80 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20   ){.        c = 
1bd90 27 5c 74 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73  '\t';.      }els
1bda0 65 20 69 66 28 20 63 3d 3d 27 6e 27 20 29 7b 0a  e if( c=='n' ){.
1bdb0 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 6e 27          c = '\n'
1bdc0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
1bdd0 28 20 63 3d 3d 27 76 27 20 29 7b 0a 20 20 20 20  ( c=='v' ){.    
1bde0 20 20 20 20 63 20 3d 20 27 5c 76 27 3b 0a 20 20      c = '\v';.  
1bdf0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
1be00 3d 27 66 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='f' ){.        
1be10 63 20 3d 20 27 5c 66 27 3b 0a 20 20 20 20 20 20  c = '\f';.      
1be20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 72 27  }else if( c=='r'
1be30 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20   ){.        c = 
1be40 27 5c 72 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73  '\r';.      }els
1be50 65 20 69 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a  e if( c=='"' ){.
1be60 20 20 20 20 20 20 20 20 63 20 3d 20 27 22 27 3b          c = '"';
1be70 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
1be80 20 63 3d 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20   c=='\'' ){.    
1be90 20 20 20 20 63 20 3d 20 27 5c 27 27 3b 0a 20 20      c = '\'';.  
1bea0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
1beb0 3d 27 5c 5c 27 20 29 7b 0a 20 20 20 20 20 20 20  ='\\' ){.       
1bec0 20 63 20 3d 20 27 5c 5c 27 3b 0a 20 20 20 20 20   c = '\\';.     
1bed0 20 7d 65 6c 73 65 20 69 66 28 20 63 3e 3d 27 30   }else if( c>='0
1bee0 27 20 26 26 20 63 3c 3d 27 37 27 20 29 7b 0a 20  ' && c<='7' ){. 
1bef0 20 20 20 20 20 20 20 63 20 2d 3d 20 27 30 27 3b         c -= '0';
1bf00 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69  .        if( z[i
1bf10 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 69 2b  +1]>='0' && z[i+
1bf20 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20 20 20  1]<='7' ){.     
1bf30 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20       i++;.      
1bf40 20 20 20 20 63 20 3d 20 28 63 3c 3c 33 29 20 2b      c = (c<<3) +
1bf50 20 7a 5b 69 5d 20 2d 20 27 30 27 3b 0a 20 20 20   z[i] - '0';.   
1bf60 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69 2b 31         if( z[i+1
1bf70 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 69 2b 31 5d  ]>='0' && z[i+1]
1bf80 3c 3d 27 37 27 20 29 7b 0a 20 20 20 20 20 20 20  <='7' ){.       
1bf90 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20       i++;.      
1bfa0 20 20 20 20 20 20 63 20 3d 20 28 63 3c 3c 33 29        c = (c<<3)
1bfb0 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b 0a 20   + z[i] - '0';. 
1bfc0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1bfd0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
1bfe0 20 7d 0a 20 20 20 20 7a 5b 6a 5d 20 3d 20 63 3b   }.    z[j] = c;
1bff0 0a 20 20 7d 0a 20 20 69 66 28 20 6a 3c 69 20 29  .  }.  if( j<i )
1c000 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a   z[j] = 0;.}../*
1c010 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 7a 41  .** Interpret zA
1c020 72 67 20 61 73 20 65 69 74 68 65 72 20 61 6e 20  rg as either an 
1c030 69 6e 74 65 67 65 72 20 6f 72 20 61 20 62 6f 6f  integer or a boo
1c040 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 52 65 74  lean value.  Ret
1c050 75 72 6e 20 31 20 6f 72 20 30 0a 2a 2a 20 66 6f  urn 1 or 0.** fo
1c060 72 20 54 52 55 45 20 61 6e 64 20 46 41 4c 53 45  r TRUE and FALSE
1c070 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 69 6e  .  Return the in
1c080 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61  teger value if a
1c090 70 70 72 6f 70 72 69 61 74 65 2e 0a 2a 2f 0a 73  ppropriate..*/.s
1c0a0 74 61 74 69 63 20 69 6e 74 20 62 6f 6f 6c 65 61  tatic int boolea
1c0b0 6e 56 61 6c 75 65 28 63 6f 6e 73 74 20 63 68 61  nValue(const cha
1c0c0 72 20 2a 7a 41 72 67 29 7b 0a 20 20 69 6e 74 20  r *zArg){.  int 
1c0d0 69 3b 0a 20 20 69 66 28 20 7a 41 72 67 5b 30 5d  i;.  if( zArg[0]
1c0e0 3d 3d 27 30 27 20 26 26 20 7a 41 72 67 5b 31 5d  =='0' && zArg[1]
1c0f0 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 66 6f 72  =='x' ){.    for
1c100 28 69 3d 32 3b 20 68 65 78 44 69 67 69 74 56 61  (i=2; hexDigitVa
1c110 6c 75 65 28 7a 41 72 67 5b 69 5d 29 3e 3d 30 3b  lue(zArg[i])>=0;
1c120 20 69 2b 2b 29 7b 7d 0a 20 20 7d 65 6c 73 65 7b   i++){}.  }else{
1c130 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 41  .    for(i=0; zA
1c140 72 67 5b 69 5d 3e 3d 27 30 27 20 26 26 20 7a 41  rg[i]>='0' && zA
1c150 72 67 5b 69 5d 3c 3d 27 39 27 3b 20 69 2b 2b 29  rg[i]<='9'; i++)
1c160 7b 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 3e 30  {}.  }.  if( i>0
1c170 20 26 26 20 7a 41 72 67 5b 69 5d 3d 3d 30 20 29   && zArg[i]==0 )
1c180 20 72 65 74 75 72 6e 20 28 69 6e 74 29 28 69 6e   return (int)(in
1c190 74 65 67 65 72 56 61 6c 75 65 28 7a 41 72 67 29  tegerValue(zArg)
1c1a0 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a   & 0xffffffff);.
1c1b0 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
1c1c0 72 69 63 6d 70 28 7a 41 72 67 2c 20 22 6f 6e 22  ricmp(zArg, "on"
1c1d0 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f  )==0 || sqlite3_
1c1e0 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 22 79 65  stricmp(zArg,"ye
1c1f0 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65  s")==0 ){.    re
1c200 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 66  turn 1;.  }.  if
1c210 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  ( sqlite3_stricm
1c220 70 28 7a 41 72 67 2c 20 22 6f 66 66 22 29 3d 3d  p(zArg, "off")==
1c230 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74 72  0 || sqlite3_str
1c240 69 63 6d 70 28 7a 41 72 67 2c 22 6e 6f 22 29 3d  icmp(zArg,"no")=
1c250 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
1c260 20 30 3b 0a 20 20 7d 0a 20 20 75 74 66 38 5f 70   0;.  }.  utf8_p
1c270 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1c280 52 52 4f 52 3a 20 4e 6f 74 20 61 20 62 6f 6f 6c  RROR: Not a bool
1c290 65 61 6e 20 76 61 6c 75 65 3a 20 5c 22 25 73 5c  ean value: \"%s\
1c2a0 22 2e 20 41 73 73 75 6d 69 6e 67 20 5c 22 6e 6f  ". Assuming \"no
1c2b0 5c 22 2e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  \".\n",.        
1c2c0 20 20 7a 41 72 67 29 3b 0a 20 20 72 65 74 75 72    zArg);.  retur
1c2d0 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65  n 0;.}../*.** Se
1c2e0 74 20 6f 72 20 63 6c 65 61 72 20 61 20 73 68 65  t or clear a she
1c2f0 6c 6c 20 66 6c 61 67 20 61 63 63 6f 72 64 69 6e  ll flag accordin
1c300 67 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76  g to a boolean v
1c310 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
1c320 76 6f 69 64 20 73 65 74 4f 72 43 6c 65 61 72 46  void setOrClearF
1c330 6c 61 67 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  lag(ShellState *
1c340 70 2c 20 75 6e 73 69 67 6e 65 64 20 6d 46 6c 61  p, unsigned mFla
1c350 67 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  g, const char *z
1c360 41 72 67 29 7b 0a 20 20 69 66 28 20 62 6f 6f 6c  Arg){.  if( bool
1c370 65 61 6e 56 61 6c 75 65 28 7a 41 72 67 29 20 29  eanValue(zArg) )
1c380 7b 0a 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c  {.    ShellSetFl
1c390 61 67 28 70 2c 20 6d 46 6c 61 67 29 3b 0a 20 20  ag(p, mFlag);.  
1c3a0 7d 65 6c 73 65 7b 0a 20 20 20 20 53 68 65 6c 6c  }else{.    Shell
1c3b0 43 6c 65 61 72 46 6c 61 67 28 70 2c 20 6d 46 6c  ClearFlag(p, mFl
1c3c0 61 67 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ag);.  }.}../*.*
1c3d0 2a 20 43 6c 6f 73 65 20 61 6e 20 6f 75 74 70 75  * Close an outpu
1c3e0 74 20 66 69 6c 65 2c 20 61 73 73 75 6d 69 6e 67  t file, assuming
1c3f0 20 69 74 20 69 73 20 6e 6f 74 20 73 74 64 65 72   it is not stder
1c400 72 20 6f 72 20 73 74 64 6f 75 74 0a 2a 2f 0a 73  r or stdout.*/.s
1c410 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75  tatic void outpu
1c420 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28 46 49 4c  t_file_close(FIL
1c430 45 20 2a 66 29 7b 0a 20 20 69 66 28 20 66 20 26  E *f){.  if( f &
1c440 26 20 66 21 3d 73 74 64 6f 75 74 20 26 26 20 66  & f!=stdout && f
1c450 21 3d 73 74 64 65 72 72 20 29 20 66 63 6c 6f 73  !=stderr ) fclos
1c460 65 28 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  e(f);.}../*.** T
1c470 72 79 20 74 6f 20 6f 70 65 6e 20 61 6e 20 6f 75  ry to open an ou
1c480 74 70 75 74 20 66 69 6c 65 2e 20 20 20 54 68 65  tput file.   The
1c490 20 6e 61 6d 65 73 20 22 73 74 64 6f 75 74 22 20   names "stdout" 
1c4a0 61 6e 64 20 22 73 74 64 65 72 72 22 20 61 72 65  and "stderr" are
1c4b0 0a 2a 2a 20 72 65 63 6f 67 6e 69 7a 65 64 20 61  .** recognized a
1c4c0 6e 64 20 64 6f 20 74 68 65 20 72 69 67 68 74 20  nd do the right 
1c4d0 74 68 69 6e 67 2e 20 20 4e 55 4c 4c 20 69 73 20  thing.  NULL is 
1c4e0 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
1c4f0 6f 75 74 70 75 74 0a 2a 2a 20 66 69 6c 65 6e 61  output.** filena
1c500 6d 65 20 69 73 20 22 6f 66 66 22 2e 0a 2a 2f 0a  me is "off"..*/.
1c510 73 74 61 74 69 63 20 46 49 4c 45 20 2a 6f 75 74  static FILE *out
1c520 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 63 6f  put_file_open(co
1c530 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 2c  nst char *zFile,
1c540 20 69 6e 74 20 62 54 65 78 74 4d 6f 64 65 29 7b   int bTextMode){
1c550 0a 20 20 46 49 4c 45 20 2a 66 3b 0a 20 20 69 66  .  FILE *f;.  if
1c560 28 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c 22  ( strcmp(zFile,"
1c570 73 74 64 6f 75 74 22 29 3d 3d 30 20 29 7b 0a 20  stdout")==0 ){. 
1c580 20 20 20 66 20 3d 20 73 74 64 6f 75 74 3b 0a 20     f = stdout;. 
1c590 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
1c5a0 70 28 7a 46 69 6c 65 2c 20 22 73 74 64 65 72 72  p(zFile, "stderr
1c5b0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66 20 3d  ")==0 ){.    f =
1c5c0 20 73 74 64 65 72 72 3b 0a 20 20 7d 65 6c 73 65   stderr;.  }else
1c5d0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 46 69 6c   if( strcmp(zFil
1c5e0 65 2c 20 22 6f 66 66 22 29 3d 3d 30 20 29 7b 0a  e, "off")==0 ){.
1c5f0 20 20 20 20 66 20 3d 20 30 3b 0a 20 20 7d 65 6c      f = 0;.  }el
1c600 73 65 7b 0a 20 20 20 20 66 20 3d 20 66 6f 70 65  se{.    f = fope
1c610 6e 28 7a 46 69 6c 65 2c 20 62 54 65 78 74 4d 6f  n(zFile, bTextMo
1c620 64 65 20 3f 20 22 77 22 20 3a 20 22 77 62 22 29  de ? "w" : "wb")
1c630 3b 0a 20 20 20 20 69 66 28 20 66 3d 3d 30 20 29  ;.    if( f==0 )
1c640 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
1c650 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
1c660 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  or: cannot open 
1c670 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65  \"%s\"\n", zFile
1c680 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
1c690 65 74 75 72 6e 20 66 3b 0a 7d 0a 0a 23 69 66 20  eturn f;.}..#if 
1c6a0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1c6b0 4f 4d 49 54 5f 54 52 41 43 45 29 20 26 26 20 21  OMIT_TRACE) && !
1c6c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1c6d0 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
1c6e0 4e 54 29 0a 2f 2a 0a 2a 2a 20 41 20 72 6f 75 74  NT)./*.** A rout
1c6f0 69 6e 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ine for handling
1c700 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 73 71 6c   output from sql
1c710 69 74 65 33 5f 74 72 61 63 65 28 29 2e 0a 2a 2f  ite3_trace()..*/
1c720 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 5f  .static int sql_
1c730 74 72 61 63 65 5f 63 61 6c 6c 62 61 63 6b 28 0a  trace_callback(.
1c740 20 20 75 6e 73 69 67 6e 65 64 20 6d 54 79 70 65    unsigned mType
1c750 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 2c 0a  ,.  void *pArg,.
1c760 20 20 76 6f 69 64 20 2a 70 50 2c 0a 20 20 76 6f    void *pP,.  vo
1c770 69 64 20 2a 70 58 0a 29 7b 0a 20 20 46 49 4c 45  id *pX.){.  FILE
1c780 20 2a 66 20 3d 20 28 46 49 4c 45 2a 29 70 41 72   *f = (FILE*)pAr
1c790 67 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  g;.  UNUSED_PARA
1c7a0 4d 45 54 45 52 28 6d 54 79 70 65 29 3b 0a 20 20  METER(mType);.  
1c7b0 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
1c7c0 28 70 50 29 3b 0a 20 20 69 66 28 20 66 20 29 7b  (pP);.  if( f ){
1c7d0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
1c7e0 2a 7a 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  *z = (const char
1c7f0 2a 29 70 58 3b 0a 20 20 20 20 69 6e 74 20 69 20  *)pX;.    int i 
1c800 3d 20 73 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20  = strlen30(z);. 
1c810 20 20 20 77 68 69 6c 65 28 20 69 3e 30 20 26 26     while( i>0 &&
1c820 20 7a 5b 69 2d 31 5d 3d 3d 27 3b 27 20 29 7b 20   z[i-1]==';' ){ 
1c830 69 2d 2d 3b 20 7d 0a 20 20 20 20 75 74 66 38 5f  i--; }.    utf8_
1c840 70 72 69 6e 74 66 28 66 2c 20 22 25 2e 2a 73 3b  printf(f, "%.*s;
1c850 5c 6e 22 2c 20 69 2c 20 7a 29 3b 0a 20 20 7d 0a  \n", i, z);.  }.
1c860 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 23 65    return 0;.}.#e
1c870 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6e 6f  ndif../*.** A no
1c880 2d 6f 70 20 72 6f 75 74 69 6e 65 20 74 68 61 74  -op routine that
1c890 20 72 75 6e 73 20 77 69 74 68 20 74 68 65 20 22   runs with the "
1c8a0 2e 62 72 65 61 6b 70 6f 69 6e 74 22 20 64 6f 63  .breakpoint" doc
1c8b0 2d 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20  -command.  This 
1c8c0 69 73 0a 2a 2a 20 61 20 75 73 65 66 75 6c 20 73  is.** a useful s
1c8d0 70 6f 74 20 74 6f 20 73 65 74 20 61 20 64 65 62  pot to set a deb
1c8e0 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74  ugger breakpoint
1c8f0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
1c900 20 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74   test_breakpoint
1c910 28 76 6f 69 64 29 7b 0a 20 20 73 74 61 74 69 63  (void){.  static
1c920 20 69 6e 74 20 6e 43 61 6c 6c 20 3d 20 30 3b 0a   int nCall = 0;.
1c930 20 20 6e 43 61 6c 6c 2b 2b 3b 0a 7d 0a 0a 2f 2a    nCall++;.}../*
1c940 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 75 73  .** An object us
1c950 65 64 20 74 6f 20 72 65 61 64 20 61 20 43 53 56  ed to read a CSV
1c960 20 61 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73   and other files
1c970 20 66 6f 72 20 69 6d 70 6f 72 74 2e 0a 2a 2f 0a   for import..*/.
1c980 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
1c990 6d 70 6f 72 74 43 74 78 20 49 6d 70 6f 72 74 43  mportCtx ImportC
1c9a0 74 78 3b 0a 73 74 72 75 63 74 20 49 6d 70 6f 72  tx;.struct Impor
1c9b0 74 43 74 78 20 7b 0a 20 20 63 6f 6e 73 74 20 63  tCtx {.  const c
1c9c0 68 61 72 20 2a 7a 46 69 6c 65 3b 20 20 2f 2a 20  har *zFile;  /* 
1c9d0 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 70 75  Name of the inpu
1c9e0 74 20 66 69 6c 65 20 2a 2f 0a 20 20 46 49 4c 45  t file */.  FILE
1c9f0 20 2a 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20   *in;           
1ca00 2f 2a 20 52 65 61 64 20 74 68 65 20 43 53 56 20  /* Read the CSV 
1ca10 74 65 78 74 20 66 72 6f 6d 20 74 68 69 73 20 69  text from this i
1ca20 6e 70 75 74 20 73 74 72 65 61 6d 20 2a 2f 0a 20  nput stream */. 
1ca30 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
1ca40 20 20 20 20 20 2f 2a 20 41 63 63 75 6d 75 6c 61       /* Accumula
1ca50 74 65 64 20 74 65 78 74 20 66 6f 72 20 61 20 66  ted text for a f
1ca60 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  ield */.  int n;
1ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ca80 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
1ca90 20 69 6e 20 7a 20 2a 2f 0a 20 20 69 6e 74 20 6e   in z */.  int n
1caa0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
1cab0 2a 20 53 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  * Space allocate
1cac0 64 20 66 6f 72 20 7a 5b 5d 20 2a 2f 0a 20 20 69  d for z[] */.  i
1cad0 6e 74 20 6e 4c 69 6e 65 3b 20 20 20 20 20 20 20  nt nLine;       
1cae0 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6c 69     /* Current li
1caf0 6e 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 69  ne number */.  i
1cb00 6e 74 20 62 4e 6f 74 46 69 72 73 74 3b 20 20 20  nt bNotFirst;   
1cb10 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 6e     /* True if on
1cb20 65 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 20  e or more bytes 
1cb30 61 6c 72 65 61 64 79 20 72 65 61 64 20 2a 2f 0a  already read */.
1cb40 20 20 69 6e 74 20 63 54 65 72 6d 3b 20 20 20 20    int cTerm;    
1cb50 20 20 20 20 20 20 2f 2a 20 43 68 61 72 61 63 74        /* Charact
1cb60 65 72 20 74 68 61 74 20 74 65 72 6d 69 6e 61 74  er that terminat
1cb70 65 64 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  ed the most rece
1cb80 6e 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e  nt field */.  in
1cb90 74 20 63 43 6f 6c 53 65 70 3b 20 20 20 20 20 20  t cColSep;      
1cba0 20 20 2f 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 20    /* The column 
1cbb0 73 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63  separator charac
1cbc0 74 65 72 2e 20 20 28 55 73 75 61 6c 6c 79 20 22  ter.  (Usually "
1cbd0 2c 22 29 20 2a 2f 0a 20 20 69 6e 74 20 63 52 6f  ,") */.  int cRo
1cbe0 77 53 65 70 3b 20 20 20 20 20 20 20 20 2f 2a 20  wSep;        /* 
1cbf0 54 68 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f  The row separato
1cc00 72 20 63 68 61 72 61 63 74 65 72 2e 20 20 28 55  r character.  (U
1cc10 73 75 61 6c 6c 79 20 22 5c 6e 22 29 20 2a 2f 0a  sually "\n") */.
1cc20 7d 3b 0a 0a 2f 2a 20 41 70 70 65 6e 64 20 61 20  };../* Append a 
1cc30 73 69 6e 67 6c 65 20 62 79 74 65 20 74 6f 20 7a  single byte to z
1cc40 5b 5d 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  [] */.static voi
1cc50 64 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f  d import_append_
1cc60 63 68 61 72 28 49 6d 70 6f 72 74 43 74 78 20 2a  char(ImportCtx *
1cc70 70 2c 20 69 6e 74 20 63 29 7b 0a 20 20 69 66 28  p, int c){.  if(
1cc80 20 70 2d 3e 6e 2b 31 3e 3d 70 2d 3e 6e 41 6c 6c   p->n+1>=p->nAll
1cc90 6f 63 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 41 6c  oc ){.    p->nAl
1cca0 6c 6f 63 20 2b 3d 20 70 2d 3e 6e 41 6c 6c 6f 63  loc += p->nAlloc
1ccb0 20 2b 20 31 30 30 3b 0a 20 20 20 20 70 2d 3e 7a   + 100;.    p->z
1ccc0 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c   = sqlite3_reall
1ccd0 6f 63 36 34 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41  oc64(p->z, p->nA
1cce0 6c 6c 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 70  lloc);.    if( p
1ccf0 2d 3e 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ->z==0 ){.      
1cd00 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
1cd10 72 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  r, "out of memor
1cd20 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 65 78 69  y\n");.      exi
1cd30 74 28 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  t(1);.    }.  }.
1cd40 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 2b 2b 5d 20 3d    p->z[p->n++] =
1cd50 20 28 63 68 61 72 29 63 3b 0a 7d 0a 0a 2f 2a 20   (char)c;.}../* 
1cd60 52 65 61 64 20 61 20 73 69 6e 67 6c 65 20 66 69  Read a single fi
1cd70 65 6c 64 20 6f 66 20 43 53 56 20 74 65 78 74 2e  eld of CSV text.
1cd80 20 20 43 6f 6d 70 61 74 69 62 6c 65 20 77 69 74    Compatible wit
1cd90 68 20 72 66 63 34 31 38 30 20 61 6e 64 20 65 78  h rfc4180 and ex
1cda0 74 65 6e 64 65 64 0a 2a 2a 20 77 69 74 68 20 74  tended.** with t
1cdb0 68 65 20 6f 70 74 69 6f 6e 20 6f 66 20 68 61 76  he option of hav
1cdc0 69 6e 67 20 61 20 73 65 70 61 72 61 74 6f 72 20  ing a separator 
1cdd0 6f 74 68 65 72 20 74 68 61 6e 20 22 2c 22 2e 0a  other than ","..
1cde0 2a 2a 0a 2a 2a 20 20 20 2b 20 20 49 6e 70 75 74  **.**   +  Input
1cdf0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 70 2d 3e 69   comes from p->i
1ce00 6e 2e 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65  n..**   +  Store
1ce10 20 72 65 73 75 6c 74 73 20 69 6e 20 70 2d 3e 7a   results in p->z
1ce20 20 6f 66 20 6c 65 6e 67 74 68 20 70 2d 3e 6e 2e   of length p->n.
1ce30 20 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20    Space to hold 
1ce40 70 2d 3e 7a 20 63 6f 6d 65 73 0a 2a 2a 20 20 20  p->z comes.**   
1ce50 20 20 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f     from sqlite3_
1ce60 6d 61 6c 6c 6f 63 36 34 28 29 2e 0a 2a 2a 20 20  malloc64()..**  
1ce70 20 2b 20 20 55 73 65 20 70 2d 3e 63 53 65 70 20   +  Use p->cSep 
1ce80 61 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 73 65  as the column se
1ce90 70 61 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65  parator.  The de
1cea0 66 61 75 6c 74 20 69 73 20 22 2c 22 2e 0a 2a 2a  fault is ","..**
1ceb0 20 20 20 2b 20 20 55 73 65 20 70 2d 3e 72 53 65     +  Use p->rSe
1cec0 70 20 61 73 20 74 68 65 20 72 6f 77 20 73 65 70  p as the row sep
1ced0 61 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66  arator.  The def
1cee0 61 75 6c 74 20 69 73 20 22 5c 6e 22 2e 0a 2a 2a  ault is "\n"..**
1cef0 20 20 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b     +  Keep track
1cf00 20 6f 66 20 74 68 65 20 6c 69 6e 65 20 6e 75 6d   of the line num
1cf10 62 65 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e  ber in p->nLine.
1cf20 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74  .**   +  Store t
1cf30 68 65 20 63 68 61 72 61 63 74 65 72 20 74 68 61  he character tha
1cf40 74 20 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65  t terminates the
1cf50 20 66 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65   field in p->cTe
1cf60 72 6d 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20  rm.  Store.**   
1cf70 20 20 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66     EOF on end-of
1cf80 2d 66 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52  -file..**   +  R
1cf90 65 70 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72  eport syntax err
1cfa0 6f 72 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f  ors on stderr.*/
1cfb0 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 53 51  .static char *SQ
1cfc0 4c 49 54 45 5f 43 44 45 43 4c 20 63 73 76 5f 72  LITE_CDECL csv_r
1cfd0 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d  ead_one_field(Im
1cfe0 70 6f 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69  portCtx *p){.  i
1cff0 6e 74 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70  nt c;.  int cSep
1d000 20 3d 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20   = p->cColSep;. 
1d010 20 69 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63   int rSep = p->c
1d020 52 6f 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d  RowSep;.  p->n =
1d030 20 30 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28   0;.  c = fgetc(
1d040 70 2d 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d  p->in);.  if( c=
1d050 3d 45 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65  =EOF || seenInte
1d060 72 72 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e  rrupt ){.    p->
1d070 63 54 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20  cTerm = EOF;.   
1d080 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
1d090 20 69 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a 20   if( c=='"' ){. 
1d0a0 20 20 20 69 6e 74 20 70 63 2c 20 70 70 63 3b 0a     int pc, ppc;.
1d0b0 20 20 20 20 69 6e 74 20 73 74 61 72 74 4c 69 6e      int startLin
1d0c0 65 20 3d 20 70 2d 3e 6e 4c 69 6e 65 3b 0a 20 20  e = p->nLine;.  
1d0d0 20 20 69 6e 74 20 63 51 75 6f 74 65 20 3d 20 63    int cQuote = c
1d0e0 3b 0a 20 20 20 20 70 63 20 3d 20 70 70 63 20 3d  ;.    pc = ppc =
1d0f0 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 31   0;.    while( 1
1d100 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 66 67   ){.      c = fg
1d110 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20  etc(p->in);.    
1d120 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20 29 20    if( c==rSep ) 
1d130 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20  p->nLine++;.    
1d140 20 20 69 66 28 20 63 3d 3d 63 51 75 6f 74 65 20    if( c==cQuote 
1d150 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ){.        if( p
1d160 63 3d 3d 63 51 75 6f 74 65 20 29 7b 0a 20 20 20  c==cQuote ){.   
1d170 20 20 20 20 20 20 20 70 63 20 3d 20 30 3b 0a 20         pc = 0;. 
1d180 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1d190 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
1d1a0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
1d1b0 63 3d 3d 63 53 65 70 20 26 26 20 70 63 3d 3d 63  c==cSep && pc==c
1d1c0 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c  Quote).       ||
1d1d0 20 28 63 3d 3d 72 53 65 70 20 26 26 20 70 63 3d   (c==rSep && pc=
1d1e0 3d 63 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20  =cQuote).       
1d1f0 7c 7c 20 28 63 3d 3d 72 53 65 70 20 26 26 20 70  || (c==rSep && p
1d200 63 3d 3d 27 5c 72 27 20 26 26 20 70 70 63 3d 3d  c=='\r' && ppc==
1d210 63 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c  cQuote).       |
1d220 7c 20 28 63 3d 3d 45 4f 46 20 26 26 20 70 63 3d  | (c==EOF && pc=
1d230 3d 63 51 75 6f 74 65 29 0a 20 20 20 20 20 20 29  =cQuote).      )
1d240 7b 0a 20 20 20 20 20 20 20 20 64 6f 7b 20 70 2d  {.        do{ p-
1d250 3e 6e 2d 2d 3b 20 7d 77 68 69 6c 65 28 20 70 2d  >n--; }while( p-
1d260 3e 7a 5b 70 2d 3e 6e 5d 21 3d 63 51 75 6f 74 65  >z[p->n]!=cQuote
1d270 20 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 63   );.        p->c
1d280 54 65 72 6d 20 3d 20 63 3b 0a 20 20 20 20 20 20  Term = c;.      
1d290 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
1d2a0 0a 20 20 20 20 20 20 69 66 28 20 70 63 3d 3d 63  .      if( pc==c
1d2b0 51 75 6f 74 65 20 26 26 20 63 21 3d 27 5c 72 27  Quote && c!='\r'
1d2c0 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38   ){.        utf8
1d2d0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1d2e0 22 25 73 3a 25 64 3a 20 75 6e 65 73 63 61 70 65  "%s:%d: unescape
1d2f0 64 20 25 63 20 63 68 61 72 61 63 74 65 72 5c 6e  d %c character\n
1d300 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
1d310 20 20 20 70 2d 3e 7a 46 69 6c 65 2c 20 70 2d 3e     p->zFile, p->
1d320 6e 4c 69 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a  nLine, cQuote);.
1d330 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
1d340 28 20 63 3d 3d 45 4f 46 20 29 7b 0a 20 20 20 20  ( c==EOF ){.    
1d350 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1d360 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20  stderr, "%s:%d: 
1d370 75 6e 74 65 72 6d 69 6e 61 74 65 64 20 25 63 2d  unterminated %c-
1d380 71 75 6f 74 65 64 20 66 69 65 6c 64 5c 6e 22 2c  quoted field\n",
1d390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d3a0 20 70 2d 3e 7a 46 69 6c 65 2c 20 73 74 61 72 74   p->zFile, start
1d3b0 4c 69 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20  Line, cQuote);. 
1d3c0 20 20 20 20 20 20 20 70 2d 3e 63 54 65 72 6d 20         p->cTerm 
1d3d0 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = c;.        bre
1d3e0 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
1d3f0 20 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f    import_append_
1d400 63 68 61 72 28 70 2c 20 63 29 3b 0a 20 20 20 20  char(p, c);.    
1d410 20 20 70 70 63 20 3d 20 70 63 3b 0a 20 20 20 20    ppc = pc;.    
1d420 20 20 70 63 20 3d 20 63 3b 0a 20 20 20 20 7d 0a    pc = c;.    }.
1d430 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1d440 49 66 20 74 68 69 73 20 69 73 20 74 68 65 20 66  If this is the f
1d450 69 72 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67  irst field being
1d460 20 70 61 72 73 65 64 20 61 6e 64 20 69 74 20 62   parsed and it b
1d470 65 67 69 6e 73 20 77 69 74 68 20 74 68 65 0a 20  egins with the. 
1d480 20 20 20 2a 2a 20 55 54 46 2d 38 20 42 4f 4d 20     ** UTF-8 BOM 
1d490 20 28 30 78 45 46 20 42 42 20 42 46 29 20 74 68   (0xEF BB BF) th
1d4a0 65 6e 20 73 6b 69 70 20 74 68 65 20 42 4f 4d 20  en skip the BOM 
1d4b0 2a 2f 0a 20 20 20 20 69 66 28 20 28 63 26 30 78  */.    if( (c&0x
1d4c0 66 66 29 3d 3d 30 78 65 66 20 26 26 20 70 2d 3e  ff)==0xef && p->
1d4d0 62 4e 6f 74 46 69 72 73 74 3d 3d 30 20 29 7b 0a  bNotFirst==0 ){.
1d4e0 20 20 20 20 20 20 69 6d 70 6f 72 74 5f 61 70 70        import_app
1d4f0 65 6e 64 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a  end_char(p, c);.
1d500 20 20 20 20 20 20 63 20 3d 20 66 67 65 74 63 28        c = fgetc(
1d510 70 2d 3e 69 6e 29 3b 0a 20 20 20 20 20 20 69 66  p->in);.      if
1d520 28 20 28 63 26 30 78 66 66 29 3d 3d 30 78 62 62  ( (c&0xff)==0xbb
1d530 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6d 70 6f   ){.        impo
1d540 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70  rt_append_char(p
1d550 2c 20 63 29 3b 0a 20 20 20 20 20 20 20 20 63 20  , c);.        c 
1d560 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a  = fgetc(p->in);.
1d570 20 20 20 20 20 20 20 20 69 66 28 20 28 63 26 30          if( (c&0
1d580 78 66 66 29 3d 3d 30 78 62 66 20 29 7b 0a 20 20  xff)==0xbf ){.  
1d590 20 20 20 20 20 20 20 20 70 2d 3e 62 4e 6f 74 46          p->bNotF
1d5a0 69 72 73 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  irst = 1;.      
1d5b0 20 20 20 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20      p->n = 0;.  
1d5c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
1d5d0 73 76 5f 72 65 61 64 5f 6f 6e 65 5f 66 69 65 6c  sv_read_one_fiel
1d5e0 64 28 70 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  d(p);.        }.
1d5f0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1d600 20 20 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20    while( c!=EOF 
1d610 26 26 20 63 21 3d 63 53 65 70 20 26 26 20 63 21  && c!=cSep && c!
1d620 3d 72 53 65 70 20 29 7b 0a 20 20 20 20 20 20 69  =rSep ){.      i
1d630 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61  mport_append_cha
1d640 72 28 70 2c 20 63 29 3b 0a 20 20 20 20 20 20 63  r(p, c);.      c
1d650 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b   = fgetc(p->in);
1d660 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 63  .    }.    if( c
1d670 3d 3d 72 53 65 70 20 29 7b 0a 20 20 20 20 20 20  ==rSep ){.      
1d680 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20  p->nLine++;.    
1d690 20 20 69 66 28 20 70 2d 3e 6e 3e 30 20 26 26 20    if( p->n>0 && 
1d6a0 70 2d 3e 7a 5b 70 2d 3e 6e 2d 31 5d 3d 3d 27 5c  p->z[p->n-1]=='\
1d6b0 72 27 20 29 20 70 2d 3e 6e 2d 2d 3b 0a 20 20 20  r' ) p->n--;.   
1d6c0 20 7d 0a 20 20 20 20 70 2d 3e 63 54 65 72 6d 20   }.    p->cTerm 
1d6d0 3d 20 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  = c;.  }.  if( p
1d6e0 2d 3e 7a 20 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d  ->z ) p->z[p->n]
1d6f0 20 3d 20 30 3b 0a 20 20 70 2d 3e 62 4e 6f 74 46   = 0;.  p->bNotF
1d700 69 72 73 74 20 3d 20 31 3b 0a 20 20 72 65 74 75  irst = 1;.  retu
1d710 72 6e 20 70 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 20 52  rn p->z;.}../* R
1d720 65 61 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65  ead a single fie
1d730 6c 64 20 6f 66 20 41 53 43 49 49 20 64 65 6c 69  ld of ASCII deli
1d740 6d 69 74 65 64 20 74 65 78 74 2e 0a 2a 2a 0a 2a  mited text..**.*
1d750 2a 20 20 20 2b 20 20 49 6e 70 75 74 20 63 6f 6d  *   +  Input com
1d760 65 73 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a  es from p->in..*
1d770 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 72 65 73  *   +  Store res
1d780 75 6c 74 73 20 69 6e 20 70 2d 3e 7a 20 6f 66 20  ults in p->z of 
1d790 6c 65 6e 67 74 68 20 70 2d 3e 6e 2e 20 20 53 70  length p->n.  Sp
1d7a0 61 63 65 20 74 6f 20 68 6f 6c 64 20 70 2d 3e 7a  ace to hold p->z
1d7b0 20 63 6f 6d 65 73 0a 2a 2a 20 20 20 20 20 20 66   comes.**      f
1d7c0 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  rom sqlite3_mall
1d7d0 6f 63 36 34 28 29 2e 0a 2a 2a 20 20 20 2b 20 20  oc64()..**   +  
1d7e0 55 73 65 20 70 2d 3e 63 53 65 70 20 61 73 20 74  Use p->cSep as t
1d7f0 68 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61  he column separa
1d800 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c  tor.  The defaul
1d810 74 20 69 73 20 22 5c 78 31 46 22 2e 0a 2a 2a 20  t is "\x1F"..** 
1d820 20 20 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70    +  Use p->rSep
1d830 20 61 73 20 74 68 65 20 72 6f 77 20 73 65 70 61   as the row sepa
1d840 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61  rator.  The defa
1d850 75 6c 74 20 69 73 20 22 5c 78 31 45 22 2e 0a 2a  ult is "\x1E"..*
1d860 2a 20 20 20 2b 20 20 4b 65 65 70 20 74 72 61 63  *   +  Keep trac
1d870 6b 20 6f 66 20 74 68 65 20 72 6f 77 20 6e 75 6d  k of the row num
1d880 62 65 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e  ber in p->nLine.
1d890 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74  .**   +  Store t
1d8a0 68 65 20 63 68 61 72 61 63 74 65 72 20 74 68 61  he character tha
1d8b0 74 20 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65  t terminates the
1d8c0 20 66 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65   field in p->cTe
1d8d0 72 6d 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20  rm.  Store.**   
1d8e0 20 20 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66     EOF on end-of
1d8f0 2d 66 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52  -file..**   +  R
1d900 65 70 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72  eport syntax err
1d910 6f 72 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f  ors on stderr.*/
1d920 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 53 51  .static char *SQ
1d930 4c 49 54 45 5f 43 44 45 43 4c 20 61 73 63 69 69  LITE_CDECL ascii
1d940 5f 72 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28  _read_one_field(
1d950 49 6d 70 6f 72 74 43 74 78 20 2a 70 29 7b 0a 20  ImportCtx *p){. 
1d960 20 69 6e 74 20 63 3b 0a 20 20 69 6e 74 20 63 53   int c;.  int cS
1d970 65 70 20 3d 20 70 2d 3e 63 43 6f 6c 53 65 70 3b  ep = p->cColSep;
1d980 0a 20 20 69 6e 74 20 72 53 65 70 20 3d 20 70 2d  .  int rSep = p-
1d990 3e 63 52 6f 77 53 65 70 3b 0a 20 20 70 2d 3e 6e  >cRowSep;.  p->n
1d9a0 20 3d 20 30 3b 0a 20 20 63 20 3d 20 66 67 65 74   = 0;.  c = fget
1d9b0 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 69 66 28 20  c(p->in);.  if( 
1d9c0 63 3d 3d 45 4f 46 20 7c 7c 20 73 65 65 6e 49 6e  c==EOF || seenIn
1d9d0 74 65 72 72 75 70 74 20 29 7b 0a 20 20 20 20 70  terrupt ){.    p
1d9e0 2d 3e 63 54 65 72 6d 20 3d 20 45 4f 46 3b 0a 20  ->cTerm = EOF;. 
1d9f0 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
1da00 0a 20 20 77 68 69 6c 65 28 20 63 21 3d 45 4f 46  .  while( c!=EOF
1da10 20 26 26 20 63 21 3d 63 53 65 70 20 26 26 20 63   && c!=cSep && c
1da20 21 3d 72 53 65 70 20 29 7b 0a 20 20 20 20 69 6d  !=rSep ){.    im
1da30 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72  port_append_char
1da40 28 70 2c 20 63 29 3b 0a 20 20 20 20 63 20 3d 20  (p, c);.    c = 
1da50 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20  fgetc(p->in);.  
1da60 7d 0a 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20  }.  if( c==rSep 
1da70 29 7b 0a 20 20 20 20 70 2d 3e 6e 4c 69 6e 65 2b  ){.    p->nLine+
1da80 2b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 63 54 65 72  +;.  }.  p->cTer
1da90 6d 20 3d 20 63 3b 0a 20 20 69 66 28 20 70 2d 3e  m = c;.  if( p->
1daa0 7a 20 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d  z ) p->z[p->n] =
1dab0 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e   0;.  return p->
1dac0 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20  z;.}../*.** Try 
1dad0 74 6f 20 74 72 61 6e 73 66 65 72 20 64 61 74 61  to transfer data
1dae0 20 66 6f 72 20 74 61 62 6c 65 20 7a 54 61 62 6c   for table zTabl
1daf0 65 2e 20 20 49 66 20 61 6e 20 65 72 72 6f 72 20  e.  If an error 
1db00 69 73 20 73 65 65 6e 20 77 68 69 6c 65 0a 2a 2a  is seen while.**
1db10 20 6d 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 2c   moving forward,
1db20 20 74 72 79 20 74 6f 20 67 6f 20 62 61 63 6b 77   try to go backw
1db30 61 72 64 73 2e 20 20 54 68 65 20 62 61 63 6b 77  ards.  The backw
1db40 61 72 64 73 20 6d 6f 76 65 6d 65 6e 74 20 77 6f  ards movement wo
1db50 6e 27 74 0a 2a 2a 20 77 6f 72 6b 20 66 6f 72 20  n't.** work for 
1db60 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
1db70 62 6c 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  bles..*/.static 
1db80 76 6f 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65 44  void tryToCloneD
1db90 61 74 61 28 0a 20 20 53 68 65 6c 6c 53 74 61 74  ata(.  ShellStat
1dba0 65 20 2a 70 2c 0a 20 20 73 71 6c 69 74 65 33 20  e *p,.  sqlite3 
1dbb0 2a 6e 65 77 44 62 2c 0a 20 20 63 6f 6e 73 74 20  *newDb,.  const 
1dbc0 63 68 61 72 20 2a 7a 54 61 62 6c 65 0a 29 7b 0a  char *zTable.){.
1dbd0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1dbe0 70 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 73 71  pQuery = 0;.  sq
1dbf0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 49 6e 73  lite3_stmt *pIns
1dc00 65 72 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  ert = 0;.  char 
1dc10 2a 7a 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63  *zQuery = 0;.  c
1dc20 68 61 72 20 2a 7a 49 6e 73 65 72 74 20 3d 20 30  har *zInsert = 0
1dc30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e  ;.  int rc;.  in
1dc40 74 20 69 2c 20 6a 2c 20 6e 3b 0a 20 20 69 6e 74  t i, j, n;.  int
1dc50 20 6e 54 61 62 6c 65 20 3d 20 73 74 72 6c 65 6e   nTable = strlen
1dc60 33 30 28 7a 54 61 62 6c 65 29 3b 0a 20 20 69 6e  30(zTable);.  in
1dc70 74 20 6b 20 3d 20 30 3b 0a 20 20 69 6e 74 20 63  t k = 0;.  int c
1dc80 6e 74 20 3d 20 30 3b 0a 20 20 63 6f 6e 73 74 20  nt = 0;.  const 
1dc90 69 6e 74 20 73 70 69 6e 52 61 74 65 20 3d 20 31  int spinRate = 1
1dca0 30 30 30 30 3b 0a 0a 20 20 7a 51 75 65 72 79 20  0000;..  zQuery 
1dcb0 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
1dcc0 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  f("SELECT * FROM
1dcd0 20 5c 22 25 77 5c 22 22 2c 20 7a 54 61 62 6c 65   \"%w\"", zTable
1dce0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
1dcf0 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e  3_prepare_v2(p->
1dd00 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31 2c 20  db, zQuery, -1, 
1dd10 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20 69  &pQuery, 0);.  i
1dd20 66 28 20 72 63 20 29 7b 0a 20 20 20 20 75 74 66  f( rc ){.    utf
1dd30 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
1dd40 20 22 45 72 72 6f 72 20 25 64 3a 20 25 73 20 6f   "Error %d: %s o
1dd50 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20  n [%s]\n",.     
1dd60 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65         sqlite3_e
1dd70 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28  xtended_errcode(
1dd80 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65 33 5f  p->db), sqlite3_
1dd90 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 2c 0a 20  errmsg(p->db),. 
1dda0 20 20 20 20 20 20 20 20 20 20 20 7a 51 75 65 72             zQuer
1ddb0 79 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64  y);.    goto end
1ddc0 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20 7d 0a  _data_xfer;.  }.
1ddd0 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f    n = sqlite3_co
1dde0 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 51 75 65 72  lumn_count(pQuer
1ddf0 79 29 3b 0a 20 20 7a 49 6e 73 65 72 74 20 3d 20  y);.  zInsert = 
1de00 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34  sqlite3_malloc64
1de10 28 32 30 30 20 2b 20 6e 54 61 62 6c 65 20 2b 20  (200 + nTable + 
1de20 6e 2a 33 29 3b 0a 20 20 69 66 28 20 7a 49 6e 73  n*3);.  if( zIns
1de30 65 72 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 61  ert==0 ){.    ra
1de40 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1de50 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c   "out of memory\
1de60 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e  n");.    goto en
1de70 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20 7d  d_data_xfer;.  }
1de80 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  .  sqlite3_snpri
1de90 6e 74 66 28 32 30 30 2b 6e 54 61 62 6c 65 2c 7a  ntf(200+nTable,z
1dea0 49 6e 73 65 72 74 2c 0a 20 20 20 20 20 20 20 20  Insert,.        
1deb0 20 20 20 20 20 20 20 20 20 20 20 22 49 4e 53 45             "INSE
1dec0 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54  RT OR IGNORE INT
1ded0 4f 20 5c 22 25 73 5c 22 20 56 41 4c 55 45 53 28  O \"%s\" VALUES(
1dee0 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 69  ?", zTable);.  i
1def0 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 49 6e 73   = strlen30(zIns
1df00 65 72 74 29 3b 0a 20 20 66 6f 72 28 6a 3d 31 3b  ert);.  for(j=1;
1df10 20 6a 3c 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20   j<n; j++){.    
1df20 6d 65 6d 63 70 79 28 7a 49 6e 73 65 72 74 2b 69  memcpy(zInsert+i
1df30 2c 20 22 2c 3f 22 2c 20 32 29 3b 0a 20 20 20 20  , ",?", 2);.    
1df40 69 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 6d 65  i += 2;.  }.  me
1df50 6d 63 70 79 28 7a 49 6e 73 65 72 74 2b 69 2c 20  mcpy(zInsert+i, 
1df60 22 29 3b 22 2c 20 33 29 3b 0a 20 20 72 63 20 3d  ");", 3);.  rc =
1df70 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
1df80 5f 76 32 28 6e 65 77 44 62 2c 20 7a 49 6e 73 65  _v2(newDb, zInse
1df90 72 74 2c 20 2d 31 2c 20 26 70 49 6e 73 65 72 74  rt, -1, &pInsert
1dfa0 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 20 29  , 0);.  if( rc )
1dfb0 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  {.    utf8_print
1dfc0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
1dfd0 20 25 64 3a 20 25 73 20 6f 6e 20 5b 25 73 5d 5c   %d: %s on [%s]\
1dfe0 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
1dff0 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
1e000 5f 65 72 72 63 6f 64 65 28 6e 65 77 44 62 29 2c  _errcode(newDb),
1e010 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
1e020 6e 65 77 44 62 29 2c 0a 20 20 20 20 20 20 20 20  newDb),.        
1e030 20 20 20 20 7a 51 75 65 72 79 29 3b 0a 20 20 20      zQuery);.   
1e040 20 67 6f 74 6f 20 65 6e 64 5f 64 61 74 61 5f 78   goto end_data_x
1e050 66 65 72 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 6b  fer;.  }.  for(k
1e060 3d 30 3b 20 6b 3c 32 3b 20 6b 2b 2b 29 7b 0a 20  =0; k<2; k++){. 
1e070 20 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20     while( (rc = 
1e080 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 51 75  sqlite3_step(pQu
1e090 65 72 79 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  ery))==SQLITE_RO
1e0a0 57 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69  W ){.      for(i
1e0b0 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
1e0c0 20 20 20 20 20 20 20 73 77 69 74 63 68 28 20 73         switch( s
1e0d0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79  qlite3_column_ty
1e0e0 70 65 28 70 51 75 65 72 79 2c 20 69 29 20 29 7b  pe(pQuery, i) ){
1e0f0 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20  .          case 
1e100 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a 20 7b 0a 20  SQLITE_NULL: {. 
1e110 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
1e120 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 49 6e  e3_bind_null(pIn
1e130 73 65 72 74 2c 20 69 2b 31 29 3b 0a 20 20 20 20  sert, i+1);.    
1e140 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1e150 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1e160 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
1e170 5f 49 4e 54 45 47 45 52 3a 20 7b 0a 20 20 20 20  _INTEGER: {.    
1e180 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1e190 62 69 6e 64 5f 69 6e 74 36 34 28 70 49 6e 73 65  bind_int64(pInse
1e1a0 72 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65 33  rt, i+1, sqlite3
1e1b0 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 70 51  _column_int64(pQ
1e1c0 75 65 72 79 2c 69 29 29 3b 0a 20 20 20 20 20 20  uery,i));.      
1e1d0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1e1e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1e1f0 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46     case SQLITE_F
1e200 4c 4f 41 54 3a 20 7b 0a 20 20 20 20 20 20 20 20  LOAT: {.        
1e210 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
1e220 5f 64 6f 75 62 6c 65 28 70 49 6e 73 65 72 74 2c  _double(pInsert,
1e230 20 69 2b 31 2c 20 73 71 6c 69 74 65 33 5f 63 6f   i+1, sqlite3_co
1e240 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 51 75 65  lumn_double(pQue
1e250 72 79 2c 69 29 29 3b 0a 20 20 20 20 20 20 20 20  ry,i));.        
1e260 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1e270 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1e280 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 58   case SQLITE_TEX
1e290 54 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  T: {.           
1e2a0 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
1e2b0 78 74 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 2c  xt(pInsert, i+1,
1e2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63                (c
1e2e0 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
1e2f0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
1e300 51 75 65 72 79 2c 69 29 2c 0a 20 20 20 20 20 20  Query,i),.      
1e310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e320 20 20 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54         -1, SQLIT
1e330 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
1e340 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1e350 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1e360 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
1e370 42 4c 4f 42 3a 20 7b 0a 20 20 20 20 20 20 20 20  BLOB: {.        
1e380 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
1e390 5f 62 6c 6f 62 28 70 49 6e 73 65 72 74 2c 20 69  _blob(pInsert, i
1e3a0 2b 31 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  +1, sqlite3_colu
1e3b0 6d 6e 5f 62 6c 6f 62 28 70 51 75 65 72 79 2c 69  mn_blob(pQuery,i
1e3c0 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e3f0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
1e400 74 65 73 28 70 51 75 65 72 79 2c 69 29 2c 0a 20  tes(pQuery,i),. 
1e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e430 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
1e440 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
1e450 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1e460 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1e470 20 20 7d 0a 20 20 20 20 20 20 7d 20 2f 2a 20 45    }.      } /* E
1e480 6e 64 20 66 6f 72 20 2a 2f 0a 20 20 20 20 20 20  nd for */.      
1e490 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65  rc = sqlite3_ste
1e4a0 70 28 70 49 6e 73 65 72 74 29 3b 0a 20 20 20 20  p(pInsert);.    
1e4b0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1e4c0 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49 54  _OK && rc!=SQLIT
1e4d0 45 5f 52 4f 57 20 26 26 20 72 63 21 3d 53 51 4c  E_ROW && rc!=SQL
1e4e0 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20  ITE_DONE ){.    
1e4f0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1e500 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20 25  stderr, "Error %
1e510 64 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65  d: %s\n", sqlite
1e520 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f  3_extended_errco
1e530 64 65 28 6e 65 77 44 62 29 2c 0a 20 20 20 20 20  de(newDb),.     
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e550 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
1e560 67 28 6e 65 77 44 62 29 29 3b 0a 20 20 20 20 20  g(newDb));.     
1e570 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
1e580 5f 72 65 73 65 74 28 70 49 6e 73 65 72 74 29 3b  _reset(pInsert);
1e590 0a 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20  .      cnt++;.  
1e5a0 20 20 20 20 69 66 28 20 28 63 6e 74 25 73 70 69      if( (cnt%spi
1e5b0 6e 52 61 74 65 29 3d 3d 30 20 29 7b 0a 20 20 20  nRate)==0 ){.   
1e5c0 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 63 5c       printf("%c\
1e5d0 62 22 2c 20 22 7c 2f 2d 5c 5c 22 5b 28 63 6e 74  b", "|/-\\"[(cnt
1e5e0 2f 73 70 69 6e 52 61 74 65 29 25 34 5d 29 3b 0a  /spinRate)%4]);.
1e5f0 20 20 20 20 20 20 20 20 66 66 6c 75 73 68 28 73          fflush(s
1e600 74 64 6f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a  tdout);.      }.
1e610 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20 77 68 69      } /* End whi
1e620 6c 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63  le */.    if( rc
1e630 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20  ==SQLITE_DONE ) 
1e640 62 72 65 61 6b 3b 0a 20 20 20 20 73 71 6c 69 74  break;.    sqlit
1e650 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 51 75 65  e3_finalize(pQue
1e660 72 79 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ry);.    sqlite3
1e670 5f 66 72 65 65 28 7a 51 75 65 72 79 29 3b 0a 20  _free(zQuery);. 
1e680 20 20 20 7a 51 75 65 72 79 20 3d 20 73 71 6c 69     zQuery = sqli
1e690 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c  te3_mprintf("SEL
1e6a0 45 43 54 20 2a 20 46 52 4f 4d 20 5c 22 25 77 5c  ECT * FROM \"%w\
1e6b0 22 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  " ORDER BY rowid
1e6c0 20 44 45 53 43 3b 22 2c 0a 20 20 20 20 20 20 20   DESC;",.       
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6e0 20 20 20 20 20 20 7a 54 61 62 6c 65 29 3b 0a 20        zTable);. 
1e6f0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
1e700 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
1e710 2c 20 7a 51 75 65 72 79 2c 20 2d 31 2c 20 26 70  , zQuery, -1, &p
1e720 51 75 65 72 79 2c 20 30 29 3b 0a 20 20 20 20 69  Query, 0);.    i
1e730 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 75  f( rc ){.      u
1e740 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
1e750 72 2c 20 22 57 61 72 6e 69 6e 67 3a 20 63 61 6e  r, "Warning: can
1e760 6e 6f 74 20 73 74 65 70 20 5c 22 25 73 5c 22 20  not step \"%s\" 
1e770 62 61 63 6b 77 61 72 64 73 22 2c 20 7a 54 61 62  backwards", zTab
1e780 6c 65 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  le);.      break
1e790 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 2f 2a 20 45  ;.    }.  } /* E
1e7a0 6e 64 20 66 6f 72 28 6b 3d 30 2e 2e 2e 29 20 2a  nd for(k=0...) *
1e7b0 2f 0a 0a 65 6e 64 5f 64 61 74 61 5f 78 66 65 72  /..end_data_xfer
1e7c0 3a 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  :.  sqlite3_fina
1e7d0 6c 69 7a 65 28 70 51 75 65 72 79 29 3b 0a 20 20  lize(pQuery);.  
1e7e0 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
1e7f0 28 70 49 6e 73 65 72 74 29 3b 0a 20 20 73 71 6c  (pInsert);.  sql
1e800 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79  ite3_free(zQuery
1e810 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
1e820 65 28 7a 49 6e 73 65 72 74 29 3b 0a 7d 0a 0a 0a  e(zInsert);.}...
1e830 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 74 72 61  /*.** Try to tra
1e840 6e 73 66 65 72 20 61 6c 6c 20 72 6f 77 73 20 6f  nsfer all rows o
1e850 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 68 61  f the schema tha
1e860 74 20 6d 61 74 63 68 20 7a 57 68 65 72 65 2e 20  t match zWhere. 
1e870 20 46 6f 72 0a 2a 2a 20 65 61 63 68 20 72 6f 77   For.** each row
1e880 2c 20 69 6e 76 6f 6b 65 20 78 46 6f 72 45 61 63  , invoke xForEac
1e890 68 28 29 20 6f 6e 20 74 68 65 20 6f 62 6a 65 63  h() on the objec
1e8a0 74 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 61  t defined by tha
1e8b0 74 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 61 6e 20  t row..** If an 
1e8c0 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74  error is encount
1e8d0 65 72 65 64 20 77 68 69 6c 65 20 6d 6f 76 69 6e  ered while movin
1e8e0 67 20 66 6f 72 77 61 72 64 20 74 68 72 6f 75 67  g forward throug
1e8f0 68 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 5f  h the.** sqlite_
1e900 6d 61 73 74 65 72 20 74 61 62 6c 65 2c 20 74 72  master table, tr
1e910 79 20 61 67 61 69 6e 20 6d 6f 76 69 6e 67 20 62  y again moving b
1e920 61 63 6b 77 61 72 64 73 2e 0a 2a 2f 0a 73 74 61  ackwards..*/.sta
1e930 74 69 63 20 76 6f 69 64 20 74 72 79 54 6f 43 6c  tic void tryToCl
1e940 6f 6e 65 53 63 68 65 6d 61 28 0a 20 20 53 68 65  oneSchema(.  She
1e950 6c 6c 53 74 61 74 65 20 2a 70 2c 0a 20 20 73 71  llState *p,.  sq
1e960 6c 69 74 65 33 20 2a 6e 65 77 44 62 2c 0a 20 20  lite3 *newDb,.  
1e970 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 57 68 65  const char *zWhe
1e980 72 65 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 6f  re,.  void (*xFo
1e990 72 45 61 63 68 29 28 53 68 65 6c 6c 53 74 61 74  rEach)(ShellStat
1e9a0 65 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  e*,sqlite3*,cons
1e9b0 74 20 63 68 61 72 2a 29 0a 29 7b 0a 20 20 73 71  t char*).){.  sq
1e9c0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 51 75 65  lite3_stmt *pQue
1e9d0 72 79 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a  ry = 0;.  char *
1e9e0 7a 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 69 6e  zQuery = 0;.  in
1e9f0 74 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20 75 6e  t rc;.  const un
1ea00 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 4e 61  signed char *zNa
1ea10 6d 65 3b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69  me;.  const unsi
1ea20 67 6e 65 64 20 63 68 61 72 20 2a 7a 53 71 6c 3b  gned char *zSql;
1ea30 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
1ea40 20 3d 20 30 3b 0a 0a 20 20 7a 51 75 65 72 79 20   = 0;..  zQuery 
1ea50 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
1ea60 66 28 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20  f("SELECT name, 
1ea70 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
1ea80 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20  master".        
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaa0 20 20 20 22 20 57 48 45 52 45 20 25 73 22 2c 20     " WHERE %s", 
1eab0 7a 57 68 65 72 65 29 3b 0a 20 20 72 63 20 3d 20  zWhere);.  rc = 
1eac0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
1ead0 76 32 28 70 2d 3e 64 62 2c 20 7a 51 75 65 72 79  v2(p->db, zQuery
1eae0 2c 20 2d 31 2c 20 26 70 51 75 65 72 79 2c 20 30  , -1, &pQuery, 0
1eaf0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
1eb00 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1eb10 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 28  tderr, "Error: (
1eb20 25 64 29 20 25 73 20 6f 6e 20 5b 25 73 5d 5c 6e  %d) %s on [%s]\n
1eb30 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
1eb40 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65         sqlite3_e
1eb50 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28  xtended_errcode(
1eb60 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65 33 5f  p->db), sqlite3_
1eb70 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 2c 0a 20  errmsg(p->db),. 
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 20 20 20 7a 51 75 65 72 79 29 3b 0a 20 20 20 20     zQuery);.    
1eba0 67 6f 74 6f 20 65 6e 64 5f 73 63 68 65 6d 61 5f  goto end_schema_
1ebb0 78 66 65 72 3b 0a 20 20 7d 0a 20 20 77 68 69 6c  xfer;.  }.  whil
1ebc0 65 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  e( (rc = sqlite3
1ebd0 5f 73 74 65 70 28 70 51 75 65 72 79 29 29 3d 3d  _step(pQuery))==
1ebe0 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20  SQLITE_ROW ){.  
1ebf0 20 20 7a 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65    zName = sqlite
1ec00 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51  3_column_text(pQ
1ec10 75 65 72 79 2c 20 30 29 3b 0a 20 20 20 20 7a 53  uery, 0);.    zS
1ec20 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ql = sqlite3_col
1ec30 75 6d 6e 5f 74 65 78 74 28 70 51 75 65 72 79 2c  umn_text(pQuery,
1ec40 20 31 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28   1);.    printf(
1ec50 22 25 73 2e 2e 2e 20 22 2c 20 7a 4e 61 6d 65 29  "%s... ", zName)
1ec60 3b 20 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29  ; fflush(stdout)
1ec70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78  ;.    sqlite3_ex
1ec80 65 63 28 6e 65 77 44 62 2c 20 28 63 6f 6e 73 74  ec(newDb, (const
1ec90 20 63 68 61 72 2a 29 7a 53 71 6c 2c 20 30 2c 20   char*)zSql, 0, 
1eca0 30 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  0, &zErrMsg);.  
1ecb0 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b    if( zErrMsg ){
1ecc0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
1ecd0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1ece0 72 3a 20 25 73 5c 6e 53 51 4c 3a 20 5b 25 73 5d  r: %s\nSQL: [%s]
1ecf0 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 2c 20 7a 53  \n", zErrMsg, zS
1ed00 71 6c 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ql);.      sqlit
1ed10 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
1ed20 3b 0a 20 20 20 20 20 20 7a 45 72 72 4d 73 67 20  ;.      zErrMsg 
1ed30 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  = 0;.    }.    i
1ed40 66 28 20 78 46 6f 72 45 61 63 68 20 29 7b 0a 20  f( xForEach ){. 
1ed50 20 20 20 20 20 78 46 6f 72 45 61 63 68 28 70 2c       xForEach(p,
1ed60 20 6e 65 77 44 62 2c 20 28 63 6f 6e 73 74 20 63   newDb, (const c
1ed70 68 61 72 2a 29 7a 4e 61 6d 65 29 3b 0a 20 20 20  har*)zName);.   
1ed80 20 7d 0a 20 20 20 20 70 72 69 6e 74 66 28 22 64   }.    printf("d
1ed90 6f 6e 65 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 69  one\n");.  }.  i
1eda0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f  f( rc!=SQLITE_DO
1edb0 4e 45 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  NE ){.    sqlite
1edc0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 51 75 65 72  3_finalize(pQuer
1edd0 79 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  y);.    sqlite3_
1ede0 66 72 65 65 28 7a 51 75 65 72 79 29 3b 0a 20 20  free(zQuery);.  
1edf0 20 20 7a 51 75 65 72 79 20 3d 20 73 71 6c 69 74    zQuery = sqlit
1ee00 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45  e3_mprintf("SELE
1ee10 43 54 20 6e 61 6d 65 2c 20 73 71 6c 20 46 52 4f  CT name, sql FRO
1ee20 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  M sqlite_master"
1ee30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
1ee50 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
1ee60 59 20 72 6f 77 69 64 20 44 45 53 43 22 2c 20 7a  Y rowid DESC", z
1ee70 57 68 65 72 65 29 3b 0a 20 20 20 20 72 63 20 3d  Where);.    rc =
1ee80 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
1ee90 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 51 75 65 72  _v2(p->db, zQuer
1eea0 79 2c 20 2d 31 2c 20 26 70 51 75 65 72 79 2c 20  y, -1, &pQuery, 
1eeb0 30 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  0);.    if( rc )
1eec0 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
1eed0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
1eee0 6f 72 3a 20 28 25 64 29 20 25 73 20 6f 6e 20 5b  or: (%d) %s on [
1eef0 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  %s]\n",.        
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
1ef10 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
1ef20 72 72 63 6f 64 65 28 70 2d 3e 64 62 29 2c 20 73  rrcode(p->db), s
1ef30 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d  qlite3_errmsg(p-
1ef40 3e 64 62 29 2c 0a 20 20 20 20 20 20 20 20 20 20  >db),.          
1ef50 20 20 20 20 20 20 20 20 20 20 20 20 7a 51 75 65              zQue
1ef60 72 79 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ry);.      goto 
1ef70 65 6e 64 5f 73 63 68 65 6d 61 5f 78 66 65 72 3b  end_schema_xfer;
1ef80 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65  .    }.    while
1ef90 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  ( (rc = sqlite3_
1efa0 73 74 65 70 28 70 51 75 65 72 79 29 29 3d 3d 53  step(pQuery))==S
1efb0 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20  QLITE_ROW ){.   
1efc0 20 20 20 7a 4e 61 6d 65 20 3d 20 73 71 6c 69 74     zName = sqlit
1efd0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
1efe0 51 75 65 72 79 2c 20 30 29 3b 0a 20 20 20 20 20  Query, 0);.     
1eff0 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f   zSql = sqlite3_
1f000 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75 65  column_text(pQue
1f010 72 79 2c 20 31 29 3b 0a 20 20 20 20 20 20 70 72  ry, 1);.      pr
1f020 69 6e 74 66 28 22 25 73 2e 2e 2e 20 22 2c 20 7a  intf("%s... ", z
1f030 4e 61 6d 65 29 3b 20 66 66 6c 75 73 68 28 73 74  Name); fflush(st
1f040 64 6f 75 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  dout);.      sql
1f050 69 74 65 33 5f 65 78 65 63 28 6e 65 77 44 62 2c  ite3_exec(newDb,
1f060 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 53   (const char*)zS
1f070 71 6c 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d  ql, 0, 0, &zErrM
1f080 73 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  sg);.      if( z
1f090 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20  ErrMsg ){.      
1f0a0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
1f0b0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73  derr, "Error: %s
1f0c0 5c 6e 53 51 4c 3a 20 5b 25 73 5d 5c 6e 22 2c 20  \nSQL: [%s]\n", 
1f0d0 7a 45 72 72 4d 73 67 2c 20 7a 53 71 6c 29 3b 0a  zErrMsg, zSql);.
1f0e0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1f0f0 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20  free(zErrMsg);. 
1f100 20 20 20 20 20 20 20 7a 45 72 72 4d 73 67 20 3d         zErrMsg =
1f110 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
1f120 20 20 69 66 28 20 78 46 6f 72 45 61 63 68 20 29    if( xForEach )
1f130 7b 0a 20 20 20 20 20 20 20 20 78 46 6f 72 45 61  {.        xForEa
1f140 63 68 28 70 2c 20 6e 65 77 44 62 2c 20 28 63 6f  ch(p, newDb, (co
1f150 6e 73 74 20 63 68 61 72 2a 29 7a 4e 61 6d 65 29  nst char*)zName)
1f160 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1f170 70 72 69 6e 74 66 28 22 64 6f 6e 65 5c 6e 22 29  printf("done\n")
1f180 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 65 6e 64 5f  ;.    }.  }.end_
1f190 73 63 68 65 6d 61 5f 78 66 65 72 3a 0a 20 20 73  schema_xfer:.  s
1f1a0 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1f1b0 70 51 75 65 72 79 29 3b 0a 20 20 73 71 6c 69 74  pQuery);.  sqlit
1f1c0 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79 29 3b  e3_free(zQuery);
1f1d0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61  .}../*.** Open a
1f1e0 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69   new database fi
1f1f0 6c 65 20 6e 61 6d 65 64 20 22 7a 4e 65 77 44 62  le named "zNewDb
1f200 22 2e 20 20 54 72 79 20 74 6f 20 72 65 63 6f 76  ".  Try to recov
1f210 65 72 20 61 73 20 6d 75 63 68 20 69 6e 66 6f 72  er as much infor
1f220 6d 61 74 69 6f 6e 0a 2a 2a 20 61 73 20 70 6f 73  mation.** as pos
1f230 73 69 62 6c 65 20 6f 75 74 20 6f 66 20 74 68 65  sible out of the
1f240 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 28   main database (
1f250 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 63  which might be c
1f260 6f 72 72 75 70 74 29 20 61 6e 64 20 77 72 69 74  orrupt) and writ
1f270 65 20 69 74 0a 2a 2a 20 69 6e 74 6f 20 7a 4e 65  e it.** into zNe
1f280 77 44 62 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  wDb..*/.static v
1f290 6f 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65 28 53  oid tryToClone(S
1f2a0 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f  hellState *p, co
1f2b0 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 44 62  nst char *zNewDb
1f2c0 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73  ){.  int rc;.  s
1f2d0 71 6c 69 74 65 33 20 2a 6e 65 77 44 62 20 3d 20  qlite3 *newDb = 
1f2e0 30 3b 0a 20 20 69 66 28 20 61 63 63 65 73 73 28  0;.  if( access(
1f2f0 7a 4e 65 77 44 62 2c 30 29 3d 3d 30 20 29 7b 0a  zNewDb,0)==0 ){.
1f300 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1f310 73 74 64 65 72 72 2c 20 22 46 69 6c 65 20 5c 22  stderr, "File \"
1f320 25 73 5c 22 20 61 6c 72 65 61 64 79 20 65 78 69  %s\" already exi
1f330 73 74 73 2e 5c 6e 22 2c 20 7a 4e 65 77 44 62 29  sts.\n", zNewDb)
1f340 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  ;.    return;.  
1f350 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
1f360 5f 6f 70 65 6e 28 7a 4e 65 77 44 62 2c 20 26 6e  _open(zNewDb, &n
1f370 65 77 44 62 29 3b 0a 20 20 69 66 28 20 72 63 20  ewDb);.  if( rc 
1f380 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  ){.    utf8_prin
1f390 74 66 28 73 74 64 65 72 72 2c 20 22 43 61 6e 6e  tf(stderr, "Cann
1f3a0 6f 74 20 63 72 65 61 74 65 20 6f 75 74 70 75 74  ot create output
1f3b0 20 64 61 74 61 62 61 73 65 3a 20 25 73 5c 6e 22   database: %s\n"
1f3c0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ,.            sq
1f3d0 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 6e 65 77  lite3_errmsg(new
1f3e0 44 62 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Db));.  }else{. 
1f3f0 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28     sqlite3_exec(
1f400 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41 20 77  p->db, "PRAGMA w
1f410 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
1f420 4e 3b 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  N;", 0, 0, 0);. 
1f430 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28     sqlite3_exec(
1f440 6e 65 77 44 62 2c 20 22 42 45 47 49 4e 20 45 58  newDb, "BEGIN EX
1f450 43 4c 55 53 49 56 45 3b 22 2c 20 30 2c 20 30 2c  CLUSIVE;", 0, 0,
1f460 20 30 29 3b 0a 20 20 20 20 74 72 79 54 6f 43 6c   0);.    tryToCl
1f470 6f 6e 65 53 63 68 65 6d 61 28 70 2c 20 6e 65 77  oneSchema(p, new
1f480 44 62 2c 20 22 74 79 70 65 3d 27 74 61 62 6c 65  Db, "type='table
1f490 27 22 2c 20 74 72 79 54 6f 43 6c 6f 6e 65 44 61  '", tryToCloneDa
1f4a0 74 61 29 3b 0a 20 20 20 20 74 72 79 54 6f 43 6c  ta);.    tryToCl
1f4b0 6f 6e 65 53 63 68 65 6d 61 28 70 2c 20 6e 65 77  oneSchema(p, new
1f4c0 44 62 2c 20 22 74 79 70 65 21 3d 27 74 61 62 6c  Db, "type!='tabl
1f4d0 65 27 22 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  e'", 0);.    sql
1f4e0 69 74 65 33 5f 65 78 65 63 28 6e 65 77 44 62 2c  ite3_exec(newDb,
1f4f0 20 22 43 4f 4d 4d 49 54 3b 22 2c 20 30 2c 20 30   "COMMIT;", 0, 0
1f500 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
1f510 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 50  3_exec(p->db, "P
1f520 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
1f530 63 68 65 6d 61 3d 4f 46 46 3b 22 2c 20 30 2c 20  chema=OFF;", 0, 
1f540 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  0, 0);.  }.  sql
1f550 69 74 65 33 5f 63 6c 6f 73 65 28 6e 65 77 44 62  ite3_close(newDb
1f560 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e  );.}../*.** Chan
1f570 67 65 20 74 68 65 20 6f 75 74 70 75 74 20 66 69  ge the output fi
1f580 6c 65 20 62 61 63 6b 20 74 6f 20 73 74 64 6f 75  le back to stdou
1f590 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
1f5a0 70 2d 3e 64 6f 58 64 67 4f 70 65 6e 20 66 6c 61  p->doXdgOpen fla
1f5b0 67 20 69 73 20 73 65 74 2c 20 74 68 61 74 20 6d  g is set, that m
1f5c0 65 61 6e 73 20 74 68 65 20 6f 75 74 70 75 74 20  eans the output 
1f5d0 77 61 73 20 62 65 69 6e 67 0a 2a 2a 20 72 65 64  was being.** red
1f5e0 69 72 65 63 74 65 64 20 74 6f 20 61 20 74 65 6d  irected to a tem
1f5f0 70 6f 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65  porary file name
1f600 64 20 62 79 20 70 2d 3e 7a 54 65 6d 70 46 69 6c  d by p->zTempFil
1f610 65 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65  e.  In that case
1f620 2c 0a 2a 2a 20 6c 61 75 6e 63 68 20 73 74 61 72  ,.** launch star
1f630 74 2f 6f 70 65 6e 2f 78 64 67 2d 6f 70 65 6e 20  t/open/xdg-open 
1f640 6f 6e 20 74 68 61 74 20 74 65 6d 70 6f 72 61 72  on that temporar
1f650 79 20 66 69 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69  y file..*/.stati
1f660 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 72 65  c void output_re
1f670 73 65 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  set(ShellState *
1f680 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74  p){.  if( p->out
1f690 66 69 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29 7b 0a  file[0]=='|' ){.
1f6a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1f6b0 4d 49 54 5f 50 4f 50 45 4e 0a 20 20 20 20 70 63  MIT_POPEN.    pc
1f6c0 6c 6f 73 65 28 70 2d 3e 6f 75 74 29 3b 0a 23 65  lose(p->out);.#e
1f6d0 6e 64 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ndif.  }else{.  
1f6e0 20 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c    output_file_cl
1f6f0 6f 73 65 28 70 2d 3e 6f 75 74 29 3b 0a 23 69 66  ose(p->out);.#if
1f700 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 4f 48 41  ndef SQLITE_NOHA
1f710 56 45 5f 53 59 53 54 45 4d 0a 20 20 20 20 69 66  VE_SYSTEM.    if
1f720 28 20 70 2d 3e 64 6f 58 64 67 4f 70 65 6e 20 29  ( p->doXdgOpen )
1f730 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
1f740 61 72 20 2a 7a 58 64 67 4f 70 65 6e 43 6d 64 20  ar *zXdgOpenCmd 
1f750 3d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57  =.#if defined(_W
1f760 49 4e 33 32 29 0a 20 20 20 20 20 20 22 73 74 61  IN32).      "sta
1f770 72 74 22 3b 0a 23 65 6c 69 66 20 64 65 66 69 6e  rt";.#elif defin
1f780 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 20 20  ed(__APPLE__).  
1f790 20 20 20 20 22 6f 70 65 6e 22 3b 0a 23 65 6c 73      "open";.#els
1f7a0 65 0a 20 20 20 20 20 20 22 78 64 67 2d 6f 70 65  e.      "xdg-ope
1f7b0 6e 22 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  n";.#endif.     
1f7c0 20 63 68 61 72 20 2a 7a 43 6d 64 3b 0a 20 20 20   char *zCmd;.   
1f7d0 20 20 20 7a 43 6d 64 20 3d 20 73 71 6c 69 74 65     zCmd = sqlite
1f7e0 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 20 25 73  3_mprintf("%s %s
1f7f0 22 2c 20 7a 58 64 67 4f 70 65 6e 43 6d 64 2c 20  ", zXdgOpenCmd, 
1f800 70 2d 3e 7a 54 65 6d 70 46 69 6c 65 29 3b 0a 20  p->zTempFile);. 
1f810 20 20 20 20 20 69 66 28 20 73 79 73 74 65 6d 28       if( system(
1f820 7a 43 6d 64 29 20 29 7b 0a 20 20 20 20 20 20 20  zCmd) ){.       
1f830 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
1f840 65 72 72 2c 20 22 46 61 69 6c 65 64 3a 20 5b 25  err, "Failed: [%
1f850 73 5d 5c 6e 22 2c 20 7a 43 6d 64 29 3b 0a 20 20  s]\n", zCmd);.  
1f860 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
1f870 74 65 33 5f 66 72 65 65 28 7a 43 6d 64 29 3b 0a  te3_free(zCmd);.
1f880 20 20 20 20 20 20 6f 75 74 70 75 74 4d 6f 64 65        outputMode
1f890 50 6f 70 28 70 29 3b 0a 20 20 20 20 20 20 70 2d  Pop(p);.      p-
1f8a0 3e 64 6f 58 64 67 4f 70 65 6e 20 3d 20 30 3b 0a  >doXdgOpen = 0;.
1f8b0 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
1f8c0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1f8d0 4e 4f 48 41 56 45 5f 53 59 53 54 45 4d 29 20 2a  NOHAVE_SYSTEM) *
1f8e0 2f 0a 20 20 7d 0a 20 20 70 2d 3e 6f 75 74 66 69  /.  }.  p->outfi
1f8f0 6c 65 5b 30 5d 20 3d 20 30 3b 0a 20 20 70 2d 3e  le[0] = 0;.  p->
1f900 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 7d 0a  out = stdout;.}.
1f910 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 61 6e 20 53 51  ./*.** Run an SQ
1f920 4c 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65  L command and re
1f930 74 75 72 6e 20 74 68 65 20 73 69 6e 67 6c 65 20  turn the single 
1f940 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74 2e 0a  integer result..
1f950 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64 62  */.static int db
1f960 5f 69 6e 74 28 53 68 65 6c 6c 53 74 61 74 65 20  _int(ShellState 
1f970 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  *p, const char *
1f980 7a 53 71 6c 29 7b 0a 20 20 73 71 6c 69 74 65 33  zSql){.  sqlite3
1f990 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
1f9a0 69 6e 74 20 72 65 73 20 3d 20 30 3b 0a 20 20 73  int res = 0;.  s
1f9b0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
1f9c0 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d  2(p->db, zSql, -
1f9d0 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
1f9e0 20 69 66 28 20 70 53 74 6d 74 20 26 26 20 73 71   if( pStmt && sq
1f9f0 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
1fa00 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
1fa10 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74  .    res = sqlit
1fa20 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53  e3_column_int(pS
1fa30 74 6d 74 2c 30 29 3b 0a 20 20 7d 0a 20 20 73 71  tmt,0);.  }.  sq
1fa40 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
1fa50 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  Stmt);.  return 
1fa60 72 65 73 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f  res;.}../*.** Co
1fa70 6e 76 65 72 74 20 61 20 32 2d 62 79 74 65 20 6f  nvert a 2-byte o
1fa80 72 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  r 4-byte big-end
1fa90 69 61 6e 20 69 6e 74 65 67 65 72 20 69 6e 74 6f  ian integer into
1faa0 20 61 20 6e 61 74 69 76 65 20 69 6e 74 65 67 65   a native intege
1fab0 72 0a 2a 2f 0a 73 74 61 74 69 63 20 75 6e 73 69  r.*/.static unsi
1fac0 67 6e 65 64 20 69 6e 74 20 67 65 74 32 62 79 74  gned int get2byt
1fad0 65 49 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  eInt(unsigned ch
1fae0 61 72 20 2a 61 29 7b 0a 20 20 72 65 74 75 72 6e  ar *a){.  return
1faf0 20 28 61 5b 30 5d 3c 3c 38 29 20 2b 20 61 5b 31   (a[0]<<8) + a[1
1fb00 5d 3b 0a 7d 0a 73 74 61 74 69 63 20 75 6e 73 69  ];.}.static unsi
1fb10 67 6e 65 64 20 69 6e 74 20 67 65 74 34 62 79 74  gned int get4byt
1fb20 65 49 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  eInt(unsigned ch
1fb30 61 72 20 2a 61 29 7b 0a 20 20 72 65 74 75 72 6e  ar *a){.  return
1fb40 20 28 61 5b 30 5d 3c 3c 32 34 29 20 2b 20 28 61   (a[0]<<24) + (a
1fb50 5b 31 5d 3c 3c 31 36 29 20 2b 20 28 61 5b 32 5d  [1]<<16) + (a[2]
1fb60 3c 3c 38 29 20 2b 20 61 5b 33 5d 3b 0a 7d 0a 0a  <<8) + a[3];.}..
1fb70 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61  /*.** Implementa
1fb80 74 69 6f 6e 20 6f 66 20 74 68 65 20 22 2e 69 6e  tion of the ".in
1fb90 66 6f 22 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2a 0a  fo" command..**.
1fba0 2a 2a 20 52 65 74 75 72 6e 20 31 20 6f 6e 20 65  ** Return 1 on e
1fbb0 72 72 6f 72 2c 20 32 20 74 6f 20 65 78 69 74 2c  rror, 2 to exit,
1fbc0 20 61 6e 64 20 30 20 6f 74 68 65 72 77 69 73 65   and 0 otherwise
1fbd0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1fbe0 73 68 65 6c 6c 5f 64 62 69 6e 66 6f 5f 63 6f 6d  shell_dbinfo_com
1fbf0 6d 61 6e 64 28 53 68 65 6c 6c 53 74 61 74 65 20  mand(ShellState 
1fc00 2a 70 2c 20 69 6e 74 20 6e 41 72 67 2c 20 63 68  *p, int nArg, ch
1fc10 61 72 20 2a 2a 61 7a 41 72 67 29 7b 0a 20 20 73  ar **azArg){.  s
1fc20 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75  tatic const stru
1fc30 63 74 20 7b 20 63 6f 6e 73 74 20 63 68 61 72 20  ct { const char 
1fc40 2a 7a 4e 61 6d 65 3b 20 69 6e 74 20 6f 66 73 74  *zName; int ofst
1fc50 3b 20 7d 20 61 46 69 65 6c 64 5b 5d 20 3d 20 7b  ; } aField[] = {
1fc60 0a 20 20 20 20 20 7b 20 22 66 69 6c 65 20 63 68  .     { "file ch
1fc70 61 6e 67 65 20 63 6f 75 6e 74 65 72 3a 22 2c 20  ange counter:", 
1fc80 20 32 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   24  },.     { "
1fc90 64 61 74 61 62 61 73 65 20 70 61 67 65 20 63 6f  database page co
1fca0 75 6e 74 3a 22 2c 20 20 32 38 20 20 7d 2c 0a 20  unt:",  28  },. 
1fcb0 20 20 20 20 7b 20 22 66 72 65 65 6c 69 73 74 20      { "freelist 
1fcc0 70 61 67 65 20 63 6f 75 6e 74 3a 22 2c 20 20 33  page count:",  3
1fcd0 36 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 63  6  },.     { "sc
1fce0 68 65 6d 61 20 63 6f 6f 6b 69 65 3a 22 2c 20 20  hema cookie:",  
1fcf0 20 20 20 20 20 20 34 30 20 20 7d 2c 0a 20 20 20        40  },.   
1fd00 20 20 7b 20 22 73 63 68 65 6d 61 20 66 6f 72 6d    { "schema form
1fd10 61 74 3a 22 2c 20 20 20 20 20 20 20 20 34 34 20  at:",        44 
1fd20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 64 65 66 61   },.     { "defa
1fd30 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65 3a 22  ult cache size:"
1fd40 2c 20 20 20 34 38 20 20 7d 2c 0a 20 20 20 20 20  ,   48  },.     
1fd50 7b 20 22 61 75 74 6f 76 61 63 75 75 6d 20 74 6f  { "autovacuum to
1fd60 70 20 72 6f 6f 74 3a 22 2c 20 20 35 32 20 20 7d  p root:",  52  }
1fd70 2c 0a 20 20 20 20 20 7b 20 22 69 6e 63 72 65 6d  ,.     { "increm
1fd80 65 6e 74 61 6c 20 76 61 63 75 75 6d 3a 22 2c 20  ental vacuum:", 
1fd90 20 20 36 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20    64  },.     { 
1fda0 22 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 3a 22  "text encoding:"
1fdb0 2c 20 20 20 20 20 20 20 20 35 36 20 20 7d 2c 0a  ,        56  },.
1fdc0 20 20 20 20 20 7b 20 22 75 73 65 72 20 76 65 72       { "user ver
1fdd0 73 69 6f 6e 3a 22 2c 20 20 20 20 20 20 20 20 20  sion:",         
1fde0 36 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61  60  },.     { "a
1fdf0 70 70 6c 69 63 61 74 69 6f 6e 20 69 64 3a 22 2c  pplication id:",
1fe00 20 20 20 20 20 20 20 36 38 20 20 7d 2c 0a 20 20         68  },.  
1fe10 20 20 20 7b 20 22 73 6f 66 74 77 61 72 65 20 76     { "software v
1fe20 65 72 73 69 6f 6e 3a 22 2c 20 20 20 20 20 39 36  ersion:",     96
1fe30 20 20 7d 2c 0a 20 20 7d 3b 0a 20 20 73 74 61 74    },.  };.  stat
1fe40 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
1fe50 7b 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  { const char *zN
1fe60 61 6d 65 3b 20 63 6f 6e 73 74 20 63 68 61 72 20  ame; const char 
1fe70 2a 7a 53 71 6c 3b 20 7d 20 61 51 75 65 72 79 5b  *zSql; } aQuery[
1fe80 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22 6e 75  ] = {.     { "nu
1fe90 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 3a 22  mber of tables:"
1fea0 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
1feb0 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25   count(*) FROM %
1fec0 73 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61  s WHERE type='ta
1fed0 62 6c 65 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20  ble'" },.     { 
1fee0 22 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 65 78  "number of index
1fef0 65 73 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45  es:",.       "SE
1ff00 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
1ff10 4f 4d 20 25 73 20 57 48 45 52 45 20 74 79 70 65  OM %s WHERE type
1ff20 3d 27 69 6e 64 65 78 27 22 20 7d 2c 0a 20 20 20  ='index'" },.   
1ff30 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66 20 74    { "number of t
1ff40 72 69 67 67 65 72 73 3a 22 2c 0a 20 20 20 20 20  riggers:",.     
1ff50 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28    "SELECT count(
1ff60 2a 29 20 46 52 4f 4d 20 25 73 20 57 48 45 52 45  *) FROM %s WHERE
1ff70 20 74 79 70 65 3d 27 74 72 69 67 67 65 72 27 22   type='trigger'"
1ff80 20 7d 2c 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62   },.     { "numb
1ff90 65 72 20 6f 66 20 76 69 65 77 73 3a 22 2c 0a 20  er of views:",. 
1ffa0 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f        "SELECT co
1ffb0 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73 20 57  unt(*) FROM %s W
1ffc0 48 45 52 45 20 74 79 70 65 3d 27 76 69 65 77 27  HERE type='view'
1ffd0 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 63 68  " },.     { "sch
1ffe0 65 6d 61 20 73 69 7a 65 3a 22 2c 0a 20 20 20 20  ema size:",.    
1fff0 20 20 20 22 53 45 4c 45 43 54 20 74 6f 74 61 6c     "SELECT total
20000 28 6c 65 6e 67 74 68 28 73 71 6c 29 29 20 46 52  (length(sql)) FR
20010 4f 4d 20 25 73 22 20 7d 2c 0a 20 20 7d 3b 0a 20  OM %s" },.  };. 
20020 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 2a   int i;.  char *
20030 7a 53 63 68 65 6d 61 54 61 62 3b 0a 20 20 63 68  zSchemaTab;.  ch
20040 61 72 20 2a 7a 44 62 20 3d 20 6e 41 72 67 3e 3d  ar *zDb = nArg>=
20050 32 20 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22  2 ? azArg[1] : "
20060 6d 61 69 6e 22 3b 0a 20 20 73 71 6c 69 74 65 33  main";.  sqlite3
20070 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30  _stmt *pStmt = 0
20080 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ;.  unsigned cha
20090 72 20 61 48 64 72 5b 31 30 30 5d 3b 0a 20 20 6f  r aHdr[100];.  o
200a0 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20  pen_db(p, 0);.  
200b0 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 20 72  if( p->db==0 ) r
200c0 65 74 75 72 6e 20 31 3b 0a 20 20 73 71 6c 69 74  eturn 1;.  sqlit
200d0 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
200e0 3e 64 62 2c 22 53 45 4c 45 43 54 20 64 61 74 61  >db,"SELECT data
200f0 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 64 62 70   FROM sqlite_dbp
20100 61 67 65 28 3f 31 29 20 57 48 45 52 45 20 70 67  age(?1) WHERE pg
20110 6e 6f 3d 31 22 2c 0a 20 20 20 20 20 20 20 20 20  no=1",.         
20120 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20              -1, 
20130 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 73 71  &pStmt, 0);.  sq
20140 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
20150 70 53 74 6d 74 2c 20 31 2c 20 7a 44 62 2c 20 2d  pStmt, 1, zDb, -
20160 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  1, SQLITE_STATIC
20170 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
20180 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51  _step(pStmt)==SQ
20190 4c 49 54 45 5f 52 4f 57 0a 20 20 20 26 26 20 73  LITE_ROW.   && s
201a0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
201b0 74 65 73 28 70 53 74 6d 74 2c 30 29 3e 31 30 30  tes(pStmt,0)>100
201c0 0a 20 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  .  ){.    memcpy
201d0 28 61 48 64 72 2c 20 73 71 6c 69 74 65 33 5f 63  (aHdr, sqlite3_c
201e0 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d 74  olumn_blob(pStmt
201f0 2c 30 29 2c 20 31 30 30 29 3b 0a 20 20 20 20 73  ,0), 100);.    s
20200 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
20210 70 53 74 6d 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  pStmt);.  }else{
20220 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
20230 73 74 64 65 72 72 2c 20 22 75 6e 61 62 6c 65 20  stderr, "unable 
20240 74 6f 20 72 65 61 64 20 64 61 74 61 62 61 73 65  to read database
20250 20 68 65 61 64 65 72 5c 6e 22 29 3b 0a 20 20 20   header\n");.   
20260 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
20270 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 72 65  e(pStmt);.    re
20280 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 20  turn 1;.  }.  i 
20290 3d 20 67 65 74 32 62 79 74 65 49 6e 74 28 61 48  = get2byteInt(aH
202a0 64 72 2b 31 36 29 3b 0a 20 20 69 66 28 20 69 3d  dr+16);.  if( i=
202b0 3d 31 20 29 20 69 20 3d 20 36 35 35 33 36 3b 0a  =1 ) i = 65536;.
202c0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
202d0 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20 25 64 5c  >out, "%-20s %d\
202e0 6e 22 2c 20 22 64 61 74 61 62 61 73 65 20 70 61  n", "database pa
202f0 67 65 20 73 69 7a 65 3a 22 2c 20 69 29 3b 0a 20  ge size:", i);. 
20300 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
20310 6f 75 74 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e  out, "%-20s %d\n
20320 22 2c 20 22 77 72 69 74 65 20 66 6f 72 6d 61 74  ", "write format
20330 3a 22 2c 20 61 48 64 72 5b 31 38 5d 29 3b 0a 20  :", aHdr[18]);. 
20340 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
20350 6f 75 74 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e  out, "%-20s %d\n
20360 22 2c 20 22 72 65 61 64 20 66 6f 72 6d 61 74 3a  ", "read format:
20370 22 2c 20 61 48 64 72 5b 31 39 5d 29 3b 0a 20 20  ", aHdr[19]);.  
20380 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
20390 75 74 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e 22  ut, "%-20s %d\n"
203a0 2c 20 22 72 65 73 65 72 76 65 64 20 62 79 74 65  , "reserved byte
203b0 73 3a 22 2c 20 61 48 64 72 5b 32 30 5d 29 3b 0a  s:", aHdr[20]);.
203c0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72    for(i=0; i<Arr
203d0 61 79 53 69 7a 65 28 61 46 69 65 6c 64 29 3b 20  aySize(aField); 
203e0 69 2b 2b 29 7b 0a 20 20 20 20 69 6e 74 20 6f 66  i++){.    int of
203f0 73 74 20 3d 20 61 46 69 65 6c 64 5b 69 5d 2e 6f  st = aField[i].o
20400 66 73 74 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65  fst;.    unsigne
20410 64 20 69 6e 74 20 76 61 6c 20 3d 20 67 65 74 34  d int val = get4
20420 62 79 74 65 49 6e 74 28 61 48 64 72 20 2b 20 6f  byteInt(aHdr + o
20430 66 73 74 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  fst);.    utf8_p
20440 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
20450 2d 32 30 73 20 25 75 22 2c 20 61 46 69 65 6c 64  -20s %u", aField
20460 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 76 61 6c 29 3b  [i].zName, val);
20470 0a 20 20 20 20 73 77 69 74 63 68 28 20 6f 66 73  .    switch( ofs
20480 74 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  t ){.      case 
20490 35 36 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  56: {.        if
204a0 28 20 76 61 6c 3d 3d 31 20 29 20 72 61 77 5f 70  ( val==1 ) raw_p
204b0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20  rintf(p->out, " 
204c0 28 75 74 66 38 29 22 29 3b 0a 20 20 20 20 20 20  (utf8)");.      
204d0 20 20 69 66 28 20 76 61 6c 3d 3d 32 20 29 20 72    if( val==2 ) r
204e0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
204f0 2c 20 22 20 28 75 74 66 31 36 6c 65 29 22 29 3b  , " (utf16le)");
20500 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 61 6c  .        if( val
20510 3d 3d 33 20 29 20 72 61 77 5f 70 72 69 6e 74 66  ==3 ) raw_printf
20520 28 70 2d 3e 6f 75 74 2c 20 22 20 28 75 74 66 31  (p->out, " (utf1
20530 36 62 65 29 22 29 3b 0a 20 20 20 20 20 20 7d 0a  6be)");.      }.
20540 20 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72      }.    raw_pr
20550 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
20560 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 44  ");.  }.  if( zD
20570 62 3d 3d 30 20 29 7b 0a 20 20 20 20 7a 53 63 68  b==0 ){.    zSch
20580 65 6d 61 54 61 62 20 3d 20 73 71 6c 69 74 65 33  emaTab = sqlite3
20590 5f 6d 70 72 69 6e 74 66 28 22 6d 61 69 6e 2e 73  _mprintf("main.s
205a0 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 29 3b 0a  qlite_master");.
205b0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
205c0 6d 70 28 7a 44 62 2c 22 74 65 6d 70 22 29 3d 3d  mp(zDb,"temp")==
205d0 30 20 29 7b 0a 20 20 20 20 7a 53 63 68 65 6d 61  0 ){.    zSchema
205e0 54 61 62 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Tab = sqlite3_mp
205f0 72 69 6e 74 66 28 22 25 73 22 2c 20 22 73 71 6c  rintf("%s", "sql
20600 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
20610 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
20620 7a 53 63 68 65 6d 61 54 61 62 20 3d 20 73 71 6c  zSchemaTab = sql
20630 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22  ite3_mprintf("\"
20640 25 77 5c 22 2e 73 71 6c 69 74 65 5f 6d 61 73 74  %w\".sqlite_mast
20650 65 72 22 2c 20 7a 44 62 29 3b 0a 20 20 7d 0a 20  er", zDb);.  }. 
20660 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
20670 79 53 69 7a 65 28 61 51 75 65 72 79 29 3b 20 69  ySize(aQuery); i
20680 2b 2b 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  ++){.    char *z
20690 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Sql = sqlite3_mp
206a0 72 69 6e 74 66 28 61 51 75 65 72 79 5b 69 5d 2e  rintf(aQuery[i].
206b0 7a 53 71 6c 2c 20 7a 53 63 68 65 6d 61 54 61 62  zSql, zSchemaTab
206c0 29 3b 0a 20 20 20 20 69 6e 74 20 76 61 6c 20 3d  );.    int val =
206d0 20 64 62 5f 69 6e 74 28 70 2c 20 7a 53 71 6c 29   db_int(p, zSql)
206e0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
206f0 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 75 74  ee(zSql);.    ut
20700 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
20710 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20  , "%-20s %d\n", 
20720 61 51 75 65 72 79 5b 69 5d 2e 7a 4e 61 6d 65 2c  aQuery[i].zName,
20730 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 73 71 6c   val);.  }.  sql
20740 69 74 65 33 5f 66 72 65 65 28 7a 53 63 68 65 6d  ite3_free(zSchem
20750 61 54 61 62 29 3b 0a 20 20 72 65 74 75 72 6e 20  aTab);.  return 
20760 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e  0;.}../*.** Prin
20770 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 71  t the current sq
20780 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 76  lite3_errmsg() v
20790 61 6c 75 65 20 74 6f 20 73 74 64 65 72 72 20 61  alue to stderr a
207a0 6e 64 20 72 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a  nd return 1..*/.
207b0 73 74 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c  static int shell
207c0 44 61 74 61 62 61 73 65 45 72 72 6f 72 28 73 71  DatabaseError(sq
207d0 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 63 6f  lite3 *db){.  co
207e0 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72 20 3d  nst char *zErr =
207f0 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
20800 64 62 29 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e  db);.  utf8_prin
20810 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
20820 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 29 3b  r: %s\n", zErr);
20830 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a  .  return 1;.}..
20840 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 61 6e 20 6f  /*.** Print an o
20850 75 74 2d 6f 66 2d 6d 65 6d 6f 72 79 20 6d 65 73  ut-of-memory mes
20860 73 61 67 65 20 74 6f 20 73 74 64 65 72 72 20 61  sage to stderr a
20870 6e 64 20 72 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a  nd return 1..*/.
20880 73 74 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c  static int shell
20890 4e 6f 6d 65 6d 45 72 72 6f 72 28 76 6f 69 64 29  NomemError(void)
208a0 7b 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73  {.  raw_printf(s
208b0 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f  tderr, "Error: o
208c0 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut of memory\n")
208d0 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
208e0 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  ./*.** Compare t
208f0 68 65 20 70 61 74 74 65 72 6e 20 69 6e 20 7a 47  he pattern in zG
20900 6c 6f 62 5b 5d 20 61 67 61 69 6e 73 74 20 74 68  lob[] against th
20910 65 20 74 65 78 74 20 69 6e 20 7a 5b 5d 2e 20 20  e text in z[].  
20920 52 65 74 75 72 6e 20 54 52 55 45 0a 2a 2a 20 69  Return TRUE.** i
20930 66 20 74 68 65 79 20 6d 61 74 63 68 20 61 6e 64  f they match and
20940 20 46 41 4c 53 45 20 28 30 29 20 69 66 20 74 68   FALSE (0) if th
20950 65 79 20 64 6f 20 6e 6f 74 20 6d 61 74 63 68 2e  ey do not match.
20960 0a 2a 2a 0a 2a 2a 20 47 6c 6f 62 62 69 6e 67 20  .**.** Globbing 
20970 72 75 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rules:.**.**    
20980 20 20 27 2a 27 20 20 20 20 20 20 20 4d 61 74 63    '*'       Matc
20990 68 65 73 20 61 6e 79 20 73 65 71 75 65 6e 63 65  hes any sequence
209a0 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   of zero or more
209b0 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2a 0a   characters..**.
209c0 2a 2a 20 20 20 20 20 20 27 3f 27 20 20 20 20 20  **      '?'     
209d0 20 20 4d 61 74 63 68 65 73 20 65 78 61 63 74 6c    Matches exactl
209e0 79 20 6f 6e 65 20 63 68 61 72 61 63 74 65 72 2e  y one character.
209f0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 5b 2e 2e 2e 5d  .**.**     [...]
20a00 20 20 20 20 20 20 4d 61 74 63 68 65 73 20 6f 6e        Matches on
20a10 65 20 63 68 61 72 61 63 74 65 72 20 66 72 6f 6d  e character from
20a20 20 74 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69   the enclosed li
20a30 73 74 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20  st of.**        
20a40 20 20 20 20 20 20 20 20 63 68 61 72 61 63 74 65          characte
20a50 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 5b 5e  rs..**.**     [^
20a60 2e 2e 2e 5d 20 20 20 20 20 4d 61 74 63 68 65 73  ...]     Matches
20a70 20 6f 6e 65 20 63 68 61 72 61 63 74 65 72 20 6e   one character n
20a80 6f 74 20 69 6e 20 74 68 65 20 65 6e 63 6c 6f 73  ot in the enclos
20a90 65 64 20 6c 69 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  ed list..**.**  
20aa0 20 20 20 20 27 23 27 20 20 20 20 20 20 20 4d 61      '#'       Ma
20ab0 74 63 68 65 73 20 61 6e 79 20 73 65 71 75 65 6e  tches any sequen
20ac0 63 65 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  ce of one or mor
20ad0 65 20 64 69 67 69 74 73 20 77 69 74 68 20 61 6e  e digits with an
20ae0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
20af0 20 20 20 6f 70 74 69 6f 6e 61 6c 20 2b 20 6f 72     optional + or
20b00 20 2d 20 73 69 67 6e 20 69 6e 20 66 72 6f 6e 74   - sign in front
20b10 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 20 27 20  .**.**      ' ' 
20b20 20 20 20 20 20 20 41 6e 79 20 73 70 61 6e 20 6f        Any span o
20b30 66 20 77 68 69 74 65 73 70 61 63 65 20 6d 61 74  f whitespace mat
20b40 63 68 65 73 20 61 6e 79 20 6f 74 68 65 72 20 73  ches any other s
20b50 70 61 6e 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  pan of.**       
20b60 20 20 20 20 20 20 20 20 20 77 68 69 74 65 73 70           whitesp
20b70 61 63 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61  ace..**.** Extra
20b80 20 77 68 69 74 65 73 70 61 63 65 20 61 74 20 74   whitespace at t
20b90 68 65 20 65 6e 64 20 6f 66 20 7a 5b 5d 20 69 73  he end of z[] is
20ba0 20 69 67 6e 6f 72 65 64 2e 0a 2a 2f 0a 73 74 61   ignored..*/.sta
20bb0 74 69 63 20 69 6e 74 20 74 65 73 74 63 61 73 65  tic int testcase
20bc0 5f 67 6c 6f 62 28 63 6f 6e 73 74 20 63 68 61 72  _glob(const char
20bd0 20 2a 7a 47 6c 6f 62 2c 20 63 6f 6e 73 74 20 63   *zGlob, const c
20be0 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 63  har *z){.  int c
20bf0 2c 20 63 32 3b 0a 20 20 69 6e 74 20 69 6e 76 65  , c2;.  int inve
20c00 72 74 3b 0a 20 20 69 6e 74 20 73 65 65 6e 3b 0a  rt;.  int seen;.
20c10 0a 20 20 77 68 69 6c 65 28 20 28 63 20 3d 20 28  .  while( (c = (
20c20 2a 28 7a 47 6c 6f 62 2b 2b 29 29 29 21 3d 30 20  *(zGlob++)))!=0 
20c30 29 7b 0a 20 20 20 20 69 66 28 20 49 73 53 70 61  ){.    if( IsSpa
20c40 63 65 28 63 29 20 29 7b 0a 20 20 20 20 20 20 69  ce(c) ){.      i
20c50 66 28 20 21 49 73 53 70 61 63 65 28 2a 7a 29 20  f( !IsSpace(*z) 
20c60 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
20c70 20 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65    while( IsSpace
20c80 28 2a 7a 47 6c 6f 62 29 20 29 20 7a 47 6c 6f 62  (*zGlob) ) zGlob
20c90 2b 2b 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28  ++;.      while(
20ca0 20 49 73 53 70 61 63 65 28 2a 7a 29 20 29 20 7a   IsSpace(*z) ) z
20cb0 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ++;.    }else if
20cc0 28 20 63 3d 3d 27 2a 27 20 29 7b 0a 20 20 20 20  ( c=='*' ){.    
20cd0 20 20 77 68 69 6c 65 28 20 28 63 3d 28 2a 28 7a    while( (c=(*(z
20ce0 47 6c 6f 62 2b 2b 29 29 29 20 3d 3d 20 27 2a 27  Glob++))) == '*'
20cf0 20 7c 7c 20 63 3d 3d 27 3f 27 20 29 7b 0a 20 20   || c=='?' ){.  
20d00 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 3f 27        if( c=='?'
20d10 20 26 26 20 28 2a 28 7a 2b 2b 29 29 3d 3d 30 20   && (*(z++))==0 
20d20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
20d30 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d    }.      if( c=
20d40 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  =0 ){.        re
20d50 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 65  turn 1;.      }e
20d60 6c 73 65 20 69 66 28 20 63 3d 3d 27 5b 27 20 29  lse if( c=='[' )
20d70 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  {.        while(
20d80 20 2a 7a 20 26 26 20 74 65 73 74 63 61 73 65 5f   *z && testcase_
20d90 67 6c 6f 62 28 7a 47 6c 6f 62 2d 31 2c 7a 29 3d  glob(zGlob-1,z)=
20da0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
20db0 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  z++;.        }. 
20dc0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 2a         return (*
20dd0 7a 29 21 3d 30 3b 0a 20 20 20 20 20 20 7d 0a 20  z)!=0;.      }. 
20de0 20 20 20 20 20 77 68 69 6c 65 28 20 28 63 32 20       while( (c2 
20df0 3d 20 28 2a 28 7a 2b 2b 29 29 29 21 3d 30 20 29  = (*(z++)))!=0 )
20e00 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  {.        while(
20e10 20 63 32 21 3d 63 20 29 7b 0a 20 20 20 20 20 20   c2!=c ){.      
20e20 20 20 20 20 63 32 20 3d 20 2a 28 7a 2b 2b 29 3b      c2 = *(z++);
20e30 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63  .          if( c
20e40 32 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  2==0 ) return 0;
20e50 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
20e60 20 20 20 69 66 28 20 74 65 73 74 63 61 73 65 5f     if( testcase_
20e70 67 6c 6f 62 28 7a 47 6c 6f 62 2c 7a 29 20 29 20  glob(zGlob,z) ) 
20e80 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20  return 1;.      
20e90 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  }.      return 0
20ea0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
20eb0 63 3d 3d 27 3f 27 20 29 7b 0a 20 20 20 20 20 20  c=='?' ){.      
20ec0 69 66 28 20 28 2a 28 7a 2b 2b 29 29 3d 3d 30 20  if( (*(z++))==0 
20ed0 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
20ee0 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 5b 27  }else if( c=='['
20ef0 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 72   ){.      int pr
20f00 69 6f 72 5f 63 20 3d 20 30 3b 0a 20 20 20 20 20  ior_c = 0;.     
20f10 20 73 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20   seen = 0;.     
20f20 20 69 6e 76 65 72 74 20 3d 20 30 3b 0a 20 20 20   invert = 0;.   
20f30 20 20 20 63 20 3d 20 2a 28 7a 2b 2b 29 3b 0a 20     c = *(z++);. 
20f40 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29 20       if( c==0 ) 
20f50 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
20f60 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b  c2 = *(zGlob++);
20f70 0a 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d 27  .      if( c2=='
20f80 5e 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  ^' ){.        in
20f90 76 65 72 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  vert = 1;.      
20fa0 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b    c2 = *(zGlob++
20fb0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
20fc0 20 69 66 28 20 63 32 3d 3d 27 5d 27 20 29 7b 0a   if( c2==']' ){.
20fd0 20 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27          if( c=='
20fe0 5d 27 20 29 20 73 65 65 6e 20 3d 20 31 3b 0a 20  ]' ) seen = 1;. 
20ff0 20 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a 47         c2 = *(zG
21000 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20 7d 0a  lob++);.      }.
21010 20 20 20 20 20 20 77 68 69 6c 65 28 20 63 32 20        while( c2 
21020 26 26 20 63 32 21 3d 27 5d 27 20 29 7b 0a 20 20  && c2!=']' ){.  
21030 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d 27 2d        if( c2=='-
21040 27 20 26 26 20 7a 47 6c 6f 62 5b 30 5d 21 3d 27  ' && zGlob[0]!='
21050 5d 27 20 26 26 20 7a 47 6c 6f 62 5b 30 5d 21 3d  ]' && zGlob[0]!=
21060 30 20 26 26 20 70 72 69 6f 72 5f 63 3e 30 20 29  0 && prior_c>0 )
21070 7b 0a 20 20 20 20 20 20 20 20 20 20 63 32 20 3d  {.          c2 =
21080 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20   *(zGlob++);.   
21090 20 20 20 20 20 20 20 69 66 28 20 63 3e 3d 70 72         if( c>=pr
210a0 69 6f 72 5f 63 20 26 26 20 63 3c 3d 63 32 20 29  ior_c && c<=c2 )
210b0 20 73 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20   seen = 1;.     
210c0 20 20 20 20 20 70 72 69 6f 72 5f 63 20 3d 20 30       prior_c = 0
210d0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
210e0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63  .          if( c
210f0 3d 3d 63 32 20 29 7b 0a 20 20 20 20 20 20 20 20  ==c2 ){.        
21100 20 20 20 20 73 65 65 6e 20 3d 20 31 3b 0a 20 20      seen = 1;.  
21110 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
21120 20 20 20 20 70 72 69 6f 72 5f 63 20 3d 20 63 32      prior_c = c2
21130 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
21140 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62      c2 = *(zGlob
21150 2b 2b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ++);.      }.   
21160 20 20 20 69 66 28 20 63 32 3d 3d 30 20 7c 7c 20     if( c2==0 || 
21170 28 73 65 65 6e 20 5e 20 69 6e 76 65 72 74 29 3d  (seen ^ invert)=
21180 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
21190 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
211a0 27 23 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28  '#' ){.      if(
211b0 20 28 7a 5b 30 5d 3d 3d 27 2d 27 20 7c 7c 20 7a   (z[0]=='-' || z
211c0 5b 30 5d 3d 3d 27 2b 27 29 20 26 26 20 49 73 44  [0]=='+') && IsD
211d0 69 67 69 74 28 7a 5b 31 5d 29 20 29 20 7a 2b 2b  igit(z[1]) ) z++
211e0 3b 0a 20 20 20 20 20 20 69 66 28 20 21 49 73 44  ;.      if( !IsD
211f0 69 67 69 74 28 7a 5b 30 5d 29 20 29 20 72 65 74  igit(z[0]) ) ret
21200 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 7a 2b 2b  urn 0;.      z++
21210 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 49  ;.      while( I
21220 73 44 69 67 69 74 28 7a 5b 30 5d 29 20 29 7b 20  sDigit(z[0]) ){ 
21230 7a 2b 2b 3b 20 7d 0a 20 20 20 20 7d 65 6c 73 65  z++; }.    }else
21240 7b 0a 20 20 20 20 20 20 69 66 28 20 63 21 3d 28  {.      if( c!=(
21250 2a 28 7a 2b 2b 29 29 20 29 20 72 65 74 75 72 6e  *(z++)) ) return
21260 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
21270 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 2a  while( IsSpace(*
21280 7a 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 72  z) ){ z++; }.  r
21290 65 74 75 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a  eturn *z==0;.}..
212a0 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  ./*.** Compare t
212b0 68 65 20 73 74 72 69 6e 67 20 61 73 20 61 20 63  he string as a c
212c0 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69  ommand-line opti
212d0 6f 6e 20 77 69 74 68 20 65 69 74 68 65 72 20 6f  on with either o
212e0 6e 65 20 6f 72 20 74 77 6f 0a 2a 2a 20 69 6e 69  ne or two.** ini
212f0 74 69 61 6c 20 22 2d 22 20 63 68 61 72 61 63 74  tial "-" charact
21300 65 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ers..*/.static i
21310 6e 74 20 6f 70 74 69 6f 6e 4d 61 74 63 68 28 63  nt optionMatch(c
21320 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 72 2c  onst char *zStr,
21330 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70   const char *zOp
21340 74 29 7b 0a 20 20 69 66 28 20 7a 53 74 72 5b 30  t){.  if( zStr[0
21350 5d 21 3d 27 2d 27 20 29 20 72 65 74 75 72 6e 20  ]!='-' ) return 
21360 30 3b 0a 20 20 7a 53 74 72 2b 2b 3b 0a 20 20 69  0;.  zStr++;.  i
21370 66 28 20 7a 53 74 72 5b 30 5d 3d 3d 27 2d 27 20  f( zStr[0]=='-' 
21380 29 20 7a 53 74 72 2b 2b 3b 0a 20 20 72 65 74 75  ) zStr++;.  retu
21390 72 6e 20 73 74 72 63 6d 70 28 7a 53 74 72 2c 20  rn strcmp(zStr, 
213a0 7a 4f 70 74 29 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a  zOpt)==0;.}../*.
213b0 2a 2a 20 44 65 6c 65 74 65 20 61 20 66 69 6c 65  ** Delete a file
213c0 2e 0a 2a 2f 0a 69 6e 74 20 73 68 65 6c 6c 44 65  ..*/.int shellDe
213d0 6c 65 74 65 46 69 6c 65 28 63 6f 6e 73 74 20 63  leteFile(const c
213e0 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 29 7b  har *zFilename){
213f0 0a 20 20 69 6e 74 20 72 63 3b 0a 23 69 66 64 65  .  int rc;.#ifde
21400 66 20 5f 57 49 4e 33 32 0a 20 20 77 63 68 61 72  f _WIN32.  wchar
21410 5f 74 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33 5f  _t *z = sqlite3_
21420 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 75 6e  win32_utf8_to_un
21430 69 63 6f 64 65 28 7a 46 69 6c 65 6e 61 6d 65 29  icode(zFilename)
21440 3b 0a 20 20 72 63 20 3d 20 5f 77 75 6e 6c 69 6e  ;.  rc = _wunlin
21450 6b 28 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  k(z);.  sqlite3_
21460 66 72 65 65 28 7a 29 3b 0a 23 65 6c 73 65 0a 20  free(z);.#else. 
21470 20 72 63 20 3d 20 75 6e 6c 69 6e 6b 28 7a 46 69   rc = unlink(zFi
21480 6c 65 6e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a  lename);.#endif.
21490 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
214a0 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 64 65 6c  /*.** Try to del
214b0 65 74 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72  ete the temporar
214c0 79 20 66 69 6c 65 20 28 69 66 20 74 68 65 72 65  y file (if there
214d0 20 69 73 20 6f 6e 65 29 20 61 6e 64 20 66 72 65   is one) and fre
214e0 65 20 74 68 65 0a 2a 2a 20 6d 65 6d 6f 72 79 20  e the.** memory 
214f0 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65  used to hold the
21500 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 65 6d   name of the tem
21510 70 20 66 69 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69  p file..*/.stati
21520 63 20 76 6f 69 64 20 63 6c 65 61 72 54 65 6d 70  c void clearTemp
21530 46 69 6c 65 28 53 68 65 6c 6c 53 74 61 74 65 20  File(ShellState 
21540 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 7a 54  *p){.  if( p->zT
21550 65 6d 70 46 69 6c 65 3d 3d 30 20 29 20 72 65 74  empFile==0 ) ret
21560 75 72 6e 3b 0a 20 20 69 66 28 20 70 2d 3e 64 6f  urn;.  if( p->do
21570 58 64 67 4f 70 65 6e 20 29 20 72 65 74 75 72 6e  XdgOpen ) return
21580 3b 0a 20 20 69 66 28 20 73 68 65 6c 6c 44 65 6c  ;.  if( shellDel
21590 65 74 65 46 69 6c 65 28 70 2d 3e 7a 54 65 6d 70  eteFile(p->zTemp
215a0 46 69 6c 65 29 20 29 20 72 65 74 75 72 6e 3b 0a  File) ) return;.
215b0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70    sqlite3_free(p
215c0 2d 3e 7a 54 65 6d 70 46 69 6c 65 29 3b 0a 20 20  ->zTempFile);.  
215d0 70 2d 3e 7a 54 65 6d 70 46 69 6c 65 20 3d 20 30  p->zTempFile = 0
215e0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74  ;.}../*.** Creat
215f0 65 20 61 20 6e 65 77 20 74 65 6d 70 20 66 69 6c  e a new temp fil
21600 65 20 6e 61 6d 65 20 77 69 74 68 20 74 68 65 20  e name with the 
21610 67 69 76 65 6e 20 73 75 66 66 69 78 2e 0a 2a 2f  given suffix..*/
21620 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6e 65 77  .static void new
21630 54 65 6d 70 46 69 6c 65 28 53 68 65 6c 6c 53 74  TempFile(ShellSt
21640 61 74 65 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68  ate *p, const ch
21650 61 72 20 2a 7a 53 75 66 66 69 78 29 7b 0a 20 20  ar *zSuffix){.  
21660 63 6c 65 61 72 54 65 6d 70 46 69 6c 65 28 70 29  clearTempFile(p)
21670 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
21680 28 70 2d 3e 7a 54 65 6d 70 46 69 6c 65 29 3b 0a  (p->zTempFile);.
21690 20 20 70 2d 3e 7a 54 65 6d 70 46 69 6c 65 20 3d    p->zTempFile =
216a0 20 30 3b 0a 20 20 69 66 28 20 70 2d 3e 64 62 20   0;.  if( p->db 
216b0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  ){.    sqlite3_f
216c0 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64  ile_control(p->d
216d0 62 2c 20 30 2c 20 53 51 4c 49 54 45 5f 46 43 4e  b, 0, SQLITE_FCN
216e0 54 4c 5f 54 45 4d 50 46 49 4c 45 4e 41 4d 45 2c  TL_TEMPFILENAME,
216f0 20 26 70 2d 3e 7a 54 65 6d 70 46 69 6c 65 29 3b   &p->zTempFile);
21700 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 7a 54  .  }.  if( p->zT
21710 65 6d 70 46 69 6c 65 3d 3d 30 20 29 7b 0a 20 20  empFile==0 ){.  
21720 20 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34    sqlite3_uint64
21730 20 72 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   r;.    sqlite3_
21740 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
21750 66 28 72 29 2c 20 26 72 29 3b 0a 20 20 20 20 70  f(r), &r);.    p
21760 2d 3e 7a 54 65 6d 70 46 69 6c 65 20 3d 20 73 71  ->zTempFile = sq
21770 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 74  lite3_mprintf("t
21780 65 6d 70 25 6c 6c 78 2e 25 73 22 2c 20 72 2c 20  emp%llx.%s", r, 
21790 7a 53 75 66 66 69 78 29 3b 0a 20 20 7d 65 6c 73  zSuffix);.  }els
217a0 65 7b 0a 20 20 20 20 70 2d 3e 7a 54 65 6d 70 46  e{.    p->zTempF
217b0 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ile = sqlite3_mp
217c0 72 69 6e 74 66 28 22 25 7a 2e 25 73 22 2c 20 70  rintf("%z.%s", p
217d0 2d 3e 7a 54 65 6d 70 46 69 6c 65 2c 20 7a 53 75  ->zTempFile, zSu
217e0 66 66 69 78 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ffix);.  }.  if(
217f0 20 70 2d 3e 7a 54 65 6d 70 46 69 6c 65 3d 3d 30   p->zTempFile==0
21800 20 29 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e   ){.    raw_prin
21810 74 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20  tf(stderr, "out 
21820 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20  of memory\n");. 
21830 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a     exit(1);.  }.
21840 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6d  }.../*.** The im
21850 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
21860 53 51 4c 20 73 63 61 6c 61 72 20 66 75 6e 63 74  SQL scalar funct
21870 69 6f 6e 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65  ion fkey_collate
21880 5f 63 6c 61 75 73 65 28 29 2c 20 75 73 65 64 0a  _clause(), used.
21890 2a 2a 20 62 79 20 74 68 65 20 22 2e 6c 69 6e 74  ** by the ".lint
218a0 20 66 6b 65 79 2d 69 6e 64 65 78 65 73 22 20 63   fkey-indexes" c
218b0 6f 6d 6d 61 6e 64 2e 20 54 68 69 73 20 73 63 61  ommand. This sca
218c0 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  lar function is 
218d0 61 6c 77 61 79 73 0a 2a 2a 20 63 61 6c 6c 65 64  always.** called
218e0 20 77 69 74 68 20 66 6f 75 72 20 61 72 67 75 6d   with four argum
218f0 65 6e 74 73 20 2d 20 74 68 65 20 70 61 72 65 6e  ents - the paren
21900 74 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 74 68  t table name, th
21910 65 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20  e parent column 
21920 6e 61 6d 65 2c 0a 2a 2a 20 74 68 65 20 63 68 69  name,.** the chi
21930 6c 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 61 6e  ld table name an
21940 64 20 74 68 65 20 63 68 69 6c 64 20 63 6f 6c 75  d the child colu
21950 6d 6e 20 6e 61 6d 65 2e 0a 2a 2a 0a 2a 2a 20 20  mn name..**.**  
21960 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c   fkey_collate_cl
21970 61 75 73 65 28 27 70 61 72 65 6e 74 2d 74 61 62  ause('parent-tab
21980 27 2c 20 27 70 61 72 65 6e 74 2d 63 6f 6c 27 2c  ', 'parent-col',
21990 20 27 63 68 69 6c 64 2d 74 61 62 27 2c 20 27 63   'child-tab', 'c
219a0 68 69 6c 64 2d 63 6f 6c 27 29 0a 2a 2a 0a 2a 2a  hild-col').**.**
219b0 20 49 66 20 65 69 74 68 65 72 20 6f 66 20 74 68   If either of th
219c0 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 73 20 6f  e named tables o
219d0 72 20 63 6f 6c 75 6d 6e 73 20 64 6f 20 6e 6f 74  r columns do not
219e0 20 65 78 69 73 74 2c 20 74 68 69 73 20 66 75 6e   exist, this fun
219f0 63 74 69 6f 6e 0a 2a 2a 20 72 65 74 75 72 6e 73  ction.** returns
21a00 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
21a10 2e 20 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  . An empty strin
21a20 67 20 69 73 20 61 6c 73 6f 20 72 65 74 75 72 6e  g is also return
21a30 65 64 20 69 66 20 62 6f 74 68 20 74 61 62 6c 65  ed if both table
21a40 73 0a 2a 2a 20 61 6e 64 20 63 6f 6c 75 6d 6e 73  s.** and columns
21a50 20 65 78 69 73 74 20 62 75 74 20 68 61 76 65 20   exist but have 
21a60 74 68 65 20 73 61 6d 65 20 64 65 66 61 75 6c 74  the same default
21a70 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
21a80 6e 63 65 2e 20 4f 72 2c 0a 2a 2a 20 69 66 20 62  nce. Or,.** if b
21a90 6f 74 68 20 65 78 69 73 74 20 62 75 74 20 74 68  oth exist but th
21aa0 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
21ab0 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 20 61 72  ion sequences ar
21ac0 65 20 64 69 66 66 65 72 65 6e 74 2c 20 74 68 69  e different, thi
21ad0 73 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 72 65  s.** function re
21ae0 74 75 72 6e 73 20 74 68 65 20 73 74 72 69 6e 67  turns the string
21af0 20 22 20 43 4f 4c 4c 41 54 45 20 3c 70 61 72 65   " COLLATE <pare
21b00 6e 74 2d 63 6f 6c 6c 61 74 69 6f 6e 3e 22 2c 20  nt-collation>", 
21b10 77 68 65 72 65 0a 2a 2a 20 3c 70 61 72 65 6e 74  where.** <parent
21b20 2d 63 6f 6c 6c 61 74 69 6f 6e 3e 20 69 73 20 74  -collation> is t
21b30 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
21b40 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 66  tion sequence of
21b50 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6c 75   the parent colu
21b60 6d 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  mn..*/.static vo
21b70 69 64 20 73 68 65 6c 6c 46 6b 65 79 43 6f 6c 6c  id shellFkeyColl
21b80 61 74 65 43 6c 61 75 73 65 28 0a 20 20 73 71 6c  ateClause(.  sql
21b90 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
21ba0 74 78 2c 0a 20 20 69 6e 74 20 6e 56 61 6c 2c 0a  tx,.  int nVal,.
21bb0 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
21bc0 2a 2a 61 70 56 61 6c 0a 29 7b 0a 20 20 73 71 6c  **apVal.){.  sql
21bd0 69 74 65 33 20 2a 64 62 20 3d 20 73 71 6c 69 74  ite3 *db = sqlit
21be0 65 33 5f 63 6f 6e 74 65 78 74 5f 64 62 5f 68 61  e3_context_db_ha
21bf0 6e 64 6c 65 28 70 43 74 78 29 3b 0a 20 20 63 6f  ndle(pCtx);.  co
21c00 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 72 65 6e  nst char *zParen
21c10 74 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  t;.  const char 
21c20 2a 7a 50 61 72 65 6e 74 43 6f 6c 3b 0a 20 20 63  *zParentCol;.  c
21c30 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 72 65  onst char *zPare
21c40 6e 74 53 65 71 3b 0a 20 20 63 6f 6e 73 74 20 63  ntSeq;.  const c
21c50 68 61 72 20 2a 7a 43 68 69 6c 64 3b 0a 20 20 63  har *zChild;.  c
21c60 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 68 69 6c  onst char *zChil
21c70 64 43 6f 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68  dCol;.  const ch
21c80 61 72 20 2a 7a 43 68 69 6c 64 53 65 71 20 3d 20  ar *zChildSeq = 
21c90 30 3b 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a  0;  /* Initializ
21ca0 65 20 74 6f 20 61 76 6f 69 64 20 66 61 6c 73 65  e to avoid false
21cb0 2d 70 6f 73 69 74 69 76 65 20 77 61 72 6e 69 6e  -positive warnin
21cc0 67 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  g */.  int rc;..
21cd0 20 20 61 73 73 65 72 74 28 20 6e 56 61 6c 3d 3d    assert( nVal==
21ce0 34 20 29 3b 0a 20 20 7a 50 61 72 65 6e 74 20 3d  4 );.  zParent =
21cf0 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
21d00 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
21d10 28 61 70 56 61 6c 5b 30 5d 29 3b 0a 20 20 7a 50  (apVal[0]);.  zP
21d20 61 72 65 6e 74 43 6f 6c 20 3d 20 28 63 6f 6e 73  arentCol = (cons
21d30 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
21d40 76 61 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c  value_text(apVal
21d50 5b 31 5d 29 3b 0a 20 20 7a 43 68 69 6c 64 20 3d  [1]);.  zChild =
21d60 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
21d70 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
21d80 28 61 70 56 61 6c 5b 32 5d 29 3b 0a 20 20 7a 43  (apVal[2]);.  zC
21d90 68 69 6c 64 43 6f 6c 20 3d 20 28 63 6f 6e 73 74  hildCol = (const
21da0 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76   char*)sqlite3_v
21db0 61 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b  alue_text(apVal[
21dc0 33 5d 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f  3]);..  sqlite3_
21dd0 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78  result_text(pCtx
21de0 2c 20 22 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45  , "", -1, SQLITE
21df0 5f 53 54 41 54 49 43 29 3b 0a 20 20 72 63 20 3d  _STATIC);.  rc =
21e00 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63   sqlite3_table_c
21e10 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a  olumn_metadata(.
21e20 20 20 20 20 20 20 64 62 2c 20 22 6d 61 69 6e 22        db, "main"
21e30 2c 20 7a 50 61 72 65 6e 74 2c 20 7a 50 61 72 65  , zParent, zPare
21e40 6e 74 43 6f 6c 2c 20 30 2c 20 26 7a 50 61 72 65  ntCol, 0, &zPare
21e50 6e 74 53 65 71 2c 20 30 2c 20 30 2c 20 30 0a 20  ntSeq, 0, 0, 0. 
21e60 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
21e70 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
21e80 63 20 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c  c = sqlite3_tabl
21e90 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
21ea0 61 28 0a 20 20 20 20 20 20 20 20 64 62 2c 20 22  a(.        db, "
21eb0 6d 61 69 6e 22 2c 20 7a 43 68 69 6c 64 2c 20 7a  main", zChild, z
21ec0 43 68 69 6c 64 43 6f 6c 2c 20 30 2c 20 26 7a 43  ChildCol, 0, &zC
21ed0 68 69 6c 64 53 65 71 2c 20 30 2c 20 30 2c 20 30  hildSeq, 0, 0, 0
21ee0 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 0a 20 20 69  .    );.  }..  i
21ef0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
21f00 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72 69   && sqlite3_stri
21f10 63 6d 70 28 7a 50 61 72 65 6e 74 53 65 71 2c 20  cmp(zParentSeq, 
21f20 7a 43 68 69 6c 64 53 65 71 29 20 29 7b 0a 20 20  zChildSeq) ){.  
21f30 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69    char *z = sqli
21f40 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 20 43 4f  te3_mprintf(" CO
21f50 4c 4c 41 54 45 20 25 73 22 2c 20 7a 50 61 72 65  LLATE %s", zPare
21f60 6e 74 53 65 71 29 3b 0a 20 20 20 20 73 71 6c 69  ntSeq);.    sqli
21f70 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
21f80 70 43 74 78 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pCtx, z, -1, SQL
21f90 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
21fa0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
21fb0 28 7a 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a  (z);.  }.}.../*.
21fc0 2a 2a 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74  ** The implement
21fd0 61 74 69 6f 6e 20 6f 66 20 64 6f 74 2d 63 6f 6d  ation of dot-com
21fe0 6d 61 6e 64 20 22 2e 6c 69 6e 74 20 66 6b 65 79  mand ".lint fkey
21ff0 2d 69 6e 64 65 78 65 73 22 2e 0a 2a 2f 0a 73 74  -indexes"..*/.st
22000 61 74 69 63 20 69 6e 74 20 6c 69 6e 74 46 6b 65  atic int lintFke
22010 79 49 6e 64 65 78 65 73 28 0a 20 20 53 68 65 6c  yIndexes(.  Shel
22020 6c 53 74 61 74 65 20 2a 70 53 74 61 74 65 2c 20  lState *pState, 
22030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
22040 75 72 72 65 6e 74 20 73 68 65 6c 6c 20 74 6f 6f  urrent shell too
22050 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20 63 68 61  l state */.  cha
22060 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20 20 20 20  r **azArg,      
22070 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22080 41 72 72 61 79 20 6f 66 20 61 72 67 75 6d 65 6e  Array of argumen
22090 74 73 20 70 61 73 73 65 64 20 74 6f 20 64 6f 74  ts passed to dot
220a0 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
220b0 74 20 6e 41 72 67 20 20 20 20 20 20 20 20 20 20  t nArg          
220c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
220d0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
220e0 65 73 20 69 6e 20 61 7a 41 72 67 5b 5d 20 2a 2f  es in azArg[] */
220f0 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
22100 62 20 3d 20 70 53 74 61 74 65 2d 3e 64 62 3b 20  b = pState->db; 
22110 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
22120 65 20 68 61 6e 64 6c 65 20 74 6f 20 71 75 65 72  e handle to quer
22130 79 20 22 6d 61 69 6e 22 20 64 62 20 6f 66 20 2a  y "main" db of *
22140 2f 0a 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20  /.  FILE *out = 
22150 70 53 74 61 74 65 2d 3e 6f 75 74 3b 20 20 20 20  pState->out;    
22160 20 20 20 20 2f 2a 20 53 74 72 65 61 6d 20 74 6f      /* Stream to
22170 20 77 72 69 74 65 20 6e 6f 6e 2d 65 72 72 6f 72   write non-error
22180 20 6f 75 74 70 75 74 20 74 6f 20 2a 2f 0a 20 20   output to */.  
22190 69 6e 74 20 62 56 65 72 62 6f 73 65 20 3d 20 30  int bVerbose = 0
221a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
221b0 2f 2a 20 49 66 20 2d 76 65 72 62 6f 73 65 20 69  /* If -verbose i
221c0 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20 69  s present */.  i
221d0 6e 74 20 62 47 72 6f 75 70 42 79 50 61 72 65 6e  nt bGroupByParen
221e0 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  t = 0;         /
221f0 2a 20 49 66 20 2d 67 72 6f 75 70 62 79 70 61 72  * If -groupbypar
22200 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ent is present *
22210 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
22220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22230 20 20 20 20 2f 2a 20 54 6f 20 69 74 65 72 61 74      /* To iterat
22240 65 20 74 68 72 6f 75 67 68 20 61 7a 41 72 67 5b  e through azArg[
22250 5d 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  ] */.  const cha
22260 72 20 2a 7a 49 6e 64 65 6e 74 20 3d 20 22 22 3b  r *zIndent = "";
22270 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 6d 75         /* How mu
22280 63 68 20 74 6f 20 69 6e 64 65 6e 74 20 43 52 45  ch to indent CRE
22290 41 54 45 20 49 4e 44 45 58 20 62 79 20 2a 2f 0a  ATE INDEX by */.
222a0 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
222b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222c0 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
222d0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   */.  sqlite3_st
222e0 6d 74 20 2a 70 53 71 6c 20 3d 20 30 3b 20 20 20  mt *pSql = 0;   
222f0 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 69 6c 65        /* Compile
22300 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  d version of SQL
22310 20 73 74 61 74 65 6d 65 6e 74 20 62 65 6c 6f 77   statement below
22320 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 54   */..  /*.  ** T
22330 68 69 73 20 53 45 4c 45 43 54 20 73 74 61 74 65  his SELECT state
22340 6d 65 6e 74 20 72 65 74 75 72 6e 73 20 6f 6e 65  ment returns one
22350 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 66 6f   row for each fo
22360 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
22370 61 69 6e 74 0a 20 20 2a 2a 20 69 6e 20 74 68 65  aint.  ** in the
22380 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 6d   schema of the m
22390 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 54 68  ain database. Th
223a0 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20  e column values 
223b0 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 30  are:.  **.  ** 0
223c0 2e 20 54 68 65 20 74 65 78 74 20 6f 66 20 61 6e  . The text of an
223d0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 73   SQL statement s
223e0 69 6d 69 6c 61 72 20 74 6f 3a 0a 20 20 2a 2a 0a  imilar to:.  **.
223f0 20 20 2a 2a 20 20 20 20 20 20 22 45 58 50 4c 41    **      "EXPLA
22400 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45  IN QUERY PLAN SE
22410 4c 45 43 54 20 31 20 46 52 4f 4d 20 63 68 69 6c  LECT 1 FROM chil
22420 64 5f 74 61 62 6c 65 20 57 48 45 52 45 20 63 68  d_table WHERE ch
22430 69 6c 64 5f 6b 65 79 3d 3f 22 0a 20 20 2a 2a 0a  ild_key=?".  **.
22440 20 20 2a 2a 20 20 20 20 54 68 69 73 20 53 45 4c    **    This SEL
22450 45 43 54 20 69 73 20 73 69 6d 69 6c 61 72 20 74  ECT is similar t
22460 6f 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 74  o the one that t
22470 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  he foreign keys 
22480 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 20  implementation. 
22490 20 2a 2a 20 20 20 20 6e 65 65 64 73 20 74 6f 20   **    needs to 
224a0 72 75 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 20 6f  run internally o
224b0 6e 20 63 68 69 6c 64 20 74 61 62 6c 65 73 2e 20  n child tables. 
224c0 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  If there is an i
224d0 6e 64 65 78 20 74 68 61 74 20 63 61 6e 0a 20 20  ndex that can.  
224e0 2a 2a 20 20 20 20 62 65 20 75 73 65 64 20 74 6f  **    be used to
224f0 20 6f 70 74 69 6d 69 7a 65 20 74 68 69 73 20 71   optimize this q
22500 75 65 72 79 2c 20 74 68 65 6e 20 69 74 20 63 61  uery, then it ca
22510 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 62  n also be used b
22520 79 20 74 68 65 20 46 4b 0a 20 20 2a 2a 20 20 20  y the FK.  **   
22530 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
22540 74 6f 20 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45  to optimize DELE
22550 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  TE or UPDATE sta
22560 74 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 70  tements on the p
22570 61 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 74 61  arent.  **    ta
22580 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 31  ble..  **.  ** 1
22590 2e 20 41 20 47 4c 4f 42 20 70 61 74 74 65 72 6e  . A GLOB pattern
225a0 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 73 71   suitable for sq
225b0 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 29 2e  lite3_strglob().
225c0 20 49 66 20 74 68 65 20 70 6c 61 6e 20 6f 75 74   If the plan out
225d0 70 75 74 20 62 79 0a 20 20 2a 2a 20 20 20 20 74  put by.  **    t
225e0 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  he EXPLAIN QUERY
225f0 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e 64 20 6d 61   PLAN command ma
22600 74 63 68 65 73 20 74 68 69 73 20 70 61 74 74 65  tches this patte
22610 72 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 63 68  rn, then the sch
22620 65 6d 61 0a 20 20 2a 2a 20 20 20 20 63 6f 6e 74  ema.  **    cont
22630 61 69 6e 73 20 61 6e 20 69 6e 64 65 78 20 74 68  ains an index th
22640 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  at can be used t
22650 6f 20 6f 70 74 69 6d 69 7a 65 20 74 68 65 20 71  o optimize the q
22660 75 65 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  uery..  **.  ** 
22670 32 2e 20 48 75 6d 61 6e 20 72 65 61 64 61 62 6c  2. Human readabl
22680 65 20 74 65 78 74 20 74 68 61 74 20 64 65 73 63  e text that desc
22690 72 69 62 65 73 20 74 68 65 20 63 68 69 6c 64 20  ribes the child 
226a0 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
226b0 73 2e 20 65 2e 67 2e 0a 20 20 2a 2a 0a 20 20 2a  s. e.g..  **.  *
226c0 2a 20 20 20 20 20 20 20 22 63 68 69 6c 64 5f 74  *       "child_t
226d0 61 62 6c 65 28 63 68 69 6c 64 5f 6b 65 79 31 2c  able(child_key1,
226e0 20 63 68 69 6c 64 5f 6b 65 79 32 29 22 0a 20 20   child_key2)".  
226f0 2a 2a 0a 20 20 2a 2a 20 33 2e 20 48 75 6d 61 6e  **.  ** 3. Human
22700 20 72 65 61 64 61 62 6c 65 20 74 65 78 74 20 74   readable text t
22710 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
22720 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 61  e parent table a
22730 6e 64 20 63 6f 6c 75 6d 6e 73 2e 20 65 2e 67 2e  nd columns. e.g.
22740 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20  .  **.  **      
22750 20 22 70 61 72 65 6e 74 5f 74 61 62 6c 65 28 70   "parent_table(p
22760 61 72 65 6e 74 5f 6b 65 79 31 2c 20 70 61 72 65  arent_key1, pare
22770 6e 74 5f 6b 65 79 32 29 22 0a 20 20 2a 2a 0a 20  nt_key2)".  **. 
22780 20 2a 2a 20 34 2e 20 41 20 66 75 6c 6c 20 43 52   ** 4. A full CR
22790 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
227a0 6d 65 6e 74 20 66 6f 72 20 61 6e 20 69 6e 64 65  ment for an inde
227b0 78 20 74 68 61 74 20 63 6f 75 6c 64 20 62 65 20  x that could be 
227c0 75 73 65 64 20 74 6f 0a 20 20 2a 2a 20 20 20 20  used to.  **    
227d0 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45 54 45 20  optimize DELETE 
227e0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
227f0 65 6e 74 73 20 6f 6e 20 74 68 65 20 70 61 72 65  ents on the pare
22800 6e 74 20 74 61 62 6c 65 2e 20 65 2e 67 2e 0a 20  nt table. e.g.. 
22810 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20 20 22   **.  **       "
22820 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 68 69  CREATE INDEX chi
22830 6c 64 5f 74 61 62 6c 65 5f 63 68 69 6c 64 5f 6b  ld_table_child_k
22840 65 79 20 4f 4e 20 63 68 69 6c 64 5f 74 61 62 6c  ey ON child_tabl
22850 65 28 63 68 69 6c 64 5f 6b 65 79 29 22 0a 20 20  e(child_key)".  
22860 2a 2a 0a 20 20 2a 2a 20 35 2e 20 54 68 65 20 6e  **.  ** 5. The n
22870 61 6d 65 20 6f 66 20 74 68 65 20 70 61 72 65 6e  ame of the paren
22880 74 20 74 61 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20  t table..  **.  
22890 2a 2a 20 54 68 65 73 65 20 73 69 78 20 76 61 6c  ** These six val
228a0 75 65 73 20 61 72 65 20 75 73 65 64 20 62 79 20  ues are used by 
228b0 74 68 65 20 43 20 6c 6f 67 69 63 20 62 65 6c 6f  the C logic belo
228c0 77 20 74 6f 20 67 65 6e 65 72 61 74 65 20 74 68  w to generate th
228d0 65 20 72 65 70 6f 72 74 2e 0a 20 20 2a 2f 0a 20  e report..  */. 
228e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71   const char *zSq
228f0 6c 20 3d 0a 20 20 22 53 45 4c 45 43 54 20 22 0a  l =.  "SELECT ".
22900 20 20 20 20 22 20 20 20 20 20 27 45 58 50 4c 41      "     'EXPLA
22910 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45  IN QUERY PLAN SE
22920 4c 45 43 54 20 31 20 46 52 4f 4d 20 27 20 7c 7c  LECT 1 FROM ' ||
22930 20 71 75 6f 74 65 28 73 2e 6e 61 6d 65 29 20 7c   quote(s.name) |
22940 7c 20 27 20 57 48 45 52 45 20 27 22 0a 20 20 20  | ' WHERE '".   
22950 20 22 20 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e   "  || group_con
22960 63 61 74 28 71 75 6f 74 65 28 73 2e 6e 61 6d 65  cat(quote(s.name
22970 29 20 7c 7c 20 27 2e 27 20 7c 7c 20 71 75 6f 74  ) || '.' || quot
22980 65 28 66 2e 5b 66 72 6f 6d 5d 29 20 7c 7c 20 27  e(f.[from]) || '
22990 3d 3f 27 20 22 0a 20 20 20 20 22 20 20 7c 7c 20  =?' ".    "  || 
229a0 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61  fkey_collate_cla
229b0 75 73 65 28 22 0a 20 20 20 20 22 20 20 20 20 20  use(".    "     
229c0 20 20 66 2e 5b 74 61 62 6c 65 5d 2c 20 43 4f 41    f.[table], COA
229d0 4c 45 53 43 45 28 66 2e 5b 74 6f 5d 2c 20 70 2e  LESCE(f.[to], p.
229e0 5b 6e 61 6d 65 5d 29 2c 20 73 2e 6e 61 6d 65 2c  [name]), s.name,
229f0 20 66 2e 5b 66 72 6f 6d 5d 29 2c 27 20 41 4e 44   f.[from]),' AND
22a00 20 27 29 22 0a 20 20 20 20 22 2c 20 22 0a 20 20   ')".    ", ".  
22a10 20 20 22 20 20 20 20 20 27 53 45 41 52 43 48 20    "     'SEARCH 
22a20 54 41 42 4c 45 20 27 20 7c 7c 20 73 2e 6e 61 6d  TABLE ' || s.nam
22a30 65 20 7c 7c 20 27 20 55 53 49 4e 47 20 43 4f 56  e || ' USING COV
22a40 45 52 49 4e 47 20 49 4e 44 45 58 2a 28 27 22 0a  ERING INDEX*('".
22a50 20 20 20 20 22 20 20 7c 7c 20 67 72 6f 75 70 5f      "  || group_
22a60 63 6f 6e 63 61 74 28 27 2a 3d 3f 27 2c 20 27 20  concat('*=?', ' 
22a70 41 4e 44 20 27 29 20 7c 7c 20 27 29 27 22 0a 20  AND ') || ')'". 
22a80 20 20 20 22 2c 20 22 0a 20 20 20 20 22 20 20 20     ", ".    "   
22a90 20 20 73 2e 6e 61 6d 65 20 20 7c 7c 20 27 28 27    s.name  || '('
22aa0 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74   || group_concat
22ab0 28 66 2e 5b 66 72 6f 6d 5d 2c 20 20 27 2c 20 27  (f.[from],  ', '
22ac0 29 20 7c 7c 20 27 29 27 22 0a 20 20 20 20 22 2c  ) || ')'".    ",
22ad0 20 22 0a 20 20 20 20 22 20 20 20 20 20 66 2e 5b   ".    "     f.[
22ae0 74 61 62 6c 65 5d 20 7c 7c 20 27 28 27 20 7c 7c  table] || '(' ||
22af0 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 43 4f   group_concat(CO
22b00 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d 2c 20 70  ALESCE(f.[to], p
22b10 2e 5b 6e 61 6d 65 5d 29 29 20 7c 7c 20 27 29 27  .[name])) || ')'
22b20 22 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20 22  ".    ", ".    "
22b30 20 20 20 20 20 27 43 52 45 41 54 45 20 49 4e 44       'CREATE IND
22b40 45 58 20 27 20 7c 7c 20 71 75 6f 74 65 28 73 2e  EX ' || quote(s.
22b50 6e 61 6d 65 20 7c 7c 27 5f 27 7c 7c 20 67 72 6f  name ||'_'|| gro
22b60 75 70 5f 63 6f 6e 63 61 74 28 66 2e 5b 66 72 6f  up_concat(f.[fro
22b70 6d 5d 2c 20 27 5f 27 29 29 22 0a 20 20 20 20 22  m], '_'))".    "
22b80 20 20 7c 7c 20 27 20 4f 4e 20 27 20 7c 7c 20 71    || ' ON ' || q
22b90 75 6f 74 65 28 73 2e 6e 61 6d 65 29 20 7c 7c 20  uote(s.name) || 
22ba0 27 28 27 22 0a 20 20 20 20 22 20 20 7c 7c 20 67  '('".    "  || g
22bb0 72 6f 75 70 5f 63 6f 6e 63 61 74 28 71 75 6f 74  roup_concat(quot
22bc0 65 28 66 2e 5b 66 72 6f 6d 5d 29 20 7c 7c 22 0a  e(f.[from]) ||".
22bd0 20 20 20 20 22 20 20 20 20 20 20 20 20 66 6b 65      "        fke
22be0 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65  y_collate_clause
22bf0 28 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 20  (".    "        
22c00 20 20 66 2e 5b 74 61 62 6c 65 5d 2c 20 43 4f 41    f.[table], COA
22c10 4c 45 53 43 45 28 66 2e 5b 74 6f 5d 2c 20 70 2e  LESCE(f.[to], p.
22c20 5b 6e 61 6d 65 5d 29 2c 20 73 2e 6e 61 6d 65 2c  [name]), s.name,
22c30 20 66 2e 5b 66 72 6f 6d 5d 29 2c 20 27 2c 20 27   f.[from]), ', '
22c40 29 22 0a 20 20 20 20 22 20 20 7c 7c 20 27 29 3b  )".    "  || ');
22c50 27 22 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20  '".    ", ".    
22c60 22 20 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 20  "     f.[table] 
22c70 22 0a 20 20 20 20 22 46 52 4f 4d 20 73 71 6c 69  ".    "FROM sqli
22c80 74 65 5f 6d 61 73 74 65 72 20 41 53 20 73 2c 20  te_master AS s, 
22c90 70 72 61 67 6d 61 5f 66 6f 72 65 69 67 6e 5f 6b  pragma_foreign_k
22ca0 65 79 5f 6c 69 73 74 28 73 2e 6e 61 6d 65 29 20  ey_list(s.name) 
22cb0 41 53 20 66 20 22 0a 20 20 20 20 22 4c 45 46 54  AS f ".    "LEFT
22cc0 20 4a 4f 49 4e 20 70 72 61 67 6d 61 5f 74 61 62   JOIN pragma_tab
22cd0 6c 65 5f 69 6e 66 6f 20 41 53 20 70 20 4f 4e 20  le_info AS p ON 
22ce0 28 70 6b 2d 31 3d 73 65 71 20 41 4e 44 20 70 2e  (pk-1=seq AND p.
22cf0 61 72 67 3d 66 2e 5b 74 61 62 6c 65 5d 29 20 22  arg=f.[table]) "
22d00 0a 20 20 20 20 22 47 52 4f 55 50 20 42 59 20 73  .    "GROUP BY s
22d10 2e 6e 61 6d 65 2c 20 66 2e 69 64 20 22 0a 20 20  .name, f.id ".  
22d20 20 20 22 4f 52 44 45 52 20 42 59 20 28 43 41 53    "ORDER BY (CAS
22d30 45 20 57 48 45 4e 20 3f 20 54 48 45 4e 20 66 2e  E WHEN ? THEN f.
22d40 5b 74 61 62 6c 65 5d 20 45 4c 53 45 20 73 2e 6e  [table] ELSE s.n
22d50 61 6d 65 20 45 4e 44 29 22 0a 20 20 3b 0a 20 20  ame END)".  ;.  
22d60 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 47 6c 6f  const char *zGlo
22d70 62 49 50 4b 20 3d 20 22 53 45 41 52 43 48 20 54  bIPK = "SEARCH T
22d80 41 42 4c 45 20 2a 20 55 53 49 4e 47 20 49 4e 54  ABLE * USING INT
22d90 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
22da0 20 28 72 6f 77 69 64 3d 3f 29 22 3b 0a 0a 20 20   (rowid=?)";..  
22db0 66 6f 72 28 69 3d 32 3b 20 69 3c 6e 41 72 67 3b  for(i=2; i<nArg;
22dc0 20 69 2b 2b 29 7b 0a 20 20 20 20 69 6e 74 20 6e   i++){.    int n
22dd0 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 41 72   = strlen30(azAr
22de0 67 5b 69 5d 29 3b 0a 20 20 20 20 69 66 28 20 6e  g[i]);.    if( n
22df0 3e 31 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74  >1 && sqlite3_st
22e00 72 6e 69 63 6d 70 28 22 2d 76 65 72 62 6f 73 65  rnicmp("-verbose
22e10 22 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 6e 29 3d  ", azArg[i], n)=
22e20 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 56 65 72  =0 ){.      bVer
22e30 62 6f 73 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  bose = 1;.    }.
22e40 20 20 20 20 65 6c 73 65 20 69 66 28 20 6e 3e 31      else if( n>1
22e50 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72 6e   && sqlite3_strn
22e60 69 63 6d 70 28 22 2d 67 72 6f 75 70 62 79 70 61  icmp("-groupbypa
22e70 72 65 6e 74 22 2c 20 61 7a 41 72 67 5b 69 5d 2c  rent", azArg[i],
22e80 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   n)==0 ){.      
22e90 62 47 72 6f 75 70 42 79 50 61 72 65 6e 74 20 3d  bGroupByParent =
22ea0 20 31 3b 0a 20 20 20 20 20 20 7a 49 6e 64 65 6e   1;.      zInden
22eb0 74 20 3d 20 22 20 20 20 20 22 3b 0a 20 20 20 20  t = "    ";.    
22ec0 7d 0a 20 20 20 20 65 6c 73 65 7b 0a 20 20 20 20  }.    else{.    
22ed0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
22ee0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 25 73 20  err, "Usage: %s 
22ef0 25 73 20 3f 2d 76 65 72 62 6f 73 65 3f 20 3f 2d  %s ?-verbose? ?-
22f00 67 72 6f 75 70 62 79 70 61 72 65 6e 74 3f 5c 6e  groupbyparent?\n
22f10 22 2c 0a 20 20 20 20 20 20 20 20 20 20 61 7a 41  ",.          azA
22f20 72 67 5b 30 5d 2c 20 61 7a 41 72 67 5b 31 5d 0a  rg[0], azArg[1].
22f30 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
22f40 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
22f50 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  OR;.    }.  }.. 
22f60 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 68 65   /* Register the
22f70 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c   fkey_collate_cl
22f80 61 75 73 65 28 29 20 53 51 4c 20 66 75 6e 63 74  ause() SQL funct
22f90 69 6f 6e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ion */.  rc = sq
22fa0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
22fb0 63 74 69 6f 6e 28 64 62 2c 20 22 66 6b 65 79 5f  ction(db, "fkey_
22fc0 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 22 2c  collate_clause",
22fd0 20 34 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   4, SQLITE_UTF8,
22fe0 0a 20 20 20 20 20 20 30 2c 20 73 68 65 6c 6c 46  .      0, shellF
22ff0 6b 65 79 43 6f 6c 6c 61 74 65 43 6c 61 75 73 65  keyCollateClause
23000 2c 20 30 2c 20 30 0a 20 20 29 3b 0a 0a 0a 20 20  , 0, 0.  );...  
23010 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
23020 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
23030 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
23040 28 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26  (db, zSql, -1, &
23050 70 53 71 6c 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  pSql, 0);.  }.  
23060 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
23070 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  K ){.    sqlite3
23080 5f 62 69 6e 64 5f 69 6e 74 28 70 53 71 6c 2c 20  _bind_int(pSql, 
23090 31 2c 20 62 47 72 6f 75 70 42 79 50 61 72 65 6e  1, bGroupByParen
230a0 74 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72  t);.  }..  if( r
230b0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
230c0 20 20 20 20 69 6e 74 20 72 63 32 3b 0a 20 20 20      int rc2;.   
230d0 20 63 68 61 72 20 2a 7a 50 72 65 76 20 3d 20 30   char *zPrev = 0
230e0 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 53 51 4c  ;.    while( SQL
230f0 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33  ITE_ROW==sqlite3
23100 5f 73 74 65 70 28 70 53 71 6c 29 20 29 7b 0a 20  _step(pSql) ){. 
23110 20 20 20 20 20 69 6e 74 20 72 65 73 20 3d 20 2d       int res = -
23120 31 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  1;.      sqlite3
23130 5f 73 74 6d 74 20 2a 70 45 78 70 6c 61 69 6e 20  _stmt *pExplain 
23140 3d 20 30 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74  = 0;.      const
23150 20 63 68 61 72 20 2a 7a 45 51 50 20 3d 20 28 63   char *zEQP = (c
23160 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
23170 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
23180 53 71 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 63  Sql, 0);.      c
23190 6f 6e 73 74 20 63 68 61 72 20 2a 7a 47 6c 6f 62  onst char *zGlob
231a0 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
231b0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
231c0 65 78 74 28 70 53 71 6c 2c 20 31 29 3b 0a 20 20  ext(pSql, 1);.  
231d0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
231e0 7a 46 72 6f 6d 20 3d 20 28 63 6f 6e 73 74 20 63  zFrom = (const c
231f0 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
23200 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 32  umn_text(pSql, 2
23210 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  );.      const c
23220 68 61 72 20 2a 7a 54 61 72 67 65 74 20 3d 20 28  har *zTarget = (
23230 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
23240 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
23250 70 53 71 6c 2c 20 33 29 3b 0a 20 20 20 20 20 20  pSql, 3);.      
23260 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 49 20  const char *zCI 
23270 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
23280 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
23290 78 74 28 70 53 71 6c 2c 20 34 29 3b 0a 20 20 20  xt(pSql, 4);.   
232a0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
232b0 50 61 72 65 6e 74 20 3d 20 28 63 6f 6e 73 74 20  Parent = (const 
232c0 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
232d0 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20  lumn_text(pSql, 
232e0 35 29 3b 0a 0a 20 20 20 20 20 20 72 63 20 3d 20  5);..      rc = 
232f0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
23300 76 32 28 64 62 2c 20 7a 45 51 50 2c 20 2d 31 2c  v2(db, zEQP, -1,
23310 20 26 70 45 78 70 6c 61 69 6e 2c 20 30 29 3b 0a   &pExplain, 0);.
23320 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
23330 4c 49 54 45 5f 4f 4b 20 29 20 62 72 65 61 6b 3b  LITE_OK ) break;
23340 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54  .      if( SQLIT
23350 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f 73  E_ROW==sqlite3_s
23360 74 65 70 28 70 45 78 70 6c 61 69 6e 29 20 29 7b  tep(pExplain) ){
23370 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
23380 68 61 72 20 2a 7a 50 6c 61 6e 20 3d 20 28 63 6f  har *zPlan = (co
23390 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
233a0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 45  3_column_text(pE
233b0 78 70 6c 61 69 6e 2c 20 33 29 3b 0a 20 20 20 20  xplain, 3);.    
233c0 20 20 20 20 72 65 73 20 3d 20 28 0a 20 20 20 20      res = (.    
233d0 20 20 20 20 20 20 20 20 20 20 30 3d 3d 73 71 6c            0==sql
233e0 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 7a 47 6c  ite3_strglob(zGl
233f0 6f 62 2c 20 7a 50 6c 61 6e 29 0a 20 20 20 20 20  ob, zPlan).     
23400 20 20 20 20 20 20 7c 7c 20 30 3d 3d 73 71 6c 69        || 0==sqli
23410 74 65 33 5f 73 74 72 67 6c 6f 62 28 7a 47 6c 6f  te3_strglob(zGlo
23420 62 49 50 4b 2c 20 7a 50 6c 61 6e 29 0a 20 20 20  bIPK, zPlan).   
23430 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 7d 0a       );.      }.
23440 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
23450 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78 70  e3_finalize(pExp
23460 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 69 66 28  lain);.      if(
23470 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
23480 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 69   break;..      i
23490 66 28 20 72 65 73 3c 30 20 29 7b 0a 20 20 20 20  f( res<0 ){.    
234a0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
234b0 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 69  tderr, "Error: i
234c0 6e 74 65 72 6e 61 6c 20 65 72 72 6f 72 22 29 3b  nternal error");
234d0 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
234e0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
234f0 20 20 20 20 20 69 66 28 20 62 47 72 6f 75 70 42       if( bGroupB
23500 79 50 61 72 65 6e 74 0a 20 20 20 20 20 20 20 20  yParent.        
23510 26 26 20 28 62 56 65 72 62 6f 73 65 20 7c 7c 20  && (bVerbose || 
23520 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20  res==0).        
23530 26 26 20 28 7a 50 72 65 76 3d 3d 30 20 7c 7c 20  && (zPrev==0 || 
23540 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28  sqlite3_stricmp(
23550 7a 50 61 72 65 6e 74 2c 20 7a 50 72 65 76 29 29  zParent, zPrev))
23560 0a 20 20 20 20 20 20 20 20 29 7b 0a 20 20 20 20  .        ){.    
23570 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
23580 28 6f 75 74 2c 20 22 2d 2d 20 50 61 72 65 6e 74  (out, "-- Parent
23590 20 74 61 62 6c 65 20 25 73 5c 6e 22 2c 20 7a 50   table %s\n", zP
235a0 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
235b0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
235c0 50 72 65 76 29 3b 0a 20 20 20 20 20 20 20 20 20  Prev);.         
235d0 20 7a 50 72 65 76 20 3d 20 73 71 6c 69 74 65 33   zPrev = sqlite3
235e0 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a  _mprintf("%s", z
235f0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  Parent);.       
23600 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20   }..        if( 
23610 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
23620 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
23630 75 74 2c 20 22 25 73 25 73 20 2d 2d 3e 20 25 73  ut, "%s%s --> %s
23640 5c 6e 22 2c 20 7a 49 6e 64 65 6e 74 2c 20 7a 43  \n", zIndent, zC
23650 49 2c 20 7a 54 61 72 67 65 74 29 3b 0a 20 20 20  I, zTarget);.   
23660 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 62       }else if( b
23670 56 65 72 62 6f 73 65 20 29 7b 0a 20 20 20 20 20  Verbose ){.     
23680 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
23690 6f 75 74 2c 20 22 25 73 2f 2a 20 6e 6f 20 65 78  out, "%s/* no ex
236a0 74 72 61 20 69 6e 64 65 78 65 73 20 72 65 71 75  tra indexes requ
236b0 69 72 65 64 20 66 6f 72 20 25 73 20 2d 3e 20 25  ired for %s -> %
236c0 73 20 2a 2f 5c 6e 22 2c 0a 20 20 20 20 20 20 20  s */\n",.       
236d0 20 20 20 20 20 20 20 7a 49 6e 64 65 6e 74 2c 20         zIndent, 
236e0 7a 46 72 6f 6d 2c 20 7a 54 61 72 67 65 74 0a 20  zFrom, zTarget. 
236f0 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20           );.    
23700 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
23710 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
23720 66 72 65 65 28 7a 50 72 65 76 29 3b 0a 0a 20 20  free(zPrev);..  
23730 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
23740 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 61 77  _OK ){.      raw
23750 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
23760 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f  "%s\n", sqlite3_
23770 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20 20  errmsg(db));.   
23780 20 7d 0a 0a 20 20 20 20 72 63 32 20 3d 20 73 71   }..    rc2 = sq
23790 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
237a0 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63  Sql);.    if( rc
237b0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
237c0 63 32 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  c2!=SQLITE_OK ){
237d0 0a 20 20 20 20 20 20 72 63 20 3d 20 72 63 32 3b  .      rc = rc2;
237e0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
237f0 66 28 73 74 64 65 72 72 2c 20 22 25 73 5c 6e 22  f(stderr, "%s\n"
23800 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
23810 28 64 62 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (db));.    }.  }
23820 65 6c 73 65 7b 0a 20 20 20 20 72 61 77 5f 70 72  else{.    raw_pr
23830 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73  intf(stderr, "%s
23840 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  \n", sqlite3_err
23850 6d 73 67 28 64 62 29 29 3b 0a 20 20 7d 0a 0a 20  msg(db));.  }.. 
23860 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
23870 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74  *.** Implementat
23880 69 6f 6e 20 6f 66 20 22 2e 6c 69 6e 74 22 20 64  ion of ".lint" d
23890 6f 74 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 73  ot command..*/.s
238a0 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 74 44 6f  tatic int lintDo
238b0 74 43 6f 6d 6d 61 6e 64 28 0a 20 20 53 68 65 6c  tCommand(.  Shel
238c0 6c 53 74 61 74 65 20 2a 70 53 74 61 74 65 2c 20  lState *pState, 
238d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
238e0 75 72 72 65 6e 74 20 73 68 65 6c 6c 20 74 6f 6f  urrent shell too
238f0 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20 63 68 61  l state */.  cha
23900 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20 20 20 20  r **azArg,      
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23920 41 72 72 61 79 20 6f 66 20 61 72 67 75 6d 65 6e  Array of argumen
23930 74 73 20 70 61 73 73 65 64 20 74 6f 20 64 6f 74  ts passed to dot
23940 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
23950 74 20 6e 41 72 67 20 20 20 20 20 20 20 20 20 20  t nArg          
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23970 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
23980 65 73 20 69 6e 20 61 7a 41 72 67 5b 5d 20 2a 2f  es in azArg[] */
23990 0a 29 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 6e  .){.  int n;.  n
239a0 20 3d 20 28 6e 41 72 67 3e 3d 32 20 3f 20 73 74   = (nArg>=2 ? st
239b0 72 6c 65 6e 33 30 28 61 7a 41 72 67 5b 31 5d 29  rlen30(azArg[1])
239c0 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 6e 3c 31   : 0);.  if( n<1
239d0 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74 72 6e   || sqlite3_strn
239e0 69 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20 22  icmp(azArg[1], "
239f0 66 6b 65 79 2d 69 6e 64 65 78 65 73 22 2c 20 6e  fkey-indexes", n
23a00 29 20 29 20 67 6f 74 6f 20 75 73 61 67 65 3b 0a  ) ) goto usage;.
23a10 20 20 72 65 74 75 72 6e 20 6c 69 6e 74 46 6b 65    return lintFke
23a20 79 49 6e 64 65 78 65 73 28 70 53 74 61 74 65 2c  yIndexes(pState,
23a30 20 61 7a 41 72 67 2c 20 6e 41 72 67 29 3b 0a 0a   azArg, nArg);..
23a40 20 75 73 61 67 65 3a 0a 20 20 72 61 77 5f 70 72   usage:.  raw_pr
23a50 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
23a60 61 67 65 20 25 73 20 73 75 62 2d 63 6f 6d 6d 61  age %s sub-comma
23a70 6e 64 20 3f 73 77 69 74 63 68 65 73 2e 2e 2e 3f  nd ?switches...?
23a80 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a  \n", azArg[0]);.
23a90 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
23aa0 65 72 72 2c 20 22 57 68 65 72 65 20 73 75 62 2d  err, "Where sub-
23ab0 63 6f 6d 6d 61 6e 64 73 20 61 72 65 3a 5c 6e 22  commands are:\n"
23ac0 29 3b 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28  );.  raw_printf(
23ad0 73 74 64 65 72 72 2c 20 22 20 20 20 20 66 6b 65  stderr, "    fke
23ae0 79 2d 69 6e 64 65 78 65 73 5c 6e 22 29 3b 0a 20  y-indexes\n");. 
23af0 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
23b00 52 52 4f 52 3b 0a 7d 0a 0a 23 69 66 20 21 64 65  RROR;.}..#if !de
23b10 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
23b20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 20  T_VIRTUALTABLE) 
23b30 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
23b40 45 5f 48 41 56 45 5f 5a 4c 49 42 29 0a 2f 2a 2a  E_HAVE_ZLIB)./**
23b50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
23b60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
23b70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
23b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
23b90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
23ba0 2a 2a 20 54 68 65 20 22 2e 61 72 63 68 69 76 65  ** The ".archive
23bb0 22 20 6f 72 20 22 2e 61 72 22 20 63 6f 6d 6d 61  " or ".ar" comma
23bc0 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  nd..*/.static vo
23bd0 69 64 20 73 68 65 6c 6c 50 72 65 70 61 72 65 28  id shellPrepare(
23be0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
23bf0 0a 20 20 69 6e 74 20 2a 70 52 63 2c 20 0a 20 20  .  int *pRc, .  
23c00 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
23c10 2c 20 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  , .  sqlite3_stm
23c20 74 20 2a 2a 70 70 53 74 6d 74 0a 29 7b 0a 20 20  t **ppStmt.){.  
23c30 2a 70 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 69  *ppStmt = 0;.  i
23c40 66 28 20 2a 70 52 63 3d 3d 53 51 4c 49 54 45 5f  f( *pRc==SQLITE_
23c50 4f 4b 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63  OK ){.    int rc
23c60 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
23c70 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c 20  re_v2(db, zSql, 
23c80 2d 31 2c 20 70 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, ppStmt, 0);.
23c90 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
23ca0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
23cb0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
23cc0 2c 20 22 73 71 6c 20 65 72 72 6f 72 3a 20 25 73  , "sql error: %s
23cd0 20 28 25 64 29 5c 6e 22 2c 20 0a 20 20 20 20 20   (%d)\n", .     
23ce0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72       sqlite3_err
23cf0 6d 73 67 28 64 62 29 2c 20 73 71 6c 69 74 65 33  msg(db), sqlite3
23d00 5f 65 72 72 63 6f 64 65 28 64 62 29 0a 20 20 20  _errcode(db).   
23d10 20 20 20 29 3b 0a 20 20 20 20 20 20 2a 70 52 63     );.      *pRc
23d20 20 3d 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d   = rc;.    }.  }
23d30 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .}..static void 
23d40 73 68 65 6c 6c 50 72 65 70 61 72 65 50 72 69 6e  shellPreparePrin
23d50 74 66 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  tf(.  sqlite3 *d
23d60 62 2c 20 0a 20 20 69 6e 74 20 2a 70 52 63 2c 20  b, .  int *pRc, 
23d70 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
23d80 2a 2a 70 70 53 74 6d 74 2c 0a 20 20 63 6f 6e 73  **ppStmt,.  cons
23d90 74 20 63 68 61 72 20 2a 7a 46 6d 74 2c 20 0a 20  t char *zFmt, . 
23da0 20 2e 2e 2e 0a 29 7b 0a 20 20 2a 70 70 53 74 6d   ....){.  *ppStm
23db0 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 2a 70 52  t = 0;.  if( *pR
23dc0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
23dd0 20 20 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a      va_list ap;.
23de0 20 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20      char *z;.   
23df0 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46   va_start(ap, zF
23e00 6d 74 29 3b 0a 20 20 20 20 7a 20 3d 20 73 71 6c  mt);.    z = sql
23e10 69 74 65 33 5f 76 6d 70 72 69 6e 74 66 28 7a 46  ite3_vmprintf(zF
23e20 6d 74 2c 20 61 70 29 3b 0a 20 20 20 20 69 66 28  mt, ap);.    if(
23e30 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2a   z==0 ){.      *
23e40 70 52 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d  pRc = SQLITE_NOM
23e50 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  EM;.    }else{. 
23e60 20 20 20 20 20 73 68 65 6c 6c 50 72 65 70 61 72       shellPrepar
23e70 65 28 64 62 2c 20 70 52 63 2c 20 7a 2c 20 70 70  e(db, pRc, z, pp
23e80 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  Stmt);.      sql
23e90 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20  ite3_free(z);.  
23ea0 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 73 74 61 74 69    }.  }.}..stati
23eb0 63 20 76 6f 69 64 20 73 68 65 6c 6c 46 69 6e 61  c void shellFina
23ec0 6c 69 7a 65 28 0a 20 20 69 6e 74 20 2a 70 52 63  lize(.  int *pRc
23ed0 2c 20 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  , .  sqlite3_stm
23ee0 74 20 2a 70 53 74 6d 74 0a 29 7b 0a 20 20 69 66  t *pStmt.){.  if
23ef0 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 73  ( pStmt ){.    s
23f00 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 73 71 6c  qlite3 *db = sql
23f10 69 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65 28 70  ite3_db_handle(p
23f20 53 74 6d 74 29 3b 0a 20 20 20 20 69 6e 74 20 72  Stmt);.    int r
23f30 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  c = sqlite3_fina
23f40 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
23f50 20 69 66 28 20 2a 70 52 63 3d 3d 53 51 4c 49 54   if( *pRc==SQLIT
23f60 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 66  E_OK ){.      if
23f70 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
23f80 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
23f90 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53  rintf(stderr, "S
23fa0 51 4c 20 65 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  QL error: %s\n",
23fb0 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
23fc0 64 62 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  db));.      }.  
23fd0 20 20 20 20 2a 70 52 63 20 3d 20 72 63 3b 0a 20      *pRc = rc;. 
23fe0 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 73 74 61 74     }.  }.}..stat
23ff0 69 63 20 76 6f 69 64 20 73 68 65 6c 6c 52 65 73  ic void shellRes
24000 65 74 28 0a 20 20 69 6e 74 20 2a 70 52 63 2c 20  et(.  int *pRc, 
24010 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
24020 2a 70 53 74 6d 74 0a 29 7b 0a 20 20 69 6e 74 20  *pStmt.){.  int 
24030 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73  rc = sqlite3_res
24040 65 74 28 70 53 74 6d 74 29 3b 0a 20 20 69 66 28  et(pStmt);.  if(
24050 20 2a 70 52 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b   *pRc==SQLITE_OK
24060 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d   ){.    if( rc!=
24070 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
24080 20 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d     sqlite3 *db =
24090 20 73 71 6c 69 74 65 33 5f 64 62 5f 68 61 6e 64   sqlite3_db_hand
240a0 6c 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  le(pStmt);.     
240b0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
240c0 72 72 2c 20 22 53 51 4c 20 65 72 72 6f 72 3a 20  rr, "SQL error: 
240d0 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
240e0 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20 20 20  rrmsg(db));.    
240f0 7d 0a 20 20 20 20 2a 70 52 63 20 3d 20 72 63 3b  }.    *pRc = rc;
24100 0a 20 20 7d 0a 7d 0a 2f 2a 0a 2a 2a 20 53 74 72  .  }.}./*.** Str
24110 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
24120 69 6e 67 20 61 20 73 69 6e 67 6c 65 20 22 2e 61  ing a single ".a
24130 72 22 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 74  r" command..*/.t
24140 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 72  ypedef struct Ar
24150 43 6f 6d 6d 61 6e 64 20 41 72 43 6f 6d 6d 61 6e  Command ArComman
24160 64 3b 0a 73 74 72 75 63 74 20 41 72 43 6f 6d 6d  d;.struct ArComm
24170 61 6e 64 20 7b 0a 20 20 75 38 20 65 43 6d 64 3b  and {.  u8 eCmd;
24180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24190 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 41 52          /* An AR
241a0 5f 43 4d 44 5f 2a 20 76 61 6c 75 65 20 2a 2f 0a  _CMD_* value */.
241b0 20 20 75 38 20 62 56 65 72 62 6f 73 65 3b 20 20    u8 bVerbose;  
241c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 2d 2d 76    /* True if --v
241e0 65 72 62 6f 73 65 20 2a 2f 0a 20 20 75 38 20 62  erbose */.  u8 b
241f0 5a 69 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  Zip;            
24200 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
24210 72 75 65 20 69 66 20 74 68 65 20 61 72 63 68 69  rue if the archi
24220 76 65 20 69 73 20 61 20 5a 49 50 20 2a 2f 0a 20  ve is a ZIP */. 
24230 20 75 38 20 62 44 72 79 52 75 6e 3b 20 20 20 20   u8 bDryRun;    
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24250 20 2f 2a 20 54 72 75 65 20 69 66 20 2d 2d 64 72   /* True if --dr
24260 79 2d 72 75 6e 20 2a 2f 0a 20 20 75 38 20 62 41  y-run */.  u8 bA
24270 70 70 65 6e 64 3b 20 20 20 20 20 20 20 20 20 20  ppend;          
24280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
24290 75 65 20 69 66 20 2d 2d 61 70 70 65 6e 64 20 2a  ue if --append *
242a0 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20  /.  int nArg;   
242b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
242d0 20 63 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   command argumen
242e0 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53  ts */.  char *zS
242f0 72 63 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  rcTable;        
24300 20 20 20 20 20 20 20 20 2f 2a 20 22 73 71 6c 61          /* "sqla
24310 72 22 2c 20 22 7a 69 70 66 69 6c 65 28 24 66 69  r", "zipfile($fi
24320 6c 65 29 22 20 6f 72 20 22 7a 69 70 22 20 2a 2f  le)" or "zip" */
24330 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
24340 46 69 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  File;           
24350 20 20 20 2f 2a 20 2d 2d 66 69 6c 65 20 61 72 67     /* --file arg
24360 75 6d 65 6e 74 2c 20 6f 72 20 4e 55 4c 4c 20 2a  ument, or NULL *
24370 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
24380 7a 44 69 72 3b 20 20 20 20 20 20 20 20 20 20 20  zDir;           
24390 20 20 20 20 2f 2a 20 2d 2d 64 69 72 65 63 74 6f      /* --directo
243a0 72 79 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 20  ry argument, or 
243b0 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
243c0 2a 61 7a 41 72 67 3b 20 20 20 20 20 20 20 20 20  *azArg;         
243d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
243e0 61 79 20 6f 66 20 63 6f 6d 6d 61 6e 64 20 61 72  ay of command ar
243f0 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 53 68 65  guments */.  She
24400 6c 6c 53 74 61 74 65 20 2a 70 3b 20 20 20 20 20  llState *p;     
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24420 53 68 65 6c 6c 20 73 74 61 74 65 20 2a 2f 0a 20  Shell state */. 
24430 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24450 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e   /* Database con
24460 74 61 69 6e 69 6e 67 20 74 68 65 20 61 72 63 68  taining the arch
24470 69 76 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ive */.};../*.**
24480 20 50 72 69 6e 74 20 61 20 75 73 61 67 65 20 6d   Print a usage m
24490 65 73 73 61 67 65 20 66 6f 72 20 74 68 65 20 2e  essage for the .
244a0 61 72 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 73 74  ar command to st
244b0 64 65 72 72 20 61 6e 64 20 72 65 74 75 72 6e 20  derr and return 
244c0 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2f  SQLITE_ERROR..*/
244d0 0a 73 74 61 74 69 63 20 69 6e 74 20 61 72 55 73  .static int arUs
244e0 61 67 65 28 46 49 4c 45 20 2a 66 29 7b 0a 20 20  age(FILE *f){.  
244f0 72 61 77 5f 70 72 69 6e 74 66 28 66 2c 0a 22 5c  raw_printf(f,."\
24500 6e 22 0a 22 55 73 61 67 65 3a 20 2e 61 72 20 5b  n"."Usage: .ar [
24510 4f 50 54 49 4f 4e 2e 2e 2e 5d 20 5b 46 49 4c 45  OPTION...] [FILE
24520 2e 2e 2e 5d 5c 6e 22 0a 22 54 68 65 20 2e 61 72  ...]\n"."The .ar
24530 20 63 6f 6d 6d 61 6e 64 20 6d 61 6e 61 67 65 73   command manages
24540 20 73 71 6c 61 72 20 61 72 63 68 69 76 65 73 2e   sqlar archives.
24550 5c 6e 22 0a 22 5c 6e 22 0a 22 45 78 61 6d 70 6c  \n"."\n"."Exampl
24560 65 73 3a 5c 6e 22 0a 22 20 20 2e 61 72 20 2d 63  es:\n"."  .ar -c
24570 66 20 61 72 63 68 69 76 65 2e 73 61 72 20 66 6f  f archive.sar fo
24580 6f 20 62 61 72 20 20 20 20 23 20 43 72 65 61 74  o bar    # Creat
24590 65 20 61 72 63 68 69 76 65 2e 73 61 72 20 66 72  e archive.sar fr
245a0 6f 6d 20 66 69 6c 65 73 20 66 6f 6f 20 61 6e 64  om files foo and
245b0 20 62 61 72 5c 6e 22 0a 22 20 20 2e 61 72 20 2d   bar\n"."  .ar -
245c0 74 66 20 61 72 63 68 69 76 65 2e 73 61 72 20 20  tf archive.sar  
245d0 20 20 20 20 20 20 20 20 20 20 23 20 4c 69 73 74            # List
245e0 20 6d 65 6d 62 65 72 73 20 6f 66 20 61 72 63 68   members of arch
245f0 69 76 65 2e 73 61 72 5c 6e 22 0a 22 20 20 2e 61  ive.sar\n"."  .a
24600 72 20 2d 78 76 66 20 61 72 63 68 69 76 65 2e 73  r -xvf archive.s
24610 61 72 20 20 20 20 20 20 20 20 20 20 20 23 20 56  ar           # V
24620 65 72 62 6f 73 65 6c 79 20 65 78 74 72 61 63 74  erbosely extract
24630 20 66 69 6c 65 73 20 66 72 6f 6d 20 61 72 63 68   files from arch
24640 69 76 65 2e 73 61 72 5c 6e 22 0a 22 5c 6e 22 0a  ive.sar\n"."\n".
24650 22 45 61 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69  "Each command li
24660 6e 65 20 6d 75 73 74 20 66 65 61 74 75 72 65 20  ne must feature 
24670 65 78 61 63 74 6c 79 20 6f 6e 65 20 63 6f 6d 6d  exactly one comm
24680 61 6e 64 20 6f 70 74 69 6f 6e 3a 5c 6e 22 0a 22  and option:\n"."
24690 20 20 2d 63 2c 20 2d 2d 63 72 65 61 74 65 20 20    -c, --create  
246a0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 72 65               Cre
246b0 61 74 65 20 61 20 6e 65 77 20 61 72 63 68 69 76  ate a new archiv
246c0 65 5c 6e 22 0a 22 20 20 2d 75 2c 20 2d 2d 75 70  e\n"."  -u, --up
246d0 64 61 74 65 20 20 20 20 20 20 20 20 20 20 20 20  date            
246e0 20 20 20 55 70 64 61 74 65 20 6f 72 20 61 64 64     Update or add
246f0 20 66 69 6c 65 73 20 74 6f 20 61 6e 20 65 78 69   files to an exi
24700 73 74 69 6e 67 20 61 72 63 68 69 76 65 5c 6e 22  sting archive\n"
24710 0a 22 20 20 2d 74 2c 20 2d 2d 6c 69 73 74 20 20  ."  -t, --list  
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
24730 69 73 74 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  ist contents of 
24740 61 72 63 68 69 76 65 5c 6e 22 0a 22 20 20 2d 78  archive\n"."  -x
24750 2c 20 2d 2d 65 78 74 72 61 63 74 20 20 20 20 20  , --extract     
24760 20 20 20 20 20 20 20 20 20 45 78 74 72 61 63 74           Extract
24770 20 66 69 6c 65 73 20 66 72 6f 6d 20 61 72 63 68   files from arch
24780 69 76 65 5c 6e 22 0a 22 5c 6e 22 0a 22 41 6e 64  ive\n"."\n"."And
24790 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6f 70   zero or more op
247a0 74 69 6f 6e 61 6c 20 6f 70 74 69 6f 6e 73 3a 5c  tional options:\
247b0 6e 22 0a 22 20 20 2d 76 2c 20 2d 2d 76 65 72 62  n"."  -v, --verb
247c0 6f 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  ose             
247d0 20 50 72 69 6e 74 20 65 61 63 68 20 66 69 6c 65   Print each file
247e0 6e 61 6d 65 20 61 73 20 69 74 20 69 73 20 70 72  name as it is pr
247f0 6f 63 65 73 73 65 64 5c 6e 22 0a 22 20 20 2d 66  ocessed\n"."  -f
24800 20 46 49 4c 45 2c 20 2d 2d 66 69 6c 65 20 46 49   FILE, --file FI
24810 4c 45 20 20 20 20 20 20 20 4f 70 65 72 61 74 65  LE       Operate
24820 20 6f 6e 20 61 72 63 68 69 76 65 20 46 49 4c 45   on archive FILE
24830 20 28 64 65 66 61 75 6c 74 20 69 73 20 63 75 72   (default is cur
24840 72 65 6e 74 20 64 62 29 5c 6e 22 0a 22 20 20 2d  rent db)\n"."  -
24850 61 20 46 49 4c 45 2c 20 2d 2d 61 70 70 65 6e 64  a FILE, --append
24860 20 46 49 4c 45 20 20 20 20 20 4f 70 65 72 61 74   FILE     Operat
24870 65 20 6f 6e 20 46 49 4c 45 20 6f 70 65 6e 65 64  e on FILE opened
24880 20 75 73 69 6e 67 20 74 68 65 20 61 70 6e 64 76   using the apndv
24890 66 73 20 56 46 53 5c 6e 22 0a 22 20 20 2d 43 20  fs VFS\n"."  -C 
248a0 44 49 52 2c 20 2d 2d 64 69 72 65 63 74 6f 72 79  DIR, --directory
248b0 20 44 49 52 20 20 20 20 43 68 61 6e 67 65 20 74   DIR    Change t
248c0 6f 20 64 69 72 65 63 74 6f 72 79 20 44 49 52 20  o directory DIR 
248d0 74 6f 20 72 65 61 64 2f 65 78 74 72 61 63 74 20  to read/extract 
248e0 66 69 6c 65 73 5c 6e 22 0a 22 20 20 2d 6e 2c 20  files\n"."  -n, 
248f0 2d 2d 64 72 79 72 75 6e 20 20 20 20 20 20 20 20  --dryrun        
24900 20 20 20 20 20 20 20 53 68 6f 77 20 74 68 65 20         Show the 
24910 53 51 4c 20 74 68 61 74 20 77 6f 75 6c 64 20 68  SQL that would h
24920 61 76 65 20 6f 63 63 75 72 72 65 64 5c 6e 22 0a  ave occurred\n".
24930 22 5c 6e 22 0a 22 53 65 65 20 61 6c 73 6f 3a 20  "\n"."See also: 
24940 68 74 74 70 3a 2f 2f 73 71 6c 69 74 65 2e 6f 72  http://sqlite.or
24950 67 2f 63 6c 69 2e 68 74 6d 6c 23 73 71 6c 61 72  g/cli.html#sqlar
24960 5f 61 72 63 68 69 76 65 5f 73 75 70 70 6f 72 74  _archive_support
24970 5c 6e 22 0a 22 5c 6e 22 0a 29 3b 0a 20 20 72 65  \n"."\n".);.  re
24980 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
24990 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e  R;.}../*.** Prin
249a0 74 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  t an error messa
249b0 67 65 20 66 6f 72 20 74 68 65 20 2e 61 72 20 63  ge for the .ar c
249c0 6f 6d 6d 61 6e 64 20 74 6f 20 73 74 64 65 72 72  ommand to stderr
249d0 20 61 6e 64 20 72 65 74 75 72 6e 20 0a 2a 2a 20   and return .** 
249e0 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2f  SQLITE_ERROR..*/
249f0 0a 73 74 61 74 69 63 20 69 6e 74 20 61 72 45 72  .static int arEr
24a00 72 6f 72 4d 73 67 28 63 6f 6e 73 74 20 63 68 61  rorMsg(const cha
24a10 72 20 2a 7a 46 6d 74 2c 20 2e 2e 2e 29 7b 0a 20  r *zFmt, ...){. 
24a20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 63   va_list ap;.  c
24a30 68 61 72 20 2a 7a 3b 0a 20 20 76 61 5f 73 74 61  har *z;.  va_sta
24a40 72 74 28 61 70 2c 20 7a 46 6d 74 29 3b 0a 20 20  rt(ap, zFmt);.  
24a50 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70 72  z = sqlite3_vmpr
24a60 69 6e 74 66 28 7a 46 6d 74 2c 20 61 70 29 3b 0a  intf(zFmt, ap);.
24a70 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20    va_end(ap);.  
24a80 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
24a90 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 20 28 74  r, "Error: %s (t
24aa0 72 79 20 5c 22 2e 61 72 20 2d 2d 68 65 6c 70 5c  ry \".ar --help\
24ab0 22 29 5c 6e 22 2c 20 7a 29 3b 0a 20 20 73 71 6c  ")\n", z);.  sql
24ac0 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20  ite3_free(z);.  
24ad0 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
24ae0 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 56 61  ROR;.}../*.** Va
24af0 6c 75 65 73 20 66 6f 72 20 41 72 43 6f 6d 6d 61  lues for ArComma
24b00 6e 64 2e 65 43 6d 64 2e 0a 2a 2f 0a 23 64 65 66  nd.eCmd..*/.#def
24b10 69 6e 65 20 41 52 5f 43 4d 44 5f 43 52 45 41 54  ine AR_CMD_CREAT
24b20 45 20 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e  E       1.#defin
24b30 65 20 41 52 5f 43 4d 44 5f 45 58 54 52 41 43 54  e AR_CMD_EXTRACT
24b40 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20        2.#define 
24b50 41 52 5f 43 4d 44 5f 4c 49 53 54 20 20 20 20 20  AR_CMD_LIST     
24b60 20 20 20 20 33 0a 23 64 65 66 69 6e 65 20 41 52      3.#define AR
24b70 5f 43 4d 44 5f 55 50 44 41 54 45 20 20 20 20 20  _CMD_UPDATE     
24b80 20 20 34 0a 23 64 65 66 69 6e 65 20 41 52 5f 43    4.#define AR_C
24b90 4d 44 5f 48 45 4c 50 20 20 20 20 20 20 20 20 20  MD_HELP         
24ba0 35 0a 0a 2f 2a 0a 2a 2a 20 4f 74 68 65 72 20 28  5../*.** Other (
24bb0 6e 6f 6e 2d 63 6f 6d 6d 61 6e 64 29 20 73 77 69  non-command) swi
24bc0 74 63 68 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tches..*/.#defin
24bd0 65 20 41 52 5f 53 57 49 54 43 48 5f 56 45 52 42  e AR_SWITCH_VERB
24be0 4f 53 45 20 20 20 20 20 36 0a 23 64 65 66 69 6e  OSE     6.#defin
24bf0 65 20 41 52 5f 53 57 49 54 43 48 5f 46 49 4c 45  e AR_SWITCH_FILE
24c00 20 20 20 20 20 20 20 20 37 0a 23 64 65 66 69 6e          7.#defin
24c10 65 20 41 52 5f 53 57 49 54 43 48 5f 44 49 52 45  e AR_SWITCH_DIRE
24c20 43 54 4f 52 59 20 20 20 38 0a 23 64 65 66 69 6e  CTORY   8.#defin
24c30 65 20 41 52 5f 53 57 49 54 43 48 5f 41 50 50 45  e AR_SWITCH_APPE
24c40 4e 44 20 20 20 20 20 20 39 0a 23 64 65 66 69 6e  ND      9.#defin
24c50 65 20 41 52 5f 53 57 49 54 43 48 5f 44 52 59 52  e AR_SWITCH_DRYR
24c60 55 4e 20 20 20 20 20 31 30 0a 0a 73 74 61 74 69  UN     10..stati
24c70 63 20 69 6e 74 20 61 72 50 72 6f 63 65 73 73 53  c int arProcessS
24c80 77 69 74 63 68 28 41 72 43 6f 6d 6d 61 6e 64 20  witch(ArCommand 
24c90 2a 70 41 72 2c 20 69 6e 74 20 65 53 77 69 74 63  *pAr, int eSwitc
24ca0 68 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  h, const char *z
24cb0 41 72 67 29 7b 0a 20 20 73 77 69 74 63 68 28 20  Arg){.  switch( 
24cc0 65 53 77 69 74 63 68 20 29 7b 0a 20 20 20 20 63  eSwitch ){.    c
24cd0 61 73 65 20 41 52 5f 43 4d 44 5f 43 52 45 41 54  ase AR_CMD_CREAT
24ce0 45 3a 0a 20 20 20 20 63 61 73 65 20 41 52 5f 43  E:.    case AR_C
24cf0 4d 44 5f 45 58 54 52 41 43 54 3a 0a 20 20 20 20  MD_EXTRACT:.    
24d00 63 61 73 65 20 41 52 5f 43 4d 44 5f 4c 49 53 54  case AR_CMD_LIST
24d10 3a 0a 20 20 20 20 63 61 73 65 20 41 52 5f 43 4d  :.    case AR_CM
24d20 44 5f 55 50 44 41 54 45 3a 0a 20 20 20 20 63 61  D_UPDATE:.    ca
24d30 73 65 20 41 52 5f 43 4d 44 5f 48 45 4c 50 3a 0a  se AR_CMD_HELP:.
24d40 20 20 20 20 20 20 69 66 28 20 70 41 72 2d 3e 65        if( pAr->e
24d50 43 6d 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72  Cmd ){.        r
24d60 65 74 75 72 6e 20 61 72 45 72 72 6f 72 4d 73 67  eturn arErrorMsg
24d70 28 22 6d 75 6c 74 69 70 6c 65 20 63 6f 6d 6d 61  ("multiple comma
24d80 6e 64 20 6f 70 74 69 6f 6e 73 22 29 3b 0a 20 20  nd options");.  
24d90 20 20 20 20 7d 0a 20 20 20 20 20 20 70 41 72 2d      }.      pAr-
24da0 3e 65 43 6d 64 20 3d 20 65 53 77 69 74 63 68 3b  >eCmd = eSwitch;
24db0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20  .      break;.. 
24dc0 20 20 20 63 61 73 65 20 41 52 5f 53 57 49 54 43     case AR_SWITC
24dd0 48 5f 44 52 59 52 55 4e 3a 0a 20 20 20 20 20 20  H_DRYRUN:.      
24de0 70 41 72 2d 3e 62 44 72 79 52 75 6e 20 3d 20 31  pAr->bDryRun = 1
24df0 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
24e00 20 20 20 63 61 73 65 20 41 52 5f 53 57 49 54 43     case AR_SWITC
24e10 48 5f 56 45 52 42 4f 53 45 3a 0a 20 20 20 20 20  H_VERBOSE:.     
24e20 20 70 41 72 2d 3e 62 56 65 72 62 6f 73 65 20 3d   pAr->bVerbose =
24e30 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   1;.      break;
24e40 0a 20 20 20 20 63 61 73 65 20 41 52 5f 53 57 49  .    case AR_SWI
24e50 54 43 48 5f 41 50 50 45 4e 44 3a 0a 20 20 20 20  TCH_APPEND:.    
24e60 20 20 70 41 72 2d 3e 62 41 70 70 65 6e 64 20 3d    pAr->bAppend =
24e70 20 31 3b 0a 20 20 20 20 20 20 2f 2a 20 46 61 6c   1;.      /* Fal
24e80 6c 20 74 68 72 75 20 69 6e 74 6f 20 2d 2d 66 69  l thru into --fi
24e90 6c 65 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 41  le */.    case A
24ea0 52 5f 53 57 49 54 43 48 5f 46 49 4c 45 3a 0a 20  R_SWITCH_FILE:. 
24eb0 20 20 20 20 20 70 41 72 2d 3e 7a 46 69 6c 65 20       pAr->zFile 
24ec0 3d 20 7a 41 72 67 3b 0a 20 20 20 20 20 20 62 72  = zArg;.      br
24ed0 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 41 52  eak;.    case AR
24ee0 5f 53 57 49 54 43 48 5f 44 49 52 45 43 54 4f 52  _SWITCH_DIRECTOR
24ef0 59 3a 0a 20 20 20 20 20 20 70 41 72 2d 3e 7a 44  Y:.      pAr->zD
24f00 69 72 20 3d 20 7a 41 72 67 3b 0a 20 20 20 20 20  ir = zArg;.     
24f10 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 72   break;.  }..  r
24f20 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
24f30 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 73 65 20  .}../*.** Parse 
24f40 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
24f50 20 66 6f 72 20 61 6e 20 22 2e 61 72 22 20 63 6f   for an ".ar" co
24f60 6d 6d 61 6e 64 2e 20 54 68 65 20 72 65 73 75 6c  mmand. The resul
24f70 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 69  ts are written i
24f80 6e 74 6f 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  nto.** structure
24f90 20 28 2a 70 41 72 29 2e 20 53 51 4c 49 54 45 5f   (*pAr). SQLITE_
24fa0 4f 4b 20 69 73 20 72 65 74 75 72 6e 65 64 20 69  OK is returned i
24fb0 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  f the command li
24fc0 6e 65 20 69 73 20 70 61 72 73 65 64 0a 2a 2a 20  ne is parsed.** 
24fd0 73 75 63 63 65 73 73 66 75 6c 6c 79 2c 20 6f 74  successfully, ot
24fe0 68 65 72 77 69 73 65 20 61 6e 20 65 72 72 6f 72  herwise an error
24ff0 20 6d 65 73 73 61 67 65 20 69 73 20 77 72 69 74   message is writ
25000 74 65 6e 20 74 6f 20 73 74 64 65 72 72 20 61 6e  ten to stderr an
25010 64 20 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 52 52  d .** SQLITE_ERR
25020 4f 52 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a  OR returned..*/.
25030 73 74 61 74 69 63 20 69 6e 74 20 61 72 50 61 72  static int arPar
25040 73 65 43 6f 6d 6d 61 6e 64 28 0a 20 20 63 68 61  seCommand(.  cha
25050 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20 20 20 20  r **azArg,      
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25070 41 72 72 61 79 20 6f 66 20 61 72 67 75 6d 65 6e  Array of argumen
25080 74 73 20 70 61 73 73 65 64 20 74 6f 20 64 6f 74  ts passed to dot
25090 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
250a0 74 20 6e 41 72 67 2c 20 20 20 20 20 20 20 20 20  t nArg,         
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
250c0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
250d0 65 73 20 69 6e 20 61 7a 41 72 67 5b 5d 20 2a 2f  es in azArg[] */
250e0 0a 20 20 41 72 43 6f 6d 6d 61 6e 64 20 2a 70 41  .  ArCommand *pA
250f0 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
25100 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74     /* Populate t
25110 68 69 73 20 6f 62 6a 65 63 74 20 2a 2f 0a 29 7b  his object */.){
25120 0a 20 20 73 74 72 75 63 74 20 41 72 53 77 69 74  .  struct ArSwit
25130 63 68 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ch {.    const c
25140 68 61 72 20 2a 7a 4c 6f 6e 67 3b 0a 20 20 20 20  har *zLong;.    
25150 63 68 61 72 20 63 53 68 6f 72 74 3b 0a 20 20 20  char cShort;.   
25160 20 75 38 20 65 53 77 69 74 63 68 3b 0a 20 20 20   u8 eSwitch;.   
25170 20 75 38 20 62 41 72 67 3b 0a 20 20 7d 20 61 53   u8 bArg;.  } aS
25180 77 69 74 63 68 5b 5d 20 3d 20 7b 0a 20 20 20 20  witch[] = {.    
25190 7b 20 22 63 72 65 61 74 65 22 2c 20 20 20 20 27  { "create",    '
251a0 63 27 2c 20 41 52 5f 43 4d 44 5f 43 52 45 41 54  c', AR_CMD_CREAT
251b0 45 2c 20 20 20 20 20 20 20 30 20 7d 2c 0a 20 20  E,       0 },.  
251c0 20 20 7b 20 22 65 78 74 72 61 63 74 22 2c 20 20    { "extract",  
251d0 20 27 78 27 2c 20 41 52 5f 43 4d 44 5f 45 58 54   'x', AR_CMD_EXT
251e0 52 41 43 54 2c 20 20 20 20 20 20 30 20 7d 2c 0a  RACT,      0 },.
251f0 20 20 20 20 7b 20 22 6c 69 73 74 22 2c 20 20 20      { "list",   
25200 20 20 20 27 74 27 2c 20 41 52 5f 43 4d 44 5f 4c     't', AR_CMD_L
25210 49 53 54 2c 20 20 20 20 20 20 20 20 20 30 20 7d  IST,         0 }
25220 2c 0a 20 20 20 20 7b 20 22 75 70 64 61 74 65 22  ,.    { "update"
25230 2c 20 20 20 20 27 75 27 2c 20 41 52 5f 43 4d 44  ,    'u', AR_CMD
25240 5f 55 50 44 41 54 45 2c 20 20 20 20 20 20 20 30  _UPDATE,       0
25250 20 7d 2c 0a 20 20 20 20 7b 20 22 68 65 6c 70 22   },.    { "help"
25260 2c 20 20 20 20 20 20 27 68 27 2c 20 41 52 5f 43  ,      'h', AR_C
25270 4d 44 5f 48 45 4c 50 2c 20 20 20 20 20 20 20 20  MD_HELP,        
25280 20 30 20 7d 2c 0a 20 20 20 20 7b 20 22 76 65 72   0 },.    { "ver
25290 62 6f 73 65 22 2c 20 20 20 27 76 27 2c 20 41 52  bose",   'v', AR
252a0 5f 53 57 49 54 43 48 5f 56 45 52 42 4f 53 45 2c  _SWITCH_VERBOSE,
252b0 20 20 20 30 20 7d 2c 0a 20 20 20 20 7b 20 22 66     0 },.    { "f
252c0 69 6c 65 22 2c 20 20 20 20 20 20 27 66 27 2c 20  ile",      'f', 
252d0 41 52 5f 53 57 49 54 43 48 5f 46 49 4c 45 2c 20  AR_SWITCH_FILE, 
252e0 20 20 20 20 20 31 20 7d 2c 0a 20 20 20 20 7b 20       1 },.    { 
252f0 22 61 70 70 65 6e 64 22 2c 20 20 20 20 27 61 27  "append",    'a'
25300 2c 20 41 52 5f 53 57 49 54 43 48 5f 41 50 50 45  , AR_SWITCH_APPE
25310 4e 44 2c 20 20 20 20 31 20 7d 2c 0a 20 20 20 20  ND,    1 },.    
25320 7b 20 22 64 69 72 65 63 74 6f 72 79 22 2c 20 27  { "directory", '
25330 43 27 2c 20 41 52 5f 53 57 49 54 43 48 5f 44 49  C', AR_SWITCH_DI
25340 52 45 43 54 4f 52 59 2c 20 31 20 7d 2c 0a 20 20  RECTORY, 1 },.  
25350 20 20 7b 20 22 64 72 79 72 75 6e 22 2c 20 20 20    { "dryrun",   
25360 20 27 6e 27 2c 20 41 52 5f 53 57 49 54 43 48 5f   'n', AR_SWITCH_
25370 44 52 59 52 55 4e 2c 20 20 20 20 30 20 7d 2c 0a  DRYRUN,    0 },.
25380 20 20 7d 3b 0a 20 20 69 6e 74 20 6e 53 77 69 74    };.  int nSwit
25390 63 68 20 3d 20 73 69 7a 65 6f 66 28 61 53 77 69  ch = sizeof(aSwi
253a0 74 63 68 29 20 2f 20 73 69 7a 65 6f 66 28 73 74  tch) / sizeof(st
253b0 72 75 63 74 20 41 72 53 77 69 74 63 68 29 3b 0a  ruct ArSwitch);.
253c0 20 20 73 74 72 75 63 74 20 41 72 53 77 69 74 63    struct ArSwitc
253d0 68 20 2a 70 45 6e 64 20 3d 20 26 61 53 77 69 74  h *pEnd = &aSwit
253e0 63 68 5b 6e 53 77 69 74 63 68 5d 3b 0a 0a 20 20  ch[nSwitch];..  
253f0 69 66 28 20 6e 41 72 67 3c 3d 31 20 29 7b 0a 20  if( nArg<=1 ){. 
25400 20 20 20 72 65 74 75 72 6e 20 61 72 55 73 61 67     return arUsag
25410 65 28 73 74 64 65 72 72 29 3b 0a 20 20 7d 65 6c  e(stderr);.  }el
25420 73 65 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20  se{.    char *z 
25430 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20  = azArg[1];.    
25440 6d 65 6d 73 65 74 28 70 41 72 2c 20 30 2c 20 73  memset(pAr, 0, s
25450 69 7a 65 6f 66 28 41 72 43 6f 6d 6d 61 6e 64 29  izeof(ArCommand)
25460 29 3b 0a 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d  );..    if( z[0]
25470 21 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 2f  !='-' ){.      /
25480 2a 20 54 72 61 64 69 74 69 6f 6e 61 6c 20 73 74  * Traditional st
25490 79 6c 65 20 5b 74 61 72 5d 20 69 6e 76 6f 63 61  yle [tar] invoca
254a0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69 6e  tion */.      in
254b0 74 20 69 3b 0a 20 20 20 20 20 20 69 6e 74 20 69  t i;.      int i
254c0 41 72 67 20 3d 20 32 3b 0a 20 20 20 20 20 20 66  Arg = 2;.      f
254d0 6f 72 28 69 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b  or(i=0; z[i]; i+
254e0 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73  +){.        cons
254f0 74 20 63 68 61 72 20 2a 7a 41 72 67 20 3d 20 30  t char *zArg = 0
25500 3b 0a 20 20 20 20 20 20 20 20 73 74 72 75 63 74  ;.        struct
25510 20 41 72 53 77 69 74 63 68 20 2a 70 4f 70 74 3b   ArSwitch *pOpt;
25520 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 4f 70  .        for(pOp
25530 74 3d 26 61 53 77 69 74 63 68 5b 30 5d 3b 20 70  t=&aSwitch[0]; p
25540 4f 70 74 3c 70 45 6e 64 3b 20 70 4f 70 74 2b 2b  Opt<pEnd; pOpt++
25550 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
25560 20 7a 5b 69 5d 3d 3d 70 4f 70 74 2d 3e 63 53 68   z[i]==pOpt->cSh
25570 6f 72 74 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ort ) break;.   
25580 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
25590 66 28 20 70 4f 70 74 3d 3d 70 45 6e 64 20 29 7b  f( pOpt==pEnd ){
255a0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
255b0 6e 20 61 72 45 72 72 6f 72 4d 73 67 28 22 75 6e  n arErrorMsg("un
255c0 72 65 63 6f 67 6e 69 7a 65 64 20 6f 70 74 69 6f  recognized optio
255d0 6e 3a 20 25 63 22 2c 20 7a 5b 69 5d 29 3b 0a 20  n: %c", z[i]);. 
255e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
255f0 20 69 66 28 20 70 4f 70 74 2d 3e 62 41 72 67 20   if( pOpt->bArg 
25600 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
25610 20 69 41 72 67 3e 3d 6e 41 72 67 20 29 7b 0a 20   iArg>=nArg ){. 
25620 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25630 6e 20 61 72 45 72 72 6f 72 4d 73 67 28 22 6f 70  n arErrorMsg("op
25640 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 61 6e  tion requires an
25650 20 61 72 67 75 6d 65 6e 74 3a 20 25 63 22 2c 7a   argument: %c",z
25660 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [i]);.          
25670 7d 0a 20 20 20 20 20 20 20 20 20 20 7a 41 72 67  }.          zArg
25680 20 3d 20 61 7a 41 72 67 5b 69 41 72 67 2b 2b 5d   = azArg[iArg++]
25690 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
256a0 20 20 20 20 69 66 28 20 61 72 50 72 6f 63 65 73      if( arProces
256b0 73 53 77 69 74 63 68 28 70 41 72 2c 20 70 4f 70  sSwitch(pAr, pOp
256c0 74 2d 3e 65 53 77 69 74 63 68 2c 20 7a 41 72 67  t->eSwitch, zArg
256d0 29 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ) ) return SQLIT
256e0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 7d  E_ERROR;.      }
256f0 0a 20 20 20 20 20 20 70 41 72 2d 3e 6e 41 72 67  .      pAr->nArg
25700 20 3d 20 6e 41 72 67 2d 69 41 72 67 3b 0a 20 20   = nArg-iArg;.  
25710 20 20 20 20 69 66 28 20 70 41 72 2d 3e 6e 41 72      if( pAr->nAr
25720 67 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70  g>0 ){.        p
25730 41 72 2d 3e 61 7a 41 72 67 20 3d 20 26 61 7a 41  Ar->azArg = &azA
25740 72 67 5b 69 41 72 67 5d 3b 0a 20 20 20 20 20 20  rg[iArg];.      
25750 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
25760 20 20 20 2f 2a 20 4e 6f 6e 2d 74 72 61 64 69 74     /* Non-tradit
25770 69 6f 6e 61 6c 20 69 6e 76 6f 63 61 74 69 6f 6e  ional invocation
25780 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 41   */.      int iA
25790 72 67 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 41  rg;.      for(iA
257a0 72 67 3d 31 3b 20 69 41 72 67 3c 6e 41 72 67 3b  rg=1; iArg<nArg;
257b0 20 69 41 72 67 2b 2b 29 7b 0a 20 20 20 20 20 20   iArg++){.      
257c0 20 20 69 6e 74 20 6e 3b 0a 20 20 20 20 20 20 20    int n;.       
257d0 20 7a 20 3d 20 61 7a 41 72 67 5b 69 41 72 67 5d   z = azArg[iArg]
257e0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b  ;.        if( z[
257f0 30 5d 21 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20  0]!='-' ){.     
25800 20 20 20 20 20 2f 2a 20 41 6c 6c 20 72 65 6d 61       /* All rema
25810 69 6e 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6c 69  ining command li
25820 6e 65 20 77 6f 72 64 73 20 61 72 65 20 63 6f 6d  ne words are com
25830 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 2e 20  mand arguments. 
25840 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 70 41 72  */.          pAr
25850 2d 3e 61 7a 41 72 67 20 3d 20 26 61 7a 41 72 67  ->azArg = &azArg
25860 5b 69 41 72 67 5d 3b 0a 20 20 20 20 20 20 20 20  [iArg];.        
25870 20 20 70 41 72 2d 3e 6e 41 72 67 20 3d 20 6e 41    pAr->nArg = nA
25880 72 67 2d 69 41 72 67 3b 0a 20 20 20 20 20 20 20  rg-iArg;.       
25890 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
258a0 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 20 3d 20    }.        n = 
258b0 73 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 0a 20 20  strlen30(z);..  
258c0 20 20 20 20 20 20 69 66 28 20 7a 5b 31 5d 21 3d        if( z[1]!=
258d0 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  '-' ){.         
258e0 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 20 20   int i;.        
258f0 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
25900 20 73 68 6f 72 74 20 6f 70 74 69 6f 6e 73 20 2a   short options *
25910 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  /.          for(
25920 69 3d 31 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=1; i<n; i++){.
25930 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
25940 74 20 63 68 61 72 20 2a 7a 41 72 67 20 3d 20 30  t char *zArg = 0
25950 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ;.            st
25960 72 75 63 74 20 41 72 53 77 69 74 63 68 20 2a 70  ruct ArSwitch *p
25970 4f 70 74 3b 0a 20 20 20 20 20 20 20 20 20 20 20  Opt;.           
25980 20 66 6f 72 28 70 4f 70 74 3d 26 61 53 77 69 74   for(pOpt=&aSwit
25990 63 68 5b 30 5d 3b 20 70 4f 70 74 3c 70 45 6e 64  ch[0]; pOpt<pEnd
259a0 3b 20 70 4f 70 74 2b 2b 29 7b 0a 20 20 20 20 20  ; pOpt++){.     
259b0 20 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69           if( z[i
259c0 5d 3d 3d 70 4f 70 74 2d 3e 63 53 68 6f 72 74 20  ]==pOpt->cShort 
259d0 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20  ) break;.       
259e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
259f0 20 20 20 69 66 28 20 70 4f 70 74 3d 3d 70 45 6e     if( pOpt==pEn
25a00 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  d ){.           
25a10 20 20 20 72 65 74 75 72 6e 20 61 72 45 72 72 6f     return arErro
25a20 72 4d 73 67 28 22 75 6e 72 65 63 6f 67 6e 69 7a  rMsg("unrecogniz
25a30 65 64 20 6f 70 74 69 6f 6e 3a 20 25 63 5c 6e 22  ed option: %c\n"
25a40 2c 20 7a 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  , z[i]);.       
25a50 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
25a60 20 20 20 69 66 28 20 70 4f 70 74 2d 3e 62 41 72     if( pOpt->bAr
25a70 67 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  g ){.           
25a80 20 20 20 69 66 28 20 69 3c 28 6e 2d 31 29 20 29     if( i<(n-1) )
25a90 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
25aa0 20 20 7a 41 72 67 20 3d 20 26 7a 5b 69 2b 31 5d    zArg = &z[i+1]
25ab0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
25ac0 20 20 69 20 3d 20 6e 3b 0a 20 20 20 20 20 20 20    i = n;.       
25ad0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
25ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
25af0 28 20 69 41 72 67 3e 3d 28 6e 41 72 67 2d 31 29  ( iArg>=(nArg-1)
25b00 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
25b10 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 45        return arE
25b20 72 72 6f 72 4d 73 67 28 22 6f 70 74 69 6f 6e 20  rrorMsg("option 
25b30 72 65 71 75 69 72 65 73 20 61 6e 20 61 72 67 75  requires an argu
25b40 6d 65 6e 74 3a 20 25 63 5c 6e 22 2c 7a 5b 69 5d  ment: %c\n",z[i]
25b50 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
25b60 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
25b70 20 20 20 20 20 7a 41 72 67 20 3d 20 61 7a 41 72       zArg = azAr
25b80 67 5b 2b 2b 69 41 72 67 5d 3b 0a 20 20 20 20 20  g[++iArg];.     
25b90 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
25ba0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
25bb0 20 20 20 20 20 69 66 28 20 61 72 50 72 6f 63 65       if( arProce
25bc0 73 73 53 77 69 74 63 68 28 70 41 72 2c 20 70 4f  ssSwitch(pAr, pO
25bd0 70 74 2d 3e 65 53 77 69 74 63 68 2c 20 7a 41 72  pt->eSwitch, zAr
25be0 67 29 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49  g) ) return SQLI
25bf0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
25c00 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
25c10 6c 73 65 20 69 66 28 20 7a 5b 32 5d 3d 3d 27 5c  lse if( z[2]=='\
25c20 30 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  0' ){.          
25c30 2f 2a 20 41 20 2d 2d 20 6f 70 74 69 6f 6e 2c 20  /* A -- option, 
25c40 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
25c50 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f  all remaining co
25c60 6d 6d 61 6e 64 20 6c 69 6e 65 20 77 6f 72 64 73  mmand line words
25c70 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 72  .          ** ar
25c80 65 20 63 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  e command argume
25c90 6e 74 73 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20  nts.  */.       
25ca0 20 20 20 70 41 72 2d 3e 61 7a 41 72 67 20 3d 20     pAr->azArg = 
25cb0 26 61 7a 41 72 67 5b 69 41 72 67 2b 31 5d 3b 0a  &azArg[iArg+1];.
25cc0 20 20 20 20 20 20 20 20 20 20 70 41 72 2d 3e 6e            pAr->n
25cd0 41 72 67 20 3d 20 6e 41 72 67 2d 69 41 72 67 2d  Arg = nArg-iArg-
25ce0 31 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  1;.          bre
25cf0 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ak;.        }els
25d00 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e{.          /* 
25d10 41 20 6c 6f 6e 67 20 6f 70 74 69 6f 6e 20 2a 2f  A long option */
25d20 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74  .          const
25d30 20 63 68 61 72 20 2a 7a 41 72 67 20 3d 20 30 3b   char *zArg = 0;
25d40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25d50 41 72 67 75 6d 65 6e 74 20 66 6f 72 20 6f 70 74  Argument for opt
25d60 69 6f 6e 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  ion, if any */. 
25d70 20 20 20 20 20 20 20 20 20 73 74 72 75 63 74 20           struct 
25d80 41 72 53 77 69 74 63 68 20 2a 70 4d 61 74 63 68  ArSwitch *pMatch
25d90 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4d 61   = 0;      /* Ma
25da0 74 63 68 69 6e 67 20 6f 70 74 69 6f 6e 20 2a 2f  tching option */
25db0 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 75 63  .          struc
25dc0 74 20 41 72 53 77 69 74 63 68 20 2a 70 4f 70 74  t ArSwitch *pOpt
25dd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
25de0 49 74 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20  Iterator */.    
25df0 20 20 20 20 20 20 66 6f 72 28 70 4f 70 74 3d 26        for(pOpt=&
25e00 61 53 77 69 74 63 68 5b 30 5d 3b 20 70 4f 70 74  aSwitch[0]; pOpt
25e10 3c 70 45 6e 64 3b 20 70 4f 70 74 2b 2b 29 7b 0a  <pEnd; pOpt++){.
25e20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
25e30 74 20 63 68 61 72 20 2a 7a 4c 6f 6e 67 20 3d 20  t char *zLong = 
25e40 70 4f 70 74 2d 3e 7a 4c 6f 6e 67 3b 0a 20 20 20  pOpt->zLong;.   
25e50 20 20 20 20 20 20 20 20 20 69 66 28 20 28 6e 2d           if( (n-
25e60 32 29 3c 3d 73 74 72 6c 65 6e 33 30 28 7a 4c 6f  2)<=strlen30(zLo
25e70 6e 67 29 20 26 26 20 30 3d 3d 6d 65 6d 63 6d 70  ng) && 0==memcmp
25e80 28 26 7a 5b 32 5d 2c 20 7a 4c 6f 6e 67 2c 20 6e  (&z[2], zLong, n
25e90 2d 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  -2) ){.         
25ea0 20 20 20 20 20 69 66 28 20 70 4d 61 74 63 68 20       if( pMatch 
25eb0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
25ec0 20 20 20 72 65 74 75 72 6e 20 61 72 45 72 72 6f     return arErro
25ed0 72 4d 73 67 28 22 61 6d 62 69 67 75 6f 75 73 20  rMsg("ambiguous 
25ee0 6f 70 74 69 6f 6e 3a 20 25 73 22 2c 7a 29 3b 0a  option: %s",z);.
25ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 65                }e
25f00 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
25f10 20 20 20 20 20 70 4d 61 74 63 68 20 3d 20 70 4f       pMatch = pO
25f20 70 74 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  pt;.            
25f30 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
25f40 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20  }.          }.. 
25f50 20 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 61           if( pMa
25f60 74 63 68 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  tch==0 ){.      
25f70 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 45        return arE
25f80 72 72 6f 72 4d 73 67 28 22 75 6e 72 65 63 6f 67  rrorMsg("unrecog
25f90 6e 69 7a 65 64 20 6f 70 74 69 6f 6e 3a 20 25 73  nized option: %s
25fa0 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 20  ", z);.         
25fb0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
25fc0 20 70 4d 61 74 63 68 2d 3e 62 41 72 67 20 29 7b   pMatch->bArg ){
25fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
25fe0 20 69 41 72 67 3e 3d 28 6e 41 72 67 2d 31 29 20   iArg>=(nArg-1) 
25ff0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
26000 20 72 65 74 75 72 6e 20 61 72 45 72 72 6f 72 4d   return arErrorM
26010 73 67 28 22 6f 70 74 69 6f 6e 20 72 65 71 75 69  sg("option requi
26020 72 65 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 3a  res an argument:
26030 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20   %s", z);.      
26040 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
26050 20 20 20 20 7a 41 72 67 20 3d 20 61 7a 41 72 67      zArg = azArg
26060 5b 2b 2b 69 41 72 67 5d 3b 0a 20 20 20 20 20 20  [++iArg];.      
26070 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
26080 69 66 28 20 61 72 50 72 6f 63 65 73 73 53 77 69  if( arProcessSwi
26090 74 63 68 28 70 41 72 2c 20 70 4d 61 74 63 68 2d  tch(pAr, pMatch-
260a0 3e 65 53 77 69 74 63 68 2c 20 7a 41 72 67 29 20  >eSwitch, zArg) 
260b0 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
260c0 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20 7d  ERROR;.        }
260d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
260e0 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 53 51 4c   }..  return SQL
260f0 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ITE_OK;.}../*.**
26100 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61   This function a
26110 73 73 75 6d 65 73 20 74 68 61 74 20 61 6c 6c 20  ssumes that all 
26120 61 72 67 75 6d 65 6e 74 73 20 77 69 74 68 69 6e  arguments within
26130 20 74 68 65 20 41 72 43 6f 6d 6d 61 6e 64 2e 61   the ArCommand.a
26140 7a 41 72 67 5b 5d 0a 2a 2a 20 61 72 72 61 79 20  zArg[].** array 
26150 72 65 66 65 72 20 74 6f 20 61 72 63 68 69 76 65  refer to archive
26160 20 6d 65 6d 62 65 72 73 2c 20 61 73 20 66 6f 72   members, as for
26170 20 74 68 65 20 2d 2d 65 78 74 72 61 63 74 20 6f   the --extract o
26180 72 20 2d 2d 6c 69 73 74 20 63 6f 6d 6d 61 6e 64  r --list command
26190 73 2e 20 0a 2a 2a 20 49 74 20 63 68 65 63 6b 73  s. .** It checks
261a0 20 74 68 61 74 20 65 61 63 68 20 6f 66 20 74 68   that each of th
261b0 65 6d 20 61 72 65 20 70 72 65 73 65 6e 74 2e 20  em are present. 
261c0 49 66 20 61 6e 79 20 73 70 65 63 69 66 69 65 64  If any specified
261d0 20 66 69 6c 65 20 69 73 20 6e 6f 74 0a 2a 2a 20   file is not.** 
261e0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 61  present in the a
261f0 72 63 68 69 76 65 2c 20 61 6e 20 65 72 72 6f 72  rchive, an error
26200 20 69 73 20 70 72 69 6e 74 65 64 20 74 6f 20 73   is printed to s
26210 74 64 65 72 72 20 61 6e 64 20 61 6e 20 65 72 72  tderr and an err
26220 6f 72 0a 2a 2a 20 63 6f 64 65 20 72 65 74 75 72  or.** code retur
26230 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
26240 69 66 20 61 6c 6c 20 73 70 65 63 69 66 69 65 64  if all specified
26250 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 70   arguments are p
26260 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
26270 20 61 72 63 68 69 76 65 2c 20 53 51 4c 49 54 45   archive, SQLITE
26280 5f 4f 4b 20 69 73 20 72 65 74 75 72 6e 65 64 2e  _OK is returned.
26290 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  .**.** This func
262a0 74 69 6f 6e 20 73 74 72 69 70 73 20 61 6e 79 20  tion strips any 
262b0 74 72 61 69 6c 69 6e 67 20 27 2f 27 20 63 68 61  trailing '/' cha
262c0 72 61 63 74 65 72 73 20 66 72 6f 6d 20 65 61 63  racters from eac
262d0 68 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 20 54  h argument..** T
262e0 68 69 73 20 69 73 20 63 6f 6e 73 69 73 74 65 6e  his is consisten
262f0 74 20 77 69 74 68 20 74 68 65 20 77 61 79 20 74  t with the way t
26300 68 65 20 5b 74 61 72 5d 20 63 6f 6d 6d 61 6e 64  he [tar] command
26310 20 73 65 65 6d 73 20 74 6f 20 77 6f 72 6b 20 6f   seems to work o
26320 6e 0a 2a 2a 20 4c 69 6e 75 78 2e 0a 2a 2f 0a 73  n.** Linux..*/.s
26330 74 61 74 69 63 20 69 6e 74 20 61 72 43 68 65 63  tatic int arChec
26340 6b 45 6e 74 72 69 65 73 28 41 72 43 6f 6d 6d 61  kEntries(ArComma
26350 6e 64 20 2a 70 41 72 29 7b 0a 20 20 69 6e 74 20  nd *pAr){.  int 
26360 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
26370 20 20 69 66 28 20 70 41 72 2d 3e 6e 41 72 67 20    if( pAr->nArg 
26380 29 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 3b  ){.    int i, j;
26390 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  .    sqlite3_stm
263a0 74 20 2a 70 54 65 73 74 20 3d 20 30 3b 0a 0a 20  t *pTest = 0;.. 
263b0 20 20 20 73 68 65 6c 6c 50 72 65 70 61 72 65 50     shellPrepareP
263c0 72 69 6e 74 66 28 70 41 72 2d 3e 64 62 2c 20 26  rintf(pAr->db, &
263d0 72 63 2c 20 26 70 54 65 73 74 2c 0a 20 20 20 20  rc, &pTest,.    
263e0 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
263f0 20 46 52 4f 4d 20 25 73 20 57 48 45 52 45 20 6e   FROM %s WHERE n
26400 61 6d 65 3d 24 6e 61 6d 65 22 2c 20 0a 20 20 20  ame=$name", .   
26410 20 20 20 20 20 70 41 72 2d 3e 7a 53 72 63 54 61       pAr->zSrcTa
26420 62 6c 65 0a 20 20 20 20 29 3b 0a 20 20 20 20 6a  ble.    );.    j
26430 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
26440 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
26450 70 54 65 73 74 2c 20 22 24 6e 61 6d 65 22 29 3b  pTest, "$name");
26460 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
26470 70 41 72 2d 3e 6e 41 72 67 20 26 26 20 72 63 3d  pAr->nArg && rc=
26480 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 69 2b 2b 29  =SQLITE_OK; i++)
26490 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 20  {.      char *z 
264a0 3d 20 70 41 72 2d 3e 61 7a 41 72 67 5b 69 5d 3b  = pAr->azArg[i];
264b0 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 73  .      int n = s
264c0 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20 20 20 20  trlen30(z);.    
264d0 20 20 69 6e 74 20 62 4f 6b 20 3d 20 30 3b 0a 20    int bOk = 0;. 
264e0 20 20 20 20 20 77 68 69 6c 65 28 20 6e 3e 30 20       while( n>0 
264f0 26 26 20 7a 5b 6e 2d 31 5d 3d 3d 27 2f 27 20 29  && z[n-1]=='/' )
26500 20 6e 2d 2d 3b 0a 20 20 20 20 20 20 7a 5b 6e 5d   n--;.      z[n]
26510 20 3d 20 27 5c 30 27 3b 0a 20 20 20 20 20 20 73   = '\0';.      s
26520 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
26530 28 70 54 65 73 74 2c 20 6a 2c 20 7a 2c 20 2d 31  (pTest, j, z, -1
26540 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
26550 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49  ;.      if( SQLI
26560 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f  TE_ROW==sqlite3_
26570 73 74 65 70 28 70 54 65 73 74 29 20 29 7b 0a 20  step(pTest) ){. 
26580 20 20 20 20 20 20 20 62 4f 6b 20 3d 20 31 3b 0a         bOk = 1;.
26590 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 68        }.      sh
265a0 65 6c 6c 52 65 73 65 74 28 26 72 63 2c 20 70 54  ellReset(&rc, pT
265b0 65 73 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  est);.      if( 
265c0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
265d0 20 62 4f 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20   bOk==0 ){.     
265e0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
265f0 74 64 65 72 72 2c 20 22 6e 6f 74 20 66 6f 75 6e  tderr, "not foun
26600 64 20 69 6e 20 61 72 63 68 69 76 65 3a 20 25 73  d in archive: %s
26610 5c 6e 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20  \n", z);.       
26620 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
26630 4f 52 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  OR;.      }.    
26640 7d 0a 20 20 20 20 73 68 65 6c 6c 46 69 6e 61 6c  }.    shellFinal
26650 69 7a 65 28 26 72 63 2c 20 70 54 65 73 74 29 3b  ize(&rc, pTest);
26660 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
26670 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 6d 61  ;.}../*.** Forma
26680 74 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  t a WHERE clause
26690 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
266a0 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 22 73  d against the "s
266b0 71 6c 61 72 22 20 74 61 62 6c 65 20 74 6f 0a 2a  qlar" table to.*
266c0 2a 20 69 64 65 6e 74 69 66 79 20 61 6c 6c 20 61  * identify all a
266d0 72 63 68 69 76 65 20 6d 65 6d 62 65 72 73 20 74  rchive members t
266e0 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 63 6f  hat match the co
266f0 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
26700 68 65 6c 64 0a 2a 2a 20 69 6e 20 28 2a 70 41 72  held.** in (*pAr
26710 29 2e 20 4c 65 61 76 65 20 74 68 69 73 20 57 48  ). Leave this WH
26720 45 52 45 20 63 6c 61 75 73 65 20 69 6e 20 28 2a  ERE clause in (*
26730 70 7a 57 68 65 72 65 29 20 62 65 66 6f 72 65 20  pzWhere) before 
26740 72 65 74 75 72 6e 69 6e 67 2e 0a 2a 2a 20 54 68  returning..** Th
26750 65 20 63 61 6c 6c 65 72 20 69 73 20 72 65 73 70  e caller is resp
26760 6f 6e 73 69 62 6c 65 20 66 6f 72 20 65 76 65 6e  onsible for even
26770 74 75 61 6c 6c 79 20 63 61 6c 6c 69 6e 67 20 73  tually calling s
26780 71 6c 69 74 65 33 5f 66 72 65 65 28 29 20 6f 6e  qlite3_free() on
26790 0a 2a 2a 20 61 6e 79 20 6e 6f 6e 2d 4e 55 4c 4c  .** any non-NULL
267a0 20 28 2a 70 7a 57 68 65 72 65 29 20 76 61 6c 75   (*pzWhere) valu
267b0 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  e..*/.static voi
267c0 64 20 61 72 57 68 65 72 65 43 6c 61 75 73 65 28  d arWhereClause(
267d0 0a 20 20 69 6e 74 20 2a 70 52 63 2c 20 0a 20 20  .  int *pRc, .  
267e0 41 72 43 6f 6d 6d 61 6e 64 20 2a 70 41 72 2c 20  ArCommand *pAr, 
267f0 0a 20 20 63 68 61 72 20 2a 2a 70 7a 57 68 65 72  .  char **pzWher
26800 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
26810 20 20 20 2f 2a 20 4f 55 54 3a 20 4e 65 77 20 57     /* OUT: New W
26820 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 29  HERE clause */.)
26830 7b 0a 20 20 63 68 61 72 20 2a 7a 57 68 65 72 65  {.  char *zWhere
26840 20 3d 20 30 3b 0a 20 20 69 66 28 20 2a 70 52 63   = 0;.  if( *pRc
26850 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
26860 20 20 20 69 66 28 20 70 41 72 2d 3e 6e 41 72 67     if( pAr->nArg
26870 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 7a 57 68  ==0 ){.      zWh
26880 65 72 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ere = sqlite3_mp
26890 72 69 6e 74 66 28 22 31 22 29 3b 0a 20 20 20 20  rintf("1");.    
268a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
268b0 20 69 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20   i;.      const 
268c0 63 68 61 72 20 2a 7a 53 65 70 20 3d 20 22 22 3b  char *zSep = "";
268d0 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
268e0 69 3c 70 41 72 2d 3e 6e 41 72 67 3b 20 69 2b 2b  i<pAr->nArg; i++
268f0 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74  ){.        const
26900 20 63 68 61 72 20 2a 7a 20 3d 20 70 41 72 2d 3e   char *z = pAr->
26910 61 7a 41 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20  azArg[i];.      
26920 20 20 7a 57 68 65 72 65 20 3d 20 73 71 6c 69 74    zWhere = sqlit
26930 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20  e3_mprintf(.    
26940 20 20 20 20 20 20 22 25 7a 25 73 20 6e 61 6d 65        "%z%s name
26950 20 3d 20 27 25 71 27 20 4f 52 20 73 75 62 73 74   = '%q' OR subst
26960 72 28 6e 61 6d 65 2c 31 2c 25 64 29 20 3d 20 27  r(name,1,%d) = '
26970 25 71 2f 27 22 2c 20 0a 20 20 20 20 20 20 20 20  %q/'", .        
26980 20 20 7a 57 68 65 72 65 2c 20 7a 53 65 70 2c 20    zWhere, zSep, 
26990 7a 2c 20 73 74 72 6c 65 6e 33 30 28 7a 29 2b 31  z, strlen30(z)+1
269a0 2c 20 7a 0a 20 20 20 20 20 20 20 20 29 3b 0a 20  , z.        );. 
269b0 20 20 20 20 20 20 20 69 66 28 20 7a 57 68 65 72         if( zWher
269c0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  e==0 ){.        
269d0 20 20 2a 70 52 63 20 3d 20 53 51 4c 49 54 45 5f    *pRc = SQLITE_
269e0 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 20 20 20  NOMEM;.         
269f0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
26a00 7d 0a 20 20 20 20 20 20 20 20 7a 53 65 70 20 3d  }.        zSep =
26a10 20 22 20 4f 52 20 22 3b 0a 20 20 20 20 20 20 7d   " OR ";.      }
26a20 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2a 70 7a  .    }.  }.  *pz
26a30 57 68 65 72 65 20 3d 20 7a 57 68 65 72 65 3b 0a  Where = zWhere;.
26a40 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65  }../*.** Impleme
26a50 6e 74 61 74 69 6f 6e 20 6f 66 20 2e 61 72 20 22  ntation of .ar "
26a60 6c 69 73 54 22 20 63 6f 6d 6d 61 6e 64 2e 20 0a  lisT" command. .
26a70 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 61 72  */.static int ar
26a80 4c 69 73 74 43 6f 6d 6d 61 6e 64 28 41 72 43 6f  ListCommand(ArCo
26a90 6d 6d 61 6e 64 20 2a 70 41 72 29 7b 0a 20 20 63  mmand *pAr){.  c
26aa0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 20  onst char *zSql 
26ab0 3d 20 22 53 45 4c 45 43 54 20 25 73 20 46 52 4f  = "SELECT %s FRO
26ac0 4d 20 25 73 20 57 48 45 52 45 20 25 73 22 3b 20  M %s WHERE %s"; 
26ad0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  .  const char *a
26ae0 7a 43 6f 6c 73 5b 5d 20 3d 20 7b 0a 20 20 20 20  zCols[] = {.    
26af0 22 6e 61 6d 65 22 2c 0a 20 20 20 20 22 6c 73 6d  "name",.    "lsm
26b00 6f 64 65 28 6d 6f 64 65 29 2c 20 73 7a 2c 20 64  ode(mode), sz, d
26b10 61 74 65 74 69 6d 65 28 6d 74 69 6d 65 2c 20 27  atetime(mtime, '
26b20 75 6e 69 78 65 70 6f 63 68 27 29 2c 20 6e 61 6d  unixepoch'), nam
26b30 65 22 0a 20 20 7d 3b 0a 0a 20 20 63 68 61 72 20  e".  };..  char 
26b40 2a 7a 57 68 65 72 65 20 3d 20 30 3b 0a 20 20 73  *zWhere = 0;.  s
26b50 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 71  qlite3_stmt *pSq
26b60 6c 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b  l = 0;.  int rc;
26b70 0a 0a 20 20 72 63 20 3d 20 61 72 43 68 65 63 6b  ..  rc = arCheck
26b80 45 6e 74 72 69 65 73 28 70 41 72 29 3b 0a 20 20  Entries(pAr);.  
26b90 61 72 57 68 65 72 65 43 6c 61 75 73 65 28 26 72  arWhereClause(&r
26ba0 63 2c 20 70 41 72 2c 20 26 7a 57 68 65 72 65 29  c, pAr, &zWhere)
26bb0 3b 0a 0a 20 20 73 68 65 6c 6c 50 72 65 70 61 72  ;..  shellPrepar
26bc0 65 50 72 69 6e 74 66 28 70 41 72 2d 3e 64 62 2c  ePrintf(pAr->db,
26bd0 20 26 72 63 2c 20 26 70 53 71 6c 2c 20 7a 53 71   &rc, &pSql, zSq
26be0 6c 2c 20 61 7a 43 6f 6c 73 5b 70 41 72 2d 3e 62  l, azCols[pAr->b
26bf0 56 65 72 62 6f 73 65 5d 2c 0a 20 20 20 20 20 20  Verbose],.      
26c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
26c10 41 72 2d 3e 7a 53 72 63 54 61 62 6c 65 2c 20 7a  Ar->zSrcTable, z
26c20 57 68 65 72 65 29 3b 0a 20 20 69 66 28 20 70 41  Where);.  if( pA
26c30 72 2d 3e 62 44 72 79 52 75 6e 20 29 7b 0a 20 20  r->bDryRun ){.  
26c40 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41    utf8_printf(pA
26c50 72 2d 3e 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e  r->p->out, "%s\n
26c60 22 2c 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 70  ", sqlite3_sql(p
26c70 53 71 6c 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Sql));.  }else{.
26c80 20 20 20 20 77 68 69 6c 65 28 20 72 63 3d 3d 53      while( rc==S
26c90 51 4c 49 54 45 5f 4f 4b 20 26 26 20 53 51 4c 49  QLITE_OK && SQLI
26ca0 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f  TE_ROW==sqlite3_
26cb0 73 74 65 70 28 70 53 71 6c 29 20 29 7b 0a 20 20  step(pSql) ){.  
26cc0 20 20 20 20 69 66 28 20 70 41 72 2d 3e 62 56 65      if( pAr->bVe
26cd0 72 62 6f 73 65 20 29 7b 0a 20 20 20 20 20 20 20  rbose ){.       
26ce0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41 72   utf8_printf(pAr
26cf0 2d 3e 70 2d 3e 6f 75 74 2c 20 22 25 73 20 25 20  ->p->out, "%s % 
26d00 31 30 64 20 20 25 73 20 20 25 73 5c 6e 22 2c 0a  10d  %s  %s\n",.
26d10 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
26d20 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
26d30 70 53 71 6c 2c 20 30 29 2c 0a 20 20 20 20 20 20  pSql, 0),.      
26d40 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f        sqlite3_co
26d50 6c 75 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 31  lumn_int(pSql, 1
26d60 29 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ), .            
26d70 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
26d80 65 78 74 28 70 53 71 6c 2c 20 32 29 2c 0a 20 20  ext(pSql, 2),.  
26d90 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
26da0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
26db0 71 6c 2c 20 33 29 0a 20 20 20 20 20 20 20 20 29  ql, 3).        )
26dc0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
26dd0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
26de0 74 66 28 70 41 72 2d 3e 70 2d 3e 6f 75 74 2c 20  tf(pAr->p->out, 
26df0 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f  "%s\n", sqlite3_
26e00 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c  column_text(pSql
26e10 2c 20 30 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20  , 0));.      }. 
26e20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 68 65 6c 6c     }.  }.  shell
26e30 46 69 6e 61 6c 69 7a 65 28 26 72 63 2c 20 70 53  Finalize(&rc, pS
26e40 71 6c 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  ql);.  return rc
26e50 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c  ;.}.../*.** Impl
26e60 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 2e 61  ementation of .a
26e70 72 20 22 65 58 74 72 61 63 74 22 20 63 6f 6d 6d  r "eXtract" comm
26e80 61 6e 64 2e 20 0a 2a 2f 0a 73 74 61 74 69 63 20  and. .*/.static 
26e90 69 6e 74 20 61 72 45 78 74 72 61 63 74 43 6f 6d  int arExtractCom
26ea0 6d 61 6e 64 28 41 72 43 6f 6d 6d 61 6e 64 20 2a  mand(ArCommand *
26eb0 70 41 72 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68  pAr){.  const ch
26ec0 61 72 20 2a 7a 53 71 6c 31 20 3d 20 0a 20 20 20  ar *zSql1 = .   
26ed0 20 22 53 45 4c 45 43 54 20 22 0a 20 20 20 20 22   "SELECT ".    "
26ee0 20 28 24 64 69 72 20 7c 7c 20 6e 61 6d 65 29 2c   ($dir || name),
26ef0 22 0a 20 20 20 20 22 20 77 72 69 74 65 66 69 6c  ".    " writefil
26f00 65 28 28 24 64 69 72 20 7c 7c 20 6e 61 6d 65 29  e(($dir || name)
26f10 2c 20 25 73 2c 20 6d 6f 64 65 2c 20 6d 74 69 6d  , %s, mode, mtim
26f20 65 29 20 22 0a 20 20 20 20 22 46 52 4f 4d 20 25  e) ".    "FROM %
26f30 73 20 57 48 45 52 45 20 28 25 73 29 20 41 4e 44  s WHERE (%s) AND
26f40 20 28 64 61 74 61 20 49 53 20 4e 55 4c 4c 20 4f   (data IS NULL O
26f50 52 20 24 64 69 72 4f 6e 6c 79 20 3d 20 30 29 22  R $dirOnly = 0)"
26f60 3b 0a 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ;..  const char 
26f70 2a 61 7a 45 78 74 72 61 41 72 67 5b 5d 20 3d 20  *azExtraArg[] = 
26f80 7b 20 0a 20 20 20 20 22 73 71 6c 61 72 5f 75 6e  { .    "sqlar_un
26f90 63 6f 6d 70 72 65 73 73 28 64 61 74 61 2c 20 73  compress(data, s
26fa0 7a 29 22 2c 0a 20 20 20 20 22 64 61 74 61 22 0a  z)",.    "data".
26fb0 20 20 7d 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f    };..  sqlite3_
26fc0 73 74 6d 74 20 2a 70 53 71 6c 20 3d 20 30 3b 0a  stmt *pSql = 0;.
26fd0 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
26fe0 45 5f 4f 4b 3b 0a 20 20 63 68 61 72 20 2a 7a 44  E_OK;.  char *zD
26ff0 69 72 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a  ir = 0;.  char *
27000 7a 57 68 65 72 65 20 3d 20 30 3b 0a 20 20 69 6e  zWhere = 0;.  in
27010 74 20 69 2c 20 6a 3b 0a 0a 20 20 2f 2a 20 49 66  t i, j;..  /* If
27020 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 73   arguments are s
27030 70 65 63 69 66 69 65 64 2c 20 63 68 65 63 6b 20  pecified, check 
27040 74 68 61 74 20 74 68 65 79 20 61 63 74 75 61 6c  that they actual
27050 6c 79 20 65 78 69 73 74 20 77 69 74 68 69 6e 0a  ly exist within.
27060 20 20 2a 2a 20 74 68 65 20 61 72 63 68 69 76 65    ** the archive
27070 20 62 65 66 6f 72 65 20 70 72 6f 63 65 65 64 69   before proceedi
27080 6e 67 2e 20 41 6e 64 20 66 6f 72 6d 75 6c 61 74  ng. And formulat
27090 65 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  e a WHERE clause
270a0 20 74 6f 0a 20 20 2a 2a 20 6d 61 74 63 68 20 74   to.  ** match t
270b0 68 65 6d 2e 20 20 2a 2f 0a 20 20 72 63 20 3d 20  hem.  */.  rc = 
270c0 61 72 43 68 65 63 6b 45 6e 74 72 69 65 73 28 70  arCheckEntries(p
270d0 41 72 29 3b 0a 20 20 61 72 57 68 65 72 65 43 6c  Ar);.  arWhereCl
270e0 61 75 73 65 28 26 72 63 2c 20 70 41 72 2c 20 26  ause(&rc, pAr, &
270f0 7a 57 68 65 72 65 29 3b 0a 0a 20 20 69 66 28 20  zWhere);..  if( 
27100 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
27110 0a 20 20 20 20 69 66 28 20 70 41 72 2d 3e 7a 44  .    if( pAr->zD
27120 69 72 20 29 7b 0a 20 20 20 20 20 20 7a 44 69 72  ir ){.      zDir
27130 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
27140 74 66 28 22 25 73 2f 22 2c 20 70 41 72 2d 3e 7a  tf("%s/", pAr->z
27150 44 69 72 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Dir);.    }else{
27160 0a 20 20 20 20 20 20 7a 44 69 72 20 3d 20 73 71  .      zDir = sq
27170 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 22  lite3_mprintf(""
27180 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
27190 20 7a 44 69 72 3d 3d 30 20 29 20 72 63 20 3d 20   zDir==0 ) rc = 
271a0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
271b0 7d 0a 0a 20 20 73 68 65 6c 6c 50 72 65 70 61 72  }..  shellPrepar
271c0 65 50 72 69 6e 74 66 28 70 41 72 2d 3e 64 62 2c  ePrintf(pAr->db,
271d0 20 26 72 63 2c 20 26 70 53 71 6c 2c 20 7a 53 71   &rc, &pSql, zSq
271e0 6c 31 2c 20 0a 20 20 20 20 20 20 61 7a 45 78 74  l1, .      azExt
271f0 72 61 41 72 67 5b 70 41 72 2d 3e 62 5a 69 70 5d  raArg[pAr->bZip]
27200 2c 20 70 41 72 2d 3e 7a 53 72 63 54 61 62 6c 65  , pAr->zSrcTable
27210 2c 20 7a 57 68 65 72 65 0a 20 20 29 3b 0a 0a 20  , zWhere.  );.. 
27220 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
27230 4f 4b 20 29 7b 0a 20 20 20 20 6a 20 3d 20 73 71  OK ){.    j = sq
27240 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
27250 65 74 65 72 5f 69 6e 64 65 78 28 70 53 71 6c 2c  eter_index(pSql,
27260 20 22 24 64 69 72 22 29 3b 0a 20 20 20 20 73 71   "$dir");.    sq
27270 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
27280 70 53 71 6c 2c 20 6a 2c 20 7a 44 69 72 2c 20 2d  pSql, j, zDir, -
27290 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  1, SQLITE_STATIC
272a0 29 3b 0a 0a 20 20 20 20 2f 2a 20 52 75 6e 20 74  );..    /* Run t
272b0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
272c0 65 6e 74 20 74 77 69 63 65 2e 20 54 68 65 20 66  ent twice. The f
272d0 69 72 73 74 20 74 69 6d 65 2c 20 77 72 69 74 65  irst time, write
272e0 66 69 6c 65 28 29 20 69 73 20 63 61 6c 6c 65 64  file() is called
272f0 0a 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20  .    ** for all 
27300 61 72 63 68 69 76 65 20 6d 65 6d 62 65 72 73 20  archive members 
27310 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 65  that should be e
27320 78 74 72 61 63 74 65 64 2e 20 54 68 65 20 73 65  xtracted. The se
27330 63 6f 6e 64 20 74 69 6d 65 2c 0a 20 20 20 20 2a  cond time,.    *
27340 2a 20 6f 6e 6c 79 20 66 6f 72 20 74 68 65 20 64  * only for the d
27350 69 72 65 63 74 6f 72 69 65 73 2e 20 54 68 69 73  irectories. This
27360 20 69 73 20 62 65 63 61 75 73 65 20 74 68 65 20   is because the 
27370 74 69 6d 65 73 74 61 6d 70 73 20 66 6f 72 0a 20  timestamps for. 
27380 20 20 20 2a 2a 20 65 78 74 72 61 63 74 65 64 20     ** extracted 
27390 64 69 72 65 63 74 6f 72 69 65 73 20 6d 75 73 74  directories must
273a0 20 62 65 20 72 65 73 65 74 20 61 66 74 65 72 20   be reset after 
273b0 74 68 65 79 20 61 72 65 20 70 6f 70 75 6c 61 74  they are populat
273c0 65 64 20 28 61 73 0a 20 20 20 20 2a 2a 20 70 6f  ed (as.    ** po
273d0 70 75 6c 61 74 69 6e 67 20 74 68 65 6d 20 63 68  pulating them ch
273e0 61 6e 67 65 73 20 74 68 65 20 74 69 6d 65 73 74  anges the timest
273f0 61 6d 70 29 2e 20 20 2a 2f 0a 20 20 20 20 66 6f  amp).  */.    fo
27400 72 28 69 3d 30 3b 20 69 3c 32 3b 20 69 2b 2b 29  r(i=0; i<2; i++)
27410 7b 0a 20 20 20 20 20 20 6a 20 3d 20 73 71 6c 69  {.      j = sqli
27420 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
27430 65 72 5f 69 6e 64 65 78 28 70 53 71 6c 2c 20 22  er_index(pSql, "
27440 24 64 69 72 4f 6e 6c 79 22 29 3b 0a 20 20 20 20  $dirOnly");.    
27450 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
27460 6e 74 28 70 53 71 6c 2c 20 6a 2c 20 69 29 3b 0a  nt(pSql, j, i);.
27470 20 20 20 20 20 20 69 66 28 20 70 41 72 2d 3e 62        if( pAr->b
27480 44 72 79 52 75 6e 20 29 7b 0a 20 20 20 20 20 20  DryRun ){.      
27490 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41    utf8_printf(pA
274a0 72 2d 3e 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e  r->p->out, "%s\n
274b0 22 2c 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 70  ", sqlite3_sql(p
274c0 53 71 6c 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c  Sql));.      }el
274d0 73 65 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c  se{.        whil
274e0 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  e( rc==SQLITE_OK
274f0 20 26 26 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d   && SQLITE_ROW==
27500 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 71  sqlite3_step(pSq
27510 6c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  l) ){.          
27520 69 66 28 20 69 3d 3d 30 20 26 26 20 70 41 72 2d  if( i==0 && pAr-
27530 3e 62 56 65 72 62 6f 73 65 20 29 7b 0a 20 20 20  >bVerbose ){.   
27540 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
27550 69 6e 74 66 28 70 41 72 2d 3e 70 2d 3e 6f 75 74  intf(pAr->p->out
27560 2c 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65  , "%s\n", sqlite
27570 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
27580 71 6c 2c 20 30 29 29 3b 0a 20 20 20 20 20 20 20  ql, 0));.       
27590 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
275a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 68 65       }.      she
275b0 6c 6c 52 65 73 65 74 28 26 72 63 2c 20 70 53 71  llReset(&rc, pSq
275c0 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 68  l);.    }.    sh
275d0 65 6c 6c 46 69 6e 61 6c 69 7a 65 28 26 72 63 2c  ellFinalize(&rc,
275e0 20 70 53 71 6c 29 3b 0a 20 20 7d 0a 0a 20 20 73   pSql);.  }..  s
275f0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 44 69 72  qlite3_free(zDir
27600 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
27610 65 28 7a 57 68 65 72 65 29 3b 0a 20 20 72 65 74  e(zWhere);.  ret
27620 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
27630 20 52 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61   Run the SQL sta
27640 74 65 6d 65 6e 74 20 69 6e 20 7a 53 71 6c 2e 20  tement in zSql. 
27650 20 4f 72 20 69 66 20 64 6f 69 6e 67 20 61 20 2d   Or if doing a -
27660 2d 64 72 79 72 75 6e 2c 20 6d 65 72 65 6c 79 20  -dryrun, merely 
27670 70 72 69 6e 74 20 69 74 20 6f 75 74 2e 0a 2a 2f  print it out..*/
27680 0a 73 74 61 74 69 63 20 69 6e 74 20 61 72 45 78  .static int arEx
27690 65 63 53 71 6c 28 41 72 43 6f 6d 6d 61 6e 64 20  ecSql(ArCommand 
276a0 2a 70 41 72 2c 20 63 6f 6e 73 74 20 63 68 61 72  *pAr, const char
276b0 20 2a 7a 53 71 6c 29 7b 0a 20 20 69 6e 74 20 72   *zSql){.  int r
276c0 63 3b 0a 20 20 69 66 28 20 70 41 72 2d 3e 62 44  c;.  if( pAr->bD
276d0 72 79 52 75 6e 20 29 7b 0a 20 20 20 20 75 74 66  ryRun ){.    utf
276e0 38 5f 70 72 69 6e 74 66 28 70 41 72 2d 3e 70 2d  8_printf(pAr->p-
276f0 3e 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 53  >out, "%s\n", zS
27700 71 6c 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  ql);.    rc = SQ
27710 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65  LITE_OK;.  }else
27720 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72  {.    char *zErr
27730 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73   = 0;.    rc = s
27740 71 6c 69 74 65 33 5f 65 78 65 63 28 70 41 72 2d  qlite3_exec(pAr-
27750 3e 64 62 2c 20 7a 53 71 6c 2c 20 30 2c 20 30 2c  >db, zSql, 0, 0,
27760 20 26 7a 45 72 72 29 3b 0a 20 20 20 20 69 66 28   &zErr);.    if(
27770 20 7a 45 72 72 20 29 7b 0a 20 20 20 20 20 20 75   zErr ){.      u
27780 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 6f 75  tf8_printf(stdou
27790 74 2c 20 22 45 52 52 4f 52 3a 20 25 73 5c 6e 22  t, "ERROR: %s\n"
277a0 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 73  , zErr);.      s
277b0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
277c0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
277d0 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a  eturn rc;.}.../*
277e0 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69  .** Implementati
277f0 6f 6e 20 6f 66 20 2e 61 72 20 22 63 72 65 61 74  on of .ar "creat
27800 65 22 20 61 6e 64 20 22 75 70 64 61 74 65 22 20  e" and "update" 
27810 63 6f 6d 6d 61 6e 64 73 2e 0a 2a 2a 0a 2a 2a 20  commands..**.** 
27820 43 72 65 61 74 65 20 74 68 65 20 22 73 71 6c 61  Create the "sqla
27830 72 22 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  r" table in the 
27840 64 61 74 61 62 61 73 65 20 69 66 20 69 74 20 64  database if it d
27850 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20  oes not already 
27860 65 78 69 73 74 2e 0a 2a 2a 20 54 68 65 6e 20 61  exist..** Then a
27870 64 64 20 65 61 63 68 20 66 69 6c 65 20 69 6e 20  dd each file in 
27880 74 68 65 20 61 7a 46 69 6c 65 5b 5d 20 61 72 72  the azFile[] arr
27890 61 79 20 74 6f 20 74 68 65 20 61 72 63 68 69 76  ay to the archiv
278a0 65 2e 20 44 69 72 65 63 74 6f 72 69 65 73 0a 2a  e. Directories.*
278b0 2a 20 61 72 65 20 61 64 64 65 64 20 72 65 63 75  * are added recu
278c0 72 73 69 76 65 6c 79 2e 20 49 66 20 61 72 67 75  rsively. If argu
278d0 6d 65 6e 74 20 62 56 65 72 62 6f 73 65 20 69 73  ment bVerbose is
278e0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 61 20 6d 65 73   non-zero, a mes
278f0 73 61 67 65 20 69 73 0a 2a 2a 20 70 72 69 6e 74  sage is.** print
27900 65 64 20 6f 6e 20 73 74 64 6f 75 74 20 66 6f 72  ed on stdout for
27910 20 65 61 63 68 20 66 69 6c 65 20 61 72 63 68 69   each file archi
27920 76 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ved..**.** The c
27930 72 65 61 74 65 20 63 6f 6d 6d 61 6e 64 20 69 73  reate command is
27940 20 74 68 65 20 73 61 6d 65 20 61 73 20 75 70 64   the same as upd
27950 61 74 65 2c 20 65 78 63 65 70 74 20 74 68 61 74  ate, except that
27960 20 69 74 20 64 72 6f 70 73 0a 2a 2a 20 61 6e 79   it drops.** any
27970 20 65 78 69 73 74 69 6e 67 20 22 73 71 6c 61 72   existing "sqlar
27980 22 20 74 61 62 6c 65 20 62 65 66 6f 72 65 20 62  " table before b
27990 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 73 74 61  eginning..*/.sta
279a0 74 69 63 20 69 6e 74 20 61 72 43 72 65 61 74 65  tic int arCreate
279b0 4f 72 55 70 64 61 74 65 43 6f 6d 6d 61 6e 64 28  OrUpdateCommand(
279c0 0a 20 20 41 72 43 6f 6d 6d 61 6e 64 20 2a 70 41  .  ArCommand *pA
279d0 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
279e0 20 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72     /* Command ar
279f0 67 75 6d 65 6e 74 73 20 61 6e 64 20 6f 70 74 69  guments and opti
27a00 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 70  ons */.  int bUp
27a10 64 61 74 65 20 20 20 20 20 20 20 20 20 20 20 20  date            
27a20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65           /* true
27a30 20 66 6f 72 20 61 20 2d 2d 63 72 65 61 74 65 2e   for a --create.
27a40 20 20 66 61 6c 73 65 20 66 6f 72 20 2d 2d 75 70    false for --up
27a50 64 61 74 65 20 2a 2f 0a 29 7b 0a 20 20 63 6f 6e  date */.){.  con
27a60 73 74 20 63 68 61 72 20 2a 7a 43 72 65 61 74 65  st char *zCreate
27a70 20 3d 20 0a 20 20 20 20 20 20 22 43 52 45 41 54   = .      "CREAT
27a80 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45  E TABLE IF NOT E
27a90 58 49 53 54 53 20 73 71 6c 61 72 28 5c 6e 22 0a  XISTS sqlar(\n".
27aa0 20 20 20 20 20 20 22 20 20 6e 61 6d 65 20 54 45        "  name TE
27ab0 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  XT PRIMARY KEY, 
27ac0 20 2d 2d 20 6e 61 6d 65 20 6f 66 20 74 68 65 20   -- name of the 
27ad0 66 69 6c 65 5c 6e 22 0a 20 20 20 20 20 20 22 20  file\n".      " 
27ae0 20 6d 6f 64 65 20 49 4e 54 2c 20 20 20 20 20 20   mode INT,      
27af0 20 20 20 20 20 20 20 20 20 2d 2d 20 61 63 63 65           -- acce
27b00 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 73 5c 6e  ss permissions\n
27b10 22 0a 20 20 20 20 20 20 22 20 20 6d 74 69 6d 65  ".      "  mtime
27b20 20 49 4e 54 2c 20 20 20 20 20 20 20 20 20 20 20   INT,           
27b30 20 20 20 2d 2d 20 6c 61 73 74 20 6d 6f 64 69 66     -- last modif
27b40 69 63 61 74 69 6f 6e 20 74 69 6d 65 5c 6e 22 0a  ication time\n".
27b50 20 20 20 20 20 20 22 20 20 73 7a 20 49 4e 54 2c        "  sz INT,
27b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b70 20 2d 2d 20 6f 72 69 67 69 6e 61 6c 20 66 69 6c   -- original fil
27b80 65 20 73 69 7a 65 5c 6e 22 0a 20 20 20 20 20 20  e size\n".      
27b90 22 20 20 64 61 74 61 20 42 4c 4f 42 20 20 20 20  "  data BLOB    
27ba0 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 63 6f             -- co
27bb0 6d 70 72 65 73 73 65 64 20 63 6f 6e 74 65 6e 74  mpressed content
27bc0 5c 6e 22 0a 20 20 20 20 20 20 22 29 22 3b 0a 20  \n".      ")";. 
27bd0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 72   const char *zDr
27be0 6f 70 20 3d 20 22 44 52 4f 50 20 54 41 42 4c 45  op = "DROP TABLE
27bf0 20 49 46 20 45 58 49 53 54 53 20 73 71 6c 61 72   IF EXISTS sqlar
27c00 22 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ";.  const char 
27c10 2a 7a 49 6e 73 65 72 74 46 6d 74 5b 32 5d 20 3d  *zInsertFmt[2] =
27c20 20 7b 0a 20 20 20 20 20 22 52 45 50 4c 41 43 45   {.     "REPLACE
27c30 20 49 4e 54 4f 20 25 73 28 6e 61 6d 65 2c 6d 6f   INTO %s(name,mo
27c40 64 65 2c 6d 74 69 6d 65 2c 73 7a 2c 64 61 74 61  de,mtime,sz,data
27c50 29 5c 6e 22 0a 20 20 20 20 20 22 20 20 53 45 4c  )\n".     "  SEL
27c60 45 43 54 5c 6e 22 0a 20 20 20 20 20 22 20 20 20  ECT\n".     "   
27c70 20 25 73 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20   %s,\n".     "  
27c80 20 20 6d 6f 64 65 2c 5c 6e 22 0a 20 20 20 20 20    mode,\n".     
27c90 22 20 20 20 20 6d 74 69 6d 65 2c 5c 6e 22 0a 20  "    mtime,\n". 
27ca0 20 20 20 20 22 20 20 20 20 43 41 53 45 20 73 75      "    CASE su
27cb0 62 73 74 72 28 6c 73 6d 6f 64 65 28 6d 6f 64 65  bstr(lsmode(mode
27cc0 29 2c 31 2c 31 29 5c 6e 22 0a 20 20 20 20 20 22  ),1,1)\n".     "
27cd0 20 20 20 20 20 20 57 48 45 4e 20 27 2d 27 20 54        WHEN '-' T
27ce0 48 45 4e 20 6c 65 6e 67 74 68 28 64 61 74 61 29  HEN length(data)
27cf0 5c 6e 22 0a 20 20 20 20 20 22 20 20 20 20 20 20  \n".     "      
27d00 57 48 45 4e 20 27 64 27 20 54 48 45 4e 20 30 5c  WHEN 'd' THEN 0\
27d10 6e 22 0a 20 20 20 20 20 22 20 20 20 20 20 20 45  n".     "      E
27d20 4c 53 45 20 2d 31 20 45 4e 44 2c 5c 6e 22 0a 20  LSE -1 END,\n". 
27d30 20 20 20 20 22 20 20 20 20 73 71 6c 61 72 5f 63      "    sqlar_c
27d40 6f 6d 70 72 65 73 73 28 64 61 74 61 29 5c 6e 22  ompress(data)\n"
27d50 0a 20 20 20 20 20 22 20 20 46 52 4f 4d 20 66 73  .     "  FROM fs
27d60 64 69 72 28 25 51 2c 25 51 29 5c 6e 22 0a 20 20  dir(%Q,%Q)\n".  
27d70 20 20 20 22 20 20 57 48 45 52 45 20 6c 73 6d 6f     "  WHERE lsmo
27d80 64 65 28 6d 6f 64 65 29 20 4e 4f 54 20 4c 49 4b  de(mode) NOT LIK
27d90 45 20 27 3f 25 25 27 3b 22 2c 0a 20 20 20 20 20  E '?%%';",.     
27da0 22 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 25 73  "REPLACE INTO %s
27db0 28 6e 61 6d 65 2c 6d 6f 64 65 2c 6d 74 69 6d 65  (name,mode,mtime
27dc0 2c 64 61 74 61 29 5c 6e 22 0a 20 20 20 20 20 22  ,data)\n".     "
27dd0 20 20 53 45 4c 45 43 54 5c 6e 22 0a 20 20 20 20    SELECT\n".    
27de0 20 22 20 20 20 20 25 73 2c 5c 6e 22 0a 20 20 20   "    %s,\n".   
27df0 20 20 22 20 20 20 20 6d 6f 64 65 2c 5c 6e 22 0a    "    mode,\n".
27e00 20 20 20 20 20 22 20 20 20 20 6d 74 69 6d 65 2c       "    mtime,
27e10 5c 6e 22 0a 20 20 20 20 20 22 20 20 20 20 64 61  \n".     "    da
27e20 74 61 5c 6e 22 0a 20 20 20 20 20 22 20 20 46 52  ta\n".     "  FR
27e30 4f 4d 20 66 73 64 69 72 28 25 51 2c 25 51 29 5c  OM fsdir(%Q,%Q)\
27e40 6e 22 0a 20 20 20 20 20 22 20 20 57 48 45 52 45  n".     "  WHERE
27e50 20 6c 73 6d 6f 64 65 28 6d 6f 64 65 29 20 4e 4f   lsmode(mode) NO
27e60 54 20 4c 49 4b 45 20 27 3f 25 25 27 3b 22 0a 20  T LIKE '?%%';". 
27e70 20 7d 3b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   };.  int i;    
27e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e90 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 69 74 65        /* For ite
27ea0 72 61 74 69 6e 67 20 74 68 72 6f 75 67 68 20 61  rating through a
27eb0 7a 46 69 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  zFile[] */.  int
27ec0 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
27ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
27ee0 52 65 74 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 20  Return code */. 
27ef0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
27f00 62 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  b = 0;          
27f10 20 2f 2a 20 53 51 4c 20 74 61 62 6c 65 20 69 6e   /* SQL table in
27f20 74 6f 20 77 68 69 63 68 20 74 6f 20 69 6e 73 65  to which to inse
27f30 72 74 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53  rt */.  char *zS
27f40 71 6c 3b 0a 20 20 63 68 61 72 20 7a 54 65 6d 70  ql;.  char zTemp
27f50 5b 35 30 5d 3b 0a 0a 20 20 61 72 45 78 65 63 53  [50];..  arExecS
27f60 71 6c 28 70 41 72 2c 20 22 50 52 41 47 4d 41 20  ql(pAr, "PRAGMA 
27f70 70 61 67 65 5f 73 69 7a 65 3d 35 31 32 22 29 3b  page_size=512");
27f80 0a 20 20 72 63 20 3d 20 61 72 45 78 65 63 53 71  .  rc = arExecSq
27f90 6c 28 70 41 72 2c 20 22 53 41 56 45 50 4f 49 4e  l(pAr, "SAVEPOIN
27fa0 54 20 61 72 3b 22 29 3b 0a 20 20 69 66 28 20 72  T ar;");.  if( r
27fb0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72  c!=SQLITE_OK ) r
27fc0 65 74 75 72 6e 20 72 63 3b 0a 20 20 7a 54 65 6d  eturn rc;.  zTem
27fd0 70 5b 30 5d 20 3d 20 30 3b 20 0a 20 20 69 66 28  p[0] = 0; .  if(
27fe0 20 70 41 72 2d 3e 62 5a 69 70 20 29 7b 0a 20 20   pAr->bZip ){.  
27ff0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
28000 74 68 65 20 7a 69 70 66 69 6c 65 20 76 69 72 74  the zipfile virt
28010 75 61 6c 20 74 61 62 6c 65 2c 20 69 66 20 6e 65  ual table, if ne
28020 63 65 73 73 61 72 79 20 2a 2f 0a 20 20 20 20 69  cessary */.    i
28030 66 28 20 70 41 72 2d 3e 7a 46 69 6c 65 20 29 7b  f( pAr->zFile ){
28040 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 75  .      sqlite3_u
28050 69 6e 74 36 34 20 72 3b 0a 20 20 20 20 20 20 73  int64 r;.      s
28060 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
28070 73 28 73 69 7a 65 6f 66 28 72 29 2c 26 72 29 3b  s(sizeof(r),&r);
28080 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
28090 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
280a0 54 65 6d 70 29 2c 7a 54 65 6d 70 2c 22 7a 69 70  Temp),zTemp,"zip
280b0 25 30 31 36 6c 6c 78 22 2c 72 29 3b 0a 20 20 20  %016llx",r);.   
280c0 20 20 20 7a 54 61 62 20 3d 20 7a 54 65 6d 70 3b     zTab = zTemp;
280d0 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  .      zSql = sq
280e0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20  lite3_mprintf(. 
280f0 20 20 20 20 20 20 20 20 22 43 52 45 41 54 45 20          "CREATE 
28100 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 65  VIRTUAL TABLE te
28110 6d 70 2e 25 73 20 55 53 49 4e 47 20 7a 69 70 66  mp.%s USING zipf
28120 69 6c 65 28 25 51 29 22 2c 0a 20 20 20 20 20 20  ile(%Q)",.      
28130 20 20 20 7a 54 61 62 2c 20 70 41 72 2d 3e 7a 46     zTab, pAr->zF
28140 69 6c 65 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  ile.      );.   
28150 20 20 20 72 63 20 3d 20 61 72 45 78 65 63 53 71     rc = arExecSq
28160 6c 28 70 41 72 2c 20 7a 53 71 6c 29 3b 0a 20 20  l(pAr, zSql);.  
28170 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
28180 28 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 65 6c 73  (zSql);.    }els
28190 65 7b 0a 20 20 20 20 20 20 7a 54 61 62 20 3d 20  e{.      zTab = 
281a0 22 7a 69 70 22 3b 0a 20 20 20 20 7d 0a 20 20 7d  "zip";.    }.  }
281b0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 49 6e 69  else{.    /* Ini
281c0 74 69 61 6c 69 7a 65 20 74 68 65 20 74 61 62 6c  tialize the tabl
281d0 65 20 66 6f 72 20 61 6e 20 53 51 4c 41 52 20 2a  e for an SQLAR *
281e0 2f 0a 20 20 20 20 7a 54 61 62 20 3d 20 22 73 71  /.    zTab = "sq
281f0 6c 61 72 22 3b 0a 20 20 20 20 69 66 28 20 62 55  lar";.    if( bU
28200 70 64 61 74 65 3d 3d 30 20 29 7b 0a 20 20 20 20  pdate==0 ){.    
28210 20 20 72 63 20 3d 20 61 72 45 78 65 63 53 71 6c    rc = arExecSql
28220 28 70 41 72 2c 20 7a 44 72 6f 70 29 3b 0a 20 20  (pAr, zDrop);.  
28230 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
28240 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 65 6e 64  TE_OK ) goto end
28250 5f 61 72 5f 74 72 61 6e 73 61 63 74 69 6f 6e 3b  _ar_transaction;
28260 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20  .    }.    rc = 
28270 61 72 45 78 65 63 53 71 6c 28 70 41 72 2c 20 7a  arExecSql(pAr, z
28280 43 72 65 61 74 65 29 3b 0a 20 20 7d 0a 20 20 66  Create);.  }.  f
28290 6f 72 28 69 3d 30 3b 20 69 3c 70 41 72 2d 3e 6e  or(i=0; i<pAr->n
282a0 41 72 67 20 26 26 20 72 63 3d 3d 53 51 4c 49 54  Arg && rc==SQLIT
282b0 45 5f 4f 4b 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  E_OK; i++){.    
282c0 63 68 61 72 20 2a 7a 53 71 6c 32 20 3d 20 73 71  char *zSql2 = sq
282d0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 7a 49  lite3_mprintf(zI
282e0 6e 73 65 72 74 46 6d 74 5b 70 41 72 2d 3e 62 5a  nsertFmt[pAr->bZ
282f0 69 70 5d 2c 20 7a 54 61 62 2c 0a 20 20 20 20 20  ip], zTab,.     
28300 20 20 20 70 41 72 2d 3e 62 56 65 72 62 6f 73 65     pAr->bVerbose
28310 20 3f 20 22 73 68 65 6c 6c 5f 70 75 74 73 6e 6c   ? "shell_putsnl
28320 28 6e 61 6d 65 29 22 20 3a 20 22 6e 61 6d 65 22  (name)" : "name"
28330 2c 0a 20 20 20 20 20 20 20 20 70 41 72 2d 3e 61  ,.        pAr->a
28340 7a 41 72 67 5b 69 5d 2c 20 70 41 72 2d 3e 7a 44  zArg[i], pAr->zD
28350 69 72 29 3b 0a 20 20 20 20 72 63 20 3d 20 61 72  ir);.    rc = ar
28360 45 78 65 63 53 71 6c 28 70 41 72 2c 20 7a 53 71  ExecSql(pAr, zSq
28370 6c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  l2);.    sqlite3
28380 5f 66 72 65 65 28 7a 53 71 6c 32 29 3b 0a 20 20  _free(zSql2);.  
28390 7d 0a 65 6e 64 5f 61 72 5f 74 72 61 6e 73 61 63  }.end_ar_transac
283a0 74 69 6f 6e 3a 0a 20 20 69 66 28 20 72 63 21 3d  tion:.  if( rc!=
283b0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
283c0 20 61 72 45 78 65 63 53 71 6c 28 70 41 72 2c 20   arExecSql(pAr, 
283d0 22 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 61 72 3b  "ROLLBACK TO ar;
283e0 20 52 45 4c 45 41 53 45 20 61 72 3b 22 29 3b 0a   RELEASE ar;");.
283f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
28400 3d 20 61 72 45 78 65 63 53 71 6c 28 70 41 72 2c  = arExecSql(pAr,
28410 20 22 52 45 4c 45 41 53 45 20 61 72 3b 22 29 3b   "RELEASE ar;");
28420 0a 20 20 20 20 69 66 28 20 70 41 72 2d 3e 62 5a  .    if( pAr->bZ
28430 69 70 20 26 26 20 70 41 72 2d 3e 7a 46 69 6c 65  ip && pAr->zFile
28440 20 29 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d   ){.      zSql =
28450 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
28460 28 22 44 52 4f 50 20 54 41 42 4c 45 20 25 73 22  ("DROP TABLE %s"
28470 2c 20 7a 54 65 6d 70 29 3b 0a 20 20 20 20 20 20  , zTemp);.      
28480 61 72 45 78 65 63 53 71 6c 28 70 41 72 2c 20 7a  arExecSql(pAr, z
28490 53 71 6c 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Sql);.      sqli
284a0 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
284b0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
284c0 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
284d0 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  Implementation o
284e0 66 20 22 2e 61 72 22 20 64 6f 74 20 63 6f 6d 6d  f ".ar" dot comm
284f0 61 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  and..*/.static i
28500 6e 74 20 61 72 44 6f 74 43 6f 6d 6d 61 6e 64 28  nt arDotCommand(
28510 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
28520 53 74 61 74 65 2c 20 20 20 20 20 20 20 20 20 20  State,          
28530 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 68     /* Current sh
28540 65 6c 6c 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a  ell tool state *
28550 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67  /.  char **azArg
28560 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
28570 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
28580 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
28590 20 74 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20   to dot command 
285a0 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 20 20 20  */.  int nArg   
285b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
285d0 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 41  f entries in azA
285e0 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 41 72 43  rg[] */.){.  ArC
285f0 6f 6d 6d 61 6e 64 20 63 6d 64 3b 0a 20 20 69 6e  ommand cmd;.  in
28600 74 20 72 63 3b 0a 20 20 6d 65 6d 73 65 74 28 26  t rc;.  memset(&
28610 63 6d 64 2c 20 30 2c 20 73 69 7a 65 6f 66 28 63  cmd, 0, sizeof(c
28620 6d 64 29 29 3b 0a 20 20 72 63 20 3d 20 61 72 50  md));.  rc = arP
28630 61 72 73 65 43 6f 6d 6d 61 6e 64 28 61 7a 41 72  arseCommand(azAr
28640 67 2c 20 6e 41 72 67 2c 20 26 63 6d 64 29 3b 0a  g, nArg, &cmd);.
28650 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
28660 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 6e 74 20 65  _OK ){.    int e
28670 44 62 54 79 70 65 20 3d 20 53 48 45 4c 4c 5f 4f  DbType = SHELL_O
28680 50 45 4e 5f 55 4e 53 50 45 43 3b 0a 20 20 20 20  PEN_UNSPEC;.    
28690 63 6d 64 2e 70 20 3d 20 70 53 74 61 74 65 3b 0a  cmd.p = pState;.
286a0 20 20 20 20 63 6d 64 2e 64 62 20 3d 20 70 53 74      cmd.db = pSt
286b0 61 74 65 2d 3e 64 62 3b 0a 20 20 20 20 69 66 28  ate->db;.    if(
286c0 20 63 6d 64 2e 7a 46 69 6c 65 20 29 7b 0a 20 20   cmd.zFile ){.  
286d0 20 20 20 20 65 44 62 54 79 70 65 20 3d 20 64 65      eDbType = de
286e0 64 75 63 65 44 61 74 61 62 61 73 65 54 79 70 65  duceDatabaseType
286f0 28 63 6d 64 2e 7a 46 69 6c 65 2c 20 31 29 3b 0a  (cmd.zFile, 1);.
28700 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
28710 20 65 44 62 54 79 70 65 20 3d 20 70 53 74 61 74   eDbType = pStat
28720 65 2d 3e 6f 70 65 6e 4d 6f 64 65 3b 0a 20 20 20  e->openMode;.   
28730 20 7d 0a 20 20 20 20 69 66 28 20 65 44 62 54 79   }.    if( eDbTy
28740 70 65 3d 3d 53 48 45 4c 4c 5f 4f 50 45 4e 5f 5a  pe==SHELL_OPEN_Z
28750 49 50 46 49 4c 45 20 29 7b 0a 20 20 20 20 20 20  IPFILE ){.      
28760 69 66 28 20 63 6d 64 2e 65 43 6d 64 3d 3d 41 52  if( cmd.eCmd==AR
28770 5f 43 4d 44 5f 45 58 54 52 41 43 54 20 7c 7c 20  _CMD_EXTRACT || 
28780 63 6d 64 2e 65 43 6d 64 3d 3d 41 52 5f 43 4d 44  cmd.eCmd==AR_CMD
28790 5f 4c 49 53 54 20 29 7b 0a 20 20 20 20 20 20 20  _LIST ){.       
287a0 20 69 66 28 20 63 6d 64 2e 7a 46 69 6c 65 3d 3d   if( cmd.zFile==
287b0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63  0 ){.          c
287c0 6d 64 2e 7a 53 72 63 54 61 62 6c 65 20 3d 20 73  md.zSrcTable = s
287d0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
287e0 7a 69 70 22 29 3b 0a 20 20 20 20 20 20 20 20 7d  zip");.        }
287f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
28800 63 6d 64 2e 7a 53 72 63 54 61 62 6c 65 20 3d 20  cmd.zSrcTable = 
28810 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
28820 22 7a 69 70 66 69 6c 65 28 25 51 29 22 2c 20 63  "zipfile(%Q)", c
28830 6d 64 2e 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20  md.zFile);.     
28840 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
28850 20 20 20 63 6d 64 2e 62 5a 69 70 20 3d 20 31 3b     cmd.bZip = 1;
28860 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
28870 6d 64 2e 7a 46 69 6c 65 20 29 7b 0a 20 20 20 20  md.zFile ){.    
28880 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 20    int flags;.   
28890 20 20 20 69 66 28 20 63 6d 64 2e 62 41 70 70 65     if( cmd.bAppe
288a0 6e 64 20 29 20 65 44 62 54 79 70 65 20 3d 20 53  nd ) eDbType = S
288b0 48 45 4c 4c 5f 4f 50 45 4e 5f 41 50 50 45 4e 44  HELL_OPEN_APPEND
288c0 56 46 53 3b 0a 20 20 20 20 20 20 69 66 28 20 63  VFS;.      if( c
288d0 6d 64 2e 65 43 6d 64 3d 3d 41 52 5f 43 4d 44 5f  md.eCmd==AR_CMD_
288e0 43 52 45 41 54 45 20 7c 7c 20 63 6d 64 2e 65 43  CREATE || cmd.eC
288f0 6d 64 3d 3d 41 52 5f 43 4d 44 5f 55 50 44 41 54  md==AR_CMD_UPDAT
28900 45 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6c 61  E ){.        fla
28910 67 73 20 3d 20 53 51 4c 49 54 45 5f 4f 50 45 4e  gs = SQLITE_OPEN
28920 5f 52 45 41 44 57 52 49 54 45 7c 53 51 4c 49 54  _READWRITE|SQLIT
28930 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 3b 0a 20  E_OPEN_CREATE;. 
28940 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
28950 20 20 20 20 66 6c 61 67 73 20 3d 20 53 51 4c 49      flags = SQLI
28960 54 45 5f 4f 50 45 4e 5f 52 45 41 44 4f 4e 4c 59  TE_OPEN_READONLY
28970 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
28980 63 6d 64 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20  cmd.db = 0;.    
28990 20 20 69 66 28 20 63 6d 64 2e 62 44 72 79 52 75    if( cmd.bDryRu
289a0 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  n ){.        utf
289b0 38 5f 70 72 69 6e 74 66 28 70 53 74 61 74 65 2d  8_printf(pState-
289c0 3e 6f 75 74 2c 20 22 2d 2d 20 6f 70 65 6e 20 64  >out, "-- open d
289d0 61 74 61 62 61 73 65 20 27 25 73 27 25 73 5c 6e  atabase '%s'%s\n
289e0 22 2c 20 63 6d 64 2e 7a 46 69 6c 65 2c 0a 20 20  ", cmd.zFile,.  
289f0 20 20 20 20 20 20 20 20 20 20 20 65 44 62 54 79             eDbTy
28a00 70 65 3d 3d 53 48 45 4c 4c 5f 4f 50 45 4e 5f 41  pe==SHELL_OPEN_A
28a10 50 50 45 4e 44 56 46 53 20 3f 20 22 20 75 73 69  PPENDVFS ? " usi
28a20 6e 67 20 27 61 70 6e 64 76 66 73 27 22 20 3a 20  ng 'apndvfs'" : 
28a30 22 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  "");.      }.   
28a40 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
28a50 6f 70 65 6e 5f 76 32 28 63 6d 64 2e 7a 46 69 6c  open_v2(cmd.zFil
28a60 65 2c 20 26 63 6d 64 2e 64 62 2c 20 66 6c 61 67  e, &cmd.db, flag
28a70 73 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  s, .            
28a80 20 65 44 62 54 79 70 65 3d 3d 53 48 45 4c 4c 5f   eDbType==SHELL_
28a90 4f 50 45 4e 5f 41 50 50 45 4e 44 56 46 53 20 3f  OPEN_APPENDVFS ?
28aa0 20 22 61 70 6e 64 76 66 73 22 20 3a 20 30 29 3b   "apndvfs" : 0);
28ab0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
28ac0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
28ad0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
28ae0 73 74 64 65 72 72 2c 20 22 63 61 6e 6e 6f 74 20  stderr, "cannot 
28af0 6f 70 65 6e 20 66 69 6c 65 3a 20 25 73 20 28 25  open file: %s (%
28b00 73 29 5c 6e 22 2c 20 0a 20 20 20 20 20 20 20 20  s)\n", .        
28b10 20 20 20 20 63 6d 64 2e 7a 46 69 6c 65 2c 20 73      cmd.zFile, s
28b20 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 63 6d  qlite3_errmsg(cm
28b30 64 2e 64 62 29 0a 20 20 20 20 20 20 20 20 29 3b  d.db).        );
28b40 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 65 6e  .        goto en
28b50 64 5f 61 72 5f 63 6f 6d 6d 61 6e 64 3b 0a 20 20  d_ar_command;.  
28b60 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
28b70 74 65 33 5f 66 69 6c 65 69 6f 5f 69 6e 69 74 28  te3_fileio_init(
28b80 63 6d 64 2e 64 62 2c 20 30 2c 20 30 29 3b 0a 20  cmd.db, 0, 0);. 
28b90 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 71 6c       sqlite3_sql
28ba0 61 72 5f 69 6e 69 74 28 63 6d 64 2e 64 62 2c 20  ar_init(cmd.db, 
28bb0 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  0, 0);.      sql
28bc0 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
28bd0 74 69 6f 6e 28 63 6d 64 2e 64 62 2c 20 22 73 68  tion(cmd.db, "sh
28be0 65 6c 6c 5f 70 75 74 73 6e 6c 22 2c 20 31 2c 20  ell_putsnl", 1, 
28bf0 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 63 6d 64  SQLITE_UTF8, cmd
28c00 2e 70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  .p,.            
28c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c20 20 20 73 68 65 6c 6c 50 75 74 73 46 75 6e 63 2c    shellPutsFunc,
28c30 20 30 2c 20 30 29 3b 0a 0a 20 20 20 20 7d 0a 20   0, 0);..    }. 
28c40 20 20 20 69 66 28 20 63 6d 64 2e 7a 53 72 63 54     if( cmd.zSrcT
28c50 61 62 6c 65 3d 3d 30 20 26 26 20 63 6d 64 2e 62  able==0 && cmd.b
28c60 5a 69 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Zip==0 ){.      
28c70 69 66 28 20 63 6d 64 2e 65 43 6d 64 21 3d 41 52  if( cmd.eCmd!=AR
28c80 5f 43 4d 44 5f 43 52 45 41 54 45 0a 20 20 20 20  _CMD_CREATE.    
28c90 20 20 20 26 26 20 73 71 6c 69 74 65 33 5f 74 61     && sqlite3_ta
28ca0 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
28cb0 61 74 61 28 63 6d 64 2e 64 62 2c 30 2c 22 73 71  ata(cmd.db,0,"sq
28cc0 6c 61 72 22 2c 22 6e 61 6d 65 22 2c 30 2c 30 2c  lar","name",0,0,
28cd0 30 2c 30 2c 30 29 0a 20 20 20 20 20 20 29 7b 0a  0,0,0).      ){.
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 64 61 74  ntf(stderr, "dat
28d00 61 62 61 73 65 20 64 6f 65 73 20 6e 6f 74 20 63  abase does not c
28d10 6f 6e 74 61 69 6e 20 61 6e 20 27 73 71 6c 61 72  ontain an 'sqlar
28d20 27 20 74 61 62 6c 65 5c 6e 22 29 3b 0a 20 20 20  ' table\n");.   
28d30 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
28d40 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20  _ERROR;.        
28d50 67 6f 74 6f 20 65 6e 64 5f 61 72 5f 63 6f 6d 6d  goto end_ar_comm
28d60 61 6e 64 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  and;.      }.   
28d70 20 20 20 63 6d 64 2e 7a 53 72 63 54 61 62 6c 65     cmd.zSrcTable
28d80 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
28d90 74 66 28 22 73 71 6c 61 72 22 29 3b 0a 20 20 20  tf("sqlar");.   
28da0 20 7d 0a 0a 20 20 20 20 73 77 69 74 63 68 28 20   }..    switch( 
28db0 63 6d 64 2e 65 43 6d 64 20 29 7b 0a 20 20 20 20  cmd.eCmd ){.    
28dc0 20 20 63 61 73 65 20 41 52 5f 43 4d 44 5f 43 52    case AR_CMD_CR
28dd0 45 41 54 45 3a 0a 20 20 20 20 20 20 20 20 72 63  EATE:.        rc
28de0 20 3d 20 61 72 43 72 65 61 74 65 4f 72 55 70 64   = arCreateOrUpd
28df0 61 74 65 43 6f 6d 6d 61 6e 64 28 26 63 6d 64 2c  ateCommand(&cmd,
28e00 20 30 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65   0);.        bre
28e10 61 6b 3b 0a 0a 20 20 20 20 20 20 63 61 73 65 20  ak;..      case 
28e20 41 52 5f 43 4d 44 5f 45 58 54 52 41 43 54 3a 0a  AR_CMD_EXTRACT:.
28e30 20 20 20 20 20 20 20 20 72 63 20 3d 20 61 72 45          rc = arE
28e40 78 74 72 61 63 74 43 6f 6d 6d 61 6e 64 28 26 63  xtractCommand(&c
28e50 6d 64 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  md);.        bre
28e60 61 6b 3b 0a 0a 20 20 20 20 20 20 63 61 73 65 20  ak;..      case 
28e70 41 52 5f 43 4d 44 5f 4c 49 53 54 3a 0a 20 20 20  AR_CMD_LIST:.   
28e80 20 20 20 20 20 72 63 20 3d 20 61 72 4c 69 73 74       rc = arList
28e90 43 6f 6d 6d 61 6e 64 28 26 63 6d 64 29 3b 0a 20  Command(&cmd);. 
28ea0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20         break;.. 
28eb0 20 20 20 20 20 63 61 73 65 20 41 52 5f 43 4d 44       case AR_CMD
28ec0 5f 48 45 4c 50 3a 0a 20 20 20 20 20 20 20 20 61  _HELP:.        a
28ed0 72 55 73 61 67 65 28 70 53 74 61 74 65 2d 3e 6f  rUsage(pState->o
28ee0 75 74 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  ut);.        bre
28ef0 61 6b 3b 0a 0a 20 20 20 20 20 20 64 65 66 61 75  ak;..      defau
28f00 6c 74 3a 0a 20 20 20 20 20 20 20 20 61 73 73 65  lt:.        asse
28f10 72 74 28 20 63 6d 64 2e 65 43 6d 64 3d 3d 41 52  rt( cmd.eCmd==AR
28f20 5f 43 4d 44 5f 55 50 44 41 54 45 20 29 3b 0a 20  _CMD_UPDATE );. 
28f30 20 20 20 20 20 20 20 72 63 20 3d 20 61 72 43 72         rc = arCr
28f40 65 61 74 65 4f 72 55 70 64 61 74 65 43 6f 6d 6d  eateOrUpdateComm
28f50 61 6e 64 28 26 63 6d 64 2c 20 31 29 3b 0a 20 20  and(&cmd, 1);.  
28f60 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
28f70 20 7d 0a 20 20 7d 0a 65 6e 64 5f 61 72 5f 63 6f   }.  }.end_ar_co
28f80 6d 6d 61 6e 64 3a 0a 20 20 69 66 28 20 63 6d 64  mmand:.  if( cmd
28f90 2e 64 62 21 3d 70 53 74 61 74 65 2d 3e 64 62 20  .db!=pState->db 
28fa0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  ){.    sqlite3_c
28fb0 6c 6f 73 65 28 63 6d 64 2e 64 62 29 3b 0a 20 20  lose(cmd.db);.  
28fc0 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  }.  sqlite3_free
28fd0 28 63 6d 64 2e 7a 53 72 63 54 61 62 6c 65 29 3b  (cmd.zSrcTable);
28fe0 0a 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ..  return rc;.}
28ff0 0a 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 22  ./* End of the "
29000 2e 61 72 63 68 69 76 65 22 20 6f 72 20 22 2e 61  .archive" or ".a
29010 72 22 20 63 6f 6d 6d 61 6e 64 20 6c 6f 67 69 63  r" command logic
29020 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
29030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29070 2a 2a 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21  ***/.#endif /* !
29080 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
29090 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
290a0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
290b0 49 54 45 5f 48 41 56 45 5f 5a 4c 49 42 29 20 2a  ITE_HAVE_ZLIB) *
290c0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 61 6e 20  /.../*.** If an 
290d0 69 6e 70 75 74 20 6c 69 6e 65 20 62 65 67 69 6e  input line begin
290e0 73 20 77 69 74 68 20 22 2e 22 20 74 68 65 6e 20  s with "." then 
290f0 69 6e 76 6f 6b 65 20 74 68 69 73 20 72 6f 75 74  invoke this rout
29100 69 6e 65 20 74 6f 0a 2a 2a 20 70 72 6f 63 65 73  ine to.** proces
29110 73 20 74 68 61 74 20 6c 69 6e 65 2e 0a 2a 2a 0a  s that line..**.
29120 2a 2a 20 52 65 74 75 72 6e 20 31 20 6f 6e 20 65  ** Return 1 on e
29130 72 72 6f 72 2c 20 32 20 74 6f 20 65 78 69 74 2c  rror, 2 to exit,
29140 20 61 6e 64 20 30 20 6f 74 68 65 72 77 69 73 65   and 0 otherwise
29150 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
29160 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28  do_meta_command(
29170 63 68 61 72 20 2a 7a 4c 69 6e 65 2c 20 53 68 65  char *zLine, She
29180 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69  llState *p){.  i
29190 6e 74 20 68 20 3d 20 31 3b 0a 20 20 69 6e 74 20  nt h = 1;.  int 
291a0 6e 41 72 67 20 3d 20 30 3b 0a 20 20 69 6e 74 20  nArg = 0;.  int 
291b0 6e 2c 20 63 3b 0a 20 20 69 6e 74 20 72 63 20 3d  n, c;.  int rc =
291c0 20 30 3b 0a 20 20 63 68 61 72 20 2a 61 7a 41 72   0;.  char *azAr
291d0 67 5b 35 30 5d 3b 0a 0a 23 69 66 6e 64 65 66 20  g[50];..#ifndef 
291e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
291f0 55 41 4c 54 41 42 4c 45 0a 20 20 69 66 28 20 70  UALTABLE.  if( p
29200 2d 3e 65 78 70 65 72 74 2e 70 45 78 70 65 72 74  ->expert.pExpert
29210 20 29 7b 0a 20 20 20 20 65 78 70 65 72 74 46 69   ){.    expertFi
29220 6e 69 73 68 28 70 2c 20 31 2c 20 30 29 3b 0a 20  nish(p, 1, 0);. 
29230 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20   }.#endif..  /* 
29240 50 61 72 73 65 20 74 68 65 20 69 6e 70 75 74 20  Parse the input 
29250 6c 69 6e 65 20 69 6e 74 6f 20 74 6f 6b 65 6e 73  line into tokens
29260 2e 0a 20 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20  ..  */.  while( 
29270 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 6e 41 72 67  zLine[h] && nArg
29280 3c 41 72 72 61 79 53 69 7a 65 28 61 7a 41 72 67  <ArraySize(azArg
29290 29 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20  ) ){.    while( 
292a0 49 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d  IsSpace(zLine[h]
292b0 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20  ) ){ h++; }.    
292c0 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 30 20  if( zLine[h]==0 
292d0 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 69 66 28  ) break;.    if(
292e0 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 5c 27 27 20   zLine[h]=='\'' 
292f0 7c 7c 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 22 27  || zLine[h]=='"'
29300 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 64 65   ){.      int de
29310 6c 69 6d 20 3d 20 7a 4c 69 6e 65 5b 68 2b 2b 5d  lim = zLine[h++]
29320 3b 0a 20 20 20 20 20 20 61 7a 41 72 67 5b 6e 41  ;.      azArg[nA
29330 72 67 2b 2b 5d 20 3d 20 26 7a 4c 69 6e 65 5b 68  rg++] = &zLine[h
29340 5d 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  ];.      while( 
29350 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 7a 4c 69 6e  zLine[h] && zLin
29360 65 5b 68 5d 21 3d 64 65 6c 69 6d 20 29 7b 0a 20  e[h]!=delim ){. 
29370 20 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65         if( zLine
29380 5b 68 5d 3d 3d 27 5c 5c 27 20 26 26 20 64 65 6c  [h]=='\\' && del
29390 69 6d 3d 3d 27 22 27 20 26 26 20 7a 4c 69 6e 65  im=='"' && zLine
293a0 5b 68 2b 31 5d 21 3d 30 20 29 20 68 2b 2b 3b 0a  [h+1]!=0 ) h++;.
293b0 20 20 20 20 20 20 20 20 68 2b 2b 3b 0a 20 20 20          h++;.   
293c0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a     }.      if( z
293d0 4c 69 6e 65 5b 68 5d 3d 3d 64 65 6c 69 6d 20 29  Line[h]==delim )
293e0 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b  {.        zLine[
293f0 68 2b 2b 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  h++] = 0;.      
29400 7d 0a 20 20 20 20 20 20 69 66 28 20 64 65 6c 69  }.      if( deli
29410 6d 3d 3d 27 22 27 20 29 20 72 65 73 6f 6c 76 65  m=='"' ) resolve
29420 5f 62 61 63 6b 73 6c 61 73 68 65 73 28 61 7a 41  _backslashes(azA
29430 72 67 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20  rg[nArg-1]);.   
29440 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 7a   }else{.      az
29450 41 72 67 5b 6e 41 72 67 2b 2b 5d 20 3d 20 26 7a  Arg[nArg++] = &z
29460 4c 69 6e 65 5b 68 5d 3b 0a 20 20 20 20 20 20 77  Line[h];.      w
29470 68 69 6c 65 28 20 7a 4c 69 6e 65 5b 68 5d 20 26  hile( zLine[h] &
29480 26 20 21 49 73 53 70 61 63 65 28 7a 4c 69 6e 65  & !IsSpace(zLine
29490 5b 68 5d 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20  [h]) ){ h++; }. 
294a0 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68       if( zLine[h
294b0 5d 20 29 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 20 3d  ] ) zLine[h++] =
294c0 20 30 3b 0a 20 20 20 20 20 20 72 65 73 6f 6c 76   0;.      resolv
294d0 65 5f 62 61 63 6b 73 6c 61 73 68 65 73 28 61 7a  e_backslashes(az
294e0 41 72 67 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20 20  Arg[nArg-1]);.  
294f0 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 72    }.  }..  /* Pr
29500 6f 63 65 73 73 20 74 68 65 20 69 6e 70 75 74 20  ocess the input 
29510 6c 69 6e 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  line..  */.  if(
29520 20 6e 41 72 67 3d 3d 30 20 29 20 72 65 74 75 72   nArg==0 ) retur
29530 6e 20 30 3b 20 2f 2a 20 6e 6f 20 74 6f 6b 65 6e  n 0; /* no token
29540 73 2c 20 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20  s, no error */. 
29550 20 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a   n = strlen30(az
29560 41 72 67 5b 30 5d 29 3b 0a 20 20 63 20 3d 20 61  Arg[0]);.  c = a
29570 7a 41 72 67 5b 30 5d 5b 30 5d 3b 0a 20 20 63 6c  zArg[0][0];.  cl
29580 65 61 72 54 65 6d 70 46 69 6c 65 28 70 29 3b 0a  earTempFile(p);.
29590 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
295a0 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
295b0 4f 4e 0a 20 20 69 66 28 20 63 3d 3d 27 61 27 20  ON.  if( c=='a' 
295c0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
295d0 5b 30 5d 2c 20 22 61 75 74 68 22 2c 20 6e 29 3d  [0], "auth", n)=
295e0 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
295f0 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72  rg!=2 ){.      r
29600 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
29610 2c 20 22 55 73 61 67 65 3a 20 2e 61 75 74 68 20  , "Usage: .auth 
29620 4f 4e 7c 4f 46 46 5c 6e 22 29 3b 0a 20 20 20 20  ON|OFF\n");.    
29630 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
29640 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
29650 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
29660 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
29670 0a 20 20 20 20 69 66 28 20 62 6f 6f 6c 65 61 6e  .    if( boolean
29680 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 20  Value(azArg[1]) 
29690 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
296a0 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28  _set_authorizer(
296b0 70 2d 3e 64 62 2c 20 73 68 65 6c 6c 41 75 74 68  p->db, shellAuth
296c0 2c 20 70 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  , p);.    }else{
296d0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
296e0 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 70 2d  et_authorizer(p-
296f0 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  >db, 0, 0);.    
29700 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  }.  }else.#endif
29710 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
29720 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
29730 41 4c 54 41 42 4c 45 29 20 26 26 20 64 65 66 69  ALTABLE) && defi
29740 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f  ned(SQLITE_HAVE_
29750 5a 4c 49 42 29 0a 20 20 69 66 28 20 63 3d 3d 27  ZLIB).  if( c=='
29760 61 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  a' && strncmp(az
29770 41 72 67 5b 30 5d 2c 20 22 61 72 63 68 69 76 65  Arg[0], "archive
29780 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
29790 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
297a0 20 20 20 72 63 20 3d 20 61 72 44 6f 74 43 6f 6d     rc = arDotCom
297b0 6d 61 6e 64 28 70 2c 20 61 7a 41 72 67 2c 20 6e  mand(p, azArg, n
297c0 41 72 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65  Arg);.  }else.#e
297d0 6e 64 69 66 0a 0a 20 20 69 66 28 20 28 63 3d 3d  ndif..  if( (c==
297e0 27 62 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73  'b' && n>=3 && s
297f0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
29800 20 22 62 61 63 6b 75 70 22 2c 20 6e 29 3d 3d 30   "backup", n)==0
29810 29 0a 20 20 20 7c 7c 20 28 63 3d 3d 27 73 27 20  ).   || (c=='s' 
29820 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63  && n>=3 && strnc
29830 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 61  mp(azArg[0], "sa
29840 76 65 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 29 7b  ve", n)==0).  ){
29850 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
29860 2a 7a 44 65 73 74 46 69 6c 65 20 3d 20 30 3b 0a  *zDestFile = 0;.
29870 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
29880 7a 44 62 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  zDb = 0;.    sql
29890 69 74 65 33 20 2a 70 44 65 73 74 3b 0a 20 20 20  ite3 *pDest;.   
298a0 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20   sqlite3_backup 
298b0 2a 70 42 61 63 6b 75 70 3b 0a 20 20 20 20 69 6e  *pBackup;.    in
298c0 74 20 6a 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 31  t j;.    for(j=1
298d0 3b 20 6a 3c 6e 41 72 67 3b 20 6a 2b 2b 29 7b 0a  ; j<nArg; j++){.
298e0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
298f0 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 6a 5d 3b 0a   *z = azArg[j];.
29900 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d        if( z[0]==
29910 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 77  '-' ){.        w
29920 68 69 6c 65 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20  hile( z[0]=='-' 
29930 29 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 2f  ) z++;.        /
29940 2a 20 4e 6f 20 6f 70 74 69 6f 6e 73 20 74 6f 20  * No options to 
29950 70 72 6f 63 65 73 73 20 61 74 20 74 68 69 73 20  process at this 
29960 74 69 6d 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  time */.        
29970 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38  {.          utf8
29980 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
29990 22 75 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e 3a  "unknown option:
299a0 20 25 73 5c 6e 22 2c 20 61 7a 41 72 67 5b 6a 5d   %s\n", azArg[j]
299b0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  );.          ret
299c0 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  urn 1;.        }
299d0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
299e0 20 7a 44 65 73 74 46 69 6c 65 3d 3d 30 20 29 7b   zDestFile==0 ){
299f0 0a 20 20 20 20 20 20 20 20 7a 44 65 73 74 46 69  .        zDestFi
29a00 6c 65 20 3d 20 61 7a 41 72 67 5b 6a 5d 3b 0a 20  le = azArg[j];. 
29a10 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a       }else if( z
29a20 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  Db==0 ){.       
29a30 20 7a 44 62 20 3d 20 7a 44 65 73 74 46 69 6c 65   zDb = zDestFile
29a40 3b 0a 20 20 20 20 20 20 20 20 7a 44 65 73 74 46  ;.        zDestF
29a50 69 6c 65 20 3d 20 61 7a 41 72 67 5b 6a 5d 3b 0a  ile = azArg[j];.
29a60 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
29a70 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
29a80 73 74 64 65 72 72 2c 20 22 74 6f 6f 20 6d 61 6e  stderr, "too man
29a90 79 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 2e  y arguments to .
29aa0 62 61 63 6b 75 70 5c 6e 22 29 3b 0a 20 20 20 20  backup\n");.    
29ab0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
29ac0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
29ad0 69 66 28 20 7a 44 65 73 74 46 69 6c 65 3d 3d 30  if( zDestFile==0
29ae0 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
29af0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6d 69  intf(stderr, "mi
29b00 73 73 69 6e 67 20 46 49 4c 45 4e 41 4d 45 20 61  ssing FILENAME a
29b10 72 67 75 6d 65 6e 74 20 6f 6e 20 2e 62 61 63 6b  rgument on .back
29b20 75 70 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65  up\n");.      re
29b30 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
29b40 20 20 69 66 28 20 7a 44 62 3d 3d 30 20 29 20 7a    if( zDb==0 ) z
29b50 44 62 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 20  Db = "main";.   
29b60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
29b70 65 6e 28 7a 44 65 73 74 46 69 6c 65 2c 20 26 70  en(zDestFile, &p
29b80 44 65 73 74 29 3b 0a 20 20 20 20 69 66 28 20 72  Dest);.    if( r
29b90 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
29ba0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
29bb0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
29bc0 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22  : cannot open \"
29bd0 25 73 5c 22 5c 6e 22 2c 20 7a 44 65 73 74 46 69  %s\"\n", zDestFi
29be0 6c 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  le);.      sqlit
29bf0 65 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29 3b  e3_close(pDest);
29c00 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
29c10 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f  .    }.    open_
29c20 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 70 42  db(p, 0);.    pB
29c30 61 63 6b 75 70 20 3d 20 73 71 6c 69 74 65 33 5f  ackup = sqlite3_
29c40 62 61 63 6b 75 70 5f 69 6e 69 74 28 70 44 65 73  backup_init(pDes
29c50 74 2c 20 22 6d 61 69 6e 22 2c 20 70 2d 3e 64 62  t, "main", p->db
29c60 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
29c70 70 42 61 63 6b 75 70 3d 3d 30 20 29 7b 0a 20 20  pBackup==0 ){.  
29c80 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
29c90 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
29ca0 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
29cb0 72 72 6d 73 67 28 70 44 65 73 74 29 29 3b 0a 20  rrmsg(pDest));. 
29cc0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f       sqlite3_clo
29cd0 73 65 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  se(pDest);.     
29ce0 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
29cf0 0a 20 20 20 20 77 68 69 6c 65 28 20 20 28 72 63  .    while(  (rc
29d00 20 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75   = sqlite3_backu
29d10 70 5f 73 74 65 70 28 70 42 61 63 6b 75 70 2c 31  p_step(pBackup,1
29d20 30 30 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  00))==SQLITE_OK 
29d30 29 7b 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ){}.    sqlite3_
29d40 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 70 42  backup_finish(pB
29d50 61 63 6b 75 70 29 3b 0a 20 20 20 20 69 66 28 20  ackup);.    if( 
29d60 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
29d70 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 30 3b  ){.      rc = 0;
29d80 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
29d90 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
29da0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73  derr, "Error: %s
29db0 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  \n", sqlite3_err
29dc0 6d 73 67 28 70 44 65 73 74 29 29 3b 0a 20 20 20  msg(pDest));.   
29dd0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
29de0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f  .    sqlite3_clo
29df0 73 65 28 70 44 65 73 74 29 3b 0a 20 20 7d 65 6c  se(pDest);.  }el
29e00 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 62 27  se..  if( c=='b'
29e10 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
29e20 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62  cmp(azArg[0], "b
29e30 61 69 6c 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ail", n)==0 ){. 
29e40 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29     if( nArg==2 )
29e50 7b 0a 20 20 20 20 20 20 62 61 69 6c 5f 6f 6e 5f  {.      bail_on_
29e60 65 72 72 6f 72 20 3d 20 62 6f 6f 6c 65 61 6e 56  error = booleanV
29e70 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a  alue(azArg[1]);.
29e80 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
29e90 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
29ea0 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 62 61 69  rr, "Usage: .bai
29eb0 6c 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20  l on|off\n");.  
29ec0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
29ed0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
29ee0 20 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20   c=='b' && n>=3 
29ef0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
29f00 5b 30 5d 2c 20 22 62 69 6e 61 72 79 22 2c 20 6e  [0], "binary", n
29f10 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
29f20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
29f30 20 69 66 28 20 62 6f 6f 6c 65 61 6e 56 61 6c 75   if( booleanValu
29f40 65 28 61 7a 41 72 67 5b 31 5d 29 20 29 7b 0a 20  e(azArg[1]) ){. 
29f50 20 20 20 20 20 20 20 73 65 74 42 69 6e 61 72 79         setBinary
29f60 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c 20 31 29 3b  Mode(p->out, 1);
29f70 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
29f80 20 20 20 20 20 20 73 65 74 54 65 78 74 4d 6f 64        setTextMod
29f90 65 28 70 2d 3e 6f 75 74 2c 20 31 29 3b 0a 20 20  e(p->out, 1);.  
29fa0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
29fb0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
29fc0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
29fd0 3a 20 2e 62 69 6e 61 72 79 20 6f 6e 7c 6f 66 66  : .binary on|off
29fe0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
29ff0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
2a000 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 63 27 20  e..  if( c=='c' 
2a010 26 26 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b  && strcmp(azArg[
2a020 30 5d 2c 22 63 64 22 29 3d 3d 30 20 29 7b 0a 20  0],"cd")==0 ){. 
2a030 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29     if( nArg==2 )
2a040 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57  {.#if defined(_W
2a050 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64  IN32) || defined
2a060 28 57 49 4e 33 32 29 0a 20 20 20 20 20 20 77 63  (WIN32).      wc
2a070 68 61 72 5f 74 20 2a 7a 20 3d 20 73 71 6c 69 74  har_t *z = sqlit
2a080 65 33 5f 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f  e3_win32_utf8_to
2a090 5f 75 6e 69 63 6f 64 65 28 61 7a 41 72 67 5b 31  _unicode(azArg[1
2a0a0 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 21  ]);.      rc = !
2a0b0 53 65 74 43 75 72 72 65 6e 74 44 69 72 65 63 74  SetCurrentDirect
2a0c0 6f 72 79 57 28 7a 29 3b 0a 20 20 20 20 20 20 73  oryW(z);.      s
2a0d0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a  qlite3_free(z);.
2a0e0 23 65 6c 73 65 0a 20 20 20 20 20 20 72 63 20 3d  #else.      rc =
2a0f0 20 63 68 64 69 72 28 61 7a 41 72 67 5b 31 5d 29   chdir(azArg[1])
2a100 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 69  ;.#endif.      i
2a110 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
2a120 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
2a130 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20 63 68 61  err, "Cannot cha
2a140 6e 67 65 20 74 6f 20 64 69 72 65 63 74 6f 72 79  nge to directory
2a150 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72   \"%s\"\n", azAr
2a160 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 72  g[1]);.        r
2a170 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  c = 1;.      }. 
2a180 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2a190 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2a1a0 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 64 20 44  r, "Usage: .cd D
2a1b0 49 52 45 43 54 4f 52 59 5c 6e 22 29 3b 0a 20 20  IRECTORY\n");.  
2a1c0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2a1d0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20  }.  }else..  /* 
2a1e0 54 68 65 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64  The undocumented
2a1f0 20 22 2e 62 72 65 61 6b 70 6f 69 6e 74 22 20 63   ".breakpoint" c
2a200 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61 20  ommand causes a 
2a210 63 61 6c 6c 20 74 6f 20 74 68 65 20 6e 6f 2d 6f  call to the no-o
2a220 70 0a 20 20 2a 2a 20 72 6f 75 74 69 6e 65 20 6e  p.  ** routine n
2a230 61 6d 65 64 20 74 65 73 74 5f 62 72 65 61 6b 70  amed test_breakp
2a240 6f 69 6e 74 28 29 2e 0a 20 20 2a 2f 0a 20 20 69  oint()..  */.  i
2a250 66 28 20 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d  f( c=='b' && n>=
2a260 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  3 && strncmp(azA
2a270 72 67 5b 30 5d 2c 20 22 62 72 65 61 6b 70 6f 69  rg[0], "breakpoi
2a280 6e 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  nt", n)==0 ){.  
2a290 20 20 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e    test_breakpoin
2a2a0 74 28 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  t();.  }else..  
2a2b0 69 66 28 20 63 3d 3d 27 63 27 20 26 26 20 6e 3e  if( c=='c' && n>
2a2c0 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  =3 && strncmp(az
2a2d0 41 72 67 5b 30 5d 2c 20 22 63 68 61 6e 67 65 73  Arg[0], "changes
2a2e0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
2a2f0 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20  if( nArg==2 ){. 
2a300 20 20 20 20 20 73 65 74 4f 72 43 6c 65 61 72 46       setOrClearF
2a310 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 43 6f 75  lag(p, SHFLG_Cou
2a320 6e 74 43 68 61 6e 67 65 73 2c 20 61 7a 41 72 67  ntChanges, azArg
2a330 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  [1]);.    }else{
2a340 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
2a350 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
2a360 3a 20 2e 63 68 61 6e 67 65 73 20 6f 6e 7c 6f 66  : .changes on|of
2a370 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  f\n");.      rc 
2a380 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 1;.    }.  }el
2a390 73 65 0a 0a 20 20 2f 2a 20 43 61 6e 63 65 6c 20  se..  /* Cancel 
2a3a0 6f 75 74 70 75 74 20 72 65 64 69 72 65 63 74 69  output redirecti
2a3b0 6f 6e 2c 20 69 66 20 69 74 20 69 73 20 63 75 72  on, if it is cur
2a3c0 72 65 6e 74 6c 79 20 73 65 74 20 28 62 79 20 2e  rently set (by .
2a3d0 74 65 73 74 63 61 73 65 29 0a 20 20 2a 2a 20 54  testcase).  ** T
2a3e0 68 65 6e 20 72 65 61 64 20 74 68 65 20 63 6f 6e  hen read the con
2a3f0 74 65 6e 74 20 6f 66 20 74 68 65 20 74 65 73 74  tent of the test
2a400 63 61 73 65 2d 6f 75 74 2e 74 78 74 20 66 69 6c  case-out.txt fil
2a410 65 20 61 6e 64 20 63 6f 6d 70 61 72 65 20 61 67  e and compare ag
2a420 61 69 6e 73 74 0a 20 20 2a 2a 20 61 7a 41 72 67  ainst.  ** azArg
2a430 5b 31 5d 2e 20 20 49 66 20 74 68 65 72 65 20 61  [1].  If there a
2a440 72 65 20 64 69 66 66 65 72 65 6e 63 65 73 2c 20  re differences, 
2a450 72 65 70 6f 72 74 20 61 6e 20 65 72 72 6f 72 20  report an error 
2a460 61 6e 64 20 65 78 69 74 2e 0a 20 20 2a 2f 0a 20  and exit..  */. 
2a470 20 69 66 28 20 63 3d 3d 27 63 27 20 26 26 20 6e   if( c=='c' && n
2a480 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=3 && strncmp(a
2a490 7a 41 72 67 5b 30 5d 2c 20 22 63 68 65 63 6b 22  zArg[0], "check"
2a4a0 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63  , n)==0 ){.    c
2a4b0 68 61 72 20 2a 7a 52 65 73 20 3d 20 30 3b 0a 20  har *zRes = 0;. 
2a4c0 20 20 20 6f 75 74 70 75 74 5f 72 65 73 65 74 28     output_reset(
2a4d0 70 29 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67  p);.    if( nArg
2a4e0 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77  !=2 ){.      raw
2a4f0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2a500 22 55 73 61 67 65 3a 20 2e 63 68 65 63 6b 20 47  "Usage: .check G
2a510 4c 4f 42 2d 50 41 54 54 45 52 4e 5c 6e 22 29 3b  LOB-PATTERN\n");
2a520 0a 20 20 20 20 20 20 72 63 20 3d 20 32 3b 0a 20  .      rc = 2;. 
2a530 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 7a 52     }else if( (zR
2a540 65 73 20 3d 20 72 65 61 64 46 69 6c 65 28 22 74  es = readFile("t
2a550 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 22  estcase-out.txt"
2a560 2c 20 30 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20  , 0))==0 ){.    
2a570 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2a580 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 63 61 6e  err, "Error: can
2a590 6e 6f 74 20 72 65 61 64 20 27 74 65 73 74 63 61  not read 'testca
2a5a0 73 65 2d 6f 75 74 2e 74 78 74 27 5c 6e 22 29 3b  se-out.txt'\n");
2a5b0 0a 20 20 20 20 20 20 72 63 20 3d 20 32 3b 0a 20  .      rc = 2;. 
2a5c0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 74 65 73     }else if( tes
2a5d0 74 63 61 73 65 5f 67 6c 6f 62 28 61 7a 41 72 67  tcase_glob(azArg
2a5e0 5b 31 5d 2c 7a 52 65 73 29 3d 3d 30 20 29 7b 0a  [1],zRes)==0 ){.
2a5f0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2a600 66 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20 20  f(stderr,.      
2a610 20 20 20 20 20 20 20 20 20 20 20 22 74 65 73 74             "test
2a620 63 61 73 65 2d 25 73 20 46 41 49 4c 45 44 5c 6e  case-%s FAILED\n
2a630 20 45 78 70 65 63 74 65 64 3a 20 5b 25 73 5d 5c   Expected: [%s]\
2a640 6e 20 20 20 20 20 20 47 6f 74 3a 20 5b 25 73 5d  n      Got: [%s]
2a650 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
2a660 20 20 20 20 20 20 70 2d 3e 7a 54 65 73 74 63 61        p->zTestca
2a670 73 65 2c 20 61 7a 41 72 67 5b 31 5d 2c 20 7a 52  se, azArg[1], zR
2a680 65 73 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  es);.      rc = 
2a690 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
2a6a0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2a6b0 73 74 64 6f 75 74 2c 20 22 74 65 73 74 63 61 73  stdout, "testcas
2a6c0 65 2d 25 73 20 6f 6b 5c 6e 22 2c 20 70 2d 3e 7a  e-%s ok\n", p->z
2a6d0 54 65 73 74 63 61 73 65 29 3b 0a 20 20 20 20 20  Testcase);.     
2a6e0 20 70 2d 3e 6e 43 68 65 63 6b 2b 2b 3b 0a 20 20   p->nCheck++;.  
2a6f0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
2a700 66 72 65 65 28 7a 52 65 73 29 3b 0a 20 20 7d 65  free(zRes);.  }e
2a710 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 63  lse..  if( c=='c
2a720 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
2a730 72 67 5b 30 5d 2c 20 22 63 6c 6f 6e 65 22 2c 20  rg[0], "clone", 
2a740 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
2a750 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
2a760 20 20 74 72 79 54 6f 43 6c 6f 6e 65 28 70 2c 20    tryToClone(p, 
2a770 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d  azArg[1]);.    }
2a780 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
2a790 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2a7a0 55 73 61 67 65 3a 20 2e 63 6c 6f 6e 65 20 46 49  Usage: .clone FI
2a7b0 4c 45 4e 41 4d 45 5c 6e 22 29 3b 0a 20 20 20 20  LENAME\n");.    
2a7c0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
2a7d0 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
2a7e0 3d 3d 27 64 27 20 26 26 20 6e 3e 31 20 26 26 20  =='d' && n>1 && 
2a7f0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
2a800 2c 20 22 64 61 74 61 62 61 73 65 73 22 2c 20 6e  , "databases", n
2a810 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53 68 65 6c  )==0 ){.    Shel
2a820 6c 53 74 61 74 65 20 64 61 74 61 3b 0a 20 20 20  lState data;.   
2a830 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d   char *zErrMsg =
2a840 20 30 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   0;.    open_db(
2a850 70 2c 20 30 29 3b 0a 20 20 20 20 6d 65 6d 63 70  p, 0);.    memcp
2a860 79 28 26 64 61 74 61 2c 20 70 2c 20 73 69 7a 65  y(&data, p, size
2a870 6f 66 28 64 61 74 61 29 29 3b 0a 20 20 20 20 64  of(data));.    d
2a880 61 74 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d  ata.showHeader =
2a890 20 30 3b 0a 20 20 20 20 64 61 74 61 2e 63 4d 6f   0;.    data.cMo
2a8a0 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d  de = data.mode =
2a8b0 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 20 20   MODE_List;.    
2a8c0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
2a8d0 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 63 6f 6c  (sizeof(data.col
2a8e0 53 65 70 61 72 61 74 6f 72 29 2c 64 61 74 61 2e  Separator),data.
2a8f0 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 22 3a 20  colSeparator,": 
2a900 22 29 3b 0a 20 20 20 20 64 61 74 61 2e 63 6e 74  ");.    data.cnt
2a910 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
2a920 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53  3_exec(p->db, "S
2a930 45 4c 45 43 54 20 6e 61 6d 65 2c 20 66 69 6c 65  ELECT name, file
2a940 20 46 52 4f 4d 20 70 72 61 67 6d 61 5f 64 61 74   FROM pragma_dat
2a950 61 62 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20  abase_list",.   
2a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
2a970 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c 20 26  llback, &data, &
2a980 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66  zErrMsg);.    if
2a990 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20  ( zErrMsg ){.   
2a9a0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
2a9b0 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 25 73  tderr,"Error: %s
2a9c0 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20  \n", zErrMsg);. 
2a9d0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
2a9e0 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  e(zErrMsg);.    
2a9f0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
2aa00 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
2aa10 3d 3d 27 64 27 20 26 26 20 73 74 72 6e 63 6d 70  =='d' && strncmp
2aa20 28 61 7a 41 72 67 5b 30 5d 2c 20 22 64 62 69 6e  (azArg[0], "dbin
2aa30 66 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  fo", n)==0 ){.  
2aa40 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 64 62 69    rc = shell_dbi
2aa50 6e 66 6f 5f 63 6f 6d 6d 61 6e 64 28 70 2c 20 6e  nfo_command(p, n
2aa60 41 72 67 2c 20 61 7a 41 72 67 29 3b 0a 20 20 7d  Arg, azArg);.  }
2aa70 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
2aa80 64 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  d' && strncmp(az
2aa90 41 72 67 5b 30 5d 2c 20 22 64 75 6d 70 22 2c 20  Arg[0], "dump", 
2aaa0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e  n)==0 ){.    con
2aab0 73 74 20 63 68 61 72 20 2a 7a 4c 69 6b 65 20 3d  st char *zLike =
2aac0 20 30 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   0;.    int i;. 
2aad0 20 20 20 69 6e 74 20 73 61 76 65 64 53 68 6f 77     int savedShow
2aae0 48 65 61 64 65 72 20 3d 20 70 2d 3e 73 68 6f 77  Header = p->show
2aaf0 48 65 61 64 65 72 3b 0a 20 20 20 20 53 68 65 6c  Header;.    Shel
2ab00 6c 43 6c 65 61 72 46 6c 61 67 28 70 2c 20 53 48  lClearFlag(p, SH
2ab10 46 4c 47 5f 50 72 65 73 65 72 76 65 52 6f 77 69  FLG_PreserveRowi
2ab20 64 7c 53 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73  d|SHFLG_Newlines
2ab30 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20  );.    for(i=1; 
2ab40 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2ab50 20 20 20 20 69 66 28 20 61 7a 41 72 67 5b 69 5d      if( azArg[i]
2ab60 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
2ab70 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
2ab80 7a 20 3d 20 61 7a 41 72 67 5b 69 5d 2b 31 3b 0a  z = azArg[i]+1;.
2ab90 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d          if( z[0]
2aba0 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20  =='-' ) z++;.   
2abb0 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
2abc0 7a 2c 22 70 72 65 73 65 72 76 65 2d 72 6f 77 69  z,"preserve-rowi
2abd0 64 73 22 29 3d 3d 30 20 29 7b 0a 23 69 66 64 65  ds")==0 ){.#ifde
2abe0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2abf0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20  RTUALTABLE.     
2ac00 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2ac10 73 74 64 65 72 72 2c 20 22 54 68 65 20 2d 2d 70  stderr, "The --p
2ac20 72 65 73 65 72 76 65 2d 72 6f 77 69 64 73 20 6f  reserve-rowids o
2ac30 70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6f 6d  ption is not com
2ac40 70 61 74 69 62 6c 65 22 0a 20 20 20 20 20 20 20  patible".       
2ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac60 20 20 20 20 20 20 22 20 77 69 74 68 20 53 51 4c        " with SQL
2ac70 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2ac80 54 41 42 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20  TABLE\n");.     
2ac90 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2aca0 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2acb0 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 23  _command_exit;.#
2acc0 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 53  else.          S
2acd0 68 65 6c 6c 53 65 74 46 6c 61 67 28 70 2c 20 53  hellSetFlag(p, S
2ace0 48 46 4c 47 5f 50 72 65 73 65 72 76 65 52 6f 77  HFLG_PreserveRow
2acf0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  id);.#endif.    
2ad00 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
2ad10 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22    if( strcmp(z,"
2ad20 6e 65 77 6c 69 6e 65 73 22 29 3d 3d 30 20 29 7b  newlines")==0 ){
2ad30 0a 20 20 20 20 20 20 20 20 20 20 53 68 65 6c 6c  .          Shell
2ad40 53 65 74 46 6c 61 67 28 70 2c 20 53 48 46 4c 47  SetFlag(p, SHFLG
2ad50 5f 4e 65 77 6c 69 6e 65 73 29 3b 0a 20 20 20 20  _Newlines);.    
2ad60 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
2ad70 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61    {.          ra
2ad80 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2ad90 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e   "Unknown option
2ada0 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 2e 64 75   \"%s\" on \".du
2adb0 6d 70 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 69  mp\"\n", azArg[i
2adc0 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63  ]);.          rc
2add0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   = 1;.          
2ade0 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2adf0 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 20 20  d_exit;.        
2ae00 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  }.      }else if
2ae10 28 20 7a 4c 69 6b 65 20 29 7b 0a 20 20 20 20 20  ( zLike ){.     
2ae20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2ae30 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 64  derr, "Usage: .d
2ae40 75 6d 70 20 3f 2d 2d 70 72 65 73 65 72 76 65 2d  ump ?--preserve-
2ae50 72 6f 77 69 64 73 3f 20 22 0a 20 20 20 20 20 20  rowids? ".      
2ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae70 20 20 20 20 20 22 3f 2d 2d 6e 65 77 6c 69 6e 65       "?--newline
2ae80 73 3f 20 3f 4c 49 4b 45 2d 50 41 54 54 45 52 4e  s? ?LIKE-PATTERN
2ae90 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72  ?\n");.        r
2aea0 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67  c = 1;.        g
2aeb0 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
2aec0 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 65 6c  _exit;.      }el
2aed0 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69 6b  se{.        zLik
2aee0 65 20 3d 20 61 7a 41 72 67 5b 69 5d 3b 0a 20 20  e = azArg[i];.  
2aef0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2af00 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
2af10 20 20 20 2f 2a 20 57 68 65 6e 20 70 6c 61 79 69     /* When playi
2af20 6e 67 20 62 61 63 6b 20 61 20 22 64 75 6d 70 22  ng back a "dump"
2af30 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6d 69  , the content mi
2af40 67 68 74 20 61 70 70 65 61 72 20 69 6e 20 61 6e  ght appear in an
2af50 20 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20 77 68   order.    ** wh
2af60 69 63 68 20 63 61 75 73 65 73 20 69 6d 6d 65 64  ich causes immed
2af70 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
2af80 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 6f 20   constraints to 
2af90 62 65 20 76 69 6f 6c 61 74 65 64 2e 0a 20 20 20  be violated..   
2afa0 20 2a 2a 20 53 6f 20 64 69 73 61 62 6c 65 20 66   ** So disable f
2afb0 6f 72 65 69 67 6e 2d 6b 65 79 20 63 6f 6e 73 74  oreign-key const
2afc0 72 61 69 6e 74 20 65 6e 66 6f 72 63 65 6d 65 6e  raint enforcemen
2afd0 74 20 74 6f 20 70 72 65 76 65 6e 74 20 70 72 6f  t to prevent pro
2afe0 62 6c 65 6d 73 2e 20 2a 2f 0a 20 20 20 20 72 61  blems. */.    ra
2aff0 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
2b000 20 22 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e   "PRAGMA foreign
2b010 5f 6b 65 79 73 3d 4f 46 46 3b 5c 6e 22 29 3b 0a  _keys=OFF;\n");.
2b020 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
2b030 2d 3e 6f 75 74 2c 20 22 42 45 47 49 4e 20 54 52  ->out, "BEGIN TR
2b040 41 4e 53 41 43 54 49 4f 4e 3b 5c 6e 22 29 3b 0a  ANSACTION;\n");.
2b050 20 20 20 20 70 2d 3e 77 72 69 74 61 62 6c 65 53      p->writableS
2b060 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 70  chema = 0;.    p
2b070 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30  ->showHeader = 0
2b080 3b 0a 20 20 20 20 2f 2a 20 53 65 74 20 77 72 69  ;.    /* Set wri
2b090 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 20  table_schema=ON 
2b0a0 73 69 6e 63 65 20 64 6f 69 6e 67 20 73 6f 20 66  since doing so f
2b0b0 6f 72 63 65 73 20 53 51 4c 69 74 65 20 74 6f 20  orces SQLite to 
2b0c0 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20 20 20 2a  initialize.    *
2b0d0 2a 20 61 73 20 6d 75 63 68 20 6f 66 20 74 68 65  * as much of the
2b0e0 20 73 63 68 65 6d 61 20 61 73 20 69 74 20 63 61   schema as it ca
2b0f0 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 73 71  n even if the sq
2b100 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
2b110 65 20 69 73 0a 20 20 20 20 2a 2a 20 63 6f 72 72  e is.    ** corr
2b120 75 70 74 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69  upt. */.    sqli
2b130 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
2b140 22 53 41 56 45 50 4f 49 4e 54 20 64 75 6d 70 3b  "SAVEPOINT dump;
2b150 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65   PRAGMA writable
2b160 5f 73 63 68 65 6d 61 3d 4f 4e 22 2c 20 30 2c 20  _schema=ON", 0, 
2b170 30 2c 20 30 29 3b 0a 20 20 20 20 70 2d 3e 6e 45  0, 0);.    p->nE
2b180 72 72 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  rr = 0;.    if( 
2b190 7a 4c 69 6b 65 3d 3d 30 20 29 7b 0a 20 20 20 20  zLike==0 ){.    
2b1a0 20 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64 75 6d    run_schema_dum
2b1b0 70 5f 71 75 65 72 79 28 70 2c 0a 20 20 20 20 20  p_query(p,.     
2b1c0 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
2b1d0 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20   type, sql FROM 
2b1e0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 0a  sqlite_master ".
2b1f0 20 20 20 20 20 20 20 20 22 57 48 45 52 45 20 73          "WHERE s
2b200 71 6c 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20  ql NOT NULL AND 
2b210 74 79 70 65 3d 3d 27 74 61 62 6c 65 27 20 41 4e  type=='table' AN
2b220 44 20 6e 61 6d 65 21 3d 27 73 71 6c 69 74 65 5f  D name!='sqlite_
2b230 73 65 71 75 65 6e 63 65 27 22 0a 20 20 20 20 20  sequence'".     
2b240 20 29 3b 0a 20 20 20 20 20 20 72 75 6e 5f 73 63   );.      run_sc
2b250 68 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28  hema_dump_query(
2b260 70 2c 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45  p,.        "SELE
2b270 43 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73  CT name, type, s
2b280 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ql FROM sqlite_m
2b290 61 73 74 65 72 20 22 0a 20 20 20 20 20 20 20 20  aster ".        
2b2a0 22 57 48 45 52 45 20 6e 61 6d 65 3d 3d 27 73 71  "WHERE name=='sq
2b2b0 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 27 22 0a  lite_sequence'".
2b2c0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
2b2d0 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f 71 75  un_table_dump_qu
2b2e0 65 72 79 28 70 2c 0a 20 20 20 20 20 20 20 20 22  ery(p,.        "
2b2f0 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20  SELECT sql FROM 
2b300 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 0a  sqlite_master ".
2b310 20 20 20 20 20 20 20 20 22 57 48 45 52 45 20 73          "WHERE s
2b320 71 6c 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20  ql NOT NULL AND 
2b330 74 79 70 65 20 49 4e 20 28 27 69 6e 64 65 78 27  type IN ('index'
2b340 2c 27 74 72 69 67 67 65 72 27 2c 27 76 69 65 77  ,'trigger','view
2b350 27 29 22 2c 20 30 0a 20 20 20 20 20 20 29 3b 0a  ')", 0.      );.
2b360 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2b370 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20   char *zSql;.   
2b380 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
2b390 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20  3_mprintf(.     
2b3a0 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
2b3b0 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20   type, sql FROM 
2b3c0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 0a  sqlite_master ".
2b3d0 20 20 20 20 20 20 20 20 22 57 48 45 52 45 20 74          "WHERE t
2b3e0 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 25 51 20  bl_name LIKE %Q 
2b3f0 41 4e 44 20 74 79 70 65 3d 3d 27 74 61 62 6c 65  AND type=='table
2b400 27 22 0a 20 20 20 20 20 20 20 20 22 20 20 41 4e  '".        "  AN
2b410 44 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 22 2c  D sql NOT NULL",
2b420 20 7a 4c 69 6b 65 29 3b 0a 20 20 20 20 20 20 72   zLike);.      r
2b430 75 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71  un_schema_dump_q
2b440 75 65 72 79 28 70 2c 7a 53 71 6c 29 3b 0a 20 20  uery(p,zSql);.  
2b450 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2b460 28 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 7a 53  (zSql);.      zS
2b470 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
2b480 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 22 53  intf(.        "S
2b490 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73  ELECT sql FROM s
2b4a0 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 0a 20  qlite_master ". 
2b4b0 20 20 20 20 20 20 20 22 57 48 45 52 45 20 73 71         "WHERE sq
2b4c0 6c 20 4e 4f 54 20 4e 55 4c 4c 22 0a 20 20 20 20  l NOT NULL".    
2b4d0 20 20 20 20 22 20 20 41 4e 44 20 74 79 70 65 20      "  AND type 
2b4e0 49 4e 20 28 27 69 6e 64 65 78 27 2c 27 74 72 69  IN ('index','tri
2b4f0 67 67 65 72 27 2c 27 76 69 65 77 27 29 22 0a 20  gger','view')". 
2b500 20 20 20 20 20 20 20 22 20 20 41 4e 44 20 74 62         "  AND tb
2b510 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 25 51 22 2c  l_name LIKE %Q",
2b520 20 7a 4c 69 6b 65 29 3b 0a 20 20 20 20 20 20 72   zLike);.      r
2b530 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f 71 75  un_table_dump_qu
2b540 65 72 79 28 70 2c 20 7a 53 71 6c 2c 20 30 29 3b  ery(p, zSql, 0);
2b550 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
2b560 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 7d  ree(zSql);.    }
2b570 0a 20 20 20 20 69 66 28 20 70 2d 3e 77 72 69 74  .    if( p->writ
2b580 61 62 6c 65 53 63 68 65 6d 61 20 29 7b 0a 20 20  ableSchema ){.  
2b590 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
2b5a0 2d 3e 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 77  ->out, "PRAGMA w
2b5b0 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
2b5c0 46 46 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 70  FF;\n");.      p
2b5d0 2d 3e 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61  ->writableSchema
2b5e0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
2b5f0 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
2b600 64 62 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74  db, "PRAGMA writ
2b610 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 3b  able_schema=OFF;
2b620 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20  ", 0, 0, 0);.   
2b630 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
2b640 3e 64 62 2c 20 22 52 45 4c 45 41 53 45 20 64 75  >db, "RELEASE du
2b650 6d 70 3b 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  mp;", 0, 0, 0);.
2b660 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
2b670 2d 3e 6f 75 74 2c 20 70 2d 3e 6e 45 72 72 20 3f  ->out, p->nErr ?
2b680 20 22 52 4f 4c 4c 42 41 43 4b 3b 20 2d 2d 20 64   "ROLLBACK; -- d
2b690 75 65 20 74 6f 20 65 72 72 6f 72 73 5c 6e 22 20  ue to errors\n" 
2b6a0 3a 20 22 43 4f 4d 4d 49 54 3b 5c 6e 22 29 3b 0a  : "COMMIT;\n");.
2b6b0 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61 64 65      p->showHeade
2b6c0 72 20 3d 20 73 61 76 65 64 53 68 6f 77 48 65 61  r = savedShowHea
2b6d0 64 65 72 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  der;.  }else..  
2b6e0 69 66 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74  if( c=='e' && st
2b6f0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2b700 22 65 63 68 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b  "echo", n)==0 ){
2b710 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32  .    if( nArg==2
2b720 20 29 7b 0a 20 20 20 20 20 20 73 65 74 4f 72 43   ){.      setOrC
2b730 6c 65 61 72 46 6c 61 67 28 70 2c 20 53 48 46 4c  learFlag(p, SHFL
2b740 47 5f 45 63 68 6f 2c 20 61 7a 41 72 67 5b 31 5d  G_Echo, azArg[1]
2b750 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2b760 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2b770 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
2b780 65 63 68 6f 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b  echo on|off\n");
2b790 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
2b7a0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
2b7b0 69 66 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74  if( c=='e' && st
2b7c0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2b7d0 22 65 71 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  "eqp", n)==0 ){.
2b7e0 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
2b7f0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72  ){.      if( str
2b800 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 66 75  cmp(azArg[1],"fu
2b810 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ll")==0 ){.     
2b820 20 20 20 70 2d 3e 61 75 74 6f 45 51 50 20 3d 20     p->autoEQP = 
2b830 41 55 54 4f 45 51 50 5f 66 75 6c 6c 3b 0a 20 20  AUTOEQP_full;.  
2b840 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
2b850 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 74  rcmp(azArg[1],"t
2b860 72 69 67 67 65 72 22 29 3d 3d 30 20 29 7b 0a 20  rigger")==0 ){. 
2b870 20 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45 51         p->autoEQ
2b880 50 20 3d 20 41 55 54 4f 45 51 50 5f 74 72 69 67  P = AUTOEQP_trig
2b890 67 65 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ger;.      }else
2b8a0 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 61 75 74  {.        p->aut
2b8b0 6f 45 51 50 20 3d 20 28 75 38 29 62 6f 6f 6c 65  oEQP = (u8)boole
2b8c0 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d  anValue(azArg[1]
2b8d0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
2b8e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
2b8f0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2b900 55 73 61 67 65 3a 20 2e 65 71 70 20 6f 66 66 7c  Usage: .eqp off|
2b910 6f 6e 7c 74 72 69 67 67 65 72 7c 66 75 6c 6c 5c  on|trigger|full\
2b920 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
2b930 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
2b940 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65 27 20 26  ..  if( c=='e' &
2b950 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
2b960 30 5d 2c 20 22 65 78 69 74 22 2c 20 6e 29 3d 3d  0], "exit", n)==
2b970 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
2b980 67 3e 31 20 26 26 20 28 72 63 20 3d 20 28 69 6e  g>1 && (rc = (in
2b990 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61  t)integerValue(a
2b9a0 7a 41 72 67 5b 31 5d 29 29 21 3d 30 20 29 20 65  zArg[1]))!=0 ) e
2b9b0 78 69 74 28 72 63 29 3b 0a 20 20 20 20 72 63 20  xit(rc);.    rc 
2b9c0 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  = 2;.  }else..  
2b9d0 2f 2a 20 54 68 65 20 22 2e 65 78 70 6c 61 69 6e  /* The ".explain
2b9e0 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 75 74  " command is aut
2b9f0 6f 6d 61 74 69 63 20 6e 6f 77 2e 20 20 49 74 20  omatic now.  It 
2ba00 69 73 20 6c 61 72 67 65 6c 79 20 70 6f 69 6e 74  is largely point
2ba10 6c 65 73 73 2e 20 20 49 74 0a 20 20 2a 2a 20 72  less.  It.  ** r
2ba20 65 74 61 69 6e 65 64 20 70 75 72 65 6c 79 20 66  etained purely f
2ba30 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
2ba40 70 61 74 69 62 69 6c 69 74 79 20 2a 2f 0a 20 20  patibility */.  
2ba50 69 66 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74  if( c=='e' && st
2ba60 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2ba70 22 65 78 70 6c 61 69 6e 22 2c 20 6e 29 3d 3d 30  "explain", n)==0
2ba80 20 29 7b 0a 20 20 20 20 69 6e 74 20 76 61 6c 20   ){.    int val 
2ba90 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 6e 41 72  = 1;.    if( nAr
2baa0 67 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20 69 66  g>=2 ){.      if
2bab0 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31  ( strcmp(azArg[1
2bac0 5d 2c 22 61 75 74 6f 22 29 3d 3d 30 20 29 7b 0a  ],"auto")==0 ){.
2bad0 20 20 20 20 20 20 20 20 76 61 6c 20 3d 20 39 39          val = 99
2bae0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2baf0 20 20 20 20 20 20 20 76 61 6c 20 3d 20 20 62 6f         val =  bo
2bb00 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
2bb10 5b 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [1]);.      }.  
2bb20 20 20 7d 0a 20 20 20 20 69 66 28 20 76 61 6c 3d    }.    if( val=
2bb30 3d 31 20 26 26 20 70 2d 3e 6d 6f 64 65 21 3d 4d  =1 && p->mode!=M
2bb40 4f 44 45 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20  ODE_Explain ){. 
2bb50 20 20 20 20 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f       p->normalMo
2bb60 64 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20  de = p->mode;.  
2bb70 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
2bb80 44 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20  DE_Explain;.    
2bb90 20 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e    p->autoExplain
2bba0 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 0;.    }else 
2bbb0 69 66 28 20 76 61 6c 3d 3d 30 20 29 7b 0a 20 20  if( val==0 ){.  
2bbc0 20 20 20 20 69 66 28 20 70 2d 3e 6d 6f 64 65 3d      if( p->mode=
2bbd0 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 29 20  =MODE_Explain ) 
2bbe0 70 2d 3e 6d 6f 64 65 20 3d 20 70 2d 3e 6e 6f 72  p->mode = p->nor
2bbf0 6d 61 6c 4d 6f 64 65 3b 0a 20 20 20 20 20 20 70  malMode;.      p
2bc00 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20  ->autoExplain = 
2bc10 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
2bc20 20 76 61 6c 3d 3d 39 39 20 29 7b 0a 20 20 20 20   val==99 ){.    
2bc30 20 20 69 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d    if( p->mode==M
2bc40 4f 44 45 5f 45 78 70 6c 61 69 6e 20 29 20 70 2d  ODE_Explain ) p-
2bc50 3e 6d 6f 64 65 20 3d 20 70 2d 3e 6e 6f 72 6d 61  >mode = p->norma
2bc60 6c 4d 6f 64 65 3b 0a 20 20 20 20 20 20 70 2d 3e  lMode;.      p->
2bc70 61 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20 31 3b  autoExplain = 1;
2bc80 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
2bc90 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2bca0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2bcb0 0a 20 20 69 66 28 20 63 3d 3d 27 65 27 20 26 26  .  if( c=='e' &&
2bcc0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2bcd0 5d 2c 20 22 65 78 70 65 72 74 22 2c 20 6e 29 3d  ], "expert", n)=
2bce0 3d 30 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64  =0 ){.    open_d
2bcf0 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 65 78 70  b(p, 0);.    exp
2bd00 65 72 74 44 6f 74 43 6f 6d 6d 61 6e 64 28 70 2c  ertDotCommand(p,
2bd10 20 61 7a 41 72 67 2c 20 6e 41 72 67 29 3b 0a 20   azArg, nArg);. 
2bd20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
2bd30 20 69 66 28 20 63 3d 3d 27 66 27 20 26 26 20 73   if( c=='f' && s
2bd40 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
2bd50 20 22 66 75 6c 6c 73 63 68 65 6d 61 22 2c 20 6e   "fullschema", n
2bd60 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53 68 65 6c  )==0 ){.    Shel
2bd70 6c 53 74 61 74 65 20 64 61 74 61 3b 0a 20 20 20  lState data;.   
2bd80 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d   char *zErrMsg =
2bd90 20 30 3b 0a 20 20 20 20 69 6e 74 20 64 6f 53 74   0;.    int doSt
2bda0 61 74 73 20 3d 20 30 3b 0a 20 20 20 20 6d 65 6d  ats = 0;.    mem
2bdb0 63 70 79 28 26 64 61 74 61 2c 20 70 2c 20 73 69  cpy(&data, p, si
2bdc0 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a 20 20 20  zeof(data));.   
2bdd0 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65 72   data.showHeader
2bde0 20 3d 20 30 3b 0a 20 20 20 20 64 61 74 61 2e 63   = 0;.    data.c
2bdf0 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65  Mode = data.mode
2be00 20 3d 20 4d 4f 44 45 5f 53 65 6d 69 3b 0a 20 20   = MODE_Semi;.  
2be10 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 26 26    if( nArg==2 &&
2be20 20 6f 70 74 69 6f 6e 4d 61 74 63 68 28 61 7a 41   optionMatch(azA
2be30 72 67 5b 31 5d 2c 20 22 69 6e 64 65 6e 74 22 29  rg[1], "indent")
2be40 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 63   ){.      data.c
2be50 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65  Mode = data.mode
2be60 20 3d 20 4d 4f 44 45 5f 50 72 65 74 74 79 3b 0a   = MODE_Pretty;.
2be70 20 20 20 20 20 20 6e 41 72 67 20 3d 20 31 3b 0a        nArg = 1;.
2be80 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41      }.    if( nA
2be90 72 67 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 72  rg!=1 ){.      r
2bea0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
2beb0 2c 20 22 55 73 61 67 65 3a 20 2e 66 75 6c 6c 73  , "Usage: .fulls
2bec0 63 68 65 6d 61 20 3f 2d 2d 69 6e 64 65 6e 74 3f  chema ?--indent?
2bed0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
2bee0 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
2bef0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
2bf00 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e  ;.    }.    open
2bf10 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 72  _db(p, 0);.    r
2bf20 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
2bf30 28 70 2d 3e 64 62 2c 0a 20 20 20 20 20 20 20 22  (p->db,.       "
2bf40 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 22  SELECT sql FROM"
2bf50 0a 20 20 20 20 20 20 20 22 20 20 28 53 45 4c 45  .       "  (SELE
2bf60 43 54 20 73 71 6c 20 73 71 6c 2c 20 74 79 70 65  CT sql sql, type
2bf70 20 74 79 70 65 2c 20 74 62 6c 5f 6e 61 6d 65 20   type, tbl_name 
2bf80 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 20 6e  tbl_name, name n
2bf90 61 6d 65 2c 20 72 6f 77 69 64 20 78 22 0a 20 20  ame, rowid x".  
2bfa0 20 20 20 20 20 22 20 20 20 20 20 46 52 4f 4d 20       "     FROM 
2bfb0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 55 4e  sqlite_master UN
2bfc0 49 4f 4e 20 41 4c 4c 22 0a 20 20 20 20 20 20 20  ION ALL".       
2bfd0 22 20 20 20 53 45 4c 45 43 54 20 73 71 6c 2c 20  "   SELECT sql, 
2bfe0 74 79 70 65 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20  type, tbl_name, 
2bff0 6e 61 6d 65 2c 20 72 6f 77 69 64 20 46 52 4f 4d  name, rowid FROM
2c000 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
2c010 74 65 72 29 20 22 0a 20 20 20 20 20 20 20 22 57  ter) ".       "W
2c020 48 45 52 45 20 74 79 70 65 21 3d 27 6d 65 74 61  HERE type!='meta
2c030 27 20 41 4e 44 20 73 71 6c 20 4e 4f 54 4e 55 4c  ' AND sql NOTNUL
2c040 4c 20 41 4e 44 20 6e 61 6d 65 20 4e 4f 54 20 4c  L AND name NOT L
2c050 49 4b 45 20 27 73 71 6c 69 74 65 5f 25 27 20 22  IKE 'sqlite_%' "
2c060 0a 20 20 20 20 20 20 20 22 4f 52 44 45 52 20 42  .       "ORDER B
2c070 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
2c080 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61   callback, &data
2c090 2c 20 26 7a 45 72 72 4d 73 67 0a 20 20 20 20 29  , &zErrMsg.    )
2c0a0 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
2c0b0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2c0c0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
2c0d0 53 74 6d 74 3b 0a 20 20 20 20 20 20 72 63 20 3d  Stmt;.      rc =
2c0e0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
2c0f0 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20 20 20 20  _v2(p->db,.     
2c100 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43            "SELEC
2c110 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 73 71 6c  T rowid FROM sql
2c120 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20  ite_master".    
2c130 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45             " WHE
2c140 52 45 20 6e 61 6d 65 20 47 4c 4f 42 20 27 73 71  RE name GLOB 'sq
2c150 6c 69 74 65 5f 73 74 61 74 5b 31 33 34 5d 27 22  lite_stat[134]'"
2c160 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2c170 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
2c180 0a 20 20 20 20 20 20 64 6f 53 74 61 74 73 20 3d  .      doStats =
2c190 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
2c1a0 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57  tmt)==SQLITE_ROW
2c1b0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
2c1c0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
2c1d0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64  .    }.    if( d
2c1e0 6f 53 74 61 74 73 3d 3d 30 20 29 7b 0a 20 20 20  oStats==0 ){.   
2c1f0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
2c200 3e 6f 75 74 2c 20 22 2f 2a 20 4e 6f 20 53 54 41  >out, "/* No STA
2c210 54 20 74 61 62 6c 65 73 20 61 76 61 69 6c 61 62  T tables availab
2c220 6c 65 20 2a 2f 5c 6e 22 29 3b 0a 20 20 20 20 7d  le */\n");.    }
2c230 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
2c240 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2c250 41 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d  ANALYZE sqlite_m
2c260 61 73 74 65 72 3b 5c 6e 22 29 3b 0a 20 20 20 20  aster;\n");.    
2c270 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70    sqlite3_exec(p
2c280 2d 3e 64 62 2c 20 22 53 45 4c 45 43 54 20 27 41  ->db, "SELECT 'A
2c290 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61  NALYZE sqlite_ma
2c2a0 73 74 65 72 27 22 2c 0a 20 20 20 20 20 20 20 20  ster'",.        
2c2b0 20 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62             callb
2c2c0 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72  ack, &data, &zEr
2c2d0 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 64 61 74  rMsg);.      dat
2c2e0 61 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d  a.cMode = data.m
2c2f0 6f 64 65 20 3d 20 4d 4f 44 45 5f 49 6e 73 65 72  ode = MODE_Inser
2c300 74 3b 0a 20 20 20 20 20 20 64 61 74 61 2e 7a 44  t;.      data.zD
2c310 65 73 74 54 61 62 6c 65 20 3d 20 22 73 71 6c 69  estTable = "sqli
2c320 74 65 5f 73 74 61 74 31 22 3b 0a 20 20 20 20 20  te_stat1";.     
2c330 20 73 68 65 6c 6c 5f 65 78 65 63 28 70 2c 20 22   shell_exec(p, "
2c340 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
2c350 6c 69 74 65 5f 73 74 61 74 31 22 2c 20 26 7a 45  lite_stat1", &zE
2c360 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 64 61  rrMsg);.      da
2c370 74 61 2e 7a 44 65 73 74 54 61 62 6c 65 20 3d 20  ta.zDestTable = 
2c380 22 73 71 6c 69 74 65 5f 73 74 61 74 33 22 3b 0a  "sqlite_stat3";.
2c390 20 20 20 20 20 20 73 68 65 6c 6c 5f 65 78 65 63        shell_exec
2c3a0 28 70 2c 20 22 53 45 4c 45 43 54 20 2a 20 46 52  (p, "SELECT * FR
2c3b0 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61 74 33 22  OM sqlite_stat3"
2c3c0 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  , &zErrMsg);.   
2c3d0 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62     data.zDestTab
2c3e0 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61  le = "sqlite_sta
2c3f0 74 34 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c  t4";.      shell
2c400 5f 65 78 65 63 28 70 2c 20 22 53 45 4c 45 43 54  _exec(p, "SELECT
2c410 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73   * FROM sqlite_s
2c420 74 61 74 34 22 2c 20 26 7a 45 72 72 4d 73 67 29  tat4", &zErrMsg)
2c430 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  ;.      raw_prin
2c440 74 66 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c  tf(p->out, "ANAL
2c450 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  YZE sqlite_maste
2c460 72 3b 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20  r;\n");.    }.  
2c470 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
2c480 27 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'h' && strncmp(a
2c490 7a 41 72 67 5b 30 5d 2c 20 22 68 65 61 64 65 72  zArg[0], "header
2c4a0 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  s", n)==0 ){.   
2c4b0 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
2c4c0 20 20 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61        p->showHea
2c4d0 64 65 72 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c  der = booleanVal
2c4e0 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ue(azArg[1]);.  
2c4f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
2c500 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
2c510 2c 20 22 55 73 61 67 65 3a 20 2e 68 65 61 64 65  , "Usage: .heade
2c520 72 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20  rs on|off\n");. 
2c530 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2c540 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
2c550 28 20 63 3d 3d 27 68 27 20 26 26 20 73 74 72 6e  ( c=='h' && strn
2c560 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 68  cmp(azArg[0], "h
2c570 65 6c 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  elp", n)==0 ){. 
2c580 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
2c590 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 48 65  ->out, "%s", zHe
2c5a0 6c 70 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  lp);.  }else..  
2c5b0 69 66 28 20 63 3d 3d 27 69 27 20 26 26 20 73 74  if( c=='i' && st
2c5c0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2c5d0 22 69 6d 70 6f 72 74 22 2c 20 6e 29 3d 3d 30 20  "import", n)==0 
2c5e0 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 61  ){.    char *zTa
2c5f0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
2c600 20 20 20 2f 2a 20 49 6e 73 65 72 74 20 64 61 74     /* Insert dat
2c610 61 20 69 6e 74 6f 20 74 68 69 73 20 74 61 62 6c  a into this tabl
2c620 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
2c630 46 69 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  File;           
2c640 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
2c650 66 69 6c 65 20 74 6f 20 65 78 74 72 61 20 63 6f  file to extra co
2c660 6e 74 65 6e 74 20 66 72 6f 6d 20 2a 2f 0a 20 20  ntent from */.  
2c670 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
2c680 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20 2f 2a  pStmt = NULL; /*
2c690 20 41 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a   A statement */.
2c6a0 20 20 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20      int nCol;   
2c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
2c6d0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
2c6e0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 42 79  e */.    int nBy
2c6f0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
2c700 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2c710 66 20 62 79 74 65 73 20 69 6e 20 61 6e 20 53 51  f bytes in an SQ
2c720 4c 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 20 20  L string */.    
2c730 69 6e 74 20 69 2c 20 6a 3b 20 20 20 20 20 20 20  int i, j;       
2c740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2c750 6f 6f 70 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  oop counters */.
2c760 20 20 20 20 69 6e 74 20 6e 65 65 64 43 6f 6d 6d      int needComm
2c770 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
2c780 2f 2a 20 54 72 75 65 20 74 6f 20 43 4f 4d 4d 49  /* True to COMMI
2c790 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 61 74  T or ROLLBACK at
2c7a0 20 65 6e 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20   end */.    int 
2c7b0 6e 53 65 70 3b 20 20 20 20 20 20 20 20 20 20 20  nSep;           
2c7c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
2c7d0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 70 2d  r of bytes in p-
2c7e0 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 5d 20  >colSeparator[] 
2c7f0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71  */.    char *zSq
2c800 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
2c810 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 73 74 61     /* An SQL sta
2c820 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20 20 49 6d  tement */.    Im
2c830 70 6f 72 74 43 74 78 20 73 43 74 78 3b 20 20 20  portCtx sCtx;   
2c840 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 61            /* Rea
2c850 64 65 72 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  der context */. 
2c860 20 20 20 63 68 61 72 20 2a 28 53 51 4c 49 54 45     char *(SQLITE
2c870 5f 43 44 45 43 4c 20 2a 78 52 65 61 64 29 28 49  _CDECL *xRead)(I
2c880 6d 70 6f 72 74 43 74 78 2a 29 3b 20 2f 2a 20 46  mportCtx*); /* F
2c890 75 6e 63 20 74 6f 20 72 65 61 64 20 6f 6e 65 20  unc to read one 
2c8a0 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 69 6e 74  value */.    int
2c8b0 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a   (SQLITE_CDECL *
2c8c0 78 43 6c 6f 73 65 72 29 28 46 49 4c 45 2a 29 3b  xCloser)(FILE*);
2c8d0 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 20 74 6f        /* Func to
2c8e0 20 63 6c 6f 73 65 20 66 69 6c 65 20 2a 2f 0a 0a   close file */..
2c8f0 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 33 20      if( nArg!=3 
2c900 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
2c910 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
2c920 67 65 3a 20 2e 69 6d 70 6f 72 74 20 46 49 4c 45  ge: .import FILE
2c930 20 54 41 42 4c 45 5c 6e 22 29 3b 0a 20 20 20 20   TABLE\n");.    
2c940 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
2c950 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
2c960 20 20 20 20 7a 46 69 6c 65 20 3d 20 61 7a 41 72      zFile = azAr
2c970 67 5b 31 5d 3b 0a 20 20 20 20 7a 54 61 62 6c 65  g[1];.    zTable
2c980 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 20 20 20   = azArg[2];.   
2c990 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74 20 3d   seenInterrupt =
2c9a0 20 30 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26   0;.    memset(&
2c9b0 73 43 74 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  sCtx, 0, sizeof(
2c9c0 73 43 74 78 29 29 3b 0a 20 20 20 20 6f 70 65 6e  sCtx));.    open
2c9d0 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6e  _db(p, 0);.    n
2c9e0 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70  Sep = strlen30(p
2c9f0 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b  ->colSeparator);
2ca00 0a 20 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30  .    if( nSep==0
2ca10 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
2ca20 69 6e 74 66 28 73 74 64 65 72 72 2c 0a 20 20 20  intf(stderr,.   
2ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45                "E
2ca40 72 72 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 63  rror: non-null c
2ca50 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20  olumn separator 
2ca60 72 65 71 75 69 72 65 64 20 66 6f 72 20 69 6d 70  required for imp
2ca70 6f 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  ort\n");.      r
2ca80 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
2ca90 20 20 20 69 66 28 20 6e 53 65 70 3e 31 20 29 7b     if( nSep>1 ){
2caa0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
2cab0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
2cac0 3a 20 6d 75 6c 74 69 2d 63 68 61 72 61 63 74 65  : multi-characte
2cad0 72 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74  r column separat
2cae0 6f 72 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 22  ors not allowed"
2caf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cb00 20 20 20 20 20 20 20 22 20 66 6f 72 20 69 6d 70         " for imp
2cb10 6f 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  ort\n");.      r
2cb20 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
2cb30 20 20 20 6e 53 65 70 20 3d 20 73 74 72 6c 65 6e     nSep = strlen
2cb40 33 30 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  30(p->rowSeparat
2cb50 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 6e 53 65  or);.    if( nSe
2cb60 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61  p==0 ){.      ra
2cb70 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2cb80 20 22 45 72 72 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c   "Error: non-nul
2cb90 6c 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 20  l row separator 
2cba0 72 65 71 75 69 72 65 64 20 66 6f 72 20 69 6d 70  required for imp
2cbb0 6f 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  ort\n");.      r
2cbc0 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
2cbd0 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 32 20 26     if( nSep==2 &
2cbe0 26 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f  & p->mode==MODE_
2cbf0 43 73 76 20 26 26 20 73 74 72 63 6d 70 28 70 2d  Csv && strcmp(p-
2cc00 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53  >rowSeparator, S
2cc10 45 50 5f 43 72 4c 66 29 3d 3d 30 20 29 7b 0a 20  EP_CrLf)==0 ){. 
2cc20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 69 6d 70       /* When imp
2cc30 6f 72 74 69 6e 67 20 43 53 56 20 28 6f 6e 6c 79  orting CSV (only
2cc40 29 2c 20 69 66 20 74 68 65 20 72 6f 77 20 73 65  ), if the row se
2cc50 70 61 72 61 74 6f 72 20 69 73 20 73 65 74 20 74  parator is set t
2cc60 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 64  o the.      ** d
2cc70 65 66 61 75 6c 74 20 6f 75 74 70 75 74 20 72 6f  efault output ro
2cc80 77 20 73 65 70 61 72 61 74 6f 72 2c 20 63 68 61  w separator, cha
2cc90 6e 67 65 20 69 74 20 74 6f 20 74 68 65 20 64 65  nge it to the de
2cca0 66 61 75 6c 74 20 69 6e 70 75 74 0a 20 20 20 20  fault input.    
2ccb0 20 20 2a 2a 20 72 6f 77 20 73 65 70 61 72 61 74    ** row separat
2ccc0 6f 72 2e 20 20 54 68 69 73 20 61 76 6f 69 64 73  or.  This avoids
2ccd0 20 68 61 76 69 6e 67 20 74 6f 20 6d 61 69 6e 74   having to maint
2cce0 61 69 6e 20 64 69 66 66 65 72 65 6e 74 20 69 6e  ain different in
2ccf0 70 75 74 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  put.      ** and
2cd00 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65 70 61   output row sepa
2cd10 72 61 74 6f 72 73 2e 20 2a 2f 0a 20 20 20 20 20  rators. */.     
2cd20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2cd30 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53  f(sizeof(p->rowS
2cd40 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f  eparator), p->ro
2cd50 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f  wSeparator, SEP_
2cd60 52 6f 77 29 3b 0a 20 20 20 20 20 20 6e 53 65 70  Row);.      nSep
2cd70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 72   = strlen30(p->r
2cd80 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
2cd90 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 53 65 70    }.    if( nSep
2cda0 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  >1 ){.      raw_
2cdb0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2cdc0 45 72 72 6f 72 3a 20 6d 75 6c 74 69 2d 63 68 61  Error: multi-cha
2cdd0 72 61 63 74 65 72 20 72 6f 77 20 73 65 70 61 72  racter row separ
2cde0 61 74 6f 72 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  ators not allowe
2cdf0 64 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d".             
2ce00 20 20 20 20 20 20 20 20 20 22 20 66 6f 72 20 69           " for i
2ce10 6d 70 6f 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20  mport\n");.     
2ce20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
2ce30 0a 20 20 20 20 73 43 74 78 2e 7a 46 69 6c 65 20  .    sCtx.zFile 
2ce40 3d 20 7a 46 69 6c 65 3b 0a 20 20 20 20 73 43 74  = zFile;.    sCt
2ce50 78 2e 6e 4c 69 6e 65 20 3d 20 31 3b 0a 20 20 20  x.nLine = 1;.   
2ce60 20 69 66 28 20 73 43 74 78 2e 7a 46 69 6c 65 5b   if( sCtx.zFile[
2ce70 30 5d 3d 3d 27 7c 27 20 29 7b 0a 23 69 66 64 65  0]=='|' ){.#ifde
2ce80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f  f SQLITE_OMIT_PO
2ce90 50 45 4e 0a 20 20 20 20 20 20 72 61 77 5f 70 72  PEN.      raw_pr
2cea0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
2ceb0 72 6f 72 3a 20 70 69 70 65 73 20 61 72 65 20 6e  ror: pipes are n
2cec0 6f 74 20 73 75 70 70 6f 72 74 65 64 20 69 6e 20  ot supported in 
2ced0 74 68 69 73 20 4f 53 5c 6e 22 29 3b 0a 20 20 20  this OS\n");.   
2cee0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c     return 1;.#el
2cef0 73 65 0a 20 20 20 20 20 20 73 43 74 78 2e 69 6e  se.      sCtx.in
2cf00 20 3d 20 70 6f 70 65 6e 28 73 43 74 78 2e 7a 46   = popen(sCtx.zF
2cf10 69 6c 65 2b 31 2c 20 22 72 22 29 3b 0a 20 20 20  ile+1, "r");.   
2cf20 20 20 20 73 43 74 78 2e 7a 46 69 6c 65 20 3d 20     sCtx.zFile = 
2cf30 22 3c 70 69 70 65 3e 22 3b 0a 20 20 20 20 20 20  "<pipe>";.      
2cf40 78 43 6c 6f 73 65 72 20 3d 20 70 63 6c 6f 73 65  xCloser = pclose
2cf50 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c  ;.#endif.    }el
2cf60 73 65 7b 0a 20 20 20 20 20 20 73 43 74 78 2e 69  se{.      sCtx.i
2cf70 6e 20 3d 20 66 6f 70 65 6e 28 73 43 74 78 2e 7a  n = fopen(sCtx.z
2cf80 46 69 6c 65 2c 20 22 72 62 22 29 3b 0a 20 20 20  File, "rb");.   
2cf90 20 20 20 78 43 6c 6f 73 65 72 20 3d 20 66 63 6c     xCloser = fcl
2cfa0 6f 73 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ose;.    }.    i
2cfb0 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45  f( p->mode==MODE
2cfc0 5f 41 73 63 69 69 20 29 7b 0a 20 20 20 20 20 20  _Ascii ){.      
2cfd0 78 52 65 61 64 20 3d 20 61 73 63 69 69 5f 72 65  xRead = ascii_re
2cfe0 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 3b 0a 20 20  ad_one_field;.  
2cff0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 78    }else{.      x
2d000 52 65 61 64 20 3d 20 63 73 76 5f 72 65 61 64 5f  Read = csv_read_
2d010 6f 6e 65 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d  one_field;.    }
2d020 0a 20 20 20 20 69 66 28 20 73 43 74 78 2e 69 6e  .    if( sCtx.in
2d030 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66  ==0 ){.      utf
2d040 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
2d050 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20   "Error: cannot 
2d060 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20  open \"%s\"\n", 
2d070 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 72 65  zFile);.      re
2d080 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
2d090 20 20 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 3d    sCtx.cColSep =
2d0a0 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72   p->colSeparator
2d0b0 5b 30 5d 3b 0a 20 20 20 20 73 43 74 78 2e 63 52  [0];.    sCtx.cR
2d0c0 6f 77 53 65 70 20 3d 20 70 2d 3e 72 6f 77 53 65  owSep = p->rowSe
2d0d0 70 61 72 61 74 6f 72 5b 30 5d 3b 0a 20 20 20 20  parator[0];.    
2d0e0 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zSql = sqlite3_m
2d0f0 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20 2a  printf("SELECT *
2d100 20 46 52 4f 4d 20 25 73 22 2c 20 7a 54 61 62 6c   FROM %s", zTabl
2d110 65 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  e);.    if( zSql
2d120 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77  ==0 ){.      raw
2d130 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2d140 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d  "Error: out of m
2d150 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20  emory\n");.     
2d160 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e   xCloser(sCtx.in
2d170 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
2d180 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 42 79  1;.    }.    nBy
2d190 74 65 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 53  te = strlen30(zS
2d1a0 71 6c 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  ql);.    rc = sq
2d1b0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
2d1c0 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31  (p->db, zSql, -1
2d1d0 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20  , &pStmt, 0);.  
2d1e0 20 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f    import_append_
2d1f0 63 68 61 72 28 26 73 43 74 78 2c 20 30 29 3b 20  char(&sCtx, 0); 
2d200 20 20 20 2f 2a 20 54 6f 20 65 6e 73 75 72 65 20     /* To ensure 
2d210 73 43 74 78 2e 7a 20 69 73 20 61 6c 6c 6f 63 61  sCtx.z is alloca
2d220 74 65 64 20 2a 2f 0a 20 20 20 20 69 66 28 20 72  ted */.    if( r
2d230 63 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72  c && sqlite3_str
2d240 67 6c 6f 62 28 22 6e 6f 20 73 75 63 68 20 74 61  glob("no such ta
2d250 62 6c 65 3a 20 2a 22 2c 20 73 71 6c 69 74 65 33  ble: *", sqlite3
2d260 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3d  _errmsg(p->db))=
2d270 3d 30 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72  =0 ){.      char
2d280 20 2a 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69   *zCreate = sqli
2d290 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 43 52 45  te3_mprintf("CRE
2d2a0 41 54 45 20 54 41 42 4c 45 20 25 73 22 2c 20 7a  ATE TABLE %s", z
2d2b0 54 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 63 68  Table);.      ch
2d2c0 61 72 20 63 53 65 70 20 3d 20 27 28 27 3b 0a 20  ar cSep = '(';. 
2d2d0 20 20 20 20 20 77 68 69 6c 65 28 20 78 52 65 61       while( xRea
2d2e0 64 28 26 73 43 74 78 29 20 29 7b 0a 20 20 20 20  d(&sCtx) ){.    
2d2f0 20 20 20 20 7a 43 72 65 61 74 65 20 3d 20 73 71      zCreate = sq
2d300 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
2d310 7a 25 63 5c 6e 20 20 5c 22 25 77 5c 22 20 54 45  z%c\n  \"%w\" TE
2d320 58 54 22 2c 20 7a 43 72 65 61 74 65 2c 20 63 53  XT", zCreate, cS
2d330 65 70 2c 20 73 43 74 78 2e 7a 29 3b 0a 20 20 20  ep, sCtx.z);.   
2d340 20 20 20 20 20 63 53 65 70 20 3d 20 27 2c 27 3b       cSep = ',';
2d350 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 43 74  .        if( sCt
2d360 78 2e 63 54 65 72 6d 21 3d 73 43 74 78 2e 63 43  x.cTerm!=sCtx.cC
2d370 6f 6c 53 65 70 20 29 20 62 72 65 61 6b 3b 0a 20  olSep ) break;. 
2d380 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
2d390 20 63 53 65 70 3d 3d 27 28 27 20 29 7b 0a 20 20   cSep=='(' ){.  
2d3a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
2d3b0 65 65 28 7a 43 72 65 61 74 65 29 3b 0a 20 20 20  ee(zCreate);.   
2d3c0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
2d3d0 65 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20  e(sCtx.z);.     
2d3e0 20 20 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e     xCloser(sCtx.
2d3f0 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66  in);.        utf
2d400 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
2d410 22 25 73 3a 20 65 6d 70 74 79 20 66 69 6c 65 5c  "%s: empty file\
2d420 6e 22 2c 20 73 43 74 78 2e 7a 46 69 6c 65 29 3b  n", sCtx.zFile);
2d430 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2d440 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
2d450 20 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74   zCreate = sqlit
2d460 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 5c 6e  e3_mprintf("%z\n
2d470 29 22 2c 20 7a 43 72 65 61 74 65 29 3b 0a 20 20  )", zCreate);.  
2d480 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2d490 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 43 72  _exec(p->db, zCr
2d4a0 65 61 74 65 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  eate, 0, 0, 0);.
2d4b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
2d4c0 65 65 28 7a 43 72 65 61 74 65 29 3b 0a 20 20 20  ee(zCreate);.   
2d4d0 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
2d4e0 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2d4f0 28 73 74 64 65 72 72 2c 20 22 43 52 45 41 54 45  (stderr, "CREATE
2d500 20 54 41 42 4c 45 20 25 73 28 2e 2e 2e 29 20 66   TABLE %s(...) f
2d510 61 69 6c 65 64 3a 20 25 73 5c 6e 22 2c 20 7a 54  ailed: %s\n", zT
2d520 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20  able,.          
2d530 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72        sqlite3_er
2d540 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20  rmsg(p->db));.  
2d550 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
2d560 65 65 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20  ee(sCtx.z);.    
2d570 20 20 20 20 78 43 6c 6f 73 65 72 28 73 43 74 78      xCloser(sCtx
2d580 2e 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 72 65  .in);.        re
2d590 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a  turn 1;.      }.
2d5a0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2d5b0 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
2d5c0 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26  >db, zSql, -1, &
2d5d0 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 7d  pStmt, 0);.    }
2d5e0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
2d5f0 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28  e(zSql);.    if(
2d600 20 72 63 20 29 7b 0a 20 20 20 20 20 20 69 66 20   rc ){.      if 
2d610 28 70 53 74 6d 74 29 20 73 71 6c 69 74 65 33 5f  (pStmt) sqlite3_
2d620 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
2d630 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
2d640 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
2d650 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33  : %s\n", sqlite3
2d660 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b  _errmsg(p->db));
2d670 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72 28 73  .      xCloser(s
2d680 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20 20 72  Ctx.in);.      r
2d690 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
2d6a0 20 20 20 6e 43 6f 6c 20 3d 20 73 71 6c 69 74 65     nCol = sqlite
2d6b0 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70  3_column_count(p
2d6c0 53 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  Stmt);.    sqlit
2d6d0 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
2d6e0 74 29 3b 0a 20 20 20 20 70 53 74 6d 74 20 3d 20  t);.    pStmt = 
2d6f0 30 3b 0a 20 20 20 20 69 66 28 20 6e 43 6f 6c 3d  0;.    if( nCol=
2d700 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 20 2f  =0 ) return 0; /
2d710 2a 20 6e 6f 20 63 6f 6c 75 6d 6e 73 2c 20 6e 6f  * no columns, no
2d720 20 65 72 72 6f 72 20 2a 2f 0a 20 20 20 20 7a 53   error */.    zS
2d730 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  ql = sqlite3_mal
2d740 6c 6f 63 36 34 28 20 6e 42 79 74 65 2a 32 20 2b  loc64( nByte*2 +
2d750 20 32 30 20 2b 20 6e 43 6f 6c 2a 32 20 29 3b 0a   20 + nCol*2 );.
2d760 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20      if( zSql==0 
2d770 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
2d780 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
2d790 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  or: out of memor
2d7a0 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 78 43 6c  y\n");.      xCl
2d7b0 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
2d7c0 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
2d7d0 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
2d7e0 5f 73 6e 70 72 69 6e 74 66 28 6e 42 79 74 65 2b  _snprintf(nByte+
2d7f0 32 30 2c 20 7a 53 71 6c 2c 20 22 49 4e 53 45 52  20, zSql, "INSER
2d800 54 20 49 4e 54 4f 20 5c 22 25 77 5c 22 20 56 41  T INTO \"%w\" VA
2d810 4c 55 45 53 28 3f 22 2c 20 7a 54 61 62 6c 65 29  LUES(?", zTable)
2d820 3b 0a 20 20 20 20 6a 20 3d 20 73 74 72 6c 65 6e  ;.    j = strlen
2d830 33 30 28 7a 53 71 6c 29 3b 0a 20 20 20 20 66 6f  30(zSql);.    fo
2d840 72 28 69 3d 31 3b 20 69 3c 6e 43 6f 6c 3b 20 69  r(i=1; i<nCol; i
2d850 2b 2b 29 7b 0a 20 20 20 20 20 20 7a 53 71 6c 5b  ++){.      zSql[
2d860 6a 2b 2b 5d 20 3d 20 27 2c 27 3b 0a 20 20 20 20  j++] = ',';.    
2d870 20 20 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d 20 27 3f    zSql[j++] = '?
2d880 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71  ';.    }.    zSq
2d890 6c 5b 6a 2b 2b 5d 20 3d 20 27 29 27 3b 0a 20 20  l[j++] = ')';.  
2d8a0 20 20 7a 53 71 6c 5b 6a 5d 20 3d 20 30 3b 0a 20    zSql[j] = 0;. 
2d8b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
2d8c0 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
2d8d0 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
2d8e0 6d 74 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69  mt, 0);.    sqli
2d8f0 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
2d900 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
2d910 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2d920 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
2d930 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
2d940 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20  rrmsg(p->db));. 
2d950 20 20 20 20 20 69 66 20 28 70 53 74 6d 74 29 20       if (pStmt) 
2d960 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
2d970 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 78  (pStmt);.      x
2d980 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b  Closer(sCtx.in);
2d990 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
2d9a0 0a 20 20 20 20 7d 0a 20 20 20 20 6e 65 65 64 43  .    }.    needC
2d9b0 6f 6d 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 5f  ommit = sqlite3_
2d9c0 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 70  get_autocommit(p
2d9d0 2d 3e 64 62 29 3b 0a 20 20 20 20 69 66 28 20 6e  ->db);.    if( n
2d9e0 65 65 64 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69  eedCommit ) sqli
2d9f0 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
2da00 22 42 45 47 49 4e 22 2c 20 30 2c 20 30 2c 20 30  "BEGIN", 0, 0, 0
2da10 29 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  );.    do{.     
2da20 20 69 6e 74 20 73 74 61 72 74 4c 69 6e 65 20 3d   int startLine =
2da30 20 73 43 74 78 2e 6e 4c 69 6e 65 3b 0a 20 20 20   sCtx.nLine;.   
2da40 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43     for(i=0; i<nC
2da50 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; i++){.      
2da60 20 20 63 68 61 72 20 2a 7a 20 3d 20 78 52 65 61    char *z = xRea
2da70 64 28 26 73 43 74 78 29 3b 0a 20 20 20 20 20 20  d(&sCtx);.      
2da80 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20    /*.        ** 
2da90 44 69 64 20 77 65 20 72 65 61 63 68 20 65 6e 64  Did we reach end
2daa0 2d 6f 66 2d 66 69 6c 65 20 62 65 66 6f 72 65 20  -of-file before 
2dab0 66 69 6e 64 69 6e 67 20 61 6e 79 20 63 6f 6c 75  finding any colu
2dac0 6d 6e 73 3f 0a 20 20 20 20 20 20 20 20 2a 2a 20  mns?.        ** 
2dad0 49 66 20 73 6f 2c 20 73 74 6f 70 20 69 6e 73 74  If so, stop inst
2dae0 65 61 64 20 6f 66 20 4e 55 4c 4c 20 66 69 6c 6c  ead of NULL fill
2daf0 69 6e 67 20 74 68 65 20 72 65 6d 61 69 6e 69 6e  ing the remainin
2db00 67 20 63 6f 6c 75 6d 6e 73 2e 0a 20 20 20 20 20  g columns..     
2db10 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66     */.        if
2db20 28 20 7a 3d 3d 30 20 26 26 20 69 3d 3d 30 20 29  ( z==0 && i==0 )
2db30 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
2db40 2f 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 44 69  /*.        ** Di
2db50 64 20 77 65 20 72 65 61 63 68 20 65 6e 64 2d 6f  d we reach end-o
2db60 66 2d 66 69 6c 65 20 4f 52 20 65 6e 64 2d 6f 66  f-file OR end-of
2db70 2d 6c 69 6e 65 20 62 65 66 6f 72 65 20 66 69 6e  -line before fin
2db80 64 69 6e 67 20 61 6e 79 0a 20 20 20 20 20 20 20  ding any.       
2db90 20 2a 2a 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 41   ** columns in A
2dba0 53 43 49 49 20 6d 6f 64 65 3f 20 20 49 66 20 73  SCII mode?  If s
2dbb0 6f 2c 20 73 74 6f 70 20 69 6e 73 74 65 61 64 20  o, stop instead 
2dbc0 6f 66 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 0a  of NULL filling.
2dbd0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72          ** the r
2dbe0 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73  emaining columns
2dbf0 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
2dc00 20 20 20 20 20 69 66 28 20 70 2d 3e 6d 6f 64 65       if( p->mode
2dc10 3d 3d 4d 4f 44 45 5f 41 73 63 69 69 20 26 26 20  ==MODE_Ascii && 
2dc20 28 7a 3d 3d 30 20 7c 7c 20 7a 5b 30 5d 3d 3d 30  (z==0 || z[0]==0
2dc30 29 20 26 26 20 69 3d 3d 30 20 29 20 62 72 65 61  ) && i==0 ) brea
2dc40 6b 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  k;.        sqlit
2dc50 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74  e3_bind_text(pSt
2dc60 6d 74 2c 20 69 2b 31 2c 20 7a 2c 20 2d 31 2c 20  mt, i+1, z, -1, 
2dc70 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
2dc80 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  );.        if( i
2dc90 3c 6e 43 6f 6c 2d 31 20 26 26 20 73 43 74 78 2e  <nCol-1 && sCtx.
2dca0 63 54 65 72 6d 21 3d 73 43 74 78 2e 63 43 6f 6c  cTerm!=sCtx.cCol
2dcb0 53 65 70 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Sep ){.         
2dcc0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
2dcd0 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 65 78 70  err, "%s:%d: exp
2dce0 65 63 74 65 64 20 25 64 20 63 6f 6c 75 6d 6e 73  ected %d columns
2dcf0 20 62 75 74 20 66 6f 75 6e 64 20 25 64 20 2d 20   but found %d - 
2dd00 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 22 66 69 6c              "fil
2dd20 6c 69 6e 67 20 74 68 65 20 72 65 73 74 20 77 69  ling the rest wi
2dd30 74 68 20 4e 55 4c 4c 5c 6e 22 2c 0a 20 20 20 20  th NULL\n",.    
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd50 20 20 20 20 20 20 73 43 74 78 2e 7a 46 69 6c 65        sCtx.zFile
2dd60 2c 20 73 74 61 72 74 4c 69 6e 65 2c 20 6e 43 6f  , startLine, nCo
2dd70 6c 2c 20 69 2b 31 29 3b 0a 20 20 20 20 20 20 20  l, i+1);.       
2dd80 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20     i += 2;.     
2dd90 20 20 20 20 20 77 68 69 6c 65 28 20 69 3c 3d 6e       while( i<=n
2dda0 43 6f 6c 20 29 7b 20 73 71 6c 69 74 65 33 5f 62  Col ){ sqlite3_b
2ddb0 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20  ind_null(pStmt, 
2ddc0 69 29 3b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20  i); i++; }.     
2ddd0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
2dde0 20 20 20 69 66 28 20 73 43 74 78 2e 63 54 65 72     if( sCtx.cTer
2ddf0 6d 3d 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20  m==sCtx.cColSep 
2de00 29 7b 0a 20 20 20 20 20 20 20 20 64 6f 7b 0a 20  ){.        do{. 
2de10 20 20 20 20 20 20 20 20 20 78 52 65 61 64 28 26           xRead(&
2de20 73 43 74 78 29 3b 0a 20 20 20 20 20 20 20 20 20  sCtx);.         
2de30 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 77   i++;.        }w
2de40 68 69 6c 65 28 20 73 43 74 78 2e 63 54 65 72 6d  hile( sCtx.cTerm
2de50 3d 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29  ==sCtx.cColSep )
2de60 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  ;.        utf8_p
2de70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25  rintf(stderr, "%
2de80 73 3a 25 64 3a 20 65 78 70 65 63 74 65 64 20 25  s:%d: expected %
2de90 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 66 6f  d columns but fo
2dea0 75 6e 64 20 25 64 20 2d 20 22 0a 20 20 20 20 20  und %d - ".     
2deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dec0 20 20 20 22 65 78 74 72 61 73 20 69 67 6e 6f 72     "extras ignor
2ded0 65 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  ed\n",.         
2dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2def0 43 74 78 2e 7a 46 69 6c 65 2c 20 73 74 61 72 74  Ctx.zFile, start
2df00 4c 69 6e 65 2c 20 6e 43 6f 6c 2c 20 69 29 3b 0a  Line, nCol, i);.
2df10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
2df20 28 20 69 3e 3d 6e 43 6f 6c 20 29 7b 0a 20 20 20  ( i>=nCol ){.   
2df30 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65       sqlite3_ste
2df40 70 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20  p(pStmt);.      
2df50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 72    rc = sqlite3_r
2df60 65 73 65 74 28 70 53 74 6d 74 29 3b 0a 20 20 20  eset(pStmt);.   
2df70 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
2df80 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2df90 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2dfa0 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20  stderr, "%s:%d: 
2dfb0 49 4e 53 45 52 54 20 66 61 69 6c 65 64 3a 20 25  INSERT failed: %
2dfc0 73 5c 6e 22 2c 20 73 43 74 78 2e 7a 46 69 6c 65  s\n", sCtx.zFile
2dfd0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2dfe0 20 20 20 20 20 20 20 20 73 74 61 72 74 4c 69 6e          startLin
2dff0 65 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  e, sqlite3_errms
2e000 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
2e010 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
2e020 20 7d 77 68 69 6c 65 28 20 73 43 74 78 2e 63 54   }while( sCtx.cT
2e030 65 72 6d 21 3d 45 4f 46 20 29 3b 0a 0a 20 20 20  erm!=EOF );..   
2e040 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e   xCloser(sCtx.in
2e050 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  );.    sqlite3_f
2e060 72 65 65 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20  ree(sCtx.z);.   
2e070 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
2e080 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 69 66  e(pStmt);.    if
2e090 28 20 6e 65 65 64 43 6f 6d 6d 69 74 20 29 20 73  ( needCommit ) s
2e0a0 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
2e0b0 62 2c 20 22 43 4f 4d 4d 49 54 22 2c 20 30 2c 20  b, "COMMIT", 0, 
2e0c0 30 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  0, 0);.  }else..
2e0d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
2e0e0 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 66 28 20  NTESTABLE.  if( 
2e0f0 63 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d  c=='i' && strncm
2e100 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d 70  p(azArg[0], "imp
2e110 6f 73 74 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b  oster", n)==0 ){
2e120 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  .    char *zSql;
2e130 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  .    char *zColl
2e140 69 73 74 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  ist = 0;.    sql
2e150 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
2e160 3b 0a 20 20 20 20 69 6e 74 20 74 6e 75 6d 20 3d  ;.    int tnum =
2e170 20 30 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   0;.    int i;. 
2e180 20 20 20 69 66 28 20 6e 41 72 67 21 3d 33 20 29     if( nArg!=3 )
2e190 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
2e1a0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
2e1b0 67 65 3a 20 2e 69 6d 70 6f 73 74 65 72 20 49 4e  ge: .imposter IN
2e1c0 44 45 58 20 49 4d 50 4f 53 54 45 52 5c 6e 22 29  DEX IMPOSTER\n")
2e1d0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2e1e0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
2e1f0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
2e200 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28    }.    open_db(
2e210 70 2c 20 30 29 3b 0a 20 20 20 20 7a 53 71 6c 20  p, 0);.    zSql 
2e220 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
2e230 66 28 22 53 45 4c 45 43 54 20 72 6f 6f 74 70 61  f("SELECT rootpa
2e240 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ge FROM sqlite_m
2e250 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20  aster".         
2e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e270 20 20 22 20 57 48 45 52 45 20 6e 61 6d 65 3d 27    " WHERE name='
2e280 25 71 27 20 41 4e 44 20 74 79 70 65 3d 27 69 6e  %q' AND type='in
2e290 64 65 78 27 22 2c 20 61 7a 41 72 67 5b 31 5d 29  dex'", azArg[1])
2e2a0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 70 72  ;.    sqlite3_pr
2e2b0 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
2e2c0 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74  zSql, -1, &pStmt
2e2d0 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
2e2e0 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  3_free(zSql);.  
2e2f0 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
2e300 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
2e310 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 74  E_ROW ){.      t
2e320 6e 75 6d 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  num = sqlite3_co
2e330 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 20  lumn_int(pStmt, 
2e340 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  0);.    }.    sq
2e350 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
2e360 53 74 6d 74 29 3b 0a 20 20 20 20 69 66 28 20 74  Stmt);.    if( t
2e370 6e 75 6d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  num==0 ){.      
2e380 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2e390 72 72 2c 20 22 6e 6f 20 73 75 63 68 20 69 6e 64  rr, "no such ind
2e3a0 65 78 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61  ex: \"%s\"\n", a
2e3b0 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
2e3c0 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f  rc = 1;.      go
2e3d0 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
2e3e0 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  exit;.    }.    
2e3f0 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zSql = sqlite3_m
2e400 70 72 69 6e 74 66 28 22 50 52 41 47 4d 41 20 69  printf("PRAGMA i
2e410 6e 64 65 78 5f 78 69 6e 66 6f 3d 27 25 71 27 22  ndex_xinfo='%q'"
2e420 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
2e430 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
2e440 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
2e450 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74  zSql, -1, &pStmt
2e460 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
2e470 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  3_free(zSql);.  
2e480 20 20 69 20 3d 20 30 3b 0a 20 20 20 20 77 68 69    i = 0;.    whi
2e490 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70  le( sqlite3_step
2e4a0 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
2e4b0 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 63 68 61  ROW ){.      cha
2e4c0 72 20 7a 4c 61 62 65 6c 5b 32 30 5d 3b 0a 20 20  r zLabel[20];.  
2e4d0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
2e4e0 7a 43 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63 68  zCol = (const ch
2e4f0 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
2e500 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 32 29  mn_text(pStmt,2)
2e510 3b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20  ;.      i++;.   
2e520 20 20 20 69 66 28 20 7a 43 6f 6c 3d 3d 30 20 29     if( zCol==0 )
2e530 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  {.        if( sq
2e540 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
2e550 28 70 53 74 6d 74 2c 31 29 3d 3d 2d 31 20 29 7b  (pStmt,1)==-1 ){
2e560 0a 20 20 20 20 20 20 20 20 20 20 7a 43 6f 6c 20  .          zCol 
2e570 3d 20 22 5f 52 4f 57 49 44 5f 22 3b 0a 20 20 20  = "_ROWID_";.   
2e580 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
2e590 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
2e5a0 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c  printf(sizeof(zL
2e5b0 61 62 65 6c 29 2c 7a 4c 61 62 65 6c 2c 22 65 78  abel),zLabel,"ex
2e5c0 70 72 25 64 22 2c 69 29 3b 0a 20 20 20 20 20 20  pr%d",i);.      
2e5d0 20 20 20 20 7a 43 6f 6c 20 3d 20 7a 4c 61 62 65      zCol = zLabe
2e5e0 6c 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  l;.        }.   
2e5f0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a     }.      if( z
2e600 43 6f 6c 6c 69 73 74 3d 3d 30 20 29 7b 0a 20 20  Collist==0 ){.  
2e610 20 20 20 20 20 20 7a 43 6f 6c 6c 69 73 74 20 3d        zCollist =
2e620 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2e630 28 22 5c 22 25 77 5c 22 22 2c 20 7a 43 6f 6c 29  ("\"%w\"", zCol)
2e640 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2e650 20 20 20 20 20 20 20 7a 43 6f 6c 6c 69 73 74 20         zCollist 
2e660 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
2e670 66 28 22 25 7a 2c 5c 22 25 77 5c 22 22 2c 20 7a  f("%z,\"%w\"", z
2e680 43 6f 6c 6c 69 73 74 2c 20 7a 43 6f 6c 29 3b 0a  Collist, zCol);.
2e690 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2e6a0 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
2e6b0 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 7a  ze(pStmt);.    z
2e6c0 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Sql = sqlite3_mp
2e6d0 72 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20  rintf(.         
2e6e0 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 5c   "CREATE TABLE \
2e6f0 22 25 77 5c 22 28 25 73 2c 50 52 49 4d 41 52 59  "%w\"(%s,PRIMARY
2e700 20 4b 45 59 28 25 73 29 29 57 49 54 48 4f 55 54   KEY(%s))WITHOUT
2e710 20 52 4f 57 49 44 22 2c 0a 20 20 20 20 20 20 20   ROWID",.       
2e720 20 20 20 61 7a 41 72 67 5b 32 5d 2c 20 7a 43 6f     azArg[2], zCo
2e730 6c 6c 69 73 74 2c 20 7a 43 6f 6c 6c 69 73 74 29  llist, zCollist)
2e740 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
2e750 65 65 28 7a 43 6f 6c 6c 69 73 74 29 3b 0a 20 20  ee(zCollist);.  
2e760 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74    rc = sqlite3_t
2e770 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
2e780 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f  TE_TESTCTRL_IMPO
2e790 53 54 45 52 2c 20 70 2d 3e 64 62 2c 20 22 6d 61  STER, p->db, "ma
2e7a0 69 6e 22 2c 20 31 2c 20 74 6e 75 6d 29 3b 0a 20  in", 1, tnum);. 
2e7b0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2e7c0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
2e7d0 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
2e7e0 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 30 2c 20  p->db, zSql, 0, 
2e7f0 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  0, 0);.      sql
2e800 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
2e810 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
2e820 4c 5f 49 4d 50 4f 53 54 45 52 2c 20 70 2d 3e 64  L_IMPOSTER, p->d
2e830 62 2c 20 22 6d 61 69 6e 22 2c 20 30 2c 20 30 29  b, "main", 0, 0)
2e840 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29  ;.      if( rc )
2e850 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
2e860 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
2e870 72 72 6f 72 20 69 6e 20 5b 25 73 5d 3a 20 25 73  rror in [%s]: %s
2e880 5c 6e 22 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74  \n", zSql, sqlit
2e890 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29  e3_errmsg(p->db)
2e8a0 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
2e8b0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
2e8c0 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 73 3b  ntf(stdout, "%s;
2e8d0 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  \n", zSql);.    
2e8e0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2e8f0 74 64 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20  tdout,.         
2e900 20 20 22 57 41 52 4e 49 4e 47 3a 20 77 72 69 74    "WARNING: writ
2e910 69 6e 67 20 74 6f 20 61 6e 20 69 6d 70 6f 73 74  ing to an impost
2e920 65 72 20 74 61 62 6c 65 20 77 69 6c 6c 20 63 6f  er table will co
2e930 72 72 75 70 74 20 74 68 65 20 69 6e 64 65 78 21  rrupt the index!
2e940 5c 6e 22 0a 20 20 20 20 20 20 20 20 29 3b 0a 20  \n".        );. 
2e950 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
2e960 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
2e970 74 66 28 73 74 64 65 72 72 2c 20 22 53 51 4c 49  tf(stderr, "SQLI
2e980 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f  TE_TESTCTRL_IMPO
2e990 53 54 45 52 20 72 65 74 75 72 6e 73 20 25 64 5c  STER returns %d\
2e9a0 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 72  n", rc);.      r
2e9b0 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  c = 1;.    }.   
2e9c0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
2e9d0 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e  ql);.  }else.#en
2e9e0 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
2e9f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 53 54  SQLITE_OMIT_TEST
2ea00 5f 43 4f 4e 54 52 4f 4c 29 20 2a 2f 0a 0a 23 69  _CONTROL) */..#i
2ea10 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2ea20 4c 45 5f 49 4f 54 52 41 43 45 0a 20 20 69 66 28  LE_IOTRACE.  if(
2ea30 20 63 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63   c=='i' && strnc
2ea40 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6f  mp(azArg[0], "io
2ea50 74 72 61 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b  trace", n)==0 ){
2ea60 0a 20 20 20 20 53 51 4c 49 54 45 5f 41 50 49 20  .    SQLITE_API 
2ea70 65 78 74 65 72 6e 20 76 6f 69 64 20 28 53 51 4c  extern void (SQL
2ea80 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74  ITE_CDECL *sqlit
2ea90 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
2eaa0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20   char*, ...);.  
2eab0 20 20 69 66 28 20 69 6f 74 72 61 63 65 20 26 26    if( iotrace &&
2eac0 20 69 6f 74 72 61 63 65 21 3d 73 74 64 6f 75 74   iotrace!=stdout
2ead0 20 29 20 66 63 6c 6f 73 65 28 69 6f 74 72 61 63   ) fclose(iotrac
2eae0 65 29 3b 0a 20 20 20 20 69 6f 74 72 61 63 65 20  e);.    iotrace 
2eaf0 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 6e 41 72  = 0;.    if( nAr
2eb00 67 3c 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  g<2 ){.      sql
2eb10 69 74 65 33 49 6f 54 72 61 63 65 20 3d 20 30 3b  ite3IoTrace = 0;
2eb20 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
2eb30 74 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20  trcmp(azArg[1], 
2eb40 22 2d 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  "-")==0 ){.     
2eb50 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
2eb60 3d 20 69 6f 74 72 61 63 65 50 72 69 6e 74 66 3b  = iotracePrintf;
2eb70 0a 20 20 20 20 20 20 69 6f 74 72 61 63 65 20 3d  .      iotrace =
2eb80 20 73 74 64 6f 75 74 3b 0a 20 20 20 20 7d 65 6c   stdout;.    }el
2eb90 73 65 7b 0a 20 20 20 20 20 20 69 6f 74 72 61 63  se{.      iotrac
2eba0 65 20 3d 20 66 6f 70 65 6e 28 61 7a 41 72 67 5b  e = fopen(azArg[
2ebb0 31 5d 2c 20 22 77 22 29 3b 0a 20 20 20 20 20 20  1], "w");.      
2ebc0 69 66 28 20 69 6f 74 72 61 63 65 3d 3d 30 20 29  if( iotrace==0 )
2ebd0 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
2ebe0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
2ebf0 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65  rror: cannot ope
2ec00 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41  n \"%s\"\n", azA
2ec10 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[1]);.        
2ec20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 3d  sqlite3IoTrace =
2ec30 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   0;.        rc =
2ec40 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   1;.      }else{
2ec50 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2ec60 49 6f 54 72 61 63 65 20 3d 20 69 6f 74 72 61 63  IoTrace = iotrac
2ec70 65 50 72 69 6e 74 66 3b 0a 20 20 20 20 20 20 7d  ePrintf;.      }
2ec80 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23  .    }.  }else.#
2ec90 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d  endif..  if( c==
2eca0 27 6c 27 20 26 26 20 6e 3e 3d 35 20 26 26 20 73  'l' && n>=5 && s
2ecb0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
2ecc0 20 22 6c 69 6d 69 74 73 22 2c 20 6e 29 3d 3d 30   "limits", n)==0
2ecd0 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
2ece0 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20  onst struct {.  
2ecf0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
2ed00 2a 7a 4c 69 6d 69 74 4e 61 6d 65 3b 20 20 20 2f  *zLimitName;   /
2ed10 2a 20 4e 61 6d 65 20 6f 66 20 61 20 6c 69 6d 69  * Name of a limi
2ed20 74 20 2a 2f 0a 20 20 20 20 20 20 20 69 6e 74 20  t */.       int 
2ed30 6c 69 6d 69 74 43 6f 64 65 3b 20 20 20 20 20 20  limitCode;      
2ed40 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
2ed50 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6c   code for that l
2ed60 69 6d 69 74 20 2a 2f 0a 20 20 20 20 7d 20 61 4c  imit */.    } aL
2ed70 69 6d 69 74 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  imit[] = {.     
2ed80 20 7b 20 22 6c 65 6e 67 74 68 22 2c 20 20 20 20   { "length",    
2ed90 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
2eda0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20  TE_LIMIT_LENGTH 
2edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edc0 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73     },.      { "s
2edd0 71 6c 5f 6c 65 6e 67 74 68 22 2c 20 20 20 20 20  ql_length",     
2ede0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49         SQLITE_LI
2edf0 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48 20 20  MIT_SQL_LENGTH  
2ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
2ee10 0a 20 20 20 20 20 20 7b 20 22 63 6f 6c 75 6d 6e  .      { "column
2ee20 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
2ee30 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43    SQLITE_LIMIT_C
2ee40 4f 4c 55 4d 4e 20 20 20 20 20 20 20 20 20 20 20  OLUMN           
2ee50 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
2ee60 20 20 7b 20 22 65 78 70 72 5f 64 65 70 74 68 22    { "expr_depth"
2ee70 2c 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  ,            SQL
2ee80 49 54 45 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44  ITE_LIMIT_EXPR_D
2ee90 45 50 54 48 20 20 20 20 20 20 20 20 20 20 20 20  EPTH            
2eea0 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
2eeb0 63 6f 6d 70 6f 75 6e 64 5f 73 65 6c 65 63 74 22  compound_select"
2eec0 2c 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c  ,       SQLITE_L
2eed0 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45  IMIT_COMPOUND_SE
2eee0 4c 45 43 54 20 20 20 20 20 20 20 20 20 20 20 7d  LECT           }
2eef0 2c 0a 20 20 20 20 20 20 7b 20 22 76 64 62 65 5f  ,.      { "vdbe_
2ef00 6f 70 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  op",            
2ef10 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
2ef20 56 44 42 45 5f 4f 50 20 20 20 20 20 20 20 20 20  VDBE_OP         
2ef30 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2ef40 20 20 20 7b 20 22 66 75 6e 63 74 69 6f 6e 5f 61     { "function_a
2ef50 72 67 22 2c 20 20 20 20 20 20 20 20 20 20 53 51  rg",          SQ
2ef60 4c 49 54 45 5f 4c 49 4d 49 54 5f 46 55 4e 43 54  LITE_LIMIT_FUNCT
2ef70 49 4f 4e 5f 41 52 47 20 20 20 20 20 20 20 20 20  ION_ARG         
2ef80 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
2ef90 22 61 74 74 61 63 68 65 64 22 2c 20 20 20 20 20  "attached",     
2efa0 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
2efb0 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 20 20  LIMIT_ATTACHED  
2efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efd0 7d 2c 0a 20 20 20 20 20 20 7b 20 22 6c 69 6b 65  },.      { "like
2efe0 5f 70 61 74 74 65 72 6e 5f 6c 65 6e 67 74 68 22  _pattern_length"
2eff0 2c 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54  ,   SQLITE_LIMIT
2f000 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45  _LIKE_PATTERN_LE
2f010 4e 47 54 48 20 20 20 20 20 20 20 7d 2c 0a 20 20  NGTH       },.  
2f020 20 20 20 20 7b 20 22 76 61 72 69 61 62 6c 65 5f      { "variable_
2f030 6e 75 6d 62 65 72 22 2c 20 20 20 20 20 20 20 53  number",       S
2f040 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49  QLITE_LIMIT_VARI
2f050 41 42 4c 45 5f 4e 55 4d 42 45 52 20 20 20 20 20  ABLE_NUMBER     
2f060 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
2f070 20 22 74 72 69 67 67 65 72 5f 64 65 70 74 68 22   "trigger_depth"
2f080 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45  ,         SQLITE
2f090 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44  _LIMIT_TRIGGER_D
2f0a0 45 50 54 48 20 20 20 20 20 20 20 20 20 20 20 20  EPTH            
2f0b0 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 77 6f 72   },.      { "wor
2f0c0 6b 65 72 5f 74 68 72 65 61 64 73 22 2c 20 20 20  ker_threads",   
2f0d0 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49       SQLITE_LIMI
2f0e0 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
2f0f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2f100 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 2c     };.    int i,
2f110 20 6e 32 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62   n2;.    open_db
2f120 28 70 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  (p, 0);.    if( 
2f130 6e 41 72 67 3d 3d 31 20 29 7b 0a 20 20 20 20 20  nArg==1 ){.     
2f140 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
2f150 79 53 69 7a 65 28 61 4c 69 6d 69 74 29 3b 20 69  ySize(aLimit); i
2f160 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69  ++){.        pri
2f170 6e 74 66 28 22 25 32 30 73 20 25 64 5c 6e 22 2c  ntf("%20s %d\n",
2f180 20 61 4c 69 6d 69 74 5b 69 5d 2e 7a 4c 69 6d 69   aLimit[i].zLimi
2f190 74 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  tName,.         
2f1a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69        sqlite3_li
2f1b0 6d 69 74 28 70 2d 3e 64 62 2c 20 61 4c 69 6d 69  mit(p->db, aLimi
2f1c0 74 5b 69 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 20  t[i].limitCode, 
2f1d0 2d 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  -1));.      }.  
2f1e0 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67    }else if( nArg
2f1f0 3e 33 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  >3 ){.      raw_
2f200 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2f210 55 73 61 67 65 3a 20 2e 6c 69 6d 69 74 20 4e 41  Usage: .limit NA
2f220 4d 45 20 3f 4e 45 57 2d 56 41 4c 55 45 3f 5c 6e  ME ?NEW-VALUE?\n
2f230 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2f240 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
2f250 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2f260 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2f270 20 69 6e 74 20 69 4c 69 6d 69 74 20 3d 20 2d 31   int iLimit = -1
2f280 3b 0a 20 20 20 20 20 20 6e 32 20 3d 20 73 74 72  ;.      n2 = str
2f290 6c 65 6e 33 30 28 61 7a 41 72 67 5b 31 5d 29 3b  len30(azArg[1]);
2f2a0 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
2f2b0 69 3c 41 72 72 61 79 53 69 7a 65 28 61 4c 69 6d  i<ArraySize(aLim
2f2c0 69 74 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  it); i++){.     
2f2d0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73     if( sqlite3_s
2f2e0 74 72 6e 69 63 6d 70 28 61 4c 69 6d 69 74 5b 69  trnicmp(aLimit[i
2f2f0 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c 20 61 7a  ].zLimitName, az
2f300 41 72 67 5b 31 5d 2c 20 6e 32 29 3d 3d 30 20 29  Arg[1], n2)==0 )
2f310 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
2f320 69 4c 69 6d 69 74 3c 30 20 29 7b 0a 20 20 20 20  iLimit<0 ){.    
2f330 20 20 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d          iLimit =
2f340 20 69 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65   i;.          }e
2f350 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
2f360 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
2f370 65 72 72 2c 20 22 61 6d 62 69 67 75 6f 75 73 20  err, "ambiguous 
2f380 6c 69 6d 69 74 3a 20 5c 22 25 73 5c 22 5c 6e 22  limit: \"%s\"\n"
2f390 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
2f3a0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b           rc = 1;
2f3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
2f3c0 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
2f3d0 78 69 74 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  xit;.          }
2f3e0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2f3f0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69   }.      if( iLi
2f400 6d 69 74 3c 30 20 29 7b 0a 20 20 20 20 20 20 20  mit<0 ){.       
2f410 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
2f420 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6c 69  err, "unknown li
2f430 6d 69 74 3a 20 5c 22 25 73 5c 22 5c 6e 22 0a 20  mit: \"%s\"\n". 
2f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f450 20 20 20 20 20 20 20 22 65 6e 74 65 72 20 5c 22         "enter \"
2f460 2e 6c 69 6d 69 74 73 5c 22 20 77 69 74 68 20 6e  .limits\" with n
2f470 6f 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20  o arguments for 
2f480 61 20 6c 69 73 74 2e 5c 6e 22 2c 0a 20 20 20 20  a list.\n",.    
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4a0 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a       azArg[1]);.
2f4b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
2f4c0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74          goto met
2f4d0 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2f4e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
2f4f0 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20  ( nArg==3 ){.   
2f500 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d       sqlite3_lim
2f510 69 74 28 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74  it(p->db, aLimit
2f520 5b 69 4c 69 6d 69 74 5d 2e 6c 69 6d 69 74 43 6f  [iLimit].limitCo
2f530 64 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  de,.            
2f540 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 69            (int)i
2f550 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72  ntegerValue(azAr
2f560 67 5b 32 5d 29 29 3b 0a 20 20 20 20 20 20 7d 0a  g[2]));.      }.
2f570 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 32        printf("%2
2f580 30 73 20 25 64 5c 6e 22 2c 20 61 4c 69 6d 69 74  0s %d\n", aLimit
2f590 5b 69 4c 69 6d 69 74 5d 2e 7a 4c 69 6d 69 74 4e  [iLimit].zLimitN
2f5a0 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
2f5b0 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28    sqlite3_limit(
2f5c0 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 4c  p->db, aLimit[iL
2f5d0 69 6d 69 74 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c  imit].limitCode,
2f5e0 20 2d 31 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d   -1));.    }.  }
2f5f0 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
2f600 6c 27 20 26 26 20 6e 3e 32 20 26 26 20 73 74 72  l' && n>2 && str
2f610 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
2f620 6c 69 6e 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  lint", n)==0 ){.
2f630 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
2f640 29 3b 0a 20 20 20 20 6c 69 6e 74 44 6f 74 43 6f  );.    lintDotCo
2f650 6d 6d 61 6e 64 28 70 2c 20 61 7a 41 72 67 2c 20  mmand(p, azArg, 
2f660 6e 41 72 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  nArg);.  }else..
2f670 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f680 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
2f690 4f 4e 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20  ON.  if( c=='l' 
2f6a0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
2f6b0 5b 30 5d 2c 20 22 6c 6f 61 64 22 2c 20 6e 29 3d  [0], "load", n)=
2f6c0 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20  =0 ){.    const 
2f6d0 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 2a 7a 50  char *zFile, *zP
2f6e0 72 6f 63 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  roc;.    char *z
2f6f0 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
2f700 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20  if( nArg<2 ){.  
2f710 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2f720 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
2f730 6c 6f 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59  load FILE ?ENTRY
2f740 50 4f 49 4e 54 3f 5c 6e 22 29 3b 0a 20 20 20 20  POINT?\n");.    
2f750 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
2f760 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2f770 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
2f780 20 20 7a 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b    zFile = azArg[
2f790 31 5d 3b 0a 20 20 20 20 7a 50 72 6f 63 20 3d 20  1];.    zProc = 
2f7a0 6e 41 72 67 3e 3d 33 20 3f 20 61 7a 41 72 67 5b  nArg>=3 ? azArg[
2f7b0 32 5d 20 3a 20 30 3b 0a 20 20 20 20 6f 70 65 6e  2] : 0;.    open
2f7c0 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 72  _db(p, 0);.    r
2f7d0 63 20 3d 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64  c = sqlite3_load
2f7e0 5f 65 78 74 65 6e 73 69 6f 6e 28 70 2d 3e 64 62  _extension(p->db
2f7f0 2c 20 7a 46 69 6c 65 2c 20 7a 50 72 6f 63 2c 20  , zFile, zProc, 
2f800 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69  &zErrMsg);.    i
2f810 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
2f820 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
2f830 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
2f840 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72  rror: %s\n", zEr
2f850 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c  rMsg);.      sql
2f860 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73  ite3_free(zErrMs
2f870 67 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  g);.      rc = 1
2f880 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
2f890 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 63 3d  #endif..  if( c=
2f8a0 3d 27 6c 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='l' && strncmp(
2f8b0 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 6f 67 22 2c  azArg[0], "log",
2f8c0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66   n)==0 ){.    if
2f8d0 28 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20  ( nArg!=2 ){.   
2f8e0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2f8f0 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6c  derr, "Usage: .l
2f900 6f 67 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b  og FILENAME\n");
2f910 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
2f920 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2f930 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
2f940 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20  e = azArg[1];.  
2f950 20 20 20 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f      output_file_
2f960 63 6c 6f 73 65 28 70 2d 3e 70 4c 6f 67 29 3b 0a  close(p->pLog);.
2f970 20 20 20 20 20 20 70 2d 3e 70 4c 6f 67 20 3d 20        p->pLog = 
2f980 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e  output_file_open
2f990 28 7a 46 69 6c 65 2c 20 30 29 3b 0a 20 20 20 20  (zFile, 0);.    
2f9a0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
2f9b0 20 63 3d 3d 27 6d 27 20 26 26 20 73 74 72 6e 63   c=='m' && strnc
2f9c0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6d 6f  mp(azArg[0], "mo
2f9d0 64 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  de", n)==0 ){.  
2f9e0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
2f9f0 6f 64 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f 20  ode = nArg>=2 ? 
2fa00 61 7a 41 72 67 5b 31 5d 20 3a 20 22 22 3b 0a 20  azArg[1] : "";. 
2fa10 20 20 20 69 6e 74 20 6e 32 20 3d 20 73 74 72 6c     int n2 = strl
2fa20 65 6e 33 30 28 7a 4d 6f 64 65 29 3b 0a 20 20 20  en30(zMode);.   
2fa30 20 69 6e 74 20 63 32 20 3d 20 7a 4d 6f 64 65 5b   int c2 = zMode[
2fa40 30 5d 3b 0a 20 20 20 20 69 66 28 20 63 32 3d 3d  0];.    if( c2==
2fa50 27 6c 27 20 26 26 20 6e 32 3e 32 20 26 26 20 73  'l' && n2>2 && s
2fa60 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  trncmp(azArg[1],
2fa70 22 6c 69 6e 65 73 22 2c 6e 32 29 3d 3d 30 20 29  "lines",n2)==0 )
2fa80 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20  {.      p->mode 
2fa90 3d 20 4d 4f 44 45 5f 4c 69 6e 65 3b 0a 20 20 20  = MODE_Line;.   
2faa0 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
2fab0 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f  ntf(sizeof(p->ro
2fac0 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e  wSeparator), p->
2fad0 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45  rowSeparator, SE
2fae0 50 5f 52 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73  P_Row);.    }els
2faf0 65 20 69 66 28 20 63 32 3d 3d 27 63 27 20 26 26  e if( c2=='c' &&
2fb00 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31   strncmp(azArg[1
2fb10 5d 2c 22 63 6f 6c 75 6d 6e 73 22 2c 6e 32 29 3d  ],"columns",n2)=
2fb20 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  =0 ){.      p->m
2fb30 6f 64 65 20 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d  ode = MODE_Colum
2fb40 6e 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  n;.      sqlite3
2fb50 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
2fb60 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72  (p->rowSeparator
2fb70 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  ), p->rowSeparat
2fb80 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b 0a 20 20  or, SEP_Row);.  
2fb90 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d    }else if( c2==
2fba0 27 6c 27 20 26 26 20 6e 32 3e 32 20 26 26 20 73  'l' && n2>2 && s
2fbb0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  trncmp(azArg[1],
2fbc0 22 6c 69 73 74 22 2c 6e 32 29 3d 3d 30 20 29 7b  "list",n2)==0 ){
2fbd0 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d  .      p->mode =
2fbe0 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 20 20   MODE_List;.    
2fbf0 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2fc00 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c  tf(sizeof(p->col
2fc10 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63  Separator), p->c
2fc20 6f 6c 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50  olSeparator, SEP
2fc30 5f 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20  _Column);.      
2fc40 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
2fc50 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65  (sizeof(p->rowSe
2fc60 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77  parator), p->row
2fc70 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52  Separator, SEP_R
2fc80 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ow);.    }else i
2fc90 66 28 20 63 32 3d 3d 27 68 27 20 26 26 20 73 74  f( c2=='h' && st
2fca0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
2fcb0 68 74 6d 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  html",n2)==0 ){.
2fcc0 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
2fcd0 4d 4f 44 45 5f 48 74 6d 6c 3b 0a 20 20 20 20 7d  MODE_Html;.    }
2fce0 65 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 74 27  else if( c2=='t'
2fcf0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
2fd00 67 5b 31 5d 2c 22 74 63 6c 22 2c 6e 32 29 3d 3d  g[1],"tcl",n2)==
2fd10 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f  0 ){.      p->mo
2fd20 64 65 20 3d 20 4d 4f 44 45 5f 54 63 6c 3b 0a 20  de = MODE_Tcl;. 
2fd30 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
2fd40 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
2fd50 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 70  colSeparator), p
2fd60 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 20  ->colSeparator, 
2fd70 53 45 50 5f 53 70 61 63 65 29 3b 0a 20 20 20 20  SEP_Space);.    
2fd80 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2fd90 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77  tf(sizeof(p->row
2fda0 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72  Separator), p->r
2fdb0 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50  owSeparator, SEP
2fdc0 5f 52 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73 65  _Row);.    }else
2fdd0 20 69 66 28 20 63 32 3d 3d 27 63 27 20 26 26 20   if( c2=='c' && 
2fde0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d  strncmp(azArg[1]
2fdf0 2c 22 63 73 76 22 2c 6e 32 29 3d 3d 30 20 29 7b  ,"csv",n2)==0 ){
2fe00 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d  .      p->mode =
2fe10 20 4d 4f 44 45 5f 43 73 76 3b 0a 20 20 20 20 20   MODE_Csv;.     
2fe20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2fe30 66 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53  f(sizeof(p->colS
2fe40 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f  eparator), p->co
2fe50 6c 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f  lSeparator, SEP_
2fe60 43 6f 6d 6d 61 29 3b 0a 20 20 20 20 20 20 73 71  Comma);.      sq
2fe70 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
2fe80 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61  izeof(p->rowSepa
2fe90 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65  rator), p->rowSe
2fea0 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 72 4c  parator, SEP_CrL
2feb0 66 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  f);.    }else if
2fec0 28 20 63 32 3d 3d 27 74 27 20 26 26 20 73 74 72  ( c2=='t' && str
2fed0 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 74  ncmp(azArg[1],"t
2fee0 61 62 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20  abs",n2)==0 ){. 
2fef0 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d       p->mode = M
2ff00 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 20 20 20 20  ODE_List;.      
2ff10 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
2ff20 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65  (sizeof(p->colSe
2ff30 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c  parator), p->col
2ff40 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 54  Separator, SEP_T
2ff50 61 62 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ab);.    }else i
2ff60 66 28 20 63 32 3d 3d 27 69 27 20 26 26 20 73 74  f( c2=='i' && st
2ff70 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
2ff80 69 6e 73 65 72 74 22 2c 6e 32 29 3d 3d 30 20 29  insert",n2)==0 )
2ff90 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20  {.      p->mode 
2ffa0 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a 20  = MODE_Insert;. 
2ffb0 20 20 20 20 20 73 65 74 5f 74 61 62 6c 65 5f 6e       set_table_n
2ffc0 61 6d 65 28 70 2c 20 6e 41 72 67 3e 3d 33 20 3f  ame(p, nArg>=3 ?
2ffd0 20 61 7a 41 72 67 5b 32 5d 20 3a 20 22 74 61 62   azArg[2] : "tab
2ffe0 6c 65 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  le");.    }else 
2fff0 69 66 28 20 63 32 3d 3d 27 71 27 20 26 26 20 73  if( c2=='q' && s
30000 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  trncmp(azArg[1],
30010 22 71 75 6f 74 65 22 2c 6e 32 29 3d 3d 30 20 29  "quote",n2)==0 )
30020 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20  {.      p->mode 
30030 3d 20 4d 4f 44 45 5f 51 75 6f 74 65 3b 0a 20 20  = MODE_Quote;.  
30040 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d    }else if( c2==
30050 27 61 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'a' && strncmp(a
30060 7a 41 72 67 5b 31 5d 2c 22 61 73 63 69 69 22 2c  zArg[1],"ascii",
30070 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n2)==0 ){.      
30080 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 41  p->mode = MODE_A
30090 73 63 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69  scii;.      sqli
300a0 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
300b0 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  eof(p->colSepara
300c0 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  tor), p->colSepa
300d0 72 61 74 6f 72 2c 20 53 45 50 5f 55 6e 69 74 29  rator, SEP_Unit)
300e0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
300f0 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
30100 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
30110 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
30120 72 2c 20 53 45 50 5f 52 65 63 6f 72 64 29 3b 0a  r, SEP_Record);.
30130 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41      }else if( nA
30140 72 67 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 72  rg==1 ){.      r
30150 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
30160 2c 20 22 63 75 72 72 65 6e 74 20 6f 75 74 70 75  , "current outpu
30170 74 20 6d 6f 64 65 3a 20 25 73 5c 6e 22 2c 20 6d  t mode: %s\n", m
30180 6f 64 65 44 65 73 63 72 5b 70 2d 3e 6d 6f 64 65  odeDescr[p->mode
30190 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ]);.    }else{. 
301a0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
301b0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
301c0 6d 6f 64 65 20 73 68 6f 75 6c 64 20 62 65 20 6f  mode should be o
301d0 6e 65 20 6f 66 3a 20 22 0a 20 20 20 20 20 20 20  ne of: ".       
301e0 20 20 22 61 73 63 69 69 20 63 6f 6c 75 6d 6e 20    "ascii column 
301f0 63 73 76 20 68 74 6d 6c 20 69 6e 73 65 72 74 20  csv html insert 
30200 6c 69 6e 65 20 6c 69 73 74 20 71 75 6f 74 65 20  line list quote 
30210 74 61 62 73 20 74 63 6c 5c 6e 22 29 3b 0a 20 20  tabs tcl\n");.  
30220 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
30230 7d 0a 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d  }.    p->cMode =
30240 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 7d 65 6c 73   p->mode;.  }els
30250 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6e 27 20  e..  if( c=='n' 
30260 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
30270 5b 30 5d 2c 20 22 6e 75 6c 6c 76 61 6c 75 65 22  [0], "nullvalue"
30280 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
30290 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20  f( nArg==2 ){.  
302a0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
302b0 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 6e  intf(sizeof(p->n
302c0 75 6c 6c 56 61 6c 75 65 29 2c 20 70 2d 3e 6e 75  ullValue), p->nu
302d0 6c 6c 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 20  llValue,.       
302e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302f0 22 25 2e 2a 73 22 2c 20 28 69 6e 74 29 41 72 72  "%.*s", (int)Arr
30300 61 79 53 69 7a 65 28 70 2d 3e 6e 75 6c 6c 56 61  aySize(p->nullVa
30310 6c 75 65 29 2d 31 2c 20 61 7a 41 72 67 5b 31 5d  lue)-1, azArg[1]
30320 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
30330 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
30340 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
30350 6e 75 6c 6c 76 61 6c 75 65 20 53 54 52 49 4e 47  nullvalue STRING
30360 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
30370 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
30380 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6f 27 20  e..  if( c=='o' 
30390 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
303a0 5b 30 5d 2c 20 22 6f 70 65 6e 22 2c 20 6e 29 3d  [0], "open", n)=
303b0 3d 30 20 26 26 20 6e 3e 3d 32 20 29 7b 0a 20 20  =0 && n>=2 ){.  
303c0 20 20 63 68 61 72 20 2a 7a 4e 65 77 46 69 6c 65    char *zNewFile
303d0 6e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  name;  /* Name o
303e0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
303f0 69 6c 65 20 74 6f 20 6f 70 65 6e 20 2a 2f 0a 20  ile to open */. 
30400 20 20 20 69 6e 74 20 69 4e 61 6d 65 20 3d 20 31     int iName = 1
30410 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78  ;       /* Index
30420 20 69 6e 20 61 7a 41 72 67 5b 5d 20 6f 66 20 74   in azArg[] of t
30430 68 65 20 66 69 6c 65 6e 61 6d 65 20 2a 2f 0a 20  he filename */. 
30440 20 20 20 69 6e 74 20 6e 65 77 46 6c 61 67 20 3d     int newFlag =
30450 20 30 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20   0;     /* True 
30460 74 6f 20 64 65 6c 65 74 65 20 66 69 6c 65 20 62  to delete file b
30470 65 66 6f 72 65 20 6f 70 65 6e 69 6e 67 20 2a 2f  efore opening */
30480 0a 20 20 20 20 2f 2a 20 43 6c 6f 73 65 20 74 68  .    /* Close th
30490 65 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  e existing datab
304a0 61 73 65 20 2a 2f 0a 20 20 20 20 73 65 73 73 69  ase */.    sessi
304b0 6f 6e 5f 63 6c 6f 73 65 5f 61 6c 6c 28 70 29 3b  on_close_all(p);
304c0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f  .    sqlite3_clo
304d0 73 65 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 70  se(p->db);.    p
304e0 2d 3e 64 62 20 3d 20 30 3b 0a 20 20 20 20 70 2d  ->db = 0;.    p-
304f0 3e 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20 30  >zDbFilename = 0
30500 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
30510 65 65 28 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f  ee(p->zFreeOnClo
30520 73 65 29 3b 0a 20 20 20 20 70 2d 3e 7a 46 72 65  se);.    p->zFre
30530 65 4f 6e 43 6c 6f 73 65 20 3d 20 30 3b 0a 20 20  eOnClose = 0;.  
30540 20 20 70 2d 3e 6f 70 65 6e 4d 6f 64 65 20 3d 20    p->openMode = 
30550 53 48 45 4c 4c 5f 4f 50 45 4e 5f 55 4e 53 50 45  SHELL_OPEN_UNSPE
30560 43 3b 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20  C;.    /* Check 
30570 66 6f 72 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  for command-line
30580 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
30590 20 20 66 6f 72 28 69 4e 61 6d 65 3d 31 3b 20 69    for(iName=1; i
305a0 4e 61 6d 65 3c 6e 41 72 67 20 26 26 20 61 7a 41  Name<nArg && azA
305b0 72 67 5b 69 4e 61 6d 65 5d 5b 30 5d 3d 3d 27 2d  rg[iName][0]=='-
305c0 27 3b 20 69 4e 61 6d 65 2b 2b 29 7b 0a 20 20 20  '; iName++){.   
305d0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
305e0 20 3d 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 3b   = azArg[iName];
305f0 0a 20 20 20 20 20 20 69 66 28 20 6f 70 74 69 6f  .      if( optio
30600 6e 4d 61 74 63 68 28 7a 2c 22 6e 65 77 22 29 20  nMatch(z,"new") 
30610 29 7b 0a 20 20 20 20 20 20 20 20 6e 65 77 46 6c  ){.        newFl
30620 61 67 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53  ag = 1;.#ifdef S
30630 51 4c 49 54 45 5f 48 41 56 45 5f 5a 4c 49 42 0a  QLITE_HAVE_ZLIB.
30640 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
30650 6f 70 74 69 6f 6e 4d 61 74 63 68 28 7a 2c 20 22  optionMatch(z, "
30660 7a 69 70 22 29 20 29 7b 0a 20 20 20 20 20 20 20  zip") ){.       
30670 20 70 2d 3e 6f 70 65 6e 4d 6f 64 65 20 3d 20 53   p->openMode = S
30680 48 45 4c 4c 5f 4f 50 45 4e 5f 5a 49 50 46 49 4c  HELL_OPEN_ZIPFIL
30690 45 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20  E;.#endif.      
306a0 7d 65 6c 73 65 20 69 66 28 20 6f 70 74 69 6f 6e  }else if( option
306b0 4d 61 74 63 68 28 7a 2c 20 22 61 70 70 65 6e 64  Match(z, "append
306c0 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d  ") ){.        p-
306d0 3e 6f 70 65 6e 4d 6f 64 65 20 3d 20 53 48 45 4c  >openMode = SHEL
306e0 4c 5f 4f 50 45 4e 5f 41 50 50 45 4e 44 56 46 53  L_OPEN_APPENDVFS
306f0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
30700 28 20 6f 70 74 69 6f 6e 4d 61 74 63 68 28 7a 2c  ( optionMatch(z,
30710 20 22 72 65 61 64 6f 6e 6c 79 22 29 20 29 7b 0a   "readonly") ){.
30720 20 20 20 20 20 20 20 20 70 2d 3e 6f 70 65 6e 4d          p->openM
30730 6f 64 65 20 3d 20 53 48 45 4c 4c 5f 4f 50 45 4e  ode = SHELL_OPEN
30740 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 20  _READONLY;.     
30750 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 30 5d 3d   }else if( z[0]=
30760 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='-' ){.        
30770 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
30780 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f 70 74  rr, "unknown opt
30790 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 7a 29 3b 0a  ion: %s\n", z);.
307a0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
307b0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74          goto met
307c0 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
307d0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
307e0 20 20 2f 2a 20 49 66 20 61 20 66 69 6c 65 6e 61    /* If a filena
307f0 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  me is specified,
30800 20 74 72 79 20 74 6f 20 6f 70 65 6e 20 69 74 20   try to open it 
30810 66 69 72 73 74 20 2a 2f 0a 20 20 20 20 7a 4e 65  first */.    zNe
30820 77 46 69 6c 65 6e 61 6d 65 20 3d 20 6e 41 72 67  wFilename = nArg
30830 3e 69 4e 61 6d 65 20 3f 20 73 71 6c 69 74 65 33  >iName ? sqlite3
30840 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 61  _mprintf("%s", a
30850 7a 41 72 67 5b 69 4e 61 6d 65 5d 29 20 3a 20 30  zArg[iName]) : 0
30860 3b 0a 20 20 20 20 69 66 28 20 7a 4e 65 77 46 69  ;.    if( zNewFi
30870 6c 65 6e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  lename ){.      
30880 69 66 28 20 6e 65 77 46 6c 61 67 20 29 20 73 68  if( newFlag ) sh
30890 65 6c 6c 44 65 6c 65 74 65 46 69 6c 65 28 7a 4e  ellDeleteFile(zN
308a0 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20  ewFilename);.   
308b0 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d     p->zDbFilenam
308c0 65 20 3d 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65  e = zNewFilename
308d0 3b 0a 20 20 20 20 20 20 6f 70 65 6e 5f 64 62 28  ;.      open_db(
308e0 70 2c 20 31 29 3b 0a 20 20 20 20 20 20 69 66 28  p, 1);.      if(
308f0 20 70 2d 3e 64 62 3d 3d 30 20 29 7b 0a 20 20 20   p->db==0 ){.   
30900 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
30910 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
30920 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27 25 73   cannot open '%s
30930 27 5c 6e 22 2c 20 7a 4e 65 77 46 69 6c 65 6e 61  '\n", zNewFilena
30940 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  me);.        sql
30950 69 74 65 33 5f 66 72 65 65 28 7a 4e 65 77 46 69  ite3_free(zNewFi
30960 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d  lename);.      }
30970 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d  else{.        p-
30980 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 20 3d 20  >zFreeOnClose = 
30990 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 3b 0a 20 20  zNewFilename;.  
309a0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
309b0 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b 0a  if( p->db==0 ){.
309c0 20 20 20 20 20 20 2f 2a 20 41 73 20 61 20 66 61        /* As a fa
309d0 6c 6c 2d 62 61 63 6b 20 6f 70 65 6e 20 61 20 54  ll-back open a T
309e0 45 4d 50 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  EMP database */.
309f0 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65        p->zDbFile
30a00 6e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  name = 0;.      
30a10 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
30a20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
30a30 69 66 28 20 28 63 3d 3d 27 6f 27 0a 20 20 20 20  if( (c=='o'.    
30a40 20 20 20 20 26 26 20 28 73 74 72 6e 63 6d 70 28      && (strncmp(
30a50 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 75 74 70 75  azArg[0], "outpu
30a60 74 22 2c 20 6e 29 3d 3d 30 7c 7c 73 74 72 6e 63  t", n)==0||strnc
30a70 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 6e  mp(azArg[0], "on
30a80 63 65 22 2c 20 6e 29 3d 3d 30 29 29 0a 20 20 20  ce", n)==0)).   
30a90 7c 7c 20 28 63 3d 3d 27 65 27 20 26 26 20 6e 3d  || (c=='e' && n=
30aa0 3d 35 20 26 26 20 73 74 72 63 6d 70 28 61 7a 41  =5 && strcmp(azA
30ab0 72 67 5b 30 5d 2c 22 65 78 63 65 6c 22 29 3d 3d  rg[0],"excel")==
30ac0 30 29 0a 20 20 29 7b 0a 20 20 20 20 63 6f 6e 73  0).  ){.    cons
30ad0 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 20 3d 20  t char *zFile = 
30ae0 6e 41 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b  nArg>=2 ? azArg[
30af0 31 5d 20 3a 20 22 73 74 64 6f 75 74 22 3b 0a 20  1] : "stdout";. 
30b00 20 20 20 69 6e 74 20 62 54 78 74 4d 6f 64 65 20     int bTxtMode 
30b10 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 61 7a 41  = 0;.    if( azA
30b20 72 67 5b 30 5d 5b 30 5d 3d 3d 27 65 27 20 29 7b  rg[0][0]=='e' ){
30b30 0a 20 20 20 20 20 20 2f 2a 20 54 72 61 6e 73 66  .      /* Transf
30b40 6f 72 6d 20 74 68 65 20 22 2e 65 78 63 65 6c 22  orm the ".excel"
30b50 20 63 6f 6d 6d 61 6e 64 20 69 6e 74 6f 20 22 2e   command into ".
30b60 6f 6e 63 65 20 2d 78 22 20 2a 2f 0a 20 20 20 20  once -x" */.    
30b70 20 20 6e 41 72 67 20 3d 20 32 3b 0a 20 20 20 20    nArg = 2;.    
30b80 20 20 61 7a 41 72 67 5b 30 5d 20 3d 20 22 6f 6e    azArg[0] = "on
30b90 63 65 22 3b 0a 20 20 20 20 20 20 7a 46 69 6c 65  ce";.      zFile
30ba0 20 3d 20 61 7a 41 72 67 5b 31 5d 20 3d 20 22 2d   = azArg[1] = "-
30bb0 78 22 3b 0a 20 20 20 20 20 20 6e 20 3d 20 34 3b  x";.      n = 4;
30bc0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e  .    }.    if( n
30bd0 41 72 67 3e 32 20 29 7b 0a 20 20 20 20 20 20 75  Arg>2 ){.      u
30be0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
30bf0 72 2c 20 22 55 73 61 67 65 3a 20 2e 25 73 20 5b  r, "Usage: .%s [
30c00 2d 65 7c 2d 78 7c 46 49 4c 45 5d 5c 6e 22 2c 20  -e|-x|FILE]\n", 
30c10 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20  azArg[0]);.     
30c20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
30c30 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
30c40 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
30c50 20 69 66 28 20 6e 3e 31 20 26 26 20 73 74 72 6e   if( n>1 && strn
30c60 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f  cmp(azArg[0], "o
30c70 6e 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  nce", n)==0 ){. 
30c80 20 20 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20       if( nArg<2 
30c90 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
30ca0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
30cb0 73 61 67 65 3a 20 2e 6f 6e 63 65 20 28 2d 65 7c  sage: .once (-e|
30cc0 2d 78 7c 46 49 4c 45 29 5c 6e 22 29 3b 0a 20 20  -x|FILE)\n");.  
30cd0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
30ce0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
30cf0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
30d00 20 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e 6f      }.      p->o
30d10 75 74 43 6f 75 6e 74 20 3d 20 32 3b 0a 20 20 20  utCount = 2;.   
30d20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d   }else{.      p-
30d30 3e 6f 75 74 43 6f 75 6e 74 20 3d 20 30 3b 0a 20  >outCount = 0;. 
30d40 20 20 20 7d 0a 20 20 20 20 6f 75 74 70 75 74 5f     }.    output_
30d50 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69 66  reset(p);.    if
30d60 28 20 7a 46 69 6c 65 5b 30 5d 3d 3d 27 2d 27 20  ( zFile[0]=='-' 
30d70 26 26 20 7a 46 69 6c 65 5b 31 5d 3d 3d 27 2d 27  && zFile[1]=='-'
30d80 20 29 20 7a 46 69 6c 65 2b 2b 3b 0a 23 69 66 6e   ) zFile++;.#ifn
30d90 64 65 66 20 53 51 4c 49 54 45 5f 4e 4f 48 41 56  def SQLITE_NOHAV
30da0 45 5f 53 59 53 54 45 4d 0a 20 20 20 20 69 66 28  E_SYSTEM.    if(
30db0 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c 20 22   strcmp(zFile, "
30dc0 2d 65 22 29 3d 3d 30 20 7c 7c 20 73 74 72 63 6d  -e")==0 || strcm
30dd0 70 28 7a 46 69 6c 65 2c 20 22 2d 78 22 29 3d 3d  p(zFile, "-x")==
30de0 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 64 6f  0 ){.      p->do
30df0 58 64 67 4f 70 65 6e 20 3d 20 31 3b 0a 20 20 20  XdgOpen = 1;.   
30e00 20 20 20 6f 75 74 70 75 74 4d 6f 64 65 50 75 73     outputModePus
30e10 68 28 70 29 3b 0a 20 20 20 20 20 20 69 66 28 20  h(p);.      if( 
30e20 7a 46 69 6c 65 5b 31 5d 3d 3d 27 78 27 20 29 7b  zFile[1]=='x' ){
30e30 0a 20 20 20 20 20 20 20 20 6e 65 77 54 65 6d 70  .        newTemp
30e40 46 69 6c 65 28 70 2c 20 22 63 73 76 22 29 3b 0a  File(p, "csv");.
30e50 20 20 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20          p->mode 
30e60 3d 20 4d 4f 44 45 5f 43 73 76 3b 0a 20 20 20 20  = MODE_Csv;.    
30e70 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
30e80 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 63  intf(sizeof(p->c
30e90 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d  olSeparator), p-
30ea0 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 20 53  >colSeparator, S
30eb0 45 50 5f 43 6f 6d 6d 61 29 3b 0a 20 20 20 20 20  EP_Comma);.     
30ec0 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
30ed0 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f  ntf(sizeof(p->ro
30ee0 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e  wSeparator), p->
30ef0 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45  rowSeparator, SE
30f00 50 5f 43 72 4c 66 29 3b 0a 20 20 20 20 20 20 7d  P_CrLf);.      }
30f10 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 65  else{.        ne
30f20 77 54 65 6d 70 46 69 6c 65 28 70 2c 20 22 74 78  wTempFile(p, "tx
30f30 74 22 29 3b 0a 20 20 20 20 20 20 20 20 62 54 78  t");.        bTx
30f40 74 4d 6f 64 65 20 3d 20 31 3b 0a 20 20 20 20 20  tMode = 1;.     
30f50 20 7d 0a 20 20 20 20 20 20 7a 46 69 6c 65 20 3d   }.      zFile =
30f60 20 70 2d 3e 7a 54 65 6d 70 46 69 6c 65 3b 0a 20   p->zTempFile;. 
30f70 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
30f80 51 4c 49 54 45 5f 4e 4f 48 41 56 45 5f 53 59 53  QLITE_NOHAVE_SYS
30f90 54 45 4d 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a  TEM */.    if( z
30fa0 46 69 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29 7b 0a  File[0]=='|' ){.
30fb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
30fc0 49 54 5f 50 4f 50 45 4e 0a 20 20 20 20 20 20 72  IT_POPEN.      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 45 72 72 6f 72 3a 20 70 69 70 65 73 20  , "Error: pipes 
30ff0 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65  are not supporte
31000 64 20 69 6e 20 74 68 69 73 20 4f 53 5c 6e 22 29  d in this OS\n")
31010 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
31020 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 73        p->out = s
31030 74 64 6f 75 74 3b 0a 23 65 6c 73 65 0a 20 20 20  tdout;.#else.   
31040 20 20 20 70 2d 3e 6f 75 74 20 3d 20 70 6f 70 65     p->out = pope
31050 6e 28 7a 46 69 6c 65 20 2b 20 31 2c 20 22 77 22  n(zFile + 1, "w"
31060 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
31070 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  out==0 ){.      
31080 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
31090 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 63 61 6e  derr,"Error: can
310a0 6e 6f 74 20 6f 70 65 6e 20 70 69 70 65 20 5c 22  not open pipe \"
310b0 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65 20 2b  %s\"\n", zFile +
310c0 20 31 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e   1);.        p->
310d0 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20  out = stdout;.  
310e0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
310f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
31100 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
31110 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 6f 75  ntf(sizeof(p->ou
31120 74 66 69 6c 65 29 2c 20 70 2d 3e 6f 75 74 66 69  tfile), p->outfi
31130 6c 65 2c 20 22 25 73 22 2c 20 7a 46 69 6c 65 29  le, "%s", zFile)
31140 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
31150 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
31160 20 20 70 2d 3e 6f 75 74 20 3d 20 6f 75 74 70 75    p->out = outpu
31170 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46 69 6c  t_file_open(zFil
31180 65 2c 20 62 54 78 74 4d 6f 64 65 29 3b 0a 20 20  e, bTxtMode);.  
31190 20 20 20 20 69 66 28 20 70 2d 3e 6f 75 74 3d 3d      if( p->out==
311a0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  0 ){.        if(
311b0 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c 22 6f   strcmp(zFile,"o
311c0 66 66 22 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ff")!=0 ){.     
311d0 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
311e0 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
311f0 63 61 6e 6e 6f 74 20 77 72 69 74 65 20 74 6f 20  cannot write to 
31200 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65  \"%s\"\n", zFile
31210 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
31220 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 73 74       p->out = st
31230 64 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 72 63  dout;.        rc
31240 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 20 65 6c   = 1;.      } el
31250 73 65 20 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  se {.        sql
31260 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
31270 7a 65 6f 66 28 70 2d 3e 6f 75 74 66 69 6c 65 29  zeof(p->outfile)
31280 2c 20 70 2d 3e 6f 75 74 66 69 6c 65 2c 20 22 25  , p->outfile, "%
31290 73 22 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20 20  s", zFile);.    
312a0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
312b0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 70 27 20  e..  if( c=='p' 
312c0 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63  && n>=3 && strnc
312d0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 70 72  mp(azArg[0], "pr
312e0 69 6e 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  int", n)==0 ){. 
312f0 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f     int i;.    fo
31300 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=1; i<nArg; i
31310 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 69  ++){.      if( i
31320 3e 31 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28  >1 ) raw_printf(
31330 70 2d 3e 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20  p->out, " ");.  
31340 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
31350 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 61 7a  p->out, "%s", az
31360 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20  Arg[i]);.    }. 
31370 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
31380 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 7d  >out, "\n");.  }
31390 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
313a0 70 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  p' && strncmp(az
313b0 41 72 67 5b 30 5d 2c 20 22 70 72 6f 6d 70 74 22  Arg[0], "prompt"
313c0 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
313d0 66 28 20 6e 41 72 67 20 3e 3d 20 32 29 20 7b 0a  f( nArg >= 2) {.
313e0 20 20 20 20 20 20 73 74 72 6e 63 70 79 28 6d 61        strncpy(ma
313f0 69 6e 50 72 6f 6d 70 74 2c 61 7a 41 72 67 5b 31  inPrompt,azArg[1
31400 5d 2c 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65  ],(int)ArraySize
31410 28 6d 61 69 6e 50 72 6f 6d 70 74 29 2d 31 29 3b  (mainPrompt)-1);
31420 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e  .    }.    if( n
31430 41 72 67 20 3e 3d 20 33 29 20 7b 0a 20 20 20 20  Arg >= 3) {.    
31440 20 20 73 74 72 6e 63 70 79 28 63 6f 6e 74 69 6e    strncpy(contin
31450 75 65 50 72 6f 6d 70 74 2c 61 7a 41 72 67 5b 32  uePrompt,azArg[2
31460 5d 2c 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65  ],(int)ArraySize
31470 28 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74 29  (continuePrompt)
31480 2d 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  -1);.    }.  }el
31490 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 71 27  se..  if( c=='q'
314a0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
314b0 67 5b 30 5d 2c 20 22 71 75 69 74 22 2c 20 6e 29  g[0], "quit", n)
314c0 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
314d0 32 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66  2;.  }else..  if
314e0 28 20 63 3d 3d 27 72 27 20 26 26 20 6e 3e 3d 33  ( c=='r' && n>=3
314f0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
31500 67 5b 30 5d 2c 20 22 72 65 61 64 22 2c 20 6e 29  g[0], "read", n)
31510 3d 3d 30 20 29 7b 0a 20 20 20 20 46 49 4c 45 20  ==0 ){.    FILE 
31520 2a 61 6c 74 3b 0a 20 20 20 20 69 66 28 20 6e 41  *alt;.    if( nA
31530 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72  rg!=2 ){.      r
31540 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
31550 2c 20 22 55 73 61 67 65 3a 20 2e 72 65 61 64 20  , "Usage: .read 
31560 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20 20  FILE\n");.      
31570 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f  rc = 1;.      go
31580 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
31590 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  exit;.    }.    
315a0 61 6c 74 20 3d 20 66 6f 70 65 6e 28 61 7a 41 72  alt = fopen(azAr
315b0 67 5b 31 5d 2c 20 22 72 62 22 29 3b 0a 20 20 20  g[1], "rb");.   
315c0 20 69 66 28 20 61 6c 74 3d 3d 30 20 29 7b 0a 20   if( alt==0 ){. 
315d0 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
315e0 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
315f0 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73  cannot open \"%s
31600 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29  \"\n", azArg[1])
31610 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
31620 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
31630 20 72 63 20 3d 20 70 72 6f 63 65 73 73 5f 69 6e   rc = process_in
31640 70 75 74 28 70 2c 20 61 6c 74 29 3b 0a 20 20 20  put(p, alt);.   
31650 20 20 20 66 63 6c 6f 73 65 28 61 6c 74 29 3b 0a     fclose(alt);.
31660 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
31670 20 69 66 28 20 63 3d 3d 27 72 27 20 26 26 20 6e   if( c=='r' && n
31680 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=3 && strncmp(a
31690 7a 41 72 67 5b 30 5d 2c 20 22 72 65 73 74 6f 72  zArg[0], "restor
316a0 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  e", n)==0 ){.   
316b0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 72   const char *zSr
316c0 63 46 69 6c 65 3b 0a 20 20 20 20 63 6f 6e 73 74  cFile;.    const
316d0 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 20 20   char *zDb;.    
316e0 73 71 6c 69 74 65 33 20 2a 70 53 72 63 3b 0a 20  sqlite3 *pSrc;. 
316f0 20 20 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75     sqlite3_backu
31700 70 20 2a 70 42 61 63 6b 75 70 3b 0a 20 20 20 20  p *pBackup;.    
31710 69 6e 74 20 6e 54 69 6d 65 6f 75 74 20 3d 20 30  int nTimeout = 0
31720 3b 0a 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d  ;..    if( nArg=
31730 3d 32 20 29 7b 0a 20 20 20 20 20 20 7a 53 72 63  =2 ){.      zSrc
31740 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b  File = azArg[1];
31750 0a 20 20 20 20 20 20 7a 44 62 20 3d 20 22 6d 61  .      zDb = "ma
31760 69 6e 22 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  in";.    }else i
31770 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20  f( nArg==3 ){.  
31780 20 20 20 20 7a 53 72 63 46 69 6c 65 20 3d 20 61      zSrcFile = a
31790 7a 41 72 67 5b 32 5d 3b 0a 20 20 20 20 20 20 7a  zArg[2];.      z
317a0 44 62 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20  Db = azArg[1];. 
317b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
317c0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
317d0 72 2c 20 22 55 73 61 67 65 3a 20 2e 72 65 73 74  r, "Usage: .rest
317e0 6f 72 65 20 3f 44 42 3f 20 46 49 4c 45 5c 6e 22  ore ?DB? FILE\n"
317f0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
31800 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61  .      goto meta
31810 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
31820 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71     }.    rc = sq
31830 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 53 72 63 46  lite3_open(zSrcF
31840 69 6c 65 2c 20 26 70 53 72 63 29 3b 0a 20 20 20  ile, &pSrc);.   
31850 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
31860 4f 4b 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  OK ){.      utf8
31870 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
31880 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f  "Error: cannot o
31890 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a  pen \"%s\"\n", z
318a0 53 72 63 46 69 6c 65 29 3b 0a 20 20 20 20 20 20  SrcFile);.      
318b0 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 53  sqlite3_close(pS
318c0 72 63 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  rc);.      retur
318d0 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f  n 1;.    }.    o
318e0 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20  pen_db(p, 0);.  
318f0 20 20 70 42 61 63 6b 75 70 20 3d 20 73 71 6c 69    pBackup = sqli
31900 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28  te3_backup_init(
31910 70 2d 3e 64 62 2c 20 7a 44 62 2c 20 70 53 72 63  p->db, zDb, pSrc
31920 2c 20 22 6d 61 69 6e 22 29 3b 0a 20 20 20 20 69  , "main");.    i
31930 66 28 20 70 42 61 63 6b 75 70 3d 3d 30 20 29 7b  f( pBackup==0 ){
31940 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
31950 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
31960 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65  r: %s\n", sqlite
31970 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29  3_errmsg(p->db))
31980 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
31990 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20 20 20  close(pSrc);.   
319a0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
319b0 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 28 72   }.    while( (r
319c0 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b  c = sqlite3_back
319d0 75 70 5f 73 74 65 70 28 70 42 61 63 6b 75 70 2c  up_step(pBackup,
319e0 31 30 30 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  100))==SQLITE_OK
319f0 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20 72 63  .          || rc
31a00 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 20 29  ==SQLITE_BUSY  )
31a10 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  {.      if( rc==
31a20 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
31a30 20 20 20 20 20 20 20 69 66 28 20 6e 54 69 6d 65         if( nTime
31a40 6f 75 74 2b 2b 20 3e 3d 20 33 20 29 20 62 72 65  out++ >= 3 ) bre
31a50 61 6b 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  ak;.        sqli
31a60 74 65 33 5f 73 6c 65 65 70 28 31 30 30 29 3b 0a  te3_sleep(100);.
31a70 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
31a80 20 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70    sqlite3_backup
31a90 5f 66 69 6e 69 73 68 28 70 42 61 63 6b 75 70 29  _finish(pBackup)
31aa0 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
31ab0 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
31ac0 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d     rc = 0;.    }
31ad0 65 6c 73 65 20 69 66 28 20 72 63 3d 3d 53 51 4c  else if( rc==SQL
31ae0 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d  ITE_BUSY || rc==
31af0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b  SQLITE_LOCKED ){
31b00 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
31b10 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
31b20 3a 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  : source databas
31b30 65 20 69 73 20 62 75 73 79 5c 6e 22 29 3b 0a 20  e is busy\n");. 
31b40 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
31b50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74   }else{.      ut
31b60 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
31b70 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  , "Error: %s\n",
31b80 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
31b90 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 72  p->db));.      r
31ba0 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  c = 1;.    }.   
31bb0 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70   sqlite3_close(p
31bc0 53 72 63 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  Src);.  }else.. 
31bd0 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73   if( c=='s' && s
31be0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
31bf0 20 22 73 63 61 6e 73 74 61 74 73 22 2c 20 6e 29   "scanstats", n)
31c00 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
31c10 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
31c20 70 2d 3e 73 63 61 6e 73 74 61 74 73 4f 6e 20 3d  p->scanstatsOn =
31c30 20 28 75 38 29 62 6f 6f 6c 65 61 6e 56 61 6c 75   (u8)booleanValu
31c40 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 23 69 66  e(azArg[1]);.#if
31c50 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
31c60 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
31c70 55 53 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  US.      raw_pri
31c80 6e 74 66 28 73 74 64 65 72 72 2c 20 22 57 61 72  ntf(stderr, "War
31c90 6e 69 6e 67 3a 20 2e 73 63 61 6e 73 74 61 74 73  ning: .scanstats
31ca0 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 69   not available i
31cb0 6e 20 74 68 69 73 20 62 75 69 6c 64 2e 5c 6e 22  n this build.\n"
31cc0 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 65  );.#endif.    }e
31cd0 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
31ce0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
31cf0 73 61 67 65 3a 20 2e 73 63 61 6e 73 74 61 74 73  sage: .scanstats
31d00 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20   on|off\n");.   
31d10 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
31d20 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
31d30 63 3d 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d  c=='s' && strncm
31d40 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 63 68  p(azArg[0], "sch
31d50 65 6d 61 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ema", n)==0 ){. 
31d60 20 20 20 53 68 65 6c 6c 54 65 78 74 20 73 53 65     ShellText sSe
31d70 6c 65 63 74 3b 0a 20 20 20 20 53 68 65 6c 6c 53  lect;.    ShellS
31d80 74 61 74 65 20 64 61 74 61 3b 0a 20 20 20 20 63  tate data;.    c
31d90 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30  har *zErrMsg = 0
31da0 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  ;.    const char
31db0 20 2a 7a 44 69 76 20 3d 20 22 28 22 3b 0a 20 20   *zDiv = "(";.  
31dc0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
31dd0 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74  ame = 0;.    int
31de0 20 69 53 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20   iSchema = 0;.  
31df0 20 20 69 6e 74 20 62 44 65 62 75 67 20 3d 20 30    int bDebug = 0
31e00 3b 0a 20 20 20 20 69 6e 74 20 69 69 3b 0a 0a 20  ;.    int ii;.. 
31e10 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29     open_db(p, 0)
31e20 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 64 61  ;.    memcpy(&da
31e30 74 61 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64 61  ta, p, sizeof(da
31e40 74 61 29 29 3b 0a 20 20 20 20 64 61 74 61 2e 73  ta));.    data.s
31e50 68 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20  howHeader = 0;. 
31e60 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20     data.cMode = 
31e70 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45  data.mode = MODE
31e80 5f 53 65 6d 69 3b 0a 20 20 20 20 69 6e 69 74 54  _Semi;.    initT
31e90 65 78 74 28 26 73 53 65 6c 65 63 74 29 3b 0a 20  ext(&sSelect);. 
31ea0 20 20 20 66 6f 72 28 69 69 3d 31 3b 20 69 69 3c     for(ii=1; ii<
31eb0 6e 41 72 67 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  nArg; ii++){.   
31ec0 20 20 20 69 66 28 20 6f 70 74 69 6f 6e 4d 61 74     if( optionMat
31ed0 63 68 28 61 7a 41 72 67 5b 69 69 5d 2c 22 69 6e  ch(azArg[ii],"in
31ee0 64 65 6e 74 22 29 20 29 7b 0a 20 20 20 20 20 20  dent") ){.      
31ef0 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64    data.cMode = d
31f00 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
31f10 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20 7d 65  Pretty;.      }e
31f20 6c 73 65 20 69 66 28 20 6f 70 74 69 6f 6e 4d 61  lse if( optionMa
31f30 74 63 68 28 61 7a 41 72 67 5b 69 69 5d 2c 22 64  tch(azArg[ii],"d
31f40 65 62 75 67 22 29 20 29 7b 0a 20 20 20 20 20 20  ebug") ){.      
31f50 20 20 62 44 65 62 75 67 20 3d 20 31 3b 0a 20 20    bDebug = 1;.  
31f60 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 4e      }else if( zN
31f70 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ame==0 ){.      
31f80 20 20 7a 4e 61 6d 65 20 3d 20 61 7a 41 72 67 5b    zName = azArg[
31f90 69 69 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ii];.      }else
31fa0 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
31fb0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
31fc0 61 67 65 3a 20 2e 73 63 68 65 6d 61 20 3f 2d 2d  age: .schema ?--
31fd0 69 6e 64 65 6e 74 3f 20 3f 4c 49 4b 45 2d 50 41  indent? ?LIKE-PA
31fe0 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20  TTERN?\n");.    
31ff0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
32000 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
32010 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
32020 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
32030 28 20 7a 4e 61 6d 65 21 3d 30 20 29 7b 0a 20 20  ( zName!=0 ){.  
32040 20 20 20 20 69 6e 74 20 69 73 4d 61 73 74 65 72      int isMaster
32050 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69   = sqlite3_strli
32060 6b 65 28 7a 4e 61 6d 65 2c 20 22 73 71 6c 69 74  ke(zName, "sqlit
32070 65 5f 6d 61 73 74 65 72 22 2c 20 27 5c 5c 27 29  e_master", '\\')
32080 3d 3d 30 3b 0a 20 20 20 20 20 20 69 66 28 20 69  ==0;.      if( i
32090 73 4d 61 73 74 65 72 20 7c 7c 20 73 71 6c 69 74  sMaster || sqlit
320a0 65 33 5f 73 74 72 6c 69 6b 65 28 7a 4e 61 6d 65  e3_strlike(zName
320b0 2c 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ,"sqlite_temp_ma
320c0 73 74 65 72 22 2c 20 27 5c 5c 27 29 3d 3d 30 20  ster", '\\')==0 
320d0 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20  ){.        char 
320e0 2a 6e 65 77 5f 61 72 67 76 5b 32 5d 2c 20 2a 6e  *new_argv[2], *n
320f0 65 77 5f 63 6f 6c 76 5b 32 5d 3b 0a 20 20 20 20  ew_colv[2];.    
32100 20 20 20 20 6e 65 77 5f 61 72 67 76 5b 30 5d 20      new_argv[0] 
32110 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
32120 66 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f(.             
32130 20 20 20 20 20 20 20 20 20 22 43 52 45 41 54 45           "CREATE
32140 20 54 41 42 4c 45 20 25 73 20 28 5c 6e 22 0a 20   TABLE %s (\n". 
32150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32160 20 20 20 20 20 22 20 20 74 79 70 65 20 74 65 78       "  type tex
32170 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20  t,\n".          
32180 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 6e              "  n
32190 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ame text,\n".   
321a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321b0 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74     "  tbl_name t
321c0 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20  ext,\n".        
321d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
321e0 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65   rootpage intege
321f0 72 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20  r,\n".          
32200 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 73              "  s
32210 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20  ql text\n".     
32220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32230 20 22 29 22 2c 20 69 73 4d 61 73 74 65 72 20 3f   ")", isMaster ?
32240 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22   "sqlite_master"
32250 20 3a 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f   : "sqlite_temp_
32260 6d 61 73 74 65 72 22 29 3b 0a 20 20 20 20 20 20  master");.      
32270 20 20 6e 65 77 5f 61 72 67 76 5b 31 5d 20 3d 20    new_argv[1] = 
32280 30 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63  0;.        new_c
32290 6f 6c 76 5b 30 5d 20 3d 20 22 73 71 6c 22 3b 0a  olv[0] = "sql";.
322a0 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76          new_colv
322b0 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  [1] = 0;.       
322c0 20 63 61 6c 6c 62 61 63 6b 28 26 64 61 74 61 2c   callback(&data,
322d0 20 31 2c 20 6e 65 77 5f 61 72 67 76 2c 20 6e 65   1, new_argv, ne
322e0 77 5f 63 6f 6c 76 29 3b 0a 20 20 20 20 20 20 20  w_colv);.       
322f0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 6e 65   sqlite3_free(ne
32300 77 5f 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20  w_argv[0]);.    
32310 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
32320 28 20 7a 44 69 76 20 29 7b 0a 20 20 20 20 20 20  ( zDiv ){.      
32330 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
32340 74 6d 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  tmt = 0;.      r
32350 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
32360 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 22 53  are_v2(p->db, "S
32370 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
32380 70 72 61 67 6d 61 5f 64 61 74 61 62 61 73 65 5f  pragma_database_
32390 6c 69 73 74 22 2c 0a 20 20 20 20 20 20 20 20 20  list",.         
323a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323b0 20 20 20 20 20 2d 31 2c 20 26 70 53 74 6d 74 2c       -1, &pStmt,
323c0 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
323d0 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  c ){.        utf
323e0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
323f0 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20   "Error: %s\n", 
32400 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70  sqlite3_errmsg(p
32410 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20 20  ->db));.        
32420 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
32430 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20  (pStmt);.       
32440 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   rc = 1;.       
32450 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61   goto meta_comma
32460 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d  nd_exit;.      }
32470 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78  .      appendTex
32480 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53 45 4c  t(&sSelect, "SEL
32490 45 43 54 20 73 71 6c 20 46 52 4f 4d 22 2c 20 30  ECT sql FROM", 0
324a0 29 3b 0a 20 20 20 20 20 20 69 53 63 68 65 6d 61  );.      iSchema
324b0 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c   = 0;.      whil
324c0 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  e( sqlite3_step(
324d0 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52  pStmt)==SQLITE_R
324e0 4f 57 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f  OW ){.        co
324f0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20  nst char *zDb = 
32500 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
32510 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
32520 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  (pStmt, 0);.    
32530 20 20 20 20 63 68 61 72 20 7a 53 63 4e 75 6d 5b      char zScNum[
32540 33 30 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  30];.        sql
32550 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
32560 7a 65 6f 66 28 7a 53 63 4e 75 6d 29 2c 20 7a 53  zeof(zScNum), zS
32570 63 4e 75 6d 2c 20 22 25 64 22 2c 20 2b 2b 69 53  cNum, "%d", ++iS
32580 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 20 20  chema);.        
32590 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
325a0 65 63 74 2c 20 7a 44 69 76 2c 20 30 29 3b 0a 20  ect, zDiv, 0);. 
325b0 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20 22 20         zDiv = " 
325c0 55 4e 49 4f 4e 20 41 4c 4c 20 22 3b 0a 20 20 20  UNION ALL ";.   
325d0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
325e0 26 73 53 65 6c 65 63 74 2c 20 22 53 45 4c 45 43  &sSelect, "SELEC
325f0 54 20 73 68 65 6c 6c 5f 61 64 64 5f 73 63 68 65  T shell_add_sche
32600 6d 61 28 73 71 6c 2c 22 2c 20 30 29 3b 0a 20 20  ma(sql,", 0);.  
32610 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
32620 33 5f 73 74 72 69 63 6d 70 28 7a 44 62 2c 20 22  3_stricmp(zDb, "
32630 6d 61 69 6e 22 29 21 3d 30 20 29 7b 0a 20 20 20  main")!=0 ){.   
32640 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
32650 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c  t(&sSelect, zDb,
32660 20 27 22 27 29 3b 0a 20 20 20 20 20 20 20 20 7d   '"');.        }
32670 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
32680 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
32690 65 63 74 2c 20 22 4e 55 4c 4c 22 2c 20 30 29 3b  ect, "NULL", 0);
326a0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
326b0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
326c0 53 65 6c 65 63 74 2c 20 22 2c 6e 61 6d 65 29 20  Select, ",name) 
326d0 41 53 20 73 71 6c 2c 20 74 79 70 65 2c 20 74 62  AS sql, type, tb
326e0 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f  l_name, name, ro
326f0 77 69 64 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20  wid,", 0);.     
32700 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
32710 53 65 6c 65 63 74 2c 20 7a 53 63 4e 75 6d 2c 20  Select, zScNum, 
32720 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65  0);.        appe
32730 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
32740 20 22 20 41 53 20 73 6e 75 6d 2c 20 22 2c 20 30   " AS snum, ", 0
32750 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
32760 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
32770 7a 44 62 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20  zDb, '\'');.    
32780 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
32790 73 53 65 6c 65 63 74 2c 20 22 20 41 53 20 73 6e  sSelect, " AS sn
327a0 61 6d 65 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a  ame FROM ", 0);.
327b0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
327c0 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 44 62  xt(&sSelect, zDb
327d0 2c 20 27 22 27 29 3b 0a 20 20 20 20 20 20 20 20  , '"');.        
327e0 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
327f0 65 63 74 2c 20 22 2e 73 71 6c 69 74 65 5f 6d 61  ect, ".sqlite_ma
32800 73 74 65 72 22 2c 20 30 29 3b 0a 20 20 20 20 20  ster", 0);.     
32810 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
32820 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
32830 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
32840 49 4e 54 52 4f 53 50 45 43 54 49 4f 4e 5f 50 52  INTROSPECTION_PR
32850 41 47 4d 41 53 0a 20 20 20 20 20 20 69 66 28 20  AGMAS.      if( 
32860 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  zName ){.       
32870 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
32880 6c 65 63 74 2c 0a 20 20 20 20 20 20 20 20 20 20  lect,.          
32890 20 22 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c   " UNION ALL SEL
328a0 45 43 54 20 73 68 65 6c 6c 5f 6d 6f 64 75 6c 65  ECT shell_module
328b0 5f 73 63 68 65 6d 61 28 6e 61 6d 65 29 2c 22 0a  _schema(name),".
328c0 20 20 20 20 20 20 20 20 20 20 20 22 20 27 74 61             " 'ta
328d0 62 6c 65 27 2c 20 6e 61 6d 65 2c 20 6e 61 6d 65  ble', name, name
328e0 2c 20 6e 61 6d 65 2c 20 39 65 2b 39 39 2c 20 27  , name, 9e+99, '
328f0 6d 61 69 6e 27 20 46 52 4f 4d 20 70 72 61 67 6d  main' FROM pragm
32900 61 5f 6d 6f 64 75 6c 65 5f 6c 69 73 74 22 2c 20  a_module_list", 
32910 30 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64  0);.      }.#end
32920 69 66 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54  if.      appendT
32930 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 29  ext(&sSelect, ")
32940 20 57 48 45 52 45 20 22 2c 20 30 29 3b 0a 20 20   WHERE ", 0);.  
32950 20 20 20 20 69 66 28 20 7a 4e 61 6d 65 20 29 7b      if( zName ){
32960 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a  .        char *z
32970 51 61 72 67 20 3d 20 73 71 6c 69 74 65 33 5f 6d  Qarg = sqlite3_m
32980 70 72 69 6e 74 66 28 22 25 51 22 2c 20 7a 4e 61  printf("%Q", zNa
32990 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  me);.        int
329a0 20 62 47 6c 6f 62 20 3d 20 73 74 72 63 68 72 28   bGlob = strchr(
329b0 7a 4e 61 6d 65 2c 20 27 2a 27 29 20 21 3d 20 30  zName, '*') != 0
329c0 20 7c 7c 20 73 74 72 63 68 72 28 7a 4e 61 6d 65   || strchr(zName
329d0 2c 20 27 3f 27 29 20 21 3d 20 30 20 7c 7c 0a 20  , '?') != 0 ||. 
329e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329f0 20 20 20 73 74 72 63 68 72 28 7a 4e 61 6d 65 2c     strchr(zName,
32a00 20 27 5b 27 29 20 21 3d 20 30 3b 0a 20 20 20 20   '[') != 0;.    
32a10 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28 7a      if( strchr(z
32a20 4e 61 6d 65 2c 20 27 2e 27 29 20 29 7b 0a 20 20  Name, '.') ){.  
32a30 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
32a40 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 6c 6f  xt(&sSelect, "lo
32a50 77 65 72 28 70 72 69 6e 74 66 28 27 25 73 2e 25  wer(printf('%s.%
32a60 73 27 2c 73 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d  s',sname,tbl_nam
32a70 65 29 29 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  e))", 0);.      
32a80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
32a90 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
32aa0 53 65 6c 65 63 74 2c 20 22 6c 6f 77 65 72 28 74  Select, "lower(t
32ab0 62 6c 5f 6e 61 6d 65 29 22 2c 20 30 29 3b 0a 20  bl_name)", 0);. 
32ac0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
32ad0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
32ae0 6c 65 63 74 2c 20 62 47 6c 6f 62 20 3f 20 22 20  lect, bGlob ? " 
32af0 47 4c 4f 42 20 22 20 3a 20 22 20 4c 49 4b 45 20  GLOB " : " LIKE 
32b00 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61  ", 0);.        a
32b10 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
32b20 63 74 2c 20 7a 51 61 72 67 2c 20 30 29 3b 0a 20  ct, zQarg, 0);. 
32b30 20 20 20 20 20 20 20 69 66 28 20 21 62 47 6c 6f         if( !bGlo
32b40 62 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  b ){.          a
32b50 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
32b60 63 74 2c 20 22 20 45 53 43 41 50 45 20 27 5c 5c  ct, " ESCAPE '\\
32b70 27 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ' ", 0);.       
32b80 20 7d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e   }.        appen
32b90 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
32ba0 22 20 41 4e 44 20 22 2c 20 30 29 3b 0a 20 20 20  " AND ", 0);.   
32bb0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
32bc0 65 28 7a 51 61 72 67 29 3b 0a 20 20 20 20 20 20  e(zQarg);.      
32bd0 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
32be0 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 74 79  xt(&sSelect, "ty
32bf0 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20 73  pe!='meta' AND s
32c00 71 6c 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 22 0a  ql IS NOT NULL".
32c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44             " ORD
32c30 45 52 20 42 59 20 73 6e 75 6d 2c 20 72 6f 77 69  ER BY snum, rowi
32c40 64 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  d", 0);.      if
32c50 28 20 62 44 65 62 75 67 20 29 7b 0a 20 20 20 20  ( bDebug ){.    
32c60 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
32c70 70 2d 3e 6f 75 74 2c 20 22 53 51 4c 3a 20 25 73  p->out, "SQL: %s
32c80 3b 5c 6e 22 2c 20 73 53 65 6c 65 63 74 2e 7a 29  ;\n", sSelect.z)
32c90 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
32ca0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
32cb0 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
32cc0 73 53 65 6c 65 63 74 2e 7a 2c 20 63 61 6c 6c 62  sSelect.z, callb
32cd0 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72  ack, &data, &zEr
32ce0 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 7d 0a 20  rMsg);.      }. 
32cf0 20 20 20 20 20 66 72 65 65 54 65 78 74 28 26 73       freeText(&s
32d00 53 65 6c 65 63 74 29 3b 0a 20 20 20 20 7d 0a 20  Select);.    }. 
32d10 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29     if( zErrMsg )
32d20 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
32d30 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
32d40 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73  r: %s\n", zErrMs
32d50 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  g);.      sqlite
32d60 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b  3_free(zErrMsg);
32d70 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
32d80 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 20     }else if( rc 
32d90 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  != SQLITE_OK ){.
32da0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
32db0 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
32dc0 71 75 65 72 79 69 6e 67 20 73 63 68 65 6d 61 20  querying schema 
32dd0 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29 3b  information\n");
32de0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
32df0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
32e00 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  rc = 0;.    }.  
32e10 7d 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e  }else..#if defin
32e20 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
32e30 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
32e40 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54  TE_ENABLE_SELECT
32e50 54 52 41 43 45 29 0a 20 20 69 66 28 20 63 3d 3d  TRACE).  if( c==
32e60 27 73 27 20 26 26 20 6e 3d 3d 31 31 20 26 26 20  's' && n==11 && 
32e70 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
32e80 2c 20 22 73 65 6c 65 63 74 74 72 61 63 65 22 2c  , "selecttrace",
32e90 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71   n)==0 ){.    sq
32ea0 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
32eb0 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56   = (int)integerV
32ec0 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a  alue(azArg[1]);.
32ed0 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
32ee0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
32ef0 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f  TE_ENABLE_SESSIO
32f00 4e 29 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20  N).  if( c=='s' 
32f10 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
32f20 5b 30 5d 2c 22 73 65 73 73 69 6f 6e 22 2c 6e 29  [0],"session",n)
32f30 3d 3d 30 20 26 26 20 6e 3e 3d 33 20 29 7b 0a 20  ==0 && n>=3 ){. 
32f40 20 20 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a     OpenSession *
32f50 70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61  pSession = &p->a
32f60 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a 20 20 20 20  Session[0];.    
32f70 63 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20 26  char **azCmd = &
32f80 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 69 6e  azArg[1];.    in
32f90 74 20 69 53 65 73 20 3d 20 30 3b 0a 20 20 20 20  t iSes = 0;.    
32fa0 69 6e 74 20 6e 43 6d 64 20 3d 20 6e 41 72 67 20  int nCmd = nArg 
32fb0 2d 20 31 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  - 1;.    int i;.
32fc0 20 20 20 20 69 66 28 20 6e 41 72 67 3c 3d 31 20      if( nArg<=1 
32fd0 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73  ) goto session_s
32fe0 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20  yntax_error;.   
32ff0 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a   open_db(p, 0);.
33000 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 33 20      if( nArg>=3 
33010 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 53 65  ){.      for(iSe
33020 73 3d 30 3b 20 69 53 65 73 3c 70 2d 3e 6e 53 65  s=0; iSes<p->nSe
33030 73 73 69 6f 6e 3b 20 69 53 65 73 2b 2b 29 7b 0a  ssion; iSes++){.
33040 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63          if( strc
33050 6d 70 28 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69  mp(p->aSession[i
33060 53 65 73 5d 2e 7a 4e 61 6d 65 2c 20 61 7a 41 72  Ses].zName, azAr
33070 67 5b 31 5d 29 3d 3d 30 20 29 20 62 72 65 61 6b  g[1])==0 ) break
33080 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
33090 69 66 28 20 69 53 65 73 3c 70 2d 3e 6e 53 65 73  if( iSes<p->nSes
330a0 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  sion ){.        
330b0 70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61  pSession = &p->a
330c0 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d 3b 0a 20  Session[iSes];. 
330d0 20 20 20 20 20 20 20 61 7a 43 6d 64 2b 2b 3b 0a         azCmd++;.
330e0 20 20 20 20 20 20 20 20 6e 43 6d 64 2d 2d 3b 0a          nCmd--;.
330f0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
33100 20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20       pSession = 
33110 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 30 5d 3b  &p->aSession[0];
33120 0a 20 20 20 20 20 20 20 20 69 53 65 73 20 3d 20  .        iSes = 
33130 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
33140 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f  ..    /* .sessio
33150 6e 20 61 74 74 61 63 68 20 54 41 42 4c 45 0a 20  n attach TABLE. 
33160 20 20 20 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65     ** Invoke the
33170 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f   sqlite3session_
33180 61 74 74 61 63 68 28 29 20 69 6e 74 65 72 66 61  attach() interfa
33190 63 65 20 74 6f 20 61 74 74 61 63 68 20 61 20 70  ce to attach a p
331a0 61 72 74 69 63 75 6c 61 72 0a 20 20 20 20 2a 2a  articular.    **
331b0 20 74 61 62 6c 65 20 73 6f 20 74 68 61 74 20 69   table so that i
331c0 74 20 69 73 20 6e 65 76 65 72 20 66 69 6c 74 65  t is never filte
331d0 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  red..    */.    
331e0 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64  if( strcmp(azCmd
331f0 5b 30 5d 2c 22 61 74 74 61 63 68 22 29 3d 3d 30  [0],"attach")==0
33200 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 43   ){.      if( nC
33210 6d 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65 73  md!=2 ) goto ses
33220 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f  sion_syntax_erro
33230 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53 65  r;.      if( pSe
33240 73 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 7b 0a 20  ssion->p==0 ){. 
33250 20 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5f 6e         session_n
33260 6f 74 5f 6f 70 65 6e 3a 0a 20 20 20 20 20 20 20  ot_open:.       
33270 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
33280 72 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 20 73  rr, "ERROR: No s
33290 65 73 73 69 6f 6e 73 20 61 72 65 20 6f 70 65 6e  essions are open
332a0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  \n");.      }els
332b0 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  e{.        rc = 
332c0 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61  sqlite3session_a
332d0 74 74 61 63 68 28 70 53 65 73 73 69 6f 6e 2d 3e  ttach(pSession->
332e0 70 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20  p, azCmd[1]);.  
332f0 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a        if( rc ){.
33300 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
33310 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 52  intf(stderr, "ER
33320 52 4f 52 3a 20 73 71 6c 69 74 65 33 73 65 73 73  ROR: sqlite3sess
33330 69 6f 6e 5f 61 74 74 61 63 68 28 29 20 72 65 74  ion_attach() ret
33340 75 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63 29 3b  urns %d\n", rc);
33350 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
33360 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
33370 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a     }.    }else..
33380 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20      /* .session 
33390 63 68 61 6e 67 65 73 65 74 20 46 49 4c 45 0a 20  changeset FILE. 
333a0 20 20 20 2a 2a 20 2e 73 65 73 73 69 6f 6e 20 70     ** .session p
333b0 61 74 63 68 73 65 74 20 46 49 4c 45 0a 20 20 20  atchset FILE.   
333c0 20 2a 2a 20 57 72 69 74 65 20 61 20 63 68 61 6e   ** Write a chan
333d0 67 65 73 65 74 20 6f 72 20 70 61 74 63 68 73 65  geset or patchse
333e0 74 20 69 6e 74 6f 20 61 20 66 69 6c 65 2e 20 20  t into a file.  
333f0 54 68 65 20 66 69 6c 65 20 69 73 20 6f 76 65 72  The file is over
33400 77 72 69 74 74 65 6e 2e 0a 20 20 20 20 2a 2f 0a  written..    */.
33410 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61      if( strcmp(a
33420 7a 43 6d 64 5b 30 5d 2c 22 63 68 61 6e 67 65 73  zCmd[0],"changes
33430 65 74 22 29 3d 3d 30 20 7c 7c 20 73 74 72 63 6d  et")==0 || strcm
33440 70 28 61 7a 43 6d 64 5b 30 5d 2c 22 70 61 74 63  p(azCmd[0],"patc
33450 68 73 65 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  hset")==0 ){.   
33460 20 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20 30     FILE *out = 0
33470 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64  ;.      if( nCmd
33480 21 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69  !=2 ) goto sessi
33490 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
334a0 0a 20 20 20 20 20 20 69 66 28 20 70 53 65 73 73  .      if( pSess
334b0 69 6f 6e 2d 3e 70 3d 3d 30 20 29 20 67 6f 74 6f  ion->p==0 ) goto
334c0 20 73 65 73 73 69 6f 6e 5f 6e 6f 74 5f 6f 70 65   session_not_ope
334d0 6e 3b 0a 20 20 20 20 20 20 6f 75 74 20 3d 20 66  n;.      out = f
334e0 6f 70 65 6e 28 61 7a 43 6d 64 5b 31 5d 2c 20 22  open(azCmd[1], "
334f0 77 62 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20  wb");.      if( 
33500 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  out==0 ){.      
33510 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
33520 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 63 61  derr, "ERROR: ca
33530 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22  nnot open \"%s\"
33540 20 66 6f 72 20 77 72 69 74 69 6e 67 5c 6e 22 2c   for writing\n",
33550 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20 20   azCmd[1]);.    
33560 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
33570 20 69 6e 74 20 73 7a 43 68 6e 67 3b 0a 20 20 20   int szChng;.   
33580 20 20 20 20 20 76 6f 69 64 20 2a 70 43 68 6e 67       void *pChng
33590 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 7a  ;.        if( az
335a0 43 6d 64 5b 30 5d 5b 30 5d 3d 3d 27 63 27 20 29  Cmd[0][0]=='c' )
335b0 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
335c0 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f   sqlite3session_
335d0 63 68 61 6e 67 65 73 65 74 28 70 53 65 73 73 69  changeset(pSessi
335e0 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68 6e 67 2c 20  on->p, &szChng, 
335f0 26 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20  &pChng);.       
33600 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
33610 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65    rc = sqlite3se
33620 73 73 69 6f 6e 5f 70 61 74 63 68 73 65 74 28 70  ssion_patchset(p
33630 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 26 73 7a 43  Session->p, &szC
33640 68 6e 67 2c 20 26 70 43 68 6e 67 29 3b 0a 20 20  hng, &pChng);.  
33650 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
33660 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
33670 20 20 20 20 70 72 69 6e 74 66 28 22 45 72 72 6f      printf("Erro
33680 72 3a 20 65 72 72 6f 72 20 63 6f 64 65 20 25 64  r: error code %d
33690 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20  \n", rc);.      
336a0 20 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20      rc = 0;.    
336b0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
336c0 28 20 70 43 68 6e 67 0a 20 20 20 20 20 20 20 20  ( pChng.        
336d0 20 20 26 26 20 66 77 72 69 74 65 28 70 43 68 6e    && fwrite(pChn
336e0 67 2c 20 73 7a 43 68 6e 67 2c 20 31 2c 20 6f 75  g, szChng, 1, ou
336f0 74 29 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 20  t)!=1 ){.       
33700 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
33710 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 46 61  derr, "ERROR: Fa
33720 69 6c 65 64 20 74 6f 20 77 72 69 74 65 20 65 6e  iled to write en
33730 74 69 72 65 20 25 64 2d 62 79 74 65 20 6f 75 74  tire %d-byte out
33740 70 75 74 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  put\n",.        
33750 20 20 20 20 20 20 20 20 20 20 73 7a 43 68 6e 67            szChng
33760 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
33770 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
33780 65 28 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20  e(pChng);.      
33790 20 20 66 63 6c 6f 73 65 28 6f 75 74 29 3b 0a 20    fclose(out);. 
337a0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
337b0 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f  ..    /* .sessio
337c0 6e 20 63 6c 6f 73 65 0a 20 20 20 20 2a 2a 20 43  n close.    ** C
337d0 6c 6f 73 65 20 74 68 65 20 69 64 65 6e 74 69 66  lose the identif
337e0 69 65 64 20 73 65 73 73 69 6f 6e 0a 20 20 20 20  ied session.    
337f0 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d  */.    if( strcm
33800 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 63 6c 6f  p(azCmd[0], "clo
33810 73 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  se")==0 ){.     
33820 20 69 66 28 20 6e 43 6d 64 21 3d 31 20 29 20 67   if( nCmd!=1 ) g
33830 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e 74  oto session_synt
33840 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  ax_error;.      
33850 69 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 20  if( p->nSession 
33860 29 7b 0a 20 20 20 20 20 20 20 20 73 65 73 73 69  ){.        sessi
33870 6f 6e 5f 63 6c 6f 73 65 28 70 53 65 73 73 69 6f  on_close(pSessio
33880 6e 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 61  n);.        p->a
33890 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d 20 3d 20  Session[iSes] = 
338a0 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 2d 2d 70 2d  p->aSession[--p-
338b0 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20  >nSession];.    
338c0 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20    }.    }else.. 
338d0 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 65     /* .session e
338e0 6e 61 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f 0a  nable ?BOOLEAN?.
338f0 20 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20      ** Query or 
33900 73 65 74 20 74 68 65 20 65 6e 61 62 6c 65 20 66  set the enable f
33910 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  lag.    */.    i
33920 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
33930 30 5d 2c 20 22 65 6e 61 62 6c 65 22 29 3d 3d 30  0], "enable")==0
33940 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69   ){.      int ii
33950 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64  ;.      if( nCmd
33960 3e 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f  >2 ) goto sessio
33970 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a  n_syntax_error;.
33980 20 20 20 20 20 20 69 69 20 3d 20 6e 43 6d 64 3d        ii = nCmd=
33990 3d 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c 65 61  =1 ? -1 : boolea
339a0 6e 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31 5d 29  nValue(azCmd[1])
339b0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e  ;.      if( p->n
339c0 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20  Session ){.     
339d0 20 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33 73     ii = sqlite3s
339e0 65 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28 70 53  ession_enable(pS
339f0 65 73 73 69 6f 6e 2d 3e 70 2c 20 69 69 29 3b 0a  ession->p, ii);.
33a00 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
33a10 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65 73  ntf(p->out, "ses
33a20 73 69 6f 6e 20 25 73 20 65 6e 61 62 6c 65 20 66  sion %s enable f
33a30 6c 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20 20 20  lag = %d\n",.   
33a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a50 20 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65   pSession->zName
33a60 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20  , ii);.      }. 
33a70 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a     }else..    /*
33a80 20 2e 73 65 73 73 69 6f 6e 20 66 69 6c 74 65 72   .session filter
33a90 20 47 4c 4f 42 20 2e 2e 2e 2e 0a 20 20 20 20 2a   GLOB .....    *
33aa0 2a 20 53 65 74 20 61 20 6c 69 73 74 20 6f 66 20  * Set a list of 
33ab0 47 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 6f 66  GLOB patterns of
33ac0 20 74 61 62 6c 65 20 6e 61 6d 65 73 20 74 6f 20   table names to 
33ad0 62 65 20 65 78 63 6c 75 64 65 64 2e 0a 20 20 20  be excluded..   
33ae0 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63   */.    if( strc
33af0 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 66 69  mp(azCmd[0], "fi
33b00 6c 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20  lter")==0 ){.   
33b10 20 20 20 69 6e 74 20 69 69 2c 20 6e 42 79 74 65     int ii, nByte
33b20 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64  ;.      if( nCmd
33b30 3c 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f  <2 ) goto sessio
33b40 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a  n_syntax_error;.
33b50 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65        if( p->nSe
33b60 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ssion ){.       
33b70 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 53   for(ii=0; ii<pS
33b80 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b  ession->nFilter;
33b90 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
33ba0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70    sqlite3_free(p
33bb0 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65  Session->azFilte
33bc0 72 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  r[ii]);.        
33bd0 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
33be0 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e 2d  3_free(pSession-
33bf0 3e 61 7a 46 69 6c 74 65 72 29 3b 0a 20 20 20 20  >azFilter);.    
33c00 20 20 20 20 6e 42 79 74 65 20 3d 20 73 69 7a 65      nByte = size
33c10 6f 66 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46  of(pSession->azF
33c20 69 6c 74 65 72 5b 30 5d 29 2a 28 6e 43 6d 64 2d  ilter[0])*(nCmd-
33c30 31 29 3b 0a 20 20 20 20 20 20 20 20 70 53 65 73  1);.        pSes
33c40 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 20 3d  sion->azFilter =
33c50 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
33c60 20 6e 42 79 74 65 20 29 3b 0a 20 20 20 20 20 20   nByte );.      
33c70 20 20 69 66 28 20 70 53 65 73 73 69 6f 6e 2d 3e    if( pSession->
33c80 61 7a 46 69 6c 74 65 72 3d 3d 30 20 29 7b 0a 20  azFilter==0 ){. 
33c90 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
33ca0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
33cb0 6f 72 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72  or: out or memor
33cc0 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  y\n");.         
33cd0 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20   exit(1);.      
33ce0 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28    }.        for(
33cf0 69 69 3d 31 3b 20 69 69 3c 6e 43 6d 64 3b 20 69  ii=1; ii<nCmd; i
33d00 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
33d10 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74  pSession->azFilt
33d20 65 72 5b 69 69 2d 31 5d 20 3d 20 73 71 6c 69 74  er[ii-1] = sqlit
33d30 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c  e3_mprintf("%s",
33d40 20 61 7a 43 6d 64 5b 69 69 5d 29 3b 0a 20 20 20   azCmd[ii]);.   
33d50 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
33d60 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72  Session->nFilter
33d70 20 3d 20 69 69 2d 31 3b 0a 20 20 20 20 20 20 7d   = ii-1;.      }
33d80 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20  .    }else..    
33d90 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 69 6e 64 69  /* .session indi
33da0 72 65 63 74 20 3f 42 4f 4f 4c 45 41 4e 3f 0a 20  rect ?BOOLEAN?. 
33db0 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20 73     ** Query or s
33dc0 65 74 20 74 68 65 20 69 6e 64 69 72 65 63 74 20  et the indirect 
33dd0 66 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20  flag.    */.    
33de0 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64  if( strcmp(azCmd
33df0 5b 30 5d 2c 20 22 69 6e 64 69 72 65 63 74 22 29  [0], "indirect")
33e00 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ==0 ){.      int
33e10 20 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e   ii;.      if( n
33e20 43 6d 64 3e 32 20 29 20 67 6f 74 6f 20 73 65 73  Cmd>2 ) goto ses
33e30 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f  sion_syntax_erro
33e40 72 3b 0a 20 20 20 20 20 20 69 69 20 3d 20 6e 43  r;.      ii = nC
33e50 6d 64 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f 6f  md==1 ? -1 : boo
33e60 6c 65 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64 5b  leanValue(azCmd[
33e70 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  1]);.      if( p
33e80 2d 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20  ->nSession ){.  
33e90 20 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74        ii = sqlit
33ea0 65 33 73 65 73 73 69 6f 6e 5f 69 6e 64 69 72 65  e3session_indire
33eb0 63 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20  ct(pSession->p, 
33ec0 69 69 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66  ii);.        utf
33ed0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
33ee0 20 22 73 65 73 73 69 6f 6e 20 25 73 20 69 6e 64   "session %s ind
33ef0 69 72 65 63 74 20 66 6c 61 67 20 3d 20 25 64 5c  irect flag = %d\
33f00 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
33f10 20 20 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e          pSession
33f20 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29 3b 0a 20 20  ->zName, ii);.  
33f30 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a      }.    }else.
33f40 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
33f50 20 69 73 65 6d 70 74 79 0a 20 20 20 20 2a 2a 20   isempty.    ** 
33f60 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65  Determine if the
33f70 20 73 65 73 73 69 6f 6e 20 69 73 20 65 6d 70 74   session is empt
33f80 79 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  y.    */.    if(
33f90 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d   strcmp(azCmd[0]
33fa0 2c 20 22 69 73 65 6d 70 74 79 22 29 3d 3d 30 20  , "isempty")==0 
33fb0 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b  ){.      int ii;
33fc0 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21  .      if( nCmd!
33fd0 3d 31 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f  =1 ) goto sessio
33fe0 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a  n_syntax_error;.
33ff0 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65        if( p->nSe
34000 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ssion ){.       
34010 20 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65 73   ii = sqlite3ses
34020 73 69 6f 6e 5f 69 73 65 6d 70 74 79 28 70 53 65  sion_isempty(pSe
34030 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20 20  ssion->p);.     
34040 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
34050 2d 3e 6f 75 74 2c 20 22 73 65 73 73 69 6f 6e 20  ->out, "session 
34060 25 73 20 69 73 65 6d 70 74 79 20 66 6c 61 67 20  %s isempty flag 
34070 3d 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20  = %d\n",.       
34080 20 20 20 20 20 20 20 20 20 20 20 20 20 70 53 65               pSe
34090 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69  ssion->zName, ii
340a0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
340b0 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65  else..    /* .se
340c0 73 73 69 6f 6e 20 6c 69 73 74 0a 20 20 20 20 2a  ssion list.    *
340d0 2a 20 4c 69 73 74 20 61 6c 6c 20 63 75 72 72 65  * List all curre
340e0 6e 74 6c 79 20 6f 70 65 6e 20 73 65 73 73 69 6f  ntly open sessio
340f0 6e 73 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  ns.    */.    if
34100 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30  ( strcmp(azCmd[0
34110 5d 2c 22 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a  ],"list")==0 ){.
34120 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
34130 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b  <p->nSession; i+
34140 2b 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38  +){.        utf8
34150 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
34160 22 25 64 20 25 73 5c 6e 22 2c 20 69 2c 20 70 2d  "%d %s\n", i, p-
34170 3e 61 53 65 73 73 69 6f 6e 5b 69 5d 2e 7a 4e 61  >aSession[i].zNa
34180 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  me);.      }.   
34190 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e   }else..    /* .
341a0 73 65 73 73 69 6f 6e 20 6f 70 65 6e 20 44 42 20  session open DB 
341b0 4e 41 4d 45 0a 20 20 20 20 2a 2a 20 4f 70 65 6e  NAME.    ** Open
341c0 20 61 20 6e 65 77 20 73 65 73 73 69 6f 6e 20 63   a new session c
341d0 61 6c 6c 65 64 20 4e 41 4d 45 20 6f 6e 20 74 68  alled NAME on th
341e0 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  e attached datab
341f0 61 73 65 20 44 42 2e 0a 20 20 20 20 2a 2a 20 44  ase DB..    ** D
34200 42 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 22 6d  B is normally "m
34210 61 69 6e 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ain"..    */.   
34220 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d   if( strcmp(azCm
34230 64 5b 30 5d 2c 22 6f 70 65 6e 22 29 3d 3d 30 20  d[0],"open")==0 
34240 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a  ){.      char *z
34250 4e 61 6d 65 3b 0a 20 20 20 20 20 20 69 66 28 20  Name;.      if( 
34260 6e 43 6d 64 21 3d 33 20 29 20 67 6f 74 6f 20 73  nCmd!=3 ) goto s
34270 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72  ession_syntax_er
34280 72 6f 72 3b 0a 20 20 20 20 20 20 7a 4e 61 6d 65  ror;.      zName
34290 20 3d 20 61 7a 43 6d 64 5b 32 5d 3b 0a 20 20 20   = azCmd[2];.   
342a0 20 20 20 69 66 28 20 7a 4e 61 6d 65 5b 30 5d 3d     if( zName[0]=
342b0 3d 30 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f  =0 ) goto sessio
342c0 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a  n_syntax_error;.
342d0 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
342e0 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b  <p->nSession; i+
342f0 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
34300 73 74 72 63 6d 70 28 70 2d 3e 61 53 65 73 73 69  strcmp(p->aSessi
34310 6f 6e 5b 69 5d 2e 7a 4e 61 6d 65 2c 7a 4e 61 6d  on[i].zName,zNam
34320 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  e)==0 ){.       
34330 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
34340 74 64 65 72 72 2c 20 22 53 65 73 73 69 6f 6e 20  tderr, "Session 
34350 5c 22 25 73 5c 22 20 61 6c 72 65 61 64 79 20 65  \"%s\" already e
34360 78 69 73 74 73 5c 6e 22 2c 20 7a 4e 61 6d 65 29  xists\n", zName)
34370 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
34380 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
34390 69 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  it;.        }.  
343a0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
343b0 70 2d 3e 6e 53 65 73 73 69 6f 6e 3e 3d 41 72 72  p->nSession>=Arr
343c0 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73 69  aySize(p->aSessi
343d0 6f 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  on) ){.        r
343e0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
343f0 2c 20 22 4d 61 78 69 6d 75 6d 20 6f 66 20 25 64  , "Maximum of %d
34400 20 73 65 73 73 69 6f 6e 73 5c 6e 22 2c 20 41 72   sessions\n", Ar
34410 72 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73  raySize(p->aSess
34420 69 6f 6e 29 29 3b 0a 20 20 20 20 20 20 20 20 67  ion));.        g
34430 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
34440 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20  _exit;.      }. 
34450 20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20       pSession = 
34460 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 70 2d 3e  &p->aSession[p->
34470 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20 20  nSession];.     
34480 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73   rc = sqlite3ses
34490 73 69 6f 6e 5f 63 72 65 61 74 65 28 70 2d 3e 64  sion_create(p->d
344a0 62 2c 20 61 7a 43 6d 64 5b 31 5d 2c 20 26 70 53  b, azCmd[1], &pS
344b0 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20  ession->p);.    
344c0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
344d0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
344e0 74 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20 6f  tderr, "Cannot o
344f0 70 65 6e 20 73 65 73 73 69 6f 6e 3a 20 65 72 72  pen session: err
34500 6f 72 20 63 6f 64 65 3d 25 64 5c 6e 22 2c 20 72  or code=%d\n", r
34510 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  c);.        rc =
34520 20 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   0;.        goto
34530 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
34540 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  it;.      }.    
34550 20 20 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c    pSession->nFil
34560 74 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 73  ter = 0;.      s
34570 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 74 61  qlite3session_ta
34580 62 6c 65 5f 66 69 6c 74 65 72 28 70 53 65 73 73  ble_filter(pSess
34590 69 6f 6e 2d 3e 70 2c 20 73 65 73 73 69 6f 6e 5f  ion->p, session_
345a0 66 69 6c 74 65 72 2c 20 70 53 65 73 73 69 6f 6e  filter, pSession
345b0 29 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 65 73  );.      p->nSes
345c0 73 69 6f 6e 2b 2b 3b 0a 20 20 20 20 20 20 70 53  sion++;.      pS
345d0 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 20 3d 20  ession->zName = 
345e0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
345f0 22 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20  "%s", zName);.  
34600 20 20 7d 65 6c 73 65 0a 20 20 20 20 2f 2a 20 49    }else.    /* I
34610 66 20 6e 6f 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d  f no command nam
34620 65 20 6d 61 74 63 68 65 73 2c 20 73 68 6f 77 20  e matches, show 
34630 61 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20 2a  a syntax error *
34640 2f 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 73 79  /.    session_sy
34650 6e 74 61 78 5f 65 72 72 6f 72 3a 0a 20 20 20 20  ntax_error:.    
34660 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28 70 29 3b  session_help(p);
34670 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
34680 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
34690 45 42 55 47 0a 20 20 2f 2a 20 55 6e 64 6f 63 75  EBUG.  /* Undocu
346a0 6d 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20  mented commands 
346b0 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 74 65 73  for internal tes
346c0 74 69 6e 67 2e 20 20 53 75 62 6a 65 63 74 20 74  ting.  Subject t
346d0 6f 20 63 68 61 6e 67 65 0a 20 20 2a 2a 20 77 69  o change.  ** wi
346e0 74 68 6f 75 74 20 6e 6f 74 69 63 65 2e 20 2a 2f  thout notice. */
346f0 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26  .  if( c=='s' &&
34700 20 6e 3e 3d 31 30 20 26 26 20 73 74 72 6e 63 6d   n>=10 && strncm
34710 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 65 6c  p(azArg[0], "sel
34720 66 74 65 73 74 2d 22 2c 20 39 29 3d 3d 30 20 29  ftest-", 9)==0 )
34730 7b 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d  {.    if( strncm
34740 70 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 62  p(azArg[0]+9, "b
34750 6f 6f 6c 65 61 6e 22 2c 20 6e 2d 39 29 3d 3d 30  oolean", n-9)==0
34760 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c   ){.      int i,
34770 20 76 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   v;.      for(i=
34780 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  1; i<nArg; i++){
34790 0a 20 20 20 20 20 20 20 20 76 20 3d 20 62 6f 6f  .        v = boo
347a0 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
347b0 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66  i]);.        utf
347c0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
347d0 20 22 25 73 3a 20 25 64 20 30 78 25 78 5c 6e 22   "%s: %d 0x%x\n"
347e0 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 76 2c 20 76  , azArg[i], v, v
347f0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
34800 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70  .    if( strncmp
34810 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 69 6e  (azArg[0]+9, "in
34820 74 65 67 65 72 22 2c 20 6e 2d 39 29 3d 3d 30 20  teger", n-9)==0 
34830 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 20  ){.      int i; 
34840 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 76 3b  sqlite3_int64 v;
34850 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20  .      for(i=1; 
34860 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
34870 20 20 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b        char zBuf[
34880 32 30 30 5d 3b 0a 20 20 20 20 20 20 20 20 76 20  200];.        v 
34890 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61  = integerValue(a
348a0 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
348b0 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
348c0 74 66 28 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c  tf(sizeof(zBuf),
348d0 7a 42 75 66 2c 22 25 73 3a 20 25 6c 6c 64 20 30  zBuf,"%s: %lld 0
348e0 78 25 6c 6c 78 5c 6e 22 2c 20 61 7a 41 72 67 5b  x%llx\n", azArg[
348f0 69 5d 2c 76 2c 76 29 3b 0a 20 20 20 20 20 20 20  i],v,v);.       
34900 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
34910 6f 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29  out, "%s", zBuf)
34920 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
34930 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
34940 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20    if( c=='s' && 
34950 6e 3e 3d 34 20 26 26 20 73 74 72 6e 63 6d 70 28  n>=4 && strncmp(
34960 61 7a 41 72 67 5b 30 5d 2c 22 73 65 6c 66 74 65  azArg[0],"selfte
34970 73 74 22 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  st",n)==0 ){.   
34980 20 69 6e 74 20 62 49 73 49 6e 69 74 20 3d 20 30   int bIsInit = 0
34990 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
349a0 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  e to initialize 
349b0 74 68 65 20 53 45 4c 46 54 45 53 54 20 74 61 62  the SELFTEST tab
349c0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 56  le */.    int bV
349d0 65 72 62 6f 73 65 20 3d 20 30 3b 20 20 20 20 20  erbose = 0;     
349e0 20 20 20 2f 2a 20 56 65 72 62 6f 73 65 20 6f 75     /* Verbose ou
349f0 74 70 75 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tput */.    int 
34a00 62 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 3b  bSelftestExists;
34a10 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
34a20 53 45 4c 46 54 45 53 54 20 61 6c 72 65 61 64 79  SELFTEST already
34a30 20 65 78 69 73 74 73 20 2a 2f 0a 20 20 20 20 69   exists */.    i
34a40 6e 74 20 69 2c 20 6b 3b 20 20 20 20 20 20 20 20  nt i, k;        
34a50 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
34a60 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20  counters */.    
34a70 69 6e 74 20 6e 54 65 73 74 20 3d 20 30 3b 20 20  int nTest = 0;  
34a80 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
34a90 65 72 20 6f 66 20 74 65 73 74 73 20 72 75 6e 73  er of tests runs
34aa0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 45 72 72   */.    int nErr
34ab0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
34ac0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
34ad0 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 20  rors seen */.   
34ae0 20 53 68 65 6c 6c 54 65 78 74 20 73 74 72 3b 20   ShellText str; 
34af0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 73            /* Ans
34b00 77 65 72 20 66 6f 72 20 61 20 71 75 65 72 79 20  wer for a query 
34b10 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  */.    sqlite3_s
34b20 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 20  tmt *pStmt = 0; 
34b30 2f 2a 20 51 75 65 72 79 20 61 67 61 69 6e 73 74  /* Query against
34b40 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74 61   the SELFTEST ta
34b50 62 6c 65 20 2a 2f 0a 0a 20 20 20 20 6f 70 65 6e  ble */..    open
34b60 5f 64 62 28 70 2c 30 29 3b 0a 20 20 20 20 66 6f  _db(p,0);.    fo
34b70 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=1; i<nArg; i
34b80 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  ++){.      const
34b90 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67   char *z = azArg
34ba0 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [i];.      if( z
34bb0 5b 30 5d 3d 3d 27 2d 27 20 26 26 20 7a 5b 31 5d  [0]=='-' && z[1]
34bc0 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20  =='-' ) z++;.   
34bd0 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c     if( strcmp(z,
34be0 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a 20  "-init")==0 ){. 
34bf0 20 20 20 20 20 20 20 62 49 73 49 6e 69 74 20 3d         bIsInit =
34c00 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a   1;.      }else.
34c10 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70        if( strcmp
34c20 28 7a 2c 22 2d 76 22 29 3d 3d 30 20 29 7b 0a 20  (z,"-v")==0 ){. 
34c30 20 20 20 20 20 20 20 62 56 65 72 62 6f 73 65 2b         bVerbose+
34c40 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  +;.      }else. 
34c50 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 75       {.        u
34c60 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
34c70 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69  r, "Unknown opti
34c80 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25  on \"%s\" on \"%
34c90 73 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  s\"\n",.        
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72              azAr
34cb0 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29 3b  g[i], azArg[0]);
34cc0 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
34cd0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 68 6f  ntf(stderr, "Sho
34ce0 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 2d  uld be one of: -
34cf0 2d 69 6e 69 74 20 2d 76 5c 6e 22 29 3b 0a 20 20  -init -v\n");.  
34d00 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
34d10 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
34d20 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
34d30 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
34d40 69 66 28 20 73 71 6c 69 74 65 33 5f 74 61 62 6c  if( sqlite3_tabl
34d50 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
34d60 61 28 70 2d 3e 64 62 2c 22 6d 61 69 6e 22 2c 22  a(p->db,"main","
34d70 73 65 6c 66 74 65 73 74 22 2c 30 2c 30 2c 30 2c  selftest",0,0,0,
34d80 30 2c 30 2c 30 29 0a 20 20 20 20 20 20 20 20 20  0,0,0).         
34d90 20 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29    != SQLITE_OK )
34da0 7b 0a 20 20 20 20 20 20 62 53 65 6c 66 74 65 73  {.      bSelftes
34db0 74 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 20  tExists = 0;.   
34dc0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 62 53   }else{.      bS
34dd0 65 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d 20  elftestExists = 
34de0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  1;.    }.    if(
34df0 20 62 49 73 49 6e 69 74 20 29 7b 0a 20 20 20 20   bIsInit ){.    
34e00 20 20 63 72 65 61 74 65 53 65 6c 66 74 65 73 74    createSelftest
34e10 54 61 62 6c 65 28 70 29 3b 0a 20 20 20 20 20 20  Table(p);.      
34e20 62 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 20  bSelftestExists 
34e30 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  = 1;.    }.    i
34e40 6e 69 74 54 65 78 74 28 26 73 74 72 29 3b 0a 20  nitText(&str);. 
34e50 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
34e60 74 72 2c 20 22 78 22 2c 20 30 29 3b 0a 20 20 20  tr, "x", 0);.   
34e70 20 66 6f 72 28 6b 3d 62 53 65 6c 66 74 65 73 74   for(k=bSelftest
34e80 45 78 69 73 74 73 3b 20 6b 3e 3d 30 3b 20 6b 2d  Exists; k>=0; k-
34e90 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6b 3d  -){.      if( k=
34ea0 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =1 ){.        rc
34eb0 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
34ec0 72 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20 20  re_v2(p->db,.   
34ed0 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54           "SELECT
34ee0 20 74 6e 6f 2c 6f 70 2c 63 6d 64 2c 61 6e 73 20   tno,op,cmd,ans 
34ef0 46 52 4f 4d 20 73 65 6c 66 74 65 73 74 20 4f 52  FROM selftest OR
34f00 44 45 52 20 42 59 20 74 6e 6f 22 2c 0a 20 20 20  DER BY tno",.   
34f10 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53           -1, &pS
34f20 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  tmt, 0);.      }
34f30 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63  else{.        rc
34f40 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
34f50 72 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20 20  re_v2(p->db,.   
34f60 20 20 20 20 20 20 20 22 56 41 4c 55 45 53 28 30         "VALUES(0
34f70 2c 27 6d 65 6d 6f 27 2c 27 4d 69 73 73 69 6e 67  ,'memo','Missing
34f80 20 53 45 4c 46 54 45 53 54 20 74 61 62 6c 65 20   SELFTEST table 
34f90 2d 20 64 65 66 61 75 6c 74 20 63 68 65 63 6b 73  - default checks
34fa0 20 6f 6e 6c 79 27 2c 27 27 29 2c 22 0a 20 20 20   only',''),".   
34fb0 20 20 20 20 20 20 20 22 20 20 20 20 20 20 28 31         "      (1
34fc0 2c 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20 69  ,'run','PRAGMA i
34fd0 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27 2c  ntegrity_check',
34fe0 27 6f 6b 27 29 22 2c 0a 20 20 20 20 20 20 20 20  'ok')",.        
34ff0 20 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29    -1, &pStmt, 0)
35000 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
35010 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
35020 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
35030 65 72 72 2c 20 22 45 72 72 6f 72 20 71 75 65 72  err, "Error quer
35040 79 69 6e 67 20 74 68 65 20 73 65 6c 66 74 65 73  ying the selftes
35050 74 20 74 61 62 6c 65 5c 6e 22 29 3b 0a 20 20 20  t table\n");.   
35060 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
35070 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e       sqlite3_fin
35080 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
35090 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
350a0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
350b0 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72 28      }.      for(
350c0 69 3d 31 3b 20 73 71 6c 69 74 65 33 5f 73 74 65  i=1; sqlite3_ste
350d0 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45  p(pStmt)==SQLITE
350e0 5f 52 4f 57 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  _ROW; i++){.    
350f0 20 20 20 20 69 6e 74 20 74 6e 6f 20 3d 20 73 71      int tno = sq
35100 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
35110 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  (pStmt, 0);.    
35120 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
35130 7a 4f 70 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  zOp = (const cha
35140 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
35150 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 29  n_text(pStmt, 1)
35160 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  ;.        const 
35170 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 28 63 6f  char *zSql = (co
35180 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
35190 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
351a0 74 6d 74 2c 20 32 29 3b 0a 20 20 20 20 20 20 20  tmt, 2);.       
351b0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 6e   const char *zAn
351c0 73 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  s = (const char*
351d0 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
351e0 74 65 78 74 28 70 53 74 6d 74 2c 20 33 29 3b 0a  text(pStmt, 3);.
351f0 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a  .        k = 0;.
35200 20 20 20 20 20 20 20 20 69 66 28 20 62 56 65 72          if( bVer
35210 62 6f 73 65 3e 30 20 29 7b 0a 20 20 20 20 20 20  bose>0 ){.      
35220 20 20 20 20 63 68 61 72 20 2a 7a 51 75 6f 74 65      char *zQuote
35230 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
35240 74 66 28 22 25 71 22 2c 20 7a 53 71 6c 29 3b 0a  tf("%q", zSql);.
35250 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66            printf
35260 28 22 25 64 3a 20 25 73 20 25 73 5c 6e 22 2c 20  ("%d: %s %s\n", 
35270 74 6e 6f 2c 20 7a 4f 70 2c 20 7a 53 71 6c 29 3b  tno, zOp, zSql);
35280 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
35290 65 33 5f 66 72 65 65 28 7a 51 75 6f 74 65 29 3b  e3_free(zQuote);
352a0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
352b0 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4f     if( strcmp(zO
352c0 70 2c 22 6d 65 6d 6f 22 29 3d 3d 30 20 29 7b 0a  p,"memo")==0 ){.
352d0 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
352e0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
352f0 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  s\n", zSql);.   
35300 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20       }else.     
35310 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4f     if( strcmp(zO
35320 70 2c 22 72 75 6e 22 29 3d 3d 30 20 29 7b 0a 20  p,"run")==0 ){. 
35330 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
35340 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
35350 20 20 20 20 20 20 73 74 72 2e 6e 20 3d 20 30 3b        str.n = 0;
35360 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 2e 7a  .          str.z
35370 5b 30 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  [0] = 0;.       
35380 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
35390 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  exec(p->db, zSql
353a0 2c 20 63 61 70 74 75 72 65 4f 75 74 70 75 74 43  , captureOutputC
353b0 61 6c 6c 62 61 63 6b 2c 20 26 73 74 72 2c 20 26  allback, &str, &
353c0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20  zErrMsg);.      
353d0 20 20 20 20 6e 54 65 73 74 2b 2b 3b 0a 20 20 20      nTest++;.   
353e0 20 20 20 20 20 20 20 69 66 28 20 62 56 65 72 62         if( bVerb
353f0 6f 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ose ){.         
35400 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
35410 2d 3e 6f 75 74 2c 20 22 52 65 73 75 6c 74 3a 20  ->out, "Result: 
35420 25 73 5c 6e 22 2c 20 73 74 72 2e 7a 29 3b 0a 20  %s\n", str.z);. 
35430 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
35440 20 20 20 20 20 69 66 28 20 72 63 20 7c 7c 20 7a       if( rc || z
35450 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20  ErrMsg ){.      
35460 20 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a 20 20        nErr++;.  
35470 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31            rc = 1
35480 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74  ;.            ut
35490 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
354a0 2c 20 22 25 64 3a 20 65 72 72 6f 72 2d 63 6f 64  , "%d: error-cod
354b0 65 2d 25 64 3a 20 25 73 5c 6e 22 2c 20 74 6e 6f  e-%d: %s\n", tno
354c0 2c 20 72 63 2c 20 7a 45 72 72 4d 73 67 29 3b 0a  , rc, zErrMsg);.
354d0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
354e0 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
354f0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
35500 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 41  se if( strcmp(zA
35510 6e 73 2c 73 74 72 2e 7a 29 21 3d 30 20 29 7b 0a  ns,str.z)!=0 ){.
35520 20 20 20 20 20 20 20 20 20 20 20 20 6e 45 72 72              nErr
35530 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ++;.            
35540 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  rc = 1;.        
35550 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
35560 70 2d 3e 6f 75 74 2c 20 22 25 64 3a 20 45 78 70  p->out, "%d: Exp
35570 65 63 74 65 64 3a 20 5b 25 73 5d 5c 6e 22 2c 20  ected: [%s]\n", 
35580 74 6e 6f 2c 20 7a 41 6e 73 29 3b 0a 20 20 20 20  tno, zAns);.    
35590 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
355a0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 3a  ntf(p->out, "%d:
355b0 20 20 20 20 20 20 47 6f 74 3a 20 5b 25 73 5d 5c        Got: [%s]\
355c0 6e 22 2c 20 74 6e 6f 2c 20 73 74 72 2e 7a 29 3b  n", tno, str.z);
355d0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
355e0 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20       }else.     
355f0 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75     {.          u
35600 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
35610 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  r,.            "
35620 55 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69 6f  Unknown operatio
35630 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 73 65 6c 66  n \"%s\" on self
35640 74 65 73 74 20 6c 69 6e 65 20 25 64 5c 6e 22 2c  test line %d\n",
35650 20 7a 4f 70 2c 20 74 6e 6f 29 3b 0a 20 20 20 20   zOp, tno);.    
35660 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
35670 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
35680 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
35690 20 2f 2a 20 45 6e 64 20 6c 6f 6f 70 20 6f 76 65   /* End loop ove
356a0 72 20 72 6f 77 73 20 6f 66 20 63 6f 6e 74 65 6e  r rows of conten
356b0 74 20 66 72 6f 6d 20 53 45 4c 46 54 45 53 54 20  t from SELFTEST 
356c0 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
356d0 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
356e0 3b 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20 6c  ;.    } /* End l
356f0 6f 6f 70 20 6f 76 65 72 20 6b 20 2a 2f 0a 20 20  oop over k */.  
35700 20 20 66 72 65 65 54 65 78 74 28 26 73 74 72 29    freeText(&str)
35710 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  ;.    utf8_print
35720 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 65 72  f(p->out, "%d er
35730 72 6f 72 73 20 6f 75 74 20 6f 66 20 25 64 20 74  rors out of %d t
35740 65 73 74 73 5c 6e 22 2c 20 6e 45 72 72 2c 20 6e  ests\n", nErr, n
35750 54 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  Test);.  }else..
35760 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20    if( c=='s' && 
35770 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
35780 2c 20 22 73 65 70 61 72 61 74 6f 72 22 2c 20 6e  , "separator", n
35790 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
357a0 6e 41 72 67 3c 32 20 7c 7c 20 6e 41 72 67 3e 33  nArg<2 || nArg>3
357b0 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
357c0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
357d0 61 67 65 3a 20 2e 73 65 70 61 72 61 74 6f 72 20  age: .separator 
357e0 43 4f 4c 20 3f 52 4f 57 3f 5c 6e 22 29 3b 0a 20  COL ?ROW?\n");. 
357f0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
35800 20 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e   }.    if( nArg>
35810 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =2 ){.      sqli
35820 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
35830 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  eof(p->colSepara
35840 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  tor), p->colSepa
35850 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20  rator,.         
35860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25                "%
35870 2e 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61 79  .*s", (int)Array
35880 53 69 7a 65 28 70 2d 3e 63 6f 6c 53 65 70 61 72  Size(p->colSepar
35890 61 74 6f 72 29 2d 31 2c 20 61 7a 41 72 67 5b 31  ator)-1, azArg[1
358a0 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
358b0 28 20 6e 41 72 67 3e 3d 33 20 29 7b 0a 20 20 20  ( nArg>=3 ){.   
358c0 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
358d0 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f  ntf(sizeof(p->ro
358e0 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e  wSeparator), p->
358f0 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20  rowSeparator,.  
35900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35910 20 20 20 20 20 22 25 2e 2a 73 22 2c 20 28 69 6e       "%.*s", (in
35920 74 29 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 72  t)ArraySize(p->r
35930 6f 77 53 65 70 61 72 61 74 6f 72 29 2d 31 2c 20  owSeparator)-1, 
35940 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 7d  azArg[2]);.    }
35950 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
35960 63 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 34 20 26  c=='s' && n>=4 &
35970 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
35980 30 5d 2c 22 73 68 61 33 73 75 6d 22 2c 6e 29 3d  0],"sha3sum",n)=
35990 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20  =0 ){.    const 
359a0 63 68 61 72 20 2a 7a 4c 69 6b 65 20 3d 20 30 3b  char *zLike = 0;
359b0 20 20 20 2f 2a 20 57 68 69 63 68 20 74 61 62 6c     /* Which tabl
359c0 65 20 74 6f 20 63 68 65 63 6b 73 75 6d 2e 20 30  e to checksum. 0
359d0 20 6d 65 61 6e 73 20 65 76 65 72 79 74 68 69 6e   means everythin
359e0 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20  g */.    int i; 
359f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a00 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
35a10 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 53 63  r */.    int bSc
35a20 68 65 6d 61 20 3d 20 30 3b 20 20 20 20 20 20 20  hema = 0;       
35a30 20 20 2f 2a 20 41 6c 73 6f 20 68 61 73 68 20 74    /* Also hash t
35a40 68 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20  he schema */.   
35a50 20 69 6e 74 20 62 53 65 70 61 72 61 74 65 20 3d   int bSeparate =
35a60 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73   0;       /* Has
35a70 68 20 65 61 63 68 20 74 61 62 6c 65 20 73 65 70  h each table sep
35a80 61 72 61 74 65 6c 79 20 2a 2f 0a 20 20 20 20 69  arately */.    i
35a90 6e 74 20 69 53 69 7a 65 20 3d 20 32 32 34 3b 20  nt iSize = 224; 
35aa0 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20          /* Hash 
35ab0 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65  algorithm to use
35ac0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 44 65 62   */.    int bDeb
35ad0 75 67 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ug = 0;         
35ae0 20 2f 2a 20 4f 6e 6c 79 20 73 68 6f 77 20 74 68   /* Only show th
35af0 65 20 71 75 65 72 79 20 74 68 61 74 20 77 6f 75  e query that wou
35b00 6c 64 20 68 61 76 65 20 72 75 6e 20 2a 2f 0a 20  ld have run */. 
35b10 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20     sqlite3_stmt 
35b20 2a 70 53 74 6d 74 3b 20 20 20 20 20 2f 2a 20 46  *pStmt;     /* F
35b30 6f 72 20 71 75 65 72 79 69 6e 67 20 74 61 62 6c  or querying tabl
35b40 65 73 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 20 20  es names */.    
35b50 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20 20  char *zSql;     
35b60 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20           /* SQL 
35b70 74 6f 20 62 65 20 72 75 6e 20 2a 2f 0a 20 20 20  to be run */.   
35b80 20 63 68 61 72 20 2a 7a 53 65 70 3b 20 20 20 20   char *zSep;    
35b90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 70            /* Sep
35ba0 61 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 53 68  arator */.    Sh
35bb0 65 6c 6c 54 65 78 74 20 73 53 71 6c 3b 20 20 20  ellText sSql;   
35bc0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
35bd0 74 65 20 53 51 4c 20 66 6f 72 20 74 68 65 20 71  te SQL for the q
35be0 75 65 72 79 20 74 6f 20 72 75 6e 20 74 68 65 20  uery to run the 
35bf0 68 61 73 68 20 2a 2f 0a 20 20 20 20 53 68 65 6c  hash */.    Shel
35c00 6c 54 65 78 74 20 73 51 75 65 72 79 3b 20 20 20  lText sQuery;   
35c10 20 20 20 20 20 2f 2a 20 53 65 74 20 6f 66 20 71       /* Set of q
35c20 75 65 72 69 65 73 20 75 73 65 64 20 74 6f 20 72  ueries used to r
35c30 65 61 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20  ead all content 
35c40 2a 2f 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70  */.    open_db(p
35c50 2c 20 30 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  , 0);.    for(i=
35c60 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  1; i<nArg; i++){
35c70 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
35c80 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d 3b  r *z = azArg[i];
35c90 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d  .      if( z[0]=
35ca0 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='-' ){.        
35cb0 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28  z++;.        if(
35cc0 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b   z[0]=='-' ) z++
35cd0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74  ;.        if( st
35ce0 72 63 6d 70 28 7a 2c 22 73 63 68 65 6d 61 22 29  rcmp(z,"schema")
35cf0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
35d00 20 62 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20   bSchema = 1;.  
35d10 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20        }else.    
35d20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
35d30 2c 22 73 68 61 33 2d 32 32 34 22 29 3d 3d 30 20  ,"sha3-224")==0 
35d40 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61  || strcmp(z,"sha
35d50 33 2d 32 35 36 22 29 3d 3d 30 0a 20 20 20 20 20  3-256")==0.     
35d60 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c      || strcmp(z,
35d70 22 73 68 61 33 2d 33 38 34 22 29 3d 3d 30 20 7c  "sha3-384")==0 |
35d80 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61 33  | strcmp(z,"sha3
35d90 2d 35 31 32 22 29 3d 3d 30 0a 20 20 20 20 20 20  -512")==0.      
35da0 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69    ){.          i
35db0 53 69 7a 65 20 3d 20 61 74 6f 69 28 26 7a 5b 35  Size = atoi(&z[5
35dc0 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ]);.        }els
35dd0 65 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74  e.        if( st
35de0 72 63 6d 70 28 7a 2c 22 64 65 62 75 67 22 29 3d  rcmp(z,"debug")=
35df0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
35e00 62 44 65 62 75 67 20 3d 20 31 3b 0a 20 20 20 20  bDebug = 1;.    
35e10 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
35e20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74    {.          ut
35e30 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
35e40 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f  , "Unknown optio
35e50 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25 73  n \"%s\" on \"%s
35e60 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  \"\n",.         
35e70 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
35e80 72 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29  rg[i], azArg[0])
35e90 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f  ;.          raw_
35ea0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
35eb0 53 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66  Should be one of
35ec0 3a 20 2d 2d 73 63 68 65 6d 61 22 0a 20 20 20 20  : --schema".    
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 20 20 22 20 2d 2d 73 68 61           " --sha
35ef0 33 2d 32 32 34 20 2d 2d 73 68 61 33 2d 32 35 35  3-224 --sha3-255
35f00 20 2d 2d 73 68 61 33 2d 33 38 34 20 2d 2d 73 68   --sha3-384 --sh
35f10 61 33 2d 35 31 32 5c 6e 22 29 3b 0a 20 20 20 20  a3-512\n");.    
35f20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
35f30 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74          goto met
35f40 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
35f50 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
35f60 7d 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b 65 20  }else if( zLike 
35f70 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
35f80 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
35f90 73 61 67 65 3a 20 2e 73 68 61 33 73 75 6d 20 3f  sage: .sha3sum ?
35fa0 4f 50 54 49 4f 4e 53 3f 20 3f 4c 49 4b 45 2d 50  OPTIONS? ?LIKE-P
35fb0 41 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20  ATTERN?\n");.   
35fc0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
35fd0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
35fe0 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
35ff0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
36000 20 20 7a 4c 69 6b 65 20 3d 20 7a 3b 0a 20 20 20    zLike = z;.   
36010 20 20 20 20 20 62 53 65 70 61 72 61 74 65 20 3d       bSeparate =
36020 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
36030 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
36040 22 73 71 6c 69 74 65 5c 5c 5f 25 22 2c 20 7a 4c  "sqlite\\_%", zL
36050 69 6b 65 2c 20 27 5c 5c 27 29 3d 3d 30 20 29 20  ike, '\\')==0 ) 
36060 62 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20 20  bSchema = 1;.   
36070 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
36080 66 28 20 62 53 63 68 65 6d 61 20 29 7b 0a 20 20  f( bSchema ){.  
36090 20 20 20 20 7a 53 71 6c 20 3d 20 22 53 45 4c 45      zSql = "SELE
360a0 43 54 20 6c 6f 77 65 72 28 6e 61 6d 65 29 20 46  CT lower(name) F
360b0 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
360c0 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r".             
360d0 22 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61  " WHERE type='ta
360e0 62 6c 65 27 20 41 4e 44 20 63 6f 61 6c 65 73 63  ble' AND coalesc
360f0 65 28 72 6f 6f 74 70 61 67 65 2c 30 29 3e 31 22  e(rootpage,0)>1"
36100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20  .             " 
36110 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54  UNION ALL SELECT
36120 20 27 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 27   'sqlite_master'
36130 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22  ".             "
36140 20 4f 52 44 45 52 20 42 59 20 31 20 63 6f 6c 6c   ORDER BY 1 coll
36150 61 74 65 20 6e 6f 63 61 73 65 22 3b 0a 20 20 20  ate nocase";.   
36160 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53   }else{.      zS
36170 71 6c 20 3d 20 22 53 45 4c 45 43 54 20 6c 6f 77  ql = "SELECT low
36180 65 72 28 6e 61 6d 65 29 20 46 52 4f 4d 20 73 71  er(name) FROM sq
36190 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20  lite_master".   
361a0 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52            " WHER
361b0 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41  E type='table' A
361c0 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f 74  ND coalesce(root
361d0 70 61 67 65 2c 30 29 3e 31 22 0a 20 20 20 20 20  page,0)>1".     
361e0 20 20 20 20 20 20 20 20 22 20 41 4e 44 20 6e 61          " AND na
361f0 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c  me NOT LIKE 'sql
36200 69 74 65 5f 25 27 22 0a 20 20 20 20 20 20 20 20  ite_%'".        
36210 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20       " ORDER BY 
36220 31 20 63 6f 6c 6c 61 74 65 20 6e 6f 63 61 73 65  1 collate nocase
36230 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  ";.    }.    sql
36240 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
36250 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c  p->db, zSql, -1,
36260 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20   &pStmt, 0);.   
36270 20 69 6e 69 74 54 65 78 74 28 26 73 51 75 65 72   initText(&sQuer
36280 79 29 3b 0a 20 20 20 20 69 6e 69 74 54 65 78 74  y);.    initText
36290 28 26 73 53 71 6c 29 3b 0a 20 20 20 20 61 70 70  (&sSql);.    app
362a0 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 22  endText(&sSql, "
362b0 57 49 54 48 20 5b 73 68 61 33 73 75 6d 24 71 75  WITH [sha3sum$qu
362c0 65 72 79 5d 28 61 2c 62 29 20 41 53 28 22 2c 30  ery](a,b) AS(",0
362d0 29 3b 0a 20 20 20 20 7a 53 65 70 20 3d 20 22 56  );.    zSep = "V
362e0 41 4c 55 45 53 28 22 3b 0a 20 20 20 20 77 68 69  ALUES(";.    whi
362f0 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d  le( SQLITE_ROW==
36300 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
36310 6d 74 29 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e  mt) ){.      con
36320 73 74 20 63 68 61 72 20 2a 7a 54 61 62 20 3d 20  st char *zTab = 
36330 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
36340 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
36350 28 70 53 74 6d 74 2c 30 29 3b 0a 20 20 20 20 20  (pStmt,0);.     
36360 20 69 66 28 20 7a 4c 69 6b 65 20 26 26 20 73 71   if( zLike && sq
36370 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 7a 4c  lite3_strlike(zL
36380 69 6b 65 2c 20 7a 54 61 62 2c 20 30 29 21 3d 30  ike, zTab, 0)!=0
36390 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
363a0 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a     if( strncmp(z
363b0 54 61 62 2c 20 22 73 71 6c 69 74 65 5f 22 2c 37  Tab, "sqlite_",7
363c0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
363d0 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65  appendText(&sQue
363e0 72 79 2c 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  ry,"SELECT * FRO
363f0 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  M ", 0);.       
36400 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75   appendText(&sQu
36410 65 72 79 2c 7a 54 61 62 2c 27 22 27 29 3b 0a 20  ery,zTab,'"');. 
36420 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
36430 74 28 26 73 51 75 65 72 79 2c 22 20 4e 4f 54 20  t(&sQuery," NOT 
36440 49 4e 44 45 58 45 44 3b 22 2c 20 30 29 3b 0a 20  INDEXED;", 0);. 
36450 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
36460 74 72 63 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c  trcmp(zTab, "sql
36470 69 74 65 5f 6d 61 73 74 65 72 22 29 3d 3d 30 20  ite_master")==0 
36480 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  ){.        appen
36490 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 22 53  dText(&sQuery,"S
364a0 45 4c 45 43 54 20 74 79 70 65 2c 6e 61 6d 65 2c  ELECT type,name,
364b0 74 62 6c 5f 6e 61 6d 65 2c 73 71 6c 20 46 52 4f  tbl_name,sql FRO
364c0 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  M sqlite_master"
364d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
364e0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52              " OR
364f0 44 45 52 20 42 59 20 6e 61 6d 65 3b 22 2c 20 30  DER BY name;", 0
36500 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
36510 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62 2c 20  f( strcmp(zTab, 
36520 22 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65  "sqlite_sequence
36530 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
36540 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75   appendText(&sQu
36550 65 72 79 2c 22 53 45 4c 45 43 54 20 6e 61 6d 65  ery,"SELECT name
36560 2c 73 65 71 20 46 52 4f 4d 20 73 71 6c 69 74 65  ,seq FROM sqlite
36570 5f 73 65 71 75 65 6e 63 65 22 0a 20 20 20 20 20  _sequence".     
36580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36590 20 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59        " ORDER BY
365a0 20 6e 61 6d 65 3b 22 2c 20 30 29 3b 0a 20 20 20   name;", 0);.   
365b0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
365c0 63 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c 69 74  cmp(zTab, "sqlit
365d0 65 5f 73 74 61 74 31 22 29 3d 3d 30 20 29 7b 0a  e_stat1")==0 ){.
365e0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
365f0 78 74 28 26 73 51 75 65 72 79 2c 22 53 45 4c 45  xt(&sQuery,"SELE
36600 43 54 20 74 62 6c 2c 69 64 78 2c 73 74 61 74 20  CT tbl,idx,stat 
36610 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61 74  FROM sqlite_stat
36620 31 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1".             
36630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
36640 4f 52 44 45 52 20 42 59 20 74 62 6c 2c 69 64 78  ORDER BY tbl,idx
36650 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65  ;", 0);.      }e
36660 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
36670 54 61 62 2c 20 22 73 71 6c 69 74 65 5f 73 74 61  Tab, "sqlite_sta
36680 74 33 22 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  t3")==0.        
36690 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a       || strcmp(z
366a0 54 61 62 2c 20 22 73 71 6c 69 74 65 5f 73 74 61  Tab, "sqlite_sta
366b0 74 34 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  t4")==0 ){.     
366c0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
366d0 51 75 65 72 79 2c 20 22 53 45 4c 45 43 54 20 2a  Query, "SELECT *
366e0 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20   FROM ", 0);.   
366f0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
36700 26 73 51 75 65 72 79 2c 20 7a 54 61 62 2c 20 30  &sQuery, zTab, 0
36710 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
36720 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 20 22  dText(&sQuery, "
36730 20 4f 52 44 45 52 20 42 59 20 74 62 6c 2c 20 69   ORDER BY tbl, i
36740 64 78 2c 20 72 6f 77 69 64 3b 5c 6e 22 2c 20 30  dx, rowid;\n", 0
36750 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
36760 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 71   appendText(&sSq
36770 6c 2c 20 7a 53 65 70 2c 20 30 29 3b 0a 20 20 20  l, zSep, 0);.   
36780 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
36790 53 71 6c 2c 20 73 51 75 65 72 79 2e 7a 2c 20 27  Sql, sQuery.z, '
367a0 5c 27 27 29 3b 0a 20 20 20 20 20 20 73 51 75 65  \'');.      sQue
367b0 72 79 2e 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  ry.n = 0;.      
367c0 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 71 6c  appendText(&sSql
367d0 2c 20 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20  , ",", 0);.     
367e0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 71   appendText(&sSq
367f0 6c 2c 20 7a 54 61 62 2c 20 27 5c 27 27 29 3b 0a  l, zTab, '\'');.
36800 20 20 20 20 20 20 7a 53 65 70 20 3d 20 22 29 2c        zSep = "),
36810 28 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  (";.    }.    sq
36820 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
36830 53 74 6d 74 29 3b 0a 20 20 20 20 69 66 28 20 62  Stmt);.    if( b
36840 53 65 70 61 72 61 74 65 20 29 7b 0a 20 20 20 20  Separate ){.    
36850 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
36860 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20 20  _mprintf(.      
36870 20 20 20 20 22 25 73 29 29 22 0a 20 20 20 20 20      "%s))".     
36880 20 20 20 20 20 22 20 53 45 4c 45 43 54 20 6c 6f       " SELECT lo
36890 77 65 72 28 68 65 78 28 73 68 61 33 5f 71 75 65  wer(hex(sha3_que
368a0 72 79 28 61 2c 25 64 29 29 29 20 41 53 20 68 61  ry(a,%d))) AS ha
368b0 73 68 2c 20 62 20 41 53 20 6c 61 62 65 6c 22 0a  sh, b AS label".
368c0 20 20 20 20 20 20 20 20 20 20 22 20 20 20 46 52            "   FR
368d0 4f 4d 20 5b 73 68 61 33 73 75 6d 24 71 75 65 72  OM [sha3sum$quer
368e0 79 5d 22 2c 0a 20 20 20 20 20 20 20 20 20 20 73  y]",.          s
368f0 53 71 6c 2e 7a 2c 20 69 53 69 7a 65 29 3b 0a 20  Sql.z, iSize);. 
36900 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
36910 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zSql = sqlite3_m
36920 70 72 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20  printf(.        
36930 20 20 22 25 73 29 29 22 0a 20 20 20 20 20 20 20    "%s))".       
36940 20 20 20 22 20 53 45 4c 45 43 54 20 6c 6f 77 65     " SELECT lowe
36950 72 28 68 65 78 28 73 68 61 33 5f 71 75 65 72 79  r(hex(sha3_query
36960 28 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 61 2c  (group_concat(a,
36970 27 27 29 2c 25 64 29 29 29 20 41 53 20 68 61 73  ''),%d))) AS has
36980 68 22 0a 20 20 20 20 20 20 20 20 20 20 22 20 20  h".          "  
36990 20 46 52 4f 4d 20 5b 73 68 61 33 73 75 6d 24 71   FROM [sha3sum$q
369a0 75 65 72 79 5d 22 2c 0a 20 20 20 20 20 20 20 20  uery]",.        
369b0 20 20 73 53 71 6c 2e 7a 2c 20 69 53 69 7a 65 29    sSql.z, iSize)
369c0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65 65  ;.    }.    free
369d0 54 65 78 74 28 26 73 51 75 65 72 79 29 3b 0a 20  Text(&sQuery);. 
369e0 20 20 20 66 72 65 65 54 65 78 74 28 26 73 53 71     freeText(&sSq
369f0 6c 29 3b 0a 20 20 20 20 69 66 28 20 62 44 65 62  l);.    if( bDeb
36a00 75 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  ug ){.      utf8
36a10 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
36a20 22 25 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20  "%s\n", zSql);. 
36a30 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
36a40 73 68 65 6c 6c 5f 65 78 65 63 28 70 2c 20 7a 53  shell_exec(p, zS
36a50 71 6c 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  ql, 0);.    }.  
36a60 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
36a70 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23  Sql);.  }else..#
36a80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 4f  ifndef SQLITE_NO
36a90 48 41 56 45 5f 53 59 53 54 45 4d 0a 20 20 69 66  HAVE_SYSTEM.  if
36aa0 28 20 63 3d 3d 27 73 27 0a 20 20 20 26 26 20 28  ( c=='s'.   && (
36ab0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
36ac0 2c 20 22 73 68 65 6c 6c 22 2c 20 6e 29 3d 3d 30  , "shell", n)==0
36ad0 20 7c 7c 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   || strncmp(azAr
36ae0 67 5b 30 5d 2c 22 73 79 73 74 65 6d 22 2c 6e 29  g[0],"system",n)
36af0 3d 3d 30 29 0a 20 20 29 7b 0a 20 20 20 20 63 68  ==0).  ){.    ch
36b00 61 72 20 2a 7a 43 6d 64 3b 0a 20 20 20 20 69 6e  ar *zCmd;.    in
36b10 74 20 69 2c 20 78 3b 0a 20 20 20 20 69 66 28 20  t i, x;.    if( 
36b20 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20  nArg<2 ){.      
36b30 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
36b40 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 79 73 74  r, "Usage: .syst
36b50 65 6d 20 43 4f 4d 4d 41 4e 44 5c 6e 22 29 3b 0a  em COMMAND\n");.
36b60 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
36b70 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
36b80 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
36b90 7d 0a 20 20 20 20 7a 43 6d 64 20 3d 20 73 71 6c  }.    zCmd = sql
36ba0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 73 74 72  ite3_mprintf(str
36bb0 63 68 72 28 61 7a 41 72 67 5b 31 5d 2c 27 20 27  chr(azArg[1],' '
36bc0 29 3d 3d 30 3f 22 25 73 22 3a 22 5c 22 25 73 5c  )==0?"%s":"\"%s\
36bd0 22 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  "", azArg[1]);. 
36be0 20 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 6e 41     for(i=2; i<nA
36bf0 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
36c00 7a 43 6d 64 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zCmd = sqlite3_m
36c10 70 72 69 6e 74 66 28 73 74 72 63 68 72 28 61 7a  printf(strchr(az
36c20 41 72 67 5b 69 5d 2c 27 20 27 29 3d 3d 30 3f 22  Arg[i],' ')==0?"
36c30 25 7a 20 25 73 22 3a 22 25 7a 20 5c 22 25 73 5c  %z %s":"%z \"%s\
36c40 22 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  "",.            
36c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c60 20 7a 43 6d 64 2c 20 61 7a 41 72 67 5b 69 5d 29   zCmd, azArg[i])
36c70 3b 0a 20 20 20 20 7d 0a 20 20 20 20 78 20 3d 20  ;.    }.    x = 
36c80 73 79 73 74 65 6d 28 7a 43 6d 64 29 3b 0a 20 20  system(zCmd);.  
36c90 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
36ca0 43 6d 64 29 3b 0a 20 20 20 20 69 66 28 20 78 20  Cmd);.    if( x 
36cb0 29 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64  ) raw_printf(std
36cc0 65 72 72 2c 20 22 53 79 73 74 65 6d 20 63 6f 6d  err, "System com
36cd0 6d 61 6e 64 20 72 65 74 75 72 6e 73 20 25 64 5c  mand returns %d\
36ce0 6e 22 2c 20 78 29 3b 0a 20 20 7d 65 6c 73 65 0a  n", x);.  }else.
36cf0 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
36d00 65 64 28 53 51 4c 49 54 45 5f 4e 4f 48 41 56 45  ed(SQLITE_NOHAVE
36d10 5f 53 59 53 54 45 4d 29 20 2a 2f 0a 0a 20 20 69  _SYSTEM) */..  i
36d20 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73 74 72  f( c=='s' && str
36d30 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
36d40 73 68 6f 77 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  show", n)==0 ){.
36d50 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
36d60 20 63 68 61 72 20 2a 61 7a 42 6f 6f 6c 5b 5d 20   char *azBool[] 
36d70 3d 20 7b 20 22 6f 66 66 22 2c 20 22 6f 6e 22 2c  = { "off", "on",
36d80 20 22 74 72 69 67 67 65 72 22 2c 20 22 66 75 6c   "trigger", "ful
36d90 6c 22 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  l"};.    int i;.
36da0 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 31 20      if( nArg!=1 
36db0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
36dc0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
36dd0 67 65 3a 20 2e 73 68 6f 77 5c 6e 22 29 3b 0a 20  ge: .show\n");. 
36de0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
36df0 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d     goto meta_com
36e00 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d  mand_exit;.    }
36e10 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
36e20 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32  (p->out, "%12.12
36e30 73 3a 20 25 73 5c 6e 22 2c 22 65 63 68 6f 22 2c  s: %s\n","echo",
36e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e60 20 20 20 61 7a 42 6f 6f 6c 5b 53 68 65 6c 6c 48     azBool[ShellH
36e70 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f  asFlag(p, SHFLG_
36e80 45 63 68 6f 29 5d 29 3b 0a 20 20 20 20 75 74 66  Echo)]);.    utf
36e90 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
36ea0 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22   "%12.12s: %s\n"
36eb0 2c 22 65 71 70 22 2c 20 61 7a 42 6f 6f 6c 5b 70  ,"eqp", azBool[p
36ec0 2d 3e 61 75 74 6f 45 51 50 26 33 5d 29 3b 0a 20  ->autoEQP&3]);. 
36ed0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
36ee0 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a  ->out, "%12.12s:
36ef0 20 25 73 5c 6e 22 2c 22 65 78 70 6c 61 69 6e 22   %s\n","explain"
36f00 2c 0a 20 20 20 20 20 20 20 20 20 70 2d 3e 6d 6f  ,.         p->mo
36f10 64 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e  de==MODE_Explain
36f20 20 3f 20 22 6f 6e 22 20 3a 20 70 2d 3e 61 75 74   ? "on" : p->aut
36f30 6f 45 78 70 6c 61 69 6e 20 3f 20 22 61 75 74 6f  oExplain ? "auto
36f40 22 20 3a 20 22 6f 66 66 22 29 3b 0a 20 20 20 20  " : "off");.    
36f50 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
36f60 75 74 2c 22 25 31 32 2e 31 32 73 3a 20 25 73 5c  ut,"%12.12s: %s\
36f70 6e 22 2c 22 68 65 61 64 65 72 73 22 2c 20 61 7a  n","headers", az
36f80 42 6f 6f 6c 5b 70 2d 3e 73 68 6f 77 48 65 61 64  Bool[p->showHead
36f90 65 72 21 3d 30 5d 29 3b 0a 20 20 20 20 75 74 66  er!=0]);.    utf
36fa0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
36fb0 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22   "%12.12s: %s\n"
36fc0 2c 22 6d 6f 64 65 22 2c 20 6d 6f 64 65 44 65 73  ,"mode", modeDes
36fd0 63 72 5b 70 2d 3e 6d 6f 64 65 5d 29 3b 0a 20 20  cr[p->mode]);.  
36fe0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
36ff0 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20  >out, "%12.12s: 
37000 22 2c 20 22 6e 75 6c 6c 76 61 6c 75 65 22 29 3b  ", "nullvalue");
37010 0a 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63 5f  .      output_c_
37020 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 70  string(p->out, p
37030 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20  ->nullValue);.  
37040 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
37050 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20  ->out, "\n");.  
37060 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
37070 3e 6f 75 74 2c 22 25 31 32 2e 31 32 73 3a 20 25  >out,"%12.12s: %
37080 73 5c 6e 22 2c 22 6f 75 74 70 75 74 22 2c 0a 20  s\n","output",. 
37090 20 20 20 20 20 20 20 20 20 20 20 73 74 72 6c 65             strle
370a0 6e 33 30 28 70 2d 3e 6f 75 74 66 69 6c 65 29 20  n30(p->outfile) 
370b0 3f 20 70 2d 3e 6f 75 74 66 69 6c 65 20 3a 20 22  ? p->outfile : "
370c0 73 74 64 6f 75 74 22 29 3b 0a 20 20 20 20 75 74  stdout");.    ut
370d0 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
370e0 2c 22 25 31 32 2e 31 32 73 3a 20 22 2c 20 22 63  ,"%12.12s: ", "c
370f0 6f 6c 73 65 70 61 72 61 74 6f 72 22 29 3b 0a 20  olseparator");. 
37100 20 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73 74       output_c_st
37110 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e  ring(p->out, p->
37120 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  colSeparator);. 
37130 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
37140 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20  p->out, "\n");. 
37150 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
37160 2d 3e 6f 75 74 2c 22 25 31 32 2e 31 32 73 3a 20  ->out,"%12.12s: 
37170 22 2c 20 22 72 6f 77 73 65 70 61 72 61 74 6f 72  ", "rowseparator
37180 22 29 3b 0a 20 20 20 20 20 20 6f 75 74 70 75 74  ");.      output
37190 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  _c_string(p->out
371a0 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
371b0 72 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  r);.      raw_pr
371c0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
371d0 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ");.    utf8_pri
371e0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32  ntf(p->out, "%12
371f0 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 73 74 61  .12s: %s\n","sta
37200 74 73 22 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 73  ts", azBool[p->s
37210 74 61 74 73 4f 6e 21 3d 30 5d 29 3b 0a 20 20 20  tatsOn!=0]);.   
37220 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
37230 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 22  out, "%12.12s: "
37240 2c 20 22 77 69 64 74 68 22 29 3b 0a 20 20 20 20  , "width");.    
37250 66 6f 72 20 28 69 3d 30 3b 69 3c 28 69 6e 74 29  for (i=0;i<(int)
37260 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c  ArraySize(p->col
37270 57 69 64 74 68 29 20 26 26 20 70 2d 3e 63 6f 6c  Width) && p->col
37280 57 69 64 74 68 5b 69 5d 20 21 3d 20 30 3b 69 2b  Width[i] != 0;i+
37290 2b 29 20 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  +) {.      raw_p
372a0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
372b0 64 20 22 2c 20 70 2d 3e 63 6f 6c 57 69 64 74 68  d ", p->colWidth
372c0 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  [i]);.    }.    
372d0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
372e0 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74  t, "\n");.    ut
372f0 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
37300 2c 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e  , "%12.12s: %s\n
37310 22 2c 20 22 66 69 6c 65 6e 61 6d 65 22 2c 0a 20  ", "filename",. 
37320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
37330 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3f 20  ->zDbFilename ? 
37340 70 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3a  p->zDbFilename :
37350 20 22 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20   "");.  }else.. 
37360 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73   if( c=='s' && s
37370 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
37380 20 22 73 74 61 74 73 22 2c 20 6e 29 3d 3d 30 20   "stats", n)==0 
37390 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d  ){.    if( nArg=
373a0 3d 32 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 73  =2 ){.      p->s
373b0 74 61 74 73 4f 6e 20 3d 20 28 75 38 29 62 6f 6f  tatsOn = (u8)boo
373c0 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
373d0 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  1]);.    }else i
373e0 66 28 20 6e 41 72 67 3d 3d 31 20 29 7b 0a 20 20  f( nArg==1 ){.  
373f0 20 20 20 20 64 69 73 70 6c 61 79 5f 73 74 61 74      display_stat
37400 73 28 70 2d 3e 64 62 2c 20 70 2c 20 30 29 3b 0a  s(p->db, p, 0);.
37410 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
37420 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
37430 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 74 61  rr, "Usage: .sta
37440 74 73 20 3f 6f 6e 7c 6f 66 66 3f 5c 6e 22 29 3b  ts ?on|off?\n");
37450 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
37460 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
37470 69 66 28 20 28 63 3d 3d 27 74 27 20 26 26 20 6e  if( (c=='t' && n
37480 3e 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  >1 && strncmp(az
37490 41 72 67 5b 30 5d 2c 20 22 74 61 62 6c 65 73 22  Arg[0], "tables"
374a0 2c 20 6e 29 3d 3d 30 29 0a 20 20 20 7c 7c 20 28  , n)==0).   || (
374b0 63 3d 3d 27 69 27 20 26 26 20 28 73 74 72 6e 63  c=='i' && (strnc
374c0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6e  mp(azArg[0], "in
374d0 64 69 63 65 73 22 2c 20 6e 29 3d 3d 30 0a 20 20  dices", n)==0.  
374e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c                 |
374f0 7c 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  | strncmp(azArg[
37500 30 5d 2c 20 22 69 6e 64 65 78 65 73 22 2c 20 6e  0], "indexes", n
37510 29 3d 3d 30 29 20 29 0a 20 20 29 7b 0a 20 20 20  )==0) ).  ){.   
37520 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
37530 53 74 6d 74 3b 0a 20 20 20 20 63 68 61 72 20 2a  Stmt;.    char *
37540 2a 61 7a 52 65 73 75 6c 74 3b 0a 20 20 20 20 69  *azResult;.    i
37550 6e 74 20 6e 52 6f 77 2c 20 6e 41 6c 6c 6f 63 3b  nt nRow, nAlloc;
37560 0a 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20  .    int ii;.   
37570 20 53 68 65 6c 6c 54 65 78 74 20 73 3b 0a 20 20   ShellText s;.  
37580 20 20 69 6e 69 74 54 65 78 74 28 26 73 29 3b 0a    initText(&s);.
37590 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
375a0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
375b0 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
375c0 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41 20 64 61  ->db, "PRAGMA da
375d0 74 61 62 61 73 65 5f 6c 69 73 74 22 2c 20 2d 31  tabase_list", -1
375e0 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20  , &pStmt, 0);.  
375f0 20 20 69 66 28 20 72 63 20 29 20 72 65 74 75 72    if( rc ) retur
37600 6e 20 73 68 65 6c 6c 44 61 74 61 62 61 73 65 45  n shellDatabaseE
37610 72 72 6f 72 28 70 2d 3e 64 62 29 3b 0a 0a 20 20  rror(p->db);..  
37620 20 20 69 66 28 20 6e 41 72 67 3e 32 20 26 26 20    if( nArg>2 && 
37630 63 3d 3d 27 69 27 20 29 7b 0a 20 20 20 20 20 20  c=='i' ){.