/ Hex Artifact Content
Login

Artifact ef343d708f32e43bc5abff8a4a769e026252b77ff37583cbd7ad30a9cc169f26:


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 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20  /*.** These are 
6520: 74 68 65 20 61 6c 6c 6f 77 65 64 20 73 68 65 6c  the allowed shel
6530: 6c 46 6c 67 73 20 76 61 6c 75 65 73 0a 2a 2f 0a  lFlgs values.*/.
6540: 23 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 50 61  #define SHFLG_Pa
6550: 67 65 63 61 63 68 65 20 20 20 20 20 20 30 78 30  gecache      0x0
6560: 30 30 30 30 30 30 31 20 2f 2a 20 54 68 65 20 2d  0000001 /* The -
6570: 2d 70 61 67 65 63 61 63 68 65 20 6f 70 74 69 6f  -pagecache optio
6580: 6e 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  n is used */.#de
6590: 66 69 6e 65 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61  fine SHFLG_Looka
65a0: 73 69 64 65 20 20 20 20 20 20 30 78 30 30 30 30  side      0x0000
65b0: 30 30 30 32 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64  0002 /* Lookasid
65c0: 65 20 6d 65 6d 6f 72 79 20 69 73 20 75 73 65 64  e memory is used
65d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 46 4c   */.#define SHFL
65e0: 47 5f 42 61 63 6b 73 6c 61 73 68 20 20 20 20 20  G_Backslash     
65f0: 20 30 78 30 30 30 30 30 30 30 34 20 2f 2a 20 54   0x00000004 /* T
6600: 68 65 20 2d 2d 62 61 63 6b 73 6c 61 73 68 20 6f  he --backslash o
6610: 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20 2a 2f  ption is used */
6620: 0a 23 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 50  .#define SHFLG_P
6630: 72 65 73 65 72 76 65 52 6f 77 69 64 20 20 30 78  reserveRowid  0x
6640: 30 30 30 30 30 30 30 38 20 2f 2a 20 2e 64 75 6d  00000008 /* .dum
6650: 70 20 70 72 65 73 65 72 76 65 73 20 72 6f 77 69  p preserves rowi
6660: 64 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66  d values */.#def
6670: 69 6e 65 20 53 48 46 4c 47 5f 4e 65 77 6c 69 6e  ine SHFLG_Newlin
6680: 65 73 20 20 20 20 20 20 20 30 78 30 30 30 30 30  es       0x00000
6690: 30 31 30 20 2f 2a 20 2e 64 75 6d 70 20 2d 2d 6e  010 /* .dump --n
66a0: 65 77 6c 69 6e 65 20 66 6c 61 67 20 2a 2f 0a 23  ewline flag */.#
66b0: 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 43 6f 75  define SHFLG_Cou
66c0: 6e 74 43 68 61 6e 67 65 73 20 20 20 30 78 30 30  ntChanges   0x00
66d0: 30 30 30 30 32 30 20 2f 2a 20 2e 63 68 61 6e 67  000020 /* .chang
66e0: 65 73 20 73 65 74 74 69 6e 67 20 2a 2f 0a 23 64  es setting */.#d
66f0: 65 66 69 6e 65 20 53 48 46 4c 47 5f 45 63 68 6f  efine SHFLG_Echo
6700: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
6710: 30 30 30 34 30 20 2f 2a 20 2e 65 63 68 6f 20 6f  00040 /* .echo o
6720: 72 20 2d 2d 65 63 68 6f 20 73 65 74 74 69 6e 67  r --echo setting
6730: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
6740: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e  s for testing an
6750: 64 20 73 65 74 74 69 6e 67 20 73 68 65 6c 6c 46  d setting shellF
6760: 6c 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lgs.*/.#define S
6770: 68 65 6c 6c 48 61 73 46 6c 61 67 28 50 2c 58 29  hellHasFlag(P,X)
6780: 20 20 20 20 28 28 28 50 29 2d 3e 73 68 65 6c 6c      (((P)->shell
6790: 46 6c 67 73 20 26 20 28 58 29 29 21 3d 30 29 0a  Flgs & (X))!=0).
67a0: 23 64 65 66 69 6e 65 20 53 68 65 6c 6c 53 65 74  #define ShellSet
67b0: 46 6c 61 67 28 50 2c 58 29 20 20 20 20 28 28 50  Flag(P,X)    ((P
67c0: 29 2d 3e 73 68 65 6c 6c 46 6c 67 73 7c 3d 28 58  )->shellFlgs|=(X
67d0: 29 29 0a 23 64 65 66 69 6e 65 20 53 68 65 6c 6c  )).#define Shell
67e0: 43 6c 65 61 72 46 6c 61 67 28 50 2c 58 29 20 20  ClearFlag(P,X)  
67f0: 28 28 50 29 2d 3e 73 68 65 6c 6c 46 6c 67 73 26  ((P)->shellFlgs&
6800: 3d 28 7e 28 58 29 29 29 0a 0a 2f 2a 0a 2a 2a 20  =(~(X)))../*.** 
6810: 54 68 65 73 65 20 61 72 65 20 74 68 65 20 61 6c  These are the al
6820: 6c 6f 77 65 64 20 6d 6f 64 65 73 2e 0a 2a 2f 0a  lowed modes..*/.
6830: 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 4c 69 6e  #define MODE_Lin
6840: 65 20 20 20 20 20 30 20 20 2f 2a 20 4f 6e 65 20  e     0  /* One 
6850: 63 6f 6c 75 6d 6e 20 70 65 72 20 6c 69 6e 65 2e  column per line.
6860: 20 20 42 6c 61 6e 6b 20 6c 69 6e 65 20 62 65 74    Blank line bet
6870: 77 65 65 6e 20 72 65 63 6f 72 64 73 20 2a 2f 0a  ween records */.
6880: 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 43 6f 6c  #define MODE_Col
6890: 75 6d 6e 20 20 20 31 20 20 2f 2a 20 4f 6e 65 20  umn   1  /* One 
68a0: 72 65 63 6f 72 64 20 70 65 72 20 6c 69 6e 65 20  record per line 
68b0: 69 6e 20 6e 65 61 74 20 63 6f 6c 75 6d 6e 73 20  in neat columns 
68c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f  */.#define MODE_
68d0: 4c 69 73 74 20 20 20 20 20 32 20 20 2f 2a 20 4f  List     2  /* O
68e0: 6e 65 20 72 65 63 6f 72 64 20 70 65 72 20 6c 69  ne record per li
68f0: 6e 65 20 77 69 74 68 20 61 20 73 65 70 61 72 61  ne with a separa
6900: 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  tor */.#define M
6910: 4f 44 45 5f 53 65 6d 69 20 20 20 20 20 33 20 20  ODE_Semi     3  
6920: 2f 2a 20 53 61 6d 65 20 61 73 20 4d 4f 44 45 5f  /* Same as MODE_
6930: 4c 69 73 74 20 62 75 74 20 61 70 70 65 6e 64 20  List but append 
6940: 22 3b 22 20 74 6f 20 65 61 63 68 20 6c 69 6e 65  ";" to each line
6950: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45   */.#define MODE
6960: 5f 48 74 6d 6c 20 20 20 20 20 34 20 20 2f 2a 20  _Html     4  /* 
6970: 47 65 6e 65 72 61 74 65 20 61 6e 20 58 48 54 4d  Generate an XHTM
6980: 4c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  L table */.#defi
6990: 6e 65 20 4d 4f 44 45 5f 49 6e 73 65 72 74 20 20  ne MODE_Insert  
69a0: 20 35 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20   5  /* Generate 
69b0: 53 51 4c 20 22 69 6e 73 65 72 74 22 20 73 74 61  SQL "insert" sta
69c0: 74 65 6d 65 6e 74 73 20 2a 2f 0a 23 64 65 66 69  tements */.#defi
69d0: 6e 65 20 4d 4f 44 45 5f 51 75 6f 74 65 20 20 20  ne MODE_Quote   
69e0: 20 36 20 20 2f 2a 20 51 75 6f 74 65 20 76 61 6c   6  /* Quote val
69f0: 75 65 73 20 61 73 20 66 6f 72 20 53 51 4c 20 2a  ues as for SQL *
6a00: 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 54  /.#define MODE_T
6a10: 63 6c 20 20 20 20 20 20 37 20 20 2f 2a 20 47 65  cl      7  /* Ge
6a20: 6e 65 72 61 74 65 20 41 4e 53 49 2d 43 20 6f 72  nerate ANSI-C or
6a30: 20 54 43 4c 20 71 75 6f 74 65 64 20 65 6c 65 6d   TCL quoted elem
6a40: 65 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ents */.#define 
6a50: 4d 4f 44 45 5f 43 73 76 20 20 20 20 20 20 38 20  MODE_Csv      8 
6a60: 20 2f 2a 20 51 75 6f 74 65 20 73 74 72 69 6e 67   /* Quote string
6a70: 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 70  s, numbers are p
6a80: 6c 61 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lain */.#define 
6a90: 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 20 39 20  MODE_Explain  9 
6aa0: 20 2f 2a 20 4c 69 6b 65 20 4d 4f 44 45 5f 43 6f   /* Like MODE_Co
6ab0: 6c 75 6d 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74  lumn, but do not
6ac0: 20 74 72 75 6e 63 61 74 65 20 64 61 74 61 20 2a   truncate data *
6ad0: 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 41  /.#define MODE_A
6ae0: 73 63 69 69 20 20 20 31 30 20 20 2f 2a 20 55 73  scii   10  /* Us
6af0: 65 20 41 53 43 49 49 20 75 6e 69 74 20 61 6e 64  e ASCII unit and
6b00: 20 72 65 63 6f 72 64 20 73 65 70 61 72 61 74 6f   record separato
6b10: 72 73 20 28 30 78 31 46 2f 30 78 31 45 29 20 2a  rs (0x1F/0x1E) *
6b20: 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 50  /.#define MODE_P
6b30: 72 65 74 74 79 20 20 31 31 20 20 2f 2a 20 50 72  retty  11  /* Pr
6b40: 65 74 74 79 2d 70 72 69 6e 74 20 73 63 68 65 6d  etty-print schem
6b50: 61 73 20 2a 2f 0a 0a 73 74 61 74 69 63 20 63 6f  as */..static co
6b60: 6e 73 74 20 63 68 61 72 20 2a 6d 6f 64 65 44 65  nst char *modeDe
6b70: 73 63 72 5b 5d 20 3d 20 7b 0a 20 20 22 6c 69 6e  scr[] = {.  "lin
6b80: 65 22 2c 0a 20 20 22 63 6f 6c 75 6d 6e 22 2c 0a  e",.  "column",.
6b90: 20 20 22 6c 69 73 74 22 2c 0a 20 20 22 73 65 6d    "list",.  "sem
6ba0: 69 22 2c 0a 20 20 22 68 74 6d 6c 22 2c 0a 20 20  i",.  "html",.  
6bb0: 22 69 6e 73 65 72 74 22 2c 0a 20 20 22 71 75 6f  "insert",.  "quo
6bc0: 74 65 22 2c 0a 20 20 22 74 63 6c 22 2c 0a 20 20  te",.  "tcl",.  
6bd0: 22 63 73 76 22 2c 0a 20 20 22 65 78 70 6c 61 69  "csv",.  "explai
6be0: 6e 22 2c 0a 20 20 22 61 73 63 69 69 22 2c 0a 20  n",.  "ascii",. 
6bf0: 20 22 70 72 65 74 74 79 70 72 69 6e 74 22 2c 0a   "prettyprint",.
6c00: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  };../*.** These 
6c10: 61 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e 2f 72  are the column/r
6c20: 6f 77 2f 6c 69 6e 65 20 73 65 70 61 72 61 74 6f  ow/line separato
6c30: 72 73 20 75 73 65 64 20 62 79 20 74 68 65 20 76  rs used by the v
6c40: 61 72 69 6f 75 73 0a 2a 2a 20 69 6d 70 6f 72 74  arious.** import
6c50: 2f 65 78 70 6f 72 74 20 6d 6f 64 65 73 2e 0a 2a  /export modes..*
6c60: 2f 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 43 6f  /.#define SEP_Co
6c70: 6c 75 6d 6e 20 20 20 20 22 7c 22 0a 23 64 65 66  lumn    "|".#def
6c80: 69 6e 65 20 53 45 50 5f 52 6f 77 20 20 20 20 20  ine SEP_Row     
6c90: 20 20 22 5c 6e 22 0a 23 64 65 66 69 6e 65 20 53    "\n".#define S
6ca0: 45 50 5f 54 61 62 20 20 20 20 20 20 20 22 5c 74  EP_Tab       "\t
6cb0: 22 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 53 70  ".#define SEP_Sp
6cc0: 61 63 65 20 20 20 20 20 22 20 22 0a 23 64 65 66  ace     " ".#def
6cd0: 69 6e 65 20 53 45 50 5f 43 6f 6d 6d 61 20 20 20  ine SEP_Comma   
6ce0: 20 20 22 2c 22 0a 23 64 65 66 69 6e 65 20 53 45    ",".#define SE
6cf0: 50 5f 43 72 4c 66 20 20 20 20 20 20 22 5c 72 5c  P_CrLf      "\r\
6d00: 6e 22 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 55  n".#define SEP_U
6d10: 6e 69 74 20 20 20 20 20 20 22 5c 78 31 46 22 0a  nit      "\x1F".
6d20: 23 64 65 66 69 6e 65 20 53 45 50 5f 52 65 63 6f  #define SEP_Reco
6d30: 72 64 20 20 20 20 22 5c 78 31 45 22 0a 0a 2f 2a  rd    "\x1E"../*
6d40: 0a 2a 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c  .** Number of el
6d50: 65 6d 65 6e 74 73 20 69 6e 20 61 6e 20 61 72 72  ements in an arr
6d60: 61 79 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  ay.*/.#define Ar
6d70: 72 61 79 53 69 7a 65 28 58 29 20 20 28 69 6e 74  raySize(X)  (int
6d80: 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65  )(sizeof(X)/size
6d90: 6f 66 28 58 5b 30 5d 29 29 0a 0a 2f 2a 0a 2a 2a  of(X[0]))../*.**
6da0: 20 41 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20   A callback for 
6db0: 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  the sqlite3_log(
6dc0: 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a  ) interface..*/.
6dd0: 73 74 61 74 69 63 20 76 6f 69 64 20 73 68 65 6c  static void shel
6de0: 6c 4c 6f 67 28 76 6f 69 64 20 2a 70 41 72 67 2c  lLog(void *pArg,
6df0: 20 69 6e 74 20 69 45 72 72 43 6f 64 65 2c 20 63   int iErrCode, c
6e00: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 73 67 29  onst char *zMsg)
6e10: 7b 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  {.  ShellState *
6e20: 70 20 3d 20 28 53 68 65 6c 6c 53 74 61 74 65 2a  p = (ShellState*
6e30: 29 70 41 72 67 3b 0a 20 20 69 66 28 20 70 2d 3e  )pArg;.  if( p->
6e40: 70 4c 6f 67 3d 3d 30 20 29 20 72 65 74 75 72 6e  pLog==0 ) return
6e50: 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28  ;.  utf8_printf(
6e60: 70 2d 3e 70 4c 6f 67 2c 20 22 28 25 64 29 20 25  p->pLog, "(%d) %
6e70: 73 5c 6e 22 2c 20 69 45 72 72 43 6f 64 65 2c 20  s\n", iErrCode, 
6e80: 7a 4d 73 67 29 3b 0a 20 20 66 66 6c 75 73 68 28  zMsg);.  fflush(
6e90: 70 2d 3e 70 4c 6f 67 29 3b 0a 7d 0a 0a 2f 2a 0a  p->pLog);.}../*.
6ea0: 2a 2a 20 4f 75 74 70 75 74 20 74 68 65 20 67 69  ** Output the gi
6eb0: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
6ec0: 68 65 78 2d 65 6e 63 6f 64 65 64 20 62 6c 6f 62  hex-encoded blob
6ed0: 20 28 65 67 2e 20 58 27 31 32 33 34 27 20 29 0a   (eg. X'1234' ).
6ee0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
6ef0: 75 74 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 46  utput_hex_blob(F
6f00: 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20  ILE *out, const 
6f10: 76 6f 69 64 20 2a 70 42 6c 6f 62 2c 20 69 6e 74  void *pBlob, int
6f20: 20 6e 42 6c 6f 62 29 7b 0a 20 20 69 6e 74 20 69   nBlob){.  int i
6f30: 3b 0a 20 20 63 68 61 72 20 2a 7a 42 6c 6f 62 20  ;.  char *zBlob 
6f40: 3d 20 28 63 68 61 72 20 2a 29 70 42 6c 6f 62 3b  = (char *)pBlob;
6f50: 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75  .  raw_printf(ou
6f60: 74 2c 22 58 27 22 29 3b 0a 20 20 66 6f 72 28 69  t,"X'");.  for(i
6f70: 3d 30 3b 20 69 3c 6e 42 6c 6f 62 3b 20 69 2b 2b  =0; i<nBlob; i++
6f80: 29 7b 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75  ){ raw_printf(ou
6f90: 74 2c 22 25 30 32 78 22 2c 7a 42 6c 6f 62 5b 69  t,"%02x",zBlob[i
6fa0: 5d 26 30 78 66 66 29 3b 20 7d 0a 20 20 72 61 77  ]&0xff); }.  raw
6fb0: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 22 29  _printf(out,"'")
6fc0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 69 6e 64 20  ;.}../*.** Find 
6fd0: 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
6fe0: 20 6e 6f 74 20 66 6f 75 6e 64 20 61 6e 79 77 68   not found anywh
6ff0: 65 72 65 20 69 6e 20 7a 5b 5d 2e 20 20 52 65 74  ere in z[].  Ret
7000: 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2a  urn a pointer.**
7010: 20 74 6f 20 74 68 61 74 20 73 74 72 69 6e 67 2e   to that string.
7020: 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 75 73  .**.** Try to us
7030: 65 20 7a 41 20 61 6e 64 20 7a 42 20 66 69 72 73  e zA and zB firs
7040: 74 2e 20 20 49 66 20 62 6f 74 68 20 6f 66 20 74  t.  If both of t
7050: 68 6f 73 65 20 61 72 65 20 61 6c 72 65 61 64 79  hose are already
7060: 20 66 6f 75 6e 64 20 69 6e 20 7a 5b 5d 0a 2a 2a   found in z[].**
7070: 20 74 68 65 6e 20 6d 61 6b 65 20 75 70 20 73 6f   then make up so
7080: 6d 65 20 73 74 72 69 6e 67 20 61 6e 64 20 73 74  me string and st
7090: 6f 72 65 20 69 74 20 69 6e 20 74 68 65 20 62 75  ore it in the bu
70a0: 66 66 65 72 20 7a 42 75 66 2e 0a 2a 2f 0a 73 74  ffer zBuf..*/.st
70b0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
70c0: 2a 75 6e 75 73 65 64 5f 73 74 72 69 6e 67 28 0a  *unused_string(.
70d0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c    const char *z,
70e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70f0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6d 75      /* Result mu
7100: 73 74 20 6e 6f 74 20 61 70 70 65 61 72 20 61 6e  st not appear an
7110: 79 77 68 65 72 65 20 69 6e 20 7a 20 2a 2f 0a 20  ywhere in z */. 
7120: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 2c   const char *zA,
7130: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 42 2c   const char *zB,
7140: 20 20 20 2f 2a 20 54 72 79 20 74 68 65 73 65 20     /* Try these 
7150: 66 69 72 73 74 20 2a 2f 0a 20 20 63 68 61 72 20  first */.  char 
7160: 2a 7a 42 75 66 20 20 20 20 20 20 20 20 20 20 20  *zBuf           
7170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7180: 53 70 61 63 65 20 74 6f 20 73 74 6f 72 65 20 61  Space to store a
7190: 20 67 65 6e 65 72 61 74 65 64 20 73 74 72 69 6e   generated strin
71a0: 67 20 2a 2f 0a 29 7b 0a 20 20 75 6e 73 69 67 6e  g */.){.  unsign
71b0: 65 64 20 69 20 3d 20 30 3b 0a 20 20 69 66 28 20  ed i = 0;.  if( 
71c0: 73 74 72 73 74 72 28 7a 2c 20 7a 41 29 3d 3d 30  strstr(z, zA)==0
71d0: 20 29 20 72 65 74 75 72 6e 20 7a 41 3b 0a 20 20   ) return zA;.  
71e0: 69 66 28 20 73 74 72 73 74 72 28 7a 2c 20 7a 42  if( strstr(z, zB
71f0: 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 7a 42  )==0 ) return zB
7200: 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 71 6c 69  ;.  do{.    sqli
7210: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 32 30 2c  te3_snprintf(20,
7220: 7a 42 75 66 2c 22 28 25 73 25 75 29 22 2c 20 7a  zBuf,"(%s%u)", z
7230: 41 2c 20 69 2b 2b 29 3b 0a 20 20 7d 77 68 69 6c  A, i++);.  }whil
7240: 65 28 20 73 74 72 73 74 72 28 7a 2c 7a 42 75 66  e( strstr(z,zBuf
7250: 29 21 3d 30 20 29 3b 0a 20 20 72 65 74 75 72 6e  )!=0 );.  return
7260: 20 7a 42 75 66 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   zBuf;.}../*.** 
7270: 4f 75 74 70 75 74 20 74 68 65 20 67 69 76 65 6e  Output the given
7280: 20 73 74 72 69 6e 67 20 61 73 20 61 20 71 75 6f   string as a quo
7290: 74 65 64 20 73 74 72 69 6e 67 20 75 73 69 6e 67  ted string using
72a0: 20 53 51 4c 20 71 75 6f 74 69 6e 67 20 63 6f 6e   SQL quoting con
72b0: 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  ventions..**.** 
72c0: 53 65 65 20 61 6c 73 6f 3a 20 6f 75 74 70 75 74  See also: output
72d0: 5f 71 75 6f 74 65 64 5f 65 73 63 61 70 65 64 5f  _quoted_escaped_
72e0: 73 74 72 69 6e 67 28 29 0a 2a 2f 0a 73 74 61 74  string().*/.stat
72f0: 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 71  ic void output_q
7300: 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 46 49 4c  uoted_string(FIL
7310: 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68  E *out, const ch
7320: 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b  ar *z){.  int i;
7330: 0a 20 20 63 68 61 72 20 63 3b 0a 20 20 73 65 74  .  char c;.  set
7340: 42 69 6e 61 72 79 4d 6f 64 65 28 6f 75 74 2c 20  BinaryMode(out, 
7350: 31 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28  1);.  for(i=0; (
7360: 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26 26 20  c = z[i])!=0 && 
7370: 63 21 3d 27 5c 27 27 3b 20 69 2b 2b 29 7b 7d 0a  c!='\''; i++){}.
7380: 20 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20 20    if( c==0 ){.  
7390: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75    utf8_printf(ou
73a0: 74 2c 22 27 25 73 27 22 2c 7a 29 3b 0a 20 20 7d  t,"'%s'",z);.  }
73b0: 65 6c 73 65 7b 0a 20 20 20 20 72 61 77 5f 70 72  else{.    raw_pr
73c0: 69 6e 74 66 28 6f 75 74 2c 20 22 27 22 29 3b 0a  intf(out, "'");.
73d0: 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b      while( *z ){
73e0: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
73f0: 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26 26  (c = z[i])!=0 &&
7400: 20 63 21 3d 27 5c 27 27 3b 20 69 2b 2b 29 7b 7d   c!='\''; i++){}
7410: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c  .      if( c=='\
7420: 27 27 20 29 20 69 2b 2b 3b 0a 20 20 20 20 20 20  '' ) i++;.      
7430: 69 66 28 20 69 20 29 7b 0a 20 20 20 20 20 20 20  if( i ){.       
7440: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74   utf8_printf(out
7450: 2c 20 22 25 2e 2a 73 22 2c 20 69 2c 20 7a 29 3b  , "%.*s", i, z);
7460: 0a 20 20 20 20 20 20 20 20 7a 20 2b 3d 20 69 3b  .        z += i;
7470: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
7480: 66 28 20 63 3d 3d 27 5c 27 27 20 29 7b 0a 20 20  f( c=='\'' ){.  
7490: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
74a0: 28 6f 75 74 2c 20 22 27 22 29 3b 0a 20 20 20 20  (out, "'");.    
74b0: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
74c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
74d0: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  c==0 ){.        
74e0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
74f0: 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a       z++;.    }.
7500: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
7510: 75 74 2c 20 22 27 22 29 3b 0a 20 20 7d 0a 20 20  ut, "'");.  }.  
7520: 73 65 74 54 65 78 74 4d 6f 64 65 28 6f 75 74 2c  setTextMode(out,
7530: 20 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75   1);.}../*.** Ou
7540: 74 70 75 74 20 74 68 65 20 67 69 76 65 6e 20 73  tput the given s
7550: 74 72 69 6e 67 20 61 73 20 61 20 71 75 6f 74 65  tring as a quote
7560: 64 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 53  d string using S
7570: 51 4c 20 71 75 6f 74 69 6e 67 20 63 6f 6e 76 65  QL quoting conve
7580: 6e 74 69 6f 6e 73 2e 0a 2a 2a 20 41 64 64 69 74  ntions..** Addit
7590: 69 6f 6e 61 6c 6c 6c 79 20 2c 20 65 73 63 61 70  ionallly , escap
75a0: 65 20 74 68 65 20 22 5c 6e 22 20 61 6e 64 20 22  e the "\n" and "
75b0: 5c 72 22 20 63 68 61 72 61 63 74 65 72 73 20 73  \r" characters s
75c0: 6f 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e  o that they do n
75d0: 6f 74 0a 2a 2a 20 67 65 74 20 63 6f 72 72 75 70  ot.** get corrup
75e0: 74 65 64 20 62 79 20 65 6e 64 2d 6f 66 2d 6c 69  ted by end-of-li
75f0: 6e 65 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 66  ne translation f
7600: 61 63 69 6c 69 74 69 65 73 20 69 6e 20 73 6f 6d  acilities in som
7610: 65 20 6f 70 65 72 61 74 69 6e 67 0a 2a 2a 20 73  e operating.** s
7620: 79 73 74 65 6d 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ystems..**.** Th
7630: 69 73 20 69 73 20 6c 69 6b 65 20 6f 75 74 70 75  is is like outpu
7640: 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67 28  t_quoted_string(
7650: 29 20 62 75 74 20 77 69 74 68 20 74 68 65 20 61  ) but with the a
7660: 64 64 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 5c  ddition of the \
7670: 72 5c 6e 0a 2a 2a 20 65 73 63 61 70 65 20 6d 65  r\n.** escape me
7680: 63 68 61 6e 69 73 6d 2e 0a 2a 2f 0a 73 74 61 74  chanism..*/.stat
7690: 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 71  ic void output_q
76a0: 75 6f 74 65 64 5f 65 73 63 61 70 65 64 5f 73 74  uoted_escaped_st
76b0: 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75 74 2c 20  ring(FILE *out, 
76c0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
76d0: 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20    int i;.  char 
76e0: 63 3b 0a 20 20 73 65 74 42 69 6e 61 72 79 4d 6f  c;.  setBinaryMo
76f0: 64 65 28 6f 75 74 2c 20 31 29 3b 0a 20 20 66 6f  de(out, 1);.  fo
7700: 72 28 69 3d 30 3b 20 28 63 20 3d 20 7a 5b 69 5d  r(i=0; (c = z[i]
7710: 29 21 3d 30 20 26 26 20 63 21 3d 27 5c 27 27 20  )!=0 && c!='\'' 
7720: 26 26 20 63 21 3d 27 5c 6e 27 20 26 26 20 63 21  && c!='\n' && c!
7730: 3d 27 5c 72 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20  ='\r'; i++){}.  
7740: 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20  if( c==0 ){.    
7750: 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c  utf8_printf(out,
7760: 22 27 25 73 27 22 2c 7a 29 3b 0a 20 20 7d 65 6c  "'%s'",z);.  }el
7770: 73 65 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  se{.    const ch
7780: 61 72 20 2a 7a 4e 4c 20 3d 20 30 3b 0a 20 20 20  ar *zNL = 0;.   
7790: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 52   const char *zCR
77a0: 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 6e 4e   = 0;.    int nN
77b0: 4c 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 6e  L = 0;.    int n
77c0: 43 52 20 3d 20 30 3b 0a 20 20 20 20 63 68 61 72  CR = 0;.    char
77d0: 20 7a 42 75 66 31 5b 32 30 5d 2c 20 7a 42 75 66   zBuf1[20], zBuf
77e0: 32 5b 32 30 5d 3b 0a 20 20 20 20 66 6f 72 28 69  2[20];.    for(i
77f0: 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  =0; z[i]; i++){.
7800: 20 20 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d        if( z[i]==
7810: 27 5c 6e 27 20 29 20 6e 4e 4c 2b 2b 3b 0a 20 20  '\n' ) nNL++;.  
7820: 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c      if( z[i]=='\
7830: 72 27 20 29 20 6e 43 52 2b 2b 3b 0a 20 20 20 20  r' ) nCR++;.    
7840: 7d 0a 20 20 20 20 69 66 28 20 6e 4e 4c 20 29 7b  }.    if( nNL ){
7850: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
7860: 66 28 6f 75 74 2c 20 22 72 65 70 6c 61 63 65 28  f(out, "replace(
7870: 22 29 3b 0a 20 20 20 20 20 20 7a 4e 4c 20 3d 20  ");.      zNL = 
7880: 75 6e 75 73 65 64 5f 73 74 72 69 6e 67 28 7a 2c  unused_string(z,
7890: 20 22 5c 5c 6e 22 2c 20 22 5c 5c 30 31 32 22 2c   "\\n", "\\012",
78a0: 20 7a 42 75 66 31 29 3b 0a 20 20 20 20 7d 0a 20   zBuf1);.    }. 
78b0: 20 20 20 69 66 28 20 6e 43 52 20 29 7b 0a 20 20     if( nCR ){.  
78c0: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
78d0: 75 74 2c 20 22 72 65 70 6c 61 63 65 28 22 29 3b  ut, "replace(");
78e0: 0a 20 20 20 20 20 20 7a 43 52 20 3d 20 75 6e 75  .      zCR = unu
78f0: 73 65 64 5f 73 74 72 69 6e 67 28 7a 2c 20 22 5c  sed_string(z, "\
7900: 5c 72 22 2c 20 22 5c 5c 30 31 35 22 2c 20 7a 42  \r", "\\015", zB
7910: 75 66 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  uf2);.    }.    
7920: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  raw_printf(out, 
7930: 22 27 22 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  "'");.    while(
7940: 20 2a 7a 20 29 7b 0a 20 20 20 20 20 20 66 6f 72   *z ){.      for
7950: 28 69 3d 30 3b 20 28 63 20 3d 20 7a 5b 69 5d 29  (i=0; (c = z[i])
7960: 21 3d 30 20 26 26 20 63 21 3d 27 5c 6e 27 20 26  !=0 && c!='\n' &
7970: 26 20 63 21 3d 27 5c 72 27 20 26 26 20 63 21 3d  & c!='\r' && c!=
7980: 27 5c 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20  '\''; i++){}.   
7990: 20 20 20 69 66 28 20 63 3d 3d 27 5c 27 27 20 29     if( c=='\'' )
79a0: 20 69 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20   i++;.      if( 
79b0: 69 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  i ){.        utf
79c0: 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25  8_printf(out, "%
79d0: 2e 2a 73 22 2c 20 69 2c 20 7a 29 3b 0a 20 20 20  .*s", i, z);.   
79e0: 20 20 20 20 20 7a 20 2b 3d 20 69 3b 0a 20 20 20       z += i;.   
79f0: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63     }.      if( c
7a00: 3d 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20 20 20  =='\'' ){.      
7a10: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
7a20: 2c 20 22 27 22 29 3b 0a 20 20 20 20 20 20 20 20  , "'");.        
7a30: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
7a40: 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30  }.      if( c==0
7a50: 20 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61   ){.        brea
7a60: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
7a70: 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20   z++;.      if( 
7a80: 63 3d 3d 27 5c 6e 27 20 29 7b 0a 20 20 20 20 20  c=='\n' ){.     
7a90: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
7aa0: 74 2c 20 22 25 73 22 2c 20 7a 4e 4c 29 3b 0a 20  t, "%s", zNL);. 
7ab0: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
7ac0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
7ad0: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
7ae0: 25 73 22 2c 20 7a 43 52 29 3b 0a 20 20 20 20 7d  %s", zCR);.    }
7af0: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
7b00: 6f 75 74 2c 20 22 27 22 29 3b 0a 20 20 20 20 69  out, "'");.    i
7b10: 66 28 20 6e 43 52 20 29 7b 0a 20 20 20 20 20 20  f( nCR ){.      
7b20: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  raw_printf(out, 
7b30: 22 2c 27 25 73 27 2c 63 68 61 72 28 31 33 29 29  ",'%s',char(13))
7b40: 22 2c 20 7a 43 52 29 3b 0a 20 20 20 20 7d 0a 20  ", zCR);.    }. 
7b50: 20 20 20 69 66 28 20 6e 4e 4c 20 29 7b 0a 20 20     if( nNL ){.  
7b60: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
7b70: 75 74 2c 20 22 2c 27 25 73 27 2c 63 68 61 72 28  ut, ",'%s',char(
7b80: 31 30 29 29 22 2c 20 7a 4e 4c 29 3b 0a 20 20 20  10))", zNL);.   
7b90: 20 7d 0a 20 20 7d 0a 20 20 73 65 74 54 65 78 74   }.  }.  setText
7ba0: 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a 7d 0a  Mode(out, 1);.}.
7bb0: 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 68  ./*.** Output th
7bc0: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
7bd0: 73 20 61 20 71 75 6f 74 65 64 20 61 63 63 6f 72  s a quoted accor
7be0: 64 69 6e 67 20 74 6f 20 43 20 6f 72 20 54 43 4c  ding to C or TCL
7bf0: 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73 2e 0a   quoting rules..
7c00: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
7c10: 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 46  utput_c_string(F
7c20: 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20  ILE *out, const 
7c30: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 75 6e 73 69  char *z){.  unsi
7c40: 67 6e 65 64 20 69 6e 74 20 63 3b 0a 20 20 66 70  gned int c;.  fp
7c50: 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20  utc('"', out);. 
7c60: 20 77 68 69 6c 65 28 20 28 63 20 3d 20 2a 28 7a   while( (c = *(z
7c70: 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  ++))!=0 ){.    i
7c80: 66 28 20 63 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20  f( c=='\\' ){.  
7c90: 20 20 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74      fputc(c, out
7ca0: 29 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28 63  );.      fputc(c
7cb0: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73  , out);.    }els
7cc0: 65 20 69 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a  e if( c=='"' ){.
7cd0: 20 20 20 20 20 20 66 70 75 74 63 28 27 5c 5c 27        fputc('\\'
7ce0: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 70  , out);.      fp
7cf0: 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20  utc('"', out);. 
7d00: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
7d10: 27 5c 74 27 20 29 7b 0a 20 20 20 20 20 20 66 70  '\t' ){.      fp
7d20: 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b 0a  utc('\\', out);.
7d30: 20 20 20 20 20 20 66 70 75 74 63 28 27 74 27 2c        fputc('t',
7d40: 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65   out);.    }else
7d50: 20 69 66 28 20 63 3d 3d 27 5c 6e 27 20 29 7b 0a   if( c=='\n' ){.
7d60: 20 20 20 20 20 20 66 70 75 74 63 28 27 5c 5c 27        fputc('\\'
7d70: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 70  , out);.      fp
7d80: 75 74 63 28 27 6e 27 2c 20 6f 75 74 29 3b 0a 20  utc('n', out);. 
7d90: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
7da0: 27 5c 72 27 20 29 7b 0a 20 20 20 20 20 20 66 70  '\r' ){.      fp
7db0: 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b 0a  utc('\\', out);.
7dc0: 20 20 20 20 20 20 66 70 75 74 63 28 27 72 27 2c        fputc('r',
7dd0: 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65   out);.    }else
7de0: 20 69 66 28 20 21 69 73 70 72 69 6e 74 28 63 26   if( !isprint(c&
7df0: 30 78 66 66 29 20 29 7b 0a 20 20 20 20 20 20 72  0xff) ){.      r
7e00: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
7e10: 5c 5c 25 30 33 6f 22 2c 20 63 26 30 78 66 66 29  \\%03o", c&0xff)
7e20: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
7e30: 20 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74 29     fputc(c, out)
7e40: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 70  ;.    }.  }.  fp
7e50: 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 7d  utc('"', out);.}
7e60: 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74  ../*.** Output t
7e70: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
7e80: 77 69 74 68 20 63 68 61 72 61 63 74 65 72 73 20  with characters 
7e90: 74 68 61 74 20 61 72 65 20 73 70 65 63 69 61 6c  that are special
7ea0: 20 74 6f 0a 2a 2a 20 48 54 4d 4c 20 65 73 63 61   to.** HTML esca
7eb0: 70 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ped..*/.static v
7ec0: 6f 69 64 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f  oid output_html_
7ed0: 73 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75 74  string(FILE *out
7ee0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  , const char *z)
7ef0: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28  {.  int i;.  if(
7f00: 20 7a 3d 3d 30 20 29 20 7a 20 3d 20 22 22 3b 0a   z==0 ) z = "";.
7f10: 20 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20    while( *z ){. 
7f20: 20 20 20 66 6f 72 28 69 3d 30 3b 20 20 20 7a 5b     for(i=0;   z[
7f30: 69 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  i].            &
7f40: 26 20 7a 5b 69 5d 21 3d 27 3c 27 0a 20 20 20 20  & z[i]!='<'.    
7f50: 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69 5d 21          && z[i]!
7f60: 3d 27 26 27 0a 20 20 20 20 20 20 20 20 20 20 20  ='&'.           
7f70: 20 26 26 20 7a 5b 69 5d 21 3d 27 3e 27 0a 20 20   && z[i]!='>'.  
7f80: 20 20 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69            && z[i
7f90: 5d 21 3d 27 5c 22 27 0a 20 20 20 20 20 20 20 20  ]!='\"'.        
7fa0: 20 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 5c 27      && z[i]!='\'
7fb0: 27 3b 0a 20 20 20 20 20 20 20 20 69 2b 2b 29 7b  ';.        i++){
7fc0: 7d 0a 20 20 20 20 69 66 28 20 69 3e 30 20 29 7b  }.    if( i>0 ){
7fd0: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
7fe0: 74 66 28 6f 75 74 2c 22 25 2e 2a 73 22 2c 69 2c  tf(out,"%.*s",i,
7ff0: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  z);.    }.    if
8000: 28 20 7a 5b 69 5d 3d 3d 27 3c 27 20 29 7b 0a 20  ( z[i]=='<' ){. 
8010: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
8020: 6f 75 74 2c 22 26 6c 74 3b 22 29 3b 0a 20 20 20  out,"&lt;");.   
8030: 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d   }else if( z[i]=
8040: 3d 27 26 27 20 29 7b 0a 20 20 20 20 20 20 72 61  ='&' ){.      ra
8050: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 61  w_printf(out,"&a
8060: 6d 70 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  mp;");.    }else
8070: 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 3e 27 20 29   if( z[i]=='>' )
8080: 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
8090: 74 66 28 6f 75 74 2c 22 26 67 74 3b 22 29 3b 0a  tf(out,"&gt;");.
80a0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b      }else if( z[
80b0: 69 5d 3d 3d 27 5c 22 27 20 29 7b 0a 20 20 20 20  i]=='\"' ){.    
80c0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
80d0: 2c 22 26 71 75 6f 74 3b 22 29 3b 0a 20 20 20 20  ,"&quot;");.    
80e0: 7d 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d  }else if( z[i]==
80f0: 27 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 72 61  '\'' ){.      ra
8100: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 23  w_printf(out,"&#
8110: 33 39 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  39;");.    }else
8120: 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  {.      break;. 
8130: 20 20 20 7d 0a 20 20 20 20 7a 20 2b 3d 20 69 20     }.    z += i 
8140: 2b 20 31 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  + 1;.  }.}../*.*
8150: 2a 20 49 66 20 61 20 66 69 65 6c 64 20 63 6f 6e  * If a field con
8160: 74 61 69 6e 73 20 61 6e 79 20 63 68 61 72 61 63  tains any charac
8170: 74 65 72 20 69 64 65 6e 74 69 66 69 65 64 20 62  ter identified b
8180: 79 20 61 20 31 20 69 6e 20 74 68 65 20 66 6f 6c  y a 1 in the fol
8190: 6c 6f 77 69 6e 67 0a 2a 2a 20 61 72 72 61 79 2c  lowing.** array,
81a0: 20 74 68 65 6e 20 74 68 65 20 73 74 72 69 6e 67   then the string
81b0: 20 6d 75 73 74 20 62 65 20 71 75 6f 74 65 64 20   must be quoted 
81c0: 66 6f 72 20 43 53 56 2e 0a 2a 2f 0a 73 74 61 74  for CSV..*/.stat
81d0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6e 65  ic const char ne
81e0: 65 64 43 73 76 51 75 6f 74 65 5b 5d 20 3d 20 7b  edCsvQuote[] = {
81f0: 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  .  1, 1, 1, 1, 1
8200: 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20  , 1, 1, 1,   1, 
8210: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8220: 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20  , 1,.  1, 1, 1, 
8230: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20  1, 1, 1, 1, 1,  
8240: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8250: 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 30 2c  1, 1, 1,.  1, 0,
8260: 20 31 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   1, 0, 0, 0, 0, 
8270: 31 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c  1,   0, 0, 0, 0,
8280: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30   0, 0, 0, 0,.  0
8290: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
82a0: 20 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30   0, 0,   0, 0, 0
82b0: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
82c0: 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  .  0, 0, 0, 0, 0
82d0: 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20  , 0, 0, 0,   0, 
82e0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
82f0: 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c 20  , 0,.  0, 0, 0, 
8300: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20  0, 0, 0, 0, 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 20 30 2c 0a 20 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: 30 2c 20 20 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 20 30 2c 0a 20 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 30 2c 20 20 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 20 31 2c  , 0, 0, 0, 0, 1,
8390: 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  .  1, 1, 1, 1, 1
83a0: 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20  , 1, 1, 1,   1, 
83b0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
83c0: 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20  , 1,.  1, 1, 1, 
83d0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20  1, 1, 1, 1, 1,  
83e0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
83f0: 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c  1, 1, 1,.  1, 1,
8400: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8410: 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  1,   1, 1, 1, 1,
8420: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31   1, 1, 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 31 2c 20 20 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 20 31 2c  , 1, 1, 1, 1, 1,
8460: 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  .  1, 1, 1, 1, 1
8470: 2c 20 31 2c 20 31 2c 20 31 2c 20 20 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 20 31 2c 0a 20 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 31 2c 20 20  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 20 31 2c 0a 20 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: 31 2c 20 20 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 20 31 2c 0a 20 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 31 2c 20 20 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 20 31 2c  , 1, 1, 1, 1, 1,
8530: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75  .};../*.** Outpu
8540: 74 20 61 20 73 69 6e 67 6c 65 20 74 65 72 6d 20  t a single term 
8550: 6f 66 20 43 53 56 2e 20 20 41 63 74 75 61 6c 6c  of CSV.  Actuall
8560: 79 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  y, p->colSeparat
8570: 6f 72 20 69 73 20 75 73 65 64 20 66 6f 72 0a 2a  or is used for.*
8580: 2a 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 2c  * the separator,
8590: 20 77 68 69 63 68 20 6d 61 79 20 6f 72 20 6d 61   which may or ma
85a0: 79 20 6e 6f 74 20 62 65 20 61 20 63 6f 6d 6d 61  y not be a comma
85b0: 2e 20 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 20  .  p->nullValue 
85c0: 69 73 0a 2a 2a 20 74 68 65 20 6e 75 6c 6c 20 76  is.** the null v
85d0: 61 6c 75 65 2e 20 20 53 74 72 69 6e 67 73 20 61  alue.  Strings a
85e0: 72 65 20 71 75 6f 74 65 64 20 69 66 20 6e 65 63  re quoted if nec
85f0: 65 73 73 61 72 79 2e 20 20 54 68 65 20 73 65 70  essary.  The sep
8600: 61 72 61 74 6f 72 0a 2a 2a 20 69 73 20 6f 6e 6c  arator.** is onl
8610: 79 20 69 73 73 75 65 64 20 69 66 20 62 53 65 70  y issued if bSep
8620: 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 73 74 61   is true..*/.sta
8630: 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f  tic void output_
8640: 63 73 76 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  csv(ShellState *
8650: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
8660: 2c 20 69 6e 74 20 62 53 65 70 29 7b 0a 20 20 46  , int bSep){.  F
8670: 49 4c 45 20 2a 6f 75 74 20 3d 20 70 2d 3e 6f 75  ILE *out = p->ou
8680: 74 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b  t;.  if( z==0 ){
8690: 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
86a0: 28 6f 75 74 2c 22 25 73 22 2c 70 2d 3e 6e 75 6c  (out,"%s",p->nul
86b0: 6c 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73 65  lValue);.  }else
86c0: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
86d0: 20 69 6e 74 20 6e 53 65 70 20 3d 20 73 74 72 6c   int nSep = strl
86e0: 65 6e 33 30 28 70 2d 3e 63 6f 6c 53 65 70 61 72  en30(p->colSepar
86f0: 61 74 6f 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  ator);.    for(i
8700: 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  =0; z[i]; i++){.
8710: 20 20 20 20 20 20 69 66 28 20 6e 65 65 64 43 73        if( needCs
8720: 76 51 75 6f 74 65 5b 28 28 75 6e 73 69 67 6e 65  vQuote[((unsigne
8730: 64 20 63 68 61 72 2a 29 7a 29 5b 69 5d 5d 0a 20  d char*)z)[i]]. 
8740: 20 20 20 20 20 20 20 20 7c 7c 20 28 7a 5b 69 5d          || (z[i]
8750: 3d 3d 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  ==p->colSeparato
8760: 72 5b 30 5d 20 26 26 0a 20 20 20 20 20 20 20 20  r[0] &&.        
8770: 20 20 20 20 20 28 6e 53 65 70 3d 3d 31 20 7c 7c       (nSep==1 ||
8780: 20 6d 65 6d 63 6d 70 28 7a 2c 20 70 2d 3e 63 6f   memcmp(z, p->co
8790: 6c 53 65 70 61 72 61 74 6f 72 2c 20 6e 53 65 70  lSeparator, nSep
87a0: 29 3d 3d 30 29 29 20 29 7b 0a 20 20 20 20 20 20  )==0)) ){.      
87b0: 20 20 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    i = 0;.       
87c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
87d0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69 3d      }.    if( i=
87e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72  =0 ){.      char
87f0: 20 2a 7a 51 75 6f 74 65 64 20 3d 20 73 71 6c 69   *zQuoted = sqli
8800: 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22 25  te3_mprintf("\"%
8810: 77 5c 22 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20  w\"", z);.      
8820: 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c  utf8_printf(out,
8830: 20 22 25 73 22 2c 20 7a 51 75 6f 74 65 64 29 3b   "%s", zQuoted);
8840: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
8850: 72 65 65 28 7a 51 75 6f 74 65 64 29 3b 0a 20 20  ree(zQuoted);.  
8860: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 75    }else{.      u
8870: 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  tf8_printf(out, 
8880: 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a  "%s", z);.    }.
8890: 20 20 7d 0a 20 20 69 66 28 20 62 53 65 70 20 29    }.  if( bSep )
88a0: 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  {.    utf8_print
88b0: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
88c0: 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29  p->colSeparator)
88d0: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  ;.  }.}../*.** T
88e0: 68 69 73 20 72 6f 75 74 69 6e 65 20 72 75 6e 73  his routine runs
88f0: 20 77 68 65 6e 20 74 68 65 20 75 73 65 72 20 70   when the user p
8900: 72 65 73 73 65 73 20 43 74 72 6c 2d 43 0a 2a 2f  resses Ctrl-C.*/
8910: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 69 6e 74  .static void int
8920: 65 72 72 75 70 74 5f 68 61 6e 64 6c 65 72 28 69  errupt_handler(i
8930: 6e 74 20 4e 6f 74 55 73 65 64 29 7b 0a 20 20 55  nt NotUsed){.  U
8940: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
8950: 4e 6f 74 55 73 65 64 29 3b 0a 20 20 73 65 65 6e  NotUsed);.  seen
8960: 49 6e 74 65 72 72 75 70 74 2b 2b 3b 0a 20 20 69  Interrupt++;.  i
8970: 66 28 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74  f( seenInterrupt
8980: 3e 32 20 29 20 65 78 69 74 28 31 29 3b 0a 20 20  >2 ) exit(1);.  
8990: 69 66 28 20 67 6c 6f 62 61 6c 44 62 20 29 20 73  if( globalDb ) s
89a0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
89b0: 28 67 6c 6f 62 61 6c 44 62 29 3b 0a 7d 0a 0a 23  (globalDb);.}..#
89c0: 69 66 20 28 64 65 66 69 6e 65 64 28 5f 57 49 4e  if (defined(_WIN
89d0: 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57  32) || defined(W
89e0: 49 4e 33 32 29 29 20 26 26 20 21 64 65 66 69 6e  IN32)) && !defin
89f0: 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 2f  ed(_WIN32_WCE)./
8a00: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
8a10: 65 20 72 75 6e 73 20 66 6f 72 20 63 6f 6e 73 6f  e runs for conso
8a20: 6c 65 20 65 76 65 6e 74 73 20 28 65 2e 67 2e 20  le events (e.g. 
8a30: 43 74 72 6c 2d 43 29 20 6f 6e 20 57 69 6e 33 32  Ctrl-C) on Win32
8a40: 0a 2a 2f 0a 73 74 61 74 69 63 20 42 4f 4f 4c 20  .*/.static BOOL 
8a50: 57 49 4e 41 50 49 20 43 6f 6e 73 6f 6c 65 43 74  WINAPI ConsoleCt
8a60: 72 6c 48 61 6e 64 6c 65 72 28 0a 20 20 44 57 4f  rlHandler(.  DWO
8a70: 52 44 20 64 77 43 74 72 6c 54 79 70 65 20 2f 2a  RD dwCtrlType /*
8a80: 20 4f 6e 65 20 6f 66 20 74 68 65 20 43 54 52 4c   One of the CTRL
8a90: 5f 2a 5f 45 56 45 4e 54 20 63 6f 6e 73 74 61 6e  _*_EVENT constan
8aa0: 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 64  ts */.){.  if( d
8ab0: 77 43 74 72 6c 54 79 70 65 3d 3d 43 54 52 4c 5f  wCtrlType==CTRL_
8ac0: 43 5f 45 56 45 4e 54 20 29 7b 0a 20 20 20 20 69  C_EVENT ){.    i
8ad0: 6e 74 65 72 72 75 70 74 5f 68 61 6e 64 6c 65 72  nterrupt_handler
8ae0: 28 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  (0);.    return 
8af0: 54 52 55 45 3b 0a 20 20 7d 0a 20 20 72 65 74 75  TRUE;.  }.  retu
8b00: 72 6e 20 46 41 4c 53 45 3b 0a 7d 0a 23 65 6e 64  rn FALSE;.}.#end
8b10: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
8b20: 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
8b30: 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  ATION./*.** When
8b40: 20 74 68 65 20 22 2e 61 75 74 68 20 4f 4e 22 20   the ".auth ON" 
8b50: 69 73 20 73 65 74 2c 20 74 68 65 20 66 6f 6c 6c  is set, the foll
8b60: 6f 77 69 6e 67 20 61 75 74 68 6f 72 69 7a 65 72  owing authorizer
8b70: 20 63 61 6c 6c 62 61 63 6b 20 69 73 0a 2a 2a 20   callback is.** 
8b80: 69 6e 76 6f 6b 65 64 2e 20 20 49 74 20 61 6c 77  invoked.  It alw
8b90: 61 79 73 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ays returns SQLI
8ba0: 54 45 5f 4f 4b 2e 0a 2a 2f 0a 73 74 61 74 69 63  TE_OK..*/.static
8bb0: 20 69 6e 74 20 73 68 65 6c 6c 41 75 74 68 28 0a   int shellAuth(.
8bc0: 20 20 76 6f 69 64 20 2a 70 43 6c 69 65 6e 74 44    void *pClientD
8bd0: 61 74 61 2c 0a 20 20 69 6e 74 20 6f 70 2c 0a 20  ata,.  int op,. 
8be0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 31   const char *zA1
8bf0: 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
8c00: 7a 41 32 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61  zA2,.  const cha
8c10: 72 20 2a 7a 41 33 2c 0a 20 20 63 6f 6e 73 74 20  r *zA3,.  const 
8c20: 63 68 61 72 20 2a 7a 41 34 0a 29 7b 0a 20 20 53  char *zA4.){.  S
8c30: 68 65 6c 6c 53 74 61 74 65 20 2a 70 20 3d 20 28  hellState *p = (
8c40: 53 68 65 6c 6c 53 74 61 74 65 2a 29 70 43 6c 69  ShellState*)pCli
8c50: 65 6e 74 44 61 74 61 3b 0a 20 20 73 74 61 74 69  entData;.  stati
8c60: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
8c70: 41 63 74 69 6f 6e 5b 5d 20 3d 20 7b 20 30 2c 0a  Action[] = { 0,.
8c80: 20 20 20 20 20 22 43 52 45 41 54 45 5f 49 4e 44       "CREATE_IND
8c90: 45 58 22 2c 20 20 20 20 20 20 20 20 20 22 43 52  EX",         "CR
8ca0: 45 41 54 45 5f 54 41 42 4c 45 22 2c 20 20 20 20  EATE_TABLE",    
8cb0: 20 20 20 20 20 22 43 52 45 41 54 45 5f 54 45 4d       "CREATE_TEM
8cc0: 50 5f 49 4e 44 45 58 22 2c 0a 20 20 20 20 20 22  P_INDEX",.     "
8cd0: 43 52 45 41 54 45 5f 54 45 4d 50 5f 54 41 42 4c  CREATE_TEMP_TABL
8ce0: 45 22 2c 20 20 20 20 22 43 52 45 41 54 45 5f 54  E",    "CREATE_T
8cf0: 45 4d 50 5f 54 52 49 47 47 45 52 22 2c 20 20 22  EMP_TRIGGER",  "
8d00: 43 52 45 41 54 45 5f 54 45 4d 50 5f 56 49 45 57  CREATE_TEMP_VIEW
8d10: 22 2c 0a 20 20 20 20 20 22 43 52 45 41 54 45 5f  ",.     "CREATE_
8d20: 54 52 49 47 47 45 52 22 2c 20 20 20 20 20 20 20  TRIGGER",       
8d30: 22 43 52 45 41 54 45 5f 56 49 45 57 22 2c 20 20  "CREATE_VIEW",  
8d40: 20 20 20 20 20 20 20 20 22 44 45 4c 45 54 45 22          "DELETE"
8d50: 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f 49 4e 44  ,.     "DROP_IND
8d60: 45 58 22 2c 20 20 20 20 20 20 20 20 20 20 20 22  EX",           "
8d70: 44 52 4f 50 5f 54 41 42 4c 45 22 2c 20 20 20 20  DROP_TABLE",    
8d80: 20 20 20 20 20 20 20 22 44 52 4f 50 5f 54 45 4d         "DROP_TEM
8d90: 50 5f 49 4e 44 45 58 22 2c 0a 20 20 20 20 20 22  P_INDEX",.     "
8da0: 44 52 4f 50 5f 54 45 4d 50 5f 54 41 42 4c 45 22  DROP_TEMP_TABLE"
8db0: 2c 20 20 20 20 20 20 22 44 52 4f 50 5f 54 45 4d  ,      "DROP_TEM
8dc0: 50 5f 54 52 49 47 47 45 52 22 2c 20 20 20 20 22  P_TRIGGER",    "
8dd0: 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22 2c  DROP_TEMP_VIEW",
8de0: 0a 20 20 20 20 20 22 44 52 4f 50 5f 54 52 49 47  .     "DROP_TRIG
8df0: 47 45 52 22 2c 20 20 20 20 20 20 20 20 20 22 44  GER",         "D
8e00: 52 4f 50 5f 56 49 45 57 22 2c 20 20 20 20 20 20  ROP_VIEW",      
8e10: 20 20 20 20 20 20 22 49 4e 53 45 52 54 22 2c 0a        "INSERT",.
8e20: 20 20 20 20 20 22 50 52 41 47 4d 41 22 2c 20 20       "PRAGMA",  
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52 45               "RE
8e40: 41 44 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  AD",            
8e50: 20 20 20 20 20 22 53 45 4c 45 43 54 22 2c 0a 20       "SELECT",. 
8e60: 20 20 20 20 22 54 52 41 4e 53 41 43 54 49 4f 4e      "TRANSACTION
8e70: 22 2c 20 20 20 20 20 20 20 20 20 20 22 55 50 44  ",          "UPD
8e80: 41 54 45 22 2c 20 20 20 20 20 20 20 20 20 20 20  ATE",           
8e90: 20 20 20 20 22 41 54 54 41 43 48 22 2c 0a 20 20      "ATTACH",.  
8ea0: 20 20 20 22 44 45 54 41 43 48 22 2c 20 20 20 20     "DETACH",    
8eb0: 20 20 20 20 20 20 20 20 20 20 20 22 41 4c 54 45             "ALTE
8ec0: 52 5f 54 41 42 4c 45 22 2c 20 20 20 20 20 20 20  R_TABLE",       
8ed0: 20 20 20 22 52 45 49 4e 44 45 58 22 2c 0a 20 20     "REINDEX",.  
8ee0: 20 20 20 22 41 4e 41 4c 59 5a 45 22 2c 20 20 20     "ANALYZE",   
8ef0: 20 20 20 20 20 20 20 20 20 20 20 22 43 52 45 41             "CREA
8f00: 54 45 5f 56 54 41 42 4c 45 22 2c 20 20 20 20 20  TE_VTABLE",     
8f10: 20 20 20 22 44 52 4f 50 5f 56 54 41 42 4c 45 22     "DROP_VTABLE"
8f20: 2c 0a 20 20 20 20 20 22 46 55 4e 43 54 49 4f 4e  ,.     "FUNCTION
8f30: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 22  ",             "
8f40: 53 41 56 45 50 4f 49 4e 54 22 2c 20 20 20 20 20  SAVEPOINT",     
8f50: 20 20 20 20 20 20 20 22 52 45 43 55 52 53 49 56         "RECURSIV
8f60: 45 22 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69 3b  E".  };.  int i;
8f70: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  .  const char *a
8f80: 7a 5b 34 5d 3b 0a 20 20 61 7a 5b 30 5d 20 3d 20  z[4];.  az[0] = 
8f90: 7a 41 31 3b 0a 20 20 61 7a 5b 31 5d 20 3d 20 7a  zA1;.  az[1] = z
8fa0: 41 32 3b 0a 20 20 61 7a 5b 32 5d 20 3d 20 7a 41  A2;.  az[2] = zA
8fb0: 33 3b 0a 20 20 61 7a 5b 33 5d 20 3d 20 7a 41 34  3;.  az[3] = zA4
8fc0: 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28  ;.  utf8_printf(
8fd0: 70 2d 3e 6f 75 74 2c 20 22 61 75 74 68 6f 72 69  p->out, "authori
8fe0: 7a 65 72 3a 20 25 73 22 2c 20 61 7a 41 63 74 69  zer: %s", azActi
8ff0: 6f 6e 5b 6f 70 5d 29 3b 0a 20 20 66 6f 72 28 69  on[op]);.  for(i
9000: 3d 30 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20  =0; i<4; i++){. 
9010: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
9020: 3e 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20  >out, " ");.    
9030: 69 66 28 20 61 7a 5b 69 5d 20 29 7b 0a 20 20 20  if( az[i] ){.   
9040: 20 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69     output_c_stri
9050: 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 5b 69 5d  ng(p->out, az[i]
9060: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
9070: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
9080: 2d 3e 6f 75 74 2c 20 22 4e 55 4c 4c 22 29 3b 0a  ->out, "NULL");.
9090: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 61 77 5f      }.  }.  raw_
90a0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
90b0: 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 53  \n");.  return S
90c0: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64  QLITE_OK;.}.#end
90d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  if../*.** Print 
90e0: 61 20 73 63 68 65 6d 61 20 73 74 61 74 65 6d 65  a schema stateme
90f0: 6e 74 2e 20 20 50 61 72 74 20 6f 66 20 4d 4f 44  nt.  Part of MOD
9100: 45 5f 53 65 6d 69 20 61 6e 64 20 4d 4f 44 45 5f  E_Semi and MODE_
9110: 50 72 65 74 74 79 20 6f 75 74 70 75 74 2e 0a 2a  Pretty output..*
9120: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
9130: 65 20 63 6f 6e 76 65 72 74 73 20 73 6f 6d 65 20  e converts some 
9140: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
9150: 74 65 6d 65 6e 74 73 20 66 6f 72 20 73 68 61 64  tements for shad
9160: 6f 77 20 74 61 62 6c 65 73 0a 2a 2a 20 69 6e 20  ow tables.** in 
9170: 46 54 53 33 2f 34 2f 35 20 69 6e 74 6f 20 43 52  FTS3/4/5 into CR
9180: 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f  EATE TABLE IF NO
9190: 54 20 45 58 49 53 54 53 20 73 74 61 74 65 6d 65  T EXISTS stateme
91a0: 6e 74 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  nts..*/.static v
91b0: 6f 69 64 20 70 72 69 6e 74 53 63 68 65 6d 61 4c  oid printSchemaL
91c0: 69 6e 65 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63  ine(FILE *out, c
91d0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 63 6f  onst char *z, co
91e0: 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 29  nst char *zTail)
91f0: 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  {.  if( sqlite3_
9200: 73 74 72 67 6c 6f 62 28 22 43 52 45 41 54 45 20  strglob("CREATE 
9210: 54 41 42 4c 45 20 5b 27 5c 22 5d 2a 22 2c 20 7a  TABLE ['\"]*", z
9220: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38  )==0 ){.    utf8
9230: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 43 52  _printf(out, "CR
9240: 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f  EATE TABLE IF NO
9250: 54 20 45 58 49 53 54 53 20 25 73 25 73 22 2c 20  T EXISTS %s%s", 
9260: 7a 2b 31 33 2c 20 7a 54 61 69 6c 29 3b 0a 20 20  z+13, zTail);.  
9270: 7d 65 6c 73 65 7b 0a 20 20 20 20 75 74 66 38 5f  }else{.    utf8_
9280: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 25  printf(out, "%s%
9290: 73 22 2c 20 7a 2c 20 7a 54 61 69 6c 29 3b 0a 20  s", z, zTail);. 
92a0: 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64   }.}.static void
92b0: 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65   printSchemaLine
92c0: 4e 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63 68 61  N(FILE *out, cha
92d0: 72 20 2a 7a 2c 20 69 6e 74 20 6e 2c 20 63 6f 6e  r *z, int n, con
92e0: 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 29 7b  st char *zTail){
92f0: 0a 20 20 63 68 61 72 20 63 20 3d 20 7a 5b 6e 5d  .  char c = z[n]
9300: 3b 0a 20 20 7a 5b 6e 5d 20 3d 20 30 3b 0a 20 20  ;.  z[n] = 0;.  
9310: 70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28  printSchemaLine(
9320: 6f 75 74 2c 20 7a 2c 20 7a 54 61 69 6c 29 3b 0a  out, z, zTail);.
9330: 20 20 7a 5b 6e 5d 20 3d 20 63 3b 0a 7d 0a 0a 2f    z[n] = c;.}../
9340: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  *.** This is the
9350: 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   callback routin
9360: 65 20 74 68 61 74 20 74 68 65 20 73 68 65 6c 6c  e that the shell
9370: 0a 2a 2a 20 69 6e 76 6f 6b 65 73 20 66 6f 72 20  .** invokes for 
9380: 65 61 63 68 20 72 6f 77 20 6f 66 20 61 20 71 75  each row of a qu
9390: 65 72 79 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73  ery result..*/.s
93a0: 74 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f  tatic int shell_
93b0: 63 61 6c 6c 62 61 63 6b 28 0a 20 20 76 6f 69 64  callback(.  void
93c0: 20 2a 70 41 72 67 2c 0a 20 20 69 6e 74 20 6e 41   *pArg,.  int nA
93d0: 72 67 2c 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rg,        /* Nu
93e0: 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63  mber of result c
93f0: 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 63 68 61 72  olumns */.  char
9400: 20 2a 2a 61 7a 41 72 67 2c 20 20 20 20 2f 2a 20   **azArg,    /* 
9410: 54 65 78 74 20 6f 66 20 65 61 63 68 20 72 65 73  Text of each res
9420: 75 6c 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ult column */.  
9430: 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 2c 20 20 20  char **azCol,   
9440: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73   /* Column names
9450: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 54 79 70   */.  int *aiTyp
9460: 65 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  e      /* Column
9470: 20 74 79 70 65 73 20 2a 2f 0a 29 7b 0a 20 20 69   types */.){.  i
9480: 6e 74 20 69 3b 0a 20 20 53 68 65 6c 6c 53 74 61  nt i;.  ShellSta
9490: 74 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74  te *p = (ShellSt
94a0: 61 74 65 2a 29 70 41 72 67 3b 0a 0a 20 20 69 66  ate*)pArg;..  if
94b0: 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 72 65 74  ( azArg==0 ) ret
94c0: 75 72 6e 20 30 3b 0a 20 20 73 77 69 74 63 68 28  urn 0;.  switch(
94d0: 20 70 2d 3e 63 4d 6f 64 65 20 29 7b 0a 20 20 20   p->cMode ){.   
94e0: 20 63 61 73 65 20 4d 4f 44 45 5f 4c 69 6e 65 3a   case MODE_Line:
94f0: 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 77 20 3d   {.      int w =
9500: 20 35 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a   5;.      if( az
9510: 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  Arg==0 ) break;.
9520: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
9530: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
9540: 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 73       int len = s
9550: 74 72 6c 65 6e 33 30 28 61 7a 43 6f 6c 5b 69 5d  trlen30(azCol[i]
9560: 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22   ? azCol[i] : ""
9570: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6c  );.        if( l
9580: 65 6e 3e 77 20 29 20 77 20 3d 20 6c 65 6e 3b 0a  en>w ) w = len;.
9590: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
95a0: 28 20 70 2d 3e 63 6e 74 2b 2b 3e 30 20 29 20 75  ( p->cnt++>0 ) u
95b0: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
95c0: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53  t, "%s", p->rowS
95d0: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
95e0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
95f0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
9600: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
9610: 75 74 2c 22 25 2a 73 20 3d 20 25 73 25 73 22 2c  ut,"%*s = %s%s",
9620: 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 0a 20 20   w, azCol[i],.  
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a                az
9640: 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69  Arg[i] ? azArg[i
9650: 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  ] : p->nullValue
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 7d 0a 20 20 20 20  r);.      }.    
9680: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
9690: 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 45 78 70     case MODE_Exp
96a0: 6c 61 69 6e 3a 0a 20 20 20 20 63 61 73 65 20 4d  lain:.    case M
96b0: 4f 44 45 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  ODE_Column: {.  
96c0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
96d0: 20 69 6e 74 20 61 45 78 70 6c 61 69 6e 57 69 64   int aExplainWid
96e0: 74 68 73 5b 5d 20 3d 20 7b 34 2c 20 31 33 2c 20  ths[] = {4, 13, 
96f0: 34 2c 20 34 2c 20 34 2c 20 31 33 2c 20 32 2c 20  4, 4, 4, 13, 2, 
9700: 31 33 7d 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74  13};.      const
9710: 20 69 6e 74 20 2a 63 6f 6c 57 69 64 74 68 3b 0a   int *colWidth;.
9720: 20 20 20 20 20 20 69 6e 74 20 73 68 6f 77 48 64        int showHd
9730: 72 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 72  r;.      char *r
9740: 6f 77 53 65 70 3b 0a 20 20 20 20 20 20 69 66 28  owSep;.      if(
9750: 20 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f   p->cMode==MODE_
9760: 43 6f 6c 75 6d 6e 20 29 7b 0a 20 20 20 20 20 20  Column ){.      
9770: 20 20 63 6f 6c 57 69 64 74 68 20 3d 20 70 2d 3e    colWidth = p->
9780: 63 6f 6c 57 69 64 74 68 3b 0a 20 20 20 20 20 20  colWidth;.      
9790: 20 20 73 68 6f 77 48 64 72 20 3d 20 70 2d 3e 73    showHdr = p->s
97a0: 68 6f 77 48 65 61 64 65 72 3b 0a 20 20 20 20 20  howHeader;.     
97b0: 20 20 20 72 6f 77 53 65 70 20 3d 20 70 2d 3e 72     rowSep = p->r
97c0: 6f 77 53 65 70 61 72 61 74 6f 72 3b 0a 20 20 20  owSeparator;.   
97d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
97e0: 20 20 63 6f 6c 57 69 64 74 68 20 3d 20 61 45 78    colWidth = aEx
97f0: 70 6c 61 69 6e 57 69 64 74 68 73 3b 0a 20 20 20  plainWidths;.   
9800: 20 20 20 20 20 73 68 6f 77 48 64 72 20 3d 20 31       showHdr = 1
9810: 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 53 65 70  ;.        rowSep
9820: 20 3d 20 53 45 50 5f 52 6f 77 3b 0a 20 20 20 20   = SEP_Row;.    
9830: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 2d    }.      if( p-
9840: 3e 63 6e 74 2b 2b 3d 3d 30 20 29 7b 0a 20 20 20  >cnt++==0 ){.   
9850: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
9860: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
9870: 20 20 20 20 20 20 69 6e 74 20 77 2c 20 6e 3b 0a        int w, n;.
9880: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 3c            if( i<
9890: 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c  ArraySize(p->col
98a0: 57 69 64 74 68 29 20 29 7b 0a 20 20 20 20 20 20  Width) ){.      
98b0: 20 20 20 20 20 20 77 20 3d 20 63 6f 6c 57 69 64        w = colWid
98c0: 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20  th[i];.         
98d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
98e0: 20 20 20 20 77 20 3d 20 30 3b 0a 20 20 20 20 20      w = 0;.     
98f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
9900: 20 69 66 28 20 77 3d 3d 30 20 29 7b 0a 20 20 20   if( w==0 ){.   
9910: 20 20 20 20 20 20 20 20 20 77 20 3d 20 73 74 72           w = str
9920: 6c 65 6e 43 68 61 72 28 61 7a 43 6f 6c 5b 69 5d  lenChar(azCol[i]
9930: 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22   ? azCol[i] : ""
9940: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
9950: 66 28 20 77 3c 31 30 20 29 20 77 20 3d 20 31 30  f( w<10 ) w = 10
9960: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ;.            n 
9970: 3d 20 73 74 72 6c 65 6e 43 68 61 72 28 61 7a 41  = strlenChar(azA
9980: 72 67 20 26 26 20 61 7a 41 72 67 5b 69 5d 20 3f  rg && azArg[i] ?
9990: 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e   azArg[i] : p->n
99a0: 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20  ullValue);.     
99b0: 20 20 20 20 20 20 20 69 66 28 20 77 3c 6e 20 29         if( w<n )
99c0: 20 77 20 3d 20 6e 3b 0a 20 20 20 20 20 20 20 20   w = n;.        
99d0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
99e0: 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  ( i<ArraySize(p-
99f0: 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b  >actualWidth) ){
9a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e  .            p->
9a10: 61 63 74 75 61 6c 57 69 64 74 68 5b 69 5d 20 3d  actualWidth[i] =
9a20: 20 77 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   w;.          }.
9a30: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73 68            if( sh
9a40: 6f 77 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20  owHdr ){.       
9a50: 20 20 20 20 20 75 74 66 38 5f 77 69 64 74 68 5f       utf8_width_
9a60: 70 72 69 6e 74 28 70 2d 3e 6f 75 74 2c 20 77 2c  print(p->out, w,
9a70: 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20   azCol[i]);.    
9a80: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
9a90: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
9aa0: 2c 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 72 6f  , i==nArg-1 ? ro
9ab0: 77 53 65 70 20 3a 20 22 20 20 22 29 3b 0a 20 20  wSep : "  ");.  
9ac0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9ad0: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
9ae0: 73 68 6f 77 48 64 72 20 29 7b 0a 20 20 20 20 20  showHdr ){.     
9af0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
9b00: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
9b10: 20 20 20 20 20 20 20 20 69 6e 74 20 77 3b 0a 20          int w;. 
9b20: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69             if( i
9b30: 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 63  <ArraySize(p->ac
9b40: 74 75 61 6c 57 69 64 74 68 29 20 29 7b 0a 20 20  tualWidth) ){.  
9b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 20 3d               w =
9b60: 20 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 5b   p->actualWidth[
9b70: 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  i];.            
9b80: 20 20 20 69 66 28 20 77 3c 30 20 29 20 77 20 3d     if( w<0 ) w =
9b90: 20 2d 77 3b 0a 20 20 20 20 20 20 20 20 20 20 20   -w;.           
9ba0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
9bb0: 20 20 20 20 20 20 20 77 20 3d 20 31 30 3b 0a 20         w = 10;. 
9bc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
9bd0: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
9be0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 2d 2a  intf(p->out,"%-*
9bf0: 2e 2a 73 25 73 22 2c 77 2c 77 2c 0a 20 20 20 20  .*s%s",w,w,.    
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
9c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20 20  ----------".    
9c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
9c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 2c 0a 20 20 20  ----------",.   
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cb0: 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 72 6f 77   i==nArg-1 ? row
9cc0: 53 65 70 20 3a 20 22 20 20 22 29 3b 0a 20 20 20  Sep : "  ");.   
9cd0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9ce0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
9cf0: 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20   if( azArg==0 ) 
9d00: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72  break;.      for
9d10: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
9d20: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  +){.        int 
9d30: 77 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  w;.        if( i
9d40: 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 63  <ArraySize(p->ac
9d50: 74 75 61 6c 57 69 64 74 68 29 20 29 7b 0a 20 20  tualWidth) ){.  
9d60: 20 20 20 20 20 20 20 20 20 77 20 3d 20 70 2d 3e           w = p->
9d70: 61 63 74 75 61 6c 57 69 64 74 68 5b 69 5d 3b 0a  actualWidth[i];.
9d80: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
9d90: 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 31 30            w = 10
9da0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
9db0: 20 20 20 20 69 66 28 20 70 2d 3e 63 4d 6f 64 65      if( p->cMode
9dc0: 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 26  ==MODE_Explain &
9dd0: 26 20 61 7a 41 72 67 5b 69 5d 20 26 26 20 73 74  & azArg[i] && st
9de0: 72 6c 65 6e 43 68 61 72 28 61 7a 41 72 67 5b 69  rlenChar(azArg[i
9df0: 5d 29 3e 77 20 29 7b 0a 20 20 20 20 20 20 20 20  ])>w ){.        
9e00: 20 20 77 20 3d 20 73 74 72 6c 65 6e 43 68 61 72    w = strlenChar
9e10: 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20  (azArg[i]);.    
9e20: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
9e30: 28 20 69 3d 3d 31 20 26 26 20 70 2d 3e 61 69 49  ( i==1 && p->aiI
9e40: 6e 64 65 6e 74 20 26 26 20 70 2d 3e 70 53 74 6d  ndent && p->pStm
9e50: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  t ){.          i
9e60: 66 28 20 70 2d 3e 69 49 6e 64 65 6e 74 3c 70 2d  f( p->iIndent<p-
9e70: 3e 6e 49 6e 64 65 6e 74 20 29 7b 0a 20 20 20 20  >nIndent ){.    
9e80: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
9e90: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2a 2e  ntf(p->out, "%*.
9ea0: 73 22 2c 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b  s", p->aiIndent[
9eb0: 70 2d 3e 69 49 6e 64 65 6e 74 5d 2c 20 22 22 29  p->iIndent], "")
9ec0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
9ed0: 20 20 20 20 20 20 20 20 70 2d 3e 69 49 6e 64 65          p->iInde
9ee0: 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
9ef0: 20 20 20 20 20 20 20 20 75 74 66 38 5f 77 69 64          utf8_wid
9f00: 74 68 5f 70 72 69 6e 74 28 70 2d 3e 6f 75 74 2c  th_print(p->out,
9f10: 20 77 2c 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61   w, azArg[i] ? a
9f20: 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c  zArg[i] : p->nul
9f30: 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20  lValue);.       
9f40: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
9f50: 6f 75 74 2c 20 22 25 73 22 2c 20 69 3d 3d 6e 41  out, "%s", i==nA
9f60: 72 67 2d 31 20 3f 20 72 6f 77 53 65 70 20 3a 20  rg-1 ? rowSep : 
9f70: 22 20 20 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  "  ");.      }. 
9f80: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9f90: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
9fa0: 53 65 6d 69 3a 20 7b 20 20 20 2f 2a 20 2e 73 63  Semi: {   /* .sc
9fb0: 68 65 6d 61 20 61 6e 64 20 2e 66 75 6c 6c 73 63  hema and .fullsc
9fc0: 68 65 6d 61 20 6f 75 74 70 75 74 20 2a 2f 0a 20  hema output */. 
9fd0: 20 20 20 20 20 70 72 69 6e 74 53 63 68 65 6d 61       printSchema
9fe0: 4c 69 6e 65 28 70 2d 3e 6f 75 74 2c 20 61 7a 41  Line(p->out, azA
9ff0: 72 67 5b 30 5d 2c 20 22 3b 5c 6e 22 29 3b 0a 20  rg[0], ";\n");. 
a000: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a010: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
a020: 50 72 65 74 74 79 3a 20 7b 20 20 2f 2a 20 2e 73  Pretty: {  /* .s
a030: 63 68 65 6d 61 20 61 6e 64 20 2e 66 75 6c 6c 73  chema and .fulls
a040: 63 68 65 6d 61 20 77 69 74 68 20 2d 2d 69 6e 64  chema with --ind
a050: 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 63 68 61  ent */.      cha
a060: 72 20 2a 7a 3b 0a 20 20 20 20 20 20 69 6e 74 20  r *z;.      int 
a070: 6a 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 50 61  j;.      int nPa
a080: 72 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 63  ren = 0;.      c
a090: 68 61 72 20 63 45 6e 64 20 3d 20 30 3b 0a 20 20  har cEnd = 0;.  
a0a0: 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20      char c;.    
a0b0: 20 20 69 6e 74 20 6e 4c 69 6e 65 20 3d 20 30 3b    int nLine = 0;
a0c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
a0d0: 41 72 67 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  Arg==1 );.      
a0e0: 69 66 28 20 61 7a 41 72 67 5b 30 5d 3d 3d 30 20  if( azArg[0]==0 
a0f0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69  ) break;.      i
a100: 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69  f( sqlite3_strli
a110: 6b 65 28 22 43 52 45 41 54 45 20 56 49 45 57 25  ke("CREATE VIEW%
a120: 22 2c 20 61 7a 41 72 67 5b 30 5d 2c 20 30 29 3d  ", azArg[0], 0)=
a130: 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20 73 71 6c  =0.       || sql
a140: 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 22 43 52  ite3_strlike("CR
a150: 45 41 54 45 20 54 52 49 47 25 22 2c 20 61 7a 41  EATE TRIG%", azA
a160: 72 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a 20 20 20  rg[0], 0)==0.   
a170: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74     ){.        ut
a180: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
a190: 2c 20 22 25 73 3b 5c 6e 22 2c 20 61 7a 41 72 67  , "%s;\n", azArg
a1a0: 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 62 72  [0]);.        br
a1b0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
a1c0: 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d     z = sqlite3_m
a1d0: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 61 7a 41  printf("%s", azA
a1e0: 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20 20 6a 20  rg[0]);.      j 
a1f0: 3d 20 30 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  = 0;.      for(i
a200: 3d 30 3b 20 49 73 53 70 61 63 65 28 7a 5b 69 5d  =0; IsSpace(z[i]
a210: 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20  ); i++){}.      
a220: 66 6f 72 28 3b 20 28 63 20 3d 20 7a 5b 69 5d 29  for(; (c = z[i])
a230: 21 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  !=0; i++){.     
a240: 20 20 20 69 66 28 20 49 73 53 70 61 63 65 28 63     if( IsSpace(c
a250: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ) ){.          i
a260: 66 28 20 7a 5b 6a 2d 31 5d 3d 3d 27 5c 72 27 20  f( z[j-1]=='\r' 
a270: 29 20 7a 5b 6a 2d 31 5d 20 3d 20 27 5c 6e 27 3b  ) z[j-1] = '\n';
a280: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 49  .          if( I
a290: 73 53 70 61 63 65 28 7a 5b 6a 2d 31 5d 29 20 7c  sSpace(z[j-1]) |
a2a0: 7c 20 7a 5b 6a 2d 31 5d 3d 3d 27 28 27 20 29 20  | z[j-1]=='(' ) 
a2b0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
a2c0: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 63 3d 3d    }else if( (c==
a2d0: 27 28 27 20 7c 7c 20 63 3d 3d 27 29 27 29 20 26  '(' || c==')') &
a2e0: 26 20 6a 3e 30 20 26 26 20 49 73 53 70 61 63 65  & j>0 && IsSpace
a2f0: 28 7a 5b 6a 2d 31 5d 29 20 29 7b 0a 20 20 20 20  (z[j-1]) ){.    
a300: 20 20 20 20 20 20 6a 2d 2d 3b 0a 20 20 20 20 20        j--;.     
a310: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 5b 6a     }.        z[j
a320: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
a330: 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 6a 3e  .      while( j>
a340: 30 20 26 26 20 49 73 53 70 61 63 65 28 7a 5b 6a  0 && IsSpace(z[j
a350: 2d 31 5d 29 20 29 7b 20 6a 2d 2d 3b 20 7d 0a 20  -1]) ){ j--; }. 
a360: 20 20 20 20 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 20       z[j] = 0;. 
a370: 20 20 20 20 20 69 66 28 20 73 74 72 6c 65 6e 33       if( strlen3
a380: 30 28 7a 29 3e 3d 37 39 20 29 7b 0a 20 20 20 20  0(z)>=79 ){.    
a390: 20 20 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 28      for(i=j=0; (
a3a0: 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b  c = z[i])!=0; i+
a3b0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  +){.          if
a3c0: 28 20 63 3d 3d 63 45 6e 64 20 29 7b 0a 20 20 20  ( c==cEnd ){.   
a3d0: 20 20 20 20 20 20 20 20 20 63 45 6e 64 20 3d 20           cEnd = 
a3e0: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  0;.          }el
a3f0: 73 65 20 69 66 28 20 63 3d 3d 27 22 27 20 7c 7c  se if( c=='"' ||
a400: 20 63 3d 3d 27 5c 27 27 20 7c 7c 20 63 3d 3d 27   c=='\'' || c=='
a410: 60 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  `' ){.          
a420: 20 20 63 45 6e 64 20 3d 20 63 3b 0a 20 20 20 20    cEnd = c;.    
a430: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
a440: 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20 20 20 20  c=='[' ){.      
a450: 20 20 20 20 20 20 63 45 6e 64 20 3d 20 27 5d 27        cEnd = ']'
a460: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
a470: 65 20 69 66 28 20 63 3d 3d 27 28 27 20 29 7b 0a  e if( c=='(' ){.
a480: 20 20 20 20 20 20 20 20 20 20 20 20 6e 50 61 72              nPar
a490: 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20  en++;.          
a4a0: 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 29 27  }else if( c==')'
a4b0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
a4c0: 6e 50 61 72 65 6e 2d 2d 3b 0a 20 20 20 20 20 20  nParen--;.      
a4d0: 20 20 20 20 20 20 69 66 28 20 6e 4c 69 6e 65 3e        if( nLine>
a4e0: 30 20 26 26 20 6e 50 61 72 65 6e 3d 3d 30 20 26  0 && nParen==0 &
a4f0: 26 20 6a 3e 30 20 29 7b 0a 20 20 20 20 20 20 20  & j>0 ){.       
a500: 20 20 20 20 20 20 20 70 72 69 6e 74 53 63 68 65         printSche
a510: 6d 61 4c 69 6e 65 4e 28 70 2d 3e 6f 75 74 2c 20  maLineN(p->out, 
a520: 7a 2c 20 6a 2c 20 22 5c 6e 22 29 3b 0a 20 20 20  z, j, "\n");.   
a530: 20 20 20 20 20 20 20 20 20 20 20 6a 20 3d 20 30             j = 0
a540: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
a550: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
a560: 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 63        z[j++] = c
a570: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
a580: 6e 50 61 72 65 6e 3d 3d 31 20 26 26 20 28 63 3d  nParen==1 && (c=
a590: 3d 27 28 27 20 7c 7c 20 63 3d 3d 27 2c 27 20 7c  ='(' || c==',' |
a5a0: 7c 20 63 3d 3d 27 5c 6e 27 29 20 29 7b 0a 20 20  | c=='\n') ){.  
a5b0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63 3d            if( c=
a5c0: 3d 27 5c 6e 27 20 29 20 6a 2d 2d 3b 0a 20 20 20  ='\n' ) j--;.   
a5d0: 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 53 63           printSc
a5e0: 68 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e 6f 75 74  hemaLineN(p->out
a5f0: 2c 20 7a 2c 20 6a 2c 20 22 5c 6e 20 20 22 29 3b  , z, j, "\n  ");
a600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6a 20 3d  .            j =
a610: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   0;.            
a620: 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20 20  nLine++;.       
a630: 20 20 20 20 20 77 68 69 6c 65 28 20 49 73 53 70       while( IsSp
a640: 61 63 65 28 7a 5b 69 2b 31 5d 29 20 29 7b 20 69  ace(z[i+1]) ){ i
a650: 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20  ++; }.          
a660: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
a670: 20 20 20 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 20 20      z[j] = 0;.  
a680: 20 20 20 20 7d 0a 20 20 20 20 20 20 70 72 69 6e      }.      prin
a690: 74 53 63 68 65 6d 61 4c 69 6e 65 28 70 2d 3e 6f  tSchemaLine(p->o
a6a0: 75 74 2c 20 7a 2c 20 22 3b 5c 6e 22 29 3b 0a 20  ut, z, ";\n");. 
a6b0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
a6c0: 65 28 7a 29 3b 0a 20 20 20 20 20 20 62 72 65 61  e(z);.      brea
a6d0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
a6e0: 65 20 4d 4f 44 45 5f 4c 69 73 74 3a 20 7b 0a 20  e MODE_List: {. 
a6f0: 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b       if( p->cnt+
a700: 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77 48  +==0 && p->showH
a710: 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20 20  eader ){.       
a720: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
a730: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
a740: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
a750: 3e 6f 75 74 2c 22 25 73 25 73 22 2c 61 7a 43 6f  >out,"%s%s",azCo
a760: 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  l[i],.          
a770: 20 20 20 20 20 20 20 20 69 3d 3d 6e 41 72 67 2d          i==nArg-
a780: 31 20 3f 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  1 ? p->rowSepara
a790: 74 6f 72 20 3a 20 70 2d 3e 63 6f 6c 53 65 70 61  tor : p->colSepa
a7a0: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  rator);.        
a7b0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
a7c0: 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62  if( azArg==0 ) b
a7d0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28  reak;.      for(
a7e0: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
a7f0: 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20  ){.        char 
a800: 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d 3b 0a 20  *z = azArg[i];. 
a810: 20 20 20 20 20 20 20 69 66 28 20 7a 3d 3d 30 20         if( z==0 
a820: 29 20 7a 20 3d 20 70 2d 3e 6e 75 6c 6c 56 61 6c  ) z = p->nullVal
a830: 75 65 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  ue;.        utf8
a840: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
a850: 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20  "%s", z);.      
a860: 20 20 69 66 28 20 69 3c 6e 41 72 67 2d 31 20 29    if( i<nArg-1 )
a870: 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38  {.          utf8
a880: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
a890: 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  "%s", p->colSepa
a8a0: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  rator);.        
a8b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
a8c0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
a8d0: 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f  out, "%s", p->ro
a8e0: 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  wSeparator);.   
a8f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
a900: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a910: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
a920: 48 74 6d 6c 3a 20 7b 0a 20 20 20 20 20 20 69 66  Html: {.      if
a930: 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26  ( p->cnt++==0 &&
a940: 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29   p->showHeader )
a950: 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
a960: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 54 52  intf(p->out,"<TR
a970: 3e 22 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  >");.        for
a980: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
a990: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61  +){.          ra
a9a0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
a9b0: 22 3c 54 48 3e 22 29 3b 0a 20 20 20 20 20 20 20  "<TH>");.       
a9c0: 20 20 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73     output_html_s
a9d0: 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a  tring(p->out, az
a9e0: 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Col[i]);.       
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 2f 54 48 3e 5c 6e 22 29 3b  >out,"</TH>\n");
aa10: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
aa20: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
aa30: 3e 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e 22 29 3b  >out,"</TR>\n");
aa40: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
aa50: 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72  f( azArg==0 ) br
aa60: 65 61 6b 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  eak;.      raw_p
aa70: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 54  rintf(p->out,"<T
aa80: 52 3e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  R>");.      for(
aa90: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
aaa0: 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
aab0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 54  rintf(p->out,"<T
aac0: 44 3e 22 29 3b 0a 20 20 20 20 20 20 20 20 6f 75  D>");.        ou
aad0: 74 70 75 74 5f 68 74 6d 6c 5f 73 74 72 69 6e 67  tput_html_string
aae0: 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69  (p->out, azArg[i
aaf0: 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70  ] ? azArg[i] : p
ab00: 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20  ->nullValue);.  
ab10: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
ab20: 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 44 3e 5c 6e  (p->out,"</TD>\n
ab30: 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
ab40: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
ab50: 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e 22 29 3b 0a  out,"</TR>\n");.
ab60: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
ab70: 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45   }.    case MODE
ab80: 5f 54 63 6c 3a 20 7b 0a 20 20 20 20 20 20 69 66  _Tcl: {.      if
ab90: 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26  ( p->cnt++==0 &&
aba0: 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29   p->showHeader )
abb0: 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d  {.        for(i=
abc0: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
abd0: 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75  .          outpu
abe0: 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75  t_c_string(p->ou
abf0: 74 2c 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43  t,azCol[i] ? azC
ac00: 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a 20 20 20  ol[i] : "");.   
ac10: 20 20 20 20 20 20 20 69 66 28 69 3c 6e 41 72 67         if(i<nArg
ac20: 2d 31 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28  -1) utf8_printf(
ac30: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d  p->out, "%s", p-
ac40: 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a  >colSeparator);.
ac50: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ac60: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
ac70: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
ac80: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
ac90: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
aca0: 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b  azArg==0 ) break
acb0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
acc0: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
acd0: 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63 5f         output_c_
ace0: 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61  string(p->out, a
acf0: 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b  zArg[i] ? azArg[
ad00: 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75  i] : p->nullValu
ad10: 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 69  e);.        if(i
ad20: 3c 6e 41 72 67 2d 31 29 20 75 74 66 38 5f 70 72  <nArg-1) utf8_pr
ad30: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
ad40: 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  ", p->colSeparat
ad50: 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
ad60: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
ad70: 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e  ->out, "%s", p->
ad80: 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  rowSeparator);. 
ad90: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ada0: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
adb0: 43 73 76 3a 20 7b 0a 20 20 20 20 20 20 73 65 74  Csv: {.      set
adc0: 42 69 6e 61 72 79 4d 6f 64 65 28 70 2d 3e 6f 75  BinaryMode(p->ou
add0: 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 69 66 28  t, 1);.      if(
ade0: 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20   p->cnt++==0 && 
adf0: 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29 7b  p->showHeader ){
ae00: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30  .        for(i=0
ae10: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
ae20: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
ae30: 5f 63 73 76 28 70 2c 20 61 7a 43 6f 6c 5b 69 5d  _csv(p, azCol[i]
ae40: 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22   ? azCol[i] : ""
ae50: 2c 20 69 3c 6e 41 72 67 2d 31 29 3b 0a 20 20 20  , i<nArg-1);.   
ae60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 75       }.        u
ae70: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
ae80: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53  t, "%s", p->rowS
ae90: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
aea0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72   }.      if( nAr
aeb0: 67 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66  g>0 ){.        f
aec0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
aed0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
aee0: 6f 75 74 70 75 74 5f 63 73 76 28 70 2c 20 61 7a  output_csv(p, az
aef0: 41 72 67 5b 69 5d 2c 20 69 3c 6e 41 72 67 2d 31  Arg[i], i<nArg-1
af00: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
af10: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
af20: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
af30: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
af40: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
af50: 65 74 54 65 78 74 4d 6f 64 65 28 70 2d 3e 6f 75  etTextMode(p->ou
af60: 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 62 72 65  t, 1);.      bre
af70: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
af80: 73 65 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3a 20  se MODE_Insert: 
af90: 7b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41 72  {.      if( azAr
afa0: 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  g==0 ) break;.  
afb0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
afc0: 70 2d 3e 6f 75 74 2c 22 49 4e 53 45 52 54 20 49  p->out,"INSERT I
afd0: 4e 54 4f 20 25 73 22 2c 70 2d 3e 7a 44 65 73 74  NTO %s",p->zDest
afe0: 54 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 69 66  Table);.      if
aff0: 28 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20  ( p->showHeader 
b000: 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
b010: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 28 22  rintf(p->out,"("
b020: 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69  );.        for(i
b030: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
b040: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
b050: 69 3e 30 20 29 20 72 61 77 5f 70 72 69 6e 74 66  i>0 ) raw_printf
b060: 28 70 2d 3e 6f 75 74 2c 20 22 2c 22 29 3b 0a 20  (p->out, ",");. 
b070: 20 20 20 20 20 20 20 20 20 69 66 28 20 71 75 6f           if( quo
b080: 74 65 43 68 61 72 28 61 7a 43 6f 6c 5b 69 5d 29  teChar(azCol[i])
b090: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
b0a0: 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69 74 65  char *z = sqlite
b0b0: 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22 25 77 5c  3_mprintf("\"%w\
b0c0: 22 22 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20  "", azCol[i]);. 
b0d0: 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
b0e0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
b0f0: 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20  %s", z);.       
b100: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
b110: 65 28 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(z);.          
b120: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
b130: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
b140: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 61 7a 43 6f  >out, "%s", azCo
b150: 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  l[i]);.         
b160: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
b170: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
b180: 70 2d 3e 6f 75 74 2c 22 29 22 29 3b 0a 20 20 20  p->out,")");.   
b190: 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e 63 6e     }.      p->cn
b1a0: 74 2b 2b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  t++;.      for(i
b1b0: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
b1c0: 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
b1d0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 69 3e 30  intf(p->out, i>0
b1e0: 20 3f 20 22 2c 22 20 3a 20 22 20 56 41 4c 55 45   ? "," : " VALUE
b1f0: 53 28 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66  S(");.        if
b200: 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d 30 29 20  ( (azArg[i]==0) 
b210: 7c 7c 20 28 61 69 54 79 70 65 20 26 26 20 61 69  || (aiType && ai
b220: 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f  Type[i]==SQLITE_
b230: 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20 20 20 20  NULL) ){.       
b240: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
b250: 2d 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29 3b 0a 20  ->out,"NULL");. 
b260: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
b270: 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70   aiType && aiTyp
b280: 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 54 45 58  e[i]==SQLITE_TEX
b290: 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  T ){.          i
b2a0: 66 28 20 53 68 65 6c 6c 48 61 73 46 6c 61 67 28  f( ShellHasFlag(
b2b0: 70 2c 20 53 48 46 4c 47 5f 4e 65 77 6c 69 6e 65  p, SHFLG_Newline
b2c0: 73 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  s) ){.          
b2d0: 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f    output_quoted_
b2e0: 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61  string(p->out, a
b2f0: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
b300: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b310: 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75         output_qu
b320: 6f 74 65 64 5f 65 73 63 61 70 65 64 5f 73 74 72  oted_escaped_str
b330: 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72  ing(p->out, azAr
b340: 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  g[i]);.         
b350: 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65   }.        }else
b360: 20 69 66 28 20 61 69 54 79 70 65 20 26 26 20 61   if( aiType && a
b370: 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45  iType[i]==SQLITE
b380: 5f 49 4e 54 45 47 45 52 20 29 7b 0a 20 20 20 20  _INTEGER ){.    
b390: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
b3a0: 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 20 61  f(p->out,"%s", a
b3b0: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
b3c0: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79    }else if( aiTy
b3d0: 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d  pe && aiType[i]=
b3e0: 3d 53 51 4c 49 54 45 5f 46 4c 4f 41 54 20 29 7b  =SQLITE_FLOAT ){
b3f0: 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20  .          char 
b400: 7a 5b 35 30 5d 3b 0a 20 20 20 20 20 20 20 20 20  z[50];.         
b410: 20 64 6f 75 62 6c 65 20 72 20 3d 20 73 71 6c 69   double r = sqli
b420: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
b430: 65 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b 0a  e(p->pStmt, i);.
b440: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
b450: 33 5f 73 6e 70 72 69 6e 74 66 28 35 30 2c 7a 2c  3_snprintf(50,z,
b460: 22 25 21 2e 32 30 67 22 2c 20 72 29 3b 0a 20 20  "%!.20g", r);.  
b470: 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
b480: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
b490: 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c   z);.        }el
b4a0: 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26 26  se if( aiType &&
b4b0: 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49   aiType[i]==SQLI
b4c0: 54 45 5f 42 4c 4f 42 20 26 26 20 70 2d 3e 70 53  TE_BLOB && p->pS
b4d0: 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  tmt ){.         
b4e0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 42 6c   const void *pBl
b4f0: 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ob = sqlite3_col
b500: 75 6d 6e 5f 62 6c 6f 62 28 70 2d 3e 70 53 74 6d  umn_blob(p->pStm
b510: 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20  t, i);.         
b520: 20 69 6e 74 20 6e 42 6c 6f 62 20 3d 20 73 71 6c   int nBlob = sql
b530: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
b540: 73 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b 0a  s(p->pStmt, i);.
b550: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
b560: 5f 68 65 78 5f 62 6c 6f 62 28 70 2d 3e 6f 75 74  _hex_blob(p->out
b570: 2c 20 70 42 6c 6f 62 2c 20 6e 42 6c 6f 62 29 3b  , pBlob, nBlob);
b580: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69  .        }else i
b590: 66 28 20 69 73 4e 75 6d 62 65 72 28 61 7a 41 72  f( isNumber(azAr
b5a0: 67 5b 69 5d 2c 20 30 29 20 29 7b 0a 20 20 20 20  g[i], 0) ){.    
b5b0: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
b5c0: 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 20 61  f(p->out,"%s", a
b5d0: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
b5e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 53 68 65 6c    }else if( Shel
b5f0: 6c 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c  lHasFlag(p, SHFL
b600: 47 5f 4e 65 77 6c 69 6e 65 73 29 20 29 7b 0a 20  G_Newlines) ){. 
b610: 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f           output_
b620: 71 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70 2d  quoted_string(p-
b630: 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  >out, azArg[i]);
b640: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
b650: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
b660: 5f 71 75 6f 74 65 64 5f 65 73 63 61 70 65 64 5f  _quoted_escaped_
b670: 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61  string(p->out, a
b680: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
b690: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
b6a0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
b6b0: 6f 75 74 2c 22 29 3b 5c 6e 22 29 3b 0a 20 20 20  out,");\n");.   
b6c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
b6d0: 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 51 75      case MODE_Qu
b6e0: 6f 74 65 3a 20 7b 0a 20 20 20 20 20 20 69 66 28  ote: {.      if(
b6f0: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
b700: 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  k;.      if( p->
b710: 63 6e 74 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f  cnt==0 && p->sho
b720: 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20  wHeader ){.     
b730: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
b740: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
b750: 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 72 61      if( i>0 ) ra
b760: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
b770: 20 22 2c 22 29 3b 0a 20 20 20 20 20 20 20 20 20   ",");.         
b780: 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73   output_quoted_s
b790: 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a  tring(p->out, az
b7a0: 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Col[i]);.       
b7b0: 20 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70   }.        raw_p
b7c0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 5c 6e  rintf(p->out,"\n
b7d0: 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
b7e0: 20 20 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20    p->cnt++;.    
b7f0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
b800: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
b810: 20 69 66 28 20 69 3e 30 20 29 20 72 61 77 5f 70   if( i>0 ) raw_p
b820: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2c  rintf(p->out, ",
b830: 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ");.        if( 
b840: 28 61 7a 41 72 67 5b 69 5d 3d 3d 30 29 20 7c 7c  (azArg[i]==0) ||
b850: 20 28 61 69 54 79 70 65 20 26 26 20 61 69 54 79   (aiType && aiTy
b860: 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 4e 55  pe[i]==SQLITE_NU
b870: 4c 4c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  LL) ){.         
b880: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
b890: 6f 75 74 2c 22 4e 55 4c 4c 22 29 3b 0a 20 20 20  out,"NULL");.   
b8a0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61       }else if( a
b8b0: 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b  iType && aiType[
b8c0: 69 5d 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54 20  i]==SQLITE_TEXT 
b8d0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  ){.          out
b8e0: 70 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e  put_quoted_strin
b8f0: 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b  g(p->out, azArg[
b900: 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  i]);.        }el
b910: 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26 26  se if( aiType &&
b920: 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49   aiType[i]==SQLI
b930: 54 45 5f 49 4e 54 45 47 45 52 20 29 7b 0a 20 20  TE_INTEGER ){.  
b940: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
b950: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c  ntf(p->out,"%s",
b960: 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20   azArg[i]);.    
b970: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69      }else if( ai
b980: 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69  Type && aiType[i
b990: 5d 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f 41 54 20  ]==SQLITE_FLOAT 
b9a0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61  ){.          cha
b9b0: 72 20 7a 5b 35 30 5d 3b 0a 20 20 20 20 20 20 20  r z[50];.       
b9c0: 20 20 20 64 6f 75 62 6c 65 20 72 20 3d 20 73 71     double r = sq
b9d0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
b9e0: 62 6c 65 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29  ble(p->pStmt, i)
b9f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
ba00: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 35 30 2c  te3_snprintf(50,
ba10: 7a 2c 22 25 21 2e 32 30 67 22 2c 20 72 29 3b 0a  z,"%!.20g", r);.
ba20: 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
ba30: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
ba40: 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d  ", z);.        }
ba50: 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20  else if( aiType 
ba60: 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51  && aiType[i]==SQ
ba70: 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20 70 2d 3e  LITE_BLOB && p->
ba80: 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20  pStmt ){.       
ba90: 20 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70     const void *p
baa0: 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63  Blob = sqlite3_c
bab0: 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d 3e 70 53  olumn_blob(p->pS
bac0: 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20  tmt, i);.       
bad0: 20 20 20 69 6e 74 20 6e 42 6c 6f 62 20 3d 20 73     int nBlob = s
bae0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
baf0: 74 65 73 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29  tes(p->pStmt, i)
bb00: 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70  ;.          outp
bb10: 75 74 5f 68 65 78 5f 62 6c 6f 62 28 70 2d 3e 6f  ut_hex_blob(p->o
bb20: 75 74 2c 20 70 42 6c 6f 62 2c 20 6e 42 6c 6f 62  ut, pBlob, nBlob
bb30: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
bb40: 20 69 66 28 20 69 73 4e 75 6d 62 65 72 28 61 7a   if( isNumber(az
bb50: 41 72 67 5b 69 5d 2c 20 30 29 20 29 7b 0a 20 20  Arg[i], 0) ){.  
bb60: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
bb70: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c  ntf(p->out,"%s",
bb80: 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20   azArg[i]);.    
bb90: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
bba0: 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74       output_quot
bbb0: 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ed_string(p->out
bbc0: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
bbd0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
bbe0: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
bbf0: 70 2d 3e 6f 75 74 2c 22 5c 6e 22 29 3b 0a 20 20  p->out,"\n");.  
bc00: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
bc10: 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 41  .    case MODE_A
bc20: 73 63 69 69 3a 20 7b 0a 20 20 20 20 20 20 69 66  scii: {.      if
bc30: 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26  ( p->cnt++==0 &&
bc40: 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29   p->showHeader )
bc50: 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d  {.        for(i=
bc60: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
bc70: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
bc80: 3e 30 20 29 20 75 74 66 38 5f 70 72 69 6e 74 66  >0 ) utf8_printf
bc90: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
bca0: 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b  ->colSeparator);
bcb0: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
bcc0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
bcd0: 73 22 2c 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a  s",azCol[i] ? az
bce0: 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a 20 20  Col[i] : "");.  
bcf0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
bd00: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
bd10: 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77  ut, "%s", p->row
bd20: 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
bd30: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a    }.      if( az
bd40: 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  Arg==0 ) break;.
bd50: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
bd60: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
bd70: 20 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 75       if( i>0 ) u
bd80: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
bd90: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53  t, "%s", p->colS
bda0: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
bdb0: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
bdc0: 2d 3e 6f 75 74 2c 22 25 73 22 2c 61 7a 41 72 67  ->out,"%s",azArg
bdd0: 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a  [i] ? azArg[i] :
bde0: 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a   p->nullValue);.
bdf0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 75 74        }.      ut
be00: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
be10: 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65  , "%s", p->rowSe
be20: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
be30: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
be40: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
be50: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
be60: 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69  e callback routi
be70: 6e 65 20 74 68 61 74 20 74 68 65 20 53 51 4c 69  ne that the SQLi
be80: 74 65 20 6c 69 62 72 61 72 79 0a 2a 2a 20 69 6e  te library.** in
be90: 76 6f 6b 65 73 20 66 6f 72 20 65 61 63 68 20 72  vokes for each r
bea0: 6f 77 20 6f 66 20 61 20 71 75 65 72 79 20 72 65  ow of a query re
beb0: 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  sult..*/.static 
bec0: 69 6e 74 20 63 61 6c 6c 62 61 63 6b 28 76 6f 69  int callback(voi
bed0: 64 20 2a 70 41 72 67 2c 20 69 6e 74 20 6e 41 72  d *pArg, int nAr
bee0: 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c  g, char **azArg,
bef0: 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 29 7b 0a   char **azCol){.
bf00: 20 20 2f 2a 20 73 69 6e 63 65 20 77 65 20 64 6f    /* since we do
bf10: 6e 27 74 20 68 61 76 65 20 74 79 70 65 20 69 6e  n't have type in
bf20: 66 6f 2c 20 63 61 6c 6c 20 74 68 65 20 73 68 65  fo, call the she
bf30: 6c 6c 5f 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ll_callback with
bf40: 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20 2a 2f   a NULL value */
bf50: 0a 20 20 72 65 74 75 72 6e 20 73 68 65 6c 6c 5f  .  return shell_
bf60: 63 61 6c 6c 62 61 63 6b 28 70 41 72 67 2c 20 6e  callback(pArg, n
bf70: 41 72 67 2c 20 61 7a 41 72 67 2c 20 61 7a 43 6f  Arg, azArg, azCo
bf80: 6c 2c 20 4e 55 4c 4c 29 3b 0a 7d 0a 0a 2f 2a 0a  l, NULL);.}../*.
bf90: 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  ** This is the c
bfa0: 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20  allback routine 
bfb0: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 65 78 65  from sqlite3_exe
bfc0: 63 28 29 20 74 68 61 74 20 61 70 70 65 6e 64 73  c() that appends
bfd0: 20 61 6c 6c 0a 2a 2a 20 6f 75 74 70 75 74 20 6f   all.** output o
bfe0: 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 61  nto the end of a
bff0: 20 53 68 65 6c 6c 54 65 78 74 20 6f 62 6a 65 63   ShellText objec
c000: 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  t..*/.static int
c010: 20 63 61 70 74 75 72 65 4f 75 74 70 75 74 43 61   captureOutputCa
c020: 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72  llback(void *pAr
c030: 67 2c 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61  g, int nArg, cha
c040: 72 20 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72 20  r **azArg, char 
c050: 2a 2a 61 7a 29 7b 0a 20 20 53 68 65 6c 6c 54 65  **az){.  ShellTe
c060: 78 74 20 2a 70 20 3d 20 28 53 68 65 6c 6c 54 65  xt *p = (ShellTe
c070: 78 74 2a 29 70 41 72 67 3b 0a 20 20 69 6e 74 20  xt*)pArg;.  int 
c080: 69 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  i;.  UNUSED_PARA
c090: 4d 45 54 45 52 28 61 7a 29 3b 0a 20 20 69 66 28  METER(az);.  if(
c0a0: 20 61 7a 41 72 67 3d 3d 30 20 29 20 72 65 74 75   azArg==0 ) retu
c0b0: 72 6e 20 30 3b 0a 20 20 69 66 28 20 70 2d 3e 6e  rn 0;.  if( p->n
c0c0: 20 29 20 61 70 70 65 6e 64 54 65 78 74 28 70 2c   ) appendText(p,
c0d0: 20 22 7c 22 2c 20 30 29 3b 0a 20 20 66 6f 72 28   "|", 0);.  for(
c0e0: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
c0f0: 29 7b 0a 20 20 20 20 69 66 28 20 69 20 29 20 61  ){.    if( i ) a
c100: 70 70 65 6e 64 54 65 78 74 28 70 2c 20 22 2c 22  ppendText(p, ","
c110: 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 61 7a  , 0);.    if( az
c120: 41 72 67 5b 69 5d 20 29 20 61 70 70 65 6e 64 54  Arg[i] ) appendT
c130: 65 78 74 28 70 2c 20 61 7a 41 72 67 5b 69 5d 2c  ext(p, azArg[i],
c140: 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72   0);.  }.  retur
c150: 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65  n 0;.}../*.** Ge
c160: 6e 65 72 61 74 65 20 61 6e 20 61 70 70 72 6f 70  nerate an approp
c170: 72 69 61 74 65 20 53 45 4c 46 54 45 53 54 20 74  riate SELFTEST t
c180: 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e  able in the main
c190: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 73 74   database..*/.st
c1a0: 61 74 69 63 20 76 6f 69 64 20 63 72 65 61 74 65  atic void create
c1b0: 53 65 6c 66 74 65 73 74 54 61 62 6c 65 28 53 68  SelftestTable(Sh
c1c0: 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20  ellState *p){.  
c1d0: 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20  char *zErrMsg = 
c1e0: 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 65  0;.  sqlite3_exe
c1f0: 63 28 70 2d 3e 64 62 2c 0a 20 20 20 20 22 53 41  c(p->db,.    "SA
c200: 56 45 50 4f 49 4e 54 20 73 65 6c 66 74 65 73 74  VEPOINT selftest
c210: 5f 69 6e 69 74 3b 5c 6e 22 0a 20 20 20 20 22 43  _init;\n".    "C
c220: 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e  REATE TABLE IF N
c230: 4f 54 20 45 58 49 53 54 53 20 73 65 6c 66 74 65  OT EXISTS selfte
c240: 73 74 28 5c 6e 22 0a 20 20 20 20 22 20 20 74 6e  st(\n".    "  tn
c250: 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  o INTEGER PRIMAR
c260: 59 20 4b 45 59 2c 5c 6e 22 20 20 20 2f 2a 20 54  Y KEY,\n"   /* T
c270: 65 73 74 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  est number */.  
c280: 20 20 22 20 20 6f 70 20 54 45 58 54 2c 5c 6e 22    "  op TEXT,\n"
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2a0: 20 20 20 2f 2a 20 4f 70 65 72 61 74 6f 72 3a 20     /* Operator: 
c2b0: 20 6d 65 6d 6f 20 72 75 6e 20 2a 2f 0a 20 20 20   memo run */.   
c2c0: 20 22 20 20 63 6d 64 20 54 45 58 54 2c 5c 6e 22   "  cmd TEXT,\n"
c2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2e0: 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 74 65 78    /* Command tex
c2f0: 74 20 2a 2f 0a 20 20 20 20 22 20 20 61 6e 73 20  t */.    "  ans 
c300: 54 45 58 54 5c 6e 22 20 20 20 20 20 20 20 20 20  TEXT\n"         
c310: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 73            /* Des
c320: 69 72 65 64 20 61 6e 73 77 65 72 20 2a 2f 0a 20  ired answer */. 
c330: 20 20 20 22 29 3b 22 0a 20 20 20 20 22 43 52 45     ");".    "CRE
c340: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 5b  ATE TEMP TABLE [
c350: 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 28 6f 70 2c  _shell$self](op,
c360: 63 6d 64 2c 61 6e 73 29 3b 5c 6e 22 0a 20 20 20  cmd,ans);\n".   
c370: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b 5f   "INSERT INTO [_
c380: 73 68 65 6c 6c 24 73 65 6c 66 5d 28 72 6f 77 69  shell$self](rowi
c390: 64 2c 6f 70 2c 63 6d 64 29 5c 6e 22 0a 20 20 20  d,op,cmd)\n".   
c3a0: 20 22 20 20 56 41 4c 55 45 53 28 63 6f 61 6c 65   "  VALUES(coale
c3b0: 73 63 65 28 28 53 45 4c 45 43 54 20 28 6d 61 78  sce((SELECT (max
c3c0: 28 74 6e 6f 29 2b 31 30 30 29 2f 31 30 20 46 52  (tno)+100)/10 FR
c3d0: 4f 4d 20 73 65 6c 66 74 65 73 74 29 2c 31 30 29  OM selftest),10)
c3e0: 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20  ,\n".    "      
c3f0: 20 20 20 27 6d 65 6d 6f 27 2c 27 54 65 73 74 73     'memo','Tests
c400: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 2d 2d   generated by --
c410: 69 6e 69 74 27 29 3b 5c 6e 22 0a 20 20 20 20 22  init');\n".    "
c420: 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b 5f 73 68  INSERT INTO [_sh
c430: 65 6c 6c 24 73 65 6c 66 5d 5c 6e 22 0a 20 20 20  ell$self]\n".   
c440: 20 22 20 20 53 45 4c 45 43 54 20 27 72 75 6e 27   "  SELECT 'run'
c450: 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 27 53  ,\n".    "    'S
c460: 45 4c 45 43 54 20 68 65 78 28 73 68 61 33 5f 71  ELECT hex(sha3_q
c470: 75 65 72 79 28 27 27 53 45 4c 45 43 54 20 74 79  uery(''SELECT ty
c480: 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65  pe,name,tbl_name
c490: 2c 73 71 6c 20 22 0a 20 20 20 20 20 20 20 20 20  ,sql ".         
c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4b0: 20 20 20 20 20 20 20 20 22 46 52 4f 4d 20 73 71          "FROM sq
c4c0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f 52 44 45  lite_master ORDE
c4d0: 52 20 42 59 20 32 27 27 2c 32 32 34 29 29 27 2c  R BY 2'',224))',
c4e0: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 68 65 78  \n".    "    hex
c4f0: 28 73 68 61 33 5f 71 75 65 72 79 28 27 53 45 4c  (sha3_query('SEL
c500: 45 43 54 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62  ECT type,name,tb
c510: 6c 5f 6e 61 6d 65 2c 73 71 6c 20 22 0a 20 20 20  l_name,sql ".   
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c530: 20 20 20 20 20 20 20 22 46 52 4f 4d 20 73 71 6c         "FROM sql
c540: 69 74 65 5f 6d 61 73 74 65 72 20 4f 52 44 45 52  ite_master ORDER
c550: 20 42 59 20 32 27 2c 32 32 34 29 29 3b 5c 6e 22   BY 2',224));\n"
c560: 0a 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  .    "INSERT INT
c570: 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 5c  O [_shell$self]\
c580: 6e 22 0a 20 20 20 20 22 20 20 53 45 4c 45 43 54  n".    "  SELECT
c590: 20 27 72 75 6e 27 2c 22 0a 20 20 20 20 22 20 20   'run',".    "  
c5a0: 20 20 27 53 45 4c 45 43 54 20 68 65 78 28 73 68    'SELECT hex(sh
c5b0: 61 33 5f 71 75 65 72 79 28 27 27 53 45 4c 45 43  a3_query(''SELEC
c5c0: 54 20 2a 20 46 52 4f 4d 20 5c 22 27 20 7c 7c 22  T * FROM \"' ||"
c5d0: 0a 20 20 20 20 22 20 20 20 20 20 20 20 20 70 72  .    "        pr
c5e0: 69 6e 74 66 28 27 25 77 27 2c 6e 61 6d 65 29 20  intf('%w',name) 
c5f0: 7c 7c 20 27 5c 22 20 4e 4f 54 20 49 4e 44 45 58  || '\" NOT INDEX
c600: 45 44 27 27 2c 32 32 34 29 29 27 2c 5c 6e 22 0a  ED'',224))',\n".
c610: 20 20 20 20 22 20 20 20 20 68 65 78 28 73 68 61      "    hex(sha
c620: 33 5f 71 75 65 72 79 28 70 72 69 6e 74 66 28 27  3_query(printf('
c630: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c 22  SELECT * FROM \"
c640: 25 77 5c 22 20 4e 4f 54 20 49 4e 44 45 58 45 44  %w\" NOT INDEXED
c650: 27 2c 6e 61 6d 65 29 2c 32 32 34 29 29 5c 6e 22  ',name),224))\n"
c660: 0a 20 20 20 20 22 20 20 46 52 4f 4d 20 28 5c 6e  .    "  FROM (\n
c670: 22 0a 20 20 20 20 22 20 20 20 20 53 45 4c 45 43  ".    "    SELEC
c680: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
c690: 74 65 5f 6d 61 73 74 65 72 5c 6e 22 0a 20 20 20  te_master\n".   
c6a0: 20 22 20 20 20 20 20 57 48 45 52 45 20 74 79 70   "     WHERE typ
c6b0: 65 3d 27 74 61 62 6c 65 27 5c 6e 22 0a 20 20 20  e='table'\n".   
c6c0: 20 22 20 20 20 20 20 20 20 41 4e 44 20 6e 61 6d   "       AND nam
c6d0: 65 3c 3e 27 73 65 6c 66 74 65 73 74 27 5c 6e 22  e<>'selftest'\n"
c6e0: 0a 20 20 20 20 22 20 20 20 20 20 20 20 41 4e 44  .    "       AND
c6f0: 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f 74 70 61   coalesce(rootpa
c700: 67 65 2c 30 29 3e 30 5c 6e 22 0a 20 20 20 20 22  ge,0)>0\n".    "
c710: 20 20 29 5c 6e 22 0a 20 20 20 20 22 20 4f 52 44    )\n".    " ORD
c720: 45 52 20 42 59 20 6e 61 6d 65 3b 5c 6e 22 0a 20  ER BY name;\n". 
c730: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
c740: 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 5c 6e 22  [_shell$self]\n"
c750: 0a 20 20 20 20 22 20 20 56 41 4c 55 45 53 28 27  .    "  VALUES('
c760: 72 75 6e 27 2c 27 50 52 41 47 4d 41 20 69 6e 74  run','PRAGMA int
c770: 65 67 72 69 74 79 5f 63 68 65 63 6b 27 2c 27 6f  egrity_check','o
c780: 6b 27 29 3b 5c 6e 22 0a 20 20 20 20 22 49 4e 53  k');\n".    "INS
c790: 45 52 54 20 49 4e 54 4f 20 73 65 6c 66 74 65 73  ERT INTO selftes
c7a0: 74 28 74 6e 6f 2c 6f 70 2c 63 6d 64 2c 61 6e 73  t(tno,op,cmd,ans
c7b0: 29 22 0a 20 20 20 20 22 20 20 53 45 4c 45 43 54  )".    "  SELECT
c7c0: 20 72 6f 77 69 64 2a 31 30 2c 6f 70 2c 63 6d 64   rowid*10,op,cmd
c7d0: 2c 61 6e 73 20 46 52 4f 4d 20 5b 5f 73 68 65 6c  ,ans FROM [_shel
c7e0: 6c 24 73 65 6c 66 5d 3b 5c 6e 22 0a 20 20 20 20  l$self];\n".    
c7f0: 22 44 52 4f 50 20 54 41 42 4c 45 20 5b 5f 73 68  "DROP TABLE [_sh
c800: 65 6c 6c 24 73 65 6c 66 5d 3b 22 0a 20 20 20 20  ell$self];".    
c810: 2c 30 2c 30 2c 26 7a 45 72 72 4d 73 67 29 3b 0a  ,0,0,&zErrMsg);.
c820: 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b    if( zErrMsg ){
c830: 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
c840: 28 73 74 64 65 72 72 2c 20 22 53 45 4c 46 54 45  (stderr, "SELFTE
c850: 53 54 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ST initializatio
c860: 6e 20 66 61 69 6c 75 72 65 3a 20 25 73 5c 6e 22  n failure: %s\n"
c870: 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  , zErrMsg);.    
c880: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
c890: 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  rMsg);.  }.  sql
c8a0: 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
c8b0: 20 22 52 45 4c 45 41 53 45 20 73 65 6c 66 74 65   "RELEASE selfte
c8c0: 73 74 5f 69 6e 69 74 22 2c 30 2c 30 2c 30 29 3b  st_init",0,0,0);
c8d0: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74  .}.../*.** Set t
c8e0: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 74  he destination t
c8f0: 61 62 6c 65 20 66 69 65 6c 64 20 6f 66 20 74 68  able field of th
c900: 65 20 53 68 65 6c 6c 53 74 61 74 65 20 73 74 72  e ShellState str
c910: 75 63 74 75 72 65 20 74 6f 0a 2a 2a 20 74 68 65  ucture to.** the
c920: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
c930: 6c 65 20 67 69 76 65 6e 2e 20 20 45 73 63 61 70  le given.  Escap
c940: 65 20 61 6e 79 20 71 75 6f 74 65 20 63 68 61 72  e any quote char
c950: 61 63 74 65 72 73 20 69 6e 20 74 68 65 0a 2a 2a  acters in the.**
c960: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 2a 2f 0a   table name..*/.
c970: 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 5f  static void set_
c980: 74 61 62 6c 65 5f 6e 61 6d 65 28 53 68 65 6c 6c  table_name(Shell
c990: 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e 73 74 20  State *p, const 
c9a0: 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b 0a 20 20  char *zName){.  
c9b0: 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 63 68 61 72  int i, n;.  char
c9c0: 20 63 51 75 6f 74 65 3b 0a 20 20 63 68 61 72 20   cQuote;.  char 
c9d0: 2a 7a 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 7a 44  *z;..  if( p->zD
c9e0: 65 73 74 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  estTable ){.    
c9f0: 66 72 65 65 28 70 2d 3e 7a 44 65 73 74 54 61 62  free(p->zDestTab
ca00: 6c 65 29 3b 0a 20 20 20 20 70 2d 3e 7a 44 65 73  le);.    p->zDes
ca10: 74 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 7d 0a  tTable = 0;.  }.
ca20: 20 20 69 66 28 20 7a 4e 61 6d 65 3d 3d 30 20 29    if( zName==0 )
ca30: 20 72 65 74 75 72 6e 3b 0a 20 20 63 51 75 6f 74   return;.  cQuot
ca40: 65 20 3d 20 71 75 6f 74 65 43 68 61 72 28 7a 4e  e = quoteChar(zN
ca50: 61 6d 65 29 3b 0a 20 20 6e 20 3d 20 73 74 72 6c  ame);.  n = strl
ca60: 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 20 20 69  en30(zName);.  i
ca70: 66 28 20 63 51 75 6f 74 65 20 29 20 6e 20 2b 3d  f( cQuote ) n +=
ca80: 20 6e 2b 32 3b 0a 20 20 7a 20 3d 20 70 2d 3e 7a   n+2;.  z = p->z
ca90: 44 65 73 74 54 61 62 6c 65 20 3d 20 6d 61 6c 6c  DestTable = mall
caa0: 6f 63 28 20 6e 2b 31 20 29 3b 0a 20 20 69 66 28  oc( n+1 );.  if(
cab0: 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 72 61 77   z==0 ){.    raw
cac0: 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
cad0: 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65  Error: out of me
cae0: 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 65 78  mory\n");.    ex
caf0: 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d  it(1);.  }.  n =
cb00: 20 30 3b 0a 20 20 69 66 28 20 63 51 75 6f 74 65   0;.  if( cQuote
cb10: 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63 51 75 6f   ) z[n++] = cQuo
cb20: 74 65 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 7a  te;.  for(i=0; z
cb30: 4e 61 6d 65 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20  Name[i]; i++){. 
cb40: 20 20 20 7a 5b 6e 2b 2b 5d 20 3d 20 7a 4e 61 6d     z[n++] = zNam
cb50: 65 5b 69 5d 3b 0a 20 20 20 20 69 66 28 20 7a 4e  e[i];.    if( zN
cb60: 61 6d 65 5b 69 5d 3d 3d 63 51 75 6f 74 65 20 29  ame[i]==cQuote )
cb70: 20 7a 5b 6e 2b 2b 5d 20 3d 20 63 51 75 6f 74 65   z[n++] = cQuote
cb80: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 51 75 6f  ;.  }.  if( cQuo
cb90: 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63 51  te ) z[n++] = cQ
cba0: 75 6f 74 65 3b 0a 20 20 7a 5b 6e 5d 20 3d 20 30  uote;.  z[n] = 0
cbb0: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  ;.}.../*.** Exec
cbc0: 75 74 65 20 61 20 71 75 65 72 79 20 73 74 61 74  ute a query stat
cbd0: 65 6d 65 6e 74 20 74 68 61 74 20 77 69 6c 6c 20  ement that will 
cbe0: 67 65 6e 65 72 61 74 65 20 53 51 4c 20 6f 75 74  generate SQL out
cbf0: 70 75 74 2e 20 20 50 72 69 6e 74 0a 2a 2a 20 74  put.  Print.** t
cc00: 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
cc10: 73 2c 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74  s, comma-separat
cc20: 65 64 2c 20 6f 6e 20 61 20 6c 69 6e 65 20 61 6e  ed, on a line an
cc30: 64 20 74 68 65 6e 20 61 64 64 20 61 0a 2a 2a 20  d then add a.** 
cc40: 73 65 6d 69 63 6f 6c 6f 6e 20 74 65 72 6d 69 6e  semicolon termin
cc50: 61 74 6f 72 20 74 6f 20 74 68 65 20 65 6e 64 20  ator to the end 
cc60: 6f 66 20 74 68 61 74 20 6c 69 6e 65 2e 0a 2a 2a  of that line..**
cc70: 0a 2a 2a 20 49 66 20 74 68 65 20 6e 75 6d 62 65  .** If the numbe
cc80: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20  r of columns is 
cc90: 31 20 61 6e 64 20 74 68 61 74 20 63 6f 6c 75 6d  1 and that colum
cca0: 6e 20 63 6f 6e 74 61 69 6e 73 20 74 65 78 74 20  n contains text 
ccb0: 22 2d 2d 22 0a 2a 2a 20 74 68 65 6e 20 77 72 69  "--".** then wri
ccc0: 74 65 20 74 68 65 20 73 65 6d 69 63 6f 6c 6f 6e  te the semicolon
ccd0: 20 6f 6e 20 61 20 73 65 70 61 72 61 74 65 20 6c   on a separate l
cce0: 69 6e 65 2e 20 20 54 68 61 74 20 77 61 79 2c 20  ine.  That way, 
ccf0: 69 66 20 61 0a 2a 2a 20 22 2d 2d 22 20 63 6f 6d  if a.** "--" com
cd00: 6d 65 6e 74 20 6f 63 63 75 72 73 20 61 74 20 74  ment occurs at t
cd10: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74  he end of the st
cd20: 61 74 65 6d 65 6e 74 2c 20 74 68 65 20 63 6f 6d  atement, the com
cd30: 6d 65 6e 74 0a 2a 2a 20 77 6f 6e 27 74 20 63 6f  ment.** won't co
cd40: 6e 73 75 6d 65 20 74 68 65 20 73 65 6d 69 63 6f  nsume the semico
cd50: 6c 6f 6e 20 74 65 72 6d 69 6e 61 74 6f 72 2e 0a  lon terminator..
cd60: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 72 75  */.static int ru
cd70: 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f 71 75 65  n_table_dump_que
cd80: 72 79 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65  ry(.  ShellState
cd90: 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 2f   *p,           /
cda0: 2a 20 51 75 65 72 79 20 63 6f 6e 74 65 78 74 20  * Query context 
cdb0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
cdc0: 2a 7a 53 65 6c 65 63 74 2c 20 20 20 20 20 2f 2a  *zSelect,     /*
cdd0: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
cde0: 74 20 74 6f 20 65 78 74 72 61 63 74 20 63 6f 6e  t to extract con
cdf0: 74 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  tent */.  const 
ce00: 63 68 61 72 20 2a 7a 46 69 72 73 74 52 6f 77 20  char *zFirstRow 
ce10: 20 20 20 2f 2a 20 50 72 69 6e 74 20 62 65 66 6f     /* Print befo
ce20: 72 65 20 66 69 72 73 74 20 72 6f 77 2c 20 69 66  re first row, if
ce30: 20 6e 6f 74 20 4e 55 4c 4c 20 2a 2f 0a 29 7b 0a   not NULL */.){.
ce40: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
ce50: 70 53 65 6c 65 63 74 3b 0a 20 20 69 6e 74 20 72  pSelect;.  int r
ce60: 63 3b 0a 20 20 69 6e 74 20 6e 52 65 73 75 6c 74  c;.  int nResult
ce70: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 6f 6e  ;.  int i;.  con
ce80: 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 72 63  st char *z;.  rc
ce90: 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
cea0: 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 65  re_v2(p->db, zSe
ceb0: 6c 65 63 74 2c 20 2d 31 2c 20 26 70 53 65 6c 65  lect, -1, &pSele
cec0: 63 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63  ct, 0);.  if( rc
ced0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 21  !=SQLITE_OK || !
cee0: 70 53 65 6c 65 63 74 20 29 7b 0a 20 20 20 20 75  pSelect ){.    u
cef0: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
cf00: 74 2c 20 22 2f 2a 2a 2a 2a 20 45 52 52 4f 52 3a  t, "/**** ERROR:
cf10: 20 28 25 64 29 20 25 73 20 2a 2a 2a 2a 2a 2f 5c   (%d) %s *****/\
cf20: 6e 22 2c 20 72 63 2c 0a 20 20 20 20 20 20 20 20  n", rc,.        
cf30: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
cf40: 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a  errmsg(p->db));.
cf50: 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66      if( (rc&0xff
cf60: 29 21 3d 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  )!=SQLITE_CORRUP
cf70: 54 20 29 20 70 2d 3e 6e 45 72 72 2b 2b 3b 0a 20  T ) p->nErr++;. 
cf80: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20     return rc;.  
cf90: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
cfa0: 5f 73 74 65 70 28 70 53 65 6c 65 63 74 29 3b 0a  _step(pSelect);.
cfb0: 20 20 6e 52 65 73 75 6c 74 20 3d 20 73 71 6c 69    nResult = sqli
cfc0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
cfd0: 28 70 53 65 6c 65 63 74 29 3b 0a 20 20 77 68 69  (pSelect);.  whi
cfe0: 6c 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 52  le( rc==SQLITE_R
cff0: 4f 57 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 46  OW ){.    if( zF
d000: 69 72 73 74 52 6f 77 20 29 7b 0a 20 20 20 20 20  irstRow ){.     
d010: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
d020: 6f 75 74 2c 20 22 25 73 22 2c 20 7a 46 69 72 73  out, "%s", zFirs
d030: 74 52 6f 77 29 3b 0a 20 20 20 20 20 20 7a 46 69  tRow);.      zFi
d040: 72 73 74 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  rstRow = 0;.    
d050: 7d 0a 20 20 20 20 7a 20 3d 20 28 63 6f 6e 73 74  }.    z = (const
d060: 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
d070: 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 65 6c 65  olumn_text(pSele
d080: 63 74 2c 20 30 29 3b 0a 20 20 20 20 75 74 66 38  ct, 0);.    utf8
d090: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
d0a0: 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 66 6f  "%s", z);.    fo
d0b0: 72 28 69 3d 31 3b 20 69 3c 6e 52 65 73 75 6c 74  r(i=1; i<nResult
d0c0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 75 74  ; i++){.      ut
d0d0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
d0e0: 2c 20 22 2c 25 73 22 2c 20 73 71 6c 69 74 65 33  , ",%s", sqlite3
d0f0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 65  _column_text(pSe
d100: 6c 65 63 74 2c 20 69 29 29 3b 0a 20 20 20 20 7d  lect, i));.    }
d110: 0a 20 20 20 20 69 66 28 20 7a 3d 3d 30 20 29 20  .    if( z==0 ) 
d120: 7a 20 3d 20 22 22 3b 0a 20 20 20 20 77 68 69 6c  z = "";.    whil
d130: 65 28 20 7a 5b 30 5d 20 26 26 20 28 7a 5b 30 5d  e( z[0] && (z[0]
d140: 21 3d 27 2d 27 20 7c 7c 20 7a 5b 31 5d 21 3d 27  !='-' || z[1]!='
d150: 2d 27 29 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 69  -') ) z++;.    i
d160: 66 28 20 7a 5b 30 5d 20 29 7b 0a 20 20 20 20 20  f( z[0] ){.     
d170: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
d180: 75 74 2c 20 22 5c 6e 3b 5c 6e 22 29 3b 0a 20 20  ut, "\n;\n");.  
d190: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
d1a0: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
d1b0: 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a  , ";\n");.    }.
d1c0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
d1d0: 5f 73 74 65 70 28 70 53 65 6c 65 63 74 29 3b 0a  _step(pSelect);.
d1e0: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
d1f0: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 65 6c  e3_finalize(pSel
d200: 65 63 74 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  ect);.  if( rc!=
d210: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
d220: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
d230: 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45 52 52 4f  out, "/**** ERRO
d240: 52 3a 20 28 25 64 29 20 25 73 20 2a 2a 2a 2a 2a  R: (%d) %s *****
d250: 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20 20 20 20 20  /\n", rc,.      
d260: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d270: 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29  3_errmsg(p->db))
d280: 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  ;.    if( (rc&0x
d290: 66 66 29 21 3d 53 51 4c 49 54 45 5f 43 4f 52 52  ff)!=SQLITE_CORR
d2a0: 55 50 54 20 29 20 70 2d 3e 6e 45 72 72 2b 2b 3b  UPT ) p->nErr++;
d2b0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
d2c0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63  ;.}../*.** Alloc
d2d0: 61 74 65 20 73 70 61 63 65 20 61 6e 64 20 73 61  ate space and sa
d2e0: 76 65 20 6f 66 66 20 63 75 72 72 65 6e 74 20 65  ve off current e
d2f0: 72 72 6f 72 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  rror string..*/.
d300: 73 74 61 74 69 63 20 63 68 61 72 20 2a 73 61 76  static char *sav
d310: 65 5f 65 72 72 5f 6d 73 67 28 0a 20 20 73 71 6c  e_err_msg(.  sql
d320: 69 74 65 33 20 2a 64 62 20 20 20 20 20 20 20 20  ite3 *db        
d330: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
d340: 74 6f 20 71 75 65 72 79 20 2a 2f 0a 29 7b 0a 20  to query */.){. 
d350: 20 69 6e 74 20 6e 45 72 72 4d 73 67 20 3d 20 31   int nErrMsg = 1
d360: 2b 73 74 72 6c 65 6e 33 30 28 73 71 6c 69 74 65  +strlen30(sqlite
d370: 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20  3_errmsg(db));. 
d380: 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d   char *zErrMsg =
d390: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36   sqlite3_malloc6
d3a0: 34 28 6e 45 72 72 4d 73 67 29 3b 0a 20 20 69 66  4(nErrMsg);.  if
d3b0: 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20  ( zErrMsg ){.   
d3c0: 20 6d 65 6d 63 70 79 28 7a 45 72 72 4d 73 67 2c   memcpy(zErrMsg,
d3d0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
d3e0: 64 62 29 2c 20 6e 45 72 72 4d 73 67 29 3b 0a 20  db), nErrMsg);. 
d3f0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 45 72 72   }.  return zErr
d400: 4d 73 67 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 5f  Msg;.}..#ifdef _
d410: 5f 6c 69 6e 75 78 5f 5f 0a 2f 2a 0a 2a 2a 20 41  _linux__./*.** A
d420: 74 74 65 6d 70 74 20 74 6f 20 64 69 73 70 6c 61  ttempt to displa
d430: 79 20 49 2f 4f 20 73 74 61 74 73 20 6f 6e 20 4c  y I/O stats on L
d440: 69 6e 75 78 20 75 73 69 6e 67 20 2f 70 72 6f 63  inux using /proc
d450: 2f 50 49 44 2f 69 6f 0a 2a 2f 0a 73 74 61 74 69  /PID/io.*/.stati
d460: 63 20 76 6f 69 64 20 64 69 73 70 6c 61 79 4c 69  c void displayLi
d470: 6e 75 78 49 6f 53 74 61 74 73 28 46 49 4c 45 20  nuxIoStats(FILE 
d480: 2a 6f 75 74 29 7b 0a 20 20 46 49 4c 45 20 2a 69  *out){.  FILE *i
d490: 6e 3b 0a 20 20 63 68 61 72 20 7a 5b 32 30 30 5d  n;.  char z[200]
d4a0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  ;.  sqlite3_snpr
d4b0: 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 29 2c 20  intf(sizeof(z), 
d4c0: 7a 2c 20 22 2f 70 72 6f 63 2f 25 64 2f 69 6f 22  z, "/proc/%d/io"
d4d0: 2c 20 67 65 74 70 69 64 28 29 29 3b 0a 20 20 69  , getpid());.  i
d4e0: 6e 20 3d 20 66 6f 70 65 6e 28 7a 2c 20 22 72 62  n = fopen(z, "rb
d4f0: 22 29 3b 0a 20 20 69 66 28 20 69 6e 3d 3d 30 20  ");.  if( in==0 
d500: 29 20 72 65 74 75 72 6e 3b 0a 20 20 77 68 69 6c  ) return;.  whil
d510: 65 28 20 66 67 65 74 73 28 7a 2c 20 73 69 7a 65  e( fgets(z, size
d520: 6f 66 28 7a 29 2c 20 69 6e 29 21 3d 30 20 29 7b  of(z), in)!=0 ){
d530: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
d540: 74 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20  t struct {.     
d550: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61   const char *zPa
d560: 74 74 65 72 6e 3b 0a 20 20 20 20 20 20 63 6f 6e  ttern;.      con
d570: 73 74 20 63 68 61 72 20 2a 7a 44 65 73 63 3b 0a  st char *zDesc;.
d580: 20 20 20 20 7d 20 61 54 72 61 6e 73 5b 5d 20 3d      } aTrans[] =
d590: 20 7b 0a 20 20 20 20 20 20 7b 20 22 72 63 68 61   {.      { "rcha
d5a0: 72 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20 20  r: ",           
d5b0: 20 20 20 20 20 20 20 22 42 79 74 65 73 20 72 65         "Bytes re
d5c0: 63 65 69 76 65 64 20 62 79 20 72 65 61 64 28 29  ceived by read()
d5d0: 3a 22 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 77  :" },.      { "w
d5e0: 63 68 61 72 3a 20 22 2c 20 20 20 20 20 20 20 20  char: ",        
d5f0: 20 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73            "Bytes
d600: 20 73 65 6e 74 20 74 6f 20 77 72 69 74 65 28 29   sent to write()
d610: 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b  :"    },.      {
d620: 20 22 73 79 73 63 72 3a 20 22 2c 20 20 20 20 20   "syscr: ",     
d630: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52 65               "Re
d640: 61 64 28 29 20 73 79 73 74 65 6d 20 63 61 6c 6c  ad() system call
d650: 73 3a 22 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  s:"      },.    
d660: 20 20 7b 20 22 73 79 73 63 77 3a 20 22 2c 20 20    { "syscw: ",  
d670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d680: 22 57 72 69 74 65 28 29 20 73 79 73 74 65 6d 20  "Write() system 
d690: 63 61 6c 6c 73 3a 22 20 20 20 20 20 7d 2c 0a 20  calls:"     },. 
d6a0: 20 20 20 20 20 7b 20 22 72 65 61 64 5f 62 79 74       { "read_byt
d6b0: 65 73 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20  es: ",          
d6c0: 20 20 20 22 42 79 74 65 73 20 72 65 61 64 20 66     "Bytes read f
d6d0: 72 6f 6d 20 73 74 6f 72 61 67 65 3a 22 20 20 7d  rom storage:"  }
d6e0: 2c 0a 20 20 20 20 20 20 7b 20 22 77 72 69 74 65  ,.      { "write
d6f0: 5f 62 79 74 65 73 3a 20 22 2c 20 20 20 20 20 20  _bytes: ",      
d700: 20 20 20 20 20 20 22 42 79 74 65 73 20 77 72 69        "Bytes wri
d710: 74 74 65 6e 20 74 6f 20 73 74 6f 72 61 67 65 3a  tten to storage:
d720: 22 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 63 61  " },.      { "ca
d730: 6e 63 65 6c 6c 65 64 5f 77 72 69 74 65 5f 62 79  ncelled_write_by
d740: 74 65 73 3a 20 22 2c 20 20 22 43 61 6e 63 65 6c  tes: ",  "Cancel
d750: 6c 65 64 20 77 72 69 74 65 20 62 79 74 65 73 3a  led write bytes:
d760: 22 20 20 20 20 7d 2c 0a 20 20 20 20 7d 3b 0a 20  "    },.    };. 
d770: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f     int i;.    fo
d780: 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69  r(i=0; i<ArraySi
d790: 7a 65 28 61 54 72 61 6e 73 29 3b 20 69 2b 2b 29  ze(aTrans); i++)
d7a0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20  {.      int n = 
d7b0: 28 69 6e 74 29 73 74 72 6c 65 6e 28 61 54 72 61  (int)strlen(aTra
d7c0: 6e 73 5b 69 5d 2e 7a 50 61 74 74 65 72 6e 29 3b  ns[i].zPattern);
d7d0: 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 6e 63  .      if( strnc
d7e0: 6d 70 28 61 54 72 61 6e 73 5b 69 5d 2e 7a 50 61  mp(aTrans[i].zPa
d7f0: 74 74 65 72 6e 2c 20 7a 2c 20 6e 29 3d 3d 30 20  ttern, z, n)==0 
d800: 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
d810: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 2d 33  printf(out, "%-3
d820: 36 73 20 25 73 22 2c 20 61 54 72 61 6e 73 5b 69  6s %s", aTrans[i
d830: 5d 2e 7a 44 65 73 63 2c 20 26 7a 5b 6e 5d 29 3b  ].zDesc, &z[n]);
d840: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
d850: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
d860: 7d 0a 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a  }.  fclose(in);.
d870: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
d880: 44 69 73 70 6c 61 79 20 61 20 73 69 6e 67 6c 65  Display a single
d890: 20 6c 69 6e 65 20 6f 66 20 73 74 61 74 75 73 20   line of status 
d8a0: 75 73 69 6e 67 20 36 34 2d 62 69 74 20 76 61 6c  using 64-bit val
d8b0: 75 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ues..*/.static v
d8c0: 6f 69 64 20 64 69 73 70 6c 61 79 53 74 61 74 4c  oid displayStatL
d8d0: 69 6e 65 28 0a 20 20 53 68 65 6c 6c 53 74 61 74  ine(.  ShellStat
d8e0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
d8f0: 20 2f 2a 20 54 68 65 20 73 68 65 6c 6c 20 63 6f   /* The shell co
d900: 6e 74 65 78 74 20 2a 2f 0a 20 20 63 68 61 72 20  ntext */.  char 
d910: 2a 7a 4c 61 62 65 6c 2c 20 20 20 20 20 20 20 20  *zLabel,        
d920: 20 20 20 20 20 2f 2a 20 4c 61 62 65 6c 20 66 6f       /* Label fo
d930: 72 20 74 68 69 73 20 6f 6e 65 20 6c 69 6e 65 20  r this one line 
d940: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 46 6f 72 6d  */.  char *zForm
d950: 61 74 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f  at,            /
d960: 2a 20 46 6f 72 6d 61 74 20 66 6f 72 20 74 68 65  * Format for the
d970: 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74   result */.  int
d980: 20 69 53 74 61 74 75 73 43 74 72 6c 2c 20 20 20   iStatusCtrl,   
d990: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
d9a0: 73 74 61 74 75 73 20 74 6f 20 64 69 73 70 6c 61  status to displa
d9b0: 79 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 73 65  y */.  int bRese
d9c0: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
d9d0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 72 65 73 65   /* True to rese
d9e0: 74 20 74 68 65 20 73 74 61 74 73 20 2a 2f 0a 29  t the stats */.)
d9f0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  {.  sqlite3_int6
da00: 34 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 73  4 iCur = -1;.  s
da10: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 69 48 69  qlite3_int64 iHi
da20: 77 74 72 20 3d 20 2d 31 3b 0a 20 20 69 6e 74 20  wtr = -1;.  int 
da30: 69 2c 20 6e 50 65 72 63 65 6e 74 3b 0a 20 20 63  i, nPercent;.  c
da40: 68 61 72 20 7a 4c 69 6e 65 5b 32 30 30 5d 3b 0a  har zLine[200];.
da50: 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73    sqlite3_status
da60: 36 34 28 69 53 74 61 74 75 73 43 74 72 6c 2c 20  64(iStatusCtrl, 
da70: 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20  &iCur, &iHiwtr, 
da80: 62 52 65 73 65 74 29 3b 0a 20 20 66 6f 72 28 69  bReset);.  for(i
da90: 3d 30 2c 20 6e 50 65 72 63 65 6e 74 3d 30 3b 20  =0, nPercent=0; 
daa0: 7a 46 6f 72 6d 61 74 5b 69 5d 3b 20 69 2b 2b 29  zFormat[i]; i++)
dab0: 7b 0a 20 20 20 20 69 66 28 20 7a 46 6f 72 6d 61  {.    if( zForma
dac0: 74 5b 69 5d 3d 3d 27 25 27 20 29 20 6e 50 65 72  t[i]=='%' ) nPer
dad0: 63 65 6e 74 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66  cent++;.  }.  if
dae0: 28 20 6e 50 65 72 63 65 6e 74 3e 31 20 29 7b 0a  ( nPercent>1 ){.
daf0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
db00: 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c 69 6e  intf(sizeof(zLin
db10: 65 29 2c 20 7a 4c 69 6e 65 2c 20 7a 46 6f 72 6d  e), zLine, zForm
db20: 61 74 2c 20 69 43 75 72 2c 20 69 48 69 77 74 72  at, iCur, iHiwtr
db30: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
db40: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
db50: 28 73 69 7a 65 6f 66 28 7a 4c 69 6e 65 29 2c 20  (sizeof(zLine), 
db60: 7a 4c 69 6e 65 2c 20 7a 46 6f 72 6d 61 74 2c 20  zLine, zFormat, 
db70: 69 48 69 77 74 72 29 3b 0a 20 20 7d 0a 20 20 72  iHiwtr);.  }.  r
db80: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
db90: 2c 20 22 25 2d 33 36 73 20 25 73 5c 6e 22 2c 20  , "%-36s %s\n", 
dba0: 7a 4c 61 62 65 6c 2c 20 7a 4c 69 6e 65 29 3b 0a  zLabel, zLine);.
dbb0: 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61 79  }../*.** Display
dbc0: 20 6d 65 6d 6f 72 79 20 73 74 61 74 73 2e 0a 2a   memory stats..*
dbd0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64 69 73  /.static int dis
dbe0: 70 6c 61 79 5f 73 74 61 74 73 28 0a 20 20 73 71  play_stats(.  sq
dbf0: 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20  lite3 *db,      
dc00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
dc10: 61 62 61 73 65 20 74 6f 20 71 75 65 72 79 20 2a  abase to query *
dc20: 2f 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  /.  ShellState *
dc30: 70 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20  pArg,           
dc40: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 68  /* Pointer to Sh
dc50: 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 20 20 69 6e  ellState */.  in
dc60: 74 20 62 52 65 73 65 74 20 20 20 20 20 20 20 20  t bReset        
dc70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
dc80: 65 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73  e to reset the s
dc90: 74 61 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  tats */.){.  int
dca0: 20 69 43 75 72 3b 0a 20 20 69 6e 74 20 69 48 69   iCur;.  int iHi
dcb0: 77 74 72 3b 0a 0a 20 20 69 66 28 20 70 41 72 67  wtr;..  if( pArg
dcc0: 20 26 26 20 70 41 72 67 2d 3e 6f 75 74 20 29 7b   && pArg->out ){
dcd0: 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61 74  .    displayStat
dce0: 4c 69 6e 65 28 70 41 72 67 2c 20 22 4d 65 6d 6f  Line(pArg, "Memo
dcf0: 72 79 20 55 73 65 64 3a 22 2c 0a 20 20 20 20 20  ry Used:",.     
dd00: 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25 6c 6c    "%lld (max %ll
dd10: 64 29 20 62 79 74 65 73 22 2c 20 53 51 4c 49 54  d) bytes", SQLIT
dd20: 45 5f 53 54 41 54 55 53 5f 4d 45 4d 4f 52 59 5f  E_STATUS_MEMORY_
dd30: 55 53 45 44 2c 20 62 52 65 73 65 74 29 3b 0a 20  USED, bReset);. 
dd40: 20 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69     displayStatLi
dd50: 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d 62 65 72  ne(pArg, "Number
dd60: 20 6f 66 20 4f 75 74 73 74 61 6e 64 69 6e 67 20   of Outstanding 
dd70: 41 6c 6c 6f 63 61 74 69 6f 6e 73 3a 22 2c 0a 20  Allocations:",. 
dd80: 20 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78        "%lld (max
dd90: 20 25 6c 6c 64 29 22 2c 20 53 51 4c 49 54 45 5f   %lld)", SQLITE_
dda0: 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 43 4f  STATUS_MALLOC_CO
ddb0: 55 4e 54 2c 20 62 52 65 73 65 74 29 3b 0a 20 20  UNT, bReset);.  
ddc0: 20 20 69 66 28 20 70 41 72 67 2d 3e 73 68 65 6c    if( pArg->shel
ddd0: 6c 46 6c 67 73 20 26 20 53 48 46 4c 47 5f 50 61  lFlgs & SHFLG_Pa
dde0: 67 65 63 61 63 68 65 20 29 7b 0a 20 20 20 20 20  gecache ){.     
ddf0: 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65   displayStatLine
de00: 28 70 41 72 67 2c 20 22 4e 75 6d 62 65 72 20 6f  (pArg, "Number o
de10: 66 20 50 63 61 63 68 65 20 50 61 67 65 73 20 55  f Pcache Pages U
de20: 73 65 64 3a 22 2c 0a 20 20 20 20 20 20 20 20 20  sed:",.         
de30: 22 25 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29  "%lld (max %lld)
de40: 20 70 61 67 65 73 22 2c 20 53 51 4c 49 54 45 5f   pages", SQLITE_
de50: 53 54 41 54 55 53 5f 50 41 47 45 43 41 43 48 45  STATUS_PAGECACHE
de60: 5f 55 53 45 44 2c 20 62 52 65 73 65 74 29 3b 0a  _USED, bReset);.
de70: 20 20 20 20 7d 0a 20 20 20 20 64 69 73 70 6c 61      }.    displa
de80: 79 53 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20  yStatLine(pArg, 
de90: 22 4e 75 6d 62 65 72 20 6f 66 20 50 63 61 63 68  "Number of Pcach
dea0: 65 20 4f 76 65 72 66 6c 6f 77 20 42 79 74 65 73  e Overflow Bytes
deb0: 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64  :",.       "%lld
dec0: 20 28 6d 61 78 20 25 6c 6c 64 29 20 62 79 74 65   (max %lld) byte
ded0: 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55  s", SQLITE_STATU
dee0: 53 5f 50 41 47 45 43 41 43 48 45 5f 4f 56 45 52  S_PAGECACHE_OVER
def0: 46 4c 4f 57 2c 20 62 52 65 73 65 74 29 3b 0a 20  FLOW, bReset);. 
df00: 20 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69     displayStatLi
df10: 6e 65 28 70 41 72 67 2c 20 22 4c 61 72 67 65 73  ne(pArg, "Larges
df20: 74 20 41 6c 6c 6f 63 61 74 69 6f 6e 3a 22 2c 0a  t Allocation:",.
df30: 20 20 20 20 20 20 20 22 25 6c 6c 64 20 62 79 74         "%lld byt
df40: 65 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  es", SQLITE_STAT
df50: 55 53 5f 4d 41 4c 4c 4f 43 5f 53 49 5a 45 2c 20  US_MALLOC_SIZE, 
df60: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 64 69 73  bReset);.    dis
df70: 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72  playStatLine(pAr
df80: 67 2c 20 22 4c 61 72 67 65 73 74 20 50 63 61 63  g, "Largest Pcac
df90: 68 65 20 41 6c 6c 6f 63 61 74 69 6f 6e 3a 22 2c  he Allocation:",
dfa0: 0a 20 20 20 20 20 20 20 22 25 6c 6c 64 20 62 79  .       "%lld by
dfb0: 74 65 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  tes", SQLITE_STA
dfc0: 54 55 53 5f 50 41 47 45 43 41 43 48 45 5f 53 49  TUS_PAGECACHE_SI
dfd0: 5a 45 2c 20 62 52 65 73 65 74 29 3b 0a 23 69 66  ZE, bReset);.#if
dfe0: 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
dff0: 41 43 4b 44 45 50 54 48 0a 20 20 20 20 64 69 73  ACKDEPTH.    dis
e000: 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72  playStatLine(pAr
e010: 67 2c 20 22 44 65 65 70 65 73 74 20 50 61 72 73  g, "Deepest Pars
e020: 65 72 20 53 74 61 63 6b 3a 22 2c 0a 20 20 20 20  er Stack:",.    
e030: 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25 6c     "%lld (max %l
e040: 6c 64 29 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ld)", SQLITE_STA
e050: 54 55 53 5f 50 41 52 53 45 52 5f 53 54 41 43 4b  TUS_PARSER_STACK
e060: 2c 20 62 52 65 73 65 74 29 3b 0a 23 65 6e 64 69  , bReset);.#endi
e070: 66 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 41 72  f.  }..  if( pAr
e080: 67 20 26 26 20 70 41 72 67 2d 3e 6f 75 74 20 26  g && pArg->out &
e090: 26 20 64 62 20 29 7b 0a 20 20 20 20 69 66 28 20  & db ){.    if( 
e0a0: 70 41 72 67 2d 3e 73 68 65 6c 6c 46 6c 67 73 20  pArg->shellFlgs 
e0b0: 26 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64  & SHFLG_Lookasid
e0c0: 65 20 29 7b 0a 20 20 20 20 20 20 69 48 69 77 74  e ){.      iHiwt
e0d0: 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20  r = iCur = -1;. 
e0e0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f       sqlite3_db_
e0f0: 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
e100: 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41  E_DBSTATUS_LOOKA
e110: 53 49 44 45 5f 55 53 45 44 2c 0a 20 20 20 20 20  SIDE_USED,.     
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e130: 20 20 20 26 69 43 75 72 2c 20 26 69 48 69 77 74     &iCur, &iHiwt
e140: 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  r, bReset);.    
e150: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
e160: 67 2d 3e 6f 75 74 2c 0a 20 20 20 20 20 20 20 20  g->out,.        
e170: 20 20 20 20 20 20 22 4c 6f 6f 6b 61 73 69 64 65        "Lookaside
e180: 20 53 6c 6f 74 73 20 55 73 65 64 3a 20 20 20 20   Slots Used:    
e190: 20 20 20 20 20 20 20 20 20 20 20 20 25 64 20 28              %d (
e1a0: 6d 61 78 20 25 64 29 5c 6e 22 2c 0a 20 20 20 20  max %d)\n",.    
e1b0: 20 20 20 20 20 20 20 20 20 20 69 43 75 72 2c 20            iCur, 
e1c0: 69 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20 73  iHiwtr);.      s
e1d0: 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73  qlite3_db_status
e1e0: 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54  (db, SQLITE_DBST
e1f0: 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 48  ATUS_LOOKASIDE_H
e200: 49 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  IT,.            
e210: 20 20 20 20 20 20 20 20 20 20 20 20 26 69 43 75              &iCu
e220: 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65 73  r, &iHiwtr, bRes
e230: 65 74 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  et);.      raw_p
e240: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e250: 20 22 53 75 63 63 65 73 73 66 75 6c 20 6c 6f 6f   "Successful loo
e260: 6b 61 73 69 64 65 20 61 74 74 65 6d 70 74 73 3a  kaside attempts:
e270: 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 0a 20 20         %d\n",.  
e280: 20 20 20 20 20 20 20 20 20 20 20 20 69 48 69 77              iHiw
e290: 74 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  tr);.      sqlit
e2a0: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c  e3_db_status(db,
e2b0: 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
e2c0: 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53 5f  _LOOKASIDE_MISS_
e2d0: 53 49 5a 45 2c 0a 20 20 20 20 20 20 20 20 20 20  SIZE,.          
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 69                &i
e2f0: 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52  Cur, &iHiwtr, bR
e300: 65 73 65 74 29 3b 0a 20 20 20 20 20 20 72 61 77  eset);.      raw
e310: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
e320: 74 2c 20 22 4c 6f 6f 6b 61 73 69 64 65 20 66 61  t, "Lookaside fa
e330: 69 6c 75 72 65 73 20 64 75 65 20 74 6f 20 73 69  ilures due to si
e340: 7a 65 3a 20 20 20 20 20 20 25 64 5c 6e 22 2c 0a  ze:      %d\n",.
e350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 48                iH
e360: 69 77 74 72 29 3b 0a 20 20 20 20 20 20 73 71 6c  iwtr);.      sql
e370: 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64  ite3_db_status(d
e380: 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54  b, SQLITE_DBSTAT
e390: 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53  US_LOOKASIDE_MIS
e3a0: 53 5f 46 55 4c 4c 2c 0a 20 20 20 20 20 20 20 20  S_FULL,.        
e3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3c0: 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20  &iCur, &iHiwtr, 
e3d0: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20 72  bReset);.      r
e3e0: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
e3f0: 6f 75 74 2c 20 22 4c 6f 6f 6b 61 73 69 64 65 20  out, "Lookaside 
e400: 66 61 69 6c 75 72 65 73 20 64 75 65 20 74 6f 20  failures due to 
e410: 4f 4f 4d 3a 20 20 20 20 20 20 20 25 64 5c 6e 22  OOM:       %d\n"
e420: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
e430: 69 48 69 77 74 72 29 3b 0a 20 20 20 20 7d 0a 20  iHiwtr);.    }. 
e440: 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72     iHiwtr = iCur
e450: 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74   = -1;.    sqlit
e460: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c  e3_db_status(db,
e470: 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
e480: 5f 43 41 43 48 45 5f 55 53 45 44 2c 20 26 69 43  _CACHE_USED, &iC
e490: 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65  ur, &iHiwtr, bRe
e4a0: 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70 72  set);.    raw_pr
e4b0: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
e4c0: 22 50 61 67 65 72 20 48 65 61 70 20 55 73 61 67  "Pager Heap Usag
e4d0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
e4e0: 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c 6e        %d bytes\n
e4f0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ",.            i
e500: 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74 72  Cur);.    iHiwtr
e510: 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20   = iCur = -1;.  
e520: 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
e530: 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44  tus(db, SQLITE_D
e540: 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f 48 49  BSTATUS_CACHE_HI
e550: 54 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77 74  T, &iCur, &iHiwt
e560: 72 2c 20 31 29 3b 0a 20 20 20 20 72 61 77 5f 70  r, 1);.    raw_p
e570: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e580: 20 22 50 61 67 65 20 63 61 63 68 65 20 68 69 74   "Page cache hit
e590: 73 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s:              
e5a0: 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43         %d\n", iC
e5b0: 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74 72 20  ur);.    iHiwtr 
e5c0: 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20  = iCur = -1;.   
e5d0: 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74   sqlite3_db_stat
e5e0: 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42  us(db, SQLITE_DB
e5f0: 53 54 41 54 55 53 5f 43 41 43 48 45 5f 4d 49 53  STATUS_CACHE_MIS
e600: 53 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77 74  S, &iCur, &iHiwt
e610: 72 2c 20 31 29 3b 0a 20 20 20 20 72 61 77 5f 70  r, 1);.    raw_p
e620: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e630: 20 22 50 61 67 65 20 63 61 63 68 65 20 6d 69 73   "Page cache mis
e640: 73 65 73 3a 20 20 20 20 20 20 20 20 20 20 20 20  ses:            
e650: 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43         %d\n", iC
e660: 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74 72 20  ur);.    iHiwtr 
e670: 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20  = iCur = -1;.   
e680: 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74   sqlite3_db_stat
e690: 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42  us(db, SQLITE_DB
e6a0: 53 54 41 54 55 53 5f 43 41 43 48 45 5f 57 52 49  STATUS_CACHE_WRI
e6b0: 54 45 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77  TE, &iCur, &iHiw
e6c0: 74 72 2c 20 31 29 3b 0a 20 20 20 20 72 61 77 5f  tr, 1);.    raw_
e6d0: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
e6e0: 2c 20 22 50 61 67 65 20 63 61 63 68 65 20 77 72  , "Page cache wr
e6f0: 69 74 65 73 3a 20 20 20 20 20 20 20 20 20 20 20  ites:           
e700: 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69          %d\n", i
e710: 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74 72  Cur);.    iHiwtr
e720: 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20   = iCur = -1;.  
e730: 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
e740: 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44  tus(db, SQLITE_D
e750: 42 53 54 41 54 55 53 5f 53 43 48 45 4d 41 5f 55  BSTATUS_SCHEMA_U
e760: 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69  SED, &iCur, &iHi
e770: 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20  wtr, bReset);.  
e780: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
e790: 67 2d 3e 6f 75 74 2c 20 22 53 63 68 65 6d 61 20  g->out, "Schema 
e7a0: 48 65 61 70 20 55 73 61 67 65 3a 20 20 20 20 20  Heap Usage:     
e7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64                %d
e7c0: 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20 20   bytes\n",.     
e7d0: 20 20 20 20 20 20 20 69 43 75 72 29 3b 0a 20 20         iCur);.  
e7e0: 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20    iHiwtr = iCur 
e7f0: 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  = -1;.    sqlite
e800: 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20  3_db_status(db, 
e810: 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
e820: 53 54 4d 54 5f 55 53 45 44 2c 20 26 69 43 75 72  STMT_USED, &iCur
e830: 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65 73 65  , &iHiwtr, bRese
e840: 74 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e  t);.    raw_prin
e850: 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 53  tf(pArg->out, "S
e860: 74 61 74 65 6d 65 6e 74 20 48 65 61 70 2f 4c 6f  tatement Heap/Lo
e870: 6f 6b 61 73 69 64 65 20 55 73 61 67 65 3a 20 20  okaside Usage:  
e880: 20 20 20 20 25 64 20 62 79 74 65 73 5c 6e 22 2c      %d bytes\n",
e890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 43 75  .            iCu
e8a0: 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  r);.  }..  if( p
e8b0: 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75 74  Arg && pArg->out
e8c0: 20 26 26 20 64 62 20 26 26 20 70 41 72 67 2d 3e   && db && pArg->
e8d0: 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 43 75  pStmt ){.    iCu
e8e0: 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  r = sqlite3_stmt
e8f0: 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70 53  _status(pArg->pS
e900: 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54  tmt, SQLITE_STMT
e910: 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f  STATUS_FULLSCAN_
e920: 53 54 45 50 2c 0a 20 20 20 20 20 20 20 20 20 20  STEP,.          
e930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e940: 20 20 20 20 20 62 52 65 73 65 74 29 3b 0a 20 20       bReset);.  
e950: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
e960: 67 2d 3e 6f 75 74 2c 20 22 46 75 6c 6c 73 63 61  g->out, "Fullsca
e970: 6e 20 53 74 65 70 73 3a 20 20 20 20 20 20 20 20  n Steps:        
e980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64                %d
e990: 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20  \n", iCur);.    
e9a0: 69 43 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73  iCur = sqlite3_s
e9b0: 74 6d 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d  tmt_status(pArg-
e9c0: 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53  >pStmt, SQLITE_S
e9d0: 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 2c 20  TMTSTATUS_SORT, 
e9e0: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77  bReset);.    raw
e9f0: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
ea00: 74 2c 20 22 53 6f 72 74 20 4f 70 65 72 61 74 69  t, "Sort Operati
ea10: 6f 6e 73 3a 20 20 20 20 20 20 20 20 20 20 20 20  ons:            
ea20: 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20           %d\n", 
ea30: 69 43 75 72 29 3b 0a 20 20 20 20 69 43 75 72 20  iCur);.    iCur 
ea40: 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73  = sqlite3_stmt_s
ea50: 74 61 74 75 73 28 70 41 72 67 2d 3e 70 53 74 6d  tatus(pArg->pStm
ea60: 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  t, SQLITE_STMTST
ea70: 41 54 55 53 5f 41 55 54 4f 49 4e 44 45 58 2c 62  ATUS_AUTOINDEX,b
ea80: 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f  Reset);.    raw_
ea90: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
eaa0: 2c 20 22 41 75 74 6f 69 6e 64 65 78 20 49 6e 73  , "Autoindex Ins
eab0: 65 72 74 73 3a 20 20 20 20 20 20 20 20 20 20 20  erts:           
eac0: 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69          %d\n", i
ead0: 43 75 72 29 3b 0a 20 20 20 20 69 43 75 72 20 3d  Cur);.    iCur =
eae0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74   sqlite3_stmt_st
eaf0: 61 74 75 73 28 70 41 72 67 2d 3e 70 53 74 6d 74  atus(pArg->pStmt
eb00: 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  , SQLITE_STMTSTA
eb10: 54 55 53 5f 56 4d 5f 53 54 45 50 2c 20 62 52 65  TUS_VM_STEP, bRe
eb20: 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70 72  set);.    raw_pr
eb30: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
eb40: 22 56 69 72 74 75 61 6c 20 4d 61 63 68 69 6e 65  "Virtual Machine
eb50: 20 53 74 65 70 73 3a 20 20 20 20 20 20 20 20 20   Steps:         
eb60: 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43 75        %d\n", iCu
eb70: 72 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20  r);.  }..#ifdef 
eb80: 5f 5f 6c 69 6e 75 78 5f 5f 0a 20 20 64 69 73 70  __linux__.  disp
eb90: 6c 61 79 4c 69 6e 75 78 49 6f 53 74 61 74 73 28  layLinuxIoStats(
eba0: 70 41 72 67 2d 3e 6f 75 74 29 3b 0a 23 65 6e 64  pArg->out);.#end
ebb0: 69 66 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  if..  /* Do not 
ebc0: 72 65 6d 6f 76 65 20 74 68 69 73 20 6d 61 63 68  remove this mach
ebd0: 69 6e 65 20 72 65 61 64 61 62 6c 65 20 63 6f 6d  ine readable com
ebe0: 6d 65 6e 74 3a 20 65 78 74 72 61 2d 73 74 61 74  ment: extra-stat
ebf0: 73 2d 6f 75 74 70 75 74 2d 68 65 72 65 20 2a 2f  s-output-here */
ec00: 0a 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  ..  return 0;.}.
ec10: 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61 79 20 73  ./*.** Display s
ec20: 63 61 6e 20 73 74 61 74 73 2e 0a 2a 2f 0a 73 74  can stats..*/.st
ec30: 61 74 69 63 20 76 6f 69 64 20 64 69 73 70 6c 61  atic void displa
ec40: 79 5f 73 63 61 6e 73 74 61 74 73 28 0a 20 20 73  y_scanstats(.  s
ec50: 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20  qlite3 *db,     
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ec70: 2a 20 44 61 74 61 62 61 73 65 20 74 6f 20 71 75  * Database to qu
ec80: 65 72 79 20 2a 2f 0a 20 20 53 68 65 6c 6c 53 74  ery */.  ShellSt
ec90: 61 74 65 20 2a 70 41 72 67 20 20 20 20 20 20 20  ate *pArg       
eca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
ecb0: 74 65 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74  ter to ShellStat
ecc0: 65 20 2a 2f 0a 29 7b 0a 23 69 66 6e 64 65 66 20  e */.){.#ifndef 
ecd0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
ece0: 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
ecf0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
ed00: 28 64 62 29 3b 0a 20 20 55 4e 55 53 45 44 5f 50  (db);.  UNUSED_P
ed10: 41 52 41 4d 45 54 45 52 28 70 41 72 67 29 3b 0a  ARAMETER(pArg);.
ed20: 23 65 6c 73 65 0a 20 20 69 6e 74 20 69 2c 20 6b  #else.  int i, k
ed30: 2c 20 6e 2c 20 6d 78 3b 0a 20 20 72 61 77 5f 70  , n, mx;.  raw_p
ed40: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
ed50: 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 63 61 6e 73   "-------- scans
ed60: 74 61 74 73 20 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22  tats --------\n"
ed70: 29 3b 0a 20 20 6d 78 20 3d 20 30 3b 0a 20 20 66  );.  mx = 0;.  f
ed80: 6f 72 28 6b 3d 30 3b 20 6b 3c 3d 6d 78 3b 20 6b  or(k=0; k<=mx; k
ed90: 2b 2b 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20  ++){.    double 
eda0: 72 45 73 74 4c 6f 6f 70 20 3d 20 31 2e 30 3b 0a  rEstLoop = 1.0;.
edb0: 20 20 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 31      for(i=n=0; 1
edc0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71  ; i++){.      sq
edd0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 20 3d 20  lite3_stmt *p = 
ede0: 70 41 72 67 2d 3e 70 53 74 6d 74 3b 0a 20 20 20  pArg->pStmt;.   
edf0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34     sqlite3_int64
ee00: 20 6e 4c 6f 6f 70 2c 20 6e 56 69 73 69 74 3b 0a   nLoop, nVisit;.
ee10: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 45 73        double rEs
ee20: 74 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 53 69  t;.      int iSi
ee30: 64 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  d;.      const c
ee40: 68 61 72 20 2a 7a 45 78 70 6c 61 69 6e 3b 0a 20  har *zExplain;. 
ee50: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
ee60: 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75 73  _stmt_scanstatus
ee70: 28 70 2c 20 69 2c 20 53 51 4c 49 54 45 5f 53 43  (p, i, SQLITE_SC
ee80: 41 4e 53 54 41 54 5f 4e 4c 4f 4f 50 2c 20 28 76  ANSTAT_NLOOP, (v
ee90: 6f 69 64 2a 29 26 6e 4c 6f 6f 70 29 20 29 7b 0a  oid*)&nLoop) ){.
eea0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
eeb0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
eec0: 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74  ite3_stmt_scanst
eed0: 61 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54  atus(p, i, SQLIT
eee0: 45 5f 53 43 41 4e 53 54 41 54 5f 53 45 4c 45 43  E_SCANSTAT_SELEC
eef0: 54 49 44 2c 20 28 76 6f 69 64 2a 29 26 69 53 69  TID, (void*)&iSi
ef00: 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 53  d);.      if( iS
ef10: 69 64 3e 6d 78 20 29 20 6d 78 20 3d 20 69 53 69  id>mx ) mx = iSi
ef20: 64 3b 0a 20 20 20 20 20 20 69 66 28 20 69 53 69  d;.      if( iSi
ef30: 64 21 3d 6b 20 29 20 63 6f 6e 74 69 6e 75 65 3b  d!=k ) continue;
ef40: 0a 20 20 20 20 20 20 69 66 28 20 6e 3d 3d 30 20  .      if( n==0 
ef50: 29 7b 0a 20 20 20 20 20 20 20 20 72 45 73 74 4c  ){.        rEstL
ef60: 6f 6f 70 20 3d 20 28 64 6f 75 62 6c 65 29 6e 4c  oop = (double)nL
ef70: 6f 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 66 28  oop;.        if(
ef80: 20 6b 3e 30 20 29 20 72 61 77 5f 70 72 69 6e 74   k>0 ) raw_print
ef90: 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 2d 2d  f(pArg->out, "--
efa0: 2d 2d 2d 2d 2d 2d 20 73 75 62 71 75 65 72 79 20  ------ subquery 
efb0: 25 64 20 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 2c 20 6b  %d -------\n", k
efc0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
efd0: 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 73 71 6c 69   n++;.      sqli
efe0: 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61  te3_stmt_scansta
eff0: 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45  tus(p, i, SQLITE
f000: 5f 53 43 41 4e 53 54 41 54 5f 4e 56 49 53 49 54  _SCANSTAT_NVISIT
f010: 2c 20 28 76 6f 69 64 2a 29 26 6e 56 69 73 69 74  , (void*)&nVisit
f020: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
f030: 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75 73  _stmt_scanstatus
f040: 28 70 2c 20 69 2c 20 53 51 4c 49 54 45 5f 53 43  (p, i, SQLITE_SC
f050: 41 4e 53 54 41 54 5f 45 53 54 2c 20 28 76 6f 69  ANSTAT_EST, (voi
f060: 64 2a 29 26 72 45 73 74 29 3b 0a 20 20 20 20 20  d*)&rEst);.     
f070: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63   sqlite3_stmt_sc
f080: 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53  anstatus(p, i, S
f090: 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 45  QLITE_SCANSTAT_E
f0a0: 58 50 4c 41 49 4e 2c 20 28 76 6f 69 64 2a 29 26  XPLAIN, (void*)&
f0b0: 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20  zExplain);.     
f0c0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41 72   utf8_printf(pAr
f0d0: 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 70 20 25 32  g->out, "Loop %2
f0e0: 64 3a 20 25 73 5c 6e 22 2c 20 6e 2c 20 7a 45 78  d: %s\n", n, zEx
f0f0: 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 72 45  plain);.      rE
f100: 73 74 4c 6f 6f 70 20 2a 3d 20 72 45 73 74 3b 0a  stLoop *= rEst;.
f110: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
f120: 28 70 41 72 67 2d 3e 6f 75 74 2c 0a 20 20 20 20  (pArg->out,.    
f130: 20 20 20 20 20 20 22 20 20 20 20 20 20 20 20 20        "         
f140: 6e 4c 6f 6f 70 3d 25 2d 38 6c 6c 64 20 6e 52 6f  nLoop=%-8lld nRo
f150: 77 3d 25 2d 38 6c 6c 64 20 65 73 74 52 6f 77 3d  w=%-8lld estRow=
f160: 25 2d 38 6c 6c 64 20 65 73 74 52 6f 77 2f 4c 6f  %-8lld estRow/Lo
f170: 6f 70 3d 25 2d 38 67 5c 6e 22 2c 0a 20 20 20 20  op=%-8g\n",.    
f180: 20 20 20 20 20 20 6e 4c 6f 6f 70 2c 20 6e 56 69        nLoop, nVi
f190: 73 69 74 2c 20 28 73 71 6c 69 74 65 33 5f 69 6e  sit, (sqlite3_in
f1a0: 74 36 34 29 28 72 45 73 74 4c 6f 6f 70 2b 30 2e  t64)(rEstLoop+0.
f1b0: 35 29 2c 20 72 45 73 74 0a 20 20 20 20 20 20 29  5), rEst.      )
f1c0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 61  ;.    }.  }.  ra
f1d0: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
f1e0: 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ut, "-----------
f1f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f200: 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a  \n");.#endif.}..
f210: 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  /*.** Parameter 
f220: 61 7a 41 72 72 61 79 20 70 6f 69 6e 74 73 20 74  azArray points t
f230: 6f 20 61 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61  o a zero-termina
f240: 74 65 64 20 61 72 72 61 79 20 6f 66 20 73 74 72  ted array of str
f250: 69 6e 67 73 2e 20 7a 53 74 72 0a 2a 2a 20 70 6f  ings. zStr.** po
f260: 69 6e 74 73 20 74 6f 20 61 20 73 69 6e 67 6c 65  ints to a single
f270: 20 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20   nul-terminated 
f280: 73 74 72 69 6e 67 2e 20 52 65 74 75 72 6e 20 6e  string. Return n
f290: 6f 6e 2d 7a 65 72 6f 20 69 66 20 7a 53 74 72 0a  on-zero if zStr.
f2a0: 2a 2a 20 69 73 20 65 71 75 61 6c 2c 20 61 63 63  ** is equal, acc
f2b0: 6f 72 64 69 6e 67 20 74 6f 20 73 74 72 63 6d 70  ording to strcmp
f2c0: 28 29 2c 20 74 6f 20 61 6e 79 20 6f 66 20 74 68  (), to any of th
f2d0: 65 20 73 74 72 69 6e 67 73 20 69 6e 20 74 68 65  e strings in the
f2e0: 20 61 72 72 61 79 2e 0a 2a 2a 20 4f 74 68 65 72   array..** Other
f2f0: 77 69 73 65 2c 20 72 65 74 75 72 6e 20 7a 65 72  wise, return zer
f300: 6f 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  o..*/.static int
f310: 20 73 74 72 5f 69 6e 5f 61 72 72 61 79 28 63 6f   str_in_array(co
f320: 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 72 2c 20  nst char *zStr, 
f330: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 41  const char **azA
f340: 72 72 61 79 29 7b 0a 20 20 69 6e 74 20 69 3b 0a  rray){.  int i;.
f350: 20 20 66 6f 72 28 69 3d 30 3b 20 61 7a 41 72 72    for(i=0; azArr
f360: 61 79 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20  ay[i]; i++){.   
f370: 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a   if( 0==strcmp(z
f380: 53 74 72 2c 20 61 7a 41 72 72 61 79 5b 69 5d 29  Str, azArray[i])
f390: 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d   ) return 1;.  }
f3a0: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
f3b0: 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 65  /*.** If compile
f3c0: 64 20 73 74 61 74 65 6d 65 6e 74 20 70 53 71 6c  d statement pSql
f3d0: 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61   appears to be a
f3e0: 6e 20 45 58 50 4c 41 49 4e 20 73 74 61 74 65 6d  n EXPLAIN statem
f3f0: 65 6e 74 2c 20 61 6c 6c 6f 63 61 74 65 0a 2a 2a  ent, allocate.**
f400: 20 61 6e 64 20 70 6f 70 75 6c 61 74 65 20 74 68   and populate th
f410: 65 20 53 68 65 6c 6c 53 74 61 74 65 2e 61 69 49  e ShellState.aiI
f420: 6e 64 65 6e 74 5b 5d 20 61 72 72 61 79 20 77 69  ndent[] array wi
f430: 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  th the number of
f440: 0a 2a 2a 20 73 70 61 63 65 73 20 65 61 63 68 20  .** spaces each 
f450: 6f 70 63 6f 64 65 20 73 68 6f 75 6c 64 20 62 65  opcode should be
f460: 20 69 6e 64 65 6e 74 65 64 20 62 65 66 6f 72 65   indented before
f470: 20 69 74 20 69 73 20 6f 75 74 70 75 74 2e 0a 2a   it is output..*
f480: 2a 0a 2a 2a 20 54 68 65 20 69 6e 64 65 6e 74 69  *.** The indenti
f490: 6e 67 20 72 75 6c 65 73 20 61 72 65 3a 0a 2a 2a  ng rules are:.**
f4a0: 0a 2a 2a 20 20 20 20 20 2a 20 46 6f 72 20 65 61  .**     * For ea
f4b0: 63 68 20 22 4e 65 78 74 22 2c 20 22 50 72 65 76  ch "Next", "Prev
f4c0: 22 2c 20 22 56 4e 65 78 74 22 20 6f 72 20 22 56  ", "VNext" or "V
f4d0: 50 72 65 76 22 20 69 6e 73 74 72 75 63 74 69 6f  Prev" instructio
f4e0: 6e 2c 20 69 6e 64 65 6e 74 0a 2a 2a 20 20 20 20  n, indent.**    
f4f0: 20 20 20 61 6c 6c 20 6f 70 63 6f 64 65 73 20 74     all opcodes t
f500: 68 61 74 20 6f 63 63 75 72 20 62 65 74 77 65 65  hat occur betwee
f510: 6e 20 74 68 65 20 70 32 20 6a 75 6d 70 20 64 65  n the p2 jump de
f520: 73 74 69 6e 61 74 69 6f 6e 20 61 6e 64 20 74 68  stination and th
f530: 65 20 6f 70 63 6f 64 65 0a 2a 2a 20 20 20 20 20  e opcode.**     
f540: 20 20 69 74 73 65 6c 66 20 62 79 20 32 20 73 70    itself by 2 sp
f550: 61 63 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  aces..**.**     
f560: 2a 20 46 6f 72 20 65 61 63 68 20 22 47 6f 74 6f  * For each "Goto
f570: 22 2c 20 69 66 20 74 68 65 20 6a 75 6d 70 20 64  ", if the jump d
f580: 65 73 74 69 6e 61 74 69 6f 6e 20 69 73 20 65 61  estination is ea
f590: 72 6c 69 65 72 20 69 6e 20 74 68 65 20 70 72 6f  rlier in the pro
f5a0: 67 72 61 6d 0a 2a 2a 20 20 20 20 20 20 20 61 6e  gram.**       an
f5b0: 64 20 65 6e 64 73 20 6f 6e 20 6f 6e 65 20 6f 66  d ends on one of
f5c0: 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 59 69  :.**          Yi
f5d0: 65 6c 64 20 20 53 65 65 6b 47 74 20 20 53 65 65  eld  SeekGt  See
f5e0: 6b 4c 74 20 20 52 6f 77 53 65 74 52 65 61 64 20  kLt  RowSetRead 
f5f0: 20 52 65 77 69 6e 64 0a 2a 2a 20 20 20 20 20 20   Rewind.**      
f600: 20 6f 72 20 69 66 20 74 68 65 20 50 31 20 70 61   or if the P1 pa
f610: 72 61 6d 65 74 65 72 20 69 73 20 6f 6e 65 20 69  rameter is one i
f620: 6e 73 74 65 61 64 20 6f 66 20 7a 65 72 6f 2c 0a  nstead of zero,.
f630: 2a 2a 20 20 20 20 20 20 20 74 68 65 6e 20 69 6e  **       then in
f640: 64 65 6e 74 20 61 6c 6c 20 6f 70 63 6f 64 65 73  dent all opcodes
f650: 20 62 65 74 77 65 65 6e 20 74 68 65 20 65 61 72   between the ear
f660: 6c 69 65 72 20 69 6e 73 74 72 75 63 74 69 6f 6e  lier instruction
f670: 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64 20 22 47  .**       and "G
f680: 6f 74 6f 22 20 62 79 20 32 20 73 70 61 63 65 73  oto" by 2 spaces
f690: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
f6a0: 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f 70 72   explain_data_pr
f6b0: 65 70 61 72 65 28 53 68 65 6c 6c 53 74 61 74 65  epare(ShellState
f6c0: 20 2a 70 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d   *p, sqlite3_stm
f6d0: 74 20 2a 70 53 71 6c 29 7b 0a 20 20 63 6f 6e 73  t *pSql){.  cons
f6e0: 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20  t char *zSql;   
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
f700: 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
f710: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  QL statement */.
f720: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
f730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f740: 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 63 68 65    /* Used to che
f750: 63 6b 20 69 66 20 74 68 69 73 20 69 73 20 61 6e  ck if this is an
f760: 20 45 58 50 4c 41 49 4e 20 2a 2f 0a 20 20 69 6e   EXPLAIN */.  in
f770: 74 20 2a 61 62 59 69 65 6c 64 20 3d 20 30 3b 20  t *abYield = 0; 
f780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f790: 20 54 72 75 65 20 69 66 20 6f 70 20 69 73 20 61   True if op is a
f7a0: 6e 20 4f 50 5f 59 69 65 6c 64 20 2a 2f 0a 20 20  n OP_Yield */.  
f7b0: 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b 20  int nAlloc = 0; 
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7d0: 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a  /* Allocated siz
f7e0: 65 20 6f 66 20 70 2d 3e 61 69 49 6e 64 65 6e 74  e of p->aiIndent
f7f0: 5b 5d 2c 20 61 62 59 69 65 6c 64 20 2a 2f 0a 20  [], abYield */. 
f800: 20 69 6e 74 20 69 4f 70 3b 20 20 20 20 20 20 20   int iOp;       
f810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f820: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 6f 70 65   /* Index of ope
f830: 72 61 74 69 6f 6e 20 69 6e 20 70 2d 3e 61 69 49  ration in p->aiI
f840: 6e 64 65 6e 74 5b 5d 20 2a 2f 0a 0a 20 20 63 6f  ndent[] */..  co
f850: 6e 73 74 20 63 68 61 72 20 2a 61 7a 4e 65 78 74  nst char *azNext
f860: 5b 5d 20 3d 20 7b 20 22 4e 65 78 74 22 2c 20 22  [] = { "Next", "
f870: 50 72 65 76 22 2c 20 22 56 50 72 65 76 22 2c 20  Prev", "VPrev", 
f880: 22 56 4e 65 78 74 22 2c 20 22 53 6f 72 74 65 72  "VNext", "Sorter
f890: 4e 65 78 74 22 2c 0a 20 20 20 20 20 20 20 20 20  Next",.         
f8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8b0: 20 20 22 4e 65 78 74 49 66 4f 70 65 6e 22 2c 20    "NextIfOpen", 
f8c0: 22 50 72 65 76 49 66 4f 70 65 6e 22 2c 20 30 20  "PrevIfOpen", 0 
f8d0: 7d 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  };.  const char 
f8e0: 2a 61 7a 59 69 65 6c 64 5b 5d 20 3d 20 7b 20 22  *azYield[] = { "
f8f0: 59 69 65 6c 64 22 2c 20 22 53 65 65 6b 4c 54 22  Yield", "SeekLT"
f900: 2c 20 22 53 65 65 6b 47 54 22 2c 20 22 52 6f 77  , "SeekGT", "Row
f910: 53 65 74 52 65 61 64 22 2c 0a 20 20 20 20 20 20  SetRead",.      
f920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f930: 20 20 20 20 20 20 22 52 65 77 69 6e 64 22 2c 20        "Rewind", 
f940: 30 20 7d 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  0 };.  const cha
f950: 72 20 2a 61 7a 47 6f 74 6f 5b 5d 20 3d 20 7b 20  r *azGoto[] = { 
f960: 22 47 6f 74 6f 22 2c 20 30 20 7d 3b 0a 0a 20 20  "Goto", 0 };..  
f970: 2f 2a 20 54 72 79 20 74 6f 20 66 69 67 75 72 65  /* Try to figure
f980: 20 6f 75 74 20 69 66 20 74 68 69 73 20 69 73 20   out if this is 
f990: 72 65 61 6c 6c 79 20 61 6e 20 45 58 50 4c 41 49  really an EXPLAI
f9a0: 4e 20 73 74 61 74 65 6d 65 6e 74 2e 20 49 66 20  N statement. If 
f9b0: 74 68 69 73 0a 20 20 2a 2a 20 63 61 6e 6e 6f 74  this.  ** cannot
f9c0: 20 62 65 20 76 65 72 69 66 69 65 64 2c 20 72 65   be verified, re
f9d0: 74 75 72 6e 20 65 61 72 6c 79 2e 20 20 2a 2f 0a  turn early.  */.
f9e0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 63 6f    if( sqlite3_co
f9f0: 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 71 6c 29  lumn_count(pSql)
fa00: 21 3d 38 20 29 7b 0a 20 20 20 20 70 2d 3e 63 4d  !=8 ){.    p->cM
fa10: 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20  ode = p->mode;. 
fa20: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20     return;.  }. 
fa30: 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f   zSql = sqlite3_
fa40: 73 71 6c 28 70 53 71 6c 29 3b 0a 20 20 69 66 28  sql(pSql);.  if(
fa50: 20 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75 72   zSql==0 ) retur
fa60: 6e 3b 0a 20 20 66 6f 72 28 7a 3d 7a 53 71 6c 3b  n;.  for(z=zSql;
fa70: 20 2a 7a 3d 3d 27 20 27 20 7c 7c 20 2a 7a 3d 3d   *z==' ' || *z==
fa80: 27 5c 74 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 6e 27  '\t' || *z=='\n'
fa90: 20 7c 7c 20 2a 7a 3d 3d 27 5c 66 27 20 7c 7c 20   || *z=='\f' || 
faa0: 2a 7a 3d 3d 27 5c 72 27 3b 20 7a 2b 2b 29 3b 0a  *z=='\r'; z++);.
fab0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
fac0: 72 6e 69 63 6d 70 28 7a 2c 20 22 65 78 70 6c 61  rnicmp(z, "expla
fad0: 69 6e 22 2c 20 37 29 20 29 7b 0a 20 20 20 20 70  in", 7) ){.    p
fae0: 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64  ->cMode = p->mod
faf0: 65 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  e;.    return;. 
fb00: 20 7d 0a 0a 20 20 66 6f 72 28 69 4f 70 3d 30 3b   }..  for(iOp=0;
fb10: 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c   SQLITE_ROW==sql
fb20: 69 74 65 33 5f 73 74 65 70 28 70 53 71 6c 29 3b  ite3_step(pSql);
fb30: 20 69 4f 70 2b 2b 29 7b 0a 20 20 20 20 69 6e 74   iOp++){.    int
fb40: 20 69 3b 0a 20 20 20 20 69 6e 74 20 69 41 64 64   i;.    int iAdd
fb50: 72 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  r = sqlite3_colu
fb60: 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 30 29 3b  mn_int(pSql, 0);
fb70: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
fb80: 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73 74 20 63 68  *zOp = (const ch
fb90: 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
fba0: 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 31 29  mn_text(pSql, 1)
fbb0: 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 70 32  ;..    /* Set p2
fbc0: 20 74 6f 20 74 68 65 20 50 32 20 66 69 65 6c 64   to the P2 field
fbd0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
fbe0: 6f 70 63 6f 64 65 2e 20 54 68 65 6e 2c 20 61 73  opcode. Then, as
fbf0: 73 75 6d 69 6e 67 20 74 68 61 74 0a 20 20 20 20  suming that.    
fc00: 2a 2a 20 70 32 20 69 73 20 61 6e 20 69 6e 73 74  ** p2 is an inst
fc10: 72 75 63 74 69 6f 6e 20 61 64 64 72 65 73 73 2c  ruction address,
fc20: 20 73 65 74 20 76 61 72 69 61 62 6c 65 20 70 32   set variable p2
fc30: 6f 70 20 74 6f 20 74 68 65 20 69 6e 64 65 78 20  op to the index 
fc40: 6f 66 20 74 68 61 74 0a 20 20 20 20 2a 2a 20 69  of that.    ** i
fc50: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
fc60: 65 20 61 69 49 6e 64 65 6e 74 5b 5d 20 61 72 72  e aiIndent[] arr
fc70: 61 79 2e 20 70 32 20 61 6e 64 20 70 32 6f 70 20  ay. p2 and p2op 
fc80: 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e 74  may be different
fc90: 20 69 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 63   if.    ** the c
fca0: 75 72 72 65 6e 74 20 69 6e 73 74 72 75 63 74 69  urrent instructi
fcb0: 6f 6e 20 69 73 20 70 61 72 74 20 6f 66 20 61 20  on is part of a 
fcc0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 67 65 6e 65  sub-program gene
fcd0: 72 61 74 65 64 20 62 79 20 61 6e 0a 20 20 20 20  rated by an.    
fce0: 2a 2a 20 53 51 4c 20 74 72 69 67 67 65 72 20 6f  ** SQL trigger o
fcf0: 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 20 20  r foreign key.  
fd00: 2a 2f 0a 20 20 20 20 69 6e 74 20 70 32 20 3d 20  */.    int p2 = 
fd10: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
fd20: 6e 74 28 70 53 71 6c 2c 20 33 29 3b 0a 20 20 20  nt(pSql, 3);.   
fd30: 20 69 6e 74 20 70 32 6f 70 20 3d 20 28 70 32 20   int p2op = (p2 
fd40: 2b 20 28 69 4f 70 2d 69 41 64 64 72 29 29 3b 0a  + (iOp-iAddr));.
fd50: 0a 20 20 20 20 2f 2a 20 47 72 6f 77 20 74 68 65  .    /* Grow the
fd60: 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20 61 72 72   p->aiIndent arr
fd70: 61 79 20 61 73 20 72 65 71 75 69 72 65 64 20 2a  ay as required *
fd80: 2f 0a 20 20 20 20 69 66 28 20 69 4f 70 3e 3d 6e  /.    if( iOp>=n
fd90: 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 69  Alloc ){.      i
fda0: 66 28 20 69 4f 70 3d 3d 30 20 29 7b 0a 20 20 20  f( iOp==0 ){.   
fdb0: 20 20 20 20 20 2f 2a 20 44 6f 20 66 75 72 74 68       /* Do furth
fdc0: 65 72 20 76 65 72 66 69 63 61 74 69 6f 6e 20 74  er verfication t
fdd0: 68 61 74 20 74 68 69 73 20 69 73 20 65 78 70 6c  hat this is expl
fde0: 61 69 6e 20 6f 75 74 70 75 74 2e 20 20 41 62 6f  ain output.  Abo
fdf0: 72 74 20 69 66 0a 20 20 20 20 20 20 20 20 2a 2a  rt if.        **
fe00: 20 69 74 20 69 73 20 6e 6f 74 20 2a 2f 0a 20 20   it is not */.  
fe10: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
fe20: 73 74 20 63 68 61 72 20 2a 65 78 70 6c 61 69 6e  st char *explain
fe30: 43 6f 6c 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Cols[] = {.     
fe40: 20 20 20 20 20 20 22 61 64 64 72 22 2c 20 22 6f        "addr", "o
fe50: 70 63 6f 64 65 22 2c 20 22 70 31 22 2c 20 22 70  pcode", "p1", "p
fe60: 32 22 2c 20 22 70 33 22 2c 20 22 70 34 22 2c 20  2", "p3", "p4", 
fe70: 22 70 35 22 2c 20 22 63 6f 6d 6d 65 6e 74 22 20  "p5", "comment" 
fe80: 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6a  };.        int j
fe90: 6a 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  j;.        for(j
fea0: 6a 3d 30 3b 20 6a 6a 3c 41 72 72 61 79 53 69 7a  j=0; jj<ArraySiz
feb0: 65 28 65 78 70 6c 61 69 6e 43 6f 6c 73 29 3b 20  e(explainCols); 
fec0: 6a 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  jj++){.         
fed0: 20 69 66 28 20 73 74 72 63 6d 70 28 73 71 6c 69   if( strcmp(sqli
fee0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28  te3_column_name(
fef0: 70 53 71 6c 2c 6a 6a 29 2c 65 78 70 6c 61 69 6e  pSql,jj),explain
ff00: 43 6f 6c 73 5b 6a 6a 5d 29 21 3d 30 20 29 7b 0a  Cols[jj])!=0 ){.
ff10: 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 63              p->c
ff20: 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a  Mode = p->mode;.
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
ff40: 74 65 33 5f 72 65 73 65 74 28 70 53 71 6c 29 3b  te3_reset(pSql);
ff50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
ff60: 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  urn;.          }
ff70: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
ff80: 20 7d 0a 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20   }.      nAlloc 
ff90: 2b 3d 20 31 30 30 3b 0a 20 20 20 20 20 20 70 2d  += 100;.      p-
ffa0: 3e 61 69 49 6e 64 65 6e 74 20 3d 20 28 69 6e 74  >aiIndent = (int
ffb0: 2a 29 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f  *)sqlite3_reallo
ffc0: 63 36 34 28 70 2d 3e 61 69 49 6e 64 65 6e 74 2c  c64(p->aiIndent,
ffd0: 20 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f 66 28 69   nAlloc*sizeof(i
ffe0: 6e 74 29 29 3b 0a 20 20 20 20 20 20 61 62 59 69  nt));.      abYi
fff0: 65 6c 64 20 3d 20 28 69 6e 74 2a 29 73 71 6c 69  eld = (int*)sqli
10000 74 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 61 62  te3_realloc64(ab
10010 59 69 65 6c 64 2c 20 6e 41 6c 6c 6f 63 2a 73 69  Yield, nAlloc*si
10020 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20  zeof(int));.    
10030 7d 0a 20 20 20 20 61 62 59 69 65 6c 64 5b 69 4f  }.    abYield[iO
10040 70 5d 20 3d 20 73 74 72 5f 69 6e 5f 61 72 72 61  p] = str_in_arra
10050 79 28 7a 4f 70 2c 20 61 7a 59 69 65 6c 64 29 3b  y(zOp, azYield);
10060 0a 20 20 20 20 70 2d 3e 61 69 49 6e 64 65 6e 74  .    p->aiIndent
10070 5b 69 4f 70 5d 20 3d 20 30 3b 0a 20 20 20 20 70  [iOp] = 0;.    p
10080 2d 3e 6e 49 6e 64 65 6e 74 20 3d 20 69 4f 70 2b  ->nIndent = iOp+
10090 31 3b 0a 0a 20 20 20 20 69 66 28 20 73 74 72 5f  1;..    if( str_
100a0 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c 20 61 7a  in_array(zOp, az
100b0 4e 65 78 74 29 20 29 7b 0a 20 20 20 20 20 20 66  Next) ){.      f
100c0 6f 72 28 69 3d 70 32 6f 70 3b 20 69 3c 69 4f 70  or(i=p2op; i<iOp
100d0 3b 20 69 2b 2b 29 20 70 2d 3e 61 69 49 6e 64 65  ; i++) p->aiInde
100e0 6e 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20 20 20 20  nt[i] += 2;.    
100f0 7d 0a 20 20 20 20 69 66 28 20 73 74 72 5f 69 6e  }.    if( str_in
10100 5f 61 72 72 61 79 28 7a 4f 70 2c 20 61 7a 47 6f  _array(zOp, azGo
10110 74 6f 29 20 26 26 20 70 32 6f 70 3c 70 2d 3e 6e  to) && p2op<p->n
10120 49 6e 64 65 6e 74 0a 20 20 20 20 20 26 26 20 28  Indent.     && (
10130 61 62 59 69 65 6c 64 5b 70 32 6f 70 5d 20 7c 7c  abYield[p2op] ||
10140 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
10150 69 6e 74 28 70 53 71 6c 2c 20 32 29 29 0a 20 20  int(pSql, 2)).  
10160 20 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69    ){.      for(i
10170 3d 70 32 6f 70 3b 20 69 3c 69 4f 70 3b 20 69 2b  =p2op; i<iOp; i+
10180 2b 29 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b 69  +) p->aiIndent[i
10190 5d 20 2b 3d 20 32 3b 0a 20 20 20 20 7d 0a 20 20  ] += 2;.    }.  
101a0 7d 0a 0a 20 20 70 2d 3e 69 49 6e 64 65 6e 74 20  }..  p->iIndent 
101b0 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66  = 0;.  sqlite3_f
101c0 72 65 65 28 61 62 59 69 65 6c 64 29 3b 0a 20 20  ree(abYield);.  
101d0 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 53  sqlite3_reset(pS
101e0 71 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72  ql);.}../*.** Fr
101f0 65 65 20 74 68 65 20 61 72 72 61 79 20 61 6c 6c  ee the array all
10200 6f 63 61 74 65 64 20 62 79 20 65 78 70 6c 61 69  ocated by explai
10210 6e 5f 64 61 74 61 5f 70 72 65 70 61 72 65 28 29  n_data_prepare()
10220 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
10230 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f 64 65   explain_data_de
10240 6c 65 74 65 28 53 68 65 6c 6c 53 74 61 74 65 20  lete(ShellState 
10250 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  *p){.  sqlite3_f
10260 72 65 65 28 70 2d 3e 61 69 49 6e 64 65 6e 74 29  ree(p->aiIndent)
10270 3b 0a 20 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20  ;.  p->aiIndent 
10280 3d 20 30 3b 0a 20 20 70 2d 3e 6e 49 6e 64 65 6e  = 0;.  p->nInden
10290 74 20 3d 20 30 3b 0a 20 20 70 2d 3e 69 49 6e 64  t = 0;.  p->iInd
102a0 65 6e 74 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  ent = 0;.}../*.*
102b0 2a 20 44 69 73 61 62 6c 65 20 61 6e 64 20 72 65  * Disable and re
102c0 73 74 6f 72 65 20 2e 77 68 65 72 65 74 72 61 63  store .wheretrac
102d0 65 20 61 6e 64 20 2e 73 65 6c 65 63 74 74 72 61  e and .selecttra
102e0 63 65 20 73 65 74 74 69 6e 67 73 2e 0a 2a 2f 0a  ce settings..*/.
102f0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
10300 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65 66  TE_DEBUG) && def
10310 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
10320 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
10330 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
10340 65 33 53 65 6c 65 63 74 54 72 61 63 65 3b 0a 73  e3SelectTrace;.s
10350 74 61 74 69 63 20 69 6e 74 20 73 61 76 65 64 53  tatic int savedS
10360 65 6c 65 63 74 54 72 61 63 65 3b 0a 23 65 6e 64  electTrace;.#end
10370 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
10380 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
10390 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
103a0 4e 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45  NABLE_WHERETRACE
103b0 29 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  ).extern int sql
103c0 69 74 65 33 57 68 65 72 65 54 72 61 63 65 3b 0a  ite3WhereTrace;.
103d0 73 74 61 74 69 63 20 69 6e 74 20 73 61 76 65 64  static int saved
103e0 57 68 65 72 65 54 72 61 63 65 3b 0a 23 65 6e 64  WhereTrace;.#end
103f0 69 66 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64  if.static void d
10400 69 73 61 62 6c 65 5f 64 65 62 75 67 5f 74 72 61  isable_debug_tra
10410 63 65 5f 6d 6f 64 65 73 28 76 6f 69 64 29 7b 0a  ce_modes(void){.
10420 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
10430 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65 66  TE_DEBUG) && def
10440 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
10450 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
10460 20 20 73 61 76 65 64 53 65 6c 65 63 74 54 72 61    savedSelectTra
10470 63 65 20 3d 20 73 71 6c 69 74 65 33 53 65 6c 65  ce = sqlite3Sele
10480 63 74 54 72 61 63 65 3b 0a 20 20 73 71 6c 69 74  ctTrace;.  sqlit
10490 65 33 53 65 6c 65 63 74 54 72 61 63 65 20 3d 20  e3SelectTrace = 
104a0 30 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  0;.#endif.#if de
104b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
104c0 55 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  UG) && defined(S
104d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 57 48 45  QLITE_ENABLE_WHE
104e0 52 45 54 52 41 43 45 29 0a 20 20 73 61 76 65 64  RETRACE).  saved
104f0 57 68 65 72 65 54 72 61 63 65 20 3d 20 73 71 6c  WhereTrace = sql
10500 69 74 65 33 57 68 65 72 65 54 72 61 63 65 3b 0a  ite3WhereTrace;.
10510 20 20 73 71 6c 69 74 65 33 57 68 65 72 65 54 72    sqlite3WhereTr
10520 61 63 65 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  ace = 0;.#endif.
10530 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65  }.static void re
10540 73 74 6f 72 65 5f 64 65 62 75 67 5f 74 72 61 63  store_debug_trac
10550 65 5f 6d 6f 64 65 73 28 76 6f 69 64 29 7b 0a 23  e_modes(void){.#
10560 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
10570 45 5f 44 45 42 55 47 29 20 26 26 20 64 65 66 69  E_DEBUG) && defi
10580 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
10590 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a 20  E_SELECTTRACE). 
105a0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 54 72   sqlite3SelectTr
105b0 61 63 65 20 3d 20 73 61 76 65 64 53 65 6c 65 63  ace = savedSelec
105c0 74 54 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23  tTrace;.#endif.#
105d0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
105e0 45 5f 44 45 42 55 47 29 20 26 26 20 64 65 66 69  E_DEBUG) && defi
105f0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
10600 45 5f 57 48 45 52 45 54 52 41 43 45 29 0a 20 20  E_WHERETRACE).  
10610 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61 63  sqlite3WhereTrac
10620 65 20 3d 20 73 61 76 65 64 57 68 65 72 65 54 72  e = savedWhereTr
10630 61 63 65 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f  ace;.#endif.}../
10640 2a 0a 2a 2a 20 52 75 6e 20 61 20 70 72 65 70 61  *.** Run a prepa
10650 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2f  red statement.*/
10660 0a 73 74 61 74 69 63 20 76 6f 69 64 20 65 78 65  .static void exe
10670 63 5f 70 72 65 70 61 72 65 64 5f 73 74 6d 74 28  c_prepared_stmt(
10680 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
10690 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20  Arg,            
106a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106b0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
106c0 6f 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a  o ShellState */.
106d0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
106e0 70 53 74 6d 74 2c 20 20 20 20 20 20 20 20 20 20  pStmt,          
106f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10700 20 20 20 2f 2a 20 53 74 61 74 6d 65 6e 74 20 74     /* Statment t
10710 6f 20 72 75 6e 20 2a 2f 0a 20 20 69 6e 74 20 28  o run */.  int (
10720 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  *xCallback)(void
10730 2a 2c 69 6e 74 2c 63 68 61 72 2a 2a 2c 63 68 61  *,int,char**,cha
10740 72 2a 2a 2c 69 6e 74 2a 29 20 20 20 2f 2a 20 43  r**,int*)   /* C
10750 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
10760 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b   */.){.  int rc;
10770 0a 0a 20 20 2f 2a 20 70 65 72 66 6f 72 6d 20 74  ..  /* perform t
10780 68 65 20 66 69 72 73 74 20 73 74 65 70 2e 20 20  he first step.  
10790 74 68 69 73 20 77 69 6c 6c 20 74 65 6c 6c 20 75  this will tell u
107a0 73 20 69 66 20 77 65 0a 20 20 2a 2a 20 68 61 76  s if we.  ** hav
107b0 65 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 6f  e a result set o
107c0 72 20 6e 6f 74 20 61 6e 64 20 68 6f 77 20 77 69  r not and how wi
107d0 64 65 20 69 74 20 69 73 2e 0a 20 20 2a 2f 0a 20  de it is..  */. 
107e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74   rc = sqlite3_st
107f0 65 70 28 70 53 74 6d 74 29 3b 0a 20 20 2f 2a 20  ep(pStmt);.  /* 
10800 69 66 20 77 65 20 68 61 76 65 20 61 20 72 65 73  if we have a res
10810 75 6c 74 20 73 65 74 2e 2e 2e 20 2a 2f 0a 20 20  ult set... */.  
10820 69 66 28 20 53 51 4c 49 54 45 5f 52 4f 57 20 3d  if( SQLITE_ROW =
10830 3d 20 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 69  = rc ){.    /* i
10840 66 20 77 65 20 68 61 76 65 20 61 20 63 61 6c 6c  f we have a call
10850 62 61 63 6b 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69  back... */.    i
10860 66 28 20 78 43 61 6c 6c 62 61 63 6b 20 29 7b 0a  f( xCallback ){.
10870 20 20 20 20 20 20 2f 2a 20 61 6c 6c 6f 63 61 74        /* allocat
10880 65 20 73 70 61 63 65 20 66 6f 72 20 63 6f 6c 20  e space for col 
10890 6e 61 6d 65 20 70 74 72 2c 20 76 61 6c 75 65 20  name ptr, value 
108a0 70 74 72 2c 20 61 6e 64 20 74 79 70 65 20 2a 2f  ptr, and type */
108b0 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6c 20  .      int nCol 
108c0 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
108d0 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b 0a 20  _count(pStmt);. 
108e0 20 20 20 20 20 76 6f 69 64 20 2a 70 44 61 74 61       void *pData
108f0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f   = sqlite3_mallo
10900 63 36 34 28 33 2a 6e 43 6f 6c 2a 73 69 7a 65 6f  c64(3*nCol*sizeo
10910 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 20 2b  f(const char*) +
10920 20 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21   1);.      if( !
10930 70 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20  pData ){.       
10940 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
10950 45 4d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  EM;.      }else{
10960 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 2a  .        char **
10970 61 7a 43 6f 6c 73 20 3d 20 28 63 68 61 72 20 2a  azCols = (char *
10980 2a 29 70 44 61 74 61 3b 20 20 20 20 20 20 2f 2a  *)pData;      /*
10990 20 4e 61 6d 65 73 20 6f 66 20 72 65 73 75 6c 74   Names of result
109a0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20 20   columns */.    
109b0 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 6c      char **azVal
109c0 73 20 3d 20 26 61 7a 43 6f 6c 73 5b 6e 43 6f 6c  s = &azCols[nCol
109d0 5d 3b 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75  ];       /* Resu
109e0 6c 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  lts */.        i
109f0 6e 74 20 2a 61 69 54 79 70 65 73 20 3d 20 28 69  nt *aiTypes = (i
10a00 6e 74 20 2a 29 26 61 7a 56 61 6c 73 5b 6e 43 6f  nt *)&azVals[nCo
10a10 6c 5d 3b 20 2f 2a 20 52 65 73 75 6c 74 20 74 79  l]; /* Result ty
10a20 70 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  pes */.        i
10a30 6e 74 20 69 2c 20 78 3b 0a 20 20 20 20 20 20 20  nt i, x;.       
10a40 20 61 73 73 65 72 74 28 73 69 7a 65 6f 66 28 69   assert(sizeof(i
10a50 6e 74 29 20 3c 3d 20 73 69 7a 65 6f 66 28 63 68  nt) <= sizeof(ch
10a60 61 72 20 2a 29 29 3b 0a 20 20 20 20 20 20 20 20  ar *));.        
10a70 2f 2a 20 73 61 76 65 20 6f 66 66 20 70 74 72 73  /* save off ptrs
10a80 20 74 6f 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73   to column names
10a90 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28   */.        for(
10aa0 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b  i=0; i<nCol; i++
10ab0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 7a 43  ){.          azC
10ac0 6f 6c 73 5b 69 5d 20 3d 20 28 63 68 61 72 20 2a  ols[i] = (char *
10ad0 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
10ae0 6e 61 6d 65 28 70 53 74 6d 74 2c 20 69 29 3b 0a  name(pStmt, i);.
10af0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
10b00 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 20 20    do{.          
10b10 2f 2a 20 65 78 74 72 61 63 74 20 74 68 65 20 64  /* extract the d
10b20 61 74 61 20 61 6e 64 20 64 61 74 61 20 74 79 70  ata and data typ
10b30 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  es */.          
10b40 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b  for(i=0; i<nCol;
10b50 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
10b60 20 20 20 61 69 54 79 70 65 73 5b 69 5d 20 3d 20     aiTypes[i] = 
10b70 78 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  x = sqlite3_colu
10b80 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74 2c 20 69  mn_type(pStmt, i
10b90 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
10ba0 66 28 20 78 3d 3d 53 51 4c 49 54 45 5f 42 4c 4f  f( x==SQLITE_BLO
10bb0 42 20 26 26 20 70 41 72 67 20 26 26 20 70 41 72  B && pArg && pAr
10bc0 67 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f 49  g->cMode==MODE_I
10bd0 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 20 20 20  nsert ){.       
10be0 20 20 20 20 20 20 20 61 7a 56 61 6c 73 5b 69 5d         azVals[i]
10bf0 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20 20   = "";.         
10c00 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10c10 20 20 20 20 20 20 20 20 61 7a 56 61 6c 73 5b 69          azVals[i
10c20 5d 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74  ] = (char*)sqlit
10c30 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
10c40 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20  Stmt, i);.      
10c50 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
10c60 20 20 20 20 69 66 28 20 21 61 7a 56 61 6c 73 5b      if( !azVals[
10c70 69 5d 20 26 26 20 28 61 69 54 79 70 65 73 5b 69  i] && (aiTypes[i
10c80 5d 21 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 29 20  ]!=SQLITE_NULL) 
10c90 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
10ca0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
10cb0 45 4d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  EM;.            
10cc0 20 20 62 72 65 61 6b 3b 20 2f 2a 20 66 72 6f 6d    break; /* from
10cd0 20 66 6f 72 20 2a 2f 0a 20 20 20 20 20 20 20 20   for */.        
10ce0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
10cf0 7d 20 2f 2a 20 65 6e 64 20 66 6f 72 20 2a 2f 0a  } /* end for */.
10d00 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 66  .          /* if
10d10 20 64 61 74 61 20 61 6e 64 20 74 79 70 65 73 20   data and types 
10d20 65 78 74 72 61 63 74 65 64 20 73 75 63 63 65 73  extracted succes
10d30 73 66 75 6c 6c 79 2e 2e 2e 20 2a 2f 0a 20 20 20  sfully... */.   
10d40 20 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54         if( SQLIT
10d50 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29 7b 0a 20  E_ROW == rc ){. 
10d60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 61             /* ca
10d70 6c 6c 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  ll the supplied 
10d80 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68  callback with th
10d90 65 20 72 65 73 75 6c 74 20 72 6f 77 20 64 61 74  e result row dat
10da0 61 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  a */.           
10db0 20 69 66 28 20 78 43 61 6c 6c 62 61 63 6b 28 70   if( xCallback(p
10dc0 41 72 67 2c 20 6e 43 6f 6c 2c 20 61 7a 56 61 6c  Arg, nCol, azVal
10dd0 73 2c 20 61 7a 43 6f 6c 73 2c 20 61 69 54 79 70  s, azCols, aiTyp
10de0 65 73 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  es) ){.         
10df0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
10e00 5f 41 42 4f 52 54 3b 0a 20 20 20 20 20 20 20 20  _ABORT;.        
10e10 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10e20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
10e30 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
10e40 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
10e50 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
10e60 20 20 20 20 20 7d 20 77 68 69 6c 65 28 20 53 51       } while( SQ
10e70 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29  LITE_ROW == rc )
10e80 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10e90 33 5f 66 72 65 65 28 70 44 61 74 61 29 3b 0a 20  3_free(pData);. 
10ea0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
10eb0 7b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20  {.      do{.    
10ec0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
10ed0 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20  _step(pStmt);.  
10ee0 20 20 20 20 7d 20 77 68 69 6c 65 28 20 72 63 20      } while( rc 
10ef0 3d 3d 20 53 51 4c 49 54 45 5f 52 4f 57 20 29 3b  == SQLITE_ROW );
10f00 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a  .    }.  }.}../*
10f10 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
10f20 6e 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 70  n is called to p
10f30 72 6f 63 65 73 73 20 53 51 4c 20 69 66 20 74 68  rocess SQL if th
10f40 65 20 70 72 65 76 69 6f 75 73 20 73 68 65 6c 6c  e previous shell
10f50 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 77 61 73 20   command.** was 
10f60 22 2e 65 78 70 65 72 74 22 2e 20 49 74 20 70 61  ".expert". It pa
10f70 73 73 65 73 20 74 68 65 20 53 51 4c 20 69 6e 20  sses the SQL in 
10f80 74 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d  the second argum
10f90 65 6e 74 20 64 69 72 65 63 74 6c 79 20 74 6f 0a  ent directly to.
10fa0 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 65 78  ** the sqlite3ex
10fb0 70 65 72 74 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a  pert object..**.
10fc0 2a 2a 20 49 66 20 73 75 63 63 65 73 73 66 75 6c  ** If successful
10fd0 2c 20 53 51 4c 49 54 45 5f 4f 4b 20 69 73 20 72  , SQLITE_OK is r
10fe0 65 74 75 72 6e 65 64 2e 20 4f 74 68 65 72 77 69  eturned. Otherwi
10ff0 73 65 2c 20 61 6e 20 53 51 4c 69 74 65 20 65 72  se, an SQLite er
11000 72 6f 72 0a 2a 2a 20 63 6f 64 65 2e 20 49 6e 20  ror.** code. In 
11010 74 68 69 73 20 63 61 73 65 2c 20 28 2a 70 7a 45  this case, (*pzE
11020 72 72 29 20 6d 61 79 20 62 65 20 73 65 74 20 74  rr) may be set t
11030 6f 20 70 6f 69 6e 74 20 74 6f 20 61 20 62 75 66  o point to a buf
11040 66 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a  fer containing.*
11050 2a 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e  * an English lan
11060 67 75 61 67 65 20 65 72 72 6f 72 20 6d 65 73 73  guage error mess
11070 61 67 65 2e 20 49 74 20 69 73 20 74 68 65 20 72  age. It is the r
11080 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 20 6f 66  esponsibility of
11090 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 65 72 20 74   the.** caller t
110a0 6f 20 65 76 65 6e 74 75 61 6c 6c 79 20 66 72 65  o eventually fre
110b0 65 20 74 68 69 73 20 62 75 66 66 65 72 20 75 73  e this buffer us
110c0 69 6e 67 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ing sqlite3_free
110d0 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ()..*/.static in
110e0 74 20 65 78 70 65 72 74 48 61 6e 64 6c 65 53 51  t expertHandleSQ
110f0 4c 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  L(.  ShellState 
11100 2a 70 53 74 61 74 65 2c 20 0a 20 20 63 6f 6e 73  *pState, .  cons
11110 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 0a 20  t char *zSql, . 
11120 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 0a 29 7b   char **pzErr.){
11130 0a 20 20 61 73 73 65 72 74 28 20 70 53 74 61 74  .  assert( pStat
11140 65 2d 3e 65 78 70 65 72 74 2e 70 45 78 70 65 72  e->expert.pExper
11150 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
11160 7a 45 72 72 3d 3d 30 20 7c 7c 20 2a 70 7a 45 72  zErr==0 || *pzEr
11170 72 3d 3d 30 20 29 3b 0a 20 20 72 65 74 75 72 6e  r==0 );.  return
11180 20 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f   sqlite3_expert_
11190 73 71 6c 28 70 53 74 61 74 65 2d 3e 65 78 70 65  sql(pState->expe
111a0 72 74 2e 70 45 78 70 65 72 74 2c 20 7a 53 71 6c  rt.pExpert, zSql
111b0 2c 20 70 7a 45 72 72 29 3b 0a 7d 0a 0a 2f 2a 0a  , pzErr);.}../*.
111c0 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
111d0 20 69 73 20 63 61 6c 6c 65 64 20 65 69 74 68 65   is called eithe
111e0 72 20 74 6f 20 73 69 6c 65 6e 74 6c 79 20 63 6c  r to silently cl
111f0 65 61 6e 20 75 70 20 74 68 65 20 6f 62 6a 65 63  ean up the objec
11200 74 0a 2a 2a 20 63 72 65 61 74 65 64 20 62 79 20  t.** created by 
11210 74 68 65 20 22 2e 65 78 70 65 72 74 22 20 63 6f  the ".expert" co
11220 6d 6d 61 6e 64 20 28 69 66 20 62 43 61 6e 63 65  mmand (if bCance
11230 6c 3d 3d 31 29 2c 20 6f 72 20 74 6f 20 67 65 6e  l==1), or to gen
11240 65 72 61 74 65 20 61 20 0a 2a 2a 20 72 65 70 6f  erate a .** repo
11250 72 74 20 66 72 6f 6d 20 69 74 20 61 6e 64 20 74  rt from it and t
11260 68 65 6e 20 63 6c 65 61 6e 20 69 74 20 75 70 20  hen clean it up 
11270 28 69 66 20 62 43 61 6e 63 65 6c 3d 3d 30 29 2e  (if bCancel==0).
11280 0a 2a 2a 0a 2a 2a 20 49 66 20 73 75 63 63 65 73  .**.** If succes
11290 73 66 75 6c 2c 20 53 51 4c 49 54 45 5f 4f 4b 20  sful, SQLITE_OK 
112a0 69 73 20 72 65 74 75 72 6e 65 64 2e 20 4f 74 68  is returned. Oth
112b0 65 72 77 69 73 65 2c 20 61 6e 20 53 51 4c 69 74  erwise, an SQLit
112c0 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 2e  e error.** code.
112d0 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 28   In this case, (
112e0 2a 70 7a 45 72 72 29 20 6d 61 79 20 62 65 20 73  *pzErr) may be s
112f0 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 61  et to point to a
11300 20 62 75 66 66 65 72 20 63 6f 6e 74 61 69 6e 69   buffer containi
11310 6e 67 0a 2a 2a 20 61 6e 20 45 6e 67 6c 69 73 68  ng.** an English
11320 20 6c 61 6e 67 75 61 67 65 20 65 72 72 6f 72 20   language error 
11330 6d 65 73 73 61 67 65 2e 20 49 74 20 69 73 20 74  message. It is t
11340 68 65 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74  he responsibilit
11350 79 20 6f 66 20 74 68 65 0a 2a 2a 20 63 61 6c 6c  y of the.** call
11360 65 72 20 74 6f 20 65 76 65 6e 74 75 61 6c 6c 79  er to eventually
11370 20 66 72 65 65 20 74 68 69 73 20 62 75 66 66 65   free this buffe
11380 72 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  r using sqlite3_
11390 66 72 65 65 28 29 2e 0a 2a 2f 0a 73 74 61 74 69  free()..*/.stati
113a0 63 20 69 6e 74 20 65 78 70 65 72 74 46 69 6e 69  c int expertFini
113b0 73 68 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65  sh(.  ShellState
113c0 20 2a 70 53 74 61 74 65 2c 0a 20 20 69 6e 74 20   *pState,.  int 
113d0 62 43 61 6e 63 65 6c 2c 0a 20 20 63 68 61 72 20  bCancel,.  char 
113e0 2a 2a 70 7a 45 72 72 0a 29 7b 0a 20 20 69 6e 74  **pzErr.){.  int
113f0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
11400 0a 20 20 73 71 6c 69 74 65 33 65 78 70 65 72 74  .  sqlite3expert
11410 20 2a 70 20 3d 20 70 53 74 61 74 65 2d 3e 65 78   *p = pState->ex
11420 70 65 72 74 2e 70 45 78 70 65 72 74 3b 0a 20 20  pert.pExpert;.  
11430 61 73 73 65 72 74 28 20 70 20 29 3b 0a 20 20 61  assert( p );.  a
11440 73 73 65 72 74 28 20 62 43 61 6e 63 65 6c 20 7c  ssert( bCancel |
11450 7c 20 70 7a 45 72 72 3d 3d 30 20 7c 7c 20 2a 70  | pzErr==0 || *p
11460 7a 45 72 72 3d 3d 30 20 29 3b 0a 20 20 69 66 28  zErr==0 );.  if(
11470 20 62 43 61 6e 63 65 6c 3d 3d 30 20 29 7b 0a 20   bCancel==0 ){. 
11480 20 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20 70     FILE *out = p
11490 53 74 61 74 65 2d 3e 6f 75 74 3b 0a 20 20 20 20  State->out;.    
114a0 69 6e 74 20 62 56 65 72 62 6f 73 65 20 3d 20 70  int bVerbose = p
114b0 53 74 61 74 65 2d 3e 65 78 70 65 72 74 2e 62 56  State->expert.bV
114c0 65 72 62 6f 73 65 3b 0a 0a 20 20 20 20 72 63 20  erbose;..    rc 
114d0 3d 20 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74  = sqlite3_expert
114e0 5f 61 6e 61 6c 79 7a 65 28 70 2c 20 70 7a 45 72  _analyze(p, pzEr
114f0 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  r);.    if( rc==
11500 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
11510 20 20 20 69 6e 74 20 6e 51 75 65 72 79 20 3d 20     int nQuery = 
11520 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f 63  sqlite3_expert_c
11530 6f 75 6e 74 28 70 29 3b 0a 20 20 20 20 20 20 69  ount(p);.      i
11540 6e 74 20 69 3b 0a 0a 20 20 20 20 20 20 69 66 28  nt i;..      if(
11550 20 62 56 65 72 62 6f 73 65 20 29 7b 0a 20 20 20   bVerbose ){.   
11560 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
11570 2a 7a 43 61 6e 64 20 3d 20 73 71 6c 69 74 65 33  *zCand = sqlite3
11580 5f 65 78 70 65 72 74 5f 72 65 70 6f 72 74 28 70  _expert_report(p
11590 2c 30 2c 45 58 50 45 52 54 5f 52 45 50 4f 52 54  ,0,EXPERT_REPORT
115a0 5f 43 41 4e 44 49 44 41 54 45 53 29 3b 0a 20 20  _CANDIDATES);.  
115b0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
115c0 28 6f 75 74 2c 20 22 2d 2d 20 43 61 6e 64 69 64  (out, "-- Candid
115d0 61 74 65 73 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ates -----------
115e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
115f0 2d 2d 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  --\n");.        
11600 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  raw_printf(out, 
11610 22 25 73 5c 6e 22 2c 20 7a 43 61 6e 64 29 3b 0a  "%s\n", zCand);.
11620 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f        }.      fo
11630 72 28 69 3d 30 3b 20 69 3c 6e 51 75 65 72 79 3b  r(i=0; i<nQuery;
11640 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63   i++){.        c
11650 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 20  onst char *zSql 
11660 3d 20 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74  = sqlite3_expert
11670 5f 72 65 70 6f 72 74 28 70 2c 20 69 2c 20 45 58  _report(p, i, EX
11680 50 45 52 54 5f 52 45 50 4f 52 54 5f 53 51 4c 29  PERT_REPORT_SQL)
11690 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  ;.        const 
116a0 63 68 61 72 20 2a 7a 49 64 78 20 3d 20 73 71 6c  char *zIdx = sql
116b0 69 74 65 33 5f 65 78 70 65 72 74 5f 72 65 70 6f  ite3_expert_repo
116c0 72 74 28 70 2c 20 69 2c 20 45 58 50 45 52 54 5f  rt(p, i, EXPERT_
116d0 52 45 50 4f 52 54 5f 49 4e 44 45 58 45 53 29 3b  REPORT_INDEXES);
116e0 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
116f0 68 61 72 20 2a 7a 45 51 50 20 3d 20 73 71 6c 69  har *zEQP = sqli
11700 74 65 33 5f 65 78 70 65 72 74 5f 72 65 70 6f 72  te3_expert_repor
11710 74 28 70 2c 20 69 2c 20 45 58 50 45 52 54 5f 52  t(p, i, EXPERT_R
11720 45 50 4f 52 54 5f 50 4c 41 4e 29 3b 0a 20 20 20  EPORT_PLAN);.   
11730 20 20 20 20 20 69 66 28 20 7a 49 64 78 3d 3d 30       if( zIdx==0
11740 20 29 20 7a 49 64 78 20 3d 20 22 28 6e 6f 20 6e   ) zIdx = "(no n
11750 65 77 20 69 6e 64 65 78 65 73 29 5c 6e 22 3b 0a  ew indexes)\n";.
11760 20 20 20 20 20 20 20 20 69 66 28 20 62 56 65 72          if( bVer
11770 62 6f 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20  bose ){.        
11780 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
11790 2c 20 22 2d 2d 20 51 75 65 72 79 20 25 64 20 2d  , "-- Query %d -
117a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
117b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c  ---------------\
117c0 6e 22 2c 69 2b 31 29 3b 0a 20 20 20 20 20 20 20  n",i+1);.       
117d0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
117e0 74 2c 20 22 25 73 5c 6e 5c 6e 22 2c 20 7a 53 71  t, "%s\n\n", zSq
117f0 6c 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  l);.        }.  
11800 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
11810 28 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 49  (out, "%s\n", zI
11820 64 78 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77  dx);.        raw
11830 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73  _printf(out, "%s
11840 5c 6e 22 2c 20 7a 45 51 50 29 3b 0a 20 20 20 20  \n", zEQP);.    
11850 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
11860 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f 64  sqlite3_expert_d
11870 65 73 74 72 6f 79 28 70 29 3b 0a 20 20 70 53 74  estroy(p);.  pSt
11880 61 74 65 2d 3e 65 78 70 65 72 74 2e 70 45 78 70  ate->expert.pExp
11890 65 72 74 20 3d 20 30 3b 0a 20 20 72 65 74 75 72  ert = 0;.  retur
118a0 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  n rc;.}.../*.** 
118b0 45 78 65 63 75 74 65 20 61 20 73 74 61 74 65 6d  Execute a statem
118c0 65 6e 74 20 6f 72 20 73 65 74 20 6f 66 20 73 74  ent or set of st
118d0 61 74 65 6d 65 6e 74 73 2e 20 20 50 72 69 6e 74  atements.  Print
118e0 0a 2a 2a 20 61 6e 79 20 72 65 73 75 6c 74 20 72  .** any result r
118f0 6f 77 73 2f 63 6f 6c 75 6d 6e 73 20 64 65 70 65  ows/columns depe
11900 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 63 75 72  nding on the cur
11910 72 65 6e 74 20 6d 6f 64 65 0a 2a 2a 20 73 65 74  rent mode.** set
11920 20 76 69 61 20 74 68 65 20 73 75 70 70 6c 69 65   via the supplie
11930 64 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 0a 2a  d callback..**.*
11940 2a 20 54 68 69 73 20 69 73 20 76 65 72 79 20 73  * This is very s
11950 69 6d 69 6c 61 72 20 74 6f 20 53 51 4c 69 74 65  imilar to SQLite
11960 27 73 20 62 75 69 6c 74 2d 69 6e 20 73 71 6c 69  's built-in sqli
11970 74 65 33 5f 65 78 65 63 28 29 0a 2a 2a 20 66 75  te3_exec().** fu
11980 6e 63 74 69 6f 6e 20 65 78 63 65 70 74 20 69 74  nction except it
11990 20 74 61 6b 65 73 20 61 20 73 6c 69 67 68 74 6c   takes a slightl
119a0 79 20 64 69 66 66 65 72 65 6e 74 20 63 61 6c 6c  y different call
119b0 62 61 63 6b 0a 2a 2a 20 61 6e 64 20 63 61 6c 6c  back.** and call
119c0 62 61 63 6b 20 64 61 74 61 20 61 72 67 75 6d 65  back data argume
119d0 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nt..*/.static in
119e0 74 20 73 68 65 6c 6c 5f 65 78 65 63 28 0a 20 20  t shell_exec(.  
119f0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20            /* An 
11a20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 2a 2f  open database */
11a30 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
11a40 53 71 6c 2c 20 20 20 20 20 20 20 20 20 20 20 20  Sql,            
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11a60 53 51 4c 20 74 6f 20 62 65 20 65 76 61 6c 75 61  SQL to be evalua
11a70 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  ted */.  int (*x
11a80 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
11a90 69 6e 74 2c 63 68 61 72 2a 2a 2c 63 68 61 72 2a  int,char**,char*
11aa0 2a 2c 69 6e 74 2a 29 2c 20 20 20 2f 2a 20 43 61  *,int*),   /* Ca
11ab0 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20  llback function 
11ac0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11af0 2a 20 28 6e 6f 74 20 74 68 65 20 73 61 6d 65 20  * (not the same 
11b00 61 73 20 73 71 6c 69 74 65 33 5f 65 78 65 63 29  as sqlite3_exec)
11b10 20 2a 2f 0a 20 20 53 68 65 6c 6c 53 74 61 74 65   */.  ShellState
11b20 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20 20   *pArg,         
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b40 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 68  /* Pointer to Sh
11b50 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 20 20 63 68  ellState */.  ch
11b60 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20  ar **pzErrMsg   
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 45 72 72 6f 72          /* Error
11b90 20 6d 73 67 20 77 72 69 74 74 65 6e 20 68 65 72   msg written her
11ba0 65 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  e */.){.  sqlite
11bb0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
11bc0 4e 55 4c 4c 3b 20 20 20 20 20 2f 2a 20 53 74 61  NULL;     /* Sta
11bd0 74 65 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74  tement to execut
11be0 65 2e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d  e. */.  int rc =
11bf0 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
11c00 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
11c10 6e 20 43 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  n Code */.  int 
11c20 72 63 32 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  rc2;.  const cha
11c30 72 20 2a 7a 4c 65 66 74 6f 76 65 72 3b 20 20 20  r *zLeftover;   
11c40 20 20 20 20 20 20 20 2f 2a 20 54 61 69 6c 20 6f         /* Tail o
11c50 66 20 75 6e 70 72 6f 63 65 73 73 65 64 20 53 51  f unprocessed SQ
11c60 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 70 7a 45 72  L */..  if( pzEr
11c70 72 4d 73 67 20 29 7b 0a 20 20 20 20 2a 70 7a 45  rMsg ){.    *pzE
11c80 72 72 4d 73 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20  rrMsg = NULL;.  
11c90 7d 0a 0a 20 20 69 66 28 20 70 41 72 67 2d 3e 65  }..  if( pArg->e
11ca0 78 70 65 72 74 2e 70 45 78 70 65 72 74 20 29 7b  xpert.pExpert ){
11cb0 0a 20 20 20 20 72 63 20 3d 20 65 78 70 65 72 74  .    rc = expert
11cc0 48 61 6e 64 6c 65 53 51 4c 28 70 41 72 67 2c 20  HandleSQL(pArg, 
11cd0 7a 53 71 6c 2c 20 70 7a 45 72 72 4d 73 67 29 3b  zSql, pzErrMsg);
11ce0 0a 20 20 20 20 72 65 74 75 72 6e 20 65 78 70 65  .    return expe
11cf0 72 74 46 69 6e 69 73 68 28 70 41 72 67 2c 20 28  rtFinish(pArg, (
11d00 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 2c 20  rc!=SQLITE_OK), 
11d10 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 0a  pzErrMsg);.  }..
11d20 20 20 77 68 69 6c 65 28 20 7a 53 71 6c 5b 30 5d    while( zSql[0]
11d30 20 26 26 20 28 53 51 4c 49 54 45 5f 4f 4b 20 3d   && (SQLITE_OK =
11d40 3d 20 72 63 29 20 29 7b 0a 20 20 20 20 73 74 61  = rc) ){.    sta
11d50 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
11d60 7a 53 74 6d 74 53 71 6c 3b 0a 20 20 20 20 72 63  zStmtSql;.    rc
11d70 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
11d80 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c 20  re_v2(db, zSql, 
11d90 2d 31 2c 20 26 70 53 74 6d 74 2c 20 26 7a 4c 65  -1, &pStmt, &zLe
11da0 66 74 6f 76 65 72 29 3b 0a 20 20 20 20 69 66 28  ftover);.    if(
11db0 20 53 51 4c 49 54 45 5f 4f 4b 20 21 3d 20 72 63   SQLITE_OK != rc
11dc0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 7a   ){.      if( pz
11dd0 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20  ErrMsg ){.      
11de0 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 73 61    *pzErrMsg = sa
11df0 76 65 5f 65 72 72 5f 6d 73 67 28 64 62 29 3b 0a  ve_err_msg(db);.
11e00 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
11e10 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21 70 53  e{.      if( !pS
11e20 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  tmt ){.        /
11e30 2a 20 74 68 69 73 20 68 61 70 70 65 6e 73 20 66  * this happens f
11e40 6f 72 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 72 20  or a comment or 
11e50 77 68 69 74 65 2d 73 70 61 63 65 20 2a 2f 0a 20  white-space */. 
11e60 20 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c         zSql = zL
11e70 65 66 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 20  eftover;.       
11e80 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28   while( IsSpace(
11e90 7a 53 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c 2b  zSql[0]) ) zSql+
11ea0 2b 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69  +;.        conti
11eb0 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  nue;.      }.   
11ec0 20 20 20 7a 53 74 6d 74 53 71 6c 20 3d 20 73 71     zStmtSql = sq
11ed0 6c 69 74 65 33 5f 73 71 6c 28 70 53 74 6d 74 29  lite3_sql(pStmt)
11ee0 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 53 74 6d  ;.      if( zStm
11ef0 74 53 71 6c 3d 3d 30 20 29 20 7a 53 74 6d 74 53  tSql==0 ) zStmtS
11f00 71 6c 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 77  ql = "";.      w
11f10 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 53  hile( IsSpace(zS
11f20 74 6d 74 53 71 6c 5b 30 5d 29 20 29 20 7a 53 74  tmtSql[0]) ) zSt
11f30 6d 74 53 71 6c 2b 2b 3b 0a 0a 20 20 20 20 20 20  mtSql++;..      
11f40 2f 2a 20 73 61 76 65 20 6f 66 66 20 74 68 65 20  /* save off the 
11f50 70 72 65 70 61 72 65 64 20 73 74 61 74 6d 65 6e  prepared statmen
11f60 74 20 68 61 6e 64 6c 65 20 61 6e 64 20 72 65 73  t handle and res
11f70 65 74 20 72 6f 77 20 63 6f 75 6e 74 20 2a 2f 0a  et row count */.
11f80 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20 29        if( pArg )
11f90 7b 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e  {.        pArg->
11fa0 70 53 74 6d 74 20 3d 20 70 53 74 6d 74 3b 0a 20  pStmt = pStmt;. 
11fb0 20 20 20 20 20 20 20 70 41 72 67 2d 3e 63 6e 74         pArg->cnt
11fc0 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20   = 0;.      }.. 
11fd0 20 20 20 20 20 2f 2a 20 65 63 68 6f 20 74 68 65       /* echo the
11fe0 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 69   sql statement i
11ff0 66 20 65 63 68 6f 20 6f 6e 20 2a 2f 0a 20 20 20  f echo on */.   
12000 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20 53     if( pArg && S
12010 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 41 72 67  hellHasFlag(pArg
12020 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29 20 29 7b  , SHFLG_Echo) ){
12030 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
12040 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
12050 22 25 73 5c 6e 22 2c 20 7a 53 74 6d 74 53 71 6c  "%s\n", zStmtSql
12060 20 3f 20 7a 53 74 6d 74 53 71 6c 20 3a 20 7a 53   ? zStmtSql : zS
12070 71 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ql);.      }..  
12080 20 20 20 20 2f 2a 20 53 68 6f 77 20 74 68 65 20      /* Show the 
12090 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
120a0 41 4e 20 69 66 20 2e 65 71 70 20 69 73 20 6f 6e  AN if .eqp is on
120b0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 41   */.      if( pA
120c0 72 67 20 26 26 20 70 41 72 67 2d 3e 61 75 74 6f  rg && pArg->auto
120d0 45 51 50 20 26 26 20 73 71 6c 69 74 65 33 5f 73  EQP && sqlite3_s
120e0 74 72 6c 69 6b 65 28 22 45 58 50 4c 41 49 4e 25  trlike("EXPLAIN%
120f0 22 2c 7a 53 74 6d 74 53 71 6c 2c 30 29 21 3d 30  ",zStmtSql,0)!=0
12100 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
12110 74 65 33 5f 73 74 6d 74 20 2a 70 45 78 70 6c 61  te3_stmt *pExpla
12120 69 6e 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72  in;.        char
12130 20 2a 7a 45 51 50 3b 0a 20 20 20 20 20 20 20 20   *zEQP;.        
12140 64 69 73 61 62 6c 65 5f 64 65 62 75 67 5f 74 72  disable_debug_tr
12150 61 63 65 5f 6d 6f 64 65 73 28 29 3b 0a 20 20 20  ace_modes();.   
12160 20 20 20 20 20 7a 45 51 50 20 3d 20 73 71 6c 69       zEQP = sqli
12170 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 45 58 50  te3_mprintf("EXP
12180 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
12190 25 73 22 2c 20 7a 53 74 6d 74 53 71 6c 29 3b 0a  %s", zStmtSql);.
121a0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
121b0 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
121c0 64 62 2c 20 7a 45 51 50 2c 20 2d 31 2c 20 26 70  db, zEQP, -1, &p
121d0 45 78 70 6c 61 69 6e 2c 20 30 29 3b 0a 20 20 20  Explain, 0);.   
121e0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
121f0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
12200 20 20 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74      while( sqlit
12210 65 33 5f 73 74 65 70 28 70 45 78 70 6c 61 69 6e  e3_step(pExplain
12220 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
12230 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 77  .            raw
12240 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
12250 74 2c 22 2d 2d 45 51 50 2d 2d 20 25 64 2c 22 2c  t,"--EQP-- %d,",
12260 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
12270 6e 74 28 70 45 78 70 6c 61 69 6e 2c 20 30 29 29  nt(pExplain, 0))
12280 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61  ;.            ra
12290 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
122a0 75 74 2c 22 25 64 2c 22 2c 20 73 71 6c 69 74 65  ut,"%d,", sqlite
122b0 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45 78  3_column_int(pEx
122c0 70 6c 61 69 6e 2c 20 31 29 29 3b 0a 20 20 20 20  plain, 1));.    
122d0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
122e0 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25 64  tf(pArg->out,"%d
122f0 2c 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ,", sqlite3_colu
12300 6d 6e 5f 69 6e 74 28 70 45 78 70 6c 61 69 6e 2c  mn_int(pExplain,
12310 20 32 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20   2));.          
12320 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41    utf8_printf(pA
12330 72 67 2d 3e 6f 75 74 2c 22 25 73 5c 6e 22 2c 20  rg->out,"%s\n", 
12340 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
12350 65 78 74 28 70 45 78 70 6c 61 69 6e 2c 20 33 29  ext(pExplain, 3)
12360 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
12370 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
12380 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
12390 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20  e(pExplain);.   
123a0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
123b0 65 28 7a 45 51 50 29 3b 0a 20 20 20 20 20 20 20  e(zEQP);.       
123c0 20 69 66 28 20 70 41 72 67 2d 3e 61 75 74 6f 45   if( pArg->autoE
123d0 51 50 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20 20  QP>=2 ){.       
123e0 20 20 20 2f 2a 20 41 6c 73 6f 20 64 6f 20 61 6e     /* Also do an
123f0 20 45 58 50 4c 41 49 4e 20 66 6f 72 20 22 2e 65   EXPLAIN for ".e
12400 71 70 20 66 75 6c 6c 22 20 6d 6f 64 65 20 2a 2f  qp full" mode */
12410 0a 20 20 20 20 20 20 20 20 20 20 7a 45 51 50 20  .          zEQP 
12420 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
12430 66 28 22 45 58 50 4c 41 49 4e 20 25 73 22 2c 20  f("EXPLAIN %s", 
12440 7a 53 74 6d 74 53 71 6c 29 3b 0a 20 20 20 20 20  zStmtSql);.     
12450 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
12460 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c  3_prepare_v2(db,
12470 20 7a 45 51 50 2c 20 2d 31 2c 20 26 70 45 78 70   zEQP, -1, &pExp
12480 6c 61 69 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20  lain, 0);.      
12490 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
124a0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
124b0 20 20 20 20 20 70 41 72 67 2d 3e 63 4d 6f 64 65       pArg->cMode
124c0 20 3d 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 3b   = MODE_Explain;
124d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 78 70  .            exp
124e0 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72  lain_data_prepar
124f0 65 28 70 41 72 67 2c 20 70 45 78 70 6c 61 69 6e  e(pArg, pExplain
12500 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  );.            e
12510 78 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74 6d  xec_prepared_stm
12520 74 28 70 41 72 67 2c 20 70 45 78 70 6c 61 69 6e  t(pArg, pExplain
12530 2c 20 78 43 61 6c 6c 62 61 63 6b 29 3b 0a 20 20  , xCallback);.  
12540 20 20 20 20 20 20 20 20 20 20 65 78 70 6c 61 69            explai
12550 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 70 41  n_data_delete(pA
12560 72 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  rg);.          }
12570 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
12580 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78 70  e3_finalize(pExp
12590 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  lain);.         
125a0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
125b0 51 50 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  QP);.        }. 
125c0 20 20 20 20 20 20 20 72 65 73 74 6f 72 65 5f 64         restore_d
125d0 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65 73  ebug_trace_modes
125e0 28 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  ();.      }..   
125f0 20 20 20 69 66 28 20 70 41 72 67 20 29 7b 0a 20     if( pArg ){. 
12600 20 20 20 20 20 20 20 70 41 72 67 2d 3e 63 4d 6f         pArg->cMo
12610 64 65 20 3d 20 70 41 72 67 2d 3e 6d 6f 64 65 3b  de = pArg->mode;
12620 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 41 72  .        if( pAr
12630 67 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 0a 20  g->autoExplain. 
12640 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74          && sqlit
12650 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
12660 70 53 74 6d 74 29 3d 3d 38 0a 20 20 20 20 20 20  pStmt)==8.      
12670 20 20 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74     && sqlite3_st
12680 72 6c 69 6b 65 28 22 45 58 50 4c 41 49 4e 25 22  rlike("EXPLAIN%"
12690 2c 20 7a 53 74 6d 74 53 71 6c 2c 30 29 3d 3d 30  , zStmtSql,0)==0
126a0 0a 20 20 20 20 20 20 20 20 29 7b 0a 20 20 20 20  .        ){.    
126b0 20 20 20 20 20 20 70 41 72 67 2d 3e 63 4d 6f 64        pArg->cMod
126c0 65 20 3d 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e  e = MODE_Explain
126d0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  ;.        }..   
126e0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73       /* If the s
126f0 68 65 6c 6c 20 69 73 20 63 75 72 72 65 6e 74 6c  hell is currentl
12700 79 20 69 6e 20 22 2e 65 78 70 6c 61 69 6e 22 20  y in ".explain" 
12710 6d 6f 64 65 2c 20 67 61 74 68 65 72 20 74 68 65  mode, gather the
12720 20 65 78 74 72 61 0a 20 20 20 20 20 20 20 20 2a   extra.        *
12730 2a 20 64 61 74 61 20 72 65 71 75 69 72 65 64 20  * data required 
12740 74 6f 20 61 64 64 20 69 6e 64 65 6e 74 73 20 74  to add indents t
12750 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 2a 2f 0a  o the output.*/.
12760 20 20 20 20 20 20 20 20 69 66 28 20 70 41 72 67          if( pArg
12770 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78  ->cMode==MODE_Ex
12780 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20  plain ){.       
12790 20 20 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f     explain_data_
127a0 70 72 65 70 61 72 65 28 70 41 72 67 2c 20 70 53  prepare(pArg, pS
127b0 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  tmt);.        }.
127c0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 65        }..      e
127d0 78 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74 6d  xec_prepared_stm
127e0 74 28 70 41 72 67 2c 20 70 53 74 6d 74 2c 20 78  t(pArg, pStmt, x
127f0 43 61 6c 6c 62 61 63 6b 29 3b 0a 20 20 20 20 20  Callback);.     
12800 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f 64 65   explain_data_de
12810 6c 65 74 65 28 70 41 72 67 29 3b 0a 0a 20 20 20  lete(pArg);..   
12820 20 20 20 2f 2a 20 70 72 69 6e 74 20 75 73 61 67     /* print usag
12830 65 20 73 74 61 74 73 20 69 66 20 73 74 61 74 73  e stats if stats
12840 20 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28   on */.      if(
12850 20 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e 73   pArg && pArg->s
12860 74 61 74 73 4f 6e 20 29 7b 0a 20 20 20 20 20 20  tatsOn ){.      
12870 20 20 64 69 73 70 6c 61 79 5f 73 74 61 74 73 28    display_stats(
12880 64 62 2c 20 70 41 72 67 2c 20 30 29 3b 0a 20 20  db, pArg, 0);.  
12890 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
128a0 70 72 69 6e 74 20 6c 6f 6f 70 2d 63 6f 75 6e 74  print loop-count
128b0 65 72 73 20 69 66 20 72 65 71 75 69 72 65 64 20  ers if required 
128c0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 41 72  */.      if( pAr
128d0 67 20 26 26 20 70 41 72 67 2d 3e 73 63 61 6e 73  g && pArg->scans
128e0 74 61 74 73 4f 6e 20 29 7b 0a 20 20 20 20 20 20  tatsOn ){.      
128f0 20 20 64 69 73 70 6c 61 79 5f 73 63 61 6e 73 74    display_scanst
12900 61 74 73 28 64 62 2c 20 70 41 72 67 29 3b 0a 20  ats(db, pArg);. 
12910 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
12920 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 73 74   Finalize the st
12930 61 74 65 6d 65 6e 74 20 6a 75 73 74 20 65 78 65  atement just exe
12940 63 75 74 65 64 2e 20 49 66 20 74 68 69 73 20 66  cuted. If this f
12950 61 69 6c 73 2c 20 73 61 76 65 20 61 0a 20 20 20  ails, save a.   
12960 20 20 20 2a 2a 20 63 6f 70 79 20 6f 66 20 74 68     ** copy of th
12970 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  e error message.
12980 20 4f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20   Otherwise, set 
12990 7a 53 71 6c 20 74 6f 20 70 6f 69 6e 74 20 74 6f  zSql to point to
129a0 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6e 65   the.      ** ne
129b0 78 74 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  xt statement to 
129c0 65 78 65 63 75 74 65 2e 20 2a 2f 0a 20 20 20 20  execute. */.    
129d0 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f    rc2 = sqlite3_
129e0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
129f0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
12a00 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 20 72 63  QLITE_NOMEM ) rc
12a10 20 3d 20 72 63 32 3b 0a 20 20 20 20 20 20 69 66   = rc2;.      if
12a20 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
12a30 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 20  ){.        zSql 
12a40 3d 20 7a 4c 65 66 74 6f 76 65 72 3b 0a 20 20 20  = zLeftover;.   
12a50 20 20 20 20 20 77 68 69 6c 65 28 20 49 73 53 70       while( IsSp
12a60 61 63 65 28 7a 53 71 6c 5b 30 5d 29 20 29 20 7a  ace(zSql[0]) ) z
12a70 53 71 6c 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c  Sql++;.      }el
12a80 73 65 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20  se if( pzErrMsg 
12a90 29 7b 0a 20 20 20 20 20 20 20 20 2a 70 7a 45 72  ){.        *pzEr
12aa0 72 4d 73 67 20 3d 20 73 61 76 65 5f 65 72 72 5f  rMsg = save_err_
12ab0 6d 73 67 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  msg(db);.      }
12ac0 0a 0a 20 20 20 20 20 20 2f 2a 20 63 6c 65 61 72  ..      /* clear
12ad0 20 73 61 76 65 64 20 73 74 6d 74 20 68 61 6e 64   saved stmt hand
12ae0 6c 65 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  le */.      if( 
12af0 70 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20  pArg ){.        
12b00 70 41 72 67 2d 3e 70 53 74 6d 74 20 3d 20 4e 55  pArg->pStmt = NU
12b10 4c 4c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  LL;.      }.    
12b20 7d 0a 20 20 7d 20 2f 2a 20 65 6e 64 20 77 68 69  }.  } /* end whi
12b30 6c 65 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20  le */..  return 
12b40 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 6c  rc;.}../*.** Rel
12b50 65 61 73 65 20 6d 65 6d 6f 72 79 20 70 72 65 76  ease memory prev
12b60 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64  iously allocated
12b70 20 62 79 20 74 61 62 6c 65 43 6f 6c 75 6d 6e 4c   by tableColumnL
12b80 69 73 74 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  ist()..*/.static
12b90 20 76 6f 69 64 20 66 72 65 65 43 6f 6c 75 6d 6e   void freeColumn
12ba0 4c 69 73 74 28 63 68 61 72 20 2a 2a 61 7a 43 6f  List(char **azCo
12bb0 6c 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  l){.  int i;.  f
12bc0 6f 72 28 69 3d 31 3b 20 61 7a 43 6f 6c 5b 69 5d  or(i=1; azCol[i]
12bd0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  ; i++){.    sqli
12be0 74 65 33 5f 66 72 65 65 28 61 7a 43 6f 6c 5b 69  te3_free(azCol[i
12bf0 5d 29 3b 0a 20 20 7d 0a 20 20 2f 2a 20 61 7a 43  ]);.  }.  /* azC
12c00 6f 6c 5b 30 5d 20 69 73 20 61 20 73 74 61 74 69  ol[0] is a stati
12c10 63 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 73 71  c string */.  sq
12c20 6c 69 74 65 33 5f 66 72 65 65 28 61 7a 43 6f 6c  lite3_free(azCol
12c30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  );.}../*.** Retu
12c40 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 70 6f 69  rn a list of poi
12c50 6e 74 65 72 73 20 74 6f 20 73 74 72 69 6e 67 73  nters to strings
12c60 20 77 68 69 63 68 20 61 72 65 20 74 68 65 20 6e   which are the n
12c70 61 6d 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 63  ames of all.** c
12c80 6f 6c 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65 20  olumns in table 
12c90 7a 54 61 62 2e 20 20 20 54 68 65 20 6d 65 6d 6f  zTab.   The memo
12ca0 72 79 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6e  ry to hold the n
12cb0 61 6d 65 73 20 69 73 20 64 79 6e 61 6d 69 63 61  ames is dynamica
12cc0 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  lly.** allocated
12cd0 20 61 6e 64 20 6d 75 73 74 20 62 65 20 72 65 6c   and must be rel
12ce0 65 61 73 65 64 20 62 79 20 74 68 65 20 63 61 6c  eased by the cal
12cf0 6c 65 72 20 75 73 69 6e 67 20 61 20 73 75 62 73  ler using a subs
12d00 65 71 75 65 6e 74 20 63 61 6c 6c 0a 2a 2a 20 74  equent call.** t
12d10 6f 20 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74  o freeColumnList
12d20 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 7a  ()..**.** The az
12d30 43 6f 6c 5b 30 5d 20 65 6e 74 72 79 20 69 73 20  Col[0] entry is 
12d40 75 73 75 61 6c 6c 79 20 4e 55 4c 4c 2e 20 20 48  usually NULL.  H
12d50 6f 77 65 76 65 72 2c 20 69 66 20 7a 54 61 62 20  owever, if zTab 
12d60 63 6f 6e 74 61 69 6e 73 20 61 20 72 6f 77 69 64  contains a rowid
12d70 0a 2a 2a 20 76 61 6c 75 65 20 74 68 61 74 20 6e  .** value that n
12d80 65 65 64 73 20 74 6f 20 62 65 20 70 72 65 73 65  eeds to be prese
12d90 72 76 65 64 2c 20 74 68 65 6e 20 61 7a 43 6f 6c  rved, then azCol
12da0 5b 30 5d 20 69 73 20 66 69 6c 6c 65 64 20 69 6e  [0] is filled in
12db0 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 61 6d   with the.** nam
12dc0 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 63  e of the rowid c
12dd0 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  olumn..**.** The
12de0 20 66 69 72 73 74 20 72 65 67 75 6c 61 72 20 63   first regular c
12df0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62  olumn in the tab
12e00 6c 65 20 69 73 20 61 7a 43 6f 6c 5b 31 5d 2e 20  le is azCol[1]. 
12e10 20 54 68 65 20 6c 69 73 74 20 69 73 20 74 65 72   The list is ter
12e20 6d 69 6e 61 74 65 64 0a 2a 2a 20 62 79 20 61 6e  minated.** by an
12e30 20 65 6e 74 72 79 20 77 69 74 68 20 61 7a 43 6f   entry with azCo
12e40 6c 5b 69 5d 3d 3d 30 2e 0a 2a 2f 0a 73 74 61 74  l[i]==0..*/.stat
12e50 69 63 20 63 68 61 72 20 2a 2a 74 61 62 6c 65 43  ic char **tableC
12e60 6f 6c 75 6d 6e 4c 69 73 74 28 53 68 65 6c 6c 53  olumnList(ShellS
12e70 74 61 74 65 20 2a 70 2c 20 63 6f 6e 73 74 20 63  tate *p, const c
12e80 68 61 72 20 2a 7a 54 61 62 29 7b 0a 20 20 63 68  har *zTab){.  ch
12e90 61 72 20 2a 2a 61 7a 43 6f 6c 20 3d 20 30 3b 0a  ar **azCol = 0;.
12ea0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
12eb0 70 53 74 6d 74 3b 0a 20 20 63 68 61 72 20 2a 7a  pStmt;.  char *z
12ec0 53 71 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 20  Sql;.  int nCol 
12ed0 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f  = 0;.  int nAllo
12ee0 63 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 50 4b  c = 0;.  int nPK
12ef0 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e   = 0;       /* N
12f00 75 6d 62 65 72 20 6f 66 20 50 52 49 4d 41 52 59  umber of PRIMARY
12f10 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 73 65 65   KEY columns see
12f20 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 50 4b  n */.  int isIPK
12f30 20 3d 20 30 3b 20 20 20 20 20 2f 2a 20 54 72 75   = 0;     /* Tru
12f40 65 20 69 66 20 6f 6e 65 20 50 52 49 4d 41 52 59  e if one PRIMARY
12f50 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   KEY column of t
12f60 79 70 65 20 49 4e 54 45 47 45 52 20 2a 2f 0a 20  ype INTEGER */. 
12f70 20 69 6e 74 20 70 72 65 73 65 72 76 65 52 6f 77   int preserveRow
12f80 69 64 20 3d 20 53 68 65 6c 6c 48 61 73 46 6c 61  id = ShellHasFla
12f90 67 28 70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65  g(p, SHFLG_Prese
12fa0 72 76 65 52 6f 77 69 64 29 3b 0a 20 20 69 6e 74  rveRowid);.  int
12fb0 20 72 63 3b 0a 0a 20 20 7a 53 71 6c 20 3d 20 73   rc;..  zSql = s
12fc0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
12fd0 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66  PRAGMA table_inf
12fe0 6f 3d 25 51 22 2c 20 7a 54 61 62 29 3b 0a 20 20  o=%Q", zTab);.  
12ff0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
13000 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
13010 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
13020 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66   0);.  sqlite3_f
13030 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 69 66 28  ree(zSql);.  if(
13040 20 72 63 20 29 20 72 65 74 75 72 6e 20 30 3b 0a   rc ) return 0;.
13050 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65 33    while( sqlite3
13060 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51  _step(pStmt)==SQ
13070 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
13080 69 66 28 20 6e 43 6f 6c 3e 3d 6e 41 6c 6c 6f 63  if( nCol>=nAlloc
13090 2d 32 20 29 7b 0a 20 20 20 20 20 20 6e 41 6c 6c  -2 ){.      nAll
130a0 6f 63 20 3d 20 6e 41 6c 6c 6f 63 2a 32 20 2b 20  oc = nAlloc*2 + 
130b0 6e 43 6f 6c 20 2b 20 31 30 3b 0a 20 20 20 20 20  nCol + 10;.     
130c0 20 61 7a 43 6f 6c 20 3d 20 73 71 6c 69 74 65 33   azCol = sqlite3
130d0 5f 72 65 61 6c 6c 6f 63 28 61 7a 43 6f 6c 2c 20  _realloc(azCol, 
130e0 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f 66 28 61 7a  nAlloc*sizeof(az
130f0 43 6f 6c 5b 30 5d 29 29 3b 0a 20 20 20 20 20 20  Col[0]));.      
13100 69 66 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 7b 0a  if( azCol==0 ){.
13110 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
13120 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
13130 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  r: out of memory
13140 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 65 78  \n");.        ex
13150 69 74 28 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20  it(1);.      }. 
13160 20 20 20 7d 0a 20 20 20 20 61 7a 43 6f 6c 5b 2b     }.    azCol[+
13170 2b 6e 43 6f 6c 5d 20 3d 20 73 71 6c 69 74 65 33  +nCol] = sqlite3
13180 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 73  _mprintf("%s", s
13190 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
131a0 78 74 28 70 53 74 6d 74 2c 20 31 29 29 3b 0a 20  xt(pStmt, 1));. 
131b0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 63     if( sqlite3_c
131c0 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c  olumn_int(pStmt,
131d0 20 35 29 20 29 7b 0a 20 20 20 20 20 20 6e 50 4b   5) ){.      nPK
131e0 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 50  ++;.      if( nP
131f0 4b 3d 3d 31 0a 20 20 20 20 20 20 20 26 26 20 73  K==1.       && s
13200 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 28  qlite3_stricmp((
13210 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
13220 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
13230 70 53 74 6d 74 2c 32 29 2c 0a 20 20 20 20 20 20  pStmt,2),.      
13240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13250 20 20 20 20 22 49 4e 54 45 47 45 52 22 29 3d 3d      "INTEGER")==
13260 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
13270 20 20 20 69 73 49 50 4b 20 3d 20 31 3b 0a 20 20     isIPK = 1;.  
13280 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13290 20 20 20 69 73 49 50 4b 20 3d 20 30 3b 0a 20 20     isIPK = 0;.  
132a0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
132b0 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
132c0 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 69 66 28  ze(pStmt);.  if(
132d0 20 61 7a 43 6f 6c 3d 3d 30 20 29 20 72 65 74 75   azCol==0 ) retu
132e0 72 6e 20 30 3b 0a 20 20 61 7a 43 6f 6c 5b 30 5d  rn 0;.  azCol[0]
132f0 20 3d 20 30 3b 0a 20 20 61 7a 43 6f 6c 5b 6e 43   = 0;.  azCol[nC
13300 6f 6c 2b 31 5d 20 3d 20 30 3b 0a 0a 20 20 2f 2a  ol+1] = 0;..  /*
13310 20 54 68 65 20 64 65 63 69 73 69 6f 6e 20 6f 66   The decision of
13320 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
13330 61 20 72 6f 77 69 64 20 72 65 61 6c 6c 79 20 6e  a rowid really n
13340 65 65 64 73 20 74 6f 20 62 65 20 70 72 65 73 65  eeds to be prese
13350 72 76 65 64 0a 20 20 2a 2a 20 69 73 20 74 72 69  rved.  ** is tri
13360 63 6b 79 2e 20 20 57 65 20 6e 65 76 65 72 20 6e  cky.  We never n
13370 65 65 64 20 74 6f 20 70 72 65 73 65 72 76 65 20  eed to preserve 
13380 61 20 72 6f 77 69 64 20 66 6f 72 20 61 20 57 49  a rowid for a WI
13390 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
133a0 65 0a 20 20 2a 2a 20 6f 72 20 61 20 74 61 62 6c  e.  ** or a tabl
133b0 65 20 77 69 74 68 20 61 6e 20 49 4e 54 45 47 45  e with an INTEGE
133c0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20  R PRIMARY KEY.  
133d0 57 65 20 61 72 65 20 75 6e 61 62 6c 65 20 74 6f  We are unable to
133e0 20 70 72 65 73 65 72 76 65 0a 20 20 2a 2a 20 72   preserve.  ** r
133f0 6f 77 69 64 73 20 6f 6e 20 74 61 62 6c 65 73 20  owids on tables 
13400 77 68 65 72 65 20 74 68 65 20 72 6f 77 69 64 20  where the rowid 
13410 69 73 20 69 6e 61 63 63 65 73 73 69 62 6c 65 20  is inaccessible 
13420 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
13430 65 20 6f 74 68 65 72 0a 20 20 2a 2a 20 63 6f 6c  e other.  ** col
13440 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
13450 65 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22 2c  e named "rowid",
13460 20 22 5f 72 6f 77 69 64 5f 22 2c 20 61 6e 64 20   "_rowid_", and 
13470 22 6f 69 64 22 2e 0a 20 20 2a 2f 0a 20 20 69 66  "oid"..  */.  if
13480 28 20 70 72 65 73 65 72 76 65 52 6f 77 69 64 20  ( preserveRowid 
13490 26 26 20 69 73 49 50 4b 20 29 7b 0a 20 20 20 20  && isIPK ){.    
134a0 2f 2a 20 49 66 20 61 20 73 69 6e 67 6c 65 20 50  /* If a single P
134b0 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d  RIMARY KEY colum
134c0 6e 20 77 69 74 68 20 74 79 70 65 20 49 4e 54 45  n with type INTE
134d0 47 45 52 20 77 61 73 20 73 65 65 6e 2c 20 74 68  GER was seen, th
134e0 65 6e 20 69 74 0a 20 20 20 20 2a 2a 20 6d 69 67  en it.    ** mig
134f0 68 74 20 62 65 20 61 6e 20 61 6c 69 73 65 20 66  ht be an alise f
13500 6f 72 20 74 68 65 20 52 4f 57 49 44 2e 20 20 42  or the ROWID.  B
13510 75 74 20 69 74 20 6d 69 67 68 74 20 61 6c 73 6f  ut it might also
13520 20 62 65 20 61 20 57 49 54 48 4f 55 54 20 52 4f   be a WITHOUT RO
13530 57 49 44 0a 20 20 20 20 2a 2a 20 74 61 62 6c 65  WID.    ** table
13540 20 6f 72 20 61 20 49 4e 54 45 47 45 52 20 50 52   or a INTEGER PR
13550 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43 20 63  IMARY KEY DESC c
13560 6f 6c 75 6d 6e 2c 20 6e 65 69 74 68 65 72 20 6f  olumn, neither o
13570 66 20 77 68 69 63 68 20 61 72 65 0a 20 20 20 20  f which are.    
13580 2a 2a 20 52 4f 57 49 44 20 61 6c 69 61 73 65 73  ** ROWID aliases
13590 2e 20 20 54 6f 20 64 69 73 74 69 6e 67 75 69 73  .  To distinguis
135a0 68 20 74 68 65 73 65 20 63 61 73 65 73 2c 20 63  h these cases, c
135b0 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 0a 20  heck to see if. 
135c0 20 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61     ** there is a
135d0 20 22 70 6b 22 20 65 6e 74 72 79 20 69 6e 20 22   "pk" entry in "
135e0 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73  PRAGMA index_lis
135f0 74 22 2e 20 20 54 68 65 72 65 20 77 69 6c 6c 20  t".  There will 
13600 62 65 0a 20 20 20 20 2a 2a 20 6e 6f 20 22 70 6b  be.    ** no "pk
13610 22 20 69 6e 64 65 78 20 69 66 20 74 68 65 20 50  " index if the P
13620 52 49 4d 41 52 59 20 4b 45 59 20 72 65 61 6c 6c  RIMARY KEY reall
13630 79 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  y is an alias fo
13640 72 20 74 68 65 20 52 4f 57 49 44 2e 0a 20 20 20  r the ROWID..   
13650 20 2a 2f 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73   */.    zSql = s
13660 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
13670 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 70 72  SELECT 1 FROM pr
13680 61 67 6d 61 5f 69 6e 64 65 78 5f 6c 69 73 74 28  agma_index_list(
13690 25 51 29 22 0a 20 20 20 20 20 20 20 20 20 20 20  %Q)".           
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 22 20 57 48 45 52 45 20 6f 72 69 67 69 6e 3d 27  " WHERE origin='
136c0 70 6b 27 22 2c 20 7a 54 61 62 29 3b 0a 20 20 20  pk'", zTab);.   
136d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
136e0 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
136f0 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74  zSql, -1, &pStmt
13700 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
13710 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  3_free(zSql);.  
13720 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
13730 20 20 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74    freeColumnList
13740 28 61 7a 43 6f 6c 29 3b 0a 20 20 20 20 20 20 72  (azCol);.      r
13750 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20  eturn 0;.    }. 
13760 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
13770 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20 20  step(pStmt);.   
13780 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
13790 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 70 72  e(pStmt);.    pr
137a0 65 73 65 72 76 65 52 6f 77 69 64 20 3d 20 72 63  eserveRowid = rc
137b0 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  ==SQLITE_ROW;.  
137c0 7d 0a 20 20 69 66 28 20 70 72 65 73 65 72 76 65  }.  if( preserve
137d0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 2f 2a 20  Rowid ){.    /* 
137e0 4f 6e 6c 79 20 70 72 65 73 65 72 76 65 20 74 68  Only preserve th
137f0 65 20 72 6f 77 69 64 20 69 66 20 77 65 20 63 61  e rowid if we ca
13800 6e 20 66 69 6e 64 20 61 20 6e 61 6d 65 20 74 6f  n find a name to
13810 20 75 73 65 20 66 6f 72 20 74 68 65 0a 20 20 20   use for the.   
13820 20 2a 2a 20 72 6f 77 69 64 20 2a 2f 0a 20 20 20   ** rowid */.   
13830 20 73 74 61 74 69 63 20 63 68 61 72 20 2a 61 7a   static char *az
13840 52 6f 77 69 64 5b 5d 20 3d 20 7b 20 22 72 6f 77  Rowid[] = { "row
13850 69 64 22 2c 20 22 5f 72 6f 77 69 64 5f 22 2c 20  id", "_rowid_", 
13860 22 6f 69 64 22 20 7d 3b 0a 20 20 20 20 69 6e 74  "oid" };.    int
13870 20 69 2c 20 6a 3b 0a 20 20 20 20 66 6f 72 28 6a   i, j;.    for(j
13880 3d 30 3b 20 6a 3c 33 3b 20 6a 2b 2b 29 7b 0a 20  =0; j<3; j++){. 
13890 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c       for(i=1; i<
138a0 3d 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20  =nCol; i++){.   
138b0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
138c0 5f 73 74 72 69 63 6d 70 28 61 7a 52 6f 77 69 64  _stricmp(azRowid
138d0 5b 6a 5d 2c 61 7a 43 6f 6c 5b 69 5d 29 3d 3d 30  [j],azCol[i])==0
138e0 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
138f0 7d 0a 20 20 20 20 20 20 69 66 28 20 69 3e 6e 43  }.      if( i>nC
13900 6f 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  ol ){.        /*
13910 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point, 
13920 77 65 20 6b 6e 6f 77 20 74 68 61 74 20 61 7a 52  we know that azR
13930 6f 77 69 64 5b 6a 5d 20 69 73 20 6e 6f 74 20 74  owid[j] is not t
13940 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 79 0a 20  he name of any. 
13950 20 20 20 20 20 20 20 2a 2a 20 6f 72 64 69 6e 61         ** ordina
13960 72 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ry column in the
13970 20 74 61 62 6c 65 2e 20 20 56 65 72 69 66 79 20   table.  Verify 
13980 74 68 61 74 20 61 7a 52 6f 77 69 64 5b 6a 5d 20  that azRowid[j] 
13990 69 73 20 61 20 76 61 6c 69 64 0a 20 20 20 20 20  is a valid.     
139a0 20 20 20 2a 2a 20 6e 61 6d 65 20 66 6f 72 20 74     ** name for t
139b0 68 65 20 72 6f 77 69 64 20 62 65 66 6f 72 65 20  he rowid before 
139c0 61 64 64 69 6e 67 20 69 74 20 74 6f 20 61 7a 43  adding it to azC
139d0 6f 6c 5b 30 5d 2e 20 20 57 49 54 48 4f 55 54 20  ol[0].  WITHOUT 
139e0 52 4f 57 49 44 0a 20 20 20 20 20 20 20 20 2a 2a  ROWID.        **
139f0 20 74 61 62 6c 65 73 20 77 69 6c 6c 20 66 61 69   tables will fai
13a00 6c 20 74 68 69 73 20 6c 61 73 74 20 63 68 65 63  l this last chec
13a10 6b 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20  k */.        rc 
13a20 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  = sqlite3_table_
13a30 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28  column_metadata(
13a40 70 2d 3e 64 62 2c 30 2c 7a 54 61 62 2c 61 7a 52  p->db,0,zTab,azR
13a50 6f 77 69 64 5b 6a 5d 2c 30 2c 30 2c 30 2c 30 2c  owid[j],0,0,0,0,
13a60 30 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  0);.        if( 
13a70 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
13a80 61 7a 43 6f 6c 5b 30 5d 20 3d 20 61 7a 52 6f 77  azCol[0] = azRow
13a90 69 64 5b 6a 5d 3b 0a 20 20 20 20 20 20 20 20 62  id[j];.        b
13aa0 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
13ab0 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
13ac0 20 61 7a 43 6f 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   azCol;.}../*.**
13ad0 20 54 6f 67 67 6c 65 20 74 68 65 20 72 65 76 65   Toggle the reve
13ae0 72 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73 65  rse_unordered_se
13af0 6c 65 63 74 73 20 73 65 74 74 69 6e 67 2e 0a 2a  lects setting..*
13b00 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 6f  /.static void to
13b10 67 67 6c 65 53 65 6c 65 63 74 4f 72 64 65 72 28  ggleSelectOrder(
13b20 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
13b30 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
13b40 74 6d 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69  tmt = 0;.  int i
13b50 53 65 74 74 69 6e 67 20 3d 20 30 3b 0a 20 20 63  Setting = 0;.  c
13b60 68 61 72 20 7a 53 74 6d 74 5b 31 30 30 5d 3b 0a  har zStmt[100];.
13b70 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72    sqlite3_prepar
13b80 65 5f 76 32 28 64 62 2c 20 22 50 52 41 47 4d 41  e_v2(db, "PRAGMA
13b90 20 72 65 76 65 72 73 65 5f 75 6e 6f 72 64 65 72   reverse_unorder
13ba0 65 64 5f 73 65 6c 65 63 74 73 22 2c 20 2d 31 2c  ed_selects", -1,
13bb0 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 69   &pStmt, 0);.  i
13bc0 66 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  f( sqlite3_step(
13bd0 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52  pStmt)==SQLITE_R
13be0 4f 57 20 29 7b 0a 20 20 20 20 69 53 65 74 74 69  OW ){.    iSetti
13bf0 6e 67 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ng = sqlite3_col
13c00 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 20 30  umn_int(pStmt, 0
13c10 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
13c20 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
13c30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  ;.  sqlite3_snpr
13c40 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 53 74 6d  intf(sizeof(zStm
13c50 74 29 2c 20 7a 53 74 6d 74 2c 0a 20 20 20 20 20  t), zStmt,.     
13c60 20 20 22 50 52 41 47 4d 41 20 72 65 76 65 72 73    "PRAGMA revers
13c70 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73 65 6c 65  e_unordered_sele
13c80 63 74 73 28 25 64 29 22 2c 20 21 69 53 65 74 74  cts(%d)", !iSett
13c90 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  ing);.  sqlite3_
13ca0 65 78 65 63 28 64 62 2c 20 7a 53 74 6d 74 2c 20  exec(db, zStmt, 
13cb0 30 2c 20 30 2c 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a  0, 0, 0);.}../*.
13cc0 2a 2a 20 54 68 69 73 20 69 73 20 61 20 64 69 66  ** This is a dif
13cd0 66 65 72 65 6e 74 20 63 61 6c 6c 62 61 63 6b 20  ferent callback 
13ce0 72 6f 75 74 69 6e 65 20 75 73 65 64 20 66 6f 72  routine used for
13cf0 20 64 75 6d 70 69 6e 67 20 74 68 65 20 64 61 74   dumping the dat
13d00 61 62 61 73 65 2e 0a 2a 2a 20 45 61 63 68 20 72  abase..** Each r
13d10 6f 77 20 72 65 63 65 69 76 65 64 20 62 79 20 74  ow received by t
13d20 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e  his callback con
13d30 73 69 73 74 73 20 6f 66 20 61 20 74 61 62 6c 65  sists of a table
13d40 20 6e 61 6d 65 2c 0a 2a 2a 20 74 68 65 20 74 61   name,.** the ta
13d50 62 6c 65 20 74 79 70 65 20 28 22 69 6e 64 65 78  ble type ("index
13d60 22 20 6f 72 20 22 74 61 62 6c 65 22 29 20 61 6e  " or "table") an
13d70 64 20 53 51 4c 20 74 6f 20 63 72 65 61 74 65 20  d SQL to create 
13d80 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  the table..** Th
13d90 69 73 20 72 6f 75 74 69 6e 65 20 73 68 6f 75 6c  is routine shoul
13da0 64 20 70 72 69 6e 74 20 74 65 78 74 20 73 75 66  d print text suf
13db0 66 69 63 69 65 6e 74 20 74 6f 20 72 65 63 72 65  ficient to recre
13dc0 61 74 65 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a  ate the table..*
13dd0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64 75 6d  /.static int dum
13de0 70 5f 63 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20  p_callback(void 
13df0 2a 70 41 72 67 2c 20 69 6e 74 20 6e 41 72 67 2c  *pArg, int nArg,
13e00 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 63   char **azArg, c
13e10 68 61 72 20 2a 2a 61 7a 4e 6f 74 55 73 65 64 29  har **azNotUsed)
13e20 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 6f  {.  int rc;.  co
13e30 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 6c 65  nst char *zTable
13e40 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
13e50 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63  zType;.  const c
13e60 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 53 68 65  har *zSql;.  She
13e70 6c 6c 53 74 61 74 65 20 2a 70 20 3d 20 28 53 68  llState *p = (Sh
13e80 65 6c 6c 53 74 61 74 65 20 2a 29 70 41 72 67 3b  ellState *)pArg;
13e90 0a 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ..  UNUSED_PARAM
13ea0 45 54 45 52 28 61 7a 4e 6f 74 55 73 65 64 29 3b  ETER(azNotUsed);
13eb0 0a 20 20 69 66 28 20 6e 41 72 67 21 3d 33 20 7c  .  if( nArg!=3 |
13ec0 7c 20 61 7a 41 72 67 3d 3d 30 20 29 20 72 65 74  | azArg==0 ) ret
13ed0 75 72 6e 20 30 3b 0a 20 20 7a 54 61 62 6c 65 20  urn 0;.  zTable 
13ee0 3d 20 61 7a 41 72 67 5b 30 5d 3b 0a 20 20 7a 54  = azArg[0];.  zT
13ef0 79 70 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a  ype = azArg[1];.
13f00 20 20 7a 53 71 6c 20 3d 20 61 7a 41 72 67 5b 32    zSql = azArg[2
13f10 5d 3b 0a 0a 20 20 69 66 28 20 73 74 72 63 6d 70  ];..  if( strcmp
13f20 28 7a 54 61 62 6c 65 2c 20 22 73 71 6c 69 74 65  (zTable, "sqlite
13f30 5f 73 65 71 75 65 6e 63 65 22 29 3d 3d 30 20 29  _sequence")==0 )
13f40 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
13f50 28 70 2d 3e 6f 75 74 2c 20 22 44 45 4c 45 54 45  (p->out, "DELETE
13f60 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71   FROM sqlite_seq
13f70 75 65 6e 63 65 3b 5c 6e 22 29 3b 0a 20 20 7d 65  uence;\n");.  }e
13f80 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f  lse if( sqlite3_
13f90 73 74 72 67 6c 6f 62 28 22 73 71 6c 69 74 65 5f  strglob("sqlite_
13fa0 73 74 61 74 3f 22 2c 20 7a 54 61 62 6c 65 29 3d  stat?", zTable)=
13fb0 3d 30 20 29 7b 0a 20 20 20 20 72 61 77 5f 70 72  =0 ){.    raw_pr
13fc0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 41 4e  intf(p->out, "AN
13fd0 41 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73  ALYZE sqlite_mas
13fe0 74 65 72 3b 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73  ter;\n");.  }els
13ff0 65 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 54  e if( strncmp(zT
14000 61 62 6c 65 2c 20 22 73 71 6c 69 74 65 5f 22 2c  able, "sqlite_",
14010 20 37 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65   7)==0 ){.    re
14020 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20  turn 0;.  }else 
14030 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 53 71 6c  if( strncmp(zSql
14040 2c 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41  , "CREATE VIRTUA
14050 4c 20 54 41 42 4c 45 22 2c 20 32 30 29 3d 3d 30  L TABLE", 20)==0
14060 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 49   ){.    char *zI
14070 6e 73 3b 0a 20 20 20 20 69 66 28 20 21 70 2d 3e  ns;.    if( !p->
14080 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20 29  writableSchema )
14090 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
140a0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 50 52 41 47  tf(p->out, "PRAG
140b0 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
140c0 6d 61 3d 4f 4e 3b 5c 6e 22 29 3b 0a 20 20 20 20  ma=ON;\n");.    
140d0 20 20 70 2d 3e 77 72 69 74 61 62 6c 65 53 63 68    p->writableSch
140e0 65 6d 61 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ema = 1;.    }. 
140f0 20 20 20 7a 49 6e 73 20 3d 20 73 71 6c 69 74 65     zIns = sqlite
14100 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20  3_mprintf(.     
14110 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 73    "INSERT INTO s
14120 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 74 79 70  qlite_master(typ
14130 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c  e,name,tbl_name,
14140 72 6f 6f 74 70 61 67 65 2c 73 71 6c 29 22 0a 20  rootpage,sql)". 
14150 20 20 20 20 20 20 22 56 41 4c 55 45 53 28 27 74        "VALUES('t
14160 61 62 6c 65 27 2c 27 25 71 27 2c 27 25 71 27 2c  able','%q','%q',
14170 30 2c 27 25 71 27 29 3b 22 2c 0a 20 20 20 20 20  0,'%q');",.     
14180 20 20 7a 54 61 62 6c 65 2c 20 7a 54 61 62 6c 65    zTable, zTable
14190 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 75 74 66  , zSql);.    utf
141a0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
141b0 20 22 25 73 5c 6e 22 2c 20 7a 49 6e 73 29 3b 0a   "%s\n", zIns);.
141c0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
141d0 28 7a 49 6e 73 29 3b 0a 20 20 20 20 72 65 74 75  (zIns);.    retu
141e0 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rn 0;.  }else{. 
141f0 20 20 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69     printSchemaLi
14200 6e 65 28 70 2d 3e 6f 75 74 2c 20 7a 53 71 6c 2c  ne(p->out, zSql,
14210 20 22 3b 5c 6e 22 29 3b 0a 20 20 7d 0a 0a 20 20   ";\n");.  }..  
14220 69 66 28 20 73 74 72 63 6d 70 28 7a 54 79 70 65  if( strcmp(zType
14230 2c 20 22 74 61 62 6c 65 22 29 3d 3d 30 20 29 7b  , "table")==0 ){
14240 0a 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20 73  .    ShellText s
14250 53 65 6c 65 63 74 3b 0a 20 20 20 20 53 68 65 6c  Select;.    Shel
14260 6c 54 65 78 74 20 73 54 61 62 6c 65 3b 0a 20 20  lText sTable;.  
14270 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 3b 0a    char **azCol;.
14280 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
14290 68 61 72 20 2a 73 61 76 65 64 44 65 73 74 54 61  har *savedDestTa
142a0 62 6c 65 3b 0a 20 20 20 20 69 6e 74 20 73 61 76  ble;.    int sav
142b0 65 64 4d 6f 64 65 3b 0a 0a 20 20 20 20 61 7a 43  edMode;..    azC
142c0 6f 6c 20 3d 20 74 61 62 6c 65 43 6f 6c 75 6d 6e  ol = tableColumn
142d0 4c 69 73 74 28 70 2c 20 7a 54 61 62 6c 65 29 3b  List(p, zTable);
142e0 0a 20 20 20 20 69 66 28 20 61 7a 43 6f 6c 3d 3d  .    if( azCol==
142f0 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 45  0 ){.      p->nE
14300 72 72 2b 2b 3b 0a 20 20 20 20 20 20 72 65 74 75  rr++;.      retu
14310 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  rn 0;.    }..   
14320 20 2f 2a 20 41 6c 77 61 79 73 20 71 75 6f 74 65   /* Always quote
14330 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 2c   the table name,
14340 20 65 76 65 6e 20 69 66 20 69 74 20 61 70 70 65   even if it appe
14350 61 72 73 20 74 6f 20 62 65 20 70 75 72 65 20 61  ars to be pure a
14360 73 63 69 69 2c 0a 20 20 20 20 2a 2a 20 69 6e 20  scii,.    ** in 
14370 63 61 73 65 20 69 74 20 69 73 20 61 20 6b 65 79  case it is a key
14380 77 6f 72 64 2e 20 45 78 3a 20 20 49 4e 53 45 52  word. Ex:  INSER
14390 54 20 49 4e 54 4f 20 22 74 61 62 6c 65 22 20 2e  T INTO "table" .
143a0 2e 2e 20 2a 2f 0a 20 20 20 20 69 6e 69 74 54 65  .. */.    initTe
143b0 78 74 28 26 73 54 61 62 6c 65 29 3b 0a 20 20 20  xt(&sTable);.   
143c0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 54 61   appendText(&sTa
143d0 62 6c 65 2c 20 7a 54 61 62 6c 65 2c 20 71 75 6f  ble, zTable, quo
143e0 74 65 43 68 61 72 28 7a 54 61 62 6c 65 29 29 3b  teChar(zTable));
143f0 0a 20 20 20 20 2f 2a 20 49 66 20 70 72 65 73 65  .    /* If prese
14400 72 76 69 6e 67 20 74 68 65 20 72 6f 77 69 64 2c  rving the rowid,
14410 20 61 64 64 20 61 20 63 6f 6c 75 6d 6e 20 6c 69   add a column li
14420 73 74 20 61 66 74 65 72 20 74 68 65 20 74 61 62  st after the tab
14430 6c 65 20 6e 61 6d 65 2e 0a 20 20 20 20 2a 2a 20  le name..    ** 
14440 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 3a 20  In other words: 
14450 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 61   "INSERT INTO ta
14460 62 28 72 6f 77 69 64 2c 61 2c 62 2c 63 2c 2e 2e  b(rowid,a,b,c,..
14470 2e 29 20 56 41 4c 55 45 53 28 2e 2e 2e 29 22 0a  .) VALUES(...)".
14480 20 20 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f      ** instead o
14490 66 20 74 68 65 20 75 73 75 61 6c 20 22 49 4e 53  f the usual "INS
144a0 45 52 54 20 49 4e 54 4f 20 74 61 62 20 56 41 4c  ERT INTO tab VAL
144b0 55 45 53 28 2e 2e 2e 29 22 2e 0a 20 20 20 20 2a  UES(...)"..    *
144c0 2f 0a 20 20 20 20 69 66 28 20 61 7a 43 6f 6c 5b  /.    if( azCol[
144d0 30 5d 20 29 7b 0a 20 20 20 20 20 20 61 70 70 65  0] ){.      appe
144e0 6e 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20  ndText(&sTable, 
144f0 22 28 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 61  "(", 0);.      a
14500 70 70 65 6e 64 54 65 78 74 28 26 73 54 61 62 6c  ppendText(&sTabl
14510 65 2c 20 61 7a 43 6f 6c 5b 30 5d 2c 20 30 29 3b  e, azCol[0], 0);
14520 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20  .      for(i=1; 
14530 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  azCol[i]; i++){.
14540 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
14550 78 74 28 26 73 54 61 62 6c 65 2c 20 22 2c 22 2c  xt(&sTable, ",",
14560 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70   0);.        app
14570 65 6e 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c  endText(&sTable,
14580 20 61 7a 43 6f 6c 5b 69 5d 2c 20 71 75 6f 74 65   azCol[i], quote
14590 43 68 61 72 28 61 7a 43 6f 6c 5b 69 5d 29 29 3b  Char(azCol[i]));
145a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
145b0 70 70 65 6e 64 54 65 78 74 28 26 73 54 61 62 6c  ppendText(&sTabl
145c0 65 2c 20 22 29 22 2c 20 30 29 3b 0a 20 20 20 20  e, ")", 0);.    
145d0 7d 0a 0a 20 20 20 20 2f 2a 20 42 75 69 6c 64 20  }..    /* Build 
145e0 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 53  an appropriate S
145f0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
14600 2a 2f 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28  */.    initText(
14610 26 73 53 65 6c 65 63 74 29 3b 0a 20 20 20 20 61  &sSelect);.    a
14620 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
14630 63 74 2c 20 22 53 45 4c 45 43 54 20 22 2c 20 30  ct, "SELECT ", 0
14640 29 3b 0a 20 20 20 20 69 66 28 20 61 7a 43 6f 6c  );.    if( azCol
14650 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 61 70 70  [0] ){.      app
14660 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
14670 2c 20 61 7a 43 6f 6c 5b 30 5d 2c 20 30 29 3b 0a  , azCol[0], 0);.
14680 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
14690 28 26 73 53 65 6c 65 63 74 2c 20 22 2c 22 2c 20  (&sSelect, ",", 
146a0 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f  0);.    }.    fo
146b0 72 28 69 3d 31 3b 20 61 7a 43 6f 6c 5b 69 5d 3b  r(i=1; azCol[i];
146c0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 70   i++){.      app
146d0 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
146e0 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 20 71 75 6f 74  , azCol[i], quot
146f0 65 43 68 61 72 28 61 7a 43 6f 6c 5b 69 5d 29 29  eChar(azCol[i]))
14700 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 43 6f  ;.      if( azCo
14710 6c 5b 69 2b 31 5d 20 29 7b 0a 20 20 20 20 20 20  l[i+1] ){.      
14720 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53    appendText(&sS
14730 65 6c 65 63 74 2c 20 22 2c 22 2c 20 30 29 3b 0a  elect, ",", 0);.
14740 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
14750 20 20 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74    freeColumnList
14760 28 61 7a 43 6f 6c 29 3b 0a 20 20 20 20 61 70 70  (azCol);.    app
14770 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
14780 2c 20 22 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a  , " FROM ", 0);.
14790 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
147a0 73 53 65 6c 65 63 74 2c 20 7a 54 61 62 6c 65 2c  sSelect, zTable,
147b0 20 71 75 6f 74 65 43 68 61 72 28 7a 54 61 62 6c   quoteChar(zTabl
147c0 65 29 29 3b 0a 0a 20 20 20 20 73 61 76 65 64 44  e));..    savedD
147d0 65 73 74 54 61 62 6c 65 20 3d 20 70 2d 3e 7a 44  estTable = p->zD
147e0 65 73 74 54 61 62 6c 65 3b 0a 20 20 20 20 73 61  estTable;.    sa
147f0 76 65 64 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64  vedMode = p->mod
14800 65 3b 0a 20 20 20 20 70 2d 3e 7a 44 65 73 74 54  e;.    p->zDestT
14810 61 62 6c 65 20 3d 20 73 54 61 62 6c 65 2e 7a 3b  able = sTable.z;
14820 0a 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 70  .    p->mode = p
14830 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f 44 45 5f 49  ->cMode = MODE_I
14840 6e 73 65 72 74 3b 0a 20 20 20 20 72 63 20 3d 20  nsert;.    rc = 
14850 73 68 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62  shell_exec(p->db
14860 2c 20 73 53 65 6c 65 63 74 2e 7a 2c 20 73 68 65  , sSelect.z, she
14870 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20  ll_callback, p, 
14880 30 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26  0);.    if( (rc&
14890 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
148a0 52 52 55 50 54 20 29 7b 0a 20 20 20 20 20 20 72  RRUPT ){.      r
148b0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
148c0 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 43 4f 52 52 55  , "/****** CORRU
148d0 50 54 49 4f 4e 20 45 52 52 4f 52 20 2a 2a 2a 2a  PTION ERROR ****
148e0 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ***/\n");.      
148f0 74 6f 67 67 6c 65 53 65 6c 65 63 74 4f 72 64 65  toggleSelectOrde
14900 72 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20  r(p->db);.      
14910 73 68 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62  shell_exec(p->db
14920 2c 20 73 53 65 6c 65 63 74 2e 7a 2c 20 73 68 65  , sSelect.z, she
14930 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20  ll_callback, p, 
14940 30 29 3b 0a 20 20 20 20 20 20 74 6f 67 67 6c 65  0);.      toggle
14950 53 65 6c 65 63 74 4f 72 64 65 72 28 70 2d 3e 64  SelectOrder(p->d
14960 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  b);.    }.    p-
14970 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d 20 73 61  >zDestTable = sa
14980 76 65 64 44 65 73 74 54 61 62 6c 65 3b 0a 20 20  vedDestTable;.  
14990 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 73 61 76 65    p->mode = save
149a0 64 4d 6f 64 65 3b 0a 20 20 20 20 66 72 65 65 54  dMode;.    freeT
149b0 65 78 74 28 26 73 54 61 62 6c 65 29 3b 0a 20 20  ext(&sTable);.  
149c0 20 20 66 72 65 65 54 65 78 74 28 26 73 53 65 6c    freeText(&sSel
149d0 65 63 74 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ect);.    if( rc
149e0 20 29 20 70 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20   ) p->nErr++;.  
149f0 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
14a00 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 7a 51 75 65 72  ./*.** Run zQuer
14a10 79 2e 20 20 55 73 65 20 64 75 6d 70 5f 63 61 6c  y.  Use dump_cal
14a20 6c 62 61 63 6b 28 29 20 61 73 20 74 68 65 20 63  lback() as the c
14a30 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20  allback routine 
14a40 73 6f 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  so that.** the c
14a50 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 71  ontents of the q
14a60 75 65 72 79 20 61 72 65 20 6f 75 74 70 75 74 20  uery are output 
14a70 61 73 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  as SQL statement
14a80 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 77 65 20 67  s..**.** If we g
14a90 65 74 20 61 20 53 51 4c 49 54 45 5f 43 4f 52 52  et a SQLITE_CORR
14aa0 55 50 54 20 65 72 72 6f 72 2c 20 72 65 72 75 6e  UPT error, rerun
14ab0 20 74 68 65 20 71 75 65 72 79 20 61 66 74 65 72   the query after
14ac0 20 61 70 70 65 6e 64 69 6e 67 0a 2a 2a 20 22 4f   appending.** "O
14ad0 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
14ae0 53 43 22 20 74 6f 20 74 68 65 20 65 6e 64 2e 0a  SC" to the end..
14af0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 72 75  */.static int ru
14b00 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71 75  n_schema_dump_qu
14b10 65 72 79 28 0a 20 20 53 68 65 6c 6c 53 74 61 74  ery(.  ShellStat
14b20 65 20 2a 70 2c 0a 20 20 63 6f 6e 73 74 20 63 68  e *p,.  const ch
14b30 61 72 20 2a 7a 51 75 65 72 79 0a 29 7b 0a 20 20  ar *zQuery.){.  
14b40 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a  int rc;.  char *
14b50 7a 45 72 72 20 3d 20 30 3b 0a 20 20 72 63 20 3d  zErr = 0;.  rc =
14b60 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
14b70 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 64 75 6d  >db, zQuery, dum
14b80 70 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 26  p_callback, p, &
14b90 7a 45 72 72 29 3b 0a 20 20 69 66 28 20 72 63 3d  zErr);.  if( rc=
14ba0 3d 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20  =SQLITE_CORRUPT 
14bb0 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 51 32  ){.    char *zQ2
14bc0 3b 0a 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20  ;.    int len = 
14bd0 73 74 72 6c 65 6e 33 30 28 7a 51 75 65 72 79 29  strlen30(zQuery)
14be0 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  ;.    raw_printf
14bf0 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a  (p->out, "/*****
14c00 2a 20 43 4f 52 52 55 50 54 49 4f 4e 20 45 52 52  * CORRUPTION ERR
14c10 4f 52 20 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 29 3b  OR *******/\n");
14c20 0a 20 20 20 20 69 66 28 20 7a 45 72 72 20 29 7b  .    if( zErr ){
14c30 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
14c40 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a  tf(p->out, "/***
14c50 2a 2a 2a 20 25 73 20 2a 2a 2a 2a 2a 2a 2f 5c 6e  *** %s ******/\n
14c60 22 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20 20 20  ", zErr);.      
14c70 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
14c80 72 29 3b 0a 20 20 20 20 20 20 7a 45 72 72 20 3d  r);.      zErr =
14c90 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 51   0;.    }.    zQ
14ca0 32 20 3d 20 6d 61 6c 6c 6f 63 28 20 6c 65 6e 2b  2 = malloc( len+
14cb0 31 30 30 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  100 );.    if( z
14cc0 51 32 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 72  Q2==0 ) return r
14cd0 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  c;.    sqlite3_s
14ce0 6e 70 72 69 6e 74 66 28 6c 65 6e 2b 31 30 30 2c  nprintf(len+100,
14cf0 20 7a 51 32 2c 20 22 25 73 20 4f 52 44 45 52 20   zQ2, "%s ORDER 
14d00 42 59 20 72 6f 77 69 64 20 44 45 53 43 22 2c 20  BY rowid DESC", 
14d10 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 72 63 20  zQuery);.    rc 
14d20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70  = sqlite3_exec(p
14d30 2d 3e 64 62 2c 20 7a 51 32 2c 20 64 75 6d 70 5f  ->db, zQ2, dump_
14d40 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 26 7a 45  callback, p, &zE
14d50 72 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  rr);.    if( rc 
14d60 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
14d70 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a  intf(p->out, "/*
14d80 2a 2a 2a 2a 2a 20 45 52 52 4f 52 3a 20 25 73 20  ***** ERROR: %s 
14d90 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 7a 45 72 72  ******/\n", zErr
14da0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
14db0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
14dc0 43 4f 52 52 55 50 54 3b 0a 20 20 20 20 7d 0a 20  CORRUPT;.    }. 
14dd0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
14de0 7a 45 72 72 29 3b 0a 20 20 20 20 66 72 65 65 28  zErr);.    free(
14df0 7a 51 32 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  zQ2);.  }.  retu
14e00 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
14e10 54 65 78 74 20 6f 66 20 61 20 68 65 6c 70 20 6d  Text of a help m
14e20 65 73 73 61 67 65 0a 2a 2f 0a 73 74 61 74 69 63  essage.*/.static
14e30 20 63 68 61 72 20 7a 48 65 6c 70 5b 5d 20 3d 0a   char zHelp[] =.
14e40 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
14e50 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
14e60 4e 0a 20 20 22 2e 61 75 74 68 20 4f 4e 7c 4f 46  N.  ".auth ON|OF
14e70 46 20 20 20 20 20 20 20 20 20 20 20 53 68 6f 77  F           Show
14e80 20 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c   authorizer call
14e90 62 61 63 6b 73 5c 6e 22 0a 23 65 6e 64 69 66 0a  backs\n".#endif.
14ea0 20 20 22 2e 62 61 63 6b 75 70 20 3f 44 42 3f 20    ".backup ?DB? 
14eb0 46 49 4c 45 20 20 20 20 20 20 42 61 63 6b 75 70  FILE      Backup
14ec0 20 44 42 20 28 64 65 66 61 75 6c 74 20 5c 22 6d   DB (default \"m
14ed0 61 69 6e 5c 22 29 20 74 6f 20 46 49 4c 45 5c 6e  ain\") to FILE\n
14ee0 22 0a 20 20 22 2e 62 61 69 6c 20 6f 6e 7c 6f 66  ".  ".bail on|of
14ef0 66 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 70  f           Stop
14f00 20 61 66 74 65 72 20 68 69 74 74 69 6e 67 20 61   after hitting a
14f10 6e 20 65 72 72 6f 72 2e 20 20 44 65 66 61 75 6c  n error.  Defaul
14f20 74 20 4f 46 46 5c 6e 22 0a 20 20 22 2e 62 69 6e  t OFF\n".  ".bin
14f30 61 72 79 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20  ary on|off      
14f40 20 20 20 54 75 72 6e 20 62 69 6e 61 72 79 20 6f     Turn binary o
14f50 75 74 70 75 74 20 6f 6e 20 6f 72 20 6f 66 66 2e  utput on or off.
14f60 20 20 44 65 66 61 75 6c 74 20 4f 46 46 5c 6e 22    Default OFF\n"
14f70 0a 20 20 22 2e 63 64 20 44 49 52 45 43 54 4f 52  .  ".cd DIRECTOR
14f80 59 20 20 20 20 20 20 20 20 20 20 43 68 61 6e 67  Y          Chang
14f90 65 20 74 68 65 20 77 6f 72 6b 69 6e 67 20 64 69  e the working di
14fa0 72 65 63 74 6f 72 79 20 74 6f 20 44 49 52 45 43  rectory to DIREC
14fb0 54 4f 52 59 5c 6e 22 0a 20 20 22 2e 63 68 61 6e  TORY\n".  ".chan
14fc0 67 65 73 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20  ges on|off      
14fd0 20 20 53 68 6f 77 20 6e 75 6d 62 65 72 20 6f 66    Show number of
14fe0 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79   rows changed by
14ff0 20 53 51 4c 5c 6e 22 0a 20 20 22 2e 63 68 65 63   SQL\n".  ".chec
15000 6b 20 47 4c 4f 42 20 20 20 20 20 20 20 20 20 20  k GLOB          
15010 20 20 46 61 69 6c 20 69 66 20 6f 75 74 70 75 74    Fail if output
15020 20 73 69 6e 63 65 20 2e 74 65 73 74 63 61 73 65   since .testcase
15030 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 5c   does not match\
15040 6e 22 0a 20 20 22 2e 63 6c 6f 6e 65 20 4e 45 57  n".  ".clone NEW
15050 44 42 20 20 20 20 20 20 20 20 20 20 20 43 6c 6f  DB           Clo
15060 6e 65 20 64 61 74 61 20 69 6e 74 6f 20 4e 45 57  ne data into NEW
15070 44 42 20 66 72 6f 6d 20 74 68 65 20 65 78 69 73  DB from the exis
15080 74 69 6e 67 20 64 61 74 61 62 61 73 65 5c 6e 22  ting database\n"
15090 0a 20 20 22 2e 64 61 74 61 62 61 73 65 73 20 20  .  ".databases  
150a0 20 20 20 20 20 20 20 20 20 20 20 4c 69 73 74 20             List 
150b0 6e 61 6d 65 73 20 61 6e 64 20 66 69 6c 65 73 20  names and files 
150c0 6f 66 20 61 74 74 61 63 68 65 64 20 64 61 74 61  of attached data
150d0 62 61 73 65 73 5c 6e 22 0a 20 20 22 2e 64 62 69  bases\n".  ".dbi
150e0 6e 66 6f 20 3f 44 42 3f 20 20 20 20 20 20 20 20  nfo ?DB?        
150f0 20 20 20 53 68 6f 77 20 73 74 61 74 75 73 20 69     Show status i
15100 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
15110 20 74 68 65 20 64 61 74 61 62 61 73 65 5c 6e 22   the database\n"
15120 0a 20 20 22 2e 64 75 6d 70 20 3f 54 41 42 4c 45  .  ".dump ?TABLE
15130 3f 20 2e 2e 2e 20 20 20 20 20 20 44 75 6d 70 20  ? ...      Dump 
15140 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
15150 61 6e 20 53 51 4c 20 74 65 78 74 20 66 6f 72 6d  an SQL text form
15160 61 74 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  at\n".  "       
15170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15180 20 20 49 66 20 54 41 42 4c 45 20 73 70 65 63 69    If TABLE speci
15190 66 69 65 64 2c 20 6f 6e 6c 79 20 64 75 6d 70 20  fied, only dump 
151a0 74 61 62 6c 65 73 20 6d 61 74 63 68 69 6e 67 5c  tables matching\
151b0 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
151d0 49 4b 45 20 70 61 74 74 65 72 6e 20 54 41 42 4c  IKE pattern TABL
151e0 45 2e 5c 6e 22 0a 20 20 22 2e 65 63 68 6f 20 6f  E.\n".  ".echo o
151f0 6e 7c 6f 66 66 20 20 20 20 20 20 20 20 20 20 20  n|off           
15200 54 75 72 6e 20 63 6f 6d 6d 61 6e 64 20 65 63 68  Turn command ech
15210 6f 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20  o on or off\n". 
15220 20 22 2e 65 71 70 20 6f 6e 7c 6f 66 66 7c 66 75   ".eqp on|off|fu
15230 6c 6c 20 20 20 20 20 20 20 45 6e 61 62 6c 65 20  ll       Enable 
15240 6f 72 20 64 69 73 61 62 6c 65 20 61 75 74 6f 6d  or disable autom
15250 61 74 69 63 20 45 58 50 4c 41 49 4e 20 51 55 45  atic EXPLAIN QUE
15260 52 59 20 50 4c 41 4e 5c 6e 22 0a 20 20 22 2e 65  RY PLAN\n".  ".e
15270 78 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20  xit             
15280 20 20 20 20 20 45 78 69 74 20 74 68 69 73 20 70       Exit this p
15290 72 6f 67 72 61 6d 5c 6e 22 0a 20 20 22 2e 65 78  rogram\n".  ".ex
152a0 70 65 72 74 20 20 20 20 20 20 20 20 20 20 20 20  pert            
152b0 20 20 20 20 45 58 50 45 52 49 4d 45 4e 54 41 4c      EXPERIMENTAL
152c0 2e 20 53 75 67 67 65 73 74 20 69 6e 64 65 78 65  . Suggest indexe
152d0 73 20 66 6f 72 20 73 70 65 63 69 66 69 65 64 20  s for specified 
152e0 71 75 65 72 69 65 73 5c 6e 22 0a 2f 2a 20 42 65  queries\n"./* Be
152f0 63 61 75 73 65 20 65 78 70 6c 61 69 6e 20 6d 6f  cause explain mo
15300 64 65 20 63 6f 6d 65 73 20 6f 6e 20 61 75 74 6f  de comes on auto
15310 6d 61 74 69 63 61 6c 6c 79 20 6e 6f 77 2c 20 74  matically now, t
15320 68 65 20 22 2e 65 78 70 6c 61 69 6e 22 20 6d 6f  he ".explain" mo
15330 64 65 0a 2a 2a 20 69 73 20 72 65 6d 6f 76 65 64  de.** is removed
15340 20 66 72 6f 6d 20 74 68 65 20 68 65 6c 70 20 73   from the help s
15350 63 72 65 65 6e 2e 20 20 49 74 20 69 73 20 73 74  creen.  It is st
15360 69 6c 6c 20 73 75 70 70 6f 72 74 65 64 20 66 6f  ill supported fo
15370 72 20 6c 65 67 61 63 79 2c 20 68 6f 77 65 76 65  r legacy, howeve
15380 72 20 2a 2f 0a 2f 2a 22 2e 65 78 70 6c 61 69 6e  r */./*".explain
15390 20 3f 6f 6e 7c 6f 66 66 7c 61 75 74 6f 3f 20 54   ?on|off|auto? T
153a0 75 72 6e 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  urn EXPLAIN outp
153b0 75 74 20 6d 6f 64 65 20 6f 6e 20 6f 72 20 6f 66  ut mode on or of
153c0 66 20 6f 72 20 74 6f 20 61 75 74 6f 6d 61 74 69  f or to automati
153d0 63 5c 6e 22 2a 2f 0a 20 20 22 2e 66 75 6c 6c 73  c\n"*/.  ".fulls
153e0 63 68 65 6d 61 20 3f 2d 2d 69 6e 64 65 6e 74 3f  chema ?--indent?
153f0 20 53 68 6f 77 20 73 63 68 65 6d 61 20 61 6e 64   Show schema and
15400 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
15410 73 71 6c 69 74 65 5f 73 74 61 74 20 74 61 62 6c  sqlite_stat tabl
15420 65 73 5c 6e 22 0a 20 20 22 2e 68 65 61 64 65 72  es\n".  ".header
15430 73 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20 20 20  s on|off        
15440 54 75 72 6e 20 64 69 73 70 6c 61 79 20 6f 66 20  Turn display of 
15450 68 65 61 64 65 72 73 20 6f 6e 20 6f 72 20 6f 66  headers on or of
15460 66 5c 6e 22 0a 20 20 22 2e 68 65 6c 70 20 20 20  f\n".  ".help   
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
15480 68 6f 77 20 74 68 69 73 20 6d 65 73 73 61 67 65  how this message
15490 5c 6e 22 0a 20 20 22 2e 69 6d 70 6f 72 74 20 46  \n".  ".import F
154a0 49 4c 45 20 54 41 42 4c 45 20 20 20 20 20 49 6d  ILE TABLE     Im
154b0 70 6f 72 74 20 64 61 74 61 20 66 72 6f 6d 20 46  port data from F
154c0 49 4c 45 20 69 6e 74 6f 20 54 41 42 4c 45 5c 6e  ILE into TABLE\n
154d0 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ".#ifndef SQLITE
154e0 5f 4f 4d 49 54 5f 54 45 53 54 5f 43 4f 4e 54 52  _OMIT_TEST_CONTR
154f0 4f 4c 0a 20 20 22 2e 69 6d 70 6f 73 74 65 72 20  OL.  ".imposter 
15500 49 4e 44 45 58 20 54 41 42 4c 45 20 20 43 72 65  INDEX TABLE  Cre
15510 61 74 65 20 69 6d 70 6f 73 74 65 72 20 74 61 62  ate imposter tab
15520 6c 65 20 54 41 42 4c 45 20 6f 6e 20 69 6e 64 65  le TABLE on inde
15530 78 20 49 4e 44 45 58 5c 6e 22 0a 23 65 6e 64 69  x INDEX\n".#endi
15540 66 0a 20 20 22 2e 69 6e 64 65 78 65 73 20 3f 54  f.  ".indexes ?T
15550 41 42 4c 45 3f 20 20 20 20 20 20 20 53 68 6f 77  ABLE?       Show
15560 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 69 6e   names of all in
15570 64 65 78 65 73 5c 6e 22 0a 20 20 22 20 20 20 20  dexes\n".  "    
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 20 20 20 20 49 66 20 54 41 42 4c 45 20 73 70       If TABLE sp
155a0 65 63 69 66 69 65 64 2c 20 6f 6e 6c 79 20 73 68  ecified, only sh
155b0 6f 77 20 69 6e 64 65 78 65 73 20 66 6f 72 20 74  ow indexes for t
155c0 61 62 6c 65 73 5c 6e 22 0a 20 20 22 20 20 20 20  ables\n".  "    
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 20 20 20 20 20 6d 61 74 63 68 69 6e 67 20 4c 49       matching LI
155f0 4b 45 20 70 61 74 74 65 72 6e 20 54 41 42 4c 45  KE pattern TABLE
15600 2e 5c 6e 22 0a 23 69 66 64 65 66 20 53 51 4c 49  .\n".#ifdef SQLI
15610 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
15620 45 0a 20 20 22 2e 69 6f 74 72 61 63 65 20 46 49  E.  ".iotrace FI
15630 4c 45 20 20 20 20 20 20 20 20 20 20 45 6e 61 62  LE          Enab
15640 6c 65 20 49 2f 4f 20 64 69 61 67 6e 6f 73 74 69  le I/O diagnosti
15650 63 20 6c 6f 67 67 69 6e 67 20 74 6f 20 46 49 4c  c logging to FIL
15660 45 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e  E\n".#endif.  ".
15670 6c 69 6d 69 74 20 3f 4c 49 4d 49 54 3f 20 3f 56  limit ?LIMIT? ?V
15680 41 4c 3f 20 20 20 44 69 73 70 6c 61 79 20 6f 72  AL?   Display or
15690 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75   change the valu
156a0 65 20 6f 66 20 61 6e 20 53 51 4c 49 54 45 5f 4c  e of an SQLITE_L
156b0 49 4d 49 54 5c 6e 22 0a 20 20 22 2e 6c 69 6e 74  IMIT\n".  ".lint
156c0 20 4f 50 54 49 4f 4e 53 20 20 20 20 20 20 20 20   OPTIONS        
156d0 20 20 52 65 70 6f 72 74 20 70 6f 74 65 6e 74 69    Report potenti
156e0 61 6c 20 73 63 68 65 6d 61 20 69 73 73 75 65 73  al schema issues
156f0 2e 20 4f 70 74 69 6f 6e 73 3a 5c 6e 22 0a 20 20  . Options:\n".  
15700 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
15710 20 20 20 20 20 20 20 20 20 20 66 6b 65 79 2d 69            fkey-i
15720 6e 64 65 78 65 73 20 20 20 20 20 46 69 6e 64 20  ndexes     Find 
15730 6d 69 73 73 69 6e 67 20 66 6f 72 65 69 67 6e 20  missing foreign 
15740 6b 65 79 20 69 6e 64 65 78 65 73 5c 6e 22 0a 23  key indexes\n".#
15750 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
15760 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
15770 4e 0a 20 20 22 2e 6c 6f 61 64 20 46 49 4c 45 20  N.  ".load FILE 
15780 3f 45 4e 54 52 59 3f 20 20 20 20 20 4c 6f 61 64  ?ENTRY?     Load
15790 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69   an extension li
157a0 62 72 61 72 79 5c 6e 22 0a 23 65 6e 64 69 66 0a  brary\n".#endif.
157b0 20 20 22 2e 6c 6f 67 20 46 49 4c 45 7c 6f 66 66    ".log FILE|off
157c0 20 20 20 20 20 20 20 20 20 20 54 75 72 6e 20 6c            Turn l
157d0 6f 67 67 69 6e 67 20 6f 6e 20 6f 72 20 6f 66 66  ogging on or off
157e0 2e 20 20 46 49 4c 45 20 63 61 6e 20 62 65 20 73  .  FILE can be s
157f0 74 64 65 72 72 2f 73 74 64 6f 75 74 5c 6e 22 0a  tderr/stdout\n".
15800 20 20 22 2e 6d 6f 64 65 20 4d 4f 44 45 20 3f 54    ".mode MODE ?T
15810 41 42 4c 45 3f 20 20 20 20 20 53 65 74 20 6f 75  ABLE?     Set ou
15820 74 70 75 74 20 6d 6f 64 65 20 77 68 65 72 65 20  tput mode where 
15830 4d 4f 44 45 20 69 73 20 6f 6e 65 20 6f 66 3a 5c  MODE is one of:\
15840 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
15850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
15860 73 63 69 69 20 20 20 20 43 6f 6c 75 6d 6e 73 2f  scii    Columns/
15870 72 6f 77 73 20 64 65 6c 69 6d 69 74 65 64 20 62  rows delimited b
15880 79 20 30 78 31 46 20 61 6e 64 20 30 78 31 45 5c  y 0x1F and 0x1E\
15890 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
158b0 73 76 20 20 20 20 20 20 43 6f 6d 6d 61 2d 73 65  sv      Comma-se
158c0 70 61 72 61 74 65 64 20 76 61 6c 75 65 73 5c 6e  parated values\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 63 6f                co
158f0 6c 75 6d 6e 20 20 20 4c 65 66 74 2d 61 6c 69 67  lumn   Left-alig
15900 6e 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 20 28 53  ned columns.  (S
15910 65 65 20 2e 77 69 64 74 68 29 5c 6e 22 0a 20 20  ee .width)\n".  
15920 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
15930 20 20 20 20 20 20 20 20 20 20 68 74 6d 6c 20 20            html  
15940 20 20 20 48 54 4d 4c 20 3c 74 61 62 6c 65 3e 20     HTML <table> 
15950 63 6f 64 65 5c 6e 22 0a 20 20 22 20 20 20 20 20  code\n".  "     
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15970 20 20 20 20 69 6e 73 65 72 74 20 20 20 53 51 4c      insert   SQL
15980 20 69 6e 73 65 72 74 20 73 74 61 74 65 6d 65 6e   insert statemen
15990 74 73 20 66 6f 72 20 54 41 42 4c 45 5c 6e 22 0a  ts for TABLE\n".
159a0 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
159b0 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 65              line
159c0 20 20 20 20 20 4f 6e 65 20 76 61 6c 75 65 20 70       One value p
159d0 65 72 20 6c 69 6e 65 5c 6e 22 0a 20 20 22 20 20  er line\n".  "  
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 20 20 20 20 20 6c 69 73 74 20 20 20 20 20         list     
15a00 56 61 6c 75 65 73 20 64 65 6c 69 6d 69 74 65 64  Values delimited
15a10 20 62 79 20 5c 22 7c 5c 22 5c 6e 22 0a 20 20 22   by \"|\"\n".  "
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 20 20 20 20 20 20 20 20 20 71 75 6f 74 65 20 20           quote  
15a40 20 20 45 73 63 61 70 65 20 61 6e 73 77 65 72 73    Escape answers
15a50 20 61 73 20 66 6f 72 20 53 51 4c 5c 6e 22 0a 20   as for SQL\n". 
15a60 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
15a70 20 20 20 20 20 20 20 20 20 20 20 74 61 62 73 20             tabs 
15a80 20 20 20 20 54 61 62 2d 73 65 70 61 72 61 74 65      Tab-separate
15a90 64 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 20  d values\n".  " 
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ab0 20 20 20 20 20 20 20 20 74 63 6c 20 20 20 20 20          tcl     
15ac0 20 54 43 4c 20 6c 69 73 74 20 65 6c 65 6d 65 6e   TCL list elemen
15ad0 74 73 5c 6e 22 0a 20 20 22 2e 6e 75 6c 6c 76 61  ts\n".  ".nullva
15ae0 6c 75 65 20 53 54 52 49 4e 47 20 20 20 20 20 20  lue STRING      
15af0 55 73 65 20 53 54 52 49 4e 47 20 69 6e 20 70 6c  Use STRING in pl
15b00 61 63 65 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75  ace of NULL valu
15b10 65 73 5c 6e 22 0a 20 20 22 2e 6f 6e 63 65 20 46  es\n".  ".once F
15b20 49 4c 45 4e 41 4d 45 20 20 20 20 20 20 20 20 20  ILENAME         
15b30 4f 75 74 70 75 74 20 66 6f 72 20 74 68 65 20 6e  Output for the n
15b40 65 78 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 20  ext SQL command 
15b50 6f 6e 6c 79 20 74 6f 20 46 49 4c 45 4e 41 4d 45  only to FILENAME
15b60 5c 6e 22 0a 20 20 22 2e 6f 70 65 6e 20 3f 4f 50  \n".  ".open ?OP
15b70 54 49 4f 4e 53 3f 20 3f 46 49 4c 45 3f 20 43 6c  TIONS? ?FILE? Cl
15b80 6f 73 65 20 65 78 69 73 74 69 6e 67 20 64 61 74  ose existing dat
15b90 61 62 61 73 65 20 61 6e 64 20 72 65 6f 70 65 6e  abase and reopen
15ba0 20 46 49 4c 45 5c 6e 22 0a 20 20 22 20 20 20 20   FILE\n".  "    
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 20 20 20 20 20 54 68 65 20 2d 2d 6e 65 77 20 6f       The --new o
15bd0 70 74 69 6f 6e 20 73 74 61 72 74 73 20 77 69 74  ption starts wit
15be0 68 20 61 6e 20 65 6d 70 74 79 20 66 69 6c 65 5c  h an empty file\
15bf0 6e 22 0a 20 20 22 2e 6f 75 74 70 75 74 20 3f 46  n".  ".output ?F
15c00 49 4c 45 4e 41 4d 45 3f 20 20 20 20 20 53 65 6e  ILENAME?     Sen
15c10 64 20 6f 75 74 70 75 74 20 74 6f 20 46 49 4c 45  d output to FILE
15c20 4e 41 4d 45 20 6f 72 20 73 74 64 6f 75 74 5c 6e  NAME or stdout\n
15c30 22 0a 20 20 22 2e 70 72 69 6e 74 20 53 54 52 49  ".  ".print STRI
15c40 4e 47 2e 2e 2e 20 20 20 20 20 20 20 50 72 69 6e  NG...       Prin
15c50 74 20 6c 69 74 65 72 61 6c 20 53 54 52 49 4e 47  t literal STRING
15c60 5c 6e 22 0a 20 20 22 2e 70 72 6f 6d 70 74 20 4d  \n".  ".prompt M
15c70 41 49 4e 20 43 4f 4e 54 49 4e 55 45 20 20 52 65  AIN CONTINUE  Re
15c80 70 6c 61 63 65 20 74 68 65 20 73 74 61 6e 64 61  place the standa
15c90 72 64 20 70 72 6f 6d 70 74 73 5c 6e 22 0a 20 20  rd prompts\n".  
15ca0 22 2e 71 75 69 74 20 20 20 20 20 20 20 20 20 20  ".quit          
15cb0 20 20 20 20 20 20 20 20 45 78 69 74 20 74 68 69          Exit thi
15cc0 73 20 70 72 6f 67 72 61 6d 5c 6e 22 0a 20 20 22  s program\n".  "
15cd0 2e 72 65 61 64 20 46 49 4c 45 4e 41 4d 45 20 20  .read FILENAME  
15ce0 20 20 20 20 20 20 20 45 78 65 63 75 74 65 20 53         Execute S
15cf0 51 4c 20 69 6e 20 46 49 4c 45 4e 41 4d 45 5c 6e  QL in FILENAME\n
15d00 22 0a 20 20 22 2e 72 65 73 74 6f 72 65 20 3f 44  ".  ".restore ?D
15d10 42 3f 20 46 49 4c 45 20 20 20 20 20 52 65 73 74  B? FILE     Rest
15d20 6f 72 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 44  ore content of D
15d30 42 20 28 64 65 66 61 75 6c 74 20 5c 22 6d 61 69  B (default \"mai
15d40 6e 5c 22 29 20 66 72 6f 6d 20 46 49 4c 45 5c 6e  n\") from FILE\n
15d50 22 0a 20 20 22 2e 73 61 76 65 20 46 49 4c 45 20  ".  ".save FILE 
15d60 20 20 20 20 20 20 20 20 20 20 20 20 57 72 69 74              Writ
15d70 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
15d80 62 61 73 65 20 69 6e 74 6f 20 46 49 4c 45 5c 6e  base into FILE\n
15d90 22 0a 20 20 22 2e 73 63 61 6e 73 74 61 74 73 20  ".  ".scanstats 
15da0 6f 6e 7c 6f 66 66 20 20 20 20 20 20 54 75 72 6e  on|off      Turn
15db0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63   sqlite3_stmt_sc
15dc0 61 6e 73 74 61 74 75 73 28 29 20 6d 65 74 72 69  anstatus() metri
15dd0 63 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a  cs on or off\n".
15de0 20 20 22 2e 73 63 68 65 6d 61 20 3f 50 41 54 54    ".schema ?PATT
15df0 45 52 4e 3f 20 20 20 20 20 20 53 68 6f 77 20 74  ERN?      Show t
15e00 68 65 20 43 52 45 41 54 45 20 73 74 61 74 65 6d  he CREATE statem
15e10 65 6e 74 73 20 6d 61 74 63 68 69 6e 67 20 50 41  ents matching PA
15e20 54 54 45 52 4e 5c 6e 22 0a 20 20 22 20 20 20 20  TTERN\n".  "    
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 20 20 20 20 20 20 41 64 64 20 2d 2d 69 6e 64 65        Add --inde
15e50 6e 74 20 66 6f 72 20 70 72 65 74 74 79 2d 70 72  nt for pretty-pr
15e60 69 6e 74 69 6e 67 5c 6e 22 0a 20 20 22 2e 73 65  inting\n".  ".se
15e70 6c 66 74 65 73 74 20 3f 2d 2d 69 6e 69 74 3f 20  lftest ?--init? 
15e80 20 20 20 20 52 75 6e 20 74 65 73 74 73 20 64 65      Run tests de
15e90 66 69 6e 65 64 20 69 6e 20 74 68 65 20 53 45 4c  fined in the SEL
15ea0 46 54 45 53 54 20 74 61 62 6c 65 5c 6e 22 0a 20  FTEST table\n". 
15eb0 20 22 2e 73 65 70 61 72 61 74 6f 72 20 43 4f 4c   ".separator COL
15ec0 20 3f 52 4f 57 3f 20 20 20 43 68 61 6e 67 65 20   ?ROW?   Change 
15ed0 74 68 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72  the column separ
15ee0 61 74 6f 72 20 61 6e 64 20 6f 70 74 69 6f 6e 61  ator and optiona
15ef0 6c 6c 79 20 74 68 65 20 72 6f 77 5c 6e 22 0a 20  lly the row\n". 
15f00 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
15f10 20 20 20 20 20 20 20 20 20 20 20 73 65 70 61 72             separ
15f20 61 74 6f 72 20 66 6f 72 20 62 6f 74 68 20 74 68  ator for both th
15f30 65 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 61 6e  e output mode an
15f40 64 20 2e 69 6d 70 6f 72 74 5c 6e 22 0a 23 69 66  d .import\n".#if
15f50 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
15f60 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a  ENABLE_SESSION).
15f70 20 20 22 2e 73 65 73 73 69 6f 6e 20 43 4d 44 20    ".session CMD 
15f80 2e 2e 2e 20 20 20 20 20 20 20 43 72 65 61 74 65  ...       Create
15f90 20 6f 72 20 63 6f 6e 74 72 6f 6c 20 73 65 73 73   or control sess
15fa0 69 6f 6e 73 5c 6e 22 0a 23 65 6e 64 69 66 0a 20  ions\n".#endif. 
15fb0 20 22 2e 73 68 61 33 73 75 6d 20 3f 4f 50 54 49   ".sha3sum ?OPTI
15fc0 4f 4e 53 2e 2e 2e 3f 20 20 43 6f 6d 70 75 74 65  ONS...?  Compute
15fd0 20 61 20 53 48 41 33 20 68 61 73 68 20 6f 66 20   a SHA3 hash of 
15fe0 64 61 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74  database content
15ff0 5c 6e 22 0a 20 20 22 2e 73 68 65 6c 6c 20 43 4d  \n".  ".shell CM
16000 44 20 41 52 47 53 2e 2e 2e 20 20 20 20 20 52 75  D ARGS...     Ru
16010 6e 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20 69 6e  n CMD ARGS... in
16020 20 61 20 73 79 73 74 65 6d 20 73 68 65 6c 6c 5c   a system shell\
16030 6e 22 0a 20 20 22 2e 73 68 6f 77 20 20 20 20 20  n".  ".show     
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 53 68 6f               Sho
16050 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  w the current va
16060 6c 75 65 73 20 66 6f 72 20 76 61 72 69 6f 75 73  lues for various
16070 20 73 65 74 74 69 6e 67 73 5c 6e 22 0a 20 20 22   settings\n".  "
16080 2e 73 74 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f 20  .stats ?on|off? 
16090 20 20 20 20 20 20 20 53 68 6f 77 20 73 74 61 74         Show stat
160a0 73 20 6f 72 20 74 75 72 6e 20 73 74 61 74 73 20  s or turn stats 
160b0 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20 20 22  on or off\n".  "
160c0 2e 73 79 73 74 65 6d 20 43 4d 44 20 41 52 47 53  .system CMD ARGS
160d0 2e 2e 2e 20 20 20 20 52 75 6e 20 43 4d 44 20 41  ...    Run CMD A
160e0 52 47 53 2e 2e 2e 20 69 6e 20 61 20 73 79 73 74  RGS... in a syst
160f0 65 6d 20 73 68 65 6c 6c 5c 6e 22 0a 20 20 22 2e  em shell\n".  ".
16100 74 61 62 6c 65 73 20 3f 54 41 42 4c 45 3f 20 20  tables ?TABLE?  
16110 20 20 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73        List names
16120 20 6f 66 20 74 61 62 6c 65 73 5c 6e 22 0a 20 20   of tables\n".  
16130 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
16140 20 20 20 20 20 20 20 20 20 20 49 66 20 54 41 42            If TAB
16150 4c 45 20 73 70 65 63 69 66 69 65 64 2c 20 6f 6e  LE specified, on
16160 6c 79 20 6c 69 73 74 20 74 61 62 6c 65 73 20 6d  ly list tables m
16170 61 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22 20 20  atching\n".  "  
16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16190 20 20 20 20 20 20 20 4c 49 4b 45 20 70 61 74 74         LIKE patt
161a0 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 20 20  ern TABLE.\n".  
161b0 22 2e 74 65 73 74 63 61 73 65 20 4e 41 4d 45 20  ".testcase NAME 
161c0 20 20 20 20 20 20 20 20 42 65 67 69 6e 20 72 65          Begin re
161d0 64 69 72 65 63 74 69 6e 67 20 6f 75 74 70 75 74  directing output
161e0 20 74 6f 20 27 74 65 73 74 63 61 73 65 2d 6f 75   to 'testcase-ou
161f0 74 2e 74 78 74 27 5c 6e 22 0a 20 20 22 2e 74 69  t.txt'\n".  ".ti
16200 6d 65 6f 75 74 20 4d 53 20 20 20 20 20 20 20 20  meout MS        
16210 20 20 20 20 54 72 79 20 6f 70 65 6e 69 6e 67 20      Try opening 
16220 6c 6f 63 6b 65 64 20 74 61 62 6c 65 73 20 66 6f  locked tables fo
16230 72 20 4d 53 20 6d 69 6c 6c 69 73 65 63 6f 6e 64  r MS millisecond
16240 73 5c 6e 22 0a 20 20 22 2e 74 69 6d 65 72 20 6f  s\n".  ".timer o
16250 6e 7c 6f 66 66 20 20 20 20 20 20 20 20 20 20 54  n|off          T
16260 75 72 6e 20 53 51 4c 20 74 69 6d 65 72 20 6f 6e  urn SQL timer on
16270 20 6f 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 74   or off\n".  ".t
16280 72 61 63 65 20 46 49 4c 45 7c 6f 66 66 20 20 20  race FILE|off   
16290 20 20 20 20 20 4f 75 74 70 75 74 20 65 61 63 68       Output each
162a0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61   SQL statement a
162b0 73 20 69 74 20 69 73 20 72 75 6e 5c 6e 22 0a 20  s it is run\n". 
162c0 20 22 2e 76 66 73 69 6e 66 6f 20 3f 41 55 58 3f   ".vfsinfo ?AUX?
162d0 20 20 20 20 20 20 20 20 20 49 6e 66 6f 72 6d 61           Informa
162e0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 74  tion about the t
162f0 6f 70 2d 6c 65 76 65 6c 20 56 46 53 5c 6e 22 0a  op-level VFS\n".
16300 20 20 22 2e 76 66 73 6c 69 73 74 20 20 20 20 20    ".vfslist     
16310 20 20 20 20 20 20 20 20 20 20 4c 69 73 74 20 61            List a
16320 6c 6c 20 61 76 61 69 6c 61 62 6c 65 20 56 46 53  ll available VFS
16330 65 73 5c 6e 22 0a 20 20 22 2e 76 66 73 6e 61 6d  es\n".  ".vfsnam
16340 65 20 3f 41 55 58 3f 20 20 20 20 20 20 20 20 20  e ?AUX?         
16350 50 72 69 6e 74 20 74 68 65 20 6e 61 6d 65 20 6f  Print the name o
16360 66 20 74 68 65 20 56 46 53 20 73 74 61 63 6b 5c  f the VFS stack\
16370 6e 22 0a 20 20 22 2e 77 69 64 74 68 20 4e 55 4d  n".  ".width NUM
16380 31 20 4e 55 4d 32 20 2e 2e 2e 20 20 20 53 65 74  1 NUM2 ...   Set
16390 20 63 6f 6c 75 6d 6e 20 77 69 64 74 68 73 20 66   column widths f
163a0 6f 72 20 5c 22 63 6f 6c 75 6d 6e 5c 22 20 6d 6f  or \"column\" mo
163b0 64 65 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  de\n".  "       
163c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163d0 20 20 4e 65 67 61 74 69 76 65 20 76 61 6c 75 65    Negative value
163e0 73 20 72 69 67 68 74 2d 6a 75 73 74 69 66 79 5c  s right-justify\
163f0 6e 22 0a 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  n".;..#if define
16400 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
16410 53 45 53 53 49 4f 4e 29 0a 2f 2a 0a 2a 2a 20 50  SESSION)./*.** P
16420 72 69 6e 74 20 68 65 6c 70 20 69 6e 66 6f 72 6d  rint help inform
16430 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 22 2e  ation for the ".
16440 73 65 73 73 69 6f 6e 73 22 20 63 6f 6d 6d 61 6e  sessions" comman
16450 64 0a 2a 2f 0a 76 6f 69 64 20 73 65 73 73 69 6f  d.*/.void sessio
16460 6e 5f 68 65 6c 70 28 53 68 65 6c 6c 53 74 61 74  n_help(ShellStat
16470 65 20 2a 70 29 7b 0a 20 20 72 61 77 5f 70 72 69  e *p){.  raw_pri
16480 6e 74 66 28 70 2d 3e 6f 75 74 2c 0a 20 20 20 20  ntf(p->out,.    
16490 22 2e 73 65 73 73 69 6f 6e 20 3f 4e 41 4d 45 3f  ".session ?NAME?
164a0 20 53 55 42 43 4f 4d 4d 41 4e 44 20 3f 41 52 47   SUBCOMMAND ?ARG
164b0 53 2e 2e 2e 3f 5c 6e 22 0a 20 20 20 20 22 49 66  S...?\n".    "If
164c0 20 3f 4e 41 4d 45 3f 20 69 73 20 6f 6d 69 74 74   ?NAME? is omitt
164d0 65 64 2c 20 74 68 65 20 66 69 72 73 74 20 64 65  ed, the first de
164e0 66 69 6e 65 64 20 73 65 73 73 69 6f 6e 20 69 73  fined session is
164f0 20 75 73 65 64 2e 5c 6e 22 0a 20 20 20 20 22 53   used.\n".    "S
16500 75 62 63 6f 6d 6d 61 6e 64 73 3a 5c 6e 22 0a 20  ubcommands:\n". 
16510 20 20 20 22 20 20 20 61 74 74 61 63 68 20 54 41     "   attach TA
16520 42 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 20  BLE             
16530 41 74 74 61 63 68 20 54 41 42 4c 45 5c 6e 22 0a  Attach TABLE\n".
16540 20 20 20 20 22 20 20 20 63 68 61 6e 67 65 73 65      "   changese
16550 74 20 46 49 4c 45 20 20 20 20 20 20 20 20 20 20  t FILE          
16560 20 57 72 69 74 65 20 61 20 63 68 61 6e 67 65 73   Write a changes
16570 65 74 20 69 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a  et into FILE\n".
16580 20 20 20 20 22 20 20 20 63 6c 6f 73 65 20 20 20      "   close   
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 43 6c 6f 73 65 20 6f 6e 65 20 73 65 73 73 69   Close one sessi
165b0 6f 6e 5c 6e 22 0a 20 20 20 20 22 20 20 20 65 6e  on\n".    "   en
165c0 61 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f 20 20  able ?BOOLEAN?  
165d0 20 20 20 20 20 20 20 53 65 74 20 6f 72 20 71 75         Set or qu
165e0 65 72 79 20 74 68 65 20 65 6e 61 62 6c 65 20 62  ery the enable b
165f0 69 74 5c 6e 22 0a 20 20 20 20 22 20 20 20 66 69  it\n".    "   fi
16600 6c 74 65 72 20 47 4c 4f 42 2e 2e 2e 20 20 20 20  lter GLOB...    
16610 20 20 20 20 20 20 20 52 65 6a 65 63 74 20 74 61         Reject ta
16620 62 6c 65 73 20 6d 61 74 63 68 69 6e 67 20 47 4c  bles matching GL
16630 4f 42 73 5c 6e 22 0a 20 20 20 20 22 20 20 20 69  OBs\n".    "   i
16640 6e 64 69 72 65 63 74 20 3f 42 4f 4f 4c 45 41 4e  ndirect ?BOOLEAN
16650 3f 20 20 20 20 20 20 20 4d 61 72 6b 20 6f 72 20  ?       Mark or 
16660 71 75 65 72 79 20 74 68 65 20 69 6e 64 69 72 65  query the indire
16670 63 74 20 73 74 61 74 75 73 5c 6e 22 0a 20 20 20  ct status\n".   
16680 20 22 20 20 20 69 73 65 6d 70 74 79 20 20 20 20   "   isempty    
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 51 75                Qu
166a0 65 72 79 20 77 68 65 74 68 65 72 20 74 68 65 20  ery whether the 
166b0 73 65 73 73 69 6f 6e 20 69 73 20 65 6d 70 74 79  session is empty
166c0 5c 6e 22 0a 20 20 20 20 22 20 20 20 6c 69 73 74  \n".    "   list
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166e0 20 20 20 20 20 4c 69 73 74 20 63 75 72 72 65 6e       List curren
166f0 74 6c 79 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e  tly open session
16700 20 6e 61 6d 65 73 5c 6e 22 0a 20 20 20 20 22 20   names\n".    " 
16710 20 20 6f 70 65 6e 20 44 42 20 4e 41 4d 45 20 20    open DB NAME  
16720 20 20 20 20 20 20 20 20 20 20 20 4f 70 65 6e 20             Open 
16730 61 20 6e 65 77 20 73 65 73 73 69 6f 6e 20 6f 6e  a new session on
16740 20 44 42 5c 6e 22 0a 20 20 20 20 22 20 20 20 70   DB\n".    "   p
16750 61 74 63 68 73 65 74 20 46 49 4c 45 20 20 20 20  atchset FILE    
16760 20 20 20 20 20 20 20 20 57 72 69 74 65 20 61 20          Write a 
16770 70 61 74 63 68 73 65 74 20 69 6e 74 6f 20 46 49  patchset into FI
16780 4c 45 5c 6e 22 0a 20 20 29 3b 0a 7d 0a 23 65 6e  LE\n".  );.}.#en
16790 64 69 66 0a 0a 0a 2f 2a 20 46 6f 72 77 61 72 64  dif.../* Forward
167a0 20 72 65 66 65 72 65 6e 63 65 20 2a 2f 0a 73 74   reference */.st
167b0 61 74 69 63 20 69 6e 74 20 70 72 6f 63 65 73 73  atic int process
167c0 5f 69 6e 70 75 74 28 53 68 65 6c 6c 53 74 61 74  _input(ShellStat
167d0 65 20 2a 70 2c 20 46 49 4c 45 20 2a 69 6e 29 3b  e *p, FILE *in);
167e0 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65  ../*.** Read the
167f0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 66 69 6c 65   content of file
16800 20 7a 4e 61 6d 65 20 69 6e 74 6f 20 6d 65 6d 6f   zName into memo
16810 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ry obtained from
16820 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36   sqlite3_malloc6
16830 34 28 29 0a 2a 2a 20 61 6e 64 20 72 65 74 75 72  4().** and retur
16840 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  n a pointer to t
16850 68 65 20 62 75 66 66 65 72 2e 20 54 68 65 20 63  he buffer. The c
16860 61 6c 6c 65 72 20 69 73 20 72 65 73 70 6f 6e 73  aller is respons
16870 69 62 6c 65 20 66 6f 72 20 66 72 65 65 69 6e 67  ible for freeing
16880 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 2e 0a  .** the memory..
16890 2a 2a 0a 2a 2a 20 49 66 20 70 61 72 61 6d 65 74  **.** If paramet
168a0 65 72 20 70 6e 42 79 74 65 20 69 73 20 6e 6f 74  er pnByte is not
168b0 20 4e 55 4c 4c 2c 20 28 2a 70 6e 42 79 74 65 29   NULL, (*pnByte)
168c0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
168d0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 0a 2a  umber of bytes.*
168e0 2a 20 72 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 46 6f  * read..**.** Fo
168f0 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 2c 20 61  r convenience, a
16900 20 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 6f 72 20   nul-terminator 
16910 62 79 74 65 20 69 73 20 61 6c 77 61 79 73 20 61  byte is always a
16920 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 64  ppended to the d
16930 61 74 61 20 72 65 61 64 0a 2a 2a 20 66 72 6f 6d  ata read.** from
16940 20 74 68 65 20 66 69 6c 65 20 62 65 66 6f 72 65   the file before
16950 20 74 68 65 20 62 75 66 66 65 72 20 69 73 20 72   the buffer is r
16960 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 62 79  eturned. This by
16970 74 65 20 69 73 20 6e 6f 74 20 69 6e 63 6c 75 64  te is not includ
16980 65 64 20 69 6e 0a 2a 2a 20 74 68 65 20 66 69 6e  ed in.** the fin
16990 61 6c 20 76 61 6c 75 65 20 6f 66 20 28 2a 70 6e  al value of (*pn
169a0 42 79 74 65 29 2c 20 69 66 20 61 70 70 6c 69 63  Byte), if applic
169b0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 55 4c 4c  able..**.** NULL
169c0 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
169d0 61 6e 79 20 65 72 72 6f 72 20 69 73 20 65 6e 63  any error is enc
169e0 6f 75 6e 74 65 72 65 64 2e 20 54 68 65 20 66 69  ountered. The fi
169f0 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 2a 70 6e  nal value of *pn
16a00 42 79 74 65 0a 2a 2a 20 69 73 20 75 6e 64 65 66  Byte.** is undef
16a10 69 6e 65 64 20 69 6e 20 74 68 69 73 20 63 61 73  ined in this cas
16a20 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  e..*/.static cha
16a30 72 20 2a 72 65 61 64 46 69 6c 65 28 63 6f 6e 73  r *readFile(cons
16a40 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 69  t char *zName, i
16a50 6e 74 20 2a 70 6e 42 79 74 65 29 7b 0a 20 20 46  nt *pnByte){.  F
16a60 49 4c 45 20 2a 69 6e 20 3d 20 66 6f 70 65 6e 28  ILE *in = fopen(
16a70 7a 4e 61 6d 65 2c 20 22 72 62 22 29 3b 0a 20 20  zName, "rb");.  
16a80 6c 6f 6e 67 20 6e 49 6e 3b 0a 20 20 73 69 7a 65  long nIn;.  size
16a90 5f 74 20 6e 52 65 61 64 3b 0a 20 20 63 68 61 72  _t nRead;.  char
16aa0 20 2a 70 42 75 66 3b 0a 20 20 69 66 28 20 69 6e   *pBuf;.  if( in
16ab0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
16ac0 20 20 66 73 65 65 6b 28 69 6e 2c 20 30 2c 20 53    fseek(in, 0, S
16ad0 45 45 4b 5f 45 4e 44 29 3b 0a 20 20 6e 49 6e 20  EEK_END);.  nIn 
16ae0 3d 20 66 74 65 6c 6c 28 69 6e 29 3b 0a 20 20 72  = ftell(in);.  r
16af0 65 77 69 6e 64 28 69 6e 29 3b 0a 20 20 70 42 75  ewind(in);.  pBu
16b00 66 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  f = sqlite3_mall
16b10 6f 63 36 34 28 20 6e 49 6e 2b 31 20 29 3b 0a 20  oc64( nIn+1 );. 
16b20 20 69 66 28 20 70 42 75 66 3d 3d 30 20 29 20 72   if( pBuf==0 ) r
16b30 65 74 75 72 6e 20 30 3b 0a 20 20 6e 52 65 61 64  eturn 0;.  nRead
16b40 20 3d 20 66 72 65 61 64 28 70 42 75 66 2c 20 6e   = fread(pBuf, n
16b50 49 6e 2c 20 31 2c 20 69 6e 29 3b 0a 20 20 66 63  In, 1, in);.  fc
16b60 6c 6f 73 65 28 69 6e 29 3b 0a 20 20 69 66 28 20  lose(in);.  if( 
16b70 6e 52 65 61 64 21 3d 31 20 29 7b 0a 20 20 20 20  nRead!=1 ){.    
16b80 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 42 75  sqlite3_free(pBu
16b90 66 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  f);.    return 0
16ba0 3b 0a 20 20 7d 0a 20 20 70 42 75 66 5b 6e 49 6e  ;.  }.  pBuf[nIn
16bb0 5d 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 6e 42  ] = 0;.  if( pnB
16bc0 79 74 65 20 29 20 2a 70 6e 42 79 74 65 20 3d 20  yte ) *pnByte = 
16bd0 6e 49 6e 3b 0a 20 20 72 65 74 75 72 6e 20 70 42  nIn;.  return pB
16be0 75 66 3b 0a 7d 0a 0a 23 69 66 20 64 65 66 69 6e  uf;.}..#if defin
16bf0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
16c00 5f 53 45 53 53 49 4f 4e 29 0a 2f 2a 0a 2a 2a 20  _SESSION)./*.** 
16c10 43 6c 6f 73 65 20 61 20 73 69 6e 67 6c 65 20 4f  Close a single O
16c20 70 65 6e 53 65 73 73 69 6f 6e 20 6f 62 6a 65 63  penSession objec
16c30 74 20 61 6e 64 20 72 65 6c 65 61 73 65 20 61 6c  t and release al
16c40 6c 20 6f 66 20 69 74 73 20 61 73 73 6f 63 69 61  l of its associa
16c50 74 65 64 0a 2a 2a 20 72 65 73 6f 75 72 63 65 73  ted.** resources
16c60 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
16c70 20 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 28 4f   session_close(O
16c80 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70 53 65 73  penSession *pSes
16c90 73 69 6f 6e 29 7b 0a 20 20 69 6e 74 20 69 3b 0a  sion){.  int i;.
16ca0 20 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e    sqlite3session
16cb0 5f 64 65 6c 65 74 65 28 70 53 65 73 73 69 6f 6e  _delete(pSession
16cc0 2d 3e 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  ->p);.  sqlite3_
16cd0 66 72 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e 7a  free(pSession->z
16ce0 4e 61 6d 65 29 3b 0a 20 20 66 6f 72 28 69 3d 30  Name);.  for(i=0
16cf0 3b 20 69 3c 70 53 65 73 73 69 6f 6e 2d 3e 6e 46  ; i<pSession->nF
16d00 69 6c 74 65 72 3b 20 69 2b 2b 29 7b 0a 20 20 20  ilter; i++){.   
16d10 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53   sqlite3_free(pS
16d20 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72  ession->azFilter
16d30 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  [i]);.  }.  sqli
16d40 74 65 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f  te3_free(pSessio
16d50 6e 2d 3e 61 7a 46 69 6c 74 65 72 29 3b 0a 20 20  n->azFilter);.  
16d60 6d 65 6d 73 65 74 28 70 53 65 73 73 69 6f 6e 2c  memset(pSession,
16d70 20 30 2c 20 73 69 7a 65 6f 66 28 4f 70 65 6e 53   0, sizeof(OpenS
16d80 65 73 73 69 6f 6e 29 29 3b 0a 7d 0a 23 65 6e 64  ession));.}.#end
16d90 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20  if../*.** Close 
16da0 61 6c 6c 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20  all OpenSession 
16db0 6f 62 6a 65 63 74 73 20 61 6e 64 20 72 65 6c 65  objects and rele
16dc0 61 73 65 20 61 6c 6c 20 61 73 73 6f 63 69 61 74  ase all associat
16dd0 65 64 20 72 65 73 6f 75 72 63 65 73 2e 0a 2a 2f  ed resources..*/
16de0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
16df0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49  ITE_ENABLE_SESSI
16e00 4f 4e 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ON).static void 
16e10 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c  session_close_al
16e20 6c 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29  l(ShellState *p)
16e30 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72  {.  int i;.  for
16e40 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 53 65 73 73  (i=0; i<p->nSess
16e50 69 6f 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73  ion; i++){.    s
16e60 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 28 26 70 2d  ession_close(&p-
16e70 3e 61 53 65 73 73 69 6f 6e 5b 69 5d 29 3b 0a 20  >aSession[i]);. 
16e80 20 7d 0a 20 20 70 2d 3e 6e 53 65 73 73 69 6f 6e   }.  p->nSession
16e90 20 3d 20 30 3b 0a 7d 0a 23 65 6c 73 65 0a 23 20   = 0;.}.#else.# 
16ea0 64 65 66 69 6e 65 20 73 65 73 73 69 6f 6e 5f 63  define session_c
16eb0 6c 6f 73 65 5f 61 6c 6c 28 58 29 0a 23 65 6e 64  lose_all(X).#end
16ec0 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d  if../*.** Implem
16ed0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
16ee0 78 46 69 6c 74 65 72 20 66 75 6e 63 74 69 6f 6e  xFilter function
16ef0 20 66 6f 72 20 61 6e 20 6f 70 65 6e 20 73 65 73   for an open ses
16f00 73 69 6f 6e 2e 20 20 4f 6d 69 74 0a 2a 2a 20 61  sion.  Omit.** a
16f10 6e 79 20 74 61 62 6c 65 73 20 6e 61 6d 65 64 20  ny tables named 
16f20 62 79 20 22 2e 73 65 73 73 69 6f 6e 20 66 69 6c  by ".session fil
16f30 74 65 72 22 20 62 75 74 20 6c 65 74 20 61 6c 6c  ter" but let all
16f40 20 6f 74 68 65 72 20 74 61 62 6c 65 20 74 68 72   other table thr
16f50 6f 75 67 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ough..*/.#if def
16f60 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
16f70 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 73 74 61 74  LE_SESSION).stat
16f80 69 63 20 69 6e 74 20 73 65 73 73 69 6f 6e 5f 66  ic int session_f
16f90 69 6c 74 65 72 28 76 6f 69 64 20 2a 70 43 74 78  ilter(void *pCtx
16fa0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54  , const char *zT
16fb0 61 62 29 7b 0a 20 20 4f 70 65 6e 53 65 73 73 69  ab){.  OpenSessi
16fc0 6f 6e 20 2a 70 53 65 73 73 69 6f 6e 20 3d 20 28  on *pSession = (
16fd0 4f 70 65 6e 53 65 73 73 69 6f 6e 2a 29 70 43 74  OpenSession*)pCt
16fe0 78 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f  x;.  int i;.  fo
16ff0 72 28 69 3d 30 3b 20 69 3c 70 53 65 73 73 69 6f  r(i=0; i<pSessio
17000 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20 69 2b 2b 29  n->nFilter; i++)
17010 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
17020 33 5f 73 74 72 67 6c 6f 62 28 70 53 65 73 73 69  3_strglob(pSessi
17030 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 5b 69 5d 2c  on->azFilter[i],
17040 20 7a 54 61 62 29 3d 3d 30 20 29 20 72 65 74 75   zTab)==0 ) retu
17050 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75  rn 0;.  }.  retu
17060 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
17070 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72 65 20  /*.** Make sure 
17080 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
17090 6f 70 65 6e 2e 20 20 49 66 20 69 74 20 69 73 20  open.  If it is 
170a0 6e 6f 74 2c 20 74 68 65 6e 20 6f 70 65 6e 20 69  not, then open i
170b0 74 2e 20 20 49 66 0a 2a 2a 20 74 68 65 20 64 61  t.  If.** the da
170c0 74 61 62 61 73 65 20 66 61 69 6c 73 20 74 6f 20  tabase fails to 
170d0 6f 70 65 6e 2c 20 70 72 69 6e 74 20 61 6e 20 65  open, print an e
170e0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 61 6e 64  rror message and
170f0 20 65 78 69 74 2e 0a 2a 2f 0a 73 74 61 74 69 63   exit..*/.static
17100 20 76 6f 69 64 20 6f 70 65 6e 5f 64 62 28 53 68   void open_db(Sh
17110 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 69 6e 74  ellState *p, int
17120 20 6b 65 65 70 41 6c 69 76 65 29 7b 0a 20 20 69   keepAlive){.  i
17130 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b 0a 20  f( p->db==0 ){. 
17140 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69     sqlite3_initi
17150 61 6c 69 7a 65 28 29 3b 0a 20 20 20 20 73 71 6c  alize();.    sql
17160 69 74 65 33 5f 6f 70 65 6e 28 70 2d 3e 7a 44 62  ite3_open(p->zDb
17170 46 69 6c 65 6e 61 6d 65 2c 20 26 70 2d 3e 64 62  Filename, &p->db
17180 29 3b 0a 20 20 20 20 67 6c 6f 62 61 6c 44 62 20  );.    globalDb 
17190 3d 20 70 2d 3e 64 62 3b 0a 20 20 20 20 69 66 28  = p->db;.    if(
171a0 20 70 2d 3e 64 62 3d 3d 30 20 7c 7c 20 53 51 4c   p->db==0 || SQL
171b0 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 5f  ITE_OK!=sqlite3_
171c0 65 72 72 63 6f 64 65 28 70 2d 3e 64 62 29 20 29  errcode(p->db) )
171d0 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
171e0 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
171f0 72 3a 20 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65  r: unable to ope
17200 6e 20 64 61 74 61 62 61 73 65 20 5c 22 25 73 5c  n database \"%s\
17210 22 3a 20 25 73 5c 6e 22 2c 0a 20 20 20 20 20 20  ": %s\n",.      
17220 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e 61      p->zDbFilena
17230 6d 65 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  me, sqlite3_errm
17240 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20  sg(p->db));.    
17250 20 20 69 66 28 20 6b 65 65 70 41 6c 69 76 65 20    if( keepAlive 
17260 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  ) return;.      
17270 65 78 69 74 28 31 29 3b 0a 20 20 20 20 7d 0a 23  exit(1);.    }.#
17280 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
17290 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
172a0 4e 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e  N.    sqlite3_en
172b0 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  able_load_extens
172c0 69 6f 6e 28 70 2d 3e 64 62 2c 20 31 29 3b 0a 23  ion(p->db, 1);.#
172d0 65 6e 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65  endif.    sqlite
172e0 33 5f 66 69 6c 65 69 6f 5f 69 6e 69 74 28 70 2d  3_fileio_init(p-
172f0 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  >db, 0, 0);.    
17300 73 71 6c 69 74 65 33 5f 73 68 61 74 68 72 65 65  sqlite3_shathree
17310 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 30 2c 20  _init(p->db, 0, 
17320 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
17330 63 6f 6d 70 6c 65 74 69 6f 6e 5f 69 6e 69 74 28  completion_init(
17340 70 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20  p->db, 0, 0);.  
17350 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
17360 5f 66 75 6e 63 74 69 6f 6e 28 70 2d 3e 64 62 2c  _function(p->db,
17370 20 22 73 68 65 6c 6c 5f 61 64 64 5f 73 63 68 65   "shell_add_sche
17380 6d 61 22 2c 20 32 2c 20 53 51 4c 49 54 45 5f 55  ma", 2, SQLITE_U
17390 54 46 38 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  TF8, 0,.        
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173b0 20 20 20 20 73 68 65 6c 6c 41 64 64 53 63 68 65      shellAddSche
173c0 6d 61 4e 61 6d 65 2c 20 30 2c 20 30 29 3b 0a 20  maName, 0, 0);. 
173d0 20 7d 0a 7d 0a 0a 23 69 66 20 48 41 56 45 5f 52   }.}..#if HAVE_R
173e0 45 41 44 4c 49 4e 45 20 7c 7c 20 48 41 56 45 5f  EADLINE || HAVE_
173f0 45 44 49 54 4c 49 4e 45 0a 2f 2a 0a 2a 2a 20 52  EDITLINE./*.** R
17400 65 61 64 6c 69 6e 65 20 63 6f 6d 70 6c 65 74 69  eadline completi
17410 6f 6e 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2f 0a  on callbacks.*/.
17420 73 74 61 74 69 63 20 63 68 61 72 20 2a 72 65 61  static char *rea
17430 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 69 6f 6e  dline_completion
17440 5f 67 65 6e 65 72 61 74 6f 72 28 63 6f 6e 73 74  _generator(const
17450 20 63 68 61 72 20 2a 74 65 78 74 2c 20 69 6e 74   char *text, int
17460 20 73 74 61 74 65 29 7b 0a 20 20 73 74 61 74 69   state){.  stati
17470 63 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  c sqlite3_stmt *
17480 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61  pStmt = 0;.  cha
17490 72 20 2a 7a 52 65 74 3b 0a 20 20 69 66 28 20 73  r *zRet;.  if( s
174a0 74 61 74 65 3d 3d 30 20 29 7b 0a 20 20 20 20 63  tate==0 ){.    c
174b0 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20 20 73  har *zSql;.    s
174c0 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
174d0 70 53 74 6d 74 29 3b 0a 20 20 20 20 7a 53 71 6c  pStmt);.    zSql
174e0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
174f0 74 66 28 22 53 45 4c 45 43 54 20 44 49 53 54 49  tf("SELECT DISTI
17500 4e 43 54 20 63 61 6e 64 69 64 61 74 65 20 43 4f  NCT candidate CO
17510 4c 4c 41 54 45 20 6e 6f 63 61 73 65 22 0a 20 20  LLATE nocase".  
17520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17530 20 20 20 20 20 20 20 20 20 22 20 20 46 52 4f 4d           "  FROM
17540 20 63 6f 6d 70 6c 65 74 69 6f 6e 28 25 51 29 20   completion(%Q) 
17550 4f 52 44 45 52 20 42 59 20 31 22 2c 20 74 65 78  ORDER BY 1", tex
17560 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  t);.    sqlite3_
17570 70 72 65 70 61 72 65 5f 76 32 28 67 6c 6f 62 61  prepare_v2(globa
17580 6c 44 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26  lDb, zSql, -1, &
17590 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 73  pStmt, 0);.    s
175a0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
175b0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  );.  }.  if( sql
175c0 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
175d0 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a  ==SQLITE_ROW ){.
175e0 20 20 20 20 7a 52 65 74 20 3d 20 73 74 72 64 75      zRet = strdu
175f0 70 28 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  p((const char*)s
17600 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
17610 78 74 28 70 53 74 6d 74 2c 20 30 29 29 3b 0a 20  xt(pStmt, 0));. 
17620 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
17630 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
17640 6d 74 29 3b 0a 20 20 20 20 70 53 74 6d 74 20 3d  mt);.    pStmt =
17650 20 30 3b 0a 20 20 20 20 7a 52 65 74 20 3d 20 30   0;.    zRet = 0
17660 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
17670 52 65 74 3b 0a 7d 0a 73 74 61 74 69 63 20 63 68  Ret;.}.static ch
17680 61 72 20 2a 2a 72 65 61 64 6c 69 6e 65 5f 63 6f  ar **readline_co
17690 6d 70 6c 65 74 69 6f 6e 28 63 6f 6e 73 74 20 63  mpletion(const c
176a0 68 61 72 20 2a 7a 54 65 78 74 2c 20 69 6e 74 20  har *zText, int 
176b0 69 53 74 61 72 74 2c 20 69 6e 74 20 69 45 6e 64  iStart, int iEnd
176c0 29 7b 0a 20 20 72 6c 5f 61 74 74 65 6d 70 74 65  ){.  rl_attempte
176d0 64 5f 63 6f 6d 70 6c 65 74 69 6f 6e 5f 6f 76 65  d_completion_ove
176e0 72 20 3d 20 31 3b 0a 20 20 72 65 74 75 72 6e 20  r = 1;.  return 
176f0 72 6c 5f 63 6f 6d 70 6c 65 74 69 6f 6e 5f 6d 61  rl_completion_ma
17700 74 63 68 65 73 28 7a 54 65 78 74 2c 20 72 65 61  tches(zText, rea
17710 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 69 6f 6e  dline_completion
17720 5f 67 65 6e 65 72 61 74 6f 72 29 3b 0a 7d 0a 0a  _generator);.}..
17730 23 65 6c 69 66 20 48 41 56 45 5f 4c 49 4e 45 4e  #elif HAVE_LINEN
17740 4f 49 53 45 0a 2f 2a 0a 2a 2a 20 4c 69 6e 65 6e  OISE./*.** Linen
17750 6f 69 73 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 20  oise completion 
17760 63 61 6c 6c 62 61 63 6b 0a 2a 2f 0a 73 74 61 74  callback.*/.stat
17770 69 63 20 76 6f 69 64 20 6c 69 6e 65 6e 6f 69 73  ic void linenois
17780 65 5f 63 6f 6d 70 6c 65 74 69 6f 6e 28 63 6f 6e  e_completion(con
17790 73 74 20 63 68 61 72 20 2a 7a 4c 69 6e 65 2c 20  st char *zLine, 
177a0 6c 69 6e 65 6e 6f 69 73 65 43 6f 6d 70 6c 65 74  linenoiseComplet
177b0 69 6f 6e 73 20 2a 6c 63 29 7b 0a 20 20 69 6e 74  ions *lc){.  int
177c0 20 6e 4c 69 6e 65 20 3d 20 28 69 6e 74 29 73 74   nLine = (int)st
177d0 72 6c 65 6e 28 7a 4c 69 6e 65 29 3b 0a 20 20 69  rlen(zLine);.  i
177e0 6e 74 20 69 2c 20 69 53 74 61 72 74 3b 0a 20 20  nt i, iStart;.  
177f0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
17800 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  tmt = 0;.  char 
17810 2a 7a 53 71 6c 3b 0a 20 20 63 68 61 72 20 7a 42  *zSql;.  char zB
17820 75 66 5b 31 30 30 30 5d 3b 0a 0a 20 20 69 66 28  uf[1000];..  if(
17830 20 6e 4c 69 6e 65 3e 73 69 7a 65 6f 66 28 7a 42   nLine>sizeof(zB
17840 75 66 29 2d 33 30 20 29 20 72 65 74 75 72 6e 3b  uf)-30 ) return;
17850 0a 20 20 69 66 28 20 7a 4c 69 6e 65 5b 30 5d 3d  .  if( zLine[0]=
17860 3d 27 2e 27 20 29 20 72 65 74 75 72 6e 3b 0a 20  ='.' ) return;. 
17870 20 66 6f 72 28 69 3d 6e 4c 69 6e 65 2d 31 3b 20   for(i=nLine-1; 
17880 69 3e 3d 30 20 26 26 20 28 69 73 61 6c 6e 75 6d  i>=0 && (isalnum
17890 28 7a 4c 69 6e 65 5b 69 5d 29 20 7c 7c 20 7a 4c  (zLine[i]) || zL
178a0 69 6e 65 5b 69 5d 3d 3d 27 5f 27 29 3b 20 69 2d  ine[i]=='_'); i-
178b0 2d 29 7b 7d 0a 20 20 69 66 28 20 69 3d 3d 6e 4c  -){}.  if( i==nL
178c0 69 6e 65 2d 31 20 29 20 72 65 74 75 72 6e 3b 0a  ine-1 ) return;.
178d0 20 20 69 53 74 61 72 74 20 3d 20 69 2b 31 3b 0a    iStart = i+1;.
178e0 20 20 6d 65 6d 63 70 79 28 7a 42 75 66 2c 20 7a    memcpy(zBuf, z
178f0 4c 69 6e 65 2c 20 69 53 74 61 72 74 29 3b 0a 20  Line, iStart);. 
17900 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f   zSql = sqlite3_
17910 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20  mprintf("SELECT 
17920 44 49 53 54 49 4e 43 54 20 63 61 6e 64 69 64 61  DISTINCT candida
17930 74 65 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73  te COLLATE nocas
17940 65 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e".             
17950 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 46              "  F
17960 52 4f 4d 20 63 6f 6d 70 6c 65 74 69 6f 6e 28 25  ROM completion(%
17970 51 2c 25 51 29 20 4f 52 44 45 52 20 42 59 20 31  Q,%Q) ORDER BY 1
17980 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
17990 20 20 20 20 20 20 20 20 20 20 20 20 26 7a 4c 69              &zLi
179a0 6e 65 5b 69 53 74 61 72 74 5d 2c 20 7a 4c 69 6e  ne[iStart], zLin
179b0 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 70 72  e);.  sqlite3_pr
179c0 65 70 61 72 65 5f 76 32 28 67 6c 6f 62 61 6c 44  epare_v2(globalD
179d0 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53  b, zSql, -1, &pS
179e0 74 6d 74 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  tmt, 0);.  sqlit
179f0 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
17a00 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 67 6c   sqlite3_exec(gl
17a10 6f 62 61 6c 44 62 2c 20 22 50 52 41 47 4d 41 20  obalDb, "PRAGMA 
17a20 70 61 67 65 5f 63 6f 75 6e 74 22 2c 20 30 2c 20  page_count", 0, 
17a30 30 2c 20 30 29 3b 20 2f 2a 20 4c 6f 61 64 20 74  0, 0); /* Load t
17a40 68 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 77  he schema */.  w
17a50 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74  hile( sqlite3_st
17a60 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
17a70 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63 6f 6e  E_ROW ){.    con
17a80 73 74 20 63 68 61 72 20 2a 7a 43 6f 6d 70 6c 65  st char *zComple
17a90 74 69 6f 6e 20 3d 20 28 63 6f 6e 73 74 20 63 68  tion = (const ch
17aa0 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
17ab0 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 30  mn_text(pStmt, 0
17ac0 29 3b 0a 20 20 20 20 69 6e 74 20 6e 43 6f 6d 70  );.    int nComp
17ad0 6c 65 74 69 6f 6e 20 3d 20 73 71 6c 69 74 65 33  letion = sqlite3
17ae0 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53  _column_bytes(pS
17af0 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 66 28  tmt, 0);.    if(
17b00 20 69 53 74 61 72 74 2b 6e 43 6f 6d 70 6c 65 74   iStart+nComplet
17b10 69 6f 6e 20 3c 20 73 69 7a 65 6f 66 28 7a 42 75  ion < sizeof(zBu
17b20 66 29 2d 31 20 29 7b 0a 20 20 20 20 20 20 6d 65  f)-1 ){.      me
17b30 6d 63 70 79 28 7a 42 75 66 2b 69 53 74 61 72 74  mcpy(zBuf+iStart
17b40 2c 20 7a 43 6f 6d 70 6c 65 74 69 6f 6e 2c 20 6e  , zCompletion, n
17b50 43 6f 6d 70 6c 65 74 69 6f 6e 2b 31 29 3b 0a 20  Completion+1);. 
17b60 20 20 20 20 20 6c 69 6e 65 6e 6f 69 73 65 41 64       linenoiseAd
17b70 64 43 6f 6d 70 6c 65 74 69 6f 6e 28 6c 63 2c 20  dCompletion(lc, 
17b80 7a 42 75 66 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  zBuf);.    }.  }
17b90 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
17ba0 69 7a 65 28 70 53 74 6d 74 29 3b 0a 7d 0a 23 65  ize(pStmt);.}.#e
17bb0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 6f 20 43  ndif../*.** Do C
17bc0 2d 6c 61 6e 67 75 61 67 65 20 73 74 79 6c 65 20  -language style 
17bd0 64 65 71 75 6f 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a  dequoting..**.**
17be0 20 20 20 20 5c 61 20 20 20 20 2d 3e 20 61 6c 61      \a    -> ala
17bf0 72 6d 0a 2a 2a 20 20 20 20 5c 62 20 20 20 20 2d  rm.**    \b    -
17c00 3e 20 62 61 63 6b 73 70 61 63 65 0a 2a 2a 20 20  > backspace.**  
17c10 20 20 5c 74 20 20 20 20 2d 3e 20 74 61 62 0a 2a    \t    -> tab.*
17c20 2a 20 20 20 20 5c 6e 20 20 20 20 2d 3e 20 6e 65  *    \n    -> ne
17c30 77 6c 69 6e 65 0a 2a 2a 20 20 20 20 5c 76 20 20  wline.**    \v  
17c40 20 20 2d 3e 20 76 65 72 74 69 63 61 6c 20 74 61    -> vertical ta
17c50 62 0a 2a 2a 20 20 20 20 5c 66 20 20 20 20 2d 3e  b.**    \f    ->
17c60 20 66 6f 72 6d 20 66 65 65 64 0a 2a 2a 20 20 20   form feed.**   
17c70 20 5c 72 20 20 20 20 2d 3e 20 63 61 72 72 69 61   \r    -> carria
17c80 67 65 20 72 65 74 75 72 6e 0a 2a 2a 20 20 20 20  ge return.**    
17c90 5c 73 20 20 20 20 2d 3e 20 73 70 61 63 65 0a 2a  \s    -> space.*
17ca0 2a 20 20 20 20 5c 22 20 20 20 20 2d 3e 20 22 0a  *    \"    -> ".
17cb0 2a 2a 20 20 20 20 5c 27 20 20 20 20 2d 3e 20 27  **    \'    -> '
17cc0 0a 2a 2a 20 20 20 20 5c 5c 20 20 20 20 2d 3e 20  .**    \\    -> 
17cd0 62 61 63 6b 73 6c 61 73 68 0a 2a 2a 20 20 20 20  backslash.**    
17ce0 5c 4e 4e 4e 20 20 2d 3e 20 61 73 63 69 69 20 63  \NNN  -> ascii c
17cf0 68 61 72 61 63 74 65 72 20 4e 4e 4e 20 69 6e 20  haracter NNN in 
17d00 6f 63 74 61 6c 0a 2a 2f 0a 73 74 61 74 69 63 20  octal.*/.static 
17d10 76 6f 69 64 20 72 65 73 6f 6c 76 65 5f 62 61 63  void resolve_bac
17d20 6b 73 6c 61 73 68 65 73 28 63 68 61 72 20 2a 7a  kslashes(char *z
17d30 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20  ){.  int i, j;. 
17d40 20 63 68 61 72 20 63 3b 0a 20 20 77 68 69 6c 65   char c;.  while
17d50 28 20 2a 7a 20 26 26 20 2a 7a 21 3d 27 5c 5c 27  ( *z && *z!='\\'
17d60 20 29 20 7a 2b 2b 3b 0a 20 20 66 6f 72 28 69 3d   ) z++;.  for(i=
17d70 6a 3d 30 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21  j=0; (c = z[i])!
17d80 3d 30 3b 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20  =0; i++, j++){. 
17d90 20 20 20 69 66 28 20 63 3d 3d 27 5c 5c 27 20 26     if( c=='\\' &
17da0 26 20 7a 5b 69 2b 31 5d 21 3d 30 20 29 7b 0a 20  & z[i+1]!=0 ){. 
17db0 20 20 20 20 20 63 20 3d 20 7a 5b 2b 2b 69 5d 3b       c = z[++i];
17dc0 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 61  .      if( c=='a
17dd0 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d  ' ){.        c =
17de0 20 27 5c 61 27 3b 0a 20 20 20 20 20 20 7d 65 6c   '\a';.      }el
17df0 73 65 20 69 66 28 20 63 3d 3d 27 62 27 20 29 7b  se if( c=='b' ){
17e00 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 62  .        c = '\b
17e10 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ';.      }else i
17e20 66 28 20 63 3d 3d 27 74 27 20 29 7b 0a 20 20 20  f( c=='t' ){.   
17e30 20 20 20 20 20 63 20 3d 20 27 5c 74 27 3b 0a 20       c = '\t';. 
17e40 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63       }else if( c
17e50 3d 3d 27 6e 27 20 29 7b 0a 20 20 20 20 20 20 20  =='n' ){.       
17e60 20 63 20 3d 20 27 5c 6e 27 3b 0a 20 20 20 20 20   c = '\n';.     
17e70 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 76   }else if( c=='v
17e80 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d  ' ){.        c =
17e90 20 27 5c 76 27 3b 0a 20 20 20 20 20 20 7d 65 6c   '\v';.      }el
17ea0 73 65 20 69 66 28 20 63 3d 3d 27 66 27 20 29 7b  se if( c=='f' ){
17eb0 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 66  .        c = '\f
17ec0 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ';.      }else i
17ed0 66 28 20 63 3d 3d 27 72 27 20 29 7b 0a 20 20 20  f( c=='r' ){.   
17ee0 20 20 20 20 20 63 20 3d 20 27 5c 72 27 3b 0a 20       c = '\r';. 
17ef0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63       }else if( c
17f00 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20 20 20 20  =='"' ){.       
17f10 20 63 20 3d 20 27 22 27 3b 0a 20 20 20 20 20 20   c = '"';.      
17f20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c 27  }else if( c=='\'
17f30 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d  ' ){.        c =
17f40 20 27 5c 27 27 3b 0a 20 20 20 20 20 20 7d 65 6c   '\'';.      }el
17f50 73 65 20 69 66 28 20 63 3d 3d 27 5c 5c 27 20 29  se if( c=='\\' )
17f60 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c  {.        c = '\
17f70 5c 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  \';.      }else 
17f80 69 66 28 20 63 3e 3d 27 30 27 20 26 26 20 63 3c  if( c>='0' && c<
17f90 3d 27 37 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='7' ){.        
17fa0 63 20 2d 3d 20 27 30 27 3b 0a 20 20 20 20 20 20  c -= '0';.      
17fb0 20 20 69 66 28 20 7a 5b 69 2b 31 5d 3e 3d 27 30    if( z[i+1]>='0
17fc0 27 20 26 26 20 7a 5b 69 2b 31 5d 3c 3d 27 37 27  ' && z[i+1]<='7'
17fd0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 2b   ){.          i+
17fe0 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 20 3d  +;.          c =
17ff0 20 28 63 3c 3c 33 29 20 2b 20 7a 5b 69 5d 20 2d   (c<<3) + z[i] -
18000 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20   '0';.          
18010 69 66 28 20 7a 5b 69 2b 31 5d 3e 3d 27 30 27 20  if( z[i+1]>='0' 
18020 26 26 20 7a 5b 69 2b 31 5d 3c 3d 27 37 27 20 29  && z[i+1]<='7' )
18030 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 2b  {.            i+
18040 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  +;.            c
18050 20 3d 20 28 63 3c 3c 33 29 20 2b 20 7a 5b 69 5d   = (c<<3) + z[i]
18060 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20   - '0';.        
18070 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
18080 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
18090 7a 5b 6a 5d 20 3d 20 63 3b 0a 20 20 7d 0a 20 20  z[j] = c;.  }.  
180a0 69 66 28 20 6a 3c 69 20 29 20 7a 5b 6a 5d 20 3d  if( j<i ) z[j] =
180b0 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74   0;.}../*.** Ret
180c0 75 72 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66  urn the value of
180d0 20 61 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64   a hexadecimal d
180e0 69 67 69 74 2e 20 20 52 65 74 75 72 6e 20 2d 31  igit.  Return -1
180f0 20 69 66 20 74 68 65 20 69 6e 70 75 74 0a 2a 2a   if the input.**
18100 20 69 73 20 6e 6f 74 20 61 20 68 65 78 20 64 69   is not a hex di
18110 67 69 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  git..*/.static i
18120 6e 74 20 68 65 78 44 69 67 69 74 56 61 6c 75 65  nt hexDigitValue
18130 28 63 68 61 72 20 63 29 7b 0a 20 20 69 66 28 20  (char c){.  if( 
18140 63 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27  c>='0' && c<='9'
18150 20 29 20 72 65 74 75 72 6e 20 63 20 2d 20 27 30   ) return c - '0
18160 27 3b 0a 20 20 69 66 28 20 63 3e 3d 27 61 27 20  ';.  if( c>='a' 
18170 26 26 20 63 3c 3d 27 66 27 20 29 20 72 65 74 75  && c<='f' ) retu
18180 72 6e 20 63 20 2d 20 27 61 27 20 2b 20 31 30 3b  rn c - 'a' + 10;
18190 0a 20 20 69 66 28 20 63 3e 3d 27 41 27 20 26 26  .  if( c>='A' &&
181a0 20 63 3c 3d 27 46 27 20 29 20 72 65 74 75 72 6e   c<='F' ) return
181b0 20 63 20 2d 20 27 41 27 20 2b 20 31 30 3b 0a 20   c - 'A' + 10;. 
181c0 20 72 65 74 75 72 6e 20 2d 31 3b 0a 7d 0a 0a 2f   return -1;.}../
181d0 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 7a  *.** Interpret z
181e0 41 72 67 20 61 73 20 61 6e 20 69 6e 74 65 67 65  Arg as an intege
181f0 72 20 76 61 6c 75 65 2c 20 70 6f 73 73 69 62 6c  r value, possibl
18200 79 20 77 69 74 68 20 73 75 66 66 69 78 65 73 2e  y with suffixes.
18210 0a 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74  .*/.static sqlit
18220 65 33 5f 69 6e 74 36 34 20 69 6e 74 65 67 65 72  e3_int64 integer
18230 56 61 6c 75 65 28 63 6f 6e 73 74 20 63 68 61 72  Value(const char
18240 20 2a 7a 41 72 67 29 7b 0a 20 20 73 71 6c 69 74   *zArg){.  sqlit
18250 65 33 5f 69 6e 74 36 34 20 76 20 3d 20 30 3b 0a  e3_int64 v = 0;.
18260 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
18270 74 72 75 63 74 20 7b 20 63 68 61 72 20 2a 7a 53  truct { char *zS
18280 75 66 66 69 78 3b 20 69 6e 74 20 69 4d 75 6c 74  uffix; int iMult
18290 3b 20 7d 20 61 4d 75 6c 74 5b 5d 20 3d 20 7b 0a  ; } aMult[] = {.
182a0 20 20 20 20 7b 20 22 4b 69 42 22 2c 20 31 30 32      { "KiB", 102
182b0 34 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 69 42 22  4 },.    { "MiB"
182c0 2c 20 31 30 32 34 2a 31 30 32 34 20 7d 2c 0a 20  , 1024*1024 },. 
182d0 20 20 20 7b 20 22 47 69 42 22 2c 20 31 30 32 34     { "GiB", 1024
182e0 2a 31 30 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20  *1024*1024 },.  
182f0 20 20 7b 20 22 4b 42 22 2c 20 20 31 30 30 30 20    { "KB",  1000 
18300 7d 2c 0a 20 20 20 20 7b 20 22 4d 42 22 2c 20 20  },.    { "MB",  
18310 31 30 30 30 30 30 30 20 7d 2c 0a 20 20 20 20 7b  1000000 },.    {
18320 20 22 47 42 22 2c 20 20 31 30 30 30 30 30 30 30   "GB",  10000000
18330 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22 4b 22 2c  00 },.    { "K",
18340 20 20 20 31 30 30 30 20 7d 2c 0a 20 20 20 20 7b     1000 },.    {
18350 20 22 4d 22 2c 20 20 20 31 30 30 30 30 30 30 20   "M",   1000000 
18360 7d 2c 0a 20 20 20 20 7b 20 22 47 22 2c 20 20 20  },.    { "G",   
18370 31 30 30 30 30 30 30 30 30 30 20 7d 2c 0a 20 20  1000000000 },.  
18380 7d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  };.  int i;.  in
18390 74 20 69 73 4e 65 67 20 3d 20 30 3b 0a 20 20 69  t isNeg = 0;.  i
183a0 66 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 2d 27 20  f( zArg[0]=='-' 
183b0 29 7b 0a 20 20 20 20 69 73 4e 65 67 20 3d 20 31  ){.    isNeg = 1
183c0 3b 0a 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20  ;.    zArg++;.  
183d0 7d 65 6c 73 65 20 69 66 28 20 7a 41 72 67 5b 30  }else if( zArg[0
183e0 5d 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a 41  ]=='+' ){.    zA
183f0 72 67 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rg++;.  }.  if( 
18400 7a 41 72 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20  zArg[0]=='0' && 
18410 7a 41 72 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a  zArg[1]=='x' ){.
18420 20 20 20 20 69 6e 74 20 78 3b 0a 20 20 20 20 7a      int x;.    z
18430 41 72 67 20 2b 3d 20 32 3b 0a 20 20 20 20 77 68  Arg += 2;.    wh
18440 69 6c 65 28 20 28 78 20 3d 20 68 65 78 44 69 67  ile( (x = hexDig
18450 69 74 56 61 6c 75 65 28 7a 41 72 67 5b 30 5d 29  itValue(zArg[0])
18460 29 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20  )>=0 ){.      v 
18470 3d 20 28 76 3c 3c 34 29 20 2b 20 78 3b 0a 20 20  = (v<<4) + x;.  
18480 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 20 20      zArg++;.    
18490 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77  }.  }else{.    w
184a0 68 69 6c 65 28 20 49 73 44 69 67 69 74 28 7a 41  hile( IsDigit(zA
184b0 72 67 5b 30 5d 29 20 29 7b 0a 20 20 20 20 20 20  rg[0]) ){.      
184c0 76 20 3d 20 76 2a 31 30 20 2b 20 7a 41 72 67 5b  v = v*10 + zArg[
184d0 30 5d 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20  0] - '0';.      
184e0 7a 41 72 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  zArg++;.    }.  
184f0 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41  }.  for(i=0; i<A
18500 72 72 61 79 53 69 7a 65 28 61 4d 75 6c 74 29 3b  rraySize(aMult);
18510 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 73   i++){.    if( s
18520 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 61  qlite3_stricmp(a
18530 4d 75 6c 74 5b 69 5d 2e 7a 53 75 66 66 69 78 2c  Mult[i].zSuffix,
18540 20 7a 41 72 67 29 3d 3d 30 20 29 7b 0a 20 20 20   zArg)==0 ){.   
18550 20 20 20 76 20 2a 3d 20 61 4d 75 6c 74 5b 69 5d     v *= aMult[i]
18560 2e 69 4d 75 6c 74 3b 0a 20 20 20 20 20 20 62 72  .iMult;.      br
18570 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
18580 20 72 65 74 75 72 6e 20 69 73 4e 65 67 3f 20 2d   return isNeg? -
18590 76 20 3a 20 76 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  v : v;.}../*.** 
185a0 49 6e 74 65 72 70 72 65 74 20 7a 41 72 67 20 61  Interpret zArg a
185b0 73 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  s either an inte
185c0 67 65 72 20 6f 72 20 61 20 62 6f 6f 6c 65 61 6e  ger or a boolean
185d0 20 76 61 6c 75 65 2e 20 20 52 65 74 75 72 6e 20   value.  Return 
185e0 31 20 6f 72 20 30 0a 2a 2a 20 66 6f 72 20 54 52  1 or 0.** for TR
185f0 55 45 20 61 6e 64 20 46 41 4c 53 45 2e 20 20 52  UE and FALSE.  R
18600 65 74 75 72 6e 20 74 68 65 20 69 6e 74 65 67 65  eturn the intege
18610 72 20 76 61 6c 75 65 20 69 66 20 61 70 70 72 6f  r value if appro
18620 70 72 69 61 74 65 2e 0a 2a 2f 0a 73 74 61 74 69  priate..*/.stati
18630 63 20 69 6e 74 20 62 6f 6f 6c 65 61 6e 56 61 6c  c int booleanVal
18640 75 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ue(const char *z
18650 41 72 67 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  Arg){.  int i;. 
18660 20 69 66 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 30   if( zArg[0]=='0
18670 27 20 26 26 20 7a 41 72 67 5b 31 5d 3d 3d 27 78  ' && zArg[1]=='x
18680 27 20 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d 32  ' ){.    for(i=2
18690 3b 20 68 65 78 44 69 67 69 74 56 61 6c 75 65 28  ; hexDigitValue(
186a0 7a 41 72 67 5b 69 5d 29 3e 3d 30 3b 20 69 2b 2b  zArg[i])>=0; i++
186b0 29 7b 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ){}.  }else{.   
186c0 20 66 6f 72 28 69 3d 30 3b 20 7a 41 72 67 5b 69   for(i=0; zArg[i
186d0 5d 3e 3d 27 30 27 20 26 26 20 7a 41 72 67 5b 69  ]>='0' && zArg[i
186e0 5d 3c 3d 27 39 27 3b 20 69 2b 2b 29 7b 7d 0a 20  ]<='9'; i++){}. 
186f0 20 7d 0a 20 20 69 66 28 20 69 3e 30 20 26 26 20   }.  if( i>0 && 
18700 7a 41 72 67 5b 69 5d 3d 3d 30 20 29 20 72 65 74  zArg[i]==0 ) ret
18710 75 72 6e 20 28 69 6e 74 29 28 69 6e 74 65 67 65  urn (int)(intege
18720 72 56 61 6c 75 65 28 7a 41 72 67 29 20 26 20 30  rValue(zArg) & 0
18730 78 66 66 66 66 66 66 66 66 29 3b 0a 20 20 69 66  xffffffff);.  if
18740 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  ( sqlite3_stricm
18750 70 28 7a 41 72 67 2c 20 22 6f 6e 22 29 3d 3d 30  p(zArg, "on")==0
18760 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74 72 69   || sqlite3_stri
18770 63 6d 70 28 7a 41 72 67 2c 22 79 65 73 22 29 3d  cmp(zArg,"yes")=
18780 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
18790 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71   1;.  }.  if( sq
187a0 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 41  lite3_stricmp(zA
187b0 72 67 2c 20 22 6f 66 66 22 29 3d 3d 30 20 7c 7c  rg, "off")==0 ||
187c0 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
187d0 28 7a 41 72 67 2c 22 6e 6f 22 29 3d 3d 30 20 29  (zArg,"no")==0 )
187e0 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  {.    return 0;.
187f0 20 20 7d 0a 20 20 75 74 66 38 5f 70 72 69 6e 74    }.  utf8_print
18800 66 28 73 74 64 65 72 72 2c 20 22 45 52 52 4f 52  f(stderr, "ERROR
18810 3a 20 4e 6f 74 20 61 20 62 6f 6f 6c 65 61 6e 20  : Not a boolean 
18820 76 61 6c 75 65 3a 20 5c 22 25 73 5c 22 2e 20 41  value: \"%s\". A
18830 73 73 75 6d 69 6e 67 20 5c 22 6e 6f 5c 22 2e 5c  ssuming \"no\".\
18840 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 7a 41  n",.          zA
18850 72 67 29 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b  rg);.  return 0;
18860 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 6f 72  .}../*.** Set or
18870 20 63 6c 65 61 72 20 61 20 73 68 65 6c 6c 20 66   clear a shell f
18880 6c 61 67 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  lag according to
18890 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
188a0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
188b0 20 73 65 74 4f 72 43 6c 65 61 72 46 6c 61 67 28   setOrClearFlag(
188c0 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 75  ShellState *p, u
188d0 6e 73 69 67 6e 65 64 20 6d 46 6c 61 67 2c 20 63  nsigned mFlag, c
188e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 29  onst char *zArg)
188f0 7b 0a 20 20 69 66 28 20 62 6f 6f 6c 65 61 6e 56  {.  if( booleanV
18900 61 6c 75 65 28 7a 41 72 67 29 20 29 7b 0a 20 20  alue(zArg) ){.  
18910 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28 70    ShellSetFlag(p
18920 2c 20 6d 46 6c 61 67 29 3b 0a 20 20 7d 65 6c 73  , mFlag);.  }els
18930 65 7b 0a 20 20 20 20 53 68 65 6c 6c 43 6c 65 61  e{.    ShellClea
18940 72 46 6c 61 67 28 70 2c 20 6d 46 6c 61 67 29 3b  rFlag(p, mFlag);
18950 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6c  .  }.}../*.** Cl
18960 6f 73 65 20 61 6e 20 6f 75 74 70 75 74 20 66 69  ose an output fi
18970 6c 65 2c 20 61 73 73 75 6d 69 6e 67 20 69 74 20  le, assuming it 
18980 69 73 20 6e 6f 74 20 73 74 64 65 72 72 20 6f 72  is not stderr or
18990 20 73 74 64 6f 75 74 0a 2a 2f 0a 73 74 61 74 69   stdout.*/.stati
189a0 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 66 69  c void output_fi
189b0 6c 65 5f 63 6c 6f 73 65 28 46 49 4c 45 20 2a 66  le_close(FILE *f
189c0 29 7b 0a 20 20 69 66 28 20 66 20 26 26 20 66 21  ){.  if( f && f!
189d0 3d 73 74 64 6f 75 74 20 26 26 20 66 21 3d 73 74  =stdout && f!=st
189e0 64 65 72 72 20 29 20 66 63 6c 6f 73 65 28 66 29  derr ) fclose(f)
189f0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
18a00 6f 20 6f 70 65 6e 20 61 6e 20 6f 75 74 70 75 74  o open an output
18a10 20 66 69 6c 65 2e 20 20 20 54 68 65 20 6e 61 6d   file.   The nam
18a20 65 73 20 22 73 74 64 6f 75 74 22 20 61 6e 64 20  es "stdout" and 
18a30 22 73 74 64 65 72 72 22 20 61 72 65 0a 2a 2a 20  "stderr" are.** 
18a40 72 65 63 6f 67 6e 69 7a 65 64 20 61 6e 64 20 64  recognized and d
18a50 6f 20 74 68 65 20 72 69 67 68 74 20 74 68 69 6e  o the right thin
18a60 67 2e 20 20 4e 55 4c 4c 20 69 73 20 72 65 74 75  g.  NULL is retu
18a70 72 6e 65 64 20 69 66 20 74 68 65 20 6f 75 74 70  rned if the outp
18a80 75 74 0a 2a 2a 20 66 69 6c 65 6e 61 6d 65 20 69  ut.** filename i
18a90 73 20 22 6f 66 66 22 2e 0a 2a 2f 0a 73 74 61 74  s "off"..*/.stat
18aa0 69 63 20 46 49 4c 45 20 2a 6f 75 74 70 75 74 5f  ic FILE *output_
18ab0 66 69 6c 65 5f 6f 70 65 6e 28 63 6f 6e 73 74 20  file_open(const 
18ac0 63 68 61 72 20 2a 7a 46 69 6c 65 29 7b 0a 20 20  char *zFile){.  
18ad0 46 49 4c 45 20 2a 66 3b 0a 20 20 69 66 28 20 73  FILE *f;.  if( s
18ae0 74 72 63 6d 70 28 7a 46 69 6c 65 2c 22 73 74 64  trcmp(zFile,"std
18af0 6f 75 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  out")==0 ){.    
18b00 66 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20 7d 65  f = stdout;.  }e
18b10 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
18b20 46 69 6c 65 2c 20 22 73 74 64 65 72 72 22 29 3d  File, "stderr")=
18b30 3d 30 20 29 7b 0a 20 20 20 20 66 20 3d 20 73 74  =0 ){.    f = st
18b40 64 65 72 72 3b 0a 20 20 7d 65 6c 73 65 20 69 66  derr;.  }else if
18b50 28 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c 20  ( strcmp(zFile, 
18b60 22 6f 66 66 22 29 3d 3d 30 20 29 7b 0a 20 20 20  "off")==0 ){.   
18b70 20 66 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b   f = 0;.  }else{
18b80 0a 20 20 20 20 66 20 3d 20 66 6f 70 65 6e 28 7a  .    f = fopen(z
18b90 46 69 6c 65 2c 20 22 77 62 22 29 3b 0a 20 20 20  File, "wb");.   
18ba0 20 69 66 28 20 66 3d 3d 30 20 29 7b 0a 20 20 20   if( f==0 ){.   
18bb0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
18bc0 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 63  tderr, "Error: c
18bd0 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c  annot open \"%s\
18be0 22 5c 6e 22 2c 20 7a 46 69 6c 65 29 3b 0a 20 20  "\n", zFile);.  
18bf0 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
18c00 20 66 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69   f;.}..#if !defi
18c10 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54 45 53  ned(SQLITE_UNTES
18c20 54 41 42 4c 45 29 0a 23 69 66 20 21 64 65 66 69  TABLE).#if !defi
18c30 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
18c40 54 52 41 43 45 29 20 26 26 20 21 64 65 66 69 6e  TRACE) && !defin
18c50 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
18c60 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f  LOATING_POINT)./
18c70 2a 0a 2a 2a 20 41 20 72 6f 75 74 69 6e 65 20 66  *.** A routine f
18c80 6f 72 20 68 61 6e 64 6c 69 6e 67 20 6f 75 74 70  or handling outp
18c90 75 74 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ut from sqlite3_
18ca0 74 72 61 63 65 28 29 2e 0a 2a 2f 0a 73 74 61 74  trace()..*/.stat
18cb0 69 63 20 69 6e 74 20 73 71 6c 5f 74 72 61 63 65  ic int sql_trace
18cc0 5f 63 61 6c 6c 62 61 63 6b 28 0a 20 20 75 6e 73  _callback(.  uns
18cd0 69 67 6e 65 64 20 6d 54 79 70 65 2c 0a 20 20 76  igned mType,.  v
18ce0 6f 69 64 20 2a 70 41 72 67 2c 0a 20 20 76 6f 69  oid *pArg,.  voi
18cf0 64 20 2a 70 50 2c 0a 20 20 76 6f 69 64 20 2a 70  d *pP,.  void *p
18d00 58 0a 29 7b 0a 20 20 46 49 4c 45 20 2a 66 20 3d  X.){.  FILE *f =
18d10 20 28 46 49 4c 45 2a 29 70 41 72 67 3b 0a 20 20   (FILE*)pArg;.  
18d20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
18d30 28 6d 54 79 70 65 29 3b 0a 20 20 55 4e 55 53 45  (mType);.  UNUSE
18d40 44 5f 50 41 52 41 4d 45 54 45 52 28 70 50 29 3b  D_PARAMETER(pP);
18d50 0a 20 20 69 66 28 20 66 20 29 7b 0a 20 20 20 20  .  if( f ){.    
18d60 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
18d70 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 70 58 3b  (const char*)pX;
18d80 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 28 69 6e  .    int i = (in
18d90 74 29 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 20  t)strlen(z);.   
18da0 20 77 68 69 6c 65 28 20 69 3e 30 20 26 26 20 7a   while( i>0 && z
18db0 5b 69 2d 31 5d 3d 3d 27 3b 27 20 29 7b 20 69 2d  [i-1]==';' ){ i-
18dc0 2d 3b 20 7d 0a 20 20 20 20 75 74 66 38 5f 70 72  -; }.    utf8_pr
18dd0 69 6e 74 66 28 66 2c 20 22 25 2e 2a 73 3b 5c 6e  intf(f, "%.*s;\n
18de0 22 2c 20 69 2c 20 7a 29 3b 0a 20 20 7d 0a 20 20  ", i, z);.  }.  
18df0 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 23 65 6e 64  return 0;.}.#end
18e00 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
18e10 20 41 20 6e 6f 2d 6f 70 20 72 6f 75 74 69 6e 65   A no-op routine
18e20 20 74 68 61 74 20 72 75 6e 73 20 77 69 74 68 20   that runs with 
18e30 74 68 65 20 22 2e 62 72 65 61 6b 70 6f 69 6e 74  the ".breakpoint
18e40 22 20 64 6f 63 2d 63 6f 6d 6d 61 6e 64 2e 20 20  " doc-command.  
18e50 54 68 69 73 20 69 73 0a 2a 2a 20 61 20 75 73 65  This is.** a use
18e60 66 75 6c 20 73 70 6f 74 20 74 6f 20 73 65 74 20  ful spot to set 
18e70 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
18e80 70 6f 69 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  point..*/.static
18e90 20 76 6f 69 64 20 74 65 73 74 5f 62 72 65 61 6b   void test_break
18ea0 70 6f 69 6e 74 28 76 6f 69 64 29 7b 0a 20 20 73  point(void){.  s
18eb0 74 61 74 69 63 20 69 6e 74 20 6e 43 61 6c 6c 20  tatic int nCall 
18ec0 3d 20 30 3b 0a 20 20 6e 43 61 6c 6c 2b 2b 3b 0a  = 0;.  nCall++;.
18ed0 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  }../*.** An obje
18ee0 63 74 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  ct used to read 
18ef0 61 20 43 53 56 20 61 6e 64 20 6f 74 68 65 72 20  a CSV and other 
18f00 66 69 6c 65 73 20 66 6f 72 20 69 6d 70 6f 72 74  files for import
18f10 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
18f20 75 63 74 20 49 6d 70 6f 72 74 43 74 78 20 49 6d  uct ImportCtx Im
18f30 70 6f 72 74 43 74 78 3b 0a 73 74 72 75 63 74 20  portCtx;.struct 
18f40 49 6d 70 6f 72 74 43 74 78 20 7b 0a 20 20 63 6f  ImportCtx {.  co
18f50 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b  nst char *zFile;
18f60 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
18f70 20 69 6e 70 75 74 20 66 69 6c 65 20 2a 2f 0a 20   input file */. 
18f80 20 46 49 4c 45 20 2a 69 6e 3b 20 20 20 20 20 20   FILE *in;      
18f90 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68 65       /* Read the
18fa0 20 43 53 56 20 74 65 78 74 20 66 72 6f 6d 20 74   CSV text from t
18fb0 68 69 73 20 69 6e 70 75 74 20 73 74 72 65 61 6d  his input stream
18fc0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
18fd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
18fe0 75 6d 75 6c 61 74 65 64 20 74 65 78 74 20 66 6f  umulated text fo
18ff0 72 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69  r a field */.  i
19000 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
19010 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19020 62 79 74 65 73 20 69 6e 20 7a 20 2a 2f 0a 20 20  bytes in z */.  
19030 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  int nAlloc;     
19040 20 20 20 20 2f 2a 20 53 70 61 63 65 20 61 6c 6c      /* Space all
19050 6f 63 61 74 65 64 20 66 6f 72 20 7a 5b 5d 20 2a  ocated for z[] *
19060 2f 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 3b 20 20  /.  int nLine;  
19070 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
19080 6e 74 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 2a  nt line number *
19090 2f 0a 20 20 69 6e 74 20 62 4e 6f 74 46 69 72 73  /.  int bNotFirs
190a0 74 3b 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  t;      /* True 
190b0 69 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 62  if one or more b
190c0 79 74 65 73 20 61 6c 72 65 61 64 79 20 72 65 61  ytes already rea
190d0 64 20 2a 2f 0a 20 20 69 6e 74 20 63 54 65 72 6d  d */.  int cTerm
190e0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68  ;          /* Ch
190f0 61 72 61 63 74 65 72 20 74 68 61 74 20 74 65 72  aracter that ter
19100 6d 69 6e 61 74 65 64 20 74 68 65 20 6d 6f 73 74  minated the most
19110 20 72 65 63 65 6e 74 20 66 69 65 6c 64 20 2a 2f   recent field */
19120 0a 20 20 69 6e 74 20 63 43 6f 6c 53 65 70 3b 20  .  int cColSep; 
19130 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 63 6f         /* The co
19140 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 63  lumn separator c
19150 68 61 72 61 63 74 65 72 2e 20 20 28 55 73 75 61  haracter.  (Usua
19160 6c 6c 79 20 22 2c 22 29 20 2a 2f 0a 20 20 69 6e  lly ",") */.  in
19170 74 20 63 52 6f 77 53 65 70 3b 20 20 20 20 20 20  t cRowSep;      
19180 20 20 2f 2a 20 54 68 65 20 72 6f 77 20 73 65 70    /* The row sep
19190 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65 72  arator character
191a0 2e 20 20 28 55 73 75 61 6c 6c 79 20 22 5c 6e 22  .  (Usually "\n"
191b0 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 70 70 65  ) */.};../* Appe
191c0 6e 64 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  nd a single byte
191d0 20 74 6f 20 7a 5b 5d 20 2a 2f 0a 73 74 61 74 69   to z[] */.stati
191e0 63 20 76 6f 69 64 20 69 6d 70 6f 72 74 5f 61 70  c void import_ap
191f0 70 65 6e 64 5f 63 68 61 72 28 49 6d 70 6f 72 74  pend_char(Import
19200 43 74 78 20 2a 70 2c 20 69 6e 74 20 63 29 7b 0a  Ctx *p, int c){.
19210 20 20 69 66 28 20 70 2d 3e 6e 2b 31 3e 3d 70 2d    if( p->n+1>=p-
19220 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 70  >nAlloc ){.    p
19230 2d 3e 6e 41 6c 6c 6f 63 20 2b 3d 20 70 2d 3e 6e  ->nAlloc += p->n
19240 41 6c 6c 6f 63 20 2b 20 31 30 30 3b 0a 20 20 20  Alloc + 100;.   
19250 20 70 2d 3e 7a 20 3d 20 73 71 6c 69 74 65 33 5f   p->z = sqlite3_
19260 72 65 61 6c 6c 6f 63 36 34 28 70 2d 3e 7a 2c 20  realloc64(p->z, 
19270 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20  p->nAlloc);.    
19280 69 66 28 20 70 2d 3e 7a 3d 3d 30 20 29 7b 0a 20  if( p->z==0 ){. 
19290 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
192a0 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f 66 20  stderr, "out of 
192b0 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20  memory\n");.    
192c0 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 7d    exit(1);.    }
192d0 0a 20 20 7d 0a 20 20 70 2d 3e 7a 5b 70 2d 3e 6e  .  }.  p->z[p->n
192e0 2b 2b 5d 20 3d 20 28 63 68 61 72 29 63 3b 0a 7d  ++] = (char)c;.}
192f0 0a 0a 2f 2a 20 52 65 61 64 20 61 20 73 69 6e 67  ../* Read a sing
19300 6c 65 20 66 69 65 6c 64 20 6f 66 20 43 53 56 20  le field of CSV 
19310 74 65 78 74 2e 20 20 43 6f 6d 70 61 74 69 62 6c  text.  Compatibl
19320 65 20 77 69 74 68 20 72 66 63 34 31 38 30 20 61  e with rfc4180 a
19330 6e 64 20 65 78 74 65 6e 64 65 64 0a 2a 2a 20 77  nd extended.** w
19340 69 74 68 20 74 68 65 20 6f 70 74 69 6f 6e 20 6f  ith the option o
19350 66 20 68 61 76 69 6e 67 20 61 20 73 65 70 61 72  f having a separ
19360 61 74 6f 72 20 6f 74 68 65 72 20 74 68 61 6e 20  ator other than 
19370 22 2c 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 2b 20 20  ","..**.**   +  
19380 49 6e 70 75 74 20 63 6f 6d 65 73 20 66 72 6f 6d  Input comes from
19390 20 70 2d 3e 69 6e 2e 0a 2a 2a 20 20 20 2b 20 20   p->in..**   +  
193a0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
193b0 20 70 2d 3e 7a 20 6f 66 20 6c 65 6e 67 74 68 20   p->z of length 
193c0 70 2d 3e 6e 2e 20 20 53 70 61 63 65 20 74 6f 20  p->n.  Space to 
193d0 68 6f 6c 64 20 70 2d 3e 7a 20 63 6f 6d 65 73 0a  hold p->z comes.
193e0 2a 2a 20 20 20 20 20 20 66 72 6f 6d 20 73 71 6c  **      from sql
193f0 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 29 2e  ite3_malloc64().
19400 0a 2a 2a 20 20 20 2b 20 20 55 73 65 20 70 2d 3e  .**   +  Use p->
19410 63 53 65 70 20 61 73 20 74 68 65 20 63 6f 6c 75  cSep as the colu
19420 6d 6e 20 73 65 70 61 72 61 74 6f 72 2e 20 20 54  mn separator.  T
19430 68 65 20 64 65 66 61 75 6c 74 20 69 73 20 22 2c  he default is ",
19440 22 2e 0a 2a 2a 20 20 20 2b 20 20 55 73 65 20 70  "..**   +  Use p
19450 2d 3e 72 53 65 70 20 61 73 20 74 68 65 20 72 6f  ->rSep as the ro
19460 77 20 73 65 70 61 72 61 74 6f 72 2e 20 20 54 68  w separator.  Th
19470 65 20 64 65 66 61 75 6c 74 20 69 73 20 22 5c 6e  e default is "\n
19480 22 2e 0a 2a 2a 20 20 20 2b 20 20 4b 65 65 70 20  "..**   +  Keep 
19490 74 72 61 63 6b 20 6f 66 20 74 68 65 20 6c 69 6e  track of the lin
194a0 65 20 6e 75 6d 62 65 72 20 69 6e 20 70 2d 3e 6e  e number in p->n
194b0 4c 69 6e 65 2e 0a 2a 2a 20 20 20 2b 20 20 53 74  Line..**   +  St
194c0 6f 72 65 20 74 68 65 20 63 68 61 72 61 63 74 65  ore the characte
194d0 72 20 74 68 61 74 20 74 65 72 6d 69 6e 61 74 65  r that terminate
194e0 73 20 74 68 65 20 66 69 65 6c 64 20 69 6e 20 70  s the field in p
194f0 2d 3e 63 54 65 72 6d 2e 20 20 53 74 6f 72 65 0a  ->cTerm.  Store.
19500 2a 2a 20 20 20 20 20 20 45 4f 46 20 6f 6e 20 65  **      EOF on e
19510 6e 64 2d 6f 66 2d 66 69 6c 65 2e 0a 2a 2a 20 20  nd-of-file..**  
19520 20 2b 20 20 52 65 70 6f 72 74 20 73 79 6e 74 61   +  Report synta
19530 78 20 65 72 72 6f 72 73 20 6f 6e 20 73 74 64 65  x errors on stde
19540 72 72 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  rr.*/.static cha
19550 72 20 2a 53 51 4c 49 54 45 5f 43 44 45 43 4c 20  r *SQLITE_CDECL 
19560 63 73 76 5f 72 65 61 64 5f 6f 6e 65 5f 66 69 65  csv_read_one_fie
19570 6c 64 28 49 6d 70 6f 72 74 43 74 78 20 2a 70 29  ld(ImportCtx *p)
19580 7b 0a 20 20 69 6e 74 20 63 3b 0a 20 20 69 6e 74  {.  int c;.  int
19590 20 63 53 65 70 20 3d 20 70 2d 3e 63 43 6f 6c 53   cSep = p->cColS
195a0 65 70 3b 0a 20 20 69 6e 74 20 72 53 65 70 20 3d  ep;.  int rSep =
195b0 20 70 2d 3e 63 52 6f 77 53 65 70 3b 0a 20 20 70   p->cRowSep;.  p
195c0 2d 3e 6e 20 3d 20 30 3b 0a 20 20 63 20 3d 20 66  ->n = 0;.  c = f
195d0 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 69  getc(p->in);.  i
195e0 66 28 20 63 3d 3d 45 4f 46 20 7c 7c 20 73 65 65  f( c==EOF || see
195f0 6e 49 6e 74 65 72 72 75 70 74 20 29 7b 0a 20 20  nInterrupt ){.  
19600 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20 45 4f 46    p->cTerm = EOF
19610 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
19620 20 20 7d 0a 20 20 69 66 28 20 63 3d 3d 27 22 27    }.  if( c=='"'
19630 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 63 2c 20   ){.    int pc, 
19640 70 70 63 3b 0a 20 20 20 20 69 6e 74 20 73 74 61  ppc;.    int sta
19650 72 74 4c 69 6e 65 20 3d 20 70 2d 3e 6e 4c 69 6e  rtLine = p->nLin
19660 65 3b 0a 20 20 20 20 69 6e 74 20 63 51 75 6f 74  e;.    int cQuot
19670 65 20 3d 20 63 3b 0a 20 20 20 20 70 63 20 3d 20  e = c;.    pc = 
19680 70 70 63 20 3d 20 30 3b 0a 20 20 20 20 77 68 69  ppc = 0;.    whi
19690 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 20 20 63  le( 1 ){.      c
196a0 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b   = fgetc(p->in);
196b0 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 72 53  .      if( c==rS
196c0 65 70 20 29 20 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b  ep ) p->nLine++;
196d0 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 63 51  .      if( c==cQ
196e0 75 6f 74 65 20 29 7b 0a 20 20 20 20 20 20 20 20  uote ){.        
196f0 69 66 28 20 70 63 3d 3d 63 51 75 6f 74 65 20 29  if( pc==cQuote )
19700 7b 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d  {.          pc =
19710 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6f   0;.          co
19720 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
19730 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
19740 69 66 28 20 28 63 3d 3d 63 53 65 70 20 26 26 20  if( (c==cSep && 
19750 70 63 3d 3d 63 51 75 6f 74 65 29 0a 20 20 20 20  pc==cQuote).    
19760 20 20 20 7c 7c 20 28 63 3d 3d 72 53 65 70 20 26     || (c==rSep &
19770 26 20 70 63 3d 3d 63 51 75 6f 74 65 29 0a 20 20  & pc==cQuote).  
19780 20 20 20 20 20 7c 7c 20 28 63 3d 3d 72 53 65 70       || (c==rSep
19790 20 26 26 20 70 63 3d 3d 27 5c 72 27 20 26 26 20   && pc=='\r' && 
197a0 70 70 63 3d 3d 63 51 75 6f 74 65 29 0a 20 20 20  ppc==cQuote).   
197b0 20 20 20 20 7c 7c 20 28 63 3d 3d 45 4f 46 20 26      || (c==EOF &
197c0 26 20 70 63 3d 3d 63 51 75 6f 74 65 29 0a 20 20  & pc==cQuote).  
197d0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 64      ){.        d
197e0 6f 7b 20 70 2d 3e 6e 2d 2d 3b 20 7d 77 68 69 6c  o{ p->n--; }whil
197f0 65 28 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 21 3d 63  e( p->z[p->n]!=c
19800 51 75 6f 74 65 20 29 3b 0a 20 20 20 20 20 20 20  Quote );.       
19810 20 70 2d 3e 63 54 65 72 6d 20 3d 20 63 3b 0a 20   p->cTerm = c;. 
19820 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
19830 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
19840 70 63 3d 3d 63 51 75 6f 74 65 20 26 26 20 63 21  pc==cQuote && c!
19850 3d 27 5c 72 27 20 29 7b 0a 20 20 20 20 20 20 20  ='\r' ){.       
19860 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
19870 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 75 6e 65  err, "%s:%d: une
19880 73 63 61 70 65 64 20 25 63 20 63 68 61 72 61 63  scaped %c charac
19890 74 65 72 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  ter\n",.        
198a0 20 20 20 20 20 20 20 20 70 2d 3e 7a 46 69 6c 65          p->zFile
198b0 2c 20 70 2d 3e 6e 4c 69 6e 65 2c 20 63 51 75 6f  , p->nLine, cQuo
198c0 74 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  te);.      }.   
198d0 20 20 20 69 66 28 20 63 3d 3d 45 4f 46 20 29 7b     if( c==EOF ){
198e0 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
198f0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73  intf(stderr, "%s
19900 3a 25 64 3a 20 75 6e 74 65 72 6d 69 6e 61 74 65  :%d: unterminate
19910 64 20 25 63 2d 71 75 6f 74 65 64 20 66 69 65 6c  d %c-quoted fiel
19920 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  d\n",.          
19930 20 20 20 20 20 20 70 2d 3e 7a 46 69 6c 65 2c 20        p->zFile, 
19940 73 74 61 72 74 4c 69 6e 65 2c 20 63 51 75 6f 74  startLine, cQuot
19950 65 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 63  e);.        p->c
19960 54 65 72 6d 20 3d 20 63 3b 0a 20 20 20 20 20 20  Term = c;.      
19970 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
19980 0a 20 20 20 20 20 20 69 6d 70 6f 72 74 5f 61 70  .      import_ap
19990 70 65 6e 64 5f 63 68 61 72 28 70 2c 20 63 29 3b  pend_char(p, c);
199a0 0a 20 20 20 20 20 20 70 70 63 20 3d 20 70 63 3b  .      ppc = pc;
199b0 0a 20 20 20 20 20 20 70 63 20 3d 20 63 3b 0a 20  .      pc = c;. 
199c0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
199d0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
199e0 74 68 65 20 66 69 72 73 74 20 66 69 65 6c 64 20  the first field 
199f0 62 65 69 6e 67 20 70 61 72 73 65 64 20 61 6e 64  being parsed and
19a00 20 69 74 20 62 65 67 69 6e 73 20 77 69 74 68 20   it begins with 
19a10 74 68 65 0a 20 20 20 20 2a 2a 20 55 54 46 2d 38  the.    ** UTF-8
19a20 20 42 4f 4d 20 20 28 30 78 45 46 20 42 42 20 42   BOM  (0xEF BB B
19a30 46 29 20 74 68 65 6e 20 73 6b 69 70 20 74 68 65  F) then skip the
19a40 20 42 4f 4d 20 2a 2f 0a 20 20 20 20 69 66 28 20   BOM */.    if( 
19a50 28 63 26 30 78 66 66 29 3d 3d 30 78 65 66 20 26  (c&0xff)==0xef &
19a60 26 20 70 2d 3e 62 4e 6f 74 46 69 72 73 74 3d 3d  & p->bNotFirst==
19a70 30 20 29 7b 0a 20 20 20 20 20 20 69 6d 70 6f 72  0 ){.      impor
19a80 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70 2c  t_append_char(p,
19a90 20 63 29 3b 0a 20 20 20 20 20 20 63 20 3d 20 66   c);.      c = f
19aa0 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20  getc(p->in);.   
19ab0 20 20 20 69 66 28 20 28 63 26 30 78 66 66 29 3d     if( (c&0xff)=
19ac0 3d 30 78 62 62 20 29 7b 0a 20 20 20 20 20 20 20  =0xbb ){.       
19ad0 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63   import_append_c
19ae0 68 61 72 28 70 2c 20 63 29 3b 0a 20 20 20 20 20  har(p, c);.     
19af0 20 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d 3e     c = fgetc(p->
19b00 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  in);.        if(
19b10 20 28 63 26 30 78 66 66 29 3d 3d 30 78 62 66 20   (c&0xff)==0xbf 
19b20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ){.          p->
19b30 62 4e 6f 74 46 69 72 73 74 20 3d 20 31 3b 0a 20  bNotFirst = 1;. 
19b40 20 20 20 20 20 20 20 20 20 70 2d 3e 6e 20 3d 20           p->n = 
19b50 30 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  0;.          ret
19b60 75 72 6e 20 63 73 76 5f 72 65 61 64 5f 6f 6e 65  urn csv_read_one
19b70 5f 66 69 65 6c 64 28 70 29 3b 0a 20 20 20 20 20  _field(p);.     
19b80 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
19b90 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 63 21   }.    while( c!
19ba0 3d 45 4f 46 20 26 26 20 63 21 3d 63 53 65 70 20  =EOF && c!=cSep 
19bb0 26 26 20 63 21 3d 72 53 65 70 20 29 7b 0a 20 20  && c!=rSep ){.  
19bc0 20 20 20 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e      import_appen
19bd0 64 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a 20 20  d_char(p, c);.  
19be0 20 20 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d      c = fgetc(p-
19bf0 3e 69 6e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >in);.    }.    
19c00 69 66 28 20 63 3d 3d 72 53 65 70 20 29 7b 0a 20  if( c==rSep ){. 
19c10 20 20 20 20 20 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b       p->nLine++;
19c20 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 3e  .      if( p->n>
19c30 30 20 26 26 20 70 2d 3e 7a 5b 70 2d 3e 6e 2d 31  0 && p->z[p->n-1
19c40 5d 3d 3d 27 5c 72 27 20 29 20 70 2d 3e 6e 2d 2d  ]=='\r' ) p->n--
19c50 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 63  ;.    }.    p->c
19c60 54 65 72 6d 20 3d 20 63 3b 0a 20 20 7d 0a 20 20  Term = c;.  }.  
19c70 69 66 28 20 70 2d 3e 7a 20 29 20 70 2d 3e 7a 5b  if( p->z ) p->z[
19c80 70 2d 3e 6e 5d 20 3d 20 30 3b 0a 20 20 70 2d 3e  p->n] = 0;.  p->
19c90 62 4e 6f 74 46 69 72 73 74 20 3d 20 31 3b 0a 20  bNotFirst = 1;. 
19ca0 20 72 65 74 75 72 6e 20 70 2d 3e 7a 3b 0a 7d 0a   return p->z;.}.
19cb0 0a 2f 2a 20 52 65 61 64 20 61 20 73 69 6e 67 6c  ./* Read a singl
19cc0 65 20 66 69 65 6c 64 20 6f 66 20 41 53 43 49 49  e field of ASCII
19cd0 20 64 65 6c 69 6d 69 74 65 64 20 74 65 78 74 2e   delimited text.
19ce0 0a 2a 2a 0a 2a 2a 20 20 20 2b 20 20 49 6e 70 75  .**.**   +  Inpu
19cf0 74 20 63 6f 6d 65 73 20 66 72 6f 6d 20 70 2d 3e  t comes from p->
19d00 69 6e 2e 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72  in..**   +  Stor
19d10 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 2d 3e  e results in p->
19d20 7a 20 6f 66 20 6c 65 6e 67 74 68 20 70 2d 3e 6e  z of length p->n
19d30 2e 20 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  .  Space to hold
19d40 20 70 2d 3e 7a 20 63 6f 6d 65 73 0a 2a 2a 20 20   p->z comes.**  
19d50 20 20 20 20 66 72 6f 6d 20 73 71 6c 69 74 65 33      from sqlite3
19d60 5f 6d 61 6c 6c 6f 63 36 34 28 29 2e 0a 2a 2a 20  _malloc64()..** 
19d70 20 20 2b 20 20 55 73 65 20 70 2d 3e 63 53 65 70    +  Use p->cSep
19d80 20 61 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 73   as the column s
19d90 65 70 61 72 61 74 6f 72 2e 20 20 54 68 65 20 64  eparator.  The d
19da0 65 66 61 75 6c 74 20 69 73 20 22 5c 78 31 46 22  efault is "\x1F"
19db0 2e 0a 2a 2a 20 20 20 2b 20 20 55 73 65 20 70 2d  ..**   +  Use p-
19dc0 3e 72 53 65 70 20 61 73 20 74 68 65 20 72 6f 77  >rSep as the row
19dd0 20 73 65 70 61 72 61 74 6f 72 2e 20 20 54 68 65   separator.  The
19de0 20 64 65 66 61 75 6c 74 20 69 73 20 22 5c 78 31   default is "\x1
19df0 45 22 2e 0a 2a 2a 20 20 20 2b 20 20 4b 65 65 70  E"..**   +  Keep
19e00 20 74 72 61 63 6b 20 6f 66 20 74 68 65 20 72 6f   track of the ro
19e10 77 20 6e 75 6d 62 65 72 20 69 6e 20 70 2d 3e 6e  w number in p->n
19e20 4c 69 6e 65 2e 0a 2a 2a 20 20 20 2b 20 20 53 74  Line..**   +  St
19e30 6f 72 65 20 74 68 65 20 63 68 61 72 61 63 74 65  ore the characte
19e40 72 20 74 68 61 74 20 74 65 72 6d 69 6e 61 74 65  r that terminate
19e50 73 20 74 68 65 20 66 69 65 6c 64 20 69 6e 20 70  s the field in p
19e60 2d 3e 63 54 65 72 6d 2e 20 20 53 74 6f 72 65 0a  ->cTerm.  Store.
19e70 2a 2a 20 20 20 20 20 20 45 4f 46 20 6f 6e 20 65  **      EOF on e
19e80 6e 64 2d 6f 66 2d 66 69 6c 65 2e 0a 2a 2a 20 20  nd-of-file..**  
19e90 20 2b 20 20 52 65 70 6f 72 74 20 73 79 6e 74 61   +  Report synta
19ea0 78 20 65 72 72 6f 72 73 20 6f 6e 20 73 74 64 65  x errors on stde
19eb0 72 72 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  rr.*/.static cha
19ec0 72 20 2a 53 51 4c 49 54 45 5f 43 44 45 43 4c 20  r *SQLITE_CDECL 
19ed0 61 73 63 69 69 5f 72 65 61 64 5f 6f 6e 65 5f 66  ascii_read_one_f
19ee0 69 65 6c 64 28 49 6d 70 6f 72 74 43 74 78 20 2a  ield(ImportCtx *
19ef0 70 29 7b 0a 20 20 69 6e 74 20 63 3b 0a 20 20 69  p){.  int c;.  i
19f00 6e 74 20 63 53 65 70 20 3d 20 70 2d 3e 63 43 6f  nt cSep = p->cCo
19f10 6c 53 65 70 3b 0a 20 20 69 6e 74 20 72 53 65 70  lSep;.  int rSep
19f20 20 3d 20 70 2d 3e 63 52 6f 77 53 65 70 3b 0a 20   = p->cRowSep;. 
19f30 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20 63 20 3d   p->n = 0;.  c =
19f40 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20   fgetc(p->in);. 
19f50 20 69 66 28 20 63 3d 3d 45 4f 46 20 7c 7c 20 73   if( c==EOF || s
19f60 65 65 6e 49 6e 74 65 72 72 75 70 74 20 29 7b 0a  eenInterrupt ){.
19f70 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20 45      p->cTerm = E
19f80 4f 46 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  OF;.    return 0
19f90 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20 63  ;.  }.  while( c
19fa0 21 3d 45 4f 46 20 26 26 20 63 21 3d 63 53 65 70  !=EOF && c!=cSep
19fb0 20 26 26 20 63 21 3d 72 53 65 70 20 29 7b 0a 20   && c!=rSep ){. 
19fc0 20 20 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64     import_append
19fd0 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a 20 20 20  _char(p, c);.   
19fe0 20 63 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e   c = fgetc(p->in
19ff0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 3d 3d  );.  }.  if( c==
1a000 72 53 65 70 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  rSep ){.    p->n
1a010 4c 69 6e 65 2b 2b 3b 0a 20 20 7d 0a 20 20 70 2d  Line++;.  }.  p-
1a020 3e 63 54 65 72 6d 20 3d 20 63 3b 0a 20 20 69 66  >cTerm = c;.  if
1a030 28 20 70 2d 3e 7a 20 29 20 70 2d 3e 7a 5b 70 2d  ( p->z ) p->z[p-
1a040 3e 6e 5d 20 3d 20 30 3b 0a 20 20 72 65 74 75 72  >n] = 0;.  retur
1a050 6e 20 70 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  n p->z;.}../*.**
1a060 20 54 72 79 20 74 6f 20 74 72 61 6e 73 66 65 72   Try to transfer
1a070 20 64 61 74 61 20 66 6f 72 20 74 61 62 6c 65 20   data for table 
1a080 7a 54 61 62 6c 65 2e 20 20 49 66 20 61 6e 20 65  zTable.  If an e
1a090 72 72 6f 72 20 69 73 20 73 65 65 6e 20 77 68 69  rror is seen whi
1a0a0 6c 65 0a 2a 2a 20 6d 6f 76 69 6e 67 20 66 6f 72  le.** moving for
1a0b0 77 61 72 64 2c 20 74 72 79 20 74 6f 20 67 6f 20  ward, try to go 
1a0c0 62 61 63 6b 77 61 72 64 73 2e 20 20 54 68 65 20  backwards.  The 
1a0d0 62 61 63 6b 77 61 72 64 73 20 6d 6f 76 65 6d 65  backwards moveme
1a0e0 6e 74 20 77 6f 6e 27 74 0a 2a 2a 20 77 6f 72 6b  nt won't.** work
1a0f0 20 66 6f 72 20 57 49 54 48 4f 55 54 20 52 4f 57   for WITHOUT ROW
1a100 49 44 20 74 61 62 6c 65 73 2e 0a 2a 2f 0a 73 74  ID tables..*/.st
1a110 61 74 69 63 20 76 6f 69 64 20 74 72 79 54 6f 43  atic void tryToC
1a120 6c 6f 6e 65 44 61 74 61 28 0a 20 20 53 68 65 6c  loneData(.  Shel
1a130 6c 53 74 61 74 65 20 2a 70 2c 0a 20 20 73 71 6c  lState *p,.  sql
1a140 69 74 65 33 20 2a 6e 65 77 44 62 2c 0a 20 20 63  ite3 *newDb,.  c
1a150 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 6c  onst char *zTabl
1a160 65 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  e.){.  sqlite3_s
1a170 74 6d 74 20 2a 70 51 75 65 72 79 20 3d 20 30 3b  tmt *pQuery = 0;
1a180 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
1a190 2a 70 49 6e 73 65 72 74 20 3d 20 30 3b 0a 20 20  *pInsert = 0;.  
1a1a0 63 68 61 72 20 2a 7a 51 75 65 72 79 20 3d 20 30  char *zQuery = 0
1a1b0 3b 0a 20 20 63 68 61 72 20 2a 7a 49 6e 73 65 72  ;.  char *zInser
1a1c0 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b  t = 0;.  int rc;
1a1d0 0a 20 20 69 6e 74 20 69 2c 20 6a 2c 20 6e 3b 0a  .  int i, j, n;.
1a1e0 20 20 69 6e 74 20 6e 54 61 62 6c 65 20 3d 20 28    int nTable = (
1a1f0 69 6e 74 29 73 74 72 6c 65 6e 28 7a 54 61 62 6c  int)strlen(zTabl
1a200 65 29 3b 0a 20 20 69 6e 74 20 6b 20 3d 20 30 3b  e);.  int k = 0;
1a210 0a 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a  .  int cnt = 0;.
1a220 20 20 63 6f 6e 73 74 20 69 6e 74 20 73 70 69 6e    const int spin
1a230 52 61 74 65 20 3d 20 31 30 30 30 30 3b 0a 0a 20  Rate = 10000;.. 
1a240 20 7a 51 75 65 72 79 20 3d 20 73 71 6c 69 74 65   zQuery = sqlite
1a250 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43  3_mprintf("SELEC
1a260 54 20 2a 20 46 52 4f 4d 20 5c 22 25 77 5c 22 22  T * FROM \"%w\""
1a270 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 72 63 20  , zTable);.  rc 
1a280 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
1a290 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 51 75 65  e_v2(p->db, zQue
1a2a0 72 79 2c 20 2d 31 2c 20 26 70 51 75 65 72 79 2c  ry, -1, &pQuery,
1a2b0 20 30 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b   0);.  if( rc ){
1a2c0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
1a2d0 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20  (stderr, "Error 
1a2e0 25 64 3a 20 25 73 20 6f 6e 20 5b 25 73 5d 5c 6e  %d: %s on [%s]\n
1a2f0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ",.            s
1a300 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
1a310 65 72 72 63 6f 64 65 28 70 2d 3e 64 62 29 2c 20  errcode(p->db), 
1a320 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70  sqlite3_errmsg(p
1a330 2d 3e 64 62 29 2c 0a 20 20 20 20 20 20 20 20 20  ->db),.         
1a340 20 20 20 7a 51 75 65 72 79 29 3b 0a 20 20 20 20     zQuery);.    
1a350 67 6f 74 6f 20 65 6e 64 5f 64 61 74 61 5f 78 66  goto end_data_xf
1a360 65 72 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73 71  er;.  }.  n = sq
1a370 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
1a380 6e 74 28 70 51 75 65 72 79 29 3b 0a 20 20 7a 49  nt(pQuery);.  zI
1a390 6e 73 65 72 74 20 3d 20 73 71 6c 69 74 65 33 5f  nsert = sqlite3_
1a3a0 6d 61 6c 6c 6f 63 36 34 28 32 30 30 20 2b 20 6e  malloc64(200 + n
1a3b0 54 61 62 6c 65 20 2b 20 6e 2a 33 29 3b 0a 20 20  Table + n*3);.  
1a3c0 69 66 28 20 7a 49 6e 73 65 72 74 3d 3d 30 20 29  if( zInsert==0 )
1a3d0 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
1a3e0 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f 66  (stderr, "out of
1a3f0 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20   memory\n");.   
1a400 20 67 6f 74 6f 20 65 6e 64 5f 64 61 74 61 5f 78   goto end_data_x
1a410 66 65 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  fer;.  }.  sqlit
1a420 65 33 5f 73 6e 70 72 69 6e 74 66 28 32 30 30 2b  e3_snprintf(200+
1a430 6e 54 61 62 6c 65 2c 7a 49 6e 73 65 72 74 2c 0a  nTable,zInsert,.
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a450 20 20 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47     "INSERT OR IG
1a460 4e 4f 52 45 20 49 4e 54 4f 20 5c 22 25 73 5c 22  NORE INTO \"%s\"
1a470 20 56 41 4c 55 45 53 28 3f 22 2c 20 7a 54 61 62   VALUES(?", zTab
1a480 6c 65 29 3b 0a 20 20 69 20 3d 20 28 69 6e 74 29  le);.  i = (int)
1a490 73 74 72 6c 65 6e 28 7a 49 6e 73 65 72 74 29 3b  strlen(zInsert);
1a4a0 0a 20 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e 3b  .  for(j=1; j<n;
1a4b0 20 6a 2b 2b 29 7b 0a 20 20 20 20 6d 65 6d 63 70   j++){.    memcp
1a4c0 79 28 7a 49 6e 73 65 72 74 2b 69 2c 20 22 2c 3f  y(zInsert+i, ",?
1a4d0 22 2c 20 32 29 3b 0a 20 20 20 20 69 20 2b 3d 20  ", 2);.    i += 
1a4e0 32 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28  2;.  }.  memcpy(
1a4f0 7a 49 6e 73 65 72 74 2b 69 2c 20 22 29 3b 22 2c  zInsert+i, ");",
1a500 20 33 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   3);.  rc = sqli
1a510 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 6e  te3_prepare_v2(n
1a520 65 77 44 62 2c 20 7a 49 6e 73 65 72 74 2c 20 2d  ewDb, zInsert, -
1a530 31 2c 20 26 70 49 6e 73 65 72 74 2c 20 30 29 3b  1, &pInsert, 0);
1a540 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
1a550 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
1a560 65 72 72 2c 20 22 45 72 72 6f 72 20 25 64 3a 20  err, "Error %d: 
1a570 25 73 20 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20  %s on [%s]\n",. 
1a580 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
1a590 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
1a5a0 6f 64 65 28 6e 65 77 44 62 29 2c 20 73 71 6c 69  ode(newDb), sqli
1a5b0 74 65 33 5f 65 72 72 6d 73 67 28 6e 65 77 44 62  te3_errmsg(newDb
1a5c0 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a  ),.            z
1a5d0 51 75 65 72 79 29 3b 0a 20 20 20 20 67 6f 74 6f  Query);.    goto
1a5e0 20 65 6e 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a   end_data_xfer;.
1a5f0 20 20 7d 0a 20 20 66 6f 72 28 6b 3d 30 3b 20 6b    }.  for(k=0; k
1a600 3c 32 3b 20 6b 2b 2b 29 7b 0a 20 20 20 20 77 68  <2; k++){.    wh
1a610 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69 74  ile( (rc = sqlit
1a620 65 33 5f 73 74 65 70 28 70 51 75 65 72 79 29 29  e3_step(pQuery))
1a630 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a  ==SQLITE_ROW ){.
1a640 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
1a650 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  <n; i++){.      
1a660 20 20 73 77 69 74 63 68 28 20 73 71 6c 69 74 65    switch( sqlite
1a670 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 51  3_column_type(pQ
1a680 75 65 72 79 2c 20 69 29 20 29 7b 0a 20 20 20 20  uery, i) ){.    
1a690 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
1a6a0 45 5f 4e 55 4c 4c 3a 20 7b 0a 20 20 20 20 20 20  E_NULL: {.      
1a6b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69        sqlite3_bi
1a6c0 6e 64 5f 6e 75 6c 6c 28 70 49 6e 73 65 72 74 2c  nd_null(pInsert,
1a6d0 20 69 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 20   i+1);.         
1a6e0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1a6f0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1a700 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45  case SQLITE_INTE
1a710 47 45 52 3a 20 7b 0a 20 20 20 20 20 20 20 20 20  GER: {.         
1a720 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
1a730 69 6e 74 36 34 28 70 49 6e 73 65 72 74 2c 20 69  int64(pInsert, i
1a740 2b 31 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  +1, sqlite3_colu
1a750 6d 6e 5f 69 6e 74 36 34 28 70 51 75 65 72 79 2c  mn_int64(pQuery,
1a760 69 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  i));.           
1a770 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
1a780 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 63 61    }.          ca
1a790 73 65 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3a  se SQLITE_FLOAT:
1a7a0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
1a7b0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
1a7c0 6c 65 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 2c  le(pInsert, i+1,
1a7d0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1a7e0 64 6f 75 62 6c 65 28 70 51 75 65 72 79 2c 69 29  double(pQuery,i)
1a7f0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  );.            b
1a800 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
1a810 7d 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65  }.          case
1a820 20 53 51 4c 49 54 45 5f 54 45 58 54 3a 20 7b 0a   SQLITE_TEXT: {.
1a830 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
1a840 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 49  te3_bind_text(pI
1a850 6e 73 65 72 74 2c 20 69 2b 31 2c 0a 20 20 20 20  nsert, i+1,.    
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a870 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 74 20           (const 
1a880 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
1a890 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75 65 72 79  lumn_text(pQuery
1a8a0 2c 69 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ,i),.           
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8c0 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41    -1, SQLITE_STA
1a8d0 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20  TIC);.          
1a8e0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
1a8f0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 63     }.          c
1a900 61 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3a  ase SQLITE_BLOB:
1a910 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
1a920 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
1a930 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 2c 20 73  (pInsert, i+1, s
1a940 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
1a950 6f 62 28 70 51 75 65 72 79 2c 69 29 2c 0a 20 20  ob(pQuery,i),.  
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a980 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1a990 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70  3_column_bytes(p
1a9a0 51 75 65 72 79 2c 69 29 2c 0a 20 20 20 20 20 20  Query,i),.      
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9d0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 53 54 41        SQLITE_STA
1a9e0 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20  TIC);.          
1a9f0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
1aa00 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
1aa10 20 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20 66 6f       } /* End fo
1aa20 72 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d 20  r */.      rc = 
1aa30 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 49 6e  sqlite3_step(pIn
1aa40 73 65 72 74 29 3b 0a 20 20 20 20 20 20 69 66 28  sert);.      if(
1aa50 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc!=SQLITE_OK &
1aa60 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57  & rc!=SQLITE_ROW
1aa70 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 44   && rc!=SQLITE_D
1aa80 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20 75  ONE ){.        u
1aa90 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
1aaa0 72 2c 20 22 45 72 72 6f 72 20 25 64 3a 20 25 73  r, "Error %d: %s
1aab0 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 78 74  \n", sqlite3_ext
1aac0 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 6e 65  ended_errcode(ne
1aad0 77 44 62 29 2c 0a 20 20 20 20 20 20 20 20 20 20  wDb),.          
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
1aaf0 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 6e 65 77  lite3_errmsg(new
1ab00 44 62 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Db));.      }.  
1ab10 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65      sqlite3_rese
1ab20 74 28 70 49 6e 73 65 72 74 29 3b 0a 20 20 20 20  t(pInsert);.    
1ab30 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 69    cnt++;.      i
1ab40 66 28 20 28 63 6e 74 25 73 70 69 6e 52 61 74 65  f( (cnt%spinRate
1ab50 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
1ab60 70 72 69 6e 74 66 28 22 25 63 5c 62 22 2c 20 22  printf("%c\b", "
1ab70 7c 2f 2d 5c 5c 22 5b 28 63 6e 74 2f 73 70 69 6e  |/-\\"[(cnt/spin
1ab80 52 61 74 65 29 25 34 5d 29 3b 0a 20 20 20 20 20  Rate)%4]);.     
1ab90 20 20 20 66 66 6c 75 73 68 28 73 74 64 6f 75 74     fflush(stdout
1aba0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
1abb0 20 2f 2a 20 45 6e 64 20 77 68 69 6c 65 20 2a 2f   /* End while */
1abc0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
1abd0 49 54 45 5f 44 4f 4e 45 20 29 20 62 72 65 61 6b  ITE_DONE ) break
1abe0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  ;.    sqlite3_fi
1abf0 6e 61 6c 69 7a 65 28 70 51 75 65 72 79 29 3b 0a  nalize(pQuery);.
1ac00 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
1ac10 28 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 7a 51  (zQuery);.    zQ
1ac20 75 65 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d  uery = sqlite3_m
1ac30 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20 2a  printf("SELECT *
1ac40 20 46 52 4f 4d 20 5c 22 25 77 5c 22 20 4f 52 44   FROM \"%w\" ORD
1ac50 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43  ER BY rowid DESC
1ac60 3b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ;",.            
1ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac80 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 72 63   zTable);.    rc
1ac90 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
1aca0 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 51 75  re_v2(p->db, zQu
1acb0 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65 72 79  ery, -1, &pQuery
1acc0 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 72 63  , 0);.    if( rc
1acd0 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
1ace0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 57  rintf(stderr, "W
1acf0 61 72 6e 69 6e 67 3a 20 63 61 6e 6e 6f 74 20 73  arning: cannot s
1ad00 74 65 70 20 5c 22 25 73 5c 22 20 62 61 63 6b 77  tep \"%s\" backw
1ad10 61 72 64 73 22 2c 20 7a 54 61 62 6c 65 29 3b 0a  ards", zTable);.
1ad20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1ad30 20 7d 0a 20 20 7d 20 2f 2a 20 45 6e 64 20 66 6f   }.  } /* End fo
1ad40 72 28 6b 3d 30 2e 2e 2e 29 20 2a 2f 0a 0a 65 6e  r(k=0...) */..en
1ad50 64 5f 64 61 74 61 5f 78 66 65 72 3a 0a 20 20 73  d_data_xfer:.  s
1ad60 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1ad70 70 51 75 65 72 79 29 3b 0a 20 20 73 71 6c 69 74  pQuery);.  sqlit
1ad80 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 49 6e 73  e3_finalize(pIns
1ad90 65 72 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  ert);.  sqlite3_
1ada0 66 72 65 65 28 7a 51 75 65 72 79 29 3b 0a 20 20  free(zQuery);.  
1adb0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 49 6e  sqlite3_free(zIn
1adc0 73 65 72 74 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  sert);.}.../*.**
1add0 20 54 72 79 20 74 6f 20 74 72 61 6e 73 66 65 72   Try to transfer
1ade0 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68 65   all rows of the
1adf0 20 73 63 68 65 6d 61 20 74 68 61 74 20 6d 61 74   schema that mat
1ae00 63 68 20 7a 57 68 65 72 65 2e 20 20 46 6f 72 0a  ch zWhere.  For.
1ae10 2a 2a 20 65 61 63 68 20 72 6f 77 2c 20 69 6e 76  ** each row, inv
1ae20 6f 6b 65 20 78 46 6f 72 45 61 63 68 28 29 20 6f  oke xForEach() o
1ae30 6e 20 74 68 65 20 6f 62 6a 65 63 74 20 64 65 66  n the object def
1ae40 69 6e 65 64 20 62 79 20 74 68 61 74 20 72 6f 77  ined by that row
1ae50 2e 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72  ..** If an error
1ae60 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20   is encountered 
1ae70 77 68 69 6c 65 20 6d 6f 76 69 6e 67 20 66 6f 72  while moving for
1ae80 77 61 72 64 20 74 68 72 6f 75 67 68 20 74 68 65  ward through the
1ae90 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  .** sqlite_maste
1aea0 72 20 74 61 62 6c 65 2c 20 74 72 79 20 61 67 61  r table, try aga
1aeb0 69 6e 20 6d 6f 76 69 6e 67 20 62 61 63 6b 77 61  in moving backwa
1aec0 72 64 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  rds..*/.static v
1aed0 6f 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65 53 63  oid tryToCloneSc
1aee0 68 65 6d 61 28 0a 20 20 53 68 65 6c 6c 53 74 61  hema(.  ShellSta
1aef0 74 65 20 2a 70 2c 0a 20 20 73 71 6c 69 74 65 33  te *p,.  sqlite3
1af00 20 2a 6e 65 77 44 62 2c 0a 20 20 63 6f 6e 73 74   *newDb,.  const
1af10 20 63 68 61 72 20 2a 7a 57 68 65 72 65 2c 0a 20   char *zWhere,. 
1af20 20 76 6f 69 64 20 28 2a 78 46 6f 72 45 61 63 68   void (*xForEach
1af30 29 28 53 68 65 6c 6c 53 74 61 74 65 2a 2c 73 71  )(ShellState*,sq
1af40 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1af50 72 2a 29 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  r*).){.  sqlite3
1af60 5f 73 74 6d 74 20 2a 70 51 75 65 72 79 20 3d 20  _stmt *pQuery = 
1af70 30 3b 0a 20 20 63 68 61 72 20 2a 7a 51 75 65 72  0;.  char *zQuer
1af80 79 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b  y = 0;.  int rc;
1af90 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  .  const unsigne
1afa0 64 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20  d char *zName;. 
1afb0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
1afc0 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 63 68  char *zSql;.  ch
1afd0 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ar *zErrMsg = 0;
1afe0 0a 0a 20 20 7a 51 75 65 72 79 20 3d 20 73 71 6c  ..  zQuery = sql
1aff0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45  ite3_mprintf("SE
1b000 4c 45 43 54 20 6e 61 6d 65 2c 20 73 71 6c 20 46  LECT name, sql F
1b010 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1b020 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r".             
1b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
1b040 57 48 45 52 45 20 25 73 22 2c 20 7a 57 68 65 72  WHERE %s", zWher
1b050 65 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  e);.  rc = sqlit
1b060 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
1b070 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31 2c  >db, zQuery, -1,
1b080 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20   &pQuery, 0);.  
1b090 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 75 74  if( rc ){.    ut
1b0a0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
1b0b0 2c 20 22 45 72 72 6f 72 3a 20 28 25 64 29 20 25  , "Error: (%d) %
1b0c0 73 20 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20  s on [%s]\n",.  
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0e0 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64    sqlite3_extend
1b0f0 65 64 5f 65 72 72 63 6f 64 65 28 70 2d 3e 64 62  ed_errcode(p->db
1b100 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
1b110 67 28 70 2d 3e 64 62 29 2c 0a 20 20 20 20 20 20  g(p->db),.      
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 51                zQ
1b130 75 65 72 79 29 3b 0a 20 20 20 20 67 6f 74 6f 20  uery);.    goto 
1b140 65 6e 64 5f 73 63 68 65 6d 61 5f 78 66 65 72 3b  end_schema_xfer;
1b150 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20 28 72  .  }.  while( (r
1b160 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70  c = sqlite3_step
1b170 28 70 51 75 65 72 79 29 29 3d 3d 53 51 4c 49 54  (pQuery))==SQLIT
1b180 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 7a 4e 61  E_ROW ){.    zNa
1b190 6d 65 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  me = sqlite3_col
1b1a0 75 6d 6e 5f 74 65 78 74 28 70 51 75 65 72 79 2c  umn_text(pQuery,
1b1b0 20 30 29 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20   0);.    zSql = 
1b1c0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
1b1d0 65 78 74 28 70 51 75 65 72 79 2c 20 31 29 3b 0a  ext(pQuery, 1);.
1b1e0 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 2e 2e      printf("%s..
1b1f0 2e 20 22 2c 20 7a 4e 61 6d 65 29 3b 20 66 66 6c  . ", zName); ffl
1b200 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20  ush(stdout);.   
1b210 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e 65   sqlite3_exec(ne
1b220 77 44 62 2c 20 28 63 6f 6e 73 74 20 63 68 61 72  wDb, (const char
1b230 2a 29 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 26 7a  *)zSql, 0, 0, &z
1b240 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66 28  ErrMsg);.    if(
1b250 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20   zErrMsg ){.    
1b260 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
1b270 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73  derr, "Error: %s
1b280 5c 6e 53 51 4c 3a 20 5b 25 73 5d 5c 6e 22 2c 20  \nSQL: [%s]\n", 
1b290 7a 45 72 72 4d 73 67 2c 20 7a 53 71 6c 29 3b 0a  zErrMsg, zSql);.
1b2a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
1b2b0 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  ee(zErrMsg);.   
1b2c0 20 20 20 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a     zErrMsg = 0;.
1b2d0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 78 46      }.    if( xF
1b2e0 6f 72 45 61 63 68 20 29 7b 0a 20 20 20 20 20 20  orEach ){.      
1b2f0 78 46 6f 72 45 61 63 68 28 70 2c 20 6e 65 77 44  xForEach(p, newD
1b300 62 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  b, (const char*)
1b310 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 20 20  zName);.    }.  
1b320 20 20 70 72 69 6e 74 66 28 22 64 6f 6e 65 5c 6e    printf("done\n
1b330 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  ");.  }.  if( rc
1b340 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  !=SQLITE_DONE ){
1b350 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
1b360 61 6c 69 7a 65 28 70 51 75 65 72 79 29 3b 0a 20  alize(pQuery);. 
1b370 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
1b380 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 7a 51 75  zQuery);.    zQu
1b390 65 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ery = sqlite3_mp
1b3a0 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20 6e 61  rintf("SELECT na
1b3b0 6d 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  me, sql FROM sql
1b3c0 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20  ite_master".    
1b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3e0 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45           " WHERE
1b3f0 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77   %s ORDER BY row
1b400 69 64 20 44 45 53 43 22 2c 20 7a 57 68 65 72 65  id DESC", zWhere
1b410 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
1b420 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
1b430 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31  ->db, zQuery, -1
1b440 2c 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  , &pQuery, 0);. 
1b450 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
1b460 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1b470 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 28  tderr, "Error: (
1b480 25 64 29 20 25 73 20 6f 6e 20 5b 25 73 5d 5c 6e  %d) %s on [%s]\n
1b490 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
1b4a0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1b4b0 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
1b4c0 65 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65  e(p->db), sqlite
1b4d0 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 2c  3_errmsg(p->db),
1b4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b4f0 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b 0a         zQuery);.
1b500 20 20 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 73        goto end_s
1b510 63 68 65 6d 61 5f 78 66 65 72 3b 0a 20 20 20 20  chema_xfer;.    
1b520 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 28 72 63  }.    while( (rc
1b530 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28   = sqlite3_step(
1b540 70 51 75 65 72 79 29 29 3d 3d 53 51 4c 49 54 45  pQuery))==SQLITE
1b550 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 7a 4e  _ROW ){.      zN
1b560 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  ame = sqlite3_co
1b570 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75 65 72 79  lumn_text(pQuery
1b580 2c 20 30 29 3b 0a 20 20 20 20 20 20 7a 53 71 6c  , 0);.      zSql
1b590 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
1b5a0 6e 5f 74 65 78 74 28 70 51 75 65 72 79 2c 20 31  n_text(pQuery, 1
1b5b0 29 3b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28  );.      printf(
1b5c0 22 25 73 2e 2e 2e 20 22 2c 20 7a 4e 61 6d 65 29  "%s... ", zName)
1b5d0 3b 20 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29  ; fflush(stdout)
1b5e0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
1b5f0 65 78 65 63 28 6e 65 77 44 62 2c 20 28 63 6f 6e  exec(newDb, (con
1b600 73 74 20 63 68 61 72 2a 29 7a 53 71 6c 2c 20 30  st char*)zSql, 0
1b610 2c 20 30 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a  , 0, &zErrMsg);.
1b620 20 20 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73        if( zErrMs
1b630 67 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  g ){.        utf
1b640 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
1b650 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 53 51 4c   "Error: %s\nSQL
1b660 3a 20 5b 25 73 5d 5c 6e 22 2c 20 7a 45 72 72 4d  : [%s]\n", zErrM
1b670 73 67 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  sg, zSql);.     
1b680 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
1b690 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20  zErrMsg);.      
1b6a0 20 20 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20    zErrMsg = 0;. 
1b6b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
1b6c0 20 78 46 6f 72 45 61 63 68 20 29 7b 0a 20 20 20   xForEach ){.   
1b6d0 20 20 20 20 20 78 46 6f 72 45 61 63 68 28 70 2c       xForEach(p,
1b6e0 20 6e 65 77 44 62 2c 20 28 63 6f 6e 73 74 20 63   newDb, (const c
1b6f0 68 61 72 2a 29 7a 4e 61 6d 65 29 3b 0a 20 20 20  har*)zName);.   
1b700 20 20 20 7d 0a 20 20 20 20 20 20 70 72 69 6e 74     }.      print
1b710 66 28 22 64 6f 6e 65 5c 6e 22 29 3b 0a 20 20 20  f("done\n");.   
1b720 20 7d 0a 20 20 7d 0a 65 6e 64 5f 73 63 68 65 6d   }.  }.end_schem
1b730 61 5f 78 66 65 72 3a 0a 20 20 73 71 6c 69 74 65  a_xfer:.  sqlite
1b740 33 5f 66 69 6e 61 6c 69 7a 65 28 70 51 75 65 72  3_finalize(pQuer
1b750 79 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  y);.  sqlite3_fr
1b760 65 65 28 7a 51 75 65 72 79 29 3b 0a 7d 0a 0a 2f  ee(zQuery);.}../
1b770 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1b780 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61  database file na
1b790 6d 65 64 20 22 7a 4e 65 77 44 62 22 2e 20 20 54  med "zNewDb".  T
1b7a0 72 79 20 74 6f 20 72 65 63 6f 76 65 72 20 61 73  ry to recover as
1b7b0 20 6d 75 63 68 20 69 6e 66 6f 72 6d 61 74 69 6f   much informatio
1b7c0 6e 0a 2a 2a 20 61 73 20 70 6f 73 73 69 62 6c 65  n.** as possible
1b7d0 20 6f 75 74 20 6f 66 20 74 68 65 20 6d 61 69 6e   out of the main
1b7e0 20 64 61 74 61 62 61 73 65 20 28 77 68 69 63 68   database (which
1b7f0 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70   might be corrup
1b800 74 29 20 61 6e 64 20 77 72 69 74 65 20 69 74 0a  t) and write it.
1b810 2a 2a 20 69 6e 74 6f 20 7a 4e 65 77 44 62 2e 0a  ** into zNewDb..
1b820 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  */.static void t
1b830 72 79 54 6f 43 6c 6f 6e 65 28 53 68 65 6c 6c 53  ryToClone(ShellS
1b840 74 61 74 65 20 2a 70 2c 20 63 6f 6e 73 74 20 63  tate *p, const c
1b850 68 61 72 20 2a 7a 4e 65 77 44 62 29 7b 0a 20 20  har *zNewDb){.  
1b860 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65  int rc;.  sqlite
1b870 33 20 2a 6e 65 77 44 62 20 3d 20 30 3b 0a 20 20  3 *newDb = 0;.  
1b880 69 66 28 20 61 63 63 65 73 73 28 7a 4e 65 77 44  if( access(zNewD
1b890 62 2c 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75  b,0)==0 ){.    u
1b8a0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
1b8b0 72 2c 20 22 46 69 6c 65 20 5c 22 25 73 5c 22 20  r, "File \"%s\" 
1b8c0 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2e 5c  already exists.\
1b8d0 6e 22 2c 20 7a 4e 65 77 44 62 29 3b 0a 20 20 20  n", zNewDb);.   
1b8e0 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 72   return;.  }.  r
1b8f0 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  c = sqlite3_open
1b900 28 7a 4e 65 77 44 62 2c 20 26 6e 65 77 44 62 29  (zNewDb, &newDb)
1b910 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
1b920 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
1b930 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20 63 72  derr, "Cannot cr
1b940 65 61 74 65 20 6f 75 74 70 75 74 20 64 61 74 61  eate output data
1b950 62 61 73 65 3a 20 25 73 5c 6e 22 2c 0a 20 20 20  base: %s\n",.   
1b960 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1b970 5f 65 72 72 6d 73 67 28 6e 65 77 44 62 29 29 3b  _errmsg(newDb));
1b980 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
1b990 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
1b9a0 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74 61 62  , "PRAGMA writab
1b9b0 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 22 2c 20  le_schema=ON;", 
1b9c0 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71  0, 0, 0);.    sq
1b9d0 6c 69 74 65 33 5f 65 78 65 63 28 6e 65 77 44 62  lite3_exec(newDb
1b9e0 2c 20 22 42 45 47 49 4e 20 45 58 43 4c 55 53 49  , "BEGIN EXCLUSI
1b9f0 56 45 3b 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  VE;", 0, 0, 0);.
1ba00 20 20 20 20 74 72 79 54 6f 43 6c 6f 6e 65 53 63      tryToCloneSc
1ba10 68 65 6d 61 28 70 2c 20 6e 65 77 44 62 2c 20 22  hema(p, newDb, "
1ba20 74 79 70 65 3d 27 74 61 62 6c 65 27 22 2c 20 74  type='table'", t
1ba30 72 79 54 6f 43 6c 6f 6e 65 44 61 74 61 29 3b 0a  ryToCloneData);.
1ba40 20 20 20 20 74 72 79 54 6f 43 6c 6f 6e 65 53 63      tryToCloneSc
1ba50 68 65 6d 61 28 70 2c 20 6e 65 77 44 62 2c 20 22  hema(p, newDb, "
1ba60 74 79 70 65 21 3d 27 74 61 62 6c 65 27 22 2c 20  type!='table'", 
1ba70 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
1ba80 65 78 65 63 28 6e 65 77 44 62 2c 20 22 43 4f 4d  exec(newDb, "COM
1ba90 4d 49 54 3b 22 2c 20 30 2c 20 30 2c 20 30 29 3b  MIT;", 0, 0, 0);
1baa0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65  .    sqlite3_exe
1bab0 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41  c(p->db, "PRAGMA
1bac0 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
1bad0 3d 4f 46 46 3b 22 2c 20 30 2c 20 30 2c 20 30 29  =OFF;", 0, 0, 0)
1bae0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
1baf0 63 6c 6f 73 65 28 6e 65 77 44 62 29 3b 0a 7d 0a  close(newDb);.}.
1bb00 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  ./*.** Change th
1bb10 65 20 6f 75 74 70 75 74 20 66 69 6c 65 20 62 61  e output file ba
1bb20 63 6b 20 74 6f 20 73 74 64 6f 75 74 0a 2a 2f 0a  ck to stdout.*/.
1bb30 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70  static void outp
1bb40 75 74 5f 72 65 73 65 74 28 53 68 65 6c 6c 53 74  ut_reset(ShellSt
1bb50 61 74 65 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  ate *p){.  if( p
1bb60 2d 3e 6f 75 74 66 69 6c 65 5b 30 5d 3d 3d 27 7c  ->outfile[0]=='|
1bb70 27 20 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ' ){.#ifndef SQL
1bb80 49 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20  ITE_OMIT_POPEN. 
1bb90 20 20 20 70 63 6c 6f 73 65 28 70 2d 3e 6f 75 74     pclose(p->out
1bba0 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  );.#endif.  }els
1bbb0 65 7b 0a 20 20 20 20 6f 75 74 70 75 74 5f 66 69  e{.    output_fi
1bbc0 6c 65 5f 63 6c 6f 73 65 28 70 2d 3e 6f 75 74 29  le_close(p->out)
1bbd0 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6f 75 74 66 69  ;.  }.  p->outfi
1bbe0 6c 65 5b 30 5d 20 3d 20 30 3b 0a 20 20 70 2d 3e  le[0] = 0;.  p->
1bbf0 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 7d 0a  out = stdout;.}.
1bc00 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 61 6e 20 53 51  ./*.** Run an SQ
1bc10 4c 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65  L command and re
1bc20 74 75 72 6e 20 74 68 65 20 73 69 6e 67 6c 65 20  turn the single 
1bc30 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74 2e 0a  integer result..
1bc40 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64 62  */.static int db
1bc50 5f 69 6e 74 28 53 68 65 6c 6c 53 74 61 74 65 20  _int(ShellState 
1bc60 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  *p, const char *
1bc70 7a 53 71 6c 29 7b 0a 20 20 73 71 6c 69 74 65 33  zSql){.  sqlite3
1bc80 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
1bc90 69 6e 74 20 72 65 73 20 3d 20 30 3b 0a 20 20 73  int res = 0;.  s
1bca0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
1bcb0 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d  2(p->db, zSql, -
1bcc0 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
1bcd0 20 69 66 28 20 70 53 74 6d 74 20 26 26 20 73 71   if( pStmt && sq
1bce0 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
1bcf0 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
1bd00 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74  .    res = sqlit
1bd10 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53  e3_column_int(pS
1bd20 74 6d 74 2c 30 29 3b 0a 20 20 7d 0a 20 20 73 71  tmt,0);.  }.  sq
1bd30 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
1bd40 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  Stmt);.  return 
1bd50 72 65 73 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f  res;.}../*.** Co
1bd60 6e 76 65 72 74 20 61 20 32 2d 62 79 74 65 20 6f  nvert a 2-byte o
1bd70 72 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  r 4-byte big-end
1bd80 69 61 6e 20 69 6e 74 65 67 65 72 20 69 6e 74 6f  ian integer into
1bd90 20 61 20 6e 61 74 69 76 65 20 69 6e 74 65 67 65   a native intege
1bda0 72 0a 2a 2f 0a 73 74 61 74 69 63 20 75 6e 73 69  r.*/.static unsi
1bdb0 67 6e 65 64 20 69 6e 74 20 67 65 74 32 62 79 74  gned int get2byt
1bdc0 65 49 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  eInt(unsigned ch
1bdd0 61 72 20 2a 61 29 7b 0a 20 20 72 65 74 75 72 6e  ar *a){.  return
1bde0 20 28 61 5b 30 5d 3c 3c 38 29 20 2b 20 61 5b 31   (a[0]<<8) + a[1
1bdf0 5d 3b 0a 7d 0a 73 74 61 74 69 63 20 75 6e 73 69  ];.}.static unsi
1be00 67 6e 65 64 20 69 6e 74 20 67 65 74 34 62 79 74  gned int get4byt
1be10 65 49 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  eInt(unsigned ch
1be20 61 72 20 2a 61 29 7b 0a 20 20 72 65 74 75 72 6e  ar *a){.  return
1be30 20 28 61 5b 30 5d 3c 3c 32 34 29 20 2b 20 28 61   (a[0]<<24) + (a
1be40 5b 31 5d 3c 3c 31 36 29 20 2b 20 28 61 5b 32 5d  [1]<<16) + (a[2]
1be50 3c 3c 38 29 20 2b 20 61 5b 33 5d 3b 0a 7d 0a 0a  <<8) + a[3];.}..
1be60 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61  /*.** Implementa
1be70 74 69 6f 6e 20 6f 66 20 74 68 65 20 22 2e 69 6e  tion of the ".in
1be80 66 6f 22 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2a 0a  fo" command..**.
1be90 2a 2a 20 52 65 74 75 72 6e 20 31 20 6f 6e 20 65  ** Return 1 on e
1bea0 72 72 6f 72 2c 20 32 20 74 6f 20 65 78 69 74 2c  rror, 2 to exit,
1beb0 20 61 6e 64 20 30 20 6f 74 68 65 72 77 69 73 65   and 0 otherwise
1bec0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1bed0 73 68 65 6c 6c 5f 64 62 69 6e 66 6f 5f 63 6f 6d  shell_dbinfo_com
1bee0 6d 61 6e 64 28 53 68 65 6c 6c 53 74 61 74 65 20  mand(ShellState 
1bef0 2a 70 2c 20 69 6e 74 20 6e 41 72 67 2c 20 63 68  *p, int nArg, ch
1bf00 61 72 20 2a 2a 61 7a 41 72 67 29 7b 0a 20 20 73  ar **azArg){.  s
1bf10 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75  tatic const stru
1bf20 63 74 20 7b 20 63 6f 6e 73 74 20 63 68 61 72 20  ct { const char 
1bf30 2a 7a 4e 61 6d 65 3b 20 69 6e 74 20 6f 66 73 74  *zName; int ofst
1bf40 3b 20 7d 20 61 46 69 65 6c 64 5b 5d 20 3d 20 7b  ; } aField[] = {
1bf50 0a 20 20 20 20 20 7b 20 22 66 69 6c 65 20 63 68  .     { "file ch
1bf60 61 6e 67 65 20 63 6f 75 6e 74 65 72 3a 22 2c 20  ange counter:", 
1bf70 20 32 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   24  },.     { "
1bf80 64 61 74 61 62 61 73 65 20 70 61 67 65 20 63 6f  database page co
1bf90 75 6e 74 3a 22 2c 20 20 32 38 20 20 7d 2c 0a 20  unt:",  28  },. 
1bfa0 20 20 20 20 7b 20 22 66 72 65 65 6c 69 73 74 20      { "freelist 
1bfb0 70 61 67 65 20 63 6f 75 6e 74 3a 22 2c 20 20 33  page count:",  3
1bfc0 36 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 63  6  },.     { "sc
1bfd0 68 65 6d 61 20 63 6f 6f 6b 69 65 3a 22 2c 20 20  hema cookie:",  
1bfe0 20 20 20 20 20 20 34 30 20 20 7d 2c 0a 20 20 20        40  },.   
1bff0 20 20 7b 20 22 73 63 68 65 6d 61 20 66 6f 72 6d    { "schema form
1c000 61 74 3a 22 2c 20 20 20 20 20 20 20 20 34 34 20  at:",        44 
1c010 20 7d 2c 0a 20 20 20 20 20 7b 20 22 64 65 66 61   },.     { "defa
1c020 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65 3a 22  ult cache size:"
1c030 2c 20 20 20 34 38 20 20 7d 2c 0a 20 20 20 20 20  ,   48  },.     
1c040 7b 20 22 61 75 74 6f 76 61 63 75 75 6d 20 74 6f  { "autovacuum to
1c050 70 20 72 6f 6f 74 3a 22 2c 20 20 35 32 20 20 7d  p root:",  52  }
1c060 2c 0a 20 20 20 20 20 7b 20 22 69 6e 63 72 65 6d  ,.     { "increm
1c070 65 6e 74 61 6c 20 76 61 63 75 75 6d 3a 22 2c 20  ental vacuum:", 
1c080 20 20 36 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20    64  },.     { 
1c090 22 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 3a 22  "text encoding:"
1c0a0 2c 20 20 20 20 20 20 20 20 35 36 20 20 7d 2c 0a  ,        56  },.
1c0b0 20 20 20 20 20 7b 20 22 75 73 65 72 20 76 65 72       { "user ver
1c0c0 73 69 6f 6e 3a 22 2c 20 20 20 20 20 20 20 20 20  sion:",         
1c0d0 36 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61  60  },.     { "a
1c0e0 70 70 6c 69 63 61 74 69 6f 6e 20 69 64 3a 22 2c  pplication id:",
1c0f0 20 20 20 20 20 20 20 36 38 20 20 7d 2c 0a 20 20         68  },.  
1c100 20 20 20 7b 20 22 73 6f 66 74 77 61 72 65 20 76     { "software v
1c110 65 72 73 69 6f 6e 3a 22 2c 20 20 20 20 20 39 36  ersion:",     96
1c120 20 20 7d 2c 0a 20 20 7d 3b 0a 20 20 73 74 61 74    },.  };.  stat
1c130 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
1c140 7b 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  { const char *zN
1c150 61 6d 65 3b 20 63 6f 6e 73 74 20 63 68 61 72 20  ame; const char 
1c160 2a 7a 53 71 6c 3b 20 7d 20 61 51 75 65 72 79 5b  *zSql; } aQuery[
1c170 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22 6e 75  ] = {.     { "nu
1c180 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 3a 22  mber of tables:"
1c190 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
1c1a0 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25   count(*) FROM %
1c1b0 73 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61  s WHERE type='ta
1c1c0 62 6c 65 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20  ble'" },.     { 
1c1d0 22 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 65 78  "number of index
1c1e0 65 73 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45  es:",.       "SE
1c1f0 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
1c200 4f 4d 20 25 73 20 57 48 45 52 45 20 74 79 70 65  OM %s WHERE type
1c210 3d 27 69 6e 64 65 78 27 22 20 7d 2c 0a 20 20 20  ='index'" },.   
1c220 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66 20 74    { "number of t
1c230 72 69 67 67 65 72 73 3a 22 2c 0a 20 20 20 20 20  riggers:",.     
1c240 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28    "SELECT count(
1c250 2a 29 20 46 52 4f 4d 20 25 73 20 57 48 45 52 45  *) FROM %s WHERE
1c260 20 74 79 70 65 3d 27 74 72 69 67 67 65 72 27 22   type='trigger'"
1c270 20 7d 2c 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62   },.     { "numb
1c280 65 72 20 6f 66 20 76 69 65 77 73 3a 22 2c 0a 20  er of views:",. 
1c290 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f        "SELECT co
1c2a0 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73 20 57  unt(*) FROM %s W
1c2b0 48 45 52 45 20 74 79 70 65 3d 27 76 69 65 77 27  HERE type='view'
1c2c0 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 63 68  " },.     { "sch
1c2d0 65 6d 61 20 73 69 7a 65 3a 22 2c 0a 20 20 20 20  ema size:",.    
1c2e0 20 20 20 22 53 45 4c 45 43 54 20 74 6f 74 61 6c     "SELECT total
1c2f0 28 6c 65 6e 67 74 68 28 73 71 6c 29 29 20 46 52  (length(sql)) FR
1c300 4f 4d 20 25 73 22 20 7d 2c 0a 20 20 7d 3b 0a 20  OM %s" },.  };. 
1c310 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 2a   int i;.  char *
1c320 7a 53 63 68 65 6d 61 54 61 62 3b 0a 20 20 63 68  zSchemaTab;.  ch
1c330 61 72 20 2a 7a 44 62 20 3d 20 6e 41 72 67 3e 3d  ar *zDb = nArg>=
1c340 32 20 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22  2 ? azArg[1] : "
1c350 6d 61 69 6e 22 3b 0a 20 20 73 71 6c 69 74 65 33  main";.  sqlite3
1c360 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30  _stmt *pStmt = 0
1c370 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ;.  unsigned cha
1c380 72 20 61 48 64 72 5b 31 30 30 5d 3b 0a 20 20 6f  r aHdr[100];.  o
1c390 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20  pen_db(p, 0);.  
1c3a0 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 20 72  if( p->db==0 ) r
1c3b0 65 74 75 72 6e 20 31 3b 0a 20 20 73 71 6c 69 74  eturn 1;.  sqlit
1c3c0 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
1c3d0 3e 64 62 2c 22 53 45 4c 45 43 54 20 64 61 74 61  >db,"SELECT data
1c3e0 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 64 62 70   FROM sqlite_dbp
1c3f0 61 67 65 28 3f 31 29 20 57 48 45 52 45 20 70 67  age(?1) WHERE pg
1c400 6e 6f 3d 31 22 2c 0a 20 20 20 20 20 20 20 20 20  no=1",.         
1c410 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20              -1, 
1c420 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 73 71  &pStmt, 0);.  sq
1c430 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
1c440 70 53 74 6d 74 2c 20 31 2c 20 7a 44 62 2c 20 2d  pStmt, 1, zDb, -
1c450 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  1, SQLITE_STATIC
1c460 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
1c470 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51  _step(pStmt)==SQ
1c480 4c 49 54 45 5f 52 4f 57 0a 20 20 20 26 26 20 73  LITE_ROW.   && s
1c490 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
1c4a0 74 65 73 28 70 53 74 6d 74 2c 30 29 3e 31 30 30  tes(pStmt,0)>100
1c4b0 0a 20 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  .  ){.    memcpy
1c4c0 28 61 48 64 72 2c 20 73 71 6c 69 74 65 33 5f 63  (aHdr, sqlite3_c
1c4d0 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d 74  olumn_blob(pStmt
1c4e0 2c 30 29 2c 20 31 30 30 29 3b 0a 20 20 20 20 73  ,0), 100);.    s
1c4f0 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1c500 70 53 74 6d 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  pStmt);.  }else{
1c510 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
1c520 73 74 64 65 72 72 2c 20 22 75 6e 61 62 6c 65 20  stderr, "unable 
1c530 74 6f 20 72 65 61 64 20 64 61 74 61 62 61 73 65  to read database
1c540 20 68 65 61 64 65 72 5c 6e 22 29 3b 0a 20 20 20   header\n");.   
1c550 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
1c560 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 72 65  e(pStmt);.    re
1c570 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 20  turn 1;.  }.  i 
1c580 3d 20 67 65 74 32 62 79 74 65 49 6e 74 28 61 48  = get2byteInt(aH
1c590 64 72 2b 31 36 29 3b 0a 20 20 69 66 28 20 69 3d  dr+16);.  if( i=
1c5a0 3d 31 20 29 20 69 20 3d 20 36 35 35 33 36 3b 0a  =1 ) i = 65536;.
1c5b0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
1c5c0 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20 25 64 5c  >out, "%-20s %d\
1c5d0 6e 22 2c 20 22 64 61 74 61 62 61 73 65 20 70 61  n", "database pa
1c5e0 67 65 20 73 69 7a 65 3a 22 2c 20 69 29 3b 0a 20  ge size:", i);. 
1c5f0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
1c600 6f 75 74 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e  out, "%-20s %d\n
1c610 22 2c 20 22 77 72 69 74 65 20 66 6f 72 6d 61 74  ", "write format
1c620 3a 22 2c 20 61 48 64 72 5b 31 38 5d 29 3b 0a 20  :", aHdr[18]);. 
1c630 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
1c640 6f 75 74 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e  out, "%-20s %d\n
1c650 22 2c 20 22 72 65 61 64 20 66 6f 72 6d 61 74 3a  ", "read format:
1c660 22 2c 20 61 48 64 72 5b 31 39 5d 29 3b 0a 20 20  ", aHdr[19]);.  
1c670 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
1c680 75 74 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e 22  ut, "%-20s %d\n"
1c690 2c 20 22 72 65 73 65 72 76 65 64 20 62 79 74 65  , "reserved byte
1c6a0 73 3a 22 2c 20 61 48 64 72 5b 32 30 5d 29 3b 0a  s:", aHdr[20]);.
1c6b0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72    for(i=0; i<Arr
1c6c0 61 79 53 69 7a 65 28 61 46 69 65 6c 64 29 3b 20  aySize(aField); 
1c6d0 69 2b 2b 29 7b 0a 20 20 20 20 69 6e 74 20 6f 66  i++){.    int of
1c6e0 73 74 20 3d 20 61 46 69 65 6c 64 5b 69 5d 2e 6f  st = aField[i].o
1c6f0 66 73 74 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65  fst;.    unsigne
1c700 64 20 69 6e 74 20 76 61 6c 20 3d 20 67 65 74 34  d int val = get4
1c710 62 79 74 65 49 6e 74 28 61 48 64 72 20 2b 20 6f  byteInt(aHdr + o
1c720 66 73 74 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  fst);.    utf8_p
1c730 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
1c740 2d 32 30 73 20 25 75 22 2c 20 61 46 69 65 6c 64  -20s %u", aField
1c750 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 76 61 6c 29 3b  [i].zName, val);
1c760 0a 20 20 20 20 73 77 69 74 63 68 28 20 6f 66 73  .    switch( ofs
1c770 74 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  t ){.      case 
1c780 35 36 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  56: {.        if
1c790 28 20 76 61 6c 3d 3d 31 20 29 20 72 61 77 5f 70  ( val==1 ) raw_p
1c7a0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20  rintf(p->out, " 
1c7b0 28 75 74 66 38 29 22 29 3b 0a 20 20 20 20 20 20  (utf8)");.      
1c7c0 20 20 69 66 28 20 76 61 6c 3d 3d 32 20 29 20 72    if( val==2 ) r
1c7d0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
1c7e0 2c 20 22 20 28 75 74 66 31 36 6c 65 29 22 29 3b  , " (utf16le)");
1c7f0 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 61 6c  .        if( val
1c800 3d 3d 33 20 29 20 72 61 77 5f 70 72 69 6e 74 66  ==3 ) raw_printf
1c810 28 70 2d 3e 6f 75 74 2c 20 22 20 28 75 74 66 31  (p->out, " (utf1
1c820 36 62 65 29 22 29 3b 0a 20 20 20 20 20 20 7d 0a  6be)");.      }.
1c830 20 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72      }.    raw_pr
1c840 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
1c850 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 44  ");.  }.  if( zD
1c860 62 3d 3d 30 20 29 7b 0a 20 20 20 20 7a 53 63 68  b==0 ){.    zSch
1c870 65 6d 61 54 61 62 20 3d 20 73 71 6c 69 74 65 33  emaTab = sqlite3
1c880 5f 6d 70 72 69 6e 74 66 28 22 6d 61 69 6e 2e 73  _mprintf("main.s
1c890 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 29 3b 0a  qlite_master");.
1c8a0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
1c8b0 6d 70 28 7a 44 62 2c 22 74 65 6d 70 22 29 3d 3d  mp(zDb,"temp")==
1c8c0 30 20 29 7b 0a 20 20 20 20 7a 53 63 68 65 6d 61  0 ){.    zSchema
1c8d0 54 61 62 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Tab = sqlite3_mp
1c8e0 72 69 6e 74 66 28 22 25 73 22 2c 20 22 73 71 6c  rintf("%s", "sql
1c8f0 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
1c900 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
1c910 7a 53 63 68 65 6d 61 54 61 62 20 3d 20 73 71 6c  zSchemaTab = sql
1c920 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22  ite3_mprintf("\"
1c930 25 77 5c 22 2e 73 71 6c 69 74 65 5f 6d 61 73 74  %w\".sqlite_mast
1c940 65 72 22 2c 20 7a 44 62 29 3b 0a 20 20 7d 0a 20  er", zDb);.  }. 
1c950 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
1c960 79 53 69 7a 65 28 61 51 75 65 72 79 29 3b 20 69  ySize(aQuery); i
1c970 2b 2b 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  ++){.    char *z
1c980 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Sql = sqlite3_mp
1c990 72 69 6e 74 66 28 61 51 75 65 72 79 5b 69 5d 2e  rintf(aQuery[i].
1c9a0 7a 53 71 6c 2c 20 7a 53 63 68 65 6d 61 54 61 62  zSql, zSchemaTab
1c9b0 29 3b 0a 20 20 20 20 69 6e 74 20 76 61 6c 20 3d  );.    int val =
1c9c0 20 64 62 5f 69 6e 74 28 70 2c 20 7a 53 71 6c 29   db_int(p, zSql)
1c9d0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
1c9e0 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 75 74  ee(zSql);.    ut
1c9f0 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
1ca00 2c 20 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20  , "%-20s %d\n", 
1ca10 61 51 75 65 72 79 5b 69 5d 2e 7a 4e 61 6d 65 2c  aQuery[i].zName,
1ca20 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 73 71 6c   val);.  }.  sql
1ca30 69 74 65 33 5f 66 72 65 65 28 7a 53 63 68 65 6d  ite3_free(zSchem
1ca40 61 54 61 62 29 3b 0a 20 20 72 65 74 75 72 6e 20  aTab);.  return 
1ca50 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e  0;.}../*.** Prin
1ca60 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 71  t the current sq
1ca70 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 76  lite3_errmsg() v
1ca80 61 6c 75 65 20 74 6f 20 73 74 64 65 72 72 20 61  alue to stderr a
1ca90 6e 64 20 72 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a  nd return 1..*/.
1caa0 73 74 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c  static int shell
1cab0 44 61 74 61 62 61 73 65 45 72 72 6f 72 28 73 71  DatabaseError(sq
1cac0 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 63 6f  lite3 *db){.  co
1cad0 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72 20 3d  nst char *zErr =
1cae0 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
1caf0 64 62 29 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e  db);.  utf8_prin
1cb00 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1cb10 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 29 3b  r: %s\n", zErr);
1cb20 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a  .  return 1;.}..
1cb30 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 61 6e 20 6f  /*.** Print an o
1cb40 75 74 2d 6f 66 2d 6d 65 6d 6f 72 79 20 6d 65 73  ut-of-memory mes
1cb50 73 61 67 65 20 74 6f 20 73 74 64 65 72 72 20 61  sage to stderr a
1cb60 6e 64 20 72 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a  nd return 1..*/.
1cb70 73 74 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c  static int shell
1cb80 4e 6f 6d 65 6d 45 72 72 6f 72 28 76 6f 69 64 29  NomemError(void)
1cb90 7b 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73  {.  raw_printf(s
1cba0 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f  tderr, "Error: o
1cbb0 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut of memory\n")
1cbc0 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
1cbd0 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  ./*.** Compare t
1cbe0 68 65 20 70 61 74 74 65 72 6e 20 69 6e 20 7a 47  he pattern in zG
1cbf0 6c 6f 62 5b 5d 20 61 67 61 69 6e 73 74 20 74 68  lob[] against th
1cc00 65 20 74 65 78 74 20 69 6e 20 7a 5b 5d 2e 20 20  e text in z[].  
1cc10 52 65 74 75 72 6e 20 54 52 55 45 0a 2a 2a 20 69  Return TRUE.** i
1cc20 66 20 74 68 65 79 20 6d 61 74 63 68 20 61 6e 64  f they match and
1cc30 20 46 41 4c 53 45 20 28 30 29 20 69 66 20 74 68   FALSE (0) if th
1cc40 65 79 20 64 6f 20 6e 6f 74 20 6d 61 74 63 68 2e  ey do not match.
1cc50 0a 2a 2a 0a 2a 2a 20 47 6c 6f 62 62 69 6e 67 20  .**.** Globbing 
1cc60 72 75 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  rules:.**.**    
1cc70 20 20 27 2a 27 20 20 20 20 20 20 20 4d 61 74 63    '*'       Matc
1cc80 68 65 73 20 61 6e 79 20 73 65 71 75 65 6e 63 65  hes any sequence
1cc90 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   of zero or more
1cca0 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2a 0a   characters..**.
1ccb0 2a 2a 20 20 20 20 20 20 27 3f 27 20 20 20 20 20  **      '?'     
1ccc0 20 20 4d 61 74 63 68 65 73 20 65 78 61 63 74 6c    Matches exactl
1ccd0 79 20 6f 6e 65 20 63 68 61 72 61 63 74 65 72 2e  y one character.
1cce0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 5b 2e 2e 2e 5d  .**.**     [...]
1ccf0 20 20 20 20 20 20 4d 61 74 63 68 65 73 20 6f 6e        Matches on
1cd00 65 20 63 68 61 72 61 63 74 65 72 20 66 72 6f 6d  e character from
1cd10 20 74 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69   the enclosed li
1cd20 73 74 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20  st of.**        
1cd30 20 20 20 20 20 20 20 20 63 68 61 72 61 63 74 65          characte
1cd40 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 5b 5e  rs..**.**     [^
1cd50 2e 2e 2e 5d 20 20 20 20 20 4d 61 74 63 68 65 73  ...]     Matches
1cd60 20 6f 6e 65 20 63 68 61 72 61 63 74 65 72 20 6e   one character n
1cd70 6f 74 20 69 6e 20 74 68 65 20 65 6e 63 6c 6f 73  ot in the enclos
1cd80 65 64 20 6c 69 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  ed list..**.**  
1cd90 20 20 20 20 27 23 27 20 20 20 20 20 20 20 4d 61      '#'       Ma
1cda0 74 63 68 65 73 20 61 6e 79 20 73 65 71 75 65 6e  tches any sequen
1cdb0 63 65 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  ce of one or mor
1cdc0 65 20 64 69 67 69 74 73 20 77 69 74 68 20 61 6e  e digits with an
1cdd0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1cde0 20 20 20 6f 70 74 69 6f 6e 61 6c 20 2b 20 6f 72     optional + or
1cdf0 20 2d 20 73 69 67 6e 20 69 6e 20 66 72 6f 6e 74   - sign in front
1ce00 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 20 27 20  .**.**      ' ' 
1ce10 20 20 20 20 20 20 41 6e 79 20 73 70 61 6e 20 6f        Any span o
1ce20 66 20 77 68 69 74 65 73 70 61 63 65 20 6d 61 74  f whitespace mat
1ce30 63 68 65 73 20 61 6e 79 20 6f 74 68 65 72 20 73  ches any other s
1ce40 70 61 6e 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  pan of.**       
1ce50 20 20 20 20 20 20 20 20 20 77 68 69 74 65 73 70           whitesp
1ce60 61 63 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61  ace..**.** Extra
1ce70 20 77 68 69 74 65 73 70 61 63 65 20 61 74 20 74   whitespace at t
1ce80 68 65 20 65 6e 64 20 6f 66 20 7a 5b 5d 20 69 73  he end of z[] is
1ce90 20 69 67 6e 6f 72 65 64 2e 0a 2a 2f 0a 73 74 61   ignored..*/.sta
1cea0 74 69 63 20 69 6e 74 20 74 65 73 74 63 61 73 65  tic int testcase
1ceb0 5f 67 6c 6f 62 28 63 6f 6e 73 74 20 63 68 61 72  _glob(const char
1cec0 20 2a 7a 47 6c 6f 62 2c 20 63 6f 6e 73 74 20 63   *zGlob, const c
1ced0 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 63  har *z){.  int c
1cee0 2c 20 63 32 3b 0a 20 20 69 6e 74 20 69 6e 76 65  , c2;.  int inve
1cef0 72 74 3b 0a 20 20 69 6e 74 20 73 65 65 6e 3b 0a  rt;.  int seen;.
1cf00 0a 20 20 77 68 69 6c 65 28 20 28 63 20 3d 20 28  .  while( (c = (
1cf10 2a 28 7a 47 6c 6f 62 2b 2b 29 29 29 21 3d 30 20  *(zGlob++)))!=0 
1cf20 29 7b 0a 20 20 20 20 69 66 28 20 49 73 53 70 61  ){.    if( IsSpa
1cf30 63 65 28 63 29 20 29 7b 0a 20 20 20 20 20 20 69  ce(c) ){.      i
1cf40 66 28 20 21 49 73 53 70 61 63 65 28 2a 7a 29 20  f( !IsSpace(*z) 
1cf50 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
1cf60 20 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65    while( IsSpace
1cf70 28 2a 7a 47 6c 6f 62 29 20 29 20 7a 47 6c 6f 62  (*zGlob) ) zGlob
1cf80 2b 2b 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28  ++;.      while(
1cf90 20 49 73 53 70 61 63 65 28 2a 7a 29 20 29 20 7a   IsSpace(*z) ) z
1cfa0 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ++;.    }else if
1cfb0 28 20 63 3d 3d 27 2a 27 20 29 7b 0a 20 20 20 20  ( c=='*' ){.    
1cfc0 20 20 77 68 69 6c 65 28 20 28 63 3d 28 2a 28 7a    while( (c=(*(z
1cfd0 47 6c 6f 62 2b 2b 29 29 29 20 3d 3d 20 27 2a 27  Glob++))) == '*'
1cfe0 20 7c 7c 20 63 3d 3d 27 3f 27 20 29 7b 0a 20 20   || c=='?' ){.  
1cff0 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 3f 27        if( c=='?'
1d000 20 26 26 20 28 2a 28 7a 2b 2b 29 29 3d 3d 30 20   && (*(z++))==0 
1d010 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
1d020 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d    }.      if( c=
1d030 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  =0 ){.        re
1d040 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 65  turn 1;.      }e
1d050 6c 73 65 20 69 66 28 20 63 3d 3d 27 5b 27 20 29  lse if( c=='[' )
1d060 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  {.        while(
1d070 20 2a 7a 20 26 26 20 74 65 73 74 63 61 73 65 5f   *z && testcase_
1d080 67 6c 6f 62 28 7a 47 6c 6f 62 2d 31 2c 7a 29 3d  glob(zGlob-1,z)=
1d090 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
1d0a0 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  z++;.        }. 
1d0b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 2a         return (*
1d0c0 7a 29 21 3d 30 3b 0a 20 20 20 20 20 20 7d 0a 20  z)!=0;.      }. 
1d0d0 20 20 20 20 20 77 68 69 6c 65 28 20 28 63 32 20       while( (c2 
1d0e0 3d 20 28 2a 28 7a 2b 2b 29 29 29 21 3d 30 20 29  = (*(z++)))!=0 )
1d0f0 7b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  {.        while(
1d100 20 63 32 21 3d 63 20 29 7b 0a 20 20 20 20 20 20   c2!=c ){.      
1d110 20 20 20 20 63 32 20 3d 20 2a 28 7a 2b 2b 29 3b      c2 = *(z++);
1d120 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63  .          if( c
1d130 32 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  2==0 ) return 0;
1d140 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1d150 20 20 20 69 66 28 20 74 65 73 74 63 61 73 65 5f     if( testcase_
1d160 67 6c 6f 62 28 7a 47 6c 6f 62 2c 7a 29 20 29 20  glob(zGlob,z) ) 
1d170 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20  return 1;.      
1d180 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30  }.      return 0
1d190 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
1d1a0 63 3d 3d 27 3f 27 20 29 7b 0a 20 20 20 20 20 20  c=='?' ){.      
1d1b0 69 66 28 20 28 2a 28 7a 2b 2b 29 29 3d 3d 30 20  if( (*(z++))==0 
1d1c0 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
1d1d0 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 5b 27  }else if( c=='['
1d1e0 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 72   ){.      int pr
1d1f0 69 6f 72 5f 63 20 3d 20 30 3b 0a 20 20 20 20 20  ior_c = 0;.     
1d200 20 73 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20   seen = 0;.     
1d210 20 69 6e 76 65 72 74 20 3d 20 30 3b 0a 20 20 20   invert = 0;.   
1d220 20 20 20 63 20 3d 20 2a 28 7a 2b 2b 29 3b 0a 20     c = *(z++);. 
1d230 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29 20       if( c==0 ) 
1d240 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
1d250 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b  c2 = *(zGlob++);
1d260 0a 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d 27  .      if( c2=='
1d270 5e 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  ^' ){.        in
1d280 76 65 72 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  vert = 1;.      
1d290 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b    c2 = *(zGlob++
1d2a0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1d2b0 20 69 66 28 20 63 32 3d 3d 27 5d 27 20 29 7b 0a   if( c2==']' ){.
1d2c0 20 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27          if( c=='
1d2d0 5d 27 20 29 20 73 65 65 6e 20 3d 20 31 3b 0a 20  ]' ) seen = 1;. 
1d2e0 20 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a 47         c2 = *(zG
1d2f0 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20 7d 0a  lob++);.      }.
1d300 20 20 20 20 20 20 77 68 69 6c 65 28 20 63 32 20        while( c2 
1d310 26 26 20 63 32 21 3d 27 5d 27 20 29 7b 0a 20 20  && c2!=']' ){.  
1d320 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d 27 2d        if( c2=='-
1d330 27 20 26 26 20 7a 47 6c 6f 62 5b 30 5d 21 3d 27  ' && zGlob[0]!='
1d340 5d 27 20 26 26 20 7a 47 6c 6f 62 5b 30 5d 21 3d  ]' && zGlob[0]!=
1d350 30 20 26 26 20 70 72 69 6f 72 5f 63 3e 30 20 29  0 && prior_c>0 )
1d360 7b 0a 20 20 20 20 20 20 20 20 20 20 63 32 20 3d  {.          c2 =
1d370 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20   *(zGlob++);.   
1d380 20 20 20 20 20 20 20 69 66 28 20 63 3e 3d 70 72         if( c>=pr
1d390 69 6f 72 5f 63 20 26 26 20 63 3c 3d 63 32 20 29  ior_c && c<=c2 )
1d3a0 20 73 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20   seen = 1;.     
1d3b0 20 20 20 20 20 70 72 69 6f 72 5f 63 20 3d 20 30       prior_c = 0
1d3c0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
1d3d0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63  .          if( c
1d3e0 3d 3d 63 32 20 29 7b 0a 20 20 20 20 20 20 20 20  ==c2 ){.        
1d3f0 20 20 20 20 73 65 65 6e 20 3d 20 31 3b 0a 20 20      seen = 1;.  
1d400 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1d410 20 20 20 20 70 72 69 6f 72 5f 63 20 3d 20 63 32      prior_c = c2
1d420 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1d430 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62      c2 = *(zGlob
1d440 2b 2b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ++);.      }.   
1d450 20 20 20 69 66 28 20 63 32 3d 3d 30 20 7c 7c 20     if( c2==0 || 
1d460 28 73 65 65 6e 20 5e 20 69 6e 76 65 72 74 29 3d  (seen ^ invert)=
1d470 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
1d480 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
1d490 27 23 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28  '#' ){.      if(
1d4a0 20 28 7a 5b 30 5d 3d 3d 27 2d 27 20 7c 7c 20 7a   (z[0]=='-' || z
1d4b0 5b 30 5d 3d 3d 27 2b 27 29 20 26 26 20 49 73 44  [0]=='+') && IsD
1d4c0 69 67 69 74 28 7a 5b 31 5d 29 20 29 20 7a 2b 2b  igit(z[1]) ) z++
1d4d0 3b 0a 20 20 20 20 20 20 69 66 28 20 21 49 73 44  ;.      if( !IsD
1d4e0 69 67 69 74 28 7a 5b 30 5d 29 20 29 20 72 65 74  igit(z[0]) ) ret
1d4f0 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 7a 2b 2b  urn 0;.      z++
1d500 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 49  ;.      while( I
1d510 73 44 69 67 69 74 28 7a 5b 30 5d 29 20 29 7b 20  sDigit(z[0]) ){ 
1d520 7a 2b 2b 3b 20 7d 0a 20 20 20 20 7d 65 6c 73 65  z++; }.    }else
1d530 7b 0a 20 20 20 20 20 20 69 66 28 20 63 21 3d 28  {.      if( c!=(
1d540 2a 28 7a 2b 2b 29 29 20 29 20 72 65 74 75 72 6e  *(z++)) ) return
1d550 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
1d560 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 2a  while( IsSpace(*
1d570 7a 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 72  z) ){ z++; }.  r
1d580 65 74 75 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a  eturn *z==0;.}..
1d590 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  ./*.** Compare t
1d5a0 68 65 20 73 74 72 69 6e 67 20 61 73 20 61 20 63  he string as a c
1d5b0 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69  ommand-line opti
1d5c0 6f 6e 20 77 69 74 68 20 65 69 74 68 65 72 20 6f  on with either o
1d5d0 6e 65 20 6f 72 20 74 77 6f 0a 2a 2a 20 69 6e 69  ne or two.** ini
1d5e0 74 69 61 6c 20 22 2d 22 20 63 68 61 72 61 63 74  tial "-" charact
1d5f0 65 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ers..*/.static i
1d600 6e 74 20 6f 70 74 69 6f 6e 4d 61 74 63 68 28 63  nt optionMatch(c
1d610 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 72 2c  onst char *zStr,
1d620 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70   const char *zOp
1d630 74 29 7b 0a 20 20 69 66 28 20 7a 53 74 72 5b 30  t){.  if( zStr[0
1d640 5d 21 3d 27 2d 27 20 29 20 72 65 74 75 72 6e 20  ]!='-' ) return 
1d650 30 3b 0a 20 20 7a 53 74 72 2b 2b 3b 0a 20 20 69  0;.  zStr++;.  i
1d660 66 28 20 7a 53 74 72 5b 30 5d 3d 3d 27 2d 27 20  f( zStr[0]=='-' 
1d670 29 20 7a 53 74 72 2b 2b 3b 0a 20 20 72 65 74 75  ) zStr++;.  retu
1d680 72 6e 20 73 74 72 63 6d 70 28 7a 53 74 72 2c 20  rn strcmp(zStr, 
1d690 7a 4f 70 74 29 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a  zOpt)==0;.}../*.
1d6a0 2a 2a 20 44 65 6c 65 74 65 20 61 20 66 69 6c 65  ** Delete a file
1d6b0 2e 0a 2a 2f 0a 69 6e 74 20 73 68 65 6c 6c 44 65  ..*/.int shellDe
1d6c0 6c 65 74 65 46 69 6c 65 28 63 6f 6e 73 74 20 63  leteFile(const c
1d6d0 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 29 7b  har *zFilename){
1d6e0 0a 20 20 69 6e 74 20 72 63 3b 0a 23 69 66 64 65  .  int rc;.#ifde
1d6f0 66 20 5f 57 49 4e 33 32 0a 20 20 77 63 68 61 72  f _WIN32.  wchar
1d700 5f 74 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33 5f  _t *z = sqlite3_
1d710 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 75 6e  win32_utf8_to_un
1d720 69 63 6f 64 65 28 7a 46 69 6c 65 6e 61 6d 65 29  icode(zFilename)
1d730 3b 0a 20 20 72 63 20 3d 20 5f 77 75 6e 6c 69 6e  ;.  rc = _wunlin
1d740 6b 28 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  k(z);.  sqlite3_
1d750 66 72 65 65 28 7a 29 3b 0a 23 65 6c 73 65 0a 20  free(z);.#else. 
1d760 20 72 63 20 3d 20 75 6e 6c 69 6e 6b 28 7a 46 69   rc = unlink(zFi
1d770 6c 65 6e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a  lename);.#endif.
1d780 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
1d790 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6d 70 6c 65  ./*.** The imple
1d7a0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mentation of SQL
1d7b0 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
1d7c0 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c   fkey_collate_cl
1d7d0 61 75 73 65 28 29 2c 20 75 73 65 64 0a 2a 2a 20  ause(), used.** 
1d7e0 62 79 20 74 68 65 20 22 2e 6c 69 6e 74 20 66 6b  by the ".lint fk
1d7f0 65 79 2d 69 6e 64 65 78 65 73 22 20 63 6f 6d 6d  ey-indexes" comm
1d800 61 6e 64 2e 20 54 68 69 73 20 73 63 61 6c 61 72  and. This scalar
1d810 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6c 77   function is alw
1d820 61 79 73 0a 2a 2a 20 63 61 6c 6c 65 64 20 77 69  ays.** called wi
1d830 74 68 20 66 6f 75 72 20 61 72 67 75 6d 65 6e 74  th four argument
1d840 73 20 2d 20 74 68 65 20 70 61 72 65 6e 74 20 74  s - the parent t
1d850 61 62 6c 65 20 6e 61 6d 65 2c 20 74 68 65 20 70  able name, the p
1d860 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d  arent column nam
1d870 65 2c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  e,.** the child 
1d880 74 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20 74  table name and t
1d890 68 65 20 63 68 69 6c 64 20 63 6f 6c 75 6d 6e 20  he child column 
1d8a0 6e 61 6d 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 66 6b  name..**.**   fk
1d8b0 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73  ey_collate_claus
1d8c0 65 28 27 70 61 72 65 6e 74 2d 74 61 62 27 2c 20  e('parent-tab', 
1d8d0 27 70 61 72 65 6e 74 2d 63 6f 6c 27 2c 20 27 63  'parent-col', 'c
1d8e0 68 69 6c 64 2d 74 61 62 27 2c 20 27 63 68 69 6c  hild-tab', 'chil
1d8f0 64 2d 63 6f 6c 27 29 0a 2a 2a 0a 2a 2a 20 49 66  d-col').**.** If
1d900 20 65 69 74 68 65 72 20 6f 66 20 74 68 65 20 6e   either of the n
1d910 61 6d 65 64 20 74 61 62 6c 65 73 20 6f 72 20 63  amed tables or c
1d920 6f 6c 75 6d 6e 73 20 64 6f 20 6e 6f 74 20 65 78  olumns do not ex
1d930 69 73 74 2c 20 74 68 69 73 20 66 75 6e 63 74 69  ist, this functi
1d940 6f 6e 0a 2a 2a 20 72 65 74 75 72 6e 73 20 61 6e  on.** returns an
1d950 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 41   empty string. A
1d960 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69  n empty string i
1d970 73 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20  s also returned 
1d980 69 66 20 62 6f 74 68 20 74 61 62 6c 65 73 0a 2a  if both tables.*
1d990 2a 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 20 65 78  * and columns ex
1d9a0 69 73 74 20 62 75 74 20 68 61 76 65 20 74 68 65  ist but have the
1d9b0 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20 63 6f   same default co
1d9c0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
1d9d0 2e 20 4f 72 2c 0a 2a 2a 20 69 66 20 62 6f 74 68  . Or,.** if both
1d9e0 20 65 78 69 73 74 20 62 75 74 20 74 68 65 20 64   exist but the d
1d9f0 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
1da00 20 73 65 71 75 65 6e 63 65 73 20 61 72 65 20 64   sequences are d
1da10 69 66 66 65 72 65 6e 74 2c 20 74 68 69 73 0a 2a  ifferent, this.*
1da20 2a 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  * function retur
1da30 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 22 20  ns the string " 
1da40 43 4f 4c 4c 41 54 45 20 3c 70 61 72 65 6e 74 2d  COLLATE <parent-
1da50 63 6f 6c 6c 61 74 69 6f 6e 3e 22 2c 20 77 68 65  collation>", whe
1da60 72 65 0a 2a 2a 20 3c 70 61 72 65 6e 74 2d 63 6f  re.** <parent-co
1da70 6c 6c 61 74 69 6f 6e 3e 20 69 73 20 74 68 65 20  llation> is the 
1da80 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
1da90 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  n sequence of th
1daa0 65 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 2e  e parent column.
1dab0 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
1dac0 73 68 65 6c 6c 46 6b 65 79 43 6f 6c 6c 61 74 65  shellFkeyCollate
1dad0 43 6c 61 75 73 65 28 0a 20 20 73 71 6c 69 74 65  Clause(.  sqlite
1dae0 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
1daf0 0a 20 20 69 6e 74 20 6e 56 61 6c 2c 0a 20 20 73  .  int nVal,.  s
1db00 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
1db10 70 56 61 6c 0a 29 7b 0a 20 20 73 71 6c 69 74 65  pVal.){.  sqlite
1db20 33 20 2a 64 62 20 3d 20 73 71 6c 69 74 65 33 5f  3 *db = sqlite3_
1db30 63 6f 6e 74 65 78 74 5f 64 62 5f 68 61 6e 64 6c  context_db_handl
1db40 65 28 70 43 74 78 29 3b 0a 20 20 63 6f 6e 73 74  e(pCtx);.  const
1db50 20 63 68 61 72 20 2a 7a 50 61 72 65 6e 74 3b 0a   char *zParent;.
1db60 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50    const char *zP
1db70 61 72 65 6e 74 43 6f 6c 3b 0a 20 20 63 6f 6e 73  arentCol;.  cons
1db80 74 20 63 68 61 72 20 2a 7a 50 61 72 65 6e 74 53  t char *zParentS
1db90 65 71 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  eq;.  const char
1dba0 20 2a 7a 43 68 69 6c 64 3b 0a 20 20 63 6f 6e 73   *zChild;.  cons
1dbb0 74 20 63 68 61 72 20 2a 7a 43 68 69 6c 64 43 6f  t char *zChildCo
1dbc0 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  l;.  const char 
1dbd0 2a 7a 43 68 69 6c 64 53 65 71 20 3d 20 30 3b 20  *zChildSeq = 0; 
1dbe0 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74   /* Initialize t
1dbf0 6f 20 61 76 6f 69 64 20 66 61 6c 73 65 2d 70 6f  o avoid false-po
1dc00 73 69 74 69 76 65 20 77 61 72 6e 69 6e 67 20 2a  sitive warning *
1dc10 2f 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 61  /.  int rc;..  a
1dc20 73 73 65 72 74 28 20 6e 56 61 6c 3d 3d 34 20 29  ssert( nVal==4 )
1dc30 3b 0a 20 20 7a 50 61 72 65 6e 74 20 3d 20 28 63  ;.  zParent = (c
1dc40 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
1dc50 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 70  e3_value_text(ap
1dc60 56 61 6c 5b 30 5d 29 3b 0a 20 20 7a 50 61 72 65  Val[0]);.  zPare
1dc70 6e 74 43 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63  ntCol = (const c
1dc80 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
1dc90 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 31 5d  ue_text(apVal[1]
1dca0 29 3b 0a 20 20 7a 43 68 69 6c 64 20 3d 20 28 63  );.  zChild = (c
1dcb0 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
1dcc0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 70  e3_value_text(ap
1dcd0 56 61 6c 5b 32 5d 29 3b 0a 20 20 7a 43 68 69 6c  Val[2]);.  zChil
1dce0 64 43 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63 68  dCol = (const ch
1dcf0 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
1dd00 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 33 5d 29  e_text(apVal[3])
1dd10 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  ;..  sqlite3_res
1dd20 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c 20 22  ult_text(pCtx, "
1dd30 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54  ", -1, SQLITE_ST
1dd40 41 54 49 43 29 3b 0a 20 20 72 63 20 3d 20 73 71  ATIC);.  rc = sq
1dd50 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
1dd60 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20 20  mn_metadata(.   
1dd70 20 20 20 64 62 2c 20 22 6d 61 69 6e 22 2c 20 7a     db, "main", z
1dd80 50 61 72 65 6e 74 2c 20 7a 50 61 72 65 6e 74 43  Parent, zParentC
1dd90 6f 6c 2c 20 30 2c 20 26 7a 50 61 72 65 6e 74 53  ol, 0, &zParentS
1dda0 65 71 2c 20 30 2c 20 30 2c 20 30 0a 20 20 29 3b  eq, 0, 0, 0.  );
1ddb0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1ddc0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
1ddd0 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63   sqlite3_table_c
1dde0 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a  olumn_metadata(.
1ddf0 20 20 20 20 20 20 20 20 64 62 2c 20 22 6d 61 69          db, "mai
1de00 6e 22 2c 20 7a 43 68 69 6c 64 2c 20 7a 43 68 69  n", zChild, zChi
1de10 6c 64 43 6f 6c 2c 20 30 2c 20 26 7a 43 68 69 6c  ldCol, 0, &zChil
1de20 64 53 65 71 2c 20 30 2c 20 30 2c 20 30 0a 20 20  dSeq, 0, 0, 0.  
1de30 20 20 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20    );.  }..  if( 
1de40 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
1de50 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
1de60 28 7a 50 61 72 65 6e 74 53 65 71 2c 20 7a 43 68  (zParentSeq, zCh
1de70 69 6c 64 53 65 71 29 20 29 7b 0a 20 20 20 20 63  ildSeq) ){.    c
1de80 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33  har *z = sqlite3
1de90 5f 6d 70 72 69 6e 74 66 28 22 20 43 4f 4c 4c 41  _mprintf(" COLLA
1dea0 54 45 20 25 73 22 2c 20 7a 50 61 72 65 6e 74 53  TE %s", zParentS
1deb0 65 71 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  eq);.    sqlite3
1dec0 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74  _result_text(pCt
1ded0 78 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  x, z, -1, SQLITE
1dee0 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
1def0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
1df00 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  ;.  }.}.../*.** 
1df10 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  The implementati
1df20 6f 6e 20 6f 66 20 64 6f 74 2d 63 6f 6d 6d 61 6e  on of dot-comman
1df30 64 20 22 2e 6c 69 6e 74 20 66 6b 65 79 2d 69 6e  d ".lint fkey-in
1df40 64 65 78 65 73 22 2e 0a 2a 2f 0a 73 74 61 74 69  dexes"..*/.stati
1df50 63 20 69 6e 74 20 6c 69 6e 74 46 6b 65 79 49 6e  c int lintFkeyIn
1df60 64 65 78 65 73 28 0a 20 20 53 68 65 6c 6c 53 74  dexes(.  ShellSt
1df70 61 74 65 20 2a 70 53 74 61 74 65 2c 20 20 20 20  ate *pState,    
1df80 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
1df90 65 6e 74 20 73 68 65 6c 6c 20 74 6f 6f 6c 20 73  ent shell tool s
1dfa0 74 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  tate */.  char *
1dfb0 2a 61 7a 41 72 67 2c 20 20 20 20 20 20 20 20 20  *azArg,         
1dfc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
1dfd0 61 79 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  ay of arguments 
1dfe0 70 61 73 73 65 64 20 74 6f 20 64 6f 74 20 63 6f  passed to dot co
1dff0 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  mmand */.  int n
1e000 41 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20  Arg             
1e010 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e020 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
1e030 69 6e 20 61 7a 41 72 67 5b 5d 20 2a 2f 0a 29 7b  in azArg[] */.){
1e040 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
1e050 20 70 53 74 61 74 65 2d 3e 64 62 3b 20 20 20 20   pState->db;    
1e060 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 68     /* Database h
1e070 61 6e 64 6c 65 20 74 6f 20 71 75 65 72 79 20 22  andle to query "
1e080 6d 61 69 6e 22 20 64 62 20 6f 66 20 2a 2f 0a 20  main" db of */. 
1e090 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20 70 53 74   FILE *out = pSt
1e0a0 61 74 65 2d 3e 6f 75 74 3b 20 20 20 20 20 20 20  ate->out;       
1e0b0 20 2f 2a 20 53 74 72 65 61 6d 20 74 6f 20 77 72   /* Stream to wr
1e0c0 69 74 65 20 6e 6f 6e 2d 65 72 72 6f 72 20 6f 75  ite non-error ou
1e0d0 74 70 75 74 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  tput to */.  int
1e0e0 20 62 56 65 72 62 6f 73 65 20 3d 20 30 3b 20 20   bVerbose = 0;  
1e0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e100 49 66 20 2d 76 65 72 62 6f 73 65 20 69 73 20 70  If -verbose is p
1e110 72 65 73 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  resent */.  int 
1e120 62 47 72 6f 75 70 42 79 50 61 72 65 6e 74 20 3d  bGroupByParent =
1e130 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49   0;         /* I
1e140 66 20 2d 67 72 6f 75 70 62 79 70 61 72 65 6e 74  f -groupbyparent
1e150 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
1e160 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
1e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e180 20 2f 2a 20 54 6f 20 69 74 65 72 61 74 65 20 74   /* To iterate t
1e190 68 72 6f 75 67 68 20 61 7a 41 72 67 5b 5d 20 2a  hrough azArg[] *
1e1a0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1e1b0 7a 49 6e 64 65 6e 74 20 3d 20 22 22 3b 20 20 20  zIndent = "";   
1e1c0 20 20 20 20 2f 2a 20 48 6f 77 20 6d 75 63 68 20      /* How much 
1e1d0 74 6f 20 69 6e 64 65 6e 74 20 43 52 45 41 54 45  to indent CREATE
1e1e0 20 49 4e 44 45 58 20 62 79 20 2a 2f 0a 20 20 69   INDEX by */.  i
1e1f0 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
1e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e210 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 2a 2f  * Return code */
1e220 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
1e230 2a 70 53 71 6c 20 3d 20 30 3b 20 20 20 20 20 20  *pSql = 0;      
1e240 20 20 20 2f 2a 20 43 6f 6d 70 69 6c 65 64 20 76     /* Compiled v
1e250 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 20 73 74  ersion of SQL st
1e260 61 74 65 6d 65 6e 74 20 62 65 6c 6f 77 20 2a 2f  atement below */
1e270 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 54 68 69 73  ..  /*.  ** This
1e280 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1e290 74 20 72 65 74 75 72 6e 73 20 6f 6e 65 20 72 6f  t returns one ro
1e2a0 77 20 66 6f 72 20 65 61 63 68 20 66 6f 72 65 69  w for each forei
1e2b0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
1e2c0 74 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 73 63  t.  ** in the sc
1e2d0 68 65 6d 61 20 6f 66 20 74 68 65 20 6d 61 69 6e  hema of the main
1e2e0 20 64 61 74 61 62 61 73 65 2e 20 54 68 65 20 63   database. The c
1e2f0 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 61 72 65  olumn values are
1e300 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 30 2e 20 54  :.  **.  ** 0. T
1e310 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 53 51  he text of an SQ
1e320 4c 20 73 74 61 74 65 6d 65 6e 74 20 73 69 6d 69  L statement simi
1e330 6c 61 72 20 74 6f 3a 0a 20 20 2a 2a 0a 20 20 2a  lar to:.  **.  *
1e340 2a 20 20 20 20 20 20 22 45 58 50 4c 41 49 4e 20  *      "EXPLAIN 
1e350 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43  QUERY PLAN SELEC
1e360 54 20 31 20 46 52 4f 4d 20 63 68 69 6c 64 5f 74  T 1 FROM child_t
1e370 61 62 6c 65 20 57 48 45 52 45 20 63 68 69 6c 64  able WHERE child
1e380 5f 6b 65 79 3d 3f 22 0a 20 20 2a 2a 0a 20 20 2a  _key=?".  **.  *
1e390 2a 20 20 20 20 54 68 69 73 20 53 45 4c 45 43 54  *    This SELECT
1e3a0 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74   is similar to t
1e3b0 68 65 20 6f 6e 65 20 74 68 61 74 20 74 68 65 20  he one that the 
1e3c0 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6d 70  foreign keys imp
1e3d0 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 20 20 2a 2a  lementation.  **
1e3e0 20 20 20 20 6e 65 65 64 73 20 74 6f 20 72 75 6e      needs to run
1e3f0 20 69 6e 74 65 72 6e 61 6c 6c 79 20 6f 6e 20 63   internally on c
1e400 68 69 6c 64 20 74 61 62 6c 65 73 2e 20 49 66 20  hild tables. If 
1e410 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 64 65  there is an inde
1e420 78 20 74 68 61 74 20 63 61 6e 0a 20 20 2a 2a 20  x that can.  ** 
1e430 20 20 20 62 65 20 75 73 65 64 20 74 6f 20 6f 70     be used to op
1e440 74 69 6d 69 7a 65 20 74 68 69 73 20 71 75 65 72  timize this quer
1e450 79 2c 20 74 68 65 6e 20 69 74 20 63 61 6e 20 61  y, then it can a
1e460 6c 73 6f 20 62 65 20 75 73 65 64 20 62 79 20 74  lso be used by t
1e470 68 65 20 46 4b 0a 20 20 2a 2a 20 20 20 20 69 6d  he FK.  **    im
1e480 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
1e490 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45 54 45 20  optimize DELETE 
1e4a0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
1e4b0 65 6e 74 73 20 6f 6e 20 74 68 65 20 70 61 72 65  ents on the pare
1e4c0 6e 74 0a 20 20 2a 2a 20 20 20 20 74 61 62 6c 65  nt.  **    table
1e4d0 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 31 2e 20 41  ..  **.  ** 1. A
1e4e0 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 20 73 75   GLOB pattern su
1e4f0 69 74 61 62 6c 65 20 66 6f 72 20 73 71 6c 69 74  itable for sqlit
1e500 65 33 5f 73 74 72 67 6c 6f 62 28 29 2e 20 49 66  e3_strglob(). If
1e510 20 74 68 65 20 70 6c 61 6e 20 6f 75 74 70 75 74   the plan output
1e520 20 62 79 0a 20 20 2a 2a 20 20 20 20 74 68 65 20   by.  **    the 
1e530 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
1e540 41 4e 20 63 6f 6d 6d 61 6e 64 20 6d 61 74 63 68  AN command match
1e550 65 73 20 74 68 69 73 20 70 61 74 74 65 72 6e 2c  es this pattern,
1e560 20 74 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   then the schema
1e570 0a 20 20 2a 2a 20 20 20 20 63 6f 6e 74 61 69 6e  .  **    contain
1e580 73 20 61 6e 20 69 6e 64 65 78 20 74 68 61 74 20  s an index that 
1e590 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f  can be used to o
1e5a0 70 74 69 6d 69 7a 65 20 74 68 65 20 71 75 65 72  ptimize the quer
1e5b0 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 32 2e 20  y..  **.  ** 2. 
1e5c0 48 75 6d 61 6e 20 72 65 61 64 61 62 6c 65 20 74  Human readable t
1e5d0 65 78 74 20 74 68 61 74 20 64 65 73 63 72 69 62  ext that describ
1e5e0 65 73 20 74 68 65 20 63 68 69 6c 64 20 74 61 62  es the child tab
1e5f0 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 2e 20  le and columns. 
1e600 65 2e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  e.g..  **.  **  
1e610 20 20 20 20 20 22 63 68 69 6c 64 5f 74 61 62 6c       "child_tabl
1e620 65 28 63 68 69 6c 64 5f 6b 65 79 31 2c 20 63 68  e(child_key1, ch
1e630 69 6c 64 5f 6b 65 79 32 29 22 0a 20 20 2a 2a 0a  ild_key2)".  **.
1e640 20 20 2a 2a 20 33 2e 20 48 75 6d 61 6e 20 72 65    ** 3. Human re
1e650 61 64 61 62 6c 65 20 74 65 78 74 20 74 68 61 74  adable text that
1e660 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 70   describes the p
1e670 61 72 65 6e 74 20 74 61 62 6c 65 20 61 6e 64 20  arent table and 
1e680 63 6f 6c 75 6d 6e 73 2e 20 65 2e 67 2e 0a 20 20  columns. e.g..  
1e690 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20 20 22 70  **.  **       "p
1e6a0 61 72 65 6e 74 5f 74 61 62 6c 65 28 70 61 72 65  arent_table(pare
1e6b0 6e 74 5f 6b 65 79 31 2c 20 70 61 72 65 6e 74 5f  nt_key1, parent_
1e6c0 6b 65 79 32 29 22 0a 20 20 2a 2a 0a 20 20 2a 2a  key2)".  **.  **
1e6d0 20 34 2e 20 41 20 66 75 6c 6c 20 43 52 45 41 54   4. A full CREAT
1e6e0 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
1e6f0 74 20 66 6f 72 20 61 6e 20 69 6e 64 65 78 20 74  t for an index t
1e700 68 61 74 20 63 6f 75 6c 64 20 62 65 20 75 73 65  hat could be use
1e710 64 20 74 6f 0a 20 20 2a 2a 20 20 20 20 6f 70 74  d to.  **    opt
1e720 69 6d 69 7a 65 20 44 45 4c 45 54 45 20 6f 72 20  imize DELETE or 
1e730 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1e740 73 20 6f 6e 20 74 68 65 20 70 61 72 65 6e 74 20  s on the parent 
1e750 74 61 62 6c 65 2e 20 65 2e 67 2e 0a 20 20 2a 2a  table. e.g..  **
1e760 0a 20 20 2a 2a 20 20 20 20 20 20 20 22 43 52 45  .  **       "CRE
1e770 41 54 45 20 49 4e 44 45 58 20 63 68 69 6c 64 5f  ATE INDEX child_
1e780 74 61 62 6c 65 5f 63 68 69 6c 64 5f 6b 65 79 20  table_child_key 
1e790 4f 4e 20 63 68 69 6c 64 5f 74 61 62 6c 65 28 63  ON child_table(c
1e7a0 68 69 6c 64 5f 6b 65 79 29 22 0a 20 20 2a 2a 0a  hild_key)".  **.
1e7b0 20 20 2a 2a 20 35 2e 20 54 68 65 20 6e 61 6d 65    ** 5. The name
1e7c0 20 6f 66 20 74 68 65 20 70 61 72 65 6e 74 20 74   of the parent t
1e7d0 61 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  able..  **.  ** 
1e7e0 54 68 65 73 65 20 73 69 78 20 76 61 6c 75 65 73  These six values
1e7f0 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65   are used by the
1e800 20 43 20 6c 6f 67 69 63 20 62 65 6c 6f 77 20 74   C logic below t
1e810 6f 20 67 65 6e 65 72 61 74 65 20 74 68 65 20 72  o generate the r
1e820 65 70 6f 72 74 2e 0a 20 20 2a 2f 0a 20 20 63 6f  eport..  */.  co
1e830 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d  nst char *zSql =
1e840 0a 20 20 22 53 45 4c 45 43 54 20 22 0a 20 20 20  .  "SELECT ".   
1e850 20 22 20 20 20 20 20 27 45 58 50 4c 41 49 4e 20   "     'EXPLAIN 
1e860 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43  QUERY PLAN SELEC
1e870 54 20 31 20 46 52 4f 4d 20 27 20 7c 7c 20 71 75  T 1 FROM ' || qu
1e880 6f 74 65 28 73 2e 6e 61 6d 65 29 20 7c 7c 20 27  ote(s.name) || '
1e890 20 57 48 45 52 45 20 27 22 0a 20 20 20 20 22 20   WHERE '".    " 
1e8a0 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74   || group_concat
1e8b0 28 71 75 6f 74 65 28 73 2e 6e 61 6d 65 29 20 7c  (quote(s.name) |
1e8c0 7c 20 27 2e 27 20 7c 7c 20 71 75 6f 74 65 28 66  | '.' || quote(f
1e8d0 2e 5b 66 72 6f 6d 5d 29 20 7c 7c 20 27 3d 3f 27  .[from]) || '=?'
1e8e0 20 22 0a 20 20 20 20 22 20 20 7c 7c 20 66 6b 65   ".    "  || fke
1e8f0 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65  y_collate_clause
1e900 28 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 66  (".    "       f
1e910 2e 5b 74 61 62 6c 65 5d 2c 20 43 4f 41 4c 45 53  .[table], COALES
1e920 43 45 28 66 2e 5b 74 6f 5d 2c 20 70 2e 5b 6e 61  CE(f.[to], p.[na
1e930 6d 65 5d 29 2c 20 73 2e 6e 61 6d 65 2c 20 66 2e  me]), s.name, f.
1e940 5b 66 72 6f 6d 5d 29 2c 27 20 41 4e 44 20 27 29  [from]),' AND ')
1e950 22 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20 22  ".    ", ".    "
1e960 20 20 20 20 20 27 53 45 41 52 43 48 20 54 41 42       'SEARCH TAB
1e970 4c 45 20 27 20 7c 7c 20 73 2e 6e 61 6d 65 20 7c  LE ' || s.name |
1e980 7c 20 27 20 55 53 49 4e 47 20 43 4f 56 45 52 49  | ' USING COVERI
1e990 4e 47 20 49 4e 44 45 58 2a 28 27 22 0a 20 20 20  NG INDEX*('".   
1e9a0 20 22 20 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e   "  || group_con
1e9b0 63 61 74 28 27 2a 3d 3f 27 2c 20 27 20 41 4e 44  cat('*=?', ' AND
1e9c0 20 27 29 20 7c 7c 20 27 29 27 22 0a 20 20 20 20   ') || ')'".    
1e9d0 22 2c 20 22 0a 20 20 20 20 22 20 20 20 20 20 73  ", ".    "     s
1e9e0 2e 6e 61 6d 65 20 20 7c 7c 20 27 28 27 20 7c 7c  .name  || '(' ||
1e9f0 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 66 2e   group_concat(f.
1ea00 5b 66 72 6f 6d 5d 2c 20 20 27 2c 20 27 29 20 7c  [from],  ', ') |
1ea10 7c 20 27 29 27 22 0a 20 20 20 20 22 2c 20 22 0a  | ')'".    ", ".
1ea20 20 20 20 20 22 20 20 20 20 20 66 2e 5b 74 61 62      "     f.[tab
1ea30 6c 65 5d 20 7c 7c 20 27 28 27 20 7c 7c 20 67 72  le] || '(' || gr
1ea40 6f 75 70 5f 63 6f 6e 63 61 74 28 43 4f 41 4c 45  oup_concat(COALE
1ea50 53 43 45 28 66 2e 5b 74 6f 5d 2c 20 70 2e 5b 6e  SCE(f.[to], p.[n
1ea60 61 6d 65 5d 29 29 20 7c 7c 20 27 29 27 22 0a 20  ame])) || ')'". 
1ea70 20 20 20 22 2c 20 22 0a 20 20 20 20 22 20 20 20     ", ".    "   
1ea80 20 20 27 43 52 45 41 54 45 20 49 4e 44 45 58 20    'CREATE INDEX 
1ea90 27 20 7c 7c 20 71 75 6f 74 65 28 73 2e 6e 61 6d  ' || quote(s.nam
1eaa0 65 20 7c 7c 27 5f 27 7c 7c 20 67 72 6f 75 70 5f  e ||'_'|| group_
1eab0 63 6f 6e 63 61 74 28 66 2e 5b 66 72 6f 6d 5d 2c  concat(f.[from],
1eac0 20 27 5f 27 29 29 22 0a 20 20 20 20 22 20 20 7c   '_'))".    "  |
1ead0 7c 20 27 20 4f 4e 20 27 20 7c 7c 20 71 75 6f 74  | ' ON ' || quot
1eae0 65 28 73 2e 6e 61 6d 65 29 20 7c 7c 20 27 28 27  e(s.name) || '('
1eaf0 22 0a 20 20 20 20 22 20 20 7c 7c 20 67 72 6f 75  ".    "  || grou
1eb00 70 5f 63 6f 6e 63 61 74 28 71 75 6f 74 65 28 66  p_concat(quote(f
1eb10 2e 5b 66 72 6f 6d 5d 29 20 7c 7c 22 0a 20 20 20  .[from]) ||".   
1eb20 20 22 20 20 20 20 20 20 20 20 66 6b 65 79 5f 63   "        fkey_c
1eb30 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28 22 0a  ollate_clause(".
1eb40 20 20 20 20 22 20 20 20 20 20 20 20 20 20 20 66      "          f
1eb50 2e 5b 74 61 62 6c 65 5d 2c 20 43 4f 41 4c 45 53  .[table], COALES
1eb60 43 45 28 66 2e 5b 74 6f 5d 2c 20 70 2e 5b 6e 61  CE(f.[to], p.[na
1eb70 6d 65 5d 29 2c 20 73 2e 6e 61 6d 65 2c 20 66 2e  me]), s.name, f.
1eb80 5b 66 72 6f 6d 5d 29 2c 20 27 2c 20 27 29 22 0a  [from]), ', ')".
1eb90 20 20 20 20 22 20 20 7c 7c 20 27 29 3b 27 22 0a      "  || ');'".
1eba0 20 20 20 20 22 2c 20 22 0a 20 20 20 20 22 20 20      ", ".    "  
1ebb0 20 20 20 66 2e 5b 74 61 62 6c 65 5d 20 22 0a 20     f.[table] ". 
1ebc0 20 20 20 22 46 52 4f 4d 20 73 71 6c 69 74 65 5f     "FROM sqlite_
1ebd0 6d 61 73 74 65 72 20 41 53 20 73 2c 20 70 72 61  master AS s, pra
1ebe0 67 6d 61 5f 66 6f 72 65 69 67 6e 5f 6b 65 79 5f  gma_foreign_key_
1ebf0 6c 69 73 74 28 73 2e 6e 61 6d 65 29 20 41 53 20  list(s.name) AS 
1ec00 66 20 22 0a 20 20 20 20 22 4c 45 46 54 20 4a 4f  f ".    "LEFT JO
1ec10 49 4e 20 70 72 61 67 6d 61 5f 74 61 62 6c 65 5f  IN pragma_table_
1ec20 69 6e 66 6f 20 41 53 20 70 20 4f 4e 20 28 70 6b  info AS p ON (pk
1ec30 2d 31 3d 73 65 71 20 41 4e 44 20 70 2e 61 72 67  -1=seq AND p.arg
1ec40 3d 66 2e 5b 74 61 62 6c 65 5d 29 20 22 0a 20 20  =f.[table]) ".  
1ec50 20 20 22 47 52 4f 55 50 20 42 59 20 73 2e 6e 61    "GROUP BY s.na
1ec60 6d 65 2c 20 66 2e 69 64 20 22 0a 20 20 20 20 22  me, f.id ".    "
1ec70 4f 52 44 45 52 20 42 59 20 28 43 41 53 45 20 57  ORDER BY (CASE W
1ec80 48 45 4e 20 3f 20 54 48 45 4e 20 66 2e 5b 74 61  HEN ? THEN f.[ta
1ec90 62 6c 65 5d 20 45 4c 53 45 20 73 2e 6e 61 6d 65  ble] ELSE s.name
1eca0 20 45 4e 44 29 22 0a 20 20 3b 0a 20 20 63 6f 6e   END)".  ;.  con
1ecb0 73 74 20 63 68 61 72 20 2a 7a 47 6c 6f 62 49 50  st char *zGlobIP
1ecc0 4b 20 3d 20 22 53 45 41 52 43 48 20 54 41 42 4c  K = "SEARCH TABL
1ecd0 45 20 2a 20 55 53 49 4e 47 20 49 4e 54 45 47 45  E * USING INTEGE
1ece0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 28 72  R PRIMARY KEY (r
1ecf0 6f 77 69 64 3d 3f 29 22 3b 0a 0a 20 20 66 6f 72  owid=?)";..  for
1ed00 28 69 3d 32 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=2; i<nArg; i+
1ed10 2b 29 7b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20  +){.    int n = 
1ed20 28 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72  (int)strlen(azAr
1ed30 67 5b 69 5d 29 3b 0a 20 20 20 20 69 66 28 20 6e  g[i]);.    if( n
1ed40 3e 31 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74  >1 && sqlite3_st
1ed50 72 6e 69 63 6d 70 28 22 2d 76 65 72 62 6f 73 65  rnicmp("-verbose
1ed60 22 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 6e 29 3d  ", azArg[i], n)=
1ed70 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 56 65 72  =0 ){.      bVer
1ed80 62 6f 73 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  bose = 1;.    }.
1ed90 20 20 20 20 65 6c 73 65 20 69 66 28 20 6e 3e 31      else if( n>1
1eda0 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72 6e   && sqlite3_strn
1edb0 69 63 6d 70 28 22 2d 67 72 6f 75 70 62 79 70 61  icmp("-groupbypa
1edc0 72 65 6e 74 22 2c 20 61 7a 41 72 67 5b 69 5d 2c  rent", azArg[i],
1edd0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   n)==0 ){.      
1ede0 62 47 72 6f 75 70 42 79 50 61 72 65 6e 74 20 3d  bGroupByParent =
1edf0 20 31 3b 0a 20 20 20 20 20 20 7a 49 6e 64 65 6e   1;.      zInden
1ee00 74 20 3d 20 22 20 20 20 20 22 3b 0a 20 20 20 20  t = "    ";.    
1ee10 7d 0a 20 20 20 20 65 6c 73 65 7b 0a 20 20 20 20  }.    else{.    
1ee20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
1ee30 65 72 72 2c 20 22 55 73 61 67 65 3a 20 25 73 20  err, "Usage: %s 
1ee40 25 73 20 3f 2d 76 65 72 62 6f 73 65 3f 20 3f 2d  %s ?-verbose? ?-
1ee50 67 72 6f 75 70 62 79 70 61 72 65 6e 74 3f 5c 6e  groupbyparent?\n
1ee60 22 2c 0a 20 20 20 20 20 20 20 20 20 20 61 7a 41  ",.          azA
1ee70 72 67 5b 30 5d 2c 20 61 7a 41 72 67 5b 31 5d 0a  rg[0], azArg[1].
1ee80 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
1ee90 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
1eea0 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  OR;.    }.  }.. 
1eeb0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 68 65   /* Register the
1eec0 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c   fkey_collate_cl
1eed0 61 75 73 65 28 29 20 53 51 4c 20 66 75 6e 63 74  ause() SQL funct
1eee0 69 6f 6e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ion */.  rc = sq
1eef0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
1ef00 63 74 69 6f 6e 28 64 62 2c 20 22 66 6b 65 79 5f  ction(db, "fkey_
1ef10 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 22 2c  collate_clause",
1ef20 20 34 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   4, SQLITE_UTF8,
1ef30 0a 20 20 20 20 20 20 30 2c 20 73 68 65 6c 6c 46  .      0, shellF
1ef40 6b 65 79 43 6f 6c 6c 61 74 65 43 6c 61 75 73 65  keyCollateClause
1ef50 2c 20 30 2c 20 30 0a 20 20 29 3b 0a 0a 0a 20 20  , 0, 0.  );...  
1ef60 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1ef70 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
1ef80 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
1ef90 28 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26  (db, zSql, -1, &
1efa0 70 53 71 6c 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  pSql, 0);.  }.  
1efb0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1efc0 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  K ){.    sqlite3
1efd0 5f 62 69 6e 64 5f 69 6e 74 28 70 53 71 6c 2c 20  _bind_int(pSql, 
1efe0 31 2c 20 62 47 72 6f 75 70 42 79 50 61 72 65 6e  1, bGroupByParen
1eff0 74 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72  t);.  }..  if( r
1f000 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1f010 20 20 20 20 69 6e 74 20 72 63 32 3b 0a 20 20 20      int rc2;.   
1f020 20 63 68 61 72 20 2a 7a 50 72 65 76 20 3d 20 30   char *zPrev = 0
1f030 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 53 51 4c  ;.    while( SQL
1f040 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33  ITE_ROW==sqlite3
1f050 5f 73 74 65 70 28 70 53 71 6c 29 20 29 7b 0a 20  _step(pSql) ){. 
1f060 20 20 20 20 20 69 6e 74 20 72 65 73 20 3d 20 2d       int res = -
1f070 31 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  1;.      sqlite3
1f080 5f 73 74 6d 74 20 2a 70 45 78 70 6c 61 69 6e 20  _stmt *pExplain 
1f090 3d 20 30 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74  = 0;.      const
1f0a0 20 63 68 61 72 20 2a 7a 45 51 50 20 3d 20 28 63   char *zEQP = (c
1f0b0 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
1f0c0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
1f0d0 53 71 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 63  Sql, 0);.      c
1f0e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 47 6c 6f 62  onst char *zGlob
1f0f0 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
1f100 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
1f110 65 78 74 28 70 53 71 6c 2c 20 31 29 3b 0a 20 20  ext(pSql, 1);.  
1f120 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1f130 7a 46 72 6f 6d 20 3d 20 28 63 6f 6e 73 74 20 63  zFrom = (const c
1f140 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
1f150 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 32  umn_text(pSql, 2
1f160 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  );.      const c
1f170 68 61 72 20 2a 7a 54 61 72 67 65 74 20 3d 20 28  har *zTarget = (
1f180 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
1f190 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
1f1a0 70 53 71 6c 2c 20 33 29 3b 0a 20 20 20 20 20 20  pSql, 3);.      
1f1b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 49 20  const char *zCI 
1f1c0 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
1f1d0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1f1e0 78 74 28 70 53 71 6c 2c 20 34 29 3b 0a 20 20 20  xt(pSql, 4);.   
1f1f0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1f200 50 61 72 65 6e 74 20 3d 20 28 63 6f 6e 73 74 20  Parent = (const 
1f210 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
1f220 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20  lumn_text(pSql, 
1f230 35 29 3b 0a 0a 20 20 20 20 20 20 72 63 20 3d 20  5);..      rc = 
1f240 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
1f250 76 32 28 64 62 2c 20 7a 45 51 50 2c 20 2d 31 2c  v2(db, zEQP, -1,
1f260 20 26 70 45 78 70 6c 61 69 6e 2c 20 30 29 3b 0a   &pExplain, 0);.
1f270 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1f280 4c 49 54 45 5f 4f 4b 20 29 20 62 72 65 61 6b 3b  LITE_OK ) break;
1f290 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54  .      if( SQLIT
1f2a0 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f 73  E_ROW==sqlite3_s
1f2b0 74 65 70 28 70 45 78 70 6c 61 69 6e 29 20 29 7b  tep(pExplain) ){
1f2c0 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
1f2d0 68 61 72 20 2a 7a 50 6c 61 6e 20 3d 20 28 63 6f  har *zPlan = (co
1f2e0 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
1f2f0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 45  3_column_text(pE
1f300 78 70 6c 61 69 6e 2c 20 33 29 3b 0a 20 20 20 20  xplain, 3);.    
1f310 20 20 20 20 72 65 73 20 3d 20 28 0a 20 20 20 20      res = (.    
1f320 20 20 20 20 20 20 20 20 20 20 30 3d 3d 73 71 6c            0==sql
1f330 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 7a 47 6c  ite3_strglob(zGl
1f340 6f 62 2c 20 7a 50 6c 61 6e 29 0a 20 20 20 20 20  ob, zPlan).     
1f350 20 20 20 20 20 20 7c 7c 20 30 3d 3d 73 71 6c 69        || 0==sqli
1f360 74 65 33 5f 73 74 72 67 6c 6f 62 28 7a 47 6c 6f  te3_strglob(zGlo
1f370 62 49 50 4b 2c 20 7a 50 6c 61 6e 29 0a 20 20 20  bIPK, zPlan).   
1f380 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 7d 0a       );.      }.
1f390 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1f3a0 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78 70  e3_finalize(pExp
1f3b0 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 69 66 28  lain);.      if(
1f3c0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1f3d0 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 69   break;..      i
1f3e0 66 28 20 72 65 73 3c 30 20 29 7b 0a 20 20 20 20  f( res<0 ){.    
1f3f0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
1f400 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 69  tderr, "Error: i
1f410 6e 74 65 72 6e 61 6c 20 65 72 72 6f 72 22 29 3b  nternal error");
1f420 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
1f430 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1f440 20 20 20 20 20 69 66 28 20 62 47 72 6f 75 70 42       if( bGroupB
1f450 79 50 61 72 65 6e 74 0a 20 20 20 20 20 20 20 20  yParent.        
1f460 26 26 20 28 62 56 65 72 62 6f 73 65 20 7c 7c 20  && (bVerbose || 
1f470 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20  res==0).        
1f480 26 26 20 28 7a 50 72 65 76 3d 3d 30 20 7c 7c 20  && (zPrev==0 || 
1f490 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28  sqlite3_stricmp(
1f4a0 7a 50 61 72 65 6e 74 2c 20 7a 50 72 65 76 29 29  zParent, zPrev))
1f4b0 0a 20 20 20 20 20 20 20 20 29 7b 0a 20 20 20 20  .        ){.    
1f4c0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1f4d0 28 6f 75 74 2c 20 22 2d 2d 20 50 61 72 65 6e 74  (out, "-- Parent
1f4e0 20 74 61 62 6c 65 20 25 73 5c 6e 22 2c 20 7a 50   table %s\n", zP
1f4f0 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
1f500 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
1f510 50 72 65 76 29 3b 0a 20 20 20 20 20 20 20 20 20  Prev);.         
1f520 20 7a 50 72 65 76 20 3d 20 73 71 6c 69 74 65 33   zPrev = sqlite3
1f530 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a  _mprintf("%s", z
1f540 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  Parent);.       
1f550 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20   }..        if( 
1f560 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
1f570 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
1f580 75 74 2c 20 22 25 73 25 73 20 2d 2d 3e 20 25 73  ut, "%s%s --> %s
1f590 5c 6e 22 2c 20 7a 49 6e 64 65 6e 74 2c 20 7a 43  \n", zIndent, zC
1f5a0 49 2c 20 7a 54 61 72 67 65 74 29 3b 0a 20 20 20  I, zTarget);.   
1f5b0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 62       }else if( b
1f5c0 56 65 72 62 6f 73 65 20 29 7b 0a 20 20 20 20 20  Verbose ){.     
1f5d0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
1f5e0 6f 75 74 2c 20 22 25 73 2f 2a 20 6e 6f 20 65 78  out, "%s/* no ex
1f5f0 74 72 61 20 69 6e 64 65 78 65 73 20 72 65 71 75  tra indexes requ
1f600 69 72 65 64 20 66 6f 72 20 25 73 20 2d 3e 20 25  ired for %s -> %
1f610 73 20 2a 2f 5c 6e 22 2c 0a 20 20 20 20 20 20 20  s */\n",.       
1f620 20 20 20 20 20 20 20 7a 49 6e 64 65 6e 74 2c 20         zIndent, 
1f630 7a 46 72 6f 6d 2c 20 7a 54 61 72 67 65 74 0a 20  zFrom, zTarget. 
1f640 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20           );.    
1f650 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
1f660 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
1f670 66 72 65 65 28 7a 50 72 65 76 29 3b 0a 0a 20 20  free(zPrev);..  
1f680 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1f690 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 61 77  _OK ){.      raw
1f6a0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1f6b0 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f  "%s\n", sqlite3_
1f6c0 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20 20  errmsg(db));.   
1f6d0 20 7d 0a 0a 20 20 20 20 72 63 32 20 3d 20 73 71   }..    rc2 = sq
1f6e0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
1f6f0 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63  Sql);.    if( rc
1f700 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1f710 63 32 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  c2!=SQLITE_OK ){
1f720 0a 20 20 20 20 20 20 72 63 20 3d 20 72 63 32 3b  .      rc = rc2;
1f730 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
1f740 66 28 73 74 64 65 72 72 2c 20 22 25 73 5c 6e 22  f(stderr, "%s\n"
1f750 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
1f760 28 64 62 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (db));.    }.  }
1f770 65 6c 73 65 7b 0a 20 20 20 20 72 61 77 5f 70 72  else{.    raw_pr
1f780 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73  intf(stderr, "%s
1f790 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  \n", sqlite3_err
1f7a0 6d 73 67 28 64 62 29 29 3b 0a 20 20 7d 0a 0a 20  msg(db));.  }.. 
1f7b0 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
1f7c0 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74  *.** Implementat
1f7d0 69 6f 6e 20 6f 66 20 22 2e 6c 69 6e 74 22 20 64  ion of ".lint" d
1f7e0 6f 74 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 73  ot command..*/.s
1f7f0 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 74 44 6f  tatic int lintDo
1f800 74 43 6f 6d 6d 61 6e 64 28 0a 20 20 53 68 65 6c  tCommand(.  Shel
1f810 6c 53 74 61 74 65 20 2a 70 53 74 61 74 65 2c 20  lState *pState, 
1f820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1f830 75 72 72 65 6e 74 20 73 68 65 6c 6c 20 74 6f 6f  urrent shell too
1f840 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20 63 68 61  l state */.  cha
1f850 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20 20 20 20  r **azArg,      
1f860 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f870 41 72 72 61 79 20 6f 66 20 61 72 67 75 6d 65 6e  Array of argumen
1f880 74 73 20 70 61 73 73 65 64 20 74 6f 20 64 6f 74  ts passed to dot
1f890 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
1f8a0 74 20 6e 41 72 67 20 20 20 20 20 20 20 20 20 20  t nArg          
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f8c0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
1f8d0 65 73 20 69 6e 20 61 7a 41 72 67 5b 5d 20 2a 2f  es in azArg[] */
1f8e0 0a 29 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 6e  .){.  int n;.  n
1f8f0 20 3d 20 28 6e 41 72 67 3e 3d 32 20 3f 20 28 69   = (nArg>=2 ? (i
1f900 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72 67 5b  nt)strlen(azArg[
1f910 31 5d 29 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  1]) : 0);.  if( 
1f920 6e 3c 31 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73  n<1 || sqlite3_s
1f930 74 72 6e 69 63 6d 70 28 61 7a 41 72 67 5b 31 5d  trnicmp(azArg[1]
1f940 2c 20 22 66 6b 65 79 2d 69 6e 64 65 78 65 73 22  , "fkey-indexes"
1f950 2c 20 6e 29 20 29 20 67 6f 74 6f 20 75 73 61 67  , n) ) goto usag
1f960 65 3b 0a 20 20 72 65 74 75 72 6e 20 6c 69 6e 74  e;.  return lint
1f970 46 6b 65 79 49 6e 64 65 78 65 73 28 70 53 74 61  FkeyIndexes(pSta
1f980 74 65 2c 20 61 7a 41 72 67 2c 20 6e 41 72 67 29  te, azArg, nArg)
1f990 3b 0a 0a 20 75 73 61 67 65 3a 0a 20 20 72 61 77  ;.. usage:.  raw
1f9a0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1f9b0 22 55 73 61 67 65 20 25 73 20 73 75 62 2d 63 6f  "Usage %s sub-co
1f9c0 6d 6d 61 6e 64 20 3f 73 77 69 74 63 68 65 73 2e  mmand ?switches.
1f9d0 2e 2e 3f 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d  ..?\n", azArg[0]
1f9e0 29 3b 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28  );.  raw_printf(
1f9f0 73 74 64 65 72 72 2c 20 22 57 68 65 72 65 20 73  stderr, "Where s
1fa00 75 62 2d 63 6f 6d 6d 61 6e 64 73 20 61 72 65 3a  ub-commands are:
1fa10 5c 6e 22 29 3b 0a 20 20 72 61 77 5f 70 72 69 6e  \n");.  raw_prin
1fa20 74 66 28 73 74 64 65 72 72 2c 20 22 20 20 20 20  tf(stderr, "    
1fa30 66 6b 65 79 2d 69 6e 64 65 78 65 73 5c 6e 22 29  fkey-indexes\n")
1fa40 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
1fa50 45 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a  E_ERROR;.}../*.*
1fa60 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * Implementation
1fa70 20 6f 66 20 22 2e 65 78 70 65 72 74 22 20 64 6f   of ".expert" do
1fa80 74 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 73 74  t command..*/.st
1fa90 61 74 69 63 20 69 6e 74 20 65 78 70 65 72 74 44  atic int expertD
1faa0 6f 74 43 6f 6d 6d 61 6e 64 28 0a 20 20 53 68 65  otCommand(.  She
1fab0 6c 6c 53 74 61 74 65 20 2a 70 53 74 61 74 65 2c  llState *pState,
1fac0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fad0 43 75 72 72 65 6e 74 20 73 68 65 6c 6c 20 74 6f  Current shell to
1fae0 6f 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20 63 68  ol state */.  ch
1faf0 61 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20 20 20  ar **azArg,     
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fb10 20 41 72 72 61 79 20 6f 66 20 61 72 67 75 6d 65   Array of argume
1fb20 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 64 6f  nts passed to do
1fb30 74 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  t command */.  i
1fb40 6e 74 20 6e 41 72 67 20 20 20 20 20 20 20 20 20  nt nArg         
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fb60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
1fb70 69 65 73 20 69 6e 20 61 7a 41 72 67 5b 5d 20 2a  ies in azArg[] *
1fb80 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20  /.){.  int rc = 
1fb90 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 63 68 61  SQLITE_OK;.  cha
1fba0 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 69  r *zErr = 0;.  i
1fbb0 6e 74 20 69 3b 0a 20 20 69 6e 74 20 69 53 61 6d  nt i;.  int iSam
1fbc0 70 6c 65 20 3d 20 30 3b 0a 0a 20 20 61 73 73 65  ple = 0;..  asse
1fbd0 72 74 28 20 70 53 74 61 74 65 2d 3e 65 78 70 65  rt( pState->expe
1fbe0 72 74 2e 70 45 78 70 65 72 74 3d 3d 30 20 29 3b  rt.pExpert==0 );
1fbf0 0a 20 20 6d 65 6d 73 65 74 28 26 70 53 74 61 74  .  memset(&pStat
1fc00 65 2d 3e 65 78 70 65 72 74 2c 20 30 2c 20 73 69  e->expert, 0, si
1fc10 7a 65 6f 66 28 45 78 70 65 72 74 49 6e 66 6f 29  zeof(ExpertInfo)
1fc20 29 3b 0a 0a 20 20 66 6f 72 28 69 3d 31 3b 20 72  );..  for(i=1; r
1fc30 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
1fc40 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
1fc50 20 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72    char *z = azAr
1fc60 67 5b 69 5d 3b 0a 20 20 20 20 69 6e 74 20 6e 3b  g[i];.    int n;
1fc70 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27  .    if( z[0]=='
1fc80 2d 27 20 26 26 20 7a 5b 31 5d 3d 3d 27 2d 27 20  -' && z[1]=='-' 
1fc90 29 20 7a 2b 2b 3b 0a 20 20 20 20 6e 20 3d 20 73  ) z++;.    n = s
1fca0 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 20 20 69 66  trlen(z);.    if
1fcb0 28 20 6e 3e 3d 32 20 26 26 20 30 3d 3d 73 74 72  ( n>=2 && 0==str
1fcc0 6e 63 6d 70 28 7a 2c 20 22 2d 76 65 72 62 6f 73  ncmp(z, "-verbos
1fcd0 65 22 2c 20 6e 29 20 29 7b 0a 20 20 20 20 20 20  e", n) ){.      
1fce0 70 53 74 61 74 65 2d 3e 65 78 70 65 72 74 2e 62  pState->expert.b
1fcf0 56 65 72 62 6f 73 65 20 3d 20 31 3b 0a 20 20 20  Verbose = 1;.   
1fd00 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 28 20   }.    else if( 
1fd10 6e 3e 3d 32 20 26 26 20 30 3d 3d 73 74 72 6e 63  n>=2 && 0==strnc
1fd20 6d 70 28 7a 2c 20 22 2d 73 61 6d 70 6c 65 22 2c  mp(z, "-sample",
1fd30 20 6e 29 20 29 7b 0a 20 20 20 20 20 20 69 66 28   n) ){.      if(
1fd40 20 69 3d 3d 28 6e 41 72 67 2d 31 29 20 29 7b 0a   i==(nArg-1) ){.
1fd50 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
1fd60 74 66 28 73 74 64 65 72 72 2c 20 22 6f 70 74 69  tf(stderr, "opti
1fd70 6f 6e 20 72 65 71 75 69 72 65 73 20 61 6e 20 61  on requires an a
1fd80 72 67 75 6d 65 6e 74 3a 20 25 73 5c 6e 22 2c 20  rgument: %s\n", 
1fd90 7a 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  z);.        rc =
1fda0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
1fdb0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1fdc0 20 20 20 20 69 53 61 6d 70 6c 65 20 3d 20 28 69      iSample = (i
1fdd0 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28  nt)integerValue(
1fde0 61 7a 41 72 67 5b 2b 2b 69 5d 29 3b 0a 20 20 20  azArg[++i]);.   
1fdf0 20 20 20 20 20 69 66 28 20 69 53 61 6d 70 6c 65       if( iSample
1fe00 3c 30 20 7c 7c 20 69 53 61 6d 70 6c 65 3e 31 30  <0 || iSample>10
1fe10 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  0 ){.          r
1fe20 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1fe30 2c 20 22 76 61 6c 75 65 20 6f 75 74 20 6f 66 20  , "value out of 
1fe40 72 61 6e 67 65 3a 20 25 73 5c 6e 22 2c 20 61 7a  range: %s\n", az
1fe50 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
1fe60 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
1fe70 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20 7d 0a  RROR;.        }.
1fe80 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1fe90 20 20 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61    else{.      ra
1fea0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1feb0 20 22 75 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e   "unknown option
1fec0 3a 20 25 73 5c 6e 22 2c 20 7a 29 3b 0a 20 20 20  : %s\n", z);.   
1fed0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
1fee0 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  RROR;.    }.  }.
1fef0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1ff00 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 53 74 61  E_OK ){.    pSta
1ff10 74 65 2d 3e 65 78 70 65 72 74 2e 70 45 78 70 65  te->expert.pExpe
1ff20 72 74 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 70  rt = sqlite3_exp
1ff30 65 72 74 5f 6e 65 77 28 70 53 74 61 74 65 2d 3e  ert_new(pState->
1ff40 64 62 2c 20 26 7a 45 72 72 29 3b 0a 20 20 20 20  db, &zErr);.    
1ff50 69 66 28 20 70 53 74 61 74 65 2d 3e 65 78 70 65  if( pState->expe
1ff60 72 74 2e 70 45 78 70 65 72 74 3d 3d 30 20 29 7b  rt.pExpert==0 ){
1ff70 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
1ff80 66 28 73 74 64 65 72 72 2c 20 22 73 71 6c 69 74  f(stderr, "sqlit
1ff90 65 33 5f 65 78 70 65 72 74 5f 6e 65 77 3a 20 25  e3_expert_new: %
1ffa0 73 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20 20 20  s\n", zErr);.   
1ffb0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
1ffc0 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  RROR;.    }else{
1ffd0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65  .      sqlite3_e
1ffe0 78 70 65 72 74 5f 63 6f 6e 66 69 67 28 0a 20 20  xpert_config(.  
1fff0 20 20 20 20 20 20 20 20 70 53 74 61 74 65 2d 3e          pState->
20000 65 78 70 65 72 74 2e 70 45 78 70 65 72 74 2c 20  expert.pExpert, 
20010 45 58 50 45 52 54 5f 43 4f 4e 46 49 47 5f 53 41  EXPERT_CONFIG_SA
20020 4d 50 4c 45 2c 20 69 53 61 6d 70 6c 65 0a 20 20  MPLE, iSample.  
20030 20 20 20 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d      );.    }.  }
20040 0a 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ..  return rc;.}
20050 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 61 6e 20  ..../*.** If an 
20060 69 6e 70 75 74 20 6c 69 6e 65 20 62 65 67 69 6e  input line begin
20070 73 20 77 69 74 68 20 22 2e 22 20 74 68 65 6e 20  s with "." then 
20080 69 6e 76 6f 6b 65 20 74 68 69 73 20 72 6f 75 74  invoke this rout
20090 69 6e 65 20 74 6f 0a 2a 2a 20 70 72 6f 63 65 73  ine to.** proces
200a0 73 20 74 68 61 74 20 6c 69 6e 65 2e 0a 2a 2a 0a  s that line..**.
200b0 2a 2a 20 52 65 74 75 72 6e 20 31 20 6f 6e 20 65  ** Return 1 on e
200c0 72 72 6f 72 2c 20 32 20 74 6f 20 65 78 69 74 2c  rror, 2 to exit,
200d0 20 61 6e 64 20 30 20 6f 74 68 65 72 77 69 73 65   and 0 otherwise
200e0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
200f0 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28  do_meta_command(
20100 63 68 61 72 20 2a 7a 4c 69 6e 65 2c 20 53 68 65  char *zLine, She
20110 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69  llState *p){.  i
20120 6e 74 20 68 20 3d 20 31 3b 0a 20 20 69 6e 74 20  nt h = 1;.  int 
20130 6e 41 72 67 20 3d 20 30 3b 0a 20 20 69 6e 74 20  nArg = 0;.  int 
20140 6e 2c 20 63 3b 0a 20 20 69 6e 74 20 72 63 20 3d  n, c;.  int rc =
20150 20 30 3b 0a 20 20 63 68 61 72 20 2a 61 7a 41 72   0;.  char *azAr
20160 67 5b 35 30 5d 3b 0a 0a 20 20 69 66 28 20 70 2d  g[50];..  if( p-
20170 3e 65 78 70 65 72 74 2e 70 45 78 70 65 72 74 20  >expert.pExpert 
20180 29 7b 0a 20 20 20 20 65 78 70 65 72 74 46 69 6e  ){.    expertFin
20190 69 73 68 28 70 2c 20 31 2c 20 30 29 3b 0a 20 20  ish(p, 1, 0);.  
201a0 7d 0a 0a 20 20 2f 2a 20 50 61 72 73 65 20 74 68  }..  /* Parse th
201b0 65 20 69 6e 70 75 74 20 6c 69 6e 65 20 69 6e 74  e input line int
201c0 6f 20 74 6f 6b 65 6e 73 2e 0a 20 20 2a 2f 0a 20  o tokens..  */. 
201d0 20 77 68 69 6c 65 28 20 7a 4c 69 6e 65 5b 68 5d   while( zLine[h]
201e0 20 26 26 20 6e 41 72 67 3c 41 72 72 61 79 53 69   && nArg<ArraySi
201f0 7a 65 28 61 7a 41 72 67 29 20 29 7b 0a 20 20 20  ze(azArg) ){.   
20200 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28   while( IsSpace(
20210 7a 4c 69 6e 65 5b 68 5d 29 20 29 7b 20 68 2b 2b  zLine[h]) ){ h++
20220 3b 20 7d 0a 20 20 20 20 69 66 28 20 7a 4c 69 6e  ; }.    if( zLin
20230 65 5b 68 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b  e[h]==0 ) break;
20240 0a 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68  .    if( zLine[h
20250 5d 3d 3d 27 5c 27 27 20 7c 7c 20 7a 4c 69 6e 65  ]=='\'' || zLine
20260 5b 68 5d 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20  [h]=='"' ){.    
20270 20 20 69 6e 74 20 64 65 6c 69 6d 20 3d 20 7a 4c    int delim = zL
20280 69 6e 65 5b 68 2b 2b 5d 3b 0a 20 20 20 20 20 20  ine[h++];.      
20290 61 7a 41 72 67 5b 6e 41 72 67 2b 2b 5d 20 3d 20  azArg[nArg++] = 
202a0 26 7a 4c 69 6e 65 5b 68 5d 3b 0a 20 20 20 20 20  &zLine[h];.     
202b0 20 77 68 69 6c 65 28 20 7a 4c 69 6e 65 5b 68 5d   while( zLine[h]
202c0 20 26 26 20 7a 4c 69 6e 65 5b 68 5d 21 3d 64 65   && zLine[h]!=de
202d0 6c 69 6d 20 29 7b 0a 20 20 20 20 20 20 20 20 69  lim ){.        i
202e0 66 28 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 5c 5c  f( zLine[h]=='\\
202f0 27 20 26 26 20 64 65 6c 69 6d 3d 3d 27 22 27 20  ' && delim=='"' 
20300 26 26 20 7a 4c 69 6e 65 5b 68 2b 31 5d 21 3d 30  && zLine[h+1]!=0
20310 20 29 20 68 2b 2b 3b 0a 20 20 20 20 20 20 20 20   ) h++;.        
20320 68 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  h++;.      }.   
20330 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 3d     if( zLine[h]=
20340 3d 64 65 6c 69 6d 20 29 7b 0a 20 20 20 20 20 20  =delim ){.      
20350 20 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 20 3d 20 30    zLine[h++] = 0
20360 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
20370 69 66 28 20 64 65 6c 69 6d 3d 3d 27 22 27 20 29  if( delim=='"' )
20380 20 72 65 73 6f 6c 76 65 5f 62 61 63 6b 73 6c 61   resolve_backsla
20390 73 68 65 73 28 61 7a 41 72 67 5b 6e 41 72 67 2d  shes(azArg[nArg-
203a0 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  1]);.    }else{.
203b0 20 20 20 20 20 20 61 7a 41 72 67 5b 6e 41 72 67        azArg[nArg
203c0 2b 2b 5d 20 3d 20 26 7a 4c 69 6e 65 5b 68 5d 3b  ++] = &zLine[h];
203d0 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a 4c  .      while( zL
203e0 69 6e 65 5b 68 5d 20 26 26 20 21 49 73 53 70 61  ine[h] && !IsSpa
203f0 63 65 28 7a 4c 69 6e 65 5b 68 5d 29 20 29 7b 20  ce(zLine[h]) ){ 
20400 68 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 69 66 28  h++; }.      if(
20410 20 7a 4c 69 6e 65 5b 68 5d 20 29 20 7a 4c 69 6e   zLine[h] ) zLin
20420 65 5b 68 2b 2b 5d 20 3d 20 30 3b 0a 20 20 20 20  e[h++] = 0;.    
20430 20 20 72 65 73 6f 6c 76 65 5f 62 61 63 6b 73 6c    resolve_backsl
20440 61 73 68 65 73 28 61 7a 41 72 67 5b 6e 41 72 67  ashes(azArg[nArg
20450 2d 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  -1]);.    }.  }.
20460 0a 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 74 68  .  /* Process th
20470 65 20 69 6e 70 75 74 20 6c 69 6e 65 2e 0a 20 20  e input line..  
20480 2a 2f 0a 20 20 69 66 28 20 6e 41 72 67 3d 3d 30  */.  if( nArg==0
20490 20 29 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a 20   ) return 0; /* 
204a0 6e 6f 20 74 6f 6b 65 6e 73 2c 20 6e 6f 20 65 72  no tokens, no er
204b0 72 6f 72 20 2a 2f 0a 20 20 6e 20 3d 20 73 74 72  ror */.  n = str
204c0 6c 65 6e 33 30 28 61 7a 41 72 67 5b 30 5d 29 3b  len30(azArg[0]);
204d0 0a 20 20 63 20 3d 20 61 7a 41 72 67 5b 30 5d 5b  .  c = azArg[0][
204e0 30 5d 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  0];..#ifndef SQL
204f0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
20500 5a 41 54 49 4f 4e 0a 20 20 69 66 28 20 63 3d 3d  ZATION.  if( c==
20510 27 61 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'a' && strncmp(a
20520 7a 41 72 67 5b 30 5d 2c 20 22 61 75 74 68 22 2c  zArg[0], "auth",
20530 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66   n)==0 ){.    if
20540 28 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20  ( nArg!=2 ){.   
20550 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
20560 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 61  derr, "Usage: .a
20570 75 74 68 20 4f 4e 7c 4f 46 46 5c 6e 22 29 3b 0a  uth ON|OFF\n");.
20580 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
20590 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
205a0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
205b0 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  }.    open_db(p,
205c0 20 30 29 3b 0a 20 20 20 20 69 66 28 20 62 6f 6f   0);.    if( boo
205d0 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
205e0 31 5d 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  1]) ){.      sql
205f0 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69  ite3_set_authori
20600 7a 65 72 28 70 2d 3e 64 62 2c 20 73 68 65 6c 6c  zer(p->db, shell
20610 41 75 74 68 2c 20 70 29 3b 0a 20 20 20 20 7d 65  Auth, p);.    }e
20620 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
20630 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65  e3_set_authorize
20640 72 28 70 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a  r(p->db, 0, 0);.
20650 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65      }.  }else.#e
20660 6e 64 69 66 0a 0a 20 20 69 66 28 20 28 63 3d 3d  ndif..  if( (c==
20670 27 62 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73  'b' && n>=3 && s
20680 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
20690 20 22 62 61 63 6b 75 70 22 2c 20 6e 29 3d 3d 30   "backup", n)==0
206a0 29 0a 20 20 20 7c 7c 20 28 63 3d 3d 27 73 27 20  ).   || (c=='s' 
206b0 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63  && n>=3 && strnc
206c0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 61  mp(azArg[0], "sa
206d0 76 65 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 29 7b  ve", n)==0).  ){
206e0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
206f0 2a 7a 44 65 73 74 46 69 6c 65 20 3d 20 30 3b 0a  *zDestFile = 0;.
20700 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
20710 7a 44 62 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  zDb = 0;.    sql
20720 69 74 65 33 20 2a 70 44 65 73 74 3b 0a 20 20 20  ite3 *pDest;.   
20730 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20   sqlite3_backup 
20740 2a 70 42 61 63 6b 75 70 3b 0a 20 20 20 20 69 6e  *pBackup;.    in
20750 74 20 6a 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 31  t j;.    for(j=1
20760 3b 20 6a 3c 6e 41 72 67 3b 20 6a 2b 2b 29 7b 0a  ; j<nArg; j++){.
20770 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
20780 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 6a 5d 3b 0a   *z = azArg[j];.
20790 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d        if( z[0]==
207a0 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 77  '-' ){.        w
207b0 68 69 6c 65 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20  hile( z[0]=='-' 
207c0 29 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 2f  ) z++;.        /
207d0 2a 20 4e 6f 20 6f 70 74 69 6f 6e 73 20 74 6f 20  * No options to 
207e0 70 72 6f 63 65 73 73 20 61 74 20 74 68 69 73 20  process at this 
207f0 74 69 6d 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  time */.        
20800 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38  {.          utf8
20810 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
20820 22 75 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e 3a  "unknown option:
20830 20 25 73 5c 6e 22 2c 20 61 7a 41 72 67 5b 6a 5d   %s\n", azArg[j]
20840 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  );.          ret
20850 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  urn 1;.        }
20860 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
20870 20 7a 44 65 73 74 46 69 6c 65 3d 3d 30 20 29 7b   zDestFile==0 ){
20880 0a 20 20 20 20 20 20 20 20 7a 44 65 73 74 46 69  .        zDestFi
20890 6c 65 20 3d 20 61 7a 41 72 67 5b 6a 5d 3b 0a 20  le = azArg[j];. 
208a0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a       }else if( z
208b0 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  Db==0 ){.       
208c0 20 7a 44 62 20 3d 20 7a 44 65 73 74 46 69 6c 65   zDb = zDestFile
208d0 3b 0a 20 20 20 20 20 20 20 20 7a 44 65 73 74 46  ;.        zDestF
208e0 69 6c 65 20 3d 20 61 7a 41 72 67 5b 6a 5d 3b 0a  ile = azArg[j];.
208f0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
20900 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
20910 73 74 64 65 72 72 2c 20 22 74 6f 6f 20 6d 61 6e  stderr, "too man
20920 79 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 2e  y arguments to .
20930 62 61 63 6b 75 70 5c 6e 22 29 3b 0a 20 20 20 20  backup\n");.    
20940 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
20950 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
20960 69 66 28 20 7a 44 65 73 74 46 69 6c 65 3d 3d 30  if( zDestFile==0
20970 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
20980 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6d 69  intf(stderr, "mi
20990 73 73 69 6e 67 20 46 49 4c 45 4e 41 4d 45 20 61  ssing FILENAME a
209a0 72 67 75 6d 65 6e 74 20 6f 6e 20 2e 62 61 63 6b  rgument on .back
209b0 75 70 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65  up\n");.      re
209c0 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
209d0 20 20 69 66 28 20 7a 44 62 3d 3d 30 20 29 20 7a    if( zDb==0 ) z
209e0 44 62 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 20  Db = "main";.   
209f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
20a00 65 6e 28 7a 44 65 73 74 46 69 6c 65 2c 20 26 70  en(zDestFile, &p
20a10 44 65 73 74 29 3b 0a 20 20 20 20 69 66 28 20 72  Dest);.    if( r
20a20 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
20a30 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
20a40 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
20a50 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22  : cannot open \"
20a60 25 73 5c 22 5c 6e 22 2c 20 7a 44 65 73 74 46 69  %s\"\n", zDestFi
20a70 6c 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  le);.      sqlit
20a80 65 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29 3b  e3_close(pDest);
20a90 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
20aa0 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f  .    }.    open_
20ab0 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 70 42  db(p, 0);.    pB
20ac0 61 63 6b 75 70 20 3d 20 73 71 6c 69 74 65 33 5f  ackup = sqlite3_
20ad0 62 61 63 6b 75 70 5f 69 6e 69 74 28 70 44 65 73  backup_init(pDes
20ae0 74 2c 20 22 6d 61 69 6e 22 2c 20 70 2d 3e 64 62  t, "main", p->db
20af0 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
20b00 70 42 61 63 6b 75 70 3d 3d 30 20 29 7b 0a 20 20  pBackup==0 ){.  
20b10 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
20b20 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
20b30 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
20b40 72 72 6d 73 67 28 70 44 65 73 74 29 29 3b 0a 20  rrmsg(pDest));. 
20b50 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f       sqlite3_clo
20b60 73 65 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  se(pDest);.     
20b70 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
20b80 0a 20 20 20 20 77 68 69 6c 65 28 20 20 28 72 63  .    while(  (rc
20b90 20 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75   = sqlite3_backu
20ba0 70 5f 73 74 65 70 28 70 42 61 63 6b 75 70 2c 31  p_step(pBackup,1
20bb0 30 30 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  00))==SQLITE_OK 
20bc0 29 7b 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ){}.    sqlite3_
20bd0 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 70 42  backup_finish(pB
20be0 61 63 6b 75 70 29 3b 0a 20 20 20 20 69 66 28 20  ackup);.    if( 
20bf0 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
20c00 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 30 3b  ){.      rc = 0;
20c10 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
20c20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
20c30 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73  derr, "Error: %s
20c40 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  \n", sqlite3_err
20c50 6d 73 67 28 70 44 65 73 74 29 29 3b 0a 20 20 20  msg(pDest));.   
20c60 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
20c70 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f  .    sqlite3_clo
20c80 73 65 28 70 44 65 73 74 29 3b 0a 20 20 7d 65 6c  se(pDest);.  }el
20c90 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 62 27  se..  if( c=='b'
20ca0 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
20cb0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62  cmp(azArg[0], "b
20cc0 61 69 6c 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ail", n)==0 ){. 
20cd0 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29     if( nArg==2 )
20ce0 7b 0a 20 20 20 20 20 20 62 61 69 6c 5f 6f 6e 5f  {.      bail_on_
20cf0 65 72 72 6f 72 20 3d 20 62 6f 6f 6c 65 61 6e 56  error = booleanV
20d00 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a  alue(azArg[1]);.
20d10 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20d20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
20d30 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 62 61 69  rr, "Usage: .bai
20d40 6c 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20  l on|off\n");.  
20d50 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
20d60 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
20d70 20 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20   c=='b' && n>=3 
20d80 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
20d90 5b 30 5d 2c 20 22 62 69 6e 61 72 79 22 2c 20 6e  [0], "binary", n
20da0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
20db0 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
20dc0 20 69 66 28 20 62 6f 6f 6c 65 61 6e 56 61 6c 75   if( booleanValu
20dd0 65 28 61 7a 41 72 67 5b 31 5d 29 20 29 7b 0a 20  e(azArg[1]) ){. 
20de0 20 20 20 20 20 20 20 73 65 74 42 69 6e 61 72 79         setBinary
20df0 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c 20 31 29 3b  Mode(p->out, 1);
20e00 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
20e10 20 20 20 20 20 20 73 65 74 54 65 78 74 4d 6f 64        setTextMod
20e20 65 28 70 2d 3e 6f 75 74 2c 20 31 29 3b 0a 20 20  e(p->out, 1);.  
20e30 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
20e40 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
20e50 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
20e60 3a 20 2e 62 69 6e 61 72 79 20 6f 6e 7c 6f 66 66  : .binary on|off
20e70 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
20e80 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
20e90 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 63 27 20  e..  if( c=='c' 
20ea0 26 26 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b  && strcmp(azArg[
20eb0 30 5d 2c 22 63 64 22 29 3d 3d 30 20 29 7b 0a 20  0],"cd")==0 ){. 
20ec0 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29     if( nArg==2 )
20ed0 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57  {.#if defined(_W
20ee0 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64  IN32) || defined
20ef0 28 57 49 4e 33 32 29 0a 20 20 20 20 20 20 77 63  (WIN32).      wc
20f00 68 61 72 5f 74 20 2a 7a 20 3d 20 73 71 6c 69 74  har_t *z = sqlit
20f10 65 33 5f 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f  e3_win32_utf8_to
20f20 5f 75 6e 69 63 6f 64 65 28 61 7a 41 72 67 5b 31  _unicode(azArg[1
20f30 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 21  ]);.      rc = !
20f40 53 65 74 43 75 72 72 65 6e 74 44 69 72 65 63 74  SetCurrentDirect
20f50 6f 72 79 57 28 7a 29 3b 0a 20 20 20 20 20 20 73  oryW(z);.      s
20f60 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a  qlite3_free(z);.
20f70 23 65 6c 73 65 0a 20 20 20 20 20 20 72 63 20 3d  #else.      rc =
20f80 20 63 68 64 69 72 28 61 7a 41 72 67 5b 31 5d 29   chdir(azArg[1])
20f90 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 69  ;.#endif.      i
20fa0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
20fb0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
20fc0 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20 63 68 61  err, "Cannot cha
20fd0 6e 67 65 20 74 6f 20 64 69 72 65 63 74 6f 72 79  nge to directory
20fe0 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72   \"%s\"\n", azAr
20ff0 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 72  g[1]);.        r
21000 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  c = 1;.      }. 
21010 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
21020 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
21030 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 64 20 44  r, "Usage: .cd D
21040 49 52 45 43 54 4f 52 59 5c 6e 22 29 3b 0a 20 20  IRECTORY\n");.  
21050 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
21060 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20  }.  }else..  /* 
21070 54 68 65 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64  The undocumented
21080 20 22 2e 62 72 65 61 6b 70 6f 69 6e 74 22 20 63   ".breakpoint" c
21090 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61 20  ommand causes a 
210a0 63 61 6c 6c 20 74 6f 20 74 68 65 20 6e 6f 2d 6f  call to the no-o
210b0 70 0a 20 20 2a 2a 20 72 6f 75 74 69 6e 65 20 6e  p.  ** routine n
210c0 61 6d 65 64 20 74 65 73 74 5f 62 72 65 61 6b 70  amed test_breakp
210d0 6f 69 6e 74 28 29 2e 0a 20 20 2a 2f 0a 20 20 69  oint()..  */.  i
210e0 66 28 20 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d  f( c=='b' && n>=
210f0 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  3 && strncmp(azA
21100 72 67 5b 30 5d 2c 20 22 62 72 65 61 6b 70 6f 69  rg[0], "breakpoi
21110 6e 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  nt", n)==0 ){.  
21120 20 20 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e    test_breakpoin
21130 74 28 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  t();.  }else..  
21140 69 66 28 20 63 3d 3d 27 63 27 20 26 26 20 6e 3e  if( c=='c' && n>
21150 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  =3 && strncmp(az
21160 41 72 67 5b 30 5d 2c 20 22 63 68 61 6e 67 65 73  Arg[0], "changes
21170 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
21180 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20  if( nArg==2 ){. 
21190 20 20 20 20 20 73 65 74 4f 72 43 6c 65 61 72 46       setOrClearF
211a0 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 43 6f 75  lag(p, SHFLG_Cou
211b0 6e 74 43 68 61 6e 67 65 73 2c 20 61 7a 41 72 67  ntChanges, azArg
211c0 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  [1]);.    }else{
211d0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
211e0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
211f0 3a 20 2e 63 68 61 6e 67 65 73 20 6f 6e 7c 6f 66  : .changes on|of
21200 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  f\n");.      rc 
21210 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 1;.    }.  }el
21220 73 65 0a 0a 20 20 2f 2a 20 43 61 6e 63 65 6c 20  se..  /* Cancel 
21230 6f 75 74 70 75 74 20 72 65 64 69 72 65 63 74 69  output redirecti
21240 6f 6e 2c 20 69 66 20 69 74 20 69 73 20 63 75 72  on, if it is cur
21250 72 65 6e 74 6c 79 20 73 65 74 20 28 62 79 20 2e  rently set (by .
21260 74 65 73 74 63 61 73 65 29 0a 20 20 2a 2a 20 54  testcase).  ** T
21270 68 65 6e 20 72 65 61 64 20 74 68 65 20 63 6f 6e  hen read the con
21280 74 65 6e 74 20 6f 66 20 74 68 65 20 74 65 73 74  tent of the test
21290 63 61 73 65 2d 6f 75 74 2e 74 78 74 20 66 69 6c  case-out.txt fil
212a0 65 20 61 6e 64 20 63 6f 6d 70 61 72 65 20 61 67  e and compare ag
212b0 61 69 6e 73 74 0a 20 20 2a 2a 20 61 7a 41 72 67  ainst.  ** azArg
212c0 5b 31 5d 2e 20 20 49 66 20 74 68 65 72 65 20 61  [1].  If there a
212d0 72 65 20 64 69 66 66 65 72 65 6e 63 65 73 2c 20  re differences, 
212e0 72 65 70 6f 72 74 20 61 6e 20 65 72 72 6f 72 20  report an error 
212f0 61 6e 64 20 65 78 69 74 2e 0a 20 20 2a 2f 0a 20  and exit..  */. 
21300 20 69 66 28 20 63 3d 3d 27 63 27 20 26 26 20 6e   if( c=='c' && n
21310 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=3 && strncmp(a
21320 7a 41 72 67 5b 30 5d 2c 20 22 63 68 65 63 6b 22  zArg[0], "check"
21330 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63  , n)==0 ){.    c
21340 68 61 72 20 2a 7a 52 65 73 20 3d 20 30 3b 0a 20  har *zRes = 0;. 
21350 20 20 20 6f 75 74 70 75 74 5f 72 65 73 65 74 28     output_reset(
21360 70 29 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67  p);.    if( nArg
21370 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77  !=2 ){.      raw
21380 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
21390 22 55 73 61 67 65 3a 20 2e 63 68 65 63 6b 20 47  "Usage: .check G
213a0 4c 4f 42 2d 50 41 54 54 45 52 4e 5c 6e 22 29 3b  LOB-PATTERN\n");
213b0 0a 20 20 20 20 20 20 72 63 20 3d 20 32 3b 0a 20  .      rc = 2;. 
213c0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 7a 52     }else if( (zR
213d0 65 73 20 3d 20 72 65 61 64 46 69 6c 65 28 22 74  es = readFile("t
213e0 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 22  estcase-out.txt"
213f0 2c 20 30 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20  , 0))==0 ){.    
21400 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
21410 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 63 61 6e  err, "Error: can
21420 6e 6f 74 20 72 65 61 64 20 27 74 65 73 74 63 61  not read 'testca
21430 73 65 2d 6f 75 74 2e 74 78 74 27 5c 6e 22 29 3b  se-out.txt'\n");
21440 0a 20 20 20 20 20 20 72 63 20 3d 20 32 3b 0a 20  .      rc = 2;. 
21450 20 20 20 7d 65 6c 73 65 20 69 66 28 20 74 65 73     }else if( tes
21460 74 63 61 73 65 5f 67 6c 6f 62 28 61 7a 41 72 67  tcase_glob(azArg
21470 5b 31 5d 2c 7a 52 65 73 29 3d 3d 30 20 29 7b 0a  [1],zRes)==0 ){.
21480 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
21490 66 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20 20  f(stderr,.      
214a0 20 20 20 20 20 20 20 20 20 20 20 22 74 65 73 74             "test
214b0 63 61 73 65 2d 25 73 20 46 41 49 4c 45 44 5c 6e  case-%s FAILED\n
214c0 20 45 78 70 65 63 74 65 64 3a 20 5b 25 73 5d 5c   Expected: [%s]\
214d0 6e 20 20 20 20 20 20 47 6f 74 3a 20 5b 25 73 5d  n      Got: [%s]
214e0 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
214f0 20 20 20 20 20 20 70 2d 3e 7a 54 65 73 74 63 61        p->zTestca
21500 73 65 2c 20 61 7a 41 72 67 5b 31 5d 2c 20 7a 52  se, azArg[1], zR
21510 65 73 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  es);.      rc = 
21520 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
21530 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
21540 73 74 64 6f 75 74 2c 20 22 74 65 73 74 63 61 73  stdout, "testcas
21550 65 2d 25 73 20 6f 6b 5c 6e 22 2c 20 70 2d 3e 7a  e-%s ok\n", p->z
21560 54 65 73 74 63 61 73 65 29 3b 0a 20 20 20 20 20  Testcase);.     
21570 20 70 2d 3e 6e 43 68 65 63 6b 2b 2b 3b 0a 20 20   p->nCheck++;.  
21580 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
21590 66 72 65 65 28 7a 52 65 73 29 3b 0a 20 20 7d 65  free(zRes);.  }e
215a0 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 63  lse..  if( c=='c
215b0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
215c0 72 67 5b 30 5d 2c 20 22 63 6c 6f 6e 65 22 2c 20  rg[0], "clone", 
215d0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
215e0 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
215f0 20 20 74 72 79 54 6f 43 6c 6f 6e 65 28 70 2c 20    tryToClone(p, 
21600 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d  azArg[1]);.    }
21610 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
21620 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
21630 55 73 61 67 65 3a 20 2e 63 6c 6f 6e 65 20 46 49  Usage: .clone FI
21640 4c 45 4e 41 4d 45 5c 6e 22 29 3b 0a 20 20 20 20  LENAME\n");.    
21650 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
21660 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
21670 3d 3d 27 64 27 20 26 26 20 6e 3e 31 20 26 26 20  =='d' && n>1 && 
21680 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
21690 2c 20 22 64 61 74 61 62 61 73 65 73 22 2c 20 6e  , "databases", n
216a0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53 68 65 6c  )==0 ){.    Shel
216b0 6c 53 74 61 74 65 20 64 61 74 61 3b 0a 20 20 20  lState data;.   
216c0 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d   char *zErrMsg =
216d0 20 30 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   0;.    open_db(
216e0 70 2c 20 30 29 3b 0a 20 20 20 20 6d 65 6d 63 70  p, 0);.    memcp
216f0 79 28 26 64 61 74 61 2c 20 70 2c 20 73 69 7a 65  y(&data, p, size
21700 6f 66 28 64 61 74 61 29 29 3b 0a 20 20 20 20 64  of(data));.    d
21710 61 74 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d  ata.showHeader =
21720 20 30 3b 0a 20 20 20 20 64 61 74 61 2e 63 4d 6f   0;.    data.cMo
21730 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d  de = data.mode =
21740 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 20 20   MODE_List;.    
21750 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
21760 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 63 6f 6c  (sizeof(data.col
21770 53 65 70 61 72 61 74 6f 72 29 2c 64 61 74 61 2e  Separator),data.
21780 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 22 3a 20  colSeparator,": 
21790 22 29 3b 0a 20 20 20 20 64 61 74 61 2e 63 6e 74  ");.    data.cnt
217a0 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
217b0 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53  3_exec(p->db, "S
217c0 45 4c 45 43 54 20 6e 61 6d 65 2c 20 66 69 6c 65  ELECT name, file
217d0 20 46 52 4f 4d 20 70 72 61 67 6d 61 5f 64 61 74   FROM pragma_dat
217e0 61 62 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20  abase_list",.   
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
21800 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c 20 26  llback, &data, &
21810 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66  zErrMsg);.    if
21820 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20  ( zErrMsg ){.   
21830 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
21840 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 25 73  tderr,"Error: %s
21850 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20  \n", zErrMsg);. 
21860 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
21870 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  e(zErrMsg);.    
21880 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
21890 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
218a0 3d 3d 27 64 27 20 26 26 20 73 74 72 6e 63 6d 70  =='d' && strncmp
218b0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 64 62 69 6e  (azArg[0], "dbin
218c0 66 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  fo", n)==0 ){.  
218d0 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 64 62 69    rc = shell_dbi
218e0 6e 66 6f 5f 63 6f 6d 6d 61 6e 64 28 70 2c 20 6e  nfo_command(p, n
218f0 41 72 67 2c 20 61 7a 41 72 67 29 3b 0a 20 20 7d  Arg, azArg);.  }
21900 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
21910 64 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  d' && strncmp(az
21920 41 72 67 5b 30 5d 2c 20 22 64 75 6d 70 22 2c 20  Arg[0], "dump", 
21930 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e  n)==0 ){.    con
21940 73 74 20 63 68 61 72 20 2a 7a 4c 69 6b 65 20 3d  st char *zLike =
21950 20 30 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   0;.    int i;. 
21960 20 20 20 69 6e 74 20 73 61 76 65 64 53 68 6f 77     int savedShow
21970 48 65 61 64 65 72 20 3d 20 70 2d 3e 73 68 6f 77  Header = p->show
21980 48 65 61 64 65 72 3b 0a 20 20 20 20 53 68 65 6c  Header;.    Shel
21990 6c 43 6c 65 61 72 46 6c 61 67 28 70 2c 20 53 48  lClearFlag(p, SH
219a0 46 4c 47 5f 50 72 65 73 65 72 76 65 52 6f 77 69  FLG_PreserveRowi
219b0 64 7c 53 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73  d|SHFLG_Newlines
219c0 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20  );.    for(i=1; 
219d0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
219e0 20 20 20 20 69 66 28 20 61 7a 41 72 67 5b 69 5d      if( azArg[i]
219f0 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
21a00 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
21a10 7a 20 3d 20 61 7a 41 72 67 5b 69 5d 2b 31 3b 0a  z = azArg[i]+1;.
21a20 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d          if( z[0]
21a30 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20  =='-' ) z++;.   
21a40 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
21a50 7a 2c 22 70 72 65 73 65 72 76 65 2d 72 6f 77 69  z,"preserve-rowi
21a60 64 73 22 29 3d 3d 30 20 29 7b 0a 23 69 66 64 65  ds")==0 ){.#ifde
21a70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
21a80 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20  RTUALTABLE.     
21a90 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
21aa0 73 74 64 65 72 72 2c 20 22 54 68 65 20 2d 2d 70  stderr, "The --p
21ab0 72 65 73 65 72 76 65 2d 72 6f 77 69 64 73 20 6f  reserve-rowids o
21ac0 70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6f 6d  ption is not com
21ad0 70 61 74 69 62 6c 65 22 0a 20 20 20 20 20 20 20  patible".       
21ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21af0 20 20 20 20 20 20 22 20 77 69 74 68 20 53 51 4c        " with SQL
21b00 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
21b10 54 41 42 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20  TABLE\n");.     
21b20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
21b30 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
21b40 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 23  _command_exit;.#
21b50 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 53  else.          S
21b60 68 65 6c 6c 53 65 74 46 6c 61 67 28 70 2c 20 53  hellSetFlag(p, S
21b70 48 46 4c 47 5f 50 72 65 73 65 72 76 65 52 6f 77  HFLG_PreserveRow
21b80 69 64 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  id);.#endif.    
21b90 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
21ba0 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22    if( strcmp(z,"
21bb0 6e 65 77 6c 69 6e 65 73 22 29 3d 3d 30 20 29 7b  newlines")==0 ){
21bc0 0a 20 20 20 20 20 20 20 20 20 20 53 68 65 6c 6c  .          Shell
21bd0 53 65 74 46 6c 61 67 28 70 2c 20 53 48 46 4c 47  SetFlag(p, SHFLG
21be0 5f 4e 65 77 6c 69 6e 65 73 29 3b 0a 20 20 20 20  _Newlines);.    
21bf0 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
21c00 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61    {.          ra
21c10 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
21c20 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e   "Unknown option
21c30 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 2e 64 75   \"%s\" on \".du
21c40 6d 70 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 69  mp\"\n", azArg[i
21c50 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63  ]);.          rc
21c60 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   = 1;.          
21c70 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
21c80 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 20 20  d_exit;.        
21c90 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  }.      }else if
21ca0 28 20 7a 4c 69 6b 65 20 29 7b 0a 20 20 20 20 20  ( zLike ){.     
21cb0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
21cc0 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 64  derr, "Usage: .d
21cd0 75 6d 70 20 3f 2d 2d 70 72 65 73 65 72 76 65 2d  ump ?--preserve-
21ce0 72 6f 77 69 64 73 3f 20 22 0a 20 20 20 20 20 20  rowids? ".      
21cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d00 20 20 20 20 20 22 3f 2d 2d 6e 65 77 6c 69 6e 65       "?--newline
21d10 73 3f 20 3f 4c 49 4b 45 2d 50 41 54 54 45 52 4e  s? ?LIKE-PATTERN
21d20 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72  ?\n");.        r
21d30 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67  c = 1;.        g
21d40 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
21d50 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 65 6c  _exit;.      }el
21d60 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69 6b  se{.        zLik
21d70 65 20 3d 20 61 7a 41 72 67 5b 69 5d 3b 0a 20 20  e = azArg[i];.  
21d80 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
21d90 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
21da0 20 20 20 2f 2a 20 57 68 65 6e 20 70 6c 61 79 69     /* When playi
21db0 6e 67 20 62 61 63 6b 20 61 20 22 64 75 6d 70 22  ng back a "dump"
21dc0 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6d 69  , the content mi
21dd0 67 68 74 20 61 70 70 65 61 72 20 69 6e 20 61 6e  ght appear in an
21de0 20 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20 77 68   order.    ** wh
21df0 69 63 68 20 63 61 75 73 65 73 20 69 6d 6d 65 64  ich causes immed
21e00 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
21e10 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 6f 20   constraints to 
21e20 62 65 20 76 69 6f 6c 61 74 65 64 2e 0a 20 20 20  be violated..   
21e30 20 2a 2a 20 53 6f 20 64 69 73 61 62 6c 65 20 66   ** So disable f
21e40 6f 72 65 69 67 6e 2d 6b 65 79 20 63 6f 6e 73 74  oreign-key const
21e50 72 61 69 6e 74 20 65 6e 66 6f 72 63 65 6d 65 6e  raint enforcemen
21e60 74 20 74 6f 20 70 72 65 76 65 6e 74 20 70 72 6f  t to prevent pro
21e70 62 6c 65 6d 73 2e 20 2a 2f 0a 20 20 20 20 72 61  blems. */.    ra
21e80 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
21e90 20 22 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e   "PRAGMA foreign
21ea0 5f 6b 65 79 73 3d 4f 46 46 3b 5c 6e 22 29 3b 0a  _keys=OFF;\n");.
21eb0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
21ec0 2d 3e 6f 75 74 2c 20 22 42 45 47 49 4e 20 54 52  ->out, "BEGIN TR
21ed0 41 4e 53 41 43 54 49 4f 4e 3b 5c 6e 22 29 3b 0a  ANSACTION;\n");.
21ee0 20 20 20 20 70 2d 3e 77 72 69 74 61 62 6c 65 53      p->writableS
21ef0 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 70  chema = 0;.    p
21f00 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30  ->showHeader = 0
21f10 3b 0a 20 20 20 20 2f 2a 20 53 65 74 20 77 72 69  ;.    /* Set wri
21f20 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 20  table_schema=ON 
21f30 73 69 6e 63 65 20 64 6f 69 6e 67 20 73 6f 20 66  since doing so f
21f40 6f 72 63 65 73 20 53 51 4c 69 74 65 20 74 6f 20  orces SQLite to 
21f50 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20 20 20 2a  initialize.    *
21f60 2a 20 61 73 20 6d 75 63 68 20 6f 66 20 74 68 65  * as much of the
21f70 20 73 63 68 65 6d 61 20 61 73 20 69 74 20 63 61   schema as it ca
21f80 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 73 71  n even if the sq
21f90 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
21fa0 65 20 69 73 0a 20 20 20 20 2a 2a 20 63 6f 72 72  e is.    ** corr
21fb0 75 70 74 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69  upt. */.    sqli
21fc0 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
21fd0 22 53 41 56 45 50 4f 49 4e 54 20 64 75 6d 70 3b  "SAVEPOINT dump;
21fe0 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65   PRAGMA writable
21ff0 5f 73 63 68 65 6d 61 3d 4f 4e 22 2c 20 30 2c 20  _schema=ON", 0, 
22000 30 2c 20 30 29 3b 0a 20 20 20 20 70 2d 3e 6e 45  0, 0);.    p->nE
22010 72 72 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  rr = 0;.    if( 
22020 7a 4c 69 6b 65 3d 3d 30 20 29 7b 0a 20 20 20 20  zLike==0 ){.    
22030 20 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64 75 6d    run_schema_dum
22040 70 5f 71 75 65 72 79 28 70 2c 0a 20 20 20 20 20  p_query(p,.     
22050 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
22060 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20   type, sql FROM 
22070 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 0a  sqlite_master ".
22080 20 20 20 20 20 20 20 20 22 57 48 45 52 45 20 73          "WHERE s
22090 71 6c 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20  ql NOT NULL AND 
220a0 74 79 70 65 3d 3d 27 74 61 62 6c 65 27 20 41 4e  type=='table' AN
220b0 44 20 6e 61 6d 65 21 3d 27 73 71 6c 69 74 65 5f  D name!='sqlite_
220c0 73 65 71 75 65 6e 63 65 27 22 0a 20 20 20 20 20  sequence'".     
220d0 20 29 3b 0a 20 20 20 20 20 20 72 75 6e 5f 73 63   );.      run_sc
220e0 68 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28  hema_dump_query(
220f0 70 2c 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45  p,.        "SELE
22100 43 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73  CT name, type, s
22110 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ql FROM sqlite_m
22120 61 73 74 65 72 20 22 0a 20 20 20 20 20 20 20 20  aster ".        
22130 22 57 48 45 52 45 20 6e 61 6d 65 3d 3d 27 73 71  "WHERE name=='sq
22140 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 27 22 0a  lite_sequence'".
22150 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
22160 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f 71 75  un_table_dump_qu
22170 65 72 79 28 70 2c 0a 20 20 20 20 20 20 20 20 22  ery(p,.        "
22180 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20  SELECT sql FROM 
22190 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 0a  sqlite_master ".
221a0 20 20 20 20 20 20 20 20 22 57 48 45 52 45 20 73          "WHERE s
221b0 71 6c 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44 20  ql NOT NULL AND 
221c0 74 79 70 65 20 49 4e 20 28 27 69 6e 64 65 78 27  type IN ('index'
221d0 2c 27 74 72 69 67 67 65 72 27 2c 27 76 69 65 77  ,'trigger','view
221e0 27 29 22 2c 20 30 0a 20 20 20 20 20 20 29 3b 0a  ')", 0.      );.
221f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
22200 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20   char *zSql;.   
22210 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
22220 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20  3_mprintf(.     
22230 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
22240 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20   type, sql FROM 
22250 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 0a  sqlite_master ".
22260 20 20 20 20 20 20 20 20 22 57 48 45 52 45 20 74          "WHERE t
22270 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 25 51 20  bl_name LIKE %Q 
22280 41 4e 44 20 74 79 70 65 3d 3d 27 74 61 62 6c 65  AND type=='table
22290 27 22 0a 20 20 20 20 20 20 20 20 22 20 20 41 4e  '".        "  AN
222a0 44 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 22 2c  D sql NOT NULL",
222b0 20 7a 4c 69 6b 65 29 3b 0a 20 20 20 20 20 20 72   zLike);.      r
222c0 75 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71  un_schema_dump_q
222d0 75 65 72 79 28 70 2c 7a 53 71 6c 29 3b 0a 20 20  uery(p,zSql);.  
222e0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
222f0 28 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 7a 53  (zSql);.      zS
22300 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
22310 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 22 53  intf(.        "S
22320 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73  ELECT sql FROM s
22330 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 0a 20  qlite_master ". 
22340 20 20 20 20 20 20 20 22 57 48 45 52 45 20 73 71         "WHERE sq
22350 6c 20 4e 4f 54 20 4e 55 4c 4c 22 0a 20 20 20 20  l NOT NULL".    
22360 20 20 20 20 22 20 20 41 4e 44 20 74 79 70 65 20      "  AND type 
22370 49 4e 20 28 27 69 6e 64 65 78 27 2c 27 74 72 69  IN ('index','tri
22380 67 67 65 72 27 2c 27 76 69 65 77 27 29 22 0a 20  gger','view')". 
22390 20 20 20 20 20 20 20 22 20 20 41 4e 44 20 74 62         "  AND tb
223a0 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 25 51 22 2c  l_name LIKE %Q",
223b0 20 7a 4c 69 6b 65 29 3b 0a 20 20 20 20 20 20 72   zLike);.      r
223c0 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f 71 75  un_table_dump_qu
223d0 65 72 79 28 70 2c 20 7a 53 71 6c 2c 20 30 29 3b  ery(p, zSql, 0);
223e0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
223f0 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 7d  ree(zSql);.    }
22400 0a 20 20 20 20 69 66 28 20 70 2d 3e 77 72 69 74  .    if( p->writ
22410 61 62 6c 65 53 63 68 65 6d 61 20 29 7b 0a 20 20  ableSchema ){.  
22420 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
22430 2d 3e 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 77  ->out, "PRAGMA w
22440 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
22450 46 46 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 70  FF;\n");.      p
22460 2d 3e 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61  ->writableSchema
22470 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
22480 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
22490 64 62 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74  db, "PRAGMA writ
224a0 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 3b  able_schema=OFF;
224b0 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20  ", 0, 0, 0);.   
224c0 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
224d0 3e 64 62 2c 20 22 52 45 4c 45 41 53 45 20 64 75  >db, "RELEASE du
224e0 6d 70 3b 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  mp;", 0, 0, 0);.
224f0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
22500 2d 3e 6f 75 74 2c 20 70 2d 3e 6e 45 72 72 20 3f  ->out, p->nErr ?
22510 20 22 52 4f 4c 4c 42 41 43 4b 3b 20 2d 2d 20 64   "ROLLBACK; -- d
22520 75 65 20 74 6f 20 65 72 72 6f 72 73 5c 6e 22 20  ue to errors\n" 
22530 3a 20 22 43 4f 4d 4d 49 54 3b 5c 6e 22 29 3b 0a  : "COMMIT;\n");.
22540 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61 64 65      p->showHeade
22550 72 20 3d 20 73 61 76 65 64 53 68 6f 77 48 65 61  r = savedShowHea
22560 64 65 72 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  der;.  }else..  
22570 69 66 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74  if( c=='e' && st
22580 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
22590 22 65 63 68 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b  "echo", n)==0 ){
225a0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32  .    if( nArg==2
225b0 20 29 7b 0a 20 20 20 20 20 20 73 65 74 4f 72 43   ){.      setOrC
225c0 6c 65 61 72 46 6c 61 67 28 70 2c 20 53 48 46 4c  learFlag(p, SHFL
225d0 47 5f 45 63 68 6f 2c 20 61 7a 41 72 67 5b 31 5d  G_Echo, azArg[1]
225e0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
225f0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
22600 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
22610 65 63 68 6f 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b  echo on|off\n");
22620 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
22630 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
22640 69 66 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74  if( c=='e' && st
22650 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
22660 22 65 71 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  "eqp", n)==0 ){.
22670 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
22680 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72  ){.      if( str
22690 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 66 75  cmp(azArg[1],"fu
226a0 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ll")==0 ){.     
226b0 20 20 20 70 2d 3e 61 75 74 6f 45 51 50 20 3d 20     p->autoEQP = 
226c0 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  2;.      }else{.
226d0 20 20 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45          p->autoE
226e0 51 50 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75  QP = booleanValu
226f0 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  e(azArg[1]);.   
22700 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
22710 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
22720 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
22730 20 2e 65 71 70 20 6f 6e 7c 6f 66 66 7c 66 75 6c   .eqp on|off|ful
22740 6c 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  l\n");.      rc 
22750 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 1;.    }.  }el
22760 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65 27  se..  if( c=='e'
22770 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
22780 67 5b 30 5d 2c 20 22 65 78 69 74 22 2c 20 6e 29  g[0], "exit", n)
22790 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
227a0 41 72 67 3e 31 20 26 26 20 28 72 63 20 3d 20 28  Arg>1 && (rc = (
227b0 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65  int)integerValue
227c0 28 61 7a 41 72 67 5b 31 5d 29 29 21 3d 30 20 29  (azArg[1]))!=0 )
227d0 20 65 78 69 74 28 72 63 29 3b 0a 20 20 20 20 72   exit(rc);.    r
227e0 63 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 0a 0a  c = 2;.  }else..
227f0 20 20 2f 2a 20 54 68 65 20 22 2e 65 78 70 6c 61    /* The ".expla
22800 69 6e 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61  in" command is a
22810 75 74 6f 6d 61 74 69 63 20 6e 6f 77 2e 20 20 49  utomatic now.  I
22820 74 20 69 73 20 6c 61 72 67 65 6c 79 20 70 6f 69  t is largely poi
22830 6e 74 6c 65 73 73 2e 20 20 49 74 0a 20 20 2a 2a  ntless.  It.  **
22840 20 72 65 74 61 69 6e 65 64 20 70 75 72 65 6c 79   retained purely
22850 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63   for backwards c
22860 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 2a 2f 0a  ompatibility */.
22870 20 20 69 66 28 20 63 3d 3d 27 65 27 20 26 26 20    if( c=='e' && 
22880 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
22890 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20 6e 29 3d  , "explain", n)=
228a0 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 76 61  =0 ){.    int va
228b0 6c 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 6e  l = 1;.    if( n
228c0 41 72 67 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg>=2 ){.      
228d0 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67  if( strcmp(azArg
228e0 5b 31 5d 2c 22 61 75 74 6f 22 29 3d 3d 30 20 29  [1],"auto")==0 )
228f0 7b 0a 20 20 20 20 20 20 20 20 76 61 6c 20 3d 20  {.        val = 
22900 39 39 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  99;.      }else{
22910 0a 20 20 20 20 20 20 20 20 76 61 6c 20 3d 20 20  .        val =  
22920 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
22930 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  rg[1]);.      }.
22940 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 76 61      }.    if( va
22950 6c 3d 3d 31 20 26 26 20 70 2d 3e 6d 6f 64 65 21  l==1 && p->mode!
22960 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 29 7b  =MODE_Explain ){
22970 0a 20 20 20 20 20 20 70 2d 3e 6e 6f 72 6d 61 6c  .      p->normal
22980 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a  Mode = p->mode;.
22990 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
229a0 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20  MODE_Explain;.  
229b0 20 20 20 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61      p->autoExpla
229c0 69 6e 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  in = 0;.    }els
229d0 65 20 69 66 28 20 76 61 6c 3d 3d 30 20 29 7b 0a  e if( val==0 ){.
229e0 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6d 6f 64        if( p->mod
229f0 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20  e==MODE_Explain 
22a00 29 20 70 2d 3e 6d 6f 64 65 20 3d 20 70 2d 3e 6e  ) p->mode = p->n
22a10 6f 72 6d 61 6c 4d 6f 64 65 3b 0a 20 20 20 20 20  ormalMode;.     
22a20 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20   p->autoExplain 
22a30 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 0;.    }else i
22a40 66 28 20 76 61 6c 3d 3d 39 39 20 29 7b 0a 20 20  f( val==99 ){.  
22a50 20 20 20 20 69 66 28 20 70 2d 3e 6d 6f 64 65 3d      if( p->mode=
22a60 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 29 20  =MODE_Explain ) 
22a70 70 2d 3e 6d 6f 64 65 20 3d 20 70 2d 3e 6e 6f 72  p->mode = p->nor
22a80 6d 61 6c 4d 6f 64 65 3b 0a 20 20 20 20 20 20 70  malMode;.      p
22a90 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20  ->autoExplain = 
22aa0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
22ab0 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65 27 20 26  ..  if( c=='e' &
22ac0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
22ad0 30 5d 2c 20 22 65 78 70 65 72 74 22 2c 20 6e 29  0], "expert", n)
22ae0 3d 3d 30 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f  ==0 ){.    open_
22af0 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 65 78  db(p, 0);.    ex
22b00 70 65 72 74 44 6f 74 43 6f 6d 6d 61 6e 64 28 70  pertDotCommand(p
22b10 2c 20 61 7a 41 72 67 2c 20 6e 41 72 67 29 3b 0a  , azArg, nArg);.
22b20 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
22b30 3d 3d 27 66 27 20 26 26 20 73 74 72 6e 63 6d 70  =='f' && strncmp
22b40 28 61 7a 41 72 67 5b 30 5d 2c 20 22 66 75 6c 6c  (azArg[0], "full
22b50 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d 30 20 29  schema", n)==0 )
22b60 7b 0a 20 20 20 20 53 68 65 6c 6c 53 74 61 74 65  {.    ShellState
22b70 20 64 61 74 61 3b 0a 20 20 20 20 63 68 61 72 20   data;.    char 
22b80 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  *zErrMsg = 0;.  
22b90 20 20 69 6e 74 20 64 6f 53 74 61 74 73 20 3d 20    int doStats = 
22ba0 30 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 64  0;.    memcpy(&d
22bb0 61 74 61 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64  ata, p, sizeof(d
22bc0 61 74 61 29 29 3b 0a 20 20 20 20 64 61 74 61 2e  ata));.    data.
22bd0 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a  showHeader = 0;.
22be0 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d      data.cMode =
22bf0 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44   data.mode = MOD
22c00 45 5f 53 65 6d 69 3b 0a 20 20 20 20 69 66 28 20  E_Semi;.    if( 
22c10 6e 41 72 67 3d 3d 32 20 26 26 20 6f 70 74 69 6f  nArg==2 && optio
22c20 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b 31 5d 2c  nMatch(azArg[1],
22c30 20 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20 20   "indent") ){.  
22c40 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d      data.cMode =
22c50 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44   data.mode = MOD
22c60 45 5f 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20  E_Pretty;.      
22c70 6e 41 72 67 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  nArg = 1;.    }.
22c80 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 31 20      if( nArg!=1 
22c90 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
22ca0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
22cb0 67 65 3a 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20  ge: .fullschema 
22cc0 3f 2d 2d 69 6e 64 65 6e 74 3f 5c 6e 22 29 3b 0a  ?--indent?\n");.
22cd0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
22ce0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
22cf0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
22d00 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  }.    open_db(p,
22d10 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   0);.    rc = sq
22d20 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
22d30 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
22d40 20 73 71 6c 20 46 52 4f 4d 22 0a 20 20 20 20 20   sql FROM".     
22d50 20 20 22 20 20 28 53 45 4c 45 43 54 20 73 71 6c    "  (SELECT sql
22d60 20 73 71 6c 2c 20 74 79 70 65 20 74 79 70 65 2c   sql, type type,
22d70 20 74 62 6c 5f 6e 61 6d 65 20 74 62 6c 5f 6e 61   tbl_name tbl_na
22d80 6d 65 2c 20 6e 61 6d 65 20 6e 61 6d 65 2c 20 72  me, name name, r
22d90 6f 77 69 64 20 78 22 0a 20 20 20 20 20 20 20 22  owid x".       "
22da0 20 20 20 20 20 46 52 4f 4d 20 73 71 6c 69 74 65       FROM sqlite
22db0 5f 6d 61 73 74 65 72 20 55 4e 49 4f 4e 20 41 4c  _master UNION AL
22dc0 4c 22 0a 20 20 20 20 20 20 20 22 20 20 20 53 45  L".       "   SE
22dd0 4c 45 43 54 20 73 71 6c 2c 20 74 79 70 65 2c 20  LECT sql, type, 
22de0 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20  tbl_name, name, 
22df0 72 6f 77 69 64 20 46 52 4f 4d 20 73 71 6c 69 74  rowid FROM sqlit
22e00 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 22  e_temp_master) "
22e10 0a 20 20 20 20 20 20 20 22 57 48 45 52 45 20 74  .       "WHERE t
22e20 79 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20  ype!='meta' AND 
22e30 73 71 6c 20 4e 4f 54 4e 55 4c 4c 20 41 4e 44 20  sql NOTNULL AND 
22e40 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73  name NOT LIKE 's
22e50 71 6c 69 74 65 5f 25 27 20 22 0a 20 20 20 20 20  qlite_%' ".     
22e60 20 20 22 4f 52 44 45 52 20 42 59 20 72 6f 77 69    "ORDER BY rowi
22e70 64 22 2c 0a 20 20 20 20 20 20 20 63 61 6c 6c 62  d",.       callb
22e80 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72  ack, &data, &zEr
22e90 72 4d 73 67 0a 20 20 20 20 29 3b 0a 20 20 20 20  rMsg.    );.    
22ea0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
22eb0 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  K ){.      sqlit
22ec0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
22ed0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
22ee0 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
22ef0 3e 64 62 2c 0a 20 20 20 20 20 20 20 20 20 20 20  >db,.           
22f00 20 20 20 20 22 53 45 4c 45 43 54 20 72 6f 77 69      "SELECT rowi
22f10 64 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  d FROM sqlite_ma
22f20 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20  ster".          
22f30 20 20 20 20 20 22 20 57 48 45 52 45 20 6e 61 6d       " WHERE nam
22f40 65 20 47 4c 4f 42 20 27 73 71 6c 69 74 65 5f 73  e GLOB 'sqlite_s
22f50 74 61 74 5b 31 33 34 5d 27 22 2c 0a 20 20 20 20  tat[134]'",.    
22f60 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26             -1, &
22f70 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20  pStmt, 0);.     
22f80 20 64 6f 53 74 61 74 73 20 3d 20 73 71 6c 69 74   doStats = sqlit
22f90 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d  e3_step(pStmt)==
22fa0 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 20 20  SQLITE_ROW;.    
22fb0 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
22fc0 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 7d  ze(pStmt);.    }
22fd0 0a 20 20 20 20 69 66 28 20 64 6f 53 74 61 74 73  .    if( doStats
22fe0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77  ==0 ){.      raw
22ff0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
23000 22 2f 2a 20 4e 6f 20 53 54 41 54 20 74 61 62 6c  "/* No STAT tabl
23010 65 73 20 61 76 61 69 6c 61 62 6c 65 20 2a 2f 5c  es available */\
23020 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  n");.    }else{.
23030 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
23040 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a  (p->out, "ANALYZ
23050 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  E sqlite_master;
23060 5c 6e 22 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  \n");.      sqli
23070 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
23080 22 53 45 4c 45 43 54 20 27 41 4e 41 4c 59 5a 45  "SELECT 'ANALYZE
23090 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 27 22   sqlite_master'"
230a0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
230b0 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26       callback, &
230c0 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b  data, &zErrMsg);
230d0 0a 20 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64  .      data.cMod
230e0 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20  e = data.mode = 
230f0 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20  MODE_Insert;.   
23100 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62     data.zDestTab
23110 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61  le = "sqlite_sta
23120 74 31 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c  t1";.      shell
23130 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45  _exec(p->db, "SE
23140 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
23150 74 65 5f 73 74 61 74 31 22 2c 0a 20 20 20 20 20  te_stat1",.     
23160 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65 6c              shel
23170 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  l_callback, &dat
23180 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  a,&zErrMsg);.   
23190 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62     data.zDestTab
231a0 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61  le = "sqlite_sta
231b0 74 33 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c  t3";.      shell
231c0 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45  _exec(p->db, "SE
231d0 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
231e0 74 65 5f 73 74 61 74 33 22 2c 0a 20 20 20 20 20  te_stat3",.     
231f0 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65 6c              shel
23200 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  l_callback, &dat
23210 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  a,&zErrMsg);.   
23220 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62     data.zDestTab
23230 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61  le = "sqlite_sta
23240 74 34 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c  t4";.      shell
23250 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45  _exec(p->db, "SE
23260 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
23270 74 65 5f 73 74 61 74 34 22 2c 0a 20 20 20 20 20  te_stat4",.     
23280 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65 6c              shel
23290 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  l_callback, &dat
232a0 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  a, &zErrMsg);.  
232b0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
232c0 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20  ->out, "ANALYZE 
232d0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e  sqlite_master;\n
232e0 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ");.    }.  }els
232f0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 68 27 20  e..  if( c=='h' 
23300 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
23310 5b 30 5d 2c 20 22 68 65 61 64 65 72 73 22 2c 20  [0], "headers", 
23320 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
23330 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
23340 20 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20    p->showHeader 
23350 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61  = booleanValue(a
23360 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
23370 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
23380 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
23390 73 61 67 65 3a 20 2e 68 65 61 64 65 72 73 20 6f  sage: .headers o
233a0 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20  n|off\n");.     
233b0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
233c0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
233d0 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='h' && strncmp(
233e0 61 7a 41 72 67 5b 30 5d 2c 20 22 68 65 6c 70 22  azArg[0], "help"
233f0 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75  , n)==0 ){.    u
23400 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
23410 74 2c 20 22 25 73 22 2c 20 7a 48 65 6c 70 29 3b  t, "%s", zHelp);
23420 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
23430 63 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d  c=='i' && strncm
23440 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d 70  p(azArg[0], "imp
23450 6f 72 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ort", n)==0 ){. 
23460 20 20 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 3b     char *zTable;
23470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23480 2a 20 49 6e 73 65 72 74 20 64 61 74 61 20 69 6e  * Insert data in
23490 74 6f 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  to this table */
234a0 0a 20 20 20 20 63 68 61 72 20 2a 7a 46 69 6c 65  .    char *zFile
234b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
234c0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 66 69 6c 65   /* Name of file
234d0 20 74 6f 20 65 78 74 72 61 20 63 6f 6e 74 65 6e   to extra conten
234e0 74 20 66 72 6f 6d 20 2a 2f 0a 20 20 20 20 73 71  t from */.    sq
234f0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
23500 74 20 3d 20 4e 55 4c 4c 3b 20 2f 2a 20 41 20 73  t = NULL; /* A s
23510 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20 20  tatement */.    
23520 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  int nCol;       
23530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
23540 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
23550 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   in the table */
23560 0a 20 20 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  .    int nByte; 
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23580 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
23590 74 65 73 20 69 6e 20 61 6e 20 53 51 4c 20 73 74  tes in an SQL st
235a0 72 69 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ring */.    int 
235b0 69 2c 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20  i, j;           
235c0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
235d0 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20  counters */.    
235e0 69 6e 74 20 6e 65 65 64 43 6f 6d 6d 69 74 3b 20  int needCommit; 
235f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23600 72 75 65 20 74 6f 20 43 4f 4d 4d 49 54 20 6f 72  rue to COMMIT or
23610 20 52 4f 4c 4c 42 41 43 4b 20 61 74 20 65 6e 64   ROLLBACK at end
23620 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 53 65 70   */.    int nSep
23630 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23640 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
23650 20 62 79 74 65 73 20 69 6e 20 70 2d 3e 63 6f 6c   bytes in p->col
23660 53 65 70 61 72 61 74 6f 72 5b 5d 20 2a 2f 0a 20  Separator[] */. 
23670 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20     char *zSql;  
23680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23690 2a 20 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  * An SQL stateme
236a0 6e 74 20 2a 2f 0a 20 20 20 20 49 6d 70 6f 72 74  nt */.    Import
236b0 43 74 78 20 73 43 74 78 3b 20 20 20 20 20 20 20  Ctx sCtx;       
236c0 20 20 20 20 20 20 2f 2a 20 52 65 61 64 65 72 20        /* Reader 
236d0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 63  context */.    c
236e0 68 61 72 20 2a 28 53 51 4c 49 54 45 5f 43 44 45  har *(SQLITE_CDE
236f0 43 4c 20 2a 78 52 65 61 64 29 28 49 6d 70 6f 72  CL *xRead)(Impor
23700 74 43 74 78 2a 29 3b 20 2f 2a 20 46 75 6e 63 20  tCtx*); /* Func 
23710 74 6f 20 72 65 61 64 20 6f 6e 65 20 76 61 6c 75  to read one valu
23720 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 28 53 51  e */.    int (SQ
23730 4c 49 54 45 5f 43 44 45 43 4c 20 2a 78 43 6c 6f  LITE_CDECL *xClo
23740 73 65 72 29 28 46 49 4c 45 2a 29 3b 20 20 20 20  ser)(FILE*);    
23750 20 20 2f 2a 20 46 75 6e 63 20 74 6f 20 63 6c 6f    /* Func to clo
23760 73 65 20 66 69 6c 65 20 2a 2f 0a 0a 20 20 20 20  se file */..    
23770 69 66 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20  if( nArg!=3 ){. 
23780 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
23790 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
237a0 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42  .import FILE TAB
237b0 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20 20 67 6f  LE\n");.      go
237c0 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
237d0 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  exit;.    }.    
237e0 7a 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d  zFile = azArg[1]
237f0 3b 0a 20 20 20 20 7a 54 61 62 6c 65 20 3d 20 61  ;.    zTable = a
23800 7a 41 72 67 5b 32 5d 3b 0a 20 20 20 20 73 65 65  zArg[2];.    see
23810 6e 49 6e 74 65 72 72 75 70 74 20 3d 20 30 3b 0a  nInterrupt = 0;.
23820 20 20 20 20 6d 65 6d 73 65 74 28 26 73 43 74 78      memset(&sCtx
23830 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 74 78  , 0, sizeof(sCtx
23840 29 29 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28  ));.    open_db(
23850 70 2c 20 30 29 3b 0a 20 20 20 20 6e 53 65 70 20  p, 0);.    nSep 
23860 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 63 6f  = strlen30(p->co
23870 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  lSeparator);.   
23880 20 69 66 28 20 6e 53 65 70 3d 3d 30 20 29 7b 0a   if( nSep==0 ){.
23890 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
238a0 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20 20 20  (stderr,.       
238b0 20 20 20 20 20 20 20 20 20 20 22 45 72 72 6f 72            "Error
238c0 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 63 6f 6c 75 6d  : non-null colum
238d0 6e 20 73 65 70 61 72 61 74 6f 72 20 72 65 71 75  n separator requ
238e0 69 72 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c  ired for import\
238f0 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
23900 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  n 1;.    }.    i
23910 66 28 20 6e 53 65 70 3e 31 20 29 7b 0a 20 20 20  f( nSep>1 ){.   
23920 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
23930 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 75  derr, "Error: mu
23940 6c 74 69 2d 63 68 61 72 61 63 74 65 72 20 63 6f  lti-character co
23950 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 73 20  lumn separators 
23960 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20 20  not allowed".   
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23980 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72 74 5c     " for import\
23990 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
239a0 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  n 1;.    }.    n
239b0 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70  Sep = strlen30(p
239c0 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
239d0 0a 20 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30  .    if( nSep==0
239e0 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
239f0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
23a00 72 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 72 6f  ror: non-null ro
23a10 77 20 73 65 70 61 72 61 74 6f 72 20 72 65 71 75  w separator requ
23a20 69 72 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c  ired for import\
23a30 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
23a40 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  n 1;.    }.    i
23a50 66 28 20 6e 53 65 70 3d 3d 32 20 26 26 20 70 2d  f( nSep==2 && p-
23a60 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 43 73 76 20  >mode==MODE_Csv 
23a70 26 26 20 73 74 72 63 6d 70 28 70 2d 3e 72 6f 77  && strcmp(p->row
23a80 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43  Separator, SEP_C
23a90 72 4c 66 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  rLf)==0 ){.     
23aa0 20 2f 2a 20 57 68 65 6e 20 69 6d 70 6f 72 74 69   /* When importi
23ab0 6e 67 20 43 53 56 20 28 6f 6e 6c 79 29 2c 20 69  ng CSV (only), i
23ac0 66 20 74 68 65 20 72 6f 77 20 73 65 70 61 72 61  f the row separa
23ad0 74 6f 72 20 69 73 20 73 65 74 20 74 6f 20 74 68  tor is set to th
23ae0 65 0a 20 20 20 20 20 20 2a 2a 20 64 65 66 61 75  e.      ** defau
23af0 6c 74 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65  lt output row se
23b00 70 61 72 61 74 6f 72 2c 20 63 68 61 6e 67 65 20  parator, change 
23b10 69 74 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  it to the defaul
23b20 74 20 69 6e 70 75 74 0a 20 20 20 20 20 20 2a 2a  t input.      **
23b30 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20   row separator. 
23b40 20 54 68 69 73 20 61 76 6f 69 64 73 20 68 61 76   This avoids hav
23b50 69 6e 67 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  ing to maintain 
23b60 64 69 66 66 65 72 65 6e 74 20 69 6e 70 75 74 0a  different input.
23b70 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 6f 75 74        ** and out
23b80 70 75 74 20 72 6f 77 20 73 65 70 61 72 61 74 6f  put row separato
23b90 72 73 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  rs. */.      sql
23ba0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
23bb0 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72  zeof(p->rowSepar
23bc0 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70  ator), p->rowSep
23bd0 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29  arator, SEP_Row)
23be0 3b 0a 20 20 20 20 20 20 6e 53 65 70 20 3d 20 73  ;.      nSep = s
23bf0 74 72 6c 65 6e 33 30 28 70 2d 3e 72 6f 77 53 65  trlen30(p->rowSe
23c00 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 7d 0a  parator);.    }.
23c10 20 20 20 20 69 66 28 20 6e 53 65 70 3e 31 20 29      if( nSep>1 )
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 6d 75 6c 74 69 2d 63 68 61 72 61 63 74  r: multi-charact
23c50 65 72 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72  er row separator
23c60 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20  s not allowed". 
23c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c80 20 20 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72       " for impor
23c90 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  t\n");.      ret
23ca0 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
23cb0 20 73 43 74 78 2e 7a 46 69 6c 65 20 3d 20 7a 46   sCtx.zFile = zF
23cc0 69 6c 65 3b 0a 20 20 20 20 73 43 74 78 2e 6e 4c  ile;.    sCtx.nL
23cd0 69 6e 65 20 3d 20 31 3b 0a 20 20 20 20 69 66 28  ine = 1;.    if(
23ce0 20 73 43 74 78 2e 7a 46 69 6c 65 5b 30 5d 3d 3d   sCtx.zFile[0]==
23cf0 27 7c 27 20 29 7b 0a 23 69 66 64 65 66 20 53 51  '|' ){.#ifdef SQ
23d00 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a  LITE_OMIT_POPEN.
23d10 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
23d20 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
23d30 20 70 69 70 65 73 20 61 72 65 20 6e 6f 74 20 73   pipes are not s
23d40 75 70 70 6f 72 74 65 64 20 69 6e 20 74 68 69 73  upported in this
23d50 20 4f 53 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72   OS\n");.      r
23d60 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20  eturn 1;.#else. 
23d70 20 20 20 20 20 73 43 74 78 2e 69 6e 20 3d 20 70       sCtx.in = p
23d80 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65 2b  open(sCtx.zFile+
23d90 31 2c 20 22 72 22 29 3b 0a 20 20 20 20 20 20 73  1, "r");.      s
23da0 43 74 78 2e 7a 46 69 6c 65 20 3d 20 22 3c 70 69  Ctx.zFile = "<pi
23db0 70 65 3e 22 3b 0a 20 20 20 20 20 20 78 43 6c 6f  pe>";.      xClo
23dc0 73 65 72 20 3d 20 70 63 6c 6f 73 65 3b 0a 23 65  ser = pclose;.#e
23dd0 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ndif.    }else{.
23de0 20 20 20 20 20 20 73 43 74 78 2e 69 6e 20 3d 20        sCtx.in = 
23df0 66 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65  fopen(sCtx.zFile
23e00 2c 20 22 72 62 22 29 3b 0a 20 20 20 20 20 20 78  , "rb");.      x
23e10 43 6c 6f 73 65 72 20 3d 20 66 63 6c 6f 73 65 3b  Closer = fclose;
23e20 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
23e30 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 41 73 63  ->mode==MODE_Asc
23e40 69 69 20 29 7b 0a 20 20 20 20 20 20 78 52 65 61  ii ){.      xRea
23e50 64 20 3d 20 61 73 63 69 69 5f 72 65 61 64 5f 6f  d = ascii_read_o
23e60 6e 65 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d 65  ne_field;.    }e
23e70 6c 73 65 7b 0a 20 20 20 20 20 20 78 52 65 61 64  lse{.      xRead
23e80 20 3d 20 63 73 76 5f 72 65 61 64 5f 6f 6e 65 5f   = csv_read_one_
23e90 66 69 65 6c 64 3b 0a 20 20 20 20 7d 0a 20 20 20  field;.    }.   
23ea0 20 69 66 28 20 73 43 74 78 2e 69 6e 3d 3d 30 20   if( sCtx.in==0 
23eb0 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
23ec0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
23ed0 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
23ee0 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c   \"%s\"\n", zFil
23ef0 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  e);.      return
23f00 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 43   1;.    }.    sC
23f10 74 78 2e 63 43 6f 6c 53 65 70 20 3d 20 70 2d 3e  tx.cColSep = p->
23f20 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 3b  colSeparator[0];
23f30 0a 20 20 20 20 73 43 74 78 2e 63 52 6f 77 53 65  .    sCtx.cRowSe
23f40 70 20 3d 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  p = p->rowSepara
23f50 74 6f 72 5b 30 5d 3b 0a 20 20 20 20 7a 53 71 6c  tor[0];.    zSql
23f60 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
23f70 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  tf("SELECT * FRO
23f80 4d 20 25 73 22 2c 20 7a 54 61 62 6c 65 29 3b 0a  M %s", zTable);.
23f90 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20      if( zSql==0 
23fa0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
23fb0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
23fc0 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  or: out of memor
23fd0 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 78 43 6c  y\n");.      xCl
23fe0 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
23ff0 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
24000 20 20 20 7d 0a 20 20 20 20 6e 42 79 74 65 20 3d     }.    nByte =
24010 20 73 74 72 6c 65 6e 33 30 28 7a 53 71 6c 29 3b   strlen30(zSql);
24020 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
24030 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e  3_prepare_v2(p->
24040 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70  db, zSql, -1, &p
24050 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6d  Stmt, 0);.    im
24060 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72  port_append_char
24070 28 26 73 43 74 78 2c 20 30 29 3b 20 20 20 20 2f  (&sCtx, 0);    /
24080 2a 20 54 6f 20 65 6e 73 75 72 65 20 73 43 74 78  * To ensure sCtx
24090 2e 7a 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  .z is allocated 
240a0 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 20 26 26  */.    if( rc &&
240b0 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62   sqlite3_strglob
240c0 28 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a  ("no such table:
240d0 20 2a 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72   *", sqlite3_err
240e0 6d 73 67 28 70 2d 3e 64 62 29 29 3d 3d 30 20 29  msg(p->db))==0 )
240f0 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43  {.      char *zC
24100 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f  reate = sqlite3_
24110 6d 70 72 69 6e 74 66 28 22 43 52 45 41 54 45 20  mprintf("CREATE 
24120 54 41 42 4c 45 20 25 73 22 2c 20 7a 54 61 62 6c  TABLE %s", zTabl
24130 65 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 63  e);.      char c
24140 53 65 70 20 3d 20 27 28 27 3b 0a 20 20 20 20 20  Sep = '(';.     
24150 20 77 68 69 6c 65 28 20 78 52 65 61 64 28 26 73   while( xRead(&s
24160 43 74 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Ctx) ){.        
24170 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65  zCreate = sqlite
24180 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 25 63 5c  3_mprintf("%z%c\
24190 6e 20 20 5c 22 25 77 5c 22 20 54 45 58 54 22 2c  n  \"%w\" TEXT",
241a0 20 7a 43 72 65 61 74 65 2c 20 63 53 65 70 2c 20   zCreate, cSep, 
241b0 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20  sCtx.z);.       
241c0 20 63 53 65 70 20 3d 20 27 2c 27 3b 0a 20 20 20   cSep = ',';.   
241d0 20 20 20 20 20 69 66 28 20 73 43 74 78 2e 63 54       if( sCtx.cT
241e0 65 72 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65  erm!=sCtx.cColSe
241f0 70 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  p ) break;.     
24200 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 53 65   }.      if( cSe
24210 70 3d 3d 27 28 27 20 29 7b 0a 20 20 20 20 20 20  p=='(' ){.      
24220 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
24230 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20 20  Create);.       
24240 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43   sqlite3_free(sC
24250 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 78  tx.z);.        x
24260 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b  Closer(sCtx.in);
24270 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
24280 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25 73 3a  intf(stderr,"%s:
24290 20 65 6d 70 74 79 20 66 69 6c 65 5c 6e 22 2c 20   empty file\n", 
242a0 73 43 74 78 2e 7a 46 69 6c 65 29 3b 0a 20 20 20  sCtx.zFile);.   
242b0 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
242c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 43 72       }.      zCr
242d0 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d  eate = sqlite3_m
242e0 70 72 69 6e 74 66 28 22 25 7a 5c 6e 29 22 2c 20  printf("%z\n)", 
242f0 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20  zCreate);.      
24300 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
24310 63 28 70 2d 3e 64 62 2c 20 7a 43 72 65 61 74 65  c(p->db, zCreate
24320 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
24330 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
24340 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20 69  Create);.      i
24350 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
24360 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
24370 65 72 72 2c 20 22 43 52 45 41 54 45 20 54 41 42  err, "CREATE TAB
24380 4c 45 20 25 73 28 2e 2e 2e 29 20 66 61 69 6c 65  LE %s(...) faile
24390 64 3a 20 25 73 5c 6e 22 2c 20 7a 54 61 62 6c 65  d: %s\n", zTable
243a0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
243b0 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
243c0 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20  (p->db));.      
243d0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73    sqlite3_free(s
243e0 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20  Ctx.z);.        
243f0 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29  xCloser(sCtx.in)
24400 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
24410 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
24420 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
24430 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
24440 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d   zSql, -1, &pStm
24450 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  t, 0);.    }.   
24460 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
24470 71 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  ql);.    if( rc 
24480 29 7b 0a 20 20 20 20 20 20 69 66 20 28 70 53 74  ){.      if (pSt
24490 6d 74 29 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  mt) sqlite3_fina
244a0 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
244b0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
244c0 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 25 73  tderr,"Error: %s
244d0 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  \n", sqlite3_err
244e0 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  msg(p->db));.   
244f0 20 20 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e     xCloser(sCtx.
24500 69 6e 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  in);.      retur
24510 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  n 1;.    }.    n
24520 43 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  Col = sqlite3_co
24530 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74  lumn_count(pStmt
24540 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  );.    sqlite3_f
24550 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
24560 20 20 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20      pStmt = 0;. 
24570 20 20 20 69 66 28 20 6e 43 6f 6c 3d 3d 30 20 29     if( nCol==0 )
24580 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a 20 6e 6f   return 0; /* no
24590 20 63 6f 6c 75 6d 6e 73 2c 20 6e 6f 20 65 72 72   columns, no err
245a0 6f 72 20 2a 2f 0a 20 20 20 20 7a 53 71 6c 20 3d  or */.    zSql =
245b0 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36   sqlite3_malloc6
245c0 34 28 20 6e 42 79 74 65 2a 32 20 2b 20 32 30 20  4( nByte*2 + 20 
245d0 2b 20 6e 43 6f 6c 2a 32 20 29 3b 0a 20 20 20 20  + nCol*2 );.    
245e0 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
245f0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
24600 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
24610 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22  out of memory\n"
24620 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72  );.      xCloser
24630 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20  (sCtx.in);.     
24640 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
24650 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
24660 72 69 6e 74 66 28 6e 42 79 74 65 2b 32 30 2c 20  rintf(nByte+20, 
24670 7a 53 71 6c 2c 20 22 49 4e 53 45 52 54 20 49 4e  zSql, "INSERT IN
24680 54 4f 20 5c 22 25 77 5c 22 20 56 41 4c 55 45 53  TO \"%w\" VALUES
24690 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  (?", zTable);.  
246a0 20 20 6a 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a    j = strlen30(z
246b0 53 71 6c 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Sql);.    for(i=
246c0 31 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b  1; i<nCol; i++){
246d0 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d  .      zSql[j++]
246e0 20 3d 20 27 2c 27 3b 0a 20 20 20 20 20 20 7a 53   = ',';.      zS
246f0 71 6c 5b 6a 2b 2b 5d 20 3d 20 27 3f 27 3b 0a 20  ql[j++] = '?';. 
24700 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 5b 6a 2b     }.    zSql[j+
24710 2b 5d 20 3d 20 27 29 27 3b 0a 20 20 20 20 7a 53  +] = ')';.    zS
24720 71 6c 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 72  ql[j] = 0;.    r
24730 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
24740 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53  are_v2(p->db, zS
24750 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  ql, -1, &pStmt, 
24760 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
24770 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20  free(zSql);.    
24780 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
24790 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
247a0 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e  rr, "Error: %s\n
247b0 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
247c0 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
247d0 20 69 66 20 28 70 53 74 6d 74 29 20 73 71 6c 69   if (pStmt) sqli
247e0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
247f0 6d 74 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73  mt);.      xClos
24800 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
24810 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
24820 20 7d 0a 20 20 20 20 6e 65 65 64 43 6f 6d 6d 69   }.    needCommi
24830 74 20 3d 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  t = sqlite3_get_
24840 61 75 74 6f 63 6f 6d 6d 69 74 28 70 2d 3e 64 62  autocommit(p->db
24850 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 65 64 43  );.    if( needC
24860 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74 65 33 5f  ommit ) sqlite3_
24870 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 42 45 47  exec(p->db, "BEG
24880 49 4e 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  IN", 0, 0, 0);. 
24890 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 69 6e 74     do{.      int
248a0 20 73 74 61 72 74 4c 69 6e 65 20 3d 20 73 43 74   startLine = sCt
248b0 78 2e 6e 4c 69 6e 65 3b 0a 20 20 20 20 20 20 66  x.nLine;.      f
248c0 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20  or(i=0; i<nCol; 
248d0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68  i++){.        ch
248e0 61 72 20 2a 7a 20 3d 20 78 52 65 61 64 28 26 73  ar *z = xRead(&s
248f0 43 74 78 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a  Ctx);.        /*
24900 0a 20 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20  .        ** Did 
24910 77 65 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d  we reach end-of-
24920 66 69 6c 65 20 62 65 66 6f 72 65 20 66 69 6e 64  file before find
24930 69 6e 67 20 61 6e 79 20 63 6f 6c 75 6d 6e 73 3f  ing any columns?
24940 0a 20 20 20 20 20 20 20 20 2a 2a 20 49 66 20 73  .        ** If s
24950 6f 2c 20 73 74 6f 70 20 69 6e 73 74 65 61 64 20  o, stop instead 
24960 6f 66 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 20  of NULL filling 
24970 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f  the remaining co
24980 6c 75 6d 6e 73 2e 0a 20 20 20 20 20 20 20 20 2a  lumns..        *
24990 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 3d  /.        if( z=
249a0 3d 30 20 26 26 20 69 3d 3d 30 20 29 20 62 72 65  =0 && i==0 ) bre
249b0 61 6b 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20  ak;.        /*. 
249c0 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20 77 65         ** Did we
249d0 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d 66 69   reach end-of-fi
249e0 6c 65 20 4f 52 20 65 6e 64 2d 6f 66 2d 6c 69 6e  le OR end-of-lin
249f0 65 20 62 65 66 6f 72 65 20 66 69 6e 64 69 6e 67  e before finding
24a00 20 61 6e 79 0a 20 20 20 20 20 20 20 20 2a 2a 20   any.        ** 
24a10 63 6f 6c 75 6d 6e 73 20 69 6e 20 41 53 43 49 49  columns in ASCII
24a20 20 6d 6f 64 65 3f 20 20 49 66 20 73 6f 2c 20 73   mode?  If so, s
24a30 74 6f 70 20 69 6e 73 74 65 61 64 20 6f 66 20 4e  top instead of N
24a40 55 4c 4c 20 66 69 6c 6c 69 6e 67 0a 20 20 20 20  ULL filling.    
24a50 20 20 20 20 2a 2a 20 74 68 65 20 72 65 6d 61 69      ** the remai
24a60 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 20 20  ning columns..  
24a70 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
24a80 20 69 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f   if( p->mode==MO
24a90 44 45 5f 41 73 63 69 69 20 26 26 20 28 7a 3d 3d  DE_Ascii && (z==
24aa0 30 20 7c 7c 20 7a 5b 30 5d 3d 3d 30 29 20 26 26  0 || z[0]==0) &&
24ab0 20 69 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20   i==0 ) break;. 
24ac0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62         sqlite3_b
24ad0 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  ind_text(pStmt, 
24ae0 69 2b 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  i+1, z, -1, SQLI
24af0 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
24b00 20 20 20 20 20 20 20 69 66 28 20 69 3c 6e 43 6f         if( i<nCo
24b10 6c 2d 31 20 26 26 20 73 43 74 78 2e 63 54 65 72  l-1 && sCtx.cTer
24b20 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20  m!=sCtx.cColSep 
24b30 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
24b40 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
24b50 20 22 25 73 3a 25 64 3a 20 65 78 70 65 63 74 65   "%s:%d: expecte
24b60 64 20 25 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74  d %d columns but
24b70 20 66 6f 75 6e 64 20 25 64 20 2d 20 22 0a 20 20   found %d - ".  
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b90 20 20 20 20 20 20 20 20 22 66 69 6c 6c 69 6e 67          "filling
24ba0 20 74 68 65 20 72 65 73 74 20 77 69 74 68 20 4e   the rest with N
24bb0 55 4c 4c 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  ULL\n",.        
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bd0 20 20 73 43 74 78 2e 7a 46 69 6c 65 2c 20 73 74    sCtx.zFile, st
24be0 61 72 74 4c 69 6e 65 2c 20 6e 43 6f 6c 2c 20 69  artLine, nCol, i
24bf0 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  +1);.          i
24c00 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 20   += 2;.         
24c10 20 77 68 69 6c 65 28 20 69 3c 3d 6e 43 6f 6c 20   while( i<=nCol 
24c20 29 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ){ sqlite3_bind_
24c30 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b 20  null(pStmt, i); 
24c40 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d  i++; }.        }
24c50 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
24c60 66 28 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73  f( sCtx.cTerm==s
24c70 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 7b 0a 20  Ctx.cColSep ){. 
24c80 20 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20         do{.     
24c90 20 20 20 20 20 78 52 65 61 64 28 26 73 43 74 78       xRead(&sCtx
24ca0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 2b 2b  );.          i++
24cb0 3b 0a 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65  ;.        }while
24cc0 28 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73 43  ( sCtx.cTerm==sC
24cd0 74 78 2e 63 43 6f 6c 53 65 70 20 29 3b 0a 20 20  tx.cColSep );.  
24ce0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
24cf0 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64  f(stderr, "%s:%d
24d00 3a 20 65 78 70 65 63 74 65 64 20 25 64 20 63 6f  : expected %d co
24d10 6c 75 6d 6e 73 20 62 75 74 20 66 6f 75 6e 64 20  lumns but found 
24d20 25 64 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20  %d - ".         
24d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24d40 65 78 74 72 61 73 20 69 67 6e 6f 72 65 64 5c 6e  extras ignored\n
24d50 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
24d60 20 20 20 20 20 20 20 20 20 20 20 73 43 74 78 2e             sCtx.
24d70 7a 46 69 6c 65 2c 20 73 74 61 72 74 4c 69 6e 65  zFile, startLine
24d80 2c 20 6e 43 6f 6c 2c 20 69 29 3b 0a 20 20 20 20  , nCol, i);.    
24d90 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 69 3e    }.      if( i>
24da0 3d 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20 20  =nCol ){.       
24db0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
24dc0 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 72 63  tmt);.        rc
24dd0 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74   = sqlite3_reset
24de0 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20  (pStmt);.       
24df0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
24e00 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
24e10 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
24e20 72 72 2c 20 22 25 73 3a 25 64 3a 20 49 4e 53 45  rr, "%s:%d: INSE
24e30 52 54 20 66 61 69 6c 65 64 3a 20 25 73 5c 6e 22  RT failed: %s\n"
24e40 2c 20 73 43 74 78 2e 7a 46 69 6c 65 2c 0a 20 20  , sCtx.zFile,.  
24e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e60 20 20 20 20 73 74 61 72 74 4c 69 6e 65 2c 20 73      startLine, s
24e70 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d  qlite3_errmsg(p-
24e80 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20 20 7d  >db));.        }
24e90 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 77 68  .      }.    }wh
24ea0 69 6c 65 28 20 73 43 74 78 2e 63 54 65 72 6d 21  ile( sCtx.cTerm!
24eb0 3d 45 4f 46 20 29 3b 0a 0a 20 20 20 20 78 43 6c  =EOF );..    xCl
24ec0 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
24ed0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
24ee0 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 73 71 6c  sCtx.z);.    sql
24ef0 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
24f00 74 6d 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65  tmt);.    if( ne
24f10 65 64 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74  edCommit ) sqlit
24f20 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22  e3_exec(p->db, "
24f30 43 4f 4d 4d 49 54 22 2c 20 30 2c 20 30 2c 20 30  COMMIT", 0, 0, 0
24f40 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e  );.  }else..#ifn
24f50 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
24f60 54 41 42 4c 45 0a 20 20 69 66 28 20 63 3d 3d 27  TABLE.  if( c=='
24f70 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  i' && strncmp(az
24f80 41 72 67 5b 30 5d 2c 20 22 69 6d 70 6f 73 74 65  Arg[0], "imposte
24f90 72 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  r", n)==0 ){.   
24fa0 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20   char *zSql;.   
24fb0 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 69 73 74 20   char *zCollist 
24fc0 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
24fd0 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
24fe0 20 20 69 6e 74 20 74 6e 75 6d 20 3d 20 30 3b 0a    int tnum = 0;.
24ff0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69      int i;.    i
25000 66 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20  f( nArg!=3 ){.  
25010 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
25020 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
25030 2e 69 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20  .imposter INDEX 
25040 49 4d 50 4f 53 54 45 52 5c 6e 22 29 3b 0a 20 20  IMPOSTER\n");.  
25050 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
25060 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
25070 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
25080 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
25090 29 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  );.    zSql = sq
250a0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53  lite3_mprintf("S
250b0 45 4c 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46  ELECT rootpage F
250c0 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
250d0 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r".             
250e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
250f0 57 48 45 52 45 20 6e 61 6d 65 3d 27 25 71 27 20  WHERE name='%q' 
25100 41 4e 44 20 74 79 70 65 3d 27 69 6e 64 65 78 27  AND type='index'
25110 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ", azArg[1]);.  
25120 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72    sqlite3_prepar
25130 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  e_v2(p->db, zSql
25140 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
25150 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
25160 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66  ee(zSql);.    if
25170 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ( sqlite3_step(p
25180 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
25190 57 20 29 7b 0a 20 20 20 20 20 20 74 6e 75 6d 20  W ){.      tnum 
251a0 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
251b0 5f 69 6e 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a  _int(pStmt, 0);.
251c0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
251d0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
251e0 29 3b 0a 20 20 20 20 69 66 28 20 74 6e 75 6d 3d  );.    if( tnum=
251f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  =0 ){.      utf8
25200 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
25210 22 6e 6f 20 73 75 63 68 20 69 6e 64 65 78 3a 20  "no such index: 
25220 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67  \"%s\"\n", azArg
25230 5b 31 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  [1]);.      rc =
25240 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
25250 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
25260 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c  ;.    }.    zSql
25270 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
25280 74 66 28 22 50 52 41 47 4d 41 20 69 6e 64 65 78  tf("PRAGMA index
25290 5f 78 69 6e 66 6f 3d 27 25 71 27 22 2c 20 61 7a  _xinfo='%q'", az
252a0 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 72 63 20  Arg[1]);.    rc 
252b0 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
252c0 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  e_v2(p->db, zSql
252d0 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
252e0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
252f0 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 20  ee(zSql);.    i 
25300 3d 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  = 0;.    while( 
25310 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
25320 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  mt)==SQLITE_ROW 
25330 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4c  ){.      char zL
25340 61 62 65 6c 5b 32 30 5d 3b 0a 20 20 20 20 20 20  abel[20];.      
25350 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c  const char *zCol
25360 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
25370 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
25380 65 78 74 28 70 53 74 6d 74 2c 32 29 3b 0a 20 20  ext(pStmt,2);.  
25390 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 69      i++;.      i
253a0 66 28 20 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20  f( zCol==0 ){.  
253b0 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
253c0 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74  3_column_int(pSt
253d0 6d 74 2c 31 29 3d 3d 2d 31 20 29 7b 0a 20 20 20  mt,1)==-1 ){.   
253e0 20 20 20 20 20 20 20 7a 43 6f 6c 20 3d 20 22 5f         zCol = "_
253f0 52 4f 57 49 44 5f 22 3b 0a 20 20 20 20 20 20 20  ROWID_";.       
25400 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
25410 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
25420 74 66 28 73 69 7a 65 6f 66 28 7a 4c 61 62 65 6c  tf(sizeof(zLabel
25430 29 2c 7a 4c 61 62 65 6c 2c 22 65 78 70 72 25 64  ),zLabel,"expr%d
25440 22 2c 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ",i);.          
25450 7a 43 6f 6c 20 3d 20 7a 4c 61 62 65 6c 3b 0a 20  zCol = zLabel;. 
25460 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
25470 0a 20 20 20 20 20 20 69 66 28 20 7a 43 6f 6c 6c  .      if( zColl
25480 69 73 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ist==0 ){.      
25490 20 20 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71 6c    zCollist = sql
254a0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22  ite3_mprintf("\"
254b0 25 77 5c 22 22 2c 20 7a 43 6f 6c 29 3b 0a 20 20  %w\"", zCol);.  
254c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
254d0 20 20 20 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71     zCollist = sq
254e0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
254f0 7a 2c 5c 22 25 77 5c 22 22 2c 20 7a 43 6f 6c 6c  z,\"%w\"", zColl
25500 69 73 74 2c 20 7a 43 6f 6c 29 3b 0a 20 20 20 20  ist, zCol);.    
25510 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
25520 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
25530 53 74 6d 74 29 3b 0a 20 20 20 20 7a 53 71 6c 20  Stmt);.    zSql 
25540 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
25550 66 28 0a 20 20 20 20 20 20 20 20 20 20 22 43 52  f(.          "CR
25560 45 41 54 45 20 54 41 42 4c 45 20 5c 22 25 77 5c  EATE TABLE \"%w\
25570 22 28 25 73 2c 50 52 49 4d 41 52 59 20 4b 45 59  "(%s,PRIMARY KEY
25580 28 25 73 29 29 57 49 54 48 4f 55 54 20 52 4f 57  (%s))WITHOUT ROW
25590 49 44 22 2c 0a 20 20 20 20 20 20 20 20 20 20 61  ID",.          a
255a0 7a 41 72 67 5b 32 5d 2c 20 7a 43 6f 6c 6c 69 73  zArg[2], zCollis
255b0 74 2c 20 7a 43 6f 6c 6c 69 73 74 29 3b 0a 20 20  t, zCollist);.  
255c0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
255d0 43 6f 6c 6c 69 73 74 29 3b 0a 20 20 20 20 72 63  Collist);.    rc
255e0 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f   = sqlite3_test_
255f0 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
25600 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52  ESTCTRL_IMPOSTER
25610 2c 20 70 2d 3e 64 62 2c 20 22 6d 61 69 6e 22 2c  , p->db, "main",
25620 20 31 2c 20 74 6e 75 6d 29 3b 0a 20 20 20 20 69   1, tnum);.    i
25630 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
25640 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
25650 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
25660 62 2c 20 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 30  b, zSql, 0, 0, 0
25670 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
25680 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
25690 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d  LITE_TESTCTRL_IM
256a0 50 4f 53 54 45 52 2c 20 70 2d 3e 64 62 2c 20 22  POSTER, p->db, "
256b0 6d 61 69 6e 22 2c 20 30 2c 20 30 29 3b 0a 20 20  main", 0, 0);.  
256c0 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
256d0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
256e0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
256f0 20 69 6e 20 5b 25 73 5d 3a 20 25 73 5c 6e 22 2c   in [%s]: %s\n",
25700 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 5f 65   zSql, sqlite3_e
25710 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20  rrmsg(p->db));. 
25720 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
25730 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
25740 73 74 64 6f 75 74 2c 20 22 25 73 3b 5c 6e 22 2c  stdout, "%s;\n",
25750 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20   zSql);.        
25760 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 6f 75  raw_printf(stdou
25770 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 22 57  t,.           "W
25780 41 52 4e 49 4e 47 3a 20 77 72 69 74 69 6e 67 20  ARNING: writing 
25790 74 6f 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74  to an imposter t
257a0 61 62 6c 65 20 77 69 6c 6c 20 63 6f 72 72 75 70  able will corrup
257b0 74 20 74 68 65 20 69 6e 64 65 78 21 5c 6e 22 0a  t the index!\n".
257c0 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20          );.     
257d0 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
257e0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
257f0 74 64 65 72 72 2c 20 22 53 51 4c 49 54 45 5f 54  tderr, "SQLITE_T
25800 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52  ESTCTRL_IMPOSTER
25810 20 72 65 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20   returns %d\n", 
25820 72 63 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  rc);.      rc = 
25830 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  1;.    }.    sql
25840 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b  ite3_free(zSql);
25850 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20  .  }else.#endif 
25860 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
25870 54 45 5f 4f 4d 49 54 5f 54 45 53 54 5f 43 4f 4e  TE_OMIT_TEST_CON
25880 54 52 4f 4c 29 20 2a 2f 0a 0a 23 69 66 64 65 66  TROL) */..#ifdef
25890 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
258a0 4f 54 52 41 43 45 0a 20 20 69 66 28 20 63 3d 3d  OTRACE.  if( c==
258b0 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'i' && strncmp(a
258c0 7a 41 72 67 5b 30 5d 2c 20 22 69 6f 74 72 61 63  zArg[0], "iotrac
258d0 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  e", n)==0 ){.   
258e0 20 53 51 4c 49 54 45 5f 41 50 49 20 65 78 74 65   SQLITE_API exte
258f0 72 6e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f  rn void (SQLITE_
25900 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f  CDECL *sqlite3Io
25910 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
25920 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 20 20 69 66  r*, ...);.    if
25930 28 20 69 6f 74 72 61 63 65 20 26 26 20 69 6f 74  ( iotrace && iot
25940 72 61 63 65 21 3d 73 74 64 6f 75 74 20 29 20 66  race!=stdout ) f
25950 63 6c 6f 73 65 28 69 6f 74 72 61 63 65 29 3b 0a  close(iotrace);.
25960 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20 30 3b      iotrace = 0;
25970 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20  .    if( nArg<2 
25980 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
25990 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a 20 20 20  IoTrace = 0;.   
259a0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
259b0 70 28 61 7a 41 72 67 5b 31 5d 2c 20 22 2d 22 29  p(azArg[1], "-")
259c0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
259d0 69 74 65 33 49 6f 54 72 61 63 65 20 3d 20 69 6f  ite3IoTrace = io
259e0 74 72 61 63 65 50 72 69 6e 74 66 3b 0a 20 20 20  tracePrintf;.   
259f0 20 20 20 69 6f 74 72 61 63 65 20 3d 20 73 74 64     iotrace = std
25a00 6f 75 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  out;.    }else{.
25a10 20 20 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20        iotrace = 
25a20 66 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20  fopen(azArg[1], 
25a30 22 77 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20  "w");.      if( 
25a40 69 6f 74 72 61 63 65 3d 3d 30 20 29 7b 0a 20 20  iotrace==0 ){.  
25a50 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
25a60 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
25a70 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22  : cannot open \"
25a80 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31  %s\"\n", azArg[1
25a90 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  ]);.        sqli
25aa0 74 65 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a  te3IoTrace = 0;.
25ab0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
25ac0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
25ad0 20 20 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72       sqlite3IoTr
25ae0 61 63 65 20 3d 20 69 6f 74 72 61 63 65 50 72 69  ace = iotracePri
25af0 6e 74 66 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ntf;.      }.   
25b00 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69   }.  }else.#endi
25b10 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20  f..  if( c=='l' 
25b20 26 26 20 6e 3e 3d 35 20 26 26 20 73 74 72 6e 63  && n>=5 && strnc
25b30 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 69  mp(azArg[0], "li
25b40 6d 69 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  mits", n)==0 ){.
25b50 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
25b60 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
25b70 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69   const char *zLi
25b80 6d 69 74 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61  mitName;   /* Na
25b90 6d 65 20 6f 66 20 61 20 6c 69 6d 69 74 20 2a 2f  me of a limit */
25ba0 0a 20 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69  .       int limi
25bb0 74 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tCode;          
25bc0 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 63 6f 64    /* Integer cod
25bd0 65 20 66 6f 72 20 74 68 61 74 20 6c 69 6d 69 74  e for that limit
25be0 20 2a 2f 0a 20 20 20 20 7d 20 61 4c 69 6d 69 74   */.    } aLimit
25bf0 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22  [] = {.      { "
25c00 6c 65 6e 67 74 68 22 2c 20 20 20 20 20 20 20 20  length",        
25c10 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
25c20 49 4d 49 54 5f 4c 45 4e 47 54 48 20 20 20 20 20  IMIT_LENGTH     
25c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25c40 2c 0a 20 20 20 20 20 20 7b 20 22 73 71 6c 5f 6c  ,.      { "sql_l
25c50 65 6e 67 74 68 22 2c 20 20 20 20 20 20 20 20 20  ength",         
25c60 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
25c70 53 51 4c 5f 4c 45 4e 47 54 48 20 20 20 20 20 20  SQL_LENGTH      
25c80 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
25c90 20 20 20 7b 20 22 63 6f 6c 75 6d 6e 22 2c 20 20     { "column",  
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
25cb0 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d  LITE_LIMIT_COLUM
25cc0 4e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  N               
25cd0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
25ce0 22 65 78 70 72 5f 64 65 70 74 68 22 2c 20 20 20  "expr_depth",   
25cf0 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
25d00 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48  LIMIT_EXPR_DEPTH
25d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 63 6f 6d 70  },.      { "comp
25d30 6f 75 6e 64 5f 73 65 6c 65 63 74 22 2c 20 20 20  ound_select",   
25d40 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54      SQLITE_LIMIT
25d50 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54  _COMPOUND_SELECT
25d60 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
25d70 20 20 20 20 7b 20 22 76 64 62 65 5f 6f 70 22 2c      { "vdbe_op",
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
25d90 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 44 42 45  QLITE_LIMIT_VDBE
25da0 5f 4f 50 20 20 20 20 20 20 20 20 20 20 20 20 20  _OP             
25db0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
25dc0 20 22 66 75 6e 63 74 69 6f 6e 5f 61 72 67 22 2c   "function_arg",
25dd0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
25de0 5f 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f  _LIMIT_FUNCTION_
25df0 41 52 47 20 20 20 20 20 20 20 20 20 20 20 20 20  ARG             
25e00 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 61 74 74   },.      { "att
25e10 61 63 68 65 64 22 2c 20 20 20 20 20 20 20 20 20  ached",         
25e20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49       SQLITE_LIMI
25e30 54 5f 41 54 54 41 43 48 45 44 20 20 20 20 20 20  T_ATTACHED      
25e40 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
25e50 20 20 20 20 20 7b 20 22 6c 69 6b 65 5f 70 61 74       { "like_pat
25e60 74 65 72 6e 5f 6c 65 6e 67 74 68 22 2c 20 20 20  tern_length",   
25e70 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b  SQLITE_LIMIT_LIK
25e80 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48  E_PATTERN_LENGTH
25e90 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
25ea0 7b 20 22 76 61 72 69 61 62 6c 65 5f 6e 75 6d 62  { "variable_numb
25eb0 65 72 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54  er",       SQLIT
25ec0 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45  E_LIMIT_VARIABLE
25ed0 5f 4e 55 4d 42 45 52 20 20 20 20 20 20 20 20 20  _NUMBER         
25ee0 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 74 72    },.      { "tr
25ef0 69 67 67 65 72 5f 64 65 70 74 68 22 2c 20 20 20  igger_depth",   
25f00 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d        SQLITE_LIM
25f10 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
25f20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
25f30 20 20 20 20 20 20 7b 20 22 77 6f 72 6b 65 72 5f        { "worker_
25f40 74 68 72 65 61 64 73 22 2c 20 20 20 20 20 20 20  threads",       
25f50 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f   SQLITE_LIMIT_WO
25f60 52 4b 45 52 5f 54 48 52 45 41 44 53 20 20 20 20  RKER_THREADS    
25f70 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7d          },.    }
25f80 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6e 32 3b  ;.    int i, n2;
25f90 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
25fa0 30 29 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67  0);.    if( nArg
25fb0 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 66 6f 72  ==1 ){.      for
25fc0 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
25fd0 65 28 61 4c 69 6d 69 74 29 3b 20 69 2b 2b 29 7b  e(aLimit); i++){
25fe0 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
25ff0 22 25 32 30 73 20 25 64 5c 6e 22 2c 20 61 4c 69  "%20s %d\n", aLi
26000 6d 69 74 5b 69 5d 2e 7a 4c 69 6d 69 74 4e 61 6d  mit[i].zLimitNam
26010 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
26020 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28    sqlite3_limit(
26030 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 5d  p->db, aLimit[i]
26040 2e 6c 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29 29  .limitCode, -1))
26050 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
26060 6c 73 65 20 69 66 28 20 6e 41 72 67 3e 33 20 29  lse if( nArg>3 )
26070 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
26080 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
26090 65 3a 20 2e 6c 69 6d 69 74 20 4e 41 4d 45 20 3f  e: .limit NAME ?
260a0 4e 45 57 2d 56 41 4c 55 45 3f 5c 6e 22 29 3b 0a  NEW-VALUE?\n");.
260b0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
260c0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
260d0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
260e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
260f0 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a 20 20   iLimit = -1;.  
26100 20 20 20 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33      n2 = strlen3
26110 30 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  0(azArg[1]);.   
26120 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72     for(i=0; i<Ar
26130 72 61 79 53 69 7a 65 28 61 4c 69 6d 69 74 29 3b  raySize(aLimit);
26140 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
26150 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  f( sqlite3_strni
26160 63 6d 70 28 61 4c 69 6d 69 74 5b 69 5d 2e 7a 4c  cmp(aLimit[i].zL
26170 69 6d 69 74 4e 61 6d 65 2c 20 61 7a 41 72 67 5b  imitName, azArg[
26180 31 5d 2c 20 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  1], n2)==0 ){.  
26190 20 20 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d          if( iLim
261a0 69 74 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20  it<0 ){.        
261b0 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 69 3b 0a      iLimit = i;.
261c0 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
261d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66  .            utf
261e0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
261f0 20 22 61 6d 62 69 67 75 6f 75 73 20 6c 69 6d 69   "ambiguous limi
26200 74 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a  t: \"%s\"\n", az
26210 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[1]);.       
26220 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
26230 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65           goto me
26240 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
26250 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
26260 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
26270 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c       if( iLimit<
26280 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  0 ){.        utf
26290 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
262a0 20 22 75 6e 6b 6e 6f 77 6e 20 6c 69 6d 69 74 3a   "unknown limit:
262b0 20 5c 22 25 73 5c 22 5c 6e 22 0a 20 20 20 20 20   \"%s\"\n".     
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262d0 20 20 20 22 65 6e 74 65 72 20 5c 22 2e 6c 69 6d     "enter \".lim
262e0 69 74 73 5c 22 20 77 69 74 68 20 6e 6f 20 61 72  its\" with no ar
262f0 67 75 6d 65 6e 74 73 20 66 6f 72 20 61 20 6c 69  guments for a li
26300 73 74 2e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  st.\n",.        
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26320 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
26330 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
26340 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
26350 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
26360 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 6e 41    }.      if( nA
26370 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20  rg==3 ){.       
26380 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70   sqlite3_limit(p
26390 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69  ->db, aLimit[iLi
263a0 6d 69 74 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 0a  mit].limitCode,.
263b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263c0 20 20 20 20 20 20 28 69 6e 74 29 69 6e 74 65 67        (int)integ
263d0 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 32 5d  erValue(azArg[2]
263e0 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
263f0 20 20 70 72 69 6e 74 66 28 22 25 32 30 73 20 25    printf("%20s %
26400 64 5c 6e 22 2c 20 61 4c 69 6d 69 74 5b 69 4c 69  d\n", aLimit[iLi
26410 6d 69 74 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c  mit].zLimitName,
26420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71  .             sq
26430 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d 3e 64  lite3_limit(p->d
26440 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69 74  b, aLimit[iLimit
26450 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29  ].limitCode, -1)
26460 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
26470 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26  ..  if( c=='l' &
26480 26 20 6e 3e 32 20 26 26 20 73 74 72 6e 63 6d 70  & n>2 && strncmp
26490 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 69 6e 74  (azArg[0], "lint
264a0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
264b0 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
264c0 20 20 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61 6e     lintDotComman
264d0 64 28 70 2c 20 61 7a 41 72 67 2c 20 6e 41 72 67  d(p, azArg, nArg
264e0 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e  );.  }else..#ifn
264f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26500 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
26510 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26 20 73   if( c=='l' && s
26520 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
26530 20 22 6c 6f 61 64 22 2c 20 6e 29 3d 3d 30 20 29   "load", n)==0 )
26540 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
26550 20 2a 7a 46 69 6c 65 2c 20 2a 7a 50 72 6f 63 3b   *zFile, *zProc;
26560 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  .    char *zErrM
26570 73 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  sg = 0;.    if( 
26580 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20  nArg<2 ){.      
26590 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
265a0 72 2c 20 22 55 73 61 67 65 3a 20 2e 6c 6f 61 64  r, "Usage: .load
265b0 20 46 49 4c 45 20 3f 45 4e 54 52 59 50 4f 49 4e   FILE ?ENTRYPOIN
265c0 54 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  T?\n");.      rc
265d0 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f   = 1;.      goto
265e0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
265f0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 46  it;.    }.    zF
26600 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a  ile = azArg[1];.
26610 20 20 20 20 7a 50 72 6f 63 20 3d 20 6e 41 72 67      zProc = nArg
26620 3e 3d 33 20 3f 20 61 7a 41 72 67 5b 32 5d 20 3a  >=3 ? azArg[2] :
26630 20 30 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   0;.    open_db(
26640 70 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20  p, 0);.    rc = 
26650 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
26660 65 6e 73 69 6f 6e 28 70 2d 3e 64 62 2c 20 7a 46  ension(p->db, zF
26670 69 6c 65 2c 20 7a 50 72 6f 63 2c 20 26 7a 45 72  ile, zProc, &zEr
26680 72 4d 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72  rMsg);.    if( r
26690 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
266a0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
266b0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
266c0 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  : %s\n", zErrMsg
266d0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
266e0 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  _free(zErrMsg);.
266f0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
26700 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
26710 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27  if..  if( c=='l'
26720 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
26730 67 5b 30 5d 2c 20 22 6c 6f 67 22 2c 20 6e 29 3d  g[0], "log", n)=
26740 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
26750 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72  rg!=2 ){.      r
26760 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
26770 2c 20 22 55 73 61 67 65 3a 20 2e 6c 6f 67 20 46  , "Usage: .log F
26780 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b 0a 20 20 20  ILENAME\n");.   
26790 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
267a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73  else{.      cons
267b0 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 20 3d 20  t char *zFile = 
267c0 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20  azArg[1];.      
267d0 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
267e0 65 28 70 2d 3e 70 4c 6f 67 29 3b 0a 20 20 20 20  e(p->pLog);.    
267f0 20 20 70 2d 3e 70 4c 6f 67 20 3d 20 6f 75 74 70    p->pLog = outp
26800 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46 69  ut_file_open(zFi
26810 6c 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  le);.    }.  }el
26820 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6d 27  se..  if( c=='m'
26830 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
26840 67 5b 30 5d 2c 20 22 6d 6f 64 65 22 2c 20 6e 29  g[0], "mode", n)
26850 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ==0 ){.    const
26860 20 63 68 61 72 20 2a 7a 4d 6f 64 65 20 3d 20 6e   char *zMode = n
26870 41 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31  Arg>=2 ? azArg[1
26880 5d 20 3a 20 22 22 3b 0a 20 20 20 20 69 6e 74 20  ] : "";.    int 
26890 6e 32 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e  n2 = (int)strlen
268a0 28 7a 4d 6f 64 65 29 3b 0a 20 20 20 20 69 6e 74  (zMode);.    int
268b0 20 63 32 20 3d 20 7a 4d 6f 64 65 5b 30 5d 3b 0a   c2 = zMode[0];.
268c0 20 20 20 20 69 66 28 20 63 32 3d 3d 27 6c 27 20      if( c2=='l' 
268d0 26 26 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63  && n2>2 && strnc
268e0 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 6e  mp(azArg[1],"lin
268f0 65 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  es",n2)==0 ){.  
26900 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
26910 44 45 5f 4c 69 6e 65 3b 0a 20 20 20 20 20 20 73  DE_Line;.      s
26920 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
26930 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70  sizeof(p->rowSep
26940 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53  arator), p->rowS
26950 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f  eparator, SEP_Ro
26960 77 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  w);.    }else if
26970 28 20 63 32 3d 3d 27 63 27 20 26 26 20 73 74 72  ( c2=='c' && str
26980 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63  ncmp(azArg[1],"c
26990 6f 6c 75 6d 6e 73 22 2c 6e 32 29 3d 3d 30 20 29  olumns",n2)==0 )
269a0 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20  {.      p->mode 
269b0 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20  = MODE_Column;. 
269c0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
269d0 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
269e0 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70  rowSeparator), p
269f0 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20  ->rowSeparator, 
26a00 53 45 50 5f 52 6f 77 29 3b 0a 20 20 20 20 7d 65  SEP_Row);.    }e
26a10 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 6c 27 20  lse if( c2=='l' 
26a20 26 26 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63  && n2>2 && strnc
26a30 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 73  mp(azArg[1],"lis
26a40 74 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20  t",n2)==0 ){.   
26a50 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44     p->mode = MOD
26a60 45 5f 4c 69 73 74 3b 0a 20 20 20 20 20 20 73 71  E_List;.      sq
26a70 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
26a80 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61  izeof(p->colSepa
26a90 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65  rator), p->colSe
26aa0 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6c  parator, SEP_Col
26ab0 75 6d 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  umn);.      sqli
26ac0 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
26ad0 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61  eof(p->rowSepara
26ae0 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61  tor), p->rowSepa
26af0 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b  rator, SEP_Row);
26b00 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
26b10 32 3d 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d  2=='h' && strncm
26b20 70 28 61 7a 41 72 67 5b 31 5d 2c 22 68 74 6d 6c  p(azArg[1],"html
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 48 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c 73 65  _Html;.    }else
26b60 20 69 66 28 20 63 32 3d 3d 27 74 27 20 26 26 20   if( c2=='t' && 
26b70 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d  strncmp(azArg[1]
26b80 2c 22 74 63 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b  ,"tcl",n2)==0 ){
26b90 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d  .      p->mode =
26ba0 20 4d 4f 44 45 5f 54 63 6c 3b 0a 20 20 20 20 20   MODE_Tcl;.     
26bb0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
26bc0 66 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53  f(sizeof(p->colS
26bd0 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f  eparator), p->co
26be0 6c 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f  lSeparator, SEP_
26bf0 53 70 61 63 65 29 3b 0a 20 20 20 20 20 20 73 71  Space);.      sq
26c00 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
26c10 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61  izeof(p->rowSepa
26c20 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65  rator), p->rowSe
26c30 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77  parator, SEP_Row
26c40 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
26c50 20 63 32 3d 3d 27 63 27 20 26 26 20 73 74 72 6e   c2=='c' && strn
26c60 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63 73  cmp(azArg[1],"cs
26c70 76 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20  v",n2)==0 ){.   
26c80 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44     p->mode = MOD
26c90 45 5f 43 73 76 3b 0a 20 20 20 20 20 20 73 71 6c  E_Csv;.      sql
26ca0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
26cb0 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72  zeof(p->colSepar
26cc0 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70  ator), p->colSep
26cd0 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6d 6d  arator, SEP_Comm
26ce0 61 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  a);.      sqlite
26cf0 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
26d00 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  f(p->rowSeparato
26d10 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  r), p->rowSepara
26d20 74 6f 72 2c 20 53 45 50 5f 43 72 4c 66 29 3b 0a  tor, SEP_CrLf);.
26d30 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32      }else if( c2
26d40 3d 3d 27 74 27 20 26 26 20 73 74 72 6e 63 6d 70  =='t' && strncmp
26d50 28 61 7a 41 72 67 5b 31 5d 2c 22 74 61 62 73 22  (azArg[1],"tabs"
26d60 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ,n2)==0 ){.     
26d70 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f   p->mode = MODE_
26d80 4c 69 73 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  List;.      sqli
26d90 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
26da0 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  eof(p->colSepara
26db0 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  tor), p->colSepa
26dc0 72 61 74 6f 72 2c 20 53 45 50 5f 54 61 62 29 3b  rator, SEP_Tab);
26dd0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
26de0 32 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d  2=='i' && strncm
26df0 70 28 61 7a 41 72 67 5b 31 5d 2c 22 69 6e 73 65  p(azArg[1],"inse
26e00 72 74 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  rt",n2)==0 ){.  
26e10 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
26e20 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 20  DE_Insert;.     
26e30 20 73 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28   set_table_name(
26e40 70 2c 20 6e 41 72 67 3e 3d 33 20 3f 20 61 7a 41  p, nArg>=3 ? azA
26e50 72 67 5b 32 5d 20 3a 20 22 74 61 62 6c 65 22 29  rg[2] : "table")
26e60 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
26e70 63 32 3d 3d 27 71 27 20 26 26 20 73 74 72 6e 63  c2=='q' && strnc
26e80 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 71 75 6f  mp(azArg[1],"quo
26e90 74 65 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  te",n2)==0 ){.  
26ea0 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
26eb0 44 45 5f 51 75 6f 74 65 3b 0a 20 20 20 20 7d 65  DE_Quote;.    }e
26ec0 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 61 27 20  lse if( c2=='a' 
26ed0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
26ee0 5b 31 5d 2c 22 61 73 63 69 69 22 2c 6e 32 29 3d  [1],"ascii",n2)=
26ef0 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  =0 ){.      p->m
26f00 6f 64 65 20 3d 20 4d 4f 44 45 5f 41 73 63 69 69  ode = MODE_Ascii
26f10 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
26f20 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
26f30 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29  p->colSeparator)
26f40 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
26f50 72 2c 20 53 45 50 5f 55 6e 69 74 29 3b 0a 20 20  r, SEP_Unit);.  
26f60 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
26f70 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72  intf(sizeof(p->r
26f80 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d  owSeparator), p-
26f90 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53  >rowSeparator, S
26fa0 45 50 5f 52 65 63 6f 72 64 29 3b 0a 20 20 20 20  EP_Record);.    
26fb0 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d  }else if( nArg==
26fc0 31 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  1 ){.      raw_p
26fd0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 63  rintf(p->out, "c
26fe0 75 72 72 65 6e 74 20 6f 75 74 70 75 74 20 6d 6f  urrent output mo
26ff0 64 65 3a 20 25 73 5c 6e 22 2c 20 6d 6f 64 65 44  de: %s\n", modeD
27000 65 73 63 72 5b 70 2d 3e 6d 6f 64 65 5d 29 3b 0a  escr[p->mode]);.
27010 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
27020 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
27030 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 6f 64 65  rr, "Error: mode
27040 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f   should be one o
27050 66 3a 20 22 0a 20 20 20 20 20 20 20 20 20 22 61  f: ".         "a
27060 73 63 69 69 20 63 6f 6c 75 6d 6e 20 63 73 76 20  scii column csv 
27070 68 74 6d 6c 20 69 6e 73 65 72 74 20 6c 69 6e 65  html insert line
27080 20 6c 69 73 74 20 71 75 6f 74 65 20 74 61 62 73   list quote tabs
27090 20 74 63 6c 5c 6e 22 29 3b 0a 20 20 20 20 20 20   tcl\n");.      
270a0 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rc = 1;.    }.  
270b0 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e    p->cMode = p->
270c0 6d 6f 64 65 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  mode;.  }else.. 
270d0 20 69 66 28 20 63 3d 3d 27 6e 27 20 26 26 20 73   if( c=='n' && s
270e0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
270f0 20 22 6e 75 6c 6c 76 61 6c 75 65 22 2c 20 6e 29   "nullvalue", n)
27100 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
27110 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
27120 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
27130 28 73 69 7a 65 6f 66 28 70 2d 3e 6e 75 6c 6c 56  (sizeof(p->nullV
27140 61 6c 75 65 29 2c 20 70 2d 3e 6e 75 6c 6c 56 61  alue), p->nullVa
27150 6c 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  lue,.           
27160 20 20 20 20 20 20 20 20 20 20 20 20 22 25 2e 2a              "%.*
27170 73 22 2c 20 28 69 6e 74 29 41 72 72 61 79 53 69  s", (int)ArraySi
27180 7a 65 28 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29  ze(p->nullValue)
27190 2d 31 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  -1, azArg[1]);. 
271a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
271b0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
271c0 72 2c 20 22 55 73 61 67 65 3a 20 2e 6e 75 6c 6c  r, "Usage: .null
271d0 76 61 6c 75 65 20 53 54 52 49 4e 47 5c 6e 22 29  value STRING\n")
271e0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
271f0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
27200 20 69 66 28 20 63 3d 3d 27 6f 27 20 26 26 20 73   if( c=='o' && s
27210 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
27220 20 22 6f 70 65 6e 22 2c 20 6e 29 3d 3d 30 20 26   "open", n)==0 &
27230 26 20 6e 3e 3d 32 20 29 7b 0a 20 20 20 20 63 68  & n>=2 ){.    ch
27240 61 72 20 2a 7a 4e 65 77 46 69 6c 65 6e 61 6d 65  ar *zNewFilename
27250 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  ;  /* Name of th
27260 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
27270 74 6f 20 6f 70 65 6e 20 2a 2f 0a 20 20 20 20 69  to open */.    i
27280 6e 74 20 69 4e 61 6d 65 20 3d 20 31 3b 20 20 20  nt iName = 1;   
27290 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
272a0 61 7a 41 72 67 5b 5d 20 6f 66 20 74 68 65 20 66  azArg[] of the f
272b0 69 6c 65 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  ilename */.    i
272c0 6e 74 20 6e 65 77 46 6c 61 67 20 3d 20 30 3b 20  nt newFlag = 0; 
272d0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64      /* True to d
272e0 65 6c 65 74 65 20 66 69 6c 65 20 62 65 66 6f 72  elete file befor
272f0 65 20 6f 70 65 6e 69 6e 67 20 2a 2f 0a 20 20 20  e opening */.   
27300 20 2f 2a 20 43 6c 6f 73 65 20 74 68 65 20 65 78   /* Close the ex
27310 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
27320 2a 2f 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 63  */.    session_c
27330 6c 6f 73 65 5f 61 6c 6c 28 70 29 3b 0a 20 20 20  lose_all(p);.   
27340 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70   sqlite3_close(p
27350 2d 3e 64 62 29 3b 0a 20 20 20 20 70 2d 3e 64 62  ->db);.    p->db
27360 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 7a 44 62   = 0;.    p->zDb
27370 46 69 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20  Filename = 0;.  
27380 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70    sqlite3_free(p
27390 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 29 3b  ->zFreeOnClose);
273a0 0a 20 20 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43  .    p->zFreeOnC
273b0 6c 6f 73 65 20 3d 20 30 3b 0a 20 20 20 20 2f 2a  lose = 0;.    /*
273c0 20 43 68 65 63 6b 20 66 6f 72 20 63 6f 6d 6d 61   Check for comma
273d0 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd-line argument
273e0 73 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 4e 61  s */.    for(iNa
273f0 6d 65 3d 31 3b 20 69 4e 61 6d 65 3c 6e 41 72 67  me=1; iName<nArg
27400 20 26 26 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d   && azArg[iName]
27410 5b 30 5d 3d 3d 27 2d 27 3b 20 69 4e 61 6d 65 2b  [0]=='-'; iName+
27420 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  +){.      const 
27430 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b  char *z = azArg[
27440 69 4e 61 6d 65 5d 3b 0a 20 20 20 20 20 20 69 66  iName];.      if
27450 28 20 6f 70 74 69 6f 6e 4d 61 74 63 68 28 7a 2c  ( optionMatch(z,
27460 22 6e 65 77 22 29 20 29 7b 0a 20 20 20 20 20 20  "new") ){.      
27470 20 20 6e 65 77 46 6c 61 67 20 3d 20 31 3b 0a 20    newFlag = 1;. 
27480 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a       }else if( z
27490 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
274a0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
274b0 73 74 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e  stderr, "unknown
274c0 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20   option: %s\n", 
274d0 7a 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  z);.        rc =
274e0 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   1;.        goto
274f0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
27500 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  it;.      }.    
27510 7d 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 66 69  }.    /* If a fi
27520 6c 65 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  lename is specif
27530 69 65 64 2c 20 74 72 79 20 74 6f 20 6f 70 65 6e  ied, try to open
27540 20 69 74 20 66 69 72 73 74 20 2a 2f 0a 20 20 20   it first */.   
27550 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 20 3d 20   zNewFilename = 
27560 6e 41 72 67 3e 69 4e 61 6d 65 20 3f 20 73 71 6c  nArg>iName ? sql
27570 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
27580 22 2c 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 29  ", azArg[iName])
27590 20 3a 20 30 3b 0a 20 20 20 20 69 66 28 20 7a 4e   : 0;.    if( zN
275a0 65 77 46 69 6c 65 6e 61 6d 65 20 29 7b 0a 20 20  ewFilename ){.  
275b0 20 20 20 20 69 66 28 20 6e 65 77 46 6c 61 67 20      if( newFlag 
275c0 29 20 73 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c  ) shellDeleteFil
275d0 65 28 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 29 3b  e(zNewFilename);
275e0 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c  .      p->zDbFil
275f0 65 6e 61 6d 65 20 3d 20 7a 4e 65 77 46 69 6c 65  ename = zNewFile
27600 6e 61 6d 65 3b 0a 20 20 20 20 20 20 6f 70 65 6e  name;.      open
27610 5f 64 62 28 70 2c 20 31 29 3b 0a 20 20 20 20 20  _db(p, 1);.     
27620 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b   if( p->db==0 ){
27630 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
27640 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
27650 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
27660 20 27 25 73 27 5c 6e 22 2c 20 7a 4e 65 77 46 69   '%s'\n", zNewFi
27670 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  lename);.       
27680 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4e   sqlite3_free(zN
27690 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20  ewFilename);.   
276a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
276b0 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73    p->zFreeOnClos
276c0 65 20 3d 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65  e = zNewFilename
276d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
276e0 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30      if( p->db==0
276f0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 20   ){.      /* As 
27700 61 20 66 61 6c 6c 2d 62 61 63 6b 20 6f 70 65 6e  a fall-back open
27710 20 61 20 54 45 4d 50 20 64 61 74 61 62 61 73 65   a TEMP database
27720 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62   */.      p->zDb
27730 46 69 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20  Filename = 0;.  
27740 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
27750 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
27760 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6f 27 0a 20  ..  if( c=='o'. 
27770 20 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a    && (strncmp(az
27780 41 72 67 5b 30 5d 2c 20 22 6f 75 74 70 75 74 22  Arg[0], "output"
27790 2c 20 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63  , n)==0 || strnc
277a0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 6e  mp(azArg[0], "on
277b0 63 65 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 29 7b  ce", n)==0).  ){
277c0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
277d0 2a 7a 46 69 6c 65 20 3d 20 6e 41 72 67 3e 3d 32  *zFile = nArg>=2
277e0 20 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 73   ? azArg[1] : "s
277f0 74 64 6f 75 74 22 3b 0a 20 20 20 20 69 66 28 20  tdout";.    if( 
27800 6e 41 72 67 3e 32 20 29 7b 0a 20 20 20 20 20 20  nArg>2 ){.      
27810 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
27820 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 25 73 20  rr, "Usage: .%s 
27830 46 49 4c 45 5c 6e 22 2c 20 61 7a 41 72 67 5b 30  FILE\n", azArg[0
27840 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ]);.      rc = 1
27850 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
27860 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
27870 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 3e      }.    if( n>
27880 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  1 && strncmp(azA
27890 72 67 5b 30 5d 2c 20 22 6f 6e 63 65 22 2c 20 6e  rg[0], "once", n
278a0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
278b0 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20  ( nArg<2 ){.    
278c0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
278d0 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
278e0 6f 6e 63 65 20 46 49 4c 45 5c 6e 22 29 3b 0a 20  once FILE\n");. 
278f0 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
27900 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
27910 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
27920 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e       }.      p->
27930 6f 75 74 43 6f 75 6e 74 20 3d 20 32 3b 0a 20 20  outCount = 2;.  
27940 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
27950 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d 20 30 3b 0a  ->outCount = 0;.
27960 20 20 20 20 7d 0a 20 20 20 20 6f 75 74 70 75 74      }.    output
27970 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69  _reset(p);.    i
27980 66 28 20 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c 27  f( zFile[0]=='|'
27990 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   ){.#ifdef SQLIT
279a0 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20 20  E_OMIT_POPEN.   
279b0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
279c0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 70 69  derr, "Error: pi
279d0 70 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70  pes are not supp
279e0 6f 72 74 65 64 20 69 6e 20 74 68 69 73 20 4f 53  orted in this OS
279f0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
27a00 20 31 3b 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74   1;.      p->out
27a10 20 3d 20 73 74 64 6f 75 74 3b 0a 23 65 6c 73 65   = stdout;.#else
27a20 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20  .      p->out = 
27a30 70 6f 70 65 6e 28 7a 46 69 6c 65 20 2b 20 31 2c  popen(zFile + 1,
27a40 20 22 77 22 29 3b 0a 20 20 20 20 20 20 69 66 28   "w");.      if(
27a50 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20   p->out==0 ){.  
27a60 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
27a70 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
27a80 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 70 69 70   cannot open pip
27a90 65 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69  e \"%s\"\n", zFi
27aa0 6c 65 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20  le + 1);.       
27ab0 20 70 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74   p->out = stdout
27ac0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
27ad0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
27ae0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73         sqlite3_s
27af0 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
27b00 2d 3e 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f  ->outfile), p->o
27b10 75 74 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46  utfile, "%s", zF
27b20 69 6c 65 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65  ile);.      }.#e
27b30 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ndif.    }else{.
27b40 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 6f        p->out = o
27b50 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28  utput_file_open(
27b60 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 69 66  zFile);.      if
27b70 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20  ( p->out==0 ){. 
27b80 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
27b90 70 28 7a 46 69 6c 65 2c 22 6f 66 66 22 29 21 3d  p(zFile,"off")!=
27ba0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  0 ){.          u
27bb0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
27bc0 72 2c 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74  r,"Error: cannot
27bd0 20 77 72 69 74 65 20 74 6f 20 5c 22 25 73 5c 22   write to \"%s\"
27be0 5c 6e 22 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20  \n", zFile);.   
27bf0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
27c00 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a  ->out = stdout;.
27c10 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
27c20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
27c30 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73         sqlite3_s
27c40 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
27c50 2d 3e 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f  ->outfile), p->o
27c60 75 74 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46  utfile, "%s", zF
27c70 69 6c 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ile);.      }.  
27c80 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
27c90 66 28 20 63 3d 3d 27 70 27 20 26 26 20 6e 3e 3d  f( c=='p' && n>=
27ca0 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  3 && strncmp(azA
27cb0 72 67 5b 30 5d 2c 20 22 70 72 69 6e 74 22 2c 20  rg[0], "print", 
27cc0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  n)==0 ){.    int
27cd0 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b   i;.    for(i=1;
27ce0 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
27cf0 20 20 20 20 20 69 66 28 20 69 3e 31 20 29 20 72       if( i>1 ) r
27d00 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
27d10 2c 20 22 20 22 29 3b 0a 20 20 20 20 20 20 75 74  , " ");.      ut
27d20 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
27d30 2c 20 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d  , "%s", azArg[i]
27d40 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77  );.    }.    raw
27d50 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
27d60 22 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  "\n");.  }else..
27d70 20 20 69 66 28 20 63 3d 3d 27 70 27 20 26 26 20    if( c=='p' && 
27d80 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
27d90 2c 20 22 70 72 6f 6d 70 74 22 2c 20 6e 29 3d 3d  , "prompt", n)==
27da0 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
27db0 67 20 3e 3d 20 32 29 20 7b 0a 20 20 20 20 20 20  g >= 2) {.      
27dc0 73 74 72 6e 63 70 79 28 6d 61 69 6e 50 72 6f 6d  strncpy(mainProm
27dd0 70 74 2c 61 7a 41 72 67 5b 31 5d 2c 28 69 6e 74  pt,azArg[1],(int
27de0 29 41 72 72 61 79 53 69 7a 65 28 6d 61 69 6e 50  )ArraySize(mainP
27df0 72 6f 6d 70 74 29 2d 31 29 3b 0a 20 20 20 20 7d  rompt)-1);.    }
27e00 0a 20 20 20 20 69 66 28 20 6e 41 72 67 20 3e 3d  .    if( nArg >=
27e10 20 33 29 20 7b 0a 20 20 20 20 20 20 73 74 72 6e   3) {.      strn
27e20 63 70 79 28 63 6f 6e 74 69 6e 75 65 50 72 6f 6d  cpy(continueProm
27e30 70 74 2c 61 7a 41 72 67 5b 32 5d 2c 28 69 6e 74  pt,azArg[2],(int
27e40 29 41 72 72 61 79 53 69 7a 65 28 63 6f 6e 74 69  )ArraySize(conti
27e50 6e 75 65 50 72 6f 6d 70 74 29 2d 31 29 3b 0a 20  nuePrompt)-1);. 
27e60 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
27e70 69 66 28 20 63 3d 3d 27 71 27 20 26 26 20 73 74  if( c=='q' && st
27e80 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
27e90 22 71 75 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b  "quit", n)==0 ){
27ea0 0a 20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d  .    rc = 2;.  }
27eb0 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
27ec0 72 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74  r' && n>=3 && st
27ed0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
27ee0 22 72 65 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b  "read", n)==0 ){
27ef0 0a 20 20 20 20 46 49 4c 45 20 2a 61 6c 74 3b 0a  .    FILE *alt;.
27f00 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20      if( nArg!=2 
27f10 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
27f20 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
27f30 67 65 3a 20 2e 72 65 61 64 20 46 49 4c 45 5c 6e  ge: .read FILE\n
27f40 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
27f50 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
27f60 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
27f70 20 20 20 20 7d 0a 20 20 20 20 61 6c 74 20 3d 20      }.    alt = 
27f80 66 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20  fopen(azArg[1], 
27f90 22 72 62 22 29 3b 0a 20 20 20 20 69 66 28 20 61  "rb");.    if( a
27fa0 6c 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  lt==0 ){.      u
27fb0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
27fc0 72 2c 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74  r,"Error: cannot
27fd0 20 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c   open \"%s\"\n",
27fe0 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
27ff0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65    rc = 1;.    }e
28000 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
28010 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28 70 2c  process_input(p,
28020 20 61 6c 74 29 3b 0a 20 20 20 20 20 20 66 63 6c   alt);.      fcl
28030 6f 73 65 28 61 6c 74 29 3b 0a 20 20 20 20 7d 0a  ose(alt);.    }.
28040 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
28050 3d 3d 27 72 27 20 26 26 20 6e 3e 3d 33 20 26 26  =='r' && n>=3 &&
28060 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
28070 5d 2c 20 22 72 65 73 74 6f 72 65 22 2c 20 6e 29  ], "restore", n)
28080 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ==0 ){.    const
28090 20 63 68 61 72 20 2a 7a 53 72 63 46 69 6c 65 3b   char *zSrcFile;
280a0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
280b0 2a 7a 44 62 3b 0a 20 20 20 20 73 71 6c 69 74 65  *zDb;.    sqlite
280c0 33 20 2a 70 53 72 63 3b 0a 20 20 20 20 73 71 6c  3 *pSrc;.    sql
280d0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 70 42 61  ite3_backup *pBa
280e0 63 6b 75 70 3b 0a 20 20 20 20 69 6e 74 20 6e 54  ckup;.    int nT
280f0 69 6d 65 6f 75 74 20 3d 20 30 3b 0a 0a 20 20 20  imeout = 0;..   
28100 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
28110 20 20 20 20 20 20 7a 53 72 63 46 69 6c 65 20 3d        zSrcFile =
28120 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20   azArg[1];.     
28130 20 7a 44 62 20 3d 20 22 6d 61 69 6e 22 3b 0a 20   zDb = "main";. 
28140 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72     }else if( nAr
28150 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 7a 53  g==3 ){.      zS
28160 72 63 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 32  rcFile = azArg[2
28170 5d 3b 0a 20 20 20 20 20 20 7a 44 62 20 3d 20 61  ];.      zDb = a
28180 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 7d 65 6c  zArg[1];.    }el
28190 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  se{.      raw_pr
281a0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
281b0 61 67 65 3a 20 2e 72 65 73 74 6f 72 65 20 3f 44  age: .restore ?D
281c0 42 3f 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20  B? FILE\n");.   
281d0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
281e0 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61   goto meta_comma
281f0 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20  nd_exit;.    }. 
28200 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
28210 6f 70 65 6e 28 7a 53 72 63 46 69 6c 65 2c 20 26  open(zSrcFile, &
28220 70 53 72 63 29 3b 0a 20 20 20 20 69 66 28 20 72  pSrc);.    if( r
28230 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
28240 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
28250 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
28260 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22  : cannot open \"
28270 25 73 5c 22 5c 6e 22 2c 20 7a 53 72 63 46 69 6c  %s\"\n", zSrcFil
28280 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
28290 33 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20  3_close(pSrc);. 
282a0 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
282b0 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62     }.    open_db
282c0 28 70 2c 20 30 29 3b 0a 20 20 20 20 70 42 61 63  (p, 0);.    pBac
282d0 6b 75 70 20 3d 20 73 71 6c 69 74 65 33 5f 62 61  kup = sqlite3_ba
282e0 63 6b 75 70 5f 69 6e 69 74 28 70 2d 3e 64 62 2c  ckup_init(p->db,
282f0 20 7a 44 62 2c 20 70 53 72 63 2c 20 22 6d 61 69   zDb, pSrc, "mai
28300 6e 22 29 3b 0a 20 20 20 20 69 66 28 20 70 42 61  n");.    if( pBa
28310 63 6b 75 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ckup==0 ){.     
28320 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
28330 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c  err, "Error: %s\
28340 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  n", sqlite3_errm
28350 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20  sg(p->db));.    
28360 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28    sqlite3_close(
28370 70 53 72 63 29 3b 0a 20 20 20 20 20 20 72 65 74  pSrc);.      ret
28380 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
28390 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71   while( (rc = sq
283a0 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65  lite3_backup_ste
283b0 70 28 70 42 61 63 6b 75 70 2c 31 30 30 29 29 3d  p(pBackup,100))=
283c0 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20  =SQLITE_OK.     
283d0 20 20 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49       || rc==SQLI
283e0 54 45 5f 42 55 53 59 20 20 29 7b 0a 20 20 20 20  TE_BUSY  ){.    
283f0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
28400 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
28410 20 69 66 28 20 6e 54 69 6d 65 6f 75 74 2b 2b 20   if( nTimeout++ 
28420 3e 3d 20 33 20 29 20 62 72 65 61 6b 3b 0a 20 20  >= 3 ) break;.  
28430 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6c        sqlite3_sl
28440 65 65 70 28 31 30 30 29 3b 0a 20 20 20 20 20 20  eep(100);.      
28450 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
28460 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
28470 68 28 70 42 61 63 6b 75 70 29 3b 0a 20 20 20 20  h(pBackup);.    
28480 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
28490 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ONE ){.      rc 
284a0 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 0;.    }else i
284b0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
284c0 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  SY || rc==SQLITE
284d0 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20  _LOCKED ){.     
284e0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
284f0 72 72 2c 20 22 45 72 72 6f 72 3a 20 73 6f 75 72  rr, "Error: sour
28500 63 65 20 64 61 74 61 62 61 73 65 20 69 73 20 62  ce database is b
28510 75 73 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  usy\n");.      r
28520 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  c = 1;.    }else
28530 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
28540 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
28550 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74  or: %s\n", sqlit
28560 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29  e3_errmsg(p->db)
28570 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
28580 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
28590 65 33 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a  e3_close(pSrc);.
285a0 20 20 7d 65 6c 73 65 0a 0a 0a 20 20 69 66 28 20    }else...  if( 
285b0 63 3d 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d  c=='s' && strncm
285c0 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 63 61  p(azArg[0], "sca
285d0 6e 73 74 61 74 73 22 2c 20 6e 29 3d 3d 30 20 29  nstats", n)==0 )
285e0 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d  {.    if( nArg==
285f0 32 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 73 63  2 ){.      p->sc
28600 61 6e 73 74 61 74 73 4f 6e 20 3d 20 62 6f 6f 6c  anstatsOn = bool
28610 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  eanValue(azArg[1
28620 5d 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ]);.#ifndef SQLI
28630 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
28640 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 20 20  CANSTATUS.      
28650 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
28660 72 2c 20 22 57 61 72 6e 69 6e 67 3a 20 2e 73 63  r, "Warning: .sc
28670 61 6e 73 74 61 74 73 20 6e 6f 74 20 61 76 61 69  anstats not avai
28680 6c 61 62 6c 65 20 69 6e 20 74 68 69 73 20 62 75  lable in this bu
28690 69 6c 64 2e 5c 6e 22 29 3b 0a 23 65 6e 64 69 66  ild.\n");.#endif
286a0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
286b0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
286c0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 63  err, "Usage: .sc
286d0 61 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66 5c 6e  anstats on|off\n
286e0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
286f0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
28700 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26  .  if( c=='s' &&
28710 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
28720 5d 2c 20 22 73 63 68 65 6d 61 22 2c 20 6e 29 3d  ], "schema", n)=
28730 3d 30 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 54  =0 ){.    ShellT
28740 65 78 74 20 73 53 65 6c 65 63 74 3b 0a 20 20 20  ext sSelect;.   
28750 20 53 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61   ShellState data
28760 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72  ;.    char *zErr
28770 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e  Msg = 0;.    con
28780 73 74 20 63 68 61 72 20 2a 7a 44 69 76 20 3d 20  st char *zDiv = 
28790 30 3b 0a 20 20 20 20 69 6e 74 20 69 53 63 68 65  0;.    int iSche
287a0 6d 61 20 3d 20 30 3b 0a 0a 20 20 20 20 6f 70 65  ma = 0;..    ope
287b0 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20  n_db(p, 0);.    
287c0 6d 65 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c  memcpy(&data, p,
287d0 20 73 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a   sizeof(data));.
287e0 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61      data.showHea
287f0 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74  der = 0;.    dat
28800 61 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d  a.cMode = data.m
28810 6f 64 65 20 3d 20 4d 4f 44 45 5f 53 65 6d 69 3b  ode = MODE_Semi;
28820 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73  .    initText(&s
28830 53 65 6c 65 63 74 29 3b 0a 20 20 20 20 69 66 28  Select);.    if(
28840 20 6e 41 72 67 3e 3d 32 20 26 26 20 6f 70 74 69   nArg>=2 && opti
28850 6f 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b 31 5d  onMatch(azArg[1]
28860 2c 20 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20  , "indent") ){. 
28870 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20       data.cMode 
28880 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f  = data.mode = MO
28890 44 45 5f 50 72 65 74 74 79 3b 0a 20 20 20 20 20  DE_Pretty;.     
288a0 20 6e 41 72 67 2d 2d 3b 0a 20 20 20 20 20 20 69   nArg--;.      i
288b0 66 28 20 6e 41 72 67 3d 3d 32 20 29 20 61 7a 41  f( nArg==2 ) azA
288c0 72 67 5b 31 5d 20 3d 20 61 7a 41 72 67 5b 32 5d  rg[1] = azArg[2]
288d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
288e0 6e 41 72 67 3d 3d 32 20 26 26 20 61 7a 41 72 67  nArg==2 && azArg
288f0 5b 31 5d 5b 30 5d 21 3d 27 2d 27 20 29 7b 0a 20  [1][0]!='-' ){. 
28900 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
28910 20 20 66 6f 72 28 69 3d 30 3b 20 61 7a 41 72 67    for(i=0; azArg
28920 5b 31 5d 5b 69 5d 3b 20 69 2b 2b 29 20 61 7a 41  [1][i]; i++) azA
28930 72 67 5b 31 5d 5b 69 5d 20 3d 20 54 6f 4c 6f 77  rg[1][i] = ToLow
28940 65 72 28 61 7a 41 72 67 5b 31 5d 5b 69 5d 29 3b  er(azArg[1][i]);
28950 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d  .      if( strcm
28960 70 28 61 7a 41 72 67 5b 31 5d 2c 22 73 71 6c 69  p(azArg[1],"sqli
28970 74 65 5f 6d 61 73 74 65 72 22 29 3d 3d 30 20 29  te_master")==0 )
28980 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a  {.        char *
28990 6e 65 77 5f 61 72 67 76 5b 32 5d 2c 20 2a 6e 65  new_argv[2], *ne
289a0 77 5f 63 6f 6c 76 5b 32 5d 3b 0a 20 20 20 20 20  w_colv[2];.     
289b0 20 20 20 6e 65 77 5f 61 72 67 76 5b 30 5d 20 3d     new_argv[0] =
289c0 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 73   "CREATE TABLE s
289d0 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 5c 6e  qlite_master (\n
289e0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
289f0 20 20 20 20 20 20 20 20 22 20 20 74 79 70 65 20          "  type 
28a00 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20  text,\n".       
28a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
28a20 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a    name text,\n".
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a40 20 20 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d        "  tbl_nam
28a50 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20  e text,\n".     
28a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a70 20 22 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74   "  rootpage int
28a80 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20 20 20 20  eger,\n".       
28a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
28aa0 20 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20    sql text\n".  
28ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ac0 20 20 20 20 22 29 22 3b 0a 20 20 20 20 20 20 20      ")";.       
28ad0 20 6e 65 77 5f 61 72 67 76 5b 31 5d 20 3d 20 30   new_argv[1] = 0
28ae0 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f  ;.        new_co
28af0 6c 76 5b 30 5d 20 3d 20 22 73 71 6c 22 3b 0a 20  lv[0] = "sql";. 
28b00 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76 5b         new_colv[
28b10 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  1] = 0;.        
28b20 63 61 6c 6c 62 61 63 6b 28 26 64 61 74 61 2c 20  callback(&data, 
28b30 31 2c 20 6e 65 77 5f 61 72 67 76 2c 20 6e 65 77  1, new_argv, new
28b40 5f 63 6f 6c 76 29 3b 0a 20 20 20 20 20 20 20 20  _colv);.        
28b50 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
28b60 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
28b70 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  strcmp(azArg[1],
28b80 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
28b90 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ter")==0 ){.    
28ba0 20 20 20 20 63 68 61 72 20 2a 6e 65 77 5f 61 72      char *new_ar
28bb0 67 76 5b 32 5d 2c 20 2a 6e 65 77 5f 63 6f 6c 76  gv[2], *new_colv
28bc0 5b 32 5d 3b 0a 20 20 20 20 20 20 20 20 6e 65 77  [2];.        new
28bd0 5f 61 72 67 76 5b 30 5d 20 3d 20 22 43 52 45 41  _argv[0] = "CREA
28be0 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 73 71  TE TEMP TABLE sq
28bf0 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
28c00 20 28 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20   (\n".          
28c10 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 74              "  t
28c20 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ype text,\n".   
28c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c40 20 20 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c     "  name text,
28c50 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n".            
28c60 20 20 20 20 20 20 20 20 20 20 22 20 20 74 62 6c            "  tbl
28c70 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20  _name text,\n". 
28c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c90 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65       "  rootpage
28ca0 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20   integer,\n".   
28cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cc0 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e     "  sql text\n
28cd0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
28ce0 20 20 20 20 20 20 20 20 22 29 22 3b 0a 20 20 20          ")";.   
28cf0 20 20 20 20 20 6e 65 77 5f 61 72 67 76 5b 31 5d       new_argv[1]
28d00 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6e 65   = 0;.        ne
28d10 77 5f 63 6f 6c 76 5b 30 5d 20 3d 20 22 73 71 6c  w_colv[0] = "sql
28d20 22 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63  ";.        new_c
28d30 6f 6c 76 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  olv[1] = 0;.    
28d40 20 20 20 20 63 61 6c 6c 62 61 63 6b 28 26 64 61      callback(&da
28d50 74 61 2c 20 31 2c 20 6e 65 77 5f 61 72 67 76 2c  ta, 1, new_argv,
28d60 20 6e 65 77 5f 63 6f 6c 76 29 3b 0a 20 20 20 20   new_colv);.    
28d70 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
28d80 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  OK;.      }else{
28d90 0a 20 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20  .        zDiv = 
28da0 22 28 22 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  "(";.      }.   
28db0 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d   }else if( nArg=
28dc0 3d 31 20 29 7b 0a 20 20 20 20 20 20 7a 44 69 76  =1 ){.      zDiv
28dd0 20 3d 20 22 28 22 3b 0a 20 20 20 20 7d 65 6c 73   = "(";.    }els
28de0 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
28df0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
28e00 67 65 3a 20 2e 73 63 68 65 6d 61 20 3f 2d 2d 69  ge: .schema ?--i
28e10 6e 64 65 6e 74 3f 20 3f 4c 49 4b 45 2d 50 41 54  ndent? ?LIKE-PAT
28e20 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20 20  TERN?\n");.     
28e30 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
28e40 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
28e50 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
28e60 20 69 66 28 20 7a 44 69 76 20 29 7b 0a 20 20 20   if( zDiv ){.   
28e70 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20     sqlite3_stmt 
28e80 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20 20  *pStmt = 0;.    
28e90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
28ea0 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
28eb0 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   "SELECT name FR
28ec0 4f 4d 20 70 72 61 67 6d 61 5f 64 61 74 61 62 61  OM pragma_databa
28ed0 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20 20 20 20  se_list",.      
28ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ef0 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74          -1, &pSt
28f00 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  mt, 0);.      if
28f10 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20  ( rc ){.        
28f20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
28f30 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e  rr, "Error: %s\n
28f40 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
28f50 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
28f60 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
28f70 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  ize(pStmt);.    
28f80 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
28f90 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
28fa0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
28fb0 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64    }.      append
28fc0 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22  Text(&sSelect, "
28fd0 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 22  SELECT sql FROM"
28fe0 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 53 63 68  , 0);.      iSch
28ff0 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 20 20 77  ema = 0;.      w
29000 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74  hile( sqlite3_st
29010 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
29020 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20  E_ROW ){.       
29030 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
29040 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
29050 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
29060 65 78 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20  ext(pStmt, 0);. 
29070 20 20 20 20 20 20 20 63 68 61 72 20 7a 53 63 4e         char zScN
29080 75 6d 5b 33 30 5d 3b 0a 20 20 20 20 20 20 20 20  um[30];.        
29090 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
290a0 28 73 69 7a 65 6f 66 28 7a 53 63 4e 75 6d 29 2c  (sizeof(zScNum),
290b0 20 7a 53 63 4e 75 6d 2c 20 22 25 64 22 2c 20 2b   zScNum, "%d", +
290c0 2b 69 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20  +iSchema);.     
290d0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
290e0 53 65 6c 65 63 74 2c 20 7a 44 69 76 2c 20 30 29  Select, zDiv, 0)
290f0 3b 0a 20 20 20 20 20 20 20 20 7a 44 69 76 20 3d  ;.        zDiv =
29100 20 22 20 55 4e 49 4f 4e 20 41 4c 4c 20 22 3b 0a   " UNION ALL ";.
29110 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63          if( strc
29120 6d 70 28 7a 44 62 2c 20 22 6d 61 69 6e 22 29 21  mp(zDb, "main")!
29130 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
29140 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
29150 65 63 74 2c 20 22 53 45 4c 45 43 54 20 73 68 65  ect, "SELECT she
29160 6c 6c 5f 61 64 64 5f 73 63 68 65 6d 61 28 73 71  ll_add_schema(sq
29170 6c 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  l,", 0);.       
29180 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
29190 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20 27 22 27  Select, zDb, '"'
291a0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70  );.          app
291b0 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
291c0 2c 20 22 29 20 41 53 20 73 71 6c 2c 20 74 79 70  , ") AS sql, typ
291d0 65 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d  e, tbl_name, nam
291e0 65 2c 20 72 6f 77 69 64 2c 22 2c 20 30 29 3b 0a  e, rowid,", 0);.
291f0 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64            append
29200 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a  Text(&sSelect, z
29210 53 63 4e 75 6d 2c 20 30 29 3b 0a 20 20 20 20 20  ScNum, 0);.     
29220 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
29230 26 73 53 65 6c 65 63 74 2c 20 22 20 41 53 20 73  &sSelect, " AS s
29240 6e 75 6d 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20  num, ", 0);.    
29250 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
29260 28 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20  (&sSelect, zDb, 
29270 27 5c 27 27 29 3b 0a 20 20 20 20 20 20 20 20 20  '\'');.         
29280 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
29290 6c 65 63 74 2c 20 22 20 41 53 20 73 6e 61 6d 65  lect, " AS sname
292a0 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20   FROM ", 0);.   
292b0 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
292c0 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c  t(&sSelect, zDb,
292d0 20 27 22 27 29 3b 0a 20 20 20 20 20 20 20 20 20   '"');.         
292e0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
292f0 6c 65 63 74 2c 20 22 2e 73 71 6c 69 74 65 5f 6d  lect, ".sqlite_m
29300 61 73 74 65 72 22 2c 20 30 29 3b 0a 20 20 20 20  aster", 0);.    
29310 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
29320 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
29330 26 73 53 65 6c 65 63 74 2c 20 22 53 45 4c 45 43  &sSelect, "SELEC
29340 54 20 73 71 6c 2c 20 74 79 70 65 2c 20 74 62 6c  T sql, type, tbl
29350 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f 77  _name, name, row
29360 69 64 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  id, ", 0);.     
29370 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
29380 26 73 53 65 6c 65 63 74 2c 20 7a 53 63 4e 75 6d  &sSelect, zScNum
29390 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
293a0 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
293b0 65 63 74 2c 20 22 20 41 53 20 73 6e 75 6d 2c 20  ect, " AS snum, 
293c0 27 6d 61 69 6e 27 20 41 53 20 73 6e 61 6d 65 20  'main' AS sname 
293d0 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
293e0 65 72 22 2c 30 29 3b 0a 20 20 20 20 20 20 20 20  er",0);.        
293f0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
29400 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
29410 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 61  (pStmt);.      a
29420 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
29430 63 74 2c 20 22 29 20 57 48 45 52 45 20 22 2c 20  ct, ") WHERE ", 
29440 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 41  0);.      if( nA
29450 72 67 3e 31 20 29 7b 0a 20 20 20 20 20 20 20 20  rg>1 ){.        
29460 63 68 61 72 20 2a 7a 51 61 72 67 20 3d 20 73 71  char *zQarg = sq
29470 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
29480 51 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  Q", azArg[1]);. 
29490 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 68         if( strch
294a0 72 28 61 7a 41 72 67 5b 31 5d 2c 20 27 2e 27 29  r(azArg[1], '.')
294b0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
294c0 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
294d0 74 2c 20 22 6c 6f 77 65 72 28 70 72 69 6e 74 66  t, "lower(printf
294e0 28 27 25 73 2e 25 73 27 2c 73 6e 61 6d 65 2c 74  ('%s.%s',sname,t
294f0 62 6c 5f 6e 61 6d 65 29 29 22 2c 20 30 29 3b 0a  bl_name))", 0);.
29500 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
29510 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54           appendT
29520 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 6c  ext(&sSelect, "l
29530 6f 77 65 72 28 74 62 6c 5f 6e 61 6d 65 29 22 2c  ower(tbl_name)",
29540 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   0);.        }. 
29550 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
29560 74 28 26 73 53 65 6c 65 63 74 2c 20 73 74 72 63  t(&sSelect, strc
29570 68 72 28 61 7a 41 72 67 5b 31 5d 2c 20 27 2a 27  hr(azArg[1], '*'
29580 29 20 3f 20 22 20 47 4c 4f 42 20 22 20 3a 20 22  ) ? " GLOB " : "
29590 20 4c 49 4b 45 20 22 2c 20 30 29 3b 0a 20 20 20   LIKE ", 0);.   
295a0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
295b0 26 73 53 65 6c 65 63 74 2c 20 7a 51 61 72 67 2c  &sSelect, zQarg,
295c0 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70   0);.        app
295d0 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
295e0 2c 20 22 20 41 4e 44 20 22 2c 20 30 29 3b 0a 20  , " AND ", 0);. 
295f0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
29600 72 65 65 28 7a 51 61 72 67 29 3b 0a 20 20 20 20  ree(zQarg);.    
29610 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64    }.      append
29620 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22  Text(&sSelect, "
29630 74 79 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44  type!='meta' AND
29640 20 73 71 6c 20 49 53 20 4e 4f 54 20 4e 55 4c 4c   sql IS NOT NULL
29650 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
29660 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f               " O
29670 52 44 45 52 20 42 59 20 73 6e 75 6d 2c 20 72 6f  RDER BY snum, ro
29680 77 69 64 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  wid", 0);.      
29690 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
296a0 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c 65 63 74  c(p->db, sSelect
296b0 2e 7a 2c 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64  .z, callback, &d
296c0 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a  ata, &zErrMsg);.
296d0 20 20 20 20 20 20 66 72 65 65 54 65 78 74 28 26        freeText(&
296e0 73 53 65 6c 65 63 74 29 3b 0a 20 20 20 20 7d 0a  sSelect);.    }.
296f0 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20      if( zErrMsg 
29700 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
29710 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72  intf(stderr,"Err
29720 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d  or: %s\n", zErrM
29730 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  sg);.      sqlit
29740 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
29750 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
29760 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63      }else if( rc
29770 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
29780 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
29790 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
297a0 20 71 75 65 72 79 69 6e 67 20 73 63 68 65 6d 61   querying schema
297b0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29   information\n")
297c0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
297d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
297e0 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20   rc = 0;.    }. 
297f0 20 7d 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69   }else..#if defi
29800 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
29810 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
29820 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43  ITE_ENABLE_SELEC
29830 54 54 52 41 43 45 29 0a 20 20 69 66 28 20 63 3d  TTRACE).  if( c=
29840 3d 27 73 27 20 26 26 20 6e 3d 3d 31 31 20 26 26  ='s' && n==11 &&
29850 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
29860 5d 2c 20 22 73 65 6c 65 63 74 74 72 61 63 65 22  ], "selecttrace"
29870 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  , n)==0 ){.    s
29880 71 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63  qlite3SelectTrac
29890 65 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72  e = (int)integer
298a0 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b  Value(azArg[1]);
298b0 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
298c0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
298d0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49  ITE_ENABLE_SESSI
298e0 4f 4e 29 0a 20 20 69 66 28 20 63 3d 3d 27 73 27  ON).  if( c=='s'
298f0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
29900 67 5b 30 5d 2c 22 73 65 73 73 69 6f 6e 22 2c 6e  g[0],"session",n
29910 29 3d 3d 30 20 26 26 20 6e 3e 3d 33 20 29 7b 0a  )==0 && n>=3 ){.
29920 20 20 20 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20      OpenSession 
29930 2a 70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e  *pSession = &p->
29940 61 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a 20 20 20  aSession[0];.   
29950 20 63 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20   char **azCmd = 
29960 26 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 69  &azArg[1];.    i
29970 6e 74 20 69 53 65 73 20 3d 20 30 3b 0a 20 20 20  nt iSes = 0;.   
29980 20 69 6e 74 20 6e 43 6d 64 20 3d 20 6e 41 72 67   int nCmd = nArg
29990 20 2d 20 31 3b 0a 20 20 20 20 69 6e 74 20 69 3b   - 1;.    int i;
299a0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c 3d 31  .    if( nArg<=1
299b0 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f   ) goto session_
299c0 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20  syntax_error;.  
299d0 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
299e0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 33  .    if( nArg>=3
299f0 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 53   ){.      for(iS
29a00 65 73 3d 30 3b 20 69 53 65 73 3c 70 2d 3e 6e 53  es=0; iSes<p->nS
29a10 65 73 73 69 6f 6e 3b 20 69 53 65 73 2b 2b 29 7b  ession; iSes++){
29a20 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
29a30 63 6d 70 28 70 2d 3e 61 53 65 73 73 69 6f 6e 5b  cmp(p->aSession[
29a40 69 53 65 73 5d 2e 7a 4e 61 6d 65 2c 20 61 7a 41  iSes].zName, azA
29a50 72 67 5b 31 5d 29 3d 3d 30 20 29 20 62 72 65 61  rg[1])==0 ) brea
29a60 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
29a70 20 69 66 28 20 69 53 65 73 3c 70 2d 3e 6e 53 65   if( iSes<p->nSe
29a80 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ssion ){.       
29a90 20 70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e   pSession = &p->
29aa0 61 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d 3b 0a  aSession[iSes];.
29ab0 20 20 20 20 20 20 20 20 61 7a 43 6d 64 2b 2b 3b          azCmd++;
29ac0 0a 20 20 20 20 20 20 20 20 6e 43 6d 64 2d 2d 3b  .        nCmd--;
29ad0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
29ae0 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d        pSession =
29af0 20 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 30 5d   &p->aSession[0]
29b00 3b 0a 20 20 20 20 20 20 20 20 69 53 65 73 20 3d  ;.        iSes =
29b10 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
29b20 7d 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69  }..    /* .sessi
29b30 6f 6e 20 61 74 74 61 63 68 20 54 41 42 4c 45 0a  on attach TABLE.
29b40 20 20 20 20 2a 2a 20 49 6e 76 6f 6b 65 20 74 68      ** Invoke th
29b50 65 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e  e sqlite3session
29b60 5f 61 74 74 61 63 68 28 29 20 69 6e 74 65 72 66  _attach() interf
29b70 61 63 65 20 74 6f 20 61 74 74 61 63 68 20 61 20  ace to attach a 
29b80 70 61 72 74 69 63 75 6c 61 72 0a 20 20 20 20 2a  particular.    *
29b90 2a 20 74 61 62 6c 65 20 73 6f 20 74 68 61 74 20  * table so that 
29ba0 69 74 20 69 73 20 6e 65 76 65 72 20 66 69 6c 74  it is never filt
29bb0 65 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ered..    */.   
29bc0 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d   if( strcmp(azCm
29bd0 64 5b 30 5d 2c 22 61 74 74 61 63 68 22 29 3d 3d  d[0],"attach")==
29be0 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  0 ){.      if( n
29bf0 43 6d 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65  Cmd!=2 ) goto se
29c00 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
29c10 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53  or;.      if( pS
29c20 65 73 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 7b 0a  ession->p==0 ){.
29c30 20 20 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5f          session_
29c40 6e 6f 74 5f 6f 70 65 6e 3a 0a 20 20 20 20 20 20  not_open:.      
29c50 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
29c60 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 20  err, "ERROR: No 
29c70 73 65 73 73 69 6f 6e 73 20 61 72 65 20 6f 70 65  sessions are ope
29c80 6e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  n\n");.      }el
29c90 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  se{.        rc =
29ca0 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f   sqlite3session_
29cb0 61 74 74 61 63 68 28 70 53 65 73 73 69 6f 6e 2d  attach(pSession-
29cc0 3e 70 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20  >p, azCmd[1]);. 
29cd0 20 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b         if( rc ){
29ce0 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
29cf0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
29d00 52 52 4f 52 3a 20 73 71 6c 69 74 65 33 73 65 73  RROR: sqlite3ses
29d10 73 69 6f 6e 5f 61 74 74 61 63 68 28 29 20 72 65  sion_attach() re
29d20 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63 29  turns %d\n", rc)
29d30 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  ;.          rc =
29d40 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
29d50 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a      }.    }else.
29d60 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
29d70 20 63 68 61 6e 67 65 73 65 74 20 46 49 4c 45 0a   changeset FILE.
29d80 20 20 20 20 2a 2a 20 2e 73 65 73 73 69 6f 6e 20      ** .session 
29d90 70 61 74 63 68 73 65 74 20 46 49 4c 45 0a 20 20  patchset FILE.  
29da0 20 20 2a 2a 20 57 72 69 74 65 20 61 20 63 68 61    ** Write a cha
29db0 6e 67 65 73 65 74 20 6f 72 20 70 61 74 63 68 73  ngeset or patchs
29dc0 65 74 20 69 6e 74 6f 20 61 20 66 69 6c 65 2e 20  et into a file. 
29dd0 20 54 68 65 20 66 69 6c 65 20 69 73 20 6f 76 65   The file is ove
29de0 72 77 72 69 74 74 65 6e 2e 0a 20 20 20 20 2a 2f  rwritten..    */
29df0 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28  .    if( strcmp(
29e00 61 7a 43 6d 64 5b 30 5d 2c 22 63 68 61 6e 67 65  azCmd[0],"change
29e10 73 65 74 22 29 3d 3d 30 20 7c 7c 20 73 74 72 63  set")==0 || strc
29e20 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 22 70 61 74  mp(azCmd[0],"pat
29e30 63 68 73 65 74 22 29 3d 3d 30 20 29 7b 0a 20 20  chset")==0 ){.  
29e40 20 20 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20      FILE *out = 
29e50 30 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  0;.      if( nCm
29e60 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73  d!=2 ) goto sess
29e70 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
29e80 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53 65 73  ;.      if( pSes
29e90 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 20 67 6f 74  sion->p==0 ) got
29ea0 6f 20 73 65 73 73 69 6f 6e 5f 6e 6f 74 5f 6f 70  o session_not_op
29eb0 65 6e 3b 0a 20 20 20 20 20 20 6f 75 74 20 3d 20  en;.      out = 
29ec0 66 6f 70 65 6e 28 61 7a 43 6d 64 5b 31 5d 2c 20  fopen(azCmd[1], 
29ed0 22 77 62 22 29 3b 0a 20 20 20 20 20 20 69 66 28  "wb");.      if(
29ee0 20 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20   out==0 ){.     
29ef0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
29f00 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 63  tderr, "ERROR: c
29f10 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c  annot open \"%s\
29f20 22 20 66 6f 72 20 77 72 69 74 69 6e 67 5c 6e 22  " for writing\n"
29f30 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20  , azCmd[1]);.   
29f40 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
29f50 20 20 69 6e 74 20 73 7a 43 68 6e 67 3b 0a 20 20    int szChng;.  
29f60 20 20 20 20 20 20 76 6f 69 64 20 2a 70 43 68 6e        void *pChn
29f70 67 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61  g;.        if( a
29f80 7a 43 6d 64 5b 30 5d 5b 30 5d 3d 3d 27 63 27 20  zCmd[0][0]=='c' 
29f90 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
29fa0 3d 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e  = sqlite3session
29fb0 5f 63 68 61 6e 67 65 73 65 74 28 70 53 65 73 73  _changeset(pSess
29fc0 69 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68 6e 67 2c  ion->p, &szChng,
29fd0 20 26 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20   &pChng);.      
29fe0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
29ff0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73     rc = sqlite3s
2a000 65 73 73 69 6f 6e 5f 70 61 74 63 68 73 65 74 28  ession_patchset(
2a010 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 26 73 7a  pSession->p, &sz
2a020 43 68 6e 67 2c 20 26 70 43 68 6e 67 29 3b 0a 20  Chng, &pChng);. 
2a030 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2a040 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
2a050 20 20 20 20 20 70 72 69 6e 74 66 28 22 45 72 72       printf("Err
2a060 6f 72 3a 20 65 72 72 6f 72 20 63 6f 64 65 20 25  or: error code %
2a070 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20  d\n", rc);.     
2a080 20 20 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20       rc = 0;.   
2a090 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
2a0a0 66 28 20 70 43 68 6e 67 0a 20 20 20 20 20 20 20  f( pChng.       
2a0b0 20 20 20 26 26 20 66 77 72 69 74 65 28 70 43 68     && fwrite(pCh
2a0c0 6e 67 2c 20 73 7a 43 68 6e 67 2c 20 31 2c 20 6f  ng, szChng, 1, o
2a0d0 75 74 29 21 3d 31 20 29 7b 0a 20 20 20 20 20 20  ut)!=1 ){.      
2a0e0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2a0f0 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 46  tderr, "ERROR: F
2a100 61 69 6c 65 64 20 74 6f 20 77 72 69 74 65 20 65  ailed to write e
2a110 6e 74 69 72 65 20 25 64 2d 62 79 74 65 20 6f 75  ntire %d-byte ou
2a120 74 70 75 74 5c 6e 22 2c 0a 20 20 20 20 20 20 20  tput\n",.       
2a130 20 20 20 20 20 20 20 20 20 20 20 73 7a 43 68 6e             szChn
2a140 67 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  g);.        }.  
2a150 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
2a160 65 65 28 70 43 68 6e 67 29 3b 0a 20 20 20 20 20  ee(pChng);.     
2a170 20 20 20 66 63 6c 6f 73 65 28 6f 75 74 29 3b 0a     fclose(out);.
2a180 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
2a190 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69  e..    /* .sessi
2a1a0 6f 6e 20 63 6c 6f 73 65 0a 20 20 20 20 2a 2a 20  on close.    ** 
2a1b0 43 6c 6f 73 65 20 74 68 65 20 69 64 65 6e 74 69  Close the identi
2a1c0 66 69 65 64 20 73 65 73 73 69 6f 6e 0a 20 20 20  fied session.   
2a1d0 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63   */.    if( strc
2a1e0 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 63 6c  mp(azCmd[0], "cl
2a1f0 6f 73 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ose")==0 ){.    
2a200 20 20 69 66 28 20 6e 43 6d 64 21 3d 31 20 29 20    if( nCmd!=1 ) 
2a210 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e  goto session_syn
2a220 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  tax_error;.     
2a230 20 69 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e   if( p->nSession
2a240 20 29 7b 0a 20 20 20 20 20 20 20 20 73 65 73 73   ){.        sess
2a250 69 6f 6e 5f 63 6c 6f 73 65 28 70 53 65 73 73 69  ion_close(pSessi
2a260 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  on);.        p->
2a270 61 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d 20 3d  aSession[iSes] =
2a280 20 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 2d 2d 70   p->aSession[--p
2a290 2d 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20  ->nSession];.   
2a2a0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a     }.    }else..
2a2b0 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20      /* .session 
2a2c0 65 6e 61 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f  enable ?BOOLEAN?
2a2d0 0a 20 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72  .    ** Query or
2a2e0 20 73 65 74 20 74 68 65 20 65 6e 61 62 6c 65 20   set the enable 
2a2f0 66 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20  flag.    */.    
2a300 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64  if( strcmp(azCmd
2a310 5b 30 5d 2c 20 22 65 6e 61 62 6c 65 22 29 3d 3d  [0], "enable")==
2a320 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  0 ){.      int i
2a330 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  i;.      if( nCm
2a340 64 3e 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69  d>2 ) goto sessi
2a350 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
2a360 0a 20 20 20 20 20 20 69 69 20 3d 20 6e 43 6d 64  .      ii = nCmd
2a370 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c 65  ==1 ? -1 : boole
2a380 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31 5d  anValue(azCmd[1]
2a390 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
2a3a0 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20  nSession ){.    
2a3b0 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33      ii = sqlite3
2a3c0 73 65 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28 70  session_enable(p
2a3d0 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 69 69 29 3b  Session->p, ii);
2a3e0 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
2a3f0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65  intf(p->out, "se
2a400 73 73 69 6f 6e 20 25 73 20 65 6e 61 62 6c 65 20  ssion %s enable 
2a410 66 6c 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20 20  flag = %d\n",.  
2a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a430 20 20 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d    pSession->zNam
2a440 65 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 7d 0a  e, ii);.      }.
2a450 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f      }else..    /
2a460 2a 20 2e 73 65 73 73 69 6f 6e 20 66 69 6c 74 65  * .session filte
2a470 72 20 47 4c 4f 42 20 2e 2e 2e 2e 0a 20 20 20 20  r GLOB .....    
2a480 2a 2a 20 53 65 74 20 61 20 6c 69 73 74 20 6f 66  ** Set a list of
2a490 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 6f   GLOB patterns o
2a4a0 66 20 74 61 62 6c 65 20 6e 61 6d 65 73 20 74 6f  f table names to
2a4b0 20 62 65 20 65 78 63 6c 75 64 65 64 2e 0a 20 20   be excluded..  
2a4c0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72    */.    if( str
2a4d0 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 66  cmp(azCmd[0], "f
2a4e0 69 6c 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20  ilter")==0 ){.  
2a4f0 20 20 20 20 69 6e 74 20 69 69 2c 20 6e 42 79 74      int ii, nByt
2a500 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  e;.      if( nCm
2a510 64 3c 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69  d<2 ) goto sessi
2a520 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
2a530 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
2a540 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
2a550 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70    for(ii=0; ii<p
2a560 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72  Session->nFilter
2a570 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
2a580 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2a590 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74  pSession->azFilt
2a5a0 65 72 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 20  er[ii]);.       
2a5b0 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
2a5c0 65 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e  e3_free(pSession
2a5d0 2d 3e 61 7a 46 69 6c 74 65 72 29 3b 0a 20 20 20  ->azFilter);.   
2a5e0 20 20 20 20 20 6e 42 79 74 65 20 3d 20 73 69 7a       nByte = siz
2a5f0 65 6f 66 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a  eof(pSession->az
2a600 46 69 6c 74 65 72 5b 30 5d 29 2a 28 6e 43 6d 64  Filter[0])*(nCmd
2a610 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 70 53 65  -1);.        pSe
2a620 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 20  ssion->azFilter 
2a630 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  = sqlite3_malloc
2a640 28 20 6e 42 79 74 65 20 29 3b 0a 20 20 20 20 20  ( nByte );.     
2a650 20 20 20 69 66 28 20 70 53 65 73 73 69 6f 6e 2d     if( pSession-
2a660 3e 61 7a 46 69 6c 74 65 72 3d 3d 30 20 29 7b 0a  >azFilter==0 ){.
2a670 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
2a680 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
2a690 72 6f 72 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f  ror: out or memo
2a6a0 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  ry\n");.        
2a6b0 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20    exit(1);.     
2a6c0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72     }.        for
2a6d0 28 69 69 3d 31 3b 20 69 69 3c 6e 43 6d 64 3b 20  (ii=1; ii<nCmd; 
2a6e0 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
2a6f0 20 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c   pSession->azFil
2a700 74 65 72 5b 69 69 2d 31 5d 20 3d 20 73 71 6c 69  ter[ii-1] = sqli
2a710 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
2a720 2c 20 61 7a 43 6d 64 5b 69 69 5d 29 3b 0a 20 20  , azCmd[ii]);.  
2a730 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2a740 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65  pSession->nFilte
2a750 72 20 3d 20 69 69 2d 31 3b 0a 20 20 20 20 20 20  r = ii-1;.      
2a760 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20  }.    }else..   
2a770 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 69 6e 64   /* .session ind
2a780 69 72 65 63 74 20 3f 42 4f 4f 4c 45 41 4e 3f 0a  irect ?BOOLEAN?.
2a790 20 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20      ** Query or 
2a7a0 73 65 74 20 74 68 65 20 69 6e 64 69 72 65 63 74  set the indirect
2a7b0 20 66 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20   flag.    */.   
2a7c0 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d   if( strcmp(azCm
2a7d0 64 5b 30 5d 2c 20 22 69 6e 64 69 72 65 63 74 22  d[0], "indirect"
2a7e0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  )==0 ){.      in
2a7f0 74 20 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20  t ii;.      if( 
2a800 6e 43 6d 64 3e 32 20 29 20 67 6f 74 6f 20 73 65  nCmd>2 ) goto se
2a810 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
2a820 6f 72 3b 0a 20 20 20 20 20 20 69 69 20 3d 20 6e  or;.      ii = n
2a830 43 6d 64 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f  Cmd==1 ? -1 : bo
2a840 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64  oleanValue(azCmd
2a850 5b 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  [1]);.      if( 
2a860 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20  p->nSession ){. 
2a870 20 20 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69         ii = sqli
2a880 74 65 33 73 65 73 73 69 6f 6e 5f 69 6e 64 69 72  te3session_indir
2a890 65 63 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c  ect(pSession->p,
2a8a0 20 69 69 29 3b 0a 20 20 20 20 20 20 20 20 75 74   ii);.        ut
2a8b0 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
2a8c0 2c 20 22 73 65 73 73 69 6f 6e 20 25 73 20 69 6e  , "session %s in
2a8d0 64 69 72 65 63 74 20 66 6c 61 67 20 3d 20 25 64  direct flag = %d
2a8e0 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
2a8f0 20 20 20 20 20 20 20 20 20 70 53 65 73 73 69 6f           pSessio
2a900 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29 3b 0a 20  n->zName, ii);. 
2a910 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
2a920 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f  ..    /* .sessio
2a930 6e 20 69 73 65 6d 70 74 79 0a 20 20 20 20 2a 2a  n isempty.    **
2a940 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
2a950 65 20 73 65 73 73 69 6f 6e 20 69 73 20 65 6d 70  e session is emp
2a960 74 79 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  ty.    */.    if
2a970 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30  ( strcmp(azCmd[0
2a980 5d 2c 20 22 69 73 65 6d 70 74 79 22 29 3d 3d 30  ], "isempty")==0
2a990 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69   ){.      int ii
2a9a0 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64  ;.      if( nCmd
2a9b0 21 3d 31 20 29 20 67 6f 74 6f 20 73 65 73 73 69  !=1 ) goto sessi
2a9c0 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
2a9d0 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
2a9e0 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
2a9f0 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65    ii = sqlite3se
2aa00 73 73 69 6f 6e 5f 69 73 65 6d 70 74 79 28 70 53  ssion_isempty(pS
2aa10 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20  ession->p);.    
2aa20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2aa30 70 2d 3e 6f 75 74 2c 20 22 73 65 73 73 69 6f 6e  p->out, "session
2aa40 20 25 73 20 69 73 65 6d 70 74 79 20 66 6c 61 67   %s isempty flag
2aa50 20 3d 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20   = %d\n",.      
2aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 53                pS
2aa70 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69  ession->zName, i
2aa80 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  i);.      }.    
2aa90 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73  }else..    /* .s
2aaa0 65 73 73 69 6f 6e 20 6c 69 73 74 0a 20 20 20 20  ession list.    
2aab0 2a 2a 20 4c 69 73 74 20 61 6c 6c 20 63 75 72 72  ** List all curr
2aac0 65 6e 74 6c 79 20 6f 70 65 6e 20 73 65 73 73 69  ently open sessi
2aad0 6f 6e 73 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ons.    */.    i
2aae0 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
2aaf0 30 5d 2c 22 6c 69 73 74 22 29 3d 3d 30 20 29 7b  0],"list")==0 ){
2ab00 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
2ab10 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69  i<p->nSession; i
2ab20 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  ++){.        utf
2ab30 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2ab40 20 22 25 64 20 25 73 5c 6e 22 2c 20 69 2c 20 70   "%d %s\n", i, p
2ab50 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 5d 2e 7a 4e  ->aSession[i].zN
2ab60 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ame);.      }.  
2ab70 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20    }else..    /* 
2ab80 2e 73 65 73 73 69 6f 6e 20 6f 70 65 6e 20 44 42  .session open DB
2ab90 20 4e 41 4d 45 0a 20 20 20 20 2a 2a 20 4f 70 65   NAME.    ** Ope
2aba0 6e 20 61 20 6e 65 77 20 73 65 73 73 69 6f 6e 20  n a new session 
2abb0 63 61 6c 6c 65 64 20 4e 41 4d 45 20 6f 6e 20 74  called NAME on t
2abc0 68 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61  he attached data
2abd0 62 61 73 65 20 44 42 2e 0a 20 20 20 20 2a 2a 20  base DB..    ** 
2abe0 44 42 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 22  DB is normally "
2abf0 6d 61 69 6e 22 2e 0a 20 20 20 20 2a 2f 0a 20 20  main"..    */.  
2ac00 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43    if( strcmp(azC
2ac10 6d 64 5b 30 5d 2c 22 6f 70 65 6e 22 29 3d 3d 30  md[0],"open")==0
2ac20 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a   ){.      char *
2ac30 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20 69 66 28  zName;.      if(
2ac40 20 6e 43 6d 64 21 3d 33 20 29 20 67 6f 74 6f 20   nCmd!=3 ) goto 
2ac50 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65  session_syntax_e
2ac60 72 72 6f 72 3b 0a 20 20 20 20 20 20 7a 4e 61 6d  rror;.      zNam
2ac70 65 20 3d 20 61 7a 43 6d 64 5b 32 5d 3b 0a 20 20  e = azCmd[2];.  
2ac80 20 20 20 20 69 66 28 20 7a 4e 61 6d 65 5b 30 5d      if( zName[0]
2ac90 3d 3d 30 20 29 20 67 6f 74 6f 20 73 65 73 73 69  ==0 ) goto sessi
2aca0 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
2acb0 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
2acc0 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69  i<p->nSession; i
2acd0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
2ace0 20 73 74 72 63 6d 70 28 70 2d 3e 61 53 65 73 73   strcmp(p->aSess
2acf0 69 6f 6e 5b 69 5d 2e 7a 4e 61 6d 65 2c 7a 4e 61  ion[i].zName,zNa
2ad00 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  me)==0 ){.      
2ad10 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2ad20 73 74 64 65 72 72 2c 20 22 53 65 73 73 69 6f 6e  stderr, "Session
2ad30 20 5c 22 25 73 5c 22 20 61 6c 72 65 61 64 79 20   \"%s\" already 
2ad40 65 78 69 73 74 73 5c 6e 22 2c 20 7a 4e 61 6d 65  exists\n", zName
2ad50 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
2ad60 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
2ad70 78 69 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  xit;.        }. 
2ad80 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
2ad90 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 3e 3d 41 72   p->nSession>=Ar
2ada0 72 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73  raySize(p->aSess
2adb0 69 6f 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ion) ){.        
2adc0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2add0 72 2c 20 22 4d 61 78 69 6d 75 6d 20 6f 66 20 25  r, "Maximum of %
2ade0 64 20 73 65 73 73 69 6f 6e 73 5c 6e 22 2c 20 41  d sessions\n", A
2adf0 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73  rraySize(p->aSes
2ae00 73 69 6f 6e 29 29 3b 0a 20 20 20 20 20 20 20 20  sion));.        
2ae10 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2ae20 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a  d_exit;.      }.
2ae30 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d        pSession =
2ae40 20 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 70 2d   &p->aSession[p-
2ae50 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20  >nSession];.    
2ae60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65    rc = sqlite3se
2ae70 73 73 69 6f 6e 5f 63 72 65 61 74 65 28 70 2d 3e  ssion_create(p->
2ae80 64 62 2c 20 61 7a 43 6d 64 5b 31 5d 2c 20 26 70  db, azCmd[1], &p
2ae90 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20  Session->p);.   
2aea0 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
2aeb0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2aec0 73 74 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20  stderr, "Cannot 
2aed0 6f 70 65 6e 20 73 65 73 73 69 6f 6e 3a 20 65 72  open session: er
2aee0 72 6f 72 20 63 6f 64 65 3d 25 64 5c 6e 22 2c 20  ror code=%d\n", 
2aef0 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  rc);.        rc 
2af00 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 0;.        got
2af10 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
2af20 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  xit;.      }.   
2af30 20 20 20 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69     pSession->nFi
2af40 6c 74 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20  lter = 0;.      
2af50 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 74  sqlite3session_t
2af60 61 62 6c 65 5f 66 69 6c 74 65 72 28 70 53 65 73  able_filter(pSes
2af70 73 69 6f 6e 2d 3e 70 2c 20 73 65 73 73 69 6f 6e  sion->p, session
2af80 5f 66 69 6c 74 65 72 2c 20 70 53 65 73 73 69 6f  _filter, pSessio
2af90 6e 29 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 65  n);.      p->nSe
2afa0 73 73 69 6f 6e 2b 2b 3b 0a 20 20 20 20 20 20 70  ssion++;.      p
2afb0 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 20 3d  Session->zName =
2afc0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2afd0 28 22 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  ("%s", zName);. 
2afe0 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 2f 2a 20     }else.    /* 
2aff0 49 66 20 6e 6f 20 63 6f 6d 6d 61 6e 64 20 6e 61  If no command na
2b000 6d 65 20 6d 61 74 63 68 65 73 2c 20 73 68 6f 77  me matches, show
2b010 20 61 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20   a syntax error 
2b020 2a 2f 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 73  */.    session_s
2b030 79 6e 74 61 78 5f 65 72 72 6f 72 3a 0a 20 20 20  yntax_error:.   
2b040 20 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28 70 29   session_help(p)
2b050 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
2b060 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2b070 44 45 42 55 47 0a 20 20 2f 2a 20 55 6e 64 6f 63  DEBUG.  /* Undoc
2b080 75 6d 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 73  umented commands
2b090 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 74 65   for internal te
2b0a0 73 74 69 6e 67 2e 20 20 53 75 62 6a 65 63 74 20  sting.  Subject 
2b0b0 74 6f 20 63 68 61 6e 67 65 0a 20 20 2a 2a 20 77  to change.  ** w
2b0c0 69 74 68 6f 75 74 20 6e 6f 74 69 63 65 2e 20 2a  ithout notice. *
2b0d0 2f 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26  /.  if( c=='s' &
2b0e0 26 20 6e 3e 3d 31 30 20 26 26 20 73 74 72 6e 63  & n>=10 && strnc
2b0f0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 65  mp(azArg[0], "se
2b100 6c 66 74 65 73 74 2d 22 2c 20 39 29 3d 3d 30 20  lftest-", 9)==0 
2b110 29 7b 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63  ){.    if( strnc
2b120 6d 70 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22  mp(azArg[0]+9, "
2b130 62 6f 6f 6c 65 61 6e 22 2c 20 6e 2d 39 29 3d 3d  boolean", n-9)==
2b140 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  0 ){.      int i
2b150 2c 20 76 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  , v;.      for(i
2b160 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =1; i<nArg; i++)
2b170 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 62 6f  {.        v = bo
2b180 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
2b190 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 75 74  [i]);.        ut
2b1a0 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
2b1b0 2c 20 22 25 73 3a 20 25 64 20 30 78 25 78 5c 6e  , "%s: %d 0x%x\n
2b1c0 22 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 76 2c 20  ", azArg[i], v, 
2b1d0 76 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  v);.      }.    
2b1e0 7d 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d  }.    if( strncm
2b1f0 70 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 69  p(azArg[0]+9, "i
2b200 6e 74 65 67 65 72 22 2c 20 6e 2d 39 29 3d 3d 30  nteger", n-9)==0
2b210 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b   ){.      int i;
2b220 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 76   sqlite3_int64 v
2b230 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b  ;.      for(i=1;
2b240 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
2b250 20 20 20 20 20 20 20 63 68 61 72 20 7a 42 75 66         char zBuf
2b260 5b 32 30 30 5d 3b 0a 20 20 20 20 20 20 20 20 76  [200];.        v
2b270 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28   = integerValue(
2b280 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20  azArg[i]);.     
2b290 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
2b2a0 6e 74 66 28 73 69 7a 65 6f 66 28 7a 42 75 66 29  ntf(sizeof(zBuf)
2b2b0 2c 7a 42 75 66 2c 22 25 73 3a 20 25 6c 6c 64 20  ,zBuf,"%s: %lld 
2b2c0 30 78 25 6c 6c 78 5c 6e 22 2c 20 61 7a 41 72 67  0x%llx\n", azArg
2b2d0 5b 69 5d 2c 76 2c 76 29 3b 0a 20 20 20 20 20 20  [i],v,v);.      
2b2e0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2b2f0 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66  >out, "%s", zBuf
2b300 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
2b310 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
2b320 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26  .  if( c=='s' &&
2b330 20 6e 3e 3d 34 20 26 26 20 73 74 72 6e 63 6d 70   n>=4 && strncmp
2b340 28 61 7a 41 72 67 5b 30 5d 2c 22 73 65 6c 66 74  (azArg[0],"selft
2b350 65 73 74 22 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20  est",n)==0 ){.  
2b360 20 20 69 6e 74 20 62 49 73 49 6e 69 74 20 3d 20    int bIsInit = 
2b370 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  0;         /* Tr
2b380 75 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ue to initialize
2b390 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74 61   the SELFTEST ta
2b3a0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62  ble */.    int b
2b3b0 56 65 72 62 6f 73 65 20 3d 20 30 3b 20 20 20 20  Verbose = 0;    
2b3c0 20 20 20 20 2f 2a 20 56 65 72 62 6f 73 65 20 6f      /* Verbose o
2b3d0 75 74 70 75 74 20 2a 2f 0a 20 20 20 20 69 6e 74  utput */.    int
2b3e0 20 62 53 65 6c 66 74 65 73 74 45 78 69 73 74 73   bSelftestExists
2b3f0 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
2b400 20 53 45 4c 46 54 45 53 54 20 61 6c 72 65 61 64   SELFTEST alread
2b410 79 20 65 78 69 73 74 73 20 2a 2f 0a 20 20 20 20  y exists */.    
2b420 69 6e 74 20 69 2c 20 6b 3b 20 20 20 20 20 20 20  int i, k;       
2b430 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
2b440 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20   counters */.   
2b450 20 69 6e 74 20 6e 54 65 73 74 20 3d 20 30 3b 20   int nTest = 0; 
2b460 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2b470 62 65 72 20 6f 66 20 74 65 73 74 73 20 72 75 6e  ber of tests run
2b480 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 45 72  s */.    int nEr
2b490 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
2b4a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
2b4b0 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
2b4c0 20 20 53 68 65 6c 6c 54 65 78 74 20 73 74 72 3b    ShellText str;
2b4d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e             /* An
2b4e0 73 77 65 72 20 66 6f 72 20 61 20 71 75 65 72 79  swer for a query
2b4f0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   */.    sqlite3_
2b500 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b  stmt *pStmt = 0;
2b510 20 2f 2a 20 51 75 65 72 79 20 61 67 61 69 6e 73   /* Query agains
2b520 74 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74  t the SELFTEST t
2b530 61 62 6c 65 20 2a 2f 0a 0a 20 20 20 20 6f 70 65  able */..    ope
2b540 6e 5f 64 62 28 70 2c 30 29 3b 0a 20 20 20 20 66  n_db(p,0);.    f
2b550 6f 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20  or(i=1; i<nArg; 
2b560 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  i++){.      cons
2b570 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72  t char *z = azAr
2b580 67 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  g[i];.      if( 
2b590 7a 5b 30 5d 3d 3d 27 2d 27 20 26 26 20 7a 5b 31  z[0]=='-' && z[1
2b5a0 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20  ]=='-' ) z++;.  
2b5b0 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
2b5c0 2c 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a  ,"-init")==0 ){.
2b5d0 20 20 20 20 20 20 20 20 62 49 73 49 6e 69 74 20          bIsInit 
2b5e0 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 1;.      }else
2b5f0 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d  .      if( strcm
2b600 70 28 7a 2c 22 2d 76 22 29 3d 3d 30 20 29 7b 0a  p(z,"-v")==0 ){.
2b610 20 20 20 20 20 20 20 20 62 56 65 72 62 6f 73 65          bVerbose
2b620 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a  ++;.      }else.
2b630 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2b640 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2b650 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74  rr, "Unknown opt
2b660 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22  ion \"%s\" on \"
2b670 25 73 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20  %s\"\n",.       
2b680 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
2b690 72 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29  rg[i], azArg[0])
2b6a0 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  ;.        raw_pr
2b6b0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 68  intf(stderr, "Sh
2b6c0 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20  ould be one of: 
2b6d0 2d 2d 69 6e 69 74 20 2d 76 5c 6e 22 29 3b 0a 20  --init -v\n");. 
2b6e0 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2b6f0 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2b700 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2b710 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
2b720 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74 61 62   if( sqlite3_tab
2b730 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
2b740 74 61 28 70 2d 3e 64 62 2c 22 6d 61 69 6e 22 2c  ta(p->db,"main",
2b750 22 73 65 6c 66 74 65 73 74 22 2c 30 2c 30 2c 30  "selftest",0,0,0
2b760 2c 30 2c 30 2c 30 29 0a 20 20 20 20 20 20 20 20  ,0,0,0).        
2b770 20 20 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20     != SQLITE_OK 
2b780 29 7b 0a 20 20 20 20 20 20 62 53 65 6c 66 74 65  ){.      bSelfte
2b790 73 74 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20  stExists = 0;.  
2b7a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 62    }else{.      b
2b7b0 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d  SelftestExists =
2b7c0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   1;.    }.    if
2b7d0 28 20 62 49 73 49 6e 69 74 20 29 7b 0a 20 20 20  ( bIsInit ){.   
2b7e0 20 20 20 63 72 65 61 74 65 53 65 6c 66 74 65 73     createSelftes
2b7f0 74 54 61 62 6c 65 28 70 29 3b 0a 20 20 20 20 20  tTable(p);.     
2b800 20 62 53 65 6c 66 74 65 73 74 45 78 69 73 74 73   bSelftestExists
2b810 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
2b820 69 6e 69 74 54 65 78 74 28 26 73 74 72 29 3b 0a  initText(&str);.
2b830 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
2b840 73 74 72 2c 20 22 78 22 2c 20 30 29 3b 0a 20 20  str, "x", 0);.  
2b850 20 20 66 6f 72 28 6b 3d 62 53 65 6c 66 74 65 73    for(k=bSelftes
2b860 74 45 78 69 73 74 73 3b 20 6b 3e 3d 30 3b 20 6b  tExists; k>=0; k
2b870 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6b  --){.      if( k
2b880 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==1 ){.        r
2b890 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
2b8a0 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20  are_v2(p->db,.  
2b8b0 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43            "SELEC
2b8c0 54 20 74 6e 6f 2c 6f 70 2c 63 6d 64 2c 61 6e 73  T tno,op,cmd,ans
2b8d0 20 46 52 4f 4d 20 73 65 6c 66 74 65 73 74 20 4f   FROM selftest O
2b8e0 52 44 45 52 20 42 59 20 74 6e 6f 22 2c 0a 20 20  RDER BY tno",.  
2b8f0 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70            -1, &p
2b900 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20  Stmt, 0);.      
2b910 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
2b920 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
2b930 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20  are_v2(p->db,.  
2b940 20 20 20 20 20 20 20 20 22 56 41 4c 55 45 53 28          "VALUES(
2b950 30 2c 27 6d 65 6d 6f 27 2c 27 4d 69 73 73 69 6e  0,'memo','Missin
2b960 67 20 53 45 4c 46 54 45 53 54 20 74 61 62 6c 65  g SELFTEST table
2b970 20 2d 20 64 65 66 61 75 6c 74 20 63 68 65 63 6b   - default check
2b980 73 20 6f 6e 6c 79 27 2c 27 27 29 2c 22 0a 20 20  s only',''),".  
2b990 20 20 20 20 20 20 20 20 22 20 20 20 20 20 20 28          "      (
2b9a0 31 2c 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20  1,'run','PRAGMA 
2b9b0 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27  integrity_check'
2b9c0 2c 27 6f 6b 27 29 22 2c 0a 20 20 20 20 20 20 20  ,'ok')",.       
2b9d0 20 20 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30     -1, &pStmt, 0
2b9e0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
2b9f0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
2ba00 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2ba10 64 65 72 72 2c 20 22 45 72 72 6f 72 20 71 75 65  derr, "Error que
2ba20 72 79 69 6e 67 20 74 68 65 20 73 65 6c 66 74 65  rying the selfte
2ba30 73 74 20 74 61 62 6c 65 5c 6e 22 29 3b 0a 20 20  st table\n");.  
2ba40 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2ba50 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
2ba60 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
2ba70 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2ba80 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2ba90 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72       }.      for
2baa0 28 69 3d 31 3b 20 73 71 6c 69 74 65 33 5f 73 74  (i=1; sqlite3_st
2bab0 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
2bac0 45 5f 52 4f 57 3b 20 69 2b 2b 29 7b 0a 20 20 20  E_ROW; i++){.   
2bad0 20 20 20 20 20 69 6e 74 20 74 6e 6f 20 3d 20 73       int tno = s
2bae0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
2baf0 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20  t(pStmt, 0);.   
2bb00 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
2bb10 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73 74 20 63 68  *zOp = (const ch
2bb20 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
2bb30 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31  mn_text(pStmt, 1
2bb40 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74  );.        const
2bb50 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 28 63   char *zSql = (c
2bb60 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
2bb70 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
2bb80 53 74 6d 74 2c 20 32 29 3b 0a 20 20 20 20 20 20  Stmt, 2);.      
2bb90 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
2bba0 6e 73 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  ns = (const char
2bbb0 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
2bbc0 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 33 29 3b  _text(pStmt, 3);
2bbd0 0a 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b  ..        k = 0;
2bbe0 0a 20 20 20 20 20 20 20 20 69 66 28 20 62 56 65  .        if( bVe
2bbf0 72 62 6f 73 65 3e 30 20 29 7b 0a 20 20 20 20 20  rbose>0 ){.     
2bc00 20 20 20 20 20 63 68 61 72 20 2a 7a 51 75 6f 74       char *zQuot
2bc10 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e = sqlite3_mpri
2bc20 6e 74 66 28 22 25 71 22 2c 20 7a 53 71 6c 29 3b  ntf("%q", zSql);
2bc30 0a 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74  .          print
2bc40 66 28 22 25 64 3a 20 25 73 20 25 73 5c 6e 22 2c  f("%d: %s %s\n",
2bc50 20 74 6e 6f 2c 20 7a 4f 70 2c 20 7a 53 71 6c 29   tno, zOp, zSql)
2bc60 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
2bc70 74 65 33 5f 66 72 65 65 28 7a 51 75 6f 74 65 29  te3_free(zQuote)
2bc80 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2bc90 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
2bca0 4f 70 2c 22 6d 65 6d 6f 22 29 3d 3d 30 20 29 7b  Op,"memo")==0 ){
2bcb0 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
2bcc0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2bcd0 25 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20  %s\n", zSql);.  
2bce0 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20        }else.    
2bcf0 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
2bd00 4f 70 2c 22 72 75 6e 22 29 3d 3d 30 20 29 7b 0a  Op,"run")==0 ){.
2bd10 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
2bd20 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
2bd30 20 20 20 20 20 20 20 73 74 72 2e 6e 20 3d 20 30         str.n = 0
2bd40 3b 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 2e  ;.          str.
2bd50 7a 5b 30 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  z[0] = 0;.      
2bd60 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2bd70 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71  _exec(p->db, zSq
2bd80 6c 2c 20 63 61 70 74 75 72 65 4f 75 74 70 75 74  l, captureOutput
2bd90 43 61 6c 6c 62 61 63 6b 2c 20 26 73 74 72 2c 20  Callback, &str, 
2bda0 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
2bdb0 20 20 20 20 20 6e 54 65 73 74 2b 2b 3b 0a 20 20       nTest++;.  
2bdc0 20 20 20 20 20 20 20 20 69 66 28 20 62 56 65 72          if( bVer
2bdd0 62 6f 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20  bose ){.        
2bde0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2bdf0 70 2d 3e 6f 75 74 2c 20 22 52 65 73 75 6c 74 3a  p->out, "Result:
2be00 20 25 73 5c 6e 22 2c 20 73 74 72 2e 7a 29 3b 0a   %s\n", str.z);.
2be10 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2be20 20 20 20 20 20 20 69 66 28 20 72 63 20 7c 7c 20        if( rc || 
2be30 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20  zErrMsg ){.     
2be40 20 20 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a 20         nErr++;. 
2be50 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
2be60 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  1;.            u
2be70 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
2be80 74 2c 20 22 25 64 3a 20 65 72 72 6f 72 2d 63 6f  t, "%d: error-co
2be90 64 65 2d 25 64 3a 20 25 73 5c 6e 22 2c 20 74 6e  de-%d: %s\n", tn
2bea0 6f 2c 20 72 63 2c 20 7a 45 72 72 4d 73 67 29 3b  o, rc, zErrMsg);
2beb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
2bec0 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73  ite3_free(zErrMs
2bed0 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  g);.          }e
2bee0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
2bef0 41 6e 73 2c 73 74 72 2e 7a 29 21 3d 30 20 29 7b  Ans,str.z)!=0 ){
2bf00 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 45 72  .            nEr
2bf10 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  r++;.           
2bf20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   rc = 1;.       
2bf30 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2bf40 28 70 2d 3e 6f 75 74 2c 20 22 25 64 3a 20 45 78  (p->out, "%d: Ex
2bf50 70 65 63 74 65 64 3a 20 5b 25 73 5d 5c 6e 22 2c  pected: [%s]\n",
2bf60 20 74 6e 6f 2c 20 7a 41 6e 73 29 3b 0a 20 20 20   tno, zAns);.   
2bf70 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
2bf80 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64  intf(p->out, "%d
2bf90 3a 20 20 20 20 20 20 47 6f 74 3a 20 5b 25 73 5d  :      Got: [%s]
2bfa0 5c 6e 22 2c 20 74 6e 6f 2c 20 73 74 72 2e 7a 29  \n", tno, str.z)
2bfb0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
2bfc0 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20        }else.    
2bfd0 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
2bfe0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2bff0 72 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  rr,.            
2c000 22 55 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69  "Unknown operati
2c010 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 73 65 6c  on \"%s\" on sel
2c020 66 74 65 73 74 20 6c 69 6e 65 20 25 64 5c 6e 22  ftest line %d\n"
2c030 2c 20 7a 4f 70 2c 20 74 6e 6f 29 3b 0a 20 20 20  , zOp, tno);.   
2c040 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2c050 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2c060 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2c070 7d 20 2f 2a 20 45 6e 64 20 6c 6f 6f 70 20 6f 76  } /* End loop ov
2c080 65 72 20 72 6f 77 73 20 6f 66 20 63 6f 6e 74 65  er rows of conte
2c090 6e 74 20 66 72 6f 6d 20 53 45 4c 46 54 45 53 54  nt from SELFTEST
2c0a0 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
2c0b0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
2c0c0 29 3b 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20  );.    } /* End 
2c0d0 6c 6f 6f 70 20 6f 76 65 72 20 6b 20 2a 2f 0a 20  loop over k */. 
2c0e0 20 20 20 66 72 65 65 54 65 78 74 28 26 73 74 72     freeText(&str
2c0f0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2c100 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 65  tf(p->out, "%d e
2c110 72 72 6f 72 73 20 6f 75 74 20 6f 66 20 25 64 20  rrors out of %d 
2c120 74 65 73 74 73 5c 6e 22 2c 20 6e 45 72 72 2c 20  tests\n", nErr, 
2c130 6e 54 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 0a  nTest);.  }else.
2c140 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26  .  if( c=='s' &&
2c150 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2c160 5d 2c 20 22 73 65 70 61 72 61 74 6f 72 22 2c 20  ], "separator", 
2c170 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
2c180 20 6e 41 72 67 3c 32 20 7c 7c 20 6e 41 72 67 3e   nArg<2 || nArg>
2c190 33 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  3 ){.      raw_p
2c1a0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
2c1b0 73 61 67 65 3a 20 2e 73 65 70 61 72 61 74 6f 72  sage: .separator
2c1c0 20 43 4f 4c 20 3f 52 4f 57 3f 5c 6e 22 29 3b 0a   COL ?ROW?\n");.
2c1d0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2c1e0 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67    }.    if( nArg
2c1f0 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  >=2 ){.      sql
2c200 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
2c210 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72  zeof(p->colSepar
2c220 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70  ator), p->colSep
2c230 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20  arator,.        
2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2c250 25 2e 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61  %.*s", (int)Arra
2c260 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 53 65 70 61  ySize(p->colSepa
2c270 72 61 74 6f 72 29 2d 31 2c 20 61 7a 41 72 67 5b  rator)-1, azArg[
2c280 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  1]);.    }.    i
2c290 66 28 20 6e 41 72 67 3e 3d 33 20 29 7b 0a 20 20  f( nArg>=3 ){.  
2c2a0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2c2b0 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72  intf(sizeof(p->r
2c2c0 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d  owSeparator), p-
2c2d0 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20  >rowSeparator,. 
2c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2f0 20 20 20 20 20 20 22 25 2e 2a 73 22 2c 20 28 69        "%.*s", (i
2c300 6e 74 29 41 72 72 61 79 53 69 7a 65 28 70 2d 3e  nt)ArraySize(p->
2c310 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2d 31 2c  rowSeparator)-1,
2c320 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20   azArg[2]);.    
2c330 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
2c340 20 63 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 34 20   c=='s' && n>=4 
2c350 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
2c360 5b 30 5d 2c 22 73 68 61 33 73 75 6d 22 2c 6e 29  [0],"sha3sum",n)
2c370 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ==0 ){.    const
2c380 20 63 68 61 72 20 2a 7a 4c 69 6b 65 20 3d 20 30   char *zLike = 0
2c390 3b 20 20 20 2f 2a 20 57 68 69 63 68 20 74 61 62  ;   /* Which tab
2c3a0 6c 65 20 74 6f 20 63 68 65 63 6b 73 75 6d 2e 20  le to checksum. 
2c3b0 30 20 6d 65 61 6e 73 20 65 76 65 72 79 74 68 69  0 means everythi
2c3c0 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b  ng */.    int i;
2c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3e0 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
2c3f0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 53  er */.    int bS
2c400 63 68 65 6d 61 20 3d 20 30 3b 20 20 20 20 20 20  chema = 0;      
2c410 20 20 20 2f 2a 20 41 6c 73 6f 20 68 61 73 68 20     /* Also hash 
2c420 74 68 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  the schema */.  
2c430 20 20 69 6e 74 20 62 53 65 70 61 72 61 74 65 20    int bSeparate 
2c440 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  = 0;       /* Ha
2c450 73 68 20 65 61 63 68 20 74 61 62 6c 65 20 73 65  sh each table se
2c460 70 61 72 61 74 65 6c 79 20 2a 2f 0a 20 20 20 20  parately */.    
2c470 69 6e 74 20 69 53 69 7a 65 20 3d 20 32 32 34 3b  int iSize = 224;
2c480 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68           /* Hash
2c490 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
2c4a0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 44 65  e */.    int bDe
2c4b0 62 75 67 20 3d 20 30 3b 20 20 20 20 20 20 20 20  bug = 0;        
2c4c0 20 20 2f 2a 20 4f 6e 6c 79 20 73 68 6f 77 20 74    /* Only show t
2c4d0 68 65 20 71 75 65 72 79 20 74 68 61 74 20 77 6f  he query that wo
2c4e0 75 6c 64 20 68 61 76 65 20 72 75 6e 20 2a 2f 0a  uld have run */.
2c4f0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
2c500 20 2a 70 53 74 6d 74 3b 20 20 20 20 20 2f 2a 20   *pStmt;     /* 
2c510 46 6f 72 20 71 75 65 72 79 69 6e 67 20 74 61 62  For querying tab
2c520 6c 65 73 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 20  les names */.   
2c530 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20   char *zSql;    
2c540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c            /* SQL
2c550 20 74 6f 20 62 65 20 72 75 6e 20 2a 2f 0a 20 20   to be run */.  
2c560 20 20 63 68 61 72 20 2a 7a 53 65 70 3b 20 20 20    char *zSep;   
2c570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65             /* Se
2c580 70 61 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 53  parator */.    S
2c590 68 65 6c 6c 54 65 78 74 20 73 53 71 6c 3b 20 20  hellText sSql;  
2c5a0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
2c5b0 65 74 65 20 53 51 4c 20 66 6f 72 20 74 68 65 20  ete SQL for the 
2c5c0 71 75 65 72 79 20 74 6f 20 72 75 6e 20 74 68 65  query to run the
2c5d0 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 53 68 65   hash */.    She
2c5e0 6c 6c 54 65 78 74 20 73 51 75 65 72 79 3b 20 20  llText sQuery;  
2c5f0 20 20 20 20 20 20 2f 2a 20 53 65 74 20 6f 66 20        /* Set of 
2c600 71 75 65 72 69 65 73 20 75 73 65 64 20 74 6f 20  queries used to 
2c610 72 65 61 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  read all content
2c620 20 2a 2f 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   */.    open_db(
2c630 70 2c 20 30 29 3b 0a 20 20 20 20 66 6f 72 28 69  p, 0);.    for(i
2c640 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =1; i<nArg; i++)
2c650 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
2c660 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d  ar *z = azArg[i]
2c670 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d  ;.      if( z[0]
2c680 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20  =='-' ){.       
2c690 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66   z++;.        if
2c6a0 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b  ( z[0]=='-' ) z+
2c6b0 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  +;.        if( s
2c6c0 74 72 63 6d 70 28 7a 2c 22 73 63 68 65 6d 61 22  trcmp(z,"schema"
2c6d0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
2c6e0 20 20 62 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20    bSchema = 1;. 
2c6f0 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20         }else.   
2c700 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
2c710 7a 2c 22 73 68 61 33 2d 32 32 34 22 29 3d 3d 30  z,"sha3-224")==0
2c720 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68   || strcmp(z,"sh
2c730 61 33 2d 32 35 36 22 29 3d 3d 30 0a 20 20 20 20  a3-256")==0.    
2c740 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a       || strcmp(z
2c750 2c 22 73 68 61 33 2d 33 38 34 22 29 3d 3d 30 20  ,"sha3-384")==0 
2c760 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61  || strcmp(z,"sha
2c770 33 2d 35 31 32 22 29 3d 3d 30 0a 20 20 20 20 20  3-512")==0.     
2c780 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20     ){.          
2c790 69 53 69 7a 65 20 3d 20 61 74 6f 69 28 26 7a 5b  iSize = atoi(&z[
2c7a0 35 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  5]);.        }el
2c7b0 73 65 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  se.        if( s
2c7c0 74 72 63 6d 70 28 7a 2c 22 64 65 62 75 67 22 29  trcmp(z,"debug")
2c7d0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
2c7e0 20 62 44 65 62 75 67 20 3d 20 31 3b 0a 20 20 20   bDebug = 1;.   
2c7f0 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20       }else.     
2c800 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75     {.          u
2c810 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
2c820 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69  r, "Unknown opti
2c830 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25  on \"%s\" on \"%
2c840 73 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  s\"\n",.        
2c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a                az
2c860 41 72 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d  Arg[i], azArg[0]
2c870 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  );.          raw
2c880 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2c890 22 53 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f  "Should be one o
2c8a0 66 3a 20 2d 2d 73 63 68 65 6d 61 22 0a 20 20 20  f: --schema".   
2c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8c0 20 20 20 20 20 20 20 20 20 20 22 20 2d 2d 73 68            " --sh
2c8d0 61 33 2d 32 32 34 20 2d 2d 73 68 61 33 2d 32 35  a3-224 --sha3-25
2c8e0 35 20 2d 2d 73 68 61 33 2d 33 38 34 20 2d 2d 73  5 --sha3-384 --s
2c8f0 68 61 33 2d 35 31 32 5c 6e 22 29 3b 0a 20 20 20  ha3-512\n");.   
2c900 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2c910 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65           goto me
2c920 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
2c930 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2c940 20 7d 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b 65   }else if( zLike
2c950 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
2c960 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2c970 55 73 61 67 65 3a 20 2e 73 68 61 33 73 75 6d 20  Usage: .sha3sum 
2c980 3f 4f 50 54 49 4f 4e 53 3f 20 3f 4c 49 4b 45 2d  ?OPTIONS? ?LIKE-
2c990 50 41 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20  PATTERN?\n");.  
2c9a0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2c9b0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
2c9c0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
2c9d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2c9e0 20 20 20 7a 4c 69 6b 65 20 3d 20 7a 3b 0a 20 20     zLike = z;.  
2c9f0 20 20 20 20 20 20 62 53 65 70 61 72 61 74 65 20        bSeparate 
2ca00 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
2ca10 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65   sqlite3_strlike
2ca20 28 22 73 71 6c 69 74 65 5f 25 22 2c 20 7a 4c 69  ("sqlite_%", zLi
2ca30 6b 65 2c 20 30 29 3d 3d 30 20 29 20 62 53 63 68  ke, 0)==0 ) bSch
2ca40 65 6d 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  ema = 1;.      }
2ca50 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 62  .    }.    if( b
2ca60 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20  Schema ){.      
2ca70 7a 53 71 6c 20 3d 20 22 53 45 4c 45 43 54 20 6c  zSql = "SELECT l
2ca80 6f 77 65 72 28 6e 61 6d 65 29 20 46 52 4f 4d 20  ower(name) FROM 
2ca90 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20  sqlite_master". 
2caa0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48              " WH
2cab0 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
2cac0 20 41 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f   AND coalesce(ro
2cad0 6f 74 70 61 67 65 2c 30 29 3e 31 22 0a 20 20 20  otpage,0)>1".   
2cae0 20 20 20 20 20 20 20 20 20 20 22 20 55 4e 49 4f            " UNIO
2caf0 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 27 73 71  N ALL SELECT 'sq
2cb00 6c 69 74 65 5f 6d 61 73 74 65 72 27 22 0a 20 20  lite_master'".  
2cb10 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44             " ORD
2cb20 45 52 20 42 59 20 31 20 63 6f 6c 6c 61 74 65 20  ER BY 1 collate 
2cb30 6e 6f 63 61 73 65 22 3b 0a 20 20 20 20 7d 65 6c  nocase";.    }el
2cb40 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d  se{.      zSql =
2cb50 20 22 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 6e   "SELECT lower(n
2cb60 61 6d 65 29 20 46 52 4f 4d 20 73 71 6c 69 74 65  ame) FROM sqlite
2cb70 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20 20  _master".       
2cb80 20 20 20 20 20 20 22 20 57 48 45 52 45 20 74 79        " WHERE ty
2cb90 70 65 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 63  pe='table' AND c
2cba0 6f 61 6c 65 73 63 65 28 72 6f 6f 74 70 61 67 65  oalesce(rootpage
2cbb0 2c 30 29 3e 31 22 0a 20 20 20 20 20 20 20 20 20  ,0)>1".         
2cbc0 20 20 20 20 22 20 41 4e 44 20 6e 61 6d 65 20 4e      " AND name N
2cbd0 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f  OT LIKE 'sqlite_
2cbe0 25 27 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  %'".            
2cbf0 20 22 20 4f 52 44 45 52 20 42 59 20 31 20 63 6f   " ORDER BY 1 co
2cc00 6c 6c 61 74 65 20 6e 6f 63 61 73 65 22 3b 0a 20  llate nocase";. 
2cc10 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
2cc20 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
2cc30 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53  b, zSql, -1, &pS
2cc40 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6e 69  tmt, 0);.    ini
2cc50 74 54 65 78 74 28 26 73 51 75 65 72 79 29 3b 0a  tText(&sQuery);.
2cc60 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 53      initText(&sS
2cc70 71 6c 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  ql);.    appendT
2cc80 65 78 74 28 26 73 53 71 6c 2c 20 22 57 49 54 48  ext(&sSql, "WITH
2cc90 20 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d   [sha3sum$query]
2cca0 28 61 2c 62 29 20 41 53 28 22 2c 30 29 3b 0a 20  (a,b) AS(",0);. 
2ccb0 20 20 20 7a 53 65 70 20 3d 20 22 56 41 4c 55 45     zSep = "VALUE
2ccc0 53 28 22 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  S(";.    while( 
2ccd0 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69  SQLITE_ROW==sqli
2cce0 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 20  te3_step(pStmt) 
2ccf0 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
2cd00 68 61 72 20 2a 7a 54 61 62 20 3d 20 28 63 6f 6e  har *zTab = (con
2cd10 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
2cd20 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
2cd30 6d 74 2c 30 29 3b 0a 20 20 20 20 20 20 69 66 28  mt,0);.      if(
2cd40 20 7a 4c 69 6b 65 20 26 26 20 73 71 6c 69 74 65   zLike && sqlite
2cd50 33 5f 73 74 72 6c 69 6b 65 28 7a 4c 69 6b 65 2c  3_strlike(zLike,
2cd60 20 7a 54 61 62 2c 20 30 29 21 3d 30 20 29 20 63   zTab, 0)!=0 ) c
2cd70 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69  ontinue;.      i
2cd80 66 28 20 73 74 72 6e 63 6d 70 28 7a 54 61 62 2c  f( strncmp(zTab,
2cd90 20 22 73 71 6c 69 74 65 5f 22 2c 37 29 21 3d 30   "sqlite_",7)!=0
2cda0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65   ){.        appe
2cdb0 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 22  ndText(&sQuery,"
2cdc0 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 22 2c  SELECT * FROM ",
2cdd0 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70   0);.        app
2cde0 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c  endText(&sQuery,
2cdf0 7a 54 61 62 2c 27 22 27 29 3b 0a 20 20 20 20 20  zTab,'"');.     
2ce00 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
2ce10 51 75 65 72 79 2c 22 20 4e 4f 54 20 49 4e 44 45  Query," NOT INDE
2ce20 58 45 44 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20  XED;", 0);.     
2ce30 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
2ce40 70 28 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f  p(zTab, "sqlite_
2ce50 6d 61 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20  master")==0 ){. 
2ce60 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
2ce70 74 28 26 73 51 75 65 72 79 2c 22 53 45 4c 45 43  t(&sQuery,"SELEC
2ce80 54 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f  T type,name,tbl_
2ce90 6e 61 6d 65 2c 73 71 6c 20 46 52 4f 4d 20 73 71  name,sql FROM sq
2cea0 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20  lite_master".   
2ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cec0 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52 20          " ORDER 
2ced0 42 59 20 6e 61 6d 65 3b 22 2c 20 30 29 3b 0a 20  BY name;", 0);. 
2cee0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
2cef0 74 72 63 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c  trcmp(zTab, "sql
2cf00 69 74 65 5f 73 65 71 75 65 6e 63 65 22 29 3d 3d  ite_sequence")==
2cf10 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70  0 ){.        app
2cf20 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c  endText(&sQuery,
2cf30 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 73 65 71  "SELECT name,seq
2cf40 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71   FROM sqlite_seq
2cf50 75 65 6e 63 65 22 0a 20 20 20 20 20 20 20 20 20  uence".         
2cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf70 20 20 22 20 4f 52 44 45 52 20 42 59 20 6e 61 6d    " ORDER BY nam
2cf80 65 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  e;", 0);.      }
2cf90 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2cfa0 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f 73 74  zTab, "sqlite_st
2cfb0 61 74 31 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  at1")==0 ){.    
2cfc0 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
2cfd0 73 51 75 65 72 79 2c 22 53 45 4c 45 43 54 20 74  sQuery,"SELECT t
2cfe0 62 6c 2c 69 64 78 2c 73 74 61 74 20 46 52 4f 4d  bl,idx,stat FROM
2cff0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 22 0a 20   sqlite_stat1". 
2d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d010 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44 45            " ORDE
2d020 52 20 42 59 20 74 62 6c 2c 69 64 78 3b 22 2c 20  R BY tbl,idx;", 
2d030 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  0);.      }else 
2d040 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62 2c  if( strcmp(zTab,
2d050 20 22 73 71 6c 69 74 65 5f 73 74 61 74 33 22 29   "sqlite_stat3")
2d060 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
2d070 20 7c 7c 20 73 74 72 63 6d 70 28 7a 54 61 62 2c   || strcmp(zTab,
2d080 20 22 73 71 6c 69 74 65 5f 73 74 61 74 34 22 29   "sqlite_stat4")
2d090 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
2d0a0 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65 72  ppendText(&sQuer
2d0b0 79 2c 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  y, "SELECT * FRO
2d0c0 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  M ", 0);.       
2d0d0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75   appendText(&sQu
2d0e0 65 72 79 2c 20 7a 54 61 62 2c 20 30 29 3b 0a 20  ery, zTab, 0);. 
2d0f0 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
2d100 74 28 26 73 51 75 65 72 79 2c 20 22 20 4f 52 44  t(&sQuery, " ORD
2d110 45 52 20 42 59 20 74 62 6c 2c 20 69 64 78 2c 20  ER BY tbl, idx, 
2d120 72 6f 77 69 64 3b 5c 6e 22 2c 20 30 29 3b 0a 20  rowid;\n", 0);. 
2d130 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70       }.      app
2d140 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a  endText(&sSql, z
2d150 53 65 70 2c 20 30 29 3b 0a 20 20 20 20 20 20 61  Sep, 0);.      a
2d160 70 70 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c  ppendText(&sSql,
2d170 20 73 51 75 65 72 79 2e 7a 2c 20 27 5c 27 27 29   sQuery.z, '\'')
2d180 3b 0a 20 20 20 20 20 20 73 51 75 65 72 79 2e 6e  ;.      sQuery.n
2d190 20 3d 20 30 3b 0a 20 20 20 20 20 20 61 70 70 65   = 0;.      appe
2d1a0 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 22 2c  ndText(&sSql, ",
2d1b0 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70  ", 0);.      app
2d1c0 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a  endText(&sSql, z
2d1d0 54 61 62 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20  Tab, '\'');.    
2d1e0 20 20 7a 53 65 70 20 3d 20 22 29 2c 28 22 3b 0a    zSep = "),(";.
2d1f0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
2d200 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
2d210 29 3b 0a 20 20 20 20 69 66 28 20 62 53 65 70 61  );.    if( bSepa
2d220 72 61 74 65 20 29 7b 0a 20 20 20 20 20 20 7a 53  rate ){.      zS
2d230 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
2d240 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20 20  intf(.          
2d250 22 25 73 29 29 22 0a 20 20 20 20 20 20 20 20 20  "%s))".         
2d260 20 22 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28   " SELECT lower(
2d270 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 61  hex(sha3_query(a
2d280 2c 25 64 29 29 29 20 41 53 20 68 61 73 68 2c 20  ,%d))) AS hash, 
2d290 62 20 41 53 20 6c 61 62 65 6c 22 0a 20 20 20 20  b AS label".    
2d2a0 20 20 20 20 20 20 22 20 20 20 46 52 4f 4d 20 5b        "   FROM [
2d2b0 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d 22 2c  sha3sum$query]",
2d2c0 0a 20 20 20 20 20 20 20 20 20 20 73 53 71 6c 2e  .          sSql.
2d2d0 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20 20 20 7d  z, iSize);.    }
2d2e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c  else{.      zSql
2d2f0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2d300 74 66 28 0a 20 20 20 20 20 20 20 20 20 20 22 25  tf(.          "%
2d310 73 29 29 22 0a 20 20 20 20 20 20 20 20 20 20 22  s))".          "
2d320 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65   SELECT lower(he
2d330 78 28 73 68 61 33 5f 71 75 65 72 79 28 67 72 6f  x(sha3_query(gro
2d340 75 70 5f 63 6f 6e 63 61 74 28 61 2c 27 27 29 2c  up_concat(a,''),
2d350 25 64 29 29 29 20 41 53 20 68 61 73 68 22 0a 20  %d))) AS hash". 
2d360 20 20 20 20 20 20 20 20 20 22 20 20 20 46 52 4f           "   FRO
2d370 4d 20 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79  M [sha3sum$query
2d380 5d 22 2c 0a 20 20 20 20 20 20 20 20 20 20 73 53  ]",.          sS
2d390 71 6c 2e 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20  ql.z, iSize);.  
2d3a0 20 20 7d 0a 20 20 20 20 66 72 65 65 54 65 78 74    }.    freeText
2d3b0 28 26 73 51 75 65 72 79 29 3b 0a 20 20 20 20 66  (&sQuery);.    f
2d3c0 72 65 65 54 65 78 74 28 26 73 53 71 6c 29 3b 0a  reeText(&sSql);.
2d3d0 20 20 20 20 69 66 28 20 62 44 65 62 75 67 20 29      if( bDebug )
2d3e0 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
2d3f0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c  ntf(p->out, "%s\
2d400 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 7d  n", zSql);.    }
2d410 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 68 65 6c  else{.      shel
2d420 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53  l_exec(p->db, zS
2d430 71 6c 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61  ql, shell_callba
2d440 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20 20 20 7d  ck, p, 0);.    }
2d450 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
2d460 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65  e(zSql);.  }else
2d470 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 0a 20  ..  if( c=='s'. 
2d480 20 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a    && (strncmp(az
2d490 41 72 67 5b 30 5d 2c 20 22 73 68 65 6c 6c 22 2c  Arg[0], "shell",
2d4a0 20 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d   n)==0 || strncm
2d4b0 70 28 61 7a 41 72 67 5b 30 5d 2c 22 73 79 73 74  p(azArg[0],"syst
2d4c0 65 6d 22 2c 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a  em",n)==0).  ){.
2d4d0 20 20 20 20 63 68 61 72 20 2a 7a 43 6d 64 3b 0a      char *zCmd;.
2d4e0 20 20 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20      int i, x;.  
2d4f0 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a    if( nArg<2 ){.
2d500 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2d510 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
2d520 20 2e 73 79 73 74 65 6d 20 43 4f 4d 4d 41 4e 44   .system COMMAND
2d530 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
2d540 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
2d550 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
2d560 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 43 6d 64  ;.    }.    zCmd
2d570 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2d580 74 66 28 73 74 72 63 68 72 28 61 7a 41 72 67 5b  tf(strchr(azArg[
2d590 31 5d 2c 27 20 27 29 3d 3d 30 3f 22 25 73 22 3a  1],' ')==0?"%s":
2d5a0 22 5c 22 25 73 5c 22 22 2c 20 61 7a 41 72 67 5b  "\"%s\"", azArg[
2d5b0 31 5d 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 32  1]);.    for(i=2
2d5c0 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2d5d0 20 20 20 20 20 20 7a 43 6d 64 20 3d 20 73 71 6c        zCmd = sql
2d5e0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 73 74 72  ite3_mprintf(str
2d5f0 63 68 72 28 61 7a 41 72 67 5b 69 5d 2c 27 20 27  chr(azArg[i],' '
2d600 29 3d 3d 30 3f 22 25 7a 20 25 73 22 3a 22 25 7a  )==0?"%z %s":"%z
2d610 20 5c 22 25 73 5c 22 22 2c 0a 20 20 20 20 20 20   \"%s\"",.      
2d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d630 20 20 20 20 20 20 20 7a 43 6d 64 2c 20 61 7a 41         zCmd, azA
2d640 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  rg[i]);.    }.  
2d650 20 20 78 20 3d 20 73 79 73 74 65 6d 28 7a 43 6d    x = system(zCm
2d660 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  d);.    sqlite3_
2d670 66 72 65 65 28 7a 43 6d 64 29 3b 0a 20 20 20 20  free(zCmd);.    
2d680 69 66 28 20 78 20 29 20 72 61 77 5f 70 72 69 6e  if( x ) raw_prin
2d690 74 66 28 73 74 64 65 72 72 2c 20 22 53 79 73 74  tf(stderr, "Syst
2d6a0 65 6d 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72  em command retur
2d6b0 6e 73 20 25 64 5c 6e 22 2c 20 78 29 3b 0a 20 20  ns %d\n", x);.  
2d6c0 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
2d6d0 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  's' && strncmp(a
2d6e0 7a 41 72 67 5b 30 5d 2c 20 22 73 68 6f 77 22 2c  zArg[0], "show",
2d6f0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74   n)==0 ){.    st
2d700 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2d710 2a 61 7a 42 6f 6f 6c 5b 5d 20 3d 20 7b 20 22 6f  *azBool[] = { "o
2d720 66 66 22 2c 20 22 6f 6e 22 2c 20 22 66 75 6c 6c  ff", "on", "full
2d730 22 2c 20 22 75 6e 6b 22 20 7d 3b 0a 20 20 20 20  ", "unk" };.    
2d740 69 6e 74 20 69 3b 0a 20 20 20 20 69 66 28 20 6e  int i;.    if( n
2d750 41 72 67 21 3d 31 20 29 7b 0a 20 20 20 20 20 20  Arg!=1 ){.      
2d760 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2d770 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 68 6f 77  r, "Usage: .show
2d780 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
2d790 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
2d7a0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
2d7b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 75 74 66 38  ;.    }.    utf8
2d7c0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2d7d0 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c  "%12.12s: %s\n",
2d7e0 22 65 63 68 6f 22 2c 0a 20 20 20 20 20 20 20 20  "echo",.        
2d7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d800 20 20 20 20 20 20 20 20 20 20 61 7a 42 6f 6f 6c            azBool
2d810 5b 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c  [ShellHasFlag(p,
2d820 20 53 48 46 4c 47 5f 45 63 68 6f 29 5d 29 3b 0a   SHFLG_Echo)]);.
2d830 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2d840 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73  p->out, "%12.12s
2d850 3a 20 25 73 5c 6e 22 2c 22 65 71 70 22 2c 20 61  : %s\n","eqp", a
2d860 7a 42 6f 6f 6c 5b 70 2d 3e 61 75 74 6f 45 51 50  zBool[p->autoEQP
2d870 26 33 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  &3]);.    utf8_p
2d880 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2d890 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 65  12.12s: %s\n","e
2d8a0 78 70 6c 61 69 6e 22 2c 0a 20 20 20 20 20 20 20  xplain",.       
2d8b0 20 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f    p->mode==MODE_
2d8c0 45 78 70 6c 61 69 6e 20 3f 20 22 6f 6e 22 20 3a  Explain ? "on" :
2d8d0 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20   p->autoExplain 
2d8e0 3f 20 22 61 75 74 6f 22 20 3a 20 22 6f 66 66 22  ? "auto" : "off"
2d8f0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2d900 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31  tf(p->out,"%12.1
2d910 32 73 3a 20 25 73 5c 6e 22 2c 22 68 65 61 64 65  2s: %s\n","heade
2d920 72 73 22 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 73  rs", azBool[p->s
2d930 68 6f 77 48 65 61 64 65 72 21 3d 30 5d 29 3b 0a  howHeader!=0]);.
2d940 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2d950 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73  p->out, "%12.12s
2d960 3a 20 25 73 5c 6e 22 2c 22 6d 6f 64 65 22 2c 20  : %s\n","mode", 
2d970 6d 6f 64 65 44 65 73 63 72 5b 70 2d 3e 6d 6f 64  modeDescr[p->mod
2d980 65 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  e]);.    utf8_pr
2d990 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31  intf(p->out, "%1
2d9a0 32 2e 31 32 73 3a 20 22 2c 20 22 6e 75 6c 6c 76  2.12s: ", "nullv
2d9b0 61 6c 75 65 22 29 3b 0a 20 20 20 20 20 20 6f 75  alue");.      ou
2d9c0 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d  tput_c_string(p-
2d9d0 3e 6f 75 74 2c 20 70 2d 3e 6e 75 6c 6c 56 61 6c  >out, p->nullVal
2d9e0 75 65 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  ue);.      raw_p
2d9f0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c  rintf(p->out, "\
2da00 6e 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  n");.    utf8_pr
2da10 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32  intf(p->out,"%12
2da20 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 6f 75 74  .12s: %s\n","out
2da30 70 75 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20  put",.          
2da40 20 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 6f 75    strlen30(p->ou
2da50 74 66 69 6c 65 29 20 3f 20 70 2d 3e 6f 75 74 66  tfile) ? p->outf
2da60 69 6c 65 20 3a 20 22 73 74 64 6f 75 74 22 29 3b  ile : "stdout");
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 22 25 31 32 2e 31 32 73  (p->out,"%12.12s
2da90 3a 20 22 2c 20 22 63 6f 6c 73 65 70 61 72 61 74  : ", "colseparat
2daa0 6f 72 22 29 3b 0a 20 20 20 20 20 20 6f 75 74 70  or");.      outp
2dab0 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f  ut_c_string(p->o
2dac0 75 74 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61  ut, p->colSepara
2dad0 74 6f 72 29 3b 0a 20 20 20 20 20 20 72 61 77 5f  tor);.      raw_
2dae0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2daf0 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  \n");.    utf8_p
2db00 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31  rintf(p->out,"%1
2db10 32 2e 31 32 73 3a 20 22 2c 20 22 72 6f 77 73 65  2.12s: ", "rowse
2db20 70 61 72 61 74 6f 72 22 29 3b 0a 20 20 20 20 20  parator");.     
2db30 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67   output_c_string
2db40 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 72 6f 77 53  (p->out, p->rowS
2db50 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
2db60 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
2db70 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75  ut, "\n");.    u
2db80 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
2db90 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c  t, "%12.12s: %s\
2dba0 6e 22 2c 22 73 74 61 74 73 22 2c 20 61 7a 42 6f  n","stats", azBo
2dbb0 6f 6c 5b 70 2d 3e 73 74 61 74 73 4f 6e 21 3d 30  ol[p->statsOn!=0
2dbc0 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ]);.    utf8_pri
2dbd0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32  ntf(p->out, "%12
2dbe0 2e 31 32 73 3a 20 22 2c 20 22 77 69 64 74 68 22  .12s: ", "width"
2dbf0 29 3b 0a 20 20 20 20 66 6f 72 20 28 69 3d 30 3b  );.    for (i=0;
2dc00 69 3c 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65  i<(int)ArraySize
2dc10 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 20 26 26  (p->colWidth) &&
2dc20 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 69 5d 20   p->colWidth[i] 
2dc30 21 3d 20 30 3b 69 2b 2b 29 20 7b 0a 20 20 20 20  != 0;i++) {.    
2dc40 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
2dc50 6f 75 74 2c 20 22 25 64 20 22 2c 20 70 2d 3e 63  out, "%d ", p->c
2dc60 6f 6c 57 69 64 74 68 5b 69 5d 29 3b 0a 20 20 20  olWidth[i]);.   
2dc70 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74   }.    raw_print
2dc80 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b  f(p->out, "\n");
2dc90 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2dca0 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32  (p->out, "%12.12
2dcb0 73 3a 20 25 73 5c 6e 22 2c 20 22 66 69 6c 65 6e  s: %s\n", "filen
2dcc0 61 6d 65 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ame",.          
2dcd0 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65        p->zDbFile
2dce0 6e 61 6d 65 20 3f 20 70 2d 3e 7a 44 62 46 69 6c  name ? p->zDbFil
2dcf0 65 6e 61 6d 65 20 3a 20 22 22 29 3b 0a 20 20 7d  ename : "");.  }
2dd00 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
2dd10 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  s' && strncmp(az
2dd20 41 72 67 5b 30 5d 2c 20 22 73 74 61 74 73 22 2c  Arg[0], "stats",
2dd30 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66   n)==0 ){.    if
2dd40 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20  ( nArg==2 ){.   
2dd50 20 20 20 70 2d 3e 73 74 61 74 73 4f 6e 20 3d 20     p->statsOn = 
2dd60 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
2dd70 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73  rg[1]);.    }els
2dd80 65 20 69 66 28 20 6e 41 72 67 3d 3d 31 20 29 7b  e if( nArg==1 ){
2dd90 0a 20 20 20 20 20 20 64 69 73 70 6c 61 79 5f 73  .      display_s
2dda0 74 61 74 73 28 70 2d 3e 64 62 2c 20 70 2c 20 30  tats(p->db, p, 0
2ddb0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2ddc0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2ddd0 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
2dde0 73 74 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f 5c 6e  stats ?on|off?\n
2ddf0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2de00 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
2de10 0a 20 20 69 66 28 20 28 63 3d 3d 27 74 27 20 26  .  if( (c=='t' &
2de20 26 20 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70  & n>1 && strncmp
2de30 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 61 62 6c  (azArg[0], "tabl
2de40 65 73 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 20 7c  es", n)==0).   |
2de50 7c 20 28 63 3d 3d 27 69 27 20 26 26 20 28 73 74  | (c=='i' && (st
2de60 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2de70 22 69 6e 64 69 63 65 73 22 2c 20 6e 29 3d 3d 30  "indices", n)==0
2de80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2de90 20 20 7c 7c 20 73 74 72 6e 63 6d 70 28 61 7a 41    || strncmp(azA
2dea0 72 67 5b 30 5d 2c 20 22 69 6e 64 65 78 65 73 22  rg[0], "indexes"
2deb0 2c 20 6e 29 3d 3d 30 29 20 29 0a 20 20 29 7b 0a  , n)==0) ).  ){.
2dec0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
2ded0 20 2a 70 53 74 6d 74 3b 0a 20 20 20 20 63 68 61   *pStmt;.    cha
2dee0 72 20 2a 2a 61 7a 52 65 73 75 6c 74 3b 0a 20 20  r **azResult;.  
2def0 20 20 69 6e 74 20 6e 52 6f 77 2c 20 6e 41 6c 6c    int nRow, nAll
2df00 6f 63 3b 0a 20 20 20 20 69 6e 74 20 69 69 3b 0a  oc;.    int ii;.
2df10 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20 73 3b      ShellText s;
2df20 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73  .    initText(&s
2df30 29 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70  );.    open_db(p
2df40 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  , 0);.    rc = s
2df50 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
2df60 32 28 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41  2(p->db, "PRAGMA
2df70 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 22 2c   database_list",
2df80 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
2df90 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 72 65  .    if( rc ) re
2dfa0 74 75 72 6e 20 73 68 65 6c 6c 44 61 74 61 62 61  turn shellDataba
2dfb0 73 65 45 72 72 6f 72 28 70 2d 3e 64 62 29 3b 0a  seError(p->db);.
2dfc0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 32 20  .    if( nArg>2 
2dfd0 26 26 20 63 3d 3d 27 69 27 20 29 7b 0a 20 20 20  && c=='i' ){.   
2dfe0 20 20 20 2f 2a 20 49 74 20 69 73 20 61 6e 20 68     /* It is an h
2dff0 69 73 74 6f 72 69 63 61 6c 20 61 63 63 69 64 65  istorical accide
2e000 6e 74 20 74 68 61 74 20 74 68 65 20 2e 69 6e 64  nt that the .ind
2e010 65 78 65 73 20 63 6f 6d 6d 61 6e 64 20 73 68 6f  exes command sho
2e020 77 73 20 61 6e 20 65 72 72 6f 72 0a 20 20 20 20  ws an error.    
2e030 20 20 2a 2a 20 77 68 65 6e 20 63 61 6c 6c 65 64    ** when called
2e040 20 77 69 74 68 20 74 68 65 20 77 72 6f 6e 67 20   with the wrong 
2e050 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
2e060 6e 74 73 20 77 68 65 72 65 61 73 20 74 68 65 20  nts whereas the 
2e070 2e 74 61 62 6c 65 73 0a 20 20 20 20 20 20 2a 2a  .tables.      **
2e080 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f   command does no
2e090 74 2e 20 2a 2f 0a 20 20 20 20 20 20 72 61 77 5f  t. */.      raw_
2e0a0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2e0b0 55 73 61 67 65 3a 20 2e 69 6e 64 65 78 65 73 20  Usage: .indexes 
2e0c0 3f 4c 49 4b 45 2d 50 41 54 54 45 52 4e 3f 5c 6e  ?LIKE-PATTERN?\n
2e0d0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2e0e0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
2e0f0 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2e100 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69      }.    for(ii
2e110 3d 30 3b 20 73 71 6c 69 74 65 33 5f 73 74 65 70  =0; sqlite3_step
2e120 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
2e130 52 4f 57 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  ROW; ii++){.    
2e140 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
2e150 62 4e 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20 63  bName = (const c
2e160 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
2e170 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  umn_text(pStmt, 
2e180 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 44  1);.      if( zD
2e190 62 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69  bName==0 ) conti
2e1a0 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 73  nue;.      if( s
2e1b0 2e 7a 20 26 26 20 73 2e 7a 5b 30 5d 20 29 20 61  .z && s.z[0] ) a
2e1c0 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20 22 20  ppendText(&s, " 
2e1d0 55 4e 49 4f 4e 20 41 4c 4c 20 22 2c 20 30 29 3b  UNION ALL ", 0);
2e1e0 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
2e1f0 65 33 5f 73 74 72 69 63 6d 70 28 7a 44 62 4e 61  e3_stricmp(zDbNa
2e200 6d 65 2c 20 22 6d 61 69 6e 22 29 3d 3d 30 20 29  me, "main")==0 )
2e210 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  {.        append
2e220 54 65 78 74 28 26 73 2c 20 22 53 45 4c 45 43 54  Text(&s, "SELECT
2e230 20 6e 61 6d 65 20 46 52 4f 4d 20 22 2c 20 30 29   name FROM ", 0)
2e240 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2e250 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
2e260 74 28 26 73 2c 20 22 53 45 4c 45 43 54 20 22 2c  t(&s, "SELECT ",
2e270 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70   0);.        app
2e280 65 6e 64 54 65 78 74 28 26 73 2c 20 7a 44 62 4e  endText(&s, zDbN
2e290 61 6d 65 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20  ame, '\'');.    
2e2a0 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
2e2b0 73 2c 20 22 7c 7c 27 2e 27 7c 7c 6e 61 6d 65 20  s, "||'.'||name 
2e2c0 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20  FROM ", 0);.    
2e2d0 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64    }.      append
2e2e0 54 65 78 74 28 26 73 2c 20 7a 44 62 4e 61 6d 65  Text(&s, zDbName
2e2f0 2c 20 27 22 27 29 3b 0a 20 20 20 20 20 20 61 70  , '"');.      ap
2e300 70 65 6e 64 54 65 78 74 28 26 73 2c 20 22 2e 73  pendText(&s, ".s
2e310 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 2c 20  qlite_master ", 
2e320 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d  0);.      if( c=
2e330 3d 27 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='t' ){.        
2e340 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 22 20  appendText(&s," 
2e350 57 48 45 52 45 20 74 79 70 65 20 49 4e 20 28 27  WHERE type IN ('
2e360 74 61 62 6c 65 27 2c 27 76 69 65 77 27 29 22 0a  table','view')".
2e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e380 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 6e 61        "   AND na
2e390 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c  me NOT LIKE 'sql
2e3a0 69 74 65 5f 25 27 22 0a 20 20 20 20 20 20 20 20  ite_%'".        
2e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
2e3c0 20 20 41 4e 44 20 6e 61 6d 65 20 4c 49 4b 45 20    AND name LIKE 
2e3d0 3f 31 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  ?1", 0);.      }
2e3e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 70  else{.        ap
2e3f0 70 65 6e 64 54 65 78 74 28 26 73 2c 22 20 57 48  pendText(&s," WH
2e400 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65 78 27  ERE type='index'
2e410 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
2e420 20 20 20 20 20 20 20 20 22 20 20 20 41 4e 44 20          "   AND 
2e430 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 3f 31  tbl_name LIKE ?1
2e440 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ", 0);.      }. 
2e450 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71     }.    rc = sq
2e460 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
2e470 53 74 6d 74 29 3b 0a 20 20 20 20 61 70 70 65 6e  Stmt);.    appen
2e480 64 54 65 78 74 28 26 73 2c 20 22 20 4f 52 44 45  dText(&s, " ORDE
2e490 52 20 42 59 20 31 22 2c 20 30 29 3b 0a 20 20 20  R BY 1", 0);.   
2e4a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
2e4b0 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
2e4c0 73 2e 7a 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  s.z, -1, &pStmt,
2e4d0 20 30 29 3b 0a 20 20 20 20 66 72 65 65 54 65 78   0);.    freeTex
2e4e0 74 28 26 73 29 3b 0a 20 20 20 20 69 66 28 20 72  t(&s);.    if( r
2e4f0 63 20 29 20 72 65 74 75 72 6e 20 73 68 65 6c 6c  c ) return shell
2e500 44 61 74 61 62 61 73 65 45 72 72 6f 72 28 70 2d  DatabaseError(p-
2e510 3e 64 62 29 3b 0a 0a 20 20 20 20 2f 2a 20 52 75  >db);..    /* Ru
2e520 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  n the SQL statem
2e530 65 6e 74 20 70 72 65 70 61 72 65 64 20 62 79 20  ent prepared by 
2e540 74 68 65 20 61 62 6f 76 65 20 62 6c 6f 63 6b 2e  the above block.
2e550 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
2e560 74 73 0a 20 20 20 20 2a 2a 20 61 73 20 61 6e 20  ts.    ** as an 
2e570 61 72 72 61 79 20 6f 66 20 6e 75 6c 2d 74 65 72  array of nul-ter
2e580 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67 73 20  minated strings 
2e590 69 6e 20 61 7a 52 65 73 75 6c 74 5b 5d 2e 20 20  in azResult[].  
2e5a0 2a 2f 0a 20 20 20 20 6e 52 6f 77 20 3d 20 6e 41  */.    nRow = nA
2e5b0 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 61 7a  lloc = 0;.    az
2e5c0 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 20 20  Result = 0;.    
2e5d0 69 66 28 20 6e 41 72 67 3e 31 20 29 7b 0a 20 20  if( nArg>1 ){.  
2e5e0 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
2e5f0 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20  _text(pStmt, 1, 
2e600 61 7a 41 72 67 5b 31 5d 2c 20 2d 31 2c 20 53 51  azArg[1], -1, SQ
2e610 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
2e620 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2e630 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
2e640 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20 22 25  ext(pStmt, 1, "%
2e650 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54  ", -1, SQLITE_ST
2e660 41 54 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ATIC);.    }.   
2e670 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f   while( sqlite3_
2e680 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c  step(pStmt)==SQL
2e690 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20  ITE_ROW ){.     
2e6a0 20 69 66 28 20 6e 52 6f 77 3e 3d 6e 41 6c 6c 6f   if( nRow>=nAllo
2e6b0 63 20 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61  c ){.        cha
2e6c0 72 20 2a 2a 61 7a 4e 65 77 3b 0a 20 20 20 20 20  r **azNew;.     
2e6d0 20 20 20 69 6e 74 20 6e 32 20 3d 20 6e 41 6c 6c     int n2 = nAll
2e6e0 6f 63 2a 32 20 2b 20 31 30 3b 0a 20 20 20 20 20  oc*2 + 10;.     
2e6f0 20 20 20 61 7a 4e 65 77 20 3d 20 73 71 6c 69 74     azNew = sqlit
2e700 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 61 7a 52  e3_realloc64(azR
2e710 65 73 75 6c 74 2c 20 73 69 7a 65 6f 66 28 61 7a  esult, sizeof(az
2e720 52 65 73 75 6c 74 5b 30 5d 29 2a 6e 32 29 3b 0a  Result[0])*n2);.
2e730 20 20 20 20 20 20 20 20 69 66 28 20 61 7a 4e 65          if( azNe
2e740 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
2e750 20 20 72 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65    rc = shellNome
2e760 6d 45 72 72 6f 72 28 29 3b 0a 20 20 20 20 20 20  mError();.      
2e770 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2e780 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 41 6c     }.        nAl
2e790 6c 6f 63 20 3d 20 6e 32 3b 0a 20 20 20 20 20 20  loc = n2;.      
2e7a0 20 20 61 7a 52 65 73 75 6c 74 20 3d 20 61 7a 4e    azResult = azN
2e7b0 65 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ew;.      }.    
2e7c0 20 20 61 7a 52 65 73 75 6c 74 5b 6e 52 6f 77 5d    azResult[nRow]
2e7d0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2e7e0 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74 65 33  tf("%s", sqlite3
2e7f0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
2e800 6d 74 2c 20 30 29 29 3b 0a 20 20 20 20 20 20 69  mt, 0));.      i
2e810 66 28 20 30 3d 3d 61 7a 52 65 73 75 6c 74 5b 6e  f( 0==azResult[n
2e820 52 6f 77 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  Row] ){.        
2e830 72 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45  rc = shellNomemE
2e840 72 72 6f 72 28 29 3b 0a 20 20 20 20 20 20 20 20  rror();.        
2e850 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
2e860 20 20 20 20 20 6e 52 6f 77 2b 2b 3b 0a 20 20 20       nRow++;.   
2e870 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74   }.    if( sqlit
2e880 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
2e890 74 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  t)!=SQLITE_OK ){
2e8a0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 68 65 6c  .      rc = shel
2e8b0 6c 44 61 74 61 62 61 73 65 45 72 72 6f 72 28 70  lDatabaseError(p
2e8c0 2d 3e 64 62 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ->db);.    }..  
2e8d0 20 20 2f 2a 20 50 72 65 74 74 79 2d 70 72 69 6e    /* Pretty-prin
2e8e0 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  t the contents o
2e8f0 66 20 61 72 72 61 79 20 61 7a 52 65 73 75 6c 74  f array azResult
2e900 5b 5d 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  [] to the output
2e910 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 3d 3d   */.    if( rc==
2e920 30 20 26 26 20 6e 52 6f 77 3e 30 20 29 7b 0a 20  0 && nRow>0 ){. 
2e930 20 20 20 20 20 69 6e 74 20 6c 65 6e 2c 20 6d 61       int len, ma
2e940 78 6c 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  xlen = 0;.      
2e950 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 20 20 20 20  int i, j;.      
2e960 69 6e 74 20 6e 50 72 69 6e 74 43 6f 6c 2c 20 6e  int nPrintCol, n
2e970 50 72 69 6e 74 52 6f 77 3b 0a 20 20 20 20 20 20  PrintRow;.      
2e980 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 52 6f 77 3b  for(i=0; i<nRow;
2e990 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 6c   i++){.        l
2e9a0 65 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a  en = strlen30(az
2e9b0 52 65 73 75 6c 74 5b 69 5d 29 3b 0a 20 20 20 20  Result[i]);.    
2e9c0 20 20 20 20 69 66 28 20 6c 65 6e 3e 6d 61 78 6c      if( len>maxl
2e9d0 65 6e 20 29 20 6d 61 78 6c 65 6e 20 3d 20 6c 65  en ) maxlen = le
2e9e0 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
2e9f0 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20 38 30 2f   nPrintCol = 80/
2ea00 28 6d 61 78 6c 65 6e 2b 32 29 3b 0a 20 20 20 20  (maxlen+2);.    
2ea10 20 20 69 66 28 20 6e 50 72 69 6e 74 43 6f 6c 3c    if( nPrintCol<
2ea20 31 20 29 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20  1 ) nPrintCol = 
2ea30 31 3b 0a 20 20 20 20 20 20 6e 50 72 69 6e 74 52  1;.      nPrintR
2ea40 6f 77 20 3d 20 28 6e 52 6f 77 20 2b 20 6e 50 72  ow = (nRow + nPr
2ea50 69 6e 74 43 6f 6c 20 2d 20 31 29 2f 6e 50 72 69  intCol - 1)/nPri
2ea60 6e 74 43 6f 6c 3b 0a 20 20 20 20 20 20 66 6f 72  ntCol;.      for
2ea70 28 69 3d 30 3b 20 69 3c 6e 50 72 69 6e 74 52 6f  (i=0; i<nPrintRo
2ea80 77 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  w; i++){.       
2ea90 20 66 6f 72 28 6a 3d 69 3b 20 6a 3c 6e 52 6f 77   for(j=i; j<nRow
2eaa0 3b 20 6a 2b 3d 6e 50 72 69 6e 74 52 6f 77 29 7b  ; j+=nPrintRow){
2eab0 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20  .          char 
2eac0 2a 7a 53 70 20 3d 20 6a 3c 6e 50 72 69 6e 74 52  *zSp = j<nPrintR
2ead0 6f 77 20 3f 20 22 22 20 3a 20 22 20 20 22 3b 0a  ow ? "" : "  ";.
2eae0 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
2eaf0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2eb00 73 25 2d 2a 73 22 2c 20 7a 53 70 2c 20 6d 61 78  s%-*s", zSp, max
2eb10 6c 65 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  len,.           
2eb20 20 20 20 20 20 20 20 20 20 20 20 61 7a 52 65 73             azRes
2eb30 75 6c 74 5b 6a 5d 20 3f 20 61 7a 52 65 73 75 6c  ult[j] ? azResul
2eb40 74 5b 6a 5d 3a 22 22 29 3b 0a 20 20 20 20 20 20  t[j]:"");.      
2eb50 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f    }.        raw_
2eb60 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2eb70 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  \n");.      }.  
2eb80 20 20 7d 0a 0a 20 20 20 20 66 6f 72 28 69 69 3d    }..    for(ii=
2eb90 30 3b 20 69 69 3c 6e 52 6f 77 3b 20 69 69 2b 2b  0; ii<nRow; ii++
2eba0 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61  ) sqlite3_free(a
2ebb0 7a 52 65 73 75 6c 74 5b 69 69 5d 29 3b 0a 20 20  zResult[ii]);.  
2ebc0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
2ebd0 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d 65 6c 73  zResult);.  }els
2ebe0 65 0a 0a 20 20 2f 2a 20 42 65 67 69 6e 20 72 65  e..  /* Begin re
2ebf0 64 69 72 65 63 74 69 6e 67 20 6f 75 74 70 75 74  directing output
2ec00 20 74 6f 20 74 68 65 20 66 69 6c 65 20 22 74 65   to the file "te
2ec10 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 22 20  stcase-out.txt" 
2ec20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20  */.  if( c=='t' 
2ec30 26 26 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b  && strcmp(azArg[
2ec40 30 5d 2c 22 74 65 73 74 63 61 73 65 22 29 3d 3d  0],"testcase")==
2ec50 30 20 29 7b 0a 20 20 20 20 6f 75 74 70 75 74 5f  0 ){.    output_
2ec60 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 70 2d  reset(p);.    p-
2ec70 3e 6f 75 74 20 3d 20 6f 75 74 70 75 74 5f 66 69  >out = output_fi
2ec80 6c 65 5f 6f 70 65 6e 28 22 74 65 73 74 63 61 73  le_open("testcas
2ec90 65 2d 6f 75 74 2e 74 78 74 22 29 3b 0a 20 20 20  e-out.txt");.   
2eca0 20 69 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29   if( p->out==0 )
2ecb0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
2ecc0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
2ecd0 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27  r: cannot open '
2ece0 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74  testcase-out.txt
2ecf0 27 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20  '\n");.    }.   
2ed00 20 69 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b 0a   if( nArg>=2 ){.
2ed10 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
2ed20 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d  printf(sizeof(p-
2ed30 3e 7a 54 65 73 74 63 61 73 65 29 2c 20 70 2d 3e  >zTestcase), p->
2ed40 7a 54 65 73 74 63 61 73 65 2c 20 22 25 73 22 2c  zTestcase, "%s",
2ed50 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
2ed60 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
2ed70 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
2ed80 7a 65 6f 66 28 70 2d 3e 7a 54 65 73 74 63 61 73  zeof(p->zTestcas
2ed90 65 29 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73 65  e), p->zTestcase
2eda0 2c 20 22 3f 22 29 3b 0a 20 20 20 20 7d 0a 20 20  , "?");.    }.  
2edb0 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65 66 20 53  }else..#ifndef S
2edc0 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
2edd0 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
2ede0 20 6e 3e 3d 38 20 26 26 20 73 74 72 6e 63 6d 70   n>=8 && strncmp
2edf0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 65 73 74  (azArg[0], "test
2ee00 63 74 72 6c 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  ctrl", n)==0 ){.
2ee10 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
2ee20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
2ee30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74   const char *zCt
2ee40 72 6c 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61 6d  rlName;   /* Nam
2ee50 65 20 6f 66 20 61 20 74 65 73 74 2d 63 6f 6e 74  e of a test-cont
2ee60 72 6f 6c 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20 20  rol option */.  
2ee70 20 20 20 20 20 69 6e 74 20 63 74 72 6c 43 6f 64       int ctrlCod
2ee80 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
2ee90 20 49 6e 74 65 67 65 72 20 63 6f 64 65 20 66 6f   Integer code fo
2eea0 72 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 2a 2f  r that option */
2eeb0 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  .       const ch
2eec0 61 72 20 2a 7a 55 73 61 67 65 3b 20 20 20 20 20  ar *zUsage;     
2eed0 20 2f 2a 20 55 73 61 67 65 20 6e 6f 74 65 73 20   /* Usage notes 
2eee0 2a 2f 0a 20 20 20 20 7d 20 61 43 74 72 6c 5b 5d  */.    } aCtrl[]
2eef0 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 61 6c   = {.      { "al
2ef00 77 61 79 73 22 2c 20 20 20 20 20 20 20 20 20 20  ways",          
2ef10 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54     SQLITE_TESTCT
2ef20 52 4c 5f 41 4c 57 41 59 53 2c 20 20 20 20 20 20  RL_ALWAYS,      
2ef30 20 20 22 42 4f 4f 4c 45 41 4e 22 20 20 20 20 20    "BOOLEAN"     
2ef40 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
2ef50 7b 20 22 61 73 73 65 72 74 22 2c 20 20 20 20 20  { "assert",     
2ef60 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54          SQLITE_T
2ef70 45 53 54 43 54 52 4c 5f 41 53 53 45 52 54 2c 20  ESTCTRL_ASSERT, 
2ef80 20 20 20 20 20 20 20 22 42 4f 4f 4c 45 41 4e 22         "BOOLEAN"
2ef90 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2efa0 20 20 20 2f 2a 7b 20 22 62 65 6e 69 67 6e 5f 6d     /*{ "benign_m
2efb0 61 6c 6c 6f 63 5f 68 6f 6f 6b 73 22 2c 53 51 4c  alloc_hooks",SQL
2efc0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 42 45 4e  ITE_TESTCTRL_BEN
2efd0 49 47 4e 5f 4d 41 4c 4c 4f 43 5f 48 4f 4f 4b 53  IGN_MALLOC_HOOKS
2efe0 2c 20 22 22 20 20 20 20 20 20 20 20 20 20 7d 2c  , ""          },
2eff0 2a 2f 0a 20 20 20 20 2f 2a 7b 20 22 62 69 74 76  */.    /*{ "bitv
2f000 65 63 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20  ec_test",       
2f010 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2f020 5f 42 49 54 56 45 43 5f 54 45 53 54 2c 20 20 20  _BITVEC_TEST,   
2f030 22 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ""              
2f040 20 20 7d 2c 2a 2f 0a 20 20 20 20 20 20 7b 20 22    },*/.      { "
2f050 62 79 74 65 6f 72 64 65 72 22 2c 20 20 20 20 20  byteorder",     
2f060 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54       SQLITE_TEST
2f070 43 54 52 4c 5f 42 59 54 45 4f 52 44 45 52 2c 20  CTRL_BYTEORDER, 
2f080 20 20 20 20 22 22 20 20 20 20 20 20 20 20 20 20      ""          
2f090 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
2f0a0 2f 2a 7b 20 22 66 61 75 6c 74 5f 69 6e 73 74 61  /*{ "fault_insta
2f0b0 6c 6c 22 2c 20 20 20 20 20 20 53 51 4c 49 54 45  ll",      SQLITE
2f0c0 5f 54 45 53 54 43 54 52 4c 5f 46 41 55 4c 54 5f  _TESTCTRL_FAULT_
2f0d0 49 4e 53 54 41 4c 4c 2c 20 22 22 20 20 20 20 20  INSTALL, ""     
2f0e0 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2a 2f             }, */
2f0f0 0a 20 20 20 20 20 20 7b 20 22 69 6d 70 6f 73 74  .      { "impost
2f100 65 72 22 2c 20 20 20 20 20 20 20 20 20 20 20 53  er",           S
2f110 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49  QLITE_TESTCTRL_I
2f120 4d 50 4f 53 54 45 52 2c 20 20 20 22 53 43 48 45  MPOSTER,   "SCHE
2f130 4d 41 20 4f 4e 2f 4f 46 46 20 52 4f 4f 54 50 41  MA ON/OFF ROOTPA
2f140 47 45 22 7d 2c 0a 23 69 66 64 65 66 20 53 51 4c  GE"},.#ifdef SQL
2f150 49 54 45 5f 4e 5f 4b 45 59 57 4f 52 44 0a 20 20  ITE_N_KEYWORD.  
2f160 20 20 20 20 7b 20 22 69 73 6b 65 79 77 6f 72 64      { "iskeyword
2f170 22 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  ",          SQLI
2f180 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 53 4b 45  TE_TESTCTRL_ISKE
2f190 59 57 4f 52 44 2c 20 20 20 20 20 22 49 44 45 4e  YWORD,     "IDEN
2f1a0 54 49 46 49 45 52 22 20 20 20 20 20 20 20 20 20  TIFIER"         
2f1b0 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20  },.#endif.      
2f1c0 7b 20 22 6c 6f 63 61 6c 74 69 6d 65 5f 66 61 75  { "localtime_fau
2f1d0 6c 74 22 2c 20 20 20 20 53 51 4c 49 54 45 5f 54  lt",    SQLITE_T
2f1e0 45 53 54 43 54 52 4c 5f 4c 4f 43 41 4c 54 49 4d  ESTCTRL_LOCALTIM
2f1f0 45 5f 46 41 55 4c 54 2c 22 42 4f 4f 4c 45 41 4e  E_FAULT,"BOOLEAN
2f200 22 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  "           },. 
2f210 20 20 20 20 20 7b 20 22 6e 65 76 65 72 5f 63 6f       { "never_co
2f220 72 72 75 70 74 22 2c 20 20 20 20 20 20 53 51 4c  rrupt",      SQL
2f230 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e 45 56  ITE_TESTCTRL_NEV
2f240 45 52 5f 43 4f 52 52 55 50 54 2c 20 22 42 4f 4f  ER_CORRUPT, "BOO
2f250 4c 45 41 4e 22 20 20 20 20 20 20 20 20 20 20 20  LEAN"           
2f260 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 6f 70 74   },.      { "opt
2f270 69 6d 69 7a 61 74 69 6f 6e 73 22 2c 20 20 20 20  imizations",    
2f280 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52    SQLITE_TESTCTR
2f290 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
2f2a0 20 22 44 49 53 41 42 4c 45 2d 4d 41 53 4b 22 20   "DISABLE-MASK" 
2f2b0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
2f2c0 20 22 70 65 6e 64 69 6e 67 5f 62 79 74 65 22 2c   "pending_byte",
2f2d0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45         SQLITE_TE
2f2e0 53 54 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f 42  STCTRL_PENDING_B
2f2f0 59 54 45 2c 20 20 22 4f 46 46 53 45 54 20 20 22  YTE,  "OFFSET  "
2f300 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
2f310 20 20 20 20 7b 20 22 70 72 6e 67 5f 72 65 73 65      { "prng_rese
2f320 74 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49  t",         SQLI
2f330 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47  TE_TESTCTRL_PRNG
2f340 5f 52 45 53 45 54 2c 20 20 20 20 22 22 20 20 20  _RESET,    ""   
2f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f360 7d 2c 0a 20 20 20 20 20 20 7b 20 22 70 72 6e 67  },.      { "prng
2f370 5f 72 65 73 74 6f 72 65 22 2c 20 20 20 20 20 20  _restore",      
2f380 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2f390 5f 50 52 4e 47 5f 52 45 53 54 4f 52 45 2c 20 20  _PRNG_RESTORE,  
2f3a0 22 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ""              
2f3b0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
2f3c0 22 70 72 6e 67 5f 73 61 76 65 22 2c 20 20 20 20  "prng_save",    
2f3d0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53        SQLITE_TES
2f3e0 54 43 54 52 4c 5f 50 52 4e 47 5f 53 41 56 45 2c  TCTRL_PRNG_SAVE,
2f3f0 20 20 20 20 20 22 22 20 20 20 20 20 20 20 20 20       ""         
2f400 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2f410 20 20 20 7b 20 22 72 65 73 65 72 76 65 22 2c 20     { "reserve", 
2f420 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
2f430 45 5f 54 45 53 54 43 54 52 4c 5f 52 45 53 45 52  E_TESTCTRL_RESER
2f440 56 45 2c 20 20 20 20 20 20 20 22 42 59 54 45 53  VE,       "BYTES
2f450 2d 4f 46 2d 52 45 53 45 52 56 45 22 20 20 20 7d  -OF-RESERVE"   }
2f460 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74  ,.    };.    int
2f470 20 74 65 73 74 63 74 72 6c 20 3d 20 2d 31 3b 0a   testctrl = -1;.
2f480 20 20 20 20 69 6e 74 20 69 43 74 72 6c 20 3d 20      int iCtrl = 
2f490 2d 31 3b 0a 20 20 20 20 69 6e 74 20 72 63 32 20  -1;.    int rc2 
2f4a0 3d 20 30 3b 20 20 20 20 2f 2a 20 30 3a 20 75 73  = 0;    /* 0: us
2f4b0 61 67 65 2e 20 20 31 3a 20 25 64 20 20 32 3a 20  age.  1: %d  2: 
2f4c0 25 78 20 20 33 3a 20 6e 6f 2d 6f 75 74 70 75 74  %x  3: no-output
2f4d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 73 4f 6b   */.    int isOk
2f4e0 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 69 2c   = 0;.    int i,
2f4f0 20 6e 32 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63   n2;.    const c
2f500 68 61 72 20 2a 7a 43 6d 64 20 3d 20 30 3b 0a 0a  har *zCmd = 0;..
2f510 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
2f520 29 3b 0a 20 20 20 20 7a 43 6d 64 20 3d 20 6e 41  );.    zCmd = nA
2f530 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d  rg>=2 ? azArg[1]
2f540 20 3a 20 22 68 65 6c 70 22 3b 0a 0a 20 20 20 20   : "help";..    
2f550 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  /* The argument 
2f560 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62  can optionally b
2f570 65 67 69 6e 20 77 69 74 68 20 22 2d 22 20 6f 72  egin with "-" or
2f580 20 22 2d 2d 22 20 2a 2f 0a 20 20 20 20 69 66 28   "--" */.    if(
2f590 20 7a 43 6d 64 5b 30 5d 3d 3d 27 2d 27 20 26 26   zCmd[0]=='-' &&
2f5a0 20 7a 43 6d 64 5b 31 5d 20 29 7b 0a 20 20 20 20   zCmd[1] ){.    
2f5b0 20 20 7a 43 6d 64 2b 2b 3b 0a 20 20 20 20 20 20    zCmd++;.      
2f5c0 69 66 28 20 7a 43 6d 64 5b 30 5d 3d 3d 27 2d 27  if( zCmd[0]=='-'
2f5d0 20 26 26 20 7a 43 6d 64 5b 31 5d 20 29 20 7a 43   && zCmd[1] ) zC
2f5e0 6d 64 2b 2b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  md++;.    }..   
2f5f0 20 2f 2a 20 2d 2d 68 65 6c 70 20 6c 69 73 74 73   /* --help lists
2f600 20 61 6c 6c 20 74 65 73 74 2d 63 6f 6e 74 72 6f   all test-contro
2f610 6c 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74  ls */.    if( st
2f620 72 63 6d 70 28 7a 43 6d 64 2c 22 68 65 6c 70 22  rcmp(zCmd,"help"
2f630 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74  )==0 ){.      ut
2f640 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
2f650 2c 20 22 41 76 61 69 6c 61 62 6c 65 20 74 65 73  , "Available tes
2f660 74 2d 63 6f 6e 74 72 6f 6c 73 3a 5c 6e 22 29 3b  t-controls:\n");
2f670 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
2f680 69 3c 41 72 72 61 79 53 69 7a 65 28 61 43 74 72  i<ArraySize(aCtr
2f690 6c 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  l); i++){.      
2f6a0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2f6b0 3e 6f 75 74 2c 20 22 20 20 2e 74 65 73 74 63 74  >out, "  .testct
2f6c0 72 6c 20 25 73 20 25 73 5c 6e 22 2c 0a 20 20 20  rl %s %s\n",.   
2f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6e0 20 61 43 74 72 6c 5b 69 5d 2e 7a 43 74 72 6c 4e   aCtrl[i].zCtrlN
2f6f0 61 6d 65 2c 20 61 43 74 72 6c 5b 69 5d 2e 7a 55  ame, aCtrl[i].zU
2f700 73 61 67 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  sage);.      }. 
2f710 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2f720 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d     goto meta_com
2f730 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d  mand_exit;.    }
2f740 0a 0a 20 20 20 20 2f 2a 20 63 6f 6e 76 65 72 74  ..    /* convert
2f750 20 74 65 73 74 63 74 72 6c 20 74 65 78 74 20 6f   testctrl text o
2f760 70 74 69 6f 6e 20 74 6f 20 76 61 6c 75 65 2e 20  ption to value. 
2f770 61 6c 6c 6f 77 20 61 6e 79 20 75 6e 69 71 75 65  allow any unique
2f780 20 70 72 65 66 69 78 0a 20 20 20 20 2a 2a 20 6f   prefix.    ** o
2f790 66 20 74 68 65 20 6f 70 74 69 6f 6e 20 6e 61 6d  f the option nam
2f7a0 65 2c 20 6f 72 20 61 20 6e 75 6d 65 72 69 63 61  e, or a numerica
2f7b0 6c 20 76 61 6c 75 65 2e 20 2a 2f 0a 20 20 20 20  l value. */.    
2f7c0 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 43  n2 = strlen30(zC
2f7d0 6d 64 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  md);.    for(i=0
2f7e0 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61 43  ; i<ArraySize(aC
2f7f0 74 72 6c 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  trl); i++){.    
2f800 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 43    if( strncmp(zC
2f810 6d 64 2c 20 61 43 74 72 6c 5b 69 5d 2e 7a 43 74  md, aCtrl[i].zCt
2f820 72 6c 4e 61 6d 65 2c 20 6e 32 29 3d 3d 30 20 29  rlName, n2)==0 )
2f830 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 74 65  {.        if( te
2f840 73 74 63 74 72 6c 3c 30 20 29 7b 0a 20 20 20 20  stctrl<0 ){.    
2f850 20 20 20 20 20 20 74 65 73 74 63 74 72 6c 20 3d        testctrl =
2f860 20 61 43 74 72 6c 5b 69 5d 2e 63 74 72 6c 43 6f   aCtrl[i].ctrlCo
2f870 64 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69 43  de;.          iC
2f880 74 72 6c 20 3d 20 69 3b 0a 20 20 20 20 20 20 20  trl = i;.       
2f890 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
2f8a0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
2f8b0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 61 6d  derr, "Error: am
2f8c0 62 69 67 75 6f 75 73 20 74 65 73 74 2d 63 6f 6e  biguous test-con
2f8d0 74 72 6f 6c 3a 20 5c 22 25 73 5c 22 5c 6e 22 0a  trol: \"%s\"\n".
2f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55                "U
2f900 73 65 20 5c 22 2e 74 65 73 74 63 74 72 6c 20 2d  se \".testctrl -
2f910 2d 68 65 6c 70 5c 22 20 66 6f 72 20 68 65 6c 70  -help\" for help
2f920 5c 6e 22 2c 20 7a 43 6d 64 29 3b 0a 20 20 20 20  \n", zCmd);.    
2f930 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2f940 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74          goto met
2f950 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2f960 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2f970 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
2f980 74 65 73 74 63 74 72 6c 3c 30 20 29 7b 0a 20 20  testctrl<0 ){.  
2f990 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2f9a0 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 75  stderr,"Error: u
2f9b0 6e 6b 6e 6f 77 6e 20 74 65 73 74 2d 63 6f 6e 74  nknown test-cont
2f9c0 72 6f 6c 3a 20 25 73 5c 6e 22 0a 20 20 20 20 20  rol: %s\n".     
2f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9e0 20 20 20 20 22 55 73 65 20 5c 22 2e 74 65 73 74      "Use \".test
2f9f0 63 74 72 6c 20 2d 2d 68 65 6c 70 5c 22 20 66 6f  ctrl --help\" fo
2fa00 72 20 68 65 6c 70 5c 6e 22 2c 20 7a 43 6d 64 29  r help\n", zCmd)
2fa10 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2fa20 20 20 20 73 77 69 74 63 68 28 74 65 73 74 63 74     switch(testct
2fa30 72 6c 29 7b 0a 0a 20 20 20 20 20 20 20 20 2f 2a  rl){..        /*
2fa40 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
2fa50 6e 74 72 6f 6c 28 69 6e 74 2c 20 64 62 2c 20 69  ntrol(int, db, i
2fa60 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63  nt) */.        c
2fa70 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
2fa80 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
2fa90 53 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  S:.        case 
2faa0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2fab0 52 45 53 45 52 56 45 3a 0a 20 20 20 20 20 20 20  RESERVE:.       
2fac0 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 33 20 29     if( nArg==3 )
2fad0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  {.            in
2fae0 74 20 6f 70 74 20 3d 20 28 69 6e 74 29 73 74 72  t opt = (int)str
2faf0 74 6f 6c 28 61 7a 41 72 67 5b 32 5d 2c 20 30 2c  tol(azArg[2], 0,
2fb00 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
2fb10 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74   rc2 = sqlite3_t
2fb20 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74  est_control(test
2fb30 63 74 72 6c 2c 20 70 2d 3e 64 62 2c 20 6f 70 74  ctrl, p->db, opt
2fb40 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
2fb50 73 4f 6b 20 3d 20 33 3b 0a 20 20 20 20 20 20 20  sOk = 3;.       
2fb60 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62     }.          b
2fb70 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 2f  reak;..        /
2fb80 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
2fb90 6f 6e 74 72 6f 6c 28 69 6e 74 29 20 2a 2f 0a 20  ontrol(int) */. 
2fba0 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
2fbb0 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47  TE_TESTCTRL_PRNG
2fbc0 5f 53 41 56 45 3a 0a 20 20 20 20 20 20 20 20 63  _SAVE:.        c
2fbd0 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
2fbe0 54 52 4c 5f 50 52 4e 47 5f 52 45 53 54 4f 52 45  TRL_PRNG_RESTORE
2fbf0 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  :.        case S
2fc00 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50  QLITE_TESTCTRL_P
2fc10 52 4e 47 5f 52 45 53 45 54 3a 0a 20 20 20 20 20  RNG_RESET:.     
2fc20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
2fc30 45 53 54 43 54 52 4c 5f 42 59 54 45 4f 52 44 45  ESTCTRL_BYTEORDE
2fc40 52 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  R:.          if(
2fc50 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
2fc60 20 20 20 20 20 20 20 20 72 63 32 20 3d 20 73 71          rc2 = sq
2fc70 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
2fc80 6f 6c 28 74 65 73 74 63 74 72 6c 29 3b 0a 20 20  ol(testctrl);.  
2fc90 20 20 20 20 20 20 20 20 20 20 69 73 4f 6b 20 3d            isOk =
2fca0 20 74 65 73 74 63 74 72 6c 3d 3d 53 51 4c 49 54   testctrl==SQLIT
2fcb0 45 5f 54 45 53 54 43 54 52 4c 5f 42 59 54 45 4f  E_TESTCTRL_BYTEO
2fcc0 52 44 45 52 20 3f 20 31 20 3a 20 33 3b 0a 20 20  RDER ? 1 : 3;.  
2fcd0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2fce0 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20      break;..    
2fcf0 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74      /* sqlite3_t
2fd00 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c  est_control(int,
2fd10 20 75 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20   uint) */.      
2fd20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
2fd30 53 54 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f 42  STCTRL_PENDING_B
2fd40 59 54 45 3a 0a 20 20 20 20 20 20 20 20 20 20 69  YTE:.          i
2fd50 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20  f( nArg==3 ){.  
2fd60 20 20 20 20 20 20 20 20 20 20 75 6e 73 69 67 6e            unsign
2fd70 65 64 20 69 6e 74 20 6f 70 74 20 3d 20 28 75 6e  ed int opt = (un
2fd80 73 69 67 6e 65 64 20 69 6e 74 29 69 6e 74 65 67  signed int)integ
2fd90 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 32 5d  erValue(azArg[2]
2fda0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  );.            r
2fdb0 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73  c2 = sqlite3_tes
2fdc0 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74  t_control(testct
2fdd0 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20 20  rl, opt);.      
2fde0 20 20 20 20 20 20 69 73 4f 6b 20 3d 20 33 3b 0a        isOk = 3;.
2fdf0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2fe00 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20        break;..  
2fe10 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33        /* sqlite3
2fe20 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e  _test_control(in
2fe30 74 2c 20 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20  t, int) */.     
2fe40 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
2fe50 45 53 54 43 54 52 4c 5f 41 53 53 45 52 54 3a 0a  ESTCTRL_ASSERT:.
2fe60 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
2fe70 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 4c 57  ITE_TESTCTRL_ALW
2fe80 41 59 53 3a 0a 20 20 20 20 20 20 20 20 20 20 69  AYS:.          i
2fe90 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20  f( nArg==3 ){.  
2fea0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70            int op
2feb0 74 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65  t = booleanValue
2fec0 28 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20  (azArg[2]);.    
2fed0 20 20 20 20 20 20 20 20 72 63 32 20 3d 20 73 71          rc2 = sq
2fee0 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
2fef0 6f 6c 28 74 65 73 74 63 74 72 6c 2c 20 6f 70 74  ol(testctrl, opt
2ff00 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
2ff10 73 4f 6b 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  sOk = 1;.       
2ff20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62     }.          b
2ff30 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 2f  reak;..        /
2ff40 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
2ff50 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20 69 6e 74 29  ontrol(int, int)
2ff60 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 61 73 65   */.        case
2ff70 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2ff80 5f 4c 4f 43 41 4c 54 49 4d 45 5f 46 41 55 4c 54  _LOCALTIME_FAULT
2ff90 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  :.        case S
2ffa0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e  QLITE_TESTCTRL_N
2ffb0 45 56 45 52 5f 43 4f 52 52 55 50 54 3a 0a 20 20  EVER_CORRUPT:.  
2ffc0 20 20 20 20 20 20 20 20 69 66 28 20 6e 41 72 67          if( nArg
2ffd0 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==3 ){.         
2ffe0 20 20 20 69 6e 74 20 6f 70 74 20 3d 20 62 6f 6f     int opt = boo
2fff0 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
30000 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  2]);.           
30010 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74   rc2 = sqlite3_t
30020 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74  est_control(test
30030 63 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20  ctrl, opt);.    
30040 20 20 20 20 20 20 20 20 69 73 4f 6b 20 3d 20 33          isOk = 3
30050 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
30060 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
30070 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74          /* sqlit
30080 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
30090 69 6e 74 2c 20 63 68 61 72 20 2a 29 20 2a 2f 0a  int, char *) */.
300a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f  #ifdef SQLITE_N_
300b0 4b 45 59 57 4f 52 44 0a 20 20 20 20 20 20 20 20  KEYWORD.        
300c0 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
300d0 43 54 52 4c 5f 49 53 4b 45 59 57 4f 52 44 3a 0a  CTRL_ISKEYWORD:.
300e0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 41            if( nA
300f0 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20  rg==3 ){.       
30100 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
30110 2a 6f 70 74 20 3d 20 61 7a 41 72 67 5b 32 5d 3b  *opt = azArg[2];
30120 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 32  .            rc2
30130 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f   = sqlite3_test_
30140 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74 72 6c  control(testctrl
30150 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20 20 20 20  , opt);.        
30160 20 20 20 20 69 73 4f 6b 20 3d 20 31 3b 0a 20 20      isOk = 1;.  
30170 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
30180 20 20 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69      break;.#endi
30190 66 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  f..        case 
301a0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
301b0 49 4d 50 4f 53 54 45 52 3a 0a 20 20 20 20 20 20  IMPOSTER:.      
301c0 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 35 20      if( nArg==5 
301d0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ){.            r
301e0 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73  c2 = sqlite3_tes
301f0 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74  t_control(testct
30200 72 6c 2c 20 70 2d 3e 64 62 2c 0a 20 20 20 20 20  rl, p->db,.     
30210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30220 20 20 20 20 20 61 7a 41 72 67 5b 32 5d 2c 0a 20       azArg[2],. 
30230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30240 20 20 20 20 20 20 20 20 20 69 6e 74 65 67 65 72           integer
30250 56 61 6c 75 65 28 61 7a 41 72 67 5b 33 5d 29 2c  Value(azArg[3]),
30260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30270 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 65 67             integ
30280 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 34 5d  erValue(azArg[4]
30290 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
302a0 69 73 4f 6b 20 3d 20 33 3b 0a 20 20 20 20 20 20  isOk = 3;.      
302b0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
302c0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
302d0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69 73 4f     }.    if( isO
302e0 6b 3d 3d 30 20 26 26 20 69 43 74 72 6c 3e 3d 30  k==0 && iCtrl>=0
302f0 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
30300 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 55  rintf(p->out, "U
30310 73 61 67 65 3a 20 2e 74 65 73 74 63 74 72 6c 20  sage: .testctrl 
30320 25 73 20 25 73 5c 6e 22 2c 20 7a 43 6d 64 2c 20  %s %s\n", zCmd, 
30330 61 43 74 72 6c 5b 69 43 74 72 6c 5d 2e 7a 55 73  aCtrl[iCtrl].zUs
30340 61 67 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  age);.      rc =
30350 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
30360 28 20 69 73 4f 6b 3d 3d 31 20 29 7b 0a 20 20 20  ( isOk==1 ){.   
30370 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
30380 3e 6f 75 74 2c 20 22 25 64 5c 6e 22 2c 20 72 63  >out, "%d\n", rc
30390 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  2);.    }else if
303a0 28 20 69 73 4f 6b 3d 3d 32 20 29 7b 0a 20 20 20  ( isOk==2 ){.   
303b0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
303c0 3e 6f 75 74 2c 20 22 30 78 25 30 38 78 5c 6e 22  >out, "0x%08x\n"
303d0 2c 20 72 63 32 29 3b 0a 20 20 20 20 7d 0a 20 20  , rc2);.    }.  
303e0 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20  }else.#endif /* 
303f0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
30400 55 4e 54 45 53 54 41 42 4c 45 29 20 2a 2f 0a 0a  UNTESTABLE) */..
30410 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20    if( c=='t' && 
30420 6e 3e 34 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>4 && strncmp(a
30430 7a 41 72 67 5b 30 5d 2c 20 22 74 69 6d 65 6f 75  zArg[0], "timeou
30440 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  t", n)==0 ){.   
30450 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a   open_db(p, 0);.
30460 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79      sqlite3_busy
30470 5f 74 69 6d 65 6f 75 74 28 70 2d 3e 64 62 2c 20  _timeout(p->db, 
30480 6e 41 72 67 3e 3d 32 20 3f 20 28 69 6e 74 29 69  nArg>=2 ? (int)i
30490 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72  ntegerValue(azAr
304a0 67 5b 31 5d 29 20 3a 20 30 29 3b 0a 20 20 7d 65  g[1]) : 0);.  }e
304b0 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 74  lse..  if( c=='t
304c0 27 20 26 26 20 6e 3e 3d 35 20 26 26 20 73 74 72  ' && n>=5 && str
304d0 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
304e0 74 69 6d 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b  timer", n)==0 ){
304f0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32  .    if( nArg==2
30500 20 29 7b 0a 20 20 20 20 20 20 65 6e 61 62 6c 65   ){.      enable
30510 54 69 6d 65 72 20 3d 20 62 6f 6f 6c 65 61 6e 56  Timer = booleanV
30520 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a  alue(azArg[1]);.
30530 20 20 20 20 20 20 69 66 28 20 65 6e 61 62 6c 65        if( enable
30540 54 69 6d 65 72 20 26 26 20 21 48 41 53 5f 54 49  Timer && !HAS_TI
30550 4d 45 52 20 29 7b 0a 20 20 20 20 20 20 20 20 72  MER ){.        r
30560 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
30570 2c 20 22 45 72 72 6f 72 3a 20 74 69 6d 65 72 20  , "Error: timer 
30580 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
30590 20 74 68 69 73 20 73 79 73 74 65 6d 2e 5c 6e 22   this system.\n"
305a0 29 3b 0a 20 20 20 20 20 20 20 20 65 6e 61 62 6c  );.        enabl
305b0 65 54 69 6d 65 72 20 3d 20 30 3b 0a 20 20 20 20  eTimer = 0;.    
305c0 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
305d0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
305e0 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
305f0 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 5c 6e 22  .timer on|off\n"
30600 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
30610 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
30620 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20    if( c=='t' && 
30630 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
30640 2c 20 22 74 72 61 63 65 22 2c 20 6e 29 3d 3d 30  , "trace", n)==0
30650 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   ){.    open_db(
30660 70 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 6e  p, 0);.    if( n
30670 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg!=2 ){.      
30680 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
30690 72 2c 20 22 55 73 61 67 65 3a 20 2e 74 72 61 63  r, "Usage: .trac
306a0 65 20 46 49 4c 45 7c 6f 66 66 5c 6e 22 29 3b 0a  e FILE|off\n");.
306b0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
306c0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
306d0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
306e0 7d 0a 20 20 20 20 6f 75 74 70 75 74 5f 66 69 6c  }.    output_fil
306f0 65 5f 63 6c 6f 73 65 28 70 2d 3e 74 72 61 63 65  e_close(p->trace
30700 4f 75 74 29 3b 0a 20 20 20 20 70 2d 3e 74 72 61  Out);.    p->tra
30710 63 65 4f 75 74 20 3d 20 6f 75 74 70 75 74 5f 66  ceOut = output_f
30720 69 6c 65 5f 6f 70 65 6e 28 61 7a 41 72 67 5b 31  ile_open(azArg[1
30730 5d 29 3b 0a 23 69 66 20 21 64 65 66 69 6e 65 64  ]);.#if !defined
30740 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41  (SQLITE_OMIT_TRA
30750 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  CE) && !defined(
30760 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
30770 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 20 20 20 20  TING_POINT).    
30780 69 66 28 20 70 2d 3e 74 72 61 63 65 4f 75 74 3d  if( p->traceOut=
30790 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
307a0 74 65 33 5f 74 72 61 63 65 5f 76 32 28 70 2d 3e  te3_trace_v2(p->
307b0 64 62 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  db, 0, 0, 0);.  
307c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
307d0 71 6c 69 74 65 33 5f 74 72 61 63 65 5f 76 32 28  qlite3_trace_v2(
307e0 70 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 54 52  p->db, SQLITE_TR
307f0 41 43 45 5f 53 54 4d 54 2c 20 73 71 6c 5f 74 72  ACE_STMT, sql_tr
30800 61 63 65 5f 63 61 6c 6c 62 61 63 6b 2c 70 2d 3e  ace_callback,p->
30810 74 72 61 63 65 4f 75 74 29 3b 0a 20 20 20 20 7d  traceOut);.    }
30820 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 0a  .#endif.  }else.
30830 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52  .#if SQLITE_USER
30840 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
30850 20 20 69 66 28 20 63 3d 3d 27 75 27 20 26 26 20    if( c=='u' && 
30860 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
30870 2c 20 22 75 73 65 72 22 2c 20 6e 29 3d 3d 30 20  , "user", n)==0 
30880 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c  ){.    if( nArg<
30890 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  2 ){.      raw_p
308a0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
308b0 73 61 67 65 3a 20 2e 75 73 65 72 20 53 55 42 43  sage: .user SUBC
308c0 4f 4d 4d 41 4e 44 20 2e 2e 2e 5c 6e 22 29 3b 0a  OMMAND ...\n");.
308d0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
308e0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
308f0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
30900 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  }.    open_db(p,
30910 20 30 29 3b 0a 20 20 20 20 69 66 28 20 73 74 72   0);.    if( str
30920 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 6f  cmp(azArg[1],"lo
30930 67 69 6e 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  gin")==0 ){.    
30940 20 20 69 66 28 20 6e 41 72 67 21 3d 34 20 29 7b    if( nArg!=4 ){
30950 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
30960 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
30970 67 65 3a 20 2e 75 73 65 72 20 6c 6f 67 69 6e 20  ge: .user login 
30980 55 53 45 52 20 50 41 53 53 57 4f 52 44 5c 6e 22  USER PASSWORD\n"
30990 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
309a0 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  1;.        goto 
309b0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
309c0 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
309d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73   rc = sqlite3_us
309e0 65 72 5f 61 75 74 68 65 6e 74 69 63 61 74 65 28  er_authenticate(
309f0 70 2d 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d 2c  p->db, azArg[2],
30a00 20 61 7a 41 72 67 5b 33 5d 2c 0a 20 20 20 20 20   azArg[3],.     
30a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
30a30 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72 67  int)strlen(azArg
30a40 5b 33 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28  [3]));.      if(
30a50 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75   rc ){.        u
30a60 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
30a70 72 2c 20 22 41 75 74 68 65 6e 74 69 63 61 74 69  r, "Authenticati
30a80 6f 6e 20 66 61 69 6c 65 64 20 66 6f 72 20 75 73  on failed for us
30a90 65 72 20 25 73 5c 6e 22 2c 20 61 7a 41 72 67 5b  er %s\n", azArg[
30aa0 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  2]);.        rc 
30ab0 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 1;.      }.   
30ac0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
30ad0 70 28 61 7a 41 72 67 5b 31 5d 2c 22 61 64 64 22  p(azArg[1],"add"
30ae0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
30af0 28 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20 20 20  ( nArg!=5 ){.   
30b00 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
30b10 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
30b20 2e 75 73 65 72 20 61 64 64 20 55 53 45 52 20 50  .user add USER P
30b30 41 53 53 57 4f 52 44 20 49 53 41 44 4d 49 4e 5c  ASSWORD ISADMIN\
30b40 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  n");.        rc 
30b50 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 1;.        got
30b60 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
30b70 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  xit;.      }.   
30b80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
30b90 75 73 65 72 5f 61 64 64 28 70 2d 3e 64 62 2c 20  user_add(p->db, 
30ba0 61 7a 41 72 67 5b 32 5d 2c 0a 20 20 20 20 20 20  azArg[2],.      
30bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30bc0 20 20 20 20 20 20 61 7a 41 72 67 5b 33 5d 2c 20        azArg[3], 
30bd0 28 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72  (int)strlen(azAr
30be0 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20 20 20 20  g[3]),.         
30bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c00 20 20 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28     booleanValue(
30c10 61 7a 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20 20  azArg[4]));.    
30c20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
30c30 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
30c40 74 64 65 72 72 2c 20 22 55 73 65 72 2d 41 64 64  tderr, "User-Add
30c50 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c 20   failed: %d\n", 
30c60 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  rc);.        rc 
30c70 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 1;.      }.   
30c80 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
30c90 70 28 61 7a 41 72 67 5b 31 5d 2c 22 65 64 69 74  p(azArg[1],"edit
30ca0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  ")==0 ){.      i
30cb0 66 28 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20 20  f( nArg!=5 ){.  
30cc0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
30cd0 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
30ce0 20 2e 75 73 65 72 20 65 64 69 74 20 55 53 45 52   .user edit USER
30cf0 20 50 41 53 53 57 4f 52 44 20 49 53 41 44 4d 49   PASSWORD ISADMI
30d00 4e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72  N\n");.        r
30d10 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67  c = 1;.        g
30d20 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
30d30 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20  _exit;.      }. 
30d40 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
30d50 33 5f 75 73 65 72 5f 63 68 61 6e 67 65 28 70 2d  3_user_change(p-
30d60 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d 2c 0a 20  >db, azArg[2],. 
30d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d80 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
30d90 72 67 5b 33 5d 2c 20 28 69 6e 74 29 73 74 72 6c  rg[3], (int)strl
30da0 65 6e 28 61 7a 41 72 67 5b 33 5d 29 2c 0a 20 20  en(azArg[3]),.  
30db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30dc0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
30dd0 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 34  eanValue(azArg[4
30de0 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  ]));.      if( r
30df0 63 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  c ){.        raw
30e00 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
30e10 22 55 73 65 72 2d 45 64 69 74 20 66 61 69 6c 65  "User-Edit faile
30e20 64 3a 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20  d: %d\n", rc);. 
30e30 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
30e40 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
30e50 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72   if( strcmp(azAr
30e60 67 5b 31 5d 2c 22 64 65 6c 65 74 65 22 29 3d 3d  g[1],"delete")==
30e70 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  0 ){.      if( n
30e80 41 72 67 21 3d 33 20 29 7b 0a 20 20 20 20 20 20  Arg!=3 ){.      
30e90 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
30ea0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73  err, "Usage: .us
30eb0 65 72 20 64 65 6c 65 74 65 20 55 53 45 52 5c 6e  er delete USER\n
30ec0 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ");.        rc =
30ed0 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   1;.        goto
30ee0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
30ef0 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  it;.      }.    
30f00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75    rc = sqlite3_u
30f10 73 65 72 5f 64 65 6c 65 74 65 28 70 2d 3e 64 62  ser_delete(p->db
30f20 2c 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20  , azArg[2]);.   
30f30 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
30f40 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
30f50 73 74 64 65 72 72 2c 20 22 55 73 65 72 2d 44 65  stderr, "User-De
30f60 6c 65 74 65 20 66 61 69 6c 65 64 3a 20 25 64 5c  lete failed: %d\
30f70 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20  n", rc);.       
30f80 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d   rc = 1;.      }
30f90 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
30fa0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
30fb0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73  err, "Usage: .us
30fc0 65 72 20 6c 6f 67 69 6e 7c 61 64 64 7c 65 64 69  er login|add|edi
30fd0 74 7c 64 65 6c 65 74 65 20 2e 2e 2e 5c 6e 22 29  t|delete ...\n")
30fe0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
30ff0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
31000 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
31010 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
31020 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
31030 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
31040 20 2a 2f 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76   */..  if( c=='v
31050 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
31060 72 67 5b 30 5d 2c 20 22 76 65 72 73 69 6f 6e 22  rg[0], "version"
31070 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75  , n)==0 ){.    u
31080 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
31090 74 2c 20 22 53 51 4c 69 74 65 20 25 73 20 25 73  t, "SQLite %s %s
310a0 5c 6e 22 20 2f 2a 65 78 74 72 61 2d 76 65 72 73  \n" /*extra-vers
310b0 69 6f 6e 2d 69 6e 66 6f 2a 2f 2c 0a 20 20 20 20  ion-info*/,.    
310c0 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 62 76      sqlite3_libv
310d0 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74 65  ersion(), sqlite
310e0 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a 20  3_sourceid());. 
310f0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
31100 3d 27 76 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='v' && strncmp(
31110 61 7a 41 72 67 5b 30 5d 2c 20 22 76 66 73 69 6e  azArg[0], "vfsin
31120 66 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  fo", n)==0 ){.  
31130 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
31140 62 4e 61 6d 65 20 3d 20 6e 41 72 67 3d 3d 32 20  bName = nArg==2 
31150 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d 61  ? azArg[1] : "ma
31160 69 6e 22 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  in";.    sqlite3
31170 5f 76 66 73 20 2a 70 56 66 73 20 3d 20 30 3b 0a  _vfs *pVfs = 0;.
31180 20 20 20 20 69 66 28 20 70 2d 3e 64 62 20 29 7b      if( p->db ){
31190 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
311a0 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64  ile_control(p->d
311b0 62 2c 20 7a 44 62 4e 61 6d 65 2c 20 53 51 4c 49  b, zDbName, SQLI
311c0 54 45 5f 46 43 4e 54 4c 5f 56 46 53 5f 50 4f 49  TE_FCNTL_VFS_POI
311d0 4e 54 45 52 2c 20 26 70 56 66 73 29 3b 0a 20 20  NTER, &pVfs);.  
311e0 20 20 20 20 69 66 28 20 70 56 66 73 20 29 7b 0a      if( pVfs ){.
311f0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
31200 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73  ntf(p->out, "vfs
31210 2e 7a 4e 61 6d 65 20 20 20 20 20 20 3d 20 5c 22  .zName      = \"
31220 25 73 5c 22 5c 6e 22 2c 20 70 56 66 73 2d 3e 7a  %s\"\n", pVfs->z
31230 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 72  Name);.        r
31240 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
31250 2c 20 22 76 66 73 2e 69 56 65 72 73 69 6f 6e 20  , "vfs.iVersion 
31260 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d    = %d\n", pVfs-
31270 3e 69 56 65 72 73 69 6f 6e 29 3b 0a 20 20 20 20  >iVersion);.    
31280 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
31290 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 73 7a 4f 73  ->out, "vfs.szOs
312a0 46 69 6c 65 20 20 20 3d 20 25 64 5c 6e 22 2c 20  File   = %d\n", 
312b0 70 56 66 73 2d 3e 73 7a 4f 73 46 69 6c 65 29 3b  pVfs->szOsFile);
312c0 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
312d0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73  ntf(p->out, "vfs
312e0 2e 6d 78 50 61 74 68 6e 61 6d 65 20 3d 20 25 64  .mxPathname = %d
312f0 5c 6e 22 2c 20 70 56 66 73 2d 3e 6d 78 50 61 74  \n", pVfs->mxPat
31300 68 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a  hname);.      }.
31310 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
31320 20 69 66 28 20 63 3d 3d 27 76 27 20 26 26 20 73   if( c=='v' && s
31330 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
31340 20 22 76 66 73 6c 69 73 74 22 2c 20 6e 29 3d 3d   "vfslist", n)==
31350 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
31360 5f 76 66 73 20 2a 70 56 66 73 3b 0a 20 20 20 20  _vfs *pVfs;.    
31370 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 43 75  sqlite3_vfs *pCu
31380 72 72 65 6e 74 20 3d 20 30 3b 0a 20 20 20 20 69  rrent = 0;.    i
31390 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20 20  f( p->db ){.    
313a0 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63    sqlite3_file_c
313b0 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 22 6d  ontrol(p->db, "m
313c0 61 69 6e 22 2c 20 53 51 4c 49 54 45 5f 46 43 4e  ain", SQLITE_FCN
313d0 54 4c 5f 56 46 53 5f 50 4f 49 4e 54 45 52 2c 20  TL_VFS_POINTER, 
313e0 26 70 43 75 72 72 65 6e 74 29 3b 0a 20 20 20 20  &pCurrent);.    
313f0 7d 0a 20 20 20 20 66 6f 72 28 70 56 66 73 3d 73  }.    for(pVfs=s
31400 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28  qlite3_vfs_find(
31410 30 29 3b 20 70 56 66 73 3b 20 70 56 66 73 3d 70  0); pVfs; pVfs=p
31420 56 66 73 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  Vfs->pNext){.   
31430 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
31440 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 7a 4e 61 6d  ->out, "vfs.zNam
31450 65 20 20 20 20 20 20 3d 20 5c 22 25 73 5c 22 25  e      = \"%s\"%
31460 73 5c 6e 22 2c 20 70 56 66 73 2d 3e 7a 4e 61 6d  s\n", pVfs->zNam
31470 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 56  e,.           pV
31480 66 73 3d 3d 70 43 75 72 72 65 6e 74 20 3f 20 22  fs==pCurrent ? "
31490 20 20 3c 2d 2d 2d 20 43 55 52 52 45 4e 54 22 20    <--- CURRENT" 
314a0 3a 20 22 22 29 3b 0a 20 20 20 20 20 20 72 61 77  : "");.      raw
314b0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
314c0 22 76 66 73 2e 69 56 65 72 73 69 6f 6e 20 20 20  "vfs.iVersion   
314d0 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 69  = %d\n", pVfs->i
314e0 56 65 72 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20  Version);.      
314f0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
31500 74 2c 20 22 76 66 73 2e 73 7a 4f 73 46 69 6c 65  t, "vfs.szOsFile
31510 20 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73     = %d\n", pVfs
31520 2d 3e 73 7a 4f 73 46 69 6c 65 29 3b 0a 20 20 20  ->szOsFile);.   
31530 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
31540 3e 6f 75 74 2c 20 22 76 66 73 2e 6d 78 50 61 74  >out, "vfs.mxPat
31550 68 6e 61 6d 65 20 3d 20 25 64 5c 6e 22 2c 20 70  hname = %d\n", p
31560 56 66 73 2d 3e 6d 78 50 61 74 68 6e 61 6d 65 29  Vfs->mxPathname)
31570 3b 0a 20 20 20 20 20 20 69 66 28 20 70 56 66 73  ;.      if( pVfs
31580 2d 3e 70 4e 65 78 74 20 29 7b 0a 20 20 20 20 20  ->pNext ){.     
31590 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
315a0 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d  >out, "---------
315b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
315c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a  ----------\n");.
315d0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
315e0 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
315f0 27 76 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'v' && strncmp(a
31600 7a 41 72 67 5b 30 5d 2c 20 22 76 66 73 6e 61 6d  zArg[0], "vfsnam
31610 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  e", n)==0 ){.   
31620 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
31630 4e 61 6d 65 20 3d 20 6e 41 72 67 3d 3d 32 20 3f  Name = nArg==2 ?
31640 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d 61 69   azArg[1] : "mai
31650 6e 22 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 56  n";.    char *zV
31660 66 73 4e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20  fsName = 0;.    
31670 69 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20  if( p->db ){.   
31680 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f     sqlite3_file_
31690 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 7a  control(p->db, z
316a0 44 62 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46  DbName, SQLITE_F
316b0 43 4e 54 4c 5f 56 46 53 4e 41 4d 45 2c 20 26 7a  CNTL_VFSNAME, &z
316c0 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  VfsName);.      
316d0 69 66 28 20 7a 56 66 73 4e 61 6d 65 20 29 7b 0a  if( zVfsName ){.
316e0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
316f0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c  ntf(p->out, "%s\
31700 6e 22 2c 20 7a 56 66 73 4e 61 6d 65 29 3b 0a 20  n", zVfsName);. 
31710 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
31720 72 65 65 28 7a 56 66 73 4e 61 6d 65 29 3b 0a 20  ree(zVfsName);. 
31730 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
31740 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e 65  else..#if define
31750 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
31760 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
31770 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45 54 52  E_ENABLE_WHERETR
31780 41 43 45 29 0a 20 20 69 66 28 20 63 3d 3d 27 77  ACE).  if( c=='w
31790 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
317a0 72 67 5b 30 5d 2c 20 22 77 68 65 72 65 74 72 61  rg[0], "wheretra
317b0 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ce", n)==0 ){.  
317c0 20 20 73 71 6c 69 74 65 33 57 68 65 72 65 54 72    sqlite3WhereTr
317d0 61 63 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f 20  ace = nArg>=2 ? 
317e0 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
317f0 72 67 5b 31 5d 29 20 3a 20 30 78 66 66 3b 0a 20  rg[1]) : 0xff;. 
31800 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
31810 20 69 66 28 20 63 3d 3d 27 77 27 20 26 26 20 73   if( c=='w' && s
31820 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
31830 20 22 77 69 64 74 68 22 2c 20 6e 29 3d 3d 30 20   "width", n)==0 
31840 29 7b 0a 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20  ){.    int j;.  
31850 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3c 3d    assert( nArg<=
31860 41 72 72 61 79 53 69 7a 65 28 61 7a 41 72 67 29  ArraySize(azArg)
31870 20 29 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 31 3b   );.    for(j=1;
31880 20 6a 3c 6e 41 72 67 20 26 26 20 6a 3c 41 72 72   j<nArg && j<Arr
31890 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 57 69 64  aySize(p->colWid
318a0 74 68 29 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  th); j++){.     
318b0 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 6a 2d 31   p->colWidth[j-1
318c0 5d 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72  ] = (int)integer
318d0 56 61 6c 75 65 28 61 7a 41 72 67 5b 6a 5d 29 3b  Value(azArg[j]);
318e0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
318f0 20 20 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69    {.    utf8_pri
31900 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
31910 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d  or: unknown comm
31920 61 6e 64 20 6f 72 20 69 6e 76 61 6c 69 64 20 61  and or invalid a
31930 72 67 75 6d 65 6e 74 73 3a 20 22 0a 20 20 20 20  rguments: ".    
31940 20 20 22 20 5c 22 25 73 5c 22 2e 20 45 6e 74 65    " \"%s\". Ente
31950 72 20 5c 22 2e 68 65 6c 70 5c 22 20 66 6f 72 20  r \".help\" for 
31960 68 65 6c 70 5c 6e 22 2c 20 61 7a 41 72 67 5b 30  help\n", azArg[0
31970 5d 29 3b 0a 20 20 20 20 72 63 20 3d 20 31 3b 0a  ]);.    rc = 1;.
31980 20 20 7d 0a 0a 6d 65 74 61 5f 63 6f 6d 6d 61 6e    }..meta_comman
31990 64 5f 65 78 69 74 3a 0a 20 20 69 66 28 20 70 2d  d_exit:.  if( p-
319a0 3e 6f 75 74 43 6f 75 6e 74 20 29 7b 0a 20 20 20  >outCount ){.   
319b0 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 2d 2d 3b 0a   p->outCount--;.
319c0 20 20 20 20 69 66 28 20 70 2d 3e 6f 75 74 43 6f      if( p->outCo
319d0 75 6e 74 3d 3d 30 20 29 20 6f 75 74 70 75 74 5f  unt==0 ) output_
319e0 72 65 73 65 74 28 70 29 3b 0a 20 20 7d 0a 20 20  reset(p);.  }.  
319f0 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
31a00 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20  .** Return TRUE 
31a10 69 66 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 20 6f  if a semicolon o
31a20 63 63 75 72 73 20 61 6e 79 77 68 65 72 65 20 69  ccurs anywhere i
31a30 6e 20 74 68 65 20 66 69 72 73 74 20 4e 20 63 68  n the first N ch
31a40 61 72 61 63 74 65 72 73 0a 2a 2a 20 6f 66 20 73  aracters.** of s
31a50 74 72 69 6e 67 20 7a 5b 5d 2e 0a 2a 2f 0a 73 74  tring z[]..*/.st
31a60 61 74 69 63 20 69 6e 74 20 6c 69 6e 65 5f 63 6f  atic int line_co
31a70 6e 74 61 69 6e 73 5f 73 65 6d 69 63 6f 6c 6f 6e  ntains_semicolon
31a80 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
31a90 69 6e 74 20 4e 29 7b 0a 20 20 69 6e 74 20 69 3b  int N){.  int i;
31aa0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 3b  .  for(i=0; i<N;
31ab0 20 69 2b 2b 29 7b 20 20 69 66 28 20 7a 5b 69 5d   i++){  if( z[i]
31ac0 3d 3d 27 3b 27 20 29 20 72 65 74 75 72 6e 20 31  ==';' ) return 1
31ad0 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a  ; }.  return 0;.
31ae0 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  }../*.** Test to
31af0 20 73 65 65 20 69 66 20 61 20 6c 69 6e 65 20 63   see if a line c
31b00 6f 6e 73 69 73 74 73 20 65 6e 74 69 72 65 6c 79  onsists entirely
31b10 20 6f 66 20 77 68 69 74 65 73 70 61 63 65 2e 0a   of whitespace..
31b20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 5f 61  */.static int _a
31b30 6c 6c 5f 77 68 69 74 65 73 70 61 63 65 28 63 6f  ll_whitespace(co
31b40 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20  nst char *z){.  
31b50 66 6f 72 28 3b 20 2a 7a 3b 20 7a 2b 2b 29 7b 0a  for(; *z; z++){.
31b60 20 20 20 20 69 66 28 20 49 73 53 70 61 63 65 28      if( IsSpace(
31b70 7a 5b 30 5d 29 20 29 20 63 6f 6e 74 69 6e 75 65  z[0]) ) continue
31b80 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2f  ;.    if( *z=='/
31b90 27 20 26 26 20 7a 5b 31 5d 3d 3d 27 2a 27 20 29  ' && z[1]=='*' )
31ba0 7b 0a 20 20 20 20 20 20 7a 20 2b 3d 20 32 3b 0a  {.      z += 2;.
31bb0 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20        while( *z 
31bc0 26 26 20 28 2a 7a 21 3d 27 2a 27 20 7c 7c 20 7a  && (*z!='*' || z
31bd0 5b 31 5d 21 3d 27 2f 27 29 20 29 7b 20 7a 2b 2b  [1]!='/') ){ z++
31be0 3b 20 7d 0a 20 20 20 20 20 20 69 66 28 20 2a 7a  ; }.      if( *z
31bf0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
31c00 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20        z++;.     
31c10 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d   continue;.    }
31c20 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27  .    if( *z=='-'
31c30 20 26 26 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b   && z[1]=='-' ){
31c40 0a 20 20 20 20 20 20 7a 20 2b 3d 20 32 3b 0a 20  .      z += 2;. 
31c50 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 26       while( *z &
31c60 26 20 2a 7a 21 3d 27 5c 6e 27 20 29 7b 20 7a 2b  & *z!='\n' ){ z+
31c70 2b 3b 20 7d 0a 20 20 20 20 20 20 69 66 28 20 2a  +; }.      if( *
31c80 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b  z==0 ) return 1;
31c90 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b  .      continue;
31ca0 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
31cb0 6e 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  n 0;.  }.  retur
31cc0 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  n 1;.}../*.** Re
31cd0 74 75 72 6e 20 54 52 55 45 20 69 66 20 74 68 65  turn TRUE if the
31ce0 20 6c 69 6e 65 20 74 79 70 65 64 20 69 6e 20 69   line typed in i
31cf0 73 20 61 6e 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  s an SQL command
31d00 20 74 65 72 6d 69 6e 61 74 6f 72 20 6f 74 68 65   terminator othe
31d10 72 0a 2a 2a 20 74 68 61 6e 20 61 20 73 65 6d 69  r.** than a semi
31d20 2d 63 6f 6c 6f 6e 2e 20 20 54 68 65 20 53 51 4c  -colon.  The SQL
31d30 20 53 65 72 76 65 72 20 73 74 79 6c 65 20 22 67   Server style "g
31d40 6f 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e  o" command is un
31d50 64 65 72 73 74 6f 6f 64 0a 2a 2a 20 61 73 20 69  derstood.** as i
31d60 73 20 74 68 65 20 4f 72 61 63 6c 65 20 22 2f 22  s the Oracle "/"
31d70 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
31d80 6c 69 6e 65 5f 69 73 5f 63 6f 6d 6d 61 6e 64 5f  line_is_command_
31d90 74 65 72 6d 69 6e 61 74 6f 72 28 63 6f 6e 73 74  terminator(const
31da0 20 63 68 61 72 20 2a 7a 4c 69 6e 65 29 7b 0a 20   char *zLine){. 
31db0 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28   while( IsSpace(
31dc0 7a 4c 69 6e 65 5b 30 5d 29 20 29 7b 20 7a 4c 69  zLine[0]) ){ zLi
31dd0 6e 65 2b 2b 3b 20 7d 3b 0a 20 20 69 66 28 20 7a  ne++; };.  if( z
31de0 4c 69 6e 65 5b 30 5d 3d 3d 27 2f 27 20 26 26 20  Line[0]=='/' && 
31df0 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 65 28  _all_whitespace(
31e00 26 7a 4c 69 6e 65 5b 31 5d 29 20 29 7b 0a 20 20  &zLine[1]) ){.  
31e10 20 20 72 65 74 75 72 6e 20 31 3b 20 20 2f 2a 20    return 1;  /* 
31e20 4f 72 61 63 6c 65 20 2a 2f 0a 20 20 7d 0a 20 20  Oracle */.  }.  
31e30 69 66 28 20 54 6f 4c 6f 77 65 72 28 7a 4c 69 6e  if( ToLower(zLin
31e40 65 5b 30 5d 29 3d 3d 27 67 27 20 26 26 20 54 6f  e[0])=='g' && To
31e50 4c 6f 77 65 72 28 7a 4c 69 6e 65 5b 31 5d 29 3d  Lower(zLine[1])=
31e60 3d 27 6f 27 0a 20 20 20 20 20 20 20 20 20 26 26  ='o'.         &&
31e70 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 65   _all_whitespace
31e80 28 26 7a 4c 69 6e 65 5b 32 5d 29 20 29 7b 0a 20  (&zLine[2]) ){. 
31e90 20 20 20 72 65 74 75 72 6e 20 31 3b 20 20 2f 2a     return 1;  /*
31ea0 20 53 51 4c 20 53 65 72 76 65 72 20 2a 2f 0a 20   SQL Server */. 
31eb0 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
31ec0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
31ed0 72 75 65 20 69 66 20 7a 53 71 6c 20 69 73 20 61  rue if zSql is a
31ee0 20 63 6f 6d 70 6c 65 74 65 20 53 51 4c 20 73 74   complete SQL st
31ef0 61 74 65 6d 65 6e 74 2e 20 20 52 65 74 75 72 6e  atement.  Return
31f00 20 66 61 6c 73 65 20 69 66 20 69 74 0a 2a 2a 20   false if it.** 
31f10 65 6e 64 73 20 69 6e 20 74 68 65 20 6d 69 64 64  ends in the midd
31f20 6c 65 20 6f 66 20 61 20 73 74 72 69 6e 67 20 6c  le of a string l
31f30 69 74 65 72 61 6c 20 6f 72 20 43 2d 73 74 79 6c  iteral or C-styl
31f40 65 20 63 6f 6d 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  e comment..*/.st
31f50 61 74 69 63 20 69 6e 74 20 6c 69 6e 65 5f 69 73  atic int line_is
31f60 5f 63 6f 6d 70 6c 65 74 65 28 63 68 61 72 20 2a  _complete(char *
31f70 7a 53 71 6c 2c 20 69 6e 74 20 6e 53 71 6c 29 7b  zSql, int nSql){
31f80 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28  .  int rc;.  if(
31f90 20 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75 72   zSql==0 ) retur
31fa0 6e 20 31 3b 0a 20 20 7a 53 71 6c 5b 6e 53 71 6c  n 1;.  zSql[nSql
31fb0 5d 20 3d 20 27 3b 27 3b 0a 20 20 7a 53 71 6c 5b  ] = ';';.  zSql[
31fc0 6e 53 71 6c 2b 31 5d 20 3d 20 30 3b 0a 20 20 72  nSql+1] = 0;.  r
31fd0 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  c = sqlite3_comp
31fe0 6c 65 74 65 28 7a 53 71 6c 29 3b 0a 20 20 7a 53  lete(zSql);.  zS
31ff0 71 6c 5b 6e 53 71 6c 5d 20 3d 20 30 3b 0a 20 20  ql[nSql] = 0;.  
32000 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
32010 0a 2a 2a 20 52 75 6e 20 61 20 73 69 6e 67 6c 65  .** Run a single
32020 20 6c 69 6e 65 20 6f 66 20 53 51 4c 0a 2a 2f 0a   line of SQL.*/.
32030 73 74 61 74 69 63 20 69 6e 74 20 72 75 6e 4f 6e  static int runOn
32040 65 53 71 6c 4c 69 6e 65 28 53 68 65 6c 6c 53 74  eSqlLine(ShellSt
32050 61 74 65 20 2a 70 2c 20 63 68 61 72 20 2a 7a 53  ate *p, char *zS
32060 71 6c 2c 20 46 49 4c 45 20 2a 69 6e 2c 20 69 6e  ql, FILE *in, in
32070 74 20 73 74 61 72 74 6c 69 6e 65 29 7b 0a 20 20  t startline){.  
32080 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a  int rc;.  char *
32090 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20  zErrMsg = 0;..  
320a0 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
320b0 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c 61   if( ShellHasFla
320c0 67 28 70 2c 53 48 46 4c 47 5f 42 61 63 6b 73 6c  g(p,SHFLG_Backsl
320d0 61 73 68 29 20 29 20 72 65 73 6f 6c 76 65 5f 62  ash) ) resolve_b
320e0 61 63 6b 73 6c 61 73 68 65 73 28 7a 53 71 6c 29  ackslashes(zSql)
320f0 3b 0a 20 20 42 45 47 49 4e 5f 54 49 4d 45 52 3b  ;.  BEGIN_TIMER;
32100 0a 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65 78  .  rc = shell_ex
32110 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  ec(p->db, zSql, 
32120 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20  shell_callback, 
32130 70 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  p, &zErrMsg);.  
32140 45 4e 44 5f 54 49 4d 45 52 3b 0a 20 20 69 66 28  END_TIMER;.  if(
32150 20 72 63 20 7c 7c 20 7a 45 72 72 4d 73 67 20 29   rc || zErrMsg )
32160 7b 0a 20 20 20 20 63 68 61 72 20 7a 50 72 65 66  {.    char zPref
32170 69 78 5b 31 30 30 5d 3b 0a 20 20 20 20 69 66 28  ix[100];.    if(
32180 20 69 6e 21 3d 30 20 7c 7c 20 21 73 74 64 69 6e   in!=0 || !stdin
32190 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20  _is_interactive 
321a0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
321b0 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
321c0 28 7a 50 72 65 66 69 78 29 2c 20 7a 50 72 65 66  (zPrefix), zPref
321d0 69 78 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ix,.            
321e0 20 20 20 20 20 20 20 20 20 20 20 22 45 72 72 6f             "Erro
321f0 72 3a 20 6e 65 61 72 20 6c 69 6e 65 20 25 64 3a  r: near line %d:
32200 22 2c 20 73 74 61 72 74 6c 69 6e 65 29 3b 0a 20  ", startline);. 
32210 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
32220 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
32230 28 73 69 7a 65 6f 66 28 7a 50 72 65 66 69 78 29  (sizeof(zPrefix)
32240 2c 20 7a 50 72 65 66 69 78 2c 20 22 45 72 72 6f  , zPrefix, "Erro
32250 72 3a 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  r:");.    }.    
32260 69 66 28 20 7a 45 72 72 4d 73 67 21 3d 30 20 29  if( zErrMsg!=0 )
32270 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
32280 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 20  ntf(stderr, "%s 
32290 25 73 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c 20  %s\n", zPrefix, 
322a0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20  zErrMsg);.      
322b0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
322c0 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 7a 45 72  rMsg);.      zEr
322d0 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d 65  rMsg = 0;.    }e
322e0 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  lse{.      utf8_
322f0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
32300 25 73 20 25 73 5c 6e 22 2c 20 7a 50 72 65 66 69  %s %s\n", zPrefi
32310 78 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  x, sqlite3_errms
32320 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 7d  g(p->db));.    }
32330 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
32340 20 7d 65 6c 73 65 20 69 66 28 20 53 68 65 6c 6c   }else if( Shell
32350 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47  HasFlag(p, SHFLG
32360 5f 43 6f 75 6e 74 43 68 61 6e 67 65 73 29 20 29  _CountChanges) )
32370 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
32380 28 70 2d 3e 6f 75 74 2c 20 22 63 68 61 6e 67 65  (p->out, "change
32390 73 3a 20 25 33 64 20 20 20 74 6f 74 61 6c 5f 63  s: %3d   total_c
323a0 68 61 6e 67 65 73 3a 20 25 64 5c 6e 22 2c 0a 20  hanges: %d\n",. 
323b0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
323c0 65 33 5f 63 68 61 6e 67 65 73 28 70 2d 3e 64 62  e3_changes(p->db
323d0 29 2c 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  ), sqlite3_total
323e0 5f 63 68 61 6e 67 65 73 28 70 2d 3e 64 62 29 29  _changes(p->db))
323f0 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  ;.  }.  return 0
32400 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64  ;.}.../*.** Read
32410 20 69 6e 70 75 74 20 66 72 6f 6d 20 2a 69 6e 20   input from *in 
32420 61 6e 64 20 70 72 6f 63 65 73 73 20 69 74 2e 20  and process it. 
32430 20 49 66 20 2a 69 6e 3d 3d 30 20 74 68 65 6e 20   If *in==0 then 
32440 69 6e 70 75 74 0a 2a 2a 20 69 73 20 69 6e 74 65  input.** is inte
32450 72 61 63 74 69 76 65 20 2d 20 74 68 65 20 75 73  ractive - the us
32460 65 72 20 69 73 20 74 79 70 69 6e 67 20 69 74 20  er is typing it 
32470 69 74 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20  it.  Otherwise, 
32480 69 6e 70 75 74 0a 2a 2a 20 69 73 20 63 6f 6d 69  input.** is comi
32490 6e 67 20 66 72 6f 6d 20 61 20 66 69 6c 65 20 6f  ng from a file o
324a0 72 20 64 65 76 69 63 65 2e 20 20 41 20 70 72 6f  r device.  A pro
324b0 6d 70 74 20 69 73 20 69 73 73 75 65 64 20 61 6e  mpt is issued an
324c0 64 20 68 69 73 74 6f 72 79 0a 2a 2a 20 69 73 20  d history.** is 
324d0 73 61 76 65 64 20 6f 6e 6c 79 20 69 66 20 69 6e  saved only if in
324e0 70 75 74 20 69 73 20 69 6e 74 65 72 61 63 74 69  put is interacti
324f0 76 65 2e 20 20 41 6e 20 69 6e 74 65 72 72 75 70  ve.  An interrup
32500 74 20 73 69 67 6e 61 6c 20 77 69 6c 6c 0a 2a 2a  t signal will.**
32510 20 63 61 75 73 65 20 74 68 69 73 20 72 6f 75 74   cause this rout
32520 69 6e 65 20 74 6f 20 65 78 69 74 20 69 6d 6d 65  ine to exit imme
32530 64 69 61 74 65 6c 79 2c 20 75 6e 6c 65 73 73 20  diately, unless 
32540 69 6e 70 75 74 20 69 73 20 69 6e 74 65 72 61 63  input is interac
32550 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75  tive..**.** Retu
32560 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
32570 20 65 72 72 6f 72 73 2e 0a 2a 2f 0a 73 74 61 74   errors..*/.stat
32580 69 63 20 69 6e 74 20 70 72 6f 63 65 73 73 5f 69  ic int process_i
32590 6e 70 75 74 28 53 68 65 6c 6c 53 74 61 74 65 20  nput(ShellState 
325a0 2a 70 2c 20 46 49 4c 45 20 2a 69 6e 29 7b 0a 20  *p, FILE *in){. 
325b0 20 63 68 61 72 20 2a 7a 4c 69 6e 65 20 3d 20 30   char *zLine = 0
325c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  ;          /* A 
325d0 73 69 6e 67 6c 65 20 69 6e 70 75 74 20 6c 69 6e  single input lin
325e0 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 71  e */.  char *zSq
325f0 6c 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  l = 0;          
32600 20 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65 64 20   /* Accumulated 
32610 53 51 4c 20 74 65 78 74 20 2a 2f 0a 20 20 69 6e  SQL text */.  in
32620 74 20 6e 4c 69 6e 65 3b 20 20 20 20 20 20 20 20  t nLine;        
32630 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
32640 68 20 6f 66 20 63 75 72 72 65 6e 74 20 6c 69 6e  h of current lin
32650 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 71 6c 20  e */.  int nSql 
32660 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
32670 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 7a 53 71   /* Bytes of zSq
32680 6c 5b 5d 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e  l[] used */.  in
32690 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b 20 20 20  t nAlloc = 0;   
326a0 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63          /* Alloc
326b0 61 74 65 64 20 7a 53 71 6c 5b 5d 20 73 70 61 63  ated zSql[] spac
326c0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 71 6c 50  e */.  int nSqlP
326d0 72 69 6f 72 20 3d 20 30 3b 20 20 20 20 20 20 20  rior = 0;       
326e0 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 7a 53 71   /* Bytes of zSq
326f0 6c 5b 5d 20 75 73 65 64 20 62 79 20 70 72 69 6f  l[] used by prio
32700 72 20 6c 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20  r line */.  int 
32710 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
32720 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 63        /* Error c
32730 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  ode */.  int err
32740 43 6e 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Cnt = 0;        
32750 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
32760 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
32770 20 69 6e 74 20 6c 69 6e 65 6e 6f 20 3d 20 30 3b   int lineno = 0;
32780 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
32790 72 72 65 6e 74 20 6c 69 6e 65 20 6e 75 6d 62 65  rrent line numbe
327a0 72 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61 72 74  r */.  int start
327b0 6c 69 6e 65 20 3d 20 30 3b 20 20 20 20 20 20 20  line = 0;       
327c0 20 2f 2a 20 4c 69 6e 65 20 6e 75 6d 62 65 72 20   /* Line number 
327d0 66 6f 72 20 73 74 61 72 74 20 6f 66 20 63 75 72  for start of cur
327e0 72 65 6e 74 20 69 6e 70 75 74 20 2a 2f 0a 0a 20  rent input */.. 
327f0 20 77 68 69 6c 65 28 20 65 72 72 43 6e 74 3d 3d   while( errCnt==
32800 30 20 7c 7c 20 21 62 61 69 6c 5f 6f 6e 5f 65 72  0 || !bail_on_er
32810 72 6f 72 20 7c 7c 20 28 69 6e 3d 3d 30 20 26 26  ror || (in==0 &&
32820 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61   stdin_is_intera
32830 63 74 69 76 65 29 20 29 7b 0a 20 20 20 20 66 66  ctive) ){.    ff
32840 6c 75 73 68 28 70 2d 3e 6f 75 74 29 3b 0a 20 20  lush(p->out);.  
32850 20 20 7a 4c 69 6e 65 20 3d 20 6f 6e 65 5f 69 6e    zLine = one_in
32860 70 75 74 5f 6c 69 6e 65 28 69 6e 2c 20 7a 4c 69  put_line(in, zLi
32870 6e 65 2c 20 6e 53 71 6c 3e 30 29 3b 0a 20 20 20  ne, nSql>0);.   
32880 20 69 66 28 20 7a 4c 69 6e 65 3d 3d 30 20 29 7b   if( zLine==0 ){
32890 0a 20 20 20 20 20 20 2f 2a 20 45 6e 64 20 6f 66  .      /* End of
328a0 20 69 6e 70 75 74 20 2a 2f 0a 20 20 20 20 20 20   input */.      
328b0 69 66 28 20 69 6e 3d 3d 30 20 26 26 20 73 74 64  if( in==0 && std
328c0 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76  in_is_interactiv
328d0 65 20 29 20 70 72 69 6e 74 66 28 22 5c 6e 22 29  e ) printf("\n")
328e0 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
328f0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 65 65     }.    if( see
32900 6e 49 6e 74 65 72 72 75 70 74 20 29 7b 0a 20 20  nInterrupt ){.  
32910 20 20 20 20 69 66 28 20 69 6e 21 3d 30 20 29 20      if( in!=0 ) 
32920 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 73 65 65  break;.      see
32930 6e 49 6e 74 65 72 72 75 70 74 20 3d 20 30 3b 0a  nInterrupt = 0;.
32940 20 20 20 20 7d 0a 20 20 20 20 6c 69 6e 65 6e 6f      }.    lineno
32950 2b 2b 3b 0a 20 20 20 20 69 66 28 20 6e 53 71 6c  ++;.    if( nSql
32960 3d 3d 30 20 26 26 20 5f 61 6c 6c 5f 77 68 69 74  ==0 && _all_whit
32970 65 73 70 61 63 65 28 7a 4c 69 6e 65 29 20 29 7b  espace(zLine) ){
32980 0a 20 20 20 20 20 20 69 66 28 20 53 68 65 6c 6c  .      if( Shell
32990 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47  HasFlag(p, SHFLG
329a0 5f 45 63 68 6f 29 20 29 20 70 72 69 6e 74 66 28  _Echo) ) printf(
329b0 22 25 73 5c 6e 22 2c 20 7a 4c 69 6e 65 29 3b 0a  "%s\n", zLine);.
329c0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
329d0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 4c      }.    if( zL
329e0 69 6e 65 20 26 26 20 7a 4c 69 6e 65 5b 30 5d 3d  ine && zLine[0]=
329f0 3d 27 2e 27 20 26 26 20 6e 53 71 6c 3d 3d 30 20  ='.' && nSql==0 
32a00 29 7b 0a 20 20 20 20 20 20 69 66 28 20 53 68 65  ){.      if( She
32a10 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46  llHasFlag(p, SHF
32a20 4c 47 5f 45 63 68 6f 29 20 29 20 70 72 69 6e 74  LG_Echo) ) print
32a30 66 28 22 25 73 5c 6e 22 2c 20 7a 4c 69 6e 65 29  f("%s\n", zLine)
32a40 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 64 6f 5f  ;.      rc = do_
32a50 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28 7a 4c 69  meta_command(zLi
32a60 6e 65 2c 20 70 29 3b 0a 20 20 20 20 20 20 69 66  ne, p);.      if
32a70 28 20 72 63 3d 3d 32 20 29 7b 20 2f 2a 20 65 78  ( rc==2 ){ /* ex
32a80 69 74 20 72 65 71 75 65 73 74 65 64 20 2a 2f 0a  it requested */.
32a90 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
32aa0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72       }else if( r
32ab0 63 20 29 7b 0a 20 20 20 20 20 20 20 20 65 72 72  c ){.        err
32ac0 43 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20  Cnt++;.      }. 
32ad0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20       continue;. 
32ae0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6c 69 6e     }.    if( lin
32af0 65 5f 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74 65 72  e_is_command_ter
32b00 6d 69 6e 61 74 6f 72 28 7a 4c 69 6e 65 29 20 26  minator(zLine) &
32b10 26 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d 70 6c 65  & line_is_comple
32b20 74 65 28 7a 53 71 6c 2c 20 6e 53 71 6c 29 20 29  te(zSql, nSql) )
32b30 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 7a  {.      memcpy(z
32b40 4c 69 6e 65 2c 22 3b 22 2c 32 29 3b 0a 20 20 20  Line,";",2);.   
32b50 20 7d 0a 20 20 20 20 6e 4c 69 6e 65 20 3d 20 73   }.    nLine = s
32b60 74 72 6c 65 6e 33 30 28 7a 4c 69 6e 65 29 3b 0a  trlen30(zLine);.
32b70 20 20 20 20 69 66 28 20 6e 53 71 6c 2b 6e 4c 69      if( nSql+nLi
32b80 6e 65 2b 32 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a  ne+2>=nAlloc ){.
32b90 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e        nAlloc = n
32ba0 53 71 6c 2b 6e 4c 69 6e 65 2b 31 30 30 3b 0a 20  Sql+nLine+100;. 
32bb0 20 20 20 20 20 7a 53 71 6c 20 3d 20 72 65 61 6c       zSql = real
32bc0 6c 6f 63 28 7a 53 71 6c 2c 20 6e 41 6c 6c 6f 63  loc(zSql, nAlloc
32bd0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 53 71  );.      if( zSq
32be0 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  l==0 ){.        
32bf0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
32c00 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f  r, "Error: out o
32c10 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20  f memory\n");.  
32c20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20        exit(1);. 
32c30 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
32c40 20 6e 53 71 6c 50 72 69 6f 72 20 3d 20 6e 53 71   nSqlPrior = nSq
32c50 6c 3b 0a 20 20 20 20 69 66 28 20 6e 53 71 6c 3d  l;.    if( nSql=
32c60 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
32c70 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  i;.      for(i=0
32c80 3b 20 7a 4c 69 6e 65 5b 69 5d 20 26 26 20 49 73  ; zLine[i] && Is
32c90 53 70 61 63 65 28 7a 4c 69 6e 65 5b 69 5d 29 3b  Space(zLine[i]);
32ca0 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 61 73   i++){}.      as
32cb0 73 65 72 74 28 20 6e 41 6c 6c 6f 63 3e 30 20 26  sert( nAlloc>0 &
32cc0 26 20 7a 53 71 6c 21 3d 30 20 29 3b 0a 20 20 20  & zSql!=0 );.   
32cd0 20 20 20 6d 65 6d 63 70 79 28 7a 53 71 6c 2c 20     memcpy(zSql, 
32ce0 7a 4c 69 6e 65 2b 69 2c 20 6e 4c 69 6e 65 2b 31  zLine+i, nLine+1
32cf0 2d 69 29 3b 0a 20 20 20 20 20 20 73 74 61 72 74  -i);.      start
32d00 6c 69 6e 65 20 3d 20 6c 69 6e 65 6e 6f 3b 0a 20  line = lineno;. 
32d10 20 20 20 20 20 6e 53 71 6c 20 3d 20 6e 4c 69 6e       nSql = nLin
32d20 65 2d 69 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  e-i;.    }else{.
32d30 20 20 20 20 20 20 7a 53 71 6c 5b 6e 53 71 6c 2b        zSql[nSql+
32d40 2b 5d 20 3d 20 27 5c 6e 27 3b 0a 20 20 20 20 20  +] = '\n';.     
32d50 20 6d 65 6d 63 70 79 28 7a 53 71 6c 2b 6e 53 71   memcpy(zSql+nSq
32d60 6c 2c 20 7a 4c 69 6e 65 2c 20 6e 4c 69 6e 65 2b  l, zLine, nLine+
32d70 31 29 3b 0a 20 20 20 20 20 20 6e 53 71 6c 20 2b  1);.      nSql +
32d80 3d 20 6e 4c 69 6e 65 3b 0a 20 20 20 20 7d 0a 20  = nLine;.    }. 
32d90 20 20 20 69 66 28 20 6e 53 71 6c 20 26 26 20 6c     if( nSql && l
32da0 69 6e 65 5f 63 6f 6e 74 61 69 6e 73 5f 73 65 6d  ine_contains_sem
32db0 69 63 6f 6c 6f 6e 28 26 7a 53 71 6c 5b 6e 53 71  icolon(&zSql[nSq
32dc0 6c 50 72 69 6f 72 5d 2c 20 6e 53 71 6c 2d 6e 53  lPrior], nSql-nS
32dd0 71 6c 50 72 69 6f 72 29 0a 20 20 20 20 20 20 20  qlPrior).       
32de0 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69           && sqli
32df0 74 65 33 5f 63 6f 6d 70 6c 65 74 65 28 7a 53 71  te3_complete(zSq
32e00 6c 29 20 29 7b 0a 20 20 20 20 20 20 65 72 72 43  l) ){.      errC
32e10 6e 74 20 2b 3d 20 72 75 6e 4f 6e 65 53 71 6c 4c  nt += runOneSqlL
32e20 69 6e 65 28 70 2c 20 7a 53 71 6c 2c 20 69 6e 2c  ine(p, zSql, in,
32e30 20 73 74 61 72 74 6c 69 6e 65 29 3b 0a 20 20 20   startline);.   
32e40 20 20 20 6e 53 71 6c 20 3d 20 30 3b 0a 20 20 20     nSql = 0;.   
32e50 20 20 20 69 66 28 20 70 2d 3e 6f 75 74 43 6f 75     if( p->outCou
32e60 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 6f 75  nt ){.        ou
32e70 74 70 75 74 5f 72 65 73 65 74 28 70 29 3b 0a 20  tput_reset(p);. 
32e80 20 20 20 20 20 20 20 70 2d 3e 6f 75 74 43 6f 75         p->outCou
32e90 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  nt = 0;.      }.
32ea0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 53      }else if( nS
32eb0 71 6c 20 26 26 20 5f 61 6c 6c 5f 77 68 69 74 65  ql && _all_white
32ec0 73 70 61 63 65 28 7a 53 71 6c 29 20 29 7b 0a 20  space(zSql) ){. 
32ed0 20 20 20 20 20 69 66 28 20 53 68 65 6c 6c 48 61       if( ShellHa
32ee0 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 45  sFlag(p, SHFLG_E
32ef0 63 68 6f 29 20 29 20 70 72 69 6e 74 66 28 22 25  cho) ) printf("%
32f00 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  s\n", zSql);.   
32f10 20 20 20 6e 53 71 6c 20 3d 20 30 3b 0a 20 20 20     nSql = 0;.   
32f20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6e 53 71   }.  }.  if( nSq
32f30 6c 20 26 26 20 21 5f 61 6c 6c 5f 77 68 69 74 65  l && !_all_white
32f40 73 70 61 63 65 28 7a 53 71 6c 29 20 29 7b 0a 20  space(zSql) ){. 
32f50 20 20 20 72 75 6e 4f 6e 65 53 71 6c 4c 69 6e 65     runOneSqlLine
32f60 28 70 2c 20 7a 53 71 6c 2c 20 69 6e 2c 20 73 74  (p, zSql, in, st
32f70 61 72 74 6c 69 6e 65 29 3b 0a 20 20 7d 0a 20 20  artline);.  }.  
32f80 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 66 72  free(zSql);.  fr
32f90 65 65 28 7a 4c 69 6e 65 29 3b 0a 20 20 72 65 74  ee(zLine);.  ret
32fa0 75 72 6e 20 65 72 72 43 6e 74 3e 30 3b 0a 7d 0a  urn errCnt>0;.}.
32fb0 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
32fc0 70 61 74 68 6e 61 6d 65 20 77 68 69 63 68 20 69  pathname which i
32fd0 73 20 74 68 65 20 75 73 65 72 27 73 20 68 6f 6d  s the user's hom
32fe0 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20 41 0a  e directory.  A.
32ff0 2a 2a 20 30 20 72 65 74 75 72 6e 20 69 6e 64 69  ** 0 return indi
33000 63 61 74 65 73 20 61 6e 20 65 72 72 6f 72 20 6f  cates an error o
33010 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 2a 2f 0a  f some kind..*/.
33020 73 74 61 74 69 63 20 63 68 61 72 20 2a 66 69 6e  static char *fin
33030 64 5f 68 6f 6d 65 5f 64 69 72 28 69 6e 74 20 63  d_home_dir(int c
33040 6c 65 61 72 46 6c 61 67 29 7b 0a 20 20 73 74 61  learFlag){.  sta
33050 74 69 63 20 63 68 61 72 20 2a 68 6f 6d 65 5f 64  tic char *home_d
33060 69 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20 69 66 28  ir = NULL;.  if(
33070 20 63 6c 65 61 72 46 6c 61 67 20 29 7b 0a 20 20   clearFlag ){.  
33080 20 20 66 72 65 65 28 68 6f 6d 65 5f 64 69 72 29    free(home_dir)
33090 3b 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d  ;.    home_dir =
330a0 20 30 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   0;.    return 0
330b0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 68 6f 6d 65  ;.  }.  if( home
330c0 5f 64 69 72 20 29 20 72 65 74 75 72 6e 20 68 6f  _dir ) return ho
330d0 6d 65 5f 64 69 72 3b 0a 0a 23 69 66 20 21 64 65  me_dir;..#if !de
330e0 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26 26  fined(_WIN32) &&
330f0 20 21 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29   !defined(WIN32)
33100 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49   && !defined(_WI
33110 4e 33 32 5f 57 43 45 29 20 5c 0a 20 20 20 20 20  N32_WCE) \.     
33120 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 52 54  && !defined(__RT
33130 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  P__) && !defined
33140 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a 20 20  (_WRS_KERNEL).  
33150 7b 0a 20 20 20 20 73 74 72 75 63 74 20 70 61 73  {.    struct pas
33160 73 77 64 20 2a 70 77 65 6e 74 3b 0a 20 20 20 20  swd *pwent;.    
33170 75 69 64 5f 74 20 75 69 64 20 3d 20 67 65 74 75  uid_t uid = getu
33180 69 64 28 29 3b 0a 20 20 20 20 69 66 28 20 28 70  id();.    if( (p
33190 77 65 6e 74 3d 67 65 74 70 77 75 69 64 28 75 69  went=getpwuid(ui
331a0 64 29 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20  d)) != NULL) {. 
331b0 20 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20       home_dir = 
331c0 70 77 65 6e 74 2d 3e 70 77 5f 64 69 72 3b 0a 20  pwent->pw_dir;. 
331d0 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
331e0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49  .#if defined(_WI
331f0 4e 33 32 5f 57 43 45 29 0a 20 20 2f 2a 20 57 69  N32_WCE).  /* Wi
33200 6e 64 6f 77 73 20 43 45 20 28 61 72 6d 2d 77 69  ndows CE (arm-wi
33210 6e 63 65 2d 6d 69 6e 67 77 33 32 63 65 2d 67 63  nce-mingw32ce-gc
33220 63 29 20 64 6f 65 73 20 6e 6f 74 20 70 72 6f 76  c) does not prov
33230 69 64 65 20 67 65 74 65 6e 76 28 29 0a 20 20 20  ide getenv().   
33240 2a 2f 0a 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20  */.  home_dir = 
33250 22 2f 22 3b 0a 23 65 6c 73 65 0a 0a 23 69 66 20  "/";.#else..#if 
33260 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
33270 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
33280 29 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f 64 69  ).  if (!home_di
33290 72 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64 69  r) {.    home_di
332a0 72 20 3d 20 67 65 74 65 6e 76 28 22 55 53 45 52  r = getenv("USER
332b0 50 52 4f 46 49 4c 45 22 29 3b 0a 20 20 7d 0a 23  PROFILE");.  }.#
332c0 65 6e 64 69 66 0a 0a 20 20 69 66 20 28 21 68 6f  endif..  if (!ho
332d0 6d 65 5f 64 69 72 29 20 7b 0a 20 20 20 20 68 6f  me_dir) {.    ho
332e0 6d 65 5f 64 69 72 20 3d 20 67 65 74 65 6e 76 28  me_dir = getenv(
332f0 22 48 4f 4d 45 22 29 3b 0a 20 20 7d 0a 0a 23 69  "HOME");.  }..#i
33300 66 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  f defined(_WIN32
33310 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e  ) || defined(WIN
33320 33 32 29 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f  32).  if (!home_
33330 64 69 72 29 20 7b 0a 20 20 20 20 63 68 61 72 20  dir) {.    char 
33340 2a 7a 44 72 69 76 65 2c 20 2a 7a 50 61 74 68 3b  *zDrive, *zPath;
33350 0a 20 20 20 20 69 6e 74 20 6e 3b 0a 20 20 20 20  .    int n;.    
33360 7a 44 72 69 76 65 20 3d 20 67 65 74 65 6e 76 28  zDrive = getenv(
33370 22 48 4f 4d 45 44 52 49 56 45 22 29 3b 0a 20 20  "HOMEDRIVE");.  
33380 20 20 7a 50 61 74 68 20 3d 20 67 65 74 65 6e 76    zPath = getenv
33390 28 22 48 4f 4d 45 50 41 54 48 22 29 3b 0a 20 20  ("HOMEPATH");.  
333a0 20 20 69 66 28 20 7a 44 72 69 76 65 20 26 26 20    if( zDrive && 
333b0 7a 50 61 74 68 20 29 7b 0a 20 20 20 20 20 20 6e  zPath ){.      n
333c0 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 44 72 69   = strlen30(zDri
333d0 76 65 29 20 2b 20 73 74 72 6c 65 6e 33 30 28 7a  ve) + strlen30(z
333e0 50 61 74 68 29 20 2b 20 31 3b 0a 20 20 20 20 20  Path) + 1;.     
333f0 20 68 6f 6d 65 5f 64 69 72 20 3d 20 6d 61 6c 6c   home_dir = mall
33400 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20 20 20 69  oc( n );.      i
33410 66 28 20 68 6f 6d 65 5f 64 69 72 3d 3d 30 20 29  f( home_dir==0 )
33420 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20   return 0;.     
33430 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
33440 66 28 6e 2c 20 68 6f 6d 65 5f 64 69 72 2c 20 22  f(n, home_dir, "
33450 25 73 25 73 22 2c 20 7a 44 72 69 76 65 2c 20 7a  %s%s", zDrive, z
33460 50 61 74 68 29 3b 0a 20 20 20 20 20 20 72 65 74  Path);.      ret
33470 75 72 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a 20 20  urn home_dir;.  
33480 20 20 7d 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72    }.    home_dir
33490 20 3d 20 22 63 3a 5c 5c 22 3b 0a 20 20 7d 0a 23   = "c:\\";.  }.#
334a0 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a  endif..#endif /*
334b0 20 21 5f 57 49 4e 33 32 5f 57 43 45 20 2a 2f 0a   !_WIN32_WCE */.
334c0 0a 20 20 69 66 28 20 68 6f 6d 65 5f 64 69 72 20  .  if( home_dir 
334d0 29 7b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20 73  ){.    int n = s
334e0 74 72 6c 65 6e 33 30 28 68 6f 6d 65 5f 64 69 72  trlen30(home_dir
334f0 29 20 2b 20 31 3b 0a 20 20 20 20 63 68 61 72 20  ) + 1;.    char 
33500 2a 7a 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 20 29  *z = malloc( n )
33510 3b 0a 20 20 20 20 69 66 28 20 7a 20 29 20 6d 65  ;.    if( z ) me
33520 6d 63 70 79 28 7a 2c 20 68 6f 6d 65 5f 64 69 72  mcpy(z, home_dir
33530 2c 20 6e 29 3b 0a 20 20 20 20 68 6f 6d 65 5f 64  , n);.    home_d
33540 69 72 20 3d 20 7a 3b 0a 20 20 7d 0a 0a 20 20 72  ir = z;.  }..  r
33550 65 74 75 72 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a  eturn home_dir;.
33560 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 69 6e  }../*.** Read in
33570 70 75 74 20 66 72 6f 6d 20 74 68 65 20 66 69 6c  put from the fil
33580 65 20 67 69 76 65 6e 20 62 79 20 73 71 6c 69 74  e given by sqlit
33590 65 72 63 5f 6f 76 65 72 72 69 64 65 2e 20 20 4f  erc_override.  O
335a0 72 20 69 66 20 74 68 61 74 0a 2a 2a 20 70 61 72  r if that.** par
335b0 61 6d 65 74 65 72 20 69 73 20 4e 55 4c 4c 2c 20  ameter is NULL, 
335c0 74 61 6b 65 20 69 6e 70 75 74 20 66 72 6f 6d 20  take input from 
335d0 7e 2f 2e 73 71 6c 69 74 65 72 63 0a 2a 2a 0a 2a  ~/.sqliterc.**.*
335e0 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75  * Returns the nu
335f0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 2e 0a  mber of errors..
33600 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70  */.static void p
33610 72 6f 63 65 73 73 5f 73 71 6c 69 74 65 72 63 28  rocess_sqliterc(
33620 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
33630 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
33640 20 20 20 2f 2a 20 43 6f 6e 66 69 67 75 72 61 74     /* Configurat
33650 69 6f 6e 20 64 61 74 61 20 2a 2f 0a 20 20 63 6f  ion data */.  co
33660 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
33670 72 63 5f 6f 76 65 72 72 69 64 65 20 20 20 2f 2a  rc_override   /*
33680 20 4e 61 6d 65 20 6f 66 20 63 6f 6e 66 69 67 20   Name of config 
33690 66 69 6c 65 2e 20 4e 55 4c 4c 20 74 6f 20 75 73  file. NULL to us
336a0 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 29 7b 0a  e default */.){.
336b0 20 20 63 68 61 72 20 2a 68 6f 6d 65 5f 64 69 72    char *home_dir
336c0 20 3d 20 4e 55 4c 4c 3b 0a 20 20 63 6f 6e 73 74   = NULL;.  const
336d0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 72 63 20   char *sqliterc 
336e0 3d 20 73 71 6c 69 74 65 72 63 5f 6f 76 65 72 72  = sqliterc_overr
336f0 69 64 65 3b 0a 20 20 63 68 61 72 20 2a 7a 42 75  ide;.  char *zBu
33700 66 20 3d 20 30 3b 0a 20 20 46 49 4c 45 20 2a 69  f = 0;.  FILE *i
33710 6e 20 3d 20 4e 55 4c 4c 3b 0a 0a 20 20 69 66 20  n = NULL;..  if 
33720 28 73 71 6c 69 74 65 72 63 20 3d 3d 20 4e 55 4c  (sqliterc == NUL
33730 4c 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64 69  L) {.    home_di
33740 72 20 3d 20 66 69 6e 64 5f 68 6f 6d 65 5f 64 69  r = find_home_di
33750 72 28 30 29 3b 0a 20 20 20 20 69 66 28 20 68 6f  r(0);.    if( ho
33760 6d 65 5f 64 69 72 3d 3d 30 20 29 7b 0a 20 20 20  me_dir==0 ){.   
33770 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
33780 64 65 72 72 2c 20 22 2d 2d 20 77 61 72 6e 69 6e  derr, "-- warnin
33790 67 3a 20 63 61 6e 6e 6f 74 20 66 69 6e 64 20 68  g: cannot find h
337a0 6f 6d 65 20 64 69 72 65 63 74 6f 72 79 3b 22 0a  ome directory;".
337b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337c0 20 20 20 20 20 20 22 20 63 61 6e 6e 6f 74 20 72        " cannot r
337d0 65 61 64 20 7e 2f 2e 73 71 6c 69 74 65 72 63 5c  ead ~/.sqliterc\
337e0 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
337f0 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  n;.    }.    sql
33800 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
33810 29 3b 0a 20 20 20 20 7a 42 75 66 20 3d 20 73 71  );.    zBuf = sq
33820 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
33830 73 2f 2e 73 71 6c 69 74 65 72 63 22 2c 68 6f 6d  s/.sqliterc",hom
33840 65 5f 64 69 72 29 3b 0a 20 20 20 20 73 71 6c 69  e_dir);.    sqli
33850 74 65 72 63 20 3d 20 7a 42 75 66 3b 0a 20 20 7d  terc = zBuf;.  }
33860 0a 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 73 71  .  in = fopen(sq
33870 6c 69 74 65 72 63 2c 22 72 62 22 29 3b 0a 20 20  literc,"rb");.  
33880 69 66 28 20 69 6e 20 29 7b 0a 20 20 20 20 69 66  if( in ){.    if
33890 28 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72  ( stdin_is_inter
338a0 61 63 74 69 76 65 20 29 7b 0a 20 20 20 20 20 20  active ){.      
338b0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
338c0 72 72 2c 22 2d 2d 20 4c 6f 61 64 69 6e 67 20 72  rr,"-- Loading r
338d0 65 73 6f 75 72 63 65 73 20 66 72 6f 6d 20 25 73  esources from %s
338e0 5c 6e 22 2c 73 71 6c 69 74 65 72 63 29 3b 0a 20  \n",sqliterc);. 
338f0 20 20 20 7d 0a 20 20 20 20 70 72 6f 63 65 73 73     }.    process
33900 5f 69 6e 70 75 74 28 70 2c 69 6e 29 3b 0a 20 20  _input(p,in);.  
33910 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a 20 20    fclose(in);.  
33920 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  }.  sqlite3_free
33930 28 7a 42 75 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  (zBuf);.}../*.**
33940 20 53 68 6f 77 20 61 76 61 69 6c 61 62 6c 65 20   Show available 
33950 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
33960 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ions.*/.static c
33970 6f 6e 73 74 20 63 68 61 72 20 7a 4f 70 74 69 6f  onst char zOptio
33980 6e 73 5b 5d 20 3d 0a 20 20 22 20 20 20 2d 61 73  ns[] =.  "   -as
33990 63 69 69 20 20 20 20 20 20 20 20 20 20 20 20 20  cii             
339a0 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64    set output mod
339b0 65 20 74 6f 20 27 61 73 63 69 69 27 5c 6e 22 0a  e to 'ascii'\n".
339c0 20 20 22 20 20 20 2d 62 61 69 6c 20 20 20 20 20    "   -bail     
339d0 20 20 20 20 20 20 20 20 20 20 20 73 74 6f 70 20             stop 
339e0 61 66 74 65 72 20 68 69 74 74 69 6e 67 20 61 6e  after hitting an
339f0 20 65 72 72 6f 72 5c 6e 22 0a 20 20 22 20 20 20   error\n".  "   
33a00 2d 62 61 74 63 68 20 20 20 20 20 20 20 20 20 20  -batch          
33a10 20 20 20 20 20 66 6f 72 63 65 20 62 61 74 63 68       force batch
33a20 20 49 2f 4f 5c 6e 22 0a 20 20 22 20 20 20 2d 63   I/O\n".  "   -c
33a30 6f 6c 75 6d 6e 20 20 20 20 20 20 20 20 20 20 20  olumn           
33a40 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f     set output mo
33a50 64 65 20 74 6f 20 27 63 6f 6c 75 6d 6e 27 5c 6e  de to 'column'\n
33a60 22 0a 20 20 22 20 20 20 2d 63 6d 64 20 43 4f 4d  ".  "   -cmd COM
33a70 4d 41 4e 44 20 20 20 20 20 20 20 20 20 72 75 6e  MAND         run
33a80 20 5c 22 43 4f 4d 4d 41 4e 44 5c 22 20 62 65 66   \"COMMAND\" bef
33a90 6f 72 65 20 72 65 61 64 69 6e 67 20 73 74 64 69  ore reading stdi
33aa0 6e 5c 6e 22 0a 20 20 22 20 20 20 2d 63 73 76 20  n\n".  "   -csv 
33ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ac0 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  set output mode 
33ad0 74 6f 20 27 63 73 76 27 5c 6e 22 0a 20 20 22 20  to 'csv'\n".  " 
33ae0 20 20 2d 65 63 68 6f 20 20 20 20 20 20 20 20 20    -echo         
33af0 20 20 20 20 20 20 20 70 72 69 6e 74 20 63 6f 6d         print com
33b00 6d 61 6e 64 73 20 62 65 66 6f 72 65 20 65 78 65  mands before exe
33b10 63 75 74 69 6f 6e 5c 6e 22 0a 20 20 22 20 20 20  cution\n".  "   
33b20 2d 69 6e 69 74 20 46 49 4c 45 4e 41 4d 45 20 20  -init FILENAME  
33b30 20 20 20 20 20 72 65 61 64 2f 70 72 6f 63 65 73       read/proces
33b40 73 20 6e 61 6d 65 64 20 66 69 6c 65 5c 6e 22 0a  s named file\n".
33b50 20 20 22 20 20 20 2d 5b 6e 6f 5d 68 65 61 64 65    "   -[no]heade
33b60 72 20 20 20 20 20 20 20 20 20 20 74 75 72 6e 20  r          turn 
33b70 68 65 61 64 65 72 73 20 6f 6e 20 6f 72 20 6f 66  headers on or of
33b80 66 5c 6e 22 0a 23 69 66 20 64 65 66 69 6e 65 64  f\n".#if defined
33b90 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
33ba0 45 4d 53 59 53 33 29 20 7c 7c 20 64 65 66 69 6e  EMSYS3) || defin
33bb0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
33bc0 5f 4d 45 4d 53 59 53 35 29 0a 20 20 22 20 20 20  _MEMSYS5).  "   
33bd0 2d 68 65 61 70 20 53 49 5a 45 20 20 20 20 20 20  -heap SIZE      
33be0 20 20 20 20 20 53 69 7a 65 20 6f 66 20 68 65 61       Size of hea
33bf0 70 20 66 6f 72 20 6d 65 6d 73 79 73 33 20 6f 72  p for memsys3 or
33c00 20 6d 65 6d 73 79 73 35 5c 6e 22 0a 23 65 6e 64   memsys5\n".#end
33c10 69 66 0a 20 20 22 20 20 20 2d 68 65 6c 70 20 20  if.  "   -help  
33c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68                sh
33c30 6f 77 20 74 68 69 73 20 6d 65 73 73 61 67 65 5c  ow this message\
33c40 6e 22 0a 20 20 22 20 20 20 2d 68 74 6d 6c 20 20  n".  "   -html  
33c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
33c60 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f  t output mode to
33c70 20 48 54 4d 4c 5c 6e 22 0a 20 20 22 20 20 20 2d   HTML\n".  "   -
33c80 69 6e 74 65 72 61 63 74 69 76 65 20 20 20 20 20  interactive     
33c90 20 20 20 20 66 6f 72 63 65 20 69 6e 74 65 72 61      force intera
33ca0 63 74 69 76 65 20 49 2f 4f 5c 6e 22 0a 20 20 22  ctive I/O\n".  "
33cb0 20 20 20 2d 6c 69 6e 65 20 20 20 20 20 20 20 20     -line        
33cc0 20 20 20 20 20 20 20 20 73 65 74 20 6f 75 74 70          set outp
33cd0 75 74 20 6d 6f 64 65 20 74 6f 20 27 6c 69 6e 65  ut mode to 'line
33ce0 27 5c 6e 22 0a 20 20 22 20 20 20 2d 6c 69 73 74  '\n".  "   -list
33cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d00 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  set output mode 
33d10 74 6f 20 27 6c 69 73 74 27 5c 6e 22 0a 20 20 22  to 'list'\n".  "
33d20 20 20 20 2d 6c 6f 6f 6b 61 73 69 64 65 20 53 49     -lookaside SI
33d30 5a 45 20 4e 20 20 20 20 75 73 65 20 4e 20 65 6e  ZE N    use N en
33d40 74 72 69 65 73 20 6f 66 20 53 5a 20 62 79 74 65  tries of SZ byte
33d50 73 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  s for lookaside 
33d60 6d 65 6d 6f 72 79 5c 6e 22 0a 20 20 22 20 20 20  memory\n".  "   
33d70 2d 6d 6d 61 70 20 4e 20 20 20 20 20 20 20 20 20  -mmap N         
33d80 20 20 20 20 20 64 65 66 61 75 6c 74 20 6d 6d 61       default mma
33d90 70 20 73 69 7a 65 20 73 65 74 20 74 6f 20 4e 5c  p size set to N\
33da0 6e 22 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  n".#ifdef SQLITE
33db0 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 50 4c 45  _ENABLE_MULTIPLE
33dc0 58 0a 20 20 22 20 20 20 2d 6d 75 6c 74 69 70 6c  X.  "   -multipl
33dd0 65 78 20 20 20 20 20 20 20 20 20 20 20 65 6e 61  ex           ena
33de0 62 6c 65 20 74 68 65 20 6d 75 6c 74 69 70 6c 65  ble the multiple
33df0 78 6f 72 20 56 46 53 5c 6e 22 0a 23 65 6e 64 69  xor VFS\n".#endi
33e00 66 0a 20 20 22 20 20 20 2d 6e 65 77 6c 69 6e 65  f.  "   -newline
33e10 20 53 45 50 20 20 20 20 20 20 20 20 20 73 65 74   SEP         set
33e20 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65 70 61   output row sepa
33e30 72 61 74 6f 72 2e 20 44 65 66 61 75 6c 74 3a 20  rator. Default: 
33e40 27 5c 5c 6e 27 5c 6e 22 0a 20 20 22 20 20 20 2d  '\\n'\n".  "   -
33e50 6e 75 6c 6c 76 61 6c 75 65 20 54 45 58 54 20 20  nullvalue TEXT  
33e60 20 20 20 20 73 65 74 20 74 65 78 74 20 73 74 72      set text str
33e70 69 6e 67 20 66 6f 72 20 4e 55 4c 4c 20 76 61 6c  ing for NULL val
33e80 75 65 73 2e 20 44 65 66 61 75 6c 74 20 27 27 5c  ues. Default ''\
33e90 6e 22 0a 20 20 22 20 20 20 2d 70 61 67 65 63 61  n".  "   -pageca
33ea0 63 68 65 20 53 49 5a 45 20 4e 20 20 20 20 75 73  che SIZE N    us
33eb0 65 20 4e 20 73 6c 6f 74 73 20 6f 66 20 53 5a 20  e N slots of SZ 
33ec0 62 79 74 65 73 20 65 61 63 68 20 66 6f 72 20 70  bytes each for p
33ed0 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79  age cache memory
33ee0 5c 6e 22 0a 20 20 22 20 20 20 2d 71 75 6f 74 65  \n".  "   -quote
33ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
33f00 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74  et output mode t
33f10 6f 20 27 71 75 6f 74 65 27 5c 6e 22 0a 20 20 22  o 'quote'\n".  "
33f20 20 20 20 2d 73 65 70 61 72 61 74 6f 72 20 53 45     -separator SE
33f30 50 20 20 20 20 20 20 20 73 65 74 20 6f 75 74 70  P       set outp
33f40 75 74 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61  ut column separa
33f50 74 6f 72 2e 20 44 65 66 61 75 6c 74 3a 20 27 7c  tor. Default: '|
33f60 27 5c 6e 22 0a 20 20 22 20 20 20 2d 73 74 61 74  '\n".  "   -stat
33f70 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s               
33f80 70 72 69 6e 74 20 6d 65 6d 6f 72 79 20 73 74 61  print memory sta
33f90 74 73 20 62 65 66 6f 72 65 20 65 61 63 68 20 66  ts before each f
33fa0 69 6e 61 6c 69 7a 65 5c 6e 22 0a 20 20 22 20 20  inalize\n".  "  
33fb0 20 2d 76 65 72 73 69 6f 6e 20 20 20 20 20 20 20   -version       
33fc0 20 20 20 20 20 20 73 68 6f 77 20 53 51 4c 69 74        show SQLit
33fd0 65 20 76 65 72 73 69 6f 6e 5c 6e 22 0a 20 20 22  e version\n".  "
33fe0 20 20 20 2d 76 66 73 20 4e 41 4d 45 20 20 20 20     -vfs NAME    
33ff0 20 20 20 20 20 20 20 20 75 73 65 20 4e 41 4d 45          use NAME
34000 20 61 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   as the default 
34010 56 46 53 5c 6e 22 0a 23 69 66 64 65 66 20 53 51  VFS\n".#ifdef SQ
34020 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53 54  LITE_ENABLE_VFST
34030 52 41 43 45 0a 20 20 22 20 20 20 2d 76 66 73 74  RACE.  "   -vfst
34040 72 61 63 65 20 20 20 20 20 20 20 20 20 20 20 20  race            
34050 65 6e 61 62 6c 65 20 74 72 61 63 69 6e 67 20 6f  enable tracing o
34060 66 20 61 6c 6c 20 56 46 53 20 63 61 6c 6c 73 5c  f all VFS calls\
34070 6e 22 0a 23 65 6e 64 69 66 0a 3b 0a 73 74 61 74  n".#endif.;.stat
34080 69 63 20 76 6f 69 64 20 75 73 61 67 65 28 69 6e  ic void usage(in
34090 74 20 73 68 6f 77 44 65 74 61 69 6c 29 7b 0a 20  t showDetail){. 
340a0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
340b0 65 72 72 2c 0a 20 20 20 20 20 20 22 55 73 61 67  err,.      "Usag
340c0 65 3a 20 25 73 20 5b 4f 50 54 49 4f 4e 53 5d 20  e: %s [OPTIONS] 
340d0 46 49 4c 45 4e 41 4d 45 20 5b 53 51 4c 5d 5c 6e  FILENAME [SQL]\n
340e0 22 0a 20 20 20 20 20 20 22 46 49 4c 45 4e 41 4d  ".      "FILENAM
340f0 45 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  E is the name of
34100 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62   an SQLite datab
34110 61 73 65 2e 20 41 20 6e 65 77 20 64 61 74 61 62  ase. A new datab
34120 61 73 65 20 69 73 20 63 72 65 61 74 65 64 5c 6e  ase is created\n
34130 22 0a 20 20 20 20 20 20 22 69 66 20 74 68 65 20  ".      "if the 
34140 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 70 72  file does not pr
34150 65 76 69 6f 75 73 6c 79 20 65 78 69 73 74 2e 5c  eviously exist.\
34160 6e 22 2c 20 41 72 67 76 30 29 3b 0a 20 20 69 66  n", Argv0);.  if
34170 28 20 73 68 6f 77 44 65 74 61 69 6c 20 29 7b 0a  ( showDetail ){.
34180 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
34190 73 74 64 65 72 72 2c 20 22 4f 50 54 49 4f 4e 53  stderr, "OPTIONS
341a0 20 69 6e 63 6c 75 64 65 3a 5c 6e 25 73 22 2c 20   include:\n%s", 
341b0 7a 4f 70 74 69 6f 6e 73 29 3b 0a 20 20 7d 65 6c  zOptions);.  }el
341c0 73 65 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e  se{.    raw_prin
341d0 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 65 20  tf(stderr, "Use 
341e0 74 68 65 20 2d 68 65 6c 70 20 6f 70 74 69 6f 6e  the -help option
341f0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
34200 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29 3b  information\n");
34210 0a 20 20 7d 0a 20 20 65 78 69 74 28 31 29 3b 0a  .  }.  exit(1);.
34220 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c  }../*.** Initial
34230 69 7a 65 20 74 68 65 20 73 74 61 74 65 20 69 6e  ize the state in
34240 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 64 61 74  formation in dat
34250 61 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  a.*/.static void
34260 20 6d 61 69 6e 5f 69 6e 69 74 28 53 68 65 6c 6c   main_init(Shell
34270 53 74 61 74 65 20 2a 64 61 74 61 29 20 7b 0a 20  State *data) {. 
34280 20 6d 65 6d 73 65 74 28 64 61 74 61 2c 20 30 2c   memset(data, 0,
34290 20 73 69 7a 65 6f 66 28 2a 64 61 74 61 29 29 3b   sizeof(*data));
342a0 0a 20 20 64 61 74 61 2d 3e 6e 6f 72 6d 61 6c 4d  .  data->normalM
342b0 6f 64 65 20 3d 20 64 61 74 61 2d 3e 63 4d 6f 64  ode = data->cMod
342c0 65 20 3d 20 64 61 74 61 2d 3e 6d 6f 64 65 20 3d  e = data->mode =
342d0 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 64 61   MODE_List;.  da
342e0 74 61 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20  ta->autoExplain 
342f0 3d 20 31 3b 0a 20 20 6d 65 6d 63 70 79 28 64 61  = 1;.  memcpy(da
34300 74 61 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72  ta->colSeparator
34310 2c 53 45 50 5f 43 6f 6c 75 6d 6e 2c 20 32 29 3b  ,SEP_Column, 2);
34320 0a 20 20 6d 65 6d 63 70 79 28 64 61 74 61 2d 3e  .  memcpy(data->
34330 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 53 45 50  rowSeparator,SEP
34340 5f 52 6f 77 2c 20 32 29 3b 0a 20 20 64 61 74 61  _Row, 2);.  data
34350 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30  ->showHeader = 0
34360 3b 0a 20 20 64 61 74 61 2d 3e 73 68 65 6c 6c 46  ;.  data->shellF
34370 6c 67 73 20 3d 20 53 48 46 4c 47 5f 4c 6f 6f 6b  lgs = SHFLG_Look
34380 61 73 69 64 65 3b 0a 20 20 73 71 6c 69 74 65 33  aside;.  sqlite3
34390 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43  _config(SQLITE_C
343a0 4f 4e 46 49 47 5f 55 52 49 2c 20 31 29 3b 0a 20  ONFIG_URI, 1);. 
343b0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
343c0 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f  SQLITE_CONFIG_LO
343d0 47 2c 20 73 68 65 6c 6c 4c 6f 67 2c 20 64 61 74  G, shellLog, dat
343e0 61 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  a);.  sqlite3_co
343f0 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46  nfig(SQLITE_CONF
34400 49 47 5f 4d 55 4c 54 49 54 48 52 45 41 44 29 3b  IG_MULTITHREAD);
34410 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  .  sqlite3_snpri
34420 6e 74 66 28 73 69 7a 65 6f 66 28 6d 61 69 6e 50  ntf(sizeof(mainP
34430 72 6f 6d 70 74 29 2c 20 6d 61 69 6e 50 72 6f 6d  rompt), mainProm
34440 70 74 2c 22 73 71 6c 69 74 65 3e 20 22 29 3b 0a  pt,"sqlite> ");.
34450 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
34460 74 66 28 73 69 7a 65 6f 66 28 63 6f 6e 74 69 6e  tf(sizeof(contin
34470 75 65 50 72 6f 6d 70 74 29 2c 20 63 6f 6e 74 69  uePrompt), conti
34480 6e 75 65 50 72 6f 6d 70 74 2c 22 20 20 20 2e 2e  nuePrompt,"   ..
34490 2e 3e 20 22 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  .> ");.}../*.** 
344a0 4f 75 74 70 75 74 20 74 65 78 74 20 74 6f 20 74  Output text to t
344b0 68 65 20 63 6f 6e 73 6f 6c 65 20 69 6e 20 61 20  he console in a 
344c0 66 6f 6e 74 20 74 68 61 74 20 61 74 74 72 61 63  font that attrac
344d0 74 73 20 65 78 74 72 61 20 61 74 74 65 6e 74 69  ts extra attenti
344e0 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 57  on..*/.#ifdef _W
344f0 49 4e 33 32 0a 73 74 61 74 69 63 20 76 6f 69 64  IN32.static void
34500 20 70 72 69 6e 74 42 6f 6c 64 28 63 6f 6e 73 74   printBold(const
34510 20 63 68 61 72 20 2a 7a 54 65 78 74 29 7b 0a 20   char *zText){. 
34520 20 48 41 4e 44 4c 45 20 6f 75 74 20 3d 20 47 65   HANDLE out = Ge
34530 74 53 74 64 48 61 6e 64 6c 65 28 53 54 44 5f 4f  tStdHandle(STD_O
34540 55 54 50 55 54 5f 48 41 4e 44 4c 45 29 3b 0a 20  UTPUT_HANDLE);. 
34550 20 43 4f 4e 53 4f 4c 45 5f 53 43 52 45 45 4e 5f   CONSOLE_SCREEN_
34560 42 55 46 46 45 52 5f 49 4e 46 4f 20 64 65 66 61  BUFFER_INFO defa
34570 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 3b 0a 20  ultScreenInfo;. 
34580 20 47 65 74 43 6f 6e 73 6f 6c 65 53 63 72 65 65   GetConsoleScree
34590 6e 42 75 66 66 65 72 49 6e 66 6f 28 6f 75 74 2c  nBufferInfo(out,
345a0 20 26 64 65 66 61 75 6c 74 53 63 72 65 65 6e 49   &defaultScreenI
345b0 6e 66 6f 29 3b 0a 20 20 53 65 74 43 6f 6e 73 6f  nfo);.  SetConso
345c0 6c 65 54 65 78 74 41 74 74 72 69 62 75 74 65 28  leTextAttribute(
345d0 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20 46 4f  out,.         FO
345e0 52 45 47 52 4f 55 4e 44 5f 52 45 44 7c 46 4f 52  REGROUND_RED|FOR
345f0 45 47 52 4f 55 4e 44 5f 49 4e 54 45 4e 53 49 54  EGROUND_INTENSIT
34600 59 0a 20 20 29 3b 0a 20 20 70 72 69 6e 74 66 28  Y.  );.  printf(
34610 22 25 73 22 2c 20 7a 54 65 78 74 29 3b 0a 20 20  "%s", zText);.  
34620 53 65 74 43 6f 6e 73 6f 6c 65 54 65 78 74 41 74  SetConsoleTextAt
34630 74 72 69 62 75 74 65 28 6f 75 74 2c 20 64 65 66  tribute(out, def
34640 61 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 2e 77  aultScreenInfo.w
34650 41 74 74 72 69 62 75 74 65 73 29 3b 0a 7d 0a 23  Attributes);.}.#
34660 65 6c 73 65 0a 73 74 61 74 69 63 20 76 6f 69 64  else.static void
34670 20 70 72 69 6e 74 42 6f 6c 64 28 63 6f 6e 73 74   printBold(const
34680 20 63 68 61 72 20 2a 7a 54 65 78 74 29 7b 0a 20   char *zText){. 
34690 20 70 72 69 6e 74 66 28 22 5c 30 33 33 5b 31 6d   printf("\033[1m
346a0 25 73 5c 30 33 33 5b 30 6d 22 2c 20 7a 54 65 78  %s\033[0m", zTex
346b0 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  t);.}.#endif../*
346c0 0a 2a 2a 20 47 65 74 20 74 68 65 20 61 72 67 75  .** Get the argu
346d0 6d 65 6e 74 20 74 6f 20 61 6e 20 2d 2d 6f 70 74  ment to an --opt
346e0 69 6f 6e 2e 20 20 54 68 72 6f 77 20 61 6e 20 65  ion.  Throw an e
346f0 72 72 6f 72 20 61 6e 64 20 64 69 65 20 69 66 20  rror and die if 
34700 6e 6f 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 69  no argument.** i
34710 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a  s available..*/.
34720 73 74 61 74 69 63 20 63 68 61 72 20 2a 63 6d 64  static char *cmd
34730 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
34740 65 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  e(int argc, char
34750 20 2a 2a 61 72 67 76 2c 20 69 6e 74 20 69 29 7b   **argv, int i){
34760 0a 20 20 69 66 28 20 69 3d 3d 61 72 67 63 20 29  .  if( i==argc )
34770 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  {.    utf8_print
34780 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 20 45  f(stderr, "%s: E
34790 72 72 6f 72 3a 20 6d 69 73 73 69 6e 67 20 61 72  rror: missing ar
347a0 67 75 6d 65 6e 74 20 74 6f 20 25 73 5c 6e 22 2c  gument to %s\n",
347b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67  .            arg
347c0 76 5b 30 5d 2c 20 61 72 67 76 5b 61 72 67 63 2d  v[0], argv[argc-
347d0 31 5d 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29  1]);.    exit(1)
347e0 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 61  ;.  }.  return a
347f0 72 67 76 5b 69 5d 3b 0a 7d 0a 0a 23 69 66 6e 64  rgv[i];.}..#ifnd
34800 65 66 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f  ef SQLITE_SHELL_
34810 49 53 5f 55 54 46 38 0a 23 20 20 69 66 20 28 64  IS_UTF8.#  if (d
34820 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c  efined(_WIN32) |
34830 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29  | defined(WIN32)
34840 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 4d 53  ) && defined(_MS
34850 43 5f 56 45 52 29 0a 23 20 20 20 20 64 65 66 69  C_VER).#    defi
34860 6e 65 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f  ne SQLITE_SHELL_
34870 49 53 5f 55 54 46 38 20 20 20 20 20 20 20 20 20  IS_UTF8         
34880 20 28 30 29 0a 23 20 20 65 6c 73 65 0a 23 20 20   (0).#  else.#  
34890 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
348a0 53 48 45 4c 4c 5f 49 53 5f 55 54 46 38 20 20 20  SHELL_IS_UTF8   
348b0 20 20 20 20 20 20 20 28 31 29 0a 23 20 20 65 6e         (1).#  en
348c0 64 69 66 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  dif.#endif..#if 
348d0 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f  SQLITE_SHELL_IS_
348e0 55 54 46 38 0a 69 6e 74 20 53 51 4c 49 54 45 5f  UTF8.int SQLITE_
348f0 43 44 45 43 4c 20 6d 61 69 6e 28 69 6e 74 20 61  CDECL main(int a
34900 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76  rgc, char **argv
34910 29 7b 0a 23 65 6c 73 65 0a 69 6e 74 20 53 51 4c  ){.#else.int SQL
34920 49 54 45 5f 43 44 45 43 4c 20 77 6d 61 69 6e 28  ITE_CDECL wmain(
34930 69 6e 74 20 61 72 67 63 2c 20 77 63 68 61 72 5f  int argc, wchar_
34940 74 20 2a 2a 77 61 72 67 76 29 7b 0a 20 20 63 68  t **wargv){.  ch
34950 61 72 20 2a 2a 61 72 67 76 3b 0a 23 65 6e 64 69  ar **argv;.#endi
34960 66 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  f.  char *zErrMs
34970 67 20 3d 20 30 3b 0a 20 20 53 68 65 6c 6c 53 74  g = 0;.  ShellSt
34980 61 74 65 20 64 61 74 61 3b 0a 20 20 63 6f 6e 73  ate data;.  cons
34990 74 20 63 68 61 72 20 2a 7a 49 6e 69 74 46 69 6c  t char *zInitFil
349a0 65 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b 0a  e = 0;.  int i;.
349b0 20 20 69 6e 74 20 72 63 20 3d 20 30 3b 0a 20 20    int rc = 0;.  
349c0 69 6e 74 20 77 61 72 6e 49 6e 6d 65 6d 6f 72 79  int warnInmemory
349d0 44 62 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 65  Db = 0;.  int re
349e0 61 64 53 74 64 69 6e 20 3d 20 31 3b 0a 20 20 69  adStdin = 1;.  i
349f0 6e 74 20 6e 43 6d 64 20 3d 20 30 3b 0a 20 20 63  nt nCmd = 0;.  c
34a00 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20 30 3b  har **azCmd = 0;
34a10 0a 0a 20 20 73 65 74 42 69 6e 61 72 79 4d 6f 64  ..  setBinaryMod
34a20 65 28 73 74 64 69 6e 2c 20 30 29 3b 0a 20 20 73  e(stdin, 0);.  s
34a30 65 74 76 62 75 66 28 73 74 64 65 72 72 2c 20 30  etvbuf(stderr, 0
34a40 2c 20 5f 49 4f 4e 42 46 2c 20 30 29 3b 20 2f 2a  , _IONBF, 0); /*
34a50 20 4d 61 6b 65 20 73 75 72 65 20 73 74 64 65 72   Make sure stder
34a60 72 20 69 73 20 75 6e 62 75 66 66 65 72 65 64 20  r is unbuffered 
34a70 2a 2f 0a 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e  */.  stdin_is_in
34a80 74 65 72 61 63 74 69 76 65 20 3d 20 69 73 61 74  teractive = isat
34a90 74 79 28 30 29 3b 0a 20 20 73 74 64 6f 75 74 5f  ty(0);.  stdout_
34aa0 69 73 5f 63 6f 6e 73 6f 6c 65 20 3d 20 69 73 61  is_console = isa
34ab0 74 74 79 28 31 29 3b 0a 0a 23 69 66 20 55 53 45  tty(1);..#if USE
34ac0 5f 53 59 53 54 45 4d 5f 53 51 4c 49 54 45 2b 30  _SYSTEM_SQLITE+0
34ad0 21 3d 31 0a 20 20 69 66 28 20 73 74 72 6e 63 6d  !=1.  if( strncm
34ae0 70 28 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65  p(sqlite3_source
34af0 69 64 28 29 2c 53 51 4c 49 54 45 5f 53 4f 55 52  id(),SQLITE_SOUR
34b00 43 45 5f 49 44 2c 36 30 29 21 3d 30 20 29 7b 0a  CE_ID,60)!=0 ){.
34b10 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
34b20 73 74 64 65 72 72 2c 20 22 53 51 4c 69 74 65 20  stderr, "SQLite 
34b30 68 65 61 64 65 72 20 61 6e 64 20 73 6f 75 72 63  header and sourc
34b40 65 20 76 65 72 73 69 6f 6e 20 6d 69 73 6d 61 74  e version mismat
34b50 63 68 5c 6e 25 73 5c 6e 25 73 5c 6e 22 2c 0a 20  ch\n%s\n%s\n",. 
34b60 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
34b70 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 53  e3_sourceid(), S
34b80 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49 44 29  QLITE_SOURCE_ID)
34b90 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20  ;.    exit(1);. 
34ba0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 6d 61 69 6e   }.#endif.  main
34bb0 5f 69 6e 69 74 28 26 64 61 74 61 29 3b 0a 23 69  _init(&data);.#i
34bc0 66 20 21 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f  f !SQLITE_SHELL_
34bd0 49 53 5f 55 54 46 38 0a 20 20 73 71 6c 69 74 65  IS_UTF8.  sqlite
34be0 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a  3_initialize();.
34bf0 20 20 61 72 67 76 20 3d 20 73 71 6c 69 74 65 33    argv = sqlite3
34c00 5f 6d 61 6c 6c 6f 63 36 34 28 73 69 7a 65 6f 66  _malloc64(sizeof
34c10 28 61 72 67 76 5b 30 5d 29 2a 61 72 67 63 29 3b  (argv[0])*argc);
34c20 0a 20 20 69 66 28 20 61 72 67 76 3d 3d 30 20 29  .  if( argv==0 )
34c30 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
34c40 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f 66  (stderr, "out of
34c50 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20   memory\n");.   
34c60 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20   exit(1);.  }.  
34c70 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b  for(i=0; i<argc;
34c80 20 69 2b 2b 29 7b 0a 20 20 20 20 61 72 67 76 5b   i++){.    argv[
34c90 69 5d 20 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e  i] = sqlite3_win
34ca0 33 32 5f 75 6e 69 63 6f 64 65 5f 74 6f 5f 75 74  32_unicode_to_ut
34cb0 66 38 28 77 61 72 67 76 5b 69 5d 29 3b 0a 20 20  f8(wargv[i]);.  
34cc0 20 20 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d 30    if( argv[i]==0
34cd0 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
34ce0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f 75  intf(stderr, "ou
34cf0 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b  t of memory\n");
34d00 0a 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a  .      exit(1);.
34d10 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
34d20 0a 20 20 61 73 73 65 72 74 28 20 61 72 67 63 3e  .  assert( argc>
34d30 3d 31 20 26 26 20 61 72 67 76 20 26 26 20 61 72  =1 && argv && ar
34d40 67 76 5b 30 5d 20 29 3b 0a 20 20 41 72 67 76 30  gv[0] );.  Argv0
34d50 20 3d 20 61 72 67 76 5b 30 5d 3b 0a 0a 20 20 2f   = argv[0];..  /
34d60 2a 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20 68  * Make sure we h
34d70 61 76 65 20 61 20 76 61 6c 69 64 20 73 69 67 6e  ave a valid sign
34d80 61 6c 20 68 61 6e 64 6c 65 72 20 65 61 72 6c 79  al handler early
34d90 2c 20 62 65 66 6f 72 65 20 61 6e 79 74 68 69 6e  , before anythin
34da0 67 0a 20 20 2a 2a 20 65 6c 73 65 20 69 73 20 64  g.  ** else is d
34db0 6f 6e 65 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  one..  */.#ifdef
34dc0 20 53 49 47 49 4e 54 0a 20 20 73 69 67 6e 61 6c   SIGINT.  signal
34dd0 28 53 49 47 49 4e 54 2c 20 69 6e 74 65 72 72 75  (SIGINT, interru
34de0 70 74 5f 68 61 6e 64 6c 65 72 29 3b 0a 23 65 6c  pt_handler);.#el
34df0 69 66 20 28 64 65 66 69 6e 65 64 28 5f 57 49 4e  if (defined(_WIN
34e00 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57  32) || defined(W
34e10 49 4e 33 32 29 29 20 26 26 20 21 64 65 66 69 6e  IN32)) && !defin
34e20 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 20  ed(_WIN32_WCE). 
34e30 20 53 65 74 43 6f 6e 73 6f 6c 65 43 74 72 6c 48   SetConsoleCtrlH
34e40 61 6e 64 6c 65 72 28 43 6f 6e 73 6f 6c 65 43 74  andler(ConsoleCt
34e50 72 6c 48 61 6e 64 6c 65 72 2c 20 54 52 55 45 29  rlHandler, TRUE)
34e60 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
34e70 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 44 42   SQLITE_SHELL_DB
34e80 4e 41 4d 45 5f 50 52 4f 43 0a 20 20 7b 0a 20 20  NAME_PROC.  {.  
34e90 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49    /* If the SQLI
34ea0 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45 5f  TE_SHELL_DBNAME_
34eb0 50 52 4f 43 20 6d 61 63 72 6f 20 69 73 20 64 65  PROC macro is de
34ec0 66 69 6e 65 64 2c 20 74 68 65 6e 20 69 74 20 69  fined, then it i
34ed0 73 20 74 68 65 20 6e 61 6d 65 0a 20 20 20 20 2a  s the name.    *
34ee0 2a 20 6f 66 20 61 20 43 2d 66 75 6e 63 74 69 6f  * of a C-functio
34ef0 6e 20 74 68 61 74 20 77 69 6c 6c 20 70 72 6f 76  n that will prov
34f00 69 64 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ide the name of 
34f10 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
34f20 65 2e 20 20 55 73 65 0a 20 20 20 20 2a 2a 20 74  e.  Use.    ** t
34f30 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
34f40 20 6f 70 74 69 6f 6e 20 74 6f 20 65 6d 62 65 64   option to embed
34f50 20 74 68 69 73 20 73 68 65 6c 6c 20 70 72 6f 67   this shell prog
34f60 72 61 6d 20 69 6e 20 6c 61 72 67 65 72 0a 20 20  ram in larger.  
34f70 20 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e    ** application
34f80 73 2e 20 2a 2f 0a 20 20 20 20 65 78 74 65 72 6e  s. */.    extern
34f90 20 76 6f 69 64 20 53 51 4c 49 54 45 5f 53 48 45   void SQLITE_SHE
34fa0 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52 4f 43 28 63  LL_DBNAME_PROC(c
34fb0 6f 6e 73 74 20 63 68 61 72 2a 2a 29 3b 0a 20 20  onst char**);.  
34fc0 20 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 44    SQLITE_SHELL_D
34fd0 42 4e 41 4d 45 5f 50 52 4f 43 28 26 64 61 74 61  BNAME_PROC(&data
34fe0 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 29 3b 0a 20  .zDbFilename);. 
34ff0 20 20 20 77 61 72 6e 49 6e 6d 65 6d 6f 72 79 44     warnInmemoryD
35000 62 20 3d 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69  b = 0;.  }.#endi
35010 66 0a 0a 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e  f..  /* Do an in
35020 69 74 69 61 6c 20 70 61 73 73 20 74 68 72 6f 75  itial pass throu
35030 67 68 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  gh the command-l
35040 69 6e 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ine argument to 
35050 6c 6f 63 61 74 65 0a 20 20 2a 2a 20 74 68 65 20  locate.  ** the 
35060 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
35070 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20 6e  base file, the n
35080 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 69 74 69  ame of the initi
35090 61 6c 69 7a 61 74 69 6f 6e 20 66 69 6c 65 2c 0a  alization file,.
350a0 20 20 2a 2a 20 74 68 65 20 73 69 7a 65 20 6f 66    ** the size of
350b0 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76 65   the alternative
350c0 20 6d 61 6c 6c 6f 63 20 68 65 61 70 2c 0a 20 20   malloc heap,.  
350d0 2a 2a 20 61 6e 64 20 74 68 65 20 66 69 72 73 74  ** and the first
350e0 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 78 65 63   command to exec
350f0 75 74 65 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28  ute..  */.  for(
35100 69 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b  i=1; i<argc; i++
35110 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 3b 0a  ){.    char *z;.
35120 20 20 20 20 7a 20 3d 20 61 72 67 76 5b 69 5d 3b      z = argv[i];
35130 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 21 3d 27  .    if( z[0]!='
35140 2d 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  -' ){.      if( 
35150 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65  data.zDbFilename
35160 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 64  ==0 ){.        d
35170 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 20  ata.zDbFilename 
35180 3d 20 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = z;.      }else
35190 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 45 78 63  {.        /* Exc
351a0 65 73 73 73 20 61 72 67 75 6d 65 6e 74 73 20 61  esss arguments a
351b0 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  re interpreted a
351c0 73 20 53 51 4c 20 28 6f 72 20 64 6f 74 2d 63 6f  s SQL (or dot-co
351d0 6d 6d 61 6e 64 73 29 20 61 6e 64 0a 20 20 20 20  mmands) and.    
351e0 20 20 20 20 2a 2a 20 6d 65 61 6e 20 74 68 61 74      ** mean that
351f0 20 6e 6f 74 68 69 6e 67 20 69 73 20 72 65 61 64   nothing is read
35200 20 66 72 6f 6d 20 73 74 64 69 6e 20 2a 2f 0a 20   from stdin */. 
35210 20 20 20 20 20 20 20 72 65 61 64 53 74 64 69 6e         readStdin
35220 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6e 43   = 0;.        nC
35230 6d 64 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61 7a  md++;.        az
35240 43 6d 64 20 3d 20 72 65 61 6c 6c 6f 63 28 61 7a  Cmd = realloc(az
35250 43 6d 64 2c 20 73 69 7a 65 6f 66 28 61 7a 43 6d  Cmd, sizeof(azCm
35260 64 5b 30 5d 29 2a 6e 43 6d 64 29 3b 0a 20 20 20  d[0])*nCmd);.   
35270 20 20 20 20 20 69 66 28 20 61 7a 43 6d 64 3d 3d       if( azCmd==
35280 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  0 ){.          r
35290 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
352a0 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
352b0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
352c0 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20 20  exit(1);.       
352d0 20 7d 0a 20 20 20 20 20 20 20 20 61 7a 43 6d 64   }.        azCmd
352e0 5b 6e 43 6d 64 2d 31 5d 20 3d 20 7a 3b 0a 20 20  [nCmd-1] = z;.  
352f0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
35300 69 66 28 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29 20  if( z[1]=='-' ) 
35310 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20 73 74 72  z++;.    if( str
35320 63 6d 70 28 7a 2c 22 2d 73 65 70 61 72 61 74 6f  cmp(z,"-separato
35330 72 22 29 3d 3d 30 0a 20 20 20 20 20 7c 7c 20 73  r")==0.     || s
35340 74 72 63 6d 70 28 7a 2c 22 2d 6e 75 6c 6c 76 61  trcmp(z,"-nullva
35350 6c 75 65 22 29 3d 3d 30 0a 20 20 20 20 20 7c 7c  lue")==0.     ||
35360 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 65 77 6c   strcmp(z,"-newl
35370 69 6e 65 22 29 3d 3d 30 0a 20 20 20 20 20 7c 7c  ine")==0.     ||
35380 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 6d 64 22   strcmp(z,"-cmd"
35390 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
353a0 20 20 28 76 6f 69 64 29 63 6d 64 6c 69 6e 65 5f    (void)cmdline_
353b0 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67  option_value(arg
353c0 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b 0a 20  c, argv, ++i);. 
353d0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
353e0 63 6d 70 28 7a 2c 22 2d 69 6e 69 74 22 29 3d 3d  cmp(z,"-init")==
353f0 30 20 29 7b 0a 20 20 20 20 20 20 7a 49 6e 69 74  0 ){.      zInit
35400 46 69 6c 65 20 3d 20 63 6d 64 6c 69 6e 65 5f 6f  File = cmdline_o
35410 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63  ption_value(argc
35420 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b 0a 20 20  , argv, ++i);.  
35430 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
35440 6d 70 28 7a 2c 22 2d 62 61 74 63 68 22 29 3d 3d  mp(z,"-batch")==
35450 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4e 65  0 ){.      /* Ne
35460 65 64 20 74 6f 20 63 68 65 63 6b 20 66 6f 72 20  ed to check for 
35470 62 61 74 63 68 20 6d 6f 64 65 20 68 65 72 65 20  batch mode here 
35480 74 6f 20 73 6f 20 77 65 20 63 61 6e 20 61 76 6f  to so we can avo
35490 69 64 20 70 72 69 6e 74 69 6e 67 0a 20 20 20 20  id printing.    
354a0 20 20 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e    ** information
354b0 61 6c 20 6d 65 73 73 61 67 65 73 20 28 6c 69 6b  al messages (lik
354c0 65 20 66 72 6f 6d 20 70 72 6f 63 65 73 73 5f 73  e from process_s
354d0 71 6c 69 74 65 72 63 29 20 62 65 66 6f 72 65 0a  qliterc) before.
354e0 20 20 20 20 20 20 2a 2a 20 77 65 20 64 6f 20 74        ** we do t
354f0 68 65 20 61 63 74 75 61 6c 20 70 72 6f 63 65 73  he actual proces
35500 73 69 6e 67 20 6f 66 20 61 72 67 75 6d 65 6e 74  sing of argument
35510 73 20 6c 61 74 65 72 20 69 6e 20 61 20 73 65 63  s later in a sec
35520 6f 6e 64 20 70 61 73 73 2e 0a 20 20 20 20 20 20  ond pass..      
35530 2a 2f 0a 20 20 20 20 20 20 73 74 64 69 6e 5f 69  */.      stdin_i
35540 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 3d 20  s_interactive = 
35550 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
35560 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68 65 61 70   strcmp(z,"-heap
35570 22 29 3d 3d 30 20 29 7b 0a 23 69 66 20 64 65 66  ")==0 ){.#if def
35580 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
35590 4c 45 5f 4d 45 4d 53 59 53 33 29 20 7c 7c 20 64  LE_MEMSYS3) || d
355a0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
355b0 41 42 4c 45 5f 4d 45 4d 53 59 53 35 29 0a 20 20  ABLE_MEMSYS5).  
355c0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
355d0 7a 53 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c  zSize;.      sql
355e0 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 48 65 61  ite3_int64 szHea
355f0 70 3b 0a 0a 20 20 20 20 20 20 7a 53 69 7a 65 20  p;..      zSize 
35600 3d 20 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e  = cmdline_option
35610 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72 67  _value(argc, arg
35620 76 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 20 20 73  v, ++i);.      s
35630 7a 48 65 61 70 20 3d 20 69 6e 74 65 67 65 72 56  zHeap = integerV
35640 61 6c 75 65 28 7a 53 69 7a 65 29 3b 0a 20 20 20  alue(zSize);.   
35650 20 20 20 69 66 28 20 73 7a 48 65 61 70 3e 30 78     if( szHeap>0x
35660 37 66 66 66 30 30 30 30 20 29 20 73 7a 48 65 61  7fff0000 ) szHea
35670 70 20 3d 20 30 78 37 66 66 66 30 30 30 30 3b 0a  p = 0x7fff0000;.
35680 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f        sqlite3_co
35690 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46  nfig(SQLITE_CONF
356a0 49 47 5f 48 45 41 50 2c 20 6d 61 6c 6c 6f 63 28  IG_HEAP, malloc(
356b0 28 69 6e 74 29 73 7a 48 65 61 70 29 2c 20 28 69  (int)szHeap), (i
356c0 6e 74 29 73 7a 48 65 61 70 2c 20 36 34 29 3b 0a  nt)szHeap, 64);.
356d0 23 65 6c 73 65 0a 20 20 20 20 20 20 28 76 6f 69  #else.      (voi
356e0 64 29 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e  d)cmdline_option
356f0 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72 67  _value(argc, arg
35700 76 2c 20 2b 2b 69 29 3b 0a 23 65 6e 64 69 66 0a  v, ++i);.#endif.
35710 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
35720 72 63 6d 70 28 7a 2c 22 2d 70 61 67 65 63 61 63  rcmp(z,"-pagecac
35730 68 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  he")==0 ){.     
35740 20 69 6e 74 20 6e 2c 20 73 7a 3b 0a 20 20 20 20   int n, sz;.    
35750 20 20 73 7a 20 3d 20 28 69 6e 74 29 69 6e 74 65    sz = (int)inte
35760 67 65 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e 65  gerValue(cmdline
35770 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
35780 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20  gc,argv,++i));. 
35790 20 20 20 20 20 69 66 28 20 73 7a 3e 37 30 30 30       if( sz>7000
357a0 30 20 29 20 73 7a 20 3d 20 37 30 30 30 30 3b 0a  0 ) sz = 70000;.
357b0 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20 29        if( sz<0 )
357c0 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20 6e   sz = 0;.      n
357d0 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56   = (int)integerV
357e0 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74  alue(cmdline_opt
357f0 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
35800 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20  rgv,++i));.     
35810 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
35820 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50 41  SQLITE_CONFIG_PA
35830 47 45 43 41 43 48 45 2c 0a 20 20 20 20 20 20 20  GECACHE,.       
35840 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 3e               (n>
35850 30 20 26 26 20 73 7a 3e 30 29 20 3f 20 6d 61 6c  0 && sz>0) ? mal
35860 6c 6f 63 28 6e 2a 73 7a 29 20 3a 20 30 2c 20 73  loc(n*sz) : 0, s
35870 7a 2c 20 6e 29 3b 0a 20 20 20 20 20 20 64 61 74  z, n);.      dat
35880 61 2e 73 68 65 6c 6c 46 6c 67 73 20 7c 3d 20 53  a.shellFlgs |= S
35890 48 46 4c 47 5f 50 61 67 65 63 61 63 68 65 3b 0a  HFLG_Pagecache;.
358a0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
358b0 72 63 6d 70 28 7a 2c 22 2d 6c 6f 6f 6b 61 73 69  rcmp(z,"-lookasi
358c0 64 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  de")==0 ){.     
358d0 20 69 6e 74 20 6e 2c 20 73 7a 3b 0a 20 20 20 20   int n, sz;.    
358e0 20 20 73 7a 20 3d 20 28 69 6e 74 29 69 6e 74 65    sz = (int)inte
358f0 67 65 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e 65  gerValue(cmdline
35900 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
35910 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20  gc,argv,++i));. 
35920 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20 29 20       if( sz<0 ) 
35930 73 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20 6e 20  sz = 0;.      n 
35940 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61  = (int)integerVa
35950 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  lue(cmdline_opti
35960 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72  on_value(argc,ar
35970 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20  gv,++i));.      
35980 69 66 28 20 6e 3c 30 20 29 20 6e 20 3d 20 30 3b  if( n<0 ) n = 0;
35990 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63  .      sqlite3_c
359a0 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
359b0 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 73  FIG_LOOKASIDE, s
359c0 7a 2c 20 6e 29 3b 0a 20 20 20 20 20 20 69 66 28  z, n);.      if(
359d0 20 73 7a 2a 6e 3d 3d 30 20 29 20 64 61 74 61 2e   sz*n==0 ) data.
359e0 73 68 65 6c 6c 46 6c 67 73 20 26 3d 20 7e 53 48  shellFlgs &= ~SH
359f0 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64 65 3b 0a 23  FLG_Lookaside;.#
35a00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
35a10 42 4c 45 5f 56 46 53 54 52 41 43 45 0a 20 20 20  BLE_VFSTRACE.   
35a20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
35a30 70 28 7a 2c 22 2d 76 66 73 74 72 61 63 65 22 29  p(z,"-vfstrace")
35a40 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 65 78 74  ==0 ){.      ext
35a50 65 72 6e 20 69 6e 74 20 76 66 73 74 72 61 63 65  ern int vfstrace
35a60 5f 72 65 67 69 73 74 65 72 28 0a 20 20 20 20 20  _register(.     
35a70 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
35a80 7a 54 72 61 63 65 4e 61 6d 65 2c 0a 20 20 20 20  zTraceName,.    
35a90 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
35aa0 2a 7a 4f 6c 64 56 66 73 4e 61 6d 65 2c 0a 20 20  *zOldVfsName,.  
35ab0 20 20 20 20 20 20 20 69 6e 74 20 28 2a 78 4f 75         int (*xOu
35ac0 74 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 76  t)(const char*,v
35ad0 6f 69 64 2a 29 2c 0a 20 20 20 20 20 20 20 20 20  oid*),.         
35ae0 76 6f 69 64 20 2a 70 4f 75 74 41 72 67 2c 0a 20  void *pOutArg,. 
35af0 20 20 20 20 20 20 20 20 69 6e 74 20 6d 61 6b 65          int make
35b00 44 65 66 61 75 6c 74 0a 20 20 20 20 20 20 29 3b  Default.      );
35b10 0a 20 20 20 20 20 20 76 66 73 74 72 61 63 65 5f  .      vfstrace_
35b20 72 65 67 69 73 74 65 72 28 22 74 72 61 63 65 22  register("trace"
35b30 2c 30 2c 28 69 6e 74 28 2a 29 28 63 6f 6e 73 74  ,0,(int(*)(const
35b40 20 63 68 61 72 2a 2c 76 6f 69 64 2a 29 29 66 70   char*,void*))fp
35b50 75 74 73 2c 73 74 64 65 72 72 2c 31 29 3b 0a 23  uts,stderr,1);.#
35b60 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
35b70 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49  ITE_ENABLE_MULTI
35b80 50 4c 45 58 0a 20 20 20 20 7d 65 6c 73 65 20 69  PLEX.    }else i
35b90 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d 75  f( strcmp(z,"-mu
35ba0 6c 74 69 70 6c 65 78 22 29 3d 3d 30 20 29 7b 0a  ltiplex")==0 ){.
35bb0 20 20 20 20 20 20 65 78 74 65 72 6e 20 69 6e 74        extern int
35bc0 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c   sqlite3_multipl
35bd0 65 5f 69 6e 69 74 69 61 6c 69 7a 65 28 63 6f 6e  e_initialize(con
35be0 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 20  st char*,int);. 
35bf0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 6c       sqlite3_mul
35c00 74 69 70 6c 65 78 5f 69 6e 69 74 69 61 6c 69 7a  tiplex_initializ
35c10 65 28 30 2c 20 31 29 3b 0a 23 65 6e 64 69 66 0a  e(0, 1);.#endif.
35c20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
35c30 72 63 6d 70 28 7a 2c 22 2d 6d 6d 61 70 22 29 3d  rcmp(z,"-mmap")=
35c40 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
35c50 74 65 33 5f 69 6e 74 36 34 20 73 7a 20 3d 20 69  te3_int64 sz = i
35c60 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64 6c  ntegerValue(cmdl
35c70 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65  ine_option_value
35c80 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29  (argc,argv,++i))
35c90 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
35ca0 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f  config(SQLITE_CO
35cb0 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20  NFIG_MMAP_SIZE, 
35cc0 73 7a 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65 6c  sz, sz);.    }el
35cd0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
35ce0 22 2d 76 66 73 22 29 3d 3d 30 20 29 7b 0a 20 20  "-vfs")==0 ){.  
35cf0 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20      sqlite3_vfs 
35d00 2a 70 56 66 73 20 3d 20 73 71 6c 69 74 65 33 5f  *pVfs = sqlite3_
35d10 76 66 73 5f 66 69 6e 64 28 63 6d 64 6c 69 6e 65  vfs_find(cmdline
35d20 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
35d30 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20  gc,argv,++i));. 
35d40 20 20 20 20 20 69 66 28 20 70 56 66 73 20 29 7b       if( pVfs ){
35d50 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
35d60 5f 76 66 73 5f 72 65 67 69 73 74 65 72 28 70 56  _vfs_register(pV
35d70 66 73 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 65  fs, 1);.      }e
35d80 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 74 66  lse{.        utf
35d90 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
35da0 20 22 6e 6f 20 73 75 63 68 20 56 46 53 3a 20 5c   "no such VFS: \
35db0 22 25 73 5c 22 5c 6e 22 2c 20 61 72 67 76 5b 69  "%s\"\n", argv[i
35dc0 5d 29 3b 0a 20 20 20 20 20 20 20 20 65 78 69 74  ]);.        exit
35dd0 28 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  (1);.      }.   
35de0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 64 61 74   }.  }.  if( dat
35df0 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 3d 3d 30  a.zDbFilename==0
35e00 20 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   ){.#ifndef SQLI
35e10 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42  TE_OMIT_MEMORYDB
35e20 0a 20 20 20 20 64 61 74 61 2e 7a 44 62 46 69 6c  .    data.zDbFil
35e30 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79  ename = ":memory
35e40 3a 22 3b 0a 20 20 20 20 77 61 72 6e 49 6e 6d 65  :";.    warnInme
35e50 6d 6f 72 79 44 62 20 3d 20 61 72 67 63 3d 3d 31  moryDb = argc==1
35e60 3b 0a 23 65 6c 73 65 0a 20 20 20 20 75 74 66 38  ;.#else.    utf8
35e70 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
35e80 25 73 3a 20 45 72 72 6f 72 3a 20 6e 6f 20 64 61  %s: Error: no da
35e90 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65 20  tabase filename 
35ea0 73 70 65 63 69 66 69 65 64 5c 6e 22 2c 20 41 72  specified\n", Ar
35eb0 67 76 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  gv0);.    return
35ec0 20 31 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20   1;.#endif.  }. 
35ed0 20 64 61 74 61 2e 6f 75 74 20 3d 20 73 74 64 6f   data.out = stdo
35ee0 75 74 3b 0a 0a 20 20 2f 2a 20 47 6f 20 61 68 65  ut;..  /* Go ahe
35ef0 61 64 20 61 6e 64 20 6f 70 65 6e 20 74 68 65 20  ad and open the 
35f00 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
35f10 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73   it already exis
35f20 74 73 2e 20 20 49 66 20 74 68 65 0a 20 20 2a 2a  ts.  If the.  **
35f30 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65   file does not e
35f40 78 69 73 74 2c 20 64 65 6c 61 79 20 6f 70 65 6e  xist, delay open
35f50 69 6e 67 20 69 74 2e 20 20 54 68 69 73 20 70 72  ing it.  This pr
35f60 65 76 65 6e 74 73 20 65 6d 70 74 79 20 64 61 74  events empty dat
35f70 61 62 61 73 65 0a 20 20 2a 2a 20 66 69 6c 65 73  abase.  ** files
35f80 20 66 72 6f 6d 20 62 65 69 6e 67 20 63 72 65 61   from being crea
35f90 74 65 64 20 69 66 20 61 20 75 73 65 72 20 6d 69  ted if a user mi
35fa0 73 74 79 70 65 73 20 74 68 65 20 64 61 74 61 62  stypes the datab
35fb0 61 73 65 20 6e 61 6d 65 20 61 72 67 75 6d 65 6e  ase name argumen
35fc0 74 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 73 71  t.  ** to the sq
35fd0 6c 69 74 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e  lite command-lin
35fe0 65 20 74 6f 6f 6c 2e 0a 20 20 2a 2f 0a 20 20 69  e tool..  */.  i
35ff0 66 28 20 61 63 63 65 73 73 28 64 61 74 61 2e 7a  f( access(data.z
36000 44 62 46 69 6c 65 6e 61 6d 65 2c 20 30 29 3d 3d  DbFilename, 0)==
36010 30 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62  0 ){.    open_db
36020 28 26 64 61 74 61 2c 20 30 29 3b 0a 20 20 7d 0a  (&data, 0);.  }.
36030 0a 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 74 68  .  /* Process th
36040 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
36050 20 66 69 6c 65 20 69 66 20 74 68 65 72 65 20 69   file if there i
36060 73 20 6f 6e 65 2e 20 20 49 66 20 6e 6f 20 2d 69  s one.  If no -i
36070 6e 69 74 20 6f 70 74 69 6f 6e 0a 20 20 2a 2a 20  nit option.  ** 
36080 69 73 20 67 69 76 65 6e 20 6f 6e 20 74 68 65 20  is given on the 
36090 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 6c 6f  command line, lo
360a0 6f 6b 20 66 6f 72 20 61 20 66 69 6c 65 20 6e 61  ok for a file na
360b0 6d 65 64 20 7e 2f 2e 73 71 6c 69 74 65 72 63 20  med ~/.sqliterc 
360c0 61 6e 64 0a 20 20 2a 2a 20 74 72 79 20 74 6f 20  and.  ** try to 
360d0 70 72 6f 63 65 73 73 20 69 74 2e 0a 20 20 2a 2f  process it..  */
360e0 0a 20 20 70 72 6f 63 65 73 73 5f 73 71 6c 69 74  .  process_sqlit
360f0 65 72 63 28 26 64 61 74 61 2c 7a 49 6e 69 74 46  erc(&data,zInitF
36100 69 6c 65 29 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ile);..  /* Make
36110 20 61 20 73 65 63 6f 6e 64 20 70 61 73 73 20 74   a second pass t
36120 68 72 6f 75 67 68 20 74 68 65 20 63 6f 6d 6d 61  hrough the comma
36130 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd-line argument
36140 20 61 6e 64 20 73 65 74 0a 20 20 2a 2a 20 6f 70   and set.  ** op
36150 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 73 65 63  tions.  This sec
36160 6f 6e 64 20 70 61 73 73 20 69 73 20 64 65 6c 61  ond pass is dela
36170 79 65 64 20 75 6e 74 69 6c 20 61 66 74 65 72 20  yed until after 
36180 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
36190 6f 6e 0a 20 20 2a 2a 20 66 69 6c 65 20 69 73 20  on.  ** file is 
361a0 70 72 6f 63 65 73 73 65 64 20 73 6f 20 74 68 61  processed so tha
361b0 74 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  t the command-li
361c0 6e 65 20 61 72 67 75 6d 65 6e 74 73 20 77 69 6c  ne arguments wil
361d0 6c 20 6f 76 65 72 72 69 64 65 0a 20 20 2a 2a 20  l override.  ** 
361e0 73 65 74 74 69 6e 67 73 20 69 6e 20 74 68 65 20  settings in the 
361f0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 66  initialization f
36200 69 6c 65 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28  ile..  */.  for(
36210 69 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b  i=1; i<argc; i++
36220 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d  ){.    char *z =
36230 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20 20 69 66   argv[i];.    if
36240 28 20 7a 5b 30 5d 21 3d 27 2d 27 20 29 20 63 6f  ( z[0]!='-' ) co
36250 6e 74 69 6e 75 65 3b 0a 20 20 20 20 69 66 28 20  ntinue;.    if( 
36260 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b 20 7a 2b 2b  z[1]=='-' ){ z++
36270 3b 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72 63  ; }.    if( strc
36280 6d 70 28 7a 2c 22 2d 69 6e 69 74 22 29 3d 3d 30  mp(z,"-init")==0
36290 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20   ){.      i++;. 
362a0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
362b0 63 6d 70 28 7a 2c 22 2d 68 74 6d 6c 22 29 3d 3d  cmp(z,"-html")==
362c0 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e  0 ){.      data.
362d0 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 48 74 6d 6c  mode = MODE_Html
362e0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
362f0 73 74 72 63 6d 70 28 7a 2c 22 2d 6c 69 73 74 22  strcmp(z,"-list"
36300 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
36310 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c  ta.mode = MODE_L
36320 69 73 74 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ist;.    }else i
36330 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 71 75  f( strcmp(z,"-qu
36340 6f 74 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ote")==0 ){.    
36350 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f    data.mode = MO
36360 44 45 5f 51 75 6f 74 65 3b 0a 20 20 20 20 7d 65  DE_Quote;.    }e
36370 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
36380 2c 22 2d 6c 69 6e 65 22 29 3d 3d 30 20 29 7b 0a  ,"-line")==0 ){.
36390 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20        data.mode 
363a0 3d 20 4d 4f 44 45 5f 4c 69 6e 65 3b 0a 20 20 20  = MODE_Line;.   
363b0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
363c0 70 28 7a 2c 22 2d 63 6f 6c 75 6d 6e 22 29 3d 3d  p(z,"-column")==
363d0 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e  0 ){.      data.
363e0 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 43 6f 6c 75  mode = MODE_Colu
363f0 6d 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  mn;.    }else if
36400 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 73 76  ( strcmp(z,"-csv
36410 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64  ")==0 ){.      d
36420 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
36430 43 73 76 3b 0a 20 20 20 20 20 20 6d 65 6d 63 70  Csv;.      memcp
36440 79 28 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61  y(data.colSepara
36450 74 6f 72 2c 22 2c 22 2c 32 29 3b 0a 20 20 20 20  tor,",",2);.    
36460 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
36470 28 7a 2c 22 2d 61 73 63 69 69 22 29 3d 3d 30 20  (z,"-ascii")==0 
36480 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f  ){.      data.mo
36490 64 65 20 3d 20 4d 4f 44 45 5f 41 73 63 69 69 3b  de = MODE_Ascii;
364a0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
364b0 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64  nprintf(sizeof(d
364c0 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72  ata.colSeparator
364d0 29 2c 20 64 61 74 61 2e 63 6f 6c 53 65 70 61 72  ), data.colSepar
364e0 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20  ator,.          
364f0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 45 50               SEP
36500 5f 55 6e 69 74 29 3b 0a 20 20 20 20 20 20 73 71  _Unit);.      sq
36510 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
36520 69 7a 65 6f 66 28 64 61 74 61 2e 72 6f 77 53 65  izeof(data.rowSe
36530 70 61 72 61 74 6f 72 29 2c 20 64 61 74 61 2e 72  parator), data.r
36540 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20  owSeparator,.   
36550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36560 20 20 20 20 53 45 50 5f 52 65 63 6f 72 64 29 3b      SEP_Record);
36570 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
36580 74 72 63 6d 70 28 7a 2c 22 2d 73 65 70 61 72 61  trcmp(z,"-separa
36590 74 6f 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  tor")==0 ){.    
365a0 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
365b0 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 63  tf(sizeof(data.c
365c0 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 64 61  olSeparator), da
365d0 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c  ta.colSeparator,
365e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
365f0 20 20 20 20 20 20 20 20 22 25 73 22 2c 63 6d 64          "%s",cmd
36600 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
36610 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
36620 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
36630 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 65 77 6c   strcmp(z,"-newl
36640 69 6e 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ine")==0 ){.    
36650 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
36660 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 72  tf(sizeof(data.r
36670 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 64 61  owSeparator), da
36680 74 61 2e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c  ta.rowSeparator,
36690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
366a0 20 20 20 20 20 20 20 20 22 25 73 22 2c 63 6d 64          "%s",cmd
366b0 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
366c0 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
366d0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
366e0 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 75 6c 6c   strcmp(z,"-null
366f0 76 61 6c 75 65 22 29 3d 3d 30 20 29 7b 0a 20 20  value")==0 ){.  
36700 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
36710 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61  intf(sizeof(data
36720 2e 6e 75 6c 6c 56 61 6c 75 65 29 2c 20 64 61 74  .nullValue), dat
36730 61 2e 6e 75 6c 6c 56 61 6c 75 65 2c 0a 20 20 20  a.nullValue,.   
36740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36750 20 20 20 20 22 25 73 22 2c 63 6d 64 6c 69 6e 65      "%s",cmdline
36760 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
36770 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20  gc,argv,++i));. 
36780 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
36790 63 6d 70 28 7a 2c 22 2d 68 65 61 64 65 72 22 29  cmp(z,"-header")
367a0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74  ==0 ){.      dat
367b0 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d 20 31  a.showHeader = 1
367c0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
367d0 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 6f 68 65 61  strcmp(z,"-nohea
367e0 64 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  der")==0 ){.    
367f0 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65    data.showHeade
36800 72 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  r = 0;.    }else
36810 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
36820 65 63 68 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20  echo")==0 ){.   
36830 20 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28     ShellSetFlag(
36840 26 64 61 74 61 2c 20 53 48 46 4c 47 5f 45 63 68  &data, SHFLG_Ech
36850 6f 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  o);.    }else if
36860 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 65 71 70  ( strcmp(z,"-eqp
36870 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64  ")==0 ){.      d
36880 61 74 61 2e 61 75 74 6f 45 51 50 20 3d 20 31 3b  ata.autoEQP = 1;
36890 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
368a0 74 72 63 6d 70 28 7a 2c 22 2d 65 71 70 66 75 6c  trcmp(z,"-eqpful
368b0 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  l")==0 ){.      
368c0 64 61 74 61 2e 61 75 74 6f 45 51 50 20 3d 20 32  data.autoEQP = 2
368d0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
368e0 73 74 72 63 6d 70 28 7a 2c 22 2d 73 74 61 74 73  strcmp(z,"-stats
368f0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64  ")==0 ){.      d
36900 61 74 61 2e 73 74 61 74 73 4f 6e 20 3d 20 31 3b  ata.statsOn = 1;
36910 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
36920 74 72 63 6d 70 28 7a 2c 22 2d 73 63 61 6e 73 74  trcmp(z,"-scanst
36930 61 74 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ats")==0 ){.    
36940 20 20 64 61 74 61 2e 73 63 61 6e 73 74 61 74 73    data.scanstats
36950 4f 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  On = 1;.    }els
36960 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
36970 2d 62 61 63 6b 73 6c 61 73 68 22 29 3d 3d 30 20  -backslash")==0 
36980 29 7b 0a 20 20 20 20 20 20 2f 2a 20 55 6e 64 6f  ){.      /* Undo
36990 63 75 6d 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64  cumented command
369a0 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a 20 2d 62  -line option: -b
369b0 61 63 6b 73 6c 61 73 68 0a 20 20 20 20 20 20 2a  ackslash.      *
369c0 2a 20 43 61 75 73 65 73 20 43 2d 73 74 79 6c 65  * Causes C-style
369d0 20 62 61 63 6b 73 6c 61 73 68 20 65 73 63 61 70   backslash escap
369e0 65 73 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74  es to be evaluat
369f0 65 64 20 69 6e 20 53 51 4c 20 73 74 61 74 65 6d  ed in SQL statem
36a00 65 6e 74 73 0a 20 20 20 20 20 20 2a 2a 20 70 72  ents.      ** pr
36a10 69 6f 72 20 74 6f 20 73 65 6e 64 69 6e 67 20 74  ior to sending t
36a20 68 65 20 53 51 4c 20 69 6e 74 6f 20 53 51 4c 69  he SQL into SQLi
36a30 74 65 2e 20 20 55 73 65 66 75 6c 20 66 6f 72 20  te.  Useful for 
36a40 69 6e 6a 65 63 74 69 6e 67 0a 20 20 20 20 20 20  injecting.      
36a50 2a 2a 20 63 72 61 7a 79 20 62 79 74 65 73 20 69  ** crazy bytes i
36a60 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
36a70 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 66  SQL statements f
36a80 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64  or testing and d
36a90 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 20 20  ebugging..      
36aa0 2a 2f 0a 20 20 20 20 20 20 53 68 65 6c 6c 53 65  */.      ShellSe
36ab0 74 46 6c 61 67 28 26 64 61 74 61 2c 20 53 48 46  tFlag(&data, SHF
36ac0 4c 47 5f 42 61 63 6b 73 6c 61 73 68 29 3b 0a 20  LG_Backslash);. 
36ad0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
36ae0 63 6d 70 28 7a 2c 22 2d 62 61 69 6c 22 29 3d 3d  cmp(z,"-bail")==
36af0 30 20 29 7b 0a 20 20 20 20 20 20 62 61 69 6c 5f  0 ){.      bail_
36b00 6f 6e 5f 65 72 72 6f 72 20 3d 20 31 3b 0a 20 20  on_error = 1;.  
36b10 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
36b20 6d 70 28 7a 2c 22 2d 76 65 72 73 69 6f 6e 22 29  mp(z,"-version")
36b30 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 72 69  ==0 ){.      pri
36b40 6e 74 66 28 22 25 73 20 25 73 5c 6e 22 2c 20 73  ntf("%s %s\n", s
36b50 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
36b60 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f 73 6f 75  n(), sqlite3_sou
36b70 72 63 65 69 64 28 29 29 3b 0a 20 20 20 20 20 20  rceid());.      
36b80 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65  return 0;.    }e
36b90 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
36ba0 2c 22 2d 69 6e 74 65 72 61 63 74 69 76 65 22 29  ,"-interactive")
36bb0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 74 64  ==0 ){.      std
36bc0 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76  in_is_interactiv
36bd0 65 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 1;.    }else
36be0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
36bf0 62 61 74 63 68 22 29 3d 3d 30 20 29 7b 0a 20 20  batch")==0 ){.  
36c00 20 20 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74      stdin_is_int
36c10 65 72 61 63 74 69 76 65 20 3d 20 30 3b 0a 20 20  eractive = 0;.  
36c20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
36c30 6d 70 28 7a 2c 22 2d 68 65 61 70 22 29 3d 3d 30  mp(z,"-heap")==0
36c40 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20   ){.      i++;. 
36c50 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
36c60 63 6d 70 28 7a 2c 22 2d 70 61 67 65 63 61 63 68  cmp(z,"-pagecach
36c70 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
36c80 69 2b 3d 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20  i+=2;.    }else 
36c90 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6c  if( strcmp(z,"-l
36ca0 6f 6f 6b 61 73 69 64 65 22 29 3d 3d 30 20 29 7b  ookaside")==0 ){
36cb0 0a 20 20 20 20 20 20 69 2b 3d 32 3b 0a 20 20 20  .      i+=2;.   
36cc0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
36cd0 70 28 7a 2c 22 2d 6d 6d 61 70 22 29 3d 3d 30 20  p(z,"-mmap")==0 
36ce0 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20  ){.      i++;.  
36cf0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
36d00 6d 70 28 7a 2c 22 2d 76 66 73 22 29 3d 3d 30 20  mp(z,"-vfs")==0 
36d10 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 23 69  ){.      i++;.#i
36d20 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
36d30 4c 45 5f 56 46 53 54 52 41 43 45 0a 20 20 20 20  LE_VFSTRACE.    
36d40 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
36d50 28 7a 2c 22 2d 76 66 73 74 72 61 63 65 22 29 3d  (z,"-vfstrace")=
36d60 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b  =0 ){.      i++;
36d70 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
36d80 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c  QLITE_ENABLE_MUL
36d90 54 49 50 4c 45 58 0a 20 20 20 20 7d 65 6c 73 65  TIPLEX.    }else
36da0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
36db0 6d 75 6c 74 69 70 6c 65 78 22 29 3d 3d 30 20 29  multiplex")==0 )
36dc0 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 23 65 6e  {.      i++;.#en
36dd0 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  dif.    }else if
36de0 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68 65 6c  ( strcmp(z,"-hel
36df0 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  p")==0 ){.      
36e00 75 73 61 67 65 28 31 29 3b 0a 20 20 20 20 7d 65  usage(1);.    }e
36e10 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
36e20 2c 22 2d 63 6d 64 22 29 3d 3d 30 20 29 7b 0a 20  ,"-cmd")==0 ){. 
36e30 20 20 20 20 20 2f 2a 20 52 75 6e 20 63 6f 6d 6d       /* Run comm
36e40 61 6e 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77  ands that follow
36e50 20 2d 63 6d 64 20 66 69 72 73 74 20 61 6e 64 20   -cmd first and 
36e60 73 65 70 61 72 61 74 65 6c 79 20 66 72 6f 6d 20  separately from 
36e70 63 6f 6d 6d 61 6e 64 73 0a 20 20 20 20 20 20 2a  commands.      *
36e80 2a 20 74 68 61 74 20 73 69 6d 70 6c 79 20 61 70  * that simply ap
36e90 70 65 61 72 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  pear on the comm
36ea0 61 6e 64 2d 6c 69 6e 65 2e 20 20 54 68 69 73 20  and-line.  This 
36eb0 73 65 65 6d 73 20 67 6f 6f 66 79 2e 20 20 49 74  seems goofy.  It
36ec0 20 77 6f 75 6c 64 0a 20 20 20 20 20 20 2a 2a 20   would.      ** 
36ed0 62 65 20 62 65 74 74 65 72 20 69 66 20 61 6c 6c  be better if all
36ee0 20 63 6f 6d 6d 61 6e 64 73 20 72 61 6e 20 69 6e   commands ran in
36ef0 20 74 68 65 20 6f 72 64 65 72 20 74 68 61 74 20   the order that 
36f00 74 68 65 79 20 61 70 70 65 61 72 2e 20 20 42 75  they appear.  Bu
36f10 74 0a 20 20 20 20 20 20 2a 2a 20 77 65 20 72 65  t.      ** we re
36f20 74 61 69 6e 20 74 68 65 20 67 6f 6f 66 79 20 62  tain the goofy b
36f30 65 68 61 76 69 6f 72 20 66 6f 72 20 68 69 73 74  ehavior for hist
36f40 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74 69 62 69  orical compatibi
36f50 6c 69 74 79 2e 20 2a 2f 0a 20 20 20 20 20 20 69  lity. */.      i
36f60 66 28 20 69 3d 3d 61 72 67 63 2d 31 20 29 20 62  f( i==argc-1 ) b
36f70 72 65 61 6b 3b 0a 20 20 20 20 20 20 7a 20 3d 20  reak;.      z = 
36f80 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76  cmdline_option_v
36f90 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b  alue(argc,argv,+
36fa0 2b 69 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  +i);.      if( z
36fb0 5b 30 5d 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20  [0]=='.' ){.    
36fc0 20 20 20 20 72 63 20 3d 20 64 6f 5f 6d 65 74 61      rc = do_meta
36fd0 5f 63 6f 6d 6d 61 6e 64 28 7a 2c 20 26 64 61 74  _command(z, &dat
36fe0 61 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  a);.        if( 
36ff0 72 63 20 26 26 20 62 61 69 6c 5f 6f 6e 5f 65 72  rc && bail_on_er
37000 72 6f 72 20 29 20 72 65 74 75 72 6e 20 72 63 3d  ror ) return rc=
37010 3d 32 20 3f 20 30 20 3a 20 72 63 3b 0a 20 20 20  =2 ? 0 : rc;.   
37020 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
37030 20 20 6f 70 65 6e 5f 64 62 28 26 64 61 74 61 2c    open_db(&data,
37040 20 30 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20   0);.        rc 
37050 3d 20 73 68 65 6c 6c 5f 65 78 65 63 28 64 61 74  = shell_exec(dat
37060 61 2e 64 62 2c 20 7a 2c 20 73 68 65 6c 6c 5f 63  a.db, z, shell_c
37070 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c 20  allback, &data, 
37080 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
37090 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 21 3d     if( zErrMsg!=
370a0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  0 ){.          u
370b0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
370c0 72 2c 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  r,"Error: %s\n",
370d0 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20   zErrMsg);.     
370e0 20 20 20 20 20 69 66 28 20 62 61 69 6c 5f 6f 6e       if( bail_on
370f0 5f 65 72 72 6f 72 20 29 20 72 65 74 75 72 6e 20  _error ) return 
37100 72 63 21 3d 30 20 3f 20 72 63 20 3a 20 31 3b 0a  rc!=0 ? rc : 1;.
37110 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
37120 28 20 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20  ( rc!=0 ){.     
37130 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
37140 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
37150 75 6e 61 62 6c 65 20 74 6f 20 70 72 6f 63 65 73  unable to proces
37160 73 20 53 51 4c 20 5c 22 25 73 5c 22 5c 6e 22 2c  s SQL \"%s\"\n",
37170 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69   z);.          i
37180 66 28 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72  f( bail_on_error
37190 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20   ) return rc;.  
371a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
371b0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
371c0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
371d0 65 72 72 2c 22 25 73 3a 20 45 72 72 6f 72 3a 20  err,"%s: Error: 
371e0 75 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e 3a 20  unknown option: 
371f0 25 73 5c 6e 22 2c 20 41 72 67 76 30 2c 20 7a 29  %s\n", Argv0, z)
37200 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  ;.      raw_prin
37210 74 66 28 73 74 64 65 72 72 2c 22 55 73 65 20 2d  tf(stderr,"Use -
37220 68 65 6c 70 20 66 6f 72 20 61 20 6c 69 73 74 20  help for a list 
37230 6f 66 20 6f 70 74 69 6f 6e 73 2e 5c 6e 22 29 3b  of options.\n");
37240 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
37250 0a 20 20 20 20 7d 0a 20 20 20 20 64 61 74 61 2e  .    }.    data.
37260 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64  cMode = data.mod
37270 65 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 21 72  e;.  }..  if( !r
37280 65 61 64 53 74 64 69 6e 20 29 7b 0a 20 20 20 20  eadStdin ){.    
37290 2f 2a 20 52 75 6e 20 61 6c 6c 20 61 72 67 75 6d  /* Run all argum
372a0 65 6e 74 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  ents that do not
372b0 20 62 65 67 69 6e 20 77 69 74 68 20 27 2d 27 20   begin with '-' 
372c0 61 73 20 69 66 20 74 68 65 79 20 77 65 72 65 20  as if they were 
372d0 73 65 70 61 72 61 74 65 0a 20 20 20 20 2a 2a 20  separate.    ** 
372e0 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 69 6e 70  command-line inp
372f0 75 74 73 2c 20 65 78 63 65 70 74 20 66 6f 72 20  uts, except for 
37300 74 68 65 20 61 72 67 54 6f 53 6b 69 70 20 61 72  the argToSkip ar
37310 67 75 6d 65 6e 74 20 77 68 69 63 68 20 63 6f 6e  gument which con
37320 74 61 69 6e 73 0a 20 20 20 20 2a 2a 20 74 68 65  tains.    ** the
37330 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61   database filena
37340 6d 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 66  me..    */.    f
37350 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6d 64 3b 20  or(i=0; i<nCmd; 
37360 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
37370 61 7a 43 6d 64 5b 69 5d 5b 30 5d 3d 3d 27 2e 27  azCmd[i][0]=='.'
37380 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
37390 20 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64   do_meta_command
373a0 28 61 7a 43 6d 64 5b 69 5d 2c 20 26 64 61 74 61  (azCmd[i], &data
373b0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
373c0 63 20 29 20 72 65 74 75 72 6e 20 72 63 3d 3d 32  c ) return rc==2
373d0 20 3f 20 30 20 3a 20 72 63 3b 0a 20 20 20 20 20   ? 0 : rc;.     
373e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
373f0 6f 70 65 6e 5f 64 62 28 26 64 61 74 61 2c 20 30  open_db(&data, 0
37400 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
37410 73 68 65 6c 6c 5f 65 78 65 63 28 64 61 74 61 2e  shell_exec(data.
37420 64 62 2c 20 61 7a 43 6d 64 5b 69 5d 2c 20 73 68  db, azCmd[i], sh
37430 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64  ell_callback, &d
37440 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a  ata, &zErrMsg);.
37450 20 20 20 20 20 20 20 20 69 66 28 20 7a 45 72 72          if( zErr
37460 4d 73 67 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  Msg!=0 ){.      
37470 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
37480 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 25  stderr,"Error: %
37490 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a  s\n", zErrMsg);.
374a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
374b0 20 72 63 21 3d 30 20 3f 20 72 63 20 3a 20 31 3b   rc!=0 ? rc : 1;
374c0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69  .        }else i
374d0 66 28 20 72 63 21 3d 30 20 29 7b 0a 20 20 20 20  f( rc!=0 ){.    
374e0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
374f0 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
37500 20 75 6e 61 62 6c 65 20 74 6f 20 70 72 6f 63 65   unable to proce
37510 73 73 20 53 51 4c 3a 20 25 73 5c 6e 22 2c 20 61  ss SQL: %s\n", a
37520 7a 43 6d 64 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zCmd[i]);.      
37530 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20      return rc;. 
37540 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
37550 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65 65 28  .    }.    free(
37560 61 7a 43 6d 64 29 3b 0a 20 20 7d 65 6c 73 65 7b  azCmd);.  }else{
37570 0a 20 20 20 20 2f 2a 20 52 75 6e 20 63 6f 6d 6d  .    /* Run comm
37580 61 6e 64 73 20 72 65 63 65 69 76 65 64 20 66 72  ands received fr
37590 6f 6d 20 73 74 61 6e 64 61 72 64 20 69 6e 70 75  om standard inpu
375a0 74 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  t.    */.    if(
375b0 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61   stdin_is_intera
375c0 63 74 69 76 65 20 29 7b 0a 20 20 20 20 20 20 63  ctive ){.      c
375d0 68 61 72 20 2a 7a 48 6f 6d 65 3b 0a 20 20 20 20  har *zHome;.    
375e0 20 20 63 68 61 72 20 2a 7a 48 69 73 74 6f 72 79    char *zHistory
375f0 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e 74 20   = 0;