SQLite
Hex Artifact Content
Not logged in

Artifact 08cbffc31900359fea85896342a46147e9772c370d8a5079b7be26e3a1f50e8a:


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 0a 23 69 66 20 64 65  letion.c..#if de
56e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
56f0: 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 2f 2a 0a  BLE_SESSION)./*.
5700: 2a 2a 20 53 74 61 74 65 20 69 6e 66 6f 72 6d 61  ** State informa
5710: 74 69 6f 6e 20 66 6f 72 20 61 20 73 69 6e 67 6c  tion for a singl
5720: 65 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 0a 2a  e open session.*
5730: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
5740: 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 4f 70 65   OpenSession Ope
5750: 6e 53 65 73 73 69 6f 6e 3b 0a 73 74 72 75 63 74  nSession;.struct
5760: 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 7b 0a 20   OpenSession {. 
5770: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
5780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 79 6d            /* Sym
5790: 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74  bolic name for t
57a0: 68 69 73 20 73 65 73 73 69 6f 6e 20 2a 2f 0a 20  his session */. 
57b0: 20 69 6e 74 20 6e 46 69 6c 74 65 72 3b 20 20 20   int nFilter;   
57c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
57d0: 62 65 72 20 6f 66 20 78 46 69 6c 74 65 72 20 72  ber of xFilter r
57e0: 65 6a 65 63 74 69 6f 6e 20 47 4c 4f 42 20 70 61  ejection GLOB pa
57f0: 74 74 65 72 6e 73 20 2a 2f 0a 20 20 63 68 61 72  tterns */.  char
5800: 20 2a 2a 61 7a 46 69 6c 74 65 72 3b 20 20 20 20   **azFilter;    
5810: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
5820: 20 78 46 69 6c 74 65 72 20 72 65 6a 65 63 74 69   xFilter rejecti
5830: 6f 6e 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 73  on GLOB patterns
5840: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 65   */.  sqlite3_se
5850: 73 73 69 6f 6e 20 2a 70 3b 20 20 20 20 20 20 2f  ssion *p;      /
5860: 2a 20 54 68 65 20 6f 70 65 6e 20 73 65 73 73 69  * The open sessi
5870: 6f 6e 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 0a  on */.};.#endif.
5880: 0a 2f 2a 0a 2a 2a 20 53 68 65 6c 6c 20 6f 75 74  ./*.** Shell out
5890: 70 75 74 20 6d 6f 64 65 20 69 6e 66 6f 72 6d 61  put mode informa
58a0: 74 69 6f 6e 20 66 72 6f 6d 20 62 65 66 6f 72 65  tion from before
58b0: 20 22 2e 65 78 70 6c 61 69 6e 20 6f 6e 22 2c 0a   ".explain on",.
58c0: 2a 2a 20 73 61 76 65 64 20 73 6f 20 74 68 61 74  ** saved so that
58d0: 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
58e0: 72 65 64 20 62 79 20 22 2e 65 78 70 6c 61 69 6e  red by ".explain
58f0: 20 6f 66 66 22 0a 2a 2f 0a 74 79 70 65 64 65 66   off".*/.typedef
5900: 20 73 74 72 75 63 74 20 53 61 76 65 64 4d 6f 64   struct SavedMod
5910: 65 49 6e 66 6f 20 53 61 76 65 64 4d 6f 64 65 49  eInfo SavedModeI
5920: 6e 66 6f 3b 0a 73 74 72 75 63 74 20 53 61 76 65  nfo;.struct Save
5930: 64 4d 6f 64 65 49 6e 66 6f 20 7b 0a 20 20 69 6e  dModeInfo {.  in
5940: 74 20 76 61 6c 69 64 3b 20 20 20 20 20 20 20 20  t valid;        
5950: 20 20 2f 2a 20 49 73 20 74 68 65 72 65 20 6c 65    /* Is there le
5960: 67 69 74 20 64 61 74 61 20 69 6e 20 68 65 72 65  git data in here
5970: 3f 20 2a 2f 0a 20 20 69 6e 74 20 6d 6f 64 65 3b  ? */.  int mode;
5980: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
5990: 64 65 20 70 72 69 6f 72 20 74 6f 20 22 2e 65 78  de prior to ".ex
59a0: 70 6c 61 69 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69  plain on" */.  i
59b0: 6e 74 20 73 68 6f 77 48 65 61 64 65 72 3b 20 20  nt showHeader;  
59c0: 20 20 20 2f 2a 20 54 68 65 20 22 2e 68 65 61 64     /* The ".head
59d0: 65 72 22 20 73 65 74 74 69 6e 67 20 70 72 69 6f  er" setting prio
59e0: 72 20 74 6f 20 22 2e 65 78 70 6c 61 69 6e 20 6f  r to ".explain o
59f0: 6e 22 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6c 57  n" */.  int colW
5a00: 69 64 74 68 5b 31 30 30 5d 3b 20 20 2f 2a 20 43  idth[100];  /* C
5a10: 6f 6c 75 6d 6e 20 77 69 64 74 68 73 20 70 72 69  olumn widths pri
5a20: 6f 72 20 74 6f 20 22 2e 65 78 70 6c 61 69 6e 20  or to ".explain 
5a30: 6f 6e 22 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  on" */.};../*.**
5a40: 20 53 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   State informati
5a50: 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64 61 74  on about the dat
5a60: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
5a70: 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e   is contained in
5a80: 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
5a90: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
5aa0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 74   structure..*/.t
5ab0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 68  ypedef struct Sh
5ac0: 65 6c 6c 53 74 61 74 65 20 53 68 65 6c 6c 53 74  ellState ShellSt
5ad0: 61 74 65 3b 0a 73 74 72 75 63 74 20 53 68 65 6c  ate;.struct Shel
5ae0: 6c 53 74 61 74 65 20 7b 0a 20 20 73 71 6c 69 74  lState {.  sqlit
5af0: 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
5b00: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
5b10: 65 20 2a 2f 0a 20 20 69 6e 74 20 61 75 74 6f 45  e */.  int autoE
5b20: 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 2f 2a  xplain;       /*
5b30: 20 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 74   Automatically t
5b40: 75 72 6e 20 6f 6e 20 2e 65 78 70 6c 61 69 6e 20  urn on .explain 
5b50: 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 61 75  mode */.  int au
5b60: 74 6f 45 51 50 3b 20 20 20 20 20 20 20 20 20 20  toEQP;          
5b70: 20 2f 2a 20 52 75 6e 20 45 58 50 4c 41 49 4e 20   /* Run EXPLAIN 
5b80: 51 55 45 52 59 20 50 4c 41 4e 20 70 72 69 6f 72  QUERY PLAN prior
5b90: 20 74 6f 20 73 65 61 63 68 20 53 51 4c 20 73 74   to seach SQL st
5ba0: 6d 74 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61 74  mt */.  int stat
5bb0: 73 4f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  sOn;           /
5bc0: 2a 20 54 72 75 65 20 74 6f 20 64 69 73 70 6c 61  * True to displa
5bd0: 79 20 6d 65 6d 6f 72 79 20 73 74 61 74 73 20 62  y memory stats b
5be0: 65 66 6f 72 65 20 65 61 63 68 20 66 69 6e 61 6c  efore each final
5bf0: 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 73 63 61  ize */.  int sca
5c00: 6e 73 74 61 74 73 4f 6e 3b 20 20 20 20 20 20 20  nstatsOn;       
5c10: 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 70 6c  /* True to displ
5c20: 61 79 20 73 63 61 6e 20 73 74 61 74 73 20 62 65  ay scan stats be
5c30: 66 6f 72 65 20 65 61 63 68 20 66 69 6e 61 6c 69  fore each finali
5c40: 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 75 74 43  ze */.  int outC
5c50: 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ount;          /
5c60: 2a 20 52 65 76 65 72 74 20 74 6f 20 73 74 64 6f  * Revert to stdo
5c70: 75 74 20 77 68 65 6e 20 72 65 61 63 68 69 6e 67  ut when reaching
5c80: 20 7a 65 72 6f 20 2a 2f 0a 20 20 69 6e 74 20 63   zero */.  int c
5c90: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
5ca0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
5cb0: 65 63 6f 72 64 73 20 64 69 73 70 6c 61 79 65 64  ecords displayed
5cc0: 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 46 49 4c   so far */.  FIL
5cd0: 45 20 2a 6f 75 74 3b 20 20 20 20 20 20 20 20 20  E *out;         
5ce0: 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73      /* Write res
5cf0: 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 20 20 46  ults here */.  F
5d00: 49 4c 45 20 2a 74 72 61 63 65 4f 75 74 3b 20 20  ILE *traceOut;  
5d10: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
5d20: 66 6f 72 20 73 71 6c 69 74 65 33 5f 74 72 61 63  for sqlite3_trac
5d30: 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  e() */.  int nEr
5d40: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
5d50: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
5d60: 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
5d70: 74 20 6d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  t mode;         
5d80: 20 20 20 20 20 2f 2a 20 41 6e 20 6f 75 74 70 75       /* An outpu
5d90: 74 20 6d 6f 64 65 20 73 65 74 74 69 6e 67 20 2a  t mode setting *
5da0: 2f 0a 20 20 69 6e 74 20 63 4d 6f 64 65 3b 20 20  /.  int cMode;  
5db0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 65             /* te
5dc0: 6d 70 6f 72 61 72 79 20 6f 75 74 70 75 74 20 6d  mporary output m
5dd0: 6f 64 65 20 66 6f 72 20 74 68 65 20 63 75 72 72  ode for the curr
5de0: 65 6e 74 20 71 75 65 72 79 20 2a 2f 0a 20 20 69  ent query */.  i
5df0: 6e 74 20 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 20 20  nt normalMode;  
5e00: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
5e10: 6d 6f 64 65 20 62 65 66 6f 72 65 20 22 2e 65 78  mode before ".ex
5e20: 70 6c 61 69 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69  plain on" */.  i
5e30: 6e 74 20 77 72 69 74 61 62 6c 65 53 63 68 65 6d  nt writableSchem
5e40: 61 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  a;    /* True if
5e50: 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65   PRAGMA writable
5e60: 5f 73 63 68 65 6d 61 3d 4f 4e 20 2a 2f 0a 20 20  _schema=ON */.  
5e70: 69 6e 74 20 73 68 6f 77 48 65 61 64 65 72 3b 20  int showHeader; 
5e80: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
5e90: 6f 20 73 68 6f 77 20 63 6f 6c 75 6d 6e 20 6e 61  o show column na
5ea0: 6d 65 73 20 69 6e 20 4c 69 73 74 20 6f 72 20 43  mes in List or C
5eb0: 6f 6c 75 6d 6e 20 6d 6f 64 65 20 2a 2f 0a 20 20  olumn mode */.  
5ec0: 69 6e 74 20 6e 43 68 65 63 6b 3b 20 20 20 20 20  int nCheck;     
5ed0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
5ee0: 20 6f 66 20 22 2e 63 68 65 63 6b 22 20 63 6f 6d   of ".check" com
5ef0: 6d 61 6e 64 73 20 72 75 6e 20 2a 2f 0a 20 20 75  mands run */.  u
5f00: 6e 73 69 67 6e 65 64 20 73 68 65 6c 6c 46 6c 67  nsigned shellFlg
5f10: 73 3b 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73  s;    /* Various
5f20: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 63 68 61 72   flags */.  char
5f30: 20 2a 7a 44 65 73 74 54 61 62 6c 65 3b 20 20 20   *zDestTable;   
5f40: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 65     /* Name of de
5f50: 73 74 69 6e 61 74 69 6f 6e 20 74 61 62 6c 65 20  stination table 
5f60: 77 68 65 6e 20 4d 4f 44 45 5f 49 6e 73 65 72 74  when MODE_Insert
5f70: 20 2a 2f 0a 20 20 63 68 61 72 20 7a 54 65 73 74   */.  char zTest
5f80: 63 61 73 65 5b 33 30 5d 3b 20 20 20 20 2f 2a 20  case[30];    /* 
5f90: 4e 61 6d 65 20 6f 66 20 63 75 72 72 65 6e 74 20  Name of current 
5fa0: 74 65 73 74 20 63 61 73 65 20 2a 2f 0a 20 20 63  test case */.  c
5fb0: 68 61 72 20 63 6f 6c 53 65 70 61 72 61 74 6f 72  har colSeparator
5fc0: 5b 32 30 5d 3b 20 2f 2a 20 43 6f 6c 75 6d 6e 20  [20]; /* Column 
5fd0: 73 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63  separator charac
5fe0: 74 65 72 20 66 6f 72 20 73 65 76 65 72 61 6c 20  ter for several 
5ff0: 6d 6f 64 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  modes */.  char 
6000: 72 6f 77 53 65 70 61 72 61 74 6f 72 5b 32 30 5d  rowSeparator[20]
6010: 3b 20 2f 2a 20 52 6f 77 20 73 65 70 61 72 61 74  ; /* Row separat
6020: 6f 72 20 63 68 61 72 61 63 74 65 72 20 66 6f 72  or character for
6030: 20 4d 4f 44 45 5f 41 73 63 69 69 20 2a 2f 0a 20   MODE_Ascii */. 
6040: 20 69 6e 74 20 63 6f 6c 57 69 64 74 68 5b 31 30   int colWidth[10
6050: 30 5d 3b 20 20 20 20 20 2f 2a 20 52 65 71 75 65  0];     /* Reque
6060: 73 74 65 64 20 77 69 64 74 68 20 6f 66 20 65 61  sted width of ea
6070: 63 68 20 63 6f 6c 75 6d 6e 20 77 68 65 6e 20 69  ch column when i
6080: 6e 20 63 6f 6c 75 6d 6e 20 6d 6f 64 65 2a 2f 0a  n column mode*/.
6090: 20 20 69 6e 74 20 61 63 74 75 61 6c 57 69 64 74    int actualWidt
60a0: 68 5b 31 30 30 5d 3b 20 20 2f 2a 20 41 63 74 75  h[100];  /* Actu
60b0: 61 6c 20 77 69 64 74 68 20 6f 66 20 65 61 63 68  al width of each
60c0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
60d0: 72 20 6e 75 6c 6c 56 61 6c 75 65 5b 32 30 5d 3b  r nullValue[20];
60e0: 20 20 20 20 2f 2a 20 54 68 65 20 74 65 78 74 20      /* The text 
60f0: 74 6f 20 70 72 69 6e 74 20 77 68 65 6e 20 61 20  to print when a 
6100: 4e 55 4c 4c 20 63 6f 6d 65 73 20 62 61 63 6b 20  NULL comes back 
6110: 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 20 20 20  from.           
6120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
6130: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f   the database */
6140: 0a 20 20 63 68 61 72 20 6f 75 74 66 69 6c 65 5b  .  char outfile[
6150: 46 49 4c 45 4e 41 4d 45 5f 4d 41 58 5d 3b 20 2f  FILENAME_MAX]; /
6160: 2a 20 46 69 6c 65 6e 61 6d 65 20 66 6f 72 20 2a  * Filename for *
6170: 6f 75 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  out */.  const c
6180: 68 61 72 20 2a 7a 44 62 46 69 6c 65 6e 61 6d 65  har *zDbFilename
6190: 3b 20 20 20 20 2f 2a 20 6e 61 6d 65 20 6f 66 20  ;    /* name of 
61a0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
61b0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 46 72  e */.  char *zFr
61c0: 65 65 4f 6e 43 6c 6f 73 65 3b 20 20 20 20 20 20  eeOnClose;      
61d0: 20 20 20 2f 2a 20 46 69 6c 65 6e 61 6d 65 20 74     /* Filename t
61e0: 6f 20 66 72 65 65 20 77 68 65 6e 20 63 6c 6f 73  o free when clos
61f0: 69 6e 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ing */.  const c
6200: 68 61 72 20 2a 7a 56 66 73 3b 20 20 20 20 20 20  har *zVfs;      
6210: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
6220: 56 46 53 20 74 6f 20 75 73 65 20 2a 2f 0a 20 20  VFS to use */.  
6230: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
6240: 74 6d 74 3b 20 20 20 2f 2a 20 43 75 72 72 65 6e  tmt;   /* Curren
6250: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 61  t statement if a
6260: 6e 79 2e 20 2a 2f 0a 20 20 46 49 4c 45 20 2a 70  ny. */.  FILE *p
6270: 4c 6f 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Log;            
6280: 2f 2a 20 57 72 69 74 65 20 6c 6f 67 20 6f 75 74  /* Write log out
6290: 70 75 74 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  put here */.  in
62a0: 74 20 2a 61 69 49 6e 64 65 6e 74 3b 20 20 20 20  t *aiIndent;    
62b0: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
62c0: 20 69 6e 64 65 6e 74 73 20 75 73 65 64 20 69 6e   indents used in
62d0: 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 2a 2f   MODE_Explain */
62e0: 0a 20 20 69 6e 74 20 6e 49 6e 64 65 6e 74 3b 20  .  int nIndent; 
62f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
6300: 65 20 6f 66 20 61 72 72 61 79 20 61 69 49 6e 64  e of array aiInd
6310: 65 6e 74 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69  ent[] */.  int i
6320: 49 6e 64 65 6e 74 3b 20 20 20 20 20 20 20 20 20  Indent;         
6330: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 75    /* Index of cu
6340: 72 72 65 6e 74 20 6f 70 20 69 6e 20 61 69 49 6e  rrent op in aiIn
6350: 64 65 6e 74 5b 5d 20 2a 2f 0a 23 69 66 20 64 65  dent[] */.#if de
6360: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
6370: 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 20 20 69  BLE_SESSION).  i
6380: 6e 74 20 6e 53 65 73 73 69 6f 6e 3b 20 20 20 20  nt nSession;    
6390: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
63a0: 65 72 20 6f 66 20 61 63 74 69 76 65 20 73 65 73  er of active ses
63b0: 73 69 6f 6e 73 20 2a 2f 0a 20 20 4f 70 65 6e 53  sions */.  OpenS
63c0: 65 73 73 69 6f 6e 20 61 53 65 73 73 69 6f 6e 5b  ession aSession[
63d0: 34 5d 3b 20 20 2f 2a 20 41 72 72 61 79 20 6f 66  4];  /* Array of
63e0: 20 73 65 73 73 69 6f 6e 73 2e 20 20 5b 30 5d 20   sessions.  [0] 
63f0: 69 73 20 69 6e 20 66 6f 63 75 73 2e 20 2a 2f 0a  is in focus. */.
6400: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
6410: 20 54 68 65 73 65 20 61 72 65 20 74 68 65 20 61   These are the a
6420: 6c 6c 6f 77 65 64 20 73 68 65 6c 6c 46 6c 67 73  llowed shellFlgs
6430: 20 76 61 6c 75 65 73 0a 2a 2f 0a 23 64 65 66 69   values.*/.#defi
6440: 6e 65 20 53 48 46 4c 47 5f 50 61 67 65 63 61 63  ne SHFLG_Pagecac
6450: 68 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30  he      0x000000
6460: 30 31 20 2f 2a 20 54 68 65 20 2d 2d 70 61 67 65  01 /* The --page
6470: 63 61 63 68 65 20 6f 70 74 69 6f 6e 20 69 73 20  cache option is 
6480: 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
6490: 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64 65 20  SHFLG_Lookaside 
64a0: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 32 20       0x00000002 
64b0: 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d  /* Lookaside mem
64c0: 6f 72 79 20 69 73 20 75 73 65 64 20 2a 2f 0a 23  ory is used */.#
64d0: 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 42 61 63  define SHFLG_Bac
64e0: 6b 73 6c 61 73 68 20 20 20 20 20 20 30 78 30 30  kslash      0x00
64f0: 30 30 30 30 30 34 20 2f 2a 20 54 68 65 20 2d 2d  000004 /* The --
6500: 62 61 63 6b 73 6c 61 73 68 20 6f 70 74 69 6f 6e  backslash option
6510: 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
6520: 69 6e 65 20 53 48 46 4c 47 5f 50 72 65 73 65 72  ine SHFLG_Preser
6530: 76 65 52 6f 77 69 64 20 20 30 78 30 30 30 30 30  veRowid  0x00000
6540: 30 30 38 20 2f 2a 20 2e 64 75 6d 70 20 70 72 65  008 /* .dump pre
6550: 73 65 72 76 65 73 20 72 6f 77 69 64 20 76 61 6c  serves rowid val
6560: 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ues */.#define S
6570: 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 20 20 20  HFLG_Newlines   
6580: 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20 2f      0x00000010 /
6590: 2a 20 2e 64 75 6d 70 20 2d 2d 6e 65 77 6c 69 6e  * .dump --newlin
65a0: 65 20 66 6c 61 67 20 2a 2f 0a 23 64 65 66 69 6e  e flag */.#defin
65b0: 65 20 53 48 46 4c 47 5f 43 6f 75 6e 74 43 68 61  e SHFLG_CountCha
65c0: 6e 67 65 73 20 20 20 30 78 30 30 30 30 30 30 32  nges   0x0000002
65d0: 30 20 2f 2a 20 2e 63 68 61 6e 67 65 73 20 73 65  0 /* .changes se
65e0: 74 74 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  tting */.#define
65f0: 20 53 48 46 4c 47 5f 45 63 68 6f 20 20 20 20 20   SHFLG_Echo     
6600: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 34 30        0x00000040
6610: 20 2f 2a 20 2e 65 63 68 6f 20 6f 72 20 2d 2d 65   /* .echo or --e
6620: 63 68 6f 20 73 65 74 74 69 6e 67 20 2a 2f 0a 0a  cho setting */..
6630: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
6640: 20 74 65 73 74 69 6e 67 20 61 6e 64 20 73 65 74   testing and set
6650: 74 69 6e 67 20 73 68 65 6c 6c 46 6c 67 73 0a 2a  ting shellFlgs.*
6660: 2f 0a 23 64 65 66 69 6e 65 20 53 68 65 6c 6c 48  /.#define ShellH
6670: 61 73 46 6c 61 67 28 50 2c 58 29 20 20 20 20 28  asFlag(P,X)    (
6680: 28 28 50 29 2d 3e 73 68 65 6c 6c 46 6c 67 73 20  ((P)->shellFlgs 
6690: 26 20 28 58 29 29 21 3d 30 29 0a 23 64 65 66 69  & (X))!=0).#defi
66a0: 6e 65 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28  ne ShellSetFlag(
66b0: 50 2c 58 29 20 20 20 20 28 28 50 29 2d 3e 73 68  P,X)    ((P)->sh
66c0: 65 6c 6c 46 6c 67 73 7c 3d 28 58 29 29 0a 23 64  ellFlgs|=(X)).#d
66d0: 65 66 69 6e 65 20 53 68 65 6c 6c 43 6c 65 61 72  efine ShellClear
66e0: 46 6c 61 67 28 50 2c 58 29 20 20 28 28 50 29 2d  Flag(P,X)  ((P)-
66f0: 3e 73 68 65 6c 6c 46 6c 67 73 26 3d 28 7e 28 58  >shellFlgs&=(~(X
6700: 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  )))../*.** These
6710: 20 61 72 65 20 74 68 65 20 61 6c 6c 6f 77 65 64   are the allowed
6720: 20 6d 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69   modes..*/.#defi
6730: 6e 65 20 4d 4f 44 45 5f 4c 69 6e 65 20 20 20 20  ne MODE_Line    
6740: 20 30 20 20 2f 2a 20 4f 6e 65 20 63 6f 6c 75 6d   0  /* One colum
6750: 6e 20 70 65 72 20 6c 69 6e 65 2e 20 20 42 6c 61  n per line.  Bla
6760: 6e 6b 20 6c 69 6e 65 20 62 65 74 77 65 65 6e 20  nk line between 
6770: 72 65 63 6f 72 64 73 20 2a 2f 0a 23 64 65 66 69  records */.#defi
6780: 6e 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 20 20  ne MODE_Column  
6790: 20 31 20 20 2f 2a 20 4f 6e 65 20 72 65 63 6f 72   1  /* One recor
67a0: 64 20 70 65 72 20 6c 69 6e 65 20 69 6e 20 6e 65  d per line in ne
67b0: 61 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64  at columns */.#d
67c0: 65 66 69 6e 65 20 4d 4f 44 45 5f 4c 69 73 74 20  efine MODE_List 
67d0: 20 20 20 20 32 20 20 2f 2a 20 4f 6e 65 20 72 65      2  /* One re
67e0: 63 6f 72 64 20 70 65 72 20 6c 69 6e 65 20 77 69  cord per line wi
67f0: 74 68 20 61 20 73 65 70 61 72 61 74 6f 72 20 2a  th a separator *
6800: 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 53  /.#define MODE_S
6810: 65 6d 69 20 20 20 20 20 33 20 20 2f 2a 20 53 61  emi     3  /* Sa
6820: 6d 65 20 61 73 20 4d 4f 44 45 5f 4c 69 73 74 20  me as MODE_List 
6830: 62 75 74 20 61 70 70 65 6e 64 20 22 3b 22 20 74  but append ";" t
6840: 6f 20 65 61 63 68 20 6c 69 6e 65 20 2a 2f 0a 23  o each line */.#
6850: 64 65 66 69 6e 65 20 4d 4f 44 45 5f 48 74 6d 6c  define MODE_Html
6860: 20 20 20 20 20 34 20 20 2f 2a 20 47 65 6e 65 72       4  /* Gener
6870: 61 74 65 20 61 6e 20 58 48 54 4d 4c 20 74 61 62  ate an XHTML tab
6880: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f  le */.#define MO
6890: 44 45 5f 49 6e 73 65 72 74 20 20 20 35 20 20 2f  DE_Insert   5  /
68a0: 2a 20 47 65 6e 65 72 61 74 65 20 53 51 4c 20 22  * Generate SQL "
68b0: 69 6e 73 65 72 74 22 20 73 74 61 74 65 6d 65 6e  insert" statemen
68c0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f  ts */.#define MO
68d0: 44 45 5f 51 75 6f 74 65 20 20 20 20 36 20 20 2f  DE_Quote    6  /
68e0: 2a 20 51 75 6f 74 65 20 76 61 6c 75 65 73 20 61  * Quote values a
68f0: 73 20 66 6f 72 20 53 51 4c 20 2a 2f 0a 23 64 65  s for SQL */.#de
6900: 66 69 6e 65 20 4d 4f 44 45 5f 54 63 6c 20 20 20  fine MODE_Tcl   
6910: 20 20 20 37 20 20 2f 2a 20 47 65 6e 65 72 61 74     7  /* Generat
6920: 65 20 41 4e 53 49 2d 43 20 6f 72 20 54 43 4c 20  e ANSI-C or TCL 
6930: 71 75 6f 74 65 64 20 65 6c 65 6d 65 6e 74 73 20  quoted elements 
6940: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f  */.#define MODE_
6950: 43 73 76 20 20 20 20 20 20 38 20 20 2f 2a 20 51  Csv      8  /* Q
6960: 75 6f 74 65 20 73 74 72 69 6e 67 73 2c 20 6e 75  uote strings, nu
6970: 6d 62 65 72 73 20 61 72 65 20 70 6c 61 69 6e 20  mbers are plain 
6980: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f  */.#define MODE_
6990: 45 78 70 6c 61 69 6e 20 20 39 20 20 2f 2a 20 4c  Explain  9  /* L
69a0: 69 6b 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 2c  ike MODE_Column,
69b0: 20 62 75 74 20 64 6f 20 6e 6f 74 20 74 72 75 6e   but do not trun
69c0: 63 61 74 65 20 64 61 74 61 20 2a 2f 0a 23 64 65  cate data */.#de
69d0: 66 69 6e 65 20 4d 4f 44 45 5f 41 73 63 69 69 20  fine MODE_Ascii 
69e0: 20 20 31 30 20 20 2f 2a 20 55 73 65 20 41 53 43    10  /* Use ASC
69f0: 49 49 20 75 6e 69 74 20 61 6e 64 20 72 65 63 6f  II unit and reco
6a00: 72 64 20 73 65 70 61 72 61 74 6f 72 73 20 28 30  rd separators (0
6a10: 78 31 46 2f 30 78 31 45 29 20 2a 2f 0a 23 64 65  x1F/0x1E) */.#de
6a20: 66 69 6e 65 20 4d 4f 44 45 5f 50 72 65 74 74 79  fine MODE_Pretty
6a30: 20 20 31 31 20 20 2f 2a 20 50 72 65 74 74 79 2d    11  /* Pretty-
6a40: 70 72 69 6e 74 20 73 63 68 65 6d 61 73 20 2a 2f  print schemas */
6a50: 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63  ..static const c
6a60: 68 61 72 20 2a 6d 6f 64 65 44 65 73 63 72 5b 5d  har *modeDescr[]
6a70: 20 3d 20 7b 0a 20 20 22 6c 69 6e 65 22 2c 0a 20   = {.  "line",. 
6a80: 20 22 63 6f 6c 75 6d 6e 22 2c 0a 20 20 22 6c 69   "column",.  "li
6a90: 73 74 22 2c 0a 20 20 22 73 65 6d 69 22 2c 0a 20  st",.  "semi",. 
6aa0: 20 22 68 74 6d 6c 22 2c 0a 20 20 22 69 6e 73 65   "html",.  "inse
6ab0: 72 74 22 2c 0a 20 20 22 71 75 6f 74 65 22 2c 0a  rt",.  "quote",.
6ac0: 20 20 22 74 63 6c 22 2c 0a 20 20 22 63 73 76 22    "tcl",.  "csv"
6ad0: 2c 0a 20 20 22 65 78 70 6c 61 69 6e 22 2c 0a 20  ,.  "explain",. 
6ae0: 20 22 61 73 63 69 69 22 2c 0a 20 20 22 70 72 65   "ascii",.  "pre
6af0: 74 74 79 70 72 69 6e 74 22 2c 0a 7d 3b 0a 0a 2f  ttyprint",.};../
6b00: 2a 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20 74  *.** These are t
6b10: 68 65 20 63 6f 6c 75 6d 6e 2f 72 6f 77 2f 6c 69  he column/row/li
6b20: 6e 65 20 73 65 70 61 72 61 74 6f 72 73 20 75 73  ne separators us
6b30: 65 64 20 62 79 20 74 68 65 20 76 61 72 69 6f 75  ed by the variou
6b40: 73 0a 2a 2a 20 69 6d 70 6f 72 74 2f 65 78 70 6f  s.** import/expo
6b50: 72 74 20 6d 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65  rt modes..*/.#de
6b60: 66 69 6e 65 20 53 45 50 5f 43 6f 6c 75 6d 6e 20  fine SEP_Column 
6b70: 20 20 20 22 7c 22 0a 23 64 65 66 69 6e 65 20 53     "|".#define S
6b80: 45 50 5f 52 6f 77 20 20 20 20 20 20 20 22 5c 6e  EP_Row       "\n
6b90: 22 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 54 61  ".#define SEP_Ta
6ba0: 62 20 20 20 20 20 20 20 22 5c 74 22 0a 23 64 65  b       "\t".#de
6bb0: 66 69 6e 65 20 53 45 50 5f 53 70 61 63 65 20 20  fine SEP_Space  
6bc0: 20 20 20 22 20 22 0a 23 64 65 66 69 6e 65 20 53     " ".#define S
6bd0: 45 50 5f 43 6f 6d 6d 61 20 20 20 20 20 22 2c 22  EP_Comma     ","
6be0: 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 43 72 4c  .#define SEP_CrL
6bf0: 66 20 20 20 20 20 20 22 5c 72 5c 6e 22 0a 23 64  f      "\r\n".#d
6c00: 65 66 69 6e 65 20 53 45 50 5f 55 6e 69 74 20 20  efine SEP_Unit  
6c10: 20 20 20 20 22 5c 78 31 46 22 0a 23 64 65 66 69      "\x1F".#defi
6c20: 6e 65 20 53 45 50 5f 52 65 63 6f 72 64 20 20 20  ne SEP_Record   
6c30: 20 22 5c 78 31 45 22 0a 0a 2f 2a 0a 2a 2a 20 4e   "\x1E"../*.** N
6c40: 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
6c50: 73 20 69 6e 20 61 6e 20 61 72 72 61 79 0a 2a 2f  s in an array.*/
6c60: 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69  .#define ArraySi
6c70: 7a 65 28 58 29 20 20 28 69 6e 74 29 28 73 69 7a  ze(X)  (int)(siz
6c80: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
6c90: 30 5d 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 61  0]))../*.** A ca
6ca0: 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 73  llback for the s
6cb0: 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20 69 6e 74  qlite3_log() int
6cc0: 65 72 66 61 63 65 2e 0a 2a 2f 0a 73 74 61 74 69  erface..*/.stati
6cd0: 63 20 76 6f 69 64 20 73 68 65 6c 6c 4c 6f 67 28  c void shellLog(
6ce0: 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
6cf0: 69 45 72 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20  iErrCode, const 
6d00: 63 68 61 72 20 2a 7a 4d 73 67 29 7b 0a 20 20 53  char *zMsg){.  S
6d10: 68 65 6c 6c 53 74 61 74 65 20 2a 70 20 3d 20 28  hellState *p = (
6d20: 53 68 65 6c 6c 53 74 61 74 65 2a 29 70 41 72 67  ShellState*)pArg
6d30: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 4c 6f 67 3d  ;.  if( p->pLog=
6d40: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 75  =0 ) return;.  u
6d50: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 70 4c  tf8_printf(p->pL
6d60: 6f 67 2c 20 22 28 25 64 29 20 25 73 5c 6e 22 2c  og, "(%d) %s\n",
6d70: 20 69 45 72 72 43 6f 64 65 2c 20 7a 4d 73 67 29   iErrCode, zMsg)
6d80: 3b 0a 20 20 66 66 6c 75 73 68 28 70 2d 3e 70 4c  ;.  fflush(p->pL
6d90: 6f 67 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75  og);.}../*.** Ou
6da0: 74 70 75 74 20 74 68 65 20 67 69 76 65 6e 20 73  tput the given s
6db0: 74 72 69 6e 67 20 61 73 20 61 20 68 65 78 2d 65  tring as a hex-e
6dc0: 6e 63 6f 64 65 64 20 62 6c 6f 62 20 28 65 67 2e  ncoded blob (eg.
6dd0: 20 58 27 31 32 33 34 27 20 29 0a 2a 2f 0a 73 74   X'1234' ).*/.st
6de0: 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74  atic void output
6df0: 5f 68 65 78 5f 62 6c 6f 62 28 46 49 4c 45 20 2a  _hex_blob(FILE *
6e00: 6f 75 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  out, const void 
6e10: 2a 70 42 6c 6f 62 2c 20 69 6e 74 20 6e 42 6c 6f  *pBlob, int nBlo
6e20: 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63  b){.  int i;.  c
6e30: 68 61 72 20 2a 7a 42 6c 6f 62 20 3d 20 28 63 68  har *zBlob = (ch
6e40: 61 72 20 2a 29 70 42 6c 6f 62 3b 0a 20 20 72 61  ar *)pBlob;.  ra
6e50: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 58 27  w_printf(out,"X'
6e60: 22 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  ");.  for(i=0; i
6e70: 3c 6e 42 6c 6f 62 3b 20 69 2b 2b 29 7b 20 72 61  <nBlob; i++){ ra
6e80: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 25 30  w_printf(out,"%0
6e90: 32 78 22 2c 7a 42 6c 6f 62 5b 69 5d 26 30 78 66  2x",zBlob[i]&0xf
6ea0: 66 29 3b 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e  f); }.  raw_prin
6eb0: 74 66 28 6f 75 74 2c 22 27 22 29 3b 0a 7d 0a 0a  tf(out,"'");.}..
6ec0: 2f 2a 0a 2a 2a 20 46 69 6e 64 20 61 20 73 74 72  /*.** Find a str
6ed0: 69 6e 67 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ing that is not 
6ee0: 66 6f 75 6e 64 20 61 6e 79 77 68 65 72 65 20 69  found anywhere i
6ef0: 6e 20 7a 5b 5d 2e 20 20 52 65 74 75 72 6e 20 61  n z[].  Return a
6f00: 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74   pointer.** to t
6f10: 68 61 74 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a  hat string..**.*
6f20: 2a 20 54 72 79 20 74 6f 20 75 73 65 20 7a 41 20  * Try to use zA 
6f30: 61 6e 64 20 7a 42 20 66 69 72 73 74 2e 20 20 49  and zB first.  I
6f40: 66 20 62 6f 74 68 20 6f 66 20 74 68 6f 73 65 20  f both of those 
6f50: 61 72 65 20 61 6c 72 65 61 64 79 20 66 6f 75 6e  are already foun
6f60: 64 20 69 6e 20 7a 5b 5d 0a 2a 2a 20 74 68 65 6e  d in z[].** then
6f70: 20 6d 61 6b 65 20 75 70 20 73 6f 6d 65 20 73 74   make up some st
6f80: 72 69 6e 67 20 61 6e 64 20 73 74 6f 72 65 20 69  ring and store i
6f90: 74 20 69 6e 20 74 68 65 20 62 75 66 66 65 72 20  t in the buffer 
6fa0: 7a 42 75 66 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  zBuf..*/.static 
6fb0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 75 6e 75 73  const char *unus
6fc0: 65 64 5f 73 74 72 69 6e 67 28 0a 20 20 63 6f 6e  ed_string(.  con
6fd0: 73 74 20 63 68 61 72 20 2a 7a 2c 20 20 20 20 20  st char *z,     
6fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6ff0: 2a 20 52 65 73 75 6c 74 20 6d 75 73 74 20 6e 6f  * Result must no
7000: 74 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72  t appear anywher
7010: 65 20 69 6e 20 7a 20 2a 2f 0a 20 20 63 6f 6e 73  e in z */.  cons
7020: 74 20 63 68 61 72 20 2a 7a 41 2c 20 63 6f 6e 73  t char *zA, cons
7030: 74 20 63 68 61 72 20 2a 7a 42 2c 20 20 20 2f 2a  t char *zB,   /*
7040: 20 54 72 79 20 74 68 65 73 65 20 66 69 72 73 74   Try these first
7050: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 75 66   */.  char *zBuf
7060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7070: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
7080: 20 74 6f 20 73 74 6f 72 65 20 61 20 67 65 6e 65   to store a gene
7090: 72 61 74 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a  rated string */.
70a0: 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 20  ){.  unsigned i 
70b0: 3d 20 30 3b 0a 20 20 69 66 28 20 73 74 72 73 74  = 0;.  if( strst
70c0: 72 28 7a 2c 20 7a 41 29 3d 3d 30 20 29 20 72 65  r(z, zA)==0 ) re
70d0: 74 75 72 6e 20 7a 41 3b 0a 20 20 69 66 28 20 73  turn zA;.  if( s
70e0: 74 72 73 74 72 28 7a 2c 20 7a 42 29 3d 3d 30 20  trstr(z, zB)==0 
70f0: 29 20 72 65 74 75 72 6e 20 7a 42 3b 0a 20 20 64  ) return zB;.  d
7100: 6f 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  o{.    sqlite3_s
7110: 6e 70 72 69 6e 74 66 28 32 30 2c 7a 42 75 66 2c  nprintf(20,zBuf,
7120: 22 28 25 73 25 75 29 22 2c 20 7a 41 2c 20 69 2b  "(%s%u)", zA, i+
7130: 2b 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 73 74  +);.  }while( st
7140: 72 73 74 72 28 7a 2c 7a 42 75 66 29 21 3d 30 20  rstr(z,zBuf)!=0 
7150: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 42 75 66  );.  return zBuf
7160: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75  ;.}../*.** Outpu
7170: 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69  t the given stri
7180: 6e 67 20 61 73 20 61 20 71 75 6f 74 65 64 20 73  ng as a quoted s
7190: 74 72 69 6e 67 20 75 73 69 6e 67 20 53 51 4c 20  tring using SQL 
71a0: 71 75 6f 74 69 6e 67 20 63 6f 6e 76 65 6e 74 69  quoting conventi
71b0: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ons..**.** See a
71c0: 6c 73 6f 3a 20 6f 75 74 70 75 74 5f 71 75 6f 74  lso: output_quot
71d0: 65 64 5f 65 73 63 61 70 65 64 5f 73 74 72 69 6e  ed_escaped_strin
71e0: 67 28 29 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  g().*/.static vo
71f0: 69 64 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64  id output_quoted
7200: 5f 73 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75  _string(FILE *ou
7210: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  t, const char *z
7220: 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68  ){.  int i;.  ch
7230: 61 72 20 63 3b 0a 20 20 73 65 74 42 69 6e 61 72  ar c;.  setBinar
7240: 79 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a 20  yMode(out, 1);. 
7250: 20 66 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20 7a   for(i=0; (c = z
7260: 5b 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27 5c  [i])!=0 && c!='\
7270: 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69 66 28  ''; i++){}.  if(
7280: 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66   c==0 ){.    utf
7290: 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 25  8_printf(out,"'%
72a0: 73 27 22 2c 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b  s'",z);.  }else{
72b0: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
72c0: 6f 75 74 2c 20 22 27 22 29 3b 0a 20 20 20 20 77  out, "'");.    w
72d0: 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20  hile( *z ){.    
72e0: 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20    for(i=0; (c = 
72f0: 7a 5b 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27  z[i])!=0 && c!='
7300: 5c 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20  \''; i++){}.    
7310: 20 20 69 66 28 20 63 3d 3d 27 5c 27 27 20 29 20    if( c=='\'' ) 
7320: 69 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 69  i++;.      if( i
7330: 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38   ){.        utf8
7340: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 2e  _printf(out, "%.
7350: 2a 73 22 2c 20 69 2c 20 7a 29 3b 0a 20 20 20 20  *s", i, z);.    
7360: 20 20 20 20 7a 20 2b 3d 20 69 3b 0a 20 20 20 20      z += i;.    
7370: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d    }.      if( c=
7380: 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 20  ='\'' ){.       
7390: 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
73a0: 20 22 27 22 29 3b 0a 20 20 20 20 20 20 20 20 63   "'");.        c
73b0: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d  ontinue;.      }
73c0: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20  .      if( c==0 
73d0: 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  ){.        break
73e0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
73f0: 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  z++;.    }.    r
7400: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
7410: 27 22 29 3b 0a 20 20 7d 0a 20 20 73 65 74 54 65  '");.  }.  setTe
7420: 78 74 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a  xtMode(out, 1);.
7430: 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20  }../*.** Output 
7440: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
7450: 20 61 73 20 61 20 71 75 6f 74 65 64 20 73 74 72   as a quoted str
7460: 69 6e 67 20 75 73 69 6e 67 20 53 51 4c 20 71 75  ing using SQL qu
7470: 6f 74 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e  oting convention
7480: 73 2e 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  s..** Additional
7490: 6c 6c 79 20 2c 20 65 73 63 61 70 65 20 74 68 65  lly , escape the
74a0: 20 22 5c 6e 22 20 61 6e 64 20 22 5c 72 22 20 63   "\n" and "\r" c
74b0: 68 61 72 61 63 74 65 72 73 20 73 6f 20 74 68 61  haracters so tha
74c0: 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 0a 2a 2a  t they do not.**
74d0: 20 67 65 74 20 63 6f 72 72 75 70 74 65 64 20 62   get corrupted b
74e0: 79 20 65 6e 64 2d 6f 66 2d 6c 69 6e 65 20 74 72  y end-of-line tr
74f0: 61 6e 73 6c 61 74 69 6f 6e 20 66 61 63 69 6c 69  anslation facili
7500: 74 69 65 73 20 69 6e 20 73 6f 6d 65 20 6f 70 65  ties in some ope
7510: 72 61 74 69 6e 67 0a 2a 2a 20 73 79 73 74 65 6d  rating.** system
7520: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  s..**.** This is
7530: 20 6c 69 6b 65 20 6f 75 74 70 75 74 5f 71 75 6f   like output_quo
7540: 74 65 64 5f 73 74 72 69 6e 67 28 29 20 62 75 74  ted_string() but
7550: 20 77 69 74 68 20 74 68 65 20 61 64 64 69 74 69   with the additi
7560: 6f 6e 20 6f 66 20 74 68 65 20 5c 72 5c 6e 0a 2a  on of the \r\n.*
7570: 2a 20 65 73 63 61 70 65 20 6d 65 63 68 61 6e 69  * escape mechani
7580: 73 6d 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  sm..*/.static vo
7590: 69 64 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64  id output_quoted
75a0: 5f 65 73 63 61 70 65 64 5f 73 74 72 69 6e 67 28  _escaped_string(
75b0: 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74  FILE *out, const
75c0: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74   char *z){.  int
75d0: 20 69 3b 0a 20 20 63 68 61 72 20 63 3b 0a 20 20   i;.  char c;.  
75e0: 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 6f 75  setBinaryMode(ou
75f0: 74 2c 20 31 29 3b 0a 20 20 66 6f 72 28 69 3d 30  t, 1);.  for(i=0
7600: 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20  ; (c = z[i])!=0 
7610: 26 26 20 63 21 3d 27 5c 27 27 20 26 26 20 63 21  && c!='\'' && c!
7620: 3d 27 5c 6e 27 20 26 26 20 63 21 3d 27 5c 72 27  ='\n' && c!='\r'
7630: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 63  ; i++){}.  if( c
7640: 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  ==0 ){.    utf8_
7650: 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 25 73 27  printf(out,"'%s'
7660: 22 2c 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ",z);.  }else{. 
7670: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
7680: 4e 4c 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73  NL = 0;.    cons
7690: 74 20 63 68 61 72 20 2a 7a 43 52 20 3d 20 30 3b  t char *zCR = 0;
76a0: 0a 20 20 20 20 69 6e 74 20 6e 4e 4c 20 3d 20 30  .    int nNL = 0
76b0: 3b 0a 20 20 20 20 69 6e 74 20 6e 43 52 20 3d 20  ;.    int nCR = 
76c0: 30 3b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  0;.    char zBuf
76d0: 31 5b 32 30 5d 2c 20 7a 42 75 66 32 5b 32 30 5d  1[20], zBuf2[20]
76e0: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a  ;.    for(i=0; z
76f0: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  [i]; i++){.     
7700: 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 6e 27 20   if( z[i]=='\n' 
7710: 29 20 6e 4e 4c 2b 2b 3b 0a 20 20 20 20 20 20 69  ) nNL++;.      i
7720: 66 28 20 7a 5b 69 5d 3d 3d 27 5c 72 27 20 29 20  f( z[i]=='\r' ) 
7730: 6e 43 52 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  nCR++;.    }.   
7740: 20 69 66 28 20 6e 4e 4c 20 29 7b 0a 20 20 20 20   if( nNL ){.    
7750: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
7760: 2c 20 22 72 65 70 6c 61 63 65 28 22 29 3b 0a 20  , "replace(");. 
7770: 20 20 20 20 20 7a 4e 4c 20 3d 20 75 6e 75 73 65       zNL = unuse
7780: 64 5f 73 74 72 69 6e 67 28 7a 2c 20 22 5c 5c 6e  d_string(z, "\\n
7790: 22 2c 20 22 5c 5c 30 31 32 22 2c 20 7a 42 75 66  ", "\\012", zBuf
77a0: 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  1);.    }.    if
77b0: 28 20 6e 43 52 20 29 7b 0a 20 20 20 20 20 20 72  ( nCR ){.      r
77c0: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
77d0: 72 65 70 6c 61 63 65 28 22 29 3b 0a 20 20 20 20  replace(");.    
77e0: 20 20 7a 43 52 20 3d 20 75 6e 75 73 65 64 5f 73    zCR = unused_s
77f0: 74 72 69 6e 67 28 7a 2c 20 22 5c 5c 72 22 2c 20  tring(z, "\\r", 
7800: 22 5c 5c 30 31 35 22 2c 20 7a 42 75 66 32 29 3b  "\\015", zBuf2);
7810: 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70  .    }.    raw_p
7820: 72 69 6e 74 66 28 6f 75 74 2c 20 22 27 22 29 3b  rintf(out, "'");
7830: 0a 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 29  .    while( *z )
7840: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  {.      for(i=0;
7850: 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26   (c = z[i])!=0 &
7860: 26 20 63 21 3d 27 5c 6e 27 20 26 26 20 63 21 3d  & c!='\n' && c!=
7870: 27 5c 72 27 20 26 26 20 63 21 3d 27 5c 27 27 3b  '\r' && c!='\'';
7880: 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 69 66   i++){}.      if
7890: 28 20 63 3d 3d 27 5c 27 27 20 29 20 69 2b 2b 3b  ( c=='\'' ) i++;
78a0: 0a 20 20 20 20 20 20 69 66 28 20 69 20 29 7b 0a  .      if( i ){.
78b0: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
78c0: 6e 74 66 28 6f 75 74 2c 20 22 25 2e 2a 73 22 2c  ntf(out, "%.*s",
78d0: 20 69 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20   i, z);.        
78e0: 7a 20 2b 3d 20 69 3b 0a 20 20 20 20 20 20 7d 0a  z += i;.      }.
78f0: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c 27        if( c=='\'
7900: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  ' ){.        raw
7910: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 27 22  _printf(out, "'"
7920: 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69  );.        conti
7930: 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  nue;.      }.   
7940: 20 20 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20     if( c==0 ){. 
7950: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
7960: 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 2b 2b 3b      }.      z++;
7970: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c  .      if( c=='\
7980: 6e 27 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  n' ){.        ra
7990: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25  w_printf(out, "%
79a0: 73 22 2c 20 7a 4e 4c 29 3b 0a 20 20 20 20 20 20  s", zNL);.      
79b0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
79c0: 20 20 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72    }.      raw_pr
79d0: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
79e0: 7a 43 52 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  zCR);.    }.    
79f0: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  raw_printf(out, 
7a00: 22 27 22 29 3b 0a 20 20 20 20 69 66 28 20 6e 43  "'");.    if( nC
7a10: 52 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  R ){.      raw_p
7a20: 72 69 6e 74 66 28 6f 75 74 2c 20 22 2c 27 25 73  rintf(out, ",'%s
7a30: 27 2c 63 68 61 72 28 31 33 29 29 22 2c 20 7a 43  ',char(13))", zC
7a40: 52 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  R);.    }.    if
7a50: 28 20 6e 4e 4c 20 29 7b 0a 20 20 20 20 20 20 72  ( nNL ){.      r
7a60: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
7a70: 2c 27 25 73 27 2c 63 68 61 72 28 31 30 29 29 22  ,'%s',char(10))"
7a80: 2c 20 7a 4e 4c 29 3b 0a 20 20 20 20 7d 0a 20 20  , zNL);.    }.  
7a90: 7d 0a 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28  }.  setTextMode(
7aa0: 6f 75 74 2c 20 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  out, 1);.}../*.*
7ab0: 2a 20 4f 75 74 70 75 74 20 74 68 65 20 67 69 76  * Output the giv
7ac0: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 71  en string as a q
7ad0: 75 6f 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20  uoted according 
7ae0: 74 6f 20 43 20 6f 72 20 54 43 4c 20 71 75 6f 74  to C or TCL quot
7af0: 69 6e 67 20 72 75 6c 65 73 2e 0a 2a 2f 0a 73 74  ing rules..*/.st
7b00: 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74  atic void output
7b10: 5f 63 5f 73 74 72 69 6e 67 28 46 49 4c 45 20 2a  _c_string(FILE *
7b20: 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  out, const char 
7b30: 2a 7a 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20  *z){.  unsigned 
7b40: 69 6e 74 20 63 3b 0a 20 20 66 70 75 74 63 28 27  int c;.  fputc('
7b50: 22 27 2c 20 6f 75 74 29 3b 0a 20 20 77 68 69 6c  "', out);.  whil
7b60: 65 28 20 28 63 20 3d 20 2a 28 7a 2b 2b 29 29 21  e( (c = *(z++))!
7b70: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 63 3d  =0 ){.    if( c=
7b80: 3d 27 5c 5c 27 20 29 7b 0a 20 20 20 20 20 20 66  ='\\' ){.      f
7b90: 70 75 74 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20  putc(c, out);.  
7ba0: 20 20 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74      fputc(c, out
7bb0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
7bc0: 20 63 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20 20   c=='"' ){.     
7bd0: 20 66 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74   fputc('\\', out
7be0: 29 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27  );.      fputc('
7bf0: 22 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65  "', out);.    }e
7c00: 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c 74 27 20  lse if( c=='\t' 
7c10: 29 7b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27  ){.      fputc('
7c20: 5c 5c 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20  \\', out);.     
7c30: 20 66 70 75 74 63 28 27 74 27 2c 20 6f 75 74 29   fputc('t', out)
7c40: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
7c50: 63 3d 3d 27 5c 6e 27 20 29 7b 0a 20 20 20 20 20  c=='\n' ){.     
7c60: 20 66 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74   fputc('\\', out
7c70: 29 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27  );.      fputc('
7c80: 6e 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65  n', out);.    }e
7c90: 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c 72 27 20  lse if( c=='\r' 
7ca0: 29 7b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27  ){.      fputc('
7cb0: 5c 5c 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20  \\', out);.     
7cc0: 20 66 70 75 74 63 28 27 72 27 2c 20 6f 75 74 29   fputc('r', out)
7cd0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
7ce0: 21 69 73 70 72 69 6e 74 28 63 26 30 78 66 66 29  !isprint(c&0xff)
7cf0: 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
7d00: 69 6e 74 66 28 6f 75 74 2c 20 22 5c 5c 25 30 33  intf(out, "\\%03
7d10: 6f 22 2c 20 63 26 30 78 66 66 29 3b 0a 20 20 20  o", c&0xff);.   
7d20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 70   }else{.      fp
7d30: 75 74 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20 20  utc(c, out);.   
7d40: 20 7d 0a 20 20 7d 0a 20 20 66 70 75 74 63 28 27   }.  }.  fputc('
7d50: 22 27 2c 20 6f 75 74 29 3b 0a 7d 0a 0a 2f 2a 0a  "', out);.}../*.
7d60: 2a 2a 20 4f 75 74 70 75 74 20 74 68 65 20 67 69  ** Output the gi
7d70: 76 65 6e 20 73 74 72 69 6e 67 20 77 69 74 68 20  ven string with 
7d80: 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
7d90: 61 72 65 20 73 70 65 63 69 61 6c 20 74 6f 0a 2a  are special to.*
7da0: 2a 20 48 54 4d 4c 20 65 73 63 61 70 65 64 2e 0a  * HTML escaped..
7db0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
7dc0: 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74 72 69 6e  utput_html_strin
7dd0: 67 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e  g(FILE *out, con
7de0: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69  st char *z){.  i
7df0: 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a 3d 3d 30  nt i;.  if( z==0
7e00: 20 29 20 7a 20 3d 20 22 22 3b 0a 20 20 77 68 69   ) z = "";.  whi
7e10: 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 66 6f  le( *z ){.    fo
7e20: 72 28 69 3d 30 3b 20 20 20 7a 5b 69 5d 0a 20 20  r(i=0;   z[i].  
7e30: 20 20 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69            && z[i
7e40: 5d 21 3d 27 3c 27 0a 20 20 20 20 20 20 20 20 20  ]!='<'.         
7e50: 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 26 27 0a     && z[i]!='&'.
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 7a              && z
7e70: 5b 69 5d 21 3d 27 3e 27 0a 20 20 20 20 20 20 20  [i]!='>'.       
7e80: 20 20 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 5c       && z[i]!='\
7e90: 22 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  "'.            &
7ea0: 26 20 7a 5b 69 5d 21 3d 27 5c 27 27 3b 0a 20 20  & z[i]!='\'';.  
7eb0: 20 20 20 20 20 20 69 2b 2b 29 7b 7d 0a 20 20 20        i++){}.   
7ec0: 20 69 66 28 20 69 3e 30 20 29 7b 0a 20 20 20 20   if( i>0 ){.    
7ed0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75    utf8_printf(ou
7ee0: 74 2c 22 25 2e 2a 73 22 2c 69 2c 7a 29 3b 0a 20  t,"%.*s",i,z);. 
7ef0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 5b 69     }.    if( z[i
7f00: 5d 3d 3d 27 3c 27 20 29 7b 0a 20 20 20 20 20 20  ]=='<' ){.      
7f10: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22  raw_printf(out,"
7f20: 26 6c 74 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73  &lt;");.    }els
7f30: 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 26 27 20  e if( z[i]=='&' 
7f40: 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
7f50: 6e 74 66 28 6f 75 74 2c 22 26 61 6d 70 3b 22 29  ntf(out,"&amp;")
7f60: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
7f70: 7a 5b 69 5d 3d 3d 27 3e 27 20 29 7b 0a 20 20 20  z[i]=='>' ){.   
7f80: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
7f90: 74 2c 22 26 67 74 3b 22 29 3b 0a 20 20 20 20 7d  t,"&gt;");.    }
7fa0: 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27  else if( z[i]=='
7fb0: 5c 22 27 20 29 7b 0a 20 20 20 20 20 20 72 61 77  \"' ){.      raw
7fc0: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 71 75  _printf(out,"&qu
7fd0: 6f 74 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ot;");.    }else
7fe0: 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 27 27 20   if( z[i]=='\'' 
7ff0: 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
8000: 6e 74 66 28 6f 75 74 2c 22 26 23 33 39 3b 22 29  ntf(out,"&#39;")
8010: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
8020: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
8030: 20 20 20 20 7a 20 2b 3d 20 69 20 2b 20 31 3b 0a      z += i + 1;.
8040: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20    }.}../*.** If 
8050: 61 20 66 69 65 6c 64 20 63 6f 6e 74 61 69 6e 73  a field contains
8060: 20 61 6e 79 20 63 68 61 72 61 63 74 65 72 20 69   any character i
8070: 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 31  dentified by a 1
8080: 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
8090: 67 0a 2a 2a 20 61 72 72 61 79 2c 20 74 68 65 6e  g.** array, then
80a0: 20 74 68 65 20 73 74 72 69 6e 67 20 6d 75 73 74   the string must
80b0: 20 62 65 20 71 75 6f 74 65 64 20 66 6f 72 20 43   be quoted for C
80c0: 53 56 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  SV..*/.static co
80d0: 6e 73 74 20 63 68 61 72 20 6e 65 65 64 43 73 76  nst char needCsv
80e0: 51 75 6f 74 65 5b 5d 20 3d 20 7b 0a 20 20 31 2c  Quote[] = {.  1,
80f0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8100: 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c  1, 1,   1, 1, 1,
8110: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a   1, 1, 1, 1, 1,.
8120: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
8130: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
8140: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
8150: 20 31 2c 0a 20 20 31 2c 20 30 2c 20 31 2c 20 30   1,.  1, 0, 1, 0
8160: 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 20 20  , 0, 0, 0, 1,   
8170: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8180: 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20  , 0, 0,.  0, 0, 
8190: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
81a0: 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  ,   0, 0, 0, 0, 
81b0: 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30 2c  0, 0, 0, 0,.  0,
81c0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
81d0: 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c  0, 0,   0, 0, 0,
81e0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 0a   0, 0, 0, 0, 0,.
81f0: 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c    0, 0, 0, 0, 0,
8200: 20 30 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20 30   0, 0, 0,   0, 0
8210: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
8220: 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30   0,.  0, 0, 0, 0
8230: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20  , 0, 0, 0, 0,   
8240: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8250: 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20  , 0, 0,.  0, 0, 
8260: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8270: 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  ,   0, 0, 0, 0, 
8280: 30 2c 20 30 2c 20 30 2c 20 31 2c 0a 20 20 31 2c  0, 0, 0, 1,.  1,
8290: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
82a0: 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c  1, 1,   1, 1, 1,
82b0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a   1, 1, 1, 1, 1,.
82c0: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
82d0: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
82e0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
82f0: 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,.  1, 1, 1, 1
8300: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20  , 1, 1, 1, 1,   
8310: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8320: 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20  , 1, 1,.  1, 1, 
8330: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8340: 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  ,   1, 1, 1, 1, 
8350: 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c  1, 1, 1, 1,.  1,
8360: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8370: 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c  1, 1,   1, 1, 1,
8380: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a   1, 1, 1, 1, 1,.
8390: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
83a0: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
83b0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
83c0: 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,.  1, 1, 1, 1
83d0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20  , 1, 1, 1, 1,   
83e0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
83f0: 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20  , 1, 1,.  1, 1, 
8400: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8410: 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  ,   1, 1, 1, 1, 
8420: 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 7d 3b 0a 0a  1, 1, 1, 1,.};..
8430: 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 61 20 73  /*.** Output a s
8440: 69 6e 67 6c 65 20 74 65 72 6d 20 6f 66 20 43 53  ingle term of CS
8450: 56 2e 20 20 41 63 74 75 61 6c 6c 79 2c 20 70 2d  V.  Actually, p-
8460: 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 20 69 73  >colSeparator is
8470: 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 74 68 65   used for.** the
8480: 20 73 65 70 61 72 61 74 6f 72 2c 20 77 68 69 63   separator, whic
8490: 68 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  h may or may not
84a0: 20 62 65 20 61 20 63 6f 6d 6d 61 2e 20 20 70 2d   be a comma.  p-
84b0: 3e 6e 75 6c 6c 56 61 6c 75 65 20 69 73 0a 2a 2a  >nullValue is.**
84c0: 20 74 68 65 20 6e 75 6c 6c 20 76 61 6c 75 65 2e   the null value.
84d0: 20 20 53 74 72 69 6e 67 73 20 61 72 65 20 71 75    Strings are qu
84e0: 6f 74 65 64 20 69 66 20 6e 65 63 65 73 73 61 72  oted if necessar
84f0: 79 2e 20 20 54 68 65 20 73 65 70 61 72 61 74 6f  y.  The separato
8500: 72 0a 2a 2a 20 69 73 20 6f 6e 6c 79 20 69 73 73  r.** is only iss
8510: 75 65 64 20 69 66 20 62 53 65 70 20 69 73 20 74  ued if bSep is t
8520: 72 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  rue..*/.static v
8530: 6f 69 64 20 6f 75 74 70 75 74 5f 63 73 76 28 53  oid output_csv(S
8540: 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f  hellState *p, co
8550: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
8560: 20 62 53 65 70 29 7b 0a 20 20 46 49 4c 45 20 2a   bSep){.  FILE *
8570: 6f 75 74 20 3d 20 70 2d 3e 6f 75 74 3b 0a 20 20  out = p->out;.  
8580: 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
8590: 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c  utf8_printf(out,
85a0: 22 25 73 22 2c 70 2d 3e 6e 75 6c 6c 56 61 6c 75  "%s",p->nullValu
85b0: 65 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  e);.  }else{.   
85c0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
85d0: 6e 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28  nSep = strlen30(
85e0: 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29  p->colSeparator)
85f0: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a  ;.    for(i=0; z
8600: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  [i]; i++){.     
8610: 20 69 66 28 20 6e 65 65 64 43 73 76 51 75 6f 74   if( needCsvQuot
8620: 65 5b 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  e[((unsigned cha
8630: 72 2a 29 7a 29 5b 69 5d 5d 0a 20 20 20 20 20 20  r*)z)[i]].      
8640: 20 20 20 7c 7c 20 28 7a 5b 69 5d 3d 3d 70 2d 3e     || (z[i]==p->
8650: 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 20  colSeparator[0] 
8660: 26 26 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &&.             
8670: 28 6e 53 65 70 3d 3d 31 20 7c 7c 20 6d 65 6d 63  (nSep==1 || memc
8680: 6d 70 28 7a 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  mp(z, p->colSepa
8690: 72 61 74 6f 72 2c 20 6e 53 65 70 29 3d 3d 30 29  rator, nSep)==0)
86a0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69 20 3d  ) ){.        i =
86b0: 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   0;.        brea
86c0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
86d0: 0a 20 20 20 20 69 66 28 20 69 3d 3d 30 20 29 7b  .    if( i==0 ){
86e0: 0a 20 20 20 20 20 20 70 75 74 63 28 27 22 27 2c  .      putc('"',
86f0: 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 6f 72   out);.      for
8700: 28 69 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29  (i=0; z[i]; i++)
8710: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b  {.        if( z[
8720: 69 5d 3d 3d 27 22 27 20 29 20 70 75 74 63 28 27  i]=='"' ) putc('
8730: 22 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20  "', out);.      
8740: 20 20 70 75 74 63 28 7a 5b 69 5d 2c 20 6f 75 74    putc(z[i], out
8750: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
8760: 20 70 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b   putc('"', out);
8770: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
8780: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75    utf8_printf(ou
8790: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
87a0: 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 62 53 65   }.  }.  if( bSe
87b0: 70 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  p ){.    utf8_pr
87c0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
87d0: 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  ", p->colSeparat
87e0: 6f 72 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  or);.  }.}../*.*
87f0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72  * This routine r
8800: 75 6e 73 20 77 68 65 6e 20 74 68 65 20 75 73 65  uns when the use
8810: 72 20 70 72 65 73 73 65 73 20 43 74 72 6c 2d 43  r presses Ctrl-C
8820: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
8830: 69 6e 74 65 72 72 75 70 74 5f 68 61 6e 64 6c 65  interrupt_handle
8840: 72 28 69 6e 74 20 4e 6f 74 55 73 65 64 29 7b 0a  r(int NotUsed){.
8850: 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54    UNUSED_PARAMET
8860: 45 52 28 4e 6f 74 55 73 65 64 29 3b 0a 20 20 73  ER(NotUsed);.  s
8870: 65 65 6e 49 6e 74 65 72 72 75 70 74 2b 2b 3b 0a  eenInterrupt++;.
8880: 20 20 69 66 28 20 73 65 65 6e 49 6e 74 65 72 72    if( seenInterr
8890: 75 70 74 3e 32 20 29 20 65 78 69 74 28 31 29 3b  upt>2 ) exit(1);
88a0: 0a 20 20 69 66 28 20 67 6c 6f 62 61 6c 44 62 20  .  if( globalDb 
88b0: 29 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ) sqlite3_interr
88c0: 75 70 74 28 67 6c 6f 62 61 6c 44 62 29 3b 0a 7d  upt(globalDb);.}
88d0: 0a 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 5f  ..#if (defined(_
88e0: 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65  WIN32) || define
88f0: 64 28 57 49 4e 33 32 29 29 20 26 26 20 21 64 65  d(WIN32)) && !de
8900: 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45  fined(_WIN32_WCE
8910: 29 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  )./*.** This rou
8920: 74 69 6e 65 20 72 75 6e 73 20 66 6f 72 20 63 6f  tine runs for co
8930: 6e 73 6f 6c 65 20 65 76 65 6e 74 73 20 28 65 2e  nsole events (e.
8940: 67 2e 20 43 74 72 6c 2d 43 29 20 6f 6e 20 57 69  g. Ctrl-C) on Wi
8950: 6e 33 32 0a 2a 2f 0a 73 74 61 74 69 63 20 42 4f  n32.*/.static BO
8960: 4f 4c 20 57 49 4e 41 50 49 20 43 6f 6e 73 6f 6c  OL WINAPI Consol
8970: 65 43 74 72 6c 48 61 6e 64 6c 65 72 28 0a 20 20  eCtrlHandler(.  
8980: 44 57 4f 52 44 20 64 77 43 74 72 6c 54 79 70 65  DWORD dwCtrlType
8990: 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 43   /* One of the C
89a0: 54 52 4c 5f 2a 5f 45 56 45 4e 54 20 63 6f 6e 73  TRL_*_EVENT cons
89b0: 74 61 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 66  tants */.){.  if
89c0: 28 20 64 77 43 74 72 6c 54 79 70 65 3d 3d 43 54  ( dwCtrlType==CT
89d0: 52 4c 5f 43 5f 45 56 45 4e 54 20 29 7b 0a 20 20  RL_C_EVENT ){.  
89e0: 20 20 69 6e 74 65 72 72 75 70 74 5f 68 61 6e 64    interrupt_hand
89f0: 6c 65 72 28 30 29 3b 0a 20 20 20 20 72 65 74 75  ler(0);.    retu
8a00: 72 6e 20 54 52 55 45 3b 0a 20 20 7d 0a 20 20 72  rn TRUE;.  }.  r
8a10: 65 74 75 72 6e 20 46 41 4c 53 45 3b 0a 7d 0a 23  eturn FALSE;.}.#
8a20: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
8a30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
8a40: 52 49 5a 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 57  RIZATION./*.** W
8a50: 68 65 6e 20 74 68 65 20 22 2e 61 75 74 68 20 4f  hen the ".auth O
8a60: 4e 22 20 69 73 20 73 65 74 2c 20 74 68 65 20 66  N" is set, the f
8a70: 6f 6c 6c 6f 77 69 6e 67 20 61 75 74 68 6f 72 69  ollowing authori
8a80: 7a 65 72 20 63 61 6c 6c 62 61 63 6b 20 69 73 0a  zer callback is.
8a90: 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20 49 74 20  ** invoked.  It 
8aa0: 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 53  always returns S
8ab0: 51 4c 49 54 45 5f 4f 4b 2e 0a 2a 2f 0a 73 74 61  QLITE_OK..*/.sta
8ac0: 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 41 75 74  tic int shellAut
8ad0: 68 28 0a 20 20 76 6f 69 64 20 2a 70 43 6c 69 65  h(.  void *pClie
8ae0: 6e 74 44 61 74 61 2c 0a 20 20 69 6e 74 20 6f 70  ntData,.  int op
8af0: 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
8b00: 7a 41 31 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61  zA1,.  const cha
8b10: 72 20 2a 7a 41 32 2c 0a 20 20 63 6f 6e 73 74 20  r *zA2,.  const 
8b20: 63 68 61 72 20 2a 7a 41 33 2c 0a 20 20 63 6f 6e  char *zA3,.  con
8b30: 73 74 20 63 68 61 72 20 2a 7a 41 34 0a 29 7b 0a  st char *zA4.){.
8b40: 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 20    ShellState *p 
8b50: 3d 20 28 53 68 65 6c 6c 53 74 61 74 65 2a 29 70  = (ShellState*)p
8b60: 43 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 73 74  ClientData;.  st
8b70: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
8b80: 2a 61 7a 41 63 74 69 6f 6e 5b 5d 20 3d 20 7b 20  *azAction[] = { 
8b90: 30 2c 0a 20 20 20 20 20 22 43 52 45 41 54 45 5f  0,.     "CREATE_
8ba0: 49 4e 44 45 58 22 2c 20 20 20 20 20 20 20 20 20  INDEX",         
8bb0: 22 43 52 45 41 54 45 5f 54 41 42 4c 45 22 2c 20  "CREATE_TABLE", 
8bc0: 20 20 20 20 20 20 20 20 22 43 52 45 41 54 45 5f          "CREATE_
8bd0: 54 45 4d 50 5f 49 4e 44 45 58 22 2c 0a 20 20 20  TEMP_INDEX",.   
8be0: 20 20 22 43 52 45 41 54 45 5f 54 45 4d 50 5f 54    "CREATE_TEMP_T
8bf0: 41 42 4c 45 22 2c 20 20 20 20 22 43 52 45 41 54  ABLE",    "CREAT
8c00: 45 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22 2c  E_TEMP_TRIGGER",
8c10: 20 20 22 43 52 45 41 54 45 5f 54 45 4d 50 5f 56    "CREATE_TEMP_V
8c20: 49 45 57 22 2c 0a 20 20 20 20 20 22 43 52 45 41  IEW",.     "CREA
8c30: 54 45 5f 54 52 49 47 47 45 52 22 2c 20 20 20 20  TE_TRIGGER",    
8c40: 20 20 20 22 43 52 45 41 54 45 5f 56 49 45 57 22     "CREATE_VIEW"
8c50: 2c 20 20 20 20 20 20 20 20 20 20 22 44 45 4c 45  ,          "DELE
8c60: 54 45 22 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f  TE",.     "DROP_
8c70: 49 4e 44 45 58 22 2c 20 20 20 20 20 20 20 20 20  INDEX",         
8c80: 20 20 22 44 52 4f 50 5f 54 41 42 4c 45 22 2c 20    "DROP_TABLE", 
8c90: 20 20 20 20 20 20 20 20 20 20 22 44 52 4f 50 5f            "DROP_
8ca0: 54 45 4d 50 5f 49 4e 44 45 58 22 2c 0a 20 20 20  TEMP_INDEX",.   
8cb0: 20 20 22 44 52 4f 50 5f 54 45 4d 50 5f 54 41 42    "DROP_TEMP_TAB
8cc0: 4c 45 22 2c 20 20 20 20 20 20 22 44 52 4f 50 5f  LE",      "DROP_
8cd0: 54 45 4d 50 5f 54 52 49 47 47 45 52 22 2c 20 20  TEMP_TRIGGER",  
8ce0: 20 20 22 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45    "DROP_TEMP_VIE
8cf0: 57 22 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f 54  W",.     "DROP_T
8d00: 52 49 47 47 45 52 22 2c 20 20 20 20 20 20 20 20  RIGGER",        
8d10: 20 22 44 52 4f 50 5f 56 49 45 57 22 2c 20 20 20   "DROP_VIEW",   
8d20: 20 20 20 20 20 20 20 20 20 22 49 4e 53 45 52 54           "INSERT
8d30: 22 2c 0a 20 20 20 20 20 22 50 52 41 47 4d 41 22  ",.     "PRAGMA"
8d40: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
8d50: 22 52 45 41 44 22 2c 20 20 20 20 20 20 20 20 20  "READ",         
8d60: 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 22          "SELECT"
8d70: 2c 0a 20 20 20 20 20 22 54 52 41 4e 53 41 43 54  ,.     "TRANSACT
8d80: 49 4f 4e 22 2c 20 20 20 20 20 20 20 20 20 20 22  ION",          "
8d90: 55 50 44 41 54 45 22 2c 20 20 20 20 20 20 20 20  UPDATE",        
8da0: 20 20 20 20 20 20 20 22 41 54 54 41 43 48 22 2c         "ATTACH",
8db0: 0a 20 20 20 20 20 22 44 45 54 41 43 48 22 2c 20  .     "DETACH", 
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
8dd0: 4c 54 45 52 5f 54 41 42 4c 45 22 2c 20 20 20 20  LTER_TABLE",    
8de0: 20 20 20 20 20 20 22 52 45 49 4e 44 45 58 22 2c        "REINDEX",
8df0: 0a 20 20 20 20 20 22 41 4e 41 4c 59 5a 45 22 2c  .     "ANALYZE",
8e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
8e10: 52 45 41 54 45 5f 56 54 41 42 4c 45 22 2c 20 20  REATE_VTABLE",  
8e20: 20 20 20 20 20 20 22 44 52 4f 50 5f 56 54 41 42        "DROP_VTAB
8e30: 4c 45 22 2c 0a 20 20 20 20 20 22 46 55 4e 43 54  LE",.     "FUNCT
8e40: 49 4f 4e 22 2c 20 20 20 20 20 20 20 20 20 20 20  ION",           
8e50: 20 20 22 53 41 56 45 50 4f 49 4e 54 22 2c 20 20    "SAVEPOINT",  
8e60: 20 20 20 20 20 20 20 20 20 20 22 52 45 43 55 52            "RECUR
8e70: 53 49 56 45 22 0a 20 20 7d 3b 0a 20 20 69 6e 74  SIVE".  };.  int
8e80: 20 69 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   i;.  const char
8e90: 20 2a 61 7a 5b 34 5d 3b 0a 20 20 61 7a 5b 30 5d   *az[4];.  az[0]
8ea0: 20 3d 20 7a 41 31 3b 0a 20 20 61 7a 5b 31 5d 20   = zA1;.  az[1] 
8eb0: 3d 20 7a 41 32 3b 0a 20 20 61 7a 5b 32 5d 20 3d  = zA2;.  az[2] =
8ec0: 20 7a 41 33 3b 0a 20 20 61 7a 5b 33 5d 20 3d 20   zA3;.  az[3] = 
8ed0: 7a 41 34 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e  zA4;.  utf8_prin
8ee0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 61 75 74 68  tf(p->out, "auth
8ef0: 6f 72 69 7a 65 72 3a 20 25 73 22 2c 20 61 7a 41  orizer: %s", azA
8f00: 63 74 69 6f 6e 5b 6f 70 5d 29 3b 0a 20 20 66 6f  ction[op]);.  fo
8f10: 72 28 69 3d 30 3b 20 69 3c 34 3b 20 69 2b 2b 29  r(i=0; i<4; i++)
8f20: 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
8f30: 28 70 2d 3e 6f 75 74 2c 20 22 20 22 29 3b 0a 20  (p->out, " ");. 
8f40: 20 20 20 69 66 28 20 61 7a 5b 69 5d 20 29 7b 0a     if( az[i] ){.
8f50: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73        output_c_s
8f60: 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a  tring(p->out, az
8f70: 5b 69 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  [i]);.    }else{
8f80: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
8f90: 66 28 70 2d 3e 6f 75 74 2c 20 22 4e 55 4c 4c 22  f(p->out, "NULL"
8fa0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
8fb0: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
8fc0: 2c 20 22 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72  , "\n");.  retur
8fd0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
8fe0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 69  endif../*.** Pri
8ff0: 6e 74 20 61 20 73 63 68 65 6d 61 20 73 74 61 74  nt a schema stat
9000: 65 6d 65 6e 74 2e 20 20 50 61 72 74 20 6f 66 20  ement.  Part of 
9010: 4d 4f 44 45 5f 53 65 6d 69 20 61 6e 64 20 4d 4f  MODE_Semi and MO
9020: 44 45 5f 50 72 65 74 74 79 20 6f 75 74 70 75 74  DE_Pretty output
9030: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
9040: 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 73 6f  tine converts so
9050: 6d 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  me CREATE TABLE 
9060: 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72 20 73  statements for s
9070: 68 61 64 6f 77 20 74 61 62 6c 65 73 0a 2a 2a 20  hadow tables.** 
9080: 69 6e 20 46 54 53 33 2f 34 2f 35 20 69 6e 74 6f  in FTS3/4/5 into
9090: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46   CREATE TABLE IF
90a0: 20 4e 4f 54 20 45 58 49 53 54 53 20 73 74 61 74   NOT EXISTS stat
90b0: 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 73 74 61 74 69  ements..*/.stati
90c0: 63 20 76 6f 69 64 20 70 72 69 6e 74 53 63 68 65  c void printSche
90d0: 6d 61 4c 69 6e 65 28 46 49 4c 45 20 2a 6f 75 74  maLine(FILE *out
90e0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
90f0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
9100: 69 6c 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  il){.  if( sqlit
9110: 65 33 5f 73 74 72 67 6c 6f 62 28 22 43 52 45 41  e3_strglob("CREA
9120: 54 45 20 54 41 42 4c 45 20 5b 27 5c 22 5d 2a 22  TE TABLE ['\"]*"
9130: 2c 20 7a 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75  , z)==0 ){.    u
9140: 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  tf8_printf(out, 
9150: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46  "CREATE TABLE IF
9160: 20 4e 4f 54 20 45 58 49 53 54 53 20 25 73 25 73   NOT EXISTS %s%s
9170: 22 2c 20 7a 2b 31 33 2c 20 7a 54 61 69 6c 29 3b  ", z+13, zTail);
9180: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 75 74  .  }else{.    ut
9190: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  f8_printf(out, "
91a0: 25 73 25 73 22 2c 20 7a 2c 20 7a 54 61 69 6c 29  %s%s", z, zTail)
91b0: 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76  ;.  }.}.static v
91c0: 6f 69 64 20 70 72 69 6e 74 53 63 68 65 6d 61 4c  oid printSchemaL
91d0: 69 6e 65 4e 28 46 49 4c 45 20 2a 6f 75 74 2c 20  ineN(FILE *out, 
91e0: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 2c 20  char *z, int n, 
91f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
9200: 6c 29 7b 0a 20 20 63 68 61 72 20 63 20 3d 20 7a  l){.  char c = z
9210: 5b 6e 5d 3b 0a 20 20 7a 5b 6e 5d 20 3d 20 30 3b  [n];.  z[n] = 0;
9220: 0a 20 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69  .  printSchemaLi
9230: 6e 65 28 6f 75 74 2c 20 7a 2c 20 7a 54 61 69 6c  ne(out, z, zTail
9240: 29 3b 0a 20 20 7a 5b 6e 5d 20 3d 20 63 3b 0a 7d  );.  z[n] = c;.}
9250: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
9260: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75  the callback rou
9270: 74 69 6e 65 20 74 68 61 74 20 74 68 65 20 73 68  tine that the sh
9280: 65 6c 6c 0a 2a 2a 20 69 6e 76 6f 6b 65 73 20 66  ell.** invokes f
9290: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 61  or each row of a
92a0: 20 71 75 65 72 79 20 72 65 73 75 6c 74 2e 0a 2a   query result..*
92b0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 68 65  /.static int she
92c0: 6c 6c 5f 63 61 6c 6c 62 61 63 6b 28 0a 20 20 76  ll_callback(.  v
92d0: 6f 69 64 20 2a 70 41 72 67 2c 0a 20 20 69 6e 74  oid *pArg,.  int
92e0: 20 6e 41 72 67 2c 20 20 20 20 20 20 20 20 2f 2a   nArg,        /*
92f0: 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   Number of resul
9300: 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 63  t columns */.  c
9310: 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20 20  har **azArg,    
9320: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
9330: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 2a 2f  result column */
9340: 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 2c  .  char **azCol,
9350: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
9360: 6d 65 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69  mes */.  int *ai
9370: 54 79 70 65 20 20 20 20 20 20 2f 2a 20 43 6f 6c  Type      /* Col
9380: 75 6d 6e 20 74 79 70 65 73 20 2a 2f 0a 29 7b 0a  umn types */.){.
9390: 20 20 69 6e 74 20 69 3b 0a 20 20 53 68 65 6c 6c    int i;.  Shell
93a0: 53 74 61 74 65 20 2a 70 20 3d 20 28 53 68 65 6c  State *p = (Shel
93b0: 6c 53 74 61 74 65 2a 29 70 41 72 67 3b 0a 0a 20  lState*)pArg;.. 
93c0: 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20   if( azArg==0 ) 
93d0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 73 77 69 74  return 0;.  swit
93e0: 63 68 28 20 70 2d 3e 63 4d 6f 64 65 20 29 7b 0a  ch( p->cMode ){.
93f0: 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 4c 69      case MODE_Li
9400: 6e 65 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74 20  ne: {.      int 
9410: 77 20 3d 20 35 3b 0a 20 20 20 20 20 20 69 66 28  w = 5;.      if(
9420: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
9430: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
9440: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
9450: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20          int len 
9460: 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 43 6f 6c  = strlen30(azCol
9470: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
9480: 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66   "");.        if
9490: 28 20 6c 65 6e 3e 77 20 29 20 77 20 3d 20 6c 65  ( len>w ) w = le
94a0: 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
94b0: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3e 30 20   if( p->cnt++>0 
94c0: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
94d0: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
94e0: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
94f0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
9500: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
9510: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
9520: 2d 3e 6f 75 74 2c 22 25 2a 73 20 3d 20 25 73 25  ->out,"%*s = %s%
9530: 73 22 2c 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d 2c  s", w, azCol[i],
9540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9550: 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72   azArg[i] ? azAr
9560: 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61  g[i] : p->nullVa
9570: 6c 75 65 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72  lue, p->rowSepar
9580: 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ator);.      }. 
9590: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
95a0: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
95b0: 45 78 70 6c 61 69 6e 3a 0a 20 20 20 20 63 61 73  Explain:.    cas
95c0: 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3a 20 7b  e MODE_Column: {
95d0: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
95e0: 6e 73 74 20 69 6e 74 20 61 45 78 70 6c 61 69 6e  nst int aExplain
95f0: 57 69 64 74 68 73 5b 5d 20 3d 20 7b 34 2c 20 31  Widths[] = {4, 1
9600: 33 2c 20 34 2c 20 34 2c 20 34 2c 20 31 33 2c 20  3, 4, 4, 4, 13, 
9610: 32 2c 20 31 33 7d 3b 0a 20 20 20 20 20 20 63 6f  2, 13};.      co
9620: 6e 73 74 20 69 6e 74 20 2a 63 6f 6c 57 69 64 74  nst int *colWidt
9630: 68 3b 0a 20 20 20 20 20 20 69 6e 74 20 73 68 6f  h;.      int sho
9640: 77 48 64 72 3b 0a 20 20 20 20 20 20 63 68 61 72  wHdr;.      char
9650: 20 2a 72 6f 77 53 65 70 3b 0a 20 20 20 20 20 20   *rowSep;.      
9660: 69 66 28 20 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f  if( p->cMode==MO
9670: 44 45 5f 43 6f 6c 75 6d 6e 20 29 7b 0a 20 20 20  DE_Column ){.   
9680: 20 20 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20       colWidth = 
9690: 70 2d 3e 63 6f 6c 57 69 64 74 68 3b 0a 20 20 20  p->colWidth;.   
96a0: 20 20 20 20 20 73 68 6f 77 48 64 72 20 3d 20 70       showHdr = p
96b0: 2d 3e 73 68 6f 77 48 65 61 64 65 72 3b 0a 20 20  ->showHeader;.  
96c0: 20 20 20 20 20 20 72 6f 77 53 65 70 20 3d 20 70        rowSep = p
96d0: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 3b 0a  ->rowSeparator;.
96e0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
96f0: 20 20 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20       colWidth = 
9700: 61 45 78 70 6c 61 69 6e 57 69 64 74 68 73 3b 0a  aExplainWidths;.
9710: 20 20 20 20 20 20 20 20 73 68 6f 77 48 64 72 20          showHdr 
9720: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 6f 77  = 1;.        row
9730: 53 65 70 20 3d 20 53 45 50 5f 52 6f 77 3b 0a 20  Sep = SEP_Row;. 
9740: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
9750: 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 29 7b 0a   p->cnt++==0 ){.
9760: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
9770: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
9780: 20 20 20 20 20 20 20 20 20 69 6e 74 20 77 2c 20           int w, 
9790: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  n;.          if(
97a0: 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e   i<ArraySize(p->
97b0: 63 6f 6c 57 69 64 74 68 29 20 29 7b 0a 20 20 20  colWidth) ){.   
97c0: 20 20 20 20 20 20 20 20 20 77 20 3d 20 63 6f 6c           w = col
97d0: 57 69 64 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20  Width[i];.      
97e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
97f0: 20 20 20 20 20 20 20 77 20 3d 20 30 3b 0a 20 20         w = 0;.  
9800: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9810: 20 20 20 20 69 66 28 20 77 3d 3d 30 20 29 7b 0a      if( w==0 ){.
9820: 20 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20              w = 
9830: 73 74 72 6c 65 6e 43 68 61 72 28 61 7a 43 6f 6c  strlenChar(azCol
9840: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
9850: 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20   "");.          
9860: 20 20 69 66 28 20 77 3c 31 30 20 29 20 77 20 3d    if( w<10 ) w =
9870: 20 31 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20   10;.           
9880: 20 6e 20 3d 20 73 74 72 6c 65 6e 43 68 61 72 28   n = strlenChar(
9890: 61 7a 41 72 67 20 26 26 20 61 7a 41 72 67 5b 69  azArg && azArg[i
98a0: 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70  ] ? azArg[i] : p
98b0: 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20  ->nullValue);.  
98c0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 77 3c            if( w<
98d0: 6e 20 29 20 77 20 3d 20 6e 3b 0a 20 20 20 20 20  n ) w = n;.     
98e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
98f0: 20 69 66 28 20 69 3c 41 72 72 61 79 53 69 7a 65   if( i<ArraySize
9900: 28 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 29  (p->actualWidth)
9910: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
9920: 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69  p->actualWidth[i
9930: 5d 20 3d 20 77 3b 0a 20 20 20 20 20 20 20 20 20  ] = w;.         
9940: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
9950: 20 73 68 6f 77 48 64 72 20 29 7b 0a 20 20 20 20   showHdr ){.    
9960: 20 20 20 20 20 20 20 20 75 74 66 38 5f 77 69 64          utf8_wid
9970: 74 68 5f 70 72 69 6e 74 28 70 2d 3e 6f 75 74 2c  th_print(p->out,
9980: 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20   w, azCol[i]);. 
9990: 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
99a0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
99b0: 25 73 22 2c 20 69 3d 3d 6e 41 72 67 2d 31 20 3f  %s", i==nArg-1 ?
99c0: 20 72 6f 77 53 65 70 20 3a 20 22 20 20 22 29 3b   rowSep : "  ");
99d0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
99e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
99f0: 66 28 20 73 68 6f 77 48 64 72 20 29 7b 0a 20 20  f( showHdr ){.  
9a00: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
9a10: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
9a20: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 77             int w
9a30: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
9a40: 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  ( i<ArraySize(p-
9a50: 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b  >actualWidth) ){
9a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9a70: 77 20 3d 20 70 2d 3e 61 63 74 75 61 6c 57 69 64  w = p->actualWid
9a80: 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20  th[i];.         
9a90: 20 20 20 20 20 20 69 66 28 20 77 3c 30 20 29 20        if( w<0 ) 
9aa0: 77 20 3d 20 2d 77 3b 0a 20 20 20 20 20 20 20 20  w = -w;.        
9ab0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
9ac0: 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 31 30            w = 10
9ad0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
9af0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
9b00: 25 2d 2a 2e 2a 73 25 73 22 2c 77 2c 77 2c 0a 20  %-*.*s%s",w,w,. 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    "-------------
9b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20  -------------". 
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b70: 20 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    "-------------
9b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 2c 0a  -------------",.
9bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bc0: 20 20 20 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20      i==nArg-1 ? 
9bd0: 72 6f 77 53 65 70 20 3a 20 22 20 20 22 29 3b 0a  rowSep : "  ");.
9be0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
9bf0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
9c00: 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30      if( azArg==0
9c10: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
9c20: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
9c30: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
9c40: 6e 74 20 77 3b 0a 20 20 20 20 20 20 20 20 69 66  nt w;.        if
9c50: 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  ( i<ArraySize(p-
9c60: 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b  >actualWidth) ){
9c70: 0a 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20  .           w = 
9c80: 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69  p->actualWidth[i
9c90: 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ];.        }else
9ca0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 77 20 3d  {.           w =
9cb0: 20 31 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   10;.        }. 
9cc0: 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 4d         if( p->cM
9cd0: 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69  ode==MODE_Explai
9ce0: 6e 20 26 26 20 61 7a 41 72 67 5b 69 5d 20 26 26  n && azArg[i] &&
9cf0: 20 73 74 72 6c 65 6e 43 68 61 72 28 61 7a 41 72   strlenChar(azAr
9d00: 67 5b 69 5d 29 3e 77 20 29 7b 0a 20 20 20 20 20  g[i])>w ){.     
9d10: 20 20 20 20 20 77 20 3d 20 73 74 72 6c 65 6e 43       w = strlenC
9d20: 68 61 72 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  har(azArg[i]);. 
9d30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9d40: 20 69 66 28 20 69 3d 3d 31 20 26 26 20 70 2d 3e   if( i==1 && p->
9d50: 61 69 49 6e 64 65 6e 74 20 26 26 20 70 2d 3e 70  aiIndent && p->p
9d60: 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Stmt ){.        
9d70: 20 20 69 66 28 20 70 2d 3e 69 49 6e 64 65 6e 74    if( p->iIndent
9d80: 3c 70 2d 3e 6e 49 6e 64 65 6e 74 20 29 7b 0a 20  <p->nIndent ){. 
9d90: 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
9da0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
9db0: 25 2a 2e 73 22 2c 20 70 2d 3e 61 69 49 6e 64 65  %*.s", p->aiInde
9dc0: 6e 74 5b 70 2d 3e 69 49 6e 64 65 6e 74 5d 2c 20  nt[p->iIndent], 
9dd0: 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  "");.          }
9de0: 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 69 49  .          p->iI
9df0: 6e 64 65 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20  ndent++;.       
9e00: 20 7d 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f   }.        utf8_
9e10: 77 69 64 74 68 5f 70 72 69 6e 74 28 70 2d 3e 6f  width_print(p->o
9e20: 75 74 2c 20 77 2c 20 61 7a 41 72 67 5b 69 5d 20  ut, w, azArg[i] 
9e30: 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e  ? azArg[i] : p->
9e40: 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20  nullValue);.    
9e50: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
9e60: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 69 3d  p->out, "%s", i=
9e70: 3d 6e 41 72 67 2d 31 20 3f 20 72 6f 77 53 65 70  =nArg-1 ? rowSep
9e80: 20 3a 20 22 20 20 22 29 3b 0a 20 20 20 20 20 20   : "  ");.      
9e90: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
9ea0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
9eb0: 44 45 5f 53 65 6d 69 3a 20 7b 20 20 20 2f 2a 20  DE_Semi: {   /* 
9ec0: 2e 73 63 68 65 6d 61 20 61 6e 64 20 2e 66 75 6c  .schema and .ful
9ed0: 6c 73 63 68 65 6d 61 20 6f 75 74 70 75 74 20 2a  lschema output *
9ee0: 2f 0a 20 20 20 20 20 20 70 72 69 6e 74 53 63 68  /.      printSch
9ef0: 65 6d 61 4c 69 6e 65 28 70 2d 3e 6f 75 74 2c 20  emaLine(p->out, 
9f00: 61 7a 41 72 67 5b 30 5d 2c 20 22 3b 5c 6e 22 29  azArg[0], ";\n")
9f10: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
9f20: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
9f30: 44 45 5f 50 72 65 74 74 79 3a 20 7b 20 20 2f 2a  DE_Pretty: {  /*
9f40: 20 2e 73 63 68 65 6d 61 20 61 6e 64 20 2e 66 75   .schema and .fu
9f50: 6c 6c 73 63 68 65 6d 61 20 77 69 74 68 20 2d 2d  llschema with --
9f60: 69 6e 64 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20  indent */.      
9f70: 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20 20 20 69  char *z;.      i
9f80: 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 6e 74 20  nt j;.      int 
9f90: 6e 50 61 72 65 6e 20 3d 20 30 3b 0a 20 20 20 20  nParen = 0;.    
9fa0: 20 20 63 68 61 72 20 63 45 6e 64 20 3d 20 30 3b    char cEnd = 0;
9fb0: 0a 20 20 20 20 20 20 63 68 61 72 20 63 3b 0a 20  .      char c;. 
9fc0: 20 20 20 20 20 69 6e 74 20 6e 4c 69 6e 65 20 3d       int nLine =
9fd0: 20 30 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   0;.      assert
9fe0: 28 20 6e 41 72 67 3d 3d 31 20 29 3b 0a 20 20 20  ( nArg==1 );.   
9ff0: 20 20 20 69 66 28 20 61 7a 41 72 67 5b 30 5d 3d     if( azArg[0]=
a000: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
a010: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
a020: 72 6c 69 6b 65 28 22 43 52 45 41 54 45 20 56 49  rlike("CREATE VI
a030: 45 57 25 22 2c 20 61 7a 41 72 67 5b 30 5d 2c 20  EW%", azArg[0], 
a040: 30 29 3d 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20  0)==0.       || 
a050: 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
a060: 22 43 52 45 41 54 45 20 54 52 49 47 25 22 2c 20  "CREATE TRIG%", 
a070: 61 7a 41 72 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a  azArg[0], 0)==0.
a080: 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
a090: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
a0a0: 6f 75 74 2c 20 22 25 73 3b 5c 6e 22 2c 20 61 7a  out, "%s;\n", az
a0b0: 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[0]);.       
a0c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
a0d0: 20 20 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65        z = sqlite
a0e0: 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
a0f0: 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20  azArg[0]);.     
a100: 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 66 6f   j = 0;.      fo
a110: 72 28 69 3d 30 3b 20 49 73 53 70 61 63 65 28 7a  r(i=0; IsSpace(z
a120: 5b 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20  [i]); i++){}.   
a130: 20 20 20 66 6f 72 28 3b 20 28 63 20 3d 20 7a 5b     for(; (c = z[
a140: 69 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20  i])!=0; i++){.  
a150: 20 20 20 20 20 20 69 66 28 20 49 73 53 70 61 63        if( IsSpac
a160: 65 28 63 29 20 29 7b 0a 20 20 20 20 20 20 20 20  e(c) ){.        
a170: 20 20 69 66 28 20 7a 5b 6a 2d 31 5d 3d 3d 27 5c    if( z[j-1]=='\
a180: 72 27 20 29 20 7a 5b 6a 2d 31 5d 20 3d 20 27 5c  r' ) z[j-1] = '\
a190: 6e 27 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  n';.          if
a1a0: 28 20 49 73 53 70 61 63 65 28 7a 5b 6a 2d 31 5d  ( IsSpace(z[j-1]
a1b0: 29 20 7c 7c 20 7a 5b 6a 2d 31 5d 3d 3d 27 28 27  ) || z[j-1]=='('
a1c0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
a1d0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28       }else if( (
a1e0: 63 3d 3d 27 28 27 20 7c 7c 20 63 3d 3d 27 29 27  c=='(' || c==')'
a1f0: 29 20 26 26 20 6a 3e 30 20 26 26 20 49 73 53 70  ) && j>0 && IsSp
a200: 61 63 65 28 7a 5b 6a 2d 31 5d 29 20 29 7b 0a 20  ace(z[j-1]) ){. 
a210: 20 20 20 20 20 20 20 20 20 6a 2d 2d 3b 0a 20 20           j--;.  
a220: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
a230: 7a 5b 6a 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  z[j++] = c;.    
a240: 20 20 7d 0a 20 20 20 20 20 20 77 68 69 6c 65 28    }.      while(
a250: 20 6a 3e 30 20 26 26 20 49 73 53 70 61 63 65 28   j>0 && IsSpace(
a260: 7a 5b 6a 2d 31 5d 29 20 29 7b 20 6a 2d 2d 3b 20  z[j-1]) ){ j--; 
a270: 7d 0a 20 20 20 20 20 20 7a 5b 6a 5d 20 3d 20 30  }.      z[j] = 0
a280: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 6c  ;.      if( strl
a290: 65 6e 33 30 28 7a 29 3e 3d 37 39 20 29 7b 0a 20  en30(z)>=79 ){. 
a2a0: 20 20 20 20 20 20 20 66 6f 72 28 69 3d 6a 3d 30         for(i=j=0
a2b0: 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b  ; (c = z[i])!=0;
a2c0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
a2d0: 20 69 66 28 20 63 3d 3d 63 45 6e 64 20 29 7b 0a   if( c==cEnd ){.
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 63 45 6e 64              cEnd
a2f0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
a300: 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 22 27  }else if( c=='"'
a310: 20 7c 7c 20 63 3d 3d 27 5c 27 27 20 7c 7c 20 63   || c=='\'' || c
a320: 3d 3d 27 60 27 20 29 7b 0a 20 20 20 20 20 20 20  =='`' ){.       
a330: 20 20 20 20 20 63 45 6e 64 20 3d 20 63 3b 0a 20       cEnd = c;. 
a340: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69           }else i
a350: 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20  f( c=='[' ){.   
a360: 20 20 20 20 20 20 20 20 20 63 45 6e 64 20 3d 20           cEnd = 
a370: 27 5d 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ']';.          }
a380: 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 28 27 20  else if( c=='(' 
a390: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ){.            n
a3a0: 50 61 72 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20  Paren++;.       
a3b0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
a3c0: 27 29 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ')' ){.         
a3d0: 20 20 20 6e 50 61 72 65 6e 2d 2d 3b 0a 20 20 20     nParen--;.   
a3e0: 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 4c 69           if( nLi
a3f0: 6e 65 3e 30 20 26 26 20 6e 50 61 72 65 6e 3d 3d  ne>0 && nParen==
a400: 30 20 26 26 20 6a 3e 30 20 29 7b 0a 20 20 20 20  0 && j>0 ){.    
a410: 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 53            printS
a420: 63 68 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e 6f 75  chemaLineN(p->ou
a430: 74 2c 20 7a 2c 20 6a 2c 20 22 5c 6e 22 29 3b 0a  t, z, j, "\n");.
a440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6a 20                j 
a450: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20  = 0;.           
a460: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
a470: 20 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20           z[j++] 
a480: 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 20 20 69  = c;.          i
a490: 66 28 20 6e 50 61 72 65 6e 3d 3d 31 20 26 26 20  f( nParen==1 && 
a4a0: 28 63 3d 3d 27 28 27 20 7c 7c 20 63 3d 3d 27 2c  (c=='(' || c==',
a4b0: 27 20 7c 7c 20 63 3d 3d 27 5c 6e 27 29 20 29 7b  ' || c=='\n') ){
a4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
a4d0: 20 63 3d 3d 27 5c 6e 27 20 29 20 6a 2d 2d 3b 0a   c=='\n' ) j--;.
a4e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e              prin
a4f0: 74 53 63 68 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e  tSchemaLineN(p->
a500: 6f 75 74 2c 20 7a 2c 20 6a 2c 20 22 5c 6e 20 20  out, z, j, "\n  
a510: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
a520: 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  j = 0;.         
a530: 20 20 20 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20     nLine++;.    
a540: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 49          while( I
a550: 73 53 70 61 63 65 28 7a 5b 69 2b 31 5d 29 20 29  sSpace(z[i+1]) )
a560: 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  { i++; }.       
a570: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
a580: 20 20 20 20 20 20 20 7a 5b 6a 5d 20 3d 20 30 3b         z[j] = 0;
a590: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
a5a0: 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70  rintSchemaLine(p
a5b0: 2d 3e 6f 75 74 2c 20 7a 2c 20 22 3b 5c 6e 22 29  ->out, z, ";\n")
a5c0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
a5d0: 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20 20 62  free(z);.      b
a5e0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
a5f0: 63 61 73 65 20 4d 4f 44 45 5f 4c 69 73 74 3a 20  case MODE_List: 
a600: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63  {.      if( p->c
a610: 6e 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68  nt++==0 && p->sh
a620: 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20  owHeader ){.    
a630: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
a640: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
a650: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
a660: 28 70 2d 3e 6f 75 74 2c 22 25 73 25 73 22 2c 61  (p->out,"%s%s",a
a670: 7a 43 6f 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20  zCol[i],.       
a680: 20 20 20 20 20 20 20 20 20 20 20 69 3d 3d 6e 41             i==nA
a690: 72 67 2d 31 20 3f 20 70 2d 3e 72 6f 77 53 65 70  rg-1 ? p->rowSep
a6a0: 61 72 61 74 6f 72 20 3a 20 70 2d 3e 63 6f 6c 53  arator : p->colS
a6b0: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
a6c0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
a6d0: 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20     if( azArg==0 
a6e0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66  ) break;.      f
a6f0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
a700: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68  i++){.        ch
a710: 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d  ar *z = azArg[i]
a720: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 3d  ;.        if( z=
a730: 3d 30 20 29 20 7a 20 3d 20 70 2d 3e 6e 75 6c 6c  =0 ) z = p->null
a740: 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 75  Value;.        u
a750: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
a760: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
a770: 20 20 20 20 20 69 66 28 20 69 3c 6e 41 72 67 2d       if( i<nArg-
a780: 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  1 ){.          u
a790: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
a7a0: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53  t, "%s", p->colS
a7b0: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
a7c0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
a7d0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
a7e0: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d  p->out, "%s", p-
a7f0: 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a  >rowSeparator);.
a800: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a810: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
a820: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
a830: 44 45 5f 48 74 6d 6c 3a 20 7b 0a 20 20 20 20 20  DE_Html: {.     
a840: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
a850: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
a860: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  r ){.        raw
a870: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
a880: 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20 20 20 20  <TR>");.        
a890: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
a8a0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
a8b0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
a8c0: 75 74 2c 22 3c 54 48 3e 22 29 3b 0a 20 20 20 20  ut,"<TH>");.    
a8d0: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 68 74 6d        output_htm
a8e0: 6c 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  l_string(p->out,
a8f0: 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20   azCol[i]);.    
a900: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
a910: 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 48 3e 5c 6e  (p->out,"</TH>\n
a920: 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ");.        }.  
a930: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
a940: 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e  (p->out,"</TR>\n
a950: 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
a960: 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29    if( azArg==0 )
a970: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 72 61   break;.      ra
a980: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
a990: 22 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20 20 66  "<TR>");.      f
a9a0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
a9b0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 72 61  i++){.        ra
a9c0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
a9d0: 22 3c 54 44 3e 22 29 3b 0a 20 20 20 20 20 20 20  "<TD>");.       
a9e0: 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74 72   output_html_str
a9f0: 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72  ing(p->out, azAr
aa00: 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20  g[i] ? azArg[i] 
aa10: 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b  : p->nullValue);
aa20: 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
aa30: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 44  ntf(p->out,"</TD
aa40: 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >\n");.      }. 
aa50: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
aa60: 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e 22  p->out,"</TR>\n"
aa70: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
aa80: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d      }.    case M
aa90: 4f 44 45 5f 54 63 6c 3a 20 7b 0a 20 20 20 20 20  ODE_Tcl: {.     
aaa0: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
aab0: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
aac0: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  r ){.        for
aad0: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
aae0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75  +){.          ou
aaf0: 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d  tput_c_string(p-
ab00: 3e 6f 75 74 2c 61 7a 43 6f 6c 5b 69 5d 20 3f 20  >out,azCol[i] ? 
ab10: 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a  azCol[i] : "");.
ab20: 20 20 20 20 20 20 20 20 20 20 69 66 28 69 3c 6e            if(i<n
ab30: 41 72 67 2d 31 29 20 75 74 66 38 5f 70 72 69 6e  Arg-1) utf8_prin
ab40: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
ab50: 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72   p->colSeparator
ab60: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
ab70: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
ab80: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
ab90: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
aba0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
abb0: 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72  f( azArg==0 ) br
abc0: 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  eak;.      for(i
abd0: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
abe0: 7b 0a 20 20 20 20 20 20 20 20 6f 75 74 70 75 74  {.        output
abf0: 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  _c_string(p->out
ac00: 2c 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41  , azArg[i] ? azA
ac10: 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56  rg[i] : p->nullV
ac20: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 69  alue);.        i
ac30: 66 28 69 3c 6e 41 72 67 2d 31 29 20 75 74 66 38  f(i<nArg-1) utf8
ac40: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
ac50: 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  "%s", p->colSepa
ac60: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a  rator);.      }.
ac70: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
ac80: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
ac90: 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
aca0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
acb0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
acc0: 44 45 5f 43 73 76 3a 20 7b 0a 20 20 20 20 20 20  DE_Csv: {.      
acd0: 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 70 2d  setBinaryMode(p-
ace0: 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  >out, 1);.      
acf0: 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20  if( p->cnt++==0 
ad00: 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72  && p->showHeader
ad10: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
ad20: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
ad30: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  ){.          out
ad40: 70 75 74 5f 63 73 76 28 70 2c 20 61 7a 43 6f 6c  put_csv(p, azCol
ad50: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
ad60: 20 22 22 2c 20 69 3c 6e 41 72 67 2d 31 29 3b 0a   "", i<nArg-1);.
ad70: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ad80: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
ad90: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
ada0: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
adb0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
adc0: 6e 41 72 67 3e 30 20 29 7b 0a 20 20 20 20 20 20  nArg>0 ){.      
add0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
ade0: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
adf0: 20 20 20 6f 75 74 70 75 74 5f 63 73 76 28 70 2c     output_csv(p,
ae00: 20 61 7a 41 72 67 5b 69 5d 2c 20 69 3c 6e 41 72   azArg[i], i<nAr
ae10: 67 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  g-1);.        }.
ae20: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
ae30: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
ae40: 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
ae50: 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
ae60: 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28 70 2d    setTextMode(p-
ae70: 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  >out, 1);.      
ae80: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
ae90: 20 63 61 73 65 20 4d 4f 44 45 5f 49 6e 73 65 72   case MODE_Inser
aea0: 74 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 61  t: {.      if( a
aeb0: 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b  zArg==0 ) break;
aec0: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
aed0: 74 66 28 70 2d 3e 6f 75 74 2c 22 49 4e 53 45 52  tf(p->out,"INSER
aee0: 54 20 49 4e 54 4f 20 25 73 22 2c 70 2d 3e 7a 44  T INTO %s",p->zD
aef0: 65 73 74 54 61 62 6c 65 29 3b 0a 20 20 20 20 20  estTable);.     
af00: 20 69 66 28 20 70 2d 3e 73 68 6f 77 48 65 61 64   if( p->showHead
af10: 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  er ){.        ra
af20: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
af30: 22 28 22 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  "(");.        fo
af40: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
af50: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
af60: 66 28 20 69 3e 30 20 29 20 72 61 77 5f 70 72 69  f( i>0 ) raw_pri
af70: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2c 22 29  ntf(p->out, ",")
af80: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
af90: 71 75 6f 74 65 43 68 61 72 28 61 7a 43 6f 6c 5b  quoteChar(azCol[
afa0: 69 5d 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  i]) ){.         
afb0: 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c     char *z = sql
afc0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22  ite3_mprintf("\"
afd0: 25 77 5c 22 22 2c 20 61 7a 43 6f 6c 5b 69 5d 29  %w\"", azCol[i])
afe0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74  ;.            ut
aff0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
b000: 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  , "%s", z);.    
b010: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
b020: 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20 20 20  free(z);.       
b030: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
b040: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
b050: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 61  (p->out, "%s", a
b060: 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zCol[i]);.      
b070: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
b080: 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
b090: 74 66 28 70 2d 3e 6f 75 74 2c 22 29 22 29 3b 0a  tf(p->out,")");.
b0a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 2d        }.      p-
b0b0: 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 66 6f  >cnt++;.      fo
b0c0: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
b0d0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  ++){.        raw
b0e0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
b0f0: 69 3e 30 20 3f 20 22 2c 22 20 3a 20 22 20 56 41  i>0 ? "," : " VA
b100: 4c 55 45 53 28 22 29 3b 0a 20 20 20 20 20 20 20  LUES(");.       
b110: 20 69 66 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d   if( (azArg[i]==
b120: 30 29 20 7c 7c 20 28 61 69 54 79 70 65 20 26 26  0) || (aiType &&
b130: 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49   aiType[i]==SQLI
b140: 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20  TE_NULL) ){.    
b150: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
b160: 66 28 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29  f(p->out,"NULL")
b170: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
b180: 69 66 28 20 61 69 54 79 70 65 20 26 26 20 61 69  if( aiType && ai
b190: 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f  Type[i]==SQLITE_
b1a0: 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 20 20  TEXT ){.        
b1b0: 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c    if( ShellHasFl
b1c0: 61 67 28 70 2c 20 53 48 46 4c 47 5f 4e 65 77 6c  ag(p, SHFLG_Newl
b1d0: 69 6e 65 73 29 20 29 7b 0a 20 20 20 20 20 20 20  ines) ){.       
b1e0: 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74       output_quot
b1f0: 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ed_string(p->out
b200: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b210: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
b220: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
b230: 5f 71 75 6f 74 65 64 5f 65 73 63 61 70 65 64 5f  _quoted_escaped_
b240: 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61  string(p->out, a
b250: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
b260: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
b270: 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26  lse if( aiType &
b280: 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c  & aiType[i]==SQL
b290: 49 54 45 5f 49 4e 54 45 47 45 52 20 29 7b 0a 20  ITE_INTEGER ){. 
b2a0: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
b2b0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22  intf(p->out,"%s"
b2c0: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b2d0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61       }else if( a
b2e0: 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b  iType && aiType[
b2f0: 69 5d 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f 41 54  i]==SQLITE_FLOAT
b300: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68   ){.          ch
b310: 61 72 20 7a 5b 35 30 5d 3b 0a 20 20 20 20 20 20  ar z[50];.      
b320: 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d 20 73      double r = s
b330: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
b340: 75 62 6c 65 28 70 2d 3e 70 53 74 6d 74 2c 20 69  uble(p->pStmt, i
b350: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
b360: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 35 30  ite3_snprintf(50
b370: 2c 7a 2c 22 25 21 2e 32 30 67 22 2c 20 72 29 3b  ,z,"%!.20g", r);
b380: 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
b390: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
b3a0: 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20  s", z);.        
b3b0: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
b3c0: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
b3d0: 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20 70 2d  QLITE_BLOB && p-
b3e0: 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20  >pStmt ){.      
b3f0: 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a      const void *
b400: 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  pBlob = sqlite3_
b410: 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d 3e 70  column_blob(p->p
b420: 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20  Stmt, i);.      
b430: 20 20 20 20 69 6e 74 20 6e 42 6c 6f 62 20 3d 20      int nBlob = 
b440: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
b450: 79 74 65 73 28 70 2d 3e 70 53 74 6d 74 2c 20 69  ytes(p->pStmt, i
b460: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  );.          out
b470: 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 70 2d 3e  put_hex_blob(p->
b480: 6f 75 74 2c 20 70 42 6c 6f 62 2c 20 6e 42 6c 6f  out, pBlob, nBlo
b490: 62 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  b);.        }els
b4a0: 65 20 69 66 28 20 69 73 4e 75 6d 62 65 72 28 61  e if( isNumber(a
b4b0: 7a 41 72 67 5b 69 5d 2c 20 30 29 20 29 7b 0a 20  zArg[i], 0) ){. 
b4c0: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
b4d0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22  intf(p->out,"%s"
b4e0: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b4f0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 53       }else if( S
b500: 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
b510: 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 29 20 29  HFLG_Newlines) )
b520: 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70  {.          outp
b530: 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67  ut_quoted_string
b540: 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69  (p->out, azArg[i
b550: 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ]);.        }els
b560: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  e{.          out
b570: 70 75 74 5f 71 75 6f 74 65 64 5f 65 73 63 61 70  put_quoted_escap
b580: 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ed_string(p->out
b590: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b5a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
b5b0: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
b5c0: 70 2d 3e 6f 75 74 2c 22 29 3b 5c 6e 22 29 3b 0a  p->out,");\n");.
b5d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b5e0: 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45   }.    case MODE
b5f0: 5f 51 75 6f 74 65 3a 20 7b 0a 20 20 20 20 20 20  _Quote: {.      
b600: 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62  if( azArg==0 ) b
b610: 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20  reak;.      if( 
b620: 70 2d 3e 63 6e 74 3d 3d 30 20 26 26 20 70 2d 3e  p->cnt==0 && p->
b630: 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20  showHeader ){.  
b640: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
b650: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
b660: 20 20 20 20 20 20 20 69 66 28 20 69 3e 30 20 29         if( i>0 )
b670: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
b680: 75 74 2c 20 22 2c 22 29 3b 0a 20 20 20 20 20 20  ut, ",");.      
b690: 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65      output_quote
b6a0: 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  d_string(p->out,
b6b0: 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20   azCol[i]);.    
b6c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61      }.        ra
b6d0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
b6e0: 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  "\n");.      }. 
b6f0: 20 20 20 20 20 70 2d 3e 63 6e 74 2b 2b 3b 0a 20       p->cnt++;. 
b700: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
b710: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
b720: 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 72 61      if( i>0 ) ra
b730: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
b740: 20 22 2c 22 29 3b 0a 20 20 20 20 20 20 20 20 69   ",");.        i
b750: 66 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d 30 29  f( (azArg[i]==0)
b760: 20 7c 7c 20 28 61 69 54 79 70 65 20 26 26 20 61   || (aiType && a
b770: 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45  iType[i]==SQLITE
b780: 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20 20 20  _NULL) ){.      
b790: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
b7a0: 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29 3b 0a  p->out,"NULL");.
b7b0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
b7c0: 28 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79  ( aiType && aiTy
b7d0: 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 54 45  pe[i]==SQLITE_TE
b7e0: 58 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  XT ){.          
b7f0: 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74  output_quoted_st
b800: 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41  ring(p->out, azA
b810: 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[i]);.        
b820: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
b830: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
b840: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 29 7b  QLITE_INTEGER ){
b850: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
b860: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
b870: 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  s", azArg[i]);. 
b880: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
b890: 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70   aiType && aiTyp
b8a0: 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f  e[i]==SQLITE_FLO
b8b0: 41 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  AT ){.          
b8c0: 63 68 61 72 20 7a 5b 35 30 5d 3b 0a 20 20 20 20  char z[50];.    
b8d0: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d        double r =
b8e0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
b8f0: 64 6f 75 62 6c 65 28 70 2d 3e 70 53 74 6d 74 2c  double(p->pStmt,
b900: 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   i);.          s
b910: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
b920: 35 30 2c 7a 2c 22 25 21 2e 32 30 67 22 2c 20 72  50,z,"%!.20g", r
b930: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  );.          raw
b940: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
b950: 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20  "%s", z);.      
b960: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79    }else if( aiTy
b970: 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d  pe && aiType[i]=
b980: 3d 53 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20  =SQLITE_BLOB && 
b990: 70 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  p->pStmt ){.    
b9a0: 20 20 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64        const void
b9b0: 20 2a 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65   *pBlob = sqlite
b9c0: 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d  3_column_blob(p-
b9d0: 3e 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  >pStmt, i);.    
b9e0: 20 20 20 20 20 20 69 6e 74 20 6e 42 6c 6f 62 20        int nBlob 
b9f0: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
ba00: 5f 62 79 74 65 73 28 70 2d 3e 70 53 74 6d 74 2c  _bytes(p->pStmt,
ba10: 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f   i);.          o
ba20: 75 74 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 70  utput_hex_blob(p
ba30: 2d 3e 6f 75 74 2c 20 70 42 6c 6f 62 2c 20 6e 42  ->out, pBlob, nB
ba40: 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  lob);.        }e
ba50: 6c 73 65 20 69 66 28 20 69 73 4e 75 6d 62 65 72  lse if( isNumber
ba60: 28 61 7a 41 72 67 5b 69 5d 2c 20 30 29 20 29 7b  (azArg[i], 0) ){
ba70: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
ba80: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
ba90: 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  s", azArg[i]);. 
baa0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
bab0: 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71          output_q
bac0: 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e  uoted_string(p->
bad0: 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a  out, azArg[i]);.
bae0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
baf0: 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  }.      raw_prin
bb00: 74 66 28 70 2d 3e 6f 75 74 2c 22 5c 6e 22 29 3b  tf(p->out,"\n");
bb10: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
bb20: 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44    }.    case MOD
bb30: 45 5f 41 73 63 69 69 3a 20 7b 0a 20 20 20 20 20  E_Ascii: {.     
bb40: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
bb50: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
bb60: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  r ){.        for
bb70: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
bb80: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  +){.          if
bb90: 28 20 69 3e 30 20 29 20 75 74 66 38 5f 70 72 69  ( i>0 ) utf8_pri
bba0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
bbb0: 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
bbc0: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 75 74  r);.          ut
bbd0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
bbe0: 2c 22 25 73 22 2c 61 7a 43 6f 6c 5b 69 5d 20 3f  ,"%s",azCol[i] ?
bbf0: 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b   azCol[i] : "");
bc00: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
bc10: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
bc20: 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e  ->out, "%s", p->
bc30: 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  rowSeparator);. 
bc40: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
bc50: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
bc60: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
bc70: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
bc80: 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 30 20          if( i>0 
bc90: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
bca0: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63  >out, "%s", p->c
bcb0: 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  olSeparator);.  
bcc0: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
bcd0: 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 61 7a  f(p->out,"%s",az
bce0: 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69  Arg[i] ? azArg[i
bcf0: 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  ] : p->nullValue
bd00: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
bd10: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
bd20: 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f  out, "%s", p->ro
bd30: 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  wSeparator);.   
bd40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
bd50: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
bd60: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73  }../*.** This is
bd70: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f   the callback ro
bd80: 75 74 69 6e 65 20 74 68 61 74 20 74 68 65 20 53  utine that the S
bd90: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0a 2a 2a  QLite library.**
bda0: 20 69 6e 76 6f 6b 65 73 20 66 6f 72 20 65 61 63   invokes for eac
bdb0: 68 20 72 6f 77 20 6f 66 20 61 20 71 75 65 72 79  h row of a query
bdc0: 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74   result..*/.stat
bdd0: 69 63 20 69 6e 74 20 63 61 6c 6c 62 61 63 6b 28  ic int callback(
bde0: 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
bdf0: 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41  nArg, char **azA
be00: 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  rg, char **azCol
be10: 29 7b 0a 20 20 2f 2a 20 73 69 6e 63 65 20 77 65  ){.  /* since we
be20: 20 64 6f 6e 27 74 20 68 61 76 65 20 74 79 70 65   don't have type
be30: 20 69 6e 66 6f 2c 20 63 61 6c 6c 20 74 68 65 20   info, call the 
be40: 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 20 77  shell_callback w
be50: 69 74 68 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65  ith a NULL value
be60: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 73 68 65   */.  return she
be70: 6c 6c 5f 63 61 6c 6c 62 61 63 6b 28 70 41 72 67  ll_callback(pArg
be80: 2c 20 6e 41 72 67 2c 20 61 7a 41 72 67 2c 20 61  , nArg, azArg, a
be90: 7a 43 6f 6c 2c 20 4e 55 4c 4c 29 3b 0a 7d 0a 0a  zCol, NULL);.}..
bea0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
beb0: 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69  e callback routi
bec0: 6e 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ne from sqlite3_
bed0: 65 78 65 63 28 29 20 74 68 61 74 20 61 70 70 65  exec() that appe
bee0: 6e 64 73 20 61 6c 6c 0a 2a 2a 20 6f 75 74 70 75  nds all.** outpu
bef0: 74 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  t onto the end o
bf00: 66 20 61 20 53 68 65 6c 6c 54 65 78 74 20 6f 62  f a ShellText ob
bf10: 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ject..*/.static 
bf20: 69 6e 74 20 63 61 70 74 75 72 65 4f 75 74 70 75  int captureOutpu
bf30: 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a  tCallback(void *
bf40: 70 41 72 67 2c 20 69 6e 74 20 6e 41 72 67 2c 20  pArg, int nArg, 
bf50: 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 63 68  char **azArg, ch
bf60: 61 72 20 2a 2a 61 7a 29 7b 0a 20 20 53 68 65 6c  ar **az){.  Shel
bf70: 6c 54 65 78 74 20 2a 70 20 3d 20 28 53 68 65 6c  lText *p = (Shel
bf80: 6c 54 65 78 74 2a 29 70 41 72 67 3b 0a 20 20 69  lText*)pArg;.  i
bf90: 6e 74 20 69 3b 0a 20 20 55 4e 55 53 45 44 5f 50  nt i;.  UNUSED_P
bfa0: 41 52 41 4d 45 54 45 52 28 61 7a 29 3b 0a 20 20  ARAMETER(az);.  
bfb0: 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 72  if( azArg==0 ) r
bfc0: 65 74 75 72 6e 20 30 3b 0a 20 20 69 66 28 20 70  eturn 0;.  if( p
bfd0: 2d 3e 6e 20 29 20 61 70 70 65 6e 64 54 65 78 74  ->n ) appendText
bfe0: 28 70 2c 20 22 7c 22 2c 20 30 29 3b 0a 20 20 66  (p, "|", 0);.  f
bff0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
c000: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 20  i++){.    if( i 
c010: 29 20 61 70 70 65 6e 64 54 65 78 74 28 70 2c 20  ) appendText(p, 
c020: 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 69 66 28  ",", 0);.    if(
c030: 20 61 7a 41 72 67 5b 69 5d 20 29 20 61 70 70 65   azArg[i] ) appe
c040: 6e 64 54 65 78 74 28 70 2c 20 61 7a 41 72 67 5b  ndText(p, azArg[
c050: 69 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65  i], 0);.  }.  re
c060: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
c070: 20 47 65 6e 65 72 61 74 65 20 61 6e 20 61 70 70   Generate an app
c080: 72 6f 70 72 69 61 74 65 20 53 45 4c 46 54 45 53  ropriate SELFTES
c090: 54 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  T table in the m
c0a0: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  ain database..*/
c0b0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 65  .static void cre
c0c0: 61 74 65 53 65 6c 66 74 65 73 74 54 61 62 6c 65  ateSelftestTable
c0d0: 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b  (ShellState *p){
c0e0: 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
c0f0: 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
c100: 65 78 65 63 28 70 2d 3e 64 62 2c 0a 20 20 20 20  exec(p->db,.    
c110: 22 53 41 56 45 50 4f 49 4e 54 20 73 65 6c 66 74  "SAVEPOINT selft
c120: 65 73 74 5f 69 6e 69 74 3b 5c 6e 22 0a 20 20 20  est_init;\n".   
c130: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49   "CREATE TABLE I
c140: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 73 65 6c  F NOT EXISTS sel
c150: 66 74 65 73 74 28 5c 6e 22 0a 20 20 20 20 22 20  ftest(\n".    " 
c160: 20 74 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49   tno INTEGER PRI
c170: 4d 41 52 59 20 4b 45 59 2c 5c 6e 22 20 20 20 2f  MARY KEY,\n"   /
c180: 2a 20 54 65 73 74 20 6e 75 6d 62 65 72 20 2a 2f  * Test number */
c190: 0a 20 20 20 20 22 20 20 6f 70 20 54 45 58 54 2c  .    "  op TEXT,
c1a0: 5c 6e 22 20 20 20 20 20 20 20 20 20 20 20 20 20  \n"             
c1b0: 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 6f        /* Operato
c1c0: 72 3a 20 20 6d 65 6d 6f 20 72 75 6e 20 2a 2f 0a  r:  memo run */.
c1d0: 20 20 20 20 22 20 20 63 6d 64 20 54 45 58 54 2c      "  cmd TEXT,
c1e0: 5c 6e 22 20 20 20 20 20 20 20 20 20 20 20 20 20  \n"             
c1f0: 20 20 20 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20       /* Command 
c200: 74 65 78 74 20 2a 2f 0a 20 20 20 20 22 20 20 61  text */.    "  a
c210: 6e 73 20 54 45 58 54 5c 6e 22 20 20 20 20 20 20  ns TEXT\n"      
c220: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c230: 44 65 73 69 72 65 64 20 61 6e 73 77 65 72 20 2a  Desired answer *
c240: 2f 0a 20 20 20 20 22 29 3b 22 0a 20 20 20 20 22  /.    ");".    "
c250: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
c260: 45 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 28  E [_shell$self](
c270: 6f 70 2c 63 6d 64 2c 61 6e 73 29 3b 5c 6e 22 0a  op,cmd,ans);\n".
c280: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
c290: 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 28 72   [_shell$self](r
c2a0: 6f 77 69 64 2c 6f 70 2c 63 6d 64 29 5c 6e 22 0a  owid,op,cmd)\n".
c2b0: 20 20 20 20 22 20 20 56 41 4c 55 45 53 28 63 6f      "  VALUES(co
c2c0: 61 6c 65 73 63 65 28 28 53 45 4c 45 43 54 20 28  alesce((SELECT (
c2d0: 6d 61 78 28 74 6e 6f 29 2b 31 30 30 29 2f 31 30  max(tno)+100)/10
c2e0: 20 46 52 4f 4d 20 73 65 6c 66 74 65 73 74 29 2c   FROM selftest),
c2f0: 31 30 29 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20  10),\n".    "   
c300: 20 20 20 20 20 20 27 6d 65 6d 6f 27 2c 27 54 65        'memo','Te
c310: 73 74 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  sts generated by
c320: 20 2d 2d 69 6e 69 74 27 29 3b 5c 6e 22 0a 20 20   --init');\n".  
c330: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b    "INSERT INTO [
c340: 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 5c 6e 22 0a  _shell$self]\n".
c350: 20 20 20 20 22 20 20 53 45 4c 45 43 54 20 27 72      "  SELECT 'r
c360: 75 6e 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20  un',\n".    "   
c370: 20 27 53 45 4c 45 43 54 20 68 65 78 28 73 68 61   'SELECT hex(sha
c380: 33 5f 71 75 65 72 79 28 27 27 53 45 4c 45 43 54  3_query(''SELECT
c390: 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e   type,name,tbl_n
c3a0: 61 6d 65 2c 73 71 6c 20 22 0a 20 20 20 20 20 20  ame,sql ".      
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3c0: 20 20 20 20 20 20 20 20 20 20 20 22 46 52 4f 4d             "FROM
c3d0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f   sqlite_master O
c3e0: 52 44 45 52 20 42 59 20 32 27 27 2c 32 32 34 29  RDER BY 2'',224)
c3f0: 29 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  )',\n".    "    
c400: 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 27  hex(sha3_query('
c410: 53 45 4c 45 43 54 20 74 79 70 65 2c 6e 61 6d 65  SELECT type,name
c420: 2c 74 62 6c 5f 6e 61 6d 65 2c 73 71 6c 20 22 0a  ,tbl_name,sql ".
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c440: 20 20 20 20 20 20 20 20 20 20 22 46 52 4f 4d 20            "FROM 
c450: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f 52  sqlite_master OR
c460: 44 45 52 20 42 59 20 32 27 2c 32 32 34 29 29 3b  DER BY 2',224));
c470: 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20  \n".    "INSERT 
c480: 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c  INTO [_shell$sel
c490: 66 5d 5c 6e 22 0a 20 20 20 20 22 20 20 53 45 4c  f]\n".    "  SEL
c4a0: 45 43 54 20 27 72 75 6e 27 2c 22 0a 20 20 20 20  ECT 'run',".    
c4b0: 22 20 20 20 20 27 53 45 4c 45 43 54 20 68 65 78  "    'SELECT hex
c4c0: 28 73 68 61 33 5f 71 75 65 72 79 28 27 27 53 45  (sha3_query(''SE
c4d0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c 22 27 20  LECT * FROM \"' 
c4e0: 7c 7c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  ||".    "       
c4f0: 20 70 72 69 6e 74 66 28 27 25 77 27 2c 6e 61 6d   printf('%w',nam
c500: 65 29 20 7c 7c 20 27 5c 22 20 4e 4f 54 20 49 4e  e) || '\" NOT IN
c510: 44 45 58 45 44 27 27 2c 32 32 34 29 29 27 2c 5c  DEXED'',224))',\
c520: 6e 22 0a 20 20 20 20 22 20 20 20 20 68 65 78 28  n".    "    hex(
c530: 73 68 61 33 5f 71 75 65 72 79 28 70 72 69 6e 74  sha3_query(print
c540: 66 28 27 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  f('SELECT * FROM
c550: 20 5c 22 25 77 5c 22 20 4e 4f 54 20 49 4e 44 45   \"%w\" NOT INDE
c560: 58 45 44 27 2c 6e 61 6d 65 29 2c 32 32 34 29 29  XED',name),224))
c570: 5c 6e 22 0a 20 20 20 20 22 20 20 46 52 4f 4d 20  \n".    "  FROM 
c580: 28 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 53 45  (\n".    "    SE
c590: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
c5a0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 5c 6e 22 0a  qlite_master\n".
c5b0: 20 20 20 20 22 20 20 20 20 20 57 48 45 52 45 20      "     WHERE 
c5c0: 74 79 70 65 3d 27 74 61 62 6c 65 27 5c 6e 22 0a  type='table'\n".
c5d0: 20 20 20 20 22 20 20 20 20 20 20 20 41 4e 44 20      "       AND 
c5e0: 6e 61 6d 65 3c 3e 27 73 65 6c 66 74 65 73 74 27  name<>'selftest'
c5f0: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  \n".    "       
c600: 41 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f  AND coalesce(roo
c610: 74 70 61 67 65 2c 30 29 3e 30 5c 6e 22 0a 20 20  tpage,0)>0\n".  
c620: 20 20 22 20 20 29 5c 6e 22 0a 20 20 20 20 22 20    "  )\n".    " 
c630: 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b 5c 6e  ORDER BY name;\n
c640: 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  ".    "INSERT IN
c650: 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d  TO [_shell$self]
c660: 5c 6e 22 0a 20 20 20 20 22 20 20 56 41 4c 55 45  \n".    "  VALUE
c670: 53 28 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20  S('run','PRAGMA 
c680: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27  integrity_check'
c690: 2c 27 6f 6b 27 29 3b 5c 6e 22 0a 20 20 20 20 22  ,'ok');\n".    "
c6a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 65 6c 66  INSERT INTO self
c6b0: 74 65 73 74 28 74 6e 6f 2c 6f 70 2c 63 6d 64 2c  test(tno,op,cmd,
c6c0: 61 6e 73 29 22 0a 20 20 20 20 22 20 20 53 45 4c  ans)".    "  SEL
c6d0: 45 43 54 20 72 6f 77 69 64 2a 31 30 2c 6f 70 2c  ECT rowid*10,op,
c6e0: 63 6d 64 2c 61 6e 73 20 46 52 4f 4d 20 5b 5f 73  cmd,ans FROM [_s
c6f0: 68 65 6c 6c 24 73 65 6c 66 5d 3b 5c 6e 22 0a 20  hell$self];\n". 
c700: 20 20 20 22 44 52 4f 50 20 54 41 42 4c 45 20 5b     "DROP TABLE [
c710: 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 3b 22 0a 20  _shell$self];". 
c720: 20 20 20 2c 30 2c 30 2c 26 7a 45 72 72 4d 73 67     ,0,0,&zErrMsg
c730: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 4d 73 67  );.  if( zErrMsg
c740: 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
c750: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 45 4c  ntf(stderr, "SEL
c760: 46 54 45 53 54 20 69 6e 69 74 69 61 6c 69 7a 61  FTEST initializa
c770: 74 69 6f 6e 20 66 61 69 6c 75 72 65 3a 20 25 73  tion failure: %s
c780: 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20  \n", zErrMsg);. 
c790: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
c7a0: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
c7b0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
c7c0: 64 62 2c 20 22 52 45 4c 45 41 53 45 20 73 65 6c  db, "RELEASE sel
c7d0: 66 74 65 73 74 5f 69 6e 69 74 22 2c 30 2c 30 2c  ftest_init",0,0,
c7e0: 30 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65  0);.}.../*.** Se
c7f0: 74 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  t the destinatio
c800: 6e 20 74 61 62 6c 65 20 66 69 65 6c 64 20 6f 66  n table field of
c810: 20 74 68 65 20 53 68 65 6c 6c 53 74 61 74 65 20   the ShellState 
c820: 73 74 72 75 63 74 75 72 65 20 74 6f 0a 2a 2a 20  structure to.** 
c830: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
c840: 74 61 62 6c 65 20 67 69 76 65 6e 2e 20 20 45 73  table given.  Es
c850: 63 61 70 65 20 61 6e 79 20 71 75 6f 74 65 20 63  cape any quote c
c860: 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
c870: 0a 2a 2a 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a  .** table name..
c880: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
c890: 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 53 68  et_table_name(Sh
c8a0: 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
c8b0: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b  st char *zName){
c8c0: 0a 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 63  .  int i, n;.  c
c8d0: 68 61 72 20 63 51 75 6f 74 65 3b 0a 20 20 63 68  har cQuote;.  ch
c8e0: 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 70 2d  ar *z;..  if( p-
c8f0: 3e 7a 44 65 73 74 54 61 62 6c 65 20 29 7b 0a 20  >zDestTable ){. 
c900: 20 20 20 66 72 65 65 28 70 2d 3e 7a 44 65 73 74     free(p->zDest
c910: 54 61 62 6c 65 29 3b 0a 20 20 20 20 70 2d 3e 7a  Table);.    p->z
c920: 44 65 73 74 54 61 62 6c 65 20 3d 20 30 3b 0a 20  DestTable = 0;. 
c930: 20 7d 0a 20 20 69 66 28 20 7a 4e 61 6d 65 3d 3d   }.  if( zName==
c940: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 63 51  0 ) return;.  cQ
c950: 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61 72  uote = quoteChar
c960: 28 7a 4e 61 6d 65 29 3b 0a 20 20 6e 20 3d 20 73  (zName);.  n = s
c970: 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a  trlen30(zName);.
c980: 20 20 69 66 28 20 63 51 75 6f 74 65 20 29 20 6e    if( cQuote ) n
c990: 20 2b 3d 20 6e 2b 32 3b 0a 20 20 7a 20 3d 20 70   += n+2;.  z = p
c9a0: 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d 20 6d  ->zDestTable = m
c9b0: 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b 0a 20 20  alloc( n+1 );.  
c9c0: 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
c9d0: 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
c9e0: 72 2c 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66  r,"Error: out of
c9f0: 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20   memory\n");.   
ca00: 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20   exit(1);.  }.  
ca10: 6e 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 51 75  n = 0;.  if( cQu
ca20: 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63  ote ) z[n++] = c
ca30: 51 75 6f 74 65 3b 0a 20 20 66 6f 72 28 69 3d 30  Quote;.  for(i=0
ca40: 3b 20 7a 4e 61 6d 65 5b 69 5d 3b 20 69 2b 2b 29  ; zName[i]; i++)
ca50: 7b 0a 20 20 20 20 7a 5b 6e 2b 2b 5d 20 3d 20 7a  {.    z[n++] = z
ca60: 4e 61 6d 65 5b 69 5d 3b 0a 20 20 20 20 69 66 28  Name[i];.    if(
ca70: 20 7a 4e 61 6d 65 5b 69 5d 3d 3d 63 51 75 6f 74   zName[i]==cQuot
ca80: 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63 51 75  e ) z[n++] = cQu
ca90: 6f 74 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63  ote;.  }.  if( c
caa0: 51 75 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d  Quote ) z[n++] =
cab0: 20 63 51 75 6f 74 65 3b 0a 20 20 7a 5b 6e 5d 20   cQuote;.  z[n] 
cac0: 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45  = 0;.}.../*.** E
cad0: 78 65 63 75 74 65 20 61 20 71 75 65 72 79 20 73  xecute a query s
cae0: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 77 69  tatement that wi
caf0: 6c 6c 20 67 65 6e 65 72 61 74 65 20 53 51 4c 20  ll generate SQL 
cb00: 6f 75 74 70 75 74 2e 20 20 50 72 69 6e 74 0a 2a  output.  Print.*
cb10: 2a 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  * the result col
cb20: 75 6d 6e 73 2c 20 63 6f 6d 6d 61 2d 73 65 70 61  umns, comma-sepa
cb30: 72 61 74 65 64 2c 20 6f 6e 20 61 20 6c 69 6e 65  rated, on a line
cb40: 20 61 6e 64 20 74 68 65 6e 20 61 64 64 20 61 0a   and then add a.
cb50: 2a 2a 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 65 72  ** semicolon ter
cb60: 6d 69 6e 61 74 6f 72 20 74 6f 20 74 68 65 20 65  minator to the e
cb70: 6e 64 20 6f 66 20 74 68 61 74 20 6c 69 6e 65 2e  nd of that line.
cb80: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6e 75  .**.** If the nu
cb90: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
cba0: 69 73 20 31 20 61 6e 64 20 74 68 61 74 20 63 6f  is 1 and that co
cbb0: 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 74 65  lumn contains te
cbc0: 78 74 20 22 2d 2d 22 0a 2a 2a 20 74 68 65 6e 20  xt "--".** then 
cbd0: 77 72 69 74 65 20 74 68 65 20 73 65 6d 69 63 6f  write the semico
cbe0: 6c 6f 6e 20 6f 6e 20 61 20 73 65 70 61 72 61 74  lon on a separat
cbf0: 65 20 6c 69 6e 65 2e 20 20 54 68 61 74 20 77 61  e line.  That wa
cc00: 79 2c 20 69 66 20 61 0a 2a 2a 20 22 2d 2d 22 20  y, if a.** "--" 
cc10: 63 6f 6d 6d 65 6e 74 20 6f 63 63 75 72 73 20 61  comment occurs a
cc20: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
cc30: 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 20   statement, the 
cc40: 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 77 6f 6e 27 74  comment.** won't
cc50: 20 63 6f 6e 73 75 6d 65 20 74 68 65 20 73 65 6d   consume the sem
cc60: 69 63 6f 6c 6f 6e 20 74 65 72 6d 69 6e 61 74 6f  icolon terminato
cc70: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  r..*/.static int
cc80: 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f   run_table_dump_
cc90: 71 75 65 72 79 28 0a 20 20 53 68 65 6c 6c 53 74  query(.  ShellSt
cca0: 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20  ate *p,         
ccb0: 20 20 2f 2a 20 51 75 65 72 79 20 63 6f 6e 74 65    /* Query conte
ccc0: 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
ccd0: 61 72 20 2a 7a 53 65 6c 65 63 74 2c 20 20 20 20  ar *zSelect,    
cce0: 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
ccf0: 6d 65 6e 74 20 74 6f 20 65 78 74 72 61 63 74 20  ment to extract 
cd00: 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e  content */.  con
cd10: 73 74 20 63 68 61 72 20 2a 7a 46 69 72 73 74 52  st char *zFirstR
cd20: 6f 77 20 20 20 20 2f 2a 20 50 72 69 6e 74 20 62  ow    /* Print b
cd30: 65 66 6f 72 65 20 66 69 72 73 74 20 72 6f 77 2c  efore first row,
cd40: 20 69 66 20 6e 6f 74 20 4e 55 4c 4c 20 2a 2f 0a   if not NULL */.
cd50: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
cd60: 74 20 2a 70 53 65 6c 65 63 74 3b 0a 20 20 69 6e  t *pSelect;.  in
cd70: 74 20 72 63 3b 0a 20 20 69 6e 74 20 6e 52 65 73  t rc;.  int nRes
cd80: 75 6c 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  ult;.  int i;.  
cd90: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20  const char *z;. 
cda0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
cdb0: 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
cdc0: 7a 53 65 6c 65 63 74 2c 20 2d 31 2c 20 26 70 53  zSelect, -1, &pS
cdd0: 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 69 66 28  elect, 0);.  if(
cde0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
cdf0: 7c 20 21 70 53 65 6c 65 63 74 20 29 7b 0a 20 20  | !pSelect ){.  
ce00: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
ce10: 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45 52 52  >out, "/**** ERR
ce20: 4f 52 3a 20 28 25 64 29 20 25 73 20 2a 2a 2a 2a  OR: (%d) %s ****
ce30: 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20 20 20 20  */\n", rc,.     
ce40: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ce50: 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29  e3_errmsg(p->db)
ce60: 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30  );.    if( (rc&0
ce70: 78 66 66 29 21 3d 53 51 4c 49 54 45 5f 43 4f 52  xff)!=SQLITE_COR
ce80: 52 55 50 54 20 29 20 70 2d 3e 6e 45 72 72 2b 2b  RUPT ) p->nErr++
ce90: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b  ;.    return rc;
cea0: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
ceb0: 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63 74  te3_step(pSelect
cec0: 29 3b 0a 20 20 6e 52 65 73 75 6c 74 20 3d 20 73  );.  nResult = s
ced0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
cee0: 75 6e 74 28 70 53 65 6c 65 63 74 29 3b 0a 20 20  unt(pSelect);.  
cef0: 77 68 69 6c 65 28 20 72 63 3d 3d 53 51 4c 49 54  while( rc==SQLIT
cf00: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 66 28  E_ROW ){.    if(
cf10: 20 7a 46 69 72 73 74 52 6f 77 20 29 7b 0a 20 20   zFirstRow ){.  
cf20: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
cf30: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 46  p->out, "%s", zF
cf40: 69 72 73 74 52 6f 77 29 3b 0a 20 20 20 20 20 20  irstRow);.      
cf50: 7a 46 69 72 73 74 52 6f 77 20 3d 20 30 3b 0a 20  zFirstRow = 0;. 
cf60: 20 20 20 7d 0a 20 20 20 20 7a 20 3d 20 28 63 6f     }.    z = (co
cf70: 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
cf80: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
cf90: 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 20 20 75  elect, 0);.    u
cfa0: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
cfb0: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
cfc0: 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 52 65 73   for(i=1; i<nRes
cfd0: 75 6c 74 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ult; i++){.     
cfe0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
cff0: 6f 75 74 2c 20 22 2c 25 73 22 2c 20 73 71 6c 69  out, ",%s", sqli
d000: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
d010: 70 53 65 6c 65 63 74 2c 20 69 29 29 3b 0a 20 20  pSelect, i));.  
d020: 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 3d 3d 30    }.    if( z==0
d030: 20 29 20 7a 20 3d 20 22 22 3b 0a 20 20 20 20 77   ) z = "";.    w
d040: 68 69 6c 65 28 20 7a 5b 30 5d 20 26 26 20 28 7a  hile( z[0] && (z
d050: 5b 30 5d 21 3d 27 2d 27 20 7c 7c 20 7a 5b 31 5d  [0]!='-' || z[1]
d060: 21 3d 27 2d 27 29 20 29 20 7a 2b 2b 3b 0a 20 20  !='-') ) z++;.  
d070: 20 20 69 66 28 20 7a 5b 30 5d 20 29 7b 0a 20 20    if( z[0] ){.  
d080: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
d090: 2d 3e 6f 75 74 2c 20 22 5c 6e 3b 5c 6e 22 29 3b  ->out, "\n;\n");
d0a0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
d0b0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
d0c0: 6f 75 74 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20 20  out, ";\n");.   
d0d0: 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
d0e0: 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63 74  te3_step(pSelect
d0f0: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
d100: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
d110: 53 65 6c 65 63 74 29 3b 0a 20 20 69 66 28 20 72  Select);.  if( r
d120: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
d130: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
d140: 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45  p->out, "/**** E
d150: 52 52 4f 52 3a 20 28 25 64 29 20 25 73 20 2a 2a  RROR: (%d) %s **
d160: 2a 2a 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20 20  ***/\n", rc,.   
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
d180: 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
d190: 62 29 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63  b));.    if( (rc
d1a0: 26 30 78 66 66 29 21 3d 53 51 4c 49 54 45 5f 43  &0xff)!=SQLITE_C
d1b0: 4f 52 52 55 50 54 20 29 20 70 2d 3e 6e 45 72 72  ORRUPT ) p->nErr
d1c0: 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ++;.  }.  return
d1d0: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c   rc;.}../*.** Al
d1e0: 6c 6f 63 61 74 65 20 73 70 61 63 65 20 61 6e 64  locate space and
d1f0: 20 73 61 76 65 20 6f 66 66 20 63 75 72 72 65 6e   save off curren
d200: 74 20 65 72 72 6f 72 20 73 74 72 69 6e 67 2e 0a  t error string..
d210: 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a  */.static char *
d220: 73 61 76 65 5f 65 72 72 5f 6d 73 67 28 0a 20 20  save_err_msg(.  
d230: 73 71 6c 69 74 65 33 20 2a 64 62 20 20 20 20 20  sqlite3 *db     
d240: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
d250: 73 65 20 74 6f 20 71 75 65 72 79 20 2a 2f 0a 29  se to query */.)
d260: 7b 0a 20 20 69 6e 74 20 6e 45 72 72 4d 73 67 20  {.  int nErrMsg 
d270: 3d 20 31 2b 73 74 72 6c 65 6e 33 30 28 73 71 6c  = 1+strlen30(sql
d280: 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29  ite3_errmsg(db))
d290: 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  ;.  char *zErrMs
d2a0: 67 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  g = sqlite3_mall
d2b0: 6f 63 36 34 28 6e 45 72 72 4d 73 67 29 3b 0a 20  oc64(nErrMsg);. 
d2c0: 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a   if( zErrMsg ){.
d2d0: 20 20 20 20 6d 65 6d 63 70 79 28 7a 45 72 72 4d      memcpy(zErrM
d2e0: 73 67 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  sg, sqlite3_errm
d2f0: 73 67 28 64 62 29 2c 20 6e 45 72 72 4d 73 67 29  sg(db), nErrMsg)
d300: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
d310: 45 72 72 4d 73 67 3b 0a 7d 0a 0a 23 69 66 64 65  ErrMsg;.}..#ifde
d320: 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 2f 2a 0a 2a  f __linux__./*.*
d330: 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 69 73  * Attempt to dis
d340: 70 6c 61 79 20 49 2f 4f 20 73 74 61 74 73 20 6f  play I/O stats o
d350: 6e 20 4c 69 6e 75 78 20 75 73 69 6e 67 20 2f 70  n Linux using /p
d360: 72 6f 63 2f 50 49 44 2f 69 6f 0a 2a 2f 0a 73 74  roc/PID/io.*/.st
d370: 61 74 69 63 20 76 6f 69 64 20 64 69 73 70 6c 61  atic void displa
d380: 79 4c 69 6e 75 78 49 6f 53 74 61 74 73 28 46 49  yLinuxIoStats(FI
d390: 4c 45 20 2a 6f 75 74 29 7b 0a 20 20 46 49 4c 45  LE *out){.  FILE
d3a0: 20 2a 69 6e 3b 0a 20 20 63 68 61 72 20 7a 5b 32   *in;.  char z[2
d3b0: 30 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  00];.  sqlite3_s
d3c0: 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
d3d0: 29 2c 20 7a 2c 20 22 2f 70 72 6f 63 2f 25 64 2f  ), z, "/proc/%d/
d3e0: 69 6f 22 2c 20 67 65 74 70 69 64 28 29 29 3b 0a  io", getpid());.
d3f0: 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 7a 2c 20    in = fopen(z, 
d400: 22 72 62 22 29 3b 0a 20 20 69 66 28 20 69 6e 3d  "rb");.  if( in=
d410: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 77  =0 ) return;.  w
d420: 68 69 6c 65 28 20 66 67 65 74 73 28 7a 2c 20 73  hile( fgets(z, s
d430: 69 7a 65 6f 66 28 7a 29 2c 20 69 6e 29 21 3d 30  izeof(z), in)!=0
d440: 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
d450: 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20  onst struct {.  
d460: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
d470: 7a 50 61 74 74 65 72 6e 3b 0a 20 20 20 20 20 20  zPattern;.      
d480: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 65 73  const char *zDes
d490: 63 3b 0a 20 20 20 20 7d 20 61 54 72 61 6e 73 5b  c;.    } aTrans[
d4a0: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 72  ] = {.      { "r
d4b0: 63 68 61 72 3a 20 22 2c 20 20 20 20 20 20 20 20  char: ",        
d4c0: 20 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73            "Bytes
d4d0: 20 72 65 63 65 69 76 65 64 20 62 79 20 72 65 61   received by rea
d4e0: 64 28 29 3a 22 20 7d 2c 0a 20 20 20 20 20 20 7b  d():" },.      {
d4f0: 20 22 77 63 68 61 72 3a 20 22 2c 20 20 20 20 20   "wchar: ",     
d500: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 79               "By
d510: 74 65 73 20 73 65 6e 74 20 74 6f 20 77 72 69 74  tes sent to writ
d520: 65 28 29 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20  e():"    },.    
d530: 20 20 7b 20 22 73 79 73 63 72 3a 20 22 2c 20 20    { "syscr: ",  
d540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d550: 22 52 65 61 64 28 29 20 73 79 73 74 65 6d 20 63  "Read() system c
d560: 61 6c 6c 73 3a 22 20 20 20 20 20 20 7d 2c 0a 20  alls:"      },. 
d570: 20 20 20 20 20 7b 20 22 73 79 73 63 77 3a 20 22       { "syscw: "
d580: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
d590: 20 20 20 22 57 72 69 74 65 28 29 20 73 79 73 74     "Write() syst
d5a0: 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20 20 7d  em calls:"     }
d5b0: 2c 0a 20 20 20 20 20 20 7b 20 22 72 65 61 64 5f  ,.      { "read_
d5c0: 62 79 74 65 73 3a 20 22 2c 20 20 20 20 20 20 20  bytes: ",       
d5d0: 20 20 20 20 20 20 22 42 79 74 65 73 20 72 65 61        "Bytes rea
d5e0: 64 20 66 72 6f 6d 20 73 74 6f 72 61 67 65 3a 22  d from storage:"
d5f0: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 77 72    },.      { "wr
d600: 69 74 65 5f 62 79 74 65 73 3a 20 22 2c 20 20 20  ite_bytes: ",   
d610: 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73 20           "Bytes 
d620: 77 72 69 74 74 65 6e 20 74 6f 20 73 74 6f 72 61  written to stora
d630: 67 65 3a 22 20 7d 2c 0a 20 20 20 20 20 20 7b 20  ge:" },.      { 
d640: 22 63 61 6e 63 65 6c 6c 65 64 5f 77 72 69 74 65  "cancelled_write
d650: 5f 62 79 74 65 73 3a 20 22 2c 20 20 22 43 61 6e  _bytes: ",  "Can
d660: 63 65 6c 6c 65 64 20 77 72 69 74 65 20 62 79 74  celled write byt
d670: 65 73 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20 7d  es:"    },.    }
d680: 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
d690: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
d6a0: 79 53 69 7a 65 28 61 54 72 61 6e 73 29 3b 20 69  ySize(aTrans); i
d6b0: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ++){.      int n
d6c0: 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 61   = (int)strlen(a
d6d0: 54 72 61 6e 73 5b 69 5d 2e 7a 50 61 74 74 65 72  Trans[i].zPatter
d6e0: 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74  n);.      if( st
d6f0: 72 6e 63 6d 70 28 61 54 72 61 6e 73 5b 69 5d 2e  rncmp(aTrans[i].
d700: 7a 50 61 74 74 65 72 6e 2c 20 7a 2c 20 6e 29 3d  zPattern, z, n)=
d710: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74  =0 ){.        ut
d720: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  f8_printf(out, "
d730: 25 2d 33 36 73 20 25 73 22 2c 20 61 54 72 61 6e  %-36s %s", aTran
d740: 73 5b 69 5d 2e 7a 44 65 73 63 2c 20 26 7a 5b 6e  s[i].zDesc, &z[n
d750: 5d 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  ]);.        brea
d760: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
d770: 0a 20 20 7d 0a 20 20 66 63 6c 6f 73 65 28 69 6e  .  }.  fclose(in
d780: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
d790: 2a 2a 20 44 69 73 70 6c 61 79 20 61 20 73 69 6e  ** Display a sin
d7a0: 67 6c 65 20 6c 69 6e 65 20 6f 66 20 73 74 61 74  gle line of stat
d7b0: 75 73 20 75 73 69 6e 67 20 36 34 2d 62 69 74 20  us using 64-bit 
d7c0: 76 61 6c 75 65 73 2e 0a 2a 2f 0a 73 74 61 74 69  values..*/.stati
d7d0: 63 20 76 6f 69 64 20 64 69 73 70 6c 61 79 53 74  c void displaySt
d7e0: 61 74 4c 69 6e 65 28 0a 20 20 53 68 65 6c 6c 53  atLine(.  ShellS
d7f0: 74 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20 20  tate *p,        
d800: 20 20 20 20 2f 2a 20 54 68 65 20 73 68 65 6c 6c      /* The shell
d810: 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 68   context */.  ch
d820: 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 20 20 20 20  ar *zLabel,     
d830: 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 62 65 6c          /* Label
d840: 20 66 6f 72 20 74 68 69 73 20 6f 6e 65 20 6c 69   for this one li
d850: 6e 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 46  ne */.  char *zF
d860: 6f 72 6d 61 74 2c 20 20 20 20 20 20 20 20 20 20  ormat,          
d870: 20 20 2f 2a 20 46 6f 72 6d 61 74 20 66 6f 72 20    /* Format for 
d880: 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
d890: 69 6e 74 20 69 53 74 61 74 75 73 43 74 72 6c 2c  int iStatusCtrl,
d8a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
d8b0: 63 68 20 73 74 61 74 75 73 20 74 6f 20 64 69 73  ch status to dis
d8c0: 70 6c 61 79 20 2a 2f 0a 20 20 69 6e 74 20 62 52  play */.  int bR
d8d0: 65 73 65 74 20 20 20 20 20 20 20 20 20 20 20 20  eset            
d8e0: 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 72      /* True to r
d8f0: 65 73 65 74 20 74 68 65 20 73 74 61 74 73 20 2a  eset the stats *
d900: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69  /.){.  sqlite3_i
d910: 6e 74 36 34 20 69 43 75 72 20 3d 20 2d 31 3b 0a  nt64 iCur = -1;.
d920: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
d930: 69 48 69 77 74 72 20 3d 20 2d 31 3b 0a 20 20 69  iHiwtr = -1;.  i
d940: 6e 74 20 69 2c 20 6e 50 65 72 63 65 6e 74 3b 0a  nt i, nPercent;.
d950: 20 20 63 68 61 72 20 7a 4c 69 6e 65 5b 32 30 30    char zLine[200
d960: 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61  ];.  sqlite3_sta
d970: 74 75 73 36 34 28 69 53 74 61 74 75 73 43 74 72  tus64(iStatusCtr
d980: 6c 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77 74  l, &iCur, &iHiwt
d990: 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 66 6f  r, bReset);.  fo
d9a0: 72 28 69 3d 30 2c 20 6e 50 65 72 63 65 6e 74 3d  r(i=0, nPercent=
d9b0: 30 3b 20 7a 46 6f 72 6d 61 74 5b 69 5d 3b 20 69  0; zFormat[i]; i
d9c0: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 46 6f  ++){.    if( zFo
d9d0: 72 6d 61 74 5b 69 5d 3d 3d 27 25 27 20 29 20 6e  rmat[i]=='%' ) n
d9e0: 50 65 72 63 65 6e 74 2b 2b 3b 0a 20 20 7d 0a 20  Percent++;.  }. 
d9f0: 20 69 66 28 20 6e 50 65 72 63 65 6e 74 3e 31 20   if( nPercent>1 
da00: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ){.    sqlite3_s
da10: 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
da20: 4c 69 6e 65 29 2c 20 7a 4c 69 6e 65 2c 20 7a 46  Line), zLine, zF
da30: 6f 72 6d 61 74 2c 20 69 43 75 72 2c 20 69 48 69  ormat, iCur, iHi
da40: 77 74 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  wtr);.  }else{. 
da50: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
da60: 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c 69 6e 65  ntf(sizeof(zLine
da70: 29 2c 20 7a 4c 69 6e 65 2c 20 7a 46 6f 72 6d 61  ), zLine, zForma
da80: 74 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 7d 0a  t, iHiwtr);.  }.
da90: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
daa0: 6f 75 74 2c 20 22 25 2d 33 36 73 20 25 73 5c 6e  out, "%-36s %s\n
dab0: 22 2c 20 7a 4c 61 62 65 6c 2c 20 7a 4c 69 6e 65  ", zLabel, zLine
dac0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70  );.}../*.** Disp
dad0: 6c 61 79 20 6d 65 6d 6f 72 79 20 73 74 61 74 73  lay memory stats
dae0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
daf0: 64 69 73 70 6c 61 79 5f 73 74 61 74 73 28 0a 20  display_stats(. 
db00: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20   sqlite3 *db,   
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
db20: 44 61 74 61 62 61 73 65 20 74 6f 20 71 75 65 72  Database to quer
db30: 79 20 2a 2f 0a 20 20 53 68 65 6c 6c 53 74 61 74  y */.  ShellStat
db40: 65 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20  e *pArg,        
db50: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
db60: 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 20   ShellState */. 
db70: 20 69 6e 74 20 62 52 65 73 65 74 20 20 20 20 20   int bReset     
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
db90: 54 72 75 65 20 74 6f 20 72 65 73 65 74 20 74 68  True to reset th
dba0: 65 20 73 74 61 74 73 20 2a 2f 0a 29 7b 0a 20 20  e stats */.){.  
dbb0: 69 6e 74 20 69 43 75 72 3b 0a 20 20 69 6e 74 20  int iCur;.  int 
dbc0: 69 48 69 77 74 72 3b 0a 0a 20 20 69 66 28 20 70  iHiwtr;..  if( p
dbd0: 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75 74  Arg && pArg->out
dbe0: 20 29 7b 0a 20 20 20 20 64 69 73 70 6c 61 79 53   ){.    displayS
dbf0: 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4d  tatLine(pArg, "M
dc00: 65 6d 6f 72 79 20 55 73 65 64 3a 22 2c 0a 20 20  emory Used:",.  
dc10: 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20       "%lld (max 
dc20: 25 6c 6c 64 29 20 62 79 74 65 73 22 2c 20 53 51  %lld) bytes", SQ
dc30: 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 45 4d 4f  LITE_STATUS_MEMO
dc40: 52 59 5f 55 53 45 44 2c 20 62 52 65 73 65 74 29  RY_USED, bReset)
dc50: 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  ;.    displaySta
dc60: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d  tLine(pArg, "Num
dc70: 62 65 72 20 6f 66 20 4f 75 74 73 74 61 6e 64 69  ber of Outstandi
dc80: 6e 67 20 41 6c 6c 6f 63 61 74 69 6f 6e 73 3a 22  ng Allocations:"
dc90: 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64 20 28  ,.       "%lld (
dca0: 6d 61 78 20 25 6c 6c 64 29 22 2c 20 53 51 4c 49  max %lld)", SQLI
dcb0: 54 45 5f 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43  TE_STATUS_MALLOC
dcc0: 5f 43 4f 55 4e 54 2c 20 62 52 65 73 65 74 29 3b  _COUNT, bReset);
dcd0: 0a 20 20 20 20 69 66 28 20 70 41 72 67 2d 3e 73  .    if( pArg->s
dce0: 68 65 6c 6c 46 6c 67 73 20 26 20 53 48 46 4c 47  hellFlgs & SHFLG
dcf0: 5f 50 61 67 65 63 61 63 68 65 20 29 7b 0a 20 20  _Pagecache ){.  
dd00: 20 20 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c      displayStatL
dd10: 69 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d 62 65  ine(pArg, "Numbe
dd20: 72 20 6f 66 20 50 63 61 63 68 65 20 50 61 67 65  r of Pcache Page
dd30: 73 20 55 73 65 64 3a 22 2c 0a 20 20 20 20 20 20  s Used:",.      
dd40: 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25 6c     "%lld (max %l
dd50: 6c 64 29 20 70 61 67 65 73 22 2c 20 53 51 4c 49  ld) pages", SQLI
dd60: 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41  TE_STATUS_PAGECA
dd70: 43 48 45 5f 55 53 45 44 2c 20 62 52 65 73 65 74  CHE_USED, bReset
dd80: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 69 73  );.    }.    dis
dd90: 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72  playStatLine(pAr
dda0: 67 2c 20 22 4e 75 6d 62 65 72 20 6f 66 20 50 63  g, "Number of Pc
ddb0: 61 63 68 65 20 4f 76 65 72 66 6c 6f 77 20 42 79  ache Overflow By
ddc0: 74 65 73 3a 22 2c 0a 20 20 20 20 20 20 20 22 25  tes:",.       "%
ddd0: 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29 20 62  lld (max %lld) b
dde0: 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f 53 54  ytes", SQLITE_ST
ddf0: 41 54 55 53 5f 50 41 47 45 43 41 43 48 45 5f 4f  ATUS_PAGECACHE_O
de00: 56 45 52 46 4c 4f 57 2c 20 62 52 65 73 65 74 29  VERFLOW, bReset)
de10: 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  ;.    displaySta
de20: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4c 61 72  tLine(pArg, "Lar
de30: 67 65 73 74 20 41 6c 6c 6f 63 61 74 69 6f 6e 3a  gest Allocation:
de40: 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64 20  ",.       "%lld 
de50: 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f 53  bytes", SQLITE_S
de60: 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 53 49 5a  TATUS_MALLOC_SIZ
de70: 45 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  E, bReset);.    
de80: 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28  displayStatLine(
de90: 70 41 72 67 2c 20 22 4c 61 72 67 65 73 74 20 50  pArg, "Largest P
dea0: 63 61 63 68 65 20 41 6c 6c 6f 63 61 74 69 6f 6e  cache Allocation
deb0: 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64  :",.       "%lld
dec0: 20 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f   bytes", SQLITE_
ded0: 53 54 41 54 55 53 5f 50 41 47 45 43 41 43 48 45  STATUS_PAGECACHE
dee0: 5f 53 49 5a 45 2c 20 62 52 65 73 65 74 29 3b 0a  _SIZE, bReset);.
def0: 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
df00: 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 20 20  XSTACKDEPTH.    
df10: 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28  displayStatLine(
df20: 70 41 72 67 2c 20 22 44 65 65 70 65 73 74 20 50  pArg, "Deepest P
df30: 61 72 73 65 72 20 53 74 61 63 6b 3a 22 2c 0a 20  arser Stack:",. 
df40: 20 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78        "%lld (max
df50: 20 25 6c 6c 64 29 22 2c 20 53 51 4c 49 54 45 5f   %lld)", SQLITE_
df60: 53 54 41 54 55 53 5f 50 41 52 53 45 52 5f 53 54  STATUS_PARSER_ST
df70: 41 43 4b 2c 20 62 52 65 73 65 74 29 3b 0a 23 65  ACK, bReset);.#e
df80: 6e 64 69 66 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ndif.  }..  if( 
df90: 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75  pArg && pArg->ou
dfa0: 74 20 26 26 20 64 62 20 29 7b 0a 20 20 20 20 69  t && db ){.    i
dfb0: 66 28 20 70 41 72 67 2d 3e 73 68 65 6c 6c 46 6c  f( pArg->shellFl
dfc0: 67 73 20 26 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61  gs & SHFLG_Looka
dfd0: 73 69 64 65 20 29 7b 0a 20 20 20 20 20 20 69 48  side ){.      iH
dfe0: 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31  iwtr = iCur = -1
dff0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
e000: 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51  db_status(db, SQ
e010: 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f  LITE_DBSTATUS_LO
e020: 4f 4b 41 53 49 44 45 5f 55 53 45 44 2c 0a 20 20  OKASIDE_USED,.  
e030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e040: 20 20 20 20 20 20 26 69 43 75 72 2c 20 26 69 48        &iCur, &iH
e050: 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20  iwtr, bReset);. 
e060: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
e070: 70 41 72 67 2d 3e 6f 75 74 2c 0a 20 20 20 20 20  pArg->out,.     
e080: 20 20 20 20 20 20 20 20 20 22 4c 6f 6f 6b 61 73           "Lookas
e090: 69 64 65 20 53 6c 6f 74 73 20 55 73 65 64 3a 20  ide Slots Used: 
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
e0b0: 64 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c 0a 20  d (max %d)\n",. 
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 43 75               iCu
e0d0: 72 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20  r, iHiwtr);.    
e0e0: 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
e0f0: 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44  tus(db, SQLITE_D
e100: 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44  BSTATUS_LOOKASID
e110: 45 5f 48 49 54 2c 0a 20 20 20 20 20 20 20 20 20  E_HIT,.         
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
e130: 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62  iCur, &iHiwtr, b
e140: 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20 72 61  Reset);.      ra
e150: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
e160: 75 74 2c 20 22 53 75 63 63 65 73 73 66 75 6c 20  ut, "Successful 
e170: 6c 6f 6f 6b 61 73 69 64 65 20 61 74 74 65 6d 70  lookaside attemp
e180: 74 73 3a 20 20 20 20 20 20 20 25 64 5c 6e 22 2c  ts:       %d\n",
e190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
e1a0: 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20 73 71  Hiwtr);.      sq
e1b0: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
e1c0: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
e1d0: 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49  TUS_LOOKASIDE_MI
e1e0: 53 53 5f 53 49 5a 45 2c 0a 20 20 20 20 20 20 20  SS_SIZE,.       
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e200: 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
e210: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20   bReset);.      
e220: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
e230: 3e 6f 75 74 2c 20 22 4c 6f 6f 6b 61 73 69 64 65  >out, "Lookaside
e240: 20 66 61 69 6c 75 72 65 73 20 64 75 65 20 74 6f   failures due to
e250: 20 73 69 7a 65 3a 20 20 20 20 20 20 25 64 5c 6e   size:      %d\n
e260: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
e270: 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20   iHiwtr);.      
e280: 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75  sqlite3_db_statu
e290: 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53  s(db, SQLITE_DBS
e2a0: 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f  TATUS_LOOKASIDE_
e2b0: 4d 49 53 53 5f 46 55 4c 4c 2c 0a 20 20 20 20 20  MISS_FULL,.     
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2d0: 20 20 20 26 69 43 75 72 2c 20 26 69 48 69 77 74     &iCur, &iHiwt
e2e0: 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  r, bReset);.    
e2f0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
e300: 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 6b 61 73 69  g->out, "Lookasi
e310: 64 65 20 66 61 69 6c 75 72 65 73 20 64 75 65 20  de failures due 
e320: 74 6f 20 4f 4f 4d 3a 20 20 20 20 20 20 20 25 64  to OOM:       %d
e330: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
e340: 20 20 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20     iHiwtr);.    
e350: 7d 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69  }.    iHiwtr = i
e360: 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71  Cur = -1;.    sq
e370: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
e380: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
e390: 54 55 53 5f 43 41 43 48 45 5f 55 53 45 44 2c 20  TUS_CACHE_USED, 
e3a0: 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20  &iCur, &iHiwtr, 
e3b0: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77  bReset);.    raw
e3c0: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
e3d0: 74 2c 20 22 50 61 67 65 72 20 48 65 61 70 20 55  t, "Pager Heap U
e3e0: 73 61 67 65 3a 20 20 20 20 20 20 20 20 20 20 20  sage:           
e3f0: 20 20 20 20 20 20 20 20 20 25 64 20 62 79 74 65           %d byte
e400: 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
e410: 20 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69    iCur);.    iHi
e420: 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b  wtr = iCur = -1;
e430: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
e440: 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
e450: 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45  E_DBSTATUS_CACHE
e460: 5f 48 49 54 2c 20 26 69 43 75 72 2c 20 26 69 48  _HIT, &iCur, &iH
e470: 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72 61  iwtr, 1);.    ra
e480: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
e490: 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65 20  ut, "Page cache 
e4a0: 68 69 74 73 3a 20 20 20 20 20 20 20 20 20 20 20  hits:           
e4b0: 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c            %d\n",
e4c0: 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77   iCur);.    iHiw
e4d0: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
e4e0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e4f0: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e500: 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
e510: 4d 49 53 53 2c 20 26 69 43 75 72 2c 20 26 69 48  MISS, &iCur, &iH
e520: 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72 61  iwtr, 1);.    ra
e530: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
e540: 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65 20  ut, "Page cache 
e550: 6d 69 73 73 65 73 3a 20 20 20 20 20 20 20 20 20  misses:         
e560: 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c            %d\n",
e570: 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77   iCur);.    iHiw
e580: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
e590: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e5a0: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e5b0: 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
e5c0: 57 52 49 54 45 2c 20 26 69 43 75 72 2c 20 26 69  WRITE, &iCur, &i
e5d0: 48 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72  Hiwtr, 1);.    r
e5e0: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
e5f0: 6f 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65  out, "Page cache
e600: 20 77 72 69 74 65 73 3a 20 20 20 20 20 20 20 20   writes:        
e610: 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22             %d\n"
e620: 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69  , iCur);.    iHi
e630: 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b  wtr = iCur = -1;
e640: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
e650: 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
e660: 45 5f 44 42 53 54 41 54 55 53 5f 53 43 48 45 4d  E_DBSTATUS_SCHEM
e670: 41 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26  A_USED, &iCur, &
e680: 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b  iHiwtr, bReset);
e690: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e6a0: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 53 63 68 65  pArg->out, "Sche
e6b0: 6d 61 20 48 65 61 70 20 55 73 61 67 65 3a 20 20  ma Heap Usage:  
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6d0: 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20   %d bytes\n",.  
e6e0: 20 20 20 20 20 20 20 20 20 20 69 43 75 72 29 3b            iCur);
e6f0: 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43  .    iHiwtr = iC
e700: 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c  ur = -1;.    sql
e710: 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64  ite3_db_status(d
e720: 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54  b, SQLITE_DBSTAT
e730: 55 53 5f 53 54 4d 54 5f 55 53 45 44 2c 20 26 69  US_STMT_USED, &i
e740: 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52  Cur, &iHiwtr, bR
e750: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
e760: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e770: 20 22 53 74 61 74 65 6d 65 6e 74 20 48 65 61 70   "Statement Heap
e780: 2f 4c 6f 6f 6b 61 73 69 64 65 20 55 73 61 67 65  /Lookaside Usage
e790: 3a 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c  :      %d bytes\
e7a0: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
e7b0: 69 43 75 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  iCur);.  }..  if
e7c0: 28 20 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e  ( pArg && pArg->
e7d0: 6f 75 74 20 26 26 20 64 62 20 26 26 20 70 41 72  out && db && pAr
e7e0: 67 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  g->pStmt ){.    
e7f0: 69 43 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73  iCur = sqlite3_s
e800: 74 6d 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d  tmt_status(pArg-
e810: 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53  >pStmt, SQLITE_S
e820: 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43  TMTSTATUS_FULLSC
e830: 41 4e 5f 53 54 45 50 2c 0a 20 20 20 20 20 20 20  AN_STEP,.       
e840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e850: 20 20 20 20 20 20 20 20 62 52 65 73 65 74 29 3b          bReset);
e860: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e870: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 46 75 6c 6c  pArg->out, "Full
e880: 73 63 61 6e 20 53 74 65 70 73 3a 20 20 20 20 20  scan Steps:     
e890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8a0: 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20   %d\n", iCur);. 
e8b0: 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69 74 65     iCur = sqlite
e8c0: 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 70 41  3_stmt_status(pA
e8d0: 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54  rg->pStmt, SQLIT
e8e0: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
e8f0: 54 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  T, bReset);.    
e900: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
e910: 3e 6f 75 74 2c 20 22 53 6f 72 74 20 4f 70 65 72  >out, "Sort Oper
e920: 61 74 69 6f 6e 73 3a 20 20 20 20 20 20 20 20 20  ations:         
e930: 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e              %d\n
e940: 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 43  ", iCur);.    iC
e950: 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d  ur = sqlite3_stm
e960: 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70  t_status(pArg->p
e970: 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d  Stmt, SQLITE_STM
e980: 54 53 54 41 54 55 53 5f 41 55 54 4f 49 4e 44 45  TSTATUS_AUTOINDE
e990: 58 2c 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72  X,bReset);.    r
e9a0: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
e9b0: 6f 75 74 2c 20 22 41 75 74 6f 69 6e 64 65 78 20  out, "Autoindex 
e9c0: 49 6e 73 65 72 74 73 3a 20 20 20 20 20 20 20 20  Inserts:        
e9d0: 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22             %d\n"
e9e0: 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 43 75  , iCur);.    iCu
e9f0: 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  r = sqlite3_stmt
ea00: 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70 53  _status(pArg->pS
ea10: 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54  tmt, SQLITE_STMT
ea20: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 2c 20  STATUS_VM_STEP, 
ea30: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77  bReset);.    raw
ea40: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
ea50: 74 2c 20 22 56 69 72 74 75 61 6c 20 4d 61 63 68  t, "Virtual Mach
ea60: 69 6e 65 20 53 74 65 70 73 3a 20 20 20 20 20 20  ine Steps:      
ea70: 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20           %d\n", 
ea80: 69 43 75 72 29 3b 0a 20 20 7d 0a 0a 23 69 66 64  iCur);.  }..#ifd
ea90: 65 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 20 20 64  ef __linux__.  d
eaa0: 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74 61  isplayLinuxIoSta
eab0: 74 73 28 70 41 72 67 2d 3e 6f 75 74 29 3b 0a 23  ts(pArg->out);.#
eac0: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 44 6f 20 6e  endif..  /* Do n
ead0: 6f 74 20 72 65 6d 6f 76 65 20 74 68 69 73 20 6d  ot remove this m
eae0: 61 63 68 69 6e 65 20 72 65 61 64 61 62 6c 65 20  achine readable 
eaf0: 63 6f 6d 6d 65 6e 74 3a 20 65 78 74 72 61 2d 73  comment: extra-s
eb00: 74 61 74 73 2d 6f 75 74 70 75 74 2d 68 65 72 65  tats-output-here
eb10: 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20 30 3b   */..  return 0;
eb20: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61  .}../*.** Displa
eb30: 79 20 73 63 61 6e 20 73 74 61 74 73 2e 0a 2a 2f  y scan stats..*/
eb40: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64 69 73  .static void dis
eb50: 70 6c 61 79 5f 73 63 61 6e 73 74 61 74 73 28 0a  play_scanstats(.
eb60: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20    sqlite3 *db,  
eb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb80: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 6f    /* Database to
eb90: 20 71 75 65 72 79 20 2a 2f 0a 20 20 53 68 65 6c   query */.  Shel
eba0: 6c 53 74 61 74 65 20 2a 70 41 72 67 20 20 20 20  lState *pArg    
ebb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
ebc0: 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c 6c 53  ointer to ShellS
ebd0: 74 61 74 65 20 2a 2f 0a 29 7b 0a 23 69 66 6e 64  tate */.){.#ifnd
ebe0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
ebf0: 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
ec00: 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  .  UNUSED_PARAME
ec10: 54 45 52 28 64 62 29 3b 0a 20 20 55 4e 55 53 45  TER(db);.  UNUSE
ec20: 44 5f 50 41 52 41 4d 45 54 45 52 28 70 41 72 67  D_PARAMETER(pArg
ec30: 29 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 69  );.#else.  int i
ec40: 2c 20 6b 2c 20 6e 2c 20 6d 78 3b 0a 20 20 72 61  , k, n, mx;.  ra
ec50: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
ec60: 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 63  ut, "-------- sc
ec70: 61 6e 73 74 61 74 73 20 2d 2d 2d 2d 2d 2d 2d 2d  anstats --------
ec80: 5c 6e 22 29 3b 0a 20 20 6d 78 20 3d 20 30 3b 0a  \n");.  mx = 0;.
ec90: 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 3d 6d 78    for(k=0; k<=mx
eca0: 3b 20 6b 2b 2b 29 7b 0a 20 20 20 20 64 6f 75 62  ; k++){.    doub
ecb0: 6c 65 20 72 45 73 74 4c 6f 6f 70 20 3d 20 31 2e  le rEstLoop = 1.
ecc0: 30 3b 0a 20 20 20 20 66 6f 72 28 69 3d 6e 3d 30  0;.    for(i=n=0
ecd0: 3b 20 31 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ; 1; i++){.     
ece0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
ecf0: 20 3d 20 70 41 72 67 2d 3e 70 53 74 6d 74 3b 0a   = pArg->pStmt;.
ed00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
ed10: 74 36 34 20 6e 4c 6f 6f 70 2c 20 6e 56 69 73 69  t64 nLoop, nVisi
ed20: 74 3b 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20  t;.      double 
ed30: 72 45 73 74 3b 0a 20 20 20 20 20 20 69 6e 74 20  rEst;.      int 
ed40: 69 53 69 64 3b 0a 20 20 20 20 20 20 63 6f 6e 73  iSid;.      cons
ed50: 74 20 63 68 61 72 20 2a 7a 45 78 70 6c 61 69 6e  t char *zExplain
ed60: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
ed70: 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61  te3_stmt_scansta
ed80: 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45  tus(p, i, SQLITE
ed90: 5f 53 43 41 4e 53 54 41 54 5f 4e 4c 4f 4f 50 2c  _SCANSTAT_NLOOP,
eda0: 20 28 76 6f 69 64 2a 29 26 6e 4c 6f 6f 70 29 20   (void*)&nLoop) 
edb0: 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  ){.        break
edc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
edd0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61  sqlite3_stmt_sca
ede0: 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51  nstatus(p, i, SQ
edf0: 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 53 45  LITE_SCANSTAT_SE
ee00: 4c 45 43 54 49 44 2c 20 28 76 6f 69 64 2a 29 26  LECTID, (void*)&
ee10: 69 53 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28  iSid);.      if(
ee20: 20 69 53 69 64 3e 6d 78 20 29 20 6d 78 20 3d 20   iSid>mx ) mx = 
ee30: 69 53 69 64 3b 0a 20 20 20 20 20 20 69 66 28 20  iSid;.      if( 
ee40: 69 53 69 64 21 3d 6b 20 29 20 63 6f 6e 74 69 6e  iSid!=k ) contin
ee50: 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 3d  ue;.      if( n=
ee60: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 45  =0 ){.        rE
ee70: 73 74 4c 6f 6f 70 20 3d 20 28 64 6f 75 62 6c 65  stLoop = (double
ee80: 29 6e 4c 6f 6f 70 3b 0a 20 20 20 20 20 20 20 20  )nLoop;.        
ee90: 69 66 28 20 6b 3e 30 20 29 20 72 61 77 5f 70 72  if( k>0 ) raw_pr
eea0: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
eeb0: 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 75 62 71 75 65  "-------- subque
eec0: 72 79 20 25 64 20 2d 2d 2d 2d 2d 2d 2d 5c 6e 22  ry %d -------\n"
eed0: 2c 20 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , k);.      }.  
eee0: 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 73      n++;.      s
eef0: 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e  qlite3_stmt_scan
ef00: 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51 4c  status(p, i, SQL
ef10: 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 4e 56 49  ITE_SCANSTAT_NVI
ef20: 53 49 54 2c 20 28 76 6f 69 64 2a 29 26 6e 56 69  SIT, (void*)&nVi
ef30: 73 69 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  sit);.      sqli
ef40: 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61  te3_stmt_scansta
ef50: 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45  tus(p, i, SQLITE
ef60: 5f 53 43 41 4e 53 54 41 54 5f 45 53 54 2c 20 28  _SCANSTAT_EST, (
ef70: 76 6f 69 64 2a 29 26 72 45 73 74 29 3b 0a 20 20  void*)&rEst);.  
ef80: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
ef90: 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69  _scanstatus(p, i
efa0: 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41  , SQLITE_SCANSTA
efb0: 54 5f 45 58 50 4c 41 49 4e 2c 20 28 76 6f 69 64  T_EXPLAIN, (void
efc0: 2a 29 26 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20  *)&zExplain);.  
efd0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
efe0: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 70  pArg->out, "Loop
eff0: 20 25 32 64 3a 20 25 73 5c 6e 22 2c 20 6e 2c 20   %2d: %s\n", n, 
f000: 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20  zExplain);.     
f010: 20 72 45 73 74 4c 6f 6f 70 20 2a 3d 20 72 45 73   rEstLoop *= rEs
f020: 74 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  t;.      raw_pri
f030: 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 0a 20  ntf(pArg->out,. 
f040: 20 20 20 20 20 20 20 20 20 22 20 20 20 20 20 20           "      
f050: 20 20 20 6e 4c 6f 6f 70 3d 25 2d 38 6c 6c 64 20     nLoop=%-8lld 
f060: 6e 52 6f 77 3d 25 2d 38 6c 6c 64 20 65 73 74 52  nRow=%-8lld estR
f070: 6f 77 3d 25 2d 38 6c 6c 64 20 65 73 74 52 6f 77  ow=%-8lld estRow
f080: 2f 4c 6f 6f 70 3d 25 2d 38 67 5c 6e 22 2c 0a 20  /Loop=%-8g\n",. 
f090: 20 20 20 20 20 20 20 20 20 6e 4c 6f 6f 70 2c 20           nLoop, 
f0a0: 6e 56 69 73 69 74 2c 20 28 73 71 6c 69 74 65 33  nVisit, (sqlite3
f0b0: 5f 69 6e 74 36 34 29 28 72 45 73 74 4c 6f 6f 70  _int64)(rEstLoop
f0c0: 2b 30 2e 35 29 2c 20 72 45 73 74 0a 20 20 20 20  +0.5), rEst.    
f0d0: 20 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20    );.    }.  }. 
f0e0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
f0f0: 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d  ->out, "--------
f100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f110: 2d 2d 2d 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a  ---\n");.#endif.
f120: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  }../*.** Paramet
f130: 65 72 20 61 7a 41 72 72 61 79 20 70 6f 69 6e 74  er azArray point
f140: 73 20 74 6f 20 61 20 7a 65 72 6f 2d 74 65 72 6d  s to a zero-term
f150: 69 6e 61 74 65 64 20 61 72 72 61 79 20 6f 66 20  inated array of 
f160: 73 74 72 69 6e 67 73 2e 20 7a 53 74 72 0a 2a 2a  strings. zStr.**
f170: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 73 69 6e   points to a sin
f180: 67 6c 65 20 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  gle nul-terminat
f190: 65 64 20 73 74 72 69 6e 67 2e 20 52 65 74 75 72  ed string. Retur
f1a0: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 7a 53  n non-zero if zS
f1b0: 74 72 0a 2a 2a 20 69 73 20 65 71 75 61 6c 2c 20  tr.** is equal, 
f1c0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 73 74 72  according to str
f1d0: 63 6d 70 28 29 2c 20 74 6f 20 61 6e 79 20 6f 66  cmp(), to any of
f1e0: 20 74 68 65 20 73 74 72 69 6e 67 73 20 69 6e 20   the strings in 
f1f0: 74 68 65 20 61 72 72 61 79 2e 0a 2a 2a 20 4f 74  the array..** Ot
f200: 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20  herwise, return 
f210: 7a 65 72 6f 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  zero..*/.static 
f220: 69 6e 74 20 73 74 72 5f 69 6e 5f 61 72 72 61 79  int str_in_array
f230: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74  (const char *zSt
f240: 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  r, const char **
f250: 61 7a 41 72 72 61 79 29 7b 0a 20 20 69 6e 74 20  azArray){.  int 
f260: 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 61 7a  i;.  for(i=0; az
f270: 41 72 72 61 79 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  Array[i]; i++){.
f280: 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d      if( 0==strcm
f290: 70 28 7a 53 74 72 2c 20 61 7a 41 72 72 61 79 5b  p(zStr, azArray[
f2a0: 69 5d 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  i]) ) return 1;.
f2b0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
f2c0: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70  }../*.** If comp
f2d0: 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 20 70  iled statement p
f2e0: 53 71 6c 20 61 70 70 65 61 72 73 20 74 6f 20 62  Sql appears to b
f2f0: 65 20 61 6e 20 45 58 50 4c 41 49 4e 20 73 74 61  e an EXPLAIN sta
f300: 74 65 6d 65 6e 74 2c 20 61 6c 6c 6f 63 61 74 65  tement, allocate
f310: 0a 2a 2a 20 61 6e 64 20 70 6f 70 75 6c 61 74 65  .** and populate
f320: 20 74 68 65 20 53 68 65 6c 6c 53 74 61 74 65 2e   the ShellState.
f330: 61 69 49 6e 64 65 6e 74 5b 5d 20 61 72 72 61 79  aiIndent[] array
f340: 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
f350: 20 6f 66 0a 2a 2a 20 73 70 61 63 65 73 20 65 61   of.** spaces ea
f360: 63 68 20 6f 70 63 6f 64 65 20 73 68 6f 75 6c 64  ch opcode should
f370: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 65 66   be indented bef
f380: 6f 72 65 20 69 74 20 69 73 20 6f 75 74 70 75 74  ore it is output
f390: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 64 65  ..**.** The inde
f3a0: 6e 74 69 6e 67 20 72 75 6c 65 73 20 61 72 65 3a  nting rules are:
f3b0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 46 6f 72  .**.**     * For
f3c0: 20 65 61 63 68 20 22 4e 65 78 74 22 2c 20 22 50   each "Next", "P
f3d0: 72 65 76 22 2c 20 22 56 4e 65 78 74 22 20 6f 72  rev", "VNext" or
f3e0: 20 22 56 50 72 65 76 22 20 69 6e 73 74 72 75 63   "VPrev" instruc
f3f0: 74 69 6f 6e 2c 20 69 6e 64 65 6e 74 0a 2a 2a 20  tion, indent.** 
f400: 20 20 20 20 20 20 61 6c 6c 20 6f 70 63 6f 64 65        all opcode
f410: 73 20 74 68 61 74 20 6f 63 63 75 72 20 62 65 74  s that occur bet
f420: 77 65 65 6e 20 74 68 65 20 70 32 20 6a 75 6d 70  ween the p2 jump
f430: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 61 6e 64   destination and
f440: 20 74 68 65 20 6f 70 63 6f 64 65 0a 2a 2a 20 20   the opcode.**  
f450: 20 20 20 20 20 69 74 73 65 6c 66 20 62 79 20 32       itself by 2
f460: 20 73 70 61 63 65 73 2e 0a 2a 2a 0a 2a 2a 20 20   spaces..**.**  
f470: 20 20 20 2a 20 46 6f 72 20 65 61 63 68 20 22 47     * For each "G
f480: 6f 74 6f 22 2c 20 69 66 20 74 68 65 20 6a 75 6d  oto", if the jum
f490: 70 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 73  p destination is
f4a0: 20 65 61 72 6c 69 65 72 20 69 6e 20 74 68 65 20   earlier in the 
f4b0: 70 72 6f 67 72 61 6d 0a 2a 2a 20 20 20 20 20 20  program.**      
f4c0: 20 61 6e 64 20 65 6e 64 73 20 6f 6e 20 6f 6e 65   and ends on one
f4d0: 20 6f 66 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20   of:.**         
f4e0: 20 59 69 65 6c 64 20 20 53 65 65 6b 47 74 20 20   Yield  SeekGt  
f4f0: 53 65 65 6b 4c 74 20 20 52 6f 77 53 65 74 52 65  SeekLt  RowSetRe
f500: 61 64 20 20 52 65 77 69 6e 64 0a 2a 2a 20 20 20  ad  Rewind.**   
f510: 20 20 20 20 6f 72 20 69 66 20 74 68 65 20 50 31      or if the P1
f520: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6f 6e   parameter is on
f530: 65 20 69 6e 73 74 65 61 64 20 6f 66 20 7a 65 72  e instead of zer
f540: 6f 2c 0a 2a 2a 20 20 20 20 20 20 20 74 68 65 6e  o,.**       then
f550: 20 69 6e 64 65 6e 74 20 61 6c 6c 20 6f 70 63 6f   indent all opco
f560: 64 65 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  des between the 
f570: 65 61 72 6c 69 65 72 20 69 6e 73 74 72 75 63 74  earlier instruct
f580: 69 6f 6e 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64  ion.**       and
f590: 20 22 47 6f 74 6f 22 20 62 79 20 32 20 73 70 61   "Goto" by 2 spa
f5a0: 63 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ces..*/.static v
f5b0: 6f 69 64 20 65 78 70 6c 61 69 6e 5f 64 61 74 61  oid explain_data
f5c0: 5f 70 72 65 70 61 72 65 28 53 68 65 6c 6c 53 74  _prepare(ShellSt
f5d0: 61 74 65 20 2a 70 2c 20 73 71 6c 69 74 65 33 5f  ate *p, sqlite3_
f5e0: 73 74 6d 74 20 2a 70 53 71 6c 29 7b 0a 20 20 63  stmt *pSql){.  c
f5f0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b  onst char *zSql;
f600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f610: 2a 20 54 68 65 20 74 65 78 74 20 6f 66 20 74 68  * The text of th
f620: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
f630: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
f640: 2a 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *z;             
f650: 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
f660: 63 68 65 63 6b 20 69 66 20 74 68 69 73 20 69 73  check if this is
f670: 20 61 6e 20 45 58 50 4c 41 49 4e 20 2a 2f 0a 20   an EXPLAIN */. 
f680: 20 69 6e 74 20 2a 61 62 59 69 65 6c 64 20 3d 20   int *abYield = 
f690: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
f6a0: 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 70 20 69   /* True if op i
f6b0: 73 20 61 6e 20 4f 50 5f 59 69 65 6c 64 20 2a 2f  s an OP_Yield */
f6c0: 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20  .  int nAlloc = 
f6d0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
f6e0: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
f6f0: 73 69 7a 65 20 6f 66 20 70 2d 3e 61 69 49 6e 64  size of p->aiInd
f700: 65 6e 74 5b 5d 2c 20 61 62 59 69 65 6c 64 20 2a  ent[], abYield *
f710: 2f 0a 20 20 69 6e 74 20 69 4f 70 3b 20 20 20 20  /.  int iOp;    
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f730: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
f740: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 2d 3e  operation in p->
f750: 61 69 49 6e 64 65 6e 74 5b 5d 20 2a 2f 0a 0a 20  aiIndent[] */.. 
f760: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 4e   const char *azN
f770: 65 78 74 5b 5d 20 3d 20 7b 20 22 4e 65 78 74 22  ext[] = { "Next"
f780: 2c 20 22 50 72 65 76 22 2c 20 22 56 50 72 65 76  , "Prev", "VPrev
f790: 22 2c 20 22 56 4e 65 78 74 22 2c 20 22 53 6f 72  ", "VNext", "Sor
f7a0: 74 65 72 4e 65 78 74 22 2c 0a 20 20 20 20 20 20  terNext",.      
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 20 20 20 20 20 22 4e 65 78 74 49 66 4f 70 65 6e       "NextIfOpen
f7d0: 22 2c 20 22 50 72 65 76 49 66 4f 70 65 6e 22 2c  ", "PrevIfOpen",
f7e0: 20 30 20 7d 3b 0a 20 20 63 6f 6e 73 74 20 63 68   0 };.  const ch
f7f0: 61 72 20 2a 61 7a 59 69 65 6c 64 5b 5d 20 3d 20  ar *azYield[] = 
f800: 7b 20 22 59 69 65 6c 64 22 2c 20 22 53 65 65 6b  { "Yield", "Seek
f810: 4c 54 22 2c 20 22 53 65 65 6b 47 54 22 2c 20 22  LT", "SeekGT", "
f820: 52 6f 77 53 65 74 52 65 61 64 22 2c 0a 20 20 20  RowSetRead",.   
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f840: 20 20 20 20 20 20 20 20 20 22 52 65 77 69 6e 64           "Rewind
f850: 22 2c 20 30 20 7d 3b 0a 20 20 63 6f 6e 73 74 20  ", 0 };.  const 
f860: 63 68 61 72 20 2a 61 7a 47 6f 74 6f 5b 5d 20 3d  char *azGoto[] =
f870: 20 7b 20 22 47 6f 74 6f 22 2c 20 30 20 7d 3b 0a   { "Goto", 0 };.
f880: 0a 20 20 2f 2a 20 54 72 79 20 74 6f 20 66 69 67  .  /* Try to fig
f890: 75 72 65 20 6f 75 74 20 69 66 20 74 68 69 73 20  ure out if this 
f8a0: 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 45 58 50  is really an EXP
f8b0: 4c 41 49 4e 20 73 74 61 74 65 6d 65 6e 74 2e 20  LAIN statement. 
f8c0: 49 66 20 74 68 69 73 0a 20 20 2a 2a 20 63 61 6e  If this.  ** can
f8d0: 6e 6f 74 20 62 65 20 76 65 72 69 66 69 65 64 2c  not be verified,
f8e0: 20 72 65 74 75 72 6e 20 65 61 72 6c 79 2e 20 20   return early.  
f8f0: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
f900: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53  _column_count(pS
f910: 71 6c 29 21 3d 38 20 29 7b 0a 20 20 20 20 70 2d  ql)!=8 ){.    p-
f920: 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65  >cMode = p->mode
f930: 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  ;.    return;.  
f940: 7d 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74  }.  zSql = sqlit
f950: 65 33 5f 73 71 6c 28 70 53 71 6c 29 3b 0a 20 20  e3_sql(pSql);.  
f960: 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 20 72 65  if( zSql==0 ) re
f970: 74 75 72 6e 3b 0a 20 20 66 6f 72 28 7a 3d 7a 53  turn;.  for(z=zS
f980: 71 6c 3b 20 2a 7a 3d 3d 27 20 27 20 7c 7c 20 2a  ql; *z==' ' || *
f990: 7a 3d 3d 27 5c 74 27 20 7c 7c 20 2a 7a 3d 3d 27  z=='\t' || *z=='
f9a0: 5c 6e 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 66 27 20  \n' || *z=='\f' 
f9b0: 7c 7c 20 2a 7a 3d 3d 27 5c 72 27 3b 20 7a 2b 2b  || *z=='\r'; z++
f9c0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
f9d0: 5f 73 74 72 6e 69 63 6d 70 28 7a 2c 20 22 65 78  _strnicmp(z, "ex
f9e0: 70 6c 61 69 6e 22 2c 20 37 29 20 29 7b 0a 20 20  plain", 7) ){.  
f9f0: 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e    p->cMode = p->
fa00: 6d 6f 64 65 3b 0a 20 20 20 20 72 65 74 75 72 6e  mode;.    return
fa10: 3b 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 69 4f 70  ;.  }..  for(iOp
fa20: 3d 30 3b 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d  =0; SQLITE_ROW==
fa30: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 71  sqlite3_step(pSq
fa40: 6c 29 3b 20 69 4f 70 2b 2b 29 7b 0a 20 20 20 20  l); iOp++){.    
fa50: 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 69  int i;.    int i
fa60: 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 5f 63  Addr = sqlite3_c
fa70: 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20  olumn_int(pSql, 
fa80: 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  0);.    const ch
fa90: 61 72 20 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73 74  ar *zOp = (const
faa0: 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
fab0: 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c  olumn_text(pSql,
fac0: 20 31 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74   1);..    /* Set
fad0: 20 70 32 20 74 6f 20 74 68 65 20 50 32 20 66 69   p2 to the P2 fi
fae0: 65 6c 64 20 6f 66 20 74 68 65 20 63 75 72 72 65  eld of the curre
faf0: 6e 74 20 6f 70 63 6f 64 65 2e 20 54 68 65 6e 2c  nt opcode. Then,
fb00: 20 61 73 73 75 6d 69 6e 67 20 74 68 61 74 0a 20   assuming that. 
fb10: 20 20 20 2a 2a 20 70 32 20 69 73 20 61 6e 20 69     ** p2 is an i
fb20: 6e 73 74 72 75 63 74 69 6f 6e 20 61 64 64 72 65  nstruction addre
fb30: 73 73 2c 20 73 65 74 20 76 61 72 69 61 62 6c 65  ss, set variable
fb40: 20 70 32 6f 70 20 74 6f 20 74 68 65 20 69 6e 64   p2op to the ind
fb50: 65 78 20 6f 66 20 74 68 61 74 0a 20 20 20 20 2a  ex of that.    *
fb60: 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  * instruction in
fb70: 20 74 68 65 20 61 69 49 6e 64 65 6e 74 5b 5d 20   the aiIndent[] 
fb80: 61 72 72 61 79 2e 20 70 32 20 61 6e 64 20 70 32  array. p2 and p2
fb90: 6f 70 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  op may be differ
fba0: 65 6e 74 20 69 66 0a 20 20 20 20 2a 2a 20 74 68  ent if.    ** th
fbb0: 65 20 63 75 72 72 65 6e 74 20 69 6e 73 74 72 75  e current instru
fbc0: 63 74 69 6f 6e 20 69 73 20 70 61 72 74 20 6f 66  ction is part of
fbd0: 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 67   a sub-program g
fbe0: 65 6e 65 72 61 74 65 64 20 62 79 20 61 6e 0a 20  enerated by an. 
fbf0: 20 20 20 2a 2a 20 53 51 4c 20 74 72 69 67 67 65     ** SQL trigge
fc00: 72 20 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79  r or foreign key
fc10: 2e 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 70 32  .  */.    int p2
fc20: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
fc30: 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 33 29 3b 0a  n_int(pSql, 3);.
fc40: 20 20 20 20 69 6e 74 20 70 32 6f 70 20 3d 20 28      int p2op = (
fc50: 70 32 20 2b 20 28 69 4f 70 2d 69 41 64 64 72 29  p2 + (iOp-iAddr)
fc60: 29 3b 0a 0a 20 20 20 20 2f 2a 20 47 72 6f 77 20  );..    /* Grow 
fc70: 74 68 65 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20  the p->aiIndent 
fc80: 61 72 72 61 79 20 61 73 20 72 65 71 75 69 72 65  array as require
fc90: 64 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 4f 70  d */.    if( iOp
fca0: 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  >=nAlloc ){.    
fcb0: 20 20 69 66 28 20 69 4f 70 3d 3d 30 20 29 7b 0a    if( iOp==0 ){.
fcc0: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 66 75          /* Do fu
fcd0: 72 74 68 65 72 20 76 65 72 66 69 63 61 74 69 6f  rther verficatio
fce0: 6e 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  n that this is e
fcf0: 78 70 6c 61 69 6e 20 6f 75 74 70 75 74 2e 20 20  xplain output.  
fd00: 41 62 6f 72 74 20 69 66 0a 20 20 20 20 20 20 20  Abort if.       
fd10: 20 2a 2a 20 69 74 20 69 73 20 6e 6f 74 20 2a 2f   ** it is not */
fd20: 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20  .        static 
fd30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 65 78 70 6c  const char *expl
fd40: 61 69 6e 43 6f 6c 73 5b 5d 20 3d 20 7b 0a 20 20  ainCols[] = {.  
fd50: 20 20 20 20 20 20 20 20 20 22 61 64 64 72 22 2c           "addr",
fd60: 20 22 6f 70 63 6f 64 65 22 2c 20 22 70 31 22 2c   "opcode", "p1",
fd70: 20 22 70 32 22 2c 20 22 70 33 22 2c 20 22 70 34   "p2", "p3", "p4
fd80: 22 2c 20 22 70 35 22 2c 20 22 63 6f 6d 6d 65 6e  ", "p5", "commen
fd90: 74 22 20 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e  t" };.        in
fda0: 74 20 6a 6a 3b 0a 20 20 20 20 20 20 20 20 66 6f  t jj;.        fo
fdb0: 72 28 6a 6a 3d 30 3b 20 6a 6a 3c 41 72 72 61 79  r(jj=0; jj<Array
fdc0: 53 69 7a 65 28 65 78 70 6c 61 69 6e 43 6f 6c 73  Size(explainCols
fdd0: 29 3b 20 6a 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ); jj++){.      
fde0: 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 73      if( strcmp(s
fdf0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
fe00: 6d 65 28 70 53 71 6c 2c 6a 6a 29 2c 65 78 70 6c  me(pSql,jj),expl
fe10: 61 69 6e 43 6f 6c 73 5b 6a 6a 5d 29 21 3d 30 20  ainCols[jj])!=0 
fe20: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
fe30: 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64  ->cMode = p->mod
fe40: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  e;.            s
fe50: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 53 71  qlite3_reset(pSq
fe60: 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  l);.            
fe70: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
fe80: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
fe90: 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 41 6c 6c      }.      nAll
fea0: 6f 63 20 2b 3d 20 31 30 30 3b 0a 20 20 20 20 20  oc += 100;.     
feb0: 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20 3d 20 28   p->aiIndent = (
fec0: 69 6e 74 2a 29 73 71 6c 69 74 65 33 5f 72 65 61  int*)sqlite3_rea
fed0: 6c 6c 6f 63 36 34 28 70 2d 3e 61 69 49 6e 64 65  lloc64(p->aiInde
fee0: 6e 74 2c 20 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f  nt, nAlloc*sizeo
fef0: 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20 20 61  f(int));.      a
ff00: 62 59 69 65 6c 64 20 3d 20 28 69 6e 74 2a 29 73  bYield = (int*)s
ff10: 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 36 34  qlite3_realloc64
ff20: 28 61 62 59 69 65 6c 64 2c 20 6e 41 6c 6c 6f 63  (abYield, nAlloc
ff30: 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 20  *sizeof(int));. 
ff40: 20 20 20 7d 0a 20 20 20 20 61 62 59 69 65 6c 64     }.    abYield
ff50: 5b 69 4f 70 5d 20 3d 20 73 74 72 5f 69 6e 5f 61  [iOp] = str_in_a
ff60: 72 72 61 79 28 7a 4f 70 2c 20 61 7a 59 69 65 6c  rray(zOp, azYiel
ff70: 64 29 3b 0a 20 20 20 20 70 2d 3e 61 69 49 6e 64  d);.    p->aiInd
ff80: 65 6e 74 5b 69 4f 70 5d 20 3d 20 30 3b 0a 20 20  ent[iOp] = 0;.  
ff90: 20 20 70 2d 3e 6e 49 6e 64 65 6e 74 20 3d 20 69    p->nIndent = i
ffa0: 4f 70 2b 31 3b 0a 0a 20 20 20 20 69 66 28 20 73  Op+1;..    if( s
ffb0: 74 72 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c  tr_in_array(zOp,
ffc0: 20 61 7a 4e 65 78 74 29 20 29 7b 0a 20 20 20 20   azNext) ){.    
ffd0: 20 20 66 6f 72 28 69 3d 70 32 6f 70 3b 20 69 3c    for(i=p2op; i<
ffe0: 69 4f 70 3b 20 69 2b 2b 29 20 70 2d 3e 61 69 49  iOp; i++) p->aiI
fff0: 6e 64 65 6e 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20  ndent[i] += 2;. 
10000 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72     }.    if( str
10010 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c 20 61  _in_array(zOp, a
10020 7a 47 6f 74 6f 29 20 26 26 20 70 32 6f 70 3c 70  zGoto) && p2op<p
10030 2d 3e 6e 49 6e 64 65 6e 74 0a 20 20 20 20 20 26  ->nIndent.     &
10040 26 20 28 61 62 59 69 65 6c 64 5b 70 32 6f 70 5d  & (abYield[p2op]
10050 20 7c 7c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   || sqlite3_colu
10060 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 32 29 29  mn_int(pSql, 2))
10070 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 66 6f  .    ){.      fo
10080 72 28 69 3d 70 32 6f 70 3b 20 69 3c 69 4f 70 3b  r(i=p2op; i<iOp;
10090 20 69 2b 2b 29 20 70 2d 3e 61 69 49 6e 64 65 6e   i++) p->aiInden
100a0 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20 20 20 20 7d  t[i] += 2;.    }
100b0 0a 20 20 7d 0a 0a 20 20 70 2d 3e 69 49 6e 64 65  .  }..  p->iInde
100c0 6e 74 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  nt = 0;.  sqlite
100d0 33 5f 66 72 65 65 28 61 62 59 69 65 6c 64 29 3b  3_free(abYield);
100e0 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
100f0 28 70 53 71 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  (pSql);.}../*.**
10100 20 46 72 65 65 20 74 68 65 20 61 72 72 61 79 20   Free the array 
10110 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 65 78 70  allocated by exp
10120 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72  lain_data_prepar
10130 65 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  e()..*/.static v
10140 6f 69 64 20 65 78 70 6c 61 69 6e 5f 64 61 74 61  oid explain_data
10150 5f 64 65 6c 65 74 65 28 53 68 65 6c 6c 53 74 61  _delete(ShellSta
10160 74 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65  te *p){.  sqlite
10170 33 5f 66 72 65 65 28 70 2d 3e 61 69 49 6e 64 65  3_free(p->aiInde
10180 6e 74 29 3b 0a 20 20 70 2d 3e 61 69 49 6e 64 65  nt);.  p->aiInde
10190 6e 74 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 49 6e  nt = 0;.  p->nIn
101a0 64 65 6e 74 20 3d 20 30 3b 0a 20 20 70 2d 3e 69  dent = 0;.  p->i
101b0 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 7d 0a 0a 2f  Indent = 0;.}../
101c0 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 61 6e 64  *.** Disable and
101d0 20 72 65 73 74 6f 72 65 20 2e 77 68 65 72 65 74   restore .wheret
101e0 72 61 63 65 20 61 6e 64 20 2e 73 65 6c 65 63 74  race and .select
101f0 74 72 61 63 65 20 73 65 74 74 69 6e 67 73 2e 0a  trace settings..
10200 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
10210 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
10220 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
10230 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
10240 45 29 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  E).extern int sq
10250 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
10260 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 73 61 76  ;.static int sav
10270 65 64 53 65 6c 65 63 74 54 72 61 63 65 3b 0a 23  edSelectTrace;.#
10280 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
10290 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
102a0 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
102b0 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45 54 52  E_ENABLE_WHERETR
102c0 41 43 45 29 0a 65 78 74 65 72 6e 20 69 6e 74 20  ACE).extern int 
102d0 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61 63  sqlite3WhereTrac
102e0 65 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 73 61  e;.static int sa
102f0 76 65 64 57 68 65 72 65 54 72 61 63 65 3b 0a 23  vedWhereTrace;.#
10300 65 6e 64 69 66 0a 73 74 61 74 69 63 20 76 6f 69  endif.static voi
10310 64 20 64 69 73 61 62 6c 65 5f 64 65 62 75 67 5f  d disable_debug_
10320 74 72 61 63 65 5f 6d 6f 64 65 73 28 76 6f 69 64  trace_modes(void
10330 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ){.#if defined(S
10340 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
10350 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
10360 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
10370 45 29 0a 20 20 73 61 76 65 64 53 65 6c 65 63 74  E).  savedSelect
10380 54 72 61 63 65 20 3d 20 73 71 6c 69 74 65 33 53  Trace = sqlite3S
10390 65 6c 65 63 74 54 72 61 63 65 3b 0a 20 20 73 71  electTrace;.  sq
103a0 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
103b0 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 23 69 66   = 0;.#endif.#if
103c0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
103d0 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
103e0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
103f0 57 48 45 52 45 54 52 41 43 45 29 0a 20 20 73 61  WHERETRACE).  sa
10400 76 65 64 57 68 65 72 65 54 72 61 63 65 20 3d 20  vedWhereTrace = 
10410 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61 63  sqlite3WhereTrac
10420 65 3b 0a 20 20 73 71 6c 69 74 65 33 57 68 65 72  e;.  sqlite3Wher
10430 65 54 72 61 63 65 20 3d 20 30 3b 0a 23 65 6e 64  eTrace = 0;.#end
10440 69 66 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  if.}.static void
10450 20 72 65 73 74 6f 72 65 5f 64 65 62 75 67 5f 74   restore_debug_t
10460 72 61 63 65 5f 6d 6f 64 65 73 28 76 6f 69 64 29  race_modes(void)
10470 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  {.#if defined(SQ
10480 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
10490 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
104a0 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45  ABLE_SELECTTRACE
104b0 29 0a 20 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ).  sqlite3Selec
104c0 74 54 72 61 63 65 20 3d 20 73 61 76 65 64 53 65  tTrace = savedSe
104d0 6c 65 63 74 54 72 61 63 65 3b 0a 23 65 6e 64 69  lectTrace;.#endi
104e0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
104f0 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
10500 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
10510 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45 29  ABLE_WHERETRACE)
10520 0a 20 20 73 71 6c 69 74 65 33 57 68 65 72 65 54  .  sqlite3WhereT
10530 72 61 63 65 20 3d 20 73 61 76 65 64 57 68 65 72  race = savedWher
10540 65 54 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 7d  eTrace;.#endif.}
10550 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 61 20 70 72  ../*.** Run a pr
10560 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
10570 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
10580 65 78 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74  exec_prepared_st
10590 6d 74 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65  mt(.  ShellState
105a0 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20 20   *pArg,         
105b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105c0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
105d0 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74 65 20  r to ShellState 
105e0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  */.  sqlite3_stm
105f0 74 20 2a 70 53 74 6d 74 2c 20 20 20 20 20 20 20  t *pStmt,       
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10610 20 20 20 20 20 20 2f 2a 20 53 74 61 74 6d 65 6e        /* Statmen
10620 74 20 74 6f 20 72 75 6e 20 2a 2f 0a 20 20 69 6e  t to run */.  in
10630 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76  t (*xCallback)(v
10640 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 2a 2a 2c  oid*,int,char**,
10650 63 68 61 72 2a 2a 2c 69 6e 74 2a 29 20 20 20 2f  char**,int*)   /
10660 2a 20 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  * Callback funct
10670 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ion */.){.  int 
10680 72 63 3b 0a 0a 20 20 2f 2a 20 70 65 72 66 6f 72  rc;..  /* perfor
10690 6d 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70  m the first step
106a0 2e 20 20 74 68 69 73 20 77 69 6c 6c 20 74 65 6c  .  this will tel
106b0 6c 20 75 73 20 69 66 20 77 65 0a 20 20 2a 2a 20  l us if we.  ** 
106c0 68 61 76 65 20 61 20 72 65 73 75 6c 74 20 73 65  have a result se
106d0 74 20 6f 72 20 6e 6f 74 20 61 6e 64 20 68 6f 77  t or not and how
106e0 20 77 69 64 65 20 69 74 20 69 73 2e 0a 20 20 2a   wide it is..  *
106f0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
10700 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20  _step(pStmt);.  
10710 2f 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20  /* if we have a 
10720 72 65 73 75 6c 74 20 73 65 74 2e 2e 2e 20 2a 2f  result set... */
10730 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 52 4f  .  if( SQLITE_RO
10740 57 20 3d 3d 20 72 63 20 29 7b 0a 20 20 20 20 2f  W == rc ){.    /
10750 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20 63  * if we have a c
10760 61 6c 6c 62 61 63 6b 2e 2e 2e 20 2a 2f 0a 20 20  allback... */.  
10770 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63 6b 20    if( xCallback 
10780 29 7b 0a 20 20 20 20 20 20 2f 2a 20 61 6c 6c 6f  ){.      /* allo
10790 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 20 63  cate space for c
107a0 6f 6c 20 6e 61 6d 65 20 70 74 72 2c 20 76 61 6c  ol name ptr, val
107b0 75 65 20 70 74 72 2c 20 61 6e 64 20 74 79 70 65  ue ptr, and type
107c0 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 6e 43   */.      int nC
107d0 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ol = sqlite3_col
107e0 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  umn_count(pStmt)
107f0 3b 0a 20 20 20 20 20 20 76 6f 69 64 20 2a 70 44  ;.      void *pD
10800 61 74 61 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61  ata = sqlite3_ma
10810 6c 6c 6f 63 36 34 28 33 2a 6e 43 6f 6c 2a 73 69  lloc64(3*nCol*si
10820 7a 65 6f 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  zeof(const char*
10830 29 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 69 66  ) + 1);.      if
10840 28 20 21 70 44 61 74 61 20 29 7b 0a 20 20 20 20  ( !pData ){.    
10850 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
10860 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 7d 65 6c  NOMEM;.      }el
10870 73 65 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72  se{.        char
10880 20 2a 2a 61 7a 43 6f 6c 73 20 3d 20 28 63 68 61   **azCols = (cha
10890 72 20 2a 2a 29 70 44 61 74 61 3b 20 20 20 20 20  r **)pData;     
108a0 20 2f 2a 20 4e 61 6d 65 73 20 6f 66 20 72 65 73   /* Names of res
108b0 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  ult columns */. 
108c0 20 20 20 20 20 20 20 63 68 61 72 20 2a 2a 61 7a         char **az
108d0 56 61 6c 73 20 3d 20 26 61 7a 43 6f 6c 73 5b 6e  Vals = &azCols[n
108e0 43 6f 6c 5d 3b 20 20 20 20 20 20 20 2f 2a 20 52  Col];       /* R
108f0 65 73 75 6c 74 73 20 2a 2f 0a 20 20 20 20 20 20  esults */.      
10900 20 20 69 6e 74 20 2a 61 69 54 79 70 65 73 20 3d    int *aiTypes =
10910 20 28 69 6e 74 20 2a 29 26 61 7a 56 61 6c 73 5b   (int *)&azVals[
10920 6e 43 6f 6c 5d 3b 20 2f 2a 20 52 65 73 75 6c 74  nCol]; /* Result
10930 20 74 79 70 65 73 20 2a 2f 0a 20 20 20 20 20 20   types */.      
10940 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20 20 20    int i, x;.    
10950 20 20 20 20 61 73 73 65 72 74 28 73 69 7a 65 6f      assert(sizeo
10960 66 28 69 6e 74 29 20 3c 3d 20 73 69 7a 65 6f 66  f(int) <= sizeof
10970 28 63 68 61 72 20 2a 29 29 3b 0a 20 20 20 20 20  (char *));.     
10980 20 20 20 2f 2a 20 73 61 76 65 20 6f 66 66 20 70     /* save off p
10990 74 72 73 20 74 6f 20 63 6f 6c 75 6d 6e 20 6e 61  trs to column na
109a0 6d 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  mes */.        f
109b0 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20  or(i=0; i<nCol; 
109c0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
109d0 61 7a 43 6f 6c 73 5b 69 5d 20 3d 20 28 63 68 61  azCols[i] = (cha
109e0 72 20 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  r *)sqlite3_colu
109f0 6d 6e 5f 6e 61 6d 65 28 70 53 74 6d 74 2c 20 69  mn_name(pStmt, i
10a00 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
10a10 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
10a20 20 20 20 2f 2a 20 65 78 74 72 61 63 74 20 74 68     /* extract th
10a30 65 20 64 61 74 61 20 61 6e 64 20 64 61 74 61 20  e data and data 
10a40 74 79 70 65 73 20 2a 2f 0a 20 20 20 20 20 20 20  types */.       
10a50 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43     for(i=0; i<nC
10a60 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; i++){.      
10a70 20 20 20 20 20 20 61 69 54 79 70 65 73 5b 69 5d        aiTypes[i]
10a80 20 3d 20 78 20 3d 20 73 71 6c 69 74 65 33 5f 63   = x = sqlite3_c
10a90 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74  olumn_type(pStmt
10aa0 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , i);.          
10ab0 20 20 69 66 28 20 78 3d 3d 53 51 4c 49 54 45 5f    if( x==SQLITE_
10ac0 42 4c 4f 42 20 26 26 20 70 41 72 67 20 26 26 20  BLOB && pArg && 
10ad0 70 41 72 67 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44  pArg->cMode==MOD
10ae0 45 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  E_Insert ){.    
10af0 20 20 20 20 20 20 20 20 20 20 61 7a 56 61 6c 73            azVals
10b00 5b 69 5d 20 3d 20 22 22 3b 0a 20 20 20 20 20 20  [i] = "";.      
10b10 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
10b20 20 20 20 20 20 20 20 20 20 20 20 61 7a 56 61 6c             azVal
10b30 73 5b 69 5d 20 3d 20 28 63 68 61 72 2a 29 73 71  s[i] = (char*)sq
10b40 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
10b50 74 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20  t(pStmt, i);.   
10b60 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
10b70 20 20 20 20 20 20 20 69 66 28 20 21 61 7a 56 61         if( !azVa
10b80 6c 73 5b 69 5d 20 26 26 20 28 61 69 54 79 70 65  ls[i] && (aiType
10b90 73 5b 69 5d 21 3d 53 51 4c 49 54 45 5f 4e 55 4c  s[i]!=SQLITE_NUL
10ba0 4c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  L) ){.          
10bb0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
10bc0 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 20 20 20  NOMEM;.         
10bd0 20 20 20 20 20 62 72 65 61 6b 3b 20 2f 2a 20 66       break; /* f
10be0 72 6f 6d 20 66 6f 72 20 2a 2f 0a 20 20 20 20 20  rom for */.     
10bf0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
10c00 20 20 20 7d 20 2f 2a 20 65 6e 64 20 66 6f 72 20     } /* end for 
10c10 2a 2f 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  */..          /*
10c20 20 69 66 20 64 61 74 61 20 61 6e 64 20 74 79 70   if data and typ
10c30 65 73 20 65 78 74 72 61 63 74 65 64 20 73 75 63  es extracted suc
10c40 63 65 73 73 66 75 6c 6c 79 2e 2e 2e 20 2a 2f 0a  cessfully... */.
10c50 20 20 20 20 20 20 20 20 20 20 69 66 28 20 53 51            if( SQ
10c60 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29  LITE_ROW == rc )
10c70 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {.            /*
10c80 20 63 61 6c 6c 20 74 68 65 20 73 75 70 70 6c 69   call the suppli
10c90 65 64 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ed callback with
10ca0 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
10cb0 64 61 74 61 20 2a 2f 0a 20 20 20 20 20 20 20 20  data */.        
10cc0 20 20 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63      if( xCallbac
10cd0 6b 28 70 41 72 67 2c 20 6e 43 6f 6c 2c 20 61 7a  k(pArg, nCol, az
10ce0 56 61 6c 73 2c 20 61 7a 43 6f 6c 73 2c 20 61 69  Vals, azCols, ai
10cf0 54 79 70 65 73 29 20 29 7b 0a 20 20 20 20 20 20  Types) ){.      
10d00 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
10d10 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 20  ITE_ABORT;.     
10d20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
10d30 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
10d40 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
10d50 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  tmt);.          
10d60 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a    }.          }.
10d70 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 28          } while(
10d80 20 53 51 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72   SQLITE_ROW == r
10d90 63 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  c );.        sql
10da0 69 74 65 33 5f 66 72 65 65 28 70 44 61 74 61 29  ite3_free(pData)
10db0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
10dc0 6c 73 65 7b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  lse{.      do{. 
10dd0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
10de0 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b  te3_step(pStmt);
10df0 0a 20 20 20 20 20 20 7d 20 77 68 69 6c 65 28 20  .      } while( 
10e00 72 63 20 3d 3d 20 53 51 4c 49 54 45 5f 52 4f 57  rc == SQLITE_ROW
10e10 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a   );.    }.  }.}.
10e20 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
10e30 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 73 65   statement or se
10e40 74 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  t of statements.
10e50 20 20 50 72 69 6e 74 0a 2a 2a 20 61 6e 79 20 72    Print.** any r
10e60 65 73 75 6c 74 20 72 6f 77 73 2f 63 6f 6c 75 6d  esult rows/colum
10e70 6e 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ns depending on 
10e80 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 64 65  the current mode
10e90 0a 2a 2a 20 73 65 74 20 76 69 61 20 74 68 65 20  .** set via the 
10ea0 73 75 70 70 6c 69 65 64 20 63 61 6c 6c 62 61 63  supplied callbac
10eb0 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  k..**.** This is
10ec0 20 76 65 72 79 20 73 69 6d 69 6c 61 72 20 74 6f   very similar to
10ed0 20 53 51 4c 69 74 65 27 73 20 62 75 69 6c 74 2d   SQLite's built-
10ee0 69 6e 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  in sqlite3_exec(
10ef0 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 65 78  ).** function ex
10f00 63 65 70 74 20 69 74 20 74 61 6b 65 73 20 61 20  cept it takes a 
10f10 73 6c 69 67 68 74 6c 79 20 64 69 66 66 65 72 65  slightly differe
10f20 6e 74 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 61  nt callback.** a
10f30 6e 64 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  nd callback data
10f40 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
10f50 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 65  atic int shell_e
10f60 78 65 63 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  xec(.  sqlite3 *
10f70 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
10f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f90 20 2f 2a 20 41 6e 20 6f 70 65 6e 20 64 61 74 61   /* An open data
10fa0 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
10fb0 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20  char *zSql,     
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fd0 20 20 20 20 2f 2a 20 53 51 4c 20 74 6f 20 62 65      /* SQL to be
10fe0 20 65 76 61 6c 75 61 74 65 64 20 2a 2f 0a 20 20   evaluated */.  
10ff0 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29  int (*xCallback)
11000 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 2a  (void*,int,char*
11010 2a 2c 63 68 61 72 2a 2a 2c 69 6e 74 2a 29 2c 20  *,char**,int*), 
11020 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 75    /* Callback fu
11030 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20  nction */.      
11040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 20 20 20 20 20 2f 2a 20 28 6e 6f 74 20 74 68        /* (not th
11070 65 20 73 61 6d 65 20 61 73 20 73 71 6c 69 74 65  e same as sqlite
11080 33 5f 65 78 65 63 29 20 2a 2f 0a 20 20 53 68 65  3_exec) */.  She
11090 6c 6c 53 74 61 74 65 20 2a 70 41 72 67 2c 20 20  llState *pArg,  
110a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110b0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
110c0 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74 65 20  r to ShellState 
110d0 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
110e0 72 4d 73 67 20 20 20 20 20 20 20 20 20 20 20 20  rMsg            
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11100 2a 20 45 72 72 6f 72 20 6d 73 67 20 77 72 69 74  * Error msg writ
11110 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20  ten here */.){. 
11120 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
11130 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20 20 20 20  Stmt = NULL;    
11140 20 2f 2a 20 53 74 61 74 65 6d 65 6e 74 20 74 6f   /* Statement to
11150 20 65 78 65 63 75 74 65 2e 20 2a 2f 0a 20 20 69   execute. */.  i
11160 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
11170 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  K;             /
11180 2a 20 52 65 74 75 72 6e 20 43 6f 64 65 20 2a 2f  * Return Code */
11190 0a 20 20 69 6e 74 20 72 63 32 3b 0a 20 20 63 6f  .  int rc2;.  co
111a0 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66 74 6f  nst char *zLefto
111b0 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ver;          /*
111c0 20 54 61 69 6c 20 6f 66 20 75 6e 70 72 6f 63 65   Tail of unproce
111d0 73 73 65 64 20 53 51 4c 20 2a 2f 0a 0a 20 20 69  ssed SQL */..  i
111e0 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20  f( pzErrMsg ){. 
111f0 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 4e     *pzErrMsg = N
11200 55 4c 4c 3b 0a 20 20 7d 0a 0a 20 20 77 68 69 6c  ULL;.  }..  whil
11210 65 28 20 7a 53 71 6c 5b 30 5d 20 26 26 20 28 53  e( zSql[0] && (S
11220 51 4c 49 54 45 5f 4f 4b 20 3d 3d 20 72 63 29 20  QLITE_OK == rc) 
11230 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
11240 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6d 74 53  nst char *zStmtS
11250 71 6c 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  ql;.    rc = sql
11260 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
11270 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70  db, zSql, -1, &p
11280 53 74 6d 74 2c 20 26 7a 4c 65 66 74 6f 76 65 72  Stmt, &zLeftover
11290 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  );.    if( SQLIT
112a0 45 5f 4f 4b 20 21 3d 20 72 63 20 29 7b 0a 20 20  E_OK != rc ){.  
112b0 20 20 20 20 69 66 28 20 70 7a 45 72 72 4d 73 67      if( pzErrMsg
112c0 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 70 7a 45   ){.        *pzE
112d0 72 72 4d 73 67 20 3d 20 73 61 76 65 5f 65 72 72  rrMsg = save_err
112e0 5f 6d 73 67 28 64 62 29 3b 0a 20 20 20 20 20 20  _msg(db);.      
112f0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
11300 20 20 20 69 66 28 20 21 70 53 74 6d 74 20 29 7b     if( !pStmt ){
11310 0a 20 20 20 20 20 20 20 20 2f 2a 20 74 68 69 73  .        /* this
11320 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61 20 63   happens for a c
11330 6f 6d 6d 65 6e 74 20 6f 72 20 77 68 69 74 65 2d  omment or white-
11340 73 70 61 63 65 20 2a 2f 0a 20 20 20 20 20 20 20  space */.       
11350 20 7a 53 71 6c 20 3d 20 7a 4c 65 66 74 6f 76 65   zSql = zLeftove
11360 72 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  r;.        while
11370 28 20 49 73 53 70 61 63 65 28 7a 53 71 6c 5b 30  ( IsSpace(zSql[0
11380 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20  ]) ) zSql++;.   
11390 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20       continue;. 
113a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 53 74       }.      zSt
113b0 6d 74 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f  mtSql = sqlite3_
113c0 73 71 6c 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  sql(pStmt);.    
113d0 20 20 69 66 28 20 7a 53 74 6d 74 53 71 6c 3d 3d    if( zStmtSql==
113e0 30 20 29 20 7a 53 74 6d 74 53 71 6c 20 3d 20 22  0 ) zStmtSql = "
113f0 22 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  ";.      while( 
11400 49 73 53 70 61 63 65 28 7a 53 74 6d 74 53 71 6c  IsSpace(zStmtSql
11410 5b 30 5d 29 20 29 20 7a 53 74 6d 74 53 71 6c 2b  [0]) ) zStmtSql+
11420 2b 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 73 61 76  +;..      /* sav
11430 65 20 6f 66 66 20 74 68 65 20 70 72 65 70 61 72  e off the prepar
11440 65 64 20 73 74 61 74 6d 65 6e 74 20 68 61 6e 64  ed statment hand
11450 6c 65 20 61 6e 64 20 72 65 73 65 74 20 72 6f 77  le and reset row
11460 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20   count */.      
11470 69 66 28 20 70 41 72 67 20 29 7b 0a 20 20 20 20  if( pArg ){.    
11480 20 20 20 20 70 41 72 67 2d 3e 70 53 74 6d 74 20      pArg->pStmt 
11490 3d 20 70 53 74 6d 74 3b 0a 20 20 20 20 20 20 20  = pStmt;.       
114a0 20 70 41 72 67 2d 3e 63 6e 74 20 3d 20 30 3b 0a   pArg->cnt = 0;.
114b0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
114c0 2a 20 65 63 68 6f 20 74 68 65 20 73 71 6c 20 73  * echo the sql s
114d0 74 61 74 65 6d 65 6e 74 20 69 66 20 65 63 68 6f  tatement if echo
114e0 20 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28   on */.      if(
114f0 20 70 41 72 67 20 26 26 20 53 68 65 6c 6c 48 61   pArg && ShellHa
11500 73 46 6c 61 67 28 70 41 72 67 2c 20 53 48 46 4c  sFlag(pArg, SHFL
11510 47 5f 45 63 68 6f 29 20 29 7b 0a 20 20 20 20 20  G_Echo) ){.     
11520 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
11530 41 72 67 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22  Arg->out, "%s\n"
11540 2c 20 7a 53 74 6d 74 53 71 6c 20 3f 20 7a 53 74  , zStmtSql ? zSt
11550 6d 74 53 71 6c 20 3a 20 7a 53 71 6c 29 3b 0a 20  mtSql : zSql);. 
11560 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
11570 20 53 68 6f 77 20 74 68 65 20 45 58 50 4c 41 49   Show the EXPLAI
11580 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 69 66 20  N QUERY PLAN if 
11590 2e 65 71 70 20 69 73 20 6f 6e 20 2a 2f 0a 20 20  .eqp is on */.  
115a0 20 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20      if( pArg && 
115b0 70 41 72 67 2d 3e 61 75 74 6f 45 51 50 20 26 26  pArg->autoEQP &&
115c0 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65   sqlite3_strlike
115d0 28 22 45 58 50 4c 41 49 4e 25 22 2c 7a 53 74 6d  ("EXPLAIN%",zStm
115e0 74 53 71 6c 2c 30 29 21 3d 30 20 29 7b 0a 20 20  tSql,0)!=0 ){.  
115f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74        sqlite3_st
11600 6d 74 20 2a 70 45 78 70 6c 61 69 6e 3b 0a 20 20  mt *pExplain;.  
11610 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45 51 50        char *zEQP
11620 3b 0a 20 20 20 20 20 20 20 20 64 69 73 61 62 6c  ;.        disabl
11630 65 5f 64 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f  e_debug_trace_mo
11640 64 65 73 28 29 3b 0a 20 20 20 20 20 20 20 20 7a  des();.        z
11650 45 51 50 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  EQP = sqlite3_mp
11660 72 69 6e 74 66 28 22 45 58 50 4c 41 49 4e 20 51  rintf("EXPLAIN Q
11670 55 45 52 59 20 50 4c 41 4e 20 25 73 22 2c 20 7a  UERY PLAN %s", z
11680 53 74 6d 74 53 71 6c 29 3b 0a 20 20 20 20 20 20  StmtSql);.      
11690 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
116a0 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 45  repare_v2(db, zE
116b0 51 50 2c 20 2d 31 2c 20 26 70 45 78 70 6c 61 69  QP, -1, &pExplai
116c0 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 69  n, 0);.        i
116d0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
116e0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68   ){.          wh
116f0 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65  ile( sqlite3_ste
11700 70 28 70 45 78 70 6c 61 69 6e 29 3d 3d 53 51 4c  p(pExplain)==SQL
11710 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20  ITE_ROW ){.     
11720 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
11730 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 2d 2d 45  f(pArg->out,"--E
11740 51 50 2d 2d 20 25 64 2c 22 2c 73 71 6c 69 74 65  QP-- %d,",sqlite
11750 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45 78  3_column_int(pEx
11760 70 6c 61 69 6e 2c 20 30 29 29 3b 0a 20 20 20 20  plain, 0));.    
11770 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
11780 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25 64  tf(pArg->out,"%d
11790 2c 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ,", sqlite3_colu
117a0 6d 6e 5f 69 6e 74 28 70 45 78 70 6c 61 69 6e 2c  mn_int(pExplain,
117b0 20 31 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20   1));.          
117c0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
117d0 67 2d 3e 6f 75 74 2c 22 25 64 2c 22 2c 20 73 71  g->out,"%d,", sq
117e0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
117f0 28 70 45 78 70 6c 61 69 6e 2c 20 32 29 29 3b 0a  (pExplain, 2));.
11800 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
11810 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
11820 74 2c 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65  t,"%s\n", sqlite
11830 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 45  3_column_text(pE
11840 78 70 6c 61 69 6e 2c 20 33 29 29 3b 0a 20 20 20  xplain, 3));.   
11850 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11860 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
11870 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78 70  e3_finalize(pExp
11880 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 73  lain);.        s
11890 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 51 50  qlite3_free(zEQP
118a0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
118b0 41 72 67 2d 3e 61 75 74 6f 45 51 50 3e 3d 32 20  Arg->autoEQP>=2 
118c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
118d0 41 6c 73 6f 20 64 6f 20 61 6e 20 45 58 50 4c 41  Also do an EXPLA
118e0 49 4e 20 66 6f 72 20 22 2e 65 71 70 20 66 75 6c  IN for ".eqp ful
118f0 6c 22 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20  l" mode */.     
11900 20 20 20 20 20 7a 45 51 50 20 3d 20 73 71 6c 69       zEQP = sqli
11910 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 45 58 50  te3_mprintf("EXP
11920 4c 41 49 4e 20 25 73 22 2c 20 7a 53 74 6d 74 53  LAIN %s", zStmtS
11930 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  ql);.          r
11940 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
11950 61 72 65 5f 76 32 28 64 62 2c 20 7a 45 51 50 2c  are_v2(db, zEQP,
11960 20 2d 31 2c 20 26 70 45 78 70 6c 61 69 6e 2c 20   -1, &pExplain, 
11970 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  0);.          if
11980 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
11990 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
119a0 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f 44  Arg->cMode = MOD
119b0 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20  E_Explain;.     
119c0 20 20 20 20 20 20 20 65 78 70 6c 61 69 6e 5f 64         explain_d
119d0 61 74 61 5f 70 72 65 70 61 72 65 28 70 41 72 67  ata_prepare(pArg
119e0 2c 20 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20  , pExplain);.   
119f0 20 20 20 20 20 20 20 20 20 65 78 65 63 5f 70 72           exec_pr
11a00 65 70 61 72 65 64 5f 73 74 6d 74 28 70 41 72 67  epared_stmt(pArg
11a10 2c 20 70 45 78 70 6c 61 69 6e 2c 20 78 43 61 6c  , pExplain, xCal
11a20 6c 62 61 63 6b 29 3b 0a 20 20 20 20 20 20 20 20  lback);.        
11a30 20 20 20 20 65 78 70 6c 61 69 6e 5f 64 61 74 61      explain_data
11a40 5f 64 65 6c 65 74 65 28 70 41 72 67 29 3b 0a 20  _delete(pArg);. 
11a50 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
11a60 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e       sqlite3_fin
11a70 61 6c 69 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b  alize(pExplain);
11a80 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11a90 65 33 5f 66 72 65 65 28 7a 45 51 50 29 3b 0a 20  e3_free(zEQP);. 
11aa0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11ab0 20 72 65 73 74 6f 72 65 5f 64 65 62 75 67 5f 74   restore_debug_t
11ac0 72 61 63 65 5f 6d 6f 64 65 73 28 29 3b 0a 20 20  race_modes();.  
11ad0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28      }..      if(
11ae0 20 70 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20   pArg ){.       
11af0 20 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 70   pArg->cMode = p
11b00 41 72 67 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20  Arg->mode;.     
11b10 20 20 20 69 66 28 20 70 41 72 67 2d 3e 61 75 74     if( pArg->aut
11b20 6f 45 78 70 6c 61 69 6e 0a 20 20 20 20 20 20 20  oExplain.       
11b30 20 20 26 26 20 73 71 6c 69 74 65 33 5f 63 6f 6c    && sqlite3_col
11b40 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  umn_count(pStmt)
11b50 3d 3d 38 0a 20 20 20 20 20 20 20 20 20 26 26 20  ==8.         && 
11b60 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
11b70 22 45 58 50 4c 41 49 4e 25 22 2c 20 7a 53 74 6d  "EXPLAIN%", zStm
11b80 74 53 71 6c 2c 30 29 3d 3d 30 0a 20 20 20 20 20  tSql,0)==0.     
11b90 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20     ){.          
11ba0 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f  pArg->cMode = MO
11bb0 44 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20  DE_Explain;.    
11bc0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
11bd0 2a 20 49 66 20 74 68 65 20 73 68 65 6c 6c 20 69  * If the shell i
11be0 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 22  s currently in "
11bf0 2e 65 78 70 6c 61 69 6e 22 20 6d 6f 64 65 2c 20  .explain" mode, 
11c00 67 61 74 68 65 72 20 74 68 65 20 65 78 74 72 61  gather the extra
11c10 0a 20 20 20 20 20 20 20 20 2a 2a 20 64 61 74 61  .        ** data
11c20 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 64 64   required to add
11c30 20 69 6e 64 65 6e 74 73 20 74 6f 20 74 68 65 20   indents to the 
11c40 6f 75 74 70 75 74 2e 2a 2f 0a 20 20 20 20 20 20  output.*/.      
11c50 20 20 69 66 28 20 70 41 72 67 2d 3e 63 4d 6f 64    if( pArg->cMod
11c60 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20  e==MODE_Explain 
11c70 29 7b 0a 20 20 20 20 20 20 20 20 20 20 65 78 70  ){.          exp
11c80 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72  lain_data_prepar
11c90 65 28 70 41 72 67 2c 20 70 53 74 6d 74 29 3b 0a  e(pArg, pStmt);.
11ca0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
11cb0 7d 0a 0a 20 20 20 20 20 20 65 78 65 63 5f 70 72  }..      exec_pr
11cc0 65 70 61 72 65 64 5f 73 74 6d 74 28 70 41 72 67  epared_stmt(pArg
11cd0 2c 20 70 53 74 6d 74 2c 20 78 43 61 6c 6c 62 61  , pStmt, xCallba
11ce0 63 6b 29 3b 0a 20 20 20 20 20 20 65 78 70 6c 61  ck);.      expla
11cf0 69 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 70  in_data_delete(p
11d00 41 72 67 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  Arg);..      /* 
11d10 70 72 69 6e 74 20 75 73 61 67 65 20 73 74 61 74  print usage stat
11d20 73 20 69 66 20 73 74 61 74 73 20 6f 6e 20 2a 2f  s if stats on */
11d30 0a 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20  .      if( pArg 
11d40 26 26 20 70 41 72 67 2d 3e 73 74 61 74 73 4f 6e  && pArg->statsOn
11d50 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69 73 70   ){.        disp
11d60 6c 61 79 5f 73 74 61 74 73 28 64 62 2c 20 70 41  lay_stats(db, pA
11d70 72 67 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a  rg, 0);.      }.
11d80 0a 20 20 20 20 20 20 2f 2a 20 70 72 69 6e 74 20  .      /* print 
11d90 6c 6f 6f 70 2d 63 6f 75 6e 74 65 72 73 20 69 66  loop-counters if
11da0 20 72 65 71 75 69 72 65 64 20 2a 2f 0a 20 20 20   required */.   
11db0 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70     if( pArg && p
11dc0 41 72 67 2d 3e 73 63 61 6e 73 74 61 74 73 4f 6e  Arg->scanstatsOn
11dd0 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69 73 70   ){.        disp
11de0 6c 61 79 5f 73 63 61 6e 73 74 61 74 73 28 64 62  lay_scanstats(db
11df0 2c 20 70 41 72 67 29 3b 0a 20 20 20 20 20 20 7d  , pArg);.      }
11e00 0a 0a 20 20 20 20 20 20 2f 2a 20 46 69 6e 61 6c  ..      /* Final
11e10 69 7a 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ize the statemen
11e20 74 20 6a 75 73 74 20 65 78 65 63 75 74 65 64 2e  t just executed.
11e30 20 49 66 20 74 68 69 73 20 66 61 69 6c 73 2c 20   If this fails, 
11e40 73 61 76 65 20 61 0a 20 20 20 20 20 20 2a 2a 20  save a.      ** 
11e50 63 6f 70 79 20 6f 66 20 74 68 65 20 65 72 72 6f  copy of the erro
11e60 72 20 6d 65 73 73 61 67 65 2e 20 4f 74 68 65 72  r message. Other
11e70 77 69 73 65 2c 20 73 65 74 20 7a 53 71 6c 20 74  wise, set zSql t
11e80 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 0a 20  o point to the. 
11e90 20 20 20 20 20 2a 2a 20 6e 65 78 74 20 73 74 61       ** next sta
11ea0 74 65 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74  tement to execut
11eb0 65 2e 20 2a 2f 0a 20 20 20 20 20 20 72 63 32 20  e. */.      rc2 
11ec0 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
11ed0 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  ze(pStmt);.     
11ee0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
11ef0 4e 4f 4d 45 4d 20 29 20 72 63 20 3d 20 72 63 32  NOMEM ) rc = rc2
11f00 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
11f10 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
11f20 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c 65 66       zSql = zLef
11f30 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 20 20 77  tover;.        w
11f40 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 53  hile( IsSpace(zS
11f50 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b  ql[0]) ) zSql++;
11f60 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
11f70 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20   pzErrMsg ){.   
11f80 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d       *pzErrMsg =
11f90 20 73 61 76 65 5f 65 72 72 5f 6d 73 67 28 64 62   save_err_msg(db
11fa0 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
11fb0 20 20 2f 2a 20 63 6c 65 61 72 20 73 61 76 65 64    /* clear saved
11fc0 20 73 74 6d 74 20 68 61 6e 64 6c 65 20 2a 2f 0a   stmt handle */.
11fd0 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20 29        if( pArg )
11fe0 7b 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e  {.        pArg->
11ff0 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20  pStmt = NULL;.  
12000 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 20      }.    }.  } 
12010 2f 2a 20 65 6e 64 20 77 68 69 6c 65 20 2a 2f 0a  /* end while */.
12020 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
12030 0a 2f 2a 0a 2a 2a 20 52 65 6c 65 61 73 65 20 6d  ./*.** Release m
12040 65 6d 6f 72 79 20 70 72 65 76 69 6f 75 73 6c 79  emory previously
12050 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 61   allocated by ta
12060 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 29 2e  bleColumnList().
12070 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
12080 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 63  freeColumnList(c
12090 68 61 72 20 2a 2a 61 7a 43 6f 6c 29 7b 0a 20 20  har **azCol){.  
120a0 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 31  int i;.  for(i=1
120b0 3b 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29  ; azCol[i]; i++)
120c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  {.    sqlite3_fr
120d0 65 65 28 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20  ee(azCol[i]);.  
120e0 7d 0a 20 20 2f 2a 20 61 7a 43 6f 6c 5b 30 5d 20  }.  /* azCol[0] 
120f0 69 73 20 61 20 73 74 61 74 69 63 20 73 74 72 69  is a static stri
12100 6e 67 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ng */.  sqlite3_
12110 66 72 65 65 28 61 7a 43 6f 6c 29 3b 0a 7d 0a 0a  free(azCol);.}..
12120 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 6c  /*.** Return a l
12130 69 73 74 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ist of pointers 
12140 74 6f 20 73 74 72 69 6e 67 73 20 77 68 69 63 68  to strings which
12150 20 61 72 65 20 74 68 65 20 6e 61 6d 65 73 20 6f   are the names o
12160 66 20 61 6c 6c 0a 2a 2a 20 63 6f 6c 75 6d 6e 73  f all.** columns
12170 20 69 6e 20 74 61 62 6c 65 20 7a 54 61 62 2e 20   in table zTab. 
12180 20 20 54 68 65 20 6d 65 6d 6f 72 79 20 74 6f 20    The memory to 
12190 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 73 20 69  hold the names i
121a0 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
121b0 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 6d   allocated and m
121c0 75 73 74 20 62 65 20 72 65 6c 65 61 73 65 64 20  ust be released 
121d0 62 79 20 74 68 65 20 63 61 6c 6c 65 72 20 75 73  by the caller us
121e0 69 6e 67 20 61 20 73 75 62 73 65 71 75 65 6e 74  ing a subsequent
121f0 20 63 61 6c 6c 0a 2a 2a 20 74 6f 20 66 72 65 65   call.** to free
12200 43 6f 6c 75 6d 6e 4c 69 73 74 28 29 2e 0a 2a 2a  ColumnList()..**
12210 0a 2a 2a 20 54 68 65 20 61 7a 43 6f 6c 5b 30 5d  .** The azCol[0]
12220 20 65 6e 74 72 79 20 69 73 20 75 73 75 61 6c 6c   entry is usuall
12230 79 20 4e 55 4c 4c 2e 20 20 48 6f 77 65 76 65 72  y NULL.  However
12240 2c 20 69 66 20 7a 54 61 62 20 63 6f 6e 74 61 69  , if zTab contai
12250 6e 73 20 61 20 72 6f 77 69 64 0a 2a 2a 20 76 61  ns a rowid.** va
12260 6c 75 65 20 74 68 61 74 20 6e 65 65 64 73 20 74  lue that needs t
12270 6f 20 62 65 20 70 72 65 73 65 72 76 65 64 2c 20  o be preserved, 
12280 74 68 65 6e 20 61 7a 43 6f 6c 5b 30 5d 20 69 73  then azCol[0] is
12290 20 66 69 6c 6c 65 64 20 69 6e 20 77 69 74 68 20   filled in with 
122a0 74 68 65 0a 2a 2a 20 6e 61 6d 65 20 6f 66 20 74  the.** name of t
122b0 68 65 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2e  he rowid column.
122c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  .**.** The first
122d0 20 72 65 67 75 6c 61 72 20 63 6f 6c 75 6d 6e 20   regular column 
122e0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  in the table is 
122f0 61 7a 43 6f 6c 5b 31 5d 2e 20 20 54 68 65 20 6c  azCol[1].  The l
12300 69 73 74 20 69 73 20 74 65 72 6d 69 6e 61 74 65  ist is terminate
12310 64 0a 2a 2a 20 62 79 20 61 6e 20 65 6e 74 72 79  d.** by an entry
12320 20 77 69 74 68 20 61 7a 43 6f 6c 5b 69 5d 3d 3d   with azCol[i]==
12330 30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  0..*/.static cha
12340 72 20 2a 2a 74 61 62 6c 65 43 6f 6c 75 6d 6e 4c  r **tableColumnL
12350 69 73 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  ist(ShellState *
12360 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
12370 54 61 62 29 7b 0a 20 20 63 68 61 72 20 2a 2a 61  Tab){.  char **a
12380 7a 43 6f 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69  zCol = 0;.  sqli
12390 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
123a0 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
123b0 20 69 6e 74 20 6e 43 6f 6c 20 3d 20 30 3b 0a 20   int nCol = 0;. 
123c0 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b   int nAlloc = 0;
123d0 0a 20 20 69 6e 74 20 6e 50 4b 20 3d 20 30 3b 20  .  int nPK = 0; 
123e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
123f0 6f 66 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  of PRIMARY KEY c
12400 6f 6c 75 6d 6e 73 20 73 65 65 6e 20 2a 2f 0a 20  olumns seen */. 
12410 20 69 6e 74 20 69 73 49 50 4b 20 3d 20 30 3b 20   int isIPK = 0; 
12420 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f      /* True if o
12430 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  ne PRIMARY KEY c
12440 6f 6c 75 6d 6e 20 6f 66 20 74 79 70 65 20 49 4e  olumn of type IN
12450 54 45 47 45 52 20 2a 2f 0a 20 20 69 6e 74 20 70  TEGER */.  int p
12460 72 65 73 65 72 76 65 52 6f 77 69 64 20 3d 20 53  reserveRowid = S
12470 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
12480 48 46 4c 47 5f 50 72 65 73 65 72 76 65 52 6f 77  HFLG_PreserveRow
12490 69 64 29 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  id);.  int rc;..
124a0 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
124b0 5f 6d 70 72 69 6e 74 66 28 22 50 52 41 47 4d 41  _mprintf("PRAGMA
124c0 20 74 61 62 6c 65 5f 69 6e 66 6f 3d 25 51 22 2c   table_info=%Q",
124d0 20 7a 54 61 62 29 3b 0a 20 20 72 63 20 3d 20 73   zTab);.  rc = s
124e0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
124f0 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d  2(p->db, zSql, -
12500 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
12510 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
12520 71 6c 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ql);.  if( rc ) 
12530 72 65 74 75 72 6e 20 30 3b 0a 20 20 77 68 69 6c  return 0;.  whil
12540 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  e( sqlite3_step(
12550 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52  pStmt)==SQLITE_R
12560 4f 57 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 43  OW ){.    if( nC
12570 6f 6c 3e 3d 6e 41 6c 6c 6f 63 2d 32 20 29 7b 0a  ol>=nAlloc-2 ){.
12580 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e        nAlloc = n
12590 41 6c 6c 6f 63 2a 32 20 2b 20 6e 43 6f 6c 20 2b  Alloc*2 + nCol +
125a0 20 31 30 3b 0a 20 20 20 20 20 20 61 7a 43 6f 6c   10;.      azCol
125b0 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c   = sqlite3_reall
125c0 6f 63 28 61 7a 43 6f 6c 2c 20 6e 41 6c 6c 6f 63  oc(azCol, nAlloc
125d0 2a 73 69 7a 65 6f 66 28 61 7a 43 6f 6c 5b 30 5d  *sizeof(azCol[0]
125e0 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a  ));.      if( az
125f0 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Col==0 ){.      
12600 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
12610 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74  err, "Error: out
12620 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a   of memory\n");.
12630 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b          exit(1);
12640 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
12650 20 20 20 61 7a 43 6f 6c 5b 2b 2b 6e 43 6f 6c 5d     azCol[++nCol]
12660 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
12670 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74 65 33  tf("%s", sqlite3
12680 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
12690 6d 74 2c 20 31 29 29 3b 0a 20 20 20 20 69 66 28  mt, 1));.    if(
126a0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
126b0 69 6e 74 28 70 53 74 6d 74 2c 20 35 29 20 29 7b  int(pStmt, 5) ){
126c0 0a 20 20 20 20 20 20 6e 50 4b 2b 2b 3b 0a 20 20  .      nPK++;.  
126d0 20 20 20 20 69 66 28 20 6e 50 4b 3d 3d 31 0a 20      if( nPK==1. 
126e0 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
126f0 5f 73 74 72 69 63 6d 70 28 28 63 6f 6e 73 74 20  _stricmp((const 
12700 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
12710 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c  lumn_text(pStmt,
12720 32 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  2),.            
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
12740 4e 54 45 47 45 52 22 29 3d 3d 30 0a 20 20 20 20  NTEGER")==0.    
12750 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 73 49    ){.        isI
12760 50 4b 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  PK = 1;.      }e
12770 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 73 49  lse{.        isI
12780 50 4b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  PK = 0;.      }.
12790 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
127a0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
127b0 6d 74 29 3b 0a 20 20 69 66 28 20 61 7a 43 6f 6c  mt);.  if( azCol
127c0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
127d0 20 20 61 7a 43 6f 6c 5b 30 5d 20 3d 20 30 3b 0a    azCol[0] = 0;.
127e0 20 20 61 7a 43 6f 6c 5b 6e 43 6f 6c 2b 31 5d 20    azCol[nCol+1] 
127f0 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 64  = 0;..  /* The d
12800 65 63 69 73 69 6f 6e 20 6f 66 20 77 68 65 74 68  ecision of wheth
12810 65 72 20 6f 72 20 6e 6f 74 20 61 20 72 6f 77 69  er or not a rowi
12820 64 20 72 65 61 6c 6c 79 20 6e 65 65 64 73 20 74  d really needs t
12830 6f 20 62 65 20 70 72 65 73 65 72 76 65 64 0a 20  o be preserved. 
12840 20 2a 2a 20 69 73 20 74 72 69 63 6b 79 2e 20 20   ** is tricky.  
12850 57 65 20 6e 65 76 65 72 20 6e 65 65 64 20 74 6f  We never need to
12860 20 70 72 65 73 65 72 76 65 20 61 20 72 6f 77 69   preserve a rowi
12870 64 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20  d for a WITHOUT 
12880 52 4f 57 49 44 20 74 61 62 6c 65 0a 20 20 2a 2a  ROWID table.  **
12890 20 6f 72 20 61 20 74 61 62 6c 65 20 77 69 74 68   or a table with
128a0 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
128b0 41 52 59 20 4b 45 59 2e 20 20 57 65 20 61 72 65  ARY KEY.  We are
128c0 20 75 6e 61 62 6c 65 20 74 6f 20 70 72 65 73 65   unable to prese
128d0 72 76 65 0a 20 20 2a 2a 20 72 6f 77 69 64 73 20  rve.  ** rowids 
128e0 6f 6e 20 74 61 62 6c 65 73 20 77 68 65 72 65 20  on tables where 
128f0 74 68 65 20 72 6f 77 69 64 20 69 73 20 69 6e 61  the rowid is ina
12900 63 63 65 73 73 69 62 6c 65 20 62 65 63 61 75 73  ccessible becaus
12910 65 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65  e there are othe
12920 72 0a 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 20 69  r.  ** columns i
12930 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
12940 64 20 22 72 6f 77 69 64 22 2c 20 22 5f 72 6f 77  d "rowid", "_row
12950 69 64 5f 22 2c 20 61 6e 64 20 22 6f 69 64 22 2e  id_", and "oid".
12960 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 72 65 73  .  */.  if( pres
12970 65 72 76 65 52 6f 77 69 64 20 26 26 20 69 73 49  erveRowid && isI
12980 50 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  PK ){.    /* If 
12990 61 20 73 69 6e 67 6c 65 20 50 52 49 4d 41 52 59  a single PRIMARY
129a0 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 77 69 74 68   KEY column with
129b0 20 74 79 70 65 20 49 4e 54 45 47 45 52 20 77 61   type INTEGER wa
129c0 73 20 73 65 65 6e 2c 20 74 68 65 6e 20 69 74 0a  s seen, then it.
129d0 20 20 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20      ** might be 
129e0 61 6e 20 61 6c 69 73 65 20 66 6f 72 20 74 68 65  an alise for the
129f0 20 52 4f 57 49 44 2e 20 20 42 75 74 20 69 74 20   ROWID.  But it 
12a00 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20  might also be a 
12a10 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a 20 20  WITHOUT ROWID.  
12a20 20 20 2a 2a 20 74 61 62 6c 65 20 6f 72 20 61 20    ** table or a 
12a30 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
12a40 4b 45 59 20 44 45 53 43 20 63 6f 6c 75 6d 6e 2c  KEY DESC column,
12a50 20 6e 65 69 74 68 65 72 20 6f 66 20 77 68 69 63   neither of whic
12a60 68 20 61 72 65 0a 20 20 20 20 2a 2a 20 52 4f 57  h are.    ** ROW
12a70 49 44 20 61 6c 69 61 73 65 73 2e 20 20 54 6f 20  ID aliases.  To 
12a80 64 69 73 74 69 6e 67 75 69 73 68 20 74 68 65 73  distinguish thes
12a90 65 20 63 61 73 65 73 2c 20 63 68 65 63 6b 20 74  e cases, check t
12aa0 6f 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  o see if.    ** 
12ab0 74 68 65 72 65 20 69 73 20 61 20 22 70 6b 22 20  there is a "pk" 
12ac0 65 6e 74 72 79 20 69 6e 20 22 50 52 41 47 4d 41  entry in "PRAGMA
12ad0 20 69 6e 64 65 78 5f 6c 69 73 74 22 2e 20 20 54   index_list".  T
12ae0 68 65 72 65 20 77 69 6c 6c 20 62 65 0a 20 20 20  here will be.   
12af0 20 2a 2a 20 6e 6f 20 22 70 6b 22 20 69 6e 64 65   ** no "pk" inde
12b00 78 20 69 66 20 74 68 65 20 50 52 49 4d 41 52 59  x if the PRIMARY
12b10 20 4b 45 59 20 72 65 61 6c 6c 79 20 69 73 20 61   KEY really is a
12b20 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
12b30 52 4f 57 49 44 2e 0a 20 20 20 20 2a 2f 0a 20 20  ROWID..    */.  
12b40 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
12b50 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54  _mprintf("SELECT
12b60 20 31 20 46 52 4f 4d 20 70 72 61 67 6d 61 5f 69   1 FROM pragma_i
12b70 6e 64 65 78 5f 6c 69 73 74 28 25 51 29 22 0a 20  ndex_list(%Q)". 
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52            " WHER
12ba0 45 20 6f 72 69 67 69 6e 3d 27 70 6b 27 22 2c 20  E origin='pk'", 
12bb0 7a 54 61 62 29 3b 0a 20 20 20 20 72 63 20 3d 20  zTab);.    rc = 
12bc0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
12bd0 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
12be0 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
12bf0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
12c00 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20  (zSql);.    if( 
12c10 72 63 20 29 7b 0a 20 20 20 20 20 20 66 72 65 65  rc ){.      free
12c20 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f 6c  ColumnList(azCol
12c30 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
12c40 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  0;.    }.    rc 
12c50 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
12c60 53 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  Stmt);.    sqlit
12c70 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
12c80 74 29 3b 0a 20 20 20 20 70 72 65 73 65 72 76 65  t);.    preserve
12c90 52 6f 77 69 64 20 3d 20 72 63 3d 3d 53 51 4c 49  Rowid = rc==SQLI
12ca0 54 45 5f 52 4f 57 3b 0a 20 20 7d 0a 20 20 69 66  TE_ROW;.  }.  if
12cb0 28 20 70 72 65 73 65 72 76 65 52 6f 77 69 64 20  ( preserveRowid 
12cc0 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70  ){.    /* Only p
12cd0 72 65 73 65 72 76 65 20 74 68 65 20 72 6f 77 69  reserve the rowi
12ce0 64 20 69 66 20 77 65 20 63 61 6e 20 66 69 6e 64  d if we can find
12cf0 20 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 66   a name to use f
12d00 6f 72 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 6f  or the.    ** ro
12d10 77 69 64 20 2a 2f 0a 20 20 20 20 73 74 61 74 69  wid */.    stati
12d20 63 20 63 68 61 72 20 2a 61 7a 52 6f 77 69 64 5b  c char *azRowid[
12d30 5d 20 3d 20 7b 20 22 72 6f 77 69 64 22 2c 20 22  ] = { "rowid", "
12d40 5f 72 6f 77 69 64 5f 22 2c 20 22 6f 69 64 22 20  _rowid_", "oid" 
12d50 7d 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 3b  };.    int i, j;
12d60 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  .    for(j=0; j<
12d70 33 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 66  3; j++){.      f
12d80 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 43 6f 6c 3b  or(i=1; i<=nCol;
12d90 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
12da0 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63  f( sqlite3_stric
12db0 6d 70 28 61 7a 52 6f 77 69 64 5b 6a 5d 2c 61 7a  mp(azRowid[j],az
12dc0 43 6f 6c 5b 69 5d 29 3d 3d 30 20 29 20 62 72 65  Col[i])==0 ) bre
12dd0 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
12de0 20 20 69 66 28 20 69 3e 6e 43 6f 6c 20 29 7b 0a    if( i>nCol ){.
12df0 20 20 20 20 20 20 20 20 2f 2a 20 41 74 20 74 68          /* At th
12e00 69 73 20 70 6f 69 6e 74 2c 20 77 65 20 6b 6e 6f  is point, we kno
12e10 77 20 74 68 61 74 20 61 7a 52 6f 77 69 64 5b 6a  w that azRowid[j
12e20 5d 20 69 73 20 6e 6f 74 20 74 68 65 20 6e 61 6d  ] is not the nam
12e30 65 20 6f 66 20 61 6e 79 0a 20 20 20 20 20 20 20  e of any.       
12e40 20 2a 2a 20 6f 72 64 69 6e 61 72 79 20 63 6f 6c   ** ordinary col
12e50 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65  umn in the table
12e60 2e 20 20 56 65 72 69 66 79 20 74 68 61 74 20 61  .  Verify that a
12e70 7a 52 6f 77 69 64 5b 6a 5d 20 69 73 20 61 20 76  zRowid[j] is a v
12e80 61 6c 69 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  alid.        ** 
12e90 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 72 6f 77  name for the row
12ea0 69 64 20 62 65 66 6f 72 65 20 61 64 64 69 6e 67  id before adding
12eb0 20 69 74 20 74 6f 20 61 7a 43 6f 6c 5b 30 5d 2e   it to azCol[0].
12ec0 20 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a    WITHOUT ROWID.
12ed0 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
12ee0 73 20 77 69 6c 6c 20 66 61 69 6c 20 74 68 69 73  s will fail this
12ef0 20 6c 61 73 74 20 63 68 65 63 6b 20 2a 2f 0a 20   last check */. 
12f00 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
12f10 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
12f20 5f 6d 65 74 61 64 61 74 61 28 70 2d 3e 64 62 2c  _metadata(p->db,
12f30 30 2c 7a 54 61 62 2c 61 7a 52 6f 77 69 64 5b 6a  0,zTab,azRowid[j
12f40 5d 2c 30 2c 30 2c 30 2c 30 2c 30 29 3b 0a 20 20  ],0,0,0,0,0);.  
12f50 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
12f60 4c 49 54 45 5f 4f 4b 20 29 20 61 7a 43 6f 6c 5b  LITE_OK ) azCol[
12f70 30 5d 20 3d 20 61 7a 52 6f 77 69 64 5b 6a 5d 3b  0] = azRowid[j];
12f80 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
12f90 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
12fa0 7d 0a 20 20 72 65 74 75 72 6e 20 61 7a 43 6f 6c  }.  return azCol
12fb0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 6f 67 67 6c  ;.}../*.** Toggl
12fc0 65 20 74 68 65 20 72 65 76 65 72 73 65 5f 75 6e  e the reverse_un
12fd0 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 20  ordered_selects 
12fe0 73 65 74 74 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74  setting..*/.stat
12ff0 69 63 20 76 6f 69 64 20 74 6f 67 67 6c 65 53 65  ic void toggleSe
13000 6c 65 63 74 4f 72 64 65 72 28 73 71 6c 69 74 65  lectOrder(sqlite
13010 33 20 2a 64 62 29 7b 0a 20 20 73 71 6c 69 74 65  3 *db){.  sqlite
13020 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
13030 30 3b 0a 20 20 69 6e 74 20 69 53 65 74 74 69 6e  0;.  int iSettin
13040 67 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 53  g = 0;.  char zS
13050 74 6d 74 5b 31 30 30 5d 3b 0a 20 20 73 71 6c 69  tmt[100];.  sqli
13060 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64  te3_prepare_v2(d
13070 62 2c 20 22 50 52 41 47 4d 41 20 72 65 76 65 72  b, "PRAGMA rever
13080 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73 65 6c  se_unordered_sel
13090 65 63 74 73 22 2c 20 2d 31 2c 20 26 70 53 74 6d  ects", -1, &pStm
130a0 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 73 71 6c  t, 0);.  if( sql
130b0 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
130c0 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a  ==SQLITE_ROW ){.
130d0 20 20 20 20 69 53 65 74 74 69 6e 67 20 3d 20 73      iSetting = s
130e0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
130f0 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 7d  t(pStmt, 0);.  }
13100 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
13110 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 73 71  ize(pStmt);.  sq
13120 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
13130 69 7a 65 6f 66 28 7a 53 74 6d 74 29 2c 20 7a 53  izeof(zStmt), zS
13140 74 6d 74 2c 0a 20 20 20 20 20 20 20 22 50 52 41  tmt,.       "PRA
13150 47 4d 41 20 72 65 76 65 72 73 65 5f 75 6e 6f 72  GMA reverse_unor
13160 64 65 72 65 64 5f 73 65 6c 65 63 74 73 28 25 64  dered_selects(%d
13170 29 22 2c 20 21 69 53 65 74 74 69 6e 67 29 3b 0a  )", !iSetting);.
13180 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64    sqlite3_exec(d
13190 62 2c 20 7a 53 74 6d 74 2c 20 30 2c 20 30 2c 20  b, zStmt, 0, 0, 
131a0 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  0);.}../*.** Thi
131b0 73 20 69 73 20 61 20 64 69 66 66 65 72 65 6e 74  s is a different
131c0 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   callback routin
131d0 65 20 75 73 65 64 20 66 6f 72 20 64 75 6d 70 69  e used for dumpi
131e0 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ng the database.
131f0 0a 2a 2a 20 45 61 63 68 20 72 6f 77 20 72 65 63  .** Each row rec
13200 65 69 76 65 64 20 62 79 20 74 68 69 73 20 63 61  eived by this ca
13210 6c 6c 62 61 63 6b 20 63 6f 6e 73 69 73 74 73 20  llback consists 
13220 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c  of a table name,
13230 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 79  .** the table ty
13240 70 65 20 28 22 69 6e 64 65 78 22 20 6f 72 20 22  pe ("index" or "
13250 74 61 62 6c 65 22 29 20 61 6e 64 20 53 51 4c 20  table") and SQL 
13260 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 74 61  to create the ta
13270 62 6c 65 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ble..** This rou
13280 74 69 6e 65 20 73 68 6f 75 6c 64 20 70 72 69 6e  tine should prin
13290 74 20 74 65 78 74 20 73 75 66 66 69 63 69 65 6e  t text sufficien
132a0 74 20 74 6f 20 72 65 63 72 65 61 74 65 20 74 68  t to recreate th
132b0 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74  e table..*/.stat
132c0 69 63 20 69 6e 74 20 64 75 6d 70 5f 63 61 6c 6c  ic int dump_call
132d0 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72 67 2c  back(void *pArg,
132e0 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61 72 20   int nArg, char 
132f0 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72 20 2a 2a  **azArg, char **
13300 61 7a 4e 6f 74 55 73 65 64 29 7b 0a 20 20 69 6e  azNotUsed){.  in
13310 74 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20 63 68  t rc;.  const ch
13320 61 72 20 2a 7a 54 61 62 6c 65 3b 0a 20 20 63 6f  ar *zTable;.  co
13330 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
13340 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13350 53 71 6c 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74  Sql;.  ShellStat
13360 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74 61  e *p = (ShellSta
13370 74 65 20 2a 29 70 41 72 67 3b 0a 0a 20 20 55 4e  te *)pArg;..  UN
13380 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61  USED_PARAMETER(a
13390 7a 4e 6f 74 55 73 65 64 29 3b 0a 20 20 69 66 28  zNotUsed);.  if(
133a0 20 6e 41 72 67 21 3d 33 20 7c 7c 20 61 7a 41 72   nArg!=3 || azAr
133b0 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  g==0 ) return 0;
133c0 0a 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41 72  .  zTable = azAr
133d0 67 5b 30 5d 3b 0a 20 20 7a 54 79 70 65 20 3d 20  g[0];.  zType = 
133e0 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 7a 53 71 6c  azArg[1];.  zSql
133f0 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 0a 20 20   = azArg[2];..  
13400 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62 6c  if( strcmp(zTabl
13410 65 2c 20 22 73 71 6c 69 74 65 5f 73 65 71 75 65  e, "sqlite_seque
13420 6e 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nce")==0 ){.    
13430 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
13440 74 2c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20  t, "DELETE FROM 
13450 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b  sqlite_sequence;
13460 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  \n");.  }else if
13470 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f  ( sqlite3_strglo
13480 62 28 22 73 71 6c 69 74 65 5f 73 74 61 74 3f 22  b("sqlite_stat?"
13490 2c 20 7a 54 61 62 6c 65 29 3d 3d 30 20 29 7b 0a  , zTable)==0 ){.
134a0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
134b0 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20  ->out, "ANALYZE 
134c0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e  sqlite_master;\n
134d0 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
134e0 73 74 72 6e 63 6d 70 28 7a 54 61 62 6c 65 2c 20  strncmp(zTable, 
134f0 22 73 71 6c 69 74 65 5f 22 2c 20 37 29 3d 3d 30  "sqlite_", 7)==0
13500 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
13510 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
13520 72 6e 63 6d 70 28 7a 53 71 6c 2c 20 22 43 52 45  rncmp(zSql, "CRE
13530 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
13540 45 22 2c 20 32 30 29 3d 3d 30 20 29 7b 0a 20 20  E", 20)==0 ){.  
13550 20 20 63 68 61 72 20 2a 7a 49 6e 73 3b 0a 20 20    char *zIns;.  
13560 20 20 69 66 28 20 21 70 2d 3e 77 72 69 74 61 62    if( !p->writab
13570 6c 65 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20  leSchema ){.    
13580 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
13590 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 77 72 69  out, "PRAGMA wri
135a0 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b  table_schema=ON;
135b0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 70 2d 3e 77  \n");.      p->w
135c0 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20 3d 20  ritableSchema = 
135d0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 49 6e  1;.    }.    zIn
135e0 73 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  s = sqlite3_mpri
135f0 6e 74 66 28 0a 20 20 20 20 20 20 20 22 49 4e 53  ntf(.       "INS
13600 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f  ERT INTO sqlite_
13610 6d 61 73 74 65 72 28 74 79 70 65 2c 6e 61 6d 65  master(type,name
13620 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70 61  ,tbl_name,rootpa
13630 67 65 2c 73 71 6c 29 22 0a 20 20 20 20 20 20 20  ge,sql)".       
13640 22 56 41 4c 55 45 53 28 27 74 61 62 6c 65 27 2c  "VALUES('table',
13650 27 25 71 27 2c 27 25 71 27 2c 30 2c 27 25 71 27  '%q','%q',0,'%q'
13660 29 3b 22 2c 0a 20 20 20 20 20 20 20 7a 54 61 62  );",.       zTab
13670 6c 65 2c 20 7a 54 61 62 6c 65 2c 20 7a 53 71 6c  le, zTable, zSql
13680 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
13690 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e  tf(p->out, "%s\n
136a0 22 2c 20 7a 49 6e 73 29 3b 0a 20 20 20 20 73 71  ", zIns);.    sq
136b0 6c 69 74 65 33 5f 66 72 65 65 28 7a 49 6e 73 29  lite3_free(zIns)
136c0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
136d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 72 69    }else{.    pri
136e0 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70 2d 3e  ntSchemaLine(p->
136f0 6f 75 74 2c 20 7a 53 71 6c 2c 20 22 3b 5c 6e 22  out, zSql, ";\n"
13700 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 73 74  );.  }..  if( st
13710 72 63 6d 70 28 7a 54 79 70 65 2c 20 22 74 61 62  rcmp(zType, "tab
13720 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53  le")==0 ){.    S
13730 68 65 6c 6c 54 65 78 74 20 73 53 65 6c 65 63 74  hellText sSelect
13740 3b 0a 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20  ;.    ShellText 
13750 73 54 61 62 6c 65 3b 0a 20 20 20 20 63 68 61 72  sTable;.    char
13760 20 2a 2a 61 7a 43 6f 6c 3b 0a 20 20 20 20 69 6e   **azCol;.    in
13770 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 2a 73  t i;.    char *s
13780 61 76 65 64 44 65 73 74 54 61 62 6c 65 3b 0a 20  avedDestTable;. 
13790 20 20 20 69 6e 74 20 73 61 76 65 64 4d 6f 64 65     int savedMode
137a0 3b 0a 0a 20 20 20 20 61 7a 43 6f 6c 20 3d 20 74  ;..    azCol = t
137b0 61 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 70  ableColumnList(p
137c0 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 69  , zTable);.    i
137d0 66 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20  f( azCol==0 ){. 
137e0 20 20 20 20 20 70 2d 3e 6e 45 72 72 2b 2b 3b 0a       p->nErr++;.
137f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a        return 0;.
13800 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 41 6c      }..    /* Al
13810 77 61 79 73 20 71 75 6f 74 65 20 74 68 65 20 74  ways quote the t
13820 61 62 6c 65 20 6e 61 6d 65 2c 20 65 76 65 6e 20  able name, even 
13830 69 66 20 69 74 20 61 70 70 65 61 72 73 20 74 6f  if it appears to
13840 20 62 65 20 70 75 72 65 20 61 73 63 69 69 2c 0a   be pure ascii,.
13850 20 20 20 20 2a 2a 20 69 6e 20 63 61 73 65 20 69      ** in case i
13860 74 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20  t is a keyword. 
13870 45 78 3a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  Ex:  INSERT INTO
13880 20 22 74 61 62 6c 65 22 20 2e 2e 2e 20 2a 2f 0a   "table" ... */.
13890 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 54      initText(&sT
138a0 61 62 6c 65 29 3b 0a 20 20 20 20 61 70 70 65 6e  able);.    appen
138b0 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20 7a  dText(&sTable, z
138c0 54 61 62 6c 65 2c 20 71 75 6f 74 65 43 68 61 72  Table, quoteChar
138d0 28 7a 54 61 62 6c 65 29 29 3b 0a 20 20 20 20 2f  (zTable));.    /
138e0 2a 20 49 66 20 70 72 65 73 65 72 76 69 6e 67 20  * If preserving 
138f0 74 68 65 20 72 6f 77 69 64 2c 20 61 64 64 20 61  the rowid, add a
13900 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 66 74   column list aft
13910 65 72 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  er the table nam
13920 65 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 6f 74 68  e..    ** In oth
13930 65 72 20 77 6f 72 64 73 3a 20 20 22 49 4e 53 45  er words:  "INSE
13940 52 54 20 49 4e 54 4f 20 74 61 62 28 72 6f 77 69  RT INTO tab(rowi
13950 64 2c 61 2c 62 2c 63 2c 2e 2e 2e 29 20 56 41 4c  d,a,b,c,...) VAL
13960 55 45 53 28 2e 2e 2e 29 22 0a 20 20 20 20 2a 2a  UES(...)".    **
13970 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
13980 75 73 75 61 6c 20 22 49 4e 53 45 52 54 20 49 4e  usual "INSERT IN
13990 54 4f 20 74 61 62 20 56 41 4c 55 45 53 28 2e 2e  TO tab VALUES(..
139a0 2e 29 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  .)"..    */.    
139b0 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b 0a  if( azCol[0] ){.
139c0 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
139d0 28 26 73 54 61 62 6c 65 2c 20 22 28 22 2c 20 30  (&sTable, "(", 0
139e0 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54  );.      appendT
139f0 65 78 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43  ext(&sTable, azC
13a00 6f 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20  ol[0], 0);.     
13a10 20 66 6f 72 28 69 3d 31 3b 20 61 7a 43 6f 6c 5b   for(i=1; azCol[
13a20 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  i]; i++){.      
13a30 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 54    appendText(&sT
13a40 61 62 6c 65 2c 20 22 2c 22 2c 20 30 29 3b 0a 20  able, ",", 0);. 
13a50 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
13a60 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43 6f 6c  t(&sTable, azCol
13a70 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28 61  [i], quoteChar(a
13a80 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20 20  zCol[i]));.     
13a90 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54   }.      appendT
13aa0 65 78 74 28 26 73 54 61 62 6c 65 2c 20 22 29 22  ext(&sTable, ")"
13ab0 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  , 0);.    }..   
13ac0 20 2f 2a 20 42 75 69 6c 64 20 61 6e 20 61 70 70   /* Build an app
13ad0 72 6f 70 72 69 61 74 65 20 53 45 4c 45 43 54 20  ropriate SELECT 
13ae0 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20  statement */.   
13af0 20 69 6e 69 74 54 65 78 74 28 26 73 53 65 6c 65   initText(&sSele
13b00 63 74 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  ct);.    appendT
13b10 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53  ext(&sSelect, "S
13b20 45 4c 45 43 54 20 22 2c 20 30 29 3b 0a 20 20 20  ELECT ", 0);.   
13b30 20 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b   if( azCol[0] ){
13b40 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78  .      appendTex
13b50 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43 6f  t(&sSelect, azCo
13b60 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20  l[0], 0);.      
13b70 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
13b80 65 63 74 2c 20 22 2c 22 2c 20 30 29 3b 0a 20 20  ect, ",", 0);.  
13b90 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b    }.    for(i=1;
13ba0 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29 7b   azCol[i]; i++){
13bb0 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78  .      appendTex
13bc0 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43 6f  t(&sSelect, azCo
13bd0 6c 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28  l[i], quoteChar(
13be0 61 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20  azCol[i]));.    
13bf0 20 20 69 66 28 20 61 7a 43 6f 6c 5b 69 2b 31 5d    if( azCol[i+1]
13c00 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65   ){.        appe
13c10 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
13c20 20 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20   ",", 0);.      
13c30 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65 65  }.    }.    free
13c40 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f 6c  ColumnList(azCol
13c50 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78  );.    appendTex
13c60 74 28 26 73 53 65 6c 65 63 74 2c 20 22 20 46 52  t(&sSelect, " FR
13c70 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 61 70  OM ", 0);.    ap
13c80 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
13c90 74 2c 20 7a 54 61 62 6c 65 2c 20 71 75 6f 74 65  t, zTable, quote
13ca0 43 68 61 72 28 7a 54 61 62 6c 65 29 29 3b 0a 0a  Char(zTable));..
13cb0 20 20 20 20 73 61 76 65 64 44 65 73 74 54 61 62      savedDestTab
13cc0 6c 65 20 3d 20 70 2d 3e 7a 44 65 73 74 54 61 62  le = p->zDestTab
13cd0 6c 65 3b 0a 20 20 20 20 73 61 76 65 64 4d 6f 64  le;.    savedMod
13ce0 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20  e = p->mode;.   
13cf0 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d   p->zDestTable =
13d00 20 73 54 61 62 6c 65 2e 7a 3b 0a 20 20 20 20 70   sTable.z;.    p
13d10 2d 3e 6d 6f 64 65 20 3d 20 70 2d 3e 63 4d 6f 64  ->mode = p->cMod
13d20 65 20 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b  e = MODE_Insert;
13d30 0a 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f  .    rc = shell_
13d40 65 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c  exec(p->db, sSel
13d50 65 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c  ect.z, shell_cal
13d60 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20  lback, p, 0);.  
13d70 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
13d80 3d 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20  =SQLITE_CORRUPT 
13d90 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
13da0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a  ntf(p->out, "/**
13db0 2a 2a 2a 2a 20 43 4f 52 52 55 50 54 49 4f 4e 20  **** CORRUPTION 
13dc0 45 52 52 4f 52 20 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e  ERROR *******/\n
13dd0 22 29 3b 0a 20 20 20 20 20 20 74 6f 67 67 6c 65  ");.      toggle
13de0 53 65 6c 65 63 74 4f 72 64 65 72 28 70 2d 3e 64  SelectOrder(p->d
13df0 62 29 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f  b);.      shell_
13e00 65 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c  exec(p->db, sSel
13e10 65 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c  ect.z, shell_cal
13e20 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20  lback, p, 0);.  
13e30 20 20 20 20 74 6f 67 67 6c 65 53 65 6c 65 63 74      toggleSelect
13e40 4f 72 64 65 72 28 70 2d 3e 64 62 29 3b 0a 20 20  Order(p->db);.  
13e50 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 44 65 73 74    }.    p->zDest
13e60 54 61 62 6c 65 20 3d 20 73 61 76 65 64 44 65 73  Table = savedDes
13e70 74 54 61 62 6c 65 3b 0a 20 20 20 20 70 2d 3e 6d  tTable;.    p->m
13e80 6f 64 65 20 3d 20 73 61 76 65 64 4d 6f 64 65 3b  ode = savedMode;
13e90 0a 20 20 20 20 66 72 65 65 54 65 78 74 28 26 73  .    freeText(&s
13ea0 54 61 62 6c 65 29 3b 0a 20 20 20 20 66 72 65 65  Table);.    free
13eb0 54 65 78 74 28 26 73 53 65 6c 65 63 74 29 3b 0a  Text(&sSelect);.
13ec0 20 20 20 20 69 66 28 20 72 63 20 29 20 70 2d 3e      if( rc ) p->
13ed0 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65  nErr++;.  }.  re
13ee0 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
13ef0 20 52 75 6e 20 7a 51 75 65 72 79 2e 20 20 55 73   Run zQuery.  Us
13f00 65 20 64 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 28  e dump_callback(
13f10 29 20 61 73 20 74 68 65 20 63 61 6c 6c 62 61 63  ) as the callbac
13f20 6b 20 72 6f 75 74 69 6e 65 20 73 6f 20 74 68 61  k routine so tha
13f30 74 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  t.** the content
13f40 73 20 6f 66 20 74 68 65 20 71 75 65 72 79 20 61  s of the query a
13f50 72 65 20 6f 75 74 70 75 74 20 61 73 20 53 51 4c  re output as SQL
13f60 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
13f70 2a 2a 20 49 66 20 77 65 20 67 65 74 20 61 20 53  ** If we get a S
13f80 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
13f90 72 6f 72 2c 20 72 65 72 75 6e 20 74 68 65 20 71  ror, rerun the q
13fa0 75 65 72 79 20 61 66 74 65 72 20 61 70 70 65 6e  uery after appen
13fb0 64 69 6e 67 0a 2a 2a 20 22 4f 52 44 45 52 20 42  ding.** "ORDER B
13fc0 59 20 72 6f 77 69 64 20 44 45 53 43 22 20 74 6f  Y rowid DESC" to
13fd0 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 61   the end..*/.sta
13fe0 74 69 63 20 69 6e 74 20 72 75 6e 5f 73 63 68 65  tic int run_sche
13ff0 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 0a 20  ma_dump_query(. 
14000 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a   ShellState *p,.
14010 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51    const char *zQ
14020 75 65 72 79 0a 29 7b 0a 20 20 69 6e 74 20 72 63  uery.){.  int rc
14030 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d  ;.  char *zErr =
14040 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
14050 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a  e3_exec(p->db, z
14060 51 75 65 72 79 2c 20 64 75 6d 70 5f 63 61 6c 6c  Query, dump_call
14070 62 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b  back, p, &zErr);
14080 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
14090 45 5f 43 4f 52 52 55 50 54 20 29 7b 0a 20 20 20  E_CORRUPT ){.   
140a0 20 63 68 61 72 20 2a 7a 51 32 3b 0a 20 20 20 20   char *zQ2;.    
140b0 69 6e 74 20 6c 65 6e 20 3d 20 73 74 72 6c 65 6e  int len = strlen
140c0 33 30 28 7a 51 75 65 72 79 29 3b 0a 20 20 20 20  30(zQuery);.    
140d0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
140e0 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 43 4f 52 52  t, "/****** CORR
140f0 55 50 54 49 4f 4e 20 45 52 52 4f 52 20 2a 2a 2a  UPTION ERROR ***
14100 2a 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20 20 20 20 69  ****/\n");.    i
14110 66 28 20 7a 45 72 72 20 29 7b 0a 20 20 20 20 20  f( zErr ){.     
14120 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
14130 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 25 73  out, "/****** %s
14140 20 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 7a 45 72   ******/\n", zEr
14150 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  r);.      sqlite
14160 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20  3_free(zErr);.  
14170 20 20 20 20 7a 45 72 72 20 3d 20 30 3b 0a 20 20      zErr = 0;.  
14180 20 20 7d 0a 20 20 20 20 7a 51 32 20 3d 20 6d 61    }.    zQ2 = ma
14190 6c 6c 6f 63 28 20 6c 65 6e 2b 31 30 30 20 29 3b  lloc( len+100 );
141a0 0a 20 20 20 20 69 66 28 20 7a 51 32 3d 3d 30 20  .    if( zQ2==0 
141b0 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20  ) return rc;.   
141c0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
141d0 66 28 6c 65 6e 2b 31 30 30 2c 20 7a 51 32 2c 20  f(len+100, zQ2, 
141e0 22 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77  "%s ORDER BY row
141f0 69 64 20 44 45 53 43 22 2c 20 7a 51 75 65 72 79  id DESC", zQuery
14200 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
14210 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
14220 7a 51 32 2c 20 64 75 6d 70 5f 63 61 6c 6c 62 61  zQ2, dump_callba
14230 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b 0a 20  ck, p, &zErr);. 
14240 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
14250 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
14260 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20  ->out, "/****** 
14270 45 52 52 4f 52 3a 20 25 73 20 2a 2a 2a 2a 2a 2a  ERROR: %s ******
14280 2f 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20 20 20  /\n", zErr);.   
14290 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
142a0 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
142b0 54 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  T;.    }.    sql
142c0 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b  ite3_free(zErr);
142d0 0a 20 20 20 20 66 72 65 65 28 7a 51 32 29 3b 0a  .    free(zQ2);.
142e0 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
142f0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 78 74 20 6f  .}../*.** Text o
14300 66 20 61 20 68 65 6c 70 20 6d 65 73 73 61 67 65  f a help message
14310 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  .*/.static char 
14320 7a 48 65 6c 70 5b 5d 20 3d 0a 23 69 66 6e 64 65  zHelp[] =.#ifnde
14330 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
14340 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 22 2e  THORIZATION.  ".
14350 61 75 74 68 20 4f 4e 7c 4f 46 46 20 20 20 20 20  auth ON|OFF     
14360 20 20 20 20 20 20 53 68 6f 77 20 61 75 74 68 6f        Show autho
14370 72 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 73 5c  rizer callbacks\
14380 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 62 61  n".#endif.  ".ba
14390 63 6b 75 70 20 3f 44 42 3f 20 46 49 4c 45 20 20  ckup ?DB? FILE  
143a0 20 20 20 20 42 61 63 6b 75 70 20 44 42 20 28 64      Backup DB (d
143b0 65 66 61 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29  efault \"main\")
143c0 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e   to FILE\n".  ".
143d0 62 61 69 6c 20 6f 6e 7c 6f 66 66 20 20 20 20 20  bail on|off     
143e0 20 20 20 20 20 20 53 74 6f 70 20 61 66 74 65 72        Stop after
143f0 20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72 6f   hitting an erro
14400 72 2e 20 20 44 65 66 61 75 6c 74 20 4f 46 46 5c  r.  Default OFF\
14410 6e 22 0a 20 20 22 2e 62 69 6e 61 72 79 20 6f 6e  n".  ".binary on
14420 7c 6f 66 66 20 20 20 20 20 20 20 20 20 54 75 72  |off         Tur
14430 6e 20 62 69 6e 61 72 79 20 6f 75 74 70 75 74 20  n binary output 
14440 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 44 65 66 61  on or off.  Defa
14450 75 6c 74 20 4f 46 46 5c 6e 22 0a 20 20 22 2e 63  ult OFF\n".  ".c
14460 64 20 44 49 52 45 43 54 4f 52 59 20 20 20 20 20  d DIRECTORY     
14470 20 20 20 20 20 43 68 61 6e 67 65 20 74 68 65 20       Change the 
14480 77 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72  working director
14490 79 20 74 6f 20 44 49 52 45 43 54 4f 52 59 5c 6e  y to DIRECTORY\n
144a0 22 0a 20 20 22 2e 63 68 61 6e 67 65 73 20 6f 6e  ".  ".changes on
144b0 7c 6f 66 66 20 20 20 20 20 20 20 20 53 68 6f 77  |off        Show
144c0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
144d0 63 68 61 6e 67 65 64 20 62 79 20 53 51 4c 5c 6e  changed by SQL\n
144e0 22 0a 20 20 22 2e 63 68 65 63 6b 20 47 4c 4f 42  ".  ".check GLOB
144f0 20 20 20 20 20 20 20 20 20 20 20 20 46 61 69 6c              Fail
14500 20 69 66 20 6f 75 74 70 75 74 20 73 69 6e 63 65   if output since
14510 20 2e 74 65 73 74 63 61 73 65 20 64 6f 65 73 20   .testcase does 
14520 6e 6f 74 20 6d 61 74 63 68 5c 6e 22 0a 20 20 22  not match\n".  "
14530 2e 63 6c 6f 6e 65 20 4e 45 57 44 42 20 20 20 20  .clone NEWDB    
14540 20 20 20 20 20 20 20 43 6c 6f 6e 65 20 64 61 74         Clone dat
14550 61 20 69 6e 74 6f 20 4e 45 57 44 42 20 66 72 6f  a into NEWDB fro
14560 6d 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 64  m the existing d
14570 61 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64  atabase\n".  ".d
14580 61 74 61 62 61 73 65 73 20 20 20 20 20 20 20 20  atabases        
14590 20 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73 20       List names 
145a0 61 6e 64 20 66 69 6c 65 73 20 6f 66 20 61 74 74  and files of att
145b0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 5c  ached databases\
145c0 6e 22 0a 20 20 22 2e 64 62 69 6e 66 6f 20 3f 44  n".  ".dbinfo ?D
145d0 42 3f 20 20 20 20 20 20 20 20 20 20 20 53 68 6f  B?           Sho
145e0 77 20 73 74 61 74 75 73 20 69 6e 66 6f 72 6d 61  w status informa
145f0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64  tion about the d
14600 61 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64  atabase\n".  ".d
14610 75 6d 70 20 3f 54 41 42 4c 45 3f 20 2e 2e 2e 20  ump ?TABLE? ... 
14620 20 20 20 20 20 44 75 6d 70 20 74 68 65 20 64 61       Dump the da
14630 74 61 62 61 73 65 20 69 6e 20 61 6e 20 53 51 4c  tabase in an SQL
14640 20 74 65 78 74 20 66 6f 72 6d 61 74 5c 6e 22 0a   text format\n".
14650 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
14660 20 20 20 20 20 20 20 20 20 20 20 20 49 66 20 54              If T
14670 41 42 4c 45 20 73 70 65 63 69 66 69 65 64 2c 20  ABLE specified, 
14680 6f 6e 6c 79 20 64 75 6d 70 20 74 61 62 6c 65 73  only dump tables
14690 20 6d 61 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22   matching\n".  "
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146b0 20 20 20 20 20 20 20 20 20 4c 49 4b 45 20 70 61           LIKE pa
146c0 74 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a  ttern TABLE.\n".
146d0 20 20 22 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66 20    ".echo on|off 
146e0 20 20 20 20 20 20 20 20 20 20 54 75 72 6e 20 63            Turn c
146f0 6f 6d 6d 61 6e 64 20 65 63 68 6f 20 6f 6e 20 6f  ommand echo on o
14700 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 65 71 70  r off\n".  ".eqp
14710 20 6f 6e 7c 6f 66 66 7c 66 75 6c 6c 20 20 20 20   on|off|full    
14720 20 20 20 45 6e 61 62 6c 65 20 6f 72 20 64 69 73     Enable or dis
14730 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 45  able automatic E
14740 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
14750 4e 5c 6e 22 0a 20 20 22 2e 65 78 69 74 20 20 20  N\n".  ".exit   
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
14770 78 69 74 20 74 68 69 73 20 70 72 6f 67 72 61 6d  xit this program
14780 5c 6e 22 0a 2f 2a 20 42 65 63 61 75 73 65 20 65  \n"./* Because e
14790 78 70 6c 61 69 6e 20 6d 6f 64 65 20 63 6f 6d 65  xplain mode come
147a0 73 20 6f 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c  s on automatical
147b0 6c 79 20 6e 6f 77 2c 20 74 68 65 20 22 2e 65 78  ly now, the ".ex
147c0 70 6c 61 69 6e 22 20 6d 6f 64 65 0a 2a 2a 20 69  plain" mode.** i
147d0 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  s removed from t
147e0 68 65 20 68 65 6c 70 20 73 63 72 65 65 6e 2e 20  he help screen. 
147f0 20 49 74 20 69 73 20 73 74 69 6c 6c 20 73 75 70   It is still sup
14800 70 6f 72 74 65 64 20 66 6f 72 20 6c 65 67 61 63  ported for legac
14810 79 2c 20 68 6f 77 65 76 65 72 20 2a 2f 0a 2f 2a  y, however */./*
14820 22 2e 65 78 70 6c 61 69 6e 20 3f 6f 6e 7c 6f 66  ".explain ?on|of
14830 66 7c 61 75 74 6f 3f 20 54 75 72 6e 20 45 58 50  f|auto? Turn EXP
14840 4c 41 49 4e 20 6f 75 74 70 75 74 20 6d 6f 64 65  LAIN output mode
14850 20 6f 6e 20 6f 72 20 6f 66 66 20 6f 72 20 74 6f   on or off or to
14860 20 61 75 74 6f 6d 61 74 69 63 5c 6e 22 2a 2f 0a   automatic\n"*/.
14870 20 20 22 2e 66 75 6c 6c 73 63 68 65 6d 61 20 3f    ".fullschema ?
14880 2d 2d 69 6e 64 65 6e 74 3f 20 53 68 6f 77 20 73  --indent? Show s
14890 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20 63 6f  chema and the co
148a0 6e 74 65 6e 74 20 6f 66 20 73 71 6c 69 74 65 5f  ntent of sqlite_
148b0 73 74 61 74 20 74 61 62 6c 65 73 5c 6e 22 0a 20  stat tables\n". 
148c0 20 22 2e 68 65 61 64 65 72 73 20 6f 6e 7c 6f 66   ".headers on|of
148d0 66 20 20 20 20 20 20 20 20 54 75 72 6e 20 64 69  f        Turn di
148e0 73 70 6c 61 79 20 6f 66 20 68 65 61 64 65 72 73  splay of headers
148f0 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20 20   on or off\n".  
14900 22 2e 68 65 6c 70 20 20 20 20 20 20 20 20 20 20  ".help          
14910 20 20 20 20 20 20 20 20 53 68 6f 77 20 74 68 69          Show thi
14920 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20 20 22  s message\n".  "
14930 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42  .import FILE TAB
14940 4c 45 20 20 20 20 20 49 6d 70 6f 72 74 20 64 61  LE     Import da
14950 74 61 20 66 72 6f 6d 20 46 49 4c 45 20 69 6e 74  ta from FILE int
14960 6f 20 54 41 42 4c 45 5c 6e 22 0a 23 69 66 6e 64  o TABLE\n".#ifnd
14970 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
14980 45 53 54 5f 43 4f 4e 54 52 4f 4c 0a 20 20 22 2e  EST_CONTROL.  ".
14990 69 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20 54  imposter INDEX T
149a0 41 42 4c 45 20 20 43 72 65 61 74 65 20 69 6d 70  ABLE  Create imp
149b0 6f 73 74 65 72 20 74 61 62 6c 65 20 54 41 42 4c  oster table TABL
149c0 45 20 6f 6e 20 69 6e 64 65 78 20 49 4e 44 45 58  E on index INDEX
149d0 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 69  \n".#endif.  ".i
149e0 6e 64 65 78 65 73 20 3f 54 41 42 4c 45 3f 20 20  ndexes ?TABLE?  
149f0 20 20 20 20 20 53 68 6f 77 20 6e 61 6d 65 73 20       Show names 
14a00 6f 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 5c 6e  of all indexes\n
14a10 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 66                If
14a30 20 54 41 42 4c 45 20 73 70 65 63 69 66 69 65 64   TABLE specified
14a40 2c 20 6f 6e 6c 79 20 73 68 6f 77 20 69 6e 64 65  , only show inde
14a50 78 65 73 20 66 6f 72 20 74 61 62 6c 65 73 5c 6e  xes for tables\n
14a60 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61                ma
14a80 74 63 68 69 6e 67 20 4c 49 4b 45 20 70 61 74 74  tching LIKE patt
14a90 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 23 69  ern TABLE.\n".#i
14aa0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
14ab0 4c 45 5f 49 4f 54 52 41 43 45 0a 20 20 22 2e 69  LE_IOTRACE.  ".i
14ac0 6f 74 72 61 63 65 20 46 49 4c 45 20 20 20 20 20  otrace FILE     
14ad0 20 20 20 20 20 45 6e 61 62 6c 65 20 49 2f 4f 20       Enable I/O 
14ae0 64 69 61 67 6e 6f 73 74 69 63 20 6c 6f 67 67 69  diagnostic loggi
14af0 6e 67 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 23 65  ng to FILE\n".#e
14b00 6e 64 69 66 0a 20 20 22 2e 6c 69 6d 69 74 20 3f  ndif.  ".limit ?
14b10 4c 49 4d 49 54 3f 20 3f 56 41 4c 3f 20 20 20 44  LIMIT? ?VAL?   D
14b20 69 73 70 6c 61 79 20 6f 72 20 63 68 61 6e 67 65  isplay or change
14b30 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 6e   the value of an
14b40 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5c 6e 22   SQLITE_LIMIT\n"
14b50 0a 20 20 22 2e 6c 69 6e 74 20 4f 50 54 49 4f 4e  .  ".lint OPTION
14b60 53 20 20 20 20 20 20 20 20 20 20 52 65 70 6f 72  S          Repor
14b70 74 20 70 6f 74 65 6e 74 69 61 6c 20 73 63 68 65  t potential sche
14b80 6d 61 20 69 73 73 75 65 73 2e 20 4f 70 74 69 6f  ma issues. Optio
14b90 6e 73 3a 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  ns:\n".  "      
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 66 6b 65 79 2d 69 6e 64 65 78 65 73 20     fkey-indexes 
14bc0 20 20 20 20 46 69 6e 64 20 6d 69 73 73 69 6e 67      Find missing
14bd0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 64   foreign key ind
14be0 65 78 65 73 5c 6e 22 0a 23 69 66 6e 64 65 66 20  exes\n".#ifndef 
14bf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
14c00 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 22 2e 6c  _EXTENSION.  ".l
14c10 6f 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59 3f  oad FILE ?ENTRY?
14c20 20 20 20 20 20 4c 6f 61 64 20 61 6e 20 65 78 74       Load an ext
14c30 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 5c 6e  ension library\n
14c40 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 6c 6f 67  ".#endif.  ".log
14c50 20 46 49 4c 45 7c 6f 66 66 20 20 20 20 20 20 20   FILE|off       
14c60 20 20 20 54 75 72 6e 20 6c 6f 67 67 69 6e 67 20     Turn logging 
14c70 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 46 49 4c 45  on or off.  FILE
14c80 20 63 61 6e 20 62 65 20 73 74 64 65 72 72 2f 73   can be stderr/s
14c90 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 6d 6f 64  tdout\n".  ".mod
14ca0 65 20 4d 4f 44 45 20 3f 54 41 42 4c 45 3f 20 20  e MODE ?TABLE?  
14cb0 20 20 20 53 65 74 20 6f 75 74 70 75 74 20 6d 6f     Set output mo
14cc0 64 65 20 77 68 65 72 65 20 4d 4f 44 45 20 69 73  de where MODE is
14cd0 20 6f 6e 65 20 6f 66 3a 5c 6e 22 0a 20 20 22 20   one of:\n".  " 
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cf0 20 20 20 20 20 20 20 20 61 73 63 69 69 20 20 20          ascii   
14d00 20 43 6f 6c 75 6d 6e 73 2f 72 6f 77 73 20 64 65   Columns/rows de
14d10 6c 69 6d 69 74 65 64 20 62 79 20 30 78 31 46 20  limited by 0x1F 
14d20 61 6e 64 20 30 78 31 45 5c 6e 22 0a 20 20 22 20  and 0x1E\n".  " 
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d40 20 20 20 20 20 20 20 20 63 73 76 20 20 20 20 20          csv     
14d50 20 43 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64   Comma-separated
14d60 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 20 20   values\n".  "  
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20 20 20         column   
14d90 4c 65 66 74 2d 61 6c 69 67 6e 65 64 20 63 6f 6c  Left-aligned col
14da0 75 6d 6e 73 2e 20 20 28 53 65 65 20 2e 77 69 64  umns.  (See .wid
14db0 74 68 29 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  th)\n".  "      
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 20 68 74 6d 6c 20 20 20 20 20 48 54 4d 4c     html     HTML
14de0 20 3c 74 61 62 6c 65 3e 20 63 6f 64 65 5c 6e 22   <table> code\n"
14df0 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
14e10 65 72 74 20 20 20 53 51 4c 20 69 6e 73 65 72 74  ert   SQL insert
14e20 20 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72 20   statements for 
14e30 54 41 42 4c 45 5c 6e 22 0a 20 20 22 20 20 20 20  TABLE\n".  "    
14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e50 20 20 20 20 20 6c 69 6e 65 20 20 20 20 20 4f 6e       line     On
14e60 65 20 76 61 6c 75 65 20 70 65 72 20 6c 69 6e 65  e value per line
14e70 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e90 6c 69 73 74 20 20 20 20 20 56 61 6c 75 65 73 20  list     Values 
14ea0 64 65 6c 69 6d 69 74 65 64 20 62 79 20 5c 22 7c  delimited by \"|
14eb0 5c 22 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  \"\n".  "       
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ed0 20 20 71 75 6f 74 65 20 20 20 20 45 73 63 61 70    quote    Escap
14ee0 65 20 61 6e 73 77 65 72 73 20 61 73 20 66 6f 72  e answers as for
14ef0 20 53 51 4c 5c 6e 22 0a 20 20 22 20 20 20 20 20   SQL\n".  "     
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 20 74 61 62 73 20 20 20 20 20 54 61 62      tabs     Tab
14f20 2d 73 65 70 61 72 61 74 65 64 20 76 61 6c 75 65  -separated value
14f30 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  s\n".  "        
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f50 20 74 63 6c 20 20 20 20 20 20 54 43 4c 20 6c 69   tcl      TCL li
14f60 73 74 20 65 6c 65 6d 65 6e 74 73 5c 6e 22 0a 20  st elements\n". 
14f70 20 22 2e 6e 75 6c 6c 76 61 6c 75 65 20 53 54 52   ".nullvalue STR
14f80 49 4e 47 20 20 20 20 20 20 55 73 65 20 53 54 52  ING      Use STR
14f90 49 4e 47 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  ING in place of 
14fa0 4e 55 4c 4c 20 76 61 6c 75 65 73 5c 6e 22 0a 20  NULL values\n". 
14fb0 20 22 2e 6f 6e 63 65 20 46 49 4c 45 4e 41 4d 45   ".once FILENAME
14fc0 20 20 20 20 20 20 20 20 20 4f 75 74 70 75 74 20           Output 
14fd0 66 6f 72 20 74 68 65 20 6e 65 78 74 20 53 51 4c  for the next SQL
14fe0 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 74 6f   command only to
14ff0 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22   FILENAME\n".  "
15000 2e 6f 70 65 6e 20 3f 4f 50 54 49 4f 4e 53 3f 20  .open ?OPTIONS? 
15010 3f 46 49 4c 45 3f 20 43 6c 6f 73 65 20 65 78 69  ?FILE? Close exi
15020 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 61  sting database a
15030 6e 64 20 72 65 6f 70 65 6e 20 46 49 4c 45 5c 6e  nd reopen FILE\n
15040 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
15050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 68                Th
15060 65 20 2d 2d 6e 65 77 20 6f 70 74 69 6f 6e 20 73  e --new option s
15070 74 61 72 74 73 20 77 69 74 68 20 61 6e 20 65 6d  tarts with an em
15080 70 74 79 20 66 69 6c 65 5c 6e 22 0a 20 20 22 2e  pty file\n".  ".
15090 6f 75 74 70 75 74 20 3f 46 49 4c 45 4e 41 4d 45  output ?FILENAME
150a0 3f 20 20 20 20 20 53 65 6e 64 20 6f 75 74 70 75  ?     Send outpu
150b0 74 20 74 6f 20 46 49 4c 45 4e 41 4d 45 20 6f 72  t to FILENAME or
150c0 20 73 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 70   stdout\n".  ".p
150d0 72 69 6e 74 20 53 54 52 49 4e 47 2e 2e 2e 20 20  rint STRING...  
150e0 20 20 20 20 20 50 72 69 6e 74 20 6c 69 74 65 72       Print liter
150f0 61 6c 20 53 54 52 49 4e 47 5c 6e 22 0a 20 20 22  al STRING\n".  "
15100 2e 70 72 6f 6d 70 74 20 4d 41 49 4e 20 43 4f 4e  .prompt MAIN CON
15110 54 49 4e 55 45 20 20 52 65 70 6c 61 63 65 20 74  TINUE  Replace t
15120 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f 6d  he standard prom
15130 70 74 73 5c 6e 22 0a 20 20 22 2e 71 75 69 74 20  pts\n".  ".quit 
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 20 45 78 69 74 20 74 68 69 73 20 70 72 6f 67 72   Exit this progr
15160 61 6d 5c 6e 22 0a 20 20 22 2e 72 65 61 64 20 46  am\n".  ".read F
15170 49 4c 45 4e 41 4d 45 20 20 20 20 20 20 20 20 20  ILENAME         
15180 45 78 65 63 75 74 65 20 53 51 4c 20 69 6e 20 46  Execute SQL in F
15190 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22 2e 72  ILENAME\n".  ".r
151a0 65 73 74 6f 72 65 20 3f 44 42 3f 20 46 49 4c 45  estore ?DB? FILE
151b0 20 20 20 20 20 52 65 73 74 6f 72 65 20 63 6f 6e       Restore con
151c0 74 65 6e 74 20 6f 66 20 44 42 20 28 64 65 66 61  tent of DB (defa
151d0 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29 20 66 72  ult \"main\") fr
151e0 6f 6d 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73  om FILE\n".  ".s
151f0 61 76 65 20 46 49 4c 45 20 20 20 20 20 20 20 20  ave FILE        
15200 20 20 20 20 20 57 72 69 74 65 20 69 6e 2d 6d 65       Write in-me
15210 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 69 6e  mory database in
15220 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73  to FILE\n".  ".s
15230 63 61 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66 20  canstats on|off 
15240 20 20 20 20 20 54 75 72 6e 20 73 71 6c 69 74 65       Turn sqlite
15250 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75  3_stmt_scanstatu
15260 73 28 29 20 6d 65 74 72 69 63 73 20 6f 6e 20 6f  s() metrics on o
15270 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 73 63 68  r off\n".  ".sch
15280 65 6d 61 20 3f 50 41 54 54 45 52 4e 3f 20 20 20  ema ?PATTERN?   
15290 20 20 20 53 68 6f 77 20 74 68 65 20 43 52 45 41     Show the CREA
152a0 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61  TE statements ma
152b0 74 63 68 69 6e 67 20 50 41 54 54 45 52 4e 5c 6e  tching PATTERN\n
152c0 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
152e0 64 64 20 2d 2d 69 6e 64 65 6e 74 20 66 6f 72 20  dd --indent for 
152f0 70 72 65 74 74 79 2d 70 72 69 6e 74 69 6e 67 5c  pretty-printing\
15300 6e 22 0a 20 20 22 2e 73 65 6c 66 74 65 73 74 20  n".  ".selftest 
15310 3f 2d 2d 69 6e 69 74 3f 20 20 20 20 20 52 75 6e  ?--init?     Run
15320 20 74 65 73 74 73 20 64 65 66 69 6e 65 64 20 69   tests defined i
15330 6e 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74  n the SELFTEST t
15340 61 62 6c 65 5c 6e 22 0a 20 20 22 2e 73 65 70 61  able\n".  ".sepa
15350 72 61 74 6f 72 20 43 4f 4c 20 3f 52 4f 57 3f 20  rator COL ?ROW? 
15360 20 20 43 68 61 6e 67 65 20 74 68 65 20 63 6f 6c    Change the col
15370 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 61 6e  umn separator an
15380 64 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 74 68 65  d optionally the
15390 20 72 6f 77 5c 6e 22 0a 20 20 22 20 20 20 20 20   row\n".  "     
153a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153b0 20 20 20 20 73 65 70 61 72 61 74 6f 72 20 66 6f      separator fo
153c0 72 20 62 6f 74 68 20 74 68 65 20 6f 75 74 70 75  r both the outpu
153d0 74 20 6d 6f 64 65 20 61 6e 64 20 2e 69 6d 70 6f  t mode and .impo
153e0 72 74 5c 6e 22 0a 23 69 66 20 64 65 66 69 6e 65  rt\n".#if define
153f0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
15400 53 45 53 53 49 4f 4e 29 0a 20 20 22 2e 73 65 73  SESSION).  ".ses
15410 73 69 6f 6e 20 43 4d 44 20 2e 2e 2e 20 20 20 20  sion CMD ...    
15420 20 20 20 43 72 65 61 74 65 20 6f 72 20 63 6f 6e     Create or con
15430 74 72 6f 6c 20 73 65 73 73 69 6f 6e 73 5c 6e 22  trol sessions\n"
15440 0a 23 65 6e 64 69 66 0a 20 20 22 2e 73 68 61 33  .#endif.  ".sha3
15450 73 75 6d 20 3f 4f 50 54 49 4f 4e 53 2e 2e 2e 3f  sum ?OPTIONS...?
15460 20 20 43 6f 6d 70 75 74 65 20 61 20 53 48 41 33    Compute a SHA3
15470 20 68 61 73 68 20 6f 66 20 64 61 74 61 62 61 73   hash of databas
15480 65 20 63 6f 6e 74 65 6e 74 5c 6e 22 0a 20 20 22  e content\n".  "
15490 2e 73 68 65 6c 6c 20 43 4d 44 20 41 52 47 53 2e  .shell CMD ARGS.
154a0 2e 2e 20 20 20 20 20 52 75 6e 20 43 4d 44 20 41  ..     Run CMD A
154b0 52 47 53 2e 2e 2e 20 69 6e 20 61 20 73 79 73 74  RGS... in a syst
154c0 65 6d 20 73 68 65 6c 6c 5c 6e 22 0a 20 20 22 2e  em shell\n".  ".
154d0 73 68 6f 77 20 20 20 20 20 20 20 20 20 20 20 20  show            
154e0 20 20 20 20 20 20 53 68 6f 77 20 74 68 65 20 63        Show the c
154f0 75 72 72 65 6e 74 20 76 61 6c 75 65 73 20 66 6f  urrent values fo
15500 72 20 76 61 72 69 6f 75 73 20 73 65 74 74 69 6e  r various settin
15510 67 73 5c 6e 22 0a 20 20 22 2e 73 74 61 74 73 20  gs\n".  ".stats 
15520 3f 6f 6e 7c 6f 66 66 3f 20 20 20 20 20 20 20 20  ?on|off?        
15530 53 68 6f 77 20 73 74 61 74 73 20 6f 72 20 74 75  Show stats or tu
15540 72 6e 20 73 74 61 74 73 20 6f 6e 20 6f 72 20 6f  rn stats on or o
15550 66 66 5c 6e 22 0a 20 20 22 2e 73 79 73 74 65 6d  ff\n".  ".system
15560 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20 20 20 20   CMD ARGS...    
15570 52 75 6e 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20  Run CMD ARGS... 
15580 69 6e 20 61 20 73 79 73 74 65 6d 20 73 68 65 6c  in a system shel
15590 6c 5c 6e 22 0a 20 20 22 2e 74 61 62 6c 65 73 20  l\n".  ".tables 
155a0 3f 54 41 42 4c 45 3f 20 20 20 20 20 20 20 20 4c  ?TABLE?        L
155b0 69 73 74 20 6e 61 6d 65 73 20 6f 66 20 74 61 62  ist names of tab
155c0 6c 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  les\n".  "      
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 20 20 20 49 66 20 54 41 42 4c 45 20 73 70 65 63     If TABLE spec
155f0 69 66 69 65 64 2c 20 6f 6e 6c 79 20 6c 69 73 74  ified, only list
15600 20 74 61 62 6c 65 73 20 6d 61 74 63 68 69 6e 67   tables matching
15610 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15630 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 54 41 42  LIKE pattern TAB
15640 4c 45 2e 5c 6e 22 0a 20 20 22 2e 74 65 73 74 63  LE.\n".  ".testc
15650 61 73 65 20 4e 41 4d 45 20 20 20 20 20 20 20 20  ase NAME        
15660 20 42 65 67 69 6e 20 72 65 64 69 72 65 63 74 69   Begin redirecti
15670 6e 67 20 6f 75 74 70 75 74 20 74 6f 20 27 74 65  ng output to 'te
15680 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c  stcase-out.txt'\
15690 6e 22 0a 20 20 22 2e 74 69 6d 65 6f 75 74 20 4d  n".  ".timeout M
156a0 53 20 20 20 20 20 20 20 20 20 20 20 20 54 72 79  S            Try
156b0 20 6f 70 65 6e 69 6e 67 20 6c 6f 63 6b 65 64 20   opening locked 
156c0 74 61 62 6c 65 73 20 66 6f 72 20 4d 53 20 6d 69  tables for MS mi
156d0 6c 6c 69 73 65 63 6f 6e 64 73 5c 6e 22 0a 20 20  lliseconds\n".  
156e0 22 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 20 20  ".timer on|off  
156f0 20 20 20 20 20 20 20 20 54 75 72 6e 20 53 51 4c          Turn SQL
15700 20 74 69 6d 65 72 20 6f 6e 20 6f 72 20 6f 66 66   timer on or off
15710 5c 6e 22 0a 20 20 22 2e 74 72 61 63 65 20 46 49  \n".  ".trace FI
15720 4c 45 7c 6f 66 66 20 20 20 20 20 20 20 20 4f 75  LE|off        Ou
15730 74 70 75 74 20 65 61 63 68 20 53 51 4c 20 73 74  tput each SQL st
15740 61 74 65 6d 65 6e 74 20 61 73 20 69 74 20 69 73  atement as it is
15750 20 72 75 6e 5c 6e 22 0a 20 20 22 2e 76 66 73 69   run\n".  ".vfsi
15760 6e 66 6f 20 3f 41 55 58 3f 20 20 20 20 20 20 20  nfo ?AUX?       
15770 20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62    Information ab
15780 6f 75 74 20 74 68 65 20 74 6f 70 2d 6c 65 76 65  out the top-leve
15790 6c 20 56 46 53 5c 6e 22 0a 20 20 22 2e 76 66 73  l VFS\n".  ".vfs
157a0 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20 20  list            
157b0 20 20 20 4c 69 73 74 20 61 6c 6c 20 61 76 61 69     List all avai
157c0 6c 61 62 6c 65 20 56 46 53 65 73 5c 6e 22 0a 20  lable VFSes\n". 
157d0 20 22 2e 76 66 73 6e 61 6d 65 20 3f 41 55 58 3f   ".vfsname ?AUX?
157e0 20 20 20 20 20 20 20 20 20 50 72 69 6e 74 20 74           Print t
157f0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 56  he name of the V
15800 46 53 20 73 74 61 63 6b 5c 6e 22 0a 20 20 22 2e  FS stack\n".  ".
15810 77 69 64 74 68 20 4e 55 4d 31 20 4e 55 4d 32 20  width NUM1 NUM2 
15820 2e 2e 2e 20 20 20 53 65 74 20 63 6f 6c 75 6d 6e  ...   Set column
15830 20 77 69 64 74 68 73 20 66 6f 72 20 5c 22 63 6f   widths for \"co
15840 6c 75 6d 6e 5c 22 20 6d 6f 64 65 5c 6e 22 0a 20  lumn\" mode\n". 
15850 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
15860 20 20 20 20 20 20 20 20 20 20 20 4e 65 67 61 74             Negat
15870 69 76 65 20 76 61 6c 75 65 73 20 72 69 67 68 74  ive values right
15880 2d 6a 75 73 74 69 66 79 5c 6e 22 0a 3b 0a 0a 23  -justify\n".;..#
15890 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
158a0 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e  E_ENABLE_SESSION
158b0 29 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 68 65  )./*.** Print he
158c0 6c 70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  lp information f
158d0 6f 72 20 74 68 65 20 22 2e 73 65 73 73 69 6f 6e  or the ".session
158e0 73 22 20 63 6f 6d 6d 61 6e 64 0a 2a 2f 0a 76 6f  s" command.*/.vo
158f0 69 64 20 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28  id session_help(
15900 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a  ShellState *p){.
15910 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
15920 6f 75 74 2c 0a 20 20 20 20 22 2e 73 65 73 73 69  out,.    ".sessi
15930 6f 6e 20 3f 4e 41 4d 45 3f 20 53 55 42 43 4f 4d  on ?NAME? SUBCOM
15940 4d 41 4e 44 20 3f 41 52 47 53 2e 2e 2e 3f 5c 6e  MAND ?ARGS...?\n
15950 22 0a 20 20 20 20 22 49 66 20 3f 4e 41 4d 45 3f  ".    "If ?NAME?
15960 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65   is omitted, the
15970 20 66 69 72 73 74 20 64 65 66 69 6e 65 64 20 73   first defined s
15980 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 5c  ession is used.\
15990 6e 22 0a 20 20 20 20 22 53 75 62 63 6f 6d 6d 61  n".    "Subcomma
159a0 6e 64 73 3a 5c 6e 22 0a 20 20 20 20 22 20 20 20  nds:\n".    "   
159b0 61 74 74 61 63 68 20 54 41 42 4c 45 20 20 20 20  attach TABLE    
159c0 20 20 20 20 20 20 20 20 20 41 74 74 61 63 68 20           Attach 
159d0 54 41 42 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20  TABLE\n".    "  
159e0 20 63 68 61 6e 67 65 73 65 74 20 46 49 4c 45 20   changeset FILE 
159f0 20 20 20 20 20 20 20 20 20 20 57 72 69 74 65 20            Write 
15a00 61 20 63 68 61 6e 67 65 73 65 74 20 69 6e 74 6f  a changeset into
15a10 20 46 49 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20   FILE\n".    "  
15a20 20 63 6c 6f 73 65 20 20 20 20 20 20 20 20 20 20   close          
15a30 20 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65 20            Close 
15a40 6f 6e 65 20 73 65 73 73 69 6f 6e 5c 6e 22 0a 20  one session\n". 
15a50 20 20 20 22 20 20 20 65 6e 61 62 6c 65 20 3f 42     "   enable ?B
15a60 4f 4f 4c 45 41 4e 3f 20 20 20 20 20 20 20 20 20  OOLEAN?         
15a70 53 65 74 20 6f 72 20 71 75 65 72 79 20 74 68 65  Set or query the
15a80 20 65 6e 61 62 6c 65 20 62 69 74 5c 6e 22 0a 20   enable bit\n". 
15a90 20 20 20 22 20 20 20 66 69 6c 74 65 72 20 47 4c     "   filter GL
15aa0 4f 42 2e 2e 2e 20 20 20 20 20 20 20 20 20 20 20  OB...           
15ab0 52 65 6a 65 63 74 20 74 61 62 6c 65 73 20 6d 61  Reject tables ma
15ac0 74 63 68 69 6e 67 20 47 4c 4f 42 73 5c 6e 22 0a  tching GLOBs\n".
15ad0 20 20 20 20 22 20 20 20 69 6e 64 69 72 65 63 74      "   indirect
15ae0 20 3f 42 4f 4f 4c 45 41 4e 3f 20 20 20 20 20 20   ?BOOLEAN?      
15af0 20 4d 61 72 6b 20 6f 72 20 71 75 65 72 79 20 74   Mark or query t
15b00 68 65 20 69 6e 64 69 72 65 63 74 20 73 74 61 74  he indirect stat
15b10 75 73 5c 6e 22 0a 20 20 20 20 22 20 20 20 69 73  us\n".    "   is
15b20 65 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20  empty           
15b30 20 20 20 20 20 20 20 51 75 65 72 79 20 77 68 65         Query whe
15b40 74 68 65 72 20 74 68 65 20 73 65 73 73 69 6f 6e  ther the session
15b50 20 69 73 20 65 6d 70 74 79 5c 6e 22 0a 20 20 20   is empty\n".   
15b60 20 22 20 20 20 6c 69 73 74 20 20 20 20 20 20 20   "   list       
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69                Li
15b80 73 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  st currently ope
15b90 6e 20 73 65 73 73 69 6f 6e 20 6e 61 6d 65 73 5c  n session names\
15ba0 6e 22 0a 20 20 20 20 22 20 20 20 6f 70 65 6e 20  n".    "   open 
15bb0 44 42 20 4e 41 4d 45 20 20 20 20 20 20 20 20 20  DB NAME         
15bc0 20 20 20 20 4f 70 65 6e 20 61 20 6e 65 77 20 73      Open a new s
15bd0 65 73 73 69 6f 6e 20 6f 6e 20 44 42 5c 6e 22 0a  ession on DB\n".
15be0 20 20 20 20 22 20 20 20 70 61 74 63 68 73 65 74      "   patchset
15bf0 20 46 49 4c 45 20 20 20 20 20 20 20 20 20 20 20   FILE           
15c00 20 57 72 69 74 65 20 61 20 70 61 74 63 68 73 65   Write a patchse
15c10 74 20 69 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a 20  t into FILE\n". 
15c20 20 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f   );.}.#endif.../
15c30 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72 65  * Forward refere
15c40 6e 63 65 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nce */.static in
15c50 74 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28  t process_input(
15c60 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 46  ShellState *p, F
15c70 49 4c 45 20 2a 69 6e 29 3b 0a 0a 2f 2a 0a 2a 2a  ILE *in);../*.**
15c80 20 52 65 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   Read the conten
15c90 74 20 6f 66 20 66 69 6c 65 20 7a 4e 61 6d 65 20  t of file zName 
15ca0 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  into memory obta
15cb0 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
15cc0 33 5f 6d 61 6c 6c 6f 63 36 34 28 29 0a 2a 2a 20  3_malloc64().** 
15cd0 61 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69  and return a poi
15ce0 6e 74 65 72 20 74 6f 20 74 68 65 20 62 75 66 66  nter to the buff
15cf0 65 72 2e 20 54 68 65 20 63 61 6c 6c 65 72 20 69  er. The caller i
15d00 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
15d10 72 20 66 72 65 65 69 6e 67 0a 2a 2a 20 74 68 65  r freeing.** the
15d20 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 0a 2a 2a 20 49   memory..**.** I
15d30 66 20 70 61 72 61 6d 65 74 65 72 20 70 6e 42 79  f parameter pnBy
15d40 74 65 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  te is not NULL, 
15d50 28 2a 70 6e 42 79 74 65 29 20 69 73 20 73 65 74  (*pnByte) is set
15d60 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
15d70 66 20 62 79 74 65 73 0a 2a 2a 20 72 65 61 64 2e  f bytes.** read.
15d80 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 63 6f 6e 76 65  .**.** For conve
15d90 6e 69 65 6e 63 65 2c 20 61 20 6e 75 6c 2d 74 65  nience, a nul-te
15da0 72 6d 69 6e 61 74 6f 72 20 62 79 74 65 20 69 73  rminator byte is
15db0 20 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64   always appended
15dc0 20 74 6f 20 74 68 65 20 64 61 74 61 20 72 65 61   to the data rea
15dd0 64 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 66 69  d.** from the fi
15de0 6c 65 20 62 65 66 6f 72 65 20 74 68 65 20 62 75  le before the bu
15df0 66 66 65 72 20 69 73 20 72 65 74 75 72 6e 65 64  ffer is returned
15e00 2e 20 54 68 69 73 20 62 79 74 65 20 69 73 20 6e  . This byte is n
15e10 6f 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 0a 2a  ot included in.*
15e20 2a 20 74 68 65 20 66 69 6e 61 6c 20 76 61 6c 75  * the final valu
15e30 65 20 6f 66 20 28 2a 70 6e 42 79 74 65 29 2c 20  e of (*pnByte), 
15e40 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e 0a 2a  if applicable..*
15e50 2a 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74  *.** NULL is ret
15e60 75 72 6e 65 64 20 69 66 20 61 6e 79 20 65 72 72  urned if any err
15e70 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
15e80 64 2e 20 54 68 65 20 66 69 6e 61 6c 20 76 61 6c  d. The final val
15e90 75 65 20 6f 66 20 2a 70 6e 42 79 74 65 0a 2a 2a  ue of *pnByte.**
15ea0 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e   is undefined in
15eb0 20 74 68 69 73 20 63 61 73 65 2e 0a 2a 2f 0a 73   this case..*/.s
15ec0 74 61 74 69 63 20 63 68 61 72 20 2a 72 65 61 64  tatic char *read
15ed0 46 69 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20  File(const char 
15ee0 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 2a 70 6e 42  *zName, int *pnB
15ef0 79 74 65 29 7b 0a 20 20 46 49 4c 45 20 2a 69 6e  yte){.  FILE *in
15f00 20 3d 20 66 6f 70 65 6e 28 7a 4e 61 6d 65 2c 20   = fopen(zName, 
15f10 22 72 62 22 29 3b 0a 20 20 6c 6f 6e 67 20 6e 49  "rb");.  long nI
15f20 6e 3b 0a 20 20 73 69 7a 65 5f 74 20 6e 52 65 61  n;.  size_t nRea
15f30 64 3b 0a 20 20 63 68 61 72 20 2a 70 42 75 66 3b  d;.  char *pBuf;
15f40 0a 20 20 69 66 28 20 69 6e 3d 3d 30 20 29 20 72  .  if( in==0 ) r
15f50 65 74 75 72 6e 20 30 3b 0a 20 20 66 73 65 65 6b  eturn 0;.  fseek
15f60 28 69 6e 2c 20 30 2c 20 53 45 45 4b 5f 45 4e 44  (in, 0, SEEK_END
15f70 29 3b 0a 20 20 6e 49 6e 20 3d 20 66 74 65 6c 6c  );.  nIn = ftell
15f80 28 69 6e 29 3b 0a 20 20 72 65 77 69 6e 64 28 69  (in);.  rewind(i
15f90 6e 29 3b 0a 20 20 70 42 75 66 20 3d 20 73 71 6c  n);.  pBuf = sql
15fa0 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 20 6e  ite3_malloc64( n
15fb0 49 6e 2b 31 20 29 3b 0a 20 20 69 66 28 20 70 42  In+1 );.  if( pB
15fc0 75 66 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  uf==0 ) return 0
15fd0 3b 0a 20 20 6e 52 65 61 64 20 3d 20 66 72 65 61  ;.  nRead = frea
15fe0 64 28 70 42 75 66 2c 20 6e 49 6e 2c 20 31 2c 20  d(pBuf, nIn, 1, 
15ff0 69 6e 29 3b 0a 20 20 66 63 6c 6f 73 65 28 69 6e  in);.  fclose(in
16000 29 3b 0a 20 20 69 66 28 20 6e 52 65 61 64 21 3d  );.  if( nRead!=
16010 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
16020 5f 66 72 65 65 28 70 42 75 66 29 3b 0a 20 20 20  _free(pBuf);.   
16030 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
16040 20 70 42 75 66 5b 6e 49 6e 5d 20 3d 20 30 3b 0a   pBuf[nIn] = 0;.
16050 20 20 69 66 28 20 70 6e 42 79 74 65 20 29 20 2a    if( pnByte ) *
16060 70 6e 42 79 74 65 20 3d 20 6e 49 6e 3b 0a 20 20  pnByte = nIn;.  
16070 72 65 74 75 72 6e 20 70 42 75 66 3b 0a 7d 0a 0a  return pBuf;.}..
16080 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
16090 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f  TE_ENABLE_SESSIO
160a0 4e 29 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61  N)./*.** Close a
160b0 20 73 69 6e 67 6c 65 20 4f 70 65 6e 53 65 73 73   single OpenSess
160c0 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 72  ion object and r
160d0 65 6c 65 61 73 65 20 61 6c 6c 20 6f 66 20 69 74  elease all of it
160e0 73 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  s associated.** 
160f0 72 65 73 6f 75 72 63 65 73 2e 0a 2a 2f 0a 73 74  resources..*/.st
16100 61 74 69 63 20 76 6f 69 64 20 73 65 73 73 69 6f  atic void sessio
16110 6e 5f 63 6c 6f 73 65 28 4f 70 65 6e 53 65 73 73  n_close(OpenSess
16120 69 6f 6e 20 2a 70 53 65 73 73 69 6f 6e 29 7b 0a  ion *pSession){.
16130 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
16140 65 33 73 65 73 73 69 6f 6e 5f 64 65 6c 65 74 65  e3session_delete
16150 28 70 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20  (pSession->p);. 
16160 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53   sqlite3_free(pS
16170 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 29 3b 0a  ession->zName);.
16180 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 53 65    for(i=0; i<pSe
16190 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20  ssion->nFilter; 
161a0 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
161b0 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e 2d  3_free(pSession-
161c0 3e 61 7a 46 69 6c 74 65 72 5b 69 5d 29 3b 0a 20  >azFilter[i]);. 
161d0 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65   }.  sqlite3_fre
161e0 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  e(pSession->azFi
161f0 6c 74 65 72 29 3b 0a 20 20 6d 65 6d 73 65 74 28  lter);.  memset(
16200 70 53 65 73 73 69 6f 6e 2c 20 30 2c 20 73 69 7a  pSession, 0, siz
16210 65 6f 66 28 4f 70 65 6e 53 65 73 73 69 6f 6e 29  eof(OpenSession)
16220 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
16230 2a 2a 20 43 6c 6f 73 65 20 61 6c 6c 20 4f 70 65  ** Close all Ope
16240 6e 53 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 73  nSession objects
16250 20 61 6e 64 20 72 65 6c 65 61 73 65 20 61 6c 6c   and release all
16260 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 73 6f   associated reso
16270 75 72 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  urces..*/.#if de
16280 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
16290 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 73 74 61  BLE_SESSION).sta
162a0 74 69 63 20 76 6f 69 64 20 73 65 73 73 69 6f 6e  tic void session
162b0 5f 63 6c 6f 73 65 5f 61 6c 6c 28 53 68 65 6c 6c  _close_all(Shell
162c0 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69 6e 74  State *p){.  int
162d0 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   i;.  for(i=0; i
162e0 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b  <p->nSession; i+
162f0 2b 29 7b 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f  +){.    session_
16300 63 6c 6f 73 65 28 26 70 2d 3e 61 53 65 73 73 69  close(&p->aSessi
16310 6f 6e 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 70 2d  on[i]);.  }.  p-
16320 3e 6e 53 65 73 73 69 6f 6e 20 3d 20 30 3b 0a 7d  >nSession = 0;.}
16330 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
16340 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c  session_close_al
16350 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
16360 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** Implementatio
16370 6e 20 6f 66 20 74 68 65 20 78 46 69 6c 74 65 72  n of the xFilter
16380 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
16390 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 2e 20 20   open session.  
163a0 4f 6d 69 74 0a 2a 2a 20 61 6e 79 20 74 61 62 6c  Omit.** any tabl
163b0 65 73 20 6e 61 6d 65 64 20 62 79 20 22 2e 73 65  es named by ".se
163c0 73 73 69 6f 6e 20 66 69 6c 74 65 72 22 20 62 75  ssion filter" bu
163d0 74 20 6c 65 74 20 61 6c 6c 20 6f 74 68 65 72 20  t let all other 
163e0 74 61 62 6c 65 20 74 68 72 6f 75 67 68 2e 0a 2a  table through..*
163f0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
16400 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53  LITE_ENABLE_SESS
16410 49 4f 4e 29 0a 73 74 61 74 69 63 20 69 6e 74 20  ION).static int 
16420 73 65 73 73 69 6f 6e 5f 66 69 6c 74 65 72 28 76  session_filter(v
16430 6f 69 64 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74  oid *pCtx, const
16440 20 63 68 61 72 20 2a 7a 54 61 62 29 7b 0a 20 20   char *zTab){.  
16450 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70 53 65  OpenSession *pSe
16460 73 73 69 6f 6e 20 3d 20 28 4f 70 65 6e 53 65 73  ssion = (OpenSes
16470 73 69 6f 6e 2a 29 70 43 74 78 3b 0a 20 20 69 6e  sion*)pCtx;.  in
16480 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  t i;.  for(i=0; 
16490 69 3c 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c  i<pSession->nFil
164a0 74 65 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  ter; i++){.    i
164b0 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c  f( sqlite3_strgl
164c0 6f 62 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46  ob(pSession->azF
164d0 69 6c 74 65 72 5b 69 5d 2c 20 7a 54 61 62 29 3d  ilter[i], zTab)=
164e0 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
164f0 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d   }.  return 1;.}
16500 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
16510 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74  ake sure the dat
16520 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2e 20 20  abase is open.  
16530 49 66 20 69 74 20 69 73 20 6e 6f 74 2c 20 74 68  If it is not, th
16540 65 6e 20 6f 70 65 6e 20 69 74 2e 20 20 49 66 0a  en open it.  If.
16550 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
16560 66 61 69 6c 73 20 74 6f 20 6f 70 65 6e 2c 20 70  fails to open, p
16570 72 69 6e 74 20 61 6e 20 65 72 72 6f 72 20 6d 65  rint an error me
16580 73 73 61 67 65 20 61 6e 64 20 65 78 69 74 2e 0a  ssage and exit..
16590 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
165a0 70 65 6e 5f 64 62 28 53 68 65 6c 6c 53 74 61 74  pen_db(ShellStat
165b0 65 20 2a 70 2c 20 69 6e 74 20 6b 65 65 70 41 6c  e *p, int keepAl
165c0 69 76 65 29 7b 0a 20 20 69 66 28 20 70 2d 3e 64  ive){.  if( p->d
165d0 62 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  b==0 ){.    sqli
165e0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
165f0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6f 70  ;.    sqlite3_op
16600 65 6e 28 70 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d  en(p->zDbFilenam
16610 65 2c 20 26 70 2d 3e 64 62 29 3b 0a 20 20 20 20  e, &p->db);.    
16620 67 6c 6f 62 61 6c 44 62 20 3d 20 70 2d 3e 64 62  globalDb = p->db
16630 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d  ;.    if( p->db=
16640 3d 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4f 4b 21  =0 || SQLITE_OK!
16650 3d 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65  =sqlite3_errcode
16660 28 70 2d 3e 64 62 29 20 29 7b 0a 20 20 20 20 20  (p->db) ){.     
16670 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
16680 65 72 72 2c 22 45 72 72 6f 72 3a 20 75 6e 61 62  err,"Error: unab
16690 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62  le to open datab
166a0 61 73 65 20 5c 22 25 73 5c 22 3a 20 25 73 5c 6e  ase \"%s\": %s\n
166b0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ",.          p->
166c0 7a 44 62 46 69 6c 65 6e 61 6d 65 2c 20 73 71 6c  zDbFilename, sql
166d0 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
166e0 62 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6b  b));.      if( k
166f0 65 65 70 41 6c 69 76 65 20 29 20 72 65 74 75 72  eepAlive ) retur
16700 6e 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31 29  n;.      exit(1)
16710 3b 0a 20 20 20 20 7d 0a 23 69 66 6e 64 65 66 20  ;.    }.#ifndef 
16720 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
16730 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 20 20 73  _EXTENSION.    s
16740 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f  qlite3_enable_lo
16750 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 70 2d 3e  ad_extension(p->
16760 64 62 2c 20 31 29 3b 0a 23 65 6e 64 69 66 0a 20  db, 1);.#endif. 
16770 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 69     sqlite3_filei
16780 6f 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 30 2c  o_init(p->db, 0,
16790 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
167a0 5f 73 68 61 74 68 72 65 65 5f 69 6e 69 74 28 70  _shathree_init(p
167b0 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 20  ->db, 0, 0);.   
167c0 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74   sqlite3_complet
167d0 69 6f 6e 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20  ion_init(p->db, 
167e0 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  0, 0);.    sqlit
167f0 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
16800 6f 6e 28 70 2d 3e 64 62 2c 20 22 73 68 65 6c 6c  on(p->db, "shell
16810 5f 61 64 64 5f 73 63 68 65 6d 61 22 2c 20 32 2c  _add_schema", 2,
16820 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
16830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65               she
16850 6c 6c 41 64 64 53 63 68 65 6d 61 4e 61 6d 65 2c  llAddSchemaName,
16860 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 23   0, 0);.  }.}..#
16870 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 45  if HAVE_READLINE
16880 20 7c 7c 20 48 41 56 45 5f 45 44 49 54 4c 49 4e   || HAVE_EDITLIN
16890 45 0a 2f 2a 0a 2a 2a 20 52 65 61 64 6c 69 6e 65  E./*.** Readline
168a0 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 63 61 6c 6c   completion call
168b0 62 61 63 6b 73 0a 2a 2f 0a 73 74 61 74 69 63 20  backs.*/.static 
168c0 63 68 61 72 20 2a 72 65 61 64 6c 69 6e 65 5f 63  char *readline_c
168d0 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72 61  ompletion_genera
168e0 74 6f 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  tor(const char *
168f0 74 65 78 74 2c 20 69 6e 74 20 73 74 61 74 65 29  text, int state)
16900 7b 0a 20 20 73 74 61 74 69 63 20 73 71 6c 69 74  {.  static sqlit
16910 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d  e3_stmt *pStmt =
16920 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65 74   0;.  char *zRet
16930 3b 0a 20 20 69 66 28 20 73 74 61 74 65 3d 3d 30  ;.  if( state==0
16940 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   ){.    char *zS
16950 71 6c 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ql;.    sqlite3_
16960 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
16970 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
16980 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c  te3_mprintf("SEL
16990 45 43 54 20 44 49 53 54 49 4e 43 54 20 63 61 6e  ECT DISTINCT can
169a0 64 69 64 61 74 65 20 43 4f 4c 4c 41 54 45 20 6e  didate COLLATE n
169b0 6f 63 61 73 65 22 0a 20 20 20 20 20 20 20 20 20  ocase".         
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169d0 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d 70 6c 65    "  FROM comple
169e0 74 69 6f 6e 28 25 51 29 20 4f 52 44 45 52 20 42  tion(%Q) ORDER B
169f0 59 20 31 22 2c 20 74 65 78 74 29 3b 0a 20 20 20  Y 1", text);.   
16a00 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
16a10 5f 76 32 28 67 6c 6f 62 61 6c 44 62 2c 20 7a 53  _v2(globalDb, zS
16a20 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  ql, -1, &pStmt, 
16a30 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
16a40 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 0a  free(zSql);.  }.
16a50 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
16a60 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
16a70 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 7a 52 65  E_ROW ){.    zRe
16a80 74 20 3d 20 73 74 72 64 75 70 28 28 63 6f 6e 73  t = strdup((cons
16a90 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
16aa0 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d  column_text(pStm
16ab0 74 2c 20 30 29 29 3b 0a 20 20 7d 65 6c 73 65 7b  t, 0));.  }else{
16ac0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
16ad0 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
16ae0 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20    pStmt = 0;.   
16af0 20 7a 52 65 74 20 3d 20 30 3b 0a 20 20 7d 0a 20   zRet = 0;.  }. 
16b00 20 72 65 74 75 72 6e 20 7a 52 65 74 3b 0a 7d 0a   return zRet;.}.
16b10 73 74 61 74 69 63 20 63 68 61 72 20 2a 2a 72 65  static char **re
16b20 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 69 6f  adline_completio
16b30 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54  n(const char *zT
16b40 65 78 74 2c 20 69 6e 74 20 69 53 74 61 72 74 2c  ext, int iStart,
16b50 20 69 6e 74 20 69 45 6e 64 29 7b 0a 20 20 72 6c   int iEnd){.  rl
16b60 5f 61 74 74 65 6d 70 74 65 64 5f 63 6f 6d 70 6c  _attempted_compl
16b70 65 74 69 6f 6e 5f 6f 76 65 72 20 3d 20 31 3b 0a  etion_over = 1;.
16b80 20 20 72 65 74 75 72 6e 20 72 6c 5f 63 6f 6d 70    return rl_comp
16b90 6c 65 74 69 6f 6e 5f 6d 61 74 63 68 65 73 28 7a  letion_matches(z
16ba0 54 65 78 74 2c 20 72 65 61 64 6c 69 6e 65 5f 63  Text, readline_c
16bb0 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72 61  ompletion_genera
16bc0 74 6f 72 29 3b 0a 7d 0a 0a 23 65 6c 69 66 20 48  tor);.}..#elif H
16bd0 41 56 45 5f 4c 49 4e 45 4e 4f 49 53 45 0a 2f 2a  AVE_LINENOISE./*
16be0 0a 2a 2a 20 4c 69 6e 65 6e 6f 69 73 65 20 63 6f  .** Linenoise co
16bf0 6d 70 6c 65 74 69 6f 6e 20 63 61 6c 6c 62 61 63  mpletion callbac
16c00 6b 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  k.*/.static void
16c10 20 6c 69 6e 65 6e 6f 69 73 65 5f 63 6f 6d 70 6c   linenoise_compl
16c20 65 74 69 6f 6e 28 63 6f 6e 73 74 20 63 68 61 72  etion(const char
16c30 20 2a 7a 4c 69 6e 65 2c 20 6c 69 6e 65 6e 6f 69   *zLine, linenoi
16c40 73 65 43 6f 6d 70 6c 65 74 69 6f 6e 73 20 2a 6c  seCompletions *l
16c50 63 29 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 20  c){.  int nLine 
16c60 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4c  = (int)strlen(zL
16c70 69 6e 65 29 3b 0a 20 20 69 6e 74 20 69 2c 20 69  ine);.  int i, i
16c80 53 74 61 72 74 3b 0a 20 20 73 71 6c 69 74 65 33  Start;.  sqlite3
16c90 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30  _stmt *pStmt = 0
16ca0 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  ;.  char *zSql;.
16cb0 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 30    char zBuf[1000
16cc0 5d 3b 0a 0a 20 20 69 66 28 20 6e 4c 69 6e 65 3e  ];..  if( nLine>
16cd0 73 69 7a 65 6f 66 28 7a 42 75 66 29 2d 33 30 20  sizeof(zBuf)-30 
16ce0 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
16cf0 7a 4c 69 6e 65 5b 30 5d 3d 3d 27 2e 27 20 29 20  zLine[0]=='.' ) 
16d00 72 65 74 75 72 6e 3b 0a 20 20 66 6f 72 28 69 3d  return;.  for(i=
16d10 6e 4c 69 6e 65 2d 31 3b 20 69 3e 3d 30 20 26 26  nLine-1; i>=0 &&
16d20 20 28 69 73 61 6c 6e 75 6d 28 7a 4c 69 6e 65 5b   (isalnum(zLine[
16d30 69 5d 29 20 7c 7c 20 7a 4c 69 6e 65 5b 69 5d 3d  i]) || zLine[i]=
16d40 3d 27 5f 27 29 3b 20 69 2d 2d 29 7b 7d 0a 20 20  ='_'); i--){}.  
16d50 69 66 28 20 69 3d 3d 6e 4c 69 6e 65 2d 31 20 29  if( i==nLine-1 )
16d60 20 72 65 74 75 72 6e 3b 0a 20 20 69 53 74 61 72   return;.  iStar
16d70 74 20 3d 20 69 2b 31 3b 0a 20 20 6d 65 6d 63 70  t = i+1;.  memcp
16d80 79 28 7a 42 75 66 2c 20 7a 4c 69 6e 65 2c 20 69  y(zBuf, zLine, i
16d90 53 74 61 72 74 29 3b 0a 20 20 7a 53 71 6c 20 3d  Start);.  zSql =
16da0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
16db0 28 22 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43  ("SELECT DISTINC
16dc0 54 20 63 61 6e 64 69 64 61 74 65 20 43 4f 4c 4c  T candidate COLL
16dd0 41 54 45 20 6e 6f 63 61 73 65 22 0a 20 20 20 20  ATE nocase".    
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16df0 20 20 20 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d       "  FROM com
16e00 70 6c 65 74 69 6f 6e 28 25 51 2c 25 51 29 20 4f  pletion(%Q,%Q) O
16e10 52 44 45 52 20 42 59 20 31 22 2c 0a 20 20 20 20  RDER BY 1",.    
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e30 20 20 20 20 20 26 7a 4c 69 6e 65 5b 69 53 74 61       &zLine[iSta
16e40 72 74 5d 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 73  rt], zLine);.  s
16e50 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
16e60 32 28 67 6c 6f 62 61 6c 44 62 2c 20 7a 53 71 6c  2(globalDb, zSql
16e70 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
16e80 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
16e90 28 7a 53 71 6c 29 3b 0a 20 20 73 71 6c 69 74 65  (zSql);.  sqlite
16ea0 33 5f 65 78 65 63 28 67 6c 6f 62 61 6c 44 62 2c  3_exec(globalDb,
16eb0 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f   "PRAGMA page_co
16ec0 75 6e 74 22 2c 20 30 2c 20 30 2c 20 30 29 3b 20  unt", 0, 0, 0); 
16ed0 2f 2a 20 4c 6f 61 64 20 74 68 65 20 73 63 68 65  /* Load the sche
16ee0 6d 61 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 73  ma */.  while( s
16ef0 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
16f00 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  t)==SQLITE_ROW )
16f10 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
16f20 20 2a 7a 43 6f 6d 70 6c 65 74 69 6f 6e 20 3d 20   *zCompletion = 
16f30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
16f40 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
16f50 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  (pStmt, 0);.    
16f60 69 6e 74 20 6e 43 6f 6d 70 6c 65 74 69 6f 6e 20  int nCompletion 
16f70 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
16f80 5f 62 79 74 65 73 28 70 53 74 6d 74 2c 20 30 29  _bytes(pStmt, 0)
16f90 3b 0a 20 20 20 20 69 66 28 20 69 53 74 61 72 74  ;.    if( iStart
16fa0 2b 6e 43 6f 6d 70 6c 65 74 69 6f 6e 20 3c 20 73  +nCompletion < s
16fb0 69 7a 65 6f 66 28 7a 42 75 66 29 2d 31 20 29 7b  izeof(zBuf)-1 ){
16fc0 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 7a 42  .      memcpy(zB
16fd0 75 66 2b 69 53 74 61 72 74 2c 20 7a 43 6f 6d 70  uf+iStart, zComp
16fe0 6c 65 74 69 6f 6e 2c 20 6e 43 6f 6d 70 6c 65 74  letion, nComplet
16ff0 69 6f 6e 2b 31 29 3b 0a 20 20 20 20 20 20 6c 69  ion+1);.      li
17000 6e 65 6e 6f 69 73 65 41 64 64 43 6f 6d 70 6c 65  nenoiseAddComple
17010 74 69 6f 6e 28 6c 63 2c 20 7a 42 75 66 29 3b 0a  tion(lc, zBuf);.
17020 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
17030 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
17040 6d 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  mt);.}.#endif../
17050 2a 0a 2a 2a 20 44 6f 20 43 2d 6c 61 6e 67 75 61  *.** Do C-langua
17060 67 65 20 73 74 79 6c 65 20 64 65 71 75 6f 74 69  ge style dequoti
17070 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 5c 61 20  ng..**.**    \a 
17080 20 20 20 2d 3e 20 61 6c 61 72 6d 0a 2a 2a 20 20     -> alarm.**  
17090 20 20 5c 62 20 20 20 20 2d 3e 20 62 61 63 6b 73    \b    -> backs
170a0 70 61 63 65 0a 2a 2a 20 20 20 20 5c 74 20 20 20  pace.**    \t   
170b0 20 2d 3e 20 74 61 62 0a 2a 2a 20 20 20 20 5c 6e   -> tab.**    \n
170c0 20 20 20 20 2d 3e 20 6e 65 77 6c 69 6e 65 0a 2a      -> newline.*
170d0 2a 20 20 20 20 5c 76 20 20 20 20 2d 3e 20 76 65  *    \v    -> ve
170e0 72 74 69 63 61 6c 20 74 61 62 0a 2a 2a 20 20 20  rtical tab.**   
170f0 20 5c 66 20 20 20 20 2d 3e 20 66 6f 72 6d 20 66   \f    -> form f
17100 65 65 64 0a 2a 2a 20 20 20 20 5c 72 20 20 20 20  eed.**    \r    
17110 2d 3e 20 63 61 72 72 69 61 67 65 20 72 65 74 75  -> carriage retu
17120 72 6e 0a 2a 2a 20 20 20 20 5c 73 20 20 20 20 2d  rn.**    \s    -
17130 3e 20 73 70 61 63 65 0a 2a 2a 20 20 20 20 5c 22  > space.**    \"
17140 20 20 20 20 2d 3e 20 22 0a 2a 2a 20 20 20 20 5c      -> ".**    \
17150 27 20 20 20 20 2d 3e 20 27 0a 2a 2a 20 20 20 20  '    -> '.**    
17160 5c 5c 20 20 20 20 2d 3e 20 62 61 63 6b 73 6c 61  \\    -> backsla
17170 73 68 0a 2a 2a 20 20 20 20 5c 4e 4e 4e 20 20 2d  sh.**    \NNN  -
17180 3e 20 61 73 63 69 69 20 63 68 61 72 61 63 74 65  > ascii characte
17190 72 20 4e 4e 4e 20 69 6e 20 6f 63 74 61 6c 0a 2a  r NNN in octal.*
171a0 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65  /.static void re
171b0 73 6f 6c 76 65 5f 62 61 63 6b 73 6c 61 73 68 65  solve_backslashe
171c0 73 28 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e  s(char *z){.  in
171d0 74 20 69 2c 20 6a 3b 0a 20 20 63 68 61 72 20 63  t i, j;.  char c
171e0 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26  ;.  while( *z &&
171f0 20 2a 7a 21 3d 27 5c 5c 27 20 29 20 7a 2b 2b 3b   *z!='\\' ) z++;
17200 0a 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 28 63  .  for(i=j=0; (c
17210 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b   = z[i])!=0; i++
17220 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  , j++){.    if( 
17230 63 3d 3d 27 5c 5c 27 20 26 26 20 7a 5b 69 2b 31  c=='\\' && z[i+1
17240 5d 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 63 20  ]!=0 ){.      c 
17250 3d 20 7a 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20 20  = z[++i];.      
17260 69 66 28 20 63 3d 3d 27 61 27 20 29 7b 0a 20 20  if( c=='a' ){.  
17270 20 20 20 20 20 20 63 20 3d 20 27 5c 61 27 3b 0a        c = '\a';.
17280 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
17290 63 3d 3d 27 62 27 20 29 7b 0a 20 20 20 20 20 20  c=='b' ){.      
172a0 20 20 63 20 3d 20 27 5c 62 27 3b 0a 20 20 20 20    c = '\b';.    
172b0 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
172c0 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20  t' ){.        c 
172d0 3d 20 27 5c 74 27 3b 0a 20 20 20 20 20 20 7d 65  = '\t';.      }e
172e0 6c 73 65 20 69 66 28 20 63 3d 3d 27 6e 27 20 29  lse if( c=='n' )
172f0 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c  {.        c = '\
17300 6e 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  n';.      }else 
17310 69 66 28 20 63 3d 3d 27 76 27 20 29 7b 0a 20 20  if( c=='v' ){.  
17320 20 20 20 20 20 20 63 20 3d 20 27 5c 76 27 3b 0a        c = '\v';.
17330 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
17340 63 3d 3d 27 66 27 20 29 7b 0a 20 20 20 20 20 20  c=='f' ){.      
17350 20 20 63 20 3d 20 27 5c 66 27 3b 0a 20 20 20 20    c = '\f';.    
17360 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
17370 72 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20  r' ){.        c 
17380 3d 20 27 5c 72 27 3b 0a 20 20 20 20 20 20 7d 65  = '\r';.      }e
17390 6c 73 65 20 69 66 28 20 63 3d 3d 27 22 27 20 29  lse if( c=='"' )
173a0 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 22  {.        c = '"
173b0 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ';.      }else i
173c0 66 28 20 63 3d 3d 27 5c 27 27 20 29 7b 0a 20 20  f( c=='\'' ){.  
173d0 20 20 20 20 20 20 63 20 3d 20 27 5c 27 27 3b 0a        c = '\'';.
173e0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
173f0 63 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20 20 20 20  c=='\\' ){.     
17400 20 20 20 63 20 3d 20 27 5c 5c 27 3b 0a 20 20 20     c = '\\';.   
17410 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3e 3d     }else if( c>=
17420 27 30 27 20 26 26 20 63 3c 3d 27 37 27 20 29 7b  '0' && c<='7' ){
17430 0a 20 20 20 20 20 20 20 20 63 20 2d 3d 20 27 30  .        c -= '0
17440 27 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a  ';.        if( z
17450 5b 69 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b  [i+1]>='0' && z[
17460 69 2b 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20  i+1]<='7' ){.   
17470 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
17480 20 20 20 20 20 20 63 20 3d 20 28 63 3c 3c 33 29        c = (c<<3)
17490 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b 0a 20   + z[i] - '0';. 
174a0 20 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69           if( z[i
174b0 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 69 2b  +1]>='0' && z[i+
174c0 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20 20 20  1]<='7' ){.     
174d0 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
174e0 20 20 20 20 20 20 20 20 63 20 3d 20 28 63 3c 3c          c = (c<<
174f0 33 29 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b  3) + z[i] - '0';
17500 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
17510 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
17520 20 20 20 7d 0a 20 20 20 20 7a 5b 6a 5d 20 3d 20     }.    z[j] = 
17530 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6a 3c 69  c;.  }.  if( j<i
17540 20 29 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 7d 0a 0a   ) z[j] = 0;.}..
17550 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
17560 20 76 61 6c 75 65 20 6f 66 20 61 20 68 65 78 61   value of a hexa
17570 64 65 63 69 6d 61 6c 20 64 69 67 69 74 2e 20 20  decimal digit.  
17580 52 65 74 75 72 6e 20 2d 31 20 69 66 20 74 68 65  Return -1 if the
17590 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20 6e 6f 74   input.** is not
175a0 20 61 20 68 65 78 20 64 69 67 69 74 2e 0a 2a 2f   a hex digit..*/
175b0 0a 73 74 61 74 69 63 20 69 6e 74 20 68 65 78 44  .static int hexD
175c0 69 67 69 74 56 61 6c 75 65 28 63 68 61 72 20 63  igitValue(char c
175d0 29 7b 0a 20 20 69 66 28 20 63 3e 3d 27 30 27 20  ){.  if( c>='0' 
175e0 26 26 20 63 3c 3d 27 39 27 20 29 20 72 65 74 75  && c<='9' ) retu
175f0 72 6e 20 63 20 2d 20 27 30 27 3b 0a 20 20 69 66  rn c - '0';.  if
17600 28 20 63 3e 3d 27 61 27 20 26 26 20 63 3c 3d 27  ( c>='a' && c<='
17610 66 27 20 29 20 72 65 74 75 72 6e 20 63 20 2d 20  f' ) return c - 
17620 27 61 27 20 2b 20 31 30 3b 0a 20 20 69 66 28 20  'a' + 10;.  if( 
17630 63 3e 3d 27 41 27 20 26 26 20 63 3c 3d 27 46 27  c>='A' && c<='F'
17640 20 29 20 72 65 74 75 72 6e 20 63 20 2d 20 27 41   ) return c - 'A
17650 27 20 2b 20 31 30 3b 0a 20 20 72 65 74 75 72 6e  ' + 10;.  return
17660 20 2d 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e   -1;.}../*.** In
17670 74 65 72 70 72 65 74 20 7a 41 72 67 20 61 73 20  terpret zArg as 
17680 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
17690 2c 20 70 6f 73 73 69 62 6c 79 20 77 69 74 68 20  , possibly with 
176a0 73 75 66 66 69 78 65 73 2e 0a 2a 2f 0a 73 74 61  suffixes..*/.sta
176b0 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  tic sqlite3_int6
176c0 34 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63  4 integerValue(c
176d0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 29  onst char *zArg)
176e0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  {.  sqlite3_int6
176f0 34 20 76 20 3d 20 30 3b 0a 20 20 73 74 61 74 69  4 v = 0;.  stati
17700 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 7b  c const struct {
17710 20 63 68 61 72 20 2a 7a 53 75 66 66 69 78 3b 20   char *zSuffix; 
17720 69 6e 74 20 69 4d 75 6c 74 3b 20 7d 20 61 4d 75  int iMult; } aMu
17730 6c 74 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 22  lt[] = {.    { "
17740 4b 69 42 22 2c 20 31 30 32 34 20 7d 2c 0a 20 20  KiB", 1024 },.  
17750 20 20 7b 20 22 4d 69 42 22 2c 20 31 30 32 34 2a    { "MiB", 1024*
17760 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22 47  1024 },.    { "G
17770 69 42 22 2c 20 31 30 32 34 2a 31 30 32 34 2a 31  iB", 1024*1024*1
17780 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22 4b 42  024 },.    { "KB
17790 22 2c 20 20 31 30 30 30 20 7d 2c 0a 20 20 20 20  ",  1000 },.    
177a0 7b 20 22 4d 42 22 2c 20 20 31 30 30 30 30 30 30  { "MB",  1000000
177b0 20 7d 2c 0a 20 20 20 20 7b 20 22 47 42 22 2c 20   },.    { "GB", 
177c0 20 31 30 30 30 30 30 30 30 30 30 20 7d 2c 0a 20   1000000000 },. 
177d0 20 20 20 7b 20 22 4b 22 2c 20 20 20 31 30 30 30     { "K",   1000
177e0 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 22 2c 20 20   },.    { "M",  
177f0 20 31 30 30 30 30 30 30 20 7d 2c 0a 20 20 20 20   1000000 },.    
17800 7b 20 22 47 22 2c 20 20 20 31 30 30 30 30 30 30  { "G",   1000000
17810 30 30 30 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 6e  000 },.  };.  in
17820 74 20 69 3b 0a 20 20 69 6e 74 20 69 73 4e 65 67  t i;.  int isNeg
17830 20 3d 20 30 3b 0a 20 20 69 66 28 20 7a 41 72 67   = 0;.  if( zArg
17840 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
17850 69 73 4e 65 67 20 3d 20 31 3b 0a 20 20 20 20 7a  isNeg = 1;.    z
17860 41 72 67 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69  Arg++;.  }else i
17870 66 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 2b 27 20  f( zArg[0]=='+' 
17880 29 7b 0a 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20  ){.    zArg++;. 
17890 20 7d 0a 20 20 69 66 28 20 7a 41 72 67 5b 30 5d   }.  if( zArg[0]
178a0 3d 3d 27 30 27 20 26 26 20 7a 41 72 67 5b 31 5d  =='0' && zArg[1]
178b0 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 69 6e 74  =='x' ){.    int
178c0 20 78 3b 0a 20 20 20 20 7a 41 72 67 20 2b 3d 20   x;.    zArg += 
178d0 32 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 78  2;.    while( (x
178e0 20 3d 20 68 65 78 44 69 67 69 74 56 61 6c 75 65   = hexDigitValue
178f0 28 7a 41 72 67 5b 30 5d 29 29 3e 3d 30 20 29 7b  (zArg[0]))>=0 ){
17900 0a 20 20 20 20 20 20 76 20 3d 20 28 76 3c 3c 34  .      v = (v<<4
17910 29 20 2b 20 78 3b 0a 20 20 20 20 20 20 7a 41 72  ) + x;.      zAr
17920 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  g++;.    }.  }el
17930 73 65 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 49  se{.    while( I
17940 73 44 69 67 69 74 28 7a 41 72 67 5b 30 5d 29 20  sDigit(zArg[0]) 
17950 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 76 2a 31  ){.      v = v*1
17960 30 20 2b 20 7a 41 72 67 5b 30 5d 20 2d 20 27 30  0 + zArg[0] - '0
17970 27 3b 0a 20 20 20 20 20 20 7a 41 72 67 2b 2b 3b  ';.      zArg++;
17980 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 6f 72  .    }.  }.  for
17990 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
179a0 65 28 61 4d 75 6c 74 29 3b 20 69 2b 2b 29 7b 0a  e(aMult); i++){.
179b0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
179c0 73 74 72 69 63 6d 70 28 61 4d 75 6c 74 5b 69 5d  stricmp(aMult[i]
179d0 2e 7a 53 75 66 66 69 78 2c 20 7a 41 72 67 29 3d  .zSuffix, zArg)=
179e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20 2a 3d  =0 ){.      v *=
179f0 20 61 4d 75 6c 74 5b 69 5d 2e 69 4d 75 6c 74 3b   aMult[i].iMult;
17a00 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
17a10 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
17a20 20 69 73 4e 65 67 3f 20 2d 76 20 3a 20 76 3b 0a   isNeg? -v : v;.
17a30 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  }../*.** Interpr
17a40 65 74 20 7a 41 72 67 20 61 73 20 65 69 74 68 65  et zArg as eithe
17a50 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  r an integer or 
17a60 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
17a70 20 20 52 65 74 75 72 6e 20 31 20 6f 72 20 30 0a    Return 1 or 0.
17a80 2a 2a 20 66 6f 72 20 54 52 55 45 20 61 6e 64 20  ** for TRUE and 
17a90 46 41 4c 53 45 2e 20 20 52 65 74 75 72 6e 20 74  FALSE.  Return t
17aa0 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
17ab0 20 69 66 20 61 70 70 72 6f 70 72 69 61 74 65 2e   if appropriate.
17ac0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 62  .*/.static int b
17ad0 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 63 6f 6e 73  ooleanValue(cons
17ae0 74 20 63 68 61 72 20 2a 7a 41 72 67 29 7b 0a 20  t char *zArg){. 
17af0 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a 41   int i;.  if( zA
17b00 72 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41  rg[0]=='0' && zA
17b10 72 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20  rg[1]=='x' ){.  
17b20 20 20 66 6f 72 28 69 3d 32 3b 20 68 65 78 44 69    for(i=2; hexDi
17b30 67 69 74 56 61 6c 75 65 28 7a 41 72 67 5b 69 5d  gitValue(zArg[i]
17b40 29 3e 3d 30 3b 20 69 2b 2b 29 7b 7d 0a 20 20 7d  )>=0; i++){}.  }
17b50 65 6c 73 65 7b 0a 20 20 20 20 66 6f 72 28 69 3d  else{.    for(i=
17b60 30 3b 20 7a 41 72 67 5b 69 5d 3e 3d 27 30 27 20  0; zArg[i]>='0' 
17b70 26 26 20 7a 41 72 67 5b 69 5d 3c 3d 27 39 27 3b  && zArg[i]<='9';
17b80 20 69 2b 2b 29 7b 7d 0a 20 20 7d 0a 20 20 69 66   i++){}.  }.  if
17b90 28 20 69 3e 30 20 26 26 20 7a 41 72 67 5b 69 5d  ( i>0 && zArg[i]
17ba0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 28 69 6e  ==0 ) return (in
17bb0 74 29 28 69 6e 74 65 67 65 72 56 61 6c 75 65 28  t)(integerValue(
17bc0 7a 41 72 67 29 20 26 20 30 78 66 66 66 66 66 66  zArg) & 0xffffff
17bd0 66 66 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  ff);.  if( sqlit
17be0 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c  e3_stricmp(zArg,
17bf0 20 22 6f 6e 22 29 3d 3d 30 20 7c 7c 20 73 71 6c   "on")==0 || sql
17c00 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72  ite3_stricmp(zAr
17c10 67 2c 22 79 65 73 22 29 3d 3d 30 20 29 7b 0a 20  g,"yes")==0 ){. 
17c20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
17c30 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73  .  if( sqlite3_s
17c40 74 72 69 63 6d 70 28 7a 41 72 67 2c 20 22 6f 66  tricmp(zArg, "of
17c50 66 22 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  f")==0 || sqlite
17c60 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 22  3_stricmp(zArg,"
17c70 6e 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  no")==0 ){.    r
17c80 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 75  eturn 0;.  }.  u
17c90 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
17ca0 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 74 20 61  r, "ERROR: Not a
17cb0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
17cc0 5c 22 25 73 5c 22 2e 20 41 73 73 75 6d 69 6e 67  \"%s\". Assuming
17cd0 20 5c 22 6e 6f 5c 22 2e 5c 6e 22 2c 0a 20 20 20   \"no\".\n",.   
17ce0 20 20 20 20 20 20 20 7a 41 72 67 29 3b 0a 20 20         zArg);.  
17cf0 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
17d00 2a 2a 20 53 65 74 20 6f 72 20 63 6c 65 61 72 20  ** Set or clear 
17d10 61 20 73 68 65 6c 6c 20 66 6c 61 67 20 61 63 63  a shell flag acc
17d20 6f 72 64 69 6e 67 20 74 6f 20 61 20 62 6f 6f 6c  ording to a bool
17d30 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ean value..*/.st
17d40 61 74 69 63 20 76 6f 69 64 20 73 65 74 4f 72 43  atic void setOrC
17d50 6c 65 61 72 46 6c 61 67 28 53 68 65 6c 6c 53 74  learFlag(ShellSt
17d60 61 74 65 20 2a 70 2c 20 75 6e 73 69 67 6e 65 64  ate *p, unsigned
17d70 20 6d 46 6c 61 67 2c 20 63 6f 6e 73 74 20 63 68   mFlag, const ch
17d80 61 72 20 2a 7a 41 72 67 29 7b 0a 20 20 69 66 28  ar *zArg){.  if(
17d90 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 7a 41   booleanValue(zA
17da0 72 67 29 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c  rg) ){.    Shell
17db0 53 65 74 46 6c 61 67 28 70 2c 20 6d 46 6c 61 67  SetFlag(p, mFlag
17dc0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
17dd0 53 68 65 6c 6c 43 6c 65 61 72 46 6c 61 67 28 70  ShellClearFlag(p
17de0 2c 20 6d 46 6c 61 67 29 3b 0a 20 20 7d 0a 7d 0a  , mFlag);.  }.}.
17df0 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20  ./*.** Close an 
17e00 6f 75 74 70 75 74 20 66 69 6c 65 2c 20 61 73 73  output file, ass
17e10 75 6d 69 6e 67 20 69 74 20 69 73 20 6e 6f 74 20  uming it is not 
17e20 73 74 64 65 72 72 20 6f 72 20 73 74 64 6f 75 74  stderr or stdout
17e30 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
17e40 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
17e50 65 28 46 49 4c 45 20 2a 66 29 7b 0a 20 20 69 66  e(FILE *f){.  if
17e60 28 20 66 20 26 26 20 66 21 3d 73 74 64 6f 75 74  ( f && f!=stdout
17e70 20 26 26 20 66 21 3d 73 74 64 65 72 72 20 29 20   && f!=stderr ) 
17e80 66 63 6c 6f 73 65 28 66 29 3b 0a 7d 0a 0a 2f 2a  fclose(f);.}../*
17e90 0a 2a 2a 20 54 72 79 20 74 6f 20 6f 70 65 6e 20  .** Try to open 
17ea0 61 6e 20 6f 75 74 70 75 74 20 66 69 6c 65 2e 20  an output file. 
17eb0 20 20 54 68 65 20 6e 61 6d 65 73 20 22 73 74 64    The names "std
17ec0 6f 75 74 22 20 61 6e 64 20 22 73 74 64 65 72 72  out" and "stderr
17ed0 22 20 61 72 65 0a 2a 2a 20 72 65 63 6f 67 6e 69  " are.** recogni
17ee0 7a 65 64 20 61 6e 64 20 64 6f 20 74 68 65 20 72  zed and do the r
17ef0 69 67 68 74 20 74 68 69 6e 67 2e 20 20 4e 55 4c  ight thing.  NUL
17f00 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66  L is returned if
17f10 20 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 66   the output.** f
17f20 69 6c 65 6e 61 6d 65 20 69 73 20 22 6f 66 66 22  ilename is "off"
17f30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 46 49 4c 45  ..*/.static FILE
17f40 20 2a 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70   *output_file_op
17f50 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  en(const char *z
17f60 46 69 6c 65 29 7b 0a 20 20 46 49 4c 45 20 2a 66  File){.  FILE *f
17f70 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a  ;.  if( strcmp(z
17f80 46 69 6c 65 2c 22 73 74 64 6f 75 74 22 29 3d 3d  File,"stdout")==
17f90 30 20 29 7b 0a 20 20 20 20 66 20 3d 20 73 74 64  0 ){.    f = std
17fa0 6f 75 74 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  out;.  }else if(
17fb0 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c 20 22   strcmp(zFile, "
17fc0 73 74 64 65 72 72 22 29 3d 3d 30 20 29 7b 0a 20  stderr")==0 ){. 
17fd0 20 20 20 66 20 3d 20 73 74 64 65 72 72 3b 0a 20     f = stderr;. 
17fe0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
17ff0 70 28 7a 46 69 6c 65 2c 20 22 6f 66 66 22 29 3d  p(zFile, "off")=
18000 3d 30 20 29 7b 0a 20 20 20 20 66 20 3d 20 30 3b  =0 ){.    f = 0;
18010 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 20  .  }else{.    f 
18020 3d 20 66 6f 70 65 6e 28 7a 46 69 6c 65 2c 20 22  = fopen(zFile, "
18030 77 62 22 29 3b 0a 20 20 20 20 69 66 28 20 66 3d  wb");.    if( f=
18040 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  =0 ){.      utf8
18050 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
18060 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f  "Error: cannot o
18070 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a  pen \"%s\"\n", z
18080 46 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  File);.    }.  }
18090 0a 20 20 72 65 74 75 72 6e 20 66 3b 0a 7d 0a 0a  .  return f;.}..
180a0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
180b0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 29 0a  ITE_UNTESTABLE).
180c0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
180d0 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 29 20  ITE_OMIT_TRACE) 
180e0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
180f0 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
18100 5f 50 4f 49 4e 54 29 0a 2f 2a 0a 2a 2a 20 41 20  _POINT)./*.** A 
18110 72 6f 75 74 69 6e 65 20 66 6f 72 20 68 61 6e 64  routine for hand
18120 6c 69 6e 67 20 6f 75 74 70 75 74 20 66 72 6f 6d  ling output from
18130 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
18140 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
18150 73 71 6c 5f 74 72 61 63 65 5f 63 61 6c 6c 62 61  sql_trace_callba
18160 63 6b 28 0a 20 20 75 6e 73 69 67 6e 65 64 20 6d  ck(.  unsigned m
18170 54 79 70 65 2c 0a 20 20 76 6f 69 64 20 2a 70 41  Type,.  void *pA
18180 72 67 2c 0a 20 20 76 6f 69 64 20 2a 70 50 2c 0a  rg,.  void *pP,.
18190 20 20 76 6f 69 64 20 2a 70 58 0a 29 7b 0a 20 20    void *pX.){.  
181a0 46 49 4c 45 20 2a 66 20 3d 20 28 46 49 4c 45 2a  FILE *f = (FILE*
181b0 29 70 41 72 67 3b 0a 20 20 55 4e 55 53 45 44 5f  )pArg;.  UNUSED_
181c0 50 41 52 41 4d 45 54 45 52 28 6d 54 79 70 65 29  PARAMETER(mType)
181d0 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ;.  UNUSED_PARAM
181e0 45 54 45 52 28 70 50 29 3b 0a 20 20 69 66 28 20  ETER(pP);.  if( 
181f0 66 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  f ){.    const c
18200 68 61 72 20 2a 7a 20 3d 20 28 63 6f 6e 73 74 20  har *z = (const 
18210 63 68 61 72 2a 29 70 58 3b 0a 20 20 20 20 69 6e  char*)pX;.    in
18220 74 20 69 20 3d 20 28 69 6e 74 29 73 74 72 6c 65  t i = (int)strle
18230 6e 28 7a 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  n(z);.    while(
18240 20 69 3e 30 20 26 26 20 7a 5b 69 2d 31 5d 3d 3d   i>0 && z[i-1]==
18250 27 3b 27 20 29 7b 20 69 2d 2d 3b 20 7d 0a 20 20  ';' ){ i--; }.  
18260 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 66 2c    utf8_printf(f,
18270 20 22 25 2e 2a 73 3b 5c 6e 22 2c 20 69 2c 20 7a   "%.*s;\n", i, z
18280 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
18290 30 3b 0a 7d 0a 23 65 6e 64 69 66 0a 23 65 6e 64  0;.}.#endif.#end
182a0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6e 6f 2d 6f  if../*.** A no-o
182b0 70 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  p routine that r
182c0 75 6e 73 20 77 69 74 68 20 74 68 65 20 22 2e 62  uns with the ".b
182d0 72 65 61 6b 70 6f 69 6e 74 22 20 64 6f 63 2d 63  reakpoint" doc-c
182e0 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 69 73  ommand.  This is
182f0 0a 2a 2a 20 61 20 75 73 65 66 75 6c 20 73 70 6f  .** a useful spo
18300 74 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67  t to set a debug
18310 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a  ger breakpoint..
18320 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  */.static void t
18330 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 76  est_breakpoint(v
18340 6f 69 64 29 7b 0a 20 20 73 74 61 74 69 63 20 69  oid){.  static i
18350 6e 74 20 6e 43 61 6c 6c 20 3d 20 30 3b 0a 20 20  nt nCall = 0;.  
18360 6e 43 61 6c 6c 2b 2b 3b 0a 7d 0a 0a 2f 2a 0a 2a  nCall++;.}../*.*
18370 2a 20 41 6e 20 6f 62 6a 65 63 74 20 75 73 65 64  * An object used
18380 20 74 6f 20 72 65 61 64 20 61 20 43 53 56 20 61   to read a CSV a
18390 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73 20 66  nd other files f
183a0 6f 72 20 69 6d 70 6f 72 74 2e 0a 2a 2f 0a 74 79  or import..*/.ty
183b0 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6d 70  pedef struct Imp
183c0 6f 72 74 43 74 78 20 49 6d 70 6f 72 74 43 74 78  ortCtx ImportCtx
183d0 3b 0a 73 74 72 75 63 74 20 49 6d 70 6f 72 74 43  ;.struct ImportC
183e0 74 78 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  tx {.  const cha
183f0 72 20 2a 7a 46 69 6c 65 3b 20 20 2f 2a 20 4e 61  r *zFile;  /* Na
18400 6d 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  me of the input 
18410 66 69 6c 65 20 2a 2f 0a 20 20 46 49 4c 45 20 2a  file */.  FILE *
18420 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  in;           /*
18430 20 52 65 61 64 20 74 68 65 20 43 53 56 20 74 65   Read the CSV te
18440 78 74 20 66 72 6f 6d 20 74 68 69 73 20 69 6e 70  xt from this inp
18450 75 74 20 73 74 72 65 61 6d 20 2a 2f 0a 20 20 63  ut stream */.  c
18460 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 20  har *z;         
18470 20 20 20 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65     /* Accumulate
18480 64 20 74 65 78 74 20 66 6f 72 20 61 20 66 69 65  d text for a fie
18490 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  ld */.  int n;  
184a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
184b0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
184c0 6e 20 7a 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c  n z */.  int nAl
184d0 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
184e0 53 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  Space allocated 
184f0 66 6f 72 20 7a 5b 5d 20 2a 2f 0a 20 20 69 6e 74  for z[] */.  int
18500 20 6e 4c 69 6e 65 3b 20 20 20 20 20 20 20 20 20   nLine;         
18510 20 2f 2a 20 43 75 72 72 65 6e 74 20 6c 69 6e 65   /* Current line
18520 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 69 6e 74   number */.  int
18530 20 62 4e 6f 74 46 69 72 73 74 3b 20 20 20 20 20   bNotFirst;     
18540 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 6e 65 20   /* True if one 
18550 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 20 61 6c  or more bytes al
18560 72 65 61 64 79 20 72 65 61 64 20 2a 2f 0a 20 20  ready read */.  
18570 69 6e 74 20 63 54 65 72 6d 3b 20 20 20 20 20 20  int cTerm;      
18580 20 20 20 20 2f 2a 20 43 68 61 72 61 63 74 65 72      /* Character
18590 20 74 68 61 74 20 74 65 72 6d 69 6e 61 74 65 64   that terminated
185a0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
185b0 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20   field */.  int 
185c0 63 43 6f 6c 53 65 70 3b 20 20 20 20 20 20 20 20  cColSep;        
185d0 2f 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 20 73 65  /* The column se
185e0 70 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65  parator characte
185f0 72 2e 20 20 28 55 73 75 61 6c 6c 79 20 22 2c 22  r.  (Usually ","
18600 29 20 2a 2f 0a 20 20 69 6e 74 20 63 52 6f 77 53  ) */.  int cRowS
18610 65 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ep;        /* Th
18620 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 20  e row separator 
18630 63 68 61 72 61 63 74 65 72 2e 20 20 28 55 73 75  character.  (Usu
18640 61 6c 6c 79 20 22 5c 6e 22 29 20 2a 2f 0a 7d 3b  ally "\n") */.};
18650 0a 0a 2f 2a 20 41 70 70 65 6e 64 20 61 20 73 69  ../* Append a si
18660 6e 67 6c 65 20 62 79 74 65 20 74 6f 20 7a 5b 5d  ngle byte to z[]
18670 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20   */.static void 
18680 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68  import_append_ch
18690 61 72 28 49 6d 70 6f 72 74 43 74 78 20 2a 70 2c  ar(ImportCtx *p,
186a0 20 69 6e 74 20 63 29 7b 0a 20 20 69 66 28 20 70   int c){.  if( p
186b0 2d 3e 6e 2b 31 3e 3d 70 2d 3e 6e 41 6c 6c 6f 63  ->n+1>=p->nAlloc
186c0 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f   ){.    p->nAllo
186d0 63 20 2b 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2b  c += p->nAlloc +
186e0 20 31 30 30 3b 0a 20 20 20 20 70 2d 3e 7a 20 3d   100;.    p->z =
186f0 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63   sqlite3_realloc
18700 36 34 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c  64(p->z, p->nAll
18710 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  oc);.    if( p->
18720 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61  z==0 ){.      ra
18730 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
18740 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c   "out of memory\
18750 6e 22 29 3b 0a 20 20 20 20 20 20 65 78 69 74 28  n");.      exit(
18760 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1);.    }.  }.  
18770 70 2d 3e 7a 5b 70 2d 3e 6e 2b 2b 5d 20 3d 20 28  p->z[p->n++] = (
18780 63 68 61 72 29 63 3b 0a 7d 0a 0a 2f 2a 20 52 65  char)c;.}../* Re
18790 61 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65 6c  ad a single fiel
187a0 64 20 6f 66 20 43 53 56 20 74 65 78 74 2e 20 20  d of CSV text.  
187b0 43 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  Compatible with 
187c0 72 66 63 34 31 38 30 20 61 6e 64 20 65 78 74 65  rfc4180 and exte
187d0 6e 64 65 64 0a 2a 2a 20 77 69 74 68 20 74 68 65  nded.** with the
187e0 20 6f 70 74 69 6f 6e 20 6f 66 20 68 61 76 69 6e   option of havin
187f0 67 20 61 20 73 65 70 61 72 61 74 6f 72 20 6f 74  g a separator ot
18800 68 65 72 20 74 68 61 6e 20 22 2c 22 2e 0a 2a 2a  her than ","..**
18810 0a 2a 2a 20 20 20 2b 20 20 49 6e 70 75 74 20 63  .**   +  Input c
18820 6f 6d 65 73 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e  omes from p->in.
18830 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 72  .**   +  Store r
18840 65 73 75 6c 74 73 20 69 6e 20 70 2d 3e 7a 20 6f  esults in p->z o
18850 66 20 6c 65 6e 67 74 68 20 70 2d 3e 6e 2e 20 20  f length p->n.  
18860 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 70 2d  Space to hold p-
18870 3e 7a 20 63 6f 6d 65 73 0a 2a 2a 20 20 20 20 20  >z comes.**     
18880 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
18890 6c 6c 6f 63 36 34 28 29 2e 0a 2a 2a 20 20 20 2b  lloc64()..**   +
188a0 20 20 55 73 65 20 70 2d 3e 63 53 65 70 20 61 73    Use p->cSep as
188b0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61   the column sepa
188c0 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61  rator.  The defa
188d0 75 6c 74 20 69 73 20 22 2c 22 2e 0a 2a 2a 20 20  ult is ","..**  
188e0 20 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70 20   +  Use p->rSep 
188f0 61 73 20 74 68 65 20 72 6f 77 20 73 65 70 61 72  as the row separ
18900 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75  ator.  The defau
18910 6c 74 20 69 73 20 22 5c 6e 22 2e 0a 2a 2a 20 20  lt is "\n"..**  
18920 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b 20 6f   +  Keep track o
18930 66 20 74 68 65 20 6c 69 6e 65 20 6e 75 6d 62 65  f the line numbe
18940 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a  r in p->nLine..*
18950 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74 68 65  *   +  Store the
18960 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
18970 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20 66  terminates the f
18980 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65 72 6d  ield in p->cTerm
18990 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20 20 20  .  Store.**     
189a0 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d 66   EOF on end-of-f
189b0 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52 65 70  ile..**   +  Rep
189c0 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72 6f 72  ort syntax error
189d0 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f 0a 73  s on stderr.*/.s
189e0 74 61 74 69 63 20 63 68 61 72 20 2a 53 51 4c 49  tatic char *SQLI
189f0 54 45 5f 43 44 45 43 4c 20 63 73 76 5f 72 65 61  TE_CDECL csv_rea
18a00 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d 70 6f  d_one_field(Impo
18a10 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69 6e 74  rtCtx *p){.  int
18a20 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70 20 3d   c;.  int cSep =
18a30 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20 20 69   p->cColSep;.  i
18a40 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63 52 6f  nt rSep = p->cRo
18a50 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d 20 30  wSep;.  p->n = 0
18a60 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d  ;.  c = fgetc(p-
18a70 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d 3d 45  >in);.  if( c==E
18a80 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65 72 72  OF || seenInterr
18a90 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e 63 54  upt ){.    p->cT
18aa0 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20 20 72  erm = EOF;.    r
18ab0 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69  eturn 0;.  }.  i
18ac0 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a 20 20 20  f( c=='"' ){.   
18ad0 20 69 6e 74 20 70 63 2c 20 70 70 63 3b 0a 20 20   int pc, ppc;.  
18ae0 20 20 69 6e 74 20 73 74 61 72 74 4c 69 6e 65 20    int startLine 
18af0 3d 20 70 2d 3e 6e 4c 69 6e 65 3b 0a 20 20 20 20  = p->nLine;.    
18b00 69 6e 74 20 63 51 75 6f 74 65 20 3d 20 63 3b 0a  int cQuote = c;.
18b10 20 20 20 20 70 63 20 3d 20 70 70 63 20 3d 20 30      pc = ppc = 0
18b20 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 31 20 29  ;.    while( 1 )
18b30 7b 0a 20 20 20 20 20 20 63 20 3d 20 66 67 65 74  {.      c = fget
18b40 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20 20 20  c(p->in);.      
18b50 69 66 28 20 63 3d 3d 72 53 65 70 20 29 20 70 2d  if( c==rSep ) p-
18b60 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20  >nLine++;.      
18b70 69 66 28 20 63 3d 3d 63 51 75 6f 74 65 20 29 7b  if( c==cQuote ){
18b80 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 63 3d  .        if( pc=
18b90 3d 63 51 75 6f 74 65 20 29 7b 0a 20 20 20 20 20  =cQuote ){.     
18ba0 20 20 20 20 20 70 63 20 3d 20 30 3b 0a 20 20 20       pc = 0;.   
18bb0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
18bc0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
18bd0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 63 3d   }.      if( (c=
18be0 3d 63 53 65 70 20 26 26 20 70 63 3d 3d 63 51 75  =cSep && pc==cQu
18bf0 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  ote).       || (
18c00 63 3d 3d 72 53 65 70 20 26 26 20 70 63 3d 3d 63  c==rSep && pc==c
18c10 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c  Quote).       ||
18c20 20 28 63 3d 3d 72 53 65 70 20 26 26 20 70 63 3d   (c==rSep && pc=
18c30 3d 27 5c 72 27 20 26 26 20 70 70 63 3d 3d 63 51  ='\r' && ppc==cQ
18c40 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c 20  uote).       || 
18c50 28 63 3d 3d 45 4f 46 20 26 26 20 70 63 3d 3d 63  (c==EOF && pc==c
18c60 51 75 6f 74 65 29 0a 20 20 20 20 20 20 29 7b 0a  Quote).      ){.
18c70 20 20 20 20 20 20 20 20 64 6f 7b 20 70 2d 3e 6e          do{ p->n
18c80 2d 2d 3b 20 7d 77 68 69 6c 65 28 20 70 2d 3e 7a  --; }while( p->z
18c90 5b 70 2d 3e 6e 5d 21 3d 63 51 75 6f 74 65 20 29  [p->n]!=cQuote )
18ca0 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 63 54 65  ;.        p->cTe
18cb0 72 6d 20 3d 20 63 3b 0a 20 20 20 20 20 20 20 20  rm = c;.        
18cc0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
18cd0 20 20 20 20 20 69 66 28 20 70 63 3d 3d 63 51 75       if( pc==cQu
18ce0 6f 74 65 20 26 26 20 63 21 3d 27 5c 72 27 20 29  ote && c!='\r' )
18cf0 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
18d00 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25  rintf(stderr, "%
18d10 73 3a 25 64 3a 20 75 6e 65 73 63 61 70 65 64 20  s:%d: unescaped 
18d20 25 63 20 63 68 61 72 61 63 74 65 72 5c 6e 22 2c  %c character\n",
18d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18d40 20 70 2d 3e 7a 46 69 6c 65 2c 20 70 2d 3e 6e 4c   p->zFile, p->nL
18d50 69 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20 20  ine, cQuote);.  
18d60 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
18d70 63 3d 3d 45 4f 46 20 29 7b 0a 20 20 20 20 20 20  c==EOF ){.      
18d80 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
18d90 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 75 6e  derr, "%s:%d: un
18da0 74 65 72 6d 69 6e 61 74 65 64 20 25 63 2d 71 75  terminated %c-qu
18db0 6f 74 65 64 20 66 69 65 6c 64 5c 6e 22 2c 0a 20  oted field\n",. 
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
18dd0 2d 3e 7a 46 69 6c 65 2c 20 73 74 61 72 74 4c 69  ->zFile, startLi
18de0 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20 20 20  ne, cQuote);.   
18df0 20 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20       p->cTerm = 
18e00 63 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  c;.        break
18e10 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
18e20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68  import_append_ch
18e30 61 72 28 70 2c 20 63 29 3b 0a 20 20 20 20 20 20  ar(p, c);.      
18e40 70 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  ppc = pc;.      
18e50 70 63 20 3d 20 63 3b 0a 20 20 20 20 7d 0a 20 20  pc = c;.    }.  
18e60 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 49 66  }else{.    /* If
18e70 20 74 68 69 73 20 69 73 20 74 68 65 20 66 69 72   this is the fir
18e80 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67 20 70  st field being p
18e90 61 72 73 65 64 20 61 6e 64 20 69 74 20 62 65 67  arsed and it beg
18ea0 69 6e 73 20 77 69 74 68 20 74 68 65 0a 20 20 20  ins with the.   
18eb0 20 2a 2a 20 55 54 46 2d 38 20 42 4f 4d 20 20 28   ** UTF-8 BOM  (
18ec0 30 78 45 46 20 42 42 20 42 46 29 20 74 68 65 6e  0xEF BB BF) then
18ed0 20 73 6b 69 70 20 74 68 65 20 42 4f 4d 20 2a 2f   skip the BOM */
18ee0 0a 20 20 20 20 69 66 28 20 28 63 26 30 78 66 66  .    if( (c&0xff
18ef0 29 3d 3d 30 78 65 66 20 26 26 20 70 2d 3e 62 4e  )==0xef && p->bN
18f00 6f 74 46 69 72 73 74 3d 3d 30 20 29 7b 0a 20 20  otFirst==0 ){.  
18f10 20 20 20 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e      import_appen
18f20 64 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a 20 20  d_char(p, c);.  
18f30 20 20 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d      c = fgetc(p-
18f40 3e 69 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20  >in);.      if( 
18f50 28 63 26 30 78 66 66 29 3d 3d 30 78 62 62 20 29  (c&0xff)==0xbb )
18f60 7b 0a 20 20 20 20 20 20 20 20 69 6d 70 6f 72 74  {.        import
18f70 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70 2c 20  _append_char(p, 
18f80 63 29 3b 0a 20 20 20 20 20 20 20 20 63 20 3d 20  c);.        c = 
18f90 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20  fgetc(p->in);.  
18fa0 20 20 20 20 20 20 69 66 28 20 28 63 26 30 78 66        if( (c&0xf
18fb0 66 29 3d 3d 30 78 62 66 20 29 7b 0a 20 20 20 20  f)==0xbf ){.    
18fc0 20 20 20 20 20 20 70 2d 3e 62 4e 6f 74 46 69 72        p->bNotFir
18fd0 73 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  st = 1;.        
18fe0 20 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20    p->n = 0;.    
18ff0 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 73 76        return csv
19000 5f 72 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28  _read_one_field(
19010 70 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  p);.        }.  
19020 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
19030 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20 26 26  while( c!=EOF &&
19040 20 63 21 3d 63 53 65 70 20 26 26 20 63 21 3d 72   c!=cSep && c!=r
19050 53 65 70 20 29 7b 0a 20 20 20 20 20 20 69 6d 70  Sep ){.      imp
19060 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28  ort_append_char(
19070 70 2c 20 63 29 3b 0a 20 20 20 20 20 20 63 20 3d  p, c);.      c =
19080 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20   fgetc(p->in);. 
19090 20 20 20 7d 0a 20 20 20 20 69 66 28 20 63 3d 3d     }.    if( c==
190a0 72 53 65 70 20 29 7b 0a 20 20 20 20 20 20 70 2d  rSep ){.      p-
190b0 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20  >nLine++;.      
190c0 69 66 28 20 70 2d 3e 6e 3e 30 20 26 26 20 70 2d  if( p->n>0 && p-
190d0 3e 7a 5b 70 2d 3e 6e 2d 31 5d 3d 3d 27 5c 72 27  >z[p->n-1]=='\r'
190e0 20 29 20 70 2d 3e 6e 2d 2d 3b 0a 20 20 20 20 7d   ) p->n--;.    }
190f0 0a 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20  .    p->cTerm = 
19100 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e  c;.  }.  if( p->
19110 7a 20 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d  z ) p->z[p->n] =
19120 20 30 3b 0a 20 20 70 2d 3e 62 4e 6f 74 46 69 72   0;.  p->bNotFir
19130 73 74 20 3d 20 31 3b 0a 20 20 72 65 74 75 72 6e  st = 1;.  return
19140 20 70 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 20 52 65 61   p->z;.}../* Rea
19150 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65 6c 64  d a single field
19160 20 6f 66 20 41 53 43 49 49 20 64 65 6c 69 6d 69   of ASCII delimi
19170 74 65 64 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  ted text..**.** 
19180 20 20 2b 20 20 49 6e 70 75 74 20 63 6f 6d 65 73    +  Input comes
19190 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a 2a 20   from p->in..** 
191a0 20 20 2b 20 20 53 74 6f 72 65 20 72 65 73 75 6c    +  Store resul
191b0 74 73 20 69 6e 20 70 2d 3e 7a 20 6f 66 20 6c 65  ts in p->z of le
191c0 6e 67 74 68 20 70 2d 3e 6e 2e 20 20 53 70 61 63  ngth p->n.  Spac
191d0 65 20 74 6f 20 68 6f 6c 64 20 70 2d 3e 7a 20 63  e to hold p->z c
191e0 6f 6d 65 73 0a 2a 2a 20 20 20 20 20 20 66 72 6f  omes.**      fro
191f0 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
19200 36 34 28 29 2e 0a 2a 2a 20 20 20 2b 20 20 55 73  64()..**   +  Us
19210 65 20 70 2d 3e 63 53 65 70 20 61 73 20 74 68 65  e p->cSep as the
19220 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f   column separato
19230 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  r.  The default 
19240 69 73 20 22 5c 78 31 46 22 2e 0a 2a 2a 20 20 20  is "\x1F"..**   
19250 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70 20 61  +  Use p->rSep a
19260 73 20 74 68 65 20 72 6f 77 20 73 65 70 61 72 61  s the row separa
19270 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c  tor.  The defaul
19280 74 20 69 73 20 22 5c 78 31 45 22 2e 0a 2a 2a 20  t is "\x1E"..** 
19290 20 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b 20    +  Keep track 
192a0 6f 66 20 74 68 65 20 72 6f 77 20 6e 75 6d 62 65  of the row numbe
192b0 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a  r in p->nLine..*
192c0 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74 68 65  *   +  Store the
192d0 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
192e0 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20 66  terminates the f
192f0 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65 72 6d  ield in p->cTerm
19300 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20 20 20  .  Store.**     
19310 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d 66   EOF on end-of-f
19320 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52 65 70  ile..**   +  Rep
19330 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72 6f 72  ort syntax error
19340 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f 0a 73  s on stderr.*/.s
19350 74 61 74 69 63 20 63 68 61 72 20 2a 53 51 4c 49  tatic char *SQLI
19360 54 45 5f 43 44 45 43 4c 20 61 73 63 69 69 5f 72  TE_CDECL ascii_r
19370 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d  ead_one_field(Im
19380 70 6f 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69  portCtx *p){.  i
19390 6e 74 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70  nt c;.  int cSep
193a0 20 3d 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20   = p->cColSep;. 
193b0 20 69 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63   int rSep = p->c
193c0 52 6f 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d  RowSep;.  p->n =
193d0 20 30 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28   0;.  c = fgetc(
193e0 70 2d 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d  p->in);.  if( c=
193f0 3d 45 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65  =EOF || seenInte
19400 72 72 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e  rrupt ){.    p->
19410 63 54 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20  cTerm = EOF;.   
19420 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
19430 20 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20 26   while( c!=EOF &
19440 26 20 63 21 3d 63 53 65 70 20 26 26 20 63 21 3d  & c!=cSep && c!=
19450 72 53 65 70 20 29 7b 0a 20 20 20 20 69 6d 70 6f  rSep ){.    impo
19460 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70  rt_append_char(p
19470 2c 20 63 29 3b 0a 20 20 20 20 63 20 3d 20 66 67  , c);.    c = fg
19480 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 7d 0a  etc(p->in);.  }.
19490 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20 29 7b    if( c==rSep ){
194a0 0a 20 20 20 20 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b  .    p->nLine++;
194b0 0a 20 20 7d 0a 20 20 70 2d 3e 63 54 65 72 6d 20  .  }.  p->cTerm 
194c0 3d 20 63 3b 0a 20 20 69 66 28 20 70 2d 3e 7a 20  = c;.  if( p->z 
194d0 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d 20 30  ) p->z[p->n] = 0
194e0 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a 3b  ;.  return p->z;
194f0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
19500 20 74 72 61 6e 73 66 65 72 20 64 61 74 61 20 66   transfer data f
19510 6f 72 20 74 61 62 6c 65 20 7a 54 61 62 6c 65 2e  or table zTable.
19520 20 20 49 66 20 61 6e 20 65 72 72 6f 72 20 69 73    If an error is
19530 20 73 65 65 6e 20 77 68 69 6c 65 0a 2a 2a 20 6d   seen while.** m
19540 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 2c 20 74  oving forward, t
19550 72 79 20 74 6f 20 67 6f 20 62 61 63 6b 77 61 72  ry to go backwar
19560 64 73 2e 20 20 54 68 65 20 62 61 63 6b 77 61 72  ds.  The backwar
19570 64 73 20 6d 6f 76 65 6d 65 6e 74 20 77 6f 6e 27  ds movement won'
19580 74 0a 2a 2a 20 77 6f 72 6b 20 66 6f 72 20 57 49  t.** work for WI
19590 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
195a0 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es..*/.static vo
195b0 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65 44 61 74  id tryToCloneDat
195c0 61 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  a(.  ShellState 
195d0 2a 70 2c 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e  *p,.  sqlite3 *n
195e0 65 77 44 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68  ewDb,.  const ch
195f0 61 72 20 2a 7a 54 61 62 6c 65 0a 29 7b 0a 20 20  ar *zTable.){.  
19600 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 51  sqlite3_stmt *pQ
19610 75 65 72 79 20 3d 20 30 3b 0a 20 20 73 71 6c 69  uery = 0;.  sqli
19620 74 65 33 5f 73 74 6d 74 20 2a 70 49 6e 73 65 72  te3_stmt *pInser
19630 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a  t = 0;.  char *z
19640 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63 68 61  Query = 0;.  cha
19650 72 20 2a 7a 49 6e 73 65 72 74 20 3d 20 30 3b 0a  r *zInsert = 0;.
19660 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
19670 69 2c 20 6a 2c 20 6e 3b 0a 20 20 69 6e 74 20 6e  i, j, n;.  int n
19680 54 61 62 6c 65 20 3d 20 28 69 6e 74 29 73 74 72  Table = (int)str
19690 6c 65 6e 28 7a 54 61 62 6c 65 29 3b 0a 20 20 69  len(zTable);.  i
196a0 6e 74 20 6b 20 3d 20 30 3b 0a 20 20 69 6e 74 20  nt k = 0;.  int 
196b0 63 6e 74 20 3d 20 30 3b 0a 20 20 63 6f 6e 73 74  cnt = 0;.  const
196c0 20 69 6e 74 20 73 70 69 6e 52 61 74 65 20 3d 20   int spinRate = 
196d0 31 30 30 30 30 3b 0a 0a 20 20 7a 51 75 65 72 79  10000;..  zQuery
196e0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
196f0 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  tf("SELECT * FRO
19700 4d 20 5c 22 25 77 5c 22 22 2c 20 7a 54 61 62 6c  M \"%w\"", zTabl
19710 65 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  e);.  rc = sqlit
19720 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
19730 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31 2c  >db, zQuery, -1,
19740 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20   &pQuery, 0);.  
19750 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 75 74  if( rc ){.    ut
19760 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
19770 2c 20 22 45 72 72 6f 72 20 25 64 3a 20 25 73 20  , "Error %d: %s 
19780 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20  on [%s]\n",.    
19790 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
197a0 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
197b0 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65 33  (p->db), sqlite3
197c0 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 2c 0a  _errmsg(p->db),.
197d0 20 20 20 20 20 20 20 20 20 20 20 20 7a 51 75 65              zQue
197e0 72 79 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e  ry);.    goto en
197f0 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20 7d  d_data_xfer;.  }
19800 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63  .  n = sqlite3_c
19810 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 51 75 65  olumn_count(pQue
19820 72 79 29 3b 0a 20 20 7a 49 6e 73 65 72 74 20 3d  ry);.  zInsert =
19830 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36   sqlite3_malloc6
19840 34 28 32 30 30 20 2b 20 6e 54 61 62 6c 65 20 2b  4(200 + nTable +
19850 20 6e 2a 33 29 3b 0a 20 20 69 66 28 20 7a 49 6e   n*3);.  if( zIn
19860 73 65 72 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72  sert==0 ){.    r
19870 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
19880 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
19890 5c 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65  \n");.    goto e
198a0 6e 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20  nd_data_xfer;.  
198b0 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  }.  sqlite3_snpr
198c0 69 6e 74 66 28 32 30 30 2b 6e 54 61 62 6c 65 2c  intf(200+nTable,
198d0 7a 49 6e 73 65 72 74 2c 0a 20 20 20 20 20 20 20  zInsert,.       
198e0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 4e 53              "INS
198f0 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e  ERT OR IGNORE IN
19900 54 4f 20 5c 22 25 73 5c 22 20 56 41 4c 55 45 53  TO \"%s\" VALUES
19910 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  (?", zTable);.  
19920 69 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  i = (int)strlen(
19930 7a 49 6e 73 65 72 74 29 3b 0a 20 20 66 6f 72 28  zInsert);.  for(
19940 6a 3d 31 3b 20 6a 3c 6e 3b 20 6a 2b 2b 29 7b 0a  j=1; j<n; j++){.
19950 20 20 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65      memcpy(zInse
19960 72 74 2b 69 2c 20 22 2c 3f 22 2c 20 32 29 3b 0a  rt+i, ",?", 2);.
19970 20 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20 7d 0a      i += 2;.  }.
19980 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65 72 74    memcpy(zInsert
19990 2b 69 2c 20 22 29 3b 22 2c 20 33 29 3b 0a 20 20  +i, ");", 3);.  
199a0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
199b0 70 61 72 65 5f 76 32 28 6e 65 77 44 62 2c 20 7a  pare_v2(newDb, z
199c0 49 6e 73 65 72 74 2c 20 2d 31 2c 20 26 70 49 6e  Insert, -1, &pIn
199d0 73 65 72 74 2c 20 30 29 3b 0a 20 20 69 66 28 20  sert, 0);.  if( 
199e0 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  rc ){.    utf8_p
199f0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
19a00 72 72 6f 72 20 25 64 3a 20 25 73 20 6f 6e 20 5b  rror %d: %s on [
19a10 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  %s]\n",.        
19a20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65      sqlite3_exte
19a30 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 6e 65 77  nded_errcode(new
19a40 44 62 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Db), sqlite3_err
19a50 6d 73 67 28 6e 65 77 44 62 29 2c 0a 20 20 20 20  msg(newDb),.    
19a60 20 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b          zQuery);
19a70 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 64 61  .    goto end_da
19a80 74 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20 66  ta_xfer;.  }.  f
19a90 6f 72 28 6b 3d 30 3b 20 6b 3c 32 3b 20 6b 2b 2b  or(k=0; k<2; k++
19aa0 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 72  ){.    while( (r
19ab0 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70  c = sqlite3_step
19ac0 28 70 51 75 65 72 79 29 29 3d 3d 53 51 4c 49 54  (pQuery))==SQLIT
19ad0 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 66  E_ROW ){.      f
19ae0 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
19af0 29 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63  ){.        switc
19b00 68 28 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  h( sqlite3_colum
19b10 6e 5f 74 79 70 65 28 70 51 75 65 72 79 2c 20 69  n_type(pQuery, i
19b20 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63  ) ){.          c
19b30 61 73 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a  ase SQLITE_NULL:
19b40 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
19b50 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
19b60 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 29 3b 0a  (pInsert, i+1);.
19b70 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
19b80 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
19b90 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
19ba0 4c 49 54 45 5f 49 4e 54 45 47 45 52 3a 20 7b 0a  LITE_INTEGER: {.
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
19bc0 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70  te3_bind_int64(p
19bd0 49 6e 73 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c  Insert, i+1, sql
19be0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
19bf0 34 28 70 51 75 65 72 79 2c 69 29 29 3b 0a 20 20  4(pQuery,i));.  
19c00 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
19c10 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
19c20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
19c30 54 45 5f 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20  TE_FLOAT: {.    
19c40 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
19c50 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70 49 6e 73  bind_double(pIns
19c60 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65  ert, i+1, sqlite
19c70 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28  3_column_double(
19c80 70 51 75 65 72 79 2c 69 29 29 3b 0a 20 20 20 20  pQuery,i));.    
19c90 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
19ca0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
19cb0 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
19cc0 5f 54 45 58 54 3a 20 7b 0a 20 20 20 20 20 20 20  _TEXT: {.       
19cd0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
19ce0 64 5f 74 65 78 74 28 70 49 6e 73 65 72 74 2c 20  d_text(pInsert, 
19cf0 69 2b 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20  i+1,.           
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d10 20 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73    (const char*)s
19d20 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
19d30 78 74 28 70 51 75 65 72 79 2c 69 29 2c 0a 20 20  xt(pQuery,i),.  
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 53             -1, S
19d60 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
19d70 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
19d80 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
19d90 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
19da0 49 54 45 5f 42 4c 4f 42 3a 20 7b 0a 20 20 20 20  ITE_BLOB: {.    
19db0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
19dc0 62 69 6e 64 5f 62 6c 6f 62 28 70 49 6e 73 65 72  bind_blob(pInser
19dd0 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65 33 5f  t, i+1, sqlite3_
19de0 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 51 75 65  column_blob(pQue
19df0 72 79 2c 69 29 2c 0a 20 20 20 20 20 20 20 20 20  ry,i),.         
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
19e30 6e 5f 62 79 74 65 73 28 70 51 75 65 72 79 2c 69  n_bytes(pQuery,i
19e40 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
19e70 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
19e80 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
19e90 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
19ea0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
19eb0 2f 2a 20 45 6e 64 20 66 6f 72 20 2a 2f 0a 20 20  /* End for */.  
19ec0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19ed0 5f 73 74 65 70 28 70 49 6e 73 65 72 74 29 3b 0a  _step(pInsert);.
19ee0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
19ef0 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53  LITE_OK && rc!=S
19f00 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 72 63 21  QLITE_ROW && rc!
19f10 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
19f20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
19f30 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
19f40 6f 72 20 25 64 3a 20 25 73 5c 6e 22 2c 20 73 71  or %d: %s\n", sq
19f50 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
19f60 72 72 63 6f 64 65 28 6e 65 77 44 62 29 2c 0a 20  rrcode(newDb),. 
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65         sqlite3_e
19f90 72 72 6d 73 67 28 6e 65 77 44 62 29 29 3b 0a 20  rrmsg(newDb));. 
19fa0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
19fb0 69 74 65 33 5f 72 65 73 65 74 28 70 49 6e 73 65  ite3_reset(pInse
19fc0 72 74 29 3b 0a 20 20 20 20 20 20 63 6e 74 2b 2b  rt);.      cnt++
19fd0 3b 0a 20 20 20 20 20 20 69 66 28 20 28 63 6e 74  ;.      if( (cnt
19fe0 25 73 70 69 6e 52 61 74 65 29 3d 3d 30 20 29 7b  %spinRate)==0 ){
19ff0 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
1a000 22 25 63 5c 62 22 2c 20 22 7c 2f 2d 5c 5c 22 5b  "%c\b", "|/-\\"[
1a010 28 63 6e 74 2f 73 70 69 6e 52 61 74 65 29 25 34  (cnt/spinRate)%4
1a020 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 66 6c 75  ]);.        fflu
1a030 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20  sh(stdout);.    
1a040 20 20 7d 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64    }.    } /* End
1a050 20 77 68 69 6c 65 20 2a 2f 0a 20 20 20 20 69 66   while */.    if
1a060 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
1a070 45 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 73  E ) break;.    s
1a080 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1a090 70 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71 6c  pQuery);.    sql
1a0a0 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79  ite3_free(zQuery
1a0b0 29 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d 20  );.    zQuery = 
1a0c0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
1a0d0 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c  "SELECT * FROM \
1a0e0 22 25 77 5c 22 20 4f 52 44 45 52 20 42 59 20 72  "%w\" ORDER BY r
1a0f0 6f 77 69 64 20 44 45 53 43 3b 22 2c 0a 20 20 20  owid DESC;",.   
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 20 20 20 20 20 20 20 20 20 7a 54 61 62 6c 65            zTable
1a120 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
1a130 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
1a140 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31  ->db, zQuery, -1
1a150 2c 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  , &pQuery, 0);. 
1a160 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
1a170 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1a180 74 64 65 72 72 2c 20 22 57 61 72 6e 69 6e 67 3a  tderr, "Warning:
1a190 20 63 61 6e 6e 6f 74 20 73 74 65 70 20 5c 22 25   cannot step \"%
1a1a0 73 5c 22 20 62 61 63 6b 77 61 72 64 73 22 2c 20  s\" backwards", 
1a1b0 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 62  zTable);.      b
1a1c0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  reak;.    }.  } 
1a1d0 2f 2a 20 45 6e 64 20 66 6f 72 28 6b 3d 30 2e 2e  /* End for(k=0..
1a1e0 2e 29 20 2a 2f 0a 0a 65 6e 64 5f 64 61 74 61 5f  .) */..end_data_
1a1f0 78 66 65 72 3a 0a 20 20 73 71 6c 69 74 65 33 5f  xfer:.  sqlite3_
1a200 66 69 6e 61 6c 69 7a 65 28 70 51 75 65 72 79 29  finalize(pQuery)
1a210 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ;.  sqlite3_fina
1a220 6c 69 7a 65 28 70 49 6e 73 65 72 74 29 3b 0a 20  lize(pInsert);. 
1a230 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51   sqlite3_free(zQ
1a240 75 65 72 79 29 3b 0a 20 20 73 71 6c 69 74 65 33  uery);.  sqlite3
1a250 5f 66 72 65 65 28 7a 49 6e 73 65 72 74 29 3b 0a  _free(zInsert);.
1a260 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  }.../*.** Try to
1a270 20 74 72 61 6e 73 66 65 72 20 61 6c 6c 20 72 6f   transfer all ro
1a280 77 73 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ws of the schema
1a290 20 74 68 61 74 20 6d 61 74 63 68 20 7a 57 68 65   that match zWhe
1a2a0 72 65 2e 20 20 46 6f 72 0a 2a 2a 20 65 61 63 68  re.  For.** each
1a2b0 20 72 6f 77 2c 20 69 6e 76 6f 6b 65 20 78 46 6f   row, invoke xFo
1a2c0 72 45 61 63 68 28 29 20 6f 6e 20 74 68 65 20 6f  rEach() on the o
1a2d0 62 6a 65 63 74 20 64 65 66 69 6e 65 64 20 62 79  bject defined by
1a2e0 20 74 68 61 74 20 72 6f 77 2e 0a 2a 2a 20 49 66   that row..** If
1a2f0 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63   an error is enc
1a300 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 6d  ountered while m
1a310 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 20 74 68  oving forward th
1a320 72 6f 75 67 68 20 74 68 65 0a 2a 2a 20 73 71 6c  rough the.** sql
1a330 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
1a340 2c 20 74 72 79 20 61 67 61 69 6e 20 6d 6f 76 69  , try again movi
1a350 6e 67 20 62 61 63 6b 77 61 72 64 73 2e 0a 2a 2f  ng backwards..*/
1a360 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 72 79  .static void try
1a370 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 0a 20  ToCloneSchema(. 
1a380 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a   ShellState *p,.
1a390 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44 62    sqlite3 *newDb
1a3a0 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
1a3b0 7a 57 68 65 72 65 2c 0a 20 20 76 6f 69 64 20 28  zWhere,.  void (
1a3c0 2a 78 46 6f 72 45 61 63 68 29 28 53 68 65 6c 6c  *xForEach)(Shell
1a3d0 53 74 61 74 65 2a 2c 73 71 6c 69 74 65 33 2a 2c  State*,sqlite3*,
1a3e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29 7b 0a  const char*).){.
1a3f0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1a400 70 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63 68  pQuery = 0;.  ch
1a410 61 72 20 2a 7a 51 75 65 72 79 20 3d 20 30 3b 0a  ar *zQuery = 0;.
1a420 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 6f 6e 73    int rc;.  cons
1a430 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
1a440 2a 7a 4e 61 6d 65 3b 0a 20 20 63 6f 6e 73 74 20  *zName;.  const 
1a450 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a  unsigned char *z
1a460 53 71 6c 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72  Sql;.  char *zEr
1a470 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 7a 51 75  rMsg = 0;..  zQu
1a480 65 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ery = sqlite3_mp
1a490 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20 6e 61  rintf("SELECT na
1a4a0 6d 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  me, sql FROM sql
1a4b0 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20  ite_master".    
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4d0 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20 25         " WHERE %
1a4e0 73 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20 72  s", zWhere);.  r
1a4f0 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
1a500 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 51  are_v2(p->db, zQ
1a510 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65 72  uery, -1, &pQuer
1a520 79 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 20  y, 0);.  if( rc 
1a530 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  ){.    utf8_prin
1a540 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1a550 72 3a 20 28 25 64 29 20 25 73 20 6f 6e 20 5b 25  r: (%d) %s on [%
1a560 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  s]\n",.         
1a570 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
1a580 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
1a590 6f 64 65 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69  ode(p->db), sqli
1a5a0 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62  te3_errmsg(p->db
1a5b0 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
1a5c0 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b 0a         zQuery);.
1a5d0 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 73 63 68      goto end_sch
1a5e0 65 6d 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20  ema_xfer;.  }.  
1a5f0 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c  while( (rc = sql
1a600 69 74 65 33 5f 73 74 65 70 28 70 51 75 65 72 79  ite3_step(pQuery
1a610 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  ))==SQLITE_ROW )
1a620 7b 0a 20 20 20 20 7a 4e 61 6d 65 20 3d 20 73 71  {.    zName = sq
1a630 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
1a640 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20  t(pQuery, 0);.  
1a650 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
1a660 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75  _column_text(pQu
1a670 65 72 79 2c 20 31 29 3b 0a 20 20 20 20 70 72 69  ery, 1);.    pri
1a680 6e 74 66 28 22 25 73 2e 2e 2e 20 22 2c 20 7a 4e  ntf("%s... ", zN
1a690 61 6d 65 29 3b 20 66 66 6c 75 73 68 28 73 74 64  ame); fflush(std
1a6a0 6f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  out);.    sqlite
1a6b0 33 5f 65 78 65 63 28 6e 65 77 44 62 2c 20 28 63  3_exec(newDb, (c
1a6c0 6f 6e 73 74 20 63 68 61 72 2a 29 7a 53 71 6c 2c  onst char*)zSql,
1a6d0 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d 73 67 29   0, 0, &zErrMsg)
1a6e0 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73  ;.    if( zErrMs
1a6f0 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  g ){.      utf8_
1a700 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1a710 45 72 72 6f 72 3a 20 25 73 5c 6e 53 51 4c 3a 20  Error: %s\nSQL: 
1a720 5b 25 73 5d 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  [%s]\n", zErrMsg
1a730 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 73  , zSql);.      s
1a740 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
1a750 4d 73 67 29 3b 0a 20 20 20 20 20 20 7a 45 72 72  Msg);.      zErr
1a760 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  Msg = 0;.    }. 
1a770 20 20 20 69 66 28 20 78 46 6f 72 45 61 63 68 20     if( xForEach 
1a780 29 7b 0a 20 20 20 20 20 20 78 46 6f 72 45 61 63  ){.      xForEac
1a790 68 28 70 2c 20 6e 65 77 44 62 2c 20 28 63 6f 6e  h(p, newDb, (con
1a7a0 73 74 20 63 68 61 72 2a 29 7a 4e 61 6d 65 29 3b  st char*)zName);
1a7b0 0a 20 20 20 20 7d 0a 20 20 20 20 70 72 69 6e 74  .    }.    print
1a7c0 66 28 22 64 6f 6e 65 5c 6e 22 29 3b 0a 20 20 7d  f("done\n");.  }
1a7d0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
1a7e0 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 73 71  E_DONE ){.    sq
1a7f0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
1a800 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71 6c 69  Query);.    sqli
1a810 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79 29  te3_free(zQuery)
1a820 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d 20 73  ;.    zQuery = s
1a830 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1a840 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 73 71 6c  SELECT name, sql
1a850 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
1a860 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20  ter".           
1a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a880 20 20 22 20 57 48 45 52 45 20 25 73 20 4f 52 44    " WHERE %s ORD
1a890 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43  ER BY rowid DESC
1a8a0 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20 20 20  ", zWhere);.    
1a8b0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
1a8c0 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
1a8d0 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65  Query, -1, &pQue
1a8e0 72 79 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  ry, 0);.    if( 
1a8f0 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  rc ){.      utf8
1a900 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1a910 22 45 72 72 6f 72 3a 20 28 25 64 29 20 25 73 20  "Error: (%d) %s 
1a920 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20  on [%s]\n",.    
1a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a940 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64    sqlite3_extend
1a950 65 64 5f 65 72 72 63 6f 64 65 28 70 2d 3e 64 62  ed_errcode(p->db
1a960 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
1a970 67 28 70 2d 3e 64 62 29 2c 0a 20 20 20 20 20 20  g(p->db),.      
1a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a990 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 20 20 67  zQuery);.      g
1a9a0 6f 74 6f 20 65 6e 64 5f 73 63 68 65 6d 61 5f 78  oto end_schema_x
1a9b0 66 65 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  fer;.    }.    w
1a9c0 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69  hile( (rc = sqli
1a9d0 74 65 33 5f 73 74 65 70 28 70 51 75 65 72 79 29  te3_step(pQuery)
1a9e0 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
1a9f0 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 73  .      zName = s
1aa00 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1aa10 78 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  xt(pQuery, 0);. 
1aa20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69       zSql = sqli
1aa30 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
1aa40 70 51 75 65 72 79 2c 20 31 29 3b 0a 20 20 20 20  pQuery, 1);.    
1aa50 20 20 70 72 69 6e 74 66 28 22 25 73 2e 2e 2e 20    printf("%s... 
1aa60 22 2c 20 7a 4e 61 6d 65 29 3b 20 66 66 6c 75 73  ", zName); fflus
1aa70 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20 20  h(stdout);.     
1aa80 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e 65   sqlite3_exec(ne
1aa90 77 44 62 2c 20 28 63 6f 6e 73 74 20 63 68 61 72  wDb, (const char
1aaa0 2a 29 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 26 7a  *)zSql, 0, 0, &z
1aab0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 69  ErrMsg);.      i
1aac0 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  f( zErrMsg ){.  
1aad0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
1aae0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
1aaf0 3a 20 25 73 5c 6e 53 51 4c 3a 20 5b 25 73 5d 5c  : %s\nSQL: [%s]\
1ab00 6e 22 2c 20 7a 45 72 72 4d 73 67 2c 20 7a 53 71  n", zErrMsg, zSq
1ab10 6c 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  l);.        sqli
1ab20 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
1ab30 29 3b 0a 20 20 20 20 20 20 20 20 7a 45 72 72 4d  );.        zErrM
1ab40 73 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  sg = 0;.      }.
1ab50 20 20 20 20 20 20 69 66 28 20 78 46 6f 72 45 61        if( xForEa
1ab60 63 68 20 29 7b 0a 20 20 20 20 20 20 20 20 78 46  ch ){.        xF
1ab70 6f 72 45 61 63 68 28 70 2c 20 6e 65 77 44 62 2c  orEach(p, newDb,
1ab80 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 4e   (const char*)zN
1ab90 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ame);.      }.  
1aba0 20 20 20 20 70 72 69 6e 74 66 28 22 64 6f 6e 65      printf("done
1abb0 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  \n");.    }.  }.
1abc0 65 6e 64 5f 73 63 68 65 6d 61 5f 78 66 65 72 3a  end_schema_xfer:
1abd0 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
1abe0 69 7a 65 28 70 51 75 65 72 79 29 3b 0a 20 20 73  ize(pQuery);.  s
1abf0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65  qlite3_free(zQue
1ac00 72 79 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70  ry);.}../*.** Op
1ac10 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73  en a new databas
1ac20 65 20 66 69 6c 65 20 6e 61 6d 65 64 20 22 7a 4e  e file named "zN
1ac30 65 77 44 62 22 2e 20 20 54 72 79 20 74 6f 20 72  ewDb".  Try to r
1ac40 65 63 6f 76 65 72 20 61 73 20 6d 75 63 68 20 69  ecover as much i
1ac50 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 61 73  nformation.** as
1ac60 20 70 6f 73 73 69 62 6c 65 20 6f 75 74 20 6f 66   possible out of
1ac70 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1ac80 73 65 20 28 77 68 69 63 68 20 6d 69 67 68 74 20  se (which might 
1ac90 62 65 20 63 6f 72 72 75 70 74 29 20 61 6e 64 20  be corrupt) and 
1aca0 77 72 69 74 65 20 69 74 0a 2a 2a 20 69 6e 74 6f  write it.** into
1acb0 20 7a 4e 65 77 44 62 2e 0a 2a 2f 0a 73 74 61 74   zNewDb..*/.stat
1acc0 69 63 20 76 6f 69 64 20 74 72 79 54 6f 43 6c 6f  ic void tryToClo
1acd0 6e 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  ne(ShellState *p
1ace0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  , const char *zN
1acf0 65 77 44 62 29 7b 0a 20 20 69 6e 74 20 72 63 3b  ewDb){.  int rc;
1ad00 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44  .  sqlite3 *newD
1ad10 62 20 3d 20 30 3b 0a 20 20 69 66 28 20 61 63 63  b = 0;.  if( acc
1ad20 65 73 73 28 7a 4e 65 77 44 62 2c 30 29 3d 3d 30  ess(zNewDb,0)==0
1ad30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
1ad40 6e 74 66 28 73 74 64 65 72 72 2c 20 22 46 69 6c  ntf(stderr, "Fil
1ad50 65 20 5c 22 25 73 5c 22 20 61 6c 72 65 61 64 79  e \"%s\" already
1ad60 20 65 78 69 73 74 73 2e 5c 6e 22 2c 20 7a 4e 65   exists.\n", zNe
1ad70 77 44 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  wDb);.    return
1ad80 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
1ad90 69 74 65 33 5f 6f 70 65 6e 28 7a 4e 65 77 44 62  ite3_open(zNewDb
1ada0 2c 20 26 6e 65 77 44 62 29 3b 0a 20 20 69 66 28  , &newDb);.  if(
1adb0 20 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f   rc ){.    utf8_
1adc0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1add0 43 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 6f 75  Cannot create ou
1ade0 74 70 75 74 20 64 61 74 61 62 61 73 65 3a 20 25  tput database: %
1adf0 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
1ae00 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
1ae10 28 6e 65 77 44 62 29 29 3b 0a 20 20 7d 65 6c 73  (newDb));.  }els
1ae20 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  e{.    sqlite3_e
1ae30 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47  xec(p->db, "PRAG
1ae40 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
1ae50 6d 61 3d 4f 4e 3b 22 2c 20 30 2c 20 30 2c 20 30  ma=ON;", 0, 0, 0
1ae60 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  );.    sqlite3_e
1ae70 78 65 63 28 6e 65 77 44 62 2c 20 22 42 45 47 49  xec(newDb, "BEGI
1ae80 4e 20 45 58 43 4c 55 53 49 56 45 3b 22 2c 20 30  N EXCLUSIVE;", 0
1ae90 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 74 72 79  , 0, 0);.    try
1aea0 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 70 2c  ToCloneSchema(p,
1aeb0 20 6e 65 77 44 62 2c 20 22 74 79 70 65 3d 27 74   newDb, "type='t
1aec0 61 62 6c 65 27 22 2c 20 74 72 79 54 6f 43 6c 6f  able'", tryToClo
1aed0 6e 65 44 61 74 61 29 3b 0a 20 20 20 20 74 72 79  neData);.    try
1aee0 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 70 2c  ToCloneSchema(p,
1aef0 20 6e 65 77 44 62 2c 20 22 74 79 70 65 21 3d 27   newDb, "type!='
1af00 74 61 62 6c 65 27 22 2c 20 30 29 3b 0a 20 20 20  table'", 0);.   
1af10 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e 65   sqlite3_exec(ne
1af20 77 44 62 2c 20 22 43 4f 4d 4d 49 54 3b 22 2c 20  wDb, "COMMIT;", 
1af30 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71  0, 0, 0);.    sq
1af40 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
1af50 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74 61 62  , "PRAGMA writab
1af60 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 3b 22 2c  le_schema=OFF;",
1af70 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20   0, 0, 0);.  }. 
1af80 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 6e   sqlite3_close(n
1af90 65 77 44 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ewDb);.}../*.** 
1afa0 43 68 61 6e 67 65 20 74 68 65 20 6f 75 74 70 75  Change the outpu
1afb0 74 20 66 69 6c 65 20 62 61 63 6b 20 74 6f 20 73  t file back to s
1afc0 74 64 6f 75 74 0a 2a 2f 0a 73 74 61 74 69 63 20  tdout.*/.static 
1afd0 76 6f 69 64 20 6f 75 74 70 75 74 5f 72 65 73 65  void output_rese
1afe0 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29  t(ShellState *p)
1aff0 7b 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74 66 69  {.  if( p->outfi
1b000 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29 7b 0a 23 69  le[0]=='|' ){.#i
1b010 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1b020 54 5f 50 4f 50 45 4e 0a 20 20 20 20 70 63 6c 6f  T_POPEN.    pclo
1b030 73 65 28 70 2d 3e 6f 75 74 29 3b 0a 23 65 6e 64  se(p->out);.#end
1b040 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  if.  }else{.    
1b050 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
1b060 65 28 70 2d 3e 6f 75 74 29 3b 0a 20 20 7d 0a 20  e(p->out);.  }. 
1b070 20 70 2d 3e 6f 75 74 66 69 6c 65 5b 30 5d 20 3d   p->outfile[0] =
1b080 20 30 3b 0a 20 20 70 2d 3e 6f 75 74 20 3d 20 73   0;.  p->out = s
1b090 74 64 6f 75 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  tdout;.}../*.** 
1b0a0 52 75 6e 20 61 6e 20 53 51 4c 20 63 6f 6d 6d 61  Run an SQL comma
1b0b0 6e 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68  nd and return th
1b0c0 65 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  e single integer
1b0d0 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74   result..*/.stat
1b0e0 69 63 20 69 6e 74 20 64 62 5f 69 6e 74 28 53 68  ic int db_int(Sh
1b0f0 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
1b100 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 29 7b 0a  st char *zSql){.
1b110 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1b120 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 65 73  pStmt;.  int res
1b130 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
1b140 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
1b150 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
1b160 6d 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 53  mt, 0);.  if( pS
1b170 74 6d 74 20 26 26 20 73 71 6c 69 74 65 33 5f 73  tmt && sqlite3_s
1b180 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49  tep(pStmt)==SQLI
1b190 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 72 65  TE_ROW ){.    re
1b1a0 73 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  s = sqlite3_colu
1b1b0 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 30 29 3b  mn_int(pStmt,0);
1b1c0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
1b1d0 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
1b1e0 20 20 72 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a    return res;.}.
1b1f0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61  ./*.** Convert a
1b200 20 32 2d 62 79 74 65 20 6f 72 20 34 2d 62 79 74   2-byte or 4-byt
1b210 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
1b220 65 67 65 72 20 69 6e 74 6f 20 61 20 6e 61 74 69  eger into a nati
1b230 76 65 20 69 6e 74 65 67 65 72 0a 2a 2f 0a 73 74  ve integer.*/.st
1b240 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 69 6e  atic unsigned in
1b250 74 20 67 65 74 32 62 79 74 65 49 6e 74 28 75 6e  t get2byteInt(un
1b260 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 29 7b  signed char *a){
1b270 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30 5d 3c  .  return (a[0]<
1b280 3c 38 29 20 2b 20 61 5b 31 5d 3b 0a 7d 0a 73 74  <8) + a[1];.}.st
1b290 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 69 6e  atic unsigned in
1b2a0 74 20 67 65 74 34 62 79 74 65 49 6e 74 28 75 6e  t get4byteInt(un
1b2b0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 29 7b  signed char *a){
1b2c0 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30 5d 3c  .  return (a[0]<
1b2d0 3c 32 34 29 20 2b 20 28 61 5b 31 5d 3c 3c 31 36  <24) + (a[1]<<16
1b2e0 29 20 2b 20 28 61 5b 32 5d 3c 3c 38 29 20 2b 20  ) + (a[2]<<8) + 
1b2f0 61 5b 33 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  a[3];.}../*.** I
1b300 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
1b310 20 74 68 65 20 22 2e 69 6e 66 6f 22 20 63 6f 6d   the ".info" com
1b320 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75  mand..**.** Retu
1b330 72 6e 20 31 20 6f 6e 20 65 72 72 6f 72 2c 20 32  rn 1 on error, 2
1b340 20 74 6f 20 65 78 69 74 2c 20 61 6e 64 20 30 20   to exit, and 0 
1b350 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 73 74  otherwise..*/.st
1b360 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 64  atic int shell_d
1b370 62 69 6e 66 6f 5f 63 6f 6d 6d 61 6e 64 28 53 68  binfo_command(Sh
1b380 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 69 6e 74  ellState *p, int
1b390 20 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a   nArg, char **az
1b3a0 41 72 67 29 7b 0a 20 20 73 74 61 74 69 63 20 63  Arg){.  static c
1b3b0 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 20 63 6f  onst struct { co
1b3c0 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
1b3d0 20 69 6e 74 20 6f 66 73 74 3b 20 7d 20 61 46 69   int ofst; } aFi
1b3e0 65 6c 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b  eld[] = {.     {
1b3f0 20 22 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f   "file change co
1b400 75 6e 74 65 72 3a 22 2c 20 20 32 34 20 20 7d 2c  unter:",  24  },
1b410 0a 20 20 20 20 20 7b 20 22 64 61 74 61 62 61 73  .     { "databas
1b420 65 20 70 61 67 65 20 63 6f 75 6e 74 3a 22 2c 20  e page count:", 
1b430 20 32 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   28  },.     { "
1b440 66 72 65 65 6c 69 73 74 20 70 61 67 65 20 63 6f  freelist page co
1b450 75 6e 74 3a 22 2c 20 20 33 36 20 20 7d 2c 0a 20  unt:",  36  },. 
1b460 20 20 20 20 7b 20 22 73 63 68 65 6d 61 20 63 6f      { "schema co
1b470 6f 6b 69 65 3a 22 2c 20 20 20 20 20 20 20 20 34  okie:",        4
1b480 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 63  0  },.     { "sc
1b490 68 65 6d 61 20 66 6f 72 6d 61 74 3a 22 2c 20 20  hema format:",  
1b4a0 20 20 20 20 20 20 34 34 20 20 7d 2c 0a 20 20 20        44  },.   
1b4b0 20 20 7b 20 22 64 65 66 61 75 6c 74 20 63 61 63    { "default cac
1b4c0 68 65 20 73 69 7a 65 3a 22 2c 20 20 20 34 38 20  he size:",   48 
1b4d0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 75 74 6f   },.     { "auto
1b4e0 76 61 63 75 75 6d 20 74 6f 70 20 72 6f 6f 74 3a  vacuum top root:
1b4f0 22 2c 20 20 35 32 20 20 7d 2c 0a 20 20 20 20 20  ",  52  },.     
1b500 7b 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  { "incremental v
1b510 61 63 75 75 6d 3a 22 2c 20 20 20 36 34 20 20 7d  acuum:",   64  }
1b520 2c 0a 20 20 20 20 20 7b 20 22 74 65 78 74 20 65  ,.     { "text e
1b530 6e 63 6f 64 69 6e 67 3a 22 2c 20 20 20 20 20 20  ncoding:",      
1b540 20 20 35 36 20 20 7d 2c 0a 20 20 20 20 20 7b 20    56  },.     { 
1b550 22 75 73 65 72 20 76 65 72 73 69 6f 6e 3a 22 2c  "user version:",
1b560 20 20 20 20 20 20 20 20 20 36 30 20 20 7d 2c 0a           60  },.
1b570 20 20 20 20 20 7b 20 22 61 70 70 6c 69 63 61 74       { "applicat
1b580 69 6f 6e 20 69 64 3a 22 2c 20 20 20 20 20 20 20  ion id:",       
1b590 36 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  68  },.     { "s
1b5a0 6f 66 74 77 61 72 65 20 76 65 72 73 69 6f 6e 3a  oftware version:
1b5b0 22 2c 20 20 20 20 20 39 36 20 20 7d 2c 0a 20 20  ",     96  },.  
1b5c0 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
1b5d0 74 20 73 74 72 75 63 74 20 7b 20 63 6f 6e 73 74  t struct { const
1b5e0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 63 6f   char *zName; co
1b5f0 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20  nst char *zSql; 
1b600 7d 20 61 51 75 65 72 79 5b 5d 20 3d 20 7b 0a 20  } aQuery[] = {. 
1b610 20 20 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66      { "number of
1b620 20 74 61 62 6c 65 73 3a 22 2c 0a 20 20 20 20 20   tables:",.     
1b630 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28    "SELECT count(
1b640 2a 29 20 46 52 4f 4d 20 25 73 20 57 48 45 52 45  *) FROM %s WHERE
1b650 20 74 79 70 65 3d 27 74 61 62 6c 65 27 22 20 7d   type='table'" }
1b660 2c 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62 65 72  ,.     { "number
1b670 20 6f 66 20 69 6e 64 65 78 65 73 3a 22 2c 0a 20   of indexes:",. 
1b680 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f        "SELECT co
1b690 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73 20 57  unt(*) FROM %s W
1b6a0 48 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65 78  HERE type='index
1b6b0 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 6e 75  '" },.     { "nu
1b6c0 6d 62 65 72 20 6f 66 20 74 72 69 67 67 65 72 73  mber of triggers
1b6d0 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  :",.       "SELE
1b6e0 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
1b6f0 20 25 73 20 57 48 45 52 45 20 74 79 70 65 3d 27   %s WHERE type='
1b700 74 72 69 67 67 65 72 27 22 20 7d 2c 0a 20 20 20  trigger'" },.   
1b710 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66 20 76    { "number of v
1b720 69 65 77 73 3a 22 2c 0a 20 20 20 20 20 20 20 22  iews:",.       "
1b730 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
1b740 46 52 4f 4d 20 25 73 20 57 48 45 52 45 20 74 79  FROM %s WHERE ty
1b750 70 65 3d 27 76 69 65 77 27 22 20 7d 2c 0a 20 20  pe='view'" },.  
1b760 20 20 20 7b 20 22 73 63 68 65 6d 61 20 73 69 7a     { "schema siz
1b770 65 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  e:",.       "SEL
1b780 45 43 54 20 74 6f 74 61 6c 28 6c 65 6e 67 74 68  ECT total(length
1b790 28 73 71 6c 29 29 20 46 52 4f 4d 20 25 73 22 20  (sql)) FROM %s" 
1b7a0 7d 2c 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69 3b  },.  };.  int i;
1b7b0 0a 20 20 63 68 61 72 20 2a 7a 53 63 68 65 6d 61  .  char *zSchema
1b7c0 54 61 62 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62  Tab;.  char *zDb
1b7d0 20 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 61 7a 41   = nArg>=2 ? azA
1b7e0 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a  rg[1] : "main";.
1b7f0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1b800 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 75 6e 73  pStmt = 0;.  uns
1b810 69 67 6e 65 64 20 63 68 61 72 20 61 48 64 72 5b  igned char aHdr[
1b820 31 30 30 5d 3b 0a 20 20 6f 70 65 6e 5f 64 62 28  100];.  open_db(
1b830 70 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 2d 3e  p, 0);.  if( p->
1b840 64 62 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31  db==0 ) return 1
1b850 3b 0a 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ;.  sqlite3_prep
1b860 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 22 53 45  are_v2(p->db,"SE
1b870 4c 45 43 54 20 64 61 74 61 20 46 52 4f 4d 20 73  LECT data FROM s
1b880 71 6c 69 74 65 5f 64 62 70 61 67 65 28 3f 31 29  qlite_dbpage(?1)
1b890 20 57 48 45 52 45 20 70 67 6e 6f 3d 31 22 2c 0a   WHERE pgno=1",.
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8b0 20 20 20 20 20 2d 31 2c 20 26 70 53 74 6d 74 2c       -1, &pStmt,
1b8c0 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 62   0);.  sqlite3_b
1b8d0 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  ind_text(pStmt, 
1b8e0 31 2c 20 7a 44 62 2c 20 2d 31 2c 20 53 51 4c 49  1, zDb, -1, SQLI
1b8f0 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 69 66  TE_STATIC);.  if
1b900 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ( sqlite3_step(p
1b910 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
1b920 57 0a 20 20 20 26 26 20 73 71 6c 69 74 65 33 5f  W.   && sqlite3_
1b930 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53 74  column_bytes(pSt
1b940 6d 74 2c 30 29 3e 31 30 30 0a 20 20 29 7b 0a 20  mt,0)>100.  ){. 
1b950 20 20 20 6d 65 6d 63 70 79 28 61 48 64 72 2c 20     memcpy(aHdr, 
1b960 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
1b970 6c 6f 62 28 70 53 74 6d 74 2c 30 29 2c 20 31 30  lob(pStmt,0), 10
1b980 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
1b990 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
1b9a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 61  .  }else{.    ra
1b9b0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1b9c0 20 22 75 6e 61 62 6c 65 20 74 6f 20 72 65 61 64   "unable to read
1b9d0 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72   database header
1b9e0 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  \n");.    sqlite
1b9f0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
1ba00 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  );.    return 1;
1ba10 0a 20 20 7d 0a 20 20 69 20 3d 20 67 65 74 32 62  .  }.  i = get2b
1ba20 79 74 65 49 6e 74 28 61 48 64 72 2b 31 36 29 3b  yteInt(aHdr+16);
1ba30 0a 20 20 69 66 28 20 69 3d 3d 31 20 29 20 69 20  .  if( i==1 ) i 
1ba40 3d 20 36 35 35 33 36 3b 0a 20 20 75 74 66 38 5f  = 65536;.  utf8_
1ba50 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
1ba60 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 64 61  %-20s %d\n", "da
1ba70 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
1ba80 3a 22 2c 20 69 29 3b 0a 20 20 75 74 66 38 5f 70  :", i);.  utf8_p
1ba90 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
1baa0 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 77 72 69  -20s %d\n", "wri
1bab0 74 65 20 66 6f 72 6d 61 74 3a 22 2c 20 61 48 64  te format:", aHd
1bac0 72 5b 31 38 5d 29 3b 0a 20 20 75 74 66 38 5f 70  r[18]);.  utf8_p
1bad0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
1bae0 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 72 65 61  -20s %d\n", "rea
1baf0 64 20 66 6f 72 6d 61 74 3a 22 2c 20 61 48 64 72  d format:", aHdr
1bb00 5b 31 39 5d 29 3b 0a 20 20 75 74 66 38 5f 70 72  [19]);.  utf8_pr
1bb10 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d  intf(p->out, "%-
1bb20 32 30 73 20 25 64 5c 6e 22 2c 20 22 72 65 73 65  20s %d\n", "rese
1bb30 72 76 65 64 20 62 79 74 65 73 3a 22 2c 20 61 48  rved bytes:", aH
1bb40 64 72 5b 32 30 5d 29 3b 0a 20 20 66 6f 72 28 69  dr[20]);.  for(i
1bb50 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28  =0; i<ArraySize(
1bb60 61 46 69 65 6c 64 29 3b 20 69 2b 2b 29 7b 0a 20  aField); i++){. 
1bb70 20 20 20 69 6e 74 20 6f 66 73 74 20 3d 20 61 46     int ofst = aF
1bb80 69 65 6c 64 5b 69 5d 2e 6f 66 73 74 3b 0a 20 20  ield[i].ofst;.  
1bb90 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 76    unsigned int v
1bba0 61 6c 20 3d 20 67 65 74 34 62 79 74 65 49 6e 74  al = get4byteInt
1bbb0 28 61 48 64 72 20 2b 20 6f 66 73 74 29 3b 0a 20  (aHdr + ofst);. 
1bbc0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
1bbd0 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20 25 75  ->out, "%-20s %u
1bbe0 22 2c 20 61 46 69 65 6c 64 5b 69 5d 2e 7a 4e 61  ", aField[i].zNa
1bbf0 6d 65 2c 20 76 61 6c 29 3b 0a 20 20 20 20 73 77  me, val);.    sw
1bc00 69 74 63 68 28 20 6f 66 73 74 20 29 7b 0a 20 20  itch( ofst ){.  
1bc10 20 20 20 20 63 61 73 65 20 35 36 3a 20 7b 0a 20      case 56: {. 
1bc20 20 20 20 20 20 20 20 69 66 28 20 76 61 6c 3d 3d         if( val==
1bc30 31 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28 70  1 ) raw_printf(p
1bc40 2d 3e 6f 75 74 2c 20 22 20 28 75 74 66 38 29 22  ->out, " (utf8)"
1bc50 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 76  );.        if( v
1bc60 61 6c 3d 3d 32 20 29 20 72 61 77 5f 70 72 69 6e  al==2 ) raw_prin
1bc70 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20 28 75 74  tf(p->out, " (ut
1bc80 66 31 36 6c 65 29 22 29 3b 0a 20 20 20 20 20 20  f16le)");.      
1bc90 20 20 69 66 28 20 76 61 6c 3d 3d 33 20 29 20 72    if( val==3 ) r
1bca0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
1bcb0 2c 20 22 20 28 75 74 66 31 36 62 65 29 22 29 3b  , " (utf16be)");
1bcc0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1bcd0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
1bce0 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 7d  >out, "\n");.  }
1bcf0 0a 20 20 69 66 28 20 7a 44 62 3d 3d 30 20 29 7b  .  if( zDb==0 ){
1bd00 0a 20 20 20 20 7a 53 63 68 65 6d 61 54 61 62 20  .    zSchemaTab 
1bd10 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
1bd20 66 28 22 6d 61 69 6e 2e 73 71 6c 69 74 65 5f 6d  f("main.sqlite_m
1bd30 61 73 74 65 72 22 29 3b 0a 20 20 7d 65 6c 73 65  aster");.  }else
1bd40 20 69 66 28 20 73 74 72 63 6d 70 28 7a 44 62 2c   if( strcmp(zDb,
1bd50 22 74 65 6d 70 22 29 3d 3d 30 20 29 7b 0a 20 20  "temp")==0 ){.  
1bd60 20 20 7a 53 63 68 65 6d 61 54 61 62 20 3d 20 73    zSchemaTab = s
1bd70 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1bd80 25 73 22 2c 20 22 73 71 6c 69 74 65 5f 74 65 6d  %s", "sqlite_tem
1bd90 70 5f 6d 61 73 74 65 72 22 29 3b 0a 20 20 7d 65  p_master");.  }e
1bda0 6c 73 65 7b 0a 20 20 20 20 7a 53 63 68 65 6d 61  lse{.    zSchema
1bdb0 54 61 62 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Tab = sqlite3_mp
1bdc0 72 69 6e 74 66 28 22 5c 22 25 77 5c 22 2e 73 71  rintf("\"%w\".sq
1bdd0 6c 69 74 65 5f 6d 61 73 74 65 72 22 2c 20 7a 44  lite_master", zD
1bde0 62 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  b);.  }.  for(i=
1bdf0 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61  0; i<ArraySize(a
1be00 51 75 65 72 79 29 3b 20 69 2b 2b 29 7b 0a 20 20  Query); i++){.  
1be10 20 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 73    char *zSql = s
1be20 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
1be30 51 75 65 72 79 5b 69 5d 2e 7a 53 71 6c 2c 20 7a  Query[i].zSql, z
1be40 53 63 68 65 6d 61 54 61 62 29 3b 0a 20 20 20 20  SchemaTab);.    
1be50 69 6e 74 20 76 61 6c 20 3d 20 64 62 5f 69 6e 74  int val = db_int
1be60 28 70 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 73  (p, zSql);.    s
1be70 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
1be80 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
1be90 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30  tf(p->out, "%-20
1bea0 73 20 25 64 5c 6e 22 2c 20 61 51 75 65 72 79 5b  s %d\n", aQuery[
1beb0 69 5d 2e 7a 4e 61 6d 65 2c 20 76 61 6c 29 3b 0a  i].zName, val);.
1bec0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72    }.  sqlite3_fr
1bed0 65 65 28 7a 53 63 68 65 6d 61 54 61 62 29 3b 0a  ee(zSchemaTab);.
1bee0 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
1bef0 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 63  *.** Print the c
1bf00 75 72 72 65 6e 74 20 73 71 6c 69 74 65 33 5f 65  urrent sqlite3_e
1bf10 72 72 6d 73 67 28 29 20 76 61 6c 75 65 20 74 6f  rrmsg() value to
1bf20 20 73 74 64 65 72 72 20 61 6e 64 20 72 65 74 75   stderr and retu
1bf30 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rn 1..*/.static 
1bf40 69 6e 74 20 73 68 65 6c 6c 44 61 74 61 62 61 73  int shellDatabas
1bf50 65 45 72 72 6f 72 28 73 71 6c 69 74 65 33 20 2a  eError(sqlite3 *
1bf60 64 62 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  db){.  const cha
1bf70 72 20 2a 7a 45 72 72 20 3d 20 73 71 6c 69 74 65  r *zErr = sqlite
1bf80 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a 20 20  3_errmsg(db);.  
1bf90 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
1bfa0 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e  rr, "Error: %s\n
1bfb0 22 2c 20 7a 45 72 72 29 3b 0a 20 20 72 65 74 75  ", zErr);.  retu
1bfc0 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  rn 1;.}../*.** P
1bfd0 72 69 6e 74 20 61 6e 20 6f 75 74 2d 6f 66 2d 6d  rint an out-of-m
1bfe0 65 6d 6f 72 79 20 6d 65 73 73 61 67 65 20 74 6f  emory message to
1bff0 20 73 74 64 65 72 72 20 61 6e 64 20 72 65 74 75   stderr and retu
1c000 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rn 1..*/.static 
1c010 69 6e 74 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45 72  int shellNomemEr
1c020 72 6f 72 28 76 6f 69 64 29 7b 0a 20 20 72 61 77  ror(void){.  raw
1c030 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1c040 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d  "Error: out of m
1c050 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 72 65 74  emory\n");.  ret
1c060 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 1;.}../*.** 
1c070 43 6f 6d 70 61 72 65 20 74 68 65 20 70 61 74 74  Compare the patt
1c080 65 72 6e 20 69 6e 20 7a 47 6c 6f 62 5b 5d 20 61  ern in zGlob[] a
1c090 67 61 69 6e 73 74 20 74 68 65 20 74 65 78 74 20  gainst the text 
1c0a0 69 6e 20 7a 5b 5d 2e 20 20 52 65 74 75 72 6e 20  in z[].  Return 
1c0b0 54 52 55 45 0a 2a 2a 20 69 66 20 74 68 65 79 20  TRUE.** if they 
1c0c0 6d 61 74 63 68 20 61 6e 64 20 46 41 4c 53 45 20  match and FALSE 
1c0d0 28 30 29 20 69 66 20 74 68 65 79 20 64 6f 20 6e  (0) if they do n
1c0e0 6f 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20  ot match..**.** 
1c0f0 47 6c 6f 62 62 69 6e 67 20 72 75 6c 65 73 3a 0a  Globbing rules:.
1c100 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 2a 27 20 20  **.**      '*'  
1c110 20 20 20 20 20 4d 61 74 63 68 65 73 20 61 6e 79       Matches any
1c120 20 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72   sequence of zer
1c130 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63  o or more charac
1c140 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ters..**.**     
1c150 20 27 3f 27 20 20 20 20 20 20 20 4d 61 74 63 68   '?'       Match
1c160 65 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 63  es exactly one c
1c170 68 61 72 61 63 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  haracter..**.** 
1c180 20 20 20 20 5b 2e 2e 2e 5d 20 20 20 20 20 20 4d      [...]      M
1c190 61 74 63 68 65 73 20 6f 6e 65 20 63 68 61 72 61  atches one chara
1c1a0 63 74 65 72 20 66 72 6f 6d 20 74 68 65 20 65 6e  cter from the en
1c1b0 63 6c 6f 73 65 64 20 6c 69 73 74 20 6f 66 0a 2a  closed list of.*
1c1c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c1d0 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2a 0a   characters..**.
1c1e0 2a 2a 20 20 20 20 20 5b 5e 2e 2e 2e 5d 20 20 20  **     [^...]   
1c1f0 20 20 4d 61 74 63 68 65 73 20 6f 6e 65 20 63 68    Matches one ch
1c200 61 72 61 63 74 65 72 20 6e 6f 74 20 69 6e 20 74  aracter not in t
1c210 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69 73 74  he enclosed list
1c220 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 23 27  ..**.**      '#'
1c230 20 20 20 20 20 20 20 4d 61 74 63 68 65 73 20 61         Matches a
1c240 6e 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20 6f  ny sequence of o
1c250 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74  ne or more digit
1c260 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 20 20 20  s with an.**    
1c270 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 74 69              opti
1c280 6f 6e 61 6c 20 2b 20 6f 72 20 2d 20 73 69 67 6e  onal + or - sign
1c290 20 69 6e 20 66 72 6f 6e 74 0a 2a 2a 0a 2a 2a 20   in front.**.** 
1c2a0 20 20 20 20 20 27 20 27 20 20 20 20 20 20 20 41       ' '       A
1c2b0 6e 79 20 73 70 61 6e 20 6f 66 20 77 68 69 74 65  ny span of white
1c2c0 73 70 61 63 65 20 6d 61 74 63 68 65 73 20 61 6e  space matches an
1c2d0 79 20 6f 74 68 65 72 20 73 70 61 6e 20 6f 66 0a  y other span of.
1c2e0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1c2f0 20 20 77 68 69 74 65 73 70 61 63 65 2e 0a 2a 2a    whitespace..**
1c300 0a 2a 2a 20 45 78 74 72 61 20 77 68 69 74 65 73  .** Extra whites
1c310 70 61 63 65 20 61 74 20 74 68 65 20 65 6e 64 20  pace at the end 
1c320 6f 66 20 7a 5b 5d 20 69 73 20 69 67 6e 6f 72 65  of z[] is ignore
1c330 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
1c340 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 63   testcase_glob(c
1c350 6f 6e 73 74 20 63 68 61 72 20 2a 7a 47 6c 6f 62  onst char *zGlob
1c360 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  , const char *z)
1c370 7b 0a 20 20 69 6e 74 20 63 2c 20 63 32 3b 0a 20  {.  int c, c2;. 
1c380 20 69 6e 74 20 69 6e 76 65 72 74 3b 0a 20 20 69   int invert;.  i
1c390 6e 74 20 73 65 65 6e 3b 0a 0a 20 20 77 68 69 6c  nt seen;..  whil
1c3a0 65 28 20 28 63 20 3d 20 28 2a 28 7a 47 6c 6f 62  e( (c = (*(zGlob
1c3b0 2b 2b 29 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  ++)))!=0 ){.    
1c3c0 69 66 28 20 49 73 53 70 61 63 65 28 63 29 20 29  if( IsSpace(c) )
1c3d0 7b 0a 20 20 20 20 20 20 69 66 28 20 21 49 73 53  {.      if( !IsS
1c3e0 70 61 63 65 28 2a 7a 29 20 29 20 72 65 74 75 72  pace(*z) ) retur
1c3f0 6e 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  n 0;.      while
1c400 28 20 49 73 53 70 61 63 65 28 2a 7a 47 6c 6f 62  ( IsSpace(*zGlob
1c410 29 20 29 20 7a 47 6c 6f 62 2b 2b 3b 0a 20 20 20  ) ) zGlob++;.   
1c420 20 20 20 77 68 69 6c 65 28 20 49 73 53 70 61 63     while( IsSpac
1c430 65 28 2a 7a 29 20 29 20 7a 2b 2b 3b 0a 20 20 20  e(*z) ) z++;.   
1c440 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 2a   }else if( c=='*
1c450 27 20 29 7b 0a 20 20 20 20 20 20 77 68 69 6c 65  ' ){.      while
1c460 28 20 28 63 3d 28 2a 28 7a 47 6c 6f 62 2b 2b 29  ( (c=(*(zGlob++)
1c470 29 29 20 3d 3d 20 27 2a 27 20 7c 7c 20 63 3d 3d  )) == '*' || c==
1c480 27 3f 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69  '?' ){.        i
1c490 66 28 20 63 3d 3d 27 3f 27 20 26 26 20 28 2a 28  f( c=='?' && (*(
1c4a0 7a 2b 2b 29 29 3d 3d 30 20 29 20 72 65 74 75 72  z++))==0 ) retur
1c4b0 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 0;.      }.   
1c4c0 20 20 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20     if( c==0 ){. 
1c4d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
1c4e0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
1c4f0 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20 20 20   c=='[' ){.     
1c500 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20     while( *z && 
1c510 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 7a 47  testcase_glob(zG
1c520 6c 6f 62 2d 31 2c 7a 29 3d 3d 30 20 29 7b 0a 20  lob-1,z)==0 ){. 
1c530 20 20 20 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20           z++;.  
1c540 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1c550 72 65 74 75 72 6e 20 28 2a 7a 29 21 3d 30 3b 0a  return (*z)!=0;.
1c560 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 77 68        }.      wh
1c570 69 6c 65 28 20 28 63 32 20 3d 20 28 2a 28 7a 2b  ile( (c2 = (*(z+
1c580 2b 29 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  +)))!=0 ){.     
1c590 20 20 20 77 68 69 6c 65 28 20 63 32 21 3d 63 20     while( c2!=c 
1c5a0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 32 20  ){.          c2 
1c5b0 3d 20 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20 20 20  = *(z++);.      
1c5c0 20 20 20 20 69 66 28 20 63 32 3d 3d 30 20 29 20      if( c2==0 ) 
1c5d0 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
1c5e0 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
1c5f0 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 7a 47  testcase_glob(zG
1c600 6c 6f 62 2c 7a 29 20 29 20 72 65 74 75 72 6e 20  lob,z) ) return 
1c610 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
1c620 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
1c630 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 3f 27 20  else if( c=='?' 
1c640 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 2a 28  ){.      if( (*(
1c650 7a 2b 2b 29 29 3d 3d 30 20 29 20 72 65 74 75 72  z++))==0 ) retur
1c660 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  n 0;.    }else i
1c670 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20  f( c=='[' ){.   
1c680 20 20 20 69 6e 74 20 70 72 69 6f 72 5f 63 20 3d     int prior_c =
1c690 20 30 3b 0a 20 20 20 20 20 20 73 65 65 6e 20 3d   0;.      seen =
1c6a0 20 30 3b 0a 20 20 20 20 20 20 69 6e 76 65 72 74   0;.      invert
1c6b0 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 20 3d 20   = 0;.      c = 
1c6c0 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20 20 20 69 66  *(z++);.      if
1c6d0 28 20 63 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ( c==0 ) return 
1c6e0 30 3b 0a 20 20 20 20 20 20 63 32 20 3d 20 2a 28  0;.      c2 = *(
1c6f0 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20  zGlob++);.      
1c700 69 66 28 20 63 32 3d 3d 27 5e 27 20 29 7b 0a 20  if( c2=='^' ){. 
1c710 20 20 20 20 20 20 20 69 6e 76 65 72 74 20 3d 20         invert = 
1c720 31 3b 0a 20 20 20 20 20 20 20 20 63 32 20 3d 20  1;.        c2 = 
1c730 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20  *(zGlob++);.    
1c740 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 32    }.      if( c2
1c750 3d 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20 20 20  ==']' ){.       
1c760 20 69 66 28 20 63 3d 3d 27 5d 27 20 29 20 73 65   if( c==']' ) se
1c770 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  en = 1;.        
1c780 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b  c2 = *(zGlob++);
1c790 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 77  .      }.      w
1c7a0 68 69 6c 65 28 20 63 32 20 26 26 20 63 32 21 3d  hile( c2 && c2!=
1c7b0 27 5d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ']' ){.        i
1c7c0 66 28 20 63 32 3d 3d 27 2d 27 20 26 26 20 7a 47  f( c2=='-' && zG
1c7d0 6c 6f 62 5b 30 5d 21 3d 27 5d 27 20 26 26 20 7a  lob[0]!=']' && z
1c7e0 47 6c 6f 62 5b 30 5d 21 3d 30 20 26 26 20 70 72  Glob[0]!=0 && pr
1c7f0 69 6f 72 5f 63 3e 30 20 29 7b 0a 20 20 20 20 20  ior_c>0 ){.     
1c800 20 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f       c2 = *(zGlo
1c810 62 2b 2b 29 3b 0a 20 20 20 20 20 20 20 20 20 20  b++);.          
1c820 69 66 28 20 63 3e 3d 70 72 69 6f 72 5f 63 20 26  if( c>=prior_c &
1c830 26 20 63 3c 3d 63 32 20 29 20 73 65 65 6e 20 3d  & c<=c2 ) seen =
1c840 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72   1;.          pr
1c850 69 6f 72 5f 63 20 3d 20 30 3b 0a 20 20 20 20 20  ior_c = 0;.     
1c860 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1c870 20 20 20 20 69 66 28 20 63 3d 3d 63 32 20 29 7b      if( c==c2 ){
1c880 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 65  .            see
1c890 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  n = 1;.         
1c8a0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 70 72 69   }.          pri
1c8b0 6f 72 5f 63 20 3d 20 63 32 3b 0a 20 20 20 20 20  or_c = c2;.     
1c8c0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63 32 20     }.        c2 
1c8d0 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20  = *(zGlob++);.  
1c8e0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
1c8f0 63 32 3d 3d 30 20 7c 7c 20 28 73 65 65 6e 20 5e  c2==0 || (seen ^
1c900 20 69 6e 76 65 72 74 29 3d 3d 30 20 29 20 72 65   invert)==0 ) re
1c910 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73  turn 0;.    }els
1c920 65 20 69 66 28 20 63 3d 3d 27 23 27 20 29 7b 0a  e if( c=='#' ){.
1c930 20 20 20 20 20 20 69 66 28 20 28 7a 5b 30 5d 3d        if( (z[0]=
1c940 3d 27 2d 27 20 7c 7c 20 7a 5b 30 5d 3d 3d 27 2b  ='-' || z[0]=='+
1c950 27 29 20 26 26 20 49 73 44 69 67 69 74 28 7a 5b  ') && IsDigit(z[
1c960 31 5d 29 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 20  1]) ) z++;.     
1c970 20 69 66 28 20 21 49 73 44 69 67 69 74 28 7a 5b   if( !IsDigit(z[
1c980 30 5d 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  0]) ) return 0;.
1c990 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20        z++;.     
1c9a0 20 77 68 69 6c 65 28 20 49 73 44 69 67 69 74 28   while( IsDigit(
1c9b0 7a 5b 30 5d 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a  z[0]) ){ z++; }.
1c9c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1c9d0 20 69 66 28 20 63 21 3d 28 2a 28 7a 2b 2b 29 29   if( c!=(*(z++))
1c9e0 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
1c9f0 20 7d 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20   }.  }.  while( 
1ca00 49 73 53 70 61 63 65 28 2a 7a 29 20 29 7b 20 7a  IsSpace(*z) ){ z
1ca10 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a  ++; }.  return *
1ca20 7a 3d 3d 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  z==0;.}.../*.** 
1ca30 43 6f 6d 70 61 72 65 20 74 68 65 20 73 74 72 69  Compare the stri
1ca40 6e 67 20 61 73 20 61 20 63 6f 6d 6d 61 6e 64 2d  ng as a command-
1ca50 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 77 69 74 68  line option with
1ca60 20 65 69 74 68 65 72 20 6f 6e 65 20 6f 72 20 74   either one or t
1ca70 77 6f 0a 2a 2a 20 69 6e 69 74 69 61 6c 20 22 2d  wo.** initial "-
1ca80 22 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2f  " characters..*/
1ca90 0a 73 74 61 74 69 63 20 69 6e 74 20 6f 70 74 69  .static int opti
1caa0 6f 6e 4d 61 74 63 68 28 63 6f 6e 73 74 20 63 68  onMatch(const ch
1cab0 61 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73 74 20  ar *zStr, const 
1cac0 63 68 61 72 20 2a 7a 4f 70 74 29 7b 0a 20 20 69  char *zOpt){.  i
1cad0 66 28 20 7a 53 74 72 5b 30 5d 21 3d 27 2d 27 20  f( zStr[0]!='-' 
1cae0 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a 53  ) return 0;.  zS
1caf0 74 72 2b 2b 3b 0a 20 20 69 66 28 20 7a 53 74 72  tr++;.  if( zStr
1cb00 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 53 74 72 2b  [0]=='-' ) zStr+
1cb10 2b 3b 0a 20 20 72 65 74 75 72 6e 20 73 74 72 63  +;.  return strc
1cb20 6d 70 28 7a 53 74 72 2c 20 7a 4f 70 74 29 3d 3d  mp(zStr, zOpt)==
1cb30 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 6c 65  0;.}../*.** Dele
1cb40 74 65 20 61 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e  te a file..*/.in
1cb50 74 20 73 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c  t shellDeleteFil
1cb60 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  e(const char *zF
1cb70 69 6c 65 6e 61 6d 65 29 7b 0a 20 20 69 6e 74 20  ilename){.  int 
1cb80 72 63 3b 0a 23 69 66 64 65 66 20 5f 57 49 4e 33  rc;.#ifdef _WIN3
1cb90 32 0a 20 20 77 63 68 61 72 5f 74 20 2a 7a 20 3d  2.  wchar_t *z =
1cba0 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75   sqlite3_win32_u
1cbb0 74 66 38 5f 74 6f 5f 75 6e 69 63 6f 64 65 28 7a  tf8_to_unicode(z
1cbc0 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 72 63 20  Filename);.  rc 
1cbd0 3d 20 5f 77 75 6e 6c 69 6e 6b 28 7a 29 3b 0a 20  = _wunlink(z);. 
1cbe0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
1cbf0 3b 0a 23 65 6c 73 65 0a 20 20 72 63 20 3d 20 75  ;.#else.  rc = u
1cc00 6e 6c 69 6e 6b 28 7a 46 69 6c 65 6e 61 6d 65 29  nlink(zFilename)
1cc10 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
1cc20 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  n rc;.}.../*.** 
1cc30 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  The implementati
1cc40 6f 6e 20 6f 66 20 53 51 4c 20 73 63 61 6c 61 72  on of SQL scalar
1cc50 20 66 75 6e 63 74 69 6f 6e 20 66 6b 65 79 5f 63   function fkey_c
1cc60 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28 29 2c  ollate_clause(),
1cc70 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68 65 20   used.** by the 
1cc80 22 2e 6c 69 6e 74 20 66 6b 65 79 2d 69 6e 64 65  ".lint fkey-inde
1cc90 78 65 73 22 20 63 6f 6d 6d 61 6e 64 2e 20 54 68  xes" command. Th
1cca0 69 73 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69  is scalar functi
1ccb0 6f 6e 20 69 73 20 61 6c 77 61 79 73 0a 2a 2a 20  on is always.** 
1ccc0 63 61 6c 6c 65 64 20 77 69 74 68 20 66 6f 75 72  called with four
1ccd0 20 61 72 67 75 6d 65 6e 74 73 20 2d 20 74 68 65   arguments - the
1cce0 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 6e 61   parent table na
1ccf0 6d 65 2c 20 74 68 65 20 70 61 72 65 6e 74 20 63  me, the parent c
1cd00 6f 6c 75 6d 6e 20 6e 61 6d 65 2c 0a 2a 2a 20 74  olumn name,.** t
1cd10 68 65 20 63 68 69 6c 64 20 74 61 62 6c 65 20 6e  he child table n
1cd20 61 6d 65 20 61 6e 64 20 74 68 65 20 63 68 69 6c  ame and the chil
1cd30 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 2a  d column name..*
1cd40 2a 0a 2a 2a 20 20 20 66 6b 65 79 5f 63 6f 6c 6c  *.**   fkey_coll
1cd50 61 74 65 5f 63 6c 61 75 73 65 28 27 70 61 72 65  ate_clause('pare
1cd60 6e 74 2d 74 61 62 27 2c 20 27 70 61 72 65 6e 74  nt-tab', 'parent
1cd70 2d 63 6f 6c 27 2c 20 27 63 68 69 6c 64 2d 74 61  -col', 'child-ta
1cd80 62 27 2c 20 27 63 68 69 6c 64 2d 63 6f 6c 27 29  b', 'child-col')
1cd90 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
1cda0 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61   of the named ta
1cdb0 62 6c 65 73 20 6f 72 20 63 6f 6c 75 6d 6e 73 20  bles or columns 
1cdc0 64 6f 20 6e 6f 74 20 65 78 69 73 74 2c 20 74 68  do not exist, th
1cdd0 69 73 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 72  is function.** r
1cde0 65 74 75 72 6e 73 20 61 6e 20 65 6d 70 74 79 20  eturns an empty 
1cdf0 73 74 72 69 6e 67 2e 20 41 6e 20 65 6d 70 74 79  string. An empty
1ce00 20 73 74 72 69 6e 67 20 69 73 20 61 6c 73 6f 20   string is also 
1ce10 72 65 74 75 72 6e 65 64 20 69 66 20 62 6f 74 68  returned if both
1ce20 20 74 61 62 6c 65 73 0a 2a 2a 20 61 6e 64 20 63   tables.** and c
1ce30 6f 6c 75 6d 6e 73 20 65 78 69 73 74 20 62 75 74  olumns exist but
1ce40 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64   have the same d
1ce50 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
1ce60 20 73 65 71 75 65 6e 63 65 2e 20 4f 72 2c 0a 2a   sequence. Or,.*
1ce70 2a 20 69 66 20 62 6f 74 68 20 65 78 69 73 74 20  * if both exist 
1ce80 62 75 74 20 74 68 65 20 64 65 66 61 75 6c 74 20  but the default 
1ce90 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1cea0 63 65 73 20 61 72 65 20 64 69 66 66 65 72 65 6e  ces are differen
1ceb0 74 2c 20 74 68 69 73 0a 2a 2a 20 66 75 6e 63 74  t, this.** funct
1cec0 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1ced0 73 74 72 69 6e 67 20 22 20 43 4f 4c 4c 41 54 45  string " COLLATE
1cee0 20 3c 70 61 72 65 6e 74 2d 63 6f 6c 6c 61 74 69   <parent-collati
1cef0 6f 6e 3e 22 2c 20 77 68 65 72 65 0a 2a 2a 20 3c  on>", where.** <
1cf00 70 61 72 65 6e 74 2d 63 6f 6c 6c 61 74 69 6f 6e  parent-collation
1cf10 3e 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  > is the default
1cf20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1cf30 6e 63 65 20 6f 66 20 74 68 65 20 70 61 72 65 6e  nce of the paren
1cf40 74 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 73 74 61  t column..*/.sta
1cf50 74 69 63 20 76 6f 69 64 20 73 68 65 6c 6c 46 6b  tic void shellFk
1cf60 65 79 43 6f 6c 6c 61 74 65 43 6c 61 75 73 65 28  eyCollateClause(
1cf70 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
1cf80 78 74 20 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20  xt *pCtx,.  int 
1cf90 6e 56 61 6c 2c 0a 20 20 73 71 6c 69 74 65 33 5f  nVal,.  sqlite3_
1cfa0 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 0a 29 7b  value **apVal.){
1cfb0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
1cfc0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
1cfd0 5f 64 62 5f 68 61 6e 64 6c 65 28 70 43 74 78 29  _db_handle(pCtx)
1cfe0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
1cff0 7a 50 61 72 65 6e 74 3b 0a 20 20 63 6f 6e 73 74  zParent;.  const
1d000 20 63 68 61 72 20 2a 7a 50 61 72 65 6e 74 43 6f   char *zParentCo
1d010 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  l;.  const char 
1d020 2a 7a 50 61 72 65 6e 74 53 65 71 3b 0a 20 20 63  *zParentSeq;.  c
1d030 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 68 69 6c  onst char *zChil
1d040 64 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  d;.  const char 
1d050 2a 7a 43 68 69 6c 64 43 6f 6c 3b 0a 20 20 63 6f  *zChildCol;.  co
1d060 6e 73 74 20 63 68 61 72 20 2a 7a 43 68 69 6c 64  nst char *zChild
1d070 53 65 71 20 3d 20 30 3b 20 20 2f 2a 20 49 6e 69  Seq = 0;  /* Ini
1d080 74 69 61 6c 69 7a 65 20 74 6f 20 61 76 6f 69 64  tialize to avoid
1d090 20 66 61 6c 73 65 2d 70 6f 73 69 74 69 76 65 20   false-positive 
1d0a0 77 61 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  warning */.  int
1d0b0 20 72 63 3b 0a 0a 20 20 61 73 73 65 72 74 28 20   rc;..  assert( 
1d0c0 6e 56 61 6c 3d 3d 34 20 29 3b 0a 20 20 7a 50 61  nVal==4 );.  zPa
1d0d0 72 65 6e 74 20 3d 20 28 63 6f 6e 73 74 20 63 68  rent = (const ch
1d0e0 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
1d0f0 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 30 5d 29  e_text(apVal[0])
1d100 3b 0a 20 20 7a 50 61 72 65 6e 74 43 6f 6c 20 3d  ;.  zParentCol =
1d110 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
1d120 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
1d130 28 61 70 56 61 6c 5b 31 5d 29 3b 0a 20 20 7a 43  (apVal[1]);.  zC
1d140 68 69 6c 64 20 3d 20 28 63 6f 6e 73 74 20 63 68  hild = (const ch
1d150 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
1d160 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 32 5d 29  e_text(apVal[2])
1d170 3b 0a 20 20 7a 43 68 69 6c 64 43 6f 6c 20 3d 20  ;.  zChildCol = 
1d180 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
1d190 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
1d1a0 61 70 56 61 6c 5b 33 5d 29 3b 0a 0a 20 20 73 71  apVal[3]);..  sq
1d1b0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
1d1c0 74 28 70 43 74 78 2c 20 22 22 2c 20 2d 31 2c 20  t(pCtx, "", -1, 
1d1d0 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
1d1e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74    rc = sqlite3_t
1d1f0 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
1d200 64 61 74 61 28 0a 20 20 20 20 20 20 64 62 2c 20  data(.      db, 
1d210 22 6d 61 69 6e 22 2c 20 7a 50 61 72 65 6e 74 2c  "main", zParent,
1d220 20 7a 50 61 72 65 6e 74 43 6f 6c 2c 20 30 2c 20   zParentCol, 0, 
1d230 26 7a 50 61 72 65 6e 74 53 65 71 2c 20 30 2c 20  &zParentSeq, 0, 
1d240 30 2c 20 30 0a 20 20 29 3b 0a 20 20 69 66 28 20  0, 0.  );.  if( 
1d250 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1d260 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1d270 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
1d280 65 74 61 64 61 74 61 28 0a 20 20 20 20 20 20 20  etadata(.       
1d290 20 64 62 2c 20 22 6d 61 69 6e 22 2c 20 7a 43 68   db, "main", zCh
1d2a0 69 6c 64 2c 20 7a 43 68 69 6c 64 43 6f 6c 2c 20  ild, zChildCol, 
1d2b0 30 2c 20 26 7a 43 68 69 6c 64 53 65 71 2c 20 30  0, &zChildSeq, 0
1d2c0 2c 20 30 2c 20 30 0a 20 20 20 20 29 3b 0a 20 20  , 0, 0.    );.  
1d2d0 7d 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  }..  if( rc==SQL
1d2e0 49 54 45 5f 4f 4b 20 26 26 20 73 71 6c 69 74 65  ITE_OK && sqlite
1d2f0 33 5f 73 74 72 69 63 6d 70 28 7a 50 61 72 65 6e  3_stricmp(zParen
1d300 74 53 65 71 2c 20 7a 43 68 69 6c 64 53 65 71 29  tSeq, zChildSeq)
1d310 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20   ){.    char *z 
1d320 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
1d330 66 28 22 20 43 4f 4c 4c 41 54 45 20 25 73 22 2c  f(" COLLATE %s",
1d340 20 7a 50 61 72 65 6e 74 53 65 71 29 3b 0a 20 20   zParentSeq);.  
1d350 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
1d360 5f 74 65 78 74 28 70 43 74 78 2c 20 7a 2c 20 2d  _text(pCtx, z, -
1d370 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  1, SQLITE_TRANSI
1d380 45 4e 54 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ENT);.    sqlite
1d390 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 7d 0a 7d  3_free(z);.  }.}
1d3a0 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6d 70  .../*.** The imp
1d3b0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 64  lementation of d
1d3c0 6f 74 2d 63 6f 6d 6d 61 6e 64 20 22 2e 6c 69 6e  ot-command ".lin
1d3d0 74 20 66 6b 65 79 2d 69 6e 64 65 78 65 73 22 2e  t fkey-indexes".
1d3e0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6c  .*/.static int l
1d3f0 69 6e 74 46 6b 65 79 49 6e 64 65 78 65 73 28 0a  intFkeyIndexes(.
1d400 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 53    ShellState *pS
1d410 74 61 74 65 2c 20 20 20 20 20 20 20 20 20 20 20  tate,           
1d420 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 68 65    /* Current she
1d430 6c 6c 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a 2f  ll tool state */
1d440 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c  .  char **azArg,
1d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d460 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 61     /* Array of a
1d470 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20  rguments passed 
1d480 74 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20 2a  to dot command *
1d490 2f 0a 20 20 69 6e 74 20 6e 41 72 67 20 20 20 20  /.  int nArg    
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d4c0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 41 72   entries in azAr
1d4d0 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  g[] */.){.  sqli
1d4e0 74 65 33 20 2a 64 62 20 3d 20 70 53 74 61 74 65  te3 *db = pState
1d4f0 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 44  ->db;       /* D
1d500 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74  atabase handle t
1d510 6f 20 71 75 65 72 79 20 22 6d 61 69 6e 22 20 64  o query "main" d
1d520 62 20 6f 66 20 2a 2f 0a 20 20 46 49 4c 45 20 2a  b of */.  FILE *
1d530 6f 75 74 20 3d 20 70 53 74 61 74 65 2d 3e 6f 75  out = pState->ou
1d540 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72  t;        /* Str
1d550 65 61 6d 20 74 6f 20 77 72 69 74 65 20 6e 6f 6e  eam to write non
1d560 2d 65 72 72 6f 72 20 6f 75 74 70 75 74 20 74 6f  -error output to
1d570 20 2a 2f 0a 20 20 69 6e 74 20 62 56 65 72 62 6f   */.  int bVerbo
1d580 73 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  se = 0;         
1d590 20 20 20 20 20 20 2f 2a 20 49 66 20 2d 76 65 72        /* If -ver
1d5a0 62 6f 73 65 20 69 73 20 70 72 65 73 65 6e 74 20  bose is present 
1d5b0 2a 2f 0a 20 20 69 6e 74 20 62 47 72 6f 75 70 42  */.  int bGroupB
1d5c0 79 50 61 72 65 6e 74 20 3d 20 30 3b 20 20 20 20  yParent = 0;    
1d5d0 20 20 20 20 20 2f 2a 20 49 66 20 2d 67 72 6f 75       /* If -grou
1d5e0 70 62 79 70 61 72 65 6e 74 20 69 73 20 70 72 65  pbyparent is pre
1d5f0 73 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  sent */.  int i;
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d610 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 20            /* To 
1d620 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
1d630 61 7a 41 72 67 5b 5d 20 2a 2f 0a 20 20 63 6f 6e  azArg[] */.  con
1d640 73 74 20 63 68 61 72 20 2a 7a 49 6e 64 65 6e 74  st char *zIndent
1d650 20 3d 20 22 22 3b 20 20 20 20 20 20 20 2f 2a 20   = "";       /* 
1d660 48 6f 77 20 6d 75 63 68 20 74 6f 20 69 6e 64 65  How much to inde
1d670 6e 74 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  nt CREATE INDEX 
1d680 62 79 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  by */.  int rc; 
1d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6a0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
1d6b0 6e 20 63 6f 64 65 20 2a 2f 0a 20 20 73 71 6c 69  n code */.  sqli
1d6c0 74 65 33 5f 73 74 6d 74 20 2a 70 53 71 6c 20 3d  te3_stmt *pSql =
1d6d0 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43   0;         /* C
1d6e0 6f 6d 70 69 6c 65 64 20 76 65 72 73 69 6f 6e 20  ompiled version 
1d6f0 6f 66 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  of SQL statement
1d700 20 62 65 6c 6f 77 20 2a 2f 0a 0a 20 20 2f 2a 0a   below */..  /*.
1d710 20 20 2a 2a 20 54 68 69 73 20 53 45 4c 45 43 54    ** This SELECT
1d720 20 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72   statement retur
1d730 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65  ns one row for e
1d740 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
1d750 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 2a 2a 20  constraint.  ** 
1d760 69 6e 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  in the schema of
1d770 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1d780 73 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 20 76  se. The column v
1d790 61 6c 75 65 73 20 61 72 65 3a 0a 20 20 2a 2a 0a  alues are:.  **.
1d7a0 20 20 2a 2a 20 30 2e 20 54 68 65 20 74 65 78 74    ** 0. The text
1d7b0 20 6f 66 20 61 6e 20 53 51 4c 20 73 74 61 74 65   of an SQL state
1d7c0 6d 65 6e 74 20 73 69 6d 69 6c 61 72 20 74 6f 3a  ment similar to:
1d7d0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20  .  **.  **      
1d7e0 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50  "EXPLAIN QUERY P
1d7f0 4c 41 4e 20 53 45 4c 45 43 54 20 72 6f 77 69 64  LAN SELECT rowid
1d800 20 46 52 4f 4d 20 63 68 69 6c 64 5f 74 61 62 6c   FROM child_tabl
1d810 65 20 57 48 45 52 45 20 63 68 69 6c 64 5f 6b 65  e WHERE child_ke
1d820 79 3d 3f 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  y=?".  **.  **  
1d830 20 20 54 68 69 73 20 69 73 20 74 68 65 20 73 61    This is the sa
1d840 6d 65 20 53 45 4c 45 43 54 20 74 68 61 74 20 74  me SELECT that t
1d850 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  he foreign keys 
1d860 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6e  implementation n
1d870 65 65 64 73 0a 20 20 2a 2a 20 20 20 20 74 6f 20  eeds.  **    to 
1d880 72 75 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 20 6f  run internally o
1d890 6e 20 63 68 69 6c 64 20 74 61 62 6c 65 73 2e 20  n child tables. 
1d8a0 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  If there is an i
1d8b0 6e 64 65 78 20 74 68 61 74 20 63 61 6e 0a 20 20  ndex that can.  
1d8c0 2a 2a 20 20 20 20 62 65 20 75 73 65 64 20 74 6f  **    be used to
1d8d0 20 6f 70 74 69 6d 69 7a 65 20 74 68 69 73 20 71   optimize this q
1d8e0 75 65 72 79 2c 20 74 68 65 6e 20 69 74 20 63 61  uery, then it ca
1d8f0 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 62  n also be used b
1d900 79 20 74 68 65 20 46 4b 0a 20 20 2a 2a 20 20 20  y the FK.  **   
1d910 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1d920 74 6f 20 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45  to optimize DELE
1d930 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  TE or UPDATE sta
1d940 74 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 70  tements on the p
1d950 61 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 74 61  arent.  **    ta
1d960 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 31  ble..  **.  ** 1
1d970 2e 20 41 20 47 4c 4f 42 20 70 61 74 74 65 72 6e  . A GLOB pattern
1d980 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 73 71   suitable for sq
1d990 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 29 2e  lite3_strglob().
1d9a0 20 49 66 20 74 68 65 20 70 6c 61 6e 20 6f 75 74   If the plan out
1d9b0 70 75 74 20 62 79 0a 20 20 2a 2a 20 20 20 20 74  put by.  **    t
1d9c0 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  he EXPLAIN QUERY
1d9d0 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e 64 20 6d 61   PLAN command ma
1d9e0 74 63 68 65 73 20 74 68 69 73 20 70 61 74 74 65  tches this patte
1d9f0 72 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 63 68  rn, then the sch
1da00 65 6d 61 0a 20 20 2a 2a 20 20 20 20 63 6f 6e 74  ema.  **    cont
1da10 61 69 6e 73 20 61 6e 20 69 6e 64 65 78 20 74 68  ains an index th
1da20 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  at can be used t
1da30 6f 20 6f 70 74 69 6d 69 7a 65 20 74 68 65 20 71  o optimize the q
1da40 75 65 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  uery..  **.  ** 
1da50 32 2e 20 48 75 6d 61 6e 20 72 65 61 64 61 62 6c  2. Human readabl
1da60 65 20 74 65 78 74 20 74 68 61 74 20 64 65 73 63  e text that desc
1da70 72 69 62 65 73 20 74 68 65 20 63 68 69 6c 64 20  ribes the child 
1da80 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
1da90 73 2e 20 65 2e 67 2e 0a 20 20 2a 2a 0a 20 20 2a  s. e.g..  **.  *
1daa0 2a 20 20 20 20 20 20 20 22 63 68 69 6c 64 5f 74  *       "child_t
1dab0 61 62 6c 65 28 63 68 69 6c 64 5f 6b 65 79 31 2c  able(child_key1,
1dac0 20 63 68 69 6c 64 5f 6b 65 79 32 29 22 0a 20 20   child_key2)".  
1dad0 2a 2a 0a 20 20 2a 2a 20 33 2e 20 48 75 6d 61 6e  **.  ** 3. Human
1dae0 20 72 65 61 64 61 62 6c 65 20 74 65 78 74 20 74   readable text t
1daf0 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
1db00 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 61  e parent table a
1db10 6e 64 20 63 6f 6c 75 6d 6e 73 2e 20 65 2e 67 2e  nd columns. e.g.
1db20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20  .  **.  **      
1db30 20 22 70 61 72 65 6e 74 5f 74 61 62 6c 65 28 70   "parent_table(p
1db40 61 72 65 6e 74 5f 6b 65 79 31 2c 20 70 61 72 65  arent_key1, pare
1db50 6e 74 5f 6b 65 79 32 29 22 0a 20 20 2a 2a 0a 20  nt_key2)".  **. 
1db60 20 2a 2a 20 34 2e 20 41 20 66 75 6c 6c 20 43 52   ** 4. A full CR
1db70 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
1db80 6d 65 6e 74 20 66 6f 72 20 61 6e 20 69 6e 64 65  ment for an inde
1db90 78 20 74 68 61 74 20 63 6f 75 6c 64 20 62 65 20  x that could be 
1dba0 75 73 65 64 20 74 6f 0a 20 20 2a 2a 20 20 20 20  used to.  **    
1dbb0 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45 54 45 20  optimize DELETE 
1dbc0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
1dbd0 65 6e 74 73 20 6f 6e 20 74 68 65 20 70 61 72 65  ents on the pare
1dbe0 6e 74 20 74 61 62 6c 65 2e 20 65 2e 67 2e 0a 20  nt table. e.g.. 
1dbf0 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20 20 22   **.  **       "
1dc00 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 68 69  CREATE INDEX chi
1dc10 6c 64 5f 74 61 62 6c 65 5f 63 68 69 6c 64 5f 6b  ld_table_child_k
1dc20 65 79 20 4f 4e 20 63 68 69 6c 64 5f 74 61 62 6c  ey ON child_tabl
1dc30 65 28 63 68 69 6c 64 5f 6b 65 79 29 22 0a 20 20  e(child_key)".  
1dc40 2a 2a 0a 20 20 2a 2a 20 35 2e 20 54 68 65 20 6e  **.  ** 5. The n
1dc50 61 6d 65 20 6f 66 20 74 68 65 20 70 61 72 65 6e  ame of the paren
1dc60 74 20 74 61 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20  t table..  **.  
1dc70 2a 2a 20 54 68 65 73 65 20 73 69 78 20 76 61 6c  ** These six val
1dc80 75 65 73 20 61 72 65 20 75 73 65 64 20 62 79 20  ues are used by 
1dc90 74 68 65 20 43 20 6c 6f 67 69 63 20 62 65 6c 6f  the C logic belo
1dca0 77 20 74 6f 20 67 65 6e 65 72 61 74 65 20 74 68  w to generate th
1dcb0 65 20 72 65 70 6f 72 74 2e 0a 20 20 2a 2f 0a 20  e report..  */. 
1dcc0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71   const char *zSq
1dcd0 6c 20 3d 0a 20 20 22 53 45 4c 45 43 54 20 22 0a  l =.  "SELECT ".
1dce0 20 20 20 20 22 20 20 20 20 20 27 45 58 50 4c 41      "     'EXPLA
1dcf0 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45  IN QUERY PLAN SE
1dd00 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20  LECT rowid FROM 
1dd10 27 20 7c 7c 20 71 75 6f 74 65 28 73 2e 6e 61 6d  ' || quote(s.nam
1dd20 65 29 20 7c 7c 20 27 20 57 48 45 52 45 20 27 22  e) || ' WHERE '"
1dd30 0a 20 20 20 20 22 20 20 7c 7c 20 67 72 6f 75 70  .    "  || group
1dd40 5f 63 6f 6e 63 61 74 28 71 75 6f 74 65 28 73 2e  _concat(quote(s.
1dd50 6e 61 6d 65 29 20 7c 7c 20 27 2e 27 20 7c 7c 20  name) || '.' || 
1dd60 71 75 6f 74 65 28 66 2e 5b 66 72 6f 6d 5d 29 20  quote(f.[from]) 
1dd70 7c 7c 20 27 3d 3f 27 20 22 0a 20 20 20 20 22 20  || '=?' ".    " 
1dd80 20 7c 7c 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65   || fkey_collate
1dd90 5f 63 6c 61 75 73 65 28 22 0a 20 20 20 20 22 20  _clause(".    " 
1dda0 20 20 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 2c        f.[table],
1ddb0 20 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d   COALESCE(f.[to]
1ddc0 2c 20 70 2e 5b 6e 61 6d 65 5d 29 2c 20 73 2e 6e  , p.[name]), s.n
1ddd0 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d 29 2c 27  ame, f.[from]),'
1dde0 20 41 4e 44 20 27 29 22 0a 20 20 20 20 22 2c 20   AND ')".    ", 
1ddf0 22 0a 20 20 20 20 22 20 20 20 20 20 27 53 45 41  ".    "     'SEA
1de00 52 43 48 20 54 41 42 4c 45 20 27 20 7c 7c 20 73  RCH TABLE ' || s
1de10 2e 6e 61 6d 65 20 7c 7c 20 27 20 55 53 49 4e 47  .name || ' USING
1de20 20 43 4f 56 45 52 49 4e 47 20 49 4e 44 45 58 2a   COVERING INDEX*
1de30 28 27 22 0a 20 20 20 20 22 20 20 7c 7c 20 67 72  ('".    "  || gr
1de40 6f 75 70 5f 63 6f 6e 63 61 74 28 27 2a 3d 3f 27  oup_concat('*=?'
1de50 2c 20 27 20 41 4e 44 20 27 29 20 7c 7c 20 27 29  , ' AND ') || ')
1de60 27 22 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20  '".    ", ".    
1de70 22 20 20 20 20 20 73 2e 6e 61 6d 65 20 20 7c 7c  "     s.name  ||
1de80 20 27 28 27 20 7c 7c 20 67 72 6f 75 70 5f 63 6f   '(' || group_co
1de90 6e 63 61 74 28 66 2e 5b 66 72 6f 6d 5d 2c 20 20  ncat(f.[from],  
1dea0 27 2c 20 27 29 20 7c 7c 20 27 29 27 22 0a 20 20  ', ') || ')'".  
1deb0 20 20 22 2c 20 22 0a 20 20 20 20 22 20 20 20 20    ", ".    "    
1dec0 20 66 2e 5b 74 61 62 6c 65 5d 20 7c 7c 20 27 28   f.[table] || '(
1ded0 27 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61  ' || group_conca
1dee0 74 28 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f  t(COALESCE(f.[to
1def0 5d 2c 20 70 2e 5b 6e 61 6d 65 5d 29 29 20 7c 7c  ], p.[name])) ||
1df00 20 27 29 27 22 0a 20 20 20 20 22 2c 20 22 0a 20   ')'".    ", ". 
1df10 20 20 20 22 20 20 20 20 20 27 43 52 45 41 54 45     "     'CREATE
1df20 20 49 4e 44 45 58 20 27 20 7c 7c 20 71 75 6f 74   INDEX ' || quot
1df30 65 28 73 2e 6e 61 6d 65 20 7c 7c 27 5f 27 7c 7c  e(s.name ||'_'||
1df40 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 66 2e   group_concat(f.
1df50 5b 66 72 6f 6d 5d 2c 20 27 5f 27 29 29 22 0a 20  [from], '_'))". 
1df60 20 20 20 22 20 20 7c 7c 20 27 20 4f 4e 20 27 20     "  || ' ON ' 
1df70 7c 7c 20 71 75 6f 74 65 28 73 2e 6e 61 6d 65 29  || quote(s.name)
1df80 20 7c 7c 20 27 28 27 22 0a 20 20 20 20 22 20 20   || '('".    "  
1df90 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  || group_concat(
1dfa0 71 75 6f 74 65 28 66 2e 5b 66 72 6f 6d 5d 29 20  quote(f.[from]) 
1dfb0 7c 7c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  ||".    "       
1dfc0 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c   fkey_collate_cl
1dfd0 61 75 73 65 28 22 0a 20 20 20 20 22 20 20 20 20  ause(".    "    
1dfe0 20 20 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 2c        f.[table],
1dff0 20 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d   COALESCE(f.[to]
1e000 2c 20 70 2e 5b 6e 61 6d 65 5d 29 2c 20 73 2e 6e  , p.[name]), s.n
1e010 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d 29 2c 20  ame, f.[from]), 
1e020 27 2c 20 27 29 22 0a 20 20 20 20 22 20 20 7c 7c  ', ')".    "  ||
1e030 20 27 29 3b 27 22 0a 20 20 20 20 22 2c 20 22 0a   ');'".    ", ".
1e040 20 20 20 20 22 20 20 20 20 20 66 2e 5b 74 61 62      "     f.[tab
1e050 6c 65 5d 20 22 0a 20 20 20 20 22 46 52 4f 4d 20  le] ".    "FROM 
1e060 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 41 53  sqlite_master AS
1e070 20 73 2c 20 70 72 61 67 6d 61 5f 66 6f 72 65 69   s, pragma_forei
1e080 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 73 2e 6e 61  gn_key_list(s.na
1e090 6d 65 29 20 41 53 20 66 20 22 0a 20 20 20 20 22  me) AS f ".    "
1e0a0 4c 45 46 54 20 4a 4f 49 4e 20 70 72 61 67 6d 61  LEFT JOIN pragma
1e0b0 5f 74 61 62 6c 65 5f 69 6e 66 6f 20 41 53 20 70  _table_info AS p
1e0c0 20 4f 4e 20 28 70 6b 2d 31 3d 73 65 71 20 41 4e   ON (pk-1=seq AN
1e0d0 44 20 70 2e 61 72 67 3d 66 2e 5b 74 61 62 6c 65  D p.arg=f.[table
1e0e0 5d 29 20 22 0a 20 20 20 20 22 47 52 4f 55 50 20  ]) ".    "GROUP 
1e0f0 42 59 20 73 2e 6e 61 6d 65 2c 20 66 2e 69 64 20  BY s.name, f.id 
1e100 22 0a 20 20 20 20 22 4f 52 44 45 52 20 42 59 20  ".    "ORDER BY 
1e110 28 43 41 53 45 20 57 48 45 4e 20 3f 20 54 48 45  (CASE WHEN ? THE
1e120 4e 20 66 2e 5b 74 61 62 6c 65 5d 20 45 4c 53 45  N f.[table] ELSE
1e130 20 73 2e 6e 61 6d 65 20 45 4e 44 29 22 0a 20 20   s.name END)".  
1e140 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
1e150 7a 47 6c 6f 62 49 50 4b 20 3d 20 22 53 45 41 52  zGlobIPK = "SEAR
1e160 43 48 20 54 41 42 4c 45 20 2a 20 55 53 49 4e 47  CH TABLE * USING
1e170 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1e180 20 4b 45 59 20 28 72 6f 77 69 64 3d 3f 29 22 3b   KEY (rowid=?)";
1e190 0a 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 6e  ..  for(i=2; i<n
1e1a0 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  Arg; i++){.    i
1e1b0 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c  nt n = (int)strl
1e1c0 65 6e 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20  en(azArg[i]);.  
1e1d0 20 20 69 66 28 20 6e 3e 31 20 26 26 20 73 71 6c    if( n>1 && sql
1e1e0 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28 22 2d  ite3_strnicmp("-
1e1f0 76 65 72 62 6f 73 65 22 2c 20 61 7a 41 72 67 5b  verbose", azArg[
1e200 69 5d 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  i], n)==0 ){.   
1e210 20 20 20 62 56 65 72 62 6f 73 65 20 3d 20 31 3b     bVerbose = 1;
1e220 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20  .    }.    else 
1e230 69 66 28 20 6e 3e 31 20 26 26 20 73 71 6c 69 74  if( n>1 && sqlit
1e240 65 33 5f 73 74 72 6e 69 63 6d 70 28 22 2d 67 72  e3_strnicmp("-gr
1e250 6f 75 70 62 79 70 61 72 65 6e 74 22 2c 20 61 7a  oupbyparent", az
1e260 41 72 67 5b 69 5d 2c 20 6e 29 3d 3d 30 20 29 7b  Arg[i], n)==0 ){
1e270 0a 20 20 20 20 20 20 62 47 72 6f 75 70 42 79 50  .      bGroupByP
1e280 61 72 65 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20  arent = 1;.     
1e290 20 7a 49 6e 64 65 6e 74 20 3d 20 22 20 20 20 20   zIndent = "    
1e2a0 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73  ";.    }.    els
1e2b0 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
1e2c0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
1e2d0 67 65 3a 20 25 73 20 25 73 20 3f 2d 76 65 72 62  ge: %s %s ?-verb
1e2e0 6f 73 65 3f 20 3f 2d 67 72 6f 75 70 62 79 70 61  ose? ?-groupbypa
1e2f0 72 65 6e 74 3f 5c 6e 22 2c 0a 20 20 20 20 20 20  rent?\n",.      
1e300 20 20 20 20 61 7a 41 72 67 5b 30 5d 2c 20 61 7a      azArg[0], az
1e310 41 72 67 5b 31 5d 0a 20 20 20 20 20 20 29 3b 0a  Arg[1].      );.
1e320 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
1e330 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
1e340 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73  .  }..  /* Regis
1e350 74 65 72 20 74 68 65 20 66 6b 65 79 5f 63 6f 6c  ter the fkey_col
1e360 6c 61 74 65 5f 63 6c 61 75 73 65 28 29 20 53 51  late_clause() SQ
1e370 4c 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  L function */.  
1e380 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
1e390 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
1e3a0 20 22 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63   "fkey_collate_c
1e3b0 6c 61 75 73 65 22 2c 20 34 2c 20 53 51 4c 49 54  lause", 4, SQLIT
1e3c0 45 5f 55 54 46 38 2c 0a 20 20 20 20 20 20 30 2c  E_UTF8,.      0,
1e3d0 20 73 68 65 6c 6c 46 6b 65 79 43 6f 6c 6c 61 74   shellFkeyCollat
1e3e0 65 43 6c 61 75 73 65 2c 20 30 2c 20 30 0a 20 20  eClause, 0, 0.  
1e3f0 29 3b 0a 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53  );...  if( rc==S
1e400 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1e410 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
1e420 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c  pare_v2(db, zSql
1e430 2c 20 2d 31 2c 20 26 70 53 71 6c 2c 20 30 29 3b  , -1, &pSql, 0);
1e440 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
1e450 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1e460 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
1e470 28 70 53 71 6c 2c 20 31 2c 20 62 47 72 6f 75 70  (pSql, 1, bGroup
1e480 42 79 50 61 72 65 6e 74 29 3b 0a 20 20 7d 0a 0a  ByParent);.  }..
1e490 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1e4a0 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 6e 74 20 72  _OK ){.    int r
1e4b0 63 32 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 50  c2;.    char *zP
1e4c0 72 65 76 20 3d 20 30 3b 0a 20 20 20 20 77 68 69  rev = 0;.    whi
1e4d0 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d  le( SQLITE_ROW==
1e4e0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 71  sqlite3_step(pSq
1e4f0 6c 29 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  l) ){.      int 
1e500 72 65 73 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20  res = -1;.      
1e510 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 45  sqlite3_stmt *pE
1e520 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20 20  xplain = 0;.    
1e530 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
1e540 51 50 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  QP = (const char
1e550 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
1e560 5f 74 65 78 74 28 70 53 71 6c 2c 20 30 29 3b 0a  _text(pSql, 0);.
1e570 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
1e580 20 2a 7a 47 6c 6f 62 20 3d 20 28 63 6f 6e 73 74   *zGlob = (const
1e590 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
1e5a0 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c  olumn_text(pSql,
1e5b0 20 31 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74   1);.      const
1e5c0 20 63 68 61 72 20 2a 7a 46 72 6f 6d 20 3d 20 28   char *zFrom = (
1e5d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
1e5e0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
1e5f0 70 53 71 6c 2c 20 32 29 3b 0a 20 20 20 20 20 20  pSql, 2);.      
1e600 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 72  const char *zTar
1e610 67 65 74 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  get = (const cha
1e620 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
1e630 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 33 29 3b  n_text(pSql, 3);
1e640 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
1e650 72 20 2a 7a 43 49 20 3d 20 28 63 6f 6e 73 74 20  r *zCI = (const 
1e660 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
1e670 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20  lumn_text(pSql, 
1e680 34 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  4);.      const 
1e690 63 68 61 72 20 2a 7a 50 61 72 65 6e 74 20 3d 20  char *zParent = 
1e6a0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
1e6b0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
1e6c0 28 70 53 71 6c 2c 20 35 29 3b 0a 0a 20 20 20 20  (pSql, 5);..    
1e6d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
1e6e0 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 45  repare_v2(db, zE
1e6f0 51 50 2c 20 2d 31 2c 20 26 70 45 78 70 6c 61 69  QP, -1, &pExplai
1e700 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  n, 0);.      if(
1e710 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1e720 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66   break;.      if
1e730 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71  ( SQLITE_ROW==sq
1e740 6c 69 74 65 33 5f 73 74 65 70 28 70 45 78 70 6c  lite3_step(pExpl
1e750 61 69 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ain) ){.        
1e760 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 6c 61  const char *zPla
1e770 6e 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  n = (const char*
1e780 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
1e790 74 65 78 74 28 70 45 78 70 6c 61 69 6e 2c 20 33  text(pExplain, 3
1e7a0 29 3b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  );.        res =
1e7b0 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   (.             
1e7c0 20 30 3d 3d 73 71 6c 69 74 65 33 5f 73 74 72 67   0==sqlite3_strg
1e7d0 6c 6f 62 28 7a 47 6c 6f 62 2c 20 7a 50 6c 61 6e  lob(zGlob, zPlan
1e7e0 29 0a 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  ).           || 
1e7f0 30 3d 3d 73 71 6c 69 74 65 33 5f 73 74 72 67 6c  0==sqlite3_strgl
1e800 6f 62 28 7a 47 6c 6f 62 49 50 4b 2c 20 7a 50 6c  ob(zGlobIPK, zPl
1e810 61 6e 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20  an).        );. 
1e820 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20       }.      rc 
1e830 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
1e840 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20  ze(pExplain);.  
1e850 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1e860 54 45 5f 4f 4b 20 29 20 62 72 65 61 6b 3b 0a 0a  TE_OK ) break;..
1e870 20 20 20 20 20 20 69 66 28 20 72 65 73 3c 30 20        if( res<0 
1e880 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
1e890 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1e8a0 72 72 6f 72 3a 20 69 6e 74 65 72 6e 61 6c 20 65  rror: internal e
1e8b0 72 72 6f 72 22 29 3b 0a 20 20 20 20 20 20 20 20  rror");.        
1e8c0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 65 6c  break;.      }el
1e8d0 73 65 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  se{.        if( 
1e8e0 62 47 72 6f 75 70 42 79 50 61 72 65 6e 74 0a 20  bGroupByParent. 
1e8f0 20 20 20 20 20 20 20 26 26 20 28 62 56 65 72 62         && (bVerb
1e900 6f 73 65 20 7c 7c 20 72 65 73 3d 3d 30 29 0a 20  ose || res==0). 
1e910 20 20 20 20 20 20 20 26 26 20 28 7a 50 72 65 76         && (zPrev
1e920 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73  ==0 || sqlite3_s
1e930 74 72 69 63 6d 70 28 7a 50 61 72 65 6e 74 2c 20  tricmp(zParent, 
1e940 7a 50 72 65 76 29 29 0a 20 20 20 20 20 20 20 20  zPrev)).        
1e950 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  ){.          raw
1e960 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 2d 2d  _printf(out, "--
1e970 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20 25 73   Parent table %s
1e980 5c 6e 22 2c 20 7a 50 61 72 65 6e 74 29 3b 0a 20  \n", zParent);. 
1e990 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1e9a0 5f 66 72 65 65 28 7a 50 72 65 76 29 3b 0a 20 20  _free(zPrev);.  
1e9b0 20 20 20 20 20 20 20 20 7a 50 72 65 76 20 3d 20          zPrev = 
1e9c0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
1e9d0 22 25 73 22 2c 20 7a 50 61 72 65 6e 74 29 3b 0a  "%s", zParent);.
1e9e0 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
1e9f0 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b     if( res==0 ){
1ea00 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
1ea10 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 25 73  rintf(out, "%s%s
1ea20 20 2d 2d 3e 20 25 73 5c 6e 22 2c 20 7a 49 6e 64   --> %s\n", zInd
1ea30 65 6e 74 2c 20 7a 43 49 2c 20 7a 54 61 72 67 65  ent, zCI, zTarge
1ea40 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  t);.        }els
1ea50 65 20 69 66 28 20 62 56 65 72 62 6f 73 65 20 29  e if( bVerbose )
1ea60 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f  {.          raw_
1ea70 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 2f  printf(out, "%s/
1ea80 2a 20 6e 6f 20 65 78 74 72 61 20 69 6e 64 65 78  * no extra index
1ea90 65 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  es required for 
1eaa0 25 73 20 2d 3e 20 25 73 20 2a 2f 5c 6e 22 2c 0a  %s -> %s */\n",.
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 49                zI
1eac0 6e 64 65 6e 74 2c 20 7a 46 72 6f 6d 2c 20 7a 54  ndent, zFrom, zT
1ead0 61 72 67 65 74 0a 20 20 20 20 20 20 20 20 20 20  arget.          
1eae0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
1eaf0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
1eb00 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 50 72 65  qlite3_free(zPre
1eb10 76 29 3b 0a 0a 20 20 20 20 69 66 28 20 72 63 21  v);..    if( rc!
1eb20 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1eb30 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
1eb40 74 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73  tderr, "%s\n", s
1eb50 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
1eb60 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72  ));.    }..    r
1eb70 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e  c2 = sqlite3_fin
1eb80 61 6c 69 7a 65 28 70 53 71 6c 29 3b 0a 20 20 20  alize(pSql);.   
1eb90 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1eba0 4f 4b 20 26 26 20 72 63 32 21 3d 53 51 4c 49 54  OK && rc2!=SQLIT
1ebb0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
1ebc0 20 3d 20 72 63 32 3b 0a 20 20 20 20 20 20 72 61   = rc2;.      ra
1ebd0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1ebe0 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33   "%s\n", sqlite3
1ebf0 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20  _errmsg(db));.  
1ec00 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1ec10 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
1ec20 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69  rr, "%s\n", sqli
1ec30 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b  te3_errmsg(db));
1ec40 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 72  .  }..  return r
1ec50 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c  c;.}../*.** Impl
1ec60 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 2e  ementation of ".
1ec70 6c 69 6e 74 22 20 64 6f 74 20 63 6f 6d 6d 61 6e  lint" dot comman
1ec80 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
1ec90 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61 6e 64 28   lintDotCommand(
1eca0 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
1ecb0 53 74 61 74 65 2c 20 20 20 20 20 20 20 20 20 20  State,          
1ecc0 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 68     /* Current sh
1ecd0 65 6c 6c 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a  ell tool state *
1ece0 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67  /.  char **azArg
1ecf0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1ed00 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
1ed10 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
1ed20 20 74 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20   to dot command 
1ed30 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 20 20 20  */.  int nArg   
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ed60 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 41  f entries in azA
1ed70 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  rg[] */.){.  int
1ed80 20 6e 3b 0a 20 20 6e 20 3d 20 28 6e 41 72 67 3e   n;.  n = (nArg>
1ed90 3d 32 20 3f 20 28 69 6e 74 29 73 74 72 6c 65 6e  =2 ? (int)strlen
1eda0 28 61 7a 41 72 67 5b 31 5d 29 20 3a 20 30 29 3b  (azArg[1]) : 0);
1edb0 0a 20 20 69 66 28 20 6e 3c 31 20 7c 7c 20 73 71  .  if( n<1 || sq
1edc0 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28 61  lite3_strnicmp(a
1edd0 7a 41 72 67 5b 31 5d 2c 20 22 66 6b 65 79 2d 69  zArg[1], "fkey-i
1ede0 6e 64 65 78 65 73 22 2c 20 6e 29 20 29 20 67 6f  ndexes", n) ) go
1edf0 74 6f 20 75 73 61 67 65 3b 0a 20 20 72 65 74 75  to usage;.  retu
1ee00 72 6e 20 6c 69 6e 74 46 6b 65 79 49 6e 64 65 78  rn lintFkeyIndex
1ee10 65 73 28 70 53 74 61 74 65 2c 20 61 7a 41 72 67  es(pState, azArg
1ee20 2c 20 6e 41 72 67 29 3b 0a 0a 20 75 73 61 67 65  , nArg);.. usage
1ee30 3a 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73  :.  raw_printf(s
1ee40 74 64 65 72 72 2c 20 22 55 73 61 67 65 20 25 73  tderr, "Usage %s
1ee50 20 73 75 62 2d 63 6f 6d 6d 61 6e 64 20 3f 73 77   sub-command ?sw
1ee60 69 74 63 68 65 73 2e 2e 2e 3f 5c 6e 22 2c 20 61  itches...?\n", a
1ee70 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 72 61 77 5f  zArg[0]);.  raw_
1ee80 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1ee90 57 68 65 72 65 20 73 75 62 2d 63 6f 6d 6d 61 6e  Where sub-comman
1eea0 64 73 20 61 72 65 3a 5c 6e 22 29 3b 0a 20 20 72  ds are:\n");.  r
1eeb0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1eec0 2c 20 22 20 20 20 20 66 6b 65 79 2d 69 6e 64 65  , "    fkey-inde
1eed0 78 65 73 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72  xes\n");.  retur
1eee0 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  n SQLITE_ERROR;.
1eef0 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 61 6e 20  }.../*.** If an 
1ef00 69 6e 70 75 74 20 6c 69 6e 65 20 62 65 67 69 6e  input line begin
1ef10 73 20 77 69 74 68 20 22 2e 22 20 74 68 65 6e 20  s with "." then 
1ef20 69 6e 76 6f 6b 65 20 74 68 69 73 20 72 6f 75 74  invoke this rout
1ef30 69 6e 65 20 74 6f 0a 2a 2a 20 70 72 6f 63 65 73  ine to.** proces
1ef40 73 20 74 68 61 74 20 6c 69 6e 65 2e 0a 2a 2a 0a  s that line..**.
1ef50 2a 2a 20 52 65 74 75 72 6e 20 31 20 6f 6e 20 65  ** Return 1 on e
1ef60 72 72 6f 72 2c 20 32 20 74 6f 20 65 78 69 74 2c  rror, 2 to exit,
1ef70 20 61 6e 64 20 30 20 6f 74 68 65 72 77 69 73 65   and 0 otherwise
1ef80 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1ef90 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28  do_meta_command(
1efa0 63 68 61 72 20 2a 7a 4c 69 6e 65 2c 20 53 68 65  char *zLine, She
1efb0 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69  llState *p){.  i
1efc0 6e 74 20 68 20 3d 20 31 3b 0a 20 20 69 6e 74 20  nt h = 1;.  int 
1efd0 6e 41 72 67 20 3d 20 30 3b 0a 20 20 69 6e 74 20  nArg = 0;.  int 
1efe0 6e 2c 20 63 3b 0a 20 20 69 6e 74 20 72 63 20 3d  n, c;.  int rc =
1eff0 20 30 3b 0a 20 20 63 68 61 72 20 2a 61 7a 41 72   0;.  char *azAr
1f000 67 5b 35 30 5d 3b 0a 0a 20 20 2f 2a 20 50 61 72  g[50];..  /* Par
1f010 73 65 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e  se the input lin
1f020 65 20 69 6e 74 6f 20 74 6f 6b 65 6e 73 2e 0a 20  e into tokens.. 
1f030 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 7a 4c 69   */.  while( zLi
1f040 6e 65 5b 68 5d 20 26 26 20 6e 41 72 67 3c 41 72  ne[h] && nArg<Ar
1f050 72 61 79 53 69 7a 65 28 61 7a 41 72 67 29 20 29  raySize(azArg) )
1f060 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 49 73 53  {.    while( IsS
1f070 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d 29 20 29  pace(zLine[h]) )
1f080 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28  { h++; }.    if(
1f090 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 30 20 29 20 62   zLine[h]==0 ) b
1f0a0 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 7a 4c  reak;.    if( zL
1f0b0 69 6e 65 5b 68 5d 3d 3d 27 5c 27 27 20 7c 7c 20  ine[h]=='\'' || 
1f0c0 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 22 27 20 29 7b  zLine[h]=='"' ){
1f0d0 0a 20 20 20 20 20 20 69 6e 74 20 64 65 6c 69 6d  .      int delim
1f0e0 20 3d 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 3b 0a 20   = zLine[h++];. 
1f0f0 20 20 20 20 20 61 7a 41 72 67 5b 6e 41 72 67 2b       azArg[nArg+
1f100 2b 5d 20 3d 20 26 7a 4c 69 6e 65 5b 68 5d 3b 0a  +] = &zLine[h];.
1f110 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a 4c 69        while( zLi
1f120 6e 65 5b 68 5d 20 26 26 20 7a 4c 69 6e 65 5b 68  ne[h] && zLine[h
1f130 5d 21 3d 64 65 6c 69 6d 20 29 7b 0a 20 20 20 20  ]!=delim ){.    
1f140 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d      if( zLine[h]
1f150 3d 3d 27 5c 5c 27 20 26 26 20 64 65 6c 69 6d 3d  =='\\' && delim=
1f160 3d 27 22 27 20 26 26 20 7a 4c 69 6e 65 5b 68 2b  ='"' && zLine[h+
1f170 31 5d 21 3d 30 20 29 20 68 2b 2b 3b 0a 20 20 20  1]!=0 ) h++;.   
1f180 20 20 20 20 20 68 2b 2b 3b 0a 20 20 20 20 20 20       h++;.      
1f190 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e  }.      if( zLin
1f1a0 65 5b 68 5d 3d 3d 64 65 6c 69 6d 20 29 7b 0a 20  e[h]==delim ){. 
1f1b0 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 68 2b 2b         zLine[h++
1f1c0 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  ] = 0;.      }. 
1f1d0 20 20 20 20 20 69 66 28 20 64 65 6c 69 6d 3d 3d       if( delim==
1f1e0 27 22 27 20 29 20 72 65 73 6f 6c 76 65 5f 62 61  '"' ) resolve_ba
1f1f0 63 6b 73 6c 61 73 68 65 73 28 61 7a 41 72 67 5b  ckslashes(azArg[
1f200 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20 7d 65  nArg-1]);.    }e
1f210 6c 73 65 7b 0a 20 20 20 20 20 20 61 7a 41 72 67  lse{.      azArg
1f220 5b 6e 41 72 67 2b 2b 5d 20 3d 20 26 7a 4c 69 6e  [nArg++] = &zLin
1f230 65 5b 68 5d 3b 0a 20 20 20 20 20 20 77 68 69 6c  e[h];.      whil
1f240 65 28 20 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 21  e( zLine[h] && !
1f250 49 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d  IsSpace(zLine[h]
1f260 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20  ) ){ h++; }.    
1f270 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 20 29    if( zLine[h] )
1f280 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 20 3d 20 30 3b   zLine[h++] = 0;
1f290 0a 20 20 20 20 20 20 72 65 73 6f 6c 76 65 5f 62  .      resolve_b
1f2a0 61 63 6b 73 6c 61 73 68 65 73 28 61 7a 41 72 67  ackslashes(azArg
1f2b0 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20 7d  [nArg-1]);.    }
1f2c0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 72 6f 63 65  .  }..  /* Proce
1f2d0 73 73 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e  ss the input lin
1f2e0 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e 41  e..  */.  if( nA
1f2f0 72 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  rg==0 ) return 0
1f300 3b 20 2f 2a 20 6e 6f 20 74 6f 6b 65 6e 73 2c 20  ; /* no tokens, 
1f310 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 20 6e 20  no error */.  n 
1f320 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 41 72 67  = strlen30(azArg
1f330 5b 30 5d 29 3b 0a 20 20 63 20 3d 20 61 7a 41 72  [0]);.  c = azAr
1f340 67 5b 30 5d 5b 30 5d 3b 0a 0a 23 69 66 6e 64 65  g[0][0];..#ifnde
1f350 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
1f360 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69 66  THORIZATION.  if
1f370 28 20 63 3d 3d 27 61 27 20 26 26 20 73 74 72 6e  ( c=='a' && strn
1f380 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 61  cmp(azArg[0], "a
1f390 75 74 68 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  uth", n)==0 ){. 
1f3a0 20 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29     if( nArg!=2 )
1f3b0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
1f3c0 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
1f3d0 65 3a 20 2e 61 75 74 68 20 4f 4e 7c 4f 46 46 5c  e: .auth ON|OFF\
1f3e0 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
1f3f0 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  1;.      goto me
1f400 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
1f410 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f  .    }.    open_
1f420 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 69 66  db(p, 0);.    if
1f430 28 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61  ( booleanValue(a
1f440 7a 41 72 67 5b 31 5d 29 20 29 7b 0a 20 20 20 20  zArg[1]) ){.    
1f450 20 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75    sqlite3_set_au
1f460 74 68 6f 72 69 7a 65 72 28 70 2d 3e 64 62 2c 20  thorizer(p->db, 
1f470 73 68 65 6c 6c 41 75 74 68 2c 20 70 29 3b 0a 20  shellAuth, p);. 
1f480 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1f490 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68  sqlite3_set_auth
1f4a0 6f 72 69 7a 65 72 28 70 2d 3e 64 62 2c 20 30 2c  orizer(p->db, 0,
1f4b0 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   0);.    }.  }el
1f4c0 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  se.#endif..  if(
1f4d0 20 28 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33   (c=='b' && n>=3
1f4e0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
1f4f0 67 5b 30 5d 2c 20 22 62 61 63 6b 75 70 22 2c 20  g[0], "backup", 
1f500 6e 29 3d 3d 30 29 0a 20 20 20 7c 7c 20 28 63 3d  n)==0).   || (c=
1f510 3d 27 73 27 20 26 26 20 6e 3e 3d 33 20 26 26 20  ='s' && n>=3 && 
1f520 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
1f530 2c 20 22 73 61 76 65 22 2c 20 6e 29 3d 3d 30 29  , "save", n)==0)
1f540 0a 20 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20  .  ){.    const 
1f550 63 68 61 72 20 2a 7a 44 65 73 74 46 69 6c 65 20  char *zDestFile 
1f560 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  = 0;.    const c
1f570 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b 0a 20 20  har *zDb = 0;.  
1f580 20 20 73 71 6c 69 74 65 33 20 2a 70 44 65 73 74    sqlite3 *pDest
1f590 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 61  ;.    sqlite3_ba
1f5a0 63 6b 75 70 20 2a 70 42 61 63 6b 75 70 3b 0a 20  ckup *pBackup;. 
1f5b0 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 66 6f     int j;.    fo
1f5c0 72 28 6a 3d 31 3b 20 6a 3c 6e 41 72 67 3b 20 6a  r(j=1; j<nArg; j
1f5d0 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  ++){.      const
1f5e0 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67   char *z = azArg
1f5f0 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [j];.      if( z
1f600 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
1f610 20 20 20 20 77 68 69 6c 65 28 20 7a 5b 30 5d 3d      while( z[0]=
1f620 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20  ='-' ) z++;.    
1f630 20 20 20 20 2f 2a 20 4e 6f 20 6f 70 74 69 6f 6e      /* No option
1f640 73 20 74 6f 20 70 72 6f 63 65 73 73 20 61 74 20  s to process at 
1f650 74 68 69 73 20 74 69 6d 65 20 2a 2f 0a 20 20 20  this time */.   
1f660 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1f670 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
1f680 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f 70  err, "unknown op
1f690 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 61 7a 41  tion: %s\n", azA
1f6a0 72 67 5b 6a 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[j]);.        
1f6b0 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
1f6c0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
1f6d0 65 20 69 66 28 20 7a 44 65 73 74 46 69 6c 65 3d  e if( zDestFile=
1f6e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44  =0 ){.        zD
1f6f0 65 73 74 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b  estFile = azArg[
1f700 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  j];.      }else 
1f710 69 66 28 20 7a 44 62 3d 3d 30 20 29 7b 0a 20 20  if( zDb==0 ){.  
1f720 20 20 20 20 20 20 7a 44 62 20 3d 20 7a 44 65 73        zDb = zDes
1f730 74 46 69 6c 65 3b 0a 20 20 20 20 20 20 20 20 7a  tFile;.        z
1f740 44 65 73 74 46 69 6c 65 20 3d 20 61 7a 41 72 67  DestFile = azArg
1f750 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  [j];.      }else
1f760 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
1f770 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 74 6f  intf(stderr, "to
1f780 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73  o many arguments
1f790 20 74 6f 20 2e 62 61 63 6b 75 70 5c 6e 22 29 3b   to .backup\n");
1f7a0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1f7b0 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
1f7c0 0a 20 20 20 20 69 66 28 20 7a 44 65 73 74 46 69  .    if( zDestFi
1f7d0 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  le==0 ){.      r
1f7e0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1f7f0 2c 20 22 6d 69 73 73 69 6e 67 20 46 49 4c 45 4e  , "missing FILEN
1f800 41 4d 45 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20  AME argument on 
1f810 2e 62 61 63 6b 75 70 5c 6e 22 29 3b 0a 20 20 20  .backup\n");.   
1f820 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
1f830 20 7d 0a 20 20 20 20 69 66 28 20 7a 44 62 3d 3d   }.    if( zDb==
1f840 30 20 29 20 7a 44 62 20 3d 20 22 6d 61 69 6e 22  0 ) zDb = "main"
1f850 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1f860 65 33 5f 6f 70 65 6e 28 7a 44 65 73 74 46 69 6c  e3_open(zDestFil
1f870 65 2c 20 26 70 44 65 73 74 29 3b 0a 20 20 20 20  e, &pDest);.    
1f880 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1f890 4b 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  K ){.      utf8_
1f8a0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1f8b0 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70  Error: cannot op
1f8c0 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 44  en \"%s\"\n", zD
1f8d0 65 73 74 46 69 6c 65 29 3b 0a 20 20 20 20 20 20  estFile);.      
1f8e0 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 44  sqlite3_close(pD
1f8f0 65 73 74 29 3b 0a 20 20 20 20 20 20 72 65 74 75  est);.      retu
1f900 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
1f910 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
1f920 20 20 20 70 42 61 63 6b 75 70 20 3d 20 73 71 6c     pBackup = sql
1f930 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74  ite3_backup_init
1f940 28 70 44 65 73 74 2c 20 22 6d 61 69 6e 22 2c 20  (pDest, "main", 
1f950 70 2d 3e 64 62 2c 20 7a 44 62 29 3b 0a 20 20 20  p->db, zDb);.   
1f960 20 69 66 28 20 70 42 61 63 6b 75 70 3d 3d 30 20   if( pBackup==0 
1f970 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
1f980 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1f990 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69  ror: %s\n", sqli
1f9a0 74 65 33 5f 65 72 72 6d 73 67 28 70 44 65 73 74  te3_errmsg(pDest
1f9b0 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ));.      sqlite
1f9c0 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29 3b 0a  3_close(pDest);.
1f9d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
1f9e0 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28      }.    while(
1f9f0 20 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 5f    (rc = sqlite3_
1fa00 62 61 63 6b 75 70 5f 73 74 65 70 28 70 42 61 63  backup_step(pBac
1fa10 6b 75 70 2c 31 30 30 29 29 3d 3d 53 51 4c 49 54  kup,100))==SQLIT
1fa20 45 5f 4f 4b 20 29 7b 7d 0a 20 20 20 20 73 71 6c  E_OK ){}.    sql
1fa30 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
1fa40 73 68 28 70 42 61 63 6b 75 70 29 3b 0a 20 20 20  sh(pBackup);.   
1fa50 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1fa60 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 72 63  DONE ){.      rc
1fa70 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1fa80 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
1fa90 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1faa0 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65  r: %s\n", sqlite
1fab0 33 5f 65 72 72 6d 73 67 28 70 44 65 73 74 29 29  3_errmsg(pDest))
1fac0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
1fad0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
1fae0 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29 3b 0a  3_close(pDest);.
1faf0 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
1fb00 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20 26 26  =='b' && n>=3 &&
1fb10 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
1fb20 5d 2c 20 22 62 61 69 6c 22 2c 20 6e 29 3d 3d 30  ], "bail", n)==0
1fb30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
1fb40 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 62 61 69  ==2 ){.      bai
1fb50 6c 5f 6f 6e 5f 65 72 72 6f 72 20 3d 20 62 6f 6f  l_on_error = boo
1fb60 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
1fb70 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  1]);.    }else{.
1fb80 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1fb90 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
1fba0 20 2e 62 61 69 6c 20 6f 6e 7c 6f 66 66 5c 6e 22   .bail on|off\n"
1fbb0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
1fbc0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
1fbd0 20 20 69 66 28 20 63 3d 3d 27 62 27 20 26 26 20    if( c=='b' && 
1fbe0 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28  n>=3 && strncmp(
1fbf0 61 7a 41 72 67 5b 30 5d 2c 20 22 62 69 6e 61 72  azArg[0], "binar
1fc00 79 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  y", n)==0 ){.   
1fc10 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
1fc20 20 20 20 20 20 20 69 66 28 20 62 6f 6f 6c 65 61        if( boolea
1fc30 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
1fc40 20 29 7b 0a 20 20 20 20 20 20 20 20 73 65 74 42   ){.        setB
1fc50 69 6e 61 72 79 4d 6f 64 65 28 70 2d 3e 6f 75 74  inaryMode(p->out
1fc60 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  , 1);.      }els
1fc70 65 7b 0a 20 20 20 20 20 20 20 20 73 65 74 54 65  e{.        setTe
1fc80 78 74 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c 20 31  xtMode(p->out, 1
1fc90 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
1fca0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
1fcb0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1fcc0 55 73 61 67 65 3a 20 2e 62 69 6e 61 72 79 20 6f  Usage: .binary o
1fcd0 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20  n|off\n");.     
1fce0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
1fcf0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
1fd00 3d 27 63 27 20 26 26 20 73 74 72 63 6d 70 28 61  ='c' && strcmp(a
1fd10 7a 41 72 67 5b 30 5d 2c 22 63 64 22 29 3d 3d 30  zArg[0],"cd")==0
1fd20 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
1fd30 3d 3d 32 20 29 7b 0a 23 69 66 20 64 65 66 69 6e  ==2 ){.#if defin
1fd40 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65  ed(_WIN32) || de
1fd50 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 20 20 20  fined(WIN32).   
1fd60 20 20 20 77 63 68 61 72 5f 74 20 2a 7a 20 3d 20     wchar_t *z = 
1fd70 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74  sqlite3_win32_ut
1fd80 66 38 5f 74 6f 5f 75 6e 69 63 6f 64 65 28 61 7a  f8_to_unicode(az
1fd90 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 72  Arg[1]);.      r
1fda0 63 20 3d 20 21 53 65 74 43 75 72 72 65 6e 74 44  c = !SetCurrentD
1fdb0 69 72 65 63 74 6f 72 79 57 28 7a 29 3b 0a 20 20  irectoryW(z);.  
1fdc0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
1fdd0 28 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20  (z);.#else.     
1fde0 20 72 63 20 3d 20 63 68 64 69 72 28 61 7a 41 72   rc = chdir(azAr
1fdf0 67 5b 31 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20  g[1]);.#endif.  
1fe00 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
1fe10 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
1fe20 66 28 73 74 64 65 72 72 2c 20 22 43 61 6e 6e 6f  f(stderr, "Canno
1fe30 74 20 63 68 61 6e 67 65 20 74 6f 20 64 69 72 65  t change to dire
1fe40 63 74 6f 72 79 20 5c 22 25 73 5c 22 5c 6e 22 2c  ctory \"%s\"\n",
1fe50 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
1fe60 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
1fe70 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
1fe80 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
1fe90 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
1fea0 2e 63 64 20 44 49 52 45 43 54 4f 52 59 5c 6e 22  .cd DIRECTORY\n"
1feb0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
1fec0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
1fed0 20 20 2f 2a 20 54 68 65 20 75 6e 64 6f 63 75 6d    /* The undocum
1fee0 65 6e 74 65 64 20 22 2e 62 72 65 61 6b 70 6f 69  ented ".breakpoi
1fef0 6e 74 22 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73  nt" command caus
1ff00 65 73 20 61 20 63 61 6c 6c 20 74 6f 20 74 68 65  es a call to the
1ff10 20 6e 6f 2d 6f 70 0a 20 20 2a 2a 20 72 6f 75 74   no-op.  ** rout
1ff20 69 6e 65 20 6e 61 6d 65 64 20 74 65 73 74 5f 62  ine named test_b
1ff30 72 65 61 6b 70 6f 69 6e 74 28 29 2e 0a 20 20 2a  reakpoint()..  *
1ff40 2f 0a 20 20 69 66 28 20 63 3d 3d 27 62 27 20 26  /.  if( c=='b' &
1ff50 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d  & n>=3 && strncm
1ff60 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62 72 65  p(azArg[0], "bre
1ff70 61 6b 70 6f 69 6e 74 22 2c 20 6e 29 3d 3d 30 20  akpoint", n)==0 
1ff80 29 7b 0a 20 20 20 20 74 65 73 74 5f 62 72 65 61  ){.    test_brea
1ff90 6b 70 6f 69 6e 74 28 29 3b 0a 20 20 7d 65 6c 73  kpoint();.  }els
1ffa0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 63 27 20  e..  if( c=='c' 
1ffb0 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63  && n>=3 && strnc
1ffc0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63 68  mp(azArg[0], "ch
1ffd0 61 6e 67 65 73 22 2c 20 6e 29 3d 3d 30 20 29 7b  anges", n)==0 ){
1ffe0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32  .    if( nArg==2
1fff0 20 29 7b 0a 20 20 20 20 20 20 73 65 74 4f 72 43   ){.      setOrC
20000 6c 65 61 72 46 6c 61 67 28 70 2c 20 53 48 46 4c  learFlag(p, SHFL
20010 47 5f 43 6f 75 6e 74 43 68 61 6e 67 65 73 2c 20  G_CountChanges, 
20020 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d  azArg[1]);.    }
20030 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
20040 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
20050 55 73 61 67 65 3a 20 2e 63 68 61 6e 67 65 73 20  Usage: .changes 
20060 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20  on|off\n");.    
20070 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
20080 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 43 61    }else..  /* Ca
20090 6e 63 65 6c 20 6f 75 74 70 75 74 20 72 65 64 69  ncel output redi
200a0 72 65 63 74 69 6f 6e 2c 20 69 66 20 69 74 20 69  rection, if it i
200b0 73 20 63 75 72 72 65 6e 74 6c 79 20 73 65 74 20  s currently set 
200c0 28 62 79 20 2e 74 65 73 74 63 61 73 65 29 0a 20  (by .testcase). 
200d0 20 2a 2a 20 54 68 65 6e 20 72 65 61 64 20 74 68   ** Then read th
200e0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
200f0 20 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78   testcase-out.tx
20100 74 20 66 69 6c 65 20 61 6e 64 20 63 6f 6d 70 61  t file and compa
20110 72 65 20 61 67 61 69 6e 73 74 0a 20 20 2a 2a 20  re against.  ** 
20120 61 7a 41 72 67 5b 31 5d 2e 20 20 49 66 20 74 68  azArg[1].  If th
20130 65 72 65 20 61 72 65 20 64 69 66 66 65 72 65 6e  ere are differen
20140 63 65 73 2c 20 72 65 70 6f 72 74 20 61 6e 20 65  ces, report an e
20150 72 72 6f 72 20 61 6e 64 20 65 78 69 74 2e 0a 20  rror and exit.. 
20160 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 63 27   */.  if( c=='c'
20170 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
20180 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63  cmp(azArg[0], "c
20190 68 65 63 6b 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  heck", n)==0 ){.
201a0 20 20 20 20 63 68 61 72 20 2a 7a 52 65 73 20 3d      char *zRes =
201b0 20 30 3b 0a 20 20 20 20 6f 75 74 70 75 74 5f 72   0;.    output_r
201c0 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69 66 28  eset(p);.    if(
201d0 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20   nArg!=2 ){.    
201e0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
201f0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 68  err, "Usage: .ch
20200 65 63 6b 20 47 4c 4f 42 2d 50 41 54 54 45 52 4e  eck GLOB-PATTERN
20210 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
20220 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   2;.    }else if
20230 28 20 28 7a 52 65 73 20 3d 20 72 65 61 64 46 69  ( (zRes = readFi
20240 6c 65 28 22 74 65 73 74 63 61 73 65 2d 6f 75 74  le("testcase-out
20250 2e 74 78 74 22 2c 20 30 29 29 3d 3d 30 20 29 7b  .txt", 0))==0 ){
20260 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
20270 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
20280 3a 20 63 61 6e 6e 6f 74 20 72 65 61 64 20 27 74  : cannot read 't
20290 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27  estcase-out.txt'
202a0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
202b0 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   2;.    }else if
202c0 28 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28  ( testcase_glob(
202d0 61 7a 41 72 67 5b 31 5d 2c 7a 52 65 73 29 3d 3d  azArg[1],zRes)==
202e0 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  0 ){.      utf8_
202f0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 0a 20  printf(stderr,. 
20300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20310 22 74 65 73 74 63 61 73 65 2d 25 73 20 46 41 49  "testcase-%s FAI
20320 4c 45 44 5c 6e 20 45 78 70 65 63 74 65 64 3a 20  LED\n Expected: 
20330 5b 25 73 5d 5c 6e 20 20 20 20 20 20 47 6f 74 3a  [%s]\n      Got:
20340 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20   [%s]\n",.      
20350 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a 54             p->zT
20360 65 73 74 63 61 73 65 2c 20 61 7a 41 72 67 5b 31  estcase, azArg[1
20370 5d 2c 20 7a 52 65 73 29 3b 0a 20 20 20 20 20 20  ], zRes);.      
20380 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  rc = 1;.    }els
20390 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  e{.      utf8_pr
203a0 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 74 65  intf(stdout, "te
203b0 73 74 63 61 73 65 2d 25 73 20 6f 6b 5c 6e 22 2c  stcase-%s ok\n",
203c0 20 70 2d 3e 7a 54 65 73 74 63 61 73 65 29 3b 0a   p->zTestcase);.
203d0 20 20 20 20 20 20 70 2d 3e 6e 43 68 65 63 6b 2b        p->nCheck+
203e0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  +;.    }.    sql
203f0 69 74 65 33 5f 66 72 65 65 28 7a 52 65 73 29 3b  ite3_free(zRes);
20400 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
20410 63 3d 3d 27 63 27 20 26 26 20 73 74 72 6e 63 6d  c=='c' && strncm
20420 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63 6c 6f  p(azArg[0], "clo
20430 6e 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ne", n)==0 ){.  
20440 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b    if( nArg==2 ){
20450 0a 20 20 20 20 20 20 74 72 79 54 6f 43 6c 6f 6e  .      tryToClon
20460 65 28 70 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a  e(p, azArg[1]);.
20470 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20480 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
20490 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 6c 6f  rr, "Usage: .clo
204a0 6e 65 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b  ne FILENAME\n");
204b0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
204c0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
204d0 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20 6e 3e  if( c=='d' && n>
204e0 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  1 && strncmp(azA
204f0 72 67 5b 30 5d 2c 20 22 64 61 74 61 62 61 73 65  rg[0], "database
20500 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  s", n)==0 ){.   
20510 20 53 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61   ShellState data
20520 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72  ;.    char *zErr
20530 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 6f 70 65  Msg = 0;.    ope
20540 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20  n_db(p, 0);.    
20550 6d 65 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c  memcpy(&data, p,
20560 20 73 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a   sizeof(data));.
20570 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61      data.showHea
20580 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74  der = 0;.    dat
20590 61 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d  a.cMode = data.m
205a0 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b  ode = MODE_List;
205b0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
205c0 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74  rintf(sizeof(dat
205d0 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c  a.colSeparator),
205e0 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f  data.colSeparato
205f0 72 2c 22 3a 20 22 29 3b 0a 20 20 20 20 64 61 74  r,": ");.    dat
20600 61 2e 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 73  a.cnt = 0;.    s
20610 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
20620 62 2c 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c  b, "SELECT name,
20630 20 66 69 6c 65 20 46 52 4f 4d 20 70 72 61 67 6d   file FROM pragm
20640 61 5f 64 61 74 61 62 61 73 65 5f 6c 69 73 74 22  a_database_list"
20650 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
20660 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61     callback, &da
20670 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ta, &zErrMsg);. 
20680 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29     if( zErrMsg )
20690 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
206a0 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
206b0 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73  r: %s\n", zErrMs
206c0 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  g);.      sqlite
206d0 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b  3_free(zErrMsg);
206e0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
206f0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
20700 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20 73 74  if( c=='d' && st
20710 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
20720 22 64 62 69 6e 66 6f 22 2c 20 6e 29 3d 3d 30 20  "dbinfo", n)==0 
20730 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 68 65 6c  ){.    rc = shel
20740 6c 5f 64 62 69 6e 66 6f 5f 63 6f 6d 6d 61 6e 64  l_dbinfo_command
20750 28 70 2c 20 6e 41 72 67 2c 20 61 7a 41 72 67 29  (p, nArg, azArg)
20760 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  ;.  }else..  if(
20770 20 63 3d 3d 27 64 27 20 26 26 20 73 74 72 6e 63   c=='d' && strnc
20780 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 64 75  mp(azArg[0], "du
20790 6d 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  mp", n)==0 ){.  
207a0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c    const char *zL
207b0 69 6b 65 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74  ike = 0;.    int
207c0 20 69 3b 0a 20 20 20 20 69 6e 74 20 73 61 76 65   i;.    int save
207d0 64 53 68 6f 77 48 65 61 64 65 72 20 3d 20 70 2d  dShowHeader = p-
207e0 3e 73 68 6f 77 48 65 61 64 65 72 3b 0a 20 20 20  >showHeader;.   
207f0 20 53 68 65 6c 6c 43 6c 65 61 72 46 6c 61 67 28   ShellClearFlag(
20800 70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65 72 76  p, SHFLG_Preserv
20810 65 52 6f 77 69 64 7c 53 48 46 4c 47 5f 4e 65 77  eRowid|SHFLG_New
20820 6c 69 6e 65 73 29 3b 0a 20 20 20 20 66 6f 72 28  lines);.    for(
20830 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=1; i<nArg; i++
20840 29 7b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41  ){.      if( azA
20850 72 67 5b 69 5d 5b 30 5d 3d 3d 27 2d 27 20 29 7b  rg[i][0]=='-' ){
20860 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
20870 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69  har *z = azArg[i
20880 5d 2b 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ]+1;.        if(
20890 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b   z[0]=='-' ) z++
208a0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74  ;.        if( st
208b0 72 63 6d 70 28 7a 2c 22 70 72 65 73 65 72 76 65  rcmp(z,"preserve
208c0 2d 72 6f 77 69 64 73 22 29 3d 3d 30 20 29 7b 0a  -rowids")==0 ){.
208d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
208e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
208f0 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
20900 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 54 68  intf(stderr, "Th
20910 65 20 2d 2d 70 72 65 73 65 72 76 65 2d 72 6f 77  e --preserve-row
20920 69 64 73 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f  ids option is no
20930 74 20 63 6f 6d 70 61 74 69 62 6c 65 22 0a 20 20  t compatible".  
20940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20950 20 20 20 20 20 20 20 20 20 20 20 22 20 77 69 74             " wit
20960 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  h SQLITE_OMIT_VI
20970 52 54 55 41 4c 54 41 42 4c 45 5c 6e 22 29 3b 0a  RTUALTABLE\n");.
20980 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31            rc = 1
20990 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
209a0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
209b0 69 74 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20  it;.#else.      
209c0 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67      ShellSetFlag
209d0 28 70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65 72  (p, SHFLG_Preser
209e0 76 65 52 6f 77 69 64 29 3b 0a 23 65 6e 64 69 66  veRowid);.#endif
209f0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  .        }else. 
20a00 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
20a10 70 28 7a 2c 22 6e 65 77 6c 69 6e 65 73 22 29 3d  p(z,"newlines")=
20a20 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
20a30 53 68 65 6c 6c 53 65 74 46 6c 61 67 28 70 2c 20  ShellSetFlag(p, 
20a40 53 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 29 3b  SHFLG_Newlines);
20a50 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  .        }else. 
20a60 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
20a70 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
20a80 64 65 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f  derr, "Unknown o
20a90 70 74 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20  ption \"%s\" on 
20aa0 5c 22 2e 64 75 6d 70 5c 22 5c 6e 22 2c 20 61 7a  \".dump\"\n", az
20ab0 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
20ac0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
20ad0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
20ae0 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
20af0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
20b00 73 65 20 69 66 28 20 7a 4c 69 6b 65 20 29 7b 0a  se if( zLike ){.
20b10 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
20b20 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
20b30 65 3a 20 2e 64 75 6d 70 20 3f 2d 2d 70 72 65 73  e: .dump ?--pres
20b40 65 72 76 65 2d 72 6f 77 69 64 73 3f 20 22 0a 20  erve-rowids? ". 
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b60 20 20 20 20 20 20 20 20 20 20 22 3f 2d 2d 6e 65            "?--ne
20b70 77 6c 69 6e 65 73 3f 20 3f 4c 49 4b 45 2d 50 41  wlines? ?LIKE-PA
20b80 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20  TTERN?\n");.    
20b90 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
20ba0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
20bb0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
20bc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
20bd0 20 7a 4c 69 6b 65 20 3d 20 61 7a 41 72 67 5b 69   zLike = azArg[i
20be0 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ];.      }.    }
20bf0 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
20c00 30 29 3b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20  0);.    /* When 
20c10 70 6c 61 79 69 6e 67 20 62 61 63 6b 20 61 20 22  playing back a "
20c20 64 75 6d 70 22 2c 20 74 68 65 20 63 6f 6e 74 65  dump", the conte
20c30 6e 74 20 6d 69 67 68 74 20 61 70 70 65 61 72 20  nt might appear 
20c40 69 6e 20 61 6e 20 6f 72 64 65 72 0a 20 20 20 20  in an order.    
20c50 2a 2a 20 77 68 69 63 68 20 63 61 75 73 65 73 20  ** which causes 
20c60 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
20c70 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
20c80 73 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64  s to be violated
20c90 2e 0a 20 20 20 20 2a 2a 20 53 6f 20 64 69 73 61  ..    ** So disa
20ca0 62 6c 65 20 66 6f 72 65 69 67 6e 2d 6b 65 79 20  ble foreign-key 
20cb0 63 6f 6e 73 74 72 61 69 6e 74 20 65 6e 66 6f 72  constraint enfor
20cc0 63 65 6d 65 6e 74 20 74 6f 20 70 72 65 76 65 6e  cement to preven
20cd0 74 20 70 72 6f 62 6c 65 6d 73 2e 20 2a 2f 0a 20  t problems. */. 
20ce0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
20cf0 3e 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 66 6f  >out, "PRAGMA fo
20d00 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 46 46 3b 5c  reign_keys=OFF;\
20d10 6e 22 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69  n");.    raw_pri
20d20 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 42 45 47  ntf(p->out, "BEG
20d30 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 5c  IN TRANSACTION;\
20d40 6e 22 29 3b 0a 20 20 20 20 70 2d 3e 77 72 69 74  n");.    p->writ
20d50 61 62 6c 65 53 63 68 65 6d 61 20 3d 20 30 3b 0a  ableSchema = 0;.
20d60 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61 64 65      p->showHeade
20d70 72 20 3d 20 30 3b 0a 20 20 20 20 2f 2a 20 53 65  r = 0;.    /* Se
20d80 74 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d  t writable_schem
20d90 61 3d 4f 4e 20 73 69 6e 63 65 20 64 6f 69 6e 67  a=ON since doing
20da0 20 73 6f 20 66 6f 72 63 65 73 20 53 51 4c 69 74   so forces SQLit
20db0 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 0a  e to initialize.
20dc0 20 20 20 20 2a 2a 20 61 73 20 6d 75 63 68 20 6f      ** as much o
20dd0 66 20 74 68 65 20 73 63 68 65 6d 61 20 61 73 20  f the schema as 
20de0 69 74 20 63 61 6e 20 65 76 65 6e 20 69 66 20 74  it can even if t
20df0 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
20e00 20 74 61 62 6c 65 20 69 73 0a 20 20 20 20 2a 2a   table is.    **
20e10 20 63 6f 72 72 75 70 74 2e 20 2a 2f 0a 20 20 20   corrupt. */.   
20e20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
20e30 3e 64 62 2c 20 22 53 41 56 45 50 4f 49 4e 54 20  >db, "SAVEPOINT 
20e40 64 75 6d 70 3b 20 50 52 41 47 4d 41 20 77 72 69  dump; PRAGMA wri
20e50 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 22  table_schema=ON"
20e60 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
20e70 70 2d 3e 6e 45 72 72 20 3d 20 30 3b 0a 20 20 20  p->nErr = 0;.   
20e80 20 69 66 28 20 7a 4c 69 6b 65 3d 3d 30 20 29 7b   if( zLike==0 ){
20e90 0a 20 20 20 20 20 20 72 75 6e 5f 73 63 68 65 6d  .      run_schem
20ea0 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 0a  a_dump_query(p,.
20eb0 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
20ec0 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73 71 6c 20  name, type, sql 
20ed0 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
20ee0 65 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48  er ".        "WH
20ef0 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c  ERE sql NOT NULL
20f00 20 41 4e 44 20 74 79 70 65 3d 3d 27 74 61 62 6c   AND type=='tabl
20f10 65 27 20 41 4e 44 20 6e 61 6d 65 21 3d 27 73 71  e' AND name!='sq
20f20 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 27 22 0a  lite_sequence'".
20f30 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
20f40 75 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71  un_schema_dump_q
20f50 75 65 72 79 28 70 2c 0a 20 20 20 20 20 20 20 20  uery(p,.        
20f60 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 74 79  "SELECT name, ty
20f70 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  pe, sql FROM sql
20f80 69 74 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20  ite_master ".   
20f90 20 20 20 20 20 22 57 48 45 52 45 20 6e 61 6d 65       "WHERE name
20fa0 3d 3d 27 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  =='sqlite_sequen
20fb0 63 65 27 22 0a 20 20 20 20 20 20 29 3b 0a 20 20  ce'".      );.  
20fc0 20 20 20 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75      run_table_du
20fd0 6d 70 5f 71 75 65 72 79 28 70 2c 0a 20 20 20 20  mp_query(p,.    
20fe0 20 20 20 20 22 53 45 4c 45 43 54 20 73 71 6c 20      "SELECT sql 
20ff0 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
21000 65 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48  er ".        "WH
21010 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c  ERE sql NOT NULL
21020 20 41 4e 44 20 74 79 70 65 20 49 4e 20 28 27 69   AND type IN ('i
21030 6e 64 65 78 27 2c 27 74 72 69 67 67 65 72 27 2c  ndex','trigger',
21040 27 76 69 65 77 27 29 22 2c 20 30 0a 20 20 20 20  'view')", 0.    
21050 20 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a    );.    }else{.
21060 20 20 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c        char *zSql
21070 3b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73  ;.      zSql = s
21080 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a  qlite3_mprintf(.
21090 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
210a0 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73 71 6c 20  name, type, sql 
210b0 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
210c0 65 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48  er ".        "WH
210d0 45 52 45 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b  ERE tbl_name LIK
210e0 45 20 25 51 20 41 4e 44 20 74 79 70 65 3d 3d 27  E %Q AND type=='
210f0 74 61 62 6c 65 27 22 0a 20 20 20 20 20 20 20 20  table'".        
21100 22 20 20 41 4e 44 20 73 71 6c 20 4e 4f 54 20 4e  "  AND sql NOT N
21110 55 4c 4c 22 2c 20 7a 4c 69 6b 65 29 3b 0a 20 20  ULL", zLike);.  
21120 20 20 20 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64      run_schema_d
21130 75 6d 70 5f 71 75 65 72 79 28 70 2c 7a 53 71 6c  ump_query(p,zSql
21140 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
21150 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20  _free(zSql);.   
21160 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
21170 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20  3_mprintf(.     
21180 20 20 20 22 53 45 4c 45 43 54 20 73 71 6c 20 46     "SELECT sql F
21190 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
211a0 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48 45  r ".        "WHE
211b0 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 22  RE sql NOT NULL"
211c0 0a 20 20 20 20 20 20 20 20 22 20 20 41 4e 44 20  .        "  AND 
211d0 74 79 70 65 20 49 4e 20 28 27 69 6e 64 65 78 27  type IN ('index'
211e0 2c 27 74 72 69 67 67 65 72 27 2c 27 76 69 65 77  ,'trigger','view
211f0 27 29 22 0a 20 20 20 20 20 20 20 20 22 20 20 41  ')".        "  A
21200 4e 44 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45  ND tbl_name LIKE
21210 20 25 51 22 2c 20 7a 4c 69 6b 65 29 3b 0a 20 20   %Q", zLike);.  
21220 20 20 20 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75      run_table_du
21230 6d 70 5f 71 75 65 72 79 28 70 2c 20 7a 53 71 6c  mp_query(p, zSql
21240 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
21250 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
21260 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
21270 3e 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20  >writableSchema 
21280 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
21290 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 50 52 41  ntf(p->out, "PRA
212a0 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
212b0 65 6d 61 3d 4f 46 46 3b 5c 6e 22 29 3b 0a 20 20  ema=OFF;\n");.  
212c0 20 20 20 20 70 2d 3e 77 72 69 74 61 62 6c 65 53      p->writableS
212d0 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 7d  chema = 0;.    }
212e0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65  .    sqlite3_exe
212f0 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41  c(p->db, "PRAGMA
21300 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
21310 3d 4f 46 46 3b 22 2c 20 30 2c 20 30 2c 20 30 29  =OFF;", 0, 0, 0)
21320 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78  ;.    sqlite3_ex
21330 65 63 28 70 2d 3e 64 62 2c 20 22 52 45 4c 45 41  ec(p->db, "RELEA
21340 53 45 20 64 75 6d 70 3b 22 2c 20 30 2c 20 30 2c  SE dump;", 0, 0,
21350 20 30 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69   0);.    raw_pri
21360 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 6e  ntf(p->out, p->n
21370 45 72 72 20 3f 20 22 52 4f 4c 4c 42 41 43 4b 3b  Err ? "ROLLBACK;
21380 20 2d 2d 20 64 75 65 20 74 6f 20 65 72 72 6f 72   -- due to error
21390 73 5c 6e 22 20 3a 20 22 43 4f 4d 4d 49 54 3b 5c  s\n" : "COMMIT;\
213a0 6e 22 29 3b 0a 20 20 20 20 70 2d 3e 73 68 6f 77  n");.    p->show
213b0 48 65 61 64 65 72 20 3d 20 73 61 76 65 64 53 68  Header = savedSh
213c0 6f 77 48 65 61 64 65 72 3b 0a 20 20 7d 65 6c 73  owHeader;.  }els
213d0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65 27 20  e..  if( c=='e' 
213e0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
213f0 5b 30 5d 2c 20 22 65 63 68 6f 22 2c 20 6e 29 3d  [0], "echo", n)=
21400 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
21410 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 73  rg==2 ){.      s
21420 65 74 4f 72 43 6c 65 61 72 46 6c 61 67 28 70 2c  etOrClearFlag(p,
21430 20 53 48 46 4c 47 5f 45 63 68 6f 2c 20 61 7a 41   SHFLG_Echo, azA
21440 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73  rg[1]);.    }els
21450 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
21460 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
21470 67 65 3a 20 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66  ge: .echo on|off
21480 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
21490 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
214a0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65 27 20  e..  if( c=='e' 
214b0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
214c0 5b 30 5d 2c 20 22 65 71 70 22 2c 20 6e 29 3d 3d  [0], "eqp", n)==
214d0 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
214e0 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 69 66  g==2 ){.      if
214f0 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31  ( strcmp(azArg[1
21500 5d 2c 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a  ],"full")==0 ){.
21510 20 20 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45          p->autoE
21520 51 50 20 3d 20 32 3b 0a 20 20 20 20 20 20 7d 65  QP = 2;.      }e
21530 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  lse{.        p->
21540 61 75 74 6f 45 51 50 20 3d 20 62 6f 6f 6c 65 61  autoEQP = boolea
21550 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
21560 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
21570 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
21580 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
21590 73 61 67 65 3a 20 2e 65 71 70 20 6f 6e 7c 6f 66  sage: .eqp on|of
215a0 66 7c 66 75 6c 6c 5c 6e 22 29 3b 0a 20 20 20 20  f|full\n");.    
215b0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
215c0 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
215d0 3d 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70  =='e' && strncmp
215e0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 65 78 69 74  (azArg[0], "exit
215f0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
21600 69 66 28 20 6e 41 72 67 3e 31 20 26 26 20 28 72  if( nArg>1 && (r
21610 63 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72  c = (int)integer
21620 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 29  Value(azArg[1]))
21630 21 3d 30 20 29 20 65 78 69 74 28 72 63 29 3b 0a  !=0 ) exit(rc);.
21640 20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d 65      rc = 2;.  }e
21650 6c 73 65 0a 0a 20 20 2f 2a 20 54 68 65 20 22 2e  lse..  /* The ".
21660 65 78 70 6c 61 69 6e 22 20 63 6f 6d 6d 61 6e 64  explain" command
21670 20 69 73 20 61 75 74 6f 6d 61 74 69 63 20 6e 6f   is automatic no
21680 77 2e 20 20 49 74 20 69 73 20 6c 61 72 67 65 6c  w.  It is largel
21690 79 20 70 6f 69 6e 74 6c 65 73 73 2e 20 20 49 74  y pointless.  It
216a0 0a 20 20 2a 2a 20 72 65 74 61 69 6e 65 64 20 70  .  ** retained p
216b0 75 72 65 6c 79 20 66 6f 72 20 62 61 63 6b 77 61  urely for backwa
216c0 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
216d0 79 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 65  y */.  if( c=='e
216e0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
216f0 72 67 5b 30 5d 2c 20 22 65 78 70 6c 61 69 6e 22  rg[0], "explain"
21700 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
21710 6e 74 20 76 61 6c 20 3d 20 31 3b 0a 20 20 20 20  nt val = 1;.    
21720 69 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b 0a 20  if( nArg>=2 ){. 
21730 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
21740 61 7a 41 72 67 5b 31 5d 2c 22 61 75 74 6f 22 29  azArg[1],"auto")
21750 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 76  ==0 ){.        v
21760 61 6c 20 3d 20 39 39 3b 0a 20 20 20 20 20 20 7d  al = 99;.      }
21770 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 76 61  else{.        va
21780 6c 20 3d 20 20 62 6f 6f 6c 65 61 6e 56 61 6c 75  l =  booleanValu
21790 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  e(azArg[1]);.   
217a0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
217b0 66 28 20 76 61 6c 3d 3d 31 20 26 26 20 70 2d 3e  f( val==1 && p->
217c0 6d 6f 64 65 21 3d 4d 4f 44 45 5f 45 78 70 6c 61  mode!=MODE_Expla
217d0 69 6e 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6e  in ){.      p->n
217e0 6f 72 6d 61 6c 4d 6f 64 65 20 3d 20 70 2d 3e 6d  ormalMode = p->m
217f0 6f 64 65 3b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f  ode;.      p->mo
21800 64 65 20 3d 20 4d 4f 44 45 5f 45 78 70 6c 61 69  de = MODE_Explai
21810 6e 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75 74 6f  n;.      p->auto
21820 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20  Explain = 0;.   
21830 20 7d 65 6c 73 65 20 69 66 28 20 76 61 6c 3d 3d   }else if( val==
21840 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  0 ){.      if( p
21850 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70  ->mode==MODE_Exp
21860 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f 64 65 20 3d  lain ) p->mode =
21870 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 0a   p->normalMode;.
21880 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45 78 70        p->autoExp
21890 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20 20 7d 65  lain = 0;.    }e
218a0 6c 73 65 20 69 66 28 20 76 61 6c 3d 3d 39 39 20  lse if( val==99 
218b0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  ){.      if( p->
218c0 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61  mode==MODE_Expla
218d0 69 6e 20 29 20 70 2d 3e 6d 6f 64 65 20 3d 20 70  in ) p->mode = p
218e0 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 0a 20 20  ->normalMode;.  
218f0 20 20 20 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61      p->autoExpla
21900 69 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  in = 1;.    }.  
21910 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
21920 27 66 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'f' && strncmp(a
21930 7a 41 72 67 5b 30 5d 2c 20 22 66 75 6c 6c 73 63  zArg[0], "fullsc
21940 68 65 6d 61 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  hema", n)==0 ){.
21950 20 20 20 20 53 68 65 6c 6c 53 74 61 74 65 20 64      ShellState d
21960 61 74 61 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  ata;.    char *z
21970 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
21980 69 6e 74 20 64 6f 53 74 61 74 73 20 3d 20 30 3b  int doStats = 0;
21990 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 64 61 74  .    memcpy(&dat
219a0 61 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64 61 74  a, p, sizeof(dat
219b0 61 29 29 3b 0a 20 20 20 20 64 61 74 61 2e 73 68  a));.    data.sh
219c0 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20  owHeader = 0;.  
219d0 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64    data.cMode = d
219e0 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
219f0 53 65 6d 69 3b 0a 20 20 20 20 69 66 28 20 6e 41  Semi;.    if( nA
21a00 72 67 3d 3d 32 20 26 26 20 6f 70 74 69 6f 6e 4d  rg==2 && optionM
21a10 61 74 63 68 28 61 7a 41 72 67 5b 31 5d 2c 20 22  atch(azArg[1], "
21a20 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20 20 20 20  indent") ){.    
21a30 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64    data.cMode = d
21a40 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
21a50 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20 6e 41  Pretty;.      nA
21a60 72 67 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rg = 1;.    }.  
21a70 20 20 69 66 28 20 6e 41 72 67 21 3d 31 20 29 7b    if( nArg!=1 ){
21a80 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
21a90 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
21aa0 3a 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20 3f 2d  : .fullschema ?-
21ab0 2d 69 6e 64 65 6e 74 3f 5c 6e 22 29 3b 0a 20 20  -indent?\n");.  
21ac0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
21ad0 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
21ae0 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
21af0 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
21b00 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
21b10 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 0a  te3_exec(p->db,.
21b20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 73         "SELECT s
21b30 71 6c 20 46 52 4f 4d 22 0a 20 20 20 20 20 20 20  ql FROM".       
21b40 22 20 20 28 53 45 4c 45 43 54 20 73 71 6c 20 73  "  (SELECT sql s
21b50 71 6c 2c 20 74 79 70 65 20 74 79 70 65 2c 20 74  ql, type type, t
21b60 62 6c 5f 6e 61 6d 65 20 74 62 6c 5f 6e 61 6d 65  bl_name tbl_name
21b70 2c 20 6e 61 6d 65 20 6e 61 6d 65 2c 20 72 6f 77  , name name, row
21b80 69 64 20 78 22 0a 20 20 20 20 20 20 20 22 20 20  id x".       "  
21b90 20 20 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d     FROM sqlite_m
21ba0 61 73 74 65 72 20 55 4e 49 4f 4e 20 41 4c 4c 22  aster UNION ALL"
21bb0 0a 20 20 20 20 20 20 20 22 20 20 20 53 45 4c 45  .       "   SELE
21bc0 43 54 20 73 71 6c 2c 20 74 79 70 65 2c 20 74 62  CT sql, type, tb
21bd0 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f  l_name, name, ro
21be0 77 69 64 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  wid FROM sqlite_
21bf0 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 22 0a 20  temp_master) ". 
21c00 20 20 20 20 20 20 22 57 48 45 52 45 20 74 79 70        "WHERE typ
21c10 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20 73 71  e!='meta' AND sq
21c20 6c 20 4e 4f 54 4e 55 4c 4c 20 41 4e 44 20 6e 61  l NOTNULL AND na
21c30 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c  me NOT LIKE 'sql
21c40 69 74 65 5f 25 27 20 22 0a 20 20 20 20 20 20 20  ite_%' ".       
21c50 22 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22  "ORDER BY rowid"
21c60 2c 0a 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63  ,.       callbac
21c70 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d  k, &data, &zErrM
21c80 73 67 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66  sg.    );.    if
21c90 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21ca0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
21cb0 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
21cc0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21cd0 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
21ce0 62 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  b,.             
21cf0 20 20 22 53 45 4c 45 43 54 20 72 6f 77 69 64 20    "SELECT rowid 
21d00 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
21d10 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  er".            
21d20 20 20 20 22 20 57 48 45 52 45 20 6e 61 6d 65 20     " WHERE name 
21d30 47 4c 4f 42 20 27 73 71 6c 69 74 65 5f 73 74 61  GLOB 'sqlite_sta
21d40 74 5b 31 33 34 5d 27 22 2c 0a 20 20 20 20 20 20  t[134]'",.      
21d50 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53           -1, &pS
21d60 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 64  tmt, 0);.      d
21d70 6f 53 74 61 74 73 20 3d 20 73 71 6c 69 74 65 33  oStats = sqlite3
21d80 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51  _step(pStmt)==SQ
21d90 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 20 20 20 20  LITE_ROW;.      
21da0 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
21db0 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 7d 0a 20  (pStmt);.    }. 
21dc0 20 20 20 69 66 28 20 64 6f 53 74 61 74 73 3d 3d     if( doStats==
21dd0 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
21de0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f  rintf(p->out, "/
21df0 2a 20 4e 6f 20 53 54 41 54 20 74 61 62 6c 65 73  * No STAT tables
21e00 20 61 76 61 69 6c 61 62 6c 65 20 2a 2f 5c 6e 22   available */\n"
21e10 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
21e20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
21e30 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20  ->out, "ANALYZE 
21e40 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e  sqlite_master;\n
21e50 22 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ");.      sqlite
21e60 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53  3_exec(p->db, "S
21e70 45 4c 45 43 54 20 27 41 4e 41 4c 59 5a 45 20 73  ELECT 'ANALYZE s
21e80 71 6c 69 74 65 5f 6d 61 73 74 65 72 27 22 2c 0a  qlite_master'",.
21e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ea0 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61     callback, &da
21eb0 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ta, &zErrMsg);. 
21ec0 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20       data.cMode 
21ed0 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f  = data.mode = MO
21ee0 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 20  DE_Insert;.     
21ef0 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62 6c 65   data.zDestTable
21f00 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 31   = "sqlite_stat1
21f10 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  ";.      shell_e
21f20 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45  xec(p->db, "SELE
21f30 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
21f40 5f 73 74 61 74 31 22 2c 0a 20 20 20 20 20 20 20  _stat1",.       
21f50 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f            shell_
21f60 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
21f70 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
21f80 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62 6c 65   data.zDestTable
21f90 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 33   = "sqlite_stat3
21fa0 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  ";.      shell_e
21fb0 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45  xec(p->db, "SELE
21fc0 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
21fd0 5f 73 74 61 74 33 22 2c 0a 20 20 20 20 20 20 20  _stat3",.       
21fe0 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f            shell_
21ff0 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
22000 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
22010 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62 6c 65   data.zDestTable
22020 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 34   = "sqlite_stat4
22030 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  ";.      shell_e
22040 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45  xec(p->db, "SELE
22050 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
22060 5f 73 74 61 74 34 22 2c 0a 20 20 20 20 20 20 20  _stat4",.       
22070 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f            shell_
22080 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
22090 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20   &zErrMsg);.    
220a0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
220b0 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20 73 71  out, "ANALYZE sq
220c0 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e 22 29  lite_master;\n")
220d0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
220e0 0a 20 20 69 66 28 20 63 3d 3d 27 68 27 20 26 26  .  if( c=='h' &&
220f0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
22100 5d 2c 20 22 68 65 61 64 65 72 73 22 2c 20 6e 29  ], "headers", n)
22110 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
22120 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
22130 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  p->showHeader = 
22140 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
22150 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73  rg[1]);.    }els
22160 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
22170 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
22180 67 65 3a 20 2e 68 65 61 64 65 72 73 20 6f 6e 7c  ge: .headers on|
22190 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  off\n");.      r
221a0 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  c = 1;.    }.  }
221b0 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
221c0 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  h' && strncmp(az
221d0 41 72 67 5b 30 5d 2c 20 22 68 65 6c 70 22 2c 20  Arg[0], "help", 
221e0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66  n)==0 ){.    utf
221f0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
22200 20 22 25 73 22 2c 20 7a 48 65 6c 70 29 3b 0a 20   "%s", zHelp);. 
22210 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
22220 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='i' && strncmp(
22230 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d 70 6f 72  azArg[0], "impor
22240 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  t", n)==0 ){.   
22250 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 3b 20 20   char *zTable;  
22260 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22270 49 6e 73 65 72 74 20 64 61 74 61 20 69 6e 74 6f  Insert data into
22280 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
22290 20 20 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b 20     char *zFile; 
222a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
222b0 2a 20 4e 61 6d 65 20 6f 66 20 66 69 6c 65 20 74  * Name of file t
222c0 6f 20 65 78 74 72 61 20 63 6f 6e 74 65 6e 74 20  o extra content 
222d0 66 72 6f 6d 20 2a 2f 0a 20 20 20 20 73 71 6c 69  from */.    sqli
222e0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20  te3_stmt *pStmt 
222f0 3d 20 4e 55 4c 4c 3b 20 2f 2a 20 41 20 73 74 61  = NULL; /* A sta
22300 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20 20 69 6e  tement */.    in
22310 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
22320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
22330 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
22340 6e 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  n the table */. 
22350 20 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20     int nByte;   
22360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22370 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
22380 73 20 69 6e 20 61 6e 20 53 51 4c 20 73 74 72 69  s in an SQL stri
22390 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 2c  ng */.    int i,
223a0 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
223b0 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
223c0 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20 69 6e  unters */.    in
223d0 74 20 6e 65 65 64 43 6f 6d 6d 69 74 3b 20 20 20  t needCommit;   
223e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
223f0 65 20 74 6f 20 43 4f 4d 4d 49 54 20 6f 72 20 52  e to COMMIT or R
22400 4f 4c 4c 42 41 43 4b 20 61 74 20 65 6e 64 20 2a  OLLBACK at end *
22410 2f 0a 20 20 20 20 69 6e 74 20 6e 53 65 70 3b 20  /.    int nSep; 
22420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22430 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
22440 79 74 65 73 20 69 6e 20 70 2d 3e 63 6f 6c 53 65  ytes in p->colSe
22450 70 61 72 61 74 6f 72 5b 5d 20 2a 2f 0a 20 20 20  parator[] */.   
22460 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20   char *zSql;    
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22480 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  An SQL statement
22490 20 2a 2f 0a 20 20 20 20 49 6d 70 6f 72 74 43 74   */.    ImportCt
224a0 78 20 73 43 74 78 3b 20 20 20 20 20 20 20 20 20  x sCtx;         
224b0 20 20 20 20 2f 2a 20 52 65 61 64 65 72 20 63 6f      /* Reader co
224c0 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 63 68 61  ntext */.    cha
224d0 72 20 2a 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  r *(SQLITE_CDECL
224e0 20 2a 78 52 65 61 64 29 28 49 6d 70 6f 72 74 43   *xRead)(ImportC
224f0 74 78 2a 29 3b 20 2f 2a 20 46 75 6e 63 20 74 6f  tx*); /* Func to
22500 20 72 65 61 64 20 6f 6e 65 20 76 61 6c 75 65 20   read one value 
22510 2a 2f 0a 20 20 20 20 69 6e 74 20 28 53 51 4c 49  */.    int (SQLI
22520 54 45 5f 43 44 45 43 4c 20 2a 78 43 6c 6f 73 65  TE_CDECL *xClose
22530 72 29 28 46 49 4c 45 2a 29 3b 20 20 20 20 20 20  r)(FILE*);      
22540 2f 2a 20 46 75 6e 63 20 74 6f 20 63 6c 6f 73 65  /* Func to close
22550 20 66 69 6c 65 20 2a 2f 0a 0a 20 20 20 20 69 66   file */..    if
22560 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20 20  ( nArg!=3 ){.   
22570 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
22580 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 69  derr, "Usage: .i
22590 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42 4c 45  mport FILE TABLE
225a0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  \n");.      goto
225b0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
225c0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 46  it;.    }.    zF
225d0 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a  ile = azArg[1];.
225e0 20 20 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41      zTable = azA
225f0 72 67 5b 32 5d 3b 0a 20 20 20 20 73 65 65 6e 49  rg[2];.    seenI
22600 6e 74 65 72 72 75 70 74 20 3d 20 30 3b 0a 20 20  nterrupt = 0;.  
22610 20 20 6d 65 6d 73 65 74 28 26 73 43 74 78 2c 20    memset(&sCtx, 
22620 30 2c 20 73 69 7a 65 6f 66 28 73 43 74 78 29 29  0, sizeof(sCtx))
22630 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  ;.    open_db(p,
22640 20 30 29 3b 0a 20 20 20 20 6e 53 65 70 20 3d 20   0);.    nSep = 
22650 73 74 72 6c 65 6e 33 30 28 70 2d 3e 63 6f 6c 53  strlen30(p->colS
22660 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 69  eparator);.    i
22670 66 28 20 6e 53 65 70 3d 3d 30 20 29 7b 0a 20 20  f( nSep==0 ){.  
22680 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
22690 74 64 65 72 72 2c 0a 20 20 20 20 20 20 20 20 20  tderr,.         
226a0 20 20 20 20 20 20 20 20 22 45 72 72 6f 72 3a 20          "Error: 
226b0 6e 6f 6e 2d 6e 75 6c 6c 20 63 6f 6c 75 6d 6e 20  non-null column 
226c0 73 65 70 61 72 61 74 6f 72 20 72 65 71 75 69 72  separator requir
226d0 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c 6e 22  ed for import\n"
226e0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
226f0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  1;.    }.    if(
22700 20 6e 53 65 70 3e 31 20 29 7b 0a 20 20 20 20 20   nSep>1 ){.     
22710 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
22720 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 75 6c 74  rr, "Error: mult
22730 69 2d 63 68 61 72 61 63 74 65 72 20 63 6f 6c 75  i-character colu
22740 6d 6e 20 73 65 70 61 72 61 74 6f 72 73 20 6e 6f  mn separators no
22750 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20 20 20 20  t allowed".     
22760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22770 20 22 20 66 6f 72 20 69 6d 70 6f 72 74 5c 6e 22   " for import\n"
22780 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
22790 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 53 65  1;.    }.    nSe
227a0 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e  p = strlen30(p->
227b0 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  rowSeparator);. 
227c0 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30 20 29     if( nSep==0 )
227d0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
227e0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
227f0 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 72 6f 77 20  r: non-null row 
22800 73 65 70 61 72 61 74 6f 72 20 72 65 71 75 69 72  separator requir
22810 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c 6e 22  ed for import\n"
22820 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
22830 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  1;.    }.    if(
22840 20 6e 53 65 70 3d 3d 32 20 26 26 20 70 2d 3e 6d   nSep==2 && p->m
22850 6f 64 65 3d 3d 4d 4f 44 45 5f 43 73 76 20 26 26  ode==MODE_Csv &&
22860 20 73 74 72 63 6d 70 28 70 2d 3e 72 6f 77 53 65   strcmp(p->rowSe
22870 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 72 4c  parator, SEP_CrL
22880 66 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  f)==0 ){.      /
22890 2a 20 57 68 65 6e 20 69 6d 70 6f 72 74 69 6e 67  * When importing
228a0 20 43 53 56 20 28 6f 6e 6c 79 29 2c 20 69 66 20   CSV (only), if 
228b0 74 68 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f  the row separato
228c0 72 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 0a  r is set to the.
228d0 20 20 20 20 20 20 2a 2a 20 64 65 66 61 75 6c 74        ** default
228e0 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65 70 61   output row sepa
228f0 72 61 74 6f 72 2c 20 63 68 61 6e 67 65 20 69 74  rator, change it
22900 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20   to the default 
22910 69 6e 70 75 74 0a 20 20 20 20 20 20 2a 2a 20 72  input.      ** r
22920 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20 20 54  ow separator.  T
22930 68 69 73 20 61 76 6f 69 64 73 20 68 61 76 69 6e  his avoids havin
22940 67 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20 64 69  g to maintain di
22950 66 66 65 72 65 6e 74 20 69 6e 70 75 74 0a 20 20  fferent input.  
22960 20 20 20 20 2a 2a 20 61 6e 64 20 6f 75 74 70 75      ** and outpu
22970 74 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 73  t row separators
22980 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  . */.      sqlit
22990 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
229a0 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  of(p->rowSeparat
229b0 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72  or), p->rowSepar
229c0 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b 0a  ator, SEP_Row);.
229d0 20 20 20 20 20 20 6e 53 65 70 20 3d 20 73 74 72        nSep = str
229e0 6c 65 6e 33 30 28 70 2d 3e 72 6f 77 53 65 70 61  len30(p->rowSepa
229f0 72 61 74 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  rator);.    }.  
22a00 20 20 69 66 28 20 6e 53 65 70 3e 31 20 29 7b 0a    if( nSep>1 ){.
22a10 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
22a20 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
22a30 20 6d 75 6c 74 69 2d 63 68 61 72 61 63 74 65 72   multi-character
22a40 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 73 20   row separators 
22a50 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20 20  not allowed".   
22a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a70 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72 74 5c     " for import\
22a80 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
22a90 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  n 1;.    }.    s
22aa0 43 74 78 2e 7a 46 69 6c 65 20 3d 20 7a 46 69 6c  Ctx.zFile = zFil
22ab0 65 3b 0a 20 20 20 20 73 43 74 78 2e 6e 4c 69 6e  e;.    sCtx.nLin
22ac0 65 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 73  e = 1;.    if( s
22ad0 43 74 78 2e 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c  Ctx.zFile[0]=='|
22ae0 27 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  ' ){.#ifdef SQLI
22af0 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20  TE_OMIT_POPEN.  
22b00 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
22b10 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 70  tderr, "Error: p
22b20 69 70 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  ipes are not sup
22b30 70 6f 72 74 65 64 20 69 6e 20 74 68 69 73 20 4f  ported in this O
22b40 53 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  S\n");.      ret
22b50 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20 20  urn 1;.#else.   
22b60 20 20 20 73 43 74 78 2e 69 6e 20 3d 20 70 6f 70     sCtx.in = pop
22b70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65 2b 31 2c  en(sCtx.zFile+1,
22b80 20 22 72 22 29 3b 0a 20 20 20 20 20 20 73 43 74   "r");.      sCt
22b90 78 2e 7a 46 69 6c 65 20 3d 20 22 3c 70 69 70 65  x.zFile = "<pipe
22ba0 3e 22 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73 65  >";.      xClose
22bb0 72 20 3d 20 70 63 6c 6f 73 65 3b 0a 23 65 6e 64  r = pclose;.#end
22bc0 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  if.    }else{.  
22bd0 20 20 20 20 73 43 74 78 2e 69 6e 20 3d 20 66 6f      sCtx.in = fo
22be0 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65 2c 20  pen(sCtx.zFile, 
22bf0 22 72 62 22 29 3b 0a 20 20 20 20 20 20 78 43 6c  "rb");.      xCl
22c00 6f 73 65 72 20 3d 20 66 63 6c 6f 73 65 3b 0a 20  oser = fclose;. 
22c10 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e     }.    if( p->
22c20 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 41 73 63 69 69  mode==MODE_Ascii
22c30 20 29 7b 0a 20 20 20 20 20 20 78 52 65 61 64 20   ){.      xRead 
22c40 3d 20 61 73 63 69 69 5f 72 65 61 64 5f 6f 6e 65  = ascii_read_one
22c50 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d 65 6c 73  _field;.    }els
22c60 65 7b 0a 20 20 20 20 20 20 78 52 65 61 64 20 3d  e{.      xRead =
22c70 20 63 73 76 5f 72 65 61 64 5f 6f 6e 65 5f 66 69   csv_read_one_fi
22c80 65 6c 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  eld;.    }.    i
22c90 66 28 20 73 43 74 78 2e 69 6e 3d 3d 30 20 29 7b  f( sCtx.in==0 ){
22ca0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
22cb0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
22cc0 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c  r: cannot open \
22cd0 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65 29  "%s\"\n", zFile)
22ce0 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
22cf0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 43 74 78  ;.    }.    sCtx
22d00 2e 63 43 6f 6c 53 65 70 20 3d 20 70 2d 3e 63 6f  .cColSep = p->co
22d10 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 3b 0a 20  lSeparator[0];. 
22d20 20 20 20 73 43 74 78 2e 63 52 6f 77 53 65 70 20     sCtx.cRowSep 
22d30 3d 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  = p->rowSeparato
22d40 72 5b 30 5d 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  r[0];.    zSql =
22d50 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
22d60 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  ("SELECT * FROM 
22d70 25 73 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  %s", zTable);.  
22d80 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
22d90 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
22da0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
22db0 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c  : out of memory\
22dc0 6e 22 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73  n");.      xClos
22dd0 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
22de0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
22df0 20 7d 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 73   }.    nByte = s
22e00 74 72 6c 65 6e 33 30 28 7a 53 71 6c 29 3b 0a 20  trlen30(zSql);. 
22e10 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
22e20 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
22e30 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
22e40 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6d 70 6f  mt, 0);.    impo
22e50 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 26  rt_append_char(&
22e60 73 43 74 78 2c 20 30 29 3b 20 20 20 20 2f 2a 20  sCtx, 0);    /* 
22e70 54 6f 20 65 6e 73 75 72 65 20 73 43 74 78 2e 7a  To ensure sCtx.z
22e80 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f   is allocated */
22e90 0a 20 20 20 20 69 66 28 20 72 63 20 26 26 20 73  .    if( rc && s
22ea0 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 22  qlite3_strglob("
22eb0 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 2a  no such table: *
22ec0 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
22ed0 67 28 70 2d 3e 64 62 29 29 3d 3d 30 20 29 7b 0a  g(p->db))==0 ){.
22ee0 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43 72 65        char *zCre
22ef0 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ate = sqlite3_mp
22f00 72 69 6e 74 66 28 22 43 52 45 41 54 45 20 54 41  rintf("CREATE TA
22f10 42 4c 45 20 25 73 22 2c 20 7a 54 61 62 6c 65 29  BLE %s", zTable)
22f20 3b 0a 20 20 20 20 20 20 63 68 61 72 20 63 53 65  ;.      char cSe
22f30 70 20 3d 20 27 28 27 3b 0a 20 20 20 20 20 20 77  p = '(';.      w
22f40 68 69 6c 65 28 20 78 52 65 61 64 28 26 73 43 74  hile( xRead(&sCt
22f50 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 43  x) ){.        zC
22f60 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f  reate = sqlite3_
22f70 6d 70 72 69 6e 74 66 28 22 25 7a 25 63 5c 6e 20  mprintf("%z%c\n 
22f80 20 5c 22 25 77 5c 22 20 54 45 58 54 22 2c 20 7a   \"%w\" TEXT", z
22f90 43 72 65 61 74 65 2c 20 63 53 65 70 2c 20 73 43  Create, cSep, sC
22fa0 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 63  tx.z);.        c
22fb0 53 65 70 20 3d 20 27 2c 27 3b 0a 20 20 20 20 20  Sep = ',';.     
22fc0 20 20 20 69 66 28 20 73 43 74 78 2e 63 54 65 72     if( sCtx.cTer
22fd0 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20  m!=sCtx.cColSep 
22fe0 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d  ) break;.      }
22ff0 0a 20 20 20 20 20 20 69 66 28 20 63 53 65 70 3d  .      if( cSep=
23000 3d 27 28 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='(' ){.        
23010 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 72  sqlite3_free(zCr
23020 65 61 74 65 29 3b 0a 20 20 20 20 20 20 20 20 73  eate);.        s
23030 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43 74 78  qlite3_free(sCtx
23040 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 78 43 6c  .z);.        xCl
23050 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
23060 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
23070 74 66 28 73 74 64 65 72 72 2c 22 25 73 3a 20 65  tf(stderr,"%s: e
23080 6d 70 74 79 20 66 69 6c 65 5c 6e 22 2c 20 73 43  mpty file\n", sC
23090 74 78 2e 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20  tx.zFile);.     
230a0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
230b0 20 20 20 7d 0a 20 20 20 20 20 20 7a 43 72 65 61     }.      zCrea
230c0 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  te = sqlite3_mpr
230d0 69 6e 74 66 28 22 25 7a 5c 6e 29 22 2c 20 7a 43  intf("%z\n)", zC
230e0 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20 72 63  reate);.      rc
230f0 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
23100 70 2d 3e 64 62 2c 20 7a 43 72 65 61 74 65 2c 20  p->db, zCreate, 
23110 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  0, 0, 0);.      
23120 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 72  sqlite3_free(zCr
23130 65 61 74 65 29 3b 0a 20 20 20 20 20 20 69 66 28  eate);.      if(
23140 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75   rc ){.        u
23150 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
23160 72 2c 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  r, "CREATE TABLE
23170 20 25 73 28 2e 2e 2e 29 20 66 61 69 6c 65 64 3a   %s(...) failed:
23180 20 25 73 5c 6e 22 2c 20 7a 54 61 62 6c 65 2c 0a   %s\n", zTable,.
23190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231a0 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70  sqlite3_errmsg(p
231b0 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20 20  ->db));.        
231c0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43 74  sqlite3_free(sCt
231d0 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 78 43  x.z);.        xC
231e0 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a  loser(sCtx.in);.
231f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
23200 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
23210 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
23220 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
23230 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
23240 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73   0);.    }.    s
23250 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
23260 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b  );.    if( rc ){
23270 0a 20 20 20 20 20 20 69 66 20 28 70 53 74 6d 74  .      if (pStmt
23280 29 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  ) sqlite3_finali
23290 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  ze(pStmt);.     
232a0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
232b0 65 72 72 2c 22 45 72 72 6f 72 3a 20 25 73 5c 6e  err,"Error: %s\n
232c0 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
232d0 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
232e0 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e   xCloser(sCtx.in
232f0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
23300 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 43 6f  1;.    }.    nCo
23310 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
23320 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b  mn_count(pStmt);
23330 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
23340 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
23350 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20    pStmt = 0;.   
23360 20 69 66 28 20 6e 43 6f 6c 3d 3d 30 20 29 20 72   if( nCol==0 ) r
23370 65 74 75 72 6e 20 30 3b 20 2f 2a 20 6e 6f 20 63  eturn 0; /* no c
23380 6f 6c 75 6d 6e 73 2c 20 6e 6f 20 65 72 72 6f 72  olumns, no error
23390 20 2a 2f 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73   */.    zSql = s
233a0 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28  qlite3_malloc64(
233b0 20 6e 42 79 74 65 2a 32 20 2b 20 32 30 20 2b 20   nByte*2 + 20 + 
233c0 6e 43 6f 6c 2a 32 20 29 3b 0a 20 20 20 20 69 66  nCol*2 );.    if
233d0 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
233e0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
233f0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75  derr, "Error: ou
23400 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b  t of memory\n");
23410 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72 28 73  .      xCloser(s
23420 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20 20 72  Ctx.in);.      r
23430 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
23440 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
23450 6e 74 66 28 6e 42 79 74 65 2b 32 30 2c 20 7a 53  ntf(nByte+20, zS
23460 71 6c 2c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  ql, "INSERT INTO
23470 20 5c 22 25 77 5c 22 20 56 41 4c 55 45 53 28 3f   \"%w\" VALUES(?
23480 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20  ", zTable);.    
23490 6a 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 53 71  j = strlen30(zSq
234a0 6c 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b  l);.    for(i=1;
234b0 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20   i<nCol; i++){. 
234c0 20 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d       zSql[j++] =
234d0 20 27 2c 27 3b 0a 20 20 20 20 20 20 7a 53 71 6c   ',';.      zSql
234e0 5b 6a 2b 2b 5d 20 3d 20 27 3f 27 3b 0a 20 20 20  [j++] = '?';.   
234f0 20 7d 0a 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d   }.    zSql[j++]
23500 20 3d 20 27 29 27 3b 0a 20 20 20 20 7a 53 71 6c   = ')';.    zSql
23510 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 72 63 20  [j] = 0;.    rc 
23520 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
23530 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  e_v2(p->db, zSql
23540 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
23550 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
23560 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66  ee(zSql);.    if
23570 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74  ( rc ){.      ut
23580 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
23590 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  , "Error: %s\n",
235a0 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
235b0 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 69  p->db));.      i
235c0 66 20 28 70 53 74 6d 74 29 20 73 71 6c 69 74 65  f (pStmt) sqlite
235d0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
235e0 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72  );.      xCloser
235f0 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20  (sCtx.in);.     
23600 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
23610 0a 20 20 20 20 6e 65 65 64 43 6f 6d 6d 69 74 20  .    needCommit 
23620 3d 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  = sqlite3_get_au
23630 74 6f 63 6f 6d 6d 69 74 28 70 2d 3e 64 62 29 3b  tocommit(p->db);
23640 0a 20 20 20 20 69 66 28 20 6e 65 65 64 43 6f 6d  .    if( needCom
23650 6d 69 74 20 29 20 73 71 6c 69 74 65 33 5f 65 78  mit ) sqlite3_ex
23660 65 63 28 70 2d 3e 64 62 2c 20 22 42 45 47 49 4e  ec(p->db, "BEGIN
23670 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20  ", 0, 0, 0);.   
23680 20 64 6f 7b 0a 20 20 20 20 20 20 69 6e 74 20 73   do{.      int s
23690 74 61 72 74 4c 69 6e 65 20 3d 20 73 43 74 78 2e  tartLine = sCtx.
236a0 6e 4c 69 6e 65 3b 0a 20 20 20 20 20 20 66 6f 72  nLine;.      for
236b0 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b  (i=0; i<nCol; i+
236c0 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72  +){.        char
236d0 20 2a 7a 20 3d 20 78 52 65 61 64 28 26 73 43 74   *z = xRead(&sCt
236e0 78 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20  x);.        /*. 
236f0 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20 77 65         ** Did we
23700 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d 66 69   reach end-of-fi
23710 6c 65 20 62 65 66 6f 72 65 20 66 69 6e 64 69 6e  le before findin
23720 67 20 61 6e 79 20 63 6f 6c 75 6d 6e 73 3f 0a 20  g any columns?. 
23730 20 20 20 20 20 20 20 2a 2a 20 49 66 20 73 6f 2c         ** If so,
23740 20 73 74 6f 70 20 69 6e 73 74 65 61 64 20 6f 66   stop instead of
23750 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 20 74 68   NULL filling th
23760 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75  e remaining colu
23770 6d 6e 73 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  mns..        */.
23780 20 20 20 20 20 20 20 20 69 66 28 20 7a 3d 3d 30          if( z==0
23790 20 26 26 20 69 3d 3d 30 20 29 20 62 72 65 61 6b   && i==0 ) break
237a0 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20 20 20  ;.        /*.   
237b0 20 20 20 20 20 2a 2a 20 44 69 64 20 77 65 20 72       ** Did we r
237c0 65 61 63 68 20 65 6e 64 2d 6f 66 2d 66 69 6c 65  each end-of-file
237d0 20 4f 52 20 65 6e 64 2d 6f 66 2d 6c 69 6e 65 20   OR end-of-line 
237e0 62 65 66 6f 72 65 20 66 69 6e 64 69 6e 67 20 61  before finding a
237f0 6e 79 0a 20 20 20 20 20 20 20 20 2a 2a 20 63 6f  ny.        ** co
23800 6c 75 6d 6e 73 20 69 6e 20 41 53 43 49 49 20 6d  lumns in ASCII m
23810 6f 64 65 3f 20 20 49 66 20 73 6f 2c 20 73 74 6f  ode?  If so, sto
23820 70 20 69 6e 73 74 65 61 64 20 6f 66 20 4e 55 4c  p instead of NUL
23830 4c 20 66 69 6c 6c 69 6e 67 0a 20 20 20 20 20 20  L filling.      
23840 20 20 2a 2a 20 74 68 65 20 72 65 6d 61 69 6e 69    ** the remaini
23850 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 20 20 20 20  ng columns..    
23860 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
23870 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45  f( p->mode==MODE
23880 5f 41 73 63 69 69 20 26 26 20 28 7a 3d 3d 30 20  _Ascii && (z==0 
23890 7c 7c 20 7a 5b 30 5d 3d 3d 30 29 20 26 26 20 69  || z[0]==0) && i
238a0 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
238b0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
238c0 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 2b  d_text(pStmt, i+
238d0 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
238e0 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
238f0 20 20 20 20 20 69 66 28 20 69 3c 6e 43 6f 6c 2d       if( i<nCol-
23900 31 20 26 26 20 73 43 74 78 2e 63 54 65 72 6d 21  1 && sCtx.cTerm!
23910 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 7b  =sCtx.cColSep ){
23920 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
23930 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
23940 25 73 3a 25 64 3a 20 65 78 70 65 63 74 65 64 20  %s:%d: expected 
23950 25 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 66  %d columns but f
23960 6f 75 6e 64 20 25 64 20 2d 20 22 0a 20 20 20 20  ound %d - ".    
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23980 20 20 20 20 20 20 22 66 69 6c 6c 69 6e 67 20 74        "filling t
23990 68 65 20 72 65 73 74 20 77 69 74 68 20 4e 55 4c  he rest with NUL
239a0 4c 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  L\n",.          
239b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239c0 73 43 74 78 2e 7a 46 69 6c 65 2c 20 73 74 61 72  sCtx.zFile, star
239d0 74 4c 69 6e 65 2c 20 6e 43 6f 6c 2c 20 69 2b 31  tLine, nCol, i+1
239e0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 20 2b  );.          i +
239f0 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 20 20 77  = 2;.          w
23a00 68 69 6c 65 28 20 69 3c 3d 6e 43 6f 6c 20 29 7b  hile( i<=nCol ){
23a10 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
23a20 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b 20 69 2b  ll(pStmt, i); i+
23a30 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  +; }.        }. 
23a40 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
23a50 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73 43 74   sCtx.cTerm==sCt
23a60 78 2e 63 43 6f 6c 53 65 70 20 29 7b 0a 20 20 20  x.cColSep ){.   
23a70 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
23a80 20 20 20 78 52 65 61 64 28 26 73 43 74 78 29 3b     xRead(&sCtx);
23a90 0a 20 20 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a  .          i++;.
23aa0 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20          }while( 
23ab0 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73 43 74 78  sCtx.cTerm==sCtx
23ac0 2e 63 43 6f 6c 53 65 70 20 29 3b 0a 20 20 20 20  .cColSep );.    
23ad0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
23ae0 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20  stderr, "%s:%d: 
23af0 65 78 70 65 63 74 65 64 20 25 64 20 63 6f 6c 75  expected %d colu
23b00 6d 6e 73 20 62 75 74 20 66 6f 75 6e 64 20 25 64  mns but found %d
23b10 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   - ".           
23b20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65 78               "ex
23b30 74 72 61 73 20 69 67 6e 6f 72 65 64 5c 6e 22 2c  tras ignored\n",
23b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23b50 20 20 20 20 20 20 20 20 20 73 43 74 78 2e 7a 46           sCtx.zF
23b60 69 6c 65 2c 20 73 74 61 72 74 4c 69 6e 65 2c 20  ile, startLine, 
23b70 6e 43 6f 6c 2c 20 69 29 3b 0a 20 20 20 20 20 20  nCol, i);.      
23b80 7d 0a 20 20 20 20 20 20 69 66 28 20 69 3e 3d 6e  }.      if( i>=n
23b90 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 73  Col ){.        s
23ba0 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
23bb0 74 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  t);.        rc =
23bc0 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70   sqlite3_reset(p
23bd0 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 69  Stmt);.        i
23be0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
23bf0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74   ){.          ut
23c00 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
23c10 2c 20 22 25 73 3a 25 64 3a 20 49 4e 53 45 52 54  , "%s:%d: INSERT
23c20 20 66 61 69 6c 65 64 3a 20 25 73 5c 6e 22 2c 20   failed: %s\n", 
23c30 73 43 74 78 2e 7a 46 69 6c 65 2c 0a 20 20 20 20  sCtx.zFile,.    
23c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c50 20 20 73 74 61 72 74 4c 69 6e 65 2c 20 73 71 6c    startLine, sql
23c60 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
23c70 62 29 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  b));.        }. 
23c80 20 20 20 20 20 7d 0a 20 20 20 20 7d 77 68 69 6c       }.    }whil
23c90 65 28 20 73 43 74 78 2e 63 54 65 72 6d 21 3d 45  e( sCtx.cTerm!=E
23ca0 4f 46 20 29 3b 0a 0a 20 20 20 20 78 43 6c 6f 73  OF );..    xClos
23cb0 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
23cc0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43   sqlite3_free(sC
23cd0 74 78 2e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74  tx.z);.    sqlit
23ce0 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
23cf0 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 65 64  t);.    if( need
23d00 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74 65 33  Commit ) sqlite3
23d10 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 43 4f  _exec(p->db, "CO
23d20 4d 4d 49 54 22 2c 20 30 2c 20 30 2c 20 30 29 3b  MMIT", 0, 0, 0);
23d30 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65  .  }else..#ifnde
23d40 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
23d50 42 4c 45 0a 20 20 69 66 28 20 63 3d 3d 27 69 27  BLE.  if( c=='i'
23d60 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
23d70 67 5b 30 5d 2c 20 22 69 6d 70 6f 73 74 65 72 22  g[0], "imposter"
23d80 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63  , n)==0 ){.    c
23d90 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20 20 63  har *zSql;.    c
23da0 68 61 72 20 2a 7a 43 6f 6c 6c 69 73 74 20 3d 20  har *zCollist = 
23db0 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  0;.    sqlite3_s
23dc0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 20 20  tmt *pStmt;.    
23dd0 69 6e 74 20 74 6e 75 6d 20 3d 20 30 3b 0a 20 20  int tnum = 0;.  
23de0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 66 28    int i;.    if(
23df0 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20 20 20   nArg!=3 ){.    
23e00 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
23e10 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 69  derr, "Usage: .i
23e20 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20 49 4d  mposter INDEX IM
23e30 50 4f 53 54 45 52 5c 6e 22 29 3b 0a 20 20 20 20  POSTER\n");.    
23e40 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
23e50 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
23e60 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
23e70 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
23e80 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
23e90 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c  te3_mprintf("SEL
23ea0 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46 52 4f  ECT rootpage FRO
23eb0 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  M sqlite_master"
23ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48              " WH
23ee0 45 52 45 20 6e 61 6d 65 3d 27 25 71 27 20 41 4e  ERE name='%q' AN
23ef0 44 20 74 79 70 65 3d 27 69 6e 64 65 78 27 22 2c  D type='index'",
23f00 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
23f10 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
23f20 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
23f30 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
23f40 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
23f50 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20  (zSql);.    if( 
23f60 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
23f70 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  mt)==SQLITE_ROW 
23f80 29 7b 0a 20 20 20 20 20 20 74 6e 75 6d 20 3d 20  ){.      tnum = 
23f90 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
23fa0 6e 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20  nt(pStmt, 0);.  
23fb0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
23fc0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
23fd0 0a 20 20 20 20 69 66 28 20 74 6e 75 6d 3d 3d 30  .    if( tnum==0
23fe0 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
23ff0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6e  rintf(stderr, "n
24000 6f 20 73 75 63 68 20 69 6e 64 65 78 3a 20 5c 22  o such index: \"
24010 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31  %s\"\n", azArg[1
24020 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ]);.      rc = 1
24030 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
24040 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
24050 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 20 3d      }.    zSql =
24060 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
24070 28 22 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78  ("PRAGMA index_x
24080 69 6e 66 6f 3d 27 25 71 27 22 2c 20 61 7a 41 72  info='%q'", azAr
24090 67 5b 31 5d 29 3b 0a 20 20 20 20 72 63 20 3d 20  g[1]);.    rc = 
240a0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
240b0 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
240c0 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
240d0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
240e0 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 20 3d 20  (zSql);.    i = 
240f0 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 73 71  0;.    while( sq
24100 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
24110 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
24120 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4c 61 62  .      char zLab
24130 65 6c 5b 32 30 5d 3b 0a 20 20 20 20 20 20 63 6f  el[20];.      co
24140 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d  nst char *zCol =
24150 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
24160 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
24170 74 28 70 53 74 6d 74 2c 32 29 3b 0a 20 20 20 20  t(pStmt,2);.    
24180 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28    i++;.      if(
24190 20 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zCol==0 ){.    
241a0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
241b0 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74  column_int(pStmt
241c0 2c 31 29 3d 3d 2d 31 20 29 7b 0a 20 20 20 20 20  ,1)==-1 ){.     
241d0 20 20 20 20 20 7a 43 6f 6c 20 3d 20 22 5f 52 4f       zCol = "_RO
241e0 57 49 44 5f 22 3b 0a 20 20 20 20 20 20 20 20 7d  WID_";.        }
241f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
24200 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
24210 28 73 69 7a 65 6f 66 28 7a 4c 61 62 65 6c 29 2c  (sizeof(zLabel),
24220 7a 4c 61 62 65 6c 2c 22 65 78 70 72 25 64 22 2c  zLabel,"expr%d",
24230 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 43  i);.          zC
24240 6f 6c 20 3d 20 7a 4c 61 62 65 6c 3b 0a 20 20 20  ol = zLabel;.   
24250 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
24260 20 20 20 20 20 69 66 28 20 7a 43 6f 6c 6c 69 73       if( zCollis
24270 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
24280 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71 6c 69 74  zCollist = sqlit
24290 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22 25 77  e3_mprintf("\"%w
242a0 5c 22 22 2c 20 7a 43 6f 6c 29 3b 0a 20 20 20 20  \"", zCol);.    
242b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
242c0 20 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71 6c 69   zCollist = sqli
242d0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 2c  te3_mprintf("%z,
242e0 5c 22 25 77 5c 22 22 2c 20 7a 43 6f 6c 6c 69 73  \"%w\"", zCollis
242f0 74 2c 20 7a 43 6f 6c 29 3b 0a 20 20 20 20 20 20  t, zCol);.      
24300 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
24310 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
24320 6d 74 29 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  mt);.    zSql = 
24330 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
24340 0a 20 20 20 20 20 20 20 20 20 20 22 43 52 45 41  .          "CREA
24350 54 45 20 54 41 42 4c 45 20 5c 22 25 77 5c 22 28  TE TABLE \"%w\"(
24360 25 73 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 25  %s,PRIMARY KEY(%
24370 73 29 29 57 49 54 48 4f 55 54 20 52 4f 57 49 44  s))WITHOUT ROWID
24380 22 2c 0a 20 20 20 20 20 20 20 20 20 20 61 7a 41  ",.          azA
24390 72 67 5b 32 5d 2c 20 7a 43 6f 6c 6c 69 73 74 2c  rg[2], zCollist,
243a0 20 7a 43 6f 6c 6c 69 73 74 29 3b 0a 20 20 20 20   zCollist);.    
243b0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 6f  sqlite3_free(zCo
243c0 6c 6c 69 73 74 29 3b 0a 20 20 20 20 72 63 20 3d  llist);.    rc =
243d0 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
243e0 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
243f0 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 2c 20  TCTRL_IMPOSTER, 
24400 70 2d 3e 64 62 2c 20 22 6d 61 69 6e 22 2c 20 31  p->db, "main", 1
24410 2c 20 74 6e 75 6d 29 3b 0a 20 20 20 20 69 66 28  , tnum);.    if(
24420 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
24430 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
24440 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
24450 20 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 30 29 3b   zSql, 0, 0, 0);
24460 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74  .      sqlite3_t
24470 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
24480 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f  TE_TESTCTRL_IMPO
24490 53 54 45 52 2c 20 70 2d 3e 64 62 2c 20 22 6d 61  STER, p->db, "ma
244a0 69 6e 22 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  in", 0, 0);.    
244b0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
244c0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
244d0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20 69  stderr, "Error i
244e0 6e 20 5b 25 73 5d 3a 20 25 73 5c 6e 22 2c 20 7a  n [%s]: %s\n", z
244f0 53 71 6c 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Sql, sqlite3_err
24500 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  msg(p->db));.   
24510 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
24520 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
24530 64 6f 75 74 2c 20 22 25 73 3b 5c 6e 22 2c 20 7a  dout, "%s;\n", z
24540 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 72 61  Sql);.        ra
24550 77 5f 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c  w_printf(stdout,
24560 0a 20 20 20 20 20 20 20 20 20 20 20 22 57 41 52  .           "WAR
24570 4e 49 4e 47 3a 20 77 72 69 74 69 6e 67 20 74 6f  NING: writing to
24580 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62   an imposter tab
24590 6c 65 20 77 69 6c 6c 20 63 6f 72 72 75 70 74 20  le will corrupt 
245a0 74 68 65 20 69 6e 64 65 78 21 5c 6e 22 0a 20 20  the index!\n".  
245b0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 7d        );.      }
245c0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
245d0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
245e0 65 72 72 2c 20 22 53 51 4c 49 54 45 5f 54 45 53  err, "SQLITE_TES
245f0 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 20 72  TCTRL_IMPOSTER r
24600 65 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63  eturns %d\n", rc
24610 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
24620 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
24630 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
24640 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
24650 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
24660 5f 4f 4d 49 54 5f 54 45 53 54 5f 43 4f 4e 54 52  _OMIT_TEST_CONTR
24670 4f 4c 29 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53  OL) */..#ifdef S
24680 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
24690 52 41 43 45 0a 20 20 69 66 28 20 63 3d 3d 27 69  RACE.  if( c=='i
246a0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
246b0 72 67 5b 30 5d 2c 20 22 69 6f 74 72 61 63 65 22  rg[0], "iotrace"
246c0 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53  , n)==0 ){.    S
246d0 51 4c 49 54 45 5f 41 50 49 20 65 78 74 65 72 6e  QLITE_API extern
246e0 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44   void (SQLITE_CD
246f0 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72  ECL *sqlite3IoTr
24700 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
24710 2c 20 2e 2e 2e 29 3b 0a 20 20 20 20 69 66 28 20  , ...);.    if( 
24720 69 6f 74 72 61 63 65 20 26 26 20 69 6f 74 72 61  iotrace && iotra
24730 63 65 21 3d 73 74 64 6f 75 74 20 29 20 66 63 6c  ce!=stdout ) fcl
24740 6f 73 65 28 69 6f 74 72 61 63 65 29 3b 0a 20 20  ose(iotrace);.  
24750 20 20 69 6f 74 72 61 63 65 20 3d 20 30 3b 0a 20    iotrace = 0;. 
24760 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b     if( nArg<2 ){
24770 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6f  .      sqlite3Io
24780 54 72 61 63 65 20 3d 20 30 3b 0a 20 20 20 20 7d  Trace = 0;.    }
24790 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
247a0 61 7a 41 72 67 5b 31 5d 2c 20 22 2d 22 29 3d 3d  azArg[1], "-")==
247b0 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
247c0 65 33 49 6f 54 72 61 63 65 20 3d 20 69 6f 74 72  e3IoTrace = iotr
247d0 61 63 65 50 72 69 6e 74 66 3b 0a 20 20 20 20 20  acePrintf;.     
247e0 20 69 6f 74 72 61 63 65 20 3d 20 73 74 64 6f 75   iotrace = stdou
247f0 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  t;.    }else{.  
24800 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20 66 6f      iotrace = fo
24810 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20 22 77  pen(azArg[1], "w
24820 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 6f  ");.      if( io
24830 74 72 61 63 65 3d 3d 30 20 29 7b 0a 20 20 20 20  trace==0 ){.    
24840 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
24850 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
24860 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73  cannot open \"%s
24870 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29  \"\n", azArg[1])
24880 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
24890 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a 20 20  3IoTrace = 0;.  
248a0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
248b0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
248c0 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63     sqlite3IoTrac
248d0 65 20 3d 20 69 6f 74 72 61 63 65 50 72 69 6e 74  e = iotracePrint
248e0 66 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  f;.      }.    }
248f0 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
24900 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26  .  if( c=='l' &&
24910 20 6e 3e 3d 35 20 26 26 20 73 74 72 6e 63 6d 70   n>=5 && strncmp
24920 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 69 6d 69  (azArg[0], "limi
24930 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ts", n)==0 ){.  
24940 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
24950 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 63  truct {.       c
24960 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69 6d 69  onst char *zLimi
24970 74 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61 6d 65  tName;   /* Name
24980 20 6f 66 20 61 20 6c 69 6d 69 74 20 2a 2f 0a 20   of a limit */. 
24990 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 43        int limitC
249a0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
249b0 2f 2a 20 49 6e 74 65 67 65 72 20 63 6f 64 65 20  /* Integer code 
249c0 66 6f 72 20 74 68 61 74 20 6c 69 6d 69 74 20 2a  for that limit *
249d0 2f 0a 20 20 20 20 7d 20 61 4c 69 6d 69 74 5b 5d  /.    } aLimit[]
249e0 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 6c 65   = {.      { "le
249f0 6e 67 74 68 22 2c 20 20 20 20 20 20 20 20 20 20  ngth",          
24a00 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d        SQLITE_LIM
24a10 49 54 5f 4c 45 4e 47 54 48 20 20 20 20 20 20 20  IT_LENGTH       
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
24a30 20 20 20 20 20 20 7b 20 22 73 71 6c 5f 6c 65 6e        { "sql_len
24a40 67 74 68 22 2c 20 20 20 20 20 20 20 20 20 20 20  gth",           
24a50 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51   SQLITE_LIMIT_SQ
24a60 4c 5f 4c 45 4e 47 54 48 20 20 20 20 20 20 20 20  L_LENGTH        
24a70 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
24a80 20 7b 20 22 63 6f 6c 75 6d 6e 22 2c 20 20 20 20   { "column",    
24a90 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
24aa0 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20  TE_LIMIT_COLUMN 
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ac0 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 65     },.      { "e
24ad0 78 70 72 5f 64 65 70 74 68 22 2c 20 20 20 20 20  xpr_depth",     
24ae0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49         SQLITE_LI
24af0 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48 20 20  MIT_EXPR_DEPTH  
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
24b10 0a 20 20 20 20 20 20 7b 20 22 63 6f 6d 70 6f 75  .      { "compou
24b20 6e 64 5f 73 65 6c 65 63 74 22 2c 20 20 20 20 20  nd_select",     
24b30 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43    SQLITE_LIMIT_C
24b40 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 20 20  OMPOUND_SELECT  
24b50 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
24b60 20 20 7b 20 22 76 64 62 65 5f 6f 70 22 2c 20 20    { "vdbe_op",  
24b70 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
24b80 49 54 45 5f 4c 49 4d 49 54 5f 56 44 42 45 5f 4f  ITE_LIMIT_VDBE_O
24b90 50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  P               
24ba0 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
24bb0 66 75 6e 63 74 69 6f 6e 5f 61 72 67 22 2c 20 20  function_arg",  
24bc0 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
24bd0 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52  IMIT_FUNCTION_AR
24be0 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  G              }
24bf0 2c 0a 20 20 20 20 20 20 7b 20 22 61 74 74 61 63  ,.      { "attac
24c00 68 65 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  hed",           
24c10 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
24c20 41 54 54 41 43 48 45 44 20 20 20 20 20 20 20 20  ATTACHED        
24c30 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
24c40 20 20 20 7b 20 22 6c 69 6b 65 5f 70 61 74 74 65     { "like_patte
24c50 72 6e 5f 6c 65 6e 67 74 68 22 2c 20 20 20 53 51  rn_length",   SQ
24c60 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45 5f  LITE_LIMIT_LIKE_
24c70 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 20 20  PATTERN_LENGTH  
24c80 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
24c90 22 76 61 72 69 61 62 6c 65 5f 6e 75 6d 62 65 72  "variable_number
24ca0 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f  ",       SQLITE_
24cb0 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e  LIMIT_VARIABLE_N
24cc0 55 4d 42 45 52 20 20 20 20 20 20 20 20 20 20 20  UMBER           
24cd0 7d 2c 0a 20 20 20 20 20 20 7b 20 22 74 72 69 67  },.      { "trig
24ce0 67 65 72 5f 64 65 70 74 68 22 2c 20 20 20 20 20  ger_depth",     
24cf0 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54      SQLITE_LIMIT
24d00 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 20 20  _TRIGGER_DEPTH  
24d10 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
24d20 20 20 20 20 7b 20 22 77 6f 72 6b 65 72 5f 74 68      { "worker_th
24d30 72 65 61 64 73 22 2c 20 20 20 20 20 20 20 20 53  reads",        S
24d40 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
24d50 45 52 5f 54 48 52 45 41 44 53 20 20 20 20 20 20  ER_THREADS      
24d60 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7d 3b 0a        },.    };.
24d70 20 20 20 20 69 6e 74 20 69 2c 20 6e 32 3b 0a 20      int i, n2;. 
24d80 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29     open_db(p, 0)
24d90 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d  ;.    if( nArg==
24da0 31 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69  1 ){.      for(i
24db0 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28  =0; i<ArraySize(
24dc0 61 4c 69 6d 69 74 29 3b 20 69 2b 2b 29 7b 0a 20  aLimit); i++){. 
24dd0 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
24de0 32 30 73 20 25 64 5c 6e 22 2c 20 61 4c 69 6d 69  20s %d\n", aLimi
24df0 74 5b 69 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c  t[i].zLimitName,
24e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24e10 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d  sqlite3_limit(p-
24e20 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 5d 2e 6c  >db, aLimit[i].l
24e30 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29 29 3b 0a  imitCode, -1));.
24e40 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
24e50 65 20 69 66 28 20 6e 41 72 67 3e 33 20 29 7b 0a  e if( nArg>3 ){.
24e60 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
24e70 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
24e80 20 2e 6c 69 6d 69 74 20 4e 41 4d 45 20 3f 4e 45   .limit NAME ?NE
24e90 57 2d 56 41 4c 55 45 3f 5c 6e 22 29 3b 0a 20 20  W-VALUE?\n");.  
24ea0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
24eb0 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
24ec0 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 65  and_exit;.    }e
24ed0 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  lse{.      int i
24ee0 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a 20 20 20 20  Limit = -1;.    
24ef0 20 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30 28    n2 = strlen30(
24f00 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
24f10 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
24f20 79 53 69 7a 65 28 61 4c 69 6d 69 74 29 3b 20 69  ySize(aLimit); i
24f30 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
24f40 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
24f50 70 28 61 4c 69 6d 69 74 5b 69 5d 2e 7a 4c 69 6d  p(aLimit[i].zLim
24f60 69 74 4e 61 6d 65 2c 20 61 7a 41 72 67 5b 31 5d  itName, azArg[1]
24f70 2c 20 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  , n2)==0 ){.    
24f80 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74        if( iLimit
24f90 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
24fa0 20 20 69 4c 69 6d 69 74 20 3d 20 69 3b 0a 20 20    iLimit = i;.  
24fb0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
24fc0 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
24fd0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
24fe0 61 6d 62 69 67 75 6f 75 73 20 6c 69 6d 69 74 3a  ambiguous limit:
24ff0 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72   \"%s\"\n", azAr
25000 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  g[1]);.         
25010 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
25020 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
25030 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
25040 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
25050 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
25060 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 30 20     if( iLimit<0 
25070 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
25080 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
25090 75 6e 6b 6e 6f 77 6e 20 6c 69 6d 69 74 3a 20 5c  unknown limit: \
250a0 22 25 73 5c 22 5c 6e 22 0a 20 20 20 20 20 20 20  "%s\"\n".       
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250c0 20 22 65 6e 74 65 72 20 5c 22 2e 6c 69 6d 69 74   "enter \".limit
250d0 73 5c 22 20 77 69 74 68 20 6e 6f 20 61 72 67 75  s\" with no argu
250e0 6d 65 6e 74 73 20 66 6f 72 20 61 20 6c 69 73 74  ments for a list
250f0 2e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  .\n",.          
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
25110 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
25120 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
25130 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
25140 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20  and_exit;.      
25150 7d 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72 67  }.      if( nArg
25160 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==3 ){.        s
25170 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d 3e  qlite3_limit(p->
25180 64 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69  db, aLimit[iLimi
25190 74 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 0a 20 20  t].limitCode,.  
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251b0 20 20 20 20 28 69 6e 74 29 69 6e 74 65 67 65 72      (int)integer
251c0 56 61 6c 75 65 28 61 7a 41 72 67 5b 32 5d 29 29  Value(azArg[2]))
251d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
251e0 70 72 69 6e 74 66 28 22 25 32 30 73 20 25 64 5c  printf("%20s %d\
251f0 6e 22 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69  n", aLimit[iLimi
25200 74 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c 0a 20  t].zLimitName,. 
25210 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
25220 74 65 33 5f 6c 69 6d 69 74 28 70 2d 3e 64 62 2c  te3_limit(p->db,
25230 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69 74 5d 2e   aLimit[iLimit].
25240 6c 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29 29 3b  limitCode, -1));
25250 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
25260 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26 20    if( c=='l' && 
25270 6e 3e 32 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>2 && strncmp(a
25280 7a 41 72 67 5b 30 5d 2c 20 22 6c 69 6e 74 22 2c  zArg[0], "lint",
25290 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f 70   n)==0 ){.    op
252a0 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20  en_db(p, 0);.   
252b0 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61 6e 64 28   lintDotCommand(
252c0 70 2c 20 61 7a 41 72 67 2c 20 6e 41 72 67 29 3b  p, azArg, nArg);
252d0 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65  .  }else..#ifnde
252e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
252f0 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 69  AD_EXTENSION.  i
25300 66 28 20 63 3d 3d 27 6c 27 20 26 26 20 73 74 72  f( c=='l' && str
25310 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
25320 6c 6f 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  load", n)==0 ){.
25330 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
25340 7a 46 69 6c 65 2c 20 2a 7a 50 72 6f 63 3b 0a 20  zFile, *zProc;. 
25350 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67     char *zErrMsg
25360 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 6e 41   = 0;.    if( nA
25370 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20 72 61  rg<2 ){.      ra
25380 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
25390 20 22 55 73 61 67 65 3a 20 2e 6c 6f 61 64 20 46   "Usage: .load F
253a0 49 4c 45 20 3f 45 4e 54 52 59 50 4f 49 4e 54 3f  ILE ?ENTRYPOINT?
253b0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
253c0 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
253d0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
253e0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 46 69 6c  ;.    }.    zFil
253f0 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20  e = azArg[1];.  
25400 20 20 7a 50 72 6f 63 20 3d 20 6e 41 72 67 3e 3d    zProc = nArg>=
25410 33 20 3f 20 61 7a 41 72 67 5b 32 5d 20 3a 20 30  3 ? azArg[2] : 0
25420 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  ;.    open_db(p,
25430 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   0);.    rc = sq
25440 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
25450 73 69 6f 6e 28 70 2d 3e 64 62 2c 20 7a 46 69 6c  sion(p->db, zFil
25460 65 2c 20 7a 50 72 6f 63 2c 20 26 7a 45 72 72 4d  e, zProc, &zErrM
25470 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  sg);.    if( rc!
25480 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
25490 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
254a0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
254b0 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b  %s\n", zErrMsg);
254c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
254d0 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20  ree(zErrMsg);.  
254e0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
254f0 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  }.  }else.#endif
25500 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26  ..  if( c=='l' &
25510 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
25520 30 5d 2c 20 22 6c 6f 67 22 2c 20 6e 29 3d 3d 30  0], "log", n)==0
25530 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
25540 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77  !=2 ){.      raw
25550 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
25560 22 55 73 61 67 65 3a 20 2e 6c 6f 67 20 46 49 4c  "Usage: .log FIL
25570 45 4e 41 4d 45 5c 6e 22 29 3b 0a 20 20 20 20 20  ENAME\n");.     
25580 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c   rc = 1;.    }el
25590 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  se{.      const 
255a0 63 68 61 72 20 2a 7a 46 69 6c 65 20 3d 20 61 7a  char *zFile = az
255b0 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20 6f 75  Arg[1];.      ou
255c0 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28  tput_file_close(
255d0 70 2d 3e 70 4c 6f 67 29 3b 0a 20 20 20 20 20 20  p->pLog);.      
255e0 70 2d 3e 70 4c 6f 67 20 3d 20 6f 75 74 70 75 74  p->pLog = output
255f0 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46 69 6c 65  _file_open(zFile
25600 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
25610 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6d 27 20 26  ..  if( c=='m' &
25620 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
25630 30 5d 2c 20 22 6d 6f 64 65 22 2c 20 6e 29 3d 3d  0], "mode", n)==
25640 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
25650 68 61 72 20 2a 7a 4d 6f 64 65 20 3d 20 6e 41 72  har *zMode = nAr
25660 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d 20  g>=2 ? azArg[1] 
25670 3a 20 22 22 3b 0a 20 20 20 20 69 6e 74 20 6e 32  : "";.    int n2
25680 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a   = (int)strlen(z
25690 4d 6f 64 65 29 3b 0a 20 20 20 20 69 6e 74 20 63  Mode);.    int c
256a0 32 20 3d 20 7a 4d 6f 64 65 5b 30 5d 3b 0a 20 20  2 = zMode[0];.  
256b0 20 20 69 66 28 20 63 32 3d 3d 27 6c 27 20 26 26    if( c2=='l' &&
256c0 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63 6d 70   n2>2 && strncmp
256d0 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 6e 65 73  (azArg[1],"lines
256e0 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
256f0 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
25700 5f 4c 69 6e 65 3b 0a 20 20 20 20 20 20 73 71 6c  _Line;.      sql
25710 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
25720 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72  zeof(p->rowSepar
25730 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70  ator), p->rowSep
25740 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29  arator, SEP_Row)
25750 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
25760 63 32 3d 3d 27 63 27 20 26 26 20 73 74 72 6e 63  c2=='c' && strnc
25770 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63 6f 6c  mp(azArg[1],"col
25780 75 6d 6e 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  umns",n2)==0 ){.
25790 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
257a0 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20 20 20  MODE_Column;.   
257b0 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
257c0 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f  ntf(sizeof(p->ro
257d0 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e  wSeparator), p->
257e0 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45  rowSeparator, SE
257f0 50 5f 52 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73  P_Row);.    }els
25800 65 20 69 66 28 20 63 32 3d 3d 27 6c 27 20 26 26  e if( c2=='l' &&
25810 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63 6d 70   n2>2 && strncmp
25820 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 73 74 22  (azArg[1],"list"
25830 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ,n2)==0 ){.     
25840 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f   p->mode = MODE_
25850 4c 69 73 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  List;.      sqli
25860 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
25870 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  eof(p->colSepara
25880 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  tor), p->colSepa
25890 72 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6c 75 6d  rator, SEP_Colum
258a0 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  n);.      sqlite
258b0 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
258c0 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  f(p->rowSeparato
258d0 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  r), p->rowSepara
258e0 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b 0a 20  tor, SEP_Row);. 
258f0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d     }else if( c2=
25900 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='h' && strncmp(
25910 61 7a 41 72 67 5b 31 5d 2c 22 68 74 6d 6c 22 2c  azArg[1],"html",
25920 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n2)==0 ){.      
25930 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 48  p->mode = MODE_H
25940 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  tml;.    }else i
25950 66 28 20 63 32 3d 3d 27 74 27 20 26 26 20 73 74  f( c2=='t' && st
25960 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
25970 74 63 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20  tcl",n2)==0 ){. 
25980 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d       p->mode = M
25990 4f 44 45 5f 54 63 6c 3b 0a 20 20 20 20 20 20 73  ODE_Tcl;.      s
259a0 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
259b0 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70  sizeof(p->colSep
259c0 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53  arator), p->colS
259d0 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 53 70  eparator, SEP_Sp
259e0 61 63 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ace);.      sqli
259f0 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
25a00 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61  eof(p->rowSepara
25a10 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61  tor), p->rowSepa
25a20 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b  rator, SEP_Row);
25a30 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
25a40 32 3d 3d 27 63 27 20 26 26 20 73 74 72 6e 63 6d  2=='c' && strncm
25a50 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63 73 76 22  p(azArg[1],"csv"
25a60 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ,n2)==0 ){.     
25a70 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f   p->mode = MODE_
25a80 43 73 76 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Csv;.      sqlit
25a90 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
25aa0 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  of(p->colSeparat
25ab0 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  or), p->colSepar
25ac0 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6d 6d 61 29  ator, SEP_Comma)
25ad0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
25ae0 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
25af0 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
25b00 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
25b10 72 2c 20 53 45 50 5f 43 72 4c 66 29 3b 0a 20 20  r, SEP_CrLf);.  
25b20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d    }else if( c2==
25b30 27 74 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  't' && strncmp(a
25b40 7a 41 72 67 5b 31 5d 2c 22 74 61 62 73 22 2c 6e  zArg[1],"tabs",n
25b50 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  2)==0 ){.      p
25b60 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69  ->mode = MODE_Li
25b70 73 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  st;.      sqlite
25b80 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
25b90 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  f(p->colSeparato
25ba0 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61  r), p->colSepara
25bb0 74 6f 72 2c 20 53 45 50 5f 54 61 62 29 3b 0a 20  tor, SEP_Tab);. 
25bc0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d     }else if( c2=
25bd0 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='i' && strncmp(
25be0 61 7a 41 72 67 5b 31 5d 2c 22 69 6e 73 65 72 74  azArg[1],"insert
25bf0 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
25c00 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
25c10 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 20 20 73  _Insert;.      s
25c20 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 70 2c  et_table_name(p,
25c30 20 6e 41 72 67 3e 3d 33 20 3f 20 61 7a 41 72 67   nArg>=3 ? azArg
25c40 5b 32 5d 20 3a 20 22 74 61 62 6c 65 22 29 3b 0a  [2] : "table");.
25c50 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32      }else if( c2
25c60 3d 3d 27 71 27 20 26 26 20 73 74 72 6e 63 6d 70  =='q' && strncmp
25c70 28 61 7a 41 72 67 5b 31 5d 2c 22 71 75 6f 74 65  (azArg[1],"quote
25c80 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
25c90 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
25ca0 5f 51 75 6f 74 65 3b 0a 20 20 20 20 7d 65 6c 73  _Quote;.    }els
25cb0 65 20 69 66 28 20 63 32 3d 3d 27 61 27 20 26 26  e if( c2=='a' &&
25cc0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31   strncmp(azArg[1
25cd0 5d 2c 22 61 73 63 69 69 22 2c 6e 32 29 3d 3d 30  ],"ascii",n2)==0
25ce0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64   ){.      p->mod
25cf0 65 20 3d 20 4d 4f 44 45 5f 41 73 63 69 69 3b 0a  e = MODE_Ascii;.
25d00 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
25d10 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d  printf(sizeof(p-
25d20 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20  >colSeparator), 
25d30 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c  p->colSeparator,
25d40 20 53 45 50 5f 55 6e 69 74 29 3b 0a 20 20 20 20   SEP_Unit);.    
25d50 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
25d60 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77  tf(sizeof(p->row
25d70 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72  Separator), p->r
25d80 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50  owSeparator, SEP
25d90 5f 52 65 63 6f 72 64 29 3b 0a 20 20 20 20 7d 65  _Record);.    }e
25da0 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 31 20  lse if( nArg==1 
25db0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
25dc0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 63 75 72  ntf(p->out, "cur
25dd0 72 65 6e 74 20 6f 75 74 70 75 74 20 6d 6f 64 65  rent output mode
25de0 3a 20 25 73 5c 6e 22 2c 20 6d 6f 64 65 44 65 73  : %s\n", modeDes
25df0 63 72 5b 70 2d 3e 6d 6f 64 65 5d 29 3b 0a 20 20  cr[p->mode]);.  
25e00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
25e10 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
25e20 2c 20 22 45 72 72 6f 72 3a 20 6d 6f 64 65 20 73  , "Error: mode s
25e30 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a  hould be one of:
25e40 20 22 0a 20 20 20 20 20 20 20 20 20 22 61 73 63   ".         "asc
25e50 69 69 20 63 6f 6c 75 6d 6e 20 63 73 76 20 68 74  ii column csv ht
25e60 6d 6c 20 69 6e 73 65 72 74 20 6c 69 6e 65 20 6c  ml insert line l
25e70 69 73 74 20 71 75 6f 74 65 20 74 61 62 73 20 74  ist quote tabs t
25e80 63 6c 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  cl\n");.      rc
25e90 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
25ea0 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f  p->cMode = p->mo
25eb0 64 65 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  de;.  }else..  i
25ec0 66 28 20 63 3d 3d 27 6e 27 20 26 26 20 73 74 72  f( c=='n' && str
25ed0 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
25ee0 6e 75 6c 6c 76 61 6c 75 65 22 2c 20 6e 29 3d 3d  nullvalue", n)==
25ef0 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
25f00 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 71  g==2 ){.      sq
25f10 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
25f20 69 7a 65 6f 66 28 70 2d 3e 6e 75 6c 6c 56 61 6c  izeof(p->nullVal
25f30 75 65 29 2c 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75  ue), p->nullValu
25f40 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
25f50 20 20 20 20 20 20 20 20 20 20 22 25 2e 2a 73 22            "%.*s"
25f60 2c 20 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65  , (int)ArraySize
25f70 28 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 2d 31  (p->nullValue)-1
25f80 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
25f90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
25fa0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
25fb0 20 22 55 73 61 67 65 3a 20 2e 6e 75 6c 6c 76 61   "Usage: .nullva
25fc0 6c 75 65 20 53 54 52 49 4e 47 5c 6e 22 29 3b 0a  lue STRING\n");.
25fd0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
25fe0 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
25ff0 66 28 20 63 3d 3d 27 6f 27 20 26 26 20 73 74 72  f( c=='o' && str
26000 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
26010 6f 70 65 6e 22 2c 20 6e 29 3d 3d 30 20 26 26 20  open", n)==0 && 
26020 6e 3e 3d 32 20 29 7b 0a 20 20 20 20 63 68 61 72  n>=2 ){.    char
26030 20 2a 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 3b 20   *zNewFilename; 
26040 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
26050 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
26060 20 6f 70 65 6e 20 2a 2f 0a 20 20 20 20 69 6e 74   open */.    int
26070 20 69 4e 61 6d 65 20 3d 20 31 3b 20 20 20 20 20   iName = 1;     
26080 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 61 7a    /* Index in az
26090 41 72 67 5b 5d 20 6f 66 20 74 68 65 20 66 69 6c  Arg[] of the fil
260a0 65 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74  ename */.    int
260b0 20 6e 65 77 46 6c 61 67 20 3d 20 30 3b 20 20 20   newFlag = 0;   
260c0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 65 6c    /* True to del
260d0 65 74 65 20 66 69 6c 65 20 62 65 66 6f 72 65 20  ete file before 
260e0 6f 70 65 6e 69 6e 67 20 2a 2f 0a 20 20 20 20 2f  opening */.    /
260f0 2a 20 43 6c 6f 73 65 20 74 68 65 20 65 78 69 73  * Close the exis
26100 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 2a 2f  ting database */
26110 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 63 6c 6f  .    session_clo
26120 73 65 5f 61 6c 6c 28 70 29 3b 0a 20 20 20 20 73  se_all(p);.    s
26130 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 2d 3e  qlite3_close(p->
26140 64 62 29 3b 0a 20 20 20 20 70 2d 3e 64 62 20 3d  db);.    p->db =
26150 20 30 3b 0a 20 20 20 20 70 2d 3e 7a 44 62 46 69   0;.    p->zDbFi
26160 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20  lename = 0;.    
26170 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 2d 3e  sqlite3_free(p->
26180 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 29 3b 0a 20  zFreeOnClose);. 
26190 20 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f     p->zFreeOnClo
261a0 73 65 20 3d 20 30 3b 0a 20 20 20 20 2f 2a 20 43  se = 0;.    /* C
261b0 68 65 63 6b 20 66 6f 72 20 63 6f 6d 6d 61 6e 64  heck for command
261c0 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20  -line arguments 
261d0 2a 2f 0a 20 20 20 20 66 6f 72 28 69 4e 61 6d 65  */.    for(iName
261e0 3d 31 3b 20 69 4e 61 6d 65 3c 6e 41 72 67 20 26  =1; iName<nArg &
261f0 26 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 5b 30  & azArg[iName][0
26200 5d 3d 3d 27 2d 27 3b 20 69 4e 61 6d 65 2b 2b 29  ]=='-'; iName++)
26210 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
26220 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 4e  ar *z = azArg[iN
26230 61 6d 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  ame];.      if( 
26240 6f 70 74 69 6f 6e 4d 61 74 63 68 28 7a 2c 22 6e  optionMatch(z,"n
26250 65 77 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ew") ){.        
26260 6e 65 77 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20  newFlag = 1;.   
26270 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 30     }else if( z[0
26280 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20  ]=='-' ){.      
26290 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
262a0 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f  derr, "unknown o
262b0 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 7a 29  ption: %s\n", z)
262c0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
262d0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
262e0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
262f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
26300 20 20 20 20 2f 2a 20 49 66 20 61 20 66 69 6c 65      /* If a file
26310 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
26320 64 2c 20 74 72 79 20 74 6f 20 6f 70 65 6e 20 69  d, try to open i
26330 74 20 66 69 72 73 74 20 2a 2f 0a 20 20 20 20 7a  t first */.    z
26340 4e 65 77 46 69 6c 65 6e 61 6d 65 20 3d 20 6e 41  NewFilename = nA
26350 72 67 3e 69 4e 61 6d 65 20 3f 20 73 71 6c 69 74  rg>iName ? sqlit
26360 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c  e3_mprintf("%s",
26370 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 29 20 3a   azArg[iName]) :
26380 20 30 3b 0a 20 20 20 20 69 66 28 20 7a 4e 65 77   0;.    if( zNew
26390 46 69 6c 65 6e 61 6d 65 20 29 7b 0a 20 20 20 20  Filename ){.    
263a0 20 20 69 66 28 20 6e 65 77 46 6c 61 67 20 29 20    if( newFlag ) 
263b0 73 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c 65 28  shellDeleteFile(
263c0 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20  zNewFilename);. 
263d0 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e       p->zDbFilen
263e0 61 6d 65 20 3d 20 7a 4e 65 77 46 69 6c 65 6e 61  ame = zNewFilena
263f0 6d 65 3b 0a 20 20 20 20 20 20 6f 70 65 6e 5f 64  me;.      open_d
26400 62 28 70 2c 20 31 29 3b 0a 20 20 20 20 20 20 69  b(p, 1);.      i
26410 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b 0a 20  f( p->db==0 ){. 
26420 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
26430 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
26440 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27  r: cannot open '
26450 25 73 27 5c 6e 22 2c 20 7a 4e 65 77 46 69 6c 65  %s'\n", zNewFile
26460 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 73  name);.        s
26470 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4e 65 77  qlite3_free(zNew
26480 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 20  Filename);.     
26490 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
264a0 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 20  p->zFreeOnClose 
264b0 3d 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 3b 0a  = zNewFilename;.
264c0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
264d0 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29    if( p->db==0 )
264e0 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 20 61 20  {.      /* As a 
264f0 66 61 6c 6c 2d 62 61 63 6b 20 6f 70 65 6e 20 61  fall-back open a
26500 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 20 2a   TEMP database *
26510 2f 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69  /.      p->zDbFi
26520 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20  lename = 0;.    
26530 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
26540 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
26550 20 20 69 66 28 20 63 3d 3d 27 6f 27 0a 20 20 20    if( c=='o'.   
26560 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a 41 72  && (strncmp(azAr
26570 67 5b 30 5d 2c 20 22 6f 75 74 70 75 74 22 2c 20  g[0], "output", 
26580 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d 70  n)==0 || strncmp
26590 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 6e 63 65  (azArg[0], "once
265a0 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a 20  ", n)==0).  ){. 
265b0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
265c0 46 69 6c 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f  File = nArg>=2 ?
265d0 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 73 74 64   azArg[1] : "std
265e0 6f 75 74 22 3b 0a 20 20 20 20 69 66 28 20 6e 41  out";.    if( nA
265f0 72 67 3e 32 20 29 7b 0a 20 20 20 20 20 20 75 74  rg>2 ){.      ut
26600 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
26610 2c 20 22 55 73 61 67 65 3a 20 2e 25 73 20 46 49  , "Usage: .%s FI
26620 4c 45 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29  LE\n", azArg[0])
26630 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
26640 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
26650 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
26660 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 3e 31 20    }.    if( n>1 
26670 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
26680 5b 30 5d 2c 20 22 6f 6e 63 65 22 2c 20 6e 29 3d  [0], "once", n)=
26690 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
266a0 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20  nArg<2 ){.      
266b0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
266c0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6f 6e  err, "Usage: .on
266d0 63 65 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20  ce FILE\n");.   
266e0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
266f0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
26700 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
26710 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e 6f 75     }.      p->ou
26720 74 43 6f 75 6e 74 20 3d 20 32 3b 0a 20 20 20 20  tCount = 2;.    
26730 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e  }else{.      p->
26740 6f 75 74 43 6f 75 6e 74 20 3d 20 30 3b 0a 20 20  outCount = 0;.  
26750 20 20 7d 0a 20 20 20 20 6f 75 74 70 75 74 5f 72    }.    output_r
26760 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69 66 28  eset(p);.    if(
26770 20 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29   zFile[0]=='|' )
26780 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
26790 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20 20 20 20  OMIT_POPEN.     
267a0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
267b0 72 72 2c 20 22 45 72 72 6f 72 3a 20 70 69 70 65  rr, "Error: pipe
267c0 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72  s are not suppor
267d0 74 65 64 20 69 6e 20 74 68 69 73 20 4f 53 5c 6e  ted in this OS\n
267e0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
267f0 3b 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d  ;.      p->out =
26800 20 73 74 64 6f 75 74 3b 0a 23 65 6c 73 65 0a 20   stdout;.#else. 
26810 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 70 6f       p->out = po
26820 70 65 6e 28 7a 46 69 6c 65 20 2b 20 31 2c 20 22  pen(zFile + 1, "
26830 77 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  w");.      if( p
26840 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ->out==0 ){.    
26850 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
26860 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 63  stderr,"Error: c
26870 61 6e 6e 6f 74 20 6f 70 65 6e 20 70 69 70 65 20  annot open pipe 
26880 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65  \"%s\"\n", zFile
26890 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20 20 70   + 1);.        p
268a0 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a  ->out = stdout;.
268b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
268c0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
268d0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
268e0 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
268f0 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f 75 74  outfile), p->out
26900 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46 69 6c  file, "%s", zFil
26910 65 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64  e);.      }.#end
26920 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  if.    }else{.  
26930 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 6f 75 74      p->out = out
26940 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46  put_file_open(zF
26950 69 6c 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ile);.      if( 
26960 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20  p->out==0 ){.   
26970 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
26980 7a 46 69 6c 65 2c 22 6f 66 66 22 29 21 3d 30 20  zFile,"off")!=0 
26990 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
269a0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
269b0 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 77  "Error: cannot w
269c0 72 69 74 65 20 74 6f 20 5c 22 25 73 5c 22 5c 6e  rite to \"%s\"\n
269d0 22 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20  ", zFile);.     
269e0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 2d 3e     }.        p->
269f0 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20  out = stdout;.  
26a00 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
26a10 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
26a20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
26a30 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
26a40 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f 75 74  outfile), p->out
26a50 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46 69 6c  file, "%s", zFil
26a60 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
26a70 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
26a80 20 63 3d 3d 27 70 27 20 26 26 20 6e 3e 3d 33 20   c=='p' && n>=3 
26a90 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
26aa0 5b 30 5d 2c 20 22 70 72 69 6e 74 22 2c 20 6e 29  [0], "print", n)
26ab0 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  ==0 ){.    int i
26ac0 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69  ;.    for(i=1; i
26ad0 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
26ae0 20 20 20 69 66 28 20 69 3e 31 20 29 20 72 61 77     if( i>1 ) raw
26af0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
26b00 22 20 22 29 3b 0a 20 20 20 20 20 20 75 74 66 38  " ");.      utf8
26b10 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
26b20 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  "%s", azArg[i]);
26b30 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70  .    }.    raw_p
26b40 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c  rintf(p->out, "\
26b50 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  n");.  }else..  
26b60 69 66 28 20 63 3d 3d 27 70 27 20 26 26 20 73 74  if( c=='p' && st
26b70 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
26b80 22 70 72 6f 6d 70 74 22 2c 20 6e 29 3d 3d 30 20  "prompt", n)==0 
26b90 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 20  ){.    if( nArg 
26ba0 3e 3d 20 32 29 20 7b 0a 20 20 20 20 20 20 73 74  >= 2) {.      st
26bb0 72 6e 63 70 79 28 6d 61 69 6e 50 72 6f 6d 70 74  rncpy(mainPrompt
26bc0 2c 61 7a 41 72 67 5b 31 5d 2c 28 69 6e 74 29 41  ,azArg[1],(int)A
26bd0 72 72 61 79 53 69 7a 65 28 6d 61 69 6e 50 72 6f  rraySize(mainPro
26be0 6d 70 74 29 2d 31 29 3b 0a 20 20 20 20 7d 0a 20  mpt)-1);.    }. 
26bf0 20 20 20 69 66 28 20 6e 41 72 67 20 3e 3d 20 33     if( nArg >= 3
26c00 29 20 7b 0a 20 20 20 20 20 20 73 74 72 6e 63 70  ) {.      strncp
26c10 79 28 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74  y(continuePrompt
26c20 2c 61 7a 41 72 67 5b 32 5d 2c 28 69 6e 74 29 41  ,azArg[2],(int)A
26c30 72 72 61 79 53 69 7a 65 28 63 6f 6e 74 69 6e 75  rraySize(continu
26c40 65 50 72 6f 6d 70 74 29 2d 31 29 3b 0a 20 20 20  ePrompt)-1);.   
26c50 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
26c60 28 20 63 3d 3d 27 71 27 20 26 26 20 73 74 72 6e  ( c=='q' && strn
26c70 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 71  cmp(azArg[0], "q
26c80 75 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  uit", n)==0 ){. 
26c90 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d 65 6c     rc = 2;.  }el
26ca0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 72 27  se..  if( c=='r'
26cb0 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
26cc0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 72  cmp(azArg[0], "r
26cd0 65 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ead", n)==0 ){. 
26ce0 20 20 20 46 49 4c 45 20 2a 61 6c 74 3b 0a 20 20     FILE *alt;.  
26cf0 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29 7b    if( nArg!=2 ){
26d00 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
26d10 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
26d20 3a 20 2e 72 65 61 64 20 46 49 4c 45 5c 6e 22 29  : .read FILE\n")
26d30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
26d40 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
26d50 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
26d60 20 20 7d 0a 20 20 20 20 61 6c 74 20 3d 20 66 6f    }.    alt = fo
26d70 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20 22 72  pen(azArg[1], "r
26d80 62 22 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 74  b");.    if( alt
26d90 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66  ==0 ){.      utf
26da0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
26db0 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f  "Error: cannot o
26dc0 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61  pen \"%s\"\n", a
26dd0 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
26de0 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  rc = 1;.    }els
26df0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 72  e{.      rc = pr
26e00 6f 63 65 73 73 5f 69 6e 70 75 74 28 70 2c 20 61  ocess_input(p, a
26e10 6c 74 29 3b 0a 20 20 20 20 20 20 66 63 6c 6f 73  lt);.      fclos
26e20 65 28 61 6c 74 29 3b 0a 20 20 20 20 7d 0a 20 20  e(alt);.    }.  
26e30 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
26e40 27 72 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73  'r' && n>=3 && s
26e50 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
26e60 20 22 72 65 73 74 6f 72 65 22 2c 20 6e 29 3d 3d   "restore", n)==
26e70 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
26e80 68 61 72 20 2a 7a 53 72 63 46 69 6c 65 3b 0a 20  har *zSrcFile;. 
26e90 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
26ea0 44 62 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  Db;.    sqlite3 
26eb0 2a 70 53 72 63 3b 0a 20 20 20 20 73 71 6c 69 74  *pSrc;.    sqlit
26ec0 65 33 5f 62 61 63 6b 75 70 20 2a 70 42 61 63 6b  e3_backup *pBack
26ed0 75 70 3b 0a 20 20 20 20 69 6e 74 20 6e 54 69 6d  up;.    int nTim
26ee0 65 6f 75 74 20 3d 20 30 3b 0a 0a 20 20 20 20 69  eout = 0;..    i
26ef0 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20  f( nArg==2 ){.  
26f00 20 20 20 20 7a 53 72 63 46 69 6c 65 20 3d 20 61      zSrcFile = a
26f10 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20 7a  zArg[1];.      z
26f20 44 62 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 20  Db = "main";.   
26f30 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d   }else if( nArg=
26f40 3d 33 20 29 7b 0a 20 20 20 20 20 20 7a 53 72 63  =3 ){.      zSrc
26f50 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 32 5d 3b  File = azArg[2];
26f60 0a 20 20 20 20 20 20 7a 44 62 20 3d 20 61 7a 41  .      zDb = azA
26f70 72 67 5b 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65  rg[1];.    }else
26f80 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
26f90 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
26fa0 65 3a 20 2e 72 65 73 74 6f 72 65 20 3f 44 42 3f  e: .restore ?DB?
26fb0 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20   FILE\n");.     
26fc0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
26fd0 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
26fe0 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
26ff0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
27000 65 6e 28 7a 53 72 63 46 69 6c 65 2c 20 26 70 53  en(zSrcFile, &pS
27010 72 63 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  rc);.    if( rc!
27020 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
27030 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
27040 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
27050 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73  cannot open \"%s
27060 5c 22 5c 6e 22 2c 20 7a 53 72 63 46 69 6c 65 29  \"\n", zSrcFile)
27070 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
27080 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20 20 20  close(pSrc);.   
27090 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
270a0 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70   }.    open_db(p
270b0 2c 20 30 29 3b 0a 20 20 20 20 70 42 61 63 6b 75  , 0);.    pBacku
270c0 70 20 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b  p = sqlite3_back
270d0 75 70 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 7a  up_init(p->db, z
270e0 44 62 2c 20 70 53 72 63 2c 20 22 6d 61 69 6e 22  Db, pSrc, "main"
270f0 29 3b 0a 20 20 20 20 69 66 28 20 70 42 61 63 6b  );.    if( pBack
27100 75 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  up==0 ){.      u
27110 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
27120 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22  r, "Error: %s\n"
27130 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
27140 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20  (p->db));.      
27150 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 53  sqlite3_close(pS
27160 72 63 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  rc);.      retur
27170 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  n 1;.    }.    w
27180 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69  hile( (rc = sqli
27190 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28  te3_backup_step(
271a0 70 42 61 63 6b 75 70 2c 31 30 30 29 29 3d 3d 53  pBackup,100))==S
271b0 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 20  QLITE_OK.       
271c0 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45     || rc==SQLITE
271d0 5f 42 55 53 59 20 20 29 7b 0a 20 20 20 20 20 20  _BUSY  ){.      
271e0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
271f0 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 69  USY ){.        i
27200 66 28 20 6e 54 69 6d 65 6f 75 74 2b 2b 20 3e 3d  f( nTimeout++ >=
27210 20 33 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20   3 ) break;.    
27220 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6c 65 65      sqlite3_slee
27230 70 28 31 30 30 29 3b 0a 20 20 20 20 20 20 7d 0a  p(100);.      }.
27240 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
27250 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28  3_backup_finish(
27260 70 42 61 63 6b 75 70 29 3b 0a 20 20 20 20 69 66  pBackup);.    if
27270 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
27280 45 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  E ){.      rc = 
27290 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
272a0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
272b0 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4c   || rc==SQLITE_L
272c0 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 72  OCKED ){.      r
272d0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
272e0 2c 20 22 45 72 72 6f 72 3a 20 73 6f 75 72 63 65  , "Error: source
272f0 20 64 61 74 61 62 61 73 65 20 69 73 20 62 75 73   database is bus
27300 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  y\n");.      rc 
27310 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 1;.    }else{.
27320 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
27330 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
27340 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33  : %s\n", sqlite3
27350 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b  _errmsg(p->db));
27360 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
27370 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
27380 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20 20  _close(pSrc);.  
27390 7d 65 6c 73 65 0a 0a 0a 20 20 69 66 28 20 63 3d  }else...  if( c=
273a0 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='s' && strncmp(
273b0 61 7a 41 72 67 5b 30 5d 2c 20 22 73 63 61 6e 73  azArg[0], "scans
273c0 74 61 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  tats", n)==0 ){.
273d0 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
273e0 29 7b 0a 20 20 20 20 20 20 70 2d 3e 73 63 61 6e  ){.      p->scan
273f0 73 74 61 74 73 4f 6e 20 3d 20 62 6f 6f 6c 65 61  statsOn = boolea
27400 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
27410 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
27420 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
27430 4e 53 54 41 54 55 53 0a 20 20 20 20 20 20 72 61  NSTATUS.      ra
27440 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
27450 20 22 57 61 72 6e 69 6e 67 3a 20 2e 73 63 61 6e   "Warning: .scan
27460 73 74 61 74 73 20 6e 6f 74 20 61 76 61 69 6c 61  stats not availa
27470 62 6c 65 20 69 6e 20 74 68 69 73 20 62 75 69 6c  ble in this buil
27480 64 2e 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a 20  d.\n");.#endif. 
27490 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
274a0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
274b0 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 63 61 6e  r, "Usage: .scan
274c0 73 74 61 74 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29  stats on|off\n")
274d0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
274e0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
274f0 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73   if( c=='s' && s
27500 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
27510 20 22 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d 30   "schema", n)==0
27520 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 54 65 78   ){.    ShellTex
27530 74 20 73 53 65 6c 65 63 74 3b 0a 20 20 20 20 53  t sSelect;.    S
27540 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61 3b 0a  hellState data;.
27550 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73      char *zErrMs
27560 67 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74  g = 0;.    const
27570 20 63 68 61 72 20 2a 7a 44 69 76 20 3d 20 30 3b   char *zDiv = 0;
27580 0a 20 20 20 20 69 6e 74 20 69 53 63 68 65 6d 61  .    int iSchema
27590 20 3d 20 30 3b 0a 0a 20 20 20 20 6f 70 65 6e 5f   = 0;..    open_
275a0 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6d 65  db(p, 0);.    me
275b0 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c 20 73  mcpy(&data, p, s
275c0 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a 20 20  izeof(data));.  
275d0 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65    data.showHeade
275e0 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74 61 2e  r = 0;.    data.
275f0 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64  cMode = data.mod
27600 65 20 3d 20 4d 4f 44 45 5f 53 65 6d 69 3b 0a 20  e = MODE_Semi;. 
27610 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 53 65     initText(&sSe
27620 6c 65 63 74 29 3b 0a 20 20 20 20 69 66 28 20 6e  lect);.    if( n
27630 41 72 67 3e 3d 32 20 26 26 20 6f 70 74 69 6f 6e  Arg>=2 && option
27640 4d 61 74 63 68 28 61 7a 41 72 67 5b 31 5d 2c 20  Match(azArg[1], 
27650 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20 20 20  "indent") ){.   
27660 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20     data.cMode = 
27670 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45  data.mode = MODE
27680 5f 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20 6e  _Pretty;.      n
27690 41 72 67 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  Arg--;.      if(
276a0 20 6e 41 72 67 3d 3d 32 20 29 20 61 7a 41 72 67   nArg==2 ) azArg
276b0 5b 31 5d 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a  [1] = azArg[2];.
276c0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41      }.    if( nA
276d0 72 67 3d 3d 32 20 26 26 20 61 7a 41 72 67 5b 31  rg==2 && azArg[1
276e0 5d 5b 30 5d 21 3d 27 2d 27 20 29 7b 0a 20 20 20  ][0]!='-' ){.   
276f0 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20     int i;.      
27700 66 6f 72 28 69 3d 30 3b 20 61 7a 41 72 67 5b 31  for(i=0; azArg[1
27710 5d 5b 69 5d 3b 20 69 2b 2b 29 20 61 7a 41 72 67  ][i]; i++) azArg
27720 5b 31 5d 5b 69 5d 20 3d 20 54 6f 4c 6f 77 65 72  [1][i] = ToLower
27730 28 61 7a 41 72 67 5b 31 5d 5b 69 5d 29 3b 0a 20  (azArg[1][i]);. 
27740 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
27750 61 7a 41 72 67 5b 31 5d 2c 22 73 71 6c 69 74 65  azArg[1],"sqlite
27760 5f 6d 61 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a  _master")==0 ){.
27770 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 6e 65          char *ne
27780 77 5f 61 72 67 76 5b 32 5d 2c 20 2a 6e 65 77 5f  w_argv[2], *new_
27790 63 6f 6c 76 5b 32 5d 3b 0a 20 20 20 20 20 20 20  colv[2];.       
277a0 20 6e 65 77 5f 61 72 67 76 5b 30 5d 20 3d 20 22   new_argv[0] = "
277b0 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
277c0 69 74 65 5f 6d 61 73 74 65 72 20 28 5c 6e 22 0a  ite_master (\n".
277d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277e0 20 20 20 20 20 20 22 20 20 74 79 70 65 20 74 65        "  type te
277f0 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  xt,\n".         
27800 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
27810 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
27820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27830 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20      "  tbl_name 
27840 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20  text,\n".       
27850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27860 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67    rootpage integ
27870 65 72 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  er,\n".         
27880 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
27890 73 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20  sql text\n".    
278a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278b0 20 20 22 29 22 3b 0a 20 20 20 20 20 20 20 20 6e    ")";.        n
278c0 65 77 5f 61 72 67 76 5b 31 5d 20 3d 20 30 3b 0a  ew_argv[1] = 0;.
278d0 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76          new_colv
278e0 5b 30 5d 20 3d 20 22 73 71 6c 22 3b 0a 20 20 20  [0] = "sql";.   
278f0 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76 5b 31 5d       new_colv[1]
27900 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 63 61   = 0;.        ca
27910 6c 6c 62 61 63 6b 28 26 64 61 74 61 2c 20 31 2c  llback(&data, 1,
27920 20 6e 65 77 5f 61 72 67 76 2c 20 6e 65 77 5f 63   new_argv, new_c
27930 6f 6c 76 29 3b 0a 20 20 20 20 20 20 20 20 72 63  olv);.        rc
27940 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
27950 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
27960 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 73  rcmp(azArg[1],"s
27970 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
27980 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  r")==0 ){.      
27990 20 20 63 68 61 72 20 2a 6e 65 77 5f 61 72 67 76    char *new_argv
279a0 5b 32 5d 2c 20 2a 6e 65 77 5f 63 6f 6c 76 5b 32  [2], *new_colv[2
279b0 5d 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 61  ];.        new_a
279c0 72 67 76 5b 30 5d 20 3d 20 22 43 52 45 41 54 45  rgv[0] = "CREATE
279d0 20 54 45 4d 50 20 54 41 42 4c 45 20 73 71 6c 69   TEMP TABLE sqli
279e0 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 28  te_temp_master (
279f0 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n".            
27a00 20 20 20 20 20 20 20 20 20 20 22 20 20 74 79 70            "  typ
27a10 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20  e text,\n".     
27a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a30 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e   "  name text,\n
27a40 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
27a50 20 20 20 20 20 20 20 20 22 20 20 74 62 6c 5f 6e          "  tbl_n
27a60 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ame text,\n".   
27a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a80 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65 20 69     "  rootpage i
27a90 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20 20  nteger,\n".     
27aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ab0 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a   "  sql text\n".
27ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ad0 20 20 20 20 20 20 22 29 22 3b 0a 20 20 20 20 20        ")";.     
27ae0 20 20 20 6e 65 77 5f 61 72 67 76 5b 31 5d 20 3d     new_argv[1] =
27af0 20 30 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f   0;.        new_
27b00 63 6f 6c 76 5b 30 5d 20 3d 20 22 73 71 6c 22 3b  colv[0] = "sql";
27b10 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c  .        new_col
27b20 76 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  v[1] = 0;.      
27b30 20 20 63 61 6c 6c 62 61 63 6b 28 26 64 61 74 61    callback(&data
27b40 2c 20 31 2c 20 6e 65 77 5f 61 72 67 76 2c 20 6e  , 1, new_argv, n
27b50 65 77 5f 63 6f 6c 76 29 3b 0a 20 20 20 20 20 20  ew_colv);.      
27b60 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
27b70 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
27b80 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20 22 28         zDiv = "(
27b90 22 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ";.      }.    }
27ba0 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 31  else if( nArg==1
27bb0 20 29 7b 0a 20 20 20 20 20 20 7a 44 69 76 20 3d   ){.      zDiv =
27bc0 20 22 28 22 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   "(";.    }else{
27bd0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
27be0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
27bf0 3a 20 2e 73 63 68 65 6d 61 20 3f 2d 2d 69 6e 64  : .schema ?--ind
27c00 65 6e 74 3f 20 3f 4c 49 4b 45 2d 50 41 54 54 45  ent? ?LIKE-PATTE
27c10 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  RN?\n");.      r
27c20 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74  c = 1;.      got
27c30 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
27c40 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  xit;.    }.    i
27c50 66 28 20 7a 44 69 76 20 29 7b 0a 20 20 20 20 20  f( zDiv ){.     
27c60 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
27c70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  Stmt = 0;.      
27c80 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
27c90 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 22  pare_v2(p->db, "
27ca0 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
27cb0 20 70 72 61 67 6d 61 5f 64 61 74 61 62 61 73 65   pragma_database
27cc0 5f 6c 69 73 74 22 2c 0a 20 20 20 20 20 20 20 20  _list",.        
27cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ce0 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74 6d 74        -1, &pStmt
27cf0 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
27d00 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74  rc ){.        ut
27d10 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
27d20 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  , "Error: %s\n",
27d30 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
27d40 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20  p->db));.       
27d50 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
27d60 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20  e(pStmt);.      
27d70 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
27d80 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
27d90 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20  and_exit;.      
27da0 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
27db0 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53 45  xt(&sSelect, "SE
27dc0 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 22 2c 20  LECT sql FROM", 
27dd0 30 29 3b 0a 20 20 20 20 20 20 69 53 63 68 65 6d  0);.      iSchem
27de0 61 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69  a = 0;.      whi
27df0 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70  le( sqlite3_step
27e00 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
27e10 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20 20 63  ROW ){.        c
27e20 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
27e30 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
27e40 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
27e50 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20  t(pStmt, 0);.   
27e60 20 20 20 20 20 63 68 61 72 20 7a 53 63 4e 75 6d       char zScNum
27e70 5b 33 30 5d 3b 0a 20 20 20 20 20 20 20 20 73 71  [30];.        sq
27e80 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
27e90 69 7a 65 6f 66 28 7a 53 63 4e 75 6d 29 2c 20 7a  izeof(zScNum), z
27ea0 53 63 4e 75 6d 2c 20 22 25 64 22 2c 20 2b 2b 69  ScNum, "%d", ++i
27eb0 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 20  Schema);.       
27ec0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
27ed0 6c 65 63 74 2c 20 7a 44 69 76 2c 20 30 29 3b 0a  lect, zDiv, 0);.
27ee0 20 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20 22          zDiv = "
27ef0 20 55 4e 49 4f 4e 20 41 4c 4c 20 22 3b 0a 20 20   UNION ALL ";.  
27f00 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70        if( strcmp
27f10 28 7a 44 62 2c 20 22 6d 61 69 6e 22 29 21 3d 30  (zDb, "main")!=0
27f20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
27f30 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
27f40 74 2c 20 22 53 45 4c 45 43 54 20 73 68 65 6c 6c  t, "SELECT shell
27f50 5f 61 64 64 5f 73 63 68 65 6d 61 28 73 71 6c 2c  _add_schema(sql,
27f60 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  ", 0);.         
27f70 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
27f80 6c 65 63 74 2c 20 7a 44 62 2c 20 27 22 27 29 3b  lect, zDb, '"');
27f90 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e  .          appen
27fa0 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
27fb0 22 29 20 41 53 20 73 71 6c 2c 20 74 79 70 65 2c  ") AS sql, type,
27fc0 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c   tbl_name, name,
27fd0 20 72 6f 77 69 64 2c 22 2c 20 30 29 3b 0a 20 20   rowid,", 0);.  
27fe0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
27ff0 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 53 63  xt(&sSelect, zSc
28000 4e 75 6d 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Num, 0);.       
28010 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
28020 53 65 6c 65 63 74 2c 20 22 20 41 53 20 73 6e 75  Select, " AS snu
28030 6d 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  m, ", 0);.      
28040 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
28050 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20 27 5c  sSelect, zDb, '\
28060 27 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  '');.          a
28070 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
28080 63 74 2c 20 22 20 41 53 20 73 6e 61 6d 65 20 46  ct, " AS sname F
28090 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  ROM ", 0);.     
280a0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
280b0 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20 27  &sSelect, zDb, '
280c0 22 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  "');.          a
280d0 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
280e0 63 74 2c 20 22 2e 73 71 6c 69 74 65 5f 6d 61 73  ct, ".sqlite_mas
280f0 74 65 72 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  ter", 0);.      
28100 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
28110 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
28120 53 65 6c 65 63 74 2c 20 22 53 45 4c 45 43 54 20  Select, "SELECT 
28130 73 71 6c 2c 20 74 79 70 65 2c 20 74 62 6c 5f 6e  sql, type, tbl_n
28140 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f 77 69 64  ame, name, rowid
28150 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , ", 0);.       
28160 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
28170 53 65 6c 65 63 74 2c 20 7a 53 63 4e 75 6d 2c 20  Select, zScNum, 
28180 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 70  0);.          ap
28190 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
281a0 74 2c 20 22 20 41 53 20 73 6e 75 6d 2c 20 27 6d  t, " AS snum, 'm
281b0 61 69 6e 27 20 41 53 20 73 6e 61 6d 65 20 46 52  ain' AS sname FR
281c0 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
281d0 22 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ",0);.        }.
281e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
281f0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
28200 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 61 70 70  Stmt);.      app
28210 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
28220 2c 20 22 29 20 57 48 45 52 45 20 22 2c 20 30 29  , ") WHERE ", 0)
28230 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72 67  ;.      if( nArg
28240 3e 31 20 29 7b 0a 20 20 20 20 20 20 20 20 63 68  >1 ){.        ch
28250 61 72 20 2a 7a 51 61 72 67 20 3d 20 73 71 6c 69  ar *zQarg = sqli
28260 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 51 22  te3_mprintf("%Q"
28270 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
28280 20 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28       if( strchr(
28290 61 7a 41 72 67 5b 31 5d 2c 20 27 2e 27 29 20 29  azArg[1], '.') )
282a0 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65  {.          appe
282b0 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
282c0 20 22 6c 6f 77 65 72 28 70 72 69 6e 74 66 28 27   "lower(printf('
282d0 25 73 2e 25 73 27 2c 73 6e 61 6d 65 2c 74 62 6c  %s.%s',sname,tbl
282e0 5f 6e 61 6d 65 29 29 22 2c 20 30 29 3b 0a 20 20  _name))", 0);.  
282f0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
28300 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
28310 74 28 26 73 53 65 6c 65 63 74 2c 20 22 6c 6f 77  t(&sSelect, "low
28320 65 72 28 74 62 6c 5f 6e 61 6d 65 29 22 2c 20 30  er(tbl_name)", 0
28330 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
28340 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
28350 26 73 53 65 6c 65 63 74 2c 20 73 74 72 63 68 72  &sSelect, strchr
28360 28 61 7a 41 72 67 5b 31 5d 2c 20 27 2a 27 29 20  (azArg[1], '*') 
28370 3f 20 22 20 47 4c 4f 42 20 22 20 3a 20 22 20 4c  ? " GLOB " : " L
28380 49 4b 45 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  IKE ", 0);.     
28390 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
283a0 53 65 6c 65 63 74 2c 20 7a 51 61 72 67 2c 20 30  Select, zQarg, 0
283b0 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
283c0 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
283d0 22 20 41 4e 44 20 22 2c 20 30 29 3b 0a 20 20 20  " AND ", 0);.   
283e0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
283f0 65 28 7a 51 61 72 67 29 3b 0a 20 20 20 20 20 20  e(zQarg);.      
28400 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
28410 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 74 79  xt(&sSelect, "ty
28420 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20 73  pe!='meta' AND s
28430 71 6c 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 22 0a  ql IS NOT NULL".
28440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28450 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44             " ORD
28460 45 52 20 42 59 20 73 6e 75 6d 2c 20 72 6f 77 69  ER BY snum, rowi
28470 64 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 72 63  d", 0);.      rc
28480 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
28490 70 2d 3e 64 62 2c 20 73 53 65 6c 65 63 74 2e 7a  p->db, sSelect.z
284a0 2c 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  , callback, &dat
284b0 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  a, &zErrMsg);.  
284c0 20 20 20 20 66 72 65 65 54 65 78 74 28 26 73 53      freeText(&sS
284d0 65 6c 65 63 74 29 3b 0a 20 20 20 20 7d 0a 20 20  elect);.    }.  
284e0 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b    if( zErrMsg ){
284f0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
28500 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
28510 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  : %s\n", zErrMsg
28520 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
28530 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  _free(zErrMsg);.
28540 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
28550 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 20 21    }else if( rc !
28560 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  = SQLITE_OK ){. 
28570 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
28580 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 71  stderr,"Error: q
28590 75 65 72 79 69 6e 67 20 73 63 68 65 6d 61 20 69  uerying schema i
285a0 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29 3b 0a  nformation\n");.
285b0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
285c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
285d0 63 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  c = 0;.    }.  }
285e0 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e 65  else..#if define
285f0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
28600 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
28610 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54  E_ENABLE_SELECTT
28620 52 41 43 45 29 0a 20 20 69 66 28 20 63 3d 3d 27  RACE).  if( c=='
28630 73 27 20 26 26 20 6e 3d 3d 31 31 20 26 26 20 73  s' && n==11 && s
28640 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
28650 20 22 73 65 6c 65 63 74 74 72 61 63 65 22 2c 20   "selecttrace", 
28660 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  n)==0 ){.    sql
28670 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65 20  ite3SelectTrace 
28680 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61  = (int)integerVa
28690 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  lue(azArg[1]);. 
286a0 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23   }else.#endif..#
286b0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
286c0 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e  E_ENABLE_SESSION
286d0 29 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26  ).  if( c=='s' &
286e0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
286f0 30 5d 2c 22 73 65 73 73 69 6f 6e 22 2c 6e 29 3d  0],"session",n)=
28700 3d 30 20 26 26 20 6e 3e 3d 33 20 29 7b 0a 20 20  =0 && n>=3 ){.  
28710 20 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70    OpenSession *p
28720 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61 53  Session = &p->aS
28730 65 73 73 69 6f 6e 5b 30 5d 3b 0a 20 20 20 20 63  ession[0];.    c
28740 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20 26 61  har **azCmd = &a
28750 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 69 6e 74  zArg[1];.    int
28760 20 69 53 65 73 20 3d 20 30 3b 0a 20 20 20 20 69   iSes = 0;.    i
28770 6e 74 20 6e 43 6d 64 20 3d 20 6e 41 72 67 20 2d  nt nCmd = nArg -
28780 20 31 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   1;.    int i;. 
28790 20 20 20 69 66 28 20 6e 41 72 67 3c 3d 31 20 29     if( nArg<=1 )
287a0 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79   goto session_sy
287b0 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20  ntax_error;.    
287c0 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
287d0 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 33 20 29     if( nArg>=3 )
287e0 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 53 65 73  {.      for(iSes
287f0 3d 30 3b 20 69 53 65 73 3c 70 2d 3e 6e 53 65 73  =0; iSes<p->nSes
28800 73 69 6f 6e 3b 20 69 53 65 73 2b 2b 29 7b 0a 20  sion; iSes++){. 
28810 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
28820 70 28 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 53  p(p->aSession[iS
28830 65 73 5d 2e 7a 4e 61 6d 65 2c 20 61 7a 41 72 67  es].zName, azArg
28840 5b 31 5d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  [1])==0 ) break;
28850 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
28860 66 28 20 69 53 65 73 3c 70 2d 3e 6e 53 65 73 73  f( iSes<p->nSess
28870 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ion ){.        p
28880 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61 53  Session = &p->aS
28890 65 73 73 69 6f 6e 5b 69 53 65 73 5d 3b 0a 20 20  ession[iSes];.  
288a0 20 20 20 20 20 20 61 7a 43 6d 64 2b 2b 3b 0a 20        azCmd++;. 
288b0 20 20 20 20 20 20 20 6e 43 6d 64 2d 2d 3b 0a 20         nCmd--;. 
288c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
288d0 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20 26      pSession = &
288e0 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a  p->aSession[0];.
288f0 20 20 20 20 20 20 20 20 69 53 65 73 20 3d 20 30          iSes = 0
28900 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
28910 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
28920 20 61 74 74 61 63 68 20 54 41 42 4c 45 0a 20 20   attach TABLE.  
28930 20 20 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    ** Invoke the 
28940 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61  sqlite3session_a
28950 74 74 61 63 68 28 29 20 69 6e 74 65 72 66 61 63  ttach() interfac
28960 65 20 74 6f 20 61 74 74 61 63 68 20 61 20 70 61  e to attach a pa
28970 72 74 69 63 75 6c 61 72 0a 20 20 20 20 2a 2a 20  rticular.    ** 
28980 74 61 62 6c 65 20 73 6f 20 74 68 61 74 20 69 74  table so that it
28990 20 69 73 20 6e 65 76 65 72 20 66 69 6c 74 65 72   is never filter
289a0 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ed..    */.    i
289b0 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
289c0 30 5d 2c 22 61 74 74 61 63 68 22 29 3d 3d 30 20  0],"attach")==0 
289d0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  ){.      if( nCm
289e0 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73  d!=2 ) goto sess
289f0 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
28a00 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53 65 73  ;.      if( pSes
28a10 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 7b 0a 20 20  sion->p==0 ){.  
28a20 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5f 6e 6f        session_no
28a30 74 5f 6f 70 65 6e 3a 0a 20 20 20 20 20 20 20 20  t_open:.        
28a40 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
28a50 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 20 73 65  r, "ERROR: No se
28a60 73 73 69 6f 6e 73 20 61 72 65 20 6f 70 65 6e 5c  ssions are open\
28a70 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  n");.      }else
28a80 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
28a90 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61 74  qlite3session_at
28aa0 74 61 63 68 28 70 53 65 73 73 69 6f 6e 2d 3e 70  tach(pSession->p
28ab0 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20  , azCmd[1]);.   
28ac0 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20       if( rc ){. 
28ad0 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
28ae0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 52 52  ntf(stderr, "ERR
28af0 4f 52 3a 20 73 71 6c 69 74 65 33 73 65 73 73 69  OR: sqlite3sessi
28b00 6f 6e 5f 61 74 74 61 63 68 28 29 20 72 65 74 75  on_attach() retu
28b10 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a  rns %d\n", rc);.
28b20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 30            rc = 0
28b30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
28b40 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20    }.    }else.. 
28b50 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 63     /* .session c
28b60 68 61 6e 67 65 73 65 74 20 46 49 4c 45 0a 20 20  hangeset FILE.  
28b70 20 20 2a 2a 20 2e 73 65 73 73 69 6f 6e 20 70 61    ** .session pa
28b80 74 63 68 73 65 74 20 46 49 4c 45 0a 20 20 20 20  tchset FILE.    
28b90 2a 2a 20 57 72 69 74 65 20 61 20 63 68 61 6e 67  ** Write a chang
28ba0 65 73 65 74 20 6f 72 20 70 61 74 63 68 73 65 74  eset or patchset
28bb0 20 69 6e 74 6f 20 61 20 66 69 6c 65 2e 20 20 54   into a file.  T
28bc0 68 65 20 66 69 6c 65 20 69 73 20 6f 76 65 72 77  he file is overw
28bd0 72 69 74 74 65 6e 2e 0a 20 20 20 20 2a 2f 0a 20  ritten..    */. 
28be0 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a     if( strcmp(az
28bf0 43 6d 64 5b 30 5d 2c 22 63 68 61 6e 67 65 73 65  Cmd[0],"changese
28c00 74 22 29 3d 3d 30 20 7c 7c 20 73 74 72 63 6d 70  t")==0 || strcmp
28c10 28 61 7a 43 6d 64 5b 30 5d 2c 22 70 61 74 63 68  (azCmd[0],"patch
28c20 73 65 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  set")==0 ){.    
28c30 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20 30 3b    FILE *out = 0;
28c40 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21  .      if( nCmd!
28c50 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f  =2 ) goto sessio
28c60 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a  n_syntax_error;.
28c70 20 20 20 20 20 20 69 66 28 20 70 53 65 73 73 69        if( pSessi
28c80 6f 6e 2d 3e 70 3d 3d 30 20 29 20 67 6f 74 6f 20  on->p==0 ) goto 
28c90 73 65 73 73 69 6f 6e 5f 6e 6f 74 5f 6f 70 65 6e  session_not_open
28ca0 3b 0a 20 20 20 20 20 20 6f 75 74 20 3d 20 66 6f  ;.      out = fo
28cb0 70 65 6e 28 61 7a 43 6d 64 5b 31 5d 2c 20 22 77  pen(azCmd[1], "w
28cc0 62 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  b");.      if( o
28cd0 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ut==0 ){.       
28ce0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
28cf0 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 63 61 6e  err, "ERROR: can
28d00 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22 20  not open \"%s\" 
28d10 66 6f 72 20 77 72 69 74 69 6e 67 5c 6e 22 2c 20  for writing\n", 
28d20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20 20 20  azCmd[1]);.     
28d30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
28d40 69 6e 74 20 73 7a 43 68 6e 67 3b 0a 20 20 20 20  int szChng;.    
28d50 20 20 20 20 76 6f 69 64 20 2a 70 43 68 6e 67 3b      void *pChng;
28d60 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 7a 43  .        if( azC
28d70 6d 64 5b 30 5d 5b 30 5d 3d 3d 27 63 27 20 29 7b  md[0][0]=='c' ){
28d80 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
28d90 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 63  sqlite3session_c
28da0 68 61 6e 67 65 73 65 74 28 70 53 65 73 73 69 6f  hangeset(pSessio
28db0 6e 2d 3e 70 2c 20 26 73 7a 43 68 6e 67 2c 20 26  n->p, &szChng, &
28dc0 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20 20  pChng);.        
28dd0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
28de0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73   rc = sqlite3ses
28df0 73 69 6f 6e 5f 70 61 74 63 68 73 65 74 28 70 53  sion_patchset(pS
28e00 65 73 73 69 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68  ession->p, &szCh
28e10 6e 67 2c 20 26 70 43 68 6e 67 29 3b 0a 20 20 20  ng, &pChng);.   
28e20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
28e30 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
28e40 20 20 20 70 72 69 6e 74 66 28 22 45 72 72 6f 72     printf("Error
28e50 3a 20 65 72 72 6f 72 20 63 6f 64 65 20 25 64 5c  : error code %d\
28e60 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20  n", rc);.       
28e70 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 20     rc = 0;.     
28e80 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
28e90 20 70 43 68 6e 67 0a 20 20 20 20 20 20 20 20 20   pChng.         
28ea0 20 26 26 20 66 77 72 69 74 65 28 70 43 68 6e 67   && fwrite(pChng
28eb0 2c 20 73 7a 43 68 6e 67 2c 20 31 2c 20 6f 75 74  , szChng, 1, out
28ec0 29 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=1 ){.        
28ed0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
28ee0 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 46 61 69  err, "ERROR: Fai
28ef0 6c 65 64 20 74 6f 20 77 72 69 74 65 20 65 6e 74  led to write ent
28f00 69 72 65 20 25 64 2d 62 79 74 65 20 6f 75 74 70  ire %d-byte outp
28f10 75 74 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  ut\n",.         
28f20 20 20 20 20 20 20 20 20 20 73 7a 43 68 6e 67 29           szChng)
28f30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
28f40 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
28f50 28 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20  (pChng);.       
28f60 20 66 63 6c 6f 73 65 28 6f 75 74 29 3b 0a 20 20   fclose(out);.  
28f70 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a      }.    }else.
28f80 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
28f90 20 63 6c 6f 73 65 0a 20 20 20 20 2a 2a 20 43 6c   close.    ** Cl
28fa0 6f 73 65 20 74 68 65 20 69 64 65 6e 74 69 66 69  ose the identifi
28fb0 65 64 20 73 65 73 73 69 6f 6e 0a 20 20 20 20 2a  ed session.    *
28fc0 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70  /.    if( strcmp
28fd0 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 63 6c 6f 73  (azCmd[0], "clos
28fe0 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
28ff0 69 66 28 20 6e 43 6d 64 21 3d 31 20 29 20 67 6f  if( nCmd!=1 ) go
29000 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61  to session_synta
29010 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69  x_error;.      i
29020 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 29  f( p->nSession )
29030 7b 0a 20 20 20 20 20 20 20 20 73 65 73 73 69 6f  {.        sessio
29040 6e 5f 63 6c 6f 73 65 28 70 53 65 73 73 69 6f 6e  n_close(pSession
29050 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 61 53  );.        p->aS
29060 65 73 73 69 6f 6e 5b 69 53 65 73 5d 20 3d 20 70  ession[iSes] = p
29070 2d 3e 61 53 65 73 73 69 6f 6e 5b 2d 2d 70 2d 3e  ->aSession[--p->
29080 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20 20  nSession];.     
29090 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20   }.    }else..  
290a0 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 65 6e    /* .session en
290b0 61 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f 0a 20  able ?BOOLEAN?. 
290c0 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20 73     ** Query or s
290d0 65 74 20 74 68 65 20 65 6e 61 62 6c 65 20 66 6c  et the enable fl
290e0 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  ag.    */.    if
290f0 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30  ( strcmp(azCmd[0
29100 5d 2c 20 22 65 6e 61 62 6c 65 22 29 3d 3d 30 20  ], "enable")==0 
29110 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b  ){.      int ii;
29120 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 3e  .      if( nCmd>
29130 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  2 ) goto session
29140 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
29150 20 20 20 20 20 69 69 20 3d 20 6e 43 6d 64 3d 3d       ii = nCmd==
29160 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c 65 61 6e  1 ? -1 : boolean
29170 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31 5d 29 3b  Value(azCmd[1]);
29180 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
29190 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
291a0 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65    ii = sqlite3se
291b0 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28 70 53 65  ssion_enable(pSe
291c0 73 73 69 6f 6e 2d 3e 70 2c 20 69 69 29 3b 0a 20  ssion->p, ii);. 
291d0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
291e0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65 73 73  tf(p->out, "sess
291f0 69 6f 6e 20 25 73 20 65 6e 61 62 6c 65 20 66 6c  ion %s enable fl
29200 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20 20 20 20  ag = %d\n",.    
29210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29220 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c  pSession->zName,
29230 20 69 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   ii);.      }.  
29240 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20    }else..    /* 
29250 2e 73 65 73 73 69 6f 6e 20 66 69 6c 74 65 72 20  .session filter 
29260 47 4c 4f 42 20 2e 2e 2e 2e 0a 20 20 20 20 2a 2a  GLOB .....    **
29270 20 53 65 74 20 61 20 6c 69 73 74 20 6f 66 20 47   Set a list of G
29280 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 6f 66 20  LOB patterns of 
29290 74 61 62 6c 65 20 6e 61 6d 65 73 20 74 6f 20 62  table names to b
292a0 65 20 65 78 63 6c 75 64 65 64 2e 0a 20 20 20 20  e excluded..    
292b0 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d  */.    if( strcm
292c0 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 66 69 6c  p(azCmd[0], "fil
292d0 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ter")==0 ){.    
292e0 20 20 69 6e 74 20 69 69 2c 20 6e 42 79 74 65 3b    int ii, nByte;
292f0 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 3c  .      if( nCmd<
29300 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  2 ) goto session
29310 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
29320 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73       if( p->nSes
29330 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  sion ){.        
29340 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 53 65  for(ii=0; ii<pSe
29350 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20  ssion->nFilter; 
29360 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
29370 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53   sqlite3_free(pS
29380 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72  ession->azFilter
29390 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d  [ii]);.        }
293a0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
293b0 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e  _free(pSession->
293c0 61 7a 46 69 6c 74 65 72 29 3b 0a 20 20 20 20 20  azFilter);.     
293d0 20 20 20 6e 42 79 74 65 20 3d 20 73 69 7a 65 6f     nByte = sizeo
293e0 66 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  f(pSession->azFi
293f0 6c 74 65 72 5b 30 5d 29 2a 28 6e 43 6d 64 2d 31  lter[0])*(nCmd-1
29400 29 3b 0a 20 20 20 20 20 20 20 20 70 53 65 73 73  );.        pSess
29410 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 20 3d 20  ion->azFilter = 
29420 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 20  sqlite3_malloc( 
29430 6e 42 79 74 65 20 29 3b 0a 20 20 20 20 20 20 20  nByte );.       
29440 20 69 66 28 20 70 53 65 73 73 69 6f 6e 2d 3e 61   if( pSession->a
29450 7a 46 69 6c 74 65 72 3d 3d 30 20 29 7b 0a 20 20  zFilter==0 ){.  
29460 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
29470 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
29480 72 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79  r: out or memory
29490 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
294a0 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20 20  exit(1);.       
294b0 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69   }.        for(i
294c0 69 3d 31 3b 20 69 69 3c 6e 43 6d 64 3b 20 69 69  i=1; ii<nCmd; ii
294d0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ++){.          p
294e0 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65  Session->azFilte
294f0 72 5b 69 69 2d 31 5d 20 3d 20 73 71 6c 69 74 65  r[ii-1] = sqlite
29500 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
29510 61 7a 43 6d 64 5b 69 69 5d 29 3b 0a 20 20 20 20  azCmd[ii]);.    
29520 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 53      }.        pS
29530 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 20  ession->nFilter 
29540 3d 20 69 69 2d 31 3b 0a 20 20 20 20 20 20 7d 0a  = ii-1;.      }.
29550 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f      }else..    /
29560 2a 20 2e 73 65 73 73 69 6f 6e 20 69 6e 64 69 72  * .session indir
29570 65 63 74 20 3f 42 4f 4f 4c 45 41 4e 3f 0a 20 20  ect ?BOOLEAN?.  
29580 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20 73 65    ** Query or se
29590 74 20 74 68 65 20 69 6e 64 69 72 65 63 74 20 66  t the indirect f
295a0 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  lag.    */.    i
295b0 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
295c0 30 5d 2c 20 22 69 6e 64 69 72 65 63 74 22 29 3d  0], "indirect")=
295d0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
295e0 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43  ii;.      if( nC
295f0 6d 64 3e 32 20 29 20 67 6f 74 6f 20 73 65 73 73  md>2 ) goto sess
29600 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
29610 3b 0a 20 20 20 20 20 20 69 69 20 3d 20 6e 43 6d  ;.      ii = nCm
29620 64 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c  d==1 ? -1 : bool
29630 65 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31  eanValue(azCmd[1
29640 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  ]);.      if( p-
29650 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20  >nSession ){.   
29660 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74 65       ii = sqlite
29670 33 73 65 73 73 69 6f 6e 5f 69 6e 64 69 72 65 63  3session_indirec
29680 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 69  t(pSession->p, i
29690 69 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  i);.        utf8
296a0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
296b0 22 73 65 73 73 69 6f 6e 20 25 73 20 69 6e 64 69  "session %s indi
296c0 72 65 63 74 20 66 6c 61 67 20 3d 20 25 64 5c 6e  rect flag = %d\n
296d0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
296e0 20 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 2d         pSession-
296f0 3e 7a 4e 61 6d 65 2c 20 69 69 29 3b 0a 20 20 20  >zName, ii);.   
29700 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a     }.    }else..
29710 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20      /* .session 
29720 69 73 65 6d 70 74 79 0a 20 20 20 20 2a 2a 20 44  isempty.    ** D
29730 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
29740 73 65 73 73 69 6f 6e 20 69 73 20 65 6d 70 74 79  session is empty
29750 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
29760 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c  strcmp(azCmd[0],
29770 20 22 69 73 65 6d 70 74 79 22 29 3d 3d 30 20 29   "isempty")==0 )
29780 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a  {.      int ii;.
29790 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21 3d        if( nCmd!=
297a0 31 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  1 ) goto session
297b0 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
297c0 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73       if( p->nSes
297d0 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  sion ){.        
297e0 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73  ii = sqlite3sess
297f0 69 6f 6e 5f 69 73 65 6d 70 74 79 28 70 53 65 73  ion_isempty(pSes
29800 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20 20 20  sion->p);.      
29810 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
29820 3e 6f 75 74 2c 20 22 73 65 73 73 69 6f 6e 20 25  >out, "session %
29830 73 20 69 73 65 6d 70 74 79 20 66 6c 61 67 20 3d  s isempty flag =
29840 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20   %d\n",.        
29850 20 20 20 20 20 20 20 20 20 20 20 20 70 53 65 73              pSes
29860 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29  sion->zName, ii)
29870 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
29880 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73  lse..    /* .ses
29890 73 69 6f 6e 20 6c 69 73 74 0a 20 20 20 20 2a 2a  sion list.    **
298a0 20 4c 69 73 74 20 61 6c 6c 20 63 75 72 72 65 6e   List all curren
298b0 74 6c 79 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e  tly open session
298c0 73 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  s.    */.    if(
298d0 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d   strcmp(azCmd[0]
298e0 2c 22 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20  ,"list")==0 ){. 
298f0 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
29900 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b  p->nSession; i++
29910 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
29920 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
29930 25 64 20 25 73 5c 6e 22 2c 20 69 2c 20 70 2d 3e  %d %s\n", i, p->
29940 61 53 65 73 73 69 6f 6e 5b 69 5d 2e 7a 4e 61 6d  aSession[i].zNam
29950 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
29960 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73  }else..    /* .s
29970 65 73 73 69 6f 6e 20 6f 70 65 6e 20 44 42 20 4e  ession open DB N
29980 41 4d 45 0a 20 20 20 20 2a 2a 20 4f 70 65 6e 20  AME.    ** Open 
29990 61 20 6e 65 77 20 73 65 73 73 69 6f 6e 20 63 61  a new session ca
299a0 6c 6c 65 64 20 4e 41 4d 45 20 6f 6e 20 74 68 65  lled NAME on the
299b0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
299c0 73 65 20 44 42 2e 0a 20 20 20 20 2a 2a 20 44 42  se DB..    ** DB
299d0 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 22 6d 61   is normally "ma
299e0 69 6e 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  in"..    */.    
299f0 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64  if( strcmp(azCmd
29a00 5b 30 5d 2c 22 6f 70 65 6e 22 29 3d 3d 30 20 29  [0],"open")==0 )
29a10 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e  {.      char *zN
29a20 61 6d 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e  ame;.      if( n
29a30 43 6d 64 21 3d 33 20 29 20 67 6f 74 6f 20 73 65  Cmd!=3 ) goto se
29a40 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
29a50 6f 72 3b 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20  or;.      zName 
29a60 3d 20 61 7a 43 6d 64 5b 32 5d 3b 0a 20 20 20 20  = azCmd[2];.    
29a70 20 20 69 66 28 20 7a 4e 61 6d 65 5b 30 5d 3d 3d    if( zName[0]==
29a80 30 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  0 ) goto session
29a90 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
29aa0 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
29ab0 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b  p->nSession; i++
29ac0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
29ad0 74 72 63 6d 70 28 70 2d 3e 61 53 65 73 73 69 6f  trcmp(p->aSessio
29ae0 6e 5b 69 5d 2e 7a 4e 61 6d 65 2c 7a 4e 61 6d 65  n[i].zName,zName
29af0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
29b00 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
29b10 64 65 72 72 2c 20 22 53 65 73 73 69 6f 6e 20 5c  derr, "Session \
29b20 22 25 73 5c 22 20 61 6c 72 65 61 64 79 20 65 78  "%s\" already ex
29b30 69 73 74 73 5c 6e 22 2c 20 7a 4e 61 6d 65 29 3b  ists\n", zName);
29b40 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
29b50 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
29b60 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
29b70 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
29b80 2d 3e 6e 53 65 73 73 69 6f 6e 3e 3d 41 72 72 61  ->nSession>=Arra
29b90 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73 69 6f  ySize(p->aSessio
29ba0 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  n) ){.        ra
29bb0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
29bc0 20 22 4d 61 78 69 6d 75 6d 20 6f 66 20 25 64 20   "Maximum of %d 
29bd0 73 65 73 73 69 6f 6e 73 5c 6e 22 2c 20 41 72 72  sessions\n", Arr
29be0 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73 69  aySize(p->aSessi
29bf0 6f 6e 29 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  on));.        go
29c00 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
29c10 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  exit;.      }.  
29c20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20 26      pSession = &
29c30 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 70 2d 3e 6e  p->aSession[p->n
29c40 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20 20 20  Session];.      
29c50 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73  rc = sqlite3sess
29c60 69 6f 6e 5f 63 72 65 61 74 65 28 70 2d 3e 64 62  ion_create(p->db
29c70 2c 20 61 7a 43 6d 64 5b 31 5d 2c 20 26 70 53 65  , azCmd[1], &pSe
29c80 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20 20  ssion->p);.     
29c90 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
29ca0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
29cb0 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20 6f 70  derr, "Cannot op
29cc0 65 6e 20 73 65 73 73 69 6f 6e 3a 20 65 72 72 6f  en session: erro
29cd0 72 20 63 6f 64 65 3d 25 64 5c 6e 22 2c 20 72 63  r code=%d\n", rc
29ce0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
29cf0 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  0;.        goto 
29d00 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
29d10 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
29d20 20 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74   pSession->nFilt
29d30 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 71  er = 0;.      sq
29d40 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 74 61 62  lite3session_tab
29d50 6c 65 5f 66 69 6c 74 65 72 28 70 53 65 73 73 69  le_filter(pSessi
29d60 6f 6e 2d 3e 70 2c 20 73 65 73 73 69 6f 6e 5f 66  on->p, session_f
29d70 69 6c 74 65 72 2c 20 70 53 65 73 73 69 6f 6e 29  ilter, pSession)
29d80 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 65 73 73  ;.      p->nSess
29d90 69 6f 6e 2b 2b 3b 0a 20 20 20 20 20 20 70 53 65  ion++;.      pSe
29da0 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 20 3d 20 73  ssion->zName = s
29db0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
29dc0 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
29dd0 20 7d 65 6c 73 65 0a 20 20 20 20 2f 2a 20 49 66   }else.    /* If
29de0 20 6e 6f 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65   no command name
29df0 20 6d 61 74 63 68 65 73 2c 20 73 68 6f 77 20 61   matches, show a
29e00 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20 2a 2f   syntax error */
29e10 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 73 79 6e  .    session_syn
29e20 74 61 78 5f 65 72 72 6f 72 3a 0a 20 20 20 20 73  tax_error:.    s
29e30 65 73 73 69 6f 6e 5f 68 65 6c 70 28 70 29 3b 0a  ession_help(p);.
29e40 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
29e50 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
29e60 42 55 47 0a 20 20 2f 2a 20 55 6e 64 6f 63 75 6d  BUG.  /* Undocum
29e70 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20 66  ented commands f
29e80 6f 72 20 69 6e 74 65 72 6e 61 6c 20 74 65 73 74  or internal test
29e90 69 6e 67 2e 20 20 53 75 62 6a 65 63 74 20 74 6f  ing.  Subject to
29ea0 20 63 68 61 6e 67 65 0a 20 20 2a 2a 20 77 69 74   change.  ** wit
29eb0 68 6f 75 74 20 6e 6f 74 69 63 65 2e 20 2a 2f 0a  hout notice. */.
29ec0 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20    if( c=='s' && 
29ed0 6e 3e 3d 31 30 20 26 26 20 73 74 72 6e 63 6d 70  n>=10 && strncmp
29ee0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 65 6c 66  (azArg[0], "self
29ef0 74 65 73 74 2d 22 2c 20 39 29 3d 3d 30 20 29 7b  test-", 9)==0 ){
29f00 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70  .    if( strncmp
29f10 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 62 6f  (azArg[0]+9, "bo
29f20 6f 6c 65 61 6e 22 2c 20 6e 2d 39 29 3d 3d 30 20  olean", n-9)==0 
29f30 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20  ){.      int i, 
29f40 76 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  v;.      for(i=1
29f50 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
29f60 20 20 20 20 20 20 20 20 76 20 3d 20 62 6f 6f 6c          v = bool
29f70 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 69  eanValue(azArg[i
29f80 5d 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  ]);.        utf8
29f90 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
29fa0 22 25 73 3a 20 25 64 20 30 78 25 78 5c 6e 22 2c  "%s: %d 0x%x\n",
29fb0 20 61 7a 41 72 67 5b 69 5d 2c 20 76 2c 20 76 29   azArg[i], v, v)
29fc0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
29fd0 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28      if( strncmp(
29fe0 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 69 6e 74  azArg[0]+9, "int
29ff0 65 67 65 72 22 2c 20 6e 2d 39 29 3d 3d 30 20 29  eger", n-9)==0 )
2a000 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 20 73  {.      int i; s
2a010 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 76 3b 0a  qlite3_int64 v;.
2a020 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69        for(i=1; i
2a030 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
2a040 20 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32       char zBuf[2
2a050 30 30 5d 3b 0a 20 20 20 20 20 20 20 20 76 20 3d  00];.        v =
2a060 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a   integerValue(az
2a070 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
2a080 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2a090 66 28 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c 7a  f(sizeof(zBuf),z
2a0a0 42 75 66 2c 22 25 73 3a 20 25 6c 6c 64 20 30 78  Buf,"%s: %lld 0x
2a0b0 25 6c 6c 78 5c 6e 22 2c 20 61 7a 41 72 67 5b 69  %llx\n", azArg[i
2a0c0 5d 2c 76 2c 76 29 3b 0a 20 20 20 20 20 20 20 20  ],v,v);.        
2a0d0 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
2a0e0 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
2a0f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2a100 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
2a110 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 6e   if( c=='s' && n
2a120 3e 3d 34 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=4 && strncmp(a
2a130 7a 41 72 67 5b 30 5d 2c 22 73 65 6c 66 74 65 73  zArg[0],"selftes
2a140 74 22 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  t",n)==0 ){.    
2a150 69 6e 74 20 62 49 73 49 6e 69 74 20 3d 20 30 3b  int bIsInit = 0;
2a160 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
2a170 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74   to initialize t
2a180 68 65 20 53 45 4c 46 54 45 53 54 20 74 61 62 6c  he SELFTEST tabl
2a190 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 56 65  e */.    int bVe
2a1a0 72 62 6f 73 65 20 3d 20 30 3b 20 20 20 20 20 20  rbose = 0;      
2a1b0 20 20 2f 2a 20 56 65 72 62 6f 73 65 20 6f 75 74    /* Verbose out
2a1c0 70 75 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62  put */.    int b
2a1d0 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 3b 20  SelftestExists; 
2a1e0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 53      /* True if S
2a1f0 45 4c 46 54 45 53 54 20 61 6c 72 65 61 64 79 20  ELFTEST already 
2a200 65 78 69 73 74 73 20 2a 2f 0a 20 20 20 20 69 6e  exists */.    in
2a210 74 20 69 2c 20 6b 3b 20 20 20 20 20 20 20 20 20  t i, k;         
2a220 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
2a230 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20 69  ounters */.    i
2a240 6e 74 20 6e 54 65 73 74 20 3d 20 30 3b 20 20 20  nt nTest = 0;   
2a250 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
2a260 72 20 6f 66 20 74 65 73 74 73 20 72 75 6e 73 20  r of tests runs 
2a270 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 45 72 72 20  */.    int nErr 
2a280 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
2a290 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
2a2a0 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 20 20  ors seen */.    
2a2b0 53 68 65 6c 6c 54 65 78 74 20 73 74 72 3b 20 20  ShellText str;  
2a2c0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 73 77           /* Answ
2a2d0 65 72 20 66 6f 72 20 61 20 71 75 65 72 79 20 2a  er for a query *
2a2e0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  /.    sqlite3_st
2a2f0 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 20 2f  mt *pStmt = 0; /
2a300 2a 20 51 75 65 72 79 20 61 67 61 69 6e 73 74 20  * Query against 
2a310 74 68 65 20 53 45 4c 46 54 45 53 54 20 74 61 62  the SELFTEST tab
2a320 6c 65 20 2a 2f 0a 0a 20 20 20 20 6f 70 65 6e 5f  le */..    open_
2a330 64 62 28 70 2c 30 29 3b 0a 20 20 20 20 66 6f 72  db(p,0);.    for
2a340 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=1; i<nArg; i+
2a350 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  +){.      const 
2a360 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b  char *z = azArg[
2a370 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b  i];.      if( z[
2a380 30 5d 3d 3d 27 2d 27 20 26 26 20 7a 5b 31 5d 3d  0]=='-' && z[1]=
2a390 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20  ='-' ) z++;.    
2a3a0 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22    if( strcmp(z,"
2a3b0 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a 20 20  -init")==0 ){.  
2a3c0 20 20 20 20 20 20 62 49 73 49 6e 69 74 20 3d 20        bIsInit = 
2a3d0 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  1;.      }else. 
2a3e0 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
2a3f0 7a 2c 22 2d 76 22 29 3d 3d 30 20 29 7b 0a 20 20  z,"-v")==0 ){.  
2a400 20 20 20 20 20 20 62 56 65 72 62 6f 73 65 2b 2b        bVerbose++
2a410 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20  ;.      }else.  
2a420 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 75 74      {.        ut
2a430 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
2a440 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f  , "Unknown optio
2a450 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25 73  n \"%s\" on \"%s
2a460 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  \"\n",.         
2a470 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2a480 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a  [i], azArg[0]);.
2a490 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
2a4a0 74 66 28 73 74 64 65 72 72 2c 20 22 53 68 6f 75  tf(stderr, "Shou
2a4b0 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 2d 2d  ld be one of: --
2a4c0 69 6e 69 74 20 2d 76 5c 6e 22 29 3b 0a 20 20 20  init -v\n");.   
2a4d0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2a4e0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
2a4f0 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
2a500 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
2a510 66 28 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  f( sqlite3_table
2a520 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
2a530 28 70 2d 3e 64 62 2c 22 6d 61 69 6e 22 2c 22 73  (p->db,"main","s
2a540 65 6c 66 74 65 73 74 22 2c 30 2c 30 2c 30 2c 30  elftest",0,0,0,0
2a550 2c 30 2c 30 29 0a 20 20 20 20 20 20 20 20 20 20  ,0,0).          
2a560 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
2a570 0a 20 20 20 20 20 20 62 53 65 6c 66 74 65 73 74  .      bSelftest
2a580 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 20 20  Exists = 0;.    
2a590 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 62 53 65  }else{.      bSe
2a5a0 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d 20 31  lftestExists = 1
2a5b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2a5c0 62 49 73 49 6e 69 74 20 29 7b 0a 20 20 20 20 20  bIsInit ){.     
2a5d0 20 63 72 65 61 74 65 53 65 6c 66 74 65 73 74 54   createSelftestT
2a5e0 61 62 6c 65 28 70 29 3b 0a 20 20 20 20 20 20 62  able(p);.      b
2a5f0 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d  SelftestExists =
2a600 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 6e   1;.    }.    in
2a610 69 74 54 65 78 74 28 26 73 74 72 29 3b 0a 20 20  itText(&str);.  
2a620 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 74    appendText(&st
2a630 72 2c 20 22 78 22 2c 20 30 29 3b 0a 20 20 20 20  r, "x", 0);.    
2a640 66 6f 72 28 6b 3d 62 53 65 6c 66 74 65 73 74 45  for(k=bSelftestE
2a650 78 69 73 74 73 3b 20 6b 3e 3d 30 3b 20 6b 2d 2d  xists; k>=0; k--
2a660 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6b 3d 3d  ){.      if( k==
2a670 31 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  1 ){.        rc 
2a680 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
2a690 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20 20 20  e_v2(p->db,.    
2a6a0 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
2a6b0 74 6e 6f 2c 6f 70 2c 63 6d 64 2c 61 6e 73 20 46  tno,op,cmd,ans F
2a6c0 52 4f 4d 20 73 65 6c 66 74 65 73 74 20 4f 52 44  ROM selftest ORD
2a6d0 45 52 20 42 59 20 74 6e 6f 22 2c 0a 20 20 20 20  ER BY tno",.    
2a6e0 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74          -1, &pSt
2a6f0 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65  mt, 0);.      }e
2a700 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20  lse{.        rc 
2a710 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
2a720 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20 20 20  e_v2(p->db,.    
2a730 20 20 20 20 20 20 22 56 41 4c 55 45 53 28 30 2c        "VALUES(0,
2a740 27 6d 65 6d 6f 27 2c 27 4d 69 73 73 69 6e 67 20  'memo','Missing 
2a750 53 45 4c 46 54 45 53 54 20 74 61 62 6c 65 20 2d  SELFTEST table -
2a760 20 64 65 66 61 75 6c 74 20 63 68 65 63 6b 73 20   default checks 
2a770 6f 6e 6c 79 27 2c 27 27 29 2c 22 0a 20 20 20 20  only',''),".    
2a780 20 20 20 20 20 20 22 20 20 20 20 20 20 28 31 2c        "      (1,
2a790 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20 69 6e  'run','PRAGMA in
2a7a0 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27 2c 27  tegrity_check','
2a7b0 6f 6b 27 29 22 2c 0a 20 20 20 20 20 20 20 20 20  ok')",.         
2a7c0 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
2a7d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
2a7e0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
2a7f0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2a800 72 72 2c 20 22 45 72 72 6f 72 20 71 75 65 72 79  rr, "Error query
2a810 69 6e 67 20 74 68 65 20 73 65 6c 66 74 65 73 74  ing the selftest
2a820 20 74 61 62 6c 65 5c 6e 22 29 3b 0a 20 20 20 20   table\n");.    
2a830 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2a840 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
2a850 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
2a860 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
2a870 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
2a880 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72 28 69     }.      for(i
2a890 3d 31 3b 20 73 71 6c 69 74 65 33 5f 73 74 65 70  =1; sqlite3_step
2a8a0 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
2a8b0 52 4f 57 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ROW; i++){.     
2a8c0 20 20 20 69 6e 74 20 74 6e 6f 20 3d 20 73 71 6c     int tno = sql
2a8d0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  ite3_column_int(
2a8e0 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20  pStmt, 0);.     
2a8f0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
2a900 4f 70 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  Op = (const char
2a910 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
2a920 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 29 3b  _text(pStmt, 1);
2a930 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
2a940 68 61 72 20 2a 7a 53 71 6c 20 3d 20 28 63 6f 6e  har *zSql = (con
2a950 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
2a960 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
2a970 6d 74 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20  mt, 2);.        
2a980 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 6e 73  const char *zAns
2a990 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
2a9a0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
2a9b0 65 78 74 28 70 53 74 6d 74 2c 20 33 29 3b 0a 0a  ext(pStmt, 3);..
2a9c0 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
2a9d0 20 20 20 20 20 20 20 69 66 28 20 62 56 65 72 62         if( bVerb
2a9e0 6f 73 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 20  ose>0 ){.       
2a9f0 20 20 20 63 68 61 72 20 2a 7a 51 75 6f 74 65 20     char *zQuote 
2aa00 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
2aa10 66 28 22 25 71 22 2c 20 7a 53 71 6c 29 3b 0a 20  f("%q", zSql);. 
2aa20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28           printf(
2aa30 22 25 64 3a 20 25 73 20 25 73 5c 6e 22 2c 20 74  "%d: %s %s\n", t
2aa40 6e 6f 2c 20 7a 4f 70 2c 20 7a 53 71 6c 29 3b 0a  no, zOp, zSql);.
2aa50 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
2aa60 33 5f 66 72 65 65 28 7a 51 75 6f 74 65 29 3b 0a  3_free(zQuote);.
2aa70 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2aa80 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4f 70    if( strcmp(zOp
2aa90 2c 22 6d 65 6d 6f 22 29 3d 3d 30 20 29 7b 0a 20  ,"memo")==0 ){. 
2aaa0 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
2aab0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
2aac0 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  \n", zSql);.    
2aad0 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
2aae0 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4f 70    if( strcmp(zOp
2aaf0 2c 22 72 75 6e 22 29 3d 3d 30 20 29 7b 0a 20 20  ,"run")==0 ){.  
2ab00 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45          char *zE
2ab10 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 20  rrMsg = 0;.     
2ab20 20 20 20 20 20 73 74 72 2e 6e 20 3d 20 30 3b 0a       str.n = 0;.
2ab30 20 20 20 20 20 20 20 20 20 20 73 74 72 2e 7a 5b            str.z[
2ab40 30 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  0] = 0;.        
2ab50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
2ab60 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c  xec(p->db, zSql,
2ab70 20 63 61 70 74 75 72 65 4f 75 74 70 75 74 43 61   captureOutputCa
2ab80 6c 6c 62 61 63 6b 2c 20 26 73 74 72 2c 20 26 7a  llback, &str, &z
2ab90 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20  ErrMsg);.       
2aba0 20 20 20 6e 54 65 73 74 2b 2b 3b 0a 20 20 20 20     nTest++;.    
2abb0 20 20 20 20 20 20 69 66 28 20 62 56 65 72 62 6f        if( bVerbo
2abc0 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  se ){.          
2abd0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2abe0 3e 6f 75 74 2c 20 22 52 65 73 75 6c 74 3a 20 25  >out, "Result: %
2abf0 73 5c 6e 22 2c 20 73 74 72 2e 7a 29 3b 0a 20 20  s\n", str.z);.  
2ac00 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2ac10 20 20 20 20 69 66 28 20 72 63 20 7c 7c 20 7a 45      if( rc || zE
2ac20 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 20  rrMsg ){.       
2ac30 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a 20 20 20       nErr++;.   
2ac40 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b           rc = 1;
2ac50 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66  .            utf
2ac60 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2ac70 20 22 25 64 3a 20 65 72 72 6f 72 2d 63 6f 64 65   "%d: error-code
2ac80 2d 25 64 3a 20 25 73 5c 6e 22 2c 20 74 6e 6f 2c  -%d: %s\n", tno,
2ac90 20 72 63 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20   rc, zErrMsg);. 
2aca0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
2acb0 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
2acc0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
2acd0 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 41 6e  e if( strcmp(zAn
2ace0 73 2c 73 74 72 2e 7a 29 21 3d 30 20 29 7b 0a 20  s,str.z)!=0 ){. 
2acf0 20 20 20 20 20 20 20 20 20 20 20 6e 45 72 72 2b             nErr+
2ad00 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  +;.            r
2ad10 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  c = 1;.         
2ad20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
2ad30 2d 3e 6f 75 74 2c 20 22 25 64 3a 20 45 78 70 65  ->out, "%d: Expe
2ad40 63 74 65 64 3a 20 5b 25 73 5d 5c 6e 22 2c 20 74  cted: [%s]\n", t
2ad50 6e 6f 2c 20 7a 41 6e 73 29 3b 0a 20 20 20 20 20  no, zAns);.     
2ad60 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
2ad70 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 3a 20  tf(p->out, "%d: 
2ad80 20 20 20 20 20 47 6f 74 3a 20 5b 25 73 5d 5c 6e       Got: [%s]\n
2ad90 22 2c 20 74 6e 6f 2c 20 73 74 72 2e 7a 29 3b 0a  ", tno, str.z);.
2ada0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2adb0 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
2adc0 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74    {.          ut
2add0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
2ade0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 55  ,.            "U
2adf0 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69 6f 6e  nknown operation
2ae00 20 5c 22 25 73 5c 22 20 6f 6e 20 73 65 6c 66 74   \"%s\" on selft
2ae10 65 73 74 20 6c 69 6e 65 20 25 64 5c 6e 22 2c 20  est line %d\n", 
2ae20 7a 4f 70 2c 20 74 6e 6f 29 3b 0a 20 20 20 20 20  zOp, tno);.     
2ae30 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2ae40 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2ae50 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
2ae60 2f 2a 20 45 6e 64 20 6c 6f 6f 70 20 6f 76 65 72  /* End loop over
2ae70 20 72 6f 77 73 20 6f 66 20 63 6f 6e 74 65 6e 74   rows of content
2ae80 20 66 72 6f 6d 20 53 45 4c 46 54 45 53 54 20 2a   from SELFTEST *
2ae90 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  /.      sqlite3_
2aea0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
2aeb0 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20 6c 6f  .    } /* End lo
2aec0 6f 70 20 6f 76 65 72 20 6b 20 2a 2f 0a 20 20 20  op over k */.   
2aed0 20 66 72 65 65 54 65 78 74 28 26 73 74 72 29 3b   freeText(&str);
2aee0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2aef0 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 65 72 72  (p->out, "%d err
2af00 6f 72 73 20 6f 75 74 20 6f 66 20 25 64 20 74 65  ors out of %d te
2af10 73 74 73 5c 6e 22 2c 20 6e 45 72 72 2c 20 6e 54  sts\n", nErr, nT
2af20 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  est);.  }else.. 
2af30 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73   if( c=='s' && s
2af40 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
2af50 20 22 73 65 70 61 72 61 74 6f 72 22 2c 20 6e 29   "separator", n)
2af60 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
2af70 41 72 67 3c 32 20 7c 7c 20 6e 41 72 67 3e 33 20  Arg<2 || nArg>3 
2af80 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
2af90 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
2afa0 67 65 3a 20 2e 73 65 70 61 72 61 74 6f 72 20 43  ge: .separator C
2afb0 4f 4c 20 3f 52 4f 57 3f 5c 6e 22 29 3b 0a 20 20  OL ?ROW?\n");.  
2afc0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2afd0 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d  }.    if( nArg>=
2afe0 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  2 ){.      sqlit
2aff0 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
2b000 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  of(p->colSeparat
2b010 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  or), p->colSepar
2b020 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20  ator,.          
2b030 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25 2e               "%.
2b040 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61 79 53  *s", (int)ArrayS
2b050 69 7a 65 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  ize(p->colSepara
2b060 74 6f 72 29 2d 31 2c 20 61 7a 41 72 67 5b 31 5d  tor)-1, azArg[1]
2b070 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
2b080 20 6e 41 72 67 3e 3d 33 20 29 7b 0a 20 20 20 20   nArg>=3 ){.    
2b090 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2b0a0 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77  tf(sizeof(p->row
2b0b0 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72  Separator), p->r
2b0c0 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20  owSeparator,.   
2b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0e0 20 20 20 20 22 25 2e 2a 73 22 2c 20 28 69 6e 74      "%.*s", (int
2b0f0 29 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 72 6f  )ArraySize(p->ro
2b100 77 53 65 70 61 72 61 74 6f 72 29 2d 31 2c 20 61  wSeparator)-1, a
2b110 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 7d 0a  zArg[2]);.    }.
2b120 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
2b130 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 34 20 26 26  =='s' && n>=4 &&
2b140 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2b150 5d 2c 22 73 68 61 33 73 75 6d 22 2c 6e 29 3d 3d  ],"sha3sum",n)==
2b160 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
2b170 68 61 72 20 2a 7a 4c 69 6b 65 20 3d 20 30 3b 20  har *zLike = 0; 
2b180 20 20 2f 2a 20 57 68 69 63 68 20 74 61 62 6c 65    /* Which table
2b190 20 74 6f 20 63 68 65 63 6b 73 75 6d 2e 20 30 20   to checksum. 0 
2b1a0 6d 65 61 6e 73 20 65 76 65 72 79 74 68 69 6e 67  means everything
2b1b0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20   */.    int i;  
2b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1d0 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
2b1e0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 53 63 68   */.    int bSch
2b1f0 65 6d 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ema = 0;        
2b200 20 2f 2a 20 41 6c 73 6f 20 68 61 73 68 20 74 68   /* Also hash th
2b210 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20  e schema */.    
2b220 69 6e 74 20 62 53 65 70 61 72 61 74 65 20 3d 20  int bSeparate = 
2b230 30 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  0;       /* Hash
2b240 20 65 61 63 68 20 74 61 62 6c 65 20 73 65 70 61   each table sepa
2b250 72 61 74 65 6c 79 20 2a 2f 0a 20 20 20 20 69 6e  rately */.    in
2b260 74 20 69 53 69 7a 65 20 3d 20 32 32 34 3b 20 20  t iSize = 224;  
2b270 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 61         /* Hash a
2b280 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
2b290 2a 2f 0a 20 20 20 20 69 6e 74 20 62 44 65 62 75  */.    int bDebu
2b2a0 67 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  g = 0;          
2b2b0 2f 2a 20 4f 6e 6c 79 20 73 68 6f 77 20 74 68 65  /* Only show the
2b2c0 20 71 75 65 72 79 20 74 68 61 74 20 77 6f 75 6c   query that woul
2b2d0 64 20 68 61 76 65 20 72 75 6e 20 2a 2f 0a 20 20  d have run */.  
2b2e0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
2b2f0 70 53 74 6d 74 3b 20 20 20 20 20 2f 2a 20 46 6f  pStmt;     /* Fo
2b300 72 20 71 75 65 72 79 69 6e 67 20 74 61 62 6c 65  r querying table
2b310 73 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 20 20 63  s names */.    c
2b320 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20 20 20  har *zSql;      
2b330 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 74          /* SQL t
2b340 6f 20 62 65 20 72 75 6e 20 2a 2f 0a 20 20 20 20  o be run */.    
2b350 63 68 61 72 20 2a 7a 53 65 70 3b 20 20 20 20 20  char *zSep;     
2b360 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 70 61           /* Sepa
2b370 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 53 68 65  rator */.    She
2b380 6c 6c 54 65 78 74 20 73 53 71 6c 3b 20 20 20 20  llText sSql;    
2b390 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74        /* Complet
2b3a0 65 20 53 51 4c 20 66 6f 72 20 74 68 65 20 71 75  e SQL for the qu
2b3b0 65 72 79 20 74 6f 20 72 75 6e 20 74 68 65 20 68  ery to run the h
2b3c0 61 73 68 20 2a 2f 0a 20 20 20 20 53 68 65 6c 6c  ash */.    Shell
2b3d0 54 65 78 74 20 73 51 75 65 72 79 3b 20 20 20 20  Text sQuery;    
2b3e0 20 20 20 20 2f 2a 20 53 65 74 20 6f 66 20 71 75      /* Set of qu
2b3f0 65 72 69 65 73 20 75 73 65 64 20 74 6f 20 72 65  eries used to re
2b400 61 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 2a  ad all content *
2b410 2f 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  /.    open_db(p,
2b420 20 30 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31   0);.    for(i=1
2b430 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2b440 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2b450 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d 3b 0a   *z = azArg[i];.
2b460 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d        if( z[0]==
2b470 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  '-' ){.        z
2b480 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ++;.        if( 
2b490 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  z[0]=='-' ) z++;
2b4a0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
2b4b0 63 6d 70 28 7a 2c 22 73 63 68 65 6d 61 22 29 3d  cmp(z,"schema")=
2b4c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
2b4d0 62 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20 20  bSchema = 1;.   
2b4e0 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20       }else.     
2b4f0 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c     if( strcmp(z,
2b500 22 73 68 61 33 2d 32 32 34 22 29 3d 3d 30 20 7c  "sha3-224")==0 |
2b510 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61 33  | strcmp(z,"sha3
2b520 2d 32 35 36 22 29 3d 3d 30 0a 20 20 20 20 20 20  -256")==0.      
2b530 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22     || strcmp(z,"
2b540 73 68 61 33 2d 33 38 34 22 29 3d 3d 30 20 7c 7c  sha3-384")==0 ||
2b550 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61 33 2d   strcmp(z,"sha3-
2b560 35 31 32 22 29 3d 3d 30 0a 20 20 20 20 20 20 20  512")==0.       
2b570 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 53   ){.          iS
2b580 69 7a 65 20 3d 20 61 74 6f 69 28 26 7a 5b 35 5d  ize = atoi(&z[5]
2b590 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
2b5a0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
2b5b0 63 6d 70 28 7a 2c 22 64 65 62 75 67 22 29 3d 3d  cmp(z,"debug")==
2b5c0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62  0 ){.          b
2b5d0 44 65 62 75 67 20 3d 20 31 3b 0a 20 20 20 20 20  Debug = 1;.     
2b5e0 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20 20     }else.       
2b5f0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66   {.          utf
2b600 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
2b610 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e   "Unknown option
2b620 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25 73 5c   \"%s\" on \"%s\
2b630 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  "\n",.          
2b640 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72              azAr
2b650 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29 3b  g[i], azArg[0]);
2b660 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
2b670 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53  rintf(stderr, "S
2b680 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a  hould be one of:
2b690 20 2d 2d 73 63 68 65 6d 61 22 0a 20 20 20 20 20   --schema".     
2b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6b0 20 20 20 20 20 20 20 20 22 20 2d 2d 73 68 61 33          " --sha3
2b6c0 2d 32 32 34 20 2d 2d 73 68 61 33 2d 32 35 35 20  -224 --sha3-255 
2b6d0 2d 2d 73 68 61 33 2d 33 38 34 20 2d 2d 73 68 61  --sha3-384 --sha
2b6e0 33 2d 35 31 32 5c 6e 22 29 3b 0a 20 20 20 20 20  3-512\n");.     
2b6f0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2b700 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2b710 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2b720 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
2b730 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b 65 20 29  else if( zLike )
2b740 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
2b750 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
2b760 61 67 65 3a 20 2e 73 68 61 33 73 75 6d 20 3f 4f  age: .sha3sum ?O
2b770 50 54 49 4f 4e 53 3f 20 3f 4c 49 4b 45 2d 50 41  PTIONS? ?LIKE-PA
2b780 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20  TTERN?\n");.    
2b790 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2b7a0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
2b7b0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
2b7c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2b7d0 20 7a 4c 69 6b 65 20 3d 20 7a 3b 0a 20 20 20 20   zLike = z;.    
2b7e0 20 20 20 20 62 53 65 70 61 72 61 74 65 20 3d 20      bSeparate = 
2b7f0 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  1;.        if( s
2b800 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 22  qlite3_strlike("
2b810 73 71 6c 69 74 65 5f 25 22 2c 20 7a 4c 69 6b 65  sqlite_%", zLike
2b820 2c 20 30 29 3d 3d 30 20 29 20 62 53 63 68 65 6d  , 0)==0 ) bSchem
2b830 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  a = 1;.      }. 
2b840 20 20 20 7d 0a 20 20 20 20 69 66 28 20 62 53 63     }.    if( bSc
2b850 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20 7a 53  hema ){.      zS
2b860 71 6c 20 3d 20 22 53 45 4c 45 43 54 20 6c 6f 77  ql = "SELECT low
2b870 65 72 28 6e 61 6d 65 29 20 46 52 4f 4d 20 73 71  er(name) FROM sq
2b880 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20  lite_master".   
2b890 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52            " WHER
2b8a0 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41  E type='table' A
2b8b0 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f 74  ND coalesce(root
2b8c0 70 61 67 65 2c 30 29 3e 31 22 0a 20 20 20 20 20  page,0)>1".     
2b8d0 20 20 20 20 20 20 20 20 22 20 55 4e 49 4f 4e 20          " UNION 
2b8e0 41 4c 4c 20 53 45 4c 45 43 54 20 27 73 71 6c 69  ALL SELECT 'sqli
2b8f0 74 65 5f 6d 61 73 74 65 72 27 22 0a 20 20 20 20  te_master'".    
2b900 20 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52           " ORDER
2b910 20 42 59 20 31 20 63 6f 6c 6c 61 74 65 20 6e 6f   BY 1 collate no
2b920 63 61 73 65 22 3b 0a 20 20 20 20 7d 65 6c 73 65  case";.    }else
2b930 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 22  {.      zSql = "
2b940 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 6e 61 6d  SELECT lower(nam
2b950 65 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  e) FROM sqlite_m
2b960 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20  aster".         
2b970 20 20 20 20 22 20 57 48 45 52 45 20 74 79 70 65      " WHERE type
2b980 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 63 6f 61  ='table' AND coa
2b990 6c 65 73 63 65 28 72 6f 6f 74 70 61 67 65 2c 30  lesce(rootpage,0
2b9a0 29 3e 31 22 0a 20 20 20 20 20 20 20 20 20 20 20  )>1".           
2b9b0 20 20 22 20 41 4e 44 20 6e 61 6d 65 20 4e 4f 54    " AND name NOT
2b9c0 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f 25 27   LIKE 'sqlite_%'
2b9d0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22  ".             "
2b9e0 20 4f 52 44 45 52 20 42 59 20 31 20 63 6f 6c 6c   ORDER BY 1 coll
2b9f0 61 74 65 20 6e 6f 63 61 73 65 22 3b 0a 20 20 20  ate nocase";.   
2ba00 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 70   }.    sqlite3_p
2ba10 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
2ba20 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d   zSql, -1, &pStm
2ba30 74 2c 20 30 29 3b 0a 20 20 20 20 69 6e 69 74 54  t, 0);.    initT
2ba40 65 78 74 28 26 73 51 75 65 72 79 29 3b 0a 20 20  ext(&sQuery);.  
2ba50 20 20 69 6e 69 74 54 65 78 74 28 26 73 53 71 6c    initText(&sSql
2ba60 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78  );.    appendTex
2ba70 74 28 26 73 53 71 6c 2c 20 22 57 49 54 48 20 5b  t(&sSql, "WITH [
2ba80 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d 28 61  sha3sum$query](a
2ba90 2c 62 29 20 41 53 28 22 2c 30 29 3b 0a 20 20 20  ,b) AS(",0);.   
2baa0 20 7a 53 65 70 20 3d 20 22 56 41 4c 55 45 53 28   zSep = "VALUES(
2bab0 22 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 53 51  ";.    while( SQ
2bac0 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65  LITE_ROW==sqlite
2bad0 33 5f 73 74 65 70 28 70 53 74 6d 74 29 20 29 7b  3_step(pStmt) ){
2bae0 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2baf0 72 20 2a 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74  r *zTab = (const
2bb00 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
2bb10 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74  olumn_text(pStmt
2bb20 2c 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ,0);.      if( z
2bb30 4c 69 6b 65 20 26 26 20 73 71 6c 69 74 65 33 5f  Like && sqlite3_
2bb40 73 74 72 6c 69 6b 65 28 7a 4c 69 6b 65 2c 20 7a  strlike(zLike, z
2bb50 54 61 62 2c 20 30 29 21 3d 30 20 29 20 63 6f 6e  Tab, 0)!=0 ) con
2bb60 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28  tinue;.      if(
2bb70 20 73 74 72 6e 63 6d 70 28 7a 54 61 62 2c 20 22   strncmp(zTab, "
2bb80 73 71 6c 69 74 65 5f 22 2c 37 29 21 3d 30 20 29  sqlite_",7)!=0 )
2bb90 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  {.        append
2bba0 54 65 78 74 28 26 73 51 75 65 72 79 2c 22 53 45  Text(&sQuery,"SE
2bbb0 4c 45 43 54 20 2a 20 46 52 4f 4d 20 22 2c 20 30  LECT * FROM ", 0
2bbc0 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
2bbd0 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 7a 54  dText(&sQuery,zT
2bbe0 61 62 2c 27 22 27 29 3b 0a 20 20 20 20 20 20 20  ab,'"');.       
2bbf0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75   appendText(&sQu
2bc00 65 72 79 2c 22 20 4e 4f 54 20 49 4e 44 45 58 45  ery," NOT INDEXE
2bc10 44 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  D;", 0);.      }
2bc20 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2bc30 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f 6d 61  zTab, "sqlite_ma
2bc40 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ster")==0 ){.   
2bc50 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2bc60 26 73 51 75 65 72 79 2c 22 53 45 4c 45 43 54 20  &sQuery,"SELECT 
2bc70 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61  type,name,tbl_na
2bc80 6d 65 2c 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  me,sql FROM sqli
2bc90 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20  te_master".     
2bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcb0 20 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59        " ORDER BY
2bcc0 20 6e 61 6d 65 3b 22 2c 20 30 29 3b 0a 20 20 20   name;", 0);.   
2bcd0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
2bce0 63 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c 69 74  cmp(zTab, "sqlit
2bcf0 65 5f 73 65 71 75 65 6e 63 65 22 29 3d 3d 30 20  e_sequence")==0 
2bd00 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  ){.        appen
2bd10 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 22 53  dText(&sQuery,"S
2bd20 45 4c 45 43 54 20 6e 61 6d 65 2c 73 65 71 20 46  ELECT name,seq F
2bd30 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65  ROM sqlite_seque
2bd40 6e 63 65 22 0a 20 20 20 20 20 20 20 20 20 20 20  nce".           
2bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd60 22 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b  " ORDER BY name;
2bd70 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ", 0);.      }el
2bd80 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54  se if( strcmp(zT
2bd90 61 62 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74  ab, "sqlite_stat
2bda0 31 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  1")==0 ){.      
2bdb0 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51    appendText(&sQ
2bdc0 75 65 72 79 2c 22 53 45 4c 45 43 54 20 74 62 6c  uery,"SELECT tbl
2bdd0 2c 69 64 78 2c 73 74 61 74 20 46 52 4f 4d 20 73  ,idx,stat FROM s
2bde0 71 6c 69 74 65 5f 73 74 61 74 31 22 0a 20 20 20  qlite_stat1".   
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be00 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52 20          " ORDER 
2be10 42 59 20 74 62 6c 2c 69 64 78 3b 22 2c 20 30 29  BY tbl,idx;", 0)
2be20 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
2be30 28 20 73 74 72 63 6d 70 28 7a 54 61 62 2c 20 22  ( strcmp(zTab, "
2be40 73 71 6c 69 74 65 5f 73 74 61 74 33 22 29 3d 3d  sqlite_stat3")==
2be50 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  0.             |
2be60 7c 20 73 74 72 63 6d 70 28 7a 54 61 62 2c 20 22  | strcmp(zTab, "
2be70 73 71 6c 69 74 65 5f 73 74 61 74 34 22 29 3d 3d  sqlite_stat4")==
2be80 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70  0 ){.        app
2be90 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c  endText(&sQuery,
2bea0 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
2beb0 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61  ", 0);.        a
2bec0 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65 72  ppendText(&sQuer
2bed0 79 2c 20 7a 54 61 62 2c 20 30 29 3b 0a 20 20 20  y, zTab, 0);.   
2bee0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2bef0 26 73 51 75 65 72 79 2c 20 22 20 4f 52 44 45 52  &sQuery, " ORDER
2bf00 20 42 59 20 74 62 6c 2c 20 69 64 78 2c 20 72 6f   BY tbl, idx, ro
2bf10 77 69 64 3b 5c 6e 22 2c 20 30 29 3b 0a 20 20 20  wid;\n", 0);.   
2bf20 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e     }.      appen
2bf30 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a 53 65  dText(&sSql, zSe
2bf40 70 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70  p, 0);.      app
2bf50 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 73  endText(&sSql, s
2bf60 51 75 65 72 79 2e 7a 2c 20 27 5c 27 27 29 3b 0a  Query.z, '\'');.
2bf70 20 20 20 20 20 20 73 51 75 65 72 79 2e 6e 20 3d        sQuery.n =
2bf80 20 30 3b 0a 20 20 20 20 20 20 61 70 70 65 6e 64   0;.      append
2bf90 54 65 78 74 28 26 73 53 71 6c 2c 20 22 2c 22 2c  Text(&sSql, ",",
2bfa0 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e   0);.      appen
2bfb0 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a 54 61  dText(&sSql, zTa
2bfc0 62 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20 20 20  b, '\'');.      
2bfd0 7a 53 65 70 20 3d 20 22 29 2c 28 22 3b 0a 20 20  zSep = "),(";.  
2bfe0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
2bff0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
2c000 0a 20 20 20 20 69 66 28 20 62 53 65 70 61 72 61  .    if( bSepara
2c010 74 65 20 29 7b 0a 20 20 20 20 20 20 7a 53 71 6c  te ){.      zSql
2c020 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2c030 74 66 28 0a 20 20 20 20 20 20 20 20 20 20 22 25  tf(.          "%
2c040 73 29 29 22 0a 20 20 20 20 20 20 20 20 20 20 22  s))".          "
2c050 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65   SELECT lower(he
2c060 78 28 73 68 61 33 5f 71 75 65 72 79 28 61 2c 25  x(sha3_query(a,%
2c070 64 29 29 29 20 41 53 20 68 61 73 68 2c 20 62 20  d))) AS hash, b 
2c080 41 53 20 6c 61 62 65 6c 22 0a 20 20 20 20 20 20  AS label".      
2c090 20 20 20 20 22 20 20 20 46 52 4f 4d 20 5b 73 68      "   FROM [sh
2c0a0 61 33 73 75 6d 24 71 75 65 72 79 5d 22 2c 0a 20  a3sum$query]",. 
2c0b0 20 20 20 20 20 20 20 20 20 73 53 71 6c 2e 7a 2c           sSql.z,
2c0c0 20 69 53 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c   iSize);.    }el
2c0d0 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d  se{.      zSql =
2c0e0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2c0f0 28 0a 20 20 20 20 20 20 20 20 20 20 22 25 73 29  (.          "%s)
2c100 29 22 0a 20 20 20 20 20 20 20 20 20 20 22 20 53  )".          " S
2c110 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65 78 28  ELECT lower(hex(
2c120 73 68 61 33 5f 71 75 65 72 79 28 67 72 6f 75 70  sha3_query(group
2c130 5f 63 6f 6e 63 61 74 28 61 2c 27 27 29 2c 25 64  _concat(a,''),%d
2c140 29 29 29 20 41 53 20 68 61 73 68 22 0a 20 20 20  ))) AS hash".   
2c150 20 20 20 20 20 20 20 22 20 20 20 46 52 4f 4d 20         "   FROM 
2c160 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d 22  [sha3sum$query]"
2c170 2c 0a 20 20 20 20 20 20 20 20 20 20 73 53 71 6c  ,.          sSql
2c180 2e 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20 20 20  .z, iSize);.    
2c190 7d 0a 20 20 20 20 66 72 65 65 54 65 78 74 28 26  }.    freeText(&
2c1a0 73 51 75 65 72 79 29 3b 0a 20 20 20 20 66 72 65  sQuery);.    fre
2c1b0 65 54 65 78 74 28 26 73 53 71 6c 29 3b 0a 20 20  eText(&sSql);.  
2c1c0 20 20 69 66 28 20 62 44 65 62 75 67 20 29 7b 0a    if( bDebug ){.
2c1d0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2c1e0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22  f(p->out, "%s\n"
2c1f0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 65 6c  , zSql);.    }el
2c200 73 65 7b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f  se{.      shell_
2c210 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  exec(p->db, zSql
2c220 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b  , shell_callback
2c230 2c 20 70 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  , p, 0);.    }. 
2c240 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2c250 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  zSql);.  }else..
2c260 20 20 69 66 28 20 63 3d 3d 27 73 27 0a 20 20 20    if( c=='s'.   
2c270 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a 41 72  && (strncmp(azAr
2c280 67 5b 30 5d 2c 20 22 73 68 65 6c 6c 22 2c 20 6e  g[0], "shell", n
2c290 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d 70 28  )==0 || strncmp(
2c2a0 61 7a 41 72 67 5b 30 5d 2c 22 73 79 73 74 65 6d  azArg[0],"system
2c2b0 22 2c 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a 20 20  ",n)==0).  ){.  
2c2c0 20 20 63 68 61 72 20 2a 7a 43 6d 64 3b 0a 20 20    char *zCmd;.  
2c2d0 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20 20 20    int i, x;.    
2c2e0 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20  if( nArg<2 ){.  
2c2f0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2c300 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
2c310 73 79 73 74 65 6d 20 43 4f 4d 4d 41 4e 44 5c 6e  system COMMAND\n
2c320 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2c330 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
2c340 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2c350 20 20 20 20 7d 0a 20 20 20 20 7a 43 6d 64 20 3d      }.    zCmd =
2c360 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2c370 28 73 74 72 63 68 72 28 61 7a 41 72 67 5b 31 5d  (strchr(azArg[1]
2c380 2c 27 20 27 29 3d 3d 30 3f 22 25 73 22 3a 22 5c  ,' ')==0?"%s":"\
2c390 22 25 73 5c 22 22 2c 20 61 7a 41 72 67 5b 31 5d  "%s\"", azArg[1]
2c3a0 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 32 3b 20  );.    for(i=2; 
2c3b0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2c3c0 20 20 20 20 7a 43 6d 64 20 3d 20 73 71 6c 69 74      zCmd = sqlit
2c3d0 65 33 5f 6d 70 72 69 6e 74 66 28 73 74 72 63 68  e3_mprintf(strch
2c3e0 72 28 61 7a 41 72 67 5b 69 5d 2c 27 20 27 29 3d  r(azArg[i],' ')=
2c3f0 3d 30 3f 22 25 7a 20 25 73 22 3a 22 25 7a 20 5c  =0?"%z %s":"%z \
2c400 22 25 73 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  "%s\"",.        
2c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c420 20 20 20 20 20 7a 43 6d 64 2c 20 61 7a 41 72 67       zCmd, azArg
2c430 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  [i]);.    }.    
2c440 78 20 3d 20 73 79 73 74 65 6d 28 7a 43 6d 64 29  x = system(zCmd)
2c450 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
2c460 65 65 28 7a 43 6d 64 29 3b 0a 20 20 20 20 69 66  ee(zCmd);.    if
2c470 28 20 78 20 29 20 72 61 77 5f 70 72 69 6e 74 66  ( x ) raw_printf
2c480 28 73 74 64 65 72 72 2c 20 22 53 79 73 74 65 6d  (stderr, "System
2c490 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73   command returns
2c4a0 20 25 64 5c 6e 22 2c 20 78 29 3b 0a 20 20 7d 65   %d\n", x);.  }e
2c4b0 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73  lse..  if( c=='s
2c4c0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
2c4d0 72 67 5b 30 5d 2c 20 22 73 68 6f 77 22 2c 20 6e  rg[0], "show", n
2c4e0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74  )==0 ){.    stat
2c4f0 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
2c500 7a 42 6f 6f 6c 5b 5d 20 3d 20 7b 20 22 6f 66 66  zBool[] = { "off
2c510 22 2c 20 22 6f 6e 22 2c 20 22 66 75 6c 6c 22 2c  ", "on", "full",
2c520 20 22 75 6e 6b 22 20 7d 3b 0a 20 20 20 20 69 6e   "unk" };.    in
2c530 74 20 69 3b 0a 20 20 20 20 69 66 28 20 6e 41 72  t i;.    if( nAr
2c540 67 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 72 61  g!=1 ){.      ra
2c550 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2c560 20 22 55 73 61 67 65 3a 20 2e 73 68 6f 77 5c 6e   "Usage: .show\n
2c570 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2c580 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
2c590 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2c5a0 20 20 20 20 7d 0a 20 20 20 20 75 74 66 38 5f 70      }.    utf8_p
2c5b0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2c5c0 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 65  12.12s: %s\n","e
2c5d0 63 68 6f 22 2c 0a 20 20 20 20 20 20 20 20 20 20  cho",.          
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5f0 20 20 20 20 20 20 20 20 61 7a 42 6f 6f 6c 5b 53          azBool[S
2c600 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
2c610 48 46 4c 47 5f 45 63 68 6f 29 5d 29 3b 0a 20 20  HFLG_Echo)]);.  
2c620 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2c630 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20  >out, "%12.12s: 
2c640 25 73 5c 6e 22 2c 22 65 71 70 22 2c 20 61 7a 42  %s\n","eqp", azB
2c650 6f 6f 6c 5b 70 2d 3e 61 75 74 6f 45 51 50 26 33  ool[p->autoEQP&3
2c660 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ]);.    utf8_pri
2c670 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32  ntf(p->out, "%12
2c680 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 65 78 70  .12s: %s\n","exp
2c690 6c 61 69 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  lain",.         
2c6a0 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78  p->mode==MODE_Ex
2c6b0 70 6c 61 69 6e 20 3f 20 22 6f 6e 22 20 3a 20 70  plain ? "on" : p
2c6c0 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20 3f 20  ->autoExplain ? 
2c6d0 22 61 75 74 6f 22 20 3a 20 22 6f 66 66 22 29 3b  "auto" : "off");
2c6e0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2c6f0 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31 32 73  (p->out,"%12.12s
2c700 3a 20 25 73 5c 6e 22 2c 22 68 65 61 64 65 72 73  : %s\n","headers
2c710 22 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 73 68 6f  ", azBool[p->sho
2c720 77 48 65 61 64 65 72 21 3d 30 5d 29 3b 0a 20 20  wHeader!=0]);.  
2c730 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2c740 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20  >out, "%12.12s: 
2c750 25 73 5c 6e 22 2c 22 6d 6f 64 65 22 2c 20 6d 6f  %s\n","mode", mo
2c760 64 65 44 65 73 63 72 5b 70 2d 3e 6d 6f 64 65 5d  deDescr[p->mode]
2c770 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2c780 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e  tf(p->out, "%12.
2c790 31 32 73 3a 20 22 2c 20 22 6e 75 6c 6c 76 61 6c  12s: ", "nullval
2c7a0 75 65 22 29 3b 0a 20 20 20 20 20 20 6f 75 74 70  ue");.      outp
2c7b0 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f  ut_c_string(p->o
2c7c0 75 74 2c 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  ut, p->nullValue
2c7d0 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  );.      raw_pri
2c7e0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22  ntf(p->out, "\n"
2c7f0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2c800 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31  tf(p->out,"%12.1
2c810 32 73 3a 20 25 73 5c 6e 22 2c 22 6f 75 74 70 75  2s: %s\n","outpu
2c820 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t",.            
2c830 73 74 72 6c 65 6e 33 30 28 70 2d 3e 6f 75 74 66  strlen30(p->outf
2c840 69 6c 65 29 20 3f 20 70 2d 3e 6f 75 74 66 69 6c  ile) ? p->outfil
2c850 65 20 3a 20 22 73 74 64 6f 75 74 22 29 3b 0a 20  e : "stdout");. 
2c860 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
2c870 2d 3e 6f 75 74 2c 22 25 31 32 2e 31 32 73 3a 20  ->out,"%12.12s: 
2c880 22 2c 20 22 63 6f 6c 73 65 70 61 72 61 74 6f 72  ", "colseparator
2c890 22 29 3b 0a 20 20 20 20 20 20 6f 75 74 70 75 74  ");.      output
2c8a0 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  _c_string(p->out
2c8b0 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
2c8c0 72 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  r);.      raw_pr
2c8d0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
2c8e0 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ");.    utf8_pri
2c8f0 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e  ntf(p->out,"%12.
2c900 31 32 73 3a 20 22 2c 20 22 72 6f 77 73 65 70 61  12s: ", "rowsepa
2c910 72 61 74 6f 72 22 29 3b 0a 20 20 20 20 20 20 6f  rator");.      o
2c920 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70  utput_c_string(p
2c930 2d 3e 6f 75 74 2c 20 70 2d 3e 72 6f 77 53 65 70  ->out, p->rowSep
2c940 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 72  arator);.      r
2c950 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
2c960 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66  , "\n");.    utf
2c970 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2c980 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22   "%12.12s: %s\n"
2c990 2c 22 73 74 61 74 73 22 2c 20 61 7a 42 6f 6f 6c  ,"stats", azBool
2c9a0 5b 70 2d 3e 73 74 61 74 73 4f 6e 21 3d 30 5d 29  [p->statsOn!=0])
2c9b0 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  ;.    utf8_print
2c9c0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31  f(p->out, "%12.1
2c9d0 32 73 3a 20 22 2c 20 22 77 69 64 74 68 22 29 3b  2s: ", "width");
2c9e0 0a 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 69 3c  .    for (i=0;i<
2c9f0 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65 28 70  (int)ArraySize(p
2ca00 2d 3e 63 6f 6c 57 69 64 74 68 29 20 26 26 20 70  ->colWidth) && p
2ca10 2d 3e 63 6f 6c 57 69 64 74 68 5b 69 5d 20 21 3d  ->colWidth[i] !=
2ca20 20 30 3b 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20   0;i++) {.      
2ca30 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
2ca40 74 2c 20 22 25 64 20 22 2c 20 70 2d 3e 63 6f 6c  t, "%d ", p->col
2ca50 57 69 64 74 68 5b 69 5d 29 3b 0a 20 20 20 20 7d  Width[i]);.    }
2ca60 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
2ca70 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20  p->out, "\n");. 
2ca80 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
2ca90 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a  ->out, "%12.12s:
2caa0 20 25 73 5c 6e 22 2c 20 22 66 69 6c 65 6e 61 6d   %s\n", "filenam
2cab0 65 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  e",.            
2cac0 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e 61      p->zDbFilena
2cad0 6d 65 20 3f 20 70 2d 3e 7a 44 62 46 69 6c 65 6e  me ? p->zDbFilen
2cae0 61 6d 65 20 3a 20 22 22 29 3b 0a 20 20 7d 65 6c  ame : "");.  }el
2caf0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27  se..  if( c=='s'
2cb00 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
2cb10 67 5b 30 5d 2c 20 22 73 74 61 74 73 22 2c 20 6e  g[0], "stats", n
2cb20 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
2cb30 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
2cb40 20 70 2d 3e 73 74 61 74 73 4f 6e 20 3d 20 62 6f   p->statsOn = bo
2cb50 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
2cb60 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  [1]);.    }else 
2cb70 69 66 28 20 6e 41 72 67 3d 3d 31 20 29 7b 0a 20  if( nArg==1 ){. 
2cb80 20 20 20 20 20 64 69 73 70 6c 61 79 5f 73 74 61       display_sta
2cb90 74 73 28 70 2d 3e 64 62 2c 20 70 2c 20 30 29 3b  ts(p->db, p, 0);
2cba0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2cbb0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2cbc0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 74  err, "Usage: .st
2cbd0 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f 5c 6e 22 29  ats ?on|off?\n")
2cbe0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2cbf0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
2cc00 20 69 66 28 20 28 63 3d 3d 27 74 27 20 26 26 20   if( (c=='t' && 
2cc10 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>1 && strncmp(a
2cc20 7a 41 72 67 5b 30 5d 2c 20 22 74 61 62 6c 65 73  zArg[0], "tables
2cc30 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 20 7c 7c 20  ", n)==0).   || 
2cc40 28 63 3d 3d 27 69 27 20 26 26 20 28 73 74 72 6e  (c=='i' && (strn
2cc50 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69  cmp(azArg[0], "i
2cc60 6e 64 69 63 65 73 22 2c 20 6e 29 3d 3d 30 0a 20  ndices", n)==0. 
2cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc80 7c 7c 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  || strncmp(azArg
2cc90 5b 30 5d 2c 20 22 69 6e 64 65 78 65 73 22 2c 20  [0], "indexes", 
2cca0 6e 29 3d 3d 30 29 20 29 0a 20 20 29 7b 0a 20 20  n)==0) ).  ){.  
2ccb0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
2ccc0 70 53 74 6d 74 3b 0a 20 20 20 20 63 68 61 72 20  pStmt;.    char 
2ccd0 2a 2a 61 7a 52 65 73 75 6c 74 3b 0a 20 20 20 20  **azResult;.    
2cce0 69 6e 74 20 6e 52 6f 77 2c 20 6e 41 6c 6c 6f 63  int nRow, nAlloc
2ccf0 3b 0a 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20  ;.    int ii;.  
2cd00 20 20 53 68 65 6c 6c 54 65 78 74 20 73 3b 0a 20    ShellText s;. 
2cd10 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 29 3b     initText(&s);
2cd20 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
2cd30 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  0);.    rc = sql
2cd40 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
2cd50 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41 20 64  p->db, "PRAGMA d
2cd60 61 74 61 62 61 73 65 5f 6c 69 73 74 22 2c 20 2d  atabase_list", -
2cd70 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
2cd80 20 20 20 69 66 28 20 72 63 20 29 20 72 65 74 75     if( rc ) retu
2cd90 72 6e 20 73 68 65 6c 6c 44 61 74 61 62 61 73 65  rn shellDatabase
2cda0 45 72 72 6f 72 28 70 2d 3e 64 62 29 3b 0a 0a 20  Error(p->db);.. 
2cdb0 20 20 20 69 66 28 20 6e 41 72 67 3e 32 20 26 26     if( nArg>2 &&
2cdc0 20 63 3d 3d 27 69 27 20 29 7b 0a 20 20 20 20 20   c=='i' ){.     
2cdd0 20 2f 2a 20 49 74 20 69 73 20 61 6e 20 68 69 73   /* It is an his
2cde0 74 6f 72 69 63 61 6c 20 61 63 63 69 64 65 6e 74  torical accident
2cdf0 20 74 68 61 74 20 74 68 65 20 2e 69 6e 64 65 78   that the .index
2ce00 65 73 20 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 73  es command shows
2ce10 20 61 6e 20 65 72 72 6f 72 0a 20 20 20 20 20 20   an error.      
2ce20 2a 2a 20 77 68 65 6e 20 63 61 6c 6c 65 64 20 77  ** when called w
2ce30 69 74 68 20 74 68 65 20 77 72 6f 6e 67 20 6e 75  ith the wrong nu
2ce40 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
2ce50 73 20 77 68 65 72 65 61 73 20 74 68 65 20 2e 74  s whereas the .t
2ce60 61 62 6c 65 73 0a 20 20 20 20 20 20 2a 2a 20 63  ables.      ** c
2ce70 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 2e  ommand does not.
2ce80 20 2a 2f 0a 20 20 20 20 20 20 72 61 77 5f 70 72   */.      raw_pr
2ce90 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
2cea0 61 67 65 3a 20 2e 69 6e 64 65 78 65 73 20 3f 4c  age: .indexes ?L
2ceb0 49 4b 45 2d 50 41 54 54 45 52 4e 3f 5c 6e 22 29  IKE-PATTERN?\n")
2cec0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2ced0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
2cee0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
2cef0 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 30    }.    for(ii=0
2cf00 3b 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ; sqlite3_step(p
2cf10 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
2cf20 57 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  W; ii++){.      
2cf30 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 4e  const char *zDbN
2cf40 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  ame = (const cha
2cf50 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
2cf60 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 29  n_text(pStmt, 1)
2cf70 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 44 62 4e  ;.      if( zDbN
2cf80 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ame==0 ) continu
2cf90 65 3b 0a 20 20 20 20 20 20 69 66 28 20 73 2e 7a  e;.      if( s.z
2cfa0 20 26 26 20 73 2e 7a 5b 30 5d 20 29 20 61 70 70   && s.z[0] ) app
2cfb0 65 6e 64 54 65 78 74 28 26 73 2c 20 22 20 55 4e  endText(&s, " UN
2cfc0 49 4f 4e 20 41 4c 4c 20 22 2c 20 30 29 3b 0a 20  ION ALL ", 0);. 
2cfd0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
2cfe0 5f 73 74 72 69 63 6d 70 28 7a 44 62 4e 61 6d 65  _stricmp(zDbName
2cff0 2c 20 22 6d 61 69 6e 22 29 3d 3d 30 20 29 7b 0a  , "main")==0 ){.
2d000 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
2d010 78 74 28 26 73 2c 20 22 53 45 4c 45 43 54 20 6e  xt(&s, "SELECT n
2d020 61 6d 65 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a  ame FROM ", 0);.
2d030 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
2d040 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2d050 26 73 2c 20 22 53 45 4c 45 43 54 20 22 2c 20 30  &s, "SELECT ", 0
2d060 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
2d070 64 54 65 78 74 28 26 73 2c 20 7a 44 62 4e 61 6d  dText(&s, zDbNam
2d080 65 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20 20 20  e, '\'');.      
2d090 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c    appendText(&s,
2d0a0 20 22 7c 7c 27 2e 27 7c 7c 6e 61 6d 65 20 46 52   "||'.'||name FR
2d0b0 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  OM ", 0);.      
2d0c0 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
2d0d0 78 74 28 26 73 2c 20 7a 44 62 4e 61 6d 65 2c 20  xt(&s, zDbName, 
2d0e0 27 22 27 29 3b 0a 20 20 20 20 20 20 61 70 70 65  '"');.      appe
2d0f0 6e 64 54 65 78 74 28 26 73 2c 20 22 2e 73 71 6c  ndText(&s, ".sql
2d100 69 74 65 5f 6d 61 73 74 65 72 20 22 2c 20 30 29  ite_master ", 0)
2d110 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27  ;.      if( c=='
2d120 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70  t' ){.        ap
2d130 70 65 6e 64 54 65 78 74 28 26 73 2c 22 20 57 48  pendText(&s," WH
2d140 45 52 45 20 74 79 70 65 20 49 4e 20 28 27 74 61  ERE type IN ('ta
2d150 62 6c 65 27 2c 27 76 69 65 77 27 29 22 0a 20 20  ble','view')".  
2d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d170 20 20 20 20 22 20 20 20 41 4e 44 20 6e 61 6d 65      "   AND name
2d180 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69 74   NOT LIKE 'sqlit
2d190 65 5f 25 27 22 0a 20 20 20 20 20 20 20 20 20 20  e_%'".          
2d1a0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 20              "   
2d1b0 41 4e 44 20 6e 61 6d 65 20 4c 49 4b 45 20 3f 31  AND name LIKE ?1
2d1c0 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ", 0);.      }el
2d1d0 73 65 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65  se{.        appe
2d1e0 6e 64 54 65 78 74 28 26 73 2c 22 20 57 48 45 52  ndText(&s," WHER
2d1f0 45 20 74 79 70 65 3d 27 69 6e 64 65 78 27 22 0a  E type='index'".
2d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d210 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 74 62        "   AND tb
2d220 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 3f 31 22 2c  l_name LIKE ?1",
2d230 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   0);.      }.   
2d240 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
2d250 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
2d260 6d 74 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  mt);.    appendT
2d270 65 78 74 28 26 73 2c 20 22 20 4f 52 44 45 52 20  ext(&s, " ORDER 
2d280 42 59 20 31 22 2c 20 30 29 3b 0a 20 20 20 20 72  BY 1", 0);.    r
2d290 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
2d2a0 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 73 2e  are_v2(p->db, s.
2d2b0 7a 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30  z, -1, &pStmt, 0
2d2c0 29 3b 0a 20 20 20 20 66 72 65 65 54 65 78 74 28  );.    freeText(
2d2d0 26 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  &s);.    if( rc 
2d2e0 29 20 72 65 74 75 72 6e 20 73 68 65 6c 6c 44 61  ) return shellDa
2d2f0 74 61 62 61 73 65 45 72 72 6f 72 28 70 2d 3e 64  tabaseError(p->d
2d300 62 29 3b 0a 0a 20 20 20 20 2f 2a 20 52 75 6e 20  b);..    /* Run 
2d310 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
2d320 74 20 70 72 65 70 61 72 65 64 20 62 79 20 74 68  t prepared by th
2d330 65 20 61 62 6f 76 65 20 62 6c 6f 63 6b 2e 20 53  e above block. S
2d340 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  tore the results
2d350 0a 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 61 72  .    ** as an ar
2d360 72 61 79 20 6f 66 20 6e 75 6c 2d 74 65 72 6d 69  ray of nul-termi
2d370 6e 61 74 65 64 20 73 74 72 69 6e 67 73 20 69 6e  nated strings in
2d380 20 61 7a 52 65 73 75 6c 74 5b 5d 2e 20 20 2a 2f   azResult[].  */
2d390 0a 20 20 20 20 6e 52 6f 77 20 3d 20 6e 41 6c 6c  .    nRow = nAll
2d3a0 6f 63 20 3d 20 30 3b 0a 20 20 20 20 61 7a 52 65  oc = 0;.    azRe
2d3b0 73 75 6c 74 20 3d 20 30 3b 0a 20 20 20 20 69 66  sult = 0;.    if
2d3c0 28 20 6e 41 72 67 3e 31 20 29 7b 0a 20 20 20 20  ( nArg>1 ){.    
2d3d0 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
2d3e0 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20 61 7a  ext(pStmt, 1, az
2d3f0 41 72 67 5b 31 5d 2c 20 2d 31 2c 20 53 51 4c 49  Arg[1], -1, SQLI
2d400 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
2d410 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2d420 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
2d430 74 28 70 53 74 6d 74 2c 20 31 2c 20 22 25 22 2c  t(pStmt, 1, "%",
2d440 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54   -1, SQLITE_STAT
2d450 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  IC);.    }.    w
2d460 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74  hile( sqlite3_st
2d470 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
2d480 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 69  E_ROW ){.      i
2d490 66 28 20 6e 52 6f 77 3e 3d 6e 41 6c 6c 6f 63 20  f( nRow>=nAlloc 
2d4a0 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20  ){.        char 
2d4b0 2a 2a 61 7a 4e 65 77 3b 0a 20 20 20 20 20 20 20  **azNew;.       
2d4c0 20 69 6e 74 20 6e 32 20 3d 20 6e 41 6c 6c 6f 63   int n2 = nAlloc
2d4d0 2a 32 20 2b 20 31 30 3b 0a 20 20 20 20 20 20 20  *2 + 10;.       
2d4e0 20 61 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 33   azNew = sqlite3
2d4f0 5f 72 65 61 6c 6c 6f 63 36 34 28 61 7a 52 65 73  _realloc64(azRes
2d500 75 6c 74 2c 20 73 69 7a 65 6f 66 28 61 7a 52 65  ult, sizeof(azRe
2d510 73 75 6c 74 5b 30 5d 29 2a 6e 32 29 3b 0a 20 20  sult[0])*n2);.  
2d520 20 20 20 20 20 20 69 66 28 20 61 7a 4e 65 77 3d        if( azNew=
2d530 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
2d540 72 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45  rc = shellNomemE
2d550 72 72 6f 72 28 29 3b 0a 20 20 20 20 20 20 20 20  rror();.        
2d560 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
2d570 20 7d 0a 20 20 20 20 20 20 20 20 6e 41 6c 6c 6f   }.        nAllo
2d580 63 20 3d 20 6e 32 3b 0a 20 20 20 20 20 20 20 20  c = n2;.        
2d590 61 7a 52 65 73 75 6c 74 20 3d 20 61 7a 4e 65 77  azResult = azNew
2d5a0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
2d5b0 61 7a 52 65 73 75 6c 74 5b 6e 52 6f 77 5d 20 3d  azResult[nRow] =
2d5c0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2d5d0 28 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 63  ("%s", sqlite3_c
2d5e0 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74  olumn_text(pStmt
2d5f0 2c 20 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  , 0));.      if(
2d600 20 30 3d 3d 61 7a 52 65 73 75 6c 74 5b 6e 52 6f   0==azResult[nRo
2d610 77 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  w] ){.        rc
2d620 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45 72 72   = shellNomemErr
2d630 6f 72 28 29 3b 0a 20 20 20 20 20 20 20 20 62 72  or();.        br
2d640 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
2d650 20 20 20 6e 52 6f 77 2b 2b 3b 0a 20 20 20 20 7d     nRow++;.    }
2d660 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
2d670 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
2d680 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
2d690 20 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 44       rc = shellD
2d6a0 61 74 61 62 61 73 65 45 72 72 6f 72 28 70 2d 3e  atabaseError(p->
2d6b0 64 62 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  db);.    }..    
2d6c0 2f 2a 20 50 72 65 74 74 79 2d 70 72 69 6e 74 20  /* Pretty-print 
2d6d0 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
2d6e0 61 72 72 61 79 20 61 7a 52 65 73 75 6c 74 5b 5d  array azResult[]
2d6f0 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 2a   to the output *
2d700 2f 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 30 20  /.    if( rc==0 
2d710 26 26 20 6e 52 6f 77 3e 30 20 29 7b 0a 20 20 20  && nRow>0 ){.   
2d720 20 20 20 69 6e 74 20 6c 65 6e 2c 20 6d 61 78 6c     int len, maxl
2d730 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e  en = 0;.      in
2d740 74 20 69 2c 20 6a 3b 0a 20 20 20 20 20 20 69 6e  t i, j;.      in
2d750 74 20 6e 50 72 69 6e 74 43 6f 6c 2c 20 6e 50 72  t nPrintCol, nPr
2d760 69 6e 74 52 6f 77 3b 0a 20 20 20 20 20 20 66 6f  intRow;.      fo
2d770 72 28 69 3d 30 3b 20 69 3c 6e 52 6f 77 3b 20 69  r(i=0; i<nRow; i
2d780 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ++){.        len
2d790 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 52 65   = strlen30(azRe
2d7a0 73 75 6c 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20  sult[i]);.      
2d7b0 20 20 69 66 28 20 6c 65 6e 3e 6d 61 78 6c 65 6e    if( len>maxlen
2d7c0 20 29 20 6d 61 78 6c 65 6e 20 3d 20 6c 65 6e 3b   ) maxlen = len;
2d7d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e  .      }.      n
2d7e0 50 72 69 6e 74 43 6f 6c 20 3d 20 38 30 2f 28 6d  PrintCol = 80/(m
2d7f0 61 78 6c 65 6e 2b 32 29 3b 0a 20 20 20 20 20 20  axlen+2);.      
2d800 69 66 28 20 6e 50 72 69 6e 74 43 6f 6c 3c 31 20  if( nPrintCol<1 
2d810 29 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20 31 3b  ) nPrintCol = 1;
2d820 0a 20 20 20 20 20 20 6e 50 72 69 6e 74 52 6f 77  .      nPrintRow
2d830 20 3d 20 28 6e 52 6f 77 20 2b 20 6e 50 72 69 6e   = (nRow + nPrin
2d840 74 43 6f 6c 20 2d 20 31 29 2f 6e 50 72 69 6e 74  tCol - 1)/nPrint
2d850 43 6f 6c 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  Col;.      for(i
2d860 3d 30 3b 20 69 3c 6e 50 72 69 6e 74 52 6f 77 3b  =0; i<nPrintRow;
2d870 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 66   i++){.        f
2d880 6f 72 28 6a 3d 69 3b 20 6a 3c 6e 52 6f 77 3b 20  or(j=i; j<nRow; 
2d890 6a 2b 3d 6e 50 72 69 6e 74 52 6f 77 29 7b 0a 20  j+=nPrintRow){. 
2d8a0 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
2d8b0 53 70 20 3d 20 6a 3c 6e 50 72 69 6e 74 52 6f 77  Sp = j<nPrintRow
2d8c0 20 3f 20 22 22 20 3a 20 22 20 20 22 3b 0a 20 20   ? "" : "  ";.  
2d8d0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
2d8e0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 25  ntf(p->out, "%s%
2d8f0 2d 2a 73 22 2c 20 7a 53 70 2c 20 6d 61 78 6c 65  -*s", zSp, maxle
2d900 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n,.             
2d910 20 20 20 20 20 20 20 20 20 61 7a 52 65 73 75 6c           azResul
2d920 74 5b 6a 5d 20 3f 20 61 7a 52 65 73 75 6c 74 5b  t[j] ? azResult[
2d930 6a 5d 3a 22 22 29 3b 0a 20 20 20 20 20 20 20 20  j]:"");.        
2d940 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  }.        raw_pr
2d950 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
2d960 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
2d970 7d 0a 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  }..    for(ii=0;
2d980 20 69 69 3c 6e 52 6f 77 3b 20 69 69 2b 2b 29 20   ii<nRow; ii++) 
2d990 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 7a 52  sqlite3_free(azR
2d9a0 65 73 75 6c 74 5b 69 69 5d 29 3b 0a 20 20 20 20  esult[ii]);.    
2d9b0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 7a 52  sqlite3_free(azR
2d9c0 65 73 75 6c 74 29 3b 0a 20 20 7d 65 6c 73 65 0a  esult);.  }else.
2d9d0 0a 20 20 2f 2a 20 42 65 67 69 6e 20 72 65 64 69  .  /* Begin redi
2d9e0 72 65 63 74 69 6e 67 20 6f 75 74 70 75 74 20 74  recting output t
2d9f0 6f 20 74 68 65 20 66 69 6c 65 20 22 74 65 73 74  o the file "test
2da00 63 61 73 65 2d 6f 75 74 2e 74 78 74 22 20 2a 2f  case-out.txt" */
2da10 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
2da20 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 30 5d   strcmp(azArg[0]
2da30 2c 22 74 65 73 74 63 61 73 65 22 29 3d 3d 30 20  ,"testcase")==0 
2da40 29 7b 0a 20 20 20 20 6f 75 74 70 75 74 5f 72 65  ){.    output_re
2da50 73 65 74 28 70 29 3b 0a 20 20 20 20 70 2d 3e 6f  set(p);.    p->o
2da60 75 74 20 3d 20 6f 75 74 70 75 74 5f 66 69 6c 65  ut = output_file
2da70 5f 6f 70 65 6e 28 22 74 65 73 74 63 61 73 65 2d  _open("testcase-
2da80 6f 75 74 2e 74 78 74 22 29 3b 0a 20 20 20 20 69  out.txt");.    i
2da90 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a  f( p->out==0 ){.
2daa0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2dab0 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
2dac0 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27 74 65   cannot open 'te
2dad0 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c  stcase-out.txt'\
2dae0 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  n");.    }.    i
2daf0 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b 0a 20 20  f( nArg>=2 ){.  
2db00 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2db10 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 7a  intf(sizeof(p->z
2db20 54 65 73 74 63 61 73 65 29 2c 20 70 2d 3e 7a 54  Testcase), p->zT
2db30 65 73 74 63 61 73 65 2c 20 22 25 73 22 2c 20 61  estcase, "%s", a
2db40 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
2db50 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
2db60 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
2db70 6f 66 28 70 2d 3e 7a 54 65 73 74 63 61 73 65 29  of(p->zTestcase)
2db80 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73 65 2c 20  , p->zTestcase, 
2db90 22 3f 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  "?");.    }.  }e
2dba0 6c 73 65 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  lse..#ifndef SQL
2dbb0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
2dbc0 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20 6e   if( c=='t' && n
2dbd0 3e 3d 38 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=8 && strncmp(a
2dbe0 7a 41 72 67 5b 30 5d 2c 20 22 74 65 73 74 63 74  zArg[0], "testct
2dbf0 72 6c 22 2c 20 6e 29 3d 3d 30 20 26 26 20 6e 41  rl", n)==0 && nA
2dc00 72 67 3e 3d 32 20 29 7b 0a 20 20 20 20 73 74 61  rg>=2 ){.    sta
2dc10 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
2dc20 20 7b 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 20   {.       const 
2dc30 63 68 61 72 20 2a 7a 43 74 72 6c 4e 61 6d 65 3b  char *zCtrlName;
2dc40 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 61 20     /* Name of a 
2dc50 74 65 73 74 2d 63 6f 6e 74 72 6f 6c 20 6f 70 74  test-control opt
2dc60 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 20 69 6e  ion */.       in
2dc70 74 20 63 74 72 6c 43 6f 64 65 3b 20 20 20 20 20  t ctrlCode;     
2dc80 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
2dc90 72 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20  r code for that 
2dca0 6f 70 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20  option */.    } 
2dcb0 61 43 74 72 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20  aCtrl[] = {.    
2dcc0 20 20 7b 20 22 70 72 6e 67 5f 73 61 76 65 22 2c    { "prng_save",
2dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
2dce0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e  ITE_TESTCTRL_PRN
2dcf0 47 5f 53 41 56 45 20 20 20 20 20 20 20 20 20 20  G_SAVE          
2dd00 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
2dd10 70 72 6e 67 5f 72 65 73 74 6f 72 65 22 2c 20 20  prng_restore",  
2dd20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54          SQLITE_T
2dd30 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53  ESTCTRL_PRNG_RES
2dd40 54 4f 52 45 20 20 20 20 20 20 20 20 20 20 20 7d  TORE           }
2dd50 2c 0a 20 20 20 20 20 20 7b 20 22 70 72 6e 67 5f  ,.      { "prng_
2dd60 72 65 73 65 74 22 2c 20 20 20 20 20 20 20 20 20  reset",         
2dd70 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54     SQLITE_TESTCT
2dd80 52 4c 5f 50 52 4e 47 5f 52 45 53 45 54 20 20 20  RL_PRNG_RESET   
2dd90 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2dda0 20 20 20 7b 20 22 62 69 74 76 65 63 5f 74 65 73     { "bitvec_tes
2ddb0 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 53 51  t",           SQ
2ddc0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 42 49  LITE_TESTCTRL_BI
2ddd0 54 56 45 43 5f 54 45 53 54 20 20 20 20 20 20 20  TVEC_TEST       
2dde0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
2ddf0 22 66 61 75 6c 74 5f 69 6e 73 74 61 6c 6c 22 2c  "fault_install",
2de00 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
2de10 54 45 53 54 43 54 52 4c 5f 46 41 55 4c 54 5f 49  TESTCTRL_FAULT_I
2de20 4e 53 54 41 4c 4c 20 20 20 20 20 20 20 20 20 20  NSTALL          
2de30 7d 2c 0a 20 20 20 20 20 20 7b 20 22 62 65 6e 69  },.      { "beni
2de40 67 6e 5f 6d 61 6c 6c 6f 63 5f 68 6f 6f 6b 73 22  gn_malloc_hooks"
2de50 2c 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ,   SQLITE_TESTC
2de60 54 52 4c 5f 42 45 4e 49 47 4e 5f 4d 41 4c 4c 4f  TRL_BENIGN_MALLO
2de70 43 5f 48 4f 4f 4b 53 20 20 20 20 7d 2c 0a 20 20  C_HOOKS    },.  
2de80 20 20 20 20 7b 20 22 70 65 6e 64 69 6e 67 5f 62      { "pending_b
2de90 79 74 65 22 2c 20 20 20 20 20 20 20 20 20 20 53  yte",          S
2dea0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50  QLITE_TESTCTRL_P
2deb0 45 4e 44 49 4e 47 5f 42 59 54 45 20 20 20 20 20  ENDING_BYTE     
2dec0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
2ded0 20 22 61 73 73 65 72 74 22 2c 20 20 20 20 20 20   "assert",      
2dee0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
2def0 5f 54 45 53 54 43 54 52 4c 5f 41 53 53 45 52 54  _TESTCTRL_ASSERT
2df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df10 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 61 6c 77   },.      { "alw
2df20 61 79 73 22 2c 20 20 20 20 20 20 20 20 20 20 20  ays",           
2df30 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54       SQLITE_TEST
2df40 43 54 52 4c 5f 41 4c 57 41 59 53 20 20 20 20 20  CTRL_ALWAYS     
2df50 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2df60 20 20 20 20 20 7b 20 22 72 65 73 65 72 76 65 22       { "reserve"
2df70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
2df80 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2df90 52 45 53 45 52 56 45 20 20 20 20 20 20 20 20 20  RESERVE         
2dfa0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
2dfb0 7b 20 22 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  { "optimizations
2dfc0 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49 54  ",         SQLIT
2dfd0 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
2dfe0 49 5a 41 54 49 4f 4e 53 20 20 20 20 20 20 20 20  IZATIONS        
2dff0 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 69 73    },.      { "is
2e000 6b 65 79 77 6f 72 64 22 2c 20 20 20 20 20 20 20  keyword",       
2e010 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53        SQLITE_TES
2e020 54 43 54 52 4c 5f 49 53 4b 45 59 57 4f 52 44 20  TCTRL_ISKEYWORD 
2e030 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
2e040 20 20 20 20 20 20 7b 20 22 62 79 74 65 6f 72 64        { "byteord
2e050 65 72 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  er",            
2e060 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2e070 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 20 20  _BYTEORDER      
2e080 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
2e090 20 7b 20 22 6e 65 76 65 72 5f 63 6f 72 72 75 70   { "never_corrup
2e0a0 74 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49  t",         SQLI
2e0b0 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e 45 56 45  TE_TESTCTRL_NEVE
2e0c0 52 5f 43 4f 52 52 55 50 54 20 20 20 20 20 20 20  R_CORRUPT       
2e0d0 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 69     },.      { "i
2e0e0 6d 70 6f 73 74 65 72 22 2c 20 20 20 20 20 20 20  mposter",       
2e0f0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45         SQLITE_TE
2e100 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 20  STCTRL_IMPOSTER 
2e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
2e120 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20  .    };.    int 
2e130 74 65 73 74 63 74 72 6c 20 3d 20 2d 31 3b 0a 20  testctrl = -1;. 
2e140 20 20 20 69 6e 74 20 72 63 32 20 3d 20 30 3b 0a     int rc2 = 0;.
2e150 20 20 20 20 69 6e 74 20 69 2c 20 6e 32 3b 0a 20      int i, n2;. 
2e160 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29     open_db(p, 0)
2e170 3b 0a 0a 20 20 20 20 2f 2a 20 63 6f 6e 76 65 72  ;..    /* conver
2e180 74 20 74 65 73 74 63 74 72 6c 20 74 65 78 74 20  t testctrl text 
2e190 6f 70 74 69 6f 6e 20 74 6f 20 76 61 6c 75 65 2e  option to value.
2e1a0 20 61 6c 6c 6f 77 20 61 6e 79 20 75 6e 69 71 75   allow any uniqu
2e1b0 65 20 70 72 65 66 69 78 0a 20 20 20 20 2a 2a 20  e prefix.    ** 
2e1c0 6f 66 20 74 68 65 20 6f 70 74 69 6f 6e 20 6e 61  of the option na
2e1d0 6d 65 2c 20 6f 72 20 61 20 6e 75 6d 65 72 69 63  me, or a numeric
2e1e0 61 6c 20 76 61 6c 75 65 2e 20 2a 2f 0a 20 20 20  al value. */.   
2e1f0 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30 28 61   n2 = strlen30(a
2e200 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 66 6f  zArg[1]);.    fo
2e210 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69  r(i=0; i<ArraySi
2e220 7a 65 28 61 43 74 72 6c 29 3b 20 69 2b 2b 29 7b  ze(aCtrl); i++){
2e230 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 6e 63  .      if( strnc
2e240 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20 61 43 74  mp(azArg[1], aCt
2e250 72 6c 5b 69 5d 2e 7a 43 74 72 6c 4e 61 6d 65 2c  rl[i].zCtrlName,
2e260 20 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20   n2)==0 ){.     
2e270 20 20 20 69 66 28 20 74 65 73 74 63 74 72 6c 3c     if( testctrl<
2e280 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74  0 ){.          t
2e290 65 73 74 63 74 72 6c 20 3d 20 61 43 74 72 6c 5b  estctrl = aCtrl[
2e2a0 69 5d 2e 63 74 72 6c 43 6f 64 65 3b 0a 20 20 20  i].ctrlCode;.   
2e2b0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
2e2c0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2e2d0 66 28 73 74 64 65 72 72 2c 20 22 61 6d 62 69 67  f(stderr, "ambig
2e2e0 75 6f 75 73 20 6f 70 74 69 6f 6e 20 6e 61 6d 65  uous option name
2e2f0 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41  : \"%s\"\n", azA
2e300 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[1]);.        
2e310 20 20 74 65 73 74 63 74 72 6c 20 3d 20 2d 31 3b    testctrl = -1;
2e320 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
2e330 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2e340 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
2e350 28 20 74 65 73 74 63 74 72 6c 3c 30 20 29 20 74  ( testctrl<0 ) t
2e360 65 73 74 63 74 72 6c 20 3d 20 28 69 6e 74 29 69  estctrl = (int)i
2e370 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72  ntegerValue(azAr
2e380 67 5b 31 5d 29 3b 0a 20 20 20 20 69 66 28 20 28  g[1]);.    if( (
2e390 74 65 73 74 63 74 72 6c 3c 53 51 4c 49 54 45 5f  testctrl<SQLITE_
2e3a0 54 45 53 54 43 54 52 4c 5f 46 49 52 53 54 29 20  TESTCTRL_FIRST) 
2e3b0 7c 7c 20 28 74 65 73 74 63 74 72 6c 3e 53 51 4c  || (testctrl>SQL
2e3c0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4c 41 53  ITE_TESTCTRL_LAS
2e3d0 54 29 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  T) ){.      utf8
2e3e0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
2e3f0 45 72 72 6f 72 3a 20 69 6e 76 61 6c 69 64 20 74  Error: invalid t
2e400 65 73 74 63 74 72 6c 20 6f 70 74 69 6f 6e 3a 20  estctrl option: 
2e410 25 73 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29  %s\n", azArg[1])
2e420 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2e430 20 20 20 73 77 69 74 63 68 28 74 65 73 74 63 74     switch(testct
2e440 72 6c 29 7b 0a 0a 20 20 20 20 20 20 20 20 2f 2a  rl){..        /*
2e450 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
2e460 6e 74 72 6f 6c 28 69 6e 74 2c 20 64 62 2c 20 69  ntrol(int, db, i
2e470 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63  nt) */.        c
2e480 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
2e490 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
2e4a0 53 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  S:.        case 
2e4b0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2e4c0 52 45 53 45 52 56 45 3a 0a 20 20 20 20 20 20 20  RESERVE:.       
2e4d0 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 33 20 29     if( nArg==3 )
2e4e0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  {.            in
2e4f0 74 20 6f 70 74 20 3d 20 28 69 6e 74 29 73 74 72  t opt = (int)str
2e500 74 6f 6c 28 61 7a 41 72 67 5b 32 5d 2c 20 30 2c  tol(azArg[2], 0,
2e510 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
2e520 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74   rc2 = sqlite3_t
2e530 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74  est_control(test
2e540 63 74 72 6c 2c 20 70 2d 3e 64 62 2c 20 6f 70 74  ctrl, p->db, opt
2e550 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  );.            r
2e560 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
2e570 2c 20 22 25 64 20 28 30 78 25 30 38 78 29 5c 6e  , "%d (0x%08x)\n
2e580 22 2c 20 72 63 32 2c 20 72 63 32 29 3b 0a 20 20  ", rc2, rc2);.  
2e590 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
2e5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66  .            utf
2e5b0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
2e5c0 22 45 72 72 6f 72 3a 20 74 65 73 74 63 74 72 6c  "Error: testctrl
2e5d0 20 25 73 20 74 61 6b 65 73 20 61 20 73 69 6e 67   %s takes a sing
2e5e0 6c 65 20 69 6e 74 20 6f 70 74 69 6f 6e 5c 6e 22  le int option\n"
2e5f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2e600 20 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b        azArg[1]);
2e610 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
2e620 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20         break;.. 
2e630 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65         /* sqlite
2e640 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69  3_test_control(i
2e650 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63  nt) */.        c
2e660 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
2e670 54 52 4c 5f 50 52 4e 47 5f 53 41 56 45 3a 0a 20  TRL_PRNG_SAVE:. 
2e680 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
2e690 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47  TE_TESTCTRL_PRNG
2e6a0 5f 52 45 53 54 4f 52 45 3a 0a 20 20 20 20 20 20  _RESTORE:.      
2e6b0 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
2e6c0 53 54 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53 45  STCTRL_PRNG_RESE
2e6d0 54 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  T:.        case 
2e6e0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2e6f0 42 59 54 45 4f 52 44 45 52 3a 0a 20 20 20 20 20  BYTEORDER:.     
2e700 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32       if( nArg==2
2e710 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
2e720 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65  rc2 = sqlite3_te
2e730 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63  st_control(testc
2e740 74 72 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  trl);.          
2e750 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
2e760 6f 75 74 2c 20 22 25 64 20 28 30 78 25 30 38 78  out, "%d (0x%08x
2e770 29 5c 6e 22 2c 20 72 63 32 2c 20 72 63 32 29 3b  )\n", rc2, rc2);
2e780 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
2e790 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
2e7a0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2e7b0 72 72 2c 22 45 72 72 6f 72 3a 20 74 65 73 74 63  rr,"Error: testc
2e7c0 74 72 6c 20 25 73 20 74 61 6b 65 73 20 6e 6f 20  trl %s takes no 
2e7d0 6f 70 74 69 6f 6e 73 5c 6e 22 2c 0a 20 20 20 20  options\n",.    
2e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7f0 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20      azArg[1]);. 
2e800 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2e810 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20       break;..   
2e820 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f       /* sqlite3_
2e830 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74  test_control(int
2e840 2c 20 75 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20  , uint) */.     
2e850 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
2e860 45 53 54 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f  ESTCTRL_PENDING_
2e870 42 59 54 45 3a 0a 20 20 20 20 20 20 20 20 20 20  BYTE:.          
2e880 69 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20  if( nArg==3 ){. 
2e890 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 69 67             unsig
2e8a0 6e 65 64 20 69 6e 74 20 6f 70 74 20 3d 20 28 75  ned int opt = (u
2e8b0 6e 73 69 67 6e 65 64 20 69 6e 74 29 69 6e 74 65  nsigned int)inte
2e8c0 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 32  gerValue(azArg[2
2e8d0 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
2e8e0 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65  rc2 = sqlite3_te
2e8f0 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63  st_control(testc
2e900 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20  trl, opt);.     
2e910 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
2e920 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30  f(p->out, "%d (0
2e930 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20  x%08x)\n", rc2, 
2e940 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  rc2);.          
2e950 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
2e960 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2e970 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
2e980 74 65 73 74 63 74 72 6c 20 25 73 20 74 61 6b 65  testctrl %s take
2e990 73 20 61 20 73 69 6e 67 6c 65 20 75 6e 73 69 67  s a single unsig
2e9a0 6e 65 64 22 0a 20 20 20 20 20 20 20 20 20 20 20  ned".           
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9c0 22 20 69 6e 74 20 6f 70 74 69 6f 6e 5c 6e 22 2c  " int option\n",
2e9d0 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
2e9e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2e9f0 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20    break;..      
2ea00 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65 73    /* sqlite3_tes
2ea10 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20 69  t_control(int, i
2ea20 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63  nt) */.        c
2ea30 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
2ea40 54 52 4c 5f 41 53 53 45 52 54 3a 0a 20 20 20 20  TRL_ASSERT:.    
2ea50 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
2ea60 54 45 53 54 43 54 52 4c 5f 41 4c 57 41 59 53 3a  TESTCTRL_ALWAYS:
2ea70 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51  .        case SQ
2ea80 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e 45  LITE_TESTCTRL_NE
2ea90 56 45 52 5f 43 4f 52 52 55 50 54 3a 0a 20 20 20  VER_CORRUPT:.   
2eaa0 20 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d         if( nArg=
2eab0 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =3 ){.          
2eac0 20 20 69 6e 74 20 6f 70 74 20 3d 20 62 6f 6f 6c    int opt = bool
2ead0 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 32  eanValue(azArg[2
2eae0 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
2eaf0 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65  rc2 = sqlite3_te
2eb00 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63  st_control(testc
2eb10 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20  trl, opt);.     
2eb20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
2eb30 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30  f(p->out, "%d (0
2eb40 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20  x%08x)\n", rc2, 
2eb50 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  rc2);.          
2eb60 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
2eb70 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2eb80 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
2eb90 74 65 73 74 63 74 72 6c 20 25 73 20 74 61 6b 65  testctrl %s take
2eba0 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 20 6f  s a single int o
2ebb0 70 74 69 6f 6e 5c 6e 22 2c 0a 20 20 20 20 20 20  ption\n",.      
2ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ebd0 20 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b        azArg[1]);
2ebe0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
2ebf0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20         break;.. 
2ec00 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65         /* sqlite
2ec10 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69  3_test_control(i
2ec20 6e 74 2c 20 63 68 61 72 20 2a 29 20 2a 2f 0a 23  nt, char *) */.#
2ec30 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 4b  ifdef SQLITE_N_K
2ec40 45 59 57 4f 52 44 0a 20 20 20 20 20 20 20 20 63  EYWORD.        c
2ec50 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
2ec60 54 52 4c 5f 49 53 4b 45 59 57 4f 52 44 3a 0a 20  TRL_ISKEYWORD:. 
2ec70 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 41 72           if( nAr
2ec80 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20  g==3 ){.        
2ec90 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
2eca0 6f 70 74 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a  opt = azArg[2];.
2ecb0 20 20 20 20 20 20 20 20 20 20 20 20 72 63 32 20              rc2 
2ecc0 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  = sqlite3_test_c
2ecd0 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74 72 6c 2c  ontrol(testctrl,
2ece0 20 6f 70 74 29 3b 0a 20 20 20 20 20 20 20 20 20   opt);.         
2ecf0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
2ed00 3e 6f 75 74 2c 20 22 25 64 20 28 30 78 25 30 38  >out, "%d (0x%08
2ed10 78 29 5c 6e 22 2c 20 72 63 32 2c 20 72 63 32 29  x)\n", rc2, rc2)
2ed20 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ;.          } el
2ed30 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
2ed40 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
2ed50 65 72 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  err,.           
2ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45 72               "Er
2ed70 72 6f 72 3a 20 74 65 73 74 63 74 72 6c 20 25 73  ror: testctrl %s
2ed80 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
2ed90 63 68 61 72 20 2a 20 6f 70 74 69 6f 6e 5c 6e 22  char * option\n"
2eda0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2edb0 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b            azArg[
2edc0 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  1]);.          }
2edd0 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
2ede0 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  ;.#endif..      
2edf0 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
2ee00 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 3a  STCTRL_IMPOSTER:
2ee10 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e  .          if( n
2ee20 41 72 67 3d 3d 35 20 29 7b 0a 20 20 20 20 20 20  Arg==5 ){.      
2ee30 20 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c 69        rc2 = sqli
2ee40 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
2ee50 28 74 65 73 74 63 74 72 6c 2c 20 70 2d 3e 64 62  (testctrl, p->db
2ee60 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2ee70 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72              azAr
2ee80 67 5b 32 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  g[2],.          
2ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eea0 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41  integerValue(azA
2eeb0 72 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20 20 20  rg[3]),.        
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eed0 20 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61    integerValue(a
2eee0 7a 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20 20 20  zArg[4]));.     
2eef0 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
2ef00 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30  f(p->out, "%d (0
2ef10 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20  x%08x)\n", rc2, 
2ef20 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  rc2);.          
2ef30 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
2ef40 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2ef50 64 65 72 72 2c 22 55 73 61 67 65 3a 20 2e 74 65  derr,"Usage: .te
2ef60 73 74 63 74 72 6c 20 69 6d 70 6f 73 74 65 72 20  stctrl imposter 
2ef70 64 62 4e 61 6d 65 20 6f 6e 6f 66 66 20 74 6e 75  dbName onoff tnu
2ef80 6d 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  m\n");.         
2ef90 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65   }.          bre
2efa0 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
2efb0 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  e SQLITE_TESTCTR
2efc0 4c 5f 42 49 54 56 45 43 5f 54 45 53 54 3a 0a 20  L_BITVEC_TEST:. 
2efd0 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
2efe0 54 45 5f 54 45 53 54 43 54 52 4c 5f 46 41 55 4c  TE_TESTCTRL_FAUL
2eff0 54 5f 49 4e 53 54 41 4c 4c 3a 0a 20 20 20 20 20  T_INSTALL:.     
2f000 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
2f010 45 53 54 43 54 52 4c 5f 42 45 4e 49 47 4e 5f 4d  ESTCTRL_BENIGN_M
2f020 41 4c 4c 4f 43 5f 48 4f 4f 4b 53 3a 0a 20 20 20  ALLOC_HOOKS:.   
2f030 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20       default:.  
2f040 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
2f050 6e 74 66 28 73 74 64 65 72 72 2c 0a 20 20 20 20  ntf(stderr,.    
2f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f070 20 20 22 45 72 72 6f 72 3a 20 43 4c 49 20 73 75    "Error: CLI su
2f080 70 70 6f 72 74 20 66 6f 72 20 74 65 73 74 63 74  pport for testct
2f090 72 6c 20 25 73 20 6e 6f 74 20 69 6d 70 6c 65 6d  rl %s not implem
2f0a0 65 6e 74 65 64 5c 6e 22 2c 0a 20 20 20 20 20 20  ented\n",.      
2f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0c0 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
2f0d0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2f0e0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
2f0f0 65 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  e.#endif /* !def
2f100 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54 45  ined(SQLITE_UNTE
2f110 53 54 41 42 4c 45 29 20 2a 2f 0a 0a 20 20 69 66  STABLE) */..  if
2f120 28 20 63 3d 3d 27 74 27 20 26 26 20 6e 3e 34 20  ( c=='t' && n>4 
2f130 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
2f140 5b 30 5d 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20  [0], "timeout", 
2f150 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f 70 65  n)==0 ){.    ope
2f160 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20  n_db(p, 0);.    
2f170 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
2f180 65 6f 75 74 28 70 2d 3e 64 62 2c 20 6e 41 72 67  eout(p->db, nArg
2f190 3e 3d 32 20 3f 20 28 69 6e 74 29 69 6e 74 65 67  >=2 ? (int)integ
2f1a0 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d  erValue(azArg[1]
2f1b0 29 20 3a 20 30 29 3b 0a 20 20 7d 65 6c 73 65 0a  ) : 0);.  }else.
2f1c0 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
2f1d0 20 6e 3e 3d 35 20 26 26 20 73 74 72 6e 63 6d 70   n>=5 && strncmp
2f1e0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 69 6d 65  (azArg[0], "time
2f1f0 72 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  r", n)==0 ){.   
2f200 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
2f210 20 20 20 20 20 20 65 6e 61 62 6c 65 54 69 6d 65        enableTime
2f220 72 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65  r = booleanValue
2f230 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20  (azArg[1]);.    
2f240 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69 6d 65    if( enableTime
2f250 72 20 26 26 20 21 48 41 53 5f 54 49 4d 45 52 20  r && !HAS_TIMER 
2f260 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
2f270 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
2f280 72 72 6f 72 3a 20 74 69 6d 65 72 20 6e 6f 74 20  rror: timer not 
2f290 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 74 68 69  available on thi
2f2a0 73 20 73 79 73 74 65 6d 2e 5c 6e 22 29 3b 0a 20  s system.\n");. 
2f2b0 20 20 20 20 20 20 20 65 6e 61 62 6c 65 54 69 6d         enableTim
2f2c0 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  er = 0;.      }.
2f2d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2f2e0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2f2f0 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 74 69 6d  rr, "Usage: .tim
2f300 65 72 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20  er on|off\n");. 
2f310 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2f320 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
2f330 28 20 63 3d 3d 27 74 27 20 26 26 20 73 74 72 6e  ( c=='t' && strn
2f340 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74  cmp(azArg[0], "t
2f350 72 61 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  race", n)==0 ){.
2f360 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
2f370 29 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21  );.    if( nArg!
2f380 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  =2 ){.      raw_
2f390 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2f3a0 55 73 61 67 65 3a 20 2e 74 72 61 63 65 20 46 49  Usage: .trace FI
2f3b0 4c 45 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20  LE|off\n");.    
2f3c0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
2f3d0 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2f3e0 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
2f3f0 20 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c    output_file_cl
2f400 6f 73 65 28 70 2d 3e 74 72 61 63 65 4f 75 74 29  ose(p->traceOut)
2f410 3b 0a 20 20 20 20 70 2d 3e 74 72 61 63 65 4f 75  ;.    p->traceOu
2f420 74 20 3d 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f  t = output_file_
2f430 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d 29 3b 0a  open(azArg[1]);.
2f440 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2f450 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 29 20  ITE_OMIT_TRACE) 
2f460 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2f470 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
2f480 5f 50 4f 49 4e 54 29 0a 20 20 20 20 69 66 28 20  _POINT).    if( 
2f490 70 2d 3e 74 72 61 63 65 4f 75 74 3d 3d 30 20 29  p->traceOut==0 )
2f4a0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
2f4b0 74 72 61 63 65 5f 76 32 28 70 2d 3e 64 62 2c 20  trace_v2(p->db, 
2f4c0 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 65  0, 0, 0);.    }e
2f4d0 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
2f4e0 65 33 5f 74 72 61 63 65 5f 76 32 28 70 2d 3e 64  e3_trace_v2(p->d
2f4f0 62 2c 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  b, SQLITE_TRACE_
2f500 53 54 4d 54 2c 20 73 71 6c 5f 74 72 61 63 65 5f  STMT, sql_trace_
2f510 63 61 6c 6c 62 61 63 6b 2c 70 2d 3e 74 72 61 63  callback,p->trac
2f520 65 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  eOut);.    }.#en
2f530 64 69 66 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66  dif.  }else..#if
2f540 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
2f550 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 69 66  HENTICATION.  if
2f560 28 20 63 3d 3d 27 75 27 20 26 26 20 73 74 72 6e  ( c=='u' && strn
2f570 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 75  cmp(azArg[0], "u
2f580 73 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ser", n)==0 ){. 
2f590 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b     if( nArg<2 ){
2f5a0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
2f5b0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
2f5c0 3a 20 2e 75 73 65 72 20 53 55 42 43 4f 4d 4d 41  : .user SUBCOMMA
2f5d0 4e 44 20 2e 2e 2e 5c 6e 22 29 3b 0a 20 20 20 20  ND ...\n");.    
2f5e0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
2f5f0 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2f600 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
2f610 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
2f620 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28  .    if( strcmp(
2f630 61 7a 41 72 67 5b 31 5d 2c 22 6c 6f 67 69 6e 22  azArg[1],"login"
2f640 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
2f650 28 20 6e 41 72 67 21 3d 34 20 29 7b 0a 20 20 20  ( nArg!=4 ){.   
2f660 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2f670 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
2f680 2e 75 73 65 72 20 6c 6f 67 69 6e 20 55 53 45 52  .user login USER
2f690 20 50 41 53 53 57 4f 52 44 5c 6e 22 29 3b 0a 20   PASSWORD\n");. 
2f6a0 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2f6b0 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2f6c0 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2f6d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20       }.      rc 
2f6e0 3d 20 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 61  = sqlite3_user_a
2f6f0 75 74 68 65 6e 74 69 63 61 74 65 28 70 2d 3e 64  uthenticate(p->d
2f700 62 2c 20 61 7a 41 72 67 5b 32 5d 2c 20 61 7a 41  b, azArg[2], azA
2f710 72 67 5b 33 5d 2c 0a 20 20 20 20 20 20 20 20 20  rg[3],.         
2f720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f730 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
2f740 73 74 72 6c 65 6e 28 61 7a 41 72 67 5b 33 5d 29  strlen(azArg[3])
2f750 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20  );.      if( rc 
2f760 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
2f770 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2f780 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66  Authentication f
2f790 61 69 6c 65 64 20 66 6f 72 20 75 73 65 72 20 25  ailed for user %
2f7a0 73 5c 6e 22 2c 20 61 7a 41 72 67 5b 32 5d 29 3b  s\n", azArg[2]);
2f7b0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
2f7c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
2f7d0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a  se if( strcmp(az
2f7e0 41 72 67 5b 31 5d 2c 22 61 64 64 22 29 3d 3d 30  Arg[1],"add")==0
2f7f0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 41   ){.      if( nA
2f800 72 67 21 3d 35 20 29 7b 0a 20 20 20 20 20 20 20  rg!=5 ){.       
2f810 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2f820 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73 65  rr, "Usage: .use
2f830 72 20 61 64 64 20 55 53 45 52 20 50 41 53 53 57  r add USER PASSW
2f840 4f 52 44 20 49 53 41 44 4d 49 4e 5c 6e 22 29 3b  ORD ISADMIN\n");
2f850 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
2f860 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  .        goto me
2f870 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
2f880 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
2f890 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73 65 72  c = sqlite3_user
2f8a0 5f 61 64 64 28 70 2d 3e 64 62 2c 20 61 7a 41 72  _add(p->db, azAr
2f8b0 67 5b 32 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  g[2],.          
2f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8d0 20 20 61 7a 41 72 67 5b 33 5d 2c 20 28 69 6e 74    azArg[3], (int
2f8e0 29 73 74 72 6c 65 6e 28 61 7a 41 72 67 5b 33 5d  )strlen(azArg[3]
2f8f0 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
2f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
2f910 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72  ooleanValue(azAr
2f920 67 5b 34 5d 29 29 3b 0a 20 20 20 20 20 20 69 66  g[4]));.      if
2f930 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20  ( rc ){.        
2f940 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2f950 72 2c 20 22 55 73 65 72 2d 41 64 64 20 66 61 69  r, "User-Add fai
2f960 6c 65 64 3a 20 25 64 5c 6e 22 2c 20 72 63 29 3b  led: %d\n", rc);
2f970 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
2f980 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
2f990 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a  se if( strcmp(az
2f9a0 41 72 67 5b 31 5d 2c 22 65 64 69 74 22 29 3d 3d  Arg[1],"edit")==
2f9b0 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  0 ){.      if( n
2f9c0 41 72 67 21 3d 35 20 29 7b 0a 20 20 20 20 20 20  Arg!=5 ){.      
2f9d0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2f9e0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73  err, "Usage: .us
2f9f0 65 72 20 65 64 69 74 20 55 53 45 52 20 50 41 53  er edit USER PAS
2fa00 53 57 4f 52 44 20 49 53 41 44 4d 49 4e 5c 6e 22  SWORD ISADMIN\n"
2fa10 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
2fa20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  1;.        goto 
2fa30 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2fa40 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
2fa50 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73   rc = sqlite3_us
2fa60 65 72 5f 63 68 61 6e 67 65 28 70 2d 3e 64 62 2c  er_change(p->db,
2fa70 20 61 7a 41 72 67 5b 32 5d 2c 0a 20 20 20 20 20   azArg[2],.     
2fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa90 20 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b 33           azArg[3
2faa0 5d 2c 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 61  ], (int)strlen(a
2fab0 7a 41 72 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20  zArg[3]),.      
2fac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fad0 20 20 20 20 20 20 20 20 62 6f 6f 6c 65 61 6e 56          booleanV
2fae0 61 6c 75 65 28 61 7a 41 72 67 5b 34 5d 29 29 3b  alue(azArg[4]));
2faf0 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b  .      if( rc ){
2fb00 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
2fb10 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 65  ntf(stderr, "Use
2fb20 72 2d 45 64 69 74 20 66 61 69 6c 65 64 3a 20 25  r-Edit failed: %
2fb30 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20  d\n", rc);.     
2fb40 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
2fb50 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28   }.    }else if(
2fb60 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d   strcmp(azArg[1]
2fb70 2c 22 64 65 6c 65 74 65 22 29 3d 3d 30 20 29 7b  ,"delete")==0 ){
2fb80 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 21  .      if( nArg!
2fb90 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  =3 ){.        ra
2fba0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2fbb0 20 22 55 73 61 67 65 3a 20 2e 75 73 65 72 20 64   "Usage: .user d
2fbc0 65 6c 65 74 65 20 55 53 45 52 5c 6e 22 29 3b 0a  elete USER\n");.
2fbd0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
2fbe0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74          goto met
2fbf0 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2fc00 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63        }.      rc
2fc10 20 3d 20 73 71 6c 69 74 65 33 5f 75 73 65 72 5f   = sqlite3_user_
2fc20 64 65 6c 65 74 65 28 70 2d 3e 64 62 2c 20 61 7a  delete(p->db, az
2fc30 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 20 20 69  Arg[2]);.      i
2fc40 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
2fc50 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2fc60 72 72 2c 20 22 55 73 65 72 2d 44 65 6c 65 74 65  rr, "User-Delete
2fc70 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c 20   failed: %d\n", 
2fc80 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  rc);.        rc 
2fc90 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 1;.      }.   
2fca0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
2fcb0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2fcc0 20 22 55 73 61 67 65 3a 20 2e 75 73 65 72 20 6c   "Usage: .user l
2fcd0 6f 67 69 6e 7c 61 64 64 7c 65 64 69 74 7c 64 65  ogin|add|edit|de
2fce0 6c 65 74 65 20 2e 2e 2e 5c 6e 22 29 3b 0a 20 20  lete ...\n");.  
2fcf0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2fd00 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
2fd10 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
2fd20 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f    }else.#endif /
2fd30 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  * SQLITE_USER_AU
2fd40 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a  THENTICATION */.
2fd50 0a 20 20 69 66 28 20 63 3d 3d 27 76 27 20 26 26  .  if( c=='v' &&
2fd60 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2fd70 5d 2c 20 22 76 65 72 73 69 6f 6e 22 2c 20 6e 29  ], "version", n)
2fd80 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  ==0 ){.    utf8_
2fd90 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2fda0 53 51 4c 69 74 65 20 25 73 20 25 73 5c 6e 22 20  SQLite %s %s\n" 
2fdb0 2f 2a 65 78 74 72 61 2d 76 65 72 73 69 6f 6e 2d  /*extra-version-
2fdc0 69 6e 66 6f 2a 2f 2c 0a 20 20 20 20 20 20 20 20  info*/,.        
2fdd0 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
2fde0 6f 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f 73 6f  on(), sqlite3_so
2fdf0 75 72 63 65 69 64 28 29 29 3b 0a 20 20 7d 65 6c  urceid());.  }el
2fe00 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76 27  se..  if( c=='v'
2fe10 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
2fe20 67 5b 30 5d 2c 20 22 76 66 73 69 6e 66 6f 22 2c  g[0], "vfsinfo",
2fe30 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f   n)==0 ){.    co
2fe40 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d  nst char *zDbNam
2fe50 65 20 3d 20 6e 41 72 67 3d 3d 32 20 3f 20 61 7a  e = nArg==2 ? az
2fe60 41 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b  Arg[1] : "main";
2fe70 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73  .    sqlite3_vfs
2fe80 20 2a 70 56 66 73 20 3d 20 30 3b 0a 20 20 20 20   *pVfs = 0;.    
2fe90 69 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20  if( p->db ){.   
2fea0 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f     sqlite3_file_
2feb0 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 7a  control(p->db, z
2fec0 44 62 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46  DbName, SQLITE_F
2fed0 43 4e 54 4c 5f 56 46 53 5f 50 4f 49 4e 54 45 52  CNTL_VFS_POINTER
2fee0 2c 20 26 70 56 66 73 29 3b 0a 20 20 20 20 20 20  , &pVfs);.      
2fef0 69 66 28 20 70 56 66 73 20 29 7b 0a 20 20 20 20  if( pVfs ){.    
2ff00 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2ff10 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 7a 4e 61  p->out, "vfs.zNa
2ff20 6d 65 20 20 20 20 20 20 3d 20 5c 22 25 73 5c 22  me      = \"%s\"
2ff30 5c 6e 22 2c 20 70 56 66 73 2d 3e 7a 4e 61 6d 65  \n", pVfs->zName
2ff40 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  );.        raw_p
2ff50 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76  rintf(p->out, "v
2ff60 66 73 2e 69 56 65 72 73 69 6f 6e 20 20 20 3d 20  fs.iVersion   = 
2ff70 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 69 56 65  %d\n", pVfs->iVe
2ff80 72 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20  rsion);.        
2ff90 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
2ffa0 74 2c 20 22 76 66 73 2e 73 7a 4f 73 46 69 6c 65  t, "vfs.szOsFile
2ffb0 20 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73     = %d\n", pVfs
2ffc0 2d 3e 73 7a 4f 73 46 69 6c 65 29 3b 0a 20 20 20  ->szOsFile);.   
2ffd0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2ffe0 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 6d 78 50  p->out, "vfs.mxP
2fff0 61 74 68 6e 61 6d 65 20 3d 20 25 64 5c 6e 22 2c  athname = %d\n",
30000 20 70 56 66 73 2d 3e 6d 78 50 61 74 68 6e 61 6d   pVfs->mxPathnam
30010 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
30020 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
30030 20 63 3d 3d 27 76 27 20 26 26 20 73 74 72 6e 63   c=='v' && strnc
30040 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 76 66  mp(azArg[0], "vf
30050 73 6c 69 73 74 22 2c 20 6e 29 3d 3d 30 20 29 7b  slist", n)==0 ){
30060 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73  .    sqlite3_vfs
30070 20 2a 70 56 66 73 3b 0a 20 20 20 20 73 71 6c 69   *pVfs;.    sqli
30080 74 65 33 5f 76 66 73 20 2a 70 43 75 72 72 65 6e  te3_vfs *pCurren
30090 74 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70  t = 0;.    if( p
300a0 2d 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 73 71  ->db ){.      sq
300b0 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
300c0 6f 6c 28 70 2d 3e 64 62 2c 20 22 6d 61 69 6e 22  ol(p->db, "main"
300d0 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 56  , SQLITE_FCNTL_V
300e0 46 53 5f 50 4f 49 4e 54 45 52 2c 20 26 70 43 75  FS_POINTER, &pCu
300f0 72 72 65 6e 74 29 3b 0a 20 20 20 20 7d 0a 20 20  rrent);.    }.  
30100 20 20 66 6f 72 28 70 56 66 73 3d 73 71 6c 69 74    for(pVfs=sqlit
30110 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 3b 20  e3_vfs_find(0); 
30120 70 56 66 73 3b 20 70 56 66 73 3d 70 56 66 73 2d  pVfs; pVfs=pVfs-
30130 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 75  >pNext){.      u
30140 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
30150 74 2c 20 22 76 66 73 2e 7a 4e 61 6d 65 20 20 20  t, "vfs.zName   
30160 20 20 20 3d 20 5c 22 25 73 5c 22 25 73 5c 6e 22     = \"%s\"%s\n"
30170 2c 20 70 56 66 73 2d 3e 7a 4e 61 6d 65 2c 0a 20  , pVfs->zName,. 
30180 20 20 20 20 20 20 20 20 20 20 70 56 66 73 3d 3d            pVfs==
30190 70 43 75 72 72 65 6e 74 20 3f 20 22 20 20 3c 2d  pCurrent ? "  <-
301a0 2d 2d 20 43 55 52 52 45 4e 54 22 20 3a 20 22 22  -- CURRENT" : ""
301b0 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  );.      raw_pri
301c0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73  ntf(p->out, "vfs
301d0 2e 69 56 65 72 73 69 6f 6e 20 20 20 3d 20 25 64  .iVersion   = %d
301e0 5c 6e 22 2c 20 70 56 66 73 2d 3e 69 56 65 72 73  \n", pVfs->iVers
301f0 69 6f 6e 29 3b 0a 20 20 20 20 20 20 72 61 77 5f  ion);.      raw_
30200 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
30210 76 66 73 2e 73 7a 4f 73 46 69 6c 65 20 20 20 3d  vfs.szOsFile   =
30220 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 73 7a   %d\n", pVfs->sz
30230 4f 73 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 72  OsFile);.      r
30240 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
30250 2c 20 22 76 66 73 2e 6d 78 50 61 74 68 6e 61 6d  , "vfs.mxPathnam
30260 65 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d  e = %d\n", pVfs-
30270 3e 6d 78 50 61 74 68 6e 61 6d 65 29 3b 0a 20 20  >mxPathname);.  
30280 20 20 20 20 69 66 28 20 70 56 66 73 2d 3e 70 4e      if( pVfs->pN
30290 65 78 74 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ext ){.        r
302a0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
302b0 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  , "-------------
302c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
302d0 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 20 20 20 20  ------\n");.    
302e0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
302f0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76 27 20  e..  if( c=='v' 
30300 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
30310 5b 30 5d 2c 20 22 76 66 73 6e 61 6d 65 22 2c 20  [0], "vfsname", 
30320 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e  n)==0 ){.    con
30330 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65  st char *zDbName
30340 20 3d 20 6e 41 72 67 3d 3d 32 20 3f 20 61 7a 41   = nArg==2 ? azA
30350 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a  rg[1] : "main";.
30360 20 20 20 20 63 68 61 72 20 2a 7a 56 66 73 4e 61      char *zVfsNa
30370 6d 65 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  me = 0;.    if( 
30380 70 2d 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 73  p->db ){.      s
30390 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
303a0 72 6f 6c 28 70 2d 3e 64 62 2c 20 7a 44 62 4e 61  rol(p->db, zDbNa
303b0 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  me, SQLITE_FCNTL
303c0 5f 56 46 53 4e 41 4d 45 2c 20 26 7a 56 66 73 4e  _VFSNAME, &zVfsN
303d0 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ame);.      if( 
303e0 7a 56 66 73 4e 61 6d 65 20 29 7b 0a 20 20 20 20  zVfsName ){.    
303f0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
30400 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20  p->out, "%s\n", 
30410 7a 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20  zVfsName);.     
30420 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
30430 7a 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20  zVfsName);.     
30440 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
30450 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
30460 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
30470 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
30480 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45 29  ABLE_WHERETRACE)
30490 0a 20 20 69 66 28 20 63 3d 3d 27 77 27 20 26 26  .  if( c=='w' &&
304a0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
304b0 5d 2c 20 22 77 68 65 72 65 74 72 61 63 65 22 2c  ], "wheretrace",
304c0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71   n)==0 ){.    sq
304d0 6c 69 74 65 33 57 68 65 72 65 54 72 61 63 65 20  lite3WhereTrace 
304e0 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 62 6f 6f 6c  = nArg>=2 ? bool
304f0 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  eanValue(azArg[1
30500 5d 29 20 3a 20 30 78 66 66 3b 0a 20 20 7d 65 6c  ]) : 0xff;.  }el
30510 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  se.#endif..  if(
30520 20 63 3d 3d 27 77 27 20 26 26 20 73 74 72 6e 63   c=='w' && strnc
30530 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 77 69  mp(azArg[0], "wi
30540 64 74 68 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  dth", n)==0 ){. 
30550 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 61 73     int j;.    as
30560 73 65 72 74 28 20 6e 41 72 67 3c 3d 41 72 72 61  sert( nArg<=Arra
30570 79 53 69 7a 65 28 61 7a 41 72 67 29 20 29 3b 0a  ySize(azArg) );.
30580 20 20 20 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e      for(j=1; j<n
30590 41 72 67 20 26 26 20 6a 3c 41 72 72 61 79 53 69  Arg && j<ArraySi
305a0 7a 65 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 3b  ze(p->colWidth);
305b0 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 70 2d 3e   j++){.      p->
305c0 63 6f 6c 57 69 64 74 68 5b 6a 2d 31 5d 20 3d 20  colWidth[j-1] = 
305d0 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75  (int)integerValu
305e0 65 28 61 7a 41 72 67 5b 6a 5d 29 3b 0a 20 20 20  e(azArg[j]);.   
305f0 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 7b 0a   }.  }else..  {.
30600 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
30610 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
30620 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 20  unknown command 
30630 6f 72 20 69 6e 76 61 6c 69 64 20 61 72 67 75 6d  or invalid argum
30640 65 6e 74 73 3a 20 22 0a 20 20 20 20 20 20 22 20  ents: ".      " 
30650 5c 22 25 73 5c 22 2e 20 45 6e 74 65 72 20 5c 22  \"%s\". Enter \"
30660 2e 68 65 6c 70 5c 22 20 66 6f 72 20 68 65 6c 70  .help\" for help
30670 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a  \n", azArg[0]);.
30680 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 7d 0a      rc = 1;.  }.
30690 0a 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78  .meta_command_ex
306a0 69 74 3a 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74  it:.  if( p->out
306b0 43 6f 75 6e 74 20 29 7b 0a 20 20 20 20 70 2d 3e  Count ){.    p->
306c0 6f 75 74 43 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20  outCount--;.    
306d0 69 66 28 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 3d  if( p->outCount=
306e0 3d 30 20 29 20 6f 75 74 70 75 74 5f 72 65 73 65  =0 ) output_rese
306f0 74 28 70 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  t(p);.  }.  retu
30700 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
30710 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 61  Return TRUE if a
30720 20 73 65 6d 69 63 6f 6c 6f 6e 20 6f 63 63 75 72   semicolon occur
30730 73 20 61 6e 79 77 68 65 72 65 20 69 6e 20 74 68  s anywhere in th
30740 65 20 66 69 72 73 74 20 4e 20 63 68 61 72 61 63  e first N charac
30750 74 65 72 73 0a 2a 2a 20 6f 66 20 73 74 72 69 6e  ters.** of strin
30760 67 20 7a 5b 5d 2e 0a 2a 2f 0a 73 74 61 74 69 63  g z[]..*/.static
30770 20 69 6e 74 20 6c 69 6e 65 5f 63 6f 6e 74 61 69   int line_contai
30780 6e 73 5f 73 65 6d 69 63 6f 6c 6f 6e 28 63 6f 6e  ns_semicolon(con
30790 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
307a0 4e 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  N){.  int i;.  f
307b0 6f 72 28 69 3d 30 3b 20 69 3c 4e 3b 20 69 2b 2b  or(i=0; i<N; i++
307c0 29 7b 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 3b  ){  if( z[i]==';
307d0 27 20 29 20 72 65 74 75 72 6e 20 31 3b 20 7d 0a  ' ) return 1; }.
307e0 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
307f0 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
30800 20 69 66 20 61 20 6c 69 6e 65 20 63 6f 6e 73 69   if a line consi
30810 73 74 73 20 65 6e 74 69 72 65 6c 79 20 6f 66 20  sts entirely of 
30820 77 68 69 74 65 73 70 61 63 65 2e 0a 2a 2f 0a 73  whitespace..*/.s
30830 74 61 74 69 63 20 69 6e 74 20 5f 61 6c 6c 5f 77  tatic int _all_w
30840 68 69 74 65 73 70 61 63 65 28 63 6f 6e 73 74 20  hitespace(const 
30850 63 68 61 72 20 2a 7a 29 7b 0a 20 20 66 6f 72 28  char *z){.  for(
30860 3b 20 2a 7a 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20  ; *z; z++){.    
30870 69 66 28 20 49 73 53 70 61 63 65 28 7a 5b 30 5d  if( IsSpace(z[0]
30880 29 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  ) ) continue;.  
30890 20 20 69 66 28 20 2a 7a 3d 3d 27 2f 27 20 26 26    if( *z=='/' &&
308a0 20 7a 5b 31 5d 3d 3d 27 2a 27 20 29 7b 0a 20 20   z[1]=='*' ){.  
308b0 20 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20 20      z += 2;.    
308c0 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 28    while( *z && (
308d0 2a 7a 21 3d 27 2a 27 20 7c 7c 20 7a 5b 31 5d 21  *z!='*' || z[1]!
308e0 3d 27 2f 27 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a  ='/') ){ z++; }.
308f0 20 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d 30 20        if( *z==0 
30900 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
30910 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 63 6f 6e    z++;.      con
30920 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20  tinue;.    }.   
30930 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 26 26 20   if( *z=='-' && 
30940 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20  z[1]=='-' ){.   
30950 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20 20 20     z += 2;.     
30960 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 2a 7a   while( *z && *z
30970 21 3d 27 5c 6e 27 20 29 7b 20 7a 2b 2b 3b 20 7d  !='\n' ){ z++; }
30980 0a 20 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d 30  .      if( *z==0
30990 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20   ) return 1;.   
309a0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20     continue;.   
309b0 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b   }.    return 0;
309c0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b  .  }.  return 1;
309d0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
309e0 20 54 52 55 45 20 69 66 20 74 68 65 20 6c 69 6e   TRUE if the lin
309f0 65 20 74 79 70 65 64 20 69 6e 20 69 73 20 61 6e  e typed in is an
30a00 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 74 65 72   SQL command ter
30a10 6d 69 6e 61 74 6f 72 20 6f 74 68 65 72 0a 2a 2a  minator other.**
30a20 20 74 68 61 6e 20 61 20 73 65 6d 69 2d 63 6f 6c   than a semi-col
30a30 6f 6e 2e 20 20 54 68 65 20 53 51 4c 20 53 65 72  on.  The SQL Ser
30a40 76 65 72 20 73 74 79 6c 65 20 22 67 6f 22 20 63  ver style "go" c
30a50 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65 72 73  ommand is unders
30a60 74 6f 6f 64 0a 2a 2a 20 61 73 20 69 73 20 74 68  tood.** as is th
30a70 65 20 4f 72 61 63 6c 65 20 22 2f 22 2e 0a 2a 2f  e Oracle "/"..*/
30a80 0a 73 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 65  .static int line
30a90 5f 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74 65 72 6d  _is_command_term
30aa0 69 6e 61 74 6f 72 28 63 6f 6e 73 74 20 63 68 61  inator(const cha
30ab0 72 20 2a 7a 4c 69 6e 65 29 7b 0a 20 20 77 68 69  r *zLine){.  whi
30ac0 6c 65 28 20 49 73 53 70 61 63 65 28 7a 4c 69 6e  le( IsSpace(zLin
30ad0 65 5b 30 5d 29 20 29 7b 20 7a 4c 69 6e 65 2b 2b  e[0]) ){ zLine++
30ae0 3b 20 7d 3b 0a 20 20 69 66 28 20 7a 4c 69 6e 65  ; };.  if( zLine
30af0 5b 30 5d 3d 3d 27 2f 27 20 26 26 20 5f 61 6c 6c  [0]=='/' && _all
30b00 5f 77 68 69 74 65 73 70 61 63 65 28 26 7a 4c 69  _whitespace(&zLi
30b10 6e 65 5b 31 5d 29 20 29 7b 0a 20 20 20 20 72 65  ne[1]) ){.    re
30b20 74 75 72 6e 20 31 3b 20 20 2f 2a 20 4f 72 61 63  turn 1;  /* Orac
30b30 6c 65 20 2a 2f 0a 20 20 7d 0a 20 20 69 66 28 20  le */.  }.  if( 
30b40 54 6f 4c 6f 77 65 72 28 7a 4c 69 6e 65 5b 30 5d  ToLower(zLine[0]
30b50 29 3d 3d 27 67 27 20 26 26 20 54 6f 4c 6f 77 65  )=='g' && ToLowe
30b60 72 28 7a 4c 69 6e 65 5b 31 5d 29 3d 3d 27 6f 27  r(zLine[1])=='o'
30b70 0a 20 20 20 20 20 20 20 20 20 26 26 20 5f 61 6c  .         && _al
30b80 6c 5f 77 68 69 74 65 73 70 61 63 65 28 26 7a 4c  l_whitespace(&zL
30b90 69 6e 65 5b 32 5d 29 20 29 7b 0a 20 20 20 20 72  ine[2]) ){.    r
30ba0 65 74 75 72 6e 20 31 3b 20 20 2f 2a 20 53 51 4c  eturn 1;  /* SQL
30bb0 20 53 65 72 76 65 72 20 2a 2f 0a 20 20 7d 0a 20   Server */.  }. 
30bc0 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
30bd0 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
30be0 69 66 20 7a 53 71 6c 20 69 73 20 61 20 63 6f 6d  if zSql is a com
30bf0 70 6c 65 74 65 20 53 51 4c 20 73 74 61 74 65 6d  plete SQL statem
30c00 65 6e 74 2e 20 20 52 65 74 75 72 6e 20 66 61 6c  ent.  Return fal
30c10 73 65 20 69 66 20 69 74 0a 2a 2a 20 65 6e 64 73  se if it.** ends
30c20 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f   in the middle o
30c30 66 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  f a string liter
30c40 61 6c 20 6f 72 20 43 2d 73 74 79 6c 65 20 63 6f  al or C-style co
30c50 6d 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  mment..*/.static
30c60 20 69 6e 74 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d   int line_is_com
30c70 70 6c 65 74 65 28 63 68 61 72 20 2a 7a 53 71 6c  plete(char *zSql
30c80 2c 20 69 6e 74 20 6e 53 71 6c 29 7b 0a 20 20 69  , int nSql){.  i
30c90 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 7a 53 71  nt rc;.  if( zSq
30ca0 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b  l==0 ) return 1;
30cb0 0a 20 20 7a 53 71 6c 5b 6e 53 71 6c 5d 20 3d 20  .  zSql[nSql] = 
30cc0 27 3b 27 3b 0a 20 20 7a 53 71 6c 5b 6e 53 71 6c  ';';.  zSql[nSql
30cd0 2b 31 5d 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  +1] = 0;.  rc = 
30ce0 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65  sqlite3_complete
30cf0 28 7a 53 71 6c 29 3b 0a 20 20 7a 53 71 6c 5b 6e  (zSql);.  zSql[n
30d00 53 71 6c 5d 20 3d 20 30 3b 0a 20 20 72 65 74 75  Sql] = 0;.  retu
30d10 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
30d20 52 75 6e 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e  Run a single lin
30d30 65 20 6f 66 20 53 51 4c 0a 2a 2f 0a 73 74 61 74  e of SQL.*/.stat
30d40 69 63 20 69 6e 74 20 72 75 6e 4f 6e 65 53 71 6c  ic int runOneSql
30d50 4c 69 6e 65 28 53 68 65 6c 6c 53 74 61 74 65 20  Line(ShellState 
30d60 2a 70 2c 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20  *p, char *zSql, 
30d70 46 49 4c 45 20 2a 69 6e 2c 20 69 6e 74 20 73 74  FILE *in, int st
30d80 61 72 74 6c 69 6e 65 29 7b 0a 20 20 69 6e 74 20  artline){.  int 
30d90 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72  rc;.  char *zErr
30da0 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 6f 70 65 6e  Msg = 0;..  open
30db0 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 69 66 28  _db(p, 0);.  if(
30dc0 20 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c   ShellHasFlag(p,
30dd0 53 48 46 4c 47 5f 42 61 63 6b 73 6c 61 73 68 29  SHFLG_Backslash)
30de0 20 29 20 72 65 73 6f 6c 76 65 5f 62 61 63 6b 73   ) resolve_backs
30df0 6c 61 73 68 65 73 28 7a 53 71 6c 29 3b 0a 20 20  lashes(zSql);.  
30e00 42 45 47 49 4e 5f 54 49 4d 45 52 3b 0a 20 20 72  BEGIN_TIMER;.  r
30e10 63 20 3d 20 73 68 65 6c 6c 5f 65 78 65 63 28 70  c = shell_exec(p
30e20 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 73 68 65 6c  ->db, zSql, shel
30e30 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 26  l_callback, p, &
30e40 7a 45 72 72 4d 73 67 29 3b 0a 20 20 45 4e 44 5f  zErrMsg);.  END_
30e50 54 49 4d 45 52 3b 0a 20 20 69 66 28 20 72 63 20  TIMER;.  if( rc 
30e60 7c 7c 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  || zErrMsg ){.  
30e70 20 20 63 68 61 72 20 7a 50 72 65 66 69 78 5b 31    char zPrefix[1
30e80 30 30 5d 3b 0a 20 20 20 20 69 66 28 20 69 6e 21  00];.    if( in!
30e90 3d 30 20 7c 7c 20 21 73 74 64 69 6e 5f 69 73 5f  =0 || !stdin_is_
30ea0 69 6e 74 65 72 61 63 74 69 76 65 20 29 7b 0a 20  interactive ){. 
30eb0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
30ec0 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 50 72  rintf(sizeof(zPr
30ed0 65 66 69 78 29 2c 20 7a 50 72 65 66 69 78 2c 0a  efix), zPrefix,.
30ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ef0 20 20 20 20 20 20 20 22 45 72 72 6f 72 3a 20 6e         "Error: n
30f00 65 61 72 20 6c 69 6e 65 20 25 64 3a 22 2c 20 73  ear line %d:", s
30f10 74 61 72 74 6c 69 6e 65 29 3b 0a 20 20 20 20 7d  tartline);.    }
30f20 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
30f30 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
30f40 65 6f 66 28 7a 50 72 65 66 69 78 29 2c 20 7a 50  eof(zPrefix), zP
30f50 72 65 66 69 78 2c 20 22 45 72 72 6f 72 3a 22 29  refix, "Error:")
30f60 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
30f70 7a 45 72 72 4d 73 67 21 3d 30 20 29 7b 0a 20 20  zErrMsg!=0 ){.  
30f80 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
30f90 73 74 64 65 72 72 2c 20 22 25 73 20 25 73 5c 6e  stderr, "%s %s\n
30fa0 22 2c 20 7a 50 72 65 66 69 78 2c 20 7a 45 72 72  ", zPrefix, zErr
30fb0 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Msg);.      sqli
30fc0 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
30fd0 29 3b 0a 20 20 20 20 20 20 7a 45 72 72 4d 73 67  );.      zErrMsg
30fe0 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
30ff0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
31000 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 20 25  tf(stderr, "%s %
31010 73 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c 20 73  s\n", zPrefix, s
31020 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d  qlite3_errmsg(p-
31030 3e 64 62 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >db));.    }.   
31040 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c   return 1;.  }el
31050 73 65 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46  se if( ShellHasF
31060 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 43 6f 75  lag(p, SHFLG_Cou
31070 6e 74 43 68 61 6e 67 65 73 29 20 29 7b 0a 20 20  ntChanges) ){.  
31080 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
31090 6f 75 74 2c 20 22 63 68 61 6e 67 65 73 3a 20 25  out, "changes: %
310a0 33 64 20 20 20 74 6f 74 61 6c 5f 63 68 61 6e 67  3d   total_chang
310b0 65 73 3a 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20  es: %d\n",.     
310c0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63         sqlite3_c
310d0 68 61 6e 67 65 73 28 70 2d 3e 64 62 29 2c 20 73  hanges(p->db), s
310e0 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
310f0 6e 67 65 73 28 70 2d 3e 64 62 29 29 3b 0a 20 20  nges(p->db));.  
31100 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
31110 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 69 6e 70  ../*.** Read inp
31120 75 74 20 66 72 6f 6d 20 2a 69 6e 20 61 6e 64 20  ut from *in and 
31130 70 72 6f 63 65 73 73 20 69 74 2e 20 20 49 66 20  process it.  If 
31140 2a 69 6e 3d 3d 30 20 74 68 65 6e 20 69 6e 70 75  *in==0 then inpu
31150 74 0a 2a 2a 20 69 73 20 69 6e 74 65 72 61 63 74  t.** is interact
31160 69 76 65 20 2d 20 74 68 65 20 75 73 65 72 20 69  ive - the user i
31170 73 20 74 79 70 69 6e 67 20 69 74 20 69 74 2e 20  s typing it it. 
31180 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 70 75   Otherwise, inpu
31190 74 0a 2a 2a 20 69 73 20 63 6f 6d 69 6e 67 20 66  t.** is coming f
311a0 72 6f 6d 20 61 20 66 69 6c 65 20 6f 72 20 64 65  rom a file or de
311b0 76 69 63 65 2e 20 20 41 20 70 72 6f 6d 70 74 20  vice.  A prompt 
311c0 69 73 20 69 73 73 75 65 64 20 61 6e 64 20 68 69  is issued and hi
311d0 73 74 6f 72 79 0a 2a 2a 20 69 73 20 73 61 76 65  story.** is save
311e0 64 20 6f 6e 6c 79 20 69 66 20 69 6e 70 75 74 20  d only if input 
311f0 69 73 20 69 6e 74 65 72 61 63 74 69 76 65 2e 20  is interactive. 
31200 20 41 6e 20 69 6e 74 65 72 72 75 70 74 20 73 69   An interrupt si
31210 67 6e 61 6c 20 77 69 6c 6c 0a 2a 2a 20 63 61 75  gnal will.** cau
31220 73 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  se this routine 
31230 74 6f 20 65 78 69 74 20 69 6d 6d 65 64 69 61 74  to exit immediat
31240 65 6c 79 2c 20 75 6e 6c 65 73 73 20 69 6e 70 75  ely, unless inpu
31250 74 20 69 73 20 69 6e 74 65 72 61 63 74 69 76 65  t is interactive
31260 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ..**.** Return t
31270 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
31280 6f 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ors..*/.static i
31290 6e 74 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74  nt process_input
312a0 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20  (ShellState *p, 
312b0 46 49 4c 45 20 2a 69 6e 29 7b 0a 20 20 63 68 61  FILE *in){.  cha
312c0 72 20 2a 7a 4c 69 6e 65 20 3d 20 30 3b 20 20 20  r *zLine = 0;   
312d0 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67         /* A sing
312e0 6c 65 20 69 6e 70 75 74 20 6c 69 6e 65 20 2a 2f  le input line */
312f0 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20  .  char *zSql = 
31300 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  0;           /* 
31310 41 63 63 75 6d 75 6c 61 74 65 64 20 53 51 4c 20  Accumulated SQL 
31320 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  text */.  int nL
31330 69 6e 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ine;            
31340 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
31350 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 2a 2f   current line */
31360 0a 20 20 69 6e 74 20 6e 53 71 6c 20 3d 20 30 3b  .  int nSql = 0;
31370 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
31380 42 79 74 65 73 20 6f 66 20 7a 53 71 6c 5b 5d 20  Bytes of zSql[] 
31390 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  used */.  int nA
313a0 6c 6c 6f 63 20 3d 20 30 3b 20 20 20 20 20 20 20  lloc = 0;       
313b0 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
313c0 20 7a 53 71 6c 5b 5d 20 73 70 61 63 65 20 2a 2f   zSql[] space */
313d0 0a 20 20 69 6e 74 20 6e 53 71 6c 50 72 69 6f 72  .  int nSqlPrior
313e0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 2f 2a 20   = 0;        /* 
313f0 42 79 74 65 73 20 6f 66 20 7a 53 71 6c 5b 5d 20  Bytes of zSql[] 
31400 75 73 65 64 20 62 79 20 70 72 69 6f 72 20 6c 69  used by prior li
31410 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ne */.  int rc; 
31420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31430 20 20 2f 2a 20 45 72 72 6f 72 20 63 6f 64 65 20    /* Error code 
31440 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6e 74 20  */.  int errCnt 
31450 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  = 0;           /
31460 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
31470 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
31480 20 6c 69 6e 65 6e 6f 20 3d 20 30 3b 20 20 20 20   lineno = 0;    
31490 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
314a0 74 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 2a 2f  t line number */
314b0 0a 20 20 69 6e 74 20 73 74 61 72 74 6c 69 6e 65  .  int startline
314c0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 2f 2a 20   = 0;        /* 
314d0 4c 69 6e 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  Line number for 
314e0 73 74 61 72 74 20 6f 66 20 63 75 72 72 65 6e 74  start of current
314f0 20 69 6e 70 75 74 20 2a 2f 0a 0a 20 20 77 68 69   input */..  whi
31500 6c 65 28 20 65 72 72 43 6e 74 3d 3d 30 20 7c 7c  le( errCnt==0 ||
31510 20 21 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20   !bail_on_error 
31520 7c 7c 20 28 69 6e 3d 3d 30 20 26 26 20 73 74 64  || (in==0 && std
31530 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76  in_is_interactiv
31540 65 29 20 29 7b 0a 20 20 20 20 66 66 6c 75 73 68  e) ){.    fflush
31550 28 70 2d 3e 6f 75 74 29 3b 0a 20 20 20 20 7a 4c  (p->out);.    zL
31560 69 6e 65 20 3d 20 6f 6e 65 5f 69 6e 70 75 74 5f  ine = one_input_
31570 6c 69 6e 65 28 69 6e 2c 20 7a 4c 69 6e 65 2c 20  line(in, zLine, 
31580 6e 53 71 6c 3e 30 29 3b 0a 20 20 20 20 69 66 28  nSql>0);.    if(
31590 20 7a 4c 69 6e 65 3d 3d 30 20 29 7b 0a 20 20 20   zLine==0 ){.   
315a0 20 20 20 2f 2a 20 45 6e 64 20 6f 66 20 69 6e 70     /* End of inp
315b0 75 74 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  ut */.      if( 
315c0 69 6e 3d 3d 30 20 26 26 20 73 74 64 69 6e 5f 69  in==0 && stdin_i
315d0 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 29 20  s_interactive ) 
315e0 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 20 20  printf("\n");.  
315f0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
31600 0a 20 20 20 20 69 66 28 20 73 65 65 6e 49 6e 74  .    if( seenInt
31610 65 72 72 75 70 74 20 29 7b 0a 20 20 20 20 20 20  errupt ){.      
31620 69 66 28 20 69 6e 21 3d 30 20 29 20 62 72 65 61  if( in!=0 ) brea
31630 6b 3b 0a 20 20 20 20 20 20 73 65 65 6e 49 6e 74  k;.      seenInt
31640 65 72 72 75 70 74 20 3d 20 30 3b 0a 20 20 20 20  errupt = 0;.    
31650 7d 0a 20 20 20 20 6c 69 6e 65 6e 6f 2b 2b 3b 0a  }.    lineno++;.
31660 20 20 20 20 69 66 28 20 6e 53 71 6c 3d 3d 30 20      if( nSql==0 
31670 26 26 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61  && _all_whitespa
31680 63 65 28 7a 4c 69 6e 65 29 20 29 7b 0a 20 20 20  ce(zLine) ){.   
31690 20 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46     if( ShellHasF
316a0 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 45 63 68  lag(p, SHFLG_Ech
316b0 6f 29 20 29 20 70 72 69 6e 74 66 28 22 25 73 5c  o) ) printf("%s\
316c0 6e 22 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 20 20  n", zLine);.    
316d0 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
316e0 7d 0a 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 20  }.    if( zLine 
316f0 26 26 20 7a 4c 69 6e 65 5b 30 5d 3d 3d 27 2e 27  && zLine[0]=='.'
31700 20 26 26 20 6e 53 71 6c 3d 3d 30 20 29 7b 0a 20   && nSql==0 ){. 
31710 20 20 20 20 20 69 66 28 20 53 68 65 6c 6c 48 61       if( ShellHa
31720 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 45  sFlag(p, SHFLG_E
31730 63 68 6f 29 20 29 20 70 72 69 6e 74 66 28 22 25  cho) ) printf("%
31740 73 5c 6e 22 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20  s\n", zLine);.  
31750 20 20 20 20 72 63 20 3d 20 64 6f 5f 6d 65 74 61      rc = do_meta
31760 5f 63 6f 6d 6d 61 6e 64 28 7a 4c 69 6e 65 2c 20  _command(zLine, 
31770 70 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  p);.      if( rc
31780 3d 3d 32 20 29 7b 20 2f 2a 20 65 78 69 74 20 72  ==2 ){ /* exit r
31790 65 71 75 65 73 74 65 64 20 2a 2f 0a 20 20 20 20  equested */.    
317a0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
317b0 20 7d 65 6c 73 65 20 69 66 28 20 72 63 20 29 7b   }else if( rc ){
317c0 0a 20 20 20 20 20 20 20 20 65 72 72 43 6e 74 2b  .        errCnt+
317d0 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  +;.      }.     
317e0 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d   continue;.    }
317f0 0a 20 20 20 20 69 66 28 20 6c 69 6e 65 5f 69 73  .    if( line_is
31800 5f 63 6f 6d 6d 61 6e 64 5f 74 65 72 6d 69 6e 61  _command_termina
31810 74 6f 72 28 7a 4c 69 6e 65 29 20 26 26 20 6c 69  tor(zLine) && li
31820 6e 65 5f 69 73 5f 63 6f 6d 70 6c 65 74 65 28 7a  ne_is_complete(z
31830 53 71 6c 2c 20 6e 53 71 6c 29 20 29 7b 0a 20 20  Sql, nSql) ){.  
31840 20 20 20 20 6d 65 6d 63 70 79 28 7a 4c 69 6e 65      memcpy(zLine
31850 2c 22 3b 22 2c 32 29 3b 0a 20 20 20 20 7d 0a 20  ,";",2);.    }. 
31860 20 20 20 6e 4c 69 6e 65 20 3d 20 73 74 72 6c 65     nLine = strle
31870 6e 33 30 28 7a 4c 69 6e 65 29 3b 0a 20 20 20 20  n30(zLine);.    
31880 69 66 28 20 6e 53 71 6c 2b 6e 4c 69 6e 65 2b 32  if( nSql+nLine+2
31890 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  >=nAlloc ){.    
318a0 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e 53 71 6c 2b    nAlloc = nSql+
318b0 6e 4c 69 6e 65 2b 31 30 30 3b 0a 20 20 20 20 20  nLine+100;.     
318c0 20 7a 53 71 6c 20 3d 20 72 65 61 6c 6c 6f 63 28   zSql = realloc(
318d0 7a 53 71 6c 2c 20 6e 41 6c 6c 6f 63 29 3b 0a 20  zSql, nAlloc);. 
318e0 20 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30       if( zSql==0
318f0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
31900 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
31910 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65  Error: out of me
31920 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20  mory\n");.      
31930 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20    exit(1);.     
31940 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 53 71   }.    }.    nSq
31950 6c 50 72 69 6f 72 20 3d 20 6e 53 71 6c 3b 0a 20  lPrior = nSql;. 
31960 20 20 20 69 66 28 20 6e 53 71 6c 3d 3d 30 20 29     if( nSql==0 )
31970 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20  {.      int i;. 
31980 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 4c       for(i=0; zL
31990 69 6e 65 5b 69 5d 20 26 26 20 49 73 53 70 61 63  ine[i] && IsSpac
319a0 65 28 7a 4c 69 6e 65 5b 69 5d 29 3b 20 69 2b 2b  e(zLine[i]); i++
319b0 29 7b 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74  ){}.      assert
319c0 28 20 6e 41 6c 6c 6f 63 3e 30 20 26 26 20 7a 53  ( nAlloc>0 && zS
319d0 71 6c 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 6d  ql!=0 );.      m
319e0 65 6d 63 70 79 28 7a 53 71 6c 2c 20 7a 4c 69 6e  emcpy(zSql, zLin
319f0 65 2b 69 2c 20 6e 4c 69 6e 65 2b 31 2d 69 29 3b  e+i, nLine+1-i);
31a00 0a 20 20 20 20 20 20 73 74 61 72 74 6c 69 6e 65  .      startline
31a10 20 3d 20 6c 69 6e 65 6e 6f 3b 0a 20 20 20 20 20   = lineno;.     
31a20 20 6e 53 71 6c 20 3d 20 6e 4c 69 6e 65 2d 69 3b   nSql = nLine-i;
31a30 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
31a40 20 20 7a 53 71 6c 5b 6e 53 71 6c 2b 2b 5d 20 3d    zSql[nSql++] =
31a50 20 27 5c 6e 27 3b 0a 20 20 20 20 20 20 6d 65 6d   '\n';.      mem
31a60 63 70 79 28 7a 53 71 6c 2b 6e 53 71 6c 2c 20 7a  cpy(zSql+nSql, z
31a70 4c 69 6e 65 2c 20 6e 4c 69 6e 65 2b 31 29 3b 0a  Line, nLine+1);.
31a80 20 20 20 20 20 20 6e 53 71 6c 20 2b 3d 20 6e 4c        nSql += nL
31a90 69 6e 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ine;.    }.    i
31aa0 66 28 20 6e 53 71 6c 20 26 26 20 6c 69 6e 65 5f  f( nSql && line_
31ab0 63 6f 6e 74 61 69 6e 73 5f 73 65 6d 69 63 6f 6c  contains_semicol
31ac0 6f 6e 28 26 7a 53 71 6c 5b 6e 53 71 6c 50 72 69  on(&zSql[nSqlPri
31ad0 6f 72 5d 2c 20 6e 53 71 6c 2d 6e 53 71 6c 50 72  or], nSql-nSqlPr
31ae0 69 6f 72 29 0a 20 20 20 20 20 20 20 20 20 20 20  ior).           
31af0 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 5f       && sqlite3_
31b00 63 6f 6d 70 6c 65 74 65 28 7a 53 71 6c 29 20 29  complete(zSql) )
31b10 7b 0a 20 20 20 20 20 20 65 72 72 43 6e 74 20 2b  {.      errCnt +
31b20 3d 20 72 75 6e 4f 6e 65 53 71 6c 4c 69 6e 65 28  = runOneSqlLine(
31b30 70 2c 20 7a 53 71 6c 2c 20 69 6e 2c 20 73 74 61  p, zSql, in, sta
31b40 72 74 6c 69 6e 65 29 3b 0a 20 20 20 20 20 20 6e  rtline);.      n
31b50 53 71 6c 20 3d 20 30 3b 0a 20 20 20 20 20 20 69  Sql = 0;.      i
31b60 66 28 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 29  f( p->outCount )
31b70 7b 0a 20 20 20 20 20 20 20 20 6f 75 74 70 75 74  {.        output
31b80 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 20  _reset(p);.     
31b90 20 20 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d     p->outCount =
31ba0 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
31bb0 7d 65 6c 73 65 20 69 66 28 20 6e 53 71 6c 20 26  }else if( nSql &
31bc0 26 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63  & _all_whitespac
31bd0 65 28 7a 53 71 6c 29 20 29 7b 0a 20 20 20 20 20  e(zSql) ){.     
31be0 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c 61   if( ShellHasFla
31bf0 67 28 70 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29  g(p, SHFLG_Echo)
31c00 20 29 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22   ) printf("%s\n"
31c10 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 6e  , zSql);.      n
31c20 53 71 6c 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  Sql = 0;.    }. 
31c30 20 7d 0a 20 20 69 66 28 20 6e 53 71 6c 20 26 26   }.  if( nSql &&
31c40 20 21 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63   !_all_whitespac
31c50 65 28 7a 53 71 6c 29 20 29 7b 0a 20 20 20 20 72  e(zSql) ){.    r
31c60 75 6e 4f 6e 65 53 71 6c 4c 69 6e 65 28 70 2c 20  unOneSqlLine(p, 
31c70 7a 53 71 6c 2c 20 69 6e 2c 20 73 74 61 72 74 6c  zSql, in, startl
31c80 69 6e 65 29 3b 0a 20 20 7d 0a 20 20 66 72 65 65  ine);.  }.  free
31c90 28 7a 53 71 6c 29 3b 0a 20 20 66 72 65 65 28 7a  (zSql);.  free(z
31ca0 4c 69 6e 65 29 3b 0a 20 20 72 65 74 75 72 6e 20  Line);.  return 
31cb0 65 72 72 43 6e 74 3e 30 3b 0a 7d 0a 0a 2f 2a 0a  errCnt>0;.}../*.
31cc0 2a 2a 20 52 65 74 75 72 6e 20 61 20 70 61 74 68  ** Return a path
31cd0 6e 61 6d 65 20 77 68 69 63 68 20 69 73 20 74 68  name which is th
31ce0 65 20 75 73 65 72 27 73 20 68 6f 6d 65 20 64 69  e user's home di
31cf0 72 65 63 74 6f 72 79 2e 20 20 41 0a 2a 2a 20 30  rectory.  A.** 0
31d00 20 72 65 74 75 72 6e 20 69 6e 64 69 63 61 74 65   return indicate
31d10 73 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f  s an error of so
31d20 6d 65 20 6b 69 6e 64 2e 0a 2a 2f 0a 73 74 61 74  me kind..*/.stat
31d30 69 63 20 63 68 61 72 20 2a 66 69 6e 64 5f 68 6f  ic char *find_ho
31d40 6d 65 5f 64 69 72 28 69 6e 74 20 63 6c 65 61 72  me_dir(int clear
31d50 46 6c 61 67 29 7b 0a 20 20 73 74 61 74 69 63 20  Flag){.  static 
31d60 63 68 61 72 20 2a 68 6f 6d 65 5f 64 69 72 20 3d  char *home_dir =
31d70 20 4e 55 4c 4c 3b 0a 20 20 69 66 28 20 63 6c 65   NULL;.  if( cle
31d80 61 72 46 6c 61 67 20 29 7b 0a 20 20 20 20 66 72  arFlag ){.    fr
31d90 65 65 28 68 6f 6d 65 5f 64 69 72 29 3b 0a 20 20  ee(home_dir);.  
31da0 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 30 3b 0a    home_dir = 0;.
31db0 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
31dc0 7d 0a 20 20 69 66 28 20 68 6f 6d 65 5f 64 69 72  }.  if( home_dir
31dd0 20 29 20 72 65 74 75 72 6e 20 68 6f 6d 65 5f 64   ) return home_d
31de0 69 72 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  ir;..#if !define
31df0 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
31e00 66 69 6e 65 64 28 57 49 4e 33 32 29 20 26 26 20  fined(WIN32) && 
31e10 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f  !defined(_WIN32_
31e20 57 43 45 29 20 5c 0a 20 20 20 20 20 26 26 20 21  WCE) \.     && !
31e30 64 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29  defined(__RTP__)
31e40 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 52   && !defined(_WR
31e50 53 5f 4b 45 52 4e 45 4c 29 0a 20 20 7b 0a 20 20  S_KERNEL).  {.  
31e60 20 20 73 74 72 75 63 74 20 70 61 73 73 77 64 20    struct passwd 
31e70 2a 70 77 65 6e 74 3b 0a 20 20 20 20 75 69 64 5f  *pwent;.    uid_
31e80 74 20 75 69 64 20 3d 20 67 65 74 75 69 64 28 29  t uid = getuid()
31e90 3b 0a 20 20 20 20 69 66 28 20 28 70 77 65 6e 74  ;.    if( (pwent
31ea0 3d 67 65 74 70 77 75 69 64 28 75 69 64 29 29 20  =getpwuid(uid)) 
31eb0 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 20  != NULL) {.     
31ec0 20 68 6f 6d 65 5f 64 69 72 20 3d 20 70 77 65 6e   home_dir = pwen
31ed0 74 2d 3e 70 77 5f 64 69 72 3b 0a 20 20 20 20 7d  t->pw_dir;.    }
31ee0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
31ef0 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f   defined(_WIN32_
31f00 57 43 45 29 0a 20 20 2f 2a 20 57 69 6e 64 6f 77  WCE).  /* Window
31f10 73 20 43 45 20 28 61 72 6d 2d 77 69 6e 63 65 2d  s CE (arm-wince-
31f20 6d 69 6e 67 77 33 32 63 65 2d 67 63 63 29 20 64  mingw32ce-gcc) d
31f30 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 20  oes not provide 
31f40 67 65 74 65 6e 76 28 29 0a 20 20 20 2a 2f 0a 20  getenv().   */. 
31f50 20 68 6f 6d 65 5f 64 69 72 20 3d 20 22 2f 22 3b   home_dir = "/";
31f60 0a 23 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69  .#else..#if defi
31f70 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64  ned(_WIN32) || d
31f80 65 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 20 20  efined(WIN32).  
31f90 69 66 20 28 21 68 6f 6d 65 5f 64 69 72 29 20 7b  if (!home_dir) {
31fa0 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20  .    home_dir = 
31fb0 67 65 74 65 6e 76 28 22 55 53 45 52 50 52 4f 46  getenv("USERPROF
31fc0 49 4c 45 22 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  ILE");.  }.#endi
31fd0 66 0a 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f 64  f..  if (!home_d
31fe0 69 72 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64  ir) {.    home_d
31ff0 69 72 20 3d 20 67 65 74 65 6e 76 28 22 48 4f 4d  ir = getenv("HOM
32000 45 22 29 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65  E");.  }..#if de
32010 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c  fined(_WIN32) ||
32020 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 0a   defined(WIN32).
32030 20 20 69 66 20 28 21 68 6f 6d 65 5f 64 69 72 29    if (!home_dir)
32040 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 72   {.    char *zDr
32050 69 76 65 2c 20 2a 7a 50 61 74 68 3b 0a 20 20 20  ive, *zPath;.   
32060 20 69 6e 74 20 6e 3b 0a 20 20 20 20 7a 44 72 69   int n;.    zDri
32070 76 65 20 3d 20 67 65 74 65 6e 76 28 22 48 4f 4d  ve = getenv("HOM
32080 45 44 52 49 56 45 22 29 3b 0a 20 20 20 20 7a 50  EDRIVE");.    zP
32090 61 74 68 20 3d 20 67 65 74 65 6e 76 28 22 48 4f  ath = getenv("HO
320a0 4d 45 50 41 54 48 22 29 3b 0a 20 20 20 20 69 66  MEPATH");.    if
320b0 28 20 7a 44 72 69 76 65 20 26 26 20 7a 50 61 74  ( zDrive && zPat
320c0 68 20 29 7b 0a 20 20 20 20 20 20 6e 20 3d 20 73  h ){.      n = s
320d0 74 72 6c 65 6e 33 30 28 7a 44 72 69 76 65 29 20  trlen30(zDrive) 
320e0 2b 20 73 74 72 6c 65 6e 33 30 28 7a 50 61 74 68  + strlen30(zPath
320f0 29 20 2b 20 31 3b 0a 20 20 20 20 20 20 68 6f 6d  ) + 1;.      hom
32100 65 5f 64 69 72 20 3d 20 6d 61 6c 6c 6f 63 28 20  e_dir = malloc( 
32110 6e 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 68  n );.      if( h
32120 6f 6d 65 5f 64 69 72 3d 3d 30 20 29 20 72 65 74  ome_dir==0 ) ret
32130 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 73 71 6c  urn 0;.      sql
32140 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 2c  ite3_snprintf(n,
32150 20 68 6f 6d 65 5f 64 69 72 2c 20 22 25 73 25 73   home_dir, "%s%s
32160 22 2c 20 7a 44 72 69 76 65 2c 20 7a 50 61 74 68  ", zDrive, zPath
32170 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
32180 68 6f 6d 65 5f 64 69 72 3b 0a 20 20 20 20 7d 0a  home_dir;.    }.
32190 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 22      home_dir = "
321a0 63 3a 5c 5c 22 3b 0a 20 20 7d 0a 23 65 6e 64 69  c:\\";.  }.#endi
321b0 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 21 5f 57  f..#endif /* !_W
321c0 49 4e 33 32 5f 57 43 45 20 2a 2f 0a 0a 20 20 69  IN32_WCE */..  i
321d0 66 28 20 68 6f 6d 65 5f 64 69 72 20 29 7b 0a 20  f( home_dir ){. 
321e0 20 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65     int n = strle
321f0 6e 33 30 28 68 6f 6d 65 5f 64 69 72 29 20 2b 20  n30(home_dir) + 
32200 31 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d  1;.    char *z =
32210 20 6d 61 6c 6c 6f 63 28 20 6e 20 29 3b 0a 20 20   malloc( n );.  
32220 20 20 69 66 28 20 7a 20 29 20 6d 65 6d 63 70 79    if( z ) memcpy
32230 28 7a 2c 20 68 6f 6d 65 5f 64 69 72 2c 20 6e 29  (z, home_dir, n)
32240 3b 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d  ;.    home_dir =
32250 20 7a 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72   z;.  }..  retur
32260 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a 7d 0a 0a 2f  n home_dir;.}../
32270 2a 0a 2a 2a 20 52 65 61 64 20 69 6e 70 75 74 20  *.** Read input 
32280 66 72 6f 6d 20 74 68 65 20 66 69 6c 65 20 67 69  from the file gi
32290 76 65 6e 20 62 79 20 73 71 6c 69 74 65 72 63 5f  ven by sqliterc_
322a0 6f 76 65 72 72 69 64 65 2e 20 20 4f 72 20 69 66  override.  Or if
322b0 20 74 68 61 74 0a 2a 2a 20 70 61 72 61 6d 65 74   that.** paramet
322c0 65 72 20 69 73 20 4e 55 4c 4c 2c 20 74 61 6b 65  er is NULL, take
322d0 20 69 6e 70 75 74 20 66 72 6f 6d 20 7e 2f 2e 73   input from ~/.s
322e0 71 6c 69 74 65 72 63 0a 2a 2a 0a 2a 2a 20 52 65  qliterc.**.** Re
322f0 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
32300 20 6f 66 20 65 72 72 6f 72 73 2e 0a 2a 2f 0a 73   of errors..*/.s
32310 74 61 74 69 63 20 76 6f 69 64 20 70 72 6f 63 65  tatic void proce
32320 73 73 5f 73 71 6c 69 74 65 72 63 28 0a 20 20 53  ss_sqliterc(.  S
32330 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 20 20  hellState *p,   
32340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32350 2a 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  * Configuration 
32360 64 61 74 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  data */.  const 
32370 63 68 61 72 20 2a 73 71 6c 69 74 65 72 63 5f 6f  char *sqliterc_o
32380 76 65 72 72 69 64 65 20 20 20 2f 2a 20 4e 61 6d  verride   /* Nam
32390 65 20 6f 66 20 63 6f 6e 66 69 67 20 66 69 6c 65  e of config file
323a0 2e 20 4e 55 4c 4c 20 74 6f 20 75 73 65 20 64 65  . NULL to use de
323b0 66 61 75 6c 74 20 2a 2f 0a 29 7b 0a 20 20 63 68  fault */.){.  ch
323c0 61 72 20 2a 68 6f 6d 65 5f 64 69 72 20 3d 20 4e  ar *home_dir = N
323d0 55 4c 4c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  ULL;.  const cha
323e0 72 20 2a 73 71 6c 69 74 65 72 63 20 3d 20 73 71  r *sqliterc = sq
323f0 6c 69 74 65 72 63 5f 6f 76 65 72 72 69 64 65 3b  literc_override;
32400 0a 20 20 63 68 61 72 20 2a 7a 42 75 66 20 3d 20  .  char *zBuf = 
32410 30 3b 0a 20 20 46 49 4c 45 20 2a 69 6e 20 3d 20  0;.  FILE *in = 
32420 4e 55 4c 4c 3b 0a 0a 20 20 69 66 20 28 73 71 6c  NULL;..  if (sql
32430 69 74 65 72 63 20 3d 3d 20 4e 55 4c 4c 29 20 7b  iterc == NULL) {
32440 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20  .    home_dir = 
32450 66 69 6e 64 5f 68 6f 6d 65 5f 64 69 72 28 30 29  find_home_dir(0)
32460 3b 0a 20 20 20 20 69 66 28 20 68 6f 6d 65 5f 64  ;.    if( home_d
32470 69 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ir==0 ){.      r
32480 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
32490 2c 20 22 2d 2d 20 77 61 72 6e 69 6e 67 3a 20 63  , "-- warning: c
324a0 61 6e 6e 6f 74 20 66 69 6e 64 20 68 6f 6d 65 20  annot find home 
324b0 64 69 72 65 63 74 6f 72 79 3b 22 0a 20 20 20 20  directory;".    
324c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324d0 20 20 22 20 63 61 6e 6e 6f 74 20 72 65 61 64 20    " cannot read 
324e0 7e 2f 2e 73 71 6c 69 74 65 72 63 5c 6e 22 29 3b  ~/.sqliterc\n");
324f0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  .      return;. 
32500 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
32510 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20  _initialize();. 
32520 20 20 20 7a 42 75 66 20 3d 20 73 71 6c 69 74 65     zBuf = sqlite
32530 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 2f 2e 73  3_mprintf("%s/.s
32540 71 6c 69 74 65 72 63 22 2c 68 6f 6d 65 5f 64 69  qliterc",home_di
32550 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 72 63  r);.    sqliterc
32560 20 3d 20 7a 42 75 66 3b 0a 20 20 7d 0a 20 20 69   = zBuf;.  }.  i
32570 6e 20 3d 20 66 6f 70 65 6e 28 73 71 6c 69 74 65  n = fopen(sqlite
32580 72 63 2c 22 72 62 22 29 3b 0a 20 20 69 66 28 20  rc,"rb");.  if( 
32590 69 6e 20 29 7b 0a 20 20 20 20 69 66 28 20 73 74  in ){.    if( st
325a0 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69  din_is_interacti
325b0 76 65 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  ve ){.      utf8
325c0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
325d0 2d 2d 20 4c 6f 61 64 69 6e 67 20 72 65 73 6f 75  -- Loading resou
325e0 72 63 65 73 20 66 72 6f 6d 20 25 73 5c 6e 22 2c  rces from %s\n",
325f0 73 71 6c 69 74 65 72 63 29 3b 0a 20 20 20 20 7d  sqliterc);.    }
32600 0a 20 20 20 20 70 72 6f 63 65 73 73 5f 69 6e 70  .    process_inp
32610 75 74 28 70 2c 69 6e 29 3b 0a 20 20 20 20 66 63  ut(p,in);.    fc
32620 6c 6f 73 65 28 69 6e 29 3b 0a 20 20 7d 0a 20 20  lose(in);.  }.  
32630 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 42 75  sqlite3_free(zBu
32640 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 68 6f  f);.}../*.** Sho
32650 77 20 61 76 61 69 6c 61 62 6c 65 20 63 6f 6d 6d  w available comm
32660 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73  and line options
32670 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  .*/.static const
32680 20 63 68 61 72 20 7a 4f 70 74 69 6f 6e 73 5b 5d   char zOptions[]
32690 20 3d 0a 20 20 22 20 20 20 2d 61 73 63 69 69 20   =.  "   -ascii 
326a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
326b0 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f  t output mode to
326c0 20 27 61 73 63 69 69 27 5c 6e 22 0a 20 20 22 20   'ascii'\n".  " 
326d0 20 20 2d 62 61 69 6c 20 20 20 20 20 20 20 20 20    -bail         
326e0 20 20 20 20 20 20 20 73 74 6f 70 20 61 66 74 65         stop afte
326f0 72 20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72  r hitting an err
32700 6f 72 5c 6e 22 0a 20 20 22 20 20 20 2d 62 61 74  or\n".  "   -bat
32710 63 68 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ch              
32720 20 66 6f 72 63 65 20 62 61 74 63 68 20 49 2f 4f   force batch I/O
32730 5c 6e 22 0a 20 20 22 20 20 20 2d 63 6f 6c 75 6d  \n".  "   -colum
32740 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  n              s
32750 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74  et output mode t
32760 6f 20 27 63 6f 6c 75 6d 6e 27 5c 6e 22 0a 20 20  o 'column'\n".  
32770 22 20 20 20 2d 63 6d 64 20 43 4f 4d 4d 41 4e 44  "   -cmd COMMAND
32780 20 20 20 20 20 20 20 20 20 72 75 6e 20 5c 22 43           run \"C
32790 4f 4d 4d 41 4e 44 5c 22 20 62 65 66 6f 72 65 20  OMMAND\" before 
327a0 72 65 61 64 69 6e 67 20 73 74 64 69 6e 5c 6e 22  reading stdin\n"
327b0 0a 20 20 22 20 20 20 2d 63 73 76 20 20 20 20 20  .  "   -csv     
327c0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
327d0 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27  output mode to '
327e0 63 73 76 27 5c 6e 22 0a 20 20 22 20 20 20 2d 65  csv'\n".  "   -e
327f0 63 68 6f 20 20 20 20 20 20 20 20 20 20 20 20 20  cho             
32800 20 20 20 70 72 69 6e 74 20 63 6f 6d 6d 61 6e 64     print command
32810 73 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  s before executi
32820 6f 6e 5c 6e 22 0a 20 20 22 20 20 20 2d 69 6e 69  on\n".  "   -ini
32830 74 20 46 49 4c 45 4e 41 4d 45 20 20 20 20 20 20  t FILENAME      
32840 20 72 65 61 64 2f 70 72 6f 63 65 73 73 20 6e 61   read/process na
32850 6d 65 64 20 66 69 6c 65 5c 6e 22 0a 20 20 22 20  med file\n".  " 
32860 20 20 2d 5b 6e 6f 5d 68 65 61 64 65 72 20 20 20    -[no]header   
32870 20 20 20 20 20 20 20 74 75 72 6e 20 68 65 61 64         turn head
32880 65 72 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22  ers on or off\n"
32890 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
328a0 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
328b0 53 33 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  S3) || defined(S
328c0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
328d0 53 59 53 35 29 0a 20 20 22 20 20 20 2d 68 65 61  SYS5).  "   -hea
328e0 70 20 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  p SIZE          
328f0 20 53 69 7a 65 20 6f 66 20 68 65 61 70 20 66 6f   Size of heap fo
32900 72 20 6d 65 6d 73 79 73 33 20 6f 72 20 6d 65 6d  r memsys3 or mem
32910 73 79 73 35 5c 6e 22 0a 23 65 6e 64 69 66 0a 20  sys5\n".#endif. 
32920 20 22 20 20 20 2d 68 65 6c 70 20 20 20 20 20 20   "   -help      
32930 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 20 74            show t
32940 68 69 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20  his message\n". 
32950 20 22 20 20 20 2d 68 74 6d 6c 20 20 20 20 20 20   "   -html      
32960 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75            set ou
32970 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 48 54 4d  tput mode to HTM
32980 4c 5c 6e 22 0a 20 20 22 20 20 20 2d 69 6e 74 65  L\n".  "   -inte
32990 72 61 63 74 69 76 65 20 20 20 20 20 20 20 20 20  ractive         
329a0 66 6f 72 63 65 20 69 6e 74 65 72 61 63 74 69 76  force interactiv
329b0 65 20 49 2f 4f 5c 6e 22 0a 20 20 22 20 20 20 2d  e I/O\n".  "   -
329c0 6c 69 6e 65 20 20 20 20 20 20 20 20 20 20 20 20  line            
329d0 20 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d      set output m
329e0 6f 64 65 20 74 6f 20 27 6c 69 6e 65 27 5c 6e 22  ode to 'line'\n"
329f0 0a 20 20 22 20 20 20 2d 6c 69 73 74 20 20 20 20  .  "   -list    
32a00 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
32a10 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27  output mode to '
32a20 6c 69 73 74 27 5c 6e 22 0a 20 20 22 20 20 20 2d  list'\n".  "   -
32a30 6c 6f 6f 6b 61 73 69 64 65 20 53 49 5a 45 20 4e  lookaside SIZE N
32a40 20 20 20 20 75 73 65 20 4e 20 65 6e 74 72 69 65      use N entrie
32a50 73 20 6f 66 20 53 5a 20 62 79 74 65 73 20 66 6f  s of SZ bytes fo
32a60 72 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f  r lookaside memo
32a70 72 79 5c 6e 22 0a 20 20 22 20 20 20 2d 6d 6d 61  ry\n".  "   -mma
32a80 70 20 4e 20 20 20 20 20 20 20 20 20 20 20 20 20  p N             
32a90 20 64 65 66 61 75 6c 74 20 6d 6d 61 70 20 73 69   default mmap si
32aa0 7a 65 20 73 65 74 20 74 6f 20 4e 5c 6e 22 0a 23  ze set to N\n".#
32ab0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
32ac0 42 4c 45 5f 4d 55 4c 54 49 50 4c 45 58 0a 20 20  BLE_MULTIPLEX.  
32ad0 22 20 20 20 2d 6d 75 6c 74 69 70 6c 65 78 20 20  "   -multiplex  
32ae0 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 20           enable 
32af0 74 68 65 20 6d 75 6c 74 69 70 6c 65 78 6f 72 20  the multiplexor 
32b00 56 46 53 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20  VFS\n".#endif.  
32b10 22 20 20 20 2d 6e 65 77 6c 69 6e 65 20 53 45 50  "   -newline SEP
32b20 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75 74           set out
32b30 70 75 74 20 72 6f 77 20 73 65 70 61 72 61 74 6f  put row separato
32b40 72 2e 20 44 65 66 61 75 6c 74 3a 20 27 5c 5c 6e  r. Default: '\\n
32b50 27 5c 6e 22 0a 20 20 22 20 20 20 2d 6e 75 6c 6c  '\n".  "   -null
32b60 76 61 6c 75 65 20 54 45 58 54 20 20 20 20 20 20  value TEXT      
32b70 73 65 74 20 74 65 78 74 20 73 74 72 69 6e 67 20  set text string 
32b80 66 6f 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e  for NULL values.
32b90 20 44 65 66 61 75 6c 74 20 27 27 5c 6e 22 0a 20   Default ''\n". 
32ba0 20 22 20 20 20 2d 70 61 67 65 63 61 63 68 65 20   "   -pagecache 
32bb0 53 49 5a 45 20 4e 20 20 20 20 75 73 65 20 4e 20  SIZE N    use N 
32bc0 73 6c 6f 74 73 20 6f 66 20 53 5a 20 62 79 74 65  slots of SZ byte
32bd0 73 20 65 61 63 68 20 66 6f 72 20 70 61 67 65 20  s each for page 
32be0 63 61 63 68 65 20 6d 65 6d 6f 72 79 5c 6e 22 0a  cache memory\n".
32bf0 20 20 22 20 20 20 2d 71 75 6f 74 65 20 20 20 20    "   -quote    
32c00 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6f             set o
32c10 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27 71  utput mode to 'q
32c20 75 6f 74 65 27 5c 6e 22 0a 20 20 22 20 20 20 2d  uote'\n".  "   -
32c30 73 65 70 61 72 61 74 6f 72 20 53 45 50 20 20 20  separator SEP   
32c40 20 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 63      set output c
32c50 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 2e  olumn separator.
32c60 20 44 65 66 61 75 6c 74 3a 20 27 7c 27 5c 6e 22   Default: '|'\n"
32c70 0a 20 20 22 20 20 20 2d 73 74 61 74 73 20 20 20  .  "   -stats   
32c80 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e              prin
32c90 74 20 6d 65 6d 6f 72 79 20 73 74 61 74 73 20 62  t memory stats b
32ca0 65 66 6f 72 65 20 65 61 63 68 20 66 69 6e 61 6c  efore each final
32cb0 69 7a 65 5c 6e 22 0a 20 20 22 20 20 20 2d 76 65  ize\n".  "   -ve
32cc0 72 73 69 6f 6e 20 20 20 20 20 20 20 20 20 20 20  rsion           
32cd0 20 20 73 68 6f 77 20 53 51 4c 69 74 65 20 76 65    show SQLite ve
32ce0 72 73 69 6f 6e 5c 6e 22 0a 20 20 22 20 20 20 2d  rsion\n".  "   -
32cf0 76 66 73 20 4e 41 4d 45 20 20 20 20 20 20 20 20  vfs NAME        
32d00 20 20 20 20 75 73 65 20 4e 41 4d 45 20 61 73 20      use NAME as 
32d10 74 68 65 20 64 65 66 61 75 6c 74 20 56 46 53 5c  the default VFS\
32d20 6e 22 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  n".#ifdef SQLITE
32d30 5f 45 4e 41 42 4c 45 5f 56 46 53 54 52 41 43 45  _ENABLE_VFSTRACE
32d40 0a 20 20 22 20 20 20 2d 76 66 73 74 72 61 63 65  .  "   -vfstrace
32d50 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 61 62              enab
32d60 6c 65 20 74 72 61 63 69 6e 67 20 6f 66 20 61 6c  le tracing of al
32d70 6c 20 56 46 53 20 63 61 6c 6c 73 5c 6e 22 0a 23  l VFS calls\n".#
32d80 65 6e 64 69 66 0a 3b 0a 73 74 61 74 69 63 20 76  endif.;.static v
32d90 6f 69 64 20 75 73 61 67 65 28 69 6e 74 20 73 68  oid usage(int sh
32da0 6f 77 44 65 74 61 69 6c 29 7b 0a 20 20 75 74 66  owDetail){.  utf
32db0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
32dc0 0a 20 20 20 20 20 20 22 55 73 61 67 65 3a 20 25  .      "Usage: %
32dd0 73 20 5b 4f 50 54 49 4f 4e 53 5d 20 46 49 4c 45  s [OPTIONS] FILE
32de0 4e 41 4d 45 20 5b 53 51 4c 5d 5c 6e 22 0a 20 20  NAME [SQL]\n".  
32df0 20 20 20 20 22 46 49 4c 45 4e 41 4d 45 20 69 73      "FILENAME is
32e00 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20   the name of an 
32e10 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 2e  SQLite database.
32e20 20 41 20 6e 65 77 20 64 61 74 61 62 61 73 65 20   A new database 
32e30 69 73 20 63 72 65 61 74 65 64 5c 6e 22 0a 20 20  is created\n".  
32e40 20 20 20 20 22 69 66 20 74 68 65 20 66 69 6c 65      "if the file
32e50 20 64 6f 65 73 20 6e 6f 74 20 70 72 65 76 69 6f   does not previo
32e60 75 73 6c 79 20 65 78 69 73 74 2e 5c 6e 22 2c 20  usly exist.\n", 
32e70 41 72 67 76 30 29 3b 0a 20 20 69 66 28 20 73 68  Argv0);.  if( sh
32e80 6f 77 44 65 74 61 69 6c 20 29 7b 0a 20 20 20 20  owDetail ){.    
32e90 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
32ea0 72 72 2c 20 22 4f 50 54 49 4f 4e 53 20 69 6e 63  rr, "OPTIONS inc
32eb0 6c 75 64 65 3a 5c 6e 25 73 22 2c 20 7a 4f 70 74  lude:\n%s", zOpt
32ec0 69 6f 6e 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ions);.  }else{.
32ed0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
32ee0 74 64 65 72 72 2c 20 22 55 73 65 20 74 68 65 20  tderr, "Use the 
32ef0 2d 68 65 6c 70 20 6f 70 74 69 6f 6e 20 66 6f 72  -help option for
32f00 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
32f10 72 6d 61 74 69 6f 6e 5c 6e 22 29 3b 0a 20 20 7d  rmation\n");.  }
32f20 0a 20 20 65 78 69 74 28 31 29 3b 0a 7d 0a 0a 2f  .  exit(1);.}../
32f30 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20  *.** Initialize 
32f40 74 68 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  the state inform
32f50 61 74 69 6f 6e 20 69 6e 20 64 61 74 61 0a 2a 2f  ation in data.*/
32f60 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 61 69  .static void mai
32f70 6e 5f 69 6e 69 74 28 53 68 65 6c 6c 53 74 61 74  n_init(ShellStat
32f80 65 20 2a 64 61 74 61 29 20 7b 0a 20 20 6d 65 6d  e *data) {.  mem
32f90 73 65 74 28 64 61 74 61 2c 20 30 2c 20 73 69 7a  set(data, 0, siz
32fa0 65 6f 66 28 2a 64 61 74 61 29 29 3b 0a 20 20 64  eof(*data));.  d
32fb0 61 74 61 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 20  ata->normalMode 
32fc0 3d 20 64 61 74 61 2d 3e 63 4d 6f 64 65 20 3d 20  = data->cMode = 
32fd0 64 61 74 61 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44  data->mode = MOD
32fe0 45 5f 4c 69 73 74 3b 0a 20 20 64 61 74 61 2d 3e  E_List;.  data->
32ff0 61 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20 31 3b  autoExplain = 1;
33000 0a 20 20 6d 65 6d 63 70 79 28 64 61 74 61 2d 3e  .  memcpy(data->
33010 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 53 45 50  colSeparator,SEP
33020 5f 43 6f 6c 75 6d 6e 2c 20 32 29 3b 0a 20 20 6d  _Column, 2);.  m
33030 65 6d 63 70 79 28 64 61 74 61 2d 3e 72 6f 77 53  emcpy(data->rowS
33040 65 70 61 72 61 74 6f 72 2c 53 45 50 5f 52 6f 77  eparator,SEP_Row
33050 2c 20 32 29 3b 0a 20 20 64 61 74 61 2d 3e 73 68  , 2);.  data->sh
33060 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20  owHeader = 0;.  
33070 64 61 74 61 2d 3e 73 68 65 6c 6c 46 6c 67 73 20  data->shellFlgs 
33080 3d 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64  = SHFLG_Lookasid
33090 65 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  e;.  sqlite3_con
330a0 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49  fig(SQLITE_CONFI
330b0 47 5f 55 52 49 2c 20 31 29 3b 0a 20 20 73 71 6c  G_URI, 1);.  sql
330c0 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49  ite3_config(SQLI
330d0 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 73  TE_CONFIG_LOG, s
330e0 68 65 6c 6c 4c 6f 67 2c 20 64 61 74 61 29 3b 0a  hellLog, data);.
330f0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
33100 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  (SQLITE_CONFIG_M
33110 55 4c 54 49 54 48 52 45 41 44 29 3b 0a 20 20 73  ULTITHREAD);.  s
33120 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
33130 73 69 7a 65 6f 66 28 6d 61 69 6e 50 72 6f 6d 70  sizeof(mainPromp
33140 74 29 2c 20 6d 61 69 6e 50 72 6f 6d 70 74 2c 22  t), mainPrompt,"
33150 73 71 6c 69 74 65 3e 20 22 29 3b 0a 20 20 73 71  sqlite> ");.  sq
33160 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
33170 69 7a 65 6f 66 28 63 6f 6e 74 69 6e 75 65 50 72  izeof(continuePr
33180 6f 6d 70 74 29 2c 20 63 6f 6e 74 69 6e 75 65 50  ompt), continueP
33190 72 6f 6d 70 74 2c 22 20 20 20 2e 2e 2e 3e 20 22  rompt,"   ...> "
331a0 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70  );.}../*.** Outp
331b0 75 74 20 74 65 78 74 20 74 6f 20 74 68 65 20 63  ut text to the c
331c0 6f 6e 73 6f 6c 65 20 69 6e 20 61 20 66 6f 6e 74  onsole in a font
331d0 20 74 68 61 74 20 61 74 74 72 61 63 74 73 20 65   that attracts e
331e0 78 74 72 61 20 61 74 74 65 6e 74 69 6f 6e 2e 0a  xtra attention..
331f0 2a 2f 0a 23 69 66 64 65 66 20 5f 57 49 4e 33 32  */.#ifdef _WIN32
33200 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 72 69  .static void pri
33210 6e 74 42 6f 6c 64 28 63 6f 6e 73 74 20 63 68 61  ntBold(const cha
33220 72 20 2a 7a 54 65 78 74 29 7b 0a 20 20 48 41 4e  r *zText){.  HAN
33230 44 4c 45 20 6f 75 74 20 3d 20 47 65 74 53 74 64  DLE out = GetStd
33240 48 61 6e 64 6c 65 28 53 54 44 5f 4f 55 54 50 55  Handle(STD_OUTPU
33250 54 5f 48 41 4e 44 4c 45 29 3b 0a 20 20 43 4f 4e  T_HANDLE);.  CON
33260 53 4f 4c 45 5f 53 43 52 45 45 4e 5f 42 55 46 46  SOLE_SCREEN_BUFF
33270 45 52 5f 49 4e 46 4f 20 64 65 66 61 75 6c 74 53  ER_INFO defaultS
33280 63 72 65 65 6e 49 6e 66 6f 3b 0a 20 20 47 65 74  creenInfo;.  Get
33290 43 6f 6e 73 6f 6c 65 53 63 72 65 65 6e 42 75 66  ConsoleScreenBuf
332a0 66 65 72 49 6e 66 6f 28 6f 75 74 2c 20 26 64 65  ferInfo(out, &de
332b0 66 61 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 29  faultScreenInfo)
332c0 3b 0a 20 20 53 65 74 43 6f 6e 73 6f 6c 65 54 65  ;.  SetConsoleTe
332d0 78 74 41 74 74 72 69 62 75 74 65 28 6f 75 74 2c  xtAttribute(out,
332e0 0a 20 20 20 20 20 20 20 20 20 46 4f 52 45 47 52  .         FOREGR
332f0 4f 55 4e 44 5f 52 45 44 7c 46 4f 52 45 47 52 4f  OUND_RED|FOREGRO
33300 55 4e 44 5f 49 4e 54 45 4e 53 49 54 59 0a 20 20  UND_INTENSITY.  
33310 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 25 73 22  );.  printf("%s"
33320 2c 20 7a 54 65 78 74 29 3b 0a 20 20 53 65 74 43  , zText);.  SetC
33330 6f 6e 73 6f 6c 65 54 65 78 74 41 74 74 72 69 62  onsoleTextAttrib
33340 75 74 65 28 6f 75 74 2c 20 64 65 66 61 75 6c 74  ute(out, default
33350 53 63 72 65 65 6e 49 6e 66 6f 2e 77 41 74 74 72  ScreenInfo.wAttr
33360 69 62 75 74 65 73 29 3b 0a 7d 0a 23 65 6c 73 65  ibutes);.}.#else
33370 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 72 69  .static void pri
33380 6e 74 42 6f 6c 64 28 63 6f 6e 73 74 20 63 68 61  ntBold(const cha
33390 72 20 2a 7a 54 65 78 74 29 7b 0a 20 20 70 72 69  r *zText){.  pri
333a0 6e 74 66 28 22 5c 30 33 33 5b 31 6d 25 73 5c 30  ntf("\033[1m%s\0
333b0 33 33 5b 30 6d 22 2c 20 7a 54 65 78 74 29 3b 0a  33[0m", zText);.
333c0 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
333d0 47 65 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  Get the argument
333e0 20 74 6f 20 61 6e 20 2d 2d 6f 70 74 69 6f 6e 2e   to an --option.
333f0 20 20 54 68 72 6f 77 20 61 6e 20 65 72 72 6f 72    Throw an error
33400 20 61 6e 64 20 64 69 65 20 69 66 20 6e 6f 20 61   and die if no a
33410 72 67 75 6d 65 6e 74 0a 2a 2a 20 69 73 20 61 76  rgument.** is av
33420 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74  ailable..*/.stat
33430 69 63 20 63 68 61 72 20 2a 63 6d 64 6c 69 6e 65  ic char *cmdline
33440 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 69 6e  _option_value(in
33450 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
33460 72 67 76 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69  rgv, int i){.  i
33470 66 28 20 69 3d 3d 61 72 67 63 20 29 7b 0a 20 20  f( i==argc ){.  
33480 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
33490 64 65 72 72 2c 20 22 25 73 3a 20 45 72 72 6f 72  derr, "%s: Error
334a0 3a 20 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65  : missing argume
334b0 6e 74 20 74 6f 20 25 73 5c 6e 22 2c 0a 20 20 20  nt to %s\n",.   
334c0 20 20 20 20 20 20 20 20 20 61 72 67 76 5b 30 5d           argv[0]
334d0 2c 20 61 72 67 76 5b 61 72 67 63 2d 31 5d 29 3b  , argv[argc-1]);
334e0 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20  .    exit(1);.  
334f0 7d 0a 20 20 72 65 74 75 72 6e 20 61 72 67 76 5b  }.  return argv[
33500 69 5d 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  i];.}..#ifndef S
33510 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55  QLITE_SHELL_IS_U
33520 54 46 38 0a 23 20 20 69 66 20 28 64 65 66 69 6e  TF8.#  if (defin
33530 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65  ed(_WIN32) || de
33540 66 69 6e 65 64 28 57 49 4e 33 32 29 29 20 26 26  fined(WIN32)) &&
33550 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45   defined(_MSC_VE
33560 52 29 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  R).#    define S
33570 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55  QLITE_SHELL_IS_U
33580 54 46 38 20 20 20 20 20 20 20 20 20 20 28 30 29  TF8          (0)
33590 0a 23 20 20 65 6c 73 65 0a 23 20 20 20 20 64 65  .#  else.#    de
335a0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 48 45 4c  fine SQLITE_SHEL
335b0 4c 5f 49 53 5f 55 54 46 38 20 20 20 20 20 20 20  L_IS_UTF8       
335c0 20 20 20 28 31 29 0a 23 20 20 65 6e 64 69 66 0a     (1).#  endif.
335d0 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
335e0 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55 54 46 38  TE_SHELL_IS_UTF8
335f0 0a 69 6e 74 20 53 51 4c 49 54 45 5f 43 44 45 43  .int SQLITE_CDEC
33600 4c 20 6d 61 69 6e 28 69 6e 74 20 61 72 67 63 2c  L main(int argc,
33610 20 63 68 61 72 20 2a 2a 61 72 67 76 29 7b 0a 23   char **argv){.#
33620 65 6c 73 65 0a 69 6e 74 20 53 51 4c 49 54 45 5f  else.int SQLITE_
33630 43 44 45 43 4c 20 77 6d 61 69 6e 28 69 6e 74 20  CDECL wmain(int 
33640 61 72 67 63 2c 20 77 63 68 61 72 5f 74 20 2a 2a  argc, wchar_t **
33650 77 61 72 67 76 29 7b 0a 20 20 63 68 61 72 20 2a  wargv){.  char *
33660 2a 61 72 67 76 3b 0a 23 65 6e 64 69 66 0a 20 20  *argv;.#endif.  
33670 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20  char *zErrMsg = 
33680 30 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  0;.  ShellState 
33690 64 61 74 61 3b 0a 20 20 63 6f 6e 73 74 20 63 68  data;.  const ch
336a0 61 72 20 2a 7a 49 6e 69 74 46 69 6c 65 20 3d 20  ar *zInitFile = 
336b0 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  0;.  int i;.  in
336c0 74 20 72 63 20 3d 20 30 3b 0a 20 20 69 6e 74 20  t rc = 0;.  int 
336d0 77 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20 3d  warnInmemoryDb =
336e0 20 30 3b 0a 20 20 69 6e 74 20 72 65 61 64 53 74   0;.  int readSt
336f0 64 69 6e 20 3d 20 31 3b 0a 20 20 69 6e 74 20 6e  din = 1;.  int n
33700 43 6d 64 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  Cmd = 0;.  char 
33710 2a 2a 61 7a 43 6d 64 20 3d 20 30 3b 0a 0a 20 20  **azCmd = 0;..  
33720 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 73 74  setBinaryMode(st
33730 64 69 6e 2c 20 30 29 3b 0a 20 20 73 65 74 76 62  din, 0);.  setvb
33740 75 66 28 73 74 64 65 72 72 2c 20 30 2c 20 5f 49  uf(stderr, 0, _I
33750 4f 4e 42 46 2c 20 30 29 3b 20 2f 2a 20 4d 61 6b  ONBF, 0); /* Mak
33760 65 20 73 75 72 65 20 73 74 64 65 72 72 20 69 73  e sure stderr is
33770 20 75 6e 62 75 66 66 65 72 65 64 20 2a 2f 0a 20   unbuffered */. 
33780 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61   stdin_is_intera
33790 63 74 69 76 65 20 3d 20 69 73 61 74 74 79 28 30  ctive = isatty(0
337a0 29 3b 0a 20 20 73 74 64 6f 75 74 5f 69 73 5f 63  );.  stdout_is_c
337b0 6f 6e 73 6f 6c 65 20 3d 20 69 73 61 74 74 79 28  onsole = isatty(
337c0 31 29 3b 0a 0a 23 69 66 20 55 53 45 5f 53 59 53  1);..#if USE_SYS
337d0 54 45 4d 5f 53 51 4c 49 54 45 2b 30 21 3d 31 0a  TEM_SQLITE+0!=1.
337e0 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 73 71    if( strncmp(sq
337f0 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29  lite3_sourceid()
33800 2c 53 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49  ,SQLITE_SOURCE_I
33810 44 2c 36 30 29 21 3d 30 20 29 7b 0a 20 20 20 20  D,60)!=0 ){.    
33820 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
33830 72 72 2c 20 22 53 51 4c 69 74 65 20 68 65 61 64  rr, "SQLite head
33840 65 72 20 61 6e 64 20 73 6f 75 72 63 65 20 76 65  er and source ve
33850 72 73 69 6f 6e 20 6d 69 73 6d 61 74 63 68 5c 6e  rsion mismatch\n
33860 25 73 5c 6e 25 73 5c 6e 22 2c 0a 20 20 20 20 20  %s\n%s\n",.     
33870 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73         sqlite3_s
33880 6f 75 72 63 65 69 64 28 29 2c 20 53 51 4c 49 54  ourceid(), SQLIT
33890 45 5f 53 4f 55 52 43 45 5f 49 44 29 3b 0a 20 20  E_SOURCE_ID);.  
338a0 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 23    exit(1);.  }.#
338b0 65 6e 64 69 66 0a 20 20 6d 61 69 6e 5f 69 6e 69  endif.  main_ini
338c0 74 28 26 64 61 74 61 29 3b 0a 23 69 66 20 21 53  t(&data);.#if !S
338d0 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55  QLITE_SHELL_IS_U
338e0 54 46 38 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e  TF8.  sqlite3_in
338f0 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20 20 61 72  itialize();.  ar
33900 67 76 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  gv = sqlite3_mal
33910 6c 6f 63 36 34 28 73 69 7a 65 6f 66 28 61 72 67  loc64(sizeof(arg
33920 76 5b 30 5d 29 2a 61 72 67 63 29 3b 0a 20 20 69  v[0])*argc);.  i
33930 66 28 20 61 72 67 76 3d 3d 30 20 29 7b 0a 20 20  f( argv==0 ){.  
33940 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
33950 65 72 72 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d  err, "out of mem
33960 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 65 78 69  ory\n");.    exi
33970 74 28 31 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  t(1);.  }.  for(
33980 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b  i=0; i<argc; i++
33990 29 7b 0a 20 20 20 20 61 72 67 76 5b 69 5d 20 3d  ){.    argv[i] =
339a0 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75   sqlite3_win32_u
339b0 6e 69 63 6f 64 65 5f 74 6f 5f 75 74 66 38 28 77  nicode_to_utf8(w
339c0 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 69 66  argv[i]);.    if
339d0 28 20 61 72 67 76 5b 69 5d 3d 3d 30 20 29 7b 0a  ( argv[i]==0 ){.
339e0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
339f0 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f 66  (stderr, "out of
33a00 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20   memory\n");.   
33a10 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20     exit(1);.    
33a20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 61  }.  }.#endif.  a
33a30 73 73 65 72 74 28 20 61 72 67 63 3e 3d 31 20 26  ssert( argc>=1 &
33a40 26 20 61 72 67 76 20 26 26 20 61 72 67 76 5b 30  & argv && argv[0
33a50 5d 20 29 3b 0a 20 20 41 72 67 76 30 20 3d 20 61  ] );.  Argv0 = a
33a60 72 67 76 5b 30 5d 3b 0a 0a 20 20 2f 2a 20 4d 61  rgv[0];..  /* Ma
33a70 6b 65 20 73 75 72 65 20 77 65 20 68 61 76 65 20  ke sure we have 
33a80 61 20 76 61 6c 69 64 20 73 69 67 6e 61 6c 20 68  a valid signal h
33a90 61 6e 64 6c 65 72 20 65 61 72 6c 79 2c 20 62 65  andler early, be
33aa0 66 6f 72 65 20 61 6e 79 74 68 69 6e 67 0a 20 20  fore anything.  
33ab0 2a 2a 20 65 6c 73 65 20 69 73 20 64 6f 6e 65 2e  ** else is done.
33ac0 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 49 47  .  */.#ifdef SIG
33ad0 49 4e 54 0a 20 20 73 69 67 6e 61 6c 28 53 49 47  INT.  signal(SIG
33ae0 49 4e 54 2c 20 69 6e 74 65 72 72 75 70 74 5f 68  INT, interrupt_h
33af0 61 6e 64 6c 65 72 29 3b 0a 23 65 6c 69 66 20 28  andler);.#elif (
33b00 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
33b10 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
33b20 29 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  )) && !defined(_
33b30 57 49 4e 33 32 5f 57 43 45 29 0a 20 20 53 65 74  WIN32_WCE).  Set
33b40 43 6f 6e 73 6f 6c 65 43 74 72 6c 48 61 6e 64 6c  ConsoleCtrlHandl
33b50 65 72 28 43 6f 6e 73 6f 6c 65 43 74 72 6c 48 61  er(ConsoleCtrlHa
33b60 6e 64 6c 65 72 2c 20 54 52 55 45 29 3b 0a 23 65  ndler, TRUE);.#e
33b70 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
33b80 49 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45  ITE_SHELL_DBNAME
33b90 5f 50 52 4f 43 0a 20 20 7b 0a 20 20 20 20 2f 2a  _PROC.  {.    /*
33ba0 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   If the SQLITE_S
33bb0 48 45 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52 4f 43  HELL_DBNAME_PROC
33bc0 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
33bd0 64 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  d, then it is th
33be0 65 20 6e 61 6d 65 0a 20 20 20 20 2a 2a 20 6f 66  e name.    ** of
33bf0 20 61 20 43 2d 66 75 6e 63 74 69 6f 6e 20 74 68   a C-function th
33c00 61 74 20 77 69 6c 6c 20 70 72 6f 76 69 64 65 20  at will provide 
33c10 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
33c20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
33c30 55 73 65 0a 20 20 20 20 2a 2a 20 74 68 69 73 20  Use.    ** this 
33c40 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
33c50 69 6f 6e 20 74 6f 20 65 6d 62 65 64 20 74 68 69  ion to embed thi
33c60 73 20 73 68 65 6c 6c 20 70 72 6f 67 72 61 6d 20  s shell program 
33c70 69 6e 20 6c 61 72 67 65 72 0a 20 20 20 20 2a 2a  in larger.    **
33c80 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 20 2a   applications. *
33c90 2f 0a 20 20 20 20 65 78 74 65 72 6e 20 76 6f 69  /.    extern voi
33ca0 64 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 44  d SQLITE_SHELL_D
33cb0 42 4e 41 4d 45 5f 50 52 4f 43 28 63 6f 6e 73 74  BNAME_PROC(const
33cc0 20 63 68 61 72 2a 2a 29 3b 0a 20 20 20 20 53 51   char**);.    SQ
33cd0 4c 49 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d  LITE_SHELL_DBNAM
33ce0 45 5f 50 52 4f 43 28 26 64 61 74 61 2e 7a 44 62  E_PROC(&data.zDb
33cf0 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 77  Filename);.    w
33d00 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20 3d 20  arnInmemoryDb = 
33d10 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  0;.  }.#endif.. 
33d20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 69 74 69 61   /* Do an initia
33d30 6c 20 70 61 73 73 20 74 68 72 6f 75 67 68 20 74  l pass through t
33d40 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  he command-line 
33d50 61 72 67 75 6d 65 6e 74 20 74 6f 20 6c 6f 63 61  argument to loca
33d60 74 65 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65  te.  ** the name
33d70 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
33d80 20 66 69 6c 65 2c 20 74 68 65 20 6e 61 6d 65 20   file, the name 
33d90 6f 66 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  of the initializ
33da0 61 74 69 6f 6e 20 66 69 6c 65 2c 0a 20 20 2a 2a  ation file,.  **
33db0 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
33dc0 20 61 6c 74 65 72 6e 61 74 69 76 65 20 6d 61 6c   alternative mal
33dd0 6c 6f 63 20 68 65 61 70 2c 0a 20 20 2a 2a 20 61  loc heap,.  ** a
33de0 6e 64 20 74 68 65 20 66 69 72 73 74 20 63 6f 6d  nd the first com
33df0 6d 61 6e 64 20 74 6f 20 65 78 65 63 75 74 65 2e  mand to execute.
33e00 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 31 3b  .  */.  for(i=1;
33e10 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
33e20 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20     char *z;.    
33e30 7a 20 3d 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20  z = argv[i];.   
33e40 20 69 66 28 20 7a 5b 30 5d 21 3d 27 2d 27 20 29   if( z[0]!='-' )
33e50 7b 0a 20 20 20 20 20 20 69 66 28 20 64 61 74 61  {.      if( data
33e60 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 3d 3d 30 20  .zDbFilename==0 
33e70 29 7b 0a 20 20 20 20 20 20 20 20 64 61 74 61 2e  ){.        data.
33e80 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20 7a 3b  zDbFilename = z;
33e90 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
33ea0 20 20 20 20 20 20 2f 2a 20 45 78 63 65 73 73 73        /* Excesss
33eb0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 69   arguments are i
33ec0 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 53 51  nterpreted as SQ
33ed0 4c 20 28 6f 72 20 64 6f 74 2d 63 6f 6d 6d 61 6e  L (or dot-comman
33ee0 64 73 29 20 61 6e 64 0a 20 20 20 20 20 20 20 20  ds) and.        
33ef0 2a 2a 20 6d 65 61 6e 20 74 68 61 74 20 6e 6f 74  ** mean that not
33f00 68 69 6e 67 20 69 73 20 72 65 61 64 20 66 72 6f  hing is read fro
33f10 6d 20 73 74 64 69 6e 20 2a 2f 0a 20 20 20 20 20  m stdin */.     
33f20 20 20 20 72 65 61 64 53 74 64 69 6e 20 3d 20 30     readStdin = 0
33f30 3b 0a 20 20 20 20 20 20 20 20 6e 43 6d 64 2b 2b  ;.        nCmd++
33f40 3b 0a 20 20 20 20 20 20 20 20 61 7a 43 6d 64 20  ;.        azCmd 
33f50 3d 20 72 65 61 6c 6c 6f 63 28 61 7a 43 6d 64 2c  = realloc(azCmd,
33f60 20 73 69 7a 65 6f 66 28 61 7a 43 6d 64 5b 30 5d   sizeof(azCmd[0]
33f70 29 2a 6e 43 6d 64 29 3b 0a 20 20 20 20 20 20 20  )*nCmd);.       
33f80 20 69 66 28 20 61 7a 43 6d 64 3d 3d 30 20 29 7b   if( azCmd==0 ){
33f90 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
33fa0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f  rintf(stderr, "o
33fb0 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut of memory\n")
33fc0 3b 0a 20 20 20 20 20 20 20 20 20 20 65 78 69 74  ;.          exit
33fd0 28 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  (1);.        }. 
33fe0 20 20 20 20 20 20 20 61 7a 43 6d 64 5b 6e 43 6d         azCmd[nCm
33ff0 64 2d 31 5d 20 3d 20 7a 3b 0a 20 20 20 20 20 20  d-1] = z;.      
34000 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
34010 7a 5b 31 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  z[1]=='-' ) z++;
34020 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28  .    if( strcmp(
34030 7a 2c 22 2d 73 65 70 61 72 61 74 6f 72 22 29 3d  z,"-separator")=
34040 3d 30 0a 20 20 20 20 20 7c 7c 20 73 74 72 63 6d  =0.     || strcm
34050 70 28 7a 2c 22 2d 6e 75 6c 6c 76 61 6c 75 65 22  p(z,"-nullvalue"
34060 29 3d 3d 30 0a 20 20 20 20 20 7c 7c 20 73 74 72  )==0.     || str
34070 63 6d 70 28 7a 2c 22 2d 6e 65 77 6c 69 6e 65 22  cmp(z,"-newline"
34080 29 3d 3d 30 0a 20 20 20 20 20 7c 7c 20 73 74 72  )==0.     || str
34090 63 6d 70 28 7a 2c 22 2d 63 6d 64 22 29 3d 3d 30  cmp(z,"-cmd")==0
340a0 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 28 76  .    ){.      (v
340b0 6f 69 64 29 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  oid)cmdline_opti
340c0 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61  on_value(argc, a
340d0 72 67 76 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 7d  rgv, ++i);.    }
340e0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
340f0 7a 2c 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b  z,"-init")==0 ){
34100 0a 20 20 20 20 20 20 7a 49 6e 69 74 46 69 6c 65  .      zInitFile
34110 20 3d 20 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f   = cmdline_optio
34120 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72  n_value(argc, ar
34130 67 76 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 7d 65  gv, ++i);.    }e
34140 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
34150 2c 22 2d 62 61 74 63 68 22 29 3d 3d 30 20 29 7b  ,"-batch")==0 ){
34160 0a 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  .      /* Need t
34170 6f 20 63 68 65 63 6b 20 66 6f 72 20 62 61 74 63  o check for batc
34180 68 20 6d 6f 64 65 20 68 65 72 65 20 74 6f 20 73  h mode here to s
34190 6f 20 77 65 20 63 61 6e 20 61 76 6f 69 64 20 70  o we can avoid p
341a0 72 69 6e 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a  rinting.      **
341b0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 61 6c 20 6d   informational m
341c0 65 73 73 61 67 65 73 20 28 6c 69 6b 65 20 66 72  essages (like fr
341d0 6f 6d 20 70 72 6f 63 65 73 73 5f 73 71 6c 69 74  om process_sqlit
341e0 65 72 63 29 20 62 65 66 6f 72 65 0a 20 20 20 20  erc) before.    
341f0 20 20 2a 2a 20 77 65 20 64 6f 20 74 68 65 20 61    ** we do the a
34200 63 74 75 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ctual processing
34210 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 6c 61   of arguments la
34220 74 65 72 20 69 6e 20 61 20 73 65 63 6f 6e 64 20  ter in a second 
34230 70 61 73 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  pass..      */. 
34240 20 20 20 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e       stdin_is_in
34250 74 65 72 61 63 74 69 76 65 20 3d 20 30 3b 0a 20  teractive = 0;. 
34260 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
34270 63 6d 70 28 7a 2c 22 2d 68 65 61 70 22 29 3d 3d  cmp(z,"-heap")==
34280 30 20 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64  0 ){.#if defined
34290 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
342a0 45 4d 53 59 53 33 29 20 7c 7c 20 64 65 66 69 6e  EMSYS3) || defin
342b0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
342c0 5f 4d 45 4d 53 59 53 35 29 0a 20 20 20 20 20 20  _MEMSYS5).      
342d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 69 7a  const char *zSiz
342e0 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
342f0 5f 69 6e 74 36 34 20 73 7a 48 65 61 70 3b 0a 0a  _int64 szHeap;..
34300 20 20 20 20 20 20 7a 53 69 7a 65 20 3d 20 63 6d        zSize = cm
34310 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
34320 75 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20 2b  ue(argc, argv, +
34330 2b 69 29 3b 0a 20 20 20 20 20 20 73 7a 48 65 61  +i);.      szHea
34340 70 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65  p = integerValue
34350 28 7a 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 69  (zSize);.      i
34360 66 28 20 73 7a 48 65 61 70 3e 30 78 37 66 66 66  f( szHeap>0x7fff
34370 30 30 30 30 20 29 20 73 7a 48 65 61 70 20 3d 20  0000 ) szHeap = 
34380 30 78 37 66 66 66 30 30 30 30 3b 0a 20 20 20 20  0x7fff0000;.    
34390 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
343a0 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48  (SQLITE_CONFIG_H
343b0 45 41 50 2c 20 6d 61 6c 6c 6f 63 28 28 69 6e 74  EAP, malloc((int
343c0 29 73 7a 48 65 61 70 29 2c 20 28 69 6e 74 29 73  )szHeap), (int)s
343d0 7a 48 65 61 70 2c 20 36 34 29 3b 0a 23 65 6c 73  zHeap, 64);.#els
343e0 65 0a 20 20 20 20 20 20 28 76 6f 69 64 29 63 6d  e.      (void)cm
343f0 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
34400 75 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20 2b  ue(argc, argv, +
34410 2b 69 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  +i);.#endif.    
34420 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
34430 28 7a 2c 22 2d 70 61 67 65 63 61 63 68 65 22 29  (z,"-pagecache")
34440 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ==0 ){.      int
34450 20 6e 2c 20 73 7a 3b 0a 20 20 20 20 20 20 73 7a   n, sz;.      sz
34460 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56   = (int)integerV
34470 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74  alue(cmdline_opt
34480 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
34490 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20  rgv,++i));.     
344a0 20 69 66 28 20 73 7a 3e 37 30 30 30 30 20 29 20   if( sz>70000 ) 
344b0 73 7a 20 3d 20 37 30 30 30 30 3b 0a 20 20 20 20  sz = 70000;.    
344c0 20 20 69 66 28 20 73 7a 3c 30 20 29 20 73 7a 20    if( sz<0 ) sz 
344d0 3d 20 30 3b 0a 20 20 20 20 20 20 6e 20 3d 20 28  = 0;.      n = (
344e0 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65  int)integerValue
344f0 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f  (cmdline_option_
34500 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c  value(argc,argv,
34510 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 73 71 6c  ++i));.      sql
34520 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49  ite3_config(SQLI
34530 54 45 5f 43 4f 4e 46 49 47 5f 50 41 47 45 43 41  TE_CONFIG_PAGECA
34540 43 48 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20  CHE,.           
34550 20 20 20 20 20 20 20 20 20 28 6e 3e 30 20 26 26           (n>0 &&
34560 20 73 7a 3e 30 29 20 3f 20 6d 61 6c 6c 6f 63 28   sz>0) ? malloc(
34570 6e 2a 73 7a 29 20 3a 20 30 2c 20 73 7a 2c 20 6e  n*sz) : 0, sz, n
34580 29 3b 0a 20 20 20 20 20 20 64 61 74 61 2e 73 68  );.      data.sh
34590 65 6c 6c 46 6c 67 73 20 7c 3d 20 53 48 46 4c 47  ellFlgs |= SHFLG
345a0 5f 50 61 67 65 63 61 63 68 65 3b 0a 20 20 20 20  _Pagecache;.    
345b0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
345c0 28 7a 2c 22 2d 6c 6f 6f 6b 61 73 69 64 65 22 29  (z,"-lookaside")
345d0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ==0 ){.      int
345e0 20 6e 2c 20 73 7a 3b 0a 20 20 20 20 20 20 73 7a   n, sz;.      sz
345f0 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56   = (int)integerV
34600 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74  alue(cmdline_opt
34610 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
34620 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20  rgv,++i));.     
34630 20 69 66 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d   if( sz<0 ) sz =
34640 20 30 3b 0a 20 20 20 20 20 20 6e 20 3d 20 28 69   0;.      n = (i
34650 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28  nt)integerValue(
34660 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76  cmdline_option_v
34670 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b  alue(argc,argv,+
34680 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  +i));.      if( 
34690 6e 3c 30 20 29 20 6e 20 3d 20 30 3b 0a 20 20 20  n<0 ) n = 0;.   
346a0 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
346b0 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  g(SQLITE_CONFIG_
346c0 4c 4f 4f 4b 41 53 49 44 45 2c 20 73 7a 2c 20 6e  LOOKASIDE, sz, n
346d0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a 2a  );.      if( sz*
346e0 6e 3d 3d 30 20 29 20 64 61 74 61 2e 73 68 65 6c  n==0 ) data.shel
346f0 6c 46 6c 67 73 20 26 3d 20 7e 53 48 46 4c 47 5f  lFlgs &= ~SHFLG_
34700 4c 6f 6f 6b 61 73 69 64 65 3b 0a 23 69 66 64 65  Lookaside;.#ifde
34710 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
34720 56 46 53 54 52 41 43 45 0a 20 20 20 20 7d 65 6c  VFSTRACE.    }el
34730 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
34740 22 2d 76 66 73 74 72 61 63 65 22 29 3d 3d 30 20  "-vfstrace")==0 
34750 29 7b 0a 20 20 20 20 20 20 65 78 74 65 72 6e 20  ){.      extern 
34760 69 6e 74 20 76 66 73 74 72 61 63 65 5f 72 65 67  int vfstrace_reg
34770 69 73 74 65 72 28 0a 20 20 20 20 20 20 20 20 20  ister(.         
34780 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 72 61  const char *zTra
34790 63 65 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  ceName,.        
347a0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 6c   const char *zOl
347b0 64 56 66 73 4e 61 6d 65 2c 0a 20 20 20 20 20 20  dVfsName,.      
347c0 20 20 20 69 6e 74 20 28 2a 78 4f 75 74 29 28 63     int (*xOut)(c
347d0 6f 6e 73 74 20 63 68 61 72 2a 2c 76 6f 69 64 2a  onst char*,void*
347e0 29 2c 0a 20 20 20 20 20 20 20 20 20 76 6f 69 64  ),.         void
347f0 20 2a 70 4f 75 74 41 72 67 2c 0a 20 20 20 20 20   *pOutArg,.     
34800 20 20 20 20 69 6e 74 20 6d 61 6b 65 44 65 66 61      int makeDefa
34810 75 6c 74 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  ult.      );.   
34820 20 20 20 76 66 73 74 72 61 63 65 5f 72 65 67 69     vfstrace_regi
34830 73 74 65 72 28 22 74 72 61 63 65 22 2c 30 2c 28  ster("trace",0,(
34840 69 6e 74 28 2a 29 28 63 6f 6e 73 74 20 63 68 61  int(*)(const cha
34850 72 2a 2c 76 6f 69 64 2a 29 29 66 70 75 74 73 2c  r*,void*))fputs,
34860 73 74 64 65 72 72 2c 31 29 3b 0a 23 65 6e 64 69  stderr,1);.#endi
34870 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
34880 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 50 4c 45 58  ENABLE_MULTIPLEX
34890 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
348a0 74 72 63 6d 70 28 7a 2c 22 2d 6d 75 6c 74 69 70  trcmp(z,"-multip
348b0 6c 65 78 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  lex")==0 ){.    
348c0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
348d0 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 5f 69 6e  ite3_multiple_in
348e0 69 74 69 61 6c 69 7a 65 28 63 6f 6e 73 74 20 63  itialize(const c
348f0 68 61 72 2a 2c 69 6e 74 29 3b 0a 20 20 20 20 20  har*,int);.     
34900 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c   sqlite3_multipl
34910 65 78 5f 69 6e 69 74 69 61 6c 69 7a 65 28 30 2c  ex_initialize(0,
34920 20 31 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20   1);.#endif.    
34930 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
34940 28 7a 2c 22 2d 6d 6d 61 70 22 29 3d 3d 30 20 29  (z,"-mmap")==0 )
34950 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
34960 69 6e 74 36 34 20 73 7a 20 3d 20 69 6e 74 65 67  int64 sz = integ
34970 65 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f  erValue(cmdline_
34980 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67  option_value(arg
34990 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20  c,argv,++i));.  
349a0 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66      sqlite3_conf
349b0 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ig(SQLITE_CONFIG
349c0 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 73 7a 2c 20  _MMAP_SIZE, sz, 
349d0 73 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  sz);.    }else i
349e0 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76 66  f( strcmp(z,"-vf
349f0 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  s")==0 ){.      
34a00 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
34a10 73 20 3d 20 73 71 6c 69 74 65 33 5f 76 66 73 5f  s = sqlite3_vfs_
34a20 66 69 6e 64 28 63 6d 64 6c 69 6e 65 5f 6f 70 74  find(cmdline_opt
34a30 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
34a40 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20  rgv,++i));.     
34a50 20 69 66 28 20 70 56 66 73 20 29 7b 0a 20 20 20   if( pVfs ){.   
34a60 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
34a70 5f 72 65 67 69 73 74 65 72 28 70 56 66 73 2c 20  _register(pVfs, 
34a80 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  1);.      }else{
34a90 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
34aa0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6e 6f  intf(stderr, "no
34ab0 20 73 75 63 68 20 56 46 53 3a 20 5c 22 25 73 5c   such VFS: \"%s\
34ac0 22 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a  "\n", argv[i]);.
34ad0 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b          exit(1);
34ae0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
34af0 20 7d 0a 20 20 69 66 28 20 64 61 74 61 2e 7a 44   }.  if( data.zD
34b00 62 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a  bFilename==0 ){.
34b10 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
34b20 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 20 20 20  MIT_MEMORYDB.   
34b30 20 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d   data.zDbFilenam
34b40 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a  e = ":memory:";.
34b50 20 20 20 20 77 61 72 6e 49 6e 6d 65 6d 6f 72 79      warnInmemory
34b60 44 62 20 3d 20 61 72 67 63 3d 3d 31 3b 0a 23 65  Db = argc==1;.#e
34b70 6c 73 65 0a 20 20 20 20 75 74 66 38 5f 70 72 69  lse.    utf8_pri
34b80 6e 74 66 28 73 74 64 65 72 72 2c 22 25 73 3a 20  ntf(stderr,"%s: 
34b90 45 72 72 6f 72 3a 20 6e 6f 20 64 61 74 61 62 61  Error: no databa
34ba0 73 65 20 66 69 6c 65 6e 61 6d 65 20 73 70 65 63  se filename spec
34bb0 69 66 69 65 64 5c 6e 22 2c 20 41 72 67 76 30 29  ified\n", Argv0)
34bc0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  ;.    return 1;.
34bd0 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 64 61 74  #endif.  }.  dat
34be0 61 2e 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a  a.out = stdout;.
34bf0 0a 20 20 2f 2a 20 47 6f 20 61 68 65 61 64 20 61  .  /* Go ahead a
34c00 6e 64 20 6f 70 65 6e 20 74 68 65 20 64 61 74 61  nd open the data
34c10 62 61 73 65 20 66 69 6c 65 20 69 66 20 69 74 20  base file if it 
34c20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2e 20  already exists. 
34c30 20 49 66 20 74 68 65 0a 20 20 2a 2a 20 66 69 6c   If the.  ** fil
34c40 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
34c50 2c 20 64 65 6c 61 79 20 6f 70 65 6e 69 6e 67 20  , delay opening 
34c60 69 74 2e 20 20 54 68 69 73 20 70 72 65 76 65 6e  it.  This preven
34c70 74 73 20 65 6d 70 74 79 20 64 61 74 61 62 61 73  ts empty databas
34c80 65 0a 20 20 2a 2a 20 66 69 6c 65 73 20 66 72 6f  e.  ** files fro
34c90 6d 20 62 65 69 6e 67 20 63 72 65 61 74 65 64 20  m being created 
34ca0 69 66 20 61 20 75 73 65 72 20 6d 69 73 74 79 70  if a user mistyp
34cb0 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  es the database 
34cc0 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 0a 20 20  name argument.  
34cd0 2a 2a 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ** to the sqlite
34ce0 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 74 6f   command-line to
34cf0 6f 6c 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61  ol..  */.  if( a
34d00 63 63 65 73 73 28 64 61 74 61 2e 7a 44 62 46 69  ccess(data.zDbFi
34d10 6c 65 6e 61 6d 65 2c 20 30 29 3d 3d 30 20 29 7b  lename, 0)==0 ){
34d20 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 26 64 61  .    open_db(&da
34d30 74 61 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f  ta, 0);.  }..  /
34d40 2a 20 50 72 6f 63 65 73 73 20 74 68 65 20 69 6e  * Process the in
34d50 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 66 69 6c  itialization fil
34d60 65 20 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e  e if there is on
34d70 65 2e 20 20 49 66 20 6e 6f 20 2d 69 6e 69 74 20  e.  If no -init 
34d80 6f 70 74 69 6f 6e 0a 20 20 2a 2a 20 69 73 20 67  option.  ** is g
34d90 69 76 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  iven on the comm
34da0 61 6e 64 20 6c 69 6e 65 2c 20 6c 6f 6f 6b 20 66  and line, look f
34db0 6f 72 20 61 20 66 69 6c 65 20 6e 61 6d 65 64 20  or a file named 
34dc0 7e 2f 2e 73 71 6c 69 74 65 72 63 20 61 6e 64 0a  ~/.sqliterc and.
34dd0 20 20 2a 2a 20 74 72 79 20 74 6f 20 70 72 6f 63    ** try to proc
34de0 65 73 73 20 69 74 2e 0a 20 20 2a 2f 0a 20 20 70  ess it..  */.  p
34df0 72 6f 63 65 73 73 5f 73 71 6c 69 74 65 72 63 28  rocess_sqliterc(
34e00 26 64 61 74 61 2c 7a 49 6e 69 74 46 69 6c 65 29  &data,zInitFile)
34e10 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 61 20 73  ;..  /* Make a s
34e20 65 63 6f 6e 64 20 70 61 73 73 20 74 68 72 6f 75  econd pass throu
34e30 67 68 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  gh the command-l
34e40 69 6e 65 20 61 72 67 75 6d 65 6e 74 20 61 6e 64  ine argument and
34e50 20 73 65 74 0a 20 20 2a 2a 20 6f 70 74 69 6f 6e   set.  ** option
34e60 73 2e 20 20 54 68 69 73 20 73 65 63 6f 6e 64 20  s.  This second 
34e70 70 61 73 73 20 69 73 20 64 65 6c 61 79 65 64 20  pass is delayed 
34e80 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
34e90 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 20  initialization. 
34ea0 20 2a 2a 20 66 69 6c 65 20 69 73 20 70 72 6f 63   ** file is proc
34eb0 65 73 73 65 64 20 73 6f 20 74 68 61 74 20 74 68  essed so that th
34ec0 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61  e command-line a
34ed0 72 67 75 6d 65 6e 74 73 20 77 69 6c 6c 20 6f 76  rguments will ov
34ee0 65 72 72 69 64 65 0a 20 20 2a 2a 20 73 65 74 74  erride.  ** sett
34ef0 69 6e 67 73 20 69 6e 20 74 68 65 20 69 6e 69 74  ings in the init
34f00 69 61 6c 69 7a 61 74 69 6f 6e 20 66 69 6c 65 2e  ialization file.
34f10 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 31 3b  .  */.  for(i=1;
34f20 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
34f30 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 61 72 67     char *z = arg
34f40 76 5b 69 5d 3b 0a 20 20 20 20 69 66 28 20 7a 5b  v[i];.    if( z[
34f50 30 5d 21 3d 27 2d 27 20 29 20 63 6f 6e 74 69 6e  0]!='-' ) contin
34f60 75 65 3b 0a 20 20 20 20 69 66 28 20 7a 5b 31 5d  ue;.    if( z[1]
34f70 3d 3d 27 2d 27 20 29 7b 20 7a 2b 2b 3b 20 7d 0a  =='-' ){ z++; }.
34f80 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
34f90 2c 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a  ,"-init")==0 ){.
34fa0 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 7d        i++;.    }
34fb0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
34fc0 7a 2c 22 2d 68 74 6d 6c 22 29 3d 3d 30 20 29 7b  z,"-html")==0 ){
34fd0 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65  .      data.mode
34fe0 20 3d 20 4d 4f 44 45 5f 48 74 6d 6c 3b 0a 20 20   = MODE_Html;.  
34ff0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
35000 6d 70 28 7a 2c 22 2d 6c 69 73 74 22 29 3d 3d 30  mp(z,"-list")==0
35010 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d   ){.      data.m
35020 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b  ode = MODE_List;
35030 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
35040 74 72 63 6d 70 28 7a 2c 22 2d 71 75 6f 74 65 22  trcmp(z,"-quote"
35050 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
35060 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 51  ta.mode = MODE_Q
35070 75 6f 74 65 3b 0a 20 20 20 20 7d 65 6c 73 65 20  uote;.    }else 
35080 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6c  if( strcmp(z,"-l
35090 69 6e 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ine")==0 ){.    
350a0 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f    data.mode = MO
350b0 44 45 5f 4c 69 6e 65 3b 0a 20 20 20 20 7d 65 6c  DE_Line;.    }el
350c0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
350d0 22 2d 63 6f 6c 75 6d 6e 22 29 3d 3d 30 20 29 7b  "-column")==0 ){
350e0 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65  .      data.mode
350f0 20 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b 0a   = MODE_Column;.
35100 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
35110 72 63 6d 70 28 7a 2c 22 2d 63 73 76 22 29 3d 3d  rcmp(z,"-csv")==
35120 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e  0 ){.      data.
35130 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 43 73 76 3b  mode = MODE_Csv;
35140 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 64 61  .      memcpy(da
35150 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c  ta.colSeparator,
35160 22 2c 22 2c 32 29 3b 0a 20 20 20 20 7d 65 6c 73  ",",2);.    }els
35170 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
35180 2d 61 73 63 69 69 22 29 3d 3d 30 20 29 7b 0a 20  -ascii")==0 ){. 
35190 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d       data.mode =
351a0 20 4d 4f 44 45 5f 41 73 63 69 69 3b 0a 20 20 20   MODE_Ascii;.   
351b0 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
351c0 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e  ntf(sizeof(data.
351d0 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 64  colSeparator), d
351e0 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72  ata.colSeparator
351f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
35200 20 20 20 20 20 20 20 20 20 53 45 50 5f 55 6e 69           SEP_Uni
35210 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
35220 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
35230 66 28 64 61 74 61 2e 72 6f 77 53 65 70 61 72 61  f(data.rowSepara
35240 74 6f 72 29 2c 20 64 61 74 61 2e 72 6f 77 53 65  tor), data.rowSe
35250 70 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20  parator,.       
35260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35270 53 45 50 5f 52 65 63 6f 72 64 29 3b 0a 20 20 20  SEP_Record);.   
35280 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
35290 70 28 7a 2c 22 2d 73 65 70 61 72 61 74 6f 72 22  p(z,"-separator"
352a0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  )==0 ){.      sq
352b0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
352c0 69 7a 65 6f 66 28 64 61 74 61 2e 63 6f 6c 53 65  izeof(data.colSe
352d0 70 61 72 61 74 6f 72 29 2c 20 64 61 74 61 2e 63  parator), data.c
352e0 6f 6c 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20  olSeparator,.   
352f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35300 20 20 20 20 22 25 73 22 2c 63 6d 64 6c 69 6e 65      "%s",cmdline
35310 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
35320 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20  gc,argv,++i));. 
35330 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
35340 63 6d 70 28 7a 2c 22 2d 6e 65 77 6c 69 6e 65 22  cmp(z,"-newline"
35350 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  )==0 ){.      sq
35360 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
35370 69 7a 65 6f 66 28 64 61 74 61 2e 72 6f 77 53 65  izeof(data.rowSe
35380 70 61 72 61 74 6f 72 29 2c 20 64 61 74 61 2e 72  parator), data.r
35390 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20  owSeparator,.   
353a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353b0 20 20 20 20 22 25 73 22 2c 63 6d 64 6c 69 6e 65      "%s",cmdline
353c0 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
353d0 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20  gc,argv,++i));. 
353e0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
353f0 63 6d 70 28 7a 2c 22 2d 6e 75 6c 6c 76 61 6c 75  cmp(z,"-nullvalu
35400 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
35410 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
35420 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 6e 75 6c  (sizeof(data.nul
35430 6c 56 61 6c 75 65 29 2c 20 64 61 74 61 2e 6e 75  lValue), data.nu
35440 6c 6c 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 20  llValue,.       
35450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35460 22 25 73 22 2c 63 6d 64 6c 69 6e 65 5f 6f 70 74  "%s",cmdline_opt
35470 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
35480 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 7d  rgv,++i));.    }
35490 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
354a0 7a 2c 22 2d 68 65 61 64 65 72 22 29 3d 3d 30 20  z,"-header")==0 
354b0 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 73 68  ){.      data.sh
354c0 6f 77 48 65 61 64 65 72 20 3d 20 31 3b 0a 20 20  owHeader = 1;.  
354d0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
354e0 6d 70 28 7a 2c 22 2d 6e 6f 68 65 61 64 65 72 22  mp(z,"-noheader"
354f0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
35500 74 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  ta.showHeader = 
35510 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
35520 20 73 74 72 63 6d 70 28 7a 2c 22 2d 65 63 68 6f   strcmp(z,"-echo
35530 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 53  ")==0 ){.      S
35540 68 65 6c 6c 53 65 74 46 6c 61 67 28 26 64 61 74  hellSetFlag(&dat
35550 61 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29 3b 0a  a, SHFLG_Echo);.
35560 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
35570 72 63 6d 70 28 7a 2c 22 2d 65 71 70 22 29 3d 3d  rcmp(z,"-eqp")==
35580 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e  0 ){.      data.
35590 61 75 74 6f 45 51 50 20 3d 20 31 3b 0a 20 20 20  autoEQP = 1;.   
355a0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
355b0 70 28 7a 2c 22 2d 65 71 70 66 75 6c 6c 22 29 3d  p(z,"-eqpfull")=
355c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61  =0 ){.      data
355d0 2e 61 75 74 6f 45 51 50 20 3d 20 32 3b 0a 20 20  .autoEQP = 2;.  
355e0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
355f0 6d 70 28 7a 2c 22 2d 73 74 61 74 73 22 29 3d 3d  mp(z,"-stats")==
35600 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e  0 ){.      data.
35610 73 74 61 74 73 4f 6e 20 3d 20 31 3b 0a 20 20 20  statsOn = 1;.   
35620 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
35630 70 28 7a 2c 22 2d 73 63 61 6e 73 74 61 74 73 22  p(z,"-scanstats"
35640 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
35650 74 61 2e 73 63 61 6e 73 74 61 74 73 4f 6e 20 3d  ta.scanstatsOn =
35660 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
35670 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 62 61 63  ( strcmp(z,"-bac
35680 6b 73 6c 61 73 68 22 29 3d 3d 30 20 29 7b 0a 20  kslash")==0 ){. 
35690 20 20 20 20 20 2f 2a 20 55 6e 64 6f 63 75 6d 65       /* Undocume
356a0 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e  nted command-lin
356b0 65 20 6f 70 74 69 6f 6e 3a 20 2d 62 61 63 6b 73  e option: -backs
356c0 6c 61 73 68 0a 20 20 20 20 20 20 2a 2a 20 43 61  lash.      ** Ca
356d0 75 73 65 73 20 43 2d 73 74 79 6c 65 20 62 61 63  uses C-style bac
356e0 6b 73 6c 61 73 68 20 65 73 63 61 70 65 73 20 74  kslash escapes t
356f0 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 69  o be evaluated i
35700 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  n SQL statements
35710 0a 20 20 20 20 20 20 2a 2a 20 70 72 69 6f 72 20  .      ** prior 
35720 74 6f 20 73 65 6e 64 69 6e 67 20 74 68 65 20 53  to sending the S
35730 51 4c 20 69 6e 74 6f 20 53 51 4c 69 74 65 2e 20  QL into SQLite. 
35740 20 55 73 65 66 75 6c 20 66 6f 72 20 69 6e 6a 65   Useful for inje
35750 63 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63  cting.      ** c
35760 72 61 7a 79 20 62 79 74 65 73 20 69 6e 20 74 68  razy bytes in th
35770 65 20 6d 69 64 64 6c 65 20 6f 66 20 53 51 4c 20  e middle of SQL 
35780 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72 20 74  statements for t
35790 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
357a0 67 69 6e 67 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ging..      */. 
357b0 20 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c 61       ShellSetFla
357c0 67 28 26 64 61 74 61 2c 20 53 48 46 4c 47 5f 42  g(&data, SHFLG_B
357d0 61 63 6b 73 6c 61 73 68 29 3b 0a 20 20 20 20 7d  ackslash);.    }
357e0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
357f0 7a 2c 22 2d 62 61 69 6c 22 29 3d 3d 30 20 29 7b  z,"-bail")==0 ){
35800 0a 20 20 20 20 20 20 62 61 69 6c 5f 6f 6e 5f 65  .      bail_on_e
35810 72 72 6f 72 20 3d 20 31 3b 0a 20 20 20 20 7d 65  rror = 1;.    }e
35820 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
35830 2c 22 2d 76 65 72 73 69 6f 6e 22 29 3d 3d 30 20  ,"-version")==0 
35840 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28  ){.      printf(
35850 22 25 73 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74  "%s %s\n", sqlit
35860 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c  e3_libversion(),
35870 20 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69   sqlite3_sourcei
35880 64 28 29 29 3b 0a 20 20 20 20 20 20 72 65 74 75  d());.      retu
35890 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20  rn 0;.    }else 
358a0 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 69  if( strcmp(z,"-i
358b0 6e 74 65 72 61 63 74 69 76 65 22 29 3d 3d 30 20  nteractive")==0 
358c0 29 7b 0a 20 20 20 20 20 20 73 74 64 69 6e 5f 69  ){.      stdin_i
358d0 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 3d 20  s_interactive = 
358e0 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
358f0 20 73 74 72 63 6d 70 28 7a 2c 22 2d 62 61 74 63   strcmp(z,"-batc
35900 68 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  h")==0 ){.      
35910 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63  stdin_is_interac
35920 74 69 76 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  tive = 0;.    }e
35930 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
35940 2c 22 2d 68 65 61 70 22 29 3d 3d 30 20 29 7b 0a  ,"-heap")==0 ){.
35950 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 7d        i++;.    }
35960 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
35970 7a 2c 22 2d 70 61 67 65 63 61 63 68 65 22 29 3d  z,"-pagecache")=
35980 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 3d 32  =0 ){.      i+=2
35990 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
359a0 73 74 72 63 6d 70 28 7a 2c 22 2d 6c 6f 6f 6b 61  strcmp(z,"-looka
359b0 73 69 64 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  side")==0 ){.   
359c0 20 20 20 69 2b 3d 32 3b 0a 20 20 20 20 7d 65 6c     i+=2;.    }el
359d0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
359e0 22 2d 6d 6d 61 70 22 29 3d 3d 30 20 29 7b 0a 20  "-mmap")==0 ){. 
359f0 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 7d 65       i++;.    }e
35a00 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
35a10 2c 22 2d 76 66 73 22 29 3d 3d 30 20 29 7b 0a 20  ,"-vfs")==0 ){. 
35a20 20 20 20 20 20 69 2b 2b 3b 0a 23 69 66 64 65 66       i++;.#ifdef
35a30 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 56   SQLITE_ENABLE_V
35a40 46 53 54 52 41 43 45 0a 20 20 20 20 7d 65 6c 73  FSTRACE.    }els
35a50 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
35a60 2d 76 66 73 74 72 61 63 65 22 29 3d 3d 30 20 29  -vfstrace")==0 )
35a70 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 23 65 6e  {.      i++;.#en
35a80 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
35a90 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 50 4c  E_ENABLE_MULTIPL
35aa0 45 58 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  EX.    }else if(
35ab0 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d 75 6c 74   strcmp(z,"-mult
35ac0 69 70 6c 65 78 22 29 3d 3d 30 20 29 7b 0a 20 20  iplex")==0 ){.  
35ad0 20 20 20 20 69 2b 2b 3b 0a 23 65 6e 64 69 66 0a      i++;.#endif.
35ae0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
35af0 72 63 6d 70 28 7a 2c 22 2d 68 65 6c 70 22 29 3d  rcmp(z,"-help")=
35b00 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 73 61 67  =0 ){.      usag
35b10 65 28 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  e(1);.    }else 
35b20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63  if( strcmp(z,"-c
35b30 6d 64 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  md")==0 ){.     
35b40 20 2f 2a 20 52 75 6e 20 63 6f 6d 6d 61 6e 64 73   /* Run commands
35b50 20 74 68 61 74 20 66 6f 6c 6c 6f 77 20 2d 63 6d   that follow -cm
35b60 64 20 66 69 72 73 74 20 61 6e 64 20 73 65 70 61  d first and sepa
35b70 72 61 74 65 6c 79 20 66 72 6f 6d 20 63 6f 6d 6d  rately from comm
35b80 61 6e 64 73 0a 20 20 20 20 20 20 2a 2a 20 74 68  ands.      ** th
35b90 61 74 20 73 69 6d 70 6c 79 20 61 70 70 65 61 72  at simply appear
35ba0 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d   on the command-
35bb0 6c 69 6e 65 2e 20 20 54 68 69 73 20 73 65 65 6d  line.  This seem
35bc0 73 20 67 6f 6f 66 79 2e 20 20 49 74 20 77 6f 75  s goofy.  It wou
35bd0 6c 64 0a 20 20 20 20 20 20 2a 2a 20 62 65 20 62  ld.      ** be b
35be0 65 74 74 65 72 20 69 66 20 61 6c 6c 20 63 6f 6d  etter if all com
35bf0 6d 61 6e 64 73 20 72 61 6e 20 69 6e 20 74 68 65  mands ran in the
35c00 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79   order that they
35c10 20 61 70 70 65 61 72 2e 20 20 42 75 74 0a 20 20   appear.  But.  
35c20 20 20 20 20 2a 2a 20 77 65 20 72 65 74 61 69 6e      ** we retain
35c30 20 74 68 65 20 67 6f 6f 66 79 20 62 65 68 61 76   the goofy behav
35c40 69 6f 72 20 66 6f 72 20 68 69 73 74 6f 72 69 63  ior for historic
35c50 61 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  al compatibility
35c60 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 69  . */.      if( i
35c70 3d 3d 61 72 67 63 2d 31 20 29 20 62 72 65 61 6b  ==argc-1 ) break
35c80 3b 0a 20 20 20 20 20 20 7a 20 3d 20 63 6d 64 6c  ;.      z = cmdl
35c90 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65  ine_option_value
35ca0 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 3b  (argc,argv,++i);
35cb0 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d  .      if( z[0]=
35cc0 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='.' ){.        
35cd0 72 63 20 3d 20 64 6f 5f 6d 65 74 61 5f 63 6f 6d  rc = do_meta_com
35ce0 6d 61 6e 64 28 7a 2c 20 26 64 61 74 61 29 3b 0a  mand(z, &data);.
35cf0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 20 26          if( rc &
35d00 26 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20  & bail_on_error 
35d10 29 20 72 65 74 75 72 6e 20 72 63 3d 3d 32 20 3f  ) return rc==2 ?
35d20 20 30 20 3a 20 72 63 3b 0a 20 20 20 20 20 20 7d   0 : rc;.      }
35d30 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6f 70  else{.        op
35d40 65 6e 5f 64 62 28 26 64 61 74 61 2c 20 30 29 3b  en_db(&data, 0);
35d50 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 68  .        rc = sh
35d60 65 6c 6c 5f 65 78 65 63 28 64 61 74 61 2e 64 62  ell_exec(data.db
35d70 2c 20 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62  , z, shell_callb
35d80 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72  ack, &data, &zEr
35d90 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20 69  rMsg);.        i
35da0 66 28 20 7a 45 72 72 4d 73 67 21 3d 30 20 29 7b  f( zErrMsg!=0 ){
35db0 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
35dc0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45  printf(stderr,"E
35dd0 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72  rror: %s\n", zEr
35de0 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20 20  rMsg);.         
35df0 20 69 66 28 20 62 61 69 6c 5f 6f 6e 5f 65 72 72   if( bail_on_err
35e00 6f 72 20 29 20 72 65 74 75 72 6e 20 72 63 21 3d  or ) return rc!=
35e10 30 20 3f 20 72 63 20 3a 20 31 3b 0a 20 20 20 20  0 ? rc : 1;.    
35e20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63      }else if( rc
35e30 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
35e40 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
35e50 65 72 72 2c 22 45 72 72 6f 72 3a 20 75 6e 61 62  err,"Error: unab
35e60 6c 65 20 74 6f 20 70 72 6f 63 65 73 73 20 53 51  le to process SQ
35e70 4c 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 29 3b  L \"%s\"\n", z);
35e80 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 62  .          if( b
35e90 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 29 20 72  ail_on_error ) r
35ea0 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 20 20  eturn rc;.      
35eb0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
35ec0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66  }else{.      utf
35ed0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
35ee0 22 25 73 3a 20 45 72 72 6f 72 3a 20 75 6e 6b 6e  "%s: Error: unkn
35ef0 6f 77 6e 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e  own option: %s\n
35f00 22 2c 20 41 72 67 76 30 2c 20 7a 29 3b 0a 20 20  ", Argv0, z);.  
35f10 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
35f20 74 64 65 72 72 2c 22 55 73 65 20 2d 68 65 6c 70  tderr,"Use -help
35f30 20 66 6f 72 20 61 20 6c 69 73 74 20 6f 66 20 6f   for a list of o
35f40 70 74 69 6f 6e 73 2e 5c 6e 22 29 3b 0a 20 20 20  ptions.\n");.   
35f50 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
35f60 20 7d 0a 20 20 20 20 64 61 74 61 2e 63 4d 6f 64   }.    data.cMod
35f70 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 3b 0a 20  e = data.mode;. 
35f80 20 7d 0a 0a 20 20 69 66 28 20 21 72 65 61 64 53   }..  if( !readS
35f90 74 64 69 6e 20 29 7b 0a 20 20 20 20 2f 2a 20 52  tdin ){.    /* R
35fa0 75 6e 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73  un all arguments
35fb0 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 62 65 67   that do not beg
35fc0 69 6e 20 77 69 74 68 20 27 2d 27 20 61 73 20 69  in with '-' as i
35fd0 66 20 74 68 65 79 20 77 65 72 65 20 73 65 70 61  f they were sepa
35fe0 72 61 74 65 0a 20 20 20 20 2a 2a 20 63 6f 6d 6d  rate.    ** comm
35ff0 61 6e 64 2d 6c 69 6e 65 20 69 6e 70 75 74 73 2c  and-line inputs,
36000 20 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20   except for the 
36010 61 72 67 54 6f 53 6b 69 70 20 61 72 67 75 6d 65  argToSkip argume
36020 6e 74 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e  nt which contain
36030 73 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74  s.    ** the dat
36040 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65 2e 0a  abase filename..
36050 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69      */.    for(i
36060 3d 30 3b 20 69 3c 6e 43 6d 64 3b 20 69 2b 2b 29  =0; i<nCmd; i++)
36070 7b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 43 6d  {.      if( azCm
36080 64 5b 69 5d 5b 30 5d 3d 3d 27 2e 27 20 29 7b 0a  d[i][0]=='.' ){.
36090 20 20 20 20 20 20 20 20 72 63 20 3d 20 64 6f 5f          rc = do_
360a0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28 61 7a 43  meta_command(azC
360b0 6d 64 5b 69 5d 2c 20 26 64 61 74 61 29 3b 0a 20  md[i], &data);. 
360c0 20 20 20 20 20 20 20 69 66 28 20 72 63 20 29 20         if( rc ) 
360d0 72 65 74 75 72 6e 20 72 63 3d 3d 32 20 3f 20 30  return rc==2 ? 0
360e0 20 3a 20 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c   : rc;.      }el
360f0 73 65 7b 0a 20 20 20 20 20 20 20 20 6f 70 65 6e  se{.        open
36100 5f 64 62 28 26 64 61 74 61 2c 20 30 29 3b 0a 20  _db(&data, 0);. 
36110 20 20 20 20 20 20 20 72 63 20 3d 20 73 68 65 6c         rc = shel
36120 6c 5f 65 78 65 63 28 64 61 74 61 2e 64 62 2c 20  l_exec(data.db, 
36130 61 7a 43 6d 64 5b 69 5d 2c 20 73 68 65 6c 6c 5f  azCmd[i], shell_
36140 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
36150 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20   &zErrMsg);.    
36160 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 21      if( zErrMsg!
36170 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
36180 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
36190 72 72 2c 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22  rr,"Error: %s\n"
361a0 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  , zErrMsg);.    
361b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 21        return rc!
361c0 3d 30 20 3f 20 72 63 20 3a 20 31 3b 0a 20 20 20  =0 ? rc : 1;.   
361d0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72       }else if( r
361e0 63 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  c!=0 ){.        
361f0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
36200 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 75 6e 61  derr,"Error: una
36210 62 6c 65 20 74 6f 20 70 72 6f 63 65 73 73 20 53  ble to process S
36220 51 4c 3a 20 25 73 5c 6e 22 2c 20 61 7a 43 6d 64  QL: %s\n", azCmd
36230 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [i]);.          
36240 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 20  return rc;.     
36250 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
36260 20 7d 0a 20 20 20 20 66 72 65 65 28 61 7a 43 6d   }.    free(azCm
36270 64 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  d);.  }else{.   
36280 20 2f 2a 20 52 75 6e 20 63 6f 6d 6d 61 6e 64 73   /* Run commands
36290 20 72 65 63 65 69 76 65 64 20 66 72 6f 6d 20 73   received from s
362a0 74 61 6e 64 61 72 64 20 69 6e 70 75 74 0a 20 20  tandard input.  
362b0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 64    */.    if( std
362c0 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76  in_is_interactiv
362d0 65 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20  e ){.      char 
362e0 2a 7a 48 6f 6d 65 3b 0a 20 20 20 20 20 20 63 68  *zHome;.      ch
362f0 61 72 20 2a 7a 48 69 73 74 6f 72 79 20 3d 20 30  ar *zHistory = 0
36300 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69 73  ;.      int nHis
36310 74 6f 72 79 3b 0a 20 20 20 20 20 20 70 72 69 6e  tory;.      prin
36320 74 66 28 0a 20 20 20 20 20 20 20 20 22 53 51 4c  tf(.        "SQL
36330 69 74 65 20 76 65 72 73 69 6f 6e 20 25 73 20 25  ite version %s %
36340 2e 31 39 73 5c 6e 22 20 2f 2a 65 78 74 72 61 2d  .19s\n" /*extra-
36350 76 65 72 73 69 6f 6e 2d 69 6e 66 6f 2a 2f 0a 20  version-info*/. 
36360 20 20 20 20 20 20 20 22 45 6e 74 65 72 20 5c 22         "Enter \"
36370 2e 68 65 6c 70 5c 22 20 66 6f 72 20 75 73 61 67  .help\" for usag
36380 65 20 68 69 6e 74 73 2e 5c 6e 22 2c 0a 20 20 20  e hints.\n",.   
36390 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 62       sqlite3_lib
363a0 76 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74  version(), sqlit
363b0 65 33 5f 73 6f 75 72 63 65 69 64 28 29 0a 20 20  e3_sourceid().  
363c0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 69 66 28      );.      if(
363d0 20 77 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20   warnInmemoryDb 
363e0 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74  ){.        print
363f0 66 28 22 43 6f 6e 6e 65 63 74 65 64 20 74 6f 20  f("Connected to 
36400 61 20 22 29 3b 0a 20 20 20 20 20 20 20 20 70 72  a ");.        pr
36410 69 6e 74 42 6f 6c 64 28 22 74 72 61 6e 73 69 65  intBold("transie
36420 6e 74 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  nt in-memory dat
36430 61 62 61 73 65 22 29 3b 0a 20 20 20 20 20 20 20  abase");.       
36440 20 70 72 69 6e 74 66 28 22 2e 5c 6e 55 73 65 20   printf(".\nUse 
36450 5c 22 2e 6f 70 65 6e 20 46 49 4c 45 4e 41 4d 45  \".open FILENAME
36460 5c 22 20 74 6f 20 72 65 6f 70 65 6e 20 6f 6e 20  \" to reopen on 
36470 61 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  a ".            
36480 20 20 20 22 70 65 72 73 69 73 74 65 6e 74 20 64     "persistent d
36490 61 74 61 62 61 73 65 2e 5c 6e 22 29 3b 0a 20 20  atabase.\n");.  
364a0 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 48 6f 6d      }.      zHom
364b0 65 20 3d 20 66 69 6e 64 5f 68 6f 6d 65 5f 64 69  e = find_home_di
364c0 72 28 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  r(0);.      if( 
364d0 7a 48 6f 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  zHome ){.       
364e0 20 6e 48 69 73 74 6f 72 79 20 3d 20 73 74 72 6c   nHistory = strl
364f0 65 6e 33 30 28 7a 48 6f 6d 65 29 20 2b 20 32 30  en30(zHome) + 20
36500 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 7a  ;.        if( (z
36510 48 69 73 74 6f 72 79 20 3d 20 6d 61 6c 6c 6f 63  History = malloc
36520 28 6e 48 69 73 74 6f 72 79 29 29 21 3d 30 20 29  (nHistory))!=0 )
36530 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
36540 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 48 69  te3_snprintf(nHi
36550 73 74 6f 72 79 2c 20 7a 48 69 73 74 6f 72 79 2c  story, zHistory,
36560 22 25 73 2f 2e 73 71 6c 69 74 65 5f 68 69 73 74  "%s/.sqlite_hist
36570 6f 72 79 22 2c 20 7a 48 6f 6d 65 29 3b 0a 20 20  ory", zHome);.  
36580 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
36590 20 20 20 20 20 20 69 66 28 20 7a 48 69 73 74 6f        if( zHisto
365a0 72 79 20 29 7b 20 73 68 65 6c 6c 5f 72 65 61 64  ry ){ shell_read
365b0 5f 68 69 73 74 6f 72 79 28 7a 48 69 73 74 6f 72  _history(zHistor
365c0 79 29 3b 20 7d 0a 23 69 66 20 48 41 56 45 5f 52  y); }.#if HAVE_R
365d0 45 41 44 4c 49 4e 45 20 7c 7c 20 48 41 56 45 5f  EADLINE || HAVE_
365e0 45 44 49 54 4c 49 4e 45 0a 20 20 20 20 20 20 72  EDITLINE.      r
365f0 6c 5f 61 74 74 65 6d 70 74 65 64 5f 63 6f 6d 70  l_attempted_comp
36600 6c 65 74 69 6f 6e 5f 66 75 6e 63 74 69 6f 6e 20  letion_function 
36610 3d 20 72 65 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c  = readline_compl
36620 65 74 69 6f 6e 3b 0a 23 65 6c 69 66 20 48 41 56  etion;.#elif HAV
36630 45 5f 4c 49 4e 45 4e 4f 49 53 45 0a 20 20 20 20  E_LINENOISE.    
36640 20 20 6c 69 6e 65 6e 6f 69 73 65 53 65 74 43 6f    linenoiseSetCo
36650 6d 70 6c 65 74 69 6f 6e 43 61 6c 6c 62 61 63 6b  mpletionCallback
36660 28 6c 69 6e 65 6e 6f 69 73 65 5f 63 6f 6d 70 6c  (linenoise_compl
36670 65 74 69 6f 6e 29 3b 0a 23 65 6e 64 69 66 0a 20  etion);.#endif. 
36680 20 20 20 20 20 72 63 20 3d 20 70 72 6f 63 65 73       rc = proces
36690 73 5f 69 6e 70 75 74 28 26 64 61 74 61 2c 20 30  s_input(&data, 0
366a0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 48 69  );.      if( zHi
366b0 73 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20  story ){.       
366c0 20 73 68 65 6c 6c 5f 73 74 69 66 6c 65 5f 68 69   shell_stifle_hi
366d0 73 74 6f 72 79 28 32 30 30 30 29 3b 0a 20 20 20  story(2000);.   
366e0 20 20 20 20 20 73 68 65 6c 6c 5f 77 72 69 74 65       shell_write
366f0 5f 68 69 73 74 6f 72 79 28 7a 48 69 73 74 6f 72  _history(zHistor
36700 79 29 3b 0a 20 20 20 20 20 20 20 20 66 72 65 65  y);.        free
36710 28 7a 48 69 73 74 6f 72 79 29 3b 0a 20 20 20 20  (zHistory);.    
36720 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
36730 20 20 20 20 20 72 63 20 3d 20 70 72 6f 63 65 73       rc = proces
36740 73 5f 69 6e 70 75 74 28 26 64 61 74 61 2c 20 73  s_input(&data, s
36750 74 64 69 6e 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  tdin);.    }.  }
36760 0a 20 20 73 65 74 5f 74 61 62 6c 65 5f 6e 61 6d  .  set_table_nam
36770 65 28 26 64 61 74 61 2c 20 30 29 3b 0a 20 20 69  e(&data, 0);.  i
36780 66 28 20 64 61 74 61 2e 64 62 20 29 7b 0a 20 20  f( data.db ){.  
36790 20 20 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f    session_close_
367a0 61 6c 6c 28 26 64 61 74 61 29 3b 0a 20 20 20 20  all(&data);.    
367b0 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 61  sqlite3_close(da
367c0 74 61 2e 64 62 29 3b 0a 20 20 7d 0a 20 20 73 71  ta.db);.  }.  sq
367d0 6c 69 74 65 33 5f 66 72 65 65 28 64 61 74 61 2e  lite3_free(data.
367e0 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 29 3b 0a 20  zFreeOnClose);. 
367f0 20 66 69 6e 64 5f 68 6f 6d 65 5f 64 69 72 28 31   find_home_dir(1
36800 29 3b 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  );.#if !SQLITE_S
36810 48 45 4c 4c 5f 49 53 5f 55 54 46 38 0a 20 20 66  HELL_IS_UTF8.  f
36820 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20  or(i=0; i<argc; 
36830 69 2b 2b 29 20 73 71 6c 69 74 65 33 5f 66 72 65  i++) sqlite3_fre
36840 65 28 61 72 67 76 5b 69 5d 29 3b 0a 20 20 73 71  e(argv[i]);.  sq
36850 6c 69 74 65 33 5f 66 72 65 65 28 61 72 67 76 29  lite3_free(argv)
36860 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
36870 6e 20 72 63 3b 0a 7d 0a                          n rc;.}.