/ Hex Artifact Content
Login

Artifact 423944f4ad73a7e73d9c06e645e19ac1aa5f45c22069936e3a008b28a5df8003:


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 23 69 66 64  or);.  }.}..#ifd
87f0: 65 66 20 53 49 47 49 4e 54 0a 2f 2a 0a 2a 2a 20  ef SIGINT./*.** 
8800: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 75 6e  This routine run
8810: 73 20 77 68 65 6e 20 74 68 65 20 75 73 65 72 20  s when the user 
8820: 70 72 65 73 73 65 73 20 43 74 72 6c 2d 43 0a 2a  presses Ctrl-C.*
8830: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 69 6e  /.static void in
8840: 74 65 72 72 75 70 74 5f 68 61 6e 64 6c 65 72 28  terrupt_handler(
8850: 69 6e 74 20 4e 6f 74 55 73 65 64 29 7b 0a 20 20  int NotUsed){.  
8860: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8870: 28 4e 6f 74 55 73 65 64 29 3b 0a 20 20 73 65 65  (NotUsed);.  see
8880: 6e 49 6e 74 65 72 72 75 70 74 2b 2b 3b 0a 20 20  nInterrupt++;.  
8890: 69 66 28 20 73 65 65 6e 49 6e 74 65 72 72 75 70  if( seenInterrup
88a0: 74 3e 32 20 29 20 65 78 69 74 28 31 29 3b 0a 20  t>2 ) exit(1);. 
88b0: 20 69 66 28 20 67 6c 6f 62 61 6c 44 62 20 29 20   if( globalDb ) 
88c0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
88d0: 74 28 67 6c 6f 62 61 6c 44 62 29 3b 0a 7d 0a 23  t(globalDb);.}.#
88e0: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
88f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
8900: 52 49 5a 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 57  RIZATION./*.** W
8910: 68 65 6e 20 74 68 65 20 22 2e 61 75 74 68 20 4f  hen the ".auth O
8920: 4e 22 20 69 73 20 73 65 74 2c 20 74 68 65 20 66  N" is set, the f
8930: 6f 6c 6c 6f 77 69 6e 67 20 61 75 74 68 6f 72 69  ollowing authori
8940: 7a 65 72 20 63 61 6c 6c 62 61 63 6b 20 69 73 0a  zer callback is.
8950: 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20 49 74 20  ** invoked.  It 
8960: 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 53  always returns S
8970: 51 4c 49 54 45 5f 4f 4b 2e 0a 2a 2f 0a 73 74 61  QLITE_OK..*/.sta
8980: 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 41 75 74  tic int shellAut
8990: 68 28 0a 20 20 76 6f 69 64 20 2a 70 43 6c 69 65  h(.  void *pClie
89a0: 6e 74 44 61 74 61 2c 0a 20 20 69 6e 74 20 6f 70  ntData,.  int op
89b0: 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
89c0: 7a 41 31 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61  zA1,.  const cha
89d0: 72 20 2a 7a 41 32 2c 0a 20 20 63 6f 6e 73 74 20  r *zA2,.  const 
89e0: 63 68 61 72 20 2a 7a 41 33 2c 0a 20 20 63 6f 6e  char *zA3,.  con
89f0: 73 74 20 63 68 61 72 20 2a 7a 41 34 0a 29 7b 0a  st char *zA4.){.
8a00: 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 20    ShellState *p 
8a10: 3d 20 28 53 68 65 6c 6c 53 74 61 74 65 2a 29 70  = (ShellState*)p
8a20: 43 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 73 74  ClientData;.  st
8a30: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
8a40: 2a 61 7a 41 63 74 69 6f 6e 5b 5d 20 3d 20 7b 20  *azAction[] = { 
8a50: 30 2c 0a 20 20 20 20 20 22 43 52 45 41 54 45 5f  0,.     "CREATE_
8a60: 49 4e 44 45 58 22 2c 20 20 20 20 20 20 20 20 20  INDEX",         
8a70: 22 43 52 45 41 54 45 5f 54 41 42 4c 45 22 2c 20  "CREATE_TABLE", 
8a80: 20 20 20 20 20 20 20 20 22 43 52 45 41 54 45 5f          "CREATE_
8a90: 54 45 4d 50 5f 49 4e 44 45 58 22 2c 0a 20 20 20  TEMP_INDEX",.   
8aa0: 20 20 22 43 52 45 41 54 45 5f 54 45 4d 50 5f 54    "CREATE_TEMP_T
8ab0: 41 42 4c 45 22 2c 20 20 20 20 22 43 52 45 41 54  ABLE",    "CREAT
8ac0: 45 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22 2c  E_TEMP_TRIGGER",
8ad0: 20 20 22 43 52 45 41 54 45 5f 54 45 4d 50 5f 56    "CREATE_TEMP_V
8ae0: 49 45 57 22 2c 0a 20 20 20 20 20 22 43 52 45 41  IEW",.     "CREA
8af0: 54 45 5f 54 52 49 47 47 45 52 22 2c 20 20 20 20  TE_TRIGGER",    
8b00: 20 20 20 22 43 52 45 41 54 45 5f 56 49 45 57 22     "CREATE_VIEW"
8b10: 2c 20 20 20 20 20 20 20 20 20 20 22 44 45 4c 45  ,          "DELE
8b20: 54 45 22 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f  TE",.     "DROP_
8b30: 49 4e 44 45 58 22 2c 20 20 20 20 20 20 20 20 20  INDEX",         
8b40: 20 20 22 44 52 4f 50 5f 54 41 42 4c 45 22 2c 20    "DROP_TABLE", 
8b50: 20 20 20 20 20 20 20 20 20 20 22 44 52 4f 50 5f            "DROP_
8b60: 54 45 4d 50 5f 49 4e 44 45 58 22 2c 0a 20 20 20  TEMP_INDEX",.   
8b70: 20 20 22 44 52 4f 50 5f 54 45 4d 50 5f 54 41 42    "DROP_TEMP_TAB
8b80: 4c 45 22 2c 20 20 20 20 20 20 22 44 52 4f 50 5f  LE",      "DROP_
8b90: 54 45 4d 50 5f 54 52 49 47 47 45 52 22 2c 20 20  TEMP_TRIGGER",  
8ba0: 20 20 22 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45    "DROP_TEMP_VIE
8bb0: 57 22 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f 54  W",.     "DROP_T
8bc0: 52 49 47 47 45 52 22 2c 20 20 20 20 20 20 20 20  RIGGER",        
8bd0: 20 22 44 52 4f 50 5f 56 49 45 57 22 2c 20 20 20   "DROP_VIEW",   
8be0: 20 20 20 20 20 20 20 20 20 22 49 4e 53 45 52 54           "INSERT
8bf0: 22 2c 0a 20 20 20 20 20 22 50 52 41 47 4d 41 22  ",.     "PRAGMA"
8c00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
8c10: 22 52 45 41 44 22 2c 20 20 20 20 20 20 20 20 20  "READ",         
8c20: 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 22          "SELECT"
8c30: 2c 0a 20 20 20 20 20 22 54 52 41 4e 53 41 43 54  ,.     "TRANSACT
8c40: 49 4f 4e 22 2c 20 20 20 20 20 20 20 20 20 20 22  ION",          "
8c50: 55 50 44 41 54 45 22 2c 20 20 20 20 20 20 20 20  UPDATE",        
8c60: 20 20 20 20 20 20 20 22 41 54 54 41 43 48 22 2c         "ATTACH",
8c70: 0a 20 20 20 20 20 22 44 45 54 41 43 48 22 2c 20  .     "DETACH", 
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
8c90: 4c 54 45 52 5f 54 41 42 4c 45 22 2c 20 20 20 20  LTER_TABLE",    
8ca0: 20 20 20 20 20 20 22 52 45 49 4e 44 45 58 22 2c        "REINDEX",
8cb0: 0a 20 20 20 20 20 22 41 4e 41 4c 59 5a 45 22 2c  .     "ANALYZE",
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
8cd0: 52 45 41 54 45 5f 56 54 41 42 4c 45 22 2c 20 20  REATE_VTABLE",  
8ce0: 20 20 20 20 20 20 22 44 52 4f 50 5f 56 54 41 42        "DROP_VTAB
8cf0: 4c 45 22 2c 0a 20 20 20 20 20 22 46 55 4e 43 54  LE",.     "FUNCT
8d00: 49 4f 4e 22 2c 20 20 20 20 20 20 20 20 20 20 20  ION",           
8d10: 20 20 22 53 41 56 45 50 4f 49 4e 54 22 2c 20 20    "SAVEPOINT",  
8d20: 20 20 20 20 20 20 20 20 20 20 22 52 45 43 55 52            "RECUR
8d30: 53 49 56 45 22 0a 20 20 7d 3b 0a 20 20 69 6e 74  SIVE".  };.  int
8d40: 20 69 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   i;.  const char
8d50: 20 2a 61 7a 5b 34 5d 3b 0a 20 20 61 7a 5b 30 5d   *az[4];.  az[0]
8d60: 20 3d 20 7a 41 31 3b 0a 20 20 61 7a 5b 31 5d 20   = zA1;.  az[1] 
8d70: 3d 20 7a 41 32 3b 0a 20 20 61 7a 5b 32 5d 20 3d  = zA2;.  az[2] =
8d80: 20 7a 41 33 3b 0a 20 20 61 7a 5b 33 5d 20 3d 20   zA3;.  az[3] = 
8d90: 7a 41 34 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e  zA4;.  utf8_prin
8da0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 61 75 74 68  tf(p->out, "auth
8db0: 6f 72 69 7a 65 72 3a 20 25 73 22 2c 20 61 7a 41  orizer: %s", azA
8dc0: 63 74 69 6f 6e 5b 6f 70 5d 29 3b 0a 20 20 66 6f  ction[op]);.  fo
8dd0: 72 28 69 3d 30 3b 20 69 3c 34 3b 20 69 2b 2b 29  r(i=0; i<4; i++)
8de0: 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
8df0: 28 70 2d 3e 6f 75 74 2c 20 22 20 22 29 3b 0a 20  (p->out, " ");. 
8e00: 20 20 20 69 66 28 20 61 7a 5b 69 5d 20 29 7b 0a     if( az[i] ){.
8e10: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73        output_c_s
8e20: 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a  tring(p->out, az
8e30: 5b 69 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  [i]);.    }else{
8e40: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
8e50: 66 28 70 2d 3e 6f 75 74 2c 20 22 4e 55 4c 4c 22  f(p->out, "NULL"
8e60: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
8e70: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
8e80: 2c 20 22 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72  , "\n");.  retur
8e90: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
8ea0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 69  endif../*.** Pri
8eb0: 6e 74 20 61 20 73 63 68 65 6d 61 20 73 74 61 74  nt a schema stat
8ec0: 65 6d 65 6e 74 2e 20 20 50 61 72 74 20 6f 66 20  ement.  Part of 
8ed0: 4d 4f 44 45 5f 53 65 6d 69 20 61 6e 64 20 4d 4f  MODE_Semi and MO
8ee0: 44 45 5f 50 72 65 74 74 79 20 6f 75 74 70 75 74  DE_Pretty output
8ef0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
8f00: 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 73 6f  tine converts so
8f10: 6d 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  me CREATE TABLE 
8f20: 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72 20 73  statements for s
8f30: 68 61 64 6f 77 20 74 61 62 6c 65 73 0a 2a 2a 20  hadow tables.** 
8f40: 69 6e 20 46 54 53 33 2f 34 2f 35 20 69 6e 74 6f  in FTS3/4/5 into
8f50: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46   CREATE TABLE IF
8f60: 20 4e 4f 54 20 45 58 49 53 54 53 20 73 74 61 74   NOT EXISTS stat
8f70: 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 73 74 61 74 69  ements..*/.stati
8f80: 63 20 76 6f 69 64 20 70 72 69 6e 74 53 63 68 65  c void printSche
8f90: 6d 61 4c 69 6e 65 28 46 49 4c 45 20 2a 6f 75 74  maLine(FILE *out
8fa0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
8fb0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
8fc0: 69 6c 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  il){.  if( sqlit
8fd0: 65 33 5f 73 74 72 67 6c 6f 62 28 22 43 52 45 41  e3_strglob("CREA
8fe0: 54 45 20 54 41 42 4c 45 20 5b 27 5c 22 5d 2a 22  TE TABLE ['\"]*"
8ff0: 2c 20 7a 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75  , z)==0 ){.    u
9000: 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  tf8_printf(out, 
9010: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46  "CREATE TABLE IF
9020: 20 4e 4f 54 20 45 58 49 53 54 53 20 25 73 25 73   NOT EXISTS %s%s
9030: 22 2c 20 7a 2b 31 33 2c 20 7a 54 61 69 6c 29 3b  ", z+13, zTail);
9040: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 75 74  .  }else{.    ut
9050: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  f8_printf(out, "
9060: 25 73 25 73 22 2c 20 7a 2c 20 7a 54 61 69 6c 29  %s%s", z, zTail)
9070: 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76  ;.  }.}.static v
9080: 6f 69 64 20 70 72 69 6e 74 53 63 68 65 6d 61 4c  oid printSchemaL
9090: 69 6e 65 4e 28 46 49 4c 45 20 2a 6f 75 74 2c 20  ineN(FILE *out, 
90a0: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 2c 20  char *z, int n, 
90b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
90c0: 6c 29 7b 0a 20 20 63 68 61 72 20 63 20 3d 20 7a  l){.  char c = z
90d0: 5b 6e 5d 3b 0a 20 20 7a 5b 6e 5d 20 3d 20 30 3b  [n];.  z[n] = 0;
90e0: 0a 20 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69  .  printSchemaLi
90f0: 6e 65 28 6f 75 74 2c 20 7a 2c 20 7a 54 61 69 6c  ne(out, z, zTail
9100: 29 3b 0a 20 20 7a 5b 6e 5d 20 3d 20 63 3b 0a 7d  );.  z[n] = c;.}
9110: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
9120: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75  the callback rou
9130: 74 69 6e 65 20 74 68 61 74 20 74 68 65 20 73 68  tine that the sh
9140: 65 6c 6c 0a 2a 2a 20 69 6e 76 6f 6b 65 73 20 66  ell.** invokes f
9150: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 61  or each row of a
9160: 20 71 75 65 72 79 20 72 65 73 75 6c 74 2e 0a 2a   query result..*
9170: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 68 65  /.static int she
9180: 6c 6c 5f 63 61 6c 6c 62 61 63 6b 28 0a 20 20 76  ll_callback(.  v
9190: 6f 69 64 20 2a 70 41 72 67 2c 0a 20 20 69 6e 74  oid *pArg,.  int
91a0: 20 6e 41 72 67 2c 20 20 20 20 20 20 20 20 2f 2a   nArg,        /*
91b0: 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   Number of resul
91c0: 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 63  t columns */.  c
91d0: 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20 20  har **azArg,    
91e0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
91f0: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 2a 2f  result column */
9200: 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 2c  .  char **azCol,
9210: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
9220: 6d 65 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69  mes */.  int *ai
9230: 54 79 70 65 20 20 20 20 20 20 2f 2a 20 43 6f 6c  Type      /* Col
9240: 75 6d 6e 20 74 79 70 65 73 20 2a 2f 0a 29 7b 0a  umn types */.){.
9250: 20 20 69 6e 74 20 69 3b 0a 20 20 53 68 65 6c 6c    int i;.  Shell
9260: 53 74 61 74 65 20 2a 70 20 3d 20 28 53 68 65 6c  State *p = (Shel
9270: 6c 53 74 61 74 65 2a 29 70 41 72 67 3b 0a 0a 20  lState*)pArg;.. 
9280: 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20   if( azArg==0 ) 
9290: 72 65 74 75 72 6e 20 30 3b 0a 20 20 73 77 69 74  return 0;.  swit
92a0: 63 68 28 20 70 2d 3e 63 4d 6f 64 65 20 29 7b 0a  ch( p->cMode ){.
92b0: 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 4c 69      case MODE_Li
92c0: 6e 65 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74 20  ne: {.      int 
92d0: 77 20 3d 20 35 3b 0a 20 20 20 20 20 20 69 66 28  w = 5;.      if(
92e0: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
92f0: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
9300: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
9310: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20          int len 
9320: 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 43 6f 6c  = strlen30(azCol
9330: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
9340: 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66   "");.        if
9350: 28 20 6c 65 6e 3e 77 20 29 20 77 20 3d 20 6c 65  ( len>w ) w = le
9360: 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
9370: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3e 30 20   if( p->cnt++>0 
9380: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
9390: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
93a0: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
93b0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
93c0: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
93d0: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
93e0: 2d 3e 6f 75 74 2c 22 25 2a 73 20 3d 20 25 73 25  ->out,"%*s = %s%
93f0: 73 22 2c 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d 2c  s", w, azCol[i],
9400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9410: 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72   azArg[i] ? azAr
9420: 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61  g[i] : p->nullVa
9430: 6c 75 65 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72  lue, p->rowSepar
9440: 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ator);.      }. 
9450: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9460: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
9470: 45 78 70 6c 61 69 6e 3a 0a 20 20 20 20 63 61 73  Explain:.    cas
9480: 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3a 20 7b  e MODE_Column: {
9490: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
94a0: 6e 73 74 20 69 6e 74 20 61 45 78 70 6c 61 69 6e  nst int aExplain
94b0: 57 69 64 74 68 73 5b 5d 20 3d 20 7b 34 2c 20 31  Widths[] = {4, 1
94c0: 33 2c 20 34 2c 20 34 2c 20 34 2c 20 31 33 2c 20  3, 4, 4, 4, 13, 
94d0: 32 2c 20 31 33 7d 3b 0a 20 20 20 20 20 20 63 6f  2, 13};.      co
94e0: 6e 73 74 20 69 6e 74 20 2a 63 6f 6c 57 69 64 74  nst int *colWidt
94f0: 68 3b 0a 20 20 20 20 20 20 69 6e 74 20 73 68 6f  h;.      int sho
9500: 77 48 64 72 3b 0a 20 20 20 20 20 20 63 68 61 72  wHdr;.      char
9510: 20 2a 72 6f 77 53 65 70 3b 0a 20 20 20 20 20 20   *rowSep;.      
9520: 69 66 28 20 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f  if( p->cMode==MO
9530: 44 45 5f 43 6f 6c 75 6d 6e 20 29 7b 0a 20 20 20  DE_Column ){.   
9540: 20 20 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20       colWidth = 
9550: 70 2d 3e 63 6f 6c 57 69 64 74 68 3b 0a 20 20 20  p->colWidth;.   
9560: 20 20 20 20 20 73 68 6f 77 48 64 72 20 3d 20 70       showHdr = p
9570: 2d 3e 73 68 6f 77 48 65 61 64 65 72 3b 0a 20 20  ->showHeader;.  
9580: 20 20 20 20 20 20 72 6f 77 53 65 70 20 3d 20 70        rowSep = p
9590: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 3b 0a  ->rowSeparator;.
95a0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
95b0: 20 20 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20       colWidth = 
95c0: 61 45 78 70 6c 61 69 6e 57 69 64 74 68 73 3b 0a  aExplainWidths;.
95d0: 20 20 20 20 20 20 20 20 73 68 6f 77 48 64 72 20          showHdr 
95e0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 6f 77  = 1;.        row
95f0: 53 65 70 20 3d 20 53 45 50 5f 52 6f 77 3b 0a 20  Sep = SEP_Row;. 
9600: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
9610: 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 29 7b 0a   p->cnt++==0 ){.
9620: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
9630: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
9640: 20 20 20 20 20 20 20 20 20 69 6e 74 20 77 2c 20           int w, 
9650: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  n;.          if(
9660: 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e   i<ArraySize(p->
9670: 63 6f 6c 57 69 64 74 68 29 20 29 7b 0a 20 20 20  colWidth) ){.   
9680: 20 20 20 20 20 20 20 20 20 77 20 3d 20 63 6f 6c           w = col
9690: 57 69 64 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20  Width[i];.      
96a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
96b0: 20 20 20 20 20 20 20 77 20 3d 20 30 3b 0a 20 20         w = 0;.  
96c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
96d0: 20 20 20 20 69 66 28 20 77 3d 3d 30 20 29 7b 0a      if( w==0 ){.
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20              w = 
96f0: 73 74 72 6c 65 6e 43 68 61 72 28 61 7a 43 6f 6c  strlenChar(azCol
9700: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
9710: 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20   "");.          
9720: 20 20 69 66 28 20 77 3c 31 30 20 29 20 77 20 3d    if( w<10 ) w =
9730: 20 31 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20   10;.           
9740: 20 6e 20 3d 20 73 74 72 6c 65 6e 43 68 61 72 28   n = strlenChar(
9750: 61 7a 41 72 67 20 26 26 20 61 7a 41 72 67 5b 69  azArg && azArg[i
9760: 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70  ] ? azArg[i] : p
9770: 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20  ->nullValue);.  
9780: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 77 3c            if( w<
9790: 6e 20 29 20 77 20 3d 20 6e 3b 0a 20 20 20 20 20  n ) w = n;.     
97a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
97b0: 20 69 66 28 20 69 3c 41 72 72 61 79 53 69 7a 65   if( i<ArraySize
97c0: 28 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 29  (p->actualWidth)
97d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
97e0: 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69  p->actualWidth[i
97f0: 5d 20 3d 20 77 3b 0a 20 20 20 20 20 20 20 20 20  ] = w;.         
9800: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
9810: 20 73 68 6f 77 48 64 72 20 29 7b 0a 20 20 20 20   showHdr ){.    
9820: 20 20 20 20 20 20 20 20 75 74 66 38 5f 77 69 64          utf8_wid
9830: 74 68 5f 70 72 69 6e 74 28 70 2d 3e 6f 75 74 2c  th_print(p->out,
9840: 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20   w, azCol[i]);. 
9850: 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
9860: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
9870: 25 73 22 2c 20 69 3d 3d 6e 41 72 67 2d 31 20 3f  %s", i==nArg-1 ?
9880: 20 72 6f 77 53 65 70 20 3a 20 22 20 20 22 29 3b   rowSep : "  ");
9890: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
98a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
98b0: 66 28 20 73 68 6f 77 48 64 72 20 29 7b 0a 20 20  f( showHdr ){.  
98c0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
98d0: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
98e0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 77             int w
98f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
9900: 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  ( i<ArraySize(p-
9910: 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b  >actualWidth) ){
9920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9930: 77 20 3d 20 70 2d 3e 61 63 74 75 61 6c 57 69 64  w = p->actualWid
9940: 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20  th[i];.         
9950: 20 20 20 20 20 20 69 66 28 20 77 3c 30 20 29 20        if( w<0 ) 
9960: 77 20 3d 20 2d 77 3b 0a 20 20 20 20 20 20 20 20  w = -w;.        
9970: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
9980: 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 31 30            w = 10
9990: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
99b0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
99c0: 25 2d 2a 2e 2a 73 25 73 22 2c 77 2c 77 2c 0a 20  %-*.*s%s",w,w,. 
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 20 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    "-------------
99f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20  -------------". 
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a30: 20 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    "-------------
9a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 2c 0a  -------------",.
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a80: 20 20 20 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20      i==nArg-1 ? 
9a90: 72 6f 77 53 65 70 20 3a 20 22 20 20 22 29 3b 0a  rowSep : "  ");.
9aa0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
9ab0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
9ac0: 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30      if( azArg==0
9ad0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
9ae0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
9af0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
9b00: 6e 74 20 77 3b 0a 20 20 20 20 20 20 20 20 69 66  nt w;.        if
9b10: 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  ( i<ArraySize(p-
9b20: 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b  >actualWidth) ){
9b30: 0a 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20  .           w = 
9b40: 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69  p->actualWidth[i
9b50: 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ];.        }else
9b60: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 77 20 3d  {.           w =
9b70: 20 31 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   10;.        }. 
9b80: 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 4d         if( p->cM
9b90: 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69  ode==MODE_Explai
9ba0: 6e 20 26 26 20 61 7a 41 72 67 5b 69 5d 20 26 26  n && azArg[i] &&
9bb0: 20 73 74 72 6c 65 6e 43 68 61 72 28 61 7a 41 72   strlenChar(azAr
9bc0: 67 5b 69 5d 29 3e 77 20 29 7b 0a 20 20 20 20 20  g[i])>w ){.     
9bd0: 20 20 20 20 20 77 20 3d 20 73 74 72 6c 65 6e 43       w = strlenC
9be0: 68 61 72 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  har(azArg[i]);. 
9bf0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9c00: 20 69 66 28 20 69 3d 3d 31 20 26 26 20 70 2d 3e   if( i==1 && p->
9c10: 61 69 49 6e 64 65 6e 74 20 26 26 20 70 2d 3e 70  aiIndent && p->p
9c20: 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Stmt ){.        
9c30: 20 20 69 66 28 20 70 2d 3e 69 49 6e 64 65 6e 74    if( p->iIndent
9c40: 3c 70 2d 3e 6e 49 6e 64 65 6e 74 20 29 7b 0a 20  <p->nIndent ){. 
9c50: 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
9c60: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
9c70: 25 2a 2e 73 22 2c 20 70 2d 3e 61 69 49 6e 64 65  %*.s", p->aiInde
9c80: 6e 74 5b 70 2d 3e 69 49 6e 64 65 6e 74 5d 2c 20  nt[p->iIndent], 
9c90: 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  "");.          }
9ca0: 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 69 49  .          p->iI
9cb0: 6e 64 65 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20  ndent++;.       
9cc0: 20 7d 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f   }.        utf8_
9cd0: 77 69 64 74 68 5f 70 72 69 6e 74 28 70 2d 3e 6f  width_print(p->o
9ce0: 75 74 2c 20 77 2c 20 61 7a 41 72 67 5b 69 5d 20  ut, w, azArg[i] 
9cf0: 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e  ? azArg[i] : p->
9d00: 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20  nullValue);.    
9d10: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
9d20: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 69 3d  p->out, "%s", i=
9d30: 3d 6e 41 72 67 2d 31 20 3f 20 72 6f 77 53 65 70  =nArg-1 ? rowSep
9d40: 20 3a 20 22 20 20 22 29 3b 0a 20 20 20 20 20 20   : "  ");.      
9d50: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
9d60: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
9d70: 44 45 5f 53 65 6d 69 3a 20 7b 20 20 20 2f 2a 20  DE_Semi: {   /* 
9d80: 2e 73 63 68 65 6d 61 20 61 6e 64 20 2e 66 75 6c  .schema and .ful
9d90: 6c 73 63 68 65 6d 61 20 6f 75 74 70 75 74 20 2a  lschema output *
9da0: 2f 0a 20 20 20 20 20 20 70 72 69 6e 74 53 63 68  /.      printSch
9db0: 65 6d 61 4c 69 6e 65 28 70 2d 3e 6f 75 74 2c 20  emaLine(p->out, 
9dc0: 61 7a 41 72 67 5b 30 5d 2c 20 22 3b 5c 6e 22 29  azArg[0], ";\n")
9dd0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
9de0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
9df0: 44 45 5f 50 72 65 74 74 79 3a 20 7b 20 20 2f 2a  DE_Pretty: {  /*
9e00: 20 2e 73 63 68 65 6d 61 20 61 6e 64 20 2e 66 75   .schema and .fu
9e10: 6c 6c 73 63 68 65 6d 61 20 77 69 74 68 20 2d 2d  llschema with --
9e20: 69 6e 64 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20  indent */.      
9e30: 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20 20 20 69  char *z;.      i
9e40: 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 6e 74 20  nt j;.      int 
9e50: 6e 50 61 72 65 6e 20 3d 20 30 3b 0a 20 20 20 20  nParen = 0;.    
9e60: 20 20 63 68 61 72 20 63 45 6e 64 20 3d 20 30 3b    char cEnd = 0;
9e70: 0a 20 20 20 20 20 20 63 68 61 72 20 63 3b 0a 20  .      char c;. 
9e80: 20 20 20 20 20 69 6e 74 20 6e 4c 69 6e 65 20 3d       int nLine =
9e90: 20 30 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   0;.      assert
9ea0: 28 20 6e 41 72 67 3d 3d 31 20 29 3b 0a 20 20 20  ( nArg==1 );.   
9eb0: 20 20 20 69 66 28 20 61 7a 41 72 67 5b 30 5d 3d     if( azArg[0]=
9ec0: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
9ed0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
9ee0: 72 6c 69 6b 65 28 22 43 52 45 41 54 45 20 56 49  rlike("CREATE VI
9ef0: 45 57 25 22 2c 20 61 7a 41 72 67 5b 30 5d 2c 20  EW%", azArg[0], 
9f00: 30 29 3d 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20  0)==0.       || 
9f10: 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
9f20: 22 43 52 45 41 54 45 20 54 52 49 47 25 22 2c 20  "CREATE TRIG%", 
9f30: 61 7a 41 72 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a  azArg[0], 0)==0.
9f40: 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
9f50: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
9f60: 6f 75 74 2c 20 22 25 73 3b 5c 6e 22 2c 20 61 7a  out, "%s;\n", az
9f70: 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[0]);.       
9f80: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
9f90: 20 20 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65        z = sqlite
9fa0: 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
9fb0: 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20  azArg[0]);.     
9fc0: 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 66 6f   j = 0;.      fo
9fd0: 72 28 69 3d 30 3b 20 49 73 53 70 61 63 65 28 7a  r(i=0; IsSpace(z
9fe0: 5b 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20  [i]); i++){}.   
9ff0: 20 20 20 66 6f 72 28 3b 20 28 63 20 3d 20 7a 5b     for(; (c = z[
a000: 69 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20  i])!=0; i++){.  
a010: 20 20 20 20 20 20 69 66 28 20 49 73 53 70 61 63        if( IsSpac
a020: 65 28 63 29 20 29 7b 0a 20 20 20 20 20 20 20 20  e(c) ){.        
a030: 20 20 69 66 28 20 7a 5b 6a 2d 31 5d 3d 3d 27 5c    if( z[j-1]=='\
a040: 72 27 20 29 20 7a 5b 6a 2d 31 5d 20 3d 20 27 5c  r' ) z[j-1] = '\
a050: 6e 27 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  n';.          if
a060: 28 20 49 73 53 70 61 63 65 28 7a 5b 6a 2d 31 5d  ( IsSpace(z[j-1]
a070: 29 20 7c 7c 20 7a 5b 6a 2d 31 5d 3d 3d 27 28 27  ) || z[j-1]=='('
a080: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
a090: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28       }else if( (
a0a0: 63 3d 3d 27 28 27 20 7c 7c 20 63 3d 3d 27 29 27  c=='(' || c==')'
a0b0: 29 20 26 26 20 6a 3e 30 20 26 26 20 49 73 53 70  ) && j>0 && IsSp
a0c0: 61 63 65 28 7a 5b 6a 2d 31 5d 29 20 29 7b 0a 20  ace(z[j-1]) ){. 
a0d0: 20 20 20 20 20 20 20 20 20 6a 2d 2d 3b 0a 20 20           j--;.  
a0e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
a0f0: 7a 5b 6a 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  z[j++] = c;.    
a100: 20 20 7d 0a 20 20 20 20 20 20 77 68 69 6c 65 28    }.      while(
a110: 20 6a 3e 30 20 26 26 20 49 73 53 70 61 63 65 28   j>0 && IsSpace(
a120: 7a 5b 6a 2d 31 5d 29 20 29 7b 20 6a 2d 2d 3b 20  z[j-1]) ){ j--; 
a130: 7d 0a 20 20 20 20 20 20 7a 5b 6a 5d 20 3d 20 30  }.      z[j] = 0
a140: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 6c  ;.      if( strl
a150: 65 6e 33 30 28 7a 29 3e 3d 37 39 20 29 7b 0a 20  en30(z)>=79 ){. 
a160: 20 20 20 20 20 20 20 66 6f 72 28 69 3d 6a 3d 30         for(i=j=0
a170: 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b  ; (c = z[i])!=0;
a180: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
a190: 20 69 66 28 20 63 3d 3d 63 45 6e 64 20 29 7b 0a   if( c==cEnd ){.
a1a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 45 6e 64              cEnd
a1b0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
a1c0: 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 22 27  }else if( c=='"'
a1d0: 20 7c 7c 20 63 3d 3d 27 5c 27 27 20 7c 7c 20 63   || c=='\'' || c
a1e0: 3d 3d 27 60 27 20 29 7b 0a 20 20 20 20 20 20 20  =='`' ){.       
a1f0: 20 20 20 20 20 63 45 6e 64 20 3d 20 63 3b 0a 20       cEnd = c;. 
a200: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69           }else i
a210: 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20  f( c=='[' ){.   
a220: 20 20 20 20 20 20 20 20 20 63 45 6e 64 20 3d 20           cEnd = 
a230: 27 5d 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ']';.          }
a240: 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 28 27 20  else if( c=='(' 
a250: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ){.            n
a260: 50 61 72 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20  Paren++;.       
a270: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
a280: 27 29 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ')' ){.         
a290: 20 20 20 6e 50 61 72 65 6e 2d 2d 3b 0a 20 20 20     nParen--;.   
a2a0: 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 4c 69           if( nLi
a2b0: 6e 65 3e 30 20 26 26 20 6e 50 61 72 65 6e 3d 3d  ne>0 && nParen==
a2c0: 30 20 26 26 20 6a 3e 30 20 29 7b 0a 20 20 20 20  0 && j>0 ){.    
a2d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 53            printS
a2e0: 63 68 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e 6f 75  chemaLineN(p->ou
a2f0: 74 2c 20 7a 2c 20 6a 2c 20 22 5c 6e 22 29 3b 0a  t, z, j, "\n");.
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6a 20                j 
a310: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20  = 0;.           
a320: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
a330: 20 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20           z[j++] 
a340: 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 20 20 69  = c;.          i
a350: 66 28 20 6e 50 61 72 65 6e 3d 3d 31 20 26 26 20  f( nParen==1 && 
a360: 28 63 3d 3d 27 28 27 20 7c 7c 20 63 3d 3d 27 2c  (c=='(' || c==',
a370: 27 20 7c 7c 20 63 3d 3d 27 5c 6e 27 29 20 29 7b  ' || c=='\n') ){
a380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
a390: 20 63 3d 3d 27 5c 6e 27 20 29 20 6a 2d 2d 3b 0a   c=='\n' ) j--;.
a3a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e              prin
a3b0: 74 53 63 68 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e  tSchemaLineN(p->
a3c0: 6f 75 74 2c 20 7a 2c 20 6a 2c 20 22 5c 6e 20 20  out, z, j, "\n  
a3d0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
a3e0: 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  j = 0;.         
a3f0: 20 20 20 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20     nLine++;.    
a400: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 49          while( I
a410: 73 53 70 61 63 65 28 7a 5b 69 2b 31 5d 29 20 29  sSpace(z[i+1]) )
a420: 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  { i++; }.       
a430: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
a440: 20 20 20 20 20 20 20 7a 5b 6a 5d 20 3d 20 30 3b         z[j] = 0;
a450: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
a460: 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70  rintSchemaLine(p
a470: 2d 3e 6f 75 74 2c 20 7a 2c 20 22 3b 5c 6e 22 29  ->out, z, ";\n")
a480: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
a490: 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20 20 62  free(z);.      b
a4a0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
a4b0: 63 61 73 65 20 4d 4f 44 45 5f 4c 69 73 74 3a 20  case MODE_List: 
a4c0: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63  {.      if( p->c
a4d0: 6e 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68  nt++==0 && p->sh
a4e0: 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20  owHeader ){.    
a4f0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
a500: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
a510: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
a520: 28 70 2d 3e 6f 75 74 2c 22 25 73 25 73 22 2c 61  (p->out,"%s%s",a
a530: 7a 43 6f 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20  zCol[i],.       
a540: 20 20 20 20 20 20 20 20 20 20 20 69 3d 3d 6e 41             i==nA
a550: 72 67 2d 31 20 3f 20 70 2d 3e 72 6f 77 53 65 70  rg-1 ? p->rowSep
a560: 61 72 61 74 6f 72 20 3a 20 70 2d 3e 63 6f 6c 53  arator : p->colS
a570: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
a580: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
a590: 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20     if( azArg==0 
a5a0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66  ) break;.      f
a5b0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
a5c0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68  i++){.        ch
a5d0: 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d  ar *z = azArg[i]
a5e0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 3d  ;.        if( z=
a5f0: 3d 30 20 29 20 7a 20 3d 20 70 2d 3e 6e 75 6c 6c  =0 ) z = p->null
a600: 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 75  Value;.        u
a610: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
a620: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
a630: 20 20 20 20 20 69 66 28 20 69 3c 6e 41 72 67 2d       if( i<nArg-
a640: 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  1 ){.          u
a650: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
a660: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53  t, "%s", p->colS
a670: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
a680: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
a690: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
a6a0: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d  p->out, "%s", p-
a6b0: 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a  >rowSeparator);.
a6c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a6d0: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
a6e0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
a6f0: 44 45 5f 48 74 6d 6c 3a 20 7b 0a 20 20 20 20 20  DE_Html: {.     
a700: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
a710: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
a720: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  r ){.        raw
a730: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
a740: 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20 20 20 20  <TR>");.        
a750: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
a760: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
a770: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
a780: 75 74 2c 22 3c 54 48 3e 22 29 3b 0a 20 20 20 20  ut,"<TH>");.    
a790: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 68 74 6d        output_htm
a7a0: 6c 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  l_string(p->out,
a7b0: 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20   azCol[i]);.    
a7c0: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
a7d0: 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 48 3e 5c 6e  (p->out,"</TH>\n
a7e0: 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ");.        }.  
a7f0: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
a800: 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e  (p->out,"</TR>\n
a810: 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
a820: 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29    if( azArg==0 )
a830: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 72 61   break;.      ra
a840: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
a850: 22 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20 20 66  "<TR>");.      f
a860: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
a870: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 72 61  i++){.        ra
a880: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
a890: 22 3c 54 44 3e 22 29 3b 0a 20 20 20 20 20 20 20  "<TD>");.       
a8a0: 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74 72   output_html_str
a8b0: 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72  ing(p->out, azAr
a8c0: 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20  g[i] ? azArg[i] 
a8d0: 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b  : p->nullValue);
a8e0: 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
a8f0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 44  ntf(p->out,"</TD
a900: 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >\n");.      }. 
a910: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
a920: 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e 22  p->out,"</TR>\n"
a930: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
a940: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d      }.    case M
a950: 4f 44 45 5f 54 63 6c 3a 20 7b 0a 20 20 20 20 20  ODE_Tcl: {.     
a960: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
a970: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
a980: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  r ){.        for
a990: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
a9a0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75  +){.          ou
a9b0: 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d  tput_c_string(p-
a9c0: 3e 6f 75 74 2c 61 7a 43 6f 6c 5b 69 5d 20 3f 20  >out,azCol[i] ? 
a9d0: 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a  azCol[i] : "");.
a9e0: 20 20 20 20 20 20 20 20 20 20 69 66 28 69 3c 6e            if(i<n
a9f0: 41 72 67 2d 31 29 20 75 74 66 38 5f 70 72 69 6e  Arg-1) utf8_prin
aa00: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
aa10: 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72   p->colSeparator
aa20: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
aa30: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
aa40: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
aa50: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
aa60: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
aa70: 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72  f( azArg==0 ) br
aa80: 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  eak;.      for(i
aa90: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
aaa0: 7b 0a 20 20 20 20 20 20 20 20 6f 75 74 70 75 74  {.        output
aab0: 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  _c_string(p->out
aac0: 2c 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41  , azArg[i] ? azA
aad0: 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56  rg[i] : p->nullV
aae0: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 69  alue);.        i
aaf0: 66 28 69 3c 6e 41 72 67 2d 31 29 20 75 74 66 38  f(i<nArg-1) utf8
ab00: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
ab10: 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  "%s", p->colSepa
ab20: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a  rator);.      }.
ab30: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
ab40: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
ab50: 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
ab60: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
ab70: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
ab80: 44 45 5f 43 73 76 3a 20 7b 0a 20 20 20 20 20 20  DE_Csv: {.      
ab90: 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 70 2d  setBinaryMode(p-
aba0: 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  >out, 1);.      
abb0: 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20  if( p->cnt++==0 
abc0: 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72  && p->showHeader
abd0: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
abe0: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
abf0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  ){.          out
ac00: 70 75 74 5f 63 73 76 28 70 2c 20 61 7a 43 6f 6c  put_csv(p, azCol
ac10: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
ac20: 20 22 22 2c 20 69 3c 6e 41 72 67 2d 31 29 3b 0a   "", i<nArg-1);.
ac30: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ac40: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
ac50: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
ac60: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
ac70: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
ac80: 6e 41 72 67 3e 30 20 29 7b 0a 20 20 20 20 20 20  nArg>0 ){.      
ac90: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
aca0: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
acb0: 20 20 20 6f 75 74 70 75 74 5f 63 73 76 28 70 2c     output_csv(p,
acc0: 20 61 7a 41 72 67 5b 69 5d 2c 20 69 3c 6e 41 72   azArg[i], i<nAr
acd0: 67 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  g-1);.        }.
ace0: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
acf0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
ad00: 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
ad10: 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
ad20: 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28 70 2d    setTextMode(p-
ad30: 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  >out, 1);.      
ad40: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
ad50: 20 63 61 73 65 20 4d 4f 44 45 5f 49 6e 73 65 72   case MODE_Inser
ad60: 74 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 61  t: {.      if( a
ad70: 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b  zArg==0 ) break;
ad80: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
ad90: 74 66 28 70 2d 3e 6f 75 74 2c 22 49 4e 53 45 52  tf(p->out,"INSER
ada0: 54 20 49 4e 54 4f 20 25 73 22 2c 70 2d 3e 7a 44  T INTO %s",p->zD
adb0: 65 73 74 54 61 62 6c 65 29 3b 0a 20 20 20 20 20  estTable);.     
adc0: 20 69 66 28 20 70 2d 3e 73 68 6f 77 48 65 61 64   if( p->showHead
add0: 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  er ){.        ra
ade0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
adf0: 22 28 22 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  "(");.        fo
ae00: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
ae10: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
ae20: 66 28 20 69 3e 30 20 29 20 72 61 77 5f 70 72 69  f( i>0 ) raw_pri
ae30: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2c 22 29  ntf(p->out, ",")
ae40: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
ae50: 71 75 6f 74 65 43 68 61 72 28 61 7a 43 6f 6c 5b  quoteChar(azCol[
ae60: 69 5d 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  i]) ){.         
ae70: 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c     char *z = sql
ae80: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22  ite3_mprintf("\"
ae90: 25 77 5c 22 22 2c 20 61 7a 43 6f 6c 5b 69 5d 29  %w\"", azCol[i])
aea0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74  ;.            ut
aeb0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
aec0: 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  , "%s", z);.    
aed0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
aee0: 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20 20 20  free(z);.       
aef0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
af00: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
af10: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 61  (p->out, "%s", a
af20: 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zCol[i]);.      
af30: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
af40: 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
af50: 74 66 28 70 2d 3e 6f 75 74 2c 22 29 22 29 3b 0a  tf(p->out,")");.
af60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 2d        }.      p-
af70: 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 66 6f  >cnt++;.      fo
af80: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
af90: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  ++){.        raw
afa0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
afb0: 69 3e 30 20 3f 20 22 2c 22 20 3a 20 22 20 56 41  i>0 ? "," : " VA
afc0: 4c 55 45 53 28 22 29 3b 0a 20 20 20 20 20 20 20  LUES(");.       
afd0: 20 69 66 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d   if( (azArg[i]==
afe0: 30 29 20 7c 7c 20 28 61 69 54 79 70 65 20 26 26  0) || (aiType &&
aff0: 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49   aiType[i]==SQLI
b000: 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20  TE_NULL) ){.    
b010: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
b020: 66 28 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29  f(p->out,"NULL")
b030: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
b040: 69 66 28 20 61 69 54 79 70 65 20 26 26 20 61 69  if( aiType && ai
b050: 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f  Type[i]==SQLITE_
b060: 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 20 20  TEXT ){.        
b070: 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c    if( ShellHasFl
b080: 61 67 28 70 2c 20 53 48 46 4c 47 5f 4e 65 77 6c  ag(p, SHFLG_Newl
b090: 69 6e 65 73 29 20 29 7b 0a 20 20 20 20 20 20 20  ines) ){.       
b0a0: 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74       output_quot
b0b0: 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ed_string(p->out
b0c0: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b0d0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
b0e0: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
b0f0: 5f 71 75 6f 74 65 64 5f 65 73 63 61 70 65 64 5f  _quoted_escaped_
b100: 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61  string(p->out, a
b110: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
b120: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
b130: 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26  lse if( aiType &
b140: 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c  & aiType[i]==SQL
b150: 49 54 45 5f 49 4e 54 45 47 45 52 20 29 7b 0a 20  ITE_INTEGER ){. 
b160: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
b170: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22  intf(p->out,"%s"
b180: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b190: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61       }else if( a
b1a0: 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b  iType && aiType[
b1b0: 69 5d 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f 41 54  i]==SQLITE_FLOAT
b1c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68   ){.          ch
b1d0: 61 72 20 7a 5b 35 30 5d 3b 0a 20 20 20 20 20 20  ar z[50];.      
b1e0: 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d 20 73      double r = s
b1f0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
b200: 75 62 6c 65 28 70 2d 3e 70 53 74 6d 74 2c 20 69  uble(p->pStmt, i
b210: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
b220: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 35 30  ite3_snprintf(50
b230: 2c 7a 2c 22 25 21 2e 32 30 67 22 2c 20 72 29 3b  ,z,"%!.20g", r);
b240: 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
b250: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
b260: 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20  s", z);.        
b270: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
b280: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
b290: 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20 70 2d  QLITE_BLOB && p-
b2a0: 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20  >pStmt ){.      
b2b0: 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a      const void *
b2c0: 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  pBlob = sqlite3_
b2d0: 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d 3e 70  column_blob(p->p
b2e0: 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20  Stmt, i);.      
b2f0: 20 20 20 20 69 6e 74 20 6e 42 6c 6f 62 20 3d 20      int nBlob = 
b300: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
b310: 79 74 65 73 28 70 2d 3e 70 53 74 6d 74 2c 20 69  ytes(p->pStmt, i
b320: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  );.          out
b330: 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 70 2d 3e  put_hex_blob(p->
b340: 6f 75 74 2c 20 70 42 6c 6f 62 2c 20 6e 42 6c 6f  out, pBlob, nBlo
b350: 62 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  b);.        }els
b360: 65 20 69 66 28 20 69 73 4e 75 6d 62 65 72 28 61  e if( isNumber(a
b370: 7a 41 72 67 5b 69 5d 2c 20 30 29 20 29 7b 0a 20  zArg[i], 0) ){. 
b380: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
b390: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22  intf(p->out,"%s"
b3a0: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b3b0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 53       }else if( S
b3c0: 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
b3d0: 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 29 20 29  HFLG_Newlines) )
b3e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70  {.          outp
b3f0: 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67  ut_quoted_string
b400: 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69  (p->out, azArg[i
b410: 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ]);.        }els
b420: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  e{.          out
b430: 70 75 74 5f 71 75 6f 74 65 64 5f 65 73 63 61 70  put_quoted_escap
b440: 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ed_string(p->out
b450: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b460: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
b470: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
b480: 70 2d 3e 6f 75 74 2c 22 29 3b 5c 6e 22 29 3b 0a  p->out,");\n");.
b490: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b4a0: 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45   }.    case MODE
b4b0: 5f 51 75 6f 74 65 3a 20 7b 0a 20 20 20 20 20 20  _Quote: {.      
b4c0: 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62  if( azArg==0 ) b
b4d0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20  reak;.      if( 
b4e0: 70 2d 3e 63 6e 74 3d 3d 30 20 26 26 20 70 2d 3e  p->cnt==0 && p->
b4f0: 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20  showHeader ){.  
b500: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
b510: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
b520: 20 20 20 20 20 20 20 69 66 28 20 69 3e 30 20 29         if( i>0 )
b530: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
b540: 75 74 2c 20 22 2c 22 29 3b 0a 20 20 20 20 20 20  ut, ",");.      
b550: 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65      output_quote
b560: 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  d_string(p->out,
b570: 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20   azCol[i]);.    
b580: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61      }.        ra
b590: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
b5a0: 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  "\n");.      }. 
b5b0: 20 20 20 20 20 70 2d 3e 63 6e 74 2b 2b 3b 0a 20       p->cnt++;. 
b5c0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
b5d0: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
b5e0: 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 72 61      if( i>0 ) ra
b5f0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
b600: 20 22 2c 22 29 3b 0a 20 20 20 20 20 20 20 20 69   ",");.        i
b610: 66 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d 30 29  f( (azArg[i]==0)
b620: 20 7c 7c 20 28 61 69 54 79 70 65 20 26 26 20 61   || (aiType && a
b630: 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45  iType[i]==SQLITE
b640: 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20 20 20  _NULL) ){.      
b650: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
b660: 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29 3b 0a  p->out,"NULL");.
b670: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
b680: 28 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79  ( aiType && aiTy
b690: 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 54 45  pe[i]==SQLITE_TE
b6a0: 58 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  XT ){.          
b6b0: 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74  output_quoted_st
b6c0: 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41  ring(p->out, azA
b6d0: 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[i]);.        
b6e0: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
b6f0: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
b700: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 29 7b  QLITE_INTEGER ){
b710: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
b720: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
b730: 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  s", azArg[i]);. 
b740: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
b750: 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70   aiType && aiTyp
b760: 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f  e[i]==SQLITE_FLO
b770: 41 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  AT ){.          
b780: 63 68 61 72 20 7a 5b 35 30 5d 3b 0a 20 20 20 20  char z[50];.    
b790: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d        double r =
b7a0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
b7b0: 64 6f 75 62 6c 65 28 70 2d 3e 70 53 74 6d 74 2c  double(p->pStmt,
b7c0: 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   i);.          s
b7d0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
b7e0: 35 30 2c 7a 2c 22 25 21 2e 32 30 67 22 2c 20 72  50,z,"%!.20g", r
b7f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  );.          raw
b800: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
b810: 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20  "%s", z);.      
b820: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79    }else if( aiTy
b830: 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d  pe && aiType[i]=
b840: 3d 53 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20  =SQLITE_BLOB && 
b850: 70 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  p->pStmt ){.    
b860: 20 20 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64        const void
b870: 20 2a 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65   *pBlob = sqlite
b880: 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d  3_column_blob(p-
b890: 3e 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  >pStmt, i);.    
b8a0: 20 20 20 20 20 20 69 6e 74 20 6e 42 6c 6f 62 20        int nBlob 
b8b0: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
b8c0: 5f 62 79 74 65 73 28 70 2d 3e 70 53 74 6d 74 2c  _bytes(p->pStmt,
b8d0: 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f   i);.          o
b8e0: 75 74 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 70  utput_hex_blob(p
b8f0: 2d 3e 6f 75 74 2c 20 70 42 6c 6f 62 2c 20 6e 42  ->out, pBlob, nB
b900: 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  lob);.        }e
b910: 6c 73 65 20 69 66 28 20 69 73 4e 75 6d 62 65 72  lse if( isNumber
b920: 28 61 7a 41 72 67 5b 69 5d 2c 20 30 29 20 29 7b  (azArg[i], 0) ){
b930: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
b940: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
b950: 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  s", azArg[i]);. 
b960: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
b970: 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71          output_q
b980: 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e  uoted_string(p->
b990: 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a  out, azArg[i]);.
b9a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
b9b0: 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  }.      raw_prin
b9c0: 74 66 28 70 2d 3e 6f 75 74 2c 22 5c 6e 22 29 3b  tf(p->out,"\n");
b9d0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
b9e0: 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44    }.    case MOD
b9f0: 45 5f 41 73 63 69 69 3a 20 7b 0a 20 20 20 20 20  E_Ascii: {.     
ba00: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
ba10: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
ba20: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  r ){.        for
ba30: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
ba40: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  +){.          if
ba50: 28 20 69 3e 30 20 29 20 75 74 66 38 5f 70 72 69  ( i>0 ) utf8_pri
ba60: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
ba70: 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
ba80: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 75 74  r);.          ut
ba90: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
baa0: 2c 22 25 73 22 2c 61 7a 43 6f 6c 5b 69 5d 20 3f  ,"%s",azCol[i] ?
bab0: 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b   azCol[i] : "");
bac0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
bad0: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
bae0: 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e  ->out, "%s", p->
baf0: 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  rowSeparator);. 
bb00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
bb10: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
bb20: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
bb30: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
bb40: 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 30 20          if( i>0 
bb50: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
bb60: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63  >out, "%s", p->c
bb70: 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  olSeparator);.  
bb80: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
bb90: 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 61 7a  f(p->out,"%s",az
bba0: 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69  Arg[i] ? azArg[i
bbb0: 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  ] : p->nullValue
bbc0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
bbd0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
bbe0: 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f  out, "%s", p->ro
bbf0: 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  wSeparator);.   
bc00: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
bc10: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
bc20: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73  }../*.** This is
bc30: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f   the callback ro
bc40: 75 74 69 6e 65 20 74 68 61 74 20 74 68 65 20 53  utine that the S
bc50: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0a 2a 2a  QLite library.**
bc60: 20 69 6e 76 6f 6b 65 73 20 66 6f 72 20 65 61 63   invokes for eac
bc70: 68 20 72 6f 77 20 6f 66 20 61 20 71 75 65 72 79  h row of a query
bc80: 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74   result..*/.stat
bc90: 69 63 20 69 6e 74 20 63 61 6c 6c 62 61 63 6b 28  ic int callback(
bca0: 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
bcb0: 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41  nArg, char **azA
bcc0: 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  rg, char **azCol
bcd0: 29 7b 0a 20 20 2f 2a 20 73 69 6e 63 65 20 77 65  ){.  /* since we
bce0: 20 64 6f 6e 27 74 20 68 61 76 65 20 74 79 70 65   don't have type
bcf0: 20 69 6e 66 6f 2c 20 63 61 6c 6c 20 74 68 65 20   info, call the 
bd00: 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 20 77  shell_callback w
bd10: 69 74 68 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65  ith a NULL value
bd20: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 73 68 65   */.  return she
bd30: 6c 6c 5f 63 61 6c 6c 62 61 63 6b 28 70 41 72 67  ll_callback(pArg
bd40: 2c 20 6e 41 72 67 2c 20 61 7a 41 72 67 2c 20 61  , nArg, azArg, a
bd50: 7a 43 6f 6c 2c 20 4e 55 4c 4c 29 3b 0a 7d 0a 0a  zCol, NULL);.}..
bd60: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
bd70: 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69  e callback routi
bd80: 6e 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ne from sqlite3_
bd90: 65 78 65 63 28 29 20 74 68 61 74 20 61 70 70 65  exec() that appe
bda0: 6e 64 73 20 61 6c 6c 0a 2a 2a 20 6f 75 74 70 75  nds all.** outpu
bdb0: 74 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  t onto the end o
bdc0: 66 20 61 20 53 68 65 6c 6c 54 65 78 74 20 6f 62  f a ShellText ob
bdd0: 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ject..*/.static 
bde0: 69 6e 74 20 63 61 70 74 75 72 65 4f 75 74 70 75  int captureOutpu
bdf0: 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a  tCallback(void *
be00: 70 41 72 67 2c 20 69 6e 74 20 6e 41 72 67 2c 20  pArg, int nArg, 
be10: 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 63 68  char **azArg, ch
be20: 61 72 20 2a 2a 61 7a 29 7b 0a 20 20 53 68 65 6c  ar **az){.  Shel
be30: 6c 54 65 78 74 20 2a 70 20 3d 20 28 53 68 65 6c  lText *p = (Shel
be40: 6c 54 65 78 74 2a 29 70 41 72 67 3b 0a 20 20 69  lText*)pArg;.  i
be50: 6e 74 20 69 3b 0a 20 20 55 4e 55 53 45 44 5f 50  nt i;.  UNUSED_P
be60: 41 52 41 4d 45 54 45 52 28 61 7a 29 3b 0a 20 20  ARAMETER(az);.  
be70: 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 72  if( azArg==0 ) r
be80: 65 74 75 72 6e 20 30 3b 0a 20 20 69 66 28 20 70  eturn 0;.  if( p
be90: 2d 3e 6e 20 29 20 61 70 70 65 6e 64 54 65 78 74  ->n ) appendText
bea0: 28 70 2c 20 22 7c 22 2c 20 30 29 3b 0a 20 20 66  (p, "|", 0);.  f
beb0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
bec0: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 20  i++){.    if( i 
bed0: 29 20 61 70 70 65 6e 64 54 65 78 74 28 70 2c 20  ) appendText(p, 
bee0: 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 69 66 28  ",", 0);.    if(
bef0: 20 61 7a 41 72 67 5b 69 5d 20 29 20 61 70 70 65   azArg[i] ) appe
bf00: 6e 64 54 65 78 74 28 70 2c 20 61 7a 41 72 67 5b  ndText(p, azArg[
bf10: 69 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65  i], 0);.  }.  re
bf20: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
bf30: 20 47 65 6e 65 72 61 74 65 20 61 6e 20 61 70 70   Generate an app
bf40: 72 6f 70 72 69 61 74 65 20 53 45 4c 46 54 45 53  ropriate SELFTES
bf50: 54 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  T table in the m
bf60: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  ain database..*/
bf70: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 65  .static void cre
bf80: 61 74 65 53 65 6c 66 74 65 73 74 54 61 62 6c 65  ateSelftestTable
bf90: 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b  (ShellState *p){
bfa0: 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
bfb0: 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
bfc0: 65 78 65 63 28 70 2d 3e 64 62 2c 0a 20 20 20 20  exec(p->db,.    
bfd0: 22 53 41 56 45 50 4f 49 4e 54 20 73 65 6c 66 74  "SAVEPOINT selft
bfe0: 65 73 74 5f 69 6e 69 74 3b 5c 6e 22 0a 20 20 20  est_init;\n".   
bff0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49   "CREATE TABLE I
c000: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 73 65 6c  F NOT EXISTS sel
c010: 66 74 65 73 74 28 5c 6e 22 0a 20 20 20 20 22 20  ftest(\n".    " 
c020: 20 74 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49   tno INTEGER PRI
c030: 4d 41 52 59 20 4b 45 59 2c 5c 6e 22 20 20 20 2f  MARY KEY,\n"   /
c040: 2a 20 54 65 73 74 20 6e 75 6d 62 65 72 20 2a 2f  * Test number */
c050: 0a 20 20 20 20 22 20 20 6f 70 20 54 45 58 54 2c  .    "  op TEXT,
c060: 5c 6e 22 20 20 20 20 20 20 20 20 20 20 20 20 20  \n"             
c070: 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 6f        /* Operato
c080: 72 3a 20 20 6d 65 6d 6f 20 72 75 6e 20 2a 2f 0a  r:  memo run */.
c090: 20 20 20 20 22 20 20 63 6d 64 20 54 45 58 54 2c      "  cmd TEXT,
c0a0: 5c 6e 22 20 20 20 20 20 20 20 20 20 20 20 20 20  \n"             
c0b0: 20 20 20 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20       /* Command 
c0c0: 74 65 78 74 20 2a 2f 0a 20 20 20 20 22 20 20 61  text */.    "  a
c0d0: 6e 73 20 54 45 58 54 5c 6e 22 20 20 20 20 20 20  ns TEXT\n"      
c0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c0f0: 44 65 73 69 72 65 64 20 61 6e 73 77 65 72 20 2a  Desired answer *
c100: 2f 0a 20 20 20 20 22 29 3b 22 0a 20 20 20 20 22  /.    ");".    "
c110: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
c120: 45 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 28  E [_shell$self](
c130: 6f 70 2c 63 6d 64 2c 61 6e 73 29 3b 5c 6e 22 0a  op,cmd,ans);\n".
c140: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
c150: 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 28 72   [_shell$self](r
c160: 6f 77 69 64 2c 6f 70 2c 63 6d 64 29 5c 6e 22 0a  owid,op,cmd)\n".
c170: 20 20 20 20 22 20 20 56 41 4c 55 45 53 28 63 6f      "  VALUES(co
c180: 61 6c 65 73 63 65 28 28 53 45 4c 45 43 54 20 28  alesce((SELECT (
c190: 6d 61 78 28 74 6e 6f 29 2b 31 30 30 29 2f 31 30  max(tno)+100)/10
c1a0: 20 46 52 4f 4d 20 73 65 6c 66 74 65 73 74 29 2c   FROM selftest),
c1b0: 31 30 29 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20  10),\n".    "   
c1c0: 20 20 20 20 20 20 27 6d 65 6d 6f 27 2c 27 54 65        'memo','Te
c1d0: 73 74 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  sts generated by
c1e0: 20 2d 2d 69 6e 69 74 27 29 3b 5c 6e 22 0a 20 20   --init');\n".  
c1f0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b    "INSERT INTO [
c200: 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 5c 6e 22 0a  _shell$self]\n".
c210: 20 20 20 20 22 20 20 53 45 4c 45 43 54 20 27 72      "  SELECT 'r
c220: 75 6e 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20  un',\n".    "   
c230: 20 27 53 45 4c 45 43 54 20 68 65 78 28 73 68 61   'SELECT hex(sha
c240: 33 5f 71 75 65 72 79 28 27 27 53 45 4c 45 43 54  3_query(''SELECT
c250: 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e   type,name,tbl_n
c260: 61 6d 65 2c 73 71 6c 20 22 0a 20 20 20 20 20 20  ame,sql ".      
c270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c280: 20 20 20 20 20 20 20 20 20 20 20 22 46 52 4f 4d             "FROM
c290: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f   sqlite_master O
c2a0: 52 44 45 52 20 42 59 20 32 27 27 2c 32 32 34 29  RDER BY 2'',224)
c2b0: 29 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  )',\n".    "    
c2c0: 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 27  hex(sha3_query('
c2d0: 53 45 4c 45 43 54 20 74 79 70 65 2c 6e 61 6d 65  SELECT type,name
c2e0: 2c 74 62 6c 5f 6e 61 6d 65 2c 73 71 6c 20 22 0a  ,tbl_name,sql ".
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c300: 20 20 20 20 20 20 20 20 20 20 22 46 52 4f 4d 20            "FROM 
c310: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f 52  sqlite_master OR
c320: 44 45 52 20 42 59 20 32 27 2c 32 32 34 29 29 3b  DER BY 2',224));
c330: 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20  \n".    "INSERT 
c340: 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c  INTO [_shell$sel
c350: 66 5d 5c 6e 22 0a 20 20 20 20 22 20 20 53 45 4c  f]\n".    "  SEL
c360: 45 43 54 20 27 72 75 6e 27 2c 22 0a 20 20 20 20  ECT 'run',".    
c370: 22 20 20 20 20 27 53 45 4c 45 43 54 20 68 65 78  "    'SELECT hex
c380: 28 73 68 61 33 5f 71 75 65 72 79 28 27 27 53 45  (sha3_query(''SE
c390: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c 22 27 20  LECT * FROM \"' 
c3a0: 7c 7c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  ||".    "       
c3b0: 20 70 72 69 6e 74 66 28 27 25 77 27 2c 6e 61 6d   printf('%w',nam
c3c0: 65 29 20 7c 7c 20 27 5c 22 20 4e 4f 54 20 49 4e  e) || '\" NOT IN
c3d0: 44 45 58 45 44 27 27 2c 32 32 34 29 29 27 2c 5c  DEXED'',224))',\
c3e0: 6e 22 0a 20 20 20 20 22 20 20 20 20 68 65 78 28  n".    "    hex(
c3f0: 73 68 61 33 5f 71 75 65 72 79 28 70 72 69 6e 74  sha3_query(print
c400: 66 28 27 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  f('SELECT * FROM
c410: 20 5c 22 25 77 5c 22 20 4e 4f 54 20 49 4e 44 45   \"%w\" NOT INDE
c420: 58 45 44 27 2c 6e 61 6d 65 29 2c 32 32 34 29 29  XED',name),224))
c430: 5c 6e 22 0a 20 20 20 20 22 20 20 46 52 4f 4d 20  \n".    "  FROM 
c440: 28 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 53 45  (\n".    "    SE
c450: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
c460: 71 6c 69 74 65 5f 6d 61 73 74 65 72 5c 6e 22 0a  qlite_master\n".
c470: 20 20 20 20 22 20 20 20 20 20 57 48 45 52 45 20      "     WHERE 
c480: 74 79 70 65 3d 27 74 61 62 6c 65 27 5c 6e 22 0a  type='table'\n".
c490: 20 20 20 20 22 20 20 20 20 20 20 20 41 4e 44 20      "       AND 
c4a0: 6e 61 6d 65 3c 3e 27 73 65 6c 66 74 65 73 74 27  name<>'selftest'
c4b0: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  \n".    "       
c4c0: 41 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f  AND coalesce(roo
c4d0: 74 70 61 67 65 2c 30 29 3e 30 5c 6e 22 0a 20 20  tpage,0)>0\n".  
c4e0: 20 20 22 20 20 29 5c 6e 22 0a 20 20 20 20 22 20    "  )\n".    " 
c4f0: 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b 5c 6e  ORDER BY name;\n
c500: 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  ".    "INSERT IN
c510: 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d  TO [_shell$self]
c520: 5c 6e 22 0a 20 20 20 20 22 20 20 56 41 4c 55 45  \n".    "  VALUE
c530: 53 28 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20  S('run','PRAGMA 
c540: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27  integrity_check'
c550: 2c 27 6f 6b 27 29 3b 5c 6e 22 0a 20 20 20 20 22  ,'ok');\n".    "
c560: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 65 6c 66  INSERT INTO self
c570: 74 65 73 74 28 74 6e 6f 2c 6f 70 2c 63 6d 64 2c  test(tno,op,cmd,
c580: 61 6e 73 29 22 0a 20 20 20 20 22 20 20 53 45 4c  ans)".    "  SEL
c590: 45 43 54 20 72 6f 77 69 64 2a 31 30 2c 6f 70 2c  ECT rowid*10,op,
c5a0: 63 6d 64 2c 61 6e 73 20 46 52 4f 4d 20 5b 5f 73  cmd,ans FROM [_s
c5b0: 68 65 6c 6c 24 73 65 6c 66 5d 3b 5c 6e 22 0a 20  hell$self];\n". 
c5c0: 20 20 20 22 44 52 4f 50 20 54 41 42 4c 45 20 5b     "DROP TABLE [
c5d0: 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 3b 22 0a 20  _shell$self];". 
c5e0: 20 20 20 2c 30 2c 30 2c 26 7a 45 72 72 4d 73 67     ,0,0,&zErrMsg
c5f0: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 4d 73 67  );.  if( zErrMsg
c600: 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
c610: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 45 4c  ntf(stderr, "SEL
c620: 46 54 45 53 54 20 69 6e 69 74 69 61 6c 69 7a 61  FTEST initializa
c630: 74 69 6f 6e 20 66 61 69 6c 75 72 65 3a 20 25 73  tion failure: %s
c640: 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20  \n", zErrMsg);. 
c650: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
c660: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
c670: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
c680: 64 62 2c 20 22 52 45 4c 45 41 53 45 20 73 65 6c  db, "RELEASE sel
c690: 66 74 65 73 74 5f 69 6e 69 74 22 2c 30 2c 30 2c  ftest_init",0,0,
c6a0: 30 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65  0);.}.../*.** Se
c6b0: 74 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  t the destinatio
c6c0: 6e 20 74 61 62 6c 65 20 66 69 65 6c 64 20 6f 66  n table field of
c6d0: 20 74 68 65 20 53 68 65 6c 6c 53 74 61 74 65 20   the ShellState 
c6e0: 73 74 72 75 63 74 75 72 65 20 74 6f 0a 2a 2a 20  structure to.** 
c6f0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
c700: 74 61 62 6c 65 20 67 69 76 65 6e 2e 20 20 45 73  table given.  Es
c710: 63 61 70 65 20 61 6e 79 20 71 75 6f 74 65 20 63  cape any quote c
c720: 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
c730: 0a 2a 2a 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a  .** table name..
c740: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
c750: 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 53 68  et_table_name(Sh
c760: 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
c770: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b  st char *zName){
c780: 0a 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 63  .  int i, n;.  c
c790: 68 61 72 20 63 51 75 6f 74 65 3b 0a 20 20 63 68  har cQuote;.  ch
c7a0: 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 70 2d  ar *z;..  if( p-
c7b0: 3e 7a 44 65 73 74 54 61 62 6c 65 20 29 7b 0a 20  >zDestTable ){. 
c7c0: 20 20 20 66 72 65 65 28 70 2d 3e 7a 44 65 73 74     free(p->zDest
c7d0: 54 61 62 6c 65 29 3b 0a 20 20 20 20 70 2d 3e 7a  Table);.    p->z
c7e0: 44 65 73 74 54 61 62 6c 65 20 3d 20 30 3b 0a 20  DestTable = 0;. 
c7f0: 20 7d 0a 20 20 69 66 28 20 7a 4e 61 6d 65 3d 3d   }.  if( zName==
c800: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 63 51  0 ) return;.  cQ
c810: 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61 72  uote = quoteChar
c820: 28 7a 4e 61 6d 65 29 3b 0a 20 20 6e 20 3d 20 73  (zName);.  n = s
c830: 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a  trlen30(zName);.
c840: 20 20 69 66 28 20 63 51 75 6f 74 65 20 29 20 6e    if( cQuote ) n
c850: 20 2b 3d 20 6e 2b 32 3b 0a 20 20 7a 20 3d 20 70   += n+2;.  z = p
c860: 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d 20 6d  ->zDestTable = m
c870: 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b 0a 20 20  alloc( n+1 );.  
c880: 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
c890: 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
c8a0: 72 2c 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66  r,"Error: out of
c8b0: 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20   memory\n");.   
c8c0: 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20   exit(1);.  }.  
c8d0: 6e 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 51 75  n = 0;.  if( cQu
c8e0: 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63  ote ) z[n++] = c
c8f0: 51 75 6f 74 65 3b 0a 20 20 66 6f 72 28 69 3d 30  Quote;.  for(i=0
c900: 3b 20 7a 4e 61 6d 65 5b 69 5d 3b 20 69 2b 2b 29  ; zName[i]; i++)
c910: 7b 0a 20 20 20 20 7a 5b 6e 2b 2b 5d 20 3d 20 7a  {.    z[n++] = z
c920: 4e 61 6d 65 5b 69 5d 3b 0a 20 20 20 20 69 66 28  Name[i];.    if(
c930: 20 7a 4e 61 6d 65 5b 69 5d 3d 3d 63 51 75 6f 74   zName[i]==cQuot
c940: 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63 51 75  e ) z[n++] = cQu
c950: 6f 74 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63  ote;.  }.  if( c
c960: 51 75 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d  Quote ) z[n++] =
c970: 20 63 51 75 6f 74 65 3b 0a 20 20 7a 5b 6e 5d 20   cQuote;.  z[n] 
c980: 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45  = 0;.}.../*.** E
c990: 78 65 63 75 74 65 20 61 20 71 75 65 72 79 20 73  xecute a query s
c9a0: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 77 69  tatement that wi
c9b0: 6c 6c 20 67 65 6e 65 72 61 74 65 20 53 51 4c 20  ll generate SQL 
c9c0: 6f 75 74 70 75 74 2e 20 20 50 72 69 6e 74 0a 2a  output.  Print.*
c9d0: 2a 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  * the result col
c9e0: 75 6d 6e 73 2c 20 63 6f 6d 6d 61 2d 73 65 70 61  umns, comma-sepa
c9f0: 72 61 74 65 64 2c 20 6f 6e 20 61 20 6c 69 6e 65  rated, on a line
ca00: 20 61 6e 64 20 74 68 65 6e 20 61 64 64 20 61 0a   and then add a.
ca10: 2a 2a 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 65 72  ** semicolon ter
ca20: 6d 69 6e 61 74 6f 72 20 74 6f 20 74 68 65 20 65  minator to the e
ca30: 6e 64 20 6f 66 20 74 68 61 74 20 6c 69 6e 65 2e  nd of that line.
ca40: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6e 75  .**.** If the nu
ca50: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
ca60: 69 73 20 31 20 61 6e 64 20 74 68 61 74 20 63 6f  is 1 and that co
ca70: 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 74 65  lumn contains te
ca80: 78 74 20 22 2d 2d 22 0a 2a 2a 20 74 68 65 6e 20  xt "--".** then 
ca90: 77 72 69 74 65 20 74 68 65 20 73 65 6d 69 63 6f  write the semico
caa0: 6c 6f 6e 20 6f 6e 20 61 20 73 65 70 61 72 61 74  lon on a separat
cab0: 65 20 6c 69 6e 65 2e 20 20 54 68 61 74 20 77 61  e line.  That wa
cac0: 79 2c 20 69 66 20 61 0a 2a 2a 20 22 2d 2d 22 20  y, if a.** "--" 
cad0: 63 6f 6d 6d 65 6e 74 20 6f 63 63 75 72 73 20 61  comment occurs a
cae0: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
caf0: 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 20   statement, the 
cb00: 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 77 6f 6e 27 74  comment.** won't
cb10: 20 63 6f 6e 73 75 6d 65 20 74 68 65 20 73 65 6d   consume the sem
cb20: 69 63 6f 6c 6f 6e 20 74 65 72 6d 69 6e 61 74 6f  icolon terminato
cb30: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  r..*/.static int
cb40: 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f   run_table_dump_
cb50: 71 75 65 72 79 28 0a 20 20 53 68 65 6c 6c 53 74  query(.  ShellSt
cb60: 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20  ate *p,         
cb70: 20 20 2f 2a 20 51 75 65 72 79 20 63 6f 6e 74 65    /* Query conte
cb80: 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
cb90: 61 72 20 2a 7a 53 65 6c 65 63 74 2c 20 20 20 20  ar *zSelect,    
cba0: 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
cbb0: 6d 65 6e 74 20 74 6f 20 65 78 74 72 61 63 74 20  ment to extract 
cbc0: 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e  content */.  con
cbd0: 73 74 20 63 68 61 72 20 2a 7a 46 69 72 73 74 52  st char *zFirstR
cbe0: 6f 77 20 20 20 20 2f 2a 20 50 72 69 6e 74 20 62  ow    /* Print b
cbf0: 65 66 6f 72 65 20 66 69 72 73 74 20 72 6f 77 2c  efore first row,
cc00: 20 69 66 20 6e 6f 74 20 4e 55 4c 4c 20 2a 2f 0a   if not NULL */.
cc10: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
cc20: 74 20 2a 70 53 65 6c 65 63 74 3b 0a 20 20 69 6e  t *pSelect;.  in
cc30: 74 20 72 63 3b 0a 20 20 69 6e 74 20 6e 52 65 73  t rc;.  int nRes
cc40: 75 6c 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  ult;.  int i;.  
cc50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20  const char *z;. 
cc60: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
cc70: 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
cc80: 7a 53 65 6c 65 63 74 2c 20 2d 31 2c 20 26 70 53  zSelect, -1, &pS
cc90: 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 69 66 28  elect, 0);.  if(
cca0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
ccb0: 7c 20 21 70 53 65 6c 65 63 74 20 29 7b 0a 20 20  | !pSelect ){.  
ccc0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
ccd0: 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45 52 52  >out, "/**** ERR
cce0: 4f 52 3a 20 28 25 64 29 20 25 73 20 2a 2a 2a 2a  OR: (%d) %s ****
ccf0: 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20 20 20 20  */\n", rc,.     
cd00: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
cd10: 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29  e3_errmsg(p->db)
cd20: 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30  );.    if( (rc&0
cd30: 78 66 66 29 21 3d 53 51 4c 49 54 45 5f 43 4f 52  xff)!=SQLITE_COR
cd40: 52 55 50 54 20 29 20 70 2d 3e 6e 45 72 72 2b 2b  RUPT ) p->nErr++
cd50: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b  ;.    return rc;
cd60: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
cd70: 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63 74  te3_step(pSelect
cd80: 29 3b 0a 20 20 6e 52 65 73 75 6c 74 20 3d 20 73  );.  nResult = s
cd90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
cda0: 75 6e 74 28 70 53 65 6c 65 63 74 29 3b 0a 20 20  unt(pSelect);.  
cdb0: 77 68 69 6c 65 28 20 72 63 3d 3d 53 51 4c 49 54  while( rc==SQLIT
cdc0: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 66 28  E_ROW ){.    if(
cdd0: 20 7a 46 69 72 73 74 52 6f 77 20 29 7b 0a 20 20   zFirstRow ){.  
cde0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
cdf0: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 46  p->out, "%s", zF
ce00: 69 72 73 74 52 6f 77 29 3b 0a 20 20 20 20 20 20  irstRow);.      
ce10: 7a 46 69 72 73 74 52 6f 77 20 3d 20 30 3b 0a 20  zFirstRow = 0;. 
ce20: 20 20 20 7d 0a 20 20 20 20 7a 20 3d 20 28 63 6f     }.    z = (co
ce30: 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
ce40: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
ce50: 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 20 20 75  elect, 0);.    u
ce60: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
ce70: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
ce80: 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 52 65 73   for(i=1; i<nRes
ce90: 75 6c 74 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ult; i++){.     
cea0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
ceb0: 6f 75 74 2c 20 22 2c 25 73 22 2c 20 73 71 6c 69  out, ",%s", sqli
cec0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
ced0: 70 53 65 6c 65 63 74 2c 20 69 29 29 3b 0a 20 20  pSelect, i));.  
cee0: 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 3d 3d 30    }.    if( z==0
cef0: 20 29 20 7a 20 3d 20 22 22 3b 0a 20 20 20 20 77   ) z = "";.    w
cf00: 68 69 6c 65 28 20 7a 5b 30 5d 20 26 26 20 28 7a  hile( z[0] && (z
cf10: 5b 30 5d 21 3d 27 2d 27 20 7c 7c 20 7a 5b 31 5d  [0]!='-' || z[1]
cf20: 21 3d 27 2d 27 29 20 29 20 7a 2b 2b 3b 0a 20 20  !='-') ) z++;.  
cf30: 20 20 69 66 28 20 7a 5b 30 5d 20 29 7b 0a 20 20    if( z[0] ){.  
cf40: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
cf50: 2d 3e 6f 75 74 2c 20 22 5c 6e 3b 5c 6e 22 29 3b  ->out, "\n;\n");
cf60: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
cf70: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
cf80: 6f 75 74 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20 20  out, ";\n");.   
cf90: 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
cfa0: 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63 74  te3_step(pSelect
cfb0: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
cfc0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
cfd0: 53 65 6c 65 63 74 29 3b 0a 20 20 69 66 28 20 72  Select);.  if( r
cfe0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
cff0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
d000: 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45  p->out, "/**** E
d010: 52 52 4f 52 3a 20 28 25 64 29 20 25 73 20 2a 2a  RROR: (%d) %s **
d020: 2a 2a 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20 20  ***/\n", rc,.   
d030: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
d040: 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
d050: 62 29 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63  b));.    if( (rc
d060: 26 30 78 66 66 29 21 3d 53 51 4c 49 54 45 5f 43  &0xff)!=SQLITE_C
d070: 4f 52 52 55 50 54 20 29 20 70 2d 3e 6e 45 72 72  ORRUPT ) p->nErr
d080: 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ++;.  }.  return
d090: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c   rc;.}../*.** Al
d0a0: 6c 6f 63 61 74 65 20 73 70 61 63 65 20 61 6e 64  locate space and
d0b0: 20 73 61 76 65 20 6f 66 66 20 63 75 72 72 65 6e   save off curren
d0c0: 74 20 65 72 72 6f 72 20 73 74 72 69 6e 67 2e 0a  t error string..
d0d0: 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a  */.static char *
d0e0: 73 61 76 65 5f 65 72 72 5f 6d 73 67 28 0a 20 20  save_err_msg(.  
d0f0: 73 71 6c 69 74 65 33 20 2a 64 62 20 20 20 20 20  sqlite3 *db     
d100: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
d110: 73 65 20 74 6f 20 71 75 65 72 79 20 2a 2f 0a 29  se to query */.)
d120: 7b 0a 20 20 69 6e 74 20 6e 45 72 72 4d 73 67 20  {.  int nErrMsg 
d130: 3d 20 31 2b 73 74 72 6c 65 6e 33 30 28 73 71 6c  = 1+strlen30(sql
d140: 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29  ite3_errmsg(db))
d150: 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  ;.  char *zErrMs
d160: 67 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  g = sqlite3_mall
d170: 6f 63 36 34 28 6e 45 72 72 4d 73 67 29 3b 0a 20  oc64(nErrMsg);. 
d180: 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a   if( zErrMsg ){.
d190: 20 20 20 20 6d 65 6d 63 70 79 28 7a 45 72 72 4d      memcpy(zErrM
d1a0: 73 67 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  sg, sqlite3_errm
d1b0: 73 67 28 64 62 29 2c 20 6e 45 72 72 4d 73 67 29  sg(db), nErrMsg)
d1c0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
d1d0: 45 72 72 4d 73 67 3b 0a 7d 0a 0a 23 69 66 64 65  ErrMsg;.}..#ifde
d1e0: 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 2f 2a 0a 2a  f __linux__./*.*
d1f0: 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 69 73  * Attempt to dis
d200: 70 6c 61 79 20 49 2f 4f 20 73 74 61 74 73 20 6f  play I/O stats o
d210: 6e 20 4c 69 6e 75 78 20 75 73 69 6e 67 20 2f 70  n Linux using /p
d220: 72 6f 63 2f 50 49 44 2f 69 6f 0a 2a 2f 0a 73 74  roc/PID/io.*/.st
d230: 61 74 69 63 20 76 6f 69 64 20 64 69 73 70 6c 61  atic void displa
d240: 79 4c 69 6e 75 78 49 6f 53 74 61 74 73 28 46 49  yLinuxIoStats(FI
d250: 4c 45 20 2a 6f 75 74 29 7b 0a 20 20 46 49 4c 45  LE *out){.  FILE
d260: 20 2a 69 6e 3b 0a 20 20 63 68 61 72 20 7a 5b 32   *in;.  char z[2
d270: 30 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  00];.  sqlite3_s
d280: 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
d290: 29 2c 20 7a 2c 20 22 2f 70 72 6f 63 2f 25 64 2f  ), z, "/proc/%d/
d2a0: 69 6f 22 2c 20 67 65 74 70 69 64 28 29 29 3b 0a  io", getpid());.
d2b0: 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 7a 2c 20    in = fopen(z, 
d2c0: 22 72 62 22 29 3b 0a 20 20 69 66 28 20 69 6e 3d  "rb");.  if( in=
d2d0: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 77  =0 ) return;.  w
d2e0: 68 69 6c 65 28 20 66 67 65 74 73 28 7a 2c 20 73  hile( fgets(z, s
d2f0: 69 7a 65 6f 66 28 7a 29 2c 20 69 6e 29 21 3d 30  izeof(z), in)!=0
d300: 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
d310: 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20  onst struct {.  
d320: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
d330: 7a 50 61 74 74 65 72 6e 3b 0a 20 20 20 20 20 20  zPattern;.      
d340: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 65 73  const char *zDes
d350: 63 3b 0a 20 20 20 20 7d 20 61 54 72 61 6e 73 5b  c;.    } aTrans[
d360: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 72  ] = {.      { "r
d370: 63 68 61 72 3a 20 22 2c 20 20 20 20 20 20 20 20  char: ",        
d380: 20 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73            "Bytes
d390: 20 72 65 63 65 69 76 65 64 20 62 79 20 72 65 61   received by rea
d3a0: 64 28 29 3a 22 20 7d 2c 0a 20 20 20 20 20 20 7b  d():" },.      {
d3b0: 20 22 77 63 68 61 72 3a 20 22 2c 20 20 20 20 20   "wchar: ",     
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 79               "By
d3d0: 74 65 73 20 73 65 6e 74 20 74 6f 20 77 72 69 74  tes sent to writ
d3e0: 65 28 29 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20  e():"    },.    
d3f0: 20 20 7b 20 22 73 79 73 63 72 3a 20 22 2c 20 20    { "syscr: ",  
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 22 52 65 61 64 28 29 20 73 79 73 74 65 6d 20 63  "Read() system c
d420: 61 6c 6c 73 3a 22 20 20 20 20 20 20 7d 2c 0a 20  alls:"      },. 
d430: 20 20 20 20 20 7b 20 22 73 79 73 63 77 3a 20 22       { "syscw: "
d440: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
d450: 20 20 20 22 57 72 69 74 65 28 29 20 73 79 73 74     "Write() syst
d460: 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20 20 7d  em calls:"     }
d470: 2c 0a 20 20 20 20 20 20 7b 20 22 72 65 61 64 5f  ,.      { "read_
d480: 62 79 74 65 73 3a 20 22 2c 20 20 20 20 20 20 20  bytes: ",       
d490: 20 20 20 20 20 20 22 42 79 74 65 73 20 72 65 61        "Bytes rea
d4a0: 64 20 66 72 6f 6d 20 73 74 6f 72 61 67 65 3a 22  d from storage:"
d4b0: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 77 72    },.      { "wr
d4c0: 69 74 65 5f 62 79 74 65 73 3a 20 22 2c 20 20 20  ite_bytes: ",   
d4d0: 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73 20           "Bytes 
d4e0: 77 72 69 74 74 65 6e 20 74 6f 20 73 74 6f 72 61  written to stora
d4f0: 67 65 3a 22 20 7d 2c 0a 20 20 20 20 20 20 7b 20  ge:" },.      { 
d500: 22 63 61 6e 63 65 6c 6c 65 64 5f 77 72 69 74 65  "cancelled_write
d510: 5f 62 79 74 65 73 3a 20 22 2c 20 20 22 43 61 6e  _bytes: ",  "Can
d520: 63 65 6c 6c 65 64 20 77 72 69 74 65 20 62 79 74  celled write byt
d530: 65 73 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20 7d  es:"    },.    }
d540: 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
d550: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
d560: 79 53 69 7a 65 28 61 54 72 61 6e 73 29 3b 20 69  ySize(aTrans); i
d570: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ++){.      int n
d580: 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 61   = (int)strlen(a
d590: 54 72 61 6e 73 5b 69 5d 2e 7a 50 61 74 74 65 72  Trans[i].zPatter
d5a0: 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74  n);.      if( st
d5b0: 72 6e 63 6d 70 28 61 54 72 61 6e 73 5b 69 5d 2e  rncmp(aTrans[i].
d5c0: 7a 50 61 74 74 65 72 6e 2c 20 7a 2c 20 6e 29 3d  zPattern, z, n)=
d5d0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74  =0 ){.        ut
d5e0: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  f8_printf(out, "
d5f0: 25 2d 33 36 73 20 25 73 22 2c 20 61 54 72 61 6e  %-36s %s", aTran
d600: 73 5b 69 5d 2e 7a 44 65 73 63 2c 20 26 7a 5b 6e  s[i].zDesc, &z[n
d610: 5d 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  ]);.        brea
d620: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
d630: 0a 20 20 7d 0a 20 20 66 63 6c 6f 73 65 28 69 6e  .  }.  fclose(in
d640: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
d650: 2a 2a 20 44 69 73 70 6c 61 79 20 61 20 73 69 6e  ** Display a sin
d660: 67 6c 65 20 6c 69 6e 65 20 6f 66 20 73 74 61 74  gle line of stat
d670: 75 73 20 75 73 69 6e 67 20 36 34 2d 62 69 74 20  us using 64-bit 
d680: 76 61 6c 75 65 73 2e 0a 2a 2f 0a 73 74 61 74 69  values..*/.stati
d690: 63 20 76 6f 69 64 20 64 69 73 70 6c 61 79 53 74  c void displaySt
d6a0: 61 74 4c 69 6e 65 28 0a 20 20 53 68 65 6c 6c 53  atLine(.  ShellS
d6b0: 74 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20 20  tate *p,        
d6c0: 20 20 20 20 2f 2a 20 54 68 65 20 73 68 65 6c 6c      /* The shell
d6d0: 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 68   context */.  ch
d6e0: 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 20 20 20 20  ar *zLabel,     
d6f0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 62 65 6c          /* Label
d700: 20 66 6f 72 20 74 68 69 73 20 6f 6e 65 20 6c 69   for this one li
d710: 6e 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 46  ne */.  char *zF
d720: 6f 72 6d 61 74 2c 20 20 20 20 20 20 20 20 20 20  ormat,          
d730: 20 20 2f 2a 20 46 6f 72 6d 61 74 20 66 6f 72 20    /* Format for 
d740: 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
d750: 69 6e 74 20 69 53 74 61 74 75 73 43 74 72 6c 2c  int iStatusCtrl,
d760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
d770: 63 68 20 73 74 61 74 75 73 20 74 6f 20 64 69 73  ch status to dis
d780: 70 6c 61 79 20 2a 2f 0a 20 20 69 6e 74 20 62 52  play */.  int bR
d790: 65 73 65 74 20 20 20 20 20 20 20 20 20 20 20 20  eset            
d7a0: 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 72      /* True to r
d7b0: 65 73 65 74 20 74 68 65 20 73 74 61 74 73 20 2a  eset the stats *
d7c0: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69  /.){.  sqlite3_i
d7d0: 6e 74 36 34 20 69 43 75 72 20 3d 20 2d 31 3b 0a  nt64 iCur = -1;.
d7e0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
d7f0: 69 48 69 77 74 72 20 3d 20 2d 31 3b 0a 20 20 69  iHiwtr = -1;.  i
d800: 6e 74 20 69 2c 20 6e 50 65 72 63 65 6e 74 3b 0a  nt i, nPercent;.
d810: 20 20 63 68 61 72 20 7a 4c 69 6e 65 5b 32 30 30    char zLine[200
d820: 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61  ];.  sqlite3_sta
d830: 74 75 73 36 34 28 69 53 74 61 74 75 73 43 74 72  tus64(iStatusCtr
d840: 6c 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77 74  l, &iCur, &iHiwt
d850: 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 66 6f  r, bReset);.  fo
d860: 72 28 69 3d 30 2c 20 6e 50 65 72 63 65 6e 74 3d  r(i=0, nPercent=
d870: 30 3b 20 7a 46 6f 72 6d 61 74 5b 69 5d 3b 20 69  0; zFormat[i]; i
d880: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 46 6f  ++){.    if( zFo
d890: 72 6d 61 74 5b 69 5d 3d 3d 27 25 27 20 29 20 6e  rmat[i]=='%' ) n
d8a0: 50 65 72 63 65 6e 74 2b 2b 3b 0a 20 20 7d 0a 20  Percent++;.  }. 
d8b0: 20 69 66 28 20 6e 50 65 72 63 65 6e 74 3e 31 20   if( nPercent>1 
d8c0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ){.    sqlite3_s
d8d0: 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
d8e0: 4c 69 6e 65 29 2c 20 7a 4c 69 6e 65 2c 20 7a 46  Line), zLine, zF
d8f0: 6f 72 6d 61 74 2c 20 69 43 75 72 2c 20 69 48 69  ormat, iCur, iHi
d900: 77 74 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  wtr);.  }else{. 
d910: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
d920: 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c 69 6e 65  ntf(sizeof(zLine
d930: 29 2c 20 7a 4c 69 6e 65 2c 20 7a 46 6f 72 6d 61  ), zLine, zForma
d940: 74 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 7d 0a  t, iHiwtr);.  }.
d950: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
d960: 6f 75 74 2c 20 22 25 2d 33 36 73 20 25 73 5c 6e  out, "%-36s %s\n
d970: 22 2c 20 7a 4c 61 62 65 6c 2c 20 7a 4c 69 6e 65  ", zLabel, zLine
d980: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70  );.}../*.** Disp
d990: 6c 61 79 20 6d 65 6d 6f 72 79 20 73 74 61 74 73  lay memory stats
d9a0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
d9b0: 64 69 73 70 6c 61 79 5f 73 74 61 74 73 28 0a 20  display_stats(. 
d9c0: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20   sqlite3 *db,   
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d9e0: 44 61 74 61 62 61 73 65 20 74 6f 20 71 75 65 72  Database to quer
d9f0: 79 20 2a 2f 0a 20 20 53 68 65 6c 6c 53 74 61 74  y */.  ShellStat
da00: 65 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20  e *pArg,        
da10: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
da20: 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 20   ShellState */. 
da30: 20 69 6e 74 20 62 52 65 73 65 74 20 20 20 20 20   int bReset     
da40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
da50: 54 72 75 65 20 74 6f 20 72 65 73 65 74 20 74 68  True to reset th
da60: 65 20 73 74 61 74 73 20 2a 2f 0a 29 7b 0a 20 20  e stats */.){.  
da70: 69 6e 74 20 69 43 75 72 3b 0a 20 20 69 6e 74 20  int iCur;.  int 
da80: 69 48 69 77 74 72 3b 0a 0a 20 20 69 66 28 20 70  iHiwtr;..  if( p
da90: 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75 74  Arg && pArg->out
daa0: 20 29 7b 0a 20 20 20 20 64 69 73 70 6c 61 79 53   ){.    displayS
dab0: 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4d  tatLine(pArg, "M
dac0: 65 6d 6f 72 79 20 55 73 65 64 3a 22 2c 0a 20 20  emory Used:",.  
dad0: 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20       "%lld (max 
dae0: 25 6c 6c 64 29 20 62 79 74 65 73 22 2c 20 53 51  %lld) bytes", SQ
daf0: 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 45 4d 4f  LITE_STATUS_MEMO
db00: 52 59 5f 55 53 45 44 2c 20 62 52 65 73 65 74 29  RY_USED, bReset)
db10: 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  ;.    displaySta
db20: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d  tLine(pArg, "Num
db30: 62 65 72 20 6f 66 20 4f 75 74 73 74 61 6e 64 69  ber of Outstandi
db40: 6e 67 20 41 6c 6c 6f 63 61 74 69 6f 6e 73 3a 22  ng Allocations:"
db50: 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64 20 28  ,.       "%lld (
db60: 6d 61 78 20 25 6c 6c 64 29 22 2c 20 53 51 4c 49  max %lld)", SQLI
db70: 54 45 5f 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43  TE_STATUS_MALLOC
db80: 5f 43 4f 55 4e 54 2c 20 62 52 65 73 65 74 29 3b  _COUNT, bReset);
db90: 0a 20 20 20 20 69 66 28 20 70 41 72 67 2d 3e 73  .    if( pArg->s
dba0: 68 65 6c 6c 46 6c 67 73 20 26 20 53 48 46 4c 47  hellFlgs & SHFLG
dbb0: 5f 50 61 67 65 63 61 63 68 65 20 29 7b 0a 20 20  _Pagecache ){.  
dbc0: 20 20 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c      displayStatL
dbd0: 69 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d 62 65  ine(pArg, "Numbe
dbe0: 72 20 6f 66 20 50 63 61 63 68 65 20 50 61 67 65  r of Pcache Page
dbf0: 73 20 55 73 65 64 3a 22 2c 0a 20 20 20 20 20 20  s Used:",.      
dc00: 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25 6c     "%lld (max %l
dc10: 6c 64 29 20 70 61 67 65 73 22 2c 20 53 51 4c 49  ld) pages", SQLI
dc20: 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41  TE_STATUS_PAGECA
dc30: 43 48 45 5f 55 53 45 44 2c 20 62 52 65 73 65 74  CHE_USED, bReset
dc40: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 69 73  );.    }.    dis
dc50: 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72  playStatLine(pAr
dc60: 67 2c 20 22 4e 75 6d 62 65 72 20 6f 66 20 50 63  g, "Number of Pc
dc70: 61 63 68 65 20 4f 76 65 72 66 6c 6f 77 20 42 79  ache Overflow By
dc80: 74 65 73 3a 22 2c 0a 20 20 20 20 20 20 20 22 25  tes:",.       "%
dc90: 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29 20 62  lld (max %lld) b
dca0: 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f 53 54  ytes", SQLITE_ST
dcb0: 41 54 55 53 5f 50 41 47 45 43 41 43 48 45 5f 4f  ATUS_PAGECACHE_O
dcc0: 56 45 52 46 4c 4f 57 2c 20 62 52 65 73 65 74 29  VERFLOW, bReset)
dcd0: 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  ;.    displaySta
dce0: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4c 61 72  tLine(pArg, "Lar
dcf0: 67 65 73 74 20 41 6c 6c 6f 63 61 74 69 6f 6e 3a  gest Allocation:
dd00: 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64 20  ",.       "%lld 
dd10: 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f 53  bytes", SQLITE_S
dd20: 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 53 49 5a  TATUS_MALLOC_SIZ
dd30: 45 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  E, bReset);.    
dd40: 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28  displayStatLine(
dd50: 70 41 72 67 2c 20 22 4c 61 72 67 65 73 74 20 50  pArg, "Largest P
dd60: 63 61 63 68 65 20 41 6c 6c 6f 63 61 74 69 6f 6e  cache Allocation
dd70: 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64  :",.       "%lld
dd80: 20 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f   bytes", SQLITE_
dd90: 53 54 41 54 55 53 5f 50 41 47 45 43 41 43 48 45  STATUS_PAGECACHE
dda0: 5f 53 49 5a 45 2c 20 62 52 65 73 65 74 29 3b 0a  _SIZE, bReset);.
ddb0: 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
ddc0: 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 20 20  XSTACKDEPTH.    
ddd0: 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28  displayStatLine(
dde0: 70 41 72 67 2c 20 22 44 65 65 70 65 73 74 20 50  pArg, "Deepest P
ddf0: 61 72 73 65 72 20 53 74 61 63 6b 3a 22 2c 0a 20  arser Stack:",. 
de00: 20 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78        "%lld (max
de10: 20 25 6c 6c 64 29 22 2c 20 53 51 4c 49 54 45 5f   %lld)", SQLITE_
de20: 53 54 41 54 55 53 5f 50 41 52 53 45 52 5f 53 54  STATUS_PARSER_ST
de30: 41 43 4b 2c 20 62 52 65 73 65 74 29 3b 0a 23 65  ACK, bReset);.#e
de40: 6e 64 69 66 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ndif.  }..  if( 
de50: 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75  pArg && pArg->ou
de60: 74 20 26 26 20 64 62 20 29 7b 0a 20 20 20 20 69  t && db ){.    i
de70: 66 28 20 70 41 72 67 2d 3e 73 68 65 6c 6c 46 6c  f( pArg->shellFl
de80: 67 73 20 26 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61  gs & SHFLG_Looka
de90: 73 69 64 65 20 29 7b 0a 20 20 20 20 20 20 69 48  side ){.      iH
dea0: 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31  iwtr = iCur = -1
deb0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
dec0: 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51  db_status(db, SQ
ded0: 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f  LITE_DBSTATUS_LO
dee0: 4f 4b 41 53 49 44 45 5f 55 53 45 44 2c 0a 20 20  OKASIDE_USED,.  
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 20 20 20 20 20 20 26 69 43 75 72 2c 20 26 69 48        &iCur, &iH
df10: 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20  iwtr, bReset);. 
df20: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
df30: 70 41 72 67 2d 3e 6f 75 74 2c 0a 20 20 20 20 20  pArg->out,.     
df40: 20 20 20 20 20 20 20 20 20 22 4c 6f 6f 6b 61 73           "Lookas
df50: 69 64 65 20 53 6c 6f 74 73 20 55 73 65 64 3a 20  ide Slots Used: 
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
df70: 64 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c 0a 20  d (max %d)\n",. 
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 43 75               iCu
df90: 72 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20  r, iHiwtr);.    
dfa0: 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
dfb0: 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44  tus(db, SQLITE_D
dfc0: 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44  BSTATUS_LOOKASID
dfd0: 45 5f 48 49 54 2c 0a 20 20 20 20 20 20 20 20 20  E_HIT,.         
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
dff0: 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62  iCur, &iHiwtr, b
e000: 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20 72 61  Reset);.      ra
e010: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
e020: 75 74 2c 20 22 53 75 63 63 65 73 73 66 75 6c 20  ut, "Successful 
e030: 6c 6f 6f 6b 61 73 69 64 65 20 61 74 74 65 6d 70  lookaside attemp
e040: 74 73 3a 20 20 20 20 20 20 20 25 64 5c 6e 22 2c  ts:       %d\n",
e050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
e060: 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20 73 71  Hiwtr);.      sq
e070: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
e080: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
e090: 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49  TUS_LOOKASIDE_MI
e0a0: 53 53 5f 53 49 5a 45 2c 0a 20 20 20 20 20 20 20  SS_SIZE,.       
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0c0: 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
e0d0: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20   bReset);.      
e0e0: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
e0f0: 3e 6f 75 74 2c 20 22 4c 6f 6f 6b 61 73 69 64 65  >out, "Lookaside
e100: 20 66 61 69 6c 75 72 65 73 20 64 75 65 20 74 6f   failures due to
e110: 20 73 69 7a 65 3a 20 20 20 20 20 20 25 64 5c 6e   size:      %d\n
e120: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
e130: 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20   iHiwtr);.      
e140: 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75  sqlite3_db_statu
e150: 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53  s(db, SQLITE_DBS
e160: 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f  TATUS_LOOKASIDE_
e170: 4d 49 53 53 5f 46 55 4c 4c 2c 0a 20 20 20 20 20  MISS_FULL,.     
e180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e190: 20 20 20 26 69 43 75 72 2c 20 26 69 48 69 77 74     &iCur, &iHiwt
e1a0: 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  r, bReset);.    
e1b0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
e1c0: 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 6b 61 73 69  g->out, "Lookasi
e1d0: 64 65 20 66 61 69 6c 75 72 65 73 20 64 75 65 20  de failures due 
e1e0: 74 6f 20 4f 4f 4d 3a 20 20 20 20 20 20 20 25 64  to OOM:       %d
e1f0: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
e200: 20 20 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20     iHiwtr);.    
e210: 7d 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69  }.    iHiwtr = i
e220: 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71  Cur = -1;.    sq
e230: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
e240: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
e250: 54 55 53 5f 43 41 43 48 45 5f 55 53 45 44 2c 20  TUS_CACHE_USED, 
e260: 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20  &iCur, &iHiwtr, 
e270: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77  bReset);.    raw
e280: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
e290: 74 2c 20 22 50 61 67 65 72 20 48 65 61 70 20 55  t, "Pager Heap U
e2a0: 73 61 67 65 3a 20 20 20 20 20 20 20 20 20 20 20  sage:           
e2b0: 20 20 20 20 20 20 20 20 20 25 64 20 62 79 74 65           %d byte
e2c0: 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
e2d0: 20 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69    iCur);.    iHi
e2e0: 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b  wtr = iCur = -1;
e2f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
e300: 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
e310: 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45  E_DBSTATUS_CACHE
e320: 5f 48 49 54 2c 20 26 69 43 75 72 2c 20 26 69 48  _HIT, &iCur, &iH
e330: 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72 61  iwtr, 1);.    ra
e340: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
e350: 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65 20  ut, "Page cache 
e360: 68 69 74 73 3a 20 20 20 20 20 20 20 20 20 20 20  hits:           
e370: 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c            %d\n",
e380: 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77   iCur);.    iHiw
e390: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
e3a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e3b0: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e3c0: 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
e3d0: 4d 49 53 53 2c 20 26 69 43 75 72 2c 20 26 69 48  MISS, &iCur, &iH
e3e0: 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72 61  iwtr, 1);.    ra
e3f0: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
e400: 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65 20  ut, "Page cache 
e410: 6d 69 73 73 65 73 3a 20 20 20 20 20 20 20 20 20  misses:         
e420: 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c            %d\n",
e430: 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77   iCur);.    iHiw
e440: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
e450: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e460: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e470: 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
e480: 57 52 49 54 45 2c 20 26 69 43 75 72 2c 20 26 69  WRITE, &iCur, &i
e490: 48 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72  Hiwtr, 1);.    r
e4a0: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
e4b0: 6f 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65  out, "Page cache
e4c0: 20 77 72 69 74 65 73 3a 20 20 20 20 20 20 20 20   writes:        
e4d0: 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22             %d\n"
e4e0: 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69  , iCur);.    iHi
e4f0: 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b  wtr = iCur = -1;
e500: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
e510: 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
e520: 45 5f 44 42 53 54 41 54 55 53 5f 53 43 48 45 4d  E_DBSTATUS_SCHEM
e530: 41 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26  A_USED, &iCur, &
e540: 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b  iHiwtr, bReset);
e550: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e560: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 53 63 68 65  pArg->out, "Sche
e570: 6d 61 20 48 65 61 70 20 55 73 61 67 65 3a 20 20  ma Heap Usage:  
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e590: 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20   %d bytes\n",.  
e5a0: 20 20 20 20 20 20 20 20 20 20 69 43 75 72 29 3b            iCur);
e5b0: 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43  .    iHiwtr = iC
e5c0: 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c  ur = -1;.    sql
e5d0: 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64  ite3_db_status(d
e5e0: 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54  b, SQLITE_DBSTAT
e5f0: 55 53 5f 53 54 4d 54 5f 55 53 45 44 2c 20 26 69  US_STMT_USED, &i
e600: 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52  Cur, &iHiwtr, bR
e610: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
e620: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e630: 20 22 53 74 61 74 65 6d 65 6e 74 20 48 65 61 70   "Statement Heap
e640: 2f 4c 6f 6f 6b 61 73 69 64 65 20 55 73 61 67 65  /Lookaside Usage
e650: 3a 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c  :      %d bytes\
e660: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
e670: 69 43 75 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  iCur);.  }..  if
e680: 28 20 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e  ( pArg && pArg->
e690: 6f 75 74 20 26 26 20 64 62 20 26 26 20 70 41 72  out && db && pAr
e6a0: 67 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  g->pStmt ){.    
e6b0: 69 43 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73  iCur = sqlite3_s
e6c0: 74 6d 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d  tmt_status(pArg-
e6d0: 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53  >pStmt, SQLITE_S
e6e0: 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43  TMTSTATUS_FULLSC
e6f0: 41 4e 5f 53 54 45 50 2c 0a 20 20 20 20 20 20 20  AN_STEP,.       
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e710: 20 20 20 20 20 20 20 20 62 52 65 73 65 74 29 3b          bReset);
e720: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e730: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 46 75 6c 6c  pArg->out, "Full
e740: 73 63 61 6e 20 53 74 65 70 73 3a 20 20 20 20 20  scan Steps:     
e750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e760: 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20   %d\n", iCur);. 
e770: 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69 74 65     iCur = sqlite
e780: 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 70 41  3_stmt_status(pA
e790: 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54  rg->pStmt, SQLIT
e7a0: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
e7b0: 54 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  T, bReset);.    
e7c0: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
e7d0: 3e 6f 75 74 2c 20 22 53 6f 72 74 20 4f 70 65 72  >out, "Sort Oper
e7e0: 61 74 69 6f 6e 73 3a 20 20 20 20 20 20 20 20 20  ations:         
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e              %d\n
e800: 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 43  ", iCur);.    iC
e810: 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d  ur = sqlite3_stm
e820: 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70  t_status(pArg->p
e830: 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d  Stmt, SQLITE_STM
e840: 54 53 54 41 54 55 53 5f 41 55 54 4f 49 4e 44 45  TSTATUS_AUTOINDE
e850: 58 2c 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72  X,bReset);.    r
e860: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
e870: 6f 75 74 2c 20 22 41 75 74 6f 69 6e 64 65 78 20  out, "Autoindex 
e880: 49 6e 73 65 72 74 73 3a 20 20 20 20 20 20 20 20  Inserts:        
e890: 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22             %d\n"
e8a0: 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 43 75  , iCur);.    iCu
e8b0: 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  r = sqlite3_stmt
e8c0: 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70 53  _status(pArg->pS
e8d0: 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54  tmt, SQLITE_STMT
e8e0: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 2c 20  STATUS_VM_STEP, 
e8f0: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77  bReset);.    raw
e900: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
e910: 74 2c 20 22 56 69 72 74 75 61 6c 20 4d 61 63 68  t, "Virtual Mach
e920: 69 6e 65 20 53 74 65 70 73 3a 20 20 20 20 20 20  ine Steps:      
e930: 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20           %d\n", 
e940: 69 43 75 72 29 3b 0a 20 20 7d 0a 0a 23 69 66 64  iCur);.  }..#ifd
e950: 65 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 20 20 64  ef __linux__.  d
e960: 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74 61  isplayLinuxIoSta
e970: 74 73 28 70 41 72 67 2d 3e 6f 75 74 29 3b 0a 23  ts(pArg->out);.#
e980: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 44 6f 20 6e  endif..  /* Do n
e990: 6f 74 20 72 65 6d 6f 76 65 20 74 68 69 73 20 6d  ot remove this m
e9a0: 61 63 68 69 6e 65 20 72 65 61 64 61 62 6c 65 20  achine readable 
e9b0: 63 6f 6d 6d 65 6e 74 3a 20 65 78 74 72 61 2d 73  comment: extra-s
e9c0: 74 61 74 73 2d 6f 75 74 70 75 74 2d 68 65 72 65  tats-output-here
e9d0: 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20 30 3b   */..  return 0;
e9e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61  .}../*.** Displa
e9f0: 79 20 73 63 61 6e 20 73 74 61 74 73 2e 0a 2a 2f  y scan stats..*/
ea00: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64 69 73  .static void dis
ea10: 70 6c 61 79 5f 73 63 61 6e 73 74 61 74 73 28 0a  play_scanstats(.
ea20: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20    sqlite3 *db,  
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea40: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 6f    /* Database to
ea50: 20 71 75 65 72 79 20 2a 2f 0a 20 20 53 68 65 6c   query */.  Shel
ea60: 6c 53 74 61 74 65 20 2a 70 41 72 67 20 20 20 20  lState *pArg    
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
ea80: 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c 6c 53  ointer to ShellS
ea90: 74 61 74 65 20 2a 2f 0a 29 7b 0a 23 69 66 6e 64  tate */.){.#ifnd
eaa0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
eab0: 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
eac0: 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  .  UNUSED_PARAME
ead0: 54 45 52 28 64 62 29 3b 0a 20 20 55 4e 55 53 45  TER(db);.  UNUSE
eae0: 44 5f 50 41 52 41 4d 45 54 45 52 28 70 41 72 67  D_PARAMETER(pArg
eaf0: 29 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 69  );.#else.  int i
eb00: 2c 20 6b 2c 20 6e 2c 20 6d 78 3b 0a 20 20 72 61  , k, n, mx;.  ra
eb10: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
eb20: 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 63  ut, "-------- sc
eb30: 61 6e 73 74 61 74 73 20 2d 2d 2d 2d 2d 2d 2d 2d  anstats --------
eb40: 5c 6e 22 29 3b 0a 20 20 6d 78 20 3d 20 30 3b 0a  \n");.  mx = 0;.
eb50: 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 3d 6d 78    for(k=0; k<=mx
eb60: 3b 20 6b 2b 2b 29 7b 0a 20 20 20 20 64 6f 75 62  ; k++){.    doub
eb70: 6c 65 20 72 45 73 74 4c 6f 6f 70 20 3d 20 31 2e  le rEstLoop = 1.
eb80: 30 3b 0a 20 20 20 20 66 6f 72 28 69 3d 6e 3d 30  0;.    for(i=n=0
eb90: 3b 20 31 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ; 1; i++){.     
eba0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
ebb0: 20 3d 20 70 41 72 67 2d 3e 70 53 74 6d 74 3b 0a   = pArg->pStmt;.
ebc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
ebd0: 74 36 34 20 6e 4c 6f 6f 70 2c 20 6e 56 69 73 69  t64 nLoop, nVisi
ebe0: 74 3b 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20  t;.      double 
ebf0: 72 45 73 74 3b 0a 20 20 20 20 20 20 69 6e 74 20  rEst;.      int 
ec00: 69 53 69 64 3b 0a 20 20 20 20 20 20 63 6f 6e 73  iSid;.      cons
ec10: 74 20 63 68 61 72 20 2a 7a 45 78 70 6c 61 69 6e  t char *zExplain
ec20: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
ec30: 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61  te3_stmt_scansta
ec40: 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45  tus(p, i, SQLITE
ec50: 5f 53 43 41 4e 53 54 41 54 5f 4e 4c 4f 4f 50 2c  _SCANSTAT_NLOOP,
ec60: 20 28 76 6f 69 64 2a 29 26 6e 4c 6f 6f 70 29 20   (void*)&nLoop) 
ec70: 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  ){.        break
ec80: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
ec90: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61  sqlite3_stmt_sca
eca0: 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51  nstatus(p, i, SQ
ecb0: 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 53 45  LITE_SCANSTAT_SE
ecc0: 4c 45 43 54 49 44 2c 20 28 76 6f 69 64 2a 29 26  LECTID, (void*)&
ecd0: 69 53 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28  iSid);.      if(
ece0: 20 69 53 69 64 3e 6d 78 20 29 20 6d 78 20 3d 20   iSid>mx ) mx = 
ecf0: 69 53 69 64 3b 0a 20 20 20 20 20 20 69 66 28 20  iSid;.      if( 
ed00: 69 53 69 64 21 3d 6b 20 29 20 63 6f 6e 74 69 6e  iSid!=k ) contin
ed10: 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 3d  ue;.      if( n=
ed20: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 45  =0 ){.        rE
ed30: 73 74 4c 6f 6f 70 20 3d 20 28 64 6f 75 62 6c 65  stLoop = (double
ed40: 29 6e 4c 6f 6f 70 3b 0a 20 20 20 20 20 20 20 20  )nLoop;.        
ed50: 69 66 28 20 6b 3e 30 20 29 20 72 61 77 5f 70 72  if( k>0 ) raw_pr
ed60: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
ed70: 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 75 62 71 75 65  "-------- subque
ed80: 72 79 20 25 64 20 2d 2d 2d 2d 2d 2d 2d 5c 6e 22  ry %d -------\n"
ed90: 2c 20 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , k);.      }.  
eda0: 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 73      n++;.      s
edb0: 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e  qlite3_stmt_scan
edc0: 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51 4c  status(p, i, SQL
edd0: 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 4e 56 49  ITE_SCANSTAT_NVI
ede0: 53 49 54 2c 20 28 76 6f 69 64 2a 29 26 6e 56 69  SIT, (void*)&nVi
edf0: 73 69 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  sit);.      sqli
ee00: 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61  te3_stmt_scansta
ee10: 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45  tus(p, i, SQLITE
ee20: 5f 53 43 41 4e 53 54 41 54 5f 45 53 54 2c 20 28  _SCANSTAT_EST, (
ee30: 76 6f 69 64 2a 29 26 72 45 73 74 29 3b 0a 20 20  void*)&rEst);.  
ee40: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
ee50: 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69  _scanstatus(p, i
ee60: 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41  , SQLITE_SCANSTA
ee70: 54 5f 45 58 50 4c 41 49 4e 2c 20 28 76 6f 69 64  T_EXPLAIN, (void
ee80: 2a 29 26 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20  *)&zExplain);.  
ee90: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
eea0: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 70  pArg->out, "Loop
eeb0: 20 25 32 64 3a 20 25 73 5c 6e 22 2c 20 6e 2c 20   %2d: %s\n", n, 
eec0: 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20  zExplain);.     
eed0: 20 72 45 73 74 4c 6f 6f 70 20 2a 3d 20 72 45 73   rEstLoop *= rEs
eee0: 74 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  t;.      raw_pri
eef0: 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 0a 20  ntf(pArg->out,. 
ef00: 20 20 20 20 20 20 20 20 20 22 20 20 20 20 20 20           "      
ef10: 20 20 20 6e 4c 6f 6f 70 3d 25 2d 38 6c 6c 64 20     nLoop=%-8lld 
ef20: 6e 52 6f 77 3d 25 2d 38 6c 6c 64 20 65 73 74 52  nRow=%-8lld estR
ef30: 6f 77 3d 25 2d 38 6c 6c 64 20 65 73 74 52 6f 77  ow=%-8lld estRow
ef40: 2f 4c 6f 6f 70 3d 25 2d 38 67 5c 6e 22 2c 0a 20  /Loop=%-8g\n",. 
ef50: 20 20 20 20 20 20 20 20 20 6e 4c 6f 6f 70 2c 20           nLoop, 
ef60: 6e 56 69 73 69 74 2c 20 28 73 71 6c 69 74 65 33  nVisit, (sqlite3
ef70: 5f 69 6e 74 36 34 29 28 72 45 73 74 4c 6f 6f 70  _int64)(rEstLoop
ef80: 2b 30 2e 35 29 2c 20 72 45 73 74 0a 20 20 20 20  +0.5), rEst.    
ef90: 20 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20    );.    }.  }. 
efa0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
efb0: 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d  ->out, "--------
efc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
efd0: 2d 2d 2d 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a  ---\n");.#endif.
efe0: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  }../*.** Paramet
eff0: 65 72 20 61 7a 41 72 72 61 79 20 70 6f 69 6e 74  er azArray point
f000: 73 20 74 6f 20 61 20 7a 65 72 6f 2d 74 65 72 6d  s to a zero-term
f010: 69 6e 61 74 65 64 20 61 72 72 61 79 20 6f 66 20  inated array of 
f020: 73 74 72 69 6e 67 73 2e 20 7a 53 74 72 0a 2a 2a  strings. zStr.**
f030: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 73 69 6e   points to a sin
f040: 67 6c 65 20 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  gle nul-terminat
f050: 65 64 20 73 74 72 69 6e 67 2e 20 52 65 74 75 72  ed string. Retur
f060: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 7a 53  n non-zero if zS
f070: 74 72 0a 2a 2a 20 69 73 20 65 71 75 61 6c 2c 20  tr.** is equal, 
f080: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 73 74 72  according to str
f090: 63 6d 70 28 29 2c 20 74 6f 20 61 6e 79 20 6f 66  cmp(), to any of
f0a0: 20 74 68 65 20 73 74 72 69 6e 67 73 20 69 6e 20   the strings in 
f0b0: 74 68 65 20 61 72 72 61 79 2e 0a 2a 2a 20 4f 74  the array..** Ot
f0c0: 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20  herwise, return 
f0d0: 7a 65 72 6f 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  zero..*/.static 
f0e0: 69 6e 74 20 73 74 72 5f 69 6e 5f 61 72 72 61 79  int str_in_array
f0f0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74  (const char *zSt
f100: 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  r, const char **
f110: 61 7a 41 72 72 61 79 29 7b 0a 20 20 69 6e 74 20  azArray){.  int 
f120: 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 61 7a  i;.  for(i=0; az
f130: 41 72 72 61 79 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  Array[i]; i++){.
f140: 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d      if( 0==strcm
f150: 70 28 7a 53 74 72 2c 20 61 7a 41 72 72 61 79 5b  p(zStr, azArray[
f160: 69 5d 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  i]) ) return 1;.
f170: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
f180: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70  }../*.** If comp
f190: 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 20 70  iled statement p
f1a0: 53 71 6c 20 61 70 70 65 61 72 73 20 74 6f 20 62  Sql appears to b
f1b0: 65 20 61 6e 20 45 58 50 4c 41 49 4e 20 73 74 61  e an EXPLAIN sta
f1c0: 74 65 6d 65 6e 74 2c 20 61 6c 6c 6f 63 61 74 65  tement, allocate
f1d0: 0a 2a 2a 20 61 6e 64 20 70 6f 70 75 6c 61 74 65  .** and populate
f1e0: 20 74 68 65 20 53 68 65 6c 6c 53 74 61 74 65 2e   the ShellState.
f1f0: 61 69 49 6e 64 65 6e 74 5b 5d 20 61 72 72 61 79  aiIndent[] array
f200: 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
f210: 20 6f 66 0a 2a 2a 20 73 70 61 63 65 73 20 65 61   of.** spaces ea
f220: 63 68 20 6f 70 63 6f 64 65 20 73 68 6f 75 6c 64  ch opcode should
f230: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 65 66   be indented bef
f240: 6f 72 65 20 69 74 20 69 73 20 6f 75 74 70 75 74  ore it is output
f250: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 64 65  ..**.** The inde
f260: 6e 74 69 6e 67 20 72 75 6c 65 73 20 61 72 65 3a  nting rules are:
f270: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 46 6f 72  .**.**     * For
f280: 20 65 61 63 68 20 22 4e 65 78 74 22 2c 20 22 50   each "Next", "P
f290: 72 65 76 22 2c 20 22 56 4e 65 78 74 22 20 6f 72  rev", "VNext" or
f2a0: 20 22 56 50 72 65 76 22 20 69 6e 73 74 72 75 63   "VPrev" instruc
f2b0: 74 69 6f 6e 2c 20 69 6e 64 65 6e 74 0a 2a 2a 20  tion, indent.** 
f2c0: 20 20 20 20 20 20 61 6c 6c 20 6f 70 63 6f 64 65        all opcode
f2d0: 73 20 74 68 61 74 20 6f 63 63 75 72 20 62 65 74  s that occur bet
f2e0: 77 65 65 6e 20 74 68 65 20 70 32 20 6a 75 6d 70  ween the p2 jump
f2f0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 61 6e 64   destination and
f300: 20 74 68 65 20 6f 70 63 6f 64 65 0a 2a 2a 20 20   the opcode.**  
f310: 20 20 20 20 20 69 74 73 65 6c 66 20 62 79 20 32       itself by 2
f320: 20 73 70 61 63 65 73 2e 0a 2a 2a 0a 2a 2a 20 20   spaces..**.**  
f330: 20 20 20 2a 20 46 6f 72 20 65 61 63 68 20 22 47     * For each "G
f340: 6f 74 6f 22 2c 20 69 66 20 74 68 65 20 6a 75 6d  oto", if the jum
f350: 70 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 73  p destination is
f360: 20 65 61 72 6c 69 65 72 20 69 6e 20 74 68 65 20   earlier in the 
f370: 70 72 6f 67 72 61 6d 0a 2a 2a 20 20 20 20 20 20  program.**      
f380: 20 61 6e 64 20 65 6e 64 73 20 6f 6e 20 6f 6e 65   and ends on one
f390: 20 6f 66 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20   of:.**         
f3a0: 20 59 69 65 6c 64 20 20 53 65 65 6b 47 74 20 20   Yield  SeekGt  
f3b0: 53 65 65 6b 4c 74 20 20 52 6f 77 53 65 74 52 65  SeekLt  RowSetRe
f3c0: 61 64 20 20 52 65 77 69 6e 64 0a 2a 2a 20 20 20  ad  Rewind.**   
f3d0: 20 20 20 20 6f 72 20 69 66 20 74 68 65 20 50 31      or if the P1
f3e0: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6f 6e   parameter is on
f3f0: 65 20 69 6e 73 74 65 61 64 20 6f 66 20 7a 65 72  e instead of zer
f400: 6f 2c 0a 2a 2a 20 20 20 20 20 20 20 74 68 65 6e  o,.**       then
f410: 20 69 6e 64 65 6e 74 20 61 6c 6c 20 6f 70 63 6f   indent all opco
f420: 64 65 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  des between the 
f430: 65 61 72 6c 69 65 72 20 69 6e 73 74 72 75 63 74  earlier instruct
f440: 69 6f 6e 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64  ion.**       and
f450: 20 22 47 6f 74 6f 22 20 62 79 20 32 20 73 70 61   "Goto" by 2 spa
f460: 63 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ces..*/.static v
f470: 6f 69 64 20 65 78 70 6c 61 69 6e 5f 64 61 74 61  oid explain_data
f480: 5f 70 72 65 70 61 72 65 28 53 68 65 6c 6c 53 74  _prepare(ShellSt
f490: 61 74 65 20 2a 70 2c 20 73 71 6c 69 74 65 33 5f  ate *p, sqlite3_
f4a0: 73 74 6d 74 20 2a 70 53 71 6c 29 7b 0a 20 20 63  stmt *pSql){.  c
f4b0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b  onst char *zSql;
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f4d0: 2a 20 54 68 65 20 74 65 78 74 20 6f 66 20 74 68  * The text of th
f4e0: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
f4f0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
f500: 2a 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *z;             
f510: 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
f520: 63 68 65 63 6b 20 69 66 20 74 68 69 73 20 69 73  check if this is
f530: 20 61 6e 20 45 58 50 4c 41 49 4e 20 2a 2f 0a 20   an EXPLAIN */. 
f540: 20 69 6e 74 20 2a 61 62 59 69 65 6c 64 20 3d 20   int *abYield = 
f550: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
f560: 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 70 20 69   /* True if op i
f570: 73 20 61 6e 20 4f 50 5f 59 69 65 6c 64 20 2a 2f  s an OP_Yield */
f580: 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20  .  int nAlloc = 
f590: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
f5a0: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
f5b0: 73 69 7a 65 20 6f 66 20 70 2d 3e 61 69 49 6e 64  size of p->aiInd
f5c0: 65 6e 74 5b 5d 2c 20 61 62 59 69 65 6c 64 20 2a  ent[], abYield *
f5d0: 2f 0a 20 20 69 6e 74 20 69 4f 70 3b 20 20 20 20  /.  int iOp;    
f5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5f0: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
f600: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 2d 3e  operation in p->
f610: 61 69 49 6e 64 65 6e 74 5b 5d 20 2a 2f 0a 0a 20  aiIndent[] */.. 
f620: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 4e   const char *azN
f630: 65 78 74 5b 5d 20 3d 20 7b 20 22 4e 65 78 74 22  ext[] = { "Next"
f640: 2c 20 22 50 72 65 76 22 2c 20 22 56 50 72 65 76  , "Prev", "VPrev
f650: 22 2c 20 22 56 4e 65 78 74 22 2c 20 22 53 6f 72  ", "VNext", "Sor
f660: 74 65 72 4e 65 78 74 22 2c 0a 20 20 20 20 20 20  terNext",.      
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f680: 20 20 20 20 20 22 4e 65 78 74 49 66 4f 70 65 6e       "NextIfOpen
f690: 22 2c 20 22 50 72 65 76 49 66 4f 70 65 6e 22 2c  ", "PrevIfOpen",
f6a0: 20 30 20 7d 3b 0a 20 20 63 6f 6e 73 74 20 63 68   0 };.  const ch
f6b0: 61 72 20 2a 61 7a 59 69 65 6c 64 5b 5d 20 3d 20  ar *azYield[] = 
f6c0: 7b 20 22 59 69 65 6c 64 22 2c 20 22 53 65 65 6b  { "Yield", "Seek
f6d0: 4c 54 22 2c 20 22 53 65 65 6b 47 54 22 2c 20 22  LT", "SeekGT", "
f6e0: 52 6f 77 53 65 74 52 65 61 64 22 2c 0a 20 20 20  RowSetRead",.   
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f700: 20 20 20 20 20 20 20 20 20 22 52 65 77 69 6e 64           "Rewind
f710: 22 2c 20 30 20 7d 3b 0a 20 20 63 6f 6e 73 74 20  ", 0 };.  const 
f720: 63 68 61 72 20 2a 61 7a 47 6f 74 6f 5b 5d 20 3d  char *azGoto[] =
f730: 20 7b 20 22 47 6f 74 6f 22 2c 20 30 20 7d 3b 0a   { "Goto", 0 };.
f740: 0a 20 20 2f 2a 20 54 72 79 20 74 6f 20 66 69 67  .  /* Try to fig
f750: 75 72 65 20 6f 75 74 20 69 66 20 74 68 69 73 20  ure out if this 
f760: 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 45 58 50  is really an EXP
f770: 4c 41 49 4e 20 73 74 61 74 65 6d 65 6e 74 2e 20  LAIN statement. 
f780: 49 66 20 74 68 69 73 0a 20 20 2a 2a 20 63 61 6e  If this.  ** can
f790: 6e 6f 74 20 62 65 20 76 65 72 69 66 69 65 64 2c  not be verified,
f7a0: 20 72 65 74 75 72 6e 20 65 61 72 6c 79 2e 20 20   return early.  
f7b0: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
f7c0: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53  _column_count(pS
f7d0: 71 6c 29 21 3d 38 20 29 7b 0a 20 20 20 20 70 2d  ql)!=8 ){.    p-
f7e0: 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65  >cMode = p->mode
f7f0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  ;.    return;.  
f800: 7d 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74  }.  zSql = sqlit
f810: 65 33 5f 73 71 6c 28 70 53 71 6c 29 3b 0a 20 20  e3_sql(pSql);.  
f820: 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 20 72 65  if( zSql==0 ) re
f830: 74 75 72 6e 3b 0a 20 20 66 6f 72 28 7a 3d 7a 53  turn;.  for(z=zS
f840: 71 6c 3b 20 2a 7a 3d 3d 27 20 27 20 7c 7c 20 2a  ql; *z==' ' || *
f850: 7a 3d 3d 27 5c 74 27 20 7c 7c 20 2a 7a 3d 3d 27  z=='\t' || *z=='
f860: 5c 6e 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 66 27 20  \n' || *z=='\f' 
f870: 7c 7c 20 2a 7a 3d 3d 27 5c 72 27 3b 20 7a 2b 2b  || *z=='\r'; z++
f880: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
f890: 5f 73 74 72 6e 69 63 6d 70 28 7a 2c 20 22 65 78  _strnicmp(z, "ex
f8a0: 70 6c 61 69 6e 22 2c 20 37 29 20 29 7b 0a 20 20  plain", 7) ){.  
f8b0: 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e    p->cMode = p->
f8c0: 6d 6f 64 65 3b 0a 20 20 20 20 72 65 74 75 72 6e  mode;.    return
f8d0: 3b 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 69 4f 70  ;.  }..  for(iOp
f8e0: 3d 30 3b 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d  =0; SQLITE_ROW==
f8f0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 71  sqlite3_step(pSq
f900: 6c 29 3b 20 69 4f 70 2b 2b 29 7b 0a 20 20 20 20  l); iOp++){.    
f910: 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 69  int i;.    int i
f920: 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 5f 63  Addr = sqlite3_c
f930: 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20  olumn_int(pSql, 
f940: 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  0);.    const ch
f950: 61 72 20 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73 74  ar *zOp = (const
f960: 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
f970: 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c  olumn_text(pSql,
f980: 20 31 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74   1);..    /* Set
f990: 20 70 32 20 74 6f 20 74 68 65 20 50 32 20 66 69   p2 to the P2 fi
f9a0: 65 6c 64 20 6f 66 20 74 68 65 20 63 75 72 72 65  eld of the curre
f9b0: 6e 74 20 6f 70 63 6f 64 65 2e 20 54 68 65 6e 2c  nt opcode. Then,
f9c0: 20 61 73 73 75 6d 69 6e 67 20 74 68 61 74 0a 20   assuming that. 
f9d0: 20 20 20 2a 2a 20 70 32 20 69 73 20 61 6e 20 69     ** p2 is an i
f9e0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 64 64 72 65  nstruction addre
f9f0: 73 73 2c 20 73 65 74 20 76 61 72 69 61 62 6c 65  ss, set variable
fa00: 20 70 32 6f 70 20 74 6f 20 74 68 65 20 69 6e 64   p2op to the ind
fa10: 65 78 20 6f 66 20 74 68 61 74 0a 20 20 20 20 2a  ex of that.    *
fa20: 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  * instruction in
fa30: 20 74 68 65 20 61 69 49 6e 64 65 6e 74 5b 5d 20   the aiIndent[] 
fa40: 61 72 72 61 79 2e 20 70 32 20 61 6e 64 20 70 32  array. p2 and p2
fa50: 6f 70 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  op may be differ
fa60: 65 6e 74 20 69 66 0a 20 20 20 20 2a 2a 20 74 68  ent if.    ** th
fa70: 65 20 63 75 72 72 65 6e 74 20 69 6e 73 74 72 75  e current instru
fa80: 63 74 69 6f 6e 20 69 73 20 70 61 72 74 20 6f 66  ction is part of
fa90: 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 67   a sub-program g
faa0: 65 6e 65 72 61 74 65 64 20 62 79 20 61 6e 0a 20  enerated by an. 
fab0: 20 20 20 2a 2a 20 53 51 4c 20 74 72 69 67 67 65     ** SQL trigge
fac0: 72 20 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79  r or foreign key
fad0: 2e 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 70 32  .  */.    int p2
fae0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
faf0: 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 33 29 3b 0a  n_int(pSql, 3);.
fb00: 20 20 20 20 69 6e 74 20 70 32 6f 70 20 3d 20 28      int p2op = (
fb10: 70 32 20 2b 20 28 69 4f 70 2d 69 41 64 64 72 29  p2 + (iOp-iAddr)
fb20: 29 3b 0a 0a 20 20 20 20 2f 2a 20 47 72 6f 77 20  );..    /* Grow 
fb30: 74 68 65 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20  the p->aiIndent 
fb40: 61 72 72 61 79 20 61 73 20 72 65 71 75 69 72 65  array as require
fb50: 64 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 4f 70  d */.    if( iOp
fb60: 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  >=nAlloc ){.    
fb70: 20 20 69 66 28 20 69 4f 70 3d 3d 30 20 29 7b 0a    if( iOp==0 ){.
fb80: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 66 75          /* Do fu
fb90: 72 74 68 65 72 20 76 65 72 66 69 63 61 74 69 6f  rther verficatio
fba0: 6e 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  n that this is e
fbb0: 78 70 6c 61 69 6e 20 6f 75 74 70 75 74 2e 20 20  xplain output.  
fbc0: 41 62 6f 72 74 20 69 66 0a 20 20 20 20 20 20 20  Abort if.       
fbd0: 20 2a 2a 20 69 74 20 69 73 20 6e 6f 74 20 2a 2f   ** it is not */
fbe0: 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20  .        static 
fbf0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 65 78 70 6c  const char *expl
fc00: 61 69 6e 43 6f 6c 73 5b 5d 20 3d 20 7b 0a 20 20  ainCols[] = {.  
fc10: 20 20 20 20 20 20 20 20 20 22 61 64 64 72 22 2c           "addr",
fc20: 20 22 6f 70 63 6f 64 65 22 2c 20 22 70 31 22 2c   "opcode", "p1",
fc30: 20 22 70 32 22 2c 20 22 70 33 22 2c 20 22 70 34   "p2", "p3", "p4
fc40: 22 2c 20 22 70 35 22 2c 20 22 63 6f 6d 6d 65 6e  ", "p5", "commen
fc50: 74 22 20 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e  t" };.        in
fc60: 74 20 6a 6a 3b 0a 20 20 20 20 20 20 20 20 66 6f  t jj;.        fo
fc70: 72 28 6a 6a 3d 30 3b 20 6a 6a 3c 41 72 72 61 79  r(jj=0; jj<Array
fc80: 53 69 7a 65 28 65 78 70 6c 61 69 6e 43 6f 6c 73  Size(explainCols
fc90: 29 3b 20 6a 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ); jj++){.      
fca0: 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 73      if( strcmp(s
fcb0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
fcc0: 6d 65 28 70 53 71 6c 2c 6a 6a 29 2c 65 78 70 6c  me(pSql,jj),expl
fcd0: 61 69 6e 43 6f 6c 73 5b 6a 6a 5d 29 21 3d 30 20  ainCols[jj])!=0 
fce0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
fcf0: 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64  ->cMode = p->mod
fd00: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  e;.            s
fd10: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 53 71  qlite3_reset(pSq
fd20: 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  l);.            
fd30: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
fd40: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
fd50: 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 41 6c 6c      }.      nAll
fd60: 6f 63 20 2b 3d 20 31 30 30 3b 0a 20 20 20 20 20  oc += 100;.     
fd70: 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20 3d 20 28   p->aiIndent = (
fd80: 69 6e 74 2a 29 73 71 6c 69 74 65 33 5f 72 65 61  int*)sqlite3_rea
fd90: 6c 6c 6f 63 36 34 28 70 2d 3e 61 69 49 6e 64 65  lloc64(p->aiInde
fda0: 6e 74 2c 20 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f  nt, nAlloc*sizeo
fdb0: 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20 20 61  f(int));.      a
fdc0: 62 59 69 65 6c 64 20 3d 20 28 69 6e 74 2a 29 73  bYield = (int*)s
fdd0: 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 36 34  qlite3_realloc64
fde0: 28 61 62 59 69 65 6c 64 2c 20 6e 41 6c 6c 6f 63  (abYield, nAlloc
fdf0: 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 20  *sizeof(int));. 
fe00: 20 20 20 7d 0a 20 20 20 20 61 62 59 69 65 6c 64     }.    abYield
fe10: 5b 69 4f 70 5d 20 3d 20 73 74 72 5f 69 6e 5f 61  [iOp] = str_in_a
fe20: 72 72 61 79 28 7a 4f 70 2c 20 61 7a 59 69 65 6c  rray(zOp, azYiel
fe30: 64 29 3b 0a 20 20 20 20 70 2d 3e 61 69 49 6e 64  d);.    p->aiInd
fe40: 65 6e 74 5b 69 4f 70 5d 20 3d 20 30 3b 0a 20 20  ent[iOp] = 0;.  
fe50: 20 20 70 2d 3e 6e 49 6e 64 65 6e 74 20 3d 20 69    p->nIndent = i
fe60: 4f 70 2b 31 3b 0a 0a 20 20 20 20 69 66 28 20 73  Op+1;..    if( s
fe70: 74 72 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c  tr_in_array(zOp,
fe80: 20 61 7a 4e 65 78 74 29 20 29 7b 0a 20 20 20 20   azNext) ){.    
fe90: 20 20 66 6f 72 28 69 3d 70 32 6f 70 3b 20 69 3c    for(i=p2op; i<
fea0: 69 4f 70 3b 20 69 2b 2b 29 20 70 2d 3e 61 69 49  iOp; i++) p->aiI
feb0: 6e 64 65 6e 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20  ndent[i] += 2;. 
fec0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72     }.    if( str
fed0: 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c 20 61  _in_array(zOp, a
fee0: 7a 47 6f 74 6f 29 20 26 26 20 70 32 6f 70 3c 70  zGoto) && p2op<p
fef0: 2d 3e 6e 49 6e 64 65 6e 74 0a 20 20 20 20 20 26  ->nIndent.     &
ff00: 26 20 28 61 62 59 69 65 6c 64 5b 70 32 6f 70 5d  & (abYield[p2op]
ff10: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   || sqlite3_colu
ff20: 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 32 29 29  mn_int(pSql, 2))
ff30: 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 66 6f  .    ){.      fo
ff40: 72 28 69 3d 70 32 6f 70 3b 20 69 3c 69 4f 70 3b  r(i=p2op; i<iOp;
ff50: 20 69 2b 2b 29 20 70 2d 3e 61 69 49 6e 64 65 6e   i++) p->aiInden
ff60: 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20 20 20 20 7d  t[i] += 2;.    }
ff70: 0a 20 20 7d 0a 0a 20 20 70 2d 3e 69 49 6e 64 65  .  }..  p->iInde
ff80: 6e 74 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  nt = 0;.  sqlite
ff90: 33 5f 66 72 65 65 28 61 62 59 69 65 6c 64 29 3b  3_free(abYield);
ffa0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
ffb0: 28 70 53 71 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  (pSql);.}../*.**
ffc0: 20 46 72 65 65 20 74 68 65 20 61 72 72 61 79 20   Free the array 
ffd0: 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 65 78 70  allocated by exp
ffe0: 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72  lain_data_prepar
fff0: 65 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  e()..*/.static v
10000 6f 69 64 20 65 78 70 6c 61 69 6e 5f 64 61 74 61  oid explain_data
10010 5f 64 65 6c 65 74 65 28 53 68 65 6c 6c 53 74 61  _delete(ShellSta
10020 74 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65  te *p){.  sqlite
10030 33 5f 66 72 65 65 28 70 2d 3e 61 69 49 6e 64 65  3_free(p->aiInde
10040 6e 74 29 3b 0a 20 20 70 2d 3e 61 69 49 6e 64 65  nt);.  p->aiInde
10050 6e 74 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 49 6e  nt = 0;.  p->nIn
10060 64 65 6e 74 20 3d 20 30 3b 0a 20 20 70 2d 3e 69  dent = 0;.  p->i
10070 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 7d 0a 0a 2f  Indent = 0;.}../
10080 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 61 6e 64  *.** Disable and
10090 20 72 65 73 74 6f 72 65 20 2e 77 68 65 72 65 74   restore .wheret
100a0 72 61 63 65 20 61 6e 64 20 2e 73 65 6c 65 63 74  race and .select
100b0 74 72 61 63 65 20 73 65 74 74 69 6e 67 73 2e 0a  trace settings..
100c0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
100d0 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
100e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
100f0 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
10100 45 29 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  E).extern int sq
10110 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
10120 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 73 61 76  ;.static int sav
10130 65 64 53 65 6c 65 63 74 54 72 61 63 65 3b 0a 23  edSelectTrace;.#
10140 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
10150 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
10160 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
10170 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45 54 52  E_ENABLE_WHERETR
10180 41 43 45 29 0a 65 78 74 65 72 6e 20 69 6e 74 20  ACE).extern int 
10190 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61 63  sqlite3WhereTrac
101a0 65 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 73 61  e;.static int sa
101b0 76 65 64 57 68 65 72 65 54 72 61 63 65 3b 0a 23  vedWhereTrace;.#
101c0 65 6e 64 69 66 0a 73 74 61 74 69 63 20 76 6f 69  endif.static voi
101d0 64 20 64 69 73 61 62 6c 65 5f 64 65 62 75 67 5f  d disable_debug_
101e0 74 72 61 63 65 5f 6d 6f 64 65 73 28 76 6f 69 64  trace_modes(void
101f0 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ){.#if defined(S
10200 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
10210 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
10220 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
10230 45 29 0a 20 20 73 61 76 65 64 53 65 6c 65 63 74  E).  savedSelect
10240 54 72 61 63 65 20 3d 20 73 71 6c 69 74 65 33 53  Trace = sqlite3S
10250 65 6c 65 63 74 54 72 61 63 65 3b 0a 20 20 73 71  electTrace;.  sq
10260 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
10270 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 23 69 66   = 0;.#endif.#if
10280 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
10290 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
102a0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
102b0 57 48 45 52 45 54 52 41 43 45 29 0a 20 20 73 61  WHERETRACE).  sa
102c0 76 65 64 57 68 65 72 65 54 72 61 63 65 20 3d 20  vedWhereTrace = 
102d0 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61 63  sqlite3WhereTrac
102e0 65 3b 0a 20 20 73 71 6c 69 74 65 33 57 68 65 72  e;.  sqlite3Wher
102f0 65 54 72 61 63 65 20 3d 20 30 3b 0a 23 65 6e 64  eTrace = 0;.#end
10300 69 66 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  if.}.static void
10310 20 72 65 73 74 6f 72 65 5f 64 65 62 75 67 5f 74   restore_debug_t
10320 72 61 63 65 5f 6d 6f 64 65 73 28 76 6f 69 64 29  race_modes(void)
10330 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  {.#if defined(SQ
10340 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
10350 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
10360 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45  ABLE_SELECTTRACE
10370 29 0a 20 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ).  sqlite3Selec
10380 74 54 72 61 63 65 20 3d 20 73 61 76 65 64 53 65  tTrace = savedSe
10390 6c 65 63 74 54 72 61 63 65 3b 0a 23 65 6e 64 69  lectTrace;.#endi
103a0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
103b0 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
103c0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
103d0 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45 29  ABLE_WHERETRACE)
103e0 0a 20 20 73 71 6c 69 74 65 33 57 68 65 72 65 54  .  sqlite3WhereT
103f0 72 61 63 65 20 3d 20 73 61 76 65 64 57 68 65 72  race = savedWher
10400 65 54 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 7d  eTrace;.#endif.}
10410 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 61 20 70 72  ../*.** Run a pr
10420 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
10430 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
10440 65 78 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74  exec_prepared_st
10450 6d 74 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65  mt(.  ShellState
10460 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20 20   *pArg,         
10470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10480 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
10490 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74 65 20  r to ShellState 
104a0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  */.  sqlite3_stm
104b0 74 20 2a 70 53 74 6d 74 2c 20 20 20 20 20 20 20  t *pStmt,       
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104d0 20 20 20 20 20 20 2f 2a 20 53 74 61 74 6d 65 6e        /* Statmen
104e0 74 20 74 6f 20 72 75 6e 20 2a 2f 0a 20 20 69 6e  t to run */.  in
104f0 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76  t (*xCallback)(v
10500 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 2a 2a 2c  oid*,int,char**,
10510 63 68 61 72 2a 2a 2c 69 6e 74 2a 29 20 20 20 2f  char**,int*)   /
10520 2a 20 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  * Callback funct
10530 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ion */.){.  int 
10540 72 63 3b 0a 0a 20 20 2f 2a 20 70 65 72 66 6f 72  rc;..  /* perfor
10550 6d 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70  m the first step
10560 2e 20 20 74 68 69 73 20 77 69 6c 6c 20 74 65 6c  .  this will tel
10570 6c 20 75 73 20 69 66 20 77 65 0a 20 20 2a 2a 20  l us if we.  ** 
10580 68 61 76 65 20 61 20 72 65 73 75 6c 74 20 73 65  have a result se
10590 74 20 6f 72 20 6e 6f 74 20 61 6e 64 20 68 6f 77  t or not and how
105a0 20 77 69 64 65 20 69 74 20 69 73 2e 0a 20 20 2a   wide it is..  *
105b0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
105c0 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20  _step(pStmt);.  
105d0 2f 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20  /* if we have a 
105e0 72 65 73 75 6c 74 20 73 65 74 2e 2e 2e 20 2a 2f  result set... */
105f0 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 52 4f  .  if( SQLITE_RO
10600 57 20 3d 3d 20 72 63 20 29 7b 0a 20 20 20 20 2f  W == rc ){.    /
10610 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20 63  * if we have a c
10620 61 6c 6c 62 61 63 6b 2e 2e 2e 20 2a 2f 0a 20 20  allback... */.  
10630 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63 6b 20    if( xCallback 
10640 29 7b 0a 20 20 20 20 20 20 2f 2a 20 61 6c 6c 6f  ){.      /* allo
10650 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 20 63  cate space for c
10660 6f 6c 20 6e 61 6d 65 20 70 74 72 2c 20 76 61 6c  ol name ptr, val
10670 75 65 20 70 74 72 2c 20 61 6e 64 20 74 79 70 65  ue ptr, and type
10680 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 6e 43   */.      int nC
10690 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ol = sqlite3_col
106a0 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  umn_count(pStmt)
106b0 3b 0a 20 20 20 20 20 20 76 6f 69 64 20 2a 70 44  ;.      void *pD
106c0 61 74 61 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61  ata = sqlite3_ma
106d0 6c 6c 6f 63 36 34 28 33 2a 6e 43 6f 6c 2a 73 69  lloc64(3*nCol*si
106e0 7a 65 6f 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  zeof(const char*
106f0 29 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 69 66  ) + 1);.      if
10700 28 20 21 70 44 61 74 61 20 29 7b 0a 20 20 20 20  ( !pData ){.    
10710 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
10720 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 7d 65 6c  NOMEM;.      }el
10730 73 65 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72  se{.        char
10740 20 2a 2a 61 7a 43 6f 6c 73 20 3d 20 28 63 68 61   **azCols = (cha
10750 72 20 2a 2a 29 70 44 61 74 61 3b 20 20 20 20 20  r **)pData;     
10760 20 2f 2a 20 4e 61 6d 65 73 20 6f 66 20 72 65 73   /* Names of res
10770 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  ult columns */. 
10780 20 20 20 20 20 20 20 63 68 61 72 20 2a 2a 61 7a         char **az
10790 56 61 6c 73 20 3d 20 26 61 7a 43 6f 6c 73 5b 6e  Vals = &azCols[n
107a0 43 6f 6c 5d 3b 20 20 20 20 20 20 20 2f 2a 20 52  Col];       /* R
107b0 65 73 75 6c 74 73 20 2a 2f 0a 20 20 20 20 20 20  esults */.      
107c0 20 20 69 6e 74 20 2a 61 69 54 79 70 65 73 20 3d    int *aiTypes =
107d0 20 28 69 6e 74 20 2a 29 26 61 7a 56 61 6c 73 5b   (int *)&azVals[
107e0 6e 43 6f 6c 5d 3b 20 2f 2a 20 52 65 73 75 6c 74  nCol]; /* Result
107f0 20 74 79 70 65 73 20 2a 2f 0a 20 20 20 20 20 20   types */.      
10800 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20 20 20    int i, x;.    
10810 20 20 20 20 61 73 73 65 72 74 28 73 69 7a 65 6f      assert(sizeo
10820 66 28 69 6e 74 29 20 3c 3d 20 73 69 7a 65 6f 66  f(int) <= sizeof
10830 28 63 68 61 72 20 2a 29 29 3b 0a 20 20 20 20 20  (char *));.     
10840 20 20 20 2f 2a 20 73 61 76 65 20 6f 66 66 20 70     /* save off p
10850 74 72 73 20 74 6f 20 63 6f 6c 75 6d 6e 20 6e 61  trs to column na
10860 6d 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  mes */.        f
10870 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20  or(i=0; i<nCol; 
10880 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
10890 61 7a 43 6f 6c 73 5b 69 5d 20 3d 20 28 63 68 61  azCols[i] = (cha
108a0 72 20 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  r *)sqlite3_colu
108b0 6d 6e 5f 6e 61 6d 65 28 70 53 74 6d 74 2c 20 69  mn_name(pStmt, i
108c0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
108d0 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
108e0 20 20 20 2f 2a 20 65 78 74 72 61 63 74 20 74 68     /* extract th
108f0 65 20 64 61 74 61 20 61 6e 64 20 64 61 74 61 20  e data and data 
10900 74 79 70 65 73 20 2a 2f 0a 20 20 20 20 20 20 20  types */.       
10910 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43     for(i=0; i<nC
10920 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; i++){.      
10930 20 20 20 20 20 20 61 69 54 79 70 65 73 5b 69 5d        aiTypes[i]
10940 20 3d 20 78 20 3d 20 73 71 6c 69 74 65 33 5f 63   = x = sqlite3_c
10950 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74  olumn_type(pStmt
10960 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , i);.          
10970 20 20 69 66 28 20 78 3d 3d 53 51 4c 49 54 45 5f    if( x==SQLITE_
10980 42 4c 4f 42 20 26 26 20 70 41 72 67 20 26 26 20  BLOB && pArg && 
10990 70 41 72 67 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44  pArg->cMode==MOD
109a0 45 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  E_Insert ){.    
109b0 20 20 20 20 20 20 20 20 20 20 61 7a 56 61 6c 73            azVals
109c0 5b 69 5d 20 3d 20 22 22 3b 0a 20 20 20 20 20 20  [i] = "";.      
109d0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
109e0 20 20 20 20 20 20 20 20 20 20 20 61 7a 56 61 6c             azVal
109f0 73 5b 69 5d 20 3d 20 28 63 68 61 72 2a 29 73 71  s[i] = (char*)sq
10a00 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
10a10 74 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20  t(pStmt, i);.   
10a20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
10a30 20 20 20 20 20 20 20 69 66 28 20 21 61 7a 56 61         if( !azVa
10a40 6c 73 5b 69 5d 20 26 26 20 28 61 69 54 79 70 65  ls[i] && (aiType
10a50 73 5b 69 5d 21 3d 53 51 4c 49 54 45 5f 4e 55 4c  s[i]!=SQLITE_NUL
10a60 4c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  L) ){.          
10a70 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
10a80 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 20 20 20  NOMEM;.         
10a90 20 20 20 20 20 62 72 65 61 6b 3b 20 2f 2a 20 66       break; /* f
10aa0 72 6f 6d 20 66 6f 72 20 2a 2f 0a 20 20 20 20 20  rom for */.     
10ab0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
10ac0 20 20 20 7d 20 2f 2a 20 65 6e 64 20 66 6f 72 20     } /* end for 
10ad0 2a 2f 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  */..          /*
10ae0 20 69 66 20 64 61 74 61 20 61 6e 64 20 74 79 70   if data and typ
10af0 65 73 20 65 78 74 72 61 63 74 65 64 20 73 75 63  es extracted suc
10b00 63 65 73 73 66 75 6c 6c 79 2e 2e 2e 20 2a 2f 0a  cessfully... */.
10b10 20 20 20 20 20 20 20 20 20 20 69 66 28 20 53 51            if( SQ
10b20 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29  LITE_ROW == rc )
10b30 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {.            /*
10b40 20 63 61 6c 6c 20 74 68 65 20 73 75 70 70 6c 69   call the suppli
10b50 65 64 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ed callback with
10b60 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
10b70 64 61 74 61 20 2a 2f 0a 20 20 20 20 20 20 20 20  data */.        
10b80 20 20 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63      if( xCallbac
10b90 6b 28 70 41 72 67 2c 20 6e 43 6f 6c 2c 20 61 7a  k(pArg, nCol, az
10ba0 56 61 6c 73 2c 20 61 7a 43 6f 6c 73 2c 20 61 69  Vals, azCols, ai
10bb0 54 79 70 65 73 29 20 29 7b 0a 20 20 20 20 20 20  Types) ){.      
10bc0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
10bd0 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 20  ITE_ABORT;.     
10be0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
10c00 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
10c10 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  tmt);.          
10c20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a    }.          }.
10c30 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 28          } while(
10c40 20 53 51 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72   SQLITE_ROW == r
10c50 63 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  c );.        sql
10c60 69 74 65 33 5f 66 72 65 65 28 70 44 61 74 61 29  ite3_free(pData)
10c70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
10c80 6c 73 65 7b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  lse{.      do{. 
10c90 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
10ca0 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b  te3_step(pStmt);
10cb0 0a 20 20 20 20 20 20 7d 20 77 68 69 6c 65 28 20  .      } while( 
10cc0 72 63 20 3d 3d 20 53 51 4c 49 54 45 5f 52 4f 57  rc == SQLITE_ROW
10cd0 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a   );.    }.  }.}.
10ce0 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
10cf0 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 73 65   statement or se
10d00 74 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  t of statements.
10d10 20 20 50 72 69 6e 74 0a 2a 2a 20 61 6e 79 20 72    Print.** any r
10d20 65 73 75 6c 74 20 72 6f 77 73 2f 63 6f 6c 75 6d  esult rows/colum
10d30 6e 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ns depending on 
10d40 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 64 65  the current mode
10d50 0a 2a 2a 20 73 65 74 20 76 69 61 20 74 68 65 20  .** set via the 
10d60 73 75 70 70 6c 69 65 64 20 63 61 6c 6c 62 61 63  supplied callbac
10d70 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  k..**.** This is
10d80 20 76 65 72 79 20 73 69 6d 69 6c 61 72 20 74 6f   very similar to
10d90 20 53 51 4c 69 74 65 27 73 20 62 75 69 6c 74 2d   SQLite's built-
10da0 69 6e 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  in sqlite3_exec(
10db0 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 65 78  ).** function ex
10dc0 63 65 70 74 20 69 74 20 74 61 6b 65 73 20 61 20  cept it takes a 
10dd0 73 6c 69 67 68 74 6c 79 20 64 69 66 66 65 72 65  slightly differe
10de0 6e 74 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 61  nt callback.** a
10df0 6e 64 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  nd callback data
10e00 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
10e10 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 65  atic int shell_e
10e20 78 65 63 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  xec(.  sqlite3 *
10e30 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
10e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e50 20 2f 2a 20 41 6e 20 6f 70 65 6e 20 64 61 74 61   /* An open data
10e60 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
10e70 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20  char *zSql,     
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e90 20 20 20 20 2f 2a 20 53 51 4c 20 74 6f 20 62 65      /* SQL to be
10ea0 20 65 76 61 6c 75 61 74 65 64 20 2a 2f 0a 20 20   evaluated */.  
10eb0 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29  int (*xCallback)
10ec0 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 2a  (void*,int,char*
10ed0 2a 2c 63 68 61 72 2a 2a 2c 69 6e 74 2a 29 2c 20  *,char**,int*), 
10ee0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 75    /* Callback fu
10ef0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20  nction */.      
10f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f20 20 20 20 20 20 20 2f 2a 20 28 6e 6f 74 20 74 68        /* (not th
10f30 65 20 73 61 6d 65 20 61 73 20 73 71 6c 69 74 65  e same as sqlite
10f40 33 5f 65 78 65 63 29 20 2a 2f 0a 20 20 53 68 65  3_exec) */.  She
10f50 6c 6c 53 74 61 74 65 20 2a 70 41 72 67 2c 20 20  llState *pArg,  
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
10f80 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74 65 20  r to ShellState 
10f90 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
10fa0 72 4d 73 67 20 20 20 20 20 20 20 20 20 20 20 20  rMsg            
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10fc0 2a 20 45 72 72 6f 72 20 6d 73 67 20 77 72 69 74  * Error msg writ
10fd0 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20  ten here */.){. 
10fe0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
10ff0 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20 20 20 20  Stmt = NULL;    
11000 20 2f 2a 20 53 74 61 74 65 6d 65 6e 74 20 74 6f   /* Statement to
11010 20 65 78 65 63 75 74 65 2e 20 2a 2f 0a 20 20 69   execute. */.  i
11020 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
11030 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  K;             /
11040 2a 20 52 65 74 75 72 6e 20 43 6f 64 65 20 2a 2f  * Return Code */
11050 0a 20 20 69 6e 74 20 72 63 32 3b 0a 20 20 63 6f  .  int rc2;.  co
11060 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66 74 6f  nst char *zLefto
11070 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ver;          /*
11080 20 54 61 69 6c 20 6f 66 20 75 6e 70 72 6f 63 65   Tail of unproce
11090 73 73 65 64 20 53 51 4c 20 2a 2f 0a 0a 20 20 69  ssed SQL */..  i
110a0 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20  f( pzErrMsg ){. 
110b0 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 4e     *pzErrMsg = N
110c0 55 4c 4c 3b 0a 20 20 7d 0a 0a 20 20 77 68 69 6c  ULL;.  }..  whil
110d0 65 28 20 7a 53 71 6c 5b 30 5d 20 26 26 20 28 53  e( zSql[0] && (S
110e0 51 4c 49 54 45 5f 4f 4b 20 3d 3d 20 72 63 29 20  QLITE_OK == rc) 
110f0 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
11100 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6d 74 53  nst char *zStmtS
11110 71 6c 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  ql;.    rc = sql
11120 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
11130 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70  db, zSql, -1, &p
11140 53 74 6d 74 2c 20 26 7a 4c 65 66 74 6f 76 65 72  Stmt, &zLeftover
11150 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  );.    if( SQLIT
11160 45 5f 4f 4b 20 21 3d 20 72 63 20 29 7b 0a 20 20  E_OK != rc ){.  
11170 20 20 20 20 69 66 28 20 70 7a 45 72 72 4d 73 67      if( pzErrMsg
11180 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 70 7a 45   ){.        *pzE
11190 72 72 4d 73 67 20 3d 20 73 61 76 65 5f 65 72 72  rrMsg = save_err
111a0 5f 6d 73 67 28 64 62 29 3b 0a 20 20 20 20 20 20  _msg(db);.      
111b0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
111c0 20 20 20 69 66 28 20 21 70 53 74 6d 74 20 29 7b     if( !pStmt ){
111d0 0a 20 20 20 20 20 20 20 20 2f 2a 20 74 68 69 73  .        /* this
111e0 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61 20 63   happens for a c
111f0 6f 6d 6d 65 6e 74 20 6f 72 20 77 68 69 74 65 2d  omment or white-
11200 73 70 61 63 65 20 2a 2f 0a 20 20 20 20 20 20 20  space */.       
11210 20 7a 53 71 6c 20 3d 20 7a 4c 65 66 74 6f 76 65   zSql = zLeftove
11220 72 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  r;.        while
11230 28 20 49 73 53 70 61 63 65 28 7a 53 71 6c 5b 30  ( IsSpace(zSql[0
11240 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20  ]) ) zSql++;.   
11250 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20       continue;. 
11260 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 53 74       }.      zSt
11270 6d 74 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f  mtSql = sqlite3_
11280 73 71 6c 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  sql(pStmt);.    
11290 20 20 69 66 28 20 7a 53 74 6d 74 53 71 6c 3d 3d    if( zStmtSql==
112a0 30 20 29 20 7a 53 74 6d 74 53 71 6c 20 3d 20 22  0 ) zStmtSql = "
112b0 22 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  ";.      while( 
112c0 49 73 53 70 61 63 65 28 7a 53 74 6d 74 53 71 6c  IsSpace(zStmtSql
112d0 5b 30 5d 29 20 29 20 7a 53 74 6d 74 53 71 6c 2b  [0]) ) zStmtSql+
112e0 2b 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 73 61 76  +;..      /* sav
112f0 65 20 6f 66 66 20 74 68 65 20 70 72 65 70 61 72  e off the prepar
11300 65 64 20 73 74 61 74 6d 65 6e 74 20 68 61 6e 64  ed statment hand
11310 6c 65 20 61 6e 64 20 72 65 73 65 74 20 72 6f 77  le and reset row
11320 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20   count */.      
11330 69 66 28 20 70 41 72 67 20 29 7b 0a 20 20 20 20  if( pArg ){.    
11340 20 20 20 20 70 41 72 67 2d 3e 70 53 74 6d 74 20      pArg->pStmt 
11350 3d 20 70 53 74 6d 74 3b 0a 20 20 20 20 20 20 20  = pStmt;.       
11360 20 70 41 72 67 2d 3e 63 6e 74 20 3d 20 30 3b 0a   pArg->cnt = 0;.
11370 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
11380 2a 20 65 63 68 6f 20 74 68 65 20 73 71 6c 20 73  * echo the sql s
11390 74 61 74 65 6d 65 6e 74 20 69 66 20 65 63 68 6f  tatement if echo
113a0 20 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28   on */.      if(
113b0 20 70 41 72 67 20 26 26 20 53 68 65 6c 6c 48 61   pArg && ShellHa
113c0 73 46 6c 61 67 28 70 41 72 67 2c 20 53 48 46 4c  sFlag(pArg, SHFL
113d0 47 5f 45 63 68 6f 29 20 29 7b 0a 20 20 20 20 20  G_Echo) ){.     
113e0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
113f0 41 72 67 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22  Arg->out, "%s\n"
11400 2c 20 7a 53 74 6d 74 53 71 6c 20 3f 20 7a 53 74  , zStmtSql ? zSt
11410 6d 74 53 71 6c 20 3a 20 7a 53 71 6c 29 3b 0a 20  mtSql : zSql);. 
11420 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
11430 20 53 68 6f 77 20 74 68 65 20 45 58 50 4c 41 49   Show the EXPLAI
11440 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 69 66 20  N QUERY PLAN if 
11450 2e 65 71 70 20 69 73 20 6f 6e 20 2a 2f 0a 20 20  .eqp is on */.  
11460 20 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20      if( pArg && 
11470 70 41 72 67 2d 3e 61 75 74 6f 45 51 50 20 26 26  pArg->autoEQP &&
11480 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65   sqlite3_strlike
11490 28 22 45 58 50 4c 41 49 4e 25 22 2c 7a 53 74 6d  ("EXPLAIN%",zStm
114a0 74 53 71 6c 2c 30 29 21 3d 30 20 29 7b 0a 20 20  tSql,0)!=0 ){.  
114b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74        sqlite3_st
114c0 6d 74 20 2a 70 45 78 70 6c 61 69 6e 3b 0a 20 20  mt *pExplain;.  
114d0 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45 51 50        char *zEQP
114e0 3b 0a 20 20 20 20 20 20 20 20 64 69 73 61 62 6c  ;.        disabl
114f0 65 5f 64 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f  e_debug_trace_mo
11500 64 65 73 28 29 3b 0a 20 20 20 20 20 20 20 20 7a  des();.        z
11510 45 51 50 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  EQP = sqlite3_mp
11520 72 69 6e 74 66 28 22 45 58 50 4c 41 49 4e 20 51  rintf("EXPLAIN Q
11530 55 45 52 59 20 50 4c 41 4e 20 25 73 22 2c 20 7a  UERY PLAN %s", z
11540 53 74 6d 74 53 71 6c 29 3b 0a 20 20 20 20 20 20  StmtSql);.      
11550 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
11560 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 45  repare_v2(db, zE
11570 51 50 2c 20 2d 31 2c 20 26 70 45 78 70 6c 61 69  QP, -1, &pExplai
11580 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 69  n, 0);.        i
11590 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
115a0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68   ){.          wh
115b0 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65  ile( sqlite3_ste
115c0 70 28 70 45 78 70 6c 61 69 6e 29 3d 3d 53 51 4c  p(pExplain)==SQL
115d0 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20  ITE_ROW ){.     
115e0 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
115f0 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 2d 2d 45  f(pArg->out,"--E
11600 51 50 2d 2d 20 25 64 2c 22 2c 73 71 6c 69 74 65  QP-- %d,",sqlite
11610 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45 78  3_column_int(pEx
11620 70 6c 61 69 6e 2c 20 30 29 29 3b 0a 20 20 20 20  plain, 0));.    
11630 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
11640 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25 64  tf(pArg->out,"%d
11650 2c 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ,", sqlite3_colu
11660 6d 6e 5f 69 6e 74 28 70 45 78 70 6c 61 69 6e 2c  mn_int(pExplain,
11670 20 31 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20   1));.          
11680 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
11690 67 2d 3e 6f 75 74 2c 22 25 64 2c 22 2c 20 73 71  g->out,"%d,", sq
116a0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
116b0 28 70 45 78 70 6c 61 69 6e 2c 20 32 29 29 3b 0a  (pExplain, 2));.
116c0 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
116d0 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
116e0 74 2c 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65  t,"%s\n", sqlite
116f0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 45  3_column_text(pE
11700 78 70 6c 61 69 6e 2c 20 33 29 29 3b 0a 20 20 20  xplain, 3));.   
11710 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11720 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
11730 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78 70  e3_finalize(pExp
11740 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 73  lain);.        s
11750 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 51 50  qlite3_free(zEQP
11760 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
11770 41 72 67 2d 3e 61 75 74 6f 45 51 50 3e 3d 32 20  Arg->autoEQP>=2 
11780 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
11790 41 6c 73 6f 20 64 6f 20 61 6e 20 45 58 50 4c 41  Also do an EXPLA
117a0 49 4e 20 66 6f 72 20 22 2e 65 71 70 20 66 75 6c  IN for ".eqp ful
117b0 6c 22 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20  l" mode */.     
117c0 20 20 20 20 20 7a 45 51 50 20 3d 20 73 71 6c 69       zEQP = sqli
117d0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 45 58 50  te3_mprintf("EXP
117e0 4c 41 49 4e 20 25 73 22 2c 20 7a 53 74 6d 74 53  LAIN %s", zStmtS
117f0 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  ql);.          r
11800 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
11810 61 72 65 5f 76 32 28 64 62 2c 20 7a 45 51 50 2c  are_v2(db, zEQP,
11820 20 2d 31 2c 20 26 70 45 78 70 6c 61 69 6e 2c 20   -1, &pExplain, 
11830 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  0);.          if
11840 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
11850 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
11860 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f 44  Arg->cMode = MOD
11870 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20  E_Explain;.     
11880 20 20 20 20 20 20 20 65 78 70 6c 61 69 6e 5f 64         explain_d
11890 61 74 61 5f 70 72 65 70 61 72 65 28 70 41 72 67  ata_prepare(pArg
118a0 2c 20 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20  , pExplain);.   
118b0 20 20 20 20 20 20 20 20 20 65 78 65 63 5f 70 72           exec_pr
118c0 65 70 61 72 65 64 5f 73 74 6d 74 28 70 41 72 67  epared_stmt(pArg
118d0 2c 20 70 45 78 70 6c 61 69 6e 2c 20 78 43 61 6c  , pExplain, xCal
118e0 6c 62 61 63 6b 29 3b 0a 20 20 20 20 20 20 20 20  lback);.        
118f0 20 20 20 20 65 78 70 6c 61 69 6e 5f 64 61 74 61      explain_data
11900 5f 64 65 6c 65 74 65 28 70 41 72 67 29 3b 0a 20  _delete(pArg);. 
11910 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
11920 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e       sqlite3_fin
11930 61 6c 69 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b  alize(pExplain);
11940 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11950 65 33 5f 66 72 65 65 28 7a 45 51 50 29 3b 0a 20  e3_free(zEQP);. 
11960 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11970 20 72 65 73 74 6f 72 65 5f 64 65 62 75 67 5f 74   restore_debug_t
11980 72 61 63 65 5f 6d 6f 64 65 73 28 29 3b 0a 20 20  race_modes();.  
11990 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28      }..      if(
119a0 20 70 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20   pArg ){.       
119b0 20 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 70   pArg->cMode = p
119c0 41 72 67 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20  Arg->mode;.     
119d0 20 20 20 69 66 28 20 70 41 72 67 2d 3e 61 75 74     if( pArg->aut
119e0 6f 45 78 70 6c 61 69 6e 0a 20 20 20 20 20 20 20  oExplain.       
119f0 20 20 26 26 20 73 71 6c 69 74 65 33 5f 63 6f 6c    && sqlite3_col
11a00 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  umn_count(pStmt)
11a10 3d 3d 38 0a 20 20 20 20 20 20 20 20 20 26 26 20  ==8.         && 
11a20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
11a30 22 45 58 50 4c 41 49 4e 25 22 2c 20 7a 53 74 6d  "EXPLAIN%", zStm
11a40 74 53 71 6c 2c 30 29 3d 3d 30 0a 20 20 20 20 20  tSql,0)==0.     
11a50 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20     ){.          
11a60 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f  pArg->cMode = MO
11a70 44 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20  DE_Explain;.    
11a80 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
11a90 2a 20 49 66 20 74 68 65 20 73 68 65 6c 6c 20 69  * If the shell i
11aa0 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 22  s currently in "
11ab0 2e 65 78 70 6c 61 69 6e 22 20 6d 6f 64 65 2c 20  .explain" mode, 
11ac0 67 61 74 68 65 72 20 74 68 65 20 65 78 74 72 61  gather the extra
11ad0 0a 20 20 20 20 20 20 20 20 2a 2a 20 64 61 74 61  .        ** data
11ae0 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 64 64   required to add
11af0 20 69 6e 64 65 6e 74 73 20 74 6f 20 74 68 65 20   indents to the 
11b00 6f 75 74 70 75 74 2e 2a 2f 0a 20 20 20 20 20 20  output.*/.      
11b10 20 20 69 66 28 20 70 41 72 67 2d 3e 63 4d 6f 64    if( pArg->cMod
11b20 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20  e==MODE_Explain 
11b30 29 7b 0a 20 20 20 20 20 20 20 20 20 20 65 78 70  ){.          exp
11b40 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72  lain_data_prepar
11b50 65 28 70 41 72 67 2c 20 70 53 74 6d 74 29 3b 0a  e(pArg, pStmt);.
11b60 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
11b70 7d 0a 0a 20 20 20 20 20 20 65 78 65 63 5f 70 72  }..      exec_pr
11b80 65 70 61 72 65 64 5f 73 74 6d 74 28 70 41 72 67  epared_stmt(pArg
11b90 2c 20 70 53 74 6d 74 2c 20 78 43 61 6c 6c 62 61  , pStmt, xCallba
11ba0 63 6b 29 3b 0a 20 20 20 20 20 20 65 78 70 6c 61  ck);.      expla
11bb0 69 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 70  in_data_delete(p
11bc0 41 72 67 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  Arg);..      /* 
11bd0 70 72 69 6e 74 20 75 73 61 67 65 20 73 74 61 74  print usage stat
11be0 73 20 69 66 20 73 74 61 74 73 20 6f 6e 20 2a 2f  s if stats on */
11bf0 0a 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20  .      if( pArg 
11c00 26 26 20 70 41 72 67 2d 3e 73 74 61 74 73 4f 6e  && pArg->statsOn
11c10 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69 73 70   ){.        disp
11c20 6c 61 79 5f 73 74 61 74 73 28 64 62 2c 20 70 41  lay_stats(db, pA
11c30 72 67 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a  rg, 0);.      }.
11c40 0a 20 20 20 20 20 20 2f 2a 20 70 72 69 6e 74 20  .      /* print 
11c50 6c 6f 6f 70 2d 63 6f 75 6e 74 65 72 73 20 69 66  loop-counters if
11c60 20 72 65 71 75 69 72 65 64 20 2a 2f 0a 20 20 20   required */.   
11c70 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70     if( pArg && p
11c80 41 72 67 2d 3e 73 63 61 6e 73 74 61 74 73 4f 6e  Arg->scanstatsOn
11c90 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69 73 70   ){.        disp
11ca0 6c 61 79 5f 73 63 61 6e 73 74 61 74 73 28 64 62  lay_scanstats(db
11cb0 2c 20 70 41 72 67 29 3b 0a 20 20 20 20 20 20 7d  , pArg);.      }
11cc0 0a 0a 20 20 20 20 20 20 2f 2a 20 46 69 6e 61 6c  ..      /* Final
11cd0 69 7a 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ize the statemen
11ce0 74 20 6a 75 73 74 20 65 78 65 63 75 74 65 64 2e  t just executed.
11cf0 20 49 66 20 74 68 69 73 20 66 61 69 6c 73 2c 20   If this fails, 
11d00 73 61 76 65 20 61 0a 20 20 20 20 20 20 2a 2a 20  save a.      ** 
11d10 63 6f 70 79 20 6f 66 20 74 68 65 20 65 72 72 6f  copy of the erro
11d20 72 20 6d 65 73 73 61 67 65 2e 20 4f 74 68 65 72  r message. Other
11d30 77 69 73 65 2c 20 73 65 74 20 7a 53 71 6c 20 74  wise, set zSql t
11d40 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 0a 20  o point to the. 
11d50 20 20 20 20 20 2a 2a 20 6e 65 78 74 20 73 74 61       ** next sta
11d60 74 65 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74  tement to execut
11d70 65 2e 20 2a 2f 0a 20 20 20 20 20 20 72 63 32 20  e. */.      rc2 
11d80 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
11d90 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  ze(pStmt);.     
11da0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
11db0 4e 4f 4d 45 4d 20 29 20 72 63 20 3d 20 72 63 32  NOMEM ) rc = rc2
11dc0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
11dd0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
11de0 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c 65 66       zSql = zLef
11df0 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 20 20 77  tover;.        w
11e00 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 53  hile( IsSpace(zS
11e10 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b  ql[0]) ) zSql++;
11e20 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
11e30 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20   pzErrMsg ){.   
11e40 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d       *pzErrMsg =
11e50 20 73 61 76 65 5f 65 72 72 5f 6d 73 67 28 64 62   save_err_msg(db
11e60 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
11e70 20 20 2f 2a 20 63 6c 65 61 72 20 73 61 76 65 64    /* clear saved
11e80 20 73 74 6d 74 20 68 61 6e 64 6c 65 20 2a 2f 0a   stmt handle */.
11e90 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20 29        if( pArg )
11ea0 7b 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e  {.        pArg->
11eb0 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20  pStmt = NULL;.  
11ec0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 20      }.    }.  } 
11ed0 2f 2a 20 65 6e 64 20 77 68 69 6c 65 20 2a 2f 0a  /* end while */.
11ee0 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
11ef0 0a 2f 2a 0a 2a 2a 20 52 65 6c 65 61 73 65 20 6d  ./*.** Release m
11f00 65 6d 6f 72 79 20 70 72 65 76 69 6f 75 73 6c 79  emory previously
11f10 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 61   allocated by ta
11f20 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 29 2e  bleColumnList().
11f30 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
11f40 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 63  freeColumnList(c
11f50 68 61 72 20 2a 2a 61 7a 43 6f 6c 29 7b 0a 20 20  har **azCol){.  
11f60 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 31  int i;.  for(i=1
11f70 3b 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29  ; azCol[i]; i++)
11f80 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  {.    sqlite3_fr
11f90 65 65 28 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20  ee(azCol[i]);.  
11fa0 7d 0a 20 20 2f 2a 20 61 7a 43 6f 6c 5b 30 5d 20  }.  /* azCol[0] 
11fb0 69 73 20 61 20 73 74 61 74 69 63 20 73 74 72 69  is a static stri
11fc0 6e 67 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ng */.  sqlite3_
11fd0 66 72 65 65 28 61 7a 43 6f 6c 29 3b 0a 7d 0a 0a  free(azCol);.}..
11fe0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 6c  /*.** Return a l
11ff0 69 73 74 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ist of pointers 
12000 74 6f 20 73 74 72 69 6e 67 73 20 77 68 69 63 68  to strings which
12010 20 61 72 65 20 74 68 65 20 6e 61 6d 65 73 20 6f   are the names o
12020 66 20 61 6c 6c 0a 2a 2a 20 63 6f 6c 75 6d 6e 73  f all.** columns
12030 20 69 6e 20 74 61 62 6c 65 20 7a 54 61 62 2e 20   in table zTab. 
12040 20 20 54 68 65 20 6d 65 6d 6f 72 79 20 74 6f 20    The memory to 
12050 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 73 20 69  hold the names i
12060 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
12070 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 6d   allocated and m
12080 75 73 74 20 62 65 20 72 65 6c 65 61 73 65 64 20  ust be released 
12090 62 79 20 74 68 65 20 63 61 6c 6c 65 72 20 75 73  by the caller us
120a0 69 6e 67 20 61 20 73 75 62 73 65 71 75 65 6e 74  ing a subsequent
120b0 20 63 61 6c 6c 0a 2a 2a 20 74 6f 20 66 72 65 65   call.** to free
120c0 43 6f 6c 75 6d 6e 4c 69 73 74 28 29 2e 0a 2a 2a  ColumnList()..**
120d0 0a 2a 2a 20 54 68 65 20 61 7a 43 6f 6c 5b 30 5d  .** The azCol[0]
120e0 20 65 6e 74 72 79 20 69 73 20 75 73 75 61 6c 6c   entry is usuall
120f0 79 20 4e 55 4c 4c 2e 20 20 48 6f 77 65 76 65 72  y NULL.  However
12100 2c 20 69 66 20 7a 54 61 62 20 63 6f 6e 74 61 69  , if zTab contai
12110 6e 73 20 61 20 72 6f 77 69 64 0a 2a 2a 20 76 61  ns a rowid.** va
12120 6c 75 65 20 74 68 61 74 20 6e 65 65 64 73 20 74  lue that needs t
12130 6f 20 62 65 20 70 72 65 73 65 72 76 65 64 2c 20  o be preserved, 
12140 74 68 65 6e 20 61 7a 43 6f 6c 5b 30 5d 20 69 73  then azCol[0] is
12150 20 66 69 6c 6c 65 64 20 69 6e 20 77 69 74 68 20   filled in with 
12160 74 68 65 0a 2a 2a 20 6e 61 6d 65 20 6f 66 20 74  the.** name of t
12170 68 65 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2e  he rowid column.
12180 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  .**.** The first
12190 20 72 65 67 75 6c 61 72 20 63 6f 6c 75 6d 6e 20   regular column 
121a0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  in the table is 
121b0 61 7a 43 6f 6c 5b 31 5d 2e 20 20 54 68 65 20 6c  azCol[1].  The l
121c0 69 73 74 20 69 73 20 74 65 72 6d 69 6e 61 74 65  ist is terminate
121d0 64 0a 2a 2a 20 62 79 20 61 6e 20 65 6e 74 72 79  d.** by an entry
121e0 20 77 69 74 68 20 61 7a 43 6f 6c 5b 69 5d 3d 3d   with azCol[i]==
121f0 30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  0..*/.static cha
12200 72 20 2a 2a 74 61 62 6c 65 43 6f 6c 75 6d 6e 4c  r **tableColumnL
12210 69 73 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  ist(ShellState *
12220 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
12230 54 61 62 29 7b 0a 20 20 63 68 61 72 20 2a 2a 61  Tab){.  char **a
12240 7a 43 6f 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69  zCol = 0;.  sqli
12250 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
12260 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
12270 20 69 6e 74 20 6e 43 6f 6c 20 3d 20 30 3b 0a 20   int nCol = 0;. 
12280 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b   int nAlloc = 0;
12290 0a 20 20 69 6e 74 20 6e 50 4b 20 3d 20 30 3b 20  .  int nPK = 0; 
122a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
122b0 6f 66 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  of PRIMARY KEY c
122c0 6f 6c 75 6d 6e 73 20 73 65 65 6e 20 2a 2f 0a 20  olumns seen */. 
122d0 20 69 6e 74 20 69 73 49 50 4b 20 3d 20 30 3b 20   int isIPK = 0; 
122e0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f      /* True if o
122f0 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  ne PRIMARY KEY c
12300 6f 6c 75 6d 6e 20 6f 66 20 74 79 70 65 20 49 4e  olumn of type IN
12310 54 45 47 45 52 20 2a 2f 0a 20 20 69 6e 74 20 70  TEGER */.  int p
12320 72 65 73 65 72 76 65 52 6f 77 69 64 20 3d 20 53  reserveRowid = S
12330 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
12340 48 46 4c 47 5f 50 72 65 73 65 72 76 65 52 6f 77  HFLG_PreserveRow
12350 69 64 29 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  id);.  int rc;..
12360 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
12370 5f 6d 70 72 69 6e 74 66 28 22 50 52 41 47 4d 41  _mprintf("PRAGMA
12380 20 74 61 62 6c 65 5f 69 6e 66 6f 3d 25 51 22 2c   table_info=%Q",
12390 20 7a 54 61 62 29 3b 0a 20 20 72 63 20 3d 20 73   zTab);.  rc = s
123a0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
123b0 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d  2(p->db, zSql, -
123c0 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
123d0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
123e0 71 6c 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ql);.  if( rc ) 
123f0 72 65 74 75 72 6e 20 30 3b 0a 20 20 77 68 69 6c  return 0;.  whil
12400 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  e( sqlite3_step(
12410 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52  pStmt)==SQLITE_R
12420 4f 57 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 43  OW ){.    if( nC
12430 6f 6c 3e 3d 6e 41 6c 6c 6f 63 2d 32 20 29 7b 0a  ol>=nAlloc-2 ){.
12440 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e        nAlloc = n
12450 41 6c 6c 6f 63 2a 32 20 2b 20 6e 43 6f 6c 20 2b  Alloc*2 + nCol +
12460 20 31 30 3b 0a 20 20 20 20 20 20 61 7a 43 6f 6c   10;.      azCol
12470 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c   = sqlite3_reall
12480 6f 63 28 61 7a 43 6f 6c 2c 20 6e 41 6c 6c 6f 63  oc(azCol, nAlloc
12490 2a 73 69 7a 65 6f 66 28 61 7a 43 6f 6c 5b 30 5d  *sizeof(azCol[0]
124a0 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a  ));.      if( az
124b0 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Col==0 ){.      
124c0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
124d0 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74  err, "Error: out
124e0 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a   of memory\n");.
124f0 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b          exit(1);
12500 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
12510 20 20 20 61 7a 43 6f 6c 5b 2b 2b 6e 43 6f 6c 5d     azCol[++nCol]
12520 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
12530 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74 65 33  tf("%s", sqlite3
12540 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
12550 6d 74 2c 20 31 29 29 3b 0a 20 20 20 20 69 66 28  mt, 1));.    if(
12560 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
12570 69 6e 74 28 70 53 74 6d 74 2c 20 35 29 20 29 7b  int(pStmt, 5) ){
12580 0a 20 20 20 20 20 20 6e 50 4b 2b 2b 3b 0a 20 20  .      nPK++;.  
12590 20 20 20 20 69 66 28 20 6e 50 4b 3d 3d 31 0a 20      if( nPK==1. 
125a0 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
125b0 5f 73 74 72 69 63 6d 70 28 28 63 6f 6e 73 74 20  _stricmp((const 
125c0 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
125d0 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c  lumn_text(pStmt,
125e0 32 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  2),.            
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
12600 4e 54 45 47 45 52 22 29 3d 3d 30 0a 20 20 20 20  NTEGER")==0.    
12610 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 73 49    ){.        isI
12620 50 4b 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  PK = 1;.      }e
12630 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 73 49  lse{.        isI
12640 50 4b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  PK = 0;.      }.
12650 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
12660 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
12670 6d 74 29 3b 0a 20 20 69 66 28 20 61 7a 43 6f 6c  mt);.  if( azCol
12680 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
12690 20 20 61 7a 43 6f 6c 5b 30 5d 20 3d 20 30 3b 0a    azCol[0] = 0;.
126a0 20 20 61 7a 43 6f 6c 5b 6e 43 6f 6c 2b 31 5d 20    azCol[nCol+1] 
126b0 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 64  = 0;..  /* The d
126c0 65 63 69 73 69 6f 6e 20 6f 66 20 77 68 65 74 68  ecision of wheth
126d0 65 72 20 6f 72 20 6e 6f 74 20 61 20 72 6f 77 69  er or not a rowi
126e0 64 20 72 65 61 6c 6c 79 20 6e 65 65 64 73 20 74  d really needs t
126f0 6f 20 62 65 20 70 72 65 73 65 72 76 65 64 0a 20  o be preserved. 
12700 20 2a 2a 20 69 73 20 74 72 69 63 6b 79 2e 20 20   ** is tricky.  
12710 57 65 20 6e 65 76 65 72 20 6e 65 65 64 20 74 6f  We never need to
12720 20 70 72 65 73 65 72 76 65 20 61 20 72 6f 77 69   preserve a rowi
12730 64 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20  d for a WITHOUT 
12740 52 4f 57 49 44 20 74 61 62 6c 65 0a 20 20 2a 2a  ROWID table.  **
12750 20 6f 72 20 61 20 74 61 62 6c 65 20 77 69 74 68   or a table with
12760 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
12770 41 52 59 20 4b 45 59 2e 20 20 57 65 20 61 72 65  ARY KEY.  We are
12780 20 75 6e 61 62 6c 65 20 74 6f 20 70 72 65 73 65   unable to prese
12790 72 76 65 0a 20 20 2a 2a 20 72 6f 77 69 64 73 20  rve.  ** rowids 
127a0 6f 6e 20 74 61 62 6c 65 73 20 77 68 65 72 65 20  on tables where 
127b0 74 68 65 20 72 6f 77 69 64 20 69 73 20 69 6e 61  the rowid is ina
127c0 63 63 65 73 73 69 62 6c 65 20 62 65 63 61 75 73  ccessible becaus
127d0 65 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65  e there are othe
127e0 72 0a 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 20 69  r.  ** columns i
127f0 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
12800 64 20 22 72 6f 77 69 64 22 2c 20 22 5f 72 6f 77  d "rowid", "_row
12810 69 64 5f 22 2c 20 61 6e 64 20 22 6f 69 64 22 2e  id_", and "oid".
12820 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 72 65 73  .  */.  if( pres
12830 65 72 76 65 52 6f 77 69 64 20 26 26 20 69 73 49  erveRowid && isI
12840 50 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  PK ){.    /* If 
12850 61 20 73 69 6e 67 6c 65 20 50 52 49 4d 41 52 59  a single PRIMARY
12860 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 77 69 74 68   KEY column with
12870 20 74 79 70 65 20 49 4e 54 45 47 45 52 20 77 61   type INTEGER wa
12880 73 20 73 65 65 6e 2c 20 74 68 65 6e 20 69 74 0a  s seen, then it.
12890 20 20 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20      ** might be 
128a0 61 6e 20 61 6c 69 73 65 20 66 6f 72 20 74 68 65  an alise for the
128b0 20 52 4f 57 49 44 2e 20 20 42 75 74 20 69 74 20   ROWID.  But it 
128c0 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20  might also be a 
128d0 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a 20 20  WITHOUT ROWID.  
128e0 20 20 2a 2a 20 74 61 62 6c 65 20 6f 72 20 61 20    ** table or a 
128f0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
12900 4b 45 59 20 44 45 53 43 20 63 6f 6c 75 6d 6e 2c  KEY DESC column,
12910 20 6e 65 69 74 68 65 72 20 6f 66 20 77 68 69 63   neither of whic
12920 68 20 61 72 65 0a 20 20 20 20 2a 2a 20 52 4f 57  h are.    ** ROW
12930 49 44 20 61 6c 69 61 73 65 73 2e 20 20 54 6f 20  ID aliases.  To 
12940 64 69 73 74 69 6e 67 75 69 73 68 20 74 68 65 73  distinguish thes
12950 65 20 63 61 73 65 73 2c 20 63 68 65 63 6b 20 74  e cases, check t
12960 6f 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  o see if.    ** 
12970 74 68 65 72 65 20 69 73 20 61 20 22 70 6b 22 20  there is a "pk" 
12980 65 6e 74 72 79 20 69 6e 20 22 50 52 41 47 4d 41  entry in "PRAGMA
12990 20 69 6e 64 65 78 5f 6c 69 73 74 22 2e 20 20 54   index_list".  T
129a0 68 65 72 65 20 77 69 6c 6c 20 62 65 0a 20 20 20  here will be.   
129b0 20 2a 2a 20 6e 6f 20 22 70 6b 22 20 69 6e 64 65   ** no "pk" inde
129c0 78 20 69 66 20 74 68 65 20 50 52 49 4d 41 52 59  x if the PRIMARY
129d0 20 4b 45 59 20 72 65 61 6c 6c 79 20 69 73 20 61   KEY really is a
129e0 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
129f0 52 4f 57 49 44 2e 0a 20 20 20 20 2a 2f 0a 20 20  ROWID..    */.  
12a00 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
12a10 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54  _mprintf("SELECT
12a20 20 31 20 46 52 4f 4d 20 70 72 61 67 6d 61 5f 69   1 FROM pragma_i
12a30 6e 64 65 78 5f 6c 69 73 74 28 25 51 29 22 0a 20  ndex_list(%Q)". 
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a50 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52            " WHER
12a60 45 20 6f 72 69 67 69 6e 3d 27 70 6b 27 22 2c 20  E origin='pk'", 
12a70 7a 54 61 62 29 3b 0a 20 20 20 20 72 63 20 3d 20  zTab);.    rc = 
12a80 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
12a90 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
12aa0 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
12ab0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
12ac0 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20  (zSql);.    if( 
12ad0 72 63 20 29 7b 0a 20 20 20 20 20 20 66 72 65 65  rc ){.      free
12ae0 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f 6c  ColumnList(azCol
12af0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
12b00 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  0;.    }.    rc 
12b10 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
12b20 53 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  Stmt);.    sqlit
12b30 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
12b40 74 29 3b 0a 20 20 20 20 70 72 65 73 65 72 76 65  t);.    preserve
12b50 52 6f 77 69 64 20 3d 20 72 63 3d 3d 53 51 4c 49  Rowid = rc==SQLI
12b60 54 45 5f 52 4f 57 3b 0a 20 20 7d 0a 20 20 69 66  TE_ROW;.  }.  if
12b70 28 20 70 72 65 73 65 72 76 65 52 6f 77 69 64 20  ( preserveRowid 
12b80 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70  ){.    /* Only p
12b90 72 65 73 65 72 76 65 20 74 68 65 20 72 6f 77 69  reserve the rowi
12ba0 64 20 69 66 20 77 65 20 63 61 6e 20 66 69 6e 64  d if we can find
12bb0 20 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 66   a name to use f
12bc0 6f 72 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 6f  or the.    ** ro
12bd0 77 69 64 20 2a 2f 0a 20 20 20 20 73 74 61 74 69  wid */.    stati
12be0 63 20 63 68 61 72 20 2a 61 7a 52 6f 77 69 64 5b  c char *azRowid[
12bf0 5d 20 3d 20 7b 20 22 72 6f 77 69 64 22 2c 20 22  ] = { "rowid", "
12c00 5f 72 6f 77 69 64 5f 22 2c 20 22 6f 69 64 22 20  _rowid_", "oid" 
12c10 7d 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 3b  };.    int i, j;
12c20 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  .    for(j=0; j<
12c30 33 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 66  3; j++){.      f
12c40 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 43 6f 6c 3b  or(i=1; i<=nCol;
12c50 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
12c60 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63  f( sqlite3_stric
12c70 6d 70 28 61 7a 52 6f 77 69 64 5b 6a 5d 2c 61 7a  mp(azRowid[j],az
12c80 43 6f 6c 5b 69 5d 29 3d 3d 30 20 29 20 62 72 65  Col[i])==0 ) bre
12c90 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
12ca0 20 20 69 66 28 20 69 3e 6e 43 6f 6c 20 29 7b 0a    if( i>nCol ){.
12cb0 20 20 20 20 20 20 20 20 2f 2a 20 41 74 20 74 68          /* At th
12cc0 69 73 20 70 6f 69 6e 74 2c 20 77 65 20 6b 6e 6f  is point, we kno
12cd0 77 20 74 68 61 74 20 61 7a 52 6f 77 69 64 5b 6a  w that azRowid[j
12ce0 5d 20 69 73 20 6e 6f 74 20 74 68 65 20 6e 61 6d  ] is not the nam
12cf0 65 20 6f 66 20 61 6e 79 0a 20 20 20 20 20 20 20  e of any.       
12d00 20 2a 2a 20 6f 72 64 69 6e 61 72 79 20 63 6f 6c   ** ordinary col
12d10 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65  umn in the table
12d20 2e 20 20 56 65 72 69 66 79 20 74 68 61 74 20 61  .  Verify that a
12d30 7a 52 6f 77 69 64 5b 6a 5d 20 69 73 20 61 20 76  zRowid[j] is a v
12d40 61 6c 69 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  alid.        ** 
12d50 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 72 6f 77  name for the row
12d60 69 64 20 62 65 66 6f 72 65 20 61 64 64 69 6e 67  id before adding
12d70 20 69 74 20 74 6f 20 61 7a 43 6f 6c 5b 30 5d 2e   it to azCol[0].
12d80 20 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a    WITHOUT ROWID.
12d90 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
12da0 73 20 77 69 6c 6c 20 66 61 69 6c 20 74 68 69 73  s will fail this
12db0 20 6c 61 73 74 20 63 68 65 63 6b 20 2a 2f 0a 20   last check */. 
12dc0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
12dd0 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
12de0 5f 6d 65 74 61 64 61 74 61 28 70 2d 3e 64 62 2c  _metadata(p->db,
12df0 30 2c 7a 54 61 62 2c 61 7a 52 6f 77 69 64 5b 6a  0,zTab,azRowid[j
12e00 5d 2c 30 2c 30 2c 30 2c 30 2c 30 29 3b 0a 20 20  ],0,0,0,0,0);.  
12e10 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
12e20 4c 49 54 45 5f 4f 4b 20 29 20 61 7a 43 6f 6c 5b  LITE_OK ) azCol[
12e30 30 5d 20 3d 20 61 7a 52 6f 77 69 64 5b 6a 5d 3b  0] = azRowid[j];
12e40 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
12e50 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
12e60 7d 0a 20 20 72 65 74 75 72 6e 20 61 7a 43 6f 6c  }.  return azCol
12e70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 6f 67 67 6c  ;.}../*.** Toggl
12e80 65 20 74 68 65 20 72 65 76 65 72 73 65 5f 75 6e  e the reverse_un
12e90 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 20  ordered_selects 
12ea0 73 65 74 74 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74  setting..*/.stat
12eb0 69 63 20 76 6f 69 64 20 74 6f 67 67 6c 65 53 65  ic void toggleSe
12ec0 6c 65 63 74 4f 72 64 65 72 28 73 71 6c 69 74 65  lectOrder(sqlite
12ed0 33 20 2a 64 62 29 7b 0a 20 20 73 71 6c 69 74 65  3 *db){.  sqlite
12ee0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
12ef0 30 3b 0a 20 20 69 6e 74 20 69 53 65 74 74 69 6e  0;.  int iSettin
12f00 67 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 53  g = 0;.  char zS
12f10 74 6d 74 5b 31 30 30 5d 3b 0a 20 20 73 71 6c 69  tmt[100];.  sqli
12f20 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64  te3_prepare_v2(d
12f30 62 2c 20 22 50 52 41 47 4d 41 20 72 65 76 65 72  b, "PRAGMA rever
12f40 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73 65 6c  se_unordered_sel
12f50 65 63 74 73 22 2c 20 2d 31 2c 20 26 70 53 74 6d  ects", -1, &pStm
12f60 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 73 71 6c  t, 0);.  if( sql
12f70 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
12f80 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a  ==SQLITE_ROW ){.
12f90 20 20 20 20 69 53 65 74 74 69 6e 67 20 3d 20 73      iSetting = s
12fa0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
12fb0 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 7d  t(pStmt, 0);.  }
12fc0 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
12fd0 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 73 71  ize(pStmt);.  sq
12fe0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
12ff0 69 7a 65 6f 66 28 7a 53 74 6d 74 29 2c 20 7a 53  izeof(zStmt), zS
13000 74 6d 74 2c 0a 20 20 20 20 20 20 20 22 50 52 41  tmt,.       "PRA
13010 47 4d 41 20 72 65 76 65 72 73 65 5f 75 6e 6f 72  GMA reverse_unor
13020 64 65 72 65 64 5f 73 65 6c 65 63 74 73 28 25 64  dered_selects(%d
13030 29 22 2c 20 21 69 53 65 74 74 69 6e 67 29 3b 0a  )", !iSetting);.
13040 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64    sqlite3_exec(d
13050 62 2c 20 7a 53 74 6d 74 2c 20 30 2c 20 30 2c 20  b, zStmt, 0, 0, 
13060 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  0);.}../*.** Thi
13070 73 20 69 73 20 61 20 64 69 66 66 65 72 65 6e 74  s is a different
13080 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   callback routin
13090 65 20 75 73 65 64 20 66 6f 72 20 64 75 6d 70 69  e used for dumpi
130a0 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ng the database.
130b0 0a 2a 2a 20 45 61 63 68 20 72 6f 77 20 72 65 63  .** Each row rec
130c0 65 69 76 65 64 20 62 79 20 74 68 69 73 20 63 61  eived by this ca
130d0 6c 6c 62 61 63 6b 20 63 6f 6e 73 69 73 74 73 20  llback consists 
130e0 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c  of a table name,
130f0 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 79  .** the table ty
13100 70 65 20 28 22 69 6e 64 65 78 22 20 6f 72 20 22  pe ("index" or "
13110 74 61 62 6c 65 22 29 20 61 6e 64 20 53 51 4c 20  table") and SQL 
13120 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 74 61  to create the ta
13130 62 6c 65 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ble..** This rou
13140 74 69 6e 65 20 73 68 6f 75 6c 64 20 70 72 69 6e  tine should prin
13150 74 20 74 65 78 74 20 73 75 66 66 69 63 69 65 6e  t text sufficien
13160 74 20 74 6f 20 72 65 63 72 65 61 74 65 20 74 68  t to recreate th
13170 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74  e table..*/.stat
13180 69 63 20 69 6e 74 20 64 75 6d 70 5f 63 61 6c 6c  ic int dump_call
13190 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72 67 2c  back(void *pArg,
131a0 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61 72 20   int nArg, char 
131b0 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72 20 2a 2a  **azArg, char **
131c0 61 7a 4e 6f 74 55 73 65 64 29 7b 0a 20 20 69 6e  azNotUsed){.  in
131d0 74 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20 63 68  t rc;.  const ch
131e0 61 72 20 2a 7a 54 61 62 6c 65 3b 0a 20 20 63 6f  ar *zTable;.  co
131f0 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
13200 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13210 53 71 6c 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74  Sql;.  ShellStat
13220 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74 61  e *p = (ShellSta
13230 74 65 20 2a 29 70 41 72 67 3b 0a 0a 20 20 55 4e  te *)pArg;..  UN
13240 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61  USED_PARAMETER(a
13250 7a 4e 6f 74 55 73 65 64 29 3b 0a 20 20 69 66 28  zNotUsed);.  if(
13260 20 6e 41 72 67 21 3d 33 20 7c 7c 20 61 7a 41 72   nArg!=3 || azAr
13270 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  g==0 ) return 0;
13280 0a 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41 72  .  zTable = azAr
13290 67 5b 30 5d 3b 0a 20 20 7a 54 79 70 65 20 3d 20  g[0];.  zType = 
132a0 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 7a 53 71 6c  azArg[1];.  zSql
132b0 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 0a 20 20   = azArg[2];..  
132c0 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62 6c  if( strcmp(zTabl
132d0 65 2c 20 22 73 71 6c 69 74 65 5f 73 65 71 75 65  e, "sqlite_seque
132e0 6e 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nce")==0 ){.    
132f0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
13300 74 2c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20  t, "DELETE FROM 
13310 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b  sqlite_sequence;
13320 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  \n");.  }else if
13330 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f  ( sqlite3_strglo
13340 62 28 22 73 71 6c 69 74 65 5f 73 74 61 74 3f 22  b("sqlite_stat?"
13350 2c 20 7a 54 61 62 6c 65 29 3d 3d 30 20 29 7b 0a  , zTable)==0 ){.
13360 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
13370 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20  ->out, "ANALYZE 
13380 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e  sqlite_master;\n
13390 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
133a0 73 74 72 6e 63 6d 70 28 7a 54 61 62 6c 65 2c 20  strncmp(zTable, 
133b0 22 73 71 6c 69 74 65 5f 22 2c 20 37 29 3d 3d 30  "sqlite_", 7)==0
133c0 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
133d0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
133e0 72 6e 63 6d 70 28 7a 53 71 6c 2c 20 22 43 52 45  rncmp(zSql, "CRE
133f0 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
13400 45 22 2c 20 32 30 29 3d 3d 30 20 29 7b 0a 20 20  E", 20)==0 ){.  
13410 20 20 63 68 61 72 20 2a 7a 49 6e 73 3b 0a 20 20    char *zIns;.  
13420 20 20 69 66 28 20 21 70 2d 3e 77 72 69 74 61 62    if( !p->writab
13430 6c 65 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20  leSchema ){.    
13440 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
13450 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 77 72 69  out, "PRAGMA wri
13460 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b  table_schema=ON;
13470 5c 6e 22 29 3b 0a 20 20 20 20 20 20 70 2d 3e 77  \n");.      p->w
13480 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20 3d 20  ritableSchema = 
13490 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 49 6e  1;.    }.    zIn
134a0 73 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  s = sqlite3_mpri
134b0 6e 74 66 28 0a 20 20 20 20 20 20 20 22 49 4e 53  ntf(.       "INS
134c0 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f  ERT INTO sqlite_
134d0 6d 61 73 74 65 72 28 74 79 70 65 2c 6e 61 6d 65  master(type,name
134e0 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70 61  ,tbl_name,rootpa
134f0 67 65 2c 73 71 6c 29 22 0a 20 20 20 20 20 20 20  ge,sql)".       
13500 22 56 41 4c 55 45 53 28 27 74 61 62 6c 65 27 2c  "VALUES('table',
13510 27 25 71 27 2c 27 25 71 27 2c 30 2c 27 25 71 27  '%q','%q',0,'%q'
13520 29 3b 22 2c 0a 20 20 20 20 20 20 20 7a 54 61 62  );",.       zTab
13530 6c 65 2c 20 7a 54 61 62 6c 65 2c 20 7a 53 71 6c  le, zTable, zSql
13540 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
13550 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e  tf(p->out, "%s\n
13560 22 2c 20 7a 49 6e 73 29 3b 0a 20 20 20 20 73 71  ", zIns);.    sq
13570 6c 69 74 65 33 5f 66 72 65 65 28 7a 49 6e 73 29  lite3_free(zIns)
13580 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
13590 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 72 69    }else{.    pri
135a0 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70 2d 3e  ntSchemaLine(p->
135b0 6f 75 74 2c 20 7a 53 71 6c 2c 20 22 3b 5c 6e 22  out, zSql, ";\n"
135c0 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 73 74  );.  }..  if( st
135d0 72 63 6d 70 28 7a 54 79 70 65 2c 20 22 74 61 62  rcmp(zType, "tab
135e0 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53  le")==0 ){.    S
135f0 68 65 6c 6c 54 65 78 74 20 73 53 65 6c 65 63 74  hellText sSelect
13600 3b 0a 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20  ;.    ShellText 
13610 73 54 61 62 6c 65 3b 0a 20 20 20 20 63 68 61 72  sTable;.    char
13620 20 2a 2a 61 7a 43 6f 6c 3b 0a 20 20 20 20 69 6e   **azCol;.    in
13630 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 2a 73  t i;.    char *s
13640 61 76 65 64 44 65 73 74 54 61 62 6c 65 3b 0a 20  avedDestTable;. 
13650 20 20 20 69 6e 74 20 73 61 76 65 64 4d 6f 64 65     int savedMode
13660 3b 0a 0a 20 20 20 20 61 7a 43 6f 6c 20 3d 20 74  ;..    azCol = t
13670 61 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 70  ableColumnList(p
13680 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 69  , zTable);.    i
13690 66 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20  f( azCol==0 ){. 
136a0 20 20 20 20 20 70 2d 3e 6e 45 72 72 2b 2b 3b 0a       p->nErr++;.
136b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a        return 0;.
136c0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 41 6c      }..    /* Al
136d0 77 61 79 73 20 71 75 6f 74 65 20 74 68 65 20 74  ways quote the t
136e0 61 62 6c 65 20 6e 61 6d 65 2c 20 65 76 65 6e 20  able name, even 
136f0 69 66 20 69 74 20 61 70 70 65 61 72 73 20 74 6f  if it appears to
13700 20 62 65 20 70 75 72 65 20 61 73 63 69 69 2c 0a   be pure ascii,.
13710 20 20 20 20 2a 2a 20 69 6e 20 63 61 73 65 20 69      ** in case i
13720 74 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20  t is a keyword. 
13730 45 78 3a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  Ex:  INSERT INTO
13740 20 22 74 61 62 6c 65 22 20 2e 2e 2e 20 2a 2f 0a   "table" ... */.
13750 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 54      initText(&sT
13760 61 62 6c 65 29 3b 0a 20 20 20 20 61 70 70 65 6e  able);.    appen
13770 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20 7a  dText(&sTable, z
13780 54 61 62 6c 65 2c 20 71 75 6f 74 65 43 68 61 72  Table, quoteChar
13790 28 7a 54 61 62 6c 65 29 29 3b 0a 20 20 20 20 2f  (zTable));.    /
137a0 2a 20 49 66 20 70 72 65 73 65 72 76 69 6e 67 20  * If preserving 
137b0 74 68 65 20 72 6f 77 69 64 2c 20 61 64 64 20 61  the rowid, add a
137c0 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 66 74   column list aft
137d0 65 72 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  er the table nam
137e0 65 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 6f 74 68  e..    ** In oth
137f0 65 72 20 77 6f 72 64 73 3a 20 20 22 49 4e 53 45  er words:  "INSE
13800 52 54 20 49 4e 54 4f 20 74 61 62 28 72 6f 77 69  RT INTO tab(rowi
13810 64 2c 61 2c 62 2c 63 2c 2e 2e 2e 29 20 56 41 4c  d,a,b,c,...) VAL
13820 55 45 53 28 2e 2e 2e 29 22 0a 20 20 20 20 2a 2a  UES(...)".    **
13830 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
13840 75 73 75 61 6c 20 22 49 4e 53 45 52 54 20 49 4e  usual "INSERT IN
13850 54 4f 20 74 61 62 20 56 41 4c 55 45 53 28 2e 2e  TO tab VALUES(..
13860 2e 29 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  .)"..    */.    
13870 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b 0a  if( azCol[0] ){.
13880 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
13890 28 26 73 54 61 62 6c 65 2c 20 22 28 22 2c 20 30  (&sTable, "(", 0
138a0 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54  );.      appendT
138b0 65 78 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43  ext(&sTable, azC
138c0 6f 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20  ol[0], 0);.     
138d0 20 66 6f 72 28 69 3d 31 3b 20 61 7a 43 6f 6c 5b   for(i=1; azCol[
138e0 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  i]; i++){.      
138f0 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 54    appendText(&sT
13900 61 62 6c 65 2c 20 22 2c 22 2c 20 30 29 3b 0a 20  able, ",", 0);. 
13910 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
13920 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43 6f 6c  t(&sTable, azCol
13930 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28 61  [i], quoteChar(a
13940 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20 20  zCol[i]));.     
13950 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54   }.      appendT
13960 65 78 74 28 26 73 54 61 62 6c 65 2c 20 22 29 22  ext(&sTable, ")"
13970 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  , 0);.    }..   
13980 20 2f 2a 20 42 75 69 6c 64 20 61 6e 20 61 70 70   /* Build an app
13990 72 6f 70 72 69 61 74 65 20 53 45 4c 45 43 54 20  ropriate SELECT 
139a0 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20  statement */.   
139b0 20 69 6e 69 74 54 65 78 74 28 26 73 53 65 6c 65   initText(&sSele
139c0 63 74 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  ct);.    appendT
139d0 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53  ext(&sSelect, "S
139e0 45 4c 45 43 54 20 22 2c 20 30 29 3b 0a 20 20 20  ELECT ", 0);.   
139f0 20 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b   if( azCol[0] ){
13a00 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78  .      appendTex
13a10 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43 6f  t(&sSelect, azCo
13a20 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20  l[0], 0);.      
13a30 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
13a40 65 63 74 2c 20 22 2c 22 2c 20 30 29 3b 0a 20 20  ect, ",", 0);.  
13a50 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b    }.    for(i=1;
13a60 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29 7b   azCol[i]; i++){
13a70 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78  .      appendTex
13a80 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43 6f  t(&sSelect, azCo
13a90 6c 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28  l[i], quoteChar(
13aa0 61 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20  azCol[i]));.    
13ab0 20 20 69 66 28 20 61 7a 43 6f 6c 5b 69 2b 31 5d    if( azCol[i+1]
13ac0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65   ){.        appe
13ad0 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
13ae0 20 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20   ",", 0);.      
13af0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65 65  }.    }.    free
13b00 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f 6c  ColumnList(azCol
13b10 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78  );.    appendTex
13b20 74 28 26 73 53 65 6c 65 63 74 2c 20 22 20 46 52  t(&sSelect, " FR
13b30 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 61 70  OM ", 0);.    ap
13b40 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
13b50 74 2c 20 7a 54 61 62 6c 65 2c 20 71 75 6f 74 65  t, zTable, quote
13b60 43 68 61 72 28 7a 54 61 62 6c 65 29 29 3b 0a 0a  Char(zTable));..
13b70 20 20 20 20 73 61 76 65 64 44 65 73 74 54 61 62      savedDestTab
13b80 6c 65 20 3d 20 70 2d 3e 7a 44 65 73 74 54 61 62  le = p->zDestTab
13b90 6c 65 3b 0a 20 20 20 20 73 61 76 65 64 4d 6f 64  le;.    savedMod
13ba0 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20  e = p->mode;.   
13bb0 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d   p->zDestTable =
13bc0 20 73 54 61 62 6c 65 2e 7a 3b 0a 20 20 20 20 70   sTable.z;.    p
13bd0 2d 3e 6d 6f 64 65 20 3d 20 70 2d 3e 63 4d 6f 64  ->mode = p->cMod
13be0 65 20 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b  e = MODE_Insert;
13bf0 0a 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f  .    rc = shell_
13c00 65 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c  exec(p->db, sSel
13c10 65 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c  ect.z, shell_cal
13c20 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20  lback, p, 0);.  
13c30 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
13c40 3d 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20  =SQLITE_CORRUPT 
13c50 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
13c60 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a  ntf(p->out, "/**
13c70 2a 2a 2a 2a 20 43 4f 52 52 55 50 54 49 4f 4e 20  **** CORRUPTION 
13c80 45 52 52 4f 52 20 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e  ERROR *******/\n
13c90 22 29 3b 0a 20 20 20 20 20 20 74 6f 67 67 6c 65  ");.      toggle
13ca0 53 65 6c 65 63 74 4f 72 64 65 72 28 70 2d 3e 64  SelectOrder(p->d
13cb0 62 29 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f  b);.      shell_
13cc0 65 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c  exec(p->db, sSel
13cd0 65 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c  ect.z, shell_cal
13ce0 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20  lback, p, 0);.  
13cf0 20 20 20 20 74 6f 67 67 6c 65 53 65 6c 65 63 74      toggleSelect
13d00 4f 72 64 65 72 28 70 2d 3e 64 62 29 3b 0a 20 20  Order(p->db);.  
13d10 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 44 65 73 74    }.    p->zDest
13d20 54 61 62 6c 65 20 3d 20 73 61 76 65 64 44 65 73  Table = savedDes
13d30 74 54 61 62 6c 65 3b 0a 20 20 20 20 70 2d 3e 6d  tTable;.    p->m
13d40 6f 64 65 20 3d 20 73 61 76 65 64 4d 6f 64 65 3b  ode = savedMode;
13d50 0a 20 20 20 20 66 72 65 65 54 65 78 74 28 26 73  .    freeText(&s
13d60 54 61 62 6c 65 29 3b 0a 20 20 20 20 66 72 65 65  Table);.    free
13d70 54 65 78 74 28 26 73 53 65 6c 65 63 74 29 3b 0a  Text(&sSelect);.
13d80 20 20 20 20 69 66 28 20 72 63 20 29 20 70 2d 3e      if( rc ) p->
13d90 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65  nErr++;.  }.  re
13da0 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
13db0 20 52 75 6e 20 7a 51 75 65 72 79 2e 20 20 55 73   Run zQuery.  Us
13dc0 65 20 64 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 28  e dump_callback(
13dd0 29 20 61 73 20 74 68 65 20 63 61 6c 6c 62 61 63  ) as the callbac
13de0 6b 20 72 6f 75 74 69 6e 65 20 73 6f 20 74 68 61  k routine so tha
13df0 74 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  t.** the content
13e00 73 20 6f 66 20 74 68 65 20 71 75 65 72 79 20 61  s of the query a
13e10 72 65 20 6f 75 74 70 75 74 20 61 73 20 53 51 4c  re output as SQL
13e20 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
13e30 2a 2a 20 49 66 20 77 65 20 67 65 74 20 61 20 53  ** If we get a S
13e40 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
13e50 72 6f 72 2c 20 72 65 72 75 6e 20 74 68 65 20 71  ror, rerun the q
13e60 75 65 72 79 20 61 66 74 65 72 20 61 70 70 65 6e  uery after appen
13e70 64 69 6e 67 0a 2a 2a 20 22 4f 52 44 45 52 20 42  ding.** "ORDER B
13e80 59 20 72 6f 77 69 64 20 44 45 53 43 22 20 74 6f  Y rowid DESC" to
13e90 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 61   the end..*/.sta
13ea0 74 69 63 20 69 6e 74 20 72 75 6e 5f 73 63 68 65  tic int run_sche
13eb0 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 0a 20  ma_dump_query(. 
13ec0 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a   ShellState *p,.
13ed0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51    const char *zQ
13ee0 75 65 72 79 0a 29 7b 0a 20 20 69 6e 74 20 72 63  uery.){.  int rc
13ef0 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d  ;.  char *zErr =
13f00 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
13f10 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a  e3_exec(p->db, z
13f20 51 75 65 72 79 2c 20 64 75 6d 70 5f 63 61 6c 6c  Query, dump_call
13f30 62 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b  back, p, &zErr);
13f40 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
13f50 45 5f 43 4f 52 52 55 50 54 20 29 7b 0a 20 20 20  E_CORRUPT ){.   
13f60 20 63 68 61 72 20 2a 7a 51 32 3b 0a 20 20 20 20   char *zQ2;.    
13f70 69 6e 74 20 6c 65 6e 20 3d 20 73 74 72 6c 65 6e  int len = strlen
13f80 33 30 28 7a 51 75 65 72 79 29 3b 0a 20 20 20 20  30(zQuery);.    
13f90 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
13fa0 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 43 4f 52 52  t, "/****** CORR
13fb0 55 50 54 49 4f 4e 20 45 52 52 4f 52 20 2a 2a 2a  UPTION ERROR ***
13fc0 2a 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20 20 20 20 69  ****/\n");.    i
13fd0 66 28 20 7a 45 72 72 20 29 7b 0a 20 20 20 20 20  f( zErr ){.     
13fe0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
13ff0 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 25 73  out, "/****** %s
14000 20 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 7a 45 72   ******/\n", zEr
14010 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  r);.      sqlite
14020 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20  3_free(zErr);.  
14030 20 20 20 20 7a 45 72 72 20 3d 20 30 3b 0a 20 20      zErr = 0;.  
14040 20 20 7d 0a 20 20 20 20 7a 51 32 20 3d 20 6d 61    }.    zQ2 = ma
14050 6c 6c 6f 63 28 20 6c 65 6e 2b 31 30 30 20 29 3b  lloc( len+100 );
14060 0a 20 20 20 20 69 66 28 20 7a 51 32 3d 3d 30 20  .    if( zQ2==0 
14070 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20  ) return rc;.   
14080 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
14090 66 28 6c 65 6e 2b 31 30 30 2c 20 7a 51 32 2c 20  f(len+100, zQ2, 
140a0 22 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77  "%s ORDER BY row
140b0 69 64 20 44 45 53 43 22 2c 20 7a 51 75 65 72 79  id DESC", zQuery
140c0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
140d0 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
140e0 7a 51 32 2c 20 64 75 6d 70 5f 63 61 6c 6c 62 61  zQ2, dump_callba
140f0 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b 0a 20  ck, p, &zErr);. 
14100 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
14110 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
14120 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20  ->out, "/****** 
14130 45 52 52 4f 52 3a 20 25 73 20 2a 2a 2a 2a 2a 2a  ERROR: %s ******
14140 2f 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20 20 20  /\n", zErr);.   
14150 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
14160 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
14170 54 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  T;.    }.    sql
14180 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b  ite3_free(zErr);
14190 0a 20 20 20 20 66 72 65 65 28 7a 51 32 29 3b 0a  .    free(zQ2);.
141a0 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
141b0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 78 74 20 6f  .}../*.** Text o
141c0 66 20 61 20 68 65 6c 70 20 6d 65 73 73 61 67 65  f a help message
141d0 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  .*/.static char 
141e0 7a 48 65 6c 70 5b 5d 20 3d 0a 23 69 66 6e 64 65  zHelp[] =.#ifnde
141f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
14200 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 22 2e  THORIZATION.  ".
14210 61 75 74 68 20 4f 4e 7c 4f 46 46 20 20 20 20 20  auth ON|OFF     
14220 20 20 20 20 20 20 53 68 6f 77 20 61 75 74 68 6f        Show autho
14230 72 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 73 5c  rizer callbacks\
14240 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 62 61  n".#endif.  ".ba
14250 63 6b 75 70 20 3f 44 42 3f 20 46 49 4c 45 20 20  ckup ?DB? FILE  
14260 20 20 20 20 42 61 63 6b 75 70 20 44 42 20 28 64      Backup DB (d
14270 65 66 61 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29  efault \"main\")
14280 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e   to FILE\n".  ".
14290 62 61 69 6c 20 6f 6e 7c 6f 66 66 20 20 20 20 20  bail on|off     
142a0 20 20 20 20 20 20 53 74 6f 70 20 61 66 74 65 72        Stop after
142b0 20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72 6f   hitting an erro
142c0 72 2e 20 20 44 65 66 61 75 6c 74 20 4f 46 46 5c  r.  Default OFF\
142d0 6e 22 0a 20 20 22 2e 62 69 6e 61 72 79 20 6f 6e  n".  ".binary on
142e0 7c 6f 66 66 20 20 20 20 20 20 20 20 20 54 75 72  |off         Tur
142f0 6e 20 62 69 6e 61 72 79 20 6f 75 74 70 75 74 20  n binary output 
14300 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 44 65 66 61  on or off.  Defa
14310 75 6c 74 20 4f 46 46 5c 6e 22 0a 20 20 22 2e 63  ult OFF\n".  ".c
14320 64 20 44 49 52 45 43 54 4f 52 59 20 20 20 20 20  d DIRECTORY     
14330 20 20 20 20 20 43 68 61 6e 67 65 20 74 68 65 20       Change the 
14340 77 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72  working director
14350 79 20 74 6f 20 44 49 52 45 43 54 4f 52 59 5c 6e  y to DIRECTORY\n
14360 22 0a 20 20 22 2e 63 68 61 6e 67 65 73 20 6f 6e  ".  ".changes on
14370 7c 6f 66 66 20 20 20 20 20 20 20 20 53 68 6f 77  |off        Show
14380 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
14390 63 68 61 6e 67 65 64 20 62 79 20 53 51 4c 5c 6e  changed by SQL\n
143a0 22 0a 20 20 22 2e 63 68 65 63 6b 20 47 4c 4f 42  ".  ".check GLOB
143b0 20 20 20 20 20 20 20 20 20 20 20 20 46 61 69 6c              Fail
143c0 20 69 66 20 6f 75 74 70 75 74 20 73 69 6e 63 65   if output since
143d0 20 2e 74 65 73 74 63 61 73 65 20 64 6f 65 73 20   .testcase does 
143e0 6e 6f 74 20 6d 61 74 63 68 5c 6e 22 0a 20 20 22  not match\n".  "
143f0 2e 63 6c 6f 6e 65 20 4e 45 57 44 42 20 20 20 20  .clone NEWDB    
14400 20 20 20 20 20 20 20 43 6c 6f 6e 65 20 64 61 74         Clone dat
14410 61 20 69 6e 74 6f 20 4e 45 57 44 42 20 66 72 6f  a into NEWDB fro
14420 6d 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 64  m the existing d
14430 61 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64  atabase\n".  ".d
14440 61 74 61 62 61 73 65 73 20 20 20 20 20 20 20 20  atabases        
14450 20 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73 20       List names 
14460 61 6e 64 20 66 69 6c 65 73 20 6f 66 20 61 74 74  and files of att
14470 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 5c  ached databases\
14480 6e 22 0a 20 20 22 2e 64 62 69 6e 66 6f 20 3f 44  n".  ".dbinfo ?D
14490 42 3f 20 20 20 20 20 20 20 20 20 20 20 53 68 6f  B?           Sho
144a0 77 20 73 74 61 74 75 73 20 69 6e 66 6f 72 6d 61  w status informa
144b0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64  tion about the d
144c0 61 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64  atabase\n".  ".d
144d0 75 6d 70 20 3f 54 41 42 4c 45 3f 20 2e 2e 2e 20  ump ?TABLE? ... 
144e0 20 20 20 20 20 44 75 6d 70 20 74 68 65 20 64 61       Dump the da
144f0 74 61 62 61 73 65 20 69 6e 20 61 6e 20 53 51 4c  tabase in an SQL
14500 20 74 65 78 74 20 66 6f 72 6d 61 74 5c 6e 22 0a   text format\n".
14510 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
14520 20 20 20 20 20 20 20 20 20 20 20 20 49 66 20 54              If T
14530 41 42 4c 45 20 73 70 65 63 69 66 69 65 64 2c 20  ABLE specified, 
14540 6f 6e 6c 79 20 64 75 6d 70 20 74 61 62 6c 65 73  only dump tables
14550 20 6d 61 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22   matching\n".  "
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14570 20 20 20 20 20 20 20 20 20 4c 49 4b 45 20 70 61           LIKE pa
14580 74 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a  ttern TABLE.\n".
14590 20 20 22 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66 20    ".echo on|off 
145a0 20 20 20 20 20 20 20 20 20 20 54 75 72 6e 20 63            Turn c
145b0 6f 6d 6d 61 6e 64 20 65 63 68 6f 20 6f 6e 20 6f  ommand echo on o
145c0 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 65 71 70  r off\n".  ".eqp
145d0 20 6f 6e 7c 6f 66 66 7c 66 75 6c 6c 20 20 20 20   on|off|full    
145e0 20 20 20 45 6e 61 62 6c 65 20 6f 72 20 64 69 73     Enable or dis
145f0 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 45  able automatic E
14600 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
14610 4e 5c 6e 22 0a 20 20 22 2e 65 78 69 74 20 20 20  N\n".  ".exit   
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
14630 78 69 74 20 74 68 69 73 20 70 72 6f 67 72 61 6d  xit this program
14640 5c 6e 22 0a 2f 2a 20 42 65 63 61 75 73 65 20 65  \n"./* Because e
14650 78 70 6c 61 69 6e 20 6d 6f 64 65 20 63 6f 6d 65  xplain mode come
14660 73 20 6f 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c  s on automatical
14670 6c 79 20 6e 6f 77 2c 20 74 68 65 20 22 2e 65 78  ly now, the ".ex
14680 70 6c 61 69 6e 22 20 6d 6f 64 65 0a 2a 2a 20 69  plain" mode.** i
14690 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  s removed from t
146a0 68 65 20 68 65 6c 70 20 73 63 72 65 65 6e 2e 20  he help screen. 
146b0 20 49 74 20 69 73 20 73 74 69 6c 6c 20 73 75 70   It is still sup
146c0 70 6f 72 74 65 64 20 66 6f 72 20 6c 65 67 61 63  ported for legac
146d0 79 2c 20 68 6f 77 65 76 65 72 20 2a 2f 0a 2f 2a  y, however */./*
146e0 22 2e 65 78 70 6c 61 69 6e 20 3f 6f 6e 7c 6f 66  ".explain ?on|of
146f0 66 7c 61 75 74 6f 3f 20 54 75 72 6e 20 45 58 50  f|auto? Turn EXP
14700 4c 41 49 4e 20 6f 75 74 70 75 74 20 6d 6f 64 65  LAIN output mode
14710 20 6f 6e 20 6f 72 20 6f 66 66 20 6f 72 20 74 6f   on or off or to
14720 20 61 75 74 6f 6d 61 74 69 63 5c 6e 22 2a 2f 0a   automatic\n"*/.
14730 20 20 22 2e 66 75 6c 6c 73 63 68 65 6d 61 20 3f    ".fullschema ?
14740 2d 2d 69 6e 64 65 6e 74 3f 20 53 68 6f 77 20 73  --indent? Show s
14750 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20 63 6f  chema and the co
14760 6e 74 65 6e 74 20 6f 66 20 73 71 6c 69 74 65 5f  ntent of sqlite_
14770 73 74 61 74 20 74 61 62 6c 65 73 5c 6e 22 0a 20  stat tables\n". 
14780 20 22 2e 68 65 61 64 65 72 73 20 6f 6e 7c 6f 66   ".headers on|of
14790 66 20 20 20 20 20 20 20 20 54 75 72 6e 20 64 69  f        Turn di
147a0 73 70 6c 61 79 20 6f 66 20 68 65 61 64 65 72 73  splay of headers
147b0 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20 20   on or off\n".  
147c0 22 2e 68 65 6c 70 20 20 20 20 20 20 20 20 20 20  ".help          
147d0 20 20 20 20 20 20 20 20 53 68 6f 77 20 74 68 69          Show thi
147e0 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20 20 22  s message\n".  "
147f0 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42  .import FILE TAB
14800 4c 45 20 20 20 20 20 49 6d 70 6f 72 74 20 64 61  LE     Import da
14810 74 61 20 66 72 6f 6d 20 46 49 4c 45 20 69 6e 74  ta from FILE int
14820 6f 20 54 41 42 4c 45 5c 6e 22 0a 23 69 66 6e 64  o TABLE\n".#ifnd
14830 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
14840 45 53 54 5f 43 4f 4e 54 52 4f 4c 0a 20 20 22 2e  EST_CONTROL.  ".
14850 69 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20 54  imposter INDEX T
14860 41 42 4c 45 20 20 43 72 65 61 74 65 20 69 6d 70  ABLE  Create imp
14870 6f 73 74 65 72 20 74 61 62 6c 65 20 54 41 42 4c  oster table TABL
14880 45 20 6f 6e 20 69 6e 64 65 78 20 49 4e 44 45 58  E on index INDEX
14890 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 69  \n".#endif.  ".i
148a0 6e 64 65 78 65 73 20 3f 54 41 42 4c 45 3f 20 20  ndexes ?TABLE?  
148b0 20 20 20 20 20 53 68 6f 77 20 6e 61 6d 65 73 20       Show names 
148c0 6f 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 5c 6e  of all indexes\n
148d0 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 66                If
148f0 20 54 41 42 4c 45 20 73 70 65 63 69 66 69 65 64   TABLE specified
14900 2c 20 6f 6e 6c 79 20 73 68 6f 77 20 69 6e 64 65  , only show inde
14910 78 65 73 20 66 6f 72 20 74 61 62 6c 65 73 5c 6e  xes for tables\n
14920 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61                ma
14940 74 63 68 69 6e 67 20 4c 49 4b 45 20 70 61 74 74  tching LIKE patt
14950 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 23 69  ern TABLE.\n".#i
14960 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
14970 4c 45 5f 49 4f 54 52 41 43 45 0a 20 20 22 2e 69  LE_IOTRACE.  ".i
14980 6f 74 72 61 63 65 20 46 49 4c 45 20 20 20 20 20  otrace FILE     
14990 20 20 20 20 20 45 6e 61 62 6c 65 20 49 2f 4f 20       Enable I/O 
149a0 64 69 61 67 6e 6f 73 74 69 63 20 6c 6f 67 67 69  diagnostic loggi
149b0 6e 67 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 23 65  ng to FILE\n".#e
149c0 6e 64 69 66 0a 20 20 22 2e 6c 69 6d 69 74 20 3f  ndif.  ".limit ?
149d0 4c 49 4d 49 54 3f 20 3f 56 41 4c 3f 20 20 20 44  LIMIT? ?VAL?   D
149e0 69 73 70 6c 61 79 20 6f 72 20 63 68 61 6e 67 65  isplay or change
149f0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 6e   the value of an
14a00 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5c 6e 22   SQLITE_LIMIT\n"
14a10 0a 20 20 22 2e 6c 69 6e 74 20 4f 50 54 49 4f 4e  .  ".lint OPTION
14a20 53 20 20 20 20 20 20 20 20 20 20 52 65 70 6f 72  S          Repor
14a30 74 20 70 6f 74 65 6e 74 69 61 6c 20 73 63 68 65  t potential sche
14a40 6d 61 20 69 73 73 75 65 73 2e 20 4f 70 74 69 6f  ma issues. Optio
14a50 6e 73 3a 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  ns:\n".  "      
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a70 20 20 20 66 6b 65 79 2d 69 6e 64 65 78 65 73 20     fkey-indexes 
14a80 20 20 20 20 46 69 6e 64 20 6d 69 73 73 69 6e 67      Find missing
14a90 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 64   foreign key ind
14aa0 65 78 65 73 5c 6e 22 0a 23 69 66 6e 64 65 66 20  exes\n".#ifndef 
14ab0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
14ac0 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 22 2e 6c  _EXTENSION.  ".l
14ad0 6f 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59 3f  oad FILE ?ENTRY?
14ae0 20 20 20 20 20 4c 6f 61 64 20 61 6e 20 65 78 74       Load an ext
14af0 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 5c 6e  ension library\n
14b00 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 6c 6f 67  ".#endif.  ".log
14b10 20 46 49 4c 45 7c 6f 66 66 20 20 20 20 20 20 20   FILE|off       
14b20 20 20 20 54 75 72 6e 20 6c 6f 67 67 69 6e 67 20     Turn logging 
14b30 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 46 49 4c 45  on or off.  FILE
14b40 20 63 61 6e 20 62 65 20 73 74 64 65 72 72 2f 73   can be stderr/s
14b50 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 6d 6f 64  tdout\n".  ".mod
14b60 65 20 4d 4f 44 45 20 3f 54 41 42 4c 45 3f 20 20  e MODE ?TABLE?  
14b70 20 20 20 53 65 74 20 6f 75 74 70 75 74 20 6d 6f     Set output mo
14b80 64 65 20 77 68 65 72 65 20 4d 4f 44 45 20 69 73  de where MODE is
14b90 20 6f 6e 65 20 6f 66 3a 5c 6e 22 0a 20 20 22 20   one of:\n".  " 
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 20 20 20 20 20 61 73 63 69 69 20 20 20          ascii   
14bc0 20 43 6f 6c 75 6d 6e 73 2f 72 6f 77 73 20 64 65   Columns/rows de
14bd0 6c 69 6d 69 74 65 64 20 62 79 20 30 78 31 46 20  limited by 0x1F 
14be0 61 6e 64 20 30 78 31 45 5c 6e 22 0a 20 20 22 20  and 0x1E\n".  " 
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 20 20 20 20 20 63 73 76 20 20 20 20 20          csv     
14c10 20 43 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64   Comma-separated
14c20 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 20 20   values\n".  "  
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c40 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20 20 20         column   
14c50 4c 65 66 74 2d 61 6c 69 67 6e 65 64 20 63 6f 6c  Left-aligned col
14c60 75 6d 6e 73 2e 20 20 28 53 65 65 20 2e 77 69 64  umns.  (See .wid
14c70 74 68 29 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  th)\n".  "      
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c90 20 20 20 68 74 6d 6c 20 20 20 20 20 48 54 4d 4c     html     HTML
14ca0 20 3c 74 61 62 6c 65 3e 20 63 6f 64 65 5c 6e 22   <table> code\n"
14cb0 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
14cd0 65 72 74 20 20 20 53 51 4c 20 69 6e 73 65 72 74  ert   SQL insert
14ce0 20 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72 20   statements for 
14cf0 54 41 42 4c 45 5c 6e 22 0a 20 20 22 20 20 20 20  TABLE\n".  "    
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d10 20 20 20 20 20 6c 69 6e 65 20 20 20 20 20 4f 6e       line     On
14d20 65 20 76 61 6c 75 65 20 70 65 72 20 6c 69 6e 65  e value per line
14d30 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 6c 69 73 74 20 20 20 20 20 56 61 6c 75 65 73 20  list     Values 
14d60 64 65 6c 69 6d 69 74 65 64 20 62 79 20 5c 22 7c  delimited by \"|
14d70 5c 22 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  \"\n".  "       
14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d90 20 20 71 75 6f 74 65 20 20 20 20 45 73 63 61 70    quote    Escap
14da0 65 20 61 6e 73 77 65 72 73 20 61 73 20 66 6f 72  e answers as for
14db0 20 53 51 4c 5c 6e 22 0a 20 20 22 20 20 20 20 20   SQL\n".  "     
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 20 20 74 61 62 73 20 20 20 20 20 54 61 62      tabs     Tab
14de0 2d 73 65 70 61 72 61 74 65 64 20 76 61 6c 75 65  -separated value
14df0 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  s\n".  "        
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e10 20 74 63 6c 20 20 20 20 20 20 54 43 4c 20 6c 69   tcl      TCL li
14e20 73 74 20 65 6c 65 6d 65 6e 74 73 5c 6e 22 0a 20  st elements\n". 
14e30 20 22 2e 6e 75 6c 6c 76 61 6c 75 65 20 53 54 52   ".nullvalue STR
14e40 49 4e 47 20 20 20 20 20 20 55 73 65 20 53 54 52  ING      Use STR
14e50 49 4e 47 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  ING in place of 
14e60 4e 55 4c 4c 20 76 61 6c 75 65 73 5c 6e 22 0a 20  NULL values\n". 
14e70 20 22 2e 6f 6e 63 65 20 46 49 4c 45 4e 41 4d 45   ".once FILENAME
14e80 20 20 20 20 20 20 20 20 20 4f 75 74 70 75 74 20           Output 
14e90 66 6f 72 20 74 68 65 20 6e 65 78 74 20 53 51 4c  for the next SQL
14ea0 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 74 6f   command only to
14eb0 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22   FILENAME\n".  "
14ec0 2e 6f 70 65 6e 20 3f 4f 50 54 49 4f 4e 53 3f 20  .open ?OPTIONS? 
14ed0 3f 46 49 4c 45 3f 20 43 6c 6f 73 65 20 65 78 69  ?FILE? Close exi
14ee0 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 61  sting database a
14ef0 6e 64 20 72 65 6f 70 65 6e 20 46 49 4c 45 5c 6e  nd reopen FILE\n
14f00 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 68                Th
14f20 65 20 2d 2d 6e 65 77 20 6f 70 74 69 6f 6e 20 73  e --new option s
14f30 74 61 72 74 73 20 77 69 74 68 20 61 6e 20 65 6d  tarts with an em
14f40 70 74 79 20 66 69 6c 65 5c 6e 22 0a 20 20 22 2e  pty file\n".  ".
14f50 6f 75 74 70 75 74 20 3f 46 49 4c 45 4e 41 4d 45  output ?FILENAME
14f60 3f 20 20 20 20 20 53 65 6e 64 20 6f 75 74 70 75  ?     Send outpu
14f70 74 20 74 6f 20 46 49 4c 45 4e 41 4d 45 20 6f 72  t to FILENAME or
14f80 20 73 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 70   stdout\n".  ".p
14f90 72 69 6e 74 20 53 54 52 49 4e 47 2e 2e 2e 20 20  rint STRING...  
14fa0 20 20 20 20 20 50 72 69 6e 74 20 6c 69 74 65 72       Print liter
14fb0 61 6c 20 53 54 52 49 4e 47 5c 6e 22 0a 20 20 22  al STRING\n".  "
14fc0 2e 70 72 6f 6d 70 74 20 4d 41 49 4e 20 43 4f 4e  .prompt MAIN CON
14fd0 54 49 4e 55 45 20 20 52 65 70 6c 61 63 65 20 74  TINUE  Replace t
14fe0 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f 6d  he standard prom
14ff0 70 74 73 5c 6e 22 0a 20 20 22 2e 71 75 69 74 20  pts\n".  ".quit 
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15010 20 45 78 69 74 20 74 68 69 73 20 70 72 6f 67 72   Exit this progr
15020 61 6d 5c 6e 22 0a 20 20 22 2e 72 65 61 64 20 46  am\n".  ".read F
15030 49 4c 45 4e 41 4d 45 20 20 20 20 20 20 20 20 20  ILENAME         
15040 45 78 65 63 75 74 65 20 53 51 4c 20 69 6e 20 46  Execute SQL in F
15050 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22 2e 72  ILENAME\n".  ".r
15060 65 73 74 6f 72 65 20 3f 44 42 3f 20 46 49 4c 45  estore ?DB? FILE
15070 20 20 20 20 20 52 65 73 74 6f 72 65 20 63 6f 6e       Restore con
15080 74 65 6e 74 20 6f 66 20 44 42 20 28 64 65 66 61  tent of DB (defa
15090 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29 20 66 72  ult \"main\") fr
150a0 6f 6d 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73  om FILE\n".  ".s
150b0 61 76 65 20 46 49 4c 45 20 20 20 20 20 20 20 20  ave FILE        
150c0 20 20 20 20 20 57 72 69 74 65 20 69 6e 2d 6d 65       Write in-me
150d0 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 69 6e  mory database in
150e0 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73  to FILE\n".  ".s
150f0 63 61 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66 20  canstats on|off 
15100 20 20 20 20 20 54 75 72 6e 20 73 71 6c 69 74 65       Turn sqlite
15110 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75  3_stmt_scanstatu
15120 73 28 29 20 6d 65 74 72 69 63 73 20 6f 6e 20 6f  s() metrics on o
15130 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 73 63 68  r off\n".  ".sch
15140 65 6d 61 20 3f 50 41 54 54 45 52 4e 3f 20 20 20  ema ?PATTERN?   
15150 20 20 20 53 68 6f 77 20 74 68 65 20 43 52 45 41     Show the CREA
15160 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61  TE statements ma
15170 74 63 68 69 6e 67 20 50 41 54 54 45 52 4e 5c 6e  tching PATTERN\n
15180 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
151a0 64 64 20 2d 2d 69 6e 64 65 6e 74 20 66 6f 72 20  dd --indent for 
151b0 70 72 65 74 74 79 2d 70 72 69 6e 74 69 6e 67 5c  pretty-printing\
151c0 6e 22 0a 20 20 22 2e 73 65 6c 66 74 65 73 74 20  n".  ".selftest 
151d0 3f 2d 2d 69 6e 69 74 3f 20 20 20 20 20 52 75 6e  ?--init?     Run
151e0 20 74 65 73 74 73 20 64 65 66 69 6e 65 64 20 69   tests defined i
151f0 6e 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74  n the SELFTEST t
15200 61 62 6c 65 5c 6e 22 0a 20 20 22 2e 73 65 70 61  able\n".  ".sepa
15210 72 61 74 6f 72 20 43 4f 4c 20 3f 52 4f 57 3f 20  rator COL ?ROW? 
15220 20 20 43 68 61 6e 67 65 20 74 68 65 20 63 6f 6c    Change the col
15230 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 61 6e  umn separator an
15240 64 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 74 68 65  d optionally the
15250 20 72 6f 77 5c 6e 22 0a 20 20 22 20 20 20 20 20   row\n".  "     
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15270 20 20 20 20 73 65 70 61 72 61 74 6f 72 20 66 6f      separator fo
15280 72 20 62 6f 74 68 20 74 68 65 20 6f 75 74 70 75  r both the outpu
15290 74 20 6d 6f 64 65 20 61 6e 64 20 2e 69 6d 70 6f  t mode and .impo
152a0 72 74 5c 6e 22 0a 23 69 66 20 64 65 66 69 6e 65  rt\n".#if define
152b0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
152c0 53 45 53 53 49 4f 4e 29 0a 20 20 22 2e 73 65 73  SESSION).  ".ses
152d0 73 69 6f 6e 20 43 4d 44 20 2e 2e 2e 20 20 20 20  sion CMD ...    
152e0 20 20 20 43 72 65 61 74 65 20 6f 72 20 63 6f 6e     Create or con
152f0 74 72 6f 6c 20 73 65 73 73 69 6f 6e 73 5c 6e 22  trol sessions\n"
15300 0a 23 65 6e 64 69 66 0a 20 20 22 2e 73 68 61 33  .#endif.  ".sha3
15310 73 75 6d 20 3f 4f 50 54 49 4f 4e 53 2e 2e 2e 3f  sum ?OPTIONS...?
15320 20 20 43 6f 6d 70 75 74 65 20 61 20 53 48 41 33    Compute a SHA3
15330 20 68 61 73 68 20 6f 66 20 64 61 74 61 62 61 73   hash of databas
15340 65 20 63 6f 6e 74 65 6e 74 5c 6e 22 0a 20 20 22  e content\n".  "
15350 2e 73 68 65 6c 6c 20 43 4d 44 20 41 52 47 53 2e  .shell CMD ARGS.
15360 2e 2e 20 20 20 20 20 52 75 6e 20 43 4d 44 20 41  ..     Run CMD A
15370 52 47 53 2e 2e 2e 20 69 6e 20 61 20 73 79 73 74  RGS... in a syst
15380 65 6d 20 73 68 65 6c 6c 5c 6e 22 0a 20 20 22 2e  em shell\n".  ".
15390 73 68 6f 77 20 20 20 20 20 20 20 20 20 20 20 20  show            
153a0 20 20 20 20 20 20 53 68 6f 77 20 74 68 65 20 63        Show the c
153b0 75 72 72 65 6e 74 20 76 61 6c 75 65 73 20 66 6f  urrent values fo
153c0 72 20 76 61 72 69 6f 75 73 20 73 65 74 74 69 6e  r various settin
153d0 67 73 5c 6e 22 0a 20 20 22 2e 73 74 61 74 73 20  gs\n".  ".stats 
153e0 3f 6f 6e 7c 6f 66 66 3f 20 20 20 20 20 20 20 20  ?on|off?        
153f0 53 68 6f 77 20 73 74 61 74 73 20 6f 72 20 74 75  Show stats or tu
15400 72 6e 20 73 74 61 74 73 20 6f 6e 20 6f 72 20 6f  rn stats on or o
15410 66 66 5c 6e 22 0a 20 20 22 2e 73 79 73 74 65 6d  ff\n".  ".system
15420 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20 20 20 20   CMD ARGS...    
15430 52 75 6e 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20  Run CMD ARGS... 
15440 69 6e 20 61 20 73 79 73 74 65 6d 20 73 68 65 6c  in a system shel
15450 6c 5c 6e 22 0a 20 20 22 2e 74 61 62 6c 65 73 20  l\n".  ".tables 
15460 3f 54 41 42 4c 45 3f 20 20 20 20 20 20 20 20 4c  ?TABLE?        L
15470 69 73 74 20 6e 61 6d 65 73 20 6f 66 20 74 61 62  ist names of tab
15480 6c 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  les\n".  "      
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154a0 20 20 20 49 66 20 54 41 42 4c 45 20 73 70 65 63     If TABLE spec
154b0 69 66 69 65 64 2c 20 6f 6e 6c 79 20 6c 69 73 74  ified, only list
154c0 20 74 61 62 6c 65 73 20 6d 61 74 63 68 69 6e 67   tables matching
154d0 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
154e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154f0 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 54 41 42  LIKE pattern TAB
15500 4c 45 2e 5c 6e 22 0a 20 20 22 2e 74 65 73 74 63  LE.\n".  ".testc
15510 61 73 65 20 4e 41 4d 45 20 20 20 20 20 20 20 20  ase NAME        
15520 20 42 65 67 69 6e 20 72 65 64 69 72 65 63 74 69   Begin redirecti
15530 6e 67 20 6f 75 74 70 75 74 20 74 6f 20 27 74 65  ng output to 'te
15540 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c  stcase-out.txt'\
15550 6e 22 0a 20 20 22 2e 74 69 6d 65 6f 75 74 20 4d  n".  ".timeout M
15560 53 20 20 20 20 20 20 20 20 20 20 20 20 54 72 79  S            Try
15570 20 6f 70 65 6e 69 6e 67 20 6c 6f 63 6b 65 64 20   opening locked 
15580 74 61 62 6c 65 73 20 66 6f 72 20 4d 53 20 6d 69  tables for MS mi
15590 6c 6c 69 73 65 63 6f 6e 64 73 5c 6e 22 0a 20 20  lliseconds\n".  
155a0 22 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 20 20  ".timer on|off  
155b0 20 20 20 20 20 20 20 20 54 75 72 6e 20 53 51 4c          Turn SQL
155c0 20 74 69 6d 65 72 20 6f 6e 20 6f 72 20 6f 66 66   timer on or off
155d0 5c 6e 22 0a 20 20 22 2e 74 72 61 63 65 20 46 49  \n".  ".trace FI
155e0 4c 45 7c 6f 66 66 20 20 20 20 20 20 20 20 4f 75  LE|off        Ou
155f0 74 70 75 74 20 65 61 63 68 20 53 51 4c 20 73 74  tput each SQL st
15600 61 74 65 6d 65 6e 74 20 61 73 20 69 74 20 69 73  atement as it is
15610 20 72 75 6e 5c 6e 22 0a 20 20 22 2e 76 66 73 69   run\n".  ".vfsi
15620 6e 66 6f 20 3f 41 55 58 3f 20 20 20 20 20 20 20  nfo ?AUX?       
15630 20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62    Information ab
15640 6f 75 74 20 74 68 65 20 74 6f 70 2d 6c 65 76 65  out the top-leve
15650 6c 20 56 46 53 5c 6e 22 0a 20 20 22 2e 76 66 73  l VFS\n".  ".vfs
15660 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20 20  list            
15670 20 20 20 4c 69 73 74 20 61 6c 6c 20 61 76 61 69     List all avai
15680 6c 61 62 6c 65 20 56 46 53 65 73 5c 6e 22 0a 20  lable VFSes\n". 
15690 20 22 2e 76 66 73 6e 61 6d 65 20 3f 41 55 58 3f   ".vfsname ?AUX?
156a0 20 20 20 20 20 20 20 20 20 50 72 69 6e 74 20 74           Print t
156b0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 56  he name of the V
156c0 46 53 20 73 74 61 63 6b 5c 6e 22 0a 20 20 22 2e  FS stack\n".  ".
156d0 77 69 64 74 68 20 4e 55 4d 31 20 4e 55 4d 32 20  width NUM1 NUM2 
156e0 2e 2e 2e 20 20 20 53 65 74 20 63 6f 6c 75 6d 6e  ...   Set column
156f0 20 77 69 64 74 68 73 20 66 6f 72 20 5c 22 63 6f   widths for \"co
15700 6c 75 6d 6e 5c 22 20 6d 6f 64 65 5c 6e 22 0a 20  lumn\" mode\n". 
15710 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
15720 20 20 20 20 20 20 20 20 20 20 20 4e 65 67 61 74             Negat
15730 69 76 65 20 76 61 6c 75 65 73 20 72 69 67 68 74  ive values right
15740 2d 6a 75 73 74 69 66 79 5c 6e 22 0a 3b 0a 0a 23  -justify\n".;..#
15750 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
15760 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e  E_ENABLE_SESSION
15770 29 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 68 65  )./*.** Print he
15780 6c 70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  lp information f
15790 6f 72 20 74 68 65 20 22 2e 73 65 73 73 69 6f 6e  or the ".session
157a0 73 22 20 63 6f 6d 6d 61 6e 64 0a 2a 2f 0a 76 6f  s" command.*/.vo
157b0 69 64 20 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28  id session_help(
157c0 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a  ShellState *p){.
157d0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
157e0 6f 75 74 2c 0a 20 20 20 20 22 2e 73 65 73 73 69  out,.    ".sessi
157f0 6f 6e 20 3f 4e 41 4d 45 3f 20 53 55 42 43 4f 4d  on ?NAME? SUBCOM
15800 4d 41 4e 44 20 3f 41 52 47 53 2e 2e 2e 3f 5c 6e  MAND ?ARGS...?\n
15810 22 0a 20 20 20 20 22 49 66 20 3f 4e 41 4d 45 3f  ".    "If ?NAME?
15820 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65   is omitted, the
15830 20 66 69 72 73 74 20 64 65 66 69 6e 65 64 20 73   first defined s
15840 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 5c  ession is used.\
15850 6e 22 0a 20 20 20 20 22 53 75 62 63 6f 6d 6d 61  n".    "Subcomma
15860 6e 64 73 3a 5c 6e 22 0a 20 20 20 20 22 20 20 20  nds:\n".    "   
15870 61 74 74 61 63 68 20 54 41 42 4c 45 20 20 20 20  attach TABLE    
15880 20 20 20 20 20 20 20 20 20 41 74 74 61 63 68 20           Attach 
15890 54 41 42 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20  TABLE\n".    "  
158a0 20 63 68 61 6e 67 65 73 65 74 20 46 49 4c 45 20   changeset FILE 
158b0 20 20 20 20 20 20 20 20 20 20 57 72 69 74 65 20            Write 
158c0 61 20 63 68 61 6e 67 65 73 65 74 20 69 6e 74 6f  a changeset into
158d0 20 46 49 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20   FILE\n".    "  
158e0 20 63 6c 6f 73 65 20 20 20 20 20 20 20 20 20 20   close          
158f0 20 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65 20            Close 
15900 6f 6e 65 20 73 65 73 73 69 6f 6e 5c 6e 22 0a 20  one session\n". 
15910 20 20 20 22 20 20 20 65 6e 61 62 6c 65 20 3f 42     "   enable ?B
15920 4f 4f 4c 45 41 4e 3f 20 20 20 20 20 20 20 20 20  OOLEAN?         
15930 53 65 74 20 6f 72 20 71 75 65 72 79 20 74 68 65  Set or query the
15940 20 65 6e 61 62 6c 65 20 62 69 74 5c 6e 22 0a 20   enable bit\n". 
15950 20 20 20 22 20 20 20 66 69 6c 74 65 72 20 47 4c     "   filter GL
15960 4f 42 2e 2e 2e 20 20 20 20 20 20 20 20 20 20 20  OB...           
15970 52 65 6a 65 63 74 20 74 61 62 6c 65 73 20 6d 61  Reject tables ma
15980 74 63 68 69 6e 67 20 47 4c 4f 42 73 5c 6e 22 0a  tching GLOBs\n".
15990 20 20 20 20 22 20 20 20 69 6e 64 69 72 65 63 74      "   indirect
159a0 20 3f 42 4f 4f 4c 45 41 4e 3f 20 20 20 20 20 20   ?BOOLEAN?      
159b0 20 4d 61 72 6b 20 6f 72 20 71 75 65 72 79 20 74   Mark or query t
159c0 68 65 20 69 6e 64 69 72 65 63 74 20 73 74 61 74  he indirect stat
159d0 75 73 5c 6e 22 0a 20 20 20 20 22 20 20 20 69 73  us\n".    "   is
159e0 65 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20  empty           
159f0 20 20 20 20 20 20 20 51 75 65 72 79 20 77 68 65         Query whe
15a00 74 68 65 72 20 74 68 65 20 73 65 73 73 69 6f 6e  ther the session
15a10 20 69 73 20 65 6d 70 74 79 5c 6e 22 0a 20 20 20   is empty\n".   
15a20 20 22 20 20 20 6c 69 73 74 20 20 20 20 20 20 20   "   list       
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69                Li
15a40 73 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  st currently ope
15a50 6e 20 73 65 73 73 69 6f 6e 20 6e 61 6d 65 73 5c  n session names\
15a60 6e 22 0a 20 20 20 20 22 20 20 20 6f 70 65 6e 20  n".    "   open 
15a70 44 42 20 4e 41 4d 45 20 20 20 20 20 20 20 20 20  DB NAME         
15a80 20 20 20 20 4f 70 65 6e 20 61 20 6e 65 77 20 73      Open a new s
15a90 65 73 73 69 6f 6e 20 6f 6e 20 44 42 5c 6e 22 0a  ession on DB\n".
15aa0 20 20 20 20 22 20 20 20 70 61 74 63 68 73 65 74      "   patchset
15ab0 20 46 49 4c 45 20 20 20 20 20 20 20 20 20 20 20   FILE           
15ac0 20 57 72 69 74 65 20 61 20 70 61 74 63 68 73 65   Write a patchse
15ad0 74 20 69 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a 20  t into FILE\n". 
15ae0 20 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f   );.}.#endif.../
15af0 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72 65  * Forward refere
15b00 6e 63 65 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nce */.static in
15b10 74 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28  t process_input(
15b20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 46  ShellState *p, F
15b30 49 4c 45 20 2a 69 6e 29 3b 0a 0a 2f 2a 0a 2a 2a  ILE *in);../*.**
15b40 20 52 65 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   Read the conten
15b50 74 20 6f 66 20 66 69 6c 65 20 7a 4e 61 6d 65 20  t of file zName 
15b60 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  into memory obta
15b70 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
15b80 33 5f 6d 61 6c 6c 6f 63 36 34 28 29 0a 2a 2a 20  3_malloc64().** 
15b90 61 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69  and return a poi
15ba0 6e 74 65 72 20 74 6f 20 74 68 65 20 62 75 66 66  nter to the buff
15bb0 65 72 2e 20 54 68 65 20 63 61 6c 6c 65 72 20 69  er. The caller i
15bc0 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
15bd0 72 20 66 72 65 65 69 6e 67 0a 2a 2a 20 74 68 65  r freeing.** the
15be0 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 0a 2a 2a 20 49   memory..**.** I
15bf0 66 20 70 61 72 61 6d 65 74 65 72 20 70 6e 42 79  f parameter pnBy
15c00 74 65 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  te is not NULL, 
15c10 28 2a 70 6e 42 79 74 65 29 20 69 73 20 73 65 74  (*pnByte) is set
15c20 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
15c30 66 20 62 79 74 65 73 0a 2a 2a 20 72 65 61 64 2e  f bytes.** read.
15c40 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 63 6f 6e 76 65  .**.** For conve
15c50 6e 69 65 6e 63 65 2c 20 61 20 6e 75 6c 2d 74 65  nience, a nul-te
15c60 72 6d 69 6e 61 74 6f 72 20 62 79 74 65 20 69 73  rminator byte is
15c70 20 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64   always appended
15c80 20 74 6f 20 74 68 65 20 64 61 74 61 20 72 65 61   to the data rea
15c90 64 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 66 69  d.** from the fi
15ca0 6c 65 20 62 65 66 6f 72 65 20 74 68 65 20 62 75  le before the bu
15cb0 66 66 65 72 20 69 73 20 72 65 74 75 72 6e 65 64  ffer is returned
15cc0 2e 20 54 68 69 73 20 62 79 74 65 20 69 73 20 6e  . This byte is n
15cd0 6f 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 0a 2a  ot included in.*
15ce0 2a 20 74 68 65 20 66 69 6e 61 6c 20 76 61 6c 75  * the final valu
15cf0 65 20 6f 66 20 28 2a 70 6e 42 79 74 65 29 2c 20  e of (*pnByte), 
15d00 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e 0a 2a  if applicable..*
15d10 2a 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74  *.** NULL is ret
15d20 75 72 6e 65 64 20 69 66 20 61 6e 79 20 65 72 72  urned if any err
15d30 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
15d40 64 2e 20 54 68 65 20 66 69 6e 61 6c 20 76 61 6c  d. The final val
15d50 75 65 20 6f 66 20 2a 70 6e 42 79 74 65 0a 2a 2a  ue of *pnByte.**
15d60 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e   is undefined in
15d70 20 74 68 69 73 20 63 61 73 65 2e 0a 2a 2f 0a 73   this case..*/.s
15d80 74 61 74 69 63 20 63 68 61 72 20 2a 72 65 61 64  tatic char *read
15d90 46 69 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20  File(const char 
15da0 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 2a 70 6e 42  *zName, int *pnB
15db0 79 74 65 29 7b 0a 20 20 46 49 4c 45 20 2a 69 6e  yte){.  FILE *in
15dc0 20 3d 20 66 6f 70 65 6e 28 7a 4e 61 6d 65 2c 20   = fopen(zName, 
15dd0 22 72 62 22 29 3b 0a 20 20 6c 6f 6e 67 20 6e 49  "rb");.  long nI
15de0 6e 3b 0a 20 20 73 69 7a 65 5f 74 20 6e 52 65 61  n;.  size_t nRea
15df0 64 3b 0a 20 20 63 68 61 72 20 2a 70 42 75 66 3b  d;.  char *pBuf;
15e00 0a 20 20 69 66 28 20 69 6e 3d 3d 30 20 29 20 72  .  if( in==0 ) r
15e10 65 74 75 72 6e 20 30 3b 0a 20 20 66 73 65 65 6b  eturn 0;.  fseek
15e20 28 69 6e 2c 20 30 2c 20 53 45 45 4b 5f 45 4e 44  (in, 0, SEEK_END
15e30 29 3b 0a 20 20 6e 49 6e 20 3d 20 66 74 65 6c 6c  );.  nIn = ftell
15e40 28 69 6e 29 3b 0a 20 20 72 65 77 69 6e 64 28 69  (in);.  rewind(i
15e50 6e 29 3b 0a 20 20 70 42 75 66 20 3d 20 73 71 6c  n);.  pBuf = sql
15e60 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 20 6e  ite3_malloc64( n
15e70 49 6e 2b 31 20 29 3b 0a 20 20 69 66 28 20 70 42  In+1 );.  if( pB
15e80 75 66 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  uf==0 ) return 0
15e90 3b 0a 20 20 6e 52 65 61 64 20 3d 20 66 72 65 61  ;.  nRead = frea
15ea0 64 28 70 42 75 66 2c 20 6e 49 6e 2c 20 31 2c 20  d(pBuf, nIn, 1, 
15eb0 69 6e 29 3b 0a 20 20 66 63 6c 6f 73 65 28 69 6e  in);.  fclose(in
15ec0 29 3b 0a 20 20 69 66 28 20 6e 52 65 61 64 21 3d  );.  if( nRead!=
15ed0 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
15ee0 5f 66 72 65 65 28 70 42 75 66 29 3b 0a 20 20 20  _free(pBuf);.   
15ef0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
15f00 20 70 42 75 66 5b 6e 49 6e 5d 20 3d 20 30 3b 0a   pBuf[nIn] = 0;.
15f10 20 20 69 66 28 20 70 6e 42 79 74 65 20 29 20 2a    if( pnByte ) *
15f20 70 6e 42 79 74 65 20 3d 20 6e 49 6e 3b 0a 20 20  pnByte = nIn;.  
15f30 72 65 74 75 72 6e 20 70 42 75 66 3b 0a 7d 0a 0a  return pBuf;.}..
15f40 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
15f50 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f  TE_ENABLE_SESSIO
15f60 4e 29 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61  N)./*.** Close a
15f70 20 73 69 6e 67 6c 65 20 4f 70 65 6e 53 65 73 73   single OpenSess
15f80 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 72  ion object and r
15f90 65 6c 65 61 73 65 20 61 6c 6c 20 6f 66 20 69 74  elease all of it
15fa0 73 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  s associated.** 
15fb0 72 65 73 6f 75 72 63 65 73 2e 0a 2a 2f 0a 73 74  resources..*/.st
15fc0 61 74 69 63 20 76 6f 69 64 20 73 65 73 73 69 6f  atic void sessio
15fd0 6e 5f 63 6c 6f 73 65 28 4f 70 65 6e 53 65 73 73  n_close(OpenSess
15fe0 69 6f 6e 20 2a 70 53 65 73 73 69 6f 6e 29 7b 0a  ion *pSession){.
15ff0 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
16000 65 33 73 65 73 73 69 6f 6e 5f 64 65 6c 65 74 65  e3session_delete
16010 28 70 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20  (pSession->p);. 
16020 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53   sqlite3_free(pS
16030 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 29 3b 0a  ession->zName);.
16040 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 53 65    for(i=0; i<pSe
16050 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20  ssion->nFilter; 
16060 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
16070 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e 2d  3_free(pSession-
16080 3e 61 7a 46 69 6c 74 65 72 5b 69 5d 29 3b 0a 20  >azFilter[i]);. 
16090 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65   }.  sqlite3_fre
160a0 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  e(pSession->azFi
160b0 6c 74 65 72 29 3b 0a 20 20 6d 65 6d 73 65 74 28  lter);.  memset(
160c0 70 53 65 73 73 69 6f 6e 2c 20 30 2c 20 73 69 7a  pSession, 0, siz
160d0 65 6f 66 28 4f 70 65 6e 53 65 73 73 69 6f 6e 29  eof(OpenSession)
160e0 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
160f0 2a 2a 20 43 6c 6f 73 65 20 61 6c 6c 20 4f 70 65  ** Close all Ope
16100 6e 53 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 73  nSession objects
16110 20 61 6e 64 20 72 65 6c 65 61 73 65 20 61 6c 6c   and release all
16120 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 73 6f   associated reso
16130 75 72 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  urces..*/.#if de
16140 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
16150 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 73 74 61  BLE_SESSION).sta
16160 74 69 63 20 76 6f 69 64 20 73 65 73 73 69 6f 6e  tic void session
16170 5f 63 6c 6f 73 65 5f 61 6c 6c 28 53 68 65 6c 6c  _close_all(Shell
16180 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69 6e 74  State *p){.  int
16190 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   i;.  for(i=0; i
161a0 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b  <p->nSession; i+
161b0 2b 29 7b 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f  +){.    session_
161c0 63 6c 6f 73 65 28 26 70 2d 3e 61 53 65 73 73 69  close(&p->aSessi
161d0 6f 6e 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 70 2d  on[i]);.  }.  p-
161e0 3e 6e 53 65 73 73 69 6f 6e 20 3d 20 30 3b 0a 7d  >nSession = 0;.}
161f0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
16200 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c  session_close_al
16210 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
16220 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** Implementatio
16230 6e 20 6f 66 20 74 68 65 20 78 46 69 6c 74 65 72  n of the xFilter
16240 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
16250 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 2e 20 20   open session.  
16260 4f 6d 69 74 0a 2a 2a 20 61 6e 79 20 74 61 62 6c  Omit.** any tabl
16270 65 73 20 6e 61 6d 65 64 20 62 79 20 22 2e 73 65  es named by ".se
16280 73 73 69 6f 6e 20 66 69 6c 74 65 72 22 20 62 75  ssion filter" bu
16290 74 20 6c 65 74 20 61 6c 6c 20 6f 74 68 65 72 20  t let all other 
162a0 74 61 62 6c 65 20 74 68 72 6f 75 67 68 2e 0a 2a  table through..*
162b0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
162c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53  LITE_ENABLE_SESS
162d0 49 4f 4e 29 0a 73 74 61 74 69 63 20 69 6e 74 20  ION).static int 
162e0 73 65 73 73 69 6f 6e 5f 66 69 6c 74 65 72 28 76  session_filter(v
162f0 6f 69 64 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74  oid *pCtx, const
16300 20 63 68 61 72 20 2a 7a 54 61 62 29 7b 0a 20 20   char *zTab){.  
16310 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70 53 65  OpenSession *pSe
16320 73 73 69 6f 6e 20 3d 20 28 4f 70 65 6e 53 65 73  ssion = (OpenSes
16330 73 69 6f 6e 2a 29 70 43 74 78 3b 0a 20 20 69 6e  sion*)pCtx;.  in
16340 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  t i;.  for(i=0; 
16350 69 3c 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c  i<pSession->nFil
16360 74 65 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  ter; i++){.    i
16370 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c  f( sqlite3_strgl
16380 6f 62 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46  ob(pSession->azF
16390 69 6c 74 65 72 5b 69 5d 2c 20 7a 54 61 62 29 3d  ilter[i], zTab)=
163a0 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
163b0 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d   }.  return 1;.}
163c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
163d0 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74  ake sure the dat
163e0 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2e 20 20  abase is open.  
163f0 49 66 20 69 74 20 69 73 20 6e 6f 74 2c 20 74 68  If it is not, th
16400 65 6e 20 6f 70 65 6e 20 69 74 2e 20 20 49 66 0a  en open it.  If.
16410 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
16420 66 61 69 6c 73 20 74 6f 20 6f 70 65 6e 2c 20 70  fails to open, p
16430 72 69 6e 74 20 61 6e 20 65 72 72 6f 72 20 6d 65  rint an error me
16440 73 73 61 67 65 20 61 6e 64 20 65 78 69 74 2e 0a  ssage and exit..
16450 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
16460 70 65 6e 5f 64 62 28 53 68 65 6c 6c 53 74 61 74  pen_db(ShellStat
16470 65 20 2a 70 2c 20 69 6e 74 20 6b 65 65 70 41 6c  e *p, int keepAl
16480 69 76 65 29 7b 0a 20 20 69 66 28 20 70 2d 3e 64  ive){.  if( p->d
16490 62 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  b==0 ){.    sqli
164a0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
164b0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6f 70  ;.    sqlite3_op
164c0 65 6e 28 70 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d  en(p->zDbFilenam
164d0 65 2c 20 26 70 2d 3e 64 62 29 3b 0a 20 20 20 20  e, &p->db);.    
164e0 67 6c 6f 62 61 6c 44 62 20 3d 20 70 2d 3e 64 62  globalDb = p->db
164f0 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d  ;.    if( p->db=
16500 3d 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4f 4b 21  =0 || SQLITE_OK!
16510 3d 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65  =sqlite3_errcode
16520 28 70 2d 3e 64 62 29 20 29 7b 0a 20 20 20 20 20  (p->db) ){.     
16530 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
16540 65 72 72 2c 22 45 72 72 6f 72 3a 20 75 6e 61 62  err,"Error: unab
16550 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62  le to open datab
16560 61 73 65 20 5c 22 25 73 5c 22 3a 20 25 73 5c 6e  ase \"%s\": %s\n
16570 22 2c 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ",.          p->
16580 7a 44 62 46 69 6c 65 6e 61 6d 65 2c 20 73 71 6c  zDbFilename, sql
16590 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
165a0 62 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6b  b));.      if( k
165b0 65 65 70 41 6c 69 76 65 20 29 20 72 65 74 75 72  eepAlive ) retur
165c0 6e 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31 29  n;.      exit(1)
165d0 3b 0a 20 20 20 20 7d 0a 23 69 66 6e 64 65 66 20  ;.    }.#ifndef 
165e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
165f0 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 20 20 73  _EXTENSION.    s
16600 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f  qlite3_enable_lo
16610 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 70 2d 3e  ad_extension(p->
16620 64 62 2c 20 31 29 3b 0a 23 65 6e 64 69 66 0a 20  db, 1);.#endif. 
16630 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 69     sqlite3_filei
16640 6f 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 30 2c  o_init(p->db, 0,
16650 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
16660 5f 73 68 61 74 68 72 65 65 5f 69 6e 69 74 28 70  _shathree_init(p
16670 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 20  ->db, 0, 0);.   
16680 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74   sqlite3_complet
16690 69 6f 6e 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20  ion_init(p->db, 
166a0 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  0, 0);.    sqlit
166b0 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
166c0 6f 6e 28 70 2d 3e 64 62 2c 20 22 73 68 65 6c 6c  on(p->db, "shell
166d0 5f 61 64 64 5f 73 63 68 65 6d 61 22 2c 20 32 2c  _add_schema", 2,
166e0 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
166f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16700 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65               she
16710 6c 6c 41 64 64 53 63 68 65 6d 61 4e 61 6d 65 2c  llAddSchemaName,
16720 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 23   0, 0);.  }.}..#
16730 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 45  if HAVE_READLINE
16740 20 7c 7c 20 48 41 56 45 5f 45 44 49 54 4c 49 4e   || HAVE_EDITLIN
16750 45 0a 2f 2a 0a 2a 2a 20 52 65 61 64 6c 69 6e 65  E./*.** Readline
16760 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 63 61 6c 6c   completion call
16770 62 61 63 6b 73 0a 2a 2f 0a 73 74 61 74 69 63 20  backs.*/.static 
16780 63 68 61 72 20 2a 72 65 61 64 6c 69 6e 65 5f 63  char *readline_c
16790 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72 61  ompletion_genera
167a0 74 6f 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  tor(const char *
167b0 74 65 78 74 2c 20 69 6e 74 20 73 74 61 74 65 29  text, int state)
167c0 7b 0a 20 20 73 74 61 74 69 63 20 73 71 6c 69 74  {.  static sqlit
167d0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d  e3_stmt *pStmt =
167e0 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65 74   0;.  char *zRet
167f0 3b 0a 20 20 69 66 28 20 73 74 61 74 65 3d 3d 30  ;.  if( state==0
16800 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   ){.    char *zS
16810 71 6c 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ql;.    sqlite3_
16820 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
16830 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
16840 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c  te3_mprintf("SEL
16850 45 43 54 20 44 49 53 54 49 4e 43 54 20 63 61 6e  ECT DISTINCT can
16860 64 69 64 61 74 65 20 43 4f 4c 4c 41 54 45 20 6e  didate COLLATE n
16870 6f 63 61 73 65 22 0a 20 20 20 20 20 20 20 20 20  ocase".         
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d 70 6c 65    "  FROM comple
168a0 74 69 6f 6e 28 25 51 29 20 4f 52 44 45 52 20 42  tion(%Q) ORDER B
168b0 59 20 31 22 2c 20 74 65 78 74 29 3b 0a 20 20 20  Y 1", text);.   
168c0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
168d0 5f 76 32 28 67 6c 6f 62 61 6c 44 62 2c 20 7a 53  _v2(globalDb, zS
168e0 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  ql, -1, &pStmt, 
168f0 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
16900 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 0a  free(zSql);.  }.
16910 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
16920 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
16930 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 7a 52 65  E_ROW ){.    zRe
16940 74 20 3d 20 73 74 72 64 75 70 28 28 63 6f 6e 73  t = strdup((cons
16950 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
16960 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d  column_text(pStm
16970 74 2c 20 30 29 29 3b 0a 20 20 7d 65 6c 73 65 7b  t, 0));.  }else{
16980 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
16990 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
169a0 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20    pStmt = 0;.   
169b0 20 7a 52 65 74 20 3d 20 30 3b 0a 20 20 7d 0a 20   zRet = 0;.  }. 
169c0 20 72 65 74 75 72 6e 20 7a 52 65 74 3b 0a 7d 0a   return zRet;.}.
169d0 73 74 61 74 69 63 20 63 68 61 72 20 2a 2a 72 65  static char **re
169e0 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 69 6f  adline_completio
169f0 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54  n(const char *zT
16a00 65 78 74 2c 20 69 6e 74 20 69 53 74 61 72 74 2c  ext, int iStart,
16a10 20 69 6e 74 20 69 45 6e 64 29 7b 0a 20 20 72 6c   int iEnd){.  rl
16a20 5f 61 74 74 65 6d 70 74 65 64 5f 63 6f 6d 70 6c  _attempted_compl
16a30 65 74 69 6f 6e 5f 6f 76 65 72 20 3d 20 31 3b 0a  etion_over = 1;.
16a40 20 20 72 65 74 75 72 6e 20 72 6c 5f 63 6f 6d 70    return rl_comp
16a50 6c 65 74 69 6f 6e 5f 6d 61 74 63 68 65 73 28 7a  letion_matches(z
16a60 54 65 78 74 2c 20 72 65 61 64 6c 69 6e 65 5f 63  Text, readline_c
16a70 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72 61  ompletion_genera
16a80 74 6f 72 29 3b 0a 7d 0a 0a 23 65 6c 69 66 20 48  tor);.}..#elif H
16a90 41 56 45 5f 4c 49 4e 45 4e 4f 49 53 45 0a 2f 2a  AVE_LINENOISE./*
16aa0 0a 2a 2a 20 4c 69 6e 65 6e 6f 69 73 65 20 63 6f  .** Linenoise co
16ab0 6d 70 6c 65 74 69 6f 6e 20 63 61 6c 6c 62 61 63  mpletion callbac
16ac0 6b 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  k.*/.static void
16ad0 20 6c 69 6e 65 6e 6f 69 73 65 5f 63 6f 6d 70 6c   linenoise_compl
16ae0 65 74 69 6f 6e 28 63 6f 6e 73 74 20 63 68 61 72  etion(const char
16af0 20 2a 7a 4c 69 6e 65 2c 20 6c 69 6e 65 6e 6f 69   *zLine, linenoi
16b00 73 65 43 6f 6d 70 6c 65 74 69 6f 6e 73 20 2a 6c  seCompletions *l
16b10 63 29 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 20  c){.  int nLine 
16b20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4c  = (int)strlen(zL
16b30 69 6e 65 29 3b 0a 20 20 69 6e 74 20 69 2c 20 69  ine);.  int i, i
16b40 53 74 61 72 74 3b 0a 20 20 73 71 6c 69 74 65 33  Start;.  sqlite3
16b50 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30  _stmt *pStmt = 0
16b60 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  ;.  char *zSql;.
16b70 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 30    char zBuf[1000
16b80 5d 3b 0a 0a 20 20 69 66 28 20 6e 4c 69 6e 65 3e  ];..  if( nLine>
16b90 73 69 7a 65 6f 66 28 7a 42 75 66 29 2d 33 30 20  sizeof(zBuf)-30 
16ba0 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
16bb0 7a 4c 69 6e 65 5b 30 5d 3d 3d 27 2e 27 20 29 20  zLine[0]=='.' ) 
16bc0 72 65 74 75 72 6e 3b 0a 20 20 66 6f 72 28 69 3d  return;.  for(i=
16bd0 6e 4c 69 6e 65 2d 31 3b 20 69 3e 3d 30 20 26 26  nLine-1; i>=0 &&
16be0 20 28 69 73 61 6c 6e 75 6d 28 7a 4c 69 6e 65 5b   (isalnum(zLine[
16bf0 69 5d 29 20 7c 7c 20 7a 4c 69 6e 65 5b 69 5d 3d  i]) || zLine[i]=
16c00 3d 27 5f 27 29 3b 20 69 2d 2d 29 7b 7d 0a 20 20  ='_'); i--){}.  
16c10 69 66 28 20 69 3d 3d 6e 4c 69 6e 65 2d 31 20 29  if( i==nLine-1 )
16c20 20 72 65 74 75 72 6e 3b 0a 20 20 69 53 74 61 72   return;.  iStar
16c30 74 20 3d 20 69 2b 31 3b 0a 20 20 6d 65 6d 63 70  t = i+1;.  memcp
16c40 79 28 7a 42 75 66 2c 20 7a 4c 69 6e 65 2c 20 69  y(zBuf, zLine, i
16c50 53 74 61 72 74 29 3b 0a 20 20 7a 53 71 6c 20 3d  Start);.  zSql =
16c60 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
16c70 28 22 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43  ("SELECT DISTINC
16c80 54 20 63 61 6e 64 69 64 61 74 65 20 43 4f 4c 4c  T candidate COLL
16c90 41 54 45 20 6e 6f 63 61 73 65 22 0a 20 20 20 20  ATE nocase".    
16ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cb0 20 20 20 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d       "  FROM com
16cc0 70 6c 65 74 69 6f 6e 28 25 51 2c 25 51 29 20 4f  pletion(%Q,%Q) O
16cd0 52 44 45 52 20 42 59 20 31 22 2c 0a 20 20 20 20  RDER BY 1",.    
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cf0 20 20 20 20 20 26 7a 4c 69 6e 65 5b 69 53 74 61       &zLine[iSta
16d00 72 74 5d 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 73  rt], zLine);.  s
16d10 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
16d20 32 28 67 6c 6f 62 61 6c 44 62 2c 20 7a 53 71 6c  2(globalDb, zSql
16d30 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
16d40 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
16d50 28 7a 53 71 6c 29 3b 0a 20 20 73 71 6c 69 74 65  (zSql);.  sqlite
16d60 33 5f 65 78 65 63 28 67 6c 6f 62 61 6c 44 62 2c  3_exec(globalDb,
16d70 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f   "PRAGMA page_co
16d80 75 6e 74 22 2c 20 30 2c 20 30 2c 20 30 29 3b 20  unt", 0, 0, 0); 
16d90 2f 2a 20 4c 6f 61 64 20 74 68 65 20 73 63 68 65  /* Load the sche
16da0 6d 61 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 73  ma */.  while( s
16db0 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
16dc0 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  t)==SQLITE_ROW )
16dd0 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
16de0 20 2a 7a 43 6f 6d 70 6c 65 74 69 6f 6e 20 3d 20   *zCompletion = 
16df0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
16e00 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
16e10 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  (pStmt, 0);.    
16e20 69 6e 74 20 6e 43 6f 6d 70 6c 65 74 69 6f 6e 20  int nCompletion 
16e30 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
16e40 5f 62 79 74 65 73 28 70 53 74 6d 74 2c 20 30 29  _bytes(pStmt, 0)
16e50 3b 0a 20 20 20 20 69 66 28 20 69 53 74 61 72 74  ;.    if( iStart
16e60 2b 6e 43 6f 6d 70 6c 65 74 69 6f 6e 20 3c 20 73  +nCompletion < s
16e70 69 7a 65 6f 66 28 7a 42 75 66 29 2d 31 20 29 7b  izeof(zBuf)-1 ){
16e80 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 7a 42  .      memcpy(zB
16e90 75 66 2b 69 53 74 61 72 74 2c 20 7a 43 6f 6d 70  uf+iStart, zComp
16ea0 6c 65 74 69 6f 6e 2c 20 6e 43 6f 6d 70 6c 65 74  letion, nComplet
16eb0 69 6f 6e 2b 31 29 3b 0a 20 20 20 20 20 20 6c 69  ion+1);.      li
16ec0 6e 65 6e 6f 69 73 65 41 64 64 43 6f 6d 70 6c 65  nenoiseAddComple
16ed0 74 69 6f 6e 28 6c 63 2c 20 7a 42 75 66 29 3b 0a  tion(lc, zBuf);.
16ee0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
16ef0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
16f00 6d 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  mt);.}.#endif../
16f10 2a 0a 2a 2a 20 44 6f 20 43 2d 6c 61 6e 67 75 61  *.** Do C-langua
16f20 67 65 20 73 74 79 6c 65 20 64 65 71 75 6f 74 69  ge style dequoti
16f30 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 5c 61 20  ng..**.**    \a 
16f40 20 20 20 2d 3e 20 61 6c 61 72 6d 0a 2a 2a 20 20     -> alarm.**  
16f50 20 20 5c 62 20 20 20 20 2d 3e 20 62 61 63 6b 73    \b    -> backs
16f60 70 61 63 65 0a 2a 2a 20 20 20 20 5c 74 20 20 20  pace.**    \t   
16f70 20 2d 3e 20 74 61 62 0a 2a 2a 20 20 20 20 5c 6e   -> tab.**    \n
16f80 20 20 20 20 2d 3e 20 6e 65 77 6c 69 6e 65 0a 2a      -> newline.*
16f90 2a 20 20 20 20 5c 76 20 20 20 20 2d 3e 20 76 65  *    \v    -> ve
16fa0 72 74 69 63 61 6c 20 74 61 62 0a 2a 2a 20 20 20  rtical tab.**   
16fb0 20 5c 66 20 20 20 20 2d 3e 20 66 6f 72 6d 20 66   \f    -> form f
16fc0 65 65 64 0a 2a 2a 20 20 20 20 5c 72 20 20 20 20  eed.**    \r    
16fd0 2d 3e 20 63 61 72 72 69 61 67 65 20 72 65 74 75  -> carriage retu
16fe0 72 6e 0a 2a 2a 20 20 20 20 5c 73 20 20 20 20 2d  rn.**    \s    -
16ff0 3e 20 73 70 61 63 65 0a 2a 2a 20 20 20 20 5c 22  > space.**    \"
17000 20 20 20 20 2d 3e 20 22 0a 2a 2a 20 20 20 20 5c      -> ".**    \
17010 27 20 20 20 20 2d 3e 20 27 0a 2a 2a 20 20 20 20  '    -> '.**    
17020 5c 5c 20 20 20 20 2d 3e 20 62 61 63 6b 73 6c 61  \\    -> backsla
17030 73 68 0a 2a 2a 20 20 20 20 5c 4e 4e 4e 20 20 2d  sh.**    \NNN  -
17040 3e 20 61 73 63 69 69 20 63 68 61 72 61 63 74 65  > ascii characte
17050 72 20 4e 4e 4e 20 69 6e 20 6f 63 74 61 6c 0a 2a  r NNN in octal.*
17060 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65  /.static void re
17070 73 6f 6c 76 65 5f 62 61 63 6b 73 6c 61 73 68 65  solve_backslashe
17080 73 28 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e  s(char *z){.  in
17090 74 20 69 2c 20 6a 3b 0a 20 20 63 68 61 72 20 63  t i, j;.  char c
170a0 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26  ;.  while( *z &&
170b0 20 2a 7a 21 3d 27 5c 5c 27 20 29 20 7a 2b 2b 3b   *z!='\\' ) z++;
170c0 0a 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 28 63  .  for(i=j=0; (c
170d0 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b   = z[i])!=0; i++
170e0 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  , j++){.    if( 
170f0 63 3d 3d 27 5c 5c 27 20 26 26 20 7a 5b 69 2b 31  c=='\\' && z[i+1
17100 5d 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 63 20  ]!=0 ){.      c 
17110 3d 20 7a 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20 20  = z[++i];.      
17120 69 66 28 20 63 3d 3d 27 61 27 20 29 7b 0a 20 20  if( c=='a' ){.  
17130 20 20 20 20 20 20 63 20 3d 20 27 5c 61 27 3b 0a        c = '\a';.
17140 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
17150 63 3d 3d 27 62 27 20 29 7b 0a 20 20 20 20 20 20  c=='b' ){.      
17160 20 20 63 20 3d 20 27 5c 62 27 3b 0a 20 20 20 20    c = '\b';.    
17170 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
17180 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20  t' ){.        c 
17190 3d 20 27 5c 74 27 3b 0a 20 20 20 20 20 20 7d 65  = '\t';.      }e
171a0 6c 73 65 20 69 66 28 20 63 3d 3d 27 6e 27 20 29  lse if( c=='n' )
171b0 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c  {.        c = '\
171c0 6e 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  n';.      }else 
171d0 69 66 28 20 63 3d 3d 27 76 27 20 29 7b 0a 20 20  if( c=='v' ){.  
171e0 20 20 20 20 20 20 63 20 3d 20 27 5c 76 27 3b 0a        c = '\v';.
171f0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
17200 63 3d 3d 27 66 27 20 29 7b 0a 20 20 20 20 20 20  c=='f' ){.      
17210 20 20 63 20 3d 20 27 5c 66 27 3b 0a 20 20 20 20    c = '\f';.    
17220 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
17230 72 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20  r' ){.        c 
17240 3d 20 27 5c 72 27 3b 0a 20 20 20 20 20 20 7d 65  = '\r';.      }e
17250 6c 73 65 20 69 66 28 20 63 3d 3d 27 22 27 20 29  lse if( c=='"' )
17260 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 22  {.        c = '"
17270 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ';.      }else i
17280 66 28 20 63 3d 3d 27 5c 27 27 20 29 7b 0a 20 20  f( c=='\'' ){.  
17290 20 20 20 20 20 20 63 20 3d 20 27 5c 27 27 3b 0a        c = '\'';.
172a0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
172b0 63 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20 20 20 20  c=='\\' ){.     
172c0 20 20 20 63 20 3d 20 27 5c 5c 27 3b 0a 20 20 20     c = '\\';.   
172d0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3e 3d     }else if( c>=
172e0 27 30 27 20 26 26 20 63 3c 3d 27 37 27 20 29 7b  '0' && c<='7' ){
172f0 0a 20 20 20 20 20 20 20 20 63 20 2d 3d 20 27 30  .        c -= '0
17300 27 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a  ';.        if( z
17310 5b 69 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b  [i+1]>='0' && z[
17320 69 2b 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20  i+1]<='7' ){.   
17330 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
17340 20 20 20 20 20 20 63 20 3d 20 28 63 3c 3c 33 29        c = (c<<3)
17350 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b 0a 20   + z[i] - '0';. 
17360 20 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69           if( z[i
17370 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 69 2b  +1]>='0' && z[i+
17380 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20 20 20  1]<='7' ){.     
17390 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
173a0 20 20 20 20 20 20 20 20 63 20 3d 20 28 63 3c 3c          c = (c<<
173b0 33 29 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b  3) + z[i] - '0';
173c0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
173d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
173e0 20 20 20 7d 0a 20 20 20 20 7a 5b 6a 5d 20 3d 20     }.    z[j] = 
173f0 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6a 3c 69  c;.  }.  if( j<i
17400 20 29 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 7d 0a 0a   ) z[j] = 0;.}..
17410 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
17420 20 76 61 6c 75 65 20 6f 66 20 61 20 68 65 78 61   value of a hexa
17430 64 65 63 69 6d 61 6c 20 64 69 67 69 74 2e 20 20  decimal digit.  
17440 52 65 74 75 72 6e 20 2d 31 20 69 66 20 74 68 65  Return -1 if the
17450 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20 6e 6f 74   input.** is not
17460 20 61 20 68 65 78 20 64 69 67 69 74 2e 0a 2a 2f   a hex digit..*/
17470 0a 73 74 61 74 69 63 20 69 6e 74 20 68 65 78 44  .static int hexD
17480 69 67 69 74 56 61 6c 75 65 28 63 68 61 72 20 63  igitValue(char c
17490 29 7b 0a 20 20 69 66 28 20 63 3e 3d 27 30 27 20  ){.  if( c>='0' 
174a0 26 26 20 63 3c 3d 27 39 27 20 29 20 72 65 74 75  && c<='9' ) retu
174b0 72 6e 20 63 20 2d 20 27 30 27 3b 0a 20 20 69 66  rn c - '0';.  if
174c0 28 20 63 3e 3d 27 61 27 20 26 26 20 63 3c 3d 27  ( c>='a' && c<='
174d0 66 27 20 29 20 72 65 74 75 72 6e 20 63 20 2d 20  f' ) return c - 
174e0 27 61 27 20 2b 20 31 30 3b 0a 20 20 69 66 28 20  'a' + 10;.  if( 
174f0 63 3e 3d 27 41 27 20 26 26 20 63 3c 3d 27 46 27  c>='A' && c<='F'
17500 20 29 20 72 65 74 75 72 6e 20 63 20 2d 20 27 41   ) return c - 'A
17510 27 20 2b 20 31 30 3b 0a 20 20 72 65 74 75 72 6e  ' + 10;.  return
17520 20 2d 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e   -1;.}../*.** In
17530 74 65 72 70 72 65 74 20 7a 41 72 67 20 61 73 20  terpret zArg as 
17540 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
17550 2c 20 70 6f 73 73 69 62 6c 79 20 77 69 74 68 20  , possibly with 
17560 73 75 66 66 69 78 65 73 2e 0a 2a 2f 0a 73 74 61  suffixes..*/.sta
17570 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  tic sqlite3_int6
17580 34 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63  4 integerValue(c
17590 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 29  onst char *zArg)
175a0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  {.  sqlite3_int6
175b0 34 20 76 20 3d 20 30 3b 0a 20 20 73 74 61 74 69  4 v = 0;.  stati
175c0 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 7b  c const struct {
175d0 20 63 68 61 72 20 2a 7a 53 75 66 66 69 78 3b 20   char *zSuffix; 
175e0 69 6e 74 20 69 4d 75 6c 74 3b 20 7d 20 61 4d 75  int iMult; } aMu
175f0 6c 74 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 22  lt[] = {.    { "
17600 4b 69 42 22 2c 20 31 30 32 34 20 7d 2c 0a 20 20  KiB", 1024 },.  
17610 20 20 7b 20 22 4d 69 42 22 2c 20 31 30 32 34 2a    { "MiB", 1024*
17620 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22 47  1024 },.    { "G
17630 69 42 22 2c 20 31 30 32 34 2a 31 30 32 34 2a 31  iB", 1024*1024*1
17640 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22 4b 42  024 },.    { "KB
17650 22 2c 20 20 31 30 30 30 20 7d 2c 0a 20 20 20 20  ",  1000 },.    
17660 7b 20 22 4d 42 22 2c 20 20 31 30 30 30 30 30 30  { "MB",  1000000
17670 20 7d 2c 0a 20 20 20 20 7b 20 22 47 42 22 2c 20   },.    { "GB", 
17680 20 31 30 30 30 30 30 30 30 30 30 20 7d 2c 0a 20   1000000000 },. 
17690 20 20 20 7b 20 22 4b 22 2c 20 20 20 31 30 30 30     { "K",   1000
176a0 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 22 2c 20 20   },.    { "M",  
176b0 20 31 30 30 30 30 30 30 20 7d 2c 0a 20 20 20 20   1000000 },.    
176c0 7b 20 22 47 22 2c 20 20 20 31 30 30 30 30 30 30  { "G",   1000000
176d0 30 30 30 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 6e  000 },.  };.  in
176e0 74 20 69 3b 0a 20 20 69 6e 74 20 69 73 4e 65 67  t i;.  int isNeg
176f0 20 3d 20 30 3b 0a 20 20 69 66 28 20 7a 41 72 67   = 0;.  if( zArg
17700 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
17710 69 73 4e 65 67 20 3d 20 31 3b 0a 20 20 20 20 7a  isNeg = 1;.    z
17720 41 72 67 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69  Arg++;.  }else i
17730 66 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 2b 27 20  f( zArg[0]=='+' 
17740 29 7b 0a 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20  ){.    zArg++;. 
17750 20 7d 0a 20 20 69 66 28 20 7a 41 72 67 5b 30 5d   }.  if( zArg[0]
17760 3d 3d 27 30 27 20 26 26 20 7a 41 72 67 5b 31 5d  =='0' && zArg[1]
17770 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 69 6e 74  =='x' ){.    int
17780 20 78 3b 0a 20 20 20 20 7a 41 72 67 20 2b 3d 20   x;.    zArg += 
17790 32 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 78  2;.    while( (x
177a0 20 3d 20 68 65 78 44 69 67 69 74 56 61 6c 75 65   = hexDigitValue
177b0 28 7a 41 72 67 5b 30 5d 29 29 3e 3d 30 20 29 7b  (zArg[0]))>=0 ){
177c0 0a 20 20 20 20 20 20 76 20 3d 20 28 76 3c 3c 34  .      v = (v<<4
177d0 29 20 2b 20 78 3b 0a 20 20 20 20 20 20 7a 41 72  ) + x;.      zAr
177e0 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  g++;.    }.  }el
177f0 73 65 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 49  se{.    while( I
17800 73 44 69 67 69 74 28 7a 41 72 67 5b 30 5d 29 20  sDigit(zArg[0]) 
17810 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 76 2a 31  ){.      v = v*1
17820 30 20 2b 20 7a 41 72 67 5b 30 5d 20 2d 20 27 30  0 + zArg[0] - '0
17830 27 3b 0a 20 20 20 20 20 20 7a 41 72 67 2b 2b 3b  ';.      zArg++;
17840 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 6f 72  .    }.  }.  for
17850 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
17860 65 28 61 4d 75 6c 74 29 3b 20 69 2b 2b 29 7b 0a  e(aMult); i++){.
17870 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
17880 73 74 72 69 63 6d 70 28 61 4d 75 6c 74 5b 69 5d  stricmp(aMult[i]
17890 2e 7a 53 75 66 66 69 78 2c 20 7a 41 72 67 29 3d  .zSuffix, zArg)=
178a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20 2a 3d  =0 ){.      v *=
178b0 20 61 4d 75 6c 74 5b 69 5d 2e 69 4d 75 6c 74 3b   aMult[i].iMult;
178c0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
178d0 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
178e0 20 69 73 4e 65 67 3f 20 2d 76 20 3a 20 76 3b 0a   isNeg? -v : v;.
178f0 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  }../*.** Interpr
17900 65 74 20 7a 41 72 67 20 61 73 20 65 69 74 68 65  et zArg as eithe
17910 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  r an integer or 
17920 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
17930 20 20 52 65 74 75 72 6e 20 31 20 6f 72 20 30 0a    Return 1 or 0.
17940 2a 2a 20 66 6f 72 20 54 52 55 45 20 61 6e 64 20  ** for TRUE and 
17950 46 41 4c 53 45 2e 20 20 52 65 74 75 72 6e 20 74  FALSE.  Return t
17960 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
17970 20 69 66 20 61 70 70 72 6f 70 72 69 61 74 65 2e   if appropriate.
17980 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 62  .*/.static int b
17990 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 63 6f 6e 73  ooleanValue(cons
179a0 74 20 63 68 61 72 20 2a 7a 41 72 67 29 7b 0a 20  t char *zArg){. 
179b0 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a 41   int i;.  if( zA
179c0 72 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41  rg[0]=='0' && zA
179d0 72 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20  rg[1]=='x' ){.  
179e0 20 20 66 6f 72 28 69 3d 32 3b 20 68 65 78 44 69    for(i=2; hexDi
179f0 67 69 74 56 61 6c 75 65 28 7a 41 72 67 5b 69 5d  gitValue(zArg[i]
17a00 29 3e 3d 30 3b 20 69 2b 2b 29 7b 7d 0a 20 20 7d  )>=0; i++){}.  }
17a10 65 6c 73 65 7b 0a 20 20 20 20 66 6f 72 28 69 3d  else{.    for(i=
17a20 30 3b 20 7a 41 72 67 5b 69 5d 3e 3d 27 30 27 20  0; zArg[i]>='0' 
17a30 26 26 20 7a 41 72 67 5b 69 5d 3c 3d 27 39 27 3b  && zArg[i]<='9';
17a40 20 69 2b 2b 29 7b 7d 0a 20 20 7d 0a 20 20 69 66   i++){}.  }.  if
17a50 28 20 69 3e 30 20 26 26 20 7a 41 72 67 5b 69 5d  ( i>0 && zArg[i]
17a60 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 28 69 6e  ==0 ) return (in
17a70 74 29 28 69 6e 74 65 67 65 72 56 61 6c 75 65 28  t)(integerValue(
17a80 7a 41 72 67 29 20 26 20 30 78 66 66 66 66 66 66  zArg) & 0xffffff
17a90 66 66 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  ff);.  if( sqlit
17aa0 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c  e3_stricmp(zArg,
17ab0 20 22 6f 6e 22 29 3d 3d 30 20 7c 7c 20 73 71 6c   "on")==0 || sql
17ac0 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72  ite3_stricmp(zAr
17ad0 67 2c 22 79 65 73 22 29 3d 3d 30 20 29 7b 0a 20  g,"yes")==0 ){. 
17ae0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
17af0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73  .  if( sqlite3_s
17b00 74 72 69 63 6d 70 28 7a 41 72 67 2c 20 22 6f 66  tricmp(zArg, "of
17b10 66 22 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  f")==0 || sqlite
17b20 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 22  3_stricmp(zArg,"
17b30 6e 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  no")==0 ){.    r
17b40 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 75  eturn 0;.  }.  u
17b50 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
17b60 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 74 20 61  r, "ERROR: Not a
17b70 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
17b80 5c 22 25 73 5c 22 2e 20 41 73 73 75 6d 69 6e 67  \"%s\". Assuming
17b90 20 5c 22 6e 6f 5c 22 2e 5c 6e 22 2c 0a 20 20 20   \"no\".\n",.   
17ba0 20 20 20 20 20 20 20 7a 41 72 67 29 3b 0a 20 20         zArg);.  
17bb0 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
17bc0 2a 2a 20 53 65 74 20 6f 72 20 63 6c 65 61 72 20  ** Set or clear 
17bd0 61 20 73 68 65 6c 6c 20 66 6c 61 67 20 61 63 63  a shell flag acc
17be0 6f 72 64 69 6e 67 20 74 6f 20 61 20 62 6f 6f 6c  ording to a bool
17bf0 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ean value..*/.st
17c00 61 74 69 63 20 76 6f 69 64 20 73 65 74 4f 72 43  atic void setOrC
17c10 6c 65 61 72 46 6c 61 67 28 53 68 65 6c 6c 53 74  learFlag(ShellSt
17c20 61 74 65 20 2a 70 2c 20 75 6e 73 69 67 6e 65 64  ate *p, unsigned
17c30 20 6d 46 6c 61 67 2c 20 63 6f 6e 73 74 20 63 68   mFlag, const ch
17c40 61 72 20 2a 7a 41 72 67 29 7b 0a 20 20 69 66 28  ar *zArg){.  if(
17c50 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 7a 41   booleanValue(zA
17c60 72 67 29 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c  rg) ){.    Shell
17c70 53 65 74 46 6c 61 67 28 70 2c 20 6d 46 6c 61 67  SetFlag(p, mFlag
17c80 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
17c90 53 68 65 6c 6c 43 6c 65 61 72 46 6c 61 67 28 70  ShellClearFlag(p
17ca0 2c 20 6d 46 6c 61 67 29 3b 0a 20 20 7d 0a 7d 0a  , mFlag);.  }.}.
17cb0 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20  ./*.** Close an 
17cc0 6f 75 74 70 75 74 20 66 69 6c 65 2c 20 61 73 73  output file, ass
17cd0 75 6d 69 6e 67 20 69 74 20 69 73 20 6e 6f 74 20  uming it is not 
17ce0 73 74 64 65 72 72 20 6f 72 20 73 74 64 6f 75 74  stderr or stdout
17cf0 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
17d00 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
17d10 65 28 46 49 4c 45 20 2a 66 29 7b 0a 20 20 69 66  e(FILE *f){.  if
17d20 28 20 66 20 26 26 20 66 21 3d 73 74 64 6f 75 74  ( f && f!=stdout
17d30 20 26 26 20 66 21 3d 73 74 64 65 72 72 20 29 20   && f!=stderr ) 
17d40 66 63 6c 6f 73 65 28 66 29 3b 0a 7d 0a 0a 2f 2a  fclose(f);.}../*
17d50 0a 2a 2a 20 54 72 79 20 74 6f 20 6f 70 65 6e 20  .** Try to open 
17d60 61 6e 20 6f 75 74 70 75 74 20 66 69 6c 65 2e 20  an output file. 
17d70 20 20 54 68 65 20 6e 61 6d 65 73 20 22 73 74 64    The names "std
17d80 6f 75 74 22 20 61 6e 64 20 22 73 74 64 65 72 72  out" and "stderr
17d90 22 20 61 72 65 0a 2a 2a 20 72 65 63 6f 67 6e 69  " are.** recogni
17da0 7a 65 64 20 61 6e 64 20 64 6f 20 74 68 65 20 72  zed and do the r
17db0 69 67 68 74 20 74 68 69 6e 67 2e 20 20 4e 55 4c  ight thing.  NUL
17dc0 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66  L is returned if
17dd0 20 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 66   the output.** f
17de0 69 6c 65 6e 61 6d 65 20 69 73 20 22 6f 66 66 22  ilename is "off"
17df0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 46 49 4c 45  ..*/.static FILE
17e00 20 2a 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70   *output_file_op
17e10 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  en(const char *z
17e20 46 69 6c 65 29 7b 0a 20 20 46 49 4c 45 20 2a 66  File){.  FILE *f
17e30 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a  ;.  if( strcmp(z
17e40 46 69 6c 65 2c 22 73 74 64 6f 75 74 22 29 3d 3d  File,"stdout")==
17e50 30 20 29 7b 0a 20 20 20 20 66 20 3d 20 73 74 64  0 ){.    f = std
17e60 6f 75 74 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  out;.  }else if(
17e70 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c 20 22   strcmp(zFile, "
17e80 73 74 64 65 72 72 22 29 3d 3d 30 20 29 7b 0a 20  stderr")==0 ){. 
17e90 20 20 20 66 20 3d 20 73 74 64 65 72 72 3b 0a 20     f = stderr;. 
17ea0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
17eb0 70 28 7a 46 69 6c 65 2c 20 22 6f 66 66 22 29 3d  p(zFile, "off")=
17ec0 3d 30 20 29 7b 0a 20 20 20 20 66 20 3d 20 30 3b  =0 ){.    f = 0;
17ed0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 20  .  }else{.    f 
17ee0 3d 20 66 6f 70 65 6e 28 7a 46 69 6c 65 2c 20 22  = fopen(zFile, "
17ef0 77 62 22 29 3b 0a 20 20 20 20 69 66 28 20 66 3d  wb");.    if( f=
17f00 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  =0 ){.      utf8
17f10 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
17f20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f  "Error: cannot o
17f30 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a  pen \"%s\"\n", z
17f40 46 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  File);.    }.  }
17f50 0a 20 20 72 65 74 75 72 6e 20 66 3b 0a 7d 0a 0a  .  return f;.}..
17f60 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
17f70 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 29 0a  ITE_UNTESTABLE).
17f80 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
17f90 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 29 20  ITE_OMIT_TRACE) 
17fa0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
17fb0 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
17fc0 5f 50 4f 49 4e 54 29 0a 2f 2a 0a 2a 2a 20 41 20  _POINT)./*.** A 
17fd0 72 6f 75 74 69 6e 65 20 66 6f 72 20 68 61 6e 64  routine for hand
17fe0 6c 69 6e 67 20 6f 75 74 70 75 74 20 66 72 6f 6d  ling output from
17ff0 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
18000 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
18010 73 71 6c 5f 74 72 61 63 65 5f 63 61 6c 6c 62 61  sql_trace_callba
18020 63 6b 28 0a 20 20 75 6e 73 69 67 6e 65 64 20 6d  ck(.  unsigned m
18030 54 79 70 65 2c 0a 20 20 76 6f 69 64 20 2a 70 41  Type,.  void *pA
18040 72 67 2c 0a 20 20 76 6f 69 64 20 2a 70 50 2c 0a  rg,.  void *pP,.
18050 20 20 76 6f 69 64 20 2a 70 58 0a 29 7b 0a 20 20    void *pX.){.  
18060 46 49 4c 45 20 2a 66 20 3d 20 28 46 49 4c 45 2a  FILE *f = (FILE*
18070 29 70 41 72 67 3b 0a 20 20 55 4e 55 53 45 44 5f  )pArg;.  UNUSED_
18080 50 41 52 41 4d 45 54 45 52 28 6d 54 79 70 65 29  PARAMETER(mType)
18090 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ;.  UNUSED_PARAM
180a0 45 54 45 52 28 70 50 29 3b 0a 20 20 69 66 28 20  ETER(pP);.  if( 
180b0 66 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  f ){.    const c
180c0 68 61 72 20 2a 7a 20 3d 20 28 63 6f 6e 73 74 20  har *z = (const 
180d0 63 68 61 72 2a 29 70 58 3b 0a 20 20 20 20 69 6e  char*)pX;.    in
180e0 74 20 69 20 3d 20 28 69 6e 74 29 73 74 72 6c 65  t i = (int)strle
180f0 6e 28 7a 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  n(z);.    while(
18100 20 69 3e 30 20 26 26 20 7a 5b 69 2d 31 5d 3d 3d   i>0 && z[i-1]==
18110 27 3b 27 20 29 7b 20 69 2d 2d 3b 20 7d 0a 20 20  ';' ){ i--; }.  
18120 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 66 2c    utf8_printf(f,
18130 20 22 25 2e 2a 73 3b 5c 6e 22 2c 20 69 2c 20 7a   "%.*s;\n", i, z
18140 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
18150 30 3b 0a 7d 0a 23 65 6e 64 69 66 0a 23 65 6e 64  0;.}.#endif.#end
18160 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6e 6f 2d 6f  if../*.** A no-o
18170 70 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  p routine that r
18180 75 6e 73 20 77 69 74 68 20 74 68 65 20 22 2e 62  uns with the ".b
18190 72 65 61 6b 70 6f 69 6e 74 22 20 64 6f 63 2d 63  reakpoint" doc-c
181a0 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 69 73  ommand.  This is
181b0 0a 2a 2a 20 61 20 75 73 65 66 75 6c 20 73 70 6f  .** a useful spo
181c0 74 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67  t to set a debug
181d0 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a  ger breakpoint..
181e0 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  */.static void t
181f0 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 76  est_breakpoint(v
18200 6f 69 64 29 7b 0a 20 20 73 74 61 74 69 63 20 69  oid){.  static i
18210 6e 74 20 6e 43 61 6c 6c 20 3d 20 30 3b 0a 20 20  nt nCall = 0;.  
18220 6e 43 61 6c 6c 2b 2b 3b 0a 7d 0a 0a 2f 2a 0a 2a  nCall++;.}../*.*
18230 2a 20 41 6e 20 6f 62 6a 65 63 74 20 75 73 65 64  * An object used
18240 20 74 6f 20 72 65 61 64 20 61 20 43 53 56 20 61   to read a CSV a
18250 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73 20 66  nd other files f
18260 6f 72 20 69 6d 70 6f 72 74 2e 0a 2a 2f 0a 74 79  or import..*/.ty
18270 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6d 70  pedef struct Imp
18280 6f 72 74 43 74 78 20 49 6d 70 6f 72 74 43 74 78  ortCtx ImportCtx
18290 3b 0a 73 74 72 75 63 74 20 49 6d 70 6f 72 74 43  ;.struct ImportC
182a0 74 78 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  tx {.  const cha
182b0 72 20 2a 7a 46 69 6c 65 3b 20 20 2f 2a 20 4e 61  r *zFile;  /* Na
182c0 6d 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  me of the input 
182d0 66 69 6c 65 20 2a 2f 0a 20 20 46 49 4c 45 20 2a  file */.  FILE *
182e0 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  in;           /*
182f0 20 52 65 61 64 20 74 68 65 20 43 53 56 20 74 65   Read the CSV te
18300 78 74 20 66 72 6f 6d 20 74 68 69 73 20 69 6e 70  xt from this inp
18310 75 74 20 73 74 72 65 61 6d 20 2a 2f 0a 20 20 63  ut stream */.  c
18320 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 20  har *z;         
18330 20 20 20 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65     /* Accumulate
18340 64 20 74 65 78 74 20 66 6f 72 20 61 20 66 69 65  d text for a fie
18350 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  ld */.  int n;  
18360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18370 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
18380 6e 20 7a 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c  n z */.  int nAl
18390 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
183a0 53 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  Space allocated 
183b0 66 6f 72 20 7a 5b 5d 20 2a 2f 0a 20 20 69 6e 74  for z[] */.  int
183c0 20 6e 4c 69 6e 65 3b 20 20 20 20 20 20 20 20 20   nLine;         
183d0 20 2f 2a 20 43 75 72 72 65 6e 74 20 6c 69 6e 65   /* Current line
183e0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 69 6e 74   number */.  int
183f0 20 62 4e 6f 74 46 69 72 73 74 3b 20 20 20 20 20   bNotFirst;     
18400 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 6e 65 20   /* True if one 
18410 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 20 61 6c  or more bytes al
18420 72 65 61 64 79 20 72 65 61 64 20 2a 2f 0a 20 20  ready read */.  
18430 69 6e 74 20 63 54 65 72 6d 3b 20 20 20 20 20 20  int cTerm;      
18440 20 20 20 20 2f 2a 20 43 68 61 72 61 63 74 65 72      /* Character
18450 20 74 68 61 74 20 74 65 72 6d 69 6e 61 74 65 64   that terminated
18460 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
18470 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20   field */.  int 
18480 63 43 6f 6c 53 65 70 3b 20 20 20 20 20 20 20 20  cColSep;        
18490 2f 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 20 73 65  /* The column se
184a0 70 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65  parator characte
184b0 72 2e 20 20 28 55 73 75 61 6c 6c 79 20 22 2c 22  r.  (Usually ","
184c0 29 20 2a 2f 0a 20 20 69 6e 74 20 63 52 6f 77 53  ) */.  int cRowS
184d0 65 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ep;        /* Th
184e0 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 20  e row separator 
184f0 63 68 61 72 61 63 74 65 72 2e 20 20 28 55 73 75  character.  (Usu
18500 61 6c 6c 79 20 22 5c 6e 22 29 20 2a 2f 0a 7d 3b  ally "\n") */.};
18510 0a 0a 2f 2a 20 41 70 70 65 6e 64 20 61 20 73 69  ../* Append a si
18520 6e 67 6c 65 20 62 79 74 65 20 74 6f 20 7a 5b 5d  ngle byte to z[]
18530 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20   */.static void 
18540 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68  import_append_ch
18550 61 72 28 49 6d 70 6f 72 74 43 74 78 20 2a 70 2c  ar(ImportCtx *p,
18560 20 69 6e 74 20 63 29 7b 0a 20 20 69 66 28 20 70   int c){.  if( p
18570 2d 3e 6e 2b 31 3e 3d 70 2d 3e 6e 41 6c 6c 6f 63  ->n+1>=p->nAlloc
18580 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f   ){.    p->nAllo
18590 63 20 2b 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2b  c += p->nAlloc +
185a0 20 31 30 30 3b 0a 20 20 20 20 70 2d 3e 7a 20 3d   100;.    p->z =
185b0 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63   sqlite3_realloc
185c0 36 34 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c  64(p->z, p->nAll
185d0 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  oc);.    if( p->
185e0 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61  z==0 ){.      ra
185f0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
18600 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c   "out of memory\
18610 6e 22 29 3b 0a 20 20 20 20 20 20 65 78 69 74 28  n");.      exit(
18620 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1);.    }.  }.  
18630 70 2d 3e 7a 5b 70 2d 3e 6e 2b 2b 5d 20 3d 20 28  p->z[p->n++] = (
18640 63 68 61 72 29 63 3b 0a 7d 0a 0a 2f 2a 20 52 65  char)c;.}../* Re
18650 61 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65 6c  ad a single fiel
18660 64 20 6f 66 20 43 53 56 20 74 65 78 74 2e 20 20  d of CSV text.  
18670 43 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  Compatible with 
18680 72 66 63 34 31 38 30 20 61 6e 64 20 65 78 74 65  rfc4180 and exte
18690 6e 64 65 64 0a 2a 2a 20 77 69 74 68 20 74 68 65  nded.** with the
186a0 20 6f 70 74 69 6f 6e 20 6f 66 20 68 61 76 69 6e   option of havin
186b0 67 20 61 20 73 65 70 61 72 61 74 6f 72 20 6f 74  g a separator ot
186c0 68 65 72 20 74 68 61 6e 20 22 2c 22 2e 0a 2a 2a  her than ","..**
186d0 0a 2a 2a 20 20 20 2b 20 20 49 6e 70 75 74 20 63  .**   +  Input c
186e0 6f 6d 65 73 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e  omes from p->in.
186f0 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 72  .**   +  Store r
18700 65 73 75 6c 74 73 20 69 6e 20 70 2d 3e 7a 20 6f  esults in p->z o
18710 66 20 6c 65 6e 67 74 68 20 70 2d 3e 6e 2e 20 20  f length p->n.  
18720 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 70 2d  Space to hold p-
18730 3e 7a 20 63 6f 6d 65 73 0a 2a 2a 20 20 20 20 20  >z comes.**     
18740 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
18750 6c 6c 6f 63 36 34 28 29 2e 0a 2a 2a 20 20 20 2b  lloc64()..**   +
18760 20 20 55 73 65 20 70 2d 3e 63 53 65 70 20 61 73    Use p->cSep as
18770 20 74 68 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61   the column sepa
18780 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61  rator.  The defa
18790 75 6c 74 20 69 73 20 22 2c 22 2e 0a 2a 2a 20 20  ult is ","..**  
187a0 20 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70 20   +  Use p->rSep 
187b0 61 73 20 74 68 65 20 72 6f 77 20 73 65 70 61 72  as the row separ
187c0 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75  ator.  The defau
187d0 6c 74 20 69 73 20 22 5c 6e 22 2e 0a 2a 2a 20 20  lt is "\n"..**  
187e0 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b 20 6f   +  Keep track o
187f0 66 20 74 68 65 20 6c 69 6e 65 20 6e 75 6d 62 65  f the line numbe
18800 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a  r in p->nLine..*
18810 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74 68 65  *   +  Store the
18820 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
18830 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20 66  terminates the f
18840 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65 72 6d  ield in p->cTerm
18850 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20 20 20  .  Store.**     
18860 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d 66   EOF on end-of-f
18870 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52 65 70  ile..**   +  Rep
18880 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72 6f 72  ort syntax error
18890 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f 0a 73  s on stderr.*/.s
188a0 74 61 74 69 63 20 63 68 61 72 20 2a 53 51 4c 49  tatic char *SQLI
188b0 54 45 5f 43 44 45 43 4c 20 63 73 76 5f 72 65 61  TE_CDECL csv_rea
188c0 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d 70 6f  d_one_field(Impo
188d0 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69 6e 74  rtCtx *p){.  int
188e0 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70 20 3d   c;.  int cSep =
188f0 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20 20 69   p->cColSep;.  i
18900 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63 52 6f  nt rSep = p->cRo
18910 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d 20 30  wSep;.  p->n = 0
18920 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d  ;.  c = fgetc(p-
18930 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d 3d 45  >in);.  if( c==E
18940 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65 72 72  OF || seenInterr
18950 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e 63 54  upt ){.    p->cT
18960 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20 20 72  erm = EOF;.    r
18970 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69  eturn 0;.  }.  i
18980 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a 20 20 20  f( c=='"' ){.   
18990 20 69 6e 74 20 70 63 2c 20 70 70 63 3b 0a 20 20   int pc, ppc;.  
189a0 20 20 69 6e 74 20 73 74 61 72 74 4c 69 6e 65 20    int startLine 
189b0 3d 20 70 2d 3e 6e 4c 69 6e 65 3b 0a 20 20 20 20  = p->nLine;.    
189c0 69 6e 74 20 63 51 75 6f 74 65 20 3d 20 63 3b 0a  int cQuote = c;.
189d0 20 20 20 20 70 63 20 3d 20 70 70 63 20 3d 20 30      pc = ppc = 0
189e0 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 31 20 29  ;.    while( 1 )
189f0 7b 0a 20 20 20 20 20 20 63 20 3d 20 66 67 65 74  {.      c = fget
18a00 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20 20 20  c(p->in);.      
18a10 69 66 28 20 63 3d 3d 72 53 65 70 20 29 20 70 2d  if( c==rSep ) p-
18a20 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20  >nLine++;.      
18a30 69 66 28 20 63 3d 3d 63 51 75 6f 74 65 20 29 7b  if( c==cQuote ){
18a40 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 63 3d  .        if( pc=
18a50 3d 63 51 75 6f 74 65 20 29 7b 0a 20 20 20 20 20  =cQuote ){.     
18a60 20 20 20 20 20 70 63 20 3d 20 30 3b 0a 20 20 20       pc = 0;.   
18a70 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
18a80 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
18a90 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 63 3d   }.      if( (c=
18aa0 3d 63 53 65 70 20 26 26 20 70 63 3d 3d 63 51 75  =cSep && pc==cQu
18ab0 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  ote).       || (
18ac0 63 3d 3d 72 53 65 70 20 26 26 20 70 63 3d 3d 63  c==rSep && pc==c
18ad0 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c  Quote).       ||
18ae0 20 28 63 3d 3d 72 53 65 70 20 26 26 20 70 63 3d   (c==rSep && pc=
18af0 3d 27 5c 72 27 20 26 26 20 70 70 63 3d 3d 63 51  ='\r' && ppc==cQ
18b00 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c 20  uote).       || 
18b10 28 63 3d 3d 45 4f 46 20 26 26 20 70 63 3d 3d 63  (c==EOF && pc==c
18b20 51 75 6f 74 65 29 0a 20 20 20 20 20 20 29 7b 0a  Quote).      ){.
18b30 20 20 20 20 20 20 20 20 64 6f 7b 20 70 2d 3e 6e          do{ p->n
18b40 2d 2d 3b 20 7d 77 68 69 6c 65 28 20 70 2d 3e 7a  --; }while( p->z
18b50 5b 70 2d 3e 6e 5d 21 3d 63 51 75 6f 74 65 20 29  [p->n]!=cQuote )
18b60 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 63 54 65  ;.        p->cTe
18b70 72 6d 20 3d 20 63 3b 0a 20 20 20 20 20 20 20 20  rm = c;.        
18b80 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
18b90 20 20 20 20 20 69 66 28 20 70 63 3d 3d 63 51 75       if( pc==cQu
18ba0 6f 74 65 20 26 26 20 63 21 3d 27 5c 72 27 20 29  ote && c!='\r' )
18bb0 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
18bc0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25  rintf(stderr, "%
18bd0 73 3a 25 64 3a 20 75 6e 65 73 63 61 70 65 64 20  s:%d: unescaped 
18be0 25 63 20 63 68 61 72 61 63 74 65 72 5c 6e 22 2c  %c character\n",
18bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c00 20 70 2d 3e 7a 46 69 6c 65 2c 20 70 2d 3e 6e 4c   p->zFile, p->nL
18c10 69 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20 20  ine, cQuote);.  
18c20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
18c30 63 3d 3d 45 4f 46 20 29 7b 0a 20 20 20 20 20 20  c==EOF ){.      
18c40 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
18c50 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 75 6e  derr, "%s:%d: un
18c60 74 65 72 6d 69 6e 61 74 65 64 20 25 63 2d 71 75  terminated %c-qu
18c70 6f 74 65 64 20 66 69 65 6c 64 5c 6e 22 2c 0a 20  oted field\n",. 
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
18c90 2d 3e 7a 46 69 6c 65 2c 20 73 74 61 72 74 4c 69  ->zFile, startLi
18ca0 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20 20 20  ne, cQuote);.   
18cb0 20 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20       p->cTerm = 
18cc0 63 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  c;.        break
18cd0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
18ce0 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68  import_append_ch
18cf0 61 72 28 70 2c 20 63 29 3b 0a 20 20 20 20 20 20  ar(p, c);.      
18d00 70 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  ppc = pc;.      
18d10 70 63 20 3d 20 63 3b 0a 20 20 20 20 7d 0a 20 20  pc = c;.    }.  
18d20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 49 66  }else{.    /* If
18d30 20 74 68 69 73 20 69 73 20 74 68 65 20 66 69 72   this is the fir
18d40 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67 20 70  st field being p
18d50 61 72 73 65 64 20 61 6e 64 20 69 74 20 62 65 67  arsed and it beg
18d60 69 6e 73 20 77 69 74 68 20 74 68 65 0a 20 20 20  ins with the.   
18d70 20 2a 2a 20 55 54 46 2d 38 20 42 4f 4d 20 20 28   ** UTF-8 BOM  (
18d80 30 78 45 46 20 42 42 20 42 46 29 20 74 68 65 6e  0xEF BB BF) then
18d90 20 73 6b 69 70 20 74 68 65 20 42 4f 4d 20 2a 2f   skip the BOM */
18da0 0a 20 20 20 20 69 66 28 20 28 63 26 30 78 66 66  .    if( (c&0xff
18db0 29 3d 3d 30 78 65 66 20 26 26 20 70 2d 3e 62 4e  )==0xef && p->bN
18dc0 6f 74 46 69 72 73 74 3d 3d 30 20 29 7b 0a 20 20  otFirst==0 ){.  
18dd0 20 20 20 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e      import_appen
18de0 64 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a 20 20  d_char(p, c);.  
18df0 20 20 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d      c = fgetc(p-
18e00 3e 69 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20  >in);.      if( 
18e10 28 63 26 30 78 66 66 29 3d 3d 30 78 62 62 20 29  (c&0xff)==0xbb )
18e20 7b 0a 20 20 20 20 20 20 20 20 69 6d 70 6f 72 74  {.        import
18e30 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70 2c 20  _append_char(p, 
18e40 63 29 3b 0a 20 20 20 20 20 20 20 20 63 20 3d 20  c);.        c = 
18e50 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20  fgetc(p->in);.  
18e60 20 20 20 20 20 20 69 66 28 20 28 63 26 30 78 66        if( (c&0xf
18e70 66 29 3d 3d 30 78 62 66 20 29 7b 0a 20 20 20 20  f)==0xbf ){.    
18e80 20 20 20 20 20 20 70 2d 3e 62 4e 6f 74 46 69 72        p->bNotFir
18e90 73 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  st = 1;.        
18ea0 20 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20    p->n = 0;.    
18eb0 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 73 76        return csv
18ec0 5f 72 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28  _read_one_field(
18ed0 70 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  p);.        }.  
18ee0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
18ef0 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20 26 26  while( c!=EOF &&
18f00 20 63 21 3d 63 53 65 70 20 26 26 20 63 21 3d 72   c!=cSep && c!=r
18f10 53 65 70 20 29 7b 0a 20 20 20 20 20 20 69 6d 70  Sep ){.      imp
18f20 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28  ort_append_char(
18f30 70 2c 20 63 29 3b 0a 20 20 20 20 20 20 63 20 3d  p, c);.      c =
18f40 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20   fgetc(p->in);. 
18f50 20 20 20 7d 0a 20 20 20 20 69 66 28 20 63 3d 3d     }.    if( c==
18f60 72 53 65 70 20 29 7b 0a 20 20 20 20 20 20 70 2d  rSep ){.      p-
18f70 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20  >nLine++;.      
18f80 69 66 28 20 70 2d 3e 6e 3e 30 20 26 26 20 70 2d  if( p->n>0 && p-
18f90 3e 7a 5b 70 2d 3e 6e 2d 31 5d 3d 3d 27 5c 72 27  >z[p->n-1]=='\r'
18fa0 20 29 20 70 2d 3e 6e 2d 2d 3b 0a 20 20 20 20 7d   ) p->n--;.    }
18fb0 0a 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20  .    p->cTerm = 
18fc0 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e  c;.  }.  if( p->
18fd0 7a 20 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d  z ) p->z[p->n] =
18fe0 20 30 3b 0a 20 20 70 2d 3e 62 4e 6f 74 46 69 72   0;.  p->bNotFir
18ff0 73 74 20 3d 20 31 3b 0a 20 20 72 65 74 75 72 6e  st = 1;.  return
19000 20 70 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 20 52 65 61   p->z;.}../* Rea
19010 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65 6c 64  d a single field
19020 20 6f 66 20 41 53 43 49 49 20 64 65 6c 69 6d 69   of ASCII delimi
19030 74 65 64 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  ted text..**.** 
19040 20 20 2b 20 20 49 6e 70 75 74 20 63 6f 6d 65 73    +  Input comes
19050 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a 2a 20   from p->in..** 
19060 20 20 2b 20 20 53 74 6f 72 65 20 72 65 73 75 6c    +  Store resul
19070 74 73 20 69 6e 20 70 2d 3e 7a 20 6f 66 20 6c 65  ts in p->z of le
19080 6e 67 74 68 20 70 2d 3e 6e 2e 20 20 53 70 61 63  ngth p->n.  Spac
19090 65 20 74 6f 20 68 6f 6c 64 20 70 2d 3e 7a 20 63  e to hold p->z c
190a0 6f 6d 65 73 0a 2a 2a 20 20 20 20 20 20 66 72 6f  omes.**      fro
190b0 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
190c0 36 34 28 29 2e 0a 2a 2a 20 20 20 2b 20 20 55 73  64()..**   +  Us
190d0 65 20 70 2d 3e 63 53 65 70 20 61 73 20 74 68 65  e p->cSep as the
190e0 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f   column separato
190f0 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  r.  The default 
19100 69 73 20 22 5c 78 31 46 22 2e 0a 2a 2a 20 20 20  is "\x1F"..**   
19110 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70 20 61  +  Use p->rSep a
19120 73 20 74 68 65 20 72 6f 77 20 73 65 70 61 72 61  s the row separa
19130 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c  tor.  The defaul
19140 74 20 69 73 20 22 5c 78 31 45 22 2e 0a 2a 2a 20  t is "\x1E"..** 
19150 20 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b 20    +  Keep track 
19160 6f 66 20 74 68 65 20 72 6f 77 20 6e 75 6d 62 65  of the row numbe
19170 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a  r in p->nLine..*
19180 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74 68 65  *   +  Store the
19190 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
191a0 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20 66  terminates the f
191b0 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65 72 6d  ield in p->cTerm
191c0 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20 20 20  .  Store.**     
191d0 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d 66   EOF on end-of-f
191e0 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52 65 70  ile..**   +  Rep
191f0 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72 6f 72  ort syntax error
19200 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f 0a 73  s on stderr.*/.s
19210 74 61 74 69 63 20 63 68 61 72 20 2a 53 51 4c 49  tatic char *SQLI
19220 54 45 5f 43 44 45 43 4c 20 61 73 63 69 69 5f 72  TE_CDECL ascii_r
19230 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d  ead_one_field(Im
19240 70 6f 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69  portCtx *p){.  i
19250 6e 74 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70  nt c;.  int cSep
19260 20 3d 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20   = p->cColSep;. 
19270 20 69 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63   int rSep = p->c
19280 52 6f 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d  RowSep;.  p->n =
19290 20 30 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28   0;.  c = fgetc(
192a0 70 2d 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d  p->in);.  if( c=
192b0 3d 45 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65  =EOF || seenInte
192c0 72 72 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e  rrupt ){.    p->
192d0 63 54 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20  cTerm = EOF;.   
192e0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
192f0 20 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20 26   while( c!=EOF &
19300 26 20 63 21 3d 63 53 65 70 20 26 26 20 63 21 3d  & c!=cSep && c!=
19310 72 53 65 70 20 29 7b 0a 20 20 20 20 69 6d 70 6f  rSep ){.    impo
19320 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70  rt_append_char(p
19330 2c 20 63 29 3b 0a 20 20 20 20 63 20 3d 20 66 67  , c);.    c = fg
19340 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 7d 0a  etc(p->in);.  }.
19350 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20 29 7b    if( c==rSep ){
19360 0a 20 20 20 20 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b  .    p->nLine++;
19370 0a 20 20 7d 0a 20 20 70 2d 3e 63 54 65 72 6d 20  .  }.  p->cTerm 
19380 3d 20 63 3b 0a 20 20 69 66 28 20 70 2d 3e 7a 20  = c;.  if( p->z 
19390 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d 20 30  ) p->z[p->n] = 0
193a0 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a 3b  ;.  return p->z;
193b0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
193c0 20 74 72 61 6e 73 66 65 72 20 64 61 74 61 20 66   transfer data f
193d0 6f 72 20 74 61 62 6c 65 20 7a 54 61 62 6c 65 2e  or table zTable.
193e0 20 20 49 66 20 61 6e 20 65 72 72 6f 72 20 69 73    If an error is
193f0 20 73 65 65 6e 20 77 68 69 6c 65 0a 2a 2a 20 6d   seen while.** m
19400 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 2c 20 74  oving forward, t
19410 72 79 20 74 6f 20 67 6f 20 62 61 63 6b 77 61 72  ry to go backwar
19420 64 73 2e 20 20 54 68 65 20 62 61 63 6b 77 61 72  ds.  The backwar
19430 64 73 20 6d 6f 76 65 6d 65 6e 74 20 77 6f 6e 27  ds movement won'
19440 74 0a 2a 2a 20 77 6f 72 6b 20 66 6f 72 20 57 49  t.** work for WI
19450 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
19460 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es..*/.static vo
19470 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65 44 61 74  id tryToCloneDat
19480 61 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  a(.  ShellState 
19490 2a 70 2c 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e  *p,.  sqlite3 *n
194a0 65 77 44 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68  ewDb,.  const ch
194b0 61 72 20 2a 7a 54 61 62 6c 65 0a 29 7b 0a 20 20  ar *zTable.){.  
194c0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 51  sqlite3_stmt *pQ
194d0 75 65 72 79 20 3d 20 30 3b 0a 20 20 73 71 6c 69  uery = 0;.  sqli
194e0 74 65 33 5f 73 74 6d 74 20 2a 70 49 6e 73 65 72  te3_stmt *pInser
194f0 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a  t = 0;.  char *z
19500 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63 68 61  Query = 0;.  cha
19510 72 20 2a 7a 49 6e 73 65 72 74 20 3d 20 30 3b 0a  r *zInsert = 0;.
19520 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
19530 69 2c 20 6a 2c 20 6e 3b 0a 20 20 69 6e 74 20 6e  i, j, n;.  int n
19540 54 61 62 6c 65 20 3d 20 28 69 6e 74 29 73 74 72  Table = (int)str
19550 6c 65 6e 28 7a 54 61 62 6c 65 29 3b 0a 20 20 69  len(zTable);.  i
19560 6e 74 20 6b 20 3d 20 30 3b 0a 20 20 69 6e 74 20  nt k = 0;.  int 
19570 63 6e 74 20 3d 20 30 3b 0a 20 20 63 6f 6e 73 74  cnt = 0;.  const
19580 20 69 6e 74 20 73 70 69 6e 52 61 74 65 20 3d 20   int spinRate = 
19590 31 30 30 30 30 3b 0a 0a 20 20 7a 51 75 65 72 79  10000;..  zQuery
195a0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
195b0 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  tf("SELECT * FRO
195c0 4d 20 5c 22 25 77 5c 22 22 2c 20 7a 54 61 62 6c  M \"%w\"", zTabl
195d0 65 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  e);.  rc = sqlit
195e0 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
195f0 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31 2c  >db, zQuery, -1,
19600 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20   &pQuery, 0);.  
19610 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 75 74  if( rc ){.    ut
19620 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
19630 2c 20 22 45 72 72 6f 72 20 25 64 3a 20 25 73 20  , "Error %d: %s 
19640 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20  on [%s]\n",.    
19650 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
19660 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
19670 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65 33  (p->db), sqlite3
19680 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 2c 0a  _errmsg(p->db),.
19690 20 20 20 20 20 20 20 20 20 20 20 20 7a 51 75 65              zQue
196a0 72 79 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e  ry);.    goto en
196b0 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20 7d  d_data_xfer;.  }
196c0 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63  .  n = sqlite3_c
196d0 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 51 75 65  olumn_count(pQue
196e0 72 79 29 3b 0a 20 20 7a 49 6e 73 65 72 74 20 3d  ry);.  zInsert =
196f0 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36   sqlite3_malloc6
19700 34 28 32 30 30 20 2b 20 6e 54 61 62 6c 65 20 2b  4(200 + nTable +
19710 20 6e 2a 33 29 3b 0a 20 20 69 66 28 20 7a 49 6e   n*3);.  if( zIn
19720 73 65 72 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72  sert==0 ){.    r
19730 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
19740 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
19750 5c 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65  \n");.    goto e
19760 6e 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20  nd_data_xfer;.  
19770 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  }.  sqlite3_snpr
19780 69 6e 74 66 28 32 30 30 2b 6e 54 61 62 6c 65 2c  intf(200+nTable,
19790 7a 49 6e 73 65 72 74 2c 0a 20 20 20 20 20 20 20  zInsert,.       
197a0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 4e 53              "INS
197b0 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e  ERT OR IGNORE IN
197c0 54 4f 20 5c 22 25 73 5c 22 20 56 41 4c 55 45 53  TO \"%s\" VALUES
197d0 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  (?", zTable);.  
197e0 69 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  i = (int)strlen(
197f0 7a 49 6e 73 65 72 74 29 3b 0a 20 20 66 6f 72 28  zInsert);.  for(
19800 6a 3d 31 3b 20 6a 3c 6e 3b 20 6a 2b 2b 29 7b 0a  j=1; j<n; j++){.
19810 20 20 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65      memcpy(zInse
19820 72 74 2b 69 2c 20 22 2c 3f 22 2c 20 32 29 3b 0a  rt+i, ",?", 2);.
19830 20 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20 7d 0a      i += 2;.  }.
19840 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65 72 74    memcpy(zInsert
19850 2b 69 2c 20 22 29 3b 22 2c 20 33 29 3b 0a 20 20  +i, ");", 3);.  
19860 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
19870 70 61 72 65 5f 76 32 28 6e 65 77 44 62 2c 20 7a  pare_v2(newDb, z
19880 49 6e 73 65 72 74 2c 20 2d 31 2c 20 26 70 49 6e  Insert, -1, &pIn
19890 73 65 72 74 2c 20 30 29 3b 0a 20 20 69 66 28 20  sert, 0);.  if( 
198a0 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  rc ){.    utf8_p
198b0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
198c0 72 72 6f 72 20 25 64 3a 20 25 73 20 6f 6e 20 5b  rror %d: %s on [
198d0 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  %s]\n",.        
198e0 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65      sqlite3_exte
198f0 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 6e 65 77  nded_errcode(new
19900 44 62 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Db), sqlite3_err
19910 6d 73 67 28 6e 65 77 44 62 29 2c 0a 20 20 20 20  msg(newDb),.    
19920 20 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b          zQuery);
19930 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 64 61  .    goto end_da
19940 74 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20 66  ta_xfer;.  }.  f
19950 6f 72 28 6b 3d 30 3b 20 6b 3c 32 3b 20 6b 2b 2b  or(k=0; k<2; k++
19960 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 72  ){.    while( (r
19970 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70  c = sqlite3_step
19980 28 70 51 75 65 72 79 29 29 3d 3d 53 51 4c 49 54  (pQuery))==SQLIT
19990 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 66  E_ROW ){.      f
199a0 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
199b0 29 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63  ){.        switc
199c0 68 28 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  h( sqlite3_colum
199d0 6e 5f 74 79 70 65 28 70 51 75 65 72 79 2c 20 69  n_type(pQuery, i
199e0 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63  ) ){.          c
199f0 61 73 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a  ase SQLITE_NULL:
19a00 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
19a10 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
19a20 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 29 3b 0a  (pInsert, i+1);.
19a30 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
19a40 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
19a50 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
19a60 4c 49 54 45 5f 49 4e 54 45 47 45 52 3a 20 7b 0a  LITE_INTEGER: {.
19a70 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
19a80 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70  te3_bind_int64(p
19a90 49 6e 73 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c  Insert, i+1, sql
19aa0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
19ab0 34 28 70 51 75 65 72 79 2c 69 29 29 3b 0a 20 20  4(pQuery,i));.  
19ac0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
19ad0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
19ae0 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
19af0 54 45 5f 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20  TE_FLOAT: {.    
19b00 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
19b10 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70 49 6e 73  bind_double(pIns
19b20 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65  ert, i+1, sqlite
19b30 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28  3_column_double(
19b40 70 51 75 65 72 79 2c 69 29 29 3b 0a 20 20 20 20  pQuery,i));.    
19b50 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
19b60 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
19b70 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
19b80 5f 54 45 58 54 3a 20 7b 0a 20 20 20 20 20 20 20  _TEXT: {.       
19b90 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
19ba0 64 5f 74 65 78 74 28 70 49 6e 73 65 72 74 2c 20  d_text(pInsert, 
19bb0 69 2b 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20  i+1,.           
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 20 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73    (const char*)s
19be0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
19bf0 78 74 28 70 51 75 65 72 79 2c 69 29 2c 0a 20 20  xt(pQuery,i),.  
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c10 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 53             -1, S
19c20 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
19c30 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
19c40 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
19c50 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
19c60 49 54 45 5f 42 4c 4f 42 3a 20 7b 0a 20 20 20 20  ITE_BLOB: {.    
19c70 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
19c80 62 69 6e 64 5f 62 6c 6f 62 28 70 49 6e 73 65 72  bind_blob(pInser
19c90 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65 33 5f  t, i+1, sqlite3_
19ca0 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 51 75 65  column_blob(pQue
19cb0 72 79 2c 69 29 2c 0a 20 20 20 20 20 20 20 20 20  ry,i),.         
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ce0 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
19cf0 6e 5f 62 79 74 65 73 28 70 51 75 65 72 79 2c 69  n_bytes(pQuery,i
19d00 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
19d30 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
19d40 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
19d50 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
19d60 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
19d70 2f 2a 20 45 6e 64 20 66 6f 72 20 2a 2f 0a 20 20  /* End for */.  
19d80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19d90 5f 73 74 65 70 28 70 49 6e 73 65 72 74 29 3b 0a  _step(pInsert);.
19da0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
19db0 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53  LITE_OK && rc!=S
19dc0 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 72 63 21  QLITE_ROW && rc!
19dd0 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
19de0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
19df0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
19e00 6f 72 20 25 64 3a 20 25 73 5c 6e 22 2c 20 73 71  or %d: %s\n", sq
19e10 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
19e20 72 72 63 6f 64 65 28 6e 65 77 44 62 29 2c 0a 20  rrcode(newDb),. 
19e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e40 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65         sqlite3_e
19e50 72 72 6d 73 67 28 6e 65 77 44 62 29 29 3b 0a 20  rrmsg(newDb));. 
19e60 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
19e70 69 74 65 33 5f 72 65 73 65 74 28 70 49 6e 73 65  ite3_reset(pInse
19e80 72 74 29 3b 0a 20 20 20 20 20 20 63 6e 74 2b 2b  rt);.      cnt++
19e90 3b 0a 20 20 20 20 20 20 69 66 28 20 28 63 6e 74  ;.      if( (cnt
19ea0 25 73 70 69 6e 52 61 74 65 29 3d 3d 30 20 29 7b  %spinRate)==0 ){
19eb0 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
19ec0 22 25 63 5c 62 22 2c 20 22 7c 2f 2d 5c 5c 22 5b  "%c\b", "|/-\\"[
19ed0 28 63 6e 74 2f 73 70 69 6e 52 61 74 65 29 25 34  (cnt/spinRate)%4
19ee0 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 66 6c 75  ]);.        fflu
19ef0 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20  sh(stdout);.    
19f00 20 20 7d 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64    }.    } /* End
19f10 20 77 68 69 6c 65 20 2a 2f 0a 20 20 20 20 69 66   while */.    if
19f20 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
19f30 45 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 73  E ) break;.    s
19f40 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
19f50 70 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71 6c  pQuery);.    sql
19f60 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79  ite3_free(zQuery
19f70 29 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d 20  );.    zQuery = 
19f80 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
19f90 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c  "SELECT * FROM \
19fa0 22 25 77 5c 22 20 4f 52 44 45 52 20 42 59 20 72  "%w\" ORDER BY r
19fb0 6f 77 69 64 20 44 45 53 43 3b 22 2c 0a 20 20 20  owid DESC;",.   
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 20 20 20 20 20 20 20 20 20 7a 54 61 62 6c 65            zTable
19fe0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
19ff0 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
1a000 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31  ->db, zQuery, -1
1a010 2c 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  , &pQuery, 0);. 
1a020 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
1a030 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1a040 74 64 65 72 72 2c 20 22 57 61 72 6e 69 6e 67 3a  tderr, "Warning:
1a050 20 63 61 6e 6e 6f 74 20 73 74 65 70 20 5c 22 25   cannot step \"%
1a060 73 5c 22 20 62 61 63 6b 77 61 72 64 73 22 2c 20  s\" backwards", 
1a070 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 62  zTable);.      b
1a080 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  reak;.    }.  } 
1a090 2f 2a 20 45 6e 64 20 66 6f 72 28 6b 3d 30 2e 2e  /* End for(k=0..
1a0a0 2e 29 20 2a 2f 0a 0a 65 6e 64 5f 64 61 74 61 5f  .) */..end_data_
1a0b0 78 66 65 72 3a 0a 20 20 73 71 6c 69 74 65 33 5f  xfer:.  sqlite3_
1a0c0 66 69 6e 61 6c 69 7a 65 28 70 51 75 65 72 79 29  finalize(pQuery)
1a0d0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ;.  sqlite3_fina
1a0e0 6c 69 7a 65 28 70 49 6e 73 65 72 74 29 3b 0a 20  lize(pInsert);. 
1a0f0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51   sqlite3_free(zQ
1a100 75 65 72 79 29 3b 0a 20 20 73 71 6c 69 74 65 33  uery);.  sqlite3
1a110 5f 66 72 65 65 28 7a 49 6e 73 65 72 74 29 3b 0a  _free(zInsert);.
1a120 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  }.../*.** Try to
1a130 20 74 72 61 6e 73 66 65 72 20 61 6c 6c 20 72 6f   transfer all ro
1a140 77 73 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ws of the schema
1a150 20 74 68 61 74 20 6d 61 74 63 68 20 7a 57 68 65   that match zWhe
1a160 72 65 2e 20 20 46 6f 72 0a 2a 2a 20 65 61 63 68  re.  For.** each
1a170 20 72 6f 77 2c 20 69 6e 76 6f 6b 65 20 78 46 6f   row, invoke xFo
1a180 72 45 61 63 68 28 29 20 6f 6e 20 74 68 65 20 6f  rEach() on the o
1a190 62 6a 65 63 74 20 64 65 66 69 6e 65 64 20 62 79  bject defined by
1a1a0 20 74 68 61 74 20 72 6f 77 2e 0a 2a 2a 20 49 66   that row..** If
1a1b0 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63   an error is enc
1a1c0 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 6d  ountered while m
1a1d0 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 20 74 68  oving forward th
1a1e0 72 6f 75 67 68 20 74 68 65 0a 2a 2a 20 73 71 6c  rough the.** sql
1a1f0 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
1a200 2c 20 74 72 79 20 61 67 61 69 6e 20 6d 6f 76 69  , try again movi
1a210 6e 67 20 62 61 63 6b 77 61 72 64 73 2e 0a 2a 2f  ng backwards..*/
1a220 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 72 79  .static void try
1a230 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 0a 20  ToCloneSchema(. 
1a240 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a   ShellState *p,.
1a250 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44 62    sqlite3 *newDb
1a260 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
1a270 7a 57 68 65 72 65 2c 0a 20 20 76 6f 69 64 20 28  zWhere,.  void (
1a280 2a 78 46 6f 72 45 61 63 68 29 28 53 68 65 6c 6c  *xForEach)(Shell
1a290 53 74 61 74 65 2a 2c 73 71 6c 69 74 65 33 2a 2c  State*,sqlite3*,
1a2a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29 7b 0a  const char*).){.
1a2b0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1a2c0 70 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63 68  pQuery = 0;.  ch
1a2d0 61 72 20 2a 7a 51 75 65 72 79 20 3d 20 30 3b 0a  ar *zQuery = 0;.
1a2e0 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 6f 6e 73    int rc;.  cons
1a2f0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
1a300 2a 7a 4e 61 6d 65 3b 0a 20 20 63 6f 6e 73 74 20  *zName;.  const 
1a310 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a  unsigned char *z
1a320 53 71 6c 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72  Sql;.  char *zEr
1a330 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 7a 51 75  rMsg = 0;..  zQu
1a340 65 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ery = sqlite3_mp
1a350 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20 6e 61  rintf("SELECT na
1a360 6d 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  me, sql FROM sql
1a370 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20  ite_master".    
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20 25         " WHERE %
1a3a0 73 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20 72  s", zWhere);.  r
1a3b0 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
1a3c0 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 51  are_v2(p->db, zQ
1a3d0 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65 72  uery, -1, &pQuer
1a3e0 79 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 20  y, 0);.  if( rc 
1a3f0 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  ){.    utf8_prin
1a400 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1a410 72 3a 20 28 25 64 29 20 25 73 20 6f 6e 20 5b 25  r: (%d) %s on [%
1a420 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  s]\n",.         
1a430 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
1a440 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
1a450 6f 64 65 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69  ode(p->db), sqli
1a460 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62  te3_errmsg(p->db
1a470 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
1a480 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b 0a         zQuery);.
1a490 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 73 63 68      goto end_sch
1a4a0 65 6d 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20  ema_xfer;.  }.  
1a4b0 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c  while( (rc = sql
1a4c0 69 74 65 33 5f 73 74 65 70 28 70 51 75 65 72 79  ite3_step(pQuery
1a4d0 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  ))==SQLITE_ROW )
1a4e0 7b 0a 20 20 20 20 7a 4e 61 6d 65 20 3d 20 73 71  {.    zName = sq
1a4f0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
1a500 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20  t(pQuery, 0);.  
1a510 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
1a520 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75  _column_text(pQu
1a530 65 72 79 2c 20 31 29 3b 0a 20 20 20 20 70 72 69  ery, 1);.    pri
1a540 6e 74 66 28 22 25 73 2e 2e 2e 20 22 2c 20 7a 4e  ntf("%s... ", zN
1a550 61 6d 65 29 3b 20 66 66 6c 75 73 68 28 73 74 64  ame); fflush(std
1a560 6f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  out);.    sqlite
1a570 33 5f 65 78 65 63 28 6e 65 77 44 62 2c 20 28 63  3_exec(newDb, (c
1a580 6f 6e 73 74 20 63 68 61 72 2a 29 7a 53 71 6c 2c  onst char*)zSql,
1a590 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d 73 67 29   0, 0, &zErrMsg)
1a5a0 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73  ;.    if( zErrMs
1a5b0 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  g ){.      utf8_
1a5c0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1a5d0 45 72 72 6f 72 3a 20 25 73 5c 6e 53 51 4c 3a 20  Error: %s\nSQL: 
1a5e0 5b 25 73 5d 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  [%s]\n", zErrMsg
1a5f0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 73  , zSql);.      s
1a600 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
1a610 4d 73 67 29 3b 0a 20 20 20 20 20 20 7a 45 72 72  Msg);.      zErr
1a620 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  Msg = 0;.    }. 
1a630 20 20 20 69 66 28 20 78 46 6f 72 45 61 63 68 20     if( xForEach 
1a640 29 7b 0a 20 20 20 20 20 20 78 46 6f 72 45 61 63  ){.      xForEac
1a650 68 28 70 2c 20 6e 65 77 44 62 2c 20 28 63 6f 6e  h(p, newDb, (con
1a660 73 74 20 63 68 61 72 2a 29 7a 4e 61 6d 65 29 3b  st char*)zName);
1a670 0a 20 20 20 20 7d 0a 20 20 20 20 70 72 69 6e 74  .    }.    print
1a680 66 28 22 64 6f 6e 65 5c 6e 22 29 3b 0a 20 20 7d  f("done\n");.  }
1a690 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
1a6a0 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 73 71  E_DONE ){.    sq
1a6b0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
1a6c0 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71 6c 69  Query);.    sqli
1a6d0 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79 29  te3_free(zQuery)
1a6e0 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d 20 73  ;.    zQuery = s
1a6f0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1a700 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 73 71 6c  SELECT name, sql
1a710 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
1a720 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20  ter".           
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a740 20 20 22 20 57 48 45 52 45 20 25 73 20 4f 52 44    " WHERE %s ORD
1a750 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43  ER BY rowid DESC
1a760 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20 20 20  ", zWhere);.    
1a770 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
1a780 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
1a790 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65  Query, -1, &pQue
1a7a0 72 79 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  ry, 0);.    if( 
1a7b0 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  rc ){.      utf8
1a7c0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1a7d0 22 45 72 72 6f 72 3a 20 28 25 64 29 20 25 73 20  "Error: (%d) %s 
1a7e0 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20  on [%s]\n",.    
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a800 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64    sqlite3_extend
1a810 65 64 5f 65 72 72 63 6f 64 65 28 70 2d 3e 64 62  ed_errcode(p->db
1a820 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
1a830 67 28 70 2d 3e 64 62 29 2c 0a 20 20 20 20 20 20  g(p->db),.      
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a850 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 20 20 67  zQuery);.      g
1a860 6f 74 6f 20 65 6e 64 5f 73 63 68 65 6d 61 5f 78  oto end_schema_x
1a870 66 65 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  fer;.    }.    w
1a880 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69  hile( (rc = sqli
1a890 74 65 33 5f 73 74 65 70 28 70 51 75 65 72 79 29  te3_step(pQuery)
1a8a0 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
1a8b0 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 73  .      zName = s
1a8c0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1a8d0 78 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  xt(pQuery, 0);. 
1a8e0 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69       zSql = sqli
1a8f0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
1a900 70 51 75 65 72 79 2c 20 31 29 3b 0a 20 20 20 20  pQuery, 1);.    
1a910 20 20 70 72 69 6e 74 66 28 22 25 73 2e 2e 2e 20    printf("%s... 
1a920 22 2c 20 7a 4e 61 6d 65 29 3b 20 66 66 6c 75 73  ", zName); fflus
1a930 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20 20  h(stdout);.     
1a940 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e 65   sqlite3_exec(ne
1a950 77 44 62 2c 20 28 63 6f 6e 73 74 20 63 68 61 72  wDb, (const char
1a960 2a 29 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 26 7a  *)zSql, 0, 0, &z
1a970 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 69  ErrMsg);.      i
1a980 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  f( zErrMsg ){.  
1a990 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
1a9a0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
1a9b0 3a 20 25 73 5c 6e 53 51 4c 3a 20 5b 25 73 5d 5c  : %s\nSQL: [%s]\
1a9c0 6e 22 2c 20 7a 45 72 72 4d 73 67 2c 20 7a 53 71  n", zErrMsg, zSq
1a9d0 6c 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  l);.        sqli
1a9e0 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
1a9f0 29 3b 0a 20 20 20 20 20 20 20 20 7a 45 72 72 4d  );.        zErrM
1aa00 73 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  sg = 0;.      }.
1aa10 20 20 20 20 20 20 69 66 28 20 78 46 6f 72 45 61        if( xForEa
1aa20 63 68 20 29 7b 0a 20 20 20 20 20 20 20 20 78 46  ch ){.        xF
1aa30 6f 72 45 61 63 68 28 70 2c 20 6e 65 77 44 62 2c  orEach(p, newDb,
1aa40 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 4e   (const char*)zN
1aa50 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ame);.      }.  
1aa60 20 20 20 20 70 72 69 6e 74 66 28 22 64 6f 6e 65      printf("done
1aa70 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  \n");.    }.  }.
1aa80 65 6e 64 5f 73 63 68 65 6d 61 5f 78 66 65 72 3a  end_schema_xfer:
1aa90 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
1aaa0 69 7a 65 28 70 51 75 65 72 79 29 3b 0a 20 20 73  ize(pQuery);.  s
1aab0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65  qlite3_free(zQue
1aac0 72 79 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70  ry);.}../*.** Op
1aad0 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73  en a new databas
1aae0 65 20 66 69 6c 65 20 6e 61 6d 65 64 20 22 7a 4e  e file named "zN
1aaf0 65 77 44 62 22 2e 20 20 54 72 79 20 74 6f 20 72  ewDb".  Try to r
1ab00 65 63 6f 76 65 72 20 61 73 20 6d 75 63 68 20 69  ecover as much i
1ab10 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 61 73  nformation.** as
1ab20 20 70 6f 73 73 69 62 6c 65 20 6f 75 74 20 6f 66   possible out of
1ab30 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1ab40 73 65 20 28 77 68 69 63 68 20 6d 69 67 68 74 20  se (which might 
1ab50 62 65 20 63 6f 72 72 75 70 74 29 20 61 6e 64 20  be corrupt) and 
1ab60 77 72 69 74 65 20 69 74 0a 2a 2a 20 69 6e 74 6f  write it.** into
1ab70 20 7a 4e 65 77 44 62 2e 0a 2a 2f 0a 73 74 61 74   zNewDb..*/.stat
1ab80 69 63 20 76 6f 69 64 20 74 72 79 54 6f 43 6c 6f  ic void tryToClo
1ab90 6e 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  ne(ShellState *p
1aba0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  , const char *zN
1abb0 65 77 44 62 29 7b 0a 20 20 69 6e 74 20 72 63 3b  ewDb){.  int rc;
1abc0 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44  .  sqlite3 *newD
1abd0 62 20 3d 20 30 3b 0a 20 20 69 66 28 20 61 63 63  b = 0;.  if( acc
1abe0 65 73 73 28 7a 4e 65 77 44 62 2c 30 29 3d 3d 30  ess(zNewDb,0)==0
1abf0 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
1ac00 6e 74 66 28 73 74 64 65 72 72 2c 20 22 46 69 6c  ntf(stderr, "Fil
1ac10 65 20 5c 22 25 73 5c 22 20 61 6c 72 65 61 64 79  e \"%s\" already
1ac20 20 65 78 69 73 74 73 2e 5c 6e 22 2c 20 7a 4e 65   exists.\n", zNe
1ac30 77 44 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  wDb);.    return
1ac40 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
1ac50 69 74 65 33 5f 6f 70 65 6e 28 7a 4e 65 77 44 62  ite3_open(zNewDb
1ac60 2c 20 26 6e 65 77 44 62 29 3b 0a 20 20 69 66 28  , &newDb);.  if(
1ac70 20 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f   rc ){.    utf8_
1ac80 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1ac90 43 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 6f 75  Cannot create ou
1aca0 74 70 75 74 20 64 61 74 61 62 61 73 65 3a 20 25  tput database: %
1acb0 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
1acc0 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
1acd0 28 6e 65 77 44 62 29 29 3b 0a 20 20 7d 65 6c 73  (newDb));.  }els
1ace0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  e{.    sqlite3_e
1acf0 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47  xec(p->db, "PRAG
1ad00 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
1ad10 6d 61 3d 4f 4e 3b 22 2c 20 30 2c 20 30 2c 20 30  ma=ON;", 0, 0, 0
1ad20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  );.    sqlite3_e
1ad30 78 65 63 28 6e 65 77 44 62 2c 20 22 42 45 47 49  xec(newDb, "BEGI
1ad40 4e 20 45 58 43 4c 55 53 49 56 45 3b 22 2c 20 30  N EXCLUSIVE;", 0
1ad50 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 74 72 79  , 0, 0);.    try
1ad60 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 70 2c  ToCloneSchema(p,
1ad70 20 6e 65 77 44 62 2c 20 22 74 79 70 65 3d 27 74   newDb, "type='t
1ad80 61 62 6c 65 27 22 2c 20 74 72 79 54 6f 43 6c 6f  able'", tryToClo
1ad90 6e 65 44 61 74 61 29 3b 0a 20 20 20 20 74 72 79  neData);.    try
1ada0 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 70 2c  ToCloneSchema(p,
1adb0 20 6e 65 77 44 62 2c 20 22 74 79 70 65 21 3d 27   newDb, "type!='
1adc0 74 61 62 6c 65 27 22 2c 20 30 29 3b 0a 20 20 20  table'", 0);.   
1add0 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e 65   sqlite3_exec(ne
1ade0 77 44 62 2c 20 22 43 4f 4d 4d 49 54 3b 22 2c 20  wDb, "COMMIT;", 
1adf0 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71  0, 0, 0);.    sq
1ae00 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
1ae10 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74 61 62  , "PRAGMA writab
1ae20 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 3b 22 2c  le_schema=OFF;",
1ae30 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20   0, 0, 0);.  }. 
1ae40 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 6e   sqlite3_close(n
1ae50 65 77 44 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ewDb);.}../*.** 
1ae60 43 68 61 6e 67 65 20 74 68 65 20 6f 75 74 70 75  Change the outpu
1ae70 74 20 66 69 6c 65 20 62 61 63 6b 20 74 6f 20 73  t file back to s
1ae80 74 64 6f 75 74 0a 2a 2f 0a 73 74 61 74 69 63 20  tdout.*/.static 
1ae90 76 6f 69 64 20 6f 75 74 70 75 74 5f 72 65 73 65  void output_rese
1aea0 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29  t(ShellState *p)
1aeb0 7b 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74 66 69  {.  if( p->outfi
1aec0 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29 7b 0a 23 69  le[0]=='|' ){.#i
1aed0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1aee0 54 5f 50 4f 50 45 4e 0a 20 20 20 20 70 63 6c 6f  T_POPEN.    pclo
1aef0 73 65 28 70 2d 3e 6f 75 74 29 3b 0a 23 65 6e 64  se(p->out);.#end
1af00 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  if.  }else{.    
1af10 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
1af20 65 28 70 2d 3e 6f 75 74 29 3b 0a 20 20 7d 0a 20  e(p->out);.  }. 
1af30 20 70 2d 3e 6f 75 74 66 69 6c 65 5b 30 5d 20 3d   p->outfile[0] =
1af40 20 30 3b 0a 20 20 70 2d 3e 6f 75 74 20 3d 20 73   0;.  p->out = s
1af50 74 64 6f 75 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  tdout;.}../*.** 
1af60 52 75 6e 20 61 6e 20 53 51 4c 20 63 6f 6d 6d 61  Run an SQL comma
1af70 6e 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68  nd and return th
1af80 65 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  e single integer
1af90 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74   result..*/.stat
1afa0 69 63 20 69 6e 74 20 64 62 5f 69 6e 74 28 53 68  ic int db_int(Sh
1afb0 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
1afc0 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 29 7b 0a  st char *zSql){.
1afd0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1afe0 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 65 73  pStmt;.  int res
1aff0 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
1b000 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
1b010 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
1b020 6d 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 53  mt, 0);.  if( pS
1b030 74 6d 74 20 26 26 20 73 71 6c 69 74 65 33 5f 73  tmt && sqlite3_s
1b040 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49  tep(pStmt)==SQLI
1b050 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 72 65  TE_ROW ){.    re
1b060 73 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  s = sqlite3_colu
1b070 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 30 29 3b  mn_int(pStmt,0);
1b080 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
1b090 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
1b0a0 20 20 72 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a    return res;.}.
1b0b0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61  ./*.** Convert a
1b0c0 20 32 2d 62 79 74 65 20 6f 72 20 34 2d 62 79 74   2-byte or 4-byt
1b0d0 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
1b0e0 65 67 65 72 20 69 6e 74 6f 20 61 20 6e 61 74 69  eger into a nati
1b0f0 76 65 20 69 6e 74 65 67 65 72 0a 2a 2f 0a 73 74  ve integer.*/.st
1b100 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 69 6e  atic unsigned in
1b110 74 20 67 65 74 32 62 79 74 65 49 6e 74 28 75 6e  t get2byteInt(un
1b120 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 29 7b  signed char *a){
1b130 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30 5d 3c  .  return (a[0]<
1b140 3c 38 29 20 2b 20 61 5b 31 5d 3b 0a 7d 0a 73 74  <8) + a[1];.}.st
1b150 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 69 6e  atic unsigned in
1b160 74 20 67 65 74 34 62 79 74 65 49 6e 74 28 75 6e  t get4byteInt(un
1b170 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 29 7b  signed char *a){
1b180 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30 5d 3c  .  return (a[0]<
1b190 3c 32 34 29 20 2b 20 28 61 5b 31 5d 3c 3c 31 36  <24) + (a[1]<<16
1b1a0 29 20 2b 20 28 61 5b 32 5d 3c 3c 38 29 20 2b 20  ) + (a[2]<<8) + 
1b1b0 61 5b 33 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  a[3];.}../*.** I
1b1c0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
1b1d0 20 74 68 65 20 22 2e 69 6e 66 6f 22 20 63 6f 6d   the ".info" com
1b1e0 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75  mand..**.** Retu
1b1f0 72 6e 20 31 20 6f 6e 20 65 72 72 6f 72 2c 20 32  rn 1 on error, 2
1b200 20 74 6f 20 65 78 69 74 2c 20 61 6e 64 20 30 20   to exit, and 0 
1b210 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 73 74  otherwise..*/.st
1b220 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 64  atic int shell_d
1b230 62 69 6e 66 6f 5f 63 6f 6d 6d 61 6e 64 28 53 68  binfo_command(Sh
1b240 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 69 6e 74  ellState *p, int
1b250 20 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a   nArg, char **az
1b260 41 72 67 29 7b 0a 20 20 73 74 61 74 69 63 20 63  Arg){.  static c
1b270 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 20 63 6f  onst struct { co
1b280 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
1b290 20 69 6e 74 20 6f 66 73 74 3b 20 7d 20 61 46 69   int ofst; } aFi
1b2a0 65 6c 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b  eld[] = {.     {
1b2b0 20 22 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f   "file change co
1b2c0 75 6e 74 65 72 3a 22 2c 20 20 32 34 20 20 7d 2c  unter:",  24  },
1b2d0 0a 20 20 20 20 20 7b 20 22 64 61 74 61 62 61 73  .     { "databas
1b2e0 65 20 70 61 67 65 20 63 6f 75 6e 74 3a 22 2c 20  e page count:", 
1b2f0 20 32 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   28  },.     { "
1b300 66 72 65 65 6c 69 73 74 20 70 61 67 65 20 63 6f  freelist page co
1b310 75 6e 74 3a 22 2c 20 20 33 36 20 20 7d 2c 0a 20  unt:",  36  },. 
1b320 20 20 20 20 7b 20 22 73 63 68 65 6d 61 20 63 6f      { "schema co
1b330 6f 6b 69 65 3a 22 2c 20 20 20 20 20 20 20 20 34  okie:",        4
1b340 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 63  0  },.     { "sc
1b350 68 65 6d 61 20 66 6f 72 6d 61 74 3a 22 2c 20 20  hema format:",  
1b360 20 20 20 20 20 20 34 34 20 20 7d 2c 0a 20 20 20        44  },.   
1b370 20 20 7b 20 22 64 65 66 61 75 6c 74 20 63 61 63    { "default cac
1b380 68 65 20 73 69 7a 65 3a 22 2c 20 20 20 34 38 20  he size:",   48 
1b390 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 75 74 6f   },.     { "auto
1b3a0 76 61 63 75 75 6d 20 74 6f 70 20 72 6f 6f 74 3a  vacuum top root:
1b3b0 22 2c 20 20 35 32 20 20 7d 2c 0a 20 20 20 20 20  ",  52  },.     
1b3c0 7b 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  { "incremental v
1b3d0 61 63 75 75 6d 3a 22 2c 20 20 20 36 34 20 20 7d  acuum:",   64  }
1b3e0 2c 0a 20 20 20 20 20 7b 20 22 74 65 78 74 20 65  ,.     { "text e
1b3f0 6e 63 6f 64 69 6e 67 3a 22 2c 20 20 20 20 20 20  ncoding:",      
1b400 20 20 35 36 20 20 7d 2c 0a 20 20 20 20 20 7b 20    56  },.     { 
1b410 22 75 73 65 72 20 76 65 72 73 69 6f 6e 3a 22 2c  "user version:",
1b420 20 20 20 20 20 20 20 20 20 36 30 20 20 7d 2c 0a           60  },.
1b430 20 20 20 20 20 7b 20 22 61 70 70 6c 69 63 61 74       { "applicat
1b440 69 6f 6e 20 69 64 3a 22 2c 20 20 20 20 20 20 20  ion id:",       
1b450 36 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  68  },.     { "s
1b460 6f 66 74 77 61 72 65 20 76 65 72 73 69 6f 6e 3a  oftware version:
1b470 22 2c 20 20 20 20 20 39 36 20 20 7d 2c 0a 20 20  ",     96  },.  
1b480 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
1b490 74 20 73 74 72 75 63 74 20 7b 20 63 6f 6e 73 74  t struct { const
1b4a0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 63 6f   char *zName; co
1b4b0 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20  nst char *zSql; 
1b4c0 7d 20 61 51 75 65 72 79 5b 5d 20 3d 20 7b 0a 20  } aQuery[] = {. 
1b4d0 20 20 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66      { "number of
1b4e0 20 74 61 62 6c 65 73 3a 22 2c 0a 20 20 20 20 20   tables:",.     
1b4f0 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28    "SELECT count(
1b500 2a 29 20 46 52 4f 4d 20 25 73 20 57 48 45 52 45  *) FROM %s WHERE
1b510 20 74 79 70 65 3d 27 74 61 62 6c 65 27 22 20 7d   type='table'" }
1b520 2c 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62 65 72  ,.     { "number
1b530 20 6f 66 20 69 6e 64 65 78 65 73 3a 22 2c 0a 20   of indexes:",. 
1b540 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f        "SELECT co
1b550 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73 20 57  unt(*) FROM %s W
1b560 48 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65 78  HERE type='index
1b570 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 6e 75  '" },.     { "nu
1b580 6d 62 65 72 20 6f 66 20 74 72 69 67 67 65 72 73  mber of triggers
1b590 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  :",.       "SELE
1b5a0 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
1b5b0 20 25 73 20 57 48 45 52 45 20 74 79 70 65 3d 27   %s WHERE type='
1b5c0 74 72 69 67 67 65 72 27 22 20 7d 2c 0a 20 20 20  trigger'" },.   
1b5d0 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66 20 76    { "number of v
1b5e0 69 65 77 73 3a 22 2c 0a 20 20 20 20 20 20 20 22  iews:",.       "
1b5f0 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
1b600 46 52 4f 4d 20 25 73 20 57 48 45 52 45 20 74 79  FROM %s WHERE ty
1b610 70 65 3d 27 76 69 65 77 27 22 20 7d 2c 0a 20 20  pe='view'" },.  
1b620 20 20 20 7b 20 22 73 63 68 65 6d 61 20 73 69 7a     { "schema siz
1b630 65 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  e:",.       "SEL
1b640 45 43 54 20 74 6f 74 61 6c 28 6c 65 6e 67 74 68  ECT total(length
1b650 28 73 71 6c 29 29 20 46 52 4f 4d 20 25 73 22 20  (sql)) FROM %s" 
1b660 7d 2c 0a 20 20 7d 3b 0a 20 20 73 71 6c 69 74 65  },.  };.  sqlite
1b670 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20  3_file *pFile = 
1b680 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68  0;.  int i;.  ch
1b690 61 72 20 2a 7a 53 63 68 65 6d 61 54 61 62 3b 0a  ar *zSchemaTab;.
1b6a0 20 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 6e 41    char *zDb = nA
1b6b0 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d  rg>=2 ? azArg[1]
1b6c0 20 3a 20 22 6d 61 69 6e 22 3b 0a 20 20 75 6e 73   : "main";.  uns
1b6d0 69 67 6e 65 64 20 63 68 61 72 20 61 48 64 72 5b  igned char aHdr[
1b6e0 31 30 30 5d 3b 0a 20 20 6f 70 65 6e 5f 64 62 28  100];.  open_db(
1b6f0 70 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 2d 3e  p, 0);.  if( p->
1b700 64 62 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31  db==0 ) return 1
1b710 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  ;.  sqlite3_file
1b720 5f 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20  _control(p->db, 
1b730 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  zDb, SQLITE_FCNT
1b740 4c 5f 46 49 4c 45 5f 50 4f 49 4e 54 45 52 2c 20  L_FILE_POINTER, 
1b750 26 70 46 69 6c 65 29 3b 0a 20 20 69 66 28 20 70  &pFile);.  if( p
1b760 46 69 6c 65 3d 3d 30 20 7c 7c 20 70 46 69 6c 65  File==0 || pFile
1b770 2d 3e 70 4d 65 74 68 6f 64 73 3d 3d 30 20 7c 7c  ->pMethods==0 ||
1b780 20 70 46 69 6c 65 2d 3e 70 4d 65 74 68 6f 64 73   pFile->pMethods
1b790 2d 3e 78 52 65 61 64 3d 3d 30 20 29 7b 0a 20 20  ->xRead==0 ){.  
1b7a0 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
1b7b0 20 20 69 20 3d 20 70 46 69 6c 65 2d 3e 70 4d 65    i = pFile->pMe
1b7c0 74 68 6f 64 73 2d 3e 78 52 65 61 64 28 70 46 69  thods->xRead(pFi
1b7d0 6c 65 2c 20 61 48 64 72 2c 20 31 30 30 2c 20 30  le, aHdr, 100, 0
1b7e0 29 3b 0a 20 20 69 66 28 20 69 21 3d 53 51 4c 49  );.  if( i!=SQLI
1b7f0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 61 77  TE_OK ){.    raw
1b800 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1b810 22 75 6e 61 62 6c 65 20 74 6f 20 72 65 61 64 20  "unable to read 
1b820 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 5c  database header\
1b830 6e 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  n");.    return 
1b840 31 3b 0a 20 20 7d 0a 20 20 69 20 3d 20 67 65 74  1;.  }.  i = get
1b850 32 62 79 74 65 49 6e 74 28 61 48 64 72 2b 31 36  2byteInt(aHdr+16
1b860 29 3b 0a 20 20 69 66 28 20 69 3d 3d 31 20 29 20  );.  if( i==1 ) 
1b870 69 20 3d 20 36 35 35 33 36 3b 0a 20 20 75 74 66  i = 65536;.  utf
1b880 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
1b890 20 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22   "%-20s %d\n", "
1b8a0 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
1b8b0 7a 65 3a 22 2c 20 69 29 3b 0a 20 20 75 74 66 38  ze:", i);.  utf8
1b8c0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
1b8d0 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 77  "%-20s %d\n", "w
1b8e0 72 69 74 65 20 66 6f 72 6d 61 74 3a 22 2c 20 61  rite format:", a
1b8f0 48 64 72 5b 31 38 5d 29 3b 0a 20 20 75 74 66 38  Hdr[18]);.  utf8
1b900 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
1b910 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 72  "%-20s %d\n", "r
1b920 65 61 64 20 66 6f 72 6d 61 74 3a 22 2c 20 61 48  ead format:", aH
1b930 64 72 5b 31 39 5d 29 3b 0a 20 20 75 74 66 38 5f  dr[19]);.  utf8_
1b940 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
1b950 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 72 65  %-20s %d\n", "re
1b960 73 65 72 76 65 64 20 62 79 74 65 73 3a 22 2c 20  served bytes:", 
1b970 61 48 64 72 5b 32 30 5d 29 3b 0a 20 20 66 6f 72  aHdr[20]);.  for
1b980 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
1b990 65 28 61 46 69 65 6c 64 29 3b 20 69 2b 2b 29 7b  e(aField); i++){
1b9a0 0a 20 20 20 20 69 6e 74 20 6f 66 73 74 20 3d 20  .    int ofst = 
1b9b0 61 46 69 65 6c 64 5b 69 5d 2e 6f 66 73 74 3b 0a  aField[i].ofst;.
1b9c0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74      unsigned int
1b9d0 20 76 61 6c 20 3d 20 67 65 74 34 62 79 74 65 49   val = get4byteI
1b9e0 6e 74 28 61 48 64 72 20 2b 20 6f 66 73 74 29 3b  nt(aHdr + ofst);
1b9f0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
1ba00 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20  (p->out, "%-20s 
1ba10 25 75 22 2c 20 61 46 69 65 6c 64 5b 69 5d 2e 7a  %u", aField[i].z
1ba20 4e 61 6d 65 2c 20 76 61 6c 29 3b 0a 20 20 20 20  Name, val);.    
1ba30 73 77 69 74 63 68 28 20 6f 66 73 74 20 29 7b 0a  switch( ofst ){.
1ba40 20 20 20 20 20 20 63 61 73 65 20 35 36 3a 20 7b        case 56: {
1ba50 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 61 6c  .        if( val
1ba60 3d 3d 31 20 29 20 72 61 77 5f 70 72 69 6e 74 66  ==1 ) raw_printf
1ba70 28 70 2d 3e 6f 75 74 2c 20 22 20 28 75 74 66 38  (p->out, " (utf8
1ba80 29 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  )");.        if(
1ba90 20 76 61 6c 3d 3d 32 20 29 20 72 61 77 5f 70 72   val==2 ) raw_pr
1baa0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20 28  intf(p->out, " (
1bab0 75 74 66 31 36 6c 65 29 22 29 3b 0a 20 20 20 20  utf16le)");.    
1bac0 20 20 20 20 69 66 28 20 76 61 6c 3d 3d 33 20 29      if( val==3 )
1bad0 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
1bae0 75 74 2c 20 22 20 28 75 74 66 31 36 62 65 29 22  ut, " (utf16be)"
1baf0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
1bb00 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
1bb10 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20  p->out, "\n");. 
1bb20 20 7d 0a 20 20 69 66 28 20 7a 44 62 3d 3d 30 20   }.  if( zDb==0 
1bb30 29 7b 0a 20 20 20 20 7a 53 63 68 65 6d 61 54 61  ){.    zSchemaTa
1bb40 62 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  b = sqlite3_mpri
1bb50 6e 74 66 28 22 6d 61 69 6e 2e 73 71 6c 69 74 65  ntf("main.sqlite
1bb60 5f 6d 61 73 74 65 72 22 29 3b 0a 20 20 7d 65 6c  _master");.  }el
1bb70 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 44  se if( strcmp(zD
1bb80 62 2c 22 74 65 6d 70 22 29 3d 3d 30 20 29 7b 0a  b,"temp")==0 ){.
1bb90 20 20 20 20 7a 53 63 68 65 6d 61 54 61 62 20 3d      zSchemaTab =
1bba0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
1bbb0 28 22 25 73 22 2c 20 22 73 71 6c 69 74 65 5f 74  ("%s", "sqlite_t
1bbc0 65 6d 70 5f 6d 61 73 74 65 72 22 29 3b 0a 20 20  emp_master");.  
1bbd0 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 53 63 68 65  }else{.    zSche
1bbe0 6d 61 54 61 62 20 3d 20 73 71 6c 69 74 65 33 5f  maTab = sqlite3_
1bbf0 6d 70 72 69 6e 74 66 28 22 5c 22 25 77 5c 22 2e  mprintf("\"%w\".
1bc00 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 2c 20  sqlite_master", 
1bc10 7a 44 62 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  zDb);.  }.  for(
1bc20 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65  i=0; i<ArraySize
1bc30 28 61 51 75 65 72 79 29 3b 20 69 2b 2b 29 7b 0a  (aQuery); i++){.
1bc40 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d      char *zSql =
1bc50 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
1bc60 28 61 51 75 65 72 79 5b 69 5d 2e 7a 53 71 6c 2c  (aQuery[i].zSql,
1bc70 20 7a 53 63 68 65 6d 61 54 61 62 29 3b 0a 20 20   zSchemaTab);.  
1bc80 20 20 69 6e 74 20 76 61 6c 20 3d 20 64 62 5f 69    int val = db_i
1bc90 6e 74 28 70 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  nt(p, zSql);.   
1bca0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
1bcb0 71 6c 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  ql);.    utf8_pr
1bcc0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d  intf(p->out, "%-
1bcd0 32 30 73 20 25 64 5c 6e 22 2c 20 61 51 75 65 72  20s %d\n", aQuer
1bce0 79 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 76 61 6c 29  y[i].zName, val)
1bcf0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
1bd00 66 72 65 65 28 7a 53 63 68 65 6d 61 54 61 62 29  free(zSchemaTab)
1bd10 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  ;.  return 0;.}.
1bd20 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65  ./*.** Print the
1bd30 20 63 75 72 72 65 6e 74 20 73 71 6c 69 74 65 33   current sqlite3
1bd40 5f 65 72 72 6d 73 67 28 29 20 76 61 6c 75 65 20  _errmsg() value 
1bd50 74 6f 20 73 74 64 65 72 72 20 61 6e 64 20 72 65  to stderr and re
1bd60 74 75 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69  turn 1..*/.stati
1bd70 63 20 69 6e 74 20 73 68 65 6c 6c 44 61 74 61 62  c int shellDatab
1bd80 61 73 65 45 72 72 6f 72 28 73 71 6c 69 74 65 33  aseError(sqlite3
1bd90 20 2a 64 62 29 7b 0a 20 20 63 6f 6e 73 74 20 63   *db){.  const c
1bda0 68 61 72 20 2a 7a 45 72 72 20 3d 20 73 71 6c 69  har *zErr = sqli
1bdb0 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a  te3_errmsg(db);.
1bdc0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
1bdd0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73  derr, "Error: %s
1bde0 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20 20 72 65  \n", zErr);.  re
1bdf0 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 1;.}../*.**
1be00 20 50 72 69 6e 74 20 61 6e 20 6f 75 74 2d 6f 66   Print an out-of
1be10 2d 6d 65 6d 6f 72 79 20 6d 65 73 73 61 67 65 20  -memory message 
1be20 74 6f 20 73 74 64 65 72 72 20 61 6e 64 20 72 65  to stderr and re
1be30 74 75 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69  turn 1..*/.stati
1be40 63 20 69 6e 74 20 73 68 65 6c 6c 4e 6f 6d 65 6d  c int shellNomem
1be50 45 72 72 6f 72 28 76 6f 69 64 29 7b 0a 20 20 72  Error(void){.  r
1be60 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1be70 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66  , "Error: out of
1be80 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 72   memory\n");.  r
1be90 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 1;.}../*.*
1bea0 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 70 61  * Compare the pa
1beb0 74 74 65 72 6e 20 69 6e 20 7a 47 6c 6f 62 5b 5d  ttern in zGlob[]
1bec0 20 61 67 61 69 6e 73 74 20 74 68 65 20 74 65 78   against the tex
1bed0 74 20 69 6e 20 7a 5b 5d 2e 20 20 52 65 74 75 72  t in z[].  Retur
1bee0 6e 20 54 52 55 45 0a 2a 2a 20 69 66 20 74 68 65  n TRUE.** if the
1bef0 79 20 6d 61 74 63 68 20 61 6e 64 20 46 41 4c 53  y match and FALS
1bf00 45 20 28 30 29 20 69 66 20 74 68 65 79 20 64 6f  E (0) if they do
1bf10 20 6e 6f 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a   not match..**.*
1bf20 2a 20 47 6c 6f 62 62 69 6e 67 20 72 75 6c 65 73  * Globbing rules
1bf30 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 2a 27  :.**.**      '*'
1bf40 20 20 20 20 20 20 20 4d 61 74 63 68 65 73 20 61         Matches a
1bf50 6e 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20 7a  ny sequence of z
1bf60 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72  ero or more char
1bf70 61 63 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  acters..**.**   
1bf80 20 20 20 27 3f 27 20 20 20 20 20 20 20 4d 61 74     '?'       Mat
1bf90 63 68 65 73 20 65 78 61 63 74 6c 79 20 6f 6e 65  ches exactly one
1bfa0 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2a 0a 2a   character..**.*
1bfb0 2a 20 20 20 20 20 5b 2e 2e 2e 5d 20 20 20 20 20  *     [...]     
1bfc0 20 4d 61 74 63 68 65 73 20 6f 6e 65 20 63 68 61   Matches one cha
1bfd0 72 61 63 74 65 72 20 66 72 6f 6d 20 74 68 65 20  racter from the 
1bfe0 65 6e 63 6c 6f 73 65 64 20 6c 69 73 74 20 6f 66  enclosed list of
1bff0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1c000 20 20 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a     characters..*
1c010 2a 0a 2a 2a 20 20 20 20 20 5b 5e 2e 2e 2e 5d 20  *.**     [^...] 
1c020 20 20 20 20 4d 61 74 63 68 65 73 20 6f 6e 65 20      Matches one 
1c030 63 68 61 72 61 63 74 65 72 20 6e 6f 74 20 69 6e  character not in
1c040 20 74 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69   the enclosed li
1c050 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27  st..**.**      '
1c060 23 27 20 20 20 20 20 20 20 4d 61 74 63 68 65 73  #'       Matches
1c070 20 61 6e 79 20 73 65 71 75 65 6e 63 65 20 6f 66   any sequence of
1c080 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69 67   one or more dig
1c090 69 74 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 20  its with an.**  
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
1c0b0 74 69 6f 6e 61 6c 20 2b 20 6f 72 20 2d 20 73 69  tional + or - si
1c0c0 67 6e 20 69 6e 20 66 72 6f 6e 74 0a 2a 2a 0a 2a  gn in front.**.*
1c0d0 2a 20 20 20 20 20 20 27 20 27 20 20 20 20 20 20  *      ' '      
1c0e0 20 41 6e 79 20 73 70 61 6e 20 6f 66 20 77 68 69   Any span of whi
1c0f0 74 65 73 70 61 63 65 20 6d 61 74 63 68 65 73 20  tespace matches 
1c100 61 6e 79 20 6f 74 68 65 72 20 73 70 61 6e 20 6f  any other span o
1c110 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
1c120 20 20 20 20 77 68 69 74 65 73 70 61 63 65 2e 0a      whitespace..
1c130 2a 2a 0a 2a 2a 20 45 78 74 72 61 20 77 68 69 74  **.** Extra whit
1c140 65 73 70 61 63 65 20 61 74 20 74 68 65 20 65 6e  espace at the en
1c150 64 20 6f 66 20 7a 5b 5d 20 69 73 20 69 67 6e 6f  d of z[] is igno
1c160 72 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  red..*/.static i
1c170 6e 74 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62  nt testcase_glob
1c180 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 47 6c  (const char *zGl
1c190 6f 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ob, const char *
1c1a0 7a 29 7b 0a 20 20 69 6e 74 20 63 2c 20 63 32 3b  z){.  int c, c2;
1c1b0 0a 20 20 69 6e 74 20 69 6e 76 65 72 74 3b 0a 20  .  int invert;. 
1c1c0 20 69 6e 74 20 73 65 65 6e 3b 0a 0a 20 20 77 68   int seen;..  wh
1c1d0 69 6c 65 28 20 28 63 20 3d 20 28 2a 28 7a 47 6c  ile( (c = (*(zGl
1c1e0 6f 62 2b 2b 29 29 29 21 3d 30 20 29 7b 0a 20 20  ob++)))!=0 ){.  
1c1f0 20 20 69 66 28 20 49 73 53 70 61 63 65 28 63 29    if( IsSpace(c)
1c200 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 21 49   ){.      if( !I
1c210 73 53 70 61 63 65 28 2a 7a 29 20 29 20 72 65 74  sSpace(*z) ) ret
1c220 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 77 68 69  urn 0;.      whi
1c230 6c 65 28 20 49 73 53 70 61 63 65 28 2a 7a 47 6c  le( IsSpace(*zGl
1c240 6f 62 29 20 29 20 7a 47 6c 6f 62 2b 2b 3b 0a 20  ob) ) zGlob++;. 
1c250 20 20 20 20 20 77 68 69 6c 65 28 20 49 73 53 70       while( IsSp
1c260 61 63 65 28 2a 7a 29 20 29 20 7a 2b 2b 3b 0a 20  ace(*z) ) z++;. 
1c270 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
1c280 27 2a 27 20 29 7b 0a 20 20 20 20 20 20 77 68 69  '*' ){.      whi
1c290 6c 65 28 20 28 63 3d 28 2a 28 7a 47 6c 6f 62 2b  le( (c=(*(zGlob+
1c2a0 2b 29 29 29 20 3d 3d 20 27 2a 27 20 7c 7c 20 63  +))) == '*' || c
1c2b0 3d 3d 27 3f 27 20 29 7b 0a 20 20 20 20 20 20 20  =='?' ){.       
1c2c0 20 69 66 28 20 63 3d 3d 27 3f 27 20 26 26 20 28   if( c=='?' && (
1c2d0 2a 28 7a 2b 2b 29 29 3d 3d 30 20 29 20 72 65 74  *(z++))==0 ) ret
1c2e0 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  urn 0;.      }. 
1c2f0 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29 7b       if( c==0 ){
1c300 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1c310 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  1;.      }else i
1c320 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20  f( c=='[' ){.   
1c330 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 26       while( *z &
1c340 26 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28  & testcase_glob(
1c350 7a 47 6c 6f 62 2d 31 2c 7a 29 3d 3d 30 20 29 7b  zGlob-1,z)==0 ){
1c360 0a 20 20 20 20 20 20 20 20 20 20 7a 2b 2b 3b 0a  .          z++;.
1c370 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1c380 20 20 72 65 74 75 72 6e 20 28 2a 7a 29 21 3d 30    return (*z)!=0
1c390 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1c3a0 77 68 69 6c 65 28 20 28 63 32 20 3d 20 28 2a 28  while( (c2 = (*(
1c3b0 7a 2b 2b 29 29 29 21 3d 30 20 29 7b 0a 20 20 20  z++)))!=0 ){.   
1c3c0 20 20 20 20 20 77 68 69 6c 65 28 20 63 32 21 3d       while( c2!=
1c3d0 63 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63  c ){.          c
1c3e0 32 20 3d 20 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20  2 = *(z++);.    
1c3f0 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d 30 20        if( c2==0 
1c400 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
1c410 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
1c420 28 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28  ( testcase_glob(
1c430 7a 47 6c 6f 62 2c 7a 29 20 29 20 72 65 74 75 72  zGlob,z) ) retur
1c440 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 1;.      }.   
1c450 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20     return 0;.   
1c460 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 3f   }else if( c=='?
1c470 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  ' ){.      if( (
1c480 2a 28 7a 2b 2b 29 29 3d 3d 30 20 29 20 72 65 74  *(z++))==0 ) ret
1c490 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  urn 0;.    }else
1c4a0 20 69 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20   if( c=='[' ){. 
1c4b0 20 20 20 20 20 69 6e 74 20 70 72 69 6f 72 5f 63       int prior_c
1c4c0 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 65 65 6e   = 0;.      seen
1c4d0 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e 76 65   = 0;.      inve
1c4e0 72 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 20  rt = 0;.      c 
1c4f0 3d 20 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20 20 20  = *(z++);.      
1c500 69 66 28 20 63 3d 3d 30 20 29 20 72 65 74 75 72  if( c==0 ) retur
1c510 6e 20 30 3b 0a 20 20 20 20 20 20 63 32 20 3d 20  n 0;.      c2 = 
1c520 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20  *(zGlob++);.    
1c530 20 20 69 66 28 20 63 32 3d 3d 27 5e 27 20 29 7b    if( c2=='^' ){
1c540 0a 20 20 20 20 20 20 20 20 69 6e 76 65 72 74 20  .        invert 
1c550 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 63 32 20  = 1;.        c2 
1c560 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20  = *(zGlob++);.  
1c570 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
1c580 63 32 3d 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20  c2==']' ){.     
1c590 20 20 20 69 66 28 20 63 3d 3d 27 5d 27 20 29 20     if( c==']' ) 
1c5a0 73 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20  seen = 1;.      
1c5b0 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b    c2 = *(zGlob++
1c5c0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1c5d0 20 77 68 69 6c 65 28 20 63 32 20 26 26 20 63 32   while( c2 && c2
1c5e0 21 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20 20 20  !=']' ){.       
1c5f0 20 69 66 28 20 63 32 3d 3d 27 2d 27 20 26 26 20   if( c2=='-' && 
1c600 7a 47 6c 6f 62 5b 30 5d 21 3d 27 5d 27 20 26 26  zGlob[0]!=']' &&
1c610 20 7a 47 6c 6f 62 5b 30 5d 21 3d 30 20 26 26 20   zGlob[0]!=0 && 
1c620 70 72 69 6f 72 5f 63 3e 30 20 29 7b 0a 20 20 20  prior_c>0 ){.   
1c630 20 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a 47         c2 = *(zG
1c640 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20 20 20  lob++);.        
1c650 20 20 69 66 28 20 63 3e 3d 70 72 69 6f 72 5f 63    if( c>=prior_c
1c660 20 26 26 20 63 3c 3d 63 32 20 29 20 73 65 65 6e   && c<=c2 ) seen
1c670 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   = 1;.          
1c680 70 72 69 6f 72 5f 63 20 3d 20 30 3b 0a 20 20 20  prior_c = 0;.   
1c690 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1c6a0 20 20 20 20 20 20 69 66 28 20 63 3d 3d 63 32 20        if( c==c2 
1c6b0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
1c6c0 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  een = 1;.       
1c6d0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 70     }.          p
1c6e0 72 69 6f 72 5f 63 20 3d 20 63 32 3b 0a 20 20 20  rior_c = c2;.   
1c6f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63       }.        c
1c700 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a  2 = *(zGlob++);.
1c710 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
1c720 28 20 63 32 3d 3d 30 20 7c 7c 20 28 73 65 65 6e  ( c2==0 || (seen
1c730 20 5e 20 69 6e 76 65 72 74 29 3d 3d 30 20 29 20   ^ invert)==0 ) 
1c740 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65  return 0;.    }e
1c750 6c 73 65 20 69 66 28 20 63 3d 3d 27 23 27 20 29  lse if( c=='#' )
1c760 7b 0a 20 20 20 20 20 20 69 66 28 20 28 7a 5b 30  {.      if( (z[0
1c770 5d 3d 3d 27 2d 27 20 7c 7c 20 7a 5b 30 5d 3d 3d  ]=='-' || z[0]==
1c780 27 2b 27 29 20 26 26 20 49 73 44 69 67 69 74 28  '+') && IsDigit(
1c790 7a 5b 31 5d 29 20 29 20 7a 2b 2b 3b 0a 20 20 20  z[1]) ) z++;.   
1c7a0 20 20 20 69 66 28 20 21 49 73 44 69 67 69 74 28     if( !IsDigit(
1c7b0 7a 5b 30 5d 29 20 29 20 72 65 74 75 72 6e 20 30  z[0]) ) return 0
1c7c0 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20  ;.      z++;.   
1c7d0 20 20 20 77 68 69 6c 65 28 20 49 73 44 69 67 69     while( IsDigi
1c7e0 74 28 7a 5b 30 5d 29 20 29 7b 20 7a 2b 2b 3b 20  t(z[0]) ){ z++; 
1c7f0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
1c800 20 20 20 69 66 28 20 63 21 3d 28 2a 28 7a 2b 2b     if( c!=(*(z++
1c810 29 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  )) ) return 0;. 
1c820 20 20 20 7d 0a 20 20 7d 0a 20 20 77 68 69 6c 65     }.  }.  while
1c830 28 20 49 73 53 70 61 63 65 28 2a 7a 29 20 29 7b  ( IsSpace(*z) ){
1c840 20 7a 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e   z++; }.  return
1c850 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a   *z==0;.}.../*.*
1c860 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 73 74  * Compare the st
1c870 72 69 6e 67 20 61 73 20 61 20 63 6f 6d 6d 61 6e  ring as a comman
1c880 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 77 69  d-line option wi
1c890 74 68 20 65 69 74 68 65 72 20 6f 6e 65 20 6f 72  th either one or
1c8a0 20 74 77 6f 0a 2a 2a 20 69 6e 69 74 69 61 6c 20   two.** initial 
1c8b0 22 2d 22 20 63 68 61 72 61 63 74 65 72 73 2e 0a  "-" characters..
1c8c0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6f 70  */.static int op
1c8d0 74 69 6f 6e 4d 61 74 63 68 28 63 6f 6e 73 74 20  tionMatch(const 
1c8e0 63 68 61 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73  char *zStr, cons
1c8f0 74 20 63 68 61 72 20 2a 7a 4f 70 74 29 7b 0a 20  t char *zOpt){. 
1c900 20 69 66 28 20 7a 53 74 72 5b 30 5d 21 3d 27 2d   if( zStr[0]!='-
1c910 27 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  ' ) return 0;.  
1c920 7a 53 74 72 2b 2b 3b 0a 20 20 69 66 28 20 7a 53  zStr++;.  if( zS
1c930 74 72 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 53 74  tr[0]=='-' ) zSt
1c940 72 2b 2b 3b 0a 20 20 72 65 74 75 72 6e 20 73 74  r++;.  return st
1c950 72 63 6d 70 28 7a 53 74 72 2c 20 7a 4f 70 74 29  rcmp(zStr, zOpt)
1c960 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65  ==0;.}../*.** De
1c970 6c 65 74 65 20 61 20 66 69 6c 65 2e 0a 2a 2f 0a  lete a file..*/.
1c980 69 6e 74 20 73 68 65 6c 6c 44 65 6c 65 74 65 46  int shellDeleteF
1c990 69 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ile(const char *
1c9a0 7a 46 69 6c 65 6e 61 6d 65 29 7b 0a 20 20 69 6e  zFilename){.  in
1c9b0 74 20 72 63 3b 0a 23 69 66 64 65 66 20 5f 57 49  t rc;.#ifdef _WI
1c9c0 4e 33 32 0a 20 20 77 63 68 61 72 5f 74 20 2a 7a  N32.  wchar_t *z
1c9d0 20 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32   = sqlite3_win32
1c9e0 5f 75 74 66 38 5f 74 6f 5f 75 6e 69 63 6f 64 65  _utf8_to_unicode
1c9f0 28 7a 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 72  (zFilename);.  r
1ca00 63 20 3d 20 5f 77 75 6e 6c 69 6e 6b 28 7a 29 3b  c = _wunlink(z);
1ca10 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
1ca20 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 72 63 20 3d  z);.#else.  rc =
1ca30 20 75 6e 6c 69 6e 6b 28 7a 46 69 6c 65 6e 61 6d   unlink(zFilenam
1ca40 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74  e);.#endif.  ret
1ca50 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  urn rc;.}.../*.*
1ca60 2a 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  * The implementa
1ca70 74 69 6f 6e 20 6f 66 20 53 51 4c 20 73 63 61 6c  tion of SQL scal
1ca80 61 72 20 66 75 6e 63 74 69 6f 6e 20 66 6b 65 79  ar function fkey
1ca90 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28  _collate_clause(
1caa0 29 2c 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68  ), used.** by th
1cab0 65 20 22 2e 6c 69 6e 74 20 66 6b 65 79 2d 69 6e  e ".lint fkey-in
1cac0 64 65 78 65 73 22 20 63 6f 6d 6d 61 6e 64 2e 20  dexes" command. 
1cad0 54 68 69 73 20 73 63 61 6c 61 72 20 66 75 6e 63  This scalar func
1cae0 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 0a 2a  tion is always.*
1caf0 2a 20 63 61 6c 6c 65 64 20 77 69 74 68 20 66 6f  * called with fo
1cb00 75 72 20 61 72 67 75 6d 65 6e 74 73 20 2d 20 74  ur arguments - t
1cb10 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20  he parent table 
1cb20 6e 61 6d 65 2c 20 74 68 65 20 70 61 72 65 6e 74  name, the parent
1cb30 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2c 0a 2a 2a   column name,.**
1cb40 20 74 68 65 20 63 68 69 6c 64 20 74 61 62 6c 65   the child table
1cb50 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 63 68   name and the ch
1cb60 69 6c 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e  ild column name.
1cb70 0a 2a 2a 0a 2a 2a 20 20 20 66 6b 65 79 5f 63 6f  .**.**   fkey_co
1cb80 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28 27 70 61  llate_clause('pa
1cb90 72 65 6e 74 2d 74 61 62 27 2c 20 27 70 61 72 65  rent-tab', 'pare
1cba0 6e 74 2d 63 6f 6c 27 2c 20 27 63 68 69 6c 64 2d  nt-col', 'child-
1cbb0 74 61 62 27 2c 20 27 63 68 69 6c 64 2d 63 6f 6c  tab', 'child-col
1cbc0 27 29 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  ').**.** If eith
1cbd0 65 72 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20  er of the named 
1cbe0 74 61 62 6c 65 73 20 6f 72 20 63 6f 6c 75 6d 6e  tables or column
1cbf0 73 20 64 6f 20 6e 6f 74 20 65 78 69 73 74 2c 20  s do not exist, 
1cc00 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  this function.**
1cc10 20 72 65 74 75 72 6e 73 20 61 6e 20 65 6d 70 74   returns an empt
1cc20 79 20 73 74 72 69 6e 67 2e 20 41 6e 20 65 6d 70  y string. An emp
1cc30 74 79 20 73 74 72 69 6e 67 20 69 73 20 61 6c 73  ty string is als
1cc40 6f 20 72 65 74 75 72 6e 65 64 20 69 66 20 62 6f  o returned if bo
1cc50 74 68 20 74 61 62 6c 65 73 0a 2a 2a 20 61 6e 64  th tables.** and
1cc60 20 63 6f 6c 75 6d 6e 73 20 65 78 69 73 74 20 62   columns exist b
1cc70 75 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ut have the same
1cc80 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
1cc90 6f 6e 20 73 65 71 75 65 6e 63 65 2e 20 4f 72 2c  on sequence. Or,
1cca0 0a 2a 2a 20 69 66 20 62 6f 74 68 20 65 78 69 73  .** if both exis
1ccb0 74 20 62 75 74 20 74 68 65 20 64 65 66 61 75 6c  t but the defaul
1ccc0 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
1ccd0 65 6e 63 65 73 20 61 72 65 20 64 69 66 66 65 72  ences are differ
1cce0 65 6e 74 2c 20 74 68 69 73 0a 2a 2a 20 66 75 6e  ent, this.** fun
1ccf0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1cd00 65 20 73 74 72 69 6e 67 20 22 20 43 4f 4c 4c 41  e string " COLLA
1cd10 54 45 20 3c 70 61 72 65 6e 74 2d 63 6f 6c 6c 61  TE <parent-colla
1cd20 74 69 6f 6e 3e 22 2c 20 77 68 65 72 65 0a 2a 2a  tion>", where.**
1cd30 20 3c 70 61 72 65 6e 74 2d 63 6f 6c 6c 61 74 69   <parent-collati
1cd40 6f 6e 3e 20 69 73 20 74 68 65 20 64 65 66 61 75  on> is the defau
1cd50 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
1cd60 75 65 6e 63 65 20 6f 66 20 74 68 65 20 70 61 72  uence of the par
1cd70 65 6e 74 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 73  ent column..*/.s
1cd80 74 61 74 69 63 20 76 6f 69 64 20 73 68 65 6c 6c  tatic void shell
1cd90 46 6b 65 79 43 6f 6c 6c 61 74 65 43 6c 61 75 73  FkeyCollateClaus
1cda0 65 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  e(.  sqlite3_con
1cdb0 74 65 78 74 20 2a 70 43 74 78 2c 0a 20 20 69 6e  text *pCtx,.  in
1cdc0 74 20 6e 56 61 6c 2c 0a 20 20 73 71 6c 69 74 65  t nVal,.  sqlite
1cdd0 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 0a  3_value **apVal.
1cde0 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
1cdf0 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65   = sqlite3_conte
1ce00 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28 70 43 74  xt_db_handle(pCt
1ce10 78 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  x);.  const char
1ce20 20 2a 7a 50 61 72 65 6e 74 3b 0a 20 20 63 6f 6e   *zParent;.  con
1ce30 73 74 20 63 68 61 72 20 2a 7a 50 61 72 65 6e 74  st char *zParent
1ce40 43 6f 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  Col;.  const cha
1ce50 72 20 2a 7a 50 61 72 65 6e 74 53 65 71 3b 0a 20  r *zParentSeq;. 
1ce60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 68   const char *zCh
1ce70 69 6c 64 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  ild;.  const cha
1ce80 72 20 2a 7a 43 68 69 6c 64 43 6f 6c 3b 0a 20 20  r *zChildCol;.  
1ce90 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 68 69  const char *zChi
1cea0 6c 64 53 65 71 20 3d 20 30 3b 20 20 2f 2a 20 49  ldSeq = 0;  /* I
1ceb0 6e 69 74 69 61 6c 69 7a 65 20 74 6f 20 61 76 6f  nitialize to avo
1cec0 69 64 20 66 61 6c 73 65 2d 70 6f 73 69 74 69 76  id false-positiv
1ced0 65 20 77 61 72 6e 69 6e 67 20 2a 2f 0a 20 20 69  e warning */.  i
1cee0 6e 74 20 72 63 3b 0a 0a 20 20 61 73 73 65 72 74  nt rc;..  assert
1cef0 28 20 6e 56 61 6c 3d 3d 34 20 29 3b 0a 20 20 7a  ( nVal==4 );.  z
1cf00 50 61 72 65 6e 74 20 3d 20 28 63 6f 6e 73 74 20  Parent = (const 
1cf10 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
1cf20 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 30  lue_text(apVal[0
1cf30 5d 29 3b 0a 20 20 7a 50 61 72 65 6e 74 43 6f 6c  ]);.  zParentCol
1cf40 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
1cf50 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
1cf60 78 74 28 61 70 56 61 6c 5b 31 5d 29 3b 0a 20 20  xt(apVal[1]);.  
1cf70 7a 43 68 69 6c 64 20 3d 20 28 63 6f 6e 73 74 20  zChild = (const 
1cf80 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
1cf90 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 32  lue_text(apVal[2
1cfa0 5d 29 3b 0a 20 20 7a 43 68 69 6c 64 43 6f 6c 20  ]);.  zChildCol 
1cfb0 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
1cfc0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
1cfd0 74 28 61 70 56 61 6c 5b 33 5d 29 3b 0a 0a 20 20  t(apVal[3]);..  
1cfe0 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
1cff0 65 78 74 28 70 43 74 78 2c 20 22 22 2c 20 2d 31  ext(pCtx, "", -1
1d000 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
1d010 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1d020 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
1d030 74 61 64 61 74 61 28 0a 20 20 20 20 20 20 64 62  tadata(.      db
1d040 2c 20 22 6d 61 69 6e 22 2c 20 7a 50 61 72 65 6e  , "main", zParen
1d050 74 2c 20 7a 50 61 72 65 6e 74 43 6f 6c 2c 20 30  t, zParentCol, 0
1d060 2c 20 26 7a 50 61 72 65 6e 74 53 65 71 2c 20 30  , &zParentSeq, 0
1d070 2c 20 30 2c 20 30 0a 20 20 29 3b 0a 20 20 69 66  , 0, 0.  );.  if
1d080 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1d090 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
1d0a0 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
1d0b0 5f 6d 65 74 61 64 61 74 61 28 0a 20 20 20 20 20  _metadata(.     
1d0c0 20 20 20 64 62 2c 20 22 6d 61 69 6e 22 2c 20 7a     db, "main", z
1d0d0 43 68 69 6c 64 2c 20 7a 43 68 69 6c 64 43 6f 6c  Child, zChildCol
1d0e0 2c 20 30 2c 20 26 7a 43 68 69 6c 64 53 65 71 2c  , 0, &zChildSeq,
1d0f0 20 30 2c 20 30 2c 20 30 0a 20 20 20 20 29 3b 0a   0, 0, 0.    );.
1d100 20 20 7d 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53    }..  if( rc==S
1d110 51 4c 49 54 45 5f 4f 4b 20 26 26 20 73 71 6c 69  QLITE_OK && sqli
1d120 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 50 61 72  te3_stricmp(zPar
1d130 65 6e 74 53 65 71 2c 20 7a 43 68 69 6c 64 53 65  entSeq, zChildSe
1d140 71 29 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a  q) ){.    char *
1d150 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  z = sqlite3_mpri
1d160 6e 74 66 28 22 20 43 4f 4c 4c 41 54 45 20 25 73  ntf(" COLLATE %s
1d170 22 2c 20 7a 50 61 72 65 6e 74 53 65 71 29 3b 0a  ", zParentSeq);.
1d180 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
1d190 6c 74 5f 74 65 78 74 28 70 43 74 78 2c 20 7a 2c  lt_text(pCtx, z,
1d1a0 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e   -1, SQLITE_TRAN
1d1b0 53 49 45 4e 54 29 3b 0a 20 20 20 20 73 71 6c 69  SIENT);.    sqli
1d1c0 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 7d  te3_free(z);.  }
1d1d0 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  .}.../*.** The i
1d1e0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
1d1f0 20 64 6f 74 2d 63 6f 6d 6d 61 6e 64 20 22 2e 6c   dot-command ".l
1d200 69 6e 74 20 66 6b 65 79 2d 69 6e 64 65 78 65 73  int fkey-indexes
1d210 22 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  "..*/.static int
1d220 20 6c 69 6e 74 46 6b 65 79 49 6e 64 65 78 65 73   lintFkeyIndexes
1d230 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  (.  ShellState *
1d240 70 53 74 61 74 65 2c 20 20 20 20 20 20 20 20 20  pState,         
1d250 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73      /* Current s
1d260 68 65 6c 6c 20 74 6f 6f 6c 20 73 74 61 74 65 20  hell tool state 
1d270 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72  */.  char **azAr
1d280 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g,              
1d290 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
1d2a0 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
1d2b0 64 20 74 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e 64  d to dot command
1d2c0 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 20 20   */.  int nArg  
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1d2f0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a  of entries in az
1d300 41 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 73 71  Arg[] */.){.  sq
1d310 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 53 74 61  lite3 *db = pSta
1d320 74 65 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a  te->db;       /*
1d330 20 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   Database handle
1d340 20 74 6f 20 71 75 65 72 79 20 22 6d 61 69 6e 22   to query "main"
1d350 20 64 62 20 6f 66 20 2a 2f 0a 20 20 46 49 4c 45   db of */.  FILE
1d360 20 2a 6f 75 74 20 3d 20 70 53 74 61 74 65 2d 3e   *out = pState->
1d370 6f 75 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 53  out;        /* S
1d380 74 72 65 61 6d 20 74 6f 20 77 72 69 74 65 20 6e  tream to write n
1d390 6f 6e 2d 65 72 72 6f 72 20 6f 75 74 70 75 74 20  on-error output 
1d3a0 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 62 56 65 72  to */.  int bVer
1d3b0 62 6f 73 65 20 3d 20 30 3b 20 20 20 20 20 20 20  bose = 0;       
1d3c0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 2d 76          /* If -v
1d3d0 65 72 62 6f 73 65 20 69 73 20 70 72 65 73 65 6e  erbose is presen
1d3e0 74 20 2a 2f 0a 20 20 69 6e 74 20 62 47 72 6f 75  t */.  int bGrou
1d3f0 70 42 79 50 61 72 65 6e 74 20 3d 20 30 3b 20 20  pByParent = 0;  
1d400 20 20 20 20 20 20 20 2f 2a 20 49 66 20 2d 67 72         /* If -gr
1d410 6f 75 70 62 79 70 61 72 65 6e 74 20 69 73 20 70  oupbyparent is p
1d420 72 65 73 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  resent */.  int 
1d430 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
1d440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1d450 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67  o iterate throug
1d460 68 20 61 7a 41 72 67 5b 5d 20 2a 2f 0a 20 20 63  h azArg[] */.  c
1d470 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 6e 64 65  onst char *zInde
1d480 6e 74 20 3d 20 22 22 3b 20 20 20 20 20 20 20 2f  nt = "";       /
1d490 2a 20 48 6f 77 20 6d 75 63 68 20 74 6f 20 69 6e  * How much to in
1d4a0 64 65 6e 74 20 43 52 45 41 54 45 20 49 4e 44 45  dent CREATE INDE
1d4b0 58 20 62 79 20 2a 2f 0a 20 20 69 6e 74 20 72 63  X by */.  int rc
1d4c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d4d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
1d4e0 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 20 20 73 71  urn code */.  sq
1d4f0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 71 6c  lite3_stmt *pSql
1d500 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
1d510 20 43 6f 6d 70 69 6c 65 64 20 76 65 72 73 69 6f   Compiled versio
1d520 6e 20 6f 66 20 53 51 4c 20 73 74 61 74 65 6d 65  n of SQL stateme
1d530 6e 74 20 62 65 6c 6f 77 20 2a 2f 0a 0a 20 20 2f  nt below */..  /
1d540 2a 0a 20 20 2a 2a 20 54 68 69 73 20 53 45 4c 45  *.  ** This SELE
1d550 43 54 20 73 74 61 74 65 6d 65 6e 74 20 72 65 74  CT statement ret
1d560 75 72 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72  urns one row for
1d570 20 65 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65   each foreign ke
1d580 79 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 2a  y constraint.  *
1d590 2a 20 69 6e 20 74 68 65 20 73 63 68 65 6d 61 20  * in the schema 
1d5a0 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  of the main data
1d5b0 62 61 73 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e  base. The column
1d5c0 20 76 61 6c 75 65 73 20 61 72 65 3a 0a 20 20 2a   values are:.  *
1d5d0 2a 0a 20 20 2a 2a 20 30 2e 20 54 68 65 20 74 65  *.  ** 0. The te
1d5e0 78 74 20 6f 66 20 61 6e 20 53 51 4c 20 73 74 61  xt of an SQL sta
1d5f0 74 65 6d 65 6e 74 20 73 69 6d 69 6c 61 72 20 74  tement similar t
1d600 6f 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20  o:.  **.  **    
1d610 20 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59    "EXPLAIN QUERY
1d620 20 50 4c 41 4e 20 53 45 4c 45 43 54 20 72 6f 77   PLAN SELECT row
1d630 69 64 20 46 52 4f 4d 20 63 68 69 6c 64 5f 74 61  id FROM child_ta
1d640 62 6c 65 20 57 48 45 52 45 20 63 68 69 6c 64 5f  ble WHERE child_
1d650 6b 65 79 3d 3f 22 0a 20 20 2a 2a 0a 20 20 2a 2a  key=?".  **.  **
1d660 20 20 20 20 54 68 69 73 20 69 73 20 74 68 65 20      This is the 
1d670 73 61 6d 65 20 53 45 4c 45 43 54 20 74 68 61 74  same SELECT that
1d680 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
1d690 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  s implementation
1d6a0 20 6e 65 65 64 73 0a 20 20 2a 2a 20 20 20 20 74   needs.  **    t
1d6b0 6f 20 72 75 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  o run internally
1d6c0 20 6f 6e 20 63 68 69 6c 64 20 74 61 62 6c 65 73   on child tables
1d6d0 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e  . If there is an
1d6e0 20 69 6e 64 65 78 20 74 68 61 74 20 63 61 6e 0a   index that can.
1d6f0 20 20 2a 2a 20 20 20 20 62 65 20 75 73 65 64 20    **    be used 
1d700 74 6f 20 6f 70 74 69 6d 69 7a 65 20 74 68 69 73  to optimize this
1d710 20 71 75 65 72 79 2c 20 74 68 65 6e 20 69 74 20   query, then it 
1d720 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64  can also be used
1d730 20 62 79 20 74 68 65 20 46 4b 0a 20 20 2a 2a 20   by the FK.  ** 
1d740 20 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f     implementatio
1d750 6e 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 44 45  n to optimize DE
1d760 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
1d770 74 61 74 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65  tatements on the
1d780 20 70 61 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20   parent.  **    
1d790 74 61 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  table..  **.  **
1d7a0 20 31 2e 20 41 20 47 4c 4f 42 20 70 61 74 74 65   1. A GLOB patte
1d7b0 72 6e 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20  rn suitable for 
1d7c0 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28  sqlite3_strglob(
1d7d0 29 2e 20 49 66 20 74 68 65 20 70 6c 61 6e 20 6f  ). If the plan o
1d7e0 75 74 70 75 74 20 62 79 0a 20 20 2a 2a 20 20 20  utput by.  **   
1d7f0 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45   the EXPLAIN QUE
1d800 52 59 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e 64 20  RY PLAN command 
1d810 6d 61 74 63 68 65 73 20 74 68 69 73 20 70 61 74  matches this pat
1d820 74 65 72 6e 2c 20 74 68 65 6e 20 74 68 65 20 73  tern, then the s
1d830 63 68 65 6d 61 0a 20 20 2a 2a 20 20 20 20 63 6f  chema.  **    co
1d840 6e 74 61 69 6e 73 20 61 6e 20 69 6e 64 65 78 20  ntains an index 
1d850 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
1d860 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 74 68 65   to optimize the
1d870 20 71 75 65 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a   query..  **.  *
1d880 2a 20 32 2e 20 48 75 6d 61 6e 20 72 65 61 64 61  * 2. Human reada
1d890 62 6c 65 20 74 65 78 74 20 74 68 61 74 20 64 65  ble text that de
1d8a0 73 63 72 69 62 65 73 20 74 68 65 20 63 68 69 6c  scribes the chil
1d8b0 64 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75  d table and colu
1d8c0 6d 6e 73 2e 20 65 2e 67 2e 0a 20 20 2a 2a 0a 20  mns. e.g..  **. 
1d8d0 20 2a 2a 20 20 20 20 20 20 20 22 63 68 69 6c 64   **       "child
1d8e0 5f 74 61 62 6c 65 28 63 68 69 6c 64 5f 6b 65 79  _table(child_key
1d8f0 31 2c 20 63 68 69 6c 64 5f 6b 65 79 32 29 22 0a  1, child_key2)".
1d900 20 20 2a 2a 0a 20 20 2a 2a 20 33 2e 20 48 75 6d    **.  ** 3. Hum
1d910 61 6e 20 72 65 61 64 61 62 6c 65 20 74 65 78 74  an readable text
1d920 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
1d930 74 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65  the parent table
1d940 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 2e 20 65 2e   and columns. e.
1d950 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20  g..  **.  **    
1d960 20 20 20 22 70 61 72 65 6e 74 5f 74 61 62 6c 65     "parent_table
1d970 28 70 61 72 65 6e 74 5f 6b 65 79 31 2c 20 70 61  (parent_key1, pa
1d980 72 65 6e 74 5f 6b 65 79 32 29 22 0a 20 20 2a 2a  rent_key2)".  **
1d990 0a 20 20 2a 2a 20 34 2e 20 41 20 66 75 6c 6c 20  .  ** 4. A full 
1d9a0 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
1d9b0 74 65 6d 65 6e 74 20 66 6f 72 20 61 6e 20 69 6e  tement for an in
1d9c0 64 65 78 20 74 68 61 74 20 63 6f 75 6c 64 20 62  dex that could b
1d9d0 65 20 75 73 65 64 20 74 6f 0a 20 20 2a 2a 20 20  e used to.  **  
1d9e0 20 20 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45 54    optimize DELET
1d9f0 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  E or UPDATE stat
1da00 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 70 61  ements on the pa
1da10 72 65 6e 74 20 74 61 62 6c 65 2e 20 65 2e 67 2e  rent table. e.g.
1da20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20  .  **.  **      
1da30 20 22 43 52 45 41 54 45 20 49 4e 44 45 58 20 63   "CREATE INDEX c
1da40 68 69 6c 64 5f 74 61 62 6c 65 5f 63 68 69 6c 64  hild_table_child
1da50 5f 6b 65 79 20 4f 4e 20 63 68 69 6c 64 5f 74 61  _key ON child_ta
1da60 62 6c 65 28 63 68 69 6c 64 5f 6b 65 79 29 22 0a  ble(child_key)".
1da70 20 20 2a 2a 0a 20 20 2a 2a 20 35 2e 20 54 68 65    **.  ** 5. The
1da80 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 61 72   name of the par
1da90 65 6e 74 20 74 61 62 6c 65 2e 0a 20 20 2a 2a 0a  ent table..  **.
1daa0 20 20 2a 2a 20 54 68 65 73 65 20 73 69 78 20 76    ** These six v
1dab0 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 62  alues are used b
1dac0 79 20 74 68 65 20 43 20 6c 6f 67 69 63 20 62 65  y the C logic be
1dad0 6c 6f 77 20 74 6f 20 67 65 6e 65 72 61 74 65 20  low to generate 
1dae0 74 68 65 20 72 65 70 6f 72 74 2e 0a 20 20 2a 2f  the report..  */
1daf0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1db00 53 71 6c 20 3d 0a 20 20 22 53 45 4c 45 43 54 20  Sql =.  "SELECT 
1db10 22 0a 20 20 20 20 22 20 20 20 20 20 27 45 58 50  ".    "     'EXP
1db20 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
1db30 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f  SELECT rowid FRO
1db40 4d 20 27 20 7c 7c 20 71 75 6f 74 65 28 73 2e 6e  M ' || quote(s.n
1db50 61 6d 65 29 20 7c 7c 20 27 20 57 48 45 52 45 20  ame) || ' WHERE 
1db60 27 22 0a 20 20 20 20 22 20 20 7c 7c 20 67 72 6f  '".    "  || gro
1db70 75 70 5f 63 6f 6e 63 61 74 28 71 75 6f 74 65 28  up_concat(quote(
1db80 73 2e 6e 61 6d 65 29 20 7c 7c 20 27 2e 27 20 7c  s.name) || '.' |
1db90 7c 20 71 75 6f 74 65 28 66 2e 5b 66 72 6f 6d 5d  | quote(f.[from]
1dba0 29 20 7c 7c 20 27 3d 3f 27 20 22 0a 20 20 20 20  ) || '=?' ".    
1dbb0 22 20 20 7c 7c 20 66 6b 65 79 5f 63 6f 6c 6c 61  "  || fkey_colla
1dbc0 74 65 5f 63 6c 61 75 73 65 28 22 0a 20 20 20 20  te_clause(".    
1dbd0 22 20 20 20 20 20 20 20 66 2e 5b 74 61 62 6c 65  "       f.[table
1dbe0 5d 2c 20 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74  ], COALESCE(f.[t
1dbf0 6f 5d 2c 20 70 2e 5b 6e 61 6d 65 5d 29 2c 20 73  o], p.[name]), s
1dc00 2e 6e 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d 29  .name, f.[from])
1dc10 2c 27 20 41 4e 44 20 27 29 22 0a 20 20 20 20 22  ,' AND ')".    "
1dc20 2c 20 22 0a 20 20 20 20 22 20 20 20 20 20 27 53  , ".    "     'S
1dc30 45 41 52 43 48 20 54 41 42 4c 45 20 27 20 7c 7c  EARCH TABLE ' ||
1dc40 20 73 2e 6e 61 6d 65 20 7c 7c 20 27 20 55 53 49   s.name || ' USI
1dc50 4e 47 20 43 4f 56 45 52 49 4e 47 20 49 4e 44 45  NG COVERING INDE
1dc60 58 2a 28 27 22 0a 20 20 20 20 22 20 20 7c 7c 20  X*('".    "  || 
1dc70 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 27 2a 3d  group_concat('*=
1dc80 3f 27 2c 20 27 20 41 4e 44 20 27 29 20 7c 7c 20  ?', ' AND ') || 
1dc90 27 29 27 22 0a 20 20 20 20 22 2c 20 22 0a 20 20  ')'".    ", ".  
1dca0 20 20 22 20 20 20 20 20 73 2e 6e 61 6d 65 20 20    "     s.name  
1dcb0 7c 7c 20 27 28 27 20 7c 7c 20 67 72 6f 75 70 5f  || '(' || group_
1dcc0 63 6f 6e 63 61 74 28 66 2e 5b 66 72 6f 6d 5d 2c  concat(f.[from],
1dcd0 20 20 27 2c 20 27 29 20 7c 7c 20 27 29 27 22 0a    ', ') || ')'".
1dce0 20 20 20 20 22 2c 20 22 0a 20 20 20 20 22 20 20      ", ".    "  
1dcf0 20 20 20 66 2e 5b 74 61 62 6c 65 5d 20 7c 7c 20     f.[table] || 
1dd00 27 28 27 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e  '(' || group_con
1dd10 63 61 74 28 43 4f 41 4c 45 53 43 45 28 66 2e 5b  cat(COALESCE(f.[
1dd20 74 6f 5d 2c 20 70 2e 5b 6e 61 6d 65 5d 29 29 20  to], p.[name])) 
1dd30 7c 7c 20 27 29 27 22 0a 20 20 20 20 22 2c 20 22  || ')'".    ", "
1dd40 0a 20 20 20 20 22 20 20 20 20 20 27 43 52 45 41  .    "     'CREA
1dd50 54 45 20 49 4e 44 45 58 20 27 20 7c 7c 20 71 75  TE INDEX ' || qu
1dd60 6f 74 65 28 73 2e 6e 61 6d 65 20 7c 7c 27 5f 27  ote(s.name ||'_'
1dd70 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  || group_concat(
1dd80 66 2e 5b 66 72 6f 6d 5d 2c 20 27 5f 27 29 29 22  f.[from], '_'))"
1dd90 0a 20 20 20 20 22 20 20 7c 7c 20 27 20 4f 4e 20  .    "  || ' ON 
1dda0 27 20 7c 7c 20 71 75 6f 74 65 28 73 2e 6e 61 6d  ' || quote(s.nam
1ddb0 65 29 20 7c 7c 20 27 28 27 22 0a 20 20 20 20 22  e) || '('".    "
1ddc0 20 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61    || group_conca
1ddd0 74 28 71 75 6f 74 65 28 66 2e 5b 66 72 6f 6d 5d  t(quote(f.[from]
1dde0 29 20 7c 7c 22 0a 20 20 20 20 22 20 20 20 20 20  ) ||".    "     
1ddf0 20 20 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f     fkey_collate_
1de00 63 6c 61 75 73 65 28 22 0a 20 20 20 20 22 20 20  clause(".    "  
1de10 20 20 20 20 20 20 20 20 66 2e 5b 74 61 62 6c 65          f.[table
1de20 5d 2c 20 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74  ], COALESCE(f.[t
1de30 6f 5d 2c 20 70 2e 5b 6e 61 6d 65 5d 29 2c 20 73  o], p.[name]), s
1de40 2e 6e 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d 29  .name, f.[from])
1de50 2c 20 27 2c 20 27 29 22 0a 20 20 20 20 22 20 20  , ', ')".    "  
1de60 7c 7c 20 27 29 3b 27 22 0a 20 20 20 20 22 2c 20  || ');'".    ", 
1de70 22 0a 20 20 20 20 22 20 20 20 20 20 66 2e 5b 74  ".    "     f.[t
1de80 61 62 6c 65 5d 20 22 0a 20 20 20 20 22 46 52 4f  able] ".    "FRO
1de90 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1dea0 41 53 20 73 2c 20 70 72 61 67 6d 61 5f 66 6f 72  AS s, pragma_for
1deb0 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 73 2e  eign_key_list(s.
1dec0 6e 61 6d 65 29 20 41 53 20 66 20 22 0a 20 20 20  name) AS f ".   
1ded0 20 22 4c 45 46 54 20 4a 4f 49 4e 20 70 72 61 67   "LEFT JOIN prag
1dee0 6d 61 5f 74 61 62 6c 65 5f 69 6e 66 6f 20 41 53  ma_table_info AS
1def0 20 70 20 4f 4e 20 28 70 6b 2d 31 3d 73 65 71 20   p ON (pk-1=seq 
1df00 41 4e 44 20 70 2e 61 72 67 3d 66 2e 5b 74 61 62  AND p.arg=f.[tab
1df10 6c 65 5d 29 20 22 0a 20 20 20 20 22 47 52 4f 55  le]) ".    "GROU
1df20 50 20 42 59 20 73 2e 6e 61 6d 65 2c 20 66 2e 69  P BY s.name, f.i
1df30 64 20 22 0a 20 20 20 20 22 4f 52 44 45 52 20 42  d ".    "ORDER B
1df40 59 20 28 43 41 53 45 20 57 48 45 4e 20 3f 20 54  Y (CASE WHEN ? T
1df50 48 45 4e 20 66 2e 5b 74 61 62 6c 65 5d 20 45 4c  HEN f.[table] EL
1df60 53 45 20 73 2e 6e 61 6d 65 20 45 4e 44 29 22 0a  SE s.name END)".
1df70 20 20 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72    ;.  const char
1df80 20 2a 7a 47 6c 6f 62 49 50 4b 20 3d 20 22 53 45   *zGlobIPK = "SE
1df90 41 52 43 48 20 54 41 42 4c 45 20 2a 20 55 53 49  ARCH TABLE * USI
1dfa0 4e 47 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  NG INTEGER PRIMA
1dfb0 52 59 20 4b 45 59 20 28 72 6f 77 69 64 3d 3f 29  RY KEY (rowid=?)
1dfc0 22 3b 0a 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69  ";..  for(i=2; i
1dfd0 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
1dfe0 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73 74   int n = (int)st
1dff0 72 6c 65 6e 28 61 7a 41 72 67 5b 69 5d 29 3b 0a  rlen(azArg[i]);.
1e000 20 20 20 20 69 66 28 20 6e 3e 31 20 26 26 20 73      if( n>1 && s
1e010 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28  qlite3_strnicmp(
1e020 22 2d 76 65 72 62 6f 73 65 22 2c 20 61 7a 41 72  "-verbose", azAr
1e030 67 5b 69 5d 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  g[i], n)==0 ){. 
1e040 20 20 20 20 20 62 56 65 72 62 6f 73 65 20 3d 20       bVerbose = 
1e050 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73  1;.    }.    els
1e060 65 20 69 66 28 20 6e 3e 31 20 26 26 20 73 71 6c  e if( n>1 && sql
1e070 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28 22 2d  ite3_strnicmp("-
1e080 67 72 6f 75 70 62 79 70 61 72 65 6e 74 22 2c 20  groupbyparent", 
1e090 61 7a 41 72 67 5b 69 5d 2c 20 6e 29 3d 3d 30 20  azArg[i], n)==0 
1e0a0 29 7b 0a 20 20 20 20 20 20 62 47 72 6f 75 70 42  ){.      bGroupB
1e0b0 79 50 61 72 65 6e 74 20 3d 20 31 3b 0a 20 20 20  yParent = 1;.   
1e0c0 20 20 20 7a 49 6e 64 65 6e 74 20 3d 20 22 20 20     zIndent = "  
1e0d0 20 20 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65    ";.    }.    e
1e0e0 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
1e0f0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
1e100 73 61 67 65 3a 20 25 73 20 25 73 20 3f 2d 76 65  sage: %s %s ?-ve
1e110 72 62 6f 73 65 3f 20 3f 2d 67 72 6f 75 70 62 79  rbose? ?-groupby
1e120 70 61 72 65 6e 74 3f 5c 6e 22 2c 0a 20 20 20 20  parent?\n",.    
1e130 20 20 20 20 20 20 61 7a 41 72 67 5b 30 5d 2c 20        azArg[0], 
1e140 61 7a 41 72 67 5b 31 5d 0a 20 20 20 20 20 20 29  azArg[1].      )
1e150 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ;.      return S
1e160 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
1e170 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67   }.  }..  /* Reg
1e180 69 73 74 65 72 20 74 68 65 20 66 6b 65 79 5f 63  ister the fkey_c
1e190 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28 29 20  ollate_clause() 
1e1a0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  SQL function */.
1e1b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
1e1c0 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
1e1d0 62 2c 20 22 66 6b 65 79 5f 63 6f 6c 6c 61 74 65  b, "fkey_collate
1e1e0 5f 63 6c 61 75 73 65 22 2c 20 34 2c 20 53 51 4c  _clause", 4, SQL
1e1f0 49 54 45 5f 55 54 46 38 2c 0a 20 20 20 20 20 20  ITE_UTF8,.      
1e200 30 2c 20 73 68 65 6c 6c 46 6b 65 79 43 6f 6c 6c  0, shellFkeyColl
1e210 61 74 65 43 6c 61 75 73 65 2c 20 30 2c 20 30 0a  ateClause, 0, 0.
1e220 20 20 29 3b 0a 0a 0a 20 20 69 66 28 20 72 63 3d    );...  if( rc=
1e230 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1e240 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
1e250 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 53  repare_v2(db, zS
1e260 71 6c 2c 20 2d 31 2c 20 26 70 53 71 6c 2c 20 30  ql, -1, &pSql, 0
1e270 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
1e280 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1e290 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
1e2a0 6e 74 28 70 53 71 6c 2c 20 31 2c 20 62 47 72 6f  nt(pSql, 1, bGro
1e2b0 75 70 42 79 50 61 72 65 6e 74 29 3b 0a 20 20 7d  upByParent);.  }
1e2c0 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ..  if( rc==SQLI
1e2d0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 6e 74  TE_OK ){.    int
1e2e0 20 72 63 32 3b 0a 20 20 20 20 63 68 61 72 20 2a   rc2;.    char *
1e2f0 7a 50 72 65 76 20 3d 20 30 3b 0a 20 20 20 20 77  zPrev = 0;.    w
1e300 68 69 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f 57  hile( SQLITE_ROW
1e310 3d 3d 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ==sqlite3_step(p
1e320 53 71 6c 29 20 29 7b 0a 20 20 20 20 20 20 69 6e  Sql) ){.      in
1e330 74 20 72 65 73 20 3d 20 2d 31 3b 0a 20 20 20 20  t res = -1;.    
1e340 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1e350 70 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20  pExplain = 0;.  
1e360 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1e370 7a 45 51 50 20 3d 20 28 63 6f 6e 73 74 20 63 68  zEQP = (const ch
1e380 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
1e390 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 30 29  mn_text(pSql, 0)
1e3a0 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  ;.      const ch
1e3b0 61 72 20 2a 7a 47 6c 6f 62 20 3d 20 28 63 6f 6e  ar *zGlob = (con
1e3c0 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
1e3d0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71  _column_text(pSq
1e3e0 6c 2c 20 31 29 3b 0a 20 20 20 20 20 20 63 6f 6e  l, 1);.      con
1e3f0 73 74 20 63 68 61 72 20 2a 7a 46 72 6f 6d 20 3d  st char *zFrom =
1e400 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
1e410 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
1e420 74 28 70 53 71 6c 2c 20 32 29 3b 0a 20 20 20 20  t(pSql, 2);.    
1e430 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1e440 61 72 67 65 74 20 3d 20 28 63 6f 6e 73 74 20 63  arget = (const c
1e450 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
1e460 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 33  umn_text(pSql, 3
1e470 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  );.      const c
1e480 68 61 72 20 2a 7a 43 49 20 3d 20 28 63 6f 6e 73  har *zCI = (cons
1e490 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
1e4a0 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c  column_text(pSql
1e4b0 2c 20 34 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73  , 4);.      cons
1e4c0 74 20 63 68 61 72 20 2a 7a 50 61 72 65 6e 74 20  t char *zParent 
1e4d0 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
1e4e0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1e4f0 78 74 28 70 53 71 6c 2c 20 35 29 3b 0a 0a 20 20  xt(pSql, 5);..  
1e500 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e510 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20  _prepare_v2(db, 
1e520 7a 45 51 50 2c 20 2d 31 2c 20 26 70 45 78 70 6c  zEQP, -1, &pExpl
1e530 61 69 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  ain, 0);.      i
1e540 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1e550 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
1e560 69 66 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d  if( SQLITE_ROW==
1e570 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 45 78  sqlite3_step(pEx
1e580 70 6c 61 69 6e 29 20 29 7b 0a 20 20 20 20 20 20  plain) ){.      
1e590 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50    const char *zP
1e5a0 6c 61 6e 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  lan = (const cha
1e5b0 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
1e5c0 6e 5f 74 65 78 74 28 70 45 78 70 6c 61 69 6e 2c  n_text(pExplain,
1e5d0 20 33 29 3b 0a 20 20 20 20 20 20 20 20 72 65 73   3);.        res
1e5e0 20 3d 20 28 0a 20 20 20 20 20 20 20 20 20 20 20   = (.           
1e5f0 20 20 20 30 3d 3d 73 71 6c 69 74 65 33 5f 73 74     0==sqlite3_st
1e600 72 67 6c 6f 62 28 7a 47 6c 6f 62 2c 20 7a 50 6c  rglob(zGlob, zPl
1e610 61 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 7c  an).           |
1e620 7c 20 30 3d 3d 73 71 6c 69 74 65 33 5f 73 74 72  | 0==sqlite3_str
1e630 67 6c 6f 62 28 7a 47 6c 6f 62 49 50 4b 2c 20 7a  glob(zGlobIPK, z
1e640 50 6c 61 6e 29 0a 20 20 20 20 20 20 20 20 29 3b  Plan).        );
1e650 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
1e660 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  c = sqlite3_fina
1e670 6c 69 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a  lize(pExplain);.
1e680 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1e690 4c 49 54 45 5f 4f 4b 20 29 20 62 72 65 61 6b 3b  LITE_OK ) break;
1e6a0 0a 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3c  ..      if( res<
1e6b0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  0 ){.        raw
1e6c0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1e6d0 22 45 72 72 6f 72 3a 20 69 6e 74 65 72 6e 61 6c  "Error: internal
1e6e0 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 20 20   error");.      
1e6f0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
1e700 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 66  else{.        if
1e710 28 20 62 47 72 6f 75 70 42 79 50 61 72 65 6e 74  ( bGroupByParent
1e720 0a 20 20 20 20 20 20 20 20 26 26 20 28 62 56 65  .        && (bVe
1e730 72 62 6f 73 65 20 7c 7c 20 72 65 73 3d 3d 30 29  rbose || res==0)
1e740 0a 20 20 20 20 20 20 20 20 26 26 20 28 7a 50 72  .        && (zPr
1e750 65 76 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  ev==0 || sqlite3
1e760 5f 73 74 72 69 63 6d 70 28 7a 50 61 72 65 6e 74  _stricmp(zParent
1e770 2c 20 7a 50 72 65 76 29 29 0a 20 20 20 20 20 20  , zPrev)).      
1e780 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72    ){.          r
1e790 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
1e7a0 2d 2d 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20  -- Parent table 
1e7b0 25 73 5c 6e 22 2c 20 7a 50 61 72 65 6e 74 29 3b  %s\n", zParent);
1e7c0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
1e7d0 65 33 5f 66 72 65 65 28 7a 50 72 65 76 29 3b 0a  e3_free(zPrev);.
1e7e0 20 20 20 20 20 20 20 20 20 20 7a 50 72 65 76 20            zPrev 
1e7f0 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
1e800 66 28 22 25 73 22 2c 20 7a 50 61 72 65 6e 74 29  f("%s", zParent)
1e810 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  ;.        }..   
1e820 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
1e830 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  ){.          raw
1e840 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73  _printf(out, "%s
1e850 25 73 20 2d 2d 3e 20 25 73 5c 6e 22 2c 20 7a 49  %s --> %s\n", zI
1e860 6e 64 65 6e 74 2c 20 7a 43 49 2c 20 7a 54 61 72  ndent, zCI, zTar
1e870 67 65 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  get);.        }e
1e880 6c 73 65 20 69 66 28 20 62 56 65 72 62 6f 73 65  lse if( bVerbose
1e890 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61   ){.          ra
1e8a0 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25  w_printf(out, "%
1e8b0 73 2f 2a 20 6e 6f 20 65 78 74 72 61 20 69 6e 64  s/* no extra ind
1e8c0 65 78 65 73 20 72 65 71 75 69 72 65 64 20 66 6f  exes required fo
1e8d0 72 20 25 73 20 2d 3e 20 25 73 20 2a 2f 5c 6e 22  r %s -> %s */\n"
1e8e0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e8f0 7a 49 6e 64 65 6e 74 2c 20 7a 46 72 6f 6d 2c 20  zIndent, zFrom, 
1e900 7a 54 61 72 67 65 74 0a 20 20 20 20 20 20 20 20  zTarget.        
1e910 20 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20    );.        }. 
1e920 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
1e930 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 50   sqlite3_free(zP
1e940 72 65 76 29 3b 0a 0a 20 20 20 20 69 66 28 20 72  rev);..    if( r
1e950 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1e960 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1e970 28 73 74 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c  (stderr, "%s\n",
1e980 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
1e990 64 62 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  db));.    }..   
1e9a0 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 66   rc2 = sqlite3_f
1e9b0 69 6e 61 6c 69 7a 65 28 70 53 71 6c 29 3b 0a 20  inalize(pSql);. 
1e9c0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1e9d0 45 5f 4f 4b 20 26 26 20 72 63 32 21 3d 53 51 4c  E_OK && rc2!=SQL
1e9e0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1e9f0 72 63 20 3d 20 72 63 32 3b 0a 20 20 20 20 20 20  rc = rc2;.      
1ea00 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
1ea10 72 2c 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74  r, "%s\n", sqlit
1ea20 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0a  e3_errmsg(db));.
1ea30 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1ea40 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
1ea50 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73 71  derr, "%s\n", sq
1ea60 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29  lite3_errmsg(db)
1ea70 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  );.  }..  return
1ea80 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d   rc;.}../*.** Im
1ea90 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
1eaa0 22 2e 6c 69 6e 74 22 20 64 6f 74 20 63 6f 6d 6d  ".lint" dot comm
1eab0 61 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  and..*/.static i
1eac0 6e 74 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61 6e  nt lintDotComman
1ead0 64 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  d(.  ShellState 
1eae0 2a 70 53 74 61 74 65 2c 20 20 20 20 20 20 20 20  *pState,        
1eaf0 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
1eb00 73 68 65 6c 6c 20 74 6f 6f 6c 20 73 74 61 74 65  shell tool state
1eb10 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41   */.  char **azA
1eb20 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  rg,             
1eb30 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
1eb40 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73  f arguments pass
1eb50 65 64 20 74 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e  ed to dot comman
1eb60 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 20  d */.  int nArg 
1eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1eb90 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
1eba0 7a 41 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 69  zArg[] */.){.  i
1ebb0 6e 74 20 6e 3b 0a 20 20 6e 20 3d 20 28 6e 41 72  nt n;.  n = (nAr
1ebc0 67 3e 3d 32 20 3f 20 28 69 6e 74 29 73 74 72 6c  g>=2 ? (int)strl
1ebd0 65 6e 28 61 7a 41 72 67 5b 31 5d 29 20 3a 20 30  en(azArg[1]) : 0
1ebe0 29 3b 0a 20 20 69 66 28 20 6e 3c 31 20 7c 7c 20  );.  if( n<1 || 
1ebf0 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
1ec00 28 61 7a 41 72 67 5b 31 5d 2c 20 22 66 6b 65 79  (azArg[1], "fkey
1ec10 2d 69 6e 64 65 78 65 73 22 2c 20 6e 29 20 29 20  -indexes", n) ) 
1ec20 67 6f 74 6f 20 75 73 61 67 65 3b 0a 20 20 72 65  goto usage;.  re
1ec30 74 75 72 6e 20 6c 69 6e 74 46 6b 65 79 49 6e 64  turn lintFkeyInd
1ec40 65 78 65 73 28 70 53 74 61 74 65 2c 20 61 7a 41  exes(pState, azA
1ec50 72 67 2c 20 6e 41 72 67 29 3b 0a 0a 20 75 73 61  rg, nArg);.. usa
1ec60 67 65 3a 0a 20 20 72 61 77 5f 70 72 69 6e 74 66  ge:.  raw_printf
1ec70 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 20  (stderr, "Usage 
1ec80 25 73 20 73 75 62 2d 63 6f 6d 6d 61 6e 64 20 3f  %s sub-command ?
1ec90 73 77 69 74 63 68 65 73 2e 2e 2e 3f 5c 6e 22 2c  switches...?\n",
1eca0 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 72 61   azArg[0]);.  ra
1ecb0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1ecc0 20 22 57 68 65 72 65 20 73 75 62 2d 63 6f 6d 6d   "Where sub-comm
1ecd0 61 6e 64 73 20 61 72 65 3a 5c 6e 22 29 3b 0a 20  ands are:\n");. 
1ece0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
1ecf0 72 72 2c 20 22 20 20 20 20 66 6b 65 79 2d 69 6e  rr, "    fkey-in
1ed00 64 65 78 65 73 5c 6e 22 29 3b 0a 20 20 72 65 74  dexes\n");.  ret
1ed10 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
1ed20 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 61  ;.}.../*.** If a
1ed30 6e 20 69 6e 70 75 74 20 6c 69 6e 65 20 62 65 67  n input line beg
1ed40 69 6e 73 20 77 69 74 68 20 22 2e 22 20 74 68 65  ins with "." the
1ed50 6e 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 72 6f  n invoke this ro
1ed60 75 74 69 6e 65 20 74 6f 0a 2a 2a 20 70 72 6f 63  utine to.** proc
1ed70 65 73 73 20 74 68 61 74 20 6c 69 6e 65 2e 0a 2a  ess that line..*
1ed80 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20 6f 6e  *.** Return 1 on
1ed90 20 65 72 72 6f 72 2c 20 32 20 74 6f 20 65 78 69   error, 2 to exi
1eda0 74 2c 20 61 6e 64 20 30 20 6f 74 68 65 72 77 69  t, and 0 otherwi
1edb0 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  se..*/.static in
1edc0 74 20 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e  t do_meta_comman
1edd0 64 28 63 68 61 72 20 2a 7a 4c 69 6e 65 2c 20 53  d(char *zLine, S
1ede0 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20  hellState *p){. 
1edf0 20 69 6e 74 20 68 20 3d 20 31 3b 0a 20 20 69 6e   int h = 1;.  in
1ee00 74 20 6e 41 72 67 20 3d 20 30 3b 0a 20 20 69 6e  t nArg = 0;.  in
1ee10 74 20 6e 2c 20 63 3b 0a 20 20 69 6e 74 20 72 63  t n, c;.  int rc
1ee20 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 61 7a   = 0;.  char *az
1ee30 41 72 67 5b 35 30 5d 3b 0a 0a 20 20 2f 2a 20 50  Arg[50];..  /* P
1ee40 61 72 73 65 20 74 68 65 20 69 6e 70 75 74 20 6c  arse the input l
1ee50 69 6e 65 20 69 6e 74 6f 20 74 6f 6b 65 6e 73 2e  ine into tokens.
1ee60 0a 20 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 7a  .  */.  while( z
1ee70 4c 69 6e 65 5b 68 5d 20 26 26 20 6e 41 72 67 3c  Line[h] && nArg<
1ee80 41 72 72 61 79 53 69 7a 65 28 61 7a 41 72 67 29  ArraySize(azArg)
1ee90 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 49   ){.    while( I
1eea0 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d 29  sSpace(zLine[h])
1eeb0 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20 69   ){ h++; }.    i
1eec0 66 28 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 30 20 29  f( zLine[h]==0 )
1eed0 20 62 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20   break;.    if( 
1eee0 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 5c 27 27 20 7c  zLine[h]=='\'' |
1eef0 7c 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 22 27 20  | zLine[h]=='"' 
1ef00 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 64 65 6c  ){.      int del
1ef10 69 6d 20 3d 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 3b  im = zLine[h++];
1ef20 0a 20 20 20 20 20 20 61 7a 41 72 67 5b 6e 41 72  .      azArg[nAr
1ef30 67 2b 2b 5d 20 3d 20 26 7a 4c 69 6e 65 5b 68 5d  g++] = &zLine[h]
1ef40 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a  ;.      while( z
1ef50 4c 69 6e 65 5b 68 5d 20 26 26 20 7a 4c 69 6e 65  Line[h] && zLine
1ef60 5b 68 5d 21 3d 64 65 6c 69 6d 20 29 7b 0a 20 20  [h]!=delim ){.  
1ef70 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b        if( zLine[
1ef80 68 5d 3d 3d 27 5c 5c 27 20 26 26 20 64 65 6c 69  h]=='\\' && deli
1ef90 6d 3d 3d 27 22 27 20 26 26 20 7a 4c 69 6e 65 5b  m=='"' && zLine[
1efa0 68 2b 31 5d 21 3d 30 20 29 20 68 2b 2b 3b 0a 20  h+1]!=0 ) h++;. 
1efb0 20 20 20 20 20 20 20 68 2b 2b 3b 0a 20 20 20 20         h++;.    
1efc0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 4c    }.      if( zL
1efd0 69 6e 65 5b 68 5d 3d 3d 64 65 6c 69 6d 20 29 7b  ine[h]==delim ){
1efe0 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 68  .        zLine[h
1eff0 2b 2b 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  ++] = 0;.      }
1f000 0a 20 20 20 20 20 20 69 66 28 20 64 65 6c 69 6d  .      if( delim
1f010 3d 3d 27 22 27 20 29 20 72 65 73 6f 6c 76 65 5f  =='"' ) resolve_
1f020 62 61 63 6b 73 6c 61 73 68 65 73 28 61 7a 41 72  backslashes(azAr
1f030 67 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20  g[nArg-1]);.    
1f040 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 7a 41  }else{.      azA
1f050 72 67 5b 6e 41 72 67 2b 2b 5d 20 3d 20 26 7a 4c  rg[nArg++] = &zL
1f060 69 6e 65 5b 68 5d 3b 0a 20 20 20 20 20 20 77 68  ine[h];.      wh
1f070 69 6c 65 28 20 7a 4c 69 6e 65 5b 68 5d 20 26 26  ile( zLine[h] &&
1f080 20 21 49 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b   !IsSpace(zLine[
1f090 68 5d 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20 20  h]) ){ h++; }.  
1f0a0 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d      if( zLine[h]
1f0b0 20 29 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 20 3d 20   ) zLine[h++] = 
1f0c0 30 3b 0a 20 20 20 20 20 20 72 65 73 6f 6c 76 65  0;.      resolve
1f0d0 5f 62 61 63 6b 73 6c 61 73 68 65 73 28 61 7a 41  _backslashes(azA
1f0e0 72 67 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20  rg[nArg-1]);.   
1f0f0 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 72 6f   }.  }..  /* Pro
1f100 63 65 73 73 20 74 68 65 20 69 6e 70 75 74 20 6c  cess the input l
1f110 69 6e 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ine..  */.  if( 
1f120 6e 41 72 67 3d 3d 30 20 29 20 72 65 74 75 72 6e  nArg==0 ) return
1f130 20 30 3b 20 2f 2a 20 6e 6f 20 74 6f 6b 65 6e 73   0; /* no tokens
1f140 2c 20 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 20  , no error */.  
1f150 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 41  n = strlen30(azA
1f160 72 67 5b 30 5d 29 3b 0a 20 20 63 20 3d 20 61 7a  rg[0]);.  c = az
1f170 41 72 67 5b 30 5d 5b 30 5d 3b 0a 0a 23 69 66 6e  Arg[0][0];..#ifn
1f180 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f190 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
1f1a0 69 66 28 20 63 3d 3d 27 61 27 20 26 26 20 73 74  if( c=='a' && st
1f1b0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
1f1c0 22 61 75 74 68 22 2c 20 6e 29 3d 3d 30 20 29 7b  "auth", n)==0 ){
1f1d0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 32  .    if( nArg!=2
1f1e0 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
1f1f0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
1f200 61 67 65 3a 20 2e 61 75 74 68 20 4f 4e 7c 4f 46  age: .auth ON|OF
1f210 46 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  F\n");.      rc 
1f220 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  = 1;.      goto 
1f230 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
1f240 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65  t;.    }.    ope
1f250 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20  n_db(p, 0);.    
1f260 69 66 28 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65  if( booleanValue
1f270 28 61 7a 41 72 67 5b 31 5d 29 20 29 7b 0a 20 20  (azArg[1]) ){.  
1f280 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 74 5f      sqlite3_set_
1f290 61 75 74 68 6f 72 69 7a 65 72 28 70 2d 3e 64 62  authorizer(p->db
1f2a0 2c 20 73 68 65 6c 6c 41 75 74 68 2c 20 70 29 3b  , shellAuth, p);
1f2b0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1f2c0 20 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75    sqlite3_set_au
1f2d0 74 68 6f 72 69 7a 65 72 28 70 2d 3e 64 62 2c 20  thorizer(p->db, 
1f2e0 30 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  0, 0);.    }.  }
1f2f0 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69  else.#endif..  i
1f300 66 28 20 28 63 3d 3d 27 62 27 20 26 26 20 6e 3e  f( (c=='b' && n>
1f310 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  =3 && strncmp(az
1f320 41 72 67 5b 30 5d 2c 20 22 62 61 63 6b 75 70 22  Arg[0], "backup"
1f330 2c 20 6e 29 3d 3d 30 29 0a 20 20 20 7c 7c 20 28  , n)==0).   || (
1f340 63 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 33 20 26  c=='s' && n>=3 &
1f350 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
1f360 30 5d 2c 20 22 73 61 76 65 22 2c 20 6e 29 3d 3d  0], "save", n)==
1f370 30 29 0a 20 20 29 7b 0a 20 20 20 20 63 6f 6e 73  0).  ){.    cons
1f380 74 20 63 68 61 72 20 2a 7a 44 65 73 74 46 69 6c  t char *zDestFil
1f390 65 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74  e = 0;.    const
1f3a0 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b 0a   char *zDb = 0;.
1f3b0 20 20 20 20 73 71 6c 69 74 65 33 20 2a 70 44 65      sqlite3 *pDe
1f3c0 73 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  st;.    sqlite3_
1f3d0 62 61 63 6b 75 70 20 2a 70 42 61 63 6b 75 70 3b  backup *pBackup;
1f3e0 0a 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20  .    int j;.    
1f3f0 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e 41 72 67 3b  for(j=1; j<nArg;
1f400 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e   j++){.      con
1f410 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41  st char *z = azA
1f420 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28  rg[j];.      if(
1f430 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20   z[0]=='-' ){.  
1f440 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a 5b 30        while( z[0
1f450 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20  ]=='-' ) z++;.  
1f460 20 20 20 20 20 20 2f 2a 20 4e 6f 20 6f 70 74 69        /* No opti
1f470 6f 6e 73 20 74 6f 20 70 72 6f 63 65 73 73 20 61  ons to process a
1f480 74 20 74 68 69 73 20 74 69 6d 65 20 2a 2f 0a 20  t this time */. 
1f490 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
1f4a0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1f4b0 74 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20  tderr, "unknown 
1f4c0 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 61  option: %s\n", a
1f4d0 7a 41 72 67 5b 6a 5d 29 3b 0a 20 20 20 20 20 20  zArg[j]);.      
1f4e0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
1f4f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
1f500 6c 73 65 20 69 66 28 20 7a 44 65 73 74 46 69 6c  lse if( zDestFil
1f510 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  e==0 ){.        
1f520 7a 44 65 73 74 46 69 6c 65 20 3d 20 61 7a 41 72  zDestFile = azAr
1f530 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  g[j];.      }els
1f540 65 20 69 66 28 20 7a 44 62 3d 3d 30 20 29 7b 0a  e if( zDb==0 ){.
1f550 20 20 20 20 20 20 20 20 7a 44 62 20 3d 20 7a 44          zDb = zD
1f560 65 73 74 46 69 6c 65 3b 0a 20 20 20 20 20 20 20  estFile;.       
1f570 20 7a 44 65 73 74 46 69 6c 65 20 3d 20 61 7a 41   zDestFile = azA
1f580 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c  rg[j];.      }el
1f590 73 65 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f  se{.        raw_
1f5a0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1f5b0 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e  too many argumen
1f5c0 74 73 20 74 6f 20 2e 62 61 63 6b 75 70 5c 6e 22  ts to .backup\n"
1f5d0 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
1f5e0 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 1;.      }.   
1f5f0 20 7d 0a 20 20 20 20 69 66 28 20 7a 44 65 73 74   }.    if( zDest
1f600 46 69 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20  File==0 ){.     
1f610 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
1f620 72 72 2c 20 22 6d 69 73 73 69 6e 67 20 46 49 4c  rr, "missing FIL
1f630 45 4e 41 4d 45 20 61 72 67 75 6d 65 6e 74 20 6f  ENAME argument o
1f640 6e 20 2e 62 61 63 6b 75 70 5c 6e 22 29 3b 0a 20  n .backup\n");. 
1f650 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
1f660 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 44 62     }.    if( zDb
1f670 3d 3d 30 20 29 20 7a 44 62 20 3d 20 22 6d 61 69  ==0 ) zDb = "mai
1f680 6e 22 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  n";.    rc = sql
1f690 69 74 65 33 5f 6f 70 65 6e 28 7a 44 65 73 74 46  ite3_open(zDestF
1f6a0 69 6c 65 2c 20 26 70 44 65 73 74 29 3b 0a 20 20  ile, &pDest);.  
1f6b0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1f6c0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 75 74 66  _OK ){.      utf
1f6d0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
1f6e0 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20   "Error: cannot 
1f6f0 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20  open \"%s\"\n", 
1f700 7a 44 65 73 74 46 69 6c 65 29 3b 0a 20 20 20 20  zDestFile);.    
1f710 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28    sqlite3_close(
1f720 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72 65  pDest);.      re
1f730 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
1f740 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
1f750 0a 20 20 20 20 70 42 61 63 6b 75 70 20 3d 20 73  .    pBackup = s
1f760 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e  qlite3_backup_in
1f770 69 74 28 70 44 65 73 74 2c 20 22 6d 61 69 6e 22  it(pDest, "main"
1f780 2c 20 70 2d 3e 64 62 2c 20 7a 44 62 29 3b 0a 20  , p->db, zDb);. 
1f790 20 20 20 69 66 28 20 70 42 61 63 6b 75 70 3d 3d     if( pBackup==
1f7a0 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  0 ){.      utf8_
1f7b0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1f7c0 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71  Error: %s\n", sq
1f7d0 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 44 65  lite3_errmsg(pDe
1f7e0 73 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  st));.      sqli
1f7f0 74 65 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29  te3_close(pDest)
1f800 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
1f810 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c  ;.    }.    whil
1f820 65 28 20 20 28 72 63 20 3d 20 73 71 6c 69 74 65  e(  (rc = sqlite
1f830 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 70 42  3_backup_step(pB
1f840 61 63 6b 75 70 2c 31 30 30 29 29 3d 3d 53 51 4c  ackup,100))==SQL
1f850 49 54 45 5f 4f 4b 20 29 7b 7d 0a 20 20 20 20 73  ITE_OK ){}.    s
1f860 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
1f870 6e 69 73 68 28 70 42 61 63 6b 75 70 29 3b 0a 20  nish(pBackup);. 
1f880 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1f890 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20  E_DONE ){.      
1f8a0 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  rc = 0;.    }els
1f8b0 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  e{.      utf8_pr
1f8c0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1f8d0 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69  ror: %s\n", sqli
1f8e0 74 65 33 5f 65 72 72 6d 73 67 28 70 44 65 73 74  te3_errmsg(pDest
1f8f0 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ));.      rc = 1
1f900 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
1f910 74 65 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29  te3_close(pDest)
1f920 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  ;.  }else..  if(
1f930 20 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20   c=='b' && n>=3 
1f940 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
1f950 5b 30 5d 2c 20 22 62 61 69 6c 22 2c 20 6e 29 3d  [0], "bail", n)=
1f960 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
1f970 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 62  rg==2 ){.      b
1f980 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 3d 20 62  ail_on_error = b
1f990 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72  ooleanValue(azAr
1f9a0 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  g[1]);.    }else
1f9b0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
1f9c0 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
1f9d0 65 3a 20 2e 62 61 69 6c 20 6f 6e 7c 6f 66 66 5c  e: .bail on|off\
1f9e0 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
1f9f0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
1fa00 0a 0a 20 20 69 66 28 20 63 3d 3d 27 62 27 20 26  ..  if( c=='b' &
1fa10 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d  & n>=3 && strncm
1fa20 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62 69 6e  p(azArg[0], "bin
1fa30 61 72 79 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ary", n)==0 ){. 
1fa40 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29     if( nArg==2 )
1fa50 7b 0a 20 20 20 20 20 20 69 66 28 20 62 6f 6f 6c  {.      if( bool
1fa60 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  eanValue(azArg[1
1fa70 5d 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 65  ]) ){.        se
1fa80 74 42 69 6e 61 72 79 4d 6f 64 65 28 70 2d 3e 6f  tBinaryMode(p->o
1fa90 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 65  ut, 1);.      }e
1faa0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 65 74  lse{.        set
1fab0 54 65 78 74 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c  TextMode(p->out,
1fac0 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   1);.      }.   
1fad0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
1fae0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1faf0 20 22 55 73 61 67 65 3a 20 2e 62 69 6e 61 72 79   "Usage: .binary
1fb00 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20   on|off\n");.   
1fb10 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
1fb20 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
1fb30 63 3d 3d 27 63 27 20 26 26 20 73 74 72 63 6d 70  c=='c' && strcmp
1fb40 28 61 7a 41 72 67 5b 30 5d 2c 22 63 64 22 29 3d  (azArg[0],"cd")=
1fb50 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
1fb60 72 67 3d 3d 32 20 29 7b 0a 23 69 66 20 64 65 66  rg==2 ){.#if def
1fb70 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20  ined(_WIN32) || 
1fb80 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 20  defined(WIN32). 
1fb90 20 20 20 20 20 77 63 68 61 72 5f 74 20 2a 7a 20       wchar_t *z 
1fba0 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  = sqlite3_win32_
1fbb0 75 74 66 38 5f 74 6f 5f 75 6e 69 63 6f 64 65 28  utf8_to_unicode(
1fbc0 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
1fbd0 20 72 63 20 3d 20 21 53 65 74 43 75 72 72 65 6e   rc = !SetCurren
1fbe0 74 44 69 72 65 63 74 6f 72 79 57 28 7a 29 3b 0a  tDirectoryW(z);.
1fbf0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
1fc00 65 65 28 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20  ee(z);.#else.   
1fc10 20 20 20 72 63 20 3d 20 63 68 64 69 72 28 61 7a     rc = chdir(az
1fc20 41 72 67 5b 31 5d 29 3b 0a 23 65 6e 64 69 66 0a  Arg[1]);.#endif.
1fc30 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a        if( rc ){.
1fc40 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
1fc50 6e 74 66 28 73 74 64 65 72 72 2c 20 22 43 61 6e  ntf(stderr, "Can
1fc60 6e 6f 74 20 63 68 61 6e 67 65 20 74 6f 20 64 69  not change to di
1fc70 72 65 63 74 6f 72 79 20 5c 22 25 73 5c 22 5c 6e  rectory \"%s\"\n
1fc80 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ", azArg[1]);.  
1fc90 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
1fca0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
1fcb0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
1fcc0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
1fcd0 3a 20 2e 63 64 20 44 49 52 45 43 54 4f 52 59 5c  : .cd DIRECTORY\
1fce0 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
1fcf0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
1fd00 0a 0a 20 20 2f 2a 20 54 68 65 20 75 6e 64 6f 63  ..  /* The undoc
1fd10 75 6d 65 6e 74 65 64 20 22 2e 62 72 65 61 6b 70  umented ".breakp
1fd20 6f 69 6e 74 22 20 63 6f 6d 6d 61 6e 64 20 63 61  oint" command ca
1fd30 75 73 65 73 20 61 20 63 61 6c 6c 20 74 6f 20 74  uses a call to t
1fd40 68 65 20 6e 6f 2d 6f 70 0a 20 20 2a 2a 20 72 6f  he no-op.  ** ro
1fd50 75 74 69 6e 65 20 6e 61 6d 65 64 20 74 65 73 74  utine named test
1fd60 5f 62 72 65 61 6b 70 6f 69 6e 74 28 29 2e 0a 20  _breakpoint().. 
1fd70 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 62 27   */.  if( c=='b'
1fd80 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
1fd90 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62  cmp(azArg[0], "b
1fda0 72 65 61 6b 70 6f 69 6e 74 22 2c 20 6e 29 3d 3d  reakpoint", n)==
1fdb0 30 20 29 7b 0a 20 20 20 20 74 65 73 74 5f 62 72  0 ){.    test_br
1fdc0 65 61 6b 70 6f 69 6e 74 28 29 3b 0a 20 20 7d 65  eakpoint();.  }e
1fdd0 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 63  lse..  if( c=='c
1fde0 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72  ' && n>=3 && str
1fdf0 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
1fe00 63 68 61 6e 67 65 73 22 2c 20 6e 29 3d 3d 30 20  changes", n)==0 
1fe10 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d  ){.    if( nArg=
1fe20 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 65 74 4f  =2 ){.      setO
1fe30 72 43 6c 65 61 72 46 6c 61 67 28 70 2c 20 53 48  rClearFlag(p, SH
1fe40 46 4c 47 5f 43 6f 75 6e 74 43 68 61 6e 67 65 73  FLG_CountChanges
1fe50 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
1fe60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
1fe70 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1fe80 20 22 55 73 61 67 65 3a 20 2e 63 68 61 6e 67 65   "Usage: .change
1fe90 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20  s on|off\n");.  
1fea0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
1feb0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20  }.  }else..  /* 
1fec0 43 61 6e 63 65 6c 20 6f 75 74 70 75 74 20 72 65  Cancel output re
1fed0 64 69 72 65 63 74 69 6f 6e 2c 20 69 66 20 69 74  direction, if it
1fee0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 73 65   is currently se
1fef0 74 20 28 62 79 20 2e 74 65 73 74 63 61 73 65 29  t (by .testcase)
1ff00 0a 20 20 2a 2a 20 54 68 65 6e 20 72 65 61 64 20  .  ** Then read 
1ff10 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
1ff20 68 65 20 74 65 73 74 63 61 73 65 2d 6f 75 74 2e  he testcase-out.
1ff30 74 78 74 20 66 69 6c 65 20 61 6e 64 20 63 6f 6d  txt file and com
1ff40 70 61 72 65 20 61 67 61 69 6e 73 74 0a 20 20 2a  pare against.  *
1ff50 2a 20 61 7a 41 72 67 5b 31 5d 2e 20 20 49 66 20  * azArg[1].  If 
1ff60 74 68 65 72 65 20 61 72 65 20 64 69 66 66 65 72  there are differ
1ff70 65 6e 63 65 73 2c 20 72 65 70 6f 72 74 20 61 6e  ences, report an
1ff80 20 65 72 72 6f 72 20 61 6e 64 20 65 78 69 74 2e   error and exit.
1ff90 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27  .  */.  if( c=='
1ffa0 63 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74  c' && n>=3 && st
1ffb0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
1ffc0 22 63 68 65 63 6b 22 2c 20 6e 29 3d 3d 30 20 29  "check", n)==0 )
1ffd0 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 52 65 73  {.    char *zRes
1ffe0 20 3d 20 30 3b 0a 20 20 20 20 6f 75 74 70 75 74   = 0;.    output
1fff0 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69  _reset(p);.    i
20000 66 28 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20  f( nArg!=2 ){.  
20010 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
20020 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
20030 63 68 65 63 6b 20 47 4c 4f 42 2d 50 41 54 54 45  check GLOB-PATTE
20040 52 4e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  RN\n");.      rc
20050 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 2;.    }else 
20060 69 66 28 20 28 7a 52 65 73 20 3d 20 72 65 61 64  if( (zRes = read
20070 46 69 6c 65 28 22 74 65 73 74 63 61 73 65 2d 6f  File("testcase-o
20080 75 74 2e 74 78 74 22 2c 20 30 29 29 3d 3d 30 20  ut.txt", 0))==0 
20090 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
200a0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
200b0 6f 72 3a 20 63 61 6e 6e 6f 74 20 72 65 61 64 20  or: cannot read 
200c0 27 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78  'testcase-out.tx
200d0 74 27 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  t'\n");.      rc
200e0 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 2;.    }else 
200f0 69 66 28 20 74 65 73 74 63 61 73 65 5f 67 6c 6f  if( testcase_glo
20100 62 28 61 7a 41 72 67 5b 31 5d 2c 7a 52 65 73 29  b(azArg[1],zRes)
20110 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66  ==0 ){.      utf
20120 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
20130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20140 20 20 22 74 65 73 74 63 61 73 65 2d 25 73 20 46    "testcase-%s F
20150 41 49 4c 45 44 5c 6e 20 45 78 70 65 63 74 65 64  AILED\n Expected
20160 3a 20 5b 25 73 5d 5c 6e 20 20 20 20 20 20 47 6f  : [%s]\n      Go
20170 74 3a 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20  t: [%s]\n",.    
20180 20 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e               p->
20190 7a 54 65 73 74 63 61 73 65 2c 20 61 7a 41 72 67  zTestcase, azArg
201a0 5b 31 5d 2c 20 7a 52 65 73 29 3b 0a 20 20 20 20  [1], zRes);.    
201b0 20 20 72 63 20 3d 20 32 3b 0a 20 20 20 20 7d 65    rc = 2;.    }e
201c0 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  lse{.      utf8_
201d0 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22  printf(stdout, "
201e0 74 65 73 74 63 61 73 65 2d 25 73 20 6f 6b 5c 6e  testcase-%s ok\n
201f0 22 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73 65 29  ", p->zTestcase)
20200 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 65 63  ;.      p->nChec
20210 6b 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  k++;.    }.    s
20220 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 52 65 73  qlite3_free(zRes
20230 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66  );.  }else..  if
20240 28 20 63 3d 3d 27 63 27 20 26 26 20 73 74 72 6e  ( c=='c' && strn
20250 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63  cmp(azArg[0], "c
20260 6c 6f 6e 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  lone", n)==0 ){.
20270 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
20280 29 7b 0a 20 20 20 20 20 20 74 72 79 54 6f 43 6c  ){.      tryToCl
20290 6f 6e 65 28 70 2c 20 61 7a 41 72 67 5b 31 5d 29  one(p, azArg[1])
202a0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
202b0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
202c0 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 63  derr, "Usage: .c
202d0 6c 6f 6e 65 20 46 49 4c 45 4e 41 4d 45 5c 6e 22  lone FILENAME\n"
202e0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
202f0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
20300 20 20 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20    if( c=='d' && 
20310 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>1 && strncmp(a
20320 7a 41 72 67 5b 30 5d 2c 20 22 64 61 74 61 62 61  zArg[0], "databa
20330 73 65 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ses", n)==0 ){. 
20340 20 20 20 53 68 65 6c 6c 53 74 61 74 65 20 64 61     ShellState da
20350 74 61 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45  ta;.    char *zE
20360 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 6f  rrMsg = 0;.    o
20370 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20  pen_db(p, 0);.  
20380 20 20 6d 65 6d 63 70 79 28 26 64 61 74 61 2c 20    memcpy(&data, 
20390 70 2c 20 73 69 7a 65 6f 66 28 64 61 74 61 29 29  p, sizeof(data))
203a0 3b 0a 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48  ;.    data.showH
203b0 65 61 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 64  eader = 0;.    d
203c0 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61  ata.cMode = data
203d0 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73  .mode = MODE_Lis
203e0 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  t;.    sqlite3_s
203f0 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64  nprintf(sizeof(d
20400 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72  ata.colSeparator
20410 29 2c 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61  ),data.colSepara
20420 74 6f 72 2c 22 3a 20 22 29 3b 0a 20 20 20 20 64  tor,": ");.    d
20430 61 74 61 2e 63 6e 74 20 3d 20 30 3b 0a 20 20 20  ata.cnt = 0;.   
20440 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
20450 3e 64 62 2c 20 22 53 45 4c 45 43 54 20 6e 61 6d  >db, "SELECT nam
20460 65 2c 20 66 69 6c 65 20 46 52 4f 4d 20 70 72 61  e, file FROM pra
20470 67 6d 61 5f 64 61 74 61 62 61 73 65 5f 6c 69 73  gma_database_lis
20480 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t",.            
20490 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26       callback, &
204a0 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b  data, &zErrMsg);
204b0 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67  .    if( zErrMsg
204c0 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
204d0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72  rintf(stderr,"Er
204e0 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72  ror: %s\n", zErr
204f0 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Msg);.      sqli
20500 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
20510 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
20520 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
20530 20 20 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20    if( c=='d' && 
20540 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
20550 2c 20 22 64 62 69 6e 66 6f 22 2c 20 6e 29 3d 3d  , "dbinfo", n)==
20560 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 68  0 ){.    rc = sh
20570 65 6c 6c 5f 64 62 69 6e 66 6f 5f 63 6f 6d 6d 61  ell_dbinfo_comma
20580 6e 64 28 70 2c 20 6e 41 72 67 2c 20 61 7a 41 72  nd(p, nArg, azAr
20590 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  g);.  }else..  i
205a0 66 28 20 63 3d 3d 27 64 27 20 26 26 20 73 74 72  f( c=='d' && str
205b0 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
205c0 64 75 6d 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  dump", n)==0 ){.
205d0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
205e0 7a 4c 69 6b 65 20 3d 20 30 3b 0a 20 20 20 20 69  zLike = 0;.    i
205f0 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 73 61  nt i;.    int sa
20600 76 65 64 53 68 6f 77 48 65 61 64 65 72 20 3d 20  vedShowHeader = 
20610 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 3b 0a 20  p->showHeader;. 
20620 20 20 20 53 68 65 6c 6c 43 6c 65 61 72 46 6c 61     ShellClearFla
20630 67 28 70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65  g(p, SHFLG_Prese
20640 72 76 65 52 6f 77 69 64 7c 53 48 46 4c 47 5f 4e  rveRowid|SHFLG_N
20650 65 77 6c 69 6e 65 73 29 3b 0a 20 20 20 20 66 6f  ewlines);.    fo
20660 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=1; i<nArg; i
20670 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 61  ++){.      if( a
20680 7a 41 72 67 5b 69 5d 5b 30 5d 3d 3d 27 2d 27 20  zArg[i][0]=='-' 
20690 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74  ){.        const
206a0 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67   char *z = azArg
206b0 5b 69 5d 2b 31 3b 0a 20 20 20 20 20 20 20 20 69  [i]+1;.        i
206c0 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a  f( z[0]=='-' ) z
206d0 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ++;.        if( 
206e0 73 74 72 63 6d 70 28 7a 2c 22 70 72 65 73 65 72  strcmp(z,"preser
206f0 76 65 2d 72 6f 77 69 64 73 22 29 3d 3d 30 20 29  ve-rowids")==0 )
20700 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
20710 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
20720 45 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f  E.          raw_
20730 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
20740 54 68 65 20 2d 2d 70 72 65 73 65 72 76 65 2d 72  The --preserve-r
20750 6f 77 69 64 73 20 6f 70 74 69 6f 6e 20 69 73 20  owids option is 
20760 6e 6f 74 20 63 6f 6d 70 61 74 69 62 6c 65 22 0a  not compatible".
20770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20780 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 77               " w
20790 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
207a0 56 49 52 54 55 41 4c 54 41 42 4c 45 5c 6e 22 29  VIRTUALTABLE\n")
207b0 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  ;.          rc =
207c0 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   1;.          go
207d0 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
207e0 65 78 69 74 3b 0a 23 65 6c 73 65 0a 20 20 20 20  exit;.#else.    
207f0 20 20 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c        ShellSetFl
20800 61 67 28 70 2c 20 53 48 46 4c 47 5f 50 72 65 73  ag(p, SHFLG_Pres
20810 65 72 76 65 52 6f 77 69 64 29 3b 0a 23 65 6e 64  erveRowid);.#end
20820 69 66 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  if.        }else
20830 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
20840 63 6d 70 28 7a 2c 22 6e 65 77 6c 69 6e 65 73 22  cmp(z,"newlines"
20850 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
20860 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28 70    ShellSetFlag(p
20870 2c 20 53 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73  , SHFLG_Newlines
20880 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
20890 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
208a0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
208b0 73 74 64 65 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e  stderr, "Unknown
208c0 20 6f 70 74 69 6f 6e 20 5c 22 25 73 5c 22 20 6f   option \"%s\" o
208d0 6e 20 5c 22 2e 64 75 6d 70 5c 22 5c 6e 22 2c 20  n \".dump\"\n", 
208e0 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20  azArg[i]);.     
208f0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
20900 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
20910 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
20920 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
20930 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b 65 20 29  else if( zLike )
20940 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
20950 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
20960 61 67 65 3a 20 2e 64 75 6d 70 20 3f 2d 2d 70 72  age: .dump ?--pr
20970 65 73 65 72 76 65 2d 72 6f 77 69 64 73 3f 20 22  eserve-rowids? "
20980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20990 20 20 20 20 20 20 20 20 20 20 20 20 22 3f 2d 2d              "?--
209a0 6e 65 77 6c 69 6e 65 73 3f 20 3f 4c 49 4b 45 2d  newlines? ?LIKE-
209b0 50 41 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20  PATTERN?\n");.  
209c0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
209d0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
209e0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
209f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20a00 20 20 20 7a 4c 69 6b 65 20 3d 20 61 7a 41 72 67     zLike = azArg
20a10 5b 69 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  [i];.      }.   
20a20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70   }.    open_db(p
20a30 2c 20 30 29 3b 0a 20 20 20 20 2f 2a 20 57 68 65  , 0);.    /* Whe
20a40 6e 20 70 6c 61 79 69 6e 67 20 62 61 63 6b 20 61  n playing back a
20a50 20 22 64 75 6d 70 22 2c 20 74 68 65 20 63 6f 6e   "dump", the con
20a60 74 65 6e 74 20 6d 69 67 68 74 20 61 70 70 65 61  tent might appea
20a70 72 20 69 6e 20 61 6e 20 6f 72 64 65 72 0a 20 20  r in an order.  
20a80 20 20 2a 2a 20 77 68 69 63 68 20 63 61 75 73 65    ** which cause
20a90 73 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  s immediate fore
20aa0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
20ab0 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61 74  nts to be violat
20ac0 65 64 2e 0a 20 20 20 20 2a 2a 20 53 6f 20 64 69  ed..    ** So di
20ad0 73 61 62 6c 65 20 66 6f 72 65 69 67 6e 2d 6b 65  sable foreign-ke
20ae0 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 65 6e 66  y constraint enf
20af0 6f 72 63 65 6d 65 6e 74 20 74 6f 20 70 72 65 76  orcement to prev
20b00 65 6e 74 20 70 72 6f 62 6c 65 6d 73 2e 20 2a 2f  ent problems. */
20b10 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
20b20 70 2d 3e 6f 75 74 2c 20 22 50 52 41 47 4d 41 20  p->out, "PRAGMA 
20b30 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 46 46  foreign_keys=OFF
20b40 3b 5c 6e 22 29 3b 0a 20 20 20 20 72 61 77 5f 70  ;\n");.    raw_p
20b50 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 42  rintf(p->out, "B
20b60 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e  EGIN TRANSACTION
20b70 3b 5c 6e 22 29 3b 0a 20 20 20 20 70 2d 3e 77 72  ;\n");.    p->wr
20b80 69 74 61 62 6c 65 53 63 68 65 6d 61 20 3d 20 30  itableSchema = 0
20b90 3b 0a 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61  ;.    p->showHea
20ba0 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 2f 2a 20  der = 0;.    /* 
20bb0 53 65 74 20 77 72 69 74 61 62 6c 65 5f 73 63 68  Set writable_sch
20bc0 65 6d 61 3d 4f 4e 20 73 69 6e 63 65 20 64 6f 69  ema=ON since doi
20bd0 6e 67 20 73 6f 20 66 6f 72 63 65 73 20 53 51 4c  ng so forces SQL
20be0 69 74 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a  ite to initializ
20bf0 65 0a 20 20 20 20 2a 2a 20 61 73 20 6d 75 63 68  e.    ** as much
20c00 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 61   of the schema a
20c10 73 20 69 74 20 63 61 6e 20 65 76 65 6e 20 69 66  s it can even if
20c20 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
20c30 65 72 20 74 61 62 6c 65 20 69 73 0a 20 20 20 20  er table is.    
20c40 2a 2a 20 63 6f 72 72 75 70 74 2e 20 2a 2f 0a 20  ** corrupt. */. 
20c50 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28     sqlite3_exec(
20c60 70 2d 3e 64 62 2c 20 22 53 41 56 45 50 4f 49 4e  p->db, "SAVEPOIN
20c70 54 20 64 75 6d 70 3b 20 50 52 41 47 4d 41 20 77  T dump; PRAGMA w
20c80 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
20c90 4e 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  N", 0, 0, 0);.  
20ca0 20 20 70 2d 3e 6e 45 72 72 20 3d 20 30 3b 0a 20    p->nErr = 0;. 
20cb0 20 20 20 69 66 28 20 7a 4c 69 6b 65 3d 3d 30 20     if( zLike==0 
20cc0 29 7b 0a 20 20 20 20 20 20 72 75 6e 5f 73 63 68  ){.      run_sch
20cd0 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 70  ema_dump_query(p
20ce0 2c 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43  ,.        "SELEC
20cf0 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73 71  T name, type, sq
20d00 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
20d10 73 74 65 72 20 22 0a 20 20 20 20 20 20 20 20 22  ster ".        "
20d20 57 48 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55  WHERE sql NOT NU
20d30 4c 4c 20 41 4e 44 20 74 79 70 65 3d 3d 27 74 61  LL AND type=='ta
20d40 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 21 3d 27  ble' AND name!='
20d50 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 27  sqlite_sequence'
20d60 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ".      );.     
20d70 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70   run_schema_dump
20d80 5f 71 75 65 72 79 28 70 2c 0a 20 20 20 20 20 20  _query(p,.      
20d90 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    "SELECT name, 
20da0 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73  type, sql FROM s
20db0 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 0a 20  qlite_master ". 
20dc0 20 20 20 20 20 20 20 22 57 48 45 52 45 20 6e 61         "WHERE na
20dd0 6d 65 3d 3d 27 73 71 6c 69 74 65 5f 73 65 71 75  me=='sqlite_sequ
20de0 65 6e 63 65 27 22 0a 20 20 20 20 20 20 29 3b 0a  ence'".      );.
20df0 20 20 20 20 20 20 72 75 6e 5f 74 61 62 6c 65 5f        run_table_
20e00 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 0a 20 20  dump_query(p,.  
20e10 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 73 71        "SELECT sq
20e20 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
20e30 73 74 65 72 20 22 0a 20 20 20 20 20 20 20 20 22  ster ".        "
20e40 57 48 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55  WHERE sql NOT NU
20e50 4c 4c 20 41 4e 44 20 74 79 70 65 20 49 4e 20 28  LL AND type IN (
20e60 27 69 6e 64 65 78 27 2c 27 74 72 69 67 67 65 72  'index','trigger
20e70 27 2c 27 76 69 65 77 27 29 22 2c 20 30 0a 20 20  ','view')", 0.  
20e80 20 20 20 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65      );.    }else
20e90 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 53  {.      char *zS
20ea0 71 6c 3b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d  ql;.      zSql =
20eb0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
20ec0 28 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43  (.        "SELEC
20ed0 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73 71  T name, type, sq
20ee0 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
20ef0 73 74 65 72 20 22 0a 20 20 20 20 20 20 20 20 22  ster ".        "
20f00 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d 65 20 4c  WHERE tbl_name L
20f10 49 4b 45 20 25 51 20 41 4e 44 20 74 79 70 65 3d  IKE %Q AND type=
20f20 3d 27 74 61 62 6c 65 27 22 0a 20 20 20 20 20 20  ='table'".      
20f30 20 20 22 20 20 41 4e 44 20 73 71 6c 20 4e 4f 54    "  AND sql NOT
20f40 20 4e 55 4c 4c 22 2c 20 7a 4c 69 6b 65 29 3b 0a   NULL", zLike);.
20f50 20 20 20 20 20 20 72 75 6e 5f 73 63 68 65 6d 61        run_schema
20f60 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 7a 53  _dump_query(p,zS
20f70 71 6c 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ql);.      sqlit
20f80 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
20f90 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69       zSql = sqli
20fa0 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20  te3_mprintf(.   
20fb0 20 20 20 20 20 22 53 45 4c 45 43 54 20 73 71 6c       "SELECT sql
20fc0 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
20fd0 74 65 72 20 22 0a 20 20 20 20 20 20 20 20 22 57  ter ".        "W
20fe0 48 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c  HERE sql NOT NUL
20ff0 4c 22 0a 20 20 20 20 20 20 20 20 22 20 20 41 4e  L".        "  AN
21000 44 20 74 79 70 65 20 49 4e 20 28 27 69 6e 64 65  D type IN ('inde
21010 78 27 2c 27 74 72 69 67 67 65 72 27 2c 27 76 69  x','trigger','vi
21020 65 77 27 29 22 0a 20 20 20 20 20 20 20 20 22 20  ew')".        " 
21030 20 41 4e 44 20 74 62 6c 5f 6e 61 6d 65 20 4c 49   AND tbl_name LI
21040 4b 45 20 25 51 22 2c 20 7a 4c 69 6b 65 29 3b 0a  KE %Q", zLike);.
21050 20 20 20 20 20 20 72 75 6e 5f 74 61 62 6c 65 5f        run_table_
21060 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 20 7a 53  dump_query(p, zS
21070 71 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  ql, 0);.      sq
21080 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29  lite3_free(zSql)
21090 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
210a0 70 2d 3e 77 72 69 74 61 62 6c 65 53 63 68 65 6d  p->writableSchem
210b0 61 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  a ){.      raw_p
210c0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 50  rintf(p->out, "P
210d0 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
210e0 63 68 65 6d 61 3d 4f 46 46 3b 5c 6e 22 29 3b 0a  chema=OFF;\n");.
210f0 20 20 20 20 20 20 70 2d 3e 77 72 69 74 61 62 6c        p->writabl
21100 65 53 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20 20  eSchema = 0;.   
21110 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65   }.    sqlite3_e
21120 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47  xec(p->db, "PRAG
21130 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
21140 6d 61 3d 4f 46 46 3b 22 2c 20 30 2c 20 30 2c 20  ma=OFF;", 0, 0, 
21150 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
21160 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 52 45 4c  exec(p->db, "REL
21170 45 41 53 45 20 64 75 6d 70 3b 22 2c 20 30 2c 20  EASE dump;", 0, 
21180 30 2c 20 30 29 3b 0a 20 20 20 20 72 61 77 5f 70  0, 0);.    raw_p
21190 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 70 2d  rintf(p->out, p-
211a0 3e 6e 45 72 72 20 3f 20 22 52 4f 4c 4c 42 41 43  >nErr ? "ROLLBAC
211b0 4b 3b 20 2d 2d 20 64 75 65 20 74 6f 20 65 72 72  K; -- due to err
211c0 6f 72 73 5c 6e 22 20 3a 20 22 43 4f 4d 4d 49 54  ors\n" : "COMMIT
211d0 3b 5c 6e 22 29 3b 0a 20 20 20 20 70 2d 3e 73 68  ;\n");.    p->sh
211e0 6f 77 48 65 61 64 65 72 20 3d 20 73 61 76 65 64  owHeader = saved
211f0 53 68 6f 77 48 65 61 64 65 72 3b 0a 20 20 7d 65  ShowHeader;.  }e
21200 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65  lse..  if( c=='e
21210 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
21220 72 67 5b 30 5d 2c 20 22 65 63 68 6f 22 2c 20 6e  rg[0], "echo", n
21230 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
21240 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
21250 20 73 65 74 4f 72 43 6c 65 61 72 46 6c 61 67 28   setOrClearFlag(
21260 70 2c 20 53 48 46 4c 47 5f 45 63 68 6f 2c 20 61  p, SHFLG_Echo, a
21270 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
21280 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
21290 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
212a0 73 61 67 65 3a 20 2e 65 63 68 6f 20 6f 6e 7c 6f  sage: .echo on|o
212b0 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  ff\n");.      rc
212c0 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 1;.    }.  }e
212d0 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65  lse..  if( c=='e
212e0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
212f0 72 67 5b 30 5d 2c 20 22 65 71 70 22 2c 20 6e 29  rg[0], "eqp", n)
21300 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
21310 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
21320 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67  if( strcmp(azArg
21330 5b 31 5d 2c 22 66 75 6c 6c 22 29 3d 3d 30 20 29  [1],"full")==0 )
21340 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 61 75 74  {.        p->aut
21350 6f 45 51 50 20 3d 20 32 3b 0a 20 20 20 20 20 20  oEQP = 2;.      
21360 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
21370 2d 3e 61 75 74 6f 45 51 50 20 3d 20 62 6f 6f 6c  ->autoEQP = bool
21380 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  eanValue(azArg[1
21390 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
213a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77  }else{.      raw
213b0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
213c0 22 55 73 61 67 65 3a 20 2e 65 71 70 20 6f 6e 7c  "Usage: .eqp on|
213d0 6f 66 66 7c 66 75 6c 6c 5c 6e 22 29 3b 0a 20 20  off|full\n");.  
213e0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
213f0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
21400 20 63 3d 3d 27 65 27 20 26 26 20 73 74 72 6e 63   c=='e' && strnc
21410 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 65 78  mp(azArg[0], "ex
21420 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  it", n)==0 ){.  
21430 20 20 69 66 28 20 6e 41 72 67 3e 31 20 26 26 20    if( nArg>1 && 
21440 28 72 63 20 3d 20 28 69 6e 74 29 69 6e 74 65 67  (rc = (int)integ
21450 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d  erValue(azArg[1]
21460 29 29 21 3d 30 20 29 20 65 78 69 74 28 72 63 29  ))!=0 ) exit(rc)
21470 3b 0a 20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20  ;.    rc = 2;.  
21480 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 54 68 65 20  }else..  /* The 
21490 22 2e 65 78 70 6c 61 69 6e 22 20 63 6f 6d 6d 61  ".explain" comma
214a0 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 20  nd is automatic 
214b0 6e 6f 77 2e 20 20 49 74 20 69 73 20 6c 61 72 67  now.  It is larg
214c0 65 6c 79 20 70 6f 69 6e 74 6c 65 73 73 2e 20 20  ely pointless.  
214d0 49 74 0a 20 20 2a 2a 20 72 65 74 61 69 6e 65 64  It.  ** retained
214e0 20 70 75 72 65 6c 79 20 66 6f 72 20 62 61 63 6b   purely for back
214f0 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
21500 69 74 79 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d  ity */.  if( c==
21510 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'e' && strncmp(a
21520 7a 41 72 67 5b 30 5d 2c 20 22 65 78 70 6c 61 69  zArg[0], "explai
21530 6e 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  n", n)==0 ){.   
21540 20 69 6e 74 20 76 61 6c 20 3d 20 31 3b 0a 20 20   int val = 1;.  
21550 20 20 69 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b    if( nArg>=2 ){
21560 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d  .      if( strcm
21570 70 28 61 7a 41 72 67 5b 31 5d 2c 22 61 75 74 6f  p(azArg[1],"auto
21580 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
21590 20 76 61 6c 20 3d 20 39 39 3b 0a 20 20 20 20 20   val = 99;.     
215a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
215b0 76 61 6c 20 3d 20 20 62 6f 6f 6c 65 61 6e 56 61  val =  booleanVa
215c0 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  lue(azArg[1]);. 
215d0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
215e0 20 69 66 28 20 76 61 6c 3d 3d 31 20 26 26 20 70   if( val==1 && p
215f0 2d 3e 6d 6f 64 65 21 3d 4d 4f 44 45 5f 45 78 70  ->mode!=MODE_Exp
21600 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 70 2d  lain ){.      p-
21610 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 20 3d 20 70 2d  >normalMode = p-
21620 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20 70 2d 3e  >mode;.      p->
21630 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 45 78 70 6c  mode = MODE_Expl
21640 61 69 6e 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75  ain;.      p->au
21650 74 6f 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20  toExplain = 0;. 
21660 20 20 20 7d 65 6c 73 65 20 69 66 28 20 76 61 6c     }else if( val
21670 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
21680 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45   p->mode==MODE_E
21690 78 70 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f 64 65  xplain ) p->mode
216a0 20 3d 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65   = p->normalMode
216b0 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45  ;.      p->autoE
216c0 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20 20  xplain = 0;.    
216d0 7d 65 6c 73 65 20 69 66 28 20 76 61 6c 3d 3d 39  }else if( val==9
216e0 39 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  9 ){.      if( p
216f0 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70  ->mode==MODE_Exp
21700 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f 64 65 20 3d  lain ) p->mode =
21710 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 0a   p->normalMode;.
21720 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45 78 70        p->autoExp
21730 6c 61 69 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  lain = 1;.    }.
21740 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
21750 3d 3d 27 66 27 20 26 26 20 73 74 72 6e 63 6d 70  =='f' && strncmp
21760 28 61 7a 41 72 67 5b 30 5d 2c 20 22 66 75 6c 6c  (azArg[0], "full
21770 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d 30 20 29  schema", n)==0 )
21780 7b 0a 20 20 20 20 53 68 65 6c 6c 53 74 61 74 65  {.    ShellState
21790 20 64 61 74 61 3b 0a 20 20 20 20 63 68 61 72 20   data;.    char 
217a0 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  *zErrMsg = 0;.  
217b0 20 20 69 6e 74 20 64 6f 53 74 61 74 73 20 3d 20    int doStats = 
217c0 30 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 64  0;.    memcpy(&d
217d0 61 74 61 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64  ata, p, sizeof(d
217e0 61 74 61 29 29 3b 0a 20 20 20 20 64 61 74 61 2e  ata));.    data.
217f0 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a  showHeader = 0;.
21800 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d      data.cMode =
21810 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44   data.mode = MOD
21820 45 5f 53 65 6d 69 3b 0a 20 20 20 20 69 66 28 20  E_Semi;.    if( 
21830 6e 41 72 67 3d 3d 32 20 26 26 20 6f 70 74 69 6f  nArg==2 && optio
21840 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b 31 5d 2c  nMatch(azArg[1],
21850 20 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20 20   "indent") ){.  
21860 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d      data.cMode =
21870 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44   data.mode = MOD
21880 45 5f 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20  E_Pretty;.      
21890 6e 41 72 67 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  nArg = 1;.    }.
218a0 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 31 20      if( nArg!=1 
218b0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
218c0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
218d0 67 65 3a 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20  ge: .fullschema 
218e0 3f 2d 2d 69 6e 64 65 6e 74 3f 5c 6e 22 29 3b 0a  ?--indent?\n");.
218f0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
21900 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
21910 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
21920 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  }.    open_db(p,
21930 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   0);.    rc = sq
21940 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
21950 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
21960 20 73 71 6c 20 46 52 4f 4d 22 0a 20 20 20 20 20   sql FROM".     
21970 20 20 22 20 20 28 53 45 4c 45 43 54 20 73 71 6c    "  (SELECT sql
21980 20 73 71 6c 2c 20 74 79 70 65 20 74 79 70 65 2c   sql, type type,
21990 20 74 62 6c 5f 6e 61 6d 65 20 74 62 6c 5f 6e 61   tbl_name tbl_na
219a0 6d 65 2c 20 6e 61 6d 65 20 6e 61 6d 65 2c 20 72  me, name name, r
219b0 6f 77 69 64 20 78 22 0a 20 20 20 20 20 20 20 22  owid x".       "
219c0 20 20 20 20 20 46 52 4f 4d 20 73 71 6c 69 74 65       FROM sqlite
219d0 5f 6d 61 73 74 65 72 20 55 4e 49 4f 4e 20 41 4c  _master UNION AL
219e0 4c 22 0a 20 20 20 20 20 20 20 22 20 20 20 53 45  L".       "   SE
219f0 4c 45 43 54 20 73 71 6c 2c 20 74 79 70 65 2c 20  LECT sql, type, 
21a00 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20  tbl_name, name, 
21a10 72 6f 77 69 64 20 46 52 4f 4d 20 73 71 6c 69 74  rowid FROM sqlit
21a20 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 22  e_temp_master) "
21a30 0a 20 20 20 20 20 20 20 22 57 48 45 52 45 20 74  .       "WHERE t
21a40 79 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20  ype!='meta' AND 
21a50 73 71 6c 20 4e 4f 54 4e 55 4c 4c 20 41 4e 44 20  sql NOTNULL AND 
21a60 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73  name NOT LIKE 's
21a70 71 6c 69 74 65 5f 25 27 20 22 0a 20 20 20 20 20  qlite_%' ".     
21a80 20 20 22 4f 52 44 45 52 20 42 59 20 72 6f 77 69    "ORDER BY rowi
21a90 64 22 2c 0a 20 20 20 20 20 20 20 63 61 6c 6c 62  d",.       callb
21aa0 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72  ack, &data, &zEr
21ab0 72 4d 73 67 0a 20 20 20 20 29 3b 0a 20 20 20 20  rMsg.    );.    
21ac0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
21ad0 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  K ){.      sqlit
21ae0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
21af0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
21b00 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
21b10 3e 64 62 2c 0a 20 20 20 20 20 20 20 20 20 20 20  >db,.           
21b20 20 20 20 20 22 53 45 4c 45 43 54 20 72 6f 77 69      "SELECT rowi
21b30 64 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  d FROM sqlite_ma
21b40 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20  ster".          
21b50 20 20 20 20 20 22 20 57 48 45 52 45 20 6e 61 6d       " WHERE nam
21b60 65 20 47 4c 4f 42 20 27 73 71 6c 69 74 65 5f 73  e GLOB 'sqlite_s
21b70 74 61 74 5b 31 33 34 5d 27 22 2c 0a 20 20 20 20  tat[134]'",.    
21b80 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26             -1, &
21b90 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20  pStmt, 0);.     
21ba0 20 64 6f 53 74 61 74 73 20 3d 20 73 71 6c 69 74   doStats = sqlit
21bb0 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d  e3_step(pStmt)==
21bc0 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 20 20  SQLITE_ROW;.    
21bd0 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
21be0 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 7d  ze(pStmt);.    }
21bf0 0a 20 20 20 20 69 66 28 20 64 6f 53 74 61 74 73  .    if( doStats
21c00 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77  ==0 ){.      raw
21c10 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
21c20 22 2f 2a 20 4e 6f 20 53 54 41 54 20 74 61 62 6c  "/* No STAT tabl
21c30 65 73 20 61 76 61 69 6c 61 62 6c 65 20 2a 2f 5c  es available */\
21c40 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  n");.    }else{.
21c50 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
21c60 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a  (p->out, "ANALYZ
21c70 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  E sqlite_master;
21c80 5c 6e 22 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  \n");.      sqli
21c90 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
21ca0 22 53 45 4c 45 43 54 20 27 41 4e 41 4c 59 5a 45  "SELECT 'ANALYZE
21cb0 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 27 22   sqlite_master'"
21cc0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21cd0 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26       callback, &
21ce0 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b  data, &zErrMsg);
21cf0 0a 20 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64  .      data.cMod
21d00 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20  e = data.mode = 
21d10 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20  MODE_Insert;.   
21d20 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62     data.zDestTab
21d30 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61  le = "sqlite_sta
21d40 74 31 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c  t1";.      shell
21d50 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45  _exec(p->db, "SE
21d60 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
21d70 74 65 5f 73 74 61 74 31 22 2c 0a 20 20 20 20 20  te_stat1",.     
21d80 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65 6c              shel
21d90 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  l_callback, &dat
21da0 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  a,&zErrMsg);.   
21db0 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62     data.zDestTab
21dc0 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61  le = "sqlite_sta
21dd0 74 33 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c  t3";.      shell
21de0 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45  _exec(p->db, "SE
21df0 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
21e00 74 65 5f 73 74 61 74 33 22 2c 0a 20 20 20 20 20  te_stat3",.     
21e10 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65 6c              shel
21e20 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  l_callback, &dat
21e30 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  a,&zErrMsg);.   
21e40 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62     data.zDestTab
21e50 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61  le = "sqlite_sta
21e60 74 34 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c  t4";.      shell
21e70 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45  _exec(p->db, "SE
21e80 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
21e90 74 65 5f 73 74 61 74 34 22 2c 0a 20 20 20 20 20  te_stat4",.     
21ea0 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65 6c              shel
21eb0 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  l_callback, &dat
21ec0 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  a, &zErrMsg);.  
21ed0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
21ee0 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20  ->out, "ANALYZE 
21ef0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e  sqlite_master;\n
21f00 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ");.    }.  }els
21f10 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 68 27 20  e..  if( c=='h' 
21f20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
21f30 5b 30 5d 2c 20 22 68 65 61 64 65 72 73 22 2c 20  [0], "headers", 
21f40 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
21f50 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
21f60 20 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20    p->showHeader 
21f70 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61  = booleanValue(a
21f80 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
21f90 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
21fa0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
21fb0 73 61 67 65 3a 20 2e 68 65 61 64 65 72 73 20 6f  sage: .headers o
21fc0 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20  n|off\n");.     
21fd0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
21fe0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
21ff0 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='h' && strncmp(
22000 61 7a 41 72 67 5b 30 5d 2c 20 22 68 65 6c 70 22  azArg[0], "help"
22010 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75  , n)==0 ){.    u
22020 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
22030 74 2c 20 22 25 73 22 2c 20 7a 48 65 6c 70 29 3b  t, "%s", zHelp);
22040 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
22050 63 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d  c=='i' && strncm
22060 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d 70  p(azArg[0], "imp
22070 6f 72 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ort", n)==0 ){. 
22080 20 20 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 3b     char *zTable;
22090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
220a0 2a 20 49 6e 73 65 72 74 20 64 61 74 61 20 69 6e  * Insert data in
220b0 74 6f 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  to this table */
220c0 0a 20 20 20 20 63 68 61 72 20 2a 7a 46 69 6c 65  .    char *zFile
220d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
220e0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 66 69 6c 65   /* Name of file
220f0 20 74 6f 20 65 78 74 72 61 20 63 6f 6e 74 65 6e   to extra conten
22100 74 20 66 72 6f 6d 20 2a 2f 0a 20 20 20 20 73 71  t from */.    sq
22110 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
22120 74 20 3d 20 4e 55 4c 4c 3b 20 2f 2a 20 41 20 73  t = NULL; /* A s
22130 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20 20  tatement */.    
22140 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  int nCol;       
22150 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
22160 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
22170 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   in the table */
22180 0a 20 20 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  .    int nByte; 
22190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
221b0 74 65 73 20 69 6e 20 61 6e 20 53 51 4c 20 73 74  tes in an SQL st
221c0 72 69 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ring */.    int 
221d0 69 2c 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20  i, j;           
221e0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
221f0 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20  counters */.    
22200 69 6e 74 20 6e 65 65 64 43 6f 6d 6d 69 74 3b 20  int needCommit; 
22210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22220 72 75 65 20 74 6f 20 43 4f 4d 4d 49 54 20 6f 72  rue to COMMIT or
22230 20 52 4f 4c 4c 42 41 43 4b 20 61 74 20 65 6e 64   ROLLBACK at end
22240 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 53 65 70   */.    int nSep
22250 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22260 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
22270 20 62 79 74 65 73 20 69 6e 20 70 2d 3e 63 6f 6c   bytes in p->col
22280 53 65 70 61 72 61 74 6f 72 5b 5d 20 2a 2f 0a 20  Separator[] */. 
22290 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20     char *zSql;  
222a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
222b0 2a 20 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  * An SQL stateme
222c0 6e 74 20 2a 2f 0a 20 20 20 20 49 6d 70 6f 72 74  nt */.    Import
222d0 43 74 78 20 73 43 74 78 3b 20 20 20 20 20 20 20  Ctx sCtx;       
222e0 20 20 20 20 20 20 2f 2a 20 52 65 61 64 65 72 20        /* Reader 
222f0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 63  context */.    c
22300 68 61 72 20 2a 28 53 51 4c 49 54 45 5f 43 44 45  har *(SQLITE_CDE
22310 43 4c 20 2a 78 52 65 61 64 29 28 49 6d 70 6f 72  CL *xRead)(Impor
22320 74 43 74 78 2a 29 3b 20 2f 2a 20 46 75 6e 63 20  tCtx*); /* Func 
22330 74 6f 20 72 65 61 64 20 6f 6e 65 20 76 61 6c 75  to read one valu
22340 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 28 53 51  e */.    int (SQ
22350 4c 49 54 45 5f 43 44 45 43 4c 20 2a 78 43 6c 6f  LITE_CDECL *xClo
22360 73 65 72 29 28 46 49 4c 45 2a 29 3b 20 20 20 20  ser)(FILE*);    
22370 20 20 2f 2a 20 46 75 6e 63 20 74 6f 20 63 6c 6f    /* Func to clo
22380 73 65 20 66 69 6c 65 20 2a 2f 0a 0a 20 20 20 20  se file */..    
22390 69 66 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20  if( nArg!=3 ){. 
223a0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
223b0 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
223c0 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42  .import FILE TAB
223d0 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20 20 67 6f  LE\n");.      go
223e0 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
223f0 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  exit;.    }.    
22400 7a 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d  zFile = azArg[1]
22410 3b 0a 20 20 20 20 7a 54 61 62 6c 65 20 3d 20 61  ;.    zTable = a
22420 7a 41 72 67 5b 32 5d 3b 0a 20 20 20 20 73 65 65  zArg[2];.    see
22430 6e 49 6e 74 65 72 72 75 70 74 20 3d 20 30 3b 0a  nInterrupt = 0;.
22440 20 20 20 20 6d 65 6d 73 65 74 28 26 73 43 74 78      memset(&sCtx
22450 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 74 78  , 0, sizeof(sCtx
22460 29 29 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28  ));.    open_db(
22470 70 2c 20 30 29 3b 0a 20 20 20 20 6e 53 65 70 20  p, 0);.    nSep 
22480 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 63 6f  = strlen30(p->co
22490 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  lSeparator);.   
224a0 20 69 66 28 20 6e 53 65 70 3d 3d 30 20 29 7b 0a   if( nSep==0 ){.
224b0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
224c0 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20 20 20  (stderr,.       
224d0 20 20 20 20 20 20 20 20 20 20 22 45 72 72 6f 72            "Error
224e0 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 63 6f 6c 75 6d  : non-null colum
224f0 6e 20 73 65 70 61 72 61 74 6f 72 20 72 65 71 75  n separator requ
22500 69 72 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c  ired for import\
22510 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
22520 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  n 1;.    }.    i
22530 66 28 20 6e 53 65 70 3e 31 20 29 7b 0a 20 20 20  f( nSep>1 ){.   
22540 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
22550 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 75  derr, "Error: mu
22560 6c 74 69 2d 63 68 61 72 61 63 74 65 72 20 63 6f  lti-character co
22570 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 73 20  lumn separators 
22580 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20 20  not allowed".   
22590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225a0 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72 74 5c     " for import\
225b0 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
225c0 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  n 1;.    }.    n
225d0 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70  Sep = strlen30(p
225e0 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
225f0 0a 20 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30  .    if( nSep==0
22600 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
22610 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
22620 72 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 72 6f  ror: non-null ro
22630 77 20 73 65 70 61 72 61 74 6f 72 20 72 65 71 75  w separator requ
22640 69 72 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c  ired for import\
22650 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
22660 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  n 1;.    }.    i
22670 66 28 20 6e 53 65 70 3d 3d 32 20 26 26 20 70 2d  f( nSep==2 && p-
22680 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 43 73 76 20  >mode==MODE_Csv 
22690 26 26 20 73 74 72 63 6d 70 28 70 2d 3e 72 6f 77  && strcmp(p->row
226a0 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43  Separator, SEP_C
226b0 72 4c 66 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  rLf)==0 ){.     
226c0 20 2f 2a 20 57 68 65 6e 20 69 6d 70 6f 72 74 69   /* When importi
226d0 6e 67 20 43 53 56 20 28 6f 6e 6c 79 29 2c 20 69  ng CSV (only), i
226e0 66 20 74 68 65 20 72 6f 77 20 73 65 70 61 72 61  f the row separa
226f0 74 6f 72 20 69 73 20 73 65 74 20 74 6f 20 74 68  tor is set to th
22700 65 0a 20 20 20 20 20 20 2a 2a 20 64 65 66 61 75  e.      ** defau
22710 6c 74 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65  lt output row se
22720 70 61 72 61 74 6f 72 2c 20 63 68 61 6e 67 65 20  parator, change 
22730 69 74 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  it to the defaul
22740 74 20 69 6e 70 75 74 0a 20 20 20 20 20 20 2a 2a  t input.      **
22750 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20   row separator. 
22760 20 54 68 69 73 20 61 76 6f 69 64 73 20 68 61 76   This avoids hav
22770 69 6e 67 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  ing to maintain 
22780 64 69 66 66 65 72 65 6e 74 20 69 6e 70 75 74 0a  different input.
22790 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 6f 75 74        ** and out
227a0 70 75 74 20 72 6f 77 20 73 65 70 61 72 61 74 6f  put row separato
227b0 72 73 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  rs. */.      sql
227c0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
227d0 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72  zeof(p->rowSepar
227e0 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70  ator), p->rowSep
227f0 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29  arator, SEP_Row)
22800 3b 0a 20 20 20 20 20 20 6e 53 65 70 20 3d 20 73  ;.      nSep = s
22810 74 72 6c 65 6e 33 30 28 70 2d 3e 72 6f 77 53 65  trlen30(p->rowSe
22820 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 7d 0a  parator);.    }.
22830 20 20 20 20 69 66 28 20 6e 53 65 70 3e 31 20 29      if( nSep>1 )
22840 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
22850 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
22860 72 3a 20 6d 75 6c 74 69 2d 63 68 61 72 61 63 74  r: multi-charact
22870 65 72 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72  er row separator
22880 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20  s not allowed". 
22890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228a0 20 20 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72       " for impor
228b0 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  t\n");.      ret
228c0 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
228d0 20 73 43 74 78 2e 7a 46 69 6c 65 20 3d 20 7a 46   sCtx.zFile = zF
228e0 69 6c 65 3b 0a 20 20 20 20 73 43 74 78 2e 6e 4c  ile;.    sCtx.nL
228f0 69 6e 65 20 3d 20 31 3b 0a 20 20 20 20 69 66 28  ine = 1;.    if(
22900 20 73 43 74 78 2e 7a 46 69 6c 65 5b 30 5d 3d 3d   sCtx.zFile[0]==
22910 27 7c 27 20 29 7b 0a 23 69 66 64 65 66 20 53 51  '|' ){.#ifdef SQ
22920 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a  LITE_OMIT_POPEN.
22930 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
22940 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
22950 20 70 69 70 65 73 20 61 72 65 20 6e 6f 74 20 73   pipes are not s
22960 75 70 70 6f 72 74 65 64 20 69 6e 20 74 68 69 73  upported in this
22970 20 4f 53 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72   OS\n");.      r
22980 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20  eturn 1;.#else. 
22990 20 20 20 20 20 73 43 74 78 2e 69 6e 20 3d 20 70       sCtx.in = p
229a0 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65 2b  open(sCtx.zFile+
229b0 31 2c 20 22 72 22 29 3b 0a 20 20 20 20 20 20 73  1, "r");.      s
229c0 43 74 78 2e 7a 46 69 6c 65 20 3d 20 22 3c 70 69  Ctx.zFile = "<pi
229d0 70 65 3e 22 3b 0a 20 20 20 20 20 20 78 43 6c 6f  pe>";.      xClo
229e0 73 65 72 20 3d 20 70 63 6c 6f 73 65 3b 0a 23 65  ser = pclose;.#e
229f0 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ndif.    }else{.
22a00 20 20 20 20 20 20 73 43 74 78 2e 69 6e 20 3d 20        sCtx.in = 
22a10 66 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65  fopen(sCtx.zFile
22a20 2c 20 22 72 62 22 29 3b 0a 20 20 20 20 20 20 78  , "rb");.      x
22a30 43 6c 6f 73 65 72 20 3d 20 66 63 6c 6f 73 65 3b  Closer = fclose;
22a40 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
22a50 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 41 73 63  ->mode==MODE_Asc
22a60 69 69 20 29 7b 0a 20 20 20 20 20 20 78 52 65 61  ii ){.      xRea
22a70 64 20 3d 20 61 73 63 69 69 5f 72 65 61 64 5f 6f  d = ascii_read_o
22a80 6e 65 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d 65  ne_field;.    }e
22a90 6c 73 65 7b 0a 20 20 20 20 20 20 78 52 65 61 64  lse{.      xRead
22aa0 20 3d 20 63 73 76 5f 72 65 61 64 5f 6f 6e 65 5f   = csv_read_one_
22ab0 66 69 65 6c 64 3b 0a 20 20 20 20 7d 0a 20 20 20  field;.    }.   
22ac0 20 69 66 28 20 73 43 74 78 2e 69 6e 3d 3d 30 20   if( sCtx.in==0 
22ad0 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
22ae0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
22af0 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
22b00 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c   \"%s\"\n", zFil
22b10 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  e);.      return
22b20 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 43   1;.    }.    sC
22b30 74 78 2e 63 43 6f 6c 53 65 70 20 3d 20 70 2d 3e  tx.cColSep = p->
22b40 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 3b  colSeparator[0];
22b50 0a 20 20 20 20 73 43 74 78 2e 63 52 6f 77 53 65  .    sCtx.cRowSe
22b60 70 20 3d 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  p = p->rowSepara
22b70 74 6f 72 5b 30 5d 3b 0a 20 20 20 20 7a 53 71 6c  tor[0];.    zSql
22b80 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
22b90 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  tf("SELECT * FRO
22ba0 4d 20 25 73 22 2c 20 7a 54 61 62 6c 65 29 3b 0a  M %s", zTable);.
22bb0 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20      if( zSql==0 
22bc0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
22bd0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
22be0 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  or: out of memor
22bf0 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 78 43 6c  y\n");.      xCl
22c00 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
22c10 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
22c20 20 20 20 7d 0a 20 20 20 20 6e 42 79 74 65 20 3d     }.    nByte =
22c30 20 73 74 72 6c 65 6e 33 30 28 7a 53 71 6c 29 3b   strlen30(zSql);
22c40 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
22c50 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e  3_prepare_v2(p->
22c60 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70  db, zSql, -1, &p
22c70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6d  Stmt, 0);.    im
22c80 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72  port_append_char
22c90 28 26 73 43 74 78 2c 20 30 29 3b 20 20 20 20 2f  (&sCtx, 0);    /
22ca0 2a 20 54 6f 20 65 6e 73 75 72 65 20 73 43 74 78  * To ensure sCtx
22cb0 2e 7a 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  .z is allocated 
22cc0 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 20 26 26  */.    if( rc &&
22cd0 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62   sqlite3_strglob
22ce0 28 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a  ("no such table:
22cf0 20 2a 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72   *", sqlite3_err
22d00 6d 73 67 28 70 2d 3e 64 62 29 29 3d 3d 30 20 29  msg(p->db))==0 )
22d10 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43  {.      char *zC
22d20 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f  reate = sqlite3_
22d30 6d 70 72 69 6e 74 66 28 22 43 52 45 41 54 45 20  mprintf("CREATE 
22d40 54 41 42 4c 45 20 25 73 22 2c 20 7a 54 61 62 6c  TABLE %s", zTabl
22d50 65 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 63  e);.      char c
22d60 53 65 70 20 3d 20 27 28 27 3b 0a 20 20 20 20 20  Sep = '(';.     
22d70 20 77 68 69 6c 65 28 20 78 52 65 61 64 28 26 73   while( xRead(&s
22d80 43 74 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Ctx) ){.        
22d90 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65  zCreate = sqlite
22da0 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 25 63 5c  3_mprintf("%z%c\
22db0 6e 20 20 5c 22 25 77 5c 22 20 54 45 58 54 22 2c  n  \"%w\" TEXT",
22dc0 20 7a 43 72 65 61 74 65 2c 20 63 53 65 70 2c 20   zCreate, cSep, 
22dd0 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20  sCtx.z);.       
22de0 20 63 53 65 70 20 3d 20 27 2c 27 3b 0a 20 20 20   cSep = ',';.   
22df0 20 20 20 20 20 69 66 28 20 73 43 74 78 2e 63 54       if( sCtx.cT
22e00 65 72 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65  erm!=sCtx.cColSe
22e10 70 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  p ) break;.     
22e20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 53 65   }.      if( cSe
22e30 70 3d 3d 27 28 27 20 29 7b 0a 20 20 20 20 20 20  p=='(' ){.      
22e40 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
22e50 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20 20  Create);.       
22e60 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43   sqlite3_free(sC
22e70 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 78  tx.z);.        x
22e80 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b  Closer(sCtx.in);
22e90 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
22ea0 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25 73 3a  intf(stderr,"%s:
22eb0 20 65 6d 70 74 79 20 66 69 6c 65 5c 6e 22 2c 20   empty file\n", 
22ec0 73 43 74 78 2e 7a 46 69 6c 65 29 3b 0a 20 20 20  sCtx.zFile);.   
22ed0 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
22ee0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 43 72       }.      zCr
22ef0 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d  eate = sqlite3_m
22f00 70 72 69 6e 74 66 28 22 25 7a 5c 6e 29 22 2c 20  printf("%z\n)", 
22f10 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20  zCreate);.      
22f20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
22f30 63 28 70 2d 3e 64 62 2c 20 7a 43 72 65 61 74 65  c(p->db, zCreate
22f40 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
22f50 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
22f60 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20 69  Create);.      i
22f70 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
22f80 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
22f90 65 72 72 2c 20 22 43 52 45 41 54 45 20 54 41 42  err, "CREATE TAB
22fa0 4c 45 20 25 73 28 2e 2e 2e 29 20 66 61 69 6c 65  LE %s(...) faile
22fb0 64 3a 20 25 73 5c 6e 22 2c 20 7a 54 61 62 6c 65  d: %s\n", zTable
22fc0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
22fd0 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
22fe0 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20  (p->db));.      
22ff0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73    sqlite3_free(s
23000 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20  Ctx.z);.        
23010 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29  xCloser(sCtx.in)
23020 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
23030 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
23040 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
23050 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
23060 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d   zSql, -1, &pStm
23070 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  t, 0);.    }.   
23080 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
23090 71 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  ql);.    if( rc 
230a0 29 7b 0a 20 20 20 20 20 20 69 66 20 28 70 53 74  ){.      if (pSt
230b0 6d 74 29 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  mt) sqlite3_fina
230c0 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
230d0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
230e0 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 25 73  tderr,"Error: %s
230f0 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  \n", sqlite3_err
23100 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  msg(p->db));.   
23110 20 20 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e     xCloser(sCtx.
23120 69 6e 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  in);.      retur
23130 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  n 1;.    }.    n
23140 43 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  Col = sqlite3_co
23150 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74  lumn_count(pStmt
23160 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  );.    sqlite3_f
23170 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
23180 20 20 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20      pStmt = 0;. 
23190 20 20 20 69 66 28 20 6e 43 6f 6c 3d 3d 30 20 29     if( nCol==0 )
231a0 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a 20 6e 6f   return 0; /* no
231b0 20 63 6f 6c 75 6d 6e 73 2c 20 6e 6f 20 65 72 72   columns, no err
231c0 6f 72 20 2a 2f 0a 20 20 20 20 7a 53 71 6c 20 3d  or */.    zSql =
231d0 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36   sqlite3_malloc6
231e0 34 28 20 6e 42 79 74 65 2a 32 20 2b 20 32 30 20  4( nByte*2 + 20 
231f0 2b 20 6e 43 6f 6c 2a 32 20 29 3b 0a 20 20 20 20  + nCol*2 );.    
23200 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
23210 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
23220 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
23230 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22  out of memory\n"
23240 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72  );.      xCloser
23250 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20  (sCtx.in);.     
23260 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
23270 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
23280 72 69 6e 74 66 28 6e 42 79 74 65 2b 32 30 2c 20  rintf(nByte+20, 
23290 7a 53 71 6c 2c 20 22 49 4e 53 45 52 54 20 49 4e  zSql, "INSERT IN
232a0 54 4f 20 5c 22 25 77 5c 22 20 56 41 4c 55 45 53  TO \"%w\" VALUES
232b0 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  (?", zTable);.  
232c0 20 20 6a 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a    j = strlen30(z
232d0 53 71 6c 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Sql);.    for(i=
232e0 31 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b  1; i<nCol; i++){
232f0 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d  .      zSql[j++]
23300 20 3d 20 27 2c 27 3b 0a 20 20 20 20 20 20 7a 53   = ',';.      zS
23310 71 6c 5b 6a 2b 2b 5d 20 3d 20 27 3f 27 3b 0a 20  ql[j++] = '?';. 
23320 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 5b 6a 2b     }.    zSql[j+
23330 2b 5d 20 3d 20 27 29 27 3b 0a 20 20 20 20 7a 53  +] = ')';.    zS
23340 71 6c 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 72  ql[j] = 0;.    r
23350 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
23360 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53  are_v2(p->db, zS
23370 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  ql, -1, &pStmt, 
23380 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
23390 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20  free(zSql);.    
233a0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
233b0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
233c0 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e  rr, "Error: %s\n
233d0 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
233e0 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
233f0 20 69 66 20 28 70 53 74 6d 74 29 20 73 71 6c 69   if (pStmt) sqli
23400 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
23410 6d 74 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73  mt);.      xClos
23420 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
23430 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
23440 20 7d 0a 20 20 20 20 6e 65 65 64 43 6f 6d 6d 69   }.    needCommi
23450 74 20 3d 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  t = sqlite3_get_
23460 61 75 74 6f 63 6f 6d 6d 69 74 28 70 2d 3e 64 62  autocommit(p->db
23470 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 65 64 43  );.    if( needC
23480 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74 65 33 5f  ommit ) sqlite3_
23490 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 42 45 47  exec(p->db, "BEG
234a0 49 4e 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  IN", 0, 0, 0);. 
234b0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 69 6e 74     do{.      int
234c0 20 73 74 61 72 74 4c 69 6e 65 20 3d 20 73 43 74   startLine = sCt
234d0 78 2e 6e 4c 69 6e 65 3b 0a 20 20 20 20 20 20 66  x.nLine;.      f
234e0 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20  or(i=0; i<nCol; 
234f0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68  i++){.        ch
23500 61 72 20 2a 7a 20 3d 20 78 52 65 61 64 28 26 73  ar *z = xRead(&s
23510 43 74 78 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a  Ctx);.        /*
23520 0a 20 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20  .        ** Did 
23530 77 65 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d  we reach end-of-
23540 66 69 6c 65 20 62 65 66 6f 72 65 20 66 69 6e 64  file before find
23550 69 6e 67 20 61 6e 79 20 63 6f 6c 75 6d 6e 73 3f  ing any columns?
23560 0a 20 20 20 20 20 20 20 20 2a 2a 20 49 66 20 73  .        ** If s
23570 6f 2c 20 73 74 6f 70 20 69 6e 73 74 65 61 64 20  o, stop instead 
23580 6f 66 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 20  of NULL filling 
23590 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f  the remaining co
235a0 6c 75 6d 6e 73 2e 0a 20 20 20 20 20 20 20 20 2a  lumns..        *
235b0 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 3d  /.        if( z=
235c0 3d 30 20 26 26 20 69 3d 3d 30 20 29 20 62 72 65  =0 && i==0 ) bre
235d0 61 6b 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20  ak;.        /*. 
235e0 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20 77 65         ** Did we
235f0 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d 66 69   reach end-of-fi
23600 6c 65 20 4f 52 20 65 6e 64 2d 6f 66 2d 6c 69 6e  le OR end-of-lin
23610 65 20 62 65 66 6f 72 65 20 66 69 6e 64 69 6e 67  e before finding
23620 20 61 6e 79 0a 20 20 20 20 20 20 20 20 2a 2a 20   any.        ** 
23630 63 6f 6c 75 6d 6e 73 20 69 6e 20 41 53 43 49 49  columns in ASCII
23640 20 6d 6f 64 65 3f 20 20 49 66 20 73 6f 2c 20 73   mode?  If so, s
23650 74 6f 70 20 69 6e 73 74 65 61 64 20 6f 66 20 4e  top instead of N
23660 55 4c 4c 20 66 69 6c 6c 69 6e 67 0a 20 20 20 20  ULL filling.    
23670 20 20 20 20 2a 2a 20 74 68 65 20 72 65 6d 61 69      ** the remai
23680 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 20 20  ning columns..  
23690 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
236a0 20 69 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f   if( p->mode==MO
236b0 44 45 5f 41 73 63 69 69 20 26 26 20 28 7a 3d 3d  DE_Ascii && (z==
236c0 30 20 7c 7c 20 7a 5b 30 5d 3d 3d 30 29 20 26 26  0 || z[0]==0) &&
236d0 20 69 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20   i==0 ) break;. 
236e0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62         sqlite3_b
236f0 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  ind_text(pStmt, 
23700 69 2b 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  i+1, z, -1, SQLI
23710 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
23720 20 20 20 20 20 20 20 69 66 28 20 69 3c 6e 43 6f         if( i<nCo
23730 6c 2d 31 20 26 26 20 73 43 74 78 2e 63 54 65 72  l-1 && sCtx.cTer
23740 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20  m!=sCtx.cColSep 
23750 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
23760 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
23770 20 22 25 73 3a 25 64 3a 20 65 78 70 65 63 74 65   "%s:%d: expecte
23780 64 20 25 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74  d %d columns but
23790 20 66 6f 75 6e 64 20 25 64 20 2d 20 22 0a 20 20   found %d - ".  
237a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237b0 20 20 20 20 20 20 20 20 22 66 69 6c 6c 69 6e 67          "filling
237c0 20 74 68 65 20 72 65 73 74 20 77 69 74 68 20 4e   the rest with N
237d0 55 4c 4c 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  ULL\n",.        
237e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237f0 20 20 73 43 74 78 2e 7a 46 69 6c 65 2c 20 73 74    sCtx.zFile, st
23800 61 72 74 4c 69 6e 65 2c 20 6e 43 6f 6c 2c 20 69  artLine, nCol, i
23810 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  +1);.          i
23820 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 20   += 2;.         
23830 20 77 68 69 6c 65 28 20 69 3c 3d 6e 43 6f 6c 20   while( i<=nCol 
23840 29 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ){ sqlite3_bind_
23850 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b 20  null(pStmt, i); 
23860 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d  i++; }.        }
23870 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
23880 66 28 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73  f( sCtx.cTerm==s
23890 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 7b 0a 20  Ctx.cColSep ){. 
238a0 20 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20         do{.     
238b0 20 20 20 20 20 78 52 65 61 64 28 26 73 43 74 78       xRead(&sCtx
238c0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 2b 2b  );.          i++
238d0 3b 0a 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65  ;.        }while
238e0 28 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73 43  ( sCtx.cTerm==sC
238f0 74 78 2e 63 43 6f 6c 53 65 70 20 29 3b 0a 20 20  tx.cColSep );.  
23900 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
23910 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64  f(stderr, "%s:%d
23920 3a 20 65 78 70 65 63 74 65 64 20 25 64 20 63 6f  : expected %d co
23930 6c 75 6d 6e 73 20 62 75 74 20 66 6f 75 6e 64 20  lumns but found 
23940 25 64 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20  %d - ".         
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23960 65 78 74 72 61 73 20 69 67 6e 6f 72 65 64 5c 6e  extras ignored\n
23970 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
23980 20 20 20 20 20 20 20 20 20 20 20 73 43 74 78 2e             sCtx.
23990 7a 46 69 6c 65 2c 20 73 74 61 72 74 4c 69 6e 65  zFile, startLine
239a0 2c 20 6e 43 6f 6c 2c 20 69 29 3b 0a 20 20 20 20  , nCol, i);.    
239b0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 69 3e    }.      if( i>
239c0 3d 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20 20  =nCol ){.       
239d0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
239e0 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 72 63  tmt);.        rc
239f0 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74   = sqlite3_reset
23a00 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20  (pStmt);.       
23a10 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
23a20 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
23a30 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
23a40 72 72 2c 20 22 25 73 3a 25 64 3a 20 49 4e 53 45  rr, "%s:%d: INSE
23a50 52 54 20 66 61 69 6c 65 64 3a 20 25 73 5c 6e 22  RT failed: %s\n"
23a60 2c 20 73 43 74 78 2e 7a 46 69 6c 65 2c 0a 20 20  , sCtx.zFile,.  
23a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a80 20 20 20 20 73 74 61 72 74 4c 69 6e 65 2c 20 73      startLine, s
23a90 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d  qlite3_errmsg(p-
23aa0 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20 20 7d  >db));.        }
23ab0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 77 68  .      }.    }wh
23ac0 69 6c 65 28 20 73 43 74 78 2e 63 54 65 72 6d 21  ile( sCtx.cTerm!
23ad0 3d 45 4f 46 20 29 3b 0a 0a 20 20 20 20 78 43 6c  =EOF );..    xCl
23ae0 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
23af0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
23b00 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 73 71 6c  sCtx.z);.    sql
23b10 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
23b20 74 6d 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65  tmt);.    if( ne
23b30 65 64 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74  edCommit ) sqlit
23b40 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22  e3_exec(p->db, "
23b50 43 4f 4d 4d 49 54 22 2c 20 30 2c 20 30 2c 20 30  COMMIT", 0, 0, 0
23b60 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e  );.  }else..#ifn
23b70 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
23b80 54 41 42 4c 45 0a 20 20 69 66 28 20 63 3d 3d 27  TABLE.  if( c=='
23b90 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  i' && strncmp(az
23ba0 41 72 67 5b 30 5d 2c 20 22 69 6d 70 6f 73 74 65  Arg[0], "imposte
23bb0 72 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  r", n)==0 ){.   
23bc0 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20   char *zSql;.   
23bd0 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 69 73 74 20   char *zCollist 
23be0 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
23bf0 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
23c00 20 20 69 6e 74 20 74 6e 75 6d 20 3d 20 30 3b 0a    int tnum = 0;.
23c10 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69      int i;.    i
23c20 66 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20  f( nArg!=3 ){.  
23c30 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
23c40 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
23c50 2e 69 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20  .imposter INDEX 
23c60 49 4d 50 4f 53 54 45 52 5c 6e 22 29 3b 0a 20 20  IMPOSTER\n");.  
23c70 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
23c80 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
23c90 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
23ca0 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
23cb0 29 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  );.    zSql = sq
23cc0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53  lite3_mprintf("S
23cd0 45 4c 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46  ELECT rootpage F
23ce0 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
23cf0 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r".             
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
23d10 57 48 45 52 45 20 6e 61 6d 65 3d 27 25 71 27 20  WHERE name='%q' 
23d20 41 4e 44 20 74 79 70 65 3d 27 69 6e 64 65 78 27  AND type='index'
23d30 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ", azArg[1]);.  
23d40 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72    sqlite3_prepar
23d50 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  e_v2(p->db, zSql
23d60 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
23d70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
23d80 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66  ee(zSql);.    if
23d90 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ( sqlite3_step(p
23da0 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
23db0 57 20 29 7b 0a 20 20 20 20 20 20 74 6e 75 6d 20  W ){.      tnum 
23dc0 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
23dd0 5f 69 6e 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a  _int(pStmt, 0);.
23de0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
23df0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
23e00 29 3b 0a 20 20 20 20 69 66 28 20 74 6e 75 6d 3d  );.    if( tnum=
23e10 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  =0 ){.      utf8
23e20 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
23e30 22 6e 6f 20 73 75 63 68 20 69 6e 64 65 78 3a 20  "no such index: 
23e40 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67  \"%s\"\n", azArg
23e50 5b 31 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  [1]);.      rc =
23e60 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
23e70 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
23e80 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c  ;.    }.    zSql
23e90 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
23ea0 74 66 28 22 50 52 41 47 4d 41 20 69 6e 64 65 78  tf("PRAGMA index
23eb0 5f 78 69 6e 66 6f 3d 27 25 71 27 22 2c 20 61 7a  _xinfo='%q'", az
23ec0 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 72 63 20  Arg[1]);.    rc 
23ed0 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
23ee0 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  e_v2(p->db, zSql
23ef0 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
23f00 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
23f10 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 20  ee(zSql);.    i 
23f20 3d 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  = 0;.    while( 
23f30 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
23f40 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  mt)==SQLITE_ROW 
23f50 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4c  ){.      char zL
23f60 61 62 65 6c 5b 32 30 5d 3b 0a 20 20 20 20 20 20  abel[20];.      
23f70 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c  const char *zCol
23f80 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
23f90 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
23fa0 65 78 74 28 70 53 74 6d 74 2c 32 29 3b 0a 20 20  ext(pStmt,2);.  
23fb0 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 69      i++;.      i
23fc0 66 28 20 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20  f( zCol==0 ){.  
23fd0 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
23fe0 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74  3_column_int(pSt
23ff0 6d 74 2c 31 29 3d 3d 2d 31 20 29 7b 0a 20 20 20  mt,1)==-1 ){.   
24000 20 20 20 20 20 20 20 7a 43 6f 6c 20 3d 20 22 5f         zCol = "_
24010 52 4f 57 49 44 5f 22 3b 0a 20 20 20 20 20 20 20  ROWID_";.       
24020 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
24030 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
24040 74 66 28 73 69 7a 65 6f 66 28 7a 4c 61 62 65 6c  tf(sizeof(zLabel
24050 29 2c 7a 4c 61 62 65 6c 2c 22 65 78 70 72 25 64  ),zLabel,"expr%d
24060 22 2c 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ",i);.          
24070 7a 43 6f 6c 20 3d 20 7a 4c 61 62 65 6c 3b 0a 20  zCol = zLabel;. 
24080 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
24090 0a 20 20 20 20 20 20 69 66 28 20 7a 43 6f 6c 6c  .      if( zColl
240a0 69 73 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ist==0 ){.      
240b0 20 20 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71 6c    zCollist = sql
240c0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22  ite3_mprintf("\"
240d0 25 77 5c 22 22 2c 20 7a 43 6f 6c 29 3b 0a 20 20  %w\"", zCol);.  
240e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
240f0 20 20 20 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71     zCollist = sq
24100 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
24110 7a 2c 5c 22 25 77 5c 22 22 2c 20 7a 43 6f 6c 6c  z,\"%w\"", zColl
24120 69 73 74 2c 20 7a 43 6f 6c 29 3b 0a 20 20 20 20  ist, zCol);.    
24130 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
24140 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
24150 53 74 6d 74 29 3b 0a 20 20 20 20 7a 53 71 6c 20  Stmt);.    zSql 
24160 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
24170 66 28 0a 20 20 20 20 20 20 20 20 20 20 22 43 52  f(.          "CR
24180 45 41 54 45 20 54 41 42 4c 45 20 5c 22 25 77 5c  EATE TABLE \"%w\
24190 22 28 25 73 2c 50 52 49 4d 41 52 59 20 4b 45 59  "(%s,PRIMARY KEY
241a0 28 25 73 29 29 57 49 54 48 4f 55 54 20 52 4f 57  (%s))WITHOUT ROW
241b0 49 44 22 2c 0a 20 20 20 20 20 20 20 20 20 20 61  ID",.          a
241c0 7a 41 72 67 5b 32 5d 2c 20 7a 43 6f 6c 6c 69 73  zArg[2], zCollis
241d0 74 2c 20 7a 43 6f 6c 6c 69 73 74 29 3b 0a 20 20  t, zCollist);.  
241e0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
241f0 43 6f 6c 6c 69 73 74 29 3b 0a 20 20 20 20 72 63  Collist);.    rc
24200 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f   = sqlite3_test_
24210 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
24220 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52  ESTCTRL_IMPOSTER
24230 2c 20 70 2d 3e 64 62 2c 20 22 6d 61 69 6e 22 2c  , p->db, "main",
24240 20 31 2c 20 74 6e 75 6d 29 3b 0a 20 20 20 20 69   1, tnum);.    i
24250 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
24260 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
24270 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
24280 62 2c 20 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 30  b, zSql, 0, 0, 0
24290 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
242a0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
242b0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d  LITE_TESTCTRL_IM
242c0 50 4f 53 54 45 52 2c 20 70 2d 3e 64 62 2c 20 22  POSTER, p->db, "
242d0 6d 61 69 6e 22 2c 20 30 2c 20 30 29 3b 0a 20 20  main", 0, 0);.  
242e0 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
242f0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
24300 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
24310 20 69 6e 20 5b 25 73 5d 3a 20 25 73 5c 6e 22 2c   in [%s]: %s\n",
24320 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 5f 65   zSql, sqlite3_e
24330 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20  rrmsg(p->db));. 
24340 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
24350 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
24360 73 74 64 6f 75 74 2c 20 22 25 73 3b 5c 6e 22 2c  stdout, "%s;\n",
24370 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20   zSql);.        
24380 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 6f 75  raw_printf(stdou
24390 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 22 57  t,.           "W
243a0 41 52 4e 49 4e 47 3a 20 77 72 69 74 69 6e 67 20  ARNING: writing 
243b0 74 6f 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74  to an imposter t
243c0 61 62 6c 65 20 77 69 6c 6c 20 63 6f 72 72 75 70  able will corrup
243d0 74 20 74 68 65 20 69 6e 64 65 78 21 5c 6e 22 0a  t the index!\n".
243e0 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20          );.     
243f0 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
24400 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
24410 74 64 65 72 72 2c 20 22 53 51 4c 49 54 45 5f 54  tderr, "SQLITE_T
24420 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52  ESTCTRL_IMPOSTER
24430 20 72 65 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20   returns %d\n", 
24440 72 63 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  rc);.      rc = 
24450 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  1;.    }.    sql
24460 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b  ite3_free(zSql);
24470 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20  .  }else.#endif 
24480 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
24490 54 45 5f 4f 4d 49 54 5f 54 45 53 54 5f 43 4f 4e  TE_OMIT_TEST_CON
244a0 54 52 4f 4c 29 20 2a 2f 0a 0a 23 69 66 64 65 66  TROL) */..#ifdef
244b0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
244c0 4f 54 52 41 43 45 0a 20 20 69 66 28 20 63 3d 3d  OTRACE.  if( c==
244d0 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'i' && strncmp(a
244e0 7a 41 72 67 5b 30 5d 2c 20 22 69 6f 74 72 61 63  zArg[0], "iotrac
244f0 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  e", n)==0 ){.   
24500 20 53 51 4c 49 54 45 5f 41 50 49 20 65 78 74 65   SQLITE_API exte
24510 72 6e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f  rn void (SQLITE_
24520 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f  CDECL *sqlite3Io
24530 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
24540 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 20 20 69 66  r*, ...);.    if
24550 28 20 69 6f 74 72 61 63 65 20 26 26 20 69 6f 74  ( iotrace && iot
24560 72 61 63 65 21 3d 73 74 64 6f 75 74 20 29 20 66  race!=stdout ) f
24570 63 6c 6f 73 65 28 69 6f 74 72 61 63 65 29 3b 0a  close(iotrace);.
24580 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20 30 3b      iotrace = 0;
24590 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20  .    if( nArg<2 
245a0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
245b0 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a 20 20 20  IoTrace = 0;.   
245c0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
245d0 70 28 61 7a 41 72 67 5b 31 5d 2c 20 22 2d 22 29  p(azArg[1], "-")
245e0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
245f0 69 74 65 33 49 6f 54 72 61 63 65 20 3d 20 69 6f  ite3IoTrace = io
24600 74 72 61 63 65 50 72 69 6e 74 66 3b 0a 20 20 20  tracePrintf;.   
24610 20 20 20 69 6f 74 72 61 63 65 20 3d 20 73 74 64     iotrace = std
24620 6f 75 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  out;.    }else{.
24630 20 20 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20        iotrace = 
24640 66 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20  fopen(azArg[1], 
24650 22 77 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20  "w");.      if( 
24660 69 6f 74 72 61 63 65 3d 3d 30 20 29 7b 0a 20 20  iotrace==0 ){.  
24670 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
24680 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
24690 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22  : cannot open \"
246a0 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31  %s\"\n", azArg[1
246b0 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  ]);.        sqli
246c0 74 65 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a  te3IoTrace = 0;.
246d0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
246e0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
246f0 20 20 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72       sqlite3IoTr
24700 61 63 65 20 3d 20 69 6f 74 72 61 63 65 50 72 69  ace = iotracePri
24710 6e 74 66 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ntf;.      }.   
24720 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69   }.  }else.#endi
24730 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20  f..  if( c=='l' 
24740 26 26 20 6e 3e 3d 35 20 26 26 20 73 74 72 6e 63  && n>=5 && strnc
24750 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 69  mp(azArg[0], "li
24760 6d 69 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  mits", n)==0 ){.
24770 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
24780 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
24790 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69   const char *zLi
247a0 6d 69 74 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61  mitName;   /* Na
247b0 6d 65 20 6f 66 20 61 20 6c 69 6d 69 74 20 2a 2f  me of a limit */
247c0 0a 20 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69  .       int limi
247d0 74 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tCode;          
247e0 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 63 6f 64    /* Integer cod
247f0 65 20 66 6f 72 20 74 68 61 74 20 6c 69 6d 69 74  e for that limit
24800 20 2a 2f 0a 20 20 20 20 7d 20 61 4c 69 6d 69 74   */.    } aLimit
24810 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22  [] = {.      { "
24820 6c 65 6e 67 74 68 22 2c 20 20 20 20 20 20 20 20  length",        
24830 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
24840 49 4d 49 54 5f 4c 45 4e 47 54 48 20 20 20 20 20  IMIT_LENGTH     
24850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24860 2c 0a 20 20 20 20 20 20 7b 20 22 73 71 6c 5f 6c  ,.      { "sql_l
24870 65 6e 67 74 68 22 2c 20 20 20 20 20 20 20 20 20  ength",         
24880 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
24890 53 51 4c 5f 4c 45 4e 47 54 48 20 20 20 20 20 20  SQL_LENGTH      
248a0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
248b0 20 20 20 7b 20 22 63 6f 6c 75 6d 6e 22 2c 20 20     { "column",  
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
248d0 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d  LITE_LIMIT_COLUM
248e0 4e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  N               
248f0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
24900 22 65 78 70 72 5f 64 65 70 74 68 22 2c 20 20 20  "expr_depth",   
24910 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
24920 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48  LIMIT_EXPR_DEPTH
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24940 7d 2c 0a 20 20 20 20 20 20 7b 20 22 63 6f 6d 70  },.      { "comp
24950 6f 75 6e 64 5f 73 65 6c 65 63 74 22 2c 20 20 20  ound_select",   
24960 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54      SQLITE_LIMIT
24970 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54  _COMPOUND_SELECT
24980 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
24990 20 20 20 20 7b 20 22 76 64 62 65 5f 6f 70 22 2c      { "vdbe_op",
249a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
249b0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 44 42 45  QLITE_LIMIT_VDBE
249c0 5f 4f 50 20 20 20 20 20 20 20 20 20 20 20 20 20  _OP             
249d0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
249e0 20 22 66 75 6e 63 74 69 6f 6e 5f 61 72 67 22 2c   "function_arg",
249f0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
24a00 5f 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f  _LIMIT_FUNCTION_
24a10 41 52 47 20 20 20 20 20 20 20 20 20 20 20 20 20  ARG             
24a20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 61 74 74   },.      { "att
24a30 61 63 68 65 64 22 2c 20 20 20 20 20 20 20 20 20  ached",         
24a40 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49       SQLITE_LIMI
24a50 54 5f 41 54 54 41 43 48 45 44 20 20 20 20 20 20  T_ATTACHED      
24a60 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
24a70 20 20 20 20 20 7b 20 22 6c 69 6b 65 5f 70 61 74       { "like_pat
24a80 74 65 72 6e 5f 6c 65 6e 67 74 68 22 2c 20 20 20  tern_length",   
24a90 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b  SQLITE_LIMIT_LIK
24aa0 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48  E_PATTERN_LENGTH
24ab0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
24ac0 7b 20 22 76 61 72 69 61 62 6c 65 5f 6e 75 6d 62  { "variable_numb
24ad0 65 72 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54  er",       SQLIT
24ae0 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45  E_LIMIT_VARIABLE
24af0 5f 4e 55 4d 42 45 52 20 20 20 20 20 20 20 20 20  _NUMBER         
24b00 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 74 72    },.      { "tr
24b10 69 67 67 65 72 5f 64 65 70 74 68 22 2c 20 20 20  igger_depth",   
24b20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d        SQLITE_LIM
24b30 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
24b50 20 20 20 20 20 20 7b 20 22 77 6f 72 6b 65 72 5f        { "worker_
24b60 74 68 72 65 61 64 73 22 2c 20 20 20 20 20 20 20  threads",       
24b70 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f   SQLITE_LIMIT_WO
24b80 52 4b 45 52 5f 54 48 52 45 41 44 53 20 20 20 20  RKER_THREADS    
24b90 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7d          },.    }
24ba0 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6e 32 3b  ;.    int i, n2;
24bb0 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
24bc0 30 29 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67  0);.    if( nArg
24bd0 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 66 6f 72  ==1 ){.      for
24be0 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
24bf0 65 28 61 4c 69 6d 69 74 29 3b 20 69 2b 2b 29 7b  e(aLimit); i++){
24c00 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
24c10 22 25 32 30 73 20 25 64 5c 6e 22 2c 20 61 4c 69  "%20s %d\n", aLi
24c20 6d 69 74 5b 69 5d 2e 7a 4c 69 6d 69 74 4e 61 6d  mit[i].zLimitNam
24c30 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
24c40 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28    sqlite3_limit(
24c50 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 5d  p->db, aLimit[i]
24c60 2e 6c 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29 29  .limitCode, -1))
24c70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
24c80 6c 73 65 20 69 66 28 20 6e 41 72 67 3e 33 20 29  lse if( nArg>3 )
24c90 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
24ca0 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
24cb0 65 3a 20 2e 6c 69 6d 69 74 20 4e 41 4d 45 20 3f  e: .limit NAME ?
24cc0 4e 45 57 2d 56 41 4c 55 45 3f 5c 6e 22 29 3b 0a  NEW-VALUE?\n");.
24cd0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
24ce0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
24cf0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
24d00 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
24d10 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a 20 20   iLimit = -1;.  
24d20 20 20 20 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33      n2 = strlen3
24d30 30 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  0(azArg[1]);.   
24d40 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72     for(i=0; i<Ar
24d50 72 61 79 53 69 7a 65 28 61 4c 69 6d 69 74 29 3b  raySize(aLimit);
24d60 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
24d70 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  f( sqlite3_strni
24d80 63 6d 70 28 61 4c 69 6d 69 74 5b 69 5d 2e 7a 4c  cmp(aLimit[i].zL
24d90 69 6d 69 74 4e 61 6d 65 2c 20 61 7a 41 72 67 5b  imitName, azArg[
24da0 31 5d 2c 20 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  1], n2)==0 ){.  
24db0 20 20 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d          if( iLim
24dc0 69 74 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20  it<0 ){.        
24dd0 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 69 3b 0a      iLimit = i;.
24de0 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
24df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66  .            utf
24e00 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
24e10 20 22 61 6d 62 69 67 75 6f 75 73 20 6c 69 6d 69   "ambiguous limi
24e20 74 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a  t: \"%s\"\n", az
24e30 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[1]);.       
24e40 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
24e50 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65           goto me
24e60 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
24e70 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
24e80 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
24e90 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c       if( iLimit<
24ea0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  0 ){.        utf
24eb0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
24ec0 20 22 75 6e 6b 6e 6f 77 6e 20 6c 69 6d 69 74 3a   "unknown limit:
24ed0 20 5c 22 25 73 5c 22 5c 6e 22 0a 20 20 20 20 20   \"%s\"\n".     
24ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ef0 20 20 20 22 65 6e 74 65 72 20 5c 22 2e 6c 69 6d     "enter \".lim
24f00 69 74 73 5c 22 20 77 69 74 68 20 6e 6f 20 61 72  its\" with no ar
24f10 67 75 6d 65 6e 74 73 20 66 6f 72 20 61 20 6c 69  guments for a li
24f20 73 74 2e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  st.\n",.        
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f40 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
24f50 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
24f60 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
24f70 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
24f80 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 6e 41    }.      if( nA
24f90 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20  rg==3 ){.       
24fa0 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70   sqlite3_limit(p
24fb0 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69  ->db, aLimit[iLi
24fc0 6d 69 74 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 0a  mit].limitCode,.
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fe0 20 20 20 20 20 20 28 69 6e 74 29 69 6e 74 65 67        (int)integ
24ff0 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 32 5d  erValue(azArg[2]
25000 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
25010 20 20 70 72 69 6e 74 66 28 22 25 32 30 73 20 25    printf("%20s %
25020 64 5c 6e 22 2c 20 61 4c 69 6d 69 74 5b 69 4c 69  d\n", aLimit[iLi
25030 6d 69 74 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c  mit].zLimitName,
25040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71  .             sq
25050 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d 3e 64  lite3_limit(p->d
25060 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69 74  b, aLimit[iLimit
25070 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29  ].limitCode, -1)
25080 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
25090 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26  ..  if( c=='l' &
250a0 26 20 6e 3e 32 20 26 26 20 73 74 72 6e 63 6d 70  & n>2 && strncmp
250b0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 69 6e 74  (azArg[0], "lint
250c0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
250d0 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
250e0 20 20 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61 6e     lintDotComman
250f0 64 28 70 2c 20 61 7a 41 72 67 2c 20 6e 41 72 67  d(p, azArg, nArg
25100 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e  );.  }else..#ifn
25110 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
25120 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
25130 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26 20 73   if( c=='l' && s
25140 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
25150 20 22 6c 6f 61 64 22 2c 20 6e 29 3d 3d 30 20 29   "load", n)==0 )
25160 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
25170 20 2a 7a 46 69 6c 65 2c 20 2a 7a 50 72 6f 63 3b   *zFile, *zProc;
25180 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  .    char *zErrM
25190 73 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  sg = 0;.    if( 
251a0 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20  nArg<2 ){.      
251b0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
251c0 72 2c 20 22 55 73 61 67 65 3a 20 2e 6c 6f 61 64  r, "Usage: .load
251d0 20 46 49 4c 45 20 3f 45 4e 54 52 59 50 4f 49 4e   FILE ?ENTRYPOIN
251e0 54 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  T?\n");.      rc
251f0 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f   = 1;.      goto
25200 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
25210 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 46  it;.    }.    zF
25220 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a  ile = azArg[1];.
25230 20 20 20 20 7a 50 72 6f 63 20 3d 20 6e 41 72 67      zProc = nArg
25240 3e 3d 33 20 3f 20 61 7a 41 72 67 5b 32 5d 20 3a  >=3 ? azArg[2] :
25250 20 30 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   0;.    open_db(
25260 70 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20  p, 0);.    rc = 
25270 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
25280 65 6e 73 69 6f 6e 28 70 2d 3e 64 62 2c 20 7a 46  ension(p->db, zF
25290 69 6c 65 2c 20 7a 50 72 6f 63 2c 20 26 7a 45 72  ile, zProc, &zEr
252a0 72 4d 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72  rMsg);.    if( r
252b0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
252c0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
252d0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
252e0 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  : %s\n", zErrMsg
252f0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
25300 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  _free(zErrMsg);.
25310 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
25320 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
25330 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27  if..  if( c=='l'
25340 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
25350 67 5b 30 5d 2c 20 22 6c 6f 67 22 2c 20 6e 29 3d  g[0], "log", n)=
25360 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
25370 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72  rg!=2 ){.      r
25380 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
25390 2c 20 22 55 73 61 67 65 3a 20 2e 6c 6f 67 20 46  , "Usage: .log F
253a0 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b 0a 20 20 20  ILENAME\n");.   
253b0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
253c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73  else{.      cons
253d0 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 20 3d 20  t char *zFile = 
253e0 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20  azArg[1];.      
253f0 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
25400 65 28 70 2d 3e 70 4c 6f 67 29 3b 0a 20 20 20 20  e(p->pLog);.    
25410 20 20 70 2d 3e 70 4c 6f 67 20 3d 20 6f 75 74 70    p->pLog = outp
25420 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46 69  ut_file_open(zFi
25430 6c 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  le);.    }.  }el
25440 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6d 27  se..  if( c=='m'
25450 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
25460 67 5b 30 5d 2c 20 22 6d 6f 64 65 22 2c 20 6e 29  g[0], "mode", n)
25470 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ==0 ){.    const
25480 20 63 68 61 72 20 2a 7a 4d 6f 64 65 20 3d 20 6e   char *zMode = n
25490 41 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31  Arg>=2 ? azArg[1
254a0 5d 20 3a 20 22 22 3b 0a 20 20 20 20 69 6e 74 20  ] : "";.    int 
254b0 6e 32 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e  n2 = (int)strlen
254c0 28 7a 4d 6f 64 65 29 3b 0a 20 20 20 20 69 6e 74  (zMode);.    int
254d0 20 63 32 20 3d 20 7a 4d 6f 64 65 5b 30 5d 3b 0a   c2 = zMode[0];.
254e0 20 20 20 20 69 66 28 20 63 32 3d 3d 27 6c 27 20      if( c2=='l' 
254f0 26 26 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63  && n2>2 && strnc
25500 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 6e  mp(azArg[1],"lin
25510 65 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  es",n2)==0 ){.  
25520 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
25530 44 45 5f 4c 69 6e 65 3b 0a 20 20 20 20 20 20 73  DE_Line;.      s
25540 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
25550 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70  sizeof(p->rowSep
25560 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53  arator), p->rowS
25570 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f  eparator, SEP_Ro
25580 77 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  w);.    }else if
25590 28 20 63 32 3d 3d 27 63 27 20 26 26 20 73 74 72  ( c2=='c' && str
255a0 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63  ncmp(azArg[1],"c
255b0 6f 6c 75 6d 6e 73 22 2c 6e 32 29 3d 3d 30 20 29  olumns",n2)==0 )
255c0 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20  {.      p->mode 
255d0 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20  = MODE_Column;. 
255e0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
255f0 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
25600 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70  rowSeparator), p
25610 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20  ->rowSeparator, 
25620 53 45 50 5f 52 6f 77 29 3b 0a 20 20 20 20 7d 65  SEP_Row);.    }e
25630 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 6c 27 20  lse if( c2=='l' 
25640 26 26 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63  && n2>2 && strnc
25650 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 73  mp(azArg[1],"lis
25660 74 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20  t",n2)==0 ){.   
25670 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44     p->mode = MOD
25680 45 5f 4c 69 73 74 3b 0a 20 20 20 20 20 20 73 71  E_List;.      sq
25690 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
256a0 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61  izeof(p->colSepa
256b0 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65  rator), p->colSe
256c0 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6c  parator, SEP_Col
256d0 75 6d 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  umn);.      sqli
256e0 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
256f0 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61  eof(p->rowSepara
25700 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61  tor), p->rowSepa
25710 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b  rator, SEP_Row);
25720 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
25730 32 3d 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d  2=='h' && strncm
25740 70 28 61 7a 41 72 67 5b 31 5d 2c 22 68 74 6d 6c  p(azArg[1],"html
25750 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
25760 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
25770 5f 48 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c 73 65  _Html;.    }else
25780 20 69 66 28 20 63 32 3d 3d 27 74 27 20 26 26 20   if( c2=='t' && 
25790 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d  strncmp(azArg[1]
257a0 2c 22 74 63 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b  ,"tcl",n2)==0 ){
257b0 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d  .      p->mode =
257c0 20 4d 4f 44 45 5f 54 63 6c 3b 0a 20 20 20 20 20   MODE_Tcl;.     
257d0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
257e0 66 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53  f(sizeof(p->colS
257f0 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f  eparator), p->co
25800 6c 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f  lSeparator, SEP_
25810 53 70 61 63 65 29 3b 0a 20 20 20 20 20 20 73 71  Space);.      sq
25820 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
25830 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61  izeof(p->rowSepa
25840 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65  rator), p->rowSe
25850 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77  parator, SEP_Row
25860 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
25870 20 63 32 3d 3d 27 63 27 20 26 26 20 73 74 72 6e   c2=='c' && strn
25880 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63 73  cmp(azArg[1],"cs
25890 76 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20  v",n2)==0 ){.   
258a0 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44     p->mode = MOD
258b0 45 5f 43 73 76 3b 0a 20 20 20 20 20 20 73 71 6c  E_Csv;.      sql
258c0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
258d0 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72  zeof(p->colSepar
258e0 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70  ator), p->colSep
258f0 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6d 6d  arator, SEP_Comm
25900 61 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  a);.      sqlite
25910 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
25920 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  f(p->rowSeparato
25930 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  r), p->rowSepara
25940 74 6f 72 2c 20 53 45 50 5f 43 72 4c 66 29 3b 0a  tor, SEP_CrLf);.
25950 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32      }else if( c2
25960 3d 3d 27 74 27 20 26 26 20 73 74 72 6e 63 6d 70  =='t' && strncmp
25970 28 61 7a 41 72 67 5b 31 5d 2c 22 74 61 62 73 22  (azArg[1],"tabs"
25980 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ,n2)==0 ){.     
25990 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f   p->mode = MODE_
259a0 4c 69 73 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  List;.      sqli
259b0 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
259c0 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  eof(p->colSepara
259d0 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  tor), p->colSepa
259e0 72 61 74 6f 72 2c 20 53 45 50 5f 54 61 62 29 3b  rator, SEP_Tab);
259f0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
25a00 32 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d  2=='i' && strncm
25a10 70 28 61 7a 41 72 67 5b 31 5d 2c 22 69 6e 73 65  p(azArg[1],"inse
25a20 72 74 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  rt",n2)==0 ){.  
25a30 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
25a40 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 20  DE_Insert;.     
25a50 20 73 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28   set_table_name(
25a60 70 2c 20 6e 41 72 67 3e 3d 33 20 3f 20 61 7a 41  p, nArg>=3 ? azA
25a70 72 67 5b 32 5d 20 3a 20 22 74 61 62 6c 65 22 29  rg[2] : "table")
25a80 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
25a90 63 32 3d 3d 27 71 27 20 26 26 20 73 74 72 6e 63  c2=='q' && strnc
25aa0 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 71 75 6f  mp(azArg[1],"quo
25ab0 74 65 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  te",n2)==0 ){.  
25ac0 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
25ad0 44 45 5f 51 75 6f 74 65 3b 0a 20 20 20 20 7d 65  DE_Quote;.    }e
25ae0 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 61 27 20  lse if( c2=='a' 
25af0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
25b00 5b 31 5d 2c 22 61 73 63 69 69 22 2c 6e 32 29 3d  [1],"ascii",n2)=
25b10 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  =0 ){.      p->m
25b20 6f 64 65 20 3d 20 4d 4f 44 45 5f 41 73 63 69 69  ode = MODE_Ascii
25b30 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
25b40 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
25b50 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29  p->colSeparator)
25b60 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
25b70 72 2c 20 53 45 50 5f 55 6e 69 74 29 3b 0a 20 20  r, SEP_Unit);.  
25b80 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
25b90 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72  intf(sizeof(p->r
25ba0 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d  owSeparator), p-
25bb0 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53  >rowSeparator, S
25bc0 45 50 5f 52 65 63 6f 72 64 29 3b 0a 20 20 20 20  EP_Record);.    
25bd0 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d  }else if( nArg==
25be0 31 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  1 ){.      raw_p
25bf0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 63  rintf(p->out, "c
25c00 75 72 72 65 6e 74 20 6f 75 74 70 75 74 20 6d 6f  urrent output mo
25c10 64 65 3a 20 25 73 5c 6e 22 2c 20 6d 6f 64 65 44  de: %s\n", modeD
25c20 65 73 63 72 5b 70 2d 3e 6d 6f 64 65 5d 29 3b 0a  escr[p->mode]);.
25c30 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
25c40 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
25c50 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 6f 64 65  rr, "Error: mode
25c60 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f   should be one o
25c70 66 3a 20 22 0a 20 20 20 20 20 20 20 20 20 22 61  f: ".         "a
25c80 73 63 69 69 20 63 6f 6c 75 6d 6e 20 63 73 76 20  scii column csv 
25c90 68 74 6d 6c 20 69 6e 73 65 72 74 20 6c 69 6e 65  html insert line
25ca0 20 6c 69 73 74 20 71 75 6f 74 65 20 74 61 62 73   list quote tabs
25cb0 20 74 63 6c 5c 6e 22 29 3b 0a 20 20 20 20 20 20   tcl\n");.      
25cc0 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rc = 1;.    }.  
25cd0 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e    p->cMode = p->
25ce0 6d 6f 64 65 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  mode;.  }else.. 
25cf0 20 69 66 28 20 63 3d 3d 27 6e 27 20 26 26 20 73   if( c=='n' && s
25d00 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
25d10 20 22 6e 75 6c 6c 76 61 6c 75 65 22 2c 20 6e 29   "nullvalue", n)
25d20 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
25d30 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
25d40 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
25d50 28 73 69 7a 65 6f 66 28 70 2d 3e 6e 75 6c 6c 56  (sizeof(p->nullV
25d60 61 6c 75 65 29 2c 20 70 2d 3e 6e 75 6c 6c 56 61  alue), p->nullVa
25d70 6c 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  lue,.           
25d80 20 20 20 20 20 20 20 20 20 20 20 20 22 25 2e 2a              "%.*
25d90 73 22 2c 20 28 69 6e 74 29 41 72 72 61 79 53 69  s", (int)ArraySi
25da0 7a 65 28 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29  ze(p->nullValue)
25db0 2d 31 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  -1, azArg[1]);. 
25dc0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
25dd0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
25de0 72 2c 20 22 55 73 61 67 65 3a 20 2e 6e 75 6c 6c  r, "Usage: .null
25df0 76 61 6c 75 65 20 53 54 52 49 4e 47 5c 6e 22 29  value STRING\n")
25e00 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
25e10 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
25e20 20 69 66 28 20 63 3d 3d 27 6f 27 20 26 26 20 73   if( c=='o' && s
25e30 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
25e40 20 22 6f 70 65 6e 22 2c 20 6e 29 3d 3d 30 20 26   "open", n)==0 &
25e50 26 20 6e 3e 3d 32 20 29 7b 0a 20 20 20 20 63 68  & n>=2 ){.    ch
25e60 61 72 20 2a 7a 4e 65 77 46 69 6c 65 6e 61 6d 65  ar *zNewFilename
25e70 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  ;  /* Name of th
25e80 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
25e90 74 6f 20 6f 70 65 6e 20 2a 2f 0a 20 20 20 20 69  to open */.    i
25ea0 6e 74 20 69 4e 61 6d 65 20 3d 20 31 3b 20 20 20  nt iName = 1;   
25eb0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
25ec0 61 7a 41 72 67 5b 5d 20 6f 66 20 74 68 65 20 66  azArg[] of the f
25ed0 69 6c 65 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  ilename */.    i
25ee0 6e 74 20 6e 65 77 46 6c 61 67 20 3d 20 30 3b 20  nt newFlag = 0; 
25ef0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64      /* True to d
25f00 65 6c 65 74 65 20 66 69 6c 65 20 62 65 66 6f 72  elete file befor
25f10 65 20 6f 70 65 6e 69 6e 67 20 2a 2f 0a 20 20 20  e opening */.   
25f20 20 2f 2a 20 43 6c 6f 73 65 20 74 68 65 20 65 78   /* Close the ex
25f30 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
25f40 2a 2f 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 63  */.    session_c
25f50 6c 6f 73 65 5f 61 6c 6c 28 70 29 3b 0a 20 20 20  lose_all(p);.   
25f60 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70   sqlite3_close(p
25f70 2d 3e 64 62 29 3b 0a 20 20 20 20 70 2d 3e 64 62  ->db);.    p->db
25f80 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 7a 44 62   = 0;.    p->zDb
25f90 46 69 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20  Filename = 0;.  
25fa0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70    sqlite3_free(p
25fb0 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 29 3b  ->zFreeOnClose);
25fc0 0a 20 20 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43  .    p->zFreeOnC
25fd0 6c 6f 73 65 20 3d 20 30 3b 0a 20 20 20 20 2f 2a  lose = 0;.    /*
25fe0 20 43 68 65 63 6b 20 66 6f 72 20 63 6f 6d 6d 61   Check for comma
25ff0 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd-line argument
26000 73 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 4e 61  s */.    for(iNa
26010 6d 65 3d 31 3b 20 69 4e 61 6d 65 3c 6e 41 72 67  me=1; iName<nArg
26020 20 26 26 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d   && azArg[iName]
26030 5b 30 5d 3d 3d 27 2d 27 3b 20 69 4e 61 6d 65 2b  [0]=='-'; iName+
26040 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  +){.      const 
26050 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b  char *z = azArg[
26060 69 4e 61 6d 65 5d 3b 0a 20 20 20 20 20 20 69 66  iName];.      if
26070 28 20 6f 70 74 69 6f 6e 4d 61 74 63 68 28 7a 2c  ( optionMatch(z,
26080 22 6e 65 77 22 29 20 29 7b 0a 20 20 20 20 20 20  "new") ){.      
26090 20 20 6e 65 77 46 6c 61 67 20 3d 20 31 3b 0a 20    newFlag = 1;. 
260a0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a       }else if( z
260b0 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
260c0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
260d0 73 74 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e  stderr, "unknown
260e0 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20   option: %s\n", 
260f0 7a 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  z);.        rc =
26100 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   1;.        goto
26110 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
26120 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  it;.      }.    
26130 7d 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 66 69  }.    /* If a fi
26140 6c 65 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  lename is specif
26150 69 65 64 2c 20 74 72 79 20 74 6f 20 6f 70 65 6e  ied, try to open
26160 20 69 74 20 66 69 72 73 74 20 2a 2f 0a 20 20 20   it first */.   
26170 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 20 3d 20   zNewFilename = 
26180 6e 41 72 67 3e 69 4e 61 6d 65 20 3f 20 73 71 6c  nArg>iName ? sql
26190 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
261a0 22 2c 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 29  ", azArg[iName])
261b0 20 3a 20 30 3b 0a 20 20 20 20 69 66 28 20 7a 4e   : 0;.    if( zN
261c0 65 77 46 69 6c 65 6e 61 6d 65 20 29 7b 0a 20 20  ewFilename ){.  
261d0 20 20 20 20 69 66 28 20 6e 65 77 46 6c 61 67 20      if( newFlag 
261e0 29 20 73 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c  ) shellDeleteFil
261f0 65 28 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 29 3b  e(zNewFilename);
26200 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c  .      p->zDbFil
26210 65 6e 61 6d 65 20 3d 20 7a 4e 65 77 46 69 6c 65  ename = zNewFile
26220 6e 61 6d 65 3b 0a 20 20 20 20 20 20 6f 70 65 6e  name;.      open
26230 5f 64 62 28 70 2c 20 31 29 3b 0a 20 20 20 20 20  _db(p, 1);.     
26240 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b   if( p->db==0 ){
26250 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
26260 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
26270 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
26280 20 27 25 73 27 5c 6e 22 2c 20 7a 4e 65 77 46 69   '%s'\n", zNewFi
26290 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  lename);.       
262a0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4e   sqlite3_free(zN
262b0 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20  ewFilename);.   
262c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
262d0 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73    p->zFreeOnClos
262e0 65 20 3d 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65  e = zNewFilename
262f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
26300 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30      if( p->db==0
26310 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 20   ){.      /* As 
26320 61 20 66 61 6c 6c 2d 62 61 63 6b 20 6f 70 65 6e  a fall-back open
26330 20 61 20 54 45 4d 50 20 64 61 74 61 62 61 73 65   a TEMP database
26340 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62   */.      p->zDb
26350 46 69 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20  Filename = 0;.  
26360 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
26370 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
26380 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6f 27 0a 20  ..  if( c=='o'. 
26390 20 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a    && (strncmp(az
263a0 41 72 67 5b 30 5d 2c 20 22 6f 75 74 70 75 74 22  Arg[0], "output"
263b0 2c 20 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63  , n)==0 || strnc
263c0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 6e  mp(azArg[0], "on
263d0 63 65 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 29 7b  ce", n)==0).  ){
263e0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
263f0 2a 7a 46 69 6c 65 20 3d 20 6e 41 72 67 3e 3d 32  *zFile = nArg>=2
26400 20 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 73   ? azArg[1] : "s
26410 74 64 6f 75 74 22 3b 0a 20 20 20 20 69 66 28 20  tdout";.    if( 
26420 6e 41 72 67 3e 32 20 29 7b 0a 20 20 20 20 20 20  nArg>2 ){.      
26430 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
26440 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 25 73 20  rr, "Usage: .%s 
26450 46 49 4c 45 5c 6e 22 2c 20 61 7a 41 72 67 5b 30  FILE\n", azArg[0
26460 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ]);.      rc = 1
26470 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
26480 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
26490 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 3e      }.    if( n>
264a0 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  1 && strncmp(azA
264b0 72 67 5b 30 5d 2c 20 22 6f 6e 63 65 22 2c 20 6e  rg[0], "once", n
264c0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
264d0 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20  ( nArg<2 ){.    
264e0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
264f0 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
26500 6f 6e 63 65 20 46 49 4c 45 5c 6e 22 29 3b 0a 20  once FILE\n");. 
26510 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
26520 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
26530 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
26540 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e       }.      p->
26550 6f 75 74 43 6f 75 6e 74 20 3d 20 32 3b 0a 20 20  outCount = 2;.  
26560 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
26570 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d 20 30 3b 0a  ->outCount = 0;.
26580 20 20 20 20 7d 0a 20 20 20 20 6f 75 74 70 75 74      }.    output
26590 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69  _reset(p);.    i
265a0 66 28 20 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c 27  f( zFile[0]=='|'
265b0 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   ){.#ifdef SQLIT
265c0 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20 20  E_OMIT_POPEN.   
265d0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
265e0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 70 69  derr, "Error: pi
265f0 70 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70  pes are not supp
26600 6f 72 74 65 64 20 69 6e 20 74 68 69 73 20 4f 53  orted in this OS
26610 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
26620 20 31 3b 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74   1;.      p->out
26630 20 3d 20 73 74 64 6f 75 74 3b 0a 23 65 6c 73 65   = stdout;.#else
26640 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20  .      p->out = 
26650 70 6f 70 65 6e 28 7a 46 69 6c 65 20 2b 20 31 2c  popen(zFile + 1,
26660 20 22 77 22 29 3b 0a 20 20 20 20 20 20 69 66 28   "w");.      if(
26670 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20   p->out==0 ){.  
26680 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
26690 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
266a0 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 70 69 70   cannot open pip
266b0 65 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69  e \"%s\"\n", zFi
266c0 6c 65 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20  le + 1);.       
266d0 20 70 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74   p->out = stdout
266e0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
266f0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
26700 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73         sqlite3_s
26710 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
26720 2d 3e 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f  ->outfile), p->o
26730 75 74 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46  utfile, "%s", zF
26740 69 6c 65 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65  ile);.      }.#e
26750 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ndif.    }else{.
26760 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 6f        p->out = o
26770 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28  utput_file_open(
26780 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 69 66  zFile);.      if
26790 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20  ( p->out==0 ){. 
267a0 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
267b0 70 28 7a 46 69 6c 65 2c 22 6f 66 66 22 29 21 3d  p(zFile,"off")!=
267c0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  0 ){.          u
267d0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
267e0 72 2c 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74  r,"Error: cannot
267f0 20 77 72 69 74 65 20 74 6f 20 5c 22 25 73 5c 22   write to \"%s\"
26800 5c 6e 22 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20  \n", zFile);.   
26810 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
26820 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a  ->out = stdout;.
26830 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
26840 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
26850 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73         sqlite3_s
26860 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
26870 2d 3e 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f  ->outfile), p->o
26880 75 74 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46  utfile, "%s", zF
26890 69 6c 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ile);.      }.  
268a0 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
268b0 66 28 20 63 3d 3d 27 70 27 20 26 26 20 6e 3e 3d  f( c=='p' && n>=
268c0 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  3 && strncmp(azA
268d0 72 67 5b 30 5d 2c 20 22 70 72 69 6e 74 22 2c 20  rg[0], "print", 
268e0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  n)==0 ){.    int
268f0 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b   i;.    for(i=1;
26900 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
26910 20 20 20 20 20 69 66 28 20 69 3e 31 20 29 20 72       if( i>1 ) r
26920 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
26930 2c 20 22 20 22 29 3b 0a 20 20 20 20 20 20 75 74  , " ");.      ut
26940 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
26950 2c 20 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d  , "%s", azArg[i]
26960 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77  );.    }.    raw
26970 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
26980 22 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  "\n");.  }else..
26990 20 20 69 66 28 20 63 3d 3d 27 70 27 20 26 26 20    if( c=='p' && 
269a0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
269b0 2c 20 22 70 72 6f 6d 70 74 22 2c 20 6e 29 3d 3d  , "prompt", n)==
269c0 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
269d0 67 20 3e 3d 20 32 29 20 7b 0a 20 20 20 20 20 20  g >= 2) {.      
269e0 73 74 72 6e 63 70 79 28 6d 61 69 6e 50 72 6f 6d  strncpy(mainProm
269f0 70 74 2c 61 7a 41 72 67 5b 31 5d 2c 28 69 6e 74  pt,azArg[1],(int
26a00 29 41 72 72 61 79 53 69 7a 65 28 6d 61 69 6e 50  )ArraySize(mainP
26a10 72 6f 6d 70 74 29 2d 31 29 3b 0a 20 20 20 20 7d  rompt)-1);.    }
26a20 0a 20 20 20 20 69 66 28 20 6e 41 72 67 20 3e 3d  .    if( nArg >=
26a30 20 33 29 20 7b 0a 20 20 20 20 20 20 73 74 72 6e   3) {.      strn
26a40 63 70 79 28 63 6f 6e 74 69 6e 75 65 50 72 6f 6d  cpy(continueProm
26a50 70 74 2c 61 7a 41 72 67 5b 32 5d 2c 28 69 6e 74  pt,azArg[2],(int
26a60 29 41 72 72 61 79 53 69 7a 65 28 63 6f 6e 74 69  )ArraySize(conti
26a70 6e 75 65 50 72 6f 6d 70 74 29 2d 31 29 3b 0a 20  nuePrompt)-1);. 
26a80 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
26a90 69 66 28 20 63 3d 3d 27 71 27 20 26 26 20 73 74  if( c=='q' && st
26aa0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
26ab0 22 71 75 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b  "quit", n)==0 ){
26ac0 0a 20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d  .    rc = 2;.  }
26ad0 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
26ae0 72 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74  r' && n>=3 && st
26af0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
26b00 22 72 65 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b  "read", n)==0 ){
26b10 0a 20 20 20 20 46 49 4c 45 20 2a 61 6c 74 3b 0a  .    FILE *alt;.
26b20 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20      if( nArg!=2 
26b30 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
26b40 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
26b50 67 65 3a 20 2e 72 65 61 64 20 46 49 4c 45 5c 6e  ge: .read FILE\n
26b60 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
26b70 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
26b80 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
26b90 20 20 20 20 7d 0a 20 20 20 20 61 6c 74 20 3d 20      }.    alt = 
26ba0 66 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20  fopen(azArg[1], 
26bb0 22 72 62 22 29 3b 0a 20 20 20 20 69 66 28 20 61  "rb");.    if( a
26bc0 6c 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  lt==0 ){.      u
26bd0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
26be0 72 2c 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74  r,"Error: cannot
26bf0 20 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c   open \"%s\"\n",
26c00 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
26c10 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65    rc = 1;.    }e
26c20 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
26c30 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28 70 2c  process_input(p,
26c40 20 61 6c 74 29 3b 0a 20 20 20 20 20 20 66 63 6c   alt);.      fcl
26c50 6f 73 65 28 61 6c 74 29 3b 0a 20 20 20 20 7d 0a  ose(alt);.    }.
26c60 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
26c70 3d 3d 27 72 27 20 26 26 20 6e 3e 3d 33 20 26 26  =='r' && n>=3 &&
26c80 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
26c90 5d 2c 20 22 72 65 73 74 6f 72 65 22 2c 20 6e 29  ], "restore", n)
26ca0 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ==0 ){.    const
26cb0 20 63 68 61 72 20 2a 7a 53 72 63 46 69 6c 65 3b   char *zSrcFile;
26cc0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
26cd0 2a 7a 44 62 3b 0a 20 20 20 20 73 71 6c 69 74 65  *zDb;.    sqlite
26ce0 33 20 2a 70 53 72 63 3b 0a 20 20 20 20 73 71 6c  3 *pSrc;.    sql
26cf0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 70 42 61  ite3_backup *pBa
26d00 63 6b 75 70 3b 0a 20 20 20 20 69 6e 74 20 6e 54  ckup;.    int nT
26d10 69 6d 65 6f 75 74 20 3d 20 30 3b 0a 0a 20 20 20  imeout = 0;..   
26d20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
26d30 20 20 20 20 20 20 7a 53 72 63 46 69 6c 65 20 3d        zSrcFile =
26d40 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20   azArg[1];.     
26d50 20 7a 44 62 20 3d 20 22 6d 61 69 6e 22 3b 0a 20   zDb = "main";. 
26d60 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72     }else if( nAr
26d70 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 7a 53  g==3 ){.      zS
26d80 72 63 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 32  rcFile = azArg[2
26d90 5d 3b 0a 20 20 20 20 20 20 7a 44 62 20 3d 20 61  ];.      zDb = a
26da0 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 7d 65 6c  zArg[1];.    }el
26db0 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  se{.      raw_pr
26dc0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
26dd0 61 67 65 3a 20 2e 72 65 73 74 6f 72 65 20 3f 44  age: .restore ?D
26de0 42 3f 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20  B? FILE\n");.   
26df0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
26e00 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61   goto meta_comma
26e10 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20  nd_exit;.    }. 
26e20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
26e30 6f 70 65 6e 28 7a 53 72 63 46 69 6c 65 2c 20 26  open(zSrcFile, &
26e40 70 53 72 63 29 3b 0a 20 20 20 20 69 66 28 20 72  pSrc);.    if( r
26e50 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
26e60 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
26e70 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
26e80 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22  : cannot open \"
26e90 25 73 5c 22 5c 6e 22 2c 20 7a 53 72 63 46 69 6c  %s\"\n", zSrcFil
26ea0 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
26eb0 33 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20  3_close(pSrc);. 
26ec0 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
26ed0 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62     }.    open_db
26ee0 28 70 2c 20 30 29 3b 0a 20 20 20 20 70 42 61 63  (p, 0);.    pBac
26ef0 6b 75 70 20 3d 20 73 71 6c 69 74 65 33 5f 62 61  kup = sqlite3_ba
26f00 63 6b 75 70 5f 69 6e 69 74 28 70 2d 3e 64 62 2c  ckup_init(p->db,
26f10 20 7a 44 62 2c 20 70 53 72 63 2c 20 22 6d 61 69   zDb, pSrc, "mai
26f20 6e 22 29 3b 0a 20 20 20 20 69 66 28 20 70 42 61  n");.    if( pBa
26f30 63 6b 75 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ckup==0 ){.     
26f40 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
26f50 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c  err, "Error: %s\
26f60 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  n", sqlite3_errm
26f70 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20  sg(p->db));.    
26f80 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28    sqlite3_close(
26f90 70 53 72 63 29 3b 0a 20 20 20 20 20 20 72 65 74  pSrc);.      ret
26fa0 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
26fb0 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71   while( (rc = sq
26fc0 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65  lite3_backup_ste
26fd0 70 28 70 42 61 63 6b 75 70 2c 31 30 30 29 29 3d  p(pBackup,100))=
26fe0 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20  =SQLITE_OK.     
26ff0 20 20 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49       || rc==SQLI
27000 54 45 5f 42 55 53 59 20 20 29 7b 0a 20 20 20 20  TE_BUSY  ){.    
27010 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
27020 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
27030 20 69 66 28 20 6e 54 69 6d 65 6f 75 74 2b 2b 20   if( nTimeout++ 
27040 3e 3d 20 33 20 29 20 62 72 65 61 6b 3b 0a 20 20  >= 3 ) break;.  
27050 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6c        sqlite3_sl
27060 65 65 70 28 31 30 30 29 3b 0a 20 20 20 20 20 20  eep(100);.      
27070 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
27080 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
27090 68 28 70 42 61 63 6b 75 70 29 3b 0a 20 20 20 20  h(pBackup);.    
270a0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
270b0 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ONE ){.      rc 
270c0 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 0;.    }else i
270d0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
270e0 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  SY || rc==SQLITE
270f0 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20  _LOCKED ){.     
27100 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
27110 72 72 2c 20 22 45 72 72 6f 72 3a 20 73 6f 75 72  rr, "Error: sour
27120 63 65 20 64 61 74 61 62 61 73 65 20 69 73 20 62  ce database is b
27130 75 73 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  usy\n");.      r
27140 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  c = 1;.    }else
27150 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
27160 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
27170 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74  or: %s\n", sqlit
27180 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29  e3_errmsg(p->db)
27190 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
271a0 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
271b0 65 33 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a  e3_close(pSrc);.
271c0 20 20 7d 65 6c 73 65 0a 0a 0a 20 20 69 66 28 20    }else...  if( 
271d0 63 3d 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d  c=='s' && strncm
271e0 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 63 61  p(azArg[0], "sca
271f0 6e 73 74 61 74 73 22 2c 20 6e 29 3d 3d 30 20 29  nstats", n)==0 )
27200 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d  {.    if( nArg==
27210 32 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 73 63  2 ){.      p->sc
27220 61 6e 73 74 61 74 73 4f 6e 20 3d 20 62 6f 6f 6c  anstatsOn = bool
27230 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  eanValue(azArg[1
27240 5d 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ]);.#ifndef SQLI
27250 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
27260 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 20 20  CANSTATUS.      
27270 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
27280 72 2c 20 22 57 61 72 6e 69 6e 67 3a 20 2e 73 63  r, "Warning: .sc
27290 61 6e 73 74 61 74 73 20 6e 6f 74 20 61 76 61 69  anstats not avai
272a0 6c 61 62 6c 65 20 69 6e 20 74 68 69 73 20 62 75  lable in this bu
272b0 69 6c 64 2e 5c 6e 22 29 3b 0a 23 65 6e 64 69 66  ild.\n");.#endif
272c0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
272d0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
272e0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 63  err, "Usage: .sc
272f0 61 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66 5c 6e  anstats on|off\n
27300 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
27310 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
27320 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26  .  if( c=='s' &&
27330 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
27340 5d 2c 20 22 73 63 68 65 6d 61 22 2c 20 6e 29 3d  ], "schema", n)=
27350 3d 30 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 54  =0 ){.    ShellT
27360 65 78 74 20 73 53 65 6c 65 63 74 3b 0a 20 20 20  ext sSelect;.   
27370 20 53 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61   ShellState data
27380 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72  ;.    char *zErr
27390 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e  Msg = 0;.    con
273a0 73 74 20 63 68 61 72 20 2a 7a 44 69 76 20 3d 20  st char *zDiv = 
273b0 30 3b 0a 20 20 20 20 69 6e 74 20 69 53 63 68 65  0;.    int iSche
273c0 6d 61 20 3d 20 30 3b 0a 0a 20 20 20 20 6f 70 65  ma = 0;..    ope
273d0 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20  n_db(p, 0);.    
273e0 6d 65 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c  memcpy(&data, p,
273f0 20 73 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a   sizeof(data));.
27400 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61      data.showHea
27410 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74  der = 0;.    dat
27420 61 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d  a.cMode = data.m
27430 6f 64 65 20 3d 20 4d 4f 44 45 5f 53 65 6d 69 3b  ode = MODE_Semi;
27440 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73  .    initText(&s
27450 53 65 6c 65 63 74 29 3b 0a 20 20 20 20 69 66 28  Select);.    if(
27460 20 6e 41 72 67 3e 3d 32 20 26 26 20 6f 70 74 69   nArg>=2 && opti
27470 6f 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b 31 5d  onMatch(azArg[1]
27480 2c 20 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20  , "indent") ){. 
27490 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20       data.cMode 
274a0 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f  = data.mode = MO
274b0 44 45 5f 50 72 65 74 74 79 3b 0a 20 20 20 20 20  DE_Pretty;.     
274c0 20 6e 41 72 67 2d 2d 3b 0a 20 20 20 20 20 20 69   nArg--;.      i
274d0 66 28 20 6e 41 72 67 3d 3d 32 20 29 20 61 7a 41  f( nArg==2 ) azA
274e0 72 67 5b 31 5d 20 3d 20 61 7a 41 72 67 5b 32 5d  rg[1] = azArg[2]
274f0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
27500 6e 41 72 67 3d 3d 32 20 26 26 20 61 7a 41 72 67  nArg==2 && azArg
27510 5b 31 5d 5b 30 5d 21 3d 27 2d 27 20 29 7b 0a 20  [1][0]!='-' ){. 
27520 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
27530 20 20 66 6f 72 28 69 3d 30 3b 20 61 7a 41 72 67    for(i=0; azArg
27540 5b 31 5d 5b 69 5d 3b 20 69 2b 2b 29 20 61 7a 41  [1][i]; i++) azA
27550 72 67 5b 31 5d 5b 69 5d 20 3d 20 54 6f 4c 6f 77  rg[1][i] = ToLow
27560 65 72 28 61 7a 41 72 67 5b 31 5d 5b 69 5d 29 3b  er(azArg[1][i]);
27570 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d  .      if( strcm
27580 70 28 61 7a 41 72 67 5b 31 5d 2c 22 73 71 6c 69  p(azArg[1],"sqli
27590 74 65 5f 6d 61 73 74 65 72 22 29 3d 3d 30 20 29  te_master")==0 )
275a0 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a  {.        char *
275b0 6e 65 77 5f 61 72 67 76 5b 32 5d 2c 20 2a 6e 65  new_argv[2], *ne
275c0 77 5f 63 6f 6c 76 5b 32 5d 3b 0a 20 20 20 20 20  w_colv[2];.     
275d0 20 20 20 6e 65 77 5f 61 72 67 76 5b 30 5d 20 3d     new_argv[0] =
275e0 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 73   "CREATE TABLE s
275f0 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 5c 6e  qlite_master (\n
27600 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
27610 20 20 20 20 20 20 20 20 22 20 20 74 79 70 65 20          "  type 
27620 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20  text,\n".       
27630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27640 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a    name text,\n".
27650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27660 20 20 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d        "  tbl_nam
27670 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20  e text,\n".     
27680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27690 20 22 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74   "  rootpage int
276a0 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20 20 20 20  eger,\n".       
276b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
276c0 20 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20    sql text\n".  
276d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276e0 20 20 20 20 22 29 22 3b 0a 20 20 20 20 20 20 20      ")";.       
276f0 20 6e 65 77 5f 61 72 67 76 5b 31 5d 20 3d 20 30   new_argv[1] = 0
27700 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f  ;.        new_co
27710 6c 76 5b 30 5d 20 3d 20 22 73 71 6c 22 3b 0a 20  lv[0] = "sql";. 
27720 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76 5b         new_colv[
27730 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  1] = 0;.        
27740 63 61 6c 6c 62 61 63 6b 28 26 64 61 74 61 2c 20  callback(&data, 
27750 31 2c 20 6e 65 77 5f 61 72 67 76 2c 20 6e 65 77  1, new_argv, new
27760 5f 63 6f 6c 76 29 3b 0a 20 20 20 20 20 20 20 20  _colv);.        
27770 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
27780 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
27790 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  strcmp(azArg[1],
277a0 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
277b0 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ter")==0 ){.    
277c0 20 20 20 20 63 68 61 72 20 2a 6e 65 77 5f 61 72      char *new_ar
277d0 67 76 5b 32 5d 2c 20 2a 6e 65 77 5f 63 6f 6c 76  gv[2], *new_colv
277e0 5b 32 5d 3b 0a 20 20 20 20 20 20 20 20 6e 65 77  [2];.        new
277f0 5f 61 72 67 76 5b 30 5d 20 3d 20 22 43 52 45 41  _argv[0] = "CREA
27800 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 73 71  TE TEMP TABLE sq
27810 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
27820 20 28 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20   (\n".          
27830 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 74              "  t
27840 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ype text,\n".   
27850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27860 20 20 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c     "  name text,
27870 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n".            
27880 20 20 20 20 20 20 20 20 20 20 22 20 20 74 62 6c            "  tbl
27890 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20  _name text,\n". 
278a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278b0 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65       "  rootpage
278c0 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20   integer,\n".   
278d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278e0 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e     "  sql text\n
278f0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
27900 20 20 20 20 20 20 20 20 22 29 22 3b 0a 20 20 20          ")";.   
27910 20 20 20 20 20 6e 65 77 5f 61 72 67 76 5b 31 5d       new_argv[1]
27920 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6e 65   = 0;.        ne
27930 77 5f 63 6f 6c 76 5b 30 5d 20 3d 20 22 73 71 6c  w_colv[0] = "sql
27940 22 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63  ";.        new_c
27950 6f 6c 76 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  olv[1] = 0;.    
27960 20 20 20 20 63 61 6c 6c 62 61 63 6b 28 26 64 61      callback(&da
27970 74 61 2c 20 31 2c 20 6e 65 77 5f 61 72 67 76 2c  ta, 1, new_argv,
27980 20 6e 65 77 5f 63 6f 6c 76 29 3b 0a 20 20 20 20   new_colv);.    
27990 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
279a0 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  OK;.      }else{
279b0 0a 20 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20  .        zDiv = 
279c0 22 28 22 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  "(";.      }.   
279d0 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d   }else if( nArg=
279e0 3d 31 20 29 7b 0a 20 20 20 20 20 20 7a 44 69 76  =1 ){.      zDiv
279f0 20 3d 20 22 28 22 3b 0a 20 20 20 20 7d 65 6c 73   = "(";.    }els
27a00 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
27a10 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
27a20 67 65 3a 20 2e 73 63 68 65 6d 61 20 3f 2d 2d 69  ge: .schema ?--i
27a30 6e 64 65 6e 74 3f 20 3f 4c 49 4b 45 2d 50 41 54  ndent? ?LIKE-PAT
27a40 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20 20  TERN?\n");.     
27a50 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
27a60 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
27a70 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
27a80 20 69 66 28 20 7a 44 69 76 20 29 7b 0a 20 20 20   if( zDiv ){.   
27a90 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20     sqlite3_stmt 
27aa0 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20 20  *pStmt = 0;.    
27ab0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
27ac0 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
27ad0 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   "SELECT name FR
27ae0 4f 4d 20 70 72 61 67 6d 61 5f 64 61 74 61 62 61  OM pragma_databa
27af0 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20 20 20 20  se_list",.      
27b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b10 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74          -1, &pSt
27b20 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  mt, 0);.      if
27b30 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20  ( rc ){.        
27b40 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
27b50 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e  rr, "Error: %s\n
27b60 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
27b70 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
27b80 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
27b90 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  ize(pStmt);.    
27ba0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
27bb0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
27bc0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
27bd0 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64    }.      append
27be0 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22  Text(&sSelect, "
27bf0 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 22  SELECT sql FROM"
27c00 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 53 63 68  , 0);.      iSch
27c10 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 20 20 77  ema = 0;.      w
27c20 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74  hile( sqlite3_st
27c30 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
27c40 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20  E_ROW ){.       
27c50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
27c60 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
27c70 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
27c80 65 78 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20  ext(pStmt, 0);. 
27c90 20 20 20 20 20 20 20 63 68 61 72 20 7a 53 63 4e         char zScN
27ca0 75 6d 5b 33 30 5d 3b 0a 20 20 20 20 20 20 20 20  um[30];.        
27cb0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
27cc0 28 73 69 7a 65 6f 66 28 7a 53 63 4e 75 6d 29 2c  (sizeof(zScNum),
27cd0 20 7a 53 63 4e 75 6d 2c 20 22 25 64 22 2c 20 2b   zScNum, "%d", +
27ce0 2b 69 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20  +iSchema);.     
27cf0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
27d00 53 65 6c 65 63 74 2c 20 7a 44 69 76 2c 20 30 29  Select, zDiv, 0)
27d10 3b 0a 20 20 20 20 20 20 20 20 7a 44 69 76 20 3d  ;.        zDiv =
27d20 20 22 20 55 4e 49 4f 4e 20 41 4c 4c 20 22 3b 0a   " UNION ALL ";.
27d30 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63          if( strc
27d40 6d 70 28 7a 44 62 2c 20 22 6d 61 69 6e 22 29 21  mp(zDb, "main")!
27d50 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
27d60 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
27d70 65 63 74 2c 20 22 53 45 4c 45 43 54 20 73 68 65  ect, "SELECT she
27d80 6c 6c 5f 61 64 64 5f 73 63 68 65 6d 61 28 73 71  ll_add_schema(sq
27d90 6c 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  l,", 0);.       
27da0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
27db0 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20 27 22 27  Select, zDb, '"'
27dc0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70  );.          app
27dd0 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
27de0 2c 20 22 29 20 41 53 20 73 71 6c 2c 20 74 79 70  , ") AS sql, typ
27df0 65 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d  e, tbl_name, nam
27e00 65 2c 20 72 6f 77 69 64 2c 22 2c 20 30 29 3b 0a  e, rowid,", 0);.
27e10 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64            append
27e20 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a  Text(&sSelect, z
27e30 53 63 4e 75 6d 2c 20 30 29 3b 0a 20 20 20 20 20  ScNum, 0);.     
27e40 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
27e50 26 73 53 65 6c 65 63 74 2c 20 22 20 41 53 20 73  &sSelect, " AS s
27e60 6e 75 6d 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20  num, ", 0);.    
27e70 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
27e80 28 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20  (&sSelect, zDb, 
27e90 27 5c 27 27 29 3b 0a 20 20 20 20 20 20 20 20 20  '\'');.         
27ea0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
27eb0 6c 65 63 74 2c 20 22 20 41 53 20 73 6e 61 6d 65  lect, " AS sname
27ec0 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20   FROM ", 0);.   
27ed0 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
27ee0 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c  t(&sSelect, zDb,
27ef0 20 27 22 27 29 3b 0a 20 20 20 20 20 20 20 20 20   '"');.         
27f00 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
27f10 6c 65 63 74 2c 20 22 2e 73 71 6c 69 74 65 5f 6d  lect, ".sqlite_m
27f20 61 73 74 65 72 22 2c 20 30 29 3b 0a 20 20 20 20  aster", 0);.    
27f30 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
27f40 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
27f50 26 73 53 65 6c 65 63 74 2c 20 22 53 45 4c 45 43  &sSelect, "SELEC
27f60 54 20 73 71 6c 2c 20 74 79 70 65 2c 20 74 62 6c  T sql, type, tbl
27f70 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f 77  _name, name, row
27f80 69 64 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  id, ", 0);.     
27f90 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
27fa0 26 73 53 65 6c 65 63 74 2c 20 7a 53 63 4e 75 6d  &sSelect, zScNum
27fb0 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
27fc0 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
27fd0 65 63 74 2c 20 22 20 41 53 20 73 6e 75 6d 2c 20  ect, " AS snum, 
27fe0 27 6d 61 69 6e 27 20 41 53 20 73 6e 61 6d 65 20  'main' AS sname 
27ff0 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
28000 65 72 22 2c 30 29 3b 0a 20 20 20 20 20 20 20 20  er",0);.        
28010 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
28020 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
28030 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 61  (pStmt);.      a
28040 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
28050 63 74 2c 20 22 29 20 57 48 45 52 45 20 22 2c 20  ct, ") WHERE ", 
28060 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 41  0);.      if( nA
28070 72 67 3e 31 20 29 7b 0a 20 20 20 20 20 20 20 20  rg>1 ){.        
28080 63 68 61 72 20 2a 7a 51 61 72 67 20 3d 20 73 71  char *zQarg = sq
28090 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
280a0 51 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  Q", azArg[1]);. 
280b0 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 68         if( strch
280c0 72 28 61 7a 41 72 67 5b 31 5d 2c 20 27 2e 27 29  r(azArg[1], '.')
280d0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
280e0 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
280f0 74 2c 20 22 6c 6f 77 65 72 28 70 72 69 6e 74 66  t, "lower(printf
28100 28 27 25 73 2e 25 73 27 2c 73 6e 61 6d 65 2c 74  ('%s.%s',sname,t
28110 62 6c 5f 6e 61 6d 65 29 29 22 2c 20 30 29 3b 0a  bl_name))", 0);.
28120 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
28130 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54           appendT
28140 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 6c  ext(&sSelect, "l
28150 6f 77 65 72 28 74 62 6c 5f 6e 61 6d 65 29 22 2c  ower(tbl_name)",
28160 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   0);.        }. 
28170 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
28180 74 28 26 73 53 65 6c 65 63 74 2c 20 73 74 72 63  t(&sSelect, strc
28190 68 72 28 61 7a 41 72 67 5b 31 5d 2c 20 27 2a 27  hr(azArg[1], '*'
281a0 29 20 3f 20 22 20 47 4c 4f 42 20 22 20 3a 20 22  ) ? " GLOB " : "
281b0 20 4c 49 4b 45 20 22 2c 20 30 29 3b 0a 20 20 20   LIKE ", 0);.   
281c0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
281d0 26 73 53 65 6c 65 63 74 2c 20 7a 51 61 72 67 2c  &sSelect, zQarg,
281e0 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70   0);.        app
281f0 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
28200 2c 20 22 20 41 4e 44 20 22 2c 20 30 29 3b 0a 20  , " AND ", 0);. 
28210 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
28220 72 65 65 28 7a 51 61 72 67 29 3b 0a 20 20 20 20  ree(zQarg);.    
28230 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64    }.      append
28240 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22  Text(&sSelect, "
28250 74 79 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44  type!='meta' AND
28260 20 73 71 6c 20 49 53 20 4e 4f 54 20 4e 55 4c 4c   sql IS NOT NULL
28270 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
28280 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f               " O
28290 52 44 45 52 20 42 59 20 73 6e 75 6d 2c 20 72 6f  RDER BY snum, ro
282a0 77 69 64 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  wid", 0);.      
282b0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
282c0 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c 65 63 74  c(p->db, sSelect
282d0 2e 7a 2c 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64  .z, callback, &d
282e0 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a  ata, &zErrMsg);.
282f0 20 20 20 20 20 20 66 72 65 65 54 65 78 74 28 26        freeText(&
28300 73 53 65 6c 65 63 74 29 3b 0a 20 20 20 20 7d 0a  sSelect);.    }.
28310 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20      if( zErrMsg 
28320 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
28330 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72  intf(stderr,"Err
28340 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d  or: %s\n", zErrM
28350 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  sg);.      sqlit
28360 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
28370 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
28380 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63      }else if( rc
28390 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
283a0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
283b0 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
283c0 20 71 75 65 72 79 69 6e 67 20 73 63 68 65 6d 61   querying schema
283d0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29   information\n")
283e0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
283f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
28400 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20   rc = 0;.    }. 
28410 20 7d 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69   }else..#if defi
28420 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
28430 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
28440 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43  ITE_ENABLE_SELEC
28450 54 54 52 41 43 45 29 0a 20 20 69 66 28 20 63 3d  TTRACE).  if( c=
28460 3d 27 73 27 20 26 26 20 6e 3d 3d 31 31 20 26 26  ='s' && n==11 &&
28470 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
28480 5d 2c 20 22 73 65 6c 65 63 74 74 72 61 63 65 22  ], "selecttrace"
28490 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  , n)==0 ){.    s
284a0 71 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63  qlite3SelectTrac
284b0 65 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72  e = (int)integer
284c0 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b  Value(azArg[1]);
284d0 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
284e0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
284f0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49  ITE_ENABLE_SESSI
28500 4f 4e 29 0a 20 20 69 66 28 20 63 3d 3d 27 73 27  ON).  if( c=='s'
28510 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
28520 67 5b 30 5d 2c 22 73 65 73 73 69 6f 6e 22 2c 6e  g[0],"session",n
28530 29 3d 3d 30 20 26 26 20 6e 3e 3d 33 20 29 7b 0a  )==0 && n>=3 ){.
28540 20 20 20 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20      OpenSession 
28550 2a 70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e  *pSession = &p->
28560 61 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a 20 20 20  aSession[0];.   
28570 20 63 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20   char **azCmd = 
28580 26 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 69  &azArg[1];.    i
28590 6e 74 20 69 53 65 73 20 3d 20 30 3b 0a 20 20 20  nt iSes = 0;.   
285a0 20 69 6e 74 20 6e 43 6d 64 20 3d 20 6e 41 72 67   int nCmd = nArg
285b0 20 2d 20 31 3b 0a 20 20 20 20 69 6e 74 20 69 3b   - 1;.    int i;
285c0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c 3d 31  .    if( nArg<=1
285d0 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f   ) goto session_
285e0 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20  syntax_error;.  
285f0 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
28600 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 33  .    if( nArg>=3
28610 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 53   ){.      for(iS
28620 65 73 3d 30 3b 20 69 53 65 73 3c 70 2d 3e 6e 53  es=0; iSes<p->nS
28630 65 73 73 69 6f 6e 3b 20 69 53 65 73 2b 2b 29 7b  ession; iSes++){
28640 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
28650 63 6d 70 28 70 2d 3e 61 53 65 73 73 69 6f 6e 5b  cmp(p->aSession[
28660 69 53 65 73 5d 2e 7a 4e 61 6d 65 2c 20 61 7a 41  iSes].zName, azA
28670 72 67 5b 31 5d 29 3d 3d 30 20 29 20 62 72 65 61  rg[1])==0 ) brea
28680 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
28690 20 69 66 28 20 69 53 65 73 3c 70 2d 3e 6e 53 65   if( iSes<p->nSe
286a0 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ssion ){.       
286b0 20 70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e   pSession = &p->
286c0 61 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d 3b 0a  aSession[iSes];.
286d0 20 20 20 20 20 20 20 20 61 7a 43 6d 64 2b 2b 3b          azCmd++;
286e0 0a 20 20 20 20 20 20 20 20 6e 43 6d 64 2d 2d 3b  .        nCmd--;
286f0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
28700 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d        pSession =
28710 20 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 30 5d   &p->aSession[0]
28720 3b 0a 20 20 20 20 20 20 20 20 69 53 65 73 20 3d  ;.        iSes =
28730 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
28740 7d 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69  }..    /* .sessi
28750 6f 6e 20 61 74 74 61 63 68 20 54 41 42 4c 45 0a  on attach TABLE.
28760 20 20 20 20 2a 2a 20 49 6e 76 6f 6b 65 20 74 68      ** Invoke th
28770 65 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e  e sqlite3session
28780 5f 61 74 74 61 63 68 28 29 20 69 6e 74 65 72 66  _attach() interf
28790 61 63 65 20 74 6f 20 61 74 74 61 63 68 20 61 20  ace to attach a 
287a0 70 61 72 74 69 63 75 6c 61 72 0a 20 20 20 20 2a  particular.    *
287b0 2a 20 74 61 62 6c 65 20 73 6f 20 74 68 61 74 20  * table so that 
287c0 69 74 20 69 73 20 6e 65 76 65 72 20 66 69 6c 74  it is never filt
287d0 65 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ered..    */.   
287e0 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d   if( strcmp(azCm
287f0 64 5b 30 5d 2c 22 61 74 74 61 63 68 22 29 3d 3d  d[0],"attach")==
28800 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  0 ){.      if( n
28810 43 6d 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65  Cmd!=2 ) goto se
28820 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
28830 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53  or;.      if( pS
28840 65 73 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 7b 0a  ession->p==0 ){.
28850 20 20 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5f          session_
28860 6e 6f 74 5f 6f 70 65 6e 3a 0a 20 20 20 20 20 20  not_open:.      
28870 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
28880 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 20  err, "ERROR: No 
28890 73 65 73 73 69 6f 6e 73 20 61 72 65 20 6f 70 65  sessions are ope
288a0 6e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  n\n");.      }el
288b0 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  se{.        rc =
288c0 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f   sqlite3session_
288d0 61 74 74 61 63 68 28 70 53 65 73 73 69 6f 6e 2d  attach(pSession-
288e0 3e 70 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20  >p, azCmd[1]);. 
288f0 20 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b         if( rc ){
28900 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
28910 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
28920 52 52 4f 52 3a 20 73 71 6c 69 74 65 33 73 65 73  RROR: sqlite3ses
28930 73 69 6f 6e 5f 61 74 74 61 63 68 28 29 20 72 65  sion_attach() re
28940 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63 29  turns %d\n", rc)
28950 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  ;.          rc =
28960 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
28970 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a      }.    }else.
28980 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
28990 20 63 68 61 6e 67 65 73 65 74 20 46 49 4c 45 0a   changeset FILE.
289a0 20 20 20 20 2a 2a 20 2e 73 65 73 73 69 6f 6e 20      ** .session 
289b0 70 61 74 63 68 73 65 74 20 46 49 4c 45 0a 20 20  patchset FILE.  
289c0 20 20 2a 2a 20 57 72 69 74 65 20 61 20 63 68 61    ** Write a cha
289d0 6e 67 65 73 65 74 20 6f 72 20 70 61 74 63 68 73  ngeset or patchs
289e0 65 74 20 69 6e 74 6f 20 61 20 66 69 6c 65 2e 20  et into a file. 
289f0 20 54 68 65 20 66 69 6c 65 20 69 73 20 6f 76 65   The file is ove
28a00 72 77 72 69 74 74 65 6e 2e 0a 20 20 20 20 2a 2f  rwritten..    */
28a10 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28  .    if( strcmp(
28a20 61 7a 43 6d 64 5b 30 5d 2c 22 63 68 61 6e 67 65  azCmd[0],"change
28a30 73 65 74 22 29 3d 3d 30 20 7c 7c 20 73 74 72 63  set")==0 || strc
28a40 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 22 70 61 74  mp(azCmd[0],"pat
28a50 63 68 73 65 74 22 29 3d 3d 30 20 29 7b 0a 20 20  chset")==0 ){.  
28a60 20 20 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20      FILE *out = 
28a70 30 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  0;.      if( nCm
28a80 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73  d!=2 ) goto sess
28a90 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
28aa0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53 65 73  ;.      if( pSes
28ab0 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 20 67 6f 74  sion->p==0 ) got
28ac0 6f 20 73 65 73 73 69 6f 6e 5f 6e 6f 74 5f 6f 70  o session_not_op
28ad0 65 6e 3b 0a 20 20 20 20 20 20 6f 75 74 20 3d 20  en;.      out = 
28ae0 66 6f 70 65 6e 28 61 7a 43 6d 64 5b 31 5d 2c 20  fopen(azCmd[1], 
28af0 22 77 62 22 29 3b 0a 20 20 20 20 20 20 69 66 28  "wb");.      if(
28b00 20 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20   out==0 ){.     
28b10 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
28b20 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 63  tderr, "ERROR: c
28b30 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c  annot open \"%s\
28b40 22 20 66 6f 72 20 77 72 69 74 69 6e 67 5c 6e 22  " for writing\n"
28b50 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20  , azCmd[1]);.   
28b60 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
28b70 20 20 69 6e 74 20 73 7a 43 68 6e 67 3b 0a 20 20    int szChng;.  
28b80 20 20 20 20 20 20 76 6f 69 64 20 2a 70 43 68 6e        void *pChn
28b90 67 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61  g;.        if( a
28ba0 7a 43 6d 64 5b 30 5d 5b 30 5d 3d 3d 27 63 27 20  zCmd[0][0]=='c' 
28bb0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
28bc0 3d 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e  = sqlite3session
28bd0 5f 63 68 61 6e 67 65 73 65 74 28 70 53 65 73 73  _changeset(pSess
28be0 69 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68 6e 67 2c  ion->p, &szChng,
28bf0 20 26 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20   &pChng);.      
28c00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
28c10 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73     rc = sqlite3s
28c20 65 73 73 69 6f 6e 5f 70 61 74 63 68 73 65 74 28  ession_patchset(
28c30 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 26 73 7a  pSession->p, &sz
28c40 43 68 6e 67 2c 20 26 70 43 68 6e 67 29 3b 0a 20  Chng, &pChng);. 
28c50 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
28c60 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
28c70 20 20 20 20 20 70 72 69 6e 74 66 28 22 45 72 72       printf("Err
28c80 6f 72 3a 20 65 72 72 6f 72 20 63 6f 64 65 20 25  or: error code %
28c90 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20  d\n", rc);.     
28ca0 20 20 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20       rc = 0;.   
28cb0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
28cc0 66 28 20 70 43 68 6e 67 0a 20 20 20 20 20 20 20  f( pChng.       
28cd0 20 20 20 26 26 20 66 77 72 69 74 65 28 70 43 68     && fwrite(pCh
28ce0 6e 67 2c 20 73 7a 43 68 6e 67 2c 20 31 2c 20 6f  ng, szChng, 1, o
28cf0 75 74 29 21 3d 31 20 29 7b 0a 20 20 20 20 20 20  ut)!=1 ){.      
28d00 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
28d10 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 46  tderr, "ERROR: F
28d20 61 69 6c 65 64 20 74 6f 20 77 72 69 74 65 20 65  ailed to write e
28d30 6e 74 69 72 65 20 25 64 2d 62 79 74 65 20 6f 75  ntire %d-byte ou
28d40 74 70 75 74 5c 6e 22 2c 0a 20 20 20 20 20 20 20  tput\n",.       
28d50 20 20 20 20 20 20 20 20 20 20 20 73 7a 43 68 6e             szChn
28d60 67 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  g);.        }.  
28d70 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
28d80 65 65 28 70 43 68 6e 67 29 3b 0a 20 20 20 20 20  ee(pChng);.     
28d90 20 20 20 66 63 6c 6f 73 65 28 6f 75 74 29 3b 0a     fclose(out);.
28da0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
28db0 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69  e..    /* .sessi
28dc0 6f 6e 20 63 6c 6f 73 65 0a 20 20 20 20 2a 2a 20  on close.    ** 
28dd0 43 6c 6f 73 65 20 74 68 65 20 69 64 65 6e 74 69  Close the identi
28de0 66 69 65 64 20 73 65 73 73 69 6f 6e 0a 20 20 20  fied session.   
28df0 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63   */.    if( strc
28e00 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 63 6c  mp(azCmd[0], "cl
28e10 6f 73 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ose")==0 ){.    
28e20 20 20 69 66 28 20 6e 43 6d 64 21 3d 31 20 29 20    if( nCmd!=1 ) 
28e30 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e  goto session_syn
28e40 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  tax_error;.     
28e50 20 69 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e   if( p->nSession
28e60 20 29 7b 0a 20 20 20 20 20 20 20 20 73 65 73 73   ){.        sess
28e70 69 6f 6e 5f 63 6c 6f 73 65 28 70 53 65 73 73 69  ion_close(pSessi
28e80 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  on);.        p->
28e90 61 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d 20 3d  aSession[iSes] =
28ea0 20 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 2d 2d 70   p->aSession[--p
28eb0 2d 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20  ->nSession];.   
28ec0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a     }.    }else..
28ed0 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20      /* .session 
28ee0 65 6e 61 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f  enable ?BOOLEAN?
28ef0 0a 20 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72  .    ** Query or
28f00 20 73 65 74 20 74 68 65 20 65 6e 61 62 6c 65 20   set the enable 
28f10 66 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20  flag.    */.    
28f20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64  if( strcmp(azCmd
28f30 5b 30 5d 2c 20 22 65 6e 61 62 6c 65 22 29 3d 3d  [0], "enable")==
28f40 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  0 ){.      int i
28f50 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  i;.      if( nCm
28f60 64 3e 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69  d>2 ) goto sessi
28f70 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
28f80 0a 20 20 20 20 20 20 69 69 20 3d 20 6e 43 6d 64  .      ii = nCmd
28f90 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c 65  ==1 ? -1 : boole
28fa0 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31 5d  anValue(azCmd[1]
28fb0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
28fc0 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20  nSession ){.    
28fd0 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33      ii = sqlite3
28fe0 73 65 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28 70  session_enable(p
28ff0 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 69 69 29 3b  Session->p, ii);
29000 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
29010 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65  intf(p->out, "se
29020 73 73 69 6f 6e 20 25 73 20 65 6e 61 62 6c 65 20  ssion %s enable 
29030 66 6c 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20 20  flag = %d\n",.  
29040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29050 20 20 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d    pSession->zNam
29060 65 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 7d 0a  e, ii);.      }.
29070 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f      }else..    /
29080 2a 20 2e 73 65 73 73 69 6f 6e 20 66 69 6c 74 65  * .session filte
29090 72 20 47 4c 4f 42 20 2e 2e 2e 2e 0a 20 20 20 20  r GLOB .....    
290a0 2a 2a 20 53 65 74 20 61 20 6c 69 73 74 20 6f 66  ** Set a list of
290b0 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 6f   GLOB patterns o
290c0 66 20 74 61 62 6c 65 20 6e 61 6d 65 73 20 74 6f  f table names to
290d0 20 62 65 20 65 78 63 6c 75 64 65 64 2e 0a 20 20   be excluded..  
290e0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72    */.    if( str
290f0 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 66  cmp(azCmd[0], "f
29100 69 6c 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20  ilter")==0 ){.  
29110 20 20 20 20 69 6e 74 20 69 69 2c 20 6e 42 79 74      int ii, nByt
29120 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  e;.      if( nCm
29130 64 3c 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69  d<2 ) goto sessi
29140 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
29150 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
29160 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
29170 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70    for(ii=0; ii<p
29180 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72  Session->nFilter
29190 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
291a0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
291b0 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74  pSession->azFilt
291c0 65 72 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 20  er[ii]);.       
291d0 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
291e0 65 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e  e3_free(pSession
291f0 2d 3e 61 7a 46 69 6c 74 65 72 29 3b 0a 20 20 20  ->azFilter);.   
29200 20 20 20 20 20 6e 42 79 74 65 20 3d 20 73 69 7a       nByte = siz
29210 65 6f 66 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a  eof(pSession->az
29220 46 69 6c 74 65 72 5b 30 5d 29 2a 28 6e 43 6d 64  Filter[0])*(nCmd
29230 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 70 53 65  -1);.        pSe
29240 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 20  ssion->azFilter 
29250 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  = sqlite3_malloc
29260 28 20 6e 42 79 74 65 20 29 3b 0a 20 20 20 20 20  ( nByte );.     
29270 20 20 20 69 66 28 20 70 53 65 73 73 69 6f 6e 2d     if( pSession-
29280 3e 61 7a 46 69 6c 74 65 72 3d 3d 30 20 29 7b 0a  >azFilter==0 ){.
29290 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
292a0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
292b0 72 6f 72 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f  ror: out or memo
292c0 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  ry\n");.        
292d0 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20    exit(1);.     
292e0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72     }.        for
292f0 28 69 69 3d 31 3b 20 69 69 3c 6e 43 6d 64 3b 20  (ii=1; ii<nCmd; 
29300 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
29310 20 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c   pSession->azFil
29320 74 65 72 5b 69 69 2d 31 5d 20 3d 20 73 71 6c 69  ter[ii-1] = sqli
29330 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
29340 2c 20 61 7a 43 6d 64 5b 69 69 5d 29 3b 0a 20 20  , azCmd[ii]);.  
29350 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
29360 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65  pSession->nFilte
29370 72 20 3d 20 69 69 2d 31 3b 0a 20 20 20 20 20 20  r = ii-1;.      
29380 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20  }.    }else..   
29390 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 69 6e 64   /* .session ind
293a0 69 72 65 63 74 20 3f 42 4f 4f 4c 45 41 4e 3f 0a  irect ?BOOLEAN?.
293b0 20 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20      ** Query or 
293c0 73 65 74 20 74 68 65 20 69 6e 64 69 72 65 63 74  set the indirect
293d0 20 66 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20   flag.    */.   
293e0 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d   if( strcmp(azCm
293f0 64 5b 30 5d 2c 20 22 69 6e 64 69 72 65 63 74 22  d[0], "indirect"
29400 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  )==0 ){.      in
29410 74 20 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20  t ii;.      if( 
29420 6e 43 6d 64 3e 32 20 29 20 67 6f 74 6f 20 73 65  nCmd>2 ) goto se
29430 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
29440 6f 72 3b 0a 20 20 20 20 20 20 69 69 20 3d 20 6e  or;.      ii = n
29450 43 6d 64 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f  Cmd==1 ? -1 : bo
29460 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64  oleanValue(azCmd
29470 5b 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  [1]);.      if( 
29480 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20  p->nSession ){. 
29490 20 20 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69         ii = sqli
294a0 74 65 33 73 65 73 73 69 6f 6e 5f 69 6e 64 69 72  te3session_indir
294b0 65 63 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c  ect(pSession->p,
294c0 20 69 69 29 3b 0a 20 20 20 20 20 20 20 20 75 74   ii);.        ut
294d0 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
294e0 2c 20 22 73 65 73 73 69 6f 6e 20 25 73 20 69 6e  , "session %s in
294f0 64 69 72 65 63 74 20 66 6c 61 67 20 3d 20 25 64  direct flag = %d
29500 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
29510 20 20 20 20 20 20 20 20 20 70 53 65 73 73 69 6f           pSessio
29520 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29 3b 0a 20  n->zName, ii);. 
29530 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
29540 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f  ..    /* .sessio
29550 6e 20 69 73 65 6d 70 74 79 0a 20 20 20 20 2a 2a  n isempty.    **
29560 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
29570 65 20 73 65 73 73 69 6f 6e 20 69 73 20 65 6d 70  e session is emp
29580 74 79 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  ty.    */.    if
29590 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30  ( strcmp(azCmd[0
295a0 5d 2c 20 22 69 73 65 6d 70 74 79 22 29 3d 3d 30  ], "isempty")==0
295b0 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69   ){.      int ii
295c0 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64  ;.      if( nCmd
295d0 21 3d 31 20 29 20 67 6f 74 6f 20 73 65 73 73 69  !=1 ) goto sessi
295e0 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
295f0 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
29600 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
29610 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65    ii = sqlite3se
29620 73 73 69 6f 6e 5f 69 73 65 6d 70 74 79 28 70 53  ssion_isempty(pS
29630 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20  ession->p);.    
29640 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
29650 70 2d 3e 6f 75 74 2c 20 22 73 65 73 73 69 6f 6e  p->out, "session
29660 20 25 73 20 69 73 65 6d 70 74 79 20 66 6c 61 67   %s isempty flag
29670 20 3d 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20   = %d\n",.      
29680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 53                pS
29690 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69  ession->zName, i
296a0 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  i);.      }.    
296b0 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73  }else..    /* .s
296c0 65 73 73 69 6f 6e 20 6c 69 73 74 0a 20 20 20 20  ession list.    
296d0 2a 2a 20 4c 69 73 74 20 61 6c 6c 20 63 75 72 72  ** List all curr
296e0 65 6e 74 6c 79 20 6f 70 65 6e 20 73 65 73 73 69  ently open sessi
296f0 6f 6e 73 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ons.    */.    i
29700 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
29710 30 5d 2c 22 6c 69 73 74 22 29 3d 3d 30 20 29 7b  0],"list")==0 ){
29720 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
29730 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69  i<p->nSession; i
29740 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  ++){.        utf
29750 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
29760 20 22 25 64 20 25 73 5c 6e 22 2c 20 69 2c 20 70   "%d %s\n", i, p
29770 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 5d 2e 7a 4e  ->aSession[i].zN
29780 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ame);.      }.  
29790 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20    }else..    /* 
297a0 2e 73 65 73 73 69 6f 6e 20 6f 70 65 6e 20 44 42  .session open DB
297b0 20 4e 41 4d 45 0a 20 20 20 20 2a 2a 20 4f 70 65   NAME.    ** Ope
297c0 6e 20 61 20 6e 65 77 20 73 65 73 73 69 6f 6e 20  n a new session 
297d0 63 61 6c 6c 65 64 20 4e 41 4d 45 20 6f 6e 20 74  called NAME on t
297e0 68 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61  he attached data
297f0 62 61 73 65 20 44 42 2e 0a 20 20 20 20 2a 2a 20  base DB..    ** 
29800 44 42 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 22  DB is normally "
29810 6d 61 69 6e 22 2e 0a 20 20 20 20 2a 2f 0a 20 20  main"..    */.  
29820 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43    if( strcmp(azC
29830 6d 64 5b 30 5d 2c 22 6f 70 65 6e 22 29 3d 3d 30  md[0],"open")==0
29840 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a   ){.      char *
29850 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20 69 66 28  zName;.      if(
29860 20 6e 43 6d 64 21 3d 33 20 29 20 67 6f 74 6f 20   nCmd!=3 ) goto 
29870 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65  session_syntax_e
29880 72 72 6f 72 3b 0a 20 20 20 20 20 20 7a 4e 61 6d  rror;.      zNam
29890 65 20 3d 20 61 7a 43 6d 64 5b 32 5d 3b 0a 20 20  e = azCmd[2];.  
298a0 20 20 20 20 69 66 28 20 7a 4e 61 6d 65 5b 30 5d      if( zName[0]
298b0 3d 3d 30 20 29 20 67 6f 74 6f 20 73 65 73 73 69  ==0 ) goto sessi
298c0 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
298d0 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
298e0 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69  i<p->nSession; i
298f0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
29900 20 73 74 72 63 6d 70 28 70 2d 3e 61 53 65 73 73   strcmp(p->aSess
29910 69 6f 6e 5b 69 5d 2e 7a 4e 61 6d 65 2c 7a 4e 61  ion[i].zName,zNa
29920 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  me)==0 ){.      
29930 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
29940 73 74 64 65 72 72 2c 20 22 53 65 73 73 69 6f 6e  stderr, "Session
29950 20 5c 22 25 73 5c 22 20 61 6c 72 65 61 64 79 20   \"%s\" already 
29960 65 78 69 73 74 73 5c 6e 22 2c 20 7a 4e 61 6d 65  exists\n", zName
29970 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
29980 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
29990 78 69 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  xit;.        }. 
299a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
299b0 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 3e 3d 41 72   p->nSession>=Ar
299c0 72 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73  raySize(p->aSess
299d0 69 6f 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ion) ){.        
299e0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
299f0 72 2c 20 22 4d 61 78 69 6d 75 6d 20 6f 66 20 25  r, "Maximum of %
29a00 64 20 73 65 73 73 69 6f 6e 73 5c 6e 22 2c 20 41  d sessions\n", A
29a10 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73  rraySize(p->aSes
29a20 73 69 6f 6e 29 29 3b 0a 20 20 20 20 20 20 20 20  sion));.        
29a30 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
29a40 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a  d_exit;.      }.
29a50 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d        pSession =
29a60 20 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 70 2d   &p->aSession[p-
29a70 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20  >nSession];.    
29a80 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65    rc = sqlite3se
29a90 73 73 69 6f 6e 5f 63 72 65 61 74 65 28 70 2d 3e  ssion_create(p->
29aa0 64 62 2c 20 61 7a 43 6d 64 5b 31 5d 2c 20 26 70  db, azCmd[1], &p
29ab0 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20  Session->p);.   
29ac0 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
29ad0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
29ae0 73 74 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20  stderr, "Cannot 
29af0 6f 70 65 6e 20 73 65 73 73 69 6f 6e 3a 20 65 72  open session: er
29b00 72 6f 72 20 63 6f 64 65 3d 25 64 5c 6e 22 2c 20  ror code=%d\n", 
29b10 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  rc);.        rc 
29b20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 0;.        got
29b30 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
29b40 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  xit;.      }.   
29b50 20 20 20 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69     pSession->nFi
29b60 6c 74 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20  lter = 0;.      
29b70 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 74  sqlite3session_t
29b80 61 62 6c 65 5f 66 69 6c 74 65 72 28 70 53 65 73  able_filter(pSes
29b90 73 69 6f 6e 2d 3e 70 2c 20 73 65 73 73 69 6f 6e  sion->p, session
29ba0 5f 66 69 6c 74 65 72 2c 20 70 53 65 73 73 69 6f  _filter, pSessio
29bb0 6e 29 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 65  n);.      p->nSe
29bc0 73 73 69 6f 6e 2b 2b 3b 0a 20 20 20 20 20 20 70  ssion++;.      p
29bd0 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 20 3d  Session->zName =
29be0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
29bf0 28 22 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  ("%s", zName);. 
29c00 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 2f 2a 20     }else.    /* 
29c10 49 66 20 6e 6f 20 63 6f 6d 6d 61 6e 64 20 6e 61  If no command na
29c20 6d 65 20 6d 61 74 63 68 65 73 2c 20 73 68 6f 77  me matches, show
29c30 20 61 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20   a syntax error 
29c40 2a 2f 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 73  */.    session_s
29c50 79 6e 74 61 78 5f 65 72 72 6f 72 3a 0a 20 20 20  yntax_error:.   
29c60 20 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28 70 29   session_help(p)
29c70 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
29c80 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
29c90 44 45 42 55 47 0a 20 20 2f 2a 20 55 6e 64 6f 63  DEBUG.  /* Undoc
29ca0 75 6d 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 73  umented commands
29cb0 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 74 65   for internal te
29cc0 73 74 69 6e 67 2e 20 20 53 75 62 6a 65 63 74 20  sting.  Subject 
29cd0 74 6f 20 63 68 61 6e 67 65 0a 20 20 2a 2a 20 77  to change.  ** w
29ce0 69 74 68 6f 75 74 20 6e 6f 74 69 63 65 2e 20 2a  ithout notice. *
29cf0 2f 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26  /.  if( c=='s' &
29d00 26 20 6e 3e 3d 31 30 20 26 26 20 73 74 72 6e 63  & n>=10 && strnc
29d10 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 65  mp(azArg[0], "se
29d20 6c 66 74 65 73 74 2d 22 2c 20 39 29 3d 3d 30 20  lftest-", 9)==0 
29d30 29 7b 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63  ){.    if( strnc
29d40 6d 70 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22  mp(azArg[0]+9, "
29d50 62 6f 6f 6c 65 61 6e 22 2c 20 6e 2d 39 29 3d 3d  boolean", n-9)==
29d60 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  0 ){.      int i
29d70 2c 20 76 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  , v;.      for(i
29d80 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =1; i<nArg; i++)
29d90 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 62 6f  {.        v = bo
29da0 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
29db0 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 75 74  [i]);.        ut
29dc0 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
29dd0 2c 20 22 25 73 3a 20 25 64 20 30 78 25 78 5c 6e  , "%s: %d 0x%x\n
29de0 22 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 76 2c 20  ", azArg[i], v, 
29df0 76 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  v);.      }.    
29e00 7d 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d  }.    if( strncm
29e10 70 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 69  p(azArg[0]+9, "i
29e20 6e 74 65 67 65 72 22 2c 20 6e 2d 39 29 3d 3d 30  nteger", n-9)==0
29e30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b   ){.      int i;
29e40 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 76   sqlite3_int64 v
29e50 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b  ;.      for(i=1;
29e60 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
29e70 20 20 20 20 20 20 20 63 68 61 72 20 7a 42 75 66         char zBuf
29e80 5b 32 30 30 5d 3b 0a 20 20 20 20 20 20 20 20 76  [200];.        v
29e90 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28   = integerValue(
29ea0 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20  azArg[i]);.     
29eb0 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
29ec0 6e 74 66 28 73 69 7a 65 6f 66 28 7a 42 75 66 29  ntf(sizeof(zBuf)
29ed0 2c 7a 42 75 66 2c 22 25 73 3a 20 25 6c 6c 64 20  ,zBuf,"%s: %lld 
29ee0 30 78 25 6c 6c 78 5c 6e 22 2c 20 61 7a 41 72 67  0x%llx\n", azArg
29ef0 5b 69 5d 2c 76 2c 76 29 3b 0a 20 20 20 20 20 20  [i],v,v);.      
29f00 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
29f10 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66  >out, "%s", zBuf
29f20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
29f30 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
29f40 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26  .  if( c=='s' &&
29f50 20 6e 3e 3d 34 20 26 26 20 73 74 72 6e 63 6d 70   n>=4 && strncmp
29f60 28 61 7a 41 72 67 5b 30 5d 2c 22 73 65 6c 66 74  (azArg[0],"selft
29f70 65 73 74 22 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20  est",n)==0 ){.  
29f80 20 20 69 6e 74 20 62 49 73 49 6e 69 74 20 3d 20    int bIsInit = 
29f90 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  0;         /* Tr
29fa0 75 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ue to initialize
29fb0 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74 61   the SELFTEST ta
29fc0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62  ble */.    int b
29fd0 56 65 72 62 6f 73 65 20 3d 20 30 3b 20 20 20 20  Verbose = 0;    
29fe0 20 20 20 20 2f 2a 20 56 65 72 62 6f 73 65 20 6f      /* Verbose o
29ff0 75 74 70 75 74 20 2a 2f 0a 20 20 20 20 69 6e 74  utput */.    int
2a000 20 62 53 65 6c 66 74 65 73 74 45 78 69 73 74 73   bSelftestExists
2a010 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
2a020 20 53 45 4c 46 54 45 53 54 20 61 6c 72 65 61 64   SELFTEST alread
2a030 79 20 65 78 69 73 74 73 20 2a 2f 0a 20 20 20 20  y exists */.    
2a040 69 6e 74 20 69 2c 20 6b 3b 20 20 20 20 20 20 20  int i, k;       
2a050 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
2a060 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20   counters */.   
2a070 20 69 6e 74 20 6e 54 65 73 74 20 3d 20 30 3b 20   int nTest = 0; 
2a080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2a090 62 65 72 20 6f 66 20 74 65 73 74 73 20 72 75 6e  ber of tests run
2a0a0 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 45 72  s */.    int nEr
2a0b0 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
2a0c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
2a0d0 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
2a0e0 20 20 53 68 65 6c 6c 54 65 78 74 20 73 74 72 3b    ShellText str;
2a0f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e             /* An
2a100 73 77 65 72 20 66 6f 72 20 61 20 71 75 65 72 79  swer for a query
2a110 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   */.    sqlite3_
2a120 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b  stmt *pStmt = 0;
2a130 20 2f 2a 20 51 75 65 72 79 20 61 67 61 69 6e 73   /* Query agains
2a140 74 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74  t the SELFTEST t
2a150 61 62 6c 65 20 2a 2f 0a 0a 20 20 20 20 6f 70 65  able */..    ope
2a160 6e 5f 64 62 28 70 2c 30 29 3b 0a 20 20 20 20 66  n_db(p,0);.    f
2a170 6f 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20  or(i=1; i<nArg; 
2a180 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  i++){.      cons
2a190 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72  t char *z = azAr
2a1a0 67 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  g[i];.      if( 
2a1b0 7a 5b 30 5d 3d 3d 27 2d 27 20 26 26 20 7a 5b 31  z[0]=='-' && z[1
2a1c0 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20  ]=='-' ) z++;.  
2a1d0 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
2a1e0 2c 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a  ,"-init")==0 ){.
2a1f0 20 20 20 20 20 20 20 20 62 49 73 49 6e 69 74 20          bIsInit 
2a200 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 1;.      }else
2a210 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d  .      if( strcm
2a220 70 28 7a 2c 22 2d 76 22 29 3d 3d 30 20 29 7b 0a  p(z,"-v")==0 ){.
2a230 20 20 20 20 20 20 20 20 62 56 65 72 62 6f 73 65          bVerbose
2a240 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a  ++;.      }else.
2a250 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2a260 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2a270 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74  rr, "Unknown opt
2a280 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22  ion \"%s\" on \"
2a290 25 73 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20  %s\"\n",.       
2a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
2a2b0 72 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29  rg[i], azArg[0])
2a2c0 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  ;.        raw_pr
2a2d0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 68  intf(stderr, "Sh
2a2e0 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20  ould be one of: 
2a2f0 2d 2d 69 6e 69 74 20 2d 76 5c 6e 22 29 3b 0a 20  --init -v\n");. 
2a300 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2a310 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2a320 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2a330 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
2a340 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74 61 62   if( sqlite3_tab
2a350 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
2a360 74 61 28 70 2d 3e 64 62 2c 22 6d 61 69 6e 22 2c  ta(p->db,"main",
2a370 22 73 65 6c 66 74 65 73 74 22 2c 30 2c 30 2c 30  "selftest",0,0,0
2a380 2c 30 2c 30 2c 30 29 0a 20 20 20 20 20 20 20 20  ,0,0,0).        
2a390 20 20 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20     != SQLITE_OK 
2a3a0 29 7b 0a 20 20 20 20 20 20 62 53 65 6c 66 74 65  ){.      bSelfte
2a3b0 73 74 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20  stExists = 0;.  
2a3c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 62    }else{.      b
2a3d0 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d  SelftestExists =
2a3e0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   1;.    }.    if
2a3f0 28 20 62 49 73 49 6e 69 74 20 29 7b 0a 20 20 20  ( bIsInit ){.   
2a400 20 20 20 63 72 65 61 74 65 53 65 6c 66 74 65 73     createSelftes
2a410 74 54 61 62 6c 65 28 70 29 3b 0a 20 20 20 20 20  tTable(p);.     
2a420 20 62 53 65 6c 66 74 65 73 74 45 78 69 73 74 73   bSelftestExists
2a430 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
2a440 69 6e 69 74 54 65 78 74 28 26 73 74 72 29 3b 0a  initText(&str);.
2a450 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
2a460 73 74 72 2c 20 22 78 22 2c 20 30 29 3b 0a 20 20  str, "x", 0);.  
2a470 20 20 66 6f 72 28 6b 3d 62 53 65 6c 66 74 65 73    for(k=bSelftes
2a480 74 45 78 69 73 74 73 3b 20 6b 3e 3d 30 3b 20 6b  tExists; k>=0; k
2a490 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6b  --){.      if( k
2a4a0 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==1 ){.        r
2a4b0 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
2a4c0 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20  are_v2(p->db,.  
2a4d0 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43            "SELEC
2a4e0 54 20 74 6e 6f 2c 6f 70 2c 63 6d 64 2c 61 6e 73  T tno,op,cmd,ans
2a4f0 20 46 52 4f 4d 20 73 65 6c 66 74 65 73 74 20 4f   FROM selftest O
2a500 52 44 45 52 20 42 59 20 74 6e 6f 22 2c 0a 20 20  RDER BY tno",.  
2a510 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70            -1, &p
2a520 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20  Stmt, 0);.      
2a530 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
2a540 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
2a550 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20  are_v2(p->db,.  
2a560 20 20 20 20 20 20 20 20 22 56 41 4c 55 45 53 28          "VALUES(
2a570 30 2c 27 6d 65 6d 6f 27 2c 27 4d 69 73 73 69 6e  0,'memo','Missin
2a580 67 20 53 45 4c 46 54 45 53 54 20 74 61 62 6c 65  g SELFTEST table
2a590 20 2d 20 64 65 66 61 75 6c 74 20 63 68 65 63 6b   - default check
2a5a0 73 20 6f 6e 6c 79 27 2c 27 27 29 2c 22 0a 20 20  s only',''),".  
2a5b0 20 20 20 20 20 20 20 20 22 20 20 20 20 20 20 28          "      (
2a5c0 31 2c 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20  1,'run','PRAGMA 
2a5d0 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27  integrity_check'
2a5e0 2c 27 6f 6b 27 29 22 2c 0a 20 20 20 20 20 20 20  ,'ok')",.       
2a5f0 20 20 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30     -1, &pStmt, 0
2a600 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
2a610 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
2a620 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2a630 64 65 72 72 2c 20 22 45 72 72 6f 72 20 71 75 65  derr, "Error que
2a640 72 79 69 6e 67 20 74 68 65 20 73 65 6c 66 74 65  rying the selfte
2a650 73 74 20 74 61 62 6c 65 5c 6e 22 29 3b 0a 20 20  st table\n");.  
2a660 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2a670 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
2a680 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
2a690 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2a6a0 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2a6b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72       }.      for
2a6c0 28 69 3d 31 3b 20 73 71 6c 69 74 65 33 5f 73 74  (i=1; sqlite3_st
2a6d0 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
2a6e0 45 5f 52 4f 57 3b 20 69 2b 2b 29 7b 0a 20 20 20  E_ROW; i++){.   
2a6f0 20 20 20 20 20 69 6e 74 20 74 6e 6f 20 3d 20 73       int tno = s
2a700 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
2a710 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20  t(pStmt, 0);.   
2a720 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
2a730 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73 74 20 63 68  *zOp = (const ch
2a740 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
2a750 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31  mn_text(pStmt, 1
2a760 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74  );.        const
2a770 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 28 63   char *zSql = (c
2a780 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
2a790 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
2a7a0 53 74 6d 74 2c 20 32 29 3b 0a 20 20 20 20 20 20  Stmt, 2);.      
2a7b0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
2a7c0 6e 73 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  ns = (const char
2a7d0 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
2a7e0 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 33 29 3b  _text(pStmt, 3);
2a7f0 0a 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b  ..        k = 0;
2a800 0a 20 20 20 20 20 20 20 20 69 66 28 20 62 56 65  .        if( bVe
2a810 72 62 6f 73 65 3e 30 20 29 7b 0a 20 20 20 20 20  rbose>0 ){.     
2a820 20 20 20 20 20 63 68 61 72 20 2a 7a 51 75 6f 74       char *zQuot
2a830 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e = sqlite3_mpri
2a840 6e 74 66 28 22 25 71 22 2c 20 7a 53 71 6c 29 3b  ntf("%q", zSql);
2a850 0a 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74  .          print
2a860 66 28 22 25 64 3a 20 25 73 20 25 73 5c 6e 22 2c  f("%d: %s %s\n",
2a870 20 74 6e 6f 2c 20 7a 4f 70 2c 20 7a 53 71 6c 29   tno, zOp, zSql)
2a880 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
2a890 74 65 33 5f 66 72 65 65 28 7a 51 75 6f 74 65 29  te3_free(zQuote)
2a8a0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2a8b0 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
2a8c0 4f 70 2c 22 6d 65 6d 6f 22 29 3d 3d 30 20 29 7b  Op,"memo")==0 ){
2a8d0 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
2a8e0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2a8f0 25 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20  %s\n", zSql);.  
2a900 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20        }else.    
2a910 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
2a920 4f 70 2c 22 72 75 6e 22 29 3d 3d 30 20 29 7b 0a  Op,"run")==0 ){.
2a930 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
2a940 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
2a950 20 20 20 20 20 20 20 73 74 72 2e 6e 20 3d 20 30         str.n = 0
2a960 3b 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 2e  ;.          str.
2a970 7a 5b 30 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  z[0] = 0;.      
2a980 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2a990 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71  _exec(p->db, zSq
2a9a0 6c 2c 20 63 61 70 74 75 72 65 4f 75 74 70 75 74  l, captureOutput
2a9b0 43 61 6c 6c 62 61 63 6b 2c 20 26 73 74 72 2c 20  Callback, &str, 
2a9c0 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
2a9d0 20 20 20 20 20 6e 54 65 73 74 2b 2b 3b 0a 20 20       nTest++;.  
2a9e0 20 20 20 20 20 20 20 20 69 66 28 20 62 56 65 72          if( bVer
2a9f0 62 6f 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20  bose ){.        
2aa00 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2aa10 70 2d 3e 6f 75 74 2c 20 22 52 65 73 75 6c 74 3a  p->out, "Result:
2aa20 20 25 73 5c 6e 22 2c 20 73 74 72 2e 7a 29 3b 0a   %s\n", str.z);.
2aa30 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2aa40 20 20 20 20 20 20 69 66 28 20 72 63 20 7c 7c 20        if( rc || 
2aa50 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20  zErrMsg ){.     
2aa60 20 20 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a 20         nErr++;. 
2aa70 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
2aa80 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  1;.            u
2aa90 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
2aaa0 74 2c 20 22 25 64 3a 20 65 72 72 6f 72 2d 63 6f  t, "%d: error-co
2aab0 64 65 2d 25 64 3a 20 25 73 5c 6e 22 2c 20 74 6e  de-%d: %s\n", tn
2aac0 6f 2c 20 72 63 2c 20 7a 45 72 72 4d 73 67 29 3b  o, rc, zErrMsg);
2aad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
2aae0 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73  ite3_free(zErrMs
2aaf0 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  g);.          }e
2ab00 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
2ab10 41 6e 73 2c 73 74 72 2e 7a 29 21 3d 30 20 29 7b  Ans,str.z)!=0 ){
2ab20 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 45 72  .            nEr
2ab30 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  r++;.           
2ab40 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   rc = 1;.       
2ab50 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2ab60 28 70 2d 3e 6f 75 74 2c 20 22 25 64 3a 20 45 78  (p->out, "%d: Ex
2ab70 70 65 63 74 65 64 3a 20 5b 25 73 5d 5c 6e 22 2c  pected: [%s]\n",
2ab80 20 74 6e 6f 2c 20 7a 41 6e 73 29 3b 0a 20 20 20   tno, zAns);.   
2ab90 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
2aba0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64  intf(p->out, "%d
2abb0 3a 20 20 20 20 20 20 47 6f 74 3a 20 5b 25 73 5d  :      Got: [%s]
2abc0 5c 6e 22 2c 20 74 6e 6f 2c 20 73 74 72 2e 7a 29  \n", tno, str.z)
2abd0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
2abe0 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20        }else.    
2abf0 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
2ac00 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2ac10 72 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  rr,.            
2ac20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69  "Unknown operati
2ac30 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 73 65 6c  on \"%s\" on sel
2ac40 66 74 65 73 74 20 6c 69 6e 65 20 25 64 5c 6e 22  ftest line %d\n"
2ac50 2c 20 7a 4f 70 2c 20 74 6e 6f 29 3b 0a 20 20 20  , zOp, tno);.   
2ac60 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2ac70 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2ac80 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2ac90 7d 20 2f 2a 20 45 6e 64 20 6c 6f 6f 70 20 6f 76  } /* End loop ov
2aca0 65 72 20 72 6f 77 73 20 6f 66 20 63 6f 6e 74 65  er rows of conte
2acb0 6e 74 20 66 72 6f 6d 20 53 45 4c 46 54 45 53 54  nt from SELFTEST
2acc0 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
2acd0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
2ace0 29 3b 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20  );.    } /* End 
2acf0 6c 6f 6f 70 20 6f 76 65 72 20 6b 20 2a 2f 0a 20  loop over k */. 
2ad00 20 20 20 66 72 65 65 54 65 78 74 28 26 73 74 72     freeText(&str
2ad10 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2ad20 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 65  tf(p->out, "%d e
2ad30 72 72 6f 72 73 20 6f 75 74 20 6f 66 20 25 64 20  rrors out of %d 
2ad40 74 65 73 74 73 5c 6e 22 2c 20 6e 45 72 72 2c 20  tests\n", nErr, 
2ad50 6e 54 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 0a  nTest);.  }else.
2ad60 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26  .  if( c=='s' &&
2ad70 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2ad80 5d 2c 20 22 73 65 70 61 72 61 74 6f 72 22 2c 20  ], "separator", 
2ad90 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
2ada0 20 6e 41 72 67 3c 32 20 7c 7c 20 6e 41 72 67 3e   nArg<2 || nArg>
2adb0 33 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  3 ){.      raw_p
2adc0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
2add0 73 61 67 65 3a 20 2e 73 65 70 61 72 61 74 6f 72  sage: .separator
2ade0 20 43 4f 4c 20 3f 52 4f 57 3f 5c 6e 22 29 3b 0a   COL ?ROW?\n");.
2adf0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2ae00 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67    }.    if( nArg
2ae10 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  >=2 ){.      sql
2ae20 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
2ae30 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72  zeof(p->colSepar
2ae40 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70  ator), p->colSep
2ae50 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20  arator,.        
2ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2ae70 25 2e 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61  %.*s", (int)Arra
2ae80 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 53 65 70 61  ySize(p->colSepa
2ae90 72 61 74 6f 72 29 2d 31 2c 20 61 7a 41 72 67 5b  rator)-1, azArg[
2aea0 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  1]);.    }.    i
2aeb0 66 28 20 6e 41 72 67 3e 3d 33 20 29 7b 0a 20 20  f( nArg>=3 ){.  
2aec0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2aed0 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72  intf(sizeof(p->r
2aee0 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d  owSeparator), p-
2aef0 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20  >rowSeparator,. 
2af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af10 20 20 20 20 20 20 22 25 2e 2a 73 22 2c 20 28 69        "%.*s", (i
2af20 6e 74 29 41 72 72 61 79 53 69 7a 65 28 70 2d 3e  nt)ArraySize(p->
2af30 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2d 31 2c  rowSeparator)-1,
2af40 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20   azArg[2]);.    
2af50 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
2af60 20 63 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 34 20   c=='s' && n>=4 
2af70 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
2af80 5b 30 5d 2c 22 73 68 61 33 73 75 6d 22 2c 6e 29  [0],"sha3sum",n)
2af90 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ==0 ){.    const
2afa0 20 63 68 61 72 20 2a 7a 4c 69 6b 65 20 3d 20 30   char *zLike = 0
2afb0 3b 20 20 20 2f 2a 20 57 68 69 63 68 20 74 61 62  ;   /* Which tab
2afc0 6c 65 20 74 6f 20 63 68 65 63 6b 73 75 6d 2e 20  le to checksum. 
2afd0 30 20 6d 65 61 6e 73 20 65 76 65 72 79 74 68 69  0 means everythi
2afe0 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b  ng */.    int i;
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b000 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
2b010 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 53  er */.    int bS
2b020 63 68 65 6d 61 20 3d 20 30 3b 20 20 20 20 20 20  chema = 0;      
2b030 20 20 20 2f 2a 20 41 6c 73 6f 20 68 61 73 68 20     /* Also hash 
2b040 74 68 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  the schema */.  
2b050 20 20 69 6e 74 20 62 53 65 70 61 72 61 74 65 20    int bSeparate 
2b060 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  = 0;       /* Ha
2b070 73 68 20 65 61 63 68 20 74 61 62 6c 65 20 73 65  sh each table se
2b080 70 61 72 61 74 65 6c 79 20 2a 2f 0a 20 20 20 20  parately */.    
2b090 69 6e 74 20 69 53 69 7a 65 20 3d 20 32 32 34 3b  int iSize = 224;
2b0a0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68           /* Hash
2b0b0 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
2b0c0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 44 65  e */.    int bDe
2b0d0 62 75 67 20 3d 20 30 3b 20 20 20 20 20 20 20 20  bug = 0;        
2b0e0 20 20 2f 2a 20 4f 6e 6c 79 20 73 68 6f 77 20 74    /* Only show t
2b0f0 68 65 20 71 75 65 72 79 20 74 68 61 74 20 77 6f  he query that wo
2b100 75 6c 64 20 68 61 76 65 20 72 75 6e 20 2a 2f 0a  uld have run */.
2b110 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
2b120 20 2a 70 53 74 6d 74 3b 20 20 20 20 20 2f 2a 20   *pStmt;     /* 
2b130 46 6f 72 20 71 75 65 72 79 69 6e 67 20 74 61 62  For querying tab
2b140 6c 65 73 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 20  les names */.   
2b150 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20   char *zSql;    
2b160 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c            /* SQL
2b170 20 74 6f 20 62 65 20 72 75 6e 20 2a 2f 0a 20 20   to be run */.  
2b180 20 20 63 68 61 72 20 2a 7a 53 65 70 3b 20 20 20    char *zSep;   
2b190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65             /* Se
2b1a0 70 61 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 53  parator */.    S
2b1b0 68 65 6c 6c 54 65 78 74 20 73 53 71 6c 3b 20 20  hellText sSql;  
2b1c0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
2b1d0 65 74 65 20 53 51 4c 20 66 6f 72 20 74 68 65 20  ete SQL for the 
2b1e0 71 75 65 72 79 20 74 6f 20 72 75 6e 20 74 68 65  query to run the
2b1f0 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 53 68 65   hash */.    She
2b200 6c 6c 54 65 78 74 20 73 51 75 65 72 79 3b 20 20  llText sQuery;  
2b210 20 20 20 20 20 20 2f 2a 20 53 65 74 20 6f 66 20        /* Set of 
2b220 71 75 65 72 69 65 73 20 75 73 65 64 20 74 6f 20  queries used to 
2b230 72 65 61 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  read all content
2b240 20 2a 2f 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   */.    open_db(
2b250 70 2c 20 30 29 3b 0a 20 20 20 20 66 6f 72 28 69  p, 0);.    for(i
2b260 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =1; i<nArg; i++)
2b270 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
2b280 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d  ar *z = azArg[i]
2b290 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d  ;.      if( z[0]
2b2a0 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20  =='-' ){.       
2b2b0 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66   z++;.        if
2b2c0 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b  ( z[0]=='-' ) z+
2b2d0 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  +;.        if( s
2b2e0 74 72 63 6d 70 28 7a 2c 22 73 63 68 65 6d 61 22  trcmp(z,"schema"
2b2f0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
2b300 20 20 62 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20    bSchema = 1;. 
2b310 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20         }else.   
2b320 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
2b330 7a 2c 22 73 68 61 33 2d 32 32 34 22 29 3d 3d 30  z,"sha3-224")==0
2b340 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68   || strcmp(z,"sh
2b350 61 33 2d 32 35 36 22 29 3d 3d 30 0a 20 20 20 20  a3-256")==0.    
2b360 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a       || strcmp(z
2b370 2c 22 73 68 61 33 2d 33 38 34 22 29 3d 3d 30 20  ,"sha3-384")==0 
2b380 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61  || strcmp(z,"sha
2b390 33 2d 35 31 32 22 29 3d 3d 30 0a 20 20 20 20 20  3-512")==0.     
2b3a0 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20     ){.          
2b3b0 69 53 69 7a 65 20 3d 20 61 74 6f 69 28 26 7a 5b  iSize = atoi(&z[
2b3c0 35 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  5]);.        }el
2b3d0 73 65 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  se.        if( s
2b3e0 74 72 63 6d 70 28 7a 2c 22 64 65 62 75 67 22 29  trcmp(z,"debug")
2b3f0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
2b400 20 62 44 65 62 75 67 20 3d 20 31 3b 0a 20 20 20   bDebug = 1;.   
2b410 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20       }else.     
2b420 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75     {.          u
2b430 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
2b440 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69  r, "Unknown opti
2b450 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25  on \"%s\" on \"%
2b460 73 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  s\"\n",.        
2b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a                az
2b480 41 72 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d  Arg[i], azArg[0]
2b490 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  );.          raw
2b4a0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2b4b0 22 53 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f  "Should be one o
2b4c0 66 3a 20 2d 2d 73 63 68 65 6d 61 22 0a 20 20 20  f: --schema".   
2b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4e0 20 20 20 20 20 20 20 20 20 20 22 20 2d 2d 73 68            " --sh
2b4f0 61 33 2d 32 32 34 20 2d 2d 73 68 61 33 2d 32 35  a3-224 --sha3-25
2b500 35 20 2d 2d 73 68 61 33 2d 33 38 34 20 2d 2d 73  5 --sha3-384 --s
2b510 68 61 33 2d 35 31 32 5c 6e 22 29 3b 0a 20 20 20  ha3-512\n");.   
2b520 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2b530 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65           goto me
2b540 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
2b550 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2b560 20 7d 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b 65   }else if( zLike
2b570 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
2b580 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2b590 55 73 61 67 65 3a 20 2e 73 68 61 33 73 75 6d 20  Usage: .sha3sum 
2b5a0 3f 4f 50 54 49 4f 4e 53 3f 20 3f 4c 49 4b 45 2d  ?OPTIONS? ?LIKE-
2b5b0 50 41 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20  PATTERN?\n");.  
2b5c0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2b5d0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
2b5e0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
2b5f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2b600 20 20 20 7a 4c 69 6b 65 20 3d 20 7a 3b 0a 20 20     zLike = z;.  
2b610 20 20 20 20 20 20 62 53 65 70 61 72 61 74 65 20        bSeparate 
2b620 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
2b630 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65   sqlite3_strlike
2b640 28 22 73 71 6c 69 74 65 5f 25 22 2c 20 7a 4c 69  ("sqlite_%", zLi
2b650 6b 65 2c 20 30 29 3d 3d 30 20 29 20 62 53 63 68  ke, 0)==0 ) bSch
2b660 65 6d 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  ema = 1;.      }
2b670 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 62  .    }.    if( b
2b680 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20  Schema ){.      
2b690 7a 53 71 6c 20 3d 20 22 53 45 4c 45 43 54 20 6c  zSql = "SELECT l
2b6a0 6f 77 65 72 28 6e 61 6d 65 29 20 46 52 4f 4d 20  ower(name) FROM 
2b6b0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20  sqlite_master". 
2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48              " WH
2b6d0 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
2b6e0 20 41 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f   AND coalesce(ro
2b6f0 6f 74 70 61 67 65 2c 30 29 3e 31 22 0a 20 20 20  otpage,0)>1".   
2b700 20 20 20 20 20 20 20 20 20 20 22 20 55 4e 49 4f            " UNIO
2b710 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 27 73 71  N ALL SELECT 'sq
2b720 6c 69 74 65 5f 6d 61 73 74 65 72 27 22 0a 20 20  lite_master'".  
2b730 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44             " ORD
2b740 45 52 20 42 59 20 31 20 63 6f 6c 6c 61 74 65 20  ER BY 1 collate 
2b750 6e 6f 63 61 73 65 22 3b 0a 20 20 20 20 7d 65 6c  nocase";.    }el
2b760 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d  se{.      zSql =
2b770 20 22 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 6e   "SELECT lower(n
2b780 61 6d 65 29 20 46 52 4f 4d 20 73 71 6c 69 74 65  ame) FROM sqlite
2b790 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20 20  _master".       
2b7a0 20 20 20 20 20 20 22 20 57 48 45 52 45 20 74 79        " WHERE ty
2b7b0 70 65 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 63  pe='table' AND c
2b7c0 6f 61 6c 65 73 63 65 28 72 6f 6f 74 70 61 67 65  oalesce(rootpage
2b7d0 2c 30 29 3e 31 22 0a 20 20 20 20 20 20 20 20 20  ,0)>1".         
2b7e0 20 20 20 20 22 20 41 4e 44 20 6e 61 6d 65 20 4e      " AND name N
2b7f0 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f  OT LIKE 'sqlite_
2b800 25 27 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  %'".            
2b810 20 22 20 4f 52 44 45 52 20 42 59 20 31 20 63 6f   " ORDER BY 1 co
2b820 6c 6c 61 74 65 20 6e 6f 63 61 73 65 22 3b 0a 20  llate nocase";. 
2b830 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
2b840 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
2b850 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53  b, zSql, -1, &pS
2b860 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6e 69  tmt, 0);.    ini
2b870 74 54 65 78 74 28 26 73 51 75 65 72 79 29 3b 0a  tText(&sQuery);.
2b880 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 53      initText(&sS
2b890 71 6c 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  ql);.    appendT
2b8a0 65 78 74 28 26 73 53 71 6c 2c 20 22 57 49 54 48  ext(&sSql, "WITH
2b8b0 20 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d   [sha3sum$query]
2b8c0 28 61 2c 62 29 20 41 53 28 22 2c 30 29 3b 0a 20  (a,b) AS(",0);. 
2b8d0 20 20 20 7a 53 65 70 20 3d 20 22 56 41 4c 55 45     zSep = "VALUE
2b8e0 53 28 22 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  S(";.    while( 
2b8f0 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69  SQLITE_ROW==sqli
2b900 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 20  te3_step(pStmt) 
2b910 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
2b920 68 61 72 20 2a 7a 54 61 62 20 3d 20 28 63 6f 6e  har *zTab = (con
2b930 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
2b940 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
2b950 6d 74 2c 30 29 3b 0a 20 20 20 20 20 20 69 66 28  mt,0);.      if(
2b960 20 7a 4c 69 6b 65 20 26 26 20 73 71 6c 69 74 65   zLike && sqlite
2b970 33 5f 73 74 72 6c 69 6b 65 28 7a 4c 69 6b 65 2c  3_strlike(zLike,
2b980 20 7a 54 61 62 2c 20 30 29 21 3d 30 20 29 20 63   zTab, 0)!=0 ) c
2b990 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69  ontinue;.      i
2b9a0 66 28 20 73 74 72 6e 63 6d 70 28 7a 54 61 62 2c  f( strncmp(zTab,
2b9b0 20 22 73 71 6c 69 74 65 5f 22 2c 37 29 21 3d 30   "sqlite_",7)!=0
2b9c0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65   ){.        appe
2b9d0 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 22  ndText(&sQuery,"
2b9e0 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 22 2c  SELECT * FROM ",
2b9f0 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70   0);.        app
2ba00 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c  endText(&sQuery,
2ba10 7a 54 61 62 2c 27 22 27 29 3b 0a 20 20 20 20 20  zTab,'"');.     
2ba20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
2ba30 51 75 65 72 79 2c 22 20 4e 4f 54 20 49 4e 44 45  Query," NOT INDE
2ba40 58 45 44 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20  XED;", 0);.     
2ba50 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
2ba60 70 28 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f  p(zTab, "sqlite_
2ba70 6d 61 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20  master")==0 ){. 
2ba80 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
2ba90 74 28 26 73 51 75 65 72 79 2c 22 53 45 4c 45 43  t(&sQuery,"SELEC
2baa0 54 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f  T type,name,tbl_
2bab0 6e 61 6d 65 2c 73 71 6c 20 46 52 4f 4d 20 73 71  name,sql FROM sq
2bac0 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20  lite_master".   
2bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bae0 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52 20          " ORDER 
2baf0 42 59 20 6e 61 6d 65 3b 22 2c 20 30 29 3b 0a 20  BY name;", 0);. 
2bb00 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
2bb10 74 72 63 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c  trcmp(zTab, "sql
2bb20 69 74 65 5f 73 65 71 75 65 6e 63 65 22 29 3d 3d  ite_sequence")==
2bb30 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70  0 ){.        app
2bb40 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c  endText(&sQuery,
2bb50 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 73 65 71  "SELECT name,seq
2bb60 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71   FROM sqlite_seq
2bb70 75 65 6e 63 65 22 0a 20 20 20 20 20 20 20 20 20  uence".         
2bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb90 20 20 22 20 4f 52 44 45 52 20 42 59 20 6e 61 6d    " ORDER BY nam
2bba0 65 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  e;", 0);.      }
2bbb0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2bbc0 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f 73 74  zTab, "sqlite_st
2bbd0 61 74 31 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  at1")==0 ){.    
2bbe0 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
2bbf0 73 51 75 65 72 79 2c 22 53 45 4c 45 43 54 20 74  sQuery,"SELECT t
2bc00 62 6c 2c 69 64 78 2c 73 74 61 74 20 46 52 4f 4d  bl,idx,stat FROM
2bc10 20 73 71 6c 69 74 65 5f 73 74 61 74 31 22 0a 20   sqlite_stat1". 
2bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc30 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44 45            " ORDE
2bc40 52 20 42 59 20 74 62 6c 2c 69 64 78 3b 22 2c 20  R BY tbl,idx;", 
2bc50 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  0);.      }else 
2bc60 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62 2c  if( strcmp(zTab,
2bc70 20 22 73 71 6c 69 74 65 5f 73 74 61 74 33 22 29   "sqlite_stat3")
2bc80 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
2bc90 20 7c 7c 20 73 74 72 63 6d 70 28 7a 54 61 62 2c   || strcmp(zTab,
2bca0 20 22 73 71 6c 69 74 65 5f 73 74 61 74 34 22 29   "sqlite_stat4")
2bcb0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
2bcc0 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65 72  ppendText(&sQuer
2bcd0 79 2c 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  y, "SELECT * FRO
2bce0 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  M ", 0);.       
2bcf0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75   appendText(&sQu
2bd00 65 72 79 2c 20 7a 54 61 62 2c 20 30 29 3b 0a 20  ery, zTab, 0);. 
2bd10 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
2bd20 74 28 26 73 51 75 65 72 79 2c 20 22 20 4f 52 44  t(&sQuery, " ORD
2bd30 45 52 20 42 59 20 74 62 6c 2c 20 69 64 78 2c 20  ER BY tbl, idx, 
2bd40 72 6f 77 69 64 3b 5c 6e 22 2c 20 30 29 3b 0a 20  rowid;\n", 0);. 
2bd50 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70       }.      app
2bd60 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a  endText(&sSql, z
2bd70 53 65 70 2c 20 30 29 3b 0a 20 20 20 20 20 20 61  Sep, 0);.      a
2bd80 70 70 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c  ppendText(&sSql,
2bd90 20 73 51 75 65 72 79 2e 7a 2c 20 27 5c 27 27 29   sQuery.z, '\'')
2bda0 3b 0a 20 20 20 20 20 20 73 51 75 65 72 79 2e 6e  ;.      sQuery.n
2bdb0 20 3d 20 30 3b 0a 20 20 20 20 20 20 61 70 70 65   = 0;.      appe
2bdc0 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 22 2c  ndText(&sSql, ",
2bdd0 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70  ", 0);.      app
2bde0 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a  endText(&sSql, z
2bdf0 54 61 62 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20  Tab, '\'');.    
2be00 20 20 7a 53 65 70 20 3d 20 22 29 2c 28 22 3b 0a    zSep = "),(";.
2be10 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
2be20 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
2be30 29 3b 0a 20 20 20 20 69 66 28 20 62 53 65 70 61  );.    if( bSepa
2be40 72 61 74 65 20 29 7b 0a 20 20 20 20 20 20 7a 53  rate ){.      zS
2be50 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
2be60 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20 20  intf(.          
2be70 22 25 73 29 29 22 0a 20 20 20 20 20 20 20 20 20  "%s))".         
2be80 20 22 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28   " SELECT lower(
2be90 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 61  hex(sha3_query(a
2bea0 2c 25 64 29 29 29 20 41 53 20 68 61 73 68 2c 20  ,%d))) AS hash, 
2beb0 62 20 41 53 20 6c 61 62 65 6c 22 0a 20 20 20 20  b AS label".    
2bec0 20 20 20 20 20 20 22 20 20 20 46 52 4f 4d 20 5b        "   FROM [
2bed0 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d 22 2c  sha3sum$query]",
2bee0 0a 20 20 20 20 20 20 20 20 20 20 73 53 71 6c 2e  .          sSql.
2bef0 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20 20 20 7d  z, iSize);.    }
2bf00 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c  else{.      zSql
2bf10 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2bf20 74 66 28 0a 20 20 20 20 20 20 20 20 20 20 22 25  tf(.          "%
2bf30 73 29 29 22 0a 20 20 20 20 20 20 20 20 20 20 22  s))".          "
2bf40 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65   SELECT lower(he
2bf50 78 28 73 68 61 33 5f 71 75 65 72 79 28 67 72 6f  x(sha3_query(gro
2bf60 75 70 5f 63 6f 6e 63 61 74 28 61 2c 27 27 29 2c  up_concat(a,''),
2bf70 25 64 29 29 29 20 41 53 20 68 61 73 68 22 0a 20  %d))) AS hash". 
2bf80 20 20 20 20 20 20 20 20 20 22 20 20 20 46 52 4f           "   FRO
2bf90 4d 20 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79  M [sha3sum$query
2bfa0 5d 22 2c 0a 20 20 20 20 20 20 20 20 20 20 73 53  ]",.          sS
2bfb0 71 6c 2e 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20  ql.z, iSize);.  
2bfc0 20 20 7d 0a 20 20 20 20 66 72 65 65 54 65 78 74    }.    freeText
2bfd0 28 26 73 51 75 65 72 79 29 3b 0a 20 20 20 20 66  (&sQuery);.    f
2bfe0 72 65 65 54 65 78 74 28 26 73 53 71 6c 29 3b 0a  reeText(&sSql);.
2bff0 20 20 20 20 69 66 28 20 62 44 65 62 75 67 20 29      if( bDebug )
2c000 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
2c010 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c  ntf(p->out, "%s\
2c020 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 7d  n", zSql);.    }
2c030 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 68 65 6c  else{.      shel
2c040 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53  l_exec(p->db, zS
2c050 71 6c 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61  ql, shell_callba
2c060 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20 20 20 7d  ck, p, 0);.    }
2c070 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
2c080 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65  e(zSql);.  }else
2c090 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 0a 20  ..  if( c=='s'. 
2c0a0 20 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a    && (strncmp(az
2c0b0 41 72 67 5b 30 5d 2c 20 22 73 68 65 6c 6c 22 2c  Arg[0], "shell",
2c0c0 20 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d   n)==0 || strncm
2c0d0 70 28 61 7a 41 72 67 5b 30 5d 2c 22 73 79 73 74  p(azArg[0],"syst
2c0e0 65 6d 22 2c 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a  em",n)==0).  ){.
2c0f0 20 20 20 20 63 68 61 72 20 2a 7a 43 6d 64 3b 0a      char *zCmd;.
2c100 20 20 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20      int i, x;.  
2c110 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a    if( nArg<2 ){.
2c120 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2c130 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
2c140 20 2e 73 79 73 74 65 6d 20 43 4f 4d 4d 41 4e 44   .system COMMAND
2c150 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
2c160 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
2c170 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
2c180 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 43 6d 64  ;.    }.    zCmd
2c190 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2c1a0 74 66 28 73 74 72 63 68 72 28 61 7a 41 72 67 5b  tf(strchr(azArg[
2c1b0 31 5d 2c 27 20 27 29 3d 3d 30 3f 22 25 73 22 3a  1],' ')==0?"%s":
2c1c0 22 5c 22 25 73 5c 22 22 2c 20 61 7a 41 72 67 5b  "\"%s\"", azArg[
2c1d0 31 5d 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 32  1]);.    for(i=2
2c1e0 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2c1f0 20 20 20 20 20 20 7a 43 6d 64 20 3d 20 73 71 6c        zCmd = sql
2c200 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 73 74 72  ite3_mprintf(str
2c210 63 68 72 28 61 7a 41 72 67 5b 69 5d 2c 27 20 27  chr(azArg[i],' '
2c220 29 3d 3d 30 3f 22 25 7a 20 25 73 22 3a 22 25 7a  )==0?"%z %s":"%z
2c230 20 5c 22 25 73 5c 22 22 2c 0a 20 20 20 20 20 20   \"%s\"",.      
2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c250 20 20 20 20 20 20 20 7a 43 6d 64 2c 20 61 7a 41         zCmd, azA
2c260 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  rg[i]);.    }.  
2c270 20 20 78 20 3d 20 73 79 73 74 65 6d 28 7a 43 6d    x = system(zCm
2c280 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  d);.    sqlite3_
2c290 66 72 65 65 28 7a 43 6d 64 29 3b 0a 20 20 20 20  free(zCmd);.    
2c2a0 69 66 28 20 78 20 29 20 72 61 77 5f 70 72 69 6e  if( x ) raw_prin
2c2b0 74 66 28 73 74 64 65 72 72 2c 20 22 53 79 73 74  tf(stderr, "Syst
2c2c0 65 6d 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72  em command retur
2c2d0 6e 73 20 25 64 5c 6e 22 2c 20 78 29 3b 0a 20 20  ns %d\n", x);.  
2c2e0 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
2c2f0 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  's' && strncmp(a
2c300 7a 41 72 67 5b 30 5d 2c 20 22 73 68 6f 77 22 2c  zArg[0], "show",
2c310 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74   n)==0 ){.    st
2c320 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2c330 2a 61 7a 42 6f 6f 6c 5b 5d 20 3d 20 7b 20 22 6f  *azBool[] = { "o
2c340 66 66 22 2c 20 22 6f 6e 22 2c 20 22 66 75 6c 6c  ff", "on", "full
2c350 22 2c 20 22 75 6e 6b 22 20 7d 3b 0a 20 20 20 20  ", "unk" };.    
2c360 69 6e 74 20 69 3b 0a 20 20 20 20 69 66 28 20 6e  int i;.    if( n
2c370 41 72 67 21 3d 31 20 29 7b 0a 20 20 20 20 20 20  Arg!=1 ){.      
2c380 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2c390 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 68 6f 77  r, "Usage: .show
2c3a0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
2c3b0 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
2c3c0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
2c3d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 75 74 66 38  ;.    }.    utf8
2c3e0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2c3f0 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c  "%12.12s: %s\n",
2c400 22 65 63 68 6f 22 2c 0a 20 20 20 20 20 20 20 20  "echo",.        
2c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c420 20 20 20 20 20 20 20 20 20 20 61 7a 42 6f 6f 6c            azBool
2c430 5b 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c  [ShellHasFlag(p,
2c440 20 53 48 46 4c 47 5f 45 63 68 6f 29 5d 29 3b 0a   SHFLG_Echo)]);.
2c450 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2c460 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73  p->out, "%12.12s
2c470 3a 20 25 73 5c 6e 22 2c 22 65 71 70 22 2c 20 61  : %s\n","eqp", a
2c480 7a 42 6f 6f 6c 5b 70 2d 3e 61 75 74 6f 45 51 50  zBool[p->autoEQP
2c490 26 33 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  &3]);.    utf8_p
2c4a0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2c4b0 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 65  12.12s: %s\n","e
2c4c0 78 70 6c 61 69 6e 22 2c 0a 20 20 20 20 20 20 20  xplain",.       
2c4d0 20 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f    p->mode==MODE_
2c4e0 45 78 70 6c 61 69 6e 20 3f 20 22 6f 6e 22 20 3a  Explain ? "on" :
2c4f0 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20   p->autoExplain 
2c500 3f 20 22 61 75 74 6f 22 20 3a 20 22 6f 66 66 22  ? "auto" : "off"
2c510 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2c520 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31  tf(p->out,"%12.1
2c530 32 73 3a 20 25 73 5c 6e 22 2c 22 68 65 61 64 65  2s: %s\n","heade
2c540 72 73 22 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 73  rs", azBool[p->s
2c550 68 6f 77 48 65 61 64 65 72 21 3d 30 5d 29 3b 0a  howHeader!=0]);.
2c560 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2c570 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73  p->out, "%12.12s
2c580 3a 20 25 73 5c 6e 22 2c 22 6d 6f 64 65 22 2c 20  : %s\n","mode", 
2c590 6d 6f 64 65 44 65 73 63 72 5b 70 2d 3e 6d 6f 64  modeDescr[p->mod
2c5a0 65 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  e]);.    utf8_pr
2c5b0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31  intf(p->out, "%1
2c5c0 32 2e 31 32 73 3a 20 22 2c 20 22 6e 75 6c 6c 76  2.12s: ", "nullv
2c5d0 61 6c 75 65 22 29 3b 0a 20 20 20 20 20 20 6f 75  alue");.      ou
2c5e0 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d  tput_c_string(p-
2c5f0 3e 6f 75 74 2c 20 70 2d 3e 6e 75 6c 6c 56 61 6c  >out, p->nullVal
2c600 75 65 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  ue);.      raw_p
2c610 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c  rintf(p->out, "\
2c620 6e 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  n");.    utf8_pr
2c630 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32  intf(p->out,"%12
2c640 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 6f 75 74  .12s: %s\n","out
2c650 70 75 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20  put",.          
2c660 20 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 6f 75    strlen30(p->ou
2c670 74 66 69 6c 65 29 20 3f 20 70 2d 3e 6f 75 74 66  tfile) ? p->outf
2c680 69 6c 65 20 3a 20 22 73 74 64 6f 75 74 22 29 3b  ile : "stdout");
2c690 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2c6a0 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31 32 73  (p->out,"%12.12s
2c6b0 3a 20 22 2c 20 22 63 6f 6c 73 65 70 61 72 61 74  : ", "colseparat
2c6c0 6f 72 22 29 3b 0a 20 20 20 20 20 20 6f 75 74 70  or");.      outp
2c6d0 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f  ut_c_string(p->o
2c6e0 75 74 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61  ut, p->colSepara
2c6f0 74 6f 72 29 3b 0a 20 20 20 20 20 20 72 61 77 5f  tor);.      raw_
2c700 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2c710 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  \n");.    utf8_p
2c720 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31  rintf(p->out,"%1
2c730 32 2e 31 32 73 3a 20 22 2c 20 22 72 6f 77 73 65  2.12s: ", "rowse
2c740 70 61 72 61 74 6f 72 22 29 3b 0a 20 20 20 20 20  parator");.     
2c750 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67   output_c_string
2c760 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 72 6f 77 53  (p->out, p->rowS
2c770 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
2c780 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
2c790 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75  ut, "\n");.    u
2c7a0 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
2c7b0 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c  t, "%12.12s: %s\
2c7c0 6e 22 2c 22 73 74 61 74 73 22 2c 20 61 7a 42 6f  n","stats", azBo
2c7d0 6f 6c 5b 70 2d 3e 73 74 61 74 73 4f 6e 21 3d 30  ol[p->statsOn!=0
2c7e0 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ]);.    utf8_pri
2c7f0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32  ntf(p->out, "%12
2c800 2e 31 32 73 3a 20 22 2c 20 22 77 69 64 74 68 22  .12s: ", "width"
2c810 29 3b 0a 20 20 20 20 66 6f 72 20 28 69 3d 30 3b  );.    for (i=0;
2c820 69 3c 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65  i<(int)ArraySize
2c830 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 20 26 26  (p->colWidth) &&
2c840 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 69 5d 20   p->colWidth[i] 
2c850 21 3d 20 30 3b 69 2b 2b 29 20 7b 0a 20 20 20 20  != 0;i++) {.    
2c860 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
2c870 6f 75 74 2c 20 22 25 64 20 22 2c 20 70 2d 3e 63  out, "%d ", p->c
2c880 6f 6c 57 69 64 74 68 5b 69 5d 29 3b 0a 20 20 20  olWidth[i]);.   
2c890 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74   }.    raw_print
2c8a0 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b  f(p->out, "\n");
2c8b0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2c8c0 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32  (p->out, "%12.12
2c8d0 73 3a 20 25 73 5c 6e 22 2c 20 22 66 69 6c 65 6e  s: %s\n", "filen
2c8e0 61 6d 65 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ame",.          
2c8f0 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65        p->zDbFile
2c900 6e 61 6d 65 20 3f 20 70 2d 3e 7a 44 62 46 69 6c  name ? p->zDbFil
2c910 65 6e 61 6d 65 20 3a 20 22 22 29 3b 0a 20 20 7d  ename : "");.  }
2c920 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
2c930 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  s' && strncmp(az
2c940 41 72 67 5b 30 5d 2c 20 22 73 74 61 74 73 22 2c  Arg[0], "stats",
2c950 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66   n)==0 ){.    if
2c960 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20  ( nArg==2 ){.   
2c970 20 20 20 70 2d 3e 73 74 61 74 73 4f 6e 20 3d 20     p->statsOn = 
2c980 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
2c990 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73  rg[1]);.    }els
2c9a0 65 20 69 66 28 20 6e 41 72 67 3d 3d 31 20 29 7b  e if( nArg==1 ){
2c9b0 0a 20 20 20 20 20 20 64 69 73 70 6c 61 79 5f 73  .      display_s
2c9c0 74 61 74 73 28 70 2d 3e 64 62 2c 20 70 2c 20 30  tats(p->db, p, 0
2c9d0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2c9e0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2c9f0 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
2ca00 73 74 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f 5c 6e  stats ?on|off?\n
2ca10 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2ca20 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
2ca30 0a 20 20 69 66 28 20 28 63 3d 3d 27 74 27 20 26  .  if( (c=='t' &
2ca40 26 20 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70  & n>1 && strncmp
2ca50 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 61 62 6c  (azArg[0], "tabl
2ca60 65 73 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 20 7c  es", n)==0).   |
2ca70 7c 20 28 63 3d 3d 27 69 27 20 26 26 20 28 73 74  | (c=='i' && (st
2ca80 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2ca90 22 69 6e 64 69 63 65 73 22 2c 20 6e 29 3d 3d 30  "indices", n)==0
2caa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cab0 20 20 7c 7c 20 73 74 72 6e 63 6d 70 28 61 7a 41    || strncmp(azA
2cac0 72 67 5b 30 5d 2c 20 22 69 6e 64 65 78 65 73 22  rg[0], "indexes"
2cad0 2c 20 6e 29 3d 3d 30 29 20 29 0a 20 20 29 7b 0a  , n)==0) ).  ){.
2cae0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
2caf0 20 2a 70 53 74 6d 74 3b 0a 20 20 20 20 63 68 61   *pStmt;.    cha
2cb00 72 20 2a 2a 61 7a 52 65 73 75 6c 74 3b 0a 20 20  r **azResult;.  
2cb10 20 20 69 6e 74 20 6e 52 6f 77 2c 20 6e 41 6c 6c    int nRow, nAll
2cb20 6f 63 3b 0a 20 20 20 20 69 6e 74 20 69 69 3b 0a  oc;.    int ii;.
2cb30 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20 73 3b      ShellText s;
2cb40 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73  .    initText(&s
2cb50 29 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70  );.    open_db(p
2cb60 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  , 0);.    rc = s
2cb70 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
2cb80 32 28 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41  2(p->db, "PRAGMA
2cb90 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 22 2c   database_list",
2cba0 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
2cbb0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 72 65  .    if( rc ) re
2cbc0 74 75 72 6e 20 73 68 65 6c 6c 44 61 74 61 62 61  turn shellDataba
2cbd0 73 65 45 72 72 6f 72 28 70 2d 3e 64 62 29 3b 0a  seError(p->db);.
2cbe0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 32 20  .    if( nArg>2 
2cbf0 26 26 20 63 3d 3d 27 69 27 20 29 7b 0a 20 20 20  && c=='i' ){.   
2cc00 20 20 20 2f 2a 20 49 74 20 69 73 20 61 6e 20 68     /* It is an h
2cc10 69 73 74 6f 72 69 63 61 6c 20 61 63 63 69 64 65  istorical accide
2cc20 6e 74 20 74 68 61 74 20 74 68 65 20 2e 69 6e 64  nt that the .ind
2cc30 65 78 65 73 20 63 6f 6d 6d 61 6e 64 20 73 68 6f  exes command sho
2cc40 77 73 20 61 6e 20 65 72 72 6f 72 0a 20 20 20 20  ws an error.    
2cc50 20 20 2a 2a 20 77 68 65 6e 20 63 61 6c 6c 65 64    ** when called
2cc60 20 77 69 74 68 20 74 68 65 20 77 72 6f 6e 67 20   with the wrong 
2cc70 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
2cc80 6e 74 73 20 77 68 65 72 65 61 73 20 74 68 65 20  nts whereas the 
2cc90 2e 74 61 62 6c 65 73 0a 20 20 20 20 20 20 2a 2a  .tables.      **
2cca0 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f   command does no
2ccb0 74 2e 20 2a 2f 0a 20 20 20 20 20 20 72 61 77 5f  t. */.      raw_
2ccc0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2ccd0 55 73 61 67 65 3a 20 2e 69 6e 64 65 78 65 73 20  Usage: .indexes 
2cce0 3f 4c 49 4b 45 2d 50 41 54 54 45 52 4e 3f 5c 6e  ?LIKE-PATTERN?\n
2ccf0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2cd00 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
2cd10 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2cd20 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69      }.    for(ii
2cd30 3d 30 3b 20 73 71 6c 69 74 65 33 5f 73 74 65 70  =0; sqlite3_step
2cd40 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
2cd50 52 4f 57 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  ROW; ii++){.    
2cd60 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
2cd70 62 4e 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20 63  bName = (const c
2cd80 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
2cd90 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  umn_text(pStmt, 
2cda0 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 44  1);.      if( zD
2cdb0 62 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69  bName==0 ) conti
2cdc0 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 73  nue;.      if( s
2cdd0 2e 7a 20 26 26 20 73 2e 7a 5b 30 5d 20 29 20 61  .z && s.z[0] ) a
2cde0 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20 22 20  ppendText(&s, " 
2cdf0 55 4e 49 4f 4e 20 41 4c 4c 20 22 2c 20 30 29 3b  UNION ALL ", 0);
2ce00 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
2ce10 65 33 5f 73 74 72 69 63 6d 70 28 7a 44 62 4e 61  e3_stricmp(zDbNa
2ce20 6d 65 2c 20 22 6d 61 69 6e 22 29 3d 3d 30 20 29  me, "main")==0 )
2ce30 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  {.        append
2ce40 54 65 78 74 28 26 73 2c 20 22 53 45 4c 45 43 54  Text(&s, "SELECT
2ce50 20 6e 61 6d 65 20 46 52 4f 4d 20 22 2c 20 30 29   name FROM ", 0)
2ce60 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2ce70 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
2ce80 74 28 26 73 2c 20 22 53 45 4c 45 43 54 20 22 2c  t(&s, "SELECT ",
2ce90 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70   0);.        app
2cea0 65 6e 64 54 65 78 74 28 26 73 2c 20 7a 44 62 4e  endText(&s, zDbN
2ceb0 61 6d 65 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20  ame, '\'');.    
2cec0 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
2ced0 73 2c 20 22 7c 7c 27 2e 27 7c 7c 6e 61 6d 65 20  s, "||'.'||name 
2cee0 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20  FROM ", 0);.    
2cef0 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64    }.      append
2cf00 54 65 78 74 28 26 73 2c 20 7a 44 62 4e 61 6d 65  Text(&s, zDbName
2cf10 2c 20 27 22 27 29 3b 0a 20 20 20 20 20 20 61 70  , '"');.      ap
2cf20 70 65 6e 64 54 65 78 74 28 26 73 2c 20 22 2e 73  pendText(&s, ".s
2cf30 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 2c 20  qlite_master ", 
2cf40 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d  0);.      if( c=
2cf50 3d 27 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='t' ){.        
2cf60 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 22 20  appendText(&s," 
2cf70 57 48 45 52 45 20 74 79 70 65 20 49 4e 20 28 27  WHERE type IN ('
2cf80 74 61 62 6c 65 27 2c 27 76 69 65 77 27 29 22 0a  table','view')".
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfa0 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 6e 61        "   AND na
2cfb0 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c  me NOT LIKE 'sql
2cfc0 69 74 65 5f 25 27 22 0a 20 20 20 20 20 20 20 20  ite_%'".        
2cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
2cfe0 20 20 41 4e 44 20 6e 61 6d 65 20 4c 49 4b 45 20    AND name LIKE 
2cff0 3f 31 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  ?1", 0);.      }
2d000 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 70  else{.        ap
2d010 70 65 6e 64 54 65 78 74 28 26 73 2c 22 20 57 48  pendText(&s," WH
2d020 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65 78 27  ERE type='index'
2d030 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
2d040 20 20 20 20 20 20 20 20 22 20 20 20 41 4e 44 20          "   AND 
2d050 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 3f 31  tbl_name LIKE ?1
2d060 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ", 0);.      }. 
2d070 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71     }.    rc = sq
2d080 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
2d090 53 74 6d 74 29 3b 0a 20 20 20 20 61 70 70 65 6e  Stmt);.    appen
2d0a0 64 54 65 78 74 28 26 73 2c 20 22 20 4f 52 44 45  dText(&s, " ORDE
2d0b0 52 20 42 59 20 31 22 2c 20 30 29 3b 0a 20 20 20  R BY 1", 0);.   
2d0c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
2d0d0 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
2d0e0 73 2e 7a 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  s.z, -1, &pStmt,
2d0f0 20 30 29 3b 0a 20 20 20 20 66 72 65 65 54 65 78   0);.    freeTex
2d100 74 28 26 73 29 3b 0a 20 20 20 20 69 66 28 20 72  t(&s);.    if( r
2d110 63 20 29 20 72 65 74 75 72 6e 20 73 68 65 6c 6c  c ) return shell
2d120 44 61 74 61 62 61 73 65 45 72 72 6f 72 28 70 2d  DatabaseError(p-
2d130 3e 64 62 29 3b 0a 0a 20 20 20 20 2f 2a 20 52 75  >db);..    /* Ru
2d140 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  n the SQL statem
2d150 65 6e 74 20 70 72 65 70 61 72 65 64 20 62 79 20  ent prepared by 
2d160 74 68 65 20 61 62 6f 76 65 20 62 6c 6f 63 6b 2e  the above block.
2d170 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
2d180 74 73 0a 20 20 20 20 2a 2a 20 61 73 20 61 6e 20  ts.    ** as an 
2d190 61 72 72 61 79 20 6f 66 20 6e 75 6c 2d 74 65 72  array of nul-ter
2d1a0 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67 73 20  minated strings 
2d1b0 69 6e 20 61 7a 52 65 73 75 6c 74 5b 5d 2e 20 20  in azResult[].  
2d1c0 2a 2f 0a 20 20 20 20 6e 52 6f 77 20 3d 20 6e 41  */.    nRow = nA
2d1d0 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 61 7a  lloc = 0;.    az
2d1e0 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 20 20  Result = 0;.    
2d1f0 69 66 28 20 6e 41 72 67 3e 31 20 29 7b 0a 20 20  if( nArg>1 ){.  
2d200 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
2d210 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20  _text(pStmt, 1, 
2d220 61 7a 41 72 67 5b 31 5d 2c 20 2d 31 2c 20 53 51  azArg[1], -1, SQ
2d230 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
2d240 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2d250 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
2d260 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20 22 25  ext(pStmt, 1, "%
2d270 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54  ", -1, SQLITE_ST
2d280 41 54 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ATIC);.    }.   
2d290 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f   while( sqlite3_
2d2a0 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c  step(pStmt)==SQL
2d2b0 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20  ITE_ROW ){.     
2d2c0 20 69 66 28 20 6e 52 6f 77 3e 3d 6e 41 6c 6c 6f   if( nRow>=nAllo
2d2d0 63 20 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61  c ){.        cha
2d2e0 72 20 2a 2a 61 7a 4e 65 77 3b 0a 20 20 20 20 20  r **azNew;.     
2d2f0 20 20 20 69 6e 74 20 6e 32 20 3d 20 6e 41 6c 6c     int n2 = nAll
2d300 6f 63 2a 32 20 2b 20 31 30 3b 0a 20 20 20 20 20  oc*2 + 10;.     
2d310 20 20 20 61 7a 4e 65 77 20 3d 20 73 71 6c 69 74     azNew = sqlit
2d320 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 61 7a 52  e3_realloc64(azR
2d330 65 73 75 6c 74 2c 20 73 69 7a 65 6f 66 28 61 7a  esult, sizeof(az
2d340 52 65 73 75 6c 74 5b 30 5d 29 2a 6e 32 29 3b 0a  Result[0])*n2);.
2d350 20 20 20 20 20 20 20 20 69 66 28 20 61 7a 4e 65          if( azNe
2d360 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
2d370 20 20 72 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65    rc = shellNome
2d380 6d 45 72 72 6f 72 28 29 3b 0a 20 20 20 20 20 20  mError();.      
2d390 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2d3a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 41 6c     }.        nAl
2d3b0 6c 6f 63 20 3d 20 6e 32 3b 0a 20 20 20 20 20 20  loc = n2;.      
2d3c0 20 20 61 7a 52 65 73 75 6c 74 20 3d 20 61 7a 4e    azResult = azN
2d3d0 65 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ew;.      }.    
2d3e0 20 20 61 7a 52 65 73 75 6c 74 5b 6e 52 6f 77 5d    azResult[nRow]
2d3f0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2d400 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74 65 33  tf("%s", sqlite3
2d410 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
2d420 6d 74 2c 20 30 29 29 3b 0a 20 20 20 20 20 20 69  mt, 0));.      i
2d430 66 28 20 30 3d 3d 61 7a 52 65 73 75 6c 74 5b 6e  f( 0==azResult[n
2d440 52 6f 77 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  Row] ){.        
2d450 72 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45  rc = shellNomemE
2d460 72 72 6f 72 28 29 3b 0a 20 20 20 20 20 20 20 20  rror();.        
2d470 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
2d480 20 20 20 20 20 6e 52 6f 77 2b 2b 3b 0a 20 20 20       nRow++;.   
2d490 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74   }.    if( sqlit
2d4a0 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
2d4b0 74 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  t)!=SQLITE_OK ){
2d4c0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 68 65 6c  .      rc = shel
2d4d0 6c 44 61 74 61 62 61 73 65 45 72 72 6f 72 28 70  lDatabaseError(p
2d4e0 2d 3e 64 62 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ->db);.    }..  
2d4f0 20 20 2f 2a 20 50 72 65 74 74 79 2d 70 72 69 6e    /* Pretty-prin
2d500 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  t the contents o
2d510 66 20 61 72 72 61 79 20 61 7a 52 65 73 75 6c 74  f array azResult
2d520 5b 5d 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  [] to the output
2d530 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 3d 3d   */.    if( rc==
2d540 30 20 26 26 20 6e 52 6f 77 3e 30 20 29 7b 0a 20  0 && nRow>0 ){. 
2d550 20 20 20 20 20 69 6e 74 20 6c 65 6e 2c 20 6d 61       int len, ma
2d560 78 6c 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  xlen = 0;.      
2d570 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 20 20 20 20  int i, j;.      
2d580 69 6e 74 20 6e 50 72 69 6e 74 43 6f 6c 2c 20 6e  int nPrintCol, n
2d590 50 72 69 6e 74 52 6f 77 3b 0a 20 20 20 20 20 20  PrintRow;.      
2d5a0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 52 6f 77 3b  for(i=0; i<nRow;
2d5b0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 6c   i++){.        l
2d5c0 65 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a  en = strlen30(az
2d5d0 52 65 73 75 6c 74 5b 69 5d 29 3b 0a 20 20 20 20  Result[i]);.    
2d5e0 20 20 20 20 69 66 28 20 6c 65 6e 3e 6d 61 78 6c      if( len>maxl
2d5f0 65 6e 20 29 20 6d 61 78 6c 65 6e 20 3d 20 6c 65  en ) maxlen = le
2d600 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
2d610 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20 38 30 2f   nPrintCol = 80/
2d620 28 6d 61 78 6c 65 6e 2b 32 29 3b 0a 20 20 20 20  (maxlen+2);.    
2d630 20 20 69 66 28 20 6e 50 72 69 6e 74 43 6f 6c 3c    if( nPrintCol<
2d640 31 20 29 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20  1 ) nPrintCol = 
2d650 31 3b 0a 20 20 20 20 20 20 6e 50 72 69 6e 74 52  1;.      nPrintR
2d660 6f 77 20 3d 20 28 6e 52 6f 77 20 2b 20 6e 50 72  ow = (nRow + nPr
2d670 69 6e 74 43 6f 6c 20 2d 20 31 29 2f 6e 50 72 69  intCol - 1)/nPri
2d680 6e 74 43 6f 6c 3b 0a 20 20 20 20 20 20 66 6f 72  ntCol;.      for
2d690 28 69 3d 30 3b 20 69 3c 6e 50 72 69 6e 74 52 6f  (i=0; i<nPrintRo
2d6a0 77 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  w; i++){.       
2d6b0 20 66 6f 72 28 6a 3d 69 3b 20 6a 3c 6e 52 6f 77   for(j=i; j<nRow
2d6c0 3b 20 6a 2b 3d 6e 50 72 69 6e 74 52 6f 77 29 7b  ; j+=nPrintRow){
2d6d0 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20  .          char 
2d6e0 2a 7a 53 70 20 3d 20 6a 3c 6e 50 72 69 6e 74 52  *zSp = j<nPrintR
2d6f0 6f 77 20 3f 20 22 22 20 3a 20 22 20 20 22 3b 0a  ow ? "" : "  ";.
2d700 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
2d710 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2d720 73 25 2d 2a 73 22 2c 20 7a 53 70 2c 20 6d 61 78  s%-*s", zSp, max
2d730 6c 65 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  len,.           
2d740 20 20 20 20 20 20 20 20 20 20 20 61 7a 52 65 73             azRes
2d750 75 6c 74 5b 6a 5d 20 3f 20 61 7a 52 65 73 75 6c  ult[j] ? azResul
2d760 74 5b 6a 5d 3a 22 22 29 3b 0a 20 20 20 20 20 20  t[j]:"");.      
2d770 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f    }.        raw_
2d780 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2d790 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  \n");.      }.  
2d7a0 20 20 7d 0a 0a 20 20 20 20 66 6f 72 28 69 69 3d    }..    for(ii=
2d7b0 30 3b 20 69 69 3c 6e 52 6f 77 3b 20 69 69 2b 2b  0; ii<nRow; ii++
2d7c0 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61  ) sqlite3_free(a
2d7d0 7a 52 65 73 75 6c 74 5b 69 69 5d 29 3b 0a 20 20  zResult[ii]);.  
2d7e0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
2d7f0 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d 65 6c 73  zResult);.  }els
2d800 65 0a 0a 20 20 2f 2a 20 42 65 67 69 6e 20 72 65  e..  /* Begin re
2d810 64 69 72 65 63 74 69 6e 67 20 6f 75 74 70 75 74  directing output
2d820 20 74 6f 20 74 68 65 20 66 69 6c 65 20 22 74 65   to the file "te
2d830 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 22 20  stcase-out.txt" 
2d840 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20  */.  if( c=='t' 
2d850 26 26 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b  && strcmp(azArg[
2d860 30 5d 2c 22 74 65 73 74 63 61 73 65 22 29 3d 3d  0],"testcase")==
2d870 30 20 29 7b 0a 20 20 20 20 6f 75 74 70 75 74 5f  0 ){.    output_
2d880 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 70 2d  reset(p);.    p-
2d890 3e 6f 75 74 20 3d 20 6f 75 74 70 75 74 5f 66 69  >out = output_fi
2d8a0 6c 65 5f 6f 70 65 6e 28 22 74 65 73 74 63 61 73  le_open("testcas
2d8b0 65 2d 6f 75 74 2e 74 78 74 22 29 3b 0a 20 20 20  e-out.txt");.   
2d8c0 20 69 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29   if( p->out==0 )
2d8d0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
2d8e0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
2d8f0 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27  r: cannot open '
2d900 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74  testcase-out.txt
2d910 27 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20  '\n");.    }.   
2d920 20 69 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b 0a   if( nArg>=2 ){.
2d930 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
2d940 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d  printf(sizeof(p-
2d950 3e 7a 54 65 73 74 63 61 73 65 29 2c 20 70 2d 3e  >zTestcase), p->
2d960 7a 54 65 73 74 63 61 73 65 2c 20 22 25 73 22 2c  zTestcase, "%s",
2d970 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
2d980 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
2d990 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
2d9a0 7a 65 6f 66 28 70 2d 3e 7a 54 65 73 74 63 61 73  zeof(p->zTestcas
2d9b0 65 29 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73 65  e), p->zTestcase
2d9c0 2c 20 22 3f 22 29 3b 0a 20 20 20 20 7d 0a 20 20  , "?");.    }.  
2d9d0 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65 66 20 53  }else..#ifndef S
2d9e0 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
2d9f0 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
2da00 20 6e 3e 3d 38 20 26 26 20 73 74 72 6e 63 6d 70   n>=8 && strncmp
2da10 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 65 73 74  (azArg[0], "test
2da20 63 74 72 6c 22 2c 20 6e 29 3d 3d 30 20 26 26 20  ctrl", n)==0 && 
2da30 6e 41 72 67 3e 3d 32 20 29 7b 0a 20 20 20 20 73  nArg>=2 ){.    s
2da40 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75  tatic const stru
2da50 63 74 20 7b 0a 20 20 20 20 20 20 20 63 6f 6e 73  ct {.       cons
2da60 74 20 63 68 61 72 20 2a 7a 43 74 72 6c 4e 61 6d  t char *zCtrlNam
2da70 65 3b 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  e;   /* Name of 
2da80 61 20 74 65 73 74 2d 63 6f 6e 74 72 6f 6c 20 6f  a test-control o
2da90 70 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 20  ption */.       
2daa0 69 6e 74 20 63 74 72 6c 43 6f 64 65 3b 20 20 20  int ctrlCode;   
2dab0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
2dac0 67 65 72 20 63 6f 64 65 20 66 6f 72 20 74 68 61  ger code for tha
2dad0 74 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  t option */.    
2dae0 7d 20 61 43 74 72 6c 5b 5d 20 3d 20 7b 0a 20 20  } aCtrl[] = {.  
2daf0 20 20 20 20 7b 20 22 70 72 6e 67 5f 73 61 76 65      { "prng_save
2db00 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 53  ",             S
2db10 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50  QLITE_TESTCTRL_P
2db20 52 4e 47 5f 53 41 56 45 20 20 20 20 20 20 20 20  RNG_SAVE        
2db30 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
2db40 20 22 70 72 6e 67 5f 72 65 73 74 6f 72 65 22 2c   "prng_restore",
2db50 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
2db60 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f 52  _TESTCTRL_PRNG_R
2db70 45 53 54 4f 52 45 20 20 20 20 20 20 20 20 20 20  ESTORE          
2db80 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 70 72 6e   },.      { "prn
2db90 67 5f 72 65 73 65 74 22 2c 20 20 20 20 20 20 20  g_reset",       
2dba0 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54       SQLITE_TEST
2dbb0 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53 45 54 20  CTRL_PRNG_RESET 
2dbc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2dbd0 20 20 20 20 20 7b 20 22 62 69 74 76 65 63 5f 74       { "bitvec_t
2dbe0 65 73 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  est",           
2dbf0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2dc00 42 49 54 56 45 43 5f 54 45 53 54 20 20 20 20 20  BITVEC_TEST     
2dc10 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
2dc20 7b 20 22 66 61 75 6c 74 5f 69 6e 73 74 61 6c 6c  { "fault_install
2dc30 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49 54  ",         SQLIT
2dc40 45 5f 54 45 53 54 43 54 52 4c 5f 46 41 55 4c 54  E_TESTCTRL_FAULT
2dc50 5f 49 4e 53 54 41 4c 4c 20 20 20 20 20 20 20 20  _INSTALL        
2dc60 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 62 65    },.      { "be
2dc70 6e 69 67 6e 5f 6d 61 6c 6c 6f 63 5f 68 6f 6f 6b  nign_malloc_hook
2dc80 73 22 2c 20 20 20 53 51 4c 49 54 45 5f 54 45 53  s",   SQLITE_TES
2dc90 54 43 54 52 4c 5f 42 45 4e 49 47 4e 5f 4d 41 4c  TCTRL_BENIGN_MAL
2dca0 4c 4f 43 5f 48 4f 4f 4b 53 20 20 20 20 7d 2c 0a  LOC_HOOKS    },.
2dcb0 20 20 20 20 20 20 7b 20 22 70 65 6e 64 69 6e 67        { "pending
2dcc0 5f 62 79 74 65 22 2c 20 20 20 20 20 20 20 20 20  _byte",         
2dcd0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2dce0 5f 50 45 4e 44 49 4e 47 5f 42 59 54 45 20 20 20  _PENDING_BYTE   
2dcf0 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
2dd00 20 7b 20 22 61 73 73 65 72 74 22 2c 20 20 20 20   { "assert",    
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
2dd20 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 53 53 45  TE_TESTCTRL_ASSE
2dd30 52 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20  RT              
2dd40 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 61     },.      { "a
2dd50 6c 77 61 79 73 22 2c 20 20 20 20 20 20 20 20 20  lways",         
2dd60 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45         SQLITE_TE
2dd70 53 54 43 54 52 4c 5f 41 4c 57 41 59 53 20 20 20  STCTRL_ALWAYS   
2dd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
2dd90 0a 20 20 20 20 20 20 7b 20 22 72 65 73 65 72 76  .      { "reserv
2dda0 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  e",             
2ddb0 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52    SQLITE_TESTCTR
2ddc0 4c 5f 52 45 53 45 52 56 45 20 20 20 20 20 20 20  L_RESERVE       
2ddd0 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
2dde0 20 20 7b 20 22 6f 70 74 69 6d 69 7a 61 74 69 6f    { "optimizatio
2ddf0 6e 73 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c  ns",         SQL
2de00 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54  ITE_TESTCTRL_OPT
2de10 49 4d 49 5a 41 54 49 4f 4e 53 20 20 20 20 20 20  IMIZATIONS      
2de20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
2de30 69 73 6b 65 79 77 6f 72 64 22 2c 20 20 20 20 20  iskeyword",     
2de40 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54          SQLITE_T
2de50 45 53 54 43 54 52 4c 5f 49 53 4b 45 59 57 4f 52  ESTCTRL_ISKEYWOR
2de60 44 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  D              }
2de70 2c 0a 20 20 20 20 20 20 7b 20 22 62 79 74 65 6f  ,.      { "byteo
2de80 72 64 65 72 22 2c 20 20 20 20 20 20 20 20 20 20  rder",          
2de90 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54     SQLITE_TESTCT
2dea0 52 4c 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  RL_BYTEORDER    
2deb0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2dec0 20 20 20 7b 20 22 6e 65 76 65 72 5f 63 6f 72 72     { "never_corr
2ded0 75 70 74 22 2c 20 20 20 20 20 20 20 20 20 53 51  upt",         SQ
2dee0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e 45  LITE_TESTCTRL_NE
2def0 56 45 52 5f 43 4f 52 52 55 50 54 20 20 20 20 20  VER_CORRUPT     
2df00 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
2df10 22 69 6d 70 6f 73 74 65 72 22 2c 20 20 20 20 20  "imposter",     
2df20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
2df30 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45  TESTCTRL_IMPOSTE
2df40 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  R               
2df50 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e  },.    };.    in
2df60 74 20 74 65 73 74 63 74 72 6c 20 3d 20 2d 31 3b  t testctrl = -1;
2df70 0a 20 20 20 20 69 6e 74 20 72 63 32 20 3d 20 30  .    int rc2 = 0
2df80 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6e 32 3b  ;.    int i, n2;
2df90 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
2dfa0 30 29 3b 0a 0a 20 20 20 20 2f 2a 20 63 6f 6e 76  0);..    /* conv
2dfb0 65 72 74 20 74 65 73 74 63 74 72 6c 20 74 65 78  ert testctrl tex
2dfc0 74 20 6f 70 74 69 6f 6e 20 74 6f 20 76 61 6c 75  t option to valu
2dfd0 65 2e 20 61 6c 6c 6f 77 20 61 6e 79 20 75 6e 69  e. allow any uni
2dfe0 71 75 65 20 70 72 65 66 69 78 0a 20 20 20 20 2a  que prefix.    *
2dff0 2a 20 6f 66 20 74 68 65 20 6f 70 74 69 6f 6e 20  * of the option 
2e000 6e 61 6d 65 2c 20 6f 72 20 61 20 6e 75 6d 65 72  name, or a numer
2e010 69 63 61 6c 20 76 61 6c 75 65 2e 20 2a 2f 0a 20  ical value. */. 
2e020 20 20 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30     n2 = strlen30
2e030 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20  (azArg[1]);.    
2e040 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79  for(i=0; i<Array
2e050 53 69 7a 65 28 61 43 74 72 6c 29 3b 20 69 2b 2b  Size(aCtrl); i++
2e060 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72  ){.      if( str
2e070 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20 61  ncmp(azArg[1], a
2e080 43 74 72 6c 5b 69 5d 2e 7a 43 74 72 6c 4e 61 6d  Ctrl[i].zCtrlNam
2e090 65 2c 20 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20  e, n2)==0 ){.   
2e0a0 20 20 20 20 20 69 66 28 20 74 65 73 74 63 74 72       if( testctr
2e0b0 6c 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  l<0 ){.         
2e0c0 20 74 65 73 74 63 74 72 6c 20 3d 20 61 43 74 72   testctrl = aCtr
2e0d0 6c 5b 69 5d 2e 63 74 72 6c 43 6f 64 65 3b 0a 20  l[i].ctrlCode;. 
2e0e0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
2e0f0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
2e100 6e 74 66 28 73 74 64 65 72 72 2c 20 22 61 6d 62  ntf(stderr, "amb
2e110 69 67 75 6f 75 73 20 6f 70 74 69 6f 6e 20 6e 61  iguous option na
2e120 6d 65 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61  me: \"%s\"\n", a
2e130 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
2e140 20 20 20 20 74 65 73 74 63 74 72 6c 20 3d 20 2d      testctrl = -
2e150 31 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  1;.          bre
2e160 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
2e170 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2e180 69 66 28 20 74 65 73 74 63 74 72 6c 3c 30 20 29  if( testctrl<0 )
2e190 20 74 65 73 74 63 74 72 6c 20 3d 20 28 69 6e 74   testctrl = (int
2e1a0 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a  )integerValue(az
2e1b0 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 69 66 28  Arg[1]);.    if(
2e1c0 20 28 74 65 73 74 63 74 72 6c 3c 53 51 4c 49 54   (testctrl<SQLIT
2e1d0 45 5f 54 45 53 54 43 54 52 4c 5f 46 49 52 53 54  E_TESTCTRL_FIRST
2e1e0 29 20 7c 7c 20 28 74 65 73 74 63 74 72 6c 3e 53  ) || (testctrl>S
2e1f0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4c  QLITE_TESTCTRL_L
2e200 41 53 54 29 20 29 7b 0a 20 20 20 20 20 20 75 74  AST) ){.      ut
2e210 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
2e220 2c 22 45 72 72 6f 72 3a 20 69 6e 76 61 6c 69 64  ,"Error: invalid
2e230 20 74 65 73 74 63 74 72 6c 20 6f 70 74 69 6f 6e   testctrl option
2e240 3a 20 25 73 5c 6e 22 2c 20 61 7a 41 72 67 5b 31  : %s\n", azArg[1
2e250 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ]);.    }else{. 
2e260 20 20 20 20 20 73 77 69 74 63 68 28 74 65 73 74       switch(test
2e270 63 74 72 6c 29 7b 0a 0a 20 20 20 20 20 20 20 20  ctrl){..        
2e280 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  /* sqlite3_test_
2e290 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20 64 62 2c  control(int, db,
2e2a0 20 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20   int) */.       
2e2b0 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53   case SQLITE_TES
2e2c0 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
2e2d0 4f 4e 53 3a 0a 20 20 20 20 20 20 20 20 63 61 73  ONS:.        cas
2e2e0 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  e SQLITE_TESTCTR
2e2f0 4c 5f 52 45 53 45 52 56 45 3a 0a 20 20 20 20 20  L_RESERVE:.     
2e300 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 33       if( nArg==3
2e310 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
2e320 69 6e 74 20 6f 70 74 20 3d 20 28 69 6e 74 29 73  int opt = (int)s
2e330 74 72 74 6f 6c 28 61 7a 41 72 67 5b 32 5d 2c 20  trtol(azArg[2], 
2e340 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  0, 0);.         
2e350 20 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33     rc2 = sqlite3
2e360 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65  _test_control(te
2e370 73 74 63 74 72 6c 2c 20 70 2d 3e 64 62 2c 20 6f  stctrl, p->db, o
2e380 70 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  pt);.           
2e390 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
2e3a0 75 74 2c 20 22 25 64 20 28 30 78 25 30 38 78 29  ut, "%d (0x%08x)
2e3b0 5c 6e 22 2c 20 72 63 32 2c 20 72 63 32 29 3b 0a  \n", rc2, rc2);.
2e3c0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
2e3d0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75   {.            u
2e3e0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
2e3f0 72 2c 22 45 72 72 6f 72 3a 20 74 65 73 74 63 74  r,"Error: testct
2e400 72 6c 20 25 73 20 74 61 6b 65 73 20 61 20 73 69  rl %s takes a si
2e410 6e 67 6c 65 20 69 6e 74 20 6f 70 74 69 6f 6e 5c  ngle int option\
2e420 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
2e430 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b 31 5d          azArg[1]
2e440 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
2e450 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2e460 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69  .        /* sqli
2e470 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
2e480 28 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20  (int) */.       
2e490 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53   case SQLITE_TES
2e4a0 54 43 54 52 4c 5f 50 52 4e 47 5f 53 41 56 45 3a  TCTRL_PRNG_SAVE:
2e4b0 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51  .        case SQ
2e4c0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52  LITE_TESTCTRL_PR
2e4d0 4e 47 5f 52 45 53 54 4f 52 45 3a 0a 20 20 20 20  NG_RESTORE:.    
2e4e0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
2e4f0 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f 52 45  TESTCTRL_PRNG_RE
2e500 53 45 54 3a 0a 20 20 20 20 20 20 20 20 63 61 73  SET:.        cas
2e510 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  e SQLITE_TESTCTR
2e520 4c 5f 42 59 54 45 4f 52 44 45 52 3a 0a 20 20 20  L_BYTEORDER:.   
2e530 20 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d         if( nArg=
2e540 3d 32 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =2 ){.          
2e550 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f    rc2 = sqlite3_
2e560 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73  test_control(tes
2e570 74 63 74 72 6c 29 3b 0a 20 20 20 20 20 20 20 20  tctrl);.        
2e580 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
2e590 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30 78 25 30  ->out, "%d (0x%0
2e5a0 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20 72 63 32  8x)\n", rc2, rc2
2e5b0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  );.          } e
2e5c0 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
2e5d0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
2e5e0 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 74 65 73  derr,"Error: tes
2e5f0 74 63 74 72 6c 20 25 73 20 74 61 6b 65 73 20 6e  tctrl %s takes n
2e600 6f 20 6f 70 74 69 6f 6e 73 5c 6e 22 2c 0a 20 20  o options\n",.  
2e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e620 20 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b        azArg[1]);
2e630 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
2e640 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20         break;.. 
2e650 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65         /* sqlite
2e660 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69  3_test_control(i
2e670 6e 74 2c 20 75 69 6e 74 29 20 2a 2f 0a 20 20 20  nt, uint) */.   
2e680 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
2e690 5f 54 45 53 54 43 54 52 4c 5f 50 45 4e 44 49 4e  _TESTCTRL_PENDIN
2e6a0 47 5f 42 59 54 45 3a 0a 20 20 20 20 20 20 20 20  G_BYTE:.        
2e6b0 20 20 69 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b    if( nArg==3 ){
2e6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 73  .            uns
2e6d0 69 67 6e 65 64 20 69 6e 74 20 6f 70 74 20 3d 20  igned int opt = 
2e6e0 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 69 6e  (unsigned int)in
2e6f0 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67  tegerValue(azArg
2e700 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [2]);.          
2e710 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f    rc2 = sqlite3_
2e720 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73  test_control(tes
2e730 74 63 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20  tctrl, opt);.   
2e740 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
2e750 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20  ntf(p->out, "%d 
2e760 28 30 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32  (0x%08x)\n", rc2
2e770 2c 20 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20  , rc2);.        
2e780 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
2e790 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
2e7a0 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
2e7b0 3a 20 74 65 73 74 63 74 72 6c 20 25 73 20 74 61  : testctrl %s ta
2e7c0 6b 65 73 20 61 20 73 69 6e 67 6c 65 20 75 6e 73  kes a single uns
2e7d0 69 67 6e 65 64 22 0a 20 20 20 20 20 20 20 20 20  igned".         
2e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7f0 20 20 22 20 69 6e 74 20 6f 70 74 69 6f 6e 5c 6e    " int option\n
2e800 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ", azArg[1]);.  
2e810 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2e820 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20      break;..    
2e830 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74      /* sqlite3_t
2e840 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c  est_control(int,
2e850 20 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20   int) */.       
2e860 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53   case SQLITE_TES
2e870 54 43 54 52 4c 5f 41 53 53 45 52 54 3a 0a 20 20  TCTRL_ASSERT:.  
2e880 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
2e890 45 5f 54 45 53 54 43 54 52 4c 5f 41 4c 57 41 59  E_TESTCTRL_ALWAY
2e8a0 53 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  S:.        case 
2e8b0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2e8c0 4e 45 56 45 52 5f 43 4f 52 52 55 50 54 3a 0a 20  NEVER_CORRUPT:. 
2e8d0 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 41 72           if( nAr
2e8e0 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20  g==3 ){.        
2e8f0 20 20 20 20 69 6e 74 20 6f 70 74 20 3d 20 62 6f      int opt = bo
2e900 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
2e910 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [2]);.          
2e920 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f    rc2 = sqlite3_
2e930 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73  test_control(tes
2e940 74 63 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20  tctrl, opt);.   
2e950 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
2e960 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20  ntf(p->out, "%d 
2e970 28 30 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32  (0x%08x)\n", rc2
2e980 2c 20 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20  , rc2);.        
2e990 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
2e9a0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
2e9b0 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
2e9c0 3a 20 74 65 73 74 63 74 72 6c 20 25 73 20 74 61  : testctrl %s ta
2e9d0 6b 65 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 74  kes a single int
2e9e0 20 6f 70 74 69 6f 6e 5c 6e 22 2c 0a 20 20 20 20   option\n",.    
2e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea00 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b 31 5d          azArg[1]
2ea10 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
2ea20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2ea30 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69  .        /* sqli
2ea40 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
2ea50 28 69 6e 74 2c 20 63 68 61 72 20 2a 29 20 2a 2f  (int, char *) */
2ea60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4e  .#ifdef SQLITE_N
2ea70 5f 4b 45 59 57 4f 52 44 0a 20 20 20 20 20 20 20  _KEYWORD.       
2ea80 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53   case SQLITE_TES
2ea90 54 43 54 52 4c 5f 49 53 4b 45 59 57 4f 52 44 3a  TCTRL_ISKEYWORD:
2eaa0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e  .          if( n
2eab0 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20  Arg==3 ){.      
2eac0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2ead0 20 2a 6f 70 74 20 3d 20 61 7a 41 72 67 5b 32 5d   *opt = azArg[2]
2eae0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  ;.            rc
2eaf0 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74  2 = sqlite3_test
2eb00 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74 72  _control(testctr
2eb10 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20 20 20  l, opt);.       
2eb20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2eb30 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30 78 25  p->out, "%d (0x%
2eb40 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20 72 63  08x)\n", rc2, rc
2eb50 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 20  2);.          } 
2eb60 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
2eb70 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
2eb80 74 64 65 72 72 2c 0a 20 20 20 20 20 20 20 20 20  tderr,.         
2eb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2eba0 45 72 72 6f 72 3a 20 74 65 73 74 63 74 72 6c 20  Error: testctrl 
2ebb0 25 73 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c  %s takes a singl
2ebc0 65 20 63 68 61 72 20 2a 20 6f 70 74 69 6f 6e 5c  e char * option\
2ebd0 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
2ebe0 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72              azAr
2ebf0 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  g[1]);.         
2ec00 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65   }.          bre
2ec10 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  ak;.#endif..    
2ec20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
2ec30 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45  TESTCTRL_IMPOSTE
2ec40 52 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  R:.          if(
2ec50 20 6e 41 72 67 3d 3d 35 20 29 7b 0a 20 20 20 20   nArg==5 ){.    
2ec60 20 20 20 20 20 20 20 20 72 63 32 20 3d 20 73 71          rc2 = sq
2ec70 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
2ec80 6f 6c 28 74 65 73 74 63 74 72 6c 2c 20 70 2d 3e  ol(testctrl, p->
2ec90 64 62 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  db,.            
2eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a                az
2ecb0 41 72 67 5b 32 5d 2c 0a 20 20 20 20 20 20 20 20  Arg[2],.        
2ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ecd0 20 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61    integerValue(a
2ece0 7a 41 72 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20  zArg[3]),.      
2ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed00 20 20 20 20 69 6e 74 65 67 65 72 56 61 6c 75 65      integerValue
2ed10 28 61 7a 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20  (azArg[4]));.   
2ed20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
2ed30 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20  ntf(p->out, "%d 
2ed40 28 30 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32  (0x%08x)\n", rc2
2ed50 2c 20 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20  , rc2);.        
2ed60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2ed70 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2ed80 73 74 64 65 72 72 2c 22 55 73 61 67 65 3a 20 2e  stderr,"Usage: .
2ed90 74 65 73 74 63 74 72 6c 20 69 6d 70 6f 73 74 65  testctrl imposte
2eda0 72 20 64 62 4e 61 6d 65 20 6f 6e 6f 66 66 20 74  r dbName onoff t
2edb0 6e 75 6d 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20  num\n");.       
2edc0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62     }.          b
2edd0 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 63  reak;..        c
2ede0 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
2edf0 54 52 4c 5f 42 49 54 56 45 43 5f 54 45 53 54 3a  TRL_BITVEC_TEST:
2ee00 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51  .        case SQ
2ee10 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 46 41  LITE_TESTCTRL_FA
2ee20 55 4c 54 5f 49 4e 53 54 41 4c 4c 3a 0a 20 20 20  ULT_INSTALL:.   
2ee30 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
2ee40 5f 54 45 53 54 43 54 52 4c 5f 42 45 4e 49 47 4e  _TESTCTRL_BENIGN
2ee50 5f 4d 41 4c 4c 4f 43 5f 48 4f 4f 4b 53 3a 0a 20  _MALLOC_HOOKS:. 
2ee60 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a         default:.
2ee70 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
2ee80 72 69 6e 74 66 28 73 74 64 65 72 72 2c 0a 20 20  rintf(stderr,.  
2ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eea0 20 20 20 20 22 45 72 72 6f 72 3a 20 43 4c 49 20      "Error: CLI 
2eeb0 73 75 70 70 6f 72 74 20 66 6f 72 20 74 65 73 74  support for test
2eec0 63 74 72 6c 20 25 73 20 6e 6f 74 20 69 6d 70 6c  ctrl %s not impl
2eed0 65 6d 65 6e 74 65 64 5c 6e 22 2c 0a 20 20 20 20  emented\n",.    
2eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eef0 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20    azArg[1]);.   
2ef00 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2ef10 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
2ef20 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  lse.#endif /* !d
2ef30 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e  efined(SQLITE_UN
2ef40 54 45 53 54 41 42 4c 45 29 20 2a 2f 0a 0a 20 20  TESTABLE) */..  
2ef50 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20 6e 3e  if( c=='t' && n>
2ef60 34 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  4 && strncmp(azA
2ef70 72 67 5b 30 5d 2c 20 22 74 69 6d 65 6f 75 74 22  rg[0], "timeout"
2ef80 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f  , n)==0 ){.    o
2ef90 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20  pen_db(p, 0);.  
2efa0 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74    sqlite3_busy_t
2efb0 69 6d 65 6f 75 74 28 70 2d 3e 64 62 2c 20 6e 41  imeout(p->db, nA
2efc0 72 67 3e 3d 32 20 3f 20 28 69 6e 74 29 69 6e 74  rg>=2 ? (int)int
2efd0 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b  egerValue(azArg[
2efe0 31 5d 29 20 3a 20 30 29 3b 0a 20 20 7d 65 6c 73  1]) : 0);.  }els
2eff0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20  e..  if( c=='t' 
2f000 26 26 20 6e 3e 3d 35 20 26 26 20 73 74 72 6e 63  && n>=5 && strnc
2f010 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 69  mp(azArg[0], "ti
2f020 6d 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  mer", n)==0 ){. 
2f030 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29     if( nArg==2 )
2f040 7b 0a 20 20 20 20 20 20 65 6e 61 62 6c 65 54 69  {.      enableTi
2f050 6d 65 72 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c  mer = booleanVal
2f060 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ue(azArg[1]);.  
2f070 20 20 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69      if( enableTi
2f080 6d 65 72 20 26 26 20 21 48 41 53 5f 54 49 4d 45  mer && !HAS_TIME
2f090 52 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  R ){.        raw
2f0a0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2f0b0 22 45 72 72 6f 72 3a 20 74 69 6d 65 72 20 6e 6f  "Error: timer no
2f0c0 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 74  t available on t
2f0d0 68 69 73 20 73 79 73 74 65 6d 2e 5c 6e 22 29 3b  his system.\n");
2f0e0 0a 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 54  .        enableT
2f0f0 69 6d 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20  imer = 0;.      
2f100 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
2f110 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2f120 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 74  derr, "Usage: .t
2f130 69 6d 65 72 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b  imer on|off\n");
2f140 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
2f150 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
2f160 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20 73 74  if( c=='t' && st
2f170 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2f180 22 74 72 61 63 65 22 2c 20 6e 29 3d 3d 30 20 29  "trace", n)==0 )
2f190 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  {.    open_db(p,
2f1a0 20 30 29 3b 0a 20 20 20 20 69 66 28 20 6e 41 72   0);.    if( nAr
2f1b0 67 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61  g!=2 ){.      ra
2f1c0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2f1d0 20 22 55 73 61 67 65 3a 20 2e 74 72 61 63 65 20   "Usage: .trace 
2f1e0 46 49 4c 45 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20  FILE|off\n");.  
2f1f0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2f200 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
2f210 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
2f220 20 20 20 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f      output_file_
2f230 63 6c 6f 73 65 28 70 2d 3e 74 72 61 63 65 4f 75  close(p->traceOu
2f240 74 29 3b 0a 20 20 20 20 70 2d 3e 74 72 61 63 65  t);.    p->trace
2f250 4f 75 74 20 3d 20 6f 75 74 70 75 74 5f 66 69 6c  Out = output_fil
2f260 65 5f 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d 29  e_open(azArg[1])
2f270 3b 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ;.#if !defined(S
2f280 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
2f290 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2f2a0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
2f2b0 4e 47 5f 50 4f 49 4e 54 29 0a 20 20 20 20 69 66  NG_POINT).    if
2f2c0 28 20 70 2d 3e 74 72 61 63 65 4f 75 74 3d 3d 30  ( p->traceOut==0
2f2d0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2f2e0 33 5f 74 72 61 63 65 5f 76 32 28 70 2d 3e 64 62  3_trace_v2(p->db
2f2f0 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
2f300 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
2f310 69 74 65 33 5f 74 72 61 63 65 5f 76 32 28 70 2d  ite3_trace_v2(p-
2f320 3e 64 62 2c 20 53 51 4c 49 54 45 5f 54 52 41 43  >db, SQLITE_TRAC
2f330 45 5f 53 54 4d 54 2c 20 73 71 6c 5f 74 72 61 63  E_STMT, sql_trac
2f340 65 5f 63 61 6c 6c 62 61 63 6b 2c 70 2d 3e 74 72  e_callback,p->tr
2f350 61 63 65 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  aceOut);.    }.#
2f360 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 0a 0a 23  endif.  }else..#
2f370 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  if SQLITE_USER_A
2f380 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
2f390 69 66 28 20 63 3d 3d 27 75 27 20 26 26 20 73 74  if( c=='u' && st
2f3a0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2f3b0 22 75 73 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b  "user", n)==0 ){
2f3c0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20  .    if( nArg<2 
2f3d0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
2f3e0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
2f3f0 67 65 3a 20 2e 75 73 65 72 20 53 55 42 43 4f 4d  ge: .user SUBCOM
2f400 4d 41 4e 44 20 2e 2e 2e 5c 6e 22 29 3b 0a 20 20  MAND ...\n");.  
2f410 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2f420 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
2f430 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
2f440 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
2f450 29 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d  );.    if( strcm
2f460 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 6f 67 69  p(azArg[1],"logi
2f470 6e 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n")==0 ){.      
2f480 69 66 28 20 6e 41 72 67 21 3d 34 20 29 7b 0a 20  if( nArg!=4 ){. 
2f490 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
2f4a0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
2f4b0 3a 20 2e 75 73 65 72 20 6c 6f 67 69 6e 20 55 53  : .user login US
2f4c0 45 52 20 50 41 53 53 57 4f 52 44 5c 6e 22 29 3b  ER PASSWORD\n");
2f4d0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
2f4e0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  .        goto me
2f4f0 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
2f500 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
2f510 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73 65 72  c = sqlite3_user
2f520 5f 61 75 74 68 65 6e 74 69 63 61 74 65 28 70 2d  _authenticate(p-
2f530 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d 2c 20 61  >db, azArg[2], a
2f540 7a 41 72 67 5b 33 5d 2c 0a 20 20 20 20 20 20 20  zArg[3],.       
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f560 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
2f570 74 29 73 74 72 6c 65 6e 28 61 7a 41 72 67 5b 33  t)strlen(azArg[3
2f580 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  ]));.      if( r
2f590 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  c ){.        utf
2f5a0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
2f5b0 20 22 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e   "Authentication
2f5c0 20 66 61 69 6c 65 64 20 66 6f 72 20 75 73 65 72   failed for user
2f5d0 20 25 73 5c 6e 22 2c 20 61 7a 41 72 67 5b 32 5d   %s\n", azArg[2]
2f5e0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
2f5f0 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
2f600 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2f610 61 7a 41 72 67 5b 31 5d 2c 22 61 64 64 22 29 3d  azArg[1],"add")=
2f620 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
2f630 6e 41 72 67 21 3d 35 20 29 7b 0a 20 20 20 20 20  nArg!=5 ){.     
2f640 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2f650 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75  derr, "Usage: .u
2f660 73 65 72 20 61 64 64 20 55 53 45 52 20 50 41 53  ser add USER PAS
2f670 53 57 4f 52 44 20 49 53 41 44 4d 49 4e 5c 6e 22  SWORD ISADMIN\n"
2f680 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
2f690 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  1;.        goto 
2f6a0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2f6b0 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
2f6c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73   rc = sqlite3_us
2f6d0 65 72 5f 61 64 64 28 70 2d 3e 64 62 2c 20 61 7a  er_add(p->db, az
2f6e0 41 72 67 5b 32 5d 2c 0a 20 20 20 20 20 20 20 20  Arg[2],.        
2f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f700 20 20 20 20 61 7a 41 72 67 5b 33 5d 2c 20 28 69      azArg[3], (i
2f710 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72 67 5b  nt)strlen(azArg[
2f720 33 5d 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  3]),.           
2f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f740 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a   booleanValue(az
2f750 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20 20 20 20  Arg[4]));.      
2f760 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
2f770 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2f780 65 72 72 2c 20 22 55 73 65 72 2d 41 64 64 20 66  err, "User-Add f
2f790 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c 20 72 63  ailed: %d\n", rc
2f7a0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
2f7b0 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
2f7c0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2f7d0 61 7a 41 72 67 5b 31 5d 2c 22 65 64 69 74 22 29  azArg[1],"edit")
2f7e0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
2f7f0 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20 20 20 20   nArg!=5 ){.    
2f800 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2f810 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
2f820 75 73 65 72 20 65 64 69 74 20 55 53 45 52 20 50  user edit USER P
2f830 41 53 53 57 4f 52 44 20 49 53 41 44 4d 49 4e 5c  ASSWORD ISADMIN\
2f840 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  n");.        rc 
2f850 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 1;.        got
2f860 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
2f870 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  xit;.      }.   
2f880 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
2f890 75 73 65 72 5f 63 68 61 6e 67 65 28 70 2d 3e 64  user_change(p->d
2f8a0 62 2c 20 61 7a 41 72 67 5b 32 5d 2c 0a 20 20 20  b, azArg[2],.   
2f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8c0 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2f8d0 5b 33 5d 2c 20 28 69 6e 74 29 73 74 72 6c 65 6e  [3], (int)strlen
2f8e0 28 61 7a 41 72 67 5b 33 5d 29 2c 0a 20 20 20 20  (azArg[3]),.    
2f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f900 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 65 61            boolea
2f910 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 34 5d 29  nValue(azArg[4])
2f920 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20  );.      if( rc 
2f930 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
2f940 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
2f950 73 65 72 2d 45 64 69 74 20 66 61 69 6c 65 64 3a  ser-Edit failed:
2f960 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20   %d\n", rc);.   
2f970 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2f980 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69     }.    }else i
2f990 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b  f( strcmp(azArg[
2f9a0 31 5d 2c 22 64 65 6c 65 74 65 22 29 3d 3d 30 20  1],"delete")==0 
2f9b0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72  ){.      if( nAr
2f9c0 67 21 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20  g!=3 ){.        
2f9d0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2f9e0 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73 65 72  r, "Usage: .user
2f9f0 20 64 65 6c 65 74 65 20 55 53 45 52 5c 6e 22 29   delete USER\n")
2fa00 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
2fa10 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
2fa20 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
2fa30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
2fa40 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73 65  rc = sqlite3_use
2fa50 72 5f 64 65 6c 65 74 65 28 70 2d 3e 64 62 2c 20  r_delete(p->db, 
2fa60 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 20  azArg[2]);.     
2fa70 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
2fa80 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2fa90 64 65 72 72 2c 20 22 55 73 65 72 2d 44 65 6c 65  derr, "User-Dele
2faa0 74 65 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22  te failed: %d\n"
2fab0 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72  , rc);.        r
2fac0 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  c = 1;.      }. 
2fad0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2fae0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2faf0 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73 65 72  r, "Usage: .user
2fb00 20 6c 6f 67 69 6e 7c 61 64 64 7c 65 64 69 74 7c   login|add|edit|
2fb10 64 65 6c 65 74 65 20 2e 2e 2e 5c 6e 22 29 3b 0a  delete ...\n");.
2fb20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2fb30 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
2fb40 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
2fb50 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  }.  }else.#endif
2fb60 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f   /* SQLITE_USER_
2fb70 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a  AUTHENTICATION *
2fb80 2f 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76 27 20  /..  if( c=='v' 
2fb90 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
2fba0 5b 30 5d 2c 20 22 76 65 72 73 69 6f 6e 22 2c 20  [0], "version", 
2fbb0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66  n)==0 ){.    utf
2fbc0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2fbd0 20 22 53 51 4c 69 74 65 20 25 73 20 25 73 5c 6e   "SQLite %s %s\n
2fbe0 22 20 2f 2a 65 78 74 72 61 2d 76 65 72 73 69 6f  " /*extra-versio
2fbf0 6e 2d 69 6e 66 6f 2a 2f 2c 0a 20 20 20 20 20 20  n-info*/,.      
2fc00 20 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72    sqlite3_libver
2fc10 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f  sion(), sqlite3_
2fc20 73 6f 75 72 63 65 69 64 28 29 29 3b 0a 20 20 7d  sourceid());.  }
2fc30 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
2fc40 76 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  v' && strncmp(az
2fc50 41 72 67 5b 30 5d 2c 20 22 76 66 73 69 6e 66 6f  Arg[0], "vfsinfo
2fc60 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
2fc70 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 4e  const char *zDbN
2fc80 61 6d 65 20 3d 20 6e 41 72 67 3d 3d 32 20 3f 20  ame = nArg==2 ? 
2fc90 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e  azArg[1] : "main
2fca0 22 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76  ";.    sqlite3_v
2fcb0 66 73 20 2a 70 56 66 73 20 3d 20 30 3b 0a 20 20  fs *pVfs = 0;.  
2fcc0 20 20 69 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20    if( p->db ){. 
2fcd0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c       sqlite3_fil
2fce0 65 5f 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c  e_control(p->db,
2fcf0 20 7a 44 62 4e 61 6d 65 2c 20 53 51 4c 49 54 45   zDbName, SQLITE
2fd00 5f 46 43 4e 54 4c 5f 56 46 53 5f 50 4f 49 4e 54  _FCNTL_VFS_POINT
2fd10 45 52 2c 20 26 70 56 66 73 29 3b 0a 20 20 20 20  ER, &pVfs);.    
2fd20 20 20 69 66 28 20 70 56 66 73 20 29 7b 0a 20 20    if( pVfs ){.  
2fd30 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2fd40 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 7a  f(p->out, "vfs.z
2fd50 4e 61 6d 65 20 20 20 20 20 20 3d 20 5c 22 25 73  Name      = \"%s
2fd60 5c 22 5c 6e 22 2c 20 70 56 66 73 2d 3e 7a 4e 61  \"\n", pVfs->zNa
2fd70 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77  me);.        raw
2fd80 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2fd90 22 76 66 73 2e 69 56 65 72 73 69 6f 6e 20 20 20  "vfs.iVersion   
2fda0 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 69  = %d\n", pVfs->i
2fdb0 56 65 72 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20  Version);.      
2fdc0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
2fdd0 6f 75 74 2c 20 22 76 66 73 2e 73 7a 4f 73 46 69  out, "vfs.szOsFi
2fde0 6c 65 20 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56  le   = %d\n", pV
2fdf0 66 73 2d 3e 73 7a 4f 73 46 69 6c 65 29 3b 0a 20  fs->szOsFile);. 
2fe00 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
2fe10 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 6d  f(p->out, "vfs.m
2fe20 78 50 61 74 68 6e 61 6d 65 20 3d 20 25 64 5c 6e  xPathname = %d\n
2fe30 22 2c 20 70 56 66 73 2d 3e 6d 78 50 61 74 68 6e  ", pVfs->mxPathn
2fe40 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ame);.      }.  
2fe50 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
2fe60 66 28 20 63 3d 3d 27 76 27 20 26 26 20 73 74 72  f( c=='v' && str
2fe70 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
2fe80 76 66 73 6c 69 73 74 22 2c 20 6e 29 3d 3d 30 20  vfslist", n)==0 
2fe90 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76  ){.    sqlite3_v
2fea0 66 73 20 2a 70 56 66 73 3b 0a 20 20 20 20 73 71  fs *pVfs;.    sq
2feb0 6c 69 74 65 33 5f 76 66 73 20 2a 70 43 75 72 72  lite3_vfs *pCurr
2fec0 65 6e 74 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  ent = 0;.    if(
2fed0 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20 20 20 20   p->db ){.      
2fee0 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
2fef0 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 22 6d 61 69  trol(p->db, "mai
2ff00 6e 22 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  n", SQLITE_FCNTL
2ff10 5f 56 46 53 5f 50 4f 49 4e 54 45 52 2c 20 26 70  _VFS_POINTER, &p
2ff20 43 75 72 72 65 6e 74 29 3b 0a 20 20 20 20 7d 0a  Current);.    }.
2ff30 20 20 20 20 66 6f 72 28 70 56 66 73 3d 73 71 6c      for(pVfs=sql
2ff40 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29  ite3_vfs_find(0)
2ff50 3b 20 70 56 66 73 3b 20 70 56 66 73 3d 70 56 66  ; pVfs; pVfs=pVf
2ff60 73 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20  s->pNext){.     
2ff70 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
2ff80 6f 75 74 2c 20 22 76 66 73 2e 7a 4e 61 6d 65 20  out, "vfs.zName 
2ff90 20 20 20 20 20 3d 20 5c 22 25 73 5c 22 25 73 5c       = \"%s\"%s\
2ffa0 6e 22 2c 20 70 56 66 73 2d 3e 7a 4e 61 6d 65 2c  n", pVfs->zName,
2ffb0 0a 20 20 20 20 20 20 20 20 20 20 20 70 56 66 73  .           pVfs
2ffc0 3d 3d 70 43 75 72 72 65 6e 74 20 3f 20 22 20 20  ==pCurrent ? "  
2ffd0 3c 2d 2d 2d 20 43 55 52 52 45 4e 54 22 20 3a 20  <--- CURRENT" : 
2ffe0 22 22 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  "");.      raw_p
2fff0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76  rintf(p->out, "v
30000 66 73 2e 69 56 65 72 73 69 6f 6e 20 20 20 3d 20  fs.iVersion   = 
30010 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 69 56 65  %d\n", pVfs->iVe
30020 72 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 72 61  rsion);.      ra
30030 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
30040 20 22 76 66 73 2e 73 7a 4f 73 46 69 6c 65 20 20   "vfs.szOsFile  
30050 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e   = %d\n", pVfs->
30060 73 7a 4f 73 46 69 6c 65 29 3b 0a 20 20 20 20 20  szOsFile);.     
30070 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
30080 75 74 2c 20 22 76 66 73 2e 6d 78 50 61 74 68 6e  ut, "vfs.mxPathn
30090 61 6d 65 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66  ame = %d\n", pVf
300a0 73 2d 3e 6d 78 50 61 74 68 6e 61 6d 65 29 3b 0a  s->mxPathname);.
300b0 20 20 20 20 20 20 69 66 28 20 70 56 66 73 2d 3e        if( pVfs->
300c0 70 4e 65 78 74 20 29 7b 0a 20 20 20 20 20 20 20  pNext ){.       
300d0 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
300e0 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ut, "-----------
300f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30100 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 20 20  --------\n");.  
30110 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
30120 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76  lse..  if( c=='v
30130 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
30140 72 67 5b 30 5d 2c 20 22 76 66 73 6e 61 6d 65 22  rg[0], "vfsname"
30150 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63  , n)==0 ){.    c
30160 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61  onst char *zDbNa
30170 6d 65 20 3d 20 6e 41 72 67 3d 3d 32 20 3f 20 61  me = nArg==2 ? a
30180 7a 41 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22  zArg[1] : "main"
30190 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 56 66 73  ;.    char *zVfs
301a0 4e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20 69 66  Name = 0;.    if
301b0 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20 20 20  ( p->db ){.     
301c0 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
301d0 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 7a 44 62  ntrol(p->db, zDb
301e0 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e  Name, SQLITE_FCN
301f0 54 4c 5f 56 46 53 4e 41 4d 45 2c 20 26 7a 56 66  TL_VFSNAME, &zVf
30200 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66  sName);.      if
30210 28 20 7a 56 66 73 4e 61 6d 65 20 29 7b 0a 20 20  ( zVfsName ){.  
30220 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
30230 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22  f(p->out, "%s\n"
30240 2c 20 7a 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20  , zVfsName);.   
30250 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
30260 65 28 7a 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20  e(zVfsName);.   
30270 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
30280 73 65 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  se..#if defined(
30290 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
302a0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
302b0 45 4e 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43  ENABLE_WHERETRAC
302c0 45 29 0a 20 20 69 66 28 20 63 3d 3d 27 77 27 20  E).  if( c=='w' 
302d0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
302e0 5b 30 5d 2c 20 22 77 68 65 72 65 74 72 61 63 65  [0], "wheretrace
302f0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
30300 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61 63  sqlite3WhereTrac
30310 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 62 6f  e = nArg>=2 ? bo
30320 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
30330 5b 31 5d 29 20 3a 20 30 78 66 66 3b 0a 20 20 7d  [1]) : 0xff;.  }
30340 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69  else.#endif..  i
30350 66 28 20 63 3d 3d 27 77 27 20 26 26 20 73 74 72  f( c=='w' && str
30360 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
30370 77 69 64 74 68 22 2c 20 6e 29 3d 3d 30 20 29 7b  width", n)==0 ){
30380 0a 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20  .    int j;.    
30390 61 73 73 65 72 74 28 20 6e 41 72 67 3c 3d 41 72  assert( nArg<=Ar
303a0 72 61 79 53 69 7a 65 28 61 7a 41 72 67 29 20 29  raySize(azArg) )
303b0 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 31 3b 20 6a  ;.    for(j=1; j
303c0 3c 6e 41 72 67 20 26 26 20 6a 3c 41 72 72 61 79  <nArg && j<Array
303d0 53 69 7a 65 28 70 2d 3e 63 6f 6c 57 69 64 74 68  Size(p->colWidth
303e0 29 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 70  ); j++){.      p
303f0 2d 3e 63 6f 6c 57 69 64 74 68 5b 6a 2d 31 5d 20  ->colWidth[j-1] 
30400 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61  = (int)integerVa
30410 6c 75 65 28 61 7a 41 72 67 5b 6a 5d 29 3b 0a 20  lue(azArg[j]);. 
30420 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
30430 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  {.    utf8_print
30440 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
30450 3a 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e  : unknown comman
30460 64 20 6f 72 20 69 6e 76 61 6c 69 64 20 61 72 67  d or invalid arg
30470 75 6d 65 6e 74 73 3a 20 22 0a 20 20 20 20 20 20  uments: ".      
30480 22 20 5c 22 25 73 5c 22 2e 20 45 6e 74 65 72 20  " \"%s\". Enter 
30490 5c 22 2e 68 65 6c 70 5c 22 20 66 6f 72 20 68 65  \".help\" for he
304a0 6c 70 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29  lp\n", azArg[0])
304b0 3b 0a 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20  ;.    rc = 1;.  
304c0 7d 0a 0a 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  }..meta_command_
304d0 65 78 69 74 3a 0a 20 20 69 66 28 20 70 2d 3e 6f  exit:.  if( p->o
304e0 75 74 43 6f 75 6e 74 20 29 7b 0a 20 20 20 20 70  utCount ){.    p
304f0 2d 3e 6f 75 74 43 6f 75 6e 74 2d 2d 3b 0a 20 20  ->outCount--;.  
30500 20 20 69 66 28 20 70 2d 3e 6f 75 74 43 6f 75 6e    if( p->outCoun
30510 74 3d 3d 30 20 29 20 6f 75 74 70 75 74 5f 72 65  t==0 ) output_re
30520 73 65 74 28 70 29 3b 0a 20 20 7d 0a 20 20 72 65  set(p);.  }.  re
30530 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
30540 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20 69 66  * Return TRUE if
30550 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 20 6f 63 63   a semicolon occ
30560 75 72 73 20 61 6e 79 77 68 65 72 65 20 69 6e 20  urs anywhere in 
30570 74 68 65 20 66 69 72 73 74 20 4e 20 63 68 61 72  the first N char
30580 61 63 74 65 72 73 0a 2a 2a 20 6f 66 20 73 74 72  acters.** of str
30590 69 6e 67 20 7a 5b 5d 2e 0a 2a 2f 0a 73 74 61 74  ing z[]..*/.stat
305a0 69 63 20 69 6e 74 20 6c 69 6e 65 5f 63 6f 6e 74  ic int line_cont
305b0 61 69 6e 73 5f 73 65 6d 69 63 6f 6c 6f 6e 28 63  ains_semicolon(c
305c0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
305d0 74 20 4e 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  t N){.  int i;. 
305e0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 3b 20 69   for(i=0; i<N; i
305f0 2b 2b 29 7b 20 20 69 66 28 20 7a 5b 69 5d 3d 3d  ++){  if( z[i]==
30600 27 3b 27 20 29 20 72 65 74 75 72 6e 20 31 3b 20  ';' ) return 1; 
30610 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
30620 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73  ./*.** Test to s
30630 65 65 20 69 66 20 61 20 6c 69 6e 65 20 63 6f 6e  ee if a line con
30640 73 69 73 74 73 20 65 6e 74 69 72 65 6c 79 20 6f  sists entirely o
30650 66 20 77 68 69 74 65 73 70 61 63 65 2e 0a 2a 2f  f whitespace..*/
30660 0a 73 74 61 74 69 63 20 69 6e 74 20 5f 61 6c 6c  .static int _all
30670 5f 77 68 69 74 65 73 70 61 63 65 28 63 6f 6e 73  _whitespace(cons
30680 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 66 6f  t char *z){.  fo
30690 72 28 3b 20 2a 7a 3b 20 7a 2b 2b 29 7b 0a 20 20  r(; *z; z++){.  
306a0 20 20 69 66 28 20 49 73 53 70 61 63 65 28 7a 5b    if( IsSpace(z[
306b0 30 5d 29 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  0]) ) continue;.
306c0 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2f 27 20      if( *z=='/' 
306d0 26 26 20 7a 5b 31 5d 3d 3d 27 2a 27 20 29 7b 0a  && z[1]=='*' ){.
306e0 20 20 20 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20        z += 2;.  
306f0 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26      while( *z &&
30700 20 28 2a 7a 21 3d 27 2a 27 20 7c 7c 20 7a 5b 31   (*z!='*' || z[1
30710 5d 21 3d 27 2f 27 29 20 29 7b 20 7a 2b 2b 3b 20  ]!='/') ){ z++; 
30720 7d 0a 20 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d  }.      if( *z==
30730 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
30740 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 63      z++;.      c
30750 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 20  ontinue;.    }. 
30760 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 26     if( *z=='-' &
30770 26 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b 0a 20  & z[1]=='-' ){. 
30780 20 20 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20       z += 2;.   
30790 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20     while( *z && 
307a0 2a 7a 21 3d 27 5c 6e 27 20 29 7b 20 7a 2b 2b 3b  *z!='\n' ){ z++;
307b0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 2a 7a 3d   }.      if( *z=
307c0 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20  =0 ) return 1;. 
307d0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20       continue;. 
307e0 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
307f0 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  0;.  }.  return 
30800 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  1;.}../*.** Retu
30810 72 6e 20 54 52 55 45 20 69 66 20 74 68 65 20 6c  rn TRUE if the l
30820 69 6e 65 20 74 79 70 65 64 20 69 6e 20 69 73 20  ine typed in is 
30830 61 6e 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 74  an SQL command t
30840 65 72 6d 69 6e 61 74 6f 72 20 6f 74 68 65 72 0a  erminator other.
30850 2a 2a 20 74 68 61 6e 20 61 20 73 65 6d 69 2d 63  ** than a semi-c
30860 6f 6c 6f 6e 2e 20 20 54 68 65 20 53 51 4c 20 53  olon.  The SQL S
30870 65 72 76 65 72 20 73 74 79 6c 65 20 22 67 6f 22  erver style "go"
30880 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65   command is unde
30890 72 73 74 6f 6f 64 0a 2a 2a 20 61 73 20 69 73 20  rstood.** as is 
308a0 74 68 65 20 4f 72 61 63 6c 65 20 22 2f 22 2e 0a  the Oracle "/"..
308b0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6c 69  */.static int li
308c0 6e 65 5f 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74 65  ne_is_command_te
308d0 72 6d 69 6e 61 74 6f 72 28 63 6f 6e 73 74 20 63  rminator(const c
308e0 68 61 72 20 2a 7a 4c 69 6e 65 29 7b 0a 20 20 77  har *zLine){.  w
308f0 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 4c  hile( IsSpace(zL
30900 69 6e 65 5b 30 5d 29 20 29 7b 20 7a 4c 69 6e 65  ine[0]) ){ zLine
30910 2b 2b 3b 20 7d 3b 0a 20 20 69 66 28 20 7a 4c 69  ++; };.  if( zLi
30920 6e 65 5b 30 5d 3d 3d 27 2f 27 20 26 26 20 5f 61  ne[0]=='/' && _a
30930 6c 6c 5f 77 68 69 74 65 73 70 61 63 65 28 26 7a  ll_whitespace(&z
30940 4c 69 6e 65 5b 31 5d 29 20 29 7b 0a 20 20 20 20  Line[1]) ){.    
30950 72 65 74 75 72 6e 20 31 3b 20 20 2f 2a 20 4f 72  return 1;  /* Or
30960 61 63 6c 65 20 2a 2f 0a 20 20 7d 0a 20 20 69 66  acle */.  }.  if
30970 28 20 54 6f 4c 6f 77 65 72 28 7a 4c 69 6e 65 5b  ( ToLower(zLine[
30980 30 5d 29 3d 3d 27 67 27 20 26 26 20 54 6f 4c 6f  0])=='g' && ToLo
30990 77 65 72 28 7a 4c 69 6e 65 5b 31 5d 29 3d 3d 27  wer(zLine[1])=='
309a0 6f 27 0a 20 20 20 20 20 20 20 20 20 26 26 20 5f  o'.         && _
309b0 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 65 28 26  all_whitespace(&
309c0 7a 4c 69 6e 65 5b 32 5d 29 20 29 7b 0a 20 20 20  zLine[2]) ){.   
309d0 20 72 65 74 75 72 6e 20 31 3b 20 20 2f 2a 20 53   return 1;  /* S
309e0 51 4c 20 53 65 72 76 65 72 20 2a 2f 0a 20 20 7d  QL Server */.  }
309f0 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
30a00 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
30a10 65 20 69 66 20 7a 53 71 6c 20 69 73 20 61 20 63  e if zSql is a c
30a20 6f 6d 70 6c 65 74 65 20 53 51 4c 20 73 74 61 74  omplete SQL stat
30a30 65 6d 65 6e 74 2e 20 20 52 65 74 75 72 6e 20 66  ement.  Return f
30a40 61 6c 73 65 20 69 66 20 69 74 0a 2a 2a 20 65 6e  alse if it.** en
30a50 64 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  ds in the middle
30a60 20 6f 66 20 61 20 73 74 72 69 6e 67 20 6c 69 74   of a string lit
30a70 65 72 61 6c 20 6f 72 20 43 2d 73 74 79 6c 65 20  eral or C-style 
30a80 63 6f 6d 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74  comment..*/.stat
30a90 69 63 20 69 6e 74 20 6c 69 6e 65 5f 69 73 5f 63  ic int line_is_c
30aa0 6f 6d 70 6c 65 74 65 28 63 68 61 72 20 2a 7a 53  omplete(char *zS
30ab0 71 6c 2c 20 69 6e 74 20 6e 53 71 6c 29 7b 0a 20  ql, int nSql){. 
30ac0 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 7a   int rc;.  if( z
30ad0 53 71 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  Sql==0 ) return 
30ae0 31 3b 0a 20 20 7a 53 71 6c 5b 6e 53 71 6c 5d 20  1;.  zSql[nSql] 
30af0 3d 20 27 3b 27 3b 0a 20 20 7a 53 71 6c 5b 6e 53  = ';';.  zSql[nS
30b00 71 6c 2b 31 5d 20 3d 20 30 3b 0a 20 20 72 63 20  ql+1] = 0;.  rc 
30b10 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65  = sqlite3_comple
30b20 74 65 28 7a 53 71 6c 29 3b 0a 20 20 7a 53 71 6c  te(zSql);.  zSql
30b30 5b 6e 53 71 6c 5d 20 3d 20 30 3b 0a 20 20 72 65  [nSql] = 0;.  re
30b40 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
30b50 2a 20 52 75 6e 20 61 20 73 69 6e 67 6c 65 20 6c  * Run a single l
30b60 69 6e 65 20 6f 66 20 53 51 4c 0a 2a 2f 0a 73 74  ine of SQL.*/.st
30b70 61 74 69 63 20 69 6e 74 20 72 75 6e 4f 6e 65 53  atic int runOneS
30b80 71 6c 4c 69 6e 65 28 53 68 65 6c 6c 53 74 61 74  qlLine(ShellStat
30b90 65 20 2a 70 2c 20 63 68 61 72 20 2a 7a 53 71 6c  e *p, char *zSql
30ba0 2c 20 46 49 4c 45 20 2a 69 6e 2c 20 69 6e 74 20  , FILE *in, int 
30bb0 73 74 61 72 74 6c 69 6e 65 29 7b 0a 20 20 69 6e  startline){.  in
30bc0 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45  t rc;.  char *zE
30bd0 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 6f 70  rrMsg = 0;..  op
30be0 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 69  en_db(p, 0);.  i
30bf0 66 28 20 53 68 65 6c 6c 48 61 73 46 6c 61 67 28  f( ShellHasFlag(
30c00 70 2c 53 48 46 4c 47 5f 42 61 63 6b 73 6c 61 73  p,SHFLG_Backslas
30c10 68 29 20 29 20 72 65 73 6f 6c 76 65 5f 62 61 63  h) ) resolve_bac
30c20 6b 73 6c 61 73 68 65 73 28 7a 53 71 6c 29 3b 0a  kslashes(zSql);.
30c30 20 20 42 45 47 49 4e 5f 54 49 4d 45 52 3b 0a 20    BEGIN_TIMER;. 
30c40 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65 78 65 63   rc = shell_exec
30c50 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 73 68  (p->db, zSql, sh
30c60 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c  ell_callback, p,
30c70 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 45 4e   &zErrMsg);.  EN
30c80 44 5f 54 49 4d 45 52 3b 0a 20 20 69 66 28 20 72  D_TIMER;.  if( r
30c90 63 20 7c 7c 20 7a 45 72 72 4d 73 67 20 29 7b 0a  c || zErrMsg ){.
30ca0 20 20 20 20 63 68 61 72 20 7a 50 72 65 66 69 78      char zPrefix
30cb0 5b 31 30 30 5d 3b 0a 20 20 20 20 69 66 28 20 69  [100];.    if( i
30cc0 6e 21 3d 30 20 7c 7c 20 21 73 74 64 69 6e 5f 69  n!=0 || !stdin_i
30cd0 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 29 7b  s_interactive ){
30ce0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
30cf0 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
30d00 50 72 65 66 69 78 29 2c 20 7a 50 72 65 66 69 78  Prefix), zPrefix
30d10 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
30d20 20 20 20 20 20 20 20 20 20 22 45 72 72 6f 72 3a           "Error:
30d30 20 6e 65 61 72 20 6c 69 6e 65 20 25 64 3a 22 2c   near line %d:",
30d40 20 73 74 61 72 74 6c 69 6e 65 29 3b 0a 20 20 20   startline);.   
30d50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
30d60 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
30d70 69 7a 65 6f 66 28 7a 50 72 65 66 69 78 29 2c 20  izeof(zPrefix), 
30d80 7a 50 72 65 66 69 78 2c 20 22 45 72 72 6f 72 3a  zPrefix, "Error:
30d90 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ");.    }.    if
30da0 28 20 7a 45 72 72 4d 73 67 21 3d 30 20 29 7b 0a  ( zErrMsg!=0 ){.
30db0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
30dc0 66 28 73 74 64 65 72 72 2c 20 22 25 73 20 25 73  f(stderr, "%s %s
30dd0 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c 20 7a 45  \n", zPrefix, zE
30de0 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71  rrMsg);.      sq
30df0 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d  lite3_free(zErrM
30e00 73 67 29 3b 0a 20 20 20 20 20 20 7a 45 72 72 4d  sg);.      zErrM
30e10 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  sg = 0;.    }els
30e20 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  e{.      utf8_pr
30e30 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73  intf(stderr, "%s
30e40 20 25 73 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c   %s\n", zPrefix,
30e50 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
30e60 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 7d 0a 20  p->db));.    }. 
30e70 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
30e80 65 6c 73 65 20 69 66 28 20 53 68 65 6c 6c 48 61  else if( ShellHa
30e90 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 43  sFlag(p, SHFLG_C
30ea0 6f 75 6e 74 43 68 61 6e 67 65 73 29 20 29 7b 0a  ountChanges) ){.
30eb0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
30ec0 2d 3e 6f 75 74 2c 20 22 63 68 61 6e 67 65 73 3a  ->out, "changes:
30ed0 20 25 33 64 20 20 20 74 6f 74 61 6c 5f 63 68 61   %3d   total_cha
30ee0 6e 67 65 73 3a 20 25 64 5c 6e 22 2c 0a 20 20 20  nges: %d\n",.   
30ef0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
30f00 5f 63 68 61 6e 67 65 73 28 70 2d 3e 64 62 29 2c  _changes(p->db),
30f10 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
30f20 68 61 6e 67 65 73 28 70 2d 3e 64 62 29 29 3b 0a  hanges(p->db));.
30f30 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
30f40 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 69  }.../*.** Read i
30f50 6e 70 75 74 20 66 72 6f 6d 20 2a 69 6e 20 61 6e  nput from *in an
30f60 64 20 70 72 6f 63 65 73 73 20 69 74 2e 20 20 49  d process it.  I
30f70 66 20 2a 69 6e 3d 3d 30 20 74 68 65 6e 20 69 6e  f *in==0 then in
30f80 70 75 74 0a 2a 2a 20 69 73 20 69 6e 74 65 72 61  put.** is intera
30f90 63 74 69 76 65 20 2d 20 74 68 65 20 75 73 65 72  ctive - the user
30fa0 20 69 73 20 74 79 70 69 6e 67 20 69 74 20 69 74   is typing it it
30fb0 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e  .  Otherwise, in
30fc0 70 75 74 0a 2a 2a 20 69 73 20 63 6f 6d 69 6e 67  put.** is coming
30fd0 20 66 72 6f 6d 20 61 20 66 69 6c 65 20 6f 72 20   from a file or 
30fe0 64 65 76 69 63 65 2e 20 20 41 20 70 72 6f 6d 70  device.  A promp
30ff0 74 20 69 73 20 69 73 73 75 65 64 20 61 6e 64 20  t is issued and 
31000 68 69 73 74 6f 72 79 0a 2a 2a 20 69 73 20 73 61  history.** is sa
31010 76 65 64 20 6f 6e 6c 79 20 69 66 20 69 6e 70 75  ved only if inpu
31020 74 20 69 73 20 69 6e 74 65 72 61 63 74 69 76 65  t is interactive
31030 2e 20 20 41 6e 20 69 6e 74 65 72 72 75 70 74 20  .  An interrupt 
31040 73 69 67 6e 61 6c 20 77 69 6c 6c 0a 2a 2a 20 63  signal will.** c
31050 61 75 73 65 20 74 68 69 73 20 72 6f 75 74 69 6e  ause this routin
31060 65 20 74 6f 20 65 78 69 74 20 69 6d 6d 65 64 69  e to exit immedi
31070 61 74 65 6c 79 2c 20 75 6e 6c 65 73 73 20 69 6e  ately, unless in
31080 70 75 74 20 69 73 20 69 6e 74 65 72 61 63 74 69  put is interacti
31090 76 65 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  ve..**.** Return
310a0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
310b0 72 72 6f 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63  rrors..*/.static
310c0 20 69 6e 74 20 70 72 6f 63 65 73 73 5f 69 6e 70   int process_inp
310d0 75 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  ut(ShellState *p
310e0 2c 20 46 49 4c 45 20 2a 69 6e 29 7b 0a 20 20 63  , FILE *in){.  c
310f0 68 61 72 20 2a 7a 4c 69 6e 65 20 3d 20 30 3b 20  har *zLine = 0; 
31100 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69           /* A si
31110 6e 67 6c 65 20 69 6e 70 75 74 20 6c 69 6e 65 20  ngle input line 
31120 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 20  */.  char *zSql 
31130 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  = 0;           /
31140 2a 20 41 63 63 75 6d 75 6c 61 74 65 64 20 53 51  * Accumulated SQ
31150 4c 20 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  L text */.  int 
31160 6e 4c 69 6e 65 3b 20 20 20 20 20 20 20 20 20 20  nLine;          
31170 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
31180 6f 66 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20  of current line 
31190 2a 2f 0a 20 20 69 6e 74 20 6e 53 71 6c 20 3d 20  */.  int nSql = 
311a0 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
311b0 2a 20 42 79 74 65 73 20 6f 66 20 7a 53 71 6c 5b  * Bytes of zSql[
311c0 5d 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ] used */.  int 
311d0 6e 41 6c 6c 6f 63 20 3d 20 30 3b 20 20 20 20 20  nAlloc = 0;     
311e0 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
311f0 65 64 20 7a 53 71 6c 5b 5d 20 73 70 61 63 65 20  ed zSql[] space 
31200 2a 2f 0a 20 20 69 6e 74 20 6e 53 71 6c 50 72 69  */.  int nSqlPri
31210 6f 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 2f  or = 0;        /
31220 2a 20 42 79 74 65 73 20 6f 66 20 7a 53 71 6c 5b  * Bytes of zSql[
31230 5d 20 75 73 65 64 20 62 79 20 70 72 69 6f 72 20  ] used by prior 
31240 6c 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  line */.  int rc
31250 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
31260 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 63 6f 64      /* Error cod
31270 65 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6e  e */.  int errCn
31280 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  t = 0;          
31290 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
312a0 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  rors seen */.  i
312b0 6e 74 20 6c 69 6e 65 6e 6f 20 3d 20 30 3b 20 20  nt lineno = 0;  
312c0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
312d0 65 6e 74 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20  ent line number 
312e0 2a 2f 0a 20 20 69 6e 74 20 73 74 61 72 74 6c 69  */.  int startli
312f0 6e 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 2f  ne = 0;        /
31300 2a 20 4c 69 6e 65 20 6e 75 6d 62 65 72 20 66 6f  * Line number fo
31310 72 20 73 74 61 72 74 20 6f 66 20 63 75 72 72 65  r start of curre
31320 6e 74 20 69 6e 70 75 74 20 2a 2f 0a 0a 20 20 77  nt input */..  w
31330 68 69 6c 65 28 20 65 72 72 43 6e 74 3d 3d 30 20  hile( errCnt==0 
31340 7c 7c 20 21 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f  || !bail_on_erro
31350 72 20 7c 7c 20 28 69 6e 3d 3d 30 20 26 26 20 73  r || (in==0 && s
31360 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74  tdin_is_interact
31370 69 76 65 29 20 29 7b 0a 20 20 20 20 66 66 6c 75  ive) ){.    fflu
31380 73 68 28 70 2d 3e 6f 75 74 29 3b 0a 20 20 20 20  sh(p->out);.    
31390 7a 4c 69 6e 65 20 3d 20 6f 6e 65 5f 69 6e 70 75  zLine = one_inpu
313a0 74 5f 6c 69 6e 65 28 69 6e 2c 20 7a 4c 69 6e 65  t_line(in, zLine
313b0 2c 20 6e 53 71 6c 3e 30 29 3b 0a 20 20 20 20 69  , nSql>0);.    i
313c0 66 28 20 7a 4c 69 6e 65 3d 3d 30 20 29 7b 0a 20  f( zLine==0 ){. 
313d0 20 20 20 20 20 2f 2a 20 45 6e 64 20 6f 66 20 69       /* End of i
313e0 6e 70 75 74 20 2a 2f 0a 20 20 20 20 20 20 69 66  nput */.      if
313f0 28 20 69 6e 3d 3d 30 20 26 26 20 73 74 64 69 6e  ( in==0 && stdin
31400 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20  _is_interactive 
31410 29 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a  ) printf("\n");.
31420 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
31430 20 7d 0a 20 20 20 20 69 66 28 20 73 65 65 6e 49   }.    if( seenI
31440 6e 74 65 72 72 75 70 74 20 29 7b 0a 20 20 20 20  nterrupt ){.    
31450 20 20 69 66 28 20 69 6e 21 3d 30 20 29 20 62 72    if( in!=0 ) br
31460 65 61 6b 3b 0a 20 20 20 20 20 20 73 65 65 6e 49  eak;.      seenI
31470 6e 74 65 72 72 75 70 74 20 3d 20 30 3b 0a 20 20  nterrupt = 0;.  
31480 20 20 7d 0a 20 20 20 20 6c 69 6e 65 6e 6f 2b 2b    }.    lineno++
31490 3b 0a 20 20 20 20 69 66 28 20 6e 53 71 6c 3d 3d  ;.    if( nSql==
314a0 30 20 26 26 20 5f 61 6c 6c 5f 77 68 69 74 65 73  0 && _all_whites
314b0 70 61 63 65 28 7a 4c 69 6e 65 29 20 29 7b 0a 20  pace(zLine) ){. 
314c0 20 20 20 20 20 69 66 28 20 53 68 65 6c 6c 48 61       if( ShellHa
314d0 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 45  sFlag(p, SHFLG_E
314e0 63 68 6f 29 20 29 20 70 72 69 6e 74 66 28 22 25  cho) ) printf("%
314f0 73 5c 6e 22 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20  s\n", zLine);.  
31500 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
31510 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 4c 69 6e    }.    if( zLin
31520 65 20 26 26 20 7a 4c 69 6e 65 5b 30 5d 3d 3d 27  e && zLine[0]=='
31530 2e 27 20 26 26 20 6e 53 71 6c 3d 3d 30 20 29 7b  .' && nSql==0 ){
31540 0a 20 20 20 20 20 20 69 66 28 20 53 68 65 6c 6c  .      if( Shell
31550 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47  HasFlag(p, SHFLG
31560 5f 45 63 68 6f 29 20 29 20 70 72 69 6e 74 66 28  _Echo) ) printf(
31570 22 25 73 5c 6e 22 2c 20 7a 4c 69 6e 65 29 3b 0a  "%s\n", zLine);.
31580 20 20 20 20 20 20 72 63 20 3d 20 64 6f 5f 6d 65        rc = do_me
31590 74 61 5f 63 6f 6d 6d 61 6e 64 28 7a 4c 69 6e 65  ta_command(zLine
315a0 2c 20 70 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , p);.      if( 
315b0 72 63 3d 3d 32 20 29 7b 20 2f 2a 20 65 78 69 74  rc==2 ){ /* exit
315c0 20 72 65 71 75 65 73 74 65 64 20 2a 2f 0a 20 20   requested */.  
315d0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
315e0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 20     }else if( rc 
315f0 29 7b 0a 20 20 20 20 20 20 20 20 65 72 72 43 6e  ){.        errCn
31600 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  t++;.      }.   
31610 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20     continue;.   
31620 20 7d 0a 20 20 20 20 69 66 28 20 6c 69 6e 65 5f   }.    if( line_
31630 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74 65 72 6d 69  is_command_termi
31640 6e 61 74 6f 72 28 7a 4c 69 6e 65 29 20 26 26 20  nator(zLine) && 
31650 6c 69 6e 65 5f 69 73 5f 63 6f 6d 70 6c 65 74 65  line_is_complete
31660 28 7a 53 71 6c 2c 20 6e 53 71 6c 29 20 29 7b 0a  (zSql, nSql) ){.
31670 20 20 20 20 20 20 6d 65 6d 63 70 79 28 7a 4c 69        memcpy(zLi
31680 6e 65 2c 22 3b 22 2c 32 29 3b 0a 20 20 20 20 7d  ne,";",2);.    }
31690 0a 20 20 20 20 6e 4c 69 6e 65 20 3d 20 73 74 72  .    nLine = str
316a0 6c 65 6e 33 30 28 7a 4c 69 6e 65 29 3b 0a 20 20  len30(zLine);.  
316b0 20 20 69 66 28 20 6e 53 71 6c 2b 6e 4c 69 6e 65    if( nSql+nLine
316c0 2b 32 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20  +2>=nAlloc ){.  
316d0 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e 53 71      nAlloc = nSq
316e0 6c 2b 6e 4c 69 6e 65 2b 31 30 30 3b 0a 20 20 20  l+nLine+100;.   
316f0 20 20 20 7a 53 71 6c 20 3d 20 72 65 61 6c 6c 6f     zSql = reallo
31700 63 28 7a 53 71 6c 2c 20 6e 41 6c 6c 6f 63 29 3b  c(zSql, nAlloc);
31710 0a 20 20 20 20 20 20 69 66 28 20 7a 53 71 6c 3d  .      if( zSql=
31720 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  =0 ){.        ra
31730 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
31740 20 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20   "Error: out of 
31750 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20  memory\n");.    
31760 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20      exit(1);.   
31770 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e     }.    }.    n
31780 53 71 6c 50 72 69 6f 72 20 3d 20 6e 53 71 6c 3b  SqlPrior = nSql;
31790 0a 20 20 20 20 69 66 28 20 6e 53 71 6c 3d 3d 30  .    if( nSql==0
317a0 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b   ){.      int i;
317b0 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
317c0 7a 4c 69 6e 65 5b 69 5d 20 26 26 20 49 73 53 70  zLine[i] && IsSp
317d0 61 63 65 28 7a 4c 69 6e 65 5b 69 5d 29 3b 20 69  ace(zLine[i]); i
317e0 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 61 73 73 65  ++){}.      asse
317f0 72 74 28 20 6e 41 6c 6c 6f 63 3e 30 20 26 26 20  rt( nAlloc>0 && 
31800 7a 53 71 6c 21 3d 30 20 29 3b 0a 20 20 20 20 20  zSql!=0 );.     
31810 20 6d 65 6d 63 70 79 28 7a 53 71 6c 2c 20 7a 4c   memcpy(zSql, zL
31820 69 6e 65 2b 69 2c 20 6e 4c 69 6e 65 2b 31 2d 69  ine+i, nLine+1-i
31830 29 3b 0a 20 20 20 20 20 20 73 74 61 72 74 6c 69  );.      startli
31840 6e 65 20 3d 20 6c 69 6e 65 6e 6f 3b 0a 20 20 20  ne = lineno;.   
31850 20 20 20 6e 53 71 6c 20 3d 20 6e 4c 69 6e 65 2d     nSql = nLine-
31860 69 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  i;.    }else{.  
31870 20 20 20 20 7a 53 71 6c 5b 6e 53 71 6c 2b 2b 5d      zSql[nSql++]
31880 20 3d 20 27 5c 6e 27 3b 0a 20 20 20 20 20 20 6d   = '\n';.      m
31890 65 6d 63 70 79 28 7a 53 71 6c 2b 6e 53 71 6c 2c  emcpy(zSql+nSql,
318a0 20 7a 4c 69 6e 65 2c 20 6e 4c 69 6e 65 2b 31 29   zLine, nLine+1)
318b0 3b 0a 20 20 20 20 20 20 6e 53 71 6c 20 2b 3d 20  ;.      nSql += 
318c0 6e 4c 69 6e 65 3b 0a 20 20 20 20 7d 0a 20 20 20  nLine;.    }.   
318d0 20 69 66 28 20 6e 53 71 6c 20 26 26 20 6c 69 6e   if( nSql && lin
318e0 65 5f 63 6f 6e 74 61 69 6e 73 5f 73 65 6d 69 63  e_contains_semic
318f0 6f 6c 6f 6e 28 26 7a 53 71 6c 5b 6e 53 71 6c 50  olon(&zSql[nSqlP
31900 72 69 6f 72 5d 2c 20 6e 53 71 6c 2d 6e 53 71 6c  rior], nSql-nSql
31910 50 72 69 6f 72 29 0a 20 20 20 20 20 20 20 20 20  Prior).         
31920 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65         && sqlite
31930 33 5f 63 6f 6d 70 6c 65 74 65 28 7a 53 71 6c 29  3_complete(zSql)
31940 20 29 7b 0a 20 20 20 20 20 20 65 72 72 43 6e 74   ){.      errCnt
31950 20 2b 3d 20 72 75 6e 4f 6e 65 53 71 6c 4c 69 6e   += runOneSqlLin
31960 65 28 70 2c 20 7a 53 71 6c 2c 20 69 6e 2c 20 73  e(p, zSql, in, s
31970 74 61 72 74 6c 69 6e 65 29 3b 0a 20 20 20 20 20  tartline);.     
31980 20 6e 53 71 6c 20 3d 20 30 3b 0a 20 20 20 20 20   nSql = 0;.     
31990 20 69 66 28 20 70 2d 3e 6f 75 74 43 6f 75 6e 74   if( p->outCount
319a0 20 29 7b 0a 20 20 20 20 20 20 20 20 6f 75 74 70   ){.        outp
319b0 75 74 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20  ut_reset(p);.   
319c0 20 20 20 20 20 70 2d 3e 6f 75 74 43 6f 75 6e 74       p->outCount
319d0 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
319e0 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 53 71 6c    }else if( nSql
319f0 20 26 26 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70   && _all_whitesp
31a00 61 63 65 28 7a 53 71 6c 29 20 29 7b 0a 20 20 20  ace(zSql) ){.   
31a10 20 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46     if( ShellHasF
31a20 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 45 63 68  lag(p, SHFLG_Ech
31a30 6f 29 20 29 20 70 72 69 6e 74 66 28 22 25 73 5c  o) ) printf("%s\
31a40 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  n", zSql);.     
31a50 20 6e 53 71 6c 20 3d 20 30 3b 0a 20 20 20 20 7d   nSql = 0;.    }
31a60 0a 20 20 7d 0a 20 20 69 66 28 20 6e 53 71 6c 20  .  }.  if( nSql 
31a70 26 26 20 21 5f 61 6c 6c 5f 77 68 69 74 65 73 70  && !_all_whitesp
31a80 61 63 65 28 7a 53 71 6c 29 20 29 7b 0a 20 20 20  ace(zSql) ){.   
31a90 20 72 75 6e 4f 6e 65 53 71 6c 4c 69 6e 65 28 70   runOneSqlLine(p
31aa0 2c 20 7a 53 71 6c 2c 20 69 6e 2c 20 73 74 61 72  , zSql, in, star
31ab0 74 6c 69 6e 65 29 3b 0a 20 20 7d 0a 20 20 66 72  tline);.  }.  fr
31ac0 65 65 28 7a 53 71 6c 29 3b 0a 20 20 66 72 65 65  ee(zSql);.  free
31ad0 28 7a 4c 69 6e 65 29 3b 0a 20 20 72 65 74 75 72  (zLine);.  retur
31ae0 6e 20 65 72 72 43 6e 74 3e 30 3b 0a 7d 0a 0a 2f  n errCnt>0;.}../
31af0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 70 61  *.** Return a pa
31b00 74 68 6e 61 6d 65 20 77 68 69 63 68 20 69 73 20  thname which is 
31b10 74 68 65 20 75 73 65 72 27 73 20 68 6f 6d 65 20  the user's home 
31b20 64 69 72 65 63 74 6f 72 79 2e 20 20 41 0a 2a 2a  directory.  A.**
31b30 20 30 20 72 65 74 75 72 6e 20 69 6e 64 69 63 61   0 return indica
31b40 74 65 73 20 61 6e 20 65 72 72 6f 72 20 6f 66 20  tes an error of 
31b50 73 6f 6d 65 20 6b 69 6e 64 2e 0a 2a 2f 0a 73 74  some kind..*/.st
31b60 61 74 69 63 20 63 68 61 72 20 2a 66 69 6e 64 5f  atic char *find_
31b70 68 6f 6d 65 5f 64 69 72 28 69 6e 74 20 63 6c 65  home_dir(int cle
31b80 61 72 46 6c 61 67 29 7b 0a 20 20 73 74 61 74 69  arFlag){.  stati
31b90 63 20 63 68 61 72 20 2a 68 6f 6d 65 5f 64 69 72  c char *home_dir
31ba0 20 3d 20 4e 55 4c 4c 3b 0a 20 20 69 66 28 20 63   = NULL;.  if( c
31bb0 6c 65 61 72 46 6c 61 67 20 29 7b 0a 20 20 20 20  learFlag ){.    
31bc0 66 72 65 65 28 68 6f 6d 65 5f 64 69 72 29 3b 0a  free(home_dir);.
31bd0 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 30      home_dir = 0
31be0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
31bf0 20 20 7d 0a 20 20 69 66 28 20 68 6f 6d 65 5f 64    }.  if( home_d
31c00 69 72 20 29 20 72 65 74 75 72 6e 20 68 6f 6d 65  ir ) return home
31c10 5f 64 69 72 3b 0a 0a 23 69 66 20 21 64 65 66 69  _dir;..#if !defi
31c20 6e 65 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21  ned(_WIN32) && !
31c30 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 20 26  defined(WIN32) &
31c40 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 33  & !defined(_WIN3
31c50 32 5f 57 43 45 29 20 5c 0a 20 20 20 20 20 26 26  2_WCE) \.     &&
31c60 20 21 64 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f   !defined(__RTP_
31c70 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
31c80 57 52 53 5f 4b 45 52 4e 45 4c 29 0a 20 20 7b 0a  WRS_KERNEL).  {.
31c90 20 20 20 20 73 74 72 75 63 74 20 70 61 73 73 77      struct passw
31ca0 64 20 2a 70 77 65 6e 74 3b 0a 20 20 20 20 75 69  d *pwent;.    ui
31cb0 64 5f 74 20 75 69 64 20 3d 20 67 65 74 75 69 64  d_t uid = getuid
31cc0 28 29 3b 0a 20 20 20 20 69 66 28 20 28 70 77 65  ();.    if( (pwe
31cd0 6e 74 3d 67 65 74 70 77 75 69 64 28 75 69 64 29  nt=getpwuid(uid)
31ce0 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 20  ) != NULL) {.   
31cf0 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 70 77     home_dir = pw
31d00 65 6e 74 2d 3e 70 77 5f 64 69 72 3b 0a 20 20 20  ent->pw_dir;.   
31d10 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23   }.  }.#endif..#
31d20 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33  if defined(_WIN3
31d30 32 5f 57 43 45 29 0a 20 20 2f 2a 20 57 69 6e 64  2_WCE).  /* Wind
31d40 6f 77 73 20 43 45 20 28 61 72 6d 2d 77 69 6e 63  ows CE (arm-winc
31d50 65 2d 6d 69 6e 67 77 33 32 63 65 2d 67 63 63 29  e-mingw32ce-gcc)
31d60 20 64 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69 64   does not provid
31d70 65 20 67 65 74 65 6e 76 28 29 0a 20 20 20 2a 2f  e getenv().   */
31d80 0a 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 22 2f  .  home_dir = "/
31d90 22 3b 0a 23 65 6c 73 65 0a 0a 23 69 66 20 64 65  ";.#else..#if de
31da0 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c  fined(_WIN32) ||
31db0 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 0a   defined(WIN32).
31dc0 20 20 69 66 20 28 21 68 6f 6d 65 5f 64 69 72 29    if (!home_dir)
31dd0 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20   {.    home_dir 
31de0 3d 20 67 65 74 65 6e 76 28 22 55 53 45 52 50 52  = getenv("USERPR
31df0 4f 46 49 4c 45 22 29 3b 0a 20 20 7d 0a 23 65 6e  OFILE");.  }.#en
31e00 64 69 66 0a 0a 20 20 69 66 20 28 21 68 6f 6d 65  dif..  if (!home
31e10 5f 64 69 72 29 20 7b 0a 20 20 20 20 68 6f 6d 65  _dir) {.    home
31e20 5f 64 69 72 20 3d 20 67 65 74 65 6e 76 28 22 48  _dir = getenv("H
31e30 4f 4d 45 22 29 3b 0a 20 20 7d 0a 0a 23 69 66 20  OME");.  }..#if 
31e40 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
31e50 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
31e60 29 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f 64 69  ).  if (!home_di
31e70 72 29 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  r) {.    char *z
31e80 44 72 69 76 65 2c 20 2a 7a 50 61 74 68 3b 0a 20  Drive, *zPath;. 
31e90 20 20 20 69 6e 74 20 6e 3b 0a 20 20 20 20 7a 44     int n;.    zD
31ea0 72 69 76 65 20 3d 20 67 65 74 65 6e 76 28 22 48  rive = getenv("H
31eb0 4f 4d 45 44 52 49 56 45 22 29 3b 0a 20 20 20 20  OMEDRIVE");.    
31ec0 7a 50 61 74 68 20 3d 20 67 65 74 65 6e 76 28 22  zPath = getenv("
31ed0 48 4f 4d 45 50 41 54 48 22 29 3b 0a 20 20 20 20  HOMEPATH");.    
31ee0 69 66 28 20 7a 44 72 69 76 65 20 26 26 20 7a 50  if( zDrive && zP
31ef0 61 74 68 20 29 7b 0a 20 20 20 20 20 20 6e 20 3d  ath ){.      n =
31f00 20 73 74 72 6c 65 6e 33 30 28 7a 44 72 69 76 65   strlen30(zDrive
31f10 29 20 2b 20 73 74 72 6c 65 6e 33 30 28 7a 50 61  ) + strlen30(zPa
31f20 74 68 29 20 2b 20 31 3b 0a 20 20 20 20 20 20 68  th) + 1;.      h
31f30 6f 6d 65 5f 64 69 72 20 3d 20 6d 61 6c 6c 6f 63  ome_dir = malloc
31f40 28 20 6e 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ( n );.      if(
31f50 20 68 6f 6d 65 5f 64 69 72 3d 3d 30 20 29 20 72   home_dir==0 ) r
31f60 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 73  eturn 0;.      s
31f70 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
31f80 6e 2c 20 68 6f 6d 65 5f 64 69 72 2c 20 22 25 73  n, home_dir, "%s
31f90 25 73 22 2c 20 7a 44 72 69 76 65 2c 20 7a 50 61  %s", zDrive, zPa
31fa0 74 68 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  th);.      retur
31fb0 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a 20 20 20 20  n home_dir;.    
31fc0 7d 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d  }.    home_dir =
31fd0 20 22 63 3a 5c 5c 22 3b 0a 20 20 7d 0a 23 65 6e   "c:\\";.  }.#en
31fe0 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 21  dif..#endif /* !
31ff0 5f 57 49 4e 33 32 5f 57 43 45 20 2a 2f 0a 0a 20  _WIN32_WCE */.. 
32000 20 69 66 28 20 68 6f 6d 65 5f 64 69 72 20 29 7b   if( home_dir ){
32010 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 74 72  .    int n = str
32020 6c 65 6e 33 30 28 68 6f 6d 65 5f 64 69 72 29 20  len30(home_dir) 
32030 2b 20 31 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  + 1;.    char *z
32040 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 20 29 3b 0a   = malloc( n );.
32050 20 20 20 20 69 66 28 20 7a 20 29 20 6d 65 6d 63      if( z ) memc
32060 70 79 28 7a 2c 20 68 6f 6d 65 5f 64 69 72 2c 20  py(z, home_dir, 
32070 6e 29 3b 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72  n);.    home_dir
32080 20 3d 20 7a 3b 0a 20 20 7d 0a 0a 20 20 72 65 74   = z;.  }..  ret
32090 75 72 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a 7d 0a  urn home_dir;.}.
320a0 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 69 6e 70 75  ./*.** Read inpu
320b0 74 20 66 72 6f 6d 20 74 68 65 20 66 69 6c 65 20  t from the file 
320c0 67 69 76 65 6e 20 62 79 20 73 71 6c 69 74 65 72  given by sqliter
320d0 63 5f 6f 76 65 72 72 69 64 65 2e 20 20 4f 72 20  c_override.  Or 
320e0 69 66 20 74 68 61 74 0a 2a 2a 20 70 61 72 61 6d  if that.** param
320f0 65 74 65 72 20 69 73 20 4e 55 4c 4c 2c 20 74 61  eter is NULL, ta
32100 6b 65 20 69 6e 70 75 74 20 66 72 6f 6d 20 7e 2f  ke input from ~/
32110 2e 73 71 6c 69 74 65 72 63 0a 2a 2a 0a 2a 2a 20  .sqliterc.**.** 
32120 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  Returns the numb
32130 65 72 20 6f 66 20 65 72 72 6f 72 73 2e 0a 2a 2f  er of errors..*/
32140 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 72 6f  .static void pro
32150 63 65 73 73 5f 73 71 6c 69 74 65 72 63 28 0a 20  cess_sqliterc(. 
32160 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20   ShellState *p, 
32170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32180 20 2f 2a 20 43 6f 6e 66 69 67 75 72 61 74 69 6f   /* Configuratio
32190 6e 20 64 61 74 61 20 2a 2f 0a 20 20 63 6f 6e 73  n data */.  cons
321a0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 72 63  t char *sqliterc
321b0 5f 6f 76 65 72 72 69 64 65 20 20 20 2f 2a 20 4e  _override   /* N
321c0 61 6d 65 20 6f 66 20 63 6f 6e 66 69 67 20 66 69  ame of config fi
321d0 6c 65 2e 20 4e 55 4c 4c 20 74 6f 20 75 73 65 20  le. NULL to use 
321e0 64 65 66 61 75 6c 74 20 2a 2f 0a 29 7b 0a 20 20  default */.){.  
321f0 63 68 61 72 20 2a 68 6f 6d 65 5f 64 69 72 20 3d  char *home_dir =
32200 20 4e 55 4c 4c 3b 0a 20 20 63 6f 6e 73 74 20 63   NULL;.  const c
32210 68 61 72 20 2a 73 71 6c 69 74 65 72 63 20 3d 20  har *sqliterc = 
32220 73 71 6c 69 74 65 72 63 5f 6f 76 65 72 72 69 64  sqliterc_overrid
32230 65 3b 0a 20 20 63 68 61 72 20 2a 7a 42 75 66 20  e;.  char *zBuf 
32240 3d 20 30 3b 0a 20 20 46 49 4c 45 20 2a 69 6e 20  = 0;.  FILE *in 
32250 3d 20 4e 55 4c 4c 3b 0a 0a 20 20 69 66 20 28 73  = NULL;..  if (s
32260 71 6c 69 74 65 72 63 20 3d 3d 20 4e 55 4c 4c 29  qliterc == NULL)
32270 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20   {.    home_dir 
32280 3d 20 66 69 6e 64 5f 68 6f 6d 65 5f 64 69 72 28  = find_home_dir(
32290 30 29 3b 0a 20 20 20 20 69 66 28 20 68 6f 6d 65  0);.    if( home
322a0 5f 64 69 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20  _dir==0 ){.     
322b0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
322c0 72 72 2c 20 22 2d 2d 20 77 61 72 6e 69 6e 67 3a  rr, "-- warning:
322d0 20 63 61 6e 6e 6f 74 20 66 69 6e 64 20 68 6f 6d   cannot find hom
322e0 65 20 64 69 72 65 63 74 6f 72 79 3b 22 0a 20 20  e directory;".  
322f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32300 20 20 20 20 22 20 63 61 6e 6e 6f 74 20 72 65 61      " cannot rea
32310 64 20 7e 2f 2e 73 71 6c 69 74 65 72 63 5c 6e 22  d ~/.sqliterc\n"
32320 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b  );.      return;
32330 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
32340 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b  e3_initialize();
32350 0a 20 20 20 20 7a 42 75 66 20 3d 20 73 71 6c 69  .    zBuf = sqli
32360 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 2f  te3_mprintf("%s/
32370 2e 73 71 6c 69 74 65 72 63 22 2c 68 6f 6d 65 5f  .sqliterc",home_
32380 64 69 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  dir);.    sqlite
32390 72 63 20 3d 20 7a 42 75 66 3b 0a 20 20 7d 0a 20  rc = zBuf;.  }. 
323a0 20 69 6e 20 3d 20 66 6f 70 65 6e 28 73 71 6c 69   in = fopen(sqli
323b0 74 65 72 63 2c 22 72 62 22 29 3b 0a 20 20 69 66  terc,"rb");.  if
323c0 28 20 69 6e 20 29 7b 0a 20 20 20 20 69 66 28 20  ( in ){.    if( 
323d0 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63  stdin_is_interac
323e0 74 69 76 65 20 29 7b 0a 20 20 20 20 20 20 75 74  tive ){.      ut
323f0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
32400 2c 22 2d 2d 20 4c 6f 61 64 69 6e 67 20 72 65 73  ,"-- Loading res
32410 6f 75 72 63 65 73 20 66 72 6f 6d 20 25 73 5c 6e  ources from %s\n
32420 22 2c 73 71 6c 69 74 65 72 63 29 3b 0a 20 20 20  ",sqliterc);.   
32430 20 7d 0a 20 20 20 20 70 72 6f 63 65 73 73 5f 69   }.    process_i
32440 6e 70 75 74 28 70 2c 69 6e 29 3b 0a 20 20 20 20  nput(p,in);.    
32450 66 63 6c 6f 73 65 28 69 6e 29 3b 0a 20 20 7d 0a  fclose(in);.  }.
32460 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
32470 42 75 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53  Buf);.}../*.** S
32480 68 6f 77 20 61 76 61 69 6c 61 62 6c 65 20 63 6f  how available co
32490 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f  mmand line optio
324a0 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e  ns.*/.static con
324b0 73 74 20 63 68 61 72 20 7a 4f 70 74 69 6f 6e 73  st char zOptions
324c0 5b 5d 20 3d 0a 20 20 22 20 20 20 2d 61 73 63 69  [] =.  "   -asci
324d0 69 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i               
324e0 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  set output mode 
324f0 74 6f 20 27 61 73 63 69 69 27 5c 6e 22 0a 20 20  to 'ascii'\n".  
32500 22 20 20 20 2d 62 61 69 6c 20 20 20 20 20 20 20  "   -bail       
32510 20 20 20 20 20 20 20 20 20 73 74 6f 70 20 61 66           stop af
32520 74 65 72 20 68 69 74 74 69 6e 67 20 61 6e 20 65  ter hitting an e
32530 72 72 6f 72 5c 6e 22 0a 20 20 22 20 20 20 2d 62  rror\n".  "   -b
32540 61 74 63 68 20 20 20 20 20 20 20 20 20 20 20 20  atch            
32550 20 20 20 66 6f 72 63 65 20 62 61 74 63 68 20 49     force batch I
32560 2f 4f 5c 6e 22 0a 20 20 22 20 20 20 2d 63 6f 6c  /O\n".  "   -col
32570 75 6d 6e 20 20 20 20 20 20 20 20 20 20 20 20 20  umn             
32580 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65   set output mode
32590 20 74 6f 20 27 63 6f 6c 75 6d 6e 27 5c 6e 22 0a   to 'column'\n".
325a0 20 20 22 20 20 20 2d 63 6d 64 20 43 4f 4d 4d 41    "   -cmd COMMA
325b0 4e 44 20 20 20 20 20 20 20 20 20 72 75 6e 20 5c  ND         run \
325c0 22 43 4f 4d 4d 41 4e 44 5c 22 20 62 65 66 6f 72  "COMMAND\" befor
325d0 65 20 72 65 61 64 69 6e 67 20 73 74 64 69 6e 5c  e reading stdin\
325e0 6e 22 0a 20 20 22 20 20 20 2d 63 73 76 20 20 20  n".  "   -csv   
325f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
32600 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f  t output mode to
32610 20 27 63 73 76 27 5c 6e 22 0a 20 20 22 20 20 20   'csv'\n".  "   
32620 2d 65 63 68 6f 20 20 20 20 20 20 20 20 20 20 20  -echo           
32630 20 20 20 20 20 70 72 69 6e 74 20 63 6f 6d 6d 61       print comma
32640 6e 64 73 20 62 65 66 6f 72 65 20 65 78 65 63 75  nds before execu
32650 74 69 6f 6e 5c 6e 22 0a 20 20 22 20 20 20 2d 69  tion\n".  "   -i
32660 6e 69 74 20 46 49 4c 45 4e 41 4d 45 20 20 20 20  nit FILENAME    
32670 20 20 20 72 65 61 64 2f 70 72 6f 63 65 73 73 20     read/process 
32680 6e 61 6d 65 64 20 66 69 6c 65 5c 6e 22 0a 20 20  named file\n".  
32690 22 20 20 20 2d 5b 6e 6f 5d 68 65 61 64 65 72 20  "   -[no]header 
326a0 20 20 20 20 20 20 20 20 20 74 75 72 6e 20 68 65           turn he
326b0 61 64 65 72 73 20 6f 6e 20 6f 72 20 6f 66 66 5c  aders on or off\
326c0 6e 22 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  n".#if defined(S
326d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
326e0 53 59 53 33 29 20 7c 7c 20 64 65 66 69 6e 65 64  SYS3) || defined
326f0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
32700 45 4d 53 59 53 35 29 0a 20 20 22 20 20 20 2d 68  EMSYS5).  "   -h
32710 65 61 70 20 53 49 5a 45 20 20 20 20 20 20 20 20  eap SIZE        
32720 20 20 20 53 69 7a 65 20 6f 66 20 68 65 61 70 20     Size of heap 
32730 66 6f 72 20 6d 65 6d 73 79 73 33 20 6f 72 20 6d  for memsys3 or m
32740 65 6d 73 79 73 35 5c 6e 22 0a 23 65 6e 64 69 66  emsys5\n".#endif
32750 0a 20 20 22 20 20 20 2d 68 65 6c 70 20 20 20 20  .  "   -help    
32760 20 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 77              show
32770 20 74 68 69 73 20 6d 65 73 73 61 67 65 5c 6e 22   this message\n"
32780 0a 20 20 22 20 20 20 2d 68 74 6d 6c 20 20 20 20  .  "   -html    
32790 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
327a0 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 48  output mode to H
327b0 54 4d 4c 5c 6e 22 0a 20 20 22 20 20 20 2d 69 6e  TML\n".  "   -in
327c0 74 65 72 61 63 74 69 76 65 20 20 20 20 20 20 20  teractive       
327d0 20 20 66 6f 72 63 65 20 69 6e 74 65 72 61 63 74    force interact
327e0 69 76 65 20 49 2f 4f 5c 6e 22 0a 20 20 22 20 20  ive I/O\n".  "  
327f0 20 2d 6c 69 6e 65 20 20 20 20 20 20 20 20 20 20   -line          
32800 20 20 20 20 20 20 73 65 74 20 6f 75 74 70 75 74        set output
32810 20 6d 6f 64 65 20 74 6f 20 27 6c 69 6e 65 27 5c   mode to 'line'\
32820 6e 22 0a 20 20 22 20 20 20 2d 6c 69 73 74 20 20  n".  "   -list  
32830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
32840 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f  t output mode to
32850 20 27 6c 69 73 74 27 5c 6e 22 0a 20 20 22 20 20   'list'\n".  "  
32860 20 2d 6c 6f 6f 6b 61 73 69 64 65 20 53 49 5a 45   -lookaside SIZE
32870 20 4e 20 20 20 20 75 73 65 20 4e 20 65 6e 74 72   N    use N entr
32880 69 65 73 20 6f 66 20 53 5a 20 62 79 74 65 73 20  ies of SZ bytes 
32890 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65  for lookaside me
328a0 6d 6f 72 79 5c 6e 22 0a 20 20 22 20 20 20 2d 6d  mory\n".  "   -m
328b0 6d 61 70 20 4e 20 20 20 20 20 20 20 20 20 20 20  map N           
328c0 20 20 20 64 65 66 61 75 6c 74 20 6d 6d 61 70 20     default mmap 
328d0 73 69 7a 65 20 73 65 74 20 74 6f 20 4e 5c 6e 22  size set to N\n"
328e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
328f0 4e 41 42 4c 45 5f 4d 55 4c 54 49 50 4c 45 58 0a  NABLE_MULTIPLEX.
32900 20 20 22 20 20 20 2d 6d 75 6c 74 69 70 6c 65 78    "   -multiplex
32910 20 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c             enabl
32920 65 20 74 68 65 20 6d 75 6c 74 69 70 6c 65 78 6f  e the multiplexo
32930 72 20 56 46 53 5c 6e 22 0a 23 65 6e 64 69 66 0a  r VFS\n".#endif.
32940 20 20 22 20 20 20 2d 6e 65 77 6c 69 6e 65 20 53    "   -newline S
32950 45 50 20 20 20 20 20 20 20 20 20 73 65 74 20 6f  EP         set o
32960 75 74 70 75 74 20 72 6f 77 20 73 65 70 61 72 61  utput row separa
32970 74 6f 72 2e 20 44 65 66 61 75 6c 74 3a 20 27 5c  tor. Default: '\
32980 5c 6e 27 5c 6e 22 0a 20 20 22 20 20 20 2d 6e 75  \n'\n".  "   -nu
32990 6c 6c 76 61 6c 75 65 20 54 45 58 54 20 20 20 20  llvalue TEXT    
329a0 20 20 73 65 74 20 74 65 78 74 20 73 74 72 69 6e    set text strin
329b0 67 20 66 6f 72 20 4e 55 4c 4c 20 76 61 6c 75 65  g for NULL value
329c0 73 2e 20 44 65 66 61 75 6c 74 20 27 27 5c 6e 22  s. Default ''\n"
329d0 0a 20 20 22 20 20 20 2d 70 61 67 65 63 61 63 68  .  "   -pagecach
329e0 65 20 53 49 5a 45 20 4e 20 20 20 20 75 73 65 20  e SIZE N    use 
329f0 4e 20 73 6c 6f 74 73 20 6f 66 20 53 5a 20 62 79  N slots of SZ by
32a00 74 65 73 20 65 61 63 68 20 66 6f 72 20 70 61 67  tes each for pag
32a10 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 5c 6e  e cache memory\n
32a20 22 0a 20 20 22 20 20 20 2d 71 75 6f 74 65 20 20  ".  "   -quote  
32a30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
32a40 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20   output mode to 
32a50 27 71 75 6f 74 65 27 5c 6e 22 0a 20 20 22 20 20  'quote'\n".  "  
32a60 20 2d 73 65 70 61 72 61 74 6f 72 20 53 45 50 20   -separator SEP 
32a70 20 20 20 20 20 20 73 65 74 20 6f 75 74 70 75 74        set output
32a80 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f   column separato
32a90 72 2e 20 44 65 66 61 75 6c 74 3a 20 27 7c 27 5c  r. Default: '|'\
32aa0 6e 22 0a 20 20 22 20 20 20 2d 73 74 61 74 73 20  n".  "   -stats 
32ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
32ac0 69 6e 74 20 6d 65 6d 6f 72 79 20 73 74 61 74 73  int memory stats
32ad0 20 62 65 66 6f 72 65 20 65 61 63 68 20 66 69 6e   before each fin
32ae0 61 6c 69 7a 65 5c 6e 22 0a 20 20 22 20 20 20 2d  alize\n".  "   -
32af0 76 65 72 73 69 6f 6e 20 20 20 20 20 20 20 20 20  version         
32b00 20 20 20 20 73 68 6f 77 20 53 51 4c 69 74 65 20      show SQLite 
32b10 76 65 72 73 69 6f 6e 5c 6e 22 0a 20 20 22 20 20  version\n".  "  
32b20 20 2d 76 66 73 20 4e 41 4d 45 20 20 20 20 20 20   -vfs NAME      
32b30 20 20 20 20 20 20 75 73 65 20 4e 41 4d 45 20 61        use NAME a
32b40 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 56 46  s the default VF
32b50 53 5c 6e 22 0a 23 69 66 64 65 66 20 53 51 4c 49  S\n".#ifdef SQLI
32b60 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53 54 52 41  TE_ENABLE_VFSTRA
32b70 43 45 0a 20 20 22 20 20 20 2d 76 66 73 74 72 61  CE.  "   -vfstra
32b80 63 65 20 20 20 20 20 20 20 20 20 20 20 20 65 6e  ce            en
32b90 61 62 6c 65 20 74 72 61 63 69 6e 67 20 6f 66 20  able tracing of 
32ba0 61 6c 6c 20 56 46 53 20 63 61 6c 6c 73 5c 6e 22  all VFS calls\n"
32bb0 0a 23 65 6e 64 69 66 0a 3b 0a 73 74 61 74 69 63  .#endif.;.static
32bc0 20 76 6f 69 64 20 75 73 61 67 65 28 69 6e 74 20   void usage(int 
32bd0 73 68 6f 77 44 65 74 61 69 6c 29 7b 0a 20 20 75  showDetail){.  u
32be0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
32bf0 72 2c 0a 20 20 20 20 20 20 22 55 73 61 67 65 3a  r,.      "Usage:
32c00 20 25 73 20 5b 4f 50 54 49 4f 4e 53 5d 20 46 49   %s [OPTIONS] FI
32c10 4c 45 4e 41 4d 45 20 5b 53 51 4c 5d 5c 6e 22 0a  LENAME [SQL]\n".
32c20 20 20 20 20 20 20 22 46 49 4c 45 4e 41 4d 45 20        "FILENAME 
32c30 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
32c40 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  n SQLite databas
32c50 65 2e 20 41 20 6e 65 77 20 64 61 74 61 62 61 73  e. A new databas
32c60 65 20 69 73 20 63 72 65 61 74 65 64 5c 6e 22 0a  e is created\n".
32c70 20 20 20 20 20 20 22 69 66 20 74 68 65 20 66 69        "if the fi
32c80 6c 65 20 64 6f 65 73 20 6e 6f 74 20 70 72 65 76  le does not prev
32c90 69 6f 75 73 6c 79 20 65 78 69 73 74 2e 5c 6e 22  iously exist.\n"
32ca0 2c 20 41 72 67 76 30 29 3b 0a 20 20 69 66 28 20  , Argv0);.  if( 
32cb0 73 68 6f 77 44 65 74 61 69 6c 20 29 7b 0a 20 20  showDetail ){.  
32cc0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
32cd0 64 65 72 72 2c 20 22 4f 50 54 49 4f 4e 53 20 69  derr, "OPTIONS i
32ce0 6e 63 6c 75 64 65 3a 5c 6e 25 73 22 2c 20 7a 4f  nclude:\n%s", zO
32cf0 70 74 69 6f 6e 73 29 3b 0a 20 20 7d 65 6c 73 65  ptions);.  }else
32d00 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
32d10 28 73 74 64 65 72 72 2c 20 22 55 73 65 20 74 68  (stderr, "Use th
32d20 65 20 2d 68 65 6c 70 20 6f 70 74 69 6f 6e 20 66  e -help option f
32d30 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
32d40 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29 3b 0a 20  formation\n");. 
32d50 20 7d 0a 20 20 65 78 69 74 28 31 29 3b 0a 7d 0a   }.  exit(1);.}.
32d60 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c 69 7a  ./*.** Initializ
32d70 65 20 74 68 65 20 73 74 61 74 65 20 69 6e 66 6f  e the state info
32d80 72 6d 61 74 69 6f 6e 20 69 6e 20 64 61 74 61 0a  rmation in data.
32d90 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d  */.static void m
32da0 61 69 6e 5f 69 6e 69 74 28 53 68 65 6c 6c 53 74  ain_init(ShellSt
32db0 61 74 65 20 2a 64 61 74 61 29 20 7b 0a 20 20 6d  ate *data) {.  m
32dc0 65 6d 73 65 74 28 64 61 74 61 2c 20 30 2c 20 73  emset(data, 0, s
32dd0 69 7a 65 6f 66 28 2a 64 61 74 61 29 29 3b 0a 20  izeof(*data));. 
32de0 20 64 61 74 61 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64   data->normalMod
32df0 65 20 3d 20 64 61 74 61 2d 3e 63 4d 6f 64 65 20  e = data->cMode 
32e00 3d 20 64 61 74 61 2d 3e 6d 6f 64 65 20 3d 20 4d  = data->mode = M
32e10 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 64 61 74 61  ODE_List;.  data
32e20 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20  ->autoExplain = 
32e30 31 3b 0a 20 20 6d 65 6d 63 70 79 28 64 61 74 61  1;.  memcpy(data
32e40 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 53  ->colSeparator,S
32e50 45 50 5f 43 6f 6c 75 6d 6e 2c 20 32 29 3b 0a 20  EP_Column, 2);. 
32e60 20 6d 65 6d 63 70 79 28 64 61 74 61 2d 3e 72 6f   memcpy(data->ro
32e70 77 53 65 70 61 72 61 74 6f 72 2c 53 45 50 5f 52  wSeparator,SEP_R
32e80 6f 77 2c 20 32 29 3b 0a 20 20 64 61 74 61 2d 3e  ow, 2);.  data->
32e90 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a  showHeader = 0;.
32ea0 20 20 64 61 74 61 2d 3e 73 68 65 6c 6c 46 6c 67    data->shellFlg
32eb0 73 20 3d 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73  s = SHFLG_Lookas
32ec0 69 64 65 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  ide;.  sqlite3_c
32ed0 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
32ee0 46 49 47 5f 55 52 49 2c 20 31 29 3b 0a 20 20 73  FIG_URI, 1);.  s
32ef0 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
32f00 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c  LITE_CONFIG_LOG,
32f10 20 73 68 65 6c 6c 4c 6f 67 2c 20 64 61 74 61 29   shellLog, data)
32f20 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66  ;.  sqlite3_conf
32f30 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ig(SQLITE_CONFIG
32f40 5f 4d 55 4c 54 49 54 48 52 45 41 44 29 3b 0a 20  _MULTITHREAD);. 
32f50 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
32f60 66 28 73 69 7a 65 6f 66 28 6d 61 69 6e 50 72 6f  f(sizeof(mainPro
32f70 6d 70 74 29 2c 20 6d 61 69 6e 50 72 6f 6d 70 74  mpt), mainPrompt
32f80 2c 22 73 71 6c 69 74 65 3e 20 22 29 3b 0a 20 20  ,"sqlite> ");.  
32f90 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
32fa0 28 73 69 7a 65 6f 66 28 63 6f 6e 74 69 6e 75 65  (sizeof(continue
32fb0 50 72 6f 6d 70 74 29 2c 20 63 6f 6e 74 69 6e 75  Prompt), continu
32fc0 65 50 72 6f 6d 70 74 2c 22 20 20 20 2e 2e 2e 3e  ePrompt,"   ...>
32fd0 20 22 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75   ");.}../*.** Ou
32fe0 74 70 75 74 20 74 65 78 74 20 74 6f 20 74 68 65  tput text to the
32ff0 20 63 6f 6e 73 6f 6c 65 20 69 6e 20 61 20 66 6f   console in a fo
33000 6e 74 20 74 68 61 74 20 61 74 74 72 61 63 74 73  nt that attracts
33010 20 65 78 74 72 61 20 61 74 74 65 6e 74 69 6f 6e   extra attention
33020 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 57 49 4e  ..*/.#ifdef _WIN
33030 33 32 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70  32.static void p
33040 72 69 6e 74 42 6f 6c 64 28 63 6f 6e 73 74 20 63  rintBold(const c
33050 68 61 72 20 2a 7a 54 65 78 74 29 7b 0a 20 20 48  har *zText){.  H
33060 41 4e 44 4c 45 20 6f 75 74 20 3d 20 47 65 74 53  ANDLE out = GetS
33070 74 64 48 61 6e 64 6c 65 28 53 54 44 5f 4f 55 54  tdHandle(STD_OUT
33080 50 55 54 5f 48 41 4e 44 4c 45 29 3b 0a 20 20 43  PUT_HANDLE);.  C
33090 4f 4e 53 4f 4c 45 5f 53 43 52 45 45 4e 5f 42 55  ONSOLE_SCREEN_BU
330a0 46 46 45 52 5f 49 4e 46 4f 20 64 65 66 61 75 6c  FFER_INFO defaul
330b0 74 53 63 72 65 65 6e 49 6e 66 6f 3b 0a 20 20 47  tScreenInfo;.  G
330c0 65 74 43 6f 6e 73 6f 6c 65 53 63 72 65 65 6e 42  etConsoleScreenB
330d0 75 66 66 65 72 49 6e 66 6f 28 6f 75 74 2c 20 26  ufferInfo(out, &
330e0 64 65 66 61 75 6c 74 53 63 72 65 65 6e 49 6e 66  defaultScreenInf
330f0 6f 29 3b 0a 20 20 53 65 74 43 6f 6e 73 6f 6c 65  o);.  SetConsole
33100 54 65 78 74 41 74 74 72 69 62 75 74 65 28 6f 75  TextAttribute(ou
33110 74 2c 0a 20 20 20 20 20 20 20 20 20 46 4f 52 45  t,.         FORE
33120 47 52 4f 55 4e 44 5f 52 45 44 7c 46 4f 52 45 47  GROUND_RED|FOREG
33130 52 4f 55 4e 44 5f 49 4e 54 45 4e 53 49 54 59 0a  ROUND_INTENSITY.
33140 20 20 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 25    );.  printf("%
33150 73 22 2c 20 7a 54 65 78 74 29 3b 0a 20 20 53 65  s", zText);.  Se
33160 74 43 6f 6e 73 6f 6c 65 54 65 78 74 41 74 74 72  tConsoleTextAttr
33170 69 62 75 74 65 28 6f 75 74 2c 20 64 65 66 61 75  ibute(out, defau
33180 6c 74 53 63 72 65 65 6e 49 6e 66 6f 2e 77 41 74  ltScreenInfo.wAt
33190 74 72 69 62 75 74 65 73 29 3b 0a 7d 0a 23 65 6c  tributes);.}.#el
331a0 73 65 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70  se.static void p
331b0 72 69 6e 74 42 6f 6c 64 28 63 6f 6e 73 74 20 63  rintBold(const c
331c0 68 61 72 20 2a 7a 54 65 78 74 29 7b 0a 20 20 70  har *zText){.  p
331d0 72 69 6e 74 66 28 22 5c 30 33 33 5b 31 6d 25 73  rintf("\033[1m%s
331e0 5c 30 33 33 5b 30 6d 22 2c 20 7a 54 65 78 74 29  \033[0m", zText)
331f0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
33200 2a 20 47 65 74 20 74 68 65 20 61 72 67 75 6d 65  * Get the argume
33210 6e 74 20 74 6f 20 61 6e 20 2d 2d 6f 70 74 69 6f  nt to an --optio
33220 6e 2e 20 20 54 68 72 6f 77 20 61 6e 20 65 72 72  n.  Throw an err
33230 6f 72 20 61 6e 64 20 64 69 65 20 69 66 20 6e 6f  or and die if no
33240 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 69 73 20   argument.** is 
33250 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 73 74  available..*/.st
33260 61 74 69 63 20 63 68 61 72 20 2a 63 6d 64 6c 69  atic char *cmdli
33270 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28  ne_option_value(
33280 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a  int argc, char *
33290 2a 61 72 67 76 2c 20 69 6e 74 20 69 29 7b 0a 20  *argv, int i){. 
332a0 20 69 66 28 20 69 3d 3d 61 72 67 63 20 29 7b 0a   if( i==argc ){.
332b0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
332c0 73 74 64 65 72 72 2c 20 22 25 73 3a 20 45 72 72  stderr, "%s: Err
332d0 6f 72 3a 20 6d 69 73 73 69 6e 67 20 61 72 67 75  or: missing argu
332e0 6d 65 6e 74 20 74 6f 20 25 73 5c 6e 22 2c 0a 20  ment to %s\n",. 
332f0 20 20 20 20 20 20 20 20 20 20 20 61 72 67 76 5b             argv[
33300 30 5d 2c 20 61 72 67 76 5b 61 72 67 63 2d 31 5d  0], argv[argc-1]
33310 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a  );.    exit(1);.
33320 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 61 72 67    }.  return arg
33330 76 5b 69 5d 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  v[i];.}..#ifndef
33340 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53   SQLITE_SHELL_IS
33350 5f 55 54 46 38 0a 23 20 20 69 66 20 28 64 65 66  _UTF8.#  if (def
33360 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20  ined(_WIN32) || 
33370 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 29 20  defined(WIN32)) 
33380 26 26 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f  && defined(_MSC_
33390 56 45 52 29 0a 23 20 20 20 20 64 65 66 69 6e 65  VER).#    define
333a0 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53   SQLITE_SHELL_IS
333b0 5f 55 54 46 38 20 20 20 20 20 20 20 20 20 20 28  _UTF8          (
333c0 30 29 0a 23 20 20 65 6c 73 65 0a 23 20 20 20 20  0).#  else.#    
333d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 48  define SQLITE_SH
333e0 45 4c 4c 5f 49 53 5f 55 54 46 38 20 20 20 20 20  ELL_IS_UTF8     
333f0 20 20 20 20 20 28 31 29 0a 23 20 20 65 6e 64 69       (1).#  endi
33400 66 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51  f.#endif..#if SQ
33410 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55 54  LITE_SHELL_IS_UT
33420 46 38 0a 69 6e 74 20 53 51 4c 49 54 45 5f 43 44  F8.int SQLITE_CD
33430 45 43 4c 20 6d 61 69 6e 28 69 6e 74 20 61 72 67  ECL main(int arg
33440 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 29 7b  c, char **argv){
33450 0a 23 65 6c 73 65 0a 69 6e 74 20 53 51 4c 49 54  .#else.int SQLIT
33460 45 5f 43 44 45 43 4c 20 77 6d 61 69 6e 28 69 6e  E_CDECL wmain(in
33470 74 20 61 72 67 63 2c 20 77 63 68 61 72 5f 74 20  t argc, wchar_t 
33480 2a 2a 77 61 72 67 76 29 7b 0a 20 20 63 68 61 72  **wargv){.  char
33490 20 2a 2a 61 72 67 76 3b 0a 23 65 6e 64 69 66 0a   **argv;.#endif.
334a0 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20    char *zErrMsg 
334b0 3d 20 30 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74  = 0;.  ShellStat
334c0 65 20 64 61 74 61 3b 0a 20 20 63 6f 6e 73 74 20  e data;.  const 
334d0 63 68 61 72 20 2a 7a 49 6e 69 74 46 69 6c 65 20  char *zInitFile 
334e0 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  = 0;.  int i;.  
334f0 69 6e 74 20 72 63 20 3d 20 30 3b 0a 20 20 69 6e  int rc = 0;.  in
33500 74 20 77 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62  t warnInmemoryDb
33510 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 65 61 64   = 0;.  int read
33520 53 74 64 69 6e 20 3d 20 31 3b 0a 20 20 69 6e 74  Stdin = 1;.  int
33530 20 6e 43 6d 64 20 3d 20 30 3b 0a 20 20 63 68 61   nCmd = 0;.  cha
33540 72 20 2a 2a 61 7a 43 6d 64 20 3d 20 30 3b 0a 0a  r **azCmd = 0;..
33550 20 20 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28    setBinaryMode(
33560 73 74 64 69 6e 2c 20 30 29 3b 0a 20 20 73 65 74  stdin, 0);.  set
33570 76 62 75 66 28 73 74 64 65 72 72 2c 20 30 2c 20  vbuf(stderr, 0, 
33580 5f 49 4f 4e 42 46 2c 20 30 29 3b 20 2f 2a 20 4d  _IONBF, 0); /* M
33590 61 6b 65 20 73 75 72 65 20 73 74 64 65 72 72 20  ake sure stderr 
335a0 69 73 20 75 6e 62 75 66 66 65 72 65 64 20 2a 2f  is unbuffered */
335b0 0a 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65  .  stdin_is_inte
335c0 72 61 63 74 69 76 65 20 3d 20 69 73 61 74 74 79  ractive = isatty
335d0 28 30 29 3b 0a 20 20 73 74 64 6f 75 74 5f 69 73  (0);.  stdout_is
335e0 5f 63 6f 6e 73 6f 6c 65 20 3d 20 69 73 61 74 74  _console = isatt
335f0 79 28 31 29 3b 0a 0a 23 69 66 20 55 53 45 5f 53  y(1);..#if USE_S
33600 59 53 54 45 4d 5f 53 51 4c 49 54 45 2b 30 21 3d  YSTEM_SQLITE+0!=
33610 31 0a 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28  1.  if( strncmp(
33620 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64  sqlite3_sourceid
33630 28 29 2c 53 51 4c 49 54 45 5f 53 4f 55 52 43 45  (),SQLITE_SOURCE
33640 5f 49 44 2c 36 30 29 21 3d 30 20 29 7b 0a 20 20  _ID,60)!=0 ){.  
33650 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
33660 64 65 72 72 2c 20 22 53 51 4c 69 74 65 20 68 65  derr, "SQLite he
33670 61 64 65 72 20 61 6e 64 20 73 6f 75 72 63 65 20  ader and source 
33680 76 65 72 73 69 6f 6e 20 6d 69 73 6d 61 74 63 68  version mismatch
33690 5c 6e 25 73 5c 6e 25 73 5c 6e 22 2c 0a 20 20 20  \n%s\n%s\n",.   
336a0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
336b0 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 53 51 4c  _sourceid(), SQL
336c0 49 54 45 5f 53 4f 55 52 43 45 5f 49 44 29 3b 0a  ITE_SOURCE_ID);.
336d0 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d      exit(1);.  }
336e0 0a 23 65 6e 64 69 66 0a 20 20 6d 61 69 6e 5f 69  .#endif.  main_i
336f0 6e 69 74 28 26 64 61 74 61 29 3b 0a 23 69 66 20  nit(&data);.#if 
33700 21 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53  !SQLITE_SHELL_IS
33710 5f 55 54 46 38 0a 20 20 73 71 6c 69 74 65 33 5f  _UTF8.  sqlite3_
33720 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20 20  initialize();.  
33730 61 72 67 76 20 3d 20 73 71 6c 69 74 65 33 5f 6d  argv = sqlite3_m
33740 61 6c 6c 6f 63 36 34 28 73 69 7a 65 6f 66 28 61  alloc64(sizeof(a
33750 72 67 76 5b 30 5d 29 2a 61 72 67 63 29 3b 0a 20  rgv[0])*argc);. 
33760 20 69 66 28 20 61 72 67 76 3d 3d 30 20 29 7b 0a   if( argv==0 ){.
33770 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
33780 74 64 65 72 72 2c 20 22 6f 75 74 20 6f 66 20 6d  tderr, "out of m
33790 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 65  emory\n");.    e
337a0 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20 66 6f  xit(1);.  }.  fo
337b0 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69  r(i=0; i<argc; i
337c0 2b 2b 29 7b 0a 20 20 20 20 61 72 67 76 5b 69 5d  ++){.    argv[i]
337d0 20 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32   = sqlite3_win32
337e0 5f 75 6e 69 63 6f 64 65 5f 74 6f 5f 75 74 66 38  _unicode_to_utf8
337f0 28 77 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20  (wargv[i]);.    
33800 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d 30 20 29  if( argv[i]==0 )
33810 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
33820 74 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20  tf(stderr, "out 
33830 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20  of memory\n");. 
33840 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20       exit(1);.  
33850 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20    }.  }.#endif. 
33860 20 61 73 73 65 72 74 28 20 61 72 67 63 3e 3d 31   assert( argc>=1
33870 20 26 26 20 61 72 67 76 20 26 26 20 61 72 67 76   && argv && argv
33880 5b 30 5d 20 29 3b 0a 20 20 41 72 67 76 30 20 3d  [0] );.  Argv0 =
33890 20 61 72 67 76 5b 30 5d 3b 0a 0a 20 20 2f 2a 20   argv[0];..  /* 
338a0 4d 61 6b 65 20 73 75 72 65 20 77 65 20 68 61 76  Make sure we hav
338b0 65 20 61 20 76 61 6c 69 64 20 73 69 67 6e 61 6c  e a valid signal
338c0 20 68 61 6e 64 6c 65 72 20 65 61 72 6c 79 2c 20   handler early, 
338d0 62 65 66 6f 72 65 20 61 6e 79 74 68 69 6e 67 0a  before anything.
338e0 20 20 2a 2a 20 65 6c 73 65 20 69 73 20 64 6f 6e    ** else is don
338f0 65 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  e..  */.#ifdef S
33900 49 47 49 4e 54 0a 20 20 73 69 67 6e 61 6c 28 53  IGINT.  signal(S
33910 49 47 49 4e 54 2c 20 69 6e 74 65 72 72 75 70 74  IGINT, interrupt
33920 5f 68 61 6e 64 6c 65 72 29 3b 0a 23 65 6e 64 69  _handler);.#endi
33930 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
33940 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52  _SHELL_DBNAME_PR
33950 4f 43 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 49 66  OC.  {.    /* If
33960 20 74 68 65 20 53 51 4c 49 54 45 5f 53 48 45 4c   the SQLITE_SHEL
33970 4c 5f 44 42 4e 41 4d 45 5f 50 52 4f 43 20 6d 61  L_DBNAME_PROC ma
33980 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 2c 20  cro is defined, 
33990 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e  then it is the n
339a0 61 6d 65 0a 20 20 20 20 2a 2a 20 6f 66 20 61 20  ame.    ** of a 
339b0 43 2d 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20  C-function that 
339c0 77 69 6c 6c 20 70 72 6f 76 69 64 65 20 74 68 65  will provide the
339d0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
339e0 61 62 61 73 65 20 66 69 6c 65 2e 20 20 55 73 65  abase file.  Use
339f0 0a 20 20 20 20 2a 2a 20 74 68 69 73 20 63 6f 6d  .    ** this com
33a00 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
33a10 20 74 6f 20 65 6d 62 65 64 20 74 68 69 73 20 73   to embed this s
33a20 68 65 6c 6c 20 70 72 6f 67 72 61 6d 20 69 6e 20  hell program in 
33a30 6c 61 72 67 65 72 0a 20 20 20 20 2a 2a 20 61 70  larger.    ** ap
33a40 70 6c 69 63 61 74 69 6f 6e 73 2e 20 2a 2f 0a 20  plications. */. 
33a50 20 20 20 65 78 74 65 72 6e 20 76 6f 69 64 20 53     extern void S
33a60 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41  QLITE_SHELL_DBNA
33a70 4d 45 5f 50 52 4f 43 28 63 6f 6e 73 74 20 63 68  ME_PROC(const ch
33a80 61 72 2a 2a 29 3b 0a 20 20 20 20 53 51 4c 49 54  ar**);.    SQLIT
33a90 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45 5f 50  E_SHELL_DBNAME_P
33aa0 52 4f 43 28 26 64 61 74 61 2e 7a 44 62 46 69 6c  ROC(&data.zDbFil
33ab0 65 6e 61 6d 65 29 3b 0a 20 20 20 20 77 61 72 6e  ename);.    warn
33ac0 49 6e 6d 65 6d 6f 72 79 44 62 20 3d 20 30 3b 0a  InmemoryDb = 0;.
33ad0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
33ae0 20 44 6f 20 61 6e 20 69 6e 69 74 69 61 6c 20 70   Do an initial p
33af0 61 73 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ass through the 
33b00 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67  command-line arg
33b10 75 6d 65 6e 74 20 74 6f 20 6c 6f 63 61 74 65 0a  ument to locate.
33b20 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66    ** the name of
33b30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
33b40 6c 65 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  le, the name of 
33b50 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
33b60 6f 6e 20 66 69 6c 65 2c 0a 20 20 2a 2a 20 74 68  on file,.  ** th
33b70 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 61 6c  e size of the al
33b80 74 65 72 6e 61 74 69 76 65 20 6d 61 6c 6c 6f 63  ternative malloc
33b90 20 68 65 61 70 2c 0a 20 20 2a 2a 20 61 6e 64 20   heap,.  ** and 
33ba0 74 68 65 20 66 69 72 73 74 20 63 6f 6d 6d 61 6e  the first comman
33bb0 64 20 74 6f 20 65 78 65 63 75 74 65 2e 0a 20 20  d to execute..  
33bc0 2a 2f 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c  */.  for(i=1; i<
33bd0 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
33be0 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20 7a 20 3d  char *z;.    z =
33bf0 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20 20 69 66   argv[i];.    if
33c00 28 20 7a 5b 30 5d 21 3d 27 2d 27 20 29 7b 0a 20  ( z[0]!='-' ){. 
33c10 20 20 20 20 20 69 66 28 20 64 61 74 61 2e 7a 44       if( data.zD
33c20 62 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a  bFilename==0 ){.
33c30 20 20 20 20 20 20 20 20 64 61 74 61 2e 7a 44 62          data.zDb
33c40 46 69 6c 65 6e 61 6d 65 20 3d 20 7a 3b 0a 20 20  Filename = z;.  
33c50 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
33c60 20 20 20 2f 2a 20 45 78 63 65 73 73 73 20 61 72     /* Excesss ar
33c70 67 75 6d 65 6e 74 73 20 61 72 65 20 69 6e 74 65  guments are inte
33c80 72 70 72 65 74 65 64 20 61 73 20 53 51 4c 20 28  rpreted as SQL (
33c90 6f 72 20 64 6f 74 2d 63 6f 6d 6d 61 6e 64 73 29  or dot-commands)
33ca0 20 61 6e 64 0a 20 20 20 20 20 20 20 20 2a 2a 20   and.        ** 
33cb0 6d 65 61 6e 20 74 68 61 74 20 6e 6f 74 68 69 6e  mean that nothin
33cc0 67 20 69 73 20 72 65 61 64 20 66 72 6f 6d 20 73  g is read from s
33cd0 74 64 69 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  tdin */.        
33ce0 72 65 61 64 53 74 64 69 6e 20 3d 20 30 3b 0a 20  readStdin = 0;. 
33cf0 20 20 20 20 20 20 20 6e 43 6d 64 2b 2b 3b 0a 20         nCmd++;. 
33d00 20 20 20 20 20 20 20 61 7a 43 6d 64 20 3d 20 72         azCmd = r
33d10 65 61 6c 6c 6f 63 28 61 7a 43 6d 64 2c 20 73 69  ealloc(azCmd, si
33d20 7a 65 6f 66 28 61 7a 43 6d 64 5b 30 5d 29 2a 6e  zeof(azCmd[0])*n
33d30 43 6d 64 29 3b 0a 20 20 20 20 20 20 20 20 69 66  Cmd);.        if
33d40 28 20 61 7a 43 6d 64 3d 3d 30 20 29 7b 0a 20 20  ( azCmd==0 ){.  
33d50 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
33d60 74 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20  tf(stderr, "out 
33d70 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20  of memory\n");. 
33d80 20 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29           exit(1)
33d90 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
33da0 20 20 20 20 61 7a 43 6d 64 5b 6e 43 6d 64 2d 31      azCmd[nCmd-1
33db0 5d 20 3d 20 7a 3b 0a 20 20 20 20 20 20 7d 0a 20  ] = z;.      }. 
33dc0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 5b 31     }.    if( z[1
33dd0 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20  ]=='-' ) z++;.  
33de0 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22    if( strcmp(z,"
33df0 2d 73 65 70 61 72 61 74 6f 72 22 29 3d 3d 30 0a  -separator")==0.
33e00 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a       || strcmp(z
33e10 2c 22 2d 6e 75 6c 6c 76 61 6c 75 65 22 29 3d 3d  ,"-nullvalue")==
33e20 30 0a 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70  0.     || strcmp
33e30 28 7a 2c 22 2d 6e 65 77 6c 69 6e 65 22 29 3d 3d  (z,"-newline")==
33e40 30 0a 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70  0.     || strcmp
33e50 28 7a 2c 22 2d 63 6d 64 22 29 3d 3d 30 0a 20 20  (z,"-cmd")==0.  
33e60 20 20 29 7b 0a 20 20 20 20 20 20 28 76 6f 69 64    ){.      (void
33e70 29 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f  )cmdline_option_
33e80 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72 67 76  value(argc, argv
33e90 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 7d 65 6c 73  , ++i);.    }els
33ea0 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
33eb0 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a 20 20  -init")==0 ){.  
33ec0 20 20 20 20 7a 49 6e 69 74 46 69 6c 65 20 3d 20      zInitFile = 
33ed0 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76  cmdline_option_v
33ee0 61 6c 75 65 28 61 72 67 63 2c 20 61 72 67 76 2c  alue(argc, argv,
33ef0 20 2b 2b 69 29 3b 0a 20 20 20 20 7d 65 6c 73 65   ++i);.    }else
33f00 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
33f10 62 61 74 63 68 22 29 3d 3d 30 20 29 7b 0a 20 20  batch")==0 ){.  
33f20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 63      /* Need to c
33f30 68 65 63 6b 20 66 6f 72 20 62 61 74 63 68 20 6d  heck for batch m
33f40 6f 64 65 20 68 65 72 65 20 74 6f 20 73 6f 20 77  ode here to so w
33f50 65 20 63 61 6e 20 61 76 6f 69 64 20 70 72 69 6e  e can avoid prin
33f60 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 69 6e  ting.      ** in
33f70 66 6f 72 6d 61 74 69 6f 6e 61 6c 20 6d 65 73 73  formational mess
33f80 61 67 65 73 20 28 6c 69 6b 65 20 66 72 6f 6d 20  ages (like from 
33f90 70 72 6f 63 65 73 73 5f 73 71 6c 69 74 65 72 63  process_sqliterc
33fa0 29 20 62 65 66 6f 72 65 0a 20 20 20 20 20 20 2a  ) before.      *
33fb0 2a 20 77 65 20 64 6f 20 74 68 65 20 61 63 74 75  * we do the actu
33fc0 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66  al processing of
33fd0 20 61 72 67 75 6d 65 6e 74 73 20 6c 61 74 65 72   arguments later
33fe0 20 69 6e 20 61 20 73 65 63 6f 6e 64 20 70 61 73   in a second pas
33ff0 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  s..      */.    
34000 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72    stdin_is_inter
34010 61 63 74 69 76 65 20 3d 20 30 3b 0a 20 20 20 20  active = 0;.    
34020 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
34030 28 7a 2c 22 2d 68 65 61 70 22 29 3d 3d 30 20 29  (z,"-heap")==0 )
34040 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  {.#if defined(SQ
34050 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
34060 59 53 33 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  YS3) || defined(
34070 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
34080 4d 53 59 53 35 29 0a 20 20 20 20 20 20 63 6f 6e  MSYS5).      con
34090 73 74 20 63 68 61 72 20 2a 7a 53 69 7a 65 3b 0a  st char *zSize;.
340a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
340b0 74 36 34 20 73 7a 48 65 61 70 3b 0a 0a 20 20 20  t64 szHeap;..   
340c0 20 20 20 7a 53 69 7a 65 20 3d 20 63 6d 64 6c 69     zSize = cmdli
340d0 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28  ne_option_value(
340e0 61 72 67 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29  argc, argv, ++i)
340f0 3b 0a 20 20 20 20 20 20 73 7a 48 65 61 70 20 3d  ;.      szHeap =
34100 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 7a 53   integerValue(zS
34110 69 7a 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ize);.      if( 
34120 73 7a 48 65 61 70 3e 30 78 37 66 66 66 30 30 30  szHeap>0x7fff000
34130 30 20 29 20 73 7a 48 65 61 70 20 3d 20 30 78 37  0 ) szHeap = 0x7
34140 66 66 66 30 30 30 30 3b 0a 20 20 20 20 20 20 73  fff0000;.      s
34150 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
34160 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41 50  LITE_CONFIG_HEAP
34170 2c 20 6d 61 6c 6c 6f 63 28 28 69 6e 74 29 73 7a  , malloc((int)sz
34180 48 65 61 70 29 2c 20 28 69 6e 74 29 73 7a 48 65  Heap), (int)szHe
34190 61 70 2c 20 36 34 29 3b 0a 23 65 6c 73 65 0a 20  ap, 64);.#else. 
341a0 20 20 20 20 20 28 76 6f 69 64 29 63 6d 64 6c 69       (void)cmdli
341b0 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28  ne_option_value(
341c0 61 72 67 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29  argc, argv, ++i)
341d0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c  ;.#endif.    }el
341e0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
341f0 22 2d 70 61 67 65 63 61 63 68 65 22 29 3d 3d 30  "-pagecache")==0
34200 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 2c   ){.      int n,
34210 20 73 7a 3b 0a 20 20 20 20 20 20 73 7a 20 3d 20   sz;.      sz = 
34220 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75  (int)integerValu
34230 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e  e(cmdline_option
34240 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76  _value(argc,argv
34250 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66  ,++i));.      if
34260 28 20 73 7a 3e 37 30 30 30 30 20 29 20 73 7a 20  ( sz>70000 ) sz 
34270 3d 20 37 30 30 30 30 3b 0a 20 20 20 20 20 20 69  = 70000;.      i
34280 66 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 30  f( sz<0 ) sz = 0
34290 3b 0a 20 20 20 20 20 20 6e 20 3d 20 28 69 6e 74  ;.      n = (int
342a0 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d  )integerValue(cm
342b0 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
342c0 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69  ue(argc,argv,++i
342d0 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ));.      sqlite
342e0 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
342f0 43 4f 4e 46 49 47 5f 50 41 47 45 43 41 43 48 45  CONFIG_PAGECACHE
34300 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
34310 20 20 20 20 20 20 28 6e 3e 30 20 26 26 20 73 7a        (n>0 && sz
34320 3e 30 29 20 3f 20 6d 61 6c 6c 6f 63 28 6e 2a 73  >0) ? malloc(n*s
34330 7a 29 20 3a 20 30 2c 20 73 7a 2c 20 6e 29 3b 0a  z) : 0, sz, n);.
34340 20 20 20 20 20 20 64 61 74 61 2e 73 68 65 6c 6c        data.shell
34350 46 6c 67 73 20 7c 3d 20 53 48 46 4c 47 5f 50 61  Flgs |= SHFLG_Pa
34360 67 65 63 61 63 68 65 3b 0a 20 20 20 20 7d 65 6c  gecache;.    }el
34370 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
34380 22 2d 6c 6f 6f 6b 61 73 69 64 65 22 29 3d 3d 30  "-lookaside")==0
34390 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 2c   ){.      int n,
343a0 20 73 7a 3b 0a 20 20 20 20 20 20 73 7a 20 3d 20   sz;.      sz = 
343b0 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75  (int)integerValu
343c0 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e  e(cmdline_option
343d0 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76  _value(argc,argv
343e0 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66  ,++i));.      if
343f0 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 30 3b  ( sz<0 ) sz = 0;
34400 0a 20 20 20 20 20 20 6e 20 3d 20 28 69 6e 74 29  .      n = (int)
34410 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64  integerValue(cmd
34420 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
34430 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
34440 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 3c 30  );.      if( n<0
34450 20 29 20 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20   ) n = 0;.      
34460 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53  sqlite3_config(S
34470 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 4f  QLITE_CONFIG_LOO
34480 4b 41 53 49 44 45 2c 20 73 7a 2c 20 6e 29 3b 0a  KASIDE, sz, n);.
34490 20 20 20 20 20 20 69 66 28 20 73 7a 2a 6e 3d 3d        if( sz*n==
344a0 30 20 29 20 64 61 74 61 2e 73 68 65 6c 6c 46 6c  0 ) data.shellFl
344b0 67 73 20 26 3d 20 7e 53 48 46 4c 47 5f 4c 6f 6f  gs &= ~SHFLG_Loo
344c0 6b 61 73 69 64 65 3b 0a 23 69 66 64 65 66 20 53  kaside;.#ifdef S
344d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53  QLITE_ENABLE_VFS
344e0 54 52 41 43 45 0a 20 20 20 20 7d 65 6c 73 65 20  TRACE.    }else 
344f0 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76  if( strcmp(z,"-v
34500 66 73 74 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a  fstrace")==0 ){.
34510 20 20 20 20 20 20 65 78 74 65 72 6e 20 69 6e 74        extern int
34520 20 76 66 73 74 72 61 63 65 5f 72 65 67 69 73 74   vfstrace_regist
34530 65 72 28 0a 20 20 20 20 20 20 20 20 20 63 6f 6e  er(.         con
34540 73 74 20 63 68 61 72 20 2a 7a 54 72 61 63 65 4e  st char *zTraceN
34550 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 63 6f  ame,.         co
34560 6e 73 74 20 63 68 61 72 20 2a 7a 4f 6c 64 56 66  nst char *zOldVf
34570 73 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  sName,.         
34580 69 6e 74 20 28 2a 78 4f 75 74 29 28 63 6f 6e 73  int (*xOut)(cons
34590 74 20 63 68 61 72 2a 2c 76 6f 69 64 2a 29 2c 0a  t char*,void*),.
345a0 20 20 20 20 20 20 20 20 20 76 6f 69 64 20 2a 70           void *p
345b0 4f 75 74 41 72 67 2c 0a 20 20 20 20 20 20 20 20  OutArg,.        
345c0 20 69 6e 74 20 6d 61 6b 65 44 65 66 61 75 6c 74   int makeDefault
345d0 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
345e0 76 66 73 74 72 61 63 65 5f 72 65 67 69 73 74 65  vfstrace_registe
345f0 72 28 22 74 72 61 63 65 22 2c 30 2c 28 69 6e 74  r("trace",0,(int
34600 28 2a 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  (*)(const char*,
34610 76 6f 69 64 2a 29 29 66 70 75 74 73 2c 73 74 64  void*))fputs,std
34620 65 72 72 2c 31 29 3b 0a 23 65 6e 64 69 66 0a 23  err,1);.#endif.#
34630 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
34640 42 4c 45 5f 4d 55 4c 54 49 50 4c 45 58 0a 20 20  BLE_MULTIPLEX.  
34650 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
34660 6d 70 28 7a 2c 22 2d 6d 75 6c 74 69 70 6c 65 78  mp(z,"-multiplex
34670 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 65  ")==0 ){.      e
34680 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
34690 33 5f 6d 75 6c 74 69 70 6c 65 5f 69 6e 69 74 69  3_multiple_initi
346a0 61 6c 69 7a 65 28 63 6f 6e 73 74 20 63 68 61 72  alize(const char
346b0 2a 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 73 71  *,int);.      sq
346c0 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f  lite3_multiplex_
346d0 69 6e 69 74 69 61 6c 69 7a 65 28 30 2c 20 31 29  initialize(0, 1)
346e0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c  ;.#endif.    }el
346f0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
34700 22 2d 6d 6d 61 70 22 29 3d 3d 30 20 29 7b 0a 20  "-mmap")==0 ){. 
34710 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
34720 36 34 20 73 7a 20 3d 20 69 6e 74 65 67 65 72 56  64 sz = integerV
34730 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74  alue(cmdline_opt
34740 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
34750 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20  rgv,++i));.     
34760 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
34770 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d  SQLITE_CONFIG_MM
34780 41 50 5f 53 49 5a 45 2c 20 73 7a 2c 20 73 7a 29  AP_SIZE, sz, sz)
34790 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
347a0 73 74 72 63 6d 70 28 7a 2c 22 2d 76 66 73 22 29  strcmp(z,"-vfs")
347b0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
347c0 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 20 3d  ite3_vfs *pVfs =
347d0 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e   sqlite3_vfs_fin
347e0 64 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e  d(cmdline_option
347f0 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76  _value(argc,argv
34800 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66  ,++i));.      if
34810 28 20 70 56 66 73 20 29 7b 0a 20 20 20 20 20 20  ( pVfs ){.      
34820 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65    sqlite3_vfs_re
34830 67 69 73 74 65 72 28 70 56 66 73 2c 20 31 29 3b  gister(pVfs, 1);
34840 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
34850 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
34860 66 28 73 74 64 65 72 72 2c 20 22 6e 6f 20 73 75  f(stderr, "no su
34870 63 68 20 56 46 53 3a 20 5c 22 25 73 5c 22 5c 6e  ch VFS: \"%s\"\n
34880 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20  ", argv[i]);.   
34890 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20       exit(1);.  
348a0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
348b0 20 20 69 66 28 20 64 61 74 61 2e 7a 44 62 46 69    if( data.zDbFi
348c0 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a 23 69 66  lename==0 ){.#if
348d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
348e0 5f 4d 45 4d 4f 52 59 44 42 0a 20 20 20 20 64 61  _MEMORYDB.    da
348f0 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3d  ta.zDbFilename =
34900 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 20 20 20   ":memory:";.   
34910 20 77 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20   warnInmemoryDb 
34920 3d 20 61 72 67 63 3d 3d 31 3b 0a 23 65 6c 73 65  = argc==1;.#else
34930 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
34940 28 73 74 64 65 72 72 2c 22 25 73 3a 20 45 72 72  (stderr,"%s: Err
34950 6f 72 3a 20 6e 6f 20 64 61 74 61 62 61 73 65 20  or: no database 
34960 66 69 6c 65 6e 61 6d 65 20 73 70 65 63 69 66 69  filename specifi
34970 65 64 5c 6e 22 2c 20 41 72 67 76 30 29 3b 0a 20  ed\n", Argv0);. 
34980 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e     return 1;.#en
34990 64 69 66 0a 20 20 7d 0a 20 20 64 61 74 61 2e 6f  dif.  }.  data.o
349a0 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 0a 20 20  ut = stdout;..  
349b0 2f 2a 20 47 6f 20 61 68 65 61 64 20 61 6e 64 20  /* Go ahead and 
349c0 6f 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  open the databas
349d0 65 20 66 69 6c 65 20 69 66 20 69 74 20 61 6c 72  e file if it alr
349e0 65 61 64 79 20 65 78 69 73 74 73 2e 20 20 49 66  eady exists.  If
349f0 20 74 68 65 0a 20 20 2a 2a 20 66 69 6c 65 20 64   the.  ** file d
34a00 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 64  oes not exist, d
34a10 65 6c 61 79 20 6f 70 65 6e 69 6e 67 20 69 74 2e  elay opening it.
34a20 20 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20    This prevents 
34a30 65 6d 70 74 79 20 64 61 74 61 62 61 73 65 0a 20  empty database. 
34a40 20 2a 2a 20 66 69 6c 65 73 20 66 72 6f 6d 20 62   ** files from b
34a50 65 69 6e 67 20 63 72 65 61 74 65 64 20 69 66 20  eing created if 
34a60 61 20 75 73 65 72 20 6d 69 73 74 79 70 65 73 20  a user mistypes 
34a70 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d  the database nam
34a80 65 20 61 72 67 75 6d 65 6e 74 0a 20 20 2a 2a 20  e argument.  ** 
34a90 74 6f 20 74 68 65 20 73 71 6c 69 74 65 20 63 6f  to the sqlite co
34aa0 6d 6d 61 6e 64 2d 6c 69 6e 65 20 74 6f 6f 6c 2e  mmand-line tool.
34ab0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 63 63 65  .  */.  if( acce
34ac0 73 73 28 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e  ss(data.zDbFilen
34ad0 61 6d 65 2c 20 30 29 3d 3d 30 20 29 7b 0a 20 20  ame, 0)==0 ){.  
34ae0 20 20 6f 70 65 6e 5f 64 62 28 26 64 61 74 61 2c    open_db(&data,
34af0 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50   0);.  }..  /* P
34b00 72 6f 63 65 73 73 20 74 68 65 20 69 6e 69 74 69  rocess the initi
34b10 61 6c 69 7a 61 74 69 6f 6e 20 66 69 6c 65 20 69  alization file i
34b20 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65 2e 20  f there is one. 
34b30 20 49 66 20 6e 6f 20 2d 69 6e 69 74 20 6f 70 74   If no -init opt
34b40 69 6f 6e 0a 20 20 2a 2a 20 69 73 20 67 69 76 65  ion.  ** is give
34b50 6e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  n on the command
34b60 20 6c 69 6e 65 2c 20 6c 6f 6f 6b 20 66 6f 72 20   line, look for 
34b70 61 20 66 69 6c 65 20 6e 61 6d 65 64 20 7e 2f 2e  a file named ~/.
34b80 73 71 6c 69 74 65 72 63 20 61 6e 64 0a 20 20 2a  sqliterc and.  *
34b90 2a 20 74 72 79 20 74 6f 20 70 72 6f 63 65 73 73  * try to process
34ba0 20 69 74 2e 0a 20 20 2a 2f 0a 20 20 70 72 6f 63   it..  */.  proc
34bb0 65 73 73 5f 73 71 6c 69 74 65 72 63 28 26 64 61  ess_sqliterc(&da
34bc0 74 61 2c 7a 49 6e 69 74 46 69 6c 65 29 3b 0a 0a  ta,zInitFile);..
34bd0 20 20 2f 2a 20 4d 61 6b 65 20 61 20 73 65 63 6f    /* Make a seco
34be0 6e 64 20 70 61 73 73 20 74 68 72 6f 75 67 68 20  nd pass through 
34bf0 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
34c00 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 73 65   argument and se
34c10 74 0a 20 20 2a 2a 20 6f 70 74 69 6f 6e 73 2e 20  t.  ** options. 
34c20 20 54 68 69 73 20 73 65 63 6f 6e 64 20 70 61 73   This second pas
34c30 73 20 69 73 20 64 65 6c 61 79 65 64 20 75 6e 74  s is delayed unt
34c40 69 6c 20 61 66 74 65 72 20 74 68 65 20 69 6e 69  il after the ini
34c50 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 20 20 2a 2a  tialization.  **
34c60 20 66 69 6c 65 20 69 73 20 70 72 6f 63 65 73 73   file is process
34c70 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63  ed so that the c
34c80 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75  ommand-line argu
34c90 6d 65 6e 74 73 20 77 69 6c 6c 20 6f 76 65 72 72  ments will overr
34ca0 69 64 65 0a 20 20 2a 2a 20 73 65 74 74 69 6e 67  ide.  ** setting
34cb0 73 20 69 6e 20 74 68 65 20 69 6e 69 74 69 61 6c  s in the initial
34cc0 69 7a 61 74 69 6f 6e 20 66 69 6c 65 2e 0a 20 20  ization file..  
34cd0 2a 2f 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c  */.  for(i=1; i<
34ce0 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
34cf0 63 68 61 72 20 2a 7a 20 3d 20 61 72 67 76 5b 69  char *z = argv[i
34d00 5d 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 21  ];.    if( z[0]!
34d10 3d 27 2d 27 20 29 20 63 6f 6e 74 69 6e 75 65 3b  ='-' ) continue;
34d20 0a 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d 3d 27  .    if( z[1]=='
34d30 2d 27 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20  -' ){ z++; }.   
34d40 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
34d50 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  init")==0 ){.   
34d60 20 20 20 69 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73     i++;.    }els
34d70 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
34d80 2d 68 74 6d 6c 22 29 3d 3d 30 20 29 7b 0a 20 20  -html")==0 ){.  
34d90 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20      data.mode = 
34da0 4d 4f 44 45 5f 48 74 6d 6c 3b 0a 20 20 20 20 7d  MODE_Html;.    }
34db0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
34dc0 7a 2c 22 2d 6c 69 73 74 22 29 3d 3d 30 20 29 7b  z,"-list")==0 ){
34dd0 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65  .      data.mode
34de0 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20   = MODE_List;.  
34df0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
34e00 6d 70 28 7a 2c 22 2d 71 75 6f 74 65 22 29 3d 3d  mp(z,"-quote")==
34e10 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e  0 ){.      data.
34e20 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 51 75 6f 74  mode = MODE_Quot
34e30 65 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  e;.    }else if(
34e40 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6c 69 6e 65   strcmp(z,"-line
34e50 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64  ")==0 ){.      d
34e60 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
34e70 4c 69 6e 65 3b 0a 20 20 20 20 7d 65 6c 73 65 20  Line;.    }else 
34e80 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63  if( strcmp(z,"-c
34e90 6f 6c 75 6d 6e 22 29 3d 3d 30 20 29 7b 0a 20 20  olumn")==0 ){.  
34ea0 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20      data.mode = 
34eb0 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20 20 20  MODE_Column;.   
34ec0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
34ed0 70 28 7a 2c 22 2d 63 73 76 22 29 3d 3d 30 20 29  p(z,"-csv")==0 )
34ee0 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64  {.      data.mod
34ef0 65 20 3d 20 4d 4f 44 45 5f 43 73 76 3b 0a 20 20  e = MODE_Csv;.  
34f00 20 20 20 20 6d 65 6d 63 70 79 28 64 61 74 61 2e      memcpy(data.
34f10 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 22 2c 22  colSeparator,","
34f20 2c 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ,2);.    }else i
34f30 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 61 73  f( strcmp(z,"-as
34f40 63 69 69 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  cii")==0 ){.    
34f50 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f    data.mode = MO
34f60 44 45 5f 41 73 63 69 69 3b 0a 20 20 20 20 20 20  DE_Ascii;.      
34f70 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
34f80 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 63 6f 6c  (sizeof(data.col
34f90 53 65 70 61 72 61 74 6f 72 29 2c 20 64 61 74 61  Separator), data
34fa0 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 0a 20  .colSeparator,. 
34fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fc0 20 20 20 20 20 20 53 45 50 5f 55 6e 69 74 29 3b        SEP_Unit);
34fd0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
34fe0 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64  nprintf(sizeof(d
34ff0 61 74 61 2e 72 6f 77 53 65 70 61 72 61 74 6f 72  ata.rowSeparator
35000 29 2c 20 64 61 74 61 2e 72 6f 77 53 65 70 61 72  ), data.rowSepar
35010 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20  ator,.          
35020 20 20 20 20 20 20 20 20 20 20 20 20 20 53 45 50               SEP
35030 5f 52 65 63 6f 72 64 29 3b 0a 20 20 20 20 7d 65  _Record);.    }e
35040 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
35050 2c 22 2d 73 65 70 61 72 61 74 6f 72 22 29 3d 3d  ,"-separator")==
35060 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
35070 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
35080 6f 66 28 64 61 74 61 2e 63 6f 6c 53 65 70 61 72  of(data.colSepar
35090 61 74 6f 72 29 2c 20 64 61 74 61 2e 63 6f 6c 53  ator), data.colS
350a0 65 70 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20  eparator,.      
350b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350c0 20 22 25 73 22 2c 63 6d 64 6c 69 6e 65 5f 6f 70   "%s",cmdline_op
350d0 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c  tion_value(argc,
350e0 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20  argv,++i));.    
350f0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
35100 28 7a 2c 22 2d 6e 65 77 6c 69 6e 65 22 29 3d 3d  (z,"-newline")==
35110 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
35120 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
35130 6f 66 28 64 61 74 61 2e 72 6f 77 53 65 70 61 72  of(data.rowSepar
35140 61 74 6f 72 29 2c 20 64 61 74 61 2e 72 6f 77 53  ator), data.rowS
35150 65 70 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20  eparator,.      
35160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35170 20 22 25 73 22 2c 63 6d 64 6c 69 6e 65 5f 6f 70   "%s",cmdline_op
35180 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c  tion_value(argc,
35190 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20  argv,++i));.    
351a0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
351b0 28 7a 2c 22 2d 6e 75 6c 6c 76 61 6c 75 65 22 29  (z,"-nullvalue")
351c0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
351d0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
351e0 7a 65 6f 66 28 64 61 74 61 2e 6e 75 6c 6c 56 61  zeof(data.nullVa
351f0 6c 75 65 29 2c 20 64 61 74 61 2e 6e 75 6c 6c 56  lue), data.nullV
35200 61 6c 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20  alue,.          
35210 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25 73               "%s
35220 22 2c 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e  ",cmdline_option
35230 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76  _value(argc,argv
35240 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 7d 65 6c 73  ,++i));.    }els
35250 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
35260 2d 68 65 61 64 65 72 22 29 3d 3d 30 20 29 7b 0a  -header")==0 ){.
35270 20 20 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48        data.showH
35280 65 61 64 65 72 20 3d 20 31 3b 0a 20 20 20 20 7d  eader = 1;.    }
35290 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
352a0 7a 2c 22 2d 6e 6f 68 65 61 64 65 72 22 29 3d 3d  z,"-noheader")==
352b0 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e  0 ){.      data.
352c0 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a  showHeader = 0;.
352d0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
352e0 72 63 6d 70 28 7a 2c 22 2d 65 63 68 6f 22 29 3d  rcmp(z,"-echo")=
352f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 53 68 65 6c  =0 ){.      Shel
35300 6c 53 65 74 46 6c 61 67 28 26 64 61 74 61 2c 20  lSetFlag(&data, 
35310 53 48 46 4c 47 5f 45 63 68 6f 29 3b 0a 20 20 20  SHFLG_Echo);.   
35320 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
35330 70 28 7a 2c 22 2d 65 71 70 22 29 3d 3d 30 20 29  p(z,"-eqp")==0 )
35340 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 61 75 74  {.      data.aut
35350 6f 45 51 50 20 3d 20 31 3b 0a 20 20 20 20 7d 65  oEQP = 1;.    }e
35360 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
35370 2c 22 2d 65 71 70 66 75 6c 6c 22 29 3d 3d 30 20  ,"-eqpfull")==0 
35380 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 61 75  ){.      data.au
35390 74 6f 45 51 50 20 3d 20 32 3b 0a 20 20 20 20 7d  toEQP = 2;.    }
353a0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
353b0 7a 2c 22 2d 73 74 61 74 73 22 29 3d 3d 30 20 29  z,"-stats")==0 )
353c0 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 73 74 61  {.      data.sta
353d0 74 73 4f 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 65  tsOn = 1;.    }e
353e0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
353f0 2c 22 2d 73 63 61 6e 73 74 61 74 73 22 29 3d 3d  ,"-scanstats")==
35400 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e  0 ){.      data.
35410 73 63 61 6e 73 74 61 74 73 4f 6e 20 3d 20 31 3b  scanstatsOn = 1;
35420 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
35430 74 72 63 6d 70 28 7a 2c 22 2d 62 61 63 6b 73 6c  trcmp(z,"-backsl
35440 61 73 68 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ash")==0 ){.    
35450 20 20 2f 2a 20 55 6e 64 6f 63 75 6d 65 6e 74 65    /* Undocumente
35460 64 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  d command-line o
35470 70 74 69 6f 6e 3a 20 2d 62 61 63 6b 73 6c 61 73  ption: -backslas
35480 68 0a 20 20 20 20 20 20 2a 2a 20 43 61 75 73 65  h.      ** Cause
35490 73 20 43 2d 73 74 79 6c 65 20 62 61 63 6b 73 6c  s C-style backsl
354a0 61 73 68 20 65 73 63 61 70 65 73 20 74 6f 20 62  ash escapes to b
354b0 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 53  e evaluated in S
354c0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20  QL statements.  
354d0 20 20 20 20 2a 2a 20 70 72 69 6f 72 20 74 6f 20      ** prior to 
354e0 73 65 6e 64 69 6e 67 20 74 68 65 20 53 51 4c 20  sending the SQL 
354f0 69 6e 74 6f 20 53 51 4c 69 74 65 2e 20 20 55 73  into SQLite.  Us
35500 65 66 75 6c 20 66 6f 72 20 69 6e 6a 65 63 74 69  eful for injecti
35510 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 72 61 7a  ng.      ** craz
35520 79 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 6d  y bytes in the m
35530 69 64 64 6c 65 20 6f 66 20 53 51 4c 20 73 74 61  iddle of SQL sta
35540 74 65 6d 65 6e 74 73 20 66 6f 72 20 74 65 73 74  tements for test
35550 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e  ing and debuggin
35560 67 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  g..      */.    
35570 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28 26    ShellSetFlag(&
35580 64 61 74 61 2c 20 53 48 46 4c 47 5f 42 61 63 6b  data, SHFLG_Back
35590 73 6c 61 73 68 29 3b 0a 20 20 20 20 7d 65 6c 73  slash);.    }els
355a0 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
355b0 2d 62 61 69 6c 22 29 3d 3d 30 20 29 7b 0a 20 20  -bail")==0 ){.  
355c0 20 20 20 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f      bail_on_erro
355d0 72 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  r = 1;.    }else
355e0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
355f0 76 65 72 73 69 6f 6e 22 29 3d 3d 30 20 29 7b 0a  version")==0 ){.
35600 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 73        printf("%s
35610 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f   %s\n", sqlite3_
35620 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 73 71  libversion(), sq
35630 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29  lite3_sourceid()
35640 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
35650 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
35660 20 73 74 72 63 6d 70 28 7a 2c 22 2d 69 6e 74 65   strcmp(z,"-inte
35670 72 61 63 74 69 76 65 22 29 3d 3d 30 20 29 7b 0a  ractive")==0 ){.
35680 20 20 20 20 20 20 73 74 64 69 6e 5f 69 73 5f 69        stdin_is_i
35690 6e 74 65 72 61 63 74 69 76 65 20 3d 20 31 3b 0a  nteractive = 1;.
356a0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
356b0 72 63 6d 70 28 7a 2c 22 2d 62 61 74 63 68 22 29  rcmp(z,"-batch")
356c0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 74 64  ==0 ){.      std
356d0 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76  in_is_interactiv
356e0 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
356f0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
35700 68 65 61 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20  heap")==0 ){.   
35710 20 20 20 69 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73     i++;.    }els
35720 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
35730 2d 70 61 67 65 63 61 63 68 65 22 29 3d 3d 30 20  -pagecache")==0 
35740 29 7b 0a 20 20 20 20 20 20 69 2b 3d 32 3b 0a 20  ){.      i+=2;. 
35750 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
35760 63 6d 70 28 7a 2c 22 2d 6c 6f 6f 6b 61 73 69 64  cmp(z,"-lookasid
35770 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
35780 69 2b 3d 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20  i+=2;.    }else 
35790 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d  if( strcmp(z,"-m
357a0 6d 61 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  map")==0 ){.    
357b0 20 20 69 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65    i++;.    }else
357c0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
357d0 76 66 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  vfs")==0 ){.    
357e0 20 20 69 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51    i++;.#ifdef SQ
357f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53 54  LITE_ENABLE_VFST
35800 52 41 43 45 0a 20 20 20 20 7d 65 6c 73 65 20 69  RACE.    }else i
35810 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76 66  f( strcmp(z,"-vf
35820 73 74 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20  strace")==0 ){. 
35830 20 20 20 20 20 69 2b 2b 3b 0a 23 65 6e 64 69 66       i++;.#endif
35840 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
35850 4e 41 42 4c 45 5f 4d 55 4c 54 49 50 4c 45 58 0a  NABLE_MULTIPLEX.
35860 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
35870 72 63 6d 70 28 7a 2c 22 2d 6d 75 6c 74 69 70 6c  rcmp(z,"-multipl
35880 65 78 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ex")==0 ){.     
35890 20 69 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20   i++;.#endif.   
358a0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
358b0 70 28 7a 2c 22 2d 68 65 6c 70 22 29 3d 3d 30 20  p(z,"-help")==0 
358c0 29 7b 0a 20 20 20 20 20 20 75 73 61 67 65 28 31  ){.      usage(1
358d0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
358e0 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 6d 64 22   strcmp(z,"-cmd"
358f0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  )==0 ){.      /*
35900 20 52 75 6e 20 63 6f 6d 6d 61 6e 64 73 20 74 68   Run commands th
35910 61 74 20 66 6f 6c 6c 6f 77 20 2d 63 6d 64 20 66  at follow -cmd f
35920 69 72 73 74 20 61 6e 64 20 73 65 70 61 72 61 74  irst and separat
35930 65 6c 79 20 66 72 6f 6d 20 63 6f 6d 6d 61 6e 64  ely from command
35940 73 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20  s.      ** that 
35950 73 69 6d 70 6c 79 20 61 70 70 65 61 72 20 6f 6e  simply appear on
35960 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e   the command-lin
35970 65 2e 20 20 54 68 69 73 20 73 65 65 6d 73 20 67  e.  This seems g
35980 6f 6f 66 79 2e 20 20 49 74 20 77 6f 75 6c 64 0a  oofy.  It would.
35990 20 20 20 20 20 20 2a 2a 20 62 65 20 62 65 74 74        ** be bett
359a0 65 72 20 69 66 20 61 6c 6c 20 63 6f 6d 6d 61 6e  er if all comman
359b0 64 73 20 72 61 6e 20 69 6e 20 74 68 65 20 6f 72  ds ran in the or
359c0 64 65 72 20 74 68 61 74 20 74 68 65 79 20 61 70  der that they ap
359d0 70 65 61 72 2e 20 20 42 75 74 0a 20 20 20 20 20  pear.  But.     
359e0 20 2a 2a 20 77 65 20 72 65 74 61 69 6e 20 74 68   ** we retain th
359f0 65 20 67 6f 6f 66 79 20 62 65 68 61 76 69 6f 72  e goofy behavior
35a00 20 66 6f 72 20 68 69 73 74 6f 72 69 63 61 6c 20   for historical 
35a10 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 20 2a  compatibility. *
35a20 2f 0a 20 20 20 20 20 20 69 66 28 20 69 3d 3d 61  /.      if( i==a
35a30 72 67 63 2d 31 20 29 20 62 72 65 61 6b 3b 0a 20  rgc-1 ) break;. 
35a40 20 20 20 20 20 7a 20 3d 20 63 6d 64 6c 69 6e 65       z = cmdline
35a50 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
35a60 67 63 2c 61 72 67 76 2c 2b 2b 69 29 3b 0a 20 20  gc,argv,++i);.  
35a70 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2e      if( z[0]=='.
35a80 27 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ' ){.        rc 
35a90 3d 20 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e  = do_meta_comman
35aa0 64 28 7a 2c 20 26 64 61 74 61 29 3b 0a 20 20 20  d(z, &data);.   
35ab0 20 20 20 20 20 69 66 28 20 72 63 20 26 26 20 62       if( rc && b
35ac0 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 29 20 72  ail_on_error ) r
35ad0 65 74 75 72 6e 20 72 63 3d 3d 32 20 3f 20 30 20  eturn rc==2 ? 0 
35ae0 3a 20 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  : rc;.      }els
35af0 65 7b 0a 20 20 20 20 20 20 20 20 6f 70 65 6e 5f  e{.        open_
35b00 64 62 28 26 64 61 74 61 2c 20 30 29 3b 0a 20 20  db(&data, 0);.  
35b10 20 20 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c        rc = shell
35b20 5f 65 78 65 63 28 64 61 74 61 2e 64 62 2c 20 7a  _exec(data.db, z
35b30 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b  , shell_callback
35b40 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73  , &data, &zErrMs
35b50 67 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  g);.        if( 
35b60 7a 45 72 72 4d 73 67 21 3d 30 20 29 7b 0a 20 20  zErrMsg!=0 ){.  
35b70 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
35b80 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
35b90 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73  r: %s\n", zErrMs
35ba0 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  g);.          if
35bb0 28 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20  ( bail_on_error 
35bc0 29 20 72 65 74 75 72 6e 20 72 63 21 3d 30 20 3f  ) return rc!=0 ?
35bd0 20 72 63 20 3a 20 31 3b 0a 20 20 20 20 20 20 20   rc : 1;.       
35be0 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 30   }else if( rc!=0
35bf0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74   ){.          ut
35c00 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
35c10 2c 22 45 72 72 6f 72 3a 20 75 6e 61 62 6c 65 20  ,"Error: unable 
35c20 74 6f 20 70 72 6f 63 65 73 73 20 53 51 4c 20 5c  to process SQL \
35c30 22 25 73 5c 22 5c 6e 22 2c 20 7a 29 3b 0a 20 20  "%s\"\n", z);.  
35c40 20 20 20 20 20 20 20 20 69 66 28 20 62 61 69 6c          if( bail
35c50 5f 6f 6e 5f 65 72 72 6f 72 20 29 20 72 65 74 75  _on_error ) retu
35c60 72 6e 20 72 63 3b 0a 20 20 20 20 20 20 20 20 7d  rn rc;.        }
35c70 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
35c80 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70  se{.      utf8_p
35c90 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25 73  rintf(stderr,"%s
35ca0 3a 20 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e  : Error: unknown
35cb0 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20   option: %s\n", 
35cc0 41 72 67 76 30 2c 20 7a 29 3b 0a 20 20 20 20 20  Argv0, z);.     
35cd0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
35ce0 72 72 2c 22 55 73 65 20 2d 68 65 6c 70 20 66 6f  rr,"Use -help fo
35cf0 72 20 61 20 6c 69 73 74 20 6f 66 20 6f 70 74 69  r a list of opti
35d00 6f 6e 73 2e 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ons.\n");.      
35d10 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
35d20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d      data.cMode =
35d30 20 64 61 74 61 2e 6d 6f 64 65 3b 0a 20 20 7d 0a   data.mode;.  }.
35d40 0a 20 20 69 66 28 20 21 72 65 61 64 53 74 64 69  .  if( !readStdi
35d50 6e 20 29 7b 0a 20 20 20 20 2f 2a 20 52 75 6e 20  n ){.    /* Run 
35d60 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 74 68  all arguments th
35d70 61 74 20 64 6f 20 6e 6f 74 20 62 65 67 69 6e 20  at do not begin 
35d80 77 69 74 68 20 27 2d 27 20 61 73 20 69 66 20 74  with '-' as if t
35d90 68 65 79 20 77 65 72 65 20 73 65 70 61 72 61 74  hey were separat
35da0 65 0a 20 20 20 20 2a 2a 20 63 6f 6d 6d 61 6e 64  e.    ** command
35db0 2d 6c 69 6e 65 20 69 6e 70 75 74 73 2c 20 65 78  -line inputs, ex
35dc0 63 65 70 74 20 66 6f 72 20 74 68 65 20 61 72 67  cept for the arg
35dd0 54 6f 53 6b 69 70 20 61 72 67 75 6d 65 6e 74 20  ToSkip argument 
35de0 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 0a 20  which contains. 
35df0 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61     ** the databa
35e00 73 65 20 66 69 6c 65 6e 61 6d 65 2e 0a 20 20 20  se filename..   
35e10 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   */.    for(i=0;
35e20 20 69 3c 6e 43 6d 64 3b 20 69 2b 2b 29 7b 0a 20   i<nCmd; i++){. 
35e30 20 20 20 20 20 69 66 28 20 61 7a 43 6d 64 5b 69       if( azCmd[i
35e40 5d 5b 30 5d 3d 3d 27 2e 27 20 29 7b 0a 20 20 20  ][0]=='.' ){.   
35e50 20 20 20 20 20 72 63 20 3d 20 64 6f 5f 6d 65 74       rc = do_met
35e60 61 5f 63 6f 6d 6d 61 6e 64 28 61 7a 43 6d 64 5b  a_command(azCmd[
35e70 69 5d 2c 20 26 64 61 74 61 29 3b 0a 20 20 20 20  i], &data);.    
35e80 20 20 20 20 69 66 28 20 72 63 20 29 20 72 65 74      if( rc ) ret
35e90 75 72 6e 20 72 63 3d 3d 32 20 3f 20 30 20 3a 20  urn rc==2 ? 0 : 
35ea0 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
35eb0 0a 20 20 20 20 20 20 20 20 6f 70 65 6e 5f 64 62  .        open_db
35ec0 28 26 64 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  (&data, 0);.    
35ed0 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65      rc = shell_e
35ee0 78 65 63 28 64 61 74 61 2e 64 62 2c 20 61 7a 43  xec(data.db, azC
35ef0 6d 64 5b 69 5d 2c 20 73 68 65 6c 6c 5f 63 61 6c  md[i], shell_cal
35f00 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a  lback, &data, &z
35f10 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20  ErrMsg);.       
35f20 20 69 66 28 20 7a 45 72 72 4d 73 67 21 3d 30 20   if( zErrMsg!=0 
35f30 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
35f40 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
35f50 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a  "Error: %s\n", z
35f60 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20  ErrMsg);.       
35f70 20 20 20 72 65 74 75 72 6e 20 72 63 21 3d 30 20     return rc!=0 
35f80 3f 20 72 63 20 3a 20 31 3b 0a 20 20 20 20 20 20  ? rc : 1;.      
35f90 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d    }else if( rc!=
35fa0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  0 ){.          u
35fb0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
35fc0 72 2c 22 45 72 72 6f 72 3a 20 75 6e 61 62 6c 65  r,"Error: unable
35fd0 20 74 6f 20 70 72 6f 63 65 73 73 20 53 51 4c 3a   to process SQL:
35fe0 20 25 73 5c 6e 22 2c 20 61 7a 43 6d 64 5b 69 5d   %s\n", azCmd[i]
35ff0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  );.          ret
36000 75 72 6e 20 72 63 3b 0a 20 20 20 20 20 20 20 20  urn rc;.        
36010 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
36020 20 20 20 20 66 72 65 65 28 61 7a 43 6d 64 29 3b      free(azCmd);
36030 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
36040 20 52 75 6e 20 63 6f 6d 6d 61 6e 64 73 20 72 65   Run commands re
36050 63 65 69 76 65 64 20 66 72 6f 6d 20 73 74 61 6e  ceived from stan
36060 64 61 72 64 20 69 6e 70 75 74 0a 20 20 20 20 2a  dard input.    *
36070 2f 0a 20 20 20 20 69 66 28 20 73 74 64 69 6e 5f  /.    if( stdin_
36080 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 29  is_interactive )
36090 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 48  {.      char *zH
360a0 6f 6d 65 3b 0a 20 20 20 20 20 20 63 68 61 72 20  ome;.      char 
360b0 2a 7a 48 69 73 74 6f 72 79 20 3d 20 30 3b 0a 20  *zHistory = 0;. 
360c0 20 20 20 20 20 69 6e 74 20 6e 48 69 73 74 6f 72       int nHistor
360d0 79 3b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28  y;.      printf(
360e0 0a 20 20 20 20 20 20 20 20 22 53 51 4c 69 74 65  .        "SQLite
360f0 20 76 65 72 73 69 6f 6e 20 25 73 20 25 2e 31 39   version %s %.19
36100 73 5c 6e 22 20 2f 2a 65 78 74 72 61 2d 76 65 72  s\n" /*extra-ver
36110 73 69 6f 6e 2d 69 6e 66 6f 2a 2f 0a 20 20 20 20  sion-info*/.    
36120 20 20 20 20 22 45 6e 74 65 72 20 5c 22 2e 68 65      "Enter \".he
36130 6c 70 5c 22 20 66 6f 72 20 75 73 61 67 65 20 68  lp\" for usage h
36140 69 6e 74 73 2e 5c 6e 22 2c 0a 20 20 20 20 20 20  ints.\n",.      
36150 20 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72    sqlite3_libver
36160 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f  sion(), sqlite3_
36170 73 6f 75 72 63 65 69 64 28 29 0a 20 20 20 20 20  sourceid().     
36180 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 77 61   );.      if( wa
36190 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20 29 7b 0a  rnInmemoryDb ){.
361a0 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
361b0 43 6f 6e 6e 65 63 74 65 64 20 74 6f 20 61 20 22  Connected to a "
361c0 29 3b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74  );.        print
361d0 42 6f 6c 64 28 22 74 72 61 6e 73 69 65 6e 74 20  Bold("transient 
361e0 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
361f0 73 65 22 29 3b 0a 20 20 20 20 20 20 20 20 70 72  se");.        pr
36200 69 6e 74 66 28 22 2e 5c 6e 55 73 65 20 5c 22 2e  intf(".\nUse \".
36210 6f 70 65 6e 20 46 49 4c 45 4e 41 4d 45 5c 22 20  open FILENAME\" 
36220 74 6f 20 72 65 6f 70 65 6e 20 6f 6e 20 61 20 22  to reopen on a "
36230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36240 22 70 65 72 73 69 73 74 65 6e 74 20 64 61 74 61  "persistent data
36250 62 61 73 65 2e 5c 6e 22 29 3b 0a 20 20 20 20 20  base.\n");.     
36260 20 7d 0a 20 20 20 20 20 20 7a 48 6f 6d 65 20 3d   }.      zHome =
36270 20 66 69 6e 64 5f 68 6f 6d 65 5f 64 69 72 28 30   find_home_dir(0
36280 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 48 6f  );.      if( zHo
36290 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 6e 48  me ){.        nH
362a0 69 73 74 6f 72 79 20 3d 20 73 74 72 6c 65 6e 33  istory = strlen3
362b0 30 28 7a 48 6f 6d 65 29 20 2b 20 32 30 3b 0a 20  0(zHome) + 20;. 
362c0 20 20 20 20 20 20 20 69 66 28 20 28 7a 48 69 73         if( (zHis
362d0 74 6f 72 79 20 3d 20 6d 61 6c 6c 6f 63 28 6e 48  tory = malloc(nH
362e0 69 73 74 6f 72 79 29 29 21 3d 30 20 29 7b 0a 20  istory))!=0 ){. 
362f0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
36300 5f 73 6e 70 72 69 6e 74 66 28 6e 48 69 73 74 6f  _snprintf(nHisto
36310 72 79 2c 20 7a 48 69 73 74 6f 72 79 2c 22 25 73  ry, zHistory,"%s
36320 2f 2e 73 71 6c 69 74 65 5f 68 69 73 74 6f 72 79  /.sqlite_history
36330 22 2c 20 7a 48 6f 6d 65 29 3b 0a 20 20 20 20 20  ", zHome);.     
36340 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
36350 20 20 20 69 66 28 20 7a 48 69 73 74 6f 72 79 20     if( zHistory 
36360 29 7b 20 73 68 65 6c 6c 5f 72 65 61 64 5f 68 69  ){ shell_read_hi
36370 73 74 6f 72 79 28 7a 48 69 73 74 6f 72 79 29 3b  story(zHistory);
36380 20 7d 0a 23 69 66 20 48 41 56 45 5f 52 45 41 44   }.#if HAVE_READ
36390 4c 49 4e 45 20 7c 7c 20 48 41 56 45 5f 45 44 49  LINE || HAVE_EDI
363a0 54 4c 49 4e 45 0a 20 20 20 20 20 20 72 6c 5f 61  TLINE.      rl_a
363b0 74 74 65 6d 70 74 65 64 5f 63 6f 6d 70 6c 65 74  ttempted_complet
363c0 69 6f 6e 5f 66 75 6e 63 74 69 6f 6e 20 3d 20 72  ion_function = r
363d0 65 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 69  eadline_completi
363e0 6f 6e 3b 0a 23 65 6c 69 66 20 48 41 56 45 5f 4c  on;.#elif HAVE_L
363f0 49 4e 45 4e 4f 49 53 45 0a 20 20 20 20 20 20 6c  INENOISE.      l
36400 69 6e 65 6e 6f 69 73 65 53 65 74 43 6f 6d 70 6c  inenoiseSetCompl
36410 65 74 69 6f 6e 43 61 6c 6c 62 61 63 6b 28 6c 69  etionCallback(li
36420 6e 65 6e 6f 69 73 65 5f 63 6f 6d 70 6c 65 74 69  nenoise_completi
36430 6f 6e 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  on);.#endif.    
36440 20 20 72 63 20 3d 20 70 72 6f 63 65 73 73 5f 69    rc = process_i
36450 6e 70 75 74 28 26 64 61 74 61 2c 20 30 29 3b 0a  nput(&data, 0);.
36460 20 20 20 20 20 20 69 66 28 20 7a 48 69 73 74 6f        if( zHisto
36470 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20 73 68  ry ){.        sh
36480 65 6c 6c 5f 73 74 69 66 6c 65 5f 68 69 73 74 6f  ell_stifle_histo
36490 72 79 28 32 30 30 30 29 3b 0a 20 20 20 20 20 20  ry(2000);.      
364a0 20 20 73 68 65 6c 6c 5f 77 72 69 74 65 5f 68 69    shell_write_hi
364b0 73 74 6f 72 79 28 7a 48 69 73 74 6f 72 79 29 3b  story(zHistory);
364c0 0a 20 20 20 20 20 20 20 20 66 72 65 65 28 7a 48  .        free(zH
364d0 69 73 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 7d  istory);.      }
364e0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
364f0 20 20 72 63 20 3d 20 70 72 6f 63 65 73 73 5f 69    rc = process_i
36500 6e 70 75 74 28 26 64 61 74 61 2c 20 73 74 64 69  nput(&data, stdi
36510 6e 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  n);.    }.  }.  
36520 73 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 26  set_table_name(&
36530 64 61 74 61 2c 20 30 29 3b 0a 20 20 69 66 28 20  data, 0);.  if( 
36540 64 61 74 61 2e 64 62 20 29 7b 0a 20 20 20 20 73  data.db ){.    s
36550 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c 6c  ession_close_all
36560 28 26 64 61 74 61 29 3b 0a 20 20 20 20 73 71 6c  (&data);.    sql
36570 69 74 65 33 5f 63 6c 6f 73 65 28 64 61 74 61 2e  ite3_close(data.
36580 64 62 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  db);.  }.  sqlit
36590 65 33 5f 66 72 65 65 28 64 61 74 61 2e 7a 46 72  e3_free(data.zFr
365a0 65 65 4f 6e 43 6c 6f 73 65 29 3b 0a 20 20 66 69  eeOnClose);.  fi
365b0 6e 64 5f 68 6f 6d 65 5f 64 69 72 28 31 29 3b 0a  nd_home_dir(1);.
365c0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 48 45 4c  #if !SQLITE_SHEL
365d0 4c 5f 49 53 5f 55 54 46 38 0a 20 20 66 6f 72 28  L_IS_UTF8.  for(
365e0 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b  i=0; i<argc; i++
365f0 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61  ) sqlite3_free(a
36600 72 67 76 5b 69 5d 29 3b 0a 20 20 73 71 6c 69 74  rgv[i]);.  sqlit
36610 65 33 5f 66 72 65 65 28 61 72 67 76 29 3b 0a 23  e3_free(argv);.#
36620 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 72  endif.  return r
36630 63 3b 0a 7d 0a                                   c;.}.