/ Hex Artifact Content
Login

Artifact 339169a3d1307b5566ebe9ce15832d03439206106724c78cc3d9125a7b851795:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  ******.** This f
0180: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64  ile contains cod
0190: 65 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  e to implement t
01a0: 68 65 20 22 73 71 6c 69 74 65 22 20 63 6f 6d 6d  he "sqlite" comm
01b0: 61 6e 64 20 6c 69 6e 65 0a 2a 2a 20 75 74 69 6c  and line.** util
01c0: 69 74 79 20 66 6f 72 20 61 63 63 65 73 73 69 6e  ity for accessin
01d0: 67 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  g SQLite databas
01e0: 65 73 2e 0a 2a 2f 0a 23 69 66 20 28 64 65 66 69  es..*/.#if (defi
01f0: 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64  ned(_WIN32) || d
0200: 65 66 69 6e 65 64 28 57 49 4e 33 32 29 29 20 26  efined(WIN32)) &
0210: 26 20 21 64 65 66 69 6e 65 64 28 5f 43 52 54 5f  & !defined(_CRT_
0220: 53 45 43 55 52 45 5f 4e 4f 5f 57 41 52 4e 49 4e  SECURE_NO_WARNIN
0230: 47 53 29 0a 2f 2a 20 54 68 69 73 20 6e 65 65 64  GS)./* This need
0240: 73 20 74 6f 20 63 6f 6d 65 20 62 65 66 6f 72 65  s to come before
0250: 20 61 6e 79 20 69 6e 63 6c 75 64 65 73 20 66 6f   any includes fo
0260: 72 20 4d 53 56 43 20 63 6f 6d 70 69 6c 65 72 20  r MSVC compiler 
0270: 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 43 52 54 5f  */.#define _CRT_
0280: 53 45 43 55 52 45 5f 4e 4f 5f 57 41 52 4e 49 4e  SECURE_NO_WARNIN
0290: 47 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  GS.#endif../*.**
02a0: 20 57 61 72 6e 69 6e 67 20 70 72 61 67 6d 61 73   Warning pragmas
02b0: 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 6d 73 76   copied from msv
02c0: 63 2e 68 20 69 6e 20 74 68 65 20 63 6f 72 65 2e  c.h in the core.
02d0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
02e0: 5f 4d 53 43 5f 56 45 52 29 0a 23 70 72 61 67 6d  _MSC_VER).#pragm
02f0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0300: 65 20 3a 20 34 30 35 34 29 0a 23 70 72 61 67 6d  e : 4054).#pragm
0310: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0320: 65 20 3a 20 34 30 35 35 29 0a 23 70 72 61 67 6d  e : 4055).#pragm
0330: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0340: 65 20 3a 20 34 31 30 30 29 0a 23 70 72 61 67 6d  e : 4100).#pragm
0350: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0360: 65 20 3a 20 34 31 32 37 29 0a 23 70 72 61 67 6d  e : 4127).#pragm
0370: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0380: 65 20 3a 20 34 31 33 30 29 0a 23 70 72 61 67 6d  e : 4130).#pragm
0390: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
03a0: 65 20 3a 20 34 31 35 32 29 0a 23 70 72 61 67 6d  e : 4152).#pragm
03b0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
03c0: 65 20 3a 20 34 31 38 39 29 0a 23 70 72 61 67 6d  e : 4189).#pragm
03d0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
03e0: 65 20 3a 20 34 32 30 36 29 0a 23 70 72 61 67 6d  e : 4206).#pragm
03f0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0400: 65 20 3a 20 34 32 31 30 29 0a 23 70 72 61 67 6d  e : 4210).#pragm
0410: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0420: 65 20 3a 20 34 32 33 32 29 0a 23 70 72 61 67 6d  e : 4232).#pragm
0430: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0440: 65 20 3a 20 34 32 34 34 29 0a 23 70 72 61 67 6d  e : 4244).#pragm
0450: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0460: 65 20 3a 20 34 33 30 35 29 0a 23 70 72 61 67 6d  e : 4305).#pragm
0470: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0480: 65 20 3a 20 34 33 30 36 29 0a 23 70 72 61 67 6d  e : 4306).#pragm
0490: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
04a0: 65 20 3a 20 34 37 30 32 29 0a 23 70 72 61 67 6d  e : 4702).#pragm
04b0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
04c0: 65 20 3a 20 34 37 30 36 29 0a 23 65 6e 64 69 66  e : 4706).#endif
04d0: 20 2f 2a 20 64 65 66 69 6e 65 64 28 5f 4d 53 43   /* defined(_MSC
04e0: 5f 56 45 52 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  _VER) */../*.** 
04f0: 4e 6f 20 73 75 70 70 6f 72 74 20 66 6f 72 20 6c  No support for l
0500: 6f 61 64 61 62 6c 65 20 65 78 74 65 6e 73 69 6f  oadable extensio
0510: 6e 73 20 69 6e 20 56 78 57 6f 72 6b 73 2e 0a 2a  ns in VxWorks..*
0520: 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 5f  /.#if (defined(_
0530: 5f 52 54 50 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  _RTP__) || defin
0540: 65 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 29  ed(_WRS_KERNEL))
0550: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
0560: 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
0570: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
0580: 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
0590: 49 4f 4e 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ION 1.#endif../*
05a0: 0a 2a 2a 20 45 6e 61 62 6c 65 20 6c 61 72 67 65  .** Enable large
05b0: 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 20 66 6f  -file support fo
05c0: 72 20 66 6f 70 65 6e 28 29 20 61 6e 64 20 66 72  r fopen() and fr
05d0: 69 65 6e 64 73 20 6f 6e 20 75 6e 69 78 2e 0a 2a  iends on unix..*
05e0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
05f0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64  _DISABLE_LFS.# d
0600: 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c  efine _LARGE_FIL
0610: 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64  E       1.# ifnd
0620: 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ef _FILE_OFFSET_
0630: 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20  BITS.#   define 
0640: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
0650: 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64  S 64.# endif.# d
0660: 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45  efine _LARGEFILE
0670: 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66  _SOURCE 1.#endif
0680: 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  ..#include <stdl
0690: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
06a0: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
06b0: 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e  de <stdio.h>.#in
06c0: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
06d0: 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74  .#include "sqlit
06e0: 65 33 2e 68 22 0a 23 69 66 20 53 51 4c 49 54 45  e3.h".#if SQLITE
06f0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
0700: 54 49 4f 4e 0a 23 20 69 6e 63 6c 75 64 65 20 22  TION.# include "
0710: 73 71 6c 69 74 65 33 75 73 65 72 61 75 74 68 2e  sqlite3userauth.
0720: 68 22 0a 23 65 6e 64 69 66 0a 23 69 6e 63 6c 75  h".#endif.#inclu
0730: 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69 6e  de <ctype.h>.#in
0740: 63 6c 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e  clude <stdarg.h>
0750: 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  ..#if !defined(_
0760: 57 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e  WIN32) && !defin
0770: 65 64 28 57 49 4e 33 32 29 0a 23 20 69 6e 63 6c  ed(WIN32).# incl
0780: 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 0a 23  ude <signal.h>.#
0790: 20 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 52   if !defined(__R
07a0: 54 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  TP__) && !define
07b0: 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a 23  d(_WRS_KERNEL).#
07c0: 20 20 69 6e 63 6c 75 64 65 20 3c 70 77 64 2e 68    include <pwd.h
07d0: 3e 0a 23 20 65 6e 64 69 66 0a 23 20 69 6e 63 6c  >.# endif.# incl
07e0: 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 23  ude <unistd.h>.#
07f0: 20 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79   include <sys/ty
0800: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 23  pes.h>.#endif..#
0810: 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 45  if HAVE_READLINE
0820: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 72 65 61 64  .# include <read
0830: 6c 69 6e 65 2f 72 65 61 64 6c 69 6e 65 2e 68 3e  line/readline.h>
0840: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 72 65 61 64  .# include <read
0850: 6c 69 6e 65 2f 68 69 73 74 6f 72 79 2e 68 3e 0a  line/history.h>.
0860: 23 65 6e 64 69 66 0a 0a 23 69 66 20 48 41 56 45  #endif..#if HAVE
0870: 5f 45 44 49 54 4c 49 4e 45 0a 23 20 69 6e 63 6c  _EDITLINE.# incl
0880: 75 64 65 20 3c 65 64 69 74 6c 69 6e 65 2f 72 65  ude <editline/re
0890: 61 64 6c 69 6e 65 2e 68 3e 0a 23 65 6e 64 69 66  adline.h>.#endif
08a0: 0a 0a 23 69 66 20 48 41 56 45 5f 45 44 49 54 4c  ..#if HAVE_EDITL
08b0: 49 4e 45 20 7c 7c 20 48 41 56 45 5f 52 45 41 44  INE || HAVE_READ
08c0: 4c 49 4e 45 0a 0a 23 20 64 65 66 69 6e 65 20 73  LINE..# define s
08d0: 68 65 6c 6c 5f 61 64 64 5f 68 69 73 74 6f 72 79  hell_add_history
08e0: 28 58 29 20 61 64 64 5f 68 69 73 74 6f 72 79 28  (X) add_history(
08f0: 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c  X).# define shel
0900: 6c 5f 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58  l_read_history(X
0910: 29 20 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58  ) read_history(X
0920: 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c  ).# define shell
0930: 5f 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28 58  _write_history(X
0940: 29 20 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28  ) write_history(
0950: 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c  X).# define shel
0960: 6c 5f 73 74 69 66 6c 65 5f 68 69 73 74 6f 72 79  l_stifle_history
0970: 28 58 29 20 73 74 69 66 6c 65 5f 68 69 73 74 6f  (X) stifle_histo
0980: 72 79 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  ry(X).# define s
0990: 68 65 6c 6c 5f 72 65 61 64 6c 69 6e 65 28 58 29  hell_readline(X)
09a0: 20 72 65 61 64 6c 69 6e 65 28 58 29 0a 0a 23 65   readline(X)..#e
09b0: 6c 69 66 20 48 41 56 45 5f 4c 49 4e 45 4e 4f 49  lif HAVE_LINENOI
09c0: 53 45 0a 0a 23 20 69 6e 63 6c 75 64 65 20 22 6c  SE..# include "l
09d0: 69 6e 65 6e 6f 69 73 65 2e 68 22 0a 23 20 64 65  inenoise.h".# de
09e0: 66 69 6e 65 20 73 68 65 6c 6c 5f 61 64 64 5f 68  fine shell_add_h
09f0: 69 73 74 6f 72 79 28 58 29 20 6c 69 6e 65 6e 6f  istory(X) lineno
0a00: 69 73 65 48 69 73 74 6f 72 79 41 64 64 28 58 29  iseHistoryAdd(X)
0a10: 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f  .# define shell_
0a20: 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58 29 20  read_history(X) 
0a30: 6c 69 6e 65 6e 6f 69 73 65 48 69 73 74 6f 72 79  linenoiseHistory
0a40: 4c 6f 61 64 28 58 29 0a 23 20 64 65 66 69 6e 65  Load(X).# define
0a50: 20 73 68 65 6c 6c 5f 77 72 69 74 65 5f 68 69 73   shell_write_his
0a60: 74 6f 72 79 28 58 29 20 6c 69 6e 65 6e 6f 69 73  tory(X) linenois
0a70: 65 48 69 73 74 6f 72 79 53 61 76 65 28 58 29 0a  eHistorySave(X).
0a80: 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 73  # define shell_s
0a90: 74 69 66 6c 65 5f 68 69 73 74 6f 72 79 28 58 29  tifle_history(X)
0aa0: 20 6c 69 6e 65 6e 6f 69 73 65 48 69 73 74 6f 72   linenoiseHistor
0ab0: 79 53 65 74 4d 61 78 4c 65 6e 28 58 29 0a 23 20  ySetMaxLen(X).# 
0ac0: 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 72 65 61  define shell_rea
0ad0: 64 6c 69 6e 65 28 58 29 20 6c 69 6e 65 6e 6f 69  dline(X) linenoi
0ae0: 73 65 28 58 29 0a 0a 23 65 6c 73 65 0a 0a 23 20  se(X)..#else..# 
0af0: 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 72 65 61  define shell_rea
0b00: 64 5f 68 69 73 74 6f 72 79 28 58 29 0a 23 20 64  d_history(X).# d
0b10: 65 66 69 6e 65 20 73 68 65 6c 6c 5f 77 72 69 74  efine shell_writ
0b20: 65 5f 68 69 73 74 6f 72 79 28 58 29 0a 23 20 64  e_history(X).# d
0b30: 65 66 69 6e 65 20 73 68 65 6c 6c 5f 73 74 69 66  efine shell_stif
0b40: 6c 65 5f 68 69 73 74 6f 72 79 28 58 29 0a 0a 23  le_history(X)..#
0b50: 20 64 65 66 69 6e 65 20 53 48 45 4c 4c 5f 55 53   define SHELL_US
0b60: 45 5f 4c 4f 43 41 4c 5f 47 45 54 4c 49 4e 45 20  E_LOCAL_GETLINE 
0b70: 31 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 20 64  1.#endif...#if d
0b80: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c  efined(_WIN32) |
0b90: 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29  | defined(WIN32)
0ba0: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 69 6f 2e 68  .# include <io.h
0bb0: 3e 0a 23 20 69 6e 63 6c 75 64 65 20 3c 66 63 6e  >.# include <fcn
0bc0: 74 6c 2e 68 3e 0a 23 20 64 65 66 69 6e 65 20 69  tl.h>.# define i
0bd0: 73 61 74 74 79 28 68 29 20 5f 69 73 61 74 74 79  satty(h) _isatty
0be0: 28 68 29 0a 23 20 69 66 6e 64 65 66 20 61 63 63  (h).# ifndef acc
0bf0: 65 73 73 0a 23 20 20 64 65 66 69 6e 65 20 61 63  ess.#  define ac
0c00: 63 65 73 73 28 66 2c 6d 29 20 5f 61 63 63 65 73  cess(f,m) _acces
0c10: 73 28 28 66 29 2c 28 6d 29 29 0a 23 20 65 6e 64  s((f),(m)).# end
0c20: 69 66 0a 23 20 75 6e 64 65 66 20 70 6f 70 65 6e  if.# undef popen
0c30: 0a 23 20 64 65 66 69 6e 65 20 70 6f 70 65 6e 20  .# define popen 
0c40: 5f 70 6f 70 65 6e 0a 23 20 75 6e 64 65 66 20 70  _popen.# undef p
0c50: 63 6c 6f 73 65 0a 23 20 64 65 66 69 6e 65 20 70  close.# define p
0c60: 63 6c 6f 73 65 20 5f 70 63 6c 6f 73 65 0a 23 65  close _pclose.#e
0c70: 6c 73 65 0a 20 2f 2a 20 4d 61 6b 65 20 73 75 72  lse. /* Make sur
0c80: 65 20 69 73 61 74 74 79 28 29 20 68 61 73 20 61  e isatty() has a
0c90: 20 70 72 6f 74 6f 74 79 70 65 2e 20 2a 2f 0a 20   prototype. */. 
0ca0: 65 78 74 65 72 6e 20 69 6e 74 20 69 73 61 74 74  extern int isatt
0cb0: 79 28 69 6e 74 29 3b 0a 0a 23 20 69 66 20 21 64  y(int);..# if !d
0cc0: 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29 20  efined(__RTP__) 
0cd0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 52 53  && !defined(_WRS
0ce0: 5f 4b 45 52 4e 45 4c 29 0a 20 20 2f 2a 20 70 6f  _KERNEL).  /* po
0cf0: 70 65 6e 20 61 6e 64 20 70 63 6c 6f 73 65 20 61  pen and pclose a
0d00: 72 65 20 6e 6f 74 20 43 38 39 20 66 75 6e 63 74  re not C89 funct
0d10: 69 6f 6e 73 20 61 6e 64 20 73 6f 20 61 72 65 0a  ions and so are.
0d20: 20 20 2a 2a 20 73 6f 6d 65 74 69 6d 65 73 20 6f    ** sometimes o
0d30: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
0d40: 3c 73 74 64 69 6f 2e 68 3e 20 68 65 61 64 65 72  <stdio.h> header
0d50: 20 2a 2f 0a 20 20 20 65 78 74 65 72 6e 20 46 49   */.   extern FI
0d60: 4c 45 20 2a 70 6f 70 65 6e 28 63 6f 6e 73 74 20  LE *popen(const 
0d70: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
0d80: 2a 29 3b 0a 20 20 20 65 78 74 65 72 6e 20 69 6e  *);.   extern in
0d90: 74 20 70 63 6c 6f 73 65 28 46 49 4c 45 2a 29 3b  t pclose(FILE*);
0da0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
0db0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f  e SQLITE_OMIT_PO
0dc0: 50 45 4e 20 31 0a 23 20 65 6e 64 69 66 0a 23 65  PEN 1.# endif.#e
0dd0: 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
0de0: 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 2f 2a  d(_WIN32_WCE)./*
0df0: 20 57 69 6e 64 6f 77 73 20 43 45 20 28 61 72 6d   Windows CE (arm
0e00: 2d 77 69 6e 63 65 2d 6d 69 6e 67 77 33 32 63 65  -wince-mingw32ce
0e10: 2d 67 63 63 29 20 64 6f 65 73 20 6e 6f 74 20 70  -gcc) does not p
0e20: 72 6f 76 69 64 65 20 69 73 61 74 74 79 28 29 0a  rovide isatty().
0e30: 20 2a 20 74 68 75 73 20 77 65 20 61 6c 77 61 79   * thus we alway
0e40: 73 20 61 73 73 75 6d 65 20 74 68 61 74 20 77 65  s assume that we
0e50: 20 68 61 76 65 20 61 20 63 6f 6e 73 6f 6c 65 2e   have a console.
0e60: 20 54 68 61 74 20 63 61 6e 20 62 65 0a 20 2a 20   That can be. * 
0e70: 6f 76 65 72 72 69 64 64 65 6e 20 77 69 74 68 20  overridden with 
0e80: 74 68 65 20 2d 62 61 74 63 68 20 63 6f 6d 6d 61  the -batch comma
0e90: 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a  nd line option..
0ea0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 61 74   */.#define isat
0eb0: 74 79 28 78 29 20 31 0a 23 65 6e 64 69 66 0a 0a  ty(x) 1.#endif..
0ec0: 2f 2a 20 63 74 79 70 65 20 6d 61 63 72 6f 73 20  /* ctype macros 
0ed0: 74 68 61 74 20 77 6f 72 6b 20 77 69 74 68 20 73  that work with s
0ee0: 69 67 6e 65 64 20 63 68 61 72 61 63 74 65 72 73  igned characters
0ef0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 53 70   */.#define IsSp
0f00: 61 63 65 28 58 29 20 20 69 73 73 70 61 63 65 28  ace(X)  isspace(
0f10: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 58  (unsigned char)X
0f20: 29 0a 23 64 65 66 69 6e 65 20 49 73 44 69 67 69  ).#define IsDigi
0f30: 74 28 58 29 20 20 69 73 64 69 67 69 74 28 28 75  t(X)  isdigit((u
0f40: 6e 73 69 67 6e 65 64 20 63 68 61 72 29 58 29 0a  nsigned char)X).
0f50: 23 64 65 66 69 6e 65 20 54 6f 4c 6f 77 65 72 28  #define ToLower(
0f60: 58 29 20 20 28 63 68 61 72 29 74 6f 6c 6f 77 65  X)  (char)tolowe
0f70: 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
0f80: 29 58 29 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  )X)..#if defined
0f90: 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69  (_WIN32) || defi
0fa0: 6e 65 64 28 57 49 4e 33 32 29 0a 23 69 6e 63 6c  ned(WIN32).#incl
0fb0: 75 64 65 20 3c 77 69 6e 64 6f 77 73 2e 68 3e 0a  ude <windows.h>.
0fc0: 0a 2f 2a 20 73 74 72 69 6e 67 20 63 6f 6e 76 65  ./* string conve
0fd0: 72 73 69 6f 6e 20 72 6f 75 74 69 6e 65 73 20 6f  rsion routines o
0fe0: 6e 6c 79 20 6e 65 65 64 65 64 20 6f 6e 20 57 69  nly needed on Wi
0ff0: 6e 33 32 20 2a 2f 0a 65 78 74 65 72 6e 20 63 68  n32 */.extern ch
1000: 61 72 20 2a 73 71 6c 69 74 65 33 5f 77 69 6e 33  ar *sqlite3_win3
1010: 32 5f 75 6e 69 63 6f 64 65 5f 74 6f 5f 75 74 66  2_unicode_to_utf
1020: 38 28 4c 50 43 57 53 54 52 29 3b 0a 65 78 74 65  8(LPCWSTR);.exte
1030: 72 6e 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  rn char *sqlite3
1040: 5f 77 69 6e 33 32 5f 6d 62 63 73 5f 74 6f 5f 75  _win32_mbcs_to_u
1050: 74 66 38 5f 76 32 28 63 6f 6e 73 74 20 63 68 61  tf8_v2(const cha
1060: 72 20 2a 2c 20 69 6e 74 29 3b 0a 65 78 74 65 72  r *, int);.exter
1070: 6e 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  n char *sqlite3_
1080: 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 6d 62  win32_utf8_to_mb
1090: 63 73 5f 76 32 28 63 6f 6e 73 74 20 63 68 61 72  cs_v2(const char
10a0: 20 2a 2c 20 69 6e 74 29 3b 0a 65 78 74 65 72 6e   *, int);.extern
10b0: 20 4c 50 57 53 54 52 20 73 71 6c 69 74 65 33 5f   LPWSTR sqlite3_
10c0: 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 75 6e  win32_utf8_to_un
10d0: 69 63 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72  icode(const char
10e0: 20 2a 7a 54 65 78 74 29 3b 0a 23 65 6e 64 69 66   *zText);.#endif
10f0: 0a 0a 2f 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c  ../* On Windows,
1100: 20 77 65 20 6e 6f 72 6d 61 6c 6c 79 20 72 75 6e   we normally run
1110: 20 77 69 74 68 20 6f 75 74 70 75 74 20 6d 6f 64   with output mod
1120: 65 20 6f 66 20 54 45 58 54 20 73 6f 20 74 68 61  e of TEXT so tha
1130: 74 20 5c 6e 20 63 68 61 72 61 63 74 65 72 73 0a  t \n characters.
1140: 2a 2a 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ** are automatic
1150: 61 6c 6c 79 20 74 72 61 6e 73 6c 61 74 65 64 20  ally translated 
1160: 69 6e 74 6f 20 5c 72 5c 6e 2e 20 20 48 6f 77 65  into \r\n.  Howe
1170: 76 65 72 2c 20 74 68 69 73 20 62 65 68 61 76 69  ver, this behavi
1180: 6f 72 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62  or needs.** to b
1190: 65 20 64 69 73 61 62 6c 65 64 20 69 6e 20 73 6f  e disabled in so
11a0: 6d 65 20 63 61 73 65 73 20 28 65 78 3a 20 77 68  me cases (ex: wh
11b0: 65 6e 20 67 65 6e 65 72 61 74 69 6e 67 20 43 53  en generating CS
11c0: 56 20 6f 75 74 70 75 74 20 61 6e 64 20 77 68 65  V output and whe
11d0: 6e 0a 2a 2a 20 72 65 6e 64 65 72 69 6e 67 20 71  n.** rendering q
11e0: 75 6f 74 65 64 20 73 74 72 69 6e 67 73 20 74 68  uoted strings th
11f0: 61 74 20 63 6f 6e 74 61 69 6e 20 5c 6e 20 63 68  at contain \n ch
1200: 61 72 61 63 74 65 72 73 29 2e 20 20 54 68 65 20  aracters).  The 
1210: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 72 6f 75  following.** rou
1220: 74 69 6e 65 73 20 74 61 6b 65 20 63 61 72 65 20  tines take care 
1230: 6f 66 20 74 68 61 74 2e 0a 2a 2f 0a 23 69 66 20  of that..*/.#if 
1240: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
1250: 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
1260: 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65  ).static void se
1270: 74 42 69 6e 61 72 79 4d 6f 64 65 28 46 49 4c 45  tBinaryMode(FILE
1280: 20 2a 66 69 6c 65 2c 20 69 6e 74 20 69 73 4f 75   *file, int isOu
1290: 74 70 75 74 29 7b 0a 20 20 69 66 28 20 69 73 4f  tput){.  if( isO
12a0: 75 74 70 75 74 20 29 20 66 66 6c 75 73 68 28 66  utput ) fflush(f
12b0: 69 6c 65 29 3b 0a 20 20 5f 73 65 74 6d 6f 64 65  ile);.  _setmode
12c0: 28 5f 66 69 6c 65 6e 6f 28 66 69 6c 65 29 2c 20  (_fileno(file), 
12d0: 5f 4f 5f 42 49 4e 41 52 59 29 3b 0a 7d 0a 73 74  _O_BINARY);.}.st
12e0: 61 74 69 63 20 76 6f 69 64 20 73 65 74 54 65 78  atic void setTex
12f0: 74 4d 6f 64 65 28 46 49 4c 45 20 2a 66 69 6c 65  tMode(FILE *file
1300: 2c 20 69 6e 74 20 69 73 4f 75 74 70 75 74 29 7b  , int isOutput){
1310: 0a 20 20 69 66 28 20 69 73 4f 75 74 70 75 74 20  .  if( isOutput 
1320: 29 20 66 66 6c 75 73 68 28 66 69 6c 65 29 3b 0a  ) fflush(file);.
1330: 20 20 5f 73 65 74 6d 6f 64 65 28 5f 66 69 6c 65    _setmode(_file
1340: 6e 6f 28 66 69 6c 65 29 2c 20 5f 4f 5f 54 45 58  no(file), _O_TEX
1350: 54 29 3b 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65  T);.}.#else.# de
1360: 66 69 6e 65 20 73 65 74 42 69 6e 61 72 79 4d 6f  fine setBinaryMo
1370: 64 65 28 58 2c 59 29 0a 23 20 64 65 66 69 6e 65  de(X,Y).# define
1380: 20 73 65 74 54 65 78 74 4d 6f 64 65 28 58 2c 59   setTextMode(X,Y
1390: 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 54 72  ).#endif.../* Tr
13a0: 75 65 20 69 66 20 74 68 65 20 74 69 6d 65 72 20  ue if the timer 
13b0: 69 73 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 73 74  is enabled */.st
13c0: 61 74 69 63 20 69 6e 74 20 65 6e 61 62 6c 65 54  atic int enableT
13d0: 69 6d 65 72 20 3d 20 30 3b 0a 0a 2f 2a 20 52 65  imer = 0;../* Re
13e0: 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
13f0: 20 77 61 6c 6c 2d 63 6c 6f 63 6b 20 74 69 6d 65   wall-clock time
1400: 20 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74   */.static sqlit
1410: 65 33 5f 69 6e 74 36 34 20 74 69 6d 65 4f 66 44  e3_int64 timeOfD
1420: 61 79 28 76 6f 69 64 29 7b 0a 20 20 73 74 61 74  ay(void){.  stat
1430: 69 63 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ic sqlite3_vfs *
1440: 63 6c 6f 63 6b 56 66 73 20 3d 20 30 3b 0a 20 20  clockVfs = 0;.  
1450: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 74 3b  sqlite3_int64 t;
1460: 0a 20 20 69 66 28 20 63 6c 6f 63 6b 56 66 73 3d  .  if( clockVfs=
1470: 3d 30 20 29 20 63 6c 6f 63 6b 56 66 73 20 3d 20  =0 ) clockVfs = 
1480: 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1490: 28 30 29 3b 0a 20 20 69 66 28 20 63 6c 6f 63 6b  (0);.  if( clock
14a0: 56 66 73 2d 3e 69 56 65 72 73 69 6f 6e 3e 3d 32  Vfs->iVersion>=2
14b0: 20 26 26 20 63 6c 6f 63 6b 56 66 73 2d 3e 78 43   && clockVfs->xC
14c0: 75 72 72 65 6e 74 54 69 6d 65 49 6e 74 36 34 21  urrentTimeInt64!
14d0: 3d 30 20 29 7b 0a 20 20 20 20 63 6c 6f 63 6b 56  =0 ){.    clockV
14e0: 66 73 2d 3e 78 43 75 72 72 65 6e 74 54 69 6d 65  fs->xCurrentTime
14f0: 49 6e 74 36 34 28 63 6c 6f 63 6b 56 66 73 2c 20  Int64(clockVfs, 
1500: 26 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  &t);.  }else{.  
1510: 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 20 20    double r;.    
1520: 63 6c 6f 63 6b 56 66 73 2d 3e 78 43 75 72 72 65  clockVfs->xCurre
1530: 6e 74 54 69 6d 65 28 63 6c 6f 63 6b 56 66 73 2c  ntTime(clockVfs,
1540: 20 26 72 29 3b 0a 20 20 20 20 74 20 3d 20 28 73   &r);.    t = (s
1550: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 28 72 2a  qlite3_int64)(r*
1560: 38 36 34 30 30 30 30 30 2e 30 29 3b 0a 20 20 7d  86400000.0);.  }
1570: 0a 20 20 72 65 74 75 72 6e 20 74 3b 0a 7d 0a 0a  .  return t;.}..
1580: 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49  #if !defined(_WI
1590: 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65 64  N32) && !defined
15a0: 28 57 49 4e 33 32 29 20 26 26 20 21 64 65 66 69  (WIN32) && !defi
15b0: 6e 65 64 28 5f 5f 6d 69 6e 75 78 29 0a 23 69 6e  ned(__minux).#in
15c0: 63 6c 75 64 65 20 3c 73 79 73 2f 74 69 6d 65 2e  clude <sys/time.
15d0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73  h>.#include <sys
15e0: 2f 72 65 73 6f 75 72 63 65 2e 68 3e 0a 0a 2f 2a  /resource.h>../*
15f0: 20 56 78 57 6f 72 6b 73 20 64 6f 65 73 20 6e 6f   VxWorks does no
1600: 74 20 73 75 70 70 6f 72 74 20 67 65 74 72 75 73  t support getrus
1610: 61 67 65 28 29 20 61 73 20 66 61 72 20 61 73 20  age() as far as 
1620: 77 65 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  we can determine
1630: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1640: 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 20 7c 7c 20  _WRS_KERNEL) || 
1650: 64 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29  defined(__RTP__)
1660: 0a 73 74 72 75 63 74 20 72 75 73 61 67 65 20 7b  .struct rusage {
1670: 0a 20 20 73 74 72 75 63 74 20 74 69 6d 65 76 61  .  struct timeva
1680: 6c 20 72 75 5f 75 74 69 6d 65 3b 20 2f 2a 20 75  l ru_utime; /* u
1690: 73 65 72 20 43 50 55 20 74 69 6d 65 20 75 73 65  ser CPU time use
16a0: 64 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 74 69  d */.  struct ti
16b0: 6d 65 76 61 6c 20 72 75 5f 73 74 69 6d 65 3b 20  meval ru_stime; 
16c0: 2f 2a 20 73 79 73 74 65 6d 20 43 50 55 20 74 69  /* system CPU ti
16d0: 6d 65 20 75 73 65 64 20 2a 2f 0a 7d 3b 0a 23 64  me used */.};.#d
16e0: 65 66 69 6e 65 20 67 65 74 72 75 73 61 67 65 28  efine getrusage(
16f0: 41 2c 42 29 20 6d 65 6d 73 65 74 28 42 2c 30 2c  A,B) memset(B,0,
1700: 73 69 7a 65 6f 66 28 2a 42 29 29 0a 23 65 6e 64  sizeof(*B)).#end
1710: 69 66 0a 0a 2f 2a 20 53 61 76 65 64 20 72 65 73  if../* Saved res
1720: 6f 75 72 63 65 20 69 6e 66 6f 72 6d 61 74 69 6f  ource informatio
1730: 6e 20 66 6f 72 20 74 68 65 20 62 65 67 69 6e 6e  n for the beginn
1740: 69 6e 67 20 6f 66 20 61 6e 20 6f 70 65 72 61 74  ing of an operat
1750: 69 6f 6e 20 2a 2f 0a 73 74 61 74 69 63 20 73 74  ion */.static st
1760: 72 75 63 74 20 72 75 73 61 67 65 20 73 42 65 67  ruct rusage sBeg
1770: 69 6e 3b 20 20 2f 2a 20 43 50 55 20 74 69 6d 65  in;  /* CPU time
1780: 20 61 74 20 73 74 61 72 74 20 2a 2f 0a 73 74 61   at start */.sta
1790: 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  tic sqlite3_int6
17a0: 34 20 69 42 65 67 69 6e 3b 20 20 2f 2a 20 57 61  4 iBegin;  /* Wa
17b0: 6c 6c 2d 63 6c 6f 63 6b 20 74 69 6d 65 20 61 74  ll-clock time at
17c0: 20 73 74 61 72 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   start */../*.**
17d0: 20 42 65 67 69 6e 20 74 69 6d 69 6e 67 20 61 6e   Begin timing an
17e0: 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2f 0a 73 74   operation.*/.st
17f0: 61 74 69 63 20 76 6f 69 64 20 62 65 67 69 6e 54  atic void beginT
1800: 69 6d 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66  imer(void){.  if
1810: 28 20 65 6e 61 62 6c 65 54 69 6d 65 72 20 29 7b  ( enableTimer ){
1820: 0a 20 20 20 20 67 65 74 72 75 73 61 67 65 28 52  .    getrusage(R
1830: 55 53 41 47 45 5f 53 45 4c 46 2c 20 26 73 42 65  USAGE_SELF, &sBe
1840: 67 69 6e 29 3b 0a 20 20 20 20 69 42 65 67 69 6e  gin);.    iBegin
1850: 20 3d 20 74 69 6d 65 4f 66 44 61 79 28 29 3b 0a   = timeOfDay();.
1860: 20 20 7d 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e    }.}../* Return
1870: 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
1880: 6f 66 20 74 77 6f 20 74 69 6d 65 5f 73 74 72 75  of two time_stru
1890: 63 74 73 20 69 6e 20 73 65 63 6f 6e 64 73 20 2a  cts in seconds *
18a0: 2f 0a 73 74 61 74 69 63 20 64 6f 75 62 6c 65 20  /.static double 
18b0: 74 69 6d 65 44 69 66 66 28 73 74 72 75 63 74 20  timeDiff(struct 
18c0: 74 69 6d 65 76 61 6c 20 2a 70 53 74 61 72 74 2c  timeval *pStart,
18d0: 20 73 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20   struct timeval 
18e0: 2a 70 45 6e 64 29 7b 0a 20 20 72 65 74 75 72 6e  *pEnd){.  return
18f0: 20 28 70 45 6e 64 2d 3e 74 76 5f 75 73 65 63 20   (pEnd->tv_usec 
1900: 2d 20 70 53 74 61 72 74 2d 3e 74 76 5f 75 73 65  - pStart->tv_use
1910: 63 29 2a 30 2e 30 30 30 30 30 31 20 2b 0a 20 20  c)*0.000001 +.  
1920: 20 20 20 20 20 20 20 28 64 6f 75 62 6c 65 29 28         (double)(
1930: 70 45 6e 64 2d 3e 74 76 5f 73 65 63 20 2d 20 70  pEnd->tv_sec - p
1940: 53 74 61 72 74 2d 3e 74 76 5f 73 65 63 29 3b 0a  Start->tv_sec);.
1950: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  }../*.** Print t
1960: 68 65 20 74 69 6d 69 6e 67 20 72 65 73 75 6c 74  he timing result
1970: 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  s..*/.static voi
1980: 64 20 65 6e 64 54 69 6d 65 72 28 76 6f 69 64 29  d endTimer(void)
1990: 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69  {.  if( enableTi
19a0: 6d 65 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  mer ){.    sqlit
19b0: 65 33 5f 69 6e 74 36 34 20 69 45 6e 64 20 3d 20  e3_int64 iEnd = 
19c0: 74 69 6d 65 4f 66 44 61 79 28 29 3b 0a 20 20 20  timeOfDay();.   
19d0: 20 73 74 72 75 63 74 20 72 75 73 61 67 65 20 73   struct rusage s
19e0: 45 6e 64 3b 0a 20 20 20 20 67 65 74 72 75 73 61  End;.    getrusa
19f0: 67 65 28 52 55 53 41 47 45 5f 53 45 4c 46 2c 20  ge(RUSAGE_SELF, 
1a00: 26 73 45 6e 64 29 3b 0a 20 20 20 20 70 72 69 6e  &sEnd);.    prin
1a10: 74 66 28 22 52 75 6e 20 54 69 6d 65 3a 20 72 65  tf("Run Time: re
1a20: 61 6c 20 25 2e 33 66 20 75 73 65 72 20 25 66 20  al %.3f user %f 
1a30: 73 79 73 20 25 66 5c 6e 22 2c 0a 20 20 20 20 20  sys %f\n",.     
1a40: 20 20 28 69 45 6e 64 20 2d 20 69 42 65 67 69 6e    (iEnd - iBegin
1a50: 29 2a 30 2e 30 30 31 2c 0a 20 20 20 20 20 20 20  )*0.001,.       
1a60: 74 69 6d 65 44 69 66 66 28 26 73 42 65 67 69 6e  timeDiff(&sBegin
1a70: 2e 72 75 5f 75 74 69 6d 65 2c 20 26 73 45 6e 64  .ru_utime, &sEnd
1a80: 2e 72 75 5f 75 74 69 6d 65 29 2c 0a 20 20 20 20  .ru_utime),.    
1a90: 20 20 20 74 69 6d 65 44 69 66 66 28 26 73 42 65     timeDiff(&sBe
1aa0: 67 69 6e 2e 72 75 5f 73 74 69 6d 65 2c 20 26 73  gin.ru_stime, &s
1ab0: 45 6e 64 2e 72 75 5f 73 74 69 6d 65 29 29 3b 0a  End.ru_stime));.
1ac0: 20 20 7d 0a 7d 0a 0a 23 64 65 66 69 6e 65 20 42    }.}..#define B
1ad0: 45 47 49 4e 5f 54 49 4d 45 52 20 62 65 67 69 6e  EGIN_TIMER begin
1ae0: 54 69 6d 65 72 28 29 0a 23 64 65 66 69 6e 65 20  Timer().#define 
1af0: 45 4e 44 5f 54 49 4d 45 52 20 65 6e 64 54 69 6d  END_TIMER endTim
1b00: 65 72 28 29 0a 23 64 65 66 69 6e 65 20 48 41 53  er().#define HAS
1b10: 5f 54 49 4d 45 52 20 31 0a 0a 23 65 6c 69 66 20  _TIMER 1..#elif 
1b20: 28 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29  (defined(_WIN32)
1b30: 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33   || defined(WIN3
1b40: 32 29 29 0a 0a 2f 2a 20 53 61 76 65 64 20 72 65  2))../* Saved re
1b50: 73 6f 75 72 63 65 20 69 6e 66 6f 72 6d 61 74 69  source informati
1b60: 6f 6e 20 66 6f 72 20 74 68 65 20 62 65 67 69 6e  on for the begin
1b70: 6e 69 6e 67 20 6f 66 20 61 6e 20 6f 70 65 72 61  ning of an opera
1b80: 74 69 6f 6e 20 2a 2f 0a 73 74 61 74 69 63 20 48  tion */.static H
1b90: 41 4e 44 4c 45 20 68 50 72 6f 63 65 73 73 3b 0a  ANDLE hProcess;.
1ba0: 73 74 61 74 69 63 20 46 49 4c 45 54 49 4d 45 20  static FILETIME 
1bb0: 66 74 4b 65 72 6e 65 6c 42 65 67 69 6e 3b 0a 73  ftKernelBegin;.s
1bc0: 74 61 74 69 63 20 46 49 4c 45 54 49 4d 45 20 66  tatic FILETIME f
1bd0: 74 55 73 65 72 42 65 67 69 6e 3b 0a 73 74 61 74  tUserBegin;.stat
1be0: 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  ic sqlite3_int64
1bf0: 20 66 74 57 61 6c 6c 42 65 67 69 6e 3b 0a 74 79   ftWallBegin;.ty
1c00: 70 65 64 65 66 20 42 4f 4f 4c 20 28 57 49 4e 41  pedef BOOL (WINA
1c10: 50 49 20 2a 47 45 54 50 52 4f 43 54 49 4d 45 53  PI *GETPROCTIMES
1c20: 29 28 48 41 4e 44 4c 45 2c 20 4c 50 46 49 4c 45  )(HANDLE, LPFILE
1c30: 54 49 4d 45 2c 20 4c 50 46 49 4c 45 54 49 4d 45  TIME, LPFILETIME
1c40: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 20 20 20 20 20 4c 50 46 49 4c 45 54 49 4d 45        LPFILETIME
1c70: 2c 20 4c 50 46 49 4c 45 54 49 4d 45 29 3b 0a 73  , LPFILETIME);.s
1c80: 74 61 74 69 63 20 47 45 54 50 52 4f 43 54 49 4d  tatic GETPROCTIM
1c90: 45 53 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d  ES getProcessTim
1ca0: 65 73 41 64 64 72 20 3d 20 4e 55 4c 4c 3b 0a 0a  esAddr = NULL;..
1cb0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
1cc0: 65 65 20 69 66 20 77 65 20 68 61 76 65 20 74 69  ee if we have ti
1cd0: 6d 65 72 20 73 75 70 70 6f 72 74 2e 20 20 52 65  mer support.  Re
1ce0: 74 75 72 6e 20 31 20 69 66 20 6e 65 63 65 73 73  turn 1 if necess
1cf0: 61 72 79 0a 2a 2a 20 73 75 70 70 6f 72 74 20 66  ary.** support f
1d00: 6f 75 6e 64 20 28 6f 72 20 66 6f 75 6e 64 20 70  ound (or found p
1d10: 72 65 76 69 6f 75 73 6c 79 29 2e 0a 2a 2f 0a 73  reviously)..*/.s
1d20: 74 61 74 69 63 20 69 6e 74 20 68 61 73 54 69 6d  tatic int hasTim
1d30: 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20  er(void){.  if( 
1d40: 67 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41  getProcessTimesA
1d50: 64 64 72 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ddr ){.    retur
1d60: 6e 20 31 3b 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  n 1;.  } else {.
1d70: 20 20 20 20 2f 2a 20 47 65 74 50 72 6f 63 65 73      /* GetProces
1d80: 73 54 69 6d 65 73 28 29 20 69 73 6e 27 74 20 73  sTimes() isn't s
1d90: 75 70 70 6f 72 74 65 64 20 69 6e 20 57 49 4e 39  upported in WIN9
1da0: 35 20 61 6e 64 20 73 6f 6d 65 20 6f 74 68 65 72  5 and some other
1db0: 20 57 69 6e 64 6f 77 73 0a 20 20 20 20 2a 2a 20   Windows.    ** 
1dc0: 76 65 72 73 69 6f 6e 73 2e 20 53 65 65 20 69 66  versions. See if
1dd0: 20 74 68 65 20 76 65 72 73 69 6f 6e 20 77 65 20   the version we 
1de0: 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 68  are running on h
1df0: 61 73 20 69 74 2c 20 61 6e 64 20 69 66 20 69 74  as it, and if it
1e00: 0a 20 20 20 20 2a 2a 20 64 6f 65 73 2c 20 73 61  .    ** does, sa
1e10: 76 65 20 6f 66 66 20 61 20 70 6f 69 6e 74 65 72  ve off a pointer
1e20: 20 74 6f 20 69 74 20 61 6e 64 20 74 68 65 20 63   to it and the c
1e30: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 68  urrent process h
1e40: 61 6e 64 6c 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  andle..    */.  
1e50: 20 20 68 50 72 6f 63 65 73 73 20 3d 20 47 65 74    hProcess = Get
1e60: 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29  CurrentProcess()
1e70: 3b 0a 20 20 20 20 69 66 28 20 68 50 72 6f 63 65  ;.    if( hProce
1e80: 73 73 20 29 7b 0a 20 20 20 20 20 20 48 49 4e 53  ss ){.      HINS
1e90: 54 41 4e 43 45 20 68 69 6e 73 74 4c 69 62 20 3d  TANCE hinstLib =
1ea0: 20 4c 6f 61 64 4c 69 62 72 61 72 79 28 54 45 58   LoadLibrary(TEX
1eb0: 54 28 22 4b 65 72 6e 65 6c 33 32 2e 64 6c 6c 22  T("Kernel32.dll"
1ec0: 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 4e 55  ));.      if( NU
1ed0: 4c 4c 20 21 3d 20 68 69 6e 73 74 4c 69 62 20 29  LL != hinstLib )
1ee0: 7b 0a 20 20 20 20 20 20 20 20 67 65 74 50 72 6f  {.        getPro
1ef0: 63 65 73 73 54 69 6d 65 73 41 64 64 72 20 3d 0a  cessTimesAddr =.
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 28 47 45 54              (GET
1f10: 50 52 4f 43 54 49 4d 45 53 29 20 47 65 74 50 72  PROCTIMES) GetPr
1f20: 6f 63 41 64 64 72 65 73 73 28 68 69 6e 73 74 4c  ocAddress(hinstL
1f30: 69 62 2c 20 22 47 65 74 50 72 6f 63 65 73 73 54  ib, "GetProcessT
1f40: 69 6d 65 73 22 29 3b 0a 20 20 20 20 20 20 20 20  imes");.        
1f50: 69 66 28 20 4e 55 4c 4c 20 21 3d 20 67 65 74 50  if( NULL != getP
1f60: 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64 72 20  rocessTimesAddr 
1f70: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ){.          ret
1f80: 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  urn 1;.        }
1f90: 0a 20 20 20 20 20 20 20 20 46 72 65 65 4c 69 62  .        FreeLib
1fa0: 72 61 72 79 28 68 69 6e 73 74 4c 69 62 29 3b 0a  rary(hinstLib);.
1fb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1fc0: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
1fd0: 0a 2f 2a 0a 2a 2a 20 42 65 67 69 6e 20 74 69 6d  ./*.** Begin tim
1fe0: 69 6e 67 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e  ing an operation
1ff0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2000: 62 65 67 69 6e 54 69 6d 65 72 28 76 6f 69 64 29  beginTimer(void)
2010: 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69  {.  if( enableTi
2020: 6d 65 72 20 26 26 20 67 65 74 50 72 6f 63 65 73  mer && getProces
2030: 73 54 69 6d 65 73 41 64 64 72 20 29 7b 0a 20 20  sTimesAddr ){.  
2040: 20 20 46 49 4c 45 54 49 4d 45 20 66 74 43 72 65    FILETIME ftCre
2050: 61 74 69 6f 6e 2c 20 66 74 45 78 69 74 3b 0a 20  ation, ftExit;. 
2060: 20 20 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d     getProcessTim
2070: 65 73 41 64 64 72 28 68 50 72 6f 63 65 73 73 2c  esAddr(hProcess,
2080: 26 66 74 43 72 65 61 74 69 6f 6e 2c 26 66 74 45  &ftCreation,&ftE
2090: 78 69 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  xit,.           
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 66 74               &ft
20b0: 4b 65 72 6e 65 6c 42 65 67 69 6e 2c 26 66 74 55  KernelBegin,&ftU
20c0: 73 65 72 42 65 67 69 6e 29 3b 0a 20 20 20 20 66  serBegin);.    f
20d0: 74 57 61 6c 6c 42 65 67 69 6e 20 3d 20 74 69 6d  tWallBegin = tim
20e0: 65 4f 66 44 61 79 28 29 3b 0a 20 20 7d 0a 7d 0a  eOfDay();.  }.}.
20f0: 0a 2f 2a 20 52 65 74 75 72 6e 20 74 68 65 20 64  ./* Return the d
2100: 69 66 66 65 72 65 6e 63 65 20 6f 66 20 74 77 6f  ifference of two
2110: 20 46 49 4c 45 54 49 4d 45 20 73 74 72 75 63 74   FILETIME struct
2120: 73 20 69 6e 20 73 65 63 6f 6e 64 73 20 2a 2f 0a  s in seconds */.
2130: 73 74 61 74 69 63 20 64 6f 75 62 6c 65 20 74 69  static double ti
2140: 6d 65 44 69 66 66 28 46 49 4c 45 54 49 4d 45 20  meDiff(FILETIME 
2150: 2a 70 53 74 61 72 74 2c 20 46 49 4c 45 54 49 4d  *pStart, FILETIM
2160: 45 20 2a 70 45 6e 64 29 7b 0a 20 20 73 71 6c 69  E *pEnd){.  sqli
2170: 74 65 5f 69 6e 74 36 34 20 69 36 34 53 74 61 72  te_int64 i64Star
2180: 74 20 3d 20 2a 28 28 73 71 6c 69 74 65 5f 69 6e  t = *((sqlite_in
2190: 74 36 34 20 2a 29 20 70 53 74 61 72 74 29 3b 0a  t64 *) pStart);.
21a0: 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69    sqlite_int64 i
21b0: 36 34 45 6e 64 20 3d 20 2a 28 28 73 71 6c 69 74  64End = *((sqlit
21c0: 65 5f 69 6e 74 36 34 20 2a 29 20 70 45 6e 64 29  e_int64 *) pEnd)
21d0: 3b 0a 20 20 72 65 74 75 72 6e 20 28 64 6f 75 62  ;.  return (doub
21e0: 6c 65 29 20 28 28 69 36 34 45 6e 64 20 2d 20 69  le) ((i64End - i
21f0: 36 34 53 74 61 72 74 29 20 2f 20 31 30 30 30 30  64Start) / 10000
2200: 30 30 30 2e 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  000.0);.}../*.**
2210: 20 50 72 69 6e 74 20 74 68 65 20 74 69 6d 69 6e   Print the timin
2220: 67 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 73 74  g results..*/.st
2230: 61 74 69 63 20 76 6f 69 64 20 65 6e 64 54 69 6d  atic void endTim
2240: 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20  er(void){.  if( 
2250: 65 6e 61 62 6c 65 54 69 6d 65 72 20 26 26 20 67  enableTimer && g
2260: 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64  etProcessTimesAd
2270: 64 72 29 7b 0a 20 20 20 20 46 49 4c 45 54 49 4d  dr){.    FILETIM
2280: 45 20 66 74 43 72 65 61 74 69 6f 6e 2c 20 66 74  E ftCreation, ft
2290: 45 78 69 74 2c 20 66 74 4b 65 72 6e 65 6c 45 6e  Exit, ftKernelEn
22a0: 64 2c 20 66 74 55 73 65 72 45 6e 64 3b 0a 20 20  d, ftUserEnd;.  
22b0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
22c0: 66 74 57 61 6c 6c 45 6e 64 20 3d 20 74 69 6d 65  ftWallEnd = time
22d0: 4f 66 44 61 79 28 29 3b 0a 20 20 20 20 67 65 74  OfDay();.    get
22e0: 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64 72  ProcessTimesAddr
22f0: 28 68 50 72 6f 63 65 73 73 2c 26 66 74 43 72 65  (hProcess,&ftCre
2300: 61 74 69 6f 6e 2c 26 66 74 45 78 69 74 2c 26 66  ation,&ftExit,&f
2310: 74 4b 65 72 6e 65 6c 45 6e 64 2c 26 66 74 55 73  tKernelEnd,&ftUs
2320: 65 72 45 6e 64 29 3b 0a 20 20 20 20 70 72 69 6e  erEnd);.    prin
2330: 74 66 28 22 52 75 6e 20 54 69 6d 65 3a 20 72 65  tf("Run Time: re
2340: 61 6c 20 25 2e 33 66 20 75 73 65 72 20 25 66 20  al %.3f user %f 
2350: 73 79 73 20 25 66 5c 6e 22 2c 0a 20 20 20 20 20  sys %f\n",.     
2360: 20 20 28 66 74 57 61 6c 6c 45 6e 64 20 2d 20 66    (ftWallEnd - f
2370: 74 57 61 6c 6c 42 65 67 69 6e 29 2a 30 2e 30 30  tWallBegin)*0.00
2380: 31 2c 0a 20 20 20 20 20 20 20 74 69 6d 65 44 69  1,.       timeDi
2390: 66 66 28 26 66 74 55 73 65 72 42 65 67 69 6e 2c  ff(&ftUserBegin,
23a0: 20 26 66 74 55 73 65 72 45 6e 64 29 2c 0a 20 20   &ftUserEnd),.  
23b0: 20 20 20 20 20 74 69 6d 65 44 69 66 66 28 26 66       timeDiff(&f
23c0: 74 4b 65 72 6e 65 6c 42 65 67 69 6e 2c 20 26 66  tKernelBegin, &f
23d0: 74 4b 65 72 6e 65 6c 45 6e 64 29 29 3b 0a 20 20  tKernelEnd));.  
23e0: 7d 0a 7d 0a 0a 23 64 65 66 69 6e 65 20 42 45 47  }.}..#define BEG
23f0: 49 4e 5f 54 49 4d 45 52 20 62 65 67 69 6e 54 69  IN_TIMER beginTi
2400: 6d 65 72 28 29 0a 23 64 65 66 69 6e 65 20 45 4e  mer().#define EN
2410: 44 5f 54 49 4d 45 52 20 65 6e 64 54 69 6d 65 72  D_TIMER endTimer
2420: 28 29 0a 23 64 65 66 69 6e 65 20 48 41 53 5f 54  ().#define HAS_T
2430: 49 4d 45 52 20 68 61 73 54 69 6d 65 72 28 29 0a  IMER hasTimer().
2440: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 42  .#else.#define B
2450: 45 47 49 4e 5f 54 49 4d 45 52 0a 23 64 65 66 69  EGIN_TIMER.#defi
2460: 6e 65 20 45 4e 44 5f 54 49 4d 45 52 0a 23 64 65  ne END_TIMER.#de
2470: 66 69 6e 65 20 48 41 53 5f 54 49 4d 45 52 20 30  fine HAS_TIMER 0
2480: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
2490: 73 65 64 20 74 6f 20 70 72 65 76 65 6e 74 20 77  sed to prevent w
24a0: 61 72 6e 69 6e 67 73 20 61 62 6f 75 74 20 75 6e  arnings about un
24b0: 75 73 65 64 20 70 61 72 61 6d 65 74 65 72 73 0a  used parameters.
24c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
24d0: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
24e0: 76 6f 69 64 29 28 78 29 0a 0a 2f 2a 0a 2a 2a 20  void)(x)../*.** 
24f0: 49 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  If the following
2500: 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
2510: 65 6e 20 63 6f 6d 6d 61 6e 64 20 65 78 65 63 75  en command execu
2520: 74 69 6f 6e 20 73 74 6f 70 73 0a 2a 2a 20 61 74  tion stops.** at
2530: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 77 65 20   an error if we 
2540: 61 72 65 20 6e 6f 74 20 69 6e 74 65 72 61 63 74  are not interact
2550: 69 76 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ive..*/.static i
2560: 6e 74 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72  nt bail_on_error
2570: 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 72   = 0;../*.** Thr
2580: 65 61 74 20 73 74 64 69 6e 20 61 73 20 61 6e 20  eat stdin as an 
2590: 69 6e 74 65 72 61 63 74 69 76 65 20 69 6e 70 75  interactive inpu
25a0: 74 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  t if the followi
25b0: 6e 67 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 69  ng variable.** i
25c0: 73 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77 69  s true.  Otherwi
25d0: 73 65 2c 20 61 73 73 75 6d 65 20 73 74 64 69 6e  se, assume stdin
25e0: 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f   is connected to
25f0: 20 61 20 66 69 6c 65 20 6f 72 20 70 69 70 65 2e   a file or pipe.
2600: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
2610: 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74  tdin_is_interact
2620: 69 76 65 20 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20  ive = 1;../*.** 
2630: 4f 6e 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65  On Windows syste
2640: 6d 73 20 77 65 20 68 61 76 65 20 74 6f 20 6b 6e  ms we have to kn
2650: 6f 77 20 69 66 20 73 74 61 6e 64 61 72 64 20 6f  ow if standard o
2660: 75 74 70 75 74 20 69 73 20 61 20 63 6f 6e 73 6f  utput is a conso
2670: 6c 65 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74  le.** in order t
2680: 6f 20 74 72 61 6e 73 6c 61 74 65 20 55 54 46 2d  o translate UTF-
2690: 38 20 69 6e 74 6f 20 4d 42 43 53 2e 20 20 54 68  8 into MBCS.  Th
26a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69  e following vari
26b0: 61 62 6c 65 20 69 73 0a 2a 2a 20 74 72 75 65 20  able is.** true 
26c0: 69 66 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 69  if translation i
26d0: 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73  s required..*/.s
26e0: 74 61 74 69 63 20 69 6e 74 20 73 74 64 6f 75 74  tatic int stdout
26f0: 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20 3d 20 31 3b  _is_console = 1;
2700: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
2710: 6f 77 69 6e 67 20 69 73 20 74 68 65 20 6f 70 65  owing is the ope
2720: 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  n SQLite databas
2730: 65 2e 20 20 57 65 20 6d 61 6b 65 20 61 20 70 6f  e.  We make a po
2740: 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68 69 73  inter.** to this
2750: 20 64 61 74 61 62 61 73 65 20 61 20 73 74 61 74   database a stat
2760: 69 63 20 76 61 72 69 61 62 6c 65 20 73 6f 20 74  ic variable so t
2770: 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 61 63  hat it can be ac
2780: 63 65 73 73 65 64 0a 2a 2a 20 62 79 20 74 68 65  cessed.** by the
2790: 20 53 49 47 49 4e 54 20 68 61 6e 64 6c 65 72 20   SIGINT handler 
27a0: 74 6f 20 69 6e 74 65 72 72 75 70 74 20 64 61 74  to interrupt dat
27b0: 61 62 61 73 65 20 70 72 6f 63 65 73 73 69 6e 67  abase processing
27c0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69  ..*/.static sqli
27d0: 74 65 33 20 2a 67 6c 6f 62 61 6c 44 62 20 3d 20  te3 *globalDb = 
27e0: 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 72 75 65 20 69  0;../*.** True i
27f0: 66 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 28  f an interrupt (
2800: 43 6f 6e 74 72 6f 6c 2d 43 29 20 68 61 73 20 62  Control-C) has b
2810: 65 65 6e 20 72 65 63 65 69 76 65 64 2e 0a 2a 2f  een received..*/
2820: 0a 73 74 61 74 69 63 20 76 6f 6c 61 74 69 6c 65  .static volatile
2830: 20 69 6e 74 20 73 65 65 6e 49 6e 74 65 72 72 75   int seenInterru
2840: 70 74 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54  pt = 0;../*.** T
2850: 68 69 73 20 69 73 20 74 68 65 20 6e 61 6d 65 20  his is the name 
2860: 6f 66 20 6f 75 72 20 70 72 6f 67 72 61 6d 2e 20  of our program. 
2870: 49 74 20 69 73 20 73 65 74 20 69 6e 20 6d 61 69  It is set in mai
2880: 6e 28 29 2c 20 75 73 65 64 0a 2a 2a 20 69 6e 20  n(), used.** in 
2890: 61 20 6e 75 6d 62 65 72 20 6f 66 20 6f 74 68 65  a number of othe
28a0: 72 20 70 6c 61 63 65 73 2c 20 6d 6f 73 74 6c 79  r places, mostly
28b0: 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
28c0: 67 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ges..*/.static c
28d0: 68 61 72 20 2a 41 72 67 76 30 3b 0a 0a 2f 2a 0a  har *Argv0;../*.
28e0: 2a 2a 20 50 72 6f 6d 70 74 20 73 74 72 69 6e 67  ** Prompt string
28f0: 73 2e 20 49 6e 69 74 69 61 6c 69 7a 65 64 20 69  s. Initialized i
2900: 6e 20 6d 61 69 6e 2e 20 53 65 74 74 61 62 6c 65  n main. Settable
2910: 20 77 69 74 68 0a 2a 2a 20 20 20 2e 70 72 6f 6d   with.**   .prom
2920: 70 74 20 6d 61 69 6e 20 63 6f 6e 74 69 6e 75 65  pt main continue
2930: 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  .*/.static char 
2940: 6d 61 69 6e 50 72 6f 6d 70 74 5b 32 30 5d 3b 20  mainPrompt[20]; 
2950: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 6c 69 6e      /* First lin
2960: 65 20 70 72 6f 6d 70 74 2e 20 64 65 66 61 75 6c  e prompt. defaul
2970: 74 3a 20 22 73 71 6c 69 74 65 3e 20 22 2a 2f 0a  t: "sqlite> "*/.
2980: 73 74 61 74 69 63 20 63 68 61 72 20 63 6f 6e 74  static char cont
2990: 69 6e 75 65 50 72 6f 6d 70 74 5b 32 30 5d 3b 20  inuePrompt[20]; 
29a0: 2f 2a 20 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 20  /* Continuation 
29b0: 70 72 6f 6d 70 74 2e 20 64 65 66 61 75 6c 74 3a  prompt. default:
29c0: 20 22 20 20 20 2e 2e 2e 3e 20 22 20 2a 2f 0a 0a   "   ...> " */..
29d0: 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72 20 6f 75 74  /*.** Render out
29e0: 70 75 74 20 6c 69 6b 65 20 66 70 72 69 6e 74 66  put like fprintf
29f0: 28 29 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20  ().  Except, if 
2a00: 74 68 65 20 6f 75 74 70 75 74 20 69 73 20 67 6f  the output is go
2a10: 69 6e 67 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  ing to the.** co
2a20: 6e 73 6f 6c 65 20 61 6e 64 20 69 66 20 74 68 69  nsole and if thi
2a30: 73 20 69 73 20 72 75 6e 6e 69 6e 67 20 6f 6e 20  s is running on 
2a40: 61 20 57 69 6e 64 6f 77 73 20 6d 61 63 68 69 6e  a Windows machin
2a50: 65 2c 20 74 72 61 6e 73 6c 61 74 65 20 74 68 65  e, translate the
2a60: 0a 2a 2a 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  .** output from 
2a70: 55 54 46 2d 38 20 69 6e 74 6f 20 4d 42 43 53 2e  UTF-8 into MBCS.
2a80: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2a90: 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e  _WIN32) || defin
2aa0: 65 64 28 57 49 4e 33 32 29 0a 76 6f 69 64 20 75  ed(WIN32).void u
2ab0: 74 66 38 5f 70 72 69 6e 74 66 28 46 49 4c 45 20  tf8_printf(FILE 
2ac0: 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  *out, const char
2ad0: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
2ae0: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20  .  va_list ap;. 
2af0: 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46   va_start(ap, zF
2b00: 6f 72 6d 61 74 29 3b 0a 20 20 69 66 28 20 73 74  ormat);.  if( st
2b10: 64 6f 75 74 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20  dout_is_console 
2b20: 26 26 20 28 6f 75 74 3d 3d 73 74 64 6f 75 74 20  && (out==stdout 
2b30: 7c 7c 20 6f 75 74 3d 3d 73 74 64 65 72 72 29 20  || out==stderr) 
2b40: 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 31 20  ){.    char *z1 
2b50: 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e  = sqlite3_vmprin
2b60: 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  tf(zFormat, ap);
2b70: 0a 20 20 20 20 63 68 61 72 20 2a 7a 32 20 3d 20  .    char *z2 = 
2b80: 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74  sqlite3_win32_ut
2b90: 66 38 5f 74 6f 5f 6d 62 63 73 5f 76 32 28 7a 31  f8_to_mbcs_v2(z1
2ba0: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
2bb0: 33 5f 66 72 65 65 28 7a 31 29 3b 0a 20 20 20 20  3_free(z1);.    
2bc0: 66 70 75 74 73 28 7a 32 2c 20 6f 75 74 29 3b 0a  fputs(z2, out);.
2bd0: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2be0: 28 7a 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (z2);.  }else{. 
2bf0: 20 20 20 76 66 70 72 69 6e 74 66 28 6f 75 74 2c     vfprintf(out,
2c00: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20   zFormat, ap);. 
2c10: 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b   }.  va_end(ap);
2c20: 0a 7d 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  .}.#elif !define
2c30: 64 28 75 74 66 38 5f 70 72 69 6e 74 66 29 0a 23  d(utf8_printf).#
2c40: 20 64 65 66 69 6e 65 20 75 74 66 38 5f 70 72 69   define utf8_pri
2c50: 6e 74 66 20 66 70 72 69 6e 74 66 0a 23 65 6e 64  ntf fprintf.#end
2c60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72  if../*.** Render
2c70: 20 6f 75 74 70 75 74 20 6c 69 6b 65 20 66 70 72   output like fpr
2c80: 69 6e 74 66 28 29 2e 20 20 54 68 69 73 20 73 68  intf().  This sh
2c90: 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64  ould not be used
2ca0: 20 6f 6e 20 61 6e 79 74 68 69 6e 67 20 74 68 61   on anything tha
2cb0: 74 0a 2a 2a 20 69 6e 63 6c 75 64 65 73 20 73 74  t.** includes st
2cc0: 72 69 6e 67 20 66 6f 72 6d 61 74 74 69 6e 67 20  ring formatting 
2cd0: 28 65 2e 67 2e 20 22 25 73 22 29 2e 0a 2a 2f 0a  (e.g. "%s")..*/.
2ce0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 72 61 77  #if !defined(raw
2cf0: 5f 70 72 69 6e 74 66 29 0a 23 20 64 65 66 69 6e  _printf).# defin
2d00: 65 20 72 61 77 5f 70 72 69 6e 74 66 20 66 70 72  e raw_printf fpr
2d10: 69 6e 74 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  intf.#endif../*.
2d20: 2a 2a 20 57 72 69 74 65 20 49 2f 4f 20 74 72 61  ** Write I/O tra
2d30: 63 65 73 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ces to the follo
2d40: 77 69 6e 67 20 73 74 72 65 61 6d 2e 0a 2a 2f 0a  wing stream..*/.
2d50: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2d60: 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 73 74 61  ABLE_IOTRACE.sta
2d70: 74 69 63 20 46 49 4c 45 20 2a 69 6f 74 72 61 63  tic FILE *iotrac
2d80: 65 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  e = 0;.#endif../
2d90: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
2da0: 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 70 72 69  e works like pri
2db0: 6e 74 66 20 69 6e 20 74 68 61 74 20 69 74 73 20  ntf in that its 
2dc0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
2dd0: 73 20 61 0a 2a 2a 20 66 6f 72 6d 61 74 20 73 74  s a.** format st
2de0: 72 69 6e 67 20 61 6e 64 20 73 75 62 73 65 71 75  ring and subsequ
2df0: 65 6e 74 20 61 72 67 75 6d 65 6e 74 73 20 61 72  ent arguments ar
2e00: 65 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 73  e values to be s
2e10: 75 62 73 74 69 74 75 74 65 64 0a 2a 2a 20 69 6e  ubstituted.** in
2e20: 20 70 6c 61 63 65 20 6f 66 20 25 20 66 69 65 6c   place of % fiel
2e30: 64 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  ds.  The result 
2e40: 6f 66 20 66 6f 72 6d 61 74 74 69 6e 67 20 74 68  of formatting th
2e50: 69 73 20 73 74 72 69 6e 67 0a 2a 2a 20 69 73 20  is string.** is 
2e60: 77 72 69 74 74 65 6e 20 74 6f 20 69 6f 74 72 61  written to iotra
2e70: 63 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ce..*/.#ifdef SQ
2e80: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
2e90: 41 43 45 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ACE.static void 
2ea0: 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 69 6f 74  SQLITE_CDECL iot
2eb0: 72 61 63 65 50 72 69 6e 74 66 28 63 6f 6e 73 74  racePrintf(const
2ec0: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
2ed0: 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20  ...){.  va_list 
2ee0: 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  ap;.  char *z;. 
2ef0: 20 69 66 28 20 69 6f 74 72 61 63 65 3d 3d 30 20   if( iotrace==0 
2f00: 29 20 72 65 74 75 72 6e 3b 0a 20 20 76 61 5f 73  ) return;.  va_s
2f10: 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74  tart(ap, zFormat
2f20: 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
2f30: 5f 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61  _vmprintf(zForma
2f40: 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64  t, ap);.  va_end
2f50: 28 61 70 29 3b 0a 20 20 75 74 66 38 5f 70 72 69  (ap);.  utf8_pri
2f60: 6e 74 66 28 69 6f 74 72 61 63 65 2c 20 22 25 73  ntf(iotrace, "%s
2f70: 22 2c 20 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33  ", z);.  sqlite3
2f80: 5f 66 72 65 65 28 7a 29 3b 0a 7d 0a 23 65 6e 64  _free(z);.}.#end
2f90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74  if../*.** Output
2fa0: 20 73 74 72 69 6e 67 20 7a 55 74 66 20 74 6f 20   string zUtf to 
2fb0: 73 74 72 65 61 6d 20 70 4f 75 74 20 61 73 20 77  stream pOut as w
2fc0: 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 49 66   characters.  If
2fd0: 20 77 20 69 73 20 6e 65 67 61 74 69 76 65 2c 0a   w is negative,.
2fe0: 2a 2a 20 74 68 65 6e 20 72 69 67 68 74 2d 6a 75  ** then right-ju
2ff0: 73 74 69 66 79 20 74 68 65 20 74 65 78 74 2e 20  stify the text. 
3000: 20 57 20 69 73 20 74 68 65 20 77 69 64 74 68 20   W is the width 
3010: 69 6e 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  in UTF-8 charact
3020: 65 72 73 2c 20 6e 6f 74 0a 2a 2a 20 69 6e 20 62  ers, not.** in b
3030: 79 74 65 73 2e 20 20 54 68 69 73 20 69 73 20 64  ytes.  This is d
3040: 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68  ifferent from th
3050: 65 20 25 2a 2e 2a 73 20 73 70 65 63 69 66 69 63  e %*.*s specific
3060: 61 74 69 6f 6e 20 69 6e 20 70 72 69 6e 74 66 0a  ation in printf.
3070: 2a 2a 20 73 69 6e 63 65 20 77 69 74 68 20 25 2a  ** since with %*
3080: 2e 2a 73 20 74 68 65 20 77 69 64 74 68 20 69 73  .*s the width is
3090: 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79 74   measured in byt
30a0: 65 73 2c 20 6e 6f 74 20 63 68 61 72 61 63 74 65  es, not characte
30b0: 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  rs..*/.static vo
30c0: 69 64 20 75 74 66 38 5f 77 69 64 74 68 5f 70 72  id utf8_width_pr
30d0: 69 6e 74 28 46 49 4c 45 20 2a 70 4f 75 74 2c 20  int(FILE *pOut, 
30e0: 69 6e 74 20 77 2c 20 63 6f 6e 73 74 20 63 68 61  int w, const cha
30f0: 72 20 2a 7a 55 74 66 29 7b 0a 20 20 69 6e 74 20  r *zUtf){.  int 
3100: 69 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e  i;.  int n;.  in
3110: 74 20 61 77 20 3d 20 77 3c 30 20 3f 20 2d 77 20  t aw = w<0 ? -w 
3120: 3a 20 77 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  : w;.  char zBuf
3130: 5b 31 30 30 30 5d 3b 0a 20 20 69 66 28 20 61 77  [1000];.  if( aw
3140: 3e 28 69 6e 74 29 73 69 7a 65 6f 66 28 7a 42 75  >(int)sizeof(zBu
3150: 66 29 2f 33 20 29 20 61 77 20 3d 20 28 69 6e 74  f)/3 ) aw = (int
3160: 29 73 69 7a 65 6f 66 28 7a 42 75 66 29 2f 33 3b  )sizeof(zBuf)/3;
3170: 0a 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 7a 55  .  for(i=n=0; zU
3180: 74 66 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20  tf[i]; i++){.   
3190: 20 69 66 28 20 28 7a 55 74 66 5b 69 5d 26 30 78   if( (zUtf[i]&0x
31a0: 63 30 29 21 3d 30 78 38 30 20 29 7b 0a 20 20 20  c0)!=0x80 ){.   
31b0: 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 69 66     n++;.      if
31c0: 28 20 6e 3d 3d 61 77 20 29 7b 0a 20 20 20 20 20  ( n==aw ){.     
31d0: 20 20 20 64 6f 7b 20 69 2b 2b 3b 20 7d 77 68 69     do{ i++; }whi
31e0: 6c 65 28 20 28 7a 55 74 66 5b 69 5d 26 30 78 63  le( (zUtf[i]&0xc
31f0: 30 29 3d 3d 30 78 38 30 20 29 3b 0a 20 20 20 20  0)==0x80 );.    
3200: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
3210: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69   }.    }.  }.  i
3220: 66 28 20 6e 3e 3d 61 77 20 29 7b 0a 20 20 20 20  f( n>=aw ){.    
3230: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 4f 75 74  utf8_printf(pOut
3240: 2c 20 22 25 2e 2a 73 22 2c 20 69 2c 20 7a 55 74  , "%.*s", i, zUt
3250: 66 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  f);.  }else if( 
3260: 77 3c 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  w<0 ){.    utf8_
3270: 70 72 69 6e 74 66 28 70 4f 75 74 2c 20 22 25 2a  printf(pOut, "%*
3280: 73 25 73 22 2c 20 61 77 2d 6e 2c 20 22 22 2c 20  s%s", aw-n, "", 
3290: 7a 55 74 66 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  zUtf);.  }else{.
32a0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
32b0: 70 4f 75 74 2c 20 22 25 73 25 2a 73 22 2c 20 7a  pOut, "%s%*s", z
32c0: 55 74 66 2c 20 61 77 2d 6e 2c 20 22 22 29 3b 0a  Utf, aw-n, "");.
32d0: 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 44 65    }.}.../*.** De
32e0: 74 65 72 6d 69 6e 65 73 20 69 66 20 61 20 73 74  termines if a st
32f0: 72 69 6e 67 20 69 73 20 61 20 6e 75 6d 62 65 72  ring is a number
3300: 20 6f 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61 74   of not..*/.stat
3310: 69 63 20 69 6e 74 20 69 73 4e 75 6d 62 65 72 28  ic int isNumber(
3320: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
3330: 6e 74 20 2a 72 65 61 6c 6e 75 6d 29 7b 0a 20 20  nt *realnum){.  
3340: 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 7c 7c 20 2a  if( *z=='-' || *
3350: 7a 3d 3d 27 2b 27 20 29 20 7a 2b 2b 3b 0a 20 20  z=='+' ) z++;.  
3360: 69 66 28 20 21 49 73 44 69 67 69 74 28 2a 7a 29  if( !IsDigit(*z)
3370: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
3380: 3b 0a 20 20 7d 0a 20 20 7a 2b 2b 3b 0a 20 20 69  ;.  }.  z++;.  i
3390: 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65  f( realnum ) *re
33a0: 61 6c 6e 75 6d 20 3d 20 30 3b 0a 20 20 77 68 69  alnum = 0;.  whi
33b0: 6c 65 28 20 49 73 44 69 67 69 74 28 2a 7a 29 20  le( IsDigit(*z) 
33c0: 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 69 66 28 20  ){ z++; }.  if( 
33d0: 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 7a  *z=='.' ){.    z
33e0: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 21 49 73 44  ++;.    if( !IsD
33f0: 69 67 69 74 28 2a 7a 29 20 29 20 72 65 74 75 72  igit(*z) ) retur
3400: 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  n 0;.    while( 
3410: 49 73 44 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a  IsDigit(*z) ){ z
3420: 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20 72 65  ++; }.    if( re
3430: 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d  alnum ) *realnum
3440: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 1;.  }.  if( 
3450: 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27  *z=='e' || *z=='
3460: 45 27 20 29 7b 0a 20 20 20 20 7a 2b 2b 3b 0a 20  E' ){.    z++;. 
3470: 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 7c     if( *z=='+' |
3480: 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  | *z=='-' ) z++;
3490: 0a 20 20 20 20 69 66 28 20 21 49 73 44 69 67 69  .    if( !IsDigi
34a0: 74 28 2a 7a 29 20 29 20 72 65 74 75 72 6e 20 30  t(*z) ) return 0
34b0: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 49 73 44  ;.    while( IsD
34c0: 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a 2b 2b 3b  igit(*z) ){ z++;
34d0: 20 7d 0a 20 20 20 20 69 66 28 20 72 65 61 6c 6e   }.    if( realn
34e0: 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20  um ) *realnum = 
34f0: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  1;.  }.  return 
3500: 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  *z==0;.}../*.** 
3510: 43 6f 6d 70 75 74 65 20 61 20 73 74 72 69 6e 67  Compute a string
3520: 20 6c 65 6e 67 74 68 20 74 68 61 74 20 69 73 20   length that is 
3530: 6c 69 6d 69 74 65 64 20 74 6f 20 77 68 61 74 20  limited to what 
3540: 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e  can be stored in
3550: 0a 2a 2a 20 6c 6f 77 65 72 20 33 30 20 62 69 74  .** lower 30 bit
3560: 73 20 6f 66 20 61 20 33 32 2d 62 69 74 20 73 69  s of a 32-bit si
3570: 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  gned integer..*/
3580: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 74 72 6c  .static int strl
3590: 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 20  en30(const char 
35a0: 2a 7a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *z){.  const cha
35b0: 72 20 2a 7a 32 20 3d 20 7a 3b 0a 20 20 77 68 69  r *z2 = z;.  whi
35c0: 6c 65 28 20 2a 7a 32 20 29 7b 20 7a 32 2b 2b 3b  le( *z2 ){ z2++;
35d0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 78 33 66   }.  return 0x3f
35e0: 66 66 66 66 66 66 20 26 20 28 69 6e 74 29 28 7a  ffffff & (int)(z
35f0: 32 20 2d 20 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  2 - z);.}../*.**
3600: 20 52 65 74 75 72 6e 20 74 68 65 20 6c 65 6e 67   Return the leng
3610: 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 20 69  th of a string i
3620: 6e 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 4d  n characters.  M
3630: 75 6c 74 69 62 79 74 65 20 55 54 46 38 20 63 68  ultibyte UTF8 ch
3640: 61 72 61 63 74 65 72 73 0a 2a 2a 20 63 6f 75 6e  aracters.** coun
3650: 74 20 61 73 20 61 20 73 69 6e 67 6c 65 20 63 68  t as a single ch
3660: 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 73 74 61 74  aracter..*/.stat
3670: 69 63 20 69 6e 74 20 73 74 72 6c 65 6e 43 68 61  ic int strlenCha
3680: 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  r(const char *z)
3690: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  {.  int n = 0;. 
36a0: 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20   while( *z ){.  
36b0: 20 20 69 66 28 20 28 30 78 63 30 26 2a 28 7a 2b    if( (0xc0&*(z+
36c0: 2b 29 29 21 3d 30 78 38 30 20 29 20 6e 2b 2b 3b  +))!=0x80 ) n++;
36d0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 3b  .  }.  return n;
36e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  .}../*.** This r
36f0: 6f 75 74 69 6e 65 20 72 65 61 64 73 20 61 20 6c  outine reads a l
3700: 69 6e 65 20 6f 66 20 74 65 78 74 20 66 72 6f 6d  ine of text from
3710: 20 46 49 4c 45 20 69 6e 2c 20 73 74 6f 72 65 73   FILE in, stores
3720: 0a 2a 2a 20 74 68 65 20 74 65 78 74 20 69 6e 20  .** the text in 
3730: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
3740: 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 61 6e  from malloc() an
3750: 64 20 72 65 74 75 72 6e 73 20 61 20 70 6f 69 6e  d returns a poin
3760: 74 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 65  ter.** to the te
3770: 78 74 2e 20 20 4e 55 4c 4c 20 69 73 20 72 65 74  xt.  NULL is ret
3780: 75 72 6e 65 64 20 61 74 20 65 6e 64 20 6f 66 20  urned at end of 
3790: 66 69 6c 65 2c 20 6f 72 20 69 66 20 6d 61 6c 6c  file, or if mall
37a0: 6f 63 28 29 0a 2a 2a 20 66 61 69 6c 73 2e 0a 2a  oc().** fails..*
37b0: 2a 0a 2a 2a 20 49 66 20 7a 4c 69 6e 65 20 69 73  *.** If zLine is
37c0: 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69   not NULL then i
37d0: 74 20 69 73 20 61 20 6d 61 6c 6c 6f 63 65 64 20  t is a malloced 
37e0: 62 75 66 66 65 72 20 72 65 74 75 72 6e 65 64 20  buffer returned 
37f0: 66 72 6f 6d 0a 2a 2a 20 61 20 70 72 65 76 69 6f  from.** a previo
3800: 75 73 20 63 61 6c 6c 20 74 6f 20 74 68 69 73 20  us call to this 
3810: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 6d 61 79  routine that may
3820: 20 62 65 20 72 65 75 73 65 64 2e 0a 2a 2f 0a 73   be reused..*/.s
3830: 74 61 74 69 63 20 63 68 61 72 20 2a 6c 6f 63 61  tatic char *loca
3840: 6c 5f 67 65 74 6c 69 6e 65 28 63 68 61 72 20 2a  l_getline(char *
3850: 7a 4c 69 6e 65 2c 20 46 49 4c 45 20 2a 69 6e 29  zLine, FILE *in)
3860: 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 20 3d 20  {.  int nLine = 
3870: 7a 4c 69 6e 65 3d 3d 30 20 3f 20 30 20 3a 20 31  zLine==0 ? 0 : 1
3880: 30 30 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b  00;.  int n = 0;
3890: 0a 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a  ..  while( 1 ){.
38a0: 20 20 20 20 69 66 28 20 6e 2b 31 30 30 3e 6e 4c      if( n+100>nL
38b0: 69 6e 65 20 29 7b 0a 20 20 20 20 20 20 6e 4c 69  ine ){.      nLi
38c0: 6e 65 20 3d 20 6e 4c 69 6e 65 2a 32 20 2b 20 31  ne = nLine*2 + 1
38d0: 30 30 3b 0a 20 20 20 20 20 20 7a 4c 69 6e 65 20  00;.      zLine 
38e0: 3d 20 72 65 61 6c 6c 6f 63 28 7a 4c 69 6e 65 2c  = realloc(zLine,
38f0: 20 6e 4c 69 6e 65 29 3b 0a 20 20 20 20 20 20 69   nLine);.      i
3900: 66 28 20 7a 4c 69 6e 65 3d 3d 30 20 29 20 72 65  f( zLine==0 ) re
3910: 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20  turn 0;.    }.  
3920: 20 20 69 66 28 20 66 67 65 74 73 28 26 7a 4c 69    if( fgets(&zLi
3930: 6e 65 5b 6e 5d 2c 20 6e 4c 69 6e 65 20 2d 20 6e  ne[n], nLine - n
3940: 2c 20 69 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  , in)==0 ){.    
3950: 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20    if( n==0 ){.  
3960: 20 20 20 20 20 20 66 72 65 65 28 7a 4c 69 6e 65        free(zLine
3970: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
3980: 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 0;.      }.   
3990: 20 20 20 7a 4c 69 6e 65 5b 6e 5d 20 3d 20 30 3b     zLine[n] = 0;
39a0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
39b0: 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 7a    }.    while( z
39c0: 4c 69 6e 65 5b 6e 5d 20 29 20 6e 2b 2b 3b 0a 20  Line[n] ) n++;. 
39d0: 20 20 20 69 66 28 20 6e 3e 30 20 26 26 20 7a 4c     if( n>0 && zL
39e0: 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 6e 27 20 29  ine[n-1]=='\n' )
39f0: 7b 0a 20 20 20 20 20 20 6e 2d 2d 3b 0a 20 20 20  {.      n--;.   
3a00: 20 20 20 69 66 28 20 6e 3e 30 20 26 26 20 7a 4c     if( n>0 && zL
3a10: 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 72 27 20 29  ine[n-1]=='\r' )
3a20: 20 6e 2d 2d 3b 0a 20 20 20 20 20 20 7a 4c 69 6e   n--;.      zLin
3a30: 65 5b 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  e[n] = 0;.      
3a40: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
3a50: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49  .#if defined(_WI
3a60: 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  N32) || defined(
3a70: 57 49 4e 33 32 29 0a 20 20 2f 2a 20 46 6f 72 20  WIN32).  /* For 
3a80: 69 6e 74 65 72 61 63 74 69 76 65 20 69 6e 70 75  interactive inpu
3a90: 74 20 6f 6e 20 57 69 6e 64 6f 77 73 20 73 79 73  t on Windows sys
3aa0: 74 65 6d 73 2c 20 74 72 61 6e 73 6c 61 74 65 20  tems, translate 
3ab0: 74 68 65 0a 20 20 2a 2a 20 6d 75 6c 74 69 2d 62  the.  ** multi-b
3ac0: 79 74 65 20 63 68 61 72 61 63 74 65 72 73 65 74  yte characterset
3ad0: 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 74 6f   characters into
3ae0: 20 55 54 46 2d 38 2e 20 2a 2f 0a 20 20 69 66 28   UTF-8. */.  if(
3af0: 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61   stdin_is_intera
3b00: 63 74 69 76 65 20 26 26 20 69 6e 3d 3d 73 74 64  ctive && in==std
3b10: 69 6e 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a  in ){.    char *
3b20: 7a 54 72 61 6e 73 20 3d 20 73 71 6c 69 74 65 33  zTrans = sqlite3
3b30: 5f 77 69 6e 33 32 5f 6d 62 63 73 5f 74 6f 5f 75  _win32_mbcs_to_u
3b40: 74 66 38 5f 76 32 28 7a 4c 69 6e 65 2c 20 30 29  tf8_v2(zLine, 0)
3b50: 3b 0a 20 20 20 20 69 66 28 20 7a 54 72 61 6e 73  ;.    if( zTrans
3b60: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 54   ){.      int nT
3b70: 72 61 6e 73 20 3d 20 73 74 72 6c 65 6e 33 30 28  rans = strlen30(
3b80: 7a 54 72 61 6e 73 29 2b 31 3b 0a 20 20 20 20 20  zTrans)+1;.     
3b90: 20 69 66 28 20 6e 54 72 61 6e 73 3e 6e 4c 69 6e   if( nTrans>nLin
3ba0: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69  e ){.        zLi
3bb0: 6e 65 20 3d 20 72 65 61 6c 6c 6f 63 28 7a 4c 69  ne = realloc(zLi
3bc0: 6e 65 2c 20 6e 54 72 61 6e 73 29 3b 0a 20 20 20  ne, nTrans);.   
3bd0: 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 3d 3d       if( zLine==
3be0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
3bf0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 54 72 61  qlite3_free(zTra
3c00: 6e 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  ns);.          r
3c10: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20  eturn 0;.       
3c20: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
3c30: 20 6d 65 6d 63 70 79 28 7a 4c 69 6e 65 2c 20 7a   memcpy(zLine, z
3c40: 54 72 61 6e 73 2c 20 6e 54 72 61 6e 73 29 3b 0a  Trans, nTrans);.
3c50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
3c60: 65 65 28 7a 54 72 61 6e 73 29 3b 0a 20 20 20 20  ee(zTrans);.    
3c70: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
3c80: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
3c90: 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
3ca0: 29 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 7a 4c  ) */.  return zL
3cb0: 69 6e 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  ine;.}../*.** Re
3cc0: 74 72 69 65 76 65 20 61 20 73 69 6e 67 6c 65 20  trieve a single 
3cd0: 6c 69 6e 65 20 6f 66 20 69 6e 70 75 74 20 74 65  line of input te
3ce0: 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 69 6e 3d  xt..**.** If in=
3cf0: 3d 30 20 74 68 65 6e 20 72 65 61 64 20 66 72 6f  =0 then read fro
3d00: 6d 20 73 74 61 6e 64 61 72 64 20 69 6e 70 75 74  m standard input
3d10: 20 61 6e 64 20 70 72 6f 6d 70 74 20 62 65 66 6f   and prompt befo
3d20: 72 65 20 65 61 63 68 20 6c 69 6e 65 2e 0a 2a 2a  re each line..**
3d30: 20 49 66 20 69 73 43 6f 6e 74 69 6e 75 61 74 69   If isContinuati
3d40: 6f 6e 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  on is true, then
3d50: 20 61 20 63 6f 6e 74 69 6e 75 61 74 69 6f 6e 20   a continuation 
3d60: 70 72 6f 6d 70 74 20 69 73 20 61 70 70 72 6f 70  prompt is approp
3d70: 72 69 61 74 65 2e 0a 2a 2a 20 49 66 20 69 73 43  riate..** If isC
3d80: 6f 6e 74 69 6e 75 61 74 69 6f 6e 20 69 73 20 7a  ontinuation is z
3d90: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6d 61  ero, then the ma
3da0: 69 6e 20 70 72 6f 6d 70 74 20 73 68 6f 75 6c 64  in prompt should
3db0: 20 62 65 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20   be used..**.** 
3dc0: 49 66 20 7a 50 72 69 6f 72 20 69 73 20 6e 6f 74  If zPrior is not
3dd0: 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 69 73   NULL then it is
3de0: 20 61 20 62 75 66 66 65 72 20 66 72 6f 6d 20 61   a buffer from a
3df0: 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 74   prior call to t
3e00: 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74  his.** routine t
3e10: 68 61 74 20 63 61 6e 20 62 65 20 72 65 75 73 65  hat can be reuse
3e20: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 73  d..**.** The res
3e30: 75 6c 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ult is stored in
3e40: 20 73 70 61 63 65 20 6f 62 74 61 69 6e 65 64 20   space obtained 
3e50: 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 61 6e  from malloc() an
3e60: 64 20 6d 75 73 74 20 65 69 74 68 65 72 0a 2a 2a  d must either.**
3e70: 20 62 65 20 66 72 65 65 64 20 62 79 20 74 68 65   be freed by the
3e80: 20 63 61 6c 6c 65 72 20 6f 72 20 65 6c 73 65 20   caller or else 
3e90: 70 61 73 73 65 64 20 62 61 63 6b 20 69 6e 74 6f  passed back into
3ea0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 76 69   this routine vi
3eb0: 61 20 74 68 65 0a 2a 2a 20 7a 50 72 69 6f 72 20  a the.** zPrior 
3ec0: 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 72 65 75  argument for reu
3ed0: 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68  se..*/.static ch
3ee0: 61 72 20 2a 6f 6e 65 5f 69 6e 70 75 74 5f 6c 69  ar *one_input_li
3ef0: 6e 65 28 46 49 4c 45 20 2a 69 6e 2c 20 63 68 61  ne(FILE *in, cha
3f00: 72 20 2a 7a 50 72 69 6f 72 2c 20 69 6e 74 20 69  r *zPrior, int i
3f10: 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 29 7b 0a  sContinuation){.
3f20: 20 20 63 68 61 72 20 2a 7a 50 72 6f 6d 70 74 3b    char *zPrompt;
3f30: 0a 20 20 63 68 61 72 20 2a 7a 52 65 73 75 6c 74  .  char *zResult
3f40: 3b 0a 20 20 69 66 28 20 69 6e 21 3d 30 20 29 7b  ;.  if( in!=0 ){
3f50: 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 3d 20 6c  .    zResult = l
3f60: 6f 63 61 6c 5f 67 65 74 6c 69 6e 65 28 7a 50 72  ocal_getline(zPr
3f70: 69 6f 72 2c 20 69 6e 29 3b 0a 20 20 7d 65 6c 73  ior, in);.  }els
3f80: 65 7b 0a 20 20 20 20 7a 50 72 6f 6d 70 74 20 3d  e{.    zPrompt =
3f90: 20 69 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 20   isContinuation 
3fa0: 3f 20 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74  ? continuePrompt
3fb0: 20 3a 20 6d 61 69 6e 50 72 6f 6d 70 74 3b 0a 23   : mainPrompt;.#
3fc0: 69 66 20 53 48 45 4c 4c 5f 55 53 45 5f 4c 4f 43  if SHELL_USE_LOC
3fd0: 41 4c 5f 47 45 54 4c 49 4e 45 0a 20 20 20 20 70  AL_GETLINE.    p
3fe0: 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 50 72 6f  rintf("%s", zPro
3ff0: 6d 70 74 29 3b 0a 20 20 20 20 66 66 6c 75 73 68  mpt);.    fflush
4000: 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20 7a 52  (stdout);.    zR
4010: 65 73 75 6c 74 20 3d 20 6c 6f 63 61 6c 5f 67 65  esult = local_ge
4020: 74 6c 69 6e 65 28 7a 50 72 69 6f 72 2c 20 73 74  tline(zPrior, st
4030: 64 69 6e 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20  din);.#else.    
4040: 66 72 65 65 28 7a 50 72 69 6f 72 29 3b 0a 20 20  free(zPrior);.  
4050: 20 20 7a 52 65 73 75 6c 74 20 3d 20 73 68 65 6c    zResult = shel
4060: 6c 5f 72 65 61 64 6c 69 6e 65 28 7a 50 72 6f 6d  l_readline(zProm
4070: 70 74 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65  pt);.    if( zRe
4080: 73 75 6c 74 20 26 26 20 2a 7a 52 65 73 75 6c 74  sult && *zResult
4090: 20 29 20 73 68 65 6c 6c 5f 61 64 64 5f 68 69 73   ) shell_add_his
40a0: 74 6f 72 79 28 7a 52 65 73 75 6c 74 29 3b 0a 23  tory(zResult);.#
40b0: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 72 65 74 75  endif.  }.  retu
40c0: 72 6e 20 7a 52 65 73 75 6c 74 3b 0a 7d 0a 2f 2a  rn zResult;.}./*
40d0: 0a 2a 2a 20 41 20 76 61 72 69 61 62 6c 65 20 6c  .** A variable l
40e0: 65 6e 67 74 68 20 73 74 72 69 6e 67 20 74 6f 20  ength string to 
40f0: 77 68 69 63 68 20 6f 6e 65 20 63 61 6e 20 61 70  which one can ap
4100: 70 65 6e 64 20 74 65 78 74 2e 0a 2a 2f 0a 74 79  pend text..*/.ty
4110: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 68 65  pedef struct She
4120: 6c 6c 54 65 78 74 20 53 68 65 6c 6c 54 65 78 74  llText ShellText
4130: 3b 0a 73 74 72 75 63 74 20 53 68 65 6c 6c 54 65  ;.struct ShellTe
4140: 78 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  xt {.  char *z;.
4150: 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 6e    int n;.  int n
4160: 41 6c 6c 6f 63 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  Alloc;.};../*.**
4170: 20 49 6e 69 74 69 61 6c 69 7a 65 20 61 6e 64 20   Initialize and 
4180: 64 65 73 74 72 6f 79 20 61 20 53 68 65 6c 6c 54  destroy a ShellT
4190: 65 78 74 20 6f 62 6a 65 63 74 0a 2a 2f 0a 73 74  ext object.*/.st
41a0: 61 74 69 63 20 76 6f 69 64 20 69 6e 69 74 54 65  atic void initTe
41b0: 78 74 28 53 68 65 6c 6c 54 65 78 74 20 2a 70 29  xt(ShellText *p)
41c0: 7b 0a 20 20 6d 65 6d 73 65 74 28 70 2c 20 30 2c  {.  memset(p, 0,
41d0: 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 7d 0a   sizeof(*p));.}.
41e0: 73 74 61 74 69 63 20 76 6f 69 64 20 66 72 65 65  static void free
41f0: 54 65 78 74 28 53 68 65 6c 6c 54 65 78 74 20 2a  Text(ShellText *
4200: 70 29 7b 0a 20 20 66 72 65 65 28 70 2d 3e 7a 29  p){.  free(p->z)
4210: 3b 0a 20 20 69 6e 69 74 54 65 78 74 28 70 29 3b  ;.  initText(p);
4220: 0a 7d 0a 0a 2f 2a 20 7a 49 6e 20 69 73 20 65 69  .}../* zIn is ei
4230: 74 68 65 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ther a pointer t
4240: 6f 20 61 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61  o a NULL-termina
4250: 74 65 64 20 73 74 72 69 6e 67 20 69 6e 20 6d 65  ted string in me
4260: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  mory obtained.**
4270: 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2c 20   from malloc(), 
4280: 6f 72 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65  or a NULL pointe
4290: 72 2e 20 54 68 65 20 73 74 72 69 6e 67 20 70 6f  r. The string po
42a0: 69 6e 74 65 64 20 74 6f 20 62 79 20 7a 41 70 70  inted to by zApp
42b0: 65 6e 64 20 69 73 0a 2a 2a 20 61 64 64 65 64 20  end is.** added 
42c0: 74 6f 20 7a 49 6e 2c 20 61 6e 64 20 74 68 65 20  to zIn, and the 
42d0: 72 65 73 75 6c 74 20 72 65 74 75 72 6e 65 64 20  result returned 
42e0: 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  in memory obtain
42f0: 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
4300: 2e 0a 2a 2a 20 7a 49 6e 2c 20 69 66 20 69 74 20  ..** zIn, if it 
4310: 77 61 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 73  was not NULL, is
4320: 20 66 72 65 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66   freed..**.** If
4330: 20 74 68 65 20 74 68 69 72 64 20 61 72 67 75 6d   the third argum
4340: 65 6e 74 2c 20 71 75 6f 74 65 2c 20 69 73 20 6e  ent, quote, is n
4350: 6f 74 20 27 5c 30 27 2c 20 74 68 65 6e 20 69 74  ot '\0', then it
4360: 20 69 73 20 75 73 65 64 20 61 73 20 61 0a 2a 2a   is used as a.**
4370: 20 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72   quote character
4380: 20 66 6f 72 20 7a 41 70 70 65 6e 64 2e 0a 2a 2f   for zAppend..*/
4390: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
43a0: 65 6e 64 54 65 78 74 28 53 68 65 6c 6c 54 65 78  endText(ShellTex
43b0: 74 20 2a 70 2c 20 63 68 61 72 20 63 6f 6e 73 74  t *p, char const
43c0: 20 2a 7a 41 70 70 65 6e 64 2c 20 63 68 61 72 20   *zAppend, char 
43d0: 71 75 6f 74 65 29 7b 0a 20 20 69 6e 74 20 6c 65  quote){.  int le
43e0: 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
43f0: 74 20 6e 41 70 70 65 6e 64 20 3d 20 73 74 72 6c  t nAppend = strl
4400: 65 6e 33 30 28 7a 41 70 70 65 6e 64 29 3b 0a 0a  en30(zAppend);..
4410: 20 20 6c 65 6e 20 3d 20 6e 41 70 70 65 6e 64 2b    len = nAppend+
4420: 70 2d 3e 6e 2b 31 3b 0a 20 20 69 66 28 20 71 75  p->n+1;.  if( qu
4430: 6f 74 65 20 29 7b 0a 20 20 20 20 6c 65 6e 20 2b  ote ){.    len +
4440: 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  = 2;.    for(i=0
4450: 3b 20 69 3c 6e 41 70 70 65 6e 64 3b 20 69 2b 2b  ; i<nAppend; i++
4460: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 41 70  ){.      if( zAp
4470: 70 65 6e 64 5b 69 5d 3d 3d 71 75 6f 74 65 20 29  pend[i]==quote )
4480: 20 6c 65 6e 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   len++;.    }.  
4490: 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 2b 6c 65  }..  if( p->n+le
44a0: 6e 3e 3d 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a  n>=p->nAlloc ){.
44b0: 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20      p->nAlloc = 
44c0: 70 2d 3e 6e 41 6c 6c 6f 63 2a 32 20 2b 20 6c 65  p->nAlloc*2 + le
44d0: 6e 20 2b 20 32 30 3b 0a 20 20 20 20 70 2d 3e 7a  n + 20;.    p->z
44e0: 20 3d 20 72 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c   = realloc(p->z,
44f0: 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20   p->nAlloc);.   
4500: 20 69 66 28 20 70 2d 3e 7a 3d 3d 30 20 29 7b 0a   if( p->z==0 ){.
4510: 20 20 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20        memset(p, 
4520: 30 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a  0, sizeof(*p));.
4530: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
4540: 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66 28 20 71    }.  }..  if( q
4550: 75 6f 74 65 20 29 7b 0a 20 20 20 20 63 68 61 72  uote ){.    char
4560: 20 2a 7a 43 73 72 20 3d 20 70 2d 3e 7a 2b 70 2d   *zCsr = p->z+p-
4570: 3e 6e 3b 0a 20 20 20 20 2a 7a 43 73 72 2b 2b 20  >n;.    *zCsr++ 
4580: 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20 66 6f 72  = quote;.    for
4590: 28 69 3d 30 3b 20 69 3c 6e 41 70 70 65 6e 64 3b  (i=0; i<nAppend;
45a0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 2a 7a 43   i++){.      *zC
45b0: 73 72 2b 2b 20 3d 20 7a 41 70 70 65 6e 64 5b 69  sr++ = zAppend[i
45c0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 41 70  ];.      if( zAp
45d0: 70 65 6e 64 5b 69 5d 3d 3d 71 75 6f 74 65 20 29  pend[i]==quote )
45e0: 20 2a 7a 43 73 72 2b 2b 20 3d 20 71 75 6f 74 65   *zCsr++ = quote
45f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
4600: 72 2b 2b 20 3d 20 71 75 6f 74 65 3b 0a 20 20 20  r++ = quote;.   
4610: 20 70 2d 3e 6e 20 3d 20 28 69 6e 74 29 28 7a 43   p->n = (int)(zC
4620: 73 72 20 2d 20 70 2d 3e 7a 29 3b 0a 20 20 20 20  sr - p->z);.    
4630: 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20  *zCsr = '\0';.  
4640: 7d 65 6c 73 65 7b 0a 20 20 20 20 6d 65 6d 63 70  }else{.    memcp
4650: 79 28 70 2d 3e 7a 2b 70 2d 3e 6e 2c 20 7a 41 70  y(p->z+p->n, zAp
4660: 70 65 6e 64 2c 20 6e 41 70 70 65 6e 64 29 3b 0a  pend, nAppend);.
4670: 20 20 20 20 70 2d 3e 6e 20 2b 3d 20 6e 41 70 70      p->n += nApp
4680: 65 6e 64 3b 0a 20 20 20 20 70 2d 3e 7a 5b 70 2d  end;.    p->z[p-
4690: 3e 6e 5d 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 0a  >n] = '\0';.  }.
46a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74  }../*.** Attempt
46b0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
46c0: 20 69 64 65 6e 74 69 66 69 65 72 20 7a 4e 61 6d   identifier zNam
46d0: 65 20 6e 65 65 64 73 20 74 6f 20 62 65 20 71 75  e needs to be qu
46e0: 6f 74 65 64 2c 20 65 69 74 68 65 72 0a 2a 2a 20  oted, either.** 
46f0: 62 65 63 61 75 73 65 20 69 74 20 63 6f 6e 74 61  because it conta
4700: 69 6e 73 20 6e 6f 6e 2d 61 6c 70 68 61 6e 75 6d  ins non-alphanum
4710: 65 72 69 63 20 63 68 61 72 61 63 74 65 72 73 2c  eric characters,
4720: 20 6f 72 20 62 65 63 61 75 73 65 20 69 74 20 69   or because it i
4730: 73 20 61 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 6b  s an.** SQLite k
4740: 65 79 77 6f 72 64 2e 20 20 42 65 20 63 6f 6e 73  eyword.  Be cons
4750: 65 72 76 61 74 69 76 65 20 69 6e 20 74 68 69 73  ervative in this
4760: 20 65 73 74 69 6d 61 74 65 3a 20 20 57 68 65 6e   estimate:  When
4770: 20 69 6e 20 64 6f 75 62 74 20 61 73 73 75 6d 65   in doubt assume
4780: 0a 2a 2a 20 74 68 61 74 20 71 75 6f 74 69 6e 67  .** that quoting
4790: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
47a0: 0a 2a 2a 20 52 65 74 75 72 6e 20 27 22 27 20 69  .** Return '"' i
47b0: 66 20 71 75 6f 74 69 6e 67 20 69 73 20 72 65 71  f quoting is req
47c0: 75 69 72 65 64 2e 20 20 52 65 74 75 72 6e 20 30  uired.  Return 0
47d0: 20 69 66 20 6e 6f 20 71 75 6f 74 69 6e 67 20 69   if no quoting i
47e0: 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73  s required..*/.s
47f0: 74 61 74 69 63 20 63 68 61 72 20 71 75 6f 74 65  tatic char quote
4800: 43 68 61 72 28 63 6f 6e 73 74 20 63 68 61 72 20  Char(const char 
4810: 2a 7a 4e 61 6d 65 29 7b 0a 20 20 2f 2a 20 41 6c  *zName){.  /* Al
4820: 6c 20 53 51 4c 69 74 65 20 6b 65 79 77 6f 72 64  l SQLite keyword
4830: 73 2c 20 69 6e 20 61 6c 70 68 61 62 65 74 69 63  s, in alphabetic
4840: 61 6c 20 6f 72 64 65 72 20 2a 2f 0a 20 20 73 74  al order */.  st
4850: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
4860: 2a 61 7a 4b 65 79 77 6f 72 64 73 5b 5d 20 3d 20  *azKeywords[] = 
4870: 7b 0a 20 20 20 20 22 41 42 4f 52 54 22 2c 20 22  {.    "ABORT", "
4880: 41 43 54 49 4f 4e 22 2c 20 22 41 44 44 22 2c 20  ACTION", "ADD", 
4890: 22 41 46 54 45 52 22 2c 20 22 41 4c 4c 22 2c 20  "AFTER", "ALL", 
48a0: 22 41 4c 54 45 52 22 2c 20 22 41 4e 41 4c 59 5a  "ALTER", "ANALYZ
48b0: 45 22 2c 20 22 41 4e 44 22 2c 20 22 41 53 22 2c  E", "AND", "AS",
48c0: 0a 20 20 20 20 22 41 53 43 22 2c 20 22 41 54 54  .    "ASC", "ATT
48d0: 41 43 48 22 2c 20 22 41 55 54 4f 49 4e 43 52 45  ACH", "AUTOINCRE
48e0: 4d 45 4e 54 22 2c 20 22 42 45 46 4f 52 45 22 2c  MENT", "BEFORE",
48f0: 20 22 42 45 47 49 4e 22 2c 20 22 42 45 54 57 45   "BEGIN", "BETWE
4900: 45 4e 22 2c 20 22 42 59 22 2c 0a 20 20 20 20 22  EN", "BY",.    "
4910: 43 41 53 43 41 44 45 22 2c 20 22 43 41 53 45 22  CASCADE", "CASE"
4920: 2c 20 22 43 41 53 54 22 2c 20 22 43 48 45 43 4b  , "CAST", "CHECK
4930: 22 2c 20 22 43 4f 4c 4c 41 54 45 22 2c 20 22 43  ", "COLLATE", "C
4940: 4f 4c 55 4d 4e 22 2c 20 22 43 4f 4d 4d 49 54 22  OLUMN", "COMMIT"
4950: 2c 0a 20 20 20 20 22 43 4f 4e 46 4c 49 43 54 22  ,.    "CONFLICT"
4960: 2c 20 22 43 4f 4e 53 54 52 41 49 4e 54 22 2c 20  , "CONSTRAINT", 
4970: 22 43 52 45 41 54 45 22 2c 20 22 43 52 4f 53 53  "CREATE", "CROSS
4980: 22 2c 20 22 43 55 52 52 45 4e 54 5f 44 41 54 45  ", "CURRENT_DATE
4990: 22 2c 0a 20 20 20 20 22 43 55 52 52 45 4e 54 5f  ",.    "CURRENT_
49a0: 54 49 4d 45 22 2c 20 22 43 55 52 52 45 4e 54 5f  TIME", "CURRENT_
49b0: 54 49 4d 45 53 54 41 4d 50 22 2c 20 22 44 41 54  TIMESTAMP", "DAT
49c0: 41 42 41 53 45 22 2c 20 22 44 45 46 41 55 4c 54  ABASE", "DEFAULT
49d0: 22 2c 20 22 44 45 46 45 52 52 41 42 4c 45 22 2c  ", "DEFERRABLE",
49e0: 0a 20 20 20 20 22 44 45 46 45 52 52 45 44 22 2c  .    "DEFERRED",
49f0: 20 22 44 45 4c 45 54 45 22 2c 20 22 44 45 53 43   "DELETE", "DESC
4a00: 22 2c 20 22 44 45 54 41 43 48 22 2c 20 22 44 49  ", "DETACH", "DI
4a10: 53 54 49 4e 43 54 22 2c 20 22 44 52 4f 50 22 2c  STINCT", "DROP",
4a20: 20 22 45 41 43 48 22 2c 0a 20 20 20 20 22 45 4c   "EACH",.    "EL
4a30: 53 45 22 2c 20 22 45 4e 44 22 2c 20 22 45 53 43  SE", "END", "ESC
4a40: 41 50 45 22 2c 20 22 45 58 43 45 50 54 22 2c 20  APE", "EXCEPT", 
4a50: 22 45 58 43 4c 55 53 49 56 45 22 2c 20 22 45 58  "EXCLUSIVE", "EX
4a60: 49 53 54 53 22 2c 20 22 45 58 50 4c 41 49 4e 22  ISTS", "EXPLAIN"
4a70: 2c 0a 20 20 20 20 22 46 41 49 4c 22 2c 20 22 46  ,.    "FAIL", "F
4a80: 4f 52 22 2c 20 22 46 4f 52 45 49 47 4e 22 2c 20  OR", "FOREIGN", 
4a90: 22 46 52 4f 4d 22 2c 20 22 46 55 4c 4c 22 2c 20  "FROM", "FULL", 
4aa0: 22 47 4c 4f 42 22 2c 20 22 47 52 4f 55 50 22 2c  "GLOB", "GROUP",
4ab0: 20 22 48 41 56 49 4e 47 22 2c 20 22 49 46 22 2c   "HAVING", "IF",
4ac0: 0a 20 20 20 20 22 49 47 4e 4f 52 45 22 2c 20 22  .    "IGNORE", "
4ad0: 49 4d 4d 45 44 49 41 54 45 22 2c 20 22 49 4e 22  IMMEDIATE", "IN"
4ae0: 2c 20 22 49 4e 44 45 58 22 2c 20 22 49 4e 44 45  , "INDEX", "INDE
4af0: 58 45 44 22 2c 20 22 49 4e 49 54 49 41 4c 4c 59  XED", "INITIALLY
4b00: 22 2c 20 22 49 4e 4e 45 52 22 2c 0a 20 20 20 20  ", "INNER",.    
4b10: 22 49 4e 53 45 52 54 22 2c 20 22 49 4e 53 54 45  "INSERT", "INSTE
4b20: 41 44 22 2c 20 22 49 4e 54 45 52 53 45 43 54 22  AD", "INTERSECT"
4b30: 2c 20 22 49 4e 54 4f 22 2c 20 22 49 53 22 2c 20  , "INTO", "IS", 
4b40: 22 49 53 4e 55 4c 4c 22 2c 20 22 4a 4f 49 4e 22  "ISNULL", "JOIN"
4b50: 2c 20 22 4b 45 59 22 2c 0a 20 20 20 20 22 4c 45  , "KEY",.    "LE
4b60: 46 54 22 2c 20 22 4c 49 4b 45 22 2c 20 22 4c 49  FT", "LIKE", "LI
4b70: 4d 49 54 22 2c 20 22 4d 41 54 43 48 22 2c 20 22  MIT", "MATCH", "
4b80: 4e 41 54 55 52 41 4c 22 2c 20 22 4e 4f 22 2c 20  NATURAL", "NO", 
4b90: 22 4e 4f 54 22 2c 20 22 4e 4f 54 4e 55 4c 4c 22  "NOT", "NOTNULL"
4ba0: 2c 0a 20 20 20 20 22 4e 55 4c 4c 22 2c 20 22 4f  ,.    "NULL", "O
4bb0: 46 22 2c 20 22 4f 46 46 53 45 54 22 2c 20 22 4f  F", "OFFSET", "O
4bc0: 4e 22 2c 20 22 4f 52 22 2c 20 22 4f 52 44 45 52  N", "OR", "ORDER
4bd0: 22 2c 20 22 4f 55 54 45 52 22 2c 20 22 50 4c 41  ", "OUTER", "PLA
4be0: 4e 22 2c 20 22 50 52 41 47 4d 41 22 2c 0a 20 20  N", "PRAGMA",.  
4bf0: 20 20 22 50 52 49 4d 41 52 59 22 2c 20 22 51 55    "PRIMARY", "QU
4c00: 45 52 59 22 2c 20 22 52 41 49 53 45 22 2c 20 22  ERY", "RAISE", "
4c10: 52 45 43 55 52 53 49 56 45 22 2c 20 22 52 45 46  RECURSIVE", "REF
4c20: 45 52 45 4e 43 45 53 22 2c 20 22 52 45 47 45 58  ERENCES", "REGEX
4c30: 50 22 2c 0a 20 20 20 20 22 52 45 49 4e 44 45 58  P",.    "REINDEX
4c40: 22 2c 20 22 52 45 4c 45 41 53 45 22 2c 20 22 52  ", "RELEASE", "R
4c50: 45 4e 41 4d 45 22 2c 20 22 52 45 50 4c 41 43 45  ENAME", "REPLACE
4c60: 22 2c 20 22 52 45 53 54 52 49 43 54 22 2c 20 22  ", "RESTRICT", "
4c70: 52 49 47 48 54 22 2c 0a 20 20 20 20 22 52 4f 4c  RIGHT",.    "ROL
4c80: 4c 42 41 43 4b 22 2c 20 22 52 4f 57 22 2c 20 22  LBACK", "ROW", "
4c90: 53 41 56 45 50 4f 49 4e 54 22 2c 20 22 53 45 4c  SAVEPOINT", "SEL
4ca0: 45 43 54 22 2c 20 22 53 45 54 22 2c 20 22 54 41  ECT", "SET", "TA
4cb0: 42 4c 45 22 2c 20 22 54 45 4d 50 22 2c 0a 20 20  BLE", "TEMP",.  
4cc0: 20 20 22 54 45 4d 50 4f 52 41 52 59 22 2c 20 22    "TEMPORARY", "
4cd0: 54 48 45 4e 22 2c 20 22 54 4f 22 2c 20 22 54 52  THEN", "TO", "TR
4ce0: 41 4e 53 41 43 54 49 4f 4e 22 2c 20 22 54 52 49  ANSACTION", "TRI
4cf0: 47 47 45 52 22 2c 20 22 55 4e 49 4f 4e 22 2c 20  GGER", "UNION", 
4d00: 22 55 4e 49 51 55 45 22 2c 0a 20 20 20 20 22 55  "UNIQUE",.    "U
4d10: 50 44 41 54 45 22 2c 20 22 55 53 49 4e 47 22 2c  PDATE", "USING",
4d20: 20 22 56 41 43 55 55 4d 22 2c 20 22 56 41 4c 55   "VACUUM", "VALU
4d30: 45 53 22 2c 20 22 56 49 45 57 22 2c 20 22 56 49  ES", "VIEW", "VI
4d40: 52 54 55 41 4c 22 2c 20 22 57 48 45 4e 22 2c 20  RTUAL", "WHEN", 
4d50: 22 57 48 45 52 45 22 2c 0a 20 20 20 20 22 57 49  "WHERE",.    "WI
4d60: 54 48 22 2c 20 22 57 49 54 48 4f 55 54 22 2c 0a  TH", "WITHOUT",.
4d70: 20 20 7d 3b 0a 20 20 69 6e 74 20 69 2c 20 6c 77    };.  int i, lw
4d80: 72 2c 20 75 70 72 2c 20 6d 69 64 2c 20 63 3b 0a  r, upr, mid, c;.
4d90: 20 20 69 66 28 20 21 69 73 61 6c 70 68 61 28 28    if( !isalpha((
4da0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 7a 4e  unsigned char)zN
4db0: 61 6d 65 5b 30 5d 29 20 26 26 20 7a 4e 61 6d 65  ame[0]) && zName
4dc0: 5b 30 5d 21 3d 27 5f 27 20 29 20 72 65 74 75 72  [0]!='_' ) retur
4dd0: 6e 20 27 22 27 3b 0a 20 20 66 6f 72 28 69 3d 30  n '"';.  for(i=0
4de0: 3b 20 7a 4e 61 6d 65 5b 69 5d 3b 20 69 2b 2b 29  ; zName[i]; i++)
4df0: 7b 0a 20 20 20 20 69 66 28 20 21 69 73 61 6c 6e  {.    if( !isaln
4e00: 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
4e10: 72 29 7a 4e 61 6d 65 5b 69 5d 29 20 26 26 20 7a  r)zName[i]) && z
4e20: 4e 61 6d 65 5b 69 5d 21 3d 27 5f 27 20 29 20 72  Name[i]!='_' ) r
4e30: 65 74 75 72 6e 20 27 22 27 3b 0a 20 20 7d 0a 20  eturn '"';.  }. 
4e40: 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70 72 20   lwr = 0;.  upr 
4e50: 3d 20 73 69 7a 65 6f 66 28 61 7a 4b 65 79 77 6f  = sizeof(azKeywo
4e60: 72 64 73 29 2f 73 69 7a 65 6f 66 28 61 7a 4b 65  rds)/sizeof(azKe
4e70: 79 77 6f 72 64 73 5b 30 5d 29 20 2d 20 31 3b 0a  ywords[0]) - 1;.
4e80: 20 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70    while( lwr<=up
4e90: 72 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28  r ){.    mid = (
4ea0: 6c 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20  lwr+upr)/2;.    
4eb0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72 69  c = sqlite3_stri
4ec0: 63 6d 70 28 61 7a 4b 65 79 77 6f 72 64 73 5b 6d  cmp(azKeywords[m
4ed0: 69 64 5d 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  id], zName);.   
4ee0: 20 69 66 28 20 63 3d 3d 30 20 29 20 72 65 74 75   if( c==0 ) retu
4ef0: 72 6e 20 27 22 27 3b 0a 20 20 20 20 69 66 28 20  rn '"';.    if( 
4f00: 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 6c 77 72  c<0 ){.      lwr
4f10: 20 3d 20 6d 69 64 2b 31 3b 0a 20 20 20 20 7d 65   = mid+1;.    }e
4f20: 6c 73 65 7b 0a 20 20 20 20 20 20 75 70 72 20 3d  lse{.      upr =
4f30: 20 6d 69 64 2d 31 3b 0a 20 20 20 20 7d 0a 20 20   mid-1;.    }.  
4f40: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
4f50: 0a 2f 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74  ./*.** SQL funct
4f60: 69 6f 6e 3a 20 20 73 68 65 6c 6c 5f 61 64 64 5f  ion:  shell_add_
4f70: 73 63 68 65 6d 61 28 53 2c 58 29 0a 2a 2a 0a 2a  schema(S,X).**.*
4f80: 2a 20 41 64 64 20 74 68 65 20 73 63 68 65 6d 61  * Add the schema
4f90: 20 6e 61 6d 65 20 58 20 74 6f 20 74 68 65 20 43   name X to the C
4fa0: 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  REATE statement 
4fb0: 69 6e 20 53 20 61 6e 64 20 72 65 74 75 72 6e 20  in S and return 
4fc0: 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 20 45  the result..** E
4fd0: 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  xamples:.**.**  
4fe0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
4ff0: 31 28 78 29 20 20 20 2d 3e 20 20 20 43 52 45 41  1(x)   ->   CREA
5000: 54 45 20 54 41 42 4c 45 20 78 79 7a 2e 74 31 28  TE TABLE xyz.t1(
5010: 78 29 3b 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 20 77  x);.**.** Also w
5020: 6f 72 6b 73 20 6f 6e 0a 2a 2a 0a 2a 2a 20 20 20  orks on.**.**   
5030: 20 43 52 45 41 54 45 20 49 4e 44 45 58 0a 2a 2a   CREATE INDEX.**
5040: 20 20 20 20 43 52 45 41 54 45 20 55 4e 49 51 55      CREATE UNIQU
5050: 45 20 49 4e 44 45 58 0a 2a 2a 20 20 20 20 43 52  E INDEX.**    CR
5060: 45 41 54 45 20 56 49 45 57 0a 2a 2a 20 20 20 20  EATE VIEW.**    
5070: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 0a 2a  CREATE TRIGGER.*
5080: 2a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  *    CREATE VIRT
5090: 55 41 4c 20 54 41 42 4c 45 0a 2a 2a 0a 2a 2a 20  UAL TABLE.**.** 
50a0: 54 68 69 73 20 55 44 46 20 69 73 20 75 73 65 64  This UDF is used
50b0: 20 62 79 20 74 68 65 20 2e 73 63 68 65 6d 61 20   by the .schema 
50c0: 63 6f 6d 6d 61 6e 64 20 74 6f 20 69 6e 73 65 72  command to inser
50d0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6e 61 6d  t the schema nam
50e0: 65 20 6f 66 0a 2a 2a 20 61 74 74 61 63 68 65 64  e of.** attached
50f0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 74 6f 20   databases into 
5100: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 74 68  the middle of th
5110: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
5120: 73 71 6c 20 66 69 65 6c 64 2e 0a 2a 2f 0a 73 74  sql field..*/.st
5130: 61 74 69 63 20 76 6f 69 64 20 73 68 65 6c 6c 41  atic void shellA
5140: 64 64 53 63 68 65 6d 61 4e 61 6d 65 28 0a 20 20  ddSchemaName(.  
5150: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
5160: 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20 6e 56 61  *pCtx,.  int nVa
5170: 6c 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  l,.  sqlite3_val
5180: 75 65 20 2a 2a 61 70 56 61 6c 0a 29 7b 0a 20 20  ue **apVal.){.  
5190: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
51a0: 72 20 2a 61 50 72 65 66 69 78 5b 5d 20 3d 20 7b  r *aPrefix[] = {
51b0: 0a 20 20 20 20 20 22 54 41 42 4c 45 22 2c 0a 20  .     "TABLE",. 
51c0: 20 20 20 20 22 49 4e 44 45 58 22 2c 0a 20 20 20      "INDEX",.   
51d0: 20 20 22 55 4e 49 51 55 45 20 49 4e 44 45 58 22    "UNIQUE INDEX"
51e0: 2c 0a 20 20 20 20 20 22 56 49 45 57 22 2c 0a 20  ,.     "VIEW",. 
51f0: 20 20 20 20 22 54 52 49 47 47 45 52 22 2c 0a 20      "TRIGGER",. 
5200: 20 20 20 20 22 56 49 52 54 55 41 4c 20 54 41 42      "VIRTUAL TAB
5210: 4c 45 22 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69  LE".  };.  int i
5220: 20 3d 20 30 3b 0a 20 20 63 6f 6e 73 74 20 63 68   = 0;.  const ch
5230: 61 72 20 2a 7a 49 6e 20 3d 20 28 63 6f 6e 73 74  ar *zIn = (const
5240: 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76   char*)sqlite3_v
5250: 61 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b  alue_text(apVal[
5260: 30 5d 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  0]);.  const cha
5270: 72 20 2a 7a 53 63 68 65 6d 61 20 3d 20 28 63 6f  r *zSchema = (co
5280: 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
5290: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 70 56  3_value_text(apV
52a0: 61 6c 5b 31 5d 29 3b 0a 20 20 61 73 73 65 72 74  al[1]);.  assert
52b0: 28 20 6e 56 61 6c 3d 3d 32 20 29 3b 0a 20 20 69  ( nVal==2 );.  i
52c0: 66 28 20 7a 49 6e 21 3d 30 20 26 26 20 73 74 72  f( zIn!=0 && str
52d0: 6e 63 6d 70 28 7a 49 6e 2c 20 22 43 52 45 41 54  ncmp(zIn, "CREAT
52e0: 45 20 22 2c 20 37 29 3d 3d 30 20 29 7b 0a 20 20  E ", 7)==0 ){.  
52f0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 28 69 6e    for(i=0; i<(in
5300: 74 29 28 73 69 7a 65 6f 66 28 61 50 72 65 66 69  t)(sizeof(aPrefi
5310: 78 29 2f 73 69 7a 65 6f 66 28 61 50 72 65 66 69  x)/sizeof(aPrefi
5320: 78 5b 30 5d 29 29 3b 20 69 2b 2b 29 7b 0a 20 20  x[0])); i++){.  
5330: 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c      int n = strl
5340: 65 6e 33 30 28 61 50 72 65 66 69 78 5b 69 5d 29  en30(aPrefix[i])
5350: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 6e  ;.      if( strn
5360: 63 6d 70 28 7a 49 6e 2b 37 2c 20 61 50 72 65 66  cmp(zIn+7, aPref
5370: 69 78 5b 69 5d 2c 20 6e 29 3d 3d 30 20 26 26 20  ix[i], n)==0 && 
5380: 7a 49 6e 5b 6e 2b 37 5d 3d 3d 27 20 27 20 29 7b  zIn[n+7]==' ' ){
5390: 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 63 51  .        char cQ
53a0: 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61 72  uote = quoteChar
53b0: 28 7a 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20  (zSchema);.     
53c0: 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20     char *z;.    
53d0: 20 20 20 20 69 66 28 20 63 51 75 6f 74 65 20 29      if( cQuote )
53e0: 7b 0a 20 20 20 20 20 20 20 20 20 7a 20 3d 20 73  {.         z = s
53f0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
5400: 25 2e 2a 73 20 5c 22 25 77 5c 22 2e 25 73 22 2c  %.*s \"%w\".%s",
5410: 20 6e 2b 37 2c 20 7a 49 6e 2c 20 7a 53 63 68 65   n+7, zIn, zSche
5420: 6d 61 2c 20 7a 49 6e 2b 6e 2b 38 29 3b 0a 20 20  ma, zIn+n+8);.  
5430: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
5440: 20 20 20 20 20 20 20 7a 20 3d 20 73 71 6c 69 74         z = sqlit
5450: 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 2e 2a 73  e3_mprintf("%.*s
5460: 20 25 73 2e 25 73 22 2c 20 6e 2b 37 2c 20 7a 49   %s.%s", n+7, zI
5470: 6e 2c 20 7a 53 63 68 65 6d 61 2c 20 7a 49 6e 2b  n, zSchema, zIn+
5480: 6e 2b 38 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n+8);.        }.
5490: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
54a0: 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78  result_text(pCtx
54b0: 2c 20 7a 2c 20 2d 31 2c 20 73 71 6c 69 74 65 33  , z, -1, sqlite3
54c0: 5f 66 72 65 65 29 3b 0a 20 20 20 20 20 20 20 20  _free);.        
54d0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
54e0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
54f0: 74 65 33 5f 72 65 73 75 6c 74 5f 76 61 6c 75 65  te3_result_value
5500: 28 70 43 74 78 2c 20 61 70 56 61 6c 5b 30 5d 29  (pCtx, apVal[0])
5510: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  ;.}../*.** The s
5520: 6f 75 72 63 65 20 63 6f 64 65 20 66 6f 72 20 73  ource code for s
5530: 65 76 65 72 61 6c 20 72 75 6e 2d 74 69 6d 65 20  everal run-time 
5540: 6c 6f 61 64 61 62 6c 65 20 65 78 74 65 6e 73 69  loadable extensi
5550: 6f 6e 73 20 69 73 20 69 6e 73 65 72 74 65 64 0a  ons is inserted.
5560: 2a 2a 20 62 65 6c 6f 77 20 62 79 20 74 68 65 20  ** below by the 
5570: 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 73 68 65 6c 6c 63  ../tool/mkshellc
5580: 2e 74 63 6c 20 73 63 72 69 70 74 2e 20 20 42 65  .tcl script.  Be
5590: 66 6f 72 65 20 70 72 6f 63 65 73 73 69 6e 67 20  fore processing 
55a0: 74 68 61 74 20 69 6e 63 6c 75 64 65 64 0a 2a 2a  that included.**
55b0: 20 63 6f 64 65 2c 20 77 65 20 6e 65 65 64 20 74   code, we need t
55c0: 6f 20 6f 76 65 72 72 69 64 65 20 73 6f 6d 65 20  o override some 
55d0: 6d 61 63 72 6f 73 20 74 6f 20 6d 61 6b 65 20 74  macros to make t
55e0: 68 65 20 69 6e 63 6c 75 64 65 64 20 70 72 6f 67  he included prog
55f0: 72 61 6d 20 63 6f 64 65 0a 2a 2a 20 77 6f 72 6b  ram code.** work
5600: 20 68 65 72 65 20 69 6e 20 74 68 65 20 6d 69 64   here in the mid
5610: 64 6c 65 20 6f 66 20 74 68 69 73 20 72 65 67 75  dle of this regu
5620: 6c 61 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  lar program..*/.
5630: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
5640: 58 54 45 4e 53 49 4f 4e 5f 49 4e 49 54 31 0a 23  XTENSION_INIT1.#
5650: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 58  define SQLITE_EX
5660: 54 45 4e 53 49 4f 4e 5f 49 4e 49 54 32 28 58 29  TENSION_INIT2(X)
5670: 20 28 76 6f 69 64 29 28 58 29 0a 0a 49 4e 43 4c   (void)(X)..INCL
5680: 55 44 45 20 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f  UDE ../ext/misc/
5690: 73 68 61 74 68 72 65 65 2e 63 0a 49 4e 43 4c 55  shathree.c.INCLU
56a0: 44 45 20 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 66  DE ../ext/misc/f
56b0: 69 6c 65 69 6f 2e 63 0a 49 4e 43 4c 55 44 45 20  ileio.c.INCLUDE 
56c0: 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 63 6f 6d 70  ../ext/misc/comp
56d0: 6c 65 74 69 6f 6e 2e 63 0a 49 4e 43 4c 55 44 45  letion.c.INCLUDE
56e0: 20 2e 2e 2f 65 78 74 2f 65 78 70 65 72 74 2f 73   ../ext/expert/s
56f0: 71 6c 69 74 65 33 65 78 70 65 72 74 2e 68 0a 49  qlite3expert.h.I
5700: 4e 43 4c 55 44 45 20 2e 2e 2f 65 78 74 2f 65 78  NCLUDE ../ext/ex
5710: 70 65 72 74 2f 73 71 6c 69 74 65 33 65 78 70 65  pert/sqlite3expe
5720: 72 74 2e 63 0a 0a 23 69 66 20 64 65 66 69 6e 65  rt.c..#if define
5730: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
5740: 53 45 53 53 49 4f 4e 29 0a 2f 2a 0a 2a 2a 20 53  SESSION)./*.** S
5750: 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
5760: 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 6f 70   for a single op
5770: 65 6e 20 73 65 73 73 69 6f 6e 0a 2a 2f 0a 74 79  en session.*/.ty
5780: 70 65 64 65 66 20 73 74 72 75 63 74 20 4f 70 65  pedef struct Ope
5790: 6e 53 65 73 73 69 6f 6e 20 4f 70 65 6e 53 65 73  nSession OpenSes
57a0: 73 69 6f 6e 3b 0a 73 74 72 75 63 74 20 4f 70 65  sion;.struct Ope
57b0: 6e 53 65 73 73 69 6f 6e 20 7b 0a 20 20 63 68 61  nSession {.  cha
57c0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
57d0: 20 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69        /* Symboli
57e0: 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 69 73 20  c name for this 
57f0: 73 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  session */.  int
5800: 20 6e 46 69 6c 74 65 72 3b 20 20 20 20 20 20 20   nFilter;       
5810: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
5820: 6f 66 20 78 46 69 6c 74 65 72 20 72 65 6a 65 63  of xFilter rejec
5830: 74 69 6f 6e 20 47 4c 4f 42 20 70 61 74 74 65 72  tion GLOB patter
5840: 6e 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ns */.  char **a
5850: 7a 46 69 6c 74 65 72 3b 20 20 20 20 20 20 20 20  zFilter;        
5860: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 78 46 69   /* Array of xFi
5870: 6c 74 65 72 20 72 65 6a 65 63 74 69 6f 6e 20 47  lter rejection G
5880: 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 2a 2f 0a  LOB patterns */.
5890: 20 20 73 71 6c 69 74 65 33 5f 73 65 73 73 69 6f    sqlite3_sessio
58a0: 6e 20 2a 70 3b 20 20 20 20 20 20 2f 2a 20 54 68  n *p;      /* Th
58b0: 65 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 20 2a  e open session *
58c0: 2f 0a 7d 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  /.};.#endif../*.
58d0: 2a 2a 20 53 68 65 6c 6c 20 6f 75 74 70 75 74 20  ** Shell output 
58e0: 6d 6f 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  mode information
58f0: 20 66 72 6f 6d 20 62 65 66 6f 72 65 20 22 2e 65   from before ".e
5900: 78 70 6c 61 69 6e 20 6f 6e 22 2c 0a 2a 2a 20 73  xplain on",.** s
5910: 61 76 65 64 20 73 6f 20 74 68 61 74 20 69 74 20  aved so that it 
5920: 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
5930: 62 79 20 22 2e 65 78 70 6c 61 69 6e 20 6f 66 66  by ".explain off
5940: 22 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ".*/.typedef str
5950: 75 63 74 20 53 61 76 65 64 4d 6f 64 65 49 6e 66  uct SavedModeInf
5960: 6f 20 53 61 76 65 64 4d 6f 64 65 49 6e 66 6f 3b  o SavedModeInfo;
5970: 0a 73 74 72 75 63 74 20 53 61 76 65 64 4d 6f 64  .struct SavedMod
5980: 65 49 6e 66 6f 20 7b 0a 20 20 69 6e 74 20 76 61  eInfo {.  int va
5990: 6c 69 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  lid;          /*
59a0: 20 49 73 20 74 68 65 72 65 20 6c 65 67 69 74 20   Is there legit 
59b0: 64 61 74 61 20 69 6e 20 68 65 72 65 3f 20 2a 2f  data in here? */
59c0: 0a 20 20 69 6e 74 20 6d 6f 64 65 3b 20 20 20 20  .  int mode;    
59d0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 65 20 70         /* Mode p
59e0: 72 69 6f 72 20 74 6f 20 22 2e 65 78 70 6c 61 69  rior to ".explai
59f0: 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69 6e 74 20 73  n on" */.  int s
5a00: 68 6f 77 48 65 61 64 65 72 3b 20 20 20 20 20 2f  howHeader;     /
5a10: 2a 20 54 68 65 20 22 2e 68 65 61 64 65 72 22 20  * The ".header" 
5a20: 73 65 74 74 69 6e 67 20 70 72 69 6f 72 20 74 6f  setting prior to
5a30: 20 22 2e 65 78 70 6c 61 69 6e 20 6f 6e 22 20 2a   ".explain on" *
5a40: 2f 0a 20 20 69 6e 74 20 63 6f 6c 57 69 64 74 68  /.  int colWidth
5a50: 5b 31 30 30 5d 3b 20 20 2f 2a 20 43 6f 6c 75 6d  [100];  /* Colum
5a60: 6e 20 77 69 64 74 68 73 20 70 72 69 6f 72 20 74  n widths prior t
5a70: 6f 20 22 2e 65 78 70 6c 61 69 6e 20 6f 6e 22 20  o ".explain on" 
5a80: 2a 2f 0a 7d 3b 0a 0a 74 79 70 65 64 65 66 20 73  */.};..typedef s
5a90: 74 72 75 63 74 20 45 78 70 65 72 74 49 6e 66 6f  truct ExpertInfo
5aa0: 20 45 78 70 65 72 74 49 6e 66 6f 3b 0a 73 74 72   ExpertInfo;.str
5ab0: 75 63 74 20 45 78 70 65 72 74 49 6e 66 6f 20 7b  uct ExpertInfo {
5ac0: 0a 20 20 73 71 6c 69 74 65 33 65 78 70 65 72 74  .  sqlite3expert
5ad0: 20 2a 70 45 78 70 65 72 74 3b 0a 20 20 69 6e 74   *pExpert;.  int
5ae0: 20 62 56 65 72 62 6f 73 65 3b 0a 7d 3b 0a 0a 2f   bVerbose;.};../
5af0: 2a 0a 2a 2a 20 53 74 61 74 65 20 69 6e 66 6f 72  *.** State infor
5b00: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
5b10: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
5b20: 74 69 6f 6e 20 69 73 20 63 6f 6e 74 61 69 6e 65  tion is containe
5b30: 64 20 69 6e 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d in an.** insta
5b40: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
5b50: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
5b60: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
5b70: 74 20 53 68 65 6c 6c 53 74 61 74 65 20 53 68 65  t ShellState She
5b80: 6c 6c 53 74 61 74 65 3b 0a 73 74 72 75 63 74 20  llState;.struct 
5b90: 53 68 65 6c 6c 53 74 61 74 65 20 7b 0a 20 20 73  ShellState {.  s
5ba0: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
5bb0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
5bc0: 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 61  abase */.  int a
5bd0: 75 74 6f 45 78 70 6c 61 69 6e 3b 20 20 20 20 20  utoExplain;     
5be0: 20 20 2f 2a 20 41 75 74 6f 6d 61 74 69 63 61 6c    /* Automatical
5bf0: 6c 79 20 74 75 72 6e 20 6f 6e 20 2e 65 78 70 6c  ly turn on .expl
5c00: 61 69 6e 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  ain mode */.  in
5c10: 74 20 61 75 74 6f 45 51 50 3b 20 20 20 20 20 20  t autoEQP;      
5c20: 20 20 20 20 20 2f 2a 20 52 75 6e 20 45 58 50 4c       /* Run EXPL
5c30: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 70  AIN QUERY PLAN p
5c40: 72 69 6f 72 20 74 6f 20 73 65 61 63 68 20 53 51  rior to seach SQ
5c50: 4c 20 73 74 6d 74 20 2a 2f 0a 20 20 69 6e 74 20  L stmt */.  int 
5c60: 73 74 61 74 73 4f 6e 3b 20 20 20 20 20 20 20 20  statsOn;        
5c70: 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69     /* True to di
5c80: 73 70 6c 61 79 20 6d 65 6d 6f 72 79 20 73 74 61  splay memory sta
5c90: 74 73 20 62 65 66 6f 72 65 20 65 61 63 68 20 66  ts before each f
5ca0: 69 6e 61 6c 69 7a 65 20 2a 2f 0a 20 20 69 6e 74  inalize */.  int
5cb0: 20 73 63 61 6e 73 74 61 74 73 4f 6e 3b 20 20 20   scanstatsOn;   
5cc0: 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64      /* True to d
5cd0: 69 73 70 6c 61 79 20 73 63 61 6e 20 73 74 61 74  isplay scan stat
5ce0: 73 20 62 65 66 6f 72 65 20 65 61 63 68 20 66 69  s before each fi
5cf0: 6e 61 6c 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20  nalize */.  int 
5d00: 6f 75 74 43 6f 75 6e 74 3b 20 20 20 20 20 20 20  outCount;       
5d10: 20 20 20 2f 2a 20 52 65 76 65 72 74 20 74 6f 20     /* Revert to 
5d20: 73 74 64 6f 75 74 20 77 68 65 6e 20 72 65 61 63  stdout when reac
5d30: 68 69 6e 67 20 7a 65 72 6f 20 2a 2f 0a 20 20 69  hing zero */.  i
5d40: 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20  nt cnt;         
5d50: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
5d60: 6f 66 20 72 65 63 6f 72 64 73 20 64 69 73 70 6c  of records displ
5d70: 61 79 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ayed so far */. 
5d80: 20 46 49 4c 45 20 2a 6f 75 74 3b 20 20 20 20 20   FILE *out;     
5d90: 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65          /* Write
5da0: 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f   results here */
5db0: 0a 20 20 46 49 4c 45 20 2a 74 72 61 63 65 4f 75  .  FILE *traceOu
5dc0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74  t;        /* Out
5dd0: 70 75 74 20 66 6f 72 20 73 71 6c 69 74 65 33 5f  put for sqlite3_
5de0: 74 72 61 63 65 28 29 20 2a 2f 0a 20 20 69 6e 74  trace() */.  int
5df0: 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
5e00: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
5e10: 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
5e20: 20 20 69 6e 74 20 6d 6f 64 65 3b 20 20 20 20 20    int mode;     
5e30: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 6f           /* An o
5e40: 75 74 70 75 74 20 6d 6f 64 65 20 73 65 74 74 69  utput mode setti
5e50: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 63 4d 6f 64  ng */.  int cMod
5e60: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
5e70: 2a 20 74 65 6d 70 6f 72 61 72 79 20 6f 75 74 70  * temporary outp
5e80: 75 74 20 6d 6f 64 65 20 66 6f 72 20 74 68 65 20  ut mode for the 
5e90: 63 75 72 72 65 6e 74 20 71 75 65 72 79 20 2a 2f  current query */
5ea0: 0a 20 20 69 6e 74 20 6e 6f 72 6d 61 6c 4d 6f 64  .  int normalMod
5eb0: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74  e;        /* Out
5ec0: 70 75 74 20 6d 6f 64 65 20 62 65 66 6f 72 65 20  put mode before 
5ed0: 22 2e 65 78 70 6c 61 69 6e 20 6f 6e 22 20 2a 2f  ".explain on" */
5ee0: 0a 20 20 69 6e 74 20 77 72 69 74 61 62 6c 65 53  .  int writableS
5ef0: 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 54 72 75  chema;    /* Tru
5f00: 65 20 69 66 20 50 52 41 47 4d 41 20 77 72 69 74  e if PRAGMA writ
5f10: 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 20 2a  able_schema=ON *
5f20: 2f 0a 20 20 69 6e 74 20 73 68 6f 77 48 65 61 64  /.  int showHead
5f30: 65 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 72  er;        /* Tr
5f40: 75 65 20 74 6f 20 73 68 6f 77 20 63 6f 6c 75 6d  ue to show colum
5f50: 6e 20 6e 61 6d 65 73 20 69 6e 20 4c 69 73 74 20  n names in List 
5f60: 6f 72 20 43 6f 6c 75 6d 6e 20 6d 6f 64 65 20 2a  or Column mode *
5f70: 2f 0a 20 20 69 6e 74 20 6e 43 68 65 63 6b 3b 20  /.  int nCheck; 
5f80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
5f90: 6d 62 65 72 20 6f 66 20 22 2e 63 68 65 63 6b 22  mber of ".check"
5fa0: 20 63 6f 6d 6d 61 6e 64 73 20 72 75 6e 20 2a 2f   commands run */
5fb0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 73 68 65 6c  .  unsigned shel
5fc0: 6c 46 6c 67 73 3b 20 20 20 20 2f 2a 20 56 61 72  lFlgs;    /* Var
5fd0: 69 6f 75 73 20 66 6c 61 67 73 20 2a 2f 0a 20 20  ious flags */.  
5fe0: 63 68 61 72 20 2a 7a 44 65 73 74 54 61 62 6c 65  char *zDestTable
5ff0: 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
6000: 66 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 74 61  f destination ta
6010: 62 6c 65 20 77 68 65 6e 20 4d 4f 44 45 5f 49 6e  ble when MODE_In
6020: 73 65 72 74 20 2a 2f 0a 20 20 63 68 61 72 20 7a  sert */.  char z
6030: 54 65 73 74 63 61 73 65 5b 33 30 5d 3b 20 20 20  Testcase[30];   
6040: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 75 72 72   /* Name of curr
6050: 65 6e 74 20 74 65 73 74 20 63 61 73 65 20 2a 2f  ent test case */
6060: 0a 20 20 63 68 61 72 20 63 6f 6c 53 65 70 61 72  .  char colSepar
6070: 61 74 6f 72 5b 32 30 5d 3b 20 2f 2a 20 43 6f 6c  ator[20]; /* Col
6080: 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 63 68  umn separator ch
6090: 61 72 61 63 74 65 72 20 66 6f 72 20 73 65 76 65  aracter for seve
60a0: 72 61 6c 20 6d 6f 64 65 73 20 2a 2f 0a 20 20 63  ral modes */.  c
60b0: 68 61 72 20 72 6f 77 53 65 70 61 72 61 74 6f 72  har rowSeparator
60c0: 5b 32 30 5d 3b 20 2f 2a 20 52 6f 77 20 73 65 70  [20]; /* Row sep
60d0: 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65 72  arator character
60e0: 20 66 6f 72 20 4d 4f 44 45 5f 41 73 63 69 69 20   for MODE_Ascii 
60f0: 2a 2f 0a 20 20 69 6e 74 20 63 6f 6c 57 69 64 74  */.  int colWidt
6100: 68 5b 31 30 30 5d 3b 20 20 20 20 20 2f 2a 20 52  h[100];     /* R
6110: 65 71 75 65 73 74 65 64 20 77 69 64 74 68 20 6f  equested width o
6120: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 77 68  f each column wh
6130: 65 6e 20 69 6e 20 63 6f 6c 75 6d 6e 20 6d 6f 64  en in column mod
6140: 65 2a 2f 0a 20 20 69 6e 74 20 61 63 74 75 61 6c  e*/.  int actual
6150: 57 69 64 74 68 5b 31 30 30 5d 3b 20 20 2f 2a 20  Width[100];  /* 
6160: 41 63 74 75 61 6c 20 77 69 64 74 68 20 6f 66 20  Actual width of 
6170: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
6180: 20 63 68 61 72 20 6e 75 6c 6c 56 61 6c 75 65 5b   char nullValue[
6190: 32 30 5d 3b 20 20 20 20 2f 2a 20 54 68 65 20 74  20];    /* The t
61a0: 65 78 74 20 74 6f 20 70 72 69 6e 74 20 77 68 65  ext to print whe
61b0: 6e 20 61 20 4e 55 4c 4c 20 63 6f 6d 65 73 20 62  n a NULL comes b
61c0: 61 63 6b 20 66 72 6f 6d 0a 20 20 20 20 20 20 20  ack from.       
61d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61e0: 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73    ** the databas
61f0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 6f 75 74 66  e */.  char outf
6200: 69 6c 65 5b 46 49 4c 45 4e 41 4d 45 5f 4d 41 58  ile[FILENAME_MAX
6210: 5d 3b 20 2f 2a 20 46 69 6c 65 6e 61 6d 65 20 66  ]; /* Filename f
6220: 6f 72 20 2a 6f 75 74 20 2a 2f 0a 20 20 63 6f 6e  or *out */.  con
6230: 73 74 20 63 68 61 72 20 2a 7a 44 62 46 69 6c 65  st char *zDbFile
6240: 6e 61 6d 65 3b 20 20 20 20 2f 2a 20 6e 61 6d 65  name;    /* name
6250: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
6260: 20 66 69 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20   file */.  char 
6270: 2a 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 3b 20 20  *zFreeOnClose;  
6280: 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 6e 61         /* Filena
6290: 6d 65 20 74 6f 20 66 72 65 65 20 77 68 65 6e 20  me to free when 
62a0: 63 6c 6f 73 69 6e 67 20 2a 2f 0a 20 20 63 6f 6e  closing */.  con
62b0: 73 74 20 63 68 61 72 20 2a 7a 56 66 73 3b 20 20  st char *zVfs;  
62c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
62d0: 20 6f 66 20 56 46 53 20 74 6f 20 75 73 65 20 2a   of VFS to use *
62e0: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  /.  sqlite3_stmt
62f0: 20 2a 70 53 74 6d 74 3b 20 20 20 2f 2a 20 43 75   *pStmt;   /* Cu
6300: 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20  rrent statement 
6310: 69 66 20 61 6e 79 2e 20 2a 2f 0a 20 20 46 49 4c  if any. */.  FIL
6320: 45 20 2a 70 4c 6f 67 3b 20 20 20 20 20 20 20 20  E *pLog;        
6330: 20 20 20 20 2f 2a 20 57 72 69 74 65 20 6c 6f 67      /* Write log
6340: 20 6f 75 74 70 75 74 20 68 65 72 65 20 2a 2f 0a   output here */.
6350: 20 20 69 6e 74 20 2a 61 69 49 6e 64 65 6e 74 3b    int *aiIndent;
6360: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61           /* Arra
6370: 79 20 6f 66 20 69 6e 64 65 6e 74 73 20 75 73 65  y of indents use
6380: 64 20 69 6e 20 4d 4f 44 45 5f 45 78 70 6c 61 69  d in MODE_Explai
6390: 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 49 6e 64 65  n */.  int nInde
63a0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
63b0: 20 53 69 7a 65 20 6f 66 20 61 72 72 61 79 20 61   Size of array a
63c0: 69 49 6e 64 65 6e 74 5b 5d 20 2a 2f 0a 20 20 69  iIndent[] */.  i
63d0: 6e 74 20 69 49 6e 64 65 6e 74 3b 20 20 20 20 20  nt iIndent;     
63e0: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
63f0: 66 20 63 75 72 72 65 6e 74 20 6f 70 20 69 6e 20  f current op in 
6400: 61 69 49 6e 64 65 6e 74 5b 5d 20 2a 2f 0a 23 69  aiIndent[] */.#i
6410: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
6420: 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29  _ENABLE_SESSION)
6430: 0a 20 20 69 6e 74 20 6e 53 65 73 73 69 6f 6e 3b  .  int nSession;
6440: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6450: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
6460: 20 73 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 4f   sessions */.  O
6470: 70 65 6e 53 65 73 73 69 6f 6e 20 61 53 65 73 73  penSession aSess
6480: 69 6f 6e 5b 34 5d 3b 20 20 2f 2a 20 41 72 72 61  ion[4];  /* Arra
6490: 79 20 6f 66 20 73 65 73 73 69 6f 6e 73 2e 20 20  y of sessions.  
64a0: 5b 30 5d 20 69 73 20 69 6e 20 66 6f 63 75 73 2e  [0] is in focus.
64b0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 45 78 70   */.#endif.  Exp
64c0: 65 72 74 49 6e 66 6f 20 65 78 70 65 72 74 3b 20  ertInfo expert; 
64d0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 20         /* Valid 
64e0: 69 66 20 70 72 65 76 69 6f 75 73 20 63 6f 6d 6d  if previous comm
64f0: 61 6e 64 20 77 61 73 20 22 2e 65 78 70 65 72 74  and was ".expert
6500: 20 4f 50 54 2e 2e 2e 22 20 2a 2f 0a 7d 3b 0a 0a   OPT..." */.};..
6510: 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
6520: 73 20 66 6f 72 20 53 68 65 6c 6c 53 74 61 74 65  s for ShellState
6530: 2e 61 75 74 6f 45 51 50 0a 2a 2f 0a 23 64 65 66  .autoEQP.*/.#def
6540: 69 6e 65 20 41 55 54 4f 45 51 50 5f 6f 66 66 20  ine AUTOEQP_off 
6550: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 41       0.#define A
6560: 55 54 4f 45 51 50 5f 6f 6e 20 20 20 20 20 20 20  UTOEQP_on       
6570: 31 0a 23 64 65 66 69 6e 65 20 41 55 54 4f 45 51  1.#define AUTOEQ
6580: 50 5f 74 72 69 67 67 65 72 20 20 32 0a 23 64 65  P_trigger  2.#de
6590: 66 69 6e 65 20 41 55 54 4f 45 51 50 5f 66 75 6c  fine AUTOEQP_ful
65a0: 6c 20 20 20 20 20 33 0a 0a 2f 2a 0a 2a 2a 20 54  l     3../*.** T
65b0: 68 65 73 65 20 61 72 65 20 74 68 65 20 61 6c 6c  hese are the all
65c0: 6f 77 65 64 20 73 68 65 6c 6c 46 6c 67 73 20 76  owed shellFlgs v
65d0: 61 6c 75 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  alues.*/.#define
65e0: 20 53 48 46 4c 47 5f 50 61 67 65 63 61 63 68 65   SHFLG_Pagecache
65f0: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31        0x00000001
6600: 20 2f 2a 20 54 68 65 20 2d 2d 70 61 67 65 63 61   /* The --pageca
6610: 63 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  che option is us
6620: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48  ed */.#define SH
6630: 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64 65 20 20 20  FLG_Lookaside   
6640: 20 20 20 30 78 30 30 30 30 30 30 30 32 20 2f 2a     0x00000002 /*
6650: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72   Lookaside memor
6660: 79 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  y is used */.#de
6670: 66 69 6e 65 20 53 48 46 4c 47 5f 42 61 63 6b 73  fine SHFLG_Backs
6680: 6c 61 73 68 20 20 20 20 20 20 30 78 30 30 30 30  lash      0x0000
6690: 30 30 30 34 20 2f 2a 20 54 68 65 20 2d 2d 62 61  0004 /* The --ba
66a0: 63 6b 73 6c 61 73 68 20 6f 70 74 69 6f 6e 20 69  ckslash option i
66b0: 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  s used */.#defin
66c0: 65 20 53 48 46 4c 47 5f 50 72 65 73 65 72 76 65  e SHFLG_Preserve
66d0: 52 6f 77 69 64 20 20 30 78 30 30 30 30 30 30 30  Rowid  0x0000000
66e0: 38 20 2f 2a 20 2e 64 75 6d 70 20 70 72 65 73 65  8 /* .dump prese
66f0: 72 76 65 73 20 72 6f 77 69 64 20 76 61 6c 75 65  rves rowid value
6700: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 46  s */.#define SHF
6710: 4c 47 5f 4e 65 77 6c 69 6e 65 73 20 20 20 20 20  LG_Newlines     
6720: 20 20 30 78 30 30 30 30 30 30 31 30 20 2f 2a 20    0x00000010 /* 
6730: 2e 64 75 6d 70 20 2d 2d 6e 65 77 6c 69 6e 65 20  .dump --newline 
6740: 66 6c 61 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  flag */.#define 
6750: 53 48 46 4c 47 5f 43 6f 75 6e 74 43 68 61 6e 67  SHFLG_CountChang
6760: 65 73 20 20 20 30 78 30 30 30 30 30 30 32 30 20  es   0x00000020 
6770: 2f 2a 20 2e 63 68 61 6e 67 65 73 20 73 65 74 74  /* .changes sett
6780: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
6790: 48 46 4c 47 5f 45 63 68 6f 20 20 20 20 20 20 20  HFLG_Echo       
67a0: 20 20 20 20 30 78 30 30 30 30 30 30 34 30 20 2f      0x00000040 /
67b0: 2a 20 2e 65 63 68 6f 20 6f 72 20 2d 2d 65 63 68  * .echo or --ech
67c0: 6f 20 73 65 74 74 69 6e 67 20 2a 2f 0a 0a 2f 2a  o setting */../*
67d0: 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74  .** Macros for t
67e0: 65 73 74 69 6e 67 20 61 6e 64 20 73 65 74 74 69  esting and setti
67f0: 6e 67 20 73 68 65 6c 6c 46 6c 67 73 0a 2a 2f 0a  ng shellFlgs.*/.
6800: 23 64 65 66 69 6e 65 20 53 68 65 6c 6c 48 61 73  #define ShellHas
6810: 46 6c 61 67 28 50 2c 58 29 20 20 20 20 28 28 28  Flag(P,X)    (((
6820: 50 29 2d 3e 73 68 65 6c 6c 46 6c 67 73 20 26 20  P)->shellFlgs & 
6830: 28 58 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (X))!=0).#define
6840: 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28 50 2c   ShellSetFlag(P,
6850: 58 29 20 20 20 20 28 28 50 29 2d 3e 73 68 65 6c  X)    ((P)->shel
6860: 6c 46 6c 67 73 7c 3d 28 58 29 29 0a 23 64 65 66  lFlgs|=(X)).#def
6870: 69 6e 65 20 53 68 65 6c 6c 43 6c 65 61 72 46 6c  ine ShellClearFl
6880: 61 67 28 50 2c 58 29 20 20 28 28 50 29 2d 3e 73  ag(P,X)  ((P)->s
6890: 68 65 6c 6c 46 6c 67 73 26 3d 28 7e 28 58 29 29  hellFlgs&=(~(X))
68a0: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 61  )../*.** These a
68b0: 72 65 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 6d  re the allowed m
68c0: 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  odes..*/.#define
68d0: 20 4d 4f 44 45 5f 4c 69 6e 65 20 20 20 20 20 30   MODE_Line     0
68e0: 20 20 2f 2a 20 4f 6e 65 20 63 6f 6c 75 6d 6e 20    /* One column 
68f0: 70 65 72 20 6c 69 6e 65 2e 20 20 42 6c 61 6e 6b  per line.  Blank
6900: 20 6c 69 6e 65 20 62 65 74 77 65 65 6e 20 72 65   line between re
6910: 63 6f 72 64 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cords */.#define
6920: 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 20 20 20 31   MODE_Column   1
6930: 20 20 2f 2a 20 4f 6e 65 20 72 65 63 6f 72 64 20    /* One record 
6940: 70 65 72 20 6c 69 6e 65 20 69 6e 20 6e 65 61 74  per line in neat
6950: 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66   columns */.#def
6960: 69 6e 65 20 4d 4f 44 45 5f 4c 69 73 74 20 20 20  ine MODE_List   
6970: 20 20 32 20 20 2f 2a 20 4f 6e 65 20 72 65 63 6f    2  /* One reco
6980: 72 64 20 70 65 72 20 6c 69 6e 65 20 77 69 74 68  rd per line with
6990: 20 61 20 73 65 70 61 72 61 74 6f 72 20 2a 2f 0a   a separator */.
69a0: 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 53 65 6d  #define MODE_Sem
69b0: 69 20 20 20 20 20 33 20 20 2f 2a 20 53 61 6d 65  i     3  /* Same
69c0: 20 61 73 20 4d 4f 44 45 5f 4c 69 73 74 20 62 75   as MODE_List bu
69d0: 74 20 61 70 70 65 6e 64 20 22 3b 22 20 74 6f 20  t append ";" to 
69e0: 65 61 63 68 20 6c 69 6e 65 20 2a 2f 0a 23 64 65  each line */.#de
69f0: 66 69 6e 65 20 4d 4f 44 45 5f 48 74 6d 6c 20 20  fine MODE_Html  
6a00: 20 20 20 34 20 20 2f 2a 20 47 65 6e 65 72 61 74     4  /* Generat
6a10: 65 20 61 6e 20 58 48 54 4d 4c 20 74 61 62 6c 65  e an XHTML table
6a20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45   */.#define MODE
6a30: 5f 49 6e 73 65 72 74 20 20 20 35 20 20 2f 2a 20  _Insert   5  /* 
6a40: 47 65 6e 65 72 61 74 65 20 53 51 4c 20 22 69 6e  Generate SQL "in
6a50: 73 65 72 74 22 20 73 74 61 74 65 6d 65 6e 74 73  sert" statements
6a60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45   */.#define MODE
6a70: 5f 51 75 6f 74 65 20 20 20 20 36 20 20 2f 2a 20  _Quote    6  /* 
6a80: 51 75 6f 74 65 20 76 61 6c 75 65 73 20 61 73 20  Quote values as 
6a90: 66 6f 72 20 53 51 4c 20 2a 2f 0a 23 64 65 66 69  for SQL */.#defi
6aa0: 6e 65 20 4d 4f 44 45 5f 54 63 6c 20 20 20 20 20  ne MODE_Tcl     
6ab0: 20 37 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20   7  /* Generate 
6ac0: 41 4e 53 49 2d 43 20 6f 72 20 54 43 4c 20 71 75  ANSI-C or TCL qu
6ad0: 6f 74 65 64 20 65 6c 65 6d 65 6e 74 73 20 2a 2f  oted elements */
6ae0: 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 43 73  .#define MODE_Cs
6af0: 76 20 20 20 20 20 20 38 20 20 2f 2a 20 51 75 6f  v      8  /* Quo
6b00: 74 65 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62  te strings, numb
6b10: 65 72 73 20 61 72 65 20 70 6c 61 69 6e 20 2a 2f  ers are plain */
6b20: 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 45 78  .#define MODE_Ex
6b30: 70 6c 61 69 6e 20 20 39 20 20 2f 2a 20 4c 69 6b  plain  9  /* Lik
6b40: 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 2c 20 62  e MODE_Column, b
6b50: 75 74 20 64 6f 20 6e 6f 74 20 74 72 75 6e 63 61  ut do not trunca
6b60: 74 65 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  te data */.#defi
6b70: 6e 65 20 4d 4f 44 45 5f 41 73 63 69 69 20 20 20  ne MODE_Ascii   
6b80: 31 30 20 20 2f 2a 20 55 73 65 20 41 53 43 49 49  10  /* Use ASCII
6b90: 20 75 6e 69 74 20 61 6e 64 20 72 65 63 6f 72 64   unit and record
6ba0: 20 73 65 70 61 72 61 74 6f 72 73 20 28 30 78 31   separators (0x1
6bb0: 46 2f 30 78 31 45 29 20 2a 2f 0a 23 64 65 66 69  F/0x1E) */.#defi
6bc0: 6e 65 20 4d 4f 44 45 5f 50 72 65 74 74 79 20 20  ne MODE_Pretty  
6bd0: 31 31 20 20 2f 2a 20 50 72 65 74 74 79 2d 70 72  11  /* Pretty-pr
6be0: 69 6e 74 20 73 63 68 65 6d 61 73 20 2a 2f 0a 0a  int schemas */..
6bf0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
6c00: 72 20 2a 6d 6f 64 65 44 65 73 63 72 5b 5d 20 3d  r *modeDescr[] =
6c10: 20 7b 0a 20 20 22 6c 69 6e 65 22 2c 0a 20 20 22   {.  "line",.  "
6c20: 63 6f 6c 75 6d 6e 22 2c 0a 20 20 22 6c 69 73 74  column",.  "list
6c30: 22 2c 0a 20 20 22 73 65 6d 69 22 2c 0a 20 20 22  ",.  "semi",.  "
6c40: 68 74 6d 6c 22 2c 0a 20 20 22 69 6e 73 65 72 74  html",.  "insert
6c50: 22 2c 0a 20 20 22 71 75 6f 74 65 22 2c 0a 20 20  ",.  "quote",.  
6c60: 22 74 63 6c 22 2c 0a 20 20 22 63 73 76 22 2c 0a  "tcl",.  "csv",.
6c70: 20 20 22 65 78 70 6c 61 69 6e 22 2c 0a 20 20 22    "explain",.  "
6c80: 61 73 63 69 69 22 2c 0a 20 20 22 70 72 65 74 74  ascii",.  "prett
6c90: 79 70 72 69 6e 74 22 2c 0a 7d 3b 0a 0a 2f 2a 0a  yprint",.};../*.
6ca0: 2a 2a 20 54 68 65 73 65 20 61 72 65 20 74 68 65  ** These are the
6cb0: 20 63 6f 6c 75 6d 6e 2f 72 6f 77 2f 6c 69 6e 65   column/row/line
6cc0: 20 73 65 70 61 72 61 74 6f 72 73 20 75 73 65 64   separators used
6cd0: 20 62 79 20 74 68 65 20 76 61 72 69 6f 75 73 0a   by the various.
6ce0: 2a 2a 20 69 6d 70 6f 72 74 2f 65 78 70 6f 72 74  ** import/export
6cf0: 20 6d 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69   modes..*/.#defi
6d00: 6e 65 20 53 45 50 5f 43 6f 6c 75 6d 6e 20 20 20  ne SEP_Column   
6d10: 20 22 7c 22 0a 23 64 65 66 69 6e 65 20 53 45 50   "|".#define SEP
6d20: 5f 52 6f 77 20 20 20 20 20 20 20 22 5c 6e 22 0a  _Row       "\n".
6d30: 23 64 65 66 69 6e 65 20 53 45 50 5f 54 61 62 20  #define SEP_Tab 
6d40: 20 20 20 20 20 20 22 5c 74 22 0a 23 64 65 66 69        "\t".#defi
6d50: 6e 65 20 53 45 50 5f 53 70 61 63 65 20 20 20 20  ne SEP_Space    
6d60: 20 22 20 22 0a 23 64 65 66 69 6e 65 20 53 45 50   " ".#define SEP
6d70: 5f 43 6f 6d 6d 61 20 20 20 20 20 22 2c 22 0a 23  _Comma     ",".#
6d80: 64 65 66 69 6e 65 20 53 45 50 5f 43 72 4c 66 20  define SEP_CrLf 
6d90: 20 20 20 20 20 22 5c 72 5c 6e 22 0a 23 64 65 66       "\r\n".#def
6da0: 69 6e 65 20 53 45 50 5f 55 6e 69 74 20 20 20 20  ine SEP_Unit    
6db0: 20 20 22 5c 78 31 46 22 0a 23 64 65 66 69 6e 65    "\x1F".#define
6dc0: 20 53 45 50 5f 52 65 63 6f 72 64 20 20 20 20 22   SEP_Record    "
6dd0: 5c 78 31 45 22 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d  \x1E"../*.** Num
6de0: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
6df0: 69 6e 20 61 6e 20 61 72 72 61 79 0a 2a 2f 0a 23  in an array.*/.#
6e00: 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65  define ArraySize
6e10: 28 58 29 20 20 28 69 6e 74 29 28 73 69 7a 65 6f  (X)  (int)(sizeo
6e20: 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d  f(X)/sizeof(X[0]
6e30: 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 61 6c 6c  ))../*.** A call
6e40: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 73 71 6c  back for the sql
6e50: 69 74 65 33 5f 6c 6f 67 28 29 20 69 6e 74 65 72  ite3_log() inter
6e60: 66 61 63 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  face..*/.static 
6e70: 76 6f 69 64 20 73 68 65 6c 6c 4c 6f 67 28 76 6f  void shellLog(vo
6e80: 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20 69 45  id *pArg, int iE
6e90: 72 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68  rrCode, const ch
6ea0: 61 72 20 2a 7a 4d 73 67 29 7b 0a 20 20 53 68 65  ar *zMsg){.  She
6eb0: 6c 6c 53 74 61 74 65 20 2a 70 20 3d 20 28 53 68  llState *p = (Sh
6ec0: 65 6c 6c 53 74 61 74 65 2a 29 70 41 72 67 3b 0a  ellState*)pArg;.
6ed0: 20 20 69 66 28 20 70 2d 3e 70 4c 6f 67 3d 3d 30    if( p->pLog==0
6ee0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 75 74 66   ) return;.  utf
6ef0: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 70 4c 6f 67  8_printf(p->pLog
6f00: 2c 20 22 28 25 64 29 20 25 73 5c 6e 22 2c 20 69  , "(%d) %s\n", i
6f10: 45 72 72 43 6f 64 65 2c 20 7a 4d 73 67 29 3b 0a  ErrCode, zMsg);.
6f20: 20 20 66 66 6c 75 73 68 28 70 2d 3e 70 4c 6f 67    fflush(p->pLog
6f30: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70  );.}../*.** Outp
6f40: 75 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  ut the given str
6f50: 69 6e 67 20 61 73 20 61 20 68 65 78 2d 65 6e 63  ing as a hex-enc
6f60: 6f 64 65 64 20 62 6c 6f 62 20 28 65 67 2e 20 58  oded blob (eg. X
6f70: 27 31 32 33 34 27 20 29 0a 2a 2f 0a 73 74 61 74  '1234' ).*/.stat
6f80: 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 68  ic void output_h
6f90: 65 78 5f 62 6c 6f 62 28 46 49 4c 45 20 2a 6f 75  ex_blob(FILE *ou
6fa0: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  t, const void *p
6fb0: 42 6c 6f 62 2c 20 69 6e 74 20 6e 42 6c 6f 62 29  Blob, int nBlob)
6fc0: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61  {.  int i;.  cha
6fd0: 72 20 2a 7a 42 6c 6f 62 20 3d 20 28 63 68 61 72  r *zBlob = (char
6fe0: 20 2a 29 70 42 6c 6f 62 3b 0a 20 20 72 61 77 5f   *)pBlob;.  raw_
6ff0: 70 72 69 6e 74 66 28 6f 75 74 2c 22 58 27 22 29  printf(out,"X'")
7000: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
7010: 42 6c 6f 62 3b 20 69 2b 2b 29 7b 20 72 61 77 5f  Blob; i++){ raw_
7020: 70 72 69 6e 74 66 28 6f 75 74 2c 22 25 30 32 78  printf(out,"%02x
7030: 22 2c 7a 42 6c 6f 62 5b 69 5d 26 30 78 66 66 29  ",zBlob[i]&0xff)
7040: 3b 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e 74 66  ; }.  raw_printf
7050: 28 6f 75 74 2c 22 27 22 29 3b 0a 7d 0a 0a 2f 2a  (out,"'");.}../*
7060: 0a 2a 2a 20 46 69 6e 64 20 61 20 73 74 72 69 6e  .** Find a strin
7070: 67 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f  g that is not fo
7080: 75 6e 64 20 61 6e 79 77 68 65 72 65 20 69 6e 20  und anywhere in 
7090: 7a 5b 5d 2e 20 20 52 65 74 75 72 6e 20 61 20 70  z[].  Return a p
70a0: 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68 61  ointer.** to tha
70b0: 74 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  t string..**.** 
70c0: 54 72 79 20 74 6f 20 75 73 65 20 7a 41 20 61 6e  Try to use zA an
70d0: 64 20 7a 42 20 66 69 72 73 74 2e 20 20 49 66 20  d zB first.  If 
70e0: 62 6f 74 68 20 6f 66 20 74 68 6f 73 65 20 61 72  both of those ar
70f0: 65 20 61 6c 72 65 61 64 79 20 66 6f 75 6e 64 20  e already found 
7100: 69 6e 20 7a 5b 5d 0a 2a 2a 20 74 68 65 6e 20 6d  in z[].** then m
7110: 61 6b 65 20 75 70 20 73 6f 6d 65 20 73 74 72 69  ake up some stri
7120: 6e 67 20 61 6e 64 20 73 74 6f 72 65 20 69 74 20  ng and store it 
7130: 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 7a 42  in the buffer zB
7140: 75 66 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  uf..*/.static co
7150: 6e 73 74 20 63 68 61 72 20 2a 75 6e 75 73 65 64  nst char *unused
7160: 5f 73 74 72 69 6e 67 28 0a 20 20 63 6f 6e 73 74  _string(.  const
7170: 20 63 68 61 72 20 2a 7a 2c 20 20 20 20 20 20 20   char *z,       
7180: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7190: 52 65 73 75 6c 74 20 6d 75 73 74 20 6e 6f 74 20  Result must not 
71a0: 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20  appear anywhere 
71b0: 69 6e 20 7a 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  in z */.  const 
71c0: 63 68 61 72 20 2a 7a 41 2c 20 63 6f 6e 73 74 20  char *zA, const 
71d0: 63 68 61 72 20 2a 7a 42 2c 20 20 20 2f 2a 20 54  char *zB,   /* T
71e0: 72 79 20 74 68 65 73 65 20 66 69 72 73 74 20 2a  ry these first *
71f0: 2f 0a 20 20 63 68 61 72 20 2a 7a 42 75 66 20 20  /.  char *zBuf  
7200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7210: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
7220: 6f 20 73 74 6f 72 65 20 61 20 67 65 6e 65 72 61  o store a genera
7230: 74 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b  ted string */.){
7240: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 20 3d 20  .  unsigned i = 
7250: 30 3b 0a 20 20 69 66 28 20 73 74 72 73 74 72 28  0;.  if( strstr(
7260: 7a 2c 20 7a 41 29 3d 3d 30 20 29 20 72 65 74 75  z, zA)==0 ) retu
7270: 72 6e 20 7a 41 3b 0a 20 20 69 66 28 20 73 74 72  rn zA;.  if( str
7280: 73 74 72 28 7a 2c 20 7a 42 29 3d 3d 30 20 29 20  str(z, zB)==0 ) 
7290: 72 65 74 75 72 6e 20 7a 42 3b 0a 20 20 64 6f 7b  return zB;.  do{
72a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
72b0: 72 69 6e 74 66 28 32 30 2c 7a 42 75 66 2c 22 28  rintf(20,zBuf,"(
72c0: 25 73 25 75 29 22 2c 20 7a 41 2c 20 69 2b 2b 29  %s%u)", zA, i++)
72d0: 3b 0a 20 20 7d 77 68 69 6c 65 28 20 73 74 72 73  ;.  }while( strs
72e0: 74 72 28 7a 2c 7a 42 75 66 29 21 3d 30 20 29 3b  tr(z,zBuf)!=0 );
72f0: 0a 20 20 72 65 74 75 72 6e 20 7a 42 75 66 3b 0a  .  return zBuf;.
7300: 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20  }../*.** Output 
7310: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
7320: 20 61 73 20 61 20 71 75 6f 74 65 64 20 73 74 72   as a quoted str
7330: 69 6e 67 20 75 73 69 6e 67 20 53 51 4c 20 71 75  ing using SQL qu
7340: 6f 74 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e  oting convention
7350: 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
7360: 6f 3a 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64  o: output_quoted
7370: 5f 65 73 63 61 70 65 64 5f 73 74 72 69 6e 67 28  _escaped_string(
7380: 29 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ).*/.static void
7390: 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73   output_quoted_s
73a0: 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75 74 2c  tring(FILE *out,
73b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b   const char *z){
73c0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72  .  int i;.  char
73d0: 20 63 3b 0a 20 20 73 65 74 42 69 6e 61 72 79 4d   c;.  setBinaryM
73e0: 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a 20 20 66  ode(out, 1);.  f
73f0: 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20 7a 5b 69  or(i=0; (c = z[i
7400: 5d 29 21 3d 30 20 26 26 20 63 21 3d 27 5c 27 27  ])!=0 && c!='\''
7410: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 63  ; i++){}.  if( c
7420: 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  ==0 ){.    utf8_
7430: 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 25 73 27  printf(out,"'%s'
7440: 22 2c 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ",z);.  }else{. 
7450: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
7460: 74 2c 20 22 27 22 29 3b 0a 20 20 20 20 77 68 69  t, "'");.    whi
7470: 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 20 20  le( *z ){.      
7480: 66 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20 7a 5b  for(i=0; (c = z[
7490: 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27 5c 27  i])!=0 && c!='\'
74a0: 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20  '; i++){}.      
74b0: 69 66 28 20 63 3d 3d 27 5c 27 27 20 29 20 69 2b  if( c=='\'' ) i+
74c0: 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 69 20 29  +;.      if( i )
74d0: 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
74e0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 2e 2a 73  rintf(out, "%.*s
74f0: 22 2c 20 69 2c 20 7a 29 3b 0a 20 20 20 20 20 20  ", i, z);.      
7500: 20 20 7a 20 2b 3d 20 69 3b 0a 20 20 20 20 20 20    z += i;.      
7510: 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27  }.      if( c=='
7520: 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 20 20 72  \'' ){.        r
7530: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
7540: 27 22 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e  '");.        con
7550: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20  tinue;.      }. 
7560: 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29 7b       if( c==0 ){
7570: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
7580: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 2b        }.      z+
7590: 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77  +;.    }.    raw
75a0: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 27 22  _printf(out, "'"
75b0: 29 3b 0a 20 20 7d 0a 20 20 73 65 74 54 65 78 74  );.  }.  setText
75c0: 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a 7d 0a  Mode(out, 1);.}.
75d0: 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 68  ./*.** Output th
75e0: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
75f0: 73 20 61 20 71 75 6f 74 65 64 20 73 74 72 69 6e  s a quoted strin
7600: 67 20 75 73 69 6e 67 20 53 51 4c 20 71 75 6f 74  g using SQL quot
7610: 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e  ing conventions.
7620: 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 6c 6c  .** Additionalll
7630: 79 20 2c 20 65 73 63 61 70 65 20 74 68 65 20 22  y , escape the "
7640: 5c 6e 22 20 61 6e 64 20 22 5c 72 22 20 63 68 61  \n" and "\r" cha
7650: 72 61 63 74 65 72 73 20 73 6f 20 74 68 61 74 20  racters so that 
7660: 74 68 65 79 20 64 6f 20 6e 6f 74 0a 2a 2a 20 67  they do not.** g
7670: 65 74 20 63 6f 72 72 75 70 74 65 64 20 62 79 20  et corrupted by 
7680: 65 6e 64 2d 6f 66 2d 6c 69 6e 65 20 74 72 61 6e  end-of-line tran
7690: 73 6c 61 74 69 6f 6e 20 66 61 63 69 6c 69 74 69  slation faciliti
76a0: 65 73 20 69 6e 20 73 6f 6d 65 20 6f 70 65 72 61  es in some opera
76b0: 74 69 6e 67 0a 2a 2a 20 73 79 73 74 65 6d 73 2e  ting.** systems.
76c0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 6c  .**.** This is l
76d0: 69 6b 65 20 6f 75 74 70 75 74 5f 71 75 6f 74 65  ike output_quote
76e0: 64 5f 73 74 72 69 6e 67 28 29 20 62 75 74 20 77  d_string() but w
76f0: 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e  ith the addition
7700: 20 6f 66 20 74 68 65 20 5c 72 5c 6e 0a 2a 2a 20   of the \r\n.** 
7710: 65 73 63 61 70 65 20 6d 65 63 68 61 6e 69 73 6d  escape mechanism
7720: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
7730: 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 65   output_quoted_e
7740: 73 63 61 70 65 64 5f 73 74 72 69 6e 67 28 46 49  scaped_string(FI
7750: 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63  LE *out, const c
7760: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
7770: 3b 0a 20 20 63 68 61 72 20 63 3b 0a 20 20 73 65  ;.  char c;.  se
7780: 74 42 69 6e 61 72 79 4d 6f 64 65 28 6f 75 74 2c  tBinaryMode(out,
7790: 20 31 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20   1);.  for(i=0; 
77a0: 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26 26  (c = z[i])!=0 &&
77b0: 20 63 21 3d 27 5c 27 27 20 26 26 20 63 21 3d 27   c!='\'' && c!='
77c0: 5c 6e 27 20 26 26 20 63 21 3d 27 5c 72 27 3b 20  \n' && c!='\r'; 
77d0: 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 63 3d 3d  i++){}.  if( c==
77e0: 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  0 ){.    utf8_pr
77f0: 69 6e 74 66 28 6f 75 74 2c 22 27 25 73 27 22 2c  intf(out,"'%s'",
7800: 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  z);.  }else{.   
7810: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 4c   const char *zNL
7820: 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20   = 0;.    const 
7830: 63 68 61 72 20 2a 7a 43 52 20 3d 20 30 3b 0a 20  char *zCR = 0;. 
7840: 20 20 20 69 6e 74 20 6e 4e 4c 20 3d 20 30 3b 0a     int nNL = 0;.
7850: 20 20 20 20 69 6e 74 20 6e 43 52 20 3d 20 30 3b      int nCR = 0;
7860: 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 31 5b  .    char zBuf1[
7870: 32 30 5d 2c 20 7a 42 75 66 32 5b 32 30 5d 3b 0a  20], zBuf2[20];.
7880: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 5b 69      for(i=0; z[i
7890: 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  ]; i++){.      i
78a0: 66 28 20 7a 5b 69 5d 3d 3d 27 5c 6e 27 20 29 20  f( z[i]=='\n' ) 
78b0: 6e 4e 4c 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28  nNL++;.      if(
78c0: 20 7a 5b 69 5d 3d 3d 27 5c 72 27 20 29 20 6e 43   z[i]=='\r' ) nC
78d0: 52 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  R++;.    }.    i
78e0: 66 28 20 6e 4e 4c 20 29 7b 0a 20 20 20 20 20 20  f( nNL ){.      
78f0: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  raw_printf(out, 
7900: 22 72 65 70 6c 61 63 65 28 22 29 3b 0a 20 20 20  "replace(");.   
7910: 20 20 20 7a 4e 4c 20 3d 20 75 6e 75 73 65 64 5f     zNL = unused_
7920: 73 74 72 69 6e 67 28 7a 2c 20 22 5c 5c 6e 22 2c  string(z, "\\n",
7930: 20 22 5c 5c 30 31 32 22 2c 20 7a 42 75 66 31 29   "\\012", zBuf1)
7940: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
7950: 6e 43 52 20 29 7b 0a 20 20 20 20 20 20 72 61 77  nCR ){.      raw
7960: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 72 65  _printf(out, "re
7970: 70 6c 61 63 65 28 22 29 3b 0a 20 20 20 20 20 20  place(");.      
7980: 7a 43 52 20 3d 20 75 6e 75 73 65 64 5f 73 74 72  zCR = unused_str
7990: 69 6e 67 28 7a 2c 20 22 5c 5c 72 22 2c 20 22 5c  ing(z, "\\r", "\
79a0: 5c 30 31 35 22 2c 20 7a 42 75 66 32 29 3b 0a 20  \015", zBuf2);. 
79b0: 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69     }.    raw_pri
79c0: 6e 74 66 28 6f 75 74 2c 20 22 27 22 29 3b 0a 20  ntf(out, "'");. 
79d0: 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a     while( *z ){.
79e0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 28        for(i=0; (
79f0: 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26 26 20  c = z[i])!=0 && 
7a00: 63 21 3d 27 5c 6e 27 20 26 26 20 63 21 3d 27 5c  c!='\n' && c!='\
7a10: 72 27 20 26 26 20 63 21 3d 27 5c 27 27 3b 20 69  r' && c!='\''; i
7a20: 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 69 66 28 20  ++){}.      if( 
7a30: 63 3d 3d 27 5c 27 27 20 29 20 69 2b 2b 3b 0a 20  c=='\'' ) i++;. 
7a40: 20 20 20 20 20 69 66 28 20 69 20 29 7b 0a 20 20       if( i ){.  
7a50: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
7a60: 66 28 6f 75 74 2c 20 22 25 2e 2a 73 22 2c 20 69  f(out, "%.*s", i
7a70: 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 7a 20  , z);.        z 
7a80: 2b 3d 20 69 3b 0a 20 20 20 20 20 20 7d 0a 20 20  += i;.      }.  
7a90: 20 20 20 20 69 66 28 20 63 3d 3d 27 5c 27 27 20      if( c=='\'' 
7aa0: 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
7ab0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 27 22 29 3b  rintf(out, "'");
7ac0: 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75  .        continu
7ad0: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  e;.      }.     
7ae0: 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20 20 20   if( c==0 ){.   
7af0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
7b00: 20 20 7d 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20    }.      z++;. 
7b10: 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c 6e 27       if( c=='\n'
7b20: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
7b30: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22  printf(out, "%s"
7b40: 2c 20 7a 4e 4c 29 3b 0a 20 20 20 20 20 20 20 20  , zNL);.        
7b50: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
7b60: 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  }.      raw_prin
7b70: 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a 43  tf(out, "%s", zC
7b80: 52 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 61  R);.    }.    ra
7b90: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 27  w_printf(out, "'
7ba0: 22 29 3b 0a 20 20 20 20 69 66 28 20 6e 43 52 20  ");.    if( nCR 
7bb0: 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
7bc0: 6e 74 66 28 6f 75 74 2c 20 22 2c 27 25 73 27 2c  ntf(out, ",'%s',
7bd0: 63 68 61 72 28 31 33 29 29 22 2c 20 7a 43 52 29  char(13))", zCR)
7be0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
7bf0: 6e 4e 4c 20 29 7b 0a 20 20 20 20 20 20 72 61 77  nNL ){.      raw
7c00: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 2c 27  _printf(out, ",'
7c10: 25 73 27 2c 63 68 61 72 28 31 30 29 29 22 2c 20  %s',char(10))", 
7c20: 7a 4e 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  zNL);.    }.  }.
7c30: 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28 6f 75    setTextMode(ou
7c40: 74 2c 20 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  t, 1);.}../*.** 
7c50: 4f 75 74 70 75 74 20 74 68 65 20 67 69 76 65 6e  Output the given
7c60: 20 73 74 72 69 6e 67 20 61 73 20 61 20 71 75 6f   string as a quo
7c70: 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ted according to
7c80: 20 43 20 6f 72 20 54 43 4c 20 71 75 6f 74 69 6e   C or TCL quotin
7c90: 67 20 72 75 6c 65 73 2e 0a 2a 2f 0a 73 74 61 74  g rules..*/.stat
7ca0: 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 63  ic void output_c
7cb0: 5f 73 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75  _string(FILE *ou
7cc0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  t, const char *z
7cd0: 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  ){.  unsigned in
7ce0: 74 20 63 3b 0a 20 20 66 70 75 74 63 28 27 22 27  t c;.  fputc('"'
7cf0: 2c 20 6f 75 74 29 3b 0a 20 20 77 68 69 6c 65 28  , out);.  while(
7d00: 20 28 63 20 3d 20 2a 28 7a 2b 2b 29 29 21 3d 30   (c = *(z++))!=0
7d10: 20 29 7b 0a 20 20 20 20 69 66 28 20 63 3d 3d 27   ){.    if( c=='
7d20: 5c 5c 27 20 29 7b 0a 20 20 20 20 20 20 66 70 75  \\' ){.      fpu
7d30: 74 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20 20 20  tc(c, out);.    
7d40: 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74 29 3b    fputc(c, out);
7d50: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
7d60: 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20 20 20 66  =='"' ){.      f
7d70: 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b  putc('\\', out);
7d80: 0a 20 20 20 20 20 20 66 70 75 74 63 28 27 22 27  .      fputc('"'
7d90: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73  , out);.    }els
7da0: 65 20 69 66 28 20 63 3d 3d 27 5c 74 27 20 29 7b  e if( c=='\t' ){
7db0: 0a 20 20 20 20 20 20 66 70 75 74 63 28 27 5c 5c  .      fputc('\\
7dc0: 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66  ', out);.      f
7dd0: 70 75 74 63 28 27 74 27 2c 20 6f 75 74 29 3b 0a  putc('t', out);.
7de0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
7df0: 3d 27 5c 6e 27 20 29 7b 0a 20 20 20 20 20 20 66  ='\n' ){.      f
7e00: 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b  putc('\\', out);
7e10: 0a 20 20 20 20 20 20 66 70 75 74 63 28 27 6e 27  .      fputc('n'
7e20: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73  , out);.    }els
7e30: 65 20 69 66 28 20 63 3d 3d 27 5c 72 27 20 29 7b  e if( c=='\r' ){
7e40: 0a 20 20 20 20 20 20 66 70 75 74 63 28 27 5c 5c  .      fputc('\\
7e50: 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66  ', out);.      f
7e60: 70 75 74 63 28 27 72 27 2c 20 6f 75 74 29 3b 0a  putc('r', out);.
7e70: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 21 69      }else if( !i
7e80: 73 70 72 69 6e 74 28 63 26 30 78 66 66 29 20 29  sprint(c&0xff) )
7e90: 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
7ea0: 74 66 28 6f 75 74 2c 20 22 5c 5c 25 30 33 6f 22  tf(out, "\\%03o"
7eb0: 2c 20 63 26 30 78 66 66 29 3b 0a 20 20 20 20 7d  , c&0xff);.    }
7ec0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 70 75 74  else{.      fput
7ed0: 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d  c(c, out);.    }
7ee0: 0a 20 20 7d 0a 20 20 66 70 75 74 63 28 27 22 27  .  }.  fputc('"'
7ef0: 2c 20 6f 75 74 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  , out);.}../*.**
7f00: 20 4f 75 74 70 75 74 20 74 68 65 20 67 69 76 65   Output the give
7f10: 6e 20 73 74 72 69 6e 67 20 77 69 74 68 20 63 68  n string with ch
7f20: 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 72  aracters that ar
7f30: 65 20 73 70 65 63 69 61 6c 20 74 6f 0a 2a 2a 20  e special to.** 
7f40: 48 54 4d 4c 20 65 73 63 61 70 65 64 2e 0a 2a 2f  HTML escaped..*/
7f50: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74  .static void out
7f60: 70 75 74 5f 68 74 6d 6c 5f 73 74 72 69 6e 67 28  put_html_string(
7f70: 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74  FILE *out, const
7f80: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74   char *z){.  int
7f90: 20 69 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29   i;.  if( z==0 )
7fa0: 20 7a 20 3d 20 22 22 3b 0a 20 20 77 68 69 6c 65   z = "";.  while
7fb0: 28 20 2a 7a 20 29 7b 0a 20 20 20 20 66 6f 72 28  ( *z ){.    for(
7fc0: 69 3d 30 3b 20 20 20 7a 5b 69 5d 0a 20 20 20 20  i=0;   z[i].    
7fd0: 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69 5d 21          && z[i]!
7fe0: 3d 27 3c 27 0a 20 20 20 20 20 20 20 20 20 20 20  ='<'.           
7ff0: 20 26 26 20 7a 5b 69 5d 21 3d 27 26 27 0a 20 20   && z[i]!='&'.  
8000: 20 20 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69            && z[i
8010: 5d 21 3d 27 3e 27 0a 20 20 20 20 20 20 20 20 20  ]!='>'.         
8020: 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 5c 22 27     && z[i]!='\"'
8030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
8040: 7a 5b 69 5d 21 3d 27 5c 27 27 3b 0a 20 20 20 20  z[i]!='\'';.    
8050: 20 20 20 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 69      i++){}.    i
8060: 66 28 20 69 3e 30 20 29 7b 0a 20 20 20 20 20 20  f( i>0 ){.      
8070: 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c  utf8_printf(out,
8080: 22 25 2e 2a 73 22 2c 69 2c 7a 29 3b 0a 20 20 20  "%.*s",i,z);.   
8090: 20 7d 0a 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d   }.    if( z[i]=
80a0: 3d 27 3c 27 20 29 7b 0a 20 20 20 20 20 20 72 61  ='<' ){.      ra
80b0: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 6c  w_printf(out,"&l
80c0: 74 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  t;");.    }else 
80d0: 69 66 28 20 7a 5b 69 5d 3d 3d 27 26 27 20 29 7b  if( z[i]=='&' ){
80e0: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
80f0: 66 28 6f 75 74 2c 22 26 61 6d 70 3b 22 29 3b 0a  f(out,"&amp;");.
8100: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b      }else if( z[
8110: 69 5d 3d 3d 27 3e 27 20 29 7b 0a 20 20 20 20 20  i]=='>' ){.     
8120: 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
8130: 22 26 67 74 3b 22 29 3b 0a 20 20 20 20 7d 65 6c  "&gt;");.    }el
8140: 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 22  se if( z[i]=='\"
8150: 27 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  ' ){.      raw_p
8160: 72 69 6e 74 66 28 6f 75 74 2c 22 26 71 75 6f 74  rintf(out,"&quot
8170: 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ;");.    }else i
8180: 66 28 20 7a 5b 69 5d 3d 3d 27 5c 27 27 20 29 7b  f( z[i]=='\'' ){
8190: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
81a0: 66 28 6f 75 74 2c 22 26 23 33 39 3b 22 29 3b 0a  f(out,"&#39;");.
81b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
81c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
81d0: 20 20 7a 20 2b 3d 20 69 20 2b 20 31 3b 0a 20 20    z += i + 1;.  
81e0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 61 20  }.}../*.** If a 
81f0: 66 69 65 6c 64 20 63 6f 6e 74 61 69 6e 73 20 61  field contains a
8200: 6e 79 20 63 68 61 72 61 63 74 65 72 20 69 64 65  ny character ide
8210: 6e 74 69 66 69 65 64 20 62 79 20 61 20 31 20 69  ntified by a 1 i
8220: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  n the following.
8230: 2a 2a 20 61 72 72 61 79 2c 20 74 68 65 6e 20 74  ** array, then t
8240: 68 65 20 73 74 72 69 6e 67 20 6d 75 73 74 20 62  he string must b
8250: 65 20 71 75 6f 74 65 64 20 66 6f 72 20 43 53 56  e quoted for CSV
8260: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73  ..*/.static cons
8270: 74 20 63 68 61 72 20 6e 65 65 64 43 73 76 51 75  t char needCsvQu
8280: 6f 74 65 5b 5d 20 3d 20 7b 0a 20 20 31 2c 20 31  ote[] = {.  1, 1
8290: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
82a0: 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,   1, 1, 1, 1
82b0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20  , 1, 1, 1, 1,.  
82c0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
82d0: 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20  , 1, 1,   1, 1, 
82e0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
82f0: 2c 0a 20 20 31 2c 20 30 2c 20 31 2c 20 30 2c 20  ,.  1, 0, 1, 0, 
8300: 30 2c 20 30 2c 20 30 2c 20 31 2c 20 20 20 30 2c  0, 0, 0, 1,   0,
8310: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
8320: 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c  0, 0,.  0, 0, 0,
8330: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
8340: 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c    0, 0, 0, 0, 0,
8350: 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30   0, 0, 0,.  0, 0
8360: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
8370: 20 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30   0,   0, 0, 0, 0
8380: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20  , 0, 0, 0, 0,.  
8390: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
83a0: 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20  , 0, 0,   0, 0, 
83b0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
83c0: 2c 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  ,.  0, 0, 0, 0, 
83d0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20 30 2c  0, 0, 0, 0,   0,
83e0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
83f0: 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c  0, 0,.  0, 0, 0,
8400: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
8410: 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c    0, 0, 0, 0, 0,
8420: 20 30 2c 20 30 2c 20 31 2c 0a 20 20 31 2c 20 31   0, 0, 1,.  1, 1
8430: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
8440: 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,   1, 1, 1, 1
8450: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20  , 1, 1, 1, 1,.  
8460: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8470: 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20  , 1, 1,   1, 1, 
8480: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8490: 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  ,.  1, 1, 1, 1, 
84a0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c  1, 1, 1, 1,   1,
84b0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
84c0: 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c  1, 1,.  1, 1, 1,
84d0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
84e0: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
84f0: 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31   1, 1, 1,.  1, 1
8500: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
8510: 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,   1, 1, 1, 1
8520: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20  , 1, 1, 1, 1,.  
8530: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8540: 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20  , 1, 1,   1, 1, 
8550: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8560: 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  ,.  1, 1, 1, 1, 
8570: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c  1, 1, 1, 1,   1,
8580: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8590: 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c  1, 1,.  1, 1, 1,
85a0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
85b0: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
85c0: 20 31 2c 20 31 2c 20 31 2c 0a 7d 3b 0a 0a 2f 2a   1, 1, 1,.};../*
85d0: 0a 2a 2a 20 4f 75 74 70 75 74 20 61 20 73 69 6e  .** Output a sin
85e0: 67 6c 65 20 74 65 72 6d 20 6f 66 20 43 53 56 2e  gle term of CSV.
85f0: 20 20 41 63 74 75 61 6c 6c 79 2c 20 70 2d 3e 63    Actually, p->c
8600: 6f 6c 53 65 70 61 72 61 74 6f 72 20 69 73 20 75  olSeparator is u
8610: 73 65 64 20 66 6f 72 0a 2a 2a 20 74 68 65 20 73  sed for.** the s
8620: 65 70 61 72 61 74 6f 72 2c 20 77 68 69 63 68 20  eparator, which 
8630: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
8640: 65 20 61 20 63 6f 6d 6d 61 2e 20 20 70 2d 3e 6e  e a comma.  p->n
8650: 75 6c 6c 56 61 6c 75 65 20 69 73 0a 2a 2a 20 74  ullValue is.** t
8660: 68 65 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 20 20  he null value.  
8670: 53 74 72 69 6e 67 73 20 61 72 65 20 71 75 6f 74  Strings are quot
8680: 65 64 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e  ed if necessary.
8690: 20 20 54 68 65 20 73 65 70 61 72 61 74 6f 72 0a    The separator.
86a0: 2a 2a 20 69 73 20 6f 6e 6c 79 20 69 73 73 75 65  ** is only issue
86b0: 64 20 69 66 20 62 53 65 70 20 69 73 20 74 72 75  d if bSep is tru
86c0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  e..*/.static voi
86d0: 64 20 6f 75 74 70 75 74 5f 63 73 76 28 53 68 65  d output_csv(She
86e0: 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e 73  llState *p, cons
86f0: 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 62  t char *z, int b
8700: 53 65 70 29 7b 0a 20 20 46 49 4c 45 20 2a 6f 75  Sep){.  FILE *ou
8710: 74 20 3d 20 70 2d 3e 6f 75 74 3b 0a 20 20 69 66  t = p->out;.  if
8720: 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74  ( z==0 ){.    ut
8730: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 25  f8_printf(out,"%
8740: 73 22 2c 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29  s",p->nullValue)
8750: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
8760: 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6e 53  nt i;.    int nS
8770: 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d  ep = strlen30(p-
8780: 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a  >colSeparator);.
8790: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 5b 69      for(i=0; z[i
87a0: 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  ]; i++){.      i
87b0: 66 28 20 6e 65 65 64 43 73 76 51 75 6f 74 65 5b  f( needCsvQuote[
87c0: 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  ((unsigned char*
87d0: 29 7a 29 5b 69 5d 5d 0a 20 20 20 20 20 20 20 20  )z)[i]].        
87e0: 20 7c 7c 20 28 7a 5b 69 5d 3d 3d 70 2d 3e 63 6f   || (z[i]==p->co
87f0: 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 20 26 26  lSeparator[0] &&
8800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e  .             (n
8810: 53 65 70 3d 3d 31 20 7c 7c 20 6d 65 6d 63 6d 70  Sep==1 || memcmp
8820: 28 7a 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61  (z, p->colSepara
8830: 74 6f 72 2c 20 6e 53 65 70 29 3d 3d 30 29 29 20  tor, nSep)==0)) 
8840: 29 7b 0a 20 20 20 20 20 20 20 20 69 20 3d 20 30  ){.        i = 0
8850: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
8860: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
8870: 20 20 20 69 66 28 20 69 3d 3d 30 20 29 7b 0a 20     if( i==0 ){. 
8880: 20 20 20 20 20 63 68 61 72 20 2a 7a 51 75 6f 74       char *zQuot
8890: 65 64 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ed = sqlite3_mpr
88a0: 69 6e 74 66 28 22 5c 22 25 77 5c 22 22 2c 20 7a  intf("\"%w\"", z
88b0: 29 3b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  );.      utf8_pr
88c0: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
88d0: 7a 51 75 6f 74 65 64 29 3b 0a 20 20 20 20 20 20  zQuoted);.      
88e0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75  sqlite3_free(zQu
88f0: 6f 74 65 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65  oted);.    }else
8900: 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
8910: 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a  ntf(out, "%s", z
8920: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  );.    }.  }.  i
8930: 66 28 20 62 53 65 70 20 29 7b 0a 20 20 20 20 75  f( bSep ){.    u
8940: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
8950: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53  t, "%s", p->colS
8960: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 7d 0a 7d  eparator);.  }.}
8970: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
8980: 74 69 6e 65 20 72 75 6e 73 20 77 68 65 6e 20 74  tine runs when t
8990: 68 65 20 75 73 65 72 20 70 72 65 73 73 65 73 20  he user presses 
89a0: 43 74 72 6c 2d 43 0a 2a 2f 0a 73 74 61 74 69 63  Ctrl-C.*/.static
89b0: 20 76 6f 69 64 20 69 6e 74 65 72 72 75 70 74 5f   void interrupt_
89c0: 68 61 6e 64 6c 65 72 28 69 6e 74 20 4e 6f 74 55  handler(int NotU
89d0: 73 65 64 29 7b 0a 20 20 55 4e 55 53 45 44 5f 50  sed){.  UNUSED_P
89e0: 41 52 41 4d 45 54 45 52 28 4e 6f 74 55 73 65 64  ARAMETER(NotUsed
89f0: 29 3b 0a 20 20 73 65 65 6e 49 6e 74 65 72 72 75  );.  seenInterru
8a00: 70 74 2b 2b 3b 0a 20 20 69 66 28 20 73 65 65 6e  pt++;.  if( seen
8a10: 49 6e 74 65 72 72 75 70 74 3e 32 20 29 20 65 78  Interrupt>2 ) ex
8a20: 69 74 28 31 29 3b 0a 20 20 69 66 28 20 67 6c 6f  it(1);.  if( glo
8a30: 62 61 6c 44 62 20 29 20 73 71 6c 69 74 65 33 5f  balDb ) sqlite3_
8a40: 69 6e 74 65 72 72 75 70 74 28 67 6c 6f 62 61 6c  interrupt(global
8a50: 44 62 29 3b 0a 7d 0a 0a 23 69 66 20 28 64 65 66  Db);.}..#if (def
8a60: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20  ined(_WIN32) || 
8a70: 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 29 20  defined(WIN32)) 
8a80: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  && !defined(_WIN
8a90: 33 32 5f 57 43 45 29 0a 2f 2a 0a 2a 2a 20 54 68  32_WCE)./*.** Th
8aa0: 69 73 20 72 6f 75 74 69 6e 65 20 72 75 6e 73 20  is routine runs 
8ab0: 66 6f 72 20 63 6f 6e 73 6f 6c 65 20 65 76 65 6e  for console even
8ac0: 74 73 20 28 65 2e 67 2e 20 43 74 72 6c 2d 43 29  ts (e.g. Ctrl-C)
8ad0: 20 6f 6e 20 57 69 6e 33 32 0a 2a 2f 0a 73 74 61   on Win32.*/.sta
8ae0: 74 69 63 20 42 4f 4f 4c 20 57 49 4e 41 50 49 20  tic BOOL WINAPI 
8af0: 43 6f 6e 73 6f 6c 65 43 74 72 6c 48 61 6e 64 6c  ConsoleCtrlHandl
8b00: 65 72 28 0a 20 20 44 57 4f 52 44 20 64 77 43 74  er(.  DWORD dwCt
8b10: 72 6c 54 79 70 65 20 2f 2a 20 4f 6e 65 20 6f 66  rlType /* One of
8b20: 20 74 68 65 20 43 54 52 4c 5f 2a 5f 45 56 45 4e   the CTRL_*_EVEN
8b30: 54 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 29  T constants */.)
8b40: 7b 0a 20 20 69 66 28 20 64 77 43 74 72 6c 54 79  {.  if( dwCtrlTy
8b50: 70 65 3d 3d 43 54 52 4c 5f 43 5f 45 56 45 4e 54  pe==CTRL_C_EVENT
8b60: 20 29 7b 0a 20 20 20 20 69 6e 74 65 72 72 75 70   ){.    interrup
8b70: 74 5f 68 61 6e 64 6c 65 72 28 30 29 3b 0a 20 20  t_handler(0);.  
8b80: 20 20 72 65 74 75 72 6e 20 54 52 55 45 3b 0a 20    return TRUE;. 
8b90: 20 7d 0a 20 20 72 65 74 75 72 6e 20 46 41 4c 53   }.  return FALS
8ba0: 45 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  E;.}.#endif..#if
8bb0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8bc0: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 2f  _AUTHORIZATION./
8bd0: 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 65 20 22 2e  *.** When the ".
8be0: 61 75 74 68 20 4f 4e 22 20 69 73 20 73 65 74 2c  auth ON" is set,
8bf0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
8c00: 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61  uthorizer callba
8c10: 63 6b 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64  ck is.** invoked
8c20: 2e 20 20 49 74 20 61 6c 77 61 79 73 20 72 65 74  .  It always ret
8c30: 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 0a  urns SQLITE_OK..
8c40: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 68  */.static int sh
8c50: 65 6c 6c 41 75 74 68 28 0a 20 20 76 6f 69 64 20  ellAuth(.  void 
8c60: 2a 70 43 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  *pClientData,.  
8c70: 69 6e 74 20 6f 70 2c 0a 20 20 63 6f 6e 73 74 20  int op,.  const 
8c80: 63 68 61 72 20 2a 7a 41 31 2c 0a 20 20 63 6f 6e  char *zA1,.  con
8c90: 73 74 20 63 68 61 72 20 2a 7a 41 32 2c 0a 20 20  st char *zA2,.  
8ca0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 33 2c  const char *zA3,
8cb0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
8cc0: 41 34 0a 29 7b 0a 20 20 53 68 65 6c 6c 53 74 61  A4.){.  ShellSta
8cd0: 74 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74  te *p = (ShellSt
8ce0: 61 74 65 2a 29 70 43 6c 69 65 6e 74 44 61 74 61  ate*)pClientData
8cf0: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
8d00: 20 63 68 61 72 20 2a 61 7a 41 63 74 69 6f 6e 5b   char *azAction[
8d10: 5d 20 3d 20 7b 20 30 2c 0a 20 20 20 20 20 22 43  ] = { 0,.     "C
8d20: 52 45 41 54 45 5f 49 4e 44 45 58 22 2c 20 20 20  REATE_INDEX",   
8d30: 20 20 20 20 20 20 22 43 52 45 41 54 45 5f 54 41        "CREATE_TA
8d40: 42 4c 45 22 2c 20 20 20 20 20 20 20 20 20 22 43  BLE",         "C
8d50: 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58  REATE_TEMP_INDEX
8d60: 22 2c 0a 20 20 20 20 20 22 43 52 45 41 54 45 5f  ",.     "CREATE_
8d70: 54 45 4d 50 5f 54 41 42 4c 45 22 2c 20 20 20 20  TEMP_TABLE",    
8d80: 22 43 52 45 41 54 45 5f 54 45 4d 50 5f 54 52 49  "CREATE_TEMP_TRI
8d90: 47 47 45 52 22 2c 20 20 22 43 52 45 41 54 45 5f  GGER",  "CREATE_
8da0: 54 45 4d 50 5f 56 49 45 57 22 2c 0a 20 20 20 20  TEMP_VIEW",.    
8db0: 20 22 43 52 45 41 54 45 5f 54 52 49 47 47 45 52   "CREATE_TRIGGER
8dc0: 22 2c 20 20 20 20 20 20 20 22 43 52 45 41 54 45  ",       "CREATE
8dd0: 5f 56 49 45 57 22 2c 20 20 20 20 20 20 20 20 20  _VIEW",         
8de0: 20 22 44 45 4c 45 54 45 22 2c 0a 20 20 20 20 20   "DELETE",.     
8df0: 22 44 52 4f 50 5f 49 4e 44 45 58 22 2c 20 20 20  "DROP_INDEX",   
8e00: 20 20 20 20 20 20 20 20 22 44 52 4f 50 5f 54 41          "DROP_TA
8e10: 42 4c 45 22 2c 20 20 20 20 20 20 20 20 20 20 20  BLE",           
8e20: 22 44 52 4f 50 5f 54 45 4d 50 5f 49 4e 44 45 58  "DROP_TEMP_INDEX
8e30: 22 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f 54 45  ",.     "DROP_TE
8e40: 4d 50 5f 54 41 42 4c 45 22 2c 20 20 20 20 20 20  MP_TABLE",      
8e50: 22 44 52 4f 50 5f 54 45 4d 50 5f 54 52 49 47 47  "DROP_TEMP_TRIGG
8e60: 45 52 22 2c 20 20 20 20 22 44 52 4f 50 5f 54 45  ER",    "DROP_TE
8e70: 4d 50 5f 56 49 45 57 22 2c 0a 20 20 20 20 20 22  MP_VIEW",.     "
8e80: 44 52 4f 50 5f 54 52 49 47 47 45 52 22 2c 20 20  DROP_TRIGGER",  
8e90: 20 20 20 20 20 20 20 22 44 52 4f 50 5f 56 49 45         "DROP_VIE
8ea0: 57 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 22  W",            "
8eb0: 49 4e 53 45 52 54 22 2c 0a 20 20 20 20 20 22 50  INSERT",.     "P
8ec0: 52 41 47 4d 41 22 2c 20 20 20 20 20 20 20 20 20  RAGMA",         
8ed0: 20 20 20 20 20 20 22 52 45 41 44 22 2c 20 20 20        "READ",   
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
8ef0: 45 4c 45 43 54 22 2c 0a 20 20 20 20 20 22 54 52  ELECT",.     "TR
8f00: 41 4e 53 41 43 54 49 4f 4e 22 2c 20 20 20 20 20  ANSACTION",     
8f10: 20 20 20 20 20 22 55 50 44 41 54 45 22 2c 20 20       "UPDATE",  
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 54               "AT
8f30: 54 41 43 48 22 2c 0a 20 20 20 20 20 22 44 45 54  TACH",.     "DET
8f40: 41 43 48 22 2c 20 20 20 20 20 20 20 20 20 20 20  ACH",           
8f50: 20 20 20 20 22 41 4c 54 45 52 5f 54 41 42 4c 45      "ALTER_TABLE
8f60: 22 2c 20 20 20 20 20 20 20 20 20 20 22 52 45 49  ",          "REI
8f70: 4e 44 45 58 22 2c 0a 20 20 20 20 20 22 41 4e 41  NDEX",.     "ANA
8f80: 4c 59 5a 45 22 2c 20 20 20 20 20 20 20 20 20 20  LYZE",          
8f90: 20 20 20 20 22 43 52 45 41 54 45 5f 56 54 41 42      "CREATE_VTAB
8fa0: 4c 45 22 2c 20 20 20 20 20 20 20 20 22 44 52 4f  LE",        "DRO
8fb0: 50 5f 56 54 41 42 4c 45 22 2c 0a 20 20 20 20 20  P_VTABLE",.     
8fc0: 22 46 55 4e 43 54 49 4f 4e 22 2c 20 20 20 20 20  "FUNCTION",     
8fd0: 20 20 20 20 20 20 20 20 22 53 41 56 45 50 4f 49          "SAVEPOI
8fe0: 4e 54 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  NT",            
8ff0: 22 52 45 43 55 52 53 49 56 45 22 0a 20 20 7d 3b  "RECURSIVE".  };
9000: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 6f 6e 73  .  int i;.  cons
9010: 74 20 63 68 61 72 20 2a 61 7a 5b 34 5d 3b 0a 20  t char *az[4];. 
9020: 20 61 7a 5b 30 5d 20 3d 20 7a 41 31 3b 0a 20 20   az[0] = zA1;.  
9030: 61 7a 5b 31 5d 20 3d 20 7a 41 32 3b 0a 20 20 61  az[1] = zA2;.  a
9040: 7a 5b 32 5d 20 3d 20 7a 41 33 3b 0a 20 20 61 7a  z[2] = zA3;.  az
9050: 5b 33 5d 20 3d 20 7a 41 34 3b 0a 20 20 75 74 66  [3] = zA4;.  utf
9060: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
9070: 20 22 61 75 74 68 6f 72 69 7a 65 72 3a 20 25 73   "authorizer: %s
9080: 22 2c 20 61 7a 41 63 74 69 6f 6e 5b 6f 70 5d 29  ", azAction[op])
9090: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 34  ;.  for(i=0; i<4
90a0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 72 61 77 5f  ; i++){.    raw_
90b0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
90c0: 20 22 29 3b 0a 20 20 20 20 69 66 28 20 61 7a 5b   ");.    if( az[
90d0: 69 5d 20 29 7b 0a 20 20 20 20 20 20 6f 75 74 70  i] ){.      outp
90e0: 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f  ut_c_string(p->o
90f0: 75 74 2c 20 61 7a 5b 69 5d 29 3b 0a 20 20 20 20  ut, az[i]);.    
9100: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77  }else{.      raw
9110: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
9120: 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a 20  "NULL");.    }. 
9130: 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28   }.  raw_printf(
9140: 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20  p->out, "\n");. 
9150: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
9160: 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  K;.}.#endif../*.
9170: 2a 2a 20 50 72 69 6e 74 20 61 20 73 63 68 65 6d  ** Print a schem
9180: 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 50 61  a statement.  Pa
9190: 72 74 20 6f 66 20 4d 4f 44 45 5f 53 65 6d 69 20  rt of MODE_Semi 
91a0: 61 6e 64 20 4d 4f 44 45 5f 50 72 65 74 74 79 20  and MODE_Pretty 
91b0: 6f 75 74 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  output..**.** Th
91c0: 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65  is routine conve
91d0: 72 74 73 20 73 6f 6d 65 20 43 52 45 41 54 45 20  rts some CREATE 
91e0: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73  TABLE statements
91f0: 20 66 6f 72 20 73 68 61 64 6f 77 20 74 61 62 6c   for shadow tabl
9200: 65 73 0a 2a 2a 20 69 6e 20 46 54 53 33 2f 34 2f  es.** in FTS3/4/
9210: 35 20 69 6e 74 6f 20 43 52 45 41 54 45 20 54 41  5 into CREATE TA
9220: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54  BLE IF NOT EXIST
9230: 53 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  S statements..*/
9240: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 72 69  .static void pri
9250: 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 46 49 4c  ntSchemaLine(FIL
9260: 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68  E *out, const ch
9270: 61 72 20 2a 7a 2c 20 63 6f 6e 73 74 20 63 68 61  ar *z, const cha
9280: 72 20 2a 7a 54 61 69 6c 29 7b 0a 20 20 69 66 28  r *zTail){.  if(
9290: 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62   sqlite3_strglob
92a0: 28 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 5b  ("CREATE TABLE [
92b0: 27 5c 22 5d 2a 22 2c 20 7a 29 3d 3d 30 20 29 7b  '\"]*", z)==0 ){
92c0: 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
92d0: 28 6f 75 74 2c 20 22 43 52 45 41 54 45 20 54 41  (out, "CREATE TA
92e0: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54  BLE IF NOT EXIST
92f0: 53 20 25 73 25 73 22 2c 20 7a 2b 31 33 2c 20 7a  S %s%s", z+13, z
9300: 54 61 69 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Tail);.  }else{.
9310: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
9320: 6f 75 74 2c 20 22 25 73 25 73 22 2c 20 7a 2c 20  out, "%s%s", z, 
9330: 7a 54 61 69 6c 29 3b 0a 20 20 7d 0a 7d 0a 73 74  zTail);.  }.}.st
9340: 61 74 69 63 20 76 6f 69 64 20 70 72 69 6e 74 53  atic void printS
9350: 63 68 65 6d 61 4c 69 6e 65 4e 28 46 49 4c 45 20  chemaLineN(FILE 
9360: 2a 6f 75 74 2c 20 63 68 61 72 20 2a 7a 2c 20 69  *out, char *z, i
9370: 6e 74 20 6e 2c 20 63 6f 6e 73 74 20 63 68 61 72  nt n, const char
9380: 20 2a 7a 54 61 69 6c 29 7b 0a 20 20 63 68 61 72   *zTail){.  char
9390: 20 63 20 3d 20 7a 5b 6e 5d 3b 0a 20 20 7a 5b 6e   c = z[n];.  z[n
93a0: 5d 20 3d 20 30 3b 0a 20 20 70 72 69 6e 74 53 63  ] = 0;.  printSc
93b0: 68 65 6d 61 4c 69 6e 65 28 6f 75 74 2c 20 7a 2c  hemaLine(out, z,
93c0: 20 7a 54 61 69 6c 29 3b 0a 20 20 7a 5b 6e 5d 20   zTail);.  z[n] 
93d0: 3d 20 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  = c;.}../*.** Th
93e0: 69 73 20 69 73 20 74 68 65 20 63 61 6c 6c 62 61  is is the callba
93f0: 63 6b 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  ck routine that 
9400: 74 68 65 20 73 68 65 6c 6c 0a 2a 2a 20 69 6e 76  the shell.** inv
9410: 6f 6b 65 73 20 66 6f 72 20 65 61 63 68 20 72 6f  okes for each ro
9420: 77 20 6f 66 20 61 20 71 75 65 72 79 20 72 65 73  w of a query res
9430: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
9440: 6e 74 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63  nt shell_callbac
9450: 6b 28 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 2c  k(.  void *pArg,
9460: 0a 20 20 69 6e 74 20 6e 41 72 67 2c 20 20 20 20  .  int nArg,    
9470: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9480: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
9490: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72  */.  char **azAr
94a0: 67 2c 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  g,    /* Text of
94b0: 20 65 61 63 68 20 72 65 73 75 6c 74 20 63 6f 6c   each result col
94c0: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  umn */.  char **
94d0: 61 7a 43 6f 6c 2c 20 20 20 20 2f 2a 20 43 6f 6c  azCol,    /* Col
94e0: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 69  umn names */.  i
94f0: 6e 74 20 2a 61 69 54 79 70 65 20 20 20 20 20 20  nt *aiType      
9500: 2f 2a 20 43 6f 6c 75 6d 6e 20 74 79 70 65 73 20  /* Column types 
9510: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  */.){.  int i;. 
9520: 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 20 3d   ShellState *p =
9530: 20 28 53 68 65 6c 6c 53 74 61 74 65 2a 29 70 41   (ShellState*)pA
9540: 72 67 3b 0a 0a 20 20 69 66 28 20 61 7a 41 72 67  rg;..  if( azArg
9550: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
9560: 20 20 73 77 69 74 63 68 28 20 70 2d 3e 63 4d 6f    switch( p->cMo
9570: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4d  de ){.    case M
9580: 4f 44 45 5f 4c 69 6e 65 3a 20 7b 0a 20 20 20 20  ODE_Line: {.    
9590: 20 20 69 6e 74 20 77 20 3d 20 35 3b 0a 20 20 20    int w = 5;.   
95a0: 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20     if( azArg==0 
95b0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66  ) break;.      f
95c0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
95d0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  i++){.        in
95e0: 74 20 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 33 30  t len = strlen30
95f0: 28 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43 6f  (azCol[i] ? azCo
9600: 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a 20 20 20 20  l[i] : "");.    
9610: 20 20 20 20 69 66 28 20 6c 65 6e 3e 77 20 29 20      if( len>w ) 
9620: 77 20 3d 20 6c 65 6e 3b 0a 20 20 20 20 20 20 7d  w = len;.      }
9630: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e  .      if( p->cn
9640: 74 2b 2b 3e 30 20 29 20 75 74 66 38 5f 70 72 69  t++>0 ) utf8_pri
9650: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
9660: 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
9670: 72 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  r);.      for(i=
9680: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
9690: 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
96a0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 2a 73  intf(p->out,"%*s
96b0: 20 3d 20 25 73 25 73 22 2c 20 77 2c 20 61 7a 43   = %s%s", w, azC
96c0: 6f 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20  ol[i],.         
96d0: 20 20 20 20 20 20 20 61 7a 41 72 67 5b 69 5d 20         azArg[i] 
96e0: 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e  ? azArg[i] : p->
96f0: 6e 75 6c 6c 56 61 6c 75 65 2c 20 70 2d 3e 72 6f  nullValue, p->ro
9700: 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  wSeparator);.   
9710: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
9720: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
9730: 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 3a 0a 20   MODE_Explain:. 
9740: 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 43 6f 6c     case MODE_Col
9750: 75 6d 6e 3a 20 7b 0a 20 20 20 20 20 20 73 74 61  umn: {.      sta
9760: 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 61 45  tic const int aE
9770: 78 70 6c 61 69 6e 57 69 64 74 68 73 5b 5d 20 3d  xplainWidths[] =
9780: 20 7b 34 2c 20 31 33 2c 20 34 2c 20 34 2c 20 34   {4, 13, 4, 4, 4
9790: 2c 20 31 33 2c 20 32 2c 20 31 33 7d 3b 0a 20 20  , 13, 2, 13};.  
97a0: 20 20 20 20 63 6f 6e 73 74 20 69 6e 74 20 2a 63      const int *c
97b0: 6f 6c 57 69 64 74 68 3b 0a 20 20 20 20 20 20 69  olWidth;.      i
97c0: 6e 74 20 73 68 6f 77 48 64 72 3b 0a 20 20 20 20  nt showHdr;.    
97d0: 20 20 63 68 61 72 20 2a 72 6f 77 53 65 70 3b 0a    char *rowSep;.
97e0: 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 4d 6f        if( p->cMo
97f0: 64 65 3d 3d 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 20  de==MODE_Column 
9800: 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6c 57 69  ){.        colWi
9810: 64 74 68 20 3d 20 70 2d 3e 63 6f 6c 57 69 64 74  dth = p->colWidt
9820: 68 3b 0a 20 20 20 20 20 20 20 20 73 68 6f 77 48  h;.        showH
9830: 64 72 20 3d 20 70 2d 3e 73 68 6f 77 48 65 61 64  dr = p->showHead
9840: 65 72 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 53  er;.        rowS
9850: 65 70 20 3d 20 70 2d 3e 72 6f 77 53 65 70 61 72  ep = p->rowSepar
9860: 61 74 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ator;.      }els
9870: 65 7b 0a 20 20 20 20 20 20 20 20 63 6f 6c 57 69  e{.        colWi
9880: 64 74 68 20 3d 20 61 45 78 70 6c 61 69 6e 57 69  dth = aExplainWi
9890: 64 74 68 73 3b 0a 20 20 20 20 20 20 20 20 73 68  dths;.        sh
98a0: 6f 77 48 64 72 20 3d 20 31 3b 0a 20 20 20 20 20  owHdr = 1;.     
98b0: 20 20 20 72 6f 77 53 65 70 20 3d 20 53 45 50 5f     rowSep = SEP_
98c0: 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  Row;.      }.   
98d0: 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d     if( p->cnt++=
98e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f  =0 ){.        fo
98f0: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
9900: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
9910: 6e 74 20 77 2c 20 6e 3b 0a 20 20 20 20 20 20 20  nt w, n;.       
9920: 20 20 20 69 66 28 20 69 3c 41 72 72 61 79 53 69     if( i<ArraySi
9930: 7a 65 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 20  ze(p->colWidth) 
9940: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ){.            w
9950: 20 3d 20 63 6f 6c 57 69 64 74 68 5b 69 5d 3b 0a   = colWidth[i];.
9960: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
9970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 20 3d  .            w =
9980: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   0;.          }.
9990: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 77 3d            if( w=
99a0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
99b0: 20 20 77 20 3d 20 73 74 72 6c 65 6e 43 68 61 72    w = strlenChar
99c0: 28 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43 6f  (azCol[i] ? azCo
99d0: 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a 20 20 20 20  l[i] : "");.    
99e0: 20 20 20 20 20 20 20 20 69 66 28 20 77 3c 31 30          if( w<10
99f0: 20 29 20 77 20 3d 20 31 30 3b 0a 20 20 20 20 20   ) w = 10;.     
9a00: 20 20 20 20 20 20 20 6e 20 3d 20 73 74 72 6c 65         n = strle
9a10: 6e 43 68 61 72 28 61 7a 41 72 67 20 26 26 20 61  nChar(azArg && a
9a20: 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b  zArg[i] ? azArg[
9a30: 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75  i] : p->nullValu
9a40: 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e);.            
9a50: 69 66 28 20 77 3c 6e 20 29 20 77 20 3d 20 6e 3b  if( w<n ) w = n;
9a60: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
9a70: 20 20 20 20 20 20 20 69 66 28 20 69 3c 41 72 72         if( i<Arr
9a80: 61 79 53 69 7a 65 28 70 2d 3e 61 63 74 75 61 6c  aySize(p->actual
9a90: 57 69 64 74 68 29 20 29 7b 0a 20 20 20 20 20 20  Width) ){.      
9aa0: 20 20 20 20 20 20 70 2d 3e 61 63 74 75 61 6c 57        p->actualW
9ab0: 69 64 74 68 5b 69 5d 20 3d 20 77 3b 0a 20 20 20  idth[i] = w;.   
9ac0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9ad0: 20 20 20 69 66 28 20 73 68 6f 77 48 64 72 20 29     if( showHdr )
9ae0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74  {.            ut
9af0: 66 38 5f 77 69 64 74 68 5f 70 72 69 6e 74 28 70  f8_width_print(p
9b00: 2d 3e 6f 75 74 2c 20 77 2c 20 61 7a 43 6f 6c 5b  ->out, w, azCol[
9b10: 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  i]);.           
9b20: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
9b30: 6f 75 74 2c 20 22 25 73 22 2c 20 69 3d 3d 6e 41  out, "%s", i==nA
9b40: 72 67 2d 31 20 3f 20 72 6f 77 53 65 70 20 3a 20  rg-1 ? rowSep : 
9b50: 22 20 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20  "  ");.         
9b60: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
9b70: 20 20 20 20 20 69 66 28 20 73 68 6f 77 48 64 72       if( showHdr
9b80: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f   ){.          fo
9b90: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
9ba0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
9bb0: 20 69 6e 74 20 77 3b 0a 20 20 20 20 20 20 20 20   int w;.        
9bc0: 20 20 20 20 69 66 28 20 69 3c 41 72 72 61 79 53      if( i<ArrayS
9bd0: 69 7a 65 28 70 2d 3e 61 63 74 75 61 6c 57 69 64  ize(p->actualWid
9be0: 74 68 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  th) ){.         
9bf0: 20 20 20 20 20 20 77 20 3d 20 70 2d 3e 61 63 74        w = p->act
9c00: 75 61 6c 57 69 64 74 68 5b 69 5d 3b 0a 20 20 20  ualWidth[i];.   
9c10: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
9c20: 77 3c 30 20 29 20 77 20 3d 20 2d 77 3b 0a 20 20  w<0 ) w = -w;.  
9c30: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
9c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9c50: 77 20 3d 20 31 30 3b 0a 20 20 20 20 20 20 20 20  w = 10;.        
9c60: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
9c70: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
9c80: 3e 6f 75 74 2c 22 25 2d 2a 2e 2a 73 25 73 22 2c  >out,"%-*.*s%s",
9c90: 77 2c 77 2c 0a 20 20 20 20 20 20 20 20 20 20 20  w,w,.           
9ca0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 2d 2d 2d          "-------
9cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9ce0: 2d 2d 2d 22 0a 20 20 20 20 20 20 20 20 20 20 20  ---".           
9cf0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 2d 2d 2d          "-------
9d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9d30: 2d 2d 2d 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ---",.          
9d40: 20 20 20 20 20 20 20 20 20 20 69 3d 3d 6e 41 72            i==nAr
9d50: 67 2d 31 20 3f 20 72 6f 77 53 65 70 20 3a 20 22  g-1 ? rowSep : "
9d60: 20 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20    ");.          
9d70: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
9d80: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a    }.      if( az
9d90: 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  Arg==0 ) break;.
9da0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
9db0: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
9dc0: 20 20 20 20 20 69 6e 74 20 77 3b 0a 20 20 20 20       int w;.    
9dd0: 20 20 20 20 69 66 28 20 69 3c 41 72 72 61 79 53      if( i<ArrayS
9de0: 69 7a 65 28 70 2d 3e 61 63 74 75 61 6c 57 69 64  ize(p->actualWid
9df0: 74 68 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  th) ){.         
9e00: 20 20 77 20 3d 20 70 2d 3e 61 63 74 75 61 6c 57    w = p->actualW
9e10: 69 64 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20  idth[i];.       
9e20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
9e30: 20 20 20 77 20 3d 20 31 30 3b 0a 20 20 20 20 20     w = 10;.     
9e40: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
9e50: 20 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f   p->cMode==MODE_
9e60: 45 78 70 6c 61 69 6e 20 26 26 20 61 7a 41 72 67  Explain && azArg
9e70: 5b 69 5d 20 26 26 20 73 74 72 6c 65 6e 43 68 61  [i] && strlenCha
9e80: 72 28 61 7a 41 72 67 5b 69 5d 29 3e 77 20 29 7b  r(azArg[i])>w ){
9e90: 0a 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 73  .          w = s
9ea0: 74 72 6c 65 6e 43 68 61 72 28 61 7a 41 72 67 5b  trlenChar(azArg[
9eb0: 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  i]);.        }. 
9ec0: 20 20 20 20 20 20 20 69 66 28 20 69 3d 3d 31 20         if( i==1 
9ed0: 26 26 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20 26  && p->aiIndent &
9ee0: 26 20 70 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20  & p->pStmt ){.  
9ef0: 20 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69          if( p->i
9f00: 49 6e 64 65 6e 74 3c 70 2d 3e 6e 49 6e 64 65 6e  Indent<p->nInden
9f10: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  t ){.           
9f20: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
9f30: 6f 75 74 2c 20 22 25 2a 2e 73 22 2c 20 70 2d 3e  out, "%*.s", p->
9f40: 61 69 49 6e 64 65 6e 74 5b 70 2d 3e 69 49 6e 64  aiIndent[p->iInd
9f50: 65 6e 74 5d 2c 20 22 22 29 3b 0a 20 20 20 20 20  ent], "");.     
9f60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
9f70: 20 70 2d 3e 69 49 6e 64 65 6e 74 2b 2b 3b 0a 20   p->iIndent++;. 
9f80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9f90: 20 75 74 66 38 5f 77 69 64 74 68 5f 70 72 69 6e   utf8_width_prin
9fa0: 74 28 70 2d 3e 6f 75 74 2c 20 77 2c 20 61 7a 41  t(p->out, w, azA
9fb0: 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d  rg[i] ? azArg[i]
9fc0: 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29   : p->nullValue)
9fd0: 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  ;.        utf8_p
9fe0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
9ff0: 73 22 2c 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20  s", i==nArg-1 ? 
a000: 72 6f 77 53 65 70 20 3a 20 22 20 20 22 29 3b 0a  rowSep : "  ");.
a010: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
a020: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
a030: 61 73 65 20 4d 4f 44 45 5f 53 65 6d 69 3a 20 7b  ase MODE_Semi: {
a040: 20 20 20 2f 2a 20 2e 73 63 68 65 6d 61 20 61 6e     /* .schema an
a050: 64 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20 6f 75  d .fullschema ou
a060: 74 70 75 74 20 2a 2f 0a 20 20 20 20 20 20 70 72  tput */.      pr
a070: 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70 2d  intSchemaLine(p-
a080: 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 30 5d 2c 20  >out, azArg[0], 
a090: 22 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62 72  ";\n");.      br
a0a0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
a0b0: 61 73 65 20 4d 4f 44 45 5f 50 72 65 74 74 79 3a  ase MODE_Pretty:
a0c0: 20 7b 20 20 2f 2a 20 2e 73 63 68 65 6d 61 20 61   {  /* .schema a
a0d0: 6e 64 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20 77  nd .fullschema w
a0e0: 69 74 68 20 2d 2d 69 6e 64 65 6e 74 20 2a 2f 0a  ith --indent */.
a0f0: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20        char *z;. 
a100: 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20       int j;.    
a110: 20 20 69 6e 74 20 6e 50 61 72 65 6e 20 3d 20 30    int nParen = 0
a120: 3b 0a 20 20 20 20 20 20 63 68 61 72 20 63 45 6e  ;.      char cEn
a130: 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 68 61  d = 0;.      cha
a140: 72 20 63 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  r c;.      int n
a150: 4c 69 6e 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  Line = 0;.      
a160: 61 73 73 65 72 74 28 20 6e 41 72 67 3d 3d 31 20  assert( nArg==1 
a170: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41  );.      if( azA
a180: 72 67 5b 30 5d 3d 3d 30 20 29 20 62 72 65 61 6b  rg[0]==0 ) break
a190: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
a1a0: 74 65 33 5f 73 74 72 6c 69 6b 65 28 22 43 52 45  te3_strlike("CRE
a1b0: 41 54 45 20 56 49 45 57 25 22 2c 20 61 7a 41 72  ATE VIEW%", azAr
a1c0: 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a 20 20 20 20  g[0], 0)==0.    
a1d0: 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74     || sqlite3_st
a1e0: 72 6c 69 6b 65 28 22 43 52 45 41 54 45 20 54 52  rlike("CREATE TR
a1f0: 49 47 25 22 2c 20 61 7a 41 72 67 5b 30 5d 2c 20  IG%", azArg[0], 
a200: 30 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  0)==0.      ){. 
a210: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
a220: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 3b 5c  tf(p->out, "%s;\
a230: 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20  n", azArg[0]);. 
a240: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a250: 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 20 3d 20      }.      z = 
a260: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
a270: 22 25 73 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b  "%s", azArg[0]);
a280: 0a 20 20 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20  .      j = 0;.  
a290: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 49 73 53      for(i=0; IsS
a2a0: 70 61 63 65 28 7a 5b 69 5d 29 3b 20 69 2b 2b 29  pace(z[i]); i++)
a2b0: 7b 7d 0a 20 20 20 20 20 20 66 6f 72 28 3b 20 28  {}.      for(; (
a2c0: 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b  c = z[i])!=0; i+
a2d0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
a2e0: 49 73 53 70 61 63 65 28 63 29 20 29 7b 0a 20 20  IsSpace(c) ){.  
a2f0: 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 6a 2d          if( z[j-
a300: 31 5d 3d 3d 27 5c 72 27 20 29 20 7a 5b 6a 2d 31  1]=='\r' ) z[j-1
a310: 5d 20 3d 20 27 5c 6e 27 3b 0a 20 20 20 20 20 20  ] = '\n';.      
a320: 20 20 20 20 69 66 28 20 49 73 53 70 61 63 65 28      if( IsSpace(
a330: 7a 5b 6a 2d 31 5d 29 20 7c 7c 20 7a 5b 6a 2d 31  z[j-1]) || z[j-1
a340: 5d 3d 3d 27 28 27 20 29 20 63 6f 6e 74 69 6e 75  ]=='(' ) continu
a350: 65 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  e;.        }else
a360: 20 69 66 28 20 28 63 3d 3d 27 28 27 20 7c 7c 20   if( (c=='(' || 
a370: 63 3d 3d 27 29 27 29 20 26 26 20 6a 3e 30 20 26  c==')') && j>0 &
a380: 26 20 49 73 53 70 61 63 65 28 7a 5b 6a 2d 31 5d  & IsSpace(z[j-1]
a390: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6a  ) ){.          j
a3a0: 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
a3b0: 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 63        z[j++] = c
a3c0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
a3d0: 77 68 69 6c 65 28 20 6a 3e 30 20 26 26 20 49 73  while( j>0 && Is
a3e0: 53 70 61 63 65 28 7a 5b 6a 2d 31 5d 29 20 29 7b  Space(z[j-1]) ){
a3f0: 20 6a 2d 2d 3b 20 7d 0a 20 20 20 20 20 20 7a 5b   j--; }.      z[
a400: 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 66  j] = 0;.      if
a410: 28 20 73 74 72 6c 65 6e 33 30 28 7a 29 3e 3d 37  ( strlen30(z)>=7
a420: 39 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  9 ){.        for
a430: 28 69 3d 6a 3d 30 3b 20 28 63 20 3d 20 7a 5b 69  (i=j=0; (c = z[i
a440: 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20 20  ])!=0; i++){.   
a450: 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 63 45         if( c==cE
a460: 6e 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  nd ){.          
a470: 20 20 63 45 6e 64 20 3d 20 30 3b 0a 20 20 20 20    cEnd = 0;.    
a480: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
a490: 63 3d 3d 27 22 27 20 7c 7c 20 63 3d 3d 27 5c 27  c=='"' || c=='\'
a4a0: 27 20 7c 7c 20 63 3d 3d 27 60 27 20 29 7b 0a 20  ' || c=='`' ){. 
a4b0: 20 20 20 20 20 20 20 20 20 20 20 63 45 6e 64 20             cEnd 
a4c0: 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = c;.          }
a4d0: 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 5b 27 20  else if( c=='[' 
a4e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ){.            c
a4f0: 45 6e 64 20 3d 20 27 5d 27 3b 0a 20 20 20 20 20  End = ']';.     
a500: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63       }else if( c
a510: 3d 3d 27 28 27 20 29 7b 0a 20 20 20 20 20 20 20  =='(' ){.       
a520: 20 20 20 20 20 6e 50 61 72 65 6e 2b 2b 3b 0a 20       nParen++;. 
a530: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69           }else i
a540: 66 28 20 63 3d 3d 27 29 27 20 29 7b 0a 20 20 20  f( c==')' ){.   
a550: 20 20 20 20 20 20 20 20 20 6e 50 61 72 65 6e 2d           nParen-
a560: 2d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  -;.            i
a570: 66 28 20 6e 4c 69 6e 65 3e 30 20 26 26 20 6e 50  f( nLine>0 && nP
a580: 61 72 65 6e 3d 3d 30 20 26 26 20 6a 3e 30 20 29  aren==0 && j>0 )
a590: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
a5a0: 70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 4e  printSchemaLineN
a5b0: 28 70 2d 3e 6f 75 74 2c 20 7a 2c 20 6a 2c 20 22  (p->out, z, j, "
a5c0: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
a5d0: 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20      j = 0;.     
a5e0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
a5f0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7a     }.          z
a600: 5b 6a 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20  [j++] = c;.     
a610: 20 20 20 20 20 69 66 28 20 6e 50 61 72 65 6e 3d       if( nParen=
a620: 3d 31 20 26 26 20 28 63 3d 3d 27 28 27 20 7c 7c  =1 && (c=='(' ||
a630: 20 63 3d 3d 27 2c 27 20 7c 7c 20 63 3d 3d 27 5c   c==',' || c=='\
a640: 6e 27 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  n') ){.         
a650: 20 20 20 69 66 28 20 63 3d 3d 27 5c 6e 27 20 29     if( c=='\n' )
a660: 20 6a 2d 2d 3b 0a 20 20 20 20 20 20 20 20 20 20   j--;.          
a670: 20 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e    printSchemaLin
a680: 65 4e 28 70 2d 3e 6f 75 74 2c 20 7a 2c 20 6a 2c  eN(p->out, z, j,
a690: 20 22 5c 6e 20 20 22 29 3b 0a 20 20 20 20 20 20   "\n  ");.      
a6a0: 20 20 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20 20        j = 0;.   
a6b0: 20 20 20 20 20 20 20 20 20 6e 4c 69 6e 65 2b 2b           nLine++
a6c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68  ;.            wh
a6d0: 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 5b 69  ile( IsSpace(z[i
a6e0: 2b 31 5d 29 20 29 7b 20 69 2b 2b 3b 20 7d 0a 20  +1]) ){ i++; }. 
a6f0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
a700: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 5b 6a     }.        z[j
a710: 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  ] = 0;.      }. 
a720: 20 20 20 20 20 70 72 69 6e 74 53 63 68 65 6d 61       printSchema
a730: 4c 69 6e 65 28 70 2d 3e 6f 75 74 2c 20 7a 2c 20  Line(p->out, z, 
a740: 22 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 73 71  ";\n");.      sq
a750: 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20  lite3_free(z);. 
a760: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a770: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
a780: 4c 69 73 74 3a 20 7b 0a 20 20 20 20 20 20 69 66  List: {.      if
a790: 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26  ( p->cnt++==0 &&
a7a0: 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29   p->showHeader )
a7b0: 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d  {.        for(i=
a7c0: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
a7d0: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
a7e0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
a7f0: 73 25 73 22 2c 61 7a 43 6f 6c 5b 69 5d 2c 0a 20  s%s",azCol[i],. 
a800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a810: 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 70 2d 3e   i==nArg-1 ? p->
a820: 72 6f 77 53 65 70 61 72 61 74 6f 72 20 3a 20 70  rowSeparator : p
a830: 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b  ->colSeparator);
a840: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
a850: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41   }.      if( azA
a860: 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  rg==0 ) break;. 
a870: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
a880: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
a890: 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a      char *z = az
a8a0: 41 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20  Arg[i];.        
a8b0: 69 66 28 20 7a 3d 3d 30 20 29 20 7a 20 3d 20 70  if( z==0 ) z = p
a8c0: 2d 3e 6e 75 6c 6c 56 61 6c 75 65 3b 0a 20 20 20  ->nullValue;.   
a8d0: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
a8e0: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a  (p->out, "%s", z
a8f0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  );.        if( i
a900: 3c 6e 41 72 67 2d 31 20 29 7b 0a 20 20 20 20 20  <nArg-1 ){.     
a910: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
a920: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
a930: 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b  ->colSeparator);
a940: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
a950: 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
a960: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
a970: 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  s", p->rowSepara
a980: 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  tor);.        }.
a990: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
a9a0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
a9b0: 61 73 65 20 4d 4f 44 45 5f 48 74 6d 6c 3a 20 7b  ase MODE_Html: {
a9c0: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e  .      if( p->cn
a9d0: 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f  t++==0 && p->sho
a9e0: 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20  wHeader ){.     
a9f0: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
aa00: 3e 6f 75 74 2c 22 3c 54 52 3e 22 29 3b 0a 20 20  >out,"<TR>");.  
aa10: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
aa20: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
aa30: 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
aa40: 66 28 70 2d 3e 6f 75 74 2c 22 3c 54 48 3e 22 29  f(p->out,"<TH>")
aa50: 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70  ;.          outp
aa60: 75 74 5f 68 74 6d 6c 5f 73 74 72 69 6e 67 28 70  ut_html_string(p
aa70: 2d 3e 6f 75 74 2c 20 61 7a 43 6f 6c 5b 69 5d 29  ->out, azCol[i])
aa80: 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f  ;.          raw_
aa90: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c  printf(p->out,"<
aaa0: 2f 54 48 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20  /TH>\n");.      
aab0: 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f    }.        raw_
aac0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c  printf(p->out,"<
aad0: 2f 54 52 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20  /TR>\n");.      
aae0: 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41 72  }.      if( azAr
aaf0: 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  g==0 ) break;.  
ab00: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
ab10: 2d 3e 6f 75 74 2c 22 3c 54 52 3e 22 29 3b 0a 20  ->out,"<TR>");. 
ab20: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
ab30: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
ab40: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
ab50: 2d 3e 6f 75 74 2c 22 3c 54 44 3e 22 29 3b 0a 20  ->out,"<TD>");. 
ab60: 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 68 74         output_ht
ab70: 6d 6c 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ml_string(p->out
ab80: 2c 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41  , azArg[i] ? azA
ab90: 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56  rg[i] : p->nullV
aba0: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 72  alue);.        r
abb0: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
abc0: 2c 22 3c 2f 54 44 3e 5c 6e 22 29 3b 0a 20 20 20  ,"</TD>\n");.   
abd0: 20 20 20 7d 0a 20 20 20 20 20 20 72 61 77 5f 70     }.      raw_p
abe0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f  rintf(p->out,"</
abf0: 54 52 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62  TR>\n");.      b
ac00: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
ac10: 63 61 73 65 20 4d 4f 44 45 5f 54 63 6c 3a 20 7b  case MODE_Tcl: {
ac20: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e  .      if( p->cn
ac30: 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f  t++==0 && p->sho
ac40: 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20  wHeader ){.     
ac50: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
ac60: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
ac70: 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72      output_c_str
ac80: 69 6e 67 28 70 2d 3e 6f 75 74 2c 61 7a 43 6f 6c  ing(p->out,azCol
ac90: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
aca0: 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20   "");.          
acb0: 69 66 28 69 3c 6e 41 72 67 2d 31 29 20 75 74 66  if(i<nArg-1) utf
acc0: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
acd0: 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65 70   "%s", p->colSep
ace0: 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 20  arator);.       
acf0: 20 7d 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f   }.        utf8_
ad00: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
ad10: 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72  %s", p->rowSepar
ad20: 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ator);.      }. 
ad30: 20 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d       if( azArg==
ad40: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
ad50: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
ad60: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
ad70: 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28  output_c_string(
ad80: 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d  p->out, azArg[i]
ad90: 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d   ? azArg[i] : p-
ada0: 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20  >nullValue);.   
adb0: 20 20 20 20 20 69 66 28 69 3c 6e 41 72 67 2d 31       if(i<nArg-1
adc0: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
add0: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63  >out, "%s", p->c
ade0: 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  olSeparator);.  
adf0: 20 20 20 20 7d 0a 20 20 20 20 20 20 75 74 66 38      }.      utf8
ae00: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
ae10: 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61  "%s", p->rowSepa
ae20: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 62 72  rator);.      br
ae30: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
ae40: 61 73 65 20 4d 4f 44 45 5f 43 73 76 3a 20 7b 0a  ase MODE_Csv: {.
ae50: 20 20 20 20 20 20 73 65 74 42 69 6e 61 72 79 4d        setBinaryM
ae60: 6f 64 65 28 70 2d 3e 6f 75 74 2c 20 31 29 3b 0a  ode(p->out, 1);.
ae70: 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e 74        if( p->cnt
ae80: 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77  ++==0 && p->show
ae90: 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20  Header ){.      
aea0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
aeb0: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
aec0: 20 20 20 6f 75 74 70 75 74 5f 63 73 76 28 70 2c     output_csv(p,
aed0: 20 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43 6f   azCol[i] ? azCo
aee0: 6c 5b 69 5d 20 3a 20 22 22 2c 20 69 3c 6e 41 72  l[i] : "", i<nAr
aef0: 67 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  g-1);.        }.
af00: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
af10: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
af20: 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
af30: 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
af40: 20 20 69 66 28 20 6e 41 72 67 3e 30 20 29 7b 0a    if( nArg>0 ){.
af50: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
af60: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
af70: 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f           output_
af80: 63 73 76 28 70 2c 20 61 7a 41 72 67 5b 69 5d 2c  csv(p, azArg[i],
af90: 20 69 3c 6e 41 72 67 2d 31 29 3b 0a 20 20 20 20   i<nArg-1);.    
afa0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 75 74      }.        ut
afb0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
afc0: 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65  , "%s", p->rowSe
afd0: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
afe0: 7d 0a 20 20 20 20 20 20 73 65 74 54 65 78 74 4d  }.      setTextM
aff0: 6f 64 65 28 70 2d 3e 6f 75 74 2c 20 31 29 3b 0a  ode(p->out, 1);.
b000: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b010: 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45   }.    case MODE
b020: 5f 49 6e 73 65 72 74 3a 20 7b 0a 20 20 20 20 20  _Insert: {.     
b030: 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20   if( azArg==0 ) 
b040: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 75 74 66  break;.      utf
b050: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
b060: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 25 73 22  "INSERT INTO %s"
b070: 2c 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 29 3b  ,p->zDestTable);
b080: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 73 68  .      if( p->sh
b090: 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20  owHeader ){.    
b0a0: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
b0b0: 2d 3e 6f 75 74 2c 22 28 22 29 3b 0a 20 20 20 20  ->out,"(");.    
b0c0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
b0d0: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
b0e0: 20 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 72       if( i>0 ) r
b0f0: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
b100: 2c 20 22 2c 22 29 3b 0a 20 20 20 20 20 20 20 20  , ",");.        
b110: 20 20 69 66 28 20 71 75 6f 74 65 43 68 61 72 28    if( quoteChar(
b120: 61 7a 43 6f 6c 5b 69 5d 29 20 29 7b 0a 20 20 20  azCol[i]) ){.   
b130: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
b140: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
b150: 74 66 28 22 5c 22 25 77 5c 22 22 2c 20 61 7a 43  tf("\"%w\"", azC
b160: 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  ol[i]);.        
b170: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
b180: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 29  p->out, "%s", z)
b190: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
b1a0: 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20  lite3_free(z);. 
b1b0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
b1c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 61 77 5f              raw_
b1d0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
b1e0: 25 73 22 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a  %s", azCol[i]);.
b1f0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
b200: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61      }.        ra
b210: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
b220: 22 29 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ")");.      }.  
b230: 20 20 20 20 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20      p->cnt++;.  
b240: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
b250: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
b260: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
b270: 3e 6f 75 74 2c 20 69 3e 30 20 3f 20 22 2c 22 20  >out, i>0 ? "," 
b280: 3a 20 22 20 56 41 4c 55 45 53 28 22 29 3b 0a 20  : " VALUES(");. 
b290: 20 20 20 20 20 20 20 69 66 28 20 28 61 7a 41 72         if( (azAr
b2a0: 67 5b 69 5d 3d 3d 30 29 20 7c 7c 20 28 61 69 54  g[i]==0) || (aiT
b2b0: 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d  ype && aiType[i]
b2c0: 3d 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 29 20 29  ==SQLITE_NULL) )
b2d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38  {.          utf8
b2e0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
b2f0: 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 20 20 20 20  NULL");.        
b300: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
b310: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
b320: 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20  QLITE_TEXT ){.  
b330: 20 20 20 20 20 20 20 20 69 66 28 20 53 68 65 6c          if( Shel
b340: 6c 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c  lHasFlag(p, SHFL
b350: 47 5f 4e 65 77 6c 69 6e 65 73 29 20 29 7b 0a 20  G_Newlines) ){. 
b360: 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75             outpu
b370: 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67 28  t_quoted_string(
b380: 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d  p->out, azArg[i]
b390: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
b3a0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
b3b0: 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 65 73  output_quoted_es
b3c0: 63 61 70 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e  caped_string(p->
b3d0: 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a  out, azArg[i]);.
b3e0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
b3f0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69      }else if( ai
b400: 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69  Type && aiType[i
b410: 5d 3d 3d 53 51 4c 49 54 45 5f 49 4e 54 45 47 45  ]==SQLITE_INTEGE
b420: 52 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  R ){.          u
b430: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
b440: 74 2c 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d  t,"%s", azArg[i]
b450: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
b460: 20 69 66 28 20 61 69 54 79 70 65 20 26 26 20 61   if( aiType && a
b470: 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45  iType[i]==SQLITE
b480: 5f 46 4c 4f 41 54 20 29 7b 0a 20 20 20 20 20 20  _FLOAT ){.      
b490: 20 20 20 20 63 68 61 72 20 7a 5b 35 30 5d 3b 0a      char z[50];.
b4a0: 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
b4b0: 20 72 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c   r = sqlite3_col
b4c0: 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 2d 3e 70 53  umn_double(p->pS
b4d0: 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20  tmt, i);.       
b4e0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
b4f0: 6e 74 66 28 35 30 2c 7a 2c 22 25 21 2e 32 30 67  ntf(50,z,"%!.20g
b500: 22 2c 20 72 29 3b 0a 20 20 20 20 20 20 20 20 20  ", r);.         
b510: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
b520: 75 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20  ut, "%s", z);.  
b530: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
b540: 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65  aiType && aiType
b550: 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 42 4c 4f 42  [i]==SQLITE_BLOB
b560: 20 26 26 20 70 2d 3e 70 53 74 6d 74 20 29 7b 0a   && p->pStmt ){.
b570: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
b580: 76 6f 69 64 20 2a 70 42 6c 6f 62 20 3d 20 73 71  void *pBlob = sq
b590: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
b5a0: 62 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b 0a  b(p->pStmt, i);.
b5b0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 42            int nB
b5c0: 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  lob = sqlite3_co
b5d0: 6c 75 6d 6e 5f 62 79 74 65 73 28 70 2d 3e 70 53  lumn_bytes(p->pS
b5e0: 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20  tmt, i);.       
b5f0: 20 20 20 6f 75 74 70 75 74 5f 68 65 78 5f 62 6c     output_hex_bl
b600: 6f 62 28 70 2d 3e 6f 75 74 2c 20 70 42 6c 6f 62  ob(p->out, pBlob
b610: 2c 20 6e 42 6c 6f 62 29 3b 0a 20 20 20 20 20 20  , nBlob);.      
b620: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 73 4e 75    }else if( isNu
b630: 6d 62 65 72 28 61 7a 41 72 67 5b 69 5d 2c 20 30  mber(azArg[i], 0
b640: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  ) ){.          u
b650: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
b660: 74 2c 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d  t,"%s", azArg[i]
b670: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
b680: 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c 61   if( ShellHasFla
b690: 67 28 70 2c 20 53 48 46 4c 47 5f 4e 65 77 6c 69  g(p, SHFLG_Newli
b6a0: 6e 65 73 29 20 29 7b 0a 20 20 20 20 20 20 20 20  nes) ){.        
b6b0: 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f    output_quoted_
b6c0: 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61  string(p->out, a
b6d0: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
b6e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
b6f0: 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64     output_quoted
b700: 5f 65 73 63 61 70 65 64 5f 73 74 72 69 6e 67 28  _escaped_string(
b710: 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d  p->out, azArg[i]
b720: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
b730: 20 20 20 7d 0a 20 20 20 20 20 20 72 61 77 5f 70     }.      raw_p
b740: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 29 3b  rintf(p->out,");
b750: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62 72 65 61  \n");.      brea
b760: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
b770: 65 20 4d 4f 44 45 5f 51 75 6f 74 65 3a 20 7b 0a  e MODE_Quote: {.
b780: 20 20 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d        if( azArg=
b790: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
b7a0: 20 20 69 66 28 20 70 2d 3e 63 6e 74 3d 3d 30 20    if( p->cnt==0 
b7b0: 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72  && p->showHeader
b7c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
b7d0: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
b7e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
b7f0: 20 69 3e 30 20 29 20 72 61 77 5f 70 72 69 6e 74   i>0 ) raw_print
b800: 66 28 70 2d 3e 6f 75 74 2c 20 22 2c 22 29 3b 0a  f(p->out, ",");.
b810: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
b820: 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70  _quoted_string(p
b830: 2d 3e 6f 75 74 2c 20 61 7a 43 6f 6c 5b 69 5d 29  ->out, azCol[i])
b840: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
b850: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
b860: 2d 3e 6f 75 74 2c 22 5c 6e 22 29 3b 0a 20 20 20  ->out,"\n");.   
b870: 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e 63 6e     }.      p->cn
b880: 74 2b 2b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  t++;.      for(i
b890: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
b8a0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3e  {.        if( i>
b8b0: 30 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28 70  0 ) raw_printf(p
b8c0: 2d 3e 6f 75 74 2c 20 22 2c 22 29 3b 0a 20 20 20  ->out, ",");.   
b8d0: 20 20 20 20 20 69 66 28 20 28 61 7a 41 72 67 5b       if( (azArg[
b8e0: 69 5d 3d 3d 30 29 20 7c 7c 20 28 61 69 54 79 70  i]==0) || (aiTyp
b8f0: 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d  e && aiType[i]==
b900: 53 51 4c 49 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a  SQLITE_NULL) ){.
b910: 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
b920: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 4e 55  rintf(p->out,"NU
b930: 4c 4c 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  LL");.        }e
b940: 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26  lse if( aiType &
b950: 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c  & aiType[i]==SQL
b960: 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  ITE_TEXT ){.    
b970: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f        output_quo
b980: 74 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75  ted_string(p->ou
b990: 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20  t, azArg[i]);.  
b9a0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
b9b0: 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65  aiType && aiType
b9c0: 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 49 4e 54 45  [i]==SQLITE_INTE
b9d0: 47 45 52 20 29 7b 0a 20 20 20 20 20 20 20 20 20  GER ){.         
b9e0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
b9f0: 6f 75 74 2c 22 25 73 22 2c 20 61 7a 41 72 67 5b  out,"%s", azArg[
ba00: 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  i]);.        }el
ba10: 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26 26  se if( aiType &&
ba20: 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49   aiType[i]==SQLI
ba30: 54 45 5f 46 4c 4f 41 54 20 29 7b 0a 20 20 20 20  TE_FLOAT ){.    
ba40: 20 20 20 20 20 20 63 68 61 72 20 7a 5b 35 30 5d        char z[50]
ba50: 3b 0a 20 20 20 20 20 20 20 20 20 20 64 6f 75 62  ;.          doub
ba60: 6c 65 20 72 20 3d 20 73 71 6c 69 74 65 33 5f 63  le r = sqlite3_c
ba70: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 2d 3e  olumn_double(p->
ba80: 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20  pStmt, i);.     
ba90: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
baa0: 72 69 6e 74 66 28 35 30 2c 7a 2c 22 25 21 2e 32  rintf(50,z,"%!.2
bab0: 30 67 22 2c 20 72 29 3b 0a 20 20 20 20 20 20 20  0g", r);.       
bac0: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
bad0: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a  >out, "%s", z);.
bae0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
baf0: 28 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79  ( aiType && aiTy
bb00: 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 42 4c  pe[i]==SQLITE_BL
bb10: 4f 42 20 26 26 20 70 2d 3e 70 53 74 6d 74 20 29  OB && p->pStmt )
bb20: 7b 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73  {.          cons
bb30: 74 20 76 6f 69 64 20 2a 70 42 6c 6f 62 20 3d 20  t void *pBlob = 
bb40: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
bb50: 6c 6f 62 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29  lob(p->pStmt, i)
bb60: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ;.          int 
bb70: 6e 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  nBlob = sqlite3_
bb80: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 2d 3e  column_bytes(p->
bb90: 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20  pStmt, i);.     
bba0: 20 20 20 20 20 6f 75 74 70 75 74 5f 68 65 78 5f       output_hex_
bbb0: 62 6c 6f 62 28 70 2d 3e 6f 75 74 2c 20 70 42 6c  blob(p->out, pBl
bbc0: 6f 62 2c 20 6e 42 6c 6f 62 29 3b 0a 20 20 20 20  ob, nBlob);.    
bbd0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 69 73      }else if( is
bbe0: 4e 75 6d 62 65 72 28 61 7a 41 72 67 5b 69 5d 2c  Number(azArg[i],
bbf0: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20   0) ){.         
bc00: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
bc10: 6f 75 74 2c 22 25 73 22 2c 20 61 7a 41 72 67 5b  out,"%s", azArg[
bc20: 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  i]);.        }el
bc30: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75  se{.          ou
bc40: 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69  tput_quoted_stri
bc50: 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67  ng(p->out, azArg
bc60: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  [i]);.        }.
bc70: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 61        }.      ra
bc80: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
bc90: 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62 72 65  "\n");.      bre
bca0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
bcb0: 73 65 20 4d 4f 44 45 5f 41 73 63 69 69 3a 20 7b  se MODE_Ascii: {
bcc0: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e  .      if( p->cn
bcd0: 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f  t++==0 && p->sho
bce0: 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20  wHeader ){.     
bcf0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
bd00: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
bd10: 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 75 74      if( i>0 ) ut
bd20: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
bd30: 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65  , "%s", p->colSe
bd40: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
bd50: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
bd60: 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 61 7a 43 6f  p->out,"%s",azCo
bd70: 6c 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20  l[i] ? azCol[i] 
bd80: 3a 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 7d  : "");.        }
bd90: 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
bda0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
bdb0: 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  ", p->rowSeparat
bdc0: 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
bdd0: 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20     if( azArg==0 
bde0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66  ) break;.      f
bdf0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
be00: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66  i++){.        if
be10: 28 20 69 3e 30 20 29 20 75 74 66 38 5f 70 72 69  ( i>0 ) utf8_pri
be20: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
be30: 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
be40: 72 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  r);.        utf8
be50: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
be60: 25 73 22 2c 61 7a 41 72 67 5b 69 5d 20 3f 20 61  %s",azArg[i] ? a
be70: 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c  zArg[i] : p->nul
be80: 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 7d  lValue);.      }
be90: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
bea0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
beb0: 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72   p->rowSeparator
bec0: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
bed0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
bee0: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  rn 0;.}../*.** T
bef0: 68 69 73 20 69 73 20 74 68 65 20 63 61 6c 6c 62  his is the callb
bf00: 61 63 6b 20 72 6f 75 74 69 6e 65 20 74 68 61 74  ack routine that
bf10: 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
bf20: 61 72 79 0a 2a 2a 20 69 6e 76 6f 6b 65 73 20 66  ary.** invokes f
bf30: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 61  or each row of a
bf40: 20 71 75 65 72 79 20 72 65 73 75 6c 74 2e 0a 2a   query result..*
bf50: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 6c  /.static int cal
bf60: 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72 67  lback(void *pArg
bf70: 2c 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61 72  , int nArg, char
bf80: 20 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72 20 2a   **azArg, char *
bf90: 2a 61 7a 43 6f 6c 29 7b 0a 20 20 2f 2a 20 73 69  *azCol){.  /* si
bfa0: 6e 63 65 20 77 65 20 64 6f 6e 27 74 20 68 61 76  nce we don't hav
bfb0: 65 20 74 79 70 65 20 69 6e 66 6f 2c 20 63 61 6c  e type info, cal
bfc0: 6c 20 74 68 65 20 73 68 65 6c 6c 5f 63 61 6c 6c  l the shell_call
bfd0: 62 61 63 6b 20 77 69 74 68 20 61 20 4e 55 4c 4c  back with a NULL
bfe0: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 72 65 74 75   value */.  retu
bff0: 72 6e 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63  rn shell_callbac
c000: 6b 28 70 41 72 67 2c 20 6e 41 72 67 2c 20 61 7a  k(pArg, nArg, az
c010: 41 72 67 2c 20 61 7a 43 6f 6c 2c 20 4e 55 4c 4c  Arg, azCol, NULL
c020: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  );.}../*.** This
c030: 20 69 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   is the callback
c040: 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 73 71   routine from sq
c050: 6c 69 74 65 33 5f 65 78 65 63 28 29 20 74 68 61  lite3_exec() tha
c060: 74 20 61 70 70 65 6e 64 73 20 61 6c 6c 0a 2a 2a  t appends all.**
c070: 20 6f 75 74 70 75 74 20 6f 6e 74 6f 20 74 68 65   output onto the
c080: 20 65 6e 64 20 6f 66 20 61 20 53 68 65 6c 6c 54   end of a ShellT
c090: 65 78 74 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73  ext object..*/.s
c0a0: 74 61 74 69 63 20 69 6e 74 20 63 61 70 74 75 72  tatic int captur
c0b0: 65 4f 75 74 70 75 74 43 61 6c 6c 62 61 63 6b 28  eOutputCallback(
c0c0: 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
c0d0: 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41  nArg, char **azA
c0e0: 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 29 7b 0a  rg, char **az){.
c0f0: 20 20 53 68 65 6c 6c 54 65 78 74 20 2a 70 20 3d    ShellText *p =
c100: 20 28 53 68 65 6c 6c 54 65 78 74 2a 29 70 41 72   (ShellText*)pAr
c110: 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 55 4e  g;.  int i;.  UN
c120: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61  USED_PARAMETER(a
c130: 7a 29 3b 0a 20 20 69 66 28 20 61 7a 41 72 67 3d  z);.  if( azArg=
c140: 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
c150: 20 69 66 28 20 70 2d 3e 6e 20 29 20 61 70 70 65   if( p->n ) appe
c160: 6e 64 54 65 78 74 28 70 2c 20 22 7c 22 2c 20 30  ndText(p, "|", 0
c170: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
c180: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
c190: 69 66 28 20 69 20 29 20 61 70 70 65 6e 64 54 65  if( i ) appendTe
c1a0: 78 74 28 70 2c 20 22 2c 22 2c 20 30 29 3b 0a 20  xt(p, ",", 0);. 
c1b0: 20 20 20 69 66 28 20 61 7a 41 72 67 5b 69 5d 20     if( azArg[i] 
c1c0: 29 20 61 70 70 65 6e 64 54 65 78 74 28 70 2c 20  ) appendText(p, 
c1d0: 61 7a 41 72 67 5b 69 5d 2c 20 30 29 3b 0a 20 20  azArg[i], 0);.  
c1e0: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
c1f0: 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20  ./*.** Generate 
c200: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 53  an appropriate S
c210: 45 4c 46 54 45 53 54 20 74 61 62 6c 65 20 69 6e  ELFTEST table in
c220: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
c230: 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  se..*/.static vo
c240: 69 64 20 63 72 65 61 74 65 53 65 6c 66 74 65 73  id createSelftes
c250: 74 54 61 62 6c 65 28 53 68 65 6c 6c 53 74 61 74  tTable(ShellStat
c260: 65 20 2a 70 29 7b 0a 20 20 63 68 61 72 20 2a 7a  e *p){.  char *z
c270: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 73 71  ErrMsg = 0;.  sq
c280: 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
c290: 2c 0a 20 20 20 20 22 53 41 56 45 50 4f 49 4e 54  ,.    "SAVEPOINT
c2a0: 20 73 65 6c 66 74 65 73 74 5f 69 6e 69 74 3b 5c   selftest_init;\
c2b0: 6e 22 0a 20 20 20 20 22 43 52 45 41 54 45 20 54  n".    "CREATE T
c2c0: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53  ABLE IF NOT EXIS
c2d0: 54 53 20 73 65 6c 66 74 65 73 74 28 5c 6e 22 0a  TS selftest(\n".
c2e0: 20 20 20 20 22 20 20 74 6e 6f 20 49 4e 54 45 47      "  tno INTEG
c2f0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 5c  ER PRIMARY KEY,\
c300: 6e 22 20 20 20 2f 2a 20 54 65 73 74 20 6e 75 6d  n"   /* Test num
c310: 62 65 72 20 2a 2f 0a 20 20 20 20 22 20 20 6f 70  ber */.    "  op
c320: 20 54 45 58 54 2c 5c 6e 22 20 20 20 20 20 20 20   TEXT,\n"       
c330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
c340: 70 65 72 61 74 6f 72 3a 20 20 6d 65 6d 6f 20 72  perator:  memo r
c350: 75 6e 20 2a 2f 0a 20 20 20 20 22 20 20 63 6d 64  un */.    "  cmd
c360: 20 54 45 58 54 2c 5c 6e 22 20 20 20 20 20 20 20   TEXT,\n"       
c370: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
c380: 6d 6d 61 6e 64 20 74 65 78 74 20 2a 2f 0a 20 20  mmand text */.  
c390: 20 20 22 20 20 61 6e 73 20 54 45 58 54 5c 6e 22    "  ans TEXT\n"
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3b0: 20 20 20 2f 2a 20 44 65 73 69 72 65 64 20 61 6e     /* Desired an
c3c0: 73 77 65 72 20 2a 2f 0a 20 20 20 20 22 29 3b 22  swer */.    ");"
c3d0: 0a 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d  .    "CREATE TEM
c3e0: 50 20 54 41 42 4c 45 20 5b 5f 73 68 65 6c 6c 24  P TABLE [_shell$
c3f0: 73 65 6c 66 5d 28 6f 70 2c 63 6d 64 2c 61 6e 73  self](op,cmd,ans
c400: 29 3b 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45 52  );\n".    "INSER
c410: 54 20 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24 73  T INTO [_shell$s
c420: 65 6c 66 5d 28 72 6f 77 69 64 2c 6f 70 2c 63 6d  elf](rowid,op,cm
c430: 64 29 5c 6e 22 0a 20 20 20 20 22 20 20 56 41 4c  d)\n".    "  VAL
c440: 55 45 53 28 63 6f 61 6c 65 73 63 65 28 28 53 45  UES(coalesce((SE
c450: 4c 45 43 54 20 28 6d 61 78 28 74 6e 6f 29 2b 31  LECT (max(tno)+1
c460: 30 30 29 2f 31 30 20 46 52 4f 4d 20 73 65 6c 66  00)/10 FROM self
c470: 74 65 73 74 29 2c 31 30 29 2c 5c 6e 22 0a 20 20  test),10),\n".  
c480: 20 20 22 20 20 20 20 20 20 20 20 20 27 6d 65 6d    "         'mem
c490: 6f 27 2c 27 54 65 73 74 73 20 67 65 6e 65 72 61  o','Tests genera
c4a0: 74 65 64 20 62 79 20 2d 2d 69 6e 69 74 27 29 3b  ted by --init');
c4b0: 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20  \n".    "INSERT 
c4c0: 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c  INTO [_shell$sel
c4d0: 66 5d 5c 6e 22 0a 20 20 20 20 22 20 20 53 45 4c  f]\n".    "  SEL
c4e0: 45 43 54 20 27 72 75 6e 27 2c 5c 6e 22 0a 20 20  ECT 'run',\n".  
c4f0: 20 20 22 20 20 20 20 27 53 45 4c 45 43 54 20 68    "    'SELECT h
c500: 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 27 27  ex(sha3_query(''
c510: 53 45 4c 45 43 54 20 74 79 70 65 2c 6e 61 6d 65  SELECT type,name
c520: 2c 74 62 6c 5f 6e 61 6d 65 2c 73 71 6c 20 22 0a  ,tbl_name,sql ".
c530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c550: 20 22 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61   "FROM sqlite_ma
c560: 73 74 65 72 20 4f 52 44 45 52 20 42 59 20 32 27  ster ORDER BY 2'
c570: 27 2c 32 32 34 29 29 27 2c 5c 6e 22 0a 20 20 20  ',224))',\n".   
c580: 20 22 20 20 20 20 68 65 78 28 73 68 61 33 5f 71   "    hex(sha3_q
c590: 75 65 72 79 28 27 53 45 4c 45 43 54 20 74 79 70  uery('SELECT typ
c5a0: 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c  e,name,tbl_name,
c5b0: 73 71 6c 20 22 0a 20 20 20 20 20 20 20 20 20 20  sql ".          
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5d0: 22 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73  "FROM sqlite_mas
c5e0: 74 65 72 20 4f 52 44 45 52 20 42 59 20 32 27 2c  ter ORDER BY 2',
c5f0: 32 32 34 29 29 3b 5c 6e 22 0a 20 20 20 20 22 49  224));\n".    "I
c600: 4e 53 45 52 54 20 49 4e 54 4f 20 5b 5f 73 68 65  NSERT INTO [_she
c610: 6c 6c 24 73 65 6c 66 5d 5c 6e 22 0a 20 20 20 20  ll$self]\n".    
c620: 22 20 20 53 45 4c 45 43 54 20 27 72 75 6e 27 2c  "  SELECT 'run',
c630: 22 0a 20 20 20 20 22 20 20 20 20 27 53 45 4c 45  ".    "    'SELE
c640: 43 54 20 68 65 78 28 73 68 61 33 5f 71 75 65 72  CT hex(sha3_quer
c650: 79 28 27 27 53 45 4c 45 43 54 20 2a 20 46 52 4f  y(''SELECT * FRO
c660: 4d 20 5c 22 27 20 7c 7c 22 0a 20 20 20 20 22 20  M \"' ||".    " 
c670: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 27 25         printf('%
c680: 77 27 2c 6e 61 6d 65 29 20 7c 7c 20 27 5c 22 20  w',name) || '\" 
c690: 4e 4f 54 20 49 4e 44 45 58 45 44 27 27 2c 32 32  NOT INDEXED'',22
c6a0: 34 29 29 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20  4))',\n".    "  
c6b0: 20 20 68 65 78 28 73 68 61 33 5f 71 75 65 72 79    hex(sha3_query
c6c0: 28 70 72 69 6e 74 66 28 27 53 45 4c 45 43 54 20  (printf('SELECT 
c6d0: 2a 20 46 52 4f 4d 20 5c 22 25 77 5c 22 20 4e 4f  * FROM \"%w\" NO
c6e0: 54 20 49 4e 44 45 58 45 44 27 2c 6e 61 6d 65 29  T INDEXED',name)
c6f0: 2c 32 32 34 29 29 5c 6e 22 0a 20 20 20 20 22 20  ,224))\n".    " 
c700: 20 46 52 4f 4d 20 28 5c 6e 22 0a 20 20 20 20 22   FROM (\n".    "
c710: 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
c720: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
c730: 65 72 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20  er\n".    "     
c740: 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c  WHERE type='tabl
c750: 65 27 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20  e'\n".    "     
c760: 20 20 41 4e 44 20 6e 61 6d 65 3c 3e 27 73 65 6c    AND name<>'sel
c770: 66 74 65 73 74 27 5c 6e 22 0a 20 20 20 20 22 20  ftest'\n".    " 
c780: 20 20 20 20 20 20 41 4e 44 20 63 6f 61 6c 65 73        AND coales
c790: 63 65 28 72 6f 6f 74 70 61 67 65 2c 30 29 3e 30  ce(rootpage,0)>0
c7a0: 5c 6e 22 0a 20 20 20 20 22 20 20 29 5c 6e 22 0a  \n".    "  )\n".
c7b0: 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 6e      " ORDER BY n
c7c0: 61 6d 65 3b 5c 6e 22 0a 20 20 20 20 22 49 4e 53  ame;\n".    "INS
c7d0: 45 52 54 20 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c  ERT INTO [_shell
c7e0: 24 73 65 6c 66 5d 5c 6e 22 0a 20 20 20 20 22 20  $self]\n".    " 
c7f0: 20 56 41 4c 55 45 53 28 27 72 75 6e 27 2c 27 50   VALUES('run','P
c800: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
c810: 63 68 65 63 6b 27 2c 27 6f 6b 27 29 3b 5c 6e 22  check','ok');\n"
c820: 0a 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  .    "INSERT INT
c830: 4f 20 73 65 6c 66 74 65 73 74 28 74 6e 6f 2c 6f  O selftest(tno,o
c840: 70 2c 63 6d 64 2c 61 6e 73 29 22 0a 20 20 20 20  p,cmd,ans)".    
c850: 22 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2a  "  SELECT rowid*
c860: 31 30 2c 6f 70 2c 63 6d 64 2c 61 6e 73 20 46 52  10,op,cmd,ans FR
c870: 4f 4d 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d  OM [_shell$self]
c880: 3b 5c 6e 22 0a 20 20 20 20 22 44 52 4f 50 20 54  ;\n".    "DROP T
c890: 41 42 4c 45 20 5b 5f 73 68 65 6c 6c 24 73 65 6c  ABLE [_shell$sel
c8a0: 66 5d 3b 22 0a 20 20 20 20 2c 30 2c 30 2c 26 7a  f];".    ,0,0,&z
c8b0: 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20 7a  ErrMsg);.  if( z
c8c0: 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 75 74  ErrMsg ){.    ut
c8d0: 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
c8e0: 2c 20 22 53 45 4c 46 54 45 53 54 20 69 6e 69 74  , "SELFTEST init
c8f0: 69 61 6c 69 7a 61 74 69 6f 6e 20 66 61 69 6c 75  ialization failu
c900: 72 65 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d  re: %s\n", zErrM
c910: 73 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  sg);.    sqlite3
c920: 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  _free(zErrMsg);.
c930: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65 78    }.  sqlite3_ex
c940: 65 63 28 70 2d 3e 64 62 2c 20 22 52 45 4c 45 41  ec(p->db, "RELEA
c950: 53 45 20 73 65 6c 66 74 65 73 74 5f 69 6e 69 74  SE selftest_init
c960: 22 2c 30 2c 30 2c 30 29 3b 0a 7d 0a 0a 0a 2f 2a  ",0,0,0);.}.../*
c970: 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 65 73 74  .** Set the dest
c980: 69 6e 61 74 69 6f 6e 20 74 61 62 6c 65 20 66 69  ination table fi
c990: 65 6c 64 20 6f 66 20 74 68 65 20 53 68 65 6c 6c  eld of the Shell
c9a0: 53 74 61 74 65 20 73 74 72 75 63 74 75 72 65 20  State structure 
c9b0: 74 6f 0a 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f  to.** the name o
c9c0: 66 20 74 68 65 20 74 61 62 6c 65 20 67 69 76 65  f the table give
c9d0: 6e 2e 20 20 45 73 63 61 70 65 20 61 6e 79 20 71  n.  Escape any q
c9e0: 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 73 20  uote characters 
c9f0: 69 6e 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20  in the.** table 
ca00: 6e 61 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  name..*/.static 
ca10: 76 6f 69 64 20 73 65 74 5f 74 61 62 6c 65 5f 6e  void set_table_n
ca20: 61 6d 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  ame(ShellState *
ca30: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
ca40: 4e 61 6d 65 29 7b 0a 20 20 69 6e 74 20 69 2c 20  Name){.  int i, 
ca50: 6e 3b 0a 20 20 63 68 61 72 20 63 51 75 6f 74 65  n;.  char cQuote
ca60: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20  ;.  char *z;..  
ca70: 69 66 28 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c  if( p->zDestTabl
ca80: 65 20 29 7b 0a 20 20 20 20 66 72 65 65 28 70 2d  e ){.    free(p-
ca90: 3e 7a 44 65 73 74 54 61 62 6c 65 29 3b 0a 20 20  >zDestTable);.  
caa0: 20 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20    p->zDestTable 
cab0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a  = 0;.  }.  if( z
cac0: 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74 75 72 6e  Name==0 ) return
cad0: 3b 0a 20 20 63 51 75 6f 74 65 20 3d 20 71 75 6f  ;.  cQuote = quo
cae0: 74 65 43 68 61 72 28 7a 4e 61 6d 65 29 3b 0a 20  teChar(zName);. 
caf0: 20 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 4e   n = strlen30(zN
cb00: 61 6d 65 29 3b 0a 20 20 69 66 28 20 63 51 75 6f  ame);.  if( cQuo
cb10: 74 65 20 29 20 6e 20 2b 3d 20 6e 2b 32 3b 0a 20  te ) n += n+2;. 
cb20: 20 7a 20 3d 20 70 2d 3e 7a 44 65 73 74 54 61 62   z = p->zDestTab
cb30: 6c 65 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 2b 31  le = malloc( n+1
cb40: 20 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29   );.  if( z==0 )
cb50: 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
cb60: 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
cb70: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22  out of memory\n"
cb80: 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a  );.    exit(1);.
cb90: 20 20 7d 0a 20 20 6e 20 3d 20 30 3b 0a 20 20 69    }.  n = 0;.  i
cba0: 66 28 20 63 51 75 6f 74 65 20 29 20 7a 5b 6e 2b  f( cQuote ) z[n+
cbb0: 2b 5d 20 3d 20 63 51 75 6f 74 65 3b 0a 20 20 66  +] = cQuote;.  f
cbc0: 6f 72 28 69 3d 30 3b 20 7a 4e 61 6d 65 5b 69 5d  or(i=0; zName[i]
cbd0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 7a 5b 6e 2b  ; i++){.    z[n+
cbe0: 2b 5d 20 3d 20 7a 4e 61 6d 65 5b 69 5d 3b 0a 20  +] = zName[i];. 
cbf0: 20 20 20 69 66 28 20 7a 4e 61 6d 65 5b 69 5d 3d     if( zName[i]=
cc00: 3d 63 51 75 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d  =cQuote ) z[n++]
cc10: 20 3d 20 63 51 75 6f 74 65 3b 0a 20 20 7d 0a 20   = cQuote;.  }. 
cc20: 20 69 66 28 20 63 51 75 6f 74 65 20 29 20 7a 5b   if( cQuote ) z[
cc30: 6e 2b 2b 5d 20 3d 20 63 51 75 6f 74 65 3b 0a 20  n++] = cQuote;. 
cc40: 20 7a 5b 6e 5d 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f   z[n] = 0;.}.../
cc50: 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 20 71  *.** Execute a q
cc60: 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 20 74  uery statement t
cc70: 68 61 74 20 77 69 6c 6c 20 67 65 6e 65 72 61 74  hat will generat
cc80: 65 20 53 51 4c 20 6f 75 74 70 75 74 2e 20 20 50  e SQL output.  P
cc90: 72 69 6e 74 0a 2a 2a 20 74 68 65 20 72 65 73 75  rint.** the resu
cca0: 6c 74 20 63 6f 6c 75 6d 6e 73 2c 20 63 6f 6d 6d  lt columns, comm
ccb0: 61 2d 73 65 70 61 72 61 74 65 64 2c 20 6f 6e 20  a-separated, on 
ccc0: 61 20 6c 69 6e 65 20 61 6e 64 20 74 68 65 6e 20  a line and then 
ccd0: 61 64 64 20 61 0a 2a 2a 20 73 65 6d 69 63 6f 6c  add a.** semicol
cce0: 6f 6e 20 74 65 72 6d 69 6e 61 74 6f 72 20 74 6f  on terminator to
ccf0: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 61 74   the end of that
cd00: 20 6c 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   line..**.** If 
cd10: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
cd20: 6c 75 6d 6e 73 20 69 73 20 31 20 61 6e 64 20 74  lumns is 1 and t
cd30: 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  hat column conta
cd40: 69 6e 73 20 74 65 78 74 20 22 2d 2d 22 0a 2a 2a  ins text "--".**
cd50: 20 74 68 65 6e 20 77 72 69 74 65 20 74 68 65 20   then write the 
cd60: 73 65 6d 69 63 6f 6c 6f 6e 20 6f 6e 20 61 20 73  semicolon on a s
cd70: 65 70 61 72 61 74 65 20 6c 69 6e 65 2e 20 20 54  eparate line.  T
cd80: 68 61 74 20 77 61 79 2c 20 69 66 20 61 0a 2a 2a  hat way, if a.**
cd90: 20 22 2d 2d 22 20 63 6f 6d 6d 65 6e 74 20 6f 63   "--" comment oc
cda0: 63 75 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  curs at the end 
cdb0: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
cdc0: 2c 20 74 68 65 20 63 6f 6d 6d 65 6e 74 0a 2a 2a  , the comment.**
cdd0: 20 77 6f 6e 27 74 20 63 6f 6e 73 75 6d 65 20 74   won't consume t
cde0: 68 65 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 65 72  he semicolon ter
cdf0: 6d 69 6e 61 74 6f 72 2e 0a 2a 2f 0a 73 74 61 74  minator..*/.stat
ce00: 69 63 20 69 6e 74 20 72 75 6e 5f 74 61 62 6c 65  ic int run_table
ce10: 5f 64 75 6d 70 5f 71 75 65 72 79 28 0a 20 20 53  _dump_query(.  S
ce20: 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 20 20  hellState *p,   
ce30: 20 20 20 20 20 20 20 20 2f 2a 20 51 75 65 72 79          /* Query
ce40: 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 6f   context */.  co
ce50: 6e 73 74 20 63 68 61 72 20 2a 7a 53 65 6c 65 63  nst char *zSelec
ce60: 74 2c 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t,     /* SELECT
ce70: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78   statement to ex
ce80: 74 72 61 63 74 20 63 6f 6e 74 65 6e 74 20 2a 2f  tract content */
ce90: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
cea0: 46 69 72 73 74 52 6f 77 20 20 20 20 2f 2a 20 50  FirstRow    /* P
ceb0: 72 69 6e 74 20 62 65 66 6f 72 65 20 66 69 72 73  rint before firs
cec0: 74 20 72 6f 77 2c 20 69 66 20 6e 6f 74 20 4e 55  t row, if not NU
ced0: 4c 4c 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  LL */.){.  sqlit
cee0: 65 33 5f 73 74 6d 74 20 2a 70 53 65 6c 65 63 74  e3_stmt *pSelect
cef0: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e  ;.  int rc;.  in
cf00: 74 20 6e 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74  t nResult;.  int
cf10: 20 69 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   i;.  const char
cf20: 20 2a 7a 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   *z;.  rc = sqli
cf30: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
cf40: 2d 3e 64 62 2c 20 7a 53 65 6c 65 63 74 2c 20 2d  ->db, zSelect, -
cf50: 31 2c 20 26 70 53 65 6c 65 63 74 2c 20 30 29 3b  1, &pSelect, 0);
cf60: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
cf70: 45 5f 4f 4b 20 7c 7c 20 21 70 53 65 6c 65 63 74  E_OK || !pSelect
cf80: 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
cf90: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a  ntf(p->out, "/**
cfa0: 2a 2a 20 45 52 52 4f 52 3a 20 28 25 64 29 20 25  ** ERROR: (%d) %
cfb0: 73 20 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 72 63 2c  s *****/\n", rc,
cfc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cfd0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
cfe0: 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 69 66 28  p->db));.    if(
cff0: 20 28 72 63 26 30 78 66 66 29 21 3d 53 51 4c 49   (rc&0xff)!=SQLI
d000: 54 45 5f 43 4f 52 52 55 50 54 20 29 20 70 2d 3e  TE_CORRUPT ) p->
d010: 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 72 65 74 75  nErr++;.    retu
d020: 72 6e 20 72 63 3b 0a 20 20 7d 0a 20 20 72 63 20  rn rc;.  }.  rc 
d030: 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
d040: 53 65 6c 65 63 74 29 3b 0a 20 20 6e 52 65 73 75  Select);.  nResu
d050: 6c 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  lt = sqlite3_col
d060: 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 65 6c 65 63  umn_count(pSelec
d070: 74 29 3b 0a 20 20 77 68 69 6c 65 28 20 72 63 3d  t);.  while( rc=
d080: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20  =SQLITE_ROW ){. 
d090: 20 20 20 69 66 28 20 7a 46 69 72 73 74 52 6f 77     if( zFirstRow
d0a0: 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
d0b0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
d0c0: 73 22 2c 20 7a 46 69 72 73 74 52 6f 77 29 3b 0a  s", zFirstRow);.
d0d0: 20 20 20 20 20 20 7a 46 69 72 73 74 52 6f 77 20        zFirstRow 
d0e0: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a  = 0;.    }.    z
d0f0: 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
d100: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
d110: 65 78 74 28 70 53 65 6c 65 63 74 2c 20 30 29 3b  ext(pSelect, 0);
d120: 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
d130: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a  (p->out, "%s", z
d140: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20  );.    for(i=1; 
d150: 69 3c 6e 52 65 73 75 6c 74 3b 20 69 2b 2b 29 7b  i<nResult; i++){
d160: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
d170: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2c 25 73 22  tf(p->out, ",%s"
d180: 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  , sqlite3_column
d190: 5f 74 65 78 74 28 70 53 65 6c 65 63 74 2c 20 69  _text(pSelect, i
d1a0: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ));.    }.    if
d1b0: 28 20 7a 3d 3d 30 20 29 20 7a 20 3d 20 22 22 3b  ( z==0 ) z = "";
d1c0: 0a 20 20 20 20 77 68 69 6c 65 28 20 7a 5b 30 5d  .    while( z[0]
d1d0: 20 26 26 20 28 7a 5b 30 5d 21 3d 27 2d 27 20 7c   && (z[0]!='-' |
d1e0: 7c 20 7a 5b 31 5d 21 3d 27 2d 27 29 20 29 20 7a  | z[1]!='-') ) z
d1f0: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d  ++;.    if( z[0]
d200: 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
d210: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
d220: 3b 5c 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ;\n");.    }else
d230: 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
d240: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 3b 5c 6e 22  tf(p->out, ";\n"
d250: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  );.    }.    rc 
d260: 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
d270: 53 65 6c 65 63 74 29 3b 0a 20 20 7d 0a 20 20 72  Select);.  }.  r
d280: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  c = sqlite3_fina
d290: 6c 69 7a 65 28 70 53 65 6c 65 63 74 29 3b 0a 20  lize(pSelect);. 
d2a0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
d2b0: 4f 4b 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  OK ){.    utf8_p
d2c0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f  rintf(p->out, "/
d2d0: 2a 2a 2a 2a 20 45 52 52 4f 52 3a 20 28 25 64 29  **** ERROR: (%d)
d2e0: 20 25 73 20 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 72   %s *****/\n", r
d2f0: 63 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  c,.             
d300: 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
d310: 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 69  g(p->db));.    i
d320: 66 28 20 28 72 63 26 30 78 66 66 29 21 3d 53 51  f( (rc&0xff)!=SQ
d330: 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 29 20 70  LITE_CORRUPT ) p
d340: 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ->nErr++;.  }.  
d350: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
d360: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 73 70 61  .** Allocate spa
d370: 63 65 20 61 6e 64 20 73 61 76 65 20 6f 66 66 20  ce and save off 
d380: 63 75 72 72 65 6e 74 20 65 72 72 6f 72 20 73 74  current error st
d390: 72 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ring..*/.static 
d3a0: 63 68 61 72 20 2a 73 61 76 65 5f 65 72 72 5f 6d  char *save_err_m
d3b0: 73 67 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  sg(.  sqlite3 *d
d3c0: 62 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b            /* 
d3d0: 44 61 74 61 62 61 73 65 20 74 6f 20 71 75 65 72  Database to quer
d3e0: 79 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6e 45  y */.){.  int nE
d3f0: 72 72 4d 73 67 20 3d 20 31 2b 73 74 72 6c 65 6e  rrMsg = 1+strlen
d400: 33 30 28 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  30(sqlite3_errms
d410: 67 28 64 62 29 29 3b 0a 20 20 63 68 61 72 20 2a  g(db));.  char *
d420: 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
d430: 33 5f 6d 61 6c 6c 6f 63 36 34 28 6e 45 72 72 4d  3_malloc64(nErrM
d440: 73 67 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 4d  sg);.  if( zErrM
d450: 73 67 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  sg ){.    memcpy
d460: 28 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69 74 65  (zErrMsg, sqlite
d470: 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 6e 45  3_errmsg(db), nE
d480: 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 65  rrMsg);.  }.  re
d490: 74 75 72 6e 20 7a 45 72 72 4d 73 67 3b 0a 7d 0a  turn zErrMsg;.}.
d4a0: 0a 23 69 66 64 65 66 20 5f 5f 6c 69 6e 75 78 5f  .#ifdef __linux_
d4b0: 5f 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20  _./*.** Attempt 
d4c0: 74 6f 20 64 69 73 70 6c 61 79 20 49 2f 4f 20 73  to display I/O s
d4d0: 74 61 74 73 20 6f 6e 20 4c 69 6e 75 78 20 75 73  tats on Linux us
d4e0: 69 6e 67 20 2f 70 72 6f 63 2f 50 49 44 2f 69 6f  ing /proc/PID/io
d4f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
d500: 64 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74  displayLinuxIoSt
d510: 61 74 73 28 46 49 4c 45 20 2a 6f 75 74 29 7b 0a  ats(FILE *out){.
d520: 20 20 46 49 4c 45 20 2a 69 6e 3b 0a 20 20 63 68    FILE *in;.  ch
d530: 61 72 20 7a 5b 32 30 30 5d 3b 0a 20 20 73 71 6c  ar z[200];.  sql
d540: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
d550: 7a 65 6f 66 28 7a 29 2c 20 7a 2c 20 22 2f 70 72  zeof(z), z, "/pr
d560: 6f 63 2f 25 64 2f 69 6f 22 2c 20 67 65 74 70 69  oc/%d/io", getpi
d570: 64 28 29 29 3b 0a 20 20 69 6e 20 3d 20 66 6f 70  d());.  in = fop
d580: 65 6e 28 7a 2c 20 22 72 62 22 29 3b 0a 20 20 69  en(z, "rb");.  i
d590: 66 28 20 69 6e 3d 3d 30 20 29 20 72 65 74 75 72  f( in==0 ) retur
d5a0: 6e 3b 0a 20 20 77 68 69 6c 65 28 20 66 67 65 74  n;.  while( fget
d5b0: 73 28 7a 2c 20 73 69 7a 65 6f 66 28 7a 29 2c 20  s(z, sizeof(z), 
d5c0: 69 6e 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 74  in)!=0 ){.    st
d5d0: 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
d5e0: 74 20 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  t {.      const 
d5f0: 63 68 61 72 20 2a 7a 50 61 74 74 65 72 6e 3b 0a  char *zPattern;.
d600: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
d610: 20 2a 7a 44 65 73 63 3b 0a 20 20 20 20 7d 20 61   *zDesc;.    } a
d620: 54 72 61 6e 73 5b 5d 20 3d 20 7b 0a 20 20 20 20  Trans[] = {.    
d630: 20 20 7b 20 22 72 63 68 61 72 3a 20 22 2c 20 20    { "rchar: ",  
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d650: 22 42 79 74 65 73 20 72 65 63 65 69 76 65 64 20  "Bytes received 
d660: 62 79 20 72 65 61 64 28 29 3a 22 20 7d 2c 0a 20  by read():" },. 
d670: 20 20 20 20 20 7b 20 22 77 63 68 61 72 3a 20 22       { "wchar: "
d680: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
d690: 20 20 20 22 42 79 74 65 73 20 73 65 6e 74 20 74     "Bytes sent t
d6a0: 6f 20 77 72 69 74 65 28 29 3a 22 20 20 20 20 7d  o write():"    }
d6b0: 2c 0a 20 20 20 20 20 20 7b 20 22 73 79 73 63 72  ,.      { "syscr
d6c0: 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  : ",            
d6d0: 20 20 20 20 20 20 22 52 65 61 64 28 29 20 73 79        "Read() sy
d6e0: 73 74 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20  stem calls:"    
d6f0: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73 79    },.      { "sy
d700: 73 63 77 3a 20 22 2c 20 20 20 20 20 20 20 20 20  scw: ",         
d710: 20 20 20 20 20 20 20 20 20 22 57 72 69 74 65 28           "Write(
d720: 29 20 73 79 73 74 65 6d 20 63 61 6c 6c 73 3a 22  ) system calls:"
d730: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
d740: 22 72 65 61 64 5f 62 79 74 65 73 3a 20 22 2c 20  "read_bytes: ", 
d750: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 79 74              "Byt
d760: 65 73 20 72 65 61 64 20 66 72 6f 6d 20 73 74 6f  es read from sto
d770: 72 61 67 65 3a 22 20 20 7d 2c 0a 20 20 20 20 20  rage:"  },.     
d780: 20 7b 20 22 77 72 69 74 65 5f 62 79 74 65 73 3a   { "write_bytes:
d790: 20 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 22   ",            "
d7a0: 42 79 74 65 73 20 77 72 69 74 74 65 6e 20 74 6f  Bytes written to
d7b0: 20 73 74 6f 72 61 67 65 3a 22 20 7d 2c 0a 20 20   storage:" },.  
d7c0: 20 20 20 20 7b 20 22 63 61 6e 63 65 6c 6c 65 64      { "cancelled
d7d0: 5f 77 72 69 74 65 5f 62 79 74 65 73 3a 20 22 2c  _write_bytes: ",
d7e0: 20 20 22 43 61 6e 63 65 6c 6c 65 64 20 77 72 69    "Cancelled wri
d7f0: 74 65 20 62 79 74 65 73 3a 22 20 20 20 20 7d 2c  te bytes:"    },
d800: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20  .    };.    int 
d810: 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
d820: 69 3c 41 72 72 61 79 53 69 7a 65 28 61 54 72 61  i<ArraySize(aTra
d830: 6e 73 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ns); i++){.     
d840: 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73 74   int n = (int)st
d850: 72 6c 65 6e 28 61 54 72 61 6e 73 5b 69 5d 2e 7a  rlen(aTrans[i].z
d860: 50 61 74 74 65 72 6e 29 3b 0a 20 20 20 20 20 20  Pattern);.      
d870: 69 66 28 20 73 74 72 6e 63 6d 70 28 61 54 72 61  if( strncmp(aTra
d880: 6e 73 5b 69 5d 2e 7a 50 61 74 74 65 72 6e 2c 20  ns[i].zPattern, 
d890: 7a 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  z, n)==0 ){.    
d8a0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
d8b0: 6f 75 74 2c 20 22 25 2d 33 36 73 20 25 73 22 2c  out, "%-36s %s",
d8c0: 20 61 54 72 61 6e 73 5b 69 5d 2e 7a 44 65 73 63   aTrans[i].zDesc
d8d0: 2c 20 26 7a 5b 6e 5d 29 3b 0a 20 20 20 20 20 20  , &z[n]);.      
d8e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
d8f0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 63 6c  .    }.  }.  fcl
d900: 6f 73 65 28 69 6e 29 3b 0a 7d 0a 23 65 6e 64 69  ose(in);.}.#endi
d910: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61 79  f../*.** Display
d920: 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20 6f   a single line o
d930: 66 20 73 74 61 74 75 73 20 75 73 69 6e 67 20 36  f status using 6
d940: 34 2d 62 69 74 20 76 61 6c 75 65 73 2e 0a 2a 2f  4-bit values..*/
d950: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64 69 73  .static void dis
d960: 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 0a 20 20  playStatLine(.  
d970: 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 20  ShellState *p,  
d980: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
d990: 20 73 68 65 6c 6c 20 63 6f 6e 74 65 78 74 20 2a   shell context *
d9a0: 2f 0a 20 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c  /.  char *zLabel
d9b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ,             /*
d9c0: 20 4c 61 62 65 6c 20 66 6f 72 20 74 68 69 73 20   Label for this 
d9d0: 6f 6e 65 20 6c 69 6e 65 20 2a 2f 0a 20 20 63 68  one line */.  ch
d9e0: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 20 20 20  ar *zFormat,    
d9f0: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 6d 61          /* Forma
da00: 74 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  t for the result
da10: 20 2a 2f 0a 20 20 69 6e 74 20 69 53 74 61 74 75   */.  int iStatu
da20: 73 43 74 72 6c 2c 20 20 20 20 20 20 20 20 20 20  sCtrl,          
da30: 2f 2a 20 57 68 69 63 68 20 73 74 61 74 75 73 20  /* Which status 
da40: 74 6f 20 64 69 73 70 6c 61 79 20 2a 2f 0a 20 20  to display */.  
da50: 69 6e 74 20 62 52 65 73 65 74 20 20 20 20 20 20  int bReset      
da60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
da70: 65 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73  e to reset the s
da80: 74 61 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  tats */.){.  sql
da90: 69 74 65 33 5f 69 6e 74 36 34 20 69 43 75 72 20  ite3_int64 iCur 
daa0: 3d 20 2d 31 3b 0a 20 20 73 71 6c 69 74 65 33 5f  = -1;.  sqlite3_
dab0: 69 6e 74 36 34 20 69 48 69 77 74 72 20 3d 20 2d  int64 iHiwtr = -
dac0: 31 3b 0a 20 20 69 6e 74 20 69 2c 20 6e 50 65 72  1;.  int i, nPer
dad0: 63 65 6e 74 3b 0a 20 20 63 68 61 72 20 7a 4c 69  cent;.  char zLi
dae0: 6e 65 5b 32 30 30 5d 3b 0a 20 20 73 71 6c 69 74  ne[200];.  sqlit
daf0: 65 33 5f 73 74 61 74 75 73 36 34 28 69 53 74 61  e3_status64(iSta
db00: 74 75 73 43 74 72 6c 2c 20 26 69 43 75 72 2c 20  tusCtrl, &iCur, 
db10: 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29  &iHiwtr, bReset)
db20: 3b 0a 20 20 66 6f 72 28 69 3d 30 2c 20 6e 50 65  ;.  for(i=0, nPe
db30: 72 63 65 6e 74 3d 30 3b 20 7a 46 6f 72 6d 61 74  rcent=0; zFormat
db40: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  [i]; i++){.    i
db50: 66 28 20 7a 46 6f 72 6d 61 74 5b 69 5d 3d 3d 27  f( zFormat[i]=='
db60: 25 27 20 29 20 6e 50 65 72 63 65 6e 74 2b 2b 3b  %' ) nPercent++;
db70: 0a 20 20 7d 0a 20 20 69 66 28 20 6e 50 65 72 63  .  }.  if( nPerc
db80: 65 6e 74 3e 31 20 29 7b 0a 20 20 20 20 73 71 6c  ent>1 ){.    sql
db90: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
dba0: 7a 65 6f 66 28 7a 4c 69 6e 65 29 2c 20 7a 4c 69  zeof(zLine), zLi
dbb0: 6e 65 2c 20 7a 46 6f 72 6d 61 74 2c 20 69 43 75  ne, zFormat, iCu
dbc0: 72 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 7d 65  r, iHiwtr);.  }e
dbd0: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
dbe0: 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
dbf0: 28 7a 4c 69 6e 65 29 2c 20 7a 4c 69 6e 65 2c 20  (zLine), zLine, 
dc00: 7a 46 6f 72 6d 61 74 2c 20 69 48 69 77 74 72 29  zFormat, iHiwtr)
dc10: 3b 0a 20 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e  ;.  }.  raw_prin
dc20: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 33 36  tf(p->out, "%-36
dc30: 73 20 25 73 5c 6e 22 2c 20 7a 4c 61 62 65 6c 2c  s %s\n", zLabel,
dc40: 20 7a 4c 69 6e 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a   zLine);.}../*.*
dc50: 2a 20 44 69 73 70 6c 61 79 20 6d 65 6d 6f 72 79  * Display memory
dc60: 20 73 74 61 74 73 2e 0a 2a 2f 0a 73 74 61 74 69   stats..*/.stati
dc70: 63 20 69 6e 74 20 64 69 73 70 6c 61 79 5f 73 74  c int display_st
dc80: 61 74 73 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ats(.  sqlite3 *
dc90: 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
dca0: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74     /* Database t
dcb0: 6f 20 71 75 65 72 79 20 2a 2f 0a 20 20 53 68 65  o query */.  She
dcc0: 6c 6c 53 74 61 74 65 20 2a 70 41 72 67 2c 20 20  llState *pArg,  
dcd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
dce0: 74 65 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74  ter to ShellStat
dcf0: 65 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 73 65  e */.  int bRese
dd00: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
dd10: 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 72 65     /* True to re
dd20: 73 65 74 20 74 68 65 20 73 74 61 74 73 20 2a 2f  set the stats */
dd30: 0a 29 7b 0a 20 20 69 6e 74 20 69 43 75 72 3b 0a  .){.  int iCur;.
dd40: 20 20 69 6e 74 20 69 48 69 77 74 72 3b 0a 0a 20    int iHiwtr;.. 
dd50: 20 69 66 28 20 70 41 72 67 20 26 26 20 70 41 72   if( pArg && pAr
dd60: 67 2d 3e 6f 75 74 20 29 7b 0a 20 20 20 20 64 69  g->out ){.    di
dd70: 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41  splayStatLine(pA
dd80: 72 67 2c 20 22 4d 65 6d 6f 72 79 20 55 73 65 64  rg, "Memory Used
dd90: 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64  :",.       "%lld
dda0: 20 28 6d 61 78 20 25 6c 6c 64 29 20 62 79 74 65   (max %lld) byte
ddb0: 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55  s", SQLITE_STATU
ddc0: 53 5f 4d 45 4d 4f 52 59 5f 55 53 45 44 2c 20 62  S_MEMORY_USED, b
ddd0: 52 65 73 65 74 29 3b 0a 20 20 20 20 64 69 73 70  Reset);.    disp
dde0: 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72 67  layStatLine(pArg
ddf0: 2c 20 22 4e 75 6d 62 65 72 20 6f 66 20 4f 75 74  , "Number of Out
de00: 73 74 61 6e 64 69 6e 67 20 41 6c 6c 6f 63 61 74  standing Allocat
de10: 69 6f 6e 73 3a 22 2c 0a 20 20 20 20 20 20 20 22  ions:",.       "
de20: 25 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29 22  %lld (max %lld)"
de30: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  , SQLITE_STATUS_
de40: 4d 41 4c 4c 4f 43 5f 43 4f 55 4e 54 2c 20 62 52  MALLOC_COUNT, bR
de50: 65 73 65 74 29 3b 0a 20 20 20 20 69 66 28 20 70  eset);.    if( p
de60: 41 72 67 2d 3e 73 68 65 6c 6c 46 6c 67 73 20 26  Arg->shellFlgs &
de70: 20 53 48 46 4c 47 5f 50 61 67 65 63 61 63 68 65   SHFLG_Pagecache
de80: 20 29 7b 0a 20 20 20 20 20 20 64 69 73 70 6c 61   ){.      displa
de90: 79 53 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20  yStatLine(pArg, 
dea0: 22 4e 75 6d 62 65 72 20 6f 66 20 50 63 61 63 68  "Number of Pcach
deb0: 65 20 50 61 67 65 73 20 55 73 65 64 3a 22 2c 0a  e Pages Used:",.
dec0: 20 20 20 20 20 20 20 20 20 22 25 6c 6c 64 20 28           "%lld (
ded0: 6d 61 78 20 25 6c 6c 64 29 20 70 61 67 65 73 22  max %lld) pages"
dee0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  , SQLITE_STATUS_
def0: 50 41 47 45 43 41 43 48 45 5f 55 53 45 44 2c 20  PAGECACHE_USED, 
df00: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 7d 0a 20  bReset);.    }. 
df10: 20 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69     displayStatLi
df20: 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d 62 65 72  ne(pArg, "Number
df30: 20 6f 66 20 50 63 61 63 68 65 20 4f 76 65 72 66   of Pcache Overf
df40: 6c 6f 77 20 42 79 74 65 73 3a 22 2c 0a 20 20 20  low Bytes:",.   
df50: 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25      "%lld (max %
df60: 6c 6c 64 29 20 62 79 74 65 73 22 2c 20 53 51 4c  lld) bytes", SQL
df70: 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43  ITE_STATUS_PAGEC
df80: 41 43 48 45 5f 4f 56 45 52 46 4c 4f 57 2c 20 62  ACHE_OVERFLOW, b
df90: 52 65 73 65 74 29 3b 0a 20 20 20 20 64 69 73 70  Reset);.    disp
dfa0: 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72 67  layStatLine(pArg
dfb0: 2c 20 22 4c 61 72 67 65 73 74 20 41 6c 6c 6f 63  , "Largest Alloc
dfc0: 61 74 69 6f 6e 3a 22 2c 0a 20 20 20 20 20 20 20  ation:",.       
dfd0: 22 25 6c 6c 64 20 62 79 74 65 73 22 2c 20 53 51  "%lld bytes", SQ
dfe0: 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 41 4c 4c  LITE_STATUS_MALL
dff0: 4f 43 5f 53 49 5a 45 2c 20 62 52 65 73 65 74 29  OC_SIZE, bReset)
e000: 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  ;.    displaySta
e010: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4c 61 72  tLine(pArg, "Lar
e020: 67 65 73 74 20 50 63 61 63 68 65 20 41 6c 6c 6f  gest Pcache Allo
e030: 63 61 74 69 6f 6e 3a 22 2c 0a 20 20 20 20 20 20  cation:",.      
e040: 20 22 25 6c 6c 64 20 62 79 74 65 73 22 2c 20 53   "%lld bytes", S
e050: 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47  QLITE_STATUS_PAG
e060: 45 43 41 43 48 45 5f 53 49 5a 45 2c 20 62 52 65  ECACHE_SIZE, bRe
e070: 73 65 74 29 3b 0a 23 69 66 64 65 66 20 59 59 54  set);.#ifdef YYT
e080: 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
e090: 48 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  H.    displaySta
e0a0: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 44 65 65  tLine(pArg, "Dee
e0b0: 70 65 73 74 20 50 61 72 73 65 72 20 53 74 61 63  pest Parser Stac
e0c0: 6b 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c  k:",.       "%ll
e0d0: 64 20 28 6d 61 78 20 25 6c 6c 64 29 22 2c 20 53  d (max %lld)", S
e0e0: 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 52  QLITE_STATUS_PAR
e0f0: 53 45 52 5f 53 54 41 43 4b 2c 20 62 52 65 73 65  SER_STACK, bRese
e100: 74 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 0a  t);.#endif.  }..
e110: 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70 41    if( pArg && pA
e120: 72 67 2d 3e 6f 75 74 20 26 26 20 64 62 20 29 7b  rg->out && db ){
e130: 0a 20 20 20 20 69 66 28 20 70 41 72 67 2d 3e 73  .    if( pArg->s
e140: 68 65 6c 6c 46 6c 67 73 20 26 20 53 48 46 4c 47  hellFlgs & SHFLG
e150: 5f 4c 6f 6f 6b 61 73 69 64 65 20 29 7b 0a 20 20  _Lookaside ){.  
e160: 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75      iHiwtr = iCu
e170: 72 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 73 71  r = -1;.      sq
e180: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
e190: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
e1a0: 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 55 53  TUS_LOOKASIDE_US
e1b0: 45 44 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ED,.            
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 26 69 43 75              &iCu
e1d0: 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65 73  r, &iHiwtr, bRes
e1e0: 65 74 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  et);.      raw_p
e1f0: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
e210: 4c 6f 6f 6b 61 73 69 64 65 20 53 6c 6f 74 73 20  Lookaside Slots 
e220: 55 73 65 64 3a 20 20 20 20 20 20 20 20 20 20 20  Used:           
e230: 20 20 20 20 20 25 64 20 28 6d 61 78 20 25 64 29       %d (max %d)
e240: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
e250: 20 20 20 69 43 75 72 2c 20 69 48 69 77 74 72 29     iCur, iHiwtr)
e260: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
e270: 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51  db_status(db, SQ
e280: 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f  LITE_DBSTATUS_LO
e290: 4f 4b 41 53 49 44 45 5f 48 49 54 2c 0a 20 20 20  OKASIDE_HIT,.   
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2b0: 20 20 20 20 20 26 69 43 75 72 2c 20 26 69 48 69       &iCur, &iHi
e2c0: 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20  wtr, bReset);.  
e2d0: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
e2e0: 41 72 67 2d 3e 6f 75 74 2c 20 22 53 75 63 63 65  Arg->out, "Succe
e2f0: 73 73 66 75 6c 20 6c 6f 6f 6b 61 73 69 64 65 20  ssful lookaside 
e300: 61 74 74 65 6d 70 74 73 3a 20 20 20 20 20 20 20  attempts:       
e310: 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  %d\n",.         
e320: 20 20 20 20 20 69 48 69 77 74 72 29 3b 0a 20 20       iHiwtr);.  
e330: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e340: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e350: 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53  _DBSTATUS_LOOKAS
e360: 49 44 45 5f 4d 49 53 53 5f 53 49 5a 45 2c 0a 20  IDE_MISS_SIZE,. 
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 20 20 20 20 20 20 20 26 69 43 75 72 2c 20 26 69         &iCur, &i
e390: 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a  Hiwtr, bReset);.
e3a0: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
e3b0: 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f  (pArg->out, "Loo
e3c0: 6b 61 73 69 64 65 20 66 61 69 6c 75 72 65 73 20  kaside failures 
e3d0: 64 75 65 20 74 6f 20 73 69 7a 65 3a 20 20 20 20  due to size:    
e3e0: 20 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20    %d\n",.       
e3f0: 20 20 20 20 20 20 20 69 48 69 77 74 72 29 3b 0a         iHiwtr);.
e400: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62        sqlite3_db
e410: 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49  _status(db, SQLI
e420: 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b  TE_DBSTATUS_LOOK
e430: 41 53 49 44 45 5f 4d 49 53 53 5f 46 55 4c 4c 2c  ASIDE_MISS_FULL,
e440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e450: 20 20 20 20 20 20 20 20 20 26 69 43 75 72 2c 20           &iCur, 
e460: 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29  &iHiwtr, bReset)
e470: 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  ;.      raw_prin
e480: 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c  tf(pArg->out, "L
e490: 6f 6f 6b 61 73 69 64 65 20 66 61 69 6c 75 72 65  ookaside failure
e4a0: 73 20 64 75 65 20 74 6f 20 4f 4f 4d 3a 20 20 20  s due to OOM:   
e4b0: 20 20 20 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20      %d\n",.     
e4c0: 20 20 20 20 20 20 20 20 20 69 48 69 77 74 72 29           iHiwtr)
e4d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 48 69 77  ;.    }.    iHiw
e4e0: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
e4f0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e500: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e510: 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
e520: 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48  USED, &iCur, &iH
e530: 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20  iwtr, bReset);. 
e540: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
e550: 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 72 20  rg->out, "Pager 
e560: 48 65 61 70 20 55 73 61 67 65 3a 20 20 20 20 20  Heap Usage:     
e570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
e580: 64 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20  d bytes\n",.    
e590: 20 20 20 20 20 20 20 20 69 43 75 72 29 3b 0a 20          iCur);. 
e5a0: 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72     iHiwtr = iCur
e5b0: 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74   = -1;.    sqlit
e5c0: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c  e3_db_status(db,
e5d0: 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
e5e0: 5f 43 41 43 48 45 5f 48 49 54 2c 20 26 69 43 75  _CACHE_HIT, &iCu
e5f0: 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b 0a  r, &iHiwtr, 1);.
e600: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
e610: 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 20  Arg->out, "Page 
e620: 63 61 63 68 65 20 68 69 74 73 3a 20 20 20 20 20  cache hits:     
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e640: 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20  %d\n", iCur);.  
e650: 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20    iHiwtr = iCur 
e660: 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  = -1;.    sqlite
e670: 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20  3_db_status(db, 
e680: 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
e690: 43 41 43 48 45 5f 4d 49 53 53 2c 20 26 69 43 75  CACHE_MISS, &iCu
e6a0: 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b 0a  r, &iHiwtr, 1);.
e6b0: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
e6c0: 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 20  Arg->out, "Page 
e6d0: 63 61 63 68 65 20 6d 69 73 73 65 73 3a 20 20 20  cache misses:   
e6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6f0: 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20  %d\n", iCur);.  
e700: 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20    iHiwtr = iCur 
e710: 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  = -1;.    sqlite
e720: 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20  3_db_status(db, 
e730: 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
e740: 43 41 43 48 45 5f 57 52 49 54 45 2c 20 26 69 43  CACHE_WRITE, &iC
e750: 75 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b  ur, &iHiwtr, 1);
e760: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e770: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65  pArg->out, "Page
e780: 20 63 61 63 68 65 20 77 72 69 74 65 73 3a 20 20   cache writes:  
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7a0: 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20   %d\n", iCur);. 
e7b0: 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72     iHiwtr = iCur
e7c0: 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74   = -1;.    sqlit
e7d0: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c  e3_db_status(db,
e7e0: 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
e7f0: 5f 53 43 48 45 4d 41 5f 55 53 45 44 2c 20 26 69  _SCHEMA_USED, &i
e800: 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52  Cur, &iHiwtr, bR
e810: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
e820: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e830: 20 22 53 63 68 65 6d 61 20 48 65 61 70 20 55 73   "Schema Heap Us
e840: 61 67 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  age:            
e850: 20 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c         %d bytes\
e860: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
e870: 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74  iCur);.    iHiwt
e880: 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20  r = iCur = -1;. 
e890: 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74     sqlite3_db_st
e8a0: 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f  atus(db, SQLITE_
e8b0: 44 42 53 54 41 54 55 53 5f 53 54 4d 54 5f 55 53  DBSTATUS_STMT_US
e8c0: 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77  ED, &iCur, &iHiw
e8d0: 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  tr, bReset);.   
e8e0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
e8f0: 2d 3e 6f 75 74 2c 20 22 53 74 61 74 65 6d 65 6e  ->out, "Statemen
e900: 74 20 48 65 61 70 2f 4c 6f 6f 6b 61 73 69 64 65  t Heap/Lookaside
e910: 20 55 73 61 67 65 3a 20 20 20 20 20 20 25 64 20   Usage:      %d 
e920: 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20 20 20  bytes\n",.      
e930: 20 20 20 20 20 20 69 43 75 72 29 3b 0a 20 20 7d        iCur);.  }
e940: 0a 0a 20 20 69 66 28 20 70 41 72 67 20 26 26 20  ..  if( pArg && 
e950: 70 41 72 67 2d 3e 6f 75 74 20 26 26 20 64 62 20  pArg->out && db 
e960: 26 26 20 70 41 72 67 2d 3e 70 53 74 6d 74 20 29  && pArg->pStmt )
e970: 7b 0a 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c  {.    iCur = sql
e980: 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73  ite3_stmt_status
e990: 28 70 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51  (pArg->pStmt, SQ
e9a0: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
e9b0: 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 2c 0a 20  FULLSCAN_STEP,. 
e9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 52                bR
e9e0: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
e9f0: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
ea00: 20 22 46 75 6c 6c 73 63 61 6e 20 53 74 65 70 73   "Fullscan Steps
ea10: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
ea20: 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43         %d\n", iC
ea30: 75 72 29 3b 0a 20 20 20 20 69 43 75 72 20 3d 20  ur);.    iCur = 
ea40: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
ea50: 74 75 73 28 70 41 72 67 2d 3e 70 53 74 6d 74 2c  tus(pArg->pStmt,
ea60: 20 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54   SQLITE_STMTSTAT
ea70: 55 53 5f 53 4f 52 54 2c 20 62 52 65 73 65 74 29  US_SORT, bReset)
ea80: 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  ;.    raw_printf
ea90: 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 53 6f 72  (pArg->out, "Sor
eaa0: 74 20 4f 70 65 72 61 74 69 6f 6e 73 3a 20 20 20  t Operations:   
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eac0: 20 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a    %d\n", iCur);.
ead0: 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69 74      iCur = sqlit
eae0: 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 70  e3_stmt_status(p
eaf0: 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49  Arg->pStmt, SQLI
eb00: 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 41 55  TE_STMTSTATUS_AU
eb10: 54 4f 49 4e 44 45 58 2c 62 52 65 73 65 74 29 3b  TOINDEX,bReset);
eb20: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
eb30: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 41 75 74 6f  pArg->out, "Auto
eb40: 69 6e 64 65 78 20 49 6e 73 65 72 74 73 3a 20 20  index Inserts:  
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb60: 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20   %d\n", iCur);. 
eb70: 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69 74 65     iCur = sqlite
eb80: 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 70 41  3_stmt_status(pA
eb90: 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54  rg->pStmt, SQLIT
eba0: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f  E_STMTSTATUS_VM_
ebb0: 53 54 45 50 2c 20 62 52 65 73 65 74 29 3b 0a 20  STEP, bReset);. 
ebc0: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
ebd0: 72 67 2d 3e 6f 75 74 2c 20 22 56 69 72 74 75 61  rg->out, "Virtua
ebe0: 6c 20 4d 61 63 68 69 6e 65 20 53 74 65 70 73 3a  l Machine Steps:
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
ec00: 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 7d  d\n", iCur);.  }
ec10: 0a 0a 23 69 66 64 65 66 20 5f 5f 6c 69 6e 75 78  ..#ifdef __linux
ec20: 5f 5f 0a 20 20 64 69 73 70 6c 61 79 4c 69 6e 75  __.  displayLinu
ec30: 78 49 6f 53 74 61 74 73 28 70 41 72 67 2d 3e 6f  xIoStats(pArg->o
ec40: 75 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  ut);.#endif..  /
ec50: 2a 20 44 6f 20 6e 6f 74 20 72 65 6d 6f 76 65 20  * Do not remove 
ec60: 74 68 69 73 20 6d 61 63 68 69 6e 65 20 72 65 61  this machine rea
ec70: 64 61 62 6c 65 20 63 6f 6d 6d 65 6e 74 3a 20 65  dable comment: e
ec80: 78 74 72 61 2d 73 74 61 74 73 2d 6f 75 74 70 75  xtra-stats-outpu
ec90: 74 2d 68 65 72 65 20 2a 2f 0a 0a 20 20 72 65 74  t-here */..  ret
eca0: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
ecb0: 44 69 73 70 6c 61 79 20 73 63 61 6e 20 73 74 61  Display scan sta
ecc0: 74 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ts..*/.static vo
ecd0: 69 64 20 64 69 73 70 6c 61 79 5f 73 63 61 6e 73  id display_scans
ece0: 74 61 74 73 28 0a 20 20 73 71 6c 69 74 65 33 20  tats(.  sqlite3 
ecf0: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
ed00: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
ed10: 61 73 65 20 74 6f 20 71 75 65 72 79 20 2a 2f 0a  ase to query */.
ed20: 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 41    ShellState *pA
ed30: 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20  rg              
ed40: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
ed50: 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 29 7b  ShellState */.){
ed60: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
ed70: 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
ed80: 53 54 41 54 55 53 0a 20 20 55 4e 55 53 45 44 5f  STATUS.  UNUSED_
ed90: 50 41 52 41 4d 45 54 45 52 28 64 62 29 3b 0a 20  PARAMETER(db);. 
eda0: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
edb0: 52 28 70 41 72 67 29 3b 0a 23 65 6c 73 65 0a 20  R(pArg);.#else. 
edc0: 20 69 6e 74 20 69 2c 20 6b 2c 20 6e 2c 20 6d 78   int i, k, n, mx
edd0: 3b 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70  ;.  raw_printf(p
ede0: 41 72 67 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d  Arg->out, "-----
edf0: 2d 2d 2d 20 73 63 61 6e 73 74 61 74 73 20 2d 2d  --- scanstats --
ee00: 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 20 20 6d 78  ------\n");.  mx
ee10: 20 3d 20 30 3b 0a 20 20 66 6f 72 28 6b 3d 30 3b   = 0;.  for(k=0;
ee20: 20 6b 3c 3d 6d 78 3b 20 6b 2b 2b 29 7b 0a 20 20   k<=mx; k++){.  
ee30: 20 20 64 6f 75 62 6c 65 20 72 45 73 74 4c 6f 6f    double rEstLoo
ee40: 70 20 3d 20 31 2e 30 3b 0a 20 20 20 20 66 6f 72  p = 1.0;.    for
ee50: 28 69 3d 6e 3d 30 3b 20 31 3b 20 69 2b 2b 29 7b  (i=n=0; 1; i++){
ee60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
ee70: 74 6d 74 20 2a 70 20 3d 20 70 41 72 67 2d 3e 70  tmt *p = pArg->p
ee80: 53 74 6d 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  Stmt;.      sqli
ee90: 74 65 33 5f 69 6e 74 36 34 20 6e 4c 6f 6f 70 2c  te3_int64 nLoop,
eea0: 20 6e 56 69 73 69 74 3b 0a 20 20 20 20 20 20 64   nVisit;.      d
eeb0: 6f 75 62 6c 65 20 72 45 73 74 3b 0a 20 20 20 20  ouble rEst;.    
eec0: 20 20 69 6e 74 20 69 53 69 64 3b 0a 20 20 20 20    int iSid;.    
eed0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
eee0: 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20 69 66  xplain;.      if
eef0: 28 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73  ( sqlite3_stmt_s
ef00: 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20  canstatus(p, i, 
ef10: 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f  SQLITE_SCANSTAT_
ef20: 4e 4c 4f 4f 50 2c 20 28 76 6f 69 64 2a 29 26 6e  NLOOP, (void*)&n
ef30: 4c 6f 6f 70 29 20 29 7b 0a 20 20 20 20 20 20 20  Loop) ){.       
ef40: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
ef50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74        sqlite3_st
ef60: 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c  mt_scanstatus(p,
ef70: 20 69 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53   i, SQLITE_SCANS
ef80: 54 41 54 5f 53 45 4c 45 43 54 49 44 2c 20 28 76  TAT_SELECTID, (v
ef90: 6f 69 64 2a 29 26 69 53 69 64 29 3b 0a 20 20 20  oid*)&iSid);.   
efa0: 20 20 20 69 66 28 20 69 53 69 64 3e 6d 78 20 29     if( iSid>mx )
efb0: 20 6d 78 20 3d 20 69 53 69 64 3b 0a 20 20 20 20   mx = iSid;.    
efc0: 20 20 69 66 28 20 69 53 69 64 21 3d 6b 20 29 20    if( iSid!=k ) 
efd0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
efe0: 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  if( n==0 ){.    
eff0: 20 20 20 20 72 45 73 74 4c 6f 6f 70 20 3d 20 28      rEstLoop = (
f000: 64 6f 75 62 6c 65 29 6e 4c 6f 6f 70 3b 0a 20 20  double)nLoop;.  
f010: 20 20 20 20 20 20 69 66 28 20 6b 3e 30 20 29 20        if( k>0 ) 
f020: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
f030: 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20  >out, "-------- 
f040: 73 75 62 71 75 65 72 79 20 25 64 20 2d 2d 2d 2d  subquery %d ----
f050: 2d 2d 2d 5c 6e 22 2c 20 6b 29 3b 0a 20 20 20 20  ---\n", k);.    
f060: 20 20 7d 0a 20 20 20 20 20 20 6e 2b 2b 3b 0a 20    }.      n++;. 
f070: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d       sqlite3_stm
f080: 74 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c 20  t_scanstatus(p, 
f090: 69 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54  i, SQLITE_SCANST
f0a0: 41 54 5f 4e 56 49 53 49 54 2c 20 28 76 6f 69 64  AT_NVISIT, (void
f0b0: 2a 29 26 6e 56 69 73 69 74 29 3b 0a 20 20 20 20  *)&nVisit);.    
f0c0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73    sqlite3_stmt_s
f0d0: 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20  canstatus(p, i, 
f0e0: 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f  SQLITE_SCANSTAT_
f0f0: 45 53 54 2c 20 28 76 6f 69 64 2a 29 26 72 45 73  EST, (void*)&rEs
f100: 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
f110: 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75  3_stmt_scanstatu
f120: 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45 5f 53  s(p, i, SQLITE_S
f130: 43 41 4e 53 54 41 54 5f 45 58 50 4c 41 49 4e 2c  CANSTAT_EXPLAIN,
f140: 20 28 76 6f 69 64 2a 29 26 7a 45 78 70 6c 61 69   (void*)&zExplai
f150: 6e 29 3b 0a 20 20 20 20 20 20 75 74 66 38 5f 70  n);.      utf8_p
f160: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
f170: 20 22 4c 6f 6f 70 20 25 32 64 3a 20 25 73 5c 6e   "Loop %2d: %s\n
f180: 22 2c 20 6e 2c 20 7a 45 78 70 6c 61 69 6e 29 3b  ", n, zExplain);
f190: 0a 20 20 20 20 20 20 72 45 73 74 4c 6f 6f 70 20  .      rEstLoop 
f1a0: 2a 3d 20 72 45 73 74 3b 0a 20 20 20 20 20 20 72  *= rEst;.      r
f1b0: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
f1c0: 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20 20 22  out,.          "
f1d0: 20 20 20 20 20 20 20 20 20 6e 4c 6f 6f 70 3d 25           nLoop=%
f1e0: 2d 38 6c 6c 64 20 6e 52 6f 77 3d 25 2d 38 6c 6c  -8lld nRow=%-8ll
f1f0: 64 20 65 73 74 52 6f 77 3d 25 2d 38 6c 6c 64 20  d estRow=%-8lld 
f200: 65 73 74 52 6f 77 2f 4c 6f 6f 70 3d 25 2d 38 67  estRow/Loop=%-8g
f210: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 6e  \n",.          n
f220: 4c 6f 6f 70 2c 20 6e 56 69 73 69 74 2c 20 28 73  Loop, nVisit, (s
f230: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 28 72 45  qlite3_int64)(rE
f240: 73 74 4c 6f 6f 70 2b 30 2e 35 29 2c 20 72 45 73  stLoop+0.5), rEs
f250: 74 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d  t.      );.    }
f260: 0a 20 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e 74  .  }.  raw_print
f270: 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 2d 2d  f(pArg->out, "--
f280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 23  ---------\n");.#
f2a0: 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  endif.}../*.** P
f2b0: 61 72 61 6d 65 74 65 72 20 61 7a 41 72 72 61 79  arameter azArray
f2c0: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 7a 65 72   points to a zer
f2d0: 6f 2d 74 65 72 6d 69 6e 61 74 65 64 20 61 72 72  o-terminated arr
f2e0: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 2e 20 7a  ay of strings. z
f2f0: 53 74 72 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  Str.** points to
f300: 20 61 20 73 69 6e 67 6c 65 20 6e 75 6c 2d 74 65   a single nul-te
f310: 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67 2e  rminated string.
f320: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
f330: 20 69 66 20 7a 53 74 72 0a 2a 2a 20 69 73 20 65   if zStr.** is e
f340: 71 75 61 6c 2c 20 61 63 63 6f 72 64 69 6e 67 20  qual, according 
f350: 74 6f 20 73 74 72 63 6d 70 28 29 2c 20 74 6f 20  to strcmp(), to 
f360: 61 6e 79 20 6f 66 20 74 68 65 20 73 74 72 69 6e  any of the strin
f370: 67 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 2e  gs in the array.
f380: 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72  .** Otherwise, r
f390: 65 74 75 72 6e 20 7a 65 72 6f 2e 0a 2a 2f 0a 73  eturn zero..*/.s
f3a0: 74 61 74 69 63 20 69 6e 74 20 73 74 72 5f 69 6e  tatic int str_in
f3b0: 5f 61 72 72 61 79 28 63 6f 6e 73 74 20 63 68 61  _array(const cha
f3c0: 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73 74 20 63  r *zStr, const c
f3d0: 68 61 72 20 2a 2a 61 7a 41 72 72 61 79 29 7b 0a  har **azArray){.
f3e0: 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69    int i;.  for(i
f3f0: 3d 30 3b 20 61 7a 41 72 72 61 79 5b 69 5d 3b 20  =0; azArray[i]; 
f400: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 30 3d  i++){.    if( 0=
f410: 3d 73 74 72 63 6d 70 28 7a 53 74 72 2c 20 61 7a  =strcmp(zStr, az
f420: 41 72 72 61 79 5b 69 5d 29 20 29 20 72 65 74 75  Array[i]) ) retu
f430: 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75  rn 1;.  }.  retu
f440: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  rn 0;.}../*.** I
f450: 66 20 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  f compiled state
f460: 6d 65 6e 74 20 70 53 71 6c 20 61 70 70 65 61 72  ment pSql appear
f470: 73 20 74 6f 20 62 65 20 61 6e 20 45 58 50 4c 41  s to be an EXPLA
f480: 49 4e 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c  IN statement, al
f490: 6c 6f 63 61 74 65 0a 2a 2a 20 61 6e 64 20 70 6f  locate.** and po
f4a0: 70 75 6c 61 74 65 20 74 68 65 20 53 68 65 6c 6c  pulate the Shell
f4b0: 53 74 61 74 65 2e 61 69 49 6e 64 65 6e 74 5b 5d  State.aiIndent[]
f4c0: 20 61 72 72 61 79 20 77 69 74 68 20 74 68 65 20   array with the 
f4d0: 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 73 70 61  number of.** spa
f4e0: 63 65 73 20 65 61 63 68 20 6f 70 63 6f 64 65 20  ces each opcode 
f4f0: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
f500: 65 64 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ed before it is 
f510: 6f 75 74 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  output..**.** Th
f520: 65 20 69 6e 64 65 6e 74 69 6e 67 20 72 75 6c 65  e indenting rule
f530: 73 20 61 72 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  s are:.**.**    
f540: 20 2a 20 46 6f 72 20 65 61 63 68 20 22 4e 65 78   * For each "Nex
f550: 74 22 2c 20 22 50 72 65 76 22 2c 20 22 56 4e 65  t", "Prev", "VNe
f560: 78 74 22 20 6f 72 20 22 56 50 72 65 76 22 20 69  xt" or "VPrev" i
f570: 6e 73 74 72 75 63 74 69 6f 6e 2c 20 69 6e 64 65  nstruction, inde
f580: 6e 74 0a 2a 2a 20 20 20 20 20 20 20 61 6c 6c 20  nt.**       all 
f590: 6f 70 63 6f 64 65 73 20 74 68 61 74 20 6f 63 63  opcodes that occ
f5a0: 75 72 20 62 65 74 77 65 65 6e 20 74 68 65 20 70  ur between the p
f5b0: 32 20 6a 75 6d 70 20 64 65 73 74 69 6e 61 74 69  2 jump destinati
f5c0: 6f 6e 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64  on and the opcod
f5d0: 65 0a 2a 2a 20 20 20 20 20 20 20 69 74 73 65 6c  e.**       itsel
f5e0: 66 20 62 79 20 32 20 73 70 61 63 65 73 2e 0a 2a  f by 2 spaces..*
f5f0: 2a 0a 2a 2a 20 20 20 20 20 2a 20 46 6f 72 20 65  *.**     * For e
f600: 61 63 68 20 22 47 6f 74 6f 22 2c 20 69 66 20 74  ach "Goto", if t
f610: 68 65 20 6a 75 6d 70 20 64 65 73 74 69 6e 61 74  he jump destinat
f620: 69 6f 6e 20 69 73 20 65 61 72 6c 69 65 72 20 69  ion is earlier i
f630: 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  n the program.**
f640: 20 20 20 20 20 20 20 61 6e 64 20 65 6e 64 73 20         and ends 
f650: 6f 6e 20 6f 6e 65 20 6f 66 3a 0a 2a 2a 20 20 20  on one of:.**   
f660: 20 20 20 20 20 20 20 59 69 65 6c 64 20 20 53 65         Yield  Se
f670: 65 6b 47 74 20 20 53 65 65 6b 4c 74 20 20 52 6f  ekGt  SeekLt  Ro
f680: 77 53 65 74 52 65 61 64 20 20 52 65 77 69 6e 64  wSetRead  Rewind
f690: 0a 2a 2a 20 20 20 20 20 20 20 6f 72 20 69 66 20  .**       or if 
f6a0: 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  the P1 parameter
f6b0: 20 69 73 20 6f 6e 65 20 69 6e 73 74 65 61 64 20   is one instead 
f6c0: 6f 66 20 7a 65 72 6f 2c 0a 2a 2a 20 20 20 20 20  of zero,.**     
f6d0: 20 20 74 68 65 6e 20 69 6e 64 65 6e 74 20 61 6c    then indent al
f6e0: 6c 20 6f 70 63 6f 64 65 73 20 62 65 74 77 65 65  l opcodes betwee
f6f0: 6e 20 74 68 65 20 65 61 72 6c 69 65 72 20 69 6e  n the earlier in
f700: 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 20 20 20  struction.**    
f710: 20 20 20 61 6e 64 20 22 47 6f 74 6f 22 20 62 79     and "Goto" by
f720: 20 32 20 73 70 61 63 65 73 2e 0a 2a 2f 0a 73 74   2 spaces..*/.st
f730: 61 74 69 63 20 76 6f 69 64 20 65 78 70 6c 61 69  atic void explai
f740: 6e 5f 64 61 74 61 5f 70 72 65 70 61 72 65 28 53  n_data_prepare(S
f750: 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 73 71  hellState *p, sq
f760: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 71 6c  lite3_stmt *pSql
f770: 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ){.  const char 
f780: 2a 7a 53 71 6c 3b 20 20 20 20 20 20 20 20 20 20  *zSql;          
f790: 20 20 20 20 20 2f 2a 20 54 68 65 20 74 65 78 74       /* The text
f7a0: 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74   of the SQL stat
f7b0: 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ement */.  const
f7c0: 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
f7d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
f7e0: 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
f7f0: 68 69 73 20 69 73 20 61 6e 20 45 58 50 4c 41 49  his is an EXPLAI
f800: 4e 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 62 59 69  N */.  int *abYi
f810: 65 6c 64 20 3d 20 30 3b 20 20 20 20 20 20 20 20  eld = 0;        
f820: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
f830: 66 20 6f 70 20 69 73 20 61 6e 20 4f 50 5f 59 69  f op is an OP_Yi
f840: 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c  eld */.  int nAl
f850: 6c 6f 63 20 3d 20 30 3b 20 20 20 20 20 20 20 20  loc = 0;        
f860: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
f870: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 70 2d  cated size of p-
f880: 3e 61 69 49 6e 64 65 6e 74 5b 5d 2c 20 61 62 59  >aiIndent[], abY
f890: 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 69 4f  ield */.  int iO
f8a0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
f8b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
f8c0: 65 78 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e 20  ex of operation 
f8d0: 69 6e 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b 5d  in p->aiIndent[]
f8e0: 20 2a 2f 0a 0a 20 20 63 6f 6e 73 74 20 63 68 61   */..  const cha
f8f0: 72 20 2a 61 7a 4e 65 78 74 5b 5d 20 3d 20 7b 20  r *azNext[] = { 
f900: 22 4e 65 78 74 22 2c 20 22 50 72 65 76 22 2c 20  "Next", "Prev", 
f910: 22 56 50 72 65 76 22 2c 20 22 56 4e 65 78 74 22  "VPrev", "VNext"
f920: 2c 20 22 53 6f 72 74 65 72 4e 65 78 74 22 2c 0a  , "SorterNext",.
f930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f940: 20 20 20 20 20 20 20 20 20 20 20 22 4e 65 78 74             "Next
f950: 49 66 4f 70 65 6e 22 2c 20 22 50 72 65 76 49 66  IfOpen", "PrevIf
f960: 4f 70 65 6e 22 2c 20 30 20 7d 3b 0a 20 20 63 6f  Open", 0 };.  co
f970: 6e 73 74 20 63 68 61 72 20 2a 61 7a 59 69 65 6c  nst char *azYiel
f980: 64 5b 5d 20 3d 20 7b 20 22 59 69 65 6c 64 22 2c  d[] = { "Yield",
f990: 20 22 53 65 65 6b 4c 54 22 2c 20 22 53 65 65 6b   "SeekLT", "Seek
f9a0: 47 54 22 2c 20 22 52 6f 77 53 65 74 52 65 61 64  GT", "RowSetRead
f9b0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
f9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
f9d0: 52 65 77 69 6e 64 22 2c 20 30 20 7d 3b 0a 20 20  Rewind", 0 };.  
f9e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 47 6f  const char *azGo
f9f0: 74 6f 5b 5d 20 3d 20 7b 20 22 47 6f 74 6f 22 2c  to[] = { "Goto",
fa00: 20 30 20 7d 3b 0a 0a 20 20 2f 2a 20 54 72 79 20   0 };..  /* Try 
fa10: 74 6f 20 66 69 67 75 72 65 20 6f 75 74 20 69 66  to figure out if
fa20: 20 74 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20   this is really 
fa30: 61 6e 20 45 58 50 4c 41 49 4e 20 73 74 61 74 65  an EXPLAIN state
fa40: 6d 65 6e 74 2e 20 49 66 20 74 68 69 73 0a 20 20  ment. If this.  
fa50: 2a 2a 20 63 61 6e 6e 6f 74 20 62 65 20 76 65 72  ** cannot be ver
fa60: 69 66 69 65 64 2c 20 72 65 74 75 72 6e 20 65 61  ified, return ea
fa70: 72 6c 79 2e 20 20 2a 2f 0a 20 20 69 66 28 20 73  rly.  */.  if( s
fa80: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
fa90: 75 6e 74 28 70 53 71 6c 29 21 3d 38 20 29 7b 0a  unt(pSql)!=8 ){.
faa0: 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70      p->cMode = p
fab0: 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 72 65 74 75  ->mode;.    retu
fac0: 72 6e 3b 0a 20 20 7d 0a 20 20 7a 53 71 6c 20 3d  rn;.  }.  zSql =
fad0: 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 70 53 71   sqlite3_sql(pSq
fae0: 6c 29 3b 0a 20 20 69 66 28 20 7a 53 71 6c 3d 3d  l);.  if( zSql==
faf0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 66 6f  0 ) return;.  fo
fb00: 72 28 7a 3d 7a 53 71 6c 3b 20 2a 7a 3d 3d 27 20  r(z=zSql; *z==' 
fb10: 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 74 27 20 7c 7c  ' || *z=='\t' ||
fb20: 20 2a 7a 3d 3d 27 5c 6e 27 20 7c 7c 20 2a 7a 3d   *z=='\n' || *z=
fb30: 3d 27 5c 66 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 72  ='\f' || *z=='\r
fb40: 27 3b 20 7a 2b 2b 29 3b 0a 20 20 69 66 28 20 73  '; z++);.  if( s
fb50: 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28  qlite3_strnicmp(
fb60: 7a 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20 37 29  z, "explain", 7)
fb70: 20 29 7b 0a 20 20 20 20 70 2d 3e 63 4d 6f 64 65   ){.    p->cMode
fb80: 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20   = p->mode;.    
fb90: 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 66  return;.  }..  f
fba0: 6f 72 28 69 4f 70 3d 30 3b 20 53 51 4c 49 54 45  or(iOp=0; SQLITE
fbb0: 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f 73 74  _ROW==sqlite3_st
fbc0: 65 70 28 70 53 71 6c 29 3b 20 69 4f 70 2b 2b 29  ep(pSql); iOp++)
fbd0: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
fbe0: 20 69 6e 74 20 69 41 64 64 72 20 3d 20 73 71 6c   int iAddr = sql
fbf0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  ite3_column_int(
fc00: 70 53 71 6c 2c 20 30 29 3b 0a 20 20 20 20 63 6f  pSql, 0);.    co
fc10: 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 20 3d 20  nst char *zOp = 
fc20: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
fc30: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
fc40: 28 70 53 71 6c 2c 20 31 29 3b 0a 0a 20 20 20 20  (pSql, 1);..    
fc50: 2f 2a 20 53 65 74 20 70 32 20 74 6f 20 74 68 65  /* Set p2 to the
fc60: 20 50 32 20 66 69 65 6c 64 20 6f 66 20 74 68 65   P2 field of the
fc70: 20 63 75 72 72 65 6e 74 20 6f 70 63 6f 64 65 2e   current opcode.
fc80: 20 54 68 65 6e 2c 20 61 73 73 75 6d 69 6e 67 20   Then, assuming 
fc90: 74 68 61 74 0a 20 20 20 20 2a 2a 20 70 32 20 69  that.    ** p2 i
fca0: 73 20 61 6e 20 69 6e 73 74 72 75 63 74 69 6f 6e  s an instruction
fcb0: 20 61 64 64 72 65 73 73 2c 20 73 65 74 20 76 61   address, set va
fcc0: 72 69 61 62 6c 65 20 70 32 6f 70 20 74 6f 20 74  riable p2op to t
fcd0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 61 74  he index of that
fce0: 0a 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74  .    ** instruct
fcf0: 69 6f 6e 20 69 6e 20 74 68 65 20 61 69 49 6e 64  ion in the aiInd
fd00: 65 6e 74 5b 5d 20 61 72 72 61 79 2e 20 70 32 20  ent[] array. p2 
fd10: 61 6e 64 20 70 32 6f 70 20 6d 61 79 20 62 65 20  and p2op may be 
fd20: 64 69 66 66 65 72 65 6e 74 20 69 66 0a 20 20 20  different if.   
fd30: 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
fd40: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 70  instruction is p
fd50: 61 72 74 20 6f 66 20 61 20 73 75 62 2d 70 72 6f  art of a sub-pro
fd60: 67 72 61 6d 20 67 65 6e 65 72 61 74 65 64 20 62  gram generated b
fd70: 79 20 61 6e 0a 20 20 20 20 2a 2a 20 53 51 4c 20  y an.    ** SQL 
fd80: 74 72 69 67 67 65 72 20 6f 72 20 66 6f 72 65 69  trigger or forei
fd90: 67 6e 20 6b 65 79 2e 20 20 2a 2f 0a 20 20 20 20  gn key.  */.    
fda0: 69 6e 74 20 70 32 20 3d 20 73 71 6c 69 74 65 33  int p2 = sqlite3
fdb0: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71 6c  _column_int(pSql
fdc0: 2c 20 33 29 3b 0a 20 20 20 20 69 6e 74 20 70 32  , 3);.    int p2
fdd0: 6f 70 20 3d 20 28 70 32 20 2b 20 28 69 4f 70 2d  op = (p2 + (iOp-
fde0: 69 41 64 64 72 29 29 3b 0a 0a 20 20 20 20 2f 2a  iAddr));..    /*
fdf0: 20 47 72 6f 77 20 74 68 65 20 70 2d 3e 61 69 49   Grow the p->aiI
fe00: 6e 64 65 6e 74 20 61 72 72 61 79 20 61 73 20 72  ndent array as r
fe10: 65 71 75 69 72 65 64 20 2a 2f 0a 20 20 20 20 69  equired */.    i
fe20: 66 28 20 69 4f 70 3e 3d 6e 41 6c 6c 6f 63 20 29  f( iOp>=nAlloc )
fe30: 7b 0a 20 20 20 20 20 20 69 66 28 20 69 4f 70 3d  {.      if( iOp=
fe40: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
fe50: 20 44 6f 20 66 75 72 74 68 65 72 20 76 65 72 66   Do further verf
fe60: 69 63 61 74 69 6f 6e 20 74 68 61 74 20 74 68 69  ication that thi
fe70: 73 20 69 73 20 65 78 70 6c 61 69 6e 20 6f 75 74  s is explain out
fe80: 70 75 74 2e 20 20 41 62 6f 72 74 20 69 66 0a 20  put.  Abort if. 
fe90: 20 20 20 20 20 20 20 2a 2a 20 69 74 20 69 73 20         ** it is 
fea0: 6e 6f 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  not */.        s
feb0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
fec0: 20 2a 65 78 70 6c 61 69 6e 43 6f 6c 73 5b 5d 20   *explainCols[] 
fed0: 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 22  = {.           "
fee0: 61 64 64 72 22 2c 20 22 6f 70 63 6f 64 65 22 2c  addr", "opcode",
fef0: 20 22 70 31 22 2c 20 22 70 32 22 2c 20 22 70 33   "p1", "p2", "p3
ff00: 22 2c 20 22 70 34 22 2c 20 22 70 35 22 2c 20 22  ", "p4", "p5", "
ff10: 63 6f 6d 6d 65 6e 74 22 20 7d 3b 0a 20 20 20 20  comment" };.    
ff20: 20 20 20 20 69 6e 74 20 6a 6a 3b 0a 20 20 20 20      int jj;.    
ff30: 20 20 20 20 66 6f 72 28 6a 6a 3d 30 3b 20 6a 6a      for(jj=0; jj
ff40: 3c 41 72 72 61 79 53 69 7a 65 28 65 78 70 6c 61  <ArraySize(expla
ff50: 69 6e 43 6f 6c 73 29 3b 20 6a 6a 2b 2b 29 7b 0a  inCols); jj++){.
ff60: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73 74            if( st
ff70: 72 63 6d 70 28 73 71 6c 69 74 65 33 5f 63 6f 6c  rcmp(sqlite3_col
ff80: 75 6d 6e 5f 6e 61 6d 65 28 70 53 71 6c 2c 6a 6a  umn_name(pSql,jj
ff90: 29 2c 65 78 70 6c 61 69 6e 43 6f 6c 73 5b 6a 6a  ),explainCols[jj
ffa0: 5d 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ])!=0 ){.       
ffb0: 20 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20       p->cMode = 
ffc0: 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20 20  p->mode;.       
ffd0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
ffe0: 65 74 28 70 53 71 6c 29 3b 0a 20 20 20 20 20 20  et(pSql);.      
fff0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
10000 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
10010 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
10020 20 20 6e 41 6c 6c 6f 63 20 2b 3d 20 31 30 30 3b    nAlloc += 100;
10030 0a 20 20 20 20 20 20 70 2d 3e 61 69 49 6e 64 65  .      p->aiInde
10040 6e 74 20 3d 20 28 69 6e 74 2a 29 73 71 6c 69 74  nt = (int*)sqlit
10050 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 70 2d 3e  e3_realloc64(p->
10060 61 69 49 6e 64 65 6e 74 2c 20 6e 41 6c 6c 6f 63  aiIndent, nAlloc
10070 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 20  *sizeof(int));. 
10080 20 20 20 20 20 61 62 59 69 65 6c 64 20 3d 20 28       abYield = (
10090 69 6e 74 2a 29 73 71 6c 69 74 65 33 5f 72 65 61  int*)sqlite3_rea
100a0 6c 6c 6f 63 36 34 28 61 62 59 69 65 6c 64 2c 20  lloc64(abYield, 
100b0 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f 66 28 69 6e  nAlloc*sizeof(in
100c0 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  t));.    }.    a
100d0 62 59 69 65 6c 64 5b 69 4f 70 5d 20 3d 20 73 74  bYield[iOp] = st
100e0 72 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c 20  r_in_array(zOp, 
100f0 61 7a 59 69 65 6c 64 29 3b 0a 20 20 20 20 70 2d  azYield);.    p-
10100 3e 61 69 49 6e 64 65 6e 74 5b 69 4f 70 5d 20 3d  >aiIndent[iOp] =
10110 20 30 3b 0a 20 20 20 20 70 2d 3e 6e 49 6e 64 65   0;.    p->nInde
10120 6e 74 20 3d 20 69 4f 70 2b 31 3b 0a 0a 20 20 20  nt = iOp+1;..   
10130 20 69 66 28 20 73 74 72 5f 69 6e 5f 61 72 72 61   if( str_in_arra
10140 79 28 7a 4f 70 2c 20 61 7a 4e 65 78 74 29 20 29  y(zOp, azNext) )
10150 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 70 32  {.      for(i=p2
10160 6f 70 3b 20 69 3c 69 4f 70 3b 20 69 2b 2b 29 20  op; i<iOp; i++) 
10170 70 2d 3e 61 69 49 6e 64 65 6e 74 5b 69 5d 20 2b  p->aiIndent[i] +
10180 3d 20 32 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  = 2;.    }.    i
10190 66 28 20 73 74 72 5f 69 6e 5f 61 72 72 61 79 28  f( str_in_array(
101a0 7a 4f 70 2c 20 61 7a 47 6f 74 6f 29 20 26 26 20  zOp, azGoto) && 
101b0 70 32 6f 70 3c 70 2d 3e 6e 49 6e 64 65 6e 74 0a  p2op<p->nIndent.
101c0 20 20 20 20 20 26 26 20 28 61 62 59 69 65 6c 64       && (abYield
101d0 5b 70 32 6f 70 5d 20 7c 7c 20 73 71 6c 69 74 65  [p2op] || sqlite
101e0 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71  3_column_int(pSq
101f0 6c 2c 20 32 29 29 0a 20 20 20 20 29 7b 0a 20 20  l, 2)).    ){.  
10200 20 20 20 20 66 6f 72 28 69 3d 70 32 6f 70 3b 20      for(i=p2op; 
10210 69 3c 69 4f 70 3b 20 69 2b 2b 29 20 70 2d 3e 61  i<iOp; i++) p->a
10220 69 49 6e 64 65 6e 74 5b 69 5d 20 2b 3d 20 32 3b  iIndent[i] += 2;
10230 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 70 2d  .    }.  }..  p-
10240 3e 69 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 20 20  >iIndent = 0;.  
10250 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 62 59  sqlite3_free(abY
10260 69 65 6c 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  ield);.  sqlite3
10270 5f 72 65 73 65 74 28 70 53 71 6c 29 3b 0a 7d 0a  _reset(pSql);.}.
10280 0a 2f 2a 0a 2a 2a 20 46 72 65 65 20 74 68 65 20  ./*.** Free the 
10290 61 72 72 61 79 20 61 6c 6c 6f 63 61 74 65 64 20  array allocated 
102a0 62 79 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f  by explain_data_
102b0 70 72 65 70 61 72 65 28 29 2e 0a 2a 2f 0a 73 74  prepare()..*/.st
102c0 61 74 69 63 20 76 6f 69 64 20 65 78 70 6c 61 69  atic void explai
102d0 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 53 68  n_data_delete(Sh
102e0 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20  ellState *p){.  
102f0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 2d 3e  sqlite3_free(p->
10300 61 69 49 6e 64 65 6e 74 29 3b 0a 20 20 70 2d 3e  aiIndent);.  p->
10310 61 69 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 20 20  aiIndent = 0;.  
10320 70 2d 3e 6e 49 6e 64 65 6e 74 20 3d 20 30 3b 0a  p->nIndent = 0;.
10330 20 20 70 2d 3e 69 49 6e 64 65 6e 74 20 3d 20 30    p->iIndent = 0
10340 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  ;.}../*.** Disab
10350 6c 65 20 61 6e 64 20 72 65 73 74 6f 72 65 20 2e  le and restore .
10360 77 68 65 72 65 74 72 61 63 65 20 61 6e 64 20 2e  wheretrace and .
10370 73 65 6c 65 63 74 74 72 61 63 65 20 73 65 74 74  selecttrace sett
10380 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ings..*/.#if def
10390 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
103a0 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
103b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
103c0 43 54 54 52 41 43 45 29 0a 65 78 74 65 72 6e 20  CTTRACE).extern 
103d0 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
103e0 74 54 72 61 63 65 3b 0a 73 74 61 74 69 63 20 69  tTrace;.static i
103f0 6e 74 20 73 61 76 65 64 53 65 6c 65 63 74 54 72  nt savedSelectTr
10400 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ace;.#endif.#if 
10410 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
10420 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
10430 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 57  (SQLITE_ENABLE_W
10440 48 45 52 45 54 52 41 43 45 29 0a 65 78 74 65 72  HERETRACE).exter
10450 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  n int sqlite3Whe
10460 72 65 54 72 61 63 65 3b 0a 73 74 61 74 69 63 20  reTrace;.static 
10470 69 6e 74 20 73 61 76 65 64 57 68 65 72 65 54 72  int savedWhereTr
10480 61 63 65 3b 0a 23 65 6e 64 69 66 0a 73 74 61 74  ace;.#endif.stat
10490 69 63 20 76 6f 69 64 20 64 69 73 61 62 6c 65 5f  ic void disable_
104a0 64 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65  debug_trace_mode
104b0 73 28 76 6f 69 64 29 7b 0a 23 69 66 20 64 65 66  s(void){.#if def
104c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
104d0 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
104e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
104f0 43 54 54 52 41 43 45 29 0a 20 20 73 61 76 65 64  CTTRACE).  saved
10500 53 65 6c 65 63 74 54 72 61 63 65 20 3d 20 73 71  SelectTrace = sq
10510 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
10520 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ;.  sqlite3Selec
10530 74 54 72 61 63 65 20 3d 20 30 3b 0a 23 65 6e 64  tTrace = 0;.#end
10540 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
10550 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
10560 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
10570 4e 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45  NABLE_WHERETRACE
10580 29 0a 20 20 73 61 76 65 64 57 68 65 72 65 54 72  ).  savedWhereTr
10590 61 63 65 20 3d 20 73 71 6c 69 74 65 33 57 68 65  ace = sqlite3Whe
105a0 72 65 54 72 61 63 65 3b 0a 20 20 73 71 6c 69 74  reTrace;.  sqlit
105b0 65 33 57 68 65 72 65 54 72 61 63 65 20 3d 20 30  e3WhereTrace = 0
105c0 3b 0a 23 65 6e 64 69 66 0a 7d 0a 73 74 61 74 69  ;.#endif.}.stati
105d0 63 20 76 6f 69 64 20 72 65 73 74 6f 72 65 5f 64  c void restore_d
105e0 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65 73  ebug_trace_modes
105f0 28 76 6f 69 64 29 7b 0a 23 69 66 20 64 65 66 69  (void){.#if defi
10600 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
10610 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
10620 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43  ITE_ENABLE_SELEC
10630 54 54 52 41 43 45 29 0a 20 20 73 71 6c 69 74 65  TTRACE).  sqlite
10640 33 53 65 6c 65 63 74 54 72 61 63 65 20 3d 20 73  3SelectTrace = s
10650 61 76 65 64 53 65 6c 65 63 74 54 72 61 63 65 3b  avedSelectTrace;
10660 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
10670 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
10680 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
10690 49 54 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45  ITE_ENABLE_WHERE
106a0 54 52 41 43 45 29 0a 20 20 73 71 6c 69 74 65 33  TRACE).  sqlite3
106b0 57 68 65 72 65 54 72 61 63 65 20 3d 20 73 61 76  WhereTrace = sav
106c0 65 64 57 68 65 72 65 54 72 61 63 65 3b 0a 23 65  edWhereTrace;.#e
106d0 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75  ndif.}../*.** Ru
106e0 6e 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  n a prepared sta
106f0 74 65 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63  tement.*/.static
10700 20 76 6f 69 64 20 65 78 65 63 5f 70 72 65 70 61   void exec_prepa
10710 72 65 64 5f 73 74 6d 74 28 0a 20 20 53 68 65 6c  red_stmt(.  Shel
10720 6c 53 74 61 74 65 20 2a 70 41 72 67 2c 20 20 20  lState *pArg,   
10730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10750 50 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c 6c  Pointer to Shell
10760 53 74 61 74 65 20 2a 2f 0a 20 20 73 71 6c 69 74  State */.  sqlit
10770 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
107a0 74 61 74 6d 65 6e 74 20 74 6f 20 72 75 6e 20 2a  tatment to run *
107b0 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62  /.  int (*xCallb
107c0 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  ack)(void*,int,c
107d0 68 61 72 2a 2a 2c 63 68 61 72 2a 2a 2c 69 6e 74  har**,char**,int
107e0 2a 29 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  *)   /* Callback
107f0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a   function */.){.
10800 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 2f 2a 20    int rc;..  /* 
10810 70 65 72 66 6f 72 6d 20 74 68 65 20 66 69 72 73  perform the firs
10820 74 20 73 74 65 70 2e 20 20 74 68 69 73 20 77 69  t step.  this wi
10830 6c 6c 20 74 65 6c 6c 20 75 73 20 69 66 20 77 65  ll tell us if we
10840 0a 20 20 2a 2a 20 68 61 76 65 20 61 20 72 65 73  .  ** have a res
10850 75 6c 74 20 73 65 74 20 6f 72 20 6e 6f 74 20 61  ult set or not a
10860 6e 64 20 68 6f 77 20 77 69 64 65 20 69 74 20 69  nd how wide it i
10870 73 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73  s..  */.  rc = s
10880 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
10890 74 29 3b 0a 20 20 2f 2a 20 69 66 20 77 65 20 68  t);.  /* if we h
108a0 61 76 65 20 61 20 72 65 73 75 6c 74 20 73 65 74  ave a result set
108b0 2e 2e 2e 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c  ... */.  if( SQL
108c0 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29 7b  ITE_ROW == rc ){
108d0 0a 20 20 20 20 2f 2a 20 69 66 20 77 65 20 68 61  .    /* if we ha
108e0 76 65 20 61 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e  ve a callback...
108f0 20 2a 2f 0a 20 20 20 20 69 66 28 20 78 43 61 6c   */.    if( xCal
10900 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 2f  lback ){.      /
10910 2a 20 61 6c 6c 6f 63 61 74 65 20 73 70 61 63 65  * allocate space
10920 20 66 6f 72 20 63 6f 6c 20 6e 61 6d 65 20 70 74   for col name pt
10930 72 2c 20 76 61 6c 75 65 20 70 74 72 2c 20 61 6e  r, value ptr, an
10940 64 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 20 20  d type */.      
10950 69 6e 74 20 6e 43 6f 6c 20 3d 20 73 71 6c 69 74  int nCol = sqlit
10960 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
10970 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 76 6f  pStmt);.      vo
10980 69 64 20 2a 70 44 61 74 61 20 3d 20 73 71 6c 69  id *pData = sqli
10990 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 33 2a 6e  te3_malloc64(3*n
109a0 43 6f 6c 2a 73 69 7a 65 6f 66 28 63 6f 6e 73 74  Col*sizeof(const
109b0 20 63 68 61 72 2a 29 20 2b 20 31 29 3b 0a 20 20   char*) + 1);.  
109c0 20 20 20 20 69 66 28 20 21 70 44 61 74 61 20 29      if( !pData )
109d0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
109e0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
109f0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10a00 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 73 20    char **azCols 
10a10 3d 20 28 63 68 61 72 20 2a 2a 29 70 44 61 74 61  = (char **)pData
10a20 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 73 20  ;      /* Names 
10a30 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  of result column
10a40 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 68 61  s */.        cha
10a50 72 20 2a 2a 61 7a 56 61 6c 73 20 3d 20 26 61 7a  r **azVals = &az
10a60 43 6f 6c 73 5b 6e 43 6f 6c 5d 3b 20 20 20 20 20  Cols[nCol];     
10a70 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
10a80 20 20 20 20 20 20 20 20 69 6e 74 20 2a 61 69 54          int *aiT
10a90 79 70 65 73 20 3d 20 28 69 6e 74 20 2a 29 26 61  ypes = (int *)&a
10aa0 7a 56 61 6c 73 5b 6e 43 6f 6c 5d 3b 20 2f 2a 20  zVals[nCol]; /* 
10ab0 52 65 73 75 6c 74 20 74 79 70 65 73 20 2a 2f 0a  Result types */.
10ac0 20 20 20 20 20 20 20 20 69 6e 74 20 69 2c 20 78          int i, x
10ad0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
10ae0 28 73 69 7a 65 6f 66 28 69 6e 74 29 20 3c 3d 20  (sizeof(int) <= 
10af0 73 69 7a 65 6f 66 28 63 68 61 72 20 2a 29 29 3b  sizeof(char *));
10b00 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 61 76 65  .        /* save
10b10 20 6f 66 66 20 70 74 72 73 20 74 6f 20 63 6f 6c   off ptrs to col
10b20 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 20  umn names */.   
10b30 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
10b40 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nCol; i++){.    
10b50 20 20 20 20 20 20 61 7a 43 6f 6c 73 5b 69 5d 20        azCols[i] 
10b60 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
10b70 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 70 53  3_column_name(pS
10b80 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20  tmt, i);.       
10b90 20 7d 0a 20 20 20 20 20 20 20 20 64 6f 7b 0a 20   }.        do{. 
10ba0 20 20 20 20 20 20 20 20 20 2f 2a 20 65 78 74 72           /* extr
10bb0 61 63 74 20 74 68 65 20 64 61 74 61 20 61 6e 64  act the data and
10bc0 20 64 61 74 61 20 74 79 70 65 73 20 2a 2f 0a 20   data types */. 
10bd0 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30           for(i=0
10be0 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a  ; i<nCol; i++){.
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 61 69 54 79              aiTy
10c00 70 65 73 5b 69 5d 20 3d 20 78 20 3d 20 73 71 6c  pes[i] = x = sql
10c10 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
10c20 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  (pStmt, i);.    
10c30 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 53          if( x==S
10c40 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20 70 41  QLITE_BLOB && pA
10c50 72 67 20 26 26 20 70 41 72 67 2d 3e 63 4d 6f 64  rg && pArg->cMod
10c60 65 3d 3d 4d 4f 44 45 5f 49 6e 73 65 72 74 20 29  e==MODE_Insert )
10c70 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
10c80 61 7a 56 61 6c 73 5b 69 5d 20 3d 20 22 22 3b 0a  azVals[i] = "";.
10c90 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73              }els
10ca0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e{.             
10cb0 20 61 7a 56 61 6c 73 5b 69 5d 20 3d 20 28 63 68   azVals[i] = (ch
10cc0 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
10cd0 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69  mn_text(pStmt, i
10ce0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
10cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
10d00 20 21 61 7a 56 61 6c 73 5b 69 5d 20 26 26 20 28   !azVals[i] && (
10d10 61 69 54 79 70 65 73 5b 69 5d 21 3d 53 51 4c 49  aiTypes[i]!=SQLI
10d20 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20  TE_NULL) ){.    
10d30 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
10d40 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
10d50 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
10d60 3b 20 2f 2a 20 66 72 6f 6d 20 66 6f 72 20 2a 2f  ; /* from for */
10d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
10d80 20 20 20 20 20 20 20 20 20 7d 20 2f 2a 20 65 6e           } /* en
10d90 64 20 66 6f 72 20 2a 2f 0a 0a 20 20 20 20 20 20  d for */..      
10da0 20 20 20 20 2f 2a 20 69 66 20 64 61 74 61 20 61      /* if data a
10db0 6e 64 20 74 79 70 65 73 20 65 78 74 72 61 63 74  nd types extract
10dc0 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2e  ed successfully.
10dd0 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  .. */.          
10de0 69 66 28 20 53 51 4c 49 54 45 5f 52 4f 57 20 3d  if( SQLITE_ROW =
10df0 3d 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20  = rc ){.        
10e00 20 20 20 20 2f 2a 20 63 61 6c 6c 20 74 68 65 20      /* call the 
10e10 73 75 70 70 6c 69 65 64 20 63 61 6c 6c 62 61 63  supplied callbac
10e20 6b 20 77 69 74 68 20 74 68 65 20 72 65 73 75 6c  k with the resul
10e30 74 20 72 6f 77 20 64 61 74 61 20 2a 2f 0a 20 20  t row data */.  
10e40 20 20 20 20 20 20 20 20 20 20 69 66 28 20 78 43            if( xC
10e50 61 6c 6c 62 61 63 6b 28 70 41 72 67 2c 20 6e 43  allback(pArg, nC
10e60 6f 6c 2c 20 61 7a 56 61 6c 73 2c 20 61 7a 43 6f  ol, azVals, azCo
10e70 6c 73 2c 20 61 69 54 79 70 65 73 29 20 29 7b 0a  ls, aiTypes) ){.
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
10e90 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b   = SQLITE_ABORT;
10ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c  .            }el
10eb0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
10ec0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73    rc = sqlite3_s
10ed0 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  tep(pStmt);.    
10ee0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
10ef0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 20      }.        } 
10f00 77 68 69 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f  while( SQLITE_RO
10f10 57 20 3d 3d 20 72 63 20 29 3b 0a 20 20 20 20 20  W == rc );.     
10f20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
10f30 70 44 61 74 61 29 3b 0a 20 20 20 20 20 20 7d 0a  pData);.      }.
10f40 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10f50 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 72 63 20   do{.        rc 
10f60 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
10f70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 7d 20 77  Stmt);.      } w
10f80 68 69 6c 65 28 20 72 63 20 3d 3d 20 53 51 4c 49  hile( rc == SQLI
10f90 54 45 5f 52 4f 57 20 29 3b 0a 20 20 20 20 7d 0a  TE_ROW );.    }.
10fa0 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69    }.}../*.** Thi
10fb0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61  s function is ca
10fc0 6c 6c 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20  lled to process 
10fd0 53 51 4c 20 69 66 20 74 68 65 20 70 72 65 76 69  SQL if the previ
10fe0 6f 75 73 20 73 68 65 6c 6c 20 63 6f 6d 6d 61 6e  ous shell comman
10ff0 64 0a 2a 2a 20 77 61 73 20 22 2e 65 78 70 65 72  d.** was ".exper
11000 74 22 2e 20 49 74 20 70 61 73 73 65 73 20 74 68  t". It passes th
11010 65 20 53 51 4c 20 69 6e 20 74 68 65 20 73 65 63  e SQL in the sec
11020 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 64 69 72  ond argument dir
11030 65 63 74 6c 79 20 74 6f 0a 2a 2a 20 74 68 65 20  ectly to.** the 
11040 73 71 6c 69 74 65 33 65 78 70 65 72 74 20 6f 62  sqlite3expert ob
11050 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 73  ject..**.** If s
11060 75 63 63 65 73 73 66 75 6c 2c 20 53 51 4c 49 54  uccessful, SQLIT
11070 45 5f 4f 4b 20 69 73 20 72 65 74 75 72 6e 65 64  E_OK is returned
11080 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 61 6e 20  . Otherwise, an 
11090 53 51 4c 69 74 65 20 65 72 72 6f 72 0a 2a 2a 20  SQLite error.** 
110a0 63 6f 64 65 2e 20 49 6e 20 74 68 69 73 20 63 61  code. In this ca
110b0 73 65 2c 20 28 2a 70 7a 45 72 72 29 20 6d 61 79  se, (*pzErr) may
110c0 20 62 65 20 73 65 74 20 74 6f 20 70 6f 69 6e 74   be set to point
110d0 20 74 6f 20 61 20 62 75 66 66 65 72 20 63 6f 6e   to a buffer con
110e0 74 61 69 6e 69 6e 67 0a 2a 2a 20 61 6e 20 45 6e  taining.** an En
110f0 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65  glish language e
11100 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 49 74  rror message. It
11110 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69   is the responsi
11120 62 69 6c 69 74 79 20 6f 66 20 74 68 65 0a 2a 2a  bility of the.**
11130 20 63 61 6c 6c 65 72 20 74 6f 20 65 76 65 6e 74   caller to event
11140 75 61 6c 6c 79 20 66 72 65 65 20 74 68 69 73 20  ually free this 
11150 62 75 66 66 65 72 20 75 73 69 6e 67 20 73 71 6c  buffer using sql
11160 69 74 65 33 5f 66 72 65 65 28 29 2e 0a 2a 2f 0a  ite3_free()..*/.
11170 73 74 61 74 69 63 20 69 6e 74 20 65 78 70 65 72  static int exper
11180 74 48 61 6e 64 6c 65 53 51 4c 28 0a 20 20 53 68  tHandleSQL(.  Sh
11190 65 6c 6c 53 74 61 74 65 20 2a 70 53 74 61 74 65  ellState *pState
111a0 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
111b0 2a 7a 53 71 6c 2c 20 0a 20 20 63 68 61 72 20 2a  *zSql, .  char *
111c0 2a 70 7a 45 72 72 0a 29 7b 0a 20 20 61 73 73 65  *pzErr.){.  asse
111d0 72 74 28 20 70 53 74 61 74 65 2d 3e 65 78 70 65  rt( pState->expe
111e0 72 74 2e 70 45 78 70 65 72 74 20 29 3b 0a 20 20  rt.pExpert );.  
111f0 61 73 73 65 72 74 28 20 70 7a 45 72 72 3d 3d 30  assert( pzErr==0
11200 20 7c 7c 20 2a 70 7a 45 72 72 3d 3d 30 20 29 3b   || *pzErr==0 );
11210 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
11220 33 5f 65 78 70 65 72 74 5f 73 71 6c 28 70 53 74  3_expert_sql(pSt
11230 61 74 65 2d 3e 65 78 70 65 72 74 2e 70 45 78 70  ate->expert.pExp
11240 65 72 74 2c 20 7a 53 71 6c 2c 20 70 7a 45 72 72  ert, zSql, pzErr
11250 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  );.}../*.** This
11260 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c   function is cal
11270 6c 65 64 20 65 69 74 68 65 72 20 74 6f 20 73 69  led either to si
11280 6c 65 6e 74 6c 79 20 63 6c 65 61 6e 20 75 70 20  lently clean up 
11290 74 68 65 20 6f 62 6a 65 63 74 0a 2a 2a 20 63 72  the object.** cr
112a0 65 61 74 65 64 20 62 79 20 74 68 65 20 22 2e 65  eated by the ".e
112b0 78 70 65 72 74 22 20 63 6f 6d 6d 61 6e 64 20 28  xpert" command (
112c0 69 66 20 62 43 61 6e 63 65 6c 3d 3d 31 29 2c 20  if bCancel==1), 
112d0 6f 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  or to generate a
112e0 20 0a 2a 2a 20 72 65 70 6f 72 74 20 66 72 6f 6d   .** report from
112f0 20 69 74 20 61 6e 64 20 74 68 65 6e 20 63 6c 65   it and then cle
11300 61 6e 20 69 74 20 75 70 20 28 69 66 20 62 43 61  an it up (if bCa
11310 6e 63 65 6c 3d 3d 30 29 2e 0a 2a 2a 0a 2a 2a 20  ncel==0)..**.** 
11320 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 53  If successful, S
11330 51 4c 49 54 45 5f 4f 4b 20 69 73 20 72 65 74 75  QLITE_OK is retu
11340 72 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  rned. Otherwise,
11350 20 61 6e 20 53 51 4c 69 74 65 20 65 72 72 6f 72   an SQLite error
11360 0a 2a 2a 20 63 6f 64 65 2e 20 49 6e 20 74 68 69  .** code. In thi
11370 73 20 63 61 73 65 2c 20 28 2a 70 7a 45 72 72 29  s case, (*pzErr)
11380 20 6d 61 79 20 62 65 20 73 65 74 20 74 6f 20 70   may be set to p
11390 6f 69 6e 74 20 74 6f 20 61 20 62 75 66 66 65 72  oint to a buffer
113a0 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 61   containing.** a
113b0 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  n English langua
113c0 67 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ge error message
113d0 2e 20 49 74 20 69 73 20 74 68 65 20 72 65 73 70  . It is the resp
113e0 6f 6e 73 69 62 69 6c 69 74 79 20 6f 66 20 74 68  onsibility of th
113f0 65 0a 2a 2a 20 63 61 6c 6c 65 72 20 74 6f 20 65  e.** caller to e
11400 76 65 6e 74 75 61 6c 6c 79 20 66 72 65 65 20 74  ventually free t
11410 68 69 73 20 62 75 66 66 65 72 20 75 73 69 6e 67  his buffer using
11420 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 29 2e   sqlite3_free().
11430 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65  .*/.static int e
11440 78 70 65 72 74 46 69 6e 69 73 68 28 0a 20 20 53  xpertFinish(.  S
11450 68 65 6c 6c 53 74 61 74 65 20 2a 70 53 74 61 74  hellState *pStat
11460 65 2c 0a 20 20 69 6e 74 20 62 43 61 6e 63 65 6c  e,.  int bCancel
11470 2c 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  ,.  char **pzErr
11480 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53  .){.  int rc = S
11490 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 73 71 6c 69  QLITE_OK;.  sqli
114a0 74 65 33 65 78 70 65 72 74 20 2a 70 20 3d 20 70  te3expert *p = p
114b0 53 74 61 74 65 2d 3e 65 78 70 65 72 74 2e 70 45  State->expert.pE
114c0 78 70 65 72 74 3b 0a 20 20 61 73 73 65 72 74 28  xpert;.  assert(
114d0 20 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20   p );.  assert( 
114e0 62 43 61 6e 63 65 6c 20 7c 7c 20 70 7a 45 72 72  bCancel || pzErr
114f0 3d 3d 30 20 7c 7c 20 2a 70 7a 45 72 72 3d 3d 30  ==0 || *pzErr==0
11500 20 29 3b 0a 20 20 69 66 28 20 62 43 61 6e 63 65   );.  if( bCance
11510 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 46 49 4c 45  l==0 ){.    FILE
11520 20 2a 6f 75 74 20 3d 20 70 53 74 61 74 65 2d 3e   *out = pState->
11530 6f 75 74 3b 0a 20 20 20 20 69 6e 74 20 62 56 65  out;.    int bVe
11540 72 62 6f 73 65 20 3d 20 70 53 74 61 74 65 2d 3e  rbose = pState->
11550 65 78 70 65 72 74 2e 62 56 65 72 62 6f 73 65 3b  expert.bVerbose;
11560 0a 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ..    rc = sqlit
11570 65 33 5f 65 78 70 65 72 74 5f 61 6e 61 6c 79 7a  e3_expert_analyz
11580 65 28 70 2c 20 70 7a 45 72 72 29 3b 0a 20 20 20  e(p, pzErr);.   
11590 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
115a0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  OK ){.      int 
115b0 6e 51 75 65 72 79 20 3d 20 73 71 6c 69 74 65 33  nQuery = sqlite3
115c0 5f 65 78 70 65 72 74 5f 63 6f 75 6e 74 28 70 29  _expert_count(p)
115d0 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 0a  ;.      int i;..
115e0 20 20 20 20 20 20 69 66 28 20 62 56 65 72 62 6f        if( bVerbo
115f0 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f  se ){.        co
11600 6e 73 74 20 63 68 61 72 20 2a 7a 43 61 6e 64 20  nst char *zCand 
11610 3d 20 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74  = sqlite3_expert
11620 5f 72 65 70 6f 72 74 28 70 2c 30 2c 45 58 50 45  _report(p,0,EXPE
11630 52 54 5f 52 45 50 4f 52 54 5f 43 41 4e 44 49 44  RT_REPORT_CANDID
11640 41 54 45 53 29 3b 0a 20 20 20 20 20 20 20 20 72  ATES);.        r
11650 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
11660 2d 2d 20 43 61 6e 64 69 64 61 74 65 73 20 2d 2d  -- Candidates --
11670 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11680 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b  -----------\n");
11690 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
116a0 6e 74 66 28 6f 75 74 2c 20 22 25 73 5c 6e 22 2c  ntf(out, "%s\n",
116b0 20 7a 43 61 6e 64 29 3b 0a 20 20 20 20 20 20 7d   zCand);.      }
116c0 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
116d0 69 3c 6e 51 75 65 72 79 3b 20 69 2b 2b 29 7b 0a  i<nQuery; i++){.
116e0 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
116f0 61 72 20 2a 7a 53 71 6c 20 3d 20 73 71 6c 69 74  ar *zSql = sqlit
11700 65 33 5f 65 78 70 65 72 74 5f 72 65 70 6f 72 74  e3_expert_report
11710 28 70 2c 20 69 2c 20 45 58 50 45 52 54 5f 52 45  (p, i, EXPERT_RE
11720 50 4f 52 54 5f 53 51 4c 29 3b 0a 20 20 20 20 20  PORT_SQL);.     
11730 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
11740 49 64 78 20 3d 20 73 71 6c 69 74 65 33 5f 65 78  Idx = sqlite3_ex
11750 70 65 72 74 5f 72 65 70 6f 72 74 28 70 2c 20 69  pert_report(p, i
11760 2c 20 45 58 50 45 52 54 5f 52 45 50 4f 52 54 5f  , EXPERT_REPORT_
11770 49 4e 44 45 58 45 53 29 3b 0a 20 20 20 20 20 20  INDEXES);.      
11780 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
11790 51 50 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 70  QP = sqlite3_exp
117a0 65 72 74 5f 72 65 70 6f 72 74 28 70 2c 20 69 2c  ert_report(p, i,
117b0 20 45 58 50 45 52 54 5f 52 45 50 4f 52 54 5f 50   EXPERT_REPORT_P
117c0 4c 41 4e 29 3b 0a 20 20 20 20 20 20 20 20 69 66  LAN);.        if
117d0 28 20 7a 49 64 78 3d 3d 30 20 29 20 7a 49 64 78  ( zIdx==0 ) zIdx
117e0 20 3d 20 22 28 6e 6f 20 6e 65 77 20 69 6e 64 65   = "(no new inde
117f0 78 65 73 29 5c 6e 22 3b 0a 20 20 20 20 20 20 20  xes)\n";.       
11800 20 69 66 28 20 62 56 65 72 62 6f 73 65 20 29 7b   if( bVerbose ){
11810 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
11820 72 69 6e 74 66 28 6f 75 74 2c 20 22 2d 2d 20 51  rintf(out, "-- Q
11830 75 65 72 79 20 25 64 20 2d 2d 2d 2d 2d 2d 2d 2d  uery %d --------
11840 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11850 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 2c 69 2b 31 29  --------\n",i+1)
11860 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f  ;.          raw_
11870 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 5c  printf(out, "%s\
11880 6e 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  n\n", zSql);.   
11890 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
118a0 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
118b0 25 73 5c 6e 22 2c 20 7a 49 64 78 29 3b 0a 20 20  %s\n", zIdx);.  
118c0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
118d0 28 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 45  (out, "%s\n", zE
118e0 51 50 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  QP);.      }.   
118f0 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33   }.  }.  sqlite3
11900 5f 65 78 70 65 72 74 5f 64 65 73 74 72 6f 79 28  _expert_destroy(
11910 70 29 3b 0a 20 20 70 53 74 61 74 65 2d 3e 65 78  p);.  pState->ex
11920 70 65 72 74 2e 70 45 78 70 65 72 74 20 3d 20 30  pert.pExpert = 0
11930 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
11940 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65  .../*.** Execute
11950 20 61 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20   a statement or 
11960 73 65 74 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  set of statement
11970 73 2e 20 20 50 72 69 6e 74 0a 2a 2a 20 61 6e 79  s.  Print.** any
11980 20 72 65 73 75 6c 74 20 72 6f 77 73 2f 63 6f 6c   result rows/col
11990 75 6d 6e 73 20 64 65 70 65 6e 64 69 6e 67 20 6f  umns depending o
119a0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f  n the current mo
119b0 64 65 0a 2a 2a 20 73 65 74 20 76 69 61 20 74 68  de.** set via th
119c0 65 20 73 75 70 70 6c 69 65 64 20 63 61 6c 6c 62  e supplied callb
119d0 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ack..**.** This 
119e0 69 73 20 76 65 72 79 20 73 69 6d 69 6c 61 72 20  is very similar 
119f0 74 6f 20 53 51 4c 69 74 65 27 73 20 62 75 69 6c  to SQLite's buil
11a00 74 2d 69 6e 20 73 71 6c 69 74 65 33 5f 65 78 65  t-in sqlite3_exe
11a10 63 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  c().** function 
11a20 65 78 63 65 70 74 20 69 74 20 74 61 6b 65 73 20  except it takes 
11a30 61 20 73 6c 69 67 68 74 6c 79 20 64 69 66 66 65  a slightly diffe
11a40 72 65 6e 74 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a  rent callback.**
11a50 20 61 6e 64 20 63 61 6c 6c 62 61 63 6b 20 64 61   and callback da
11a60 74 61 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  ta argument..*/.
11a70 73 74 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c  static int shell
11a80 5f 65 78 65 63 28 0a 20 20 73 71 6c 69 74 65 33  _exec(.  sqlite3
11a90 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20   *db,           
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ab0 20 20 20 2f 2a 20 41 6e 20 6f 70 65 6e 20 64 61     /* An open da
11ac0 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
11ad0 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20  t char *zSql,   
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11af0 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 74 6f 20        /* SQL to 
11b00 62 65 20 65 76 61 6c 75 61 74 65 64 20 2a 2f 0a  be evaluated */.
11b10 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63    int (*xCallbac
11b20 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61  k)(void*,int,cha
11b30 72 2a 2a 2c 63 68 61 72 2a 2a 2c 69 6e 74 2a 29  r**,char**,int*)
11b40 2c 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  ,   /* Callback 
11b50 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 20 20 20 20 20 20 20 20 2f 2a 20 28 6e 6f 74 20          /* (not 
11b90 74 68 65 20 73 61 6d 65 20 61 73 20 73 71 6c 69  the same as sqli
11ba0 74 65 33 5f 65 78 65 63 29 20 2a 2f 0a 20 20 53  te3_exec) */.  S
11bb0 68 65 6c 6c 53 74 61 74 65 20 2a 70 41 72 67 2c  hellState *pArg,
11bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bd0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
11be0 74 65 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74  ter to ShellStat
11bf0 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  e */.  char **pz
11c00 45 72 72 4d 73 67 20 20 20 20 20 20 20 20 20 20  ErrMsg          
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c20 20 2f 2a 20 45 72 72 6f 72 20 6d 73 67 20 77 72   /* Error msg wr
11c30 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b  itten here */.){
11c40 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
11c50 2a 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20 20  *pStmt = NULL;  
11c60 20 20 20 2f 2a 20 53 74 61 74 65 6d 65 6e 74 20     /* Statement 
11c70 74 6f 20 65 78 65 63 75 74 65 2e 20 2a 2f 0a 20  to execute. */. 
11c80 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
11c90 5f 4f 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20  _OK;            
11ca0 20 2f 2a 20 52 65 74 75 72 6e 20 43 6f 64 65 20   /* Return Code 
11cb0 2a 2f 0a 20 20 69 6e 74 20 72 63 32 3b 0a 20 20  */.  int rc2;.  
11cc0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66  const char *zLef
11cd0 74 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20  tover;          
11ce0 2f 2a 20 54 61 69 6c 20 6f 66 20 75 6e 70 72 6f  /* Tail of unpro
11cf0 63 65 73 73 65 64 20 53 51 4c 20 2a 2f 0a 0a 20  cessed SQL */.. 
11d00 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b   if( pzErrMsg ){
11d10 0a 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d  .    *pzErrMsg =
11d20 20 4e 55 4c 4c 3b 0a 20 20 7d 0a 0a 20 20 69 66   NULL;.  }..  if
11d30 28 20 70 41 72 67 2d 3e 65 78 70 65 72 74 2e 70  ( pArg->expert.p
11d40 45 78 70 65 72 74 20 29 7b 0a 20 20 20 20 72 63  Expert ){.    rc
11d50 20 3d 20 65 78 70 65 72 74 48 61 6e 64 6c 65 53   = expertHandleS
11d60 51 4c 28 70 41 72 67 2c 20 7a 53 71 6c 2c 20 70  QL(pArg, zSql, p
11d70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 72 65  zErrMsg);.    re
11d80 74 75 72 6e 20 65 78 70 65 72 74 46 69 6e 69 73  turn expertFinis
11d90 68 28 70 41 72 67 2c 20 28 72 63 21 3d 53 51 4c  h(pArg, (rc!=SQL
11da0 49 54 45 5f 4f 4b 29 2c 20 70 7a 45 72 72 4d 73  ITE_OK), pzErrMs
11db0 67 29 3b 0a 20 20 7d 0a 0a 20 20 77 68 69 6c 65  g);.  }..  while
11dc0 28 20 7a 53 71 6c 5b 30 5d 20 26 26 20 28 53 51  ( zSql[0] && (SQ
11dd0 4c 49 54 45 5f 4f 4b 20 3d 3d 20 72 63 29 20 29  LITE_OK == rc) )
11de0 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
11df0 73 74 20 63 68 61 72 20 2a 7a 53 74 6d 74 53 71  st char *zStmtSq
11e00 6c 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  l;.    rc = sqli
11e10 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64  te3_prepare_v2(d
11e20 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53  b, zSql, -1, &pS
11e30 74 6d 74 2c 20 26 7a 4c 65 66 74 6f 76 65 72 29  tmt, &zLeftover)
11e40 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  ;.    if( SQLITE
11e50 5f 4f 4b 20 21 3d 20 72 63 20 29 7b 0a 20 20 20  _OK != rc ){.   
11e60 20 20 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20     if( pzErrMsg 
11e70 29 7b 0a 20 20 20 20 20 20 20 20 2a 70 7a 45 72  ){.        *pzEr
11e80 72 4d 73 67 20 3d 20 73 61 76 65 5f 65 72 72 5f  rMsg = save_err_
11e90 6d 73 67 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  msg(db);.      }
11ea0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
11eb0 20 20 69 66 28 20 21 70 53 74 6d 74 20 29 7b 0a    if( !pStmt ){.
11ec0 20 20 20 20 20 20 20 20 2f 2a 20 74 68 69 73 20          /* this 
11ed0 68 61 70 70 65 6e 73 20 66 6f 72 20 61 20 63 6f  happens for a co
11ee0 6d 6d 65 6e 74 20 6f 72 20 77 68 69 74 65 2d 73  mment or white-s
11ef0 70 61 63 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  pace */.        
11f00 7a 53 71 6c 20 3d 20 7a 4c 65 66 74 6f 76 65 72  zSql = zLeftover
11f10 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  ;.        while(
11f20 20 49 73 53 70 61 63 65 28 7a 53 71 6c 5b 30 5d   IsSpace(zSql[0]
11f30 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20 20  ) ) zSql++;.    
11f40 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
11f50 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 53 74 6d      }.      zStm
11f60 74 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 73  tSql = sqlite3_s
11f70 71 6c 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  ql(pStmt);.     
11f80 20 69 66 28 20 7a 53 74 6d 74 53 71 6c 3d 3d 30   if( zStmtSql==0
11f90 20 29 20 7a 53 74 6d 74 53 71 6c 20 3d 20 22 22   ) zStmtSql = ""
11fa0 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 49  ;.      while( I
11fb0 73 53 70 61 63 65 28 7a 53 74 6d 74 53 71 6c 5b  sSpace(zStmtSql[
11fc0 30 5d 29 20 29 20 7a 53 74 6d 74 53 71 6c 2b 2b  0]) ) zStmtSql++
11fd0 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 73 61 76 65  ;..      /* save
11fe0 20 6f 66 66 20 74 68 65 20 70 72 65 70 61 72 65   off the prepare
11ff0 64 20 73 74 61 74 6d 65 6e 74 20 68 61 6e 64 6c  d statment handl
12000 65 20 61 6e 64 20 72 65 73 65 74 20 72 6f 77 20  e and reset row 
12010 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20 69  count */.      i
12020 66 28 20 70 41 72 67 20 29 7b 0a 20 20 20 20 20  f( pArg ){.     
12030 20 20 20 70 41 72 67 2d 3e 70 53 74 6d 74 20 3d     pArg->pStmt =
12040 20 70 53 74 6d 74 3b 0a 20 20 20 20 20 20 20 20   pStmt;.        
12050 70 41 72 67 2d 3e 63 6e 74 20 3d 20 30 3b 0a 20  pArg->cnt = 0;. 
12060 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
12070 20 65 63 68 6f 20 74 68 65 20 73 71 6c 20 73 74   echo the sql st
12080 61 74 65 6d 65 6e 74 20 69 66 20 65 63 68 6f 20  atement if echo 
12090 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  on */.      if( 
120a0 70 41 72 67 20 26 26 20 53 68 65 6c 6c 48 61 73  pArg && ShellHas
120b0 46 6c 61 67 28 70 41 72 67 2c 20 53 48 46 4c 47  Flag(pArg, SHFLG
120c0 5f 45 63 68 6f 29 20 29 7b 0a 20 20 20 20 20 20  _Echo) ){.      
120d0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41    utf8_printf(pA
120e0 72 67 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22 2c  rg->out, "%s\n",
120f0 20 7a 53 74 6d 74 53 71 6c 20 3f 20 7a 53 74 6d   zStmtSql ? zStm
12100 74 53 71 6c 20 3a 20 7a 53 71 6c 29 3b 0a 20 20  tSql : zSql);.  
12110 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
12120 53 68 6f 77 20 74 68 65 20 45 58 50 4c 41 49 4e  Show the EXPLAIN
12130 20 51 55 45 52 59 20 50 4c 41 4e 20 69 66 20 2e   QUERY PLAN if .
12140 65 71 70 20 69 73 20 6f 6e 20 2a 2f 0a 20 20 20  eqp is on */.   
12150 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70     if( pArg && p
12160 41 72 67 2d 3e 61 75 74 6f 45 51 50 20 26 26 20  Arg->autoEQP && 
12170 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
12180 22 45 58 50 4c 41 49 4e 25 22 2c 7a 53 74 6d 74  "EXPLAIN%",zStmt
12190 53 71 6c 2c 30 29 21 3d 30 20 29 7b 0a 20 20 20  Sql,0)!=0 ){.   
121a0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d       sqlite3_stm
121b0 74 20 2a 70 45 78 70 6c 61 69 6e 3b 0a 20 20 20  t *pExplain;.   
121c0 20 20 20 20 20 63 68 61 72 20 2a 7a 45 51 50 3b       char *zEQP;
121d0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 74 72 69  .        int tri
121e0 67 67 65 72 45 51 50 20 3d 20 30 3b 0a 20 20 20  ggerEQP = 0;.   
121f0 20 20 20 20 20 64 69 73 61 62 6c 65 5f 64 65 62       disable_deb
12200 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65 73 28 29  ug_trace_modes()
12210 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
12220 33 5f 64 62 5f 63 6f 6e 66 69 67 28 64 62 2c 20  3_db_config(db, 
12230 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
12240 54 52 49 47 47 45 52 5f 45 51 50 2c 20 2d 31 2c  TRIGGER_EQP, -1,
12250 20 26 74 72 69 67 67 65 72 45 51 50 29 3b 0a 20   &triggerEQP);. 
12260 20 20 20 20 20 20 20 69 66 28 20 70 41 72 67 2d         if( pArg-
12270 3e 61 75 74 6f 45 51 50 3e 3d 41 55 54 4f 45 51  >autoEQP>=AUTOEQ
12280 50 5f 74 72 69 67 67 65 72 20 29 7b 0a 20 20 20  P_trigger ){.   
12290 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64         sqlite3_d
122a0 62 5f 63 6f 6e 66 69 67 28 64 62 2c 20 53 51 4c  b_config(db, SQL
122b0 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 54 52 49  ITE_DBCONFIG_TRI
122c0 47 47 45 52 5f 45 51 50 2c 20 31 2c 20 30 29 3b  GGER_EQP, 1, 0);
122d0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
122e0 20 20 20 7a 45 51 50 20 3d 20 73 71 6c 69 74 65     zEQP = sqlite
122f0 33 5f 6d 70 72 69 6e 74 66 28 22 45 58 50 4c 41  3_mprintf("EXPLA
12300 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 25 73  IN QUERY PLAN %s
12310 22 2c 20 7a 53 74 6d 74 53 71 6c 29 3b 0a 20 20  ", zStmtSql);.  
12320 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
12330 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62  e3_prepare_v2(db
12340 2c 20 7a 45 51 50 2c 20 2d 31 2c 20 26 70 45 78  , zEQP, -1, &pEx
12350 70 6c 61 69 6e 2c 20 30 29 3b 0a 20 20 20 20 20  plain, 0);.     
12360 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
12370 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
12380 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65 33    while( sqlite3
12390 5f 73 74 65 70 28 70 45 78 70 6c 61 69 6e 29 3d  _step(pExplain)=
123a0 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20  =SQLITE_ROW ){. 
123b0 20 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70             raw_p
123c0 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
123d0 22 2d 2d 45 51 50 2d 2d 20 25 64 2c 22 2c 73 71  "--EQP-- %d,",sq
123e0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
123f0 28 70 45 78 70 6c 61 69 6e 2c 20 30 29 29 3b 0a  (pExplain, 0));.
12400 20 20 20 20 20 20 20 20 20 20 20 20 72 61 77 5f              raw_
12410 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
12420 2c 22 25 64 2c 22 2c 20 73 71 6c 69 74 65 33 5f  ,"%d,", sqlite3_
12430 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45 78 70 6c  column_int(pExpl
12440 61 69 6e 2c 20 31 29 29 3b 0a 20 20 20 20 20 20  ain, 1));.      
12450 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
12460 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25 64 2c 22  (pArg->out,"%d,"
12470 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  , sqlite3_column
12480 5f 69 6e 74 28 70 45 78 70 6c 61 69 6e 2c 20 32  _int(pExplain, 2
12490 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
124a0 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41 72 67  utf8_printf(pArg
124b0 2d 3e 6f 75 74 2c 22 25 73 5c 6e 22 2c 20 73 71  ->out,"%s\n", sq
124c0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
124d0 74 28 70 45 78 70 6c 61 69 6e 2c 20 33 29 29 3b  t(pExplain, 3));
124e0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
124f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
12500 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
12510 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20  pExplain);.     
12520 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
12530 7a 45 51 50 29 3b 0a 20 20 20 20 20 20 20 20 69  zEQP);.        i
12540 66 28 20 70 41 72 67 2d 3e 61 75 74 6f 45 51 50  f( pArg->autoEQP
12550 3e 3d 41 55 54 4f 45 51 50 5f 66 75 6c 6c 20 29  >=AUTOEQP_full )
12560 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  {.          /* A
12570 6c 73 6f 20 64 6f 20 61 6e 20 45 58 50 4c 41 49  lso do an EXPLAI
12580 4e 20 66 6f 72 20 22 2e 65 71 70 20 66 75 6c 6c  N for ".eqp full
12590 22 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20  " mode */.      
125a0 20 20 20 20 7a 45 51 50 20 3d 20 73 71 6c 69 74      zEQP = sqlit
125b0 65 33 5f 6d 70 72 69 6e 74 66 28 22 45 58 50 4c  e3_mprintf("EXPL
125c0 41 49 4e 20 25 73 22 2c 20 7a 53 74 6d 74 53 71  AIN %s", zStmtSq
125d0 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63  l);.          rc
125e0 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
125f0 72 65 5f 76 32 28 64 62 2c 20 7a 45 51 50 2c 20  re_v2(db, zEQP, 
12600 2d 31 2c 20 26 70 45 78 70 6c 61 69 6e 2c 20 30  -1, &pExplain, 0
12610 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
12620 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
12630 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 41  {.            pA
12640 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f 44 45  rg->cMode = MODE
12650 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20  _Explain;.      
12660 20 20 20 20 20 20 65 78 70 6c 61 69 6e 5f 64 61        explain_da
12670 74 61 5f 70 72 65 70 61 72 65 28 70 41 72 67 2c  ta_prepare(pArg,
12680 20 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20   pExplain);.    
12690 20 20 20 20 20 20 20 20 65 78 65 63 5f 70 72 65          exec_pre
126a0 70 61 72 65 64 5f 73 74 6d 74 28 70 41 72 67 2c  pared_stmt(pArg,
126b0 20 70 45 78 70 6c 61 69 6e 2c 20 78 43 61 6c 6c   pExplain, xCall
126c0 62 61 63 6b 29 3b 0a 20 20 20 20 20 20 20 20 20  back);.         
126d0 20 20 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f     explain_data_
126e0 64 65 6c 65 74 65 28 70 41 72 67 29 3b 0a 20 20  delete(pArg);.  
126f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
12700 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
12710 6c 69 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a  lize(pExplain);.
12720 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
12730 33 5f 66 72 65 65 28 7a 45 51 50 29 3b 0a 20 20  3_free(zEQP);.  
12740 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
12750 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69  sqlite3_db_confi
12760 67 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 43  g(db, SQLITE_DBC
12770 4f 4e 46 49 47 5f 54 52 49 47 47 45 52 5f 45 51  ONFIG_TRIGGER_EQ
12780 50 2c 20 74 72 69 67 67 65 72 45 51 50 2c 20 30  P, triggerEQP, 0
12790 29 3b 0a 20 20 20 20 20 20 20 20 72 65 73 74 6f  );.        resto
127a0 72 65 5f 64 65 62 75 67 5f 74 72 61 63 65 5f 6d  re_debug_trace_m
127b0 6f 64 65 73 28 29 3b 0a 20 20 20 20 20 20 7d 0a  odes();.      }.
127c0 0a 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20  .      if( pArg 
127d0 29 7b 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d  ){.        pArg-
127e0 3e 63 4d 6f 64 65 20 3d 20 70 41 72 67 2d 3e 6d  >cMode = pArg->m
127f0 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ode;.        if(
12800 20 70 41 72 67 2d 3e 61 75 74 6f 45 78 70 6c 61   pArg->autoExpla
12810 69 6e 0a 20 20 20 20 20 20 20 20 20 26 26 20 73  in.         && s
12820 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
12830 75 6e 74 28 70 53 74 6d 74 29 3d 3d 38 0a 20 20  unt(pStmt)==8.  
12840 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65         && sqlite
12850 33 5f 73 74 72 6c 69 6b 65 28 22 45 58 50 4c 41  3_strlike("EXPLA
12860 49 4e 25 22 2c 20 7a 53 74 6d 74 53 71 6c 2c 30  IN%", zStmtSql,0
12870 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 29 7b 0a  )==0.        ){.
12880 20 20 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e            pArg->
12890 63 4d 6f 64 65 20 3d 20 4d 4f 44 45 5f 45 78 70  cMode = MODE_Exp
128a0 6c 61 69 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  lain;.        }.
128b0 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
128c0 68 65 20 73 68 65 6c 6c 20 69 73 20 63 75 72 72  he shell is curr
128d0 65 6e 74 6c 79 20 69 6e 20 22 2e 65 78 70 6c 61  ently in ".expla
128e0 69 6e 22 20 6d 6f 64 65 2c 20 67 61 74 68 65 72  in" mode, gather
128f0 20 74 68 65 20 65 78 74 72 61 0a 20 20 20 20 20   the extra.     
12900 20 20 20 2a 2a 20 64 61 74 61 20 72 65 71 75 69     ** data requi
12910 72 65 64 20 74 6f 20 61 64 64 20 69 6e 64 65 6e  red to add inden
12920 74 73 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  ts to the output
12930 2e 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20  .*/.        if( 
12940 70 41 72 67 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44  pArg->cMode==MOD
12950 45 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20  E_Explain ){.   
12960 20 20 20 20 20 20 20 65 78 70 6c 61 69 6e 5f 64         explain_d
12970 61 74 61 5f 70 72 65 70 61 72 65 28 70 41 72 67  ata_prepare(pArg
12980 2c 20 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20  , pStmt);.      
12990 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20    }.      }..   
129a0 20 20 20 65 78 65 63 5f 70 72 65 70 61 72 65 64     exec_prepared
129b0 5f 73 74 6d 74 28 70 41 72 67 2c 20 70 53 74 6d  _stmt(pArg, pStm
129c0 74 2c 20 78 43 61 6c 6c 62 61 63 6b 29 3b 0a 20  t, xCallback);. 
129d0 20 20 20 20 20 65 78 70 6c 61 69 6e 5f 64 61 74       explain_dat
129e0 61 5f 64 65 6c 65 74 65 28 70 41 72 67 29 3b 0a  a_delete(pArg);.
129f0 0a 20 20 20 20 20 20 2f 2a 20 70 72 69 6e 74 20  .      /* print 
12a00 75 73 61 67 65 20 73 74 61 74 73 20 69 66 20 73  usage stats if s
12a10 74 61 74 73 20 6f 6e 20 2a 2f 0a 20 20 20 20 20  tats on */.     
12a20 20 69 66 28 20 70 41 72 67 20 26 26 20 70 41 72   if( pArg && pAr
12a30 67 2d 3e 73 74 61 74 73 4f 6e 20 29 7b 0a 20 20  g->statsOn ){.  
12a40 20 20 20 20 20 20 64 69 73 70 6c 61 79 5f 73 74        display_st
12a50 61 74 73 28 64 62 2c 20 70 41 72 67 2c 20 30 29  ats(db, pArg, 0)
12a60 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
12a70 20 2f 2a 20 70 72 69 6e 74 20 6c 6f 6f 70 2d 63   /* print loop-c
12a80 6f 75 6e 74 65 72 73 20 69 66 20 72 65 71 75 69  ounters if requi
12a90 72 65 64 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  red */.      if(
12aa0 20 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e 73   pArg && pArg->s
12ab0 63 61 6e 73 74 61 74 73 4f 6e 20 29 7b 0a 20 20  canstatsOn ){.  
12ac0 20 20 20 20 20 20 64 69 73 70 6c 61 79 5f 73 63        display_sc
12ad0 61 6e 73 74 61 74 73 28 64 62 2c 20 70 41 72 67  anstats(db, pArg
12ae0 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
12af0 20 20 2f 2a 20 46 69 6e 61 6c 69 7a 65 20 74 68    /* Finalize th
12b00 65 20 73 74 61 74 65 6d 65 6e 74 20 6a 75 73 74  e statement just
12b10 20 65 78 65 63 75 74 65 64 2e 20 49 66 20 74 68   executed. If th
12b20 69 73 20 66 61 69 6c 73 2c 20 73 61 76 65 20 61  is fails, save a
12b30 0a 20 20 20 20 20 20 2a 2a 20 63 6f 70 79 20 6f  .      ** copy o
12b40 66 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  f the error mess
12b50 61 67 65 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  age. Otherwise, 
12b60 73 65 74 20 7a 53 71 6c 20 74 6f 20 70 6f 69 6e  set zSql to poin
12b70 74 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a  t to the.      *
12b80 2a 20 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74  * next statement
12b90 20 74 6f 20 65 78 65 63 75 74 65 2e 20 2a 2f 0a   to execute. */.
12ba0 20 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c 69        rc2 = sqli
12bb0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
12bc0 6d 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  mt);.      if( r
12bd0 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c!=SQLITE_NOMEM 
12be0 29 20 72 63 20 3d 20 72 63 32 3b 0a 20 20 20 20  ) rc = rc2;.    
12bf0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
12c00 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  _OK ){.        z
12c10 53 71 6c 20 3d 20 7a 4c 65 66 74 6f 76 65 72 3b  Sql = zLeftover;
12c20 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20  .        while( 
12c30 49 73 53 70 61 63 65 28 7a 53 71 6c 5b 30 5d 29  IsSpace(zSql[0])
12c40 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20 20 20   ) zSql++;.     
12c50 20 7d 65 6c 73 65 20 69 66 28 20 70 7a 45 72 72   }else if( pzErr
12c60 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 20 20 2a  Msg ){.        *
12c70 70 7a 45 72 72 4d 73 67 20 3d 20 73 61 76 65 5f  pzErrMsg = save_
12c80 65 72 72 5f 6d 73 67 28 64 62 29 3b 0a 20 20 20  err_msg(db);.   
12c90 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 63     }..      /* c
12ca0 6c 65 61 72 20 73 61 76 65 64 20 73 74 6d 74 20  lear saved stmt 
12cb0 68 61 6e 64 6c 65 20 2a 2f 0a 20 20 20 20 20 20  handle */.      
12cc0 69 66 28 20 70 41 72 67 20 29 7b 0a 20 20 20 20  if( pArg ){.    
12cd0 20 20 20 20 70 41 72 67 2d 3e 70 53 74 6d 74 20      pArg->pStmt 
12ce0 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 0a  = NULL;.      }.
12cf0 20 20 20 20 7d 0a 20 20 7d 20 2f 2a 20 65 6e 64      }.  } /* end
12d00 20 77 68 69 6c 65 20 2a 2f 0a 0a 20 20 72 65 74   while */..  ret
12d10 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
12d20 20 52 65 6c 65 61 73 65 20 6d 65 6d 6f 72 79 20   Release memory 
12d30 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
12d40 61 74 65 64 20 62 79 20 74 61 62 6c 65 43 6f 6c  ated by tableCol
12d50 75 6d 6e 4c 69 73 74 28 29 2e 0a 2a 2f 0a 73 74  umnList()..*/.st
12d60 61 74 69 63 20 76 6f 69 64 20 66 72 65 65 43 6f  atic void freeCo
12d70 6c 75 6d 6e 4c 69 73 74 28 63 68 61 72 20 2a 2a  lumnList(char **
12d80 61 7a 43 6f 6c 29 7b 0a 20 20 69 6e 74 20 69 3b  azCol){.  int i;
12d90 0a 20 20 66 6f 72 28 69 3d 31 3b 20 61 7a 43 6f  .  for(i=1; azCo
12da0 6c 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  l[i]; i++){.    
12db0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 7a 43  sqlite3_free(azC
12dc0 6f 6c 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 2f 2a  ol[i]);.  }.  /*
12dd0 20 61 7a 43 6f 6c 5b 30 5d 20 69 73 20 61 20 73   azCol[0] is a s
12de0 74 61 74 69 63 20 73 74 72 69 6e 67 20 2a 2f 0a  tatic string */.
12df0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
12e00 7a 43 6f 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  zCol);.}../*.** 
12e10 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66  Return a list of
12e20 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 73 74 72   pointers to str
12e30 69 6e 67 73 20 77 68 69 63 68 20 61 72 65 20 74  ings which are t
12e40 68 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 0a  he names of all.
12e50 2a 2a 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 61  ** columns in ta
12e60 62 6c 65 20 7a 54 61 62 2e 20 20 20 54 68 65 20  ble zTab.   The 
12e70 6d 65 6d 6f 72 79 20 74 6f 20 68 6f 6c 64 20 74  memory to hold t
12e80 68 65 20 6e 61 6d 65 73 20 69 73 20 64 79 6e 61  he names is dyna
12e90 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  mically.** alloc
12ea0 61 74 65 64 20 61 6e 64 20 6d 75 73 74 20 62 65  ated and must be
12eb0 20 72 65 6c 65 61 73 65 64 20 62 79 20 74 68 65   released by the
12ec0 20 63 61 6c 6c 65 72 20 75 73 69 6e 67 20 61 20   caller using a 
12ed0 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 0a  subsequent call.
12ee0 2a 2a 20 74 6f 20 66 72 65 65 43 6f 6c 75 6d 6e  ** to freeColumn
12ef0 4c 69 73 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  List()..**.** Th
12f00 65 20 61 7a 43 6f 6c 5b 30 5d 20 65 6e 74 72 79  e azCol[0] entry
12f10 20 69 73 20 75 73 75 61 6c 6c 79 20 4e 55 4c 4c   is usually NULL
12f20 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20 7a  .  However, if z
12f30 54 61 62 20 63 6f 6e 74 61 69 6e 73 20 61 20 72  Tab contains a r
12f40 6f 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20 74 68  owid.** value th
12f50 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 70  at needs to be p
12f60 72 65 73 65 72 76 65 64 2c 20 74 68 65 6e 20 61  reserved, then a
12f70 7a 43 6f 6c 5b 30 5d 20 69 73 20 66 69 6c 6c 65  zCol[0] is fille
12f80 64 20 69 6e 20 77 69 74 68 20 74 68 65 0a 2a 2a  d in with the.**
12f90 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 72 6f 77   name of the row
12fa0 69 64 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a  id column..**.**
12fb0 20 54 68 65 20 66 69 72 73 74 20 72 65 67 75 6c   The first regul
12fc0 61 72 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ar column in the
12fd0 20 74 61 62 6c 65 20 69 73 20 61 7a 43 6f 6c 5b   table is azCol[
12fe0 31 5d 2e 20 20 54 68 65 20 6c 69 73 74 20 69 73  1].  The list is
12ff0 20 74 65 72 6d 69 6e 61 74 65 64 0a 2a 2a 20 62   terminated.** b
13000 79 20 61 6e 20 65 6e 74 72 79 20 77 69 74 68 20  y an entry with 
13010 61 7a 43 6f 6c 5b 69 5d 3d 3d 30 2e 0a 2a 2f 0a  azCol[i]==0..*/.
13020 73 74 61 74 69 63 20 63 68 61 72 20 2a 2a 74 61  static char **ta
13030 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 53 68  bleColumnList(Sh
13040 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
13050 73 74 20 63 68 61 72 20 2a 7a 54 61 62 29 7b 0a  st char *zTab){.
13060 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 20 3d    char **azCol =
13070 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   0;.  sqlite3_st
13080 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 63 68 61  mt *pStmt;.  cha
13090 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 6e  r *zSql;.  int n
130a0 43 6f 6c 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e  Col = 0;.  int n
130b0 41 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 69 6e 74  Alloc = 0;.  int
130c0 20 6e 50 4b 20 3d 20 30 3b 20 20 20 20 20 20 20   nPK = 0;       
130d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 50 52 49  /* Number of PRI
130e0 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73  MARY KEY columns
130f0 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 69   seen */.  int i
13100 73 49 50 4b 20 3d 20 30 3b 20 20 20 20 20 2f 2a  sIPK = 0;     /*
13110 20 54 72 75 65 20 69 66 20 6f 6e 65 20 50 52 49   True if one PRI
13120 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20  MARY KEY column 
13130 6f 66 20 74 79 70 65 20 49 4e 54 45 47 45 52 20  of type INTEGER 
13140 2a 2f 0a 20 20 69 6e 74 20 70 72 65 73 65 72 76  */.  int preserv
13150 65 52 6f 77 69 64 20 3d 20 53 68 65 6c 6c 48 61  eRowid = ShellHa
13160 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 50  sFlag(p, SHFLG_P
13170 72 65 73 65 72 76 65 52 6f 77 69 64 29 3b 0a 20  reserveRowid);. 
13180 20 69 6e 74 20 72 63 3b 0a 0a 20 20 7a 53 71 6c   int rc;..  zSql
13190 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
131a0 74 66 28 22 50 52 41 47 4d 41 20 74 61 62 6c 65  tf("PRAGMA table
131b0 5f 69 6e 66 6f 3d 25 51 22 2c 20 7a 54 61 62 29  _info=%Q", zTab)
131c0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
131d0 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
131e0 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53  b, zSql, -1, &pS
131f0 74 6d 74 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  tmt, 0);.  sqlit
13200 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
13210 20 69 66 28 20 72 63 20 29 20 72 65 74 75 72 6e   if( rc ) return
13220 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 73 71 6c   0;.  while( sql
13230 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
13240 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a  ==SQLITE_ROW ){.
13250 20 20 20 20 69 66 28 20 6e 43 6f 6c 3e 3d 6e 41      if( nCol>=nA
13260 6c 6c 6f 63 2d 32 20 29 7b 0a 20 20 20 20 20 20  lloc-2 ){.      
13270 6e 41 6c 6c 6f 63 20 3d 20 6e 41 6c 6c 6f 63 2a  nAlloc = nAlloc*
13280 32 20 2b 20 6e 43 6f 6c 20 2b 20 31 30 3b 0a 20  2 + nCol + 10;. 
13290 20 20 20 20 20 61 7a 43 6f 6c 20 3d 20 73 71 6c       azCol = sql
132a0 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28 61 7a 43  ite3_realloc(azC
132b0 6f 6c 2c 20 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f  ol, nAlloc*sizeo
132c0 66 28 61 7a 43 6f 6c 5b 30 5d 29 29 3b 0a 20 20  f(azCol[0]));.  
132d0 20 20 20 20 69 66 28 20 61 7a 43 6f 6c 3d 3d 30      if( azCol==0
132e0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
132f0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
13300 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65  Error: out of me
13310 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20  mory\n");.      
13320 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20    exit(1);.     
13330 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 7a 43   }.    }.    azC
13340 6f 6c 5b 2b 2b 6e 43 6f 6c 5d 20 3d 20 73 71 6c  ol[++nCol] = sql
13350 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
13360 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ", sqlite3_colum
13370 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 29  n_text(pStmt, 1)
13380 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  );.    if( sqlit
13390 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53  e3_column_int(pS
133a0 74 6d 74 2c 20 35 29 20 29 7b 0a 20 20 20 20 20  tmt, 5) ){.     
133b0 20 6e 50 4b 2b 2b 3b 0a 20 20 20 20 20 20 69 66   nPK++;.      if
133c0 28 20 6e 50 4b 3d 3d 31 0a 20 20 20 20 20 20 20  ( nPK==1.       
133d0 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63  && sqlite3_stric
133e0 6d 70 28 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  mp((const char*)
133f0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
13400 65 78 74 28 70 53 74 6d 74 2c 32 29 2c 0a 20 20  ext(pStmt,2),.  
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13420 20 20 20 20 20 20 20 20 22 49 4e 54 45 47 45 52          "INTEGER
13430 22 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  ")==0.      ){. 
13440 20 20 20 20 20 20 20 69 73 49 50 4b 20 3d 20 31         isIPK = 1
13450 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
13460 20 20 20 20 20 20 20 69 73 49 50 4b 20 3d 20 30         isIPK = 0
13470 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
13480 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69    }.  sqlite3_fi
13490 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
134a0 20 69 66 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 20   if( azCol==0 ) 
134b0 72 65 74 75 72 6e 20 30 3b 0a 20 20 61 7a 43 6f  return 0;.  azCo
134c0 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 7a 43 6f  l[0] = 0;.  azCo
134d0 6c 5b 6e 43 6f 6c 2b 31 5d 20 3d 20 30 3b 0a 0a  l[nCol+1] = 0;..
134e0 20 20 2f 2a 20 54 68 65 20 64 65 63 69 73 69 6f    /* The decisio
134f0 6e 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  n of whether or 
13500 6e 6f 74 20 61 20 72 6f 77 69 64 20 72 65 61 6c  not a rowid real
13510 6c 79 20 6e 65 65 64 73 20 74 6f 20 62 65 20 70  ly needs to be p
13520 72 65 73 65 72 76 65 64 0a 20 20 2a 2a 20 69 73  reserved.  ** is
13530 20 74 72 69 63 6b 79 2e 20 20 57 65 20 6e 65 76   tricky.  We nev
13540 65 72 20 6e 65 65 64 20 74 6f 20 70 72 65 73 65  er need to prese
13550 72 76 65 20 61 20 72 6f 77 69 64 20 66 6f 72 20  rve a rowid for 
13560 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  a WITHOUT ROWID 
13570 74 61 62 6c 65 0a 20 20 2a 2a 20 6f 72 20 61 20  table.  ** or a 
13580 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 49 4e  table with an IN
13590 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
135a0 59 2e 20 20 57 65 20 61 72 65 20 75 6e 61 62 6c  Y.  We are unabl
135b0 65 20 74 6f 20 70 72 65 73 65 72 76 65 0a 20 20  e to preserve.  
135c0 2a 2a 20 72 6f 77 69 64 73 20 6f 6e 20 74 61 62  ** rowids on tab
135d0 6c 65 73 20 77 68 65 72 65 20 74 68 65 20 72 6f  les where the ro
135e0 77 69 64 20 69 73 20 69 6e 61 63 63 65 73 73 69  wid is inaccessi
135f0 62 6c 65 20 62 65 63 61 75 73 65 20 74 68 65 72  ble because ther
13600 65 20 61 72 65 20 6f 74 68 65 72 0a 20 20 2a 2a  e are other.  **
13610 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
13620 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 72 6f 77  table named "row
13630 69 64 22 2c 20 22 5f 72 6f 77 69 64 5f 22 2c 20  id", "_rowid_", 
13640 61 6e 64 20 22 6f 69 64 22 2e 0a 20 20 2a 2f 0a  and "oid"..  */.
13650 20 20 69 66 28 20 70 72 65 73 65 72 76 65 52 6f    if( preserveRo
13660 77 69 64 20 26 26 20 69 73 49 50 4b 20 29 7b 0a  wid && isIPK ){.
13670 20 20 20 20 2f 2a 20 49 66 20 61 20 73 69 6e 67      /* If a sing
13680 6c 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  le PRIMARY KEY c
13690 6f 6c 75 6d 6e 20 77 69 74 68 20 74 79 70 65 20  olumn with type 
136a0 49 4e 54 45 47 45 52 20 77 61 73 20 73 65 65 6e  INTEGER was seen
136b0 2c 20 74 68 65 6e 20 69 74 0a 20 20 20 20 2a 2a  , then it.    **
136c0 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61 6c 69   might be an ali
136d0 73 65 20 66 6f 72 20 74 68 65 20 52 4f 57 49 44  se for the ROWID
136e0 2e 20 20 42 75 74 20 69 74 20 6d 69 67 68 74 20  .  But it might 
136f0 61 6c 73 6f 20 62 65 20 61 20 57 49 54 48 4f 55  also be a WITHOU
13700 54 20 52 4f 57 49 44 0a 20 20 20 20 2a 2a 20 74  T ROWID.    ** t
13710 61 62 6c 65 20 6f 72 20 61 20 49 4e 54 45 47 45  able or a INTEGE
13720 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45  R PRIMARY KEY DE
13730 53 43 20 63 6f 6c 75 6d 6e 2c 20 6e 65 69 74 68  SC column, neith
13740 65 72 20 6f 66 20 77 68 69 63 68 20 61 72 65 0a  er of which are.
13750 20 20 20 20 2a 2a 20 52 4f 57 49 44 20 61 6c 69      ** ROWID ali
13760 61 73 65 73 2e 20 20 54 6f 20 64 69 73 74 69 6e  ases.  To distin
13770 67 75 69 73 68 20 74 68 65 73 65 20 63 61 73 65  guish these case
13780 73 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  s, check to see 
13790 69 66 0a 20 20 20 20 2a 2a 20 74 68 65 72 65 20  if.    ** there 
137a0 69 73 20 61 20 22 70 6b 22 20 65 6e 74 72 79 20  is a "pk" entry 
137b0 69 6e 20 22 50 52 41 47 4d 41 20 69 6e 64 65 78  in "PRAGMA index
137c0 5f 6c 69 73 74 22 2e 20 20 54 68 65 72 65 20 77  _list".  There w
137d0 69 6c 6c 20 62 65 0a 20 20 20 20 2a 2a 20 6e 6f  ill be.    ** no
137e0 20 22 70 6b 22 20 69 6e 64 65 78 20 69 66 20 74   "pk" index if t
137f0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 72  he PRIMARY KEY r
13800 65 61 6c 6c 79 20 69 73 20 61 6e 20 61 6c 69 61  eally is an alia
13810 73 20 66 6f 72 20 74 68 65 20 52 4f 57 49 44 2e  s for the ROWID.
13820 0a 20 20 20 20 2a 2f 0a 20 20 20 20 7a 53 71 6c  .    */.    zSql
13830 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
13840 74 66 28 22 53 45 4c 45 43 54 20 31 20 46 52 4f  tf("SELECT 1 FRO
13850 4d 20 70 72 61 67 6d 61 5f 69 6e 64 65 78 5f 6c  M pragma_index_l
13860 69 73 74 28 25 51 29 22 0a 20 20 20 20 20 20 20  ist(%Q)".       
13870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13880 20 20 20 20 22 20 57 48 45 52 45 20 6f 72 69 67      " WHERE orig
13890 69 6e 3d 27 70 6b 27 22 2c 20 7a 54 61 62 29 3b  in='pk'", zTab);
138a0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
138b0 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e  3_prepare_v2(p->
138c0 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70  db, zSql, -1, &p
138d0 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 73 71  Stmt, 0);.    sq
138e0 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29  lite3_free(zSql)
138f0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a  ;.    if( rc ){.
13900 20 20 20 20 20 20 66 72 65 65 43 6f 6c 75 6d 6e        freeColumn
13910 4c 69 73 74 28 61 7a 43 6f 6c 29 3b 0a 20 20 20  List(azCol);.   
13920 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20     return 0;.   
13930 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
13940 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b  te3_step(pStmt);
13950 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
13960 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
13970 20 20 70 72 65 73 65 72 76 65 52 6f 77 69 64 20    preserveRowid 
13980 3d 20 72 63 3d 3d 53 51 4c 49 54 45 5f 52 4f 57  = rc==SQLITE_ROW
13990 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 72 65 73  ;.  }.  if( pres
139a0 65 72 76 65 52 6f 77 69 64 20 29 7b 0a 20 20 20  erveRowid ){.   
139b0 20 2f 2a 20 4f 6e 6c 79 20 70 72 65 73 65 72 76   /* Only preserv
139c0 65 20 74 68 65 20 72 6f 77 69 64 20 69 66 20 77  e the rowid if w
139d0 65 20 63 61 6e 20 66 69 6e 64 20 61 20 6e 61 6d  e can find a nam
139e0 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65  e to use for the
139f0 0a 20 20 20 20 2a 2a 20 72 6f 77 69 64 20 2a 2f  .    ** rowid */
13a00 0a 20 20 20 20 73 74 61 74 69 63 20 63 68 61 72  .    static char
13a10 20 2a 61 7a 52 6f 77 69 64 5b 5d 20 3d 20 7b 20   *azRowid[] = { 
13a20 22 72 6f 77 69 64 22 2c 20 22 5f 72 6f 77 69 64  "rowid", "_rowid
13a30 5f 22 2c 20 22 6f 69 64 22 20 7d 3b 0a 20 20 20  _", "oid" };.   
13a40 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 20 20 66   int i, j;.    f
13a50 6f 72 28 6a 3d 30 3b 20 6a 3c 33 3b 20 6a 2b 2b  or(j=0; j<3; j++
13a60 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  ){.      for(i=1
13a70 3b 20 69 3c 3d 6e 43 6f 6c 3b 20 69 2b 2b 29 7b  ; i<=nCol; i++){
13a80 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
13a90 69 74 65 33 5f 73 74 72 69 63 6d 70 28 61 7a 52  ite3_stricmp(azR
13aa0 6f 77 69 64 5b 6a 5d 2c 61 7a 43 6f 6c 5b 69 5d  owid[j],azCol[i]
13ab0 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
13ac0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
13ad0 69 3e 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20  i>nCol ){.      
13ae0 20 20 2f 2a 20 41 74 20 74 68 69 73 20 70 6f 69    /* At this poi
13af0 6e 74 2c 20 77 65 20 6b 6e 6f 77 20 74 68 61 74  nt, we know that
13b00 20 61 7a 52 6f 77 69 64 5b 6a 5d 20 69 73 20 6e   azRowid[j] is n
13b10 6f 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  ot the name of a
13b20 6e 79 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 72  ny.        ** or
13b30 64 69 6e 61 72 79 20 63 6f 6c 75 6d 6e 20 69 6e  dinary column in
13b40 20 74 68 65 20 74 61 62 6c 65 2e 20 20 56 65 72   the table.  Ver
13b50 69 66 79 20 74 68 61 74 20 61 7a 52 6f 77 69 64  ify that azRowid
13b60 5b 6a 5d 20 69 73 20 61 20 76 61 6c 69 64 0a 20  [j] is a valid. 
13b70 20 20 20 20 20 20 20 2a 2a 20 6e 61 6d 65 20 66         ** name f
13b80 6f 72 20 74 68 65 20 72 6f 77 69 64 20 62 65 66  or the rowid bef
13b90 6f 72 65 20 61 64 64 69 6e 67 20 69 74 20 74 6f  ore adding it to
13ba0 20 61 7a 43 6f 6c 5b 30 5d 2e 20 20 57 49 54 48   azCol[0].  WITH
13bb0 4f 55 54 20 52 4f 57 49 44 0a 20 20 20 20 20 20  OUT ROWID.      
13bc0 20 20 2a 2a 20 74 61 62 6c 65 73 20 77 69 6c 6c    ** tables will
13bd0 20 66 61 69 6c 20 74 68 69 73 20 6c 61 73 74 20   fail this last 
13be0 63 68 65 63 6b 20 2a 2f 0a 20 20 20 20 20 20 20  check */.       
13bf0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74 61   rc = sqlite3_ta
13c00 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
13c10 61 74 61 28 70 2d 3e 64 62 2c 30 2c 7a 54 61 62  ata(p->db,0,zTab
13c20 2c 61 7a 52 6f 77 69 64 5b 6a 5d 2c 30 2c 30 2c  ,azRowid[j],0,0,
13c30 30 2c 30 2c 30 29 3b 0a 20 20 20 20 20 20 20 20  0,0,0);.        
13c40 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
13c50 4b 20 29 20 61 7a 43 6f 6c 5b 30 5d 20 3d 20 61  K ) azCol[0] = a
13c60 7a 52 6f 77 69 64 5b 6a 5d 3b 0a 20 20 20 20 20  zRowid[j];.     
13c70 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
13c80 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  }.    }.  }.  re
13c90 74 75 72 6e 20 61 7a 43 6f 6c 3b 0a 7d 0a 0a 2f  turn azCol;.}../
13ca0 2a 0a 2a 2a 20 54 6f 67 67 6c 65 20 74 68 65 20  *.** Toggle the 
13cb0 72 65 76 65 72 73 65 5f 75 6e 6f 72 64 65 72 65  reverse_unordere
13cc0 64 5f 73 65 6c 65 63 74 73 20 73 65 74 74 69 6e  d_selects settin
13cd0 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  g..*/.static voi
13ce0 64 20 74 6f 67 67 6c 65 53 65 6c 65 63 74 4f 72  d toggleSelectOr
13cf0 64 65 72 28 73 71 6c 69 74 65 33 20 2a 64 62 29  der(sqlite3 *db)
13d00 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
13d10 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 69   *pStmt = 0;.  i
13d20 6e 74 20 69 53 65 74 74 69 6e 67 20 3d 20 30 3b  nt iSetting = 0;
13d30 0a 20 20 63 68 61 72 20 7a 53 74 6d 74 5b 31 30  .  char zStmt[10
13d40 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 70 72  0];.  sqlite3_pr
13d50 65 70 61 72 65 5f 76 32 28 64 62 2c 20 22 50 52  epare_v2(db, "PR
13d60 41 47 4d 41 20 72 65 76 65 72 73 65 5f 75 6e 6f  AGMA reverse_uno
13d70 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 22 2c  rdered_selects",
13d80 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
13d90 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73  .  if( sqlite3_s
13da0 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49  tep(pStmt)==SQLI
13db0 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 53  TE_ROW ){.    iS
13dc0 65 74 74 69 6e 67 20 3d 20 73 71 6c 69 74 65 33  etting = sqlite3
13dd0 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d  _column_int(pStm
13de0 74 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  t, 0);.  }.  sql
13df0 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
13e00 74 6d 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  tmt);.  sqlite3_
13e10 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
13e20 7a 53 74 6d 74 29 2c 20 7a 53 74 6d 74 2c 0a 20  zStmt), zStmt,. 
13e30 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 72 65        "PRAGMA re
13e40 76 65 72 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f  verse_unordered_
13e50 73 65 6c 65 63 74 73 28 25 64 29 22 2c 20 21 69  selects(%d)", !i
13e60 53 65 74 74 69 6e 67 29 3b 0a 20 20 73 71 6c 69  Setting);.  sqli
13e70 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 74  te3_exec(db, zSt
13e80 6d 74 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 7d 0a  mt, 0, 0, 0);.}.
13e90 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  ./*.** This is a
13ea0 20 64 69 66 66 65 72 65 6e 74 20 63 61 6c 6c 62   different callb
13eb0 61 63 6b 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ack routine used
13ec0 20 66 6f 72 20 64 75 6d 70 69 6e 67 20 74 68 65   for dumping the
13ed0 20 64 61 74 61 62 61 73 65 2e 0a 2a 2a 20 45 61   database..** Ea
13ee0 63 68 20 72 6f 77 20 72 65 63 65 69 76 65 64 20  ch row received 
13ef0 62 79 20 74 68 69 73 20 63 61 6c 6c 62 61 63 6b  by this callback
13f00 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 74   consists of a t
13f10 61 62 6c 65 20 6e 61 6d 65 2c 0a 2a 2a 20 74 68  able name,.** th
13f20 65 20 74 61 62 6c 65 20 74 79 70 65 20 28 22 69  e table type ("i
13f30 6e 64 65 78 22 20 6f 72 20 22 74 61 62 6c 65 22  ndex" or "table"
13f40 29 20 61 6e 64 20 53 51 4c 20 74 6f 20 63 72 65  ) and SQL to cre
13f50 61 74 65 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a  ate the table..*
13f60 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
13f70 68 6f 75 6c 64 20 70 72 69 6e 74 20 74 65 78 74  hould print text
13f80 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 72   sufficient to r
13f90 65 63 72 65 61 74 65 20 74 68 65 20 74 61 62 6c  ecreate the tabl
13fa0 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
13fb0 20 64 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 28 76   dump_callback(v
13fc0 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20 6e  oid *pArg, int n
13fd0 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41 72  Arg, char **azAr
13fe0 67 2c 20 63 68 61 72 20 2a 2a 61 7a 4e 6f 74 55  g, char **azNotU
13ff0 73 65 64 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  sed){.  int rc;.
14000 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
14010 61 62 6c 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68  able;.  const ch
14020 61 72 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e  ar *zType;.  con
14030 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  st char *zSql;. 
14040 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 20 3d   ShellState *p =
14050 20 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 29 70   (ShellState *)p
14060 41 72 67 3b 0a 0a 20 20 55 4e 55 53 45 44 5f 50  Arg;..  UNUSED_P
14070 41 52 41 4d 45 54 45 52 28 61 7a 4e 6f 74 55 73  ARAMETER(azNotUs
14080 65 64 29 3b 0a 20 20 69 66 28 20 6e 41 72 67 21  ed);.  if( nArg!
14090 3d 33 20 7c 7c 20 61 7a 41 72 67 3d 3d 30 20 29  =3 || azArg==0 )
140a0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a 54 61   return 0;.  zTa
140b0 62 6c 65 20 3d 20 61 7a 41 72 67 5b 30 5d 3b 0a  ble = azArg[0];.
140c0 20 20 7a 54 79 70 65 20 3d 20 61 7a 41 72 67 5b    zType = azArg[
140d0 31 5d 3b 0a 20 20 7a 53 71 6c 20 3d 20 61 7a 41  1];.  zSql = azA
140e0 72 67 5b 32 5d 3b 0a 0a 20 20 69 66 28 20 73 74  rg[2];..  if( st
140f0 72 63 6d 70 28 7a 54 61 62 6c 65 2c 20 22 73 71  rcmp(zTable, "sq
14100 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 22 29 3d  lite_sequence")=
14110 3d 30 20 29 7b 0a 20 20 20 20 72 61 77 5f 70 72  =0 ){.    raw_pr
14120 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 44 45  intf(p->out, "DE
14130 4c 45 54 45 20 46 52 4f 4d 20 73 71 6c 69 74 65  LETE FROM sqlite
14140 5f 73 65 71 75 65 6e 63 65 3b 5c 6e 22 29 3b 0a  _sequence;\n");.
14150 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
14160 74 65 33 5f 73 74 72 67 6c 6f 62 28 22 73 71 6c  te3_strglob("sql
14170 69 74 65 5f 73 74 61 74 3f 22 2c 20 7a 54 61 62  ite_stat?", zTab
14180 6c 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 61  le)==0 ){.    ra
14190 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
141a0 20 22 41 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65   "ANALYZE sqlite
141b0 5f 6d 61 73 74 65 72 3b 5c 6e 22 29 3b 0a 20 20  _master;\n");.  
141c0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 6e 63 6d  }else if( strncm
141d0 70 28 7a 54 61 62 6c 65 2c 20 22 73 71 6c 69 74  p(zTable, "sqlit
141e0 65 5f 22 2c 20 37 29 3d 3d 30 20 29 7b 0a 20 20  e_", 7)==0 ){.  
141f0 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65    return 0;.  }e
14200 6c 73 65 20 69 66 28 20 73 74 72 6e 63 6d 70 28  lse if( strncmp(
14210 7a 53 71 6c 2c 20 22 43 52 45 41 54 45 20 56 49  zSql, "CREATE VI
14220 52 54 55 41 4c 20 54 41 42 4c 45 22 2c 20 32 30  RTUAL TABLE", 20
14230 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 68 61 72  )==0 ){.    char
14240 20 2a 7a 49 6e 73 3b 0a 20 20 20 20 69 66 28 20   *zIns;.    if( 
14250 21 70 2d 3e 77 72 69 74 61 62 6c 65 53 63 68 65  !p->writableSche
14260 6d 61 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  ma ){.      raw_
14270 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
14280 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f  PRAGMA writable_
14290 73 63 68 65 6d 61 3d 4f 4e 3b 5c 6e 22 29 3b 0a  schema=ON;\n");.
142a0 20 20 20 20 20 20 70 2d 3e 77 72 69 74 61 62 6c        p->writabl
142b0 65 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20 20  eSchema = 1;.   
142c0 20 7d 0a 20 20 20 20 7a 49 6e 73 20 3d 20 73 71   }.    zIns = sq
142d0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20  lite3_mprintf(. 
142e0 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e        "INSERT IN
142f0 54 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  TO sqlite_master
14300 28 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e  (type,name,tbl_n
14310 61 6d 65 2c 72 6f 6f 74 70 61 67 65 2c 73 71 6c  ame,rootpage,sql
14320 29 22 0a 20 20 20 20 20 20 20 22 56 41 4c 55 45  )".       "VALUE
14330 53 28 27 74 61 62 6c 65 27 2c 27 25 71 27 2c 27  S('table','%q','
14340 25 71 27 2c 30 2c 27 25 71 27 29 3b 22 2c 0a 20  %q',0,'%q');",. 
14350 20 20 20 20 20 20 7a 54 61 62 6c 65 2c 20 7a 54        zTable, zT
14360 61 62 6c 65 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  able, zSql);.   
14370 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
14380 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 49 6e  out, "%s\n", zIn
14390 73 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  s);.    sqlite3_
143a0 66 72 65 65 28 7a 49 6e 73 29 3b 0a 20 20 20 20  free(zIns);.    
143b0 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73  return 0;.  }els
143c0 65 7b 0a 20 20 20 20 70 72 69 6e 74 53 63 68 65  e{.    printSche
143d0 6d 61 4c 69 6e 65 28 70 2d 3e 6f 75 74 2c 20 7a  maLine(p->out, z
143e0 53 71 6c 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20 7d  Sql, ";\n");.  }
143f0 0a 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a  ..  if( strcmp(z
14400 54 79 70 65 2c 20 22 74 61 62 6c 65 22 29 3d 3d  Type, "table")==
14410 30 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 54 65  0 ){.    ShellTe
14420 78 74 20 73 53 65 6c 65 63 74 3b 0a 20 20 20 20  xt sSelect;.    
14430 53 68 65 6c 6c 54 65 78 74 20 73 54 61 62 6c 65  ShellText sTable
14440 3b 0a 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 43  ;.    char **azC
14450 6f 6c 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20  ol;.    int i;. 
14460 20 20 20 63 68 61 72 20 2a 73 61 76 65 64 44 65     char *savedDe
14470 73 74 54 61 62 6c 65 3b 0a 20 20 20 20 69 6e 74  stTable;.    int
14480 20 73 61 76 65 64 4d 6f 64 65 3b 0a 0a 20 20 20   savedMode;..   
14490 20 61 7a 43 6f 6c 20 3d 20 74 61 62 6c 65 43 6f   azCol = tableCo
144a0 6c 75 6d 6e 4c 69 73 74 28 70 2c 20 7a 54 61 62  lumnList(p, zTab
144b0 6c 65 29 3b 0a 20 20 20 20 69 66 28 20 61 7a 43  le);.    if( azC
144c0 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  ol==0 ){.      p
144d0 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20  ->nErr++;.      
144e0 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a  return 0;.    }.
144f0 0a 20 20 20 20 2f 2a 20 41 6c 77 61 79 73 20 71  .    /* Always q
14500 75 6f 74 65 20 74 68 65 20 74 61 62 6c 65 20 6e  uote the table n
14510 61 6d 65 2c 20 65 76 65 6e 20 69 66 20 69 74 20  ame, even if it 
14520 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 75  appears to be pu
14530 72 65 20 61 73 63 69 69 2c 0a 20 20 20 20 2a 2a  re ascii,.    **
14540 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20 61   in case it is a
14550 20 6b 65 79 77 6f 72 64 2e 20 45 78 3a 20 20 49   keyword. Ex:  I
14560 4e 53 45 52 54 20 49 4e 54 4f 20 22 74 61 62 6c  NSERT INTO "tabl
14570 65 22 20 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 6e  e" ... */.    in
14580 69 74 54 65 78 74 28 26 73 54 61 62 6c 65 29 3b  itText(&sTable);
14590 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28  .    appendText(
145a0 26 73 54 61 62 6c 65 2c 20 7a 54 61 62 6c 65 2c  &sTable, zTable,
145b0 20 71 75 6f 74 65 43 68 61 72 28 7a 54 61 62 6c   quoteChar(zTabl
145c0 65 29 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 70  e));.    /* If p
145d0 72 65 73 65 72 76 69 6e 67 20 74 68 65 20 72 6f  reserving the ro
145e0 77 69 64 2c 20 61 64 64 20 61 20 63 6f 6c 75 6d  wid, add a colum
145f0 6e 20 6c 69 73 74 20 61 66 74 65 72 20 74 68 65  n list after the
14600 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 20 20 20   table name..   
14610 20 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72   ** In other wor
14620 64 73 3a 20 20 22 49 4e 53 45 52 54 20 49 4e 54  ds:  "INSERT INT
14630 4f 20 74 61 62 28 72 6f 77 69 64 2c 61 2c 62 2c  O tab(rowid,a,b,
14640 63 2c 2e 2e 2e 29 20 56 41 4c 55 45 53 28 2e 2e  c,...) VALUES(..
14650 2e 29 22 0a 20 20 20 20 2a 2a 20 69 6e 73 74 65  .)".    ** inste
14660 61 64 20 6f 66 20 74 68 65 20 75 73 75 61 6c 20  ad of the usual 
14670 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 61 62  "INSERT INTO tab
14680 20 56 41 4c 55 45 53 28 2e 2e 2e 29 22 2e 0a 20   VALUES(...)".. 
14690 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 61 7a     */.    if( az
146a0 43 6f 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  Col[0] ){.      
146b0 61 70 70 65 6e 64 54 65 78 74 28 26 73 54 61 62  appendText(&sTab
146c0 6c 65 2c 20 22 28 22 2c 20 30 29 3b 0a 20 20 20  le, "(", 0);.   
146d0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
146e0 54 61 62 6c 65 2c 20 61 7a 43 6f 6c 5b 30 5d 2c  Table, azCol[0],
146f0 20 30 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69   0);.      for(i
14700 3d 31 3b 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b  =1; azCol[i]; i+
14710 2b 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65  +){.        appe
14720 6e 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20  ndText(&sTable, 
14730 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ",", 0);.       
14740 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 54 61   appendText(&sTa
14750 62 6c 65 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 20 71  ble, azCol[i], q
14760 75 6f 74 65 43 68 61 72 28 61 7a 43 6f 6c 5b 69  uoteChar(azCol[i
14770 5d 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ]));.      }.   
14780 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
14790 54 61 62 6c 65 2c 20 22 29 22 2c 20 30 29 3b 0a  Table, ")", 0);.
147a0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 42 75      }..    /* Bu
147b0 69 6c 64 20 61 6e 20 61 70 70 72 6f 70 72 69 61  ild an appropria
147c0 74 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  te SELECT statem
147d0 65 6e 74 20 2a 2f 0a 20 20 20 20 69 6e 69 74 54  ent */.    initT
147e0 65 78 74 28 26 73 53 65 6c 65 63 74 29 3b 0a 20  ext(&sSelect);. 
147f0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
14800 53 65 6c 65 63 74 2c 20 22 53 45 4c 45 43 54 20  Select, "SELECT 
14810 22 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 61  ", 0);.    if( a
14820 7a 43 6f 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20  zCol[0] ){.     
14830 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
14840 6c 65 63 74 2c 20 61 7a 43 6f 6c 5b 30 5d 2c 20  lect, azCol[0], 
14850 30 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e 64  0);.      append
14860 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22  Text(&sSelect, "
14870 2c 22 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  ,", 0);.    }.  
14880 20 20 66 6f 72 28 69 3d 31 3b 20 61 7a 43 6f 6c    for(i=1; azCol
14890 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  [i]; i++){.     
148a0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
148b0 6c 65 63 74 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 20  lect, azCol[i], 
148c0 71 75 6f 74 65 43 68 61 72 28 61 7a 43 6f 6c 5b  quoteChar(azCol[
148d0 69 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  i]));.      if( 
148e0 61 7a 43 6f 6c 5b 69 2b 31 5d 20 29 7b 0a 20 20  azCol[i+1] ){.  
148f0 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
14900 28 26 73 53 65 6c 65 63 74 2c 20 22 2c 22 2c 20  (&sSelect, ",", 
14910 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  0);.      }.    
14920 7d 0a 20 20 20 20 66 72 65 65 43 6f 6c 75 6d 6e  }.    freeColumn
14930 4c 69 73 74 28 61 7a 43 6f 6c 29 3b 0a 20 20 20  List(azCol);.   
14940 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
14950 6c 65 63 74 2c 20 22 20 46 52 4f 4d 20 22 2c 20  lect, " FROM ", 
14960 30 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65  0);.    appendTe
14970 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 54 61  xt(&sSelect, zTa
14980 62 6c 65 2c 20 71 75 6f 74 65 43 68 61 72 28 7a  ble, quoteChar(z
14990 54 61 62 6c 65 29 29 3b 0a 0a 20 20 20 20 73 61  Table));..    sa
149a0 76 65 64 44 65 73 74 54 61 62 6c 65 20 3d 20 70  vedDestTable = p
149b0 2d 3e 7a 44 65 73 74 54 61 62 6c 65 3b 0a 20 20  ->zDestTable;.  
149c0 20 20 73 61 76 65 64 4d 6f 64 65 20 3d 20 70 2d    savedMode = p-
149d0 3e 6d 6f 64 65 3b 0a 20 20 20 20 70 2d 3e 7a 44  >mode;.    p->zD
149e0 65 73 74 54 61 62 6c 65 20 3d 20 73 54 61 62 6c  estTable = sTabl
149f0 65 2e 7a 3b 0a 20 20 20 20 70 2d 3e 6d 6f 64 65  e.z;.    p->mode
14a00 20 3d 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f   = p->cMode = MO
14a10 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 72  DE_Insert;.    r
14a20 63 20 3d 20 73 68 65 6c 6c 5f 65 78 65 63 28 70  c = shell_exec(p
14a30 2d 3e 64 62 2c 20 73 53 65 6c 65 63 74 2e 7a 2c  ->db, sSelect.z,
14a40 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c   shell_callback,
14a50 20 70 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20   p, 0);.    if( 
14a60 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  (rc&0xff)==SQLIT
14a70 45 5f 43 4f 52 52 55 50 54 20 29 7b 0a 20 20 20  E_CORRUPT ){.   
14a80 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
14a90 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 43  >out, "/****** C
14aa0 4f 52 52 55 50 54 49 4f 4e 20 45 52 52 4f 52 20  ORRUPTION ERROR 
14ab0 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20 20  *******/\n");.  
14ac0 20 20 20 20 74 6f 67 67 6c 65 53 65 6c 65 63 74      toggleSelect
14ad0 4f 72 64 65 72 28 70 2d 3e 64 62 29 3b 0a 20 20  Order(p->db);.  
14ae0 20 20 20 20 73 68 65 6c 6c 5f 65 78 65 63 28 70      shell_exec(p
14af0 2d 3e 64 62 2c 20 73 53 65 6c 65 63 74 2e 7a 2c  ->db, sSelect.z,
14b00 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c   shell_callback,
14b10 20 70 2c 20 30 29 3b 0a 20 20 20 20 20 20 74 6f   p, 0);.      to
14b20 67 67 6c 65 53 65 6c 65 63 74 4f 72 64 65 72 28  ggleSelectOrder(
14b30 70 2d 3e 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20  p->db);.    }.  
14b40 20 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20    p->zDestTable 
14b50 3d 20 73 61 76 65 64 44 65 73 74 54 61 62 6c 65  = savedDestTable
14b60 3b 0a 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20  ;.    p->mode = 
14b70 73 61 76 65 64 4d 6f 64 65 3b 0a 20 20 20 20 66  savedMode;.    f
14b80 72 65 65 54 65 78 74 28 26 73 54 61 62 6c 65 29  reeText(&sTable)
14b90 3b 0a 20 20 20 20 66 72 65 65 54 65 78 74 28 26  ;.    freeText(&
14ba0 73 53 65 6c 65 63 74 29 3b 0a 20 20 20 20 69 66  sSelect);.    if
14bb0 28 20 72 63 20 29 20 70 2d 3e 6e 45 72 72 2b 2b  ( rc ) p->nErr++
14bc0 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  ;.  }.  return 0
14bd0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 7a  ;.}../*.** Run z
14be0 51 75 65 72 79 2e 20 20 55 73 65 20 64 75 6d 70  Query.  Use dump
14bf0 5f 63 61 6c 6c 62 61 63 6b 28 29 20 61 73 20 74  _callback() as t
14c00 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74  he callback rout
14c10 69 6e 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 74  ine so that.** t
14c20 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  he contents of t
14c30 68 65 20 71 75 65 72 79 20 61 72 65 20 6f 75 74  he query are out
14c40 70 75 74 20 61 73 20 53 51 4c 20 73 74 61 74 65  put as SQL state
14c50 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ments..**.** If 
14c60 77 65 20 67 65 74 20 61 20 53 51 4c 49 54 45 5f  we get a SQLITE_
14c70 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2c 20 72  CORRUPT error, r
14c80 65 72 75 6e 20 74 68 65 20 71 75 65 72 79 20 61  erun the query a
14c90 66 74 65 72 20 61 70 70 65 6e 64 69 6e 67 0a 2a  fter appending.*
14ca0 2a 20 22 4f 52 44 45 52 20 42 59 20 72 6f 77 69  * "ORDER BY rowi
14cb0 64 20 44 45 53 43 22 20 74 6f 20 74 68 65 20 65  d DESC" to the e
14cc0 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nd..*/.static in
14cd0 74 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64 75 6d  t run_schema_dum
14ce0 70 5f 71 75 65 72 79 28 0a 20 20 53 68 65 6c 6c  p_query(.  Shell
14cf0 53 74 61 74 65 20 2a 70 2c 0a 20 20 63 6f 6e 73  State *p,.  cons
14d00 74 20 63 68 61 72 20 2a 7a 51 75 65 72 79 0a 29  t char *zQuery.)
14d10 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68  {.  int rc;.  ch
14d20 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20  ar *zErr = 0;.  
14d30 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
14d40 63 28 70 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c  c(p->db, zQuery,
14d50 20 64 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 2c 20   dump_callback, 
14d60 70 2c 20 26 7a 45 72 72 29 3b 0a 20 20 69 66 28  p, &zErr);.  if(
14d70 20 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 52 52   rc==SQLITE_CORR
14d80 55 50 54 20 29 7b 0a 20 20 20 20 63 68 61 72 20  UPT ){.    char 
14d90 2a 7a 51 32 3b 0a 20 20 20 20 69 6e 74 20 6c 65  *zQ2;.    int le
14da0 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 51 75  n = strlen30(zQu
14db0 65 72 79 29 3b 0a 20 20 20 20 72 61 77 5f 70 72  ery);.    raw_pr
14dc0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a  intf(p->out, "/*
14dd0 2a 2a 2a 2a 2a 20 43 4f 52 52 55 50 54 49 4f 4e  ***** CORRUPTION
14de0 20 45 52 52 4f 52 20 2a 2a 2a 2a 2a 2a 2a 2f 5c   ERROR *******/\
14df0 6e 22 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 72  n");.    if( zEr
14e00 72 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  r ){.      utf8_
14e10 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
14e20 2f 2a 2a 2a 2a 2a 2a 20 25 73 20 2a 2a 2a 2a 2a  /****** %s *****
14e30 2a 2f 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20 20  */\n", zErr);.  
14e40 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
14e50 28 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 7a 45  (zErr);.      zE
14e60 72 72 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  rr = 0;.    }.  
14e70 20 20 7a 51 32 20 3d 20 6d 61 6c 6c 6f 63 28 20    zQ2 = malloc( 
14e80 6c 65 6e 2b 31 30 30 20 29 3b 0a 20 20 20 20 69  len+100 );.    i
14e90 66 28 20 7a 51 32 3d 3d 30 20 29 20 72 65 74 75  f( zQ2==0 ) retu
14ea0 72 6e 20 72 63 3b 0a 20 20 20 20 73 71 6c 69 74  rn rc;.    sqlit
14eb0 65 33 5f 73 6e 70 72 69 6e 74 66 28 6c 65 6e 2b  e3_snprintf(len+
14ec0 31 30 30 2c 20 7a 51 32 2c 20 22 25 73 20 4f 52  100, zQ2, "%s OR
14ed0 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53  DER BY rowid DES
14ee0 43 22 2c 20 7a 51 75 65 72 79 29 3b 0a 20 20 20  C", zQuery);.   
14ef0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
14f00 65 63 28 70 2d 3e 64 62 2c 20 7a 51 32 2c 20 64  ec(p->db, zQ2, d
14f10 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c  ump_callback, p,
14f20 20 26 7a 45 72 72 29 3b 0a 20 20 20 20 69 66 28   &zErr);.    if(
14f30 20 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74 66   rc ){.      utf
14f40 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
14f50 20 22 2f 2a 2a 2a 2a 2a 2a 20 45 52 52 4f 52 3a   "/****** ERROR:
14f60 20 25 73 20 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20   %s ******/\n", 
14f70 7a 45 72 72 29 3b 0a 20 20 20 20 7d 65 6c 73 65  zErr);.    }else
14f80 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
14f90 49 54 45 5f 43 4f 52 52 55 50 54 3b 0a 20 20 20  ITE_CORRUPT;.   
14fa0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66   }.    sqlite3_f
14fb0 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 20 20 66  ree(zErr);.    f
14fc0 72 65 65 28 7a 51 32 29 3b 0a 20 20 7d 0a 20 20  ree(zQ2);.  }.  
14fd0 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
14fe0 0a 2a 2a 20 54 65 78 74 20 6f 66 20 61 20 68 65  .** Text of a he
14ff0 6c 70 20 6d 65 73 73 61 67 65 0a 2a 2f 0a 73 74  lp message.*/.st
15000 61 74 69 63 20 63 68 61 72 20 7a 48 65 6c 70 5b  atic char zHelp[
15010 5d 20 3d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ] =.#ifndef SQLI
15020 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
15030 41 54 49 4f 4e 0a 20 20 22 2e 61 75 74 68 20 4f  ATION.  ".auth O
15040 4e 7c 4f 46 46 20 20 20 20 20 20 20 20 20 20 20  N|OFF           
15050 53 68 6f 77 20 61 75 74 68 6f 72 69 7a 65 72 20  Show authorizer 
15060 63 61 6c 6c 62 61 63 6b 73 5c 6e 22 0a 23 65 6e  callbacks\n".#en
15070 64 69 66 0a 20 20 22 2e 62 61 63 6b 75 70 20 3f  dif.  ".backup ?
15080 44 42 3f 20 46 49 4c 45 20 20 20 20 20 20 42 61  DB? FILE      Ba
15090 63 6b 75 70 20 44 42 20 28 64 65 66 61 75 6c 74  ckup DB (default
150a0 20 5c 22 6d 61 69 6e 5c 22 29 20 74 6f 20 46 49   \"main\") to FI
150b0 4c 45 5c 6e 22 0a 20 20 22 2e 62 61 69 6c 20 6f  LE\n".  ".bail o
150c0 6e 7c 6f 66 66 20 20 20 20 20 20 20 20 20 20 20  n|off           
150d0 53 74 6f 70 20 61 66 74 65 72 20 68 69 74 74 69  Stop after hitti
150e0 6e 67 20 61 6e 20 65 72 72 6f 72 2e 20 20 44 65  ng an error.  De
150f0 66 61 75 6c 74 20 4f 46 46 5c 6e 22 0a 20 20 22  fault OFF\n".  "
15100 2e 62 69 6e 61 72 79 20 6f 6e 7c 6f 66 66 20 20  .binary on|off  
15110 20 20 20 20 20 20 20 54 75 72 6e 20 62 69 6e 61         Turn bina
15120 72 79 20 6f 75 74 70 75 74 20 6f 6e 20 6f 72 20  ry output on or 
15130 6f 66 66 2e 20 20 44 65 66 61 75 6c 74 20 4f 46  off.  Default OF
15140 46 5c 6e 22 0a 20 20 22 2e 63 64 20 44 49 52 45  F\n".  ".cd DIRE
15150 43 54 4f 52 59 20 20 20 20 20 20 20 20 20 20 43  CTORY          C
15160 68 61 6e 67 65 20 74 68 65 20 77 6f 72 6b 69 6e  hange the workin
15170 67 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 44  g directory to D
15180 49 52 45 43 54 4f 52 59 5c 6e 22 0a 20 20 22 2e  IRECTORY\n".  ".
15190 63 68 61 6e 67 65 73 20 6f 6e 7c 6f 66 66 20 20  changes on|off  
151a0 20 20 20 20 20 20 53 68 6f 77 20 6e 75 6d 62 65        Show numbe
151b0 72 20 6f 66 20 72 6f 77 73 20 63 68 61 6e 67 65  r of rows change
151c0 64 20 62 79 20 53 51 4c 5c 6e 22 0a 20 20 22 2e  d by SQL\n".  ".
151d0 63 68 65 63 6b 20 47 4c 4f 42 20 20 20 20 20 20  check GLOB      
151e0 20 20 20 20 20 20 46 61 69 6c 20 69 66 20 6f 75        Fail if ou
151f0 74 70 75 74 20 73 69 6e 63 65 20 2e 74 65 73 74  tput since .test
15200 63 61 73 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61  case does not ma
15210 74 63 68 5c 6e 22 0a 20 20 22 2e 63 6c 6f 6e 65  tch\n".  ".clone
15220 20 4e 45 57 44 42 20 20 20 20 20 20 20 20 20 20   NEWDB          
15230 20 43 6c 6f 6e 65 20 64 61 74 61 20 69 6e 74 6f   Clone data into
15240 20 4e 45 57 44 42 20 66 72 6f 6d 20 74 68 65 20   NEWDB from the 
15250 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
15260 65 5c 6e 22 0a 20 20 22 2e 64 61 74 61 62 61 73  e\n".  ".databas
15270 65 73 20 20 20 20 20 20 20 20 20 20 20 20 20 4c  es             L
15280 69 73 74 20 6e 61 6d 65 73 20 61 6e 64 20 66 69  ist names and fi
15290 6c 65 73 20 6f 66 20 61 74 74 61 63 68 65 64 20  les of attached 
152a0 64 61 74 61 62 61 73 65 73 5c 6e 22 0a 20 20 22  databases\n".  "
152b0 2e 64 62 69 6e 66 6f 20 3f 44 42 3f 20 20 20 20  .dbinfo ?DB?    
152c0 20 20 20 20 20 20 20 53 68 6f 77 20 73 74 61 74         Show stat
152d0 75 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  us information a
152e0 62 6f 75 74 20 74 68 65 20 64 61 74 61 62 61 73  bout the databas
152f0 65 5c 6e 22 0a 20 20 22 2e 64 75 6d 70 20 3f 54  e\n".  ".dump ?T
15300 41 42 4c 45 3f 20 2e 2e 2e 20 20 20 20 20 20 44  ABLE? ...      D
15310 75 6d 70 20 74 68 65 20 64 61 74 61 62 61 73 65  ump the database
15320 20 69 6e 20 61 6e 20 53 51 4c 20 74 65 78 74 20   in an SQL text 
15330 66 6f 72 6d 61 74 5c 6e 22 0a 20 20 22 20 20 20  format\n".  "   
15340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15350 20 20 20 20 20 20 49 66 20 54 41 42 4c 45 20 73        If TABLE s
15360 70 65 63 69 66 69 65 64 2c 20 6f 6e 6c 79 20 64  pecified, only d
15370 75 6d 70 20 74 61 62 6c 65 73 20 6d 61 74 63 68  ump tables match
15380 69 6e 67 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  ing\n".  "      
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153a0 20 20 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20     LIKE pattern 
153b0 54 41 42 4c 45 2e 5c 6e 22 0a 20 20 22 2e 65 63  TABLE.\n".  ".ec
153c0 68 6f 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20 20  ho on|off       
153d0 20 20 20 20 54 75 72 6e 20 63 6f 6d 6d 61 6e 64      Turn command
153e0 20 65 63 68 6f 20 6f 6e 20 6f 72 20 6f 66 66 5c   echo on or off\
153f0 6e 22 0a 20 20 22 2e 65 71 70 20 6f 6e 7c 6f 66  n".  ".eqp on|of
15400 66 7c 66 75 6c 6c 20 20 20 20 20 20 20 45 6e 61  f|full       Ena
15410 62 6c 65 20 6f 72 20 64 69 73 61 62 6c 65 20 61  ble or disable a
15420 75 74 6f 6d 61 74 69 63 20 45 58 50 4c 41 49 4e  utomatic EXPLAIN
15430 20 51 55 45 52 59 20 50 4c 41 4e 5c 6e 22 0a 20   QUERY PLAN\n". 
15440 20 22 2e 65 78 69 74 20 20 20 20 20 20 20 20 20   ".exit         
15450 20 20 20 20 20 20 20 20 20 45 78 69 74 20 74 68           Exit th
15460 69 73 20 70 72 6f 67 72 61 6d 5c 6e 22 0a 20 20  is program\n".  
15470 22 2e 65 78 70 65 72 74 20 20 20 20 20 20 20 20  ".expert        
15480 20 20 20 20 20 20 20 20 45 58 50 45 52 49 4d 45          EXPERIME
15490 4e 54 41 4c 2e 20 53 75 67 67 65 73 74 20 69 6e  NTAL. Suggest in
154a0 64 65 78 65 73 20 66 6f 72 20 73 70 65 63 69 66  dexes for specif
154b0 69 65 64 20 71 75 65 72 69 65 73 5c 6e 22 0a 2f  ied queries\n"./
154c0 2a 20 42 65 63 61 75 73 65 20 65 78 70 6c 61 69  * Because explai
154d0 6e 20 6d 6f 64 65 20 63 6f 6d 65 73 20 6f 6e 20  n mode comes on 
154e0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6e 6f  automatically no
154f0 77 2c 20 74 68 65 20 22 2e 65 78 70 6c 61 69 6e  w, the ".explain
15500 22 20 6d 6f 64 65 0a 2a 2a 20 69 73 20 72 65 6d  " mode.** is rem
15510 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 68 65  oved from the he
15520 6c 70 20 73 63 72 65 65 6e 2e 20 20 49 74 20 69  lp screen.  It i
15530 73 20 73 74 69 6c 6c 20 73 75 70 70 6f 72 74 65  s still supporte
15540 64 20 66 6f 72 20 6c 65 67 61 63 79 2c 20 68 6f  d for legacy, ho
15550 77 65 76 65 72 20 2a 2f 0a 2f 2a 22 2e 65 78 70  wever */./*".exp
15560 6c 61 69 6e 20 3f 6f 6e 7c 6f 66 66 7c 61 75 74  lain ?on|off|aut
15570 6f 3f 20 54 75 72 6e 20 45 58 50 4c 41 49 4e 20  o? Turn EXPLAIN 
15580 6f 75 74 70 75 74 20 6d 6f 64 65 20 6f 6e 20 6f  output mode on o
15590 72 20 6f 66 66 20 6f 72 20 74 6f 20 61 75 74 6f  r off or to auto
155a0 6d 61 74 69 63 5c 6e 22 2a 2f 0a 20 20 22 2e 66  matic\n"*/.  ".f
155b0 75 6c 6c 73 63 68 65 6d 61 20 3f 2d 2d 69 6e 64  ullschema ?--ind
155c0 65 6e 74 3f 20 53 68 6f 77 20 73 63 68 65 6d 61  ent? Show schema
155d0 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74   and the content
155e0 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61 74 20   of sqlite_stat 
155f0 74 61 62 6c 65 73 5c 6e 22 0a 20 20 22 2e 68 65  tables\n".  ".he
15600 61 64 65 72 73 20 6f 6e 7c 6f 66 66 20 20 20 20  aders on|off    
15610 20 20 20 20 54 75 72 6e 20 64 69 73 70 6c 61 79      Turn display
15620 20 6f 66 20 68 65 61 64 65 72 73 20 6f 6e 20 6f   of headers on o
15630 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 68 65 6c  r off\n".  ".hel
15640 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p               
15650 20 20 20 53 68 6f 77 20 74 68 69 73 20 6d 65 73     Show this mes
15660 73 61 67 65 5c 6e 22 0a 20 20 22 2e 69 6d 70 6f  sage\n".  ".impo
15670 72 74 20 46 49 4c 45 20 54 41 42 4c 45 20 20 20  rt FILE TABLE   
15680 20 20 49 6d 70 6f 72 74 20 64 61 74 61 20 66 72    Import data fr
15690 6f 6d 20 46 49 4c 45 20 69 6e 74 6f 20 54 41 42  om FILE into TAB
156a0 4c 45 5c 6e 22 0a 23 69 66 6e 64 65 66 20 53 51  LE\n".#ifndef SQ
156b0 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 53 54 5f 43  LITE_OMIT_TEST_C
156c0 4f 4e 54 52 4f 4c 0a 20 20 22 2e 69 6d 70 6f 73  ONTROL.  ".impos
156d0 74 65 72 20 49 4e 44 45 58 20 54 41 42 4c 45 20  ter INDEX TABLE 
156e0 20 43 72 65 61 74 65 20 69 6d 70 6f 73 74 65 72   Create imposter
156f0 20 74 61 62 6c 65 20 54 41 42 4c 45 20 6f 6e 20   table TABLE on 
15700 69 6e 64 65 78 20 49 4e 44 45 58 5c 6e 22 0a 23  index INDEX\n".#
15710 65 6e 64 69 66 0a 20 20 22 2e 69 6e 64 65 78 65  endif.  ".indexe
15720 73 20 3f 54 41 42 4c 45 3f 20 20 20 20 20 20 20  s ?TABLE?       
15730 53 68 6f 77 20 6e 61 6d 65 73 20 6f 66 20 61 6c  Show names of al
15740 6c 20 69 6e 64 65 78 65 73 5c 6e 22 0a 20 20 22  l indexes\n".  "
15750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15760 20 20 20 20 20 20 20 20 20 49 66 20 54 41 42 4c           If TABL
15770 45 20 73 70 65 63 69 66 69 65 64 2c 20 6f 6e 6c  E specified, onl
15780 79 20 73 68 6f 77 20 69 6e 64 65 78 65 73 20 66  y show indexes f
15790 6f 72 20 74 61 62 6c 65 73 5c 6e 22 0a 20 20 22  or tables\n".  "
157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157b0 20 20 20 20 20 20 20 20 20 6d 61 74 63 68 69 6e           matchin
157c0 67 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 54  g LIKE pattern T
157d0 41 42 4c 45 2e 5c 6e 22 0a 23 69 66 64 65 66 20  ABLE.\n".#ifdef 
157e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
157f0 54 52 41 43 45 0a 20 20 22 2e 69 6f 74 72 61 63  TRACE.  ".iotrac
15800 65 20 46 49 4c 45 20 20 20 20 20 20 20 20 20 20  e FILE          
15810 45 6e 61 62 6c 65 20 49 2f 4f 20 64 69 61 67 6e  Enable I/O diagn
15820 6f 73 74 69 63 20 6c 6f 67 67 69 6e 67 20 74 6f  ostic logging to
15830 20 46 49 4c 45 5c 6e 22 0a 23 65 6e 64 69 66 0a   FILE\n".#endif.
15840 20 20 22 2e 6c 69 6d 69 74 20 3f 4c 49 4d 49 54    ".limit ?LIMIT
15850 3f 20 3f 56 41 4c 3f 20 20 20 44 69 73 70 6c 61  ? ?VAL?   Displa
15860 79 20 6f 72 20 63 68 61 6e 67 65 20 74 68 65 20  y or change the 
15870 76 61 6c 75 65 20 6f 66 20 61 6e 20 53 51 4c 49  value of an SQLI
15880 54 45 5f 4c 49 4d 49 54 5c 6e 22 0a 20 20 22 2e  TE_LIMIT\n".  ".
15890 6c 69 6e 74 20 4f 50 54 49 4f 4e 53 20 20 20 20  lint OPTIONS    
158a0 20 20 20 20 20 20 52 65 70 6f 72 74 20 70 6f 74        Report pot
158b0 65 6e 74 69 61 6c 20 73 63 68 65 6d 61 20 69 73  ential schema is
158c0 73 75 65 73 2e 20 4f 70 74 69 6f 6e 73 3a 5c 6e  sues. Options:\n
158d0 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6b                fk
158f0 65 79 2d 69 6e 64 65 78 65 73 20 20 20 20 20 46  ey-indexes     F
15900 69 6e 64 20 6d 69 73 73 69 6e 67 20 66 6f 72 65  ind missing fore
15910 69 67 6e 20 6b 65 79 20 69 6e 64 65 78 65 73 5c  ign key indexes\
15920 6e 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  n".#ifndef SQLIT
15930 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
15940 4e 53 49 4f 4e 0a 20 20 22 2e 6c 6f 61 64 20 46  NSION.  ".load F
15950 49 4c 45 20 3f 45 4e 54 52 59 3f 20 20 20 20 20  ILE ?ENTRY?     
15960 4c 6f 61 64 20 61 6e 20 65 78 74 65 6e 73 69 6f  Load an extensio
15970 6e 20 6c 69 62 72 61 72 79 5c 6e 22 0a 23 65 6e  n library\n".#en
15980 64 69 66 0a 20 20 22 2e 6c 6f 67 20 46 49 4c 45  dif.  ".log FILE
15990 7c 6f 66 66 20 20 20 20 20 20 20 20 20 20 54 75  |off          Tu
159a0 72 6e 20 6c 6f 67 67 69 6e 67 20 6f 6e 20 6f 72  rn logging on or
159b0 20 6f 66 66 2e 20 20 46 49 4c 45 20 63 61 6e 20   off.  FILE can 
159c0 62 65 20 73 74 64 65 72 72 2f 73 74 64 6f 75 74  be stderr/stdout
159d0 5c 6e 22 0a 20 20 22 2e 6d 6f 64 65 20 4d 4f 44  \n".  ".mode MOD
159e0 45 20 3f 54 41 42 4c 45 3f 20 20 20 20 20 53 65  E ?TABLE?     Se
159f0 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 77 68  t output mode wh
15a00 65 72 65 20 4d 4f 44 45 20 69 73 20 6f 6e 65 20  ere MODE is one 
15a10 6f 66 3a 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  of:\n".  "      
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 20 20 20 61 73 63 69 69 20 20 20 20 43 6f 6c 75     ascii    Colu
15a40 6d 6e 73 2f 72 6f 77 73 20 64 65 6c 69 6d 69 74  mns/rows delimit
15a50 65 64 20 62 79 20 30 78 31 46 20 61 6e 64 20 30  ed by 0x1F and 0
15a60 78 31 45 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  x1E\n".  "      
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a80 20 20 20 63 73 76 20 20 20 20 20 20 43 6f 6d 6d     csv      Comm
15a90 61 2d 73 65 70 61 72 61 74 65 64 20 76 61 6c 75  a-separated valu
15aa0 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  es\n".  "       
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ac0 20 20 63 6f 6c 75 6d 6e 20 20 20 4c 65 66 74 2d    column   Left-
15ad0 61 6c 69 67 6e 65 64 20 63 6f 6c 75 6d 6e 73 2e  aligned columns.
15ae0 20 20 28 53 65 65 20 2e 77 69 64 74 68 29 5c 6e    (See .width)\n
15af0 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 74                ht
15b10 6d 6c 20 20 20 20 20 48 54 4d 4c 20 3c 74 61 62  ml     HTML <tab
15b20 6c 65 3e 20 63 6f 64 65 5c 6e 22 0a 20 20 22 20  le> code\n".  " 
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 20 20          insert  
15b50 20 53 51 4c 20 69 6e 73 65 72 74 20 73 74 61 74   SQL insert stat
15b60 65 6d 65 6e 74 73 20 66 6f 72 20 54 41 42 4c 45  ements for TABLE
15b70 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 6c 69 6e 65 20 20 20 20 20 4f 6e 65 20 76 61 6c  line     One val
15ba0 75 65 20 70 65 72 20 6c 69 6e 65 5c 6e 22 0a 20  ue per line\n". 
15bb0 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
15bc0 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 20             list 
15bd0 20 20 20 20 56 61 6c 75 65 73 20 64 65 6c 69 6d      Values delim
15be0 69 74 65 64 20 62 79 20 5c 22 7c 5c 22 5c 6e 22  ited by \"|\"\n"
15bf0 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 71 75 6f               quo
15c10 74 65 20 20 20 20 45 73 63 61 70 65 20 61 6e 73  te    Escape ans
15c20 77 65 72 73 20 61 73 20 66 6f 72 20 53 51 4c 5c  wers as for SQL\
15c30 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15c50 61 62 73 20 20 20 20 20 54 61 62 2d 73 65 70 61  abs     Tab-sepa
15c60 72 61 74 65 64 20 76 61 6c 75 65 73 5c 6e 22 0a  rated values\n".
15c70 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
15c80 20 20 20 20 20 20 20 20 20 20 20 20 74 63 6c 20              tcl 
15c90 20 20 20 20 20 54 43 4c 20 6c 69 73 74 20 65 6c       TCL list el
15ca0 65 6d 65 6e 74 73 5c 6e 22 0a 20 20 22 2e 6e 75  ements\n".  ".nu
15cb0 6c 6c 76 61 6c 75 65 20 53 54 52 49 4e 47 20 20  llvalue STRING  
15cc0 20 20 20 20 55 73 65 20 53 54 52 49 4e 47 20 69      Use STRING i
15cd0 6e 20 70 6c 61 63 65 20 6f 66 20 4e 55 4c 4c 20  n place of NULL 
15ce0 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 2e 6f 6e  values\n".  ".on
15cf0 63 65 20 46 49 4c 45 4e 41 4d 45 20 20 20 20 20  ce FILENAME     
15d00 20 20 20 20 4f 75 74 70 75 74 20 66 6f 72 20 74      Output for t
15d10 68 65 20 6e 65 78 74 20 53 51 4c 20 63 6f 6d 6d  he next SQL comm
15d20 61 6e 64 20 6f 6e 6c 79 20 74 6f 20 46 49 4c 45  and only to FILE
15d30 4e 41 4d 45 5c 6e 22 0a 20 20 22 2e 6f 70 65 6e  NAME\n".  ".open
15d40 20 3f 4f 50 54 49 4f 4e 53 3f 20 3f 46 49 4c 45   ?OPTIONS? ?FILE
15d50 3f 20 43 6c 6f 73 65 20 65 78 69 73 74 69 6e 67  ? Close existing
15d60 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 72 65   database and re
15d70 6f 70 65 6e 20 46 49 4c 45 5c 6e 22 0a 20 20 22  open FILE\n".  "
15d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d90 20 20 20 20 20 20 20 20 20 54 68 65 20 2d 2d 6e           The --n
15da0 65 77 20 6f 70 74 69 6f 6e 20 73 74 61 72 74 73  ew option starts
15db0 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 66   with an empty f
15dc0 69 6c 65 5c 6e 22 0a 20 20 22 2e 6f 75 74 70 75  ile\n".  ".outpu
15dd0 74 20 3f 46 49 4c 45 4e 41 4d 45 3f 20 20 20 20  t ?FILENAME?    
15de0 20 53 65 6e 64 20 6f 75 74 70 75 74 20 74 6f 20   Send output to 
15df0 46 49 4c 45 4e 41 4d 45 20 6f 72 20 73 74 64 6f  FILENAME or stdo
15e00 75 74 5c 6e 22 0a 20 20 22 2e 70 72 69 6e 74 20  ut\n".  ".print 
15e10 53 54 52 49 4e 47 2e 2e 2e 20 20 20 20 20 20 20  STRING...       
15e20 50 72 69 6e 74 20 6c 69 74 65 72 61 6c 20 53 54  Print literal ST
15e30 52 49 4e 47 5c 6e 22 0a 20 20 22 2e 70 72 6f 6d  RING\n".  ".prom
15e40 70 74 20 4d 41 49 4e 20 43 4f 4e 54 49 4e 55 45  pt MAIN CONTINUE
15e50 20 20 52 65 70 6c 61 63 65 20 74 68 65 20 73 74    Replace the st
15e60 61 6e 64 61 72 64 20 70 72 6f 6d 70 74 73 5c 6e  andard prompts\n
15e70 22 0a 20 20 22 2e 71 75 69 74 20 20 20 20 20 20  ".  ".quit      
15e80 20 20 20 20 20 20 20 20 20 20 20 20 45 78 69 74              Exit
15e90 20 74 68 69 73 20 70 72 6f 67 72 61 6d 5c 6e 22   this program\n"
15ea0 0a 20 20 22 2e 72 65 61 64 20 46 49 4c 45 4e 41  .  ".read FILENA
15eb0 4d 45 20 20 20 20 20 20 20 20 20 45 78 65 63 75  ME         Execu
15ec0 74 65 20 53 51 4c 20 69 6e 20 46 49 4c 45 4e 41  te SQL in FILENA
15ed0 4d 45 5c 6e 22 0a 20 20 22 2e 72 65 73 74 6f 72  ME\n".  ".restor
15ee0 65 20 3f 44 42 3f 20 46 49 4c 45 20 20 20 20 20  e ?DB? FILE     
15ef0 52 65 73 74 6f 72 65 20 63 6f 6e 74 65 6e 74 20  Restore content 
15f00 6f 66 20 44 42 20 28 64 65 66 61 75 6c 74 20 5c  of DB (default \
15f10 22 6d 61 69 6e 5c 22 29 20 66 72 6f 6d 20 46 49  "main\") from FI
15f20 4c 45 5c 6e 22 0a 20 20 22 2e 73 61 76 65 20 46  LE\n".  ".save F
15f30 49 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 20  ILE             
15f40 57 72 69 74 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  Write in-memory 
15f50 64 61 74 61 62 61 73 65 20 69 6e 74 6f 20 46 49  database into FI
15f60 4c 45 5c 6e 22 0a 20 20 22 2e 73 63 61 6e 73 74  LE\n".  ".scanst
15f70 61 74 73 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20  ats on|off      
15f80 54 75 72 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d  Turn sqlite3_stm
15f90 74 5f 73 63 61 6e 73 74 61 74 75 73 28 29 20 6d  t_scanstatus() m
15fa0 65 74 72 69 63 73 20 6f 6e 20 6f 72 20 6f 66 66  etrics on or off
15fb0 5c 6e 22 0a 20 20 22 2e 73 63 68 65 6d 61 20 3f  \n".  ".schema ?
15fc0 50 41 54 54 45 52 4e 3f 20 20 20 20 20 20 53 68  PATTERN?      Sh
15fd0 6f 77 20 74 68 65 20 43 52 45 41 54 45 20 73 74  ow the CREATE st
15fe0 61 74 65 6d 65 6e 74 73 20 6d 61 74 63 68 69 6e  atements matchin
15ff0 67 20 50 41 54 54 45 52 4e 5c 6e 22 0a 20 20 22  g PATTERN\n".  "
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 20 20 20 20 20 41 64 64 20 2d 2d            Add --
16020 69 6e 64 65 6e 74 20 66 6f 72 20 70 72 65 74 74  indent for prett
16030 79 2d 70 72 69 6e 74 69 6e 67 5c 6e 22 0a 20 20  y-printing\n".  
16040 22 2e 73 65 6c 66 74 65 73 74 20 3f 2d 2d 69 6e  ".selftest ?--in
16050 69 74 3f 20 20 20 20 20 52 75 6e 20 74 65 73 74  it?     Run test
16060 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65  s defined in the
16070 20 53 45 4c 46 54 45 53 54 20 74 61 62 6c 65 5c   SELFTEST table\
16080 6e 22 0a 20 20 22 2e 73 65 70 61 72 61 74 6f 72  n".  ".separator
16090 20 43 4f 4c 20 3f 52 4f 57 3f 20 20 20 43 68 61   COL ?ROW?   Cha
160a0 6e 67 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 73  nge the column s
160b0 65 70 61 72 61 74 6f 72 20 61 6e 64 20 6f 70 74  eparator and opt
160c0 69 6f 6e 61 6c 6c 79 20 74 68 65 20 72 6f 77 5c  ionally the row\
160d0 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
160f0 65 70 61 72 61 74 6f 72 20 66 6f 72 20 62 6f 74  eparator for bot
16100 68 20 74 68 65 20 6f 75 74 70 75 74 20 6d 6f 64  h the output mod
16110 65 20 61 6e 64 20 2e 69 6d 70 6f 72 74 5c 6e 22  e and .import\n"
16120 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
16130 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49  ITE_ENABLE_SESSI
16140 4f 4e 29 0a 20 20 22 2e 73 65 73 73 69 6f 6e 20  ON).  ".session 
16150 43 4d 44 20 2e 2e 2e 20 20 20 20 20 20 20 43 72  CMD ...       Cr
16160 65 61 74 65 20 6f 72 20 63 6f 6e 74 72 6f 6c 20  eate or control 
16170 73 65 73 73 69 6f 6e 73 5c 6e 22 0a 23 65 6e 64  sessions\n".#end
16180 69 66 0a 20 20 22 2e 73 68 61 33 73 75 6d 20 3f  if.  ".sha3sum ?
16190 4f 50 54 49 4f 4e 53 2e 2e 2e 3f 20 20 43 6f 6d  OPTIONS...?  Com
161a0 70 75 74 65 20 61 20 53 48 41 33 20 68 61 73 68  pute a SHA3 hash
161b0 20 6f 66 20 64 61 74 61 62 61 73 65 20 63 6f 6e   of database con
161c0 74 65 6e 74 5c 6e 22 0a 20 20 22 2e 73 68 65 6c  tent\n".  ".shel
161d0 6c 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20 20 20  l CMD ARGS...   
161e0 20 20 52 75 6e 20 43 4d 44 20 41 52 47 53 2e 2e    Run CMD ARGS..
161f0 2e 20 69 6e 20 61 20 73 79 73 74 65 6d 20 73 68  . in a system sh
16200 65 6c 6c 5c 6e 22 0a 20 20 22 2e 73 68 6f 77 20  ell\n".  ".show 
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16220 20 53 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e   Show the curren
16230 74 20 76 61 6c 75 65 73 20 66 6f 72 20 76 61 72  t values for var
16240 69 6f 75 73 20 73 65 74 74 69 6e 67 73 5c 6e 22  ious settings\n"
16250 0a 20 20 22 2e 73 74 61 74 73 20 3f 6f 6e 7c 6f  .  ".stats ?on|o
16260 66 66 3f 20 20 20 20 20 20 20 20 53 68 6f 77 20  ff?        Show 
16270 73 74 61 74 73 20 6f 72 20 74 75 72 6e 20 73 74  stats or turn st
16280 61 74 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22  ats on or off\n"
16290 0a 20 20 22 2e 73 79 73 74 65 6d 20 43 4d 44 20  .  ".system CMD 
162a0 41 52 47 53 2e 2e 2e 20 20 20 20 52 75 6e 20 43  ARGS...    Run C
162b0 4d 44 20 41 52 47 53 2e 2e 2e 20 69 6e 20 61 20  MD ARGS... in a 
162c0 73 79 73 74 65 6d 20 73 68 65 6c 6c 5c 6e 22 0a  system shell\n".
162d0 20 20 22 2e 74 61 62 6c 65 73 20 3f 54 41 42 4c    ".tables ?TABL
162e0 45 3f 20 20 20 20 20 20 20 20 4c 69 73 74 20 6e  E?        List n
162f0 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73 5c 6e  ames of tables\n
16300 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 66                If
16320 20 54 41 42 4c 45 20 73 70 65 63 69 66 69 65 64   TABLE specified
16330 2c 20 6f 6e 6c 79 20 6c 69 73 74 20 74 61 62 6c  , only list tabl
16340 65 73 20 6d 61 74 63 68 69 6e 67 5c 6e 22 0a 20  es matching\n". 
16350 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
16360 20 20 20 20 20 20 20 20 20 20 20 4c 49 4b 45 20             LIKE 
16370 70 61 74 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e  pattern TABLE.\n
16380 22 0a 20 20 22 2e 74 65 73 74 63 61 73 65 20 4e  ".  ".testcase N
16390 41 4d 45 20 20 20 20 20 20 20 20 20 42 65 67 69  AME         Begi
163a0 6e 20 72 65 64 69 72 65 63 74 69 6e 67 20 6f 75  n redirecting ou
163b0 74 70 75 74 20 74 6f 20 27 74 65 73 74 63 61 73  tput to 'testcas
163c0 65 2d 6f 75 74 2e 74 78 74 27 5c 6e 22 0a 20 20  e-out.txt'\n".  
163d0 22 2e 74 69 6d 65 6f 75 74 20 4d 53 20 20 20 20  ".timeout MS    
163e0 20 20 20 20 20 20 20 20 54 72 79 20 6f 70 65 6e          Try open
163f0 69 6e 67 20 6c 6f 63 6b 65 64 20 74 61 62 6c 65  ing locked table
16400 73 20 66 6f 72 20 4d 53 20 6d 69 6c 6c 69 73 65  s for MS millise
16410 63 6f 6e 64 73 5c 6e 22 0a 20 20 22 2e 74 69 6d  conds\n".  ".tim
16420 65 72 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20 20  er on|off       
16430 20 20 20 54 75 72 6e 20 53 51 4c 20 74 69 6d 65     Turn SQL time
16440 72 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20  r on or off\n". 
16450 20 22 2e 74 72 61 63 65 20 46 49 4c 45 7c 6f 66   ".trace FILE|of
16460 66 20 20 20 20 20 20 20 20 4f 75 74 70 75 74 20  f        Output 
16470 65 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d 65  each SQL stateme
16480 6e 74 20 61 73 20 69 74 20 69 73 20 72 75 6e 5c  nt as it is run\
16490 6e 22 0a 20 20 22 2e 76 66 73 69 6e 66 6f 20 3f  n".  ".vfsinfo ?
164a0 41 55 58 3f 20 20 20 20 20 20 20 20 20 49 6e 66  AUX?         Inf
164b0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
164c0 68 65 20 74 6f 70 2d 6c 65 76 65 6c 20 56 46 53  he top-level VFS
164d0 5c 6e 22 0a 20 20 22 2e 76 66 73 6c 69 73 74 20  \n".  ".vfslist 
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69                Li
164f0 73 74 20 61 6c 6c 20 61 76 61 69 6c 61 62 6c 65  st all available
16500 20 56 46 53 65 73 5c 6e 22 0a 20 20 22 2e 76 66   VFSes\n".  ".vf
16510 73 6e 61 6d 65 20 3f 41 55 58 3f 20 20 20 20 20  sname ?AUX?     
16520 20 20 20 20 50 72 69 6e 74 20 74 68 65 20 6e 61      Print the na
16530 6d 65 20 6f 66 20 74 68 65 20 56 46 53 20 73 74  me of the VFS st
16540 61 63 6b 5c 6e 22 0a 20 20 22 2e 77 69 64 74 68  ack\n".  ".width
16550 20 4e 55 4d 31 20 4e 55 4d 32 20 2e 2e 2e 20 20   NUM1 NUM2 ...  
16560 20 53 65 74 20 63 6f 6c 75 6d 6e 20 77 69 64 74   Set column widt
16570 68 73 20 66 6f 72 20 5c 22 63 6f 6c 75 6d 6e 5c  hs for \"column\
16580 22 20 6d 6f 64 65 5c 6e 22 0a 20 20 22 20 20 20  " mode\n".  "   
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 4e 65 67 61 74 69 76 65 20 76        Negative v
165b0 61 6c 75 65 73 20 72 69 67 68 74 2d 6a 75 73 74  alues right-just
165c0 69 66 79 5c 6e 22 0a 3b 0a 0a 23 69 66 20 64 65  ify\n".;..#if de
165d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
165e0 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 2f 2a 0a  BLE_SESSION)./*.
165f0 2a 2a 20 50 72 69 6e 74 20 68 65 6c 70 20 69 6e  ** Print help in
16600 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68  formation for th
16610 65 20 22 2e 73 65 73 73 69 6f 6e 73 22 20 63 6f  e ".sessions" co
16620 6d 6d 61 6e 64 0a 2a 2f 0a 76 6f 69 64 20 73 65  mmand.*/.void se
16630 73 73 69 6f 6e 5f 68 65 6c 70 28 53 68 65 6c 6c  ssion_help(Shell
16640 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 72 61 77  State *p){.  raw
16650 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 0a  _printf(p->out,.
16660 20 20 20 20 22 2e 73 65 73 73 69 6f 6e 20 3f 4e      ".session ?N
16670 41 4d 45 3f 20 53 55 42 43 4f 4d 4d 41 4e 44 20  AME? SUBCOMMAND 
16680 3f 41 52 47 53 2e 2e 2e 3f 5c 6e 22 0a 20 20 20  ?ARGS...?\n".   
16690 20 22 49 66 20 3f 4e 41 4d 45 3f 20 69 73 20 6f   "If ?NAME? is o
166a0 6d 69 74 74 65 64 2c 20 74 68 65 20 66 69 72 73  mitted, the firs
166b0 74 20 64 65 66 69 6e 65 64 20 73 65 73 73 69 6f  t defined sessio
166c0 6e 20 69 73 20 75 73 65 64 2e 5c 6e 22 0a 20 20  n is used.\n".  
166d0 20 20 22 53 75 62 63 6f 6d 6d 61 6e 64 73 3a 5c    "Subcommands:\
166e0 6e 22 0a 20 20 20 20 22 20 20 20 61 74 74 61 63  n".    "   attac
166f0 68 20 54 41 42 4c 45 20 20 20 20 20 20 20 20 20  h TABLE         
16700 20 20 20 20 41 74 74 61 63 68 20 54 41 42 4c 45      Attach TABLE
16710 5c 6e 22 0a 20 20 20 20 22 20 20 20 63 68 61 6e  \n".    "   chan
16720 67 65 73 65 74 20 46 49 4c 45 20 20 20 20 20 20  geset FILE      
16730 20 20 20 20 20 57 72 69 74 65 20 61 20 63 68 61       Write a cha
16740 6e 67 65 73 65 74 20 69 6e 74 6f 20 46 49 4c 45  ngeset into FILE
16750 5c 6e 22 0a 20 20 20 20 22 20 20 20 63 6c 6f 73  \n".    "   clos
16760 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
16770 20 20 20 20 20 43 6c 6f 73 65 20 6f 6e 65 20 73       Close one s
16780 65 73 73 69 6f 6e 5c 6e 22 0a 20 20 20 20 22 20  ession\n".    " 
16790 20 20 65 6e 61 62 6c 65 20 3f 42 4f 4f 4c 45 41    enable ?BOOLEA
167a0 4e 3f 20 20 20 20 20 20 20 20 20 53 65 74 20 6f  N?         Set o
167b0 72 20 71 75 65 72 79 20 74 68 65 20 65 6e 61 62  r query the enab
167c0 6c 65 20 62 69 74 5c 6e 22 0a 20 20 20 20 22 20  le bit\n".    " 
167d0 20 20 66 69 6c 74 65 72 20 47 4c 4f 42 2e 2e 2e    filter GLOB...
167e0 20 20 20 20 20 20 20 20 20 20 20 52 65 6a 65 63             Rejec
167f0 74 20 74 61 62 6c 65 73 20 6d 61 74 63 68 69 6e  t tables matchin
16800 67 20 47 4c 4f 42 73 5c 6e 22 0a 20 20 20 20 22  g GLOBs\n".    "
16810 20 20 20 69 6e 64 69 72 65 63 74 20 3f 42 4f 4f     indirect ?BOO
16820 4c 45 41 4e 3f 20 20 20 20 20 20 20 4d 61 72 6b  LEAN?       Mark
16830 20 6f 72 20 71 75 65 72 79 20 74 68 65 20 69 6e   or query the in
16840 64 69 72 65 63 74 20 73 74 61 74 75 73 5c 6e 22  direct status\n"
16850 0a 20 20 20 20 22 20 20 20 69 73 65 6d 70 74 79  .    "   isempty
16860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16870 20 20 51 75 65 72 79 20 77 68 65 74 68 65 72 20    Query whether 
16880 74 68 65 20 73 65 73 73 69 6f 6e 20 69 73 20 65  the session is e
16890 6d 70 74 79 5c 6e 22 0a 20 20 20 20 22 20 20 20  mpty\n".    "   
168a0 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20 20  list            
168b0 20 20 20 20 20 20 20 20 20 4c 69 73 74 20 63 75           List cu
168c0 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 73 65 73  rrently open ses
168d0 73 69 6f 6e 20 6e 61 6d 65 73 5c 6e 22 0a 20 20  sion names\n".  
168e0 20 20 22 20 20 20 6f 70 65 6e 20 44 42 20 4e 41    "   open DB NA
168f0 4d 45 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  ME             O
16900 70 65 6e 20 61 20 6e 65 77 20 73 65 73 73 69 6f  pen a new sessio
16910 6e 20 6f 6e 20 44 42 5c 6e 22 0a 20 20 20 20 22  n on DB\n".    "
16920 20 20 20 70 61 74 63 68 73 65 74 20 46 49 4c 45     patchset FILE
16930 20 20 20 20 20 20 20 20 20 20 20 20 57 72 69 74              Writ
16940 65 20 61 20 70 61 74 63 68 73 65 74 20 69 6e 74  e a patchset int
16950 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 29 3b 0a 7d  o FILE\n".  );.}
16960 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 46 6f 72  .#endif.../* For
16970 77 61 72 64 20 72 65 66 65 72 65 6e 63 65 20 2a  ward reference *
16980 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 70 72 6f  /.static int pro
16990 63 65 73 73 5f 69 6e 70 75 74 28 53 68 65 6c 6c  cess_input(Shell
169a0 53 74 61 74 65 20 2a 70 2c 20 46 49 4c 45 20 2a  State *p, FILE *
169b0 69 6e 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64  in);../*.** Read
169c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
169d0 66 69 6c 65 20 7a 4e 61 6d 65 20 69 6e 74 6f 20  file zName into 
169e0 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
169f0 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  from sqlite3_mal
16a00 6c 6f 63 36 34 28 29 0a 2a 2a 20 61 6e 64 20 72  loc64().** and r
16a10 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
16a20 74 6f 20 74 68 65 20 62 75 66 66 65 72 2e 20 54  to the buffer. T
16a30 68 65 20 63 61 6c 6c 65 72 20 69 73 20 72 65 73  he caller is res
16a40 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 66 72 65  ponsible for fre
16a50 65 69 6e 67 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  eing.** the memo
16a60 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 70 61 72  ry..**.** If par
16a70 61 6d 65 74 65 72 20 70 6e 42 79 74 65 20 69 73  ameter pnByte is
16a80 20 6e 6f 74 20 4e 55 4c 4c 2c 20 28 2a 70 6e 42   not NULL, (*pnB
16a90 79 74 65 29 20 69 73 20 73 65 74 20 74 6f 20 74  yte) is set to t
16aa0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
16ab0 65 73 0a 2a 2a 20 72 65 61 64 2e 0a 2a 2a 0a 2a  es.** read..**.*
16ac0 2a 20 46 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63  * For convenienc
16ad0 65 2c 20 61 20 6e 75 6c 2d 74 65 72 6d 69 6e 61  e, a nul-termina
16ae0 74 6f 72 20 62 79 74 65 20 69 73 20 61 6c 77 61  tor byte is alwa
16af0 79 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74  ys appended to t
16b00 68 65 20 64 61 74 61 20 72 65 61 64 0a 2a 2a 20  he data read.** 
16b10 66 72 6f 6d 20 74 68 65 20 66 69 6c 65 20 62 65  from the file be
16b20 66 6f 72 65 20 74 68 65 20 62 75 66 66 65 72 20  fore the buffer 
16b30 69 73 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  is returned. Thi
16b40 73 20 62 79 74 65 20 69 73 20 6e 6f 74 20 69 6e  s byte is not in
16b50 63 6c 75 64 65 64 20 69 6e 0a 2a 2a 20 74 68 65  cluded in.** the
16b60 20 66 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20   final value of 
16b70 28 2a 70 6e 42 79 74 65 29 2c 20 69 66 20 61 70  (*pnByte), if ap
16b80 70 6c 69 63 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  plicable..**.** 
16b90 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64  NULL is returned
16ba0 20 69 66 20 61 6e 79 20 65 72 72 6f 72 20 69 73   if any error is
16bb0 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 54 68   encountered. Th
16bc0 65 20 66 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  e final value of
16bd0 20 2a 70 6e 42 79 74 65 0a 2a 2a 20 69 73 20 75   *pnByte.** is u
16be0 6e 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73  ndefined in this
16bf0 20 63 61 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63   case..*/.static
16c00 20 63 68 61 72 20 2a 72 65 61 64 46 69 6c 65 28   char *readFile(
16c10 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
16c20 65 2c 20 69 6e 74 20 2a 70 6e 42 79 74 65 29 7b  e, int *pnByte){
16c30 0a 20 20 46 49 4c 45 20 2a 69 6e 20 3d 20 66 6f  .  FILE *in = fo
16c40 70 65 6e 28 7a 4e 61 6d 65 2c 20 22 72 62 22 29  pen(zName, "rb")
16c50 3b 0a 20 20 6c 6f 6e 67 20 6e 49 6e 3b 0a 20 20  ;.  long nIn;.  
16c60 73 69 7a 65 5f 74 20 6e 52 65 61 64 3b 0a 20 20  size_t nRead;.  
16c70 63 68 61 72 20 2a 70 42 75 66 3b 0a 20 20 69 66  char *pBuf;.  if
16c80 28 20 69 6e 3d 3d 30 20 29 20 72 65 74 75 72 6e  ( in==0 ) return
16c90 20 30 3b 0a 20 20 66 73 65 65 6b 28 69 6e 2c 20   0;.  fseek(in, 
16ca0 30 2c 20 53 45 45 4b 5f 45 4e 44 29 3b 0a 20 20  0, SEEK_END);.  
16cb0 6e 49 6e 20 3d 20 66 74 65 6c 6c 28 69 6e 29 3b  nIn = ftell(in);
16cc0 0a 20 20 72 65 77 69 6e 64 28 69 6e 29 3b 0a 20  .  rewind(in);. 
16cd0 20 70 42 75 66 20 3d 20 73 71 6c 69 74 65 33 5f   pBuf = sqlite3_
16ce0 6d 61 6c 6c 6f 63 36 34 28 20 6e 49 6e 2b 31 20  malloc64( nIn+1 
16cf0 29 3b 0a 20 20 69 66 28 20 70 42 75 66 3d 3d 30  );.  if( pBuf==0
16d00 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 6e   ) return 0;.  n
16d10 52 65 61 64 20 3d 20 66 72 65 61 64 28 70 42 75  Read = fread(pBu
16d20 66 2c 20 6e 49 6e 2c 20 31 2c 20 69 6e 29 3b 0a  f, nIn, 1, in);.
16d30 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a 20 20    fclose(in);.  
16d40 69 66 28 20 6e 52 65 61 64 21 3d 31 20 29 7b 0a  if( nRead!=1 ){.
16d50 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
16d60 28 70 42 75 66 29 3b 0a 20 20 20 20 72 65 74 75  (pBuf);.    retu
16d70 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 70 42 75 66  rn 0;.  }.  pBuf
16d80 5b 6e 49 6e 5d 20 3d 20 30 3b 0a 20 20 69 66 28  [nIn] = 0;.  if(
16d90 20 70 6e 42 79 74 65 20 29 20 2a 70 6e 42 79 74   pnByte ) *pnByt
16da0 65 20 3d 20 6e 49 6e 3b 0a 20 20 72 65 74 75 72  e = nIn;.  retur
16db0 6e 20 70 42 75 66 3b 0a 7d 0a 0a 23 69 66 20 64  n pBuf;.}..#if d
16dc0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
16dd0 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 2f 2a  ABLE_SESSION)./*
16de0 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 73 69 6e 67  .** Close a sing
16df0 6c 65 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 6f  le OpenSession o
16e00 62 6a 65 63 74 20 61 6e 64 20 72 65 6c 65 61 73  bject and releas
16e10 65 20 61 6c 6c 20 6f 66 20 69 74 73 20 61 73 73  e all of its ass
16e20 6f 63 69 61 74 65 64 0a 2a 2a 20 72 65 73 6f 75  ociated.** resou
16e30 72 63 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rces..*/.static 
16e40 76 6f 69 64 20 73 65 73 73 69 6f 6e 5f 63 6c 6f  void session_clo
16e50 73 65 28 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a  se(OpenSession *
16e60 70 53 65 73 73 69 6f 6e 29 7b 0a 20 20 69 6e 74  pSession){.  int
16e70 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 73 65 73   i;.  sqlite3ses
16e80 73 69 6f 6e 5f 64 65 6c 65 74 65 28 70 53 65 73  sion_delete(pSes
16e90 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 73 71 6c 69  sion->p);.  sqli
16ea0 74 65 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f  te3_free(pSessio
16eb0 6e 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 66 6f 72  n->zName);.  for
16ec0 28 69 3d 30 3b 20 69 3c 70 53 65 73 73 69 6f 6e  (i=0; i<pSession
16ed0 2d 3e 6e 46 69 6c 74 65 72 3b 20 69 2b 2b 29 7b  ->nFilter; i++){
16ee0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
16ef0 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  e(pSession->azFi
16f00 6c 74 65 72 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  lter[i]);.  }.  
16f10 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53 65  sqlite3_free(pSe
16f20 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 29  ssion->azFilter)
16f30 3b 0a 20 20 6d 65 6d 73 65 74 28 70 53 65 73 73  ;.  memset(pSess
16f40 69 6f 6e 2c 20 30 2c 20 73 69 7a 65 6f 66 28 4f  ion, 0, sizeof(O
16f50 70 65 6e 53 65 73 73 69 6f 6e 29 29 3b 0a 7d 0a  penSession));.}.
16f60 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6c  #endif../*.** Cl
16f70 6f 73 65 20 61 6c 6c 20 4f 70 65 6e 53 65 73 73  ose all OpenSess
16f80 69 6f 6e 20 6f 62 6a 65 63 74 73 20 61 6e 64 20  ion objects and 
16f90 72 65 6c 65 61 73 65 20 61 6c 6c 20 61 73 73 6f  release all asso
16fa0 63 69 61 74 65 64 20 72 65 73 6f 75 72 63 65 73  ciated resources
16fb0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
16fc0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
16fd0 45 53 53 49 4f 4e 29 0a 73 74 61 74 69 63 20 76  ESSION).static v
16fe0 6f 69 64 20 73 65 73 73 69 6f 6e 5f 63 6c 6f 73  oid session_clos
16ff0 65 5f 61 6c 6c 28 53 68 65 6c 6c 53 74 61 74 65  e_all(ShellState
17000 20 2a 70 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *p){.  int i;. 
17010 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
17020 53 65 73 73 69 6f 6e 3b 20 69 2b 2b 29 7b 0a 20  Session; i++){. 
17030 20 20 20 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65     session_close
17040 28 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 5d  (&p->aSession[i]
17050 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6e 53 65 73  );.  }.  p->nSes
17060 73 69 6f 6e 20 3d 20 30 3b 0a 7d 0a 23 65 6c 73  sion = 0;.}.#els
17070 65 0a 23 20 64 65 66 69 6e 65 20 73 65 73 73 69  e.# define sessi
17080 6f 6e 5f 63 6c 6f 73 65 5f 61 6c 6c 28 58 29 0a  on_close_all(X).
17090 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6d  #endif../*.** Im
170a0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
170b0 74 68 65 20 78 46 69 6c 74 65 72 20 66 75 6e 63  the xFilter func
170c0 74 69 6f 6e 20 66 6f 72 20 61 6e 20 6f 70 65 6e  tion for an open
170d0 20 73 65 73 73 69 6f 6e 2e 20 20 4f 6d 69 74 0a   session.  Omit.
170e0 2a 2a 20 61 6e 79 20 74 61 62 6c 65 73 20 6e 61  ** any tables na
170f0 6d 65 64 20 62 79 20 22 2e 73 65 73 73 69 6f 6e  med by ".session
17100 20 66 69 6c 74 65 72 22 20 62 75 74 20 6c 65 74   filter" but let
17110 20 61 6c 6c 20 6f 74 68 65 72 20 74 61 62 6c 65   all other table
17120 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 23 69 66   through..*/.#if
17130 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
17140 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a  ENABLE_SESSION).
17150 73 74 61 74 69 63 20 69 6e 74 20 73 65 73 73 69  static int sessi
17160 6f 6e 5f 66 69 6c 74 65 72 28 76 6f 69 64 20 2a  on_filter(void *
17170 70 43 74 78 2c 20 63 6f 6e 73 74 20 63 68 61 72  pCtx, const char
17180 20 2a 7a 54 61 62 29 7b 0a 20 20 4f 70 65 6e 53   *zTab){.  OpenS
17190 65 73 73 69 6f 6e 20 2a 70 53 65 73 73 69 6f 6e  ession *pSession
171a0 20 3d 20 28 4f 70 65 6e 53 65 73 73 69 6f 6e 2a   = (OpenSession*
171b0 29 70 43 74 78 3b 0a 20 20 69 6e 74 20 69 3b 0a  )pCtx;.  int i;.
171c0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 53 65    for(i=0; i<pSe
171d0 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20  ssion->nFilter; 
171e0 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 73 71  i++){.    if( sq
171f0 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 70 53  lite3_strglob(pS
17200 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72  ession->azFilter
17210 5b 69 5d 2c 20 7a 54 61 62 29 3d 3d 30 20 29 20  [i], zTab)==0 ) 
17220 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
17230 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64  return 1;.}.#end
17240 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73  if../*.** Make s
17250 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ure the database
17260 20 69 73 20 6f 70 65 6e 2e 20 20 49 66 20 69 74   is open.  If it
17270 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20 6f 70   is not, then op
17280 65 6e 20 69 74 2e 20 20 49 66 0a 2a 2a 20 74 68  en it.  If.** th
17290 65 20 64 61 74 61 62 61 73 65 20 66 61 69 6c 73  e database fails
172a0 20 74 6f 20 6f 70 65 6e 2c 20 70 72 69 6e 74 20   to open, print 
172b0 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
172c0 20 61 6e 64 20 65 78 69 74 2e 0a 2a 2f 0a 73 74   and exit..*/.st
172d0 61 74 69 63 20 76 6f 69 64 20 6f 70 65 6e 5f 64  atic void open_d
172e0 62 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c  b(ShellState *p,
172f0 20 69 6e 74 20 6b 65 65 70 41 6c 69 76 65 29 7b   int keepAlive){
17300 0a 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20  .  if( p->db==0 
17310 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69  ){.    sqlite3_i
17320 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20 20 20  nitialize();.   
17330 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 70 2d   sqlite3_open(p-
17340 3e 7a 44 62 46 69 6c 65 6e 61 6d 65 2c 20 26 70  >zDbFilename, &p
17350 2d 3e 64 62 29 3b 0a 20 20 20 20 67 6c 6f 62 61  ->db);.    globa
17360 6c 44 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 20  lDb = p->db;.   
17370 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 7c 7c   if( p->db==0 ||
17380 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69   SQLITE_OK!=sqli
17390 74 65 33 5f 65 72 72 63 6f 64 65 28 70 2d 3e 64  te3_errcode(p->d
173a0 62 29 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  b) ){.      utf8
173b0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
173c0 45 72 72 6f 72 3a 20 75 6e 61 62 6c 65 20 74 6f  Error: unable to
173d0 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 5c   open database \
173e0 22 25 73 5c 22 3a 20 25 73 5c 6e 22 2c 0a 20 20  "%s\": %s\n",.  
173f0 20 20 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69          p->zDbFi
17400 6c 65 6e 61 6d 65 2c 20 73 71 6c 69 74 65 33 5f  lename, sqlite3_
17410 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a  errmsg(p->db));.
17420 20 20 20 20 20 20 69 66 28 20 6b 65 65 70 41 6c        if( keepAl
17430 69 76 65 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ive ) return;.  
17440 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20      exit(1);.   
17450 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   }.#ifndef SQLIT
17460 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
17470 4e 53 49 4f 4e 0a 20 20 20 20 73 71 6c 69 74 65  NSION.    sqlite
17480 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78  3_enable_load_ex
17490 74 65 6e 73 69 6f 6e 28 70 2d 3e 64 62 2c 20 31  tension(p->db, 1
174a0 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 73 71  );.#endif.    sq
174b0 6c 69 74 65 33 5f 66 69 6c 65 69 6f 5f 69 6e 69  lite3_fileio_ini
174c0 74 28 70 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a  t(p->db, 0, 0);.
174d0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 68 61 74      sqlite3_shat
174e0 68 72 65 65 5f 69 6e 69 74 28 70 2d 3e 64 62 2c  hree_init(p->db,
174f0 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69   0, 0);.    sqli
17500 74 65 33 5f 63 6f 6d 70 6c 65 74 69 6f 6e 5f 69  te3_completion_i
17510 6e 69 74 28 70 2d 3e 64 62 2c 20 30 2c 20 30 29  nit(p->db, 0, 0)
17520 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72  ;.    sqlite3_cr
17530 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 70 2d  eate_function(p-
17540 3e 64 62 2c 20 22 73 68 65 6c 6c 5f 61 64 64 5f  >db, "shell_add_
17550 73 63 68 65 6d 61 22 2c 20 32 2c 20 53 51 4c 49  schema", 2, SQLI
17560 54 45 5f 55 54 46 38 2c 20 30 2c 0a 20 20 20 20  TE_UTF8, 0,.    
17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17580 20 20 20 20 20 20 20 20 73 68 65 6c 6c 41 64 64          shellAdd
17590 53 63 68 65 6d 61 4e 61 6d 65 2c 20 30 2c 20 30  SchemaName, 0, 0
175a0 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 69 66 20 48 41  );.  }.}..#if HA
175b0 56 45 5f 52 45 41 44 4c 49 4e 45 20 7c 7c 20 48  VE_READLINE || H
175c0 41 56 45 5f 45 44 49 54 4c 49 4e 45 0a 2f 2a 0a  AVE_EDITLINE./*.
175d0 2a 2a 20 52 65 61 64 6c 69 6e 65 20 63 6f 6d 70  ** Readline comp
175e0 6c 65 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 73  letion callbacks
175f0 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  .*/.static char 
17600 2a 72 65 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65  *readline_comple
17610 74 69 6f 6e 5f 67 65 6e 65 72 61 74 6f 72 28 63  tion_generator(c
17620 6f 6e 73 74 20 63 68 61 72 20 2a 74 65 78 74 2c  onst char *text,
17630 20 69 6e 74 20 73 74 61 74 65 29 7b 0a 20 20 73   int state){.  s
17640 74 61 74 69 63 20 73 71 6c 69 74 65 33 5f 73 74  tatic sqlite3_st
17650 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20  mt *pStmt = 0;. 
17660 20 63 68 61 72 20 2a 7a 52 65 74 3b 0a 20 20 69   char *zRet;.  i
17670 66 28 20 73 74 61 74 65 3d 3d 30 20 29 7b 0a 20  f( state==0 ){. 
17680 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20     char *zSql;. 
17690 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
176a0 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  ize(pStmt);.    
176b0 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zSql = sqlite3_m
176c0 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20 44  printf("SELECT D
176d0 49 53 54 49 4e 43 54 20 63 61 6e 64 69 64 61 74  ISTINCT candidat
176e0 65 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65  e COLLATE nocase
176f0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
17710 46 52 4f 4d 20 63 6f 6d 70 6c 65 74 69 6f 6e 28  FROM completion(
17720 25 51 29 20 4f 52 44 45 52 20 42 59 20 31 22 2c  %Q) ORDER BY 1",
17730 20 74 65 78 74 29 3b 0a 20 20 20 20 73 71 6c 69   text);.    sqli
17740 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 67  te3_prepare_v2(g
17750 6c 6f 62 61 6c 44 62 2c 20 7a 53 71 6c 2c 20 2d  lobalDb, zSql, -
17760 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
17770 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
17780 7a 53 71 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28  zSql);.  }.  if(
17790 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
177a0 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57  tmt)==SQLITE_ROW
177b0 20 29 7b 0a 20 20 20 20 7a 52 65 74 20 3d 20 73   ){.    zRet = s
177c0 74 72 64 75 70 28 28 63 6f 6e 73 74 20 63 68 61  trdup((const cha
177d0 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
177e0 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 30 29  n_text(pStmt, 0)
177f0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
17800 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
17810 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 70 53 74  (pStmt);.    pSt
17820 6d 74 20 3d 20 30 3b 0a 20 20 20 20 7a 52 65 74  mt = 0;.    zRet
17830 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75   = 0;.  }.  retu
17840 72 6e 20 7a 52 65 74 3b 0a 7d 0a 73 74 61 74 69  rn zRet;.}.stati
17850 63 20 63 68 61 72 20 2a 2a 72 65 61 64 6c 69 6e  c char **readlin
17860 65 5f 63 6f 6d 70 6c 65 74 69 6f 6e 28 63 6f 6e  e_completion(con
17870 73 74 20 63 68 61 72 20 2a 7a 54 65 78 74 2c 20  st char *zText, 
17880 69 6e 74 20 69 53 74 61 72 74 2c 20 69 6e 74 20  int iStart, int 
17890 69 45 6e 64 29 7b 0a 20 20 72 6c 5f 61 74 74 65  iEnd){.  rl_atte
178a0 6d 70 74 65 64 5f 63 6f 6d 70 6c 65 74 69 6f 6e  mpted_completion
178b0 5f 6f 76 65 72 20 3d 20 31 3b 0a 20 20 72 65 74  _over = 1;.  ret
178c0 75 72 6e 20 72 6c 5f 63 6f 6d 70 6c 65 74 69 6f  urn rl_completio
178d0 6e 5f 6d 61 74 63 68 65 73 28 7a 54 65 78 74 2c  n_matches(zText,
178e0 20 72 65 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65   readline_comple
178f0 74 69 6f 6e 5f 67 65 6e 65 72 61 74 6f 72 29 3b  tion_generator);
17900 0a 7d 0a 0a 23 65 6c 69 66 20 48 41 56 45 5f 4c  .}..#elif HAVE_L
17910 49 4e 45 4e 4f 49 53 45 0a 2f 2a 0a 2a 2a 20 4c  INENOISE./*.** L
17920 69 6e 65 6e 6f 69 73 65 20 63 6f 6d 70 6c 65 74  inenoise complet
17930 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 0a 2a 2f 0a  ion callback.*/.
17940 73 74 61 74 69 63 20 76 6f 69 64 20 6c 69 6e 65  static void line
17950 6e 6f 69 73 65 5f 63 6f 6d 70 6c 65 74 69 6f 6e  noise_completion
17960 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69  (const char *zLi
17970 6e 65 2c 20 6c 69 6e 65 6e 6f 69 73 65 43 6f 6d  ne, linenoiseCom
17980 70 6c 65 74 69 6f 6e 73 20 2a 6c 63 29 7b 0a 20  pletions *lc){. 
17990 20 69 6e 74 20 6e 4c 69 6e 65 20 3d 20 28 69 6e   int nLine = (in
179a0 74 29 73 74 72 6c 65 6e 28 7a 4c 69 6e 65 29 3b  t)strlen(zLine);
179b0 0a 20 20 69 6e 74 20 69 2c 20 69 53 74 61 72 74  .  int i, iStart
179c0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  ;.  sqlite3_stmt
179d0 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63   *pStmt = 0;.  c
179e0 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 63 68 61  har *zSql;.  cha
179f0 72 20 7a 42 75 66 5b 31 30 30 30 5d 3b 0a 0a 20  r zBuf[1000];.. 
17a00 20 69 66 28 20 6e 4c 69 6e 65 3e 73 69 7a 65 6f   if( nLine>sizeo
17a10 66 28 7a 42 75 66 29 2d 33 30 20 29 20 72 65 74  f(zBuf)-30 ) ret
17a20 75 72 6e 3b 0a 20 20 69 66 28 20 7a 4c 69 6e 65  urn;.  if( zLine
17a30 5b 30 5d 3d 3d 27 2e 27 20 29 20 72 65 74 75 72  [0]=='.' ) retur
17a40 6e 3b 0a 20 20 66 6f 72 28 69 3d 6e 4c 69 6e 65  n;.  for(i=nLine
17a50 2d 31 3b 20 69 3e 3d 30 20 26 26 20 28 69 73 61  -1; i>=0 && (isa
17a60 6c 6e 75 6d 28 7a 4c 69 6e 65 5b 69 5d 29 20 7c  lnum(zLine[i]) |
17a70 7c 20 7a 4c 69 6e 65 5b 69 5d 3d 3d 27 5f 27 29  | zLine[i]=='_')
17a80 3b 20 69 2d 2d 29 7b 7d 0a 20 20 69 66 28 20 69  ; i--){}.  if( i
17a90 3d 3d 6e 4c 69 6e 65 2d 31 20 29 20 72 65 74 75  ==nLine-1 ) retu
17aa0 72 6e 3b 0a 20 20 69 53 74 61 72 74 20 3d 20 69  rn;.  iStart = i
17ab0 2b 31 3b 0a 20 20 6d 65 6d 63 70 79 28 7a 42 75  +1;.  memcpy(zBu
17ac0 66 2c 20 7a 4c 69 6e 65 2c 20 69 53 74 61 72 74  f, zLine, iStart
17ad0 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  );.  zSql = sqli
17ae0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c  te3_mprintf("SEL
17af0 45 43 54 20 44 49 53 54 49 4e 43 54 20 63 61 6e  ECT DISTINCT can
17b00 64 69 64 61 74 65 20 43 4f 4c 4c 41 54 45 20 6e  didate COLLATE n
17b10 6f 63 61 73 65 22 0a 20 20 20 20 20 20 20 20 20  ocase".         
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 22 20 20 46 52 4f 4d 20 63 6f 6d 70 6c 65 74 69  "  FROM completi
17b40 6f 6e 28 25 51 2c 25 51 29 20 4f 52 44 45 52 20  on(%Q,%Q) ORDER 
17b50 42 59 20 31 22 2c 0a 20 20 20 20 20 20 20 20 20  BY 1",.         
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 26 7a 4c 69 6e 65 5b 69 53 74 61 72 74 5d 2c 20  &zLine[iStart], 
17b80 7a 4c 69 6e 65 29 3b 0a 20 20 73 71 6c 69 74 65  zLine);.  sqlite
17b90 33 5f 70 72 65 70 61 72 65 5f 76 32 28 67 6c 6f  3_prepare_v2(glo
17ba0 62 61 6c 44 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c  balDb, zSql, -1,
17bb0 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 73   &pStmt, 0);.  s
17bc0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
17bd0 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 65  );.  sqlite3_exe
17be0 63 28 67 6c 6f 62 61 6c 44 62 2c 20 22 50 52 41  c(globalDb, "PRA
17bf0 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 22 2c  GMA page_count",
17c00 20 30 2c 20 30 2c 20 30 29 3b 20 2f 2a 20 4c 6f   0, 0, 0); /* Lo
17c10 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 2a 2f  ad the schema */
17c20 0a 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65  .  while( sqlite
17c30 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53  3_step(pStmt)==S
17c40 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20  QLITE_ROW ){.   
17c50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f   const char *zCo
17c60 6d 70 6c 65 74 69 6f 6e 20 3d 20 28 63 6f 6e 73  mpletion = (cons
17c70 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
17c80 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d  column_text(pStm
17c90 74 2c 20 30 29 3b 0a 20 20 20 20 69 6e 74 20 6e  t, 0);.    int n
17ca0 43 6f 6d 70 6c 65 74 69 6f 6e 20 3d 20 73 71 6c  Completion = sql
17cb0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
17cc0 73 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20  s(pStmt, 0);.   
17cd0 20 69 66 28 20 69 53 74 61 72 74 2b 6e 43 6f 6d   if( iStart+nCom
17ce0 70 6c 65 74 69 6f 6e 20 3c 20 73 69 7a 65 6f 66  pletion < sizeof
17cf0 28 7a 42 75 66 29 2d 31 20 29 7b 0a 20 20 20 20  (zBuf)-1 ){.    
17d00 20 20 6d 65 6d 63 70 79 28 7a 42 75 66 2b 69 53    memcpy(zBuf+iS
17d10 74 61 72 74 2c 20 7a 43 6f 6d 70 6c 65 74 69 6f  tart, zCompletio
17d20 6e 2c 20 6e 43 6f 6d 70 6c 65 74 69 6f 6e 2b 31  n, nCompletion+1
17d30 29 3b 0a 20 20 20 20 20 20 6c 69 6e 65 6e 6f 69  );.      linenoi
17d40 73 65 41 64 64 43 6f 6d 70 6c 65 74 69 6f 6e 28  seAddCompletion(
17d50 6c 63 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 7d  lc, zBuf);.    }
17d60 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
17d70 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
17d80 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
17d90 44 6f 20 43 2d 6c 61 6e 67 75 61 67 65 20 73 74  Do C-language st
17da0 79 6c 65 20 64 65 71 75 6f 74 69 6e 67 2e 0a 2a  yle dequoting..*
17db0 2a 0a 2a 2a 20 20 20 20 5c 61 20 20 20 20 2d 3e  *.**    \a    ->
17dc0 20 61 6c 61 72 6d 0a 2a 2a 20 20 20 20 5c 62 20   alarm.**    \b 
17dd0 20 20 20 2d 3e 20 62 61 63 6b 73 70 61 63 65 0a     -> backspace.
17de0 2a 2a 20 20 20 20 5c 74 20 20 20 20 2d 3e 20 74  **    \t    -> t
17df0 61 62 0a 2a 2a 20 20 20 20 5c 6e 20 20 20 20 2d  ab.**    \n    -
17e00 3e 20 6e 65 77 6c 69 6e 65 0a 2a 2a 20 20 20 20  > newline.**    
17e10 5c 76 20 20 20 20 2d 3e 20 76 65 72 74 69 63 61  \v    -> vertica
17e20 6c 20 74 61 62 0a 2a 2a 20 20 20 20 5c 66 20 20  l tab.**    \f  
17e30 20 20 2d 3e 20 66 6f 72 6d 20 66 65 65 64 0a 2a    -> form feed.*
17e40 2a 20 20 20 20 5c 72 20 20 20 20 2d 3e 20 63 61  *    \r    -> ca
17e50 72 72 69 61 67 65 20 72 65 74 75 72 6e 0a 2a 2a  rriage return.**
17e60 20 20 20 20 5c 73 20 20 20 20 2d 3e 20 73 70 61      \s    -> spa
17e70 63 65 0a 2a 2a 20 20 20 20 5c 22 20 20 20 20 2d  ce.**    \"    -
17e80 3e 20 22 0a 2a 2a 20 20 20 20 5c 27 20 20 20 20  > ".**    \'    
17e90 2d 3e 20 27 0a 2a 2a 20 20 20 20 5c 5c 20 20 20  -> '.**    \\   
17ea0 20 2d 3e 20 62 61 63 6b 73 6c 61 73 68 0a 2a 2a   -> backslash.**
17eb0 20 20 20 20 5c 4e 4e 4e 20 20 2d 3e 20 61 73 63      \NNN  -> asc
17ec0 69 69 20 63 68 61 72 61 63 74 65 72 20 4e 4e 4e  ii character NNN
17ed0 20 69 6e 20 6f 63 74 61 6c 0a 2a 2f 0a 73 74 61   in octal.*/.sta
17ee0 74 69 63 20 76 6f 69 64 20 72 65 73 6f 6c 76 65  tic void resolve
17ef0 5f 62 61 63 6b 73 6c 61 73 68 65 73 28 63 68 61  _backslashes(cha
17f00 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 2c 20  r *z){.  int i, 
17f10 6a 3b 0a 20 20 63 68 61 72 20 63 3b 0a 20 20 77  j;.  char c;.  w
17f20 68 69 6c 65 28 20 2a 7a 20 26 26 20 2a 7a 21 3d  hile( *z && *z!=
17f30 27 5c 5c 27 20 29 20 7a 2b 2b 3b 0a 20 20 66 6f  '\\' ) z++;.  fo
17f40 72 28 69 3d 6a 3d 30 3b 20 28 63 20 3d 20 7a 5b  r(i=j=0; (c = z[
17f50 69 5d 29 21 3d 30 3b 20 69 2b 2b 2c 20 6a 2b 2b  i])!=0; i++, j++
17f60 29 7b 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 5c  ){.    if( c=='\
17f70 5c 27 20 26 26 20 7a 5b 69 2b 31 5d 21 3d 30 20  \' && z[i+1]!=0 
17f80 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 7a 5b 2b  ){.      c = z[+
17f90 2b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63  +i];.      if( c
17fa0 3d 3d 27 61 27 20 29 7b 0a 20 20 20 20 20 20 20  =='a' ){.       
17fb0 20 63 20 3d 20 27 5c 61 27 3b 0a 20 20 20 20 20   c = '\a';.     
17fc0 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 62   }else if( c=='b
17fd0 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d  ' ){.        c =
17fe0 20 27 5c 62 27 3b 0a 20 20 20 20 20 20 7d 65 6c   '\b';.      }el
17ff0 73 65 20 69 66 28 20 63 3d 3d 27 74 27 20 29 7b  se if( c=='t' ){
18000 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 74  .        c = '\t
18010 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ';.      }else i
18020 66 28 20 63 3d 3d 27 6e 27 20 29 7b 0a 20 20 20  f( c=='n' ){.   
18030 20 20 20 20 20 63 20 3d 20 27 5c 6e 27 3b 0a 20       c = '\n';. 
18040 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63       }else if( c
18050 3d 3d 27 76 27 20 29 7b 0a 20 20 20 20 20 20 20  =='v' ){.       
18060 20 63 20 3d 20 27 5c 76 27 3b 0a 20 20 20 20 20   c = '\v';.     
18070 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 66   }else if( c=='f
18080 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d  ' ){.        c =
18090 20 27 5c 66 27 3b 0a 20 20 20 20 20 20 7d 65 6c   '\f';.      }el
180a0 73 65 20 69 66 28 20 63 3d 3d 27 72 27 20 29 7b  se if( c=='r' ){
180b0 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 72  .        c = '\r
180c0 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ';.      }else i
180d0 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a 20 20 20  f( c=='"' ){.   
180e0 20 20 20 20 20 63 20 3d 20 27 22 27 3b 0a 20 20       c = '"';.  
180f0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
18100 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 20  ='\'' ){.       
18110 20 63 20 3d 20 27 5c 27 27 3b 0a 20 20 20 20 20   c = '\'';.     
18120 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c   }else if( c=='\
18130 5c 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20  \' ){.        c 
18140 3d 20 27 5c 5c 27 3b 0a 20 20 20 20 20 20 7d 65  = '\\';.      }e
18150 6c 73 65 20 69 66 28 20 63 3e 3d 27 30 27 20 26  lse if( c>='0' &
18160 26 20 63 3c 3d 27 37 27 20 29 7b 0a 20 20 20 20  & c<='7' ){.    
18170 20 20 20 20 63 20 2d 3d 20 27 30 27 3b 0a 20 20      c -= '0';.  
18180 20 20 20 20 20 20 69 66 28 20 7a 5b 69 2b 31 5d        if( z[i+1]
18190 3e 3d 27 30 27 20 26 26 20 7a 5b 69 2b 31 5d 3c  >='0' && z[i+1]<
181a0 3d 27 37 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='7' ){.        
181b0 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20    i++;.         
181c0 20 63 20 3d 20 28 63 3c 3c 33 29 20 2b 20 7a 5b   c = (c<<3) + z[
181d0 69 5d 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20  i] - '0';.      
181e0 20 20 20 20 69 66 28 20 7a 5b 69 2b 31 5d 3e 3d      if( z[i+1]>=
181f0 27 30 27 20 26 26 20 7a 5b 69 2b 31 5d 3c 3d 27  '0' && z[i+1]<='
18200 37 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  7' ){.          
18210 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20    i++;.         
18220 20 20 20 63 20 3d 20 28 63 3c 3c 33 29 20 2b 20     c = (c<<3) + 
18230 7a 5b 69 5d 20 2d 20 27 30 27 3b 0a 20 20 20 20  z[i] - '0';.    
18240 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
18250 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
18260 20 20 20 20 7a 5b 6a 5d 20 3d 20 63 3b 0a 20 20      z[j] = c;.  
18270 7d 0a 20 20 69 66 28 20 6a 3c 69 20 29 20 7a 5b  }.  if( j<i ) z[
18280 6a 5d 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  j] = 0;.}../*.**
18290 20 52 65 74 75 72 6e 20 74 68 65 20 76 61 6c 75   Return the valu
182a0 65 20 6f 66 20 61 20 68 65 78 61 64 65 63 69 6d  e of a hexadecim
182b0 61 6c 20 64 69 67 69 74 2e 20 20 52 65 74 75 72  al digit.  Retur
182c0 6e 20 2d 31 20 69 66 20 74 68 65 20 69 6e 70 75  n -1 if the inpu
182d0 74 0a 2a 2a 20 69 73 20 6e 6f 74 20 61 20 68 65  t.** is not a he
182e0 78 20 64 69 67 69 74 2e 0a 2a 2f 0a 73 74 61 74  x digit..*/.stat
182f0 69 63 20 69 6e 74 20 68 65 78 44 69 67 69 74 56  ic int hexDigitV
18300 61 6c 75 65 28 63 68 61 72 20 63 29 7b 0a 20 20  alue(char c){.  
18310 69 66 28 20 63 3e 3d 27 30 27 20 26 26 20 63 3c  if( c>='0' && c<
18320 3d 27 39 27 20 29 20 72 65 74 75 72 6e 20 63 20  ='9' ) return c 
18330 2d 20 27 30 27 3b 0a 20 20 69 66 28 20 63 3e 3d  - '0';.  if( c>=
18340 27 61 27 20 26 26 20 63 3c 3d 27 66 27 20 29 20  'a' && c<='f' ) 
18350 72 65 74 75 72 6e 20 63 20 2d 20 27 61 27 20 2b  return c - 'a' +
18360 20 31 30 3b 0a 20 20 69 66 28 20 63 3e 3d 27 41   10;.  if( c>='A
18370 27 20 26 26 20 63 3c 3d 27 46 27 20 29 20 72 65  ' && c<='F' ) re
18380 74 75 72 6e 20 63 20 2d 20 27 41 27 20 2b 20 31  turn c - 'A' + 1
18390 30 3b 0a 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a  0;.  return -1;.
183a0 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  }../*.** Interpr
183b0 65 74 20 7a 41 72 67 20 61 73 20 61 6e 20 69 6e  et zArg as an in
183c0 74 65 67 65 72 20 76 61 6c 75 65 2c 20 70 6f 73  teger value, pos
183d0 73 69 62 6c 79 20 77 69 74 68 20 73 75 66 66 69  sibly with suffi
183e0 78 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 73  xes..*/.static s
183f0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 69 6e 74  qlite3_int64 int
18400 65 67 65 72 56 61 6c 75 65 28 63 6f 6e 73 74 20  egerValue(const 
18410 63 68 61 72 20 2a 7a 41 72 67 29 7b 0a 20 20 73  char *zArg){.  s
18420 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 76 20 3d  qlite3_int64 v =
18430 20 30 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e   0;.  static con
18440 73 74 20 73 74 72 75 63 74 20 7b 20 63 68 61 72  st struct { char
18450 20 2a 7a 53 75 66 66 69 78 3b 20 69 6e 74 20 69   *zSuffix; int i
18460 4d 75 6c 74 3b 20 7d 20 61 4d 75 6c 74 5b 5d 20  Mult; } aMult[] 
18470 3d 20 7b 0a 20 20 20 20 7b 20 22 4b 69 42 22 2c  = {.    { "KiB",
18480 20 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22   1024 },.    { "
18490 4d 69 42 22 2c 20 31 30 32 34 2a 31 30 32 34 20  MiB", 1024*1024 
184a0 7d 2c 0a 20 20 20 20 7b 20 22 47 69 42 22 2c 20  },.    { "GiB", 
184b0 31 30 32 34 2a 31 30 32 34 2a 31 30 32 34 20 7d  1024*1024*1024 }
184c0 2c 0a 20 20 20 20 7b 20 22 4b 42 22 2c 20 20 31  ,.    { "KB",  1
184d0 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 42  000 },.    { "MB
184e0 22 2c 20 20 31 30 30 30 30 30 30 20 7d 2c 0a 20  ",  1000000 },. 
184f0 20 20 20 7b 20 22 47 42 22 2c 20 20 31 30 30 30     { "GB",  1000
18500 30 30 30 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20  000000 },.    { 
18510 22 4b 22 2c 20 20 20 31 30 30 30 20 7d 2c 0a 20  "K",   1000 },. 
18520 20 20 20 7b 20 22 4d 22 2c 20 20 20 31 30 30 30     { "M",   1000
18530 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 47 22  000 },.    { "G"
18540 2c 20 20 20 31 30 30 30 30 30 30 30 30 30 20 7d  ,   1000000000 }
18550 2c 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69 3b 0a  ,.  };.  int i;.
18560 20 20 69 6e 74 20 69 73 4e 65 67 20 3d 20 30 3b    int isNeg = 0;
18570 0a 20 20 69 66 28 20 7a 41 72 67 5b 30 5d 3d 3d  .  if( zArg[0]==
18580 27 2d 27 20 29 7b 0a 20 20 20 20 69 73 4e 65 67  '-' ){.    isNeg
18590 20 3d 20 31 3b 0a 20 20 20 20 7a 41 72 67 2b 2b   = 1;.    zArg++
185a0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 41  ;.  }else if( zA
185b0 72 67 5b 30 5d 3d 3d 27 2b 27 20 29 7b 0a 20 20  rg[0]=='+' ){.  
185c0 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 7d 0a 20 20    zArg++;.  }.  
185d0 69 66 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 30 27  if( zArg[0]=='0'
185e0 20 26 26 20 7a 41 72 67 5b 31 5d 3d 3d 27 78 27   && zArg[1]=='x'
185f0 20 29 7b 0a 20 20 20 20 69 6e 74 20 78 3b 0a 20   ){.    int x;. 
18600 20 20 20 7a 41 72 67 20 2b 3d 20 32 3b 0a 20 20     zArg += 2;.  
18610 20 20 77 68 69 6c 65 28 20 28 78 20 3d 20 68 65    while( (x = he
18620 78 44 69 67 69 74 56 61 6c 75 65 28 7a 41 72 67  xDigitValue(zArg
18630 5b 30 5d 29 29 3e 3d 30 20 29 7b 0a 20 20 20 20  [0]))>=0 ){.    
18640 20 20 76 20 3d 20 28 76 3c 3c 34 29 20 2b 20 78    v = (v<<4) + x
18650 3b 0a 20 20 20 20 20 20 7a 41 72 67 2b 2b 3b 0a  ;.      zArg++;.
18660 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
18670 20 20 20 77 68 69 6c 65 28 20 49 73 44 69 67 69     while( IsDigi
18680 74 28 7a 41 72 67 5b 30 5d 29 20 29 7b 0a 20 20  t(zArg[0]) ){.  
18690 20 20 20 20 76 20 3d 20 76 2a 31 30 20 2b 20 7a      v = v*10 + z
186a0 41 72 67 5b 30 5d 20 2d 20 27 30 27 3b 0a 20 20  Arg[0] - '0';.  
186b0 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 20 20      zArg++;.    
186c0 7d 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b  }.  }.  for(i=0;
186d0 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61 4d 75   i<ArraySize(aMu
186e0 6c 74 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  lt); i++){.    i
186f0 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63  f( sqlite3_stric
18700 6d 70 28 61 4d 75 6c 74 5b 69 5d 2e 7a 53 75 66  mp(aMult[i].zSuf
18710 66 69 78 2c 20 7a 41 72 67 29 3d 3d 30 20 29 7b  fix, zArg)==0 ){
18720 0a 20 20 20 20 20 20 76 20 2a 3d 20 61 4d 75 6c  .      v *= aMul
18730 74 5b 69 5d 2e 69 4d 75 6c 74 3b 0a 20 20 20 20  t[i].iMult;.    
18740 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
18750 20 7d 0a 20 20 72 65 74 75 72 6e 20 69 73 4e 65   }.  return isNe
18760 67 3f 20 2d 76 20 3a 20 76 3b 0a 7d 0a 0a 2f 2a  g? -v : v;.}../*
18770 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 7a 41  .** Interpret zA
18780 72 67 20 61 73 20 65 69 74 68 65 72 20 61 6e 20  rg as either an 
18790 69 6e 74 65 67 65 72 20 6f 72 20 61 20 62 6f 6f  integer or a boo
187a0 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 52 65 74  lean value.  Ret
187b0 75 72 6e 20 31 20 6f 72 20 30 0a 2a 2a 20 66 6f  urn 1 or 0.** fo
187c0 72 20 54 52 55 45 20 61 6e 64 20 46 41 4c 53 45  r TRUE and FALSE
187d0 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 69 6e  .  Return the in
187e0 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61  teger value if a
187f0 70 70 72 6f 70 72 69 61 74 65 2e 0a 2a 2f 0a 73  ppropriate..*/.s
18800 74 61 74 69 63 20 69 6e 74 20 62 6f 6f 6c 65 61  tatic int boolea
18810 6e 56 61 6c 75 65 28 63 6f 6e 73 74 20 63 68 61  nValue(const cha
18820 72 20 2a 7a 41 72 67 29 7b 0a 20 20 69 6e 74 20  r *zArg){.  int 
18830 69 3b 0a 20 20 69 66 28 20 7a 41 72 67 5b 30 5d  i;.  if( zArg[0]
18840 3d 3d 27 30 27 20 26 26 20 7a 41 72 67 5b 31 5d  =='0' && zArg[1]
18850 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 66 6f 72  =='x' ){.    for
18860 28 69 3d 32 3b 20 68 65 78 44 69 67 69 74 56 61  (i=2; hexDigitVa
18870 6c 75 65 28 7a 41 72 67 5b 69 5d 29 3e 3d 30 3b  lue(zArg[i])>=0;
18880 20 69 2b 2b 29 7b 7d 0a 20 20 7d 65 6c 73 65 7b   i++){}.  }else{
18890 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 41  .    for(i=0; zA
188a0 72 67 5b 69 5d 3e 3d 27 30 27 20 26 26 20 7a 41  rg[i]>='0' && zA
188b0 72 67 5b 69 5d 3c 3d 27 39 27 3b 20 69 2b 2b 29  rg[i]<='9'; i++)
188c0 7b 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 3e 30  {}.  }.  if( i>0
188d0 20 26 26 20 7a 41 72 67 5b 69 5d 3d 3d 30 20 29   && zArg[i]==0 )
188e0 20 72 65 74 75 72 6e 20 28 69 6e 74 29 28 69 6e   return (int)(in
188f0 74 65 67 65 72 56 61 6c 75 65 28 7a 41 72 67 29  tegerValue(zArg)
18900 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a   & 0xffffffff);.
18910 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
18920 72 69 63 6d 70 28 7a 41 72 67 2c 20 22 6f 6e 22  ricmp(zArg, "on"
18930 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f  )==0 || sqlite3_
18940 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 22 79 65  stricmp(zArg,"ye
18950 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65  s")==0 ){.    re
18960 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 66  turn 1;.  }.  if
18970 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  ( sqlite3_stricm
18980 70 28 7a 41 72 67 2c 20 22 6f 66 66 22 29 3d 3d  p(zArg, "off")==
18990 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74 72  0 || sqlite3_str
189a0 69 63 6d 70 28 7a 41 72 67 2c 22 6e 6f 22 29 3d  icmp(zArg,"no")=
189b0 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
189c0 20 30 3b 0a 20 20 7d 0a 20 20 75 74 66 38 5f 70   0;.  }.  utf8_p
189d0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
189e0 52 52 4f 52 3a 20 4e 6f 74 20 61 20 62 6f 6f 6c  RROR: Not a bool
189f0 65 61 6e 20 76 61 6c 75 65 3a 20 5c 22 25 73 5c  ean value: \"%s\
18a00 22 2e 20 41 73 73 75 6d 69 6e 67 20 5c 22 6e 6f  ". Assuming \"no
18a10 5c 22 2e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  \".\n",.        
18a20 20 20 7a 41 72 67 29 3b 0a 20 20 72 65 74 75 72    zArg);.  retur
18a30 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65  n 0;.}../*.** Se
18a40 74 20 6f 72 20 63 6c 65 61 72 20 61 20 73 68 65  t or clear a she
18a50 6c 6c 20 66 6c 61 67 20 61 63 63 6f 72 64 69 6e  ll flag accordin
18a60 67 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76  g to a boolean v
18a70 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
18a80 76 6f 69 64 20 73 65 74 4f 72 43 6c 65 61 72 46  void setOrClearF
18a90 6c 61 67 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  lag(ShellState *
18aa0 70 2c 20 75 6e 73 69 67 6e 65 64 20 6d 46 6c 61  p, unsigned mFla
18ab0 67 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  g, const char *z
18ac0 41 72 67 29 7b 0a 20 20 69 66 28 20 62 6f 6f 6c  Arg){.  if( bool
18ad0 65 61 6e 56 61 6c 75 65 28 7a 41 72 67 29 20 29  eanValue(zArg) )
18ae0 7b 0a 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c  {.    ShellSetFl
18af0 61 67 28 70 2c 20 6d 46 6c 61 67 29 3b 0a 20 20  ag(p, mFlag);.  
18b00 7d 65 6c 73 65 7b 0a 20 20 20 20 53 68 65 6c 6c  }else{.    Shell
18b10 43 6c 65 61 72 46 6c 61 67 28 70 2c 20 6d 46 6c  ClearFlag(p, mFl
18b20 61 67 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ag);.  }.}../*.*
18b30 2a 20 43 6c 6f 73 65 20 61 6e 20 6f 75 74 70 75  * Close an outpu
18b40 74 20 66 69 6c 65 2c 20 61 73 73 75 6d 69 6e 67  t file, assuming
18b50 20 69 74 20 69 73 20 6e 6f 74 20 73 74 64 65 72   it is not stder
18b60 72 20 6f 72 20 73 74 64 6f 75 74 0a 2a 2f 0a 73  r or stdout.*/.s
18b70 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75  tatic void outpu
18b80 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28 46 49 4c  t_file_close(FIL
18b90 45 20 2a 66 29 7b 0a 20 20 69 66 28 20 66 20 26  E *f){.  if( f &
18ba0 26 20 66 21 3d 73 74 64 6f 75 74 20 26 26 20 66  & f!=stdout && f
18bb0 21 3d 73 74 64 65 72 72 20 29 20 66 63 6c 6f 73  !=stderr ) fclos
18bc0 65 28 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  e(f);.}../*.** T
18bd0 72 79 20 74 6f 20 6f 70 65 6e 20 61 6e 20 6f 75  ry to open an ou
18be0 74 70 75 74 20 66 69 6c 65 2e 20 20 20 54 68 65  tput file.   The
18bf0 20 6e 61 6d 65 73 20 22 73 74 64 6f 75 74 22 20   names "stdout" 
18c00 61 6e 64 20 22 73 74 64 65 72 72 22 20 61 72 65  and "stderr" are
18c10 0a 2a 2a 20 72 65 63 6f 67 6e 69 7a 65 64 20 61  .** recognized a
18c20 6e 64 20 64 6f 20 74 68 65 20 72 69 67 68 74 20  nd do the right 
18c30 74 68 69 6e 67 2e 20 20 4e 55 4c 4c 20 69 73 20  thing.  NULL is 
18c40 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
18c50 6f 75 74 70 75 74 0a 2a 2a 20 66 69 6c 65 6e 61  output.** filena
18c60 6d 65 20 69 73 20 22 6f 66 66 22 2e 0a 2a 2f 0a  me is "off"..*/.
18c70 73 74 61 74 69 63 20 46 49 4c 45 20 2a 6f 75 74  static FILE *out
18c80 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 63 6f  put_file_open(co
18c90 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 29  nst char *zFile)
18ca0 7b 0a 20 20 46 49 4c 45 20 2a 66 3b 0a 20 20 69  {.  FILE *f;.  i
18cb0 66 28 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c  f( strcmp(zFile,
18cc0 22 73 74 64 6f 75 74 22 29 3d 3d 30 20 29 7b 0a  "stdout")==0 ){.
18cd0 20 20 20 20 66 20 3d 20 73 74 64 6f 75 74 3b 0a      f = stdout;.
18ce0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
18cf0 6d 70 28 7a 46 69 6c 65 2c 20 22 73 74 64 65 72  mp(zFile, "stder
18d00 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66 20  r")==0 ){.    f 
18d10 3d 20 73 74 64 65 72 72 3b 0a 20 20 7d 65 6c 73  = stderr;.  }els
18d20 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 46 69  e if( strcmp(zFi
18d30 6c 65 2c 20 22 6f 66 66 22 29 3d 3d 30 20 29 7b  le, "off")==0 ){
18d40 0a 20 20 20 20 66 20 3d 20 30 3b 0a 20 20 7d 65  .    f = 0;.  }e
18d50 6c 73 65 7b 0a 20 20 20 20 66 20 3d 20 66 6f 70  lse{.    f = fop
18d60 65 6e 28 7a 46 69 6c 65 2c 20 22 77 62 22 29 3b  en(zFile, "wb");
18d70 0a 20 20 20 20 69 66 28 20 66 3d 3d 30 20 29 7b  .    if( f==0 ){
18d80 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
18d90 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
18da0 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c  r: cannot open \
18db0 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65 29  "%s\"\n", zFile)
18dc0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
18dd0 74 75 72 6e 20 66 3b 0a 7d 0a 0a 23 69 66 20 21  turn f;.}..#if !
18de0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55  defined(SQLITE_U
18df0 4e 54 45 53 54 41 42 4c 45 29 0a 23 69 66 20 21  NTESTABLE).#if !
18e00 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
18e10 4d 49 54 5f 54 52 41 43 45 29 20 26 26 20 21 64  MIT_TRACE) && !d
18e20 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
18e30 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
18e40 54 29 0a 2f 2a 0a 2a 2a 20 41 20 72 6f 75 74 69  T)./*.** A routi
18e50 6e 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  ne for handling 
18e60 6f 75 74 70 75 74 20 66 72 6f 6d 20 73 71 6c 69  output from sqli
18e70 74 65 33 5f 74 72 61 63 65 28 29 2e 0a 2a 2f 0a  te3_trace()..*/.
18e80 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 5f 74  static int sql_t
18e90 72 61 63 65 5f 63 61 6c 6c 62 61 63 6b 28 0a 20  race_callback(. 
18ea0 20 75 6e 73 69 67 6e 65 64 20 6d 54 79 70 65 2c   unsigned mType,
18eb0 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 2c 0a 20  .  void *pArg,. 
18ec0 20 76 6f 69 64 20 2a 70 50 2c 0a 20 20 76 6f 69   void *pP,.  voi
18ed0 64 20 2a 70 58 0a 29 7b 0a 20 20 46 49 4c 45 20  d *pX.){.  FILE 
18ee0 2a 66 20 3d 20 28 46 49 4c 45 2a 29 70 41 72 67  *f = (FILE*)pArg
18ef0 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ;.  UNUSED_PARAM
18f00 45 54 45 52 28 6d 54 79 70 65 29 3b 0a 20 20 55  ETER(mType);.  U
18f10 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
18f20 70 50 29 3b 0a 20 20 69 66 28 20 66 20 29 7b 0a  pP);.  if( f ){.
18f30 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
18f40 7a 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  z = (const char*
18f50 29 70 58 3b 0a 20 20 20 20 69 6e 74 20 69 20 3d  )pX;.    int i =
18f60 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 29 3b   (int)strlen(z);
18f70 0a 20 20 20 20 77 68 69 6c 65 28 20 69 3e 30 20  .    while( i>0 
18f80 26 26 20 7a 5b 69 2d 31 5d 3d 3d 27 3b 27 20 29  && z[i-1]==';' )
18f90 7b 20 69 2d 2d 3b 20 7d 0a 20 20 20 20 75 74 66  { i--; }.    utf
18fa0 38 5f 70 72 69 6e 74 66 28 66 2c 20 22 25 2e 2a  8_printf(f, "%.*
18fb0 73 3b 5c 6e 22 2c 20 69 2c 20 7a 29 3b 0a 20 20  s;\n", i, z);.  
18fc0 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
18fd0 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f  #endif.#endif../
18fe0 2a 0a 2a 2a 20 41 20 6e 6f 2d 6f 70 20 72 6f 75  *.** A no-op rou
18ff0 74 69 6e 65 20 74 68 61 74 20 72 75 6e 73 20 77  tine that runs w
19000 69 74 68 20 74 68 65 20 22 2e 62 72 65 61 6b 70  ith the ".breakp
19010 6f 69 6e 74 22 20 64 6f 63 2d 63 6f 6d 6d 61 6e  oint" doc-comman
19020 64 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 61  d.  This is.** a
19030 20 75 73 65 66 75 6c 20 73 70 6f 74 20 74 6f 20   useful spot to 
19040 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62  set a debugger b
19050 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 73 74  reakpoint..*/.st
19060 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 62  atic void test_b
19070 72 65 61 6b 70 6f 69 6e 74 28 76 6f 69 64 29 7b  reakpoint(void){
19080 0a 20 20 73 74 61 74 69 63 20 69 6e 74 20 6e 43  .  static int nC
19090 61 6c 6c 20 3d 20 30 3b 0a 20 20 6e 43 61 6c 6c  all = 0;.  nCall
190a0 2b 2b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  ++;.}../*.** An 
190b0 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f 20 72  object used to r
190c0 65 61 64 20 61 20 43 53 56 20 61 6e 64 20 6f 74  ead a CSV and ot
190d0 68 65 72 20 66 69 6c 65 73 20 66 6f 72 20 69 6d  her files for im
190e0 70 6f 72 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  port..*/.typedef
190f0 20 73 74 72 75 63 74 20 49 6d 70 6f 72 74 43 74   struct ImportCt
19100 78 20 49 6d 70 6f 72 74 43 74 78 3b 0a 73 74 72  x ImportCtx;.str
19110 75 63 74 20 49 6d 70 6f 72 74 43 74 78 20 7b 0a  uct ImportCtx {.
19120 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
19130 69 6c 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ile;  /* Name of
19140 20 74 68 65 20 69 6e 70 75 74 20 66 69 6c 65 20   the input file 
19150 2a 2f 0a 20 20 46 49 4c 45 20 2a 69 6e 3b 20 20  */.  FILE *in;  
19160 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 61 64           /* Read
19170 20 74 68 65 20 43 53 56 20 74 65 78 74 20 66 72   the CSV text fr
19180 6f 6d 20 74 68 69 73 20 69 6e 70 75 74 20 73 74  om this input st
19190 72 65 61 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ream */.  char *
191a0 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  z;            /*
191b0 20 41 63 63 75 6d 75 6c 61 74 65 64 20 74 65 78   Accumulated tex
191c0 74 20 66 6f 72 20 61 20 66 69 65 6c 64 20 2a 2f  t for a field */
191d0 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
191e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
191f0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 7a 20 2a   of bytes in z *
19200 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20  /.  int nAlloc; 
19210 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
19220 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 7a   allocated for z
19230 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 69 6e  [] */.  int nLin
19240 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  e;          /* C
19250 75 72 72 65 6e 74 20 6c 69 6e 65 20 6e 75 6d 62  urrent line numb
19260 65 72 20 2a 2f 0a 20 20 69 6e 74 20 62 4e 6f 74  er */.  int bNot
19270 46 69 72 73 74 3b 20 20 20 20 20 20 2f 2a 20 54  First;      /* T
19280 72 75 65 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f  rue if one or mo
19290 72 65 20 62 79 74 65 73 20 61 6c 72 65 61 64 79  re bytes already
192a0 20 72 65 61 64 20 2a 2f 0a 20 20 69 6e 74 20 63   read */.  int c
192b0 54 65 72 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  Term;          /
192c0 2a 20 43 68 61 72 61 63 74 65 72 20 74 68 61 74  * Character that
192d0 20 74 65 72 6d 69 6e 61 74 65 64 20 74 68 65 20   terminated the 
192e0 6d 6f 73 74 20 72 65 63 65 6e 74 20 66 69 65 6c  most recent fiel
192f0 64 20 2a 2f 0a 20 20 69 6e 74 20 63 43 6f 6c 53  d */.  int cColS
19300 65 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ep;        /* Th
19310 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74  e column separat
19320 6f 72 20 63 68 61 72 61 63 74 65 72 2e 20 20 28  or character.  (
19330 55 73 75 61 6c 6c 79 20 22 2c 22 29 20 2a 2f 0a  Usually ",") */.
19340 20 20 69 6e 74 20 63 52 6f 77 53 65 70 3b 20 20    int cRowSep;  
19350 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77        /* The row
19360 20 73 65 70 61 72 61 74 6f 72 20 63 68 61 72 61   separator chara
19370 63 74 65 72 2e 20 20 28 55 73 75 61 6c 6c 79 20  cter.  (Usually 
19380 22 5c 6e 22 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  "\n") */.};../* 
19390 41 70 70 65 6e 64 20 61 20 73 69 6e 67 6c 65 20  Append a single 
193a0 62 79 74 65 20 74 6f 20 7a 5b 5d 20 2a 2f 0a 73  byte to z[] */.s
193b0 74 61 74 69 63 20 76 6f 69 64 20 69 6d 70 6f 72  tatic void impor
193c0 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 49 6d  t_append_char(Im
193d0 70 6f 72 74 43 74 78 20 2a 70 2c 20 69 6e 74 20  portCtx *p, int 
193e0 63 29 7b 0a 20 20 69 66 28 20 70 2d 3e 6e 2b 31  c){.  if( p->n+1
193f0 3e 3d 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20  >=p->nAlloc ){. 
19400 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2b 3d 20     p->nAlloc += 
19410 70 2d 3e 6e 41 6c 6c 6f 63 20 2b 20 31 30 30 3b  p->nAlloc + 100;
19420 0a 20 20 20 20 70 2d 3e 7a 20 3d 20 73 71 6c 69  .    p->z = sqli
19430 74 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 70 2d  te3_realloc64(p-
19440 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a  >z, p->nAlloc);.
19450 20 20 20 20 69 66 28 20 70 2d 3e 7a 3d 3d 30 20      if( p->z==0 
19460 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
19470 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74  ntf(stderr, "out
19480 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a   of memory\n");.
19490 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20        exit(1);. 
194a0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 2d 3e 7a 5b     }.  }.  p->z[
194b0 70 2d 3e 6e 2b 2b 5d 20 3d 20 28 63 68 61 72 29  p->n++] = (char)
194c0 63 3b 0a 7d 0a 0a 2f 2a 20 52 65 61 64 20 61 20  c;.}../* Read a 
194d0 73 69 6e 67 6c 65 20 66 69 65 6c 64 20 6f 66 20  single field of 
194e0 43 53 56 20 74 65 78 74 2e 20 20 43 6f 6d 70 61  CSV text.  Compa
194f0 74 69 62 6c 65 20 77 69 74 68 20 72 66 63 34 31  tible with rfc41
19500 38 30 20 61 6e 64 20 65 78 74 65 6e 64 65 64 0a  80 and extended.
19510 2a 2a 20 77 69 74 68 20 74 68 65 20 6f 70 74 69  ** with the opti
19520 6f 6e 20 6f 66 20 68 61 76 69 6e 67 20 61 20 73  on of having a s
19530 65 70 61 72 61 74 6f 72 20 6f 74 68 65 72 20 74  eparator other t
19540 68 61 6e 20 22 2c 22 2e 0a 2a 2a 0a 2a 2a 20 20  han ","..**.**  
19550 20 2b 20 20 49 6e 70 75 74 20 63 6f 6d 65 73 20   +  Input comes 
19560 66 72 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a 2a 20 20  from p->in..**  
19570 20 2b 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74   +  Store result
19580 73 20 69 6e 20 70 2d 3e 7a 20 6f 66 20 6c 65 6e  s in p->z of len
19590 67 74 68 20 70 2d 3e 6e 2e 20 20 53 70 61 63 65  gth p->n.  Space
195a0 20 74 6f 20 68 6f 6c 64 20 70 2d 3e 7a 20 63 6f   to hold p->z co
195b0 6d 65 73 0a 2a 2a 20 20 20 20 20 20 66 72 6f 6d  mes.**      from
195c0 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36   sqlite3_malloc6
195d0 34 28 29 2e 0a 2a 2a 20 20 20 2b 20 20 55 73 65  4()..**   +  Use
195e0 20 70 2d 3e 63 53 65 70 20 61 73 20 74 68 65 20   p->cSep as the 
195f0 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72  column separator
19600 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  .  The default i
19610 73 20 22 2c 22 2e 0a 2a 2a 20 20 20 2b 20 20 55  s ","..**   +  U
19620 73 65 20 70 2d 3e 72 53 65 70 20 61 73 20 74 68  se p->rSep as th
19630 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 2e  e row separator.
19640 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 73    The default is
19650 20 22 5c 6e 22 2e 0a 2a 2a 20 20 20 2b 20 20 4b   "\n"..**   +  K
19660 65 65 70 20 74 72 61 63 6b 20 6f 66 20 74 68 65  eep track of the
19670 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 69 6e 20   line number in 
19680 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a 2a 20 20 20 2b  p->nLine..**   +
19690 20 20 53 74 6f 72 65 20 74 68 65 20 63 68 61 72    Store the char
196a0 61 63 74 65 72 20 74 68 61 74 20 74 65 72 6d 69  acter that termi
196b0 6e 61 74 65 73 20 74 68 65 20 66 69 65 6c 64 20  nates the field 
196c0 69 6e 20 70 2d 3e 63 54 65 72 6d 2e 20 20 53 74  in p->cTerm.  St
196d0 6f 72 65 0a 2a 2a 20 20 20 20 20 20 45 4f 46 20  ore.**      EOF 
196e0 6f 6e 20 65 6e 64 2d 6f 66 2d 66 69 6c 65 2e 0a  on end-of-file..
196f0 2a 2a 20 20 20 2b 20 20 52 65 70 6f 72 74 20 73  **   +  Report s
19700 79 6e 74 61 78 20 65 72 72 6f 72 73 20 6f 6e 20  yntax errors on 
19710 73 74 64 65 72 72 0a 2a 2f 0a 73 74 61 74 69 63  stderr.*/.static
19720 20 63 68 61 72 20 2a 53 51 4c 49 54 45 5f 43 44   char *SQLITE_CD
19730 45 43 4c 20 63 73 76 5f 72 65 61 64 5f 6f 6e 65  ECL csv_read_one
19740 5f 66 69 65 6c 64 28 49 6d 70 6f 72 74 43 74 78  _field(ImportCtx
19750 20 2a 70 29 7b 0a 20 20 69 6e 74 20 63 3b 0a 20   *p){.  int c;. 
19760 20 69 6e 74 20 63 53 65 70 20 3d 20 70 2d 3e 63   int cSep = p->c
19770 43 6f 6c 53 65 70 3b 0a 20 20 69 6e 74 20 72 53  ColSep;.  int rS
19780 65 70 20 3d 20 70 2d 3e 63 52 6f 77 53 65 70 3b  ep = p->cRowSep;
19790 0a 20 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20 63  .  p->n = 0;.  c
197a0 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b   = fgetc(p->in);
197b0 0a 20 20 69 66 28 20 63 3d 3d 45 4f 46 20 7c 7c  .  if( c==EOF ||
197c0 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74 20 29   seenInterrupt )
197d0 7b 0a 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d  {.    p->cTerm =
197e0 20 45 4f 46 3b 0a 20 20 20 20 72 65 74 75 72 6e   EOF;.    return
197f0 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 3d   0;.  }.  if( c=
19800 3d 27 22 27 20 29 7b 0a 20 20 20 20 69 6e 74 20  ='"' ){.    int 
19810 70 63 2c 20 70 70 63 3b 0a 20 20 20 20 69 6e 74  pc, ppc;.    int
19820 20 73 74 61 72 74 4c 69 6e 65 20 3d 20 70 2d 3e   startLine = p->
19830 6e 4c 69 6e 65 3b 0a 20 20 20 20 69 6e 74 20 63  nLine;.    int c
19840 51 75 6f 74 65 20 3d 20 63 3b 0a 20 20 20 20 70  Quote = c;.    p
19850 63 20 3d 20 70 70 63 20 3d 20 30 3b 0a 20 20 20  c = ppc = 0;.   
19860 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20   while( 1 ){.   
19870 20 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d 3e     c = fgetc(p->
19880 69 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63  in);.      if( c
19890 3d 3d 72 53 65 70 20 29 20 70 2d 3e 6e 4c 69 6e  ==rSep ) p->nLin
198a0 65 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 63  e++;.      if( c
198b0 3d 3d 63 51 75 6f 74 65 20 29 7b 0a 20 20 20 20  ==cQuote ){.    
198c0 20 20 20 20 69 66 28 20 70 63 3d 3d 63 51 75 6f      if( pc==cQuo
198d0 74 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  te ){.          
198e0 70 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  pc = 0;.        
198f0 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
19900 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
19910 20 20 20 20 69 66 28 20 28 63 3d 3d 63 53 65 70      if( (c==cSep
19920 20 26 26 20 70 63 3d 3d 63 51 75 6f 74 65 29 0a   && pc==cQuote).
19930 20 20 20 20 20 20 20 7c 7c 20 28 63 3d 3d 72 53         || (c==rS
19940 65 70 20 26 26 20 70 63 3d 3d 63 51 75 6f 74 65  ep && pc==cQuote
19950 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 63 3d 3d  ).       || (c==
19960 72 53 65 70 20 26 26 20 70 63 3d 3d 27 5c 72 27  rSep && pc=='\r'
19970 20 26 26 20 70 70 63 3d 3d 63 51 75 6f 74 65 29   && ppc==cQuote)
19980 0a 20 20 20 20 20 20 20 7c 7c 20 28 63 3d 3d 45  .       || (c==E
19990 4f 46 20 26 26 20 70 63 3d 3d 63 51 75 6f 74 65  OF && pc==cQuote
199a0 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  ).      ){.     
199b0 20 20 20 64 6f 7b 20 70 2d 3e 6e 2d 2d 3b 20 7d     do{ p->n--; }
199c0 77 68 69 6c 65 28 20 70 2d 3e 7a 5b 70 2d 3e 6e  while( p->z[p->n
199d0 5d 21 3d 63 51 75 6f 74 65 20 29 3b 0a 20 20 20  ]!=cQuote );.   
199e0 20 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20       p->cTerm = 
199f0 63 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  c;.        break
19a00 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
19a10 69 66 28 20 70 63 3d 3d 63 51 75 6f 74 65 20 26  if( pc==cQuote &
19a20 26 20 63 21 3d 27 5c 72 27 20 29 7b 0a 20 20 20  & c!='\r' ){.   
19a30 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
19a40 28 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a  (stderr, "%s:%d:
19a50 20 75 6e 65 73 63 61 70 65 64 20 25 63 20 63 68   unescaped %c ch
19a60 61 72 61 63 74 65 72 5c 6e 22 2c 0a 20 20 20 20  aracter\n",.    
19a70 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a              p->z
19a80 46 69 6c 65 2c 20 70 2d 3e 6e 4c 69 6e 65 2c 20  File, p->nLine, 
19a90 63 51 75 6f 74 65 29 3b 0a 20 20 20 20 20 20 7d  cQuote);.      }
19aa0 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 45 4f  .      if( c==EO
19ab0 46 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  F ){.        utf
19ac0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
19ad0 20 22 25 73 3a 25 64 3a 20 75 6e 74 65 72 6d 69   "%s:%d: untermi
19ae0 6e 61 74 65 64 20 25 63 2d 71 75 6f 74 65 64 20  nated %c-quoted 
19af0 66 69 65 6c 64 5c 6e 22 2c 0a 20 20 20 20 20 20  field\n",.      
19b00 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a 46 69            p->zFi
19b10 6c 65 2c 20 73 74 61 72 74 4c 69 6e 65 2c 20 63  le, startLine, c
19b20 51 75 6f 74 65 29 3b 0a 20 20 20 20 20 20 20 20  Quote);.        
19b30 70 2d 3e 63 54 65 72 6d 20 3d 20 63 3b 0a 20 20  p->cTerm = c;.  
19b40 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
19b50 20 20 20 7d 0a 20 20 20 20 20 20 69 6d 70 6f 72     }.      impor
19b60 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70 2c  t_append_char(p,
19b70 20 63 29 3b 0a 20 20 20 20 20 20 70 70 63 20 3d   c);.      ppc =
19b80 20 70 63 3b 0a 20 20 20 20 20 20 70 63 20 3d 20   pc;.      pc = 
19b90 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  c;.    }.  }else
19ba0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
19bb0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 66 69   is the first fi
19bc0 65 6c 64 20 62 65 69 6e 67 20 70 61 72 73 65 64  eld being parsed
19bd0 20 61 6e 64 20 69 74 20 62 65 67 69 6e 73 20 77   and it begins w
19be0 69 74 68 20 74 68 65 0a 20 20 20 20 2a 2a 20 55  ith the.    ** U
19bf0 54 46 2d 38 20 42 4f 4d 20 20 28 30 78 45 46 20  TF-8 BOM  (0xEF 
19c00 42 42 20 42 46 29 20 74 68 65 6e 20 73 6b 69 70  BB BF) then skip
19c10 20 74 68 65 20 42 4f 4d 20 2a 2f 0a 20 20 20 20   the BOM */.    
19c20 69 66 28 20 28 63 26 30 78 66 66 29 3d 3d 30 78  if( (c&0xff)==0x
19c30 65 66 20 26 26 20 70 2d 3e 62 4e 6f 74 46 69 72  ef && p->bNotFir
19c40 73 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  st==0 ){.      i
19c50 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61  mport_append_cha
19c60 72 28 70 2c 20 63 29 3b 0a 20 20 20 20 20 20 63  r(p, c);.      c
19c70 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b   = fgetc(p->in);
19c80 0a 20 20 20 20 20 20 69 66 28 20 28 63 26 30 78  .      if( (c&0x
19c90 66 66 29 3d 3d 30 78 62 62 20 29 7b 0a 20 20 20  ff)==0xbb ){.   
19ca0 20 20 20 20 20 69 6d 70 6f 72 74 5f 61 70 70 65       import_appe
19cb0 6e 64 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a 20  nd_char(p, c);. 
19cc0 20 20 20 20 20 20 20 63 20 3d 20 66 67 65 74 63         c = fgetc
19cd0 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20 20 20 20  (p->in);.       
19ce0 20 69 66 28 20 28 63 26 30 78 66 66 29 3d 3d 30   if( (c&0xff)==0
19cf0 78 62 66 20 29 7b 0a 20 20 20 20 20 20 20 20 20  xbf ){.         
19d00 20 70 2d 3e 62 4e 6f 74 46 69 72 73 74 20 3d 20   p->bNotFirst = 
19d10 31 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  1;.          p->
19d20 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  n = 0;.         
19d30 20 72 65 74 75 72 6e 20 63 73 76 5f 72 65 61 64   return csv_read
19d40 5f 6f 6e 65 5f 66 69 65 6c 64 28 70 29 3b 0a 20  _one_field(p);. 
19d50 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
19d60 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65  .    }.    while
19d70 28 20 63 21 3d 45 4f 46 20 26 26 20 63 21 3d 63  ( c!=EOF && c!=c
19d80 53 65 70 20 26 26 20 63 21 3d 72 53 65 70 20 29  Sep && c!=rSep )
19d90 7b 0a 20 20 20 20 20 20 69 6d 70 6f 72 74 5f 61  {.      import_a
19da0 70 70 65 6e 64 5f 63 68 61 72 28 70 2c 20 63 29  ppend_char(p, c)
19db0 3b 0a 20 20 20 20 20 20 63 20 3d 20 66 67 65 74  ;.      c = fget
19dc0 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20 7d 0a  c(p->in);.    }.
19dd0 20 20 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20      if( c==rSep 
19de0 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 4c 69 6e  ){.      p->nLin
19df0 65 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 70  e++;.      if( p
19e00 2d 3e 6e 3e 30 20 26 26 20 70 2d 3e 7a 5b 70 2d  ->n>0 && p->z[p-
19e10 3e 6e 2d 31 5d 3d 3d 27 5c 72 27 20 29 20 70 2d  >n-1]=='\r' ) p-
19e20 3e 6e 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >n--;.    }.    
19e30 70 2d 3e 63 54 65 72 6d 20 3d 20 63 3b 0a 20 20  p->cTerm = c;.  
19e40 7d 0a 20 20 69 66 28 20 70 2d 3e 7a 20 29 20 70  }.  if( p->z ) p
19e50 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d 20 30 3b 0a 20  ->z[p->n] = 0;. 
19e60 20 70 2d 3e 62 4e 6f 74 46 69 72 73 74 20 3d 20   p->bNotFirst = 
19e70 31 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a  1;.  return p->z
19e80 3b 0a 7d 0a 0a 2f 2a 20 52 65 61 64 20 61 20 73  ;.}../* Read a s
19e90 69 6e 67 6c 65 20 66 69 65 6c 64 20 6f 66 20 41  ingle field of A
19ea0 53 43 49 49 20 64 65 6c 69 6d 69 74 65 64 20 74  SCII delimited t
19eb0 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 2b 20 20  ext..**.**   +  
19ec0 49 6e 70 75 74 20 63 6f 6d 65 73 20 66 72 6f 6d  Input comes from
19ed0 20 70 2d 3e 69 6e 2e 0a 2a 2a 20 20 20 2b 20 20   p->in..**   +  
19ee0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
19ef0 20 70 2d 3e 7a 20 6f 66 20 6c 65 6e 67 74 68 20   p->z of length 
19f00 70 2d 3e 6e 2e 20 20 53 70 61 63 65 20 74 6f 20  p->n.  Space to 
19f10 68 6f 6c 64 20 70 2d 3e 7a 20 63 6f 6d 65 73 0a  hold p->z comes.
19f20 2a 2a 20 20 20 20 20 20 66 72 6f 6d 20 73 71 6c  **      from sql
19f30 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 29 2e  ite3_malloc64().
19f40 0a 2a 2a 20 20 20 2b 20 20 55 73 65 20 70 2d 3e  .**   +  Use p->
19f50 63 53 65 70 20 61 73 20 74 68 65 20 63 6f 6c 75  cSep as the colu
19f60 6d 6e 20 73 65 70 61 72 61 74 6f 72 2e 20 20 54  mn separator.  T
19f70 68 65 20 64 65 66 61 75 6c 74 20 69 73 20 22 5c  he default is "\
19f80 78 31 46 22 2e 0a 2a 2a 20 20 20 2b 20 20 55 73  x1F"..**   +  Us
19f90 65 20 70 2d 3e 72 53 65 70 20 61 73 20 74 68 65  e p->rSep as the
19fa0 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20   row separator. 
19fb0 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 73 20   The default is 
19fc0 22 5c 78 31 45 22 2e 0a 2a 2a 20 20 20 2b 20 20  "\x1E"..**   +  
19fd0 4b 65 65 70 20 74 72 61 63 6b 20 6f 66 20 74 68  Keep track of th
19fe0 65 20 72 6f 77 20 6e 75 6d 62 65 72 20 69 6e 20  e row number in 
19ff0 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a 2a 20 20 20 2b  p->nLine..**   +
1a000 20 20 53 74 6f 72 65 20 74 68 65 20 63 68 61 72    Store the char
1a010 61 63 74 65 72 20 74 68 61 74 20 74 65 72 6d 69  acter that termi
1a020 6e 61 74 65 73 20 74 68 65 20 66 69 65 6c 64 20  nates the field 
1a030 69 6e 20 70 2d 3e 63 54 65 72 6d 2e 20 20 53 74  in p->cTerm.  St
1a040 6f 72 65 0a 2a 2a 20 20 20 20 20 20 45 4f 46 20  ore.**      EOF 
1a050 6f 6e 20 65 6e 64 2d 6f 66 2d 66 69 6c 65 2e 0a  on end-of-file..
1a060 2a 2a 20 20 20 2b 20 20 52 65 70 6f 72 74 20 73  **   +  Report s
1a070 79 6e 74 61 78 20 65 72 72 6f 72 73 20 6f 6e 20  yntax errors on 
1a080 73 74 64 65 72 72 0a 2a 2f 0a 73 74 61 74 69 63  stderr.*/.static
1a090 20 63 68 61 72 20 2a 53 51 4c 49 54 45 5f 43 44   char *SQLITE_CD
1a0a0 45 43 4c 20 61 73 63 69 69 5f 72 65 61 64 5f 6f  ECL ascii_read_o
1a0b0 6e 65 5f 66 69 65 6c 64 28 49 6d 70 6f 72 74 43  ne_field(ImportC
1a0c0 74 78 20 2a 70 29 7b 0a 20 20 69 6e 74 20 63 3b  tx *p){.  int c;
1a0d0 0a 20 20 69 6e 74 20 63 53 65 70 20 3d 20 70 2d  .  int cSep = p-
1a0e0 3e 63 43 6f 6c 53 65 70 3b 0a 20 20 69 6e 74 20  >cColSep;.  int 
1a0f0 72 53 65 70 20 3d 20 70 2d 3e 63 52 6f 77 53 65  rSep = p->cRowSe
1a100 70 3b 0a 20 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20  p;.  p->n = 0;. 
1a110 20 63 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e   c = fgetc(p->in
1a120 29 3b 0a 20 20 69 66 28 20 63 3d 3d 45 4f 46 20  );.  if( c==EOF 
1a130 7c 7c 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74  || seenInterrupt
1a140 20 29 7b 0a 20 20 20 20 70 2d 3e 63 54 65 72 6d   ){.    p->cTerm
1a150 20 3d 20 45 4f 46 3b 0a 20 20 20 20 72 65 74 75   = EOF;.    retu
1a160 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 77 68 69 6c  rn 0;.  }.  whil
1a170 65 28 20 63 21 3d 45 4f 46 20 26 26 20 63 21 3d  e( c!=EOF && c!=
1a180 63 53 65 70 20 26 26 20 63 21 3d 72 53 65 70 20  cSep && c!=rSep 
1a190 29 7b 0a 20 20 20 20 69 6d 70 6f 72 74 5f 61 70  ){.    import_ap
1a1a0 70 65 6e 64 5f 63 68 61 72 28 70 2c 20 63 29 3b  pend_char(p, c);
1a1b0 0a 20 20 20 20 63 20 3d 20 66 67 65 74 63 28 70  .    c = fgetc(p
1a1c0 2d 3e 69 6e 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ->in);.  }.  if(
1a1d0 20 63 3d 3d 72 53 65 70 20 29 7b 0a 20 20 20 20   c==rSep ){.    
1a1e0 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 7d 0a  p->nLine++;.  }.
1a1f0 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20 63 3b 0a    p->cTerm = c;.
1a200 20 20 69 66 28 20 70 2d 3e 7a 20 29 20 70 2d 3e    if( p->z ) p->
1a210 7a 5b 70 2d 3e 6e 5d 20 3d 20 30 3b 0a 20 20 72  z[p->n] = 0;.  r
1a220 65 74 75 72 6e 20 70 2d 3e 7a 3b 0a 7d 0a 0a 2f  eturn p->z;.}../
1a230 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 74 72 61 6e  *.** Try to tran
1a240 73 66 65 72 20 64 61 74 61 20 66 6f 72 20 74 61  sfer data for ta
1a250 62 6c 65 20 7a 54 61 62 6c 65 2e 20 20 49 66 20  ble zTable.  If 
1a260 61 6e 20 65 72 72 6f 72 20 69 73 20 73 65 65 6e  an error is seen
1a270 20 77 68 69 6c 65 0a 2a 2a 20 6d 6f 76 69 6e 67   while.** moving
1a280 20 66 6f 72 77 61 72 64 2c 20 74 72 79 20 74 6f   forward, try to
1a290 20 67 6f 20 62 61 63 6b 77 61 72 64 73 2e 20 20   go backwards.  
1a2a0 54 68 65 20 62 61 63 6b 77 61 72 64 73 20 6d 6f  The backwards mo
1a2b0 76 65 6d 65 6e 74 20 77 6f 6e 27 74 0a 2a 2a 20  vement won't.** 
1a2c0 77 6f 72 6b 20 66 6f 72 20 57 49 54 48 4f 55 54  work for WITHOUT
1a2d0 20 52 4f 57 49 44 20 74 61 62 6c 65 73 2e 0a 2a   ROWID tables..*
1a2e0 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 72  /.static void tr
1a2f0 79 54 6f 43 6c 6f 6e 65 44 61 74 61 28 0a 20 20  yToCloneData(.  
1a300 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a 20  ShellState *p,. 
1a310 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44 62 2c   sqlite3 *newDb,
1a320 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1a330 54 61 62 6c 65 0a 29 7b 0a 20 20 73 71 6c 69 74  Table.){.  sqlit
1a340 65 33 5f 73 74 6d 74 20 2a 70 51 75 65 72 79 20  e3_stmt *pQuery 
1a350 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  = 0;.  sqlite3_s
1a360 74 6d 74 20 2a 70 49 6e 73 65 72 74 20 3d 20 30  tmt *pInsert = 0
1a370 3b 0a 20 20 63 68 61 72 20 2a 7a 51 75 65 72 79  ;.  char *zQuery
1a380 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 49   = 0;.  char *zI
1a390 6e 73 65 72 74 20 3d 20 30 3b 0a 20 20 69 6e 74  nsert = 0;.  int
1a3a0 20 72 63 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 2c   rc;.  int i, j,
1a3b0 20 6e 3b 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65   n;.  int nTable
1a3c0 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a   = (int)strlen(z
1a3d0 54 61 62 6c 65 29 3b 0a 20 20 69 6e 74 20 6b 20  Table);.  int k 
1a3e0 3d 20 30 3b 0a 20 20 69 6e 74 20 63 6e 74 20 3d  = 0;.  int cnt =
1a3f0 20 30 3b 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20   0;.  const int 
1a400 73 70 69 6e 52 61 74 65 20 3d 20 31 30 30 30 30  spinRate = 10000
1a410 3b 0a 0a 20 20 7a 51 75 65 72 79 20 3d 20 73 71  ;..  zQuery = sq
1a420 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53  lite3_mprintf("S
1a430 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c 22 25  ELECT * FROM \"%
1a440 77 5c 22 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20  w\"", zTable);. 
1a450 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
1a460 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
1a470 7a 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75  zQuery, -1, &pQu
1a480 65 72 79 2c 20 30 29 3b 0a 20 20 69 66 28 20 72  ery, 0);.  if( r
1a490 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  c ){.    utf8_pr
1a4a0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1a4b0 72 6f 72 20 25 64 3a 20 25 73 20 6f 6e 20 5b 25  ror %d: %s on [%
1a4c0 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  s]\n",.         
1a4d0 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e     sqlite3_exten
1a4e0 64 65 64 5f 65 72 72 63 6f 64 65 28 70 2d 3e 64  ded_errcode(p->d
1a4f0 62 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  b), sqlite3_errm
1a500 73 67 28 70 2d 3e 64 62 29 2c 0a 20 20 20 20 20  sg(p->db),.     
1a510 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b 0a         zQuery);.
1a520 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 64 61 74      goto end_dat
1a530 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20 6e 20  a_xfer;.  }.  n 
1a540 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
1a550 5f 63 6f 75 6e 74 28 70 51 75 65 72 79 29 3b 0a  _count(pQuery);.
1a560 20 20 7a 49 6e 73 65 72 74 20 3d 20 73 71 6c 69    zInsert = sqli
1a570 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 32 30 30  te3_malloc64(200
1a580 20 2b 20 6e 54 61 62 6c 65 20 2b 20 6e 2a 33 29   + nTable + n*3)
1a590 3b 0a 20 20 69 66 28 20 7a 49 6e 73 65 72 74 3d  ;.  if( zInsert=
1a5a0 3d 30 20 29 7b 0a 20 20 20 20 72 61 77 5f 70 72  =0 ){.    raw_pr
1a5b0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f 75  intf(stderr, "ou
1a5c0 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b  t of memory\n");
1a5d0 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 64 61  .    goto end_da
1a5e0 74 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20 73  ta_xfer;.  }.  s
1a5f0 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
1a600 32 30 30 2b 6e 54 61 62 6c 65 2c 7a 49 6e 73 65  200+nTable,zInse
1a610 72 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  rt,.            
1a620 20 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 4f         "INSERT O
1a630 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20 5c 22  R IGNORE INTO \"
1a640 25 73 5c 22 20 56 41 4c 55 45 53 28 3f 22 2c 20  %s\" VALUES(?", 
1a650 7a 54 61 62 6c 65 29 3b 0a 20 20 69 20 3d 20 28  zTable);.  i = (
1a660 69 6e 74 29 73 74 72 6c 65 6e 28 7a 49 6e 73 65  int)strlen(zInse
1a670 72 74 29 3b 0a 20 20 66 6f 72 28 6a 3d 31 3b 20  rt);.  for(j=1; 
1a680 6a 3c 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 6d  j<n; j++){.    m
1a690 65 6d 63 70 79 28 7a 49 6e 73 65 72 74 2b 69 2c  emcpy(zInsert+i,
1a6a0 20 22 2c 3f 22 2c 20 32 29 3b 0a 20 20 20 20 69   ",?", 2);.    i
1a6b0 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 6d 65 6d   += 2;.  }.  mem
1a6c0 63 70 79 28 7a 49 6e 73 65 72 74 2b 69 2c 20 22  cpy(zInsert+i, "
1a6d0 29 3b 22 2c 20 33 29 3b 0a 20 20 72 63 20 3d 20  );", 3);.  rc = 
1a6e0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
1a6f0 76 32 28 6e 65 77 44 62 2c 20 7a 49 6e 73 65 72  v2(newDb, zInser
1a700 74 2c 20 2d 31 2c 20 26 70 49 6e 73 65 72 74 2c  t, -1, &pInsert,
1a710 20 30 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b   0);.  if( rc ){
1a720 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
1a730 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20  (stderr, "Error 
1a740 25 64 3a 20 25 73 20 6f 6e 20 5b 25 73 5d 5c 6e  %d: %s on [%s]\n
1a750 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ",.            s
1a760 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
1a770 65 72 72 63 6f 64 65 28 6e 65 77 44 62 29 2c 20  errcode(newDb), 
1a780 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 6e  sqlite3_errmsg(n
1a790 65 77 44 62 29 2c 0a 20 20 20 20 20 20 20 20 20  ewDb),.         
1a7a0 20 20 20 7a 51 75 65 72 79 29 3b 0a 20 20 20 20     zQuery);.    
1a7b0 67 6f 74 6f 20 65 6e 64 5f 64 61 74 61 5f 78 66  goto end_data_xf
1a7c0 65 72 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 6b 3d  er;.  }.  for(k=
1a7d0 30 3b 20 6b 3c 32 3b 20 6b 2b 2b 29 7b 0a 20 20  0; k<2; k++){.  
1a7e0 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73    while( (rc = s
1a7f0 71 6c 69 74 65 33 5f 73 74 65 70 28 70 51 75 65  qlite3_step(pQue
1a800 72 79 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57  ry))==SQLITE_ROW
1a810 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   ){.      for(i=
1a820 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<n; i++){.  
1a830 20 20 20 20 20 20 73 77 69 74 63 68 28 20 73 71        switch( sq
1a840 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
1a850 65 28 70 51 75 65 72 79 2c 20 69 29 20 29 7b 0a  e(pQuery, i) ){.
1a860 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
1a870 51 4c 49 54 45 5f 4e 55 4c 4c 3a 20 7b 0a 20 20  QLITE_NULL: {.  
1a880 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1a890 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 49 6e 73  3_bind_null(pIns
1a8a0 65 72 74 2c 20 69 2b 31 29 3b 0a 20 20 20 20 20  ert, i+1);.     
1a8b0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1a8c0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a8d0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
1a8e0 49 4e 54 45 47 45 52 3a 20 7b 0a 20 20 20 20 20  INTEGER: {.     
1a8f0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62         sqlite3_b
1a900 69 6e 64 5f 69 6e 74 36 34 28 70 49 6e 73 65 72  ind_int64(pInser
1a910 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65 33 5f  t, i+1, sqlite3_
1a920 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 70 51 75  column_int64(pQu
1a930 65 72 79 2c 69 29 29 3b 0a 20 20 20 20 20 20 20  ery,i));.       
1a940 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1a950 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1a960 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4c    case SQLITE_FL
1a970 4f 41 54 3a 20 7b 0a 20 20 20 20 20 20 20 20 20  OAT: {.         
1a980 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
1a990 64 6f 75 62 6c 65 28 70 49 6e 73 65 72 74 2c 20  double(pInsert, 
1a9a0 69 2b 31 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  i+1, sqlite3_col
1a9b0 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 51 75 65 72  umn_double(pQuer
1a9c0 79 2c 69 29 29 3b 0a 20 20 20 20 20 20 20 20 20  y,i));.         
1a9d0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1a9e0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1a9f0 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 58 54  case SQLITE_TEXT
1aa00 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  : {.            
1aa10 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
1aa20 74 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 2c 0a  t(pInsert, i+1,.
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f               (co
1aa50 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
1aa60 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51  3_column_text(pQ
1aa70 75 65 72 79 2c 69 29 2c 0a 20 20 20 20 20 20 20  uery,i),.       
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa90 20 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45        -1, SQLITE
1aaa0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
1aab0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1aac0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1aad0 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42     case SQLITE_B
1aae0 4c 4f 42 3a 20 7b 0a 20 20 20 20 20 20 20 20 20  LOB: {.         
1aaf0 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
1ab00 62 6c 6f 62 28 70 49 6e 73 65 72 74 2c 20 69 2b  blob(pInsert, i+
1ab10 31 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  1, sqlite3_colum
1ab20 6e 5f 62 6c 6f 62 28 70 51 75 65 72 79 2c 69 29  n_blob(pQuery,i)
1ab30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
1ab60 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
1ab70 65 73 28 70 51 75 65 72 79 2c 69 29 2c 0a 20 20  es(pQuery,i),.  
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
1abb0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
1abc0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1abd0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1abe0 20 7d 0a 20 20 20 20 20 20 7d 20 2f 2a 20 45 6e   }.      } /* En
1abf0 64 20 66 6f 72 20 2a 2f 0a 20 20 20 20 20 20 72  d for */.      r
1ac00 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70  c = sqlite3_step
1ac10 28 70 49 6e 73 65 72 74 29 3b 0a 20 20 20 20 20  (pInsert);.     
1ac20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1ac30 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45  OK && rc!=SQLITE
1ac40 5f 52 4f 57 20 26 26 20 72 63 21 3d 53 51 4c 49  _ROW && rc!=SQLI
1ac50 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20  TE_DONE ){.     
1ac60 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1ac70 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20 25 64  tderr, "Error %d
1ac80 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33  : %s\n", sqlite3
1ac90 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
1aca0 65 28 6e 65 77 44 62 29 2c 0a 20 20 20 20 20 20  e(newDb),.      
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
1acd0 28 6e 65 77 44 62 29 29 3b 0a 20 20 20 20 20 20  (newDb));.      
1ace0 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  }.      sqlite3_
1acf0 72 65 73 65 74 28 70 49 6e 73 65 72 74 29 3b 0a  reset(pInsert);.
1ad00 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
1ad10 20 20 20 69 66 28 20 28 63 6e 74 25 73 70 69 6e     if( (cnt%spin
1ad20 52 61 74 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Rate)==0 ){.    
1ad30 20 20 20 20 70 72 69 6e 74 66 28 22 25 63 5c 62      printf("%c\b
1ad40 22 2c 20 22 7c 2f 2d 5c 5c 22 5b 28 63 6e 74 2f  ", "|/-\\"[(cnt/
1ad50 73 70 69 6e 52 61 74 65 29 25 34 5d 29 3b 0a 20  spinRate)%4]);. 
1ad60 20 20 20 20 20 20 20 66 66 6c 75 73 68 28 73 74         fflush(st
1ad70 64 6f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  dout);.      }. 
1ad80 20 20 20 7d 20 2f 2a 20 45 6e 64 20 77 68 69 6c     } /* End whil
1ad90 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 3d  e */.    if( rc=
1ada0 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 62  =SQLITE_DONE ) b
1adb0 72 65 61 6b 3b 0a 20 20 20 20 73 71 6c 69 74 65  reak;.    sqlite
1adc0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 51 75 65 72  3_finalize(pQuer
1add0 79 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  y);.    sqlite3_
1ade0 66 72 65 65 28 7a 51 75 65 72 79 29 3b 0a 20 20  free(zQuery);.  
1adf0 20 20 7a 51 75 65 72 79 20 3d 20 73 71 6c 69 74    zQuery = sqlit
1ae00 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45  e3_mprintf("SELE
1ae10 43 54 20 2a 20 46 52 4f 4d 20 5c 22 25 77 5c 22  CT * FROM \"%w\"
1ae20 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
1ae30 44 45 53 43 3b 22 2c 0a 20 20 20 20 20 20 20 20  DESC;",.        
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 20 20 20 20 20 7a 54 61 62 6c 65 29 3b 0a 20 20       zTable);.  
1ae60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
1ae70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
1ae80 20 7a 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51   zQuery, -1, &pQ
1ae90 75 65 72 79 2c 20 30 29 3b 0a 20 20 20 20 69 66  uery, 0);.    if
1aea0 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74  ( rc ){.      ut
1aeb0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
1aec0 2c 20 22 57 61 72 6e 69 6e 67 3a 20 63 61 6e 6e  , "Warning: cann
1aed0 6f 74 20 73 74 65 70 20 5c 22 25 73 5c 22 20 62  ot step \"%s\" b
1aee0 61 63 6b 77 61 72 64 73 22 2c 20 7a 54 61 62 6c  ackwards", zTabl
1aef0 65 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  e);.      break;
1af00 0a 20 20 20 20 7d 0a 20 20 7d 20 2f 2a 20 45 6e  .    }.  } /* En
1af10 64 20 66 6f 72 28 6b 3d 30 2e 2e 2e 29 20 2a 2f  d for(k=0...) */
1af20 0a 0a 65 6e 64 5f 64 61 74 61 5f 78 66 65 72 3a  ..end_data_xfer:
1af30 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
1af40 69 7a 65 28 70 51 75 65 72 79 29 3b 0a 20 20 73  ize(pQuery);.  s
1af50 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1af60 70 49 6e 73 65 72 74 29 3b 0a 20 20 73 71 6c 69  pInsert);.  sqli
1af70 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79 29  te3_free(zQuery)
1af80 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
1af90 28 7a 49 6e 73 65 72 74 29 3b 0a 7d 0a 0a 0a 2f  (zInsert);.}.../
1afa0 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 74 72 61 6e  *.** Try to tran
1afb0 73 66 65 72 20 61 6c 6c 20 72 6f 77 73 20 6f 66  sfer all rows of
1afc0 20 74 68 65 20 73 63 68 65 6d 61 20 74 68 61 74   the schema that
1afd0 20 6d 61 74 63 68 20 7a 57 68 65 72 65 2e 20 20   match zWhere.  
1afe0 46 6f 72 0a 2a 2a 20 65 61 63 68 20 72 6f 77 2c  For.** each row,
1aff0 20 69 6e 76 6f 6b 65 20 78 46 6f 72 45 61 63 68   invoke xForEach
1b000 28 29 20 6f 6e 20 74 68 65 20 6f 62 6a 65 63 74  () on the object
1b010 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 61 74   defined by that
1b020 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 61 6e 20 65   row..** If an e
1b030 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
1b040 72 65 64 20 77 68 69 6c 65 20 6d 6f 76 69 6e 67  red while moving
1b050 20 66 6f 72 77 61 72 64 20 74 68 72 6f 75 67 68   forward through
1b060 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d   the.** sqlite_m
1b070 61 73 74 65 72 20 74 61 62 6c 65 2c 20 74 72 79  aster table, try
1b080 20 61 67 61 69 6e 20 6d 6f 76 69 6e 67 20 62 61   again moving ba
1b090 63 6b 77 61 72 64 73 2e 0a 2a 2f 0a 73 74 61 74  ckwards..*/.stat
1b0a0 69 63 20 76 6f 69 64 20 74 72 79 54 6f 43 6c 6f  ic void tryToClo
1b0b0 6e 65 53 63 68 65 6d 61 28 0a 20 20 53 68 65 6c  neSchema(.  Shel
1b0c0 6c 53 74 61 74 65 20 2a 70 2c 0a 20 20 73 71 6c  lState *p,.  sql
1b0d0 69 74 65 33 20 2a 6e 65 77 44 62 2c 0a 20 20 63  ite3 *newDb,.  c
1b0e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 57 68 65 72  onst char *zWher
1b0f0 65 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 6f 72  e,.  void (*xFor
1b100 45 61 63 68 29 28 53 68 65 6c 6c 53 74 61 74 65  Each)(ShellState
1b110 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
1b120 20 63 68 61 72 2a 29 0a 29 7b 0a 20 20 73 71 6c   char*).){.  sql
1b130 69 74 65 33 5f 73 74 6d 74 20 2a 70 51 75 65 72  ite3_stmt *pQuer
1b140 79 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a  y = 0;.  char *z
1b150 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 69 6e 74  Query = 0;.  int
1b160 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20 75 6e 73   rc;.  const uns
1b170 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 4e 61 6d  igned char *zNam
1b180 65 3b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67  e;.  const unsig
1b190 6e 65 64 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  ned char *zSql;.
1b1a0 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20    char *zErrMsg 
1b1b0 3d 20 30 3b 0a 0a 20 20 7a 51 75 65 72 79 20 3d  = 0;..  zQuery =
1b1c0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
1b1d0 28 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 73  ("SELECT name, s
1b1e0 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ql FROM sqlite_m
1b1f0 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20  aster".         
1b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b210 20 20 22 20 57 48 45 52 45 20 25 73 22 2c 20 7a    " WHERE %s", z
1b220 57 68 65 72 65 29 3b 0a 20 20 72 63 20 3d 20 73  Where);.  rc = s
1b230 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
1b240 32 28 70 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c  2(p->db, zQuery,
1b250 20 2d 31 2c 20 26 70 51 75 65 72 79 2c 20 30 29   -1, &pQuery, 0)
1b260 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
1b270 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
1b280 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 28 25  derr, "Error: (%
1b290 64 29 20 25 73 20 6f 6e 20 5b 25 73 5d 5c 6e 22  d) %s on [%s]\n"
1b2a0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1b2b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78        sqlite3_ex
1b2c0 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 70  tended_errcode(p
1b2d0 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65 33 5f 65  ->db), sqlite3_e
1b2e0 72 72 6d 73 67 28 70 2d 3e 64 62 29 2c 0a 20 20  rrmsg(p->db),.  
1b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b300 20 20 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 67    zQuery);.    g
1b310 6f 74 6f 20 65 6e 64 5f 73 63 68 65 6d 61 5f 78  oto end_schema_x
1b320 66 65 72 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65  fer;.  }.  while
1b330 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  ( (rc = sqlite3_
1b340 73 74 65 70 28 70 51 75 65 72 79 29 29 3d 3d 53  step(pQuery))==S
1b350 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20  QLITE_ROW ){.   
1b360 20 7a 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33   zName = sqlite3
1b370 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75  _column_text(pQu
1b380 65 72 79 2c 20 30 29 3b 0a 20 20 20 20 7a 53 71  ery, 0);.    zSq
1b390 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
1b3a0 6d 6e 5f 74 65 78 74 28 70 51 75 65 72 79 2c 20  mn_text(pQuery, 
1b3b0 31 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22  1);.    printf("
1b3c0 25 73 2e 2e 2e 20 22 2c 20 7a 4e 61 6d 65 29 3b  %s... ", zName);
1b3d0 20 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b   fflush(stdout);
1b3e0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65  .    sqlite3_exe
1b3f0 63 28 6e 65 77 44 62 2c 20 28 63 6f 6e 73 74 20  c(newDb, (const 
1b400 63 68 61 72 2a 29 7a 53 71 6c 2c 20 30 2c 20 30  char*)zSql, 0, 0
1b410 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  , &zErrMsg);.   
1b420 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a   if( zErrMsg ){.
1b430 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
1b440 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
1b450 3a 20 25 73 5c 6e 53 51 4c 3a 20 5b 25 73 5d 5c  : %s\nSQL: [%s]\
1b460 6e 22 2c 20 7a 45 72 72 4d 73 67 2c 20 7a 53 71  n", zErrMsg, zSq
1b470 6c 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  l);.      sqlite
1b480 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b  3_free(zErrMsg);
1b490 0a 20 20 20 20 20 20 7a 45 72 72 4d 73 67 20 3d  .      zErrMsg =
1b4a0 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   0;.    }.    if
1b4b0 28 20 78 46 6f 72 45 61 63 68 20 29 7b 0a 20 20  ( xForEach ){.  
1b4c0 20 20 20 20 78 46 6f 72 45 61 63 68 28 70 2c 20      xForEach(p, 
1b4d0 6e 65 77 44 62 2c 20 28 63 6f 6e 73 74 20 63 68  newDb, (const ch
1b4e0 61 72 2a 29 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  ar*)zName);.    
1b4f0 7d 0a 20 20 20 20 70 72 69 6e 74 66 28 22 64 6f  }.    printf("do
1b500 6e 65 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 69 66  ne\n");.  }.  if
1b510 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc!=SQLITE_DON
1b520 45 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  E ){.    sqlite3
1b530 5f 66 69 6e 61 6c 69 7a 65 28 70 51 75 65 72 79  _finalize(pQuery
1b540 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  );.    sqlite3_f
1b550 72 65 65 28 7a 51 75 65 72 79 29 3b 0a 20 20 20  ree(zQuery);.   
1b560 20 7a 51 75 65 72 79 20 3d 20 73 71 6c 69 74 65   zQuery = sqlite
1b570 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43  3_mprintf("SELEC
1b580 54 20 6e 61 6d 65 2c 20 73 71 6c 20 46 52 4f 4d  T name, sql FROM
1b590 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a   sqlite_master".
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57               " W
1b5c0 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59  HERE %s ORDER BY
1b5d0 20 72 6f 77 69 64 20 44 45 53 43 22 2c 20 7a 57   rowid DESC", zW
1b5e0 68 65 72 65 29 3b 0a 20 20 20 20 72 63 20 3d 20  here);.    rc = 
1b5f0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
1b600 76 32 28 70 2d 3e 64 62 2c 20 7a 51 75 65 72 79  v2(p->db, zQuery
1b610 2c 20 2d 31 2c 20 26 70 51 75 65 72 79 2c 20 30  , -1, &pQuery, 0
1b620 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b  );.    if( rc ){
1b630 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
1b640 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1b650 72 3a 20 28 25 64 29 20 25 73 20 6f 6e 20 5b 25  r: (%d) %s on [%
1b660 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  s]\n",.         
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
1b680 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72  ite3_extended_er
1b690 72 63 6f 64 65 28 70 2d 3e 64 62 29 2c 20 73 71  rcode(p->db), sq
1b6a0 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e  lite3_errmsg(p->
1b6b0 64 62 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  db),.           
1b6c0 20 20 20 20 20 20 20 20 20 20 20 7a 51 75 65 72             zQuer
1b6d0 79 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 65  y);.      goto e
1b6e0 6e 64 5f 73 63 68 65 6d 61 5f 78 66 65 72 3b 0a  nd_schema_xfer;.
1b6f0 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28      }.    while(
1b700 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73   (rc = sqlite3_s
1b710 74 65 70 28 70 51 75 65 72 79 29 29 3d 3d 53 51  tep(pQuery))==SQ
1b720 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
1b730 20 20 7a 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65    zName = sqlite
1b740 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51  3_column_text(pQ
1b750 75 65 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  uery, 0);.      
1b760 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  zSql = sqlite3_c
1b770 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75 65 72  olumn_text(pQuer
1b780 79 2c 20 31 29 3b 0a 20 20 20 20 20 20 70 72 69  y, 1);.      pri
1b790 6e 74 66 28 22 25 73 2e 2e 2e 20 22 2c 20 7a 4e  ntf("%s... ", zN
1b7a0 61 6d 65 29 3b 20 66 66 6c 75 73 68 28 73 74 64  ame); fflush(std
1b7b0 6f 75 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  out);.      sqli
1b7c0 74 65 33 5f 65 78 65 63 28 6e 65 77 44 62 2c 20  te3_exec(newDb, 
1b7d0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 53 71  (const char*)zSq
1b7e0 6c 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d 73  l, 0, 0, &zErrMs
1b7f0 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 45  g);.      if( zE
1b800 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 20  rrMsg ){.       
1b810 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
1b820 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c  err, "Error: %s\
1b830 6e 53 51 4c 3a 20 5b 25 73 5d 5c 6e 22 2c 20 7a  nSQL: [%s]\n", z
1b840 45 72 72 4d 73 67 2c 20 7a 53 71 6c 29 3b 0a 20  ErrMsg, zSql);. 
1b850 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
1b860 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20  ree(zErrMsg);.  
1b870 20 20 20 20 20 20 7a 45 72 72 4d 73 67 20 3d 20        zErrMsg = 
1b880 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  0;.      }.     
1b890 20 69 66 28 20 78 46 6f 72 45 61 63 68 20 29 7b   if( xForEach ){
1b8a0 0a 20 20 20 20 20 20 20 20 78 46 6f 72 45 61 63  .        xForEac
1b8b0 68 28 70 2c 20 6e 65 77 44 62 2c 20 28 63 6f 6e  h(p, newDb, (con
1b8c0 73 74 20 63 68 61 72 2a 29 7a 4e 61 6d 65 29 3b  st char*)zName);
1b8d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
1b8e0 72 69 6e 74 66 28 22 64 6f 6e 65 5c 6e 22 29 3b  rintf("done\n");
1b8f0 0a 20 20 20 20 7d 0a 20 20 7d 0a 65 6e 64 5f 73  .    }.  }.end_s
1b900 63 68 65 6d 61 5f 78 66 65 72 3a 0a 20 20 73 71  chema_xfer:.  sq
1b910 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
1b920 51 75 65 72 79 29 3b 0a 20 20 73 71 6c 69 74 65  Query);.  sqlite
1b930 33 5f 66 72 65 65 28 7a 51 75 65 72 79 29 3b 0a  3_free(zQuery);.
1b940 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  }../*.** Open a 
1b950 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c  new database fil
1b960 65 20 6e 61 6d 65 64 20 22 7a 4e 65 77 44 62 22  e named "zNewDb"
1b970 2e 20 20 54 72 79 20 74 6f 20 72 65 63 6f 76 65  .  Try to recove
1b980 72 20 61 73 20 6d 75 63 68 20 69 6e 66 6f 72 6d  r as much inform
1b990 61 74 69 6f 6e 0a 2a 2a 20 61 73 20 70 6f 73 73  ation.** as poss
1b9a0 69 62 6c 65 20 6f 75 74 20 6f 66 20 74 68 65 20  ible out of the 
1b9b0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 28 77  main database (w
1b9c0 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 63 6f  hich might be co
1b9d0 72 72 75 70 74 29 20 61 6e 64 20 77 72 69 74 65  rrupt) and write
1b9e0 20 69 74 0a 2a 2a 20 69 6e 74 6f 20 7a 4e 65 77   it.** into zNew
1b9f0 44 62 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  Db..*/.static vo
1ba00 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65 28 53 68  id tryToClone(Sh
1ba10 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
1ba20 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 44 62 29  st char *zNewDb)
1ba30 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71  {.  int rc;.  sq
1ba40 6c 69 74 65 33 20 2a 6e 65 77 44 62 20 3d 20 30  lite3 *newDb = 0
1ba50 3b 0a 20 20 69 66 28 20 61 63 63 65 73 73 28 7a  ;.  if( access(z
1ba60 4e 65 77 44 62 2c 30 29 3d 3d 30 20 29 7b 0a 20  NewDb,0)==0 ){. 
1ba70 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1ba80 74 64 65 72 72 2c 20 22 46 69 6c 65 20 5c 22 25  tderr, "File \"%
1ba90 73 5c 22 20 61 6c 72 65 61 64 79 20 65 78 69 73  s\" already exis
1baa0 74 73 2e 5c 6e 22 2c 20 7a 4e 65 77 44 62 29 3b  ts.\n", zNewDb);
1bab0 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
1bac0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
1bad0 6f 70 65 6e 28 7a 4e 65 77 44 62 2c 20 26 6e 65  open(zNewDb, &ne
1bae0 77 44 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29  wDb);.  if( rc )
1baf0 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  {.    utf8_print
1bb00 66 28 73 74 64 65 72 72 2c 20 22 43 61 6e 6e 6f  f(stderr, "Canno
1bb10 74 20 63 72 65 61 74 65 20 6f 75 74 70 75 74 20  t create output 
1bb20 64 61 74 61 62 61 73 65 3a 20 25 73 5c 6e 22 2c  database: %s\n",
1bb30 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
1bb40 69 74 65 33 5f 65 72 72 6d 73 67 28 6e 65 77 44  ite3_errmsg(newD
1bb50 62 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  b));.  }else{.  
1bb60 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70    sqlite3_exec(p
1bb70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41 20 77 72  ->db, "PRAGMA wr
1bb80 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e  itable_schema=ON
1bb90 3b 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  ;", 0, 0, 0);.  
1bba0 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e    sqlite3_exec(n
1bbb0 65 77 44 62 2c 20 22 42 45 47 49 4e 20 45 58 43  ewDb, "BEGIN EXC
1bbc0 4c 55 53 49 56 45 3b 22 2c 20 30 2c 20 30 2c 20  LUSIVE;", 0, 0, 
1bbd0 30 29 3b 0a 20 20 20 20 74 72 79 54 6f 43 6c 6f  0);.    tryToClo
1bbe0 6e 65 53 63 68 65 6d 61 28 70 2c 20 6e 65 77 44  neSchema(p, newD
1bbf0 62 2c 20 22 74 79 70 65 3d 27 74 61 62 6c 65 27  b, "type='table'
1bc00 22 2c 20 74 72 79 54 6f 43 6c 6f 6e 65 44 61 74  ", tryToCloneDat
1bc10 61 29 3b 0a 20 20 20 20 74 72 79 54 6f 43 6c 6f  a);.    tryToClo
1bc20 6e 65 53 63 68 65 6d 61 28 70 2c 20 6e 65 77 44  neSchema(p, newD
1bc30 62 2c 20 22 74 79 70 65 21 3d 27 74 61 62 6c 65  b, "type!='table
1bc40 27 22 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69  '", 0);.    sqli
1bc50 74 65 33 5f 65 78 65 63 28 6e 65 77 44 62 2c 20  te3_exec(newDb, 
1bc60 22 43 4f 4d 4d 49 54 3b 22 2c 20 30 2c 20 30 2c  "COMMIT;", 0, 0,
1bc70 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
1bc80 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52  _exec(p->db, "PR
1bc90 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
1bca0 68 65 6d 61 3d 4f 46 46 3b 22 2c 20 30 2c 20 30  hema=OFF;", 0, 0
1bcb0 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  , 0);.  }.  sqli
1bcc0 74 65 33 5f 63 6c 6f 73 65 28 6e 65 77 44 62 29  te3_close(newDb)
1bcd0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67  ;.}../*.** Chang
1bce0 65 20 74 68 65 20 6f 75 74 70 75 74 20 66 69 6c  e the output fil
1bcf0 65 20 62 61 63 6b 20 74 6f 20 73 74 64 6f 75 74  e back to stdout
1bd00 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
1bd10 6f 75 74 70 75 74 5f 72 65 73 65 74 28 53 68 65  output_reset(She
1bd20 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69  llState *p){.  i
1bd30 66 28 20 70 2d 3e 6f 75 74 66 69 6c 65 5b 30 5d  f( p->outfile[0]
1bd40 3d 3d 27 7c 27 20 29 7b 0a 23 69 66 6e 64 65 66  =='|' ){.#ifndef
1bd50 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f 50   SQLITE_OMIT_POP
1bd60 45 4e 0a 20 20 20 20 70 63 6c 6f 73 65 28 70 2d  EN.    pclose(p-
1bd70 3e 6f 75 74 29 3b 0a 23 65 6e 64 69 66 0a 20 20  >out);.#endif.  
1bd80 7d 65 6c 73 65 7b 0a 20 20 20 20 6f 75 74 70 75  }else{.    outpu
1bd90 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28 70 2d 3e  t_file_close(p->
1bda0 6f 75 74 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6f  out);.  }.  p->o
1bdb0 75 74 66 69 6c 65 5b 30 5d 20 3d 20 30 3b 0a 20  utfile[0] = 0;. 
1bdc0 20 70 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74   p->out = stdout
1bdd0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 61  ;.}../*.** Run a
1bde0 6e 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 61 6e  n SQL command an
1bdf0 64 20 72 65 74 75 72 6e 20 74 68 65 20 73 69 6e  d return the sin
1be00 67 6c 65 20 69 6e 74 65 67 65 72 20 72 65 73 75  gle integer resu
1be10 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  lt..*/.static in
1be20 74 20 64 62 5f 69 6e 74 28 53 68 65 6c 6c 53 74  t db_int(ShellSt
1be30 61 74 65 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68  ate *p, const ch
1be40 61 72 20 2a 7a 53 71 6c 29 7b 0a 20 20 73 71 6c  ar *zSql){.  sql
1be50 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
1be60 3b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20 30 3b  ;.  int res = 0;
1be70 0a 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  .  sqlite3_prepa
1be80 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71  re_v2(p->db, zSq
1be90 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30  l, -1, &pStmt, 0
1bea0 29 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 20 26  );.  if( pStmt &
1beb0 26 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  & sqlite3_step(p
1bec0 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
1bed0 57 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 73  W ){.    res = s
1bee0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
1bef0 74 28 70 53 74 6d 74 2c 30 29 3b 0a 20 20 7d 0a  t(pStmt,0);.  }.
1bf00 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
1bf10 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74  ze(pStmt);.  ret
1bf20 75 72 6e 20 72 65 73 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn res;.}../*.*
1bf30 2a 20 43 6f 6e 76 65 72 74 20 61 20 32 2d 62 79  * Convert a 2-by
1bf40 74 65 20 6f 72 20 34 2d 62 79 74 65 20 62 69 67  te or 4-byte big
1bf50 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
1bf60 69 6e 74 6f 20 61 20 6e 61 74 69 76 65 20 69 6e  into a native in
1bf70 74 65 67 65 72 0a 2a 2f 0a 73 74 61 74 69 63 20  teger.*/.static 
1bf80 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 67 65 74  unsigned int get
1bf90 32 62 79 74 65 49 6e 74 28 75 6e 73 69 67 6e 65  2byteInt(unsigne
1bfa0 64 20 63 68 61 72 20 2a 61 29 7b 0a 20 20 72 65  d char *a){.  re
1bfb0 74 75 72 6e 20 28 61 5b 30 5d 3c 3c 38 29 20 2b  turn (a[0]<<8) +
1bfc0 20 61 5b 31 5d 3b 0a 7d 0a 73 74 61 74 69 63 20   a[1];.}.static 
1bfd0 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 67 65 74  unsigned int get
1bfe0 34 62 79 74 65 49 6e 74 28 75 6e 73 69 67 6e 65  4byteInt(unsigne
1bff0 64 20 63 68 61 72 20 2a 61 29 7b 0a 20 20 72 65  d char *a){.  re
1c000 74 75 72 6e 20 28 61 5b 30 5d 3c 3c 32 34 29 20  turn (a[0]<<24) 
1c010 2b 20 28 61 5b 31 5d 3c 3c 31 36 29 20 2b 20 28  + (a[1]<<16) + (
1c020 61 5b 32 5d 3c 3c 38 29 20 2b 20 61 5b 33 5d 3b  a[2]<<8) + a[3];
1c030 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d  .}../*.** Implem
1c040 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
1c050 22 2e 69 6e 66 6f 22 20 63 6f 6d 6d 61 6e 64 2e  ".info" command.
1c060 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20  .**.** Return 1 
1c070 6f 6e 20 65 72 72 6f 72 2c 20 32 20 74 6f 20 65  on error, 2 to e
1c080 78 69 74 2c 20 61 6e 64 20 30 20 6f 74 68 65 72  xit, and 0 other
1c090 77 69 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  wise..*/.static 
1c0a0 69 6e 74 20 73 68 65 6c 6c 5f 64 62 69 6e 66 6f  int shell_dbinfo
1c0b0 5f 63 6f 6d 6d 61 6e 64 28 53 68 65 6c 6c 53 74  _command(ShellSt
1c0c0 61 74 65 20 2a 70 2c 20 69 6e 74 20 6e 41 72 67  ate *p, int nArg
1c0d0 2c 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 29 7b  , char **azArg){
1c0e0 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1c0f0 73 74 72 75 63 74 20 7b 20 63 6f 6e 73 74 20 63  struct { const c
1c100 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 69 6e 74 20  har *zName; int 
1c110 6f 66 73 74 3b 20 7d 20 61 46 69 65 6c 64 5b 5d  ofst; } aField[]
1c120 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22 66 69 6c   = {.     { "fil
1c130 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
1c140 3a 22 2c 20 20 32 34 20 20 7d 2c 0a 20 20 20 20  :",  24  },.    
1c150 20 7b 20 22 64 61 74 61 62 61 73 65 20 70 61 67   { "database pag
1c160 65 20 63 6f 75 6e 74 3a 22 2c 20 20 32 38 20 20  e count:",  28  
1c170 7d 2c 0a 20 20 20 20 20 7b 20 22 66 72 65 65 6c  },.     { "freel
1c180 69 73 74 20 70 61 67 65 20 63 6f 75 6e 74 3a 22  ist page count:"
1c190 2c 20 20 33 36 20 20 7d 2c 0a 20 20 20 20 20 7b  ,  36  },.     {
1c1a0 20 22 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 3a   "schema cookie:
1c1b0 22 2c 20 20 20 20 20 20 20 20 34 30 20 20 7d 2c  ",        40  },
1c1c0 0a 20 20 20 20 20 7b 20 22 73 63 68 65 6d 61 20  .     { "schema 
1c1d0 66 6f 72 6d 61 74 3a 22 2c 20 20 20 20 20 20 20  format:",       
1c1e0 20 34 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   44  },.     { "
1c1f0 64 65 66 61 75 6c 74 20 63 61 63 68 65 20 73 69  default cache si
1c200 7a 65 3a 22 2c 20 20 20 34 38 20 20 7d 2c 0a 20  ze:",   48  },. 
1c210 20 20 20 20 7b 20 22 61 75 74 6f 76 61 63 75 75      { "autovacuu
1c220 6d 20 74 6f 70 20 72 6f 6f 74 3a 22 2c 20 20 35  m top root:",  5
1c230 32 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 69 6e  2  },.     { "in
1c240 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d  cremental vacuum
1c250 3a 22 2c 20 20 20 36 34 20 20 7d 2c 0a 20 20 20  :",   64  },.   
1c260 20 20 7b 20 22 74 65 78 74 20 65 6e 63 6f 64 69    { "text encodi
1c270 6e 67 3a 22 2c 20 20 20 20 20 20 20 20 35 36 20  ng:",        56 
1c280 20 7d 2c 0a 20 20 20 20 20 7b 20 22 75 73 65 72   },.     { "user
1c290 20 76 65 72 73 69 6f 6e 3a 22 2c 20 20 20 20 20   version:",     
1c2a0 20 20 20 20 36 30 20 20 7d 2c 0a 20 20 20 20 20      60  },.     
1c2b0 7b 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 20 69  { "application i
1c2c0 64 3a 22 2c 20 20 20 20 20 20 20 36 38 20 20 7d  d:",       68  }
1c2d0 2c 0a 20 20 20 20 20 7b 20 22 73 6f 66 74 77 61  ,.     { "softwa
1c2e0 72 65 20 76 65 72 73 69 6f 6e 3a 22 2c 20 20 20  re version:",   
1c2f0 20 20 39 36 20 20 7d 2c 0a 20 20 7d 3b 0a 20 20    96  },.  };.  
1c300 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72  static const str
1c310 75 63 74 20 7b 20 63 6f 6e 73 74 20 63 68 61 72  uct { const char
1c320 20 2a 7a 4e 61 6d 65 3b 20 63 6f 6e 73 74 20 63   *zName; const c
1c330 68 61 72 20 2a 7a 53 71 6c 3b 20 7d 20 61 51 75  har *zSql; } aQu
1c340 65 72 79 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b  ery[] = {.     {
1c350 20 22 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c   "number of tabl
1c360 65 73 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45  es:",.       "SE
1c370 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
1c380 4f 4d 20 25 73 20 57 48 45 52 45 20 74 79 70 65  OM %s WHERE type
1c390 3d 27 74 61 62 6c 65 27 22 20 7d 2c 0a 20 20 20  ='table'" },.   
1c3a0 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66 20 69    { "number of i
1c3b0 6e 64 65 78 65 73 3a 22 2c 0a 20 20 20 20 20 20  ndexes:",.      
1c3c0 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   "SELECT count(*
1c3d0 29 20 46 52 4f 4d 20 25 73 20 57 48 45 52 45 20  ) FROM %s WHERE 
1c3e0 74 79 70 65 3d 27 69 6e 64 65 78 27 22 20 7d 2c  type='index'" },
1c3f0 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62 65 72 20  .     { "number 
1c400 6f 66 20 74 72 69 67 67 65 72 73 3a 22 2c 0a 20  of triggers:",. 
1c410 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f        "SELECT co
1c420 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73 20 57  unt(*) FROM %s W
1c430 48 45 52 45 20 74 79 70 65 3d 27 74 72 69 67 67  HERE type='trigg
1c440 65 72 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22  er'" },.     { "
1c450 6e 75 6d 62 65 72 20 6f 66 20 76 69 65 77 73 3a  number of views:
1c460 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43  ",.       "SELEC
1c470 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
1c480 25 73 20 57 48 45 52 45 20 74 79 70 65 3d 27 76  %s WHERE type='v
1c490 69 65 77 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20  iew'" },.     { 
1c4a0 22 73 63 68 65 6d 61 20 73 69 7a 65 3a 22 2c 0a  "schema size:",.
1c4b0 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 74         "SELECT t
1c4c0 6f 74 61 6c 28 6c 65 6e 67 74 68 28 73 71 6c 29  otal(length(sql)
1c4d0 29 20 46 52 4f 4d 20 25 73 22 20 7d 2c 0a 20 20  ) FROM %s" },.  
1c4e0 7d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68  };.  int i;.  ch
1c4f0 61 72 20 2a 7a 53 63 68 65 6d 61 54 61 62 3b 0a  ar *zSchemaTab;.
1c500 20 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 6e 41    char *zDb = nA
1c510 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d  rg>=2 ? azArg[1]
1c520 20 3a 20 22 6d 61 69 6e 22 3b 0a 20 20 73 71 6c   : "main";.  sql
1c530 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
1c540 20 3d 20 30 3b 0a 20 20 75 6e 73 69 67 6e 65 64   = 0;.  unsigned
1c550 20 63 68 61 72 20 61 48 64 72 5b 31 30 30 5d 3b   char aHdr[100];
1c560 0a 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29  .  open_db(p, 0)
1c570 3b 0a 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30  ;.  if( p->db==0
1c580 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 73   ) return 1;.  s
1c590 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
1c5a0 32 28 70 2d 3e 64 62 2c 22 53 45 4c 45 43 54 20  2(p->db,"SELECT 
1c5b0 64 61 74 61 20 46 52 4f 4d 20 73 71 6c 69 74 65  data FROM sqlite
1c5c0 5f 64 62 70 61 67 65 28 3f 31 29 20 57 48 45 52  _dbpage(?1) WHER
1c5d0 45 20 70 67 6e 6f 3d 31 22 2c 0a 20 20 20 20 20  E pgno=1",.     
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
1c600 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
1c610 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20 7a 44  ext(pStmt, 1, zD
1c620 62 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54  b, -1, SQLITE_ST
1c630 41 54 49 43 29 3b 0a 20 20 69 66 28 20 73 71 6c  ATIC);.  if( sql
1c640 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
1c650 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 20  ==SQLITE_ROW.   
1c660 26 26 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  && sqlite3_colum
1c670 6e 5f 62 79 74 65 73 28 70 53 74 6d 74 2c 30 29  n_bytes(pStmt,0)
1c680 3e 31 30 30 0a 20 20 29 7b 0a 20 20 20 20 6d 65  >100.  ){.    me
1c690 6d 63 70 79 28 61 48 64 72 2c 20 73 71 6c 69 74  mcpy(aHdr, sqlit
1c6a0 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70  e3_column_blob(p
1c6b0 53 74 6d 74 2c 30 29 2c 20 31 30 30 29 3b 0a 20  Stmt,0), 100);. 
1c6c0 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
1c6d0 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 7d 65  ize(pStmt);.  }e
1c6e0 6c 73 65 7b 0a 20 20 20 20 72 61 77 5f 70 72 69  lse{.    raw_pri
1c6f0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 75 6e 61  ntf(stderr, "una
1c700 62 6c 65 20 74 6f 20 72 65 61 64 20 64 61 74 61  ble to read data
1c710 62 61 73 65 20 68 65 61 64 65 72 5c 6e 22 29 3b  base header\n");
1c720 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
1c730 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
1c740 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
1c750 20 20 69 20 3d 20 67 65 74 32 62 79 74 65 49 6e    i = get2byteIn
1c760 74 28 61 48 64 72 2b 31 36 29 3b 0a 20 20 69 66  t(aHdr+16);.  if
1c770 28 20 69 3d 3d 31 20 29 20 69 20 3d 20 36 35 35  ( i==1 ) i = 655
1c780 33 36 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74  36;.  utf8_print
1c790 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73  f(p->out, "%-20s
1c7a0 20 25 64 5c 6e 22 2c 20 22 64 61 74 61 62 61 73   %d\n", "databas
1c7b0 65 20 70 61 67 65 20 73 69 7a 65 3a 22 2c 20 69  e page size:", i
1c7c0 29 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74 66  );.  utf8_printf
1c7d0 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20  (p->out, "%-20s 
1c7e0 25 64 5c 6e 22 2c 20 22 77 72 69 74 65 20 66 6f  %d\n", "write fo
1c7f0 72 6d 61 74 3a 22 2c 20 61 48 64 72 5b 31 38 5d  rmat:", aHdr[18]
1c800 29 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74 66  );.  utf8_printf
1c810 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20  (p->out, "%-20s 
1c820 25 64 5c 6e 22 2c 20 22 72 65 61 64 20 66 6f 72  %d\n", "read for
1c830 6d 61 74 3a 22 2c 20 61 48 64 72 5b 31 39 5d 29  mat:", aHdr[19])
1c840 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28  ;.  utf8_printf(
1c850 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20 25  p->out, "%-20s %
1c860 64 5c 6e 22 2c 20 22 72 65 73 65 72 76 65 64 20  d\n", "reserved 
1c870 62 79 74 65 73 3a 22 2c 20 61 48 64 72 5b 32 30  bytes:", aHdr[20
1c880 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  ]);.  for(i=0; i
1c890 3c 41 72 72 61 79 53 69 7a 65 28 61 46 69 65 6c  <ArraySize(aFiel
1c8a0 64 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 6e  d); i++){.    in
1c8b0 74 20 6f 66 73 74 20 3d 20 61 46 69 65 6c 64 5b  t ofst = aField[
1c8c0 69 5d 2e 6f 66 73 74 3b 0a 20 20 20 20 75 6e 73  i].ofst;.    uns
1c8d0 69 67 6e 65 64 20 69 6e 74 20 76 61 6c 20 3d 20  igned int val = 
1c8e0 67 65 74 34 62 79 74 65 49 6e 74 28 61 48 64 72  get4byteInt(aHdr
1c8f0 20 2b 20 6f 66 73 74 29 3b 0a 20 20 20 20 75 74   + ofst);.    ut
1c900 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
1c910 2c 20 22 25 2d 32 30 73 20 25 75 22 2c 20 61 46  , "%-20s %u", aF
1c920 69 65 6c 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 76  ield[i].zName, v
1c930 61 6c 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  al);.    switch(
1c940 20 6f 66 73 74 20 29 7b 0a 20 20 20 20 20 20 63   ofst ){.      c
1c950 61 73 65 20 35 36 3a 20 7b 0a 20 20 20 20 20 20  ase 56: {.      
1c960 20 20 69 66 28 20 76 61 6c 3d 3d 31 20 29 20 72    if( val==1 ) r
1c970 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
1c980 2c 20 22 20 28 75 74 66 38 29 22 29 3b 0a 20 20  , " (utf8)");.  
1c990 20 20 20 20 20 20 69 66 28 20 76 61 6c 3d 3d 32        if( val==2
1c9a0 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d   ) raw_printf(p-
1c9b0 3e 6f 75 74 2c 20 22 20 28 75 74 66 31 36 6c 65  >out, " (utf16le
1c9c0 29 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  )");.        if(
1c9d0 20 76 61 6c 3d 3d 33 20 29 20 72 61 77 5f 70 72   val==3 ) raw_pr
1c9e0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20 28  intf(p->out, " (
1c9f0 75 74 66 31 36 62 65 29 22 29 3b 0a 20 20 20 20  utf16be)");.    
1ca00 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 61    }.    }.    ra
1ca10 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
1ca20 20 22 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 69 66   "\n");.  }.  if
1ca30 28 20 7a 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20  ( zDb==0 ){.    
1ca40 7a 53 63 68 65 6d 61 54 61 62 20 3d 20 73 71 6c  zSchemaTab = sql
1ca50 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 6d 61  ite3_mprintf("ma
1ca60 69 6e 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  in.sqlite_master
1ca70 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
1ca80 73 74 72 63 6d 70 28 7a 44 62 2c 22 74 65 6d 70  strcmp(zDb,"temp
1ca90 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 7a 53 63  ")==0 ){.    zSc
1caa0 68 65 6d 61 54 61 62 20 3d 20 73 71 6c 69 74 65  hemaTab = sqlite
1cab0 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
1cac0 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
1cad0 74 65 72 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ter");.  }else{.
1cae0 20 20 20 20 7a 53 63 68 65 6d 61 54 61 62 20 3d      zSchemaTab =
1caf0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
1cb00 28 22 5c 22 25 77 5c 22 2e 73 71 6c 69 74 65 5f  ("\"%w\".sqlite_
1cb10 6d 61 73 74 65 72 22 2c 20 7a 44 62 29 3b 0a 20  master", zDb);. 
1cb20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c   }.  for(i=0; i<
1cb30 41 72 72 61 79 53 69 7a 65 28 61 51 75 65 72 79  ArraySize(aQuery
1cb40 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 63 68 61  ); i++){.    cha
1cb50 72 20 2a 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65  r *zSql = sqlite
1cb60 33 5f 6d 70 72 69 6e 74 66 28 61 51 75 65 72 79  3_mprintf(aQuery
1cb70 5b 69 5d 2e 7a 53 71 6c 2c 20 7a 53 63 68 65 6d  [i].zSql, zSchem
1cb80 61 54 61 62 29 3b 0a 20 20 20 20 69 6e 74 20 76  aTab);.    int v
1cb90 61 6c 20 3d 20 64 62 5f 69 6e 74 28 70 2c 20 7a  al = db_int(p, z
1cba0 53 71 6c 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Sql);.    sqlite
1cbb0 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  3_free(zSql);.  
1cbc0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
1cbd0 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20 25 64 5c  >out, "%-20s %d\
1cbe0 6e 22 2c 20 61 51 75 65 72 79 5b 69 5d 2e 7a 4e  n", aQuery[i].zN
1cbf0 61 6d 65 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20  ame, val);.  }. 
1cc00 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
1cc10 63 68 65 6d 61 54 61 62 29 3b 0a 20 20 72 65 74  chemaTab);.  ret
1cc20 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
1cc30 50 72 69 6e 74 20 74 68 65 20 63 75 72 72 65 6e  Print the curren
1cc40 74 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  t sqlite3_errmsg
1cc50 28 29 20 76 61 6c 75 65 20 74 6f 20 73 74 64 65  () value to stde
1cc60 72 72 20 61 6e 64 20 72 65 74 75 72 6e 20 31 2e  rr and return 1.
1cc70 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
1cc80 68 65 6c 6c 44 61 74 61 62 61 73 65 45 72 72 6f  hellDatabaseErro
1cc90 72 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  r(sqlite3 *db){.
1cca0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
1ccb0 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rr = sqlite3_err
1ccc0 6d 73 67 28 64 62 29 3b 0a 20 20 75 74 66 38 5f  msg(db);.  utf8_
1ccd0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1cce0 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45  Error: %s\n", zE
1ccf0 72 72 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b  rr);.  return 1;
1cd00 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  .}../*.** Print 
1cd10 61 6e 20 6f 75 74 2d 6f 66 2d 6d 65 6d 6f 72 79  an out-of-memory
1cd20 20 6d 65 73 73 61 67 65 20 74 6f 20 73 74 64 65   message to stde
1cd30 72 72 20 61 6e 64 20 72 65 74 75 72 6e 20 31 2e  rr and return 1.
1cd40 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
1cd50 68 65 6c 6c 4e 6f 6d 65 6d 45 72 72 6f 72 28 76  hellNomemError(v
1cd60 6f 69 64 29 7b 0a 20 20 72 61 77 5f 70 72 69 6e  oid){.  raw_prin
1cd70 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1cd80 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  r: out of memory
1cd90 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  \n");.  return 1
1cda0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61  ;.}../*.** Compa
1cdb0 72 65 20 74 68 65 20 70 61 74 74 65 72 6e 20 69  re the pattern i
1cdc0 6e 20 7a 47 6c 6f 62 5b 5d 20 61 67 61 69 6e 73  n zGlob[] agains
1cdd0 74 20 74 68 65 20 74 65 78 74 20 69 6e 20 7a 5b  t the text in z[
1cde0 5d 2e 20 20 52 65 74 75 72 6e 20 54 52 55 45 0a  ].  Return TRUE.
1cdf0 2a 2a 20 69 66 20 74 68 65 79 20 6d 61 74 63 68  ** if they match
1ce00 20 61 6e 64 20 46 41 4c 53 45 20 28 30 29 20 69   and FALSE (0) i
1ce10 66 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 6d 61  f they do not ma
1ce20 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 47 6c 6f 62 62  tch..**.** Globb
1ce30 69 6e 67 20 72 75 6c 65 73 3a 0a 2a 2a 0a 2a 2a  ing rules:.**.**
1ce40 20 20 20 20 20 20 27 2a 27 20 20 20 20 20 20 20        '*'       
1ce50 4d 61 74 63 68 65 73 20 61 6e 79 20 73 65 71 75  Matches any sequ
1ce60 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20  ence of zero or 
1ce70 6d 6f 72 65 20 63 68 61 72 61 63 74 65 72 73 2e  more characters.
1ce80 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 3f 27 20  .**.**      '?' 
1ce90 20 20 20 20 20 20 4d 61 74 63 68 65 73 20 65 78        Matches ex
1cea0 61 63 74 6c 79 20 6f 6e 65 20 63 68 61 72 61 63  actly one charac
1ceb0 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 5b  ter..**.**     [
1cec0 2e 2e 2e 5d 20 20 20 20 20 20 4d 61 74 63 68 65  ...]      Matche
1ced0 73 20 6f 6e 65 20 63 68 61 72 61 63 74 65 72 20  s one character 
1cee0 66 72 6f 6d 20 74 68 65 20 65 6e 63 6c 6f 73 65  from the enclose
1cef0 64 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 20 20 20  d list of.**    
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72              char
1cf10 61 63 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  acters..**.**   
1cf20 20 20 5b 5e 2e 2e 2e 5d 20 20 20 20 20 4d 61 74    [^...]     Mat
1cf30 63 68 65 73 20 6f 6e 65 20 63 68 61 72 61 63 74  ches one charact
1cf40 65 72 20 6e 6f 74 20 69 6e 20 74 68 65 20 65 6e  er not in the en
1cf50 63 6c 6f 73 65 64 20 6c 69 73 74 2e 0a 2a 2a 0a  closed list..**.
1cf60 2a 2a 20 20 20 20 20 20 27 23 27 20 20 20 20 20  **      '#'     
1cf70 20 20 4d 61 74 63 68 65 73 20 61 6e 79 20 73 65    Matches any se
1cf80 71 75 65 6e 63 65 20 6f 66 20 6f 6e 65 20 6f 72  quence of one or
1cf90 20 6d 6f 72 65 20 64 69 67 69 74 73 20 77 69 74   more digits wit
1cfa0 68 20 61 6e 0a 2a 2a 20 20 20 20 20 20 20 20 20  h an.**         
1cfb0 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 61 6c 20         optional 
1cfc0 2b 20 6f 72 20 2d 20 73 69 67 6e 20 69 6e 20 66  + or - sign in f
1cfd0 72 6f 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  ront.**.**      
1cfe0 27 20 27 20 20 20 20 20 20 20 41 6e 79 20 73 70  ' '       Any sp
1cff0 61 6e 20 6f 66 20 77 68 69 74 65 73 70 61 63 65  an of whitespace
1d000 20 6d 61 74 63 68 65 73 20 61 6e 79 20 6f 74 68   matches any oth
1d010 65 72 20 73 70 61 6e 20 6f 66 0a 2a 2a 20 20 20  er span of.**   
1d020 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
1d030 74 65 73 70 61 63 65 2e 0a 2a 2a 0a 2a 2a 20 45  tespace..**.** E
1d040 78 74 72 61 20 77 68 69 74 65 73 70 61 63 65 20  xtra whitespace 
1d050 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 7a 5b  at the end of z[
1d060 5d 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2f  ] is ignored..*/
1d070 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
1d080 63 61 73 65 5f 67 6c 6f 62 28 63 6f 6e 73 74 20  case_glob(const 
1d090 63 68 61 72 20 2a 7a 47 6c 6f 62 2c 20 63 6f 6e  char *zGlob, con
1d0a0 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69  st char *z){.  i
1d0b0 6e 74 20 63 2c 20 63 32 3b 0a 20 20 69 6e 74 20  nt c, c2;.  int 
1d0c0 69 6e 76 65 72 74 3b 0a 20 20 69 6e 74 20 73 65  invert;.  int se
1d0d0 65 6e 3b 0a 0a 20 20 77 68 69 6c 65 28 20 28 63  en;..  while( (c
1d0e0 20 3d 20 28 2a 28 7a 47 6c 6f 62 2b 2b 29 29 29   = (*(zGlob++)))
1d0f0 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 49  !=0 ){.    if( I
1d100 73 53 70 61 63 65 28 63 29 20 29 7b 0a 20 20 20  sSpace(c) ){.   
1d110 20 20 20 69 66 28 20 21 49 73 53 70 61 63 65 28     if( !IsSpace(
1d120 2a 7a 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  *z) ) return 0;.
1d130 20 20 20 20 20 20 77 68 69 6c 65 28 20 49 73 53        while( IsS
1d140 70 61 63 65 28 2a 7a 47 6c 6f 62 29 20 29 20 7a  pace(*zGlob) ) z
1d150 47 6c 6f 62 2b 2b 3b 0a 20 20 20 20 20 20 77 68  Glob++;.      wh
1d160 69 6c 65 28 20 49 73 53 70 61 63 65 28 2a 7a 29  ile( IsSpace(*z)
1d170 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73   ) z++;.    }els
1d180 65 20 69 66 28 20 63 3d 3d 27 2a 27 20 29 7b 0a  e if( c=='*' ){.
1d190 20 20 20 20 20 20 77 68 69 6c 65 28 20 28 63 3d        while( (c=
1d1a0 28 2a 28 7a 47 6c 6f 62 2b 2b 29 29 29 20 3d 3d  (*(zGlob++))) ==
1d1b0 20 27 2a 27 20 7c 7c 20 63 3d 3d 27 3f 27 20 29   '*' || c=='?' )
1d1c0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 3d  {.        if( c=
1d1d0 3d 27 3f 27 20 26 26 20 28 2a 28 7a 2b 2b 29 29  ='?' && (*(z++))
1d1e0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
1d1f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
1d200 28 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ( c==0 ){.      
1d210 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
1d220 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
1d230 5b 27 20 29 7b 0a 20 20 20 20 20 20 20 20 77 68  [' ){.        wh
1d240 69 6c 65 28 20 2a 7a 20 26 26 20 74 65 73 74 63  ile( *z && testc
1d250 61 73 65 5f 67 6c 6f 62 28 7a 47 6c 6f 62 2d 31  ase_glob(zGlob-1
1d260 2c 7a 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ,z)==0 ){.      
1d270 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20      z++;.       
1d280 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
1d290 6e 20 28 2a 7a 29 21 3d 30 3b 0a 20 20 20 20 20  n (*z)!=0;.     
1d2a0 20 7d 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20   }.      while( 
1d2b0 28 63 32 20 3d 20 28 2a 28 7a 2b 2b 29 29 29 21  (c2 = (*(z++)))!
1d2c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 77 68  =0 ){.        wh
1d2d0 69 6c 65 28 20 63 32 21 3d 63 20 29 7b 0a 20 20  ile( c2!=c ){.  
1d2e0 20 20 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a          c2 = *(z
1d2f0 2b 2b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  ++);.          i
1d300 66 28 20 63 32 3d 3d 30 20 29 20 72 65 74 75 72  f( c2==0 ) retur
1d310 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  n 0;.        }. 
1d320 20 20 20 20 20 20 20 69 66 28 20 74 65 73 74 63         if( testc
1d330 61 73 65 5f 67 6c 6f 62 28 7a 47 6c 6f 62 2c 7a  ase_glob(zGlob,z
1d340 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20  ) ) return 1;.  
1d350 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
1d360 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20  rn 0;.    }else 
1d370 69 66 28 20 63 3d 3d 27 3f 27 20 29 7b 0a 20 20  if( c=='?' ){.  
1d380 20 20 20 20 69 66 28 20 28 2a 28 7a 2b 2b 29 29      if( (*(z++))
1d390 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
1d3a0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
1d3b0 3d 27 5b 27 20 29 7b 0a 20 20 20 20 20 20 69 6e  ='[' ){.      in
1d3c0 74 20 70 72 69 6f 72 5f 63 20 3d 20 30 3b 0a 20  t prior_c = 0;. 
1d3d0 20 20 20 20 20 73 65 65 6e 20 3d 20 30 3b 0a 20       seen = 0;. 
1d3e0 20 20 20 20 20 69 6e 76 65 72 74 20 3d 20 30 3b       invert = 0;
1d3f0 0a 20 20 20 20 20 20 63 20 3d 20 2a 28 7a 2b 2b  .      c = *(z++
1d400 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d  );.      if( c==
1d410 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
1d420 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62      c2 = *(zGlob
1d430 2b 2b 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63  ++);.      if( c
1d440 32 3d 3d 27 5e 27 20 29 7b 0a 20 20 20 20 20 20  2=='^' ){.      
1d450 20 20 69 6e 76 65 72 74 20 3d 20 31 3b 0a 20 20    invert = 1;.  
1d460 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c        c2 = *(zGl
1d470 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ob++);.      }. 
1d480 20 20 20 20 20 69 66 28 20 63 32 3d 3d 27 5d 27       if( c2==']'
1d490 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
1d4a0 63 3d 3d 27 5d 27 20 29 20 73 65 65 6e 20 3d 20  c==']' ) seen = 
1d4b0 31 3b 0a 20 20 20 20 20 20 20 20 63 32 20 3d 20  1;.        c2 = 
1d4c0 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20  *(zGlob++);.    
1d4d0 20 20 7d 0a 20 20 20 20 20 20 77 68 69 6c 65 28    }.      while(
1d4e0 20 63 32 20 26 26 20 63 32 21 3d 27 5d 27 20 29   c2 && c2!=']' )
1d4f0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 32  {.        if( c2
1d500 3d 3d 27 2d 27 20 26 26 20 7a 47 6c 6f 62 5b 30  =='-' && zGlob[0
1d510 5d 21 3d 27 5d 27 20 26 26 20 7a 47 6c 6f 62 5b  ]!=']' && zGlob[
1d520 30 5d 21 3d 30 20 26 26 20 70 72 69 6f 72 5f 63  0]!=0 && prior_c
1d530 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  >0 ){.          
1d540 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b  c2 = *(zGlob++);
1d550 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63  .          if( c
1d560 3e 3d 70 72 69 6f 72 5f 63 20 26 26 20 63 3c 3d  >=prior_c && c<=
1d570 63 32 20 29 20 73 65 65 6e 20 3d 20 31 3b 0a 20  c2 ) seen = 1;. 
1d580 20 20 20 20 20 20 20 20 20 70 72 69 6f 72 5f 63           prior_c
1d590 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 0;.        }e
1d5a0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
1d5b0 66 28 20 63 3d 3d 63 32 20 29 7b 0a 20 20 20 20  f( c==c2 ){.    
1d5c0 20 20 20 20 20 20 20 20 73 65 65 6e 20 3d 20 31          seen = 1
1d5d0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1d5e0 20 20 20 20 20 20 20 20 70 72 69 6f 72 5f 63 20          prior_c 
1d5f0 3d 20 63 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a  = c2;.        }.
1d600 20 20 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a          c2 = *(z
1d610 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20 7d  Glob++);.      }
1d620 0a 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d 30  .      if( c2==0
1d630 20 7c 7c 20 28 73 65 65 6e 20 5e 20 69 6e 76 65   || (seen ^ inve
1d640 72 74 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  rt)==0 ) return 
1d650 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
1d660 20 63 3d 3d 27 23 27 20 29 7b 0a 20 20 20 20 20   c=='#' ){.     
1d670 20 69 66 28 20 28 7a 5b 30 5d 3d 3d 27 2d 27 20   if( (z[0]=='-' 
1d680 7c 7c 20 7a 5b 30 5d 3d 3d 27 2b 27 29 20 26 26  || z[0]=='+') &&
1d690 20 49 73 44 69 67 69 74 28 7a 5b 31 5d 29 20 29   IsDigit(z[1]) )
1d6a0 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20   z++;.      if( 
1d6b0 21 49 73 44 69 67 69 74 28 7a 5b 30 5d 29 20 29  !IsDigit(z[0]) )
1d6c0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20   return 0;.     
1d6d0 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 77 68 69 6c   z++;.      whil
1d6e0 65 28 20 49 73 44 69 67 69 74 28 7a 5b 30 5d 29  e( IsDigit(z[0])
1d6f0 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20 20 7d   ){ z++; }.    }
1d700 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20  else{.      if( 
1d710 63 21 3d 28 2a 28 7a 2b 2b 29 29 20 29 20 72 65  c!=(*(z++)) ) re
1d720 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20  turn 0;.    }.  
1d730 7d 0a 20 20 77 68 69 6c 65 28 20 49 73 53 70 61  }.  while( IsSpa
1d740 63 65 28 2a 7a 29 20 29 7b 20 7a 2b 2b 3b 20 7d  ce(*z) ){ z++; }
1d750 0a 20 20 72 65 74 75 72 6e 20 2a 7a 3d 3d 30 3b  .  return *z==0;
1d760 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61  .}.../*.** Compa
1d770 72 65 20 74 68 65 20 73 74 72 69 6e 67 20 61 73  re the string as
1d780 20 61 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20   a command-line 
1d790 6f 70 74 69 6f 6e 20 77 69 74 68 20 65 69 74 68  option with eith
1d7a0 65 72 20 6f 6e 65 20 6f 72 20 74 77 6f 0a 2a 2a  er one or two.**
1d7b0 20 69 6e 69 74 69 61 6c 20 22 2d 22 20 63 68 61   initial "-" cha
1d7c0 72 61 63 74 65 72 73 2e 0a 2a 2f 0a 73 74 61 74  racters..*/.stat
1d7d0 69 63 20 69 6e 74 20 6f 70 74 69 6f 6e 4d 61 74  ic int optionMat
1d7e0 63 68 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ch(const char *z
1d7f0 53 74 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  Str, const char 
1d800 2a 7a 4f 70 74 29 7b 0a 20 20 69 66 28 20 7a 53  *zOpt){.  if( zS
1d810 74 72 5b 30 5d 21 3d 27 2d 27 20 29 20 72 65 74  tr[0]!='-' ) ret
1d820 75 72 6e 20 30 3b 0a 20 20 7a 53 74 72 2b 2b 3b  urn 0;.  zStr++;
1d830 0a 20 20 69 66 28 20 7a 53 74 72 5b 30 5d 3d 3d  .  if( zStr[0]==
1d840 27 2d 27 20 29 20 7a 53 74 72 2b 2b 3b 0a 20 20  '-' ) zStr++;.  
1d850 72 65 74 75 72 6e 20 73 74 72 63 6d 70 28 7a 53  return strcmp(zS
1d860 74 72 2c 20 7a 4f 70 74 29 3d 3d 30 3b 0a 7d 0a  tr, zOpt)==0;.}.
1d870 0a 2f 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 20  ./*.** Delete a 
1d880 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 68 65  file..*/.int she
1d890 6c 6c 44 65 6c 65 74 65 46 69 6c 65 28 63 6f 6e  llDeleteFile(con
1d8a0 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
1d8b0 6d 65 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 23  me){.  int rc;.#
1d8c0 69 66 64 65 66 20 5f 57 49 4e 33 32 0a 20 20 77  ifdef _WIN32.  w
1d8d0 63 68 61 72 5f 74 20 2a 7a 20 3d 20 73 71 6c 69  char_t *z = sqli
1d8e0 74 65 33 5f 77 69 6e 33 32 5f 75 74 66 38 5f 74  te3_win32_utf8_t
1d8f0 6f 5f 75 6e 69 63 6f 64 65 28 7a 46 69 6c 65 6e  o_unicode(zFilen
1d900 61 6d 65 29 3b 0a 20 20 72 63 20 3d 20 5f 77 75  ame);.  rc = _wu
1d910 6e 6c 69 6e 6b 28 7a 29 3b 0a 20 20 73 71 6c 69  nlink(z);.  sqli
1d920 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 23 65 6c  te3_free(z);.#el
1d930 73 65 0a 20 20 72 63 20 3d 20 75 6e 6c 69 6e 6b  se.  rc = unlink
1d940 28 7a 46 69 6c 65 6e 61 6d 65 29 3b 0a 23 65 6e  (zFilename);.#en
1d950 64 69 66 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  dif.  return rc;
1d960 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  .}.../*.** The i
1d970 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
1d980 20 53 51 4c 20 73 63 61 6c 61 72 20 66 75 6e 63   SQL scalar func
1d990 74 69 6f 6e 20 66 6b 65 79 5f 63 6f 6c 6c 61 74  tion fkey_collat
1d9a0 65 5f 63 6c 61 75 73 65 28 29 2c 20 75 73 65 64  e_clause(), used
1d9b0 0a 2a 2a 20 62 79 20 74 68 65 20 22 2e 6c 69 6e  .** by the ".lin
1d9c0 74 20 66 6b 65 79 2d 69 6e 64 65 78 65 73 22 20  t fkey-indexes" 
1d9d0 63 6f 6d 6d 61 6e 64 2e 20 54 68 69 73 20 73 63  command. This sc
1d9e0 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 69 73  alar function is
1d9f0 20 61 6c 77 61 79 73 0a 2a 2a 20 63 61 6c 6c 65   always.** calle
1da00 64 20 77 69 74 68 20 66 6f 75 72 20 61 72 67 75  d with four argu
1da10 6d 65 6e 74 73 20 2d 20 74 68 65 20 70 61 72 65  ments - the pare
1da20 6e 74 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 74  nt table name, t
1da30 68 65 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e  he parent column
1da40 20 6e 61 6d 65 2c 0a 2a 2a 20 74 68 65 20 63 68   name,.** the ch
1da50 69 6c 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 61  ild table name a
1da60 6e 64 20 74 68 65 20 63 68 69 6c 64 20 63 6f 6c  nd the child col
1da70 75 6d 6e 20 6e 61 6d 65 2e 0a 2a 2a 0a 2a 2a 20  umn name..**.** 
1da80 20 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63    fkey_collate_c
1da90 6c 61 75 73 65 28 27 70 61 72 65 6e 74 2d 74 61  lause('parent-ta
1daa0 62 27 2c 20 27 70 61 72 65 6e 74 2d 63 6f 6c 27  b', 'parent-col'
1dab0 2c 20 27 63 68 69 6c 64 2d 74 61 62 27 2c 20 27  , 'child-tab', '
1dac0 63 68 69 6c 64 2d 63 6f 6c 27 29 0a 2a 2a 0a 2a  child-col').**.*
1dad0 2a 20 49 66 20 65 69 74 68 65 72 20 6f 66 20 74  * If either of t
1dae0 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 73 20  he named tables 
1daf0 6f 72 20 63 6f 6c 75 6d 6e 73 20 64 6f 20 6e 6f  or columns do no
1db00 74 20 65 78 69 73 74 2c 20 74 68 69 73 20 66 75  t exist, this fu
1db10 6e 63 74 69 6f 6e 0a 2a 2a 20 72 65 74 75 72 6e  nction.** return
1db20 73 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  s an empty strin
1db30 67 2e 20 41 6e 20 65 6d 70 74 79 20 73 74 72 69  g. An empty stri
1db40 6e 67 20 69 73 20 61 6c 73 6f 20 72 65 74 75 72  ng is also retur
1db50 6e 65 64 20 69 66 20 62 6f 74 68 20 74 61 62 6c  ned if both tabl
1db60 65 73 0a 2a 2a 20 61 6e 64 20 63 6f 6c 75 6d 6e  es.** and column
1db70 73 20 65 78 69 73 74 20 62 75 74 20 68 61 76 65  s exist but have
1db80 20 74 68 65 20 73 61 6d 65 20 64 65 66 61 75 6c   the same defaul
1db90 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
1dba0 65 6e 63 65 2e 20 4f 72 2c 0a 2a 2a 20 69 66 20  ence. Or,.** if 
1dbb0 62 6f 74 68 20 65 78 69 73 74 20 62 75 74 20 74  both exist but t
1dbc0 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
1dbd0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 20 61  tion sequences a
1dbe0 72 65 20 64 69 66 66 65 72 65 6e 74 2c 20 74 68  re different, th
1dbf0 69 73 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 72  is.** function r
1dc00 65 74 75 72 6e 73 20 74 68 65 20 73 74 72 69 6e  eturns the strin
1dc10 67 20 22 20 43 4f 4c 4c 41 54 45 20 3c 70 61 72  g " COLLATE <par
1dc20 65 6e 74 2d 63 6f 6c 6c 61 74 69 6f 6e 3e 22 2c  ent-collation>",
1dc30 20 77 68 65 72 65 0a 2a 2a 20 3c 70 61 72 65 6e   where.** <paren
1dc40 74 2d 63 6f 6c 6c 61 74 69 6f 6e 3e 20 69 73 20  t-collation> is 
1dc50 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
1dc60 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f  ation sequence o
1dc70 66 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6c  f the parent col
1dc80 75 6d 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  umn..*/.static v
1dc90 6f 69 64 20 73 68 65 6c 6c 46 6b 65 79 43 6f 6c  oid shellFkeyCol
1dca0 6c 61 74 65 43 6c 61 75 73 65 28 0a 20 20 73 71  lateClause(.  sq
1dcb0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
1dcc0 43 74 78 2c 0a 20 20 69 6e 74 20 6e 56 61 6c 2c  Ctx,.  int nVal,
1dcd0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
1dce0 20 2a 2a 61 70 56 61 6c 0a 29 7b 0a 20 20 73 71   **apVal.){.  sq
1dcf0 6c 69 74 65 33 20 2a 64 62 20 3d 20 73 71 6c 69  lite3 *db = sqli
1dd00 74 65 33 5f 63 6f 6e 74 65 78 74 5f 64 62 5f 68  te3_context_db_h
1dd10 61 6e 64 6c 65 28 70 43 74 78 29 3b 0a 20 20 63  andle(pCtx);.  c
1dd20 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 72 65  onst char *zPare
1dd30 6e 74 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  nt;.  const char
1dd40 20 2a 7a 50 61 72 65 6e 74 43 6f 6c 3b 0a 20 20   *zParentCol;.  
1dd50 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 72  const char *zPar
1dd60 65 6e 74 53 65 71 3b 0a 20 20 63 6f 6e 73 74 20  entSeq;.  const 
1dd70 63 68 61 72 20 2a 7a 43 68 69 6c 64 3b 0a 20 20  char *zChild;.  
1dd80 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 68 69  const char *zChi
1dd90 6c 64 43 6f 6c 3b 0a 20 20 63 6f 6e 73 74 20 63  ldCol;.  const c
1dda0 68 61 72 20 2a 7a 43 68 69 6c 64 53 65 71 20 3d  har *zChildSeq =
1ddb0 20 30 3b 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69   0;  /* Initiali
1ddc0 7a 65 20 74 6f 20 61 76 6f 69 64 20 66 61 6c 73  ze to avoid fals
1ddd0 65 2d 70 6f 73 69 74 69 76 65 20 77 61 72 6e 69  e-positive warni
1dde0 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 0a  ng */.  int rc;.
1ddf0 0a 20 20 61 73 73 65 72 74 28 20 6e 56 61 6c 3d  .  assert( nVal=
1de00 3d 34 20 29 3b 0a 20 20 7a 50 61 72 65 6e 74 20  =4 );.  zParent 
1de10 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
1de20 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
1de30 74 28 61 70 56 61 6c 5b 30 5d 29 3b 0a 20 20 7a  t(apVal[0]);.  z
1de40 50 61 72 65 6e 74 43 6f 6c 20 3d 20 28 63 6f 6e  ParentCol = (con
1de50 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
1de60 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 70 56 61  _value_text(apVa
1de70 6c 5b 31 5d 29 3b 0a 20 20 7a 43 68 69 6c 64 20  l[1]);.  zChild 
1de80 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
1de90 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
1dea0 74 28 61 70 56 61 6c 5b 32 5d 29 3b 0a 20 20 7a  t(apVal[2]);.  z
1deb0 43 68 69 6c 64 43 6f 6c 20 3d 20 28 63 6f 6e 73  ChildCol = (cons
1dec0 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
1ded0 76 61 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c  value_text(apVal
1dee0 5b 33 5d 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33  [3]);..  sqlite3
1def0 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74  _result_text(pCt
1df00 78 2c 20 22 22 2c 20 2d 31 2c 20 53 51 4c 49 54  x, "", -1, SQLIT
1df10 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 72 63 20  E_STATIC);.  rc 
1df20 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  = sqlite3_table_
1df30 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28  column_metadata(
1df40 0a 20 20 20 20 20 20 64 62 2c 20 22 6d 61 69 6e  .      db, "main
1df50 22 2c 20 7a 50 61 72 65 6e 74 2c 20 7a 50 61 72  ", zParent, zPar
1df60 65 6e 74 43 6f 6c 2c 20 30 2c 20 26 7a 50 61 72  entCol, 0, &zPar
1df70 65 6e 74 53 65 71 2c 20 30 2c 20 30 2c 20 30 0a  entSeq, 0, 0, 0.
1df80 20 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53    );.  if( rc==S
1df90 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1dfa0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74 61 62  rc = sqlite3_tab
1dfb0 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
1dfc0 74 61 28 0a 20 20 20 20 20 20 20 20 64 62 2c 20  ta(.        db, 
1dfd0 22 6d 61 69 6e 22 2c 20 7a 43 68 69 6c 64 2c 20  "main", zChild, 
1dfe0 7a 43 68 69 6c 64 43 6f 6c 2c 20 30 2c 20 26 7a  zChildCol, 0, &z
1dff0 43 68 69 6c 64 53 65 71 2c 20 30 2c 20 30 2c 20  ChildSeq, 0, 0, 
1e000 30 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 0a 20 20  0.    );.  }..  
1e010 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1e020 4b 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72  K && sqlite3_str
1e030 69 63 6d 70 28 7a 50 61 72 65 6e 74 53 65 71 2c  icmp(zParentSeq,
1e040 20 7a 43 68 69 6c 64 53 65 71 29 20 29 7b 0a 20   zChildSeq) ){. 
1e050 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c     char *z = sql
1e060 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 20 43  ite3_mprintf(" C
1e070 4f 4c 4c 41 54 45 20 25 73 22 2c 20 7a 50 61 72  OLLATE %s", zPar
1e080 65 6e 74 53 65 71 29 3b 0a 20 20 20 20 73 71 6c  entSeq);.    sql
1e090 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
1e0a0 28 70 43 74 78 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pCtx, z, -1, SQ
1e0b0 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
1e0c0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
1e0d0 65 28 7a 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a  e(z);.  }.}.../*
1e0e0 0a 2a 2a 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e  .** The implemen
1e0f0 74 61 74 69 6f 6e 20 6f 66 20 64 6f 74 2d 63 6f  tation of dot-co
1e100 6d 6d 61 6e 64 20 22 2e 6c 69 6e 74 20 66 6b 65  mmand ".lint fke
1e110 79 2d 69 6e 64 65 78 65 73 22 2e 0a 2a 2f 0a 73  y-indexes"..*/.s
1e120 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 74 46 6b  tatic int lintFk
1e130 65 79 49 6e 64 65 78 65 73 28 0a 20 20 53 68 65  eyIndexes(.  She
1e140 6c 6c 53 74 61 74 65 20 2a 70 53 74 61 74 65 2c  llState *pState,
1e150 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e160 43 75 72 72 65 6e 74 20 73 68 65 6c 6c 20 74 6f  Current shell to
1e170 6f 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20 63 68  ol state */.  ch
1e180 61 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20 20 20  ar **azArg,     
1e190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e1a0 20 41 72 72 61 79 20 6f 66 20 61 72 67 75 6d 65   Array of argume
1e1b0 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 64 6f  nts passed to do
1e1c0 74 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  t command */.  i
1e1d0 6e 74 20 6e 41 72 67 20 20 20 20 20 20 20 20 20  nt nArg         
1e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e1f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
1e200 69 65 73 20 69 6e 20 61 7a 41 72 67 5b 5d 20 2a  ies in azArg[] *
1e210 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
1e220 64 62 20 3d 20 70 53 74 61 74 65 2d 3e 64 62 3b  db = pState->db;
1e230 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
1e240 73 65 20 68 61 6e 64 6c 65 20 74 6f 20 71 75 65  se handle to que
1e250 72 79 20 22 6d 61 69 6e 22 20 64 62 20 6f 66 20  ry "main" db of 
1e260 2a 2f 0a 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d  */.  FILE *out =
1e270 20 70 53 74 61 74 65 2d 3e 6f 75 74 3b 20 20 20   pState->out;   
1e280 20 20 20 20 20 2f 2a 20 53 74 72 65 61 6d 20 74       /* Stream t
1e290 6f 20 77 72 69 74 65 20 6e 6f 6e 2d 65 72 72 6f  o write non-erro
1e2a0 72 20 6f 75 74 70 75 74 20 74 6f 20 2a 2f 0a 20  r output to */. 
1e2b0 20 69 6e 74 20 62 56 65 72 62 6f 73 65 20 3d 20   int bVerbose = 
1e2c0 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
1e2d0 20 2f 2a 20 49 66 20 2d 76 65 72 62 6f 73 65 20   /* If -verbose 
1e2e0 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20 20  is present */.  
1e2f0 69 6e 74 20 62 47 72 6f 75 70 42 79 50 61 72 65  int bGroupByPare
1e300 6e 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  nt = 0;         
1e310 2f 2a 20 49 66 20 2d 67 72 6f 75 70 62 79 70 61  /* If -groupbypa
1e320 72 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74 20  rent is present 
1e330 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
1e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e350 20 20 20 20 20 2f 2a 20 54 6f 20 69 74 65 72 61       /* To itera
1e360 74 65 20 74 68 72 6f 75 67 68 20 61 7a 41 72 67  te through azArg
1e370 5b 5d 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  [] */.  const ch
1e380 61 72 20 2a 7a 49 6e 64 65 6e 74 20 3d 20 22 22  ar *zIndent = ""
1e390 3b 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 6d  ;       /* How m
1e3a0 75 63 68 20 74 6f 20 69 6e 64 65 6e 74 20 43 52  uch to indent CR
1e3b0 45 41 54 45 20 49 4e 44 45 58 20 62 79 20 2a 2f  EATE INDEX by */
1e3c0 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3e0 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
1e3f0 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73  e */.  sqlite3_s
1e400 74 6d 74 20 2a 70 53 71 6c 20 3d 20 30 3b 20 20  tmt *pSql = 0;  
1e410 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 69 6c         /* Compil
1e420 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51  ed version of SQ
1e430 4c 20 73 74 61 74 65 6d 65 6e 74 20 62 65 6c 6f  L statement belo
1e440 77 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  w */..  /*.  ** 
1e450 54 68 69 73 20 53 45 4c 45 43 54 20 73 74 61 74  This SELECT stat
1e460 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 20 6f 6e  ement returns on
1e470 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 66  e row for each f
1e480 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
1e490 72 61 69 6e 74 0a 20 20 2a 2a 20 69 6e 20 74 68  raint.  ** in th
1e4a0 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20  e schema of the 
1e4b0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 54  main database. T
1e4c0 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  he column values
1e4d0 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20   are:.  **.  ** 
1e4e0 30 2e 20 54 68 65 20 74 65 78 74 20 6f 66 20 61  0. The text of a
1e4f0 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
1e500 73 69 6d 69 6c 61 72 20 74 6f 3a 0a 20 20 2a 2a  similar to:.  **
1e510 0a 20 20 2a 2a 20 20 20 20 20 20 22 45 58 50 4c  .  **      "EXPL
1e520 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 53  AIN QUERY PLAN S
1e530 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 63 68 69  ELECT 1 FROM chi
1e540 6c 64 5f 74 61 62 6c 65 20 57 48 45 52 45 20 63  ld_table WHERE c
1e550 68 69 6c 64 5f 6b 65 79 3d 3f 22 0a 20 20 2a 2a  hild_key=?".  **
1e560 0a 20 20 2a 2a 20 20 20 20 54 68 69 73 20 53 45  .  **    This SE
1e570 4c 45 43 54 20 69 73 20 73 69 6d 69 6c 61 72 20  LECT is similar 
1e580 74 6f 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20  to the one that 
1e590 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  the foreign keys
1e5a0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a   implementation.
1e5b0 20 20 2a 2a 20 20 20 20 6e 65 65 64 73 20 74 6f    **    needs to
1e5c0 20 72 75 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 20   run internally 
1e5d0 6f 6e 20 63 68 69 6c 64 20 74 61 62 6c 65 73 2e  on child tables.
1e5e0 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   If there is an 
1e5f0 69 6e 64 65 78 20 74 68 61 74 20 63 61 6e 0a 20  index that can. 
1e600 20 2a 2a 20 20 20 20 62 65 20 75 73 65 64 20 74   **    be used t
1e610 6f 20 6f 70 74 69 6d 69 7a 65 20 74 68 69 73 20  o optimize this 
1e620 71 75 65 72 79 2c 20 74 68 65 6e 20 69 74 20 63  query, then it c
1e630 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  an also be used 
1e640 62 79 20 74 68 65 20 46 4b 0a 20 20 2a 2a 20 20  by the FK.  **  
1e650 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e    implementation
1e660 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 44 45 4c   to optimize DEL
1e670 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
1e680 61 74 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20  atements on the 
1e690 70 61 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 74  parent.  **    t
1e6a0 61 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  able..  **.  ** 
1e6b0 31 2e 20 41 20 47 4c 4f 42 20 70 61 74 74 65 72  1. A GLOB patter
1e6c0 6e 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 73  n suitable for s
1e6d0 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 29  qlite3_strglob()
1e6e0 2e 20 49 66 20 74 68 65 20 70 6c 61 6e 20 6f 75  . If the plan ou
1e6f0 74 70 75 74 20 62 79 0a 20 20 2a 2a 20 20 20 20  tput by.  **    
1e700 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
1e710 59 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e 64 20 6d  Y PLAN command m
1e720 61 74 63 68 65 73 20 74 68 69 73 20 70 61 74 74  atches this patt
1e730 65 72 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 63  ern, then the sc
1e740 68 65 6d 61 0a 20 20 2a 2a 20 20 20 20 63 6f 6e  hema.  **    con
1e750 74 61 69 6e 73 20 61 6e 20 69 6e 64 65 78 20 74  tains an index t
1e760 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20  hat can be used 
1e770 74 6f 20 6f 70 74 69 6d 69 7a 65 20 74 68 65 20  to optimize the 
1e780 71 75 65 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  query..  **.  **
1e790 20 32 2e 20 48 75 6d 61 6e 20 72 65 61 64 61 62   2. Human readab
1e7a0 6c 65 20 74 65 78 74 20 74 68 61 74 20 64 65 73  le text that des
1e7b0 63 72 69 62 65 73 20 74 68 65 20 63 68 69 6c 64  cribes the child
1e7c0 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d   table and colum
1e7d0 6e 73 2e 20 65 2e 67 2e 0a 20 20 2a 2a 0a 20 20  ns. e.g..  **.  
1e7e0 2a 2a 20 20 20 20 20 20 20 22 63 68 69 6c 64 5f  **       "child_
1e7f0 74 61 62 6c 65 28 63 68 69 6c 64 5f 6b 65 79 31  table(child_key1
1e800 2c 20 63 68 69 6c 64 5f 6b 65 79 32 29 22 0a 20  , child_key2)". 
1e810 20 2a 2a 0a 20 20 2a 2a 20 33 2e 20 48 75 6d 61   **.  ** 3. Huma
1e820 6e 20 72 65 61 64 61 62 6c 65 20 74 65 78 74 20  n readable text 
1e830 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
1e840 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20  he parent table 
1e850 61 6e 64 20 63 6f 6c 75 6d 6e 73 2e 20 65 2e 67  and columns. e.g
1e860 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20  ..  **.  **     
1e870 20 20 22 70 61 72 65 6e 74 5f 74 61 62 6c 65 28    "parent_table(
1e880 70 61 72 65 6e 74 5f 6b 65 79 31 2c 20 70 61 72  parent_key1, par
1e890 65 6e 74 5f 6b 65 79 32 29 22 0a 20 20 2a 2a 0a  ent_key2)".  **.
1e8a0 20 20 2a 2a 20 34 2e 20 41 20 66 75 6c 6c 20 43    ** 4. A full C
1e8b0 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74  REATE INDEX stat
1e8c0 65 6d 65 6e 74 20 66 6f 72 20 61 6e 20 69 6e 64  ement for an ind
1e8d0 65 78 20 74 68 61 74 20 63 6f 75 6c 64 20 62 65  ex that could be
1e8e0 20 75 73 65 64 20 74 6f 0a 20 20 2a 2a 20 20 20   used to.  **   
1e8f0 20 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45 54 45   optimize DELETE
1e900 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
1e910 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 70 61 72  ments on the par
1e920 65 6e 74 20 74 61 62 6c 65 2e 20 65 2e 67 2e 0a  ent table. e.g..
1e930 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20 20    **.  **       
1e940 22 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 68  "CREATE INDEX ch
1e950 69 6c 64 5f 74 61 62 6c 65 5f 63 68 69 6c 64 5f  ild_table_child_
1e960 6b 65 79 20 4f 4e 20 63 68 69 6c 64 5f 74 61 62  key ON child_tab
1e970 6c 65 28 63 68 69 6c 64 5f 6b 65 79 29 22 0a 20  le(child_key)". 
1e980 20 2a 2a 0a 20 20 2a 2a 20 35 2e 20 54 68 65 20   **.  ** 5. The 
1e990 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 61 72 65  name of the pare
1e9a0 6e 74 20 74 61 62 6c 65 2e 0a 20 20 2a 2a 0a 20  nt table..  **. 
1e9b0 20 2a 2a 20 54 68 65 73 65 20 73 69 78 20 76 61   ** These six va
1e9c0 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 62 79  lues are used by
1e9d0 20 74 68 65 20 43 20 6c 6f 67 69 63 20 62 65 6c   the C logic bel
1e9e0 6f 77 20 74 6f 20 67 65 6e 65 72 61 74 65 20 74  ow to generate t
1e9f0 68 65 20 72 65 70 6f 72 74 2e 0a 20 20 2a 2f 0a  he report..  */.
1ea00 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
1ea10 71 6c 20 3d 0a 20 20 22 53 45 4c 45 43 54 20 22  ql =.  "SELECT "
1ea20 0a 20 20 20 20 22 20 20 20 20 20 27 45 58 50 4c  .    "     'EXPL
1ea30 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 53  AIN QUERY PLAN S
1ea40 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 27 20 7c  ELECT 1 FROM ' |
1ea50 7c 20 71 75 6f 74 65 28 73 2e 6e 61 6d 65 29 20  | quote(s.name) 
1ea60 7c 7c 20 27 20 57 48 45 52 45 20 27 22 0a 20 20  || ' WHERE '".  
1ea70 20 20 22 20 20 7c 7c 20 67 72 6f 75 70 5f 63 6f    "  || group_co
1ea80 6e 63 61 74 28 71 75 6f 74 65 28 73 2e 6e 61 6d  ncat(quote(s.nam
1ea90 65 29 20 7c 7c 20 27 2e 27 20 7c 7c 20 71 75 6f  e) || '.' || quo
1eaa0 74 65 28 66 2e 5b 66 72 6f 6d 5d 29 20 7c 7c 20  te(f.[from]) || 
1eab0 27 3d 3f 27 20 22 0a 20 20 20 20 22 20 20 7c 7c  '=?' ".    "  ||
1eac0 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c   fkey_collate_cl
1ead0 61 75 73 65 28 22 0a 20 20 20 20 22 20 20 20 20  ause(".    "    
1eae0 20 20 20 66 2e 5b 74 61 62 6c 65 5d 2c 20 43 4f     f.[table], CO
1eaf0 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d 2c 20 70  ALESCE(f.[to], p
1eb00 2e 5b 6e 61 6d 65 5d 29 2c 20 73 2e 6e 61 6d 65  .[name]), s.name
1eb10 2c 20 66 2e 5b 66 72 6f 6d 5d 29 2c 27 20 41 4e  , f.[from]),' AN
1eb20 44 20 27 29 22 0a 20 20 20 20 22 2c 20 22 0a 20  D ')".    ", ". 
1eb30 20 20 20 22 20 20 20 20 20 27 53 45 41 52 43 48     "     'SEARCH
1eb40 20 54 41 42 4c 45 20 27 20 7c 7c 20 73 2e 6e 61   TABLE ' || s.na
1eb50 6d 65 20 7c 7c 20 27 20 55 53 49 4e 47 20 43 4f  me || ' USING CO
1eb60 56 45 52 49 4e 47 20 49 4e 44 45 58 2a 28 27 22  VERING INDEX*('"
1eb70 0a 20 20 20 20 22 20 20 7c 7c 20 67 72 6f 75 70  .    "  || group
1eb80 5f 63 6f 6e 63 61 74 28 27 2a 3d 3f 27 2c 20 27  _concat('*=?', '
1eb90 20 41 4e 44 20 27 29 20 7c 7c 20 27 29 27 22 0a   AND ') || ')'".
1eba0 20 20 20 20 22 2c 20 22 0a 20 20 20 20 22 20 20      ", ".    "  
1ebb0 20 20 20 73 2e 6e 61 6d 65 20 20 7c 7c 20 27 28     s.name  || '(
1ebc0 27 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61  ' || group_conca
1ebd0 74 28 66 2e 5b 66 72 6f 6d 5d 2c 20 20 27 2c 20  t(f.[from],  ', 
1ebe0 27 29 20 7c 7c 20 27 29 27 22 0a 20 20 20 20 22  ') || ')'".    "
1ebf0 2c 20 22 0a 20 20 20 20 22 20 20 20 20 20 66 2e  , ".    "     f.
1ec00 5b 74 61 62 6c 65 5d 20 7c 7c 20 27 28 27 20 7c  [table] || '(' |
1ec10 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 43  | group_concat(C
1ec20 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d 2c 20  OALESCE(f.[to], 
1ec30 70 2e 5b 6e 61 6d 65 5d 29 29 20 7c 7c 20 27 29  p.[name])) || ')
1ec40 27 22 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20  '".    ", ".    
1ec50 22 20 20 20 20 20 27 43 52 45 41 54 45 20 49 4e  "     'CREATE IN
1ec60 44 45 58 20 27 20 7c 7c 20 71 75 6f 74 65 28 73  DEX ' || quote(s
1ec70 2e 6e 61 6d 65 20 7c 7c 27 5f 27 7c 7c 20 67 72  .name ||'_'|| gr
1ec80 6f 75 70 5f 63 6f 6e 63 61 74 28 66 2e 5b 66 72  oup_concat(f.[fr
1ec90 6f 6d 5d 2c 20 27 5f 27 29 29 22 0a 20 20 20 20  om], '_'))".    
1eca0 22 20 20 7c 7c 20 27 20 4f 4e 20 27 20 7c 7c 20  "  || ' ON ' || 
1ecb0 71 75 6f 74 65 28 73 2e 6e 61 6d 65 29 20 7c 7c  quote(s.name) ||
1ecc0 20 27 28 27 22 0a 20 20 20 20 22 20 20 7c 7c 20   '('".    "  || 
1ecd0 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 71 75 6f  group_concat(quo
1ece0 74 65 28 66 2e 5b 66 72 6f 6d 5d 29 20 7c 7c 22  te(f.[from]) ||"
1ecf0 0a 20 20 20 20 22 20 20 20 20 20 20 20 20 66 6b  .    "        fk
1ed00 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73  ey_collate_claus
1ed10 65 28 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  e(".    "       
1ed20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 2c 20 43 4f     f.[table], CO
1ed30 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d 2c 20 70  ALESCE(f.[to], p
1ed40 2e 5b 6e 61 6d 65 5d 29 2c 20 73 2e 6e 61 6d 65  .[name]), s.name
1ed50 2c 20 66 2e 5b 66 72 6f 6d 5d 29 2c 20 27 2c 20  , f.[from]), ', 
1ed60 27 29 22 0a 20 20 20 20 22 20 20 7c 7c 20 27 29  ')".    "  || ')
1ed70 3b 27 22 0a 20 20 20 20 22 2c 20 22 0a 20 20 20  ;'".    ", ".   
1ed80 20 22 20 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d   "     f.[table]
1ed90 20 22 0a 20 20 20 20 22 46 52 4f 4d 20 73 71 6c   ".    "FROM sql
1eda0 69 74 65 5f 6d 61 73 74 65 72 20 41 53 20 73 2c  ite_master AS s,
1edb0 20 70 72 61 67 6d 61 5f 66 6f 72 65 69 67 6e 5f   pragma_foreign_
1edc0 6b 65 79 5f 6c 69 73 74 28 73 2e 6e 61 6d 65 29  key_list(s.name)
1edd0 20 41 53 20 66 20 22 0a 20 20 20 20 22 4c 45 46   AS f ".    "LEF
1ede0 54 20 4a 4f 49 4e 20 70 72 61 67 6d 61 5f 74 61  T JOIN pragma_ta
1edf0 62 6c 65 5f 69 6e 66 6f 20 41 53 20 70 20 4f 4e  ble_info AS p ON
1ee00 20 28 70 6b 2d 31 3d 73 65 71 20 41 4e 44 20 70   (pk-1=seq AND p
1ee10 2e 61 72 67 3d 66 2e 5b 74 61 62 6c 65 5d 29 20  .arg=f.[table]) 
1ee20 22 0a 20 20 20 20 22 47 52 4f 55 50 20 42 59 20  ".    "GROUP BY 
1ee30 73 2e 6e 61 6d 65 2c 20 66 2e 69 64 20 22 0a 20  s.name, f.id ". 
1ee40 20 20 20 22 4f 52 44 45 52 20 42 59 20 28 43 41     "ORDER BY (CA
1ee50 53 45 20 57 48 45 4e 20 3f 20 54 48 45 4e 20 66  SE WHEN ? THEN f
1ee60 2e 5b 74 61 62 6c 65 5d 20 45 4c 53 45 20 73 2e  .[table] ELSE s.
1ee70 6e 61 6d 65 20 45 4e 44 29 22 0a 20 20 3b 0a 20  name END)".  ;. 
1ee80 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 47 6c   const char *zGl
1ee90 6f 62 49 50 4b 20 3d 20 22 53 45 41 52 43 48 20  obIPK = "SEARCH 
1eea0 54 41 42 4c 45 20 2a 20 55 53 49 4e 47 20 49 4e  TABLE * USING IN
1eeb0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1eec0 59 20 28 72 6f 77 69 64 3d 3f 29 22 3b 0a 0a 20  Y (rowid=?)";.. 
1eed0 20 66 6f 72 28 69 3d 32 3b 20 69 3c 6e 41 72 67   for(i=2; i<nArg
1eee0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 6e 74 20  ; i++){.    int 
1eef0 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  n = (int)strlen(
1ef00 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 69  azArg[i]);.    i
1ef10 66 28 20 6e 3e 31 20 26 26 20 73 71 6c 69 74 65  f( n>1 && sqlite
1ef20 33 5f 73 74 72 6e 69 63 6d 70 28 22 2d 76 65 72  3_strnicmp("-ver
1ef30 62 6f 73 65 22 2c 20 61 7a 41 72 67 5b 69 5d 2c  bose", azArg[i],
1ef40 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   n)==0 ){.      
1ef50 62 56 65 72 62 6f 73 65 20 3d 20 31 3b 0a 20 20  bVerbose = 1;.  
1ef60 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 28    }.    else if(
1ef70 20 6e 3e 31 20 26 26 20 73 71 6c 69 74 65 33 5f   n>1 && sqlite3_
1ef80 73 74 72 6e 69 63 6d 70 28 22 2d 67 72 6f 75 70  strnicmp("-group
1ef90 62 79 70 61 72 65 6e 74 22 2c 20 61 7a 41 72 67  byparent", azArg
1efa0 5b 69 5d 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  [i], n)==0 ){.  
1efb0 20 20 20 20 62 47 72 6f 75 70 42 79 50 61 72 65      bGroupByPare
1efc0 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 7a 49  nt = 1;.      zI
1efd0 6e 64 65 6e 74 20 3d 20 22 20 20 20 20 22 3b 0a  ndent = "    ";.
1efe0 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 7b 0a      }.    else{.
1eff0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1f000 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
1f010 20 25 73 20 25 73 20 3f 2d 76 65 72 62 6f 73 65   %s %s ?-verbose
1f020 3f 20 3f 2d 67 72 6f 75 70 62 79 70 61 72 65 6e  ? ?-groupbyparen
1f030 74 3f 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  t?\n",.         
1f040 20 61 7a 41 72 67 5b 30 5d 2c 20 61 7a 41 72 67   azArg[0], azArg
1f050 5b 31 5d 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  [1].      );.   
1f060 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1f070 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
1f080 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
1f090 20 74 68 65 20 66 6b 65 79 5f 63 6f 6c 6c 61 74   the fkey_collat
1f0a0 65 5f 63 6c 61 75 73 65 28 29 20 53 51 4c 20 66  e_clause() SQL f
1f0b0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 72 63 20  unction */.  rc 
1f0c0 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
1f0d0 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 66  _function(db, "f
1f0e0 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75  key_collate_clau
1f0f0 73 65 22 2c 20 34 2c 20 53 51 4c 49 54 45 5f 55  se", 4, SQLITE_U
1f100 54 46 38 2c 0a 20 20 20 20 20 20 30 2c 20 73 68  TF8,.      0, sh
1f110 65 6c 6c 46 6b 65 79 43 6f 6c 6c 61 74 65 43 6c  ellFkeyCollateCl
1f120 61 75 73 65 2c 20 30 2c 20 30 0a 20 20 29 3b 0a  ause, 0, 0.  );.
1f130 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ..  if( rc==SQLI
1f140 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
1f150 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
1f160 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c 20 2d  e_v2(db, zSql, -
1f170 31 2c 20 26 70 53 71 6c 2c 20 30 29 3b 0a 20 20  1, &pSql, 0);.  
1f180 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
1f190 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c  TE_OK ){.    sql
1f1a0 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 70 53  ite3_bind_int(pS
1f1b0 71 6c 2c 20 31 2c 20 62 47 72 6f 75 70 42 79 50  ql, 1, bGroupByP
1f1c0 61 72 65 6e 74 29 3b 0a 20 20 7d 0a 0a 20 20 69  arent);.  }..  i
1f1d0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1f1e0 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63 32 3b   ){.    int rc2;
1f1f0 0a 20 20 20 20 63 68 61 72 20 2a 7a 50 72 65 76  .    char *zPrev
1f200 20 3d 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28   = 0;.    while(
1f210 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c   SQLITE_ROW==sql
1f220 69 74 65 33 5f 73 74 65 70 28 70 53 71 6c 29 20  ite3_step(pSql) 
1f230 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 72 65 73  ){.      int res
1f240 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 73 71 6c   = -1;.      sql
1f250 69 74 65 33 5f 73 74 6d 74 20 2a 70 45 78 70 6c  ite3_stmt *pExpl
1f260 61 69 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 63  ain = 0;.      c
1f270 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 51 50 20  onst char *zEQP 
1f280 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
1f290 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1f2a0 78 74 28 70 53 71 6c 2c 20 30 29 3b 0a 20 20 20  xt(pSql, 0);.   
1f2b0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1f2c0 47 6c 6f 62 20 3d 20 28 63 6f 6e 73 74 20 63 68  Glob = (const ch
1f2d0 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
1f2e0 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 31 29  mn_text(pSql, 1)
1f2f0 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  ;.      const ch
1f300 61 72 20 2a 7a 46 72 6f 6d 20 3d 20 28 63 6f 6e  ar *zFrom = (con
1f310 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
1f320 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71  _column_text(pSq
1f330 6c 2c 20 32 29 3b 0a 20 20 20 20 20 20 63 6f 6e  l, 2);.      con
1f340 73 74 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74  st char *zTarget
1f350 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
1f360 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
1f370 65 78 74 28 70 53 71 6c 2c 20 33 29 3b 0a 20 20  ext(pSql, 3);.  
1f380 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1f390 7a 43 49 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  zCI = (const cha
1f3a0 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
1f3b0 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 34 29 3b  n_text(pSql, 4);
1f3c0 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
1f3d0 72 20 2a 7a 50 61 72 65 6e 74 20 3d 20 28 63 6f  r *zParent = (co
1f3e0 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
1f3f0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
1f400 71 6c 2c 20 35 29 3b 0a 0a 20 20 20 20 20 20 72  ql, 5);..      r
1f410 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
1f420 61 72 65 5f 76 32 28 64 62 2c 20 7a 45 51 50 2c  are_v2(db, zEQP,
1f430 20 2d 31 2c 20 26 70 45 78 70 6c 61 69 6e 2c 20   -1, &pExplain, 
1f440 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
1f450 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 62 72  !=SQLITE_OK ) br
1f460 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 53  eak;.      if( S
1f470 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74  QLITE_ROW==sqlit
1f480 65 33 5f 73 74 65 70 28 70 45 78 70 6c 61 69 6e  e3_step(pExplain
1f490 29 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e  ) ){.        con
1f4a0 73 74 20 63 68 61 72 20 2a 7a 50 6c 61 6e 20 3d  st char *zPlan =
1f4b0 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
1f4c0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
1f4d0 74 28 70 45 78 70 6c 61 69 6e 2c 20 33 29 3b 0a  t(pExplain, 3);.
1f4e0 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 28 0a          res = (.
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 3d                0=
1f500 3d 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62  =sqlite3_strglob
1f510 28 7a 47 6c 6f 62 2c 20 7a 50 6c 61 6e 29 0a 20  (zGlob, zPlan). 
1f520 20 20 20 20 20 20 20 20 20 20 7c 7c 20 30 3d 3d            || 0==
1f530 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28  sqlite3_strglob(
1f540 7a 47 6c 6f 62 49 50 4b 2c 20 7a 50 6c 61 6e 29  zGlobIPK, zPlan)
1f550 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20  .        );.    
1f560 20 20 7d 0a 20 20 20 20 20 20 72 63 20 3d 20 73    }.      rc = s
1f570 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1f580 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20  pExplain);.     
1f590 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1f5a0 4f 4b 20 29 20 62 72 65 61 6b 3b 0a 0a 20 20 20  OK ) break;..   
1f5b0 20 20 20 69 66 28 20 72 65 73 3c 30 20 29 7b 0a     if( res<0 ){.
1f5c0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
1f5d0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1f5e0 72 3a 20 69 6e 74 65 72 6e 61 6c 20 65 72 72 6f  r: internal erro
1f5f0 72 22 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  r");.        bre
1f600 61 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ak;.      }else{
1f610 0a 20 20 20 20 20 20 20 20 69 66 28 20 62 47 72  .        if( bGr
1f620 6f 75 70 42 79 50 61 72 65 6e 74 0a 20 20 20 20  oupByParent.    
1f630 20 20 20 20 26 26 20 28 62 56 65 72 62 6f 73 65      && (bVerbose
1f640 20 7c 7c 20 72 65 73 3d 3d 30 29 0a 20 20 20 20   || res==0).    
1f650 20 20 20 20 26 26 20 28 7a 50 72 65 76 3d 3d 30      && (zPrev==0
1f660 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74 72 69   || sqlite3_stri
1f670 63 6d 70 28 7a 50 61 72 65 6e 74 2c 20 7a 50 72  cmp(zParent, zPr
1f680 65 76 29 29 0a 20 20 20 20 20 20 20 20 29 7b 0a  ev)).        ){.
1f690 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
1f6a0 69 6e 74 66 28 6f 75 74 2c 20 22 2d 2d 20 50 61  intf(out, "-- Pa
1f6b0 72 65 6e 74 20 74 61 62 6c 65 20 25 73 5c 6e 22  rent table %s\n"
1f6c0 2c 20 7a 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  , zParent);.    
1f6d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
1f6e0 65 65 28 7a 50 72 65 76 29 3b 0a 20 20 20 20 20  ee(zPrev);.     
1f6f0 20 20 20 20 20 7a 50 72 65 76 20 3d 20 73 71 6c       zPrev = sql
1f700 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
1f710 22 2c 20 7a 50 61 72 65 6e 74 29 3b 0a 20 20 20  ", zParent);.   
1f720 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
1f730 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
1f740 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
1f750 74 66 28 6f 75 74 2c 20 22 25 73 25 73 20 2d 2d  tf(out, "%s%s --
1f760 3e 20 25 73 5c 6e 22 2c 20 7a 49 6e 64 65 6e 74  > %s\n", zIndent
1f770 2c 20 7a 43 49 2c 20 7a 54 61 72 67 65 74 29 3b  , zCI, zTarget);
1f780 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69  .        }else i
1f790 66 28 20 62 56 65 72 62 6f 73 65 20 29 7b 0a 20  f( bVerbose ){. 
1f7a0 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
1f7b0 6e 74 66 28 6f 75 74 2c 20 22 25 73 2f 2a 20 6e  ntf(out, "%s/* n
1f7c0 6f 20 65 78 74 72 61 20 69 6e 64 65 78 65 73 20  o extra indexes 
1f7d0 72 65 71 75 69 72 65 64 20 66 6f 72 20 25 73 20  required for %s 
1f7e0 2d 3e 20 25 73 20 2a 2f 5c 6e 22 2c 0a 20 20 20  -> %s */\n",.   
1f7f0 20 20 20 20 20 20 20 20 20 20 20 7a 49 6e 64 65             zInde
1f800 6e 74 2c 20 7a 46 72 6f 6d 2c 20 7a 54 61 72 67  nt, zFrom, zTarg
1f810 65 74 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a  et.          );.
1f820 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1f830 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
1f840 74 65 33 5f 66 72 65 65 28 7a 50 72 65 76 29 3b  te3_free(zPrev);
1f850 0a 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ..    if( rc!=SQ
1f860 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1f870 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
1f880 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69  rr, "%s\n", sqli
1f890 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b  te3_errmsg(db));
1f8a0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 63 32 20  .    }..    rc2 
1f8b0 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
1f8c0 7a 65 28 70 53 71 6c 29 3b 0a 20 20 20 20 69 66  ze(pSql);.    if
1f8d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1f8e0 26 26 20 72 63 32 21 3d 53 51 4c 49 54 45 5f 4f  && rc2!=SQLITE_O
1f8f0 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
1f900 72 63 32 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  rc2;.      raw_p
1f910 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25  rintf(stderr, "%
1f920 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72  s\n", sqlite3_er
1f930 72 6d 73 67 28 64 62 29 29 3b 0a 20 20 20 20 7d  rmsg(db));.    }
1f940 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 61  .  }else{.    ra
1f950 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1f960 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33   "%s\n", sqlite3
1f970 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20  _errmsg(db));.  
1f980 7d 0a 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  }..  return rc;.
1f990 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65  }../*.** Impleme
1f9a0 6e 74 61 74 69 6f 6e 20 6f 66 20 22 2e 6c 69 6e  ntation of ".lin
1f9b0 74 22 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 2e 0a  t" dot command..
1f9c0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6c 69  */.static int li
1f9d0 6e 74 44 6f 74 43 6f 6d 6d 61 6e 64 28 0a 20 20  ntDotCommand(.  
1f9e0 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 53 74 61  ShellState *pSta
1f9f0 74 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  te,             
1fa00 2f 2a 20 43 75 72 72 65 6e 74 20 73 68 65 6c 6c  /* Current shell
1fa10 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a 2f 0a 20   tool state */. 
1fa20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 20   char **azArg,  
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa40 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 61 72 67   /* Array of arg
1fa50 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f  uments passed to
1fa60 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a   dot command */.
1fa70 20 20 69 6e 74 20 6e 41 72 67 20 20 20 20 20 20    int nArg      
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa90 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1faa0 6e 74 72 69 65 73 20 69 6e 20 61 7a 41 72 67 5b  ntries in azArg[
1fab0 5d 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6e 3b  ] */.){.  int n;
1fac0 0a 20 20 6e 20 3d 20 28 6e 41 72 67 3e 3d 32 20  .  n = (nArg>=2 
1fad0 3f 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a  ? (int)strlen(az
1fae0 41 72 67 5b 31 5d 29 20 3a 20 30 29 3b 0a 20 20  Arg[1]) : 0);.  
1faf0 69 66 28 20 6e 3c 31 20 7c 7c 20 73 71 6c 69 74  if( n<1 || sqlit
1fb00 65 33 5f 73 74 72 6e 69 63 6d 70 28 61 7a 41 72  e3_strnicmp(azAr
1fb10 67 5b 31 5d 2c 20 22 66 6b 65 79 2d 69 6e 64 65  g[1], "fkey-inde
1fb20 78 65 73 22 2c 20 6e 29 20 29 20 67 6f 74 6f 20  xes", n) ) goto 
1fb30 75 73 61 67 65 3b 0a 20 20 72 65 74 75 72 6e 20  usage;.  return 
1fb40 6c 69 6e 74 46 6b 65 79 49 6e 64 65 78 65 73 28  lintFkeyIndexes(
1fb50 70 53 74 61 74 65 2c 20 61 7a 41 72 67 2c 20 6e  pState, azArg, n
1fb60 41 72 67 29 3b 0a 0a 20 75 73 61 67 65 3a 0a 20  Arg);.. usage:. 
1fb70 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
1fb80 72 72 2c 20 22 55 73 61 67 65 20 25 73 20 73 75  rr, "Usage %s su
1fb90 62 2d 63 6f 6d 6d 61 6e 64 20 3f 73 77 69 74 63  b-command ?switc
1fba0 68 65 73 2e 2e 2e 3f 5c 6e 22 2c 20 61 7a 41 72  hes...?\n", azAr
1fbb0 67 5b 30 5d 29 3b 0a 20 20 72 61 77 5f 70 72 69  g[0]);.  raw_pri
1fbc0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 57 68 65  ntf(stderr, "Whe
1fbd0 72 65 20 73 75 62 2d 63 6f 6d 6d 61 6e 64 73 20  re sub-commands 
1fbe0 61 72 65 3a 5c 6e 22 29 3b 0a 20 20 72 61 77 5f  are:\n");.  raw_
1fbf0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1fc00 20 20 20 20 66 6b 65 79 2d 69 6e 64 65 78 65 73      fkey-indexes
1fc10 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 53  \n");.  return S
1fc20 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 7d 0a 0a  QLITE_ERROR;.}..
1fc30 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61  /*.** Implementa
1fc40 74 69 6f 6e 20 6f 66 20 22 2e 65 78 70 65 72 74  tion of ".expert
1fc50 22 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 2e 0a 2a  " dot command..*
1fc60 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65 78 70  /.static int exp
1fc70 65 72 74 44 6f 74 43 6f 6d 6d 61 6e 64 28 0a 20  ertDotCommand(. 
1fc80 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 53 74   ShellState *pSt
1fc90 61 74 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  ate,            
1fca0 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 68 65 6c   /* Current shel
1fcb0 6c 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a 2f 0a  l tool state */.
1fcc0 20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20    char **azArg, 
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fce0 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 61 72    /* Array of ar
1fcf0 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74  guments passed t
1fd00 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20 2a 2f  o dot command */
1fd10 0a 20 20 69 6e 74 20 6e 41 72 67 20 20 20 20 20  .  int nArg     
1fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd30 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1fd40 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 41 72 67  entries in azArg
1fd50 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72  [] */.){.  int r
1fd60 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
1fd70 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b   char *zErr = 0;
1fd80 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
1fd90 69 53 61 6d 70 6c 65 20 3d 20 30 3b 0a 0a 20 20  iSample = 0;..  
1fda0 61 73 73 65 72 74 28 20 70 53 74 61 74 65 2d 3e  assert( pState->
1fdb0 65 78 70 65 72 74 2e 70 45 78 70 65 72 74 3d 3d  expert.pExpert==
1fdc0 30 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 70  0 );.  memset(&p
1fdd0 53 74 61 74 65 2d 3e 65 78 70 65 72 74 2c 20 30  State->expert, 0
1fde0 2c 20 73 69 7a 65 6f 66 28 45 78 70 65 72 74 49  , sizeof(ExpertI
1fdf0 6e 66 6f 29 29 3b 0a 0a 20 20 66 6f 72 28 69 3d  nfo));..  for(i=
1fe00 31 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  1; rc==SQLITE_OK
1fe10 20 26 26 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29   && i<nArg; i++)
1fe20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20  {.    char *z = 
1fe30 61 7a 41 72 67 5b 69 5d 3b 0a 20 20 20 20 69 6e  azArg[i];.    in
1fe40 74 20 6e 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30  t n;.    if( z[0
1fe50 5d 3d 3d 27 2d 27 20 26 26 20 7a 5b 31 5d 3d 3d  ]=='-' && z[1]==
1fe60 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 6e  '-' ) z++;.    n
1fe70 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20   = strlen(z);.  
1fe80 20 20 69 66 28 20 6e 3e 3d 32 20 26 26 20 30 3d    if( n>=2 && 0=
1fe90 3d 73 74 72 6e 63 6d 70 28 7a 2c 20 22 2d 76 65  =strncmp(z, "-ve
1fea0 72 62 6f 73 65 22 2c 20 6e 29 20 29 7b 0a 20 20  rbose", n) ){.  
1feb0 20 20 20 20 70 53 74 61 74 65 2d 3e 65 78 70 65      pState->expe
1fec0 72 74 2e 62 56 65 72 62 6f 73 65 20 3d 20 31 3b  rt.bVerbose = 1;
1fed0 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20  .    }.    else 
1fee0 69 66 28 20 6e 3e 3d 32 20 26 26 20 30 3d 3d 73  if( n>=2 && 0==s
1fef0 74 72 6e 63 6d 70 28 7a 2c 20 22 2d 73 61 6d 70  trncmp(z, "-samp
1ff00 6c 65 22 2c 20 6e 29 20 29 7b 0a 20 20 20 20 20  le", n) ){.     
1ff10 20 69 66 28 20 69 3d 3d 28 6e 41 72 67 2d 31 29   if( i==(nArg-1)
1ff20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
1ff30 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1ff40 6f 70 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20  option requires 
1ff50 61 6e 20 61 72 67 75 6d 65 6e 74 3a 20 25 73 5c  an argument: %s\
1ff60 6e 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20  n", z);.        
1ff70 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
1ff80 52 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  R;.      }else{.
1ff90 20 20 20 20 20 20 20 20 69 53 61 6d 70 6c 65 20          iSample 
1ffa0 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61  = (int)integerVa
1ffb0 6c 75 65 28 61 7a 41 72 67 5b 2b 2b 69 5d 29 3b  lue(azArg[++i]);
1ffc0 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 53 61  .        if( iSa
1ffd0 6d 70 6c 65 3c 30 20 7c 7c 20 69 53 61 6d 70 6c  mple<0 || iSampl
1ffe0 65 3e 31 30 30 20 29 7b 0a 20 20 20 20 20 20 20  e>100 ){.       
1fff0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
20000 64 65 72 72 2c 20 22 76 61 6c 75 65 20 6f 75 74  derr, "value out
20010 20 6f 66 20 72 61 6e 67 65 3a 20 25 73 5c 6e 22   of range: %s\n"
20020 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
20030 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
20040 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
20050 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
20060 7d 0a 20 20 20 20 65 6c 73 65 7b 0a 20 20 20 20  }.    else{.    
20070 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
20080 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f 70  err, "unknown op
20090 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 7a 29 3b  tion: %s\n", z);
200a0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
200b0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  TE_ERROR;.    }.
200c0 20 20 7d 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53    }..  if( rc==S
200d0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
200e0 70 53 74 61 74 65 2d 3e 65 78 70 65 72 74 2e 70  pState->expert.p
200f0 45 78 70 65 72 74 20 3d 20 73 71 6c 69 74 65 33  Expert = sqlite3
20100 5f 65 78 70 65 72 74 5f 6e 65 77 28 70 53 74 61  _expert_new(pSta
20110 74 65 2d 3e 64 62 2c 20 26 7a 45 72 72 29 3b 0a  te->db, &zErr);.
20120 20 20 20 20 69 66 28 20 70 53 74 61 74 65 2d 3e      if( pState->
20130 65 78 70 65 72 74 2e 70 45 78 70 65 72 74 3d 3d  expert.pExpert==
20140 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
20150 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 73  rintf(stderr, "s
20160 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f 6e 65  qlite3_expert_ne
20170 77 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 29 3b  w: %s\n", zErr);
20180 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
20190 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65  TE_ERROR;.    }e
201a0 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
201b0 65 33 5f 65 78 70 65 72 74 5f 63 6f 6e 66 69 67  e3_expert_config
201c0 28 0a 20 20 20 20 20 20 20 20 20 20 70 53 74 61  (.          pSta
201d0 74 65 2d 3e 65 78 70 65 72 74 2e 70 45 78 70 65  te->expert.pExpe
201e0 72 74 2c 20 45 58 50 45 52 54 5f 43 4f 4e 46 49  rt, EXPERT_CONFI
201f0 47 5f 53 41 4d 50 4c 45 2c 20 69 53 61 6d 70 6c  G_SAMPLE, iSampl
20200 65 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d  e.      );.    }
20210 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 72  .  }..  return r
20220 63 3b 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 49 66  c;.}..../*.** If
20230 20 61 6e 20 69 6e 70 75 74 20 6c 69 6e 65 20 62   an input line b
20240 65 67 69 6e 73 20 77 69 74 68 20 22 2e 22 20 74  egins with "." t
20250 68 65 6e 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  hen invoke this 
20260 72 6f 75 74 69 6e 65 20 74 6f 0a 2a 2a 20 70 72  routine to.** pr
20270 6f 63 65 73 73 20 74 68 61 74 20 6c 69 6e 65 2e  ocess that line.
20280 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20  .**.** Return 1 
20290 6f 6e 20 65 72 72 6f 72 2c 20 32 20 74 6f 20 65  on error, 2 to e
202a0 78 69 74 2c 20 61 6e 64 20 30 20 6f 74 68 65 72  xit, and 0 other
202b0 77 69 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  wise..*/.static 
202c0 69 6e 74 20 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d  int do_meta_comm
202d0 61 6e 64 28 63 68 61 72 20 2a 7a 4c 69 6e 65 2c  and(char *zLine,
202e0 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b   ShellState *p){
202f0 0a 20 20 69 6e 74 20 68 20 3d 20 31 3b 0a 20 20  .  int h = 1;.  
20300 69 6e 74 20 6e 41 72 67 20 3d 20 30 3b 0a 20 20  int nArg = 0;.  
20310 69 6e 74 20 6e 2c 20 63 3b 0a 20 20 69 6e 74 20  int n, c;.  int 
20320 72 63 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a  rc = 0;.  char *
20330 61 7a 41 72 67 5b 35 30 5d 3b 0a 0a 20 20 69 66  azArg[50];..  if
20340 28 20 70 2d 3e 65 78 70 65 72 74 2e 70 45 78 70  ( p->expert.pExp
20350 65 72 74 20 29 7b 0a 20 20 20 20 65 78 70 65 72  ert ){.    exper
20360 74 46 69 6e 69 73 68 28 70 2c 20 31 2c 20 30 29  tFinish(p, 1, 0)
20370 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 61 72 73  ;.  }..  /* Pars
20380 65 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e 65  e the input line
20390 20 69 6e 74 6f 20 74 6f 6b 65 6e 73 2e 0a 20 20   into tokens..  
203a0 2a 2f 0a 20 20 77 68 69 6c 65 28 20 7a 4c 69 6e  */.  while( zLin
203b0 65 5b 68 5d 20 26 26 20 6e 41 72 67 3c 41 72 72  e[h] && nArg<Arr
203c0 61 79 53 69 7a 65 28 61 7a 41 72 67 29 20 29 7b  aySize(azArg) ){
203d0 0a 20 20 20 20 77 68 69 6c 65 28 20 49 73 53 70  .    while( IsSp
203e0 61 63 65 28 7a 4c 69 6e 65 5b 68 5d 29 20 29 7b  ace(zLine[h]) ){
203f0 20 68 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20   h++; }.    if( 
20400 7a 4c 69 6e 65 5b 68 5d 3d 3d 30 20 29 20 62 72  zLine[h]==0 ) br
20410 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 7a 4c 69  eak;.    if( zLi
20420 6e 65 5b 68 5d 3d 3d 27 5c 27 27 20 7c 7c 20 7a  ne[h]=='\'' || z
20430 4c 69 6e 65 5b 68 5d 3d 3d 27 22 27 20 29 7b 0a  Line[h]=='"' ){.
20440 20 20 20 20 20 20 69 6e 74 20 64 65 6c 69 6d 20        int delim 
20450 3d 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 3b 0a 20 20  = zLine[h++];.  
20460 20 20 20 20 61 7a 41 72 67 5b 6e 41 72 67 2b 2b      azArg[nArg++
20470 5d 20 3d 20 26 7a 4c 69 6e 65 5b 68 5d 3b 0a 20  ] = &zLine[h];. 
20480 20 20 20 20 20 77 68 69 6c 65 28 20 7a 4c 69 6e       while( zLin
20490 65 5b 68 5d 20 26 26 20 7a 4c 69 6e 65 5b 68 5d  e[h] && zLine[h]
204a0 21 3d 64 65 6c 69 6d 20 29 7b 0a 20 20 20 20 20  !=delim ){.     
204b0 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 3d     if( zLine[h]=
204c0 3d 27 5c 5c 27 20 26 26 20 64 65 6c 69 6d 3d 3d  ='\\' && delim==
204d0 27 22 27 20 26 26 20 7a 4c 69 6e 65 5b 68 2b 31  '"' && zLine[h+1
204e0 5d 21 3d 30 20 29 20 68 2b 2b 3b 0a 20 20 20 20  ]!=0 ) h++;.    
204f0 20 20 20 20 68 2b 2b 3b 0a 20 20 20 20 20 20 7d      h++;.      }
20500 0a 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65  .      if( zLine
20510 5b 68 5d 3d 3d 64 65 6c 69 6d 20 29 7b 0a 20 20  [h]==delim ){.  
20520 20 20 20 20 20 20 7a 4c 69 6e 65 5b 68 2b 2b 5d        zLine[h++]
20530 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
20540 20 20 20 20 69 66 28 20 64 65 6c 69 6d 3d 3d 27      if( delim=='
20550 22 27 20 29 20 72 65 73 6f 6c 76 65 5f 62 61 63  "' ) resolve_bac
20560 6b 73 6c 61 73 68 65 73 28 61 7a 41 72 67 5b 6e  kslashes(azArg[n
20570 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20 7d 65 6c  Arg-1]);.    }el
20580 73 65 7b 0a 20 20 20 20 20 20 61 7a 41 72 67 5b  se{.      azArg[
20590 6e 41 72 67 2b 2b 5d 20 3d 20 26 7a 4c 69 6e 65  nArg++] = &zLine
205a0 5b 68 5d 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  [h];.      while
205b0 28 20 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 21 49  ( zLine[h] && !I
205c0 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d 29  sSpace(zLine[h])
205d0 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20 20   ){ h++; }.     
205e0 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 20 29 20   if( zLine[h] ) 
205f0 7a 4c 69 6e 65 5b 68 2b 2b 5d 20 3d 20 30 3b 0a  zLine[h++] = 0;.
20600 20 20 20 20 20 20 72 65 73 6f 6c 76 65 5f 62 61        resolve_ba
20610 63 6b 73 6c 61 73 68 65 73 28 61 7a 41 72 67 5b  ckslashes(azArg[
20620 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20 7d 0a  nArg-1]);.    }.
20630 20 20 7d 0a 0a 20 20 2f 2a 20 50 72 6f 63 65 73    }..  /* Proces
20640 73 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e 65  s the input line
20650 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e 41 72  ..  */.  if( nAr
20660 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  g==0 ) return 0;
20670 20 2f 2a 20 6e 6f 20 74 6f 6b 65 6e 73 2c 20 6e   /* no tokens, n
20680 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 20 6e 20 3d  o error */.  n =
20690 20 73 74 72 6c 65 6e 33 30 28 61 7a 41 72 67 5b   strlen30(azArg[
206a0 30 5d 29 3b 0a 20 20 63 20 3d 20 61 7a 41 72 67  0]);.  c = azArg
206b0 5b 30 5d 5b 30 5d 3b 0a 0a 23 69 66 6e 64 65 66  [0][0];..#ifndef
206c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
206d0 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69 66 28  HORIZATION.  if(
206e0 20 63 3d 3d 27 61 27 20 26 26 20 73 74 72 6e 63   c=='a' && strnc
206f0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 61 75  mp(azArg[0], "au
20700 74 68 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  th", n)==0 ){.  
20710 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29 7b    if( nArg!=2 ){
20720 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
20730 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
20740 3a 20 2e 61 75 74 68 20 4f 4e 7c 4f 46 46 5c 6e  : .auth ON|OFF\n
20750 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
20760 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
20770 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
20780 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64      }.    open_d
20790 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 69 66 28  b(p, 0);.    if(
207a0 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a   booleanValue(az
207b0 41 72 67 5b 31 5d 29 20 29 7b 0a 20 20 20 20 20  Arg[1]) ){.     
207c0 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74   sqlite3_set_aut
207d0 68 6f 72 69 7a 65 72 28 70 2d 3e 64 62 2c 20 73  horizer(p->db, s
207e0 68 65 6c 6c 41 75 74 68 2c 20 70 29 3b 0a 20 20  hellAuth, p);.  
207f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
20800 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f  qlite3_set_autho
20810 72 69 7a 65 72 28 70 2d 3e 64 62 2c 20 30 2c 20  rizer(p->db, 0, 
20820 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  0);.    }.  }els
20830 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  e.#endif..  if( 
20840 28 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20  (c=='b' && n>=3 
20850 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
20860 5b 30 5d 2c 20 22 62 61 63 6b 75 70 22 2c 20 6e  [0], "backup", n
20870 29 3d 3d 30 29 0a 20 20 20 7c 7c 20 28 63 3d 3d  )==0).   || (c==
20880 27 73 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73  's' && n>=3 && s
20890 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
208a0 20 22 73 61 76 65 22 2c 20 6e 29 3d 3d 30 29 0a   "save", n)==0).
208b0 20 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63    ){.    const c
208c0 68 61 72 20 2a 7a 44 65 73 74 46 69 6c 65 20 3d  har *zDestFile =
208d0 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   0;.    const ch
208e0 61 72 20 2a 7a 44 62 20 3d 20 30 3b 0a 20 20 20  ar *zDb = 0;.   
208f0 20 73 71 6c 69 74 65 33 20 2a 70 44 65 73 74 3b   sqlite3 *pDest;
20900 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 61 63  .    sqlite3_bac
20910 6b 75 70 20 2a 70 42 61 63 6b 75 70 3b 0a 20 20  kup *pBackup;.  
20920 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 66 6f 72    int j;.    for
20930 28 6a 3d 31 3b 20 6a 3c 6e 41 72 67 3b 20 6a 2b  (j=1; j<nArg; j+
20940 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  +){.      const 
20950 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b  char *z = azArg[
20960 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b  j];.      if( z[
20970 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20  0]=='-' ){.     
20980 20 20 20 77 68 69 6c 65 28 20 7a 5b 30 5d 3d 3d     while( z[0]==
20990 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 20  '-' ) z++;.     
209a0 20 20 20 2f 2a 20 4e 6f 20 6f 70 74 69 6f 6e 73     /* No options
209b0 20 74 6f 20 70 72 6f 63 65 73 73 20 61 74 20 74   to process at t
209c0 68 69 73 20 74 69 6d 65 20 2a 2f 0a 20 20 20 20  his time */.    
209d0 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
209e0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
209f0 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f 70 74  rr, "unknown opt
20a00 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 61 7a 41 72  ion: %s\n", azAr
20a10 67 5b 6a 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  g[j]);.         
20a20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20   return 1;.     
20a30 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
20a40 20 69 66 28 20 7a 44 65 73 74 46 69 6c 65 3d 3d   if( zDestFile==
20a50 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 65  0 ){.        zDe
20a60 73 74 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 6a  stFile = azArg[j
20a70 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ];.      }else i
20a80 66 28 20 7a 44 62 3d 3d 30 20 29 7b 0a 20 20 20  f( zDb==0 ){.   
20a90 20 20 20 20 20 7a 44 62 20 3d 20 7a 44 65 73 74       zDb = zDest
20aa0 46 69 6c 65 3b 0a 20 20 20 20 20 20 20 20 7a 44  File;.        zD
20ab0 65 73 74 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b  estFile = azArg[
20ac0 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  j];.      }else{
20ad0 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
20ae0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 74 6f 6f  ntf(stderr, "too
20af0 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 20   many arguments 
20b00 74 6f 20 2e 62 61 63 6b 75 70 5c 6e 22 29 3b 0a  to .backup\n");.
20b10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
20b20 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
20b30 20 20 20 20 69 66 28 20 7a 44 65 73 74 46 69 6c      if( zDestFil
20b40 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61  e==0 ){.      ra
20b50 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
20b60 20 22 6d 69 73 73 69 6e 67 20 46 49 4c 45 4e 41   "missing FILENA
20b70 4d 45 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 2e  ME argument on .
20b80 62 61 63 6b 75 70 5c 6e 22 29 3b 0a 20 20 20 20  backup\n");.    
20b90 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
20ba0 7d 0a 20 20 20 20 69 66 28 20 7a 44 62 3d 3d 30  }.    if( zDb==0
20bb0 20 29 20 7a 44 62 20 3d 20 22 6d 61 69 6e 22 3b   ) zDb = "main";
20bc0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
20bd0 33 5f 6f 70 65 6e 28 7a 44 65 73 74 46 69 6c 65  3_open(zDestFile
20be0 2c 20 26 70 44 65 73 74 29 3b 0a 20 20 20 20 69  , &pDest);.    i
20bf0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
20c00 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
20c10 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
20c20 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65  rror: cannot ope
20c30 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 44 65  n \"%s\"\n", zDe
20c40 73 74 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 73  stFile);.      s
20c50 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 44 65  qlite3_close(pDe
20c60 73 74 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  st);.      retur
20c70 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f  n 1;.    }.    o
20c80 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20  pen_db(p, 0);.  
20c90 20 20 70 42 61 63 6b 75 70 20 3d 20 73 71 6c 69    pBackup = sqli
20ca0 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28  te3_backup_init(
20cb0 70 44 65 73 74 2c 20 22 6d 61 69 6e 22 2c 20 70  pDest, "main", p
20cc0 2d 3e 64 62 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ->db, zDb);.    
20cd0 69 66 28 20 70 42 61 63 6b 75 70 3d 3d 30 20 29  if( pBackup==0 )
20ce0 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
20cf0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
20d00 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74  or: %s\n", sqlit
20d10 65 33 5f 65 72 72 6d 73 67 28 70 44 65 73 74 29  e3_errmsg(pDest)
20d20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
20d30 5f 63 6c 6f 73 65 28 70 44 65 73 74 29 3b 0a 20  _close(pDest);. 
20d40 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
20d50 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20     }.    while( 
20d60 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62   (rc = sqlite3_b
20d70 61 63 6b 75 70 5f 73 74 65 70 28 70 42 61 63 6b  ackup_step(pBack
20d80 75 70 2c 31 30 30 29 29 3d 3d 53 51 4c 49 54 45  up,100))==SQLITE
20d90 5f 4f 4b 20 29 7b 7d 0a 20 20 20 20 73 71 6c 69  _OK ){}.    sqli
20da0 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
20db0 68 28 70 42 61 63 6b 75 70 29 3b 0a 20 20 20 20  h(pBackup);.    
20dc0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
20dd0 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ONE ){.      rc 
20de0 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
20df0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
20e00 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
20e10 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33  : %s\n", sqlite3
20e20 5f 65 72 72 6d 73 67 28 70 44 65 73 74 29 29 3b  _errmsg(pDest));
20e30 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
20e40 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
20e50 5f 63 6c 6f 73 65 28 70 44 65 73 74 29 3b 0a 20  _close(pDest);. 
20e60 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
20e70 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20 26 26 20  ='b' && n>=3 && 
20e80 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
20e90 2c 20 22 62 61 69 6c 22 2c 20 6e 29 3d 3d 30 20  , "bail", n)==0 
20ea0 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d  ){.    if( nArg=
20eb0 3d 32 20 29 7b 0a 20 20 20 20 20 20 62 61 69 6c  =2 ){.      bail
20ec0 5f 6f 6e 5f 65 72 72 6f 72 20 3d 20 62 6f 6f 6c  _on_error = bool
20ed0 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  eanValue(azArg[1
20ee0 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ]);.    }else{. 
20ef0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
20f00 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
20f10 2e 62 61 69 6c 20 6f 6e 7c 6f 66 66 5c 6e 22 29  .bail on|off\n")
20f20 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
20f30 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
20f40 20 69 66 28 20 63 3d 3d 27 62 27 20 26 26 20 6e   if( c=='b' && n
20f50 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=3 && strncmp(a
20f60 7a 41 72 67 5b 30 5d 2c 20 22 62 69 6e 61 72 79  zArg[0], "binary
20f70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
20f80 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20  if( nArg==2 ){. 
20f90 20 20 20 20 20 69 66 28 20 62 6f 6f 6c 65 61 6e       if( boolean
20fa0 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 20  Value(azArg[1]) 
20fb0 29 7b 0a 20 20 20 20 20 20 20 20 73 65 74 42 69  ){.        setBi
20fc0 6e 61 72 79 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c  naryMode(p->out,
20fd0 20 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   1);.      }else
20fe0 7b 0a 20 20 20 20 20 20 20 20 73 65 74 54 65 78  {.        setTex
20ff0 74 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c 20 31 29  tMode(p->out, 1)
21000 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
21010 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
21020 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
21030 73 61 67 65 3a 20 2e 62 69 6e 61 72 79 20 6f 6e  sage: .binary on
21040 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20  |off\n");.      
21050 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rc = 1;.    }.  
21060 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
21070 27 63 27 20 26 26 20 73 74 72 63 6d 70 28 61 7a  'c' && strcmp(az
21080 41 72 67 5b 30 5d 2c 22 63 64 22 29 3d 3d 30 20  Arg[0],"cd")==0 
21090 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d  ){.    if( nArg=
210a0 3d 32 20 29 7b 0a 23 69 66 20 64 65 66 69 6e 65  =2 ){.#if define
210b0 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66  d(_WIN32) || def
210c0 69 6e 65 64 28 57 49 4e 33 32 29 0a 20 20 20 20  ined(WIN32).    
210d0 20 20 77 63 68 61 72 5f 74 20 2a 7a 20 3d 20 73    wchar_t *z = s
210e0 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74 66  qlite3_win32_utf
210f0 38 5f 74 6f 5f 75 6e 69 63 6f 64 65 28 61 7a 41  8_to_unicode(azA
21100 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 72 63  rg[1]);.      rc
21110 20 3d 20 21 53 65 74 43 75 72 72 65 6e 74 44 69   = !SetCurrentDi
21120 72 65 63 74 6f 72 79 57 28 7a 29 3b 0a 20 20 20  rectoryW(z);.   
21130 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
21140 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20  z);.#else.      
21150 72 63 20 3d 20 63 68 64 69 72 28 61 7a 41 72 67  rc = chdir(azArg
21160 5b 31 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  [1]);.#endif.   
21170 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
21180 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
21190 28 73 74 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74  (stderr, "Cannot
211a0 20 63 68 61 6e 67 65 20 74 6f 20 64 69 72 65 63   change to direc
211b0 74 6f 72 79 20 5c 22 25 73 5c 22 5c 6e 22 2c 20  tory \"%s\"\n", 
211c0 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
211d0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
211e0 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
211f0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
21200 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
21210 63 64 20 44 49 52 45 43 54 4f 52 59 5c 6e 22 29  cd DIRECTORY\n")
21220 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
21230 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
21240 20 2f 2a 20 54 68 65 20 75 6e 64 6f 63 75 6d 65   /* The undocume
21250 6e 74 65 64 20 22 2e 62 72 65 61 6b 70 6f 69 6e  nted ".breakpoin
21260 74 22 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65  t" command cause
21270 73 20 61 20 63 61 6c 6c 20 74 6f 20 74 68 65 20  s a call to the 
21280 6e 6f 2d 6f 70 0a 20 20 2a 2a 20 72 6f 75 74 69  no-op.  ** routi
21290 6e 65 20 6e 61 6d 65 64 20 74 65 73 74 5f 62 72  ne named test_br
212a0 65 61 6b 70 6f 69 6e 74 28 29 2e 0a 20 20 2a 2f  eakpoint()..  */
212b0 0a 20 20 69 66 28 20 63 3d 3d 27 62 27 20 26 26  .  if( c=='b' &&
212c0 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70   n>=3 && strncmp
212d0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62 72 65 61  (azArg[0], "brea
212e0 6b 70 6f 69 6e 74 22 2c 20 6e 29 3d 3d 30 20 29  kpoint", n)==0 )
212f0 7b 0a 20 20 20 20 74 65 73 74 5f 62 72 65 61 6b  {.    test_break
21300 70 6f 69 6e 74 28 29 3b 0a 20 20 7d 65 6c 73 65  point();.  }else
21310 0a 0a 20 20 69 66 28 20 63 3d 3d 27 63 27 20 26  ..  if( c=='c' &
21320 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d  & n>=3 && strncm
21330 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63 68 61  p(azArg[0], "cha
21340 6e 67 65 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  nges", n)==0 ){.
21350 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
21360 29 7b 0a 20 20 20 20 20 20 73 65 74 4f 72 43 6c  ){.      setOrCl
21370 65 61 72 46 6c 61 67 28 70 2c 20 53 48 46 4c 47  earFlag(p, SHFLG
21380 5f 43 6f 75 6e 74 43 68 61 6e 67 65 73 2c 20 61  _CountChanges, a
21390 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
213a0 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
213b0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
213c0 73 61 67 65 3a 20 2e 63 68 61 6e 67 65 73 20 6f  sage: .changes o
213d0 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20  n|off\n");.     
213e0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
213f0 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 43 61 6e   }else..  /* Can
21400 63 65 6c 20 6f 75 74 70 75 74 20 72 65 64 69 72  cel output redir
21410 65 63 74 69 6f 6e 2c 20 69 66 20 69 74 20 69 73  ection, if it is
21420 20 63 75 72 72 65 6e 74 6c 79 20 73 65 74 20 28   currently set (
21430 62 79 20 2e 74 65 73 74 63 61 73 65 29 0a 20 20  by .testcase).  
21440 2a 2a 20 54 68 65 6e 20 72 65 61 64 20 74 68 65  ** Then read the
21450 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
21460 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74  testcase-out.txt
21470 20 66 69 6c 65 20 61 6e 64 20 63 6f 6d 70 61 72   file and compar
21480 65 20 61 67 61 69 6e 73 74 0a 20 20 2a 2a 20 61  e against.  ** a
21490 7a 41 72 67 5b 31 5d 2e 20 20 49 66 20 74 68 65  zArg[1].  If the
214a0 72 65 20 61 72 65 20 64 69 66 66 65 72 65 6e 63  re are differenc
214b0 65 73 2c 20 72 65 70 6f 72 74 20 61 6e 20 65 72  es, report an er
214c0 72 6f 72 20 61 6e 64 20 65 78 69 74 2e 0a 20 20  ror and exit..  
214d0 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 63 27 20  */.  if( c=='c' 
214e0 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63  && n>=3 && strnc
214f0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63 68  mp(azArg[0], "ch
21500 65 63 6b 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  eck", n)==0 ){. 
21510 20 20 20 63 68 61 72 20 2a 7a 52 65 73 20 3d 20     char *zRes = 
21520 30 3b 0a 20 20 20 20 6f 75 74 70 75 74 5f 72 65  0;.    output_re
21530 73 65 74 28 70 29 3b 0a 20 20 20 20 69 66 28 20  set(p);.    if( 
21540 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20  nArg!=2 ){.     
21550 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
21560 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 68 65  rr, "Usage: .che
21570 63 6b 20 47 4c 4f 42 2d 50 41 54 54 45 52 4e 5c  ck GLOB-PATTERN\
21580 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
21590 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  2;.    }else if(
215a0 20 28 7a 52 65 73 20 3d 20 72 65 61 64 46 69 6c   (zRes = readFil
215b0 65 28 22 74 65 73 74 63 61 73 65 2d 6f 75 74 2e  e("testcase-out.
215c0 74 78 74 22 2c 20 30 29 29 3d 3d 30 20 29 7b 0a  txt", 0))==0 ){.
215d0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
215e0 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
215f0 20 63 61 6e 6e 6f 74 20 72 65 61 64 20 27 74 65   cannot read 'te
21600 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c  stcase-out.txt'\
21610 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
21620 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  2;.    }else if(
21630 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 61   testcase_glob(a
21640 7a 41 72 67 5b 31 5d 2c 7a 52 65 73 29 3d 3d 30  zArg[1],zRes)==0
21650 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
21660 72 69 6e 74 66 28 73 74 64 65 72 72 2c 0a 20 20  rintf(stderr,.  
21670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
21680 74 65 73 74 63 61 73 65 2d 25 73 20 46 41 49 4c  testcase-%s FAIL
21690 45 44 5c 6e 20 45 78 70 65 63 74 65 64 3a 20 5b  ED\n Expected: [
216a0 25 73 5d 5c 6e 20 20 20 20 20 20 47 6f 74 3a 20  %s]\n      Got: 
216b0 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20  [%s]\n",.       
216c0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a 54 65            p->zTe
216d0 73 74 63 61 73 65 2c 20 61 7a 41 72 67 5b 31 5d  stcase, azArg[1]
216e0 2c 20 7a 52 65 73 29 3b 0a 20 20 20 20 20 20 72  , zRes);.      r
216f0 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  c = 1;.    }else
21700 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
21710 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 74 65 73  ntf(stdout, "tes
21720 74 63 61 73 65 2d 25 73 20 6f 6b 5c 6e 22 2c 20  tcase-%s ok\n", 
21730 70 2d 3e 7a 54 65 73 74 63 61 73 65 29 3b 0a 20  p->zTestcase);. 
21740 20 20 20 20 20 70 2d 3e 6e 43 68 65 63 6b 2b 2b       p->nCheck++
21750 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
21760 74 65 33 5f 66 72 65 65 28 7a 52 65 73 29 3b 0a  te3_free(zRes);.
21770 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
21780 3d 3d 27 63 27 20 26 26 20 73 74 72 6e 63 6d 70  =='c' && strncmp
21790 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63 6c 6f 6e  (azArg[0], "clon
217a0 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  e", n)==0 ){.   
217b0 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
217c0 20 20 20 20 20 20 74 72 79 54 6f 43 6c 6f 6e 65        tryToClone
217d0 28 70 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  (p, azArg[1]);. 
217e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
217f0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
21800 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 6c 6f 6e  r, "Usage: .clon
21810 65 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b 0a  e FILENAME\n");.
21820 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
21830 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
21840 66 28 20 63 3d 3d 27 64 27 20 26 26 20 6e 3e 31  f( c=='d' && n>1
21850 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
21860 67 5b 30 5d 2c 20 22 64 61 74 61 62 61 73 65 73  g[0], "databases
21870 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
21880 53 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61 3b  ShellState data;
21890 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  .    char *zErrM
218a0 73 67 20 3d 20 30 3b 0a 20 20 20 20 6f 70 65 6e  sg = 0;.    open
218b0 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6d  _db(p, 0);.    m
218c0 65 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c 20  emcpy(&data, p, 
218d0 73 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a 20  sizeof(data));. 
218e0 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64     data.showHead
218f0 65 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74 61  er = 0;.    data
21900 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f  .cMode = data.mo
21910 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a  de = MODE_List;.
21920 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
21930 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61  intf(sizeof(data
21940 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 64  .colSeparator),d
21950 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72  ata.colSeparator
21960 2c 22 3a 20 22 29 3b 0a 20 20 20 20 64 61 74 61  ,": ");.    data
21970 2e 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 73 71  .cnt = 0;.    sq
21980 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
21990 2c 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20  , "SELECT name, 
219a0 66 69 6c 65 20 46 52 4f 4d 20 70 72 61 67 6d 61  file FROM pragma
219b0 5f 64 61 74 61 62 61 73 65 5f 6c 69 73 74 22 2c  _database_list",
219c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
219d0 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74    callback, &dat
219e0 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  a, &zErrMsg);.  
219f0 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b    if( zErrMsg ){
21a00 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
21a10 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
21a20 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  : %s\n", zErrMsg
21a30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
21a40 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  _free(zErrMsg);.
21a50 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
21a60 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
21a70 66 28 20 63 3d 3d 27 64 27 20 26 26 20 73 74 72  f( c=='d' && str
21a80 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
21a90 64 62 69 6e 66 6f 22 2c 20 6e 29 3d 3d 30 20 29  dbinfo", n)==0 )
21aa0 7b 0a 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c  {.    rc = shell
21ab0 5f 64 62 69 6e 66 6f 5f 63 6f 6d 6d 61 6e 64 28  _dbinfo_command(
21ac0 70 2c 20 6e 41 72 67 2c 20 61 7a 41 72 67 29 3b  p, nArg, azArg);
21ad0 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
21ae0 63 3d 3d 27 64 27 20 26 26 20 73 74 72 6e 63 6d  c=='d' && strncm
21af0 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 64 75 6d  p(azArg[0], "dum
21b00 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  p", n)==0 ){.   
21b10 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69   const char *zLi
21b20 6b 65 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20  ke = 0;.    int 
21b30 69 3b 0a 20 20 20 20 69 6e 74 20 73 61 76 65 64  i;.    int saved
21b40 53 68 6f 77 48 65 61 64 65 72 20 3d 20 70 2d 3e  ShowHeader = p->
21b50 73 68 6f 77 48 65 61 64 65 72 3b 0a 20 20 20 20  showHeader;.    
21b60 53 68 65 6c 6c 43 6c 65 61 72 46 6c 61 67 28 70  ShellClearFlag(p
21b70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65 72 76 65  , SHFLG_Preserve
21b80 52 6f 77 69 64 7c 53 48 46 4c 47 5f 4e 65 77 6c  Rowid|SHFLG_Newl
21b90 69 6e 65 73 29 3b 0a 20 20 20 20 66 6f 72 28 69  ines);.    for(i
21ba0 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =1; i<nArg; i++)
21bb0 7b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41 72  {.      if( azAr
21bc0 67 5b 69 5d 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a  g[i][0]=='-' ){.
21bd0 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
21be0 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d  ar *z = azArg[i]
21bf0 2b 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +1;.        if( 
21c00 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  z[0]=='-' ) z++;
21c10 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
21c20 63 6d 70 28 7a 2c 22 70 72 65 73 65 72 76 65 2d  cmp(z,"preserve-
21c30 72 6f 77 69 64 73 22 29 3d 3d 30 20 29 7b 0a 23  rowids")==0 ){.#
21c40 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
21c50 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
21c60 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
21c70 6e 74 66 28 73 74 64 65 72 72 2c 20 22 54 68 65  ntf(stderr, "The
21c80 20 2d 2d 70 72 65 73 65 72 76 65 2d 72 6f 77 69   --preserve-rowi
21c90 64 73 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f 74  ds option is not
21ca0 20 63 6f 6d 70 61 74 69 62 6c 65 22 0a 20 20 20   compatible".   
21cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cc0 20 20 20 20 20 20 20 20 20 20 22 20 77 69 74 68            " with
21cd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
21ce0 54 55 41 4c 54 41 42 4c 45 5c 6e 22 29 3b 0a 20  TUALTABLE\n");. 
21cf0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b           rc = 1;
21d00 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
21d10 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
21d20 74 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20 20  t;.#else.       
21d30 20 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28     ShellSetFlag(
21d40 70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65 72 76  p, SHFLG_Preserv
21d50 65 52 6f 77 69 64 29 3b 0a 23 65 6e 64 69 66 0a  eRowid);.#endif.
21d60 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20          }else.  
21d70 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70        if( strcmp
21d80 28 7a 2c 22 6e 65 77 6c 69 6e 65 73 22 29 3d 3d  (z,"newlines")==
21d90 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 53  0 ){.          S
21da0 68 65 6c 6c 53 65 74 46 6c 61 67 28 70 2c 20 53  hellSetFlag(p, S
21db0 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 29 3b 0a  HFLG_Newlines);.
21dc0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20          }else.  
21dd0 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
21de0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
21df0 65 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70  err, "Unknown op
21e00 74 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c  tion \"%s\" on \
21e10 22 2e 64 75 6d 70 5c 22 5c 6e 22 2c 20 61 7a 41  ".dump\"\n", azA
21e20 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[i]);.        
21e30 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
21e40 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
21e50 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
21e60 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
21e70 65 20 69 66 28 20 7a 4c 69 6b 65 20 29 7b 0a 20  e if( zLike ){. 
21e80 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
21e90 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
21ea0 3a 20 2e 64 75 6d 70 20 3f 2d 2d 70 72 65 73 65  : .dump ?--prese
21eb0 72 76 65 2d 72 6f 77 69 64 73 3f 20 22 0a 20 20  rve-rowids? ".  
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ed0 20 20 20 20 20 20 20 20 20 22 3f 2d 2d 6e 65 77           "?--new
21ee0 6c 69 6e 65 73 3f 20 3f 4c 49 4b 45 2d 50 41 54  lines? ?LIKE-PAT
21ef0 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20 20  TERN?\n");.     
21f00 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
21f10 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d     goto meta_com
21f20 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20  mand_exit;.     
21f30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
21f40 7a 4c 69 6b 65 20 3d 20 61 7a 41 72 67 5b 69 5d  zLike = azArg[i]
21f50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
21f60 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
21f70 29 3b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 70  );.    /* When p
21f80 6c 61 79 69 6e 67 20 62 61 63 6b 20 61 20 22 64  laying back a "d
21f90 75 6d 70 22 2c 20 74 68 65 20 63 6f 6e 74 65 6e  ump", the conten
21fa0 74 20 6d 69 67 68 74 20 61 70 70 65 61 72 20 69  t might appear i
21fb0 6e 20 61 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a  n an order.    *
21fc0 2a 20 77 68 69 63 68 20 63 61 75 73 65 73 20 69  * which causes i
21fd0 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
21fe0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
21ff0 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2e   to be violated.
22000 0a 20 20 20 20 2a 2a 20 53 6f 20 64 69 73 61 62  .    ** So disab
22010 6c 65 20 66 6f 72 65 69 67 6e 2d 6b 65 79 20 63  le foreign-key c
22020 6f 6e 73 74 72 61 69 6e 74 20 65 6e 66 6f 72 63  onstraint enforc
22030 65 6d 65 6e 74 20 74 6f 20 70 72 65 76 65 6e 74  ement to prevent
22040 20 70 72 6f 62 6c 65 6d 73 2e 20 2a 2f 0a 20 20   problems. */.  
22050 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
22060 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 66 6f 72  out, "PRAGMA for
22070 65 69 67 6e 5f 6b 65 79 73 3d 4f 46 46 3b 5c 6e  eign_keys=OFF;\n
22080 22 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e  ");.    raw_prin
22090 74 66 28 70 2d 3e 6f 75 74 2c 20 22 42 45 47 49  tf(p->out, "BEGI
220a0 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 5c 6e  N TRANSACTION;\n
220b0 22 29 3b 0a 20 20 20 20 70 2d 3e 77 72 69 74 61  ");.    p->writa
220c0 62 6c 65 53 63 68 65 6d 61 20 3d 20 30 3b 0a 20  bleSchema = 0;. 
220d0 20 20 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72     p->showHeader
220e0 20 3d 20 30 3b 0a 20 20 20 20 2f 2a 20 53 65 74   = 0;.    /* Set
220f0 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
22100 3d 4f 4e 20 73 69 6e 63 65 20 64 6f 69 6e 67 20  =ON since doing 
22110 73 6f 20 66 6f 72 63 65 73 20 53 51 4c 69 74 65  so forces SQLite
22120 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 0a 20   to initialize. 
22130 20 20 20 2a 2a 20 61 73 20 6d 75 63 68 20 6f 66     ** as much of
22140 20 74 68 65 20 73 63 68 65 6d 61 20 61 73 20 69   the schema as i
22150 74 20 63 61 6e 20 65 76 65 6e 20 69 66 20 74 68  t can even if th
22160 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
22170 74 61 62 6c 65 20 69 73 0a 20 20 20 20 2a 2a 20  table is.    ** 
22180 63 6f 72 72 75 70 74 2e 20 2a 2f 0a 20 20 20 20  corrupt. */.    
22190 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
221a0 64 62 2c 20 22 53 41 56 45 50 4f 49 4e 54 20 64  db, "SAVEPOINT d
221b0 75 6d 70 3b 20 50 52 41 47 4d 41 20 77 72 69 74  ump; PRAGMA writ
221c0 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 22 2c  able_schema=ON",
221d0 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 70   0, 0, 0);.    p
221e0 2d 3e 6e 45 72 72 20 3d 20 30 3b 0a 20 20 20 20  ->nErr = 0;.    
221f0 69 66 28 20 7a 4c 69 6b 65 3d 3d 30 20 29 7b 0a  if( zLike==0 ){.
22200 20 20 20 20 20 20 72 75 6e 5f 73 63 68 65 6d 61        run_schema
22210 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 0a 20  _dump_query(p,. 
22220 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
22230 61 6d 65 2c 20 74 79 70 65 2c 20 73 71 6c 20 46  ame, type, sql F
22240 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
22250 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48 45  r ".        "WHE
22260 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 20  RE sql NOT NULL 
22270 41 4e 44 20 74 79 70 65 3d 3d 27 74 61 62 6c 65  AND type=='table
22280 27 20 41 4e 44 20 6e 61 6d 65 21 3d 27 73 71 6c  ' AND name!='sql
22290 69 74 65 5f 73 65 71 75 65 6e 63 65 27 22 0a 20  ite_sequence'". 
222a0 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 75       );.      ru
222b0 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71 75  n_schema_dump_qu
222c0 65 72 79 28 70 2c 0a 20 20 20 20 20 20 20 20 22  ery(p,.        "
222d0 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 74 79 70  SELECT name, typ
222e0 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  e, sql FROM sqli
222f0 74 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20  te_master ".    
22300 20 20 20 20 22 57 48 45 52 45 20 6e 61 6d 65 3d      "WHERE name=
22310 3d 27 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  ='sqlite_sequenc
22320 65 27 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  e'".      );.   
22330 20 20 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75 6d     run_table_dum
22340 70 5f 71 75 65 72 79 28 70 2c 0a 20 20 20 20 20  p_query(p,.     
22350 20 20 20 22 53 45 4c 45 43 54 20 73 71 6c 20 46     "SELECT sql F
22360 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
22370 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48 45  r ".        "WHE
22380 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 20  RE sql NOT NULL 
22390 41 4e 44 20 74 79 70 65 20 49 4e 20 28 27 69 6e  AND type IN ('in
223a0 64 65 78 27 2c 27 74 72 69 67 67 65 72 27 2c 27  dex','trigger','
223b0 76 69 65 77 27 29 22 2c 20 30 0a 20 20 20 20 20  view')", 0.     
223c0 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
223d0 20 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b       char *zSql;
223e0 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  .      zSql = sq
223f0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20  lite3_mprintf(. 
22400 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
22410 61 6d 65 2c 20 74 79 70 65 2c 20 73 71 6c 20 46  ame, type, sql F
22420 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
22430 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48 45  r ".        "WHE
22440 52 45 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45  RE tbl_name LIKE
22450 20 25 51 20 41 4e 44 20 74 79 70 65 3d 3d 27 74   %Q AND type=='t
22460 61 62 6c 65 27 22 0a 20 20 20 20 20 20 20 20 22  able'".        "
22470 20 20 41 4e 44 20 73 71 6c 20 4e 4f 54 20 4e 55    AND sql NOT NU
22480 4c 4c 22 2c 20 7a 4c 69 6b 65 29 3b 0a 20 20 20  LL", zLike);.   
22490 20 20 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64 75     run_schema_du
224a0 6d 70 5f 71 75 65 72 79 28 70 2c 7a 53 71 6c 29  mp_query(p,zSql)
224b0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
224c0 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20  free(zSql);.    
224d0 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
224e0 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20 20  _mprintf(.      
224f0 20 20 22 53 45 4c 45 43 54 20 73 71 6c 20 46 52    "SELECT sql FR
22500 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
22510 20 22 0a 20 20 20 20 20 20 20 20 22 57 48 45 52   ".        "WHER
22520 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 22 0a  E sql NOT NULL".
22530 20 20 20 20 20 20 20 20 22 20 20 41 4e 44 20 74          "  AND t
22540 79 70 65 20 49 4e 20 28 27 69 6e 64 65 78 27 2c  ype IN ('index',
22550 27 74 72 69 67 67 65 72 27 2c 27 76 69 65 77 27  'trigger','view'
22560 29 22 0a 20 20 20 20 20 20 20 20 22 20 20 41 4e  )".        "  AN
22570 44 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20  D tbl_name LIKE 
22580 25 51 22 2c 20 7a 4c 69 6b 65 29 3b 0a 20 20 20  %Q", zLike);.   
22590 20 20 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75 6d     run_table_dum
225a0 70 5f 71 75 65 72 79 28 70 2c 20 7a 53 71 6c 2c  p_query(p, zSql,
225b0 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
225c0 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
225d0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e     }.    if( p->
225e0 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20 29  writableSchema )
225f0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
22600 74 66 28 70 2d 3e 6f 75 74 2c 20 22 50 52 41 47  tf(p->out, "PRAG
22610 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
22620 6d 61 3d 4f 46 46 3b 5c 6e 22 29 3b 0a 20 20 20  ma=OFF;\n");.   
22630 20 20 20 70 2d 3e 77 72 69 74 61 62 6c 65 53 63     p->writableSc
22640 68 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  hema = 0;.    }.
22650 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63      sqlite3_exec
22660 28 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41 20  (p->db, "PRAGMA 
22670 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d  writable_schema=
22680 4f 46 46 3b 22 2c 20 30 2c 20 30 2c 20 30 29 3b  OFF;", 0, 0, 0);
22690 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65  .    sqlite3_exe
226a0 63 28 70 2d 3e 64 62 2c 20 22 52 45 4c 45 41 53  c(p->db, "RELEAS
226b0 45 20 64 75 6d 70 3b 22 2c 20 30 2c 20 30 2c 20  E dump;", 0, 0, 
226c0 30 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e  0);.    raw_prin
226d0 74 66 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 6e 45  tf(p->out, p->nE
226e0 72 72 20 3f 20 22 52 4f 4c 4c 42 41 43 4b 3b 20  rr ? "ROLLBACK; 
226f0 2d 2d 20 64 75 65 20 74 6f 20 65 72 72 6f 72 73  -- due to errors
22700 5c 6e 22 20 3a 20 22 43 4f 4d 4d 49 54 3b 5c 6e  \n" : "COMMIT;\n
22710 22 29 3b 0a 20 20 20 20 70 2d 3e 73 68 6f 77 48  ");.    p->showH
22720 65 61 64 65 72 20 3d 20 73 61 76 65 64 53 68 6f  eader = savedSho
22730 77 48 65 61 64 65 72 3b 0a 20 20 7d 65 6c 73 65  wHeader;.  }else
22740 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65 27 20 26  ..  if( c=='e' &
22750 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
22760 30 5d 2c 20 22 65 63 68 6f 22 2c 20 6e 29 3d 3d  0], "echo", n)==
22770 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
22780 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 65  g==2 ){.      se
22790 74 4f 72 43 6c 65 61 72 46 6c 61 67 28 70 2c 20  tOrClearFlag(p, 
227a0 53 48 46 4c 47 5f 45 63 68 6f 2c 20 61 7a 41 72  SHFLG_Echo, azAr
227b0 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  g[1]);.    }else
227c0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
227d0 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
227e0 65 3a 20 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66 5c  e: .echo on|off\
227f0 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
22800 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
22810 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65 27 20 26  ..  if( c=='e' &
22820 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
22830 30 5d 2c 20 22 65 71 70 22 2c 20 6e 29 3d 3d 30  0], "eqp", n)==0
22840 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
22850 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==2 ){.      if(
22860 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d   strcmp(azArg[1]
22870 2c 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20  ,"full")==0 ){. 
22880 20 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45 51         p->autoEQ
22890 50 20 3d 20 41 55 54 4f 45 51 50 5f 66 75 6c 6c  P = AUTOEQP_full
228a0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
228b0 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31  ( strcmp(azArg[1
228c0 5d 2c 22 74 72 69 67 67 65 72 22 29 3d 3d 30 20  ],"trigger")==0 
228d0 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 61 75  ){.        p->au
228e0 74 6f 45 51 50 20 3d 20 41 55 54 4f 45 51 50 5f  toEQP = AUTOEQP_
228f0 74 72 69 67 67 65 72 3b 0a 20 20 20 20 20 20 7d  trigger;.      }
22900 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d  else{.        p-
22910 3e 61 75 74 6f 45 51 50 20 3d 20 62 6f 6f 6c 65  >autoEQP = boole
22920 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d  anValue(azArg[1]
22930 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
22940 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
22950 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
22960 55 73 61 67 65 3a 20 2e 65 71 70 20 6f 66 66 7c  Usage: .eqp off|
22970 6f 6e 7c 74 72 69 67 67 65 72 7c 66 75 6c 6c 5c  on|trigger|full\
22980 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
22990 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
229a0 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65 27 20 26  ..  if( c=='e' &
229b0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
229c0 30 5d 2c 20 22 65 78 69 74 22 2c 20 6e 29 3d 3d  0], "exit", n)==
229d0 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
229e0 67 3e 31 20 26 26 20 28 72 63 20 3d 20 28 69 6e  g>1 && (rc = (in
229f0 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61  t)integerValue(a
22a00 7a 41 72 67 5b 31 5d 29 29 21 3d 30 20 29 20 65  zArg[1]))!=0 ) e
22a10 78 69 74 28 72 63 29 3b 0a 20 20 20 20 72 63 20  xit(rc);.    rc 
22a20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  = 2;.  }else..  
22a30 2f 2a 20 54 68 65 20 22 2e 65 78 70 6c 61 69 6e  /* The ".explain
22a40 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 75 74  " command is aut
22a50 6f 6d 61 74 69 63 20 6e 6f 77 2e 20 20 49 74 20  omatic now.  It 
22a60 69 73 20 6c 61 72 67 65 6c 79 20 70 6f 69 6e 74  is largely point
22a70 6c 65 73 73 2e 20 20 49 74 0a 20 20 2a 2a 20 72  less.  It.  ** r
22a80 65 74 61 69 6e 65 64 20 70 75 72 65 6c 79 20 66  etained purely f
22a90 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
22aa0 70 61 74 69 62 69 6c 69 74 79 20 2a 2f 0a 20 20  patibility */.  
22ab0 69 66 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74  if( c=='e' && st
22ac0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
22ad0 22 65 78 70 6c 61 69 6e 22 2c 20 6e 29 3d 3d 30  "explain", n)==0
22ae0 20 29 7b 0a 20 20 20 20 69 6e 74 20 76 61 6c 20   ){.    int val 
22af0 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 6e 41 72  = 1;.    if( nAr
22b00 67 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20 69 66  g>=2 ){.      if
22b10 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31  ( strcmp(azArg[1
22b20 5d 2c 22 61 75 74 6f 22 29 3d 3d 30 20 29 7b 0a  ],"auto")==0 ){.
22b30 20 20 20 20 20 20 20 20 76 61 6c 20 3d 20 39 39          val = 99
22b40 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
22b50 20 20 20 20 20 20 20 76 61 6c 20 3d 20 20 62 6f         val =  bo
22b60 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
22b70 5b 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [1]);.      }.  
22b80 20 20 7d 0a 20 20 20 20 69 66 28 20 76 61 6c 3d    }.    if( val=
22b90 3d 31 20 26 26 20 70 2d 3e 6d 6f 64 65 21 3d 4d  =1 && p->mode!=M
22ba0 4f 44 45 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20  ODE_Explain ){. 
22bb0 20 20 20 20 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f       p->normalMo
22bc0 64 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20  de = p->mode;.  
22bd0 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
22be0 44 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20  DE_Explain;.    
22bf0 20 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e    p->autoExplain
22c00 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 0;.    }else 
22c10 69 66 28 20 76 61 6c 3d 3d 30 20 29 7b 0a 20 20  if( val==0 ){.  
22c20 20 20 20 20 69 66 28 20 70 2d 3e 6d 6f 64 65 3d      if( p->mode=
22c30 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 29 20  =MODE_Explain ) 
22c40 70 2d 3e 6d 6f 64 65 20 3d 20 70 2d 3e 6e 6f 72  p->mode = p->nor
22c50 6d 61 6c 4d 6f 64 65 3b 0a 20 20 20 20 20 20 70  malMode;.      p
22c60 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20  ->autoExplain = 
22c70 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
22c80 20 76 61 6c 3d 3d 39 39 20 29 7b 0a 20 20 20 20   val==99 ){.    
22c90 20 20 69 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d    if( p->mode==M
22ca0 4f 44 45 5f 45 78 70 6c 61 69 6e 20 29 20 70 2d  ODE_Explain ) p-
22cb0 3e 6d 6f 64 65 20 3d 20 70 2d 3e 6e 6f 72 6d 61  >mode = p->norma
22cc0 6c 4d 6f 64 65 3b 0a 20 20 20 20 20 20 70 2d 3e  lMode;.      p->
22cd0 61 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20 31 3b  autoExplain = 1;
22ce0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
22cf0 20 20 69 66 28 20 63 3d 3d 27 65 27 20 26 26 20    if( c=='e' && 
22d00 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
22d10 2c 20 22 65 78 70 65 72 74 22 2c 20 6e 29 3d 3d  , "expert", n)==
22d20 30 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62  0 ){.    open_db
22d30 28 70 2c 20 30 29 3b 0a 20 20 20 20 65 78 70 65  (p, 0);.    expe
22d40 72 74 44 6f 74 43 6f 6d 6d 61 6e 64 28 70 2c 20  rtDotCommand(p, 
22d50 61 7a 41 72 67 2c 20 6e 41 72 67 29 3b 0a 20 20  azArg, nArg);.  
22d60 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
22d70 27 66 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'f' && strncmp(a
22d80 7a 41 72 67 5b 30 5d 2c 20 22 66 75 6c 6c 73 63  zArg[0], "fullsc
22d90 68 65 6d 61 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  hema", n)==0 ){.
22da0 20 20 20 20 53 68 65 6c 6c 53 74 61 74 65 20 64      ShellState d
22db0 61 74 61 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  ata;.    char *z
22dc0 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
22dd0 69 6e 74 20 64 6f 53 74 61 74 73 20 3d 20 30 3b  int doStats = 0;
22de0 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 64 61 74  .    memcpy(&dat
22df0 61 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64 61 74  a, p, sizeof(dat
22e00 61 29 29 3b 0a 20 20 20 20 64 61 74 61 2e 73 68  a));.    data.sh
22e10 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20  owHeader = 0;.  
22e20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64    data.cMode = d
22e30 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
22e40 53 65 6d 69 3b 0a 20 20 20 20 69 66 28 20 6e 41  Semi;.    if( nA
22e50 72 67 3d 3d 32 20 26 26 20 6f 70 74 69 6f 6e 4d  rg==2 && optionM
22e60 61 74 63 68 28 61 7a 41 72 67 5b 31 5d 2c 20 22  atch(azArg[1], "
22e70 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20 20 20 20  indent") ){.    
22e80 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64    data.cMode = d
22e90 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
22ea0 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20 6e 41  Pretty;.      nA
22eb0 72 67 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rg = 1;.    }.  
22ec0 20 20 69 66 28 20 6e 41 72 67 21 3d 31 20 29 7b    if( nArg!=1 ){
22ed0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
22ee0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
22ef0 3a 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20 3f 2d  : .fullschema ?-
22f00 2d 69 6e 64 65 6e 74 3f 5c 6e 22 29 3b 0a 20 20  -indent?\n");.  
22f10 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
22f20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
22f30 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
22f40 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
22f50 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
22f60 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 0a  te3_exec(p->db,.
22f70 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 73         "SELECT s
22f80 71 6c 20 46 52 4f 4d 22 0a 20 20 20 20 20 20 20  ql FROM".       
22f90 22 20 20 28 53 45 4c 45 43 54 20 73 71 6c 20 73  "  (SELECT sql s
22fa0 71 6c 2c 20 74 79 70 65 20 74 79 70 65 2c 20 74  ql, type type, t
22fb0 62 6c 5f 6e 61 6d 65 20 74 62 6c 5f 6e 61 6d 65  bl_name tbl_name
22fc0 2c 20 6e 61 6d 65 20 6e 61 6d 65 2c 20 72 6f 77  , name name, row
22fd0 69 64 20 78 22 0a 20 20 20 20 20 20 20 22 20 20  id x".       "  
22fe0 20 20 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d     FROM sqlite_m
22ff0 61 73 74 65 72 20 55 4e 49 4f 4e 20 41 4c 4c 22  aster UNION ALL"
23000 0a 20 20 20 20 20 20 20 22 20 20 20 53 45 4c 45  .       "   SELE
23010 43 54 20 73 71 6c 2c 20 74 79 70 65 2c 20 74 62  CT sql, type, tb
23020 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f  l_name, name, ro
23030 77 69 64 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  wid FROM sqlite_
23040 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 22 0a 20  temp_master) ". 
23050 20 20 20 20 20 20 22 57 48 45 52 45 20 74 79 70        "WHERE typ
23060 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20 73 71  e!='meta' AND sq
23070 6c 20 4e 4f 54 4e 55 4c 4c 20 41 4e 44 20 6e 61  l NOTNULL AND na
23080 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c  me NOT LIKE 'sql
23090 69 74 65 5f 25 27 20 22 0a 20 20 20 20 20 20 20  ite_%' ".       
230a0 22 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22  "ORDER BY rowid"
230b0 2c 0a 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63  ,.       callbac
230c0 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d  k, &data, &zErrM
230d0 73 67 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66  sg.    );.    if
230e0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
230f0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
23100 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
23110 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
23120 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
23130 62 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  b,.             
23140 20 20 22 53 45 4c 45 43 54 20 72 6f 77 69 64 20    "SELECT rowid 
23150 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
23160 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  er".            
23170 20 20 20 22 20 57 48 45 52 45 20 6e 61 6d 65 20     " WHERE name 
23180 47 4c 4f 42 20 27 73 71 6c 69 74 65 5f 73 74 61  GLOB 'sqlite_sta
23190 74 5b 31 33 34 5d 27 22 2c 0a 20 20 20 20 20 20  t[134]'",.      
231a0 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53           -1, &pS
231b0 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 64  tmt, 0);.      d
231c0 6f 53 74 61 74 73 20 3d 20 73 71 6c 69 74 65 33  oStats = sqlite3
231d0 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51  _step(pStmt)==SQ
231e0 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 20 20 20 20  LITE_ROW;.      
231f0 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
23200 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 7d 0a 20  (pStmt);.    }. 
23210 20 20 20 69 66 28 20 64 6f 53 74 61 74 73 3d 3d     if( doStats==
23220 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
23230 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f  rintf(p->out, "/
23240 2a 20 4e 6f 20 53 54 41 54 20 74 61 62 6c 65 73  * No STAT tables
23250 20 61 76 61 69 6c 61 62 6c 65 20 2a 2f 5c 6e 22   available */\n"
23260 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
23270 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
23280 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20  ->out, "ANALYZE 
23290 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e  sqlite_master;\n
232a0 22 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ");.      sqlite
232b0 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53  3_exec(p->db, "S
232c0 45 4c 45 43 54 20 27 41 4e 41 4c 59 5a 45 20 73  ELECT 'ANALYZE s
232d0 71 6c 69 74 65 5f 6d 61 73 74 65 72 27 22 2c 0a  qlite_master'",.
232e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232f0 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61     callback, &da
23300 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ta, &zErrMsg);. 
23310 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20       data.cMode 
23320 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f  = data.mode = MO
23330 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 20  DE_Insert;.     
23340 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62 6c 65   data.zDestTable
23350 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 31   = "sqlite_stat1
23360 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  ";.      shell_e
23370 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45  xec(p->db, "SELE
23380 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
23390 5f 73 74 61 74 31 22 2c 0a 20 20 20 20 20 20 20  _stat1",.       
233a0 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f            shell_
233b0 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
233c0 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
233d0 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62 6c 65   data.zDestTable
233e0 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 33   = "sqlite_stat3
233f0 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  ";.      shell_e
23400 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45  xec(p->db, "SELE
23410 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
23420 5f 73 74 61 74 33 22 2c 0a 20 20 20 20 20 20 20  _stat3",.       
23430 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f            shell_
23440 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
23450 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
23460 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62 6c 65   data.zDestTable
23470 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 34   = "sqlite_stat4
23480 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  ";.      shell_e
23490 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45  xec(p->db, "SELE
234a0 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
234b0 5f 73 74 61 74 34 22 2c 0a 20 20 20 20 20 20 20  _stat4",.       
234c0 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f            shell_
234d0 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
234e0 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20   &zErrMsg);.    
234f0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
23500 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20 73 71  out, "ANALYZE sq
23510 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e 22 29  lite_master;\n")
23520 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
23530 0a 20 20 69 66 28 20 63 3d 3d 27 68 27 20 26 26  .  if( c=='h' &&
23540 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
23550 5d 2c 20 22 68 65 61 64 65 72 73 22 2c 20 6e 29  ], "headers", n)
23560 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
23570 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
23580 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  p->showHeader = 
23590 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
235a0 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73  rg[1]);.    }els
235b0 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
235c0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
235d0 67 65 3a 20 2e 68 65 61 64 65 72 73 20 6f 6e 7c  ge: .headers on|
235e0 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  off\n");.      r
235f0 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  c = 1;.    }.  }
23600 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
23610 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  h' && strncmp(az
23620 41 72 67 5b 30 5d 2c 20 22 68 65 6c 70 22 2c 20  Arg[0], "help", 
23630 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66  n)==0 ){.    utf
23640 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
23650 20 22 25 73 22 2c 20 7a 48 65 6c 70 29 3b 0a 20   "%s", zHelp);. 
23660 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
23670 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='i' && strncmp(
23680 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d 70 6f 72  azArg[0], "impor
23690 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  t", n)==0 ){.   
236a0 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 3b 20 20   char *zTable;  
236b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
236c0 49 6e 73 65 72 74 20 64 61 74 61 20 69 6e 74 6f  Insert data into
236d0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
236e0 20 20 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b 20     char *zFile; 
236f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23700 2a 20 4e 61 6d 65 20 6f 66 20 66 69 6c 65 20 74  * Name of file t
23710 6f 20 65 78 74 72 61 20 63 6f 6e 74 65 6e 74 20  o extra content 
23720 66 72 6f 6d 20 2a 2f 0a 20 20 20 20 73 71 6c 69  from */.    sqli
23730 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20  te3_stmt *pStmt 
23740 3d 20 4e 55 4c 4c 3b 20 2f 2a 20 41 20 73 74 61  = NULL; /* A sta
23750 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20 20 69 6e  tement */.    in
23760 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
23770 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
23780 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
23790 6e 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  n the table */. 
237a0 20 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20     int nByte;   
237b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
237c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
237d0 73 20 69 6e 20 61 6e 20 53 51 4c 20 73 74 72 69  s in an SQL stri
237e0 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 2c  ng */.    int i,
237f0 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
23800 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
23810 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20 69 6e  unters */.    in
23820 74 20 6e 65 65 64 43 6f 6d 6d 69 74 3b 20 20 20  t needCommit;   
23830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
23840 65 20 74 6f 20 43 4f 4d 4d 49 54 20 6f 72 20 52  e to COMMIT or R
23850 4f 4c 4c 42 41 43 4b 20 61 74 20 65 6e 64 20 2a  OLLBACK at end *
23860 2f 0a 20 20 20 20 69 6e 74 20 6e 53 65 70 3b 20  /.    int nSep; 
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23880 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
23890 79 74 65 73 20 69 6e 20 70 2d 3e 63 6f 6c 53 65  ytes in p->colSe
238a0 70 61 72 61 74 6f 72 5b 5d 20 2a 2f 0a 20 20 20  parator[] */.   
238b0 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20   char *zSql;    
238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
238d0 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  An SQL statement
238e0 20 2a 2f 0a 20 20 20 20 49 6d 70 6f 72 74 43 74   */.    ImportCt
238f0 78 20 73 43 74 78 3b 20 20 20 20 20 20 20 20 20  x sCtx;         
23900 20 20 20 20 2f 2a 20 52 65 61 64 65 72 20 63 6f      /* Reader co
23910 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 63 68 61  ntext */.    cha
23920 72 20 2a 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  r *(SQLITE_CDECL
23930 20 2a 78 52 65 61 64 29 28 49 6d 70 6f 72 74 43   *xRead)(ImportC
23940 74 78 2a 29 3b 20 2f 2a 20 46 75 6e 63 20 74 6f  tx*); /* Func to
23950 20 72 65 61 64 20 6f 6e 65 20 76 61 6c 75 65 20   read one value 
23960 2a 2f 0a 20 20 20 20 69 6e 74 20 28 53 51 4c 49  */.    int (SQLI
23970 54 45 5f 43 44 45 43 4c 20 2a 78 43 6c 6f 73 65  TE_CDECL *xClose
23980 72 29 28 46 49 4c 45 2a 29 3b 20 20 20 20 20 20  r)(FILE*);      
23990 2f 2a 20 46 75 6e 63 20 74 6f 20 63 6c 6f 73 65  /* Func to close
239a0 20 66 69 6c 65 20 2a 2f 0a 0a 20 20 20 20 69 66   file */..    if
239b0 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20 20  ( nArg!=3 ){.   
239c0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
239d0 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 69  derr, "Usage: .i
239e0 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42 4c 45  mport FILE TABLE
239f0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  \n");.      goto
23a00 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
23a10 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 46  it;.    }.    zF
23a20 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a  ile = azArg[1];.
23a30 20 20 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41      zTable = azA
23a40 72 67 5b 32 5d 3b 0a 20 20 20 20 73 65 65 6e 49  rg[2];.    seenI
23a50 6e 74 65 72 72 75 70 74 20 3d 20 30 3b 0a 20 20  nterrupt = 0;.  
23a60 20 20 6d 65 6d 73 65 74 28 26 73 43 74 78 2c 20    memset(&sCtx, 
23a70 30 2c 20 73 69 7a 65 6f 66 28 73 43 74 78 29 29  0, sizeof(sCtx))
23a80 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  ;.    open_db(p,
23a90 20 30 29 3b 0a 20 20 20 20 6e 53 65 70 20 3d 20   0);.    nSep = 
23aa0 73 74 72 6c 65 6e 33 30 28 70 2d 3e 63 6f 6c 53  strlen30(p->colS
23ab0 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 69  eparator);.    i
23ac0 66 28 20 6e 53 65 70 3d 3d 30 20 29 7b 0a 20 20  f( nSep==0 ){.  
23ad0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
23ae0 74 64 65 72 72 2c 0a 20 20 20 20 20 20 20 20 20  tderr,.         
23af0 20 20 20 20 20 20 20 20 22 45 72 72 6f 72 3a 20          "Error: 
23b00 6e 6f 6e 2d 6e 75 6c 6c 20 63 6f 6c 75 6d 6e 20  non-null column 
23b10 73 65 70 61 72 61 74 6f 72 20 72 65 71 75 69 72  separator requir
23b20 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c 6e 22  ed for import\n"
23b30 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
23b40 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  1;.    }.    if(
23b50 20 6e 53 65 70 3e 31 20 29 7b 0a 20 20 20 20 20   nSep>1 ){.     
23b60 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
23b70 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 75 6c 74  rr, "Error: mult
23b80 69 2d 63 68 61 72 61 63 74 65 72 20 63 6f 6c 75  i-character colu
23b90 6d 6e 20 73 65 70 61 72 61 74 6f 72 73 20 6e 6f  mn separators no
23ba0 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20 20 20 20  t allowed".     
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bc0 20 22 20 66 6f 72 20 69 6d 70 6f 72 74 5c 6e 22   " for import\n"
23bd0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
23be0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 53 65  1;.    }.    nSe
23bf0 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e  p = strlen30(p->
23c00 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  rowSeparator);. 
23c10 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30 20 29     if( nSep==0 )
23c20 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
23c30 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
23c40 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 72 6f 77 20  r: non-null row 
23c50 73 65 70 61 72 61 74 6f 72 20 72 65 71 75 69 72  separator requir
23c60 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c 6e 22  ed for import\n"
23c70 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
23c80 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  1;.    }.    if(
23c90 20 6e 53 65 70 3d 3d 32 20 26 26 20 70 2d 3e 6d   nSep==2 && p->m
23ca0 6f 64 65 3d 3d 4d 4f 44 45 5f 43 73 76 20 26 26  ode==MODE_Csv &&
23cb0 20 73 74 72 63 6d 70 28 70 2d 3e 72 6f 77 53 65   strcmp(p->rowSe
23cc0 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 72 4c  parator, SEP_CrL
23cd0 66 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  f)==0 ){.      /
23ce0 2a 20 57 68 65 6e 20 69 6d 70 6f 72 74 69 6e 67  * When importing
23cf0 20 43 53 56 20 28 6f 6e 6c 79 29 2c 20 69 66 20   CSV (only), if 
23d00 74 68 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f  the row separato
23d10 72 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 0a  r is set to the.
23d20 20 20 20 20 20 20 2a 2a 20 64 65 66 61 75 6c 74        ** default
23d30 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65 70 61   output row sepa
23d40 72 61 74 6f 72 2c 20 63 68 61 6e 67 65 20 69 74  rator, change it
23d50 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20   to the default 
23d60 69 6e 70 75 74 0a 20 20 20 20 20 20 2a 2a 20 72  input.      ** r
23d70 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20 20 54  ow separator.  T
23d80 68 69 73 20 61 76 6f 69 64 73 20 68 61 76 69 6e  his avoids havin
23d90 67 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20 64 69  g to maintain di
23da0 66 66 65 72 65 6e 74 20 69 6e 70 75 74 0a 20 20  fferent input.  
23db0 20 20 20 20 2a 2a 20 61 6e 64 20 6f 75 74 70 75      ** and outpu
23dc0 74 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 73  t row separators
23dd0 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  . */.      sqlit
23de0 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
23df0 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  of(p->rowSeparat
23e00 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72  or), p->rowSepar
23e10 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b 0a  ator, SEP_Row);.
23e20 20 20 20 20 20 20 6e 53 65 70 20 3d 20 73 74 72        nSep = str
23e30 6c 65 6e 33 30 28 70 2d 3e 72 6f 77 53 65 70 61  len30(p->rowSepa
23e40 72 61 74 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  rator);.    }.  
23e50 20 20 69 66 28 20 6e 53 65 70 3e 31 20 29 7b 0a    if( nSep>1 ){.
23e60 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
23e70 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
23e80 20 6d 75 6c 74 69 2d 63 68 61 72 61 63 74 65 72   multi-character
23e90 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 73 20   row separators 
23ea0 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20 20  not allowed".   
23eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ec0 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72 74 5c     " for import\
23ed0 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
23ee0 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  n 1;.    }.    s
23ef0 43 74 78 2e 7a 46 69 6c 65 20 3d 20 7a 46 69 6c  Ctx.zFile = zFil
23f00 65 3b 0a 20 20 20 20 73 43 74 78 2e 6e 4c 69 6e  e;.    sCtx.nLin
23f10 65 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 73  e = 1;.    if( s
23f20 43 74 78 2e 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c  Ctx.zFile[0]=='|
23f30 27 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  ' ){.#ifdef SQLI
23f40 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20  TE_OMIT_POPEN.  
23f50 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
23f60 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 70  tderr, "Error: p
23f70 69 70 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  ipes are not sup
23f80 70 6f 72 74 65 64 20 69 6e 20 74 68 69 73 20 4f  ported in this O
23f90 53 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  S\n");.      ret
23fa0 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20 20  urn 1;.#else.   
23fb0 20 20 20 73 43 74 78 2e 69 6e 20 3d 20 70 6f 70     sCtx.in = pop
23fc0 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65 2b 31 2c  en(sCtx.zFile+1,
23fd0 20 22 72 22 29 3b 0a 20 20 20 20 20 20 73 43 74   "r");.      sCt
23fe0 78 2e 7a 46 69 6c 65 20 3d 20 22 3c 70 69 70 65  x.zFile = "<pipe
23ff0 3e 22 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73 65  >";.      xClose
24000 72 20 3d 20 70 63 6c 6f 73 65 3b 0a 23 65 6e 64  r = pclose;.#end
24010 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  if.    }else{.  
24020 20 20 20 20 73 43 74 78 2e 69 6e 20 3d 20 66 6f      sCtx.in = fo
24030 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65 2c 20  pen(sCtx.zFile, 
24040 22 72 62 22 29 3b 0a 20 20 20 20 20 20 78 43 6c  "rb");.      xCl
24050 6f 73 65 72 20 3d 20 66 63 6c 6f 73 65 3b 0a 20  oser = fclose;. 
24060 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e     }.    if( p->
24070 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 41 73 63 69 69  mode==MODE_Ascii
24080 20 29 7b 0a 20 20 20 20 20 20 78 52 65 61 64 20   ){.      xRead 
24090 3d 20 61 73 63 69 69 5f 72 65 61 64 5f 6f 6e 65  = ascii_read_one
240a0 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d 65 6c 73  _field;.    }els
240b0 65 7b 0a 20 20 20 20 20 20 78 52 65 61 64 20 3d  e{.      xRead =
240c0 20 63 73 76 5f 72 65 61 64 5f 6f 6e 65 5f 66 69   csv_read_one_fi
240d0 65 6c 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  eld;.    }.    i
240e0 66 28 20 73 43 74 78 2e 69 6e 3d 3d 30 20 29 7b  f( sCtx.in==0 ){
240f0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
24100 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
24110 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c  r: cannot open \
24120 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65 29  "%s\"\n", zFile)
24130 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
24140 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 43 74 78  ;.    }.    sCtx
24150 2e 63 43 6f 6c 53 65 70 20 3d 20 70 2d 3e 63 6f  .cColSep = p->co
24160 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 3b 0a 20  lSeparator[0];. 
24170 20 20 20 73 43 74 78 2e 63 52 6f 77 53 65 70 20     sCtx.cRowSep 
24180 3d 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  = p->rowSeparato
24190 72 5b 30 5d 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  r[0];.    zSql =
241a0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
241b0 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  ("SELECT * FROM 
241c0 25 73 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  %s", zTable);.  
241d0 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
241e0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
241f0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
24200 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c  : out of memory\
24210 6e 22 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73  n");.      xClos
24220 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
24230 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
24240 20 7d 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 73   }.    nByte = s
24250 74 72 6c 65 6e 33 30 28 7a 53 71 6c 29 3b 0a 20  trlen30(zSql);. 
24260 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
24270 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
24280 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
24290 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6d 70 6f  mt, 0);.    impo
242a0 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 26  rt_append_char(&
242b0 73 43 74 78 2c 20 30 29 3b 20 20 20 20 2f 2a 20  sCtx, 0);    /* 
242c0 54 6f 20 65 6e 73 75 72 65 20 73 43 74 78 2e 7a  To ensure sCtx.z
242d0 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f   is allocated */
242e0 0a 20 20 20 20 69 66 28 20 72 63 20 26 26 20 73  .    if( rc && s
242f0 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 22  qlite3_strglob("
24300 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 2a  no such table: *
24310 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
24320 67 28 70 2d 3e 64 62 29 29 3d 3d 30 20 29 7b 0a  g(p->db))==0 ){.
24330 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43 72 65        char *zCre
24340 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ate = sqlite3_mp
24350 72 69 6e 74 66 28 22 43 52 45 41 54 45 20 54 41  rintf("CREATE TA
24360 42 4c 45 20 25 73 22 2c 20 7a 54 61 62 6c 65 29  BLE %s", zTable)
24370 3b 0a 20 20 20 20 20 20 63 68 61 72 20 63 53 65  ;.      char cSe
24380 70 20 3d 20 27 28 27 3b 0a 20 20 20 20 20 20 77  p = '(';.      w
24390 68 69 6c 65 28 20 78 52 65 61 64 28 26 73 43 74  hile( xRead(&sCt
243a0 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 43  x) ){.        zC
243b0 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f  reate = sqlite3_
243c0 6d 70 72 69 6e 74 66 28 22 25 7a 25 63 5c 6e 20  mprintf("%z%c\n 
243d0 20 5c 22 25 77 5c 22 20 54 45 58 54 22 2c 20 7a   \"%w\" TEXT", z
243e0 43 72 65 61 74 65 2c 20 63 53 65 70 2c 20 73 43  Create, cSep, sC
243f0 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 63  tx.z);.        c
24400 53 65 70 20 3d 20 27 2c 27 3b 0a 20 20 20 20 20  Sep = ',';.     
24410 20 20 20 69 66 28 20 73 43 74 78 2e 63 54 65 72     if( sCtx.cTer
24420 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20  m!=sCtx.cColSep 
24430 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d  ) break;.      }
24440 0a 20 20 20 20 20 20 69 66 28 20 63 53 65 70 3d  .      if( cSep=
24450 3d 27 28 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='(' ){.        
24460 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 72  sqlite3_free(zCr
24470 65 61 74 65 29 3b 0a 20 20 20 20 20 20 20 20 73  eate);.        s
24480 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43 74 78  qlite3_free(sCtx
24490 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 78 43 6c  .z);.        xCl
244a0 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
244b0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
244c0 74 66 28 73 74 64 65 72 72 2c 22 25 73 3a 20 65  tf(stderr,"%s: e
244d0 6d 70 74 79 20 66 69 6c 65 5c 6e 22 2c 20 73 43  mpty file\n", sC
244e0 74 78 2e 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20  tx.zFile);.     
244f0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
24500 20 20 20 7d 0a 20 20 20 20 20 20 7a 43 72 65 61     }.      zCrea
24510 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  te = sqlite3_mpr
24520 69 6e 74 66 28 22 25 7a 5c 6e 29 22 2c 20 7a 43  intf("%z\n)", zC
24530 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20 72 63  reate);.      rc
24540 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
24550 70 2d 3e 64 62 2c 20 7a 43 72 65 61 74 65 2c 20  p->db, zCreate, 
24560 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  0, 0, 0);.      
24570 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 72  sqlite3_free(zCr
24580 65 61 74 65 29 3b 0a 20 20 20 20 20 20 69 66 28  eate);.      if(
24590 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75   rc ){.        u
245a0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
245b0 72 2c 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  r, "CREATE TABLE
245c0 20 25 73 28 2e 2e 2e 29 20 66 61 69 6c 65 64 3a   %s(...) failed:
245d0 20 25 73 5c 6e 22 2c 20 7a 54 61 62 6c 65 2c 0a   %s\n", zTable,.
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245f0 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70  sqlite3_errmsg(p
24600 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20 20  ->db));.        
24610 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43 74  sqlite3_free(sCt
24620 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 78 43  x.z);.        xC
24630 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a  loser(sCtx.in);.
24640 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
24650 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
24660 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
24670 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
24680 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
24690 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73   0);.    }.    s
246a0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
246b0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b  );.    if( rc ){
246c0 0a 20 20 20 20 20 20 69 66 20 28 70 53 74 6d 74  .      if (pStmt
246d0 29 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  ) sqlite3_finali
246e0 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  ze(pStmt);.     
246f0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
24700 65 72 72 2c 22 45 72 72 6f 72 3a 20 25 73 5c 6e  err,"Error: %s\n
24710 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
24720 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
24730 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e   xCloser(sCtx.in
24740 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
24750 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 43 6f  1;.    }.    nCo
24760 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
24770 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b  mn_count(pStmt);
24780 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
24790 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
247a0 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20    pStmt = 0;.   
247b0 20 69 66 28 20 6e 43 6f 6c 3d 3d 30 20 29 20 72   if( nCol==0 ) r
247c0 65 74 75 72 6e 20 30 3b 20 2f 2a 20 6e 6f 20 63  eturn 0; /* no c
247d0 6f 6c 75 6d 6e 73 2c 20 6e 6f 20 65 72 72 6f 72  olumns, no error
247e0 20 2a 2f 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73   */.    zSql = s
247f0 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28  qlite3_malloc64(
24800 20 6e 42 79 74 65 2a 32 20 2b 20 32 30 20 2b 20   nByte*2 + 20 + 
24810 6e 43 6f 6c 2a 32 20 29 3b 0a 20 20 20 20 69 66  nCol*2 );.    if
24820 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
24830 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
24840 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75  derr, "Error: ou
24850 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b  t of memory\n");
24860 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72 28 73  .      xCloser(s
24870 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20 20 72  Ctx.in);.      r
24880 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
24890 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
248a0 6e 74 66 28 6e 42 79 74 65 2b 32 30 2c 20 7a 53  ntf(nByte+20, zS
248b0 71 6c 2c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  ql, "INSERT INTO
248c0 20 5c 22 25 77 5c 22 20 56 41 4c 55 45 53 28 3f   \"%w\" VALUES(?
248d0 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20  ", zTable);.    
248e0 6a 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 53 71  j = strlen30(zSq
248f0 6c 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b  l);.    for(i=1;
24900 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20   i<nCol; i++){. 
24910 20 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d       zSql[j++] =
24920 20 27 2c 27 3b 0a 20 20 20 20 20 20 7a 53 71 6c   ',';.      zSql
24930 5b 6a 2b 2b 5d 20 3d 20 27 3f 27 3b 0a 20 20 20  [j++] = '?';.   
24940 20 7d 0a 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d   }.    zSql[j++]
24950 20 3d 20 27 29 27 3b 0a 20 20 20 20 7a 53 71 6c   = ')';.    zSql
24960 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 72 63 20  [j] = 0;.    rc 
24970 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
24980 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  e_v2(p->db, zSql
24990 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
249a0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
249b0 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66  ee(zSql);.    if
249c0 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74  ( rc ){.      ut
249d0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
249e0 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  , "Error: %s\n",
249f0 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
24a00 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 69  p->db));.      i
24a10 66 20 28 70 53 74 6d 74 29 20 73 71 6c 69 74 65  f (pStmt) sqlite
24a20 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
24a30 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72  );.      xCloser
24a40 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20  (sCtx.in);.     
24a50 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
24a60 0a 20 20 20 20 6e 65 65 64 43 6f 6d 6d 69 74 20  .    needCommit 
24a70 3d 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  = sqlite3_get_au
24a80 74 6f 63 6f 6d 6d 69 74 28 70 2d 3e 64 62 29 3b  tocommit(p->db);
24a90 0a 20 20 20 20 69 66 28 20 6e 65 65 64 43 6f 6d  .    if( needCom
24aa0 6d 69 74 20 29 20 73 71 6c 69 74 65 33 5f 65 78  mit ) sqlite3_ex
24ab0 65 63 28 70 2d 3e 64 62 2c 20 22 42 45 47 49 4e  ec(p->db, "BEGIN
24ac0 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20  ", 0, 0, 0);.   
24ad0 20 64 6f 7b 0a 20 20 20 20 20 20 69 6e 74 20 73   do{.      int s
24ae0 74 61 72 74 4c 69 6e 65 20 3d 20 73 43 74 78 2e  tartLine = sCtx.
24af0 6e 4c 69 6e 65 3b 0a 20 20 20 20 20 20 66 6f 72  nLine;.      for
24b00 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b  (i=0; i<nCol; i+
24b10 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72  +){.        char
24b20 20 2a 7a 20 3d 20 78 52 65 61 64 28 26 73 43 74   *z = xRead(&sCt
24b30 78 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20  x);.        /*. 
24b40 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20 77 65         ** Did we
24b50 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d 66 69   reach end-of-fi
24b60 6c 65 20 62 65 66 6f 72 65 20 66 69 6e 64 69 6e  le before findin
24b70 67 20 61 6e 79 20 63 6f 6c 75 6d 6e 73 3f 0a 20  g any columns?. 
24b80 20 20 20 20 20 20 20 2a 2a 20 49 66 20 73 6f 2c         ** If so,
24b90 20 73 74 6f 70 20 69 6e 73 74 65 61 64 20 6f 66   stop instead of
24ba0 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 20 74 68   NULL filling th
24bb0 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75  e remaining colu
24bc0 6d 6e 73 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  mns..        */.
24bd0 20 20 20 20 20 20 20 20 69 66 28 20 7a 3d 3d 30          if( z==0
24be0 20 26 26 20 69 3d 3d 30 20 29 20 62 72 65 61 6b   && i==0 ) break
24bf0 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20 20 20  ;.        /*.   
24c00 20 20 20 20 20 2a 2a 20 44 69 64 20 77 65 20 72       ** Did we r
24c10 65 61 63 68 20 65 6e 64 2d 6f 66 2d 66 69 6c 65  each end-of-file
24c20 20 4f 52 20 65 6e 64 2d 6f 66 2d 6c 69 6e 65 20   OR end-of-line 
24c30 62 65 66 6f 72 65 20 66 69 6e 64 69 6e 67 20 61  before finding a
24c40 6e 79 0a 20 20 20 20 20 20 20 20 2a 2a 20 63 6f  ny.        ** co
24c50 6c 75 6d 6e 73 20 69 6e 20 41 53 43 49 49 20 6d  lumns in ASCII m
24c60 6f 64 65 3f 20 20 49 66 20 73 6f 2c 20 73 74 6f  ode?  If so, sto
24c70 70 20 69 6e 73 74 65 61 64 20 6f 66 20 4e 55 4c  p instead of NUL
24c80 4c 20 66 69 6c 6c 69 6e 67 0a 20 20 20 20 20 20  L filling.      
24c90 20 20 2a 2a 20 74 68 65 20 72 65 6d 61 69 6e 69    ** the remaini
24ca0 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 20 20 20 20  ng columns..    
24cb0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
24cc0 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45  f( p->mode==MODE
24cd0 5f 41 73 63 69 69 20 26 26 20 28 7a 3d 3d 30 20  _Ascii && (z==0 
24ce0 7c 7c 20 7a 5b 30 5d 3d 3d 30 29 20 26 26 20 69  || z[0]==0) && i
24cf0 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
24d00 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
24d10 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 2b  d_text(pStmt, i+
24d20 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
24d30 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
24d40 20 20 20 20 20 69 66 28 20 69 3c 6e 43 6f 6c 2d       if( i<nCol-
24d50 31 20 26 26 20 73 43 74 78 2e 63 54 65 72 6d 21  1 && sCtx.cTerm!
24d60 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 7b  =sCtx.cColSep ){
24d70 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
24d80 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
24d90 25 73 3a 25 64 3a 20 65 78 70 65 63 74 65 64 20  %s:%d: expected 
24da0 25 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 66  %d columns but f
24db0 6f 75 6e 64 20 25 64 20 2d 20 22 0a 20 20 20 20  ound %d - ".    
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24dd0 20 20 20 20 20 20 22 66 69 6c 6c 69 6e 67 20 74        "filling t
24de0 68 65 20 72 65 73 74 20 77 69 74 68 20 4e 55 4c  he rest with NUL
24df0 4c 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  L\n",.          
24e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e10 73 43 74 78 2e 7a 46 69 6c 65 2c 20 73 74 61 72  sCtx.zFile, star
24e20 74 4c 69 6e 65 2c 20 6e 43 6f 6c 2c 20 69 2b 31  tLine, nCol, i+1
24e30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 20 2b  );.          i +
24e40 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 20 20 77  = 2;.          w
24e50 68 69 6c 65 28 20 69 3c 3d 6e 43 6f 6c 20 29 7b  hile( i<=nCol ){
24e60 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
24e70 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b 20 69 2b  ll(pStmt, i); i+
24e80 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  +; }.        }. 
24e90 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
24ea0 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73 43 74   sCtx.cTerm==sCt
24eb0 78 2e 63 43 6f 6c 53 65 70 20 29 7b 0a 20 20 20  x.cColSep ){.   
24ec0 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
24ed0 20 20 20 78 52 65 61 64 28 26 73 43 74 78 29 3b     xRead(&sCtx);
24ee0 0a 20 20 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a  .          i++;.
24ef0 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20          }while( 
24f00 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73 43 74 78  sCtx.cTerm==sCtx
24f10 2e 63 43 6f 6c 53 65 70 20 29 3b 0a 20 20 20 20  .cColSep );.    
24f20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
24f30 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20  stderr, "%s:%d: 
24f40 65 78 70 65 63 74 65 64 20 25 64 20 63 6f 6c 75  expected %d colu
24f50 6d 6e 73 20 62 75 74 20 66 6f 75 6e 64 20 25 64  mns but found %d
24f60 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   - ".           
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65 78               "ex
24f80 74 72 61 73 20 69 67 6e 6f 72 65 64 5c 6e 22 2c  tras ignored\n",
24f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24fa0 20 20 20 20 20 20 20 20 20 73 43 74 78 2e 7a 46           sCtx.zF
24fb0 69 6c 65 2c 20 73 74 61 72 74 4c 69 6e 65 2c 20  ile, startLine, 
24fc0 6e 43 6f 6c 2c 20 69 29 3b 0a 20 20 20 20 20 20  nCol, i);.      
24fd0 7d 0a 20 20 20 20 20 20 69 66 28 20 69 3e 3d 6e  }.      if( i>=n
24fe0 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 73  Col ){.        s
24ff0 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
25000 74 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  t);.        rc =
25010 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70   sqlite3_reset(p
25020 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 69  Stmt);.        i
25030 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
25040 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74   ){.          ut
25050 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
25060 2c 20 22 25 73 3a 25 64 3a 20 49 4e 53 45 52 54  , "%s:%d: INSERT
25070 20 66 61 69 6c 65 64 3a 20 25 73 5c 6e 22 2c 20   failed: %s\n", 
25080 73 43 74 78 2e 7a 46 69 6c 65 2c 0a 20 20 20 20  sCtx.zFile,.    
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250a0 20 20 73 74 61 72 74 4c 69 6e 65 2c 20 73 71 6c    startLine, sql
250b0 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
250c0 62 29 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  b));.        }. 
250d0 20 20 20 20 20 7d 0a 20 20 20 20 7d 77 68 69 6c       }.    }whil
250e0 65 28 20 73 43 74 78 2e 63 54 65 72 6d 21 3d 45  e( sCtx.cTerm!=E
250f0 4f 46 20 29 3b 0a 0a 20 20 20 20 78 43 6c 6f 73  OF );..    xClos
25100 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
25110 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43   sqlite3_free(sC
25120 74 78 2e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74  tx.z);.    sqlit
25130 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
25140 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 65 64  t);.    if( need
25150 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74 65 33  Commit ) sqlite3
25160 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 43 4f  _exec(p->db, "CO
25170 4d 4d 49 54 22 2c 20 30 2c 20 30 2c 20 30 29 3b  MMIT", 0, 0, 0);
25180 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65  .  }else..#ifnde
25190 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
251a0 42 4c 45 0a 20 20 69 66 28 20 63 3d 3d 27 69 27  BLE.  if( c=='i'
251b0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
251c0 67 5b 30 5d 2c 20 22 69 6d 70 6f 73 74 65 72 22  g[0], "imposter"
251d0 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63  , n)==0 ){.    c
251e0 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20 20 63  har *zSql;.    c
251f0 68 61 72 20 2a 7a 43 6f 6c 6c 69 73 74 20 3d 20  har *zCollist = 
25200 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  0;.    sqlite3_s
25210 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 20 20  tmt *pStmt;.    
25220 69 6e 74 20 74 6e 75 6d 20 3d 20 30 3b 0a 20 20  int tnum = 0;.  
25230 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 66 28    int i;.    if(
25240 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20 20 20   nArg!=3 ){.    
25250 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
25260 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 69  derr, "Usage: .i
25270 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20 49 4d  mposter INDEX IM
25280 50 4f 53 54 45 52 5c 6e 22 29 3b 0a 20 20 20 20  POSTER\n");.    
25290 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
252a0 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
252b0 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
252c0 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
252d0 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
252e0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c  te3_mprintf("SEL
252f0 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46 52 4f  ECT rootpage FRO
25300 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  M sqlite_master"
25310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25320 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48              " WH
25330 45 52 45 20 6e 61 6d 65 3d 27 25 71 27 20 41 4e  ERE name='%q' AN
25340 44 20 74 79 70 65 3d 27 69 6e 64 65 78 27 22 2c  D type='index'",
25350 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
25360 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
25370 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
25380 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
25390 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
253a0 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20  (zSql);.    if( 
253b0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
253c0 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  mt)==SQLITE_ROW 
253d0 29 7b 0a 20 20 20 20 20 20 74 6e 75 6d 20 3d 20  ){.      tnum = 
253e0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
253f0 6e 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20  nt(pStmt, 0);.  
25400 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
25410 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
25420 0a 20 20 20 20 69 66 28 20 74 6e 75 6d 3d 3d 30  .    if( tnum==0
25430 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
25440 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6e  rintf(stderr, "n
25450 6f 20 73 75 63 68 20 69 6e 64 65 78 3a 20 5c 22  o such index: \"
25460 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31  %s\"\n", azArg[1
25470 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ]);.      rc = 1
25480 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
25490 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
254a0 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 20 3d      }.    zSql =
254b0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
254c0 28 22 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78  ("PRAGMA index_x
254d0 69 6e 66 6f 3d 27 25 71 27 22 2c 20 61 7a 41 72  info='%q'", azAr
254e0 67 5b 31 5d 29 3b 0a 20 20 20 20 72 63 20 3d 20  g[1]);.    rc = 
254f0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
25500 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
25510 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
25520 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
25530 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 20 3d 20  (zSql);.    i = 
25540 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 73 71  0;.    while( sq
25550 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
25560 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
25570 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4c 61 62  .      char zLab
25580 65 6c 5b 32 30 5d 3b 0a 20 20 20 20 20 20 63 6f  el[20];.      co
25590 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d  nst char *zCol =
255a0 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
255b0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
255c0 74 28 70 53 74 6d 74 2c 32 29 3b 0a 20 20 20 20  t(pStmt,2);.    
255d0 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28    i++;.      if(
255e0 20 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zCol==0 ){.    
255f0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
25600 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74  column_int(pStmt
25610 2c 31 29 3d 3d 2d 31 20 29 7b 0a 20 20 20 20 20  ,1)==-1 ){.     
25620 20 20 20 20 20 7a 43 6f 6c 20 3d 20 22 5f 52 4f       zCol = "_RO
25630 57 49 44 5f 22 3b 0a 20 20 20 20 20 20 20 20 7d  WID_";.        }
25640 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
25650 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
25660 28 73 69 7a 65 6f 66 28 7a 4c 61 62 65 6c 29 2c  (sizeof(zLabel),
25670 7a 4c 61 62 65 6c 2c 22 65 78 70 72 25 64 22 2c  zLabel,"expr%d",
25680 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 43  i);.          zC
25690 6f 6c 20 3d 20 7a 4c 61 62 65 6c 3b 0a 20 20 20  ol = zLabel;.   
256a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
256b0 20 20 20 20 20 69 66 28 20 7a 43 6f 6c 6c 69 73       if( zCollis
256c0 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
256d0 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71 6c 69 74  zCollist = sqlit
256e0 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22 25 77  e3_mprintf("\"%w
256f0 5c 22 22 2c 20 7a 43 6f 6c 29 3b 0a 20 20 20 20  \"", zCol);.    
25700 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
25710 20 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71 6c 69   zCollist = sqli
25720 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 2c  te3_mprintf("%z,
25730 5c 22 25 77 5c 22 22 2c 20 7a 43 6f 6c 6c 69 73  \"%w\"", zCollis
25740 74 2c 20 7a 43 6f 6c 29 3b 0a 20 20 20 20 20 20  t, zCol);.      
25750 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
25760 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
25770 6d 74 29 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  mt);.    zSql = 
25780 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
25790 0a 20 20 20 20 20 20 20 20 20 20 22 43 52 45 41  .          "CREA
257a0 54 45 20 54 41 42 4c 45 20 5c 22 25 77 5c 22 28  TE TABLE \"%w\"(
257b0 25 73 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 25  %s,PRIMARY KEY(%
257c0 73 29 29 57 49 54 48 4f 55 54 20 52 4f 57 49 44  s))WITHOUT ROWID
257d0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 61 7a 41  ",.          azA
257e0 72 67 5b 32 5d 2c 20 7a 43 6f 6c 6c 69 73 74 2c  rg[2], zCollist,
257f0 20 7a 43 6f 6c 6c 69 73 74 29 3b 0a 20 20 20 20   zCollist);.    
25800 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 6f  sqlite3_free(zCo
25810 6c 6c 69 73 74 29 3b 0a 20 20 20 20 72 63 20 3d  llist);.    rc =
25820 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
25830 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
25840 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 2c 20  TCTRL_IMPOSTER, 
25850 70 2d 3e 64 62 2c 20 22 6d 61 69 6e 22 2c 20 31  p->db, "main", 1
25860 2c 20 74 6e 75 6d 29 3b 0a 20 20 20 20 69 66 28  , tnum);.    if(
25870 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
25880 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
25890 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
258a0 20 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 30 29 3b   zSql, 0, 0, 0);
258b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74  .      sqlite3_t
258c0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
258d0 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f  TE_TESTCTRL_IMPO
258e0 53 54 45 52 2c 20 70 2d 3e 64 62 2c 20 22 6d 61  STER, p->db, "ma
258f0 69 6e 22 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  in", 0, 0);.    
25900 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
25910 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
25920 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20 69  stderr, "Error i
25930 6e 20 5b 25 73 5d 3a 20 25 73 5c 6e 22 2c 20 7a  n [%s]: %s\n", z
25940 53 71 6c 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Sql, sqlite3_err
25950 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  msg(p->db));.   
25960 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
25970 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
25980 64 6f 75 74 2c 20 22 25 73 3b 5c 6e 22 2c 20 7a  dout, "%s;\n", z
25990 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 72 61  Sql);.        ra
259a0 77 5f 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c  w_printf(stdout,
259b0 0a 20 20 20 20 20 20 20 20 20 20 20 22 57 41 52  .           "WAR
259c0 4e 49 4e 47 3a 20 77 72 69 74 69 6e 67 20 74 6f  NING: writing to
259d0 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62   an imposter tab
259e0 6c 65 20 77 69 6c 6c 20 63 6f 72 72 75 70 74 20  le will corrupt 
259f0 74 68 65 20 69 6e 64 65 78 21 5c 6e 22 0a 20 20  the index!\n".  
25a00 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 7d        );.      }
25a10 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
25a20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
25a30 65 72 72 2c 20 22 53 51 4c 49 54 45 5f 54 45 53  err, "SQLITE_TES
25a40 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 20 72  TCTRL_IMPOSTER r
25a50 65 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63  eturns %d\n", rc
25a60 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
25a70 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
25a80 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
25a90 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
25aa0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25ab0 5f 4f 4d 49 54 5f 54 45 53 54 5f 43 4f 4e 54 52  _OMIT_TEST_CONTR
25ac0 4f 4c 29 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53  OL) */..#ifdef S
25ad0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
25ae0 52 41 43 45 0a 20 20 69 66 28 20 63 3d 3d 27 69  RACE.  if( c=='i
25af0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
25b00 72 67 5b 30 5d 2c 20 22 69 6f 74 72 61 63 65 22  rg[0], "iotrace"
25b10 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53  , n)==0 ){.    S
25b20 51 4c 49 54 45 5f 41 50 49 20 65 78 74 65 72 6e  QLITE_API extern
25b30 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44   void (SQLITE_CD
25b40 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72  ECL *sqlite3IoTr
25b50 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
25b60 2c 20 2e 2e 2e 29 3b 0a 20 20 20 20 69 66 28 20  , ...);.    if( 
25b70 69 6f 74 72 61 63 65 20 26 26 20 69 6f 74 72 61  iotrace && iotra
25b80 63 65 21 3d 73 74 64 6f 75 74 20 29 20 66 63 6c  ce!=stdout ) fcl
25b90 6f 73 65 28 69 6f 74 72 61 63 65 29 3b 0a 20 20  ose(iotrace);.  
25ba0 20 20 69 6f 74 72 61 63 65 20 3d 20 30 3b 0a 20    iotrace = 0;. 
25bb0 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b     if( nArg<2 ){
25bc0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6f  .      sqlite3Io
25bd0 54 72 61 63 65 20 3d 20 30 3b 0a 20 20 20 20 7d  Trace = 0;.    }
25be0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
25bf0 61 7a 41 72 67 5b 31 5d 2c 20 22 2d 22 29 3d 3d  azArg[1], "-")==
25c00 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
25c10 65 33 49 6f 54 72 61 63 65 20 3d 20 69 6f 74 72  e3IoTrace = iotr
25c20 61 63 65 50 72 69 6e 74 66 3b 0a 20 20 20 20 20  acePrintf;.     
25c30 20 69 6f 74 72 61 63 65 20 3d 20 73 74 64 6f 75   iotrace = stdou
25c40 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  t;.    }else{.  
25c50 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20 66 6f      iotrace = fo
25c60 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20 22 77  pen(azArg[1], "w
25c70 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 6f  ");.      if( io
25c80 74 72 61 63 65 3d 3d 30 20 29 7b 0a 20 20 20 20  trace==0 ){.    
25c90 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
25ca0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
25cb0 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73  cannot open \"%s
25cc0 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29  \"\n", azArg[1])
25cd0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
25ce0 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a 20 20  3IoTrace = 0;.  
25cf0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
25d00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
25d10 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63     sqlite3IoTrac
25d20 65 20 3d 20 69 6f 74 72 61 63 65 50 72 69 6e 74  e = iotracePrint
25d30 66 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  f;.      }.    }
25d40 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
25d50 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26  .  if( c=='l' &&
25d60 20 6e 3e 3d 35 20 26 26 20 73 74 72 6e 63 6d 70   n>=5 && strncmp
25d70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 69 6d 69  (azArg[0], "limi
25d80 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ts", n)==0 ){.  
25d90 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
25da0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 63  truct {.       c
25db0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69 6d 69  onst char *zLimi
25dc0 74 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61 6d 65  tName;   /* Name
25dd0 20 6f 66 20 61 20 6c 69 6d 69 74 20 2a 2f 0a 20   of a limit */. 
25de0 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 43        int limitC
25df0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
25e00 2f 2a 20 49 6e 74 65 67 65 72 20 63 6f 64 65 20  /* Integer code 
25e10 66 6f 72 20 74 68 61 74 20 6c 69 6d 69 74 20 2a  for that limit *
25e20 2f 0a 20 20 20 20 7d 20 61 4c 69 6d 69 74 5b 5d  /.    } aLimit[]
25e30 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 6c 65   = {.      { "le
25e40 6e 67 74 68 22 2c 20 20 20 20 20 20 20 20 20 20  ngth",          
25e50 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d        SQLITE_LIM
25e60 49 54 5f 4c 45 4e 47 54 48 20 20 20 20 20 20 20  IT_LENGTH       
25e70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
25e80 20 20 20 20 20 20 7b 20 22 73 71 6c 5f 6c 65 6e        { "sql_len
25e90 67 74 68 22 2c 20 20 20 20 20 20 20 20 20 20 20  gth",           
25ea0 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51   SQLITE_LIMIT_SQ
25eb0 4c 5f 4c 45 4e 47 54 48 20 20 20 20 20 20 20 20  L_LENGTH        
25ec0 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
25ed0 20 7b 20 22 63 6f 6c 75 6d 6e 22 2c 20 20 20 20   { "column",    
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
25ef0 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20  TE_LIMIT_COLUMN 
25f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f10 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 65     },.      { "e
25f20 78 70 72 5f 64 65 70 74 68 22 2c 20 20 20 20 20  xpr_depth",     
25f30 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49         SQLITE_LI
25f40 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48 20 20  MIT_EXPR_DEPTH  
25f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
25f60 0a 20 20 20 20 20 20 7b 20 22 63 6f 6d 70 6f 75  .      { "compou
25f70 6e 64 5f 73 65 6c 65 63 74 22 2c 20 20 20 20 20  nd_select",     
25f80 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43    SQLITE_LIMIT_C
25f90 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 20 20  OMPOUND_SELECT  
25fa0 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
25fb0 20 20 7b 20 22 76 64 62 65 5f 6f 70 22 2c 20 20    { "vdbe_op",  
25fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
25fd0 49 54 45 5f 4c 49 4d 49 54 5f 56 44 42 45 5f 4f  ITE_LIMIT_VDBE_O
25fe0 50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  P               
25ff0 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
26000 66 75 6e 63 74 69 6f 6e 5f 61 72 67 22 2c 20 20  function_arg",  
26010 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
26020 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52  IMIT_FUNCTION_AR
26030 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  G              }
26040 2c 0a 20 20 20 20 20 20 7b 20 22 61 74 74 61 63  ,.      { "attac
26050 68 65 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  hed",           
26060 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
26070 41 54 54 41 43 48 45 44 20 20 20 20 20 20 20 20  ATTACHED        
26080 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
26090 20 20 20 7b 20 22 6c 69 6b 65 5f 70 61 74 74 65     { "like_patte
260a0 72 6e 5f 6c 65 6e 67 74 68 22 2c 20 20 20 53 51  rn_length",   SQ
260b0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45 5f  LITE_LIMIT_LIKE_
260c0 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 20 20  PATTERN_LENGTH  
260d0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
260e0 22 76 61 72 69 61 62 6c 65 5f 6e 75 6d 62 65 72  "variable_number
260f0 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f  ",       SQLITE_
26100 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e  LIMIT_VARIABLE_N
26110 55 4d 42 45 52 20 20 20 20 20 20 20 20 20 20 20  UMBER           
26120 7d 2c 0a 20 20 20 20 20 20 7b 20 22 74 72 69 67  },.      { "trig
26130 67 65 72 5f 64 65 70 74 68 22 2c 20 20 20 20 20  ger_depth",     
26140 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54      SQLITE_LIMIT
26150 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 20 20  _TRIGGER_DEPTH  
26160 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
26170 20 20 20 20 7b 20 22 77 6f 72 6b 65 72 5f 74 68      { "worker_th
26180 72 65 61 64 73 22 2c 20 20 20 20 20 20 20 20 53  reads",        S
26190 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
261a0 45 52 5f 54 48 52 45 41 44 53 20 20 20 20 20 20  ER_THREADS      
261b0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7d 3b 0a        },.    };.
261c0 20 20 20 20 69 6e 74 20 69 2c 20 6e 32 3b 0a 20      int i, n2;. 
261d0 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29     open_db(p, 0)
261e0 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d  ;.    if( nArg==
261f0 31 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69  1 ){.      for(i
26200 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28  =0; i<ArraySize(
26210 61 4c 69 6d 69 74 29 3b 20 69 2b 2b 29 7b 0a 20  aLimit); i++){. 
26220 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
26230 32 30 73 20 25 64 5c 6e 22 2c 20 61 4c 69 6d 69  20s %d\n", aLimi
26240 74 5b 69 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c  t[i].zLimitName,
26250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26260 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d  sqlite3_limit(p-
26270 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 5d 2e 6c  >db, aLimit[i].l
26280 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29 29 3b 0a  imitCode, -1));.
26290 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
262a0 65 20 69 66 28 20 6e 41 72 67 3e 33 20 29 7b 0a  e if( nArg>3 ){.
262b0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
262c0 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
262d0 20 2e 6c 69 6d 69 74 20 4e 41 4d 45 20 3f 4e 45   .limit NAME ?NE
262e0 57 2d 56 41 4c 55 45 3f 5c 6e 22 29 3b 0a 20 20  W-VALUE?\n");.  
262f0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
26300 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
26310 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 65  and_exit;.    }e
26320 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  lse{.      int i
26330 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a 20 20 20 20  Limit = -1;.    
26340 20 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30 28    n2 = strlen30(
26350 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
26360 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
26370 79 53 69 7a 65 28 61 4c 69 6d 69 74 29 3b 20 69  ySize(aLimit); i
26380 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
26390 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
263a0 70 28 61 4c 69 6d 69 74 5b 69 5d 2e 7a 4c 69 6d  p(aLimit[i].zLim
263b0 69 74 4e 61 6d 65 2c 20 61 7a 41 72 67 5b 31 5d  itName, azArg[1]
263c0 2c 20 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  , n2)==0 ){.    
263d0 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74        if( iLimit
263e0 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
263f0 20 20 69 4c 69 6d 69 74 20 3d 20 69 3b 0a 20 20    iLimit = i;.  
26400 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
26410 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
26420 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
26430 61 6d 62 69 67 75 6f 75 73 20 6c 69 6d 69 74 3a  ambiguous limit:
26440 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72   \"%s\"\n", azAr
26450 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  g[1]);.         
26460 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
26470 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
26480 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
26490 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
264a0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
264b0 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 30 20     if( iLimit<0 
264c0 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
264d0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
264e0 75 6e 6b 6e 6f 77 6e 20 6c 69 6d 69 74 3a 20 5c  unknown limit: \
264f0 22 25 73 5c 22 5c 6e 22 0a 20 20 20 20 20 20 20  "%s\"\n".       
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26510 20 22 65 6e 74 65 72 20 5c 22 2e 6c 69 6d 69 74   "enter \".limit
26520 73 5c 22 20 77 69 74 68 20 6e 6f 20 61 72 67 75  s\" with no argu
26530 6d 65 6e 74 73 20 66 6f 72 20 61 20 6c 69 73 74  ments for a list
26540 2e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  .\n",.          
26550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
26560 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
26570 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
26580 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
26590 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20  and_exit;.      
265a0 7d 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72 67  }.      if( nArg
265b0 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==3 ){.        s
265c0 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d 3e  qlite3_limit(p->
265d0 64 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69  db, aLimit[iLimi
265e0 74 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 0a 20 20  t].limitCode,.  
265f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26600 20 20 20 20 28 69 6e 74 29 69 6e 74 65 67 65 72      (int)integer
26610 56 61 6c 75 65 28 61 7a 41 72 67 5b 32 5d 29 29  Value(azArg[2]))
26620 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
26630 70 72 69 6e 74 66 28 22 25 32 30 73 20 25 64 5c  printf("%20s %d\
26640 6e 22 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69  n", aLimit[iLimi
26650 74 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c 0a 20  t].zLimitName,. 
26660 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
26670 74 65 33 5f 6c 69 6d 69 74 28 70 2d 3e 64 62 2c  te3_limit(p->db,
26680 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69 74 5d 2e   aLimit[iLimit].
26690 6c 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29 29 3b  limitCode, -1));
266a0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
266b0 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26 20    if( c=='l' && 
266c0 6e 3e 32 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>2 && strncmp(a
266d0 7a 41 72 67 5b 30 5d 2c 20 22 6c 69 6e 74 22 2c  zArg[0], "lint",
266e0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f 70   n)==0 ){.    op
266f0 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20  en_db(p, 0);.   
26700 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61 6e 64 28   lintDotCommand(
26710 70 2c 20 61 7a 41 72 67 2c 20 6e 41 72 67 29 3b  p, azArg, nArg);
26720 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65  .  }else..#ifnde
26730 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
26740 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 69  AD_EXTENSION.  i
26750 66 28 20 63 3d 3d 27 6c 27 20 26 26 20 73 74 72  f( c=='l' && str
26760 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
26770 6c 6f 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  load", n)==0 ){.
26780 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
26790 7a 46 69 6c 65 2c 20 2a 7a 50 72 6f 63 3b 0a 20  zFile, *zProc;. 
267a0 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67     char *zErrMsg
267b0 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 6e 41   = 0;.    if( nA
267c0 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20 72 61  rg<2 ){.      ra
267d0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
267e0 20 22 55 73 61 67 65 3a 20 2e 6c 6f 61 64 20 46   "Usage: .load F
267f0 49 4c 45 20 3f 45 4e 54 52 59 50 4f 49 4e 54 3f  ILE ?ENTRYPOINT?
26800 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
26810 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
26820 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
26830 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 46 69 6c  ;.    }.    zFil
26840 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20  e = azArg[1];.  
26850 20 20 7a 50 72 6f 63 20 3d 20 6e 41 72 67 3e 3d    zProc = nArg>=
26860 33 20 3f 20 61 7a 41 72 67 5b 32 5d 20 3a 20 30  3 ? azArg[2] : 0
26870 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  ;.    open_db(p,
26880 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   0);.    rc = sq
26890 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
268a0 73 69 6f 6e 28 70 2d 3e 64 62 2c 20 7a 46 69 6c  sion(p->db, zFil
268b0 65 2c 20 7a 50 72 6f 63 2c 20 26 7a 45 72 72 4d  e, zProc, &zErrM
268c0 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  sg);.    if( rc!
268d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
268e0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
268f0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
26900 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b  %s\n", zErrMsg);
26910 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
26920 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20  ree(zErrMsg);.  
26930 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
26940 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  }.  }else.#endif
26950 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26  ..  if( c=='l' &
26960 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
26970 30 5d 2c 20 22 6c 6f 67 22 2c 20 6e 29 3d 3d 30  0], "log", n)==0
26980 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
26990 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77  !=2 ){.      raw
269a0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
269b0 22 55 73 61 67 65 3a 20 2e 6c 6f 67 20 46 49 4c  "Usage: .log FIL
269c0 45 4e 41 4d 45 5c 6e 22 29 3b 0a 20 20 20 20 20  ENAME\n");.     
269d0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c   rc = 1;.    }el
269e0 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  se{.      const 
269f0 63 68 61 72 20 2a 7a 46 69 6c 65 20 3d 20 61 7a  char *zFile = az
26a00 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20 6f 75  Arg[1];.      ou
26a10 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28  tput_file_close(
26a20 70 2d 3e 70 4c 6f 67 29 3b 0a 20 20 20 20 20 20  p->pLog);.      
26a30 70 2d 3e 70 4c 6f 67 20 3d 20 6f 75 74 70 75 74  p->pLog = output
26a40 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46 69 6c 65  _file_open(zFile
26a50 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
26a60 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6d 27 20 26  ..  if( c=='m' &
26a70 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
26a80 30 5d 2c 20 22 6d 6f 64 65 22 2c 20 6e 29 3d 3d  0], "mode", n)==
26a90 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
26aa0 68 61 72 20 2a 7a 4d 6f 64 65 20 3d 20 6e 41 72  har *zMode = nAr
26ab0 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d 20  g>=2 ? azArg[1] 
26ac0 3a 20 22 22 3b 0a 20 20 20 20 69 6e 74 20 6e 32  : "";.    int n2
26ad0 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a   = (int)strlen(z
26ae0 4d 6f 64 65 29 3b 0a 20 20 20 20 69 6e 74 20 63  Mode);.    int c
26af0 32 20 3d 20 7a 4d 6f 64 65 5b 30 5d 3b 0a 20 20  2 = zMode[0];.  
26b00 20 20 69 66 28 20 63 32 3d 3d 27 6c 27 20 26 26    if( c2=='l' &&
26b10 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63 6d 70   n2>2 && strncmp
26b20 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 6e 65 73  (azArg[1],"lines
26b30 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
26b40 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
26b50 5f 4c 69 6e 65 3b 0a 20 20 20 20 20 20 73 71 6c  _Line;.      sql
26b60 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
26b70 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72  zeof(p->rowSepar
26b80 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70  ator), p->rowSep
26b90 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29  arator, SEP_Row)
26ba0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
26bb0 63 32 3d 3d 27 63 27 20 26 26 20 73 74 72 6e 63  c2=='c' && strnc
26bc0 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63 6f 6c  mp(azArg[1],"col
26bd0 75 6d 6e 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  umns",n2)==0 ){.
26be0 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
26bf0 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20 20 20  MODE_Column;.   
26c00 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
26c10 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f  ntf(sizeof(p->ro
26c20 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e  wSeparator), p->
26c30 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45  rowSeparator, SE
26c40 50 5f 52 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73  P_Row);.    }els
26c50 65 20 69 66 28 20 63 32 3d 3d 27 6c 27 20 26 26  e if( c2=='l' &&
26c60 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63 6d 70   n2>2 && strncmp
26c70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 73 74 22  (azArg[1],"list"
26c80 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ,n2)==0 ){.     
26c90 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f   p->mode = MODE_
26ca0 4c 69 73 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  List;.      sqli
26cb0 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
26cc0 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  eof(p->colSepara
26cd0 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  tor), p->colSepa
26ce0 72 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6c 75 6d  rator, SEP_Colum
26cf0 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  n);.      sqlite
26d00 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
26d10 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  f(p->rowSeparato
26d20 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  r), p->rowSepara
26d30 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b 0a 20  tor, SEP_Row);. 
26d40 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d     }else if( c2=
26d50 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='h' && strncmp(
26d60 61 7a 41 72 67 5b 31 5d 2c 22 68 74 6d 6c 22 2c  azArg[1],"html",
26d70 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n2)==0 ){.      
26d80 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 48  p->mode = MODE_H
26d90 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  tml;.    }else i
26da0 66 28 20 63 32 3d 3d 27 74 27 20 26 26 20 73 74  f( c2=='t' && st
26db0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
26dc0 74 63 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20  tcl",n2)==0 ){. 
26dd0 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d       p->mode = M
26de0 4f 44 45 5f 54 63 6c 3b 0a 20 20 20 20 20 20 73  ODE_Tcl;.      s
26df0 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
26e00 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70  sizeof(p->colSep
26e10 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53  arator), p->colS
26e20 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 53 70  eparator, SEP_Sp
26e30 61 63 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ace);.      sqli
26e40 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
26e50 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61  eof(p->rowSepara
26e60 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61  tor), p->rowSepa
26e70 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b  rator, SEP_Row);
26e80 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
26e90 32 3d 3d 27 63 27 20 26 26 20 73 74 72 6e 63 6d  2=='c' && strncm
26ea0 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63 73 76 22  p(azArg[1],"csv"
26eb0 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ,n2)==0 ){.     
26ec0 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f   p->mode = MODE_
26ed0 43 73 76 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Csv;.      sqlit
26ee0 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
26ef0 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  of(p->colSeparat
26f00 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  or), p->colSepar
26f10 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6d 6d 61 29  ator, SEP_Comma)
26f20 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
26f30 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
26f40 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
26f50 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
26f60 72 2c 20 53 45 50 5f 43 72 4c 66 29 3b 0a 20 20  r, SEP_CrLf);.  
26f70 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d    }else if( c2==
26f80 27 74 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  't' && strncmp(a
26f90 7a 41 72 67 5b 31 5d 2c 22 74 61 62 73 22 2c 6e  zArg[1],"tabs",n
26fa0 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  2)==0 ){.      p
26fb0 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69  ->mode = MODE_Li
26fc0 73 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  st;.      sqlite
26fd0 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
26fe0 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  f(p->colSeparato
26ff0 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61  r), p->colSepara
27000 74 6f 72 2c 20 53 45 50 5f 54 61 62 29 3b 0a 20  tor, SEP_Tab);. 
27010 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d     }else if( c2=
27020 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='i' && strncmp(
27030 61 7a 41 72 67 5b 31 5d 2c 22 69 6e 73 65 72 74  azArg[1],"insert
27040 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
27050 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
27060 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 20 20 73  _Insert;.      s
27070 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 70 2c  et_table_name(p,
27080 20 6e 41 72 67 3e 3d 33 20 3f 20 61 7a 41 72 67   nArg>=3 ? azArg
27090 5b 32 5d 20 3a 20 22 74 61 62 6c 65 22 29 3b 0a  [2] : "table");.
270a0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32      }else if( c2
270b0 3d 3d 27 71 27 20 26 26 20 73 74 72 6e 63 6d 70  =='q' && strncmp
270c0 28 61 7a 41 72 67 5b 31 5d 2c 22 71 75 6f 74 65  (azArg[1],"quote
270d0 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
270e0 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
270f0 5f 51 75 6f 74 65 3b 0a 20 20 20 20 7d 65 6c 73  _Quote;.    }els
27100 65 20 69 66 28 20 63 32 3d 3d 27 61 27 20 26 26  e if( c2=='a' &&
27110 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31   strncmp(azArg[1
27120 5d 2c 22 61 73 63 69 69 22 2c 6e 32 29 3d 3d 30  ],"ascii",n2)==0
27130 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64   ){.      p->mod
27140 65 20 3d 20 4d 4f 44 45 5f 41 73 63 69 69 3b 0a  e = MODE_Ascii;.
27150 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
27160 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d  printf(sizeof(p-
27170 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20  >colSeparator), 
27180 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c  p->colSeparator,
27190 20 53 45 50 5f 55 6e 69 74 29 3b 0a 20 20 20 20   SEP_Unit);.    
271a0 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
271b0 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77  tf(sizeof(p->row
271c0 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72  Separator), p->r
271d0 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50  owSeparator, SEP
271e0 5f 52 65 63 6f 72 64 29 3b 0a 20 20 20 20 7d 65  _Record);.    }e
271f0 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 31 20  lse if( nArg==1 
27200 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
27210 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 63 75 72  ntf(p->out, "cur
27220 72 65 6e 74 20 6f 75 74 70 75 74 20 6d 6f 64 65  rent output mode
27230 3a 20 25 73 5c 6e 22 2c 20 6d 6f 64 65 44 65 73  : %s\n", modeDes
27240 63 72 5b 70 2d 3e 6d 6f 64 65 5d 29 3b 0a 20 20  cr[p->mode]);.  
27250 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
27260 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
27270 2c 20 22 45 72 72 6f 72 3a 20 6d 6f 64 65 20 73  , "Error: mode s
27280 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a  hould be one of:
27290 20 22 0a 20 20 20 20 20 20 20 20 20 22 61 73 63   ".         "asc
272a0 69 69 20 63 6f 6c 75 6d 6e 20 63 73 76 20 68 74  ii column csv ht
272b0 6d 6c 20 69 6e 73 65 72 74 20 6c 69 6e 65 20 6c  ml insert line l
272c0 69 73 74 20 71 75 6f 74 65 20 74 61 62 73 20 74  ist quote tabs t
272d0 63 6c 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  cl\n");.      rc
272e0 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
272f0 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f  p->cMode = p->mo
27300 64 65 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  de;.  }else..  i
27310 66 28 20 63 3d 3d 27 6e 27 20 26 26 20 73 74 72  f( c=='n' && str
27320 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
27330 6e 75 6c 6c 76 61 6c 75 65 22 2c 20 6e 29 3d 3d  nullvalue", n)==
27340 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
27350 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 71  g==2 ){.      sq
27360 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
27370 69 7a 65 6f 66 28 70 2d 3e 6e 75 6c 6c 56 61 6c  izeof(p->nullVal
27380 75 65 29 2c 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75  ue), p->nullValu
27390 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
273a0 20 20 20 20 20 20 20 20 20 20 22 25 2e 2a 73 22            "%.*s"
273b0 2c 20 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65  , (int)ArraySize
273c0 28 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 2d 31  (p->nullValue)-1
273d0 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
273e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
273f0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
27400 20 22 55 73 61 67 65 3a 20 2e 6e 75 6c 6c 76 61   "Usage: .nullva
27410 6c 75 65 20 53 54 52 49 4e 47 5c 6e 22 29 3b 0a  lue STRING\n");.
27420 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
27430 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
27440 66 28 20 63 3d 3d 27 6f 27 20 26 26 20 73 74 72  f( c=='o' && str
27450 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
27460 6f 70 65 6e 22 2c 20 6e 29 3d 3d 30 20 26 26 20  open", n)==0 && 
27470 6e 3e 3d 32 20 29 7b 0a 20 20 20 20 63 68 61 72  n>=2 ){.    char
27480 20 2a 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 3b 20   *zNewFilename; 
27490 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
274a0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
274b0 20 6f 70 65 6e 20 2a 2f 0a 20 20 20 20 69 6e 74   open */.    int
274c0 20 69 4e 61 6d 65 20 3d 20 31 3b 20 20 20 20 20   iName = 1;     
274d0 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 61 7a    /* Index in az
274e0 41 72 67 5b 5d 20 6f 66 20 74 68 65 20 66 69 6c  Arg[] of the fil
274f0 65 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74  ename */.    int
27500 20 6e 65 77 46 6c 61 67 20 3d 20 30 3b 20 20 20   newFlag = 0;   
27510 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 65 6c    /* True to del
27520 65 74 65 20 66 69 6c 65 20 62 65 66 6f 72 65 20  ete file before 
27530 6f 70 65 6e 69 6e 67 20 2a 2f 0a 20 20 20 20 2f  opening */.    /
27540 2a 20 43 6c 6f 73 65 20 74 68 65 20 65 78 69 73  * Close the exis
27550 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 2a 2f  ting database */
27560 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 63 6c 6f  .    session_clo
27570 73 65 5f 61 6c 6c 28 70 29 3b 0a 20 20 20 20 73  se_all(p);.    s
27580 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 2d 3e  qlite3_close(p->
27590 64 62 29 3b 0a 20 20 20 20 70 2d 3e 64 62 20 3d  db);.    p->db =
275a0 20 30 3b 0a 20 20 20 20 70 2d 3e 7a 44 62 46 69   0;.    p->zDbFi
275b0 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20  lename = 0;.    
275c0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 2d 3e  sqlite3_free(p->
275d0 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 29 3b 0a 20  zFreeOnClose);. 
275e0 20 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f     p->zFreeOnClo
275f0 73 65 20 3d 20 30 3b 0a 20 20 20 20 2f 2a 20 43  se = 0;.    /* C
27600 68 65 63 6b 20 66 6f 72 20 63 6f 6d 6d 61 6e 64  heck for command
27610 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20  -line arguments 
27620 2a 2f 0a 20 20 20 20 66 6f 72 28 69 4e 61 6d 65  */.    for(iName
27630 3d 31 3b 20 69 4e 61 6d 65 3c 6e 41 72 67 20 26  =1; iName<nArg &
27640 26 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 5b 30  & azArg[iName][0
27650 5d 3d 3d 27 2d 27 3b 20 69 4e 61 6d 65 2b 2b 29  ]=='-'; iName++)
27660 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
27670 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 4e  ar *z = azArg[iN
27680 61 6d 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  ame];.      if( 
27690 6f 70 74 69 6f 6e 4d 61 74 63 68 28 7a 2c 22 6e  optionMatch(z,"n
276a0 65 77 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ew") ){.        
276b0 6e 65 77 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20  newFlag = 1;.   
276c0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 30     }else if( z[0
276d0 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20  ]=='-' ){.      
276e0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
276f0 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f  derr, "unknown o
27700 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 7a 29  ption: %s\n", z)
27710 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
27720 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
27730 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
27740 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
27750 20 20 20 20 2f 2a 20 49 66 20 61 20 66 69 6c 65      /* If a file
27760 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
27770 64 2c 20 74 72 79 20 74 6f 20 6f 70 65 6e 20 69  d, try to open i
27780 74 20 66 69 72 73 74 20 2a 2f 0a 20 20 20 20 7a  t first */.    z
27790 4e 65 77 46 69 6c 65 6e 61 6d 65 20 3d 20 6e 41  NewFilename = nA
277a0 72 67 3e 69 4e 61 6d 65 20 3f 20 73 71 6c 69 74  rg>iName ? sqlit
277b0 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c  e3_mprintf("%s",
277c0 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 29 20 3a   azArg[iName]) :
277d0 20 30 3b 0a 20 20 20 20 69 66 28 20 7a 4e 65 77   0;.    if( zNew
277e0 46 69 6c 65 6e 61 6d 65 20 29 7b 0a 20 20 20 20  Filename ){.    
277f0 20 20 69 66 28 20 6e 65 77 46 6c 61 67 20 29 20    if( newFlag ) 
27800 73 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c 65 28  shellDeleteFile(
27810 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20  zNewFilename);. 
27820 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e       p->zDbFilen
27830 61 6d 65 20 3d 20 7a 4e 65 77 46 69 6c 65 6e 61  ame = zNewFilena
27840 6d 65 3b 0a 20 20 20 20 20 20 6f 70 65 6e 5f 64  me;.      open_d
27850 62 28 70 2c 20 31 29 3b 0a 20 20 20 20 20 20 69  b(p, 1);.      i
27860 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b 0a 20  f( p->db==0 ){. 
27870 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
27880 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
27890 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27  r: cannot open '
278a0 25 73 27 5c 6e 22 2c 20 7a 4e 65 77 46 69 6c 65  %s'\n", zNewFile
278b0 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 73  name);.        s
278c0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4e 65 77  qlite3_free(zNew
278d0 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 20  Filename);.     
278e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
278f0 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 20  p->zFreeOnClose 
27900 3d 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 3b 0a  = zNewFilename;.
27910 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
27920 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29    if( p->db==0 )
27930 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 20 61 20  {.      /* As a 
27940 66 61 6c 6c 2d 62 61 63 6b 20 6f 70 65 6e 20 61  fall-back open a
27950 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 20 2a   TEMP database *
27960 2f 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69  /.      p->zDbFi
27970 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20  lename = 0;.    
27980 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
27990 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
279a0 20 20 69 66 28 20 63 3d 3d 27 6f 27 0a 20 20 20    if( c=='o'.   
279b0 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a 41 72  && (strncmp(azAr
279c0 67 5b 30 5d 2c 20 22 6f 75 74 70 75 74 22 2c 20  g[0], "output", 
279d0 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d 70  n)==0 || strncmp
279e0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 6e 63 65  (azArg[0], "once
279f0 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a 20  ", n)==0).  ){. 
27a00 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
27a10 46 69 6c 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f  File = nArg>=2 ?
27a20 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 73 74 64   azArg[1] : "std
27a30 6f 75 74 22 3b 0a 20 20 20 20 69 66 28 20 6e 41  out";.    if( nA
27a40 72 67 3e 32 20 29 7b 0a 20 20 20 20 20 20 75 74  rg>2 ){.      ut
27a50 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
27a60 2c 20 22 55 73 61 67 65 3a 20 2e 25 73 20 46 49  , "Usage: .%s FI
27a70 4c 45 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29  LE\n", azArg[0])
27a80 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
27a90 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
27aa0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
27ab0 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 3e 31 20    }.    if( n>1 
27ac0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
27ad0 5b 30 5d 2c 20 22 6f 6e 63 65 22 2c 20 6e 29 3d  [0], "once", n)=
27ae0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
27af0 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20  nArg<2 ){.      
27b00 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
27b10 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6f 6e  err, "Usage: .on
27b20 63 65 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20  ce FILE\n");.   
27b30 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
27b40 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
27b50 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
27b60 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e 6f 75     }.      p->ou
27b70 74 43 6f 75 6e 74 20 3d 20 32 3b 0a 20 20 20 20  tCount = 2;.    
27b80 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e  }else{.      p->
27b90 6f 75 74 43 6f 75 6e 74 20 3d 20 30 3b 0a 20 20  outCount = 0;.  
27ba0 20 20 7d 0a 20 20 20 20 6f 75 74 70 75 74 5f 72    }.    output_r
27bb0 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69 66 28  eset(p);.    if(
27bc0 20 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29   zFile[0]=='|' )
27bd0 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
27be0 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20 20 20 20  OMIT_POPEN.     
27bf0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
27c00 72 72 2c 20 22 45 72 72 6f 72 3a 20 70 69 70 65  rr, "Error: pipe
27c10 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72  s are not suppor
27c20 74 65 64 20 69 6e 20 74 68 69 73 20 4f 53 5c 6e  ted in this OS\n
27c30 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
27c40 3b 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d  ;.      p->out =
27c50 20 73 74 64 6f 75 74 3b 0a 23 65 6c 73 65 0a 20   stdout;.#else. 
27c60 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 70 6f       p->out = po
27c70 70 65 6e 28 7a 46 69 6c 65 20 2b 20 31 2c 20 22  pen(zFile + 1, "
27c80 77 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  w");.      if( p
27c90 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ->out==0 ){.    
27ca0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
27cb0 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 63  stderr,"Error: c
27cc0 61 6e 6e 6f 74 20 6f 70 65 6e 20 70 69 70 65 20  annot open pipe 
27cd0 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65  \"%s\"\n", zFile
27ce0 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20 20 70   + 1);.        p
27cf0 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a  ->out = stdout;.
27d00 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
27d10 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
27d20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
27d30 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
27d40 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f 75 74  outfile), p->out
27d50 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46 69 6c  file, "%s", zFil
27d60 65 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64  e);.      }.#end
27d70 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  if.    }else{.  
27d80 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 6f 75 74      p->out = out
27d90 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46  put_file_open(zF
27da0 69 6c 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ile);.      if( 
27db0 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20  p->out==0 ){.   
27dc0 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
27dd0 7a 46 69 6c 65 2c 22 6f 66 66 22 29 21 3d 30 20  zFile,"off")!=0 
27de0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
27df0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
27e00 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 77  "Error: cannot w
27e10 72 69 74 65 20 74 6f 20 5c 22 25 73 5c 22 5c 6e  rite to \"%s\"\n
27e20 22 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20  ", zFile);.     
27e30 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 2d 3e     }.        p->
27e40 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20  out = stdout;.  
27e50 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
27e60 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
27e70 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
27e80 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
27e90 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f 75 74  outfile), p->out
27ea0 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46 69 6c  file, "%s", zFil
27eb0 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
27ec0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
27ed0 20 63 3d 3d 27 70 27 20 26 26 20 6e 3e 3d 33 20   c=='p' && n>=3 
27ee0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
27ef0 5b 30 5d 2c 20 22 70 72 69 6e 74 22 2c 20 6e 29  [0], "print", n)
27f00 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  ==0 ){.    int i
27f10 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69  ;.    for(i=1; i
27f20 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
27f30 20 20 20 69 66 28 20 69 3e 31 20 29 20 72 61 77     if( i>1 ) raw
27f40 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
27f50 22 20 22 29 3b 0a 20 20 20 20 20 20 75 74 66 38  " ");.      utf8
27f60 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
27f70 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  "%s", azArg[i]);
27f80 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70  .    }.    raw_p
27f90 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c  rintf(p->out, "\
27fa0 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  n");.  }else..  
27fb0 69 66 28 20 63 3d 3d 27 70 27 20 26 26 20 73 74  if( c=='p' && st
27fc0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
27fd0 22 70 72 6f 6d 70 74 22 2c 20 6e 29 3d 3d 30 20  "prompt", n)==0 
27fe0 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 20  ){.    if( nArg 
27ff0 3e 3d 20 32 29 20 7b 0a 20 20 20 20 20 20 73 74  >= 2) {.      st
28000 72 6e 63 70 79 28 6d 61 69 6e 50 72 6f 6d 70 74  rncpy(mainPrompt
28010 2c 61 7a 41 72 67 5b 31 5d 2c 28 69 6e 74 29 41  ,azArg[1],(int)A
28020 72 72 61 79 53 69 7a 65 28 6d 61 69 6e 50 72 6f  rraySize(mainPro
28030 6d 70 74 29 2d 31 29 3b 0a 20 20 20 20 7d 0a 20  mpt)-1);.    }. 
28040 20 20 20 69 66 28 20 6e 41 72 67 20 3e 3d 20 33     if( nArg >= 3
28050 29 20 7b 0a 20 20 20 20 20 20 73 74 72 6e 63 70  ) {.      strncp
28060 79 28 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74  y(continuePrompt
28070 2c 61 7a 41 72 67 5b 32 5d 2c 28 69 6e 74 29 41  ,azArg[2],(int)A
28080 72 72 61 79 53 69 7a 65 28 63 6f 6e 74 69 6e 75  rraySize(continu
28090 65 50 72 6f 6d 70 74 29 2d 31 29 3b 0a 20 20 20  ePrompt)-1);.   
280a0 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
280b0 28 20 63 3d 3d 27 71 27 20 26 26 20 73 74 72 6e  ( c=='q' && strn
280c0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 71  cmp(azArg[0], "q
280d0 75 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  uit", n)==0 ){. 
280e0 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d 65 6c     rc = 2;.  }el
280f0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 72 27  se..  if( c=='r'
28100 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
28110 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 72  cmp(azArg[0], "r
28120 65 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ead", n)==0 ){. 
28130 20 20 20 46 49 4c 45 20 2a 61 6c 74 3b 0a 20 20     FILE *alt;.  
28140 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29 7b    if( nArg!=2 ){
28150 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
28160 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
28170 3a 20 2e 72 65 61 64 20 46 49 4c 45 5c 6e 22 29  : .read FILE\n")
28180 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
28190 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
281a0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
281b0 20 20 7d 0a 20 20 20 20 61 6c 74 20 3d 20 66 6f    }.    alt = fo
281c0 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20 22 72  pen(azArg[1], "r
281d0 62 22 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 74  b");.    if( alt
281e0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66  ==0 ){.      utf
281f0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
28200 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f  "Error: cannot o
28210 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61  pen \"%s\"\n", a
28220 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
28230 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  rc = 1;.    }els
28240 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 72  e{.      rc = pr
28250 6f 63 65 73 73 5f 69 6e 70 75 74 28 70 2c 20 61  ocess_input(p, a
28260 6c 74 29 3b 0a 20 20 20 20 20 20 66 63 6c 6f 73  lt);.      fclos
28270 65 28 61 6c 74 29 3b 0a 20 20 20 20 7d 0a 20 20  e(alt);.    }.  
28280 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
28290 27 72 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73  'r' && n>=3 && s
282a0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
282b0 20 22 72 65 73 74 6f 72 65 22 2c 20 6e 29 3d 3d   "restore", n)==
282c0 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
282d0 68 61 72 20 2a 7a 53 72 63 46 69 6c 65 3b 0a 20  har *zSrcFile;. 
282e0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
282f0 44 62 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  Db;.    sqlite3 
28300 2a 70 53 72 63 3b 0a 20 20 20 20 73 71 6c 69 74  *pSrc;.    sqlit
28310 65 33 5f 62 61 63 6b 75 70 20 2a 70 42 61 63 6b  e3_backup *pBack
28320 75 70 3b 0a 20 20 20 20 69 6e 74 20 6e 54 69 6d  up;.    int nTim
28330 65 6f 75 74 20 3d 20 30 3b 0a 0a 20 20 20 20 69  eout = 0;..    i
28340 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20  f( nArg==2 ){.  
28350 20 20 20 20 7a 53 72 63 46 69 6c 65 20 3d 20 61      zSrcFile = a
28360 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20 7a  zArg[1];.      z
28370 44 62 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 20  Db = "main";.   
28380 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d   }else if( nArg=
28390 3d 33 20 29 7b 0a 20 20 20 20 20 20 7a 53 72 63  =3 ){.      zSrc
283a0 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 32 5d 3b  File = azArg[2];
283b0 0a 20 20 20 20 20 20 7a 44 62 20 3d 20 61 7a 41  .      zDb = azA
283c0 72 67 5b 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65  rg[1];.    }else
283d0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
283e0 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
283f0 65 3a 20 2e 72 65 73 74 6f 72 65 20 3f 44 42 3f  e: .restore ?DB?
28400 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20   FILE\n");.     
28410 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
28420 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
28430 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
28440 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
28450 65 6e 28 7a 53 72 63 46 69 6c 65 2c 20 26 70 53  en(zSrcFile, &pS
28460 72 63 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  rc);.    if( rc!
28470 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
28480 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
28490 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
284a0 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73  cannot open \"%s
284b0 5c 22 5c 6e 22 2c 20 7a 53 72 63 46 69 6c 65 29  \"\n", zSrcFile)
284c0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
284d0 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20 20 20  close(pSrc);.   
284e0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
284f0 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70   }.    open_db(p
28500 2c 20 30 29 3b 0a 20 20 20 20 70 42 61 63 6b 75  , 0);.    pBacku
28510 70 20 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b  p = sqlite3_back
28520 75 70 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 7a  up_init(p->db, z
28530 44 62 2c 20 70 53 72 63 2c 20 22 6d 61 69 6e 22  Db, pSrc, "main"
28540 29 3b 0a 20 20 20 20 69 66 28 20 70 42 61 63 6b  );.    if( pBack
28550 75 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  up==0 ){.      u
28560 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
28570 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22  r, "Error: %s\n"
28580 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
28590 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20  (p->db));.      
285a0 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 53  sqlite3_close(pS
285b0 72 63 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  rc);.      retur
285c0 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  n 1;.    }.    w
285d0 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69  hile( (rc = sqli
285e0 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28  te3_backup_step(
285f0 70 42 61 63 6b 75 70 2c 31 30 30 29 29 3d 3d 53  pBackup,100))==S
28600 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 20  QLITE_OK.       
28610 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45     || rc==SQLITE
28620 5f 42 55 53 59 20 20 29 7b 0a 20 20 20 20 20 20  _BUSY  ){.      
28630 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
28640 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 69  USY ){.        i
28650 66 28 20 6e 54 69 6d 65 6f 75 74 2b 2b 20 3e 3d  f( nTimeout++ >=
28660 20 33 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20   3 ) break;.    
28670 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6c 65 65      sqlite3_slee
28680 70 28 31 30 30 29 3b 0a 20 20 20 20 20 20 7d 0a  p(100);.      }.
28690 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
286a0 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28  3_backup_finish(
286b0 70 42 61 63 6b 75 70 29 3b 0a 20 20 20 20 69 66  pBackup);.    if
286c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
286d0 45 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  E ){.      rc = 
286e0 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
286f0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
28700 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4c   || rc==SQLITE_L
28710 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 72  OCKED ){.      r
28720 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
28730 2c 20 22 45 72 72 6f 72 3a 20 73 6f 75 72 63 65  , "Error: source
28740 20 64 61 74 61 62 61 73 65 20 69 73 20 62 75 73   database is bus
28750 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  y\n");.      rc 
28760 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 1;.    }else{.
28770 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
28780 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
28790 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33  : %s\n", sqlite3
287a0 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b  _errmsg(p->db));
287b0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
287c0 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
287d0 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20 20  _close(pSrc);.  
287e0 7d 65 6c 73 65 0a 0a 0a 20 20 69 66 28 20 63 3d  }else...  if( c=
287f0 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='s' && strncmp(
28800 61 7a 41 72 67 5b 30 5d 2c 20 22 73 63 61 6e 73  azArg[0], "scans
28810 74 61 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  tats", n)==0 ){.
28820 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
28830 29 7b 0a 20 20 20 20 20 20 70 2d 3e 73 63 61 6e  ){.      p->scan
28840 73 74 61 74 73 4f 6e 20 3d 20 62 6f 6f 6c 65 61  statsOn = boolea
28850 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
28860 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
28870 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
28880 4e 53 54 41 54 55 53 0a 20 20 20 20 20 20 72 61  NSTATUS.      ra
28890 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
288a0 20 22 57 61 72 6e 69 6e 67 3a 20 2e 73 63 61 6e   "Warning: .scan
288b0 73 74 61 74 73 20 6e 6f 74 20 61 76 61 69 6c 61  stats not availa
288c0 62 6c 65 20 69 6e 20 74 68 69 73 20 62 75 69 6c  ble in this buil
288d0 64 2e 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a 20  d.\n");.#endif. 
288e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
288f0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
28900 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 63 61 6e  r, "Usage: .scan
28910 73 74 61 74 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29  stats on|off\n")
28920 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
28930 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
28940 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73   if( c=='s' && s
28950 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
28960 20 22 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d 30   "schema", n)==0
28970 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 54 65 78   ){.    ShellTex
28980 74 20 73 53 65 6c 65 63 74 3b 0a 20 20 20 20 53  t sSelect;.    S
28990 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61 3b 0a  hellState data;.
289a0 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73      char *zErrMs
289b0 67 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74  g = 0;.    const
289c0 20 63 68 61 72 20 2a 7a 44 69 76 20 3d 20 30 3b   char *zDiv = 0;
289d0 0a 20 20 20 20 69 6e 74 20 69 53 63 68 65 6d 61  .    int iSchema
289e0 20 3d 20 30 3b 0a 0a 20 20 20 20 6f 70 65 6e 5f   = 0;..    open_
289f0 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6d 65  db(p, 0);.    me
28a00 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c 20 73  mcpy(&data, p, s
28a10 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a 20 20  izeof(data));.  
28a20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65    data.showHeade
28a30 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74 61 2e  r = 0;.    data.
28a40 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64  cMode = data.mod
28a50 65 20 3d 20 4d 4f 44 45 5f 53 65 6d 69 3b 0a 20  e = MODE_Semi;. 
28a60 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 53 65     initText(&sSe
28a70 6c 65 63 74 29 3b 0a 20 20 20 20 69 66 28 20 6e  lect);.    if( n
28a80 41 72 67 3e 3d 32 20 26 26 20 6f 70 74 69 6f 6e  Arg>=2 && option
28a90 4d 61 74 63 68 28 61 7a 41 72 67 5b 31 5d 2c 20  Match(azArg[1], 
28aa0 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20 20 20  "indent") ){.   
28ab0 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20     data.cMode = 
28ac0 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45  data.mode = MODE
28ad0 5f 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20 6e  _Pretty;.      n
28ae0 41 72 67 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  Arg--;.      if(
28af0 20 6e 41 72 67 3d 3d 32 20 29 20 61 7a 41 72 67   nArg==2 ) azArg
28b00 5b 31 5d 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a  [1] = azArg[2];.
28b10 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41      }.    if( nA
28b20 72 67 3d 3d 32 20 26 26 20 61 7a 41 72 67 5b 31  rg==2 && azArg[1
28b30 5d 5b 30 5d 21 3d 27 2d 27 20 29 7b 0a 20 20 20  ][0]!='-' ){.   
28b40 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20     int i;.      
28b50 66 6f 72 28 69 3d 30 3b 20 61 7a 41 72 67 5b 31  for(i=0; azArg[1
28b60 5d 5b 69 5d 3b 20 69 2b 2b 29 20 61 7a 41 72 67  ][i]; i++) azArg
28b70 5b 31 5d 5b 69 5d 20 3d 20 54 6f 4c 6f 77 65 72  [1][i] = ToLower
28b80 28 61 7a 41 72 67 5b 31 5d 5b 69 5d 29 3b 0a 20  (azArg[1][i]);. 
28b90 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
28ba0 61 7a 41 72 67 5b 31 5d 2c 22 73 71 6c 69 74 65  azArg[1],"sqlite
28bb0 5f 6d 61 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a  _master")==0 ){.
28bc0 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 6e 65          char *ne
28bd0 77 5f 61 72 67 76 5b 32 5d 2c 20 2a 6e 65 77 5f  w_argv[2], *new_
28be0 63 6f 6c 76 5b 32 5d 3b 0a 20 20 20 20 20 20 20  colv[2];.       
28bf0 20 6e 65 77 5f 61 72 67 76 5b 30 5d 20 3d 20 22   new_argv[0] = "
28c00 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
28c10 69 74 65 5f 6d 61 73 74 65 72 20 28 5c 6e 22 0a  ite_master (\n".
28c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c30 20 20 20 20 20 20 22 20 20 74 79 70 65 20 74 65        "  type te
28c40 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  xt,\n".         
28c50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
28c60 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
28c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c80 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20      "  tbl_name 
28c90 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20  text,\n".       
28ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
28cb0 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67    rootpage integ
28cc0 65 72 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  er,\n".         
28cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
28ce0 73 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20  sql text\n".    
28cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d00 20 20 22 29 22 3b 0a 20 20 20 20 20 20 20 20 6e    ")";.        n
28d10 65 77 5f 61 72 67 76 5b 31 5d 20 3d 20 30 3b 0a  ew_argv[1] = 0;.
28d20 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76          new_colv
28d30 5b 30 5d 20 3d 20 22 73 71 6c 22 3b 0a 20 20 20  [0] = "sql";.   
28d40 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76 5b 31 5d       new_colv[1]
28d50 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 63 61   = 0;.        ca
28d60 6c 6c 62 61 63 6b 28 26 64 61 74 61 2c 20 31 2c  llback(&data, 1,
28d70 20 6e 65 77 5f 61 72 67 76 2c 20 6e 65 77 5f 63   new_argv, new_c
28d80 6f 6c 76 29 3b 0a 20 20 20 20 20 20 20 20 72 63  olv);.        rc
28d90 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
28da0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
28db0 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 73  rcmp(azArg[1],"s
28dc0 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
28dd0 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  r")==0 ){.      
28de0 20 20 63 68 61 72 20 2a 6e 65 77 5f 61 72 67 76    char *new_argv
28df0 5b 32 5d 2c 20 2a 6e 65 77 5f 63 6f 6c 76 5b 32  [2], *new_colv[2
28e00 5d 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 61  ];.        new_a
28e10 72 67 76 5b 30 5d 20 3d 20 22 43 52 45 41 54 45  rgv[0] = "CREATE
28e20 20 54 45 4d 50 20 54 41 42 4c 45 20 73 71 6c 69   TEMP TABLE sqli
28e30 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 28  te_temp_master (
28e40 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n".            
28e50 20 20 20 20 20 20 20 20 20 20 22 20 20 74 79 70            "  typ
28e60 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20  e text,\n".     
28e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e80 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e   "  name text,\n
28e90 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
28ea0 20 20 20 20 20 20 20 20 22 20 20 74 62 6c 5f 6e          "  tbl_n
28eb0 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ame text,\n".   
28ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ed0 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65 20 69     "  rootpage i
28ee0 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20 20  nteger,\n".     
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f00 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a   "  sql text\n".
28f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f20 20 20 20 20 20 20 22 29 22 3b 0a 20 20 20 20 20        ")";.     
28f30 20 20 20 6e 65 77 5f 61 72 67 76 5b 31 5d 20 3d     new_argv[1] =
28f40 20 30 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f   0;.        new_
28f50 63 6f 6c 76 5b 30 5d 20 3d 20 22 73 71 6c 22 3b  colv[0] = "sql";
28f60 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c  .        new_col
28f70 76 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  v[1] = 0;.      
28f80 20 20 63 61 6c 6c 62 61 63 6b 28 26 64 61 74 61    callback(&data
28f90 2c 20 31 2c 20 6e 65 77 5f 61 72 67 76 2c 20 6e  , 1, new_argv, n
28fa0 65 77 5f 63 6f 6c 76 29 3b 0a 20 20 20 20 20 20  ew_colv);.      
28fb0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
28fc0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
28fd0 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20 22 28         zDiv = "(
28fe0 22 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ";.      }.    }
28ff0 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 31  else if( nArg==1
29000 20 29 7b 0a 20 20 20 20 20 20 7a 44 69 76 20 3d   ){.      zDiv =
29010 20 22 28 22 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   "(";.    }else{
29020 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
29030 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
29040 3a 20 2e 73 63 68 65 6d 61 20 3f 2d 2d 69 6e 64  : .schema ?--ind
29050 65 6e 74 3f 20 3f 4c 49 4b 45 2d 50 41 54 54 45  ent? ?LIKE-PATTE
29060 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  RN?\n");.      r
29070 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74  c = 1;.      got
29080 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
29090 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  xit;.    }.    i
290a0 66 28 20 7a 44 69 76 20 29 7b 0a 20 20 20 20 20  f( zDiv ){.     
290b0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
290c0 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  Stmt = 0;.      
290d0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
290e0 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 22  pare_v2(p->db, "
290f0 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
29100 20 70 72 61 67 6d 61 5f 64 61 74 61 62 61 73 65   pragma_database
29110 5f 6c 69 73 74 22 2c 0a 20 20 20 20 20 20 20 20  _list",.        
29120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29130 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74 6d 74        -1, &pStmt
29140 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
29150 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74  rc ){.        ut
29160 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
29170 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  , "Error: %s\n",
29180 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
29190 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20  p->db));.       
291a0 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
291b0 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20  e(pStmt);.      
291c0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
291d0 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
291e0 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20  and_exit;.      
291f0 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
29200 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53 45  xt(&sSelect, "SE
29210 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 22 2c 20  LECT sql FROM", 
29220 30 29 3b 0a 20 20 20 20 20 20 69 53 63 68 65 6d  0);.      iSchem
29230 61 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69  a = 0;.      whi
29240 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70  le( sqlite3_step
29250 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
29260 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20 20 63  ROW ){.        c
29270 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
29280 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
29290 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
292a0 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20  t(pStmt, 0);.   
292b0 20 20 20 20 20 63 68 61 72 20 7a 53 63 4e 75 6d       char zScNum
292c0 5b 33 30 5d 3b 0a 20 20 20 20 20 20 20 20 73 71  [30];.        sq
292d0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
292e0 69 7a 65 6f 66 28 7a 53 63 4e 75 6d 29 2c 20 7a  izeof(zScNum), z
292f0 53 63 4e 75 6d 2c 20 22 25 64 22 2c 20 2b 2b 69  ScNum, "%d", ++i
29300 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 20  Schema);.       
29310 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
29320 6c 65 63 74 2c 20 7a 44 69 76 2c 20 30 29 3b 0a  lect, zDiv, 0);.
29330 20 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20 22          zDiv = "
29340 20 55 4e 49 4f 4e 20 41 4c 4c 20 22 3b 0a 20 20   UNION ALL ";.  
29350 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70        if( strcmp
29360 28 7a 44 62 2c 20 22 6d 61 69 6e 22 29 21 3d 30  (zDb, "main")!=0
29370 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
29380 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
29390 74 2c 20 22 53 45 4c 45 43 54 20 73 68 65 6c 6c  t, "SELECT shell
293a0 5f 61 64 64 5f 73 63 68 65 6d 61 28 73 71 6c 2c  _add_schema(sql,
293b0 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  ", 0);.         
293c0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
293d0 6c 65 63 74 2c 20 7a 44 62 2c 20 27 22 27 29 3b  lect, zDb, '"');
293e0 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e  .          appen
293f0 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
29400 22 29 20 41 53 20 73 71 6c 2c 20 74 79 70 65 2c  ") AS sql, type,
29410 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c   tbl_name, name,
29420 20 72 6f 77 69 64 2c 22 2c 20 30 29 3b 0a 20 20   rowid,", 0);.  
29430 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
29440 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 53 63  xt(&sSelect, zSc
29450 4e 75 6d 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Num, 0);.       
29460 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
29470 53 65 6c 65 63 74 2c 20 22 20 41 53 20 73 6e 75  Select, " AS snu
29480 6d 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  m, ", 0);.      
29490 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
294a0 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20 27 5c  sSelect, zDb, '\
294b0 27 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  '');.          a
294c0 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
294d0 63 74 2c 20 22 20 41 53 20 73 6e 61 6d 65 20 46  ct, " AS sname F
294e0 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  ROM ", 0);.     
294f0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
29500 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20 27  &sSelect, zDb, '
29510 22 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  "');.          a
29520 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
29530 63 74 2c 20 22 2e 73 71 6c 69 74 65 5f 6d 61 73  ct, ".sqlite_mas
29540 74 65 72 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  ter", 0);.      
29550 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
29560 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
29570 53 65 6c 65 63 74 2c 20 22 53 45 4c 45 43 54 20  Select, "SELECT 
29580 73 71 6c 2c 20 74 79 70 65 2c 20 74 62 6c 5f 6e  sql, type, tbl_n
29590 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f 77 69 64  ame, name, rowid
295a0 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , ", 0);.       
295b0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
295c0 53 65 6c 65 63 74 2c 20 7a 53 63 4e 75 6d 2c 20  Select, zScNum, 
295d0 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 70  0);.          ap
295e0 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
295f0 74 2c 20 22 20 41 53 20 73 6e 75 6d 2c 20 27 6d  t, " AS snum, 'm
29600 61 69 6e 27 20 41 53 20 73 6e 61 6d 65 20 46 52  ain' AS sname FR
29610 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
29620 22 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ",0);.        }.
29630 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
29640 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
29650 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 61 70 70  Stmt);.      app
29660 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
29670 2c 20 22 29 20 57 48 45 52 45 20 22 2c 20 30 29  , ") WHERE ", 0)
29680 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72 67  ;.      if( nArg
29690 3e 31 20 29 7b 0a 20 20 20 20 20 20 20 20 63 68  >1 ){.        ch
296a0 61 72 20 2a 7a 51 61 72 67 20 3d 20 73 71 6c 69  ar *zQarg = sqli
296b0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 51 22  te3_mprintf("%Q"
296c0 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
296d0 20 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28       if( strchr(
296e0 61 7a 41 72 67 5b 31 5d 2c 20 27 2e 27 29 20 29  azArg[1], '.') )
296f0 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65  {.          appe
29700 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
29710 20 22 6c 6f 77 65 72 28 70 72 69 6e 74 66 28 27   "lower(printf('
29720 25 73 2e 25 73 27 2c 73 6e 61 6d 65 2c 74 62 6c  %s.%s',sname,tbl
29730 5f 6e 61 6d 65 29 29 22 2c 20 30 29 3b 0a 20 20  _name))", 0);.  
29740 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
29750 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
29760 74 28 26 73 53 65 6c 65 63 74 2c 20 22 6c 6f 77  t(&sSelect, "low
29770 65 72 28 74 62 6c 5f 6e 61 6d 65 29 22 2c 20 30  er(tbl_name)", 0
29780 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
29790 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
297a0 26 73 53 65 6c 65 63 74 2c 20 73 74 72 63 68 72  &sSelect, strchr
297b0 28 61 7a 41 72 67 5b 31 5d 2c 20 27 2a 27 29 20  (azArg[1], '*') 
297c0 3f 20 22 20 47 4c 4f 42 20 22 20 3a 20 22 20 4c  ? " GLOB " : " L
297d0 49 4b 45 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  IKE ", 0);.     
297e0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
297f0 53 65 6c 65 63 74 2c 20 7a 51 61 72 67 2c 20 30  Select, zQarg, 0
29800 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
29810 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
29820 22 20 41 4e 44 20 22 2c 20 30 29 3b 0a 20 20 20  " AND ", 0);.   
29830 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
29840 65 28 7a 51 61 72 67 29 3b 0a 20 20 20 20 20 20  e(zQarg);.      
29850 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
29860 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 74 79  xt(&sSelect, "ty
29870 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20 73  pe!='meta' AND s
29880 71 6c 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 22 0a  ql IS NOT NULL".
29890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298a0 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44             " ORD
298b0 45 52 20 42 59 20 73 6e 75 6d 2c 20 72 6f 77 69  ER BY snum, rowi
298c0 64 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 72 63  d", 0);.      rc
298d0 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
298e0 70 2d 3e 64 62 2c 20 73 53 65 6c 65 63 74 2e 7a  p->db, sSelect.z
298f0 2c 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  , callback, &dat
29900 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  a, &zErrMsg);.  
29910 20 20 20 20 66 72 65 65 54 65 78 74 28 26 73 53      freeText(&sS
29920 65 6c 65 63 74 29 3b 0a 20 20 20 20 7d 0a 20 20  elect);.    }.  
29930 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b    if( zErrMsg ){
29940 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
29950 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
29960 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  : %s\n", zErrMsg
29970 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
29980 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  _free(zErrMsg);.
29990 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
299a0 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 20 21    }else if( rc !
299b0 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  = SQLITE_OK ){. 
299c0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
299d0 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 71  stderr,"Error: q
299e0 75 65 72 79 69 6e 67 20 73 63 68 65 6d 61 20 69  uerying schema i
299f0 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29 3b 0a  nformation\n");.
29a00 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
29a10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
29a20 63 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  c = 0;.    }.  }
29a30 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e 65  else..#if define
29a40 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
29a50 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
29a60 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54  E_ENABLE_SELECTT
29a70 52 41 43 45 29 0a 20 20 69 66 28 20 63 3d 3d 27  RACE).  if( c=='
29a80 73 27 20 26 26 20 6e 3d 3d 31 31 20 26 26 20 73  s' && n==11 && s
29a90 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
29aa0 20 22 73 65 6c 65 63 74 74 72 61 63 65 22 2c 20   "selecttrace", 
29ab0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  n)==0 ){.    sql
29ac0 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65 20  ite3SelectTrace 
29ad0 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61  = (int)integerVa
29ae0 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  lue(azArg[1]);. 
29af0 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23   }else.#endif..#
29b00 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
29b10 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e  E_ENABLE_SESSION
29b20 29 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26  ).  if( c=='s' &
29b30 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
29b40 30 5d 2c 22 73 65 73 73 69 6f 6e 22 2c 6e 29 3d  0],"session",n)=
29b50 3d 30 20 26 26 20 6e 3e 3d 33 20 29 7b 0a 20 20  =0 && n>=3 ){.  
29b60 20 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70    OpenSession *p
29b70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61 53  Session = &p->aS
29b80 65 73 73 69 6f 6e 5b 30 5d 3b 0a 20 20 20 20 63  ession[0];.    c
29b90 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20 26 61  har **azCmd = &a
29ba0 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 69 6e 74  zArg[1];.    int
29bb0 20 69 53 65 73 20 3d 20 30 3b 0a 20 20 20 20 69   iSes = 0;.    i
29bc0 6e 74 20 6e 43 6d 64 20 3d 20 6e 41 72 67 20 2d  nt nCmd = nArg -
29bd0 20 31 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   1;.    int i;. 
29be0 20 20 20 69 66 28 20 6e 41 72 67 3c 3d 31 20 29     if( nArg<=1 )
29bf0 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79   goto session_sy
29c00 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20  ntax_error;.    
29c10 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
29c20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 33 20 29     if( nArg>=3 )
29c30 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 53 65 73  {.      for(iSes
29c40 3d 30 3b 20 69 53 65 73 3c 70 2d 3e 6e 53 65 73  =0; iSes<p->nSes
29c50 73 69 6f 6e 3b 20 69 53 65 73 2b 2b 29 7b 0a 20  sion; iSes++){. 
29c60 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
29c70 70 28 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 53  p(p->aSession[iS
29c80 65 73 5d 2e 7a 4e 61 6d 65 2c 20 61 7a 41 72 67  es].zName, azArg
29c90 5b 31 5d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  [1])==0 ) break;
29ca0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
29cb0 66 28 20 69 53 65 73 3c 70 2d 3e 6e 53 65 73 73  f( iSes<p->nSess
29cc0 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ion ){.        p
29cd0 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61 53  Session = &p->aS
29ce0 65 73 73 69 6f 6e 5b 69 53 65 73 5d 3b 0a 20 20  ession[iSes];.  
29cf0 20 20 20 20 20 20 61 7a 43 6d 64 2b 2b 3b 0a 20        azCmd++;. 
29d00 20 20 20 20 20 20 20 6e 43 6d 64 2d 2d 3b 0a 20         nCmd--;. 
29d10 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
29d20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20 26      pSession = &
29d30 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a  p->aSession[0];.
29d40 20 20 20 20 20 20 20 20 69 53 65 73 20 3d 20 30          iSes = 0
29d50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
29d60 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
29d70 20 61 74 74 61 63 68 20 54 41 42 4c 45 0a 20 20   attach TABLE.  
29d80 20 20 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    ** Invoke the 
29d90 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61  sqlite3session_a
29da0 74 74 61 63 68 28 29 20 69 6e 74 65 72 66 61 63  ttach() interfac
29db0 65 20 74 6f 20 61 74 74 61 63 68 20 61 20 70 61  e to attach a pa
29dc0 72 74 69 63 75 6c 61 72 0a 20 20 20 20 2a 2a 20  rticular.    ** 
29dd0 74 61 62 6c 65 20 73 6f 20 74 68 61 74 20 69 74  table so that it
29de0 20 69 73 20 6e 65 76 65 72 20 66 69 6c 74 65 72   is never filter
29df0 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ed..    */.    i
29e00 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
29e10 30 5d 2c 22 61 74 74 61 63 68 22 29 3d 3d 30 20  0],"attach")==0 
29e20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  ){.      if( nCm
29e30 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73  d!=2 ) goto sess
29e40 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
29e50 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53 65 73  ;.      if( pSes
29e60 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 7b 0a 20 20  sion->p==0 ){.  
29e70 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5f 6e 6f        session_no
29e80 74 5f 6f 70 65 6e 3a 0a 20 20 20 20 20 20 20 20  t_open:.        
29e90 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
29ea0 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 20 73 65  r, "ERROR: No se
29eb0 73 73 69 6f 6e 73 20 61 72 65 20 6f 70 65 6e 5c  ssions are open\
29ec0 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  n");.      }else
29ed0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
29ee0 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61 74  qlite3session_at
29ef0 74 61 63 68 28 70 53 65 73 73 69 6f 6e 2d 3e 70  tach(pSession->p
29f00 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20  , azCmd[1]);.   
29f10 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20       if( rc ){. 
29f20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
29f30 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 52 52  ntf(stderr, "ERR
29f40 4f 52 3a 20 73 71 6c 69 74 65 33 73 65 73 73 69  OR: sqlite3sessi
29f50 6f 6e 5f 61 74 74 61 63 68 28 29 20 72 65 74 75  on_attach() retu
29f60 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a  rns %d\n", rc);.
29f70 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 30            rc = 0
29f80 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
29f90 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20    }.    }else.. 
29fa0 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 63     /* .session c
29fb0 68 61 6e 67 65 73 65 74 20 46 49 4c 45 0a 20 20  hangeset FILE.  
29fc0 20 20 2a 2a 20 2e 73 65 73 73 69 6f 6e 20 70 61    ** .session pa
29fd0 74 63 68 73 65 74 20 46 49 4c 45 0a 20 20 20 20  tchset FILE.    
29fe0 2a 2a 20 57 72 69 74 65 20 61 20 63 68 61 6e 67  ** Write a chang
29ff0 65 73 65 74 20 6f 72 20 70 61 74 63 68 73 65 74  eset or patchset
2a000 20 69 6e 74 6f 20 61 20 66 69 6c 65 2e 20 20 54   into a file.  T
2a010 68 65 20 66 69 6c 65 20 69 73 20 6f 76 65 72 77  he file is overw
2a020 72 69 74 74 65 6e 2e 0a 20 20 20 20 2a 2f 0a 20  ritten..    */. 
2a030 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a     if( strcmp(az
2a040 43 6d 64 5b 30 5d 2c 22 63 68 61 6e 67 65 73 65  Cmd[0],"changese
2a050 74 22 29 3d 3d 30 20 7c 7c 20 73 74 72 63 6d 70  t")==0 || strcmp
2a060 28 61 7a 43 6d 64 5b 30 5d 2c 22 70 61 74 63 68  (azCmd[0],"patch
2a070 73 65 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  set")==0 ){.    
2a080 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20 30 3b    FILE *out = 0;
2a090 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21  .      if( nCmd!
2a0a0 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f  =2 ) goto sessio
2a0b0 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a  n_syntax_error;.
2a0c0 20 20 20 20 20 20 69 66 28 20 70 53 65 73 73 69        if( pSessi
2a0d0 6f 6e 2d 3e 70 3d 3d 30 20 29 20 67 6f 74 6f 20  on->p==0 ) goto 
2a0e0 73 65 73 73 69 6f 6e 5f 6e 6f 74 5f 6f 70 65 6e  session_not_open
2a0f0 3b 0a 20 20 20 20 20 20 6f 75 74 20 3d 20 66 6f  ;.      out = fo
2a100 70 65 6e 28 61 7a 43 6d 64 5b 31 5d 2c 20 22 77  pen(azCmd[1], "w
2a110 62 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  b");.      if( o
2a120 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ut==0 ){.       
2a130 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
2a140 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 63 61 6e  err, "ERROR: can
2a150 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22 20  not open \"%s\" 
2a160 66 6f 72 20 77 72 69 74 69 6e 67 5c 6e 22 2c 20  for writing\n", 
2a170 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20 20 20  azCmd[1]);.     
2a180 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
2a190 69 6e 74 20 73 7a 43 68 6e 67 3b 0a 20 20 20 20  int szChng;.    
2a1a0 20 20 20 20 76 6f 69 64 20 2a 70 43 68 6e 67 3b      void *pChng;
2a1b0 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 7a 43  .        if( azC
2a1c0 6d 64 5b 30 5d 5b 30 5d 3d 3d 27 63 27 20 29 7b  md[0][0]=='c' ){
2a1d0 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
2a1e0 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 63  sqlite3session_c
2a1f0 68 61 6e 67 65 73 65 74 28 70 53 65 73 73 69 6f  hangeset(pSessio
2a200 6e 2d 3e 70 2c 20 26 73 7a 43 68 6e 67 2c 20 26  n->p, &szChng, &
2a210 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20 20  pChng);.        
2a220 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
2a230 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73   rc = sqlite3ses
2a240 73 69 6f 6e 5f 70 61 74 63 68 73 65 74 28 70 53  sion_patchset(pS
2a250 65 73 73 69 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68  ession->p, &szCh
2a260 6e 67 2c 20 26 70 43 68 6e 67 29 3b 0a 20 20 20  ng, &pChng);.   
2a270 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
2a280 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
2a290 20 20 20 70 72 69 6e 74 66 28 22 45 72 72 6f 72     printf("Error
2a2a0 3a 20 65 72 72 6f 72 20 63 6f 64 65 20 25 64 5c  : error code %d\
2a2b0 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20  n", rc);.       
2a2c0 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 20     rc = 0;.     
2a2d0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
2a2e0 20 70 43 68 6e 67 0a 20 20 20 20 20 20 20 20 20   pChng.         
2a2f0 20 26 26 20 66 77 72 69 74 65 28 70 43 68 6e 67   && fwrite(pChng
2a300 2c 20 73 7a 43 68 6e 67 2c 20 31 2c 20 6f 75 74  , szChng, 1, out
2a310 29 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=1 ){.        
2a320 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2a330 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 46 61 69  err, "ERROR: Fai
2a340 6c 65 64 20 74 6f 20 77 72 69 74 65 20 65 6e 74  led to write ent
2a350 69 72 65 20 25 64 2d 62 79 74 65 20 6f 75 74 70  ire %d-byte outp
2a360 75 74 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  ut\n",.         
2a370 20 20 20 20 20 20 20 20 20 73 7a 43 68 6e 67 29           szChng)
2a380 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2a390 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2a3a0 28 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20  (pChng);.       
2a3b0 20 66 63 6c 6f 73 65 28 6f 75 74 29 3b 0a 20 20   fclose(out);.  
2a3c0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a      }.    }else.
2a3d0 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
2a3e0 20 63 6c 6f 73 65 0a 20 20 20 20 2a 2a 20 43 6c   close.    ** Cl
2a3f0 6f 73 65 20 74 68 65 20 69 64 65 6e 74 69 66 69  ose the identifi
2a400 65 64 20 73 65 73 73 69 6f 6e 0a 20 20 20 20 2a  ed session.    *
2a410 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70  /.    if( strcmp
2a420 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 63 6c 6f 73  (azCmd[0], "clos
2a430 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
2a440 69 66 28 20 6e 43 6d 64 21 3d 31 20 29 20 67 6f  if( nCmd!=1 ) go
2a450 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61  to session_synta
2a460 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69  x_error;.      i
2a470 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 29  f( p->nSession )
2a480 7b 0a 20 20 20 20 20 20 20 20 73 65 73 73 69 6f  {.        sessio
2a490 6e 5f 63 6c 6f 73 65 28 70 53 65 73 73 69 6f 6e  n_close(pSession
2a4a0 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 61 53  );.        p->aS
2a4b0 65 73 73 69 6f 6e 5b 69 53 65 73 5d 20 3d 20 70  ession[iSes] = p
2a4c0 2d 3e 61 53 65 73 73 69 6f 6e 5b 2d 2d 70 2d 3e  ->aSession[--p->
2a4d0 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20 20  nSession];.     
2a4e0 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20   }.    }else..  
2a4f0 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 65 6e    /* .session en
2a500 61 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f 0a 20  able ?BOOLEAN?. 
2a510 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20 73     ** Query or s
2a520 65 74 20 74 68 65 20 65 6e 61 62 6c 65 20 66 6c  et the enable fl
2a530 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  ag.    */.    if
2a540 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30  ( strcmp(azCmd[0
2a550 5d 2c 20 22 65 6e 61 62 6c 65 22 29 3d 3d 30 20  ], "enable")==0 
2a560 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b  ){.      int ii;
2a570 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 3e  .      if( nCmd>
2a580 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  2 ) goto session
2a590 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
2a5a0 20 20 20 20 20 69 69 20 3d 20 6e 43 6d 64 3d 3d       ii = nCmd==
2a5b0 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c 65 61 6e  1 ? -1 : boolean
2a5c0 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31 5d 29 3b  Value(azCmd[1]);
2a5d0 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
2a5e0 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
2a5f0 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65    ii = sqlite3se
2a600 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28 70 53 65  ssion_enable(pSe
2a610 73 73 69 6f 6e 2d 3e 70 2c 20 69 69 29 3b 0a 20  ssion->p, ii);. 
2a620 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
2a630 74 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65 73 73  tf(p->out, "sess
2a640 69 6f 6e 20 25 73 20 65 6e 61 62 6c 65 20 66 6c  ion %s enable fl
2a650 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20 20 20 20  ag = %d\n",.    
2a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a670 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c  pSession->zName,
2a680 20 69 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   ii);.      }.  
2a690 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20    }else..    /* 
2a6a0 2e 73 65 73 73 69 6f 6e 20 66 69 6c 74 65 72 20  .session filter 
2a6b0 47 4c 4f 42 20 2e 2e 2e 2e 0a 20 20 20 20 2a 2a  GLOB .....    **
2a6c0 20 53 65 74 20 61 20 6c 69 73 74 20 6f 66 20 47   Set a list of G
2a6d0 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 6f 66 20  LOB patterns of 
2a6e0 74 61 62 6c 65 20 6e 61 6d 65 73 20 74 6f 20 62  table names to b
2a6f0 65 20 65 78 63 6c 75 64 65 64 2e 0a 20 20 20 20  e excluded..    
2a700 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d  */.    if( strcm
2a710 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 66 69 6c  p(azCmd[0], "fil
2a720 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ter")==0 ){.    
2a730 20 20 69 6e 74 20 69 69 2c 20 6e 42 79 74 65 3b    int ii, nByte;
2a740 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 3c  .      if( nCmd<
2a750 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  2 ) goto session
2a760 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
2a770 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73       if( p->nSes
2a780 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  sion ){.        
2a790 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 53 65  for(ii=0; ii<pSe
2a7a0 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20  ssion->nFilter; 
2a7b0 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
2a7c0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53   sqlite3_free(pS
2a7d0 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72  ession->azFilter
2a7e0 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d  [ii]);.        }
2a7f0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2a800 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e  _free(pSession->
2a810 61 7a 46 69 6c 74 65 72 29 3b 0a 20 20 20 20 20  azFilter);.     
2a820 20 20 20 6e 42 79 74 65 20 3d 20 73 69 7a 65 6f     nByte = sizeo
2a830 66 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  f(pSession->azFi
2a840 6c 74 65 72 5b 30 5d 29 2a 28 6e 43 6d 64 2d 31  lter[0])*(nCmd-1
2a850 29 3b 0a 20 20 20 20 20 20 20 20 70 53 65 73 73  );.        pSess
2a860 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 20 3d 20  ion->azFilter = 
2a870 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 20  sqlite3_malloc( 
2a880 6e 42 79 74 65 20 29 3b 0a 20 20 20 20 20 20 20  nByte );.       
2a890 20 69 66 28 20 70 53 65 73 73 69 6f 6e 2d 3e 61   if( pSession->a
2a8a0 7a 46 69 6c 74 65 72 3d 3d 30 20 29 7b 0a 20 20  zFilter==0 ){.  
2a8b0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
2a8c0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
2a8d0 72 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79  r: out or memory
2a8e0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
2a8f0 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20 20  exit(1);.       
2a900 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69   }.        for(i
2a910 69 3d 31 3b 20 69 69 3c 6e 43 6d 64 3b 20 69 69  i=1; ii<nCmd; ii
2a920 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ++){.          p
2a930 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65  Session->azFilte
2a940 72 5b 69 69 2d 31 5d 20 3d 20 73 71 6c 69 74 65  r[ii-1] = sqlite
2a950 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
2a960 61 7a 43 6d 64 5b 69 69 5d 29 3b 0a 20 20 20 20  azCmd[ii]);.    
2a970 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 53      }.        pS
2a980 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 20  ession->nFilter 
2a990 3d 20 69 69 2d 31 3b 0a 20 20 20 20 20 20 7d 0a  = ii-1;.      }.
2a9a0 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f      }else..    /
2a9b0 2a 20 2e 73 65 73 73 69 6f 6e 20 69 6e 64 69 72  * .session indir
2a9c0 65 63 74 20 3f 42 4f 4f 4c 45 41 4e 3f 0a 20 20  ect ?BOOLEAN?.  
2a9d0 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20 73 65    ** Query or se
2a9e0 74 20 74 68 65 20 69 6e 64 69 72 65 63 74 20 66  t the indirect f
2a9f0 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  lag.    */.    i
2aa00 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
2aa10 30 5d 2c 20 22 69 6e 64 69 72 65 63 74 22 29 3d  0], "indirect")=
2aa20 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
2aa30 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43  ii;.      if( nC
2aa40 6d 64 3e 32 20 29 20 67 6f 74 6f 20 73 65 73 73  md>2 ) goto sess
2aa50 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
2aa60 3b 0a 20 20 20 20 20 20 69 69 20 3d 20 6e 43 6d  ;.      ii = nCm
2aa70 64 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c  d==1 ? -1 : bool
2aa80 65 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31  eanValue(azCmd[1
2aa90 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  ]);.      if( p-
2aaa0 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20  >nSession ){.   
2aab0 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74 65       ii = sqlite
2aac0 33 73 65 73 73 69 6f 6e 5f 69 6e 64 69 72 65 63  3session_indirec
2aad0 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 69  t(pSession->p, i
2aae0 69 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  i);.        utf8
2aaf0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2ab00 22 73 65 73 73 69 6f 6e 20 25 73 20 69 6e 64 69  "session %s indi
2ab10 72 65 63 74 20 66 6c 61 67 20 3d 20 25 64 5c 6e  rect flag = %d\n
2ab20 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
2ab30 20 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 2d         pSession-
2ab40 3e 7a 4e 61 6d 65 2c 20 69 69 29 3b 0a 20 20 20  >zName, ii);.   
2ab50 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a     }.    }else..
2ab60 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20      /* .session 
2ab70 69 73 65 6d 70 74 79 0a 20 20 20 20 2a 2a 20 44  isempty.    ** D
2ab80 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
2ab90 73 65 73 73 69 6f 6e 20 69 73 20 65 6d 70 74 79  session is empty
2aba0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
2abb0 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c  strcmp(azCmd[0],
2abc0 20 22 69 73 65 6d 70 74 79 22 29 3d 3d 30 20 29   "isempty")==0 )
2abd0 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a  {.      int ii;.
2abe0 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21 3d        if( nCmd!=
2abf0 31 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  1 ) goto session
2ac00 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
2ac10 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73       if( p->nSes
2ac20 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  sion ){.        
2ac30 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73  ii = sqlite3sess
2ac40 69 6f 6e 5f 69 73 65 6d 70 74 79 28 70 53 65 73  ion_isempty(pSes
2ac50 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20 20 20  sion->p);.      
2ac60 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2ac70 3e 6f 75 74 2c 20 22 73 65 73 73 69 6f 6e 20 25  >out, "session %
2ac80 73 20 69 73 65 6d 70 74 79 20 66 6c 61 67 20 3d  s isempty flag =
2ac90 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20   %d\n",.        
2aca0 20 20 20 20 20 20 20 20 20 20 20 20 70 53 65 73              pSes
2acb0 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29  sion->zName, ii)
2acc0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
2acd0 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73  lse..    /* .ses
2ace0 73 69 6f 6e 20 6c 69 73 74 0a 20 20 20 20 2a 2a  sion list.    **
2acf0 20 4c 69 73 74 20 61 6c 6c 20 63 75 72 72 65 6e   List all curren
2ad00 74 6c 79 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e  tly open session
2ad10 73 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  s.    */.    if(
2ad20 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d   strcmp(azCmd[0]
2ad30 2c 22 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20  ,"list")==0 ){. 
2ad40 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
2ad50 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b  p->nSession; i++
2ad60 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
2ad70 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2ad80 25 64 20 25 73 5c 6e 22 2c 20 69 2c 20 70 2d 3e  %d %s\n", i, p->
2ad90 61 53 65 73 73 69 6f 6e 5b 69 5d 2e 7a 4e 61 6d  aSession[i].zNam
2ada0 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
2adb0 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73  }else..    /* .s
2adc0 65 73 73 69 6f 6e 20 6f 70 65 6e 20 44 42 20 4e  ession open DB N
2add0 41 4d 45 0a 20 20 20 20 2a 2a 20 4f 70 65 6e 20  AME.    ** Open 
2ade0 61 20 6e 65 77 20 73 65 73 73 69 6f 6e 20 63 61  a new session ca
2adf0 6c 6c 65 64 20 4e 41 4d 45 20 6f 6e 20 74 68 65  lled NAME on the
2ae00 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
2ae10 73 65 20 44 42 2e 0a 20 20 20 20 2a 2a 20 44 42  se DB..    ** DB
2ae20 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 22 6d 61   is normally "ma
2ae30 69 6e 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  in"..    */.    
2ae40 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64  if( strcmp(azCmd
2ae50 5b 30 5d 2c 22 6f 70 65 6e 22 29 3d 3d 30 20 29  [0],"open")==0 )
2ae60 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e  {.      char *zN
2ae70 61 6d 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e  ame;.      if( n
2ae80 43 6d 64 21 3d 33 20 29 20 67 6f 74 6f 20 73 65  Cmd!=3 ) goto se
2ae90 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
2aea0 6f 72 3b 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20  or;.      zName 
2aeb0 3d 20 61 7a 43 6d 64 5b 32 5d 3b 0a 20 20 20 20  = azCmd[2];.    
2aec0 20 20 69 66 28 20 7a 4e 61 6d 65 5b 30 5d 3d 3d    if( zName[0]==
2aed0 30 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  0 ) goto session
2aee0 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
2aef0 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
2af00 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b  p->nSession; i++
2af10 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
2af20 74 72 63 6d 70 28 70 2d 3e 61 53 65 73 73 69 6f  trcmp(p->aSessio
2af30 6e 5b 69 5d 2e 7a 4e 61 6d 65 2c 7a 4e 61 6d 65  n[i].zName,zName
2af40 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
2af50 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
2af60 64 65 72 72 2c 20 22 53 65 73 73 69 6f 6e 20 5c  derr, "Session \
2af70 22 25 73 5c 22 20 61 6c 72 65 61 64 79 20 65 78  "%s\" already ex
2af80 69 73 74 73 5c 6e 22 2c 20 7a 4e 61 6d 65 29 3b  ists\n", zName);
2af90 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
2afa0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2afb0 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
2afc0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
2afd0 2d 3e 6e 53 65 73 73 69 6f 6e 3e 3d 41 72 72 61  ->nSession>=Arra
2afe0 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73 69 6f  ySize(p->aSessio
2aff0 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  n) ){.        ra
2b000 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2b010 20 22 4d 61 78 69 6d 75 6d 20 6f 66 20 25 64 20   "Maximum of %d 
2b020 73 65 73 73 69 6f 6e 73 5c 6e 22 2c 20 41 72 72  sessions\n", Arr
2b030 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73 69  aySize(p->aSessi
2b040 6f 6e 29 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  on));.        go
2b050 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
2b060 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  exit;.      }.  
2b070 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20 26      pSession = &
2b080 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 70 2d 3e 6e  p->aSession[p->n
2b090 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20 20 20  Session];.      
2b0a0 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73  rc = sqlite3sess
2b0b0 69 6f 6e 5f 63 72 65 61 74 65 28 70 2d 3e 64 62  ion_create(p->db
2b0c0 2c 20 61 7a 43 6d 64 5b 31 5d 2c 20 26 70 53 65  , azCmd[1], &pSe
2b0d0 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20 20  ssion->p);.     
2b0e0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
2b0f0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2b100 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20 6f 70  derr, "Cannot op
2b110 65 6e 20 73 65 73 73 69 6f 6e 3a 20 65 72 72 6f  en session: erro
2b120 72 20 63 6f 64 65 3d 25 64 5c 6e 22 2c 20 72 63  r code=%d\n", rc
2b130 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
2b140 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  0;.        goto 
2b150 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2b160 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
2b170 20 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74   pSession->nFilt
2b180 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 71  er = 0;.      sq
2b190 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 74 61 62  lite3session_tab
2b1a0 6c 65 5f 66 69 6c 74 65 72 28 70 53 65 73 73 69  le_filter(pSessi
2b1b0 6f 6e 2d 3e 70 2c 20 73 65 73 73 69 6f 6e 5f 66  on->p, session_f
2b1c0 69 6c 74 65 72 2c 20 70 53 65 73 73 69 6f 6e 29  ilter, pSession)
2b1d0 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 65 73 73  ;.      p->nSess
2b1e0 69 6f 6e 2b 2b 3b 0a 20 20 20 20 20 20 70 53 65  ion++;.      pSe
2b1f0 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 20 3d 20 73  ssion->zName = s
2b200 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
2b210 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
2b220 20 7d 65 6c 73 65 0a 20 20 20 20 2f 2a 20 49 66   }else.    /* If
2b230 20 6e 6f 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65   no command name
2b240 20 6d 61 74 63 68 65 73 2c 20 73 68 6f 77 20 61   matches, show a
2b250 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20 2a 2f   syntax error */
2b260 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 73 79 6e  .    session_syn
2b270 74 61 78 5f 65 72 72 6f 72 3a 0a 20 20 20 20 73  tax_error:.    s
2b280 65 73 73 69 6f 6e 5f 68 65 6c 70 28 70 29 3b 0a  ession_help(p);.
2b290 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
2b2a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2b2b0 42 55 47 0a 20 20 2f 2a 20 55 6e 64 6f 63 75 6d  BUG.  /* Undocum
2b2c0 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20 66  ented commands f
2b2d0 6f 72 20 69 6e 74 65 72 6e 61 6c 20 74 65 73 74  or internal test
2b2e0 69 6e 67 2e 20 20 53 75 62 6a 65 63 74 20 74 6f  ing.  Subject to
2b2f0 20 63 68 61 6e 67 65 0a 20 20 2a 2a 20 77 69 74   change.  ** wit
2b300 68 6f 75 74 20 6e 6f 74 69 63 65 2e 20 2a 2f 0a  hout notice. */.
2b310 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20    if( c=='s' && 
2b320 6e 3e 3d 31 30 20 26 26 20 73 74 72 6e 63 6d 70  n>=10 && strncmp
2b330 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 65 6c 66  (azArg[0], "self
2b340 74 65 73 74 2d 22 2c 20 39 29 3d 3d 30 20 29 7b  test-", 9)==0 ){
2b350 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70  .    if( strncmp
2b360 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 62 6f  (azArg[0]+9, "bo
2b370 6f 6c 65 61 6e 22 2c 20 6e 2d 39 29 3d 3d 30 20  olean", n-9)==0 
2b380 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20  ){.      int i, 
2b390 76 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  v;.      for(i=1
2b3a0 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2b3b0 20 20 20 20 20 20 20 20 76 20 3d 20 62 6f 6f 6c          v = bool
2b3c0 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 69  eanValue(azArg[i
2b3d0 5d 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  ]);.        utf8
2b3e0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2b3f0 22 25 73 3a 20 25 64 20 30 78 25 78 5c 6e 22 2c  "%s: %d 0x%x\n",
2b400 20 61 7a 41 72 67 5b 69 5d 2c 20 76 2c 20 76 29   azArg[i], v, v)
2b410 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2b420 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28      if( strncmp(
2b430 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 69 6e 74  azArg[0]+9, "int
2b440 65 67 65 72 22 2c 20 6e 2d 39 29 3d 3d 30 20 29  eger", n-9)==0 )
2b450 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 20 73  {.      int i; s
2b460 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 76 3b 0a  qlite3_int64 v;.
2b470 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69        for(i=1; i
2b480 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
2b490 20 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32       char zBuf[2
2b4a0 30 30 5d 3b 0a 20 20 20 20 20 20 20 20 76 20 3d  00];.        v =
2b4b0 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a   integerValue(az
2b4c0 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
2b4d0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2b4e0 66 28 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c 7a  f(sizeof(zBuf),z
2b4f0 42 75 66 2c 22 25 73 3a 20 25 6c 6c 64 20 30 78  Buf,"%s: %lld 0x
2b500 25 6c 6c 78 5c 6e 22 2c 20 61 7a 41 72 67 5b 69  %llx\n", azArg[i
2b510 5d 2c 76 2c 76 29 3b 0a 20 20 20 20 20 20 20 20  ],v,v);.        
2b520 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
2b530 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
2b540 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2b550 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
2b560 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 6e   if( c=='s' && n
2b570 3e 3d 34 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=4 && strncmp(a
2b580 7a 41 72 67 5b 30 5d 2c 22 73 65 6c 66 74 65 73  zArg[0],"selftes
2b590 74 22 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  t",n)==0 ){.    
2b5a0 69 6e 74 20 62 49 73 49 6e 69 74 20 3d 20 30 3b  int bIsInit = 0;
2b5b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
2b5c0 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74   to initialize t
2b5d0 68 65 20 53 45 4c 46 54 45 53 54 20 74 61 62 6c  he SELFTEST tabl
2b5e0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 56 65  e */.    int bVe
2b5f0 72 62 6f 73 65 20 3d 20 30 3b 20 20 20 20 20 20  rbose = 0;      
2b600 20 20 2f 2a 20 56 65 72 62 6f 73 65 20 6f 75 74    /* Verbose out
2b610 70 75 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62  put */.    int b
2b620 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 3b 20  SelftestExists; 
2b630 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 53      /* True if S
2b640 45 4c 46 54 45 53 54 20 61 6c 72 65 61 64 79 20  ELFTEST already 
2b650 65 78 69 73 74 73 20 2a 2f 0a 20 20 20 20 69 6e  exists */.    in
2b660 74 20 69 2c 20 6b 3b 20 20 20 20 20 20 20 20 20  t i, k;         
2b670 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
2b680 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20 69  ounters */.    i
2b690 6e 74 20 6e 54 65 73 74 20 3d 20 30 3b 20 20 20  nt nTest = 0;   
2b6a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
2b6b0 72 20 6f 66 20 74 65 73 74 73 20 72 75 6e 73 20  r of tests runs 
2b6c0 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 45 72 72 20  */.    int nErr 
2b6d0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
2b6e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
2b6f0 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 20 20  ors seen */.    
2b700 53 68 65 6c 6c 54 65 78 74 20 73 74 72 3b 20 20  ShellText str;  
2b710 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 73 77           /* Answ
2b720 65 72 20 66 6f 72 20 61 20 71 75 65 72 79 20 2a  er for a query *
2b730 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  /.    sqlite3_st
2b740 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 20 2f  mt *pStmt = 0; /
2b750 2a 20 51 75 65 72 79 20 61 67 61 69 6e 73 74 20  * Query against 
2b760 74 68 65 20 53 45 4c 46 54 45 53 54 20 74 61 62  the SELFTEST tab
2b770 6c 65 20 2a 2f 0a 0a 20 20 20 20 6f 70 65 6e 5f  le */..    open_
2b780 64 62 28 70 2c 30 29 3b 0a 20 20 20 20 66 6f 72  db(p,0);.    for
2b790 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=1; i<nArg; i+
2b7a0 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  +){.      const 
2b7b0 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b  char *z = azArg[
2b7c0 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b  i];.      if( z[
2b7d0 30 5d 3d 3d 27 2d 27 20 26 26 20 7a 5b 31 5d 3d  0]=='-' && z[1]=
2b7e0 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20  ='-' ) z++;.    
2b7f0 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22    if( strcmp(z,"
2b800 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a 20 20  -init")==0 ){.  
2b810 20 20 20 20 20 20 62 49 73 49 6e 69 74 20 3d 20        bIsInit = 
2b820 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  1;.      }else. 
2b830 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
2b840 7a 2c 22 2d 76 22 29 3d 3d 30 20 29 7b 0a 20 20  z,"-v")==0 ){.  
2b850 20 20 20 20 20 20 62 56 65 72 62 6f 73 65 2b 2b        bVerbose++
2b860 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20  ;.      }else.  
2b870 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 75 74      {.        ut
2b880 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
2b890 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f  , "Unknown optio
2b8a0 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25 73  n \"%s\" on \"%s
2b8b0 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  \"\n",.         
2b8c0 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2b8d0 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a  [i], azArg[0]);.
2b8e0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
2b8f0 74 66 28 73 74 64 65 72 72 2c 20 22 53 68 6f 75  tf(stderr, "Shou
2b900 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 2d 2d  ld be one of: --
2b910 69 6e 69 74 20 2d 76 5c 6e 22 29 3b 0a 20 20 20  init -v\n");.   
2b920 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2b930 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
2b940 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
2b950 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
2b960 66 28 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  f( sqlite3_table
2b970 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
2b980 28 70 2d 3e 64 62 2c 22 6d 61 69 6e 22 2c 22 73  (p->db,"main","s
2b990 65 6c 66 74 65 73 74 22 2c 30 2c 30 2c 30 2c 30  elftest",0,0,0,0
2b9a0 2c 30 2c 30 29 0a 20 20 20 20 20 20 20 20 20 20  ,0,0).          
2b9b0 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
2b9c0 0a 20 20 20 20 20 20 62 53 65 6c 66 74 65 73 74  .      bSelftest
2b9d0 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 20 20  Exists = 0;.    
2b9e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 62 53 65  }else{.      bSe
2b9f0 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d 20 31  lftestExists = 1
2ba00 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2ba10 62 49 73 49 6e 69 74 20 29 7b 0a 20 20 20 20 20  bIsInit ){.     
2ba20 20 63 72 65 61 74 65 53 65 6c 66 74 65 73 74 54   createSelftestT
2ba30 61 62 6c 65 28 70 29 3b 0a 20 20 20 20 20 20 62  able(p);.      b
2ba40 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d  SelftestExists =
2ba50 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 6e   1;.    }.    in
2ba60 69 74 54 65 78 74 28 26 73 74 72 29 3b 0a 20 20  itText(&str);.  
2ba70 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 74    appendText(&st
2ba80 72 2c 20 22 78 22 2c 20 30 29 3b 0a 20 20 20 20  r, "x", 0);.    
2ba90 66 6f 72 28 6b 3d 62 53 65 6c 66 74 65 73 74 45  for(k=bSelftestE
2baa0 78 69 73 74 73 3b 20 6b 3e 3d 30 3b 20 6b 2d 2d  xists; k>=0; k--
2bab0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6b 3d 3d  ){.      if( k==
2bac0 31 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  1 ){.        rc 
2bad0 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
2bae0 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20 20 20  e_v2(p->db,.    
2baf0 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
2bb00 74 6e 6f 2c 6f 70 2c 63 6d 64 2c 61 6e 73 20 46  tno,op,cmd,ans F
2bb10 52 4f 4d 20 73 65 6c 66 74 65 73 74 20 4f 52 44  ROM selftest ORD
2bb20 45 52 20 42 59 20 74 6e 6f 22 2c 0a 20 20 20 20  ER BY tno",.    
2bb30 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74          -1, &pSt
2bb40 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65  mt, 0);.      }e
2bb50 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20  lse{.        rc 
2bb60 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
2bb70 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20 20 20  e_v2(p->db,.    
2bb80 20 20 20 20 20 20 22 56 41 4c 55 45 53 28 30 2c        "VALUES(0,
2bb90 27 6d 65 6d 6f 27 2c 27 4d 69 73 73 69 6e 67 20  'memo','Missing 
2bba0 53 45 4c 46 54 45 53 54 20 74 61 62 6c 65 20 2d  SELFTEST table -
2bbb0 20 64 65 66 61 75 6c 74 20 63 68 65 63 6b 73 20   default checks 
2bbc0 6f 6e 6c 79 27 2c 27 27 29 2c 22 0a 20 20 20 20  only',''),".    
2bbd0 20 20 20 20 20 20 22 20 20 20 20 20 20 28 31 2c        "      (1,
2bbe0 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20 69 6e  'run','PRAGMA in
2bbf0 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27 2c 27  tegrity_check','
2bc00 6f 6b 27 29 22 2c 0a 20 20 20 20 20 20 20 20 20  ok')",.         
2bc10 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
2bc20 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
2bc30 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
2bc40 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2bc50 72 72 2c 20 22 45 72 72 6f 72 20 71 75 65 72 79  rr, "Error query
2bc60 69 6e 67 20 74 68 65 20 73 65 6c 66 74 65 73 74  ing the selftest
2bc70 20 74 61 62 6c 65 5c 6e 22 29 3b 0a 20 20 20 20   table\n");.    
2bc80 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2bc90 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
2bca0 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
2bcb0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
2bcc0 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
2bcd0 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72 28 69     }.      for(i
2bce0 3d 31 3b 20 73 71 6c 69 74 65 33 5f 73 74 65 70  =1; sqlite3_step
2bcf0 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
2bd00 52 4f 57 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ROW; i++){.     
2bd10 20 20 20 69 6e 74 20 74 6e 6f 20 3d 20 73 71 6c     int tno = sql
2bd20 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  ite3_column_int(
2bd30 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20  pStmt, 0);.     
2bd40 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
2bd50 4f 70 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  Op = (const char
2bd60 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
2bd70 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 29 3b  _text(pStmt, 1);
2bd80 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
2bd90 68 61 72 20 2a 7a 53 71 6c 20 3d 20 28 63 6f 6e  har *zSql = (con
2bda0 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
2bdb0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
2bdc0 6d 74 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20  mt, 2);.        
2bdd0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 6e 73  const char *zAns
2bde0 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
2bdf0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
2be00 65 78 74 28 70 53 74 6d 74 2c 20 33 29 3b 0a 0a  ext(pStmt, 3);..
2be10 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
2be20 20 20 20 20 20 20 20 69 66 28 20 62 56 65 72 62         if( bVerb
2be30 6f 73 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 20  ose>0 ){.       
2be40 20 20 20 63 68 61 72 20 2a 7a 51 75 6f 74 65 20     char *zQuote 
2be50 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
2be60 66 28 22 25 71 22 2c 20 7a 53 71 6c 29 3b 0a 20  f("%q", zSql);. 
2be70 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28           printf(
2be80 22 25 64 3a 20 25 73 20 25 73 5c 6e 22 2c 20 74  "%d: %s %s\n", t
2be90 6e 6f 2c 20 7a 4f 70 2c 20 7a 53 71 6c 29 3b 0a  no, zOp, zSql);.
2bea0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
2beb0 33 5f 66 72 65 65 28 7a 51 75 6f 74 65 29 3b 0a  3_free(zQuote);.
2bec0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2bed0 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4f 70    if( strcmp(zOp
2bee0 2c 22 6d 65 6d 6f 22 29 3d 3d 30 20 29 7b 0a 20  ,"memo")==0 ){. 
2bef0 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
2bf00 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
2bf10 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  \n", zSql);.    
2bf20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
2bf30 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4f 70    if( strcmp(zOp
2bf40 2c 22 72 75 6e 22 29 3d 3d 30 20 29 7b 0a 20 20  ,"run")==0 ){.  
2bf50 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45          char *zE
2bf60 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 20  rrMsg = 0;.     
2bf70 20 20 20 20 20 73 74 72 2e 6e 20 3d 20 30 3b 0a       str.n = 0;.
2bf80 20 20 20 20 20 20 20 20 20 20 73 74 72 2e 7a 5b            str.z[
2bf90 30 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  0] = 0;.        
2bfa0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
2bfb0 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c  xec(p->db, zSql,
2bfc0 20 63 61 70 74 75 72 65 4f 75 74 70 75 74 43 61   captureOutputCa
2bfd0 6c 6c 62 61 63 6b 2c 20 26 73 74 72 2c 20 26 7a  llback, &str, &z
2bfe0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20  ErrMsg);.       
2bff0 20 20 20 6e 54 65 73 74 2b 2b 3b 0a 20 20 20 20     nTest++;.    
2c000 20 20 20 20 20 20 69 66 28 20 62 56 65 72 62 6f        if( bVerbo
2c010 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  se ){.          
2c020 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2c030 3e 6f 75 74 2c 20 22 52 65 73 75 6c 74 3a 20 25  >out, "Result: %
2c040 73 5c 6e 22 2c 20 73 74 72 2e 7a 29 3b 0a 20 20  s\n", str.z);.  
2c050 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2c060 20 20 20 20 69 66 28 20 72 63 20 7c 7c 20 7a 45      if( rc || zE
2c070 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 20  rrMsg ){.       
2c080 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a 20 20 20       nErr++;.   
2c090 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b           rc = 1;
2c0a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66  .            utf
2c0b0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2c0c0 20 22 25 64 3a 20 65 72 72 6f 72 2d 63 6f 64 65   "%d: error-code
2c0d0 2d 25 64 3a 20 25 73 5c 6e 22 2c 20 74 6e 6f 2c  -%d: %s\n", tno,
2c0e0 20 72 63 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20   rc, zErrMsg);. 
2c0f0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
2c100 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
2c110 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
2c120 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 41 6e  e if( strcmp(zAn
2c130 73 2c 73 74 72 2e 7a 29 21 3d 30 20 29 7b 0a 20  s,str.z)!=0 ){. 
2c140 20 20 20 20 20 20 20 20 20 20 20 6e 45 72 72 2b             nErr+
2c150 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  +;.            r
2c160 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  c = 1;.         
2c170 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
2c180 2d 3e 6f 75 74 2c 20 22 25 64 3a 20 45 78 70 65  ->out, "%d: Expe
2c190 63 74 65 64 3a 20 5b 25 73 5d 5c 6e 22 2c 20 74  cted: [%s]\n", t
2c1a0 6e 6f 2c 20 7a 41 6e 73 29 3b 0a 20 20 20 20 20  no, zAns);.     
2c1b0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
2c1c0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 3a 20  tf(p->out, "%d: 
2c1d0 20 20 20 20 20 47 6f 74 3a 20 5b 25 73 5d 5c 6e       Got: [%s]\n
2c1e0 22 2c 20 74 6e 6f 2c 20 73 74 72 2e 7a 29 3b 0a  ", tno, str.z);.
2c1f0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2c200 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
2c210 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74    {.          ut
2c220 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
2c230 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 55  ,.            "U
2c240 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69 6f 6e  nknown operation
2c250 20 5c 22 25 73 5c 22 20 6f 6e 20 73 65 6c 66 74   \"%s\" on selft
2c260 65 73 74 20 6c 69 6e 65 20 25 64 5c 6e 22 2c 20  est line %d\n", 
2c270 7a 4f 70 2c 20 74 6e 6f 29 3b 0a 20 20 20 20 20  zOp, tno);.     
2c280 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2c290 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2c2a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
2c2b0 2f 2a 20 45 6e 64 20 6c 6f 6f 70 20 6f 76 65 72  /* End loop over
2c2c0 20 72 6f 77 73 20 6f 66 20 63 6f 6e 74 65 6e 74   rows of content
2c2d0 20 66 72 6f 6d 20 53 45 4c 46 54 45 53 54 20 2a   from SELFTEST *
2c2e0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  /.      sqlite3_
2c2f0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
2c300 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20 6c 6f  .    } /* End lo
2c310 6f 70 20 6f 76 65 72 20 6b 20 2a 2f 0a 20 20 20  op over k */.   
2c320 20 66 72 65 65 54 65 78 74 28 26 73 74 72 29 3b   freeText(&str);
2c330 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2c340 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 65 72 72  (p->out, "%d err
2c350 6f 72 73 20 6f 75 74 20 6f 66 20 25 64 20 74 65  ors out of %d te
2c360 73 74 73 5c 6e 22 2c 20 6e 45 72 72 2c 20 6e 54  sts\n", nErr, nT
2c370 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  est);.  }else.. 
2c380 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73   if( c=='s' && s
2c390 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
2c3a0 20 22 73 65 70 61 72 61 74 6f 72 22 2c 20 6e 29   "separator", n)
2c3b0 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
2c3c0 41 72 67 3c 32 20 7c 7c 20 6e 41 72 67 3e 33 20  Arg<2 || nArg>3 
2c3d0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
2c3e0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
2c3f0 67 65 3a 20 2e 73 65 70 61 72 61 74 6f 72 20 43  ge: .separator C
2c400 4f 4c 20 3f 52 4f 57 3f 5c 6e 22 29 3b 0a 20 20  OL ?ROW?\n");.  
2c410 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2c420 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d  }.    if( nArg>=
2c430 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  2 ){.      sqlit
2c440 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
2c450 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  of(p->colSeparat
2c460 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  or), p->colSepar
2c470 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20  ator,.          
2c480 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25 2e               "%.
2c490 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61 79 53  *s", (int)ArrayS
2c4a0 69 7a 65 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  ize(p->colSepara
2c4b0 74 6f 72 29 2d 31 2c 20 61 7a 41 72 67 5b 31 5d  tor)-1, azArg[1]
2c4c0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
2c4d0 20 6e 41 72 67 3e 3d 33 20 29 7b 0a 20 20 20 20   nArg>=3 ){.    
2c4e0 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2c4f0 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77  tf(sizeof(p->row
2c500 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72  Separator), p->r
2c510 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20  owSeparator,.   
2c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c530 20 20 20 20 22 25 2e 2a 73 22 2c 20 28 69 6e 74      "%.*s", (int
2c540 29 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 72 6f  )ArraySize(p->ro
2c550 77 53 65 70 61 72 61 74 6f 72 29 2d 31 2c 20 61  wSeparator)-1, a
2c560 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 7d 0a  zArg[2]);.    }.
2c570 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
2c580 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 34 20 26 26  =='s' && n>=4 &&
2c590 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2c5a0 5d 2c 22 73 68 61 33 73 75 6d 22 2c 6e 29 3d 3d  ],"sha3sum",n)==
2c5b0 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
2c5c0 68 61 72 20 2a 7a 4c 69 6b 65 20 3d 20 30 3b 20  har *zLike = 0; 
2c5d0 20 20 2f 2a 20 57 68 69 63 68 20 74 61 62 6c 65    /* Which table
2c5e0 20 74 6f 20 63 68 65 63 6b 73 75 6d 2e 20 30 20   to checksum. 0 
2c5f0 6d 65 61 6e 73 20 65 76 65 72 79 74 68 69 6e 67  means everything
2c600 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20   */.    int i;  
2c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c620 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
2c630 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 53 63 68   */.    int bSch
2c640 65 6d 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ema = 0;        
2c650 20 2f 2a 20 41 6c 73 6f 20 68 61 73 68 20 74 68   /* Also hash th
2c660 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20  e schema */.    
2c670 69 6e 74 20 62 53 65 70 61 72 61 74 65 20 3d 20  int bSeparate = 
2c680 30 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  0;       /* Hash
2c690 20 65 61 63 68 20 74 61 62 6c 65 20 73 65 70 61   each table sepa
2c6a0 72 61 74 65 6c 79 20 2a 2f 0a 20 20 20 20 69 6e  rately */.    in
2c6b0 74 20 69 53 69 7a 65 20 3d 20 32 32 34 3b 20 20  t iSize = 224;  
2c6c0 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 61         /* Hash a
2c6d0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
2c6e0 2a 2f 0a 20 20 20 20 69 6e 74 20 62 44 65 62 75  */.    int bDebu
2c6f0 67 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  g = 0;          
2c700 2f 2a 20 4f 6e 6c 79 20 73 68 6f 77 20 74 68 65  /* Only show the
2c710 20 71 75 65 72 79 20 74 68 61 74 20 77 6f 75 6c   query that woul
2c720 64 20 68 61 76 65 20 72 75 6e 20 2a 2f 0a 20 20  d have run */.  
2c730 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
2c740 70 53 74 6d 74 3b 20 20 20 20 20 2f 2a 20 46 6f  pStmt;     /* Fo
2c750 72 20 71 75 65 72 79 69 6e 67 20 74 61 62 6c 65  r querying table
2c760 73 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 20 20 63  s names */.    c
2c770 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20 20 20  har *zSql;      
2c780 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 74          /* SQL t
2c790 6f 20 62 65 20 72 75 6e 20 2a 2f 0a 20 20 20 20  o be run */.    
2c7a0 63 68 61 72 20 2a 7a 53 65 70 3b 20 20 20 20 20  char *zSep;     
2c7b0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 70 61           /* Sepa
2c7c0 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 53 68 65  rator */.    She
2c7d0 6c 6c 54 65 78 74 20 73 53 71 6c 3b 20 20 20 20  llText sSql;    
2c7e0 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74        /* Complet
2c7f0 65 20 53 51 4c 20 66 6f 72 20 74 68 65 20 71 75  e SQL for the qu
2c800 65 72 79 20 74 6f 20 72 75 6e 20 74 68 65 20 68  ery to run the h
2c810 61 73 68 20 2a 2f 0a 20 20 20 20 53 68 65 6c 6c  ash */.    Shell
2c820 54 65 78 74 20 73 51 75 65 72 79 3b 20 20 20 20  Text sQuery;    
2c830 20 20 20 20 2f 2a 20 53 65 74 20 6f 66 20 71 75      /* Set of qu
2c840 65 72 69 65 73 20 75 73 65 64 20 74 6f 20 72 65  eries used to re
2c850 61 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 2a  ad all content *
2c860 2f 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  /.    open_db(p,
2c870 20 30 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31   0);.    for(i=1
2c880 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2c890 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2c8a0 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d 3b 0a   *z = azArg[i];.
2c8b0 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d        if( z[0]==
2c8c0 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  '-' ){.        z
2c8d0 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ++;.        if( 
2c8e0 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  z[0]=='-' ) z++;
2c8f0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
2c900 63 6d 70 28 7a 2c 22 73 63 68 65 6d 61 22 29 3d  cmp(z,"schema")=
2c910 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
2c920 62 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20 20  bSchema = 1;.   
2c930 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20       }else.     
2c940 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c     if( strcmp(z,
2c950 22 73 68 61 33 2d 32 32 34 22 29 3d 3d 30 20 7c  "sha3-224")==0 |
2c960 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61 33  | strcmp(z,"sha3
2c970 2d 32 35 36 22 29 3d 3d 30 0a 20 20 20 20 20 20  -256")==0.      
2c980 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22     || strcmp(z,"
2c990 73 68 61 33 2d 33 38 34 22 29 3d 3d 30 20 7c 7c  sha3-384")==0 ||
2c9a0 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61 33 2d   strcmp(z,"sha3-
2c9b0 35 31 32 22 29 3d 3d 30 0a 20 20 20 20 20 20 20  512")==0.       
2c9c0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 53   ){.          iS
2c9d0 69 7a 65 20 3d 20 61 74 6f 69 28 26 7a 5b 35 5d  ize = atoi(&z[5]
2c9e0 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
2c9f0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
2ca00 63 6d 70 28 7a 2c 22 64 65 62 75 67 22 29 3d 3d  cmp(z,"debug")==
2ca10 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62  0 ){.          b
2ca20 44 65 62 75 67 20 3d 20 31 3b 0a 20 20 20 20 20  Debug = 1;.     
2ca30 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20 20     }else.       
2ca40 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66   {.          utf
2ca50 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
2ca60 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e   "Unknown option
2ca70 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25 73 5c   \"%s\" on \"%s\
2ca80 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  "\n",.          
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72              azAr
2caa0 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29 3b  g[i], azArg[0]);
2cab0 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
2cac0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53  rintf(stderr, "S
2cad0 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a  hould be one of:
2cae0 20 2d 2d 73 63 68 65 6d 61 22 0a 20 20 20 20 20   --schema".     
2caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb00 20 20 20 20 20 20 20 20 22 20 2d 2d 73 68 61 33          " --sha3
2cb10 2d 32 32 34 20 2d 2d 73 68 61 33 2d 32 35 35 20  -224 --sha3-255 
2cb20 2d 2d 73 68 61 33 2d 33 38 34 20 2d 2d 73 68 61  --sha3-384 --sha
2cb30 33 2d 35 31 32 5c 6e 22 29 3b 0a 20 20 20 20 20  3-512\n");.     
2cb40 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2cb50 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2cb60 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2cb70 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
2cb80 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b 65 20 29  else if( zLike )
2cb90 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
2cba0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
2cbb0 61 67 65 3a 20 2e 73 68 61 33 73 75 6d 20 3f 4f  age: .sha3sum ?O
2cbc0 50 54 49 4f 4e 53 3f 20 3f 4c 49 4b 45 2d 50 41  PTIONS? ?LIKE-PA
2cbd0 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20  TTERN?\n");.    
2cbe0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2cbf0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
2cc00 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
2cc10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2cc20 20 7a 4c 69 6b 65 20 3d 20 7a 3b 0a 20 20 20 20   zLike = z;.    
2cc30 20 20 20 20 62 53 65 70 61 72 61 74 65 20 3d 20      bSeparate = 
2cc40 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  1;.        if( s
2cc50 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 22  qlite3_strlike("
2cc60 73 71 6c 69 74 65 5f 25 22 2c 20 7a 4c 69 6b 65  sqlite_%", zLike
2cc70 2c 20 30 29 3d 3d 30 20 29 20 62 53 63 68 65 6d  , 0)==0 ) bSchem
2cc80 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  a = 1;.      }. 
2cc90 20 20 20 7d 0a 20 20 20 20 69 66 28 20 62 53 63     }.    if( bSc
2cca0 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20 7a 53  hema ){.      zS
2ccb0 71 6c 20 3d 20 22 53 45 4c 45 43 54 20 6c 6f 77  ql = "SELECT low
2ccc0 65 72 28 6e 61 6d 65 29 20 46 52 4f 4d 20 73 71  er(name) FROM sq
2ccd0 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20  lite_master".   
2cce0 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52            " WHER
2ccf0 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41  E type='table' A
2cd00 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f 74  ND coalesce(root
2cd10 70 61 67 65 2c 30 29 3e 31 22 0a 20 20 20 20 20  page,0)>1".     
2cd20 20 20 20 20 20 20 20 20 22 20 55 4e 49 4f 4e 20          " UNION 
2cd30 41 4c 4c 20 53 45 4c 45 43 54 20 27 73 71 6c 69  ALL SELECT 'sqli
2cd40 74 65 5f 6d 61 73 74 65 72 27 22 0a 20 20 20 20  te_master'".    
2cd50 20 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52           " ORDER
2cd60 20 42 59 20 31 20 63 6f 6c 6c 61 74 65 20 6e 6f   BY 1 collate no
2cd70 63 61 73 65 22 3b 0a 20 20 20 20 7d 65 6c 73 65  case";.    }else
2cd80 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 22  {.      zSql = "
2cd90 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 6e 61 6d  SELECT lower(nam
2cda0 65 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  e) FROM sqlite_m
2cdb0 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20  aster".         
2cdc0 20 20 20 20 22 20 57 48 45 52 45 20 74 79 70 65      " WHERE type
2cdd0 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 63 6f 61  ='table' AND coa
2cde0 6c 65 73 63 65 28 72 6f 6f 74 70 61 67 65 2c 30  lesce(rootpage,0
2cdf0 29 3e 31 22 0a 20 20 20 20 20 20 20 20 20 20 20  )>1".           
2ce00 20 20 22 20 41 4e 44 20 6e 61 6d 65 20 4e 4f 54    " AND name NOT
2ce10 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f 25 27   LIKE 'sqlite_%'
2ce20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22  ".             "
2ce30 20 4f 52 44 45 52 20 42 59 20 31 20 63 6f 6c 6c   ORDER BY 1 coll
2ce40 61 74 65 20 6e 6f 63 61 73 65 22 3b 0a 20 20 20  ate nocase";.   
2ce50 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 70   }.    sqlite3_p
2ce60 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
2ce70 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d   zSql, -1, &pStm
2ce80 74 2c 20 30 29 3b 0a 20 20 20 20 69 6e 69 74 54  t, 0);.    initT
2ce90 65 78 74 28 26 73 51 75 65 72 79 29 3b 0a 20 20  ext(&sQuery);.  
2cea0 20 20 69 6e 69 74 54 65 78 74 28 26 73 53 71 6c    initText(&sSql
2ceb0 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78  );.    appendTex
2cec0 74 28 26 73 53 71 6c 2c 20 22 57 49 54 48 20 5b  t(&sSql, "WITH [
2ced0 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d 28 61  sha3sum$query](a
2cee0 2c 62 29 20 41 53 28 22 2c 30 29 3b 0a 20 20 20  ,b) AS(",0);.   
2cef0 20 7a 53 65 70 20 3d 20 22 56 41 4c 55 45 53 28   zSep = "VALUES(
2cf00 22 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 53 51  ";.    while( SQ
2cf10 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65  LITE_ROW==sqlite
2cf20 33 5f 73 74 65 70 28 70 53 74 6d 74 29 20 29 7b  3_step(pStmt) ){
2cf30 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2cf40 72 20 2a 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74  r *zTab = (const
2cf50 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
2cf60 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74  olumn_text(pStmt
2cf70 2c 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ,0);.      if( z
2cf80 4c 69 6b 65 20 26 26 20 73 71 6c 69 74 65 33 5f  Like && sqlite3_
2cf90 73 74 72 6c 69 6b 65 28 7a 4c 69 6b 65 2c 20 7a  strlike(zLike, z
2cfa0 54 61 62 2c 20 30 29 21 3d 30 20 29 20 63 6f 6e  Tab, 0)!=0 ) con
2cfb0 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28  tinue;.      if(
2cfc0 20 73 74 72 6e 63 6d 70 28 7a 54 61 62 2c 20 22   strncmp(zTab, "
2cfd0 73 71 6c 69 74 65 5f 22 2c 37 29 21 3d 30 20 29  sqlite_",7)!=0 )
2cfe0 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  {.        append
2cff0 54 65 78 74 28 26 73 51 75 65 72 79 2c 22 53 45  Text(&sQuery,"SE
2d000 4c 45 43 54 20 2a 20 46 52 4f 4d 20 22 2c 20 30  LECT * FROM ", 0
2d010 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
2d020 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 7a 54  dText(&sQuery,zT
2d030 61 62 2c 27 22 27 29 3b 0a 20 20 20 20 20 20 20  ab,'"');.       
2d040 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75   appendText(&sQu
2d050 65 72 79 2c 22 20 4e 4f 54 20 49 4e 44 45 58 45  ery," NOT INDEXE
2d060 44 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  D;", 0);.      }
2d070 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2d080 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f 6d 61  zTab, "sqlite_ma
2d090 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ster")==0 ){.   
2d0a0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2d0b0 26 73 51 75 65 72 79 2c 22 53 45 4c 45 43 54 20  &sQuery,"SELECT 
2d0c0 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61  type,name,tbl_na
2d0d0 6d 65 2c 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  me,sql FROM sqli
2d0e0 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20  te_master".     
2d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d100 20 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59        " ORDER BY
2d110 20 6e 61 6d 65 3b 22 2c 20 30 29 3b 0a 20 20 20   name;", 0);.   
2d120 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
2d130 63 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c 69 74  cmp(zTab, "sqlit
2d140 65 5f 73 65 71 75 65 6e 63 65 22 29 3d 3d 30 20  e_sequence")==0 
2d150 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  ){.        appen
2d160 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 22 53  dText(&sQuery,"S
2d170 45 4c 45 43 54 20 6e 61 6d 65 2c 73 65 71 20 46  ELECT name,seq F
2d180 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65  ROM sqlite_seque
2d190 6e 63 65 22 0a 20 20 20 20 20 20 20 20 20 20 20  nce".           
2d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1b0 22 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b  " ORDER BY name;
2d1c0 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ", 0);.      }el
2d1d0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54  se if( strcmp(zT
2d1e0 61 62 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74  ab, "sqlite_stat
2d1f0 31 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  1")==0 ){.      
2d200 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51    appendText(&sQ
2d210 75 65 72 79 2c 22 53 45 4c 45 43 54 20 74 62 6c  uery,"SELECT tbl
2d220 2c 69 64 78 2c 73 74 61 74 20 46 52 4f 4d 20 73  ,idx,stat FROM s
2d230 71 6c 69 74 65 5f 73 74 61 74 31 22 0a 20 20 20  qlite_stat1".   
2d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d250 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52 20          " ORDER 
2d260 42 59 20 74 62 6c 2c 69 64 78 3b 22 2c 20 30 29  BY tbl,idx;", 0)
2d270 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
2d280 28 20 73 74 72 63 6d 70 28 7a 54 61 62 2c 20 22  ( strcmp(zTab, "
2d290 73 71 6c 69 74 65 5f 73 74 61 74 33 22 29 3d 3d  sqlite_stat3")==
2d2a0 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  0.             |
2d2b0 7c 20 73 74 72 63 6d 70 28 7a 54 61 62 2c 20 22  | strcmp(zTab, "
2d2c0 73 71 6c 69 74 65 5f 73 74 61 74 34 22 29 3d 3d  sqlite_stat4")==
2d2d0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70  0 ){.        app
2d2e0 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c  endText(&sQuery,
2d2f0 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
2d300 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61  ", 0);.        a
2d310 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65 72  ppendText(&sQuer
2d320 79 2c 20 7a 54 61 62 2c 20 30 29 3b 0a 20 20 20  y, zTab, 0);.   
2d330 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2d340 26 73 51 75 65 72 79 2c 20 22 20 4f 52 44 45 52  &sQuery, " ORDER
2d350 20 42 59 20 74 62 6c 2c 20 69 64 78 2c 20 72 6f   BY tbl, idx, ro
2d360 77 69 64 3b 5c 6e 22 2c 20 30 29 3b 0a 20 20 20  wid;\n", 0);.   
2d370 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e     }.      appen
2d380 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a 53 65  dText(&sSql, zSe
2d390 70 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70  p, 0);.      app
2d3a0 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 73  endText(&sSql, s
2d3b0 51 75 65 72 79 2e 7a 2c 20 27 5c 27 27 29 3b 0a  Query.z, '\'');.
2d3c0 20 20 20 20 20 20 73 51 75 65 72 79 2e 6e 20 3d        sQuery.n =
2d3d0 20 30 3b 0a 20 20 20 20 20 20 61 70 70 65 6e 64   0;.      append
2d3e0 54 65 78 74 28 26 73 53 71 6c 2c 20 22 2c 22 2c  Text(&sSql, ",",
2d3f0 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e   0);.      appen
2d400 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a 54 61  dText(&sSql, zTa
2d410 62 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20 20 20  b, '\'');.      
2d420 7a 53 65 70 20 3d 20 22 29 2c 28 22 3b 0a 20 20  zSep = "),(";.  
2d430 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
2d440 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
2d450 0a 20 20 20 20 69 66 28 20 62 53 65 70 61 72 61  .    if( bSepara
2d460 74 65 20 29 7b 0a 20 20 20 20 20 20 7a 53 71 6c  te ){.      zSql
2d470 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2d480 74 66 28 0a 20 20 20 20 20 20 20 20 20 20 22 25  tf(.          "%
2d490 73 29 29 22 0a 20 20 20 20 20 20 20 20 20 20 22  s))".          "
2d4a0 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65   SELECT lower(he
2d4b0 78 28 73 68 61 33 5f 71 75 65 72 79 28 61 2c 25  x(sha3_query(a,%
2d4c0 64 29 29 29 20 41 53 20 68 61 73 68 2c 20 62 20  d))) AS hash, b 
2d4d0 41 53 20 6c 61 62 65 6c 22 0a 20 20 20 20 20 20  AS label".      
2d4e0 20 20 20 20 22 20 20 20 46 52 4f 4d 20 5b 73 68      "   FROM [sh
2d4f0 61 33 73 75 6d 24 71 75 65 72 79 5d 22 2c 0a 20  a3sum$query]",. 
2d500 20 20 20 20 20 20 20 20 20 73 53 71 6c 2e 7a 2c           sSql.z,
2d510 20 69 53 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c   iSize);.    }el
2d520 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d  se{.      zSql =
2d530 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2d540 28 0a 20 20 20 20 20 20 20 20 20 20 22 25 73 29  (.          "%s)
2d550 29 22 0a 20 20 20 20 20 20 20 20 20 20 22 20 53  )".          " S
2d560 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65 78 28  ELECT lower(hex(
2d570 73 68 61 33 5f 71 75 65 72 79 28 67 72 6f 75 70  sha3_query(group
2d580 5f 63 6f 6e 63 61 74 28 61 2c 27 27 29 2c 25 64  _concat(a,''),%d
2d590 29 29 29 20 41 53 20 68 61 73 68 22 0a 20 20 20  ))) AS hash".   
2d5a0 20 20 20 20 20 20 20 22 20 20 20 46 52 4f 4d 20         "   FROM 
2d5b0 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d 22  [sha3sum$query]"
2d5c0 2c 0a 20 20 20 20 20 20 20 20 20 20 73 53 71 6c  ,.          sSql
2d5d0 2e 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20 20 20  .z, iSize);.    
2d5e0 7d 0a 20 20 20 20 66 72 65 65 54 65 78 74 28 26  }.    freeText(&
2d5f0 73 51 75 65 72 79 29 3b 0a 20 20 20 20 66 72 65  sQuery);.    fre
2d600 65 54 65 78 74 28 26 73 53 71 6c 29 3b 0a 20 20  eText(&sSql);.  
2d610 20 20 69 66 28 20 62 44 65 62 75 67 20 29 7b 0a    if( bDebug ){.
2d620 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2d630 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22  f(p->out, "%s\n"
2d640 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 65 6c  , zSql);.    }el
2d650 73 65 7b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f  se{.      shell_
2d660 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  exec(p->db, zSql
2d670 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b  , shell_callback
2d680 2c 20 70 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  , p, 0);.    }. 
2d690 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2d6a0 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  zSql);.  }else..
2d6b0 20 20 69 66 28 20 63 3d 3d 27 73 27 0a 20 20 20    if( c=='s'.   
2d6c0 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a 41 72  && (strncmp(azAr
2d6d0 67 5b 30 5d 2c 20 22 73 68 65 6c 6c 22 2c 20 6e  g[0], "shell", n
2d6e0 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d 70 28  )==0 || strncmp(
2d6f0 61 7a 41 72 67 5b 30 5d 2c 22 73 79 73 74 65 6d  azArg[0],"system
2d700 22 2c 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a 20 20  ",n)==0).  ){.  
2d710 20 20 63 68 61 72 20 2a 7a 43 6d 64 3b 0a 20 20    char *zCmd;.  
2d720 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20 20 20    int i, x;.    
2d730 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20  if( nArg<2 ){.  
2d740 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2d750 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
2d760 73 79 73 74 65 6d 20 43 4f 4d 4d 41 4e 44 5c 6e  system COMMAND\n
2d770 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2d780 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
2d790 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2d7a0 20 20 20 20 7d 0a 20 20 20 20 7a 43 6d 64 20 3d      }.    zCmd =
2d7b0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2d7c0 28 73 74 72 63 68 72 28 61 7a 41 72 67 5b 31 5d  (strchr(azArg[1]
2d7d0 2c 27 20 27 29 3d 3d 30 3f 22 25 73 22 3a 22 5c  ,' ')==0?"%s":"\
2d7e0 22 25 73 5c 22 22 2c 20 61 7a 41 72 67 5b 31 5d  "%s\"", azArg[1]
2d7f0 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 32 3b 20  );.    for(i=2; 
2d800 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2d810 20 20 20 20 7a 43 6d 64 20 3d 20 73 71 6c 69 74      zCmd = sqlit
2d820 65 33 5f 6d 70 72 69 6e 74 66 28 73 74 72 63 68  e3_mprintf(strch
2d830 72 28 61 7a 41 72 67 5b 69 5d 2c 27 20 27 29 3d  r(azArg[i],' ')=
2d840 3d 30 3f 22 25 7a 20 25 73 22 3a 22 25 7a 20 5c  =0?"%z %s":"%z \
2d850 22 25 73 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  "%s\"",.        
2d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d870 20 20 20 20 20 7a 43 6d 64 2c 20 61 7a 41 72 67       zCmd, azArg
2d880 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  [i]);.    }.    
2d890 78 20 3d 20 73 79 73 74 65 6d 28 7a 43 6d 64 29  x = system(zCmd)
2d8a0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
2d8b0 65 65 28 7a 43 6d 64 29 3b 0a 20 20 20 20 69 66  ee(zCmd);.    if
2d8c0 28 20 78 20 29 20 72 61 77 5f 70 72 69 6e 74 66  ( x ) raw_printf
2d8d0 28 73 74 64 65 72 72 2c 20 22 53 79 73 74 65 6d  (stderr, "System
2d8e0 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73   command returns
2d8f0 20 25 64 5c 6e 22 2c 20 78 29 3b 0a 20 20 7d 65   %d\n", x);.  }e
2d900 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73  lse..  if( c=='s
2d910 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
2d920 72 67 5b 30 5d 2c 20 22 73 68 6f 77 22 2c 20 6e  rg[0], "show", n
2d930 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74  )==0 ){.    stat
2d940 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
2d950 7a 42 6f 6f 6c 5b 5d 20 3d 20 7b 20 22 6f 66 66  zBool[] = { "off
2d960 22 2c 20 22 6f 6e 22 2c 20 22 74 72 69 67 67 65  ", "on", "trigge
2d970 72 22 2c 20 22 66 75 6c 6c 22 7d 3b 0a 20 20 20  r", "full"};.   
2d980 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 66 28 20   int i;.    if( 
2d990 6e 41 72 67 21 3d 31 20 29 7b 0a 20 20 20 20 20  nArg!=1 ){.     
2d9a0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2d9b0 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 68 6f  rr, "Usage: .sho
2d9c0 77 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  w\n");.      rc 
2d9d0 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  = 1;.      goto 
2d9e0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2d9f0 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 75 74 66  t;.    }.    utf
2da00 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2da10 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22   "%12.12s: %s\n"
2da20 2c 22 65 63 68 6f 22 2c 0a 20 20 20 20 20 20 20  ,"echo",.       
2da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da40 20 20 20 20 20 20 20 20 20 20 20 61 7a 42 6f 6f             azBoo
2da50 6c 5b 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70  l[ShellHasFlag(p
2da60 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29 5d 29 3b  , SHFLG_Echo)]);
2da70 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2da80 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32  (p->out, "%12.12
2da90 73 3a 20 25 73 5c 6e 22 2c 22 65 71 70 22 2c 20  s: %s\n","eqp", 
2daa0 61 7a 42 6f 6f 6c 5b 70 2d 3e 61 75 74 6f 45 51  azBool[p->autoEQ
2dab0 50 26 33 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f  P&3]);.    utf8_
2dac0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2dad0 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22  %12.12s: %s\n","
2dae0 65 78 70 6c 61 69 6e 22 2c 0a 20 20 20 20 20 20  explain",.      
2daf0 20 20 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45     p->mode==MODE
2db00 5f 45 78 70 6c 61 69 6e 20 3f 20 22 6f 6e 22 20  _Explain ? "on" 
2db10 3a 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e  : p->autoExplain
2db20 20 3f 20 22 61 75 74 6f 22 20 3a 20 22 6f 66 66   ? "auto" : "off
2db30 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ");.    utf8_pri
2db40 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e  ntf(p->out,"%12.
2db50 31 32 73 3a 20 25 73 5c 6e 22 2c 22 68 65 61 64  12s: %s\n","head
2db60 65 72 73 22 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e  ers", azBool[p->
2db70 73 68 6f 77 48 65 61 64 65 72 21 3d 30 5d 29 3b  showHeader!=0]);
2db80 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2db90 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32  (p->out, "%12.12
2dba0 73 3a 20 25 73 5c 6e 22 2c 22 6d 6f 64 65 22 2c  s: %s\n","mode",
2dbb0 20 6d 6f 64 65 44 65 73 63 72 5b 70 2d 3e 6d 6f   modeDescr[p->mo
2dbc0 64 65 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  de]);.    utf8_p
2dbd0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2dbe0 31 32 2e 31 32 73 3a 20 22 2c 20 22 6e 75 6c 6c  12.12s: ", "null
2dbf0 76 61 6c 75 65 22 29 3b 0a 20 20 20 20 20 20 6f  value");.      o
2dc00 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70  utput_c_string(p
2dc10 2d 3e 6f 75 74 2c 20 70 2d 3e 6e 75 6c 6c 56 61  ->out, p->nullVa
2dc20 6c 75 65 29 3b 0a 20 20 20 20 20 20 72 61 77 5f  lue);.      raw_
2dc30 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2dc40 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  \n");.    utf8_p
2dc50 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31  rintf(p->out,"%1
2dc60 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 6f 75  2.12s: %s\n","ou
2dc70 74 70 75 74 22 2c 0a 20 20 20 20 20 20 20 20 20  tput",.         
2dc80 20 20 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 6f     strlen30(p->o
2dc90 75 74 66 69 6c 65 29 20 3f 20 70 2d 3e 6f 75 74  utfile) ? p->out
2dca0 66 69 6c 65 20 3a 20 22 73 74 64 6f 75 74 22 29  file : "stdout")
2dcb0 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  ;.    utf8_print
2dcc0 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31 32  f(p->out,"%12.12
2dcd0 73 3a 20 22 2c 20 22 63 6f 6c 73 65 70 61 72 61  s: ", "colsepara
2dce0 74 6f 72 22 29 3b 0a 20 20 20 20 20 20 6f 75 74  tor");.      out
2dcf0 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e  put_c_string(p->
2dd00 6f 75 74 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  out, p->colSepar
2dd10 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 72 61 77  ator);.      raw
2dd20 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2dd30 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66 38 5f  "\n");.    utf8_
2dd40 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
2dd50 31 32 2e 31 32 73 3a 20 22 2c 20 22 72 6f 77 73  12.12s: ", "rows
2dd60 65 70 61 72 61 74 6f 72 22 29 3b 0a 20 20 20 20  eparator");.    
2dd70 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e    output_c_strin
2dd80 67 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 72 6f 77  g(p->out, p->row
2dd90 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
2dda0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
2ddb0 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20  out, "\n");.    
2ddc0 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
2ddd0 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 25 73  ut, "%12.12s: %s
2dde0 5c 6e 22 2c 22 73 74 61 74 73 22 2c 20 61 7a 42  \n","stats", azB
2ddf0 6f 6f 6c 5b 70 2d 3e 73 74 61 74 73 4f 6e 21 3d  ool[p->statsOn!=
2de00 30 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  0]);.    utf8_pr
2de10 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31  intf(p->out, "%1
2de20 32 2e 31 32 73 3a 20 22 2c 20 22 77 69 64 74 68  2.12s: ", "width
2de30 22 29 3b 0a 20 20 20 20 66 6f 72 20 28 69 3d 30  ");.    for (i=0
2de40 3b 69 3c 28 69 6e 74 29 41 72 72 61 79 53 69 7a  ;i<(int)ArraySiz
2de50 65 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 20 26  e(p->colWidth) &
2de60 26 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 69 5d  & p->colWidth[i]
2de70 20 21 3d 20 30 3b 69 2b 2b 29 20 7b 0a 20 20 20   != 0;i++) {.   
2de80 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
2de90 3e 6f 75 74 2c 20 22 25 64 20 22 2c 20 70 2d 3e  >out, "%d ", p->
2dea0 63 6f 6c 57 69 64 74 68 5b 69 5d 29 3b 0a 20 20  colWidth[i]);.  
2deb0 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69 6e    }.    raw_prin
2dec0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29  tf(p->out, "\n")
2ded0 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  ;.    utf8_print
2dee0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31  f(p->out, "%12.1
2def0 32 73 3a 20 25 73 5c 6e 22 2c 20 22 66 69 6c 65  2s: %s\n", "file
2df00 6e 61 6d 65 22 2c 0a 20 20 20 20 20 20 20 20 20  name",.         
2df10 20 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c         p->zDbFil
2df20 65 6e 61 6d 65 20 3f 20 70 2d 3e 7a 44 62 46 69  ename ? p->zDbFi
2df30 6c 65 6e 61 6d 65 20 3a 20 22 22 29 3b 0a 20 20  lename : "");.  
2df40 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
2df50 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  's' && strncmp(a
2df60 7a 41 72 67 5b 30 5d 2c 20 22 73 74 61 74 73 22  zArg[0], "stats"
2df70 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
2df80 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20  f( nArg==2 ){.  
2df90 20 20 20 20 70 2d 3e 73 74 61 74 73 4f 6e 20 3d      p->statsOn =
2dfa0 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a   booleanValue(az
2dfb0 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c  Arg[1]);.    }el
2dfc0 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 31 20 29  se if( nArg==1 )
2dfd0 7b 0a 20 20 20 20 20 20 64 69 73 70 6c 61 79 5f  {.      display_
2dfe0 73 74 61 74 73 28 70 2d 3e 64 62 2c 20 70 2c 20  stats(p->db, p, 
2dff0 30 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  0);.    }else{. 
2e000 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2e010 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
2e020 2e 73 74 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f 5c  .stats ?on|off?\
2e030 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
2e040 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
2e050 0a 0a 20 20 69 66 28 20 28 63 3d 3d 27 74 27 20  ..  if( (c=='t' 
2e060 26 26 20 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d  && n>1 && strncm
2e070 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 61 62  p(azArg[0], "tab
2e080 6c 65 73 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 20  les", n)==0).   
2e090 7c 7c 20 28 63 3d 3d 27 69 27 20 26 26 20 28 73  || (c=='i' && (s
2e0a0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
2e0b0 20 22 69 6e 64 69 63 65 73 22 2c 20 6e 29 3d 3d   "indices", n)==
2e0c0 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0.              
2e0d0 20 20 20 7c 7c 20 73 74 72 6e 63 6d 70 28 61 7a     || strncmp(az
2e0e0 41 72 67 5b 30 5d 2c 20 22 69 6e 64 65 78 65 73  Arg[0], "indexes
2e0f0 22 2c 20 6e 29 3d 3d 30 29 20 29 0a 20 20 29 7b  ", n)==0) ).  ){
2e100 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  .    sqlite3_stm
2e110 74 20 2a 70 53 74 6d 74 3b 0a 20 20 20 20 63 68  t *pStmt;.    ch
2e120 61 72 20 2a 2a 61 7a 52 65 73 75 6c 74 3b 0a 20  ar **azResult;. 
2e130 20 20 20 69 6e 74 20 6e 52 6f 77 2c 20 6e 41 6c     int nRow, nAl
2e140 6c 6f 63 3b 0a 20 20 20 20 69 6e 74 20 69 69 3b  loc;.    int ii;
2e150 0a 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20 73  .    ShellText s
2e160 3b 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28 26  ;.    initText(&
2e170 73 29 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28  s);.    open_db(
2e180 70 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20  p, 0);.    rc = 
2e190 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
2e1a0 76 32 28 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d  v2(p->db, "PRAGM
2e1b0 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 22  A database_list"
2e1c0 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
2e1d0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 72  ;.    if( rc ) r
2e1e0 65 74 75 72 6e 20 73 68 65 6c 6c 44 61 74 61 62  eturn shellDatab
2e1f0 61 73 65 45 72 72 6f 72 28 70 2d 3e 64 62 29 3b  aseError(p->db);
2e200 0a 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 32  ..    if( nArg>2
2e210 20 26 26 20 63 3d 3d 27 69 27 20 29 7b 0a 20 20   && c=='i' ){.  
2e220 20 20 20 20 2f 2a 20 49 74 20 69 73 20 61 6e 20      /* It is an 
2e230 68 69 73 74 6f 72 69 63 61 6c 20 61 63 63 69 64  historical accid
2e240 65 6e 74 20 74 68 61 74 20 74 68 65 20 2e 69 6e  ent that the .in
2e250 64 65 78 65 73 20 63 6f 6d 6d 61 6e 64 20 73 68  dexes command sh
2e260 6f 77 73 20 61 6e 20 65 72 72 6f 72 0a 20 20 20  ows an error.   
2e270 20 20 20 2a 2a 20 77 68 65 6e 20 63 61 6c 6c 65     ** when calle
2e280 64 20 77 69 74 68 20 74 68 65 20 77 72 6f 6e 67  d with the wrong
2e290 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
2e2a0 65 6e 74 73 20 77 68 65 72 65 61 73 20 74 68 65  ents whereas the
2e2b0 20 2e 74 61 62 6c 65 73 0a 20 20 20 20 20 20 2a   .tables.      *
2e2c0 2a 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  * command does n
2e2d0 6f 74 2e 20 2a 2f 0a 20 20 20 20 20 20 72 61 77  ot. */.      raw
2e2e0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2e2f0 22 55 73 61 67 65 3a 20 2e 69 6e 64 65 78 65 73  "Usage: .indexes
2e300 20 3f 4c 49 4b 45 2d 50 41 54 54 45 52 4e 3f 5c   ?LIKE-PATTERN?\
2e310 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
2e320 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  1;.      goto me
2e330 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
2e340 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69  .    }.    for(i
2e350 69 3d 30 3b 20 73 71 6c 69 74 65 33 5f 73 74 65  i=0; sqlite3_ste
2e360 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45  p(pStmt)==SQLITE
2e370 5f 52 4f 57 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  _ROW; ii++){.   
2e380 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
2e390 44 62 4e 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20  DbName = (const 
2e3a0 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
2e3b0 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c  lumn_text(pStmt,
2e3c0 20 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a   1);.      if( z
2e3d0 44 62 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74  DbName==0 ) cont
2e3e0 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20  inue;.      if( 
2e3f0 73 2e 7a 20 26 26 20 73 2e 7a 5b 30 5d 20 29 20  s.z && s.z[0] ) 
2e400 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20 22  appendText(&s, "
2e410 20 55 4e 49 4f 4e 20 41 4c 4c 20 22 2c 20 30 29   UNION ALL ", 0)
2e420 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
2e430 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 44 62 4e  te3_stricmp(zDbN
2e440 61 6d 65 2c 20 22 6d 61 69 6e 22 29 3d 3d 30 20  ame, "main")==0 
2e450 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  ){.        appen
2e460 64 54 65 78 74 28 26 73 2c 20 22 53 45 4c 45 43  dText(&s, "SELEC
2e470 54 20 6e 61 6d 65 20 46 52 4f 4d 20 22 2c 20 30  T name FROM ", 0
2e480 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
2e490 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
2e4a0 78 74 28 26 73 2c 20 22 53 45 4c 45 43 54 20 22  xt(&s, "SELECT "
2e4b0 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70  , 0);.        ap
2e4c0 70 65 6e 64 54 65 78 74 28 26 73 2c 20 7a 44 62  pendText(&s, zDb
2e4d0 4e 61 6d 65 2c 20 27 5c 27 27 29 3b 0a 20 20 20  Name, '\'');.   
2e4e0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2e4f0 26 73 2c 20 22 7c 7c 27 2e 27 7c 7c 6e 61 6d 65  &s, "||'.'||name
2e500 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20   FROM ", 0);.   
2e510 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e     }.      appen
2e520 64 54 65 78 74 28 26 73 2c 20 7a 44 62 4e 61 6d  dText(&s, zDbNam
2e530 65 2c 20 27 22 27 29 3b 0a 20 20 20 20 20 20 61  e, '"');.      a
2e540 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20 22 2e  ppendText(&s, ".
2e550 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 2c  sqlite_master ",
2e560 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63   0);.      if( c
2e570 3d 3d 27 74 27 20 29 7b 0a 20 20 20 20 20 20 20  =='t' ){.       
2e580 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 22   appendText(&s,"
2e590 20 57 48 45 52 45 20 74 79 70 65 20 49 4e 20 28   WHERE type IN (
2e5a0 27 74 61 62 6c 65 27 2c 27 76 69 65 77 27 29 22  'table','view')"
2e5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e5c0 20 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 6e         "   AND n
2e5d0 61 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71  ame NOT LIKE 'sq
2e5e0 6c 69 74 65 5f 25 27 22 0a 20 20 20 20 20 20 20  lite_%'".       
2e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2e600 20 20 20 41 4e 44 20 6e 61 6d 65 20 4c 49 4b 45     AND name LIKE
2e610 20 3f 31 22 2c 20 30 29 3b 0a 20 20 20 20 20 20   ?1", 0);.      
2e620 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61  }else{.        a
2e630 70 70 65 6e 64 54 65 78 74 28 26 73 2c 22 20 57  ppendText(&s," W
2e640 48 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65 78  HERE type='index
2e650 27 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  '".             
2e660 20 20 20 20 20 20 20 20 20 22 20 20 20 41 4e 44           "   AND
2e670 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 3f   tbl_name LIKE ?
2e680 31 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a  1", 0);.      }.
2e690 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73      }.    rc = s
2e6a0 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
2e6b0 70 53 74 6d 74 29 3b 0a 20 20 20 20 61 70 70 65  pStmt);.    appe
2e6c0 6e 64 54 65 78 74 28 26 73 2c 20 22 20 4f 52 44  ndText(&s, " ORD
2e6d0 45 52 20 42 59 20 31 22 2c 20 30 29 3b 0a 20 20  ER BY 1", 0);.  
2e6e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
2e6f0 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
2e700 20 73 2e 7a 2c 20 2d 31 2c 20 26 70 53 74 6d 74   s.z, -1, &pStmt
2e710 2c 20 30 29 3b 0a 20 20 20 20 66 72 65 65 54 65  , 0);.    freeTe
2e720 78 74 28 26 73 29 3b 0a 20 20 20 20 69 66 28 20  xt(&s);.    if( 
2e730 72 63 20 29 20 72 65 74 75 72 6e 20 73 68 65 6c  rc ) return shel
2e740 6c 44 61 74 61 62 61 73 65 45 72 72 6f 72 28 70  lDatabaseError(p
2e750 2d 3e 64 62 29 3b 0a 0a 20 20 20 20 2f 2a 20 52  ->db);..    /* R
2e760 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  un the SQL state
2e770 6d 65 6e 74 20 70 72 65 70 61 72 65 64 20 62 79  ment prepared by
2e780 20 74 68 65 20 61 62 6f 76 65 20 62 6c 6f 63 6b   the above block
2e790 2e 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  . Store the resu
2e7a0 6c 74 73 0a 20 20 20 20 2a 2a 20 61 73 20 61 6e  lts.    ** as an
2e7b0 20 61 72 72 61 79 20 6f 66 20 6e 75 6c 2d 74 65   array of nul-te
2e7c0 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67 73  rminated strings
2e7d0 20 69 6e 20 61 7a 52 65 73 75 6c 74 5b 5d 2e 20   in azResult[]. 
2e7e0 20 2a 2f 0a 20 20 20 20 6e 52 6f 77 20 3d 20 6e   */.    nRow = n
2e7f0 41 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 61  Alloc = 0;.    a
2e800 7a 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 20  zResult = 0;.   
2e810 20 69 66 28 20 6e 41 72 67 3e 31 20 29 7b 0a 20   if( nArg>1 ){. 
2e820 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
2e830 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 2c  d_text(pStmt, 1,
2e840 20 61 7a 41 72 67 5b 31 5d 2c 20 2d 31 2c 20 53   azArg[1], -1, S
2e850 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
2e860 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2e870 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
2e880 74 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20 22  text(pStmt, 1, "
2e890 25 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53  %", -1, SQLITE_S
2e8a0 54 41 54 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20  TATIC);.    }.  
2e8b0 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65 33    while( sqlite3
2e8c0 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51  _step(pStmt)==SQ
2e8d0 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
2e8e0 20 20 69 66 28 20 6e 52 6f 77 3e 3d 6e 41 6c 6c    if( nRow>=nAll
2e8f0 6f 63 20 29 7b 0a 20 20 20 20 20 20 20 20 63 68  oc ){.        ch
2e900 61 72 20 2a 2a 61 7a 4e 65 77 3b 0a 20 20 20 20  ar **azNew;.    
2e910 20 20 20 20 69 6e 74 20 6e 32 20 3d 20 6e 41 6c      int n2 = nAl
2e920 6c 6f 63 2a 32 20 2b 20 31 30 3b 0a 20 20 20 20  loc*2 + 10;.    
2e930 20 20 20 20 61 7a 4e 65 77 20 3d 20 73 71 6c 69      azNew = sqli
2e940 74 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 61 7a  te3_realloc64(az
2e950 52 65 73 75 6c 74 2c 20 73 69 7a 65 6f 66 28 61  Result, sizeof(a
2e960 7a 52 65 73 75 6c 74 5b 30 5d 29 2a 6e 32 29 3b  zResult[0])*n2);
2e970 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 7a 4e  .        if( azN
2e980 65 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ew==0 ){.       
2e990 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d     rc = shellNom
2e9a0 65 6d 45 72 72 6f 72 28 29 3b 0a 20 20 20 20 20  emError();.     
2e9b0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2e9c0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 41      }.        nA
2e9d0 6c 6c 6f 63 20 3d 20 6e 32 3b 0a 20 20 20 20 20  lloc = n2;.     
2e9e0 20 20 20 61 7a 52 65 73 75 6c 74 20 3d 20 61 7a     azResult = az
2e9f0 4e 65 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  New;.      }.   
2ea00 20 20 20 61 7a 52 65 73 75 6c 74 5b 6e 52 6f 77     azResult[nRow
2ea10 5d 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  ] = sqlite3_mpri
2ea20 6e 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74 65  ntf("%s", sqlite
2ea30 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
2ea40 74 6d 74 2c 20 30 29 29 3b 0a 20 20 20 20 20 20  tmt, 0));.      
2ea50 69 66 28 20 30 3d 3d 61 7a 52 65 73 75 6c 74 5b  if( 0==azResult[
2ea60 6e 52 6f 77 5d 20 29 7b 0a 20 20 20 20 20 20 20  nRow] ){.       
2ea70 20 72 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65 6d   rc = shellNomem
2ea80 45 72 72 6f 72 28 29 3b 0a 20 20 20 20 20 20 20  Error();.       
2ea90 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
2eaa0 20 20 20 20 20 20 6e 52 6f 77 2b 2b 3b 0a 20 20        nRow++;.  
2eab0 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69    }.    if( sqli
2eac0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
2ead0 6d 74 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  mt)!=SQLITE_OK )
2eae0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 68 65  {.      rc = she
2eaf0 6c 6c 44 61 74 61 62 61 73 65 45 72 72 6f 72 28  llDatabaseError(
2eb00 70 2d 3e 64 62 29 3b 0a 20 20 20 20 7d 0a 0a 20  p->db);.    }.. 
2eb10 20 20 20 2f 2a 20 50 72 65 74 74 79 2d 70 72 69     /* Pretty-pri
2eb20 6e 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  nt the contents 
2eb30 6f 66 20 61 72 72 61 79 20 61 7a 52 65 73 75 6c  of array azResul
2eb40 74 5b 5d 20 74 6f 20 74 68 65 20 6f 75 74 70 75  t[] to the outpu
2eb50 74 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 3d  t */.    if( rc=
2eb60 3d 30 20 26 26 20 6e 52 6f 77 3e 30 20 29 7b 0a  =0 && nRow>0 ){.
2eb70 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 2c 20 6d        int len, m
2eb80 61 78 6c 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20  axlen = 0;.     
2eb90 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 20 20 20   int i, j;.     
2eba0 20 69 6e 74 20 6e 50 72 69 6e 74 43 6f 6c 2c 20   int nPrintCol, 
2ebb0 6e 50 72 69 6e 74 52 6f 77 3b 0a 20 20 20 20 20  nPrintRow;.     
2ebc0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 52 6f 77   for(i=0; i<nRow
2ebd0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
2ebe0 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 61  len = strlen30(a
2ebf0 7a 52 65 73 75 6c 74 5b 69 5d 29 3b 0a 20 20 20  zResult[i]);.   
2ec00 20 20 20 20 20 69 66 28 20 6c 65 6e 3e 6d 61 78       if( len>max
2ec10 6c 65 6e 20 29 20 6d 61 78 6c 65 6e 20 3d 20 6c  len ) maxlen = l
2ec20 65 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  en;.      }.    
2ec30 20 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20 38 30    nPrintCol = 80
2ec40 2f 28 6d 61 78 6c 65 6e 2b 32 29 3b 0a 20 20 20  /(maxlen+2);.   
2ec50 20 20 20 69 66 28 20 6e 50 72 69 6e 74 43 6f 6c     if( nPrintCol
2ec60 3c 31 20 29 20 6e 50 72 69 6e 74 43 6f 6c 20 3d  <1 ) nPrintCol =
2ec70 20 31 3b 0a 20 20 20 20 20 20 6e 50 72 69 6e 74   1;.      nPrint
2ec80 52 6f 77 20 3d 20 28 6e 52 6f 77 20 2b 20 6e 50  Row = (nRow + nP
2ec90 72 69 6e 74 43 6f 6c 20 2d 20 31 29 2f 6e 50 72  rintCol - 1)/nPr
2eca0 69 6e 74 43 6f 6c 3b 0a 20 20 20 20 20 20 66 6f  intCol;.      fo
2ecb0 72 28 69 3d 30 3b 20 69 3c 6e 50 72 69 6e 74 52  r(i=0; i<nPrintR
2ecc0 6f 77 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ow; i++){.      
2ecd0 20 20 66 6f 72 28 6a 3d 69 3b 20 6a 3c 6e 52 6f    for(j=i; j<nRo
2ece0 77 3b 20 6a 2b 3d 6e 50 72 69 6e 74 52 6f 77 29  w; j+=nPrintRow)
2ecf0 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72  {.          char
2ed00 20 2a 7a 53 70 20 3d 20 6a 3c 6e 50 72 69 6e 74   *zSp = j<nPrint
2ed10 52 6f 77 20 3f 20 22 22 20 3a 20 22 20 20 22 3b  Row ? "" : "  ";
2ed20 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
2ed30 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2ed40 25 73 25 2d 2a 73 22 2c 20 7a 53 70 2c 20 6d 61  %s%-*s", zSp, ma
2ed50 78 6c 65 6e 2c 0a 20 20 20 20 20 20 20 20 20 20  xlen,.          
2ed60 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 52 65              azRe
2ed70 73 75 6c 74 5b 6a 5d 20 3f 20 61 7a 52 65 73 75  sult[j] ? azResu
2ed80 6c 74 5b 6a 5d 3a 22 22 29 3b 0a 20 20 20 20 20  lt[j]:"");.     
2ed90 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61 77     }.        raw
2eda0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2edb0 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  "\n");.      }. 
2edc0 20 20 20 7d 0a 0a 20 20 20 20 66 6f 72 28 69 69     }..    for(ii
2edd0 3d 30 3b 20 69 69 3c 6e 52 6f 77 3b 20 69 69 2b  =0; ii<nRow; ii+
2ede0 2b 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  +) sqlite3_free(
2edf0 61 7a 52 65 73 75 6c 74 5b 69 69 5d 29 3b 0a 20  azResult[ii]);. 
2ee00 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2ee10 61 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d 65 6c  azResult);.  }el
2ee20 73 65 0a 0a 20 20 2f 2a 20 42 65 67 69 6e 20 72  se..  /* Begin r
2ee30 65 64 69 72 65 63 74 69 6e 67 20 6f 75 74 70 75  edirecting outpu
2ee40 74 20 74 6f 20 74 68 65 20 66 69 6c 65 20 22 74  t to the file "t
2ee50 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 22  estcase-out.txt"
2ee60 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 74 27   */.  if( c=='t'
2ee70 20 26 26 20 73 74 72 63 6d 70 28 61 7a 41 72 67   && strcmp(azArg
2ee80 5b 30 5d 2c 22 74 65 73 74 63 61 73 65 22 29 3d  [0],"testcase")=
2ee90 3d 30 20 29 7b 0a 20 20 20 20 6f 75 74 70 75 74  =0 ){.    output
2eea0 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 70  _reset(p);.    p
2eeb0 2d 3e 6f 75 74 20 3d 20 6f 75 74 70 75 74 5f 66  ->out = output_f
2eec0 69 6c 65 5f 6f 70 65 6e 28 22 74 65 73 74 63 61  ile_open("testca
2eed0 73 65 2d 6f 75 74 2e 74 78 74 22 29 3b 0a 20 20  se-out.txt");.  
2eee0 20 20 69 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20    if( p->out==0 
2eef0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
2ef00 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
2ef10 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  or: cannot open 
2ef20 27 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78  'testcase-out.tx
2ef30 74 27 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20  t'\n");.    }.  
2ef40 20 20 69 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b    if( nArg>=2 ){
2ef50 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
2ef60 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
2ef70 2d 3e 7a 54 65 73 74 63 61 73 65 29 2c 20 70 2d  ->zTestcase), p-
2ef80 3e 7a 54 65 73 74 63 61 73 65 2c 20 22 25 73 22  >zTestcase, "%s"
2ef90 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
2efa0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
2efb0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
2efc0 69 7a 65 6f 66 28 70 2d 3e 7a 54 65 73 74 63 61  izeof(p->zTestca
2efd0 73 65 29 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73  se), p->zTestcas
2efe0 65 2c 20 22 3f 22 29 3b 0a 20 20 20 20 7d 0a 20  e, "?");.    }. 
2eff0 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65 66 20   }else..#ifndef 
2f000 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2f010 45 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26  E.  if( c=='t' &
2f020 26 20 6e 3e 3d 38 20 26 26 20 73 74 72 6e 63 6d  & n>=8 && strncm
2f030 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 65 73  p(azArg[0], "tes
2f040 74 63 74 72 6c 22 2c 20 6e 29 3d 3d 30 20 29 7b  tctrl", n)==0 ){
2f050 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
2f060 74 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20  t struct {.     
2f070 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
2f080 74 72 6c 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61  trlName;   /* Na
2f090 6d 65 20 6f 66 20 61 20 74 65 73 74 2d 63 6f 6e  me of a test-con
2f0a0 74 72 6f 6c 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20  trol option */. 
2f0b0 20 20 20 20 20 20 69 6e 74 20 63 74 72 6c 43 6f        int ctrlCo
2f0c0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  de;            /
2f0d0 2a 20 49 6e 74 65 67 65 72 20 63 6f 64 65 20 66  * Integer code f
2f0e0 6f 72 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 2a  or that option *
2f0f0 2f 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  /.       const c
2f100 68 61 72 20 2a 7a 55 73 61 67 65 3b 20 20 20 20  har *zUsage;    
2f110 20 20 2f 2a 20 55 73 61 67 65 20 6e 6f 74 65 73    /* Usage notes
2f120 20 2a 2f 0a 20 20 20 20 7d 20 61 43 74 72 6c 5b   */.    } aCtrl[
2f130 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 61  ] = {.      { "a
2f140 6c 77 61 79 73 22 2c 20 20 20 20 20 20 20 20 20  lways",         
2f150 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43      SQLITE_TESTC
2f160 54 52 4c 5f 41 4c 57 41 59 53 2c 20 20 20 20 20  TRL_ALWAYS,     
2f170 20 20 20 22 42 4f 4f 4c 45 41 4e 22 20 20 20 20     "BOOLEAN"    
2f180 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
2f190 20 7b 20 22 61 73 73 65 72 74 22 2c 20 20 20 20   { "assert",    
2f1a0 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
2f1b0 54 45 53 54 43 54 52 4c 5f 41 53 53 45 52 54 2c  TESTCTRL_ASSERT,
2f1c0 20 20 20 20 20 20 20 20 22 42 4f 4f 4c 45 41 4e          "BOOLEAN
2f1d0 22 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  "            },.
2f1e0 20 20 20 20 2f 2a 7b 20 22 62 65 6e 69 67 6e 5f      /*{ "benign_
2f1f0 6d 61 6c 6c 6f 63 5f 68 6f 6f 6b 73 22 2c 53 51  malloc_hooks",SQ
2f200 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 42 45  LITE_TESTCTRL_BE
2f210 4e 49 47 4e 5f 4d 41 4c 4c 4f 43 5f 48 4f 4f 4b  NIGN_MALLOC_HOOK
2f220 53 2c 20 22 22 20 20 20 20 20 20 20 20 20 20 7d  S, ""          }
2f230 2c 2a 2f 0a 20 20 20 20 2f 2a 7b 20 22 62 69 74  ,*/.    /*{ "bit
2f240 76 65 63 5f 74 65 73 74 22 2c 20 20 20 20 20 20  vec_test",      
2f250 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52    SQLITE_TESTCTR
2f260 4c 5f 42 49 54 56 45 43 5f 54 45 53 54 2c 20 20  L_BITVEC_TEST,  
2f270 20 22 22 20 20 20 20 20 20 20 20 20 20 20 20 20   ""             
2f280 20 20 20 7d 2c 2a 2f 0a 20 20 20 20 20 20 7b 20     },*/.      { 
2f290 22 62 79 74 65 6f 72 64 65 72 22 2c 20 20 20 20  "byteorder",    
2f2a0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53        SQLITE_TES
2f2b0 54 43 54 52 4c 5f 42 59 54 45 4f 52 44 45 52 2c  TCTRL_BYTEORDER,
2f2c0 20 20 20 20 20 22 22 20 20 20 20 20 20 20 20 20       ""         
2f2d0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2f2e0 20 2f 2a 7b 20 22 66 61 75 6c 74 5f 69 6e 73 74   /*{ "fault_inst
2f2f0 61 6c 6c 22 2c 20 20 20 20 20 20 53 51 4c 49 54  all",      SQLIT
2f300 45 5f 54 45 53 54 43 54 52 4c 5f 46 41 55 4c 54  E_TESTCTRL_FAULT
2f310 5f 49 4e 53 54 41 4c 4c 2c 20 22 22 20 20 20 20  _INSTALL, ""    
2f320 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2a              }, *
2f330 2f 0a 20 20 20 20 20 20 7b 20 22 69 6d 70 6f 73  /.      { "impos
2f340 74 65 72 22 2c 20 20 20 20 20 20 20 20 20 20 20  ter",           
2f350 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2f360 49 4d 50 4f 53 54 45 52 2c 20 20 20 22 53 43 48  IMPOSTER,   "SCH
2f370 45 4d 41 20 4f 4e 2f 4f 46 46 20 52 4f 4f 54 50  EMA ON/OFF ROOTP
2f380 41 47 45 22 7d 2c 0a 23 69 66 64 65 66 20 53 51  AGE"},.#ifdef SQ
2f390 4c 49 54 45 5f 4e 5f 4b 45 59 57 4f 52 44 0a 20  LITE_N_KEYWORD. 
2f3a0 20 20 20 20 20 7b 20 22 69 73 6b 65 79 77 6f 72       { "iskeywor
2f3b0 64 22 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c  d",          SQL
2f3c0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 53 4b  ITE_TESTCTRL_ISK
2f3d0 45 59 57 4f 52 44 2c 20 20 20 20 20 22 49 44 45  EYWORD,     "IDE
2f3e0 4e 54 49 46 49 45 52 22 20 20 20 20 20 20 20 20  NTIFIER"        
2f3f0 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20   },.#endif.     
2f400 20 7b 20 22 6c 6f 63 61 6c 74 69 6d 65 5f 66 61   { "localtime_fa
2f410 75 6c 74 22 2c 20 20 20 20 53 51 4c 49 54 45 5f  ult",    SQLITE_
2f420 54 45 53 54 43 54 52 4c 5f 4c 4f 43 41 4c 54 49  TESTCTRL_LOCALTI
2f430 4d 45 5f 46 41 55 4c 54 2c 22 42 4f 4f 4c 45 41  ME_FAULT,"BOOLEA
2f440 4e 22 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  N"           },.
2f450 20 20 20 20 20 20 7b 20 22 6e 65 76 65 72 5f 63        { "never_c
2f460 6f 72 72 75 70 74 22 2c 20 20 20 20 20 20 53 51  orrupt",      SQ
2f470 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e 45  LITE_TESTCTRL_NE
2f480 56 45 52 5f 43 4f 52 52 55 50 54 2c 20 22 42 4f  VER_CORRUPT, "BO
2f490 4f 4c 45 41 4e 22 20 20 20 20 20 20 20 20 20 20  OLEAN"          
2f4a0 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 6f 70    },.      { "op
2f4b0 74 69 6d 69 7a 61 74 69 6f 6e 73 22 2c 20 20 20  timizations",   
2f4c0 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54     SQLITE_TESTCT
2f4d0 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53  RL_OPTIMIZATIONS
2f4e0 2c 20 22 44 49 53 41 42 4c 45 2d 4d 41 53 4b 22  , "DISABLE-MASK"
2f4f0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
2f500 7b 20 22 70 65 6e 64 69 6e 67 5f 62 79 74 65 22  { "pending_byte"
2f510 2c 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54  ,       SQLITE_T
2f520 45 53 54 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f  ESTCTRL_PENDING_
2f530 42 59 54 45 2c 20 20 22 4f 46 46 53 45 54 20 20  BYTE,  "OFFSET  
2f540 22 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  "           },. 
2f550 20 20 20 20 20 7b 20 22 70 72 6e 67 5f 72 65 73       { "prng_res
2f560 65 74 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c  et",         SQL
2f570 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e  ITE_TESTCTRL_PRN
2f580 47 5f 52 45 53 45 54 2c 20 20 20 20 22 22 20 20  G_RESET,    ""  
2f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5a0 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 70 72 6e   },.      { "prn
2f5b0 67 5f 72 65 73 74 6f 72 65 22 2c 20 20 20 20 20  g_restore",     
2f5c0 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52    SQLITE_TESTCTR
2f5d0 4c 5f 50 52 4e 47 5f 52 45 53 54 4f 52 45 2c 20  L_PRNG_RESTORE, 
2f5e0 20 22 22 20 20 20 20 20 20 20 20 20 20 20 20 20   ""             
2f5f0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
2f600 20 22 70 72 6e 67 5f 73 61 76 65 22 2c 20 20 20   "prng_save",   
2f610 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45         SQLITE_TE
2f620 53 54 43 54 52 4c 5f 50 52 4e 47 5f 53 41 56 45  STCTRL_PRNG_SAVE
2f630 2c 20 20 20 20 20 22 22 20 20 20 20 20 20 20 20  ,     ""        
2f640 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
2f650 20 20 20 20 7b 20 22 72 65 73 65 72 76 65 22 2c      { "reserve",
2f660 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
2f670 54 45 5f 54 45 53 54 43 54 52 4c 5f 52 45 53 45  TE_TESTCTRL_RESE
2f680 52 56 45 2c 20 20 20 20 20 20 20 22 42 59 54 45  RVE,       "BYTE
2f690 53 2d 4f 46 2d 52 45 53 45 52 56 45 22 20 20 20  S-OF-RESERVE"   
2f6a0 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e  },.    };.    in
2f6b0 74 20 74 65 73 74 63 74 72 6c 20 3d 20 2d 31 3b  t testctrl = -1;
2f6c0 0a 20 20 20 20 69 6e 74 20 69 43 74 72 6c 20 3d  .    int iCtrl =
2f6d0 20 2d 31 3b 0a 20 20 20 20 69 6e 74 20 72 63 32   -1;.    int rc2
2f6e0 20 3d 20 30 3b 20 20 20 20 2f 2a 20 30 3a 20 75   = 0;    /* 0: u
2f6f0 73 61 67 65 2e 20 20 31 3a 20 25 64 20 20 32 3a  sage.  1: %d  2:
2f700 20 25 78 20 20 33 3a 20 6e 6f 2d 6f 75 74 70 75   %x  3: no-outpu
2f710 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 73 4f  t */.    int isO
2f720 6b 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 69  k = 0;.    int i
2f730 2c 20 6e 32 3b 0a 20 20 20 20 63 6f 6e 73 74 20  , n2;.    const 
2f740 63 68 61 72 20 2a 7a 43 6d 64 20 3d 20 30 3b 0a  char *zCmd = 0;.
2f750 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
2f760 30 29 3b 0a 20 20 20 20 7a 43 6d 64 20 3d 20 6e  0);.    zCmd = n
2f770 41 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31  Arg>=2 ? azArg[1
2f780 5d 20 3a 20 22 68 65 6c 70 22 3b 0a 0a 20 20 20  ] : "help";..   
2f790 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74   /* The argument
2f7a0 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20   can optionally 
2f7b0 62 65 67 69 6e 20 77 69 74 68 20 22 2d 22 20 6f  begin with "-" o
2f7c0 72 20 22 2d 2d 22 20 2a 2f 0a 20 20 20 20 69 66  r "--" */.    if
2f7d0 28 20 7a 43 6d 64 5b 30 5d 3d 3d 27 2d 27 20 26  ( zCmd[0]=='-' &
2f7e0 26 20 7a 43 6d 64 5b 31 5d 20 29 7b 0a 20 20 20  & zCmd[1] ){.   
2f7f0 20 20 20 7a 43 6d 64 2b 2b 3b 0a 20 20 20 20 20     zCmd++;.     
2f800 20 69 66 28 20 7a 43 6d 64 5b 30 5d 3d 3d 27 2d   if( zCmd[0]=='-
2f810 27 20 26 26 20 7a 43 6d 64 5b 31 5d 20 29 20 7a  ' && zCmd[1] ) z
2f820 43 6d 64 2b 2b 3b 0a 20 20 20 20 7d 0a 0a 20 20  Cmd++;.    }..  
2f830 20 20 2f 2a 20 2d 2d 68 65 6c 70 20 6c 69 73 74    /* --help list
2f840 73 20 61 6c 6c 20 74 65 73 74 2d 63 6f 6e 74 72  s all test-contr
2f850 6f 6c 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 73  ols */.    if( s
2f860 74 72 63 6d 70 28 7a 43 6d 64 2c 22 68 65 6c 70  trcmp(zCmd,"help
2f870 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  ")==0 ){.      u
2f880 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
2f890 74 2c 20 22 41 76 61 69 6c 61 62 6c 65 20 74 65  t, "Available te
2f8a0 73 74 2d 63 6f 6e 74 72 6f 6c 73 3a 5c 6e 22 29  st-controls:\n")
2f8b0 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
2f8c0 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61 43 74   i<ArraySize(aCt
2f8d0 72 6c 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  rl); i++){.     
2f8e0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
2f8f0 2d 3e 6f 75 74 2c 20 22 20 20 2e 74 65 73 74 63  ->out, "  .testc
2f900 74 72 6c 20 25 73 20 25 73 5c 6e 22 2c 0a 20 20  trl %s %s\n",.  
2f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f920 20 20 61 43 74 72 6c 5b 69 5d 2e 7a 43 74 72 6c    aCtrl[i].zCtrl
2f930 4e 61 6d 65 2c 20 61 43 74 72 6c 5b 69 5d 2e 7a  Name, aCtrl[i].z
2f940 55 73 61 67 65 29 3b 0a 20 20 20 20 20 20 7d 0a  Usage);.      }.
2f950 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2f960 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
2f970 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
2f980 7d 0a 0a 20 20 20 20 2f 2a 20 63 6f 6e 76 65 72  }..    /* conver
2f990 74 20 74 65 73 74 63 74 72 6c 20 74 65 78 74 20  t testctrl text 
2f9a0 6f 70 74 69 6f 6e 20 74 6f 20 76 61 6c 75 65 2e  option to value.
2f9b0 20 61 6c 6c 6f 77 20 61 6e 79 20 75 6e 69 71 75   allow any uniqu
2f9c0 65 20 70 72 65 66 69 78 0a 20 20 20 20 2a 2a 20  e prefix.    ** 
2f9d0 6f 66 20 74 68 65 20 6f 70 74 69 6f 6e 20 6e 61  of the option na
2f9e0 6d 65 2c 20 6f 72 20 61 20 6e 75 6d 65 72 69 63  me, or a numeric
2f9f0 61 6c 20 76 61 6c 75 65 2e 20 2a 2f 0a 20 20 20  al value. */.   
2fa00 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a   n2 = strlen30(z
2fa10 43 6d 64 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Cmd);.    for(i=
2fa20 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61  0; i<ArraySize(a
2fa30 43 74 72 6c 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  Ctrl); i++){.   
2fa40 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a     if( strncmp(z
2fa50 43 6d 64 2c 20 61 43 74 72 6c 5b 69 5d 2e 7a 43  Cmd, aCtrl[i].zC
2fa60 74 72 6c 4e 61 6d 65 2c 20 6e 32 29 3d 3d 30 20  trlName, n2)==0 
2fa70 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 74  ){.        if( t
2fa80 65 73 74 63 74 72 6c 3c 30 20 29 7b 0a 20 20 20  estctrl<0 ){.   
2fa90 20 20 20 20 20 20 20 74 65 73 74 63 74 72 6c 20         testctrl 
2faa0 3d 20 61 43 74 72 6c 5b 69 5d 2e 63 74 72 6c 43  = aCtrl[i].ctrlC
2fab0 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69  ode;.          i
2fac0 43 74 72 6c 20 3d 20 69 3b 0a 20 20 20 20 20 20  Ctrl = i;.      
2fad0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2fae0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
2faf0 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 61  tderr, "Error: a
2fb00 6d 62 69 67 75 6f 75 73 20 74 65 73 74 2d 63 6f  mbiguous test-co
2fb10 6e 74 72 6f 6c 3a 20 5c 22 25 73 5c 22 5c 6e 22  ntrol: \"%s\"\n"
2fb20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2fb40 55 73 65 20 5c 22 2e 74 65 73 74 63 74 72 6c 20  Use \".testctrl 
2fb50 2d 2d 68 65 6c 70 5c 22 20 66 6f 72 20 68 65 6c  --help\" for hel
2fb60 70 5c 6e 22 2c 20 7a 43 6d 64 29 3b 0a 20 20 20  p\n", zCmd);.   
2fb70 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2fb80 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65           goto me
2fb90 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
2fba0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2fbb0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
2fbc0 20 74 65 73 74 63 74 72 6c 3c 30 20 29 7b 0a 20   testctrl<0 ){. 
2fbd0 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2fbe0 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
2fbf0 75 6e 6b 6e 6f 77 6e 20 74 65 73 74 2d 63 6f 6e  unknown test-con
2fc00 74 72 6f 6c 3a 20 25 73 5c 6e 22 0a 20 20 20 20  trol: %s\n".    
2fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc20 20 20 20 20 20 22 55 73 65 20 5c 22 2e 74 65 73       "Use \".tes
2fc30 74 63 74 72 6c 20 2d 2d 68 65 6c 70 5c 22 20 66  tctrl --help\" f
2fc40 6f 72 20 68 65 6c 70 5c 6e 22 2c 20 7a 43 6d 64  or help\n", zCmd
2fc50 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2fc60 20 20 20 20 73 77 69 74 63 68 28 74 65 73 74 63      switch(testc
2fc70 74 72 6c 29 7b 0a 0a 20 20 20 20 20 20 20 20 2f  trl){..        /
2fc80 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
2fc90 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20 64 62 2c 20  ontrol(int, db, 
2fca0 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20  int) */.        
2fcb0 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
2fcc0 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CTRL_OPTIMIZATIO
2fcd0 4e 53 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65  NS:.        case
2fce0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2fcf0 5f 52 45 53 45 52 56 45 3a 0a 20 20 20 20 20 20  _RESERVE:.      
2fd00 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 33 20      if( nArg==3 
2fd10 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
2fd20 6e 74 20 6f 70 74 20 3d 20 28 69 6e 74 29 73 74  nt opt = (int)st
2fd30 72 74 6f 6c 28 61 7a 41 72 67 5b 32 5d 2c 20 30  rtol(azArg[2], 0
2fd40 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
2fd50 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f    rc2 = sqlite3_
2fd60 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73  test_control(tes
2fd70 74 63 74 72 6c 2c 20 70 2d 3e 64 62 2c 20 6f 70  tctrl, p->db, op
2fd80 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t);.            
2fd90 69 73 4f 6b 20 3d 20 33 3b 0a 20 20 20 20 20 20  isOk = 3;.      
2fda0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
2fdb0 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20  break;..        
2fdc0 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  /* sqlite3_test_
2fdd0 63 6f 6e 74 72 6f 6c 28 69 6e 74 29 20 2a 2f 0a  control(int) */.
2fde0 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
2fdf0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e  ITE_TESTCTRL_PRN
2fe00 47 5f 53 41 56 45 3a 0a 20 20 20 20 20 20 20 20  G_SAVE:.        
2fe10 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
2fe20 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53 54 4f 52  CTRL_PRNG_RESTOR
2fe30 45 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  E:.        case 
2fe40 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2fe50 50 52 4e 47 5f 52 45 53 45 54 3a 0a 20 20 20 20  PRNG_RESET:.    
2fe60 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
2fe70 54 45 53 54 43 54 52 4c 5f 42 59 54 45 4f 52 44  TESTCTRL_BYTEORD
2fe80 45 52 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66  ER:.          if
2fe90 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20  ( nArg==2 ){.   
2fea0 20 20 20 20 20 20 20 20 20 72 63 32 20 3d 20 73           rc2 = s
2feb0 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
2fec0 72 6f 6c 28 74 65 73 74 63 74 72 6c 29 3b 0a 20  rol(testctrl);. 
2fed0 20 20 20 20 20 20 20 20 20 20 20 69 73 4f 6b 20             isOk 
2fee0 3d 20 74 65 73 74 63 74 72 6c 3d 3d 53 51 4c 49  = testctrl==SQLI
2fef0 54 45 5f 54 45 53 54 43 54 52 4c 5f 42 59 54 45  TE_TESTCTRL_BYTE
2ff00 4f 52 44 45 52 20 3f 20 31 20 3a 20 33 3b 0a 20  ORDER ? 1 : 3;. 
2ff10 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2ff20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20       break;..   
2ff30 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f       /* sqlite3_
2ff40 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74  test_control(int
2ff50 2c 20 75 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20  , uint) */.     
2ff60 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
2ff70 45 53 54 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f  ESTCTRL_PENDING_
2ff80 42 59 54 45 3a 0a 20 20 20 20 20 20 20 20 20 20  BYTE:.          
2ff90 69 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20  if( nArg==3 ){. 
2ffa0 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 69 67             unsig
2ffb0 6e 65 64 20 69 6e 74 20 6f 70 74 20 3d 20 28 75  ned int opt = (u
2ffc0 6e 73 69 67 6e 65 64 20 69 6e 74 29 69 6e 74 65  nsigned int)inte
2ffd0 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 32  gerValue(azArg[2
2ffe0 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
2fff0 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65  rc2 = sqlite3_te
30000 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63  st_control(testc
30010 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20  trl, opt);.     
30020 20 20 20 20 20 20 20 69 73 4f 6b 20 3d 20 33 3b         isOk = 3;
30030 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
30040 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20         break;.. 
30050 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65         /* sqlite
30060 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69  3_test_control(i
30070 6e 74 2c 20 69 6e 74 29 20 2a 2f 0a 20 20 20 20  nt, int) */.    
30080 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
30090 54 45 53 54 43 54 52 4c 5f 41 53 53 45 52 54 3a  TESTCTRL_ASSERT:
300a0 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51  .        case SQ
300b0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 4c  LITE_TESTCTRL_AL
300c0 57 41 59 53 3a 0a 20 20 20 20 20 20 20 20 20 20  WAYS:.          
300d0 69 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20  if( nArg==3 ){. 
300e0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f             int o
300f0 70 74 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75  pt = booleanValu
30100 65 28 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20  e(azArg[2]);.   
30110 20 20 20 20 20 20 20 20 20 72 63 32 20 3d 20 73           rc2 = s
30120 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
30130 72 6f 6c 28 74 65 73 74 63 74 72 6c 2c 20 6f 70  rol(testctrl, op
30140 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t);.            
30150 69 73 4f 6b 20 3d 20 31 3b 0a 20 20 20 20 20 20  isOk = 1;.      
30160 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
30170 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20  break;..        
30180 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  /* sqlite3_test_
30190 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20 69 6e 74  control(int, int
301a0 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 61 73  ) */.        cas
301b0 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  e SQLITE_TESTCTR
301c0 4c 5f 4c 4f 43 41 4c 54 49 4d 45 5f 46 41 55 4c  L_LOCALTIME_FAUL
301d0 54 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  T:.        case 
301e0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
301f0 4e 45 56 45 52 5f 43 4f 52 52 55 50 54 3a 0a 20  NEVER_CORRUPT:. 
30200 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 41 72           if( nAr
30210 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20  g==3 ){.        
30220 20 20 20 20 69 6e 74 20 6f 70 74 20 3d 20 62 6f      int opt = bo
30230 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
30240 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [2]);.          
30250 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f    rc2 = sqlite3_
30260 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73  test_control(tes
30270 74 63 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20  tctrl, opt);.   
30280 20 20 20 20 20 20 20 20 20 69 73 4f 6b 20 3d 20           isOk = 
30290 33 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  3;.          }. 
302a0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
302b0 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69  .        /* sqli
302c0 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
302d0 28 69 6e 74 2c 20 63 68 61 72 20 2a 29 20 2a 2f  (int, char *) */
302e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4e  .#ifdef SQLITE_N
302f0 5f 4b 45 59 57 4f 52 44 0a 20 20 20 20 20 20 20  _KEYWORD.       
30300 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53   case SQLITE_TES
30310 54 43 54 52 4c 5f 49 53 4b 45 59 57 4f 52 44 3a  TCTRL_ISKEYWORD:
30320 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e  .          if( n
30330 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20  Arg==3 ){.      
30340 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
30350 20 2a 6f 70 74 20 3d 20 61 7a 41 72 67 5b 32 5d   *opt = azArg[2]
30360 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  ;.            rc
30370 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74  2 = sqlite3_test
30380 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74 72  _control(testctr
30390 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20 20 20  l, opt);.       
303a0 20 20 20 20 20 69 73 4f 6b 20 3d 20 31 3b 0a 20       isOk = 1;. 
303b0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
303c0 20 20 20 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64       break;.#end
303d0 69 66 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65  if..        case
303e0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
303f0 5f 49 4d 50 4f 53 54 45 52 3a 0a 20 20 20 20 20  _IMPOSTER:.     
30400 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 35       if( nArg==5
30410 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
30420 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65  rc2 = sqlite3_te
30430 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63  st_control(testc
30440 74 72 6c 2c 20 70 2d 3e 64 62 2c 0a 20 20 20 20  trl, p->db,.    
30450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30460 20 20 20 20 20 20 61 7a 41 72 67 5b 32 5d 2c 0a        azArg[2],.
30470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30480 20 20 20 20 20 20 20 20 20 20 69 6e 74 65 67 65            intege
30490 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 33 5d 29  rValue(azArg[3])
304a0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
304b0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 65              inte
304c0 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 34  gerValue(azArg[4
304d0 5d 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ]));.           
304e0 20 69 73 4f 6b 20 3d 20 33 3b 0a 20 20 20 20 20   isOk = 3;.     
304f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
30500 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
30510 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69 73      }.    if( is
30520 4f 6b 3d 3d 30 20 26 26 20 69 43 74 72 6c 3e 3d  Ok==0 && iCtrl>=
30530 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  0 ){.      utf8_
30540 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
30550 55 73 61 67 65 3a 20 2e 74 65 73 74 63 74 72 6c  Usage: .testctrl
30560 20 25 73 20 25 73 5c 6e 22 2c 20 7a 43 6d 64 2c   %s %s\n", zCmd,
30570 20 61 43 74 72 6c 5b 69 43 74 72 6c 5d 2e 7a 55   aCtrl[iCtrl].zU
30580 73 61 67 65 29 3b 0a 20 20 20 20 20 20 72 63 20  sage);.      rc 
30590 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 1;.    }else i
305a0 66 28 20 69 73 4f 6b 3d 3d 31 20 29 7b 0a 20 20  f( isOk==1 ){.  
305b0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
305c0 2d 3e 6f 75 74 2c 20 22 25 64 5c 6e 22 2c 20 72  ->out, "%d\n", r
305d0 63 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  c2);.    }else i
305e0 66 28 20 69 73 4f 6b 3d 3d 32 20 29 7b 0a 20 20  f( isOk==2 ){.  
305f0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
30600 2d 3e 6f 75 74 2c 20 22 30 78 25 30 38 78 5c 6e  ->out, "0x%08x\n
30610 22 2c 20 72 63 32 29 3b 0a 20 20 20 20 7d 0a 20  ", rc2);.    }. 
30620 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
30630 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
30640 5f 55 4e 54 45 53 54 41 42 4c 45 29 20 2a 2f 0a  _UNTESTABLE) */.
30650 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
30660 20 6e 3e 34 20 26 26 20 73 74 72 6e 63 6d 70 28   n>4 && strncmp(
30670 61 7a 41 72 67 5b 30 5d 2c 20 22 74 69 6d 65 6f  azArg[0], "timeo
30680 75 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ut", n)==0 ){.  
30690 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
306a0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73  .    sqlite3_bus
306b0 79 5f 74 69 6d 65 6f 75 74 28 70 2d 3e 64 62 2c  y_timeout(p->db,
306c0 20 6e 41 72 67 3e 3d 32 20 3f 20 28 69 6e 74 29   nArg>=2 ? (int)
306d0 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41  integerValue(azA
306e0 72 67 5b 31 5d 29 20 3a 20 30 29 3b 0a 20 20 7d  rg[1]) : 0);.  }
306f0 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
30700 74 27 20 26 26 20 6e 3e 3d 35 20 26 26 20 73 74  t' && n>=5 && st
30710 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
30720 22 74 69 6d 65 72 22 2c 20 6e 29 3d 3d 30 20 29  "timer", n)==0 )
30730 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d  {.    if( nArg==
30740 32 20 29 7b 0a 20 20 20 20 20 20 65 6e 61 62 6c  2 ){.      enabl
30750 65 54 69 6d 65 72 20 3d 20 62 6f 6f 6c 65 61 6e  eTimer = boolean
30760 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b  Value(azArg[1]);
30770 0a 20 20 20 20 20 20 69 66 28 20 65 6e 61 62 6c  .      if( enabl
30780 65 54 69 6d 65 72 20 26 26 20 21 48 41 53 5f 54  eTimer && !HAS_T
30790 49 4d 45 52 20 29 7b 0a 20 20 20 20 20 20 20 20  IMER ){.        
307a0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
307b0 72 2c 20 22 45 72 72 6f 72 3a 20 74 69 6d 65 72  r, "Error: timer
307c0 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f   not available o
307d0 6e 20 74 68 69 73 20 73 79 73 74 65 6d 2e 5c 6e  n this system.\n
307e0 22 29 3b 0a 20 20 20 20 20 20 20 20 65 6e 61 62  ");.        enab
307f0 6c 65 54 69 6d 65 72 20 3d 20 30 3b 0a 20 20 20  leTimer = 0;.   
30800 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
30810 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
30820 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
30830 20 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 5c 6e   .timer on|off\n
30840 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
30850 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
30860 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
30870 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
30880 5d 2c 20 22 74 72 61 63 65 22 2c 20 6e 29 3d 3d  ], "trace", n)==
30890 30 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62  0 ){.    open_db
308a0 28 70 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  (p, 0);.    if( 
308b0 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20  nArg!=2 ){.     
308c0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
308d0 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 74 72 61  rr, "Usage: .tra
308e0 63 65 20 46 49 4c 45 7c 6f 66 66 5c 6e 22 29 3b  ce FILE|off\n");
308f0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
30900 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
30910 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
30920 20 7d 0a 20 20 20 20 6f 75 74 70 75 74 5f 66 69   }.    output_fi
30930 6c 65 5f 63 6c 6f 73 65 28 70 2d 3e 74 72 61 63  le_close(p->trac
30940 65 4f 75 74 29 3b 0a 20 20 20 20 70 2d 3e 74 72  eOut);.    p->tr
30950 61 63 65 4f 75 74 20 3d 20 6f 75 74 70 75 74 5f  aceOut = output_
30960 66 69 6c 65 5f 6f 70 65 6e 28 61 7a 41 72 67 5b  file_open(azArg[
30970 31 5d 29 3b 0a 23 69 66 20 21 64 65 66 69 6e 65  1]);.#if !define
30980 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
30990 41 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  ACE) && !defined
309a0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f  (SQLITE_OMIT_FLO
309b0 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 20 20 20  ATING_POINT).   
309c0 20 69 66 28 20 70 2d 3e 74 72 61 63 65 4f 75 74   if( p->traceOut
309d0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
309e0 69 74 65 33 5f 74 72 61 63 65 5f 76 32 28 70 2d  ite3_trace_v2(p-
309f0 3e 64 62 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  >db, 0, 0, 0);. 
30a00 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
30a10 73 71 6c 69 74 65 33 5f 74 72 61 63 65 5f 76 32  sqlite3_trace_v2
30a20 28 70 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 54  (p->db, SQLITE_T
30a30 52 41 43 45 5f 53 54 4d 54 2c 20 73 71 6c 5f 74  RACE_STMT, sql_t
30a40 72 61 63 65 5f 63 61 6c 6c 62 61 63 6b 2c 70 2d  race_callback,p-
30a50 3e 74 72 61 63 65 4f 75 74 29 3b 0a 20 20 20 20  >traceOut);.    
30a60 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  }.#endif.  }else
30a70 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45  ..#if SQLITE_USE
30a80 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
30a90 0a 20 20 69 66 28 20 63 3d 3d 27 75 27 20 26 26  .  if( c=='u' &&
30aa0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
30ab0 5d 2c 20 22 75 73 65 72 22 2c 20 6e 29 3d 3d 30  ], "user", n)==0
30ac0 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
30ad0 3c 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  <2 ){.      raw_
30ae0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
30af0 55 73 61 67 65 3a 20 2e 75 73 65 72 20 53 55 42  Usage: .user SUB
30b00 43 4f 4d 4d 41 4e 44 20 2e 2e 2e 5c 6e 22 29 3b  COMMAND ...\n");
30b10 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
30b20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
30b30 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
30b40 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70   }.    open_db(p
30b50 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 73 74  , 0);.    if( st
30b60 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c  rcmp(azArg[1],"l
30b70 6f 67 69 6e 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ogin")==0 ){.   
30b80 20 20 20 69 66 28 20 6e 41 72 67 21 3d 34 20 29     if( nArg!=4 )
30b90 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
30ba0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
30bb0 61 67 65 3a 20 2e 75 73 65 72 20 6c 6f 67 69 6e  age: .user login
30bc0 20 55 53 45 52 20 50 41 53 53 57 4f 52 44 5c 6e   USER PASSWORD\n
30bd0 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ");.        rc =
30be0 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   1;.        goto
30bf0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
30c00 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  it;.      }.    
30c10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75    rc = sqlite3_u
30c20 73 65 72 5f 61 75 74 68 65 6e 74 69 63 61 74 65  ser_authenticate
30c30 28 70 2d 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d  (p->db, azArg[2]
30c40 2c 20 61 7a 41 72 67 5b 33 5d 2c 0a 20 20 20 20  , azArg[3],.    
30c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c70 28 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72  (int)strlen(azAr
30c80 67 5b 33 5d 29 29 3b 0a 20 20 20 20 20 20 69 66  g[3]));.      if
30c90 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20  ( rc ){.        
30ca0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
30cb0 72 72 2c 20 22 41 75 74 68 65 6e 74 69 63 61 74  rr, "Authenticat
30cc0 69 6f 6e 20 66 61 69 6c 65 64 20 66 6f 72 20 75  ion failed for u
30cd0 73 65 72 20 25 73 5c 6e 22 2c 20 61 7a 41 72 67  ser %s\n", azArg
30ce0 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 72 63  [2]);.        rc
30cf0 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 1;.      }.  
30d00 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
30d10 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 61 64 64  mp(azArg[1],"add
30d20 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  ")==0 ){.      i
30d30 66 28 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20 20  f( nArg!=5 ){.  
30d40 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
30d50 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
30d60 20 2e 75 73 65 72 20 61 64 64 20 55 53 45 52 20   .user add USER 
30d70 50 41 53 53 57 4f 52 44 20 49 53 41 44 4d 49 4e  PASSWORD ISADMIN
30d80 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63  \n");.        rc
30d90 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f   = 1;.        go
30da0 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
30db0 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  exit;.      }.  
30dc0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
30dd0 5f 75 73 65 72 5f 61 64 64 28 70 2d 3e 64 62 2c  _user_add(p->db,
30de0 20 61 7a 41 72 67 5b 32 5d 2c 0a 20 20 20 20 20   azArg[2],.     
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e00 20 20 20 20 20 20 20 61 7a 41 72 67 5b 33 5d 2c         azArg[3],
30e10 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41   (int)strlen(azA
30e20 72 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20 20 20  rg[3]),.        
30e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e40 20 20 20 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65      booleanValue
30e50 28 61 7a 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20  (azArg[4]));.   
30e60 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
30e70 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
30e80 73 74 64 65 72 72 2c 20 22 55 73 65 72 2d 41 64  stderr, "User-Ad
30e90 64 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c  d failed: %d\n",
30ea0 20 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63   rc);.        rc
30eb0 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 1;.      }.  
30ec0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
30ed0 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 65 64 69  mp(azArg[1],"edi
30ee0 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  t")==0 ){.      
30ef0 69 66 28 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20  if( nArg!=5 ){. 
30f00 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
30f10 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
30f20 3a 20 2e 75 73 65 72 20 65 64 69 74 20 55 53 45  : .user edit USE
30f30 52 20 50 41 53 53 57 4f 52 44 20 49 53 41 44 4d  R PASSWORD ISADM
30f40 49 4e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  IN\n");.        
30f50 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  rc = 1;.        
30f60 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
30f70 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a  d_exit;.      }.
30f80 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
30f90 65 33 5f 75 73 65 72 5f 63 68 61 6e 67 65 28 70  e3_user_change(p
30fa0 2d 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d 2c 0a  ->db, azArg[2],.
30fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a                az
30fd0 41 72 67 5b 33 5d 2c 20 28 69 6e 74 29 73 74 72  Arg[3], (int)str
30fe0 6c 65 6e 28 61 7a 41 72 67 5b 33 5d 29 2c 0a 20  len(azArg[3]),. 
30ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31000 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
31010 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
31020 34 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  4]));.      if( 
31030 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  rc ){.        ra
31040 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
31050 20 22 55 73 65 72 2d 45 64 69 74 20 66 61 69 6c   "User-Edit fail
31060 65 64 3a 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a  ed: %d\n", rc);.
31070 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
31080 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
31090 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41  e if( strcmp(azA
310a0 72 67 5b 31 5d 2c 22 64 65 6c 65 74 65 22 29 3d  rg[1],"delete")=
310b0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
310c0 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20 20 20 20  nArg!=3 ){.     
310d0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
310e0 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75  derr, "Usage: .u
310f0 73 65 72 20 64 65 6c 65 74 65 20 55 53 45 52 5c  ser delete USER\
31100 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  n");.        rc 
31110 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 1;.        got
31120 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
31130 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  xit;.      }.   
31140 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
31150 75 73 65 72 5f 64 65 6c 65 74 65 28 70 2d 3e 64  user_delete(p->d
31160 62 2c 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20  b, azArg[2]);.  
31170 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
31180 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
31190 28 73 74 64 65 72 72 2c 20 22 55 73 65 72 2d 44  (stderr, "User-D
311a0 65 6c 65 74 65 20 66 61 69 6c 65 64 3a 20 25 64  elete failed: %d
311b0 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20  \n", rc);.      
311c0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
311d0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
311e0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
311f0 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75  derr, "Usage: .u
31200 73 65 72 20 6c 6f 67 69 6e 7c 61 64 64 7c 65 64  ser login|add|ed
31210 69 74 7c 64 65 6c 65 74 65 20 2e 2e 2e 5c 6e 22  it|delete ...\n"
31220 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
31230 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61  .      goto meta
31240 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
31250 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e     }.  }else.#en
31260 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
31270 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
31280 4e 20 2a 2f 0a 0a 20 20 69 66 28 20 63 3d 3d 27  N */..  if( c=='
31290 76 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  v' && strncmp(az
312a0 41 72 67 5b 30 5d 2c 20 22 76 65 72 73 69 6f 6e  Arg[0], "version
312b0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
312c0 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
312d0 75 74 2c 20 22 53 51 4c 69 74 65 20 25 73 20 25  ut, "SQLite %s %
312e0 73 5c 6e 22 20 2f 2a 65 78 74 72 61 2d 76 65 72  s\n" /*extra-ver
312f0 73 69 6f 6e 2d 69 6e 66 6f 2a 2f 2c 0a 20 20 20  sion-info*/,.   
31300 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 62       sqlite3_lib
31310 76 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74  version(), sqlit
31320 65 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a  e3_sourceid());.
31330 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
31340 3d 3d 27 76 27 20 26 26 20 73 74 72 6e 63 6d 70  =='v' && strncmp
31350 28 61 7a 41 72 67 5b 30 5d 2c 20 22 76 66 73 69  (azArg[0], "vfsi
31360 6e 66 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  nfo", n)==0 ){. 
31370 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
31380 44 62 4e 61 6d 65 20 3d 20 6e 41 72 67 3d 3d 32  DbName = nArg==2
31390 20 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d   ? azArg[1] : "m
313a0 61 69 6e 22 3b 0a 20 20 20 20 73 71 6c 69 74 65  ain";.    sqlite
313b0 33 5f 76 66 73 20 2a 70 56 66 73 20 3d 20 30 3b  3_vfs *pVfs = 0;
313c0 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 20 29  .    if( p->db )
313d0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
313e0 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 70 2d 3e  file_control(p->
313f0 64 62 2c 20 7a 44 62 4e 61 6d 65 2c 20 53 51 4c  db, zDbName, SQL
31400 49 54 45 5f 46 43 4e 54 4c 5f 56 46 53 5f 50 4f  ITE_FCNTL_VFS_PO
31410 49 4e 54 45 52 2c 20 26 70 56 66 73 29 3b 0a 20  INTER, &pVfs);. 
31420 20 20 20 20 20 69 66 28 20 70 56 66 73 20 29 7b       if( pVfs ){
31430 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
31440 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66  intf(p->out, "vf
31450 73 2e 7a 4e 61 6d 65 20 20 20 20 20 20 3d 20 5c  s.zName      = \
31460 22 25 73 5c 22 5c 6e 22 2c 20 70 56 66 73 2d 3e  "%s\"\n", pVfs->
31470 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
31480 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
31490 74 2c 20 22 76 66 73 2e 69 56 65 72 73 69 6f 6e  t, "vfs.iVersion
314a0 20 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73     = %d\n", pVfs
314b0 2d 3e 69 56 65 72 73 69 6f 6e 29 3b 0a 20 20 20  ->iVersion);.   
314c0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
314d0 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 73 7a 4f  p->out, "vfs.szO
314e0 73 46 69 6c 65 20 20 20 3d 20 25 64 5c 6e 22 2c  sFile   = %d\n",
314f0 20 70 56 66 73 2d 3e 73 7a 4f 73 46 69 6c 65 29   pVfs->szOsFile)
31500 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  ;.        raw_pr
31510 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66  intf(p->out, "vf
31520 73 2e 6d 78 50 61 74 68 6e 61 6d 65 20 3d 20 25  s.mxPathname = %
31530 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 6d 78 50 61  d\n", pVfs->mxPa
31540 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d  thname);.      }
31550 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
31560 20 20 69 66 28 20 63 3d 3d 27 76 27 20 26 26 20    if( c=='v' && 
31570 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
31580 2c 20 22 76 66 73 6c 69 73 74 22 2c 20 6e 29 3d  , "vfslist", n)=
31590 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
315a0 33 5f 76 66 73 20 2a 70 56 66 73 3b 0a 20 20 20  3_vfs *pVfs;.   
315b0 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 43   sqlite3_vfs *pC
315c0 75 72 72 65 6e 74 20 3d 20 30 3b 0a 20 20 20 20  urrent = 0;.    
315d0 69 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20  if( p->db ){.   
315e0 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f     sqlite3_file_
315f0 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 22  control(p->db, "
31600 6d 61 69 6e 22 2c 20 53 51 4c 49 54 45 5f 46 43  main", SQLITE_FC
31610 4e 54 4c 5f 56 46 53 5f 50 4f 49 4e 54 45 52 2c  NTL_VFS_POINTER,
31620 20 26 70 43 75 72 72 65 6e 74 29 3b 0a 20 20 20   &pCurrent);.   
31630 20 7d 0a 20 20 20 20 66 6f 72 28 70 56 66 73 3d   }.    for(pVfs=
31640 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
31650 28 30 29 3b 20 70 56 66 73 3b 20 70 56 66 73 3d  (0); pVfs; pVfs=
31660 70 56 66 73 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  pVfs->pNext){.  
31670 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
31680 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 7a 4e 61  p->out, "vfs.zNa
31690 6d 65 20 20 20 20 20 20 3d 20 5c 22 25 73 5c 22  me      = \"%s\"
316a0 25 73 5c 6e 22 2c 20 70 56 66 73 2d 3e 7a 4e 61  %s\n", pVfs->zNa
316b0 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70  me,.           p
316c0 56 66 73 3d 3d 70 43 75 72 72 65 6e 74 20 3f 20  Vfs==pCurrent ? 
316d0 22 20 20 3c 2d 2d 2d 20 43 55 52 52 45 4e 54 22  "  <--- CURRENT"
316e0 20 3a 20 22 22 29 3b 0a 20 20 20 20 20 20 72 61   : "");.      ra
316f0 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
31700 20 22 76 66 73 2e 69 56 65 72 73 69 6f 6e 20 20   "vfs.iVersion  
31710 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e   = %d\n", pVfs->
31720 69 56 65 72 73 69 6f 6e 29 3b 0a 20 20 20 20 20  iVersion);.     
31730 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
31740 75 74 2c 20 22 76 66 73 2e 73 7a 4f 73 46 69 6c  ut, "vfs.szOsFil
31750 65 20 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66  e   = %d\n", pVf
31760 73 2d 3e 73 7a 4f 73 46 69 6c 65 29 3b 0a 20 20  s->szOsFile);.  
31770 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
31780 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 6d 78 50 61  ->out, "vfs.mxPa
31790 74 68 6e 61 6d 65 20 3d 20 25 64 5c 6e 22 2c 20  thname = %d\n", 
317a0 70 56 66 73 2d 3e 6d 78 50 61 74 68 6e 61 6d 65  pVfs->mxPathname
317b0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 56 66  );.      if( pVf
317c0 73 2d 3e 70 4e 65 78 74 20 29 7b 0a 20 20 20 20  s->pNext ){.    
317d0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
317e0 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d  ->out, "--------
317f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
31800 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b  -----------\n");
31810 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
31820 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
31830 3d 27 76 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='v' && strncmp(
31840 61 7a 41 72 67 5b 30 5d 2c 20 22 76 66 73 6e 61  azArg[0], "vfsna
31850 6d 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  me", n)==0 ){.  
31860 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
31870 62 4e 61 6d 65 20 3d 20 6e 41 72 67 3d 3d 32 20  bName = nArg==2 
31880 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d 61  ? azArg[1] : "ma
31890 69 6e 22 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  in";.    char *z
318a0 56 66 73 4e 61 6d 65 20 3d 20 30 3b 0a 20 20 20  VfsName = 0;.   
318b0 20 69 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20   if( p->db ){.  
318c0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65      sqlite3_file
318d0 5f 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20  _control(p->db, 
318e0 7a 44 62 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f  zDbName, SQLITE_
318f0 46 43 4e 54 4c 5f 56 46 53 4e 41 4d 45 2c 20 26  FCNTL_VFSNAME, &
31900 7a 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20  zVfsName);.     
31910 20 69 66 28 20 7a 56 66 73 4e 61 6d 65 20 29 7b   if( zVfsName ){
31920 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
31930 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
31940 5c 6e 22 2c 20 7a 56 66 73 4e 61 6d 65 29 3b 0a  \n", zVfsName);.
31950 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
31960 66 72 65 65 28 7a 56 66 73 4e 61 6d 65 29 3b 0a  free(zVfsName);.
31970 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
31980 7d 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e  }else..#if defin
31990 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
319a0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
319b0 54 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45 54  TE_ENABLE_WHERET
319c0 52 41 43 45 29 0a 20 20 69 66 28 20 63 3d 3d 27  RACE).  if( c=='
319d0 77 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  w' && strncmp(az
319e0 41 72 67 5b 30 5d 2c 20 22 77 68 65 72 65 74 72  Arg[0], "wheretr
319f0 61 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ace", n)==0 ){. 
31a00 20 20 20 73 71 6c 69 74 65 33 57 68 65 72 65 54     sqlite3WhereT
31a10 72 61 63 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f  race = nArg>=2 ?
31a20 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a   booleanValue(az
31a30 41 72 67 5b 31 5d 29 20 3a 20 30 78 66 66 3b 0a  Arg[1]) : 0xff;.
31a40 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
31a50 20 20 69 66 28 20 63 3d 3d 27 77 27 20 26 26 20    if( c=='w' && 
31a60 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
31a70 2c 20 22 77 69 64 74 68 22 2c 20 6e 29 3d 3d 30  , "width", n)==0
31a80 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 3b 0a 20   ){.    int j;. 
31a90 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3c     assert( nArg<
31aa0 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 41 72 67  =ArraySize(azArg
31ab0 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 31  ) );.    for(j=1
31ac0 3b 20 6a 3c 6e 41 72 67 20 26 26 20 6a 3c 41 72  ; j<nArg && j<Ar
31ad0 72 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 57 69  raySize(p->colWi
31ae0 64 74 68 29 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  dth); j++){.    
31af0 20 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 6a 2d    p->colWidth[j-
31b00 31 5d 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65  1] = (int)intege
31b10 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 6a 5d 29  rValue(azArg[j])
31b20 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
31b30 0a 20 20 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  .  {.    utf8_pr
31b40 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
31b50 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d  ror: unknown com
31b60 6d 61 6e 64 20 6f 72 20 69 6e 76 61 6c 69 64 20  mand or invalid 
31b70 61 72 67 75 6d 65 6e 74 73 3a 20 22 0a 20 20 20  arguments: ".   
31b80 20 20 20 22 20 5c 22 25 73 5c 22 2e 20 45 6e 74     " \"%s\". Ent
31b90 65 72 20 5c 22 2e 68 65 6c 70 5c 22 20 66 6f 72  er \".help\" for
31ba0 20 68 65 6c 70 5c 6e 22 2c 20 61 7a 41 72 67 5b   help\n", azArg[
31bb0 30 5d 29 3b 0a 20 20 20 20 72 63 20 3d 20 31 3b  0]);.    rc = 1;
31bc0 0a 20 20 7d 0a 0a 6d 65 74 61 5f 63 6f 6d 6d 61  .  }..meta_comma
31bd0 6e 64 5f 65 78 69 74 3a 0a 20 20 69 66 28 20 70  nd_exit:.  if( p
31be0 2d 3e 6f 75 74 43 6f 75 6e 74 20 29 7b 0a 20 20  ->outCount ){.  
31bf0 20 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 2d 2d 3b    p->outCount--;
31c00 0a 20 20 20 20 69 66 28 20 70 2d 3e 6f 75 74 43  .    if( p->outC
31c10 6f 75 6e 74 3d 3d 30 20 29 20 6f 75 74 70 75 74  ount==0 ) output
31c20 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 7d 0a 20  _reset(p);.  }. 
31c30 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
31c40 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45  *.** Return TRUE
31c50 20 69 66 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 20   if a semicolon 
31c60 6f 63 63 75 72 73 20 61 6e 79 77 68 65 72 65 20  occurs anywhere 
31c70 69 6e 20 74 68 65 20 66 69 72 73 74 20 4e 20 63  in the first N c
31c80 68 61 72 61 63 74 65 72 73 0a 2a 2a 20 6f 66 20  haracters.** of 
31c90 73 74 72 69 6e 67 20 7a 5b 5d 2e 0a 2a 2f 0a 73  string z[]..*/.s
31ca0 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 65 5f 63  tatic int line_c
31cb0 6f 6e 74 61 69 6e 73 5f 73 65 6d 69 63 6f 6c 6f  ontains_semicolo
31cc0 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  n(const char *z,
31cd0 20 69 6e 74 20 4e 29 7b 0a 20 20 69 6e 74 20 69   int N){.  int i
31ce0 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e  ;.  for(i=0; i<N
31cf0 3b 20 69 2b 2b 29 7b 20 20 69 66 28 20 7a 5b 69  ; i++){  if( z[i
31d00 5d 3d 3d 27 3b 27 20 29 20 72 65 74 75 72 6e 20  ]==';' ) return 
31d10 31 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  1; }.  return 0;
31d20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74  .}../*.** Test t
31d30 6f 20 73 65 65 20 69 66 20 61 20 6c 69 6e 65 20  o see if a line 
31d40 63 6f 6e 73 69 73 74 73 20 65 6e 74 69 72 65 6c  consists entirel
31d50 79 20 6f 66 20 77 68 69 74 65 73 70 61 63 65 2e  y of whitespace.
31d60 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 5f  .*/.static int _
31d70 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 65 28 63  all_whitespace(c
31d80 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20  onst char *z){. 
31d90 20 66 6f 72 28 3b 20 2a 7a 3b 20 7a 2b 2b 29 7b   for(; *z; z++){
31da0 0a 20 20 20 20 69 66 28 20 49 73 53 70 61 63 65  .    if( IsSpace
31db0 28 7a 5b 30 5d 29 20 29 20 63 6f 6e 74 69 6e 75  (z[0]) ) continu
31dc0 65 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27  e;.    if( *z=='
31dd0 2f 27 20 26 26 20 7a 5b 31 5d 3d 3d 27 2a 27 20  /' && z[1]=='*' 
31de0 29 7b 0a 20 20 20 20 20 20 7a 20 2b 3d 20 32 3b  ){.      z += 2;
31df0 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a  .      while( *z
31e00 20 26 26 20 28 2a 7a 21 3d 27 2a 27 20 7c 7c 20   && (*z!='*' || 
31e10 7a 5b 31 5d 21 3d 27 2f 27 29 20 29 7b 20 7a 2b  z[1]!='/') ){ z+
31e20 2b 3b 20 7d 0a 20 20 20 20 20 20 69 66 28 20 2a  +; }.      if( *
31e30 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  z==0 ) return 0;
31e40 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20  .      z++;.    
31e50 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
31e60 7d 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2d  }.    if( *z=='-
31e70 27 20 26 26 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29  ' && z[1]=='-' )
31e80 7b 0a 20 20 20 20 20 20 7a 20 2b 3d 20 32 3b 0a  {.      z += 2;.
31e90 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20        while( *z 
31ea0 26 26 20 2a 7a 21 3d 27 5c 6e 27 20 29 7b 20 7a  && *z!='\n' ){ z
31eb0 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 69 66 28 20  ++; }.      if( 
31ec0 2a 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31  *z==0 ) return 1
31ed0 3b 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65  ;.      continue
31ee0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
31ef0 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75  rn 0;.  }.  retu
31f00 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  rn 1;.}../*.** R
31f10 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 74 68  eturn TRUE if th
31f20 65 20 6c 69 6e 65 20 74 79 70 65 64 20 69 6e 20  e line typed in 
31f30 69 73 20 61 6e 20 53 51 4c 20 63 6f 6d 6d 61 6e  is an SQL comman
31f40 64 20 74 65 72 6d 69 6e 61 74 6f 72 20 6f 74 68  d terminator oth
31f50 65 72 0a 2a 2a 20 74 68 61 6e 20 61 20 73 65 6d  er.** than a sem
31f60 69 2d 63 6f 6c 6f 6e 2e 20 20 54 68 65 20 53 51  i-colon.  The SQ
31f70 4c 20 53 65 72 76 65 72 20 73 74 79 6c 65 20 22  L Server style "
31f80 67 6f 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  go" command is u
31f90 6e 64 65 72 73 74 6f 6f 64 0a 2a 2a 20 61 73 20  nderstood.** as 
31fa0 69 73 20 74 68 65 20 4f 72 61 63 6c 65 20 22 2f  is the Oracle "/
31fb0 22 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  "..*/.static int
31fc0 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d 6d 61 6e 64   line_is_command
31fd0 5f 74 65 72 6d 69 6e 61 74 6f 72 28 63 6f 6e 73  _terminator(cons
31fe0 74 20 63 68 61 72 20 2a 7a 4c 69 6e 65 29 7b 0a  t char *zLine){.
31ff0 20 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65    while( IsSpace
32000 28 7a 4c 69 6e 65 5b 30 5d 29 20 29 7b 20 7a 4c  (zLine[0]) ){ zL
32010 69 6e 65 2b 2b 3b 20 7d 3b 0a 20 20 69 66 28 20  ine++; };.  if( 
32020 7a 4c 69 6e 65 5b 30 5d 3d 3d 27 2f 27 20 26 26  zLine[0]=='/' &&
32030 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 65   _all_whitespace
32040 28 26 7a 4c 69 6e 65 5b 31 5d 29 20 29 7b 0a 20  (&zLine[1]) ){. 
32050 20 20 20 72 65 74 75 72 6e 20 31 3b 20 20 2f 2a     return 1;  /*
32060 20 4f 72 61 63 6c 65 20 2a 2f 0a 20 20 7d 0a 20   Oracle */.  }. 
32070 20 69 66 28 20 54 6f 4c 6f 77 65 72 28 7a 4c 69   if( ToLower(zLi
32080 6e 65 5b 30 5d 29 3d 3d 27 67 27 20 26 26 20 54  ne[0])=='g' && T
32090 6f 4c 6f 77 65 72 28 7a 4c 69 6e 65 5b 31 5d 29  oLower(zLine[1])
320a0 3d 3d 27 6f 27 0a 20 20 20 20 20 20 20 20 20 26  =='o'.         &
320b0 26 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63  & _all_whitespac
320c0 65 28 26 7a 4c 69 6e 65 5b 32 5d 29 20 29 7b 0a  e(&zLine[2]) ){.
320d0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 20 2f      return 1;  /
320e0 2a 20 53 51 4c 20 53 65 72 76 65 72 20 2a 2f 0a  * SQL Server */.
320f0 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
32100 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
32110 74 72 75 65 20 69 66 20 7a 53 71 6c 20 69 73 20  true if zSql is 
32120 61 20 63 6f 6d 70 6c 65 74 65 20 53 51 4c 20 73  a complete SQL s
32130 74 61 74 65 6d 65 6e 74 2e 20 20 52 65 74 75 72  tatement.  Retur
32140 6e 20 66 61 6c 73 65 20 69 66 20 69 74 0a 2a 2a  n false if it.**
32150 20 65 6e 64 73 20 69 6e 20 74 68 65 20 6d 69 64   ends in the mid
32160 64 6c 65 20 6f 66 20 61 20 73 74 72 69 6e 67 20  dle of a string 
32170 6c 69 74 65 72 61 6c 20 6f 72 20 43 2d 73 74 79  literal or C-sty
32180 6c 65 20 63 6f 6d 6d 65 6e 74 2e 0a 2a 2f 0a 73  le comment..*/.s
32190 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 65 5f 69  tatic int line_i
321a0 73 5f 63 6f 6d 70 6c 65 74 65 28 63 68 61 72 20  s_complete(char 
321b0 2a 7a 53 71 6c 2c 20 69 6e 74 20 6e 53 71 6c 29  *zSql, int nSql)
321c0 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66  {.  int rc;.  if
321d0 28 20 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75  ( zSql==0 ) retu
321e0 72 6e 20 31 3b 0a 20 20 7a 53 71 6c 5b 6e 53 71  rn 1;.  zSql[nSq
321f0 6c 5d 20 3d 20 27 3b 27 3b 0a 20 20 7a 53 71 6c  l] = ';';.  zSql
32200 5b 6e 53 71 6c 2b 31 5d 20 3d 20 30 3b 0a 20 20  [nSql+1] = 0;.  
32210 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d  rc = sqlite3_com
32220 70 6c 65 74 65 28 7a 53 71 6c 29 3b 0a 20 20 7a  plete(zSql);.  z
32230 53 71 6c 5b 6e 53 71 6c 5d 20 3d 20 30 3b 0a 20  Sql[nSql] = 0;. 
32240 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
32250 2a 0a 2a 2a 20 52 75 6e 20 61 20 73 69 6e 67 6c  *.** Run a singl
32260 65 20 6c 69 6e 65 20 6f 66 20 53 51 4c 0a 2a 2f  e line of SQL.*/
32270 0a 73 74 61 74 69 63 20 69 6e 74 20 72 75 6e 4f  .static int runO
32280 6e 65 53 71 6c 4c 69 6e 65 28 53 68 65 6c 6c 53  neSqlLine(ShellS
32290 74 61 74 65 20 2a 70 2c 20 63 68 61 72 20 2a 7a  tate *p, char *z
322a0 53 71 6c 2c 20 46 49 4c 45 20 2a 69 6e 2c 20 69  Sql, FILE *in, i
322b0 6e 74 20 73 74 61 72 74 6c 69 6e 65 29 7b 0a 20  nt startline){. 
322c0 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20   int rc;.  char 
322d0 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20  *zErrMsg = 0;.. 
322e0 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a   open_db(p, 0);.
322f0 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c    if( ShellHasFl
32300 61 67 28 70 2c 53 48 46 4c 47 5f 42 61 63 6b 73  ag(p,SHFLG_Backs
32310 6c 61 73 68 29 20 29 20 72 65 73 6f 6c 76 65 5f  lash) ) resolve_
32320 62 61 63 6b 73 6c 61 73 68 65 73 28 7a 53 71 6c  backslashes(zSql
32330 29 3b 0a 20 20 42 45 47 49 4e 5f 54 49 4d 45 52  );.  BEGIN_TIMER
32340 3b 0a 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65  ;.  rc = shell_e
32350 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c  xec(p->db, zSql,
32360 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c   shell_callback,
32370 20 70 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20   p, &zErrMsg);. 
32380 20 45 4e 44 5f 54 49 4d 45 52 3b 0a 20 20 69 66   END_TIMER;.  if
32390 28 20 72 63 20 7c 7c 20 7a 45 72 72 4d 73 67 20  ( rc || zErrMsg 
323a0 29 7b 0a 20 20 20 20 63 68 61 72 20 7a 50 72 65  ){.    char zPre
323b0 66 69 78 5b 31 30 30 5d 3b 0a 20 20 20 20 69 66  fix[100];.    if
323c0 28 20 69 6e 21 3d 30 20 7c 7c 20 21 73 74 64 69  ( in!=0 || !stdi
323d0 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65  n_is_interactive
323e0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
323f0 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
32400 66 28 7a 50 72 65 66 69 78 29 2c 20 7a 50 72 65  f(zPrefix), zPre
32410 66 69 78 2c 0a 20 20 20 20 20 20 20 20 20 20 20  fix,.           
32420 20 20 20 20 20 20 20 20 20 20 20 20 22 45 72 72              "Err
32430 6f 72 3a 20 6e 65 61 72 20 6c 69 6e 65 20 25 64  or: near line %d
32440 3a 22 2c 20 73 74 61 72 74 6c 69 6e 65 29 3b 0a  :", startline);.
32450 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
32460 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
32470 66 28 73 69 7a 65 6f 66 28 7a 50 72 65 66 69 78  f(sizeof(zPrefix
32480 29 2c 20 7a 50 72 65 66 69 78 2c 20 22 45 72 72  ), zPrefix, "Err
32490 6f 72 3a 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20  or:");.    }.   
324a0 20 69 66 28 20 7a 45 72 72 4d 73 67 21 3d 30 20   if( zErrMsg!=0 
324b0 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
324c0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73  intf(stderr, "%s
324d0 20 25 73 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c   %s\n", zPrefix,
324e0 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20   zErrMsg);.     
324f0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
32500 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 7a 45  rrMsg);.      zE
32510 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d  rrMsg = 0;.    }
32520 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38  else{.      utf8
32530 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
32540 22 25 73 20 25 73 5c 6e 22 2c 20 7a 50 72 65 66  "%s %s\n", zPref
32550 69 78 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  ix, sqlite3_errm
32560 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20  sg(p->db));.    
32570 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  }.    return 1;.
32580 20 20 7d 65 6c 73 65 20 69 66 28 20 53 68 65 6c    }else if( Shel
32590 6c 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c  lHasFlag(p, SHFL
325a0 47 5f 43 6f 75 6e 74 43 68 61 6e 67 65 73 29 20  G_CountChanges) 
325b0 29 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74  ){.    raw_print
325c0 66 28 70 2d 3e 6f 75 74 2c 20 22 63 68 61 6e 67  f(p->out, "chang
325d0 65 73 3a 20 25 33 64 20 20 20 74 6f 74 61 6c 5f  es: %3d   total_
325e0 63 68 61 6e 67 65 73 3a 20 25 64 5c 6e 22 2c 0a  changes: %d\n",.
325f0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
32600 74 65 33 5f 63 68 61 6e 67 65 73 28 70 2d 3e 64  te3_changes(p->d
32610 62 29 2c 20 73 71 6c 69 74 65 33 5f 74 6f 74 61  b), sqlite3_tota
32620 6c 5f 63 68 61 6e 67 65 73 28 70 2d 3e 64 62 29  l_changes(p->db)
32630 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
32640 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 61  0;.}.../*.** Rea
32650 64 20 69 6e 70 75 74 20 66 72 6f 6d 20 2a 69 6e  d input from *in
32660 20 61 6e 64 20 70 72 6f 63 65 73 73 20 69 74 2e   and process it.
32670 20 20 49 66 20 2a 69 6e 3d 3d 30 20 74 68 65 6e    If *in==0 then
32680 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20 69 6e 74   input.** is int
32690 65 72 61 63 74 69 76 65 20 2d 20 74 68 65 20 75  eractive - the u
326a0 73 65 72 20 69 73 20 74 79 70 69 6e 67 20 69 74  ser is typing it
326b0 20 69 74 2e 20 20 4f 74 68 65 72 77 69 73 65 2c   it.  Otherwise,
326c0 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20 63 6f 6d   input.** is com
326d0 69 6e 67 20 66 72 6f 6d 20 61 20 66 69 6c 65 20  ing from a file 
326e0 6f 72 20 64 65 76 69 63 65 2e 20 20 41 20 70 72  or device.  A pr
326f0 6f 6d 70 74 20 69 73 20 69 73 73 75 65 64 20 61  ompt is issued a
32700 6e 64 20 68 69 73 74 6f 72 79 0a 2a 2a 20 69 73  nd history.** is
32710 20 73 61 76 65 64 20 6f 6e 6c 79 20 69 66 20 69   saved only if i
32720 6e 70 75 74 20 69 73 20 69 6e 74 65 72 61 63 74  nput is interact
32730 69 76 65 2e 20 20 41 6e 20 69 6e 74 65 72 72 75  ive.  An interru
32740 70 74 20 73 69 67 6e 61 6c 20 77 69 6c 6c 0a 2a  pt signal will.*
32750 2a 20 63 61 75 73 65 20 74 68 69 73 20 72 6f 75  * cause this rou
32760 74 69 6e 65 20 74 6f 20 65 78 69 74 20 69 6d 6d  tine to exit imm
32770 65 64 69 61 74 65 6c 79 2c 20 75 6e 6c 65 73 73  ediately, unless
32780 20 69 6e 70 75 74 20 69 73 20 69 6e 74 65 72 61   input is intera
32790 63 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 52 65 74  ctive..**.** Ret
327a0 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
327b0 66 20 65 72 72 6f 72 73 2e 0a 2a 2f 0a 73 74 61  f errors..*/.sta
327c0 74 69 63 20 69 6e 74 20 70 72 6f 63 65 73 73 5f  tic int process_
327d0 69 6e 70 75 74 28 53 68 65 6c 6c 53 74 61 74 65  input(ShellState
327e0 20 2a 70 2c 20 46 49 4c 45 20 2a 69 6e 29 7b 0a   *p, FILE *in){.
327f0 20 20 63 68 61 72 20 2a 7a 4c 69 6e 65 20 3d 20    char *zLine = 
32800 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  0;          /* A
32810 20 73 69 6e 67 6c 65 20 69 6e 70 75 74 20 6c 69   single input li
32820 6e 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53  ne */.  char *zS
32830 71 6c 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ql = 0;         
32840 20 20 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65 64    /* Accumulated
32850 20 53 51 4c 20 74 65 78 74 20 2a 2f 0a 20 20 69   SQL text */.  i
32860 6e 74 20 6e 4c 69 6e 65 3b 20 20 20 20 20 20 20  nt nLine;       
32870 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
32880 74 68 20 6f 66 20 63 75 72 72 65 6e 74 20 6c 69  th of current li
32890 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 71 6c  ne */.  int nSql
328a0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
328b0 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 7a 53    /* Bytes of zS
328c0 71 6c 5b 5d 20 75 73 65 64 20 2a 2f 0a 20 20 69  ql[] used */.  i
328d0 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b 20 20  nt nAlloc = 0;  
328e0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
328f0 63 61 74 65 64 20 7a 53 71 6c 5b 5d 20 73 70 61  cated zSql[] spa
32900 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 71 6c  ce */.  int nSql
32910 50 72 69 6f 72 20 3d 20 30 3b 20 20 20 20 20 20  Prior = 0;      
32920 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 7a 53    /* Bytes of zS
32930 71 6c 5b 5d 20 75 73 65 64 20 62 79 20 70 72 69  ql[] used by pri
32940 6f 72 20 6c 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  or line */.  int
32950 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
32960 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
32970 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 72  code */.  int er
32980 72 43 6e 74 20 3d 20 30 3b 20 20 20 20 20 20 20  rCnt = 0;       
32990 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
329a0 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
329b0 20 20 69 6e 74 20 6c 69 6e 65 6e 6f 20 3d 20 30    int lineno = 0
329c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
329d0 75 72 72 65 6e 74 20 6c 69 6e 65 20 6e 75 6d 62  urrent line numb
329e0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61 72  er */.  int star
329f0 74 6c 69 6e 65 20 3d 20 30 3b 20 20 20 20 20 20  tline = 0;      
32a00 20 20 2f 2a 20 4c 69 6e 65 20 6e 75 6d 62 65 72    /* Line number
32a10 20 66 6f 72 20 73 74 61 72 74 20 6f 66 20 63 75   for start of cu
32a20 72 72 65 6e 74 20 69 6e 70 75 74 20 2a 2f 0a 0a  rrent input */..
32a30 20 20 77 68 69 6c 65 28 20 65 72 72 43 6e 74 3d    while( errCnt=
32a40 3d 30 20 7c 7c 20 21 62 61 69 6c 5f 6f 6e 5f 65  =0 || !bail_on_e
32a50 72 72 6f 72 20 7c 7c 20 28 69 6e 3d 3d 30 20 26  rror || (in==0 &
32a60 26 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72  & stdin_is_inter
32a70 61 63 74 69 76 65 29 20 29 7b 0a 20 20 20 20 66  active) ){.    f
32a80 66 6c 75 73 68 28 70 2d 3e 6f 75 74 29 3b 0a 20  flush(p->out);. 
32a90 20 20 20 7a 4c 69 6e 65 20 3d 20 6f 6e 65 5f 69     zLine = one_i
32aa0 6e 70 75 74 5f 6c 69 6e 65 28 69 6e 2c 20 7a 4c  nput_line(in, zL
32ab0 69 6e 65 2c 20 6e 53 71 6c 3e 30 29 3b 0a 20 20  ine, nSql>0);.  
32ac0 20 20 69 66 28 20 7a 4c 69 6e 65 3d 3d 30 20 29    if( zLine==0 )
32ad0 7b 0a 20 20 20 20 20 20 2f 2a 20 45 6e 64 20 6f  {.      /* End o
32ae0 66 20 69 6e 70 75 74 20 2a 2f 0a 20 20 20 20 20  f input */.     
32af0 20 69 66 28 20 69 6e 3d 3d 30 20 26 26 20 73 74   if( in==0 && st
32b00 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69  din_is_interacti
32b10 76 65 20 29 20 70 72 69 6e 74 66 28 22 5c 6e 22  ve ) printf("\n"
32b20 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
32b30 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 65      }.    if( se
32b40 65 6e 49 6e 74 65 72 72 75 70 74 20 29 7b 0a 20  enInterrupt ){. 
32b50 20 20 20 20 20 69 66 28 20 69 6e 21 3d 30 20 29       if( in!=0 )
32b60 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 73 65   break;.      se
32b70 65 6e 49 6e 74 65 72 72 75 70 74 20 3d 20 30 3b  enInterrupt = 0;
32b80 0a 20 20 20 20 7d 0a 20 20 20 20 6c 69 6e 65 6e  .    }.    linen
32b90 6f 2b 2b 3b 0a 20 20 20 20 69 66 28 20 6e 53 71  o++;.    if( nSq
32ba0 6c 3d 3d 30 20 26 26 20 5f 61 6c 6c 5f 77 68 69  l==0 && _all_whi
32bb0 74 65 73 70 61 63 65 28 7a 4c 69 6e 65 29 20 29  tespace(zLine) )
32bc0 7b 0a 20 20 20 20 20 20 69 66 28 20 53 68 65 6c  {.      if( Shel
32bd0 6c 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c  lHasFlag(p, SHFL
32be0 47 5f 45 63 68 6f 29 20 29 20 70 72 69 6e 74 66  G_Echo) ) printf
32bf0 28 22 25 73 5c 6e 22 2c 20 7a 4c 69 6e 65 29 3b  ("%s\n", zLine);
32c00 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b  .      continue;
32c10 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a  .    }.    if( z
32c20 4c 69 6e 65 20 26 26 20 7a 4c 69 6e 65 5b 30 5d  Line && zLine[0]
32c30 3d 3d 27 2e 27 20 26 26 20 6e 53 71 6c 3d 3d 30  =='.' && nSql==0
32c40 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 53 68   ){.      if( Sh
32c50 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53 48  ellHasFlag(p, SH
32c60 46 4c 47 5f 45 63 68 6f 29 20 29 20 70 72 69 6e  FLG_Echo) ) prin
32c70 74 66 28 22 25 73 5c 6e 22 2c 20 7a 4c 69 6e 65  tf("%s\n", zLine
32c80 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 64 6f  );.      rc = do
32c90 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28 7a 4c  _meta_command(zL
32ca0 69 6e 65 2c 20 70 29 3b 0a 20 20 20 20 20 20 69  ine, p);.      i
32cb0 66 28 20 72 63 3d 3d 32 20 29 7b 20 2f 2a 20 65  f( rc==2 ){ /* e
32cc0 78 69 74 20 72 65 71 75 65 73 74 65 64 20 2a 2f  xit requested */
32cd0 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
32ce0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
32cf0 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 65 72  rc ){.        er
32d00 72 43 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a  rCnt++;.      }.
32d10 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
32d20 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6c 69      }.    if( li
32d30 6e 65 5f 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74 65  ne_is_command_te
32d40 72 6d 69 6e 61 74 6f 72 28 7a 4c 69 6e 65 29 20  rminator(zLine) 
32d50 26 26 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d 70 6c  && line_is_compl
32d60 65 74 65 28 7a 53 71 6c 2c 20 6e 53 71 6c 29 20  ete(zSql, nSql) 
32d70 29 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28  ){.      memcpy(
32d80 7a 4c 69 6e 65 2c 22 3b 22 2c 32 29 3b 0a 20 20  zLine,";",2);.  
32d90 20 20 7d 0a 20 20 20 20 6e 4c 69 6e 65 20 3d 20    }.    nLine = 
32da0 73 74 72 6c 65 6e 33 30 28 7a 4c 69 6e 65 29 3b  strlen30(zLine);
32db0 0a 20 20 20 20 69 66 28 20 6e 53 71 6c 2b 6e 4c  .    if( nSql+nL
32dc0 69 6e 65 2b 32 3e 3d 6e 41 6c 6c 6f 63 20 29 7b  ine+2>=nAlloc ){
32dd0 0a 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20  .      nAlloc = 
32de0 6e 53 71 6c 2b 6e 4c 69 6e 65 2b 31 30 30 3b 0a  nSql+nLine+100;.
32df0 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 72 65 61        zSql = rea
32e00 6c 6c 6f 63 28 7a 53 71 6c 2c 20 6e 41 6c 6c 6f  lloc(zSql, nAllo
32e10 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 53  c);.      if( zS
32e20 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ql==0 ){.       
32e30 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
32e40 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74 20  rr, "Error: out 
32e50 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20  of memory\n");. 
32e60 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a         exit(1);.
32e70 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
32e80 20 20 6e 53 71 6c 50 72 69 6f 72 20 3d 20 6e 53    nSqlPrior = nS
32e90 71 6c 3b 0a 20 20 20 20 69 66 28 20 6e 53 71 6c  ql;.    if( nSql
32ea0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ==0 ){.      int
32eb0 20 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   i;.      for(i=
32ec0 30 3b 20 7a 4c 69 6e 65 5b 69 5d 20 26 26 20 49  0; zLine[i] && I
32ed0 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 69 5d 29  sSpace(zLine[i])
32ee0 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 61  ; i++){}.      a
32ef0 73 73 65 72 74 28 20 6e 41 6c 6c 6f 63 3e 30 20  ssert( nAlloc>0 
32f00 26 26 20 7a 53 71 6c 21 3d 30 20 29 3b 0a 20 20  && zSql!=0 );.  
32f10 20 20 20 20 6d 65 6d 63 70 79 28 7a 53 71 6c 2c      memcpy(zSql,
32f20 20 7a 4c 69 6e 65 2b 69 2c 20 6e 4c 69 6e 65 2b   zLine+i, nLine+
32f30 31 2d 69 29 3b 0a 20 20 20 20 20 20 73 74 61 72  1-i);.      star
32f40 74 6c 69 6e 65 20 3d 20 6c 69 6e 65 6e 6f 3b 0a  tline = lineno;.
32f50 20 20 20 20 20 20 6e 53 71 6c 20 3d 20 6e 4c 69        nSql = nLi
32f60 6e 65 2d 69 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ne-i;.    }else{
32f70 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6e 53 71 6c  .      zSql[nSql
32f80 2b 2b 5d 20 3d 20 27 5c 6e 27 3b 0a 20 20 20 20  ++] = '\n';.    
32f90 20 20 6d 65 6d 63 70 79 28 7a 53 71 6c 2b 6e 53    memcpy(zSql+nS
32fa0 71 6c 2c 20 7a 4c 69 6e 65 2c 20 6e 4c 69 6e 65  ql, zLine, nLine
32fb0 2b 31 29 3b 0a 20 20 20 20 20 20 6e 53 71 6c 20  +1);.      nSql 
32fc0 2b 3d 20 6e 4c 69 6e 65 3b 0a 20 20 20 20 7d 0a  += nLine;.    }.
32fd0 20 20 20 20 69 66 28 20 6e 53 71 6c 20 26 26 20      if( nSql && 
32fe0 6c 69 6e 65 5f 63 6f 6e 74 61 69 6e 73 5f 73 65  line_contains_se
32ff0 6d 69 63 6f 6c 6f 6e 28 26 7a 53 71 6c 5b 6e 53  micolon(&zSql[nS
33000 71 6c 50 72 69 6f 72 5d 2c 20 6e 53 71 6c 2d 6e  qlPrior], nSql-n
33010 53 71 6c 50 72 69 6f 72 29 0a 20 20 20 20 20 20  SqlPrior).      
33020 20 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c            && sql
33030 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 28 7a 53  ite3_complete(zS
33040 71 6c 29 20 29 7b 0a 20 20 20 20 20 20 65 72 72  ql) ){.      err
33050 43 6e 74 20 2b 3d 20 72 75 6e 4f 6e 65 53 71 6c  Cnt += runOneSql
33060 4c 69 6e 65 28 70 2c 20 7a 53 71 6c 2c 20 69 6e  Line(p, zSql, in
33070 2c 20 73 74 61 72 74 6c 69 6e 65 29 3b 0a 20 20  , startline);.  
33080 20 20 20 20 6e 53 71 6c 20 3d 20 30 3b 0a 20 20      nSql = 0;.  
33090 20 20 20 20 69 66 28 20 70 2d 3e 6f 75 74 43 6f      if( p->outCo
330a0 75 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 6f  unt ){.        o
330b0 75 74 70 75 74 5f 72 65 73 65 74 28 70 29 3b 0a  utput_reset(p);.
330c0 20 20 20 20 20 20 20 20 70 2d 3e 6f 75 74 43 6f          p->outCo
330d0 75 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  unt = 0;.      }
330e0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e  .    }else if( n
330f0 53 71 6c 20 26 26 20 5f 61 6c 6c 5f 77 68 69 74  Sql && _all_whit
33100 65 73 70 61 63 65 28 7a 53 71 6c 29 20 29 7b 0a  espace(zSql) ){.
33110 20 20 20 20 20 20 69 66 28 20 53 68 65 6c 6c 48        if( ShellH
33120 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f  asFlag(p, SHFLG_
33130 45 63 68 6f 29 20 29 20 70 72 69 6e 74 66 28 22  Echo) ) printf("
33140 25 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20  %s\n", zSql);.  
33150 20 20 20 20 6e 53 71 6c 20 3d 20 30 3b 0a 20 20      nSql = 0;.  
33160 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6e 53    }.  }.  if( nS
33170 71 6c 20 26 26 20 21 5f 61 6c 6c 5f 77 68 69 74  ql && !_all_whit
33180 65 73 70 61 63 65 28 7a 53 71 6c 29 20 29 7b 0a  espace(zSql) ){.
33190 20 20 20 20 72 75 6e 4f 6e 65 53 71 6c 4c 69 6e      runOneSqlLin
331a0 65 28 70 2c 20 7a 53 71 6c 2c 20 69 6e 2c 20 73  e(p, zSql, in, s
331b0 74 61 72 74 6c 69 6e 65 29 3b 0a 20 20 7d 0a 20  tartline);.  }. 
331c0 20 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 66   free(zSql);.  f
331d0 72 65 65 28 7a 4c 69 6e 65 29 3b 0a 20 20 72 65  ree(zLine);.  re
331e0 74 75 72 6e 20 65 72 72 43 6e 74 3e 30 3b 0a 7d  turn errCnt>0;.}
331f0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61  ../*.** Return a
33200 20 70 61 74 68 6e 61 6d 65 20 77 68 69 63 68 20   pathname which 
33210 69 73 20 74 68 65 20 75 73 65 72 27 73 20 68 6f  is the user's ho
33220 6d 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20 41  me directory.  A
33230 0a 2a 2a 20 30 20 72 65 74 75 72 6e 20 69 6e 64  .** 0 return ind
33240 69 63 61 74 65 73 20 61 6e 20 65 72 72 6f 72 20  icates an error 
33250 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 2a 2f  of some kind..*/
33260 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 66 69  .static char *fi
33270 6e 64 5f 68 6f 6d 65 5f 64 69 72 28 69 6e 74 20  nd_home_dir(int 
33280 63 6c 65 61 72 46 6c 61 67 29 7b 0a 20 20 73 74  clearFlag){.  st
33290 61 74 69 63 20 63 68 61 72 20 2a 68 6f 6d 65 5f  atic char *home_
332a0 64 69 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20 69 66  dir = NULL;.  if
332b0 28 20 63 6c 65 61 72 46 6c 61 67 20 29 7b 0a 20  ( clearFlag ){. 
332c0 20 20 20 66 72 65 65 28 68 6f 6d 65 5f 64 69 72     free(home_dir
332d0 29 3b 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20  );.    home_dir 
332e0 3d 20 30 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  = 0;.    return 
332f0 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 68 6f 6d  0;.  }.  if( hom
33300 65 5f 64 69 72 20 29 20 72 65 74 75 72 6e 20 68  e_dir ) return h
33310 6f 6d 65 5f 64 69 72 3b 0a 0a 23 69 66 20 21 64  ome_dir;..#if !d
33320 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26  efined(_WIN32) &
33330 26 20 21 64 65 66 69 6e 65 64 28 57 49 4e 33 32  & !defined(WIN32
33340 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57  ) && !defined(_W
33350 49 4e 33 32 5f 57 43 45 29 20 5c 0a 20 20 20 20  IN32_WCE) \.    
33360 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 52   && !defined(__R
33370 54 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  TP__) && !define
33380 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a 20  d(_WRS_KERNEL). 
33390 20 7b 0a 20 20 20 20 73 74 72 75 63 74 20 70 61   {.    struct pa
333a0 73 73 77 64 20 2a 70 77 65 6e 74 3b 0a 20 20 20  sswd *pwent;.   
333b0 20 75 69 64 5f 74 20 75 69 64 20 3d 20 67 65 74   uid_t uid = get
333c0 75 69 64 28 29 3b 0a 20 20 20 20 69 66 28 20 28  uid();.    if( (
333d0 70 77 65 6e 74 3d 67 65 74 70 77 75 69 64 28 75  pwent=getpwuid(u
333e0 69 64 29 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a  id)) != NULL) {.
333f0 20 20 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d        home_dir =
33400 20 70 77 65 6e 74 2d 3e 70 77 5f 64 69 72 3b 0a   pwent->pw_dir;.
33410 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
33420 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57  ..#if defined(_W
33430 49 4e 33 32 5f 57 43 45 29 0a 20 20 2f 2a 20 57  IN32_WCE).  /* W
33440 69 6e 64 6f 77 73 20 43 45 20 28 61 72 6d 2d 77  indows CE (arm-w
33450 69 6e 63 65 2d 6d 69 6e 67 77 33 32 63 65 2d 67  ince-mingw32ce-g
33460 63 63 29 20 64 6f 65 73 20 6e 6f 74 20 70 72 6f  cc) does not pro
33470 76 69 64 65 20 67 65 74 65 6e 76 28 29 0a 20 20  vide getenv().  
33480 20 2a 2f 0a 20 20 68 6f 6d 65 5f 64 69 72 20 3d   */.  home_dir =
33490 20 22 2f 22 3b 0a 23 65 6c 73 65 0a 0a 23 69 66   "/";.#else..#if
334a0 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29   defined(_WIN32)
334b0 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33   || defined(WIN3
334c0 32 29 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f 64  2).  if (!home_d
334d0 69 72 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64  ir) {.    home_d
334e0 69 72 20 3d 20 67 65 74 65 6e 76 28 22 55 53 45  ir = getenv("USE
334f0 52 50 52 4f 46 49 4c 45 22 29 3b 0a 20 20 7d 0a  RPROFILE");.  }.
33500 23 65 6e 64 69 66 0a 0a 20 20 69 66 20 28 21 68  #endif..  if (!h
33510 6f 6d 65 5f 64 69 72 29 20 7b 0a 20 20 20 20 68  ome_dir) {.    h
33520 6f 6d 65 5f 64 69 72 20 3d 20 67 65 74 65 6e 76  ome_dir = getenv
33530 28 22 48 4f 4d 45 22 29 3b 0a 20 20 7d 0a 0a 23  ("HOME");.  }..#
33540 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33  if defined(_WIN3
33550 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49  2) || defined(WI
33560 4e 33 32 29 0a 20 20 69 66 20 28 21 68 6f 6d 65  N32).  if (!home
33570 5f 64 69 72 29 20 7b 0a 20 20 20 20 63 68 61 72  _dir) {.    char
33580 20 2a 7a 44 72 69 76 65 2c 20 2a 7a 50 61 74 68   *zDrive, *zPath
33590 3b 0a 20 20 20 20 69 6e 74 20 6e 3b 0a 20 20 20  ;.    int n;.   
335a0 20 7a 44 72 69 76 65 20 3d 20 67 65 74 65 6e 76   zDrive = getenv
335b0 28 22 48 4f 4d 45 44 52 49 56 45 22 29 3b 0a 20  ("HOMEDRIVE");. 
335c0 20 20 20 7a 50 61 74 68 20 3d 20 67 65 74 65 6e     zPath = geten
335d0 76 28 22 48 4f 4d 45 50 41 54 48 22 29 3b 0a 20  v("HOMEPATH");. 
335e0 20 20 20 69 66 28 20 7a 44 72 69 76 65 20 26 26     if( zDrive &&
335f0 20 7a 50 61 74 68 20 29 7b 0a 20 20 20 20 20 20   zPath ){.      
33600 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 44 72  n = strlen30(zDr
33610 69 76 65 29 20 2b 20 73 74 72 6c 65 6e 33 30 28  ive) + strlen30(
33620 7a 50 61 74 68 29 20 2b 20 31 3b 0a 20 20 20 20  zPath) + 1;.    
33630 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 6d 61 6c    home_dir = mal
33640 6c 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20 20 20  loc( n );.      
33650 69 66 28 20 68 6f 6d 65 5f 64 69 72 3d 3d 30 20  if( home_dir==0 
33660 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
33670 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
33680 74 66 28 6e 2c 20 68 6f 6d 65 5f 64 69 72 2c 20  tf(n, home_dir, 
33690 22 25 73 25 73 22 2c 20 7a 44 72 69 76 65 2c 20  "%s%s", zDrive, 
336a0 7a 50 61 74 68 29 3b 0a 20 20 20 20 20 20 72 65  zPath);.      re
336b0 74 75 72 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a 20  turn home_dir;. 
336c0 20 20 20 7d 0a 20 20 20 20 68 6f 6d 65 5f 64 69     }.    home_di
336d0 72 20 3d 20 22 63 3a 5c 5c 22 3b 0a 20 20 7d 0a  r = "c:\\";.  }.
336e0 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
336f0 2a 20 21 5f 57 49 4e 33 32 5f 57 43 45 20 2a 2f  * !_WIN32_WCE */
33700 0a 0a 20 20 69 66 28 20 68 6f 6d 65 5f 64 69 72  ..  if( home_dir
33710 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20   ){.    int n = 
33720 73 74 72 6c 65 6e 33 30 28 68 6f 6d 65 5f 64 69  strlen30(home_di
33730 72 29 20 2b 20 31 3b 0a 20 20 20 20 63 68 61 72  r) + 1;.    char
33740 20 2a 7a 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 20   *z = malloc( n 
33750 29 3b 0a 20 20 20 20 69 66 28 20 7a 20 29 20 6d  );.    if( z ) m
33760 65 6d 63 70 79 28 7a 2c 20 68 6f 6d 65 5f 64 69  emcpy(z, home_di
33770 72 2c 20 6e 29 3b 0a 20 20 20 20 68 6f 6d 65 5f  r, n);.    home_
33780 64 69 72 20 3d 20 7a 3b 0a 20 20 7d 0a 0a 20 20  dir = z;.  }..  
33790 72 65 74 75 72 6e 20 68 6f 6d 65 5f 64 69 72 3b  return home_dir;
337a0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 69  .}../*.** Read i
337b0 6e 70 75 74 20 66 72 6f 6d 20 74 68 65 20 66 69  nput from the fi
337c0 6c 65 20 67 69 76 65 6e 20 62 79 20 73 71 6c 69  le given by sqli
337d0 74 65 72 63 5f 6f 76 65 72 72 69 64 65 2e 20 20  terc_override.  
337e0 4f 72 20 69 66 20 74 68 61 74 0a 2a 2a 20 70 61  Or if that.** pa
337f0 72 61 6d 65 74 65 72 20 69 73 20 4e 55 4c 4c 2c  rameter is NULL,
33800 20 74 61 6b 65 20 69 6e 70 75 74 20 66 72 6f 6d   take input from
33810 20 7e 2f 2e 73 71 6c 69 74 65 72 63 0a 2a 2a 0a   ~/.sqliterc.**.
33820 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  ** Returns the n
33830 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 2e  umber of errors.
33840 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
33850 70 72 6f 63 65 73 73 5f 73 71 6c 69 74 65 72 63  process_sqliterc
33860 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  (.  ShellState *
33870 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p,              
33880 20 20 20 20 2f 2a 20 43 6f 6e 66 69 67 75 72 61      /* Configura
33890 74 69 6f 6e 20 64 61 74 61 20 2a 2f 0a 20 20 63  tion data */.  c
338a0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
338b0 65 72 63 5f 6f 76 65 72 72 69 64 65 20 20 20 2f  erc_override   /
338c0 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6e 66 69 67  * Name of config
338d0 20 66 69 6c 65 2e 20 4e 55 4c 4c 20 74 6f 20 75   file. NULL to u
338e0 73 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 29 7b  se default */.){
338f0 0a 20 20 63 68 61 72 20 2a 68 6f 6d 65 5f 64 69  .  char *home_di
33900 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20 63 6f 6e 73  r = NULL;.  cons
33910 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 72 63  t char *sqliterc
33920 20 3d 20 73 71 6c 69 74 65 72 63 5f 6f 76 65 72   = sqliterc_over
33930 72 69 64 65 3b 0a 20 20 63 68 61 72 20 2a 7a 42  ride;.  char *zB
33940 75 66 20 3d 20 30 3b 0a 20 20 46 49 4c 45 20 2a  uf = 0;.  FILE *
33950 69 6e 20 3d 20 4e 55 4c 4c 3b 0a 0a 20 20 69 66  in = NULL;..  if
33960 20 28 73 71 6c 69 74 65 72 63 20 3d 3d 20 4e 55   (sqliterc == NU
33970 4c 4c 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64  LL) {.    home_d
33980 69 72 20 3d 20 66 69 6e 64 5f 68 6f 6d 65 5f 64  ir = find_home_d
33990 69 72 28 30 29 3b 0a 20 20 20 20 69 66 28 20 68  ir(0);.    if( h
339a0 6f 6d 65 5f 64 69 72 3d 3d 30 20 29 7b 0a 20 20  ome_dir==0 ){.  
339b0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
339c0 74 64 65 72 72 2c 20 22 2d 2d 20 77 61 72 6e 69  tderr, "-- warni
339d0 6e 67 3a 20 63 61 6e 6e 6f 74 20 66 69 6e 64 20  ng: cannot find 
339e0 68 6f 6d 65 20 64 69 72 65 63 74 6f 72 79 3b 22  home directory;"
339f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33a00 20 20 20 20 20 20 20 22 20 63 61 6e 6e 6f 74 20         " cannot 
33a10 72 65 61 64 20 7e 2f 2e 73 71 6c 69 74 65 72 63  read ~/.sqliterc
33a20 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75  \n");.      retu
33a30 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  rn;.    }.    sq
33a40 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
33a50 28 29 3b 0a 20 20 20 20 7a 42 75 66 20 3d 20 73  ();.    zBuf = s
33a60 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
33a70 25 73 2f 2e 73 71 6c 69 74 65 72 63 22 2c 68 6f  %s/.sqliterc",ho
33a80 6d 65 5f 64 69 72 29 3b 0a 20 20 20 20 73 71 6c  me_dir);.    sql
33a90 69 74 65 72 63 20 3d 20 7a 42 75 66 3b 0a 20 20  iterc = zBuf;.  
33aa0 7d 0a 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 73  }.  in = fopen(s
33ab0 71 6c 69 74 65 72 63 2c 22 72 62 22 29 3b 0a 20  qliterc,"rb");. 
33ac0 20 69 66 28 20 69 6e 20 29 7b 0a 20 20 20 20 69   if( in ){.    i
33ad0 66 28 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65  f( stdin_is_inte
33ae0 72 61 63 74 69 76 65 20 29 7b 0a 20 20 20 20 20  ractive ){.     
33af0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
33b00 65 72 72 2c 22 2d 2d 20 4c 6f 61 64 69 6e 67 20  err,"-- Loading 
33b10 72 65 73 6f 75 72 63 65 73 20 66 72 6f 6d 20 25  resources from %
33b20 73 5c 6e 22 2c 73 71 6c 69 74 65 72 63 29 3b 0a  s\n",sqliterc);.
33b30 20 20 20 20 7d 0a 20 20 20 20 70 72 6f 63 65 73      }.    proces
33b40 73 5f 69 6e 70 75 74 28 70 2c 69 6e 29 3b 0a 20  s_input(p,in);. 
33b50 20 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a 20     fclose(in);. 
33b60 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65   }.  sqlite3_fre
33b70 65 28 7a 42 75 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  e(zBuf);.}../*.*
33b80 2a 20 53 68 6f 77 20 61 76 61 69 6c 61 62 6c 65  * Show available
33b90 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
33ba0 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20  tions.*/.static 
33bb0 63 6f 6e 73 74 20 63 68 61 72 20 7a 4f 70 74 69  const char zOpti
33bc0 6f 6e 73 5b 5d 20 3d 0a 20 20 22 20 20 20 2d 61  ons[] =.  "   -a
33bd0 73 63 69 69 20 20 20 20 20 20 20 20 20 20 20 20  scii            
33be0 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f     set output mo
33bf0 64 65 20 74 6f 20 27 61 73 63 69 69 27 5c 6e 22  de to 'ascii'\n"
33c00 0a 20 20 22 20 20 20 2d 62 61 69 6c 20 20 20 20  .  "   -bail    
33c10 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6f 70              stop
33c20 20 61 66 74 65 72 20 68 69 74 74 69 6e 67 20 61   after hitting a
33c30 6e 20 65 72 72 6f 72 5c 6e 22 0a 20 20 22 20 20  n error\n".  "  
33c40 20 2d 62 61 74 63 68 20 20 20 20 20 20 20 20 20   -batch         
33c50 20 20 20 20 20 20 66 6f 72 63 65 20 62 61 74 63        force batc
33c60 68 20 49 2f 4f 5c 6e 22 0a 20 20 22 20 20 20 2d  h I/O\n".  "   -
33c70 63 6f 6c 75 6d 6e 20 20 20 20 20 20 20 20 20 20  column          
33c80 20 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d      set output m
33c90 6f 64 65 20 74 6f 20 27 63 6f 6c 75 6d 6e 27 5c  ode to 'column'\
33ca0 6e 22 0a 20 20 22 20 20 20 2d 63 6d 64 20 43 4f  n".  "   -cmd CO
33cb0 4d 4d 41 4e 44 20 20 20 20 20 20 20 20 20 72 75  MMAND         ru
33cc0 6e 20 5c 22 43 4f 4d 4d 41 4e 44 5c 22 20 62 65  n \"COMMAND\" be
33cd0 66 6f 72 65 20 72 65 61 64 69 6e 67 20 73 74 64  fore reading std
33ce0 69 6e 5c 6e 22 0a 20 20 22 20 20 20 2d 63 73 76  in\n".  "   -csv
33cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d00 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65   set output mode
33d10 20 74 6f 20 27 63 73 76 27 5c 6e 22 0a 20 20 22   to 'csv'\n".  "
33d20 20 20 20 2d 65 63 68 6f 20 20 20 20 20 20 20 20     -echo        
33d30 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 63 6f          print co
33d40 6d 6d 61 6e 64 73 20 62 65 66 6f 72 65 20 65 78  mmands before ex
33d50 65 63 75 74 69 6f 6e 5c 6e 22 0a 20 20 22 20 20  ecution\n".  "  
33d60 20 2d 69 6e 69 74 20 46 49 4c 45 4e 41 4d 45 20   -init FILENAME 
33d70 20 20 20 20 20 20 72 65 61 64 2f 70 72 6f 63 65        read/proce
33d80 73 73 20 6e 61 6d 65 64 20 66 69 6c 65 5c 6e 22  ss named file\n"
33d90 0a 20 20 22 20 20 20 2d 5b 6e 6f 5d 68 65 61 64  .  "   -[no]head
33da0 65 72 20 20 20 20 20 20 20 20 20 20 74 75 72 6e  er          turn
33db0 20 68 65 61 64 65 72 73 20 6f 6e 20 6f 72 20 6f   headers on or o
33dc0 66 66 5c 6e 22 0a 23 69 66 20 64 65 66 69 6e 65  ff\n".#if define
33dd0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
33de0 4d 45 4d 53 59 53 33 29 20 7c 7c 20 64 65 66 69  MEMSYS3) || defi
33df0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
33e00 45 5f 4d 45 4d 53 59 53 35 29 0a 20 20 22 20 20  E_MEMSYS5).  "  
33e10 20 2d 68 65 61 70 20 53 49 5a 45 20 20 20 20 20   -heap SIZE     
33e20 20 20 20 20 20 20 53 69 7a 65 20 6f 66 20 68 65        Size of he
33e30 61 70 20 66 6f 72 20 6d 65 6d 73 79 73 33 20 6f  ap for memsys3 o
33e40 72 20 6d 65 6d 73 79 73 35 5c 6e 22 0a 23 65 6e  r memsys5\n".#en
33e50 64 69 66 0a 20 20 22 20 20 20 2d 68 65 6c 70 20  dif.  "   -help 
33e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
33e70 68 6f 77 20 74 68 69 73 20 6d 65 73 73 61 67 65  how this message
33e80 5c 6e 22 0a 20 20 22 20 20 20 2d 68 74 6d 6c 20  \n".  "   -html 
33e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
33ea0 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74  et output mode t
33eb0 6f 20 48 54 4d 4c 5c 6e 22 0a 20 20 22 20 20 20  o HTML\n".  "   
33ec0 2d 69 6e 74 65 72 61 63 74 69 76 65 20 20 20 20  -interactive    
33ed0 20 20 20 20 20 66 6f 72 63 65 20 69 6e 74 65 72       force inter
33ee0 61 63 74 69 76 65 20 49 2f 4f 5c 6e 22 0a 20 20  active I/O\n".  
33ef0 22 20 20 20 2d 6c 69 6e 65 20 20 20 20 20 20 20  "   -line       
33f00 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75 74           set out
33f10 70 75 74 20 6d 6f 64 65 20 74 6f 20 27 6c 69 6e  put mode to 'lin
33f20 65 27 5c 6e 22 0a 20 20 22 20 20 20 2d 6c 69 73  e'\n".  "   -lis
33f30 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
33f40 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65   set output mode
33f50 20 74 6f 20 27 6c 69 73 74 27 5c 6e 22 0a 20 20   to 'list'\n".  
33f60 22 20 20 20 2d 6c 6f 6f 6b 61 73 69 64 65 20 53  "   -lookaside S
33f70 49 5a 45 20 4e 20 20 20 20 75 73 65 20 4e 20 65  IZE N    use N e
33f80 6e 74 72 69 65 73 20 6f 66 20 53 5a 20 62 79 74  ntries of SZ byt
33f90 65 73 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  es for lookaside
33fa0 20 6d 65 6d 6f 72 79 5c 6e 22 0a 20 20 22 20 20   memory\n".  "  
33fb0 20 2d 6d 6d 61 70 20 4e 20 20 20 20 20 20 20 20   -mmap N        
33fc0 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 6d 6d        default mm
33fd0 61 70 20 73 69 7a 65 20 73 65 74 20 74 6f 20 4e  ap size set to N
33fe0 5c 6e 22 0a 23 69 66 64 65 66 20 53 51 4c 49 54  \n".#ifdef SQLIT
33ff0 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 50 4c  E_ENABLE_MULTIPL
34000 45 58 0a 20 20 22 20 20 20 2d 6d 75 6c 74 69 70  EX.  "   -multip
34010 6c 65 78 20 20 20 20 20 20 20 20 20 20 20 65 6e  lex           en
34020 61 62 6c 65 20 74 68 65 20 6d 75 6c 74 69 70 6c  able the multipl
34030 65 78 6f 72 20 56 46 53 5c 6e 22 0a 23 65 6e 64  exor VFS\n".#end
34040 69 66 0a 20 20 22 20 20 20 2d 6e 65 77 6c 69 6e  if.  "   -newlin
34050 65 20 53 45 50 20 20 20 20 20 20 20 20 20 73 65  e SEP         se
34060 74 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65 70  t output row sep
34070 61 72 61 74 6f 72 2e 20 44 65 66 61 75 6c 74 3a  arator. Default:
34080 20 27 5c 5c 6e 27 5c 6e 22 0a 20 20 22 20 20 20   '\\n'\n".  "   
34090 2d 6e 75 6c 6c 76 61 6c 75 65 20 54 45 58 54 20  -nullvalue TEXT 
340a0 20 20 20 20 20 73 65 74 20 74 65 78 74 20 73 74       set text st
340b0 72 69 6e 67 20 66 6f 72 20 4e 55 4c 4c 20 76 61  ring for NULL va
340c0 6c 75 65 73 2e 20 44 65 66 61 75 6c 74 20 27 27  lues. Default ''
340d0 5c 6e 22 0a 20 20 22 20 20 20 2d 70 61 67 65 63  \n".  "   -pagec
340e0 61 63 68 65 20 53 49 5a 45 20 4e 20 20 20 20 75  ache SIZE N    u
340f0 73 65 20 4e 20 73 6c 6f 74 73 20 6f 66 20 53 5a  se N slots of SZ
34100 20 62 79 74 65 73 20 65 61 63 68 20 66 6f 72 20   bytes each for 
34110 70 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  page cache memor
34120 79 5c 6e 22 0a 20 20 22 20 20 20 2d 71 75 6f 74  y\n".  "   -quot
34130 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
34140 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  set output mode 
34150 74 6f 20 27 71 75 6f 74 65 27 5c 6e 22 0a 20 20  to 'quote'\n".  
34160 22 20 20 20 2d 73 65 70 61 72 61 74 6f 72 20 53  "   -separator S
34170 45 50 20 20 20 20 20 20 20 73 65 74 20 6f 75 74  EP       set out
34180 70 75 74 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72  put column separ
34190 61 74 6f 72 2e 20 44 65 66 61 75 6c 74 3a 20 27  ator. Default: '
341a0 7c 27 5c 6e 22 0a 20 20 22 20 20 20 2d 73 74 61  |'\n".  "   -sta
341b0 74 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ts              
341c0 20 70 72 69 6e 74 20 6d 65 6d 6f 72 79 20 73 74   print memory st
341d0 61 74 73 20 62 65 66 6f 72 65 20 65 61 63 68 20  ats before each 
341e0 66 69 6e 61 6c 69 7a 65 5c 6e 22 0a 20 20 22 20  finalize\n".  " 
341f0 20 20 2d 76 65 72 73 69 6f 6e 20 20 20 20 20 20    -version      
34200 20 20 20 20 20 20 20 73 68 6f 77 20 53 51 4c 69         show SQLi
34210 74 65 20 76 65 72 73 69 6f 6e 5c 6e 22 0a 20 20  te version\n".  
34220 22 20 20 20 2d 76 66 73 20 4e 41 4d 45 20 20 20  "   -vfs NAME   
34230 20 20 20 20 20 20 20 20 20 75 73 65 20 4e 41 4d           use NAM
34240 45 20 61 73 20 74 68 65 20 64 65 66 61 75 6c 74  E as the default
34250 20 56 46 53 5c 6e 22 0a 23 69 66 64 65 66 20 53   VFS\n".#ifdef S
34260 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53  QLITE_ENABLE_VFS
34270 54 52 41 43 45 0a 20 20 22 20 20 20 2d 76 66 73  TRACE.  "   -vfs
34280 74 72 61 63 65 20 20 20 20 20 20 20 20 20 20 20  trace           
34290 20 65 6e 61 62 6c 65 20 74 72 61 63 69 6e 67 20   enable tracing 
342a0 6f 66 20 61 6c 6c 20 56 46 53 20 63 61 6c 6c 73  of all VFS calls
342b0 5c 6e 22 0a 23 65 6e 64 69 66 0a 3b 0a 73 74 61  \n".#endif.;.sta
342c0 74 69 63 20 76 6f 69 64 20 75 73 61 67 65 28 69  tic void usage(i
342d0 6e 74 20 73 68 6f 77 44 65 74 61 69 6c 29 7b 0a  nt showDetail){.
342e0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
342f0 64 65 72 72 2c 0a 20 20 20 20 20 20 22 55 73 61  derr,.      "Usa
34300 67 65 3a 20 25 73 20 5b 4f 50 54 49 4f 4e 53 5d  ge: %s [OPTIONS]
34310 20 46 49 4c 45 4e 41 4d 45 20 5b 53 51 4c 5d 5c   FILENAME [SQL]\
34320 6e 22 0a 20 20 20 20 20 20 22 46 49 4c 45 4e 41  n".      "FILENA
34330 4d 45 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  ME is the name o
34340 66 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61  f an SQLite data
34350 62 61 73 65 2e 20 41 20 6e 65 77 20 64 61 74 61  base. A new data
34360 62 61 73 65 20 69 73 20 63 72 65 61 74 65 64 5c  base is created\
34370 6e 22 0a 20 20 20 20 20 20 22 69 66 20 74 68 65  n".      "if the
34380 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 70   file does not p
34390 72 65 76 69 6f 75 73 6c 79 20 65 78 69 73 74 2e  reviously exist.
343a0 5c 6e 22 2c 20 41 72 67 76 30 29 3b 0a 20 20 69  \n", Argv0);.  i
343b0 66 28 20 73 68 6f 77 44 65 74 61 69 6c 20 29 7b  f( showDetail ){
343c0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
343d0 28 73 74 64 65 72 72 2c 20 22 4f 50 54 49 4f 4e  (stderr, "OPTION
343e0 53 20 69 6e 63 6c 75 64 65 3a 5c 6e 25 73 22 2c  S include:\n%s",
343f0 20 7a 4f 70 74 69 6f 6e 73 29 3b 0a 20 20 7d 65   zOptions);.  }e
34400 6c 73 65 7b 0a 20 20 20 20 72 61 77 5f 70 72 69  lse{.    raw_pri
34410 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 65  ntf(stderr, "Use
34420 20 74 68 65 20 2d 68 65 6c 70 20 6f 70 74 69 6f   the -help optio
34430 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  n for additional
34440 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29   information\n")
34450 3b 0a 20 20 7d 0a 20 20 65 78 69 74 28 31 29 3b  ;.  }.  exit(1);
34460 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61  .}../*.** Initia
34470 6c 69 7a 65 20 74 68 65 20 73 74 61 74 65 20 69  lize the state i
34480 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 64 61  nformation in da
34490 74 61 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  ta.*/.static voi
344a0 64 20 6d 61 69 6e 5f 69 6e 69 74 28 53 68 65 6c  d main_init(Shel
344b0 6c 53 74 61 74 65 20 2a 64 61 74 61 29 20 7b 0a  lState *data) {.
344c0 20 20 6d 65 6d 73 65 74 28 64 61 74 61 2c 20 30    memset(data, 0
344d0 2c 20 73 69 7a 65 6f 66 28 2a 64 61 74 61 29 29  , sizeof(*data))
344e0 3b 0a 20 20 64 61 74 61 2d 3e 6e 6f 72 6d 61 6c  ;.  data->normal
344f0 4d 6f 64 65 20 3d 20 64 61 74 61 2d 3e 63 4d 6f  Mode = data->cMo
34500 64 65 20 3d 20 64 61 74 61 2d 3e 6d 6f 64 65 20  de = data->mode 
34510 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 64  = MODE_List;.  d
34520 61 74 61 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e  ata->autoExplain
34530 20 3d 20 31 3b 0a 20 20 6d 65 6d 63 70 79 28 64   = 1;.  memcpy(d
34540 61 74 61 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  ata->colSeparato
34550 72 2c 53 45 50 5f 43 6f 6c 75 6d 6e 2c 20 32 29  r,SEP_Column, 2)
34560 3b 0a 20 20 6d 65 6d 63 70 79 28 64 61 74 61 2d  ;.  memcpy(data-
34570 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 53 45  >rowSeparator,SE
34580 50 5f 52 6f 77 2c 20 32 29 3b 0a 20 20 64 61 74  P_Row, 2);.  dat
34590 61 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  a->showHeader = 
345a0 30 3b 0a 20 20 64 61 74 61 2d 3e 73 68 65 6c 6c  0;.  data->shell
345b0 46 6c 67 73 20 3d 20 53 48 46 4c 47 5f 4c 6f 6f  Flgs = SHFLG_Loo
345c0 6b 61 73 69 64 65 3b 0a 20 20 73 71 6c 69 74 65  kaside;.  sqlite
345d0 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
345e0 43 4f 4e 46 49 47 5f 55 52 49 2c 20 31 29 3b 0a  CONFIG_URI, 1);.
345f0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
34600 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c  (SQLITE_CONFIG_L
34610 4f 47 2c 20 73 68 65 6c 6c 4c 6f 67 2c 20 64 61  OG, shellLog, da
34620 74 61 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  ta);.  sqlite3_c
34630 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
34640 46 49 47 5f 4d 55 4c 54 49 54 48 52 45 41 44 29  FIG_MULTITHREAD)
34650 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  ;.  sqlite3_snpr
34660 69 6e 74 66 28 73 69 7a 65 6f 66 28 6d 61 69 6e  intf(sizeof(main
34670 50 72 6f 6d 70 74 29 2c 20 6d 61 69 6e 50 72 6f  Prompt), mainPro
34680 6d 70 74 2c 22 73 71 6c 69 74 65 3e 20 22 29 3b  mpt,"sqlite> ");
34690 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  .  sqlite3_snpri
346a0 6e 74 66 28 73 69 7a 65 6f 66 28 63 6f 6e 74 69  ntf(sizeof(conti
346b0 6e 75 65 50 72 6f 6d 70 74 29 2c 20 63 6f 6e 74  nuePrompt), cont
346c0 69 6e 75 65 50 72 6f 6d 70 74 2c 22 20 20 20 2e  inuePrompt,"   .
346d0 2e 2e 3e 20 22 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ..> ");.}../*.**
346e0 20 4f 75 74 70 75 74 20 74 65 78 74 20 74 6f 20   Output text to 
346f0 74 68 65 20 63 6f 6e 73 6f 6c 65 20 69 6e 20 61  the console in a
34700 20 66 6f 6e 74 20 74 68 61 74 20 61 74 74 72 61   font that attra
34710 63 74 73 20 65 78 74 72 61 20 61 74 74 65 6e 74  cts extra attent
34720 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 5f  ion..*/.#ifdef _
34730 57 49 4e 33 32 0a 73 74 61 74 69 63 20 76 6f 69  WIN32.static voi
34740 64 20 70 72 69 6e 74 42 6f 6c 64 28 63 6f 6e 73  d printBold(cons
34750 74 20 63 68 61 72 20 2a 7a 54 65 78 74 29 7b 0a  t char *zText){.
34760 20 20 48 41 4e 44 4c 45 20 6f 75 74 20 3d 20 47    HANDLE out = G
34770 65 74 53 74 64 48 61 6e 64 6c 65 28 53 54 44 5f  etStdHandle(STD_
34780 4f 55 54 50 55 54 5f 48 41 4e 44 4c 45 29 3b 0a  OUTPUT_HANDLE);.
34790 20 20 43 4f 4e 53 4f 4c 45 5f 53 43 52 45 45 4e    CONSOLE_SCREEN
347a0 5f 42 55 46 46 45 52 5f 49 4e 46 4f 20 64 65 66  _BUFFER_INFO def
347b0 61 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 3b 0a  aultScreenInfo;.
347c0 20 20 47 65 74 43 6f 6e 73 6f 6c 65 53 63 72 65    GetConsoleScre
347d0 65 6e 42 75 66 66 65 72 49 6e 66 6f 28 6f 75 74  enBufferInfo(out
347e0 2c 20 26 64 65 66 61 75 6c 74 53 63 72 65 65 6e  , &defaultScreen
347f0 49 6e 66 6f 29 3b 0a 20 20 53 65 74 43 6f 6e 73  Info);.  SetCons
34800 6f 6c 65 54 65 78 74 41 74 74 72 69 62 75 74 65  oleTextAttribute
34810 28 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20 46  (out,.         F
34820 4f 52 45 47 52 4f 55 4e 44 5f 52 45 44 7c 46 4f  OREGROUND_RED|FO
34830 52 45 47 52 4f 55 4e 44 5f 49 4e 54 45 4e 53 49  REGROUND_INTENSI
34840 54 59 0a 20 20 29 3b 0a 20 20 70 72 69 6e 74 66  TY.  );.  printf
34850 28 22 25 73 22 2c 20 7a 54 65 78 74 29 3b 0a 20  ("%s", zText);. 
34860 20 53 65 74 43 6f 6e 73 6f 6c 65 54 65 78 74 41   SetConsoleTextA
34870 74 74 72 69 62 75 74 65 28 6f 75 74 2c 20 64 65  ttribute(out, de
34880 66 61 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 2e  faultScreenInfo.
34890 77 41 74 74 72 69 62 75 74 65 73 29 3b 0a 7d 0a  wAttributes);.}.
348a0 23 65 6c 73 65 0a 73 74 61 74 69 63 20 76 6f 69  #else.static voi
348b0 64 20 70 72 69 6e 74 42 6f 6c 64 28 63 6f 6e 73  d printBold(cons
348c0 74 20 63 68 61 72 20 2a 7a 54 65 78 74 29 7b 0a  t char *zText){.
348d0 20 20 70 72 69 6e 74 66 28 22 5c 30 33 33 5b 31    printf("\033[1
348e0 6d 25 73 5c 30 33 33 5b 30 6d 22 2c 20 7a 54 65  m%s\033[0m", zTe
348f0 78 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  xt);.}.#endif../
34900 2a 0a 2a 2a 20 47 65 74 20 74 68 65 20 61 72 67  *.** Get the arg
34910 75 6d 65 6e 74 20 74 6f 20 61 6e 20 2d 2d 6f 70  ument to an --op
34920 74 69 6f 6e 2e 20 20 54 68 72 6f 77 20 61 6e 20  tion.  Throw an 
34930 65 72 72 6f 72 20 61 6e 64 20 64 69 65 20 69 66  error and die if
34940 20 6e 6f 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20   no argument.** 
34950 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f  is available..*/
34960 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 63 6d  .static char *cm
34970 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
34980 75 65 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61  ue(int argc, cha
34990 72 20 2a 2a 61 72 67 76 2c 20 69 6e 74 20 69 29  r **argv, int i)
349a0 7b 0a 20 20 69 66 28 20 69 3d 3d 61 72 67 63 20  {.  if( i==argc 
349b0 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  ){.    utf8_prin
349c0 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 20  tf(stderr, "%s: 
349d0 45 72 72 6f 72 3a 20 6d 69 73 73 69 6e 67 20 61  Error: missing a
349e0 72 67 75 6d 65 6e 74 20 74 6f 20 25 73 5c 6e 22  rgument to %s\n"
349f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72  ,.            ar
34a00 67 76 5b 30 5d 2c 20 61 72 67 76 5b 61 72 67 63  gv[0], argv[argc
34a10 2d 31 5d 29 3b 0a 20 20 20 20 65 78 69 74 28 31  -1]);.    exit(1
34a20 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
34a30 61 72 67 76 5b 69 5d 3b 0a 7d 0a 0a 23 69 66 6e  argv[i];.}..#ifn
34a40 64 65 66 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c  def SQLITE_SHELL
34a50 5f 49 53 5f 55 54 46 38 0a 23 20 20 69 66 20 28  _IS_UTF8.#  if (
34a60 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
34a70 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
34a80 29 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 4d  )) && defined(_M
34a90 53 43 5f 56 45 52 29 0a 23 20 20 20 20 64 65 66  SC_VER).#    def
34aa0 69 6e 65 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c  ine SQLITE_SHELL
34ab0 5f 49 53 5f 55 54 46 38 20 20 20 20 20 20 20 20  _IS_UTF8        
34ac0 20 20 28 30 29 0a 23 20 20 65 6c 73 65 0a 23 20    (0).#  else.# 
34ad0 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
34ae0 5f 53 48 45 4c 4c 5f 49 53 5f 55 54 46 38 20 20  _SHELL_IS_UTF8  
34af0 20 20 20 20 20 20 20 20 28 31 29 0a 23 20 20 65          (1).#  e
34b00 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 23 69 66  ndif.#endif..#if
34b10 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53   SQLITE_SHELL_IS
34b20 5f 55 54 46 38 0a 69 6e 74 20 53 51 4c 49 54 45  _UTF8.int SQLITE
34b30 5f 43 44 45 43 4c 20 6d 61 69 6e 28 69 6e 74 20  _CDECL main(int 
34b40 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67  argc, char **arg
34b50 76 29 7b 0a 23 65 6c 73 65 0a 69 6e 74 20 53 51  v){.#else.int SQ
34b60 4c 49 54 45 5f 43 44 45 43 4c 20 77 6d 61 69 6e  LITE_CDECL wmain
34b70 28 69 6e 74 20 61 72 67 63 2c 20 77 63 68 61 72  (int argc, wchar
34b80 5f 74 20 2a 2a 77 61 72 67 76 29 7b 0a 20 20 63  _t **wargv){.  c
34b90 68 61 72 20 2a 2a 61 72 67 76 3b 0a 23 65 6e 64  har **argv;.#end
34ba0 69 66 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  if.  char *zErrM
34bb0 73 67 20 3d 20 30 3b 0a 20 20 53 68 65 6c 6c 53  sg = 0;.  ShellS
34bc0 74 61 74 65 20 64 61 74 61 3b 0a 20 20 63 6f 6e  tate data;.  con
34bd0 73 74 20 63 68 61 72 20 2a 7a 49 6e 69 74 46 69  st char *zInitFi
34be0 6c 65 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b  le = 0;.  int i;
34bf0 0a 20 20 69 6e 74 20 72 63 20 3d 20 30 3b 0a 20  .  int rc = 0;. 
34c00 20 69 6e 74 20 77 61 72 6e 49 6e 6d 65 6d 6f 72   int warnInmemor
34c10 79 44 62 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  yDb = 0;.  int r
34c20 65 61 64 53 74 64 69 6e 20 3d 20 31 3b 0a 20 20  eadStdin = 1;.  
34c30 69 6e 74 20 6e 43 6d 64 20 3d 20 30 3b 0a 20 20  int nCmd = 0;.  
34c40 63 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20 30  char **azCmd = 0
34c50 3b 0a 0a 20 20 73 65 74 42 69 6e 61 72 79 4d 6f  ;..  setBinaryMo
34c60 64 65 28 73 74 64 69 6e 2c 20 30 29 3b 0a 20 20  de(stdin, 0);.  
34c70 73 65 74 76 62 75 66 28 73 74 64 65 72 72 2c 20  setvbuf(stderr, 
34c80 30 2c 20 5f 49 4f 4e 42 46 2c 20 30 29 3b 20 2f  0, _IONBF, 0); /
34c90 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 74 64 65  * Make sure stde
34ca0 72 72 20 69 73 20 75 6e 62 75 66 66 65 72 65 64  rr is unbuffered
34cb0 20 2a 2f 0a 20 20 73 74 64 69 6e 5f 69 73 5f 69   */.  stdin_is_i
34cc0 6e 74 65 72 61 63 74 69 76 65 20 3d 20 69 73 61  nteractive = isa
34cd0 74 74 79 28 30 29 3b 0a 20 20 73 74 64 6f 75 74  tty(0);.  stdout
34ce0 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20 3d 20 69 73  _is_console = is
34cf0 61 74 74 79 28 31 29 3b 0a 0a 23 69 66 20 55 53  atty(1);..#if US
34d00 45 5f 53 59 53 54 45 4d 5f 53 51 4c 49 54 45 2b  E_SYSTEM_SQLITE+
34d10 30 21 3d 31 0a 20 20 69 66 28 20 73 74 72 6e 63  0!=1.  if( strnc
34d20 6d 70 28 73 71 6c 69 74 65 33 5f 73 6f 75 72 63  mp(sqlite3_sourc
34d30 65 69 64 28 29 2c 53 51 4c 49 54 45 5f 53 4f 55  eid(),SQLITE_SOU
34d40 52 43 45 5f 49 44 2c 36 30 29 21 3d 30 20 29 7b  RCE_ID,60)!=0 ){
34d50 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
34d60 28 73 74 64 65 72 72 2c 20 22 53 51 4c 69 74 65  (stderr, "SQLite
34d70 20 68 65 61 64 65 72 20 61 6e 64 20 73 6f 75 72   header and sour
34d80 63 65 20 76 65 72 73 69 6f 6e 20 6d 69 73 6d 61  ce version misma
34d90 74 63 68 5c 6e 25 73 5c 6e 25 73 5c 6e 22 2c 0a  tch\n%s\n%s\n",.
34da0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
34db0 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20  te3_sourceid(), 
34dc0 53 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49 44  SQLITE_SOURCE_ID
34dd0 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a  );.    exit(1);.
34de0 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 6d 61 69    }.#endif.  mai
34df0 6e 5f 69 6e 69 74 28 26 64 61 74 61 29 3b 0a 23  n_init(&data);.#
34e00 69 66 20 21 53 51 4c 49 54 45 5f 53 48 45 4c 4c  if !SQLITE_SHELL
34e10 5f 49 53 5f 55 54 46 38 0a 20 20 73 71 6c 69 74  _IS_UTF8.  sqlit
34e20 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b  e3_initialize();
34e30 0a 20 20 61 72 67 76 20 3d 20 73 71 6c 69 74 65  .  argv = sqlite
34e40 33 5f 6d 61 6c 6c 6f 63 36 34 28 73 69 7a 65 6f  3_malloc64(sizeo
34e50 66 28 61 72 67 76 5b 30 5d 29 2a 61 72 67 63 29  f(argv[0])*argc)
34e60 3b 0a 20 20 69 66 28 20 61 72 67 76 3d 3d 30 20  ;.  if( argv==0 
34e70 29 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74  ){.    raw_print
34e80 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f  f(stderr, "out o
34e90 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20  f memory\n");.  
34ea0 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20    exit(1);.  }. 
34eb0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
34ec0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 72 67 76  ; i++){.    argv
34ed0 5b 69 5d 20 3d 20 73 71 6c 69 74 65 33 5f 77 69  [i] = sqlite3_wi
34ee0 6e 33 32 5f 75 6e 69 63 6f 64 65 5f 74 6f 5f 75  n32_unicode_to_u
34ef0 74 66 38 28 77 61 72 67 76 5b 69 5d 29 3b 0a 20  tf8(wargv[i]);. 
34f00 20 20 20 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d     if( argv[i]==
34f10 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
34f20 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f  rintf(stderr, "o
34f30 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut of memory\n")
34f40 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31 29 3b  ;.      exit(1);
34f50 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
34f60 66 0a 20 20 61 73 73 65 72 74 28 20 61 72 67 63  f.  assert( argc
34f70 3e 3d 31 20 26 26 20 61 72 67 76 20 26 26 20 61  >=1 && argv && a
34f80 72 67 76 5b 30 5d 20 29 3b 0a 20 20 41 72 67 76  rgv[0] );.  Argv
34f90 30 20 3d 20 61 72 67 76 5b 30 5d 3b 0a 0a 20 20  0 = argv[0];..  
34fa0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20  /* Make sure we 
34fb0 68 61 76 65 20 61 20 76 61 6c 69 64 20 73 69 67  have a valid sig
34fc0 6e 61 6c 20 68 61 6e 64 6c 65 72 20 65 61 72 6c  nal handler earl
34fd0 79 2c 20 62 65 66 6f 72 65 20 61 6e 79 74 68 69  y, before anythi
34fe0 6e 67 0a 20 20 2a 2a 20 65 6c 73 65 20 69 73 20  ng.  ** else is 
34ff0 64 6f 6e 65 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  done..  */.#ifde
35000 66 20 53 49 47 49 4e 54 0a 20 20 73 69 67 6e 61  f SIGINT.  signa
35010 6c 28 53 49 47 49 4e 54 2c 20 69 6e 74 65 72 72  l(SIGINT, interr
35020 75 70 74 5f 68 61 6e 64 6c 65 72 29 3b 0a 23 65  upt_handler);.#e
35030 6c 69 66 20 28 64 65 66 69 6e 65 64 28 5f 57 49  lif (defined(_WI
35040 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  N32) || defined(
35050 57 49 4e 33 32 29 29 20 26 26 20 21 64 65 66 69  WIN32)) && !defi
35060 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a  ned(_WIN32_WCE).
35070 20 20 53 65 74 43 6f 6e 73 6f 6c 65 43 74 72 6c    SetConsoleCtrl
35080 48 61 6e 64 6c 65 72 28 43 6f 6e 73 6f 6c 65 43  Handler(ConsoleC
35090 74 72 6c 48 61 6e 64 6c 65 72 2c 20 54 52 55 45  trlHandler, TRUE
350a0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
350b0 66 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 44  f SQLITE_SHELL_D
350c0 42 4e 41 4d 45 5f 50 52 4f 43 0a 20 20 7b 0a 20  BNAME_PROC.  {. 
350d0 20 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c     /* If the SQL
350e0 49 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45  ITE_SHELL_DBNAME
350f0 5f 50 52 4f 43 20 6d 61 63 72 6f 20 69 73 20 64  _PROC macro is d
35100 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 69 74 20  efined, then it 
35110 69 73 20 74 68 65 20 6e 61 6d 65 0a 20 20 20 20  is the name.    
35120 2a 2a 20 6f 66 20 61 20 43 2d 66 75 6e 63 74 69  ** of a C-functi
35130 6f 6e 20 74 68 61 74 20 77 69 6c 6c 20 70 72 6f  on that will pro
35140 76 69 64 65 20 74 68 65 20 6e 61 6d 65 20 6f 66  vide the name of
35150 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
35160 6c 65 2e 20 20 55 73 65 0a 20 20 20 20 2a 2a 20  le.  Use.    ** 
35170 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  this compile-tim
35180 65 20 6f 70 74 69 6f 6e 20 74 6f 20 65 6d 62 65  e option to embe
35190 64 20 74 68 69 73 20 73 68 65 6c 6c 20 70 72 6f  d this shell pro
351a0 67 72 61 6d 20 69 6e 20 6c 61 72 67 65 72 0a 20  gram in larger. 
351b0 20 20 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f     ** applicatio
351c0 6e 73 2e 20 2a 2f 0a 20 20 20 20 65 78 74 65 72  ns. */.    exter
351d0 6e 20 76 6f 69 64 20 53 51 4c 49 54 45 5f 53 48  n void SQLITE_SH
351e0 45 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52 4f 43 28  ELL_DBNAME_PROC(
351f0 63 6f 6e 73 74 20 63 68 61 72 2a 2a 29 3b 0a 20  const char**);. 
35200 20 20 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f     SQLITE_SHELL_
35210 44 42 4e 41 4d 45 5f 50 52 4f 43 28 26 64 61 74  DBNAME_PROC(&dat
35220 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 29 3b 0a  a.zDbFilename);.
35230 20 20 20 20 77 61 72 6e 49 6e 6d 65 6d 6f 72 79      warnInmemory
35240 44 62 20 3d 20 30 3b 0a 20 20 7d 0a 23 65 6e 64  Db = 0;.  }.#end
35250 69 66 0a 0a 20 20 2f 2a 20 44 6f 20 61 6e 20 69  if..  /* Do an i
35260 6e 69 74 69 61 6c 20 70 61 73 73 20 74 68 72 6f  nitial pass thro
35270 75 67 68 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d  ugh the command-
35280 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  line argument to
35290 20 6c 6f 63 61 74 65 0a 20 20 2a 2a 20 74 68 65   locate.  ** the
352a0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
352b0 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20  abase file, the 
352c0 6e 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 69 74  name of the init
352d0 69 61 6c 69 7a 61 74 69 6f 6e 20 66 69 6c 65 2c  ialization file,
352e0 0a 20 20 2a 2a 20 74 68 65 20 73 69 7a 65 20 6f  .  ** the size o
352f0 66 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76  f the alternativ
35300 65 20 6d 61 6c 6c 6f 63 20 68 65 61 70 2c 0a 20  e malloc heap,. 
35310 20 2a 2a 20 61 6e 64 20 74 68 65 20 66 69 72 73   ** and the firs
35320 74 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 78 65  t command to exe
35330 63 75 74 65 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72  cute..  */.  for
35340 28 69 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=1; i<argc; i+
35350 2b 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 3b  +){.    char *z;
35360 0a 20 20 20 20 7a 20 3d 20 61 72 67 76 5b 69 5d  .    z = argv[i]
35370 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 21 3d  ;.    if( z[0]!=
35380 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28  '-' ){.      if(
35390 20 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d   data.zDbFilenam
353a0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  e==0 ){.        
353b0 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65  data.zDbFilename
353c0 20 3d 20 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = z;.      }els
353d0 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 45 78  e{.        /* Ex
353e0 63 65 73 73 73 20 61 72 67 75 6d 65 6e 74 73 20  cesss arguments 
353f0 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
35400 61 73 20 53 51 4c 20 28 6f 72 20 64 6f 74 2d 63  as SQL (or dot-c
35410 6f 6d 6d 61 6e 64 73 29 20 61 6e 64 0a 20 20 20  ommands) and.   
35420 20 20 20 20 20 2a 2a 20 6d 65 61 6e 20 74 68 61       ** mean tha
35430 74 20 6e 6f 74 68 69 6e 67 20 69 73 20 72 65 61  t nothing is rea
35440 64 20 66 72 6f 6d 20 73 74 64 69 6e 20 2a 2f 0a  d from stdin */.
35450 20 20 20 20 20 20 20 20 72 65 61 64 53 74 64 69          readStdi
35460 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6e  n = 0;.        n
35470 43 6d 64 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61  Cmd++;.        a
35480 7a 43 6d 64 20 3d 20 72 65 61 6c 6c 6f 63 28 61  zCmd = realloc(a
35490 7a 43 6d 64 2c 20 73 69 7a 65 6f 66 28 61 7a 43  zCmd, sizeof(azC
354a0 6d 64 5b 30 5d 29 2a 6e 43 6d 64 29 3b 0a 20 20  md[0])*nCmd);.  
354b0 20 20 20 20 20 20 69 66 28 20 61 7a 43 6d 64 3d        if( azCmd=
354c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
354d0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
354e0 72 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  r, "out of memor
354f0 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  y\n");.         
35500 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20   exit(1);.      
35510 20 20 7d 0a 20 20 20 20 20 20 20 20 61 7a 43 6d    }.        azCm
35520 64 5b 6e 43 6d 64 2d 31 5d 20 3d 20 7a 3b 0a 20  d[nCmd-1] = z;. 
35530 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
35540 20 69 66 28 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29   if( z[1]=='-' )
35550 20 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20 73 74   z++;.    if( st
35560 72 63 6d 70 28 7a 2c 22 2d 73 65 70 61 72 61 74  rcmp(z,"-separat
35570 6f 72 22 29 3d 3d 30 0a 20 20 20 20 20 7c 7c 20  or")==0.     || 
35580 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 75 6c 6c 76  strcmp(z,"-nullv
35590 61 6c 75 65 22 29 3d 3d 30 0a 20 20 20 20 20 7c  alue")==0.     |
355a0 7c 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 65 77  | strcmp(z,"-new
355b0 6c 69 6e 65 22 29 3d 3d 30 0a 20 20 20 20 20 7c  line")==0.     |
355c0 7c 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 6d 64  | strcmp(z,"-cmd
355d0 22 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20  ")==0.    ){.   
355e0 20 20 20 28 76 6f 69 64 29 63 6d 64 6c 69 6e 65     (void)cmdline
355f0 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
35600 67 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b 0a  gc, argv, ++i);.
35610 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
35620 72 63 6d 70 28 7a 2c 22 2d 69 6e 69 74 22 29 3d  rcmp(z,"-init")=
35630 3d 30 20 29 7b 0a 20 20 20 20 20 20 7a 49 6e 69  =0 ){.      zIni
35640 74 46 69 6c 65 20 3d 20 63 6d 64 6c 69 6e 65 5f  tFile = cmdline_
35650 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67  option_value(arg
35660 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b 0a 20  c, argv, ++i);. 
35670 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
35680 63 6d 70 28 7a 2c 22 2d 62 61 74 63 68 22 29 3d  cmp(z,"-batch")=
35690 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4e  =0 ){.      /* N
356a0 65 65 64 20 74 6f 20 63 68 65 63 6b 20 66 6f 72  eed to check for
356b0 20 62 61 74 63 68 20 6d 6f 64 65 20 68 65 72 65   batch mode here
356c0 20 74 6f 20 73 6f 20 77 65 20 63 61 6e 20 61 76   to so we can av
356d0 6f 69 64 20 70 72 69 6e 74 69 6e 67 0a 20 20 20  oid printing.   
356e0 20 20 20 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f     ** informatio
356f0 6e 61 6c 20 6d 65 73 73 61 67 65 73 20 28 6c 69  nal messages (li
35700 6b 65 20 66 72 6f 6d 20 70 72 6f 63 65 73 73 5f  ke from process_
35710 73 71 6c 69 74 65 72 63 29 20 62 65 66 6f 72 65  sqliterc) before
35720 0a 20 20 20 20 20 20 2a 2a 20 77 65 20 64 6f 20  .      ** we do 
35730 74 68 65 20 61 63 74 75 61 6c 20 70 72 6f 63 65  the actual proce
35740 73 73 69 6e 67 20 6f 66 20 61 72 67 75 6d 65 6e  ssing of argumen
35750 74 73 20 6c 61 74 65 72 20 69 6e 20 61 20 73 65  ts later in a se
35760 63 6f 6e 64 20 70 61 73 73 2e 0a 20 20 20 20 20  cond pass..     
35770 20 2a 2f 0a 20 20 20 20 20 20 73 74 64 69 6e 5f   */.      stdin_
35780 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 3d  is_interactive =
35790 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   0;.    }else if
357a0 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68 65 61  ( strcmp(z,"-hea
357b0 70 22 29 3d 3d 30 20 29 7b 0a 23 69 66 20 64 65  p")==0 ){.#if de
357c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
357d0 42 4c 45 5f 4d 45 4d 53 59 53 33 29 20 7c 7c 20  BLE_MEMSYS3) || 
357e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
357f0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 29 0a 20  NABLE_MEMSYS5). 
35800 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
35810 2a 7a 53 69 7a 65 3b 0a 20 20 20 20 20 20 73 71  *zSize;.      sq
35820 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 48 65  lite3_int64 szHe
35830 61 70 3b 0a 0a 20 20 20 20 20 20 7a 53 69 7a 65  ap;..      zSize
35840 20 3d 20 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f   = cmdline_optio
35850 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72  n_value(argc, ar
35860 67 76 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 20 20  gv, ++i);.      
35870 73 7a 48 65 61 70 20 3d 20 69 6e 74 65 67 65 72  szHeap = integer
35880 56 61 6c 75 65 28 7a 53 69 7a 65 29 3b 0a 20 20  Value(zSize);.  
35890 20 20 20 20 69 66 28 20 73 7a 48 65 61 70 3e 30      if( szHeap>0
358a0 78 37 66 66 66 30 30 30 30 20 29 20 73 7a 48 65  x7fff0000 ) szHe
358b0 61 70 20 3d 20 30 78 37 66 66 66 30 30 30 30 3b  ap = 0x7fff0000;
358c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63  .      sqlite3_c
358d0 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
358e0 46 49 47 5f 48 45 41 50 2c 20 6d 61 6c 6c 6f 63  FIG_HEAP, malloc
358f0 28 28 69 6e 74 29 73 7a 48 65 61 70 29 2c 20 28  ((int)szHeap), (
35900 69 6e 74 29 73 7a 48 65 61 70 2c 20 36 34 29 3b  int)szHeap, 64);
35910 0a 23 65 6c 73 65 0a 20 20 20 20 20 20 28 76 6f  .#else.      (vo
35920 69 64 29 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f  id)cmdline_optio
35930 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72  n_value(argc, ar
35940 67 76 2c 20 2b 2b 69 29 3b 0a 23 65 6e 64 69 66  gv, ++i);.#endif
35950 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
35960 74 72 63 6d 70 28 7a 2c 22 2d 70 61 67 65 63 61  trcmp(z,"-pageca
35970 63 68 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  che")==0 ){.    
35980 20 20 69 6e 74 20 6e 2c 20 73 7a 3b 0a 20 20 20    int n, sz;.   
35990 20 20 20 73 7a 20 3d 20 28 69 6e 74 29 69 6e 74     sz = (int)int
359a0 65 67 65 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e  egerValue(cmdlin
359b0 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61  e_option_value(a
359c0 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a  rgc,argv,++i));.
359d0 20 20 20 20 20 20 69 66 28 20 73 7a 3e 37 30 30        if( sz>700
359e0 30 30 20 29 20 73 7a 20 3d 20 37 30 30 30 30 3b  00 ) sz = 70000;
359f0 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20  .      if( sz<0 
35a00 29 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20  ) sz = 0;.      
35a10 6e 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72  n = (int)integer
35a20 56 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70  Value(cmdline_op
35a30 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c  tion_value(argc,
35a40 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20  argv,++i));.    
35a50 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
35a60 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50  (SQLITE_CONFIG_P
35a70 41 47 45 43 41 43 48 45 2c 0a 20 20 20 20 20 20  AGECACHE,.      
35a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e                (n
35a90 3e 30 20 26 26 20 73 7a 3e 30 29 20 3f 20 6d 61  >0 && sz>0) ? ma
35aa0 6c 6c 6f 63 28 6e 2a 73 7a 29 20 3a 20 30 2c 20  lloc(n*sz) : 0, 
35ab0 73 7a 2c 20 6e 29 3b 0a 20 20 20 20 20 20 64 61  sz, n);.      da
35ac0 74 61 2e 73 68 65 6c 6c 46 6c 67 73 20 7c 3d 20  ta.shellFlgs |= 
35ad0 53 48 46 4c 47 5f 50 61 67 65 63 61 63 68 65 3b  SHFLG_Pagecache;
35ae0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
35af0 74 72 63 6d 70 28 7a 2c 22 2d 6c 6f 6f 6b 61 73  trcmp(z,"-lookas
35b00 69 64 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ide")==0 ){.    
35b10 20 20 69 6e 74 20 6e 2c 20 73 7a 3b 0a 20 20 20    int n, sz;.   
35b20 20 20 20 73 7a 20 3d 20 28 69 6e 74 29 69 6e 74     sz = (int)int
35b30 65 67 65 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e  egerValue(cmdlin
35b40 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61  e_option_value(a
35b50 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a  rgc,argv,++i));.
35b60 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20 29        if( sz<0 )
35b70 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20 6e   sz = 0;.      n
35b80 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56   = (int)integerV
35b90 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74  alue(cmdline_opt
35ba0 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
35bb0 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20  rgv,++i));.     
35bc0 20 69 66 28 20 6e 3c 30 20 29 20 6e 20 3d 20 30   if( n<0 ) n = 0
35bd0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
35be0 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f  config(SQLITE_CO
35bf0 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  NFIG_LOOKASIDE, 
35c00 73 7a 2c 20 6e 29 3b 0a 20 20 20 20 20 20 69 66  sz, n);.      if
35c10 28 20 73 7a 2a 6e 3d 3d 30 20 29 20 64 61 74 61  ( sz*n==0 ) data
35c20 2e 73 68 65 6c 6c 46 6c 67 73 20 26 3d 20 7e 53  .shellFlgs &= ~S
35c30 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64 65 3b 0a  HFLG_Lookaside;.
35c40 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
35c50 41 42 4c 45 5f 56 46 53 54 52 41 43 45 0a 20 20  ABLE_VFSTRACE.  
35c60 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
35c70 6d 70 28 7a 2c 22 2d 76 66 73 74 72 61 63 65 22  mp(z,"-vfstrace"
35c80 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 65 78  )==0 ){.      ex
35c90 74 65 72 6e 20 69 6e 74 20 76 66 73 74 72 61 63  tern int vfstrac
35ca0 65 5f 72 65 67 69 73 74 65 72 28 0a 20 20 20 20  e_register(.    
35cb0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
35cc0 2a 7a 54 72 61 63 65 4e 61 6d 65 2c 0a 20 20 20  *zTraceName,.   
35cd0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
35ce0 20 2a 7a 4f 6c 64 56 66 73 4e 61 6d 65 2c 0a 20   *zOldVfsName,. 
35cf0 20 20 20 20 20 20 20 20 69 6e 74 20 28 2a 78 4f          int (*xO
35d00 75 74 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ut)(const char*,
35d10 76 6f 69 64 2a 29 2c 0a 20 20 20 20 20 20 20 20  void*),.        
35d20 20 76 6f 69 64 20 2a 70 4f 75 74 41 72 67 2c 0a   void *pOutArg,.
35d30 20 20 20 20 20 20 20 20 20 69 6e 74 20 6d 61 6b           int mak
35d40 65 44 65 66 61 75 6c 74 0a 20 20 20 20 20 20 29  eDefault.      )
35d50 3b 0a 20 20 20 20 20 20 76 66 73 74 72 61 63 65  ;.      vfstrace
35d60 5f 72 65 67 69 73 74 65 72 28 22 74 72 61 63 65  _register("trace
35d70 22 2c 30 2c 28 69 6e 74 28 2a 29 28 63 6f 6e 73  ",0,(int(*)(cons
35d80 74 20 63 68 61 72 2a 2c 76 6f 69 64 2a 29 29 66  t char*,void*))f
35d90 70 75 74 73 2c 73 74 64 65 72 72 2c 31 29 3b 0a  puts,stderr,1);.
35da0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
35db0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54  LITE_ENABLE_MULT
35dc0 49 50 4c 45 58 0a 20 20 20 20 7d 65 6c 73 65 20  IPLEX.    }else 
35dd0 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d  if( strcmp(z,"-m
35de0 75 6c 74 69 70 6c 65 78 22 29 3d 3d 30 20 29 7b  ultiplex")==0 ){
35df0 0a 20 20 20 20 20 20 65 78 74 65 72 6e 20 69 6e  .      extern in
35e00 74 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70  t sqlite3_multip
35e10 6c 65 5f 69 6e 69 74 69 61 6c 69 7a 65 28 63 6f  le_initialize(co
35e20 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
35e30 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75        sqlite3_mu
35e40 6c 74 69 70 6c 65 78 5f 69 6e 69 74 69 61 6c 69  ltiplex_initiali
35e50 7a 65 28 30 2c 20 31 29 3b 0a 23 65 6e 64 69 66  ze(0, 1);.#endif
35e60 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
35e70 74 72 63 6d 70 28 7a 2c 22 2d 6d 6d 61 70 22 29  trcmp(z,"-mmap")
35e80 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
35e90 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 20 3d 20  ite3_int64 sz = 
35ea0 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64  integerValue(cmd
35eb0 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
35ec0 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
35ed0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
35ee0 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43  _config(SQLITE_C
35ef0 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 2c  ONFIG_MMAP_SIZE,
35f00 20 73 7a 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65   sz, sz);.    }e
35f10 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
35f20 2c 22 2d 76 66 73 22 29 3d 3d 30 20 29 7b 0a 20  ,"-vfs")==0 ){. 
35f30 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
35f40 20 2a 70 56 66 73 20 3d 20 73 71 6c 69 74 65 33   *pVfs = sqlite3
35f50 5f 76 66 73 5f 66 69 6e 64 28 63 6d 64 6c 69 6e  _vfs_find(cmdlin
35f60 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61  e_option_value(a
35f70 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a  rgc,argv,++i));.
35f80 20 20 20 20 20 20 69 66 28 20 70 56 66 73 20 29        if( pVfs )
35f90 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
35fa0 33 5f 76 66 73 5f 72 65 67 69 73 74 65 72 28 70  3_vfs_register(p
35fb0 56 66 73 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  Vfs, 1);.      }
35fc0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 74  else{.        ut
35fd0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
35fe0 2c 20 22 6e 6f 20 73 75 63 68 20 56 46 53 3a 20  , "no such VFS: 
35ff0 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 72 67 76 5b  \"%s\"\n", argv[
36000 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 65 78 69  i]);.        exi
36010 74 28 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  t(1);.      }.  
36020 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 64 61    }.  }.  if( da
36030 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 3d 3d  ta.zDbFilename==
36040 30 20 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  0 ){.#ifndef SQL
36050 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44  ITE_OMIT_MEMORYD
36060 42 0a 20 20 20 20 64 61 74 61 2e 7a 44 62 46 69  B.    data.zDbFi
36070 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72  lename = ":memor
36080 79 3a 22 3b 0a 20 20 20 20 77 61 72 6e 49 6e 6d  y:";.    warnInm
36090 65 6d 6f 72 79 44 62 20 3d 20 61 72 67 63 3d 3d  emoryDb = argc==
360a0 31 3b 0a 23 65 6c 73 65 0a 20 20 20 20 75 74 66  1;.#else.    utf
360b0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
360c0 22 25 73 3a 20 45 72 72 6f 72 3a 20 6e 6f 20 64  "%s: Error: no d
360d0 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65  atabase filename
360e0 20 73 70 65 63 69 66 69 65 64 5c 6e 22 2c 20 41   specified\n", A
360f0 72 67 76 30 29 3b 0a 20 20 20 20 72 65 74 75 72  rgv0);.    retur
36100 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a  n 1;.#endif.  }.
36110 20 20 64 61 74 61 2e 6f 75 74 20 3d 20 73 74 64    data.out = std
36120 6f 75 74 3b 0a 0a 20 20 2f 2a 20 47 6f 20 61 68  out;..  /* Go ah
36130 65 61 64 20 61 6e 64 20 6f 70 65 6e 20 74 68 65  ead and open the
36140 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
36150 66 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69  f it already exi
36160 73 74 73 2e 20 20 49 66 20 74 68 65 0a 20 20 2a  sts.  If the.  *
36170 2a 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20  * file does not 
36180 65 78 69 73 74 2c 20 64 65 6c 61 79 20 6f 70 65  exist, delay ope
36190 6e 69 6e 67 20 69 74 2e 20 20 54 68 69 73 20 70  ning it.  This p
361a0 72 65 76 65 6e 74 73 20 65 6d 70 74 79 20 64 61  revents empty da
361b0 74 61 62 61 73 65 0a 20 20 2a 2a 20 66 69 6c 65  tabase.  ** file
361c0 73 20 66 72 6f 6d 20 62 65 69 6e 67 20 63 72 65  s from being cre
361d0 61 74 65 64 20 69 66 20 61 20 75 73 65 72 20 6d  ated if a user m
361e0 69 73 74 79 70 65 73 20 74 68 65 20 64 61 74 61  istypes the data
361f0 62 61 73 65 20 6e 61 6d 65 20 61 72 67 75 6d 65  base name argume
36200 6e 74 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 73  nt.  ** to the s
36210 71 6c 69 74 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  qlite command-li
36220 6e 65 20 74 6f 6f 6c 2e 0a 20 20 2a 2f 0a 20 20  ne tool..  */.  
36230 69 66 28 20 61 63 63 65 73 73 28 64 61 74 61 2e  if( access(data.
36240 7a 44 62 46 69 6c 65 6e 61 6d 65 2c 20 30 29 3d  zDbFilename, 0)=
36250 3d 30 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64  =0 ){.    open_d
36260 62 28 26 64 61 74 61 2c 20 30 29 3b 0a 20 20 7d  b(&data, 0);.  }
36270 0a 0a 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 74  ..  /* Process t
36280 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
36290 6e 20 66 69 6c 65 20 69 66 20 74 68 65 72 65 20  n file if there 
362a0 69 73 20 6f 6e 65 2e 20 20 49 66 20 6e 6f 20 2d  is one.  If no -
362b0 69 6e 69 74 20 6f 70 74 69 6f 6e 0a 20 20 2a 2a  init option.  **
362c0 20 69 73 20 67 69 76 65 6e 20 6f 6e 20 74 68 65   is given on the
362d0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 6c   command line, l
362e0 6f 6f 6b 20 66 6f 72 20 61 20 66 69 6c 65 20 6e  ook for a file n
362f0 61 6d 65 64 20 7e 2f 2e 73 71 6c 69 74 65 72 63  amed ~/.sqliterc
36300 20 61 6e 64 0a 20 20 2a 2a 20 74 72 79 20 74 6f   and.  ** try to
36310 20 70 72 6f 63 65 73 73 20 69 74 2e 0a 20 20 2a   process it..  *
36320 2f 0a 20 20 70 72 6f 63 65 73 73 5f 73 71 6c 69  /.  process_sqli
36330 74 65 72 63 28 26 64 61 74 61 2c 7a 49 6e 69 74  terc(&data,zInit
36340 46 69 6c 65 29 3b 0a 0a 20 20 2f 2a 20 4d 61 6b  File);..  /* Mak
36350 65 20 61 20 73 65 63 6f 6e 64 20 70 61 73 73 20  e a second pass 
36360 74 68 72 6f 75 67 68 20 74 68 65 20 63 6f 6d 6d  through the comm
36370 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e  and-line argumen
36380 74 20 61 6e 64 20 73 65 74 0a 20 20 2a 2a 20 6f  t and set.  ** o
36390 70 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 73 65  ptions.  This se
363a0 63 6f 6e 64 20 70 61 73 73 20 69 73 20 64 65 6c  cond pass is del
363b0 61 79 65 64 20 75 6e 74 69 6c 20 61 66 74 65 72  ayed until after
363c0 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
363d0 69 6f 6e 0a 20 20 2a 2a 20 66 69 6c 65 20 69 73  ion.  ** file is
363e0 20 70 72 6f 63 65 73 73 65 64 20 73 6f 20 74 68   processed so th
363f0 61 74 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  at the command-l
36400 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20 77 69  ine arguments wi
36410 6c 6c 20 6f 76 65 72 72 69 64 65 0a 20 20 2a 2a  ll override.  **
36420 20 73 65 74 74 69 6e 67 73 20 69 6e 20 74 68 65   settings in the
36430 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
36440 66 69 6c 65 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72  file..  */.  for
36450 28 69 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=1; i<argc; i+
36460 2b 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20  +){.    char *z 
36470 3d 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20 20 69  = argv[i];.    i
36480 66 28 20 7a 5b 30 5d 21 3d 27 2d 27 20 29 20 63  f( z[0]!='-' ) c
36490 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 69 66 28  ontinue;.    if(
364a0 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b 20 7a 2b   z[1]=='-' ){ z+
364b0 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72  +; }.    if( str
364c0 63 6d 70 28 7a 2c 22 2d 69 6e 69 74 22 29 3d 3d  cmp(z,"-init")==
364d0 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a  0 ){.      i++;.
364e0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
364f0 72 63 6d 70 28 7a 2c 22 2d 68 74 6d 6c 22 29 3d  rcmp(z,"-html")=
36500 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61  =0 ){.      data
36510 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 48 74 6d  .mode = MODE_Htm
36520 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  l;.    }else if(
36530 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6c 69 73 74   strcmp(z,"-list
36540 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64  ")==0 ){.      d
36550 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
36560 4c 69 73 74 3b 0a 20 20 20 20 7d 65 6c 73 65 20  List;.    }else 
36570 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 71  if( strcmp(z,"-q
36580 75 6f 74 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  uote")==0 ){.   
36590 20 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d     data.mode = M
365a0 4f 44 45 5f 51 75 6f 74 65 3b 0a 20 20 20 20 7d  ODE_Quote;.    }
365b0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
365c0 7a 2c 22 2d 6c 69 6e 65 22 29 3d 3d 30 20 29 7b  z,"-line")==0 ){
365d0 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65  .      data.mode
365e0 20 3d 20 4d 4f 44 45 5f 4c 69 6e 65 3b 0a 20 20   = MODE_Line;.  
365f0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
36600 6d 70 28 7a 2c 22 2d 63 6f 6c 75 6d 6e 22 29 3d  mp(z,"-column")=
36610 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61  =0 ){.      data
36620 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 43 6f 6c  .mode = MODE_Col
36630 75 6d 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  umn;.    }else i
36640 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 73  f( strcmp(z,"-cs
36650 76 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  v")==0 ){.      
36660 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45  data.mode = MODE
36670 5f 43 73 76 3b 0a 20 20 20 20 20 20 6d 65 6d 63  _Csv;.      memc
36680 70 79 28 64 61 74 61 2e 63 6f 6c 53 65 70 61 72  py(data.colSepar
36690 61 74 6f 72 2c 22 2c 22 2c 32 29 3b 0a 20 20 20  ator,",",2);.   
366a0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
366b0 70 28 7a 2c 22 2d 61 73 63 69 69 22 29 3d 3d 30  p(z,"-ascii")==0
366c0 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d   ){.      data.m
366d0 6f 64 65 20 3d 20 4d 4f 44 45 5f 41 73 63 69 69  ode = MODE_Ascii
366e0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
366f0 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
36700 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f  data.colSeparato
36710 72 29 2c 20 64 61 74 61 2e 63 6f 6c 53 65 70 61  r), data.colSepa
36720 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20  rator,.         
36730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 45                SE
36740 50 5f 55 6e 69 74 29 3b 0a 20 20 20 20 20 20 73  P_Unit);.      s
36750 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
36760 73 69 7a 65 6f 66 28 64 61 74 61 2e 72 6f 77 53  sizeof(data.rowS
36770 65 70 61 72 61 74 6f 72 29 2c 20 64 61 74 61 2e  eparator), data.
36780 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20  rowSeparator,.  
36790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367a0 20 20 20 20 20 53 45 50 5f 52 65 63 6f 72 64 29       SEP_Record)
367b0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
367c0 73 74 72 63 6d 70 28 7a 2c 22 2d 73 65 70 61 72  strcmp(z,"-separ
367d0 61 74 6f 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ator")==0 ){.   
367e0 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
367f0 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e  ntf(sizeof(data.
36800 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 64  colSeparator), d
36810 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72  ata.colSeparator
36820 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
36830 20 20 20 20 20 20 20 20 20 22 25 73 22 2c 63 6d           "%s",cm
36840 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
36850 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69  ue(argc,argv,++i
36860 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ));.    }else if
36870 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 65 77  ( strcmp(z,"-new
36880 6c 69 6e 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  line")==0 ){.   
36890 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
368a0 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e  ntf(sizeof(data.
368b0 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 64  rowSeparator), d
368c0 61 74 61 2e 72 6f 77 53 65 70 61 72 61 74 6f 72  ata.rowSeparator
368d0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
368e0 20 20 20 20 20 20 20 20 20 22 25 73 22 2c 63 6d           "%s",cm
368f0 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
36900 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69  ue(argc,argv,++i
36910 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ));.    }else if
36920 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 75 6c  ( strcmp(z,"-nul
36930 6c 76 61 6c 75 65 22 29 3d 3d 30 20 29 7b 0a 20  lvalue")==0 ){. 
36940 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
36950 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74  rintf(sizeof(dat
36960 61 2e 6e 75 6c 6c 56 61 6c 75 65 29 2c 20 64 61  a.nullValue), da
36970 74 61 2e 6e 75 6c 6c 56 61 6c 75 65 2c 0a 20 20  ta.nullValue,.  
36980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36990 20 20 20 20 20 22 25 73 22 2c 63 6d 64 6c 69 6e       "%s",cmdlin
369a0 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61  e_option_value(a
369b0 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a  rgc,argv,++i));.
369c0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
369d0 72 63 6d 70 28 7a 2c 22 2d 68 65 61 64 65 72 22  rcmp(z,"-header"
369e0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
369f0 74 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  ta.showHeader = 
36a00 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
36a10 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 6f 68 65   strcmp(z,"-nohe
36a20 61 64 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ader")==0 ){.   
36a30 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64     data.showHead
36a40 65 72 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  er = 0;.    }els
36a50 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
36a60 2d 65 63 68 6f 22 29 3d 3d 30 20 29 7b 0a 20 20  -echo")==0 ){.  
36a70 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67      ShellSetFlag
36a80 28 26 64 61 74 61 2c 20 53 48 46 4c 47 5f 45 63  (&data, SHFLG_Ec
36a90 68 6f 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ho);.    }else i
36aa0 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 65 71  f( strcmp(z,"-eq
36ab0 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  p")==0 ){.      
36ac0 64 61 74 61 2e 61 75 74 6f 45 51 50 20 3d 20 41  data.autoEQP = A
36ad0 55 54 4f 45 51 50 5f 6f 6e 3b 0a 20 20 20 20 7d  UTOEQP_on;.    }
36ae0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
36af0 7a 2c 22 2d 65 71 70 66 75 6c 6c 22 29 3d 3d 30  z,"-eqpfull")==0
36b00 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 61   ){.      data.a
36b10 75 74 6f 45 51 50 20 3d 20 41 55 54 4f 45 51 50  utoEQP = AUTOEQP
36b20 5f 66 75 6c 6c 3b 0a 20 20 20 20 7d 65 6c 73 65  _full;.    }else
36b30 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
36b40 73 74 61 74 73 22 29 3d 3d 30 20 29 7b 0a 20 20  stats")==0 ){.  
36b50 20 20 20 20 64 61 74 61 2e 73 74 61 74 73 4f 6e      data.statsOn
36b60 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
36b70 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 73  if( strcmp(z,"-s
36b80 63 61 6e 73 74 61 74 73 22 29 3d 3d 30 20 29 7b  canstats")==0 ){
36b90 0a 20 20 20 20 20 20 64 61 74 61 2e 73 63 61 6e  .      data.scan
36ba0 73 74 61 74 73 4f 6e 20 3d 20 31 3b 0a 20 20 20  statsOn = 1;.   
36bb0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
36bc0 70 28 7a 2c 22 2d 62 61 63 6b 73 6c 61 73 68 22  p(z,"-backslash"
36bd0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  )==0 ){.      /*
36be0 20 55 6e 64 6f 63 75 6d 65 6e 74 65 64 20 63 6f   Undocumented co
36bf0 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f  mmand-line optio
36c00 6e 3a 20 2d 62 61 63 6b 73 6c 61 73 68 0a 20 20  n: -backslash.  
36c10 20 20 20 20 2a 2a 20 43 61 75 73 65 73 20 43 2d      ** Causes C-
36c20 73 74 79 6c 65 20 62 61 63 6b 73 6c 61 73 68 20  style backslash 
36c30 65 73 63 61 70 65 73 20 74 6f 20 62 65 20 65 76  escapes to be ev
36c40 61 6c 75 61 74 65 64 20 69 6e 20 53 51 4c 20 73  aluated in SQL s
36c50 74 61 74 65 6d 65 6e 74 73 0a 20 20 20 20 20 20  tatements.      
36c60 2a 2a 20 70 72 69 6f 72 20 74 6f 20 73 65 6e 64  ** prior to send
36c70 69 6e 67 20 74 68 65 20 53 51 4c 20 69 6e 74 6f  ing the SQL into
36c80 20 53 51 4c 69 74 65 2e 20 20 55 73 65 66 75 6c   SQLite.  Useful
36c90 20 66 6f 72 20 69 6e 6a 65 63 74 69 6e 67 0a 20   for injecting. 
36ca0 20 20 20 20 20 2a 2a 20 63 72 61 7a 79 20 62 79       ** crazy by
36cb0 74 65 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  tes in the middl
36cc0 65 20 6f 66 20 53 51 4c 20 73 74 61 74 65 6d 65  e of SQL stateme
36cd0 6e 74 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  nts for testing 
36ce0 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20  and debugging.. 
36cf0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 53 68       */.      Sh
36d00 65 6c 6c 53 65 74 46 6c 61 67 28 26 64 61 74 61  ellSetFlag(&data
36d10 2c 20 53 48 46 4c 47 5f 42 61 63 6b 73 6c 61 73  , SHFLG_Backslas
36d20 68 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  h);.    }else if
36d30 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 62 61 69  ( strcmp(z,"-bai
36d40 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  l")==0 ){.      
36d50 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 3d 20  bail_on_error = 
36d60 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
36d70 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76 65 72 73   strcmp(z,"-vers
36d80 69 6f 6e 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ion")==0 ){.    
36d90 20 20 70 72 69 6e 74 66 28 22 25 73 20 25 73 5c    printf("%s %s\
36da0 6e 22 2c 20 73 71 6c 69 74 65 33 5f 6c 69 62 76  n", sqlite3_libv
36db0 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74 65  ersion(), sqlite
36dc0 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a 20  3_sourceid());. 
36dd0 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20       return 0;. 
36de0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
36df0 63 6d 70 28 7a 2c 22 2d 69 6e 74 65 72 61 63 74  cmp(z,"-interact
36e00 69 76 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ive")==0 ){.    
36e10 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72    stdin_is_inter
36e20 61 63 74 69 76 65 20 3d 20 31 3b 0a 20 20 20 20  active = 1;.    
36e30 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
36e40 28 7a 2c 22 2d 62 61 74 63 68 22 29 3d 3d 30 20  (z,"-batch")==0 
36e50 29 7b 0a 20 20 20 20 20 20 73 74 64 69 6e 5f 69  ){.      stdin_i
36e60 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 3d 20  s_interactive = 
36e70 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
36e80 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68 65 61 70   strcmp(z,"-heap
36e90 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  ")==0 ){.      i
36ea0 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ++;.    }else if
36eb0 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 70 61 67  ( strcmp(z,"-pag
36ec0 65 63 61 63 68 65 22 29 3d 3d 30 20 29 7b 0a 20  ecache")==0 ){. 
36ed0 20 20 20 20 20 69 2b 3d 32 3b 0a 20 20 20 20 7d       i+=2;.    }
36ee0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
36ef0 7a 2c 22 2d 6c 6f 6f 6b 61 73 69 64 65 22 29 3d  z,"-lookaside")=
36f00 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 3d 32  =0 ){.      i+=2
36f10 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
36f20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d 6d 61 70 22  strcmp(z,"-mmap"
36f30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b  )==0 ){.      i+
36f40 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  +;.    }else if(
36f50 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76 66 73 22   strcmp(z,"-vfs"
36f60 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b  )==0 ){.      i+
36f70 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
36f80 5f 45 4e 41 42 4c 45 5f 56 46 53 54 52 41 43 45  _ENABLE_VFSTRACE
36f90 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
36fa0 74 72 63 6d 70 28 7a 2c 22 2d 76 66 73 74 72 61  trcmp(z,"-vfstra
36fb0 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ce")==0 ){.     
36fc0 20 69 2b 2b 3b 0a 23 65 6e 64 69 66 0a 23 69 66   i++;.#endif.#if
36fd0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
36fe0 45 5f 4d 55 4c 54 49 50 4c 45 58 0a 20 20 20 20  E_MULTIPLEX.    
36ff0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
37000 28 7a 2c 22 2d 6d 75 6c 74 69 70 6c 65 78 22 29  (z,"-multiplex")
37010 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b  ==0 ){.      i++
37020 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c  ;.#endif.    }el
37030 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
37040 22 2d 68 65 6c 70 22 29 3d 3d 30 20 29 7b 0a 20  "-help")==0 ){. 
37050 20 20 20 20 20 75 73 61 67 65 28 31 29 3b 0a 20       usage(1);. 
37060 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
37070 63 6d 70 28 7a 2c 22 2d 63 6d 64 22 29 3d 3d 30  cmp(z,"-cmd")==0
37080 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 52 75 6e   ){.      /* Run
37090 20 63 6f 6d 6d 61 6e 64 73 20 74 68 61 74 20 66   commands that f
370a0 6f 6c 6c 6f 77 20 2d 63 6d 64 20 66 69 72 73 74  ollow -cmd first
370b0 20 61 6e 64 20 73 65 70 61 72 61 74 65 6c 79 20   and separately 
370c0 66 72 6f 6d 20 63 6f 6d 6d 61 6e 64 73 0a 20 20  from commands.  
370d0 20 20 20 20 2a 2a 20 74 68 61 74 20 73 69 6d 70      ** that simp
370e0 6c 79 20 61 70 70 65 61 72 20 6f 6e 20 74 68 65  ly appear on the
370f0 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 2e 20 20   command-line.  
37100 54 68 69 73 20 73 65 65 6d 73 20 67 6f 6f 66 79  This seems goofy
37110 2e 20 20 49 74 20 77 6f 75 6c 64 0a 20 20 20 20  .  It would.    
37120 20 20 2a 2a 20 62 65 20 62 65 74 74 65 72 20 69    ** be better i
37130 66 20 61 6c 6c 20 63 6f 6d 6d 61 6e 64 73 20 72  f all commands r
37140 61 6e 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  an in the order 
37150 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72  that they appear
37160 2e 20 20 42 75 74 0a 20 20 20 20 20 20 2a 2a 20  .  But.      ** 
37170 77 65 20 72 65 74 61 69 6e 20 74 68 65 20 67 6f  we retain the go
37180 6f 66 79 20 62 65 68 61 76 69 6f 72 20 66 6f 72  ofy behavior for
37190 20 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70   historical comp
371a0 61 74 69 62 69 6c 69 74 79 2e 20 2a 2f 0a 20 20  atibility. */.  
371b0 20 20 20 20 69 66 28 20 69 3d 3d 61 72 67 63 2d      if( i==argc-
371c0 31 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  1 ) break;.     
371d0 20 7a 20 3d 20 63 6d 64 6c 69 6e 65 5f 6f 70 74   z = cmdline_opt
371e0 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
371f0 72 67 76 2c 2b 2b 69 29 3b 0a 20 20 20 20 20 20  rgv,++i);.      
37200 69 66 28 20 7a 5b 30 5d 3d 3d 27 2e 27 20 29 7b  if( z[0]=='.' ){
37210 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 64 6f  .        rc = do
37220 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28 7a 2c  _meta_command(z,
37230 20 26 64 61 74 61 29 3b 0a 20 20 20 20 20 20 20   &data);.       
37240 20 69 66 28 20 72 63 20 26 26 20 62 61 69 6c 5f   if( rc && bail_
37250 6f 6e 5f 65 72 72 6f 72 20 29 20 72 65 74 75 72  on_error ) retur
37260 6e 20 72 63 3d 3d 32 20 3f 20 30 20 3a 20 72 63  n rc==2 ? 0 : rc
37270 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
37280 20 20 20 20 20 20 20 6f 70 65 6e 5f 64 62 28 26         open_db(&
37290 64 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20  data, 0);.      
372a0 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65 78 65    rc = shell_exe
372b0 63 28 64 61 74 61 2e 64 62 2c 20 7a 2c 20 73 68  c(data.db, z, sh
372c0 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64  ell_callback, &d
372d0 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a  ata, &zErrMsg);.
372e0 20 20 20 20 20 20 20 20 69 66 28 20 7a 45 72 72          if( zErr
372f0 4d 73 67 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  Msg!=0 ){.      
37300 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
37310 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 25  stderr,"Error: %
37320 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a  s\n", zErrMsg);.
37330 20 20 20 20 20 20 20 20 20 20 69 66 28 20 62 61            if( ba
37340 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 29 20 72 65  il_on_error ) re
37350 74 75 72 6e 20 72 63 21 3d 30 20 3f 20 72 63 20  turn rc!=0 ? rc 
37360 3a 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  : 1;.        }el
37370 73 65 20 69 66 28 20 72 63 21 3d 30 20 29 7b 0a  se if( rc!=0 ){.
37380 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
37390 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72  rintf(stderr,"Er
373a0 72 6f 72 3a 20 75 6e 61 62 6c 65 20 74 6f 20 70  ror: unable to p
373b0 72 6f 63 65 73 73 20 53 51 4c 20 5c 22 25 73 5c  rocess SQL \"%s\
373c0 22 5c 6e 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20  "\n", z);.      
373d0 20 20 20 20 69 66 28 20 62 61 69 6c 5f 6f 6e 5f      if( bail_on_
373e0 65 72 72 6f 72 20 29 20 72 65 74 75 72 6e 20 72  error ) return r
373f0 63 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  c;.        }.   
37400 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
37410 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
37420 66 28 73 74 64 65 72 72 2c 22 25 73 3a 20 45 72  f(stderr,"%s: Er
37430 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 6f 70 74  ror: unknown opt
37440 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 41 72 67 76  ion: %s\n", Argv
37450 30 2c 20 7a 29 3b 0a 20 20 20 20 20 20 72 61 77  0, z);.      raw
37460 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
37470 55 73 65 20 2d 68 65 6c 70 20 66 6f 72 20 61 20  Use -help for a 
37480 6c 69 73 74 20 6f 66 20 6f 70 74 69 6f 6e 73 2e  list of options.
37490 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75  \n");.      retu
374a0 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
374b0 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64 61 74  data.cMode = dat
374c0 61 2e 6d 6f 64 65 3b 0a 20 20 7d 0a 0a 20 20 69  a.mode;.  }..  i
374d0 66 28 20 21 72 65 61 64 53 74 64 69 6e 20 29 7b  f( !readStdin ){
374e0 0a 20 20 20 20 2f 2a 20 52 75 6e 20 61 6c 6c 20  .    /* Run all 
374f0 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 64  arguments that d
37500 6f 20 6e 6f 74 20 62 65 67 69 6e 20 77 69 74 68  o not begin with
37510 20 27 2d 27 20 61 73 20 69 66 20 74 68 65 79 20   '-' as if they 
37520 77 65 72 65 20 73 65 70 61 72 61 74 65 0a 20 20  were separate.  
37530 20 20 2a 2a 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e    ** command-lin
37540 65 20 69 6e 70 75 74 73 2c 20 65 78 63 65 70 74  e inputs, except
37550 20 66 6f 72 20 74 68 65 20 61 72 67 54 6f 53 6b   for the argToSk
37560 69 70 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63  ip argument whic
37570 68 20 63 6f 6e 74 61 69 6e 73 0a 20 20 20 20 2a  h contains.    *
37580 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  * the database f
37590 69 6c 65 6e 61 6d 65 2e 0a 20 20 20 20 2a 2f 0a  ilename..    */.
375a0 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
375b0 43 6d 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Cmd; i++){.     
375c0 20 69 66 28 20 61 7a 43 6d 64 5b 69 5d 5b 30 5d   if( azCmd[i][0]
375d0 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 20  =='.' ){.       
375e0 20 72 63 20 3d 20 64 6f 5f 6d 65 74 61 5f 63