/ Hex Artifact Content
Login

Artifact 2f9ae0bee09bdd35922ab7ed264d88e1d7fb34d39d37fc633e6a3a1af60036be:


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 23 69 66 64 65 66 20  letion.c.#ifdef 
56e0: 53 51 4c 49 54 45 5f 48 41 56 45 5f 5a 4c 49 42  SQLITE_HAVE_ZLIB
56f0: 0a 49 4e 43 4c 55 44 45 20 2e 2e 2f 65 78 74 2f  .INCLUDE ../ext/
5700: 6d 69 73 63 2f 63 6f 6d 70 72 65 73 73 2e 63 0a  misc/compress.c.
5710: 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
5720: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
5730: 45 5f 53 45 53 53 49 4f 4e 29 0a 2f 2a 0a 2a 2a  E_SESSION)./*.**
5740: 20 53 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   State informati
5750: 6f 6e 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  on for a single 
5760: 6f 70 65 6e 20 73 65 73 73 69 6f 6e 0a 2a 2f 0a  open session.*/.
5770: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4f  typedef struct O
5780: 70 65 6e 53 65 73 73 69 6f 6e 20 4f 70 65 6e 53  penSession OpenS
5790: 65 73 73 69 6f 6e 3b 0a 73 74 72 75 63 74 20 4f  ession;.struct O
57a0: 70 65 6e 53 65 73 73 69 6f 6e 20 7b 0a 20 20 63  penSession {.  c
57b0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
57c0: 20 20 20 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f          /* Symbo
57d0: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 69  lic name for thi
57e0: 73 20 73 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 69  s session */.  i
57f0: 6e 74 20 6e 46 69 6c 74 65 72 3b 20 20 20 20 20  nt nFilter;     
5800: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
5810: 72 20 6f 66 20 78 46 69 6c 74 65 72 20 72 65 6a  r of xFilter rej
5820: 65 63 74 69 6f 6e 20 47 4c 4f 42 20 70 61 74 74  ection GLOB patt
5830: 65 72 6e 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  erns */.  char *
5840: 2a 61 7a 46 69 6c 74 65 72 3b 20 20 20 20 20 20  *azFilter;      
5850: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 78     /* Array of x
5860: 46 69 6c 74 65 72 20 72 65 6a 65 63 74 69 6f 6e  Filter rejection
5870: 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 2a   GLOB patterns *
5880: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 73 73  /.  sqlite3_sess
5890: 69 6f 6e 20 2a 70 3b 20 20 20 20 20 20 2f 2a 20  ion *p;      /* 
58a0: 54 68 65 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e  The open session
58b0: 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 0a 0a 2f   */.};.#endif../
58c0: 2a 0a 2a 2a 20 53 68 65 6c 6c 20 6f 75 74 70 75  *.** Shell outpu
58d0: 74 20 6d 6f 64 65 20 69 6e 66 6f 72 6d 61 74 69  t mode informati
58e0: 6f 6e 20 66 72 6f 6d 20 62 65 66 6f 72 65 20 22  on from before "
58f0: 2e 65 78 70 6c 61 69 6e 20 6f 6e 22 2c 0a 2a 2a  .explain on",.**
5900: 20 73 61 76 65 64 20 73 6f 20 74 68 61 74 20 69   saved so that i
5910: 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65  t can be restore
5920: 64 20 62 79 20 22 2e 65 78 70 6c 61 69 6e 20 6f  d by ".explain o
5930: 66 66 22 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ff".*/.typedef s
5940: 74 72 75 63 74 20 53 61 76 65 64 4d 6f 64 65 49  truct SavedModeI
5950: 6e 66 6f 20 53 61 76 65 64 4d 6f 64 65 49 6e 66  nfo SavedModeInf
5960: 6f 3b 0a 73 74 72 75 63 74 20 53 61 76 65 64 4d  o;.struct SavedM
5970: 6f 64 65 49 6e 66 6f 20 7b 0a 20 20 69 6e 74 20  odeInfo {.  int 
5980: 76 61 6c 69 64 3b 20 20 20 20 20 20 20 20 20 20  valid;          
5990: 2f 2a 20 49 73 20 74 68 65 72 65 20 6c 65 67 69  /* Is there legi
59a0: 74 20 64 61 74 61 20 69 6e 20 68 65 72 65 3f 20  t data in here? 
59b0: 2a 2f 0a 20 20 69 6e 74 20 6d 6f 64 65 3b 20 20  */.  int mode;  
59c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 65           /* Mode
59d0: 20 70 72 69 6f 72 20 74 6f 20 22 2e 65 78 70 6c   prior to ".expl
59e0: 61 69 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69 6e 74  ain on" */.  int
59f0: 20 73 68 6f 77 48 65 61 64 65 72 3b 20 20 20 20   showHeader;    
5a00: 20 2f 2a 20 54 68 65 20 22 2e 68 65 61 64 65 72   /* The ".header
5a10: 22 20 73 65 74 74 69 6e 67 20 70 72 69 6f 72 20  " setting prior 
5a20: 74 6f 20 22 2e 65 78 70 6c 61 69 6e 20 6f 6e 22  to ".explain on"
5a30: 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6c 57 69 64   */.  int colWid
5a40: 74 68 5b 31 30 30 5d 3b 20 20 2f 2a 20 43 6f 6c  th[100];  /* Col
5a50: 75 6d 6e 20 77 69 64 74 68 73 20 70 72 69 6f 72  umn widths prior
5a60: 20 74 6f 20 22 2e 65 78 70 6c 61 69 6e 20 6f 6e   to ".explain on
5a70: 22 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  " */.};../*.** S
5a80: 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
5a90: 20 61 62 6f 75 74 20 74 68 65 20 64 61 74 61 62   about the datab
5aa0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
5ab0: 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 61  s contained in a
5ac0: 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
5ad0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
5ae0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 74 79 70  tructure..*/.typ
5af0: 65 64 65 66 20 73 74 72 75 63 74 20 53 68 65 6c  edef struct Shel
5b00: 6c 53 74 61 74 65 20 53 68 65 6c 6c 53 74 61 74  lState ShellStat
5b10: 65 3b 0a 73 74 72 75 63 74 20 53 68 65 6c 6c 53  e;.struct ShellS
5b20: 74 61 74 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  tate {.  sqlite3
5b30: 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
5b40: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
5b50: 2a 2f 0a 20 20 69 6e 74 20 61 75 74 6f 45 78 70  */.  int autoExp
5b60: 6c 61 69 6e 3b 20 20 20 20 20 20 20 2f 2a 20 41  lain;       /* A
5b70: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 74 75 72  utomatically tur
5b80: 6e 20 6f 6e 20 2e 65 78 70 6c 61 69 6e 20 6d 6f  n on .explain mo
5b90: 64 65 20 2a 2f 0a 20 20 69 6e 74 20 61 75 74 6f  de */.  int auto
5ba0: 45 51 50 3b 20 20 20 20 20 20 20 20 20 20 20 2f  EQP;           /
5bb0: 2a 20 52 75 6e 20 45 58 50 4c 41 49 4e 20 51 55  * Run EXPLAIN QU
5bc0: 45 52 59 20 50 4c 41 4e 20 70 72 69 6f 72 20 74  ERY PLAN prior t
5bd0: 6f 20 73 65 61 63 68 20 53 51 4c 20 73 74 6d 74  o seach SQL stmt
5be0: 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61 74 73 4f   */.  int statsO
5bf0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
5c00: 54 72 75 65 20 74 6f 20 64 69 73 70 6c 61 79 20  True to display 
5c10: 6d 65 6d 6f 72 79 20 73 74 61 74 73 20 62 65 66  memory stats bef
5c20: 6f 72 65 20 65 61 63 68 20 66 69 6e 61 6c 69 7a  ore each finaliz
5c30: 65 20 2a 2f 0a 20 20 69 6e 74 20 73 63 61 6e 73  e */.  int scans
5c40: 74 61 74 73 4f 6e 3b 20 20 20 20 20 20 20 2f 2a  tatsOn;       /*
5c50: 20 54 72 75 65 20 74 6f 20 64 69 73 70 6c 61 79   True to display
5c60: 20 73 63 61 6e 20 73 74 61 74 73 20 62 65 66 6f   scan stats befo
5c70: 72 65 20 65 61 63 68 20 66 69 6e 61 6c 69 7a 65  re each finalize
5c80: 20 2a 2f 0a 20 20 69 6e 74 20 6f 75 74 43 6f 75   */.  int outCou
5c90: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nt;          /* 
5ca0: 52 65 76 65 72 74 20 74 6f 20 73 74 64 6f 75 74  Revert to stdout
5cb0: 20 77 68 65 6e 20 72 65 61 63 68 69 6e 67 20 7a   when reaching z
5cc0: 65 72 6f 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  ero */.  int cnt
5cd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
5ce0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 63  /* Number of rec
5cf0: 6f 72 64 73 20 64 69 73 70 6c 61 79 65 64 20 73  ords displayed s
5d00: 6f 20 66 61 72 20 2a 2f 0a 20 20 46 49 4c 45 20  o far */.  FILE 
5d10: 2a 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  *out;           
5d20: 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
5d30: 74 73 20 68 65 72 65 20 2a 2f 0a 20 20 46 49 4c  ts here */.  FIL
5d40: 45 20 2a 74 72 61 63 65 4f 75 74 3b 20 20 20 20  E *traceOut;    
5d50: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 66 6f      /* Output fo
5d60: 72 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  r sqlite3_trace(
5d70: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  ) */.  int nErr;
5d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5d90: 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
5da0: 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
5db0: 6d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  mode;           
5dc0: 20 20 20 2f 2a 20 41 6e 20 6f 75 74 70 75 74 20     /* An output 
5dd0: 6d 6f 64 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  mode setting */.
5de0: 20 20 69 6e 74 20 63 4d 6f 64 65 3b 20 20 20 20    int cMode;    
5df0: 20 20 20 20 20 20 20 20 20 2f 2a 20 74 65 6d 70           /* temp
5e00: 6f 72 61 72 79 20 6f 75 74 70 75 74 20 6d 6f 64  orary output mod
5e10: 65 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  e for the curren
5e20: 74 20 71 75 65 72 79 20 2a 2f 0a 20 20 69 6e 74  t query */.  int
5e30: 20 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 20 20 20 20   normalMode;    
5e40: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6d 6f      /* Output mo
5e50: 64 65 20 62 65 66 6f 72 65 20 22 2e 65 78 70 6c  de before ".expl
5e60: 61 69 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69 6e 74  ain on" */.  int
5e70: 20 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 3b   writableSchema;
5e80: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 50      /* True if P
5e90: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
5ea0: 63 68 65 6d 61 3d 4f 4e 20 2a 2f 0a 20 20 69 6e  chema=ON */.  in
5eb0: 74 20 73 68 6f 77 48 65 61 64 65 72 3b 20 20 20  t showHeader;   
5ec0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
5ed0: 73 68 6f 77 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  show column name
5ee0: 73 20 69 6e 20 4c 69 73 74 20 6f 72 20 43 6f 6c  s in List or Col
5ef0: 75 6d 6e 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  umn mode */.  in
5f00: 74 20 6e 43 68 65 63 6b 3b 20 20 20 20 20 20 20  t nCheck;       
5f10: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
5f20: 66 20 22 2e 63 68 65 63 6b 22 20 63 6f 6d 6d 61  f ".check" comma
5f30: 6e 64 73 20 72 75 6e 20 2a 2f 0a 20 20 75 6e 73  nds run */.  uns
5f40: 69 67 6e 65 64 20 73 68 65 6c 6c 46 6c 67 73 3b  igned shellFlgs;
5f50: 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66      /* Various f
5f60: 6c 61 67 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lags */.  char *
5f70: 7a 44 65 73 74 54 61 62 6c 65 3b 20 20 20 20 20  zDestTable;     
5f80: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 65 73 74   /* Name of dest
5f90: 69 6e 61 74 69 6f 6e 20 74 61 62 6c 65 20 77 68  ination table wh
5fa0: 65 6e 20 4d 4f 44 45 5f 49 6e 73 65 72 74 20 2a  en MODE_Insert *
5fb0: 2f 0a 20 20 63 68 61 72 20 7a 54 65 73 74 63 61  /.  char zTestca
5fc0: 73 65 5b 33 30 5d 3b 20 20 20 20 2f 2a 20 4e 61  se[30];    /* Na
5fd0: 6d 65 20 6f 66 20 63 75 72 72 65 6e 74 20 74 65  me of current te
5fe0: 73 74 20 63 61 73 65 20 2a 2f 0a 20 20 63 68 61  st case */.  cha
5ff0: 72 20 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 32  r colSeparator[2
6000: 30 5d 3b 20 2f 2a 20 43 6f 6c 75 6d 6e 20 73 65  0]; /* Column se
6010: 70 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65  parator characte
6020: 72 20 66 6f 72 20 73 65 76 65 72 61 6c 20 6d 6f  r for several mo
6030: 64 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 72 6f  des */.  char ro
6040: 77 53 65 70 61 72 61 74 6f 72 5b 32 30 5d 3b 20  wSeparator[20]; 
6050: 2f 2a 20 52 6f 77 20 73 65 70 61 72 61 74 6f 72  /* Row separator
6060: 20 63 68 61 72 61 63 74 65 72 20 66 6f 72 20 4d   character for M
6070: 4f 44 45 5f 41 73 63 69 69 20 2a 2f 0a 20 20 69  ODE_Ascii */.  i
6080: 6e 74 20 63 6f 6c 57 69 64 74 68 5b 31 30 30 5d  nt colWidth[100]
6090: 3b 20 20 20 20 20 2f 2a 20 52 65 71 75 65 73 74  ;     /* Request
60a0: 65 64 20 77 69 64 74 68 20 6f 66 20 65 61 63 68  ed width of each
60b0: 20 63 6f 6c 75 6d 6e 20 77 68 65 6e 20 69 6e 20   column when in 
60c0: 63 6f 6c 75 6d 6e 20 6d 6f 64 65 2a 2f 0a 20 20  column mode*/.  
60d0: 69 6e 74 20 61 63 74 75 61 6c 57 69 64 74 68 5b  int actualWidth[
60e0: 31 30 30 5d 3b 20 20 2f 2a 20 41 63 74 75 61 6c  100];  /* Actual
60f0: 20 77 69 64 74 68 20 6f 66 20 65 61 63 68 20 63   width of each c
6100: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
6110: 6e 75 6c 6c 56 61 6c 75 65 5b 32 30 5d 3b 20 20  nullValue[20];  
6120: 20 20 2f 2a 20 54 68 65 20 74 65 78 74 20 74 6f    /* The text to
6130: 20 70 72 69 6e 74 20 77 68 65 6e 20 61 20 4e 55   print when a NU
6140: 4c 4c 20 63 6f 6d 65 73 20 62 61 63 6b 20 66 72  LL comes back fr
6150: 6f 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  om.             
6160: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
6170: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
6180: 20 63 68 61 72 20 6f 75 74 66 69 6c 65 5b 46 49   char outfile[FI
6190: 4c 45 4e 41 4d 45 5f 4d 41 58 5d 3b 20 2f 2a 20  LENAME_MAX]; /* 
61a0: 46 69 6c 65 6e 61 6d 65 20 66 6f 72 20 2a 6f 75  Filename for *ou
61b0: 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
61c0: 72 20 2a 7a 44 62 46 69 6c 65 6e 61 6d 65 3b 20  r *zDbFilename; 
61d0: 20 20 20 2f 2a 20 6e 61 6d 65 20 6f 66 20 74 68     /* name of th
61e0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
61f0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 46 72 65 65  */.  char *zFree
6200: 4f 6e 43 6c 6f 73 65 3b 20 20 20 20 20 20 20 20  OnClose;        
6210: 20 2f 2a 20 46 69 6c 65 6e 61 6d 65 20 74 6f 20   /* Filename to 
6220: 66 72 65 65 20 77 68 65 6e 20 63 6c 6f 73 69 6e  free when closin
6230: 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
6240: 72 20 2a 7a 56 66 73 3b 20 20 20 20 20 20 20 20  r *zVfs;        
6250: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 56 46     /* Name of VF
6260: 53 20 74 6f 20 75 73 65 20 2a 2f 0a 20 20 73 71  S to use */.  sq
6270: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
6280: 74 3b 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20  t;   /* Current 
6290: 73 74 61 74 65 6d 65 6e 74 20 69 66 20 61 6e 79  statement if any
62a0: 2e 20 2a 2f 0a 20 20 46 49 4c 45 20 2a 70 4c 6f  . */.  FILE *pLo
62b0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g;            /*
62c0: 20 57 72 69 74 65 20 6c 6f 67 20 6f 75 74 70 75   Write log outpu
62d0: 74 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  t here */.  int 
62e0: 2a 61 69 49 6e 64 65 6e 74 3b 20 20 20 20 20 20  *aiIndent;      
62f0: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 69     /* Array of i
6300: 6e 64 65 6e 74 73 20 75 73 65 64 20 69 6e 20 4d  ndents used in M
6310: 4f 44 45 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20  ODE_Explain */. 
6320: 20 69 6e 74 20 6e 49 6e 64 65 6e 74 3b 20 20 20   int nIndent;   
6330: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
6340: 6f 66 20 61 72 72 61 79 20 61 69 49 6e 64 65 6e  of array aiInden
6350: 74 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 49 6e  t[] */.  int iIn
6360: 64 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  dent;           
6370: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 75 72 72  /* Index of curr
6380: 65 6e 74 20 6f 70 20 69 6e 20 61 69 49 6e 64 65  ent op in aiInde
6390: 6e 74 5b 5d 20 2a 2f 0a 23 69 66 20 64 65 66 69  nt[] */.#if defi
63a0: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
63b0: 45 5f 53 45 53 53 49 4f 4e 29 0a 20 20 69 6e 74  E_SESSION).  int
63c0: 20 6e 53 65 73 73 69 6f 6e 3b 20 20 20 20 20 20   nSession;      
63d0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
63e0: 20 6f 66 20 61 63 74 69 76 65 20 73 65 73 73 69   of active sessi
63f0: 6f 6e 73 20 2a 2f 0a 20 20 4f 70 65 6e 53 65 73  ons */.  OpenSes
6400: 73 69 6f 6e 20 61 53 65 73 73 69 6f 6e 5b 34 5d  sion aSession[4]
6410: 3b 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73  ;  /* Array of s
6420: 65 73 73 69 6f 6e 73 2e 20 20 5b 30 5d 20 69 73  essions.  [0] is
6430: 20 69 6e 20 66 6f 63 75 73 2e 20 2a 2f 0a 23 65   in focus. */.#e
6440: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ndif.};../*.** T
6450: 68 65 73 65 20 61 72 65 20 74 68 65 20 61 6c 6c  hese are the all
6460: 6f 77 65 64 20 73 68 65 6c 6c 46 6c 67 73 20 76  owed shellFlgs v
6470: 61 6c 75 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  alues.*/.#define
6480: 20 53 48 46 4c 47 5f 50 61 67 65 63 61 63 68 65   SHFLG_Pagecache
6490: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31        0x00000001
64a0: 20 2f 2a 20 54 68 65 20 2d 2d 70 61 67 65 63 61   /* The --pageca
64b0: 63 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  che option is us
64c0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48  ed */.#define SH
64d0: 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64 65 20 20 20  FLG_Lookaside   
64e0: 20 20 20 30 78 30 30 30 30 30 30 30 32 20 2f 2a     0x00000002 /*
64f0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72   Lookaside memor
6500: 79 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65  y is used */.#de
6510: 66 69 6e 65 20 53 48 46 4c 47 5f 42 61 63 6b 73  fine SHFLG_Backs
6520: 6c 61 73 68 20 20 20 20 20 20 30 78 30 30 30 30  lash      0x0000
6530: 30 30 30 34 20 2f 2a 20 54 68 65 20 2d 2d 62 61  0004 /* The --ba
6540: 63 6b 73 6c 61 73 68 20 6f 70 74 69 6f 6e 20 69  ckslash option i
6550: 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  s used */.#defin
6560: 65 20 53 48 46 4c 47 5f 50 72 65 73 65 72 76 65  e SHFLG_Preserve
6570: 52 6f 77 69 64 20 20 30 78 30 30 30 30 30 30 30  Rowid  0x0000000
6580: 38 20 2f 2a 20 2e 64 75 6d 70 20 70 72 65 73 65  8 /* .dump prese
6590: 72 76 65 73 20 72 6f 77 69 64 20 76 61 6c 75 65  rves rowid value
65a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 46  s */.#define SHF
65b0: 4c 47 5f 4e 65 77 6c 69 6e 65 73 20 20 20 20 20  LG_Newlines     
65c0: 20 20 30 78 30 30 30 30 30 30 31 30 20 2f 2a 20    0x00000010 /* 
65d0: 2e 64 75 6d 70 20 2d 2d 6e 65 77 6c 69 6e 65 20  .dump --newline 
65e0: 66 6c 61 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  flag */.#define 
65f0: 53 48 46 4c 47 5f 43 6f 75 6e 74 43 68 61 6e 67  SHFLG_CountChang
6600: 65 73 20 20 20 30 78 30 30 30 30 30 30 32 30 20  es   0x00000020 
6610: 2f 2a 20 2e 63 68 61 6e 67 65 73 20 73 65 74 74  /* .changes sett
6620: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
6630: 48 46 4c 47 5f 45 63 68 6f 20 20 20 20 20 20 20  HFLG_Echo       
6640: 20 20 20 20 30 78 30 30 30 30 30 30 34 30 20 2f      0x00000040 /
6650: 2a 20 2e 65 63 68 6f 20 6f 72 20 2d 2d 65 63 68  * .echo or --ech
6660: 6f 20 73 65 74 74 69 6e 67 20 2a 2f 0a 0a 2f 2a  o setting */../*
6670: 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74  .** Macros for t
6680: 65 73 74 69 6e 67 20 61 6e 64 20 73 65 74 74 69  esting and setti
6690: 6e 67 20 73 68 65 6c 6c 46 6c 67 73 0a 2a 2f 0a  ng shellFlgs.*/.
66a0: 23 64 65 66 69 6e 65 20 53 68 65 6c 6c 48 61 73  #define ShellHas
66b0: 46 6c 61 67 28 50 2c 58 29 20 20 20 20 28 28 28  Flag(P,X)    (((
66c0: 50 29 2d 3e 73 68 65 6c 6c 46 6c 67 73 20 26 20  P)->shellFlgs & 
66d0: 28 58 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (X))!=0).#define
66e0: 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28 50 2c   ShellSetFlag(P,
66f0: 58 29 20 20 20 20 28 28 50 29 2d 3e 73 68 65 6c  X)    ((P)->shel
6700: 6c 46 6c 67 73 7c 3d 28 58 29 29 0a 23 64 65 66  lFlgs|=(X)).#def
6710: 69 6e 65 20 53 68 65 6c 6c 43 6c 65 61 72 46 6c  ine ShellClearFl
6720: 61 67 28 50 2c 58 29 20 20 28 28 50 29 2d 3e 73  ag(P,X)  ((P)->s
6730: 68 65 6c 6c 46 6c 67 73 26 3d 28 7e 28 58 29 29  hellFlgs&=(~(X))
6740: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 61  )../*.** These a
6750: 72 65 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 6d  re the allowed m
6760: 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  odes..*/.#define
6770: 20 4d 4f 44 45 5f 4c 69 6e 65 20 20 20 20 20 30   MODE_Line     0
6780: 20 20 2f 2a 20 4f 6e 65 20 63 6f 6c 75 6d 6e 20    /* One column 
6790: 70 65 72 20 6c 69 6e 65 2e 20 20 42 6c 61 6e 6b  per line.  Blank
67a0: 20 6c 69 6e 65 20 62 65 74 77 65 65 6e 20 72 65   line between re
67b0: 63 6f 72 64 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cords */.#define
67c0: 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 20 20 20 31   MODE_Column   1
67d0: 20 20 2f 2a 20 4f 6e 65 20 72 65 63 6f 72 64 20    /* One record 
67e0: 70 65 72 20 6c 69 6e 65 20 69 6e 20 6e 65 61 74  per line in neat
67f0: 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66   columns */.#def
6800: 69 6e 65 20 4d 4f 44 45 5f 4c 69 73 74 20 20 20  ine MODE_List   
6810: 20 20 32 20 20 2f 2a 20 4f 6e 65 20 72 65 63 6f    2  /* One reco
6820: 72 64 20 70 65 72 20 6c 69 6e 65 20 77 69 74 68  rd per line with
6830: 20 61 20 73 65 70 61 72 61 74 6f 72 20 2a 2f 0a   a separator */.
6840: 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 53 65 6d  #define MODE_Sem
6850: 69 20 20 20 20 20 33 20 20 2f 2a 20 53 61 6d 65  i     3  /* Same
6860: 20 61 73 20 4d 4f 44 45 5f 4c 69 73 74 20 62 75   as MODE_List bu
6870: 74 20 61 70 70 65 6e 64 20 22 3b 22 20 74 6f 20  t append ";" to 
6880: 65 61 63 68 20 6c 69 6e 65 20 2a 2f 0a 23 64 65  each line */.#de
6890: 66 69 6e 65 20 4d 4f 44 45 5f 48 74 6d 6c 20 20  fine MODE_Html  
68a0: 20 20 20 34 20 20 2f 2a 20 47 65 6e 65 72 61 74     4  /* Generat
68b0: 65 20 61 6e 20 58 48 54 4d 4c 20 74 61 62 6c 65  e an XHTML table
68c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45   */.#define MODE
68d0: 5f 49 6e 73 65 72 74 20 20 20 35 20 20 2f 2a 20  _Insert   5  /* 
68e0: 47 65 6e 65 72 61 74 65 20 53 51 4c 20 22 69 6e  Generate SQL "in
68f0: 73 65 72 74 22 20 73 74 61 74 65 6d 65 6e 74 73  sert" statements
6900: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45   */.#define MODE
6910: 5f 51 75 6f 74 65 20 20 20 20 36 20 20 2f 2a 20  _Quote    6  /* 
6920: 51 75 6f 74 65 20 76 61 6c 75 65 73 20 61 73 20  Quote values as 
6930: 66 6f 72 20 53 51 4c 20 2a 2f 0a 23 64 65 66 69  for SQL */.#defi
6940: 6e 65 20 4d 4f 44 45 5f 54 63 6c 20 20 20 20 20  ne MODE_Tcl     
6950: 20 37 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20   7  /* Generate 
6960: 41 4e 53 49 2d 43 20 6f 72 20 54 43 4c 20 71 75  ANSI-C or TCL qu
6970: 6f 74 65 64 20 65 6c 65 6d 65 6e 74 73 20 2a 2f  oted elements */
6980: 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 43 73  .#define MODE_Cs
6990: 76 20 20 20 20 20 20 38 20 20 2f 2a 20 51 75 6f  v      8  /* Quo
69a0: 74 65 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62  te strings, numb
69b0: 65 72 73 20 61 72 65 20 70 6c 61 69 6e 20 2a 2f  ers are plain */
69c0: 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 45 78  .#define MODE_Ex
69d0: 70 6c 61 69 6e 20 20 39 20 20 2f 2a 20 4c 69 6b  plain  9  /* Lik
69e0: 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 2c 20 62  e MODE_Column, b
69f0: 75 74 20 64 6f 20 6e 6f 74 20 74 72 75 6e 63 61  ut do not trunca
6a00: 74 65 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  te data */.#defi
6a10: 6e 65 20 4d 4f 44 45 5f 41 73 63 69 69 20 20 20  ne MODE_Ascii   
6a20: 31 30 20 20 2f 2a 20 55 73 65 20 41 53 43 49 49  10  /* Use ASCII
6a30: 20 75 6e 69 74 20 61 6e 64 20 72 65 63 6f 72 64   unit and record
6a40: 20 73 65 70 61 72 61 74 6f 72 73 20 28 30 78 31   separators (0x1
6a50: 46 2f 30 78 31 45 29 20 2a 2f 0a 23 64 65 66 69  F/0x1E) */.#defi
6a60: 6e 65 20 4d 4f 44 45 5f 50 72 65 74 74 79 20 20  ne MODE_Pretty  
6a70: 31 31 20 20 2f 2a 20 50 72 65 74 74 79 2d 70 72  11  /* Pretty-pr
6a80: 69 6e 74 20 73 63 68 65 6d 61 73 20 2a 2f 0a 0a  int schemas */..
6a90: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
6aa0: 72 20 2a 6d 6f 64 65 44 65 73 63 72 5b 5d 20 3d  r *modeDescr[] =
6ab0: 20 7b 0a 20 20 22 6c 69 6e 65 22 2c 0a 20 20 22   {.  "line",.  "
6ac0: 63 6f 6c 75 6d 6e 22 2c 0a 20 20 22 6c 69 73 74  column",.  "list
6ad0: 22 2c 0a 20 20 22 73 65 6d 69 22 2c 0a 20 20 22  ",.  "semi",.  "
6ae0: 68 74 6d 6c 22 2c 0a 20 20 22 69 6e 73 65 72 74  html",.  "insert
6af0: 22 2c 0a 20 20 22 71 75 6f 74 65 22 2c 0a 20 20  ",.  "quote",.  
6b00: 22 74 63 6c 22 2c 0a 20 20 22 63 73 76 22 2c 0a  "tcl",.  "csv",.
6b10: 20 20 22 65 78 70 6c 61 69 6e 22 2c 0a 20 20 22    "explain",.  "
6b20: 61 73 63 69 69 22 2c 0a 20 20 22 70 72 65 74 74  ascii",.  "prett
6b30: 79 70 72 69 6e 74 22 2c 0a 7d 3b 0a 0a 2f 2a 0a  yprint",.};../*.
6b40: 2a 2a 20 54 68 65 73 65 20 61 72 65 20 74 68 65  ** These are the
6b50: 20 63 6f 6c 75 6d 6e 2f 72 6f 77 2f 6c 69 6e 65   column/row/line
6b60: 20 73 65 70 61 72 61 74 6f 72 73 20 75 73 65 64   separators used
6b70: 20 62 79 20 74 68 65 20 76 61 72 69 6f 75 73 0a   by the various.
6b80: 2a 2a 20 69 6d 70 6f 72 74 2f 65 78 70 6f 72 74  ** import/export
6b90: 20 6d 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69   modes..*/.#defi
6ba0: 6e 65 20 53 45 50 5f 43 6f 6c 75 6d 6e 20 20 20  ne SEP_Column   
6bb0: 20 22 7c 22 0a 23 64 65 66 69 6e 65 20 53 45 50   "|".#define SEP
6bc0: 5f 52 6f 77 20 20 20 20 20 20 20 22 5c 6e 22 0a  _Row       "\n".
6bd0: 23 64 65 66 69 6e 65 20 53 45 50 5f 54 61 62 20  #define SEP_Tab 
6be0: 20 20 20 20 20 20 22 5c 74 22 0a 23 64 65 66 69        "\t".#defi
6bf0: 6e 65 20 53 45 50 5f 53 70 61 63 65 20 20 20 20  ne SEP_Space    
6c00: 20 22 20 22 0a 23 64 65 66 69 6e 65 20 53 45 50   " ".#define SEP
6c10: 5f 43 6f 6d 6d 61 20 20 20 20 20 22 2c 22 0a 23  _Comma     ",".#
6c20: 64 65 66 69 6e 65 20 53 45 50 5f 43 72 4c 66 20  define SEP_CrLf 
6c30: 20 20 20 20 20 22 5c 72 5c 6e 22 0a 23 64 65 66       "\r\n".#def
6c40: 69 6e 65 20 53 45 50 5f 55 6e 69 74 20 20 20 20  ine SEP_Unit    
6c50: 20 20 22 5c 78 31 46 22 0a 23 64 65 66 69 6e 65    "\x1F".#define
6c60: 20 53 45 50 5f 52 65 63 6f 72 64 20 20 20 20 22   SEP_Record    "
6c70: 5c 78 31 45 22 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d  \x1E"../*.** Num
6c80: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
6c90: 69 6e 20 61 6e 20 61 72 72 61 79 0a 2a 2f 0a 23  in an array.*/.#
6ca0: 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65  define ArraySize
6cb0: 28 58 29 20 20 28 69 6e 74 29 28 73 69 7a 65 6f  (X)  (int)(sizeo
6cc0: 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d  f(X)/sizeof(X[0]
6cd0: 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 61 6c 6c  ))../*.** A call
6ce0: 62 61 63 6b 20 66 6f 72 20 74 68 65 20 73 71 6c  back for the sql
6cf0: 69 74 65 33 5f 6c 6f 67 28 29 20 69 6e 74 65 72  ite3_log() inter
6d00: 66 61 63 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  face..*/.static 
6d10: 76 6f 69 64 20 73 68 65 6c 6c 4c 6f 67 28 76 6f  void shellLog(vo
6d20: 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20 69 45  id *pArg, int iE
6d30: 72 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68  rrCode, const ch
6d40: 61 72 20 2a 7a 4d 73 67 29 7b 0a 20 20 53 68 65  ar *zMsg){.  She
6d50: 6c 6c 53 74 61 74 65 20 2a 70 20 3d 20 28 53 68  llState *p = (Sh
6d60: 65 6c 6c 53 74 61 74 65 2a 29 70 41 72 67 3b 0a  ellState*)pArg;.
6d70: 20 20 69 66 28 20 70 2d 3e 70 4c 6f 67 3d 3d 30    if( p->pLog==0
6d80: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 75 74 66   ) return;.  utf
6d90: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 70 4c 6f 67  8_printf(p->pLog
6da0: 2c 20 22 28 25 64 29 20 25 73 5c 6e 22 2c 20 69  , "(%d) %s\n", i
6db0: 45 72 72 43 6f 64 65 2c 20 7a 4d 73 67 29 3b 0a  ErrCode, zMsg);.
6dc0: 20 20 66 66 6c 75 73 68 28 70 2d 3e 70 4c 6f 67    fflush(p->pLog
6dd0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70  );.}../*.** Outp
6de0: 75 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  ut the given str
6df0: 69 6e 67 20 61 73 20 61 20 68 65 78 2d 65 6e 63  ing as a hex-enc
6e00: 6f 64 65 64 20 62 6c 6f 62 20 28 65 67 2e 20 58  oded blob (eg. X
6e10: 27 31 32 33 34 27 20 29 0a 2a 2f 0a 73 74 61 74  '1234' ).*/.stat
6e20: 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 68  ic void output_h
6e30: 65 78 5f 62 6c 6f 62 28 46 49 4c 45 20 2a 6f 75  ex_blob(FILE *ou
6e40: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  t, const void *p
6e50: 42 6c 6f 62 2c 20 69 6e 74 20 6e 42 6c 6f 62 29  Blob, int nBlob)
6e60: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61  {.  int i;.  cha
6e70: 72 20 2a 7a 42 6c 6f 62 20 3d 20 28 63 68 61 72  r *zBlob = (char
6e80: 20 2a 29 70 42 6c 6f 62 3b 0a 20 20 72 61 77 5f   *)pBlob;.  raw_
6e90: 70 72 69 6e 74 66 28 6f 75 74 2c 22 58 27 22 29  printf(out,"X'")
6ea0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
6eb0: 42 6c 6f 62 3b 20 69 2b 2b 29 7b 20 72 61 77 5f  Blob; i++){ raw_
6ec0: 70 72 69 6e 74 66 28 6f 75 74 2c 22 25 30 32 78  printf(out,"%02x
6ed0: 22 2c 7a 42 6c 6f 62 5b 69 5d 26 30 78 66 66 29  ",zBlob[i]&0xff)
6ee0: 3b 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e 74 66  ; }.  raw_printf
6ef0: 28 6f 75 74 2c 22 27 22 29 3b 0a 7d 0a 0a 2f 2a  (out,"'");.}../*
6f00: 0a 2a 2a 20 46 69 6e 64 20 61 20 73 74 72 69 6e  .** Find a strin
6f10: 67 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f  g that is not fo
6f20: 75 6e 64 20 61 6e 79 77 68 65 72 65 20 69 6e 20  und anywhere in 
6f30: 7a 5b 5d 2e 20 20 52 65 74 75 72 6e 20 61 20 70  z[].  Return a p
6f40: 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68 61  ointer.** to tha
6f50: 74 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  t string..**.** 
6f60: 54 72 79 20 74 6f 20 75 73 65 20 7a 41 20 61 6e  Try to use zA an
6f70: 64 20 7a 42 20 66 69 72 73 74 2e 20 20 49 66 20  d zB first.  If 
6f80: 62 6f 74 68 20 6f 66 20 74 68 6f 73 65 20 61 72  both of those ar
6f90: 65 20 61 6c 72 65 61 64 79 20 66 6f 75 6e 64 20  e already found 
6fa0: 69 6e 20 7a 5b 5d 0a 2a 2a 20 74 68 65 6e 20 6d  in z[].** then m
6fb0: 61 6b 65 20 75 70 20 73 6f 6d 65 20 73 74 72 69  ake up some stri
6fc0: 6e 67 20 61 6e 64 20 73 74 6f 72 65 20 69 74 20  ng and store it 
6fd0: 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 7a 42  in the buffer zB
6fe0: 75 66 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  uf..*/.static co
6ff0: 6e 73 74 20 63 68 61 72 20 2a 75 6e 75 73 65 64  nst char *unused
7000: 5f 73 74 72 69 6e 67 28 0a 20 20 63 6f 6e 73 74  _string(.  const
7010: 20 63 68 61 72 20 2a 7a 2c 20 20 20 20 20 20 20   char *z,       
7020: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7030: 52 65 73 75 6c 74 20 6d 75 73 74 20 6e 6f 74 20  Result must not 
7040: 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20  appear anywhere 
7050: 69 6e 20 7a 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  in z */.  const 
7060: 63 68 61 72 20 2a 7a 41 2c 20 63 6f 6e 73 74 20  char *zA, const 
7070: 63 68 61 72 20 2a 7a 42 2c 20 20 20 2f 2a 20 54  char *zB,   /* T
7080: 72 79 20 74 68 65 73 65 20 66 69 72 73 74 20 2a  ry these first *
7090: 2f 0a 20 20 63 68 61 72 20 2a 7a 42 75 66 20 20  /.  char *zBuf  
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70b0: 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
70c0: 6f 20 73 74 6f 72 65 20 61 20 67 65 6e 65 72 61  o store a genera
70d0: 74 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b  ted string */.){
70e0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 20 3d 20  .  unsigned i = 
70f0: 30 3b 0a 20 20 69 66 28 20 73 74 72 73 74 72 28  0;.  if( strstr(
7100: 7a 2c 20 7a 41 29 3d 3d 30 20 29 20 72 65 74 75  z, zA)==0 ) retu
7110: 72 6e 20 7a 41 3b 0a 20 20 69 66 28 20 73 74 72  rn zA;.  if( str
7120: 73 74 72 28 7a 2c 20 7a 42 29 3d 3d 30 20 29 20  str(z, zB)==0 ) 
7130: 72 65 74 75 72 6e 20 7a 42 3b 0a 20 20 64 6f 7b  return zB;.  do{
7140: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
7150: 72 69 6e 74 66 28 32 30 2c 7a 42 75 66 2c 22 28  rintf(20,zBuf,"(
7160: 25 73 25 75 29 22 2c 20 7a 41 2c 20 69 2b 2b 29  %s%u)", zA, i++)
7170: 3b 0a 20 20 7d 77 68 69 6c 65 28 20 73 74 72 73  ;.  }while( strs
7180: 74 72 28 7a 2c 7a 42 75 66 29 21 3d 30 20 29 3b  tr(z,zBuf)!=0 );
7190: 0a 20 20 72 65 74 75 72 6e 20 7a 42 75 66 3b 0a  .  return zBuf;.
71a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20  }../*.** Output 
71b0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
71c0: 20 61 73 20 61 20 71 75 6f 74 65 64 20 73 74 72   as a quoted str
71d0: 69 6e 67 20 75 73 69 6e 67 20 53 51 4c 20 71 75  ing using SQL qu
71e0: 6f 74 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e  oting convention
71f0: 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
7200: 6f 3a 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64  o: output_quoted
7210: 5f 65 73 63 61 70 65 64 5f 73 74 72 69 6e 67 28  _escaped_string(
7220: 29 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ).*/.static void
7230: 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73   output_quoted_s
7240: 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75 74 2c  tring(FILE *out,
7250: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b   const char *z){
7260: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72  .  int i;.  char
7270: 20 63 3b 0a 20 20 73 65 74 42 69 6e 61 72 79 4d   c;.  setBinaryM
7280: 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a 20 20 66  ode(out, 1);.  f
7290: 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20 7a 5b 69  or(i=0; (c = z[i
72a0: 5d 29 21 3d 30 20 26 26 20 63 21 3d 27 5c 27 27  ])!=0 && c!='\''
72b0: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 63  ; i++){}.  if( c
72c0: 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  ==0 ){.    utf8_
72d0: 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 25 73 27  printf(out,"'%s'
72e0: 22 2c 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ",z);.  }else{. 
72f0: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
7300: 74 2c 20 22 27 22 29 3b 0a 20 20 20 20 77 68 69  t, "'");.    whi
7310: 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 20 20  le( *z ){.      
7320: 66 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20 7a 5b  for(i=0; (c = z[
7330: 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27 5c 27  i])!=0 && c!='\'
7340: 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20  '; i++){}.      
7350: 69 66 28 20 63 3d 3d 27 5c 27 27 20 29 20 69 2b  if( c=='\'' ) i+
7360: 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 69 20 29  +;.      if( i )
7370: 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
7380: 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 2e 2a 73  rintf(out, "%.*s
7390: 22 2c 20 69 2c 20 7a 29 3b 0a 20 20 20 20 20 20  ", i, z);.      
73a0: 20 20 7a 20 2b 3d 20 69 3b 0a 20 20 20 20 20 20    z += i;.      
73b0: 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27  }.      if( c=='
73c0: 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 20 20 72  \'' ){.        r
73d0: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
73e0: 27 22 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e  '");.        con
73f0: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20  tinue;.      }. 
7400: 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29 7b       if( c==0 ){
7410: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
7420: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 2b        }.      z+
7430: 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77  +;.    }.    raw
7440: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 27 22  _printf(out, "'"
7450: 29 3b 0a 20 20 7d 0a 20 20 73 65 74 54 65 78 74  );.  }.  setText
7460: 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a 7d 0a  Mode(out, 1);.}.
7470: 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 68  ./*.** Output th
7480: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
7490: 73 20 61 20 71 75 6f 74 65 64 20 73 74 72 69 6e  s a quoted strin
74a0: 67 20 75 73 69 6e 67 20 53 51 4c 20 71 75 6f 74  g using SQL quot
74b0: 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e  ing conventions.
74c0: 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 6c 6c  .** Additionalll
74d0: 79 20 2c 20 65 73 63 61 70 65 20 74 68 65 20 22  y , escape the "
74e0: 5c 6e 22 20 61 6e 64 20 22 5c 72 22 20 63 68 61  \n" and "\r" cha
74f0: 72 61 63 74 65 72 73 20 73 6f 20 74 68 61 74 20  racters so that 
7500: 74 68 65 79 20 64 6f 20 6e 6f 74 0a 2a 2a 20 67  they do not.** g
7510: 65 74 20 63 6f 72 72 75 70 74 65 64 20 62 79 20  et corrupted by 
7520: 65 6e 64 2d 6f 66 2d 6c 69 6e 65 20 74 72 61 6e  end-of-line tran
7530: 73 6c 61 74 69 6f 6e 20 66 61 63 69 6c 69 74 69  slation faciliti
7540: 65 73 20 69 6e 20 73 6f 6d 65 20 6f 70 65 72 61  es in some opera
7550: 74 69 6e 67 0a 2a 2a 20 73 79 73 74 65 6d 73 2e  ting.** systems.
7560: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 6c  .**.** This is l
7570: 69 6b 65 20 6f 75 74 70 75 74 5f 71 75 6f 74 65  ike output_quote
7580: 64 5f 73 74 72 69 6e 67 28 29 20 62 75 74 20 77  d_string() but w
7590: 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e  ith the addition
75a0: 20 6f 66 20 74 68 65 20 5c 72 5c 6e 0a 2a 2a 20   of the \r\n.** 
75b0: 65 73 63 61 70 65 20 6d 65 63 68 61 6e 69 73 6d  escape mechanism
75c0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
75d0: 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 65   output_quoted_e
75e0: 73 63 61 70 65 64 5f 73 74 72 69 6e 67 28 46 49  scaped_string(FI
75f0: 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63  LE *out, const c
7600: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
7610: 3b 0a 20 20 63 68 61 72 20 63 3b 0a 20 20 73 65  ;.  char c;.  se
7620: 74 42 69 6e 61 72 79 4d 6f 64 65 28 6f 75 74 2c  tBinaryMode(out,
7630: 20 31 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20   1);.  for(i=0; 
7640: 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26 26  (c = z[i])!=0 &&
7650: 20 63 21 3d 27 5c 27 27 20 26 26 20 63 21 3d 27   c!='\'' && c!='
7660: 5c 6e 27 20 26 26 20 63 21 3d 27 5c 72 27 3b 20  \n' && c!='\r'; 
7670: 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 63 3d 3d  i++){}.  if( c==
7680: 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  0 ){.    utf8_pr
7690: 69 6e 74 66 28 6f 75 74 2c 22 27 25 73 27 22 2c  intf(out,"'%s'",
76a0: 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  z);.  }else{.   
76b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 4c   const char *zNL
76c0: 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20   = 0;.    const 
76d0: 63 68 61 72 20 2a 7a 43 52 20 3d 20 30 3b 0a 20  char *zCR = 0;. 
76e0: 20 20 20 69 6e 74 20 6e 4e 4c 20 3d 20 30 3b 0a     int nNL = 0;.
76f0: 20 20 20 20 69 6e 74 20 6e 43 52 20 3d 20 30 3b      int nCR = 0;
7700: 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 31 5b  .    char zBuf1[
7710: 32 30 5d 2c 20 7a 42 75 66 32 5b 32 30 5d 3b 0a  20], zBuf2[20];.
7720: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 5b 69      for(i=0; z[i
7730: 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  ]; i++){.      i
7740: 66 28 20 7a 5b 69 5d 3d 3d 27 5c 6e 27 20 29 20  f( z[i]=='\n' ) 
7750: 6e 4e 4c 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28  nNL++;.      if(
7760: 20 7a 5b 69 5d 3d 3d 27 5c 72 27 20 29 20 6e 43   z[i]=='\r' ) nC
7770: 52 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  R++;.    }.    i
7780: 66 28 20 6e 4e 4c 20 29 7b 0a 20 20 20 20 20 20  f( nNL ){.      
7790: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  raw_printf(out, 
77a0: 22 72 65 70 6c 61 63 65 28 22 29 3b 0a 20 20 20  "replace(");.   
77b0: 20 20 20 7a 4e 4c 20 3d 20 75 6e 75 73 65 64 5f     zNL = unused_
77c0: 73 74 72 69 6e 67 28 7a 2c 20 22 5c 5c 6e 22 2c  string(z, "\\n",
77d0: 20 22 5c 5c 30 31 32 22 2c 20 7a 42 75 66 31 29   "\\012", zBuf1)
77e0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
77f0: 6e 43 52 20 29 7b 0a 20 20 20 20 20 20 72 61 77  nCR ){.      raw
7800: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 72 65  _printf(out, "re
7810: 70 6c 61 63 65 28 22 29 3b 0a 20 20 20 20 20 20  place(");.      
7820: 7a 43 52 20 3d 20 75 6e 75 73 65 64 5f 73 74 72  zCR = unused_str
7830: 69 6e 67 28 7a 2c 20 22 5c 5c 72 22 2c 20 22 5c  ing(z, "\\r", "\
7840: 5c 30 31 35 22 2c 20 7a 42 75 66 32 29 3b 0a 20  \015", zBuf2);. 
7850: 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69     }.    raw_pri
7860: 6e 74 66 28 6f 75 74 2c 20 22 27 22 29 3b 0a 20  ntf(out, "'");. 
7870: 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a     while( *z ){.
7880: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 28        for(i=0; (
7890: 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26 26 20  c = z[i])!=0 && 
78a0: 63 21 3d 27 5c 6e 27 20 26 26 20 63 21 3d 27 5c  c!='\n' && c!='\
78b0: 72 27 20 26 26 20 63 21 3d 27 5c 27 27 3b 20 69  r' && c!='\''; i
78c0: 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 69 66 28 20  ++){}.      if( 
78d0: 63 3d 3d 27 5c 27 27 20 29 20 69 2b 2b 3b 0a 20  c=='\'' ) i++;. 
78e0: 20 20 20 20 20 69 66 28 20 69 20 29 7b 0a 20 20       if( i ){.  
78f0: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
7900: 66 28 6f 75 74 2c 20 22 25 2e 2a 73 22 2c 20 69  f(out, "%.*s", i
7910: 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 7a 20  , z);.        z 
7920: 2b 3d 20 69 3b 0a 20 20 20 20 20 20 7d 0a 20 20  += i;.      }.  
7930: 20 20 20 20 69 66 28 20 63 3d 3d 27 5c 27 27 20      if( c=='\'' 
7940: 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
7950: 72 69 6e 74 66 28 6f 75 74 2c 20 22 27 22 29 3b  rintf(out, "'");
7960: 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75  .        continu
7970: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  e;.      }.     
7980: 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20 20 20   if( c==0 ){.   
7990: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
79a0: 20 20 7d 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20    }.      z++;. 
79b0: 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c 6e 27       if( c=='\n'
79c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
79d0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22  printf(out, "%s"
79e0: 2c 20 7a 4e 4c 29 3b 0a 20 20 20 20 20 20 20 20  , zNL);.        
79f0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
7a00: 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  }.      raw_prin
7a10: 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a 43  tf(out, "%s", zC
7a20: 52 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 61  R);.    }.    ra
7a30: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 27  w_printf(out, "'
7a40: 22 29 3b 0a 20 20 20 20 69 66 28 20 6e 43 52 20  ");.    if( nCR 
7a50: 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
7a60: 6e 74 66 28 6f 75 74 2c 20 22 2c 27 25 73 27 2c  ntf(out, ",'%s',
7a70: 63 68 61 72 28 31 33 29 29 22 2c 20 7a 43 52 29  char(13))", zCR)
7a80: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
7a90: 6e 4e 4c 20 29 7b 0a 20 20 20 20 20 20 72 61 77  nNL ){.      raw
7aa0: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 2c 27  _printf(out, ",'
7ab0: 25 73 27 2c 63 68 61 72 28 31 30 29 29 22 2c 20  %s',char(10))", 
7ac0: 7a 4e 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  zNL);.    }.  }.
7ad0: 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28 6f 75    setTextMode(ou
7ae0: 74 2c 20 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  t, 1);.}../*.** 
7af0: 4f 75 74 70 75 74 20 74 68 65 20 67 69 76 65 6e  Output the given
7b00: 20 73 74 72 69 6e 67 20 61 73 20 61 20 71 75 6f   string as a quo
7b10: 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ted according to
7b20: 20 43 20 6f 72 20 54 43 4c 20 71 75 6f 74 69 6e   C or TCL quotin
7b30: 67 20 72 75 6c 65 73 2e 0a 2a 2f 0a 73 74 61 74  g rules..*/.stat
7b40: 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 63  ic void output_c
7b50: 5f 73 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75  _string(FILE *ou
7b60: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  t, const char *z
7b70: 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  ){.  unsigned in
7b80: 74 20 63 3b 0a 20 20 66 70 75 74 63 28 27 22 27  t c;.  fputc('"'
7b90: 2c 20 6f 75 74 29 3b 0a 20 20 77 68 69 6c 65 28  , out);.  while(
7ba0: 20 28 63 20 3d 20 2a 28 7a 2b 2b 29 29 21 3d 30   (c = *(z++))!=0
7bb0: 20 29 7b 0a 20 20 20 20 69 66 28 20 63 3d 3d 27   ){.    if( c=='
7bc0: 5c 5c 27 20 29 7b 0a 20 20 20 20 20 20 66 70 75  \\' ){.      fpu
7bd0: 74 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20 20 20  tc(c, out);.    
7be0: 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74 29 3b    fputc(c, out);
7bf0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
7c00: 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20 20 20 66  =='"' ){.      f
7c10: 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b  putc('\\', out);
7c20: 0a 20 20 20 20 20 20 66 70 75 74 63 28 27 22 27  .      fputc('"'
7c30: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73  , out);.    }els
7c40: 65 20 69 66 28 20 63 3d 3d 27 5c 74 27 20 29 7b  e if( c=='\t' ){
7c50: 0a 20 20 20 20 20 20 66 70 75 74 63 28 27 5c 5c  .      fputc('\\
7c60: 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66  ', out);.      f
7c70: 70 75 74 63 28 27 74 27 2c 20 6f 75 74 29 3b 0a  putc('t', out);.
7c80: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
7c90: 3d 27 5c 6e 27 20 29 7b 0a 20 20 20 20 20 20 66  ='\n' ){.      f
7ca0: 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b  putc('\\', out);
7cb0: 0a 20 20 20 20 20 20 66 70 75 74 63 28 27 6e 27  .      fputc('n'
7cc0: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73  , out);.    }els
7cd0: 65 20 69 66 28 20 63 3d 3d 27 5c 72 27 20 29 7b  e if( c=='\r' ){
7ce0: 0a 20 20 20 20 20 20 66 70 75 74 63 28 27 5c 5c  .      fputc('\\
7cf0: 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66  ', out);.      f
7d00: 70 75 74 63 28 27 72 27 2c 20 6f 75 74 29 3b 0a  putc('r', out);.
7d10: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 21 69      }else if( !i
7d20: 73 70 72 69 6e 74 28 63 26 30 78 66 66 29 20 29  sprint(c&0xff) )
7d30: 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
7d40: 74 66 28 6f 75 74 2c 20 22 5c 5c 25 30 33 6f 22  tf(out, "\\%03o"
7d50: 2c 20 63 26 30 78 66 66 29 3b 0a 20 20 20 20 7d  , c&0xff);.    }
7d60: 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 70 75 74  else{.      fput
7d70: 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d  c(c, out);.    }
7d80: 0a 20 20 7d 0a 20 20 66 70 75 74 63 28 27 22 27  .  }.  fputc('"'
7d90: 2c 20 6f 75 74 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  , out);.}../*.**
7da0: 20 4f 75 74 70 75 74 20 74 68 65 20 67 69 76 65   Output the give
7db0: 6e 20 73 74 72 69 6e 67 20 77 69 74 68 20 63 68  n string with ch
7dc0: 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 72  aracters that ar
7dd0: 65 20 73 70 65 63 69 61 6c 20 74 6f 0a 2a 2a 20  e special to.** 
7de0: 48 54 4d 4c 20 65 73 63 61 70 65 64 2e 0a 2a 2f  HTML escaped..*/
7df0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74  .static void out
7e00: 70 75 74 5f 68 74 6d 6c 5f 73 74 72 69 6e 67 28  put_html_string(
7e10: 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74  FILE *out, const
7e20: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74   char *z){.  int
7e30: 20 69 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29   i;.  if( z==0 )
7e40: 20 7a 20 3d 20 22 22 3b 0a 20 20 77 68 69 6c 65   z = "";.  while
7e50: 28 20 2a 7a 20 29 7b 0a 20 20 20 20 66 6f 72 28  ( *z ){.    for(
7e60: 69 3d 30 3b 20 20 20 7a 5b 69 5d 0a 20 20 20 20  i=0;   z[i].    
7e70: 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69 5d 21          && z[i]!
7e80: 3d 27 3c 27 0a 20 20 20 20 20 20 20 20 20 20 20  ='<'.           
7e90: 20 26 26 20 7a 5b 69 5d 21 3d 27 26 27 0a 20 20   && z[i]!='&'.  
7ea0: 20 20 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69            && z[i
7eb0: 5d 21 3d 27 3e 27 0a 20 20 20 20 20 20 20 20 20  ]!='>'.         
7ec0: 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 5c 22 27     && z[i]!='\"'
7ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
7ee0: 7a 5b 69 5d 21 3d 27 5c 27 27 3b 0a 20 20 20 20  z[i]!='\'';.    
7ef0: 20 20 20 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 69      i++){}.    i
7f00: 66 28 20 69 3e 30 20 29 7b 0a 20 20 20 20 20 20  f( i>0 ){.      
7f10: 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c  utf8_printf(out,
7f20: 22 25 2e 2a 73 22 2c 69 2c 7a 29 3b 0a 20 20 20  "%.*s",i,z);.   
7f30: 20 7d 0a 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d   }.    if( z[i]=
7f40: 3d 27 3c 27 20 29 7b 0a 20 20 20 20 20 20 72 61  ='<' ){.      ra
7f50: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 6c  w_printf(out,"&l
7f60: 74 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  t;");.    }else 
7f70: 69 66 28 20 7a 5b 69 5d 3d 3d 27 26 27 20 29 7b  if( z[i]=='&' ){
7f80: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
7f90: 66 28 6f 75 74 2c 22 26 61 6d 70 3b 22 29 3b 0a  f(out,"&amp;");.
7fa0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b      }else if( z[
7fb0: 69 5d 3d 3d 27 3e 27 20 29 7b 0a 20 20 20 20 20  i]=='>' ){.     
7fc0: 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
7fd0: 22 26 67 74 3b 22 29 3b 0a 20 20 20 20 7d 65 6c  "&gt;");.    }el
7fe0: 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 22  se if( z[i]=='\"
7ff0: 27 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  ' ){.      raw_p
8000: 72 69 6e 74 66 28 6f 75 74 2c 22 26 71 75 6f 74  rintf(out,"&quot
8010: 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ;");.    }else i
8020: 66 28 20 7a 5b 69 5d 3d 3d 27 5c 27 27 20 29 7b  f( z[i]=='\'' ){
8030: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
8040: 66 28 6f 75 74 2c 22 26 23 33 39 3b 22 29 3b 0a  f(out,"&#39;");.
8050: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
8060: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
8070: 20 20 7a 20 2b 3d 20 69 20 2b 20 31 3b 0a 20 20    z += i + 1;.  
8080: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 61 20  }.}../*.** If a 
8090: 66 69 65 6c 64 20 63 6f 6e 74 61 69 6e 73 20 61  field contains a
80a0: 6e 79 20 63 68 61 72 61 63 74 65 72 20 69 64 65  ny character ide
80b0: 6e 74 69 66 69 65 64 20 62 79 20 61 20 31 20 69  ntified by a 1 i
80c0: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  n the following.
80d0: 2a 2a 20 61 72 72 61 79 2c 20 74 68 65 6e 20 74  ** array, then t
80e0: 68 65 20 73 74 72 69 6e 67 20 6d 75 73 74 20 62  he string must b
80f0: 65 20 71 75 6f 74 65 64 20 66 6f 72 20 43 53 56  e quoted for CSV
8100: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73  ..*/.static cons
8110: 74 20 63 68 61 72 20 6e 65 65 64 43 73 76 51 75  t char needCsvQu
8120: 6f 74 65 5b 5d 20 3d 20 7b 0a 20 20 31 2c 20 31  ote[] = {.  1, 1
8130: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
8140: 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,   1, 1, 1, 1
8150: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20  , 1, 1, 1, 1,.  
8160: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8170: 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20  , 1, 1,   1, 1, 
8180: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8190: 2c 0a 20 20 31 2c 20 30 2c 20 31 2c 20 30 2c 20  ,.  1, 0, 1, 0, 
81a0: 30 2c 20 30 2c 20 30 2c 20 31 2c 20 20 20 30 2c  0, 0, 0, 1,   0,
81b0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
81c0: 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c  0, 0,.  0, 0, 0,
81d0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
81e0: 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c    0, 0, 0, 0, 0,
81f0: 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30   0, 0, 0,.  0, 0
8200: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
8210: 20 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30   0,   0, 0, 0, 0
8220: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20  , 0, 0, 0, 0,.  
8230: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8240: 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20  , 0, 0,   0, 0, 
8250: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8260: 2c 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  ,.  0, 0, 0, 0, 
8270: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20 30 2c  0, 0, 0, 0,   0,
8280: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
8290: 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c  0, 0,.  0, 0, 0,
82a0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
82b0: 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c    0, 0, 0, 0, 0,
82c0: 20 30 2c 20 30 2c 20 31 2c 0a 20 20 31 2c 20 31   0, 0, 1,.  1, 1
82d0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
82e0: 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,   1, 1, 1, 1
82f0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20  , 1, 1, 1, 1,.  
8300: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8310: 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20  , 1, 1,   1, 1, 
8320: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8330: 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  ,.  1, 1, 1, 1, 
8340: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c  1, 1, 1, 1,   1,
8350: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8360: 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c  1, 1,.  1, 1, 1,
8370: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8380: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
8390: 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31   1, 1, 1,.  1, 1
83a0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
83b0: 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,   1, 1, 1, 1
83c0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20  , 1, 1, 1, 1,.  
83d0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
83e0: 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20  , 1, 1,   1, 1, 
83f0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8400: 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  ,.  1, 1, 1, 1, 
8410: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c  1, 1, 1, 1,   1,
8420: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8430: 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c  1, 1,.  1, 1, 1,
8440: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8450: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
8460: 20 31 2c 20 31 2c 20 31 2c 0a 7d 3b 0a 0a 2f 2a   1, 1, 1,.};../*
8470: 0a 2a 2a 20 4f 75 74 70 75 74 20 61 20 73 69 6e  .** Output a sin
8480: 67 6c 65 20 74 65 72 6d 20 6f 66 20 43 53 56 2e  gle term of CSV.
8490: 20 20 41 63 74 75 61 6c 6c 79 2c 20 70 2d 3e 63    Actually, p->c
84a0: 6f 6c 53 65 70 61 72 61 74 6f 72 20 69 73 20 75  olSeparator is u
84b0: 73 65 64 20 66 6f 72 0a 2a 2a 20 74 68 65 20 73  sed for.** the s
84c0: 65 70 61 72 61 74 6f 72 2c 20 77 68 69 63 68 20  eparator, which 
84d0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
84e0: 65 20 61 20 63 6f 6d 6d 61 2e 20 20 70 2d 3e 6e  e a comma.  p->n
84f0: 75 6c 6c 56 61 6c 75 65 20 69 73 0a 2a 2a 20 74  ullValue is.** t
8500: 68 65 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 20 20  he null value.  
8510: 53 74 72 69 6e 67 73 20 61 72 65 20 71 75 6f 74  Strings are quot
8520: 65 64 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e  ed if necessary.
8530: 20 20 54 68 65 20 73 65 70 61 72 61 74 6f 72 0a    The separator.
8540: 2a 2a 20 69 73 20 6f 6e 6c 79 20 69 73 73 75 65  ** is only issue
8550: 64 20 69 66 20 62 53 65 70 20 69 73 20 74 72 75  d if bSep is tru
8560: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  e..*/.static voi
8570: 64 20 6f 75 74 70 75 74 5f 63 73 76 28 53 68 65  d output_csv(She
8580: 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e 73  llState *p, cons
8590: 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 62  t char *z, int b
85a0: 53 65 70 29 7b 0a 20 20 46 49 4c 45 20 2a 6f 75  Sep){.  FILE *ou
85b0: 74 20 3d 20 70 2d 3e 6f 75 74 3b 0a 20 20 69 66  t = p->out;.  if
85c0: 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74  ( z==0 ){.    ut
85d0: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 25  f8_printf(out,"%
85e0: 73 22 2c 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29  s",p->nullValue)
85f0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
8600: 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6e 53  nt i;.    int nS
8610: 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d  ep = strlen30(p-
8620: 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a  >colSeparator);.
8630: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 5b 69      for(i=0; z[i
8640: 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  ]; i++){.      i
8650: 66 28 20 6e 65 65 64 43 73 76 51 75 6f 74 65 5b  f( needCsvQuote[
8660: 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  ((unsigned char*
8670: 29 7a 29 5b 69 5d 5d 0a 20 20 20 20 20 20 20 20  )z)[i]].        
8680: 20 7c 7c 20 28 7a 5b 69 5d 3d 3d 70 2d 3e 63 6f   || (z[i]==p->co
8690: 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 20 26 26  lSeparator[0] &&
86a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e  .             (n
86b0: 53 65 70 3d 3d 31 20 7c 7c 20 6d 65 6d 63 6d 70  Sep==1 || memcmp
86c0: 28 7a 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61  (z, p->colSepara
86d0: 74 6f 72 2c 20 6e 53 65 70 29 3d 3d 30 29 29 20  tor, nSep)==0)) 
86e0: 29 7b 0a 20 20 20 20 20 20 20 20 69 20 3d 20 30  ){.        i = 0
86f0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
8700: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
8710: 20 20 20 69 66 28 20 69 3d 3d 30 20 29 7b 0a 20     if( i==0 ){. 
8720: 20 20 20 20 20 63 68 61 72 20 2a 7a 51 75 6f 74       char *zQuot
8730: 65 64 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ed = sqlite3_mpr
8740: 69 6e 74 66 28 22 5c 22 25 77 5c 22 22 2c 20 7a  intf("\"%w\"", z
8750: 29 3b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  );.      utf8_pr
8760: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
8770: 7a 51 75 6f 74 65 64 29 3b 0a 20 20 20 20 20 20  zQuoted);.      
8780: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75  sqlite3_free(zQu
8790: 6f 74 65 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65  oted);.    }else
87a0: 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
87b0: 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a  ntf(out, "%s", z
87c0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  );.    }.  }.  i
87d0: 66 28 20 62 53 65 70 20 29 7b 0a 20 20 20 20 75  f( bSep ){.    u
87e0: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
87f0: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53  t, "%s", p->colS
8800: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 7d 0a 7d  eparator);.  }.}
8810: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
8820: 74 69 6e 65 20 72 75 6e 73 20 77 68 65 6e 20 74  tine runs when t
8830: 68 65 20 75 73 65 72 20 70 72 65 73 73 65 73 20  he user presses 
8840: 43 74 72 6c 2d 43 0a 2a 2f 0a 73 74 61 74 69 63  Ctrl-C.*/.static
8850: 20 76 6f 69 64 20 69 6e 74 65 72 72 75 70 74 5f   void interrupt_
8860: 68 61 6e 64 6c 65 72 28 69 6e 74 20 4e 6f 74 55  handler(int NotU
8870: 73 65 64 29 7b 0a 20 20 55 4e 55 53 45 44 5f 50  sed){.  UNUSED_P
8880: 41 52 41 4d 45 54 45 52 28 4e 6f 74 55 73 65 64  ARAMETER(NotUsed
8890: 29 3b 0a 20 20 73 65 65 6e 49 6e 74 65 72 72 75  );.  seenInterru
88a0: 70 74 2b 2b 3b 0a 20 20 69 66 28 20 73 65 65 6e  pt++;.  if( seen
88b0: 49 6e 74 65 72 72 75 70 74 3e 32 20 29 20 65 78  Interrupt>2 ) ex
88c0: 69 74 28 31 29 3b 0a 20 20 69 66 28 20 67 6c 6f  it(1);.  if( glo
88d0: 62 61 6c 44 62 20 29 20 73 71 6c 69 74 65 33 5f  balDb ) sqlite3_
88e0: 69 6e 74 65 72 72 75 70 74 28 67 6c 6f 62 61 6c  interrupt(global
88f0: 44 62 29 3b 0a 7d 0a 0a 23 69 66 20 28 64 65 66  Db);.}..#if (def
8900: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20  ined(_WIN32) || 
8910: 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 29 20  defined(WIN32)) 
8920: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  && !defined(_WIN
8930: 33 32 5f 57 43 45 29 0a 2f 2a 0a 2a 2a 20 54 68  32_WCE)./*.** Th
8940: 69 73 20 72 6f 75 74 69 6e 65 20 72 75 6e 73 20  is routine runs 
8950: 66 6f 72 20 63 6f 6e 73 6f 6c 65 20 65 76 65 6e  for console even
8960: 74 73 20 28 65 2e 67 2e 20 43 74 72 6c 2d 43 29  ts (e.g. Ctrl-C)
8970: 20 6f 6e 20 57 69 6e 33 32 0a 2a 2f 0a 73 74 61   on Win32.*/.sta
8980: 74 69 63 20 42 4f 4f 4c 20 57 49 4e 41 50 49 20  tic BOOL WINAPI 
8990: 43 6f 6e 73 6f 6c 65 43 74 72 6c 48 61 6e 64 6c  ConsoleCtrlHandl
89a0: 65 72 28 0a 20 20 44 57 4f 52 44 20 64 77 43 74  er(.  DWORD dwCt
89b0: 72 6c 54 79 70 65 20 2f 2a 20 4f 6e 65 20 6f 66  rlType /* One of
89c0: 20 74 68 65 20 43 54 52 4c 5f 2a 5f 45 56 45 4e   the CTRL_*_EVEN
89d0: 54 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 29  T constants */.)
89e0: 7b 0a 20 20 69 66 28 20 64 77 43 74 72 6c 54 79  {.  if( dwCtrlTy
89f0: 70 65 3d 3d 43 54 52 4c 5f 43 5f 45 56 45 4e 54  pe==CTRL_C_EVENT
8a00: 20 29 7b 0a 20 20 20 20 69 6e 74 65 72 72 75 70   ){.    interrup
8a10: 74 5f 68 61 6e 64 6c 65 72 28 30 29 3b 0a 20 20  t_handler(0);.  
8a20: 20 20 72 65 74 75 72 6e 20 54 52 55 45 3b 0a 20    return TRUE;. 
8a30: 20 7d 0a 20 20 72 65 74 75 72 6e 20 46 41 4c 53   }.  return FALS
8a40: 45 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  E;.}.#endif..#if
8a50: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8a60: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 2f  _AUTHORIZATION./
8a70: 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 65 20 22 2e  *.** When the ".
8a80: 61 75 74 68 20 4f 4e 22 20 69 73 20 73 65 74 2c  auth ON" is set,
8a90: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
8aa0: 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61  uthorizer callba
8ab0: 63 6b 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64  ck is.** invoked
8ac0: 2e 20 20 49 74 20 61 6c 77 61 79 73 20 72 65 74  .  It always ret
8ad0: 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 0a  urns SQLITE_OK..
8ae0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 68  */.static int sh
8af0: 65 6c 6c 41 75 74 68 28 0a 20 20 76 6f 69 64 20  ellAuth(.  void 
8b00: 2a 70 43 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  *pClientData,.  
8b10: 69 6e 74 20 6f 70 2c 0a 20 20 63 6f 6e 73 74 20  int op,.  const 
8b20: 63 68 61 72 20 2a 7a 41 31 2c 0a 20 20 63 6f 6e  char *zA1,.  con
8b30: 73 74 20 63 68 61 72 20 2a 7a 41 32 2c 0a 20 20  st char *zA2,.  
8b40: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 33 2c  const char *zA3,
8b50: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
8b60: 41 34 0a 29 7b 0a 20 20 53 68 65 6c 6c 53 74 61  A4.){.  ShellSta
8b70: 74 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74  te *p = (ShellSt
8b80: 61 74 65 2a 29 70 43 6c 69 65 6e 74 44 61 74 61  ate*)pClientData
8b90: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
8ba0: 20 63 68 61 72 20 2a 61 7a 41 63 74 69 6f 6e 5b   char *azAction[
8bb0: 5d 20 3d 20 7b 20 30 2c 0a 20 20 20 20 20 22 43  ] = { 0,.     "C
8bc0: 52 45 41 54 45 5f 49 4e 44 45 58 22 2c 20 20 20  REATE_INDEX",   
8bd0: 20 20 20 20 20 20 22 43 52 45 41 54 45 5f 54 41        "CREATE_TA
8be0: 42 4c 45 22 2c 20 20 20 20 20 20 20 20 20 22 43  BLE",         "C
8bf0: 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58  REATE_TEMP_INDEX
8c00: 22 2c 0a 20 20 20 20 20 22 43 52 45 41 54 45 5f  ",.     "CREATE_
8c10: 54 45 4d 50 5f 54 41 42 4c 45 22 2c 20 20 20 20  TEMP_TABLE",    
8c20: 22 43 52 45 41 54 45 5f 54 45 4d 50 5f 54 52 49  "CREATE_TEMP_TRI
8c30: 47 47 45 52 22 2c 20 20 22 43 52 45 41 54 45 5f  GGER",  "CREATE_
8c40: 54 45 4d 50 5f 56 49 45 57 22 2c 0a 20 20 20 20  TEMP_VIEW",.    
8c50: 20 22 43 52 45 41 54 45 5f 54 52 49 47 47 45 52   "CREATE_TRIGGER
8c60: 22 2c 20 20 20 20 20 20 20 22 43 52 45 41 54 45  ",       "CREATE
8c70: 5f 56 49 45 57 22 2c 20 20 20 20 20 20 20 20 20  _VIEW",         
8c80: 20 22 44 45 4c 45 54 45 22 2c 0a 20 20 20 20 20   "DELETE",.     
8c90: 22 44 52 4f 50 5f 49 4e 44 45 58 22 2c 20 20 20  "DROP_INDEX",   
8ca0: 20 20 20 20 20 20 20 20 22 44 52 4f 50 5f 54 41          "DROP_TA
8cb0: 42 4c 45 22 2c 20 20 20 20 20 20 20 20 20 20 20  BLE",           
8cc0: 22 44 52 4f 50 5f 54 45 4d 50 5f 49 4e 44 45 58  "DROP_TEMP_INDEX
8cd0: 22 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f 54 45  ",.     "DROP_TE
8ce0: 4d 50 5f 54 41 42 4c 45 22 2c 20 20 20 20 20 20  MP_TABLE",      
8cf0: 22 44 52 4f 50 5f 54 45 4d 50 5f 54 52 49 47 47  "DROP_TEMP_TRIGG
8d00: 45 52 22 2c 20 20 20 20 22 44 52 4f 50 5f 54 45  ER",    "DROP_TE
8d10: 4d 50 5f 56 49 45 57 22 2c 0a 20 20 20 20 20 22  MP_VIEW",.     "
8d20: 44 52 4f 50 5f 54 52 49 47 47 45 52 22 2c 20 20  DROP_TRIGGER",  
8d30: 20 20 20 20 20 20 20 22 44 52 4f 50 5f 56 49 45         "DROP_VIE
8d40: 57 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 22  W",            "
8d50: 49 4e 53 45 52 54 22 2c 0a 20 20 20 20 20 22 50  INSERT",.     "P
8d60: 52 41 47 4d 41 22 2c 20 20 20 20 20 20 20 20 20  RAGMA",         
8d70: 20 20 20 20 20 20 22 52 45 41 44 22 2c 20 20 20        "READ",   
8d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
8d90: 45 4c 45 43 54 22 2c 0a 20 20 20 20 20 22 54 52  ELECT",.     "TR
8da0: 41 4e 53 41 43 54 49 4f 4e 22 2c 20 20 20 20 20  ANSACTION",     
8db0: 20 20 20 20 20 22 55 50 44 41 54 45 22 2c 20 20       "UPDATE",  
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 54               "AT
8dd0: 54 41 43 48 22 2c 0a 20 20 20 20 20 22 44 45 54  TACH",.     "DET
8de0: 41 43 48 22 2c 20 20 20 20 20 20 20 20 20 20 20  ACH",           
8df0: 20 20 20 20 22 41 4c 54 45 52 5f 54 41 42 4c 45      "ALTER_TABLE
8e00: 22 2c 20 20 20 20 20 20 20 20 20 20 22 52 45 49  ",          "REI
8e10: 4e 44 45 58 22 2c 0a 20 20 20 20 20 22 41 4e 41  NDEX",.     "ANA
8e20: 4c 59 5a 45 22 2c 20 20 20 20 20 20 20 20 20 20  LYZE",          
8e30: 20 20 20 20 22 43 52 45 41 54 45 5f 56 54 41 42      "CREATE_VTAB
8e40: 4c 45 22 2c 20 20 20 20 20 20 20 20 22 44 52 4f  LE",        "DRO
8e50: 50 5f 56 54 41 42 4c 45 22 2c 0a 20 20 20 20 20  P_VTABLE",.     
8e60: 22 46 55 4e 43 54 49 4f 4e 22 2c 20 20 20 20 20  "FUNCTION",     
8e70: 20 20 20 20 20 20 20 20 22 53 41 56 45 50 4f 49          "SAVEPOI
8e80: 4e 54 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  NT",            
8e90: 22 52 45 43 55 52 53 49 56 45 22 0a 20 20 7d 3b  "RECURSIVE".  };
8ea0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 6f 6e 73  .  int i;.  cons
8eb0: 74 20 63 68 61 72 20 2a 61 7a 5b 34 5d 3b 0a 20  t char *az[4];. 
8ec0: 20 61 7a 5b 30 5d 20 3d 20 7a 41 31 3b 0a 20 20   az[0] = zA1;.  
8ed0: 61 7a 5b 31 5d 20 3d 20 7a 41 32 3b 0a 20 20 61  az[1] = zA2;.  a
8ee0: 7a 5b 32 5d 20 3d 20 7a 41 33 3b 0a 20 20 61 7a  z[2] = zA3;.  az
8ef0: 5b 33 5d 20 3d 20 7a 41 34 3b 0a 20 20 75 74 66  [3] = zA4;.  utf
8f00: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
8f10: 20 22 61 75 74 68 6f 72 69 7a 65 72 3a 20 25 73   "authorizer: %s
8f20: 22 2c 20 61 7a 41 63 74 69 6f 6e 5b 6f 70 5d 29  ", azAction[op])
8f30: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 34  ;.  for(i=0; i<4
8f40: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 72 61 77 5f  ; i++){.    raw_
8f50: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
8f60: 20 22 29 3b 0a 20 20 20 20 69 66 28 20 61 7a 5b   ");.    if( az[
8f70: 69 5d 20 29 7b 0a 20 20 20 20 20 20 6f 75 74 70  i] ){.      outp
8f80: 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f  ut_c_string(p->o
8f90: 75 74 2c 20 61 7a 5b 69 5d 29 3b 0a 20 20 20 20  ut, az[i]);.    
8fa0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77  }else{.      raw
8fb0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
8fc0: 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a 20  "NULL");.    }. 
8fd0: 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28   }.  raw_printf(
8fe0: 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20  p->out, "\n");. 
8ff0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
9000: 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  K;.}.#endif../*.
9010: 2a 2a 20 50 72 69 6e 74 20 61 20 73 63 68 65 6d  ** Print a schem
9020: 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 50 61  a statement.  Pa
9030: 72 74 20 6f 66 20 4d 4f 44 45 5f 53 65 6d 69 20  rt of MODE_Semi 
9040: 61 6e 64 20 4d 4f 44 45 5f 50 72 65 74 74 79 20  and MODE_Pretty 
9050: 6f 75 74 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  output..**.** Th
9060: 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65  is routine conve
9070: 72 74 73 20 73 6f 6d 65 20 43 52 45 41 54 45 20  rts some CREATE 
9080: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73  TABLE statements
9090: 20 66 6f 72 20 73 68 61 64 6f 77 20 74 61 62 6c   for shadow tabl
90a0: 65 73 0a 2a 2a 20 69 6e 20 46 54 53 33 2f 34 2f  es.** in FTS3/4/
90b0: 35 20 69 6e 74 6f 20 43 52 45 41 54 45 20 54 41  5 into CREATE TA
90c0: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54  BLE IF NOT EXIST
90d0: 53 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  S statements..*/
90e0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 72 69  .static void pri
90f0: 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 46 49 4c  ntSchemaLine(FIL
9100: 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68  E *out, const ch
9110: 61 72 20 2a 7a 2c 20 63 6f 6e 73 74 20 63 68 61  ar *z, const cha
9120: 72 20 2a 7a 54 61 69 6c 29 7b 0a 20 20 69 66 28  r *zTail){.  if(
9130: 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62   sqlite3_strglob
9140: 28 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 5b  ("CREATE TABLE [
9150: 27 5c 22 5d 2a 22 2c 20 7a 29 3d 3d 30 20 29 7b  '\"]*", z)==0 ){
9160: 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
9170: 28 6f 75 74 2c 20 22 43 52 45 41 54 45 20 54 41  (out, "CREATE TA
9180: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54  BLE IF NOT EXIST
9190: 53 20 25 73 25 73 22 2c 20 7a 2b 31 33 2c 20 7a  S %s%s", z+13, z
91a0: 54 61 69 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Tail);.  }else{.
91b0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
91c0: 6f 75 74 2c 20 22 25 73 25 73 22 2c 20 7a 2c 20  out, "%s%s", z, 
91d0: 7a 54 61 69 6c 29 3b 0a 20 20 7d 0a 7d 0a 73 74  zTail);.  }.}.st
91e0: 61 74 69 63 20 76 6f 69 64 20 70 72 69 6e 74 53  atic void printS
91f0: 63 68 65 6d 61 4c 69 6e 65 4e 28 46 49 4c 45 20  chemaLineN(FILE 
9200: 2a 6f 75 74 2c 20 63 68 61 72 20 2a 7a 2c 20 69  *out, char *z, i
9210: 6e 74 20 6e 2c 20 63 6f 6e 73 74 20 63 68 61 72  nt n, const char
9220: 20 2a 7a 54 61 69 6c 29 7b 0a 20 20 63 68 61 72   *zTail){.  char
9230: 20 63 20 3d 20 7a 5b 6e 5d 3b 0a 20 20 7a 5b 6e   c = z[n];.  z[n
9240: 5d 20 3d 20 30 3b 0a 20 20 70 72 69 6e 74 53 63  ] = 0;.  printSc
9250: 68 65 6d 61 4c 69 6e 65 28 6f 75 74 2c 20 7a 2c  hemaLine(out, z,
9260: 20 7a 54 61 69 6c 29 3b 0a 20 20 7a 5b 6e 5d 20   zTail);.  z[n] 
9270: 3d 20 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  = c;.}../*.** Th
9280: 69 73 20 69 73 20 74 68 65 20 63 61 6c 6c 62 61  is is the callba
9290: 63 6b 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  ck routine that 
92a0: 74 68 65 20 73 68 65 6c 6c 0a 2a 2a 20 69 6e 76  the shell.** inv
92b0: 6f 6b 65 73 20 66 6f 72 20 65 61 63 68 20 72 6f  okes for each ro
92c0: 77 20 6f 66 20 61 20 71 75 65 72 79 20 72 65 73  w of a query res
92d0: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
92e0: 6e 74 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63  nt shell_callbac
92f0: 6b 28 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 2c  k(.  void *pArg,
9300: 0a 20 20 69 6e 74 20 6e 41 72 67 2c 20 20 20 20  .  int nArg,    
9310: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9320: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
9330: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72  */.  char **azAr
9340: 67 2c 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  g,    /* Text of
9350: 20 65 61 63 68 20 72 65 73 75 6c 74 20 63 6f 6c   each result col
9360: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  umn */.  char **
9370: 61 7a 43 6f 6c 2c 20 20 20 20 2f 2a 20 43 6f 6c  azCol,    /* Col
9380: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 69  umn names */.  i
9390: 6e 74 20 2a 61 69 54 79 70 65 20 20 20 20 20 20  nt *aiType      
93a0: 2f 2a 20 43 6f 6c 75 6d 6e 20 74 79 70 65 73 20  /* Column types 
93b0: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  */.){.  int i;. 
93c0: 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 20 3d   ShellState *p =
93d0: 20 28 53 68 65 6c 6c 53 74 61 74 65 2a 29 70 41   (ShellState*)pA
93e0: 72 67 3b 0a 0a 20 20 69 66 28 20 61 7a 41 72 67  rg;..  if( azArg
93f0: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
9400: 20 20 73 77 69 74 63 68 28 20 70 2d 3e 63 4d 6f    switch( p->cMo
9410: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4d  de ){.    case M
9420: 4f 44 45 5f 4c 69 6e 65 3a 20 7b 0a 20 20 20 20  ODE_Line: {.    
9430: 20 20 69 6e 74 20 77 20 3d 20 35 3b 0a 20 20 20    int w = 5;.   
9440: 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20     if( azArg==0 
9450: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66  ) break;.      f
9460: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
9470: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  i++){.        in
9480: 74 20 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 33 30  t len = strlen30
9490: 28 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43 6f  (azCol[i] ? azCo
94a0: 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a 20 20 20 20  l[i] : "");.    
94b0: 20 20 20 20 69 66 28 20 6c 65 6e 3e 77 20 29 20      if( len>w ) 
94c0: 77 20 3d 20 6c 65 6e 3b 0a 20 20 20 20 20 20 7d  w = len;.      }
94d0: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e  .      if( p->cn
94e0: 74 2b 2b 3e 30 20 29 20 75 74 66 38 5f 70 72 69  t++>0 ) utf8_pri
94f0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
9500: 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
9510: 72 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  r);.      for(i=
9520: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
9530: 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
9540: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 2a 73  intf(p->out,"%*s
9550: 20 3d 20 25 73 25 73 22 2c 20 77 2c 20 61 7a 43   = %s%s", w, azC
9560: 6f 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20  ol[i],.         
9570: 20 20 20 20 20 20 20 61 7a 41 72 67 5b 69 5d 20         azArg[i] 
9580: 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e  ? azArg[i] : p->
9590: 6e 75 6c 6c 56 61 6c 75 65 2c 20 70 2d 3e 72 6f  nullValue, p->ro
95a0: 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  wSeparator);.   
95b0: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
95c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
95d0: 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 3a 0a 20   MODE_Explain:. 
95e0: 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 43 6f 6c     case MODE_Col
95f0: 75 6d 6e 3a 20 7b 0a 20 20 20 20 20 20 73 74 61  umn: {.      sta
9600: 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 61 45  tic const int aE
9610: 78 70 6c 61 69 6e 57 69 64 74 68 73 5b 5d 20 3d  xplainWidths[] =
9620: 20 7b 34 2c 20 31 33 2c 20 34 2c 20 34 2c 20 34   {4, 13, 4, 4, 4
9630: 2c 20 31 33 2c 20 32 2c 20 31 33 7d 3b 0a 20 20  , 13, 2, 13};.  
9640: 20 20 20 20 63 6f 6e 73 74 20 69 6e 74 20 2a 63      const int *c
9650: 6f 6c 57 69 64 74 68 3b 0a 20 20 20 20 20 20 69  olWidth;.      i
9660: 6e 74 20 73 68 6f 77 48 64 72 3b 0a 20 20 20 20  nt showHdr;.    
9670: 20 20 63 68 61 72 20 2a 72 6f 77 53 65 70 3b 0a    char *rowSep;.
9680: 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 4d 6f        if( p->cMo
9690: 64 65 3d 3d 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 20  de==MODE_Column 
96a0: 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6c 57 69  ){.        colWi
96b0: 64 74 68 20 3d 20 70 2d 3e 63 6f 6c 57 69 64 74  dth = p->colWidt
96c0: 68 3b 0a 20 20 20 20 20 20 20 20 73 68 6f 77 48  h;.        showH
96d0: 64 72 20 3d 20 70 2d 3e 73 68 6f 77 48 65 61 64  dr = p->showHead
96e0: 65 72 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 53  er;.        rowS
96f0: 65 70 20 3d 20 70 2d 3e 72 6f 77 53 65 70 61 72  ep = p->rowSepar
9700: 61 74 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ator;.      }els
9710: 65 7b 0a 20 20 20 20 20 20 20 20 63 6f 6c 57 69  e{.        colWi
9720: 64 74 68 20 3d 20 61 45 78 70 6c 61 69 6e 57 69  dth = aExplainWi
9730: 64 74 68 73 3b 0a 20 20 20 20 20 20 20 20 73 68  dths;.        sh
9740: 6f 77 48 64 72 20 3d 20 31 3b 0a 20 20 20 20 20  owHdr = 1;.     
9750: 20 20 20 72 6f 77 53 65 70 20 3d 20 53 45 50 5f     rowSep = SEP_
9760: 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  Row;.      }.   
9770: 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d     if( p->cnt++=
9780: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f  =0 ){.        fo
9790: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
97a0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
97b0: 6e 74 20 77 2c 20 6e 3b 0a 20 20 20 20 20 20 20  nt w, n;.       
97c0: 20 20 20 69 66 28 20 69 3c 41 72 72 61 79 53 69     if( i<ArraySi
97d0: 7a 65 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 20  ze(p->colWidth) 
97e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ){.            w
97f0: 20 3d 20 63 6f 6c 57 69 64 74 68 5b 69 5d 3b 0a   = colWidth[i];.
9800: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
9810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 20 3d  .            w =
9820: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   0;.          }.
9830: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 77 3d            if( w=
9840: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
9850: 20 20 77 20 3d 20 73 74 72 6c 65 6e 43 68 61 72    w = strlenChar
9860: 28 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43 6f  (azCol[i] ? azCo
9870: 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a 20 20 20 20  l[i] : "");.    
9880: 20 20 20 20 20 20 20 20 69 66 28 20 77 3c 31 30          if( w<10
9890: 20 29 20 77 20 3d 20 31 30 3b 0a 20 20 20 20 20   ) w = 10;.     
98a0: 20 20 20 20 20 20 20 6e 20 3d 20 73 74 72 6c 65         n = strle
98b0: 6e 43 68 61 72 28 61 7a 41 72 67 20 26 26 20 61  nChar(azArg && a
98c0: 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b  zArg[i] ? azArg[
98d0: 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75  i] : p->nullValu
98e0: 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e);.            
98f0: 69 66 28 20 77 3c 6e 20 29 20 77 20 3d 20 6e 3b  if( w<n ) w = n;
9900: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
9910: 20 20 20 20 20 20 20 69 66 28 20 69 3c 41 72 72         if( i<Arr
9920: 61 79 53 69 7a 65 28 70 2d 3e 61 63 74 75 61 6c  aySize(p->actual
9930: 57 69 64 74 68 29 20 29 7b 0a 20 20 20 20 20 20  Width) ){.      
9940: 20 20 20 20 20 20 70 2d 3e 61 63 74 75 61 6c 57        p->actualW
9950: 69 64 74 68 5b 69 5d 20 3d 20 77 3b 0a 20 20 20  idth[i] = w;.   
9960: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9970: 20 20 20 69 66 28 20 73 68 6f 77 48 64 72 20 29     if( showHdr )
9980: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74  {.            ut
9990: 66 38 5f 77 69 64 74 68 5f 70 72 69 6e 74 28 70  f8_width_print(p
99a0: 2d 3e 6f 75 74 2c 20 77 2c 20 61 7a 43 6f 6c 5b  ->out, w, azCol[
99b0: 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  i]);.           
99c0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
99d0: 6f 75 74 2c 20 22 25 73 22 2c 20 69 3d 3d 6e 41  out, "%s", i==nA
99e0: 72 67 2d 31 20 3f 20 72 6f 77 53 65 70 20 3a 20  rg-1 ? rowSep : 
99f0: 22 20 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20  "  ");.         
9a00: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
9a10: 20 20 20 20 20 69 66 28 20 73 68 6f 77 48 64 72       if( showHdr
9a20: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f   ){.          fo
9a30: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
9a40: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
9a50: 20 69 6e 74 20 77 3b 0a 20 20 20 20 20 20 20 20   int w;.        
9a60: 20 20 20 20 69 66 28 20 69 3c 41 72 72 61 79 53      if( i<ArrayS
9a70: 69 7a 65 28 70 2d 3e 61 63 74 75 61 6c 57 69 64  ize(p->actualWid
9a80: 74 68 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  th) ){.         
9a90: 20 20 20 20 20 20 77 20 3d 20 70 2d 3e 61 63 74        w = p->act
9aa0: 75 61 6c 57 69 64 74 68 5b 69 5d 3b 0a 20 20 20  ualWidth[i];.   
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
9ac0: 77 3c 30 20 29 20 77 20 3d 20 2d 77 3b 0a 20 20  w<0 ) w = -w;.  
9ad0: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
9ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9af0: 77 20 3d 20 31 30 3b 0a 20 20 20 20 20 20 20 20  w = 10;.        
9b00: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
9b10: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
9b20: 3e 6f 75 74 2c 22 25 2d 2a 2e 2a 73 25 73 22 2c  >out,"%-*.*s%s",
9b30: 77 2c 77 2c 0a 20 20 20 20 20 20 20 20 20 20 20  w,w,.           
9b40: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 2d 2d 2d          "-------
9b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b80: 2d 2d 2d 22 0a 20 20 20 20 20 20 20 20 20 20 20  ---".           
9b90: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 2d 2d 2d          "-------
9ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9bd0: 2d 2d 2d 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ---",.          
9be0: 20 20 20 20 20 20 20 20 20 20 69 3d 3d 6e 41 72            i==nAr
9bf0: 67 2d 31 20 3f 20 72 6f 77 53 65 70 20 3a 20 22  g-1 ? rowSep : "
9c00: 20 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20    ");.          
9c10: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
9c20: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a    }.      if( az
9c30: 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  Arg==0 ) break;.
9c40: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
9c50: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
9c60: 20 20 20 20 20 69 6e 74 20 77 3b 0a 20 20 20 20       int w;.    
9c70: 20 20 20 20 69 66 28 20 69 3c 41 72 72 61 79 53      if( i<ArrayS
9c80: 69 7a 65 28 70 2d 3e 61 63 74 75 61 6c 57 69 64  ize(p->actualWid
9c90: 74 68 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  th) ){.         
9ca0: 20 20 77 20 3d 20 70 2d 3e 61 63 74 75 61 6c 57    w = p->actualW
9cb0: 69 64 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20  idth[i];.       
9cc0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
9cd0: 20 20 20 77 20 3d 20 31 30 3b 0a 20 20 20 20 20     w = 10;.     
9ce0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
9cf0: 20 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f   p->cMode==MODE_
9d00: 45 78 70 6c 61 69 6e 20 26 26 20 61 7a 41 72 67  Explain && azArg
9d10: 5b 69 5d 20 26 26 20 73 74 72 6c 65 6e 43 68 61  [i] && strlenCha
9d20: 72 28 61 7a 41 72 67 5b 69 5d 29 3e 77 20 29 7b  r(azArg[i])>w ){
9d30: 0a 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 73  .          w = s
9d40: 74 72 6c 65 6e 43 68 61 72 28 61 7a 41 72 67 5b  trlenChar(azArg[
9d50: 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  i]);.        }. 
9d60: 20 20 20 20 20 20 20 69 66 28 20 69 3d 3d 31 20         if( i==1 
9d70: 26 26 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20 26  && p->aiIndent &
9d80: 26 20 70 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20  & p->pStmt ){.  
9d90: 20 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69          if( p->i
9da0: 49 6e 64 65 6e 74 3c 70 2d 3e 6e 49 6e 64 65 6e  Indent<p->nInden
9db0: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  t ){.           
9dc0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
9dd0: 6f 75 74 2c 20 22 25 2a 2e 73 22 2c 20 70 2d 3e  out, "%*.s", p->
9de0: 61 69 49 6e 64 65 6e 74 5b 70 2d 3e 69 49 6e 64  aiIndent[p->iInd
9df0: 65 6e 74 5d 2c 20 22 22 29 3b 0a 20 20 20 20 20  ent], "");.     
9e00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
9e10: 20 70 2d 3e 69 49 6e 64 65 6e 74 2b 2b 3b 0a 20   p->iIndent++;. 
9e20: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9e30: 20 75 74 66 38 5f 77 69 64 74 68 5f 70 72 69 6e   utf8_width_prin
9e40: 74 28 70 2d 3e 6f 75 74 2c 20 77 2c 20 61 7a 41  t(p->out, w, azA
9e50: 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d  rg[i] ? azArg[i]
9e60: 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29   : p->nullValue)
9e70: 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  ;.        utf8_p
9e80: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
9e90: 73 22 2c 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20  s", i==nArg-1 ? 
9ea0: 72 6f 77 53 65 70 20 3a 20 22 20 20 22 29 3b 0a  rowSep : "  ");.
9eb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
9ec0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
9ed0: 61 73 65 20 4d 4f 44 45 5f 53 65 6d 69 3a 20 7b  ase MODE_Semi: {
9ee0: 20 20 20 2f 2a 20 2e 73 63 68 65 6d 61 20 61 6e     /* .schema an
9ef0: 64 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20 6f 75  d .fullschema ou
9f00: 74 70 75 74 20 2a 2f 0a 20 20 20 20 20 20 70 72  tput */.      pr
9f10: 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70 2d  intSchemaLine(p-
9f20: 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 30 5d 2c 20  >out, azArg[0], 
9f30: 22 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62 72  ";\n");.      br
9f40: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
9f50: 61 73 65 20 4d 4f 44 45 5f 50 72 65 74 74 79 3a  ase MODE_Pretty:
9f60: 20 7b 20 20 2f 2a 20 2e 73 63 68 65 6d 61 20 61   {  /* .schema a
9f70: 6e 64 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20 77  nd .fullschema w
9f80: 69 74 68 20 2d 2d 69 6e 64 65 6e 74 20 2a 2f 0a  ith --indent */.
9f90: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20        char *z;. 
9fa0: 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20       int j;.    
9fb0: 20 20 69 6e 74 20 6e 50 61 72 65 6e 20 3d 20 30    int nParen = 0
9fc0: 3b 0a 20 20 20 20 20 20 63 68 61 72 20 63 45 6e  ;.      char cEn
9fd0: 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 68 61  d = 0;.      cha
9fe0: 72 20 63 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  r c;.      int n
9ff0: 4c 69 6e 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  Line = 0;.      
a000: 61 73 73 65 72 74 28 20 6e 41 72 67 3d 3d 31 20  assert( nArg==1 
a010: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41  );.      if( azA
a020: 72 67 5b 30 5d 3d 3d 30 20 29 20 62 72 65 61 6b  rg[0]==0 ) break
a030: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
a040: 74 65 33 5f 73 74 72 6c 69 6b 65 28 22 43 52 45  te3_strlike("CRE
a050: 41 54 45 20 56 49 45 57 25 22 2c 20 61 7a 41 72  ATE VIEW%", azAr
a060: 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a 20 20 20 20  g[0], 0)==0.    
a070: 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74     || sqlite3_st
a080: 72 6c 69 6b 65 28 22 43 52 45 41 54 45 20 54 52  rlike("CREATE TR
a090: 49 47 25 22 2c 20 61 7a 41 72 67 5b 30 5d 2c 20  IG%", azArg[0], 
a0a0: 30 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  0)==0.      ){. 
a0b0: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
a0c0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 3b 5c  tf(p->out, "%s;\
a0d0: 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20  n", azArg[0]);. 
a0e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a0f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 20 3d 20      }.      z = 
a100: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
a110: 22 25 73 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b  "%s", azArg[0]);
a120: 0a 20 20 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20  .      j = 0;.  
a130: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 49 73 53      for(i=0; IsS
a140: 70 61 63 65 28 7a 5b 69 5d 29 3b 20 69 2b 2b 29  pace(z[i]); i++)
a150: 7b 7d 0a 20 20 20 20 20 20 66 6f 72 28 3b 20 28  {}.      for(; (
a160: 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b  c = z[i])!=0; i+
a170: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
a180: 49 73 53 70 61 63 65 28 63 29 20 29 7b 0a 20 20  IsSpace(c) ){.  
a190: 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 6a 2d          if( z[j-
a1a0: 31 5d 3d 3d 27 5c 72 27 20 29 20 7a 5b 6a 2d 31  1]=='\r' ) z[j-1
a1b0: 5d 20 3d 20 27 5c 6e 27 3b 0a 20 20 20 20 20 20  ] = '\n';.      
a1c0: 20 20 20 20 69 66 28 20 49 73 53 70 61 63 65 28      if( IsSpace(
a1d0: 7a 5b 6a 2d 31 5d 29 20 7c 7c 20 7a 5b 6a 2d 31  z[j-1]) || z[j-1
a1e0: 5d 3d 3d 27 28 27 20 29 20 63 6f 6e 74 69 6e 75  ]=='(' ) continu
a1f0: 65 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  e;.        }else
a200: 20 69 66 28 20 28 63 3d 3d 27 28 27 20 7c 7c 20   if( (c=='(' || 
a210: 63 3d 3d 27 29 27 29 20 26 26 20 6a 3e 30 20 26  c==')') && j>0 &
a220: 26 20 49 73 53 70 61 63 65 28 7a 5b 6a 2d 31 5d  & IsSpace(z[j-1]
a230: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6a  ) ){.          j
a240: 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
a250: 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 63        z[j++] = c
a260: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
a270: 77 68 69 6c 65 28 20 6a 3e 30 20 26 26 20 49 73  while( j>0 && Is
a280: 53 70 61 63 65 28 7a 5b 6a 2d 31 5d 29 20 29 7b  Space(z[j-1]) ){
a290: 20 6a 2d 2d 3b 20 7d 0a 20 20 20 20 20 20 7a 5b   j--; }.      z[
a2a0: 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 66  j] = 0;.      if
a2b0: 28 20 73 74 72 6c 65 6e 33 30 28 7a 29 3e 3d 37  ( strlen30(z)>=7
a2c0: 39 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  9 ){.        for
a2d0: 28 69 3d 6a 3d 30 3b 20 28 63 20 3d 20 7a 5b 69  (i=j=0; (c = z[i
a2e0: 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20 20  ])!=0; i++){.   
a2f0: 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 63 45         if( c==cE
a300: 6e 64 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  nd ){.          
a310: 20 20 63 45 6e 64 20 3d 20 30 3b 0a 20 20 20 20    cEnd = 0;.    
a320: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
a330: 63 3d 3d 27 22 27 20 7c 7c 20 63 3d 3d 27 5c 27  c=='"' || c=='\'
a340: 27 20 7c 7c 20 63 3d 3d 27 60 27 20 29 7b 0a 20  ' || c=='`' ){. 
a350: 20 20 20 20 20 20 20 20 20 20 20 63 45 6e 64 20             cEnd 
a360: 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = c;.          }
a370: 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 5b 27 20  else if( c=='[' 
a380: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ){.            c
a390: 45 6e 64 20 3d 20 27 5d 27 3b 0a 20 20 20 20 20  End = ']';.     
a3a0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63       }else if( c
a3b0: 3d 3d 27 28 27 20 29 7b 0a 20 20 20 20 20 20 20  =='(' ){.       
a3c0: 20 20 20 20 20 6e 50 61 72 65 6e 2b 2b 3b 0a 20       nParen++;. 
a3d0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69           }else i
a3e0: 66 28 20 63 3d 3d 27 29 27 20 29 7b 0a 20 20 20  f( c==')' ){.   
a3f0: 20 20 20 20 20 20 20 20 20 6e 50 61 72 65 6e 2d           nParen-
a400: 2d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  -;.            i
a410: 66 28 20 6e 4c 69 6e 65 3e 30 20 26 26 20 6e 50  f( nLine>0 && nP
a420: 61 72 65 6e 3d 3d 30 20 26 26 20 6a 3e 30 20 29  aren==0 && j>0 )
a430: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
a440: 70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 4e  printSchemaLineN
a450: 28 70 2d 3e 6f 75 74 2c 20 7a 2c 20 6a 2c 20 22  (p->out, z, j, "
a460: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
a470: 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20      j = 0;.     
a480: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
a490: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7a     }.          z
a4a0: 5b 6a 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20  [j++] = c;.     
a4b0: 20 20 20 20 20 69 66 28 20 6e 50 61 72 65 6e 3d       if( nParen=
a4c0: 3d 31 20 26 26 20 28 63 3d 3d 27 28 27 20 7c 7c  =1 && (c=='(' ||
a4d0: 20 63 3d 3d 27 2c 27 20 7c 7c 20 63 3d 3d 27 5c   c==',' || c=='\
a4e0: 6e 27 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  n') ){.         
a4f0: 20 20 20 69 66 28 20 63 3d 3d 27 5c 6e 27 20 29     if( c=='\n' )
a500: 20 6a 2d 2d 3b 0a 20 20 20 20 20 20 20 20 20 20   j--;.          
a510: 20 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e    printSchemaLin
a520: 65 4e 28 70 2d 3e 6f 75 74 2c 20 7a 2c 20 6a 2c  eN(p->out, z, j,
a530: 20 22 5c 6e 20 20 22 29 3b 0a 20 20 20 20 20 20   "\n  ");.      
a540: 20 20 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20 20        j = 0;.   
a550: 20 20 20 20 20 20 20 20 20 6e 4c 69 6e 65 2b 2b           nLine++
a560: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 68  ;.            wh
a570: 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 5b 69  ile( IsSpace(z[i
a580: 2b 31 5d 29 20 29 7b 20 69 2b 2b 3b 20 7d 0a 20  +1]) ){ i++; }. 
a590: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
a5a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 5b 6a     }.        z[j
a5b0: 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  ] = 0;.      }. 
a5c0: 20 20 20 20 20 70 72 69 6e 74 53 63 68 65 6d 61       printSchema
a5d0: 4c 69 6e 65 28 70 2d 3e 6f 75 74 2c 20 7a 2c 20  Line(p->out, z, 
a5e0: 22 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 73 71  ";\n");.      sq
a5f0: 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20  lite3_free(z);. 
a600: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a610: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
a620: 4c 69 73 74 3a 20 7b 0a 20 20 20 20 20 20 69 66  List: {.      if
a630: 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26  ( p->cnt++==0 &&
a640: 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29   p->showHeader )
a650: 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d  {.        for(i=
a660: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
a670: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
a680: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
a690: 73 25 73 22 2c 61 7a 43 6f 6c 5b 69 5d 2c 0a 20  s%s",azCol[i],. 
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6b0: 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 70 2d 3e   i==nArg-1 ? p->
a6c0: 72 6f 77 53 65 70 61 72 61 74 6f 72 20 3a 20 70  rowSeparator : p
a6d0: 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b  ->colSeparator);
a6e0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
a6f0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41   }.      if( azA
a700: 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  rg==0 ) break;. 
a710: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
a720: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
a730: 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a      char *z = az
a740: 41 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20  Arg[i];.        
a750: 69 66 28 20 7a 3d 3d 30 20 29 20 7a 20 3d 20 70  if( z==0 ) z = p
a760: 2d 3e 6e 75 6c 6c 56 61 6c 75 65 3b 0a 20 20 20  ->nullValue;.   
a770: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
a780: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a  (p->out, "%s", z
a790: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  );.        if( i
a7a0: 3c 6e 41 72 67 2d 31 20 29 7b 0a 20 20 20 20 20  <nArg-1 ){.     
a7b0: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
a7c0: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
a7d0: 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b  ->colSeparator);
a7e0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
a7f0: 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
a800: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
a810: 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  s", p->rowSepara
a820: 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  tor);.        }.
a830: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
a840: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
a850: 61 73 65 20 4d 4f 44 45 5f 48 74 6d 6c 3a 20 7b  ase MODE_Html: {
a860: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e  .      if( p->cn
a870: 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f  t++==0 && p->sho
a880: 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20  wHeader ){.     
a890: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
a8a0: 3e 6f 75 74 2c 22 3c 54 52 3e 22 29 3b 0a 20 20  >out,"<TR>");.  
a8b0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
a8c0: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
a8d0: 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
a8e0: 66 28 70 2d 3e 6f 75 74 2c 22 3c 54 48 3e 22 29  f(p->out,"<TH>")
a8f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70  ;.          outp
a900: 75 74 5f 68 74 6d 6c 5f 73 74 72 69 6e 67 28 70  ut_html_string(p
a910: 2d 3e 6f 75 74 2c 20 61 7a 43 6f 6c 5b 69 5d 29  ->out, azCol[i])
a920: 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f  ;.          raw_
a930: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c  printf(p->out,"<
a940: 2f 54 48 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20  /TH>\n");.      
a950: 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f    }.        raw_
a960: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c  printf(p->out,"<
a970: 2f 54 52 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20  /TR>\n");.      
a980: 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41 72  }.      if( azAr
a990: 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  g==0 ) break;.  
a9a0: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
a9b0: 2d 3e 6f 75 74 2c 22 3c 54 52 3e 22 29 3b 0a 20  ->out,"<TR>");. 
a9c0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
a9d0: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
a9e0: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
a9f0: 2d 3e 6f 75 74 2c 22 3c 54 44 3e 22 29 3b 0a 20  ->out,"<TD>");. 
aa00: 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 68 74         output_ht
aa10: 6d 6c 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ml_string(p->out
aa20: 2c 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41  , azArg[i] ? azA
aa30: 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56  rg[i] : p->nullV
aa40: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 72  alue);.        r
aa50: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
aa60: 2c 22 3c 2f 54 44 3e 5c 6e 22 29 3b 0a 20 20 20  ,"</TD>\n");.   
aa70: 20 20 20 7d 0a 20 20 20 20 20 20 72 61 77 5f 70     }.      raw_p
aa80: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f  rintf(p->out,"</
aa90: 54 52 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62  TR>\n");.      b
aaa0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
aab0: 63 61 73 65 20 4d 4f 44 45 5f 54 63 6c 3a 20 7b  case MODE_Tcl: {
aac0: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e  .      if( p->cn
aad0: 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f  t++==0 && p->sho
aae0: 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20  wHeader ){.     
aaf0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
ab00: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
ab10: 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72      output_c_str
ab20: 69 6e 67 28 70 2d 3e 6f 75 74 2c 61 7a 43 6f 6c  ing(p->out,azCol
ab30: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
ab40: 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20   "");.          
ab50: 69 66 28 69 3c 6e 41 72 67 2d 31 29 20 75 74 66  if(i<nArg-1) utf
ab60: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
ab70: 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65 70   "%s", p->colSep
ab80: 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 20  arator);.       
ab90: 20 7d 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f   }.        utf8_
aba0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
abb0: 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72  %s", p->rowSepar
abc0: 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ator);.      }. 
abd0: 20 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d       if( azArg==
abe0: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
abf0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
ac00: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
ac10: 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28  output_c_string(
ac20: 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d  p->out, azArg[i]
ac30: 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d   ? azArg[i] : p-
ac40: 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20  >nullValue);.   
ac50: 20 20 20 20 20 69 66 28 69 3c 6e 41 72 67 2d 31       if(i<nArg-1
ac60: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
ac70: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63  >out, "%s", p->c
ac80: 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  olSeparator);.  
ac90: 20 20 20 20 7d 0a 20 20 20 20 20 20 75 74 66 38      }.      utf8
aca0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
acb0: 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61  "%s", p->rowSepa
acc0: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 62 72  rator);.      br
acd0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
ace0: 61 73 65 20 4d 4f 44 45 5f 43 73 76 3a 20 7b 0a  ase MODE_Csv: {.
acf0: 20 20 20 20 20 20 73 65 74 42 69 6e 61 72 79 4d        setBinaryM
ad00: 6f 64 65 28 70 2d 3e 6f 75 74 2c 20 31 29 3b 0a  ode(p->out, 1);.
ad10: 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e 74        if( p->cnt
ad20: 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77  ++==0 && p->show
ad30: 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20  Header ){.      
ad40: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
ad50: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
ad60: 20 20 20 6f 75 74 70 75 74 5f 63 73 76 28 70 2c     output_csv(p,
ad70: 20 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43 6f   azCol[i] ? azCo
ad80: 6c 5b 69 5d 20 3a 20 22 22 2c 20 69 3c 6e 41 72  l[i] : "", i<nAr
ad90: 67 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  g-1);.        }.
ada0: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
adb0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
adc0: 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
add0: 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
ade0: 20 20 69 66 28 20 6e 41 72 67 3e 30 20 29 7b 0a    if( nArg>0 ){.
adf0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
ae00: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
ae10: 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f           output_
ae20: 63 73 76 28 70 2c 20 61 7a 41 72 67 5b 69 5d 2c  csv(p, azArg[i],
ae30: 20 69 3c 6e 41 72 67 2d 31 29 3b 0a 20 20 20 20   i<nArg-1);.    
ae40: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 75 74      }.        ut
ae50: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
ae60: 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65  , "%s", p->rowSe
ae70: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
ae80: 7d 0a 20 20 20 20 20 20 73 65 74 54 65 78 74 4d  }.      setTextM
ae90: 6f 64 65 28 70 2d 3e 6f 75 74 2c 20 31 29 3b 0a  ode(p->out, 1);.
aea0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
aeb0: 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45   }.    case MODE
aec0: 5f 49 6e 73 65 72 74 3a 20 7b 0a 20 20 20 20 20  _Insert: {.     
aed0: 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20   if( azArg==0 ) 
aee0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 75 74 66  break;.      utf
aef0: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
af00: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 25 73 22  "INSERT INTO %s"
af10: 2c 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 29 3b  ,p->zDestTable);
af20: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 73 68  .      if( p->sh
af30: 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20  owHeader ){.    
af40: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
af50: 2d 3e 6f 75 74 2c 22 28 22 29 3b 0a 20 20 20 20  ->out,"(");.    
af60: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
af70: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
af80: 20 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 72       if( i>0 ) r
af90: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
afa0: 2c 20 22 2c 22 29 3b 0a 20 20 20 20 20 20 20 20  , ",");.        
afb0: 20 20 69 66 28 20 71 75 6f 74 65 43 68 61 72 28    if( quoteChar(
afc0: 61 7a 43 6f 6c 5b 69 5d 29 20 29 7b 0a 20 20 20  azCol[i]) ){.   
afd0: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
afe0: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
aff0: 74 66 28 22 5c 22 25 77 5c 22 22 2c 20 61 7a 43  tf("\"%w\"", azC
b000: 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  ol[i]);.        
b010: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
b020: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 29  p->out, "%s", z)
b030: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
b040: 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20  lite3_free(z);. 
b050: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
b060: 20 20 20 20 20 20 20 20 20 20 20 20 72 61 77 5f              raw_
b070: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
b080: 25 73 22 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a  %s", azCol[i]);.
b090: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
b0a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61      }.        ra
b0b0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
b0c0: 22 29 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ")");.      }.  
b0d0: 20 20 20 20 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20      p->cnt++;.  
b0e0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
b0f0: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
b100: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
b110: 3e 6f 75 74 2c 20 69 3e 30 20 3f 20 22 2c 22 20  >out, i>0 ? "," 
b120: 3a 20 22 20 56 41 4c 55 45 53 28 22 29 3b 0a 20  : " VALUES(");. 
b130: 20 20 20 20 20 20 20 69 66 28 20 28 61 7a 41 72         if( (azAr
b140: 67 5b 69 5d 3d 3d 30 29 20 7c 7c 20 28 61 69 54  g[i]==0) || (aiT
b150: 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d  ype && aiType[i]
b160: 3d 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 29 20 29  ==SQLITE_NULL) )
b170: 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38  {.          utf8
b180: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
b190: 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 20 20 20 20  NULL");.        
b1a0: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
b1b0: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
b1c0: 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20  QLITE_TEXT ){.  
b1d0: 20 20 20 20 20 20 20 20 69 66 28 20 53 68 65 6c          if( Shel
b1e0: 6c 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c  lHasFlag(p, SHFL
b1f0: 47 5f 4e 65 77 6c 69 6e 65 73 29 20 29 7b 0a 20  G_Newlines) ){. 
b200: 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75             outpu
b210: 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67 28  t_quoted_string(
b220: 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d  p->out, azArg[i]
b230: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
b240: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
b250: 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 65 73  output_quoted_es
b260: 63 61 70 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e  caped_string(p->
b270: 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a  out, azArg[i]);.
b280: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
b290: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69      }else if( ai
b2a0: 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69  Type && aiType[i
b2b0: 5d 3d 3d 53 51 4c 49 54 45 5f 49 4e 54 45 47 45  ]==SQLITE_INTEGE
b2c0: 52 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  R ){.          u
b2d0: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
b2e0: 74 2c 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d  t,"%s", azArg[i]
b2f0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
b300: 20 69 66 28 20 61 69 54 79 70 65 20 26 26 20 61   if( aiType && a
b310: 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45  iType[i]==SQLITE
b320: 5f 46 4c 4f 41 54 20 29 7b 0a 20 20 20 20 20 20  _FLOAT ){.      
b330: 20 20 20 20 63 68 61 72 20 7a 5b 35 30 5d 3b 0a      char z[50];.
b340: 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
b350: 20 72 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c   r = sqlite3_col
b360: 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 2d 3e 70 53  umn_double(p->pS
b370: 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20  tmt, i);.       
b380: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
b390: 6e 74 66 28 35 30 2c 7a 2c 22 25 21 2e 32 30 67  ntf(50,z,"%!.20g
b3a0: 22 2c 20 72 29 3b 0a 20 20 20 20 20 20 20 20 20  ", r);.         
b3b0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
b3c0: 75 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20  ut, "%s", z);.  
b3d0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
b3e0: 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65  aiType && aiType
b3f0: 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 42 4c 4f 42  [i]==SQLITE_BLOB
b400: 20 26 26 20 70 2d 3e 70 53 74 6d 74 20 29 7b 0a   && p->pStmt ){.
b410: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
b420: 76 6f 69 64 20 2a 70 42 6c 6f 62 20 3d 20 73 71  void *pBlob = sq
b430: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
b440: 62 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b 0a  b(p->pStmt, i);.
b450: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 42            int nB
b460: 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  lob = sqlite3_co
b470: 6c 75 6d 6e 5f 62 79 74 65 73 28 70 2d 3e 70 53  lumn_bytes(p->pS
b480: 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20  tmt, i);.       
b490: 20 20 20 6f 75 74 70 75 74 5f 68 65 78 5f 62 6c     output_hex_bl
b4a0: 6f 62 28 70 2d 3e 6f 75 74 2c 20 70 42 6c 6f 62  ob(p->out, pBlob
b4b0: 2c 20 6e 42 6c 6f 62 29 3b 0a 20 20 20 20 20 20  , nBlob);.      
b4c0: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 73 4e 75    }else if( isNu
b4d0: 6d 62 65 72 28 61 7a 41 72 67 5b 69 5d 2c 20 30  mber(azArg[i], 0
b4e0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  ) ){.          u
b4f0: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
b500: 74 2c 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d  t,"%s", azArg[i]
b510: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
b520: 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c 61   if( ShellHasFla
b530: 67 28 70 2c 20 53 48 46 4c 47 5f 4e 65 77 6c 69  g(p, SHFLG_Newli
b540: 6e 65 73 29 20 29 7b 0a 20 20 20 20 20 20 20 20  nes) ){.        
b550: 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f    output_quoted_
b560: 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61  string(p->out, a
b570: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
b580: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
b590: 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64     output_quoted
b5a0: 5f 65 73 63 61 70 65 64 5f 73 74 72 69 6e 67 28  _escaped_string(
b5b0: 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d  p->out, azArg[i]
b5c0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
b5d0: 20 20 20 7d 0a 20 20 20 20 20 20 72 61 77 5f 70     }.      raw_p
b5e0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 29 3b  rintf(p->out,");
b5f0: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62 72 65 61  \n");.      brea
b600: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
b610: 65 20 4d 4f 44 45 5f 51 75 6f 74 65 3a 20 7b 0a  e MODE_Quote: {.
b620: 20 20 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d        if( azArg=
b630: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
b640: 20 20 69 66 28 20 70 2d 3e 63 6e 74 3d 3d 30 20    if( p->cnt==0 
b650: 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72  && p->showHeader
b660: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
b670: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
b680: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
b690: 20 69 3e 30 20 29 20 72 61 77 5f 70 72 69 6e 74   i>0 ) raw_print
b6a0: 66 28 70 2d 3e 6f 75 74 2c 20 22 2c 22 29 3b 0a  f(p->out, ",");.
b6b0: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
b6c0: 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70  _quoted_string(p
b6d0: 2d 3e 6f 75 74 2c 20 61 7a 43 6f 6c 5b 69 5d 29  ->out, azCol[i])
b6e0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
b6f0: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
b700: 2d 3e 6f 75 74 2c 22 5c 6e 22 29 3b 0a 20 20 20  ->out,"\n");.   
b710: 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e 63 6e     }.      p->cn
b720: 74 2b 2b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  t++;.      for(i
b730: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
b740: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3e  {.        if( i>
b750: 30 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28 70  0 ) raw_printf(p
b760: 2d 3e 6f 75 74 2c 20 22 2c 22 29 3b 0a 20 20 20  ->out, ",");.   
b770: 20 20 20 20 20 69 66 28 20 28 61 7a 41 72 67 5b       if( (azArg[
b780: 69 5d 3d 3d 30 29 20 7c 7c 20 28 61 69 54 79 70  i]==0) || (aiTyp
b790: 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d  e && aiType[i]==
b7a0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a  SQLITE_NULL) ){.
b7b0: 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
b7c0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 4e 55  rintf(p->out,"NU
b7d0: 4c 4c 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  LL");.        }e
b7e0: 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26  lse if( aiType &
b7f0: 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c  & aiType[i]==SQL
b800: 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  ITE_TEXT ){.    
b810: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f        output_quo
b820: 74 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75  ted_string(p->ou
b830: 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20  t, azArg[i]);.  
b840: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
b850: 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65  aiType && aiType
b860: 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 49 4e 54 45  [i]==SQLITE_INTE
b870: 47 45 52 20 29 7b 0a 20 20 20 20 20 20 20 20 20  GER ){.         
b880: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
b890: 6f 75 74 2c 22 25 73 22 2c 20 61 7a 41 72 67 5b  out,"%s", azArg[
b8a0: 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  i]);.        }el
b8b0: 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26 26  se if( aiType &&
b8c0: 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49   aiType[i]==SQLI
b8d0: 54 45 5f 46 4c 4f 41 54 20 29 7b 0a 20 20 20 20  TE_FLOAT ){.    
b8e0: 20 20 20 20 20 20 63 68 61 72 20 7a 5b 35 30 5d        char z[50]
b8f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 64 6f 75 62  ;.          doub
b900: 6c 65 20 72 20 3d 20 73 71 6c 69 74 65 33 5f 63  le r = sqlite3_c
b910: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 2d 3e  olumn_double(p->
b920: 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20  pStmt, i);.     
b930: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
b940: 72 69 6e 74 66 28 35 30 2c 7a 2c 22 25 21 2e 32  rintf(50,z,"%!.2
b950: 30 67 22 2c 20 72 29 3b 0a 20 20 20 20 20 20 20  0g", r);.       
b960: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
b970: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a  >out, "%s", z);.
b980: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
b990: 28 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79  ( aiType && aiTy
b9a0: 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 42 4c  pe[i]==SQLITE_BL
b9b0: 4f 42 20 26 26 20 70 2d 3e 70 53 74 6d 74 20 29  OB && p->pStmt )
b9c0: 7b 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73  {.          cons
b9d0: 74 20 76 6f 69 64 20 2a 70 42 6c 6f 62 20 3d 20  t void *pBlob = 
b9e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
b9f0: 6c 6f 62 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29  lob(p->pStmt, i)
ba00: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ;.          int 
ba10: 6e 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  nBlob = sqlite3_
ba20: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 2d 3e  column_bytes(p->
ba30: 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20  pStmt, i);.     
ba40: 20 20 20 20 20 6f 75 74 70 75 74 5f 68 65 78 5f       output_hex_
ba50: 62 6c 6f 62 28 70 2d 3e 6f 75 74 2c 20 70 42 6c  blob(p->out, pBl
ba60: 6f 62 2c 20 6e 42 6c 6f 62 29 3b 0a 20 20 20 20  ob, nBlob);.    
ba70: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 69 73      }else if( is
ba80: 4e 75 6d 62 65 72 28 61 7a 41 72 67 5b 69 5d 2c  Number(azArg[i],
ba90: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20   0) ){.         
baa0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
bab0: 6f 75 74 2c 22 25 73 22 2c 20 61 7a 41 72 67 5b  out,"%s", azArg[
bac0: 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  i]);.        }el
bad0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75  se{.          ou
bae0: 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69  tput_quoted_stri
baf0: 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67  ng(p->out, azArg
bb00: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  [i]);.        }.
bb10: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 61        }.      ra
bb20: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
bb30: 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62 72 65  "\n");.      bre
bb40: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
bb50: 73 65 20 4d 4f 44 45 5f 41 73 63 69 69 3a 20 7b  se MODE_Ascii: {
bb60: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e  .      if( p->cn
bb70: 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f  t++==0 && p->sho
bb80: 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20  wHeader ){.     
bb90: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
bba0: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
bbb0: 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 75 74      if( i>0 ) ut
bbc0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
bbd0: 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65  , "%s", p->colSe
bbe0: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
bbf0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
bc00: 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 61 7a 43 6f  p->out,"%s",azCo
bc10: 6c 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20  l[i] ? azCol[i] 
bc20: 3a 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 7d  : "");.        }
bc30: 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
bc40: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
bc50: 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  ", p->rowSeparat
bc60: 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
bc70: 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20     if( azArg==0 
bc80: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66  ) break;.      f
bc90: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
bca0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66  i++){.        if
bcb0: 28 20 69 3e 30 20 29 20 75 74 66 38 5f 70 72 69  ( i>0 ) utf8_pri
bcc0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
bcd0: 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
bce0: 72 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  r);.        utf8
bcf0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
bd00: 25 73 22 2c 61 7a 41 72 67 5b 69 5d 20 3f 20 61  %s",azArg[i] ? a
bd10: 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c  zArg[i] : p->nul
bd20: 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 7d  lValue);.      }
bd30: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
bd40: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
bd50: 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72   p->rowSeparator
bd60: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
bd70: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
bd80: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  rn 0;.}../*.** T
bd90: 68 69 73 20 69 73 20 74 68 65 20 63 61 6c 6c 62  his is the callb
bda0: 61 63 6b 20 72 6f 75 74 69 6e 65 20 74 68 61 74  ack routine that
bdb0: 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
bdc0: 61 72 79 0a 2a 2a 20 69 6e 76 6f 6b 65 73 20 66  ary.** invokes f
bdd0: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 61  or each row of a
bde0: 20 71 75 65 72 79 20 72 65 73 75 6c 74 2e 0a 2a   query result..*
bdf0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 6c  /.static int cal
be00: 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72 67  lback(void *pArg
be10: 2c 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61 72  , int nArg, char
be20: 20 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72 20 2a   **azArg, char *
be30: 2a 61 7a 43 6f 6c 29 7b 0a 20 20 2f 2a 20 73 69  *azCol){.  /* si
be40: 6e 63 65 20 77 65 20 64 6f 6e 27 74 20 68 61 76  nce we don't hav
be50: 65 20 74 79 70 65 20 69 6e 66 6f 2c 20 63 61 6c  e type info, cal
be60: 6c 20 74 68 65 20 73 68 65 6c 6c 5f 63 61 6c 6c  l the shell_call
be70: 62 61 63 6b 20 77 69 74 68 20 61 20 4e 55 4c 4c  back with a NULL
be80: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 72 65 74 75   value */.  retu
be90: 72 6e 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63  rn shell_callbac
bea0: 6b 28 70 41 72 67 2c 20 6e 41 72 67 2c 20 61 7a  k(pArg, nArg, az
beb0: 41 72 67 2c 20 61 7a 43 6f 6c 2c 20 4e 55 4c 4c  Arg, azCol, NULL
bec0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  );.}../*.** This
bed0: 20 69 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   is the callback
bee0: 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 73 71   routine from sq
bef0: 6c 69 74 65 33 5f 65 78 65 63 28 29 20 74 68 61  lite3_exec() tha
bf00: 74 20 61 70 70 65 6e 64 73 20 61 6c 6c 0a 2a 2a  t appends all.**
bf10: 20 6f 75 74 70 75 74 20 6f 6e 74 6f 20 74 68 65   output onto the
bf20: 20 65 6e 64 20 6f 66 20 61 20 53 68 65 6c 6c 54   end of a ShellT
bf30: 65 78 74 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73  ext object..*/.s
bf40: 74 61 74 69 63 20 69 6e 74 20 63 61 70 74 75 72  tatic int captur
bf50: 65 4f 75 74 70 75 74 43 61 6c 6c 62 61 63 6b 28  eOutputCallback(
bf60: 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
bf70: 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41  nArg, char **azA
bf80: 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 29 7b 0a  rg, char **az){.
bf90: 20 20 53 68 65 6c 6c 54 65 78 74 20 2a 70 20 3d    ShellText *p =
bfa0: 20 28 53 68 65 6c 6c 54 65 78 74 2a 29 70 41 72   (ShellText*)pAr
bfb0: 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 55 4e  g;.  int i;.  UN
bfc0: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61  USED_PARAMETER(a
bfd0: 7a 29 3b 0a 20 20 69 66 28 20 61 7a 41 72 67 3d  z);.  if( azArg=
bfe0: 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
bff0: 20 69 66 28 20 70 2d 3e 6e 20 29 20 61 70 70 65   if( p->n ) appe
c000: 6e 64 54 65 78 74 28 70 2c 20 22 7c 22 2c 20 30  ndText(p, "|", 0
c010: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
c020: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
c030: 69 66 28 20 69 20 29 20 61 70 70 65 6e 64 54 65  if( i ) appendTe
c040: 78 74 28 70 2c 20 22 2c 22 2c 20 30 29 3b 0a 20  xt(p, ",", 0);. 
c050: 20 20 20 69 66 28 20 61 7a 41 72 67 5b 69 5d 20     if( azArg[i] 
c060: 29 20 61 70 70 65 6e 64 54 65 78 74 28 70 2c 20  ) appendText(p, 
c070: 61 7a 41 72 67 5b 69 5d 2c 20 30 29 3b 0a 20 20  azArg[i], 0);.  
c080: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
c090: 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20  ./*.** Generate 
c0a0: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 53  an appropriate S
c0b0: 45 4c 46 54 45 53 54 20 74 61 62 6c 65 20 69 6e  ELFTEST table in
c0c0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
c0d0: 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  se..*/.static vo
c0e0: 69 64 20 63 72 65 61 74 65 53 65 6c 66 74 65 73  id createSelftes
c0f0: 74 54 61 62 6c 65 28 53 68 65 6c 6c 53 74 61 74  tTable(ShellStat
c100: 65 20 2a 70 29 7b 0a 20 20 63 68 61 72 20 2a 7a  e *p){.  char *z
c110: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 73 71  ErrMsg = 0;.  sq
c120: 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
c130: 2c 0a 20 20 20 20 22 53 41 56 45 50 4f 49 4e 54  ,.    "SAVEPOINT
c140: 20 73 65 6c 66 74 65 73 74 5f 69 6e 69 74 3b 5c   selftest_init;\
c150: 6e 22 0a 20 20 20 20 22 43 52 45 41 54 45 20 54  n".    "CREATE T
c160: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53  ABLE IF NOT EXIS
c170: 54 53 20 73 65 6c 66 74 65 73 74 28 5c 6e 22 0a  TS selftest(\n".
c180: 20 20 20 20 22 20 20 74 6e 6f 20 49 4e 54 45 47      "  tno INTEG
c190: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 5c  ER PRIMARY KEY,\
c1a0: 6e 22 20 20 20 2f 2a 20 54 65 73 74 20 6e 75 6d  n"   /* Test num
c1b0: 62 65 72 20 2a 2f 0a 20 20 20 20 22 20 20 6f 70  ber */.    "  op
c1c0: 20 54 45 58 54 2c 5c 6e 22 20 20 20 20 20 20 20   TEXT,\n"       
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
c1e0: 70 65 72 61 74 6f 72 3a 20 20 6d 65 6d 6f 20 72  perator:  memo r
c1f0: 75 6e 20 2a 2f 0a 20 20 20 20 22 20 20 63 6d 64  un */.    "  cmd
c200: 20 54 45 58 54 2c 5c 6e 22 20 20 20 20 20 20 20   TEXT,\n"       
c210: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
c220: 6d 6d 61 6e 64 20 74 65 78 74 20 2a 2f 0a 20 20  mmand text */.  
c230: 20 20 22 20 20 61 6e 73 20 54 45 58 54 5c 6e 22    "  ans TEXT\n"
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c250: 20 20 20 2f 2a 20 44 65 73 69 72 65 64 20 61 6e     /* Desired an
c260: 73 77 65 72 20 2a 2f 0a 20 20 20 20 22 29 3b 22  swer */.    ");"
c270: 0a 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d  .    "CREATE TEM
c280: 50 20 54 41 42 4c 45 20 5b 5f 73 68 65 6c 6c 24  P TABLE [_shell$
c290: 73 65 6c 66 5d 28 6f 70 2c 63 6d 64 2c 61 6e 73  self](op,cmd,ans
c2a0: 29 3b 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45 52  );\n".    "INSER
c2b0: 54 20 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24 73  T INTO [_shell$s
c2c0: 65 6c 66 5d 28 72 6f 77 69 64 2c 6f 70 2c 63 6d  elf](rowid,op,cm
c2d0: 64 29 5c 6e 22 0a 20 20 20 20 22 20 20 56 41 4c  d)\n".    "  VAL
c2e0: 55 45 53 28 63 6f 61 6c 65 73 63 65 28 28 53 45  UES(coalesce((SE
c2f0: 4c 45 43 54 20 28 6d 61 78 28 74 6e 6f 29 2b 31  LECT (max(tno)+1
c300: 30 30 29 2f 31 30 20 46 52 4f 4d 20 73 65 6c 66  00)/10 FROM self
c310: 74 65 73 74 29 2c 31 30 29 2c 5c 6e 22 0a 20 20  test),10),\n".  
c320: 20 20 22 20 20 20 20 20 20 20 20 20 27 6d 65 6d    "         'mem
c330: 6f 27 2c 27 54 65 73 74 73 20 67 65 6e 65 72 61  o','Tests genera
c340: 74 65 64 20 62 79 20 2d 2d 69 6e 69 74 27 29 3b  ted by --init');
c350: 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20  \n".    "INSERT 
c360: 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c  INTO [_shell$sel
c370: 66 5d 5c 6e 22 0a 20 20 20 20 22 20 20 53 45 4c  f]\n".    "  SEL
c380: 45 43 54 20 27 72 75 6e 27 2c 5c 6e 22 0a 20 20  ECT 'run',\n".  
c390: 20 20 22 20 20 20 20 27 53 45 4c 45 43 54 20 68    "    'SELECT h
c3a0: 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 27 27  ex(sha3_query(''
c3b0: 53 45 4c 45 43 54 20 74 79 70 65 2c 6e 61 6d 65  SELECT type,name
c3c0: 2c 74 62 6c 5f 6e 61 6d 65 2c 73 71 6c 20 22 0a  ,tbl_name,sql ".
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3f0: 20 22 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61   "FROM sqlite_ma
c400: 73 74 65 72 20 4f 52 44 45 52 20 42 59 20 32 27  ster ORDER BY 2'
c410: 27 2c 32 32 34 29 29 27 2c 5c 6e 22 0a 20 20 20  ',224))',\n".   
c420: 20 22 20 20 20 20 68 65 78 28 73 68 61 33 5f 71   "    hex(sha3_q
c430: 75 65 72 79 28 27 53 45 4c 45 43 54 20 74 79 70  uery('SELECT typ
c440: 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c  e,name,tbl_name,
c450: 73 71 6c 20 22 0a 20 20 20 20 20 20 20 20 20 20  sql ".          
c460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c470: 22 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73  "FROM sqlite_mas
c480: 74 65 72 20 4f 52 44 45 52 20 42 59 20 32 27 2c  ter ORDER BY 2',
c490: 32 32 34 29 29 3b 5c 6e 22 0a 20 20 20 20 22 49  224));\n".    "I
c4a0: 4e 53 45 52 54 20 49 4e 54 4f 20 5b 5f 73 68 65  NSERT INTO [_she
c4b0: 6c 6c 24 73 65 6c 66 5d 5c 6e 22 0a 20 20 20 20  ll$self]\n".    
c4c0: 22 20 20 53 45 4c 45 43 54 20 27 72 75 6e 27 2c  "  SELECT 'run',
c4d0: 22 0a 20 20 20 20 22 20 20 20 20 27 53 45 4c 45  ".    "    'SELE
c4e0: 43 54 20 68 65 78 28 73 68 61 33 5f 71 75 65 72  CT hex(sha3_quer
c4f0: 79 28 27 27 53 45 4c 45 43 54 20 2a 20 46 52 4f  y(''SELECT * FRO
c500: 4d 20 5c 22 27 20 7c 7c 22 0a 20 20 20 20 22 20  M \"' ||".    " 
c510: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 27 25         printf('%
c520: 77 27 2c 6e 61 6d 65 29 20 7c 7c 20 27 5c 22 20  w',name) || '\" 
c530: 4e 4f 54 20 49 4e 44 45 58 45 44 27 27 2c 32 32  NOT INDEXED'',22
c540: 34 29 29 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20  4))',\n".    "  
c550: 20 20 68 65 78 28 73 68 61 33 5f 71 75 65 72 79    hex(sha3_query
c560: 28 70 72 69 6e 74 66 28 27 53 45 4c 45 43 54 20  (printf('SELECT 
c570: 2a 20 46 52 4f 4d 20 5c 22 25 77 5c 22 20 4e 4f  * FROM \"%w\" NO
c580: 54 20 49 4e 44 45 58 45 44 27 2c 6e 61 6d 65 29  T INDEXED',name)
c590: 2c 32 32 34 29 29 5c 6e 22 0a 20 20 20 20 22 20  ,224))\n".    " 
c5a0: 20 46 52 4f 4d 20 28 5c 6e 22 0a 20 20 20 20 22   FROM (\n".    "
c5b0: 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
c5c0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
c5d0: 65 72 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20  er\n".    "     
c5e0: 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c  WHERE type='tabl
c5f0: 65 27 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20  e'\n".    "     
c600: 20 20 41 4e 44 20 6e 61 6d 65 3c 3e 27 73 65 6c    AND name<>'sel
c610: 66 74 65 73 74 27 5c 6e 22 0a 20 20 20 20 22 20  ftest'\n".    " 
c620: 20 20 20 20 20 20 41 4e 44 20 63 6f 61 6c 65 73        AND coales
c630: 63 65 28 72 6f 6f 74 70 61 67 65 2c 30 29 3e 30  ce(rootpage,0)>0
c640: 5c 6e 22 0a 20 20 20 20 22 20 20 29 5c 6e 22 0a  \n".    "  )\n".
c650: 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 6e      " ORDER BY n
c660: 61 6d 65 3b 5c 6e 22 0a 20 20 20 20 22 49 4e 53  ame;\n".    "INS
c670: 45 52 54 20 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c  ERT INTO [_shell
c680: 24 73 65 6c 66 5d 5c 6e 22 0a 20 20 20 20 22 20  $self]\n".    " 
c690: 20 56 41 4c 55 45 53 28 27 72 75 6e 27 2c 27 50   VALUES('run','P
c6a0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
c6b0: 63 68 65 63 6b 27 2c 27 6f 6b 27 29 3b 5c 6e 22  check','ok');\n"
c6c0: 0a 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  .    "INSERT INT
c6d0: 4f 20 73 65 6c 66 74 65 73 74 28 74 6e 6f 2c 6f  O selftest(tno,o
c6e0: 70 2c 63 6d 64 2c 61 6e 73 29 22 0a 20 20 20 20  p,cmd,ans)".    
c6f0: 22 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2a  "  SELECT rowid*
c700: 31 30 2c 6f 70 2c 63 6d 64 2c 61 6e 73 20 46 52  10,op,cmd,ans FR
c710: 4f 4d 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d  OM [_shell$self]
c720: 3b 5c 6e 22 0a 20 20 20 20 22 44 52 4f 50 20 54  ;\n".    "DROP T
c730: 41 42 4c 45 20 5b 5f 73 68 65 6c 6c 24 73 65 6c  ABLE [_shell$sel
c740: 66 5d 3b 22 0a 20 20 20 20 2c 30 2c 30 2c 26 7a  f];".    ,0,0,&z
c750: 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20 7a  ErrMsg);.  if( z
c760: 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 75 74  ErrMsg ){.    ut
c770: 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
c780: 2c 20 22 53 45 4c 46 54 45 53 54 20 69 6e 69 74  , "SELFTEST init
c790: 69 61 6c 69 7a 61 74 69 6f 6e 20 66 61 69 6c 75  ialization failu
c7a0: 72 65 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d  re: %s\n", zErrM
c7b0: 73 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  sg);.    sqlite3
c7c0: 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  _free(zErrMsg);.
c7d0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 65 78    }.  sqlite3_ex
c7e0: 65 63 28 70 2d 3e 64 62 2c 20 22 52 45 4c 45 41  ec(p->db, "RELEA
c7f0: 53 45 20 73 65 6c 66 74 65 73 74 5f 69 6e 69 74  SE selftest_init
c800: 22 2c 30 2c 30 2c 30 29 3b 0a 7d 0a 0a 0a 2f 2a  ",0,0,0);.}.../*
c810: 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 65 73 74  .** Set the dest
c820: 69 6e 61 74 69 6f 6e 20 74 61 62 6c 65 20 66 69  ination table fi
c830: 65 6c 64 20 6f 66 20 74 68 65 20 53 68 65 6c 6c  eld of the Shell
c840: 53 74 61 74 65 20 73 74 72 75 63 74 75 72 65 20  State structure 
c850: 74 6f 0a 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f  to.** the name o
c860: 66 20 74 68 65 20 74 61 62 6c 65 20 67 69 76 65  f the table give
c870: 6e 2e 20 20 45 73 63 61 70 65 20 61 6e 79 20 71  n.  Escape any q
c880: 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 73 20  uote characters 
c890: 69 6e 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20  in the.** table 
c8a0: 6e 61 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  name..*/.static 
c8b0: 76 6f 69 64 20 73 65 74 5f 74 61 62 6c 65 5f 6e  void set_table_n
c8c0: 61 6d 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  ame(ShellState *
c8d0: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
c8e0: 4e 61 6d 65 29 7b 0a 20 20 69 6e 74 20 69 2c 20  Name){.  int i, 
c8f0: 6e 3b 0a 20 20 63 68 61 72 20 63 51 75 6f 74 65  n;.  char cQuote
c900: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20  ;.  char *z;..  
c910: 69 66 28 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c  if( p->zDestTabl
c920: 65 20 29 7b 0a 20 20 20 20 66 72 65 65 28 70 2d  e ){.    free(p-
c930: 3e 7a 44 65 73 74 54 61 62 6c 65 29 3b 0a 20 20  >zDestTable);.  
c940: 20 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20    p->zDestTable 
c950: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a  = 0;.  }.  if( z
c960: 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74 75 72 6e  Name==0 ) return
c970: 3b 0a 20 20 63 51 75 6f 74 65 20 3d 20 71 75 6f  ;.  cQuote = quo
c980: 74 65 43 68 61 72 28 7a 4e 61 6d 65 29 3b 0a 20  teChar(zName);. 
c990: 20 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 4e   n = strlen30(zN
c9a0: 61 6d 65 29 3b 0a 20 20 69 66 28 20 63 51 75 6f  ame);.  if( cQuo
c9b0: 74 65 20 29 20 6e 20 2b 3d 20 6e 2b 32 3b 0a 20  te ) n += n+2;. 
c9c0: 20 7a 20 3d 20 70 2d 3e 7a 44 65 73 74 54 61 62   z = p->zDestTab
c9d0: 6c 65 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 2b 31  le = malloc( n+1
c9e0: 20 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29   );.  if( z==0 )
c9f0: 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
ca00: 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
ca10: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22  out of memory\n"
ca20: 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a  );.    exit(1);.
ca30: 20 20 7d 0a 20 20 6e 20 3d 20 30 3b 0a 20 20 69    }.  n = 0;.  i
ca40: 66 28 20 63 51 75 6f 74 65 20 29 20 7a 5b 6e 2b  f( cQuote ) z[n+
ca50: 2b 5d 20 3d 20 63 51 75 6f 74 65 3b 0a 20 20 66  +] = cQuote;.  f
ca60: 6f 72 28 69 3d 30 3b 20 7a 4e 61 6d 65 5b 69 5d  or(i=0; zName[i]
ca70: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 7a 5b 6e 2b  ; i++){.    z[n+
ca80: 2b 5d 20 3d 20 7a 4e 61 6d 65 5b 69 5d 3b 0a 20  +] = zName[i];. 
ca90: 20 20 20 69 66 28 20 7a 4e 61 6d 65 5b 69 5d 3d     if( zName[i]=
caa0: 3d 63 51 75 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d  =cQuote ) z[n++]
cab0: 20 3d 20 63 51 75 6f 74 65 3b 0a 20 20 7d 0a 20   = cQuote;.  }. 
cac0: 20 69 66 28 20 63 51 75 6f 74 65 20 29 20 7a 5b   if( cQuote ) z[
cad0: 6e 2b 2b 5d 20 3d 20 63 51 75 6f 74 65 3b 0a 20  n++] = cQuote;. 
cae0: 20 7a 5b 6e 5d 20 3d 20 30 3b 0a 7d 0a 0a 0a 2f   z[n] = 0;.}.../
caf0: 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 20 71  *.** Execute a q
cb00: 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 20 74  uery statement t
cb10: 68 61 74 20 77 69 6c 6c 20 67 65 6e 65 72 61 74  hat will generat
cb20: 65 20 53 51 4c 20 6f 75 74 70 75 74 2e 20 20 50  e SQL output.  P
cb30: 72 69 6e 74 0a 2a 2a 20 74 68 65 20 72 65 73 75  rint.** the resu
cb40: 6c 74 20 63 6f 6c 75 6d 6e 73 2c 20 63 6f 6d 6d  lt columns, comm
cb50: 61 2d 73 65 70 61 72 61 74 65 64 2c 20 6f 6e 20  a-separated, on 
cb60: 61 20 6c 69 6e 65 20 61 6e 64 20 74 68 65 6e 20  a line and then 
cb70: 61 64 64 20 61 0a 2a 2a 20 73 65 6d 69 63 6f 6c  add a.** semicol
cb80: 6f 6e 20 74 65 72 6d 69 6e 61 74 6f 72 20 74 6f  on terminator to
cb90: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 61 74   the end of that
cba0: 20 6c 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   line..**.** If 
cbb0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
cbc0: 6c 75 6d 6e 73 20 69 73 20 31 20 61 6e 64 20 74  lumns is 1 and t
cbd0: 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  hat column conta
cbe0: 69 6e 73 20 74 65 78 74 20 22 2d 2d 22 0a 2a 2a  ins text "--".**
cbf0: 20 74 68 65 6e 20 77 72 69 74 65 20 74 68 65 20   then write the 
cc00: 73 65 6d 69 63 6f 6c 6f 6e 20 6f 6e 20 61 20 73  semicolon on a s
cc10: 65 70 61 72 61 74 65 20 6c 69 6e 65 2e 20 20 54  eparate line.  T
cc20: 68 61 74 20 77 61 79 2c 20 69 66 20 61 0a 2a 2a  hat way, if a.**
cc30: 20 22 2d 2d 22 20 63 6f 6d 6d 65 6e 74 20 6f 63   "--" comment oc
cc40: 63 75 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  curs at the end 
cc50: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
cc60: 2c 20 74 68 65 20 63 6f 6d 6d 65 6e 74 0a 2a 2a  , the comment.**
cc70: 20 77 6f 6e 27 74 20 63 6f 6e 73 75 6d 65 20 74   won't consume t
cc80: 68 65 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 65 72  he semicolon ter
cc90: 6d 69 6e 61 74 6f 72 2e 0a 2a 2f 0a 73 74 61 74  minator..*/.stat
cca0: 69 63 20 69 6e 74 20 72 75 6e 5f 74 61 62 6c 65  ic int run_table
ccb0: 5f 64 75 6d 70 5f 71 75 65 72 79 28 0a 20 20 53  _dump_query(.  S
ccc0: 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 20 20  hellState *p,   
ccd0: 20 20 20 20 20 20 20 20 2f 2a 20 51 75 65 72 79          /* Query
cce0: 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 6f   context */.  co
ccf0: 6e 73 74 20 63 68 61 72 20 2a 7a 53 65 6c 65 63  nst char *zSelec
cd00: 74 2c 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t,     /* SELECT
cd10: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78   statement to ex
cd20: 74 72 61 63 74 20 63 6f 6e 74 65 6e 74 20 2a 2f  tract content */
cd30: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
cd40: 46 69 72 73 74 52 6f 77 20 20 20 20 2f 2a 20 50  FirstRow    /* P
cd50: 72 69 6e 74 20 62 65 66 6f 72 65 20 66 69 72 73  rint before firs
cd60: 74 20 72 6f 77 2c 20 69 66 20 6e 6f 74 20 4e 55  t row, if not NU
cd70: 4c 4c 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  LL */.){.  sqlit
cd80: 65 33 5f 73 74 6d 74 20 2a 70 53 65 6c 65 63 74  e3_stmt *pSelect
cd90: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e  ;.  int rc;.  in
cda0: 74 20 6e 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74  t nResult;.  int
cdb0: 20 69 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   i;.  const char
cdc0: 20 2a 7a 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   *z;.  rc = sqli
cdd0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
cde0: 2d 3e 64 62 2c 20 7a 53 65 6c 65 63 74 2c 20 2d  ->db, zSelect, -
cdf0: 31 2c 20 26 70 53 65 6c 65 63 74 2c 20 30 29 3b  1, &pSelect, 0);
ce00: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
ce10: 45 5f 4f 4b 20 7c 7c 20 21 70 53 65 6c 65 63 74  E_OK || !pSelect
ce20: 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
ce30: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a  ntf(p->out, "/**
ce40: 2a 2a 20 45 52 52 4f 52 3a 20 28 25 64 29 20 25  ** ERROR: (%d) %
ce50: 73 20 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 72 63 2c  s *****/\n", rc,
ce60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ce70: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
ce80: 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 69 66 28  p->db));.    if(
ce90: 20 28 72 63 26 30 78 66 66 29 21 3d 53 51 4c 49   (rc&0xff)!=SQLI
cea0: 54 45 5f 43 4f 52 52 55 50 54 20 29 20 70 2d 3e  TE_CORRUPT ) p->
ceb0: 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 72 65 74 75  nErr++;.    retu
cec0: 72 6e 20 72 63 3b 0a 20 20 7d 0a 20 20 72 63 20  rn rc;.  }.  rc 
ced0: 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
cee0: 53 65 6c 65 63 74 29 3b 0a 20 20 6e 52 65 73 75  Select);.  nResu
cef0: 6c 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  lt = sqlite3_col
cf00: 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 65 6c 65 63  umn_count(pSelec
cf10: 74 29 3b 0a 20 20 77 68 69 6c 65 28 20 72 63 3d  t);.  while( rc=
cf20: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20  =SQLITE_ROW ){. 
cf30: 20 20 20 69 66 28 20 7a 46 69 72 73 74 52 6f 77     if( zFirstRow
cf40: 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
cf50: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
cf60: 73 22 2c 20 7a 46 69 72 73 74 52 6f 77 29 3b 0a  s", zFirstRow);.
cf70: 20 20 20 20 20 20 7a 46 69 72 73 74 52 6f 77 20        zFirstRow 
cf80: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a  = 0;.    }.    z
cf90: 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
cfa0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
cfb0: 65 78 74 28 70 53 65 6c 65 63 74 2c 20 30 29 3b  ext(pSelect, 0);
cfc0: 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
cfd0: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a  (p->out, "%s", z
cfe0: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20  );.    for(i=1; 
cff0: 69 3c 6e 52 65 73 75 6c 74 3b 20 69 2b 2b 29 7b  i<nResult; i++){
d000: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
d010: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2c 25 73 22  tf(p->out, ",%s"
d020: 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  , sqlite3_column
d030: 5f 74 65 78 74 28 70 53 65 6c 65 63 74 2c 20 69  _text(pSelect, i
d040: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ));.    }.    if
d050: 28 20 7a 3d 3d 30 20 29 20 7a 20 3d 20 22 22 3b  ( z==0 ) z = "";
d060: 0a 20 20 20 20 77 68 69 6c 65 28 20 7a 5b 30 5d  .    while( z[0]
d070: 20 26 26 20 28 7a 5b 30 5d 21 3d 27 2d 27 20 7c   && (z[0]!='-' |
d080: 7c 20 7a 5b 31 5d 21 3d 27 2d 27 29 20 29 20 7a  | z[1]!='-') ) z
d090: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d  ++;.    if( z[0]
d0a0: 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
d0b0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
d0c0: 3b 5c 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ;\n");.    }else
d0d0: 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
d0e0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 3b 5c 6e 22  tf(p->out, ";\n"
d0f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  );.    }.    rc 
d100: 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
d110: 53 65 6c 65 63 74 29 3b 0a 20 20 7d 0a 20 20 72  Select);.  }.  r
d120: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  c = sqlite3_fina
d130: 6c 69 7a 65 28 70 53 65 6c 65 63 74 29 3b 0a 20  lize(pSelect);. 
d140: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
d150: 4f 4b 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  OK ){.    utf8_p
d160: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f  rintf(p->out, "/
d170: 2a 2a 2a 2a 20 45 52 52 4f 52 3a 20 28 25 64 29  **** ERROR: (%d)
d180: 20 25 73 20 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 72   %s *****/\n", r
d190: 63 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  c,.             
d1a0: 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
d1b0: 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 69  g(p->db));.    i
d1c0: 66 28 20 28 72 63 26 30 78 66 66 29 21 3d 53 51  f( (rc&0xff)!=SQ
d1d0: 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 29 20 70  LITE_CORRUPT ) p
d1e0: 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ->nErr++;.  }.  
d1f0: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
d200: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 73 70 61  .** Allocate spa
d210: 63 65 20 61 6e 64 20 73 61 76 65 20 6f 66 66 20  ce and save off 
d220: 63 75 72 72 65 6e 74 20 65 72 72 6f 72 20 73 74  current error st
d230: 72 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ring..*/.static 
d240: 63 68 61 72 20 2a 73 61 76 65 5f 65 72 72 5f 6d  char *save_err_m
d250: 73 67 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  sg(.  sqlite3 *d
d260: 62 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b            /* 
d270: 44 61 74 61 62 61 73 65 20 74 6f 20 71 75 65 72  Database to quer
d280: 79 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6e 45  y */.){.  int nE
d290: 72 72 4d 73 67 20 3d 20 31 2b 73 74 72 6c 65 6e  rrMsg = 1+strlen
d2a0: 33 30 28 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  30(sqlite3_errms
d2b0: 67 28 64 62 29 29 3b 0a 20 20 63 68 61 72 20 2a  g(db));.  char *
d2c0: 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
d2d0: 33 5f 6d 61 6c 6c 6f 63 36 34 28 6e 45 72 72 4d  3_malloc64(nErrM
d2e0: 73 67 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 4d  sg);.  if( zErrM
d2f0: 73 67 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  sg ){.    memcpy
d300: 28 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69 74 65  (zErrMsg, sqlite
d310: 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 6e 45  3_errmsg(db), nE
d320: 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 65  rrMsg);.  }.  re
d330: 74 75 72 6e 20 7a 45 72 72 4d 73 67 3b 0a 7d 0a  turn zErrMsg;.}.
d340: 0a 23 69 66 64 65 66 20 5f 5f 6c 69 6e 75 78 5f  .#ifdef __linux_
d350: 5f 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20  _./*.** Attempt 
d360: 74 6f 20 64 69 73 70 6c 61 79 20 49 2f 4f 20 73  to display I/O s
d370: 74 61 74 73 20 6f 6e 20 4c 69 6e 75 78 20 75 73  tats on Linux us
d380: 69 6e 67 20 2f 70 72 6f 63 2f 50 49 44 2f 69 6f  ing /proc/PID/io
d390: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
d3a0: 64 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74  displayLinuxIoSt
d3b0: 61 74 73 28 46 49 4c 45 20 2a 6f 75 74 29 7b 0a  ats(FILE *out){.
d3c0: 20 20 46 49 4c 45 20 2a 69 6e 3b 0a 20 20 63 68    FILE *in;.  ch
d3d0: 61 72 20 7a 5b 32 30 30 5d 3b 0a 20 20 73 71 6c  ar z[200];.  sql
d3e0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
d3f0: 7a 65 6f 66 28 7a 29 2c 20 7a 2c 20 22 2f 70 72  zeof(z), z, "/pr
d400: 6f 63 2f 25 64 2f 69 6f 22 2c 20 67 65 74 70 69  oc/%d/io", getpi
d410: 64 28 29 29 3b 0a 20 20 69 6e 20 3d 20 66 6f 70  d());.  in = fop
d420: 65 6e 28 7a 2c 20 22 72 62 22 29 3b 0a 20 20 69  en(z, "rb");.  i
d430: 66 28 20 69 6e 3d 3d 30 20 29 20 72 65 74 75 72  f( in==0 ) retur
d440: 6e 3b 0a 20 20 77 68 69 6c 65 28 20 66 67 65 74  n;.  while( fget
d450: 73 28 7a 2c 20 73 69 7a 65 6f 66 28 7a 29 2c 20  s(z, sizeof(z), 
d460: 69 6e 29 21 3d 30 20 29 7b 0a 20 20 20 20 73 74  in)!=0 ){.    st
d470: 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
d480: 74 20 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  t {.      const 
d490: 63 68 61 72 20 2a 7a 50 61 74 74 65 72 6e 3b 0a  char *zPattern;.
d4a0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
d4b0: 20 2a 7a 44 65 73 63 3b 0a 20 20 20 20 7d 20 61   *zDesc;.    } a
d4c0: 54 72 61 6e 73 5b 5d 20 3d 20 7b 0a 20 20 20 20  Trans[] = {.    
d4d0: 20 20 7b 20 22 72 63 68 61 72 3a 20 22 2c 20 20    { "rchar: ",  
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 22 42 79 74 65 73 20 72 65 63 65 69 76 65 64 20  "Bytes received 
d500: 62 79 20 72 65 61 64 28 29 3a 22 20 7d 2c 0a 20  by read():" },. 
d510: 20 20 20 20 20 7b 20 22 77 63 68 61 72 3a 20 22       { "wchar: "
d520: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
d530: 20 20 20 22 42 79 74 65 73 20 73 65 6e 74 20 74     "Bytes sent t
d540: 6f 20 77 72 69 74 65 28 29 3a 22 20 20 20 20 7d  o write():"    }
d550: 2c 0a 20 20 20 20 20 20 7b 20 22 73 79 73 63 72  ,.      { "syscr
d560: 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  : ",            
d570: 20 20 20 20 20 20 22 52 65 61 64 28 29 20 73 79        "Read() sy
d580: 73 74 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20  stem calls:"    
d590: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73 79    },.      { "sy
d5a0: 73 63 77 3a 20 22 2c 20 20 20 20 20 20 20 20 20  scw: ",         
d5b0: 20 20 20 20 20 20 20 20 20 22 57 72 69 74 65 28           "Write(
d5c0: 29 20 73 79 73 74 65 6d 20 63 61 6c 6c 73 3a 22  ) system calls:"
d5d0: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
d5e0: 22 72 65 61 64 5f 62 79 74 65 73 3a 20 22 2c 20  "read_bytes: ", 
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 42 79 74              "Byt
d600: 65 73 20 72 65 61 64 20 66 72 6f 6d 20 73 74 6f  es read from sto
d610: 72 61 67 65 3a 22 20 20 7d 2c 0a 20 20 20 20 20  rage:"  },.     
d620: 20 7b 20 22 77 72 69 74 65 5f 62 79 74 65 73 3a   { "write_bytes:
d630: 20 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 22   ",            "
d640: 42 79 74 65 73 20 77 72 69 74 74 65 6e 20 74 6f  Bytes written to
d650: 20 73 74 6f 72 61 67 65 3a 22 20 7d 2c 0a 20 20   storage:" },.  
d660: 20 20 20 20 7b 20 22 63 61 6e 63 65 6c 6c 65 64      { "cancelled
d670: 5f 77 72 69 74 65 5f 62 79 74 65 73 3a 20 22 2c  _write_bytes: ",
d680: 20 20 22 43 61 6e 63 65 6c 6c 65 64 20 77 72 69    "Cancelled wri
d690: 74 65 20 62 79 74 65 73 3a 22 20 20 20 20 7d 2c  te bytes:"    },
d6a0: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20  .    };.    int 
d6b0: 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
d6c0: 69 3c 41 72 72 61 79 53 69 7a 65 28 61 54 72 61  i<ArraySize(aTra
d6d0: 6e 73 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ns); i++){.     
d6e0: 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73 74   int n = (int)st
d6f0: 72 6c 65 6e 28 61 54 72 61 6e 73 5b 69 5d 2e 7a  rlen(aTrans[i].z
d700: 50 61 74 74 65 72 6e 29 3b 0a 20 20 20 20 20 20  Pattern);.      
d710: 69 66 28 20 73 74 72 6e 63 6d 70 28 61 54 72 61  if( strncmp(aTra
d720: 6e 73 5b 69 5d 2e 7a 50 61 74 74 65 72 6e 2c 20  ns[i].zPattern, 
d730: 7a 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  z, n)==0 ){.    
d740: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
d750: 6f 75 74 2c 20 22 25 2d 33 36 73 20 25 73 22 2c  out, "%-36s %s",
d760: 20 61 54 72 61 6e 73 5b 69 5d 2e 7a 44 65 73 63   aTrans[i].zDesc
d770: 2c 20 26 7a 5b 6e 5d 29 3b 0a 20 20 20 20 20 20  , &z[n]);.      
d780: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
d790: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 63 6c  .    }.  }.  fcl
d7a0: 6f 73 65 28 69 6e 29 3b 0a 7d 0a 23 65 6e 64 69  ose(in);.}.#endi
d7b0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61 79  f../*.** Display
d7c0: 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20 6f   a single line o
d7d0: 66 20 73 74 61 74 75 73 20 75 73 69 6e 67 20 36  f status using 6
d7e0: 34 2d 62 69 74 20 76 61 6c 75 65 73 2e 0a 2a 2f  4-bit values..*/
d7f0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64 69 73  .static void dis
d800: 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 0a 20 20  playStatLine(.  
d810: 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 20  ShellState *p,  
d820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
d830: 20 73 68 65 6c 6c 20 63 6f 6e 74 65 78 74 20 2a   shell context *
d840: 2f 0a 20 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c  /.  char *zLabel
d850: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ,             /*
d860: 20 4c 61 62 65 6c 20 66 6f 72 20 74 68 69 73 20   Label for this 
d870: 6f 6e 65 20 6c 69 6e 65 20 2a 2f 0a 20 20 63 68  one line */.  ch
d880: 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 20 20 20  ar *zFormat,    
d890: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 6d 61          /* Forma
d8a0: 74 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  t for the result
d8b0: 20 2a 2f 0a 20 20 69 6e 74 20 69 53 74 61 74 75   */.  int iStatu
d8c0: 73 43 74 72 6c 2c 20 20 20 20 20 20 20 20 20 20  sCtrl,          
d8d0: 2f 2a 20 57 68 69 63 68 20 73 74 61 74 75 73 20  /* Which status 
d8e0: 74 6f 20 64 69 73 70 6c 61 79 20 2a 2f 0a 20 20  to display */.  
d8f0: 69 6e 74 20 62 52 65 73 65 74 20 20 20 20 20 20  int bReset      
d900: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
d910: 65 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73  e to reset the s
d920: 74 61 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  tats */.){.  sql
d930: 69 74 65 33 5f 69 6e 74 36 34 20 69 43 75 72 20  ite3_int64 iCur 
d940: 3d 20 2d 31 3b 0a 20 20 73 71 6c 69 74 65 33 5f  = -1;.  sqlite3_
d950: 69 6e 74 36 34 20 69 48 69 77 74 72 20 3d 20 2d  int64 iHiwtr = -
d960: 31 3b 0a 20 20 69 6e 74 20 69 2c 20 6e 50 65 72  1;.  int i, nPer
d970: 63 65 6e 74 3b 0a 20 20 63 68 61 72 20 7a 4c 69  cent;.  char zLi
d980: 6e 65 5b 32 30 30 5d 3b 0a 20 20 73 71 6c 69 74  ne[200];.  sqlit
d990: 65 33 5f 73 74 61 74 75 73 36 34 28 69 53 74 61  e3_status64(iSta
d9a0: 74 75 73 43 74 72 6c 2c 20 26 69 43 75 72 2c 20  tusCtrl, &iCur, 
d9b0: 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29  &iHiwtr, bReset)
d9c0: 3b 0a 20 20 66 6f 72 28 69 3d 30 2c 20 6e 50 65  ;.  for(i=0, nPe
d9d0: 72 63 65 6e 74 3d 30 3b 20 7a 46 6f 72 6d 61 74  rcent=0; zFormat
d9e0: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  [i]; i++){.    i
d9f0: 66 28 20 7a 46 6f 72 6d 61 74 5b 69 5d 3d 3d 27  f( zFormat[i]=='
da00: 25 27 20 29 20 6e 50 65 72 63 65 6e 74 2b 2b 3b  %' ) nPercent++;
da10: 0a 20 20 7d 0a 20 20 69 66 28 20 6e 50 65 72 63  .  }.  if( nPerc
da20: 65 6e 74 3e 31 20 29 7b 0a 20 20 20 20 73 71 6c  ent>1 ){.    sql
da30: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
da40: 7a 65 6f 66 28 7a 4c 69 6e 65 29 2c 20 7a 4c 69  zeof(zLine), zLi
da50: 6e 65 2c 20 7a 46 6f 72 6d 61 74 2c 20 69 43 75  ne, zFormat, iCu
da60: 72 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 7d 65  r, iHiwtr);.  }e
da70: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
da80: 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
da90: 28 7a 4c 69 6e 65 29 2c 20 7a 4c 69 6e 65 2c 20  (zLine), zLine, 
daa0: 7a 46 6f 72 6d 61 74 2c 20 69 48 69 77 74 72 29  zFormat, iHiwtr)
dab0: 3b 0a 20 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e  ;.  }.  raw_prin
dac0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 33 36  tf(p->out, "%-36
dad0: 73 20 25 73 5c 6e 22 2c 20 7a 4c 61 62 65 6c 2c  s %s\n", zLabel,
dae0: 20 7a 4c 69 6e 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a   zLine);.}../*.*
daf0: 2a 20 44 69 73 70 6c 61 79 20 6d 65 6d 6f 72 79  * Display memory
db00: 20 73 74 61 74 73 2e 0a 2a 2f 0a 73 74 61 74 69   stats..*/.stati
db10: 63 20 69 6e 74 20 64 69 73 70 6c 61 79 5f 73 74  c int display_st
db20: 61 74 73 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ats(.  sqlite3 *
db30: 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
db40: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74     /* Database t
db50: 6f 20 71 75 65 72 79 20 2a 2f 0a 20 20 53 68 65  o query */.  She
db60: 6c 6c 53 74 61 74 65 20 2a 70 41 72 67 2c 20 20  llState *pArg,  
db70: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
db80: 74 65 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74  ter to ShellStat
db90: 65 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 73 65  e */.  int bRese
dba0: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
dbb0: 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 72 65     /* True to re
dbc0: 73 65 74 20 74 68 65 20 73 74 61 74 73 20 2a 2f  set the stats */
dbd0: 0a 29 7b 0a 20 20 69 6e 74 20 69 43 75 72 3b 0a  .){.  int iCur;.
dbe0: 20 20 69 6e 74 20 69 48 69 77 74 72 3b 0a 0a 20    int iHiwtr;.. 
dbf0: 20 69 66 28 20 70 41 72 67 20 26 26 20 70 41 72   if( pArg && pAr
dc00: 67 2d 3e 6f 75 74 20 29 7b 0a 20 20 20 20 64 69  g->out ){.    di
dc10: 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41  splayStatLine(pA
dc20: 72 67 2c 20 22 4d 65 6d 6f 72 79 20 55 73 65 64  rg, "Memory Used
dc30: 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64  :",.       "%lld
dc40: 20 28 6d 61 78 20 25 6c 6c 64 29 20 62 79 74 65   (max %lld) byte
dc50: 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55  s", SQLITE_STATU
dc60: 53 5f 4d 45 4d 4f 52 59 5f 55 53 45 44 2c 20 62  S_MEMORY_USED, b
dc70: 52 65 73 65 74 29 3b 0a 20 20 20 20 64 69 73 70  Reset);.    disp
dc80: 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72 67  layStatLine(pArg
dc90: 2c 20 22 4e 75 6d 62 65 72 20 6f 66 20 4f 75 74  , "Number of Out
dca0: 73 74 61 6e 64 69 6e 67 20 41 6c 6c 6f 63 61 74  standing Allocat
dcb0: 69 6f 6e 73 3a 22 2c 0a 20 20 20 20 20 20 20 22  ions:",.       "
dcc0: 25 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29 22  %lld (max %lld)"
dcd0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  , SQLITE_STATUS_
dce0: 4d 41 4c 4c 4f 43 5f 43 4f 55 4e 54 2c 20 62 52  MALLOC_COUNT, bR
dcf0: 65 73 65 74 29 3b 0a 20 20 20 20 69 66 28 20 70  eset);.    if( p
dd00: 41 72 67 2d 3e 73 68 65 6c 6c 46 6c 67 73 20 26  Arg->shellFlgs &
dd10: 20 53 48 46 4c 47 5f 50 61 67 65 63 61 63 68 65   SHFLG_Pagecache
dd20: 20 29 7b 0a 20 20 20 20 20 20 64 69 73 70 6c 61   ){.      displa
dd30: 79 53 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20  yStatLine(pArg, 
dd40: 22 4e 75 6d 62 65 72 20 6f 66 20 50 63 61 63 68  "Number of Pcach
dd50: 65 20 50 61 67 65 73 20 55 73 65 64 3a 22 2c 0a  e Pages Used:",.
dd60: 20 20 20 20 20 20 20 20 20 22 25 6c 6c 64 20 28           "%lld (
dd70: 6d 61 78 20 25 6c 6c 64 29 20 70 61 67 65 73 22  max %lld) pages"
dd80: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  , SQLITE_STATUS_
dd90: 50 41 47 45 43 41 43 48 45 5f 55 53 45 44 2c 20  PAGECACHE_USED, 
dda0: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 7d 0a 20  bReset);.    }. 
ddb0: 20 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69     displayStatLi
ddc0: 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d 62 65 72  ne(pArg, "Number
ddd0: 20 6f 66 20 50 63 61 63 68 65 20 4f 76 65 72 66   of Pcache Overf
dde0: 6c 6f 77 20 42 79 74 65 73 3a 22 2c 0a 20 20 20  low Bytes:",.   
ddf0: 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25      "%lld (max %
de00: 6c 6c 64 29 20 62 79 74 65 73 22 2c 20 53 51 4c  lld) bytes", SQL
de10: 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43  ITE_STATUS_PAGEC
de20: 41 43 48 45 5f 4f 56 45 52 46 4c 4f 57 2c 20 62  ACHE_OVERFLOW, b
de30: 52 65 73 65 74 29 3b 0a 20 20 20 20 64 69 73 70  Reset);.    disp
de40: 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72 67  layStatLine(pArg
de50: 2c 20 22 4c 61 72 67 65 73 74 20 41 6c 6c 6f 63  , "Largest Alloc
de60: 61 74 69 6f 6e 3a 22 2c 0a 20 20 20 20 20 20 20  ation:",.       
de70: 22 25 6c 6c 64 20 62 79 74 65 73 22 2c 20 53 51  "%lld bytes", SQ
de80: 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 41 4c 4c  LITE_STATUS_MALL
de90: 4f 43 5f 53 49 5a 45 2c 20 62 52 65 73 65 74 29  OC_SIZE, bReset)
dea0: 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  ;.    displaySta
deb0: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4c 61 72  tLine(pArg, "Lar
dec0: 67 65 73 74 20 50 63 61 63 68 65 20 41 6c 6c 6f  gest Pcache Allo
ded0: 63 61 74 69 6f 6e 3a 22 2c 0a 20 20 20 20 20 20  cation:",.      
dee0: 20 22 25 6c 6c 64 20 62 79 74 65 73 22 2c 20 53   "%lld bytes", S
def0: 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47  QLITE_STATUS_PAG
df00: 45 43 41 43 48 45 5f 53 49 5a 45 2c 20 62 52 65  ECACHE_SIZE, bRe
df10: 73 65 74 29 3b 0a 23 69 66 64 65 66 20 59 59 54  set);.#ifdef YYT
df20: 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
df30: 48 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  H.    displaySta
df40: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 44 65 65  tLine(pArg, "Dee
df50: 70 65 73 74 20 50 61 72 73 65 72 20 53 74 61 63  pest Parser Stac
df60: 6b 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c  k:",.       "%ll
df70: 64 20 28 6d 61 78 20 25 6c 6c 64 29 22 2c 20 53  d (max %lld)", S
df80: 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 52  QLITE_STATUS_PAR
df90: 53 45 52 5f 53 54 41 43 4b 2c 20 62 52 65 73 65  SER_STACK, bRese
dfa0: 74 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 0a  t);.#endif.  }..
dfb0: 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70 41    if( pArg && pA
dfc0: 72 67 2d 3e 6f 75 74 20 26 26 20 64 62 20 29 7b  rg->out && db ){
dfd0: 0a 20 20 20 20 69 66 28 20 70 41 72 67 2d 3e 73  .    if( pArg->s
dfe0: 68 65 6c 6c 46 6c 67 73 20 26 20 53 48 46 4c 47  hellFlgs & SHFLG
dff0: 5f 4c 6f 6f 6b 61 73 69 64 65 20 29 7b 0a 20 20  _Lookaside ){.  
e000: 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75      iHiwtr = iCu
e010: 72 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 73 71  r = -1;.      sq
e020: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
e030: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
e040: 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 55 53  TUS_LOOKASIDE_US
e050: 45 44 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ED,.            
e060: 20 20 20 20 20 20 20 20 20 20 20 20 26 69 43 75              &iCu
e070: 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65 73  r, &iHiwtr, bRes
e080: 65 74 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  et);.      raw_p
e090: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
e0b0: 4c 6f 6f 6b 61 73 69 64 65 20 53 6c 6f 74 73 20  Lookaside Slots 
e0c0: 55 73 65 64 3a 20 20 20 20 20 20 20 20 20 20 20  Used:           
e0d0: 20 20 20 20 20 25 64 20 28 6d 61 78 20 25 64 29       %d (max %d)
e0e0: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
e0f0: 20 20 20 69 43 75 72 2c 20 69 48 69 77 74 72 29     iCur, iHiwtr)
e100: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
e110: 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51  db_status(db, SQ
e120: 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f  LITE_DBSTATUS_LO
e130: 4f 4b 41 53 49 44 45 5f 48 49 54 2c 0a 20 20 20  OKASIDE_HIT,.   
e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e150: 20 20 20 20 20 26 69 43 75 72 2c 20 26 69 48 69       &iCur, &iHi
e160: 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20  wtr, bReset);.  
e170: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
e180: 41 72 67 2d 3e 6f 75 74 2c 20 22 53 75 63 63 65  Arg->out, "Succe
e190: 73 73 66 75 6c 20 6c 6f 6f 6b 61 73 69 64 65 20  ssful lookaside 
e1a0: 61 74 74 65 6d 70 74 73 3a 20 20 20 20 20 20 20  attempts:       
e1b0: 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  %d\n",.         
e1c0: 20 20 20 20 20 69 48 69 77 74 72 29 3b 0a 20 20       iHiwtr);.  
e1d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e1e0: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e1f0: 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53  _DBSTATUS_LOOKAS
e200: 49 44 45 5f 4d 49 53 53 5f 53 49 5a 45 2c 0a 20  IDE_MISS_SIZE,. 
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e220: 20 20 20 20 20 20 20 26 69 43 75 72 2c 20 26 69         &iCur, &i
e230: 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a  Hiwtr, bReset);.
e240: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
e250: 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f  (pArg->out, "Loo
e260: 6b 61 73 69 64 65 20 66 61 69 6c 75 72 65 73 20  kaside failures 
e270: 64 75 65 20 74 6f 20 73 69 7a 65 3a 20 20 20 20  due to size:    
e280: 20 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20    %d\n",.       
e290: 20 20 20 20 20 20 20 69 48 69 77 74 72 29 3b 0a         iHiwtr);.
e2a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62        sqlite3_db
e2b0: 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49  _status(db, SQLI
e2c0: 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b  TE_DBSTATUS_LOOK
e2d0: 41 53 49 44 45 5f 4d 49 53 53 5f 46 55 4c 4c 2c  ASIDE_MISS_FULL,
e2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e2f0: 20 20 20 20 20 20 20 20 20 26 69 43 75 72 2c 20           &iCur, 
e300: 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29  &iHiwtr, bReset)
e310: 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  ;.      raw_prin
e320: 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c  tf(pArg->out, "L
e330: 6f 6f 6b 61 73 69 64 65 20 66 61 69 6c 75 72 65  ookaside failure
e340: 73 20 64 75 65 20 74 6f 20 4f 4f 4d 3a 20 20 20  s due to OOM:   
e350: 20 20 20 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20      %d\n",.     
e360: 20 20 20 20 20 20 20 20 20 69 48 69 77 74 72 29           iHiwtr)
e370: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 48 69 77  ;.    }.    iHiw
e380: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
e390: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e3a0: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e3b0: 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
e3c0: 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48  USED, &iCur, &iH
e3d0: 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20  iwtr, bReset);. 
e3e0: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
e3f0: 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 72 20  rg->out, "Pager 
e400: 48 65 61 70 20 55 73 61 67 65 3a 20 20 20 20 20  Heap Usage:     
e410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
e420: 64 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20  d bytes\n",.    
e430: 20 20 20 20 20 20 20 20 69 43 75 72 29 3b 0a 20          iCur);. 
e440: 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72     iHiwtr = iCur
e450: 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74   = -1;.    sqlit
e460: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c  e3_db_status(db,
e470: 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
e480: 5f 43 41 43 48 45 5f 48 49 54 2c 20 26 69 43 75  _CACHE_HIT, &iCu
e490: 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b 0a  r, &iHiwtr, 1);.
e4a0: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
e4b0: 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 20  Arg->out, "Page 
e4c0: 63 61 63 68 65 20 68 69 74 73 3a 20 20 20 20 20  cache hits:     
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4e0: 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20  %d\n", iCur);.  
e4f0: 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20    iHiwtr = iCur 
e500: 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  = -1;.    sqlite
e510: 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20  3_db_status(db, 
e520: 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
e530: 43 41 43 48 45 5f 4d 49 53 53 2c 20 26 69 43 75  CACHE_MISS, &iCu
e540: 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b 0a  r, &iHiwtr, 1);.
e550: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
e560: 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 20  Arg->out, "Page 
e570: 63 61 63 68 65 20 6d 69 73 73 65 73 3a 20 20 20  cache misses:   
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e590: 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20  %d\n", iCur);.  
e5a0: 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20    iHiwtr = iCur 
e5b0: 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  = -1;.    sqlite
e5c0: 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20  3_db_status(db, 
e5d0: 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
e5e0: 43 41 43 48 45 5f 57 52 49 54 45 2c 20 26 69 43  CACHE_WRITE, &iC
e5f0: 75 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b  ur, &iHiwtr, 1);
e600: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e610: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65  pArg->out, "Page
e620: 20 63 61 63 68 65 20 77 72 69 74 65 73 3a 20 20   cache writes:  
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e640: 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20   %d\n", iCur);. 
e650: 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72     iHiwtr = iCur
e660: 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74   = -1;.    sqlit
e670: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c  e3_db_status(db,
e680: 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
e690: 5f 53 43 48 45 4d 41 5f 55 53 45 44 2c 20 26 69  _SCHEMA_USED, &i
e6a0: 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52  Cur, &iHiwtr, bR
e6b0: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
e6c0: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e6d0: 20 22 53 63 68 65 6d 61 20 48 65 61 70 20 55 73   "Schema Heap Us
e6e0: 61 67 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  age:            
e6f0: 20 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c         %d bytes\
e700: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
e710: 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74  iCur);.    iHiwt
e720: 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20  r = iCur = -1;. 
e730: 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74     sqlite3_db_st
e740: 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f  atus(db, SQLITE_
e750: 44 42 53 54 41 54 55 53 5f 53 54 4d 54 5f 55 53  DBSTATUS_STMT_US
e760: 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77  ED, &iCur, &iHiw
e770: 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  tr, bReset);.   
e780: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
e790: 2d 3e 6f 75 74 2c 20 22 53 74 61 74 65 6d 65 6e  ->out, "Statemen
e7a0: 74 20 48 65 61 70 2f 4c 6f 6f 6b 61 73 69 64 65  t Heap/Lookaside
e7b0: 20 55 73 61 67 65 3a 20 20 20 20 20 20 25 64 20   Usage:      %d 
e7c0: 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20 20 20  bytes\n",.      
e7d0: 20 20 20 20 20 20 69 43 75 72 29 3b 0a 20 20 7d        iCur);.  }
e7e0: 0a 0a 20 20 69 66 28 20 70 41 72 67 20 26 26 20  ..  if( pArg && 
e7f0: 70 41 72 67 2d 3e 6f 75 74 20 26 26 20 64 62 20  pArg->out && db 
e800: 26 26 20 70 41 72 67 2d 3e 70 53 74 6d 74 20 29  && pArg->pStmt )
e810: 7b 0a 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c  {.    iCur = sql
e820: 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73  ite3_stmt_status
e830: 28 70 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51  (pArg->pStmt, SQ
e840: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
e850: 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 2c 0a 20  FULLSCAN_STEP,. 
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 52                bR
e880: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
e890: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e8a0: 20 22 46 75 6c 6c 73 63 61 6e 20 53 74 65 70 73   "Fullscan Steps
e8b0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
e8c0: 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43         %d\n", iC
e8d0: 75 72 29 3b 0a 20 20 20 20 69 43 75 72 20 3d 20  ur);.    iCur = 
e8e0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
e8f0: 74 75 73 28 70 41 72 67 2d 3e 70 53 74 6d 74 2c  tus(pArg->pStmt,
e900: 20 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54   SQLITE_STMTSTAT
e910: 55 53 5f 53 4f 52 54 2c 20 62 52 65 73 65 74 29  US_SORT, bReset)
e920: 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  ;.    raw_printf
e930: 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 53 6f 72  (pArg->out, "Sor
e940: 74 20 4f 70 65 72 61 74 69 6f 6e 73 3a 20 20 20  t Operations:   
e950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e960: 20 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a    %d\n", iCur);.
e970: 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69 74      iCur = sqlit
e980: 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 70  e3_stmt_status(p
e990: 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49  Arg->pStmt, SQLI
e9a0: 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 41 55  TE_STMTSTATUS_AU
e9b0: 54 4f 49 4e 44 45 58 2c 62 52 65 73 65 74 29 3b  TOINDEX,bReset);
e9c0: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e9d0: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 41 75 74 6f  pArg->out, "Auto
e9e0: 69 6e 64 65 78 20 49 6e 73 65 72 74 73 3a 20 20  index Inserts:  
e9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea00: 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20   %d\n", iCur);. 
ea10: 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69 74 65     iCur = sqlite
ea20: 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 70 41  3_stmt_status(pA
ea30: 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54  rg->pStmt, SQLIT
ea40: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f  E_STMTSTATUS_VM_
ea50: 53 54 45 50 2c 20 62 52 65 73 65 74 29 3b 0a 20  STEP, bReset);. 
ea60: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
ea70: 72 67 2d 3e 6f 75 74 2c 20 22 56 69 72 74 75 61  rg->out, "Virtua
ea80: 6c 20 4d 61 63 68 69 6e 65 20 53 74 65 70 73 3a  l Machine Steps:
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
eaa0: 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 7d  d\n", iCur);.  }
eab0: 0a 0a 23 69 66 64 65 66 20 5f 5f 6c 69 6e 75 78  ..#ifdef __linux
eac0: 5f 5f 0a 20 20 64 69 73 70 6c 61 79 4c 69 6e 75  __.  displayLinu
ead0: 78 49 6f 53 74 61 74 73 28 70 41 72 67 2d 3e 6f  xIoStats(pArg->o
eae0: 75 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  ut);.#endif..  /
eaf0: 2a 20 44 6f 20 6e 6f 74 20 72 65 6d 6f 76 65 20  * Do not remove 
eb00: 74 68 69 73 20 6d 61 63 68 69 6e 65 20 72 65 61  this machine rea
eb10: 64 61 62 6c 65 20 63 6f 6d 6d 65 6e 74 3a 20 65  dable comment: e
eb20: 78 74 72 61 2d 73 74 61 74 73 2d 6f 75 74 70 75  xtra-stats-outpu
eb30: 74 2d 68 65 72 65 20 2a 2f 0a 0a 20 20 72 65 74  t-here */..  ret
eb40: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
eb50: 44 69 73 70 6c 61 79 20 73 63 61 6e 20 73 74 61  Display scan sta
eb60: 74 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ts..*/.static vo
eb70: 69 64 20 64 69 73 70 6c 61 79 5f 73 63 61 6e 73  id display_scans
eb80: 74 61 74 73 28 0a 20 20 73 71 6c 69 74 65 33 20  tats(.  sqlite3 
eb90: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
eba0: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
ebb0: 61 73 65 20 74 6f 20 71 75 65 72 79 20 2a 2f 0a  ase to query */.
ebc0: 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 41    ShellState *pA
ebd0: 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20  rg              
ebe0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
ebf0: 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 29 7b  ShellState */.){
ec00: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
ec10: 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
ec20: 53 54 41 54 55 53 0a 20 20 55 4e 55 53 45 44 5f  STATUS.  UNUSED_
ec30: 50 41 52 41 4d 45 54 45 52 28 64 62 29 3b 0a 20  PARAMETER(db);. 
ec40: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
ec50: 52 28 70 41 72 67 29 3b 0a 23 65 6c 73 65 0a 20  R(pArg);.#else. 
ec60: 20 69 6e 74 20 69 2c 20 6b 2c 20 6e 2c 20 6d 78   int i, k, n, mx
ec70: 3b 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70  ;.  raw_printf(p
ec80: 41 72 67 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d  Arg->out, "-----
ec90: 2d 2d 2d 20 73 63 61 6e 73 74 61 74 73 20 2d 2d  --- scanstats --
eca0: 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 20 20 6d 78  ------\n");.  mx
ecb0: 20 3d 20 30 3b 0a 20 20 66 6f 72 28 6b 3d 30 3b   = 0;.  for(k=0;
ecc0: 20 6b 3c 3d 6d 78 3b 20 6b 2b 2b 29 7b 0a 20 20   k<=mx; k++){.  
ecd0: 20 20 64 6f 75 62 6c 65 20 72 45 73 74 4c 6f 6f    double rEstLoo
ece0: 70 20 3d 20 31 2e 30 3b 0a 20 20 20 20 66 6f 72  p = 1.0;.    for
ecf0: 28 69 3d 6e 3d 30 3b 20 31 3b 20 69 2b 2b 29 7b  (i=n=0; 1; i++){
ed00: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
ed10: 74 6d 74 20 2a 70 20 3d 20 70 41 72 67 2d 3e 70  tmt *p = pArg->p
ed20: 53 74 6d 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  Stmt;.      sqli
ed30: 74 65 33 5f 69 6e 74 36 34 20 6e 4c 6f 6f 70 2c  te3_int64 nLoop,
ed40: 20 6e 56 69 73 69 74 3b 0a 20 20 20 20 20 20 64   nVisit;.      d
ed50: 6f 75 62 6c 65 20 72 45 73 74 3b 0a 20 20 20 20  ouble rEst;.    
ed60: 20 20 69 6e 74 20 69 53 69 64 3b 0a 20 20 20 20    int iSid;.    
ed70: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
ed80: 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20 69 66  xplain;.      if
ed90: 28 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73  ( sqlite3_stmt_s
eda0: 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20  canstatus(p, i, 
edb0: 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f  SQLITE_SCANSTAT_
edc0: 4e 4c 4f 4f 50 2c 20 28 76 6f 69 64 2a 29 26 6e  NLOOP, (void*)&n
edd0: 4c 6f 6f 70 29 20 29 7b 0a 20 20 20 20 20 20 20  Loop) ){.       
ede0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
edf0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74        sqlite3_st
ee00: 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c  mt_scanstatus(p,
ee10: 20 69 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53   i, SQLITE_SCANS
ee20: 54 41 54 5f 53 45 4c 45 43 54 49 44 2c 20 28 76  TAT_SELECTID, (v
ee30: 6f 69 64 2a 29 26 69 53 69 64 29 3b 0a 20 20 20  oid*)&iSid);.   
ee40: 20 20 20 69 66 28 20 69 53 69 64 3e 6d 78 20 29     if( iSid>mx )
ee50: 20 6d 78 20 3d 20 69 53 69 64 3b 0a 20 20 20 20   mx = iSid;.    
ee60: 20 20 69 66 28 20 69 53 69 64 21 3d 6b 20 29 20    if( iSid!=k ) 
ee70: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
ee80: 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  if( n==0 ){.    
ee90: 20 20 20 20 72 45 73 74 4c 6f 6f 70 20 3d 20 28      rEstLoop = (
eea0: 64 6f 75 62 6c 65 29 6e 4c 6f 6f 70 3b 0a 20 20  double)nLoop;.  
eeb0: 20 20 20 20 20 20 69 66 28 20 6b 3e 30 20 29 20        if( k>0 ) 
eec0: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
eed0: 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20  >out, "-------- 
eee0: 73 75 62 71 75 65 72 79 20 25 64 20 2d 2d 2d 2d  subquery %d ----
eef0: 2d 2d 2d 5c 6e 22 2c 20 6b 29 3b 0a 20 20 20 20  ---\n", k);.    
ef00: 20 20 7d 0a 20 20 20 20 20 20 6e 2b 2b 3b 0a 20    }.      n++;. 
ef10: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d       sqlite3_stm
ef20: 74 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c 20  t_scanstatus(p, 
ef30: 69 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54  i, SQLITE_SCANST
ef40: 41 54 5f 4e 56 49 53 49 54 2c 20 28 76 6f 69 64  AT_NVISIT, (void
ef50: 2a 29 26 6e 56 69 73 69 74 29 3b 0a 20 20 20 20  *)&nVisit);.    
ef60: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73    sqlite3_stmt_s
ef70: 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20  canstatus(p, i, 
ef80: 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f  SQLITE_SCANSTAT_
ef90: 45 53 54 2c 20 28 76 6f 69 64 2a 29 26 72 45 73  EST, (void*)&rEs
efa0: 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
efb0: 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75  3_stmt_scanstatu
efc0: 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45 5f 53  s(p, i, SQLITE_S
efd0: 43 41 4e 53 54 41 54 5f 45 58 50 4c 41 49 4e 2c  CANSTAT_EXPLAIN,
efe0: 20 28 76 6f 69 64 2a 29 26 7a 45 78 70 6c 61 69   (void*)&zExplai
eff0: 6e 29 3b 0a 20 20 20 20 20 20 75 74 66 38 5f 70  n);.      utf8_p
f000: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
f010: 20 22 4c 6f 6f 70 20 25 32 64 3a 20 25 73 5c 6e   "Loop %2d: %s\n
f020: 22 2c 20 6e 2c 20 7a 45 78 70 6c 61 69 6e 29 3b  ", n, zExplain);
f030: 0a 20 20 20 20 20 20 72 45 73 74 4c 6f 6f 70 20  .      rEstLoop 
f040: 2a 3d 20 72 45 73 74 3b 0a 20 20 20 20 20 20 72  *= rEst;.      r
f050: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
f060: 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20 20 22  out,.          "
f070: 20 20 20 20 20 20 20 20 20 6e 4c 6f 6f 70 3d 25           nLoop=%
f080: 2d 38 6c 6c 64 20 6e 52 6f 77 3d 25 2d 38 6c 6c  -8lld nRow=%-8ll
f090: 64 20 65 73 74 52 6f 77 3d 25 2d 38 6c 6c 64 20  d estRow=%-8lld 
f0a0: 65 73 74 52 6f 77 2f 4c 6f 6f 70 3d 25 2d 38 67  estRow/Loop=%-8g
f0b0: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 6e  \n",.          n
f0c0: 4c 6f 6f 70 2c 20 6e 56 69 73 69 74 2c 20 28 73  Loop, nVisit, (s
f0d0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 28 72 45  qlite3_int64)(rE
f0e0: 73 74 4c 6f 6f 70 2b 30 2e 35 29 2c 20 72 45 73  stLoop+0.5), rEs
f0f0: 74 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d  t.      );.    }
f100: 0a 20 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e 74  .  }.  raw_print
f110: 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 2d 2d  f(pArg->out, "--
f120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 23  ---------\n");.#
f140: 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  endif.}../*.** P
f150: 61 72 61 6d 65 74 65 72 20 61 7a 41 72 72 61 79  arameter azArray
f160: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 7a 65 72   points to a zer
f170: 6f 2d 74 65 72 6d 69 6e 61 74 65 64 20 61 72 72  o-terminated arr
f180: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 2e 20 7a  ay of strings. z
f190: 53 74 72 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  Str.** points to
f1a0: 20 61 20 73 69 6e 67 6c 65 20 6e 75 6c 2d 74 65   a single nul-te
f1b0: 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67 2e  rminated string.
f1c0: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
f1d0: 20 69 66 20 7a 53 74 72 0a 2a 2a 20 69 73 20 65   if zStr.** is e
f1e0: 71 75 61 6c 2c 20 61 63 63 6f 72 64 69 6e 67 20  qual, according 
f1f0: 74 6f 20 73 74 72 63 6d 70 28 29 2c 20 74 6f 20  to strcmp(), to 
f200: 61 6e 79 20 6f 66 20 74 68 65 20 73 74 72 69 6e  any of the strin
f210: 67 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 2e  gs in the array.
f220: 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72  .** Otherwise, r
f230: 65 74 75 72 6e 20 7a 65 72 6f 2e 0a 2a 2f 0a 73  eturn zero..*/.s
f240: 74 61 74 69 63 20 69 6e 74 20 73 74 72 5f 69 6e  tatic int str_in
f250: 5f 61 72 72 61 79 28 63 6f 6e 73 74 20 63 68 61  _array(const cha
f260: 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73 74 20 63  r *zStr, const c
f270: 68 61 72 20 2a 2a 61 7a 41 72 72 61 79 29 7b 0a  har **azArray){.
f280: 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69    int i;.  for(i
f290: 3d 30 3b 20 61 7a 41 72 72 61 79 5b 69 5d 3b 20  =0; azArray[i]; 
f2a0: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 30 3d  i++){.    if( 0=
f2b0: 3d 73 74 72 63 6d 70 28 7a 53 74 72 2c 20 61 7a  =strcmp(zStr, az
f2c0: 41 72 72 61 79 5b 69 5d 29 20 29 20 72 65 74 75  Array[i]) ) retu
f2d0: 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75  rn 1;.  }.  retu
f2e0: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  rn 0;.}../*.** I
f2f0: 66 20 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  f compiled state
f300: 6d 65 6e 74 20 70 53 71 6c 20 61 70 70 65 61 72  ment pSql appear
f310: 73 20 74 6f 20 62 65 20 61 6e 20 45 58 50 4c 41  s to be an EXPLA
f320: 49 4e 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c  IN statement, al
f330: 6c 6f 63 61 74 65 0a 2a 2a 20 61 6e 64 20 70 6f  locate.** and po
f340: 70 75 6c 61 74 65 20 74 68 65 20 53 68 65 6c 6c  pulate the Shell
f350: 53 74 61 74 65 2e 61 69 49 6e 64 65 6e 74 5b 5d  State.aiIndent[]
f360: 20 61 72 72 61 79 20 77 69 74 68 20 74 68 65 20   array with the 
f370: 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 73 70 61  number of.** spa
f380: 63 65 73 20 65 61 63 68 20 6f 70 63 6f 64 65 20  ces each opcode 
f390: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
f3a0: 65 64 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ed before it is 
f3b0: 6f 75 74 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  output..**.** Th
f3c0: 65 20 69 6e 64 65 6e 74 69 6e 67 20 72 75 6c 65  e indenting rule
f3d0: 73 20 61 72 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  s are:.**.**    
f3e0: 20 2a 20 46 6f 72 20 65 61 63 68 20 22 4e 65 78   * For each "Nex
f3f0: 74 22 2c 20 22 50 72 65 76 22 2c 20 22 56 4e 65  t", "Prev", "VNe
f400: 78 74 22 20 6f 72 20 22 56 50 72 65 76 22 20 69  xt" or "VPrev" i
f410: 6e 73 74 72 75 63 74 69 6f 6e 2c 20 69 6e 64 65  nstruction, inde
f420: 6e 74 0a 2a 2a 20 20 20 20 20 20 20 61 6c 6c 20  nt.**       all 
f430: 6f 70 63 6f 64 65 73 20 74 68 61 74 20 6f 63 63  opcodes that occ
f440: 75 72 20 62 65 74 77 65 65 6e 20 74 68 65 20 70  ur between the p
f450: 32 20 6a 75 6d 70 20 64 65 73 74 69 6e 61 74 69  2 jump destinati
f460: 6f 6e 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64  on and the opcod
f470: 65 0a 2a 2a 20 20 20 20 20 20 20 69 74 73 65 6c  e.**       itsel
f480: 66 20 62 79 20 32 20 73 70 61 63 65 73 2e 0a 2a  f by 2 spaces..*
f490: 2a 0a 2a 2a 20 20 20 20 20 2a 20 46 6f 72 20 65  *.**     * For e
f4a0: 61 63 68 20 22 47 6f 74 6f 22 2c 20 69 66 20 74  ach "Goto", if t
f4b0: 68 65 20 6a 75 6d 70 20 64 65 73 74 69 6e 61 74  he jump destinat
f4c0: 69 6f 6e 20 69 73 20 65 61 72 6c 69 65 72 20 69  ion is earlier i
f4d0: 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  n the program.**
f4e0: 20 20 20 20 20 20 20 61 6e 64 20 65 6e 64 73 20         and ends 
f4f0: 6f 6e 20 6f 6e 65 20 6f 66 3a 0a 2a 2a 20 20 20  on one of:.**   
f500: 20 20 20 20 20 20 20 59 69 65 6c 64 20 20 53 65         Yield  Se
f510: 65 6b 47 74 20 20 53 65 65 6b 4c 74 20 20 52 6f  ekGt  SeekLt  Ro
f520: 77 53 65 74 52 65 61 64 20 20 52 65 77 69 6e 64  wSetRead  Rewind
f530: 0a 2a 2a 20 20 20 20 20 20 20 6f 72 20 69 66 20  .**       or if 
f540: 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  the P1 parameter
f550: 20 69 73 20 6f 6e 65 20 69 6e 73 74 65 61 64 20   is one instead 
f560: 6f 66 20 7a 65 72 6f 2c 0a 2a 2a 20 20 20 20 20  of zero,.**     
f570: 20 20 74 68 65 6e 20 69 6e 64 65 6e 74 20 61 6c    then indent al
f580: 6c 20 6f 70 63 6f 64 65 73 20 62 65 74 77 65 65  l opcodes betwee
f590: 6e 20 74 68 65 20 65 61 72 6c 69 65 72 20 69 6e  n the earlier in
f5a0: 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 20 20 20  struction.**    
f5b0: 20 20 20 61 6e 64 20 22 47 6f 74 6f 22 20 62 79     and "Goto" by
f5c0: 20 32 20 73 70 61 63 65 73 2e 0a 2a 2f 0a 73 74   2 spaces..*/.st
f5d0: 61 74 69 63 20 76 6f 69 64 20 65 78 70 6c 61 69  atic void explai
f5e0: 6e 5f 64 61 74 61 5f 70 72 65 70 61 72 65 28 53  n_data_prepare(S
f5f0: 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 73 71  hellState *p, sq
f600: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 71 6c  lite3_stmt *pSql
f610: 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ){.  const char 
f620: 2a 7a 53 71 6c 3b 20 20 20 20 20 20 20 20 20 20  *zSql;          
f630: 20 20 20 20 20 2f 2a 20 54 68 65 20 74 65 78 74       /* The text
f640: 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74   of the SQL stat
f650: 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ement */.  const
f660: 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
f670: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
f680: 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
f690: 68 69 73 20 69 73 20 61 6e 20 45 58 50 4c 41 49  his is an EXPLAI
f6a0: 4e 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 62 59 69  N */.  int *abYi
f6b0: 65 6c 64 20 3d 20 30 3b 20 20 20 20 20 20 20 20  eld = 0;        
f6c0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
f6d0: 66 20 6f 70 20 69 73 20 61 6e 20 4f 50 5f 59 69  f op is an OP_Yi
f6e0: 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c  eld */.  int nAl
f6f0: 6c 6f 63 20 3d 20 30 3b 20 20 20 20 20 20 20 20  loc = 0;        
f700: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
f710: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 70 2d  cated size of p-
f720: 3e 61 69 49 6e 64 65 6e 74 5b 5d 2c 20 61 62 59  >aiIndent[], abY
f730: 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 69 4f  ield */.  int iO
f740: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
f750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
f760: 65 78 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e 20  ex of operation 
f770: 69 6e 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b 5d  in p->aiIndent[]
f780: 20 2a 2f 0a 0a 20 20 63 6f 6e 73 74 20 63 68 61   */..  const cha
f790: 72 20 2a 61 7a 4e 65 78 74 5b 5d 20 3d 20 7b 20  r *azNext[] = { 
f7a0: 22 4e 65 78 74 22 2c 20 22 50 72 65 76 22 2c 20  "Next", "Prev", 
f7b0: 22 56 50 72 65 76 22 2c 20 22 56 4e 65 78 74 22  "VPrev", "VNext"
f7c0: 2c 20 22 53 6f 72 74 65 72 4e 65 78 74 22 2c 0a  , "SorterNext",.
f7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7e0: 20 20 20 20 20 20 20 20 20 20 20 22 4e 65 78 74             "Next
f7f0: 49 66 4f 70 65 6e 22 2c 20 22 50 72 65 76 49 66  IfOpen", "PrevIf
f800: 4f 70 65 6e 22 2c 20 30 20 7d 3b 0a 20 20 63 6f  Open", 0 };.  co
f810: 6e 73 74 20 63 68 61 72 20 2a 61 7a 59 69 65 6c  nst char *azYiel
f820: 64 5b 5d 20 3d 20 7b 20 22 59 69 65 6c 64 22 2c  d[] = { "Yield",
f830: 20 22 53 65 65 6b 4c 54 22 2c 20 22 53 65 65 6b   "SeekLT", "Seek
f840: 47 54 22 2c 20 22 52 6f 77 53 65 74 52 65 61 64  GT", "RowSetRead
f850: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
f860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
f870: 52 65 77 69 6e 64 22 2c 20 30 20 7d 3b 0a 20 20  Rewind", 0 };.  
f880: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 47 6f  const char *azGo
f890: 74 6f 5b 5d 20 3d 20 7b 20 22 47 6f 74 6f 22 2c  to[] = { "Goto",
f8a0: 20 30 20 7d 3b 0a 0a 20 20 2f 2a 20 54 72 79 20   0 };..  /* Try 
f8b0: 74 6f 20 66 69 67 75 72 65 20 6f 75 74 20 69 66  to figure out if
f8c0: 20 74 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20   this is really 
f8d0: 61 6e 20 45 58 50 4c 41 49 4e 20 73 74 61 74 65  an EXPLAIN state
f8e0: 6d 65 6e 74 2e 20 49 66 20 74 68 69 73 0a 20 20  ment. If this.  
f8f0: 2a 2a 20 63 61 6e 6e 6f 74 20 62 65 20 76 65 72  ** cannot be ver
f900: 69 66 69 65 64 2c 20 72 65 74 75 72 6e 20 65 61  ified, return ea
f910: 72 6c 79 2e 20 20 2a 2f 0a 20 20 69 66 28 20 73  rly.  */.  if( s
f920: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
f930: 75 6e 74 28 70 53 71 6c 29 21 3d 38 20 29 7b 0a  unt(pSql)!=8 ){.
f940: 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70      p->cMode = p
f950: 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 72 65 74 75  ->mode;.    retu
f960: 72 6e 3b 0a 20 20 7d 0a 20 20 7a 53 71 6c 20 3d  rn;.  }.  zSql =
f970: 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 70 53 71   sqlite3_sql(pSq
f980: 6c 29 3b 0a 20 20 69 66 28 20 7a 53 71 6c 3d 3d  l);.  if( zSql==
f990: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 66 6f  0 ) return;.  fo
f9a0: 72 28 7a 3d 7a 53 71 6c 3b 20 2a 7a 3d 3d 27 20  r(z=zSql; *z==' 
f9b0: 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 74 27 20 7c 7c  ' || *z=='\t' ||
f9c0: 20 2a 7a 3d 3d 27 5c 6e 27 20 7c 7c 20 2a 7a 3d   *z=='\n' || *z=
f9d0: 3d 27 5c 66 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 72  ='\f' || *z=='\r
f9e0: 27 3b 20 7a 2b 2b 29 3b 0a 20 20 69 66 28 20 73  '; z++);.  if( s
f9f0: 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28  qlite3_strnicmp(
fa00: 7a 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20 37 29  z, "explain", 7)
fa10: 20 29 7b 0a 20 20 20 20 70 2d 3e 63 4d 6f 64 65   ){.    p->cMode
fa20: 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20   = p->mode;.    
fa30: 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 66  return;.  }..  f
fa40: 6f 72 28 69 4f 70 3d 30 3b 20 53 51 4c 49 54 45  or(iOp=0; SQLITE
fa50: 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f 73 74  _ROW==sqlite3_st
fa60: 65 70 28 70 53 71 6c 29 3b 20 69 4f 70 2b 2b 29  ep(pSql); iOp++)
fa70: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
fa80: 20 69 6e 74 20 69 41 64 64 72 20 3d 20 73 71 6c   int iAddr = sql
fa90: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  ite3_column_int(
faa0: 70 53 71 6c 2c 20 30 29 3b 0a 20 20 20 20 63 6f  pSql, 0);.    co
fab0: 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 20 3d 20  nst char *zOp = 
fac0: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
fad0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
fae0: 28 70 53 71 6c 2c 20 31 29 3b 0a 0a 20 20 20 20  (pSql, 1);..    
faf0: 2f 2a 20 53 65 74 20 70 32 20 74 6f 20 74 68 65  /* Set p2 to the
fb00: 20 50 32 20 66 69 65 6c 64 20 6f 66 20 74 68 65   P2 field of the
fb10: 20 63 75 72 72 65 6e 74 20 6f 70 63 6f 64 65 2e   current opcode.
fb20: 20 54 68 65 6e 2c 20 61 73 73 75 6d 69 6e 67 20   Then, assuming 
fb30: 74 68 61 74 0a 20 20 20 20 2a 2a 20 70 32 20 69  that.    ** p2 i
fb40: 73 20 61 6e 20 69 6e 73 74 72 75 63 74 69 6f 6e  s an instruction
fb50: 20 61 64 64 72 65 73 73 2c 20 73 65 74 20 76 61   address, set va
fb60: 72 69 61 62 6c 65 20 70 32 6f 70 20 74 6f 20 74  riable p2op to t
fb70: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 61 74  he index of that
fb80: 0a 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74  .    ** instruct
fb90: 69 6f 6e 20 69 6e 20 74 68 65 20 61 69 49 6e 64  ion in the aiInd
fba0: 65 6e 74 5b 5d 20 61 72 72 61 79 2e 20 70 32 20  ent[] array. p2 
fbb0: 61 6e 64 20 70 32 6f 70 20 6d 61 79 20 62 65 20  and p2op may be 
fbc0: 64 69 66 66 65 72 65 6e 74 20 69 66 0a 20 20 20  different if.   
fbd0: 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
fbe0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 70  instruction is p
fbf0: 61 72 74 20 6f 66 20 61 20 73 75 62 2d 70 72 6f  art of a sub-pro
fc00: 67 72 61 6d 20 67 65 6e 65 72 61 74 65 64 20 62  gram generated b
fc10: 79 20 61 6e 0a 20 20 20 20 2a 2a 20 53 51 4c 20  y an.    ** SQL 
fc20: 74 72 69 67 67 65 72 20 6f 72 20 66 6f 72 65 69  trigger or forei
fc30: 67 6e 20 6b 65 79 2e 20 20 2a 2f 0a 20 20 20 20  gn key.  */.    
fc40: 69 6e 74 20 70 32 20 3d 20 73 71 6c 69 74 65 33  int p2 = sqlite3
fc50: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71 6c  _column_int(pSql
fc60: 2c 20 33 29 3b 0a 20 20 20 20 69 6e 74 20 70 32  , 3);.    int p2
fc70: 6f 70 20 3d 20 28 70 32 20 2b 20 28 69 4f 70 2d  op = (p2 + (iOp-
fc80: 69 41 64 64 72 29 29 3b 0a 0a 20 20 20 20 2f 2a  iAddr));..    /*
fc90: 20 47 72 6f 77 20 74 68 65 20 70 2d 3e 61 69 49   Grow the p->aiI
fca0: 6e 64 65 6e 74 20 61 72 72 61 79 20 61 73 20 72  ndent array as r
fcb0: 65 71 75 69 72 65 64 20 2a 2f 0a 20 20 20 20 69  equired */.    i
fcc0: 66 28 20 69 4f 70 3e 3d 6e 41 6c 6c 6f 63 20 29  f( iOp>=nAlloc )
fcd0: 7b 0a 20 20 20 20 20 20 69 66 28 20 69 4f 70 3d  {.      if( iOp=
fce0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
fcf0: 20 44 6f 20 66 75 72 74 68 65 72 20 76 65 72 66   Do further verf
fd00: 69 63 61 74 69 6f 6e 20 74 68 61 74 20 74 68 69  ication that thi
fd10: 73 20 69 73 20 65 78 70 6c 61 69 6e 20 6f 75 74  s is explain out
fd20: 70 75 74 2e 20 20 41 62 6f 72 74 20 69 66 0a 20  put.  Abort if. 
fd30: 20 20 20 20 20 20 20 2a 2a 20 69 74 20 69 73 20         ** it is 
fd40: 6e 6f 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  not */.        s
fd50: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
fd60: 20 2a 65 78 70 6c 61 69 6e 43 6f 6c 73 5b 5d 20   *explainCols[] 
fd70: 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 22  = {.           "
fd80: 61 64 64 72 22 2c 20 22 6f 70 63 6f 64 65 22 2c  addr", "opcode",
fd90: 20 22 70 31 22 2c 20 22 70 32 22 2c 20 22 70 33   "p1", "p2", "p3
fda0: 22 2c 20 22 70 34 22 2c 20 22 70 35 22 2c 20 22  ", "p4", "p5", "
fdb0: 63 6f 6d 6d 65 6e 74 22 20 7d 3b 0a 20 20 20 20  comment" };.    
fdc0: 20 20 20 20 69 6e 74 20 6a 6a 3b 0a 20 20 20 20      int jj;.    
fdd0: 20 20 20 20 66 6f 72 28 6a 6a 3d 30 3b 20 6a 6a      for(jj=0; jj
fde0: 3c 41 72 72 61 79 53 69 7a 65 28 65 78 70 6c 61  <ArraySize(expla
fdf0: 69 6e 43 6f 6c 73 29 3b 20 6a 6a 2b 2b 29 7b 0a  inCols); jj++){.
fe00: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73 74            if( st
fe10: 72 63 6d 70 28 73 71 6c 69 74 65 33 5f 63 6f 6c  rcmp(sqlite3_col
fe20: 75 6d 6e 5f 6e 61 6d 65 28 70 53 71 6c 2c 6a 6a  umn_name(pSql,jj
fe30: 29 2c 65 78 70 6c 61 69 6e 43 6f 6c 73 5b 6a 6a  ),explainCols[jj
fe40: 5d 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ])!=0 ){.       
fe50: 20 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20       p->cMode = 
fe60: 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20 20  p->mode;.       
fe70: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
fe80: 65 74 28 70 53 71 6c 29 3b 0a 20 20 20 20 20 20  et(pSql);.      
fe90: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
fea0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
feb0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
fec0: 20 20 6e 41 6c 6c 6f 63 20 2b 3d 20 31 30 30 3b    nAlloc += 100;
fed0: 0a 20 20 20 20 20 20 70 2d 3e 61 69 49 6e 64 65  .      p->aiInde
fee0: 6e 74 20 3d 20 28 69 6e 74 2a 29 73 71 6c 69 74  nt = (int*)sqlit
fef0: 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 70 2d 3e  e3_realloc64(p->
ff00: 61 69 49 6e 64 65 6e 74 2c 20 6e 41 6c 6c 6f 63  aiIndent, nAlloc
ff10: 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 20  *sizeof(int));. 
ff20: 20 20 20 20 20 61 62 59 69 65 6c 64 20 3d 20 28       abYield = (
ff30: 69 6e 74 2a 29 73 71 6c 69 74 65 33 5f 72 65 61  int*)sqlite3_rea
ff40: 6c 6c 6f 63 36 34 28 61 62 59 69 65 6c 64 2c 20  lloc64(abYield, 
ff50: 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f 66 28 69 6e  nAlloc*sizeof(in
ff60: 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  t));.    }.    a
ff70: 62 59 69 65 6c 64 5b 69 4f 70 5d 20 3d 20 73 74  bYield[iOp] = st
ff80: 72 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c 20  r_in_array(zOp, 
ff90: 61 7a 59 69 65 6c 64 29 3b 0a 20 20 20 20 70 2d  azYield);.    p-
ffa0: 3e 61 69 49 6e 64 65 6e 74 5b 69 4f 70 5d 20 3d  >aiIndent[iOp] =
ffb0: 20 30 3b 0a 20 20 20 20 70 2d 3e 6e 49 6e 64 65   0;.    p->nInde
ffc0: 6e 74 20 3d 20 69 4f 70 2b 31 3b 0a 0a 20 20 20  nt = iOp+1;..   
ffd0: 20 69 66 28 20 73 74 72 5f 69 6e 5f 61 72 72 61   if( str_in_arra
ffe0: 79 28 7a 4f 70 2c 20 61 7a 4e 65 78 74 29 20 29  y(zOp, azNext) )
fff0: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 70 32  {.      for(i=p2
10000 6f 70 3b 20 69 3c 69 4f 70 3b 20 69 2b 2b 29 20  op; i<iOp; i++) 
10010 70 2d 3e 61 69 49 6e 64 65 6e 74 5b 69 5d 20 2b  p->aiIndent[i] +
10020 3d 20 32 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  = 2;.    }.    i
10030 66 28 20 73 74 72 5f 69 6e 5f 61 72 72 61 79 28  f( str_in_array(
10040 7a 4f 70 2c 20 61 7a 47 6f 74 6f 29 20 26 26 20  zOp, azGoto) && 
10050 70 32 6f 70 3c 70 2d 3e 6e 49 6e 64 65 6e 74 0a  p2op<p->nIndent.
10060 20 20 20 20 20 26 26 20 28 61 62 59 69 65 6c 64       && (abYield
10070 5b 70 32 6f 70 5d 20 7c 7c 20 73 71 6c 69 74 65  [p2op] || sqlite
10080 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71  3_column_int(pSq
10090 6c 2c 20 32 29 29 0a 20 20 20 20 29 7b 0a 20 20  l, 2)).    ){.  
100a0 20 20 20 20 66 6f 72 28 69 3d 70 32 6f 70 3b 20      for(i=p2op; 
100b0 69 3c 69 4f 70 3b 20 69 2b 2b 29 20 70 2d 3e 61  i<iOp; i++) p->a
100c0 69 49 6e 64 65 6e 74 5b 69 5d 20 2b 3d 20 32 3b  iIndent[i] += 2;
100d0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 70 2d  .    }.  }..  p-
100e0 3e 69 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 20 20  >iIndent = 0;.  
100f0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 62 59  sqlite3_free(abY
10100 69 65 6c 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  ield);.  sqlite3
10110 5f 72 65 73 65 74 28 70 53 71 6c 29 3b 0a 7d 0a  _reset(pSql);.}.
10120 0a 2f 2a 0a 2a 2a 20 46 72 65 65 20 74 68 65 20  ./*.** Free the 
10130 61 72 72 61 79 20 61 6c 6c 6f 63 61 74 65 64 20  array allocated 
10140 62 79 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f  by explain_data_
10150 70 72 65 70 61 72 65 28 29 2e 0a 2a 2f 0a 73 74  prepare()..*/.st
10160 61 74 69 63 20 76 6f 69 64 20 65 78 70 6c 61 69  atic void explai
10170 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 53 68  n_data_delete(Sh
10180 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20  ellState *p){.  
10190 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 2d 3e  sqlite3_free(p->
101a0 61 69 49 6e 64 65 6e 74 29 3b 0a 20 20 70 2d 3e  aiIndent);.  p->
101b0 61 69 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 20 20  aiIndent = 0;.  
101c0 70 2d 3e 6e 49 6e 64 65 6e 74 20 3d 20 30 3b 0a  p->nIndent = 0;.
101d0 20 20 70 2d 3e 69 49 6e 64 65 6e 74 20 3d 20 30    p->iIndent = 0
101e0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62  ;.}../*.** Disab
101f0 6c 65 20 61 6e 64 20 72 65 73 74 6f 72 65 20 2e  le and restore .
10200 77 68 65 72 65 74 72 61 63 65 20 61 6e 64 20 2e  wheretrace and .
10210 73 65 6c 65 63 74 74 72 61 63 65 20 73 65 74 74  selecttrace sett
10220 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ings..*/.#if def
10230 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
10240 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
10250 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
10260 43 54 54 52 41 43 45 29 0a 65 78 74 65 72 6e 20  CTTRACE).extern 
10270 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
10280 74 54 72 61 63 65 3b 0a 73 74 61 74 69 63 20 69  tTrace;.static i
10290 6e 74 20 73 61 76 65 64 53 65 6c 65 63 74 54 72  nt savedSelectTr
102a0 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ace;.#endif.#if 
102b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
102c0 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
102d0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 57  (SQLITE_ENABLE_W
102e0 48 45 52 45 54 52 41 43 45 29 0a 65 78 74 65 72  HERETRACE).exter
102f0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  n int sqlite3Whe
10300 72 65 54 72 61 63 65 3b 0a 73 74 61 74 69 63 20  reTrace;.static 
10310 69 6e 74 20 73 61 76 65 64 57 68 65 72 65 54 72  int savedWhereTr
10320 61 63 65 3b 0a 23 65 6e 64 69 66 0a 73 74 61 74  ace;.#endif.stat
10330 69 63 20 76 6f 69 64 20 64 69 73 61 62 6c 65 5f  ic void disable_
10340 64 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65  debug_trace_mode
10350 73 28 76 6f 69 64 29 7b 0a 23 69 66 20 64 65 66  s(void){.#if def
10360 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
10370 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
10380 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
10390 43 54 54 52 41 43 45 29 0a 20 20 73 61 76 65 64  CTTRACE).  saved
103a0 53 65 6c 65 63 74 54 72 61 63 65 20 3d 20 73 71  SelectTrace = sq
103b0 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
103c0 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ;.  sqlite3Selec
103d0 74 54 72 61 63 65 20 3d 20 30 3b 0a 23 65 6e 64  tTrace = 0;.#end
103e0 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
103f0 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
10400 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
10410 4e 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45  NABLE_WHERETRACE
10420 29 0a 20 20 73 61 76 65 64 57 68 65 72 65 54 72  ).  savedWhereTr
10430 61 63 65 20 3d 20 73 71 6c 69 74 65 33 57 68 65  ace = sqlite3Whe
10440 72 65 54 72 61 63 65 3b 0a 20 20 73 71 6c 69 74  reTrace;.  sqlit
10450 65 33 57 68 65 72 65 54 72 61 63 65 20 3d 20 30  e3WhereTrace = 0
10460 3b 0a 23 65 6e 64 69 66 0a 7d 0a 73 74 61 74 69  ;.#endif.}.stati
10470 63 20 76 6f 69 64 20 72 65 73 74 6f 72 65 5f 64  c void restore_d
10480 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65 73  ebug_trace_modes
10490 28 76 6f 69 64 29 7b 0a 23 69 66 20 64 65 66 69  (void){.#if defi
104a0 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
104b0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
104c0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43  ITE_ENABLE_SELEC
104d0 54 54 52 41 43 45 29 0a 20 20 73 71 6c 69 74 65  TTRACE).  sqlite
104e0 33 53 65 6c 65 63 74 54 72 61 63 65 20 3d 20 73  3SelectTrace = s
104f0 61 76 65 64 53 65 6c 65 63 74 54 72 61 63 65 3b  avedSelectTrace;
10500 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
10510 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
10520 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
10530 49 54 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45  ITE_ENABLE_WHERE
10540 54 52 41 43 45 29 0a 20 20 73 71 6c 69 74 65 33  TRACE).  sqlite3
10550 57 68 65 72 65 54 72 61 63 65 20 3d 20 73 61 76  WhereTrace = sav
10560 65 64 57 68 65 72 65 54 72 61 63 65 3b 0a 23 65  edWhereTrace;.#e
10570 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75  ndif.}../*.** Ru
10580 6e 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  n a prepared sta
10590 74 65 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63  tement.*/.static
105a0 20 76 6f 69 64 20 65 78 65 63 5f 70 72 65 70 61   void exec_prepa
105b0 72 65 64 5f 73 74 6d 74 28 0a 20 20 53 68 65 6c  red_stmt(.  Shel
105c0 6c 53 74 61 74 65 20 2a 70 41 72 67 2c 20 20 20  lState *pArg,   
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
105f0 50 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c 6c  Pointer to Shell
10600 53 74 61 74 65 20 2a 2f 0a 20 20 73 71 6c 69 74  State */.  sqlit
10610 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10630 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
10640 74 61 74 6d 65 6e 74 20 74 6f 20 72 75 6e 20 2a  tatment to run *
10650 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62  /.  int (*xCallb
10660 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  ack)(void*,int,c
10670 68 61 72 2a 2a 2c 63 68 61 72 2a 2a 2c 69 6e 74  har**,char**,int
10680 2a 29 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  *)   /* Callback
10690 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a   function */.){.
106a0 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 2f 2a 20    int rc;..  /* 
106b0 70 65 72 66 6f 72 6d 20 74 68 65 20 66 69 72 73  perform the firs
106c0 74 20 73 74 65 70 2e 20 20 74 68 69 73 20 77 69  t step.  this wi
106d0 6c 6c 20 74 65 6c 6c 20 75 73 20 69 66 20 77 65  ll tell us if we
106e0 0a 20 20 2a 2a 20 68 61 76 65 20 61 20 72 65 73  .  ** have a res
106f0 75 6c 74 20 73 65 74 20 6f 72 20 6e 6f 74 20 61  ult set or not a
10700 6e 64 20 68 6f 77 20 77 69 64 65 20 69 74 20 69  nd how wide it i
10710 73 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73  s..  */.  rc = s
10720 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
10730 74 29 3b 0a 20 20 2f 2a 20 69 66 20 77 65 20 68  t);.  /* if we h
10740 61 76 65 20 61 20 72 65 73 75 6c 74 20 73 65 74  ave a result set
10750 2e 2e 2e 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c  ... */.  if( SQL
10760 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29 7b  ITE_ROW == rc ){
10770 0a 20 20 20 20 2f 2a 20 69 66 20 77 65 20 68 61  .    /* if we ha
10780 76 65 20 61 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e  ve a callback...
10790 20 2a 2f 0a 20 20 20 20 69 66 28 20 78 43 61 6c   */.    if( xCal
107a0 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 2f  lback ){.      /
107b0 2a 20 61 6c 6c 6f 63 61 74 65 20 73 70 61 63 65  * allocate space
107c0 20 66 6f 72 20 63 6f 6c 20 6e 61 6d 65 20 70 74   for col name pt
107d0 72 2c 20 76 61 6c 75 65 20 70 74 72 2c 20 61 6e  r, value ptr, an
107e0 64 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 20 20  d type */.      
107f0 69 6e 74 20 6e 43 6f 6c 20 3d 20 73 71 6c 69 74  int nCol = sqlit
10800 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
10810 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 76 6f  pStmt);.      vo
10820 69 64 20 2a 70 44 61 74 61 20 3d 20 73 71 6c 69  id *pData = sqli
10830 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 33 2a 6e  te3_malloc64(3*n
10840 43 6f 6c 2a 73 69 7a 65 6f 66 28 63 6f 6e 73 74  Col*sizeof(const
10850 20 63 68 61 72 2a 29 20 2b 20 31 29 3b 0a 20 20   char*) + 1);.  
10860 20 20 20 20 69 66 28 20 21 70 44 61 74 61 20 29      if( !pData )
10870 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
10880 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
10890 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
108a0 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 73 20    char **azCols 
108b0 3d 20 28 63 68 61 72 20 2a 2a 29 70 44 61 74 61  = (char **)pData
108c0 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 73 20  ;      /* Names 
108d0 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  of result column
108e0 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 68 61  s */.        cha
108f0 72 20 2a 2a 61 7a 56 61 6c 73 20 3d 20 26 61 7a  r **azVals = &az
10900 43 6f 6c 73 5b 6e 43 6f 6c 5d 3b 20 20 20 20 20  Cols[nCol];     
10910 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
10920 20 20 20 20 20 20 20 20 69 6e 74 20 2a 61 69 54          int *aiT
10930 79 70 65 73 20 3d 20 28 69 6e 74 20 2a 29 26 61  ypes = (int *)&a
10940 7a 56 61 6c 73 5b 6e 43 6f 6c 5d 3b 20 2f 2a 20  zVals[nCol]; /* 
10950 52 65 73 75 6c 74 20 74 79 70 65 73 20 2a 2f 0a  Result types */.
10960 20 20 20 20 20 20 20 20 69 6e 74 20 69 2c 20 78          int i, x
10970 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
10980 28 73 69 7a 65 6f 66 28 69 6e 74 29 20 3c 3d 20  (sizeof(int) <= 
10990 73 69 7a 65 6f 66 28 63 68 61 72 20 2a 29 29 3b  sizeof(char *));
109a0 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 61 76 65  .        /* save
109b0 20 6f 66 66 20 70 74 72 73 20 74 6f 20 63 6f 6c   off ptrs to col
109c0 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 20  umn names */.   
109d0 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
109e0 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nCol; i++){.    
109f0 20 20 20 20 20 20 61 7a 43 6f 6c 73 5b 69 5d 20        azCols[i] 
10a00 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
10a10 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 70 53  3_column_name(pS
10a20 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20  tmt, i);.       
10a30 20 7d 0a 20 20 20 20 20 20 20 20 64 6f 7b 0a 20   }.        do{. 
10a40 20 20 20 20 20 20 20 20 20 2f 2a 20 65 78 74 72           /* extr
10a50 61 63 74 20 74 68 65 20 64 61 74 61 20 61 6e 64  act the data and
10a60 20 64 61 74 61 20 74 79 70 65 73 20 2a 2f 0a 20   data types */. 
10a70 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30           for(i=0
10a80 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a  ; i<nCol; i++){.
10a90 20 20 20 20 20 20 20 20 20 20 20 20 61 69 54 79              aiTy
10aa0 70 65 73 5b 69 5d 20 3d 20 78 20 3d 20 73 71 6c  pes[i] = x = sql
10ab0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
10ac0 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  (pStmt, i);.    
10ad0 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 53          if( x==S
10ae0 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20 70 41  QLITE_BLOB && pA
10af0 72 67 20 26 26 20 70 41 72 67 2d 3e 63 4d 6f 64  rg && pArg->cMod
10b00 65 3d 3d 4d 4f 44 45 5f 49 6e 73 65 72 74 20 29  e==MODE_Insert )
10b10 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
10b20 61 7a 56 61 6c 73 5b 69 5d 20 3d 20 22 22 3b 0a  azVals[i] = "";.
10b30 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73              }els
10b40 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e{.             
10b50 20 61 7a 56 61 6c 73 5b 69 5d 20 3d 20 28 63 68   azVals[i] = (ch
10b60 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
10b70 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69  mn_text(pStmt, i
10b80 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
10b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
10ba0 20 21 61 7a 56 61 6c 73 5b 69 5d 20 26 26 20 28   !azVals[i] && (
10bb0 61 69 54 79 70 65 73 5b 69 5d 21 3d 53 51 4c 49  aiTypes[i]!=SQLI
10bc0 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20  TE_NULL) ){.    
10bd0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
10be0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
10bf0 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
10c00 3b 20 2f 2a 20 66 72 6f 6d 20 66 6f 72 20 2a 2f  ; /* from for */
10c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
10c20 20 20 20 20 20 20 20 20 20 7d 20 2f 2a 20 65 6e           } /* en
10c30 64 20 66 6f 72 20 2a 2f 0a 0a 20 20 20 20 20 20  d for */..      
10c40 20 20 20 20 2f 2a 20 69 66 20 64 61 74 61 20 61      /* if data a
10c50 6e 64 20 74 79 70 65 73 20 65 78 74 72 61 63 74  nd types extract
10c60 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2e  ed successfully.
10c70 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  .. */.          
10c80 69 66 28 20 53 51 4c 49 54 45 5f 52 4f 57 20 3d  if( SQLITE_ROW =
10c90 3d 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20  = rc ){.        
10ca0 20 20 20 20 2f 2a 20 63 61 6c 6c 20 74 68 65 20      /* call the 
10cb0 73 75 70 70 6c 69 65 64 20 63 61 6c 6c 62 61 63  supplied callbac
10cc0 6b 20 77 69 74 68 20 74 68 65 20 72 65 73 75 6c  k with the resul
10cd0 74 20 72 6f 77 20 64 61 74 61 20 2a 2f 0a 20 20  t row data */.  
10ce0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 78 43            if( xC
10cf0 61 6c 6c 62 61 63 6b 28 70 41 72 67 2c 20 6e 43  allback(pArg, nC
10d00 6f 6c 2c 20 61 7a 56 61 6c 73 2c 20 61 7a 43 6f  ol, azVals, azCo
10d10 6c 73 2c 20 61 69 54 79 70 65 73 29 20 29 7b 0a  ls, aiTypes) ){.
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
10d30 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b   = SQLITE_ABORT;
10d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c  .            }el
10d50 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
10d60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73    rc = sqlite3_s
10d70 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  tep(pStmt);.    
10d80 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
10d90 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 20      }.        } 
10da0 77 68 69 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f  while( SQLITE_RO
10db0 57 20 3d 3d 20 72 63 20 29 3b 0a 20 20 20 20 20  W == rc );.     
10dc0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
10dd0 70 44 61 74 61 29 3b 0a 20 20 20 20 20 20 7d 0a  pData);.      }.
10de0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10df0 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 72 63 20   do{.        rc 
10e00 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
10e10 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 7d 20 77  Stmt);.      } w
10e20 68 69 6c 65 28 20 72 63 20 3d 3d 20 53 51 4c 49  hile( rc == SQLI
10e30 54 45 5f 52 4f 57 20 29 3b 0a 20 20 20 20 7d 0a  TE_ROW );.    }.
10e40 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 65    }.}../*.** Exe
10e50 63 75 74 65 20 61 20 73 74 61 74 65 6d 65 6e 74  cute a statement
10e60 20 6f 72 20 73 65 74 20 6f 66 20 73 74 61 74 65   or set of state
10e70 6d 65 6e 74 73 2e 20 20 50 72 69 6e 74 0a 2a 2a  ments.  Print.**
10e80 20 61 6e 79 20 72 65 73 75 6c 74 20 72 6f 77 73   any result rows
10e90 2f 63 6f 6c 75 6d 6e 73 20 64 65 70 65 6e 64 69  /columns dependi
10ea0 6e 67 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e  ng on the curren
10eb0 74 20 6d 6f 64 65 0a 2a 2a 20 73 65 74 20 76 69  t mode.** set vi
10ec0 61 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 63  a the supplied c
10ed0 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20 54  allback..**.** T
10ee0 68 69 73 20 69 73 20 76 65 72 79 20 73 69 6d 69  his is very simi
10ef0 6c 61 72 20 74 6f 20 53 51 4c 69 74 65 27 73 20  lar to SQLite's 
10f00 62 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65 33  built-in sqlite3
10f10 5f 65 78 65 63 28 29 0a 2a 2a 20 66 75 6e 63 74  _exec().** funct
10f20 69 6f 6e 20 65 78 63 65 70 74 20 69 74 20 74 61  ion except it ta
10f30 6b 65 73 20 61 20 73 6c 69 67 68 74 6c 79 20 64  kes a slightly d
10f40 69 66 66 65 72 65 6e 74 20 63 61 6c 6c 62 61 63  ifferent callbac
10f50 6b 0a 2a 2a 20 61 6e 64 20 63 61 6c 6c 62 61 63  k.** and callbac
10f60 6b 20 64 61 74 61 20 61 72 67 75 6d 65 6e 74 2e  k data argument.
10f70 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
10f80 68 65 6c 6c 5f 65 78 65 63 28 0a 20 20 73 71 6c  hell_exec(.  sql
10f90 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
10fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fb0 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 6f 70 65         /* An ope
10fc0 6e 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  n database */.  
10fd0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
10fe0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
10ff0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c            /* SQL
11000 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64   to be evaluated
11010 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c   */.  int (*xCal
11020 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
11030 2c 63 68 61 72 2a 2a 2c 63 68 61 72 2a 2a 2c 69  ,char**,char**,i
11040 6e 74 2a 29 2c 20 20 20 2f 2a 20 43 61 6c 6c 62  nt*),   /* Callb
11050 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ack function */.
11060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 28              /* (
11090 6e 6f 74 20 74 68 65 20 73 61 6d 65 20 61 73 20  not the same as 
110a0 73 71 6c 69 74 65 33 5f 65 78 65 63 29 20 2a 2f  sqlite3_exec) */
110b0 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
110c0 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20  Arg,            
110d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
110e0 50 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c 6c  Pointer to Shell
110f0 53 74 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20  State */.  char 
11100 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20 20 20 20  **pzErrMsg      
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11120 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 73       /* Error ms
11130 67 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  g written here *
11140 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  /.){.  sqlite3_s
11150 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 4e 55 4c  tmt *pStmt = NUL
11160 4c 3b 20 20 20 20 20 2f 2a 20 53 74 61 74 65 6d  L;     /* Statem
11170 65 6e 74 20 74 6f 20 65 78 65 63 75 74 65 2e 20  ent to execute. 
11180 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
11190 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
111a0 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 43       /* Return C
111b0 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 32  ode */.  int rc2
111c0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
111d0 7a 4c 65 66 74 6f 76 65 72 3b 20 20 20 20 20 20  zLeftover;      
111e0 20 20 20 20 2f 2a 20 54 61 69 6c 20 6f 66 20 75      /* Tail of u
111f0 6e 70 72 6f 63 65 73 73 65 64 20 53 51 4c 20 2a  nprocessed SQL *
11200 2f 0a 0a 20 20 69 66 28 20 70 7a 45 72 72 4d 73  /..  if( pzErrMs
11210 67 20 29 7b 0a 20 20 20 20 2a 70 7a 45 72 72 4d  g ){.    *pzErrM
11220 73 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 7d 0a 0a  sg = NULL;.  }..
11230 20 20 77 68 69 6c 65 28 20 7a 53 71 6c 5b 30 5d    while( zSql[0]
11240 20 26 26 20 28 53 51 4c 49 54 45 5f 4f 4b 20 3d   && (SQLITE_OK =
11250 3d 20 72 63 29 20 29 7b 0a 20 20 20 20 73 74 61  = rc) ){.    sta
11260 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
11270 7a 53 74 6d 74 53 71 6c 3b 0a 20 20 20 20 72 63  zStmtSql;.    rc
11280 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
11290 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c 20  re_v2(db, zSql, 
112a0 2d 31 2c 20 26 70 53 74 6d 74 2c 20 26 7a 4c 65  -1, &pStmt, &zLe
112b0 66 74 6f 76 65 72 29 3b 0a 20 20 20 20 69 66 28  ftover);.    if(
112c0 20 53 51 4c 49 54 45 5f 4f 4b 20 21 3d 20 72 63   SQLITE_OK != rc
112d0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 7a   ){.      if( pz
112e0 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20  ErrMsg ){.      
112f0 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 73 61    *pzErrMsg = sa
11300 76 65 5f 65 72 72 5f 6d 73 67 28 64 62 29 3b 0a  ve_err_msg(db);.
11310 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
11320 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21 70 53  e{.      if( !pS
11330 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  tmt ){.        /
11340 2a 20 74 68 69 73 20 68 61 70 70 65 6e 73 20 66  * this happens f
11350 6f 72 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 72 20  or a comment or 
11360 77 68 69 74 65 2d 73 70 61 63 65 20 2a 2f 0a 20  white-space */. 
11370 20 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c         zSql = zL
11380 65 66 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 20  eftover;.       
11390 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28   while( IsSpace(
113a0 7a 53 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c 2b  zSql[0]) ) zSql+
113b0 2b 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69  +;.        conti
113c0 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  nue;.      }.   
113d0 20 20 20 7a 53 74 6d 74 53 71 6c 20 3d 20 73 71     zStmtSql = sq
113e0 6c 69 74 65 33 5f 73 71 6c 28 70 53 74 6d 74 29  lite3_sql(pStmt)
113f0 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 53 74 6d  ;.      if( zStm
11400 74 53 71 6c 3d 3d 30 20 29 20 7a 53 74 6d 74 53  tSql==0 ) zStmtS
11410 71 6c 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 77  ql = "";.      w
11420 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 53  hile( IsSpace(zS
11430 74 6d 74 53 71 6c 5b 30 5d 29 20 29 20 7a 53 74  tmtSql[0]) ) zSt
11440 6d 74 53 71 6c 2b 2b 3b 0a 0a 20 20 20 20 20 20  mtSql++;..      
11450 2f 2a 20 73 61 76 65 20 6f 66 66 20 74 68 65 20  /* save off the 
11460 70 72 65 70 61 72 65 64 20 73 74 61 74 6d 65 6e  prepared statmen
11470 74 20 68 61 6e 64 6c 65 20 61 6e 64 20 72 65 73  t handle and res
11480 65 74 20 72 6f 77 20 63 6f 75 6e 74 20 2a 2f 0a  et row count */.
11490 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20 29        if( pArg )
114a0 7b 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e  {.        pArg->
114b0 70 53 74 6d 74 20 3d 20 70 53 74 6d 74 3b 0a 20  pStmt = pStmt;. 
114c0 20 20 20 20 20 20 20 70 41 72 67 2d 3e 63 6e 74         pArg->cnt
114d0 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20   = 0;.      }.. 
114e0 20 20 20 20 20 2f 2a 20 65 63 68 6f 20 74 68 65       /* echo the
114f0 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 69   sql statement i
11500 66 20 65 63 68 6f 20 6f 6e 20 2a 2f 0a 20 20 20  f echo on */.   
11510 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20 53     if( pArg && S
11520 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 41 72 67  hellHasFlag(pArg
11530 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29 20 29 7b  , SHFLG_Echo) ){
11540 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
11550 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
11560 22 25 73 5c 6e 22 2c 20 7a 53 74 6d 74 53 71 6c  "%s\n", zStmtSql
11570 20 3f 20 7a 53 74 6d 74 53 71 6c 20 3a 20 7a 53   ? zStmtSql : zS
11580 71 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ql);.      }..  
11590 20 20 20 20 2f 2a 20 53 68 6f 77 20 74 68 65 20      /* Show the 
115a0 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
115b0 41 4e 20 69 66 20 2e 65 71 70 20 69 73 20 6f 6e  AN if .eqp is on
115c0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 41   */.      if( pA
115d0 72 67 20 26 26 20 70 41 72 67 2d 3e 61 75 74 6f  rg && pArg->auto
115e0 45 51 50 20 26 26 20 73 71 6c 69 74 65 33 5f 73  EQP && sqlite3_s
115f0 74 72 6c 69 6b 65 28 22 45 58 50 4c 41 49 4e 25  trlike("EXPLAIN%
11600 22 2c 7a 53 74 6d 74 53 71 6c 2c 30 29 21 3d 30  ",zStmtSql,0)!=0
11610 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
11620 74 65 33 5f 73 74 6d 74 20 2a 70 45 78 70 6c 61  te3_stmt *pExpla
11630 69 6e 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72  in;.        char
11640 20 2a 7a 45 51 50 3b 0a 20 20 20 20 20 20 20 20   *zEQP;.        
11650 64 69 73 61 62 6c 65 5f 64 65 62 75 67 5f 74 72  disable_debug_tr
11660 61 63 65 5f 6d 6f 64 65 73 28 29 3b 0a 20 20 20  ace_modes();.   
11670 20 20 20 20 20 7a 45 51 50 20 3d 20 73 71 6c 69       zEQP = sqli
11680 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 45 58 50  te3_mprintf("EXP
11690 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
116a0 25 73 22 2c 20 7a 53 74 6d 74 53 71 6c 29 3b 0a  %s", zStmtSql);.
116b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
116c0 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
116d0 64 62 2c 20 7a 45 51 50 2c 20 2d 31 2c 20 26 70  db, zEQP, -1, &p
116e0 45 78 70 6c 61 69 6e 2c 20 30 29 3b 0a 20 20 20  Explain, 0);.   
116f0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
11700 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
11710 20 20 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74      while( sqlit
11720 65 33 5f 73 74 65 70 28 70 45 78 70 6c 61 69 6e  e3_step(pExplain
11730 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
11740 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 77  .            raw
11750 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
11760 74 2c 22 2d 2d 45 51 50 2d 2d 20 25 64 2c 22 2c  t,"--EQP-- %d,",
11770 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
11780 6e 74 28 70 45 78 70 6c 61 69 6e 2c 20 30 29 29  nt(pExplain, 0))
11790 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61  ;.            ra
117a0 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
117b0 75 74 2c 22 25 64 2c 22 2c 20 73 71 6c 69 74 65  ut,"%d,", sqlite
117c0 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45 78  3_column_int(pEx
117d0 70 6c 61 69 6e 2c 20 31 29 29 3b 0a 20 20 20 20  plain, 1));.    
117e0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
117f0 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25 64  tf(pArg->out,"%d
11800 2c 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ,", sqlite3_colu
11810 6d 6e 5f 69 6e 74 28 70 45 78 70 6c 61 69 6e 2c  mn_int(pExplain,
11820 20 32 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20   2));.          
11830 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41    utf8_printf(pA
11840 72 67 2d 3e 6f 75 74 2c 22 25 73 5c 6e 22 2c 20  rg->out,"%s\n", 
11850 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
11860 65 78 74 28 70 45 78 70 6c 61 69 6e 2c 20 33 29  ext(pExplain, 3)
11870 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
11880 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11890 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
118a0 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20  e(pExplain);.   
118b0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
118c0 65 28 7a 45 51 50 29 3b 0a 20 20 20 20 20 20 20  e(zEQP);.       
118d0 20 69 66 28 20 70 41 72 67 2d 3e 61 75 74 6f 45   if( pArg->autoE
118e0 51 50 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20 20  QP>=2 ){.       
118f0 20 20 20 2f 2a 20 41 6c 73 6f 20 64 6f 20 61 6e     /* Also do an
11900 20 45 58 50 4c 41 49 4e 20 66 6f 72 20 22 2e 65   EXPLAIN for ".e
11910 71 70 20 66 75 6c 6c 22 20 6d 6f 64 65 20 2a 2f  qp full" mode */
11920 0a 20 20 20 20 20 20 20 20 20 20 7a 45 51 50 20  .          zEQP 
11930 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
11940 66 28 22 45 58 50 4c 41 49 4e 20 25 73 22 2c 20  f("EXPLAIN %s", 
11950 7a 53 74 6d 74 53 71 6c 29 3b 0a 20 20 20 20 20  zStmtSql);.     
11960 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
11970 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c  3_prepare_v2(db,
11980 20 7a 45 51 50 2c 20 2d 31 2c 20 26 70 45 78 70   zEQP, -1, &pExp
11990 6c 61 69 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20  lain, 0);.      
119a0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
119b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
119c0 20 20 20 20 20 70 41 72 67 2d 3e 63 4d 6f 64 65       pArg->cMode
119d0 20 3d 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 3b   = MODE_Explain;
119e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 78 70  .            exp
119f0 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72  lain_data_prepar
11a00 65 28 70 41 72 67 2c 20 70 45 78 70 6c 61 69 6e  e(pArg, pExplain
11a10 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  );.            e
11a20 78 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74 6d  xec_prepared_stm
11a30 74 28 70 41 72 67 2c 20 70 45 78 70 6c 61 69 6e  t(pArg, pExplain
11a40 2c 20 78 43 61 6c 6c 62 61 63 6b 29 3b 0a 20 20  , xCallback);.  
11a50 20 20 20 20 20 20 20 20 20 20 65 78 70 6c 61 69            explai
11a60 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 70 41  n_data_delete(pA
11a70 72 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  rg);.          }
11a80 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11a90 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78 70  e3_finalize(pExp
11aa0 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  lain);.         
11ab0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
11ac0 51 50 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  QP);.        }. 
11ad0 20 20 20 20 20 20 20 72 65 73 74 6f 72 65 5f 64         restore_d
11ae0 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65 73  ebug_trace_modes
11af0 28 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  ();.      }..   
11b00 20 20 20 69 66 28 20 70 41 72 67 20 29 7b 0a 20     if( pArg ){. 
11b10 20 20 20 20 20 20 20 70 41 72 67 2d 3e 63 4d 6f         pArg->cMo
11b20 64 65 20 3d 20 70 41 72 67 2d 3e 6d 6f 64 65 3b  de = pArg->mode;
11b30 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 41 72  .        if( pAr
11b40 67 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 0a 20  g->autoExplain. 
11b50 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74          && sqlit
11b60 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
11b70 70 53 74 6d 74 29 3d 3d 38 0a 20 20 20 20 20 20  pStmt)==8.      
11b80 20 20 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74     && sqlite3_st
11b90 72 6c 69 6b 65 28 22 45 58 50 4c 41 49 4e 25 22  rlike("EXPLAIN%"
11ba0 2c 20 7a 53 74 6d 74 53 71 6c 2c 30 29 3d 3d 30  , zStmtSql,0)==0
11bb0 0a 20 20 20 20 20 20 20 20 29 7b 0a 20 20 20 20  .        ){.    
11bc0 20 20 20 20 20 20 70 41 72 67 2d 3e 63 4d 6f 64        pArg->cMod
11bd0 65 20 3d 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e  e = MODE_Explain
11be0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  ;.        }..   
11bf0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73       /* If the s
11c00 68 65 6c 6c 20 69 73 20 63 75 72 72 65 6e 74 6c  hell is currentl
11c10 79 20 69 6e 20 22 2e 65 78 70 6c 61 69 6e 22 20  y in ".explain" 
11c20 6d 6f 64 65 2c 20 67 61 74 68 65 72 20 74 68 65  mode, gather the
11c30 20 65 78 74 72 61 0a 20 20 20 20 20 20 20 20 2a   extra.        *
11c40 2a 20 64 61 74 61 20 72 65 71 75 69 72 65 64 20  * data required 
11c50 74 6f 20 61 64 64 20 69 6e 64 65 6e 74 73 20 74  to add indents t
11c60 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 2a 2f 0a  o the output.*/.
11c70 20 20 20 20 20 20 20 20 69 66 28 20 70 41 72 67          if( pArg
11c80 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78  ->cMode==MODE_Ex
11c90 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20  plain ){.       
11ca0 20 20 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f     explain_data_
11cb0 70 72 65 70 61 72 65 28 70 41 72 67 2c 20 70 53  prepare(pArg, pS
11cc0 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  tmt);.        }.
11cd0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 65        }..      e
11ce0 78 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74 6d  xec_prepared_stm
11cf0 74 28 70 41 72 67 2c 20 70 53 74 6d 74 2c 20 78  t(pArg, pStmt, x
11d00 43 61 6c 6c 62 61 63 6b 29 3b 0a 20 20 20 20 20  Callback);.     
11d10 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f 64 65   explain_data_de
11d20 6c 65 74 65 28 70 41 72 67 29 3b 0a 0a 20 20 20  lete(pArg);..   
11d30 20 20 20 2f 2a 20 70 72 69 6e 74 20 75 73 61 67     /* print usag
11d40 65 20 73 74 61 74 73 20 69 66 20 73 74 61 74 73  e stats if stats
11d50 20 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28   on */.      if(
11d60 20 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e 73   pArg && pArg->s
11d70 74 61 74 73 4f 6e 20 29 7b 0a 20 20 20 20 20 20  tatsOn ){.      
11d80 20 20 64 69 73 70 6c 61 79 5f 73 74 61 74 73 28    display_stats(
11d90 64 62 2c 20 70 41 72 67 2c 20 30 29 3b 0a 20 20  db, pArg, 0);.  
11da0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
11db0 70 72 69 6e 74 20 6c 6f 6f 70 2d 63 6f 75 6e 74  print loop-count
11dc0 65 72 73 20 69 66 20 72 65 71 75 69 72 65 64 20  ers if required 
11dd0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 41 72  */.      if( pAr
11de0 67 20 26 26 20 70 41 72 67 2d 3e 73 63 61 6e 73  g && pArg->scans
11df0 74 61 74 73 4f 6e 20 29 7b 0a 20 20 20 20 20 20  tatsOn ){.      
11e00 20 20 64 69 73 70 6c 61 79 5f 73 63 61 6e 73 74    display_scanst
11e10 61 74 73 28 64 62 2c 20 70 41 72 67 29 3b 0a 20  ats(db, pArg);. 
11e20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
11e30 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 73 74   Finalize the st
11e40 61 74 65 6d 65 6e 74 20 6a 75 73 74 20 65 78 65  atement just exe
11e50 63 75 74 65 64 2e 20 49 66 20 74 68 69 73 20 66  cuted. If this f
11e60 61 69 6c 73 2c 20 73 61 76 65 20 61 0a 20 20 20  ails, save a.   
11e70 20 20 20 2a 2a 20 63 6f 70 79 20 6f 66 20 74 68     ** copy of th
11e80 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  e error message.
11e90 20 4f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20   Otherwise, set 
11ea0 7a 53 71 6c 20 74 6f 20 70 6f 69 6e 74 20 74 6f  zSql to point to
11eb0 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6e 65   the.      ** ne
11ec0 78 74 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  xt statement to 
11ed0 65 78 65 63 75 74 65 2e 20 2a 2f 0a 20 20 20 20  execute. */.    
11ee0 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f    rc2 = sqlite3_
11ef0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
11f00 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
11f10 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 20 72 63  QLITE_NOMEM ) rc
11f20 20 3d 20 72 63 32 3b 0a 20 20 20 20 20 20 69 66   = rc2;.      if
11f30 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
11f40 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 20  ){.        zSql 
11f50 3d 20 7a 4c 65 66 74 6f 76 65 72 3b 0a 20 20 20  = zLeftover;.   
11f60 20 20 20 20 20 77 68 69 6c 65 28 20 49 73 53 70       while( IsSp
11f70 61 63 65 28 7a 53 71 6c 5b 30 5d 29 20 29 20 7a  ace(zSql[0]) ) z
11f80 53 71 6c 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c  Sql++;.      }el
11f90 73 65 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20  se if( pzErrMsg 
11fa0 29 7b 0a 20 20 20 20 20 20 20 20 2a 70 7a 45 72  ){.        *pzEr
11fb0 72 4d 73 67 20 3d 20 73 61 76 65 5f 65 72 72 5f  rMsg = save_err_
11fc0 6d 73 67 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  msg(db);.      }
11fd0 0a 0a 20 20 20 20 20 20 2f 2a 20 63 6c 65 61 72  ..      /* clear
11fe0 20 73 61 76 65 64 20 73 74 6d 74 20 68 61 6e 64   saved stmt hand
11ff0 6c 65 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  le */.      if( 
12000 70 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20  pArg ){.        
12010 70 41 72 67 2d 3e 70 53 74 6d 74 20 3d 20 4e 55  pArg->pStmt = NU
12020 4c 4c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  LL;.      }.    
12030 7d 0a 20 20 7d 20 2f 2a 20 65 6e 64 20 77 68 69  }.  } /* end whi
12040 6c 65 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20  le */..  return 
12050 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 6c  rc;.}../*.** Rel
12060 65 61 73 65 20 6d 65 6d 6f 72 79 20 70 72 65 76  ease memory prev
12070 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64  iously allocated
12080 20 62 79 20 74 61 62 6c 65 43 6f 6c 75 6d 6e 4c   by tableColumnL
12090 69 73 74 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  ist()..*/.static
120a0 20 76 6f 69 64 20 66 72 65 65 43 6f 6c 75 6d 6e   void freeColumn
120b0 4c 69 73 74 28 63 68 61 72 20 2a 2a 61 7a 43 6f  List(char **azCo
120c0 6c 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  l){.  int i;.  f
120d0 6f 72 28 69 3d 31 3b 20 61 7a 43 6f 6c 5b 69 5d  or(i=1; azCol[i]
120e0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  ; i++){.    sqli
120f0 74 65 33 5f 66 72 65 65 28 61 7a 43 6f 6c 5b 69  te3_free(azCol[i
12100 5d 29 3b 0a 20 20 7d 0a 20 20 2f 2a 20 61 7a 43  ]);.  }.  /* azC
12110 6f 6c 5b 30 5d 20 69 73 20 61 20 73 74 61 74 69  ol[0] is a stati
12120 63 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 73 71  c string */.  sq
12130 6c 69 74 65 33 5f 66 72 65 65 28 61 7a 43 6f 6c  lite3_free(azCol
12140 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  );.}../*.** Retu
12150 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 70 6f 69  rn a list of poi
12160 6e 74 65 72 73 20 74 6f 20 73 74 72 69 6e 67 73  nters to strings
12170 20 77 68 69 63 68 20 61 72 65 20 74 68 65 20 6e   which are the n
12180 61 6d 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 63  ames of all.** c
12190 6f 6c 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65 20  olumns in table 
121a0 7a 54 61 62 2e 20 20 20 54 68 65 20 6d 65 6d 6f  zTab.   The memo
121b0 72 79 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6e  ry to hold the n
121c0 61 6d 65 73 20 69 73 20 64 79 6e 61 6d 69 63 61  ames is dynamica
121d0 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  lly.** allocated
121e0 20 61 6e 64 20 6d 75 73 74 20 62 65 20 72 65 6c   and must be rel
121f0 65 61 73 65 64 20 62 79 20 74 68 65 20 63 61 6c  eased by the cal
12200 6c 65 72 20 75 73 69 6e 67 20 61 20 73 75 62 73  ler using a subs
12210 65 71 75 65 6e 74 20 63 61 6c 6c 0a 2a 2a 20 74  equent call.** t
12220 6f 20 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74  o freeColumnList
12230 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 7a  ()..**.** The az
12240 43 6f 6c 5b 30 5d 20 65 6e 74 72 79 20 69 73 20  Col[0] entry is 
12250 75 73 75 61 6c 6c 79 20 4e 55 4c 4c 2e 20 20 48  usually NULL.  H
12260 6f 77 65 76 65 72 2c 20 69 66 20 7a 54 61 62 20  owever, if zTab 
12270 63 6f 6e 74 61 69 6e 73 20 61 20 72 6f 77 69 64  contains a rowid
12280 0a 2a 2a 20 76 61 6c 75 65 20 74 68 61 74 20 6e  .** value that n
12290 65 65 64 73 20 74 6f 20 62 65 20 70 72 65 73 65  eeds to be prese
122a0 72 76 65 64 2c 20 74 68 65 6e 20 61 7a 43 6f 6c  rved, then azCol
122b0 5b 30 5d 20 69 73 20 66 69 6c 6c 65 64 20 69 6e  [0] is filled in
122c0 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 61 6d   with the.** nam
122d0 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 63  e of the rowid c
122e0 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  olumn..**.** The
122f0 20 66 69 72 73 74 20 72 65 67 75 6c 61 72 20 63   first regular c
12300 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62  olumn in the tab
12310 6c 65 20 69 73 20 61 7a 43 6f 6c 5b 31 5d 2e 20  le is azCol[1]. 
12320 20 54 68 65 20 6c 69 73 74 20 69 73 20 74 65 72   The list is ter
12330 6d 69 6e 61 74 65 64 0a 2a 2a 20 62 79 20 61 6e  minated.** by an
12340 20 65 6e 74 72 79 20 77 69 74 68 20 61 7a 43 6f   entry with azCo
12350 6c 5b 69 5d 3d 3d 30 2e 0a 2a 2f 0a 73 74 61 74  l[i]==0..*/.stat
12360 69 63 20 63 68 61 72 20 2a 2a 74 61 62 6c 65 43  ic char **tableC
12370 6f 6c 75 6d 6e 4c 69 73 74 28 53 68 65 6c 6c 53  olumnList(ShellS
12380 74 61 74 65 20 2a 70 2c 20 63 6f 6e 73 74 20 63  tate *p, const c
12390 68 61 72 20 2a 7a 54 61 62 29 7b 0a 20 20 63 68  har *zTab){.  ch
123a0 61 72 20 2a 2a 61 7a 43 6f 6c 20 3d 20 30 3b 0a  ar **azCol = 0;.
123b0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
123c0 70 53 74 6d 74 3b 0a 20 20 63 68 61 72 20 2a 7a  pStmt;.  char *z
123d0 53 71 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 20  Sql;.  int nCol 
123e0 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f  = 0;.  int nAllo
123f0 63 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 50 4b  c = 0;.  int nPK
12400 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e   = 0;       /* N
12410 75 6d 62 65 72 20 6f 66 20 50 52 49 4d 41 52 59  umber of PRIMARY
12420 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 73 65 65   KEY columns see
12430 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 50 4b  n */.  int isIPK
12440 20 3d 20 30 3b 20 20 20 20 20 2f 2a 20 54 72 75   = 0;     /* Tru
12450 65 20 69 66 20 6f 6e 65 20 50 52 49 4d 41 52 59  e if one PRIMARY
12460 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   KEY column of t
12470 79 70 65 20 49 4e 54 45 47 45 52 20 2a 2f 0a 20  ype INTEGER */. 
12480 20 69 6e 74 20 70 72 65 73 65 72 76 65 52 6f 77   int preserveRow
12490 69 64 20 3d 20 53 68 65 6c 6c 48 61 73 46 6c 61  id = ShellHasFla
124a0 67 28 70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65  g(p, SHFLG_Prese
124b0 72 76 65 52 6f 77 69 64 29 3b 0a 20 20 69 6e 74  rveRowid);.  int
124c0 20 72 63 3b 0a 0a 20 20 7a 53 71 6c 20 3d 20 73   rc;..  zSql = s
124d0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
124e0 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66  PRAGMA table_inf
124f0 6f 3d 25 51 22 2c 20 7a 54 61 62 29 3b 0a 20 20  o=%Q", zTab);.  
12500 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
12510 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
12520 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
12530 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66   0);.  sqlite3_f
12540 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 69 66 28  ree(zSql);.  if(
12550 20 72 63 20 29 20 72 65 74 75 72 6e 20 30 3b 0a   rc ) return 0;.
12560 20 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65 33    while( sqlite3
12570 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51  _step(pStmt)==SQ
12580 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
12590 69 66 28 20 6e 43 6f 6c 3e 3d 6e 41 6c 6c 6f 63  if( nCol>=nAlloc
125a0 2d 32 20 29 7b 0a 20 20 20 20 20 20 6e 41 6c 6c  -2 ){.      nAll
125b0 6f 63 20 3d 20 6e 41 6c 6c 6f 63 2a 32 20 2b 20  oc = nAlloc*2 + 
125c0 6e 43 6f 6c 20 2b 20 31 30 3b 0a 20 20 20 20 20  nCol + 10;.     
125d0 20 61 7a 43 6f 6c 20 3d 20 73 71 6c 69 74 65 33   azCol = sqlite3
125e0 5f 72 65 61 6c 6c 6f 63 28 61 7a 43 6f 6c 2c 20  _realloc(azCol, 
125f0 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f 66 28 61 7a  nAlloc*sizeof(az
12600 43 6f 6c 5b 30 5d 29 29 3b 0a 20 20 20 20 20 20  Col[0]));.      
12610 69 66 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 7b 0a  if( azCol==0 ){.
12620 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
12630 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
12640 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  r: out of memory
12650 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 65 78  \n");.        ex
12660 69 74 28 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20  it(1);.      }. 
12670 20 20 20 7d 0a 20 20 20 20 61 7a 43 6f 6c 5b 2b     }.    azCol[+
12680 2b 6e 43 6f 6c 5d 20 3d 20 73 71 6c 69 74 65 33  +nCol] = sqlite3
12690 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 73  _mprintf("%s", s
126a0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
126b0 78 74 28 70 53 74 6d 74 2c 20 31 29 29 3b 0a 20  xt(pStmt, 1));. 
126c0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 63     if( sqlite3_c
126d0 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c  olumn_int(pStmt,
126e0 20 35 29 20 29 7b 0a 20 20 20 20 20 20 6e 50 4b   5) ){.      nPK
126f0 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 50  ++;.      if( nP
12700 4b 3d 3d 31 0a 20 20 20 20 20 20 20 26 26 20 73  K==1.       && s
12710 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 28  qlite3_stricmp((
12720 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
12730 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
12740 70 53 74 6d 74 2c 32 29 2c 0a 20 20 20 20 20 20  pStmt,2),.      
12750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12760 20 20 20 20 22 49 4e 54 45 47 45 52 22 29 3d 3d      "INTEGER")==
12770 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
12780 20 20 20 69 73 49 50 4b 20 3d 20 31 3b 0a 20 20     isIPK = 1;.  
12790 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
127a0 20 20 20 69 73 49 50 4b 20 3d 20 30 3b 0a 20 20     isIPK = 0;.  
127b0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
127c0 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
127d0 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 69 66 28  ze(pStmt);.  if(
127e0 20 61 7a 43 6f 6c 3d 3d 30 20 29 20 72 65 74 75   azCol==0 ) retu
127f0 72 6e 20 30 3b 0a 20 20 61 7a 43 6f 6c 5b 30 5d  rn 0;.  azCol[0]
12800 20 3d 20 30 3b 0a 20 20 61 7a 43 6f 6c 5b 6e 43   = 0;.  azCol[nC
12810 6f 6c 2b 31 5d 20 3d 20 30 3b 0a 0a 20 20 2f 2a  ol+1] = 0;..  /*
12820 20 54 68 65 20 64 65 63 69 73 69 6f 6e 20 6f 66   The decision of
12830 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
12840 61 20 72 6f 77 69 64 20 72 65 61 6c 6c 79 20 6e  a rowid really n
12850 65 65 64 73 20 74 6f 20 62 65 20 70 72 65 73 65  eeds to be prese
12860 72 76 65 64 0a 20 20 2a 2a 20 69 73 20 74 72 69  rved.  ** is tri
12870 63 6b 79 2e 20 20 57 65 20 6e 65 76 65 72 20 6e  cky.  We never n
12880 65 65 64 20 74 6f 20 70 72 65 73 65 72 76 65 20  eed to preserve 
12890 61 20 72 6f 77 69 64 20 66 6f 72 20 61 20 57 49  a rowid for a WI
128a0 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
128b0 65 0a 20 20 2a 2a 20 6f 72 20 61 20 74 61 62 6c  e.  ** or a tabl
128c0 65 20 77 69 74 68 20 61 6e 20 49 4e 54 45 47 45  e with an INTEGE
128d0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20  R PRIMARY KEY.  
128e0 57 65 20 61 72 65 20 75 6e 61 62 6c 65 20 74 6f  We are unable to
128f0 20 70 72 65 73 65 72 76 65 0a 20 20 2a 2a 20 72   preserve.  ** r
12900 6f 77 69 64 73 20 6f 6e 20 74 61 62 6c 65 73 20  owids on tables 
12910 77 68 65 72 65 20 74 68 65 20 72 6f 77 69 64 20  where the rowid 
12920 69 73 20 69 6e 61 63 63 65 73 73 69 62 6c 65 20  is inaccessible 
12930 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
12940 65 20 6f 74 68 65 72 0a 20 20 2a 2a 20 63 6f 6c  e other.  ** col
12950 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
12960 65 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22 2c  e named "rowid",
12970 20 22 5f 72 6f 77 69 64 5f 22 2c 20 61 6e 64 20   "_rowid_", and 
12980 22 6f 69 64 22 2e 0a 20 20 2a 2f 0a 20 20 69 66  "oid"..  */.  if
12990 28 20 70 72 65 73 65 72 76 65 52 6f 77 69 64 20  ( preserveRowid 
129a0 26 26 20 69 73 49 50 4b 20 29 7b 0a 20 20 20 20  && isIPK ){.    
129b0 2f 2a 20 49 66 20 61 20 73 69 6e 67 6c 65 20 50  /* If a single P
129c0 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d  RIMARY KEY colum
129d0 6e 20 77 69 74 68 20 74 79 70 65 20 49 4e 54 45  n with type INTE
129e0 47 45 52 20 77 61 73 20 73 65 65 6e 2c 20 74 68  GER was seen, th
129f0 65 6e 20 69 74 0a 20 20 20 20 2a 2a 20 6d 69 67  en it.    ** mig
12a00 68 74 20 62 65 20 61 6e 20 61 6c 69 73 65 20 66  ht be an alise f
12a10 6f 72 20 74 68 65 20 52 4f 57 49 44 2e 20 20 42  or the ROWID.  B
12a20 75 74 20 69 74 20 6d 69 67 68 74 20 61 6c 73 6f  ut it might also
12a30 20 62 65 20 61 20 57 49 54 48 4f 55 54 20 52 4f   be a WITHOUT RO
12a40 57 49 44 0a 20 20 20 20 2a 2a 20 74 61 62 6c 65  WID.    ** table
12a50 20 6f 72 20 61 20 49 4e 54 45 47 45 52 20 50 52   or a INTEGER PR
12a60 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43 20 63  IMARY KEY DESC c
12a70 6f 6c 75 6d 6e 2c 20 6e 65 69 74 68 65 72 20 6f  olumn, neither o
12a80 66 20 77 68 69 63 68 20 61 72 65 0a 20 20 20 20  f which are.    
12a90 2a 2a 20 52 4f 57 49 44 20 61 6c 69 61 73 65 73  ** ROWID aliases
12aa0 2e 20 20 54 6f 20 64 69 73 74 69 6e 67 75 69 73  .  To distinguis
12ab0 68 20 74 68 65 73 65 20 63 61 73 65 73 2c 20 63  h these cases, c
12ac0 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 0a 20  heck to see if. 
12ad0 20 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61     ** there is a
12ae0 20 22 70 6b 22 20 65 6e 74 72 79 20 69 6e 20 22   "pk" entry in "
12af0 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73  PRAGMA index_lis
12b00 74 22 2e 20 20 54 68 65 72 65 20 77 69 6c 6c 20  t".  There will 
12b10 62 65 0a 20 20 20 20 2a 2a 20 6e 6f 20 22 70 6b  be.    ** no "pk
12b20 22 20 69 6e 64 65 78 20 69 66 20 74 68 65 20 50  " index if the P
12b30 52 49 4d 41 52 59 20 4b 45 59 20 72 65 61 6c 6c  RIMARY KEY reall
12b40 79 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  y is an alias fo
12b50 72 20 74 68 65 20 52 4f 57 49 44 2e 0a 20 20 20  r the ROWID..   
12b60 20 2a 2f 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73   */.    zSql = s
12b70 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
12b80 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 70 72  SELECT 1 FROM pr
12b90 61 67 6d 61 5f 69 6e 64 65 78 5f 6c 69 73 74 28  agma_index_list(
12ba0 25 51 29 22 0a 20 20 20 20 20 20 20 20 20 20 20  %Q)".           
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bc0 22 20 57 48 45 52 45 20 6f 72 69 67 69 6e 3d 27  " WHERE origin='
12bd0 70 6b 27 22 2c 20 7a 54 61 62 29 3b 0a 20 20 20  pk'", zTab);.   
12be0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
12bf0 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
12c00 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74  zSql, -1, &pStmt
12c10 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
12c20 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  3_free(zSql);.  
12c30 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
12c40 20 20 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74    freeColumnList
12c50 28 61 7a 43 6f 6c 29 3b 0a 20 20 20 20 20 20 72  (azCol);.      r
12c60 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20  eturn 0;.    }. 
12c70 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
12c80 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20 20  step(pStmt);.   
12c90 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
12ca0 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 70 72  e(pStmt);.    pr
12cb0 65 73 65 72 76 65 52 6f 77 69 64 20 3d 20 72 63  eserveRowid = rc
12cc0 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  ==SQLITE_ROW;.  
12cd0 7d 0a 20 20 69 66 28 20 70 72 65 73 65 72 76 65  }.  if( preserve
12ce0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 2f 2a 20  Rowid ){.    /* 
12cf0 4f 6e 6c 79 20 70 72 65 73 65 72 76 65 20 74 68  Only preserve th
12d00 65 20 72 6f 77 69 64 20 69 66 20 77 65 20 63 61  e rowid if we ca
12d10 6e 20 66 69 6e 64 20 61 20 6e 61 6d 65 20 74 6f  n find a name to
12d20 20 75 73 65 20 66 6f 72 20 74 68 65 0a 20 20 20   use for the.   
12d30 20 2a 2a 20 72 6f 77 69 64 20 2a 2f 0a 20 20 20   ** rowid */.   
12d40 20 73 74 61 74 69 63 20 63 68 61 72 20 2a 61 7a   static char *az
12d50 52 6f 77 69 64 5b 5d 20 3d 20 7b 20 22 72 6f 77  Rowid[] = { "row
12d60 69 64 22 2c 20 22 5f 72 6f 77 69 64 5f 22 2c 20  id", "_rowid_", 
12d70 22 6f 69 64 22 20 7d 3b 0a 20 20 20 20 69 6e 74  "oid" };.    int
12d80 20 69 2c 20 6a 3b 0a 20 20 20 20 66 6f 72 28 6a   i, j;.    for(j
12d90 3d 30 3b 20 6a 3c 33 3b 20 6a 2b 2b 29 7b 0a 20  =0; j<3; j++){. 
12da0 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c       for(i=1; i<
12db0 3d 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20  =nCol; i++){.   
12dc0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
12dd0 5f 73 74 72 69 63 6d 70 28 61 7a 52 6f 77 69 64  _stricmp(azRowid
12de0 5b 6a 5d 2c 61 7a 43 6f 6c 5b 69 5d 29 3d 3d 30  [j],azCol[i])==0
12df0 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
12e00 7d 0a 20 20 20 20 20 20 69 66 28 20 69 3e 6e 43  }.      if( i>nC
12e10 6f 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  ol ){.        /*
12e20 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point, 
12e30 77 65 20 6b 6e 6f 77 20 74 68 61 74 20 61 7a 52  we know that azR
12e40 6f 77 69 64 5b 6a 5d 20 69 73 20 6e 6f 74 20 74  owid[j] is not t
12e50 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 79 0a 20  he name of any. 
12e60 20 20 20 20 20 20 20 2a 2a 20 6f 72 64 69 6e 61         ** ordina
12e70 72 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ry column in the
12e80 20 74 61 62 6c 65 2e 20 20 56 65 72 69 66 79 20   table.  Verify 
12e90 74 68 61 74 20 61 7a 52 6f 77 69 64 5b 6a 5d 20  that azRowid[j] 
12ea0 69 73 20 61 20 76 61 6c 69 64 0a 20 20 20 20 20  is a valid.     
12eb0 20 20 20 2a 2a 20 6e 61 6d 65 20 66 6f 72 20 74     ** name for t
12ec0 68 65 20 72 6f 77 69 64 20 62 65 66 6f 72 65 20  he rowid before 
12ed0 61 64 64 69 6e 67 20 69 74 20 74 6f 20 61 7a 43  adding it to azC
12ee0 6f 6c 5b 30 5d 2e 20 20 57 49 54 48 4f 55 54 20  ol[0].  WITHOUT 
12ef0 52 4f 57 49 44 0a 20 20 20 20 20 20 20 20 2a 2a  ROWID.        **
12f00 20 74 61 62 6c 65 73 20 77 69 6c 6c 20 66 61 69   tables will fai
12f10 6c 20 74 68 69 73 20 6c 61 73 74 20 63 68 65 63  l this last chec
12f20 6b 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20  k */.        rc 
12f30 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  = sqlite3_table_
12f40 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28  column_metadata(
12f50 70 2d 3e 64 62 2c 30 2c 7a 54 61 62 2c 61 7a 52  p->db,0,zTab,azR
12f60 6f 77 69 64 5b 6a 5d 2c 30 2c 30 2c 30 2c 30 2c  owid[j],0,0,0,0,
12f70 30 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  0);.        if( 
12f80 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
12f90 61 7a 43 6f 6c 5b 30 5d 20 3d 20 61 7a 52 6f 77  azCol[0] = azRow
12fa0 69 64 5b 6a 5d 3b 0a 20 20 20 20 20 20 20 20 62  id[j];.        b
12fb0 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
12fc0 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
12fd0 20 61 7a 43 6f 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   azCol;.}../*.**
12fe0 20 54 6f 67 67 6c 65 20 74 68 65 20 72 65 76 65   Toggle the reve
12ff0 72 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73 65  rse_unordered_se
13000 6c 65 63 74 73 20 73 65 74 74 69 6e 67 2e 0a 2a  lects setting..*
13010 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 6f  /.static void to
13020 67 67 6c 65 53 65 6c 65 63 74 4f 72 64 65 72 28  ggleSelectOrder(
13030 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
13040 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
13050 74 6d 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69  tmt = 0;.  int i
13060 53 65 74 74 69 6e 67 20 3d 20 30 3b 0a 20 20 63  Setting = 0;.  c
13070 68 61 72 20 7a 53 74 6d 74 5b 31 30 30 5d 3b 0a  har zStmt[100];.
13080 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72    sqlite3_prepar
13090 65 5f 76 32 28 64 62 2c 20 22 50 52 41 47 4d 41  e_v2(db, "PRAGMA
130a0 20 72 65 76 65 72 73 65 5f 75 6e 6f 72 64 65 72   reverse_unorder
130b0 65 64 5f 73 65 6c 65 63 74 73 22 2c 20 2d 31 2c  ed_selects", -1,
130c0 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 69   &pStmt, 0);.  i
130d0 66 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  f( sqlite3_step(
130e0 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52  pStmt)==SQLITE_R
130f0 4f 57 20 29 7b 0a 20 20 20 20 69 53 65 74 74 69  OW ){.    iSetti
13100 6e 67 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ng = sqlite3_col
13110 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 20 30  umn_int(pStmt, 0
13120 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
13130 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
13140 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  ;.  sqlite3_snpr
13150 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 53 74 6d  intf(sizeof(zStm
13160 74 29 2c 20 7a 53 74 6d 74 2c 0a 20 20 20 20 20  t), zStmt,.     
13170 20 20 22 50 52 41 47 4d 41 20 72 65 76 65 72 73    "PRAGMA revers
13180 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73 65 6c 65  e_unordered_sele
13190 63 74 73 28 25 64 29 22 2c 20 21 69 53 65 74 74  cts(%d)", !iSett
131a0 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  ing);.  sqlite3_
131b0 65 78 65 63 28 64 62 2c 20 7a 53 74 6d 74 2c 20  exec(db, zStmt, 
131c0 30 2c 20 30 2c 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a  0, 0, 0);.}../*.
131d0 2a 2a 20 54 68 69 73 20 69 73 20 61 20 64 69 66  ** This is a dif
131e0 66 65 72 65 6e 74 20 63 61 6c 6c 62 61 63 6b 20  ferent callback 
131f0 72 6f 75 74 69 6e 65 20 75 73 65 64 20 66 6f 72  routine used for
13200 20 64 75 6d 70 69 6e 67 20 74 68 65 20 64 61 74   dumping the dat
13210 61 62 61 73 65 2e 0a 2a 2a 20 45 61 63 68 20 72  abase..** Each r
13220 6f 77 20 72 65 63 65 69 76 65 64 20 62 79 20 74  ow received by t
13230 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e  his callback con
13240 73 69 73 74 73 20 6f 66 20 61 20 74 61 62 6c 65  sists of a table
13250 20 6e 61 6d 65 2c 0a 2a 2a 20 74 68 65 20 74 61   name,.** the ta
13260 62 6c 65 20 74 79 70 65 20 28 22 69 6e 64 65 78  ble type ("index
13270 22 20 6f 72 20 22 74 61 62 6c 65 22 29 20 61 6e  " or "table") an
13280 64 20 53 51 4c 20 74 6f 20 63 72 65 61 74 65 20  d SQL to create 
13290 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  the table..** Th
132a0 69 73 20 72 6f 75 74 69 6e 65 20 73 68 6f 75 6c  is routine shoul
132b0 64 20 70 72 69 6e 74 20 74 65 78 74 20 73 75 66  d print text suf
132c0 66 69 63 69 65 6e 74 20 74 6f 20 72 65 63 72 65  ficient to recre
132d0 61 74 65 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a  ate the table..*
132e0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64 75 6d  /.static int dum
132f0 70 5f 63 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20  p_callback(void 
13300 2a 70 41 72 67 2c 20 69 6e 74 20 6e 41 72 67 2c  *pArg, int nArg,
13310 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 63   char **azArg, c
13320 68 61 72 20 2a 2a 61 7a 4e 6f 74 55 73 65 64 29  har **azNotUsed)
13330 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 6f  {.  int rc;.  co
13340 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 6c 65  nst char *zTable
13350 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
13360 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63  zType;.  const c
13370 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 53 68 65  har *zSql;.  She
13380 6c 6c 53 74 61 74 65 20 2a 70 20 3d 20 28 53 68  llState *p = (Sh
13390 65 6c 6c 53 74 61 74 65 20 2a 29 70 41 72 67 3b  ellState *)pArg;
133a0 0a 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ..  UNUSED_PARAM
133b0 45 54 45 52 28 61 7a 4e 6f 74 55 73 65 64 29 3b  ETER(azNotUsed);
133c0 0a 20 20 69 66 28 20 6e 41 72 67 21 3d 33 20 7c  .  if( nArg!=3 |
133d0 7c 20 61 7a 41 72 67 3d 3d 30 20 29 20 72 65 74  | azArg==0 ) ret
133e0 75 72 6e 20 30 3b 0a 20 20 7a 54 61 62 6c 65 20  urn 0;.  zTable 
133f0 3d 20 61 7a 41 72 67 5b 30 5d 3b 0a 20 20 7a 54  = azArg[0];.  zT
13400 79 70 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a  ype = azArg[1];.
13410 20 20 7a 53 71 6c 20 3d 20 61 7a 41 72 67 5b 32    zSql = azArg[2
13420 5d 3b 0a 0a 20 20 69 66 28 20 73 74 72 63 6d 70  ];..  if( strcmp
13430 28 7a 54 61 62 6c 65 2c 20 22 73 71 6c 69 74 65  (zTable, "sqlite
13440 5f 73 65 71 75 65 6e 63 65 22 29 3d 3d 30 20 29  _sequence")==0 )
13450 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
13460 28 70 2d 3e 6f 75 74 2c 20 22 44 45 4c 45 54 45  (p->out, "DELETE
13470 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71   FROM sqlite_seq
13480 75 65 6e 63 65 3b 5c 6e 22 29 3b 0a 20 20 7d 65  uence;\n");.  }e
13490 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f  lse if( sqlite3_
134a0 73 74 72 67 6c 6f 62 28 22 73 71 6c 69 74 65 5f  strglob("sqlite_
134b0 73 74 61 74 3f 22 2c 20 7a 54 61 62 6c 65 29 3d  stat?", zTable)=
134c0 3d 30 20 29 7b 0a 20 20 20 20 72 61 77 5f 70 72  =0 ){.    raw_pr
134d0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 41 4e  intf(p->out, "AN
134e0 41 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73  ALYZE sqlite_mas
134f0 74 65 72 3b 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73  ter;\n");.  }els
13500 65 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 54  e if( strncmp(zT
13510 61 62 6c 65 2c 20 22 73 71 6c 69 74 65 5f 22 2c  able, "sqlite_",
13520 20 37 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65   7)==0 ){.    re
13530 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20  turn 0;.  }else 
13540 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 53 71 6c  if( strncmp(zSql
13550 2c 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41  , "CREATE VIRTUA
13560 4c 20 54 41 42 4c 45 22 2c 20 32 30 29 3d 3d 30  L TABLE", 20)==0
13570 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 49   ){.    char *zI
13580 6e 73 3b 0a 20 20 20 20 69 66 28 20 21 70 2d 3e  ns;.    if( !p->
13590 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20 29  writableSchema )
135a0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
135b0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 50 52 41 47  tf(p->out, "PRAG
135c0 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
135d0 6d 61 3d 4f 4e 3b 5c 6e 22 29 3b 0a 20 20 20 20  ma=ON;\n");.    
135e0 20 20 70 2d 3e 77 72 69 74 61 62 6c 65 53 63 68    p->writableSch
135f0 65 6d 61 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ema = 1;.    }. 
13600 20 20 20 7a 49 6e 73 20 3d 20 73 71 6c 69 74 65     zIns = sqlite
13610 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20  3_mprintf(.     
13620 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 73    "INSERT INTO s
13630 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 74 79 70  qlite_master(typ
13640 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c  e,name,tbl_name,
13650 72 6f 6f 74 70 61 67 65 2c 73 71 6c 29 22 0a 20  rootpage,sql)". 
13660 20 20 20 20 20 20 22 56 41 4c 55 45 53 28 27 74        "VALUES('t
13670 61 62 6c 65 27 2c 27 25 71 27 2c 27 25 71 27 2c  able','%q','%q',
13680 30 2c 27 25 71 27 29 3b 22 2c 0a 20 20 20 20 20  0,'%q');",.     
13690 20 20 7a 54 61 62 6c 65 2c 20 7a 54 61 62 6c 65    zTable, zTable
136a0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 75 74 66  , zSql);.    utf
136b0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
136c0 20 22 25 73 5c 6e 22 2c 20 7a 49 6e 73 29 3b 0a   "%s\n", zIns);.
136d0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
136e0 28 7a 49 6e 73 29 3b 0a 20 20 20 20 72 65 74 75  (zIns);.    retu
136f0 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rn 0;.  }else{. 
13700 20 20 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69     printSchemaLi
13710 6e 65 28 70 2d 3e 6f 75 74 2c 20 7a 53 71 6c 2c  ne(p->out, zSql,
13720 20 22 3b 5c 6e 22 29 3b 0a 20 20 7d 0a 0a 20 20   ";\n");.  }..  
13730 69 66 28 20 73 74 72 63 6d 70 28 7a 54 79 70 65  if( strcmp(zType
13740 2c 20 22 74 61 62 6c 65 22 29 3d 3d 30 20 29 7b  , "table")==0 ){
13750 0a 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20 73  .    ShellText s
13760 53 65 6c 65 63 74 3b 0a 20 20 20 20 53 68 65 6c  Select;.    Shel
13770 6c 54 65 78 74 20 73 54 61 62 6c 65 3b 0a 20 20  lText sTable;.  
13780 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 3b 0a    char **azCol;.
13790 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
137a0 68 61 72 20 2a 73 61 76 65 64 44 65 73 74 54 61  har *savedDestTa
137b0 62 6c 65 3b 0a 20 20 20 20 69 6e 74 20 73 61 76  ble;.    int sav
137c0 65 64 4d 6f 64 65 3b 0a 0a 20 20 20 20 61 7a 43  edMode;..    azC
137d0 6f 6c 20 3d 20 74 61 62 6c 65 43 6f 6c 75 6d 6e  ol = tableColumn
137e0 4c 69 73 74 28 70 2c 20 7a 54 61 62 6c 65 29 3b  List(p, zTable);
137f0 0a 20 20 20 20 69 66 28 20 61 7a 43 6f 6c 3d 3d  .    if( azCol==
13800 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 45  0 ){.      p->nE
13810 72 72 2b 2b 3b 0a 20 20 20 20 20 20 72 65 74 75  rr++;.      retu
13820 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  rn 0;.    }..   
13830 20 2f 2a 20 41 6c 77 61 79 73 20 71 75 6f 74 65   /* Always quote
13840 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 2c   the table name,
13850 20 65 76 65 6e 20 69 66 20 69 74 20 61 70 70 65   even if it appe
13860 61 72 73 20 74 6f 20 62 65 20 70 75 72 65 20 61  ars to be pure a
13870 73 63 69 69 2c 0a 20 20 20 20 2a 2a 20 69 6e 20  scii,.    ** in 
13880 63 61 73 65 20 69 74 20 69 73 20 61 20 6b 65 79  case it is a key
13890 77 6f 72 64 2e 20 45 78 3a 20 20 49 4e 53 45 52  word. Ex:  INSER
138a0 54 20 49 4e 54 4f 20 22 74 61 62 6c 65 22 20 2e  T INTO "table" .
138b0 2e 2e 20 2a 2f 0a 20 20 20 20 69 6e 69 74 54 65  .. */.    initTe
138c0 78 74 28 26 73 54 61 62 6c 65 29 3b 0a 20 20 20  xt(&sTable);.   
138d0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 54 61   appendText(&sTa
138e0 62 6c 65 2c 20 7a 54 61 62 6c 65 2c 20 71 75 6f  ble, zTable, quo
138f0 74 65 43 68 61 72 28 7a 54 61 62 6c 65 29 29 3b  teChar(zTable));
13900 0a 20 20 20 20 2f 2a 20 49 66 20 70 72 65 73 65  .    /* If prese
13910 72 76 69 6e 67 20 74 68 65 20 72 6f 77 69 64 2c  rving the rowid,
13920 20 61 64 64 20 61 20 63 6f 6c 75 6d 6e 20 6c 69   add a column li
13930 73 74 20 61 66 74 65 72 20 74 68 65 20 74 61 62  st after the tab
13940 6c 65 20 6e 61 6d 65 2e 0a 20 20 20 20 2a 2a 20  le name..    ** 
13950 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 3a 20  In other words: 
13960 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 61   "INSERT INTO ta
13970 62 28 72 6f 77 69 64 2c 61 2c 62 2c 63 2c 2e 2e  b(rowid,a,b,c,..
13980 2e 29 20 56 41 4c 55 45 53 28 2e 2e 2e 29 22 0a  .) VALUES(...)".
13990 20 20 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f      ** instead o
139a0 66 20 74 68 65 20 75 73 75 61 6c 20 22 49 4e 53  f the usual "INS
139b0 45 52 54 20 49 4e 54 4f 20 74 61 62 20 56 41 4c  ERT INTO tab VAL
139c0 55 45 53 28 2e 2e 2e 29 22 2e 0a 20 20 20 20 2a  UES(...)"..    *
139d0 2f 0a 20 20 20 20 69 66 28 20 61 7a 43 6f 6c 5b  /.    if( azCol[
139e0 30 5d 20 29 7b 0a 20 20 20 20 20 20 61 70 70 65  0] ){.      appe
139f0 6e 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20  ndText(&sTable, 
13a00 22 28 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 61  "(", 0);.      a
13a10 70 70 65 6e 64 54 65 78 74 28 26 73 54 61 62 6c  ppendText(&sTabl
13a20 65 2c 20 61 7a 43 6f 6c 5b 30 5d 2c 20 30 29 3b  e, azCol[0], 0);
13a30 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20  .      for(i=1; 
13a40 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  azCol[i]; i++){.
13a50 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
13a60 78 74 28 26 73 54 61 62 6c 65 2c 20 22 2c 22 2c  xt(&sTable, ",",
13a70 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70   0);.        app
13a80 65 6e 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c  endText(&sTable,
13a90 20 61 7a 43 6f 6c 5b 69 5d 2c 20 71 75 6f 74 65   azCol[i], quote
13aa0 43 68 61 72 28 61 7a 43 6f 6c 5b 69 5d 29 29 3b  Char(azCol[i]));
13ab0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
13ac0 70 70 65 6e 64 54 65 78 74 28 26 73 54 61 62 6c  ppendText(&sTabl
13ad0 65 2c 20 22 29 22 2c 20 30 29 3b 0a 20 20 20 20  e, ")", 0);.    
13ae0 7d 0a 0a 20 20 20 20 2f 2a 20 42 75 69 6c 64 20  }..    /* Build 
13af0 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 53  an appropriate S
13b00 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
13b10 2a 2f 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28  */.    initText(
13b20 26 73 53 65 6c 65 63 74 29 3b 0a 20 20 20 20 61  &sSelect);.    a
13b30 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
13b40 63 74 2c 20 22 53 45 4c 45 43 54 20 22 2c 20 30  ct, "SELECT ", 0
13b50 29 3b 0a 20 20 20 20 69 66 28 20 61 7a 43 6f 6c  );.    if( azCol
13b60 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 61 70 70  [0] ){.      app
13b70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
13b80 2c 20 61 7a 43 6f 6c 5b 30 5d 2c 20 30 29 3b 0a  , azCol[0], 0);.
13b90 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
13ba0 28 26 73 53 65 6c 65 63 74 2c 20 22 2c 22 2c 20  (&sSelect, ",", 
13bb0 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f  0);.    }.    fo
13bc0 72 28 69 3d 31 3b 20 61 7a 43 6f 6c 5b 69 5d 3b  r(i=1; azCol[i];
13bd0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 70   i++){.      app
13be0 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
13bf0 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 20 71 75 6f 74  , azCol[i], quot
13c00 65 43 68 61 72 28 61 7a 43 6f 6c 5b 69 5d 29 29  eChar(azCol[i]))
13c10 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 43 6f  ;.      if( azCo
13c20 6c 5b 69 2b 31 5d 20 29 7b 0a 20 20 20 20 20 20  l[i+1] ){.      
13c30 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53    appendText(&sS
13c40 65 6c 65 63 74 2c 20 22 2c 22 2c 20 30 29 3b 0a  elect, ",", 0);.
13c50 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
13c60 20 20 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74    freeColumnList
13c70 28 61 7a 43 6f 6c 29 3b 0a 20 20 20 20 61 70 70  (azCol);.    app
13c80 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
13c90 2c 20 22 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a  , " FROM ", 0);.
13ca0 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
13cb0 73 53 65 6c 65 63 74 2c 20 7a 54 61 62 6c 65 2c  sSelect, zTable,
13cc0 20 71 75 6f 74 65 43 68 61 72 28 7a 54 61 62 6c   quoteChar(zTabl
13cd0 65 29 29 3b 0a 0a 20 20 20 20 73 61 76 65 64 44  e));..    savedD
13ce0 65 73 74 54 61 62 6c 65 20 3d 20 70 2d 3e 7a 44  estTable = p->zD
13cf0 65 73 74 54 61 62 6c 65 3b 0a 20 20 20 20 73 61  estTable;.    sa
13d00 76 65 64 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64  vedMode = p->mod
13d10 65 3b 0a 20 20 20 20 70 2d 3e 7a 44 65 73 74 54  e;.    p->zDestT
13d20 61 62 6c 65 20 3d 20 73 54 61 62 6c 65 2e 7a 3b  able = sTable.z;
13d30 0a 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 70  .    p->mode = p
13d40 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f 44 45 5f 49  ->cMode = MODE_I
13d50 6e 73 65 72 74 3b 0a 20 20 20 20 72 63 20 3d 20  nsert;.    rc = 
13d60 73 68 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62  shell_exec(p->db
13d70 2c 20 73 53 65 6c 65 63 74 2e 7a 2c 20 73 68 65  , sSelect.z, she
13d80 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20  ll_callback, p, 
13d90 30 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26  0);.    if( (rc&
13da0 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
13db0 52 52 55 50 54 20 29 7b 0a 20 20 20 20 20 20 72  RRUPT ){.      r
13dc0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
13dd0 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 43 4f 52 52 55  , "/****** CORRU
13de0 50 54 49 4f 4e 20 45 52 52 4f 52 20 2a 2a 2a 2a  PTION ERROR ****
13df0 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ***/\n");.      
13e00 74 6f 67 67 6c 65 53 65 6c 65 63 74 4f 72 64 65  toggleSelectOrde
13e10 72 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20  r(p->db);.      
13e20 73 68 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62  shell_exec(p->db
13e30 2c 20 73 53 65 6c 65 63 74 2e 7a 2c 20 73 68 65  , sSelect.z, she
13e40 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20  ll_callback, p, 
13e50 30 29 3b 0a 20 20 20 20 20 20 74 6f 67 67 6c 65  0);.      toggle
13e60 53 65 6c 65 63 74 4f 72 64 65 72 28 70 2d 3e 64  SelectOrder(p->d
13e70 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  b);.    }.    p-
13e80 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d 20 73 61  >zDestTable = sa
13e90 76 65 64 44 65 73 74 54 61 62 6c 65 3b 0a 20 20  vedDestTable;.  
13ea0 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 73 61 76 65    p->mode = save
13eb0 64 4d 6f 64 65 3b 0a 20 20 20 20 66 72 65 65 54  dMode;.    freeT
13ec0 65 78 74 28 26 73 54 61 62 6c 65 29 3b 0a 20 20  ext(&sTable);.  
13ed0 20 20 66 72 65 65 54 65 78 74 28 26 73 53 65 6c    freeText(&sSel
13ee0 65 63 74 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ect);.    if( rc
13ef0 20 29 20 70 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20   ) p->nErr++;.  
13f00 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
13f10 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 7a 51 75 65 72  ./*.** Run zQuer
13f20 79 2e 20 20 55 73 65 20 64 75 6d 70 5f 63 61 6c  y.  Use dump_cal
13f30 6c 62 61 63 6b 28 29 20 61 73 20 74 68 65 20 63  lback() as the c
13f40 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20  allback routine 
13f50 73 6f 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  so that.** the c
13f60 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 71  ontents of the q
13f70 75 65 72 79 20 61 72 65 20 6f 75 74 70 75 74 20  uery are output 
13f80 61 73 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  as SQL statement
13f90 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 77 65 20 67  s..**.** If we g
13fa0 65 74 20 61 20 53 51 4c 49 54 45 5f 43 4f 52 52  et a SQLITE_CORR
13fb0 55 50 54 20 65 72 72 6f 72 2c 20 72 65 72 75 6e  UPT error, rerun
13fc0 20 74 68 65 20 71 75 65 72 79 20 61 66 74 65 72   the query after
13fd0 20 61 70 70 65 6e 64 69 6e 67 0a 2a 2a 20 22 4f   appending.** "O
13fe0 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
13ff0 53 43 22 20 74 6f 20 74 68 65 20 65 6e 64 2e 0a  SC" to the end..
14000 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 72 75  */.static int ru
14010 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71 75  n_schema_dump_qu
14020 65 72 79 28 0a 20 20 53 68 65 6c 6c 53 74 61 74  ery(.  ShellStat
14030 65 20 2a 70 2c 0a 20 20 63 6f 6e 73 74 20 63 68  e *p,.  const ch
14040 61 72 20 2a 7a 51 75 65 72 79 0a 29 7b 0a 20 20  ar *zQuery.){.  
14050 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a  int rc;.  char *
14060 7a 45 72 72 20 3d 20 30 3b 0a 20 20 72 63 20 3d  zErr = 0;.  rc =
14070 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
14080 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 64 75 6d  >db, zQuery, dum
14090 70 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 26  p_callback, p, &
140a0 7a 45 72 72 29 3b 0a 20 20 69 66 28 20 72 63 3d  zErr);.  if( rc=
140b0 3d 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20  =SQLITE_CORRUPT 
140c0 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 51 32  ){.    char *zQ2
140d0 3b 0a 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20  ;.    int len = 
140e0 73 74 72 6c 65 6e 33 30 28 7a 51 75 65 72 79 29  strlen30(zQuery)
140f0 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  ;.    raw_printf
14100 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a  (p->out, "/*****
14110 2a 20 43 4f 52 52 55 50 54 49 4f 4e 20 45 52 52  * CORRUPTION ERR
14120 4f 52 20 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 29 3b  OR *******/\n");
14130 0a 20 20 20 20 69 66 28 20 7a 45 72 72 20 29 7b  .    if( zErr ){
14140 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
14150 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a  tf(p->out, "/***
14160 2a 2a 2a 20 25 73 20 2a 2a 2a 2a 2a 2a 2f 5c 6e  *** %s ******/\n
14170 22 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20 20 20  ", zErr);.      
14180 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
14190 72 29 3b 0a 20 20 20 20 20 20 7a 45 72 72 20 3d  r);.      zErr =
141a0 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 51   0;.    }.    zQ
141b0 32 20 3d 20 6d 61 6c 6c 6f 63 28 20 6c 65 6e 2b  2 = malloc( len+
141c0 31 30 30 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  100 );.    if( z
141d0 51 32 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 72  Q2==0 ) return r
141e0 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  c;.    sqlite3_s
141f0 6e 70 72 69 6e 74 66 28 6c 65 6e 2b 31 30 30 2c  nprintf(len+100,
14200 20 7a 51 32 2c 20 22 25 73 20 4f 52 44 45 52 20   zQ2, "%s ORDER 
14210 42 59 20 72 6f 77 69 64 20 44 45 53 43 22 2c 20  BY rowid DESC", 
14220 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 72 63 20  zQuery);.    rc 
14230 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70  = sqlite3_exec(p
14240 2d 3e 64 62 2c 20 7a 51 32 2c 20 64 75 6d 70 5f  ->db, zQ2, dump_
14250 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 26 7a 45  callback, p, &zE
14260 72 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  rr);.    if( rc 
14270 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
14280 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a  intf(p->out, "/*
14290 2a 2a 2a 2a 2a 20 45 52 52 4f 52 3a 20 25 73 20  ***** ERROR: %s 
142a0 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 7a 45 72 72  ******/\n", zErr
142b0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
142c0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
142d0 43 4f 52 52 55 50 54 3b 0a 20 20 20 20 7d 0a 20  CORRUPT;.    }. 
142e0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
142f0 7a 45 72 72 29 3b 0a 20 20 20 20 66 72 65 65 28  zErr);.    free(
14300 7a 51 32 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  zQ2);.  }.  retu
14310 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
14320 54 65 78 74 20 6f 66 20 61 20 68 65 6c 70 20 6d  Text of a help m
14330 65 73 73 61 67 65 0a 2a 2f 0a 73 74 61 74 69 63  essage.*/.static
14340 20 63 68 61 72 20 7a 48 65 6c 70 5b 5d 20 3d 0a   char zHelp[] =.
14350 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
14360 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
14370 4e 0a 20 20 22 2e 61 75 74 68 20 4f 4e 7c 4f 46  N.  ".auth ON|OF
14380 46 20 20 20 20 20 20 20 20 20 20 20 53 68 6f 77  F           Show
14390 20 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c   authorizer call
143a0 62 61 63 6b 73 5c 6e 22 0a 23 65 6e 64 69 66 0a  backs\n".#endif.
143b0 20 20 22 2e 62 61 63 6b 75 70 20 3f 44 42 3f 20    ".backup ?DB? 
143c0 46 49 4c 45 20 20 20 20 20 20 42 61 63 6b 75 70  FILE      Backup
143d0 20 44 42 20 28 64 65 66 61 75 6c 74 20 5c 22 6d   DB (default \"m
143e0 61 69 6e 5c 22 29 20 74 6f 20 46 49 4c 45 5c 6e  ain\") to FILE\n
143f0 22 0a 20 20 22 2e 62 61 69 6c 20 6f 6e 7c 6f 66  ".  ".bail on|of
14400 66 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 70  f           Stop
14410 20 61 66 74 65 72 20 68 69 74 74 69 6e 67 20 61   after hitting a
14420 6e 20 65 72 72 6f 72 2e 20 20 44 65 66 61 75 6c  n error.  Defaul
14430 74 20 4f 46 46 5c 6e 22 0a 20 20 22 2e 62 69 6e  t OFF\n".  ".bin
14440 61 72 79 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20  ary on|off      
14450 20 20 20 54 75 72 6e 20 62 69 6e 61 72 79 20 6f     Turn binary o
14460 75 74 70 75 74 20 6f 6e 20 6f 72 20 6f 66 66 2e  utput on or off.
14470 20 20 44 65 66 61 75 6c 74 20 4f 46 46 5c 6e 22    Default OFF\n"
14480 0a 20 20 22 2e 63 64 20 44 49 52 45 43 54 4f 52  .  ".cd DIRECTOR
14490 59 20 20 20 20 20 20 20 20 20 20 43 68 61 6e 67  Y          Chang
144a0 65 20 74 68 65 20 77 6f 72 6b 69 6e 67 20 64 69  e the working di
144b0 72 65 63 74 6f 72 79 20 74 6f 20 44 49 52 45 43  rectory to DIREC
144c0 54 4f 52 59 5c 6e 22 0a 20 20 22 2e 63 68 61 6e  TORY\n".  ".chan
144d0 67 65 73 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20  ges on|off      
144e0 20 20 53 68 6f 77 20 6e 75 6d 62 65 72 20 6f 66    Show number of
144f0 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79   rows changed by
14500 20 53 51 4c 5c 6e 22 0a 20 20 22 2e 63 68 65 63   SQL\n".  ".chec
14510 6b 20 47 4c 4f 42 20 20 20 20 20 20 20 20 20 20  k GLOB          
14520 20 20 46 61 69 6c 20 69 66 20 6f 75 74 70 75 74    Fail if output
14530 20 73 69 6e 63 65 20 2e 74 65 73 74 63 61 73 65   since .testcase
14540 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 5c   does not match\
14550 6e 22 0a 20 20 22 2e 63 6c 6f 6e 65 20 4e 45 57  n".  ".clone NEW
14560 44 42 20 20 20 20 20 20 20 20 20 20 20 43 6c 6f  DB           Clo
14570 6e 65 20 64 61 74 61 20 69 6e 74 6f 20 4e 45 57  ne data into NEW
14580 44 42 20 66 72 6f 6d 20 74 68 65 20 65 78 69 73  DB from the exis
14590 74 69 6e 67 20 64 61 74 61 62 61 73 65 5c 6e 22  ting database\n"
145a0 0a 20 20 22 2e 64 61 74 61 62 61 73 65 73 20 20  .  ".databases  
145b0 20 20 20 20 20 20 20 20 20 20 20 4c 69 73 74 20             List 
145c0 6e 61 6d 65 73 20 61 6e 64 20 66 69 6c 65 73 20  names and files 
145d0 6f 66 20 61 74 74 61 63 68 65 64 20 64 61 74 61  of attached data
145e0 62 61 73 65 73 5c 6e 22 0a 20 20 22 2e 64 62 69  bases\n".  ".dbi
145f0 6e 66 6f 20 3f 44 42 3f 20 20 20 20 20 20 20 20  nfo ?DB?        
14600 20 20 20 53 68 6f 77 20 73 74 61 74 75 73 20 69     Show status i
14610 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
14620 20 74 68 65 20 64 61 74 61 62 61 73 65 5c 6e 22   the database\n"
14630 0a 20 20 22 2e 64 75 6d 70 20 3f 54 41 42 4c 45  .  ".dump ?TABLE
14640 3f 20 2e 2e 2e 20 20 20 20 20 20 44 75 6d 70 20  ? ...      Dump 
14650 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
14660 61 6e 20 53 51 4c 20 74 65 78 74 20 66 6f 72 6d  an SQL text form
14670 61 74 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  at\n".  "       
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 49 66 20 54 41 42 4c 45 20 73 70 65 63 69    If TABLE speci
146a0 66 69 65 64 2c 20 6f 6e 6c 79 20 64 75 6d 70 20  fied, only dump 
146b0 74 61 62 6c 65 73 20 6d 61 74 63 68 69 6e 67 5c  tables matching\
146c0 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
146e0 49 4b 45 20 70 61 74 74 65 72 6e 20 54 41 42 4c  IKE pattern TABL
146f0 45 2e 5c 6e 22 0a 20 20 22 2e 65 63 68 6f 20 6f  E.\n".  ".echo o
14700 6e 7c 6f 66 66 20 20 20 20 20 20 20 20 20 20 20  n|off           
14710 54 75 72 6e 20 63 6f 6d 6d 61 6e 64 20 65 63 68  Turn command ech
14720 6f 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20  o on or off\n". 
14730 20 22 2e 65 71 70 20 6f 6e 7c 6f 66 66 7c 66 75   ".eqp on|off|fu
14740 6c 6c 20 20 20 20 20 20 20 45 6e 61 62 6c 65 20  ll       Enable 
14750 6f 72 20 64 69 73 61 62 6c 65 20 61 75 74 6f 6d  or disable autom
14760 61 74 69 63 20 45 58 50 4c 41 49 4e 20 51 55 45  atic EXPLAIN QUE
14770 52 59 20 50 4c 41 4e 5c 6e 22 0a 20 20 22 2e 65  RY PLAN\n".  ".e
14780 78 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20  xit             
14790 20 20 20 20 20 45 78 69 74 20 74 68 69 73 20 70       Exit this p
147a0 72 6f 67 72 61 6d 5c 6e 22 0a 2f 2a 20 42 65 63  rogram\n"./* Bec
147b0 61 75 73 65 20 65 78 70 6c 61 69 6e 20 6d 6f 64  ause explain mod
147c0 65 20 63 6f 6d 65 73 20 6f 6e 20 61 75 74 6f 6d  e comes on autom
147d0 61 74 69 63 61 6c 6c 79 20 6e 6f 77 2c 20 74 68  atically now, th
147e0 65 20 22 2e 65 78 70 6c 61 69 6e 22 20 6d 6f 64  e ".explain" mod
147f0 65 0a 2a 2a 20 69 73 20 72 65 6d 6f 76 65 64 20  e.** is removed 
14800 66 72 6f 6d 20 74 68 65 20 68 65 6c 70 20 73 63  from the help sc
14810 72 65 65 6e 2e 20 20 49 74 20 69 73 20 73 74 69  reen.  It is sti
14820 6c 6c 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72  ll supported for
14830 20 6c 65 67 61 63 79 2c 20 68 6f 77 65 76 65 72   legacy, however
14840 20 2a 2f 0a 2f 2a 22 2e 65 78 70 6c 61 69 6e 20   */./*".explain 
14850 3f 6f 6e 7c 6f 66 66 7c 61 75 74 6f 3f 20 54 75  ?on|off|auto? Tu
14860 72 6e 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  rn EXPLAIN outpu
14870 74 20 6d 6f 64 65 20 6f 6e 20 6f 72 20 6f 66 66  t mode on or off
14880 20 6f 72 20 74 6f 20 61 75 74 6f 6d 61 74 69 63   or to automatic
14890 5c 6e 22 2a 2f 0a 20 20 22 2e 66 75 6c 6c 73 63  \n"*/.  ".fullsc
148a0 68 65 6d 61 20 3f 2d 2d 69 6e 64 65 6e 74 3f 20  hema ?--indent? 
148b0 53 68 6f 77 20 73 63 68 65 6d 61 20 61 6e 64 20  Show schema and 
148c0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 73  the content of s
148d0 71 6c 69 74 65 5f 73 74 61 74 20 74 61 62 6c 65  qlite_stat table
148e0 73 5c 6e 22 0a 20 20 22 2e 68 65 61 64 65 72 73  s\n".  ".headers
148f0 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20 20 20 54   on|off        T
14900 75 72 6e 20 64 69 73 70 6c 61 79 20 6f 66 20 68  urn display of h
14910 65 61 64 65 72 73 20 6f 6e 20 6f 72 20 6f 66 66  eaders on or off
14920 5c 6e 22 0a 20 20 22 2e 68 65 6c 70 20 20 20 20  \n".  ".help    
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 68                Sh
14940 6f 77 20 74 68 69 73 20 6d 65 73 73 61 67 65 5c  ow this message\
14950 6e 22 0a 20 20 22 2e 69 6d 70 6f 72 74 20 46 49  n".  ".import FI
14960 4c 45 20 54 41 42 4c 45 20 20 20 20 20 49 6d 70  LE TABLE     Imp
14970 6f 72 74 20 64 61 74 61 20 66 72 6f 6d 20 46 49  ort data from FI
14980 4c 45 20 69 6e 74 6f 20 54 41 42 4c 45 5c 6e 22  LE into TABLE\n"
14990 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
149a0 4f 4d 49 54 5f 54 45 53 54 5f 43 4f 4e 54 52 4f  OMIT_TEST_CONTRO
149b0 4c 0a 20 20 22 2e 69 6d 70 6f 73 74 65 72 20 49  L.  ".imposter I
149c0 4e 44 45 58 20 54 41 42 4c 45 20 20 43 72 65 61  NDEX TABLE  Crea
149d0 74 65 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c  te imposter tabl
149e0 65 20 54 41 42 4c 45 20 6f 6e 20 69 6e 64 65 78  e TABLE on index
149f0 20 49 4e 44 45 58 5c 6e 22 0a 23 65 6e 64 69 66   INDEX\n".#endif
14a00 0a 20 20 22 2e 69 6e 64 65 78 65 73 20 3f 54 41  .  ".indexes ?TA
14a10 42 4c 45 3f 20 20 20 20 20 20 20 53 68 6f 77 20  BLE?       Show 
14a20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 69 6e 64  names of all ind
14a30 65 78 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20  exes\n".  "     
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 20 20 20 20 49 66 20 54 41 42 4c 45 20 73 70 65      If TABLE spe
14a60 63 69 66 69 65 64 2c 20 6f 6e 6c 79 20 73 68 6f  cified, only sho
14a70 77 20 69 6e 64 65 78 65 73 20 66 6f 72 20 74 61  w indexes for ta
14a80 62 6c 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20  bles\n".  "     
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 20 6d 61 74 63 68 69 6e 67 20 4c 49 4b      matching LIK
14ab0 45 20 70 61 74 74 65 72 6e 20 54 41 42 4c 45 2e  E pattern TABLE.
14ac0 5c 6e 22 0a 23 69 66 64 65 66 20 53 51 4c 49 54  \n".#ifdef SQLIT
14ad0 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
14ae0 0a 20 20 22 2e 69 6f 74 72 61 63 65 20 46 49 4c  .  ".iotrace FIL
14af0 45 20 20 20 20 20 20 20 20 20 20 45 6e 61 62 6c  E          Enabl
14b00 65 20 49 2f 4f 20 64 69 61 67 6e 6f 73 74 69 63  e I/O diagnostic
14b10 20 6c 6f 67 67 69 6e 67 20 74 6f 20 46 49 4c 45   logging to FILE
14b20 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 6c  \n".#endif.  ".l
14b30 69 6d 69 74 20 3f 4c 49 4d 49 54 3f 20 3f 56 41  imit ?LIMIT? ?VA
14b40 4c 3f 20 20 20 44 69 73 70 6c 61 79 20 6f 72 20  L?   Display or 
14b50 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65  change the value
14b60 20 6f 66 20 61 6e 20 53 51 4c 49 54 45 5f 4c 49   of an SQLITE_LI
14b70 4d 49 54 5c 6e 22 0a 20 20 22 2e 6c 69 6e 74 20  MIT\n".  ".lint 
14b80 4f 50 54 49 4f 4e 53 20 20 20 20 20 20 20 20 20  OPTIONS         
14b90 20 52 65 70 6f 72 74 20 70 6f 74 65 6e 74 69 61   Report potentia
14ba0 6c 20 73 63 68 65 6d 61 20 69 73 73 75 65 73 2e  l schema issues.
14bb0 20 4f 70 74 69 6f 6e 73 3a 5c 6e 22 0a 20 20 22   Options:\n".  "
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bd0 20 20 20 20 20 20 20 20 20 66 6b 65 79 2d 69 6e           fkey-in
14be0 64 65 78 65 73 20 20 20 20 20 46 69 6e 64 20 6d  dexes     Find m
14bf0 69 73 73 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b  issing foreign k
14c00 65 79 20 69 6e 64 65 78 65 73 5c 6e 22 0a 23 69  ey indexes\n".#i
14c10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
14c20 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
14c30 0a 20 20 22 2e 6c 6f 61 64 20 46 49 4c 45 20 3f  .  ".load FILE ?
14c40 45 4e 54 52 59 3f 20 20 20 20 20 4c 6f 61 64 20  ENTRY?     Load 
14c50 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62  an extension lib
14c60 72 61 72 79 5c 6e 22 0a 23 65 6e 64 69 66 0a 20  rary\n".#endif. 
14c70 20 22 2e 6c 6f 67 20 46 49 4c 45 7c 6f 66 66 20   ".log FILE|off 
14c80 20 20 20 20 20 20 20 20 20 54 75 72 6e 20 6c 6f           Turn lo
14c90 67 67 69 6e 67 20 6f 6e 20 6f 72 20 6f 66 66 2e  gging on or off.
14ca0 20 20 46 49 4c 45 20 63 61 6e 20 62 65 20 73 74    FILE can be st
14cb0 64 65 72 72 2f 73 74 64 6f 75 74 5c 6e 22 0a 20  derr/stdout\n". 
14cc0 20 22 2e 6d 6f 64 65 20 4d 4f 44 45 20 3f 54 41   ".mode MODE ?TA
14cd0 42 4c 45 3f 20 20 20 20 20 53 65 74 20 6f 75 74  BLE?     Set out
14ce0 70 75 74 20 6d 6f 64 65 20 77 68 65 72 65 20 4d  put mode where M
14cf0 4f 44 45 20 69 73 20 6f 6e 65 20 6f 66 3a 5c 6e  ODE is one of:\n
14d00 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
14d20 63 69 69 20 20 20 20 43 6f 6c 75 6d 6e 73 2f 72  cii    Columns/r
14d30 6f 77 73 20 64 65 6c 69 6d 69 74 65 64 20 62 79  ows delimited by
14d40 20 30 78 31 46 20 61 6e 64 20 30 78 31 45 5c 6e   0x1F and 0x1E\n
14d50 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 73                cs
14d70 76 20 20 20 20 20 20 43 6f 6d 6d 61 2d 73 65 70  v      Comma-sep
14d80 61 72 61 74 65 64 20 76 61 6c 75 65 73 5c 6e 22  arated values\n"
14d90 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c               col
14db0 75 6d 6e 20 20 20 4c 65 66 74 2d 61 6c 69 67 6e  umn   Left-align
14dc0 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 20 28 53 65  ed columns.  (Se
14dd0 65 20 2e 77 69 64 74 68 29 5c 6e 22 0a 20 20 22  e .width)\n".  "
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14df0 20 20 20 20 20 20 20 20 20 68 74 6d 6c 20 20 20           html   
14e00 20 20 48 54 4d 4c 20 3c 74 61 62 6c 65 3e 20 63    HTML <table> c
14e10 6f 64 65 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  ode\n".  "      
14e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e30 20 20 20 69 6e 73 65 72 74 20 20 20 53 51 4c 20     insert   SQL 
14e40 69 6e 73 65 72 74 20 73 74 61 74 65 6d 65 6e 74  insert statement
14e50 73 20 66 6f 72 20 54 41 42 4c 45 5c 6e 22 0a 20  s for TABLE\n". 
14e60 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
14e70 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 65 20             line 
14e80 20 20 20 20 4f 6e 65 20 76 61 6c 75 65 20 70 65      One value pe
14e90 72 20 6c 69 6e 65 5c 6e 22 0a 20 20 22 20 20 20  r line\n".  "   
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14eb0 20 20 20 20 20 20 6c 69 73 74 20 20 20 20 20 56        list     V
14ec0 61 6c 75 65 73 20 64 65 6c 69 6d 69 74 65 64 20  alues delimited 
14ed0 62 79 20 5c 22 7c 5c 22 5c 6e 22 0a 20 20 22 20  by \"|\"\n".  " 
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ef0 20 20 20 20 20 20 20 20 71 75 6f 74 65 20 20 20          quote   
14f00 20 45 73 63 61 70 65 20 61 6e 73 77 65 72 73 20   Escape answers 
14f10 61 73 20 66 6f 72 20 53 51 4c 5c 6e 22 0a 20 20  as for SQL\n".  
14f20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
14f30 20 20 20 20 20 20 20 20 20 20 74 61 62 73 20 20            tabs  
14f40 20 20 20 54 61 62 2d 73 65 70 61 72 61 74 65 64     Tab-separated
14f50 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 20 20   values\n".  "  
14f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f70 20 20 20 20 20 20 20 74 63 6c 20 20 20 20 20 20         tcl      
14f80 54 43 4c 20 6c 69 73 74 20 65 6c 65 6d 65 6e 74  TCL list element
14f90 73 5c 6e 22 0a 20 20 22 2e 6e 75 6c 6c 76 61 6c  s\n".  ".nullval
14fa0 75 65 20 53 54 52 49 4e 47 20 20 20 20 20 20 55  ue STRING      U
14fb0 73 65 20 53 54 52 49 4e 47 20 69 6e 20 70 6c 61  se STRING in pla
14fc0 63 65 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75 65  ce of NULL value
14fd0 73 5c 6e 22 0a 20 20 22 2e 6f 6e 63 65 20 46 49  s\n".  ".once FI
14fe0 4c 45 4e 41 4d 45 20 20 20 20 20 20 20 20 20 4f  LENAME         O
14ff0 75 74 70 75 74 20 66 6f 72 20 74 68 65 20 6e 65  utput for the ne
15000 78 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 6f  xt SQL command o
15010 6e 6c 79 20 74 6f 20 46 49 4c 45 4e 41 4d 45 5c  nly to FILENAME\
15020 6e 22 0a 20 20 22 2e 6f 70 65 6e 20 3f 4f 50 54  n".  ".open ?OPT
15030 49 4f 4e 53 3f 20 3f 46 49 4c 45 3f 20 43 6c 6f  IONS? ?FILE? Clo
15040 73 65 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  se existing data
15050 62 61 73 65 20 61 6e 64 20 72 65 6f 70 65 6e 20  base and reopen 
15060 46 49 4c 45 5c 6e 22 0a 20 20 22 20 20 20 20 20  FILE\n".  "     
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15080 20 20 20 20 54 68 65 20 2d 2d 6e 65 77 20 6f 70      The --new op
15090 74 69 6f 6e 20 73 74 61 72 74 73 20 77 69 74 68  tion starts with
150a0 20 61 6e 20 65 6d 70 74 79 20 66 69 6c 65 5c 6e   an empty file\n
150b0 22 0a 20 20 22 2e 6f 75 74 70 75 74 20 3f 46 49  ".  ".output ?FI
150c0 4c 45 4e 41 4d 45 3f 20 20 20 20 20 53 65 6e 64  LENAME?     Send
150d0 20 6f 75 74 70 75 74 20 74 6f 20 46 49 4c 45 4e   output to FILEN
150e0 41 4d 45 20 6f 72 20 73 74 64 6f 75 74 5c 6e 22  AME or stdout\n"
150f0 0a 20 20 22 2e 70 72 69 6e 74 20 53 54 52 49 4e  .  ".print STRIN
15100 47 2e 2e 2e 20 20 20 20 20 20 20 50 72 69 6e 74  G...       Print
15110 20 6c 69 74 65 72 61 6c 20 53 54 52 49 4e 47 5c   literal STRING\
15120 6e 22 0a 20 20 22 2e 70 72 6f 6d 70 74 20 4d 41  n".  ".prompt MA
15130 49 4e 20 43 4f 4e 54 49 4e 55 45 20 20 52 65 70  IN CONTINUE  Rep
15140 6c 61 63 65 20 74 68 65 20 73 74 61 6e 64 61 72  lace the standar
15150 64 20 70 72 6f 6d 70 74 73 5c 6e 22 0a 20 20 22  d prompts\n".  "
15160 2e 71 75 69 74 20 20 20 20 20 20 20 20 20 20 20  .quit           
15170 20 20 20 20 20 20 20 45 78 69 74 20 74 68 69 73         Exit this
15180 20 70 72 6f 67 72 61 6d 5c 6e 22 0a 20 20 22 2e   program\n".  ".
15190 72 65 61 64 20 46 49 4c 45 4e 41 4d 45 20 20 20  read FILENAME   
151a0 20 20 20 20 20 20 45 78 65 63 75 74 65 20 53 51        Execute SQ
151b0 4c 20 69 6e 20 46 49 4c 45 4e 41 4d 45 5c 6e 22  L in FILENAME\n"
151c0 0a 20 20 22 2e 72 65 73 74 6f 72 65 20 3f 44 42  .  ".restore ?DB
151d0 3f 20 46 49 4c 45 20 20 20 20 20 52 65 73 74 6f  ? FILE     Resto
151e0 72 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 44 42  re content of DB
151f0 20 28 64 65 66 61 75 6c 74 20 5c 22 6d 61 69 6e   (default \"main
15200 5c 22 29 20 66 72 6f 6d 20 46 49 4c 45 5c 6e 22  \") from FILE\n"
15210 0a 20 20 22 2e 73 61 76 65 20 46 49 4c 45 20 20  .  ".save FILE  
15220 20 20 20 20 20 20 20 20 20 20 20 57 72 69 74 65             Write
15230 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
15240 61 73 65 20 69 6e 74 6f 20 46 49 4c 45 5c 6e 22  ase into FILE\n"
15250 0a 20 20 22 2e 73 63 61 6e 73 74 61 74 73 20 6f  .  ".scanstats o
15260 6e 7c 6f 66 66 20 20 20 20 20 20 54 75 72 6e 20  n|off      Turn 
15270 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61  sqlite3_stmt_sca
15280 6e 73 74 61 74 75 73 28 29 20 6d 65 74 72 69 63  nstatus() metric
15290 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20  s on or off\n". 
152a0 20 22 2e 73 63 68 65 6d 61 20 3f 50 41 54 54 45   ".schema ?PATTE
152b0 52 4e 3f 20 20 20 20 20 20 53 68 6f 77 20 74 68  RN?      Show th
152c0 65 20 43 52 45 41 54 45 20 73 74 61 74 65 6d 65  e CREATE stateme
152d0 6e 74 73 20 6d 61 74 63 68 69 6e 67 20 50 41 54  nts matching PAT
152e0 54 45 52 4e 5c 6e 22 0a 20 20 22 20 20 20 20 20  TERN\n".  "     
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15300 20 20 20 20 20 41 64 64 20 2d 2d 69 6e 64 65 6e       Add --inden
15310 74 20 66 6f 72 20 70 72 65 74 74 79 2d 70 72 69  t for pretty-pri
15320 6e 74 69 6e 67 5c 6e 22 0a 20 20 22 2e 73 65 6c  nting\n".  ".sel
15330 66 74 65 73 74 20 3f 2d 2d 69 6e 69 74 3f 20 20  ftest ?--init?  
15340 20 20 20 52 75 6e 20 74 65 73 74 73 20 64 65 66     Run tests def
15350 69 6e 65 64 20 69 6e 20 74 68 65 20 53 45 4c 46  ined in the SELF
15360 54 45 53 54 20 74 61 62 6c 65 5c 6e 22 0a 20 20  TEST table\n".  
15370 22 2e 73 65 70 61 72 61 74 6f 72 20 43 4f 4c 20  ".separator COL 
15380 3f 52 4f 57 3f 20 20 20 43 68 61 6e 67 65 20 74  ?ROW?   Change t
15390 68 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61  he column separa
153a0 74 6f 72 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c  tor and optional
153b0 6c 79 20 74 68 65 20 72 6f 77 5c 6e 22 0a 20 20  ly the row\n".  
153c0 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
153d0 20 20 20 20 20 20 20 20 20 20 73 65 70 61 72 61            separa
153e0 74 6f 72 20 66 6f 72 20 62 6f 74 68 20 74 68 65  tor for both the
153f0 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 61 6e 64   output mode and
15400 20 2e 69 6d 70 6f 72 74 5c 6e 22 0a 23 69 66 20   .import\n".#if 
15410 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
15420 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 20  NABLE_SESSION). 
15430 20 22 2e 73 65 73 73 69 6f 6e 20 43 4d 44 20 2e   ".session CMD .
15440 2e 2e 20 20 20 20 20 20 20 43 72 65 61 74 65 20  ..       Create 
15450 6f 72 20 63 6f 6e 74 72 6f 6c 20 73 65 73 73 69  or control sessi
15460 6f 6e 73 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20  ons\n".#endif.  
15470 22 2e 73 68 61 33 73 75 6d 20 3f 4f 50 54 49 4f  ".sha3sum ?OPTIO
15480 4e 53 2e 2e 2e 3f 20 20 43 6f 6d 70 75 74 65 20  NS...?  Compute 
15490 61 20 53 48 41 33 20 68 61 73 68 20 6f 66 20 64  a SHA3 hash of d
154a0 61 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74 5c  atabase content\
154b0 6e 22 0a 20 20 22 2e 73 68 65 6c 6c 20 43 4d 44  n".  ".shell CMD
154c0 20 41 52 47 53 2e 2e 2e 20 20 20 20 20 52 75 6e   ARGS...     Run
154d0 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20 69 6e 20   CMD ARGS... in 
154e0 61 20 73 79 73 74 65 6d 20 73 68 65 6c 6c 5c 6e  a system shell\n
154f0 22 0a 20 20 22 2e 73 68 6f 77 20 20 20 20 20 20  ".  ".show      
15500 20 20 20 20 20 20 20 20 20 20 20 20 53 68 6f 77              Show
15510 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c   the current val
15520 75 65 73 20 66 6f 72 20 76 61 72 69 6f 75 73 20  ues for various 
15530 73 65 74 74 69 6e 67 73 5c 6e 22 0a 20 20 22 2e  settings\n".  ".
15540 73 74 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f 20 20  stats ?on|off?  
15550 20 20 20 20 20 20 53 68 6f 77 20 73 74 61 74 73        Show stats
15560 20 6f 72 20 74 75 72 6e 20 73 74 61 74 73 20 6f   or turn stats o
15570 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e  n or off\n".  ".
15580 73 79 73 74 65 6d 20 43 4d 44 20 41 52 47 53 2e  system CMD ARGS.
15590 2e 2e 20 20 20 20 52 75 6e 20 43 4d 44 20 41 52  ..    Run CMD AR
155a0 47 53 2e 2e 2e 20 69 6e 20 61 20 73 79 73 74 65  GS... in a syste
155b0 6d 20 73 68 65 6c 6c 5c 6e 22 0a 20 20 22 2e 74  m shell\n".  ".t
155c0 61 62 6c 65 73 20 3f 54 41 42 4c 45 3f 20 20 20  ables ?TABLE?   
155d0 20 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73 20       List names 
155e0 6f 66 20 74 61 62 6c 65 73 5c 6e 22 0a 20 20 22  of tables\n".  "
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15600 20 20 20 20 20 20 20 20 20 49 66 20 54 41 42 4c           If TABL
15610 45 20 73 70 65 63 69 66 69 65 64 2c 20 6f 6e 6c  E specified, onl
15620 79 20 6c 69 73 74 20 74 61 62 6c 65 73 20 6d 61  y list tables ma
15630 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22 20 20 20  tching\n".  "   
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15650 20 20 20 20 20 20 4c 49 4b 45 20 70 61 74 74 65        LIKE patte
15660 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 20 20 22  rn TABLE.\n".  "
15670 2e 74 65 73 74 63 61 73 65 20 4e 41 4d 45 20 20  .testcase NAME  
15680 20 20 20 20 20 20 20 42 65 67 69 6e 20 72 65 64         Begin red
15690 69 72 65 63 74 69 6e 67 20 6f 75 74 70 75 74 20  irecting output 
156a0 74 6f 20 27 74 65 73 74 63 61 73 65 2d 6f 75 74  to 'testcase-out
156b0 2e 74 78 74 27 5c 6e 22 0a 20 20 22 2e 74 69 6d  .txt'\n".  ".tim
156c0 65 6f 75 74 20 4d 53 20 20 20 20 20 20 20 20 20  eout MS         
156d0 20 20 20 54 72 79 20 6f 70 65 6e 69 6e 67 20 6c     Try opening l
156e0 6f 63 6b 65 64 20 74 61 62 6c 65 73 20 66 6f 72  ocked tables for
156f0 20 4d 53 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   MS milliseconds
15700 5c 6e 22 0a 20 20 22 2e 74 69 6d 65 72 20 6f 6e  \n".  ".timer on
15710 7c 6f 66 66 20 20 20 20 20 20 20 20 20 20 54 75  |off          Tu
15720 72 6e 20 53 51 4c 20 74 69 6d 65 72 20 6f 6e 20  rn SQL timer on 
15730 6f 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 74 72  or off\n".  ".tr
15740 61 63 65 20 46 49 4c 45 7c 6f 66 66 20 20 20 20  ace FILE|off    
15750 20 20 20 20 4f 75 74 70 75 74 20 65 61 63 68 20      Output each 
15760 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 73  SQL statement as
15770 20 69 74 20 69 73 20 72 75 6e 5c 6e 22 0a 20 20   it is run\n".  
15780 22 2e 76 66 73 69 6e 66 6f 20 3f 41 55 58 3f 20  ".vfsinfo ?AUX? 
15790 20 20 20 20 20 20 20 20 49 6e 66 6f 72 6d 61 74          Informat
157a0 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 74 6f  ion about the to
157b0 70 2d 6c 65 76 65 6c 20 56 46 53 5c 6e 22 0a 20  p-level VFS\n". 
157c0 20 22 2e 76 66 73 6c 69 73 74 20 20 20 20 20 20   ".vfslist      
157d0 20 20 20 20 20 20 20 20 20 4c 69 73 74 20 61 6c           List al
157e0 6c 20 61 76 61 69 6c 61 62 6c 65 20 56 46 53 65  l available VFSe
157f0 73 5c 6e 22 0a 20 20 22 2e 76 66 73 6e 61 6d 65  s\n".  ".vfsname
15800 20 3f 41 55 58 3f 20 20 20 20 20 20 20 20 20 50   ?AUX?         P
15810 72 69 6e 74 20 74 68 65 20 6e 61 6d 65 20 6f 66  rint the name of
15820 20 74 68 65 20 56 46 53 20 73 74 61 63 6b 5c 6e   the VFS stack\n
15830 22 0a 20 20 22 2e 77 69 64 74 68 20 4e 55 4d 31  ".  ".width NUM1
15840 20 4e 55 4d 32 20 2e 2e 2e 20 20 20 53 65 74 20   NUM2 ...   Set 
15850 63 6f 6c 75 6d 6e 20 77 69 64 74 68 73 20 66 6f  column widths fo
15860 72 20 5c 22 63 6f 6c 75 6d 6e 5c 22 20 6d 6f 64  r \"column\" mod
15870 65 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  e\n".  "        
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 20 4e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73   Negative values
158a0 20 72 69 67 68 74 2d 6a 75 73 74 69 66 79 5c 6e   right-justify\n
158b0 22 0a 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  ".;..#if defined
158c0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
158d0 45 53 53 49 4f 4e 29 0a 2f 2a 0a 2a 2a 20 50 72  ESSION)./*.** Pr
158e0 69 6e 74 20 68 65 6c 70 20 69 6e 66 6f 72 6d 61  int help informa
158f0 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 22 2e 73  tion for the ".s
15900 65 73 73 69 6f 6e 73 22 20 63 6f 6d 6d 61 6e 64  essions" command
15910 0a 2a 2f 0a 76 6f 69 64 20 73 65 73 73 69 6f 6e  .*/.void session
15920 5f 68 65 6c 70 28 53 68 65 6c 6c 53 74 61 74 65  _help(ShellState
15930 20 2a 70 29 7b 0a 20 20 72 61 77 5f 70 72 69 6e   *p){.  raw_prin
15940 74 66 28 70 2d 3e 6f 75 74 2c 0a 20 20 20 20 22  tf(p->out,.    "
15950 2e 73 65 73 73 69 6f 6e 20 3f 4e 41 4d 45 3f 20  .session ?NAME? 
15960 53 55 42 43 4f 4d 4d 41 4e 44 20 3f 41 52 47 53  SUBCOMMAND ?ARGS
15970 2e 2e 2e 3f 5c 6e 22 0a 20 20 20 20 22 49 66 20  ...?\n".    "If 
15980 3f 4e 41 4d 45 3f 20 69 73 20 6f 6d 69 74 74 65  ?NAME? is omitte
15990 64 2c 20 74 68 65 20 66 69 72 73 74 20 64 65 66  d, the first def
159a0 69 6e 65 64 20 73 65 73 73 69 6f 6e 20 69 73 20  ined session is 
159b0 75 73 65 64 2e 5c 6e 22 0a 20 20 20 20 22 53 75  used.\n".    "Su
159c0 62 63 6f 6d 6d 61 6e 64 73 3a 5c 6e 22 0a 20 20  bcommands:\n".  
159d0 20 20 22 20 20 20 61 74 74 61 63 68 20 54 41 42    "   attach TAB
159e0 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 20 41  LE             A
159f0 74 74 61 63 68 20 54 41 42 4c 45 5c 6e 22 0a 20  ttach TABLE\n". 
15a00 20 20 20 22 20 20 20 63 68 61 6e 67 65 73 65 74     "   changeset
15a10 20 46 49 4c 45 20 20 20 20 20 20 20 20 20 20 20   FILE           
15a20 57 72 69 74 65 20 61 20 63 68 61 6e 67 65 73 65  Write a changese
15a30 74 20 69 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a 20  t into FILE\n". 
15a40 20 20 20 22 20 20 20 63 6c 6f 73 65 20 20 20 20     "   close    
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 43 6c 6f 73 65 20 6f 6e 65 20 73 65 73 73 69 6f  Close one sessio
15a70 6e 5c 6e 22 0a 20 20 20 20 22 20 20 20 65 6e 61  n\n".    "   ena
15a80 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f 20 20 20  ble ?BOOLEAN?   
15a90 20 20 20 20 20 20 53 65 74 20 6f 72 20 71 75 65        Set or que
15aa0 72 79 20 74 68 65 20 65 6e 61 62 6c 65 20 62 69  ry the enable bi
15ab0 74 5c 6e 22 0a 20 20 20 20 22 20 20 20 66 69 6c  t\n".    "   fil
15ac0 74 65 72 20 47 4c 4f 42 2e 2e 2e 20 20 20 20 20  ter GLOB...     
15ad0 20 20 20 20 20 20 52 65 6a 65 63 74 20 74 61 62        Reject tab
15ae0 6c 65 73 20 6d 61 74 63 68 69 6e 67 20 47 4c 4f  les matching GLO
15af0 42 73 5c 6e 22 0a 20 20 20 20 22 20 20 20 69 6e  Bs\n".    "   in
15b00 64 69 72 65 63 74 20 3f 42 4f 4f 4c 45 41 4e 3f  direct ?BOOLEAN?
15b10 20 20 20 20 20 20 20 4d 61 72 6b 20 6f 72 20 71         Mark or q
15b20 75 65 72 79 20 74 68 65 20 69 6e 64 69 72 65 63  uery the indirec
15b30 74 20 73 74 61 74 75 73 5c 6e 22 0a 20 20 20 20  t status\n".    
15b40 22 20 20 20 69 73 65 6d 70 74 79 20 20 20 20 20  "   isempty     
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 51 75 65               Que
15b60 72 79 20 77 68 65 74 68 65 72 20 74 68 65 20 73  ry whether the s
15b70 65 73 73 69 6f 6e 20 69 73 20 65 6d 70 74 79 5c  ession is empty\
15b80 6e 22 0a 20 20 20 20 22 20 20 20 6c 69 73 74 20  n".    "   list 
15b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ba0 20 20 20 20 4c 69 73 74 20 63 75 72 72 65 6e 74      List current
15bb0 6c 79 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 20  ly open session 
15bc0 6e 61 6d 65 73 5c 6e 22 0a 20 20 20 20 22 20 20  names\n".    "  
15bd0 20 6f 70 65 6e 20 44 42 20 4e 41 4d 45 20 20 20   open DB NAME   
15be0 20 20 20 20 20 20 20 20 20 20 4f 70 65 6e 20 61            Open a
15bf0 20 6e 65 77 20 73 65 73 73 69 6f 6e 20 6f 6e 20   new session on 
15c00 44 42 5c 6e 22 0a 20 20 20 20 22 20 20 20 70 61  DB\n".    "   pa
15c10 74 63 68 73 65 74 20 46 49 4c 45 20 20 20 20 20  tchset FILE     
15c20 20 20 20 20 20 20 20 57 72 69 74 65 20 61 20 70         Write a p
15c30 61 74 63 68 73 65 74 20 69 6e 74 6f 20 46 49 4c  atchset into FIL
15c40 45 5c 6e 22 0a 20 20 29 3b 0a 7d 0a 23 65 6e 64  E\n".  );.}.#end
15c50 69 66 0a 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  if.../* Forward 
15c60 72 65 66 65 72 65 6e 63 65 20 2a 2f 0a 73 74 61  reference */.sta
15c70 74 69 63 20 69 6e 74 20 70 72 6f 63 65 73 73 5f  tic int process_
15c80 69 6e 70 75 74 28 53 68 65 6c 6c 53 74 61 74 65  input(ShellState
15c90 20 2a 70 2c 20 46 49 4c 45 20 2a 69 6e 29 3b 0a   *p, FILE *in);.
15ca0 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20  ./*.** Read the 
15cb0 63 6f 6e 74 65 6e 74 20 6f 66 20 66 69 6c 65 20  content of file 
15cc0 7a 4e 61 6d 65 20 69 6e 74 6f 20 6d 65 6d 6f 72  zName into memor
15cd0 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  y obtained from 
15ce0 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34  sqlite3_malloc64
15cf0 28 29 0a 2a 2a 20 61 6e 64 20 72 65 74 75 72 6e  ().** and return
15d00 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
15d10 65 20 62 75 66 66 65 72 2e 20 54 68 65 20 63 61  e buffer. The ca
15d20 6c 6c 65 72 20 69 73 20 72 65 73 70 6f 6e 73 69  ller is responsi
15d30 62 6c 65 20 66 6f 72 20 66 72 65 65 69 6e 67 0a  ble for freeing.
15d40 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 2e 0a 2a  ** the memory..*
15d50 2a 0a 2a 2a 20 49 66 20 70 61 72 61 6d 65 74 65  *.** If paramete
15d60 72 20 70 6e 42 79 74 65 20 69 73 20 6e 6f 74 20  r pnByte is not 
15d70 4e 55 4c 4c 2c 20 28 2a 70 6e 42 79 74 65 29 20  NULL, (*pnByte) 
15d80 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
15d90 6d 62 65 72 20 6f 66 20 62 79 74 65 73 0a 2a 2a  mber of bytes.**
15da0 20 72 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72   read..**.** For
15db0 20 63 6f 6e 76 65 6e 69 65 6e 63 65 2c 20 61 20   convenience, a 
15dc0 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 6f 72 20 62  nul-terminator b
15dd0 79 74 65 20 69 73 20 61 6c 77 61 79 73 20 61 70  yte is always ap
15de0 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 64 61  pended to the da
15df0 74 61 20 72 65 61 64 0a 2a 2a 20 66 72 6f 6d 20  ta read.** from 
15e00 74 68 65 20 66 69 6c 65 20 62 65 66 6f 72 65 20  the file before 
15e10 74 68 65 20 62 75 66 66 65 72 20 69 73 20 72 65  the buffer is re
15e20 74 75 72 6e 65 64 2e 20 54 68 69 73 20 62 79 74  turned. This byt
15e30 65 20 69 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65  e is not include
15e40 64 20 69 6e 0a 2a 2a 20 74 68 65 20 66 69 6e 61  d in.** the fina
15e50 6c 20 76 61 6c 75 65 20 6f 66 20 28 2a 70 6e 42  l value of (*pnB
15e60 79 74 65 29 2c 20 69 66 20 61 70 70 6c 69 63 61  yte), if applica
15e70 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 55 4c 4c 20  ble..**.** NULL 
15e80 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 61  is returned if a
15e90 6e 79 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  ny error is enco
15ea0 75 6e 74 65 72 65 64 2e 20 54 68 65 20 66 69 6e  untered. The fin
15eb0 61 6c 20 76 61 6c 75 65 20 6f 66 20 2a 70 6e 42  al value of *pnB
15ec0 79 74 65 0a 2a 2a 20 69 73 20 75 6e 64 65 66 69  yte.** is undefi
15ed0 6e 65 64 20 69 6e 20 74 68 69 73 20 63 61 73 65  ned in this case
15ee0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72  ..*/.static char
15ef0 20 2a 72 65 61 64 46 69 6c 65 28 63 6f 6e 73 74   *readFile(const
15f00 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 69 6e   char *zName, in
15f10 74 20 2a 70 6e 42 79 74 65 29 7b 0a 20 20 46 49  t *pnByte){.  FI
15f20 4c 45 20 2a 69 6e 20 3d 20 66 6f 70 65 6e 28 7a  LE *in = fopen(z
15f30 4e 61 6d 65 2c 20 22 72 62 22 29 3b 0a 20 20 6c  Name, "rb");.  l
15f40 6f 6e 67 20 6e 49 6e 3b 0a 20 20 73 69 7a 65 5f  ong nIn;.  size_
15f50 74 20 6e 52 65 61 64 3b 0a 20 20 63 68 61 72 20  t nRead;.  char 
15f60 2a 70 42 75 66 3b 0a 20 20 69 66 28 20 69 6e 3d  *pBuf;.  if( in=
15f70 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
15f80 20 66 73 65 65 6b 28 69 6e 2c 20 30 2c 20 53 45   fseek(in, 0, SE
15f90 45 4b 5f 45 4e 44 29 3b 0a 20 20 6e 49 6e 20 3d  EK_END);.  nIn =
15fa0 20 66 74 65 6c 6c 28 69 6e 29 3b 0a 20 20 72 65   ftell(in);.  re
15fb0 77 69 6e 64 28 69 6e 29 3b 0a 20 20 70 42 75 66  wind(in);.  pBuf
15fc0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f   = sqlite3_mallo
15fd0 63 36 34 28 20 6e 49 6e 2b 31 20 29 3b 0a 20 20  c64( nIn+1 );.  
15fe0 69 66 28 20 70 42 75 66 3d 3d 30 20 29 20 72 65  if( pBuf==0 ) re
15ff0 74 75 72 6e 20 30 3b 0a 20 20 6e 52 65 61 64 20  turn 0;.  nRead 
16000 3d 20 66 72 65 61 64 28 70 42 75 66 2c 20 6e 49  = fread(pBuf, nI
16010 6e 2c 20 31 2c 20 69 6e 29 3b 0a 20 20 66 63 6c  n, 1, in);.  fcl
16020 6f 73 65 28 69 6e 29 3b 0a 20 20 69 66 28 20 6e  ose(in);.  if( n
16030 52 65 61 64 21 3d 31 20 29 7b 0a 20 20 20 20 73  Read!=1 ){.    s
16040 71 6c 69 74 65 33 5f 66 72 65 65 28 70 42 75 66  qlite3_free(pBuf
16050 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  );.    return 0;
16060 0a 20 20 7d 0a 20 20 70 42 75 66 5b 6e 49 6e 5d  .  }.  pBuf[nIn]
16070 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 6e 42 79   = 0;.  if( pnBy
16080 74 65 20 29 20 2a 70 6e 42 79 74 65 20 3d 20 6e  te ) *pnByte = n
16090 49 6e 3b 0a 20 20 72 65 74 75 72 6e 20 70 42 75  In;.  return pBu
160a0 66 3b 0a 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65  f;.}..#if define
160b0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
160c0 53 45 53 53 49 4f 4e 29 0a 2f 2a 0a 2a 2a 20 43  SESSION)./*.** C
160d0 6c 6f 73 65 20 61 20 73 69 6e 67 6c 65 20 4f 70  lose a single Op
160e0 65 6e 53 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74  enSession object
160f0 20 61 6e 64 20 72 65 6c 65 61 73 65 20 61 6c 6c   and release all
16100 20 6f 66 20 69 74 73 20 61 73 73 6f 63 69 61 74   of its associat
16110 65 64 0a 2a 2a 20 72 65 73 6f 75 72 63 65 73 2e  ed.** resources.
16120 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
16130 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 28 4f 70  session_close(Op
16140 65 6e 53 65 73 73 69 6f 6e 20 2a 70 53 65 73 73  enSession *pSess
16150 69 6f 6e 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  ion){.  int i;. 
16160 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f   sqlite3session_
16170 64 65 6c 65 74 65 28 70 53 65 73 73 69 6f 6e 2d  delete(pSession-
16180 3e 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66  >p);.  sqlite3_f
16190 72 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e  ree(pSession->zN
161a0 61 6d 65 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  ame);.  for(i=0;
161b0 20 69 3c 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69   i<pSession->nFi
161c0 6c 74 65 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  lter; i++){.    
161d0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53 65  sqlite3_free(pSe
161e0 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 5b  ssion->azFilter[
161f0 69 5d 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  i]);.  }.  sqlit
16200 65 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e  e3_free(pSession
16210 2d 3e 61 7a 46 69 6c 74 65 72 29 3b 0a 20 20 6d  ->azFilter);.  m
16220 65 6d 73 65 74 28 70 53 65 73 73 69 6f 6e 2c 20  emset(pSession, 
16230 30 2c 20 73 69 7a 65 6f 66 28 4f 70 65 6e 53 65  0, sizeof(OpenSe
16240 73 73 69 6f 6e 29 29 3b 0a 7d 0a 23 65 6e 64 69  ssion));.}.#endi
16250 66 0a 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61  f../*.** Close a
16260 6c 6c 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 6f  ll OpenSession o
16270 62 6a 65 63 74 73 20 61 6e 64 20 72 65 6c 65 61  bjects and relea
16280 73 65 20 61 6c 6c 20 61 73 73 6f 63 69 61 74 65  se all associate
16290 64 20 72 65 73 6f 75 72 63 65 73 2e 0a 2a 2f 0a  d resources..*/.
162a0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
162b0 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f  TE_ENABLE_SESSIO
162c0 4e 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  N).static void s
162d0 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c 6c  ession_close_all
162e0 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b  (ShellState *p){
162f0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28  .  int i;.  for(
16300 69 3d 30 3b 20 69 3c 70 2d 3e 6e 53 65 73 73 69  i=0; i<p->nSessi
16310 6f 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 65  on; i++){.    se
16320 73 73 69 6f 6e 5f 63 6c 6f 73 65 28 26 70 2d 3e  ssion_close(&p->
16330 61 53 65 73 73 69 6f 6e 5b 69 5d 29 3b 0a 20 20  aSession[i]);.  
16340 7d 0a 20 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 20  }.  p->nSession 
16350 3d 20 30 3b 0a 7d 0a 23 65 6c 73 65 0a 23 20 64  = 0;.}.#else.# d
16360 65 66 69 6e 65 20 73 65 73 73 69 6f 6e 5f 63 6c  efine session_cl
16370 6f 73 65 5f 61 6c 6c 28 58 29 0a 23 65 6e 64 69  ose_all(X).#endi
16380 66 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65  f../*.** Impleme
16390 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 78  ntation of the x
163a0 46 69 6c 74 65 72 20 66 75 6e 63 74 69 6f 6e 20  Filter function 
163b0 66 6f 72 20 61 6e 20 6f 70 65 6e 20 73 65 73 73  for an open sess
163c0 69 6f 6e 2e 20 20 4f 6d 69 74 0a 2a 2a 20 61 6e  ion.  Omit.** an
163d0 79 20 74 61 62 6c 65 73 20 6e 61 6d 65 64 20 62  y tables named b
163e0 79 20 22 2e 73 65 73 73 69 6f 6e 20 66 69 6c 74  y ".session filt
163f0 65 72 22 20 62 75 74 20 6c 65 74 20 61 6c 6c 20  er" but let all 
16400 6f 74 68 65 72 20 74 61 62 6c 65 20 74 68 72 6f  other table thro
16410 75 67 68 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ugh..*/.#if defi
16420 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
16430 45 5f 53 45 53 53 49 4f 4e 29 0a 73 74 61 74 69  E_SESSION).stati
16440 63 20 69 6e 74 20 73 65 73 73 69 6f 6e 5f 66 69  c int session_fi
16450 6c 74 65 72 28 76 6f 69 64 20 2a 70 43 74 78 2c  lter(void *pCtx,
16460 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
16470 62 29 7b 0a 20 20 4f 70 65 6e 53 65 73 73 69 6f  b){.  OpenSessio
16480 6e 20 2a 70 53 65 73 73 69 6f 6e 20 3d 20 28 4f  n *pSession = (O
16490 70 65 6e 53 65 73 73 69 6f 6e 2a 29 70 43 74 78  penSession*)pCtx
164a0 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72  ;.  int i;.  for
164b0 28 69 3d 30 3b 20 69 3c 70 53 65 73 73 69 6f 6e  (i=0; i<pSession
164c0 2d 3e 6e 46 69 6c 74 65 72 3b 20 69 2b 2b 29 7b  ->nFilter; i++){
164d0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
164e0 5f 73 74 72 67 6c 6f 62 28 70 53 65 73 73 69 6f  _strglob(pSessio
164f0 6e 2d 3e 61 7a 46 69 6c 74 65 72 5b 69 5d 2c 20  n->azFilter[i], 
16500 7a 54 61 62 29 3d 3d 30 20 29 20 72 65 74 75 72  zTab)==0 ) retur
16510 6e 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  n 0;.  }.  retur
16520 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  n 1;.}.#endif../
16530 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72 65 20 74  *.** Make sure t
16540 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6f  he database is o
16550 70 65 6e 2e 20 20 49 66 20 69 74 20 69 73 20 6e  pen.  If it is n
16560 6f 74 2c 20 74 68 65 6e 20 6f 70 65 6e 20 69 74  ot, then open it
16570 2e 20 20 49 66 0a 2a 2a 20 74 68 65 20 64 61 74  .  If.** the dat
16580 61 62 61 73 65 20 66 61 69 6c 73 20 74 6f 20 6f  abase fails to o
16590 70 65 6e 2c 20 70 72 69 6e 74 20 61 6e 20 65 72  pen, print an er
165a0 72 6f 72 20 6d 65 73 73 61 67 65 20 61 6e 64 20  ror message and 
165b0 65 78 69 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  exit..*/.static 
165c0 76 6f 69 64 20 6f 70 65 6e 5f 64 62 28 53 68 65  void open_db(She
165d0 6c 6c 53 74 61 74 65 20 2a 70 2c 20 69 6e 74 20  llState *p, int 
165e0 6b 65 65 70 41 6c 69 76 65 29 7b 0a 20 20 69 66  keepAlive){.  if
165f0 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b 0a 20 20  ( p->db==0 ){.  
16600 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61    sqlite3_initia
16610 6c 69 7a 65 28 29 3b 0a 20 20 20 20 73 71 6c 69  lize();.    sqli
16620 74 65 33 5f 6f 70 65 6e 28 70 2d 3e 7a 44 62 46  te3_open(p->zDbF
16630 69 6c 65 6e 61 6d 65 2c 20 26 70 2d 3e 64 62 29  ilename, &p->db)
16640 3b 0a 20 20 20 20 67 6c 6f 62 61 6c 44 62 20 3d  ;.    globalDb =
16650 20 70 2d 3e 64 62 3b 0a 20 20 20 20 69 66 28 20   p->db;.    if( 
16660 70 2d 3e 64 62 3d 3d 30 20 7c 7c 20 53 51 4c 49  p->db==0 || SQLI
16670 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 5f 65  TE_OK!=sqlite3_e
16680 72 72 63 6f 64 65 28 70 2d 3e 64 62 29 20 29 7b  rrcode(p->db) ){
16690 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
166a0 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
166b0 3a 20 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e  : unable to open
166c0 20 64 61 74 61 62 61 73 65 20 5c 22 25 73 5c 22   database \"%s\"
166d0 3a 20 25 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20  : %s\n",.       
166e0 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d     p->zDbFilenam
166f0 65 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  e, sqlite3_errms
16700 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
16710 20 69 66 28 20 6b 65 65 70 41 6c 69 76 65 20 29   if( keepAlive )
16720 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 65   return;.      e
16730 78 69 74 28 31 29 3b 0a 20 20 20 20 7d 0a 23 69  xit(1);.    }.#i
16740 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
16750 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
16760 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e 61  .    sqlite3_ena
16770 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
16780 6f 6e 28 70 2d 3e 64 62 2c 20 31 29 3b 0a 23 65  on(p->db, 1);.#e
16790 6e 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33  ndif.    sqlite3
167a0 5f 66 69 6c 65 69 6f 5f 69 6e 69 74 28 70 2d 3e  _fileio_init(p->
167b0 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73  db, 0, 0);.    s
167c0 71 6c 69 74 65 33 5f 73 68 61 74 68 72 65 65 5f  qlite3_shathree_
167d0 69 6e 69 74 28 70 2d 3e 64 62 2c 20 30 2c 20 30  init(p->db, 0, 0
167e0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  );.    sqlite3_c
167f0 6f 6d 70 6c 65 74 69 6f 6e 5f 69 6e 69 74 28 70  ompletion_init(p
16800 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 23 69 66  ->db, 0, 0);.#if
16810 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  def SQLITE_HAVE_
16820 5a 4c 49 42 0a 20 20 20 20 73 71 6c 69 74 65 33  ZLIB.    sqlite3
16830 5f 63 6f 6d 70 72 65 73 73 5f 69 6e 69 74 28 70  _compress_init(p
16840 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 23 65 6e  ->db, 0, 0);.#en
16850 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  dif.    sqlite3_
16860 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
16870 70 2d 3e 64 62 2c 20 22 73 68 65 6c 6c 5f 61 64  p->db, "shell_ad
16880 64 5f 73 63 68 65 6d 61 22 2c 20 32 2c 20 53 51  d_schema", 2, SQ
16890 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 0a 20 20  LITE_UTF8, 0,.  
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168b0 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 41            shellA
168c0 64 64 53 63 68 65 6d 61 4e 61 6d 65 2c 20 30 2c  ddSchemaName, 0,
168d0 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 69 66 20   0);.  }.}..#if 
168e0 48 41 56 45 5f 52 45 41 44 4c 49 4e 45 20 7c 7c  HAVE_READLINE ||
168f0 20 48 41 56 45 5f 45 44 49 54 4c 49 4e 45 0a 2f   HAVE_EDITLINE./
16900 2a 0a 2a 2a 20 52 65 61 64 6c 69 6e 65 20 63 6f  *.** Readline co
16910 6d 70 6c 65 74 69 6f 6e 20 63 61 6c 6c 62 61 63  mpletion callbac
16920 6b 73 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  ks.*/.static cha
16930 72 20 2a 72 65 61 64 6c 69 6e 65 5f 63 6f 6d 70  r *readline_comp
16940 6c 65 74 69 6f 6e 5f 67 65 6e 65 72 61 74 6f 72  letion_generator
16950 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 74 65 78  (const char *tex
16960 74 2c 20 69 6e 74 20 73 74 61 74 65 29 7b 0a 20  t, int state){. 
16970 20 73 74 61 74 69 63 20 73 71 6c 69 74 65 33 5f   static sqlite3_
16980 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b  stmt *pStmt = 0;
16990 0a 20 20 63 68 61 72 20 2a 7a 52 65 74 3b 0a 20  .  char *zRet;. 
169a0 20 69 66 28 20 73 74 61 74 65 3d 3d 30 20 29 7b   if( state==0 ){
169b0 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  .    char *zSql;
169c0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
169d0 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
169e0 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
169f0 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54  _mprintf("SELECT
16a00 20 44 49 53 54 49 4e 43 54 20 63 61 6e 64 69 64   DISTINCT candid
16a10 61 74 65 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61  ate COLLATE noca
16a20 73 65 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  se".            
16a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16a40 20 20 46 52 4f 4d 20 63 6f 6d 70 6c 65 74 69 6f    FROM completio
16a50 6e 28 25 51 29 20 4f 52 44 45 52 20 42 59 20 31  n(%Q) ORDER BY 1
16a60 22 2c 20 74 65 78 74 29 3b 0a 20 20 20 20 73 71  ", text);.    sq
16a70 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
16a80 28 67 6c 6f 62 61 6c 44 62 2c 20 7a 53 71 6c 2c  (globalDb, zSql,
16a90 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
16aa0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
16ab0 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 0a 20 20 69  e(zSql);.  }.  i
16ac0 66 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  f( sqlite3_step(
16ad0 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52  pStmt)==SQLITE_R
16ae0 4f 57 20 29 7b 0a 20 20 20 20 7a 52 65 74 20 3d  OW ){.    zRet =
16af0 20 73 74 72 64 75 70 28 28 63 6f 6e 73 74 20 63   strdup((const c
16b00 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
16b10 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  umn_text(pStmt, 
16b20 30 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  0));.  }else{.  
16b30 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
16b40 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 70  ze(pStmt);.    p
16b50 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20 20 7a 52  Stmt = 0;.    zR
16b60 65 74 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65  et = 0;.  }.  re
16b70 74 75 72 6e 20 7a 52 65 74 3b 0a 7d 0a 73 74 61  turn zRet;.}.sta
16b80 74 69 63 20 63 68 61 72 20 2a 2a 72 65 61 64 6c  tic char **readl
16b90 69 6e 65 5f 63 6f 6d 70 6c 65 74 69 6f 6e 28 63  ine_completion(c
16ba0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 65 78 74  onst char *zText
16bb0 2c 20 69 6e 74 20 69 53 74 61 72 74 2c 20 69 6e  , int iStart, in
16bc0 74 20 69 45 6e 64 29 7b 0a 20 20 72 6c 5f 61 74  t iEnd){.  rl_at
16bd0 74 65 6d 70 74 65 64 5f 63 6f 6d 70 6c 65 74 69  tempted_completi
16be0 6f 6e 5f 6f 76 65 72 20 3d 20 31 3b 0a 20 20 72  on_over = 1;.  r
16bf0 65 74 75 72 6e 20 72 6c 5f 63 6f 6d 70 6c 65 74  eturn rl_complet
16c00 69 6f 6e 5f 6d 61 74 63 68 65 73 28 7a 54 65 78  ion_matches(zTex
16c10 74 2c 20 72 65 61 64 6c 69 6e 65 5f 63 6f 6d 70  t, readline_comp
16c20 6c 65 74 69 6f 6e 5f 67 65 6e 65 72 61 74 6f 72  letion_generator
16c30 29 3b 0a 7d 0a 0a 23 65 6c 69 66 20 48 41 56 45  );.}..#elif HAVE
16c40 5f 4c 49 4e 45 4e 4f 49 53 45 0a 2f 2a 0a 2a 2a  _LINENOISE./*.**
16c50 20 4c 69 6e 65 6e 6f 69 73 65 20 63 6f 6d 70 6c   Linenoise compl
16c60 65 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 0a 2a  etion callback.*
16c70 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6c 69  /.static void li
16c80 6e 65 6e 6f 69 73 65 5f 63 6f 6d 70 6c 65 74 69  nenoise_completi
16c90 6f 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  on(const char *z
16ca0 4c 69 6e 65 2c 20 6c 69 6e 65 6e 6f 69 73 65 43  Line, linenoiseC
16cb0 6f 6d 70 6c 65 74 69 6f 6e 73 20 2a 6c 63 29 7b  ompletions *lc){
16cc0 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 20 3d 20 28  .  int nLine = (
16cd0 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4c 69 6e 65  int)strlen(zLine
16ce0 29 3b 0a 20 20 69 6e 74 20 69 2c 20 69 53 74 61  );.  int i, iSta
16cf0 72 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  rt;.  sqlite3_st
16d00 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20  mt *pStmt = 0;. 
16d10 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 63   char *zSql;.  c
16d20 68 61 72 20 7a 42 75 66 5b 31 30 30 30 5d 3b 0a  har zBuf[1000];.
16d30 0a 20 20 69 66 28 20 6e 4c 69 6e 65 3e 73 69 7a  .  if( nLine>siz
16d40 65 6f 66 28 7a 42 75 66 29 2d 33 30 20 29 20 72  eof(zBuf)-30 ) r
16d50 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 7a 4c 69  eturn;.  if( zLi
16d60 6e 65 5b 30 5d 3d 3d 27 2e 27 20 29 20 72 65 74  ne[0]=='.' ) ret
16d70 75 72 6e 3b 0a 20 20 66 6f 72 28 69 3d 6e 4c 69  urn;.  for(i=nLi
16d80 6e 65 2d 31 3b 20 69 3e 3d 30 20 26 26 20 28 69  ne-1; i>=0 && (i
16d90 73 61 6c 6e 75 6d 28 7a 4c 69 6e 65 5b 69 5d 29  salnum(zLine[i])
16da0 20 7c 7c 20 7a 4c 69 6e 65 5b 69 5d 3d 3d 27 5f   || zLine[i]=='_
16db0 27 29 3b 20 69 2d 2d 29 7b 7d 0a 20 20 69 66 28  '); i--){}.  if(
16dc0 20 69 3d 3d 6e 4c 69 6e 65 2d 31 20 29 20 72 65   i==nLine-1 ) re
16dd0 74 75 72 6e 3b 0a 20 20 69 53 74 61 72 74 20 3d  turn;.  iStart =
16de0 20 69 2b 31 3b 0a 20 20 6d 65 6d 63 70 79 28 7a   i+1;.  memcpy(z
16df0 42 75 66 2c 20 7a 4c 69 6e 65 2c 20 69 53 74 61  Buf, zLine, iSta
16e00 72 74 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71  rt);.  zSql = sq
16e10 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53  lite3_mprintf("S
16e20 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 63  ELECT DISTINCT c
16e30 61 6e 64 69 64 61 74 65 20 43 4f 4c 4c 41 54 45  andidate COLLATE
16e40 20 6e 6f 63 61 73 65 22 0a 20 20 20 20 20 20 20   nocase".       
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d 70 6c 65    "  FROM comple
16e70 74 69 6f 6e 28 25 51 2c 25 51 29 20 4f 52 44 45  tion(%Q,%Q) ORDE
16e80 52 20 42 59 20 31 22 2c 0a 20 20 20 20 20 20 20  R BY 1",.       
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 26 7a 4c 69 6e 65 5b 69 53 74 61 72 74 5d    &zLine[iStart]
16eb0 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 73 71 6c 69  , zLine);.  sqli
16ec0 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 67  te3_prepare_v2(g
16ed0 6c 6f 62 61 6c 44 62 2c 20 7a 53 71 6c 2c 20 2d  lobalDb, zSql, -
16ee0 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
16ef0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
16f00 71 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 65  ql);.  sqlite3_e
16f10 78 65 63 28 67 6c 6f 62 61 6c 44 62 2c 20 22 50  xec(globalDb, "P
16f20 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74  RAGMA page_count
16f30 22 2c 20 30 2c 20 30 2c 20 30 29 3b 20 2f 2a 20  ", 0, 0, 0); /* 
16f40 4c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  Load the schema 
16f50 2a 2f 0a 20 20 77 68 69 6c 65 28 20 73 71 6c 69  */.  while( sqli
16f60 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3d  te3_step(pStmt)=
16f70 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20  =SQLITE_ROW ){. 
16f80 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
16f90 43 6f 6d 70 6c 65 74 69 6f 6e 20 3d 20 28 63 6f  Completion = (co
16fa0 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
16fb0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
16fc0 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6e 74  tmt, 0);.    int
16fd0 20 6e 43 6f 6d 70 6c 65 74 69 6f 6e 20 3d 20 73   nCompletion = s
16fe0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
16ff0 74 65 73 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20  tes(pStmt, 0);. 
17000 20 20 20 69 66 28 20 69 53 74 61 72 74 2b 6e 43     if( iStart+nC
17010 6f 6d 70 6c 65 74 69 6f 6e 20 3c 20 73 69 7a 65  ompletion < size
17020 6f 66 28 7a 42 75 66 29 2d 31 20 29 7b 0a 20 20  of(zBuf)-1 ){.  
17030 20 20 20 20 6d 65 6d 63 70 79 28 7a 42 75 66 2b      memcpy(zBuf+
17040 69 53 74 61 72 74 2c 20 7a 43 6f 6d 70 6c 65 74  iStart, zComplet
17050 69 6f 6e 2c 20 6e 43 6f 6d 70 6c 65 74 69 6f 6e  ion, nCompletion
17060 2b 31 29 3b 0a 20 20 20 20 20 20 6c 69 6e 65 6e  +1);.      linen
17070 6f 69 73 65 41 64 64 43 6f 6d 70 6c 65 74 69 6f  oiseAddCompletio
17080 6e 28 6c 63 2c 20 7a 42 75 66 29 3b 0a 20 20 20  n(lc, zBuf);.   
17090 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33   }.  }.  sqlite3
170a0 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
170b0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
170c0 2a 20 44 6f 20 43 2d 6c 61 6e 67 75 61 67 65 20  * Do C-language 
170d0 73 74 79 6c 65 20 64 65 71 75 6f 74 69 6e 67 2e  style dequoting.
170e0 0a 2a 2a 0a 2a 2a 20 20 20 20 5c 61 20 20 20 20  .**.**    \a    
170f0 2d 3e 20 61 6c 61 72 6d 0a 2a 2a 20 20 20 20 5c  -> alarm.**    \
17100 62 20 20 20 20 2d 3e 20 62 61 63 6b 73 70 61 63  b    -> backspac
17110 65 0a 2a 2a 20 20 20 20 5c 74 20 20 20 20 2d 3e  e.**    \t    ->
17120 20 74 61 62 0a 2a 2a 20 20 20 20 5c 6e 20 20 20   tab.**    \n   
17130 20 2d 3e 20 6e 65 77 6c 69 6e 65 0a 2a 2a 20 20   -> newline.**  
17140 20 20 5c 76 20 20 20 20 2d 3e 20 76 65 72 74 69    \v    -> verti
17150 63 61 6c 20 74 61 62 0a 2a 2a 20 20 20 20 5c 66  cal tab.**    \f
17160 20 20 20 20 2d 3e 20 66 6f 72 6d 20 66 65 65 64      -> form feed
17170 0a 2a 2a 20 20 20 20 5c 72 20 20 20 20 2d 3e 20  .**    \r    -> 
17180 63 61 72 72 69 61 67 65 20 72 65 74 75 72 6e 0a  carriage return.
17190 2a 2a 20 20 20 20 5c 73 20 20 20 20 2d 3e 20 73  **    \s    -> s
171a0 70 61 63 65 0a 2a 2a 20 20 20 20 5c 22 20 20 20  pace.**    \"   
171b0 20 2d 3e 20 22 0a 2a 2a 20 20 20 20 5c 27 20 20   -> ".**    \'  
171c0 20 20 2d 3e 20 27 0a 2a 2a 20 20 20 20 5c 5c 20    -> '.**    \\ 
171d0 20 20 20 2d 3e 20 62 61 63 6b 73 6c 61 73 68 0a     -> backslash.
171e0 2a 2a 20 20 20 20 5c 4e 4e 4e 20 20 2d 3e 20 61  **    \NNN  -> a
171f0 73 63 69 69 20 63 68 61 72 61 63 74 65 72 20 4e  scii character N
17200 4e 4e 20 69 6e 20 6f 63 74 61 6c 0a 2a 2f 0a 73  NN in octal.*/.s
17210 74 61 74 69 63 20 76 6f 69 64 20 72 65 73 6f 6c  tatic void resol
17220 76 65 5f 62 61 63 6b 73 6c 61 73 68 65 73 28 63  ve_backslashes(c
17230 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
17240 2c 20 6a 3b 0a 20 20 63 68 61 72 20 63 3b 0a 20  , j;.  char c;. 
17250 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 2a 7a   while( *z && *z
17260 21 3d 27 5c 5c 27 20 29 20 7a 2b 2b 3b 0a 20 20  !='\\' ) z++;.  
17270 66 6f 72 28 69 3d 6a 3d 30 3b 20 28 63 20 3d 20  for(i=j=0; (c = 
17280 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b 2c 20 6a  z[i])!=0; i++, j
17290 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 63 3d 3d  ++){.    if( c==
172a0 27 5c 5c 27 20 26 26 20 7a 5b 69 2b 31 5d 21 3d  '\\' && z[i+1]!=
172b0 30 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 7a  0 ){.      c = z
172c0 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28  [++i];.      if(
172d0 20 63 3d 3d 27 61 27 20 29 7b 0a 20 20 20 20 20   c=='a' ){.     
172e0 20 20 20 63 20 3d 20 27 5c 61 27 3b 0a 20 20 20     c = '\a';.   
172f0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
17300 27 62 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63  'b' ){.        c
17310 20 3d 20 27 5c 62 27 3b 0a 20 20 20 20 20 20 7d   = '\b';.      }
17320 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 74 27 20  else if( c=='t' 
17330 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27  ){.        c = '
17340 5c 74 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  \t';.      }else
17350 20 69 66 28 20 63 3d 3d 27 6e 27 20 29 7b 0a 20   if( c=='n' ){. 
17360 20 20 20 20 20 20 20 63 20 3d 20 27 5c 6e 27 3b         c = '\n';
17370 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
17380 20 63 3d 3d 27 76 27 20 29 7b 0a 20 20 20 20 20   c=='v' ){.     
17390 20 20 20 63 20 3d 20 27 5c 76 27 3b 0a 20 20 20     c = '\v';.   
173a0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
173b0 27 66 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63  'f' ){.        c
173c0 20 3d 20 27 5c 66 27 3b 0a 20 20 20 20 20 20 7d   = '\f';.      }
173d0 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 72 27 20  else if( c=='r' 
173e0 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27  ){.        c = '
173f0 5c 72 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  \r';.      }else
17400 20 69 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a 20   if( c=='"' ){. 
17410 20 20 20 20 20 20 20 63 20 3d 20 27 22 27 3b 0a         c = '"';.
17420 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
17430 63 3d 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20 20  c=='\'' ){.     
17440 20 20 20 63 20 3d 20 27 5c 27 27 3b 0a 20 20 20     c = '\'';.   
17450 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
17460 27 5c 5c 27 20 29 7b 0a 20 20 20 20 20 20 20 20  '\\' ){.        
17470 63 20 3d 20 27 5c 5c 27 3b 0a 20 20 20 20 20 20  c = '\\';.      
17480 7d 65 6c 73 65 20 69 66 28 20 63 3e 3d 27 30 27  }else if( c>='0'
17490 20 26 26 20 63 3c 3d 27 37 27 20 29 7b 0a 20 20   && c<='7' ){.  
174a0 20 20 20 20 20 20 63 20 2d 3d 20 27 30 27 3b 0a        c -= '0';.
174b0 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69 2b          if( z[i+
174c0 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 69 2b 31  1]>='0' && z[i+1
174d0 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20 20 20 20  ]<='7' ){.      
174e0 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20      i++;.       
174f0 20 20 20 63 20 3d 20 28 63 3c 3c 33 29 20 2b 20     c = (c<<3) + 
17500 7a 5b 69 5d 20 2d 20 27 30 27 3b 0a 20 20 20 20  z[i] - '0';.    
17510 20 20 20 20 20 20 69 66 28 20 7a 5b 69 2b 31 5d        if( z[i+1]
17520 3e 3d 27 30 27 20 26 26 20 7a 5b 69 2b 31 5d 3c  >='0' && z[i+1]<
17530 3d 27 37 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='7' ){.        
17540 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20      i++;.       
17550 20 20 20 20 20 63 20 3d 20 28 63 3c 3c 33 29 20       c = (c<<3) 
17560 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b 0a 20 20  + z[i] - '0';.  
17570 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17580 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
17590 7d 0a 20 20 20 20 7a 5b 6a 5d 20 3d 20 63 3b 0a  }.    z[j] = c;.
175a0 20 20 7d 0a 20 20 69 66 28 20 6a 3c 69 20 29 20    }.  if( j<i ) 
175b0 7a 5b 6a 5d 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a  z[j] = 0;.}../*.
175c0 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 76 61  ** Return the va
175d0 6c 75 65 20 6f 66 20 61 20 68 65 78 61 64 65 63  lue of a hexadec
175e0 69 6d 61 6c 20 64 69 67 69 74 2e 20 20 52 65 74  imal digit.  Ret
175f0 75 72 6e 20 2d 31 20 69 66 20 74 68 65 20 69 6e  urn -1 if the in
17600 70 75 74 0a 2a 2a 20 69 73 20 6e 6f 74 20 61 20  put.** is not a 
17610 68 65 78 20 64 69 67 69 74 2e 0a 2a 2f 0a 73 74  hex digit..*/.st
17620 61 74 69 63 20 69 6e 74 20 68 65 78 44 69 67 69  atic int hexDigi
17630 74 56 61 6c 75 65 28 63 68 61 72 20 63 29 7b 0a  tValue(char c){.
17640 20 20 69 66 28 20 63 3e 3d 27 30 27 20 26 26 20    if( c>='0' && 
17650 63 3c 3d 27 39 27 20 29 20 72 65 74 75 72 6e 20  c<='9' ) return 
17660 63 20 2d 20 27 30 27 3b 0a 20 20 69 66 28 20 63  c - '0';.  if( c
17670 3e 3d 27 61 27 20 26 26 20 63 3c 3d 27 66 27 20  >='a' && c<='f' 
17680 29 20 72 65 74 75 72 6e 20 63 20 2d 20 27 61 27  ) return c - 'a'
17690 20 2b 20 31 30 3b 0a 20 20 69 66 28 20 63 3e 3d   + 10;.  if( c>=
176a0 27 41 27 20 26 26 20 63 3c 3d 27 46 27 20 29 20  'A' && c<='F' ) 
176b0 72 65 74 75 72 6e 20 63 20 2d 20 27 41 27 20 2b  return c - 'A' +
176c0 20 31 30 3b 0a 20 20 72 65 74 75 72 6e 20 2d 31   10;.  return -1
176d0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  ;.}../*.** Inter
176e0 70 72 65 74 20 7a 41 72 67 20 61 73 20 61 6e 20  pret zArg as an 
176f0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 70  integer value, p
17700 6f 73 73 69 62 6c 79 20 77 69 74 68 20 73 75 66  ossibly with suf
17710 66 69 78 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63  fixes..*/.static
17720 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 69   sqlite3_int64 i
17730 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6f 6e 73  ntegerValue(cons
17740 74 20 63 68 61 72 20 2a 7a 41 72 67 29 7b 0a 20  t char *zArg){. 
17750 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 76   sqlite3_int64 v
17760 20 3d 20 30 3b 0a 20 20 73 74 61 74 69 63 20 63   = 0;.  static c
17770 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 20 63 68  onst struct { ch
17780 61 72 20 2a 7a 53 75 66 66 69 78 3b 20 69 6e 74  ar *zSuffix; int
17790 20 69 4d 75 6c 74 3b 20 7d 20 61 4d 75 6c 74 5b   iMult; } aMult[
177a0 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 22 4b 69 42  ] = {.    { "KiB
177b0 22 2c 20 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b  ", 1024 },.    {
177c0 20 22 4d 69 42 22 2c 20 31 30 32 34 2a 31 30 32   "MiB", 1024*102
177d0 34 20 7d 2c 0a 20 20 20 20 7b 20 22 47 69 42 22  4 },.    { "GiB"
177e0 2c 20 31 30 32 34 2a 31 30 32 34 2a 31 30 32 34  , 1024*1024*1024
177f0 20 7d 2c 0a 20 20 20 20 7b 20 22 4b 42 22 2c 20   },.    { "KB", 
17800 20 31 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22   1000 },.    { "
17810 4d 42 22 2c 20 20 31 30 30 30 30 30 30 20 7d 2c  MB",  1000000 },
17820 0a 20 20 20 20 7b 20 22 47 42 22 2c 20 20 31 30  .    { "GB",  10
17830 30 30 30 30 30 30 30 30 20 7d 2c 0a 20 20 20 20  00000000 },.    
17840 7b 20 22 4b 22 2c 20 20 20 31 30 30 30 20 7d 2c  { "K",   1000 },
17850 0a 20 20 20 20 7b 20 22 4d 22 2c 20 20 20 31 30  .    { "M",   10
17860 30 30 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22  00000 },.    { "
17870 47 22 2c 20 20 20 31 30 30 30 30 30 30 30 30 30  G",   1000000000
17880 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69   },.  };.  int i
17890 3b 0a 20 20 69 6e 74 20 69 73 4e 65 67 20 3d 20  ;.  int isNeg = 
178a0 30 3b 0a 20 20 69 66 28 20 7a 41 72 67 5b 30 5d  0;.  if( zArg[0]
178b0 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 69 73 4e  =='-' ){.    isN
178c0 65 67 20 3d 20 31 3b 0a 20 20 20 20 7a 41 72 67  eg = 1;.    zArg
178d0 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ++;.  }else if( 
178e0 7a 41 72 67 5b 30 5d 3d 3d 27 2b 27 20 29 7b 0a  zArg[0]=='+' ){.
178f0 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 7d 0a      zArg++;.  }.
17900 20 20 69 66 28 20 7a 41 72 67 5b 30 5d 3d 3d 27    if( zArg[0]=='
17910 30 27 20 26 26 20 7a 41 72 67 5b 31 5d 3d 3d 27  0' && zArg[1]=='
17920 78 27 20 29 7b 0a 20 20 20 20 69 6e 74 20 78 3b  x' ){.    int x;
17930 0a 20 20 20 20 7a 41 72 67 20 2b 3d 20 32 3b 0a  .    zArg += 2;.
17940 20 20 20 20 77 68 69 6c 65 28 20 28 78 20 3d 20      while( (x = 
17950 68 65 78 44 69 67 69 74 56 61 6c 75 65 28 7a 41  hexDigitValue(zA
17960 72 67 5b 30 5d 29 29 3e 3d 30 20 29 7b 0a 20 20  rg[0]))>=0 ){.  
17970 20 20 20 20 76 20 3d 20 28 76 3c 3c 34 29 20 2b      v = (v<<4) +
17980 20 78 3b 0a 20 20 20 20 20 20 7a 41 72 67 2b 2b   x;.      zArg++
17990 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
179a0 0a 20 20 20 20 77 68 69 6c 65 28 20 49 73 44 69  .    while( IsDi
179b0 67 69 74 28 7a 41 72 67 5b 30 5d 29 20 29 7b 0a  git(zArg[0]) ){.
179c0 20 20 20 20 20 20 76 20 3d 20 76 2a 31 30 20 2b        v = v*10 +
179d0 20 7a 41 72 67 5b 30 5d 20 2d 20 27 30 27 3b 0a   zArg[0] - '0';.
179e0 20 20 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20        zArg++;.  
179f0 20 20 7d 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d    }.  }.  for(i=
17a00 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61  0; i<ArraySize(a
17a10 4d 75 6c 74 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  Mult); i++){.   
17a20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72   if( sqlite3_str
17a30 69 63 6d 70 28 61 4d 75 6c 74 5b 69 5d 2e 7a 53  icmp(aMult[i].zS
17a40 75 66 66 69 78 2c 20 7a 41 72 67 29 3d 3d 30 20  uffix, zArg)==0 
17a50 29 7b 0a 20 20 20 20 20 20 76 20 2a 3d 20 61 4d  ){.      v *= aM
17a60 75 6c 74 5b 69 5d 2e 69 4d 75 6c 74 3b 0a 20 20  ult[i].iMult;.  
17a70 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
17a80 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 69 73  .  }.  return is
17a90 4e 65 67 3f 20 2d 76 20 3a 20 76 3b 0a 7d 0a 0a  Neg? -v : v;.}..
17aa0 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
17ab0 7a 41 72 67 20 61 73 20 65 69 74 68 65 72 20 61  zArg as either a
17ac0 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 62  n integer or a b
17ad0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 52  oolean value.  R
17ae0 65 74 75 72 6e 20 31 20 6f 72 20 30 0a 2a 2a 20  eturn 1 or 0.** 
17af0 66 6f 72 20 54 52 55 45 20 61 6e 64 20 46 41 4c  for TRUE and FAL
17b00 53 45 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20  SE.  Return the 
17b10 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
17b20 20 61 70 70 72 6f 70 72 69 61 74 65 2e 0a 2a 2f   appropriate..*/
17b30 0a 73 74 61 74 69 63 20 69 6e 74 20 62 6f 6f 6c  .static int bool
17b40 65 61 6e 56 61 6c 75 65 28 63 6f 6e 73 74 20 63  eanValue(const c
17b50 68 61 72 20 2a 7a 41 72 67 29 7b 0a 20 20 69 6e  har *zArg){.  in
17b60 74 20 69 3b 0a 20 20 69 66 28 20 7a 41 72 67 5b  t i;.  if( zArg[
17b70 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41 72 67 5b  0]=='0' && zArg[
17b80 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 66  1]=='x' ){.    f
17b90 6f 72 28 69 3d 32 3b 20 68 65 78 44 69 67 69 74  or(i=2; hexDigit
17ba0 56 61 6c 75 65 28 7a 41 72 67 5b 69 5d 29 3e 3d  Value(zArg[i])>=
17bb0 30 3b 20 69 2b 2b 29 7b 7d 0a 20 20 7d 65 6c 73  0; i++){}.  }els
17bc0 65 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  e{.    for(i=0; 
17bd0 7a 41 72 67 5b 69 5d 3e 3d 27 30 27 20 26 26 20  zArg[i]>='0' && 
17be0 7a 41 72 67 5b 69 5d 3c 3d 27 39 27 3b 20 69 2b  zArg[i]<='9'; i+
17bf0 2b 29 7b 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69  +){}.  }.  if( i
17c00 3e 30 20 26 26 20 7a 41 72 67 5b 69 5d 3d 3d 30  >0 && zArg[i]==0
17c10 20 29 20 72 65 74 75 72 6e 20 28 69 6e 74 29 28   ) return (int)(
17c20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 7a 41 72  integerValue(zAr
17c30 67 29 20 26 20 30 78 66 66 66 66 66 66 66 66 29  g) & 0xffffffff)
17c40 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  ;.  if( sqlite3_
17c50 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 20 22 6f  stricmp(zArg, "o
17c60 6e 22 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  n")==0 || sqlite
17c70 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 22  3_stricmp(zArg,"
17c80 79 65 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  yes")==0 ){.    
17c90 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20  return 1;.  }.  
17ca0 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69  if( sqlite3_stri
17cb0 63 6d 70 28 7a 41 72 67 2c 20 22 6f 66 66 22 29  cmp(zArg, "off")
17cc0 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73  ==0 || sqlite3_s
17cd0 74 72 69 63 6d 70 28 7a 41 72 67 2c 22 6e 6f 22  tricmp(zArg,"no"
17ce0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
17cf0 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 75 74 66 38  rn 0;.  }.  utf8
17d00 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
17d10 22 45 52 52 4f 52 3a 20 4e 6f 74 20 61 20 62 6f  "ERROR: Not a bo
17d20 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 5c 22 25  olean value: \"%
17d30 73 5c 22 2e 20 41 73 73 75 6d 69 6e 67 20 5c 22  s\". Assuming \"
17d40 6e 6f 5c 22 2e 5c 6e 22 2c 0a 20 20 20 20 20 20  no\".\n",.      
17d50 20 20 20 20 7a 41 72 67 29 3b 0a 20 20 72 65 74      zArg);.  ret
17d60 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
17d70 53 65 74 20 6f 72 20 63 6c 65 61 72 20 61 20 73  Set or clear a s
17d80 68 65 6c 6c 20 66 6c 61 67 20 61 63 63 6f 72 64  hell flag accord
17d90 69 6e 67 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e  ing to a boolean
17da0 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69   value..*/.stati
17db0 63 20 76 6f 69 64 20 73 65 74 4f 72 43 6c 65 61  c void setOrClea
17dc0 72 46 6c 61 67 28 53 68 65 6c 6c 53 74 61 74 65  rFlag(ShellState
17dd0 20 2a 70 2c 20 75 6e 73 69 67 6e 65 64 20 6d 46   *p, unsigned mF
17de0 6c 61 67 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  lag, const char 
17df0 2a 7a 41 72 67 29 7b 0a 20 20 69 66 28 20 62 6f  *zArg){.  if( bo
17e00 6f 6c 65 61 6e 56 61 6c 75 65 28 7a 41 72 67 29  oleanValue(zArg)
17e10 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 53 65 74   ){.    ShellSet
17e20 46 6c 61 67 28 70 2c 20 6d 46 6c 61 67 29 3b 0a  Flag(p, mFlag);.
17e30 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 53 68 65    }else{.    She
17e40 6c 6c 43 6c 65 61 72 46 6c 61 67 28 70 2c 20 6d  llClearFlag(p, m
17e50 46 6c 61 67 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  Flag);.  }.}../*
17e60 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 6f 75 74  .** Close an out
17e70 70 75 74 20 66 69 6c 65 2c 20 61 73 73 75 6d 69  put file, assumi
17e80 6e 67 20 69 74 20 69 73 20 6e 6f 74 20 73 74 64  ng it is not std
17e90 65 72 72 20 6f 72 20 73 74 64 6f 75 74 0a 2a 2f  err or stdout.*/
17ea0 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74  .static void out
17eb0 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28 46  put_file_close(F
17ec0 49 4c 45 20 2a 66 29 7b 0a 20 20 69 66 28 20 66  ILE *f){.  if( f
17ed0 20 26 26 20 66 21 3d 73 74 64 6f 75 74 20 26 26   && f!=stdout &&
17ee0 20 66 21 3d 73 74 64 65 72 72 20 29 20 66 63 6c   f!=stderr ) fcl
17ef0 6f 73 65 28 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ose(f);.}../*.**
17f00 20 54 72 79 20 74 6f 20 6f 70 65 6e 20 61 6e 20   Try to open an 
17f10 6f 75 74 70 75 74 20 66 69 6c 65 2e 20 20 20 54  output file.   T
17f20 68 65 20 6e 61 6d 65 73 20 22 73 74 64 6f 75 74  he names "stdout
17f30 22 20 61 6e 64 20 22 73 74 64 65 72 72 22 20 61  " and "stderr" a
17f40 72 65 0a 2a 2a 20 72 65 63 6f 67 6e 69 7a 65 64  re.** recognized
17f50 20 61 6e 64 20 64 6f 20 74 68 65 20 72 69 67 68   and do the righ
17f60 74 20 74 68 69 6e 67 2e 20 20 4e 55 4c 4c 20 69  t thing.  NULL i
17f70 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68  s returned if th
17f80 65 20 6f 75 74 70 75 74 0a 2a 2a 20 66 69 6c 65  e output.** file
17f90 6e 61 6d 65 20 69 73 20 22 6f 66 66 22 2e 0a 2a  name is "off"..*
17fa0 2f 0a 73 74 61 74 69 63 20 46 49 4c 45 20 2a 6f  /.static FILE *o
17fb0 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28  utput_file_open(
17fc0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
17fd0 65 29 7b 0a 20 20 46 49 4c 45 20 2a 66 3b 0a 20  e){.  FILE *f;. 
17fe0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 46 69 6c   if( strcmp(zFil
17ff0 65 2c 22 73 74 64 6f 75 74 22 29 3d 3d 30 20 29  e,"stdout")==0 )
18000 7b 0a 20 20 20 20 66 20 3d 20 73 74 64 6f 75 74  {.    f = stdout
18010 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
18020 72 63 6d 70 28 7a 46 69 6c 65 2c 20 22 73 74 64  rcmp(zFile, "std
18030 65 72 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  err")==0 ){.    
18040 66 20 3d 20 73 74 64 65 72 72 3b 0a 20 20 7d 65  f = stderr;.  }e
18050 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
18060 46 69 6c 65 2c 20 22 6f 66 66 22 29 3d 3d 30 20  File, "off")==0 
18070 29 7b 0a 20 20 20 20 66 20 3d 20 30 3b 0a 20 20  ){.    f = 0;.  
18080 7d 65 6c 73 65 7b 0a 20 20 20 20 66 20 3d 20 66  }else{.    f = f
18090 6f 70 65 6e 28 7a 46 69 6c 65 2c 20 22 77 62 22  open(zFile, "wb"
180a0 29 3b 0a 20 20 20 20 69 66 28 20 66 3d 3d 30 20  );.    if( f==0 
180b0 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
180c0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
180d0 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
180e0 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c   \"%s\"\n", zFil
180f0 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  e);.    }.  }.  
18100 72 65 74 75 72 6e 20 66 3b 0a 7d 0a 0a 23 69 66  return f;.}..#if
18110 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
18120 5f 55 4e 54 45 53 54 41 42 4c 45 29 0a 23 69 66  _UNTESTABLE).#if
18130 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
18140 5f 4f 4d 49 54 5f 54 52 41 43 45 29 20 26 26 20  _OMIT_TRACE) && 
18150 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
18160 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
18170 49 4e 54 29 0a 2f 2a 0a 2a 2a 20 41 20 72 6f 75  INT)./*.** A rou
18180 74 69 6e 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  tine for handlin
18190 67 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 73 71  g output from sq
181a0 6c 69 74 65 33 5f 74 72 61 63 65 28 29 2e 0a 2a  lite3_trace()..*
181b0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
181c0 5f 74 72 61 63 65 5f 63 61 6c 6c 62 61 63 6b 28  _trace_callback(
181d0 0a 20 20 75 6e 73 69 67 6e 65 64 20 6d 54 79 70  .  unsigned mTyp
181e0 65 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 2c  e,.  void *pArg,
181f0 0a 20 20 76 6f 69 64 20 2a 70 50 2c 0a 20 20 76  .  void *pP,.  v
18200 6f 69 64 20 2a 70 58 0a 29 7b 0a 20 20 46 49 4c  oid *pX.){.  FIL
18210 45 20 2a 66 20 3d 20 28 46 49 4c 45 2a 29 70 41  E *f = (FILE*)pA
18220 72 67 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52  rg;.  UNUSED_PAR
18230 41 4d 45 54 45 52 28 6d 54 79 70 65 29 3b 0a 20  AMETER(mType);. 
18240 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
18250 52 28 70 50 29 3b 0a 20 20 69 66 28 20 66 20 29  R(pP);.  if( f )
18260 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
18270 20 2a 7a 20 3d 20 28 63 6f 6e 73 74 20 63 68 61   *z = (const cha
18280 72 2a 29 70 58 3b 0a 20 20 20 20 69 6e 74 20 69  r*)pX;.    int i
18290 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a   = (int)strlen(z
182a0 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 69 3e  );.    while( i>
182b0 30 20 26 26 20 7a 5b 69 2d 31 5d 3d 3d 27 3b 27  0 && z[i-1]==';'
182c0 20 29 7b 20 69 2d 2d 3b 20 7d 0a 20 20 20 20 75   ){ i--; }.    u
182d0 74 66 38 5f 70 72 69 6e 74 66 28 66 2c 20 22 25  tf8_printf(f, "%
182e0 2e 2a 73 3b 5c 6e 22 2c 20 69 2c 20 7a 29 3b 0a  .*s;\n", i, z);.
182f0 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
18300 7d 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  }.#endif.#endif.
18310 0a 2f 2a 0a 2a 2a 20 41 20 6e 6f 2d 6f 70 20 72  ./*.** A no-op r
18320 6f 75 74 69 6e 65 20 74 68 61 74 20 72 75 6e 73  outine that runs
18330 20 77 69 74 68 20 74 68 65 20 22 2e 62 72 65 61   with the ".brea
18340 6b 70 6f 69 6e 74 22 20 64 6f 63 2d 63 6f 6d 6d  kpoint" doc-comm
18350 61 6e 64 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  and.  This is.**
18360 20 61 20 75 73 65 66 75 6c 20 73 70 6f 74 20 74   a useful spot t
18370 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
18380 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
18390 73 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74  static void test
183a0 5f 62 72 65 61 6b 70 6f 69 6e 74 28 76 6f 69 64  _breakpoint(void
183b0 29 7b 0a 20 20 73 74 61 74 69 63 20 69 6e 74 20  ){.  static int 
183c0 6e 43 61 6c 6c 20 3d 20 30 3b 0a 20 20 6e 43 61  nCall = 0;.  nCa
183d0 6c 6c 2b 2b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41  ll++;.}../*.** A
183e0 6e 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f  n object used to
183f0 20 72 65 61 64 20 61 20 43 53 56 20 61 6e 64 20   read a CSV and 
18400 6f 74 68 65 72 20 66 69 6c 65 73 20 66 6f 72 20  other files for 
18410 69 6d 70 6f 72 74 2e 0a 2a 2f 0a 74 79 70 65 64  import..*/.typed
18420 65 66 20 73 74 72 75 63 74 20 49 6d 70 6f 72 74  ef struct Import
18430 43 74 78 20 49 6d 70 6f 72 74 43 74 78 3b 0a 73  Ctx ImportCtx;.s
18440 74 72 75 63 74 20 49 6d 70 6f 72 74 43 74 78 20  truct ImportCtx 
18450 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
18460 7a 46 69 6c 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  zFile;  /* Name 
18470 6f 66 20 74 68 65 20 69 6e 70 75 74 20 66 69 6c  of the input fil
18480 65 20 2a 2f 0a 20 20 46 49 4c 45 20 2a 69 6e 3b  e */.  FILE *in;
18490 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
184a0 61 64 20 74 68 65 20 43 53 56 20 74 65 78 74 20  ad the CSV text 
184b0 66 72 6f 6d 20 74 68 69 73 20 69 6e 70 75 74 20  from this input 
184c0 73 74 72 65 61 6d 20 2a 2f 0a 20 20 63 68 61 72  stream */.  char
184d0 20 2a 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   *z;            
184e0 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65 64 20 74  /* Accumulated t
184f0 65 78 74 20 66 6f 72 20 61 20 66 69 65 6c 64 20  ext for a field 
18500 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
18510 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18520 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 7a  er of bytes in z
18530 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63   */.  int nAlloc
18540 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61  ;         /* Spa
18550 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ce allocated for
18560 20 7a 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c   z[] */.  int nL
18570 69 6e 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ine;          /*
18580 20 43 75 72 72 65 6e 74 20 6c 69 6e 65 20 6e 75   Current line nu
18590 6d 62 65 72 20 2a 2f 0a 20 20 69 6e 74 20 62 4e  mber */.  int bN
185a0 6f 74 46 69 72 73 74 3b 20 20 20 20 20 20 2f 2a  otFirst;      /*
185b0 20 54 72 75 65 20 69 66 20 6f 6e 65 20 6f 72 20   True if one or 
185c0 6d 6f 72 65 20 62 79 74 65 73 20 61 6c 72 65 61  more bytes alrea
185d0 64 79 20 72 65 61 64 20 2a 2f 0a 20 20 69 6e 74  dy read */.  int
185e0 20 63 54 65 72 6d 3b 20 20 20 20 20 20 20 20 20   cTerm;         
185f0 20 2f 2a 20 43 68 61 72 61 63 74 65 72 20 74 68   /* Character th
18600 61 74 20 74 65 72 6d 69 6e 61 74 65 64 20 74 68  at terminated th
18610 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 66 69  e most recent fi
18620 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 63 43 6f  eld */.  int cCo
18630 6c 53 65 70 3b 20 20 20 20 20 20 20 20 2f 2a 20  lSep;        /* 
18640 54 68 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72  The column separ
18650 61 74 6f 72 20 63 68 61 72 61 63 74 65 72 2e 20  ator character. 
18660 20 28 55 73 75 61 6c 6c 79 20 22 2c 22 29 20 2a   (Usually ",") *
18670 2f 0a 20 20 69 6e 74 20 63 52 6f 77 53 65 70 3b  /.  int cRowSep;
18680 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72          /* The r
18690 6f 77 20 73 65 70 61 72 61 74 6f 72 20 63 68 61  ow separator cha
186a0 72 61 63 74 65 72 2e 20 20 28 55 73 75 61 6c 6c  racter.  (Usuall
186b0 79 20 22 5c 6e 22 29 20 2a 2f 0a 7d 3b 0a 0a 2f  y "\n") */.};../
186c0 2a 20 41 70 70 65 6e 64 20 61 20 73 69 6e 67 6c  * Append a singl
186d0 65 20 62 79 74 65 20 74 6f 20 7a 5b 5d 20 2a 2f  e byte to z[] */
186e0 0a 73 74 61 74 69 63 20 76 6f 69 64 20 69 6d 70  .static void imp
186f0 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28  ort_append_char(
18700 49 6d 70 6f 72 74 43 74 78 20 2a 70 2c 20 69 6e  ImportCtx *p, in
18710 74 20 63 29 7b 0a 20 20 69 66 28 20 70 2d 3e 6e  t c){.  if( p->n
18720 2b 31 3e 3d 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b  +1>=p->nAlloc ){
18730 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2b  .    p->nAlloc +
18740 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2b 20 31 30  = p->nAlloc + 10
18750 30 3b 0a 20 20 20 20 70 2d 3e 7a 20 3d 20 73 71  0;.    p->z = sq
18760 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28  lite3_realloc64(
18770 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29  p->z, p->nAlloc)
18780 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 7a 3d 3d  ;.    if( p->z==
18790 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
187a0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f  rintf(stderr, "o
187b0 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut of memory\n")
187c0 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31 29 3b  ;.      exit(1);
187d0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 2d 3e  .    }.  }.  p->
187e0 7a 5b 70 2d 3e 6e 2b 2b 5d 20 3d 20 28 63 68 61  z[p->n++] = (cha
187f0 72 29 63 3b 0a 7d 0a 0a 2f 2a 20 52 65 61 64 20  r)c;.}../* Read 
18800 61 20 73 69 6e 67 6c 65 20 66 69 65 6c 64 20 6f  a single field o
18810 66 20 43 53 56 20 74 65 78 74 2e 20 20 43 6f 6d  f CSV text.  Com
18820 70 61 74 69 62 6c 65 20 77 69 74 68 20 72 66 63  patible with rfc
18830 34 31 38 30 20 61 6e 64 20 65 78 74 65 6e 64 65  4180 and extende
18840 64 0a 2a 2a 20 77 69 74 68 20 74 68 65 20 6f 70  d.** with the op
18850 74 69 6f 6e 20 6f 66 20 68 61 76 69 6e 67 20 61  tion of having a
18860 20 73 65 70 61 72 61 74 6f 72 20 6f 74 68 65 72   separator other
18870 20 74 68 61 6e 20 22 2c 22 2e 0a 2a 2a 0a 2a 2a   than ","..**.**
18880 20 20 20 2b 20 20 49 6e 70 75 74 20 63 6f 6d 65     +  Input come
18890 73 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a 2a  s from p->in..**
188a0 20 20 20 2b 20 20 53 74 6f 72 65 20 72 65 73 75     +  Store resu
188b0 6c 74 73 20 69 6e 20 70 2d 3e 7a 20 6f 66 20 6c  lts in p->z of l
188c0 65 6e 67 74 68 20 70 2d 3e 6e 2e 20 20 53 70 61  ength p->n.  Spa
188d0 63 65 20 74 6f 20 68 6f 6c 64 20 70 2d 3e 7a 20  ce to hold p->z 
188e0 63 6f 6d 65 73 0a 2a 2a 20 20 20 20 20 20 66 72  comes.**      fr
188f0 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
18900 63 36 34 28 29 2e 0a 2a 2a 20 20 20 2b 20 20 55  c64()..**   +  U
18910 73 65 20 70 2d 3e 63 53 65 70 20 61 73 20 74 68  se p->cSep as th
18920 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74  e column separat
18930 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74  or.  The default
18940 20 69 73 20 22 2c 22 2e 0a 2a 2a 20 20 20 2b 20   is ","..**   + 
18950 20 55 73 65 20 70 2d 3e 72 53 65 70 20 61 73 20   Use p->rSep as 
18960 74 68 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f  the row separato
18970 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  r.  The default 
18980 69 73 20 22 5c 6e 22 2e 0a 2a 2a 20 20 20 2b 20  is "\n"..**   + 
18990 20 4b 65 65 70 20 74 72 61 63 6b 20 6f 66 20 74   Keep track of t
189a0 68 65 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 69  he line number i
189b0 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a 2a 20 20  n p->nLine..**  
189c0 20 2b 20 20 53 74 6f 72 65 20 74 68 65 20 63 68   +  Store the ch
189d0 61 72 61 63 74 65 72 20 74 68 61 74 20 74 65 72  aracter that ter
189e0 6d 69 6e 61 74 65 73 20 74 68 65 20 66 69 65 6c  minates the fiel
189f0 64 20 69 6e 20 70 2d 3e 63 54 65 72 6d 2e 20 20  d in p->cTerm.  
18a00 53 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 45 4f  Store.**      EO
18a10 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d 66 69 6c 65  F on end-of-file
18a20 2e 0a 2a 2a 20 20 20 2b 20 20 52 65 70 6f 72 74  ..**   +  Report
18a30 20 73 79 6e 74 61 78 20 65 72 72 6f 72 73 20 6f   syntax errors o
18a40 6e 20 73 74 64 65 72 72 0a 2a 2f 0a 73 74 61 74  n stderr.*/.stat
18a50 69 63 20 63 68 61 72 20 2a 53 51 4c 49 54 45 5f  ic char *SQLITE_
18a60 43 44 45 43 4c 20 63 73 76 5f 72 65 61 64 5f 6f  CDECL csv_read_o
18a70 6e 65 5f 66 69 65 6c 64 28 49 6d 70 6f 72 74 43  ne_field(ImportC
18a80 74 78 20 2a 70 29 7b 0a 20 20 69 6e 74 20 63 3b  tx *p){.  int c;
18a90 0a 20 20 69 6e 74 20 63 53 65 70 20 3d 20 70 2d  .  int cSep = p-
18aa0 3e 63 43 6f 6c 53 65 70 3b 0a 20 20 69 6e 74 20  >cColSep;.  int 
18ab0 72 53 65 70 20 3d 20 70 2d 3e 63 52 6f 77 53 65  rSep = p->cRowSe
18ac0 70 3b 0a 20 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20  p;.  p->n = 0;. 
18ad0 20 63 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e   c = fgetc(p->in
18ae0 29 3b 0a 20 20 69 66 28 20 63 3d 3d 45 4f 46 20  );.  if( c==EOF 
18af0 7c 7c 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74  || seenInterrupt
18b00 20 29 7b 0a 20 20 20 20 70 2d 3e 63 54 65 72 6d   ){.    p->cTerm
18b10 20 3d 20 45 4f 46 3b 0a 20 20 20 20 72 65 74 75   = EOF;.    retu
18b20 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rn 0;.  }.  if( 
18b30 63 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20 69 6e  c=='"' ){.    in
18b40 74 20 70 63 2c 20 70 70 63 3b 0a 20 20 20 20 69  t pc, ppc;.    i
18b50 6e 74 20 73 74 61 72 74 4c 69 6e 65 20 3d 20 70  nt startLine = p
18b60 2d 3e 6e 4c 69 6e 65 3b 0a 20 20 20 20 69 6e 74  ->nLine;.    int
18b70 20 63 51 75 6f 74 65 20 3d 20 63 3b 0a 20 20 20   cQuote = c;.   
18b80 20 70 63 20 3d 20 70 70 63 20 3d 20 30 3b 0a 20   pc = ppc = 0;. 
18b90 20 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20     while( 1 ){. 
18ba0 20 20 20 20 20 63 20 3d 20 66 67 65 74 63 28 70       c = fgetc(p
18bb0 2d 3e 69 6e 29 3b 0a 20 20 20 20 20 20 69 66 28  ->in);.      if(
18bc0 20 63 3d 3d 72 53 65 70 20 29 20 70 2d 3e 6e 4c   c==rSep ) p->nL
18bd0 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28  ine++;.      if(
18be0 20 63 3d 3d 63 51 75 6f 74 65 20 29 7b 0a 20 20   c==cQuote ){.  
18bf0 20 20 20 20 20 20 69 66 28 20 70 63 3d 3d 63 51        if( pc==cQ
18c00 75 6f 74 65 20 29 7b 0a 20 20 20 20 20 20 20 20  uote ){.        
18c10 20 20 70 63 20 3d 20 30 3b 0a 20 20 20 20 20 20    pc = 0;.      
18c20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
18c30 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
18c40 20 20 20 20 20 20 69 66 28 20 28 63 3d 3d 63 53        if( (c==cS
18c50 65 70 20 26 26 20 70 63 3d 3d 63 51 75 6f 74 65  ep && pc==cQuote
18c60 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 63 3d 3d  ).       || (c==
18c70 72 53 65 70 20 26 26 20 70 63 3d 3d 63 51 75 6f  rSep && pc==cQuo
18c80 74 65 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 63  te).       || (c
18c90 3d 3d 72 53 65 70 20 26 26 20 70 63 3d 3d 27 5c  ==rSep && pc=='\
18ca0 72 27 20 26 26 20 70 70 63 3d 3d 63 51 75 6f 74  r' && ppc==cQuot
18cb0 65 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 63 3d  e).       || (c=
18cc0 3d 45 4f 46 20 26 26 20 70 63 3d 3d 63 51 75 6f  =EOF && pc==cQuo
18cd0 74 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  te).      ){.   
18ce0 20 20 20 20 20 64 6f 7b 20 70 2d 3e 6e 2d 2d 3b       do{ p->n--;
18cf0 20 7d 77 68 69 6c 65 28 20 70 2d 3e 7a 5b 70 2d   }while( p->z[p-
18d00 3e 6e 5d 21 3d 63 51 75 6f 74 65 20 29 3b 0a 20  >n]!=cQuote );. 
18d10 20 20 20 20 20 20 20 70 2d 3e 63 54 65 72 6d 20         p->cTerm 
18d20 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = c;.        bre
18d30 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
18d40 20 20 69 66 28 20 70 63 3d 3d 63 51 75 6f 74 65    if( pc==cQuote
18d50 20 26 26 20 63 21 3d 27 5c 72 27 20 29 7b 0a 20   && c!='\r' ){. 
18d60 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
18d70 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 25  tf(stderr, "%s:%
18d80 64 3a 20 75 6e 65 73 63 61 70 65 64 20 25 63 20  d: unescaped %c 
18d90 63 68 61 72 61 63 74 65 72 5c 6e 22 2c 0a 20 20  character\n",.  
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 2d                p-
18db0 3e 7a 46 69 6c 65 2c 20 70 2d 3e 6e 4c 69 6e 65  >zFile, p->nLine
18dc0 2c 20 63 51 75 6f 74 65 29 3b 0a 20 20 20 20 20  , cQuote);.     
18dd0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d   }.      if( c==
18de0 45 4f 46 20 29 7b 0a 20 20 20 20 20 20 20 20 75  EOF ){.        u
18df0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
18e00 72 2c 20 22 25 73 3a 25 64 3a 20 75 6e 74 65 72  r, "%s:%d: unter
18e10 6d 69 6e 61 74 65 64 20 25 63 2d 71 75 6f 74 65  minated %c-quote
18e20 64 20 66 69 65 6c 64 5c 6e 22 2c 0a 20 20 20 20  d field\n",.    
18e30 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a              p->z
18e40 46 69 6c 65 2c 20 73 74 61 72 74 4c 69 6e 65 2c  File, startLine,
18e50 20 63 51 75 6f 74 65 29 3b 0a 20 20 20 20 20 20   cQuote);.      
18e60 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20 63 3b 0a    p->cTerm = c;.
18e70 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
18e80 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 6d 70       }.      imp
18e90 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28  ort_append_char(
18ea0 70 2c 20 63 29 3b 0a 20 20 20 20 20 20 70 70 63  p, c);.      ppc
18eb0 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 63 20   = pc;.      pc 
18ec0 3d 20 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = c;.    }.  }el
18ed0 73 65 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  se{.    /* If th
18ee0 69 73 20 69 73 20 74 68 65 20 66 69 72 73 74 20  is is the first 
18ef0 66 69 65 6c 64 20 62 65 69 6e 67 20 70 61 72 73  field being pars
18f00 65 64 20 61 6e 64 20 69 74 20 62 65 67 69 6e 73  ed and it begins
18f10 20 77 69 74 68 20 74 68 65 0a 20 20 20 20 2a 2a   with the.    **
18f20 20 55 54 46 2d 38 20 42 4f 4d 20 20 28 30 78 45   UTF-8 BOM  (0xE
18f30 46 20 42 42 20 42 46 29 20 74 68 65 6e 20 73 6b  F BB BF) then sk
18f40 69 70 20 74 68 65 20 42 4f 4d 20 2a 2f 0a 20 20  ip the BOM */.  
18f50 20 20 69 66 28 20 28 63 26 30 78 66 66 29 3d 3d    if( (c&0xff)==
18f60 30 78 65 66 20 26 26 20 70 2d 3e 62 4e 6f 74 46  0xef && p->bNotF
18f70 69 72 73 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  irst==0 ){.     
18f80 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63   import_append_c
18f90 68 61 72 28 70 2c 20 63 29 3b 0a 20 20 20 20 20  har(p, c);.     
18fa0 20 63 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e   c = fgetc(p->in
18fb0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 63 26  );.      if( (c&
18fc0 30 78 66 66 29 3d 3d 30 78 62 62 20 29 7b 0a 20  0xff)==0xbb ){. 
18fd0 20 20 20 20 20 20 20 69 6d 70 6f 72 74 5f 61 70         import_ap
18fe0 70 65 6e 64 5f 63 68 61 72 28 70 2c 20 63 29 3b  pend_char(p, c);
18ff0 0a 20 20 20 20 20 20 20 20 63 20 3d 20 66 67 65  .        c = fge
19000 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20 20  tc(p->in);.     
19010 20 20 20 69 66 28 20 28 63 26 30 78 66 66 29 3d     if( (c&0xff)=
19020 3d 30 78 62 66 20 29 7b 0a 20 20 20 20 20 20 20  =0xbf ){.       
19030 20 20 20 70 2d 3e 62 4e 6f 74 46 69 72 73 74 20     p->bNotFirst 
19040 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 70  = 1;.          p
19050 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ->n = 0;.       
19060 20 20 20 72 65 74 75 72 6e 20 63 73 76 5f 72 65     return csv_re
19070 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 70 29 3b  ad_one_field(p);
19080 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
19090 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69   }.    }.    whi
190a0 6c 65 28 20 63 21 3d 45 4f 46 20 26 26 20 63 21  le( c!=EOF && c!
190b0 3d 63 53 65 70 20 26 26 20 63 21 3d 72 53 65 70  =cSep && c!=rSep
190c0 20 29 7b 0a 20 20 20 20 20 20 69 6d 70 6f 72 74   ){.      import
190d0 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70 2c 20  _append_char(p, 
190e0 63 29 3b 0a 20 20 20 20 20 20 63 20 3d 20 66 67  c);.      c = fg
190f0 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20  etc(p->in);.    
19100 7d 0a 20 20 20 20 69 66 28 20 63 3d 3d 72 53 65  }.    if( c==rSe
19110 70 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 4c  p ){.      p->nL
19120 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28  ine++;.      if(
19130 20 70 2d 3e 6e 3e 30 20 26 26 20 70 2d 3e 7a 5b   p->n>0 && p->z[
19140 70 2d 3e 6e 2d 31 5d 3d 3d 27 5c 72 27 20 29 20  p->n-1]=='\r' ) 
19150 70 2d 3e 6e 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20  p->n--;.    }.  
19160 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20 63 3b 0a    p->cTerm = c;.
19170 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 7a 20 29    }.  if( p->z )
19180 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d 20 30 3b   p->z[p->n] = 0;
19190 0a 20 20 70 2d 3e 62 4e 6f 74 46 69 72 73 74 20  .  p->bNotFirst 
191a0 3d 20 31 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d  = 1;.  return p-
191b0 3e 7a 3b 0a 7d 0a 0a 2f 2a 20 52 65 61 64 20 61  >z;.}../* Read a
191c0 20 73 69 6e 67 6c 65 20 66 69 65 6c 64 20 6f 66   single field of
191d0 20 41 53 43 49 49 20 64 65 6c 69 6d 69 74 65 64   ASCII delimited
191e0 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 2b   text..**.**   +
191f0 20 20 49 6e 70 75 74 20 63 6f 6d 65 73 20 66 72    Input comes fr
19200 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a 2a 20 20 20 2b  om p->in..**   +
19210 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
19220 69 6e 20 70 2d 3e 7a 20 6f 66 20 6c 65 6e 67 74  in p->z of lengt
19230 68 20 70 2d 3e 6e 2e 20 20 53 70 61 63 65 20 74  h p->n.  Space t
19240 6f 20 68 6f 6c 64 20 70 2d 3e 7a 20 63 6f 6d 65  o hold p->z come
19250 73 0a 2a 2a 20 20 20 20 20 20 66 72 6f 6d 20 73  s.**      from s
19260 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28  qlite3_malloc64(
19270 29 2e 0a 2a 2a 20 20 20 2b 20 20 55 73 65 20 70  )..**   +  Use p
19280 2d 3e 63 53 65 70 20 61 73 20 74 68 65 20 63 6f  ->cSep as the co
19290 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 2e 20  lumn separator. 
192a0 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 73 20   The default is 
192b0 22 5c 78 31 46 22 2e 0a 2a 2a 20 20 20 2b 20 20  "\x1F"..**   +  
192c0 55 73 65 20 70 2d 3e 72 53 65 70 20 61 73 20 74  Use p->rSep as t
192d0 68 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72  he row separator
192e0 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  .  The default i
192f0 73 20 22 5c 78 31 45 22 2e 0a 2a 2a 20 20 20 2b  s "\x1E"..**   +
19300 20 20 4b 65 65 70 20 74 72 61 63 6b 20 6f 66 20    Keep track of 
19310 74 68 65 20 72 6f 77 20 6e 75 6d 62 65 72 20 69  the row number i
19320 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a 2a 20 20  n p->nLine..**  
19330 20 2b 20 20 53 74 6f 72 65 20 74 68 65 20 63 68   +  Store the ch
19340 61 72 61 63 74 65 72 20 74 68 61 74 20 74 65 72  aracter that ter
19350 6d 69 6e 61 74 65 73 20 74 68 65 20 66 69 65 6c  minates the fiel
19360 64 20 69 6e 20 70 2d 3e 63 54 65 72 6d 2e 20 20  d in p->cTerm.  
19370 53 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 45 4f  Store.**      EO
19380 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d 66 69 6c 65  F on end-of-file
19390 2e 0a 2a 2a 20 20 20 2b 20 20 52 65 70 6f 72 74  ..**   +  Report
193a0 20 73 79 6e 74 61 78 20 65 72 72 6f 72 73 20 6f   syntax errors o
193b0 6e 20 73 74 64 65 72 72 0a 2a 2f 0a 73 74 61 74  n stderr.*/.stat
193c0 69 63 20 63 68 61 72 20 2a 53 51 4c 49 54 45 5f  ic char *SQLITE_
193d0 43 44 45 43 4c 20 61 73 63 69 69 5f 72 65 61 64  CDECL ascii_read
193e0 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d 70 6f 72  _one_field(Impor
193f0 74 43 74 78 20 2a 70 29 7b 0a 20 20 69 6e 74 20  tCtx *p){.  int 
19400 63 3b 0a 20 20 69 6e 74 20 63 53 65 70 20 3d 20  c;.  int cSep = 
19410 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20 20 69 6e  p->cColSep;.  in
19420 74 20 72 53 65 70 20 3d 20 70 2d 3e 63 52 6f 77  t rSep = p->cRow
19430 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d 20 30 3b  Sep;.  p->n = 0;
19440 0a 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d 3e  .  c = fgetc(p->
19450 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d 3d 45 4f  in);.  if( c==EO
19460 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65 72 72 75  F || seenInterru
19470 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e 63 54 65  pt ){.    p->cTe
19480 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20 20 72 65  rm = EOF;.    re
19490 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 77 68  turn 0;.  }.  wh
194a0 69 6c 65 28 20 63 21 3d 45 4f 46 20 26 26 20 63  ile( c!=EOF && c
194b0 21 3d 63 53 65 70 20 26 26 20 63 21 3d 72 53 65  !=cSep && c!=rSe
194c0 70 20 29 7b 0a 20 20 20 20 69 6d 70 6f 72 74 5f  p ){.    import_
194d0 61 70 70 65 6e 64 5f 63 68 61 72 28 70 2c 20 63  append_char(p, c
194e0 29 3b 0a 20 20 20 20 63 20 3d 20 66 67 65 74 63  );.    c = fgetc
194f0 28 70 2d 3e 69 6e 29 3b 0a 20 20 7d 0a 20 20 69  (p->in);.  }.  i
19500 66 28 20 63 3d 3d 72 53 65 70 20 29 7b 0a 20 20  f( c==rSep ){.  
19510 20 20 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20    p->nLine++;.  
19520 7d 0a 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20 63  }.  p->cTerm = c
19530 3b 0a 20 20 69 66 28 20 70 2d 3e 7a 20 29 20 70  ;.  if( p->z ) p
19540 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d 20 30 3b 0a 20  ->z[p->n] = 0;. 
19550 20 72 65 74 75 72 6e 20 70 2d 3e 7a 3b 0a 7d 0a   return p->z;.}.
19560 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 74 72  ./*.** Try to tr
19570 61 6e 73 66 65 72 20 64 61 74 61 20 66 6f 72 20  ansfer data for 
19580 74 61 62 6c 65 20 7a 54 61 62 6c 65 2e 20 20 49  table zTable.  I
19590 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 73 65  f an error is se
195a0 65 6e 20 77 68 69 6c 65 0a 2a 2a 20 6d 6f 76 69  en while.** movi
195b0 6e 67 20 66 6f 72 77 61 72 64 2c 20 74 72 79 20  ng forward, try 
195c0 74 6f 20 67 6f 20 62 61 63 6b 77 61 72 64 73 2e  to go backwards.
195d0 20 20 54 68 65 20 62 61 63 6b 77 61 72 64 73 20    The backwards 
195e0 6d 6f 76 65 6d 65 6e 74 20 77 6f 6e 27 74 0a 2a  movement won't.*
195f0 2a 20 77 6f 72 6b 20 66 6f 72 20 57 49 54 48 4f  * work for WITHO
19600 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 2e  UT ROWID tables.
19610 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
19620 74 72 79 54 6f 43 6c 6f 6e 65 44 61 74 61 28 0a  tryToCloneData(.
19630 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c    ShellState *p,
19640 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44  .  sqlite3 *newD
19650 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b,.  const char 
19660 2a 7a 54 61 62 6c 65 0a 29 7b 0a 20 20 73 71 6c  *zTable.){.  sql
19670 69 74 65 33 5f 73 74 6d 74 20 2a 70 51 75 65 72  ite3_stmt *pQuer
19680 79 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  y = 0;.  sqlite3
19690 5f 73 74 6d 74 20 2a 70 49 6e 73 65 72 74 20 3d  _stmt *pInsert =
196a0 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 51 75 65   0;.  char *zQue
196b0 72 79 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a  ry = 0;.  char *
196c0 7a 49 6e 73 65 72 74 20 3d 20 30 3b 0a 20 20 69  zInsert = 0;.  i
196d0 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 69 2c 20  nt rc;.  int i, 
196e0 6a 2c 20 6e 3b 0a 20 20 69 6e 74 20 6e 54 61 62  j, n;.  int nTab
196f0 6c 65 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e  le = (int)strlen
19700 28 7a 54 61 62 6c 65 29 3b 0a 20 20 69 6e 74 20  (zTable);.  int 
19710 6b 20 3d 20 30 3b 0a 20 20 69 6e 74 20 63 6e 74  k = 0;.  int cnt
19720 20 3d 20 30 3b 0a 20 20 63 6f 6e 73 74 20 69 6e   = 0;.  const in
19730 74 20 73 70 69 6e 52 61 74 65 20 3d 20 31 30 30  t spinRate = 100
19740 30 30 3b 0a 0a 20 20 7a 51 75 65 72 79 20 3d 20  00;..  zQuery = 
19750 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
19760 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c  "SELECT * FROM \
19770 22 25 77 5c 22 22 2c 20 7a 54 61 62 6c 65 29 3b  "%w\"", zTable);
19780 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
19790 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
197a0 2c 20 7a 51 75 65 72 79 2c 20 2d 31 2c 20 26 70  , zQuery, -1, &p
197b0 51 75 65 72 79 2c 20 30 29 3b 0a 20 20 69 66 28  Query, 0);.  if(
197c0 20 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f   rc ){.    utf8_
197d0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
197e0 45 72 72 6f 72 20 25 64 3a 20 25 73 20 6f 6e 20  Error %d: %s on 
197f0 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20  [%s]\n",.       
19800 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74       sqlite3_ext
19810 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 70 2d  ended_errcode(p-
19820 3e 64 62 29 2c 20 73 71 6c 69 74 65 33 5f 65 72  >db), sqlite3_er
19830 72 6d 73 67 28 70 2d 3e 64 62 29 2c 0a 20 20 20  rmsg(p->db),.   
19840 20 20 20 20 20 20 20 20 20 7a 51 75 65 72 79 29           zQuery)
19850 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 64  ;.    goto end_d
19860 61 74 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20  ata_xfer;.  }.  
19870 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  n = sqlite3_colu
19880 6d 6e 5f 63 6f 75 6e 74 28 70 51 75 65 72 79 29  mn_count(pQuery)
19890 3b 0a 20 20 7a 49 6e 73 65 72 74 20 3d 20 73 71  ;.  zInsert = sq
198a0 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 32  lite3_malloc64(2
198b0 30 30 20 2b 20 6e 54 61 62 6c 65 20 2b 20 6e 2a  00 + nTable + n*
198c0 33 29 3b 0a 20 20 69 66 28 20 7a 49 6e 73 65 72  3);.  if( zInser
198d0 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 61 77 5f  t==0 ){.    raw_
198e0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
198f0 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22  out of memory\n"
19900 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f  );.    goto end_
19910 64 61 74 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20  data_xfer;.  }. 
19920 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
19930 66 28 32 30 30 2b 6e 54 61 62 6c 65 2c 7a 49 6e  f(200+nTable,zIn
19940 73 65 72 74 2c 0a 20 20 20 20 20 20 20 20 20 20  sert,.          
19950 20 20 20 20 20 20 20 20 20 22 49 4e 53 45 52 54           "INSERT
19960 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20   OR IGNORE INTO 
19970 5c 22 25 73 5c 22 20 56 41 4c 55 45 53 28 3f 22  \"%s\" VALUES(?"
19980 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 69 20 3d  , zTable);.  i =
19990 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 49 6e   (int)strlen(zIn
199a0 73 65 72 74 29 3b 0a 20 20 66 6f 72 28 6a 3d 31  sert);.  for(j=1
199b0 3b 20 6a 3c 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20  ; j<n; j++){.   
199c0 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65 72 74 2b   memcpy(zInsert+
199d0 69 2c 20 22 2c 3f 22 2c 20 32 29 3b 0a 20 20 20  i, ",?", 2);.   
199e0 20 69 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 6d   i += 2;.  }.  m
199f0 65 6d 63 70 79 28 7a 49 6e 73 65 72 74 2b 69 2c  emcpy(zInsert+i,
19a00 20 22 29 3b 22 2c 20 33 29 3b 0a 20 20 72 63 20   ");", 3);.  rc 
19a10 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
19a20 65 5f 76 32 28 6e 65 77 44 62 2c 20 7a 49 6e 73  e_v2(newDb, zIns
19a30 65 72 74 2c 20 2d 31 2c 20 26 70 49 6e 73 65 72  ert, -1, &pInser
19a40 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 20  t, 0);.  if( rc 
19a50 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  ){.    utf8_prin
19a60 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
19a70 72 20 25 64 3a 20 25 73 20 6f 6e 20 5b 25 73 5d  r %d: %s on [%s]
19a80 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
19a90 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
19aa0 64 5f 65 72 72 63 6f 64 65 28 6e 65 77 44 62 29  d_errcode(newDb)
19ab0 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
19ac0 28 6e 65 77 44 62 29 2c 0a 20 20 20 20 20 20 20  (newDb),.       
19ad0 20 20 20 20 20 7a 51 75 65 72 79 29 3b 0a 20 20       zQuery);.  
19ae0 20 20 67 6f 74 6f 20 65 6e 64 5f 64 61 74 61 5f    goto end_data_
19af0 78 66 65 72 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  xfer;.  }.  for(
19b00 6b 3d 30 3b 20 6b 3c 32 3b 20 6b 2b 2b 29 7b 0a  k=0; k<2; k++){.
19b10 20 20 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d      while( (rc =
19b20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 51   sqlite3_step(pQ
19b30 75 65 72 79 29 29 3d 3d 53 51 4c 49 54 45 5f 52  uery))==SQLITE_R
19b40 4f 57 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28  OW ){.      for(
19b50 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
19b60 20 20 20 20 20 20 20 20 73 77 69 74 63 68 28 20          switch( 
19b70 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
19b80 79 70 65 28 70 51 75 65 72 79 2c 20 69 29 20 29  ype(pQuery, i) )
19b90 7b 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65  {.          case
19ba0 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a 20 7b 0a   SQLITE_NULL: {.
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
19bc0 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 49  te3_bind_null(pI
19bd0 6e 73 65 72 74 2c 20 69 2b 31 29 3b 0a 20 20 20  nsert, i+1);.   
19be0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
19bf0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
19c00 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
19c10 45 5f 49 4e 54 45 47 45 52 3a 20 7b 0a 20 20 20  E_INTEGER: {.   
19c20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
19c30 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70 49 6e 73  _bind_int64(pIns
19c40 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65  ert, i+1, sqlite
19c50 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 70  3_column_int64(p
19c60 51 75 65 72 79 2c 69 29 29 3b 0a 20 20 20 20 20  Query,i));.     
19c70 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
19c80 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
19c90 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
19ca0 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20 20 20 20  FLOAT: {.       
19cb0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
19cc0 64 5f 64 6f 75 62 6c 65 28 70 49 6e 73 65 72 74  d_double(pInsert
19cd0 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65 33 5f 63  , i+1, sqlite3_c
19ce0 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 51 75  olumn_double(pQu
19cf0 65 72 79 2c 69 29 29 3b 0a 20 20 20 20 20 20 20  ery,i));.       
19d00 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
19d10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
19d20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
19d30 58 54 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20  XT: {.          
19d40 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
19d50 65 78 74 28 70 49 6e 73 65 72 74 2c 20 69 2b 31  ext(pInsert, i+1
19d60 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
19d80 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
19d90 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
19da0 70 51 75 65 72 79 2c 69 29 2c 0a 20 20 20 20 20  pQuery,i),.     
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dc0 20 20 20 20 20 20 20 20 2d 31 2c 20 53 51 4c 49          -1, SQLI
19dd0 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
19de0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
19df0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
19e00 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
19e10 5f 42 4c 4f 42 3a 20 7b 0a 20 20 20 20 20 20 20  _BLOB: {.       
19e20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
19e30 64 5f 62 6c 6f 62 28 70 49 6e 73 65 72 74 2c 20  d_blob(pInsert, 
19e40 69 2b 31 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  i+1, sqlite3_col
19e50 75 6d 6e 5f 62 6c 6f 62 28 70 51 75 65 72 79 2c  umn_blob(pQuery,
19e60 69 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  i),.            
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e90 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
19ea0 79 74 65 73 28 70 51 75 65 72 79 2c 69 29 2c 0a  ytes(pQuery,i),.
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
19ee0 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
19ef0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
19f00 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
19f10 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 2f 2a 20     }.      } /* 
19f20 45 6e 64 20 66 6f 72 20 2a 2f 0a 20 20 20 20 20  End for */.     
19f30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74   rc = sqlite3_st
19f40 65 70 28 70 49 6e 73 65 72 74 29 3b 0a 20 20 20  ep(pInsert);.   
19f50 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
19f60 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49  E_OK && rc!=SQLI
19f70 54 45 5f 52 4f 57 20 26 26 20 72 63 21 3d 53 51  TE_ROW && rc!=SQ
19f80 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
19f90 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
19fa0 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20  (stderr, "Error 
19fb0 25 64 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74  %d: %s\n", sqlit
19fc0 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
19fd0 6f 64 65 28 6e 65 77 44 62 29 2c 0a 20 20 20 20  ode(newDb),.    
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ff0 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d      sqlite3_errm
1a000 73 67 28 6e 65 77 44 62 29 29 3b 0a 20 20 20 20  sg(newDb));.    
1a010 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
1a020 33 5f 72 65 73 65 74 28 70 49 6e 73 65 72 74 29  3_reset(pInsert)
1a030 3b 0a 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20  ;.      cnt++;. 
1a040 20 20 20 20 20 69 66 28 20 28 63 6e 74 25 73 70       if( (cnt%sp
1a050 69 6e 52 61 74 65 29 3d 3d 30 20 29 7b 0a 20 20  inRate)==0 ){.  
1a060 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 63        printf("%c
1a070 5c 62 22 2c 20 22 7c 2f 2d 5c 5c 22 5b 28 63 6e  \b", "|/-\\"[(cn
1a080 74 2f 73 70 69 6e 52 61 74 65 29 25 34 5d 29 3b  t/spinRate)%4]);
1a090 0a 20 20 20 20 20 20 20 20 66 66 6c 75 73 68 28  .        fflush(
1a0a0 73 74 64 6f 75 74 29 3b 0a 20 20 20 20 20 20 7d  stdout);.      }
1a0b0 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20 77 68  .    } /* End wh
1a0c0 69 6c 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72  ile */.    if( r
1a0d0 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
1a0e0 20 62 72 65 61 6b 3b 0a 20 20 20 20 73 71 6c 69   break;.    sqli
1a0f0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 51 75  te3_finalize(pQu
1a100 65 72 79 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ery);.    sqlite
1a110 33 5f 66 72 65 65 28 7a 51 75 65 72 79 29 3b 0a  3_free(zQuery);.
1a120 20 20 20 20 7a 51 75 65 72 79 20 3d 20 73 71 6c      zQuery = sql
1a130 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45  ite3_mprintf("SE
1a140 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c 22 25 77  LECT * FROM \"%w
1a150 5c 22 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  \" ORDER BY rowi
1a160 64 20 44 45 53 43 3b 22 2c 0a 20 20 20 20 20 20  d DESC;",.      
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a180 20 20 20 20 20 20 20 7a 54 61 62 6c 65 29 3b 0a         zTable);.
1a190 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1a1a0 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
1a1b0 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31 2c 20 26  b, zQuery, -1, &
1a1c0 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20 20 20  pQuery, 0);.    
1a1d0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
1a1e0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
1a1f0 72 72 2c 20 22 57 61 72 6e 69 6e 67 3a 20 63 61  rr, "Warning: ca
1a200 6e 6e 6f 74 20 73 74 65 70 20 5c 22 25 73 5c 22  nnot step \"%s\"
1a210 20 62 61 63 6b 77 61 72 64 73 22 2c 20 7a 54 61   backwards", zTa
1a220 62 6c 65 29 3b 0a 20 20 20 20 20 20 62 72 65 61  ble);.      brea
1a230 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 2f 2a 20  k;.    }.  } /* 
1a240 45 6e 64 20 66 6f 72 28 6b 3d 30 2e 2e 2e 29 20  End for(k=0...) 
1a250 2a 2f 0a 0a 65 6e 64 5f 64 61 74 61 5f 78 66 65  */..end_data_xfe
1a260 72 3a 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  r:.  sqlite3_fin
1a270 61 6c 69 7a 65 28 70 51 75 65 72 79 29 3b 0a 20  alize(pQuery);. 
1a280 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
1a290 65 28 70 49 6e 73 65 72 74 29 3b 0a 20 20 73 71  e(pInsert);.  sq
1a2a0 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72  lite3_free(zQuer
1a2b0 79 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  y);.  sqlite3_fr
1a2c0 65 65 28 7a 49 6e 73 65 72 74 29 3b 0a 7d 0a 0a  ee(zInsert);.}..
1a2d0 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 74 72  ./*.** Try to tr
1a2e0 61 6e 73 66 65 72 20 61 6c 6c 20 72 6f 77 73 20  ansfer all rows 
1a2f0 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 68  of the schema th
1a300 61 74 20 6d 61 74 63 68 20 7a 57 68 65 72 65 2e  at match zWhere.
1a310 20 20 46 6f 72 0a 2a 2a 20 65 61 63 68 20 72 6f    For.** each ro
1a320 77 2c 20 69 6e 76 6f 6b 65 20 78 46 6f 72 45 61  w, invoke xForEa
1a330 63 68 28 29 20 6f 6e 20 74 68 65 20 6f 62 6a 65  ch() on the obje
1a340 63 74 20 64 65 66 69 6e 65 64 20 62 79 20 74 68  ct defined by th
1a350 61 74 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 61 6e  at row..** If an
1a360 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
1a370 74 65 72 65 64 20 77 68 69 6c 65 20 6d 6f 76 69  tered while movi
1a380 6e 67 20 66 6f 72 77 61 72 64 20 74 68 72 6f 75  ng forward throu
1a390 67 68 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  gh the.** sqlite
1a3a0 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2c 20 74  _master table, t
1a3b0 72 79 20 61 67 61 69 6e 20 6d 6f 76 69 6e 67 20  ry again moving 
1a3c0 62 61 63 6b 77 61 72 64 73 2e 0a 2a 2f 0a 73 74  backwards..*/.st
1a3d0 61 74 69 63 20 76 6f 69 64 20 74 72 79 54 6f 43  atic void tryToC
1a3e0 6c 6f 6e 65 53 63 68 65 6d 61 28 0a 20 20 53 68  loneSchema(.  Sh
1a3f0 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a 20 20 73  ellState *p,.  s
1a400 71 6c 69 74 65 33 20 2a 6e 65 77 44 62 2c 0a 20  qlite3 *newDb,. 
1a410 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 57 68   const char *zWh
1a420 65 72 65 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  ere,.  void (*xF
1a430 6f 72 45 61 63 68 29 28 53 68 65 6c 6c 53 74 61  orEach)(ShellSta
1a440 74 65 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  te*,sqlite3*,con
1a450 73 74 20 63 68 61 72 2a 29 0a 29 7b 0a 20 20 73  st char*).){.  s
1a460 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 51 75  qlite3_stmt *pQu
1a470 65 72 79 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  ery = 0;.  char 
1a480 2a 7a 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 69  *zQuery = 0;.  i
1a490 6e 74 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20 75  nt rc;.  const u
1a4a0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 4e  nsigned char *zN
1a4b0 61 6d 65 3b 0a 20 20 63 6f 6e 73 74 20 75 6e 73  ame;.  const uns
1a4c0 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 53 71 6c  igned char *zSql
1a4d0 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  ;.  char *zErrMs
1a4e0 67 20 3d 20 30 3b 0a 0a 20 20 7a 51 75 65 72 79  g = 0;..  zQuery
1a4f0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
1a500 74 66 28 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c  tf("SELECT name,
1a510 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
1a520 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20 20  _master".       
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a540 20 20 20 20 22 20 57 48 45 52 45 20 25 73 22 2c      " WHERE %s",
1a550 20 7a 57 68 65 72 65 29 3b 0a 20 20 72 63 20 3d   zWhere);.  rc =
1a560 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
1a570 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 51 75 65 72  _v2(p->db, zQuer
1a580 79 2c 20 2d 31 2c 20 26 70 51 75 65 72 79 2c 20  y, -1, &pQuery, 
1a590 30 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  0);.  if( rc ){.
1a5a0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1a5b0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
1a5c0 28 25 64 29 20 25 73 20 6f 6e 20 5b 25 73 5d 5c  (%d) %s on [%s]\
1a5d0 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
1a5e0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1a5f0 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
1a600 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65 33  (p->db), sqlite3
1a610 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 2c 0a  _errmsg(p->db),.
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a630 20 20 20 20 7a 51 75 65 72 79 29 3b 0a 20 20 20      zQuery);.   
1a640 20 67 6f 74 6f 20 65 6e 64 5f 73 63 68 65 6d 61   goto end_schema
1a650 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20 77 68 69  _xfer;.  }.  whi
1a660 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  le( (rc = sqlite
1a670 33 5f 73 74 65 70 28 70 51 75 65 72 79 29 29 3d  3_step(pQuery))=
1a680 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20  =SQLITE_ROW ){. 
1a690 20 20 20 7a 4e 61 6d 65 20 3d 20 73 71 6c 69 74     zName = sqlit
1a6a0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
1a6b0 51 75 65 72 79 2c 20 30 29 3b 0a 20 20 20 20 7a  Query, 0);.    z
1a6c0 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  Sql = sqlite3_co
1a6d0 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75 65 72 79  lumn_text(pQuery
1a6e0 2c 20 31 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  , 1);.    printf
1a6f0 28 22 25 73 2e 2e 2e 20 22 2c 20 7a 4e 61 6d 65  ("%s... ", zName
1a700 29 3b 20 66 66 6c 75 73 68 28 73 74 64 6f 75 74  ); fflush(stdout
1a710 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  );.    sqlite3_e
1a720 78 65 63 28 6e 65 77 44 62 2c 20 28 63 6f 6e 73  xec(newDb, (cons
1a730 74 20 63 68 61 72 2a 29 7a 53 71 6c 2c 20 30 2c  t char*)zSql, 0,
1a740 20 30 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20   0, &zErrMsg);. 
1a750 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29     if( zErrMsg )
1a760 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
1a770 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
1a780 6f 72 3a 20 25 73 5c 6e 53 51 4c 3a 20 5b 25 73  or: %s\nSQL: [%s
1a790 5d 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 2c 20 7a  ]\n", zErrMsg, z
1a7a0 53 71 6c 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Sql);.      sqli
1a7b0 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
1a7c0 29 3b 0a 20 20 20 20 20 20 7a 45 72 72 4d 73 67  );.      zErrMsg
1a7d0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
1a7e0 69 66 28 20 78 46 6f 72 45 61 63 68 20 29 7b 0a  if( xForEach ){.
1a7f0 20 20 20 20 20 20 78 46 6f 72 45 61 63 68 28 70        xForEach(p
1a800 2c 20 6e 65 77 44 62 2c 20 28 63 6f 6e 73 74 20  , newDb, (const 
1a810 63 68 61 72 2a 29 7a 4e 61 6d 65 29 3b 0a 20 20  char*)zName);.  
1a820 20 20 7d 0a 20 20 20 20 70 72 69 6e 74 66 28 22    }.    printf("
1a830 64 6f 6e 65 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20  done\n");.  }.  
1a840 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44  if( rc!=SQLITE_D
1a850 4f 4e 45 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ONE ){.    sqlit
1a860 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 51 75 65  e3_finalize(pQue
1a870 72 79 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ry);.    sqlite3
1a880 5f 66 72 65 65 28 7a 51 75 65 72 79 29 3b 0a 20  _free(zQuery);. 
1a890 20 20 20 7a 51 75 65 72 79 20 3d 20 73 71 6c 69     zQuery = sqli
1a8a0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c  te3_mprintf("SEL
1a8b0 45 43 54 20 6e 61 6d 65 2c 20 73 71 6c 20 46 52  ECT name, sql FR
1a8c0 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1a8d0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a8f0 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20   WHERE %s ORDER 
1a900 42 59 20 72 6f 77 69 64 20 44 45 53 43 22 2c 20  BY rowid DESC", 
1a910 7a 57 68 65 72 65 29 3b 0a 20 20 20 20 72 63 20  zWhere);.    rc 
1a920 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
1a930 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 51 75 65  e_v2(p->db, zQue
1a940 72 79 2c 20 2d 31 2c 20 26 70 51 75 65 72 79 2c  ry, -1, &pQuery,
1a950 20 30 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20   0);.    if( rc 
1a960 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
1a970 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1a980 72 6f 72 3a 20 28 25 64 29 20 25 73 20 6f 6e 20  ror: (%d) %s on 
1a990 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20  [%s]\n",.       
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1a9b0 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
1a9c0 65 72 72 63 6f 64 65 28 70 2d 3e 64 62 29 2c 20  errcode(p->db), 
1a9d0 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70  sqlite3_errmsg(p
1a9e0 2d 3e 64 62 29 2c 0a 20 20 20 20 20 20 20 20 20  ->db),.         
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 51 75               zQu
1aa00 65 72 79 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  ery);.      goto
1aa10 20 65 6e 64 5f 73 63 68 65 6d 61 5f 78 66 65 72   end_schema_xfer
1aa20 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c  ;.    }.    whil
1aa30 65 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  e( (rc = sqlite3
1aa40 5f 73 74 65 70 28 70 51 75 65 72 79 29 29 3d 3d  _step(pQuery))==
1aa50 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20  SQLITE_ROW ){.  
1aa60 20 20 20 20 7a 4e 61 6d 65 20 3d 20 73 71 6c 69      zName = sqli
1aa70 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
1aa80 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20 20 20  pQuery, 0);.    
1aa90 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
1aaa0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75  _column_text(pQu
1aab0 65 72 79 2c 20 31 29 3b 0a 20 20 20 20 20 20 70  ery, 1);.      p
1aac0 72 69 6e 74 66 28 22 25 73 2e 2e 2e 20 22 2c 20  rintf("%s... ", 
1aad0 7a 4e 61 6d 65 29 3b 20 66 66 6c 75 73 68 28 73  zName); fflush(s
1aae0 74 64 6f 75 74 29 3b 0a 20 20 20 20 20 20 73 71  tdout);.      sq
1aaf0 6c 69 74 65 33 5f 65 78 65 63 28 6e 65 77 44 62  lite3_exec(newDb
1ab00 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a  , (const char*)z
1ab10 53 71 6c 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72  Sql, 0, 0, &zErr
1ab20 4d 73 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Msg);.      if( 
1ab30 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20  zErrMsg ){.     
1ab40 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1ab50 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25  tderr, "Error: %
1ab60 73 5c 6e 53 51 4c 3a 20 5b 25 73 5d 5c 6e 22 2c  s\nSQL: [%s]\n",
1ab70 20 7a 45 72 72 4d 73 67 2c 20 7a 53 71 6c 29 3b   zErrMsg, zSql);
1ab80 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1ab90 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  _free(zErrMsg);.
1aba0 20 20 20 20 20 20 20 20 7a 45 72 72 4d 73 67 20          zErrMsg 
1abb0 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
1abc0 20 20 20 69 66 28 20 78 46 6f 72 45 61 63 68 20     if( xForEach 
1abd0 29 7b 0a 20 20 20 20 20 20 20 20 78 46 6f 72 45  ){.        xForE
1abe0 61 63 68 28 70 2c 20 6e 65 77 44 62 2c 20 28 63  ach(p, newDb, (c
1abf0 6f 6e 73 74 20 63 68 61 72 2a 29 7a 4e 61 6d 65  onst char*)zName
1ac00 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1ac10 20 70 72 69 6e 74 66 28 22 64 6f 6e 65 5c 6e 22   printf("done\n"
1ac20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 65 6e 64  );.    }.  }.end
1ac30 5f 73 63 68 65 6d 61 5f 78 66 65 72 3a 0a 20 20  _schema_xfer:.  
1ac40 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
1ac50 28 70 51 75 65 72 79 29 3b 0a 20 20 73 71 6c 69  (pQuery);.  sqli
1ac60 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79 29  te3_free(zQuery)
1ac70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20  ;.}../*.** Open 
1ac80 61 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 66  a new database f
1ac90 69 6c 65 20 6e 61 6d 65 64 20 22 7a 4e 65 77 44  ile named "zNewD
1aca0 62 22 2e 20 20 54 72 79 20 74 6f 20 72 65 63 6f  b".  Try to reco
1acb0 76 65 72 20 61 73 20 6d 75 63 68 20 69 6e 66 6f  ver as much info
1acc0 72 6d 61 74 69 6f 6e 0a 2a 2a 20 61 73 20 70 6f  rmation.** as po
1acd0 73 73 69 62 6c 65 20 6f 75 74 20 6f 66 20 74 68  ssible out of th
1ace0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1acf0 28 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20  (which might be 
1ad00 63 6f 72 72 75 70 74 29 20 61 6e 64 20 77 72 69  corrupt) and wri
1ad10 74 65 20 69 74 0a 2a 2a 20 69 6e 74 6f 20 7a 4e  te it.** into zN
1ad20 65 77 44 62 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ewDb..*/.static 
1ad30 76 6f 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65 28  void tryToClone(
1ad40 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63  ShellState *p, c
1ad50 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 44  onst char *zNewD
1ad60 62 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  b){.  int rc;.  
1ad70 73 71 6c 69 74 65 33 20 2a 6e 65 77 44 62 20 3d  sqlite3 *newDb =
1ad80 20 30 3b 0a 20 20 69 66 28 20 61 63 63 65 73 73   0;.  if( access
1ad90 28 7a 4e 65 77 44 62 2c 30 29 3d 3d 30 20 29 7b  (zNewDb,0)==0 ){
1ada0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
1adb0 28 73 74 64 65 72 72 2c 20 22 46 69 6c 65 20 5c  (stderr, "File \
1adc0 22 25 73 5c 22 20 61 6c 72 65 61 64 79 20 65 78  "%s\" already ex
1add0 69 73 74 73 2e 5c 6e 22 2c 20 7a 4e 65 77 44 62  ists.\n", zNewDb
1ade0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  );.    return;. 
1adf0 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
1ae00 33 5f 6f 70 65 6e 28 7a 4e 65 77 44 62 2c 20 26  3_open(zNewDb, &
1ae10 6e 65 77 44 62 29 3b 0a 20 20 69 66 28 20 72 63  newDb);.  if( rc
1ae20 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
1ae30 6e 74 66 28 73 74 64 65 72 72 2c 20 22 43 61 6e  ntf(stderr, "Can
1ae40 6e 6f 74 20 63 72 65 61 74 65 20 6f 75 74 70 75  not create outpu
1ae50 74 20 64 61 74 61 62 61 73 65 3a 20 25 73 5c 6e  t database: %s\n
1ae60 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ",.            s
1ae70 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 6e 65  qlite3_errmsg(ne
1ae80 77 44 62 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  wDb));.  }else{.
1ae90 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63      sqlite3_exec
1aea0 28 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41 20  (p->db, "PRAGMA 
1aeb0 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d  writable_schema=
1aec0 4f 4e 3b 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  ON;", 0, 0, 0);.
1aed0 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63      sqlite3_exec
1aee0 28 6e 65 77 44 62 2c 20 22 42 45 47 49 4e 20 45  (newDb, "BEGIN E
1aef0 58 43 4c 55 53 49 56 45 3b 22 2c 20 30 2c 20 30  XCLUSIVE;", 0, 0
1af00 2c 20 30 29 3b 0a 20 20 20 20 74 72 79 54 6f 43  , 0);.    tryToC
1af10 6c 6f 6e 65 53 63 68 65 6d 61 28 70 2c 20 6e 65  loneSchema(p, ne
1af20 77 44 62 2c 20 22 74 79 70 65 3d 27 74 61 62 6c  wDb, "type='tabl
1af30 65 27 22 2c 20 74 72 79 54 6f 43 6c 6f 6e 65 44  e'", tryToCloneD
1af40 61 74 61 29 3b 0a 20 20 20 20 74 72 79 54 6f 43  ata);.    tryToC
1af50 6c 6f 6e 65 53 63 68 65 6d 61 28 70 2c 20 6e 65  loneSchema(p, ne
1af60 77 44 62 2c 20 22 74 79 70 65 21 3d 27 74 61 62  wDb, "type!='tab
1af70 6c 65 27 22 2c 20 30 29 3b 0a 20 20 20 20 73 71  le'", 0);.    sq
1af80 6c 69 74 65 33 5f 65 78 65 63 28 6e 65 77 44 62  lite3_exec(newDb
1af90 2c 20 22 43 4f 4d 4d 49 54 3b 22 2c 20 30 2c 20  , "COMMIT;", 0, 
1afa0 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  0, 0);.    sqlit
1afb0 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22  e3_exec(p->db, "
1afc0 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f  PRAGMA writable_
1afd0 73 63 68 65 6d 61 3d 4f 46 46 3b 22 2c 20 30 2c  schema=OFF;", 0,
1afe0 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 73 71   0, 0);.  }.  sq
1aff0 6c 69 74 65 33 5f 63 6c 6f 73 65 28 6e 65 77 44  lite3_close(newD
1b000 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61  b);.}../*.** Cha
1b010 6e 67 65 20 74 68 65 20 6f 75 74 70 75 74 20 66  nge the output f
1b020 69 6c 65 20 62 61 63 6b 20 74 6f 20 73 74 64 6f  ile back to stdo
1b030 75 74 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  ut.*/.static voi
1b040 64 20 6f 75 74 70 75 74 5f 72 65 73 65 74 28 53  d output_reset(S
1b050 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20  hellState *p){. 
1b060 20 69 66 28 20 70 2d 3e 6f 75 74 66 69 6c 65 5b   if( p->outfile[
1b070 30 5d 3d 3d 27 7c 27 20 29 7b 0a 23 69 66 6e 64  0]=='|' ){.#ifnd
1b080 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
1b090 4f 50 45 4e 0a 20 20 20 20 70 63 6c 6f 73 65 28  OPEN.    pclose(
1b0a0 70 2d 3e 6f 75 74 29 3b 0a 23 65 6e 64 69 66 0a  p->out);.#endif.
1b0b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6f 75 74    }else{.    out
1b0c0 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28 70  put_file_close(p
1b0d0 2d 3e 6f 75 74 29 3b 0a 20 20 7d 0a 20 20 70 2d  ->out);.  }.  p-
1b0e0 3e 6f 75 74 66 69 6c 65 5b 30 5d 20 3d 20 30 3b  >outfile[0] = 0;
1b0f0 0a 20 20 70 2d 3e 6f 75 74 20 3d 20 73 74 64 6f  .  p->out = stdo
1b100 75 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e  ut;.}../*.** Run
1b110 20 61 6e 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 20   an SQL command 
1b120 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 73  and return the s
1b130 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 72 65  ingle integer re
1b140 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  sult..*/.static 
1b150 69 6e 74 20 64 62 5f 69 6e 74 28 53 68 65 6c 6c  int db_int(Shell
1b160 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e 73 74 20  State *p, const 
1b170 63 68 61 72 20 2a 7a 53 71 6c 29 7b 0a 20 20 73  char *zSql){.  s
1b180 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
1b190 6d 74 3b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20  mt;.  int res = 
1b1a0 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 70 72 65  0;.  sqlite3_pre
1b1b0 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
1b1c0 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
1b1d0 20 30 29 3b 0a 20 20 69 66 28 20 70 53 74 6d 74   0);.  if( pStmt
1b1e0 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74 65 70   && sqlite3_step
1b1f0 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
1b200 52 4f 57 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  ROW ){.    res =
1b210 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1b220 69 6e 74 28 70 53 74 6d 74 2c 30 29 3b 0a 20 20  int(pStmt,0);.  
1b230 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  }.  sqlite3_fina
1b240 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 72  lize(pStmt);.  r
1b250 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a 0a 2f 2a  eturn res;.}../*
1b260 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 20 32 2d  .** Convert a 2-
1b270 62 79 74 65 20 6f 72 20 34 2d 62 79 74 65 20 62  byte or 4-byte b
1b280 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
1b290 72 20 69 6e 74 6f 20 61 20 6e 61 74 69 76 65 20  r into a native 
1b2a0 69 6e 74 65 67 65 72 0a 2a 2f 0a 73 74 61 74 69  integer.*/.stati
1b2b0 63 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 67  c unsigned int g
1b2c0 65 74 32 62 79 74 65 49 6e 74 28 75 6e 73 69 67  et2byteInt(unsig
1b2d0 6e 65 64 20 63 68 61 72 20 2a 61 29 7b 0a 20 20  ned char *a){.  
1b2e0 72 65 74 75 72 6e 20 28 61 5b 30 5d 3c 3c 38 29  return (a[0]<<8)
1b2f0 20 2b 20 61 5b 31 5d 3b 0a 7d 0a 73 74 61 74 69   + a[1];.}.stati
1b300 63 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 67  c unsigned int g
1b310 65 74 34 62 79 74 65 49 6e 74 28 75 6e 73 69 67  et4byteInt(unsig
1b320 6e 65 64 20 63 68 61 72 20 2a 61 29 7b 0a 20 20  ned char *a){.  
1b330 72 65 74 75 72 6e 20 28 61 5b 30 5d 3c 3c 32 34  return (a[0]<<24
1b340 29 20 2b 20 28 61 5b 31 5d 3c 3c 31 36 29 20 2b  ) + (a[1]<<16) +
1b350 20 28 61 5b 32 5d 3c 3c 38 29 20 2b 20 61 5b 33   (a[2]<<8) + a[3
1b360 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c  ];.}../*.** Impl
1b370 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
1b380 65 20 22 2e 69 6e 66 6f 22 20 63 6f 6d 6d 61 6e  e ".info" comman
1b390 64 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  d..**.** Return 
1b3a0 31 20 6f 6e 20 65 72 72 6f 72 2c 20 32 20 74 6f  1 on error, 2 to
1b3b0 20 65 78 69 74 2c 20 61 6e 64 20 30 20 6f 74 68   exit, and 0 oth
1b3c0 65 72 77 69 73 65 2e 0a 2a 2f 0a 73 74 61 74 69  erwise..*/.stati
1b3d0 63 20 69 6e 74 20 73 68 65 6c 6c 5f 64 62 69 6e  c int shell_dbin
1b3e0 66 6f 5f 63 6f 6d 6d 61 6e 64 28 53 68 65 6c 6c  fo_command(Shell
1b3f0 53 74 61 74 65 20 2a 70 2c 20 69 6e 74 20 6e 41  State *p, int nA
1b400 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41 72 67  rg, char **azArg
1b410 29 7b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ){.  static cons
1b420 74 20 73 74 72 75 63 74 20 7b 20 63 6f 6e 73 74  t struct { const
1b430 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 69 6e   char *zName; in
1b440 74 20 6f 66 73 74 3b 20 7d 20 61 46 69 65 6c 64  t ofst; } aField
1b450 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22 66  [] = {.     { "f
1b460 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  ile change count
1b470 65 72 3a 22 2c 20 20 32 34 20 20 7d 2c 0a 20 20  er:",  24  },.  
1b480 20 20 20 7b 20 22 64 61 74 61 62 61 73 65 20 70     { "database p
1b490 61 67 65 20 63 6f 75 6e 74 3a 22 2c 20 20 32 38  age count:",  28
1b4a0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 66 72 65    },.     { "fre
1b4b0 65 6c 69 73 74 20 70 61 67 65 20 63 6f 75 6e 74  elist page count
1b4c0 3a 22 2c 20 20 33 36 20 20 7d 2c 0a 20 20 20 20  :",  36  },.    
1b4d0 20 7b 20 22 73 63 68 65 6d 61 20 63 6f 6f 6b 69   { "schema cooki
1b4e0 65 3a 22 2c 20 20 20 20 20 20 20 20 34 30 20 20  e:",        40  
1b4f0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 63 68 65 6d  },.     { "schem
1b500 61 20 66 6f 72 6d 61 74 3a 22 2c 20 20 20 20 20  a format:",     
1b510 20 20 20 34 34 20 20 7d 2c 0a 20 20 20 20 20 7b     44  },.     {
1b520 20 22 64 65 66 61 75 6c 74 20 63 61 63 68 65 20   "default cache 
1b530 73 69 7a 65 3a 22 2c 20 20 20 34 38 20 20 7d 2c  size:",   48  },
1b540 0a 20 20 20 20 20 7b 20 22 61 75 74 6f 76 61 63  .     { "autovac
1b550 75 75 6d 20 74 6f 70 20 72 6f 6f 74 3a 22 2c 20  uum top root:", 
1b560 20 35 32 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   52  },.     { "
1b570 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  incremental vacu
1b580 75 6d 3a 22 2c 20 20 20 36 34 20 20 7d 2c 0a 20  um:",   64  },. 
1b590 20 20 20 20 7b 20 22 74 65 78 74 20 65 6e 63 6f      { "text enco
1b5a0 64 69 6e 67 3a 22 2c 20 20 20 20 20 20 20 20 35  ding:",        5
1b5b0 36 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 75 73  6  },.     { "us
1b5c0 65 72 20 76 65 72 73 69 6f 6e 3a 22 2c 20 20 20  er version:",   
1b5d0 20 20 20 20 20 20 36 30 20 20 7d 2c 0a 20 20 20        60  },.   
1b5e0 20 20 7b 20 22 61 70 70 6c 69 63 61 74 69 6f 6e    { "application
1b5f0 20 69 64 3a 22 2c 20 20 20 20 20 20 20 36 38 20   id:",       68 
1b600 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 6f 66 74   },.     { "soft
1b610 77 61 72 65 20 76 65 72 73 69 6f 6e 3a 22 2c 20  ware version:", 
1b620 20 20 20 20 39 36 20 20 7d 2c 0a 20 20 7d 3b 0a      96  },.  };.
1b630 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
1b640 74 72 75 63 74 20 7b 20 63 6f 6e 73 74 20 63 68  truct { const ch
1b650 61 72 20 2a 7a 4e 61 6d 65 3b 20 63 6f 6e 73 74  ar *zName; const
1b660 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 7d 20 61   char *zSql; } a
1b670 51 75 65 72 79 5b 5d 20 3d 20 7b 0a 20 20 20 20  Query[] = {.    
1b680 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66 20 74 61   { "number of ta
1b690 62 6c 65 73 3a 22 2c 0a 20 20 20 20 20 20 20 22  bles:",.       "
1b6a0 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
1b6b0 46 52 4f 4d 20 25 73 20 57 48 45 52 45 20 74 79  FROM %s WHERE ty
1b6c0 70 65 3d 27 74 61 62 6c 65 27 22 20 7d 2c 0a 20  pe='table'" },. 
1b6d0 20 20 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66      { "number of
1b6e0 20 69 6e 64 65 78 65 73 3a 22 2c 0a 20 20 20 20   indexes:",.    
1b6f0 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74     "SELECT count
1b700 28 2a 29 20 46 52 4f 4d 20 25 73 20 57 48 45 52  (*) FROM %s WHER
1b710 45 20 74 79 70 65 3d 27 69 6e 64 65 78 27 22 20  E type='index'" 
1b720 7d 2c 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62 65  },.     { "numbe
1b730 72 20 6f 66 20 74 72 69 67 67 65 72 73 3a 22 2c  r of triggers:",
1b740 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
1b750 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73  count(*) FROM %s
1b760 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 72 69   WHERE type='tri
1b770 67 67 65 72 27 22 20 7d 2c 0a 20 20 20 20 20 7b  gger'" },.     {
1b780 20 22 6e 75 6d 62 65 72 20 6f 66 20 76 69 65 77   "number of view
1b790 73 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  s:",.       "SEL
1b7a0 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
1b7b0 4d 20 25 73 20 57 48 45 52 45 20 74 79 70 65 3d  M %s WHERE type=
1b7c0 27 76 69 65 77 27 22 20 7d 2c 0a 20 20 20 20 20  'view'" },.     
1b7d0 7b 20 22 73 63 68 65 6d 61 20 73 69 7a 65 3a 22  { "schema size:"
1b7e0 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
1b7f0 20 74 6f 74 61 6c 28 6c 65 6e 67 74 68 28 73 71   total(length(sq
1b800 6c 29 29 20 46 52 4f 4d 20 25 73 22 20 7d 2c 0a  l)) FROM %s" },.
1b810 20 20 7d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20    };.  int i;.  
1b820 63 68 61 72 20 2a 7a 53 63 68 65 6d 61 54 61 62  char *zSchemaTab
1b830 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62 20 3d 20  ;.  char *zDb = 
1b840 6e 41 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b  nArg>=2 ? azArg[
1b850 31 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a 20 20 73  1] : "main";.  s
1b860 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
1b870 6d 74 20 3d 20 30 3b 0a 20 20 75 6e 73 69 67 6e  mt = 0;.  unsign
1b880 65 64 20 63 68 61 72 20 61 48 64 72 5b 31 30 30  ed char aHdr[100
1b890 5d 3b 0a 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  ];.  open_db(p, 
1b8a0 30 29 3b 0a 20 20 69 66 28 20 70 2d 3e 64 62 3d  0);.  if( p->db=
1b8b0 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20  =0 ) return 1;. 
1b8c0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
1b8d0 5f 76 32 28 70 2d 3e 64 62 2c 22 53 45 4c 45 43  _v2(p->db,"SELEC
1b8e0 54 20 64 61 74 61 20 46 52 4f 4d 20 73 71 6c 69  T data FROM sqli
1b8f0 74 65 5f 64 62 70 61 67 65 28 3f 31 29 20 57 48  te_dbpage(?1) WH
1b900 45 52 45 20 70 67 6e 6f 3d 31 22 2c 0a 20 20 20  ERE pgno=1",.   
1b910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b920 20 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29    -1, &pStmt, 0)
1b930 3b 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  ;.  sqlite3_bind
1b940 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20  _text(pStmt, 1, 
1b950 7a 44 62 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  zDb, -1, SQLITE_
1b960 53 54 41 54 49 43 29 3b 0a 20 20 69 66 28 20 73  STATIC);.  if( s
1b970 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
1b980 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 0a 20  t)==SQLITE_ROW. 
1b990 20 20 26 26 20 73 71 6c 69 74 65 33 5f 63 6f 6c    && sqlite3_col
1b9a0 75 6d 6e 5f 62 79 74 65 73 28 70 53 74 6d 74 2c  umn_bytes(pStmt,
1b9b0 30 29 3e 31 30 30 0a 20 20 29 7b 0a 20 20 20 20  0)>100.  ){.    
1b9c0 6d 65 6d 63 70 79 28 61 48 64 72 2c 20 73 71 6c  memcpy(aHdr, sql
1b9d0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
1b9e0 28 70 53 74 6d 74 2c 30 29 2c 20 31 30 30 29 3b  (pStmt,0), 100);
1b9f0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
1ba00 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
1ba10 7d 65 6c 73 65 7b 0a 20 20 20 20 72 61 77 5f 70  }else{.    raw_p
1ba20 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 75  rintf(stderr, "u
1ba30 6e 61 62 6c 65 20 74 6f 20 72 65 61 64 20 64 61  nable to read da
1ba40 74 61 62 61 73 65 20 68 65 61 64 65 72 5c 6e 22  tabase header\n"
1ba50 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  );.    sqlite3_f
1ba60 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
1ba70 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
1ba80 7d 0a 20 20 69 20 3d 20 67 65 74 32 62 79 74 65  }.  i = get2byte
1ba90 49 6e 74 28 61 48 64 72 2b 31 36 29 3b 0a 20 20  Int(aHdr+16);.  
1baa0 69 66 28 20 69 3d 3d 31 20 29 20 69 20 3d 20 36  if( i==1 ) i = 6
1bab0 35 35 33 36 3b 0a 20 20 75 74 66 38 5f 70 72 69  5536;.  utf8_pri
1bac0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32  ntf(p->out, "%-2
1bad0 30 73 20 25 64 5c 6e 22 2c 20 22 64 61 74 61 62  0s %d\n", "datab
1bae0 61 73 65 20 70 61 67 65 20 73 69 7a 65 3a 22 2c  ase page size:",
1baf0 20 69 29 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e   i);.  utf8_prin
1bb00 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30  tf(p->out, "%-20
1bb10 73 20 25 64 5c 6e 22 2c 20 22 77 72 69 74 65 20  s %d\n", "write 
1bb20 66 6f 72 6d 61 74 3a 22 2c 20 61 48 64 72 5b 31  format:", aHdr[1
1bb30 38 5d 29 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e  8]);.  utf8_prin
1bb40 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30  tf(p->out, "%-20
1bb50 73 20 25 64 5c 6e 22 2c 20 22 72 65 61 64 20 66  s %d\n", "read f
1bb60 6f 72 6d 61 74 3a 22 2c 20 61 48 64 72 5b 31 39  ormat:", aHdr[19
1bb70 5d 29 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74  ]);.  utf8_print
1bb80 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73  f(p->out, "%-20s
1bb90 20 25 64 5c 6e 22 2c 20 22 72 65 73 65 72 76 65   %d\n", "reserve
1bba0 64 20 62 79 74 65 73 3a 22 2c 20 61 48 64 72 5b  d bytes:", aHdr[
1bbb0 32 30 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  20]);.  for(i=0;
1bbc0 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61 46 69   i<ArraySize(aFi
1bbd0 65 6c 64 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  eld); i++){.    
1bbe0 69 6e 74 20 6f 66 73 74 20 3d 20 61 46 69 65 6c  int ofst = aFiel
1bbf0 64 5b 69 5d 2e 6f 66 73 74 3b 0a 20 20 20 20 75  d[i].ofst;.    u
1bc00 6e 73 69 67 6e 65 64 20 69 6e 74 20 76 61 6c 20  nsigned int val 
1bc10 3d 20 67 65 74 34 62 79 74 65 49 6e 74 28 61 48  = get4byteInt(aH
1bc20 64 72 20 2b 20 6f 66 73 74 29 3b 0a 20 20 20 20  dr + ofst);.    
1bc30 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
1bc40 75 74 2c 20 22 25 2d 32 30 73 20 25 75 22 2c 20  ut, "%-20s %u", 
1bc50 61 46 69 65 6c 64 5b 69 5d 2e 7a 4e 61 6d 65 2c  aField[i].zName,
1bc60 20 76 61 6c 29 3b 0a 20 20 20 20 73 77 69 74 63   val);.    switc
1bc70 68 28 20 6f 66 73 74 20 29 7b 0a 20 20 20 20 20  h( ofst ){.     
1bc80 20 63 61 73 65 20 35 36 3a 20 7b 0a 20 20 20 20   case 56: {.    
1bc90 20 20 20 20 69 66 28 20 76 61 6c 3d 3d 31 20 29      if( val==1 )
1bca0 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
1bcb0 75 74 2c 20 22 20 28 75 74 66 38 29 22 29 3b 0a  ut, " (utf8)");.
1bcc0 20 20 20 20 20 20 20 20 69 66 28 20 76 61 6c 3d          if( val=
1bcd0 3d 32 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28  =2 ) raw_printf(
1bce0 70 2d 3e 6f 75 74 2c 20 22 20 28 75 74 66 31 36  p->out, " (utf16
1bcf0 6c 65 29 22 29 3b 0a 20 20 20 20 20 20 20 20 69  le)");.        i
1bd00 66 28 20 76 61 6c 3d 3d 33 20 29 20 72 61 77 5f  f( val==3 ) raw_
1bd10 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
1bd20 20 28 75 74 66 31 36 62 65 29 22 29 3b 0a 20 20   (utf16be)");.  
1bd30 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1bd40 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
1bd50 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20  t, "\n");.  }.  
1bd60 69 66 28 20 7a 44 62 3d 3d 30 20 29 7b 0a 20 20  if( zDb==0 ){.  
1bd70 20 20 7a 53 63 68 65 6d 61 54 61 62 20 3d 20 73    zSchemaTab = s
1bd80 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1bd90 6d 61 69 6e 2e 73 71 6c 69 74 65 5f 6d 61 73 74  main.sqlite_mast
1bda0 65 72 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  er");.  }else if
1bdb0 28 20 73 74 72 63 6d 70 28 7a 44 62 2c 22 74 65  ( strcmp(zDb,"te
1bdc0 6d 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 7a  mp")==0 ){.    z
1bdd0 53 63 68 65 6d 61 54 61 62 20 3d 20 73 71 6c 69  SchemaTab = sqli
1bde0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
1bdf0 2c 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  , "sqlite_temp_m
1be00 61 73 74 65 72 22 29 3b 0a 20 20 7d 65 6c 73 65  aster");.  }else
1be10 7b 0a 20 20 20 20 7a 53 63 68 65 6d 61 54 61 62  {.    zSchemaTab
1be20 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
1be30 74 66 28 22 5c 22 25 77 5c 22 2e 73 71 6c 69 74  tf("\"%w\".sqlit
1be40 65 5f 6d 61 73 74 65 72 22 2c 20 7a 44 62 29 3b  e_master", zDb);
1be50 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20  .  }.  for(i=0; 
1be60 69 3c 41 72 72 61 79 53 69 7a 65 28 61 51 75 65  i<ArraySize(aQue
1be70 72 79 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 63  ry); i++){.    c
1be80 68 61 72 20 2a 7a 53 71 6c 20 3d 20 73 71 6c 69  har *zSql = sqli
1be90 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 51 75 65  te3_mprintf(aQue
1bea0 72 79 5b 69 5d 2e 7a 53 71 6c 2c 20 7a 53 63 68  ry[i].zSql, zSch
1beb0 65 6d 61 54 61 62 29 3b 0a 20 20 20 20 69 6e 74  emaTab);.    int
1bec0 20 76 61 6c 20 3d 20 64 62 5f 69 6e 74 28 70 2c   val = db_int(p,
1bed0 20 7a 53 71 6c 29 3b 0a 20 20 20 20 73 71 6c 69   zSql);.    sqli
1bee0 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
1bef0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1bf00 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20 25  p->out, "%-20s %
1bf10 64 5c 6e 22 2c 20 61 51 75 65 72 79 5b 69 5d 2e  d\n", aQuery[i].
1bf20 7a 4e 61 6d 65 2c 20 76 61 6c 29 3b 0a 20 20 7d  zName, val);.  }
1bf30 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
1bf40 7a 53 63 68 65 6d 61 54 61 62 29 3b 0a 20 20 72  zSchemaTab);.  r
1bf50 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
1bf60 2a 20 50 72 69 6e 74 20 74 68 65 20 63 75 72 72  * Print the curr
1bf70 65 6e 74 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  ent sqlite3_errm
1bf80 73 67 28 29 20 76 61 6c 75 65 20 74 6f 20 73 74  sg() value to st
1bf90 64 65 72 72 20 61 6e 64 20 72 65 74 75 72 6e 20  derr and return 
1bfa0 31 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  1..*/.static int
1bfb0 20 73 68 65 6c 6c 44 61 74 61 62 61 73 65 45 72   shellDatabaseEr
1bfc0 72 6f 72 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ror(sqlite3 *db)
1bfd0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1bfe0 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65  zErr = sqlite3_e
1bff0 72 72 6d 73 67 28 64 62 29 3b 0a 20 20 75 74 66  rrmsg(db);.  utf
1c000 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
1c010 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20   "Error: %s\n", 
1c020 7a 45 72 72 29 3b 0a 20 20 72 65 74 75 72 6e 20  zErr);.  return 
1c030 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e  1;.}../*.** Prin
1c040 74 20 61 6e 20 6f 75 74 2d 6f 66 2d 6d 65 6d 6f  t an out-of-memo
1c050 72 79 20 6d 65 73 73 61 67 65 20 74 6f 20 73 74  ry message to st
1c060 64 65 72 72 20 61 6e 64 20 72 65 74 75 72 6e 20  derr and return 
1c070 31 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  1..*/.static int
1c080 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45 72 72 6f 72   shellNomemError
1c090 28 76 6f 69 64 29 7b 0a 20 20 72 61 77 5f 70 72  (void){.  raw_pr
1c0a0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1c0b0 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f  ror: out of memo
1c0c0 72 79 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72 6e  ry\n");.  return
1c0d0 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d   1;.}../*.** Com
1c0e0 70 61 72 65 20 74 68 65 20 70 61 74 74 65 72 6e  pare the pattern
1c0f0 20 69 6e 20 7a 47 6c 6f 62 5b 5d 20 61 67 61 69   in zGlob[] agai
1c100 6e 73 74 20 74 68 65 20 74 65 78 74 20 69 6e 20  nst the text in 
1c110 7a 5b 5d 2e 20 20 52 65 74 75 72 6e 20 54 52 55  z[].  Return TRU
1c120 45 0a 2a 2a 20 69 66 20 74 68 65 79 20 6d 61 74  E.** if they mat
1c130 63 68 20 61 6e 64 20 46 41 4c 53 45 20 28 30 29  ch and FALSE (0)
1c140 20 69 66 20 74 68 65 79 20 64 6f 20 6e 6f 74 20   if they do not 
1c150 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 47 6c 6f  match..**.** Glo
1c160 62 62 69 6e 67 20 72 75 6c 65 73 3a 0a 2a 2a 0a  bbing rules:.**.
1c170 2a 2a 20 20 20 20 20 20 27 2a 27 20 20 20 20 20  **      '*'     
1c180 20 20 4d 61 74 63 68 65 73 20 61 6e 79 20 73 65    Matches any se
1c190 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f  quence of zero o
1c1a0 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65 72  r more character
1c1b0 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 3f  s..**.**      '?
1c1c0 27 20 20 20 20 20 20 20 4d 61 74 63 68 65 73 20  '       Matches 
1c1d0 65 78 61 63 74 6c 79 20 6f 6e 65 20 63 68 61 72  exactly one char
1c1e0 61 63 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  acter..**.**    
1c1f0 20 5b 2e 2e 2e 5d 20 20 20 20 20 20 4d 61 74 63   [...]      Matc
1c200 68 65 73 20 6f 6e 65 20 63 68 61 72 61 63 74 65  hes one characte
1c210 72 20 66 72 6f 6d 20 74 68 65 20 65 6e 63 6c 6f  r from the enclo
1c220 73 65 64 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 20  sed list of.**  
1c230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68                ch
1c240 61 72 61 63 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  aracters..**.** 
1c250 20 20 20 20 5b 5e 2e 2e 2e 5d 20 20 20 20 20 4d      [^...]     M
1c260 61 74 63 68 65 73 20 6f 6e 65 20 63 68 61 72 61  atches one chara
1c270 63 74 65 72 20 6e 6f 74 20 69 6e 20 74 68 65 20  cter not in the 
1c280 65 6e 63 6c 6f 73 65 64 20 6c 69 73 74 2e 0a 2a  enclosed list..*
1c290 2a 0a 2a 2a 20 20 20 20 20 20 27 23 27 20 20 20  *.**      '#'   
1c2a0 20 20 20 20 4d 61 74 63 68 65 73 20 61 6e 79 20      Matches any 
1c2b0 73 65 71 75 65 6e 63 65 20 6f 66 20 6f 6e 65 20  sequence of one 
1c2c0 6f 72 20 6d 6f 72 65 20 64 69 67 69 74 73 20 77  or more digits w
1c2d0 69 74 68 20 61 6e 0a 2a 2a 20 20 20 20 20 20 20  ith an.**       
1c2e0 20 20 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 61           optiona
1c2f0 6c 20 2b 20 6f 72 20 2d 20 73 69 67 6e 20 69 6e  l + or - sign in
1c300 20 66 72 6f 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20   front.**.**    
1c310 20 20 27 20 27 20 20 20 20 20 20 20 41 6e 79 20    ' '       Any 
1c320 73 70 61 6e 20 6f 66 20 77 68 69 74 65 73 70 61  span of whitespa
1c330 63 65 20 6d 61 74 63 68 65 73 20 61 6e 79 20 6f  ce matches any o
1c340 74 68 65 72 20 73 70 61 6e 20 6f 66 0a 2a 2a 20  ther span of.** 
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
1c360 68 69 74 65 73 70 61 63 65 2e 0a 2a 2a 0a 2a 2a  hitespace..**.**
1c370 20 45 78 74 72 61 20 77 68 69 74 65 73 70 61 63   Extra whitespac
1c380 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  e at the end of 
1c390 7a 5b 5d 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a  z[] is ignored..
1c3a0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
1c3b0 73 74 63 61 73 65 5f 67 6c 6f 62 28 63 6f 6e 73  stcase_glob(cons
1c3c0 74 20 63 68 61 72 20 2a 7a 47 6c 6f 62 2c 20 63  t char *zGlob, c
1c3d0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20  onst char *z){. 
1c3e0 20 69 6e 74 20 63 2c 20 63 32 3b 0a 20 20 69 6e   int c, c2;.  in
1c3f0 74 20 69 6e 76 65 72 74 3b 0a 20 20 69 6e 74 20  t invert;.  int 
1c400 73 65 65 6e 3b 0a 0a 20 20 77 68 69 6c 65 28 20  seen;..  while( 
1c410 28 63 20 3d 20 28 2a 28 7a 47 6c 6f 62 2b 2b 29  (c = (*(zGlob++)
1c420 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  ))!=0 ){.    if(
1c430 20 49 73 53 70 61 63 65 28 63 29 20 29 7b 0a 20   IsSpace(c) ){. 
1c440 20 20 20 20 20 69 66 28 20 21 49 73 53 70 61 63       if( !IsSpac
1c450 65 28 2a 7a 29 20 29 20 72 65 74 75 72 6e 20 30  e(*z) ) return 0
1c460 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 49  ;.      while( I
1c470 73 53 70 61 63 65 28 2a 7a 47 6c 6f 62 29 20 29  sSpace(*zGlob) )
1c480 20 7a 47 6c 6f 62 2b 2b 3b 0a 20 20 20 20 20 20   zGlob++;.      
1c490 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 2a  while( IsSpace(*
1c4a0 7a 29 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 7d 65  z) ) z++;.    }e
1c4b0 6c 73 65 20 69 66 28 20 63 3d 3d 27 2a 27 20 29  lse if( c=='*' )
1c4c0 7b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 28  {.      while( (
1c4d0 63 3d 28 2a 28 7a 47 6c 6f 62 2b 2b 29 29 29 20  c=(*(zGlob++))) 
1c4e0 3d 3d 20 27 2a 27 20 7c 7c 20 63 3d 3d 27 3f 27  == '*' || c=='?'
1c4f0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
1c500 63 3d 3d 27 3f 27 20 26 26 20 28 2a 28 7a 2b 2b  c=='?' && (*(z++
1c510 29 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  ))==0 ) return 0
1c520 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1c530 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20  if( c==0 ){.    
1c540 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
1c550 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
1c560 3d 27 5b 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='[' ){.        
1c570 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 74 65 73  while( *z && tes
1c580 74 63 61 73 65 5f 67 6c 6f 62 28 7a 47 6c 6f 62  tcase_glob(zGlob
1c590 2d 31 2c 7a 29 3d 3d 30 20 29 7b 0a 20 20 20 20  -1,z)==0 ){.    
1c5a0 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20        z++;.     
1c5b0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74     }.        ret
1c5c0 75 72 6e 20 28 2a 7a 29 21 3d 30 3b 0a 20 20 20  urn (*z)!=0;.   
1c5d0 20 20 20 7d 0a 20 20 20 20 20 20 77 68 69 6c 65     }.      while
1c5e0 28 20 28 63 32 20 3d 20 28 2a 28 7a 2b 2b 29 29  ( (c2 = (*(z++))
1c5f0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
1c600 77 68 69 6c 65 28 20 63 32 21 3d 63 20 29 7b 0a  while( c2!=c ){.
1c610 20 20 20 20 20 20 20 20 20 20 63 32 20 3d 20 2a            c2 = *
1c620 28 7a 2b 2b 29 3b 0a 20 20 20 20 20 20 20 20 20  (z++);.         
1c630 20 69 66 28 20 63 32 3d 3d 30 20 29 20 72 65 74   if( c2==0 ) ret
1c640 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  urn 0;.        }
1c650 0a 20 20 20 20 20 20 20 20 69 66 28 20 74 65 73  .        if( tes
1c660 74 63 61 73 65 5f 67 6c 6f 62 28 7a 47 6c 6f 62  tcase_glob(zGlob
1c670 2c 7a 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  ,z) ) return 1;.
1c680 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
1c690 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73  turn 0;.    }els
1c6a0 65 20 69 66 28 20 63 3d 3d 27 3f 27 20 29 7b 0a  e if( c=='?' ){.
1c6b0 20 20 20 20 20 20 69 66 28 20 28 2a 28 7a 2b 2b        if( (*(z++
1c6c0 29 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  ))==0 ) return 0
1c6d0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
1c6e0 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20 20 20 20  c=='[' ){.      
1c6f0 69 6e 74 20 70 72 69 6f 72 5f 63 20 3d 20 30 3b  int prior_c = 0;
1c700 0a 20 20 20 20 20 20 73 65 65 6e 20 3d 20 30 3b  .      seen = 0;
1c710 0a 20 20 20 20 20 20 69 6e 76 65 72 74 20 3d 20  .      invert = 
1c720 30 3b 0a 20 20 20 20 20 20 63 20 3d 20 2a 28 7a  0;.      c = *(z
1c730 2b 2b 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63  ++);.      if( c
1c740 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
1c750 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c        c2 = *(zGl
1c760 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20 69 66 28  ob++);.      if(
1c770 20 63 32 3d 3d 27 5e 27 20 29 7b 0a 20 20 20 20   c2=='^' ){.    
1c780 20 20 20 20 69 6e 76 65 72 74 20 3d 20 31 3b 0a      invert = 1;.
1c790 20 20 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a          c2 = *(z
1c7a0 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20 7d  Glob++);.      }
1c7b0 0a 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d 27  .      if( c2=='
1c7c0 5d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  ]' ){.        if
1c7d0 28 20 63 3d 3d 27 5d 27 20 29 20 73 65 65 6e 20  ( c==']' ) seen 
1c7e0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 63 32 20  = 1;.        c2 
1c7f0 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20  = *(zGlob++);.  
1c800 20 20 20 20 7d 0a 20 20 20 20 20 20 77 68 69 6c      }.      whil
1c810 65 28 20 63 32 20 26 26 20 63 32 21 3d 27 5d 27  e( c2 && c2!=']'
1c820 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
1c830 63 32 3d 3d 27 2d 27 20 26 26 20 7a 47 6c 6f 62  c2=='-' && zGlob
1c840 5b 30 5d 21 3d 27 5d 27 20 26 26 20 7a 47 6c 6f  [0]!=']' && zGlo
1c850 62 5b 30 5d 21 3d 30 20 26 26 20 70 72 69 6f 72  b[0]!=0 && prior
1c860 5f 63 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20  _c>0 ){.        
1c870 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b    c2 = *(zGlob++
1c880 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
1c890 20 63 3e 3d 70 72 69 6f 72 5f 63 20 26 26 20 63   c>=prior_c && c
1c8a0 3c 3d 63 32 20 29 20 73 65 65 6e 20 3d 20 31 3b  <=c2 ) seen = 1;
1c8b0 0a 20 20 20 20 20 20 20 20 20 20 70 72 69 6f 72  .          prior
1c8c0 5f 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  _c = 0;.        
1c8d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1c8e0 20 69 66 28 20 63 3d 3d 63 32 20 29 7b 0a 20 20   if( c==c2 ){.  
1c8f0 20 20 20 20 20 20 20 20 20 20 73 65 65 6e 20 3d            seen =
1c900 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   1;.          }.
1c910 20 20 20 20 20 20 20 20 20 20 70 72 69 6f 72 5f            prior_
1c920 63 20 3d 20 63 32 3b 0a 20 20 20 20 20 20 20 20  c = c2;.        
1c930 7d 0a 20 20 20 20 20 20 20 20 63 32 20 3d 20 2a  }.        c2 = *
1c940 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20  (zGlob++);.     
1c950 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 32 3d   }.      if( c2=
1c960 3d 30 20 7c 7c 20 28 73 65 65 6e 20 5e 20 69 6e  =0 || (seen ^ in
1c970 76 65 72 74 29 3d 3d 30 20 29 20 72 65 74 75 72  vert)==0 ) retur
1c980 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  n 0;.    }else i
1c990 66 28 20 63 3d 3d 27 23 27 20 29 7b 0a 20 20 20  f( c=='#' ){.   
1c9a0 20 20 20 69 66 28 20 28 7a 5b 30 5d 3d 3d 27 2d     if( (z[0]=='-
1c9b0 27 20 7c 7c 20 7a 5b 30 5d 3d 3d 27 2b 27 29 20  ' || z[0]=='+') 
1c9c0 26 26 20 49 73 44 69 67 69 74 28 7a 5b 31 5d 29  && IsDigit(z[1])
1c9d0 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 69 66   ) z++;.      if
1c9e0 28 20 21 49 73 44 69 67 69 74 28 7a 5b 30 5d 29  ( !IsDigit(z[0])
1c9f0 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
1ca00 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 77 68     z++;.      wh
1ca10 69 6c 65 28 20 49 73 44 69 67 69 74 28 7a 5b 30  ile( IsDigit(z[0
1ca20 5d 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20  ]) ){ z++; }.   
1ca30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
1ca40 28 20 63 21 3d 28 2a 28 7a 2b 2b 29 29 20 29 20  ( c!=(*(z++)) ) 
1ca50 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a  return 0;.    }.
1ca60 20 20 7d 0a 20 20 77 68 69 6c 65 28 20 49 73 53    }.  while( IsS
1ca70 70 61 63 65 28 2a 7a 29 20 29 7b 20 7a 2b 2b 3b  pace(*z) ){ z++;
1ca80 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a 7a 3d 3d   }.  return *z==
1ca90 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d  0;.}.../*.** Com
1caa0 70 61 72 65 20 74 68 65 20 73 74 72 69 6e 67 20  pare the string 
1cab0 61 73 20 61 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e  as a command-lin
1cac0 65 20 6f 70 74 69 6f 6e 20 77 69 74 68 20 65 69  e option with ei
1cad0 74 68 65 72 20 6f 6e 65 20 6f 72 20 74 77 6f 0a  ther one or two.
1cae0 2a 2a 20 69 6e 69 74 69 61 6c 20 22 2d 22 20 63  ** initial "-" c
1caf0 68 61 72 61 63 74 65 72 73 2e 0a 2a 2f 0a 73 74  haracters..*/.st
1cb00 61 74 69 63 20 69 6e 74 20 6f 70 74 69 6f 6e 4d  atic int optionM
1cb10 61 74 63 68 28 63 6f 6e 73 74 20 63 68 61 72 20  atch(const char 
1cb20 2a 7a 53 74 72 2c 20 63 6f 6e 73 74 20 63 68 61  *zStr, const cha
1cb30 72 20 2a 7a 4f 70 74 29 7b 0a 20 20 69 66 28 20  r *zOpt){.  if( 
1cb40 7a 53 74 72 5b 30 5d 21 3d 27 2d 27 20 29 20 72  zStr[0]!='-' ) r
1cb50 65 74 75 72 6e 20 30 3b 0a 20 20 7a 53 74 72 2b  eturn 0;.  zStr+
1cb60 2b 3b 0a 20 20 69 66 28 20 7a 53 74 72 5b 30 5d  +;.  if( zStr[0]
1cb70 3d 3d 27 2d 27 20 29 20 7a 53 74 72 2b 2b 3b 0a  =='-' ) zStr++;.
1cb80 20 20 72 65 74 75 72 6e 20 73 74 72 63 6d 70 28    return strcmp(
1cb90 7a 53 74 72 2c 20 7a 4f 70 74 29 3d 3d 30 3b 0a  zStr, zOpt)==0;.
1cba0 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  }../*.** Delete 
1cbb0 61 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  a file..*/.int s
1cbc0 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c 65 28 63  hellDeleteFile(c
1cbd0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
1cbe0 6e 61 6d 65 29 7b 0a 20 20 69 6e 74 20 72 63 3b  name){.  int rc;
1cbf0 0a 23 69 66 64 65 66 20 5f 57 49 4e 33 32 0a 20  .#ifdef _WIN32. 
1cc00 20 77 63 68 61 72 5f 74 20 2a 7a 20 3d 20 73 71   wchar_t *z = sq
1cc10 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74 66 38  lite3_win32_utf8
1cc20 5f 74 6f 5f 75 6e 69 63 6f 64 65 28 7a 46 69 6c  _to_unicode(zFil
1cc30 65 6e 61 6d 65 29 3b 0a 20 20 72 63 20 3d 20 5f  ename);.  rc = _
1cc40 77 75 6e 6c 69 6e 6b 28 7a 29 3b 0a 20 20 73 71  wunlink(z);.  sq
1cc50 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 23  lite3_free(z);.#
1cc60 65 6c 73 65 0a 20 20 72 63 20 3d 20 75 6e 6c 69  else.  rc = unli
1cc70 6e 6b 28 7a 46 69 6c 65 6e 61 6d 65 29 3b 0a 23  nk(zFilename);.#
1cc80 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 72  endif.  return r
1cc90 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  c;.}.../*.** The
1cca0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1ccb0 6f 66 20 53 51 4c 20 73 63 61 6c 61 72 20 66 75  of SQL scalar fu
1ccc0 6e 63 74 69 6f 6e 20 66 6b 65 79 5f 63 6f 6c 6c  nction fkey_coll
1ccd0 61 74 65 5f 63 6c 61 75 73 65 28 29 2c 20 75 73  ate_clause(), us
1cce0 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 22 2e 6c  ed.** by the ".l
1ccf0 69 6e 74 20 66 6b 65 79 2d 69 6e 64 65 78 65 73  int fkey-indexes
1cd00 22 20 63 6f 6d 6d 61 6e 64 2e 20 54 68 69 73 20  " command. This 
1cd10 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
1cd20 69 73 20 61 6c 77 61 79 73 0a 2a 2a 20 63 61 6c  is always.** cal
1cd30 6c 65 64 20 77 69 74 68 20 66 6f 75 72 20 61 72  led with four ar
1cd40 67 75 6d 65 6e 74 73 20 2d 20 74 68 65 20 70 61  guments - the pa
1cd50 72 65 6e 74 20 74 61 62 6c 65 20 6e 61 6d 65 2c  rent table name,
1cd60 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6c 75   the parent colu
1cd70 6d 6e 20 6e 61 6d 65 2c 0a 2a 2a 20 74 68 65 20  mn name,.** the 
1cd80 63 68 69 6c 64 20 74 61 62 6c 65 20 6e 61 6d 65  child table name
1cd90 20 61 6e 64 20 74 68 65 20 63 68 69 6c 64 20 63   and the child c
1cda0 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 2a 2a 0a 2a  olumn name..**.*
1cdb0 2a 20 20 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65  *   fkey_collate
1cdc0 5f 63 6c 61 75 73 65 28 27 70 61 72 65 6e 74 2d  _clause('parent-
1cdd0 74 61 62 27 2c 20 27 70 61 72 65 6e 74 2d 63 6f  tab', 'parent-co
1cde0 6c 27 2c 20 27 63 68 69 6c 64 2d 74 61 62 27 2c  l', 'child-tab',
1cdf0 20 27 63 68 69 6c 64 2d 63 6f 6c 27 29 0a 2a 2a   'child-col').**
1ce00 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 66  .** If either of
1ce10 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65   the named table
1ce20 73 20 6f 72 20 63 6f 6c 75 6d 6e 73 20 64 6f 20  s or columns do 
1ce30 6e 6f 74 20 65 78 69 73 74 2c 20 74 68 69 73 20  not exist, this 
1ce40 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 72 65 74 75  function.** retu
1ce50 72 6e 73 20 61 6e 20 65 6d 70 74 79 20 73 74 72  rns an empty str
1ce60 69 6e 67 2e 20 41 6e 20 65 6d 70 74 79 20 73 74  ing. An empty st
1ce70 72 69 6e 67 20 69 73 20 61 6c 73 6f 20 72 65 74  ring is also ret
1ce80 75 72 6e 65 64 20 69 66 20 62 6f 74 68 20 74 61  urned if both ta
1ce90 62 6c 65 73 0a 2a 2a 20 61 6e 64 20 63 6f 6c 75  bles.** and colu
1cea0 6d 6e 73 20 65 78 69 73 74 20 62 75 74 20 68 61  mns exist but ha
1ceb0 76 65 20 74 68 65 20 73 61 6d 65 20 64 65 66 61  ve the same defa
1cec0 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
1ced0 71 75 65 6e 63 65 2e 20 4f 72 2c 0a 2a 2a 20 69  quence. Or,.** i
1cee0 66 20 62 6f 74 68 20 65 78 69 73 74 20 62 75 74  f both exist but
1cef0 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   the default col
1cf00 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73  lation sequences
1cf10 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2c 20   are different, 
1cf20 74 68 69 73 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  this.** function
1cf30 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 74 72   returns the str
1cf40 69 6e 67 20 22 20 43 4f 4c 4c 41 54 45 20 3c 70  ing " COLLATE <p
1cf50 61 72 65 6e 74 2d 63 6f 6c 6c 61 74 69 6f 6e 3e  arent-collation>
1cf60 22 2c 20 77 68 65 72 65 0a 2a 2a 20 3c 70 61 72  ", where.** <par
1cf70 65 6e 74 2d 63 6f 6c 6c 61 74 69 6f 6e 3e 20 69  ent-collation> i
1cf80 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f  s the default co
1cf90 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
1cfa0 20 6f 66 20 74 68 65 20 70 61 72 65 6e 74 20 63   of the parent c
1cfb0 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  olumn..*/.static
1cfc0 20 76 6f 69 64 20 73 68 65 6c 6c 46 6b 65 79 43   void shellFkeyC
1cfd0 6f 6c 6c 61 74 65 43 6c 61 75 73 65 28 0a 20 20  ollateClause(.  
1cfe0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
1cff0 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20 6e 56 61  *pCtx,.  int nVa
1d000 6c 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  l,.  sqlite3_val
1d010 75 65 20 2a 2a 61 70 56 61 6c 0a 29 7b 0a 20 20  ue **apVal.){.  
1d020 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 73 71  sqlite3 *db = sq
1d030 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 64 62  lite3_context_db
1d040 5f 68 61 6e 64 6c 65 28 70 43 74 78 29 3b 0a 20  _handle(pCtx);. 
1d050 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61   const char *zPa
1d060 72 65 6e 74 3b 0a 20 20 63 6f 6e 73 74 20 63 68  rent;.  const ch
1d070 61 72 20 2a 7a 50 61 72 65 6e 74 43 6f 6c 3b 0a  ar *zParentCol;.
1d080 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50    const char *zP
1d090 61 72 65 6e 74 53 65 71 3b 0a 20 20 63 6f 6e 73  arentSeq;.  cons
1d0a0 74 20 63 68 61 72 20 2a 7a 43 68 69 6c 64 3b 0a  t char *zChild;.
1d0b0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
1d0c0 68 69 6c 64 43 6f 6c 3b 0a 20 20 63 6f 6e 73 74  hildCol;.  const
1d0d0 20 63 68 61 72 20 2a 7a 43 68 69 6c 64 53 65 71   char *zChildSeq
1d0e0 20 3d 20 30 3b 20 20 2f 2a 20 49 6e 69 74 69 61   = 0;  /* Initia
1d0f0 6c 69 7a 65 20 74 6f 20 61 76 6f 69 64 20 66 61  lize to avoid fa
1d100 6c 73 65 2d 70 6f 73 69 74 69 76 65 20 77 61 72  lse-positive war
1d110 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 72 63  ning */.  int rc
1d120 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 56 61  ;..  assert( nVa
1d130 6c 3d 3d 34 20 29 3b 0a 20 20 7a 50 61 72 65 6e  l==4 );.  zParen
1d140 74 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  t = (const char*
1d150 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
1d160 65 78 74 28 61 70 56 61 6c 5b 30 5d 29 3b 0a 20  ext(apVal[0]);. 
1d170 20 7a 50 61 72 65 6e 74 43 6f 6c 20 3d 20 28 63   zParentCol = (c
1d180 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
1d190 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 70  e3_value_text(ap
1d1a0 56 61 6c 5b 31 5d 29 3b 0a 20 20 7a 43 68 69 6c  Val[1]);.  zChil
1d1b0 64 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  d = (const char*
1d1c0 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
1d1d0 65 78 74 28 61 70 56 61 6c 5b 32 5d 29 3b 0a 20  ext(apVal[2]);. 
1d1e0 20 7a 43 68 69 6c 64 43 6f 6c 20 3d 20 28 63 6f   zChildCol = (co
1d1f0 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
1d200 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 70 56  3_value_text(apV
1d210 61 6c 5b 33 5d 29 3b 0a 0a 20 20 73 71 6c 69 74  al[3]);..  sqlit
1d220 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70  e3_result_text(p
1d230 43 74 78 2c 20 22 22 2c 20 2d 31 2c 20 53 51 4c  Ctx, "", -1, SQL
1d240 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 72  ITE_STATIC);.  r
1d250 63 20 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c  c = sqlite3_tabl
1d260 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
1d270 61 28 0a 20 20 20 20 20 20 64 62 2c 20 22 6d 61  a(.      db, "ma
1d280 69 6e 22 2c 20 7a 50 61 72 65 6e 74 2c 20 7a 50  in", zParent, zP
1d290 61 72 65 6e 74 43 6f 6c 2c 20 30 2c 20 26 7a 50  arentCol, 0, &zP
1d2a0 61 72 65 6e 74 53 65 71 2c 20 30 2c 20 30 2c 20  arentSeq, 0, 0, 
1d2b0 30 0a 20 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  0.  );.  if( rc=
1d2c0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1d2d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74    rc = sqlite3_t
1d2e0 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
1d2f0 64 61 74 61 28 0a 20 20 20 20 20 20 20 20 64 62  data(.        db
1d300 2c 20 22 6d 61 69 6e 22 2c 20 7a 43 68 69 6c 64  , "main", zChild
1d310 2c 20 7a 43 68 69 6c 64 43 6f 6c 2c 20 30 2c 20  , zChildCol, 0, 
1d320 26 7a 43 68 69 6c 64 53 65 71 2c 20 30 2c 20 30  &zChildSeq, 0, 0
1d330 2c 20 30 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 0a  , 0.    );.  }..
1d340 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1d350 5f 4f 4b 20 26 26 20 73 71 6c 69 74 65 33 5f 73  _OK && sqlite3_s
1d360 74 72 69 63 6d 70 28 7a 50 61 72 65 6e 74 53 65  tricmp(zParentSe
1d370 71 2c 20 7a 43 68 69 6c 64 53 65 71 29 20 29 7b  q, zChildSeq) ){
1d380 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 73  .    char *z = s
1d390 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1d3a0 20 43 4f 4c 4c 41 54 45 20 25 73 22 2c 20 7a 50   COLLATE %s", zP
1d3b0 61 72 65 6e 74 53 65 71 29 3b 0a 20 20 20 20 73  arentSeq);.    s
1d3c0 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
1d3d0 78 74 28 70 43 74 78 2c 20 7a 2c 20 2d 31 2c 20  xt(pCtx, z, -1, 
1d3e0 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
1d3f0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  );.    sqlite3_f
1d400 72 65 65 28 7a 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a  ree(z);.  }.}...
1d410 2f 2a 0a 2a 2a 20 54 68 65 20 69 6d 70 6c 65 6d  /*.** The implem
1d420 65 6e 74 61 74 69 6f 6e 20 6f 66 20 64 6f 74 2d  entation of dot-
1d430 63 6f 6d 6d 61 6e 64 20 22 2e 6c 69 6e 74 20 66  command ".lint f
1d440 6b 65 79 2d 69 6e 64 65 78 65 73 22 2e 0a 2a 2f  key-indexes"..*/
1d450 0a 73 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 74  .static int lint
1d460 46 6b 65 79 49 6e 64 65 78 65 73 28 0a 20 20 53  FkeyIndexes(.  S
1d470 68 65 6c 6c 53 74 61 74 65 20 2a 70 53 74 61 74  hellState *pStat
1d480 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e,             /
1d490 2a 20 43 75 72 72 65 6e 74 20 73 68 65 6c 6c 20  * Current shell 
1d4a0 74 6f 6f 6c 20 73 74 61 74 65 20 2a 2f 0a 20 20  tool state */.  
1d4b0 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20  char **azArg,   
1d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4d0 2f 2a 20 41 72 72 61 79 20 6f 66 20 61 72 67 75  /* Array of argu
1d4e0 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
1d4f0 64 6f 74 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  dot command */. 
1d500 20 69 6e 74 20 6e 41 72 67 20 20 20 20 20 20 20   int nArg       
1d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d520 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
1d530 74 72 69 65 73 20 69 6e 20 61 7a 41 72 67 5b 5d  tries in azArg[]
1d540 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
1d550 20 2a 64 62 20 3d 20 70 53 74 61 74 65 2d 3e 64   *db = pState->d
1d560 62 3b 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61  b;       /* Data
1d570 62 61 73 65 20 68 61 6e 64 6c 65 20 74 6f 20 71  base handle to q
1d580 75 65 72 79 20 22 6d 61 69 6e 22 20 64 62 20 6f  uery "main" db o
1d590 66 20 2a 2f 0a 20 20 46 49 4c 45 20 2a 6f 75 74  f */.  FILE *out
1d5a0 20 3d 20 70 53 74 61 74 65 2d 3e 6f 75 74 3b 20   = pState->out; 
1d5b0 20 20 20 20 20 20 20 2f 2a 20 53 74 72 65 61 6d         /* Stream
1d5c0 20 74 6f 20 77 72 69 74 65 20 6e 6f 6e 2d 65 72   to write non-er
1d5d0 72 6f 72 20 6f 75 74 70 75 74 20 74 6f 20 2a 2f  ror output to */
1d5e0 0a 20 20 69 6e 74 20 62 56 65 72 62 6f 73 65 20  .  int bVerbose 
1d5f0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
1d600 20 20 20 2f 2a 20 49 66 20 2d 76 65 72 62 6f 73     /* If -verbos
1d610 65 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  e is present */.
1d620 20 20 69 6e 74 20 62 47 72 6f 75 70 42 79 50 61    int bGroupByPa
1d630 72 65 6e 74 20 3d 20 30 3b 20 20 20 20 20 20 20  rent = 0;       
1d640 20 20 2f 2a 20 49 66 20 2d 67 72 6f 75 70 62 79    /* If -groupby
1d650 70 61 72 65 6e 74 20 69 73 20 70 72 65 73 65 6e  parent is presen
1d660 74 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  t */.  int i;   
1d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d680 20 20 20 20 20 20 20 2f 2a 20 54 6f 20 69 74 65         /* To ite
1d690 72 61 74 65 20 74 68 72 6f 75 67 68 20 61 7a 41  rate through azA
1d6a0 72 67 5b 5d 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  rg[] */.  const 
1d6b0 63 68 61 72 20 2a 7a 49 6e 64 65 6e 74 20 3d 20  char *zIndent = 
1d6c0 22 22 3b 20 20 20 20 20 20 20 2f 2a 20 48 6f 77  "";       /* How
1d6d0 20 6d 75 63 68 20 74 6f 20 69 6e 64 65 6e 74 20   much to indent 
1d6e0 43 52 45 41 54 45 20 49 4e 44 45 58 20 62 79 20  CREATE INDEX by 
1d6f0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
1d720 6f 64 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ode */.  sqlite3
1d730 5f 73 74 6d 74 20 2a 70 53 71 6c 20 3d 20 30 3b  _stmt *pSql = 0;
1d740 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
1d750 69 6c 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20  iled version of 
1d760 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 62 65  SQL statement be
1d770 6c 6f 77 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a  low */..  /*.  *
1d780 2a 20 54 68 69 73 20 53 45 4c 45 43 54 20 73 74  * This SELECT st
1d790 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 20  atement returns 
1d7a0 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68  one row for each
1d7b0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
1d7c0 73 74 72 61 69 6e 74 0a 20 20 2a 2a 20 69 6e 20  straint.  ** in 
1d7d0 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68  the schema of th
1d7e0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  e main database.
1d7f0 20 54 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   The column valu
1d800 65 73 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a  es are:.  **.  *
1d810 2a 20 30 2e 20 54 68 65 20 74 65 78 74 20 6f 66  * 0. The text of
1d820 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
1d830 74 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0a 20 20  t similar to:.  
1d840 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20 22 45 58  **.  **      "EX
1d850 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
1d860 20 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 63   SELECT 1 FROM c
1d870 68 69 6c 64 5f 74 61 62 6c 65 20 57 48 45 52 45  hild_table WHERE
1d880 20 63 68 69 6c 64 5f 6b 65 79 3d 3f 22 0a 20 20   child_key=?".  
1d890 2a 2a 0a 20 20 2a 2a 20 20 20 20 54 68 69 73 20  **.  **    This 
1d8a0 53 45 4c 45 43 54 20 69 73 20 73 69 6d 69 6c 61  SELECT is simila
1d8b0 72 20 74 6f 20 74 68 65 20 6f 6e 65 20 74 68 61  r to the one tha
1d8c0 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  t the foreign ke
1d8d0 79 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ys implementatio
1d8e0 6e 0a 20 20 2a 2a 20 20 20 20 6e 65 65 64 73 20  n.  **    needs 
1d8f0 74 6f 20 72 75 6e 20 69 6e 74 65 72 6e 61 6c 6c  to run internall
1d900 79 20 6f 6e 20 63 68 69 6c 64 20 74 61 62 6c 65  y on child table
1d910 73 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 61  s. If there is a
1d920 6e 20 69 6e 64 65 78 20 74 68 61 74 20 63 61 6e  n index that can
1d930 0a 20 20 2a 2a 20 20 20 20 62 65 20 75 73 65 64  .  **    be used
1d940 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 74 68 69   to optimize thi
1d950 73 20 71 75 65 72 79 2c 20 74 68 65 6e 20 69 74  s query, then it
1d960 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
1d970 64 20 62 79 20 74 68 65 20 46 4b 0a 20 20 2a 2a  d by the FK.  **
1d980 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69      implementati
1d990 6f 6e 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 44  on to optimize D
1d9a0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
1d9b0 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 20 74 68  statements on th
1d9c0 65 20 70 61 72 65 6e 74 0a 20 20 2a 2a 20 20 20  e parent.  **   
1d9d0 20 74 61 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a   table..  **.  *
1d9e0 2a 20 31 2e 20 41 20 47 4c 4f 42 20 70 61 74 74  * 1. A GLOB patt
1d9f0 65 72 6e 20 73 75 69 74 61 62 6c 65 20 66 6f 72  ern suitable for
1da00 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62   sqlite3_strglob
1da10 28 29 2e 20 49 66 20 74 68 65 20 70 6c 61 6e 20  (). If the plan 
1da20 6f 75 74 70 75 74 20 62 79 0a 20 20 2a 2a 20 20  output by.  **  
1da30 20 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55    the EXPLAIN QU
1da40 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e 64  ERY PLAN command
1da50 20 6d 61 74 63 68 65 73 20 74 68 69 73 20 70 61   matches this pa
1da60 74 74 65 72 6e 2c 20 74 68 65 6e 20 74 68 65 20  ttern, then the 
1da70 73 63 68 65 6d 61 0a 20 20 2a 2a 20 20 20 20 63  schema.  **    c
1da80 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e 64 65 78  ontains an index
1da90 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
1daa0 64 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 74 68  d to optimize th
1dab0 65 20 71 75 65 72 79 2e 0a 20 20 2a 2a 0a 20 20  e query..  **.  
1dac0 2a 2a 20 32 2e 20 48 75 6d 61 6e 20 72 65 61 64  ** 2. Human read
1dad0 61 62 6c 65 20 74 65 78 74 20 74 68 61 74 20 64  able text that d
1dae0 65 73 63 72 69 62 65 73 20 74 68 65 20 63 68 69  escribes the chi
1daf0 6c 64 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ld table and col
1db00 75 6d 6e 73 2e 20 65 2e 67 2e 0a 20 20 2a 2a 0a  umns. e.g..  **.
1db10 20 20 2a 2a 20 20 20 20 20 20 20 22 63 68 69 6c    **       "chil
1db20 64 5f 74 61 62 6c 65 28 63 68 69 6c 64 5f 6b 65  d_table(child_ke
1db30 79 31 2c 20 63 68 69 6c 64 5f 6b 65 79 32 29 22  y1, child_key2)"
1db40 0a 20 20 2a 2a 0a 20 20 2a 2a 20 33 2e 20 48 75  .  **.  ** 3. Hu
1db50 6d 61 6e 20 72 65 61 64 61 62 6c 65 20 74 65 78  man readable tex
1db60 74 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  t that describes
1db70 20 74 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c   the parent tabl
1db80 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 2e 20 65  e and columns. e
1db90 2e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  .g..  **.  **   
1dba0 20 20 20 20 22 70 61 72 65 6e 74 5f 74 61 62 6c      "parent_tabl
1dbb0 65 28 70 61 72 65 6e 74 5f 6b 65 79 31 2c 20 70  e(parent_key1, p
1dbc0 61 72 65 6e 74 5f 6b 65 79 32 29 22 0a 20 20 2a  arent_key2)".  *
1dbd0 2a 0a 20 20 2a 2a 20 34 2e 20 41 20 66 75 6c 6c  *.  ** 4. A full
1dbe0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74   CREATE INDEX st
1dbf0 61 74 65 6d 65 6e 74 20 66 6f 72 20 61 6e 20 69  atement for an i
1dc00 6e 64 65 78 20 74 68 61 74 20 63 6f 75 6c 64 20  ndex that could 
1dc10 62 65 20 75 73 65 64 20 74 6f 0a 20 20 2a 2a 20  be used to.  ** 
1dc20 20 20 20 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45     optimize DELE
1dc30 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  TE or UPDATE sta
1dc40 74 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 70  tements on the p
1dc50 61 72 65 6e 74 20 74 61 62 6c 65 2e 20 65 2e 67  arent table. e.g
1dc60 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20  ..  **.  **     
1dc70 20 20 22 43 52 45 41 54 45 20 49 4e 44 45 58 20    "CREATE INDEX 
1dc80 63 68 69 6c 64 5f 74 61 62 6c 65 5f 63 68 69 6c  child_table_chil
1dc90 64 5f 6b 65 79 20 4f 4e 20 63 68 69 6c 64 5f 74  d_key ON child_t
1dca0 61 62 6c 65 28 63 68 69 6c 64 5f 6b 65 79 29 22  able(child_key)"
1dcb0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 35 2e 20 54 68  .  **.  ** 5. Th
1dcc0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 61  e name of the pa
1dcd0 72 65 6e 74 20 74 61 62 6c 65 2e 0a 20 20 2a 2a  rent table..  **
1dce0 0a 20 20 2a 2a 20 54 68 65 73 65 20 73 69 78 20  .  ** These six 
1dcf0 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20  values are used 
1dd00 62 79 20 74 68 65 20 43 20 6c 6f 67 69 63 20 62  by the C logic b
1dd10 65 6c 6f 77 20 74 6f 20 67 65 6e 65 72 61 74 65  elow to generate
1dd20 20 74 68 65 20 72 65 70 6f 72 74 2e 0a 20 20 2a   the report..  *
1dd30 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1dd40 7a 53 71 6c 20 3d 0a 20 20 22 53 45 4c 45 43 54  zSql =.  "SELECT
1dd50 20 22 0a 20 20 20 20 22 20 20 20 20 20 27 45 58   ".    "     'EX
1dd60 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
1dd70 20 53 45 4c 45 43 54 20 31 20 46 52 4f 4d 20 27   SELECT 1 FROM '
1dd80 20 7c 7c 20 71 75 6f 74 65 28 73 2e 6e 61 6d 65   || quote(s.name
1dd90 29 20 7c 7c 20 27 20 57 48 45 52 45 20 27 22 0a  ) || ' WHERE '".
1dda0 20 20 20 20 22 20 20 7c 7c 20 67 72 6f 75 70 5f      "  || group_
1ddb0 63 6f 6e 63 61 74 28 71 75 6f 74 65 28 73 2e 6e  concat(quote(s.n
1ddc0 61 6d 65 29 20 7c 7c 20 27 2e 27 20 7c 7c 20 71  ame) || '.' || q
1ddd0 75 6f 74 65 28 66 2e 5b 66 72 6f 6d 5d 29 20 7c  uote(f.[from]) |
1dde0 7c 20 27 3d 3f 27 20 22 0a 20 20 20 20 22 20 20  | '=?' ".    "  
1ddf0 7c 7c 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 66 2e 5b 74 61 62 6c 65 5d 2c 20       f.[table], 
1de20 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d 2c  COALESCE(f.[to],
1de30 20 70 2e 5b 6e 61 6d 65 5d 29 2c 20 73 2e 6e 61   p.[name]), s.na
1de40 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d 29 2c 27 20  me, f.[from]),' 
1de50 41 4e 44 20 27 29 22 0a 20 20 20 20 22 2c 20 22  AND ')".    ", "
1de60 0a 20 20 20 20 22 20 20 20 20 20 27 53 45 41 52  .    "     'SEAR
1de70 43 48 20 54 41 42 4c 45 20 27 20 7c 7c 20 73 2e  CH TABLE ' || s.
1de80 6e 61 6d 65 20 7c 7c 20 27 20 55 53 49 4e 47 20  name || ' USING 
1de90 43 4f 56 45 52 49 4e 47 20 49 4e 44 45 58 2a 28  COVERING INDEX*(
1dea0 27 22 0a 20 20 20 20 22 20 20 7c 7c 20 67 72 6f  '".    "  || gro
1deb0 75 70 5f 63 6f 6e 63 61 74 28 27 2a 3d 3f 27 2c  up_concat('*=?',
1dec0 20 27 20 41 4e 44 20 27 29 20 7c 7c 20 27 29 27   ' AND ') || ')'
1ded0 22 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20 22  ".    ", ".    "
1dee0 20 20 20 20 20 73 2e 6e 61 6d 65 20 20 7c 7c 20       s.name  || 
1def0 27 28 27 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e  '(' || group_con
1df00 63 61 74 28 66 2e 5b 66 72 6f 6d 5d 2c 20 20 27  cat(f.[from],  '
1df10 2c 20 27 29 20 7c 7c 20 27 29 27 22 0a 20 20 20  , ') || ')'".   
1df20 20 22 2c 20 22 0a 20 20 20 20 22 20 20 20 20 20   ", ".    "     
1df30 66 2e 5b 74 61 62 6c 65 5d 20 7c 7c 20 27 28 27  f.[table] || '('
1df40 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74   || group_concat
1df50 28 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d  (COALESCE(f.[to]
1df60 2c 20 70 2e 5b 6e 61 6d 65 5d 29 29 20 7c 7c 20  , p.[name])) || 
1df70 27 29 27 22 0a 20 20 20 20 22 2c 20 22 0a 20 20  ')'".    ", ".  
1df80 20 20 22 20 20 20 20 20 27 43 52 45 41 54 45 20    "     'CREATE 
1df90 49 4e 44 45 58 20 27 20 7c 7c 20 71 75 6f 74 65  INDEX ' || quote
1dfa0 28 73 2e 6e 61 6d 65 20 7c 7c 27 5f 27 7c 7c 20  (s.name ||'_'|| 
1dfb0 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 66 2e 5b  group_concat(f.[
1dfc0 66 72 6f 6d 5d 2c 20 27 5f 27 29 29 22 0a 20 20  from], '_'))".  
1dfd0 20 20 22 20 20 7c 7c 20 27 20 4f 4e 20 27 20 7c    "  || ' ON ' |
1dfe0 7c 20 71 75 6f 74 65 28 73 2e 6e 61 6d 65 29 20  | quote(s.name) 
1dff0 7c 7c 20 27 28 27 22 0a 20 20 20 20 22 20 20 7c  || '('".    "  |
1e000 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 71  | group_concat(q
1e010 75 6f 74 65 28 66 2e 5b 66 72 6f 6d 5d 29 20 7c  uote(f.[from]) |
1e020 7c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20 20  |".    "        
1e030 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61  fkey_collate_cla
1e040 75 73 65 28 22 0a 20 20 20 20 22 20 20 20 20 20  use(".    "     
1e050 20 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 2c 20       f.[table], 
1e060 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d 2c  COALESCE(f.[to],
1e070 20 70 2e 5b 6e 61 6d 65 5d 29 2c 20 73 2e 6e 61   p.[name]), s.na
1e080 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d 29 2c 20 27  me, f.[from]), '
1e090 2c 20 27 29 22 0a 20 20 20 20 22 20 20 7c 7c 20  , ')".    "  || 
1e0a0 27 29 3b 27 22 0a 20 20 20 20 22 2c 20 22 0a 20  ');'".    ", ". 
1e0b0 20 20 20 22 20 20 20 20 20 66 2e 5b 74 61 62 6c     "     f.[tabl
1e0c0 65 5d 20 22 0a 20 20 20 20 22 46 52 4f 4d 20 73  e] ".    "FROM s
1e0d0 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 41 53 20  qlite_master AS 
1e0e0 73 2c 20 70 72 61 67 6d 61 5f 66 6f 72 65 69 67  s, pragma_foreig
1e0f0 6e 5f 6b 65 79 5f 6c 69 73 74 28 73 2e 6e 61 6d  n_key_list(s.nam
1e100 65 29 20 41 53 20 66 20 22 0a 20 20 20 20 22 4c  e) AS f ".    "L
1e110 45 46 54 20 4a 4f 49 4e 20 70 72 61 67 6d 61 5f  EFT JOIN pragma_
1e120 74 61 62 6c 65 5f 69 6e 66 6f 20 41 53 20 70 20  table_info AS p 
1e130 4f 4e 20 28 70 6b 2d 31 3d 73 65 71 20 41 4e 44  ON (pk-1=seq AND
1e140 20 70 2e 61 72 67 3d 66 2e 5b 74 61 62 6c 65 5d   p.arg=f.[table]
1e150 29 20 22 0a 20 20 20 20 22 47 52 4f 55 50 20 42  ) ".    "GROUP B
1e160 59 20 73 2e 6e 61 6d 65 2c 20 66 2e 69 64 20 22  Y s.name, f.id "
1e170 0a 20 20 20 20 22 4f 52 44 45 52 20 42 59 20 28  .    "ORDER BY (
1e180 43 41 53 45 20 57 48 45 4e 20 3f 20 54 48 45 4e  CASE WHEN ? THEN
1e190 20 66 2e 5b 74 61 62 6c 65 5d 20 45 4c 53 45 20   f.[table] ELSE 
1e1a0 73 2e 6e 61 6d 65 20 45 4e 44 29 22 0a 20 20 3b  s.name END)".  ;
1e1b0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1e1c0 47 6c 6f 62 49 50 4b 20 3d 20 22 53 45 41 52 43  GlobIPK = "SEARC
1e1d0 48 20 54 41 42 4c 45 20 2a 20 55 53 49 4e 47 20  H TABLE * USING 
1e1e0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1e1f0 4b 45 59 20 28 72 6f 77 69 64 3d 3f 29 22 3b 0a  KEY (rowid=?)";.
1e200 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 6e 41  .  for(i=2; i<nA
1e210 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 6e  rg; i++){.    in
1e220 74 20 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65  t n = (int)strle
1e230 6e 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  n(azArg[i]);.   
1e240 20 69 66 28 20 6e 3e 31 20 26 26 20 73 71 6c 69   if( n>1 && sqli
1e250 74 65 33 5f 73 74 72 6e 69 63 6d 70 28 22 2d 76  te3_strnicmp("-v
1e260 65 72 62 6f 73 65 22 2c 20 61 7a 41 72 67 5b 69  erbose", azArg[i
1e270 5d 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ], n)==0 ){.    
1e280 20 20 62 56 65 72 62 6f 73 65 20 3d 20 31 3b 0a    bVerbose = 1;.
1e290 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69      }.    else i
1e2a0 66 28 20 6e 3e 31 20 26 26 20 73 71 6c 69 74 65  f( n>1 && sqlite
1e2b0 33 5f 73 74 72 6e 69 63 6d 70 28 22 2d 67 72 6f  3_strnicmp("-gro
1e2c0 75 70 62 79 70 61 72 65 6e 74 22 2c 20 61 7a 41  upbyparent", azA
1e2d0 72 67 5b 69 5d 2c 20 6e 29 3d 3d 30 20 29 7b 0a  rg[i], n)==0 ){.
1e2e0 20 20 20 20 20 20 62 47 72 6f 75 70 42 79 50 61        bGroupByPa
1e2f0 72 65 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  rent = 1;.      
1e300 7a 49 6e 64 65 6e 74 20 3d 20 22 20 20 20 20 22  zIndent = "    "
1e310 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65  ;.    }.    else
1e320 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
1e330 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
1e340 65 3a 20 25 73 20 25 73 20 3f 2d 76 65 72 62 6f  e: %s %s ?-verbo
1e350 73 65 3f 20 3f 2d 67 72 6f 75 70 62 79 70 61 72  se? ?-groupbypar
1e360 65 6e 74 3f 5c 6e 22 2c 0a 20 20 20 20 20 20 20  ent?\n",.       
1e370 20 20 20 61 7a 41 72 67 5b 30 5d 2c 20 61 7a 41     azArg[0], azA
1e380 72 67 5b 31 5d 0a 20 20 20 20 20 20 29 3b 0a 20  rg[1].      );. 
1e390 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1e3a0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  TE_ERROR;.    }.
1e3b0 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74    }..  /* Regist
1e3c0 65 72 20 74 68 65 20 66 6b 65 79 5f 63 6f 6c 6c  er the fkey_coll
1e3d0 61 74 65 5f 63 6c 61 75 73 65 28 29 20 53 51 4c  ate_clause() SQL
1e3e0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 72   function */.  r
1e3f0 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
1e400 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
1e410 22 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c  "fkey_collate_cl
1e420 61 75 73 65 22 2c 20 34 2c 20 53 51 4c 49 54 45  ause", 4, SQLITE
1e430 5f 55 54 46 38 2c 0a 20 20 20 20 20 20 30 2c 20  _UTF8,.      0, 
1e440 73 68 65 6c 6c 46 6b 65 79 43 6f 6c 6c 61 74 65  shellFkeyCollate
1e450 43 6c 61 75 73 65 2c 20 30 2c 20 30 0a 20 20 29  Clause, 0, 0.  )
1e460 3b 0a 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  ;...  if( rc==SQ
1e470 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
1e480 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
1e490 61 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c  are_v2(db, zSql,
1e4a0 20 2d 31 2c 20 26 70 53 71 6c 2c 20 30 29 3b 0a   -1, &pSql, 0);.
1e4b0 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
1e4c0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
1e4d0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
1e4e0 70 53 71 6c 2c 20 31 2c 20 62 47 72 6f 75 70 42  pSql, 1, bGroupB
1e4f0 79 50 61 72 65 6e 74 29 3b 0a 20 20 7d 0a 0a 20  yParent);.  }.. 
1e500 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1e510 4f 4b 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63  OK ){.    int rc
1e520 32 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 50 72  2;.    char *zPr
1e530 65 76 20 3d 20 30 3b 0a 20 20 20 20 77 68 69 6c  ev = 0;.    whil
1e540 65 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73  e( SQLITE_ROW==s
1e550 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 71 6c  qlite3_step(pSql
1e560 29 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 72  ) ){.      int r
1e570 65 73 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 73  es = -1;.      s
1e580 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 45 78  qlite3_stmt *pEx
1e590 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20 20 20  plain = 0;.     
1e5a0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 51   const char *zEQ
1e5b0 50 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  P = (const char*
1e5c0 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
1e5d0 74 65 78 74 28 70 53 71 6c 2c 20 30 29 3b 0a 20  text(pSql, 0);. 
1e5e0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
1e5f0 2a 7a 47 6c 6f 62 20 3d 20 28 63 6f 6e 73 74 20  *zGlob = (const 
1e600 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
1e610 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20  lumn_text(pSql, 
1e620 31 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  1);.      const 
1e630 63 68 61 72 20 2a 7a 46 72 6f 6d 20 3d 20 28 63  char *zFrom = (c
1e640 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
1e650 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
1e660 53 71 6c 2c 20 32 29 3b 0a 20 20 20 20 20 20 63  Sql, 2);.      c
1e670 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 72 67  onst char *zTarg
1e680 65 74 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  et = (const char
1e690 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
1e6a0 5f 74 65 78 74 28 70 53 71 6c 2c 20 33 29 3b 0a  _text(pSql, 3);.
1e6b0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
1e6c0 20 2a 7a 43 49 20 3d 20 28 63 6f 6e 73 74 20 63   *zCI = (const c
1e6d0 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
1e6e0 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 34  umn_text(pSql, 4
1e6f0 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  );.      const c
1e700 68 61 72 20 2a 7a 50 61 72 65 6e 74 20 3d 20 28  har *zParent = (
1e710 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
1e720 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
1e730 70 53 71 6c 2c 20 35 29 3b 0a 0a 20 20 20 20 20  pSql, 5);..     
1e740 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
1e750 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 45 51  epare_v2(db, zEQ
1e760 50 2c 20 2d 31 2c 20 26 70 45 78 70 6c 61 69 6e  P, -1, &pExplain
1e770 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
1e780 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1e790 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28  break;.      if(
1e7a0 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c   SQLITE_ROW==sql
1e7b0 69 74 65 33 5f 73 74 65 70 28 70 45 78 70 6c 61  ite3_step(pExpla
1e7c0 69 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20 63  in) ){.        c
1e7d0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 6c 61 6e  onst char *zPlan
1e7e0 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
1e7f0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
1e800 65 78 74 28 70 45 78 70 6c 61 69 6e 2c 20 33 29  ext(pExplain, 3)
1e810 3b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  ;.        res = 
1e820 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  (.              
1e830 30 3d 3d 73 71 6c 69 74 65 33 5f 73 74 72 67 6c  0==sqlite3_strgl
1e840 6f 62 28 7a 47 6c 6f 62 2c 20 7a 50 6c 61 6e 29  ob(zGlob, zPlan)
1e850 0a 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 30  .           || 0
1e860 3d 3d 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f  ==sqlite3_strglo
1e870 62 28 7a 47 6c 6f 62 49 50 4b 2c 20 7a 50 6c 61  b(zGlobIPK, zPla
1e880 6e 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20  n).        );.  
1e890 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20 3d      }.      rc =
1e8a0 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
1e8b0 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20  e(pExplain);.   
1e8c0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1e8d0 45 5f 4f 4b 20 29 20 62 72 65 61 6b 3b 0a 0a 20  E_OK ) break;.. 
1e8e0 20 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 29       if( res<0 )
1e8f0 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
1e900 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1e910 72 6f 72 3a 20 69 6e 74 65 72 6e 61 6c 20 65 72  ror: internal er
1e920 72 6f 72 22 29 3b 0a 20 20 20 20 20 20 20 20 62  ror");.        b
1e930 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  reak;.      }els
1e940 65 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 62  e{.        if( b
1e950 47 72 6f 75 70 42 79 50 61 72 65 6e 74 0a 20 20  GroupByParent.  
1e960 20 20 20 20 20 20 26 26 20 28 62 56 65 72 62 6f        && (bVerbo
1e970 73 65 20 7c 7c 20 72 65 73 3d 3d 30 29 0a 20 20  se || res==0).  
1e980 20 20 20 20 20 20 26 26 20 28 7a 50 72 65 76 3d        && (zPrev=
1e990 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74  =0 || sqlite3_st
1e9a0 72 69 63 6d 70 28 7a 50 61 72 65 6e 74 2c 20 7a  ricmp(zParent, z
1e9b0 50 72 65 76 29 29 0a 20 20 20 20 20 20 20 20 29  Prev)).        )
1e9c0 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f  {.          raw_
1e9d0 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 2d 2d 20  printf(out, "-- 
1e9e0 50 61 72 65 6e 74 20 74 61 62 6c 65 20 25 73 5c  Parent table %s\
1e9f0 6e 22 2c 20 7a 50 61 72 65 6e 74 29 3b 0a 20 20  n", zParent);.  
1ea00 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1ea10 66 72 65 65 28 7a 50 72 65 76 29 3b 0a 20 20 20  free(zPrev);.   
1ea20 20 20 20 20 20 20 20 7a 50 72 65 76 20 3d 20 73         zPrev = s
1ea30 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1ea40 25 73 22 2c 20 7a 50 61 72 65 6e 74 29 3b 0a 20  %s", zParent);. 
1ea50 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
1ea60 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
1ea70 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
1ea80 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 25 73 20  intf(out, "%s%s 
1ea90 2d 2d 3e 20 25 73 5c 6e 22 2c 20 7a 49 6e 64 65  --> %s\n", zInde
1eaa0 6e 74 2c 20 7a 43 49 2c 20 7a 54 61 72 67 65 74  nt, zCI, zTarget
1eab0 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
1eac0 20 69 66 28 20 62 56 65 72 62 6f 73 65 20 29 7b   if( bVerbose ){
1ead0 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
1eae0 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 2f 2a  rintf(out, "%s/*
1eaf0 20 6e 6f 20 65 78 74 72 61 20 69 6e 64 65 78 65   no extra indexe
1eb00 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 25  s required for %
1eb10 73 20 2d 3e 20 25 73 20 2a 2f 5c 6e 22 2c 0a 20  s -> %s */\n",. 
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 49 6e               zIn
1eb30 64 65 6e 74 2c 20 7a 46 72 6f 6d 2c 20 7a 54 61  dent, zFrom, zTa
1eb40 72 67 65 74 0a 20 20 20 20 20 20 20 20 20 20 29  rget.          )
1eb50 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1eb60 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
1eb70 6c 69 74 65 33 5f 66 72 65 65 28 7a 50 72 65 76  lite3_free(zPrev
1eb80 29 3b 0a 0a 20 20 20 20 69 66 28 20 72 63 21 3d  );..    if( rc!=
1eb90 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1eba0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
1ebb0 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73 71  derr, "%s\n", sq
1ebc0 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29  lite3_errmsg(db)
1ebd0 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 63  );.    }..    rc
1ebe0 32 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  2 = sqlite3_fina
1ebf0 6c 69 7a 65 28 70 53 71 6c 29 3b 0a 20 20 20 20  lize(pSql);.    
1ec00 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1ec10 4b 20 26 26 20 72 63 32 21 3d 53 51 4c 49 54 45  K && rc2!=SQLITE
1ec20 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
1ec30 3d 20 72 63 32 3b 0a 20 20 20 20 20 20 72 61 77  = rc2;.      raw
1ec40 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1ec50 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f  "%s\n", sqlite3_
1ec60 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20 20  errmsg(db));.   
1ec70 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1ec80 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
1ec90 72 2c 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74  r, "%s\n", sqlit
1eca0 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0a  e3_errmsg(db));.
1ecb0 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 72 63    }..  return rc
1ecc0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65  ;.}../*.** Imple
1ecd0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 2e 6c  mentation of ".l
1ece0 69 6e 74 22 20 64 6f 74 20 63 6f 6d 6d 61 6e 64  int" dot command
1ecf0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1ed00 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61 6e 64 28 0a  lintDotCommand(.
1ed10 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 53    ShellState *pS
1ed20 74 61 74 65 2c 20 20 20 20 20 20 20 20 20 20 20  tate,           
1ed30 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 68 65    /* Current she
1ed40 6c 6c 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a 2f  ll tool state */
1ed50 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c  .  char **azArg,
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed70 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 61     /* Array of a
1ed80 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20  rguments passed 
1ed90 74 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20 2a  to dot command *
1eda0 2f 0a 20 20 69 6e 74 20 6e 41 72 67 20 20 20 20  /.  int nArg    
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edc0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1edd0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 41 72   entries in azAr
1ede0 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  g[] */.){.  int 
1edf0 6e 3b 0a 20 20 6e 20 3d 20 28 6e 41 72 67 3e 3d  n;.  n = (nArg>=
1ee00 32 20 3f 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  2 ? (int)strlen(
1ee10 61 7a 41 72 67 5b 31 5d 29 20 3a 20 30 29 3b 0a  azArg[1]) : 0);.
1ee20 20 20 69 66 28 20 6e 3c 31 20 7c 7c 20 73 71 6c    if( n<1 || sql
1ee30 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28 61 7a  ite3_strnicmp(az
1ee40 41 72 67 5b 31 5d 2c 20 22 66 6b 65 79 2d 69 6e  Arg[1], "fkey-in
1ee50 64 65 78 65 73 22 2c 20 6e 29 20 29 20 67 6f 74  dexes", n) ) got
1ee60 6f 20 75 73 61 67 65 3b 0a 20 20 72 65 74 75 72  o usage;.  retur
1ee70 6e 20 6c 69 6e 74 46 6b 65 79 49 6e 64 65 78 65  n lintFkeyIndexe
1ee80 73 28 70 53 74 61 74 65 2c 20 61 7a 41 72 67 2c  s(pState, azArg,
1ee90 20 6e 41 72 67 29 3b 0a 0a 20 75 73 61 67 65 3a   nArg);.. usage:
1eea0 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74  .  raw_printf(st
1eeb0 64 65 72 72 2c 20 22 55 73 61 67 65 20 25 73 20  derr, "Usage %s 
1eec0 73 75 62 2d 63 6f 6d 6d 61 6e 64 20 3f 73 77 69  sub-command ?swi
1eed0 74 63 68 65 73 2e 2e 2e 3f 5c 6e 22 2c 20 61 7a  tches...?\n", az
1eee0 41 72 67 5b 30 5d 29 3b 0a 20 20 72 61 77 5f 70  Arg[0]);.  raw_p
1eef0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 57  rintf(stderr, "W
1ef00 68 65 72 65 20 73 75 62 2d 63 6f 6d 6d 61 6e 64  here sub-command
1ef10 73 20 61 72 65 3a 5c 6e 22 29 3b 0a 20 20 72 61  s are:\n");.  ra
1ef20 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1ef30 20 22 20 20 20 20 66 6b 65 79 2d 69 6e 64 65 78   "    fkey-index
1ef40 65 73 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72 6e  es\n");.  return
1ef50 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 7d   SQLITE_ERROR;.}
1ef60 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 68  ..static void sh
1ef70 65 6c 6c 50 72 65 70 61 72 65 28 0a 20 20 53 68  ellPrepare(.  Sh
1ef80 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 0a 20 20  ellState *p, .  
1ef90 69 6e 74 20 2a 70 52 63 2c 20 0a 20 20 63 6f 6e  int *pRc, .  con
1efa0 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 0a  st char *zSql, .
1efb0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1efc0 2a 70 70 53 74 6d 74 0a 29 7b 0a 20 20 2a 70 70  *ppStmt.){.  *pp
1efd0 53 74 6d 74 20 3d 20 30 3b 0a 20 20 69 66 28 20  Stmt = 0;.  if( 
1efe0 2a 70 52 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  *pRc==SQLITE_OK 
1eff0 29 7b 0a 20 20 20 20 69 6e 74 20 72 63 20 3d 20  ){.    int rc = 
1f000 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
1f010 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
1f020 2d 31 2c 20 70 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, ppStmt, 0);.
1f030 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1f040 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
1f050 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1f060 2c 20 22 73 71 6c 20 65 72 72 6f 72 3a 20 25 73  , "sql error: %s
1f070 20 28 25 64 29 5c 6e 22 2c 20 0a 20 20 20 20 20   (%d)\n", .     
1f080 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72       sqlite3_err
1f090 6d 73 67 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69  msg(p->db), sqli
1f0a0 74 65 33 5f 65 72 72 63 6f 64 65 28 70 2d 3e 64  te3_errcode(p->d
1f0b0 62 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  b).      );.    
1f0c0 20 20 2a 70 52 63 20 3d 20 72 63 3b 0a 20 20 20    *pRc = rc;.   
1f0d0 20 7d 0a 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63   }.  }.}..static
1f0e0 20 76 6f 69 64 20 73 68 65 6c 6c 46 69 6e 61 6c   void shellFinal
1f0f0 69 7a 65 28 0a 20 20 69 6e 74 20 2a 70 52 63 2c  ize(.  int *pRc,
1f100 20 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   .  sqlite3_stmt
1f110 20 2a 70 53 74 6d 74 0a 29 7b 0a 20 20 69 66 28   *pStmt.){.  if(
1f120 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 73 71   pStmt ){.    sq
1f130 6c 69 74 65 33 20 2a 64 62 20 3d 20 73 71 6c 69  lite3 *db = sqli
1f140 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65 28 70 53  te3_db_handle(pS
1f150 74 6d 74 29 3b 0a 20 20 20 20 69 6e 74 20 72 63  tmt);.    int rc
1f160 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c   = sqlite3_final
1f170 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  ize(pStmt);.    
1f180 69 66 28 20 2a 70 52 63 3d 3d 53 51 4c 49 54 45  if( *pRc==SQLITE
1f190 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 66 28  _OK ){.      if(
1f1a0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1f1b0 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
1f1c0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 51  intf(stderr, "SQ
1f1d0 4c 20 65 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20  L error: %s\n", 
1f1e0 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64  sqlite3_errmsg(d
1f1f0 62 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  b));.      }.   
1f200 20 20 20 2a 70 52 63 20 3d 20 72 63 3b 0a 20 20     *pRc = rc;.  
1f210 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 73 74 61 74 69    }.  }.}..stati
1f220 63 20 76 6f 69 64 20 73 68 65 6c 6c 52 65 73 65  c void shellRese
1f230 74 28 0a 20 20 69 6e 74 20 2a 70 52 63 2c 20 0a  t(.  int *pRc, .
1f240 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1f250 70 53 74 6d 74 0a 29 7b 0a 20 20 69 6e 74 20 72  pStmt.){.  int r
1f260 63 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65  c = sqlite3_rese
1f270 74 28 70 53 74 6d 74 29 3b 0a 20 20 69 66 28 20  t(pStmt);.  if( 
1f280 2a 70 52 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  *pRc==SQLITE_OK 
1f290 29 20 2a 70 52 63 20 3d 20 72 63 3b 0a 7d 0a 0a  ) *pRc = rc;.}..
1f2a0 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61  /*.** Implementa
1f2b0 74 69 6f 6e 20 6f 66 20 2e 61 72 20 22 65 58 74  tion of .ar "eXt
1f2c0 72 61 63 74 22 20 63 6f 6d 6d 61 6e 64 2e 20 0a  ract" command. .
1f2d0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 61 72  */.static int ar
1f2e0 45 78 74 72 61 63 74 43 6f 6d 6d 61 6e 64 28 53  ExtractCommand(S
1f2f0 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 69 6e  hellState *p, in
1f300 74 20 62 56 65 72 62 6f 73 65 29 7b 0a 20 20 63  t bVerbose){.  c
1f310 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 31  onst char *zSql1
1f320 20 3d 20 0a 20 20 20 20 22 53 45 4c 45 43 54 20   = .    "SELECT 
1f330 6e 61 6d 65 2c 20 77 72 69 74 65 66 69 6c 65 28  name, writefile(
1f340 6e 61 6d 65 2c 20 22 0a 20 20 20 20 22 43 41 53  name, ".    "CAS
1f350 45 20 57 48 45 4e 20 28 64 61 74 61 20 41 4e 44  E WHEN (data AND
1f360 20 73 7a 3e 3d 30 20 41 4e 44 20 73 7a 21 3d 6c   sz>=0 AND sz!=l
1f370 65 6e 67 74 68 28 64 61 74 61 29 29 20 54 48 45  ength(data)) THE
1f380 4e 20 75 6e 63 6f 6d 70 72 65 73 73 28 64 61 74  N uncompress(dat
1f390 61 29 20 22 0a 20 20 20 20 22 20 20 20 45 4c 53  a) ".    "   ELS
1f3a0 45 20 64 61 74 61 20 45 4e 44 2c 20 22 0a 20 20  E data END, ".  
1f3b0 20 20 22 6d 6f 64 65 29 20 46 52 4f 4d 20 73 71    "mode) FROM sq
1f3c0 6c 61 72 22 3b 0a 20 20 63 6f 6e 73 74 20 63 68  lar";.  const ch
1f3d0 61 72 20 2a 7a 53 71 6c 32 20 3d 20 22 53 45 4c  ar *zSql2 = "SEL
1f3e0 45 43 54 20 6e 61 6d 65 2c 20 6d 74 69 6d 65 20  ECT name, mtime 
1f3f0 46 52 4f 4d 20 73 71 6c 61 72 22 3b 20 0a 0a 20  FROM sqlar"; .. 
1f400 20 73 74 72 75 63 74 20 74 69 6d 65 73 70 65 63   struct timespec
1f410 20 74 69 6d 65 73 5b 32 5d 3b 0a 20 20 73 71 6c   times[2];.  sql
1f420 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 71 6c 20  ite3_stmt *pSql 
1f430 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20  = 0;.  int rc = 
1f440 53 51 4c 49 54 45 5f 4f 4b 3b 0a 0a 20 20 6d 65  SQLITE_OK;..  me
1f450 6d 73 65 74 28 74 69 6d 65 73 2c 20 30 2c 20 73  mset(times, 0, s
1f460 69 7a 65 6f 66 28 74 69 6d 65 73 29 29 3b 0a 20  izeof(times));. 
1f470 20 74 69 6d 65 73 5b 30 5d 2e 74 76 5f 73 65 63   times[0].tv_sec
1f480 20 3d 20 74 69 6d 65 28 30 29 3b 0a 0a 20 20 73   = time(0);..  s
1f490 68 65 6c 6c 50 72 65 70 61 72 65 28 70 2c 20 26  hellPrepare(p, &
1f4a0 72 63 2c 20 7a 53 71 6c 31 2c 20 26 70 53 71 6c  rc, zSql1, &pSql
1f4b0 29 3b 0a 20 20 77 68 69 6c 65 28 20 72 63 3d 3d  );.  while( rc==
1f4c0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 53 51 4c  SQLITE_OK && SQL
1f4d0 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33  ITE_ROW==sqlite3
1f4e0 5f 73 74 65 70 28 70 53 71 6c 29 20 29 7b 0a 20  _step(pSql) ){. 
1f4f0 20 20 20 69 66 28 20 62 56 65 72 62 6f 73 65 20     if( bVerbose 
1f500 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
1f510 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 73 5c  ntf(stdout, "%s\
1f520 6e 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  n", sqlite3_colu
1f530 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 30 29  mn_text(pSql, 0)
1f540 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  );.    }.  }.  s
1f550 68 65 6c 6c 46 69 6e 61 6c 69 7a 65 28 26 72 63  hellFinalize(&rc
1f560 2c 20 70 53 71 6c 29 3b 0a 0a 20 20 73 68 65 6c  , pSql);..  shel
1f570 6c 50 72 65 70 61 72 65 28 70 2c 20 26 72 63 2c  lPrepare(p, &rc,
1f580 20 7a 53 71 6c 32 2c 20 26 70 53 71 6c 29 3b 0a   zSql2, &pSql);.
1f590 20 20 77 68 69 6c 65 28 20 72 63 3d 3d 53 51 4c    while( rc==SQL
1f5a0 49 54 45 5f 4f 4b 20 26 26 20 53 51 4c 49 54 45  ITE_OK && SQLITE
1f5b0 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f 73 74  _ROW==sqlite3_st
1f5c0 65 70 28 70 53 71 6c 29 20 29 7b 0a 20 20 20 20  ep(pSql) ){.    
1f5d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 74  const char *zPat
1f5e0 68 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  h = (const char*
1f5f0 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
1f600 74 65 78 74 28 70 53 71 6c 2c 20 30 29 3b 0a 20  text(pSql, 0);. 
1f610 20 20 20 74 69 6d 65 73 5b 31 5d 2e 74 76 5f 73     times[1].tv_s
1f620 65 63 20 3d 20 28 74 69 6d 65 5f 74 29 73 71 6c  ec = (time_t)sql
1f630 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
1f640 34 28 70 53 71 6c 2c 20 31 29 3b 0a 20 20 20 20  4(pSql, 1);.    
1f650 69 66 28 20 75 74 69 6d 65 6e 73 61 74 28 41 54  if( utimensat(AT
1f660 5f 46 44 43 57 44 2c 20 7a 50 61 74 68 2c 20 74  _FDCWD, zPath, t
1f670 69 6d 65 73 2c 20 41 54 5f 53 59 4d 4c 49 4e 4b  imes, AT_SYMLINK
1f680 5f 4e 4f 46 4f 4c 4c 4f 57 29 20 29 7b 0a 20 20  _NOFOLLOW) ){.  
1f690 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
1f6a0 74 64 65 72 72 2c 20 22 66 61 69 6c 65 64 20 74  tderr, "failed t
1f6b0 6f 20 73 65 74 20 74 69 6d 65 73 74 61 6d 70 20  o set timestamp 
1f6c0 66 6f 72 20 25 73 5c 6e 22 2c 20 7a 50 61 74 68  for %s\n", zPath
1f6d0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
1f6e0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
1f6f0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
1f700 20 7d 0a 20 20 73 68 65 6c 6c 46 69 6e 61 6c 69   }.  shellFinali
1f710 7a 65 28 26 72 63 2c 20 70 53 71 6c 29 3b 0a 0a  ze(&rc, pSql);..
1f720 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
1f730 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61  /*.** Implementa
1f740 74 69 6f 6e 20 6f 66 20 2e 61 72 20 22 43 72 65  tion of .ar "Cre
1f750 61 74 65 22 20 63 6f 6d 6d 61 6e 64 2e 20 0a 2a  ate" command. .*
1f760 2a 0a 2a 2a 20 43 72 65 61 74 65 20 74 68 65 20  *.** Create the 
1f770 22 73 71 6c 61 72 22 20 74 61 62 6c 65 20 69 6e  "sqlar" table in
1f780 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 66   the database if
1f790 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72   it does not alr
1f7a0 65 61 64 79 20 65 78 69 73 74 2e 0a 2a 2a 20 54  eady exist..** T
1f7b0 68 65 6e 20 61 64 64 20 65 61 63 68 20 66 69 6c  hen add each fil
1f7c0 65 20 69 6e 20 74 68 65 20 61 7a 46 69 6c 65 5b  e in the azFile[
1f7d0 5d 20 61 72 72 61 79 20 74 6f 20 74 68 65 20 61  ] array to the a
1f7e0 72 63 68 69 76 65 2e 20 44 69 72 65 63 74 6f 72  rchive. Director
1f7f0 69 65 73 0a 2a 2a 20 61 72 65 20 61 64 64 65 64  ies.** are added
1f800 20 72 65 63 75 72 73 69 76 65 6c 79 2e 20 49 66   recursively. If
1f810 20 61 72 67 75 6d 65 6e 74 20 62 56 65 72 62 6f   argument bVerbo
1f820 73 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  se is non-zero, 
1f830 61 20 6d 65 73 73 61 67 65 20 69 73 0a 2a 2a 20  a message is.** 
1f840 70 72 69 6e 74 65 64 20 6f 6e 20 73 74 64 6f 75  printed on stdou
1f850 74 20 66 6f 72 20 65 61 63 68 20 66 69 6c 65 20  t for each file 
1f860 61 72 63 68 69 76 65 64 2e 0a 2a 2f 0a 73 74 61  archived..*/.sta
1f870 74 69 63 20 69 6e 74 20 61 72 43 72 65 61 74 65  tic int arCreate
1f880 43 6f 6d 6d 61 6e 64 28 0a 20 20 53 68 65 6c 6c  Command(.  Shell
1f890 53 74 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20  State *p,       
1f8a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 68             /* Sh
1f8b0 65 6c 6c 20 73 74 61 74 65 20 70 6f 69 6e 74 65  ell state pointe
1f8c0 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  r */.  char **az
1f8d0 46 69 6c 65 2c 20 20 20 20 20 20 20 20 20 20 20  File,           
1f8e0 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
1f8f0 6f 66 20 66 69 6c 65 73 20 74 6f 20 61 64 64 20  of files to add 
1f900 74 6f 20 61 72 63 68 69 76 65 20 2a 2f 0a 20 20  to archive */.  
1f910 69 6e 74 20 6e 46 69 6c 65 2c 20 20 20 20 20 20  int nFile,      
1f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f930 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
1f940 72 69 65 73 20 69 6e 20 61 7a 46 69 6c 65 5b 5d  ries in azFile[]
1f950 20 2a 2f 0a 20 20 69 6e 74 20 62 56 65 72 62 6f   */.  int bVerbo
1f960 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  se              
1f970 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1f980 20 62 65 20 76 65 72 62 6f 73 65 20 6f 6e 20 73   be verbose on s
1f990 74 64 6f 75 74 20 2a 2f 0a 29 7b 0a 20 20 63 6f  tdout */.){.  co
1f9a0 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d  nst char *zSql =
1f9b0 20 0a 20 20 20 20 22 57 49 54 48 20 66 28 6e 2c   .    "WITH f(n,
1f9c0 20 6d 2c 20 74 2c 20 64 29 20 41 53 20 28 22 0a   m, t, d) AS (".
1f9d0 20 20 20 20 22 20 20 53 45 4c 45 43 54 20 6e 61      "  SELECT na
1f9e0 6d 65 2c 20 6d 6f 64 65 2c 20 6d 74 69 6d 65 2c  me, mode, mtime,
1f9f0 20 64 61 74 61 20 46 52 4f 4d 20 66 73 65 6e 74   data FROM fsent
1fa00 72 79 28 3a 31 29 20 55 4e 49 4f 4e 20 41 4c 4c  ry(:1) UNION ALL
1fa10 20 22 0a 20 20 20 20 22 20 20 53 45 4c 45 43 54   ".    "  SELECT
1fa20 20 6e 20 7c 7c 20 27 2f 27 20 7c 7c 20 6e 61 6d   n || '/' || nam
1fa30 65 2c 20 6d 6f 64 65 2c 20 6d 74 69 6d 65 2c 20  e, mode, mtime, 
1fa40 64 61 74 61 20 22 0a 20 20 20 20 22 20 20 20 20  data ".    "    
1fa50 20 20 46 52 4f 4d 20 66 2c 20 66 73 64 69 72 28    FROM f, fsdir(
1fa60 6e 29 20 57 48 45 52 45 20 28 6d 26 3f 29 22 0a  n) WHERE (m&?)".
1fa70 20 20 20 20 22 29 20 53 45 4c 45 43 54 20 2a 20      ") SELECT * 
1fa80 46 52 4f 4d 20 66 22 3b 0a 0a 20 20 63 6f 6e 73  FROM f";..  cons
1fa90 74 20 63 68 61 72 20 2a 7a 53 71 6c 61 72 20 3d  t char *zSqlar =
1faa0 20 0a 20 20 20 20 20 20 22 43 52 45 41 54 45 20   .      "CREATE 
1fab0 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49  TABLE IF NOT EXI
1fac0 53 54 53 20 73 71 6c 61 72 28 22 0a 20 20 20 20  STS sqlar(".    
1fad0 20 20 22 6e 61 6d 65 20 54 45 58 54 20 50 52 49    "name TEXT PRI
1fae0 4d 41 52 59 20 4b 45 59 2c 20 20 2d 2d 20 6e 61  MARY KEY,  -- na
1faf0 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65 5c 6e  me of the file\n
1fb00 22 0a 20 20 20 20 20 20 22 6d 6f 64 65 20 49 4e  ".      "mode IN
1fb10 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  T,              
1fb20 20 2d 2d 20 61 63 63 65 73 73 20 70 65 72 6d 69   -- access permi
1fb30 73 73 69 6f 6e 73 5c 6e 22 0a 20 20 20 20 20 20  ssions\n".      
1fb40 22 6d 74 69 6d 65 20 49 4e 54 2c 20 20 20 20 20  "mtime INT,     
1fb50 20 20 20 20 20 20 20 20 20 2d 2d 20 6c 61 73 74           -- last
1fb60 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 74 69   modification ti
1fb70 6d 65 5c 6e 22 0a 20 20 20 20 20 20 22 73 7a 20  me\n".      "sz 
1fb80 49 4e 54 2c 20 20 20 20 20 20 20 20 20 20 20 20  INT,            
1fb90 20 20 20 20 20 2d 2d 20 6f 72 69 67 69 6e 61 6c       -- original
1fba0 20 66 69 6c 65 20 73 69 7a 65 5c 6e 22 0a 20 20   file size\n".  
1fbb0 20 20 20 20 22 64 61 74 61 20 42 4c 4f 42 20 20      "data BLOB  
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20               -- 
1fbd0 63 6f 6d 70 72 65 73 73 65 64 20 63 6f 6e 74 65  compressed conte
1fbe0 6e 74 5c 6e 22 0a 20 20 20 20 20 20 22 29 22 3b  nt\n".      ")";
1fbf0 0a 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ..  const char *
1fc00 7a 49 6e 73 65 72 74 20 3d 20 22 52 45 50 4c 41  zInsert = "REPLA
1fc10 43 45 20 49 4e 54 4f 20 73 71 6c 61 72 20 56 41  CE INTO sqlar VA
1fc20 4c 55 45 53 28 3f 2c 20 3f 2c 20 3f 2c 20 3f 2c  LUES(?, ?, ?, ?,
1fc30 20 3f 29 22 3b 0a 0a 20 20 73 71 6c 69 74 65 33   ?)";..  sqlite3
1fc40 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30  _stmt *pStmt = 0
1fc50 3b 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65  ;        /* Dire
1fc60 63 74 6f 72 79 20 74 72 61 76 65 72 73 65 72 20  ctory traverser 
1fc70 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  */.  sqlite3_stm
1fc80 74 20 2a 70 49 6e 73 65 72 74 20 3d 20 30 3b 20  t *pInsert = 0; 
1fc90 20 20 20 20 20 2f 2a 20 43 6f 6d 70 69 6c 61 74       /* Compilat
1fca0 69 6f 6e 20 6f 66 20 7a 49 6e 73 65 72 74 20 2a  ion of zInsert *
1fcb0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
1fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcd0 20 20 20 20 2f 2a 20 46 6f 72 20 69 74 65 72 61      /* For itera
1fce0 74 69 6e 67 20 74 68 72 6f 75 67 68 20 61 7a 46  ting through azF
1fcf0 69 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 72  ile[] */.  int r
1fd00 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
1fd10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1fd20 74 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 0a 20 20  turn code */..  
1fd30 42 79 74 65 66 20 2a 61 43 6f 6d 70 72 65 73 73  Bytef *aCompress
1fd40 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
1fd50 2f 2a 20 43 6f 6d 70 72 65 73 73 69 6f 6e 20 62  /* Compression b
1fd60 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  uffer */.  int n
1fd70 43 6f 6d 70 72 65 73 73 20 3d 20 30 3b 20 20 20  Compress = 0;   
1fd80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1fd90 7a 65 20 6f 66 20 63 6f 6d 70 72 65 73 73 69 6f  ze of compressio
1fda0 6e 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 0a 20  n buffer */.  . 
1fdb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
1fdc0 65 63 28 70 2d 3e 64 62 2c 20 22 53 41 56 45 50  ec(p->db, "SAVEP
1fdd0 4f 49 4e 54 20 61 72 3b 22 2c 20 30 2c 20 30 2c  OINT ar;", 0, 0,
1fde0 20 30 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53   0);.  if( rc!=S
1fdf0 51 4c 49 54 45 5f 4f 4b 20 29 20 72 65 74 75 72  QLITE_OK ) retur
1fe00 6e 20 72 63 3b 0a 0a 20 20 72 63 20 3d 20 73 71  n rc;..  rc = sq
1fe10 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
1fe20 2c 20 7a 53 71 6c 61 72 2c 20 30 2c 20 30 2c 20  , zSqlar, 0, 0, 
1fe30 30 29 3b 0a 20 20 73 68 65 6c 6c 50 72 65 70 61  0);.  shellPrepa
1fe40 72 65 28 70 2c 20 26 72 63 2c 20 7a 49 6e 73 65  re(p, &rc, zInse
1fe50 72 74 2c 20 26 70 49 6e 73 65 72 74 29 3b 0a 20  rt, &pInsert);. 
1fe60 20 73 68 65 6c 6c 50 72 65 70 61 72 65 28 70 2c   shellPrepare(p,
1fe70 20 26 72 63 2c 20 7a 53 71 6c 2c 20 26 70 53 74   &rc, zSql, &pSt
1fe80 6d 74 29 3b 0a 0a 20 20 66 6f 72 28 69 3d 30 3b  mt);..  for(i=0;
1fe90 20 69 3c 6e 46 69 6c 65 20 26 26 20 72 63 3d 3d   i<nFile && rc==
1fea0 53 51 4c 49 54 45 5f 4f 4b 3b 20 69 2b 2b 29 7b  SQLITE_OK; i++){
1feb0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  .    sqlite3_bin
1fec0 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 2c  d_text(pStmt, 1,
1fed0 20 61 7a 46 69 6c 65 5b 69 5d 2c 20 2d 31 2c 20   azFile[i], -1, 
1fee0 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
1fef0 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
1ff00 5f 69 6e 74 28 70 53 74 6d 74 2c 20 32 2c 20 53  _int(pStmt, 2, S
1ff10 5f 49 46 44 49 52 29 3b 0a 20 20 20 20 77 68 69  _IFDIR);.    whi
1ff20 6c 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  le( rc==SQLITE_O
1ff30 4b 20 26 26 20 53 51 4c 49 54 45 5f 52 4f 57 3d  K && SQLITE_ROW=
1ff40 3d 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53  =sqlite3_step(pS
1ff50 74 6d 74 29 20 29 7b 0a 20 20 20 20 20 20 69 6e  tmt) ){.      in
1ff60 74 20 73 7a 3b 0a 20 20 20 20 20 20 63 6f 6e 73  t sz;.      cons
1ff70 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20  t char *zName = 
1ff80 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
1ff90 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
1ffa0 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  (pStmt, 0);.    
1ffb0 20 20 69 6e 74 20 6d 6f 64 65 20 3d 20 73 71 6c    int mode = sql
1ffc0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  ite3_column_int(
1ffd0 70 53 74 6d 74 2c 20 31 29 3b 0a 20 20 20 20 20  pStmt, 1);.     
1ffe0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6d 74   unsigned int mt
1fff0 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  ime = sqlite3_co
20000 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 20  lumn_int(pStmt, 
20010 32 29 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 62  2);..      if( b
20020 56 65 72 62 6f 73 65 20 29 7b 0a 20 20 20 20 20  Verbose ){.     
20030 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
20040 64 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 4e  dout, "%s\n", zN
20050 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ame);.      }.. 
20060 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
20070 64 5f 74 65 78 74 28 70 49 6e 73 65 72 74 2c 20  d_text(pInsert, 
20080 31 2c 20 7a 4e 61 6d 65 2c 20 2d 31 2c 20 53 51  1, zName, -1, SQ
20090 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
200a0 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
200b0 5f 69 6e 74 28 70 49 6e 73 65 72 74 2c 20 32 2c  _int(pInsert, 2,
200c0 20 6d 6f 64 65 29 3b 0a 20 20 20 20 20 20 73 71   mode);.      sq
200d0 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
200e0 28 70 49 6e 73 65 72 74 2c 20 33 2c 20 28 73 71  (pInsert, 3, (sq
200f0 6c 69 74 65 33 5f 69 6e 74 36 34 29 6d 74 69 6d  lite3_int64)mtim
20100 65 29 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 53  e);..      if( S
20110 5f 49 53 44 49 52 28 6d 6f 64 65 29 20 29 7b 0a  _ISDIR(mode) ){.
20120 20 20 20 20 20 20 20 20 73 7a 20 3d 20 30 3b 0a          sz = 0;.
20130 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
20140 62 69 6e 64 5f 6e 75 6c 6c 28 70 49 6e 73 65 72  bind_null(pInser
20150 74 2c 20 35 29 3b 0a 20 20 20 20 20 20 7d 65 6c  t, 5);.      }el
20160 73 65 20 69 66 28 20 53 5f 49 53 4c 4e 4b 28 6d  se if( S_ISLNK(m
20170 6f 64 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ode) ){.        
20180 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 20  sz = -1;.       
20190 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 76 61   sqlite3_bind_va
201a0 6c 75 65 28 70 49 6e 73 65 72 74 2c 20 35 2c 20  lue(pInsert, 5, 
201b0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 76  sqlite3_column_v
201c0 61 6c 75 65 28 70 53 74 6d 74 2c 20 33 29 29 3b  alue(pStmt, 3));
201d0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
201e0 20 20 20 20 20 20 75 4c 6f 6e 67 66 20 6e 52 65        uLongf nRe
201f0 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
20200 2f 2a 20 52 65 71 75 69 72 65 64 20 73 69 7a 65  /* Required size
20210 20 6f 66 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20   of compression 
20220 62 75 66 66 65 72 20 2a 2f 0a 20 20 20 20 20 20  buffer */.      
20230 20 20 63 6f 6e 73 74 20 42 79 74 65 66 20 2a 70    const Bytef *p
20240 44 61 74 61 20 3d 20 28 63 6f 6e 73 74 20 42 79  Data = (const By
20250 74 65 66 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  tef*)sqlite3_col
20260 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20  umn_blob(pStmt, 
20270 33 29 3b 0a 20 20 20 20 20 20 20 20 73 7a 20 3d  3);.        sz =
20280 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
20290 62 79 74 65 73 28 70 53 74 6d 74 2c 20 33 29 3b  bytes(pStmt, 3);
202a0 0a 20 20 20 20 20 20 20 20 6e 52 65 71 20 3d 20  .        nReq = 
202b0 63 6f 6d 70 72 65 73 73 42 6f 75 6e 64 28 73 7a  compressBound(sz
202c0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61  );.        if( a
202d0 43 6f 6d 70 72 65 73 73 3d 3d 30 20 7c 7c 20 6e  Compress==0 || n
202e0 52 65 71 3e 6e 43 6f 6d 70 72 65 73 73 20 29 7b  Req>nCompress ){
202f0 0a 20 20 20 20 20 20 20 20 20 20 42 79 74 65 66  .          Bytef
20300 20 2a 61 4e 65 77 20 3d 20 73 71 6c 69 74 65 33   *aNew = sqlite3
20310 5f 72 65 61 6c 6c 6f 63 28 61 43 6f 6d 70 72 65  _realloc(aCompre
20320 73 73 2c 20 6e 52 65 71 29 3b 0a 20 20 20 20 20  ss, nReq);.     
20330 20 20 20 20 20 69 66 28 20 61 4e 65 77 3d 3d 30       if( aNew==0
20340 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
20350 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
20360 4d 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  M;.          }el
20370 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
20380 61 43 6f 6d 70 72 65 73 73 20 3d 20 61 4e 65 77  aCompress = aNew
20390 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 43  ;.            nC
203a0 6f 6d 70 72 65 73 73 20 3d 20 6e 52 65 71 3b 0a  ompress = nReq;.
203b0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
203c0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 69      }..        i
203d0 66 28 20 5a 5f 4f 4b 21 3d 63 6f 6d 70 72 65 73  f( Z_OK!=compres
203e0 73 28 61 43 6f 6d 70 72 65 73 73 2c 20 26 6e 52  s(aCompress, &nR
203f0 65 71 2c 20 70 44 61 74 61 2c 20 73 7a 29 20 29  eq, pData, sz) )
20400 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
20410 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
20420 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
20430 20 69 66 28 20 6e 52 65 71 3c 73 7a 20 29 7b 0a   if( nReq<sz ){.
20440 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
20450 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 70 49 6e 73  3_bind_blob(pIns
20460 65 72 74 2c 20 35 2c 20 61 43 6f 6d 70 72 65 73  ert, 5, aCompres
20470 73 2c 20 6e 52 65 71 2c 20 53 51 4c 49 54 45 5f  s, nReq, SQLITE_
20480 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
20490 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
204a0 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62    sqlite3_bind_b
204b0 6c 6f 62 28 70 49 6e 73 65 72 74 2c 20 35 2c 20  lob(pInsert, 5, 
204c0 70 44 61 74 61 2c 20 73 7a 2c 20 53 51 4c 49 54  pData, sz, SQLIT
204d0 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
204e0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20     }.      }..  
204f0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
20500 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
20510 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
20520 74 28 70 49 6e 73 65 72 74 2c 20 34 2c 20 73 7a  t(pInsert, 4, sz
20530 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
20540 65 33 5f 73 74 65 70 28 70 49 6e 73 65 72 74 29  e3_step(pInsert)
20550 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
20560 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 49 6e  qlite3_reset(pIn
20570 73 65 72 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  sert);.      }. 
20580 20 20 20 7d 0a 20 20 20 20 73 68 65 6c 6c 52 65     }.    shellRe
20590 73 65 74 28 26 72 63 2c 20 70 53 74 6d 74 29 3b  set(&rc, pStmt);
205a0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72 63 21 3d  .  }..  if( rc!=
205b0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
205c0 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
205d0 3e 64 62 2c 20 22 52 4f 4c 4c 42 41 43 4b 20 54  >db, "ROLLBACK T
205e0 4f 20 61 72 3b 20 52 45 4c 45 41 53 45 20 61 72  O ar; RELEASE ar
205f0 3b 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  ;", 0, 0, 0);.  
20600 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
20610 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
20620 64 62 2c 20 22 52 45 4c 45 41 53 45 20 61 72 3b  db, "RELEASE ar;
20630 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  ", 0, 0, 0);.  }
20640 0a 20 20 73 68 65 6c 6c 46 69 6e 61 6c 69 7a 65  .  shellFinalize
20650 28 26 72 63 2c 20 70 53 74 6d 74 29 3b 0a 20 20  (&rc, pStmt);.  
20660 73 68 65 6c 6c 46 69 6e 61 6c 69 7a 65 28 26 72  shellFinalize(&r
20670 63 2c 20 70 49 6e 73 65 72 74 29 3b 0a 20 20 73  c, pInsert);.  s
20680 71 6c 69 74 65 33 5f 66 72 65 65 28 61 43 6f 6d  qlite3_free(aCom
20690 70 72 65 73 73 29 3b 0a 20 20 72 65 74 75 72 6e  press);.  return
206a0 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d   rc;.}../*.** Im
206b0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
206c0 22 2e 61 72 22 20 64 6f 74 20 63 6f 6d 6d 61 6e  ".ar" dot comman
206d0 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
206e0 20 61 72 44 6f 74 43 6f 6d 6d 61 6e 64 28 0a 20   arDotCommand(. 
206f0 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 53 74   ShellState *pSt
20700 61 74 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  ate,            
20710 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 68 65 6c   /* Current shel
20720 6c 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a 2f 0a  l tool state */.
20730 20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20    char **azArg, 
20740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20750 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 61 72    /* Array of ar
20760 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74  guments passed t
20770 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20 2a 2f  o dot command */
20780 0a 20 20 69 6e 74 20 6e 41 72 67 20 20 20 20 20  .  int nArg     
20790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
207b0 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 41 72 67  entries in azArg
207c0 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 62  [] */.){.  int b
207d0 56 65 72 62 6f 73 65 20 3d 20 30 3b 0a 20 20 63  Verbose = 0;.  c
207e0 68 61 72 20 63 6d 64 20 3d 20 30 3b 0a 20 20 69  har cmd = 0;.  i
207f0 6e 74 20 69 3b 0a 20 20 69 6e 74 20 6e 31 3b 0a  nt i;.  int n1;.
20800 20 20 69 66 28 20 6e 41 72 67 3c 3d 31 20 29 20    if( nArg<=1 ) 
20810 67 6f 74 6f 20 75 73 61 67 65 3b 0a 0a 20 20 6e  goto usage;..  n
20820 31 20 3d 20 73 74 72 6c 65 6e 28 61 7a 41 72 67  1 = strlen(azArg
20830 5b 31 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  [1]);.  for(i=0;
20840 20 69 3c 6e 31 3b 20 69 2b 2b 29 7b 0a 20 20 20   i<n1; i++){.   
20850 20 63 68 61 72 20 63 20 3d 20 61 7a 41 72 67 5b   char c = azArg[
20860 31 5d 5b 69 5d 3b 0a 20 20 20 20 69 66 28 20 63  1][i];.    if( c
20870 3d 3d 27 63 27 20 7c 7c 20 63 3d 3d 27 78 27 20  =='c' || c=='x' 
20880 29 7b 0a 20 20 20 20 20 20 69 66 28 20 63 6d 64  ){.      if( cmd
20890 20 29 20 67 6f 74 6f 20 75 73 61 67 65 3b 0a 20   ) goto usage;. 
208a0 20 20 20 20 20 63 6d 64 20 3d 20 63 3b 0a 20 20       cmd = c;.  
208b0 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 28    }.    else if(
208c0 20 63 3d 3d 27 76 27 20 29 7b 0a 20 20 20 20 20   c=='v' ){.     
208d0 20 62 56 65 72 62 6f 73 65 20 3d 20 31 3b 0a 20   bVerbose = 1;. 
208e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
208f0 67 6f 74 6f 20 75 73 61 67 65 3b 0a 20 20 20 20  goto usage;.    
20900 7d 0a 20 20 7d 0a 0a 20 20 69 66 28 20 63 6d 64  }.  }..  if( cmd
20910 3d 3d 27 63 27 20 29 7b 0a 20 20 20 20 72 65 74  =='c' ){.    ret
20920 75 72 6e 20 61 72 43 72 65 61 74 65 43 6f 6d 6d  urn arCreateComm
20930 61 6e 64 28 70 53 74 61 74 65 2c 20 26 61 7a 41  and(pState, &azA
20940 72 67 5b 32 5d 2c 20 6e 41 72 67 2d 32 2c 20 62  rg[2], nArg-2, b
20950 56 65 72 62 6f 73 65 29 3b 0a 20 20 7d 0a 0a 20  Verbose);.  }.. 
20960 20 69 66 28 20 63 6d 64 3d 3d 27 78 27 20 29 7b   if( cmd=='x' ){
20970 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 32  .    if( nArg!=2
20980 20 29 20 67 6f 74 6f 20 75 73 61 67 65 3b 0a 20   ) goto usage;. 
20990 20 20 20 72 65 74 75 72 6e 20 61 72 45 78 74 72     return arExtr
209a0 61 63 74 43 6f 6d 6d 61 6e 64 28 70 53 74 61 74  actCommand(pStat
209b0 65 2c 20 62 56 65 72 62 6f 73 65 29 3b 0a 20 20  e, bVerbose);.  
209c0 7d 0a 0a 20 75 73 61 67 65 3a 0a 20 20 72 61 77  }.. usage:.  raw
209d0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
209e0 22 55 73 61 67 65 20 25 73 20 73 75 62 2d 63 6f  "Usage %s sub-co
209f0 6d 6d 61 6e 64 20 3f 61 72 67 73 2e 2e 2e 3f 5c  mmand ?args...?\
20a00 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20  n", azArg[0]);. 
20a10 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
20a20 52 52 4f 52 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  RROR;.}.../*.** 
20a30 49 66 20 61 6e 20 69 6e 70 75 74 20 6c 69 6e 65  If an input line
20a40 20 62 65 67 69 6e 73 20 77 69 74 68 20 22 2e 22   begins with "."
20a50 20 74 68 65 6e 20 69 6e 76 6f 6b 65 20 74 68 69   then invoke thi
20a60 73 20 72 6f 75 74 69 6e 65 20 74 6f 0a 2a 2a 20  s routine to.** 
20a70 70 72 6f 63 65 73 73 20 74 68 61 74 20 6c 69 6e  process that lin
20a80 65 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  e..**.** Return 
20a90 31 20 6f 6e 20 65 72 72 6f 72 2c 20 32 20 74 6f  1 on error, 2 to
20aa0 20 65 78 69 74 2c 20 61 6e 64 20 30 20 6f 74 68   exit, and 0 oth
20ab0 65 72 77 69 73 65 2e 0a 2a 2f 0a 73 74 61 74 69  erwise..*/.stati
20ac0 63 20 69 6e 74 20 64 6f 5f 6d 65 74 61 5f 63 6f  c int do_meta_co
20ad0 6d 6d 61 6e 64 28 63 68 61 72 20 2a 7a 4c 69 6e  mmand(char *zLin
20ae0 65 2c 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  e, ShellState *p
20af0 29 7b 0a 20 20 69 6e 74 20 68 20 3d 20 31 3b 0a  ){.  int h = 1;.
20b00 20 20 69 6e 74 20 6e 41 72 67 20 3d 20 30 3b 0a    int nArg = 0;.
20b10 20 20 69 6e 74 20 6e 2c 20 63 3b 0a 20 20 69 6e    int n, c;.  in
20b20 74 20 72 63 20 3d 20 30 3b 0a 20 20 63 68 61 72  t rc = 0;.  char
20b30 20 2a 61 7a 41 72 67 5b 35 30 5d 3b 0a 0a 20 20   *azArg[50];..  
20b40 2f 2a 20 50 61 72 73 65 20 74 68 65 20 69 6e 70  /* Parse the inp
20b50 75 74 20 6c 69 6e 65 20 69 6e 74 6f 20 74 6f 6b  ut line into tok
20b60 65 6e 73 2e 0a 20 20 2a 2f 0a 20 20 77 68 69 6c  ens..  */.  whil
20b70 65 28 20 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 6e  e( zLine[h] && n
20b80 41 72 67 3c 41 72 72 61 79 53 69 7a 65 28 61 7a  Arg<ArraySize(az
20b90 41 72 67 29 20 29 7b 0a 20 20 20 20 77 68 69 6c  Arg) ){.    whil
20ba0 65 28 20 49 73 53 70 61 63 65 28 7a 4c 69 6e 65  e( IsSpace(zLine
20bb0 5b 68 5d 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20  [h]) ){ h++; }. 
20bc0 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 3d     if( zLine[h]=
20bd0 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
20be0 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 5c  if( zLine[h]=='\
20bf0 27 27 20 7c 7c 20 7a 4c 69 6e 65 5b 68 5d 3d 3d  '' || zLine[h]==
20c00 27 22 27 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  '"' ){.      int
20c10 20 64 65 6c 69 6d 20 3d 20 7a 4c 69 6e 65 5b 68   delim = zLine[h
20c20 2b 2b 5d 3b 0a 20 20 20 20 20 20 61 7a 41 72 67  ++];.      azArg
20c30 5b 6e 41 72 67 2b 2b 5d 20 3d 20 26 7a 4c 69 6e  [nArg++] = &zLin
20c40 65 5b 68 5d 3b 0a 20 20 20 20 20 20 77 68 69 6c  e[h];.      whil
20c50 65 28 20 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 7a  e( zLine[h] && z
20c60 4c 69 6e 65 5b 68 5d 21 3d 64 65 6c 69 6d 20 29  Line[h]!=delim )
20c70 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 4c  {.        if( zL
20c80 69 6e 65 5b 68 5d 3d 3d 27 5c 5c 27 20 26 26 20  ine[h]=='\\' && 
20c90 64 65 6c 69 6d 3d 3d 27 22 27 20 26 26 20 7a 4c  delim=='"' && zL
20ca0 69 6e 65 5b 68 2b 31 5d 21 3d 30 20 29 20 68 2b  ine[h+1]!=0 ) h+
20cb0 2b 3b 0a 20 20 20 20 20 20 20 20 68 2b 2b 3b 0a  +;.        h++;.
20cc0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
20cd0 28 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 64 65 6c 69  ( zLine[h]==deli
20ce0 6d 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69  m ){.        zLi
20cf0 6e 65 5b 68 2b 2b 5d 20 3d 20 30 3b 0a 20 20 20  ne[h++] = 0;.   
20d00 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 64     }.      if( d
20d10 65 6c 69 6d 3d 3d 27 22 27 20 29 20 72 65 73 6f  elim=='"' ) reso
20d20 6c 76 65 5f 62 61 63 6b 73 6c 61 73 68 65 73 28  lve_backslashes(
20d30 61 7a 41 72 67 5b 6e 41 72 67 2d 31 5d 29 3b 0a  azArg[nArg-1]);.
20d40 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20d50 20 61 7a 41 72 67 5b 6e 41 72 67 2b 2b 5d 20 3d   azArg[nArg++] =
20d60 20 26 7a 4c 69 6e 65 5b 68 5d 3b 0a 20 20 20 20   &zLine[h];.    
20d70 20 20 77 68 69 6c 65 28 20 7a 4c 69 6e 65 5b 68    while( zLine[h
20d80 5d 20 26 26 20 21 49 73 53 70 61 63 65 28 7a 4c  ] && !IsSpace(zL
20d90 69 6e 65 5b 68 5d 29 20 29 7b 20 68 2b 2b 3b 20  ine[h]) ){ h++; 
20da0 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e  }.      if( zLin
20db0 65 5b 68 5d 20 29 20 7a 4c 69 6e 65 5b 68 2b 2b  e[h] ) zLine[h++
20dc0 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 65 73  ] = 0;.      res
20dd0 6f 6c 76 65 5f 62 61 63 6b 73 6c 61 73 68 65 73  olve_backslashes
20de0 28 61 7a 41 72 67 5b 6e 41 72 67 2d 31 5d 29 3b  (azArg[nArg-1]);
20df0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
20e00 20 50 72 6f 63 65 73 73 20 74 68 65 20 69 6e 70   Process the inp
20e10 75 74 20 6c 69 6e 65 2e 0a 20 20 2a 2f 0a 20 20  ut line..  */.  
20e20 69 66 28 20 6e 41 72 67 3d 3d 30 20 29 20 72 65  if( nArg==0 ) re
20e30 74 75 72 6e 20 30 3b 20 2f 2a 20 6e 6f 20 74 6f  turn 0; /* no to
20e40 6b 65 6e 73 2c 20 6e 6f 20 65 72 72 6f 72 20 2a  kens, no error *
20e50 2f 0a 20 20 6e 20 3d 20 73 74 72 6c 65 6e 33 30  /.  n = strlen30
20e60 28 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 63 20  (azArg[0]);.  c 
20e70 3d 20 61 7a 41 72 67 5b 30 5d 5b 30 5d 3b 0a 0a  = azArg[0][0];..
20e80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
20e90 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
20ea0 4e 0a 20 20 69 66 28 20 63 3d 3d 27 61 27 20 26  N.  if( c=='a' &
20eb0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
20ec0 30 5d 2c 20 22 61 75 74 68 22 2c 20 6e 29 3d 3d  0], "auth", n)==
20ed0 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
20ee0 67 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61  g!=2 ){.      ra
20ef0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
20f00 20 22 55 73 61 67 65 3a 20 2e 61 75 74 68 20 4f   "Usage: .auth O
20f10 4e 7c 4f 46 46 5c 6e 22 29 3b 0a 20 20 20 20 20  N|OFF\n");.     
20f20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
20f30 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
20f40 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
20f50 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a   open_db(p, 0);.
20f60 20 20 20 20 69 66 28 20 62 6f 6f 6c 65 61 6e 56      if( booleanV
20f70 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 20 29  alue(azArg[1]) )
20f80 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
20f90 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 70  set_authorizer(p
20fa0 2d 3e 64 62 2c 20 73 68 65 6c 6c 41 75 74 68 2c  ->db, shellAuth,
20fb0 20 70 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   p);.    }else{.
20fc0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65        sqlite3_se
20fd0 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 70 2d 3e  t_authorizer(p->
20fe0 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d  db, 0, 0);.    }
20ff0 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
21000 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21010 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
21020 45 0a 20 20 69 66 28 20 63 3d 3d 27 61 27 20 26  E.  if( c=='a' &
21030 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
21040 30 5d 2c 20 22 61 72 22 2c 20 6e 29 3d 3d 30 20  0], "ar", n)==0 
21050 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70  ){.    open_db(p
21060 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 61  , 0);.    rc = a
21070 72 44 6f 74 43 6f 6d 6d 61 6e 64 28 70 2c 20 61  rDotCommand(p, a
21080 7a 41 72 67 2c 20 6e 41 72 67 29 3b 0a 20 20 7d  zArg, nArg);.  }
21090 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69  else.#endif..  i
210a0 66 28 20 28 63 3d 3d 27 62 27 20 26 26 20 6e 3e  f( (c=='b' && n>
210b0 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  =3 && strncmp(az
210c0 41 72 67 5b 30 5d 2c 20 22 62 61 63 6b 75 70 22  Arg[0], "backup"
210d0 2c 20 6e 29 3d 3d 30 29 0a 20 20 20 7c 7c 20 28  , n)==0).   || (
210e0 63 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 33 20 26  c=='s' && n>=3 &
210f0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
21100 30 5d 2c 20 22 73 61 76 65 22 2c 20 6e 29 3d 3d  0], "save", n)==
21110 30 29 0a 20 20 29 7b 0a 20 20 20 20 63 6f 6e 73  0).  ){.    cons
21120 74 20 63 68 61 72 20 2a 7a 44 65 73 74 46 69 6c  t char *zDestFil
21130 65 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74  e = 0;.    const
21140 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b 0a   char *zDb = 0;.
21150 20 20 20 20 73 71 6c 69 74 65 33 20 2a 70 44 65      sqlite3 *pDe
21160 73 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  st;.    sqlite3_
21170 62 61 63 6b 75 70 20 2a 70 42 61 63 6b 75 70 3b  backup *pBackup;
21180 0a 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20  .    int j;.    
21190 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e 41 72 67 3b  for(j=1; j<nArg;
211a0 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e   j++){.      con
211b0 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41  st char *z = azA
211c0 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28  rg[j];.      if(
211d0 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20   z[0]=='-' ){.  
211e0 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a 5b 30        while( z[0
211f0 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20  ]=='-' ) z++;.  
21200 20 20 20 20 20 20 2f 2a 20 4e 6f 20 6f 70 74 69        /* No opti
21210 6f 6e 73 20 74 6f 20 70 72 6f 63 65 73 73 20 61  ons to process a
21220 74 20 74 68 69 73 20 74 69 6d 65 20 2a 2f 0a 20  t this time */. 
21230 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
21240 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
21250 74 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20  tderr, "unknown 
21260 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 61  option: %s\n", a
21270 7a 41 72 67 5b 6a 5d 29 3b 0a 20 20 20 20 20 20  zArg[j]);.      
21280 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
21290 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
212a0 6c 73 65 20 69 66 28 20 7a 44 65 73 74 46 69 6c  lse if( zDestFil
212b0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  e==0 ){.        
212c0 7a 44 65 73 74 46 69 6c 65 20 3d 20 61 7a 41 72  zDestFile = azAr
212d0 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  g[j];.      }els
212e0 65 20 69 66 28 20 7a 44 62 3d 3d 30 20 29 7b 0a  e if( zDb==0 ){.
212f0 20 20 20 20 20 20 20 20 7a 44 62 20 3d 20 7a 44          zDb = zD
21300 65 73 74 46 69 6c 65 3b 0a 20 20 20 20 20 20 20  estFile;.       
21310 20 7a 44 65 73 74 46 69 6c 65 20 3d 20 61 7a 41   zDestFile = azA
21320 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c  rg[j];.      }el
21330 73 65 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f  se{.        raw_
21340 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
21350 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e  too many argumen
21360 74 73 20 74 6f 20 2e 62 61 63 6b 75 70 5c 6e 22  ts to .backup\n"
21370 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
21380 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 1;.      }.   
21390 20 7d 0a 20 20 20 20 69 66 28 20 7a 44 65 73 74   }.    if( zDest
213a0 46 69 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20  File==0 ){.     
213b0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
213c0 72 72 2c 20 22 6d 69 73 73 69 6e 67 20 46 49 4c  rr, "missing FIL
213d0 45 4e 41 4d 45 20 61 72 67 75 6d 65 6e 74 20 6f  ENAME argument o
213e0 6e 20 2e 62 61 63 6b 75 70 5c 6e 22 29 3b 0a 20  n .backup\n");. 
213f0 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
21400 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 44 62     }.    if( zDb
21410 3d 3d 30 20 29 20 7a 44 62 20 3d 20 22 6d 61 69  ==0 ) zDb = "mai
21420 6e 22 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  n";.    rc = sql
21430 69 74 65 33 5f 6f 70 65 6e 28 7a 44 65 73 74 46  ite3_open(zDestF
21440 69 6c 65 2c 20 26 70 44 65 73 74 29 3b 0a 20 20  ile, &pDest);.  
21450 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
21460 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 75 74 66  _OK ){.      utf
21470 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
21480 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20   "Error: cannot 
21490 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20  open \"%s\"\n", 
214a0 7a 44 65 73 74 46 69 6c 65 29 3b 0a 20 20 20 20  zDestFile);.    
214b0 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28    sqlite3_close(
214c0 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72 65  pDest);.      re
214d0 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
214e0 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
214f0 0a 20 20 20 20 70 42 61 63 6b 75 70 20 3d 20 73  .    pBackup = s
21500 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e  qlite3_backup_in
21510 69 74 28 70 44 65 73 74 2c 20 22 6d 61 69 6e 22  it(pDest, "main"
21520 2c 20 70 2d 3e 64 62 2c 20 7a 44 62 29 3b 0a 20  , p->db, zDb);. 
21530 20 20 20 69 66 28 20 70 42 61 63 6b 75 70 3d 3d     if( pBackup==
21540 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  0 ){.      utf8_
21550 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
21560 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71  Error: %s\n", sq
21570 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 44 65  lite3_errmsg(pDe
21580 73 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  st));.      sqli
21590 74 65 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29  te3_close(pDest)
215a0 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
215b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c  ;.    }.    whil
215c0 65 28 20 20 28 72 63 20 3d 20 73 71 6c 69 74 65  e(  (rc = sqlite
215d0 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 70 42  3_backup_step(pB
215e0 61 63 6b 75 70 2c 31 30 30 29 29 3d 3d 53 51 4c  ackup,100))==SQL
215f0 49 54 45 5f 4f 4b 20 29 7b 7d 0a 20 20 20 20 73  ITE_OK ){}.    s
21600 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
21610 6e 69 73 68 28 70 42 61 63 6b 75 70 29 3b 0a 20  nish(pBackup);. 
21620 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
21630 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20  E_DONE ){.      
21640 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  rc = 0;.    }els
21650 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  e{.      utf8_pr
21660 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
21670 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69  ror: %s\n", sqli
21680 74 65 33 5f 65 72 72 6d 73 67 28 70 44 65 73 74  te3_errmsg(pDest
21690 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ));.      rc = 1
216a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
216b0 74 65 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29  te3_close(pDest)
216c0 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  ;.  }else..  if(
216d0 20 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20   c=='b' && n>=3 
216e0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
216f0 5b 30 5d 2c 20 22 62 61 69 6c 22 2c 20 6e 29 3d  [0], "bail", n)=
21700 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
21710 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 62  rg==2 ){.      b
21720 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 3d 20 62  ail_on_error = b
21730 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72  ooleanValue(azAr
21740 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  g[1]);.    }else
21750 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
21760 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
21770 65 3a 20 2e 62 61 69 6c 20 6f 6e 7c 6f 66 66 5c  e: .bail on|off\
21780 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
21790 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
217a0 0a 0a 20 20 69 66 28 20 63 3d 3d 27 62 27 20 26  ..  if( c=='b' &
217b0 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d  & n>=3 && strncm
217c0 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62 69 6e  p(azArg[0], "bin
217d0 61 72 79 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ary", n)==0 ){. 
217e0 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29     if( nArg==2 )
217f0 7b 0a 20 20 20 20 20 20 69 66 28 20 62 6f 6f 6c  {.      if( bool
21800 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  eanValue(azArg[1
21810 5d 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 65  ]) ){.        se
21820 74 42 69 6e 61 72 79 4d 6f 64 65 28 70 2d 3e 6f  tBinaryMode(p->o
21830 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 65  ut, 1);.      }e
21840 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 65 74  lse{.        set
21850 54 65 78 74 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c  TextMode(p->out,
21860 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   1);.      }.   
21870 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
21880 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
21890 20 22 55 73 61 67 65 3a 20 2e 62 69 6e 61 72 79   "Usage: .binary
218a0 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20   on|off\n");.   
218b0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
218c0 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
218d0 63 3d 3d 27 63 27 20 26 26 20 73 74 72 63 6d 70  c=='c' && strcmp
218e0 28 61 7a 41 72 67 5b 30 5d 2c 22 63 64 22 29 3d  (azArg[0],"cd")=
218f0 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
21900 72 67 3d 3d 32 20 29 7b 0a 23 69 66 20 64 65 66  rg==2 ){.#if def
21910 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20  ined(_WIN32) || 
21920 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 20  defined(WIN32). 
21930 20 20 20 20 20 77 63 68 61 72 5f 74 20 2a 7a 20       wchar_t *z 
21940 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  = sqlite3_win32_
21950 75 74 66 38 5f 74 6f 5f 75 6e 69 63 6f 64 65 28  utf8_to_unicode(
21960 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
21970 20 72 63 20 3d 20 21 53 65 74 43 75 72 72 65 6e   rc = !SetCurren
21980 74 44 69 72 65 63 74 6f 72 79 57 28 7a 29 3b 0a  tDirectoryW(z);.
21990 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
219a0 65 65 28 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20  ee(z);.#else.   
219b0 20 20 20 72 63 20 3d 20 63 68 64 69 72 28 61 7a     rc = chdir(az
219c0 41 72 67 5b 31 5d 29 3b 0a 23 65 6e 64 69 66 0a  Arg[1]);.#endif.
219d0 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a        if( rc ){.
219e0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
219f0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 43 61 6e  ntf(stderr, "Can
21a00 6e 6f 74 20 63 68 61 6e 67 65 20 74 6f 20 64 69  not change to di
21a10 72 65 63 74 6f 72 79 20 5c 22 25 73 5c 22 5c 6e  rectory \"%s\"\n
21a20 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ", azArg[1]);.  
21a30 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
21a40 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
21a50 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
21a60 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
21a70 3a 20 2e 63 64 20 44 49 52 45 43 54 4f 52 59 5c  : .cd DIRECTORY\
21a80 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
21a90 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
21aa0 0a 0a 20 20 2f 2a 20 54 68 65 20 75 6e 64 6f 63  ..  /* The undoc
21ab0 75 6d 65 6e 74 65 64 20 22 2e 62 72 65 61 6b 70  umented ".breakp
21ac0 6f 69 6e 74 22 20 63 6f 6d 6d 61 6e 64 20 63 61  oint" command ca
21ad0 75 73 65 73 20 61 20 63 61 6c 6c 20 74 6f 20 74  uses a call to t
21ae0 68 65 20 6e 6f 2d 6f 70 0a 20 20 2a 2a 20 72 6f  he no-op.  ** ro
21af0 75 74 69 6e 65 20 6e 61 6d 65 64 20 74 65 73 74  utine named test
21b00 5f 62 72 65 61 6b 70 6f 69 6e 74 28 29 2e 0a 20  _breakpoint().. 
21b10 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 62 27   */.  if( c=='b'
21b20 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
21b30 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62  cmp(azArg[0], "b
21b40 72 65 61 6b 70 6f 69 6e 74 22 2c 20 6e 29 3d 3d  reakpoint", n)==
21b50 30 20 29 7b 0a 20 20 20 20 74 65 73 74 5f 62 72  0 ){.    test_br
21b60 65 61 6b 70 6f 69 6e 74 28 29 3b 0a 20 20 7d 65  eakpoint();.  }e
21b70 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 63  lse..  if( c=='c
21b80 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72  ' && n>=3 && str
21b90 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
21ba0 63 68 61 6e 67 65 73 22 2c 20 6e 29 3d 3d 30 20  changes", n)==0 
21bb0 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d  ){.    if( nArg=
21bc0 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 65 74 4f  =2 ){.      setO
21bd0 72 43 6c 65 61 72 46 6c 61 67 28 70 2c 20 53 48  rClearFlag(p, SH
21be0 46 4c 47 5f 43 6f 75 6e 74 43 68 61 6e 67 65 73  FLG_CountChanges
21bf0 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
21c00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
21c10 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
21c20 20 22 55 73 61 67 65 3a 20 2e 63 68 61 6e 67 65   "Usage: .change
21c30 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20  s on|off\n");.  
21c40 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
21c50 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20  }.  }else..  /* 
21c60 43 61 6e 63 65 6c 20 6f 75 74 70 75 74 20 72 65  Cancel output re
21c70 64 69 72 65 63 74 69 6f 6e 2c 20 69 66 20 69 74  direction, if it
21c80 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 73 65   is currently se
21c90 74 20 28 62 79 20 2e 74 65 73 74 63 61 73 65 29  t (by .testcase)
21ca0 0a 20 20 2a 2a 20 54 68 65 6e 20 72 65 61 64 20  .  ** Then read 
21cb0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
21cc0 68 65 20 74 65 73 74 63 61 73 65 2d 6f 75 74 2e  he testcase-out.
21cd0 74 78 74 20 66 69 6c 65 20 61 6e 64 20 63 6f 6d  txt file and com
21ce0 70 61 72 65 20 61 67 61 69 6e 73 74 0a 20 20 2a  pare against.  *
21cf0 2a 20 61 7a 41 72 67 5b 31 5d 2e 20 20 49 66 20  * azArg[1].  If 
21d00 74 68 65 72 65 20 61 72 65 20 64 69 66 66 65 72  there are differ
21d10 65 6e 63 65 73 2c 20 72 65 70 6f 72 74 20 61 6e  ences, report an
21d20 20 65 72 72 6f 72 20 61 6e 64 20 65 78 69 74 2e   error and exit.
21d30 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27  .  */.  if( c=='
21d40 63 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74  c' && n>=3 && st
21d50 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
21d60 22 63 68 65 63 6b 22 2c 20 6e 29 3d 3d 30 20 29  "check", n)==0 )
21d70 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 52 65 73  {.    char *zRes
21d80 20 3d 20 30 3b 0a 20 20 20 20 6f 75 74 70 75 74   = 0;.    output
21d90 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69  _reset(p);.    i
21da0 66 28 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20  f( nArg!=2 ){.  
21db0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
21dc0 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
21dd0 63 68 65 63 6b 20 47 4c 4f 42 2d 50 41 54 54 45  check GLOB-PATTE
21de0 52 4e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  RN\n");.      rc
21df0 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 2;.    }else 
21e00 69 66 28 20 28 7a 52 65 73 20 3d 20 72 65 61 64  if( (zRes = read
21e10 46 69 6c 65 28 22 74 65 73 74 63 61 73 65 2d 6f  File("testcase-o
21e20 75 74 2e 74 78 74 22 2c 20 30 29 29 3d 3d 30 20  ut.txt", 0))==0 
21e30 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
21e40 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
21e50 6f 72 3a 20 63 61 6e 6e 6f 74 20 72 65 61 64 20  or: cannot read 
21e60 27 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78  'testcase-out.tx
21e70 74 27 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  t'\n");.      rc
21e80 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 2;.    }else 
21e90 69 66 28 20 74 65 73 74 63 61 73 65 5f 67 6c 6f  if( testcase_glo
21ea0 62 28 61 7a 41 72 67 5b 31 5d 2c 7a 52 65 73 29  b(azArg[1],zRes)
21eb0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66  ==0 ){.      utf
21ec0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
21ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21ee0 20 20 22 74 65 73 74 63 61 73 65 2d 25 73 20 46    "testcase-%s F
21ef0 41 49 4c 45 44 5c 6e 20 45 78 70 65 63 74 65 64  AILED\n Expected
21f00 3a 20 5b 25 73 5d 5c 6e 20 20 20 20 20 20 47 6f  : [%s]\n      Go
21f10 74 3a 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20  t: [%s]\n",.    
21f20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e               p->
21f30 7a 54 65 73 74 63 61 73 65 2c 20 61 7a 41 72 67  zTestcase, azArg
21f40 5b 31 5d 2c 20 7a 52 65 73 29 3b 0a 20 20 20 20  [1], zRes);.    
21f50 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65    rc = 1;.    }e
21f60 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  lse{.      utf8_
21f70 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22  printf(stdout, "
21f80 74 65 73 74 63 61 73 65 2d 25 73 20 6f 6b 5c 6e  testcase-%s ok\n
21f90 22 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73 65 29  ", p->zTestcase)
21fa0 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 65 63  ;.      p->nChec
21fb0 6b 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  k++;.    }.    s
21fc0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 52 65 73  qlite3_free(zRes
21fd0 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66  );.  }else..  if
21fe0 28 20 63 3d 3d 27 63 27 20 26 26 20 73 74 72 6e  ( c=='c' && strn
21ff0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63  cmp(azArg[0], "c
22000 6c 6f 6e 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  lone", n)==0 ){.
22010 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
22020 29 7b 0a 20 20 20 20 20 20 74 72 79 54 6f 43 6c  ){.      tryToCl
22030 6f 6e 65 28 70 2c 20 61 7a 41 72 67 5b 31 5d 29  one(p, azArg[1])
22040 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
22050 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
22060 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 63  derr, "Usage: .c
22070 6c 6f 6e 65 20 46 49 4c 45 4e 41 4d 45 5c 6e 22  lone FILENAME\n"
22080 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
22090 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
220a0 20 20 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20    if( c=='d' && 
220b0 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>1 && strncmp(a
220c0 7a 41 72 67 5b 30 5d 2c 20 22 64 61 74 61 62 61  zArg[0], "databa
220d0 73 65 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ses", n)==0 ){. 
220e0 20 20 20 53 68 65 6c 6c 53 74 61 74 65 20 64 61     ShellState da
220f0 74 61 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45  ta;.    char *zE
22100 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 6f  rrMsg = 0;.    o
22110 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20  pen_db(p, 0);.  
22120 20 20 6d 65 6d 63 70 79 28 26 64 61 74 61 2c 20    memcpy(&data, 
22130 70 2c 20 73 69 7a 65 6f 66 28 64 61 74 61 29 29  p, sizeof(data))
22140 3b 0a 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48  ;.    data.showH
22150 65 61 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 64  eader = 0;.    d
22160 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61  ata.cMode = data
22170 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73  .mode = MODE_Lis
22180 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  t;.    sqlite3_s
22190 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64  nprintf(sizeof(d
221a0 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72  ata.colSeparator
221b0 29 2c 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61  ),data.colSepara
221c0 74 6f 72 2c 22 3a 20 22 29 3b 0a 20 20 20 20 64  tor,": ");.    d
221d0 61 74 61 2e 63 6e 74 20 3d 20 30 3b 0a 20 20 20  ata.cnt = 0;.   
221e0 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
221f0 3e 64 62 2c 20 22 53 45 4c 45 43 54 20 6e 61 6d  >db, "SELECT nam
22200 65 2c 20 66 69 6c 65 20 46 52 4f 4d 20 70 72 61  e, file FROM pra
22210 67 6d 61 5f 64 61 74 61 62 61 73 65 5f 6c 69 73  gma_database_lis
22220 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t",.            
22230 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26       callback, &
22240 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b  data, &zErrMsg);
22250 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67  .    if( zErrMsg
22260 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
22270 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72  rintf(stderr,"Er
22280 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72  ror: %s\n", zErr
22290 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Msg);.      sqli
222a0 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
222b0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
222c0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
222d0 20 20 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20    if( c=='d' && 
222e0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
222f0 2c 20 22 64 62 69 6e 66 6f 22 2c 20 6e 29 3d 3d  , "dbinfo", n)==
22300 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 68  0 ){.    rc = sh
22310 65 6c 6c 5f 64 62 69 6e 66 6f 5f 63 6f 6d 6d 61  ell_dbinfo_comma
22320 6e 64 28 70 2c 20 6e 41 72 67 2c 20 61 7a 41 72  nd(p, nArg, azAr
22330 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  g);.  }else..  i
22340 66 28 20 63 3d 3d 27 64 27 20 26 26 20 73 74 72  f( c=='d' && str
22350 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
22360 64 75 6d 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  dump", n)==0 ){.
22370 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
22380 7a 4c 69 6b 65 20 3d 20 30 3b 0a 20 20 20 20 69  zLike = 0;.    i
22390 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 73 61  nt i;.    int sa
223a0 76 65 64 53 68 6f 77 48 65 61 64 65 72 20 3d 20  vedShowHeader = 
223b0 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 3b 0a 20  p->showHeader;. 
223c0 20 20 20 53 68 65 6c 6c 43 6c 65 61 72 46 6c 61     ShellClearFla
223d0 67 28 70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65  g(p, SHFLG_Prese
223e0 72 76 65 52 6f 77 69 64 7c 53 48 46 4c 47 5f 4e  rveRowid|SHFLG_N
223f0 65 77 6c 69 6e 65 73 29 3b 0a 20 20 20 20 66 6f  ewlines);.    fo
22400 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=1; i<nArg; i
22410 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 61  ++){.      if( a
22420 7a 41 72 67 5b 69 5d 5b 30 5d 3d 3d 27 2d 27 20  zArg[i][0]=='-' 
22430 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74  ){.        const
22440 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67   char *z = azArg
22450 5b 69 5d 2b 31 3b 0a 20 20 20 20 20 20 20 20 69  [i]+1;.        i
22460 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a  f( z[0]=='-' ) z
22470 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ++;.        if( 
22480 73 74 72 63 6d 70 28 7a 2c 22 70 72 65 73 65 72  strcmp(z,"preser
22490 76 65 2d 72 6f 77 69 64 73 22 29 3d 3d 30 20 29  ve-rowids")==0 )
224a0 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
224b0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
224c0 45 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f  E.          raw_
224d0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
224e0 54 68 65 20 2d 2d 70 72 65 73 65 72 76 65 2d 72  The --preserve-r
224f0 6f 77 69 64 73 20 6f 70 74 69 6f 6e 20 69 73 20  owids option is 
22500 6e 6f 74 20 63 6f 6d 70 61 74 69 62 6c 65 22 0a  not compatible".
22510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22520 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 77               " w
22530 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ith SQLITE_OMIT_
22540 56 49 52 54 55 41 4c 54 41 42 4c 45 5c 6e 22 29  VIRTUALTABLE\n")
22550 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  ;.          rc =
22560 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   1;.          go
22570 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
22580 65 78 69 74 3b 0a 23 65 6c 73 65 0a 20 20 20 20  exit;.#else.    
22590 20 20 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c        ShellSetFl
225a0 61 67 28 70 2c 20 53 48 46 4c 47 5f 50 72 65 73  ag(p, SHFLG_Pres
225b0 65 72 76 65 52 6f 77 69 64 29 3b 0a 23 65 6e 64  erveRowid);.#end
225c0 69 66 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  if.        }else
225d0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
225e0 63 6d 70 28 7a 2c 22 6e 65 77 6c 69 6e 65 73 22  cmp(z,"newlines"
225f0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
22600 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28 70    ShellSetFlag(p
22610 2c 20 53 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73  , SHFLG_Newlines
22620 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
22630 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
22640 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
22650 73 74 64 65 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e  stderr, "Unknown
22660 20 6f 70 74 69 6f 6e 20 5c 22 25 73 5c 22 20 6f   option \"%s\" o
22670 6e 20 5c 22 2e 64 75 6d 70 5c 22 5c 6e 22 2c 20  n \".dump\"\n", 
22680 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20  azArg[i]);.     
22690 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
226a0 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
226b0 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
226c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
226d0 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b 65 20 29  else if( zLike )
226e0 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
226f0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
22700 61 67 65 3a 20 2e 64 75 6d 70 20 3f 2d 2d 70 72  age: .dump ?--pr
22710 65 73 65 72 76 65 2d 72 6f 77 69 64 73 3f 20 22  eserve-rowids? "
22720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22730 20 20 20 20 20 20 20 20 20 20 20 20 22 3f 2d 2d              "?--
22740 6e 65 77 6c 69 6e 65 73 3f 20 3f 4c 49 4b 45 2d  newlines? ?LIKE-
22750 50 41 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20  PATTERN?\n");.  
22760 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
22770 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
22780 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
22790 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
227a0 20 20 20 7a 4c 69 6b 65 20 3d 20 61 7a 41 72 67     zLike = azArg
227b0 5b 69 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  [i];.      }.   
227c0 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70   }.    open_db(p
227d0 2c 20 30 29 3b 0a 20 20 20 20 2f 2a 20 57 68 65  , 0);.    /* Whe
227e0 6e 20 70 6c 61 79 69 6e 67 20 62 61 63 6b 20 61  n playing back a
227f0 20 22 64 75 6d 70 22 2c 20 74 68 65 20 63 6f 6e   "dump", the con
22800 74 65 6e 74 20 6d 69 67 68 74 20 61 70 70 65 61  tent might appea
22810 72 20 69 6e 20 61 6e 20 6f 72 64 65 72 0a 20 20  r in an order.  
22820 20 20 2a 2a 20 77 68 69 63 68 20 63 61 75 73 65    ** which cause
22830 73 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  s immediate fore
22840 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
22850 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61 74  nts to be violat
22860 65 64 2e 0a 20 20 20 20 2a 2a 20 53 6f 20 64 69  ed..    ** So di
22870 73 61 62 6c 65 20 66 6f 72 65 69 67 6e 2d 6b 65  sable foreign-ke
22880 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 65 6e 66  y constraint enf
22890 6f 72 63 65 6d 65 6e 74 20 74 6f 20 70 72 65 76  orcement to prev
228a0 65 6e 74 20 70 72 6f 62 6c 65 6d 73 2e 20 2a 2f  ent problems. */
228b0 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
228c0 70 2d 3e 6f 75 74 2c 20 22 50 52 41 47 4d 41 20  p->out, "PRAGMA 
228d0 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 46 46  foreign_keys=OFF
228e0 3b 5c 6e 22 29 3b 0a 20 20 20 20 72 61 77 5f 70  ;\n");.    raw_p
228f0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 42  rintf(p->out, "B
22900 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e  EGIN TRANSACTION
22910 3b 5c 6e 22 29 3b 0a 20 20 20 20 70 2d 3e 77 72  ;\n");.    p->wr
22920 69 74 61 62 6c 65 53 63 68 65 6d 61 20 3d 20 30  itableSchema = 0
22930 3b 0a 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61  ;.    p->showHea
22940 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 2f 2a 20  der = 0;.    /* 
22950 53 65 74 20 77 72 69 74 61 62 6c 65 5f 73 63 68  Set writable_sch
22960 65 6d 61 3d 4f 4e 20 73 69 6e 63 65 20 64 6f 69  ema=ON since doi
22970 6e 67 20 73 6f 20 66 6f 72 63 65 73 20 53 51 4c  ng so forces SQL
22980 69 74 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a  ite to initializ
22990 65 0a 20 20 20 20 2a 2a 20 61 73 20 6d 75 63 68  e.    ** as much
229a0 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 61   of the schema a
229b0 73 20 69 74 20 63 61 6e 20 65 76 65 6e 20 69 66  s it can even if
229c0 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
229d0 65 72 20 74 61 62 6c 65 20 69 73 0a 20 20 20 20  er table is.    
229e0 2a 2a 20 63 6f 72 72 75 70 74 2e 20 2a 2f 0a 20  ** corrupt. */. 
229f0 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28     sqlite3_exec(
22a00 70 2d 3e 64 62 2c 20 22 53 41 56 45 50 4f 49 4e  p->db, "SAVEPOIN
22a10 54 20 64 75 6d 70 3b 20 50 52 41 47 4d 41 20 77  T dump; PRAGMA w
22a20 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
22a30 4e 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  N", 0, 0, 0);.  
22a40 20 20 70 2d 3e 6e 45 72 72 20 3d 20 30 3b 0a 20    p->nErr = 0;. 
22a50 20 20 20 69 66 28 20 7a 4c 69 6b 65 3d 3d 30 20     if( zLike==0 
22a60 29 7b 0a 20 20 20 20 20 20 72 75 6e 5f 73 63 68  ){.      run_sch
22a70 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 70  ema_dump_query(p
22a80 2c 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43  ,.        "SELEC
22a90 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73 71  T name, type, sq
22aa0 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
22ab0 73 74 65 72 20 22 0a 20 20 20 20 20 20 20 20 22  ster ".        "
22ac0 57 48 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55  WHERE sql NOT NU
22ad0 4c 4c 20 41 4e 44 20 74 79 70 65 3d 3d 27 74 61  LL AND type=='ta
22ae0 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 21 3d 27  ble' AND name!='
22af0 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 27  sqlite_sequence'
22b00 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ".      );.     
22b10 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70   run_schema_dump
22b20 5f 71 75 65 72 79 28 70 2c 0a 20 20 20 20 20 20  _query(p,.      
22b30 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    "SELECT name, 
22b40 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73  type, sql FROM s
22b50 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 0a 20  qlite_master ". 
22b60 20 20 20 20 20 20 20 22 57 48 45 52 45 20 6e 61         "WHERE na
22b70 6d 65 3d 3d 27 73 71 6c 69 74 65 5f 73 65 71 75  me=='sqlite_sequ
22b80 65 6e 63 65 27 22 0a 20 20 20 20 20 20 29 3b 0a  ence'".      );.
22b90 20 20 20 20 20 20 72 75 6e 5f 74 61 62 6c 65 5f        run_table_
22ba0 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 0a 20 20  dump_query(p,.  
22bb0 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 73 71        "SELECT sq
22bc0 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
22bd0 73 74 65 72 20 22 0a 20 20 20 20 20 20 20 20 22  ster ".        "
22be0 57 48 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55  WHERE sql NOT NU
22bf0 4c 4c 20 41 4e 44 20 74 79 70 65 20 49 4e 20 28  LL AND type IN (
22c00 27 69 6e 64 65 78 27 2c 27 74 72 69 67 67 65 72  'index','trigger
22c10 27 2c 27 76 69 65 77 27 29 22 2c 20 30 0a 20 20  ','view')", 0.  
22c20 20 20 20 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65      );.    }else
22c30 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 53  {.      char *zS
22c40 71 6c 3b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d  ql;.      zSql =
22c50 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
22c60 28 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43  (.        "SELEC
22c70 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73 71  T name, type, sq
22c80 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
22c90 73 74 65 72 20 22 0a 20 20 20 20 20 20 20 20 22  ster ".        "
22ca0 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d 65 20 4c  WHERE tbl_name L
22cb0 49 4b 45 20 25 51 20 41 4e 44 20 74 79 70 65 3d  IKE %Q AND type=
22cc0 3d 27 74 61 62 6c 65 27 22 0a 20 20 20 20 20 20  ='table'".      
22cd0 20 20 22 20 20 41 4e 44 20 73 71 6c 20 4e 4f 54    "  AND sql NOT
22ce0 20 4e 55 4c 4c 22 2c 20 7a 4c 69 6b 65 29 3b 0a   NULL", zLike);.
22cf0 20 20 20 20 20 20 72 75 6e 5f 73 63 68 65 6d 61        run_schema
22d00 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 7a 53  _dump_query(p,zS
22d10 71 6c 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ql);.      sqlit
22d20 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
22d30 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69       zSql = sqli
22d40 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20  te3_mprintf(.   
22d50 20 20 20 20 20 22 53 45 4c 45 43 54 20 73 71 6c       "SELECT sql
22d60 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
22d70 74 65 72 20 22 0a 20 20 20 20 20 20 20 20 22 57  ter ".        "W
22d80 48 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c  HERE sql NOT NUL
22d90 4c 22 0a 20 20 20 20 20 20 20 20 22 20 20 41 4e  L".        "  AN
22da0 44 20 74 79 70 65 20 49 4e 20 28 27 69 6e 64 65  D type IN ('inde
22db0 78 27 2c 27 74 72 69 67 67 65 72 27 2c 27 76 69  x','trigger','vi
22dc0 65 77 27 29 22 0a 20 20 20 20 20 20 20 20 22 20  ew')".        " 
22dd0 20 41 4e 44 20 74 62 6c 5f 6e 61 6d 65 20 4c 49   AND tbl_name LI
22de0 4b 45 20 25 51 22 2c 20 7a 4c 69 6b 65 29 3b 0a  KE %Q", zLike);.
22df0 20 20 20 20 20 20 72 75 6e 5f 74 61 62 6c 65 5f        run_table_
22e00 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 20 7a 53  dump_query(p, zS
22e10 71 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  ql, 0);.      sq
22e20 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29  lite3_free(zSql)
22e30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
22e40 70 2d 3e 77 72 69 74 61 62 6c 65 53 63 68 65 6d  p->writableSchem
22e50 61 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  a ){.      raw_p
22e60 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 50  rintf(p->out, "P
22e70 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
22e80 63 68 65 6d 61 3d 4f 46 46 3b 5c 6e 22 29 3b 0a  chema=OFF;\n");.
22e90 20 20 20 20 20 20 70 2d 3e 77 72 69 74 61 62 6c        p->writabl
22ea0 65 53 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20 20  eSchema = 0;.   
22eb0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65   }.    sqlite3_e
22ec0 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47  xec(p->db, "PRAG
22ed0 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
22ee0 6d 61 3d 4f 46 46 3b 22 2c 20 30 2c 20 30 2c 20  ma=OFF;", 0, 0, 
22ef0 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
22f00 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 52 45 4c  exec(p->db, "REL
22f10 45 41 53 45 20 64 75 6d 70 3b 22 2c 20 30 2c 20  EASE dump;", 0, 
22f20 30 2c 20 30 29 3b 0a 20 20 20 20 72 61 77 5f 70  0, 0);.    raw_p
22f30 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 70 2d  rintf(p->out, p-
22f40 3e 6e 45 72 72 20 3f 20 22 52 4f 4c 4c 42 41 43  >nErr ? "ROLLBAC
22f50 4b 3b 20 2d 2d 20 64 75 65 20 74 6f 20 65 72 72  K; -- due to err
22f60 6f 72 73 5c 6e 22 20 3a 20 22 43 4f 4d 4d 49 54  ors\n" : "COMMIT
22f70 3b 5c 6e 22 29 3b 0a 20 20 20 20 70 2d 3e 73 68  ;\n");.    p->sh
22f80 6f 77 48 65 61 64 65 72 20 3d 20 73 61 76 65 64  owHeader = saved
22f90 53 68 6f 77 48 65 61 64 65 72 3b 0a 20 20 7d 65  ShowHeader;.  }e
22fa0 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65  lse..  if( c=='e
22fb0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
22fc0 72 67 5b 30 5d 2c 20 22 65 63 68 6f 22 2c 20 6e  rg[0], "echo", n
22fd0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
22fe0 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
22ff0 20 73 65 74 4f 72 43 6c 65 61 72 46 6c 61 67 28   setOrClearFlag(
23000 70 2c 20 53 48 46 4c 47 5f 45 63 68 6f 2c 20 61  p, SHFLG_Echo, a
23010 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
23020 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
23030 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
23040 73 61 67 65 3a 20 2e 65 63 68 6f 20 6f 6e 7c 6f  sage: .echo on|o
23050 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  ff\n");.      rc
23060 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 1;.    }.  }e
23070 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65  lse..  if( c=='e
23080 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
23090 72 67 5b 30 5d 2c 20 22 65 71 70 22 2c 20 6e 29  rg[0], "eqp", n)
230a0 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
230b0 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
230c0 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67  if( strcmp(azArg
230d0 5b 31 5d 2c 22 66 75 6c 6c 22 29 3d 3d 30 20 29  [1],"full")==0 )
230e0 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 61 75 74  {.        p->aut
230f0 6f 45 51 50 20 3d 20 32 3b 0a 20 20 20 20 20 20  oEQP = 2;.      
23100 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
23110 2d 3e 61 75 74 6f 45 51 50 20 3d 20 62 6f 6f 6c  ->autoEQP = bool
23120 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  eanValue(azArg[1
23130 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
23140 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77  }else{.      raw
23150 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
23160 22 55 73 61 67 65 3a 20 2e 65 71 70 20 6f 6e 7c  "Usage: .eqp on|
23170 6f 66 66 7c 66 75 6c 6c 5c 6e 22 29 3b 0a 20 20  off|full\n");.  
23180 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
23190 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
231a0 20 63 3d 3d 27 65 27 20 26 26 20 73 74 72 6e 63   c=='e' && strnc
231b0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 65 78  mp(azArg[0], "ex
231c0 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  it", n)==0 ){.  
231d0 20 20 69 66 28 20 6e 41 72 67 3e 31 20 26 26 20    if( nArg>1 && 
231e0 28 72 63 20 3d 20 28 69 6e 74 29 69 6e 74 65 67  (rc = (int)integ
231f0 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d  erValue(azArg[1]
23200 29 29 21 3d 30 20 29 20 65 78 69 74 28 72 63 29  ))!=0 ) exit(rc)
23210 3b 0a 20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20  ;.    rc = 2;.  
23220 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 54 68 65 20  }else..  /* The 
23230 22 2e 65 78 70 6c 61 69 6e 22 20 63 6f 6d 6d 61  ".explain" comma
23240 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 20  nd is automatic 
23250 6e 6f 77 2e 20 20 49 74 20 69 73 20 6c 61 72 67  now.  It is larg
23260 65 6c 79 20 70 6f 69 6e 74 6c 65 73 73 2e 20 20  ely pointless.  
23270 49 74 0a 20 20 2a 2a 20 72 65 74 61 69 6e 65 64  It.  ** retained
23280 20 70 75 72 65 6c 79 20 66 6f 72 20 62 61 63 6b   purely for back
23290 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c  wards compatibil
232a0 69 74 79 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d  ity */.  if( c==
232b0 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'e' && strncmp(a
232c0 7a 41 72 67 5b 30 5d 2c 20 22 65 78 70 6c 61 69  zArg[0], "explai
232d0 6e 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  n", n)==0 ){.   
232e0 20 69 6e 74 20 76 61 6c 20 3d 20 31 3b 0a 20 20   int val = 1;.  
232f0 20 20 69 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b    if( nArg>=2 ){
23300 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d  .      if( strcm
23310 70 28 61 7a 41 72 67 5b 31 5d 2c 22 61 75 74 6f  p(azArg[1],"auto
23320 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
23330 20 76 61 6c 20 3d 20 39 39 3b 0a 20 20 20 20 20   val = 99;.     
23340 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
23350 76 61 6c 20 3d 20 20 62 6f 6f 6c 65 61 6e 56 61  val =  booleanVa
23360 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  lue(azArg[1]);. 
23370 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
23380 20 69 66 28 20 76 61 6c 3d 3d 31 20 26 26 20 70   if( val==1 && p
23390 2d 3e 6d 6f 64 65 21 3d 4d 4f 44 45 5f 45 78 70  ->mode!=MODE_Exp
233a0 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 70 2d  lain ){.      p-
233b0 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 20 3d 20 70 2d  >normalMode = p-
233c0 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20 70 2d 3e  >mode;.      p->
233d0 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 45 78 70 6c  mode = MODE_Expl
233e0 61 69 6e 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75  ain;.      p->au
233f0 74 6f 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20  toExplain = 0;. 
23400 20 20 20 7d 65 6c 73 65 20 69 66 28 20 76 61 6c     }else if( val
23410 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
23420 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45   p->mode==MODE_E
23430 78 70 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f 64 65  xplain ) p->mode
23440 20 3d 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65   = p->normalMode
23450 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45  ;.      p->autoE
23460 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20 20  xplain = 0;.    
23470 7d 65 6c 73 65 20 69 66 28 20 76 61 6c 3d 3d 39  }else if( val==9
23480 39 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  9 ){.      if( p
23490 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70  ->mode==MODE_Exp
234a0 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f 64 65 20 3d  lain ) p->mode =
234b0 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 0a   p->normalMode;.
234c0 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45 78 70        p->autoExp
234d0 6c 61 69 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  lain = 1;.    }.
234e0 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
234f0 3d 3d 27 66 27 20 26 26 20 73 74 72 6e 63 6d 70  =='f' && strncmp
23500 28 61 7a 41 72 67 5b 30 5d 2c 20 22 66 75 6c 6c  (azArg[0], "full
23510 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d 30 20 29  schema", n)==0 )
23520 7b 0a 20 20 20 20 53 68 65 6c 6c 53 74 61 74 65  {.    ShellState
23530 20 64 61 74 61 3b 0a 20 20 20 20 63 68 61 72 20   data;.    char 
23540 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  *zErrMsg = 0;.  
23550 20 20 69 6e 74 20 64 6f 53 74 61 74 73 20 3d 20    int doStats = 
23560 30 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 64  0;.    memcpy(&d
23570 61 74 61 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64  ata, p, sizeof(d
23580 61 74 61 29 29 3b 0a 20 20 20 20 64 61 74 61 2e  ata));.    data.
23590 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a  showHeader = 0;.
235a0 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d      data.cMode =
235b0 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44   data.mode = MOD
235c0 45 5f 53 65 6d 69 3b 0a 20 20 20 20 69 66 28 20  E_Semi;.    if( 
235d0 6e 41 72 67 3d 3d 32 20 26 26 20 6f 70 74 69 6f  nArg==2 && optio
235e0 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b 31 5d 2c  nMatch(azArg[1],
235f0 20 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20 20   "indent") ){.  
23600 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d      data.cMode =
23610 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44   data.mode = MOD
23620 45 5f 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20  E_Pretty;.      
23630 6e 41 72 67 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  nArg = 1;.    }.
23640 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 31 20      if( nArg!=1 
23650 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
23660 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
23670 67 65 3a 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20  ge: .fullschema 
23680 3f 2d 2d 69 6e 64 65 6e 74 3f 5c 6e 22 29 3b 0a  ?--indent?\n");.
23690 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
236a0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
236b0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
236c0 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  }.    open_db(p,
236d0 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   0);.    rc = sq
236e0 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
236f0 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
23700 20 73 71 6c 20 46 52 4f 4d 22 0a 20 20 20 20 20   sql FROM".     
23710 20 20 22 20 20 28 53 45 4c 45 43 54 20 73 71 6c    "  (SELECT sql
23720 20 73 71 6c 2c 20 74 79 70 65 20 74 79 70 65 2c   sql, type type,
23730 20 74 62 6c 5f 6e 61 6d 65 20 74 62 6c 5f 6e 61   tbl_name tbl_na
23740 6d 65 2c 20 6e 61 6d 65 20 6e 61 6d 65 2c 20 72  me, name name, r
23750 6f 77 69 64 20 78 22 0a 20 20 20 20 20 20 20 22  owid x".       "
23760 20 20 20 20 20 46 52 4f 4d 20 73 71 6c 69 74 65       FROM sqlite
23770 5f 6d 61 73 74 65 72 20 55 4e 49 4f 4e 20 41 4c  _master UNION AL
23780 4c 22 0a 20 20 20 20 20 20 20 22 20 20 20 53 45  L".       "   SE
23790 4c 45 43 54 20 73 71 6c 2c 20 74 79 70 65 2c 20  LECT sql, type, 
237a0 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20  tbl_name, name, 
237b0 72 6f 77 69 64 20 46 52 4f 4d 20 73 71 6c 69 74  rowid FROM sqlit
237c0 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 22  e_temp_master) "
237d0 0a 20 20 20 20 20 20 20 22 57 48 45 52 45 20 74  .       "WHERE t
237e0 79 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20  ype!='meta' AND 
237f0 73 71 6c 20 4e 4f 54 4e 55 4c 4c 20 41 4e 44 20  sql NOTNULL AND 
23800 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73  name NOT LIKE 's
23810 71 6c 69 74 65 5f 25 27 20 22 0a 20 20 20 20 20  qlite_%' ".     
23820 20 20 22 4f 52 44 45 52 20 42 59 20 72 6f 77 69    "ORDER BY rowi
23830 64 22 2c 0a 20 20 20 20 20 20 20 63 61 6c 6c 62  d",.       callb
23840 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72  ack, &data, &zEr
23850 72 4d 73 67 0a 20 20 20 20 29 3b 0a 20 20 20 20  rMsg.    );.    
23860 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
23870 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  K ){.      sqlit
23880 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
23890 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
238a0 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
238b0 3e 64 62 2c 0a 20 20 20 20 20 20 20 20 20 20 20  >db,.           
238c0 20 20 20 20 22 53 45 4c 45 43 54 20 72 6f 77 69      "SELECT rowi
238d0 64 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  d FROM sqlite_ma
238e0 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20  ster".          
238f0 20 20 20 20 20 22 20 57 48 45 52 45 20 6e 61 6d       " WHERE nam
23900 65 20 47 4c 4f 42 20 27 73 71 6c 69 74 65 5f 73  e GLOB 'sqlite_s
23910 74 61 74 5b 31 33 34 5d 27 22 2c 0a 20 20 20 20  tat[134]'",.    
23920 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26             -1, &
23930 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20  pStmt, 0);.     
23940 20 64 6f 53 74 61 74 73 20 3d 20 73 71 6c 69 74   doStats = sqlit
23950 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d  e3_step(pStmt)==
23960 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 20 20  SQLITE_ROW;.    
23970 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
23980 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 7d  ze(pStmt);.    }
23990 0a 20 20 20 20 69 66 28 20 64 6f 53 74 61 74 73  .    if( doStats
239a0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77  ==0 ){.      raw
239b0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
239c0 22 2f 2a 20 4e 6f 20 53 54 41 54 20 74 61 62 6c  "/* No STAT tabl
239d0 65 73 20 61 76 61 69 6c 61 62 6c 65 20 2a 2f 5c  es available */\
239e0 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  n");.    }else{.
239f0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
23a00 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a  (p->out, "ANALYZ
23a10 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  E sqlite_master;
23a20 5c 6e 22 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  \n");.      sqli
23a30 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
23a40 22 53 45 4c 45 43 54 20 27 41 4e 41 4c 59 5a 45  "SELECT 'ANALYZE
23a50 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 27 22   sqlite_master'"
23a60 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23a70 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26       callback, &
23a80 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b  data, &zErrMsg);
23a90 0a 20 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64  .      data.cMod
23aa0 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20  e = data.mode = 
23ab0 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20  MODE_Insert;.   
23ac0 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62     data.zDestTab
23ad0 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61  le = "sqlite_sta
23ae0 74 31 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c  t1";.      shell
23af0 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45  _exec(p->db, "SE
23b00 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
23b10 74 65 5f 73 74 61 74 31 22 2c 0a 20 20 20 20 20  te_stat1",.     
23b20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65 6c              shel
23b30 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  l_callback, &dat
23b40 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  a,&zErrMsg);.   
23b50 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62     data.zDestTab
23b60 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61  le = "sqlite_sta
23b70 74 33 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c  t3";.      shell
23b80 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45  _exec(p->db, "SE
23b90 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
23ba0 74 65 5f 73 74 61 74 33 22 2c 0a 20 20 20 20 20  te_stat3",.     
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65 6c              shel
23bc0 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  l_callback, &dat
23bd0 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  a,&zErrMsg);.   
23be0 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62     data.zDestTab
23bf0 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61  le = "sqlite_sta
23c00 74 34 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c  t4";.      shell
23c10 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45  _exec(p->db, "SE
23c20 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
23c30 74 65 5f 73 74 61 74 34 22 2c 0a 20 20 20 20 20  te_stat4",.     
23c40 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65 6c              shel
23c50 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  l_callback, &dat
23c60 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  a, &zErrMsg);.  
23c70 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
23c80 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20  ->out, "ANALYZE 
23c90 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e  sqlite_master;\n
23ca0 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ");.    }.  }els
23cb0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 68 27 20  e..  if( c=='h' 
23cc0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
23cd0 5b 30 5d 2c 20 22 68 65 61 64 65 72 73 22 2c 20  [0], "headers", 
23ce0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
23cf0 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
23d00 20 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20    p->showHeader 
23d10 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61  = booleanValue(a
23d20 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
23d30 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
23d40 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
23d50 73 61 67 65 3a 20 2e 68 65 61 64 65 72 73 20 6f  sage: .headers o
23d60 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20  n|off\n");.     
23d70 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
23d80 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
23d90 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='h' && strncmp(
23da0 61 7a 41 72 67 5b 30 5d 2c 20 22 68 65 6c 70 22  azArg[0], "help"
23db0 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75  , n)==0 ){.    u
23dc0 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
23dd0 74 2c 20 22 25 73 22 2c 20 7a 48 65 6c 70 29 3b  t, "%s", zHelp);
23de0 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
23df0 63 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d  c=='i' && strncm
23e00 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d 70  p(azArg[0], "imp
23e10 6f 72 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ort", n)==0 ){. 
23e20 20 20 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 3b     char *zTable;
23e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23e40 2a 20 49 6e 73 65 72 74 20 64 61 74 61 20 69 6e  * Insert data in
23e50 74 6f 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  to this table */
23e60 0a 20 20 20 20 63 68 61 72 20 2a 7a 46 69 6c 65  .    char *zFile
23e70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23e80 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 66 69 6c 65   /* Name of file
23e90 20 74 6f 20 65 78 74 72 61 20 63 6f 6e 74 65 6e   to extra conten
23ea0 74 20 66 72 6f 6d 20 2a 2f 0a 20 20 20 20 73 71  t from */.    sq
23eb0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
23ec0 74 20 3d 20 4e 55 4c 4c 3b 20 2f 2a 20 41 20 73  t = NULL; /* A s
23ed0 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20 20  tatement */.    
23ee0 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  int nCol;       
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
23f00 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
23f10 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   in the table */
23f20 0a 20 20 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  .    int nByte; 
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
23f50 74 65 73 20 69 6e 20 61 6e 20 53 51 4c 20 73 74  tes in an SQL st
23f60 72 69 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ring */.    int 
23f70 69 2c 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20  i, j;           
23f80 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
23f90 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20  counters */.    
23fa0 69 6e 74 20 6e 65 65 64 43 6f 6d 6d 69 74 3b 20  int needCommit; 
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23fc0 72 75 65 20 74 6f 20 43 4f 4d 4d 49 54 20 6f 72  rue to COMMIT or
23fd0 20 52 4f 4c 4c 42 41 43 4b 20 61 74 20 65 6e 64   ROLLBACK at end
23fe0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 53 65 70   */.    int nSep
23ff0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24000 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
24010 20 62 79 74 65 73 20 69 6e 20 70 2d 3e 63 6f 6c   bytes in p->col
24020 53 65 70 61 72 61 74 6f 72 5b 5d 20 2a 2f 0a 20  Separator[] */. 
24030 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20     char *zSql;  
24040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24050 2a 20 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  * An SQL stateme
24060 6e 74 20 2a 2f 0a 20 20 20 20 49 6d 70 6f 72 74  nt */.    Import
24070 43 74 78 20 73 43 74 78 3b 20 20 20 20 20 20 20  Ctx sCtx;       
24080 20 20 20 20 20 20 2f 2a 20 52 65 61 64 65 72 20        /* Reader 
24090 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 63  context */.    c
240a0 68 61 72 20 2a 28 53 51 4c 49 54 45 5f 43 44 45  har *(SQLITE_CDE
240b0 43 4c 20 2a 78 52 65 61 64 29 28 49 6d 70 6f 72  CL *xRead)(Impor
240c0 74 43 74 78 2a 29 3b 20 2f 2a 20 46 75 6e 63 20  tCtx*); /* Func 
240d0 74 6f 20 72 65 61 64 20 6f 6e 65 20 76 61 6c 75  to read one valu
240e0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 28 53 51  e */.    int (SQ
240f0 4c 49 54 45 5f 43 44 45 43 4c 20 2a 78 43 6c 6f  LITE_CDECL *xClo
24100 73 65 72 29 28 46 49 4c 45 2a 29 3b 20 20 20 20  ser)(FILE*);    
24110 20 20 2f 2a 20 46 75 6e 63 20 74 6f 20 63 6c 6f    /* Func to clo
24120 73 65 20 66 69 6c 65 20 2a 2f 0a 0a 20 20 20 20  se file */..    
24130 69 66 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20  if( nArg!=3 ){. 
24140 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
24150 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
24160 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42  .import FILE TAB
24170 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20 20 67 6f  LE\n");.      go
24180 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
24190 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  exit;.    }.    
241a0 7a 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d  zFile = azArg[1]
241b0 3b 0a 20 20 20 20 7a 54 61 62 6c 65 20 3d 20 61  ;.    zTable = a
241c0 7a 41 72 67 5b 32 5d 3b 0a 20 20 20 20 73 65 65  zArg[2];.    see
241d0 6e 49 6e 74 65 72 72 75 70 74 20 3d 20 30 3b 0a  nInterrupt = 0;.
241e0 20 20 20 20 6d 65 6d 73 65 74 28 26 73 43 74 78      memset(&sCtx
241f0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 74 78  , 0, sizeof(sCtx
24200 29 29 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28  ));.    open_db(
24210 70 2c 20 30 29 3b 0a 20 20 20 20 6e 53 65 70 20  p, 0);.    nSep 
24220 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 63 6f  = strlen30(p->co
24230 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  lSeparator);.   
24240 20 69 66 28 20 6e 53 65 70 3d 3d 30 20 29 7b 0a   if( nSep==0 ){.
24250 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
24260 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20 20 20  (stderr,.       
24270 20 20 20 20 20 20 20 20 20 20 22 45 72 72 6f 72            "Error
24280 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 63 6f 6c 75 6d  : non-null colum
24290 6e 20 73 65 70 61 72 61 74 6f 72 20 72 65 71 75  n separator requ
242a0 69 72 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c  ired for import\
242b0 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
242c0 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  n 1;.    }.    i
242d0 66 28 20 6e 53 65 70 3e 31 20 29 7b 0a 20 20 20  f( nSep>1 ){.   
242e0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
242f0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 75  derr, "Error: mu
24300 6c 74 69 2d 63 68 61 72 61 63 74 65 72 20 63 6f  lti-character co
24310 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 73 20  lumn separators 
24320 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20 20  not allowed".   
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24340 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72 74 5c     " for import\
24350 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
24360 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  n 1;.    }.    n
24370 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70  Sep = strlen30(p
24380 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
24390 0a 20 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30  .    if( nSep==0
243a0 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
243b0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
243c0 72 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 72 6f  ror: non-null ro
243d0 77 20 73 65 70 61 72 61 74 6f 72 20 72 65 71 75  w separator requ
243e0 69 72 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c  ired for import\
243f0 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
24400 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  n 1;.    }.    i
24410 66 28 20 6e 53 65 70 3d 3d 32 20 26 26 20 70 2d  f( nSep==2 && p-
24420 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 43 73 76 20  >mode==MODE_Csv 
24430 26 26 20 73 74 72 63 6d 70 28 70 2d 3e 72 6f 77  && strcmp(p->row
24440 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43  Separator, SEP_C
24450 72 4c 66 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  rLf)==0 ){.     
24460 20 2f 2a 20 57 68 65 6e 20 69 6d 70 6f 72 74 69   /* When importi
24470 6e 67 20 43 53 56 20 28 6f 6e 6c 79 29 2c 20 69  ng CSV (only), i
24480 66 20 74 68 65 20 72 6f 77 20 73 65 70 61 72 61  f the row separa
24490 74 6f 72 20 69 73 20 73 65 74 20 74 6f 20 74 68  tor is set to th
244a0 65 0a 20 20 20 20 20 20 2a 2a 20 64 65 66 61 75  e.      ** defau
244b0 6c 74 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65  lt output row se
244c0 70 61 72 61 74 6f 72 2c 20 63 68 61 6e 67 65 20  parator, change 
244d0 69 74 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  it to the defaul
244e0 74 20 69 6e 70 75 74 0a 20 20 20 20 20 20 2a 2a  t input.      **
244f0 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20   row separator. 
24500 20 54 68 69 73 20 61 76 6f 69 64 73 20 68 61 76   This avoids hav
24510 69 6e 67 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20  ing to maintain 
24520 64 69 66 66 65 72 65 6e 74 20 69 6e 70 75 74 0a  different input.
24530 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 6f 75 74        ** and out
24540 70 75 74 20 72 6f 77 20 73 65 70 61 72 61 74 6f  put row separato
24550 72 73 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  rs. */.      sql
24560 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
24570 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72  zeof(p->rowSepar
24580 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70  ator), p->rowSep
24590 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29  arator, SEP_Row)
245a0 3b 0a 20 20 20 20 20 20 6e 53 65 70 20 3d 20 73  ;.      nSep = s
245b0 74 72 6c 65 6e 33 30 28 70 2d 3e 72 6f 77 53 65  trlen30(p->rowSe
245c0 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 7d 0a  parator);.    }.
245d0 20 20 20 20 69 66 28 20 6e 53 65 70 3e 31 20 29      if( nSep>1 )
245e0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
245f0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
24600 72 3a 20 6d 75 6c 74 69 2d 63 68 61 72 61 63 74  r: multi-charact
24610 65 72 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72  er row separator
24620 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20  s not allowed". 
24630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24640 20 20 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72       " for impor
24650 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  t\n");.      ret
24660 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
24670 20 73 43 74 78 2e 7a 46 69 6c 65 20 3d 20 7a 46   sCtx.zFile = zF
24680 69 6c 65 3b 0a 20 20 20 20 73 43 74 78 2e 6e 4c  ile;.    sCtx.nL
24690 69 6e 65 20 3d 20 31 3b 0a 20 20 20 20 69 66 28  ine = 1;.    if(
246a0 20 73 43 74 78 2e 7a 46 69 6c 65 5b 30 5d 3d 3d   sCtx.zFile[0]==
246b0 27 7c 27 20 29 7b 0a 23 69 66 64 65 66 20 53 51  '|' ){.#ifdef SQ
246c0 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a  LITE_OMIT_POPEN.
246d0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
246e0 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
246f0 20 70 69 70 65 73 20 61 72 65 20 6e 6f 74 20 73   pipes are not s
24700 75 70 70 6f 72 74 65 64 20 69 6e 20 74 68 69 73  upported in this
24710 20 4f 53 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72   OS\n");.      r
24720 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20  eturn 1;.#else. 
24730 20 20 20 20 20 73 43 74 78 2e 69 6e 20 3d 20 70       sCtx.in = p
24740 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65 2b  open(sCtx.zFile+
24750 31 2c 20 22 72 22 29 3b 0a 20 20 20 20 20 20 73  1, "r");.      s
24760 43 74 78 2e 7a 46 69 6c 65 20 3d 20 22 3c 70 69  Ctx.zFile = "<pi
24770 70 65 3e 22 3b 0a 20 20 20 20 20 20 78 43 6c 6f  pe>";.      xClo
24780 73 65 72 20 3d 20 70 63 6c 6f 73 65 3b 0a 23 65  ser = pclose;.#e
24790 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ndif.    }else{.
247a0 20 20 20 20 20 20 73 43 74 78 2e 69 6e 20 3d 20        sCtx.in = 
247b0 66 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65  fopen(sCtx.zFile
247c0 2c 20 22 72 62 22 29 3b 0a 20 20 20 20 20 20 78  , "rb");.      x
247d0 43 6c 6f 73 65 72 20 3d 20 66 63 6c 6f 73 65 3b  Closer = fclose;
247e0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
247f0 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 41 73 63  ->mode==MODE_Asc
24800 69 69 20 29 7b 0a 20 20 20 20 20 20 78 52 65 61  ii ){.      xRea
24810 64 20 3d 20 61 73 63 69 69 5f 72 65 61 64 5f 6f  d = ascii_read_o
24820 6e 65 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d 65  ne_field;.    }e
24830 6c 73 65 7b 0a 20 20 20 20 20 20 78 52 65 61 64  lse{.      xRead
24840 20 3d 20 63 73 76 5f 72 65 61 64 5f 6f 6e 65 5f   = csv_read_one_
24850 66 69 65 6c 64 3b 0a 20 20 20 20 7d 0a 20 20 20  field;.    }.   
24860 20 69 66 28 20 73 43 74 78 2e 69 6e 3d 3d 30 20   if( sCtx.in==0 
24870 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
24880 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
24890 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
248a0 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c   \"%s\"\n", zFil
248b0 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  e);.      return
248c0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 43   1;.    }.    sC
248d0 74 78 2e 63 43 6f 6c 53 65 70 20 3d 20 70 2d 3e  tx.cColSep = p->
248e0 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 3b  colSeparator[0];
248f0 0a 20 20 20 20 73 43 74 78 2e 63 52 6f 77 53 65  .    sCtx.cRowSe
24900 70 20 3d 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  p = p->rowSepara
24910 74 6f 72 5b 30 5d 3b 0a 20 20 20 20 7a 53 71 6c  tor[0];.    zSql
24920 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
24930 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  tf("SELECT * FRO
24940 4d 20 25 73 22 2c 20 7a 54 61 62 6c 65 29 3b 0a  M %s", zTable);.
24950 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20      if( zSql==0 
24960 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
24970 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
24980 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  or: out of memor
24990 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 78 43 6c  y\n");.      xCl
249a0 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
249b0 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
249c0 20 20 20 7d 0a 20 20 20 20 6e 42 79 74 65 20 3d     }.    nByte =
249d0 20 73 74 72 6c 65 6e 33 30 28 7a 53 71 6c 29 3b   strlen30(zSql);
249e0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
249f0 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e  3_prepare_v2(p->
24a00 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70  db, zSql, -1, &p
24a10 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6d  Stmt, 0);.    im
24a20 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72  port_append_char
24a30 28 26 73 43 74 78 2c 20 30 29 3b 20 20 20 20 2f  (&sCtx, 0);    /
24a40 2a 20 54 6f 20 65 6e 73 75 72 65 20 73 43 74 78  * To ensure sCtx
24a50 2e 7a 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  .z is allocated 
24a60 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 20 26 26  */.    if( rc &&
24a70 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62   sqlite3_strglob
24a80 28 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a  ("no such table:
24a90 20 2a 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72   *", sqlite3_err
24aa0 6d 73 67 28 70 2d 3e 64 62 29 29 3d 3d 30 20 29  msg(p->db))==0 )
24ab0 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43  {.      char *zC
24ac0 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f  reate = sqlite3_
24ad0 6d 70 72 69 6e 74 66 28 22 43 52 45 41 54 45 20  mprintf("CREATE 
24ae0 54 41 42 4c 45 20 25 73 22 2c 20 7a 54 61 62 6c  TABLE %s", zTabl
24af0 65 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 63  e);.      char c
24b00 53 65 70 20 3d 20 27 28 27 3b 0a 20 20 20 20 20  Sep = '(';.     
24b10 20 77 68 69 6c 65 28 20 78 52 65 61 64 28 26 73   while( xRead(&s
24b20 43 74 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Ctx) ){.        
24b30 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65  zCreate = sqlite
24b40 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 25 63 5c  3_mprintf("%z%c\
24b50 6e 20 20 5c 22 25 77 5c 22 20 54 45 58 54 22 2c  n  \"%w\" TEXT",
24b60 20 7a 43 72 65 61 74 65 2c 20 63 53 65 70 2c 20   zCreate, cSep, 
24b70 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20  sCtx.z);.       
24b80 20 63 53 65 70 20 3d 20 27 2c 27 3b 0a 20 20 20   cSep = ',';.   
24b90 20 20 20 20 20 69 66 28 20 73 43 74 78 2e 63 54       if( sCtx.cT
24ba0 65 72 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65  erm!=sCtx.cColSe
24bb0 70 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  p ) break;.     
24bc0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 53 65   }.      if( cSe
24bd0 70 3d 3d 27 28 27 20 29 7b 0a 20 20 20 20 20 20  p=='(' ){.      
24be0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
24bf0 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20 20  Create);.       
24c00 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43   sqlite3_free(sC
24c10 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 78  tx.z);.        x
24c20 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b  Closer(sCtx.in);
24c30 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
24c40 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25 73 3a  intf(stderr,"%s:
24c50 20 65 6d 70 74 79 20 66 69 6c 65 5c 6e 22 2c 20   empty file\n", 
24c60 73 43 74 78 2e 7a 46 69 6c 65 29 3b 0a 20 20 20  sCtx.zFile);.   
24c70 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
24c80 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 43 72       }.      zCr
24c90 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d  eate = sqlite3_m
24ca0 70 72 69 6e 74 66 28 22 25 7a 5c 6e 29 22 2c 20  printf("%z\n)", 
24cb0 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20  zCreate);.      
24cc0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
24cd0 63 28 70 2d 3e 64 62 2c 20 7a 43 72 65 61 74 65  c(p->db, zCreate
24ce0 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
24cf0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
24d00 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20 69  Create);.      i
24d10 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
24d20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
24d30 65 72 72 2c 20 22 43 52 45 41 54 45 20 54 41 42  err, "CREATE TAB
24d40 4c 45 20 25 73 28 2e 2e 2e 29 20 66 61 69 6c 65  LE %s(...) faile
24d50 64 3a 20 25 73 5c 6e 22 2c 20 7a 54 61 62 6c 65  d: %s\n", zTable
24d60 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24d70 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
24d80 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20  (p->db));.      
24d90 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73    sqlite3_free(s
24da0 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20  Ctx.z);.        
24db0 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29  xCloser(sCtx.in)
24dc0 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
24dd0 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
24de0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
24df0 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
24e00 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d   zSql, -1, &pStm
24e10 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  t, 0);.    }.   
24e20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
24e30 71 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  ql);.    if( rc 
24e40 29 7b 0a 20 20 20 20 20 20 69 66 20 28 70 53 74  ){.      if (pSt
24e50 6d 74 29 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  mt) sqlite3_fina
24e60 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
24e70 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
24e80 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 25 73  tderr,"Error: %s
24e90 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  \n", sqlite3_err
24ea0 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  msg(p->db));.   
24eb0 20 20 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e     xCloser(sCtx.
24ec0 69 6e 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  in);.      retur
24ed0 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  n 1;.    }.    n
24ee0 43 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  Col = sqlite3_co
24ef0 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74  lumn_count(pStmt
24f00 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  );.    sqlite3_f
24f10 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
24f20 20 20 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20      pStmt = 0;. 
24f30 20 20 20 69 66 28 20 6e 43 6f 6c 3d 3d 30 20 29     if( nCol==0 )
24f40 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a 20 6e 6f   return 0; /* no
24f50 20 63 6f 6c 75 6d 6e 73 2c 20 6e 6f 20 65 72 72   columns, no err
24f60 6f 72 20 2a 2f 0a 20 20 20 20 7a 53 71 6c 20 3d  or */.    zSql =
24f70 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36   sqlite3_malloc6
24f80 34 28 20 6e 42 79 74 65 2a 32 20 2b 20 32 30 20  4( nByte*2 + 20 
24f90 2b 20 6e 43 6f 6c 2a 32 20 29 3b 0a 20 20 20 20  + nCol*2 );.    
24fa0 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
24fb0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
24fc0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
24fd0 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22  out of memory\n"
24fe0 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72  );.      xCloser
24ff0 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20  (sCtx.in);.     
25000 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
25010 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
25020 72 69 6e 74 66 28 6e 42 79 74 65 2b 32 30 2c 20  rintf(nByte+20, 
25030 7a 53 71 6c 2c 20 22 49 4e 53 45 52 54 20 49 4e  zSql, "INSERT IN
25040 54 4f 20 5c 22 25 77 5c 22 20 56 41 4c 55 45 53  TO \"%w\" VALUES
25050 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  (?", zTable);.  
25060 20 20 6a 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a    j = strlen30(z
25070 53 71 6c 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Sql);.    for(i=
25080 31 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b  1; i<nCol; i++){
25090 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d  .      zSql[j++]
250a0 20 3d 20 27 2c 27 3b 0a 20 20 20 20 20 20 7a 53   = ',';.      zS
250b0 71 6c 5b 6a 2b 2b 5d 20 3d 20 27 3f 27 3b 0a 20  ql[j++] = '?';. 
250c0 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 5b 6a 2b     }.    zSql[j+
250d0 2b 5d 20 3d 20 27 29 27 3b 0a 20 20 20 20 7a 53  +] = ')';.    zS
250e0 71 6c 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 72  ql[j] = 0;.    r
250f0 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
25100 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53  are_v2(p->db, zS
25110 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  ql, -1, &pStmt, 
25120 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
25130 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20  free(zSql);.    
25140 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
25150 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
25160 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e  rr, "Error: %s\n
25170 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
25180 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
25190 20 69 66 20 28 70 53 74 6d 74 29 20 73 71 6c 69   if (pStmt) sqli
251a0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
251b0 6d 74 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73  mt);.      xClos
251c0 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
251d0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
251e0 20 7d 0a 20 20 20 20 6e 65 65 64 43 6f 6d 6d 69   }.    needCommi
251f0 74 20 3d 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  t = sqlite3_get_
25200 61 75 74 6f 63 6f 6d 6d 69 74 28 70 2d 3e 64 62  autocommit(p->db
25210 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 65 64 43  );.    if( needC
25220 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74 65 33 5f  ommit ) sqlite3_
25230 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 42 45 47  exec(p->db, "BEG
25240 49 4e 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  IN", 0, 0, 0);. 
25250 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 69 6e 74     do{.      int
25260 20 73 74 61 72 74 4c 69 6e 65 20 3d 20 73 43 74   startLine = sCt
25270 78 2e 6e 4c 69 6e 65 3b 0a 20 20 20 20 20 20 66  x.nLine;.      f
25280 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20  or(i=0; i<nCol; 
25290 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68  i++){.        ch
252a0 61 72 20 2a 7a 20 3d 20 78 52 65 61 64 28 26 73  ar *z = xRead(&s
252b0 43 74 78 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a  Ctx);.        /*
252c0 0a 20 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20  .        ** Did 
252d0 77 65 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d  we reach end-of-
252e0 66 69 6c 65 20 62 65 66 6f 72 65 20 66 69 6e 64  file before find
252f0 69 6e 67 20 61 6e 79 20 63 6f 6c 75 6d 6e 73 3f  ing any columns?
25300 0a 20 20 20 20 20 20 20 20 2a 2a 20 49 66 20 73  .        ** If s
25310 6f 2c 20 73 74 6f 70 20 69 6e 73 74 65 61 64 20  o, stop instead 
25320 6f 66 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 20  of NULL filling 
25330 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f  the remaining co
25340 6c 75 6d 6e 73 2e 0a 20 20 20 20 20 20 20 20 2a  lumns..        *
25350 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 3d  /.        if( z=
25360 3d 30 20 26 26 20 69 3d 3d 30 20 29 20 62 72 65  =0 && i==0 ) bre
25370 61 6b 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20  ak;.        /*. 
25380 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20 77 65         ** Did we
25390 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d 66 69   reach end-of-fi
253a0 6c 65 20 4f 52 20 65 6e 64 2d 6f 66 2d 6c 69 6e  le OR end-of-lin
253b0 65 20 62 65 66 6f 72 65 20 66 69 6e 64 69 6e 67  e before finding
253c0 20 61 6e 79 0a 20 20 20 20 20 20 20 20 2a 2a 20   any.        ** 
253d0 63 6f 6c 75 6d 6e 73 20 69 6e 20 41 53 43 49 49  columns in ASCII
253e0 20 6d 6f 64 65 3f 20 20 49 66 20 73 6f 2c 20 73   mode?  If so, s
253f0 74 6f 70 20 69 6e 73 74 65 61 64 20 6f 66 20 4e  top instead of N
25400 55 4c 4c 20 66 69 6c 6c 69 6e 67 0a 20 20 20 20  ULL filling.    
25410 20 20 20 20 2a 2a 20 74 68 65 20 72 65 6d 61 69      ** the remai
25420 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 20 20  ning columns..  
25430 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
25440 20 69 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f   if( p->mode==MO
25450 44 45 5f 41 73 63 69 69 20 26 26 20 28 7a 3d 3d  DE_Ascii && (z==
25460 30 20 7c 7c 20 7a 5b 30 5d 3d 3d 30 29 20 26 26  0 || z[0]==0) &&
25470 20 69 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20   i==0 ) break;. 
25480 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62         sqlite3_b
25490 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  ind_text(pStmt, 
254a0 69 2b 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  i+1, z, -1, SQLI
254b0 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
254c0 20 20 20 20 20 20 20 69 66 28 20 69 3c 6e 43 6f         if( i<nCo
254d0 6c 2d 31 20 26 26 20 73 43 74 78 2e 63 54 65 72  l-1 && sCtx.cTer
254e0 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20  m!=sCtx.cColSep 
254f0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
25500 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
25510 20 22 25 73 3a 25 64 3a 20 65 78 70 65 63 74 65   "%s:%d: expecte
25520 64 20 25 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74  d %d columns but
25530 20 66 6f 75 6e 64 20 25 64 20 2d 20 22 0a 20 20   found %d - ".  
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25550 20 20 20 20 20 20 20 20 22 66 69 6c 6c 69 6e 67          "filling
25560 20 74 68 65 20 72 65 73 74 20 77 69 74 68 20 4e   the rest with N
25570 55 4c 4c 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  ULL\n",.        
25580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25590 20 20 73 43 74 78 2e 7a 46 69 6c 65 2c 20 73 74    sCtx.zFile, st
255a0 61 72 74 4c 69 6e 65 2c 20 6e 43 6f 6c 2c 20 69  artLine, nCol, i
255b0 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  +1);.          i
255c0 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 20   += 2;.         
255d0 20 77 68 69 6c 65 28 20 69 3c 3d 6e 43 6f 6c 20   while( i<=nCol 
255e0 29 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ){ sqlite3_bind_
255f0 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b 20  null(pStmt, i); 
25600 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d  i++; }.        }
25610 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
25620 66 28 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73  f( sCtx.cTerm==s
25630 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 7b 0a 20  Ctx.cColSep ){. 
25640 20 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20         do{.     
25650 20 20 20 20 20 78 52 65 61 64 28 26 73 43 74 78       xRead(&sCtx
25660 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 2b 2b  );.          i++
25670 3b 0a 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65  ;.        }while
25680 28 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73 43  ( sCtx.cTerm==sC
25690 74 78 2e 63 43 6f 6c 53 65 70 20 29 3b 0a 20 20  tx.cColSep );.  
256a0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
256b0 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64  f(stderr, "%s:%d
256c0 3a 20 65 78 70 65 63 74 65 64 20 25 64 20 63 6f  : expected %d co
256d0 6c 75 6d 6e 73 20 62 75 74 20 66 6f 75 6e 64 20  lumns but found 
256e0 25 64 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20  %d - ".         
256f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25700 65 78 74 72 61 73 20 69 67 6e 6f 72 65 64 5c 6e  extras ignored\n
25710 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
25720 20 20 20 20 20 20 20 20 20 20 20 73 43 74 78 2e             sCtx.
25730 7a 46 69 6c 65 2c 20 73 74 61 72 74 4c 69 6e 65  zFile, startLine
25740 2c 20 6e 43 6f 6c 2c 20 69 29 3b 0a 20 20 20 20  , nCol, i);.    
25750 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 69 3e    }.      if( i>
25760 3d 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20 20  =nCol ){.       
25770 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
25780 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 72 63  tmt);.        rc
25790 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74   = sqlite3_reset
257a0 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20  (pStmt);.       
257b0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
257c0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
257d0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
257e0 72 72 2c 20 22 25 73 3a 25 64 3a 20 49 4e 53 45  rr, "%s:%d: INSE
257f0 52 54 20 66 61 69 6c 65 64 3a 20 25 73 5c 6e 22  RT failed: %s\n"
25800 2c 20 73 43 74 78 2e 7a 46 69 6c 65 2c 0a 20 20  , sCtx.zFile,.  
25810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25820 20 20 20 20 73 74 61 72 74 4c 69 6e 65 2c 20 73      startLine, s
25830 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d  qlite3_errmsg(p-
25840 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20 20 7d  >db));.        }
25850 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 77 68  .      }.    }wh
25860 69 6c 65 28 20 73 43 74 78 2e 63 54 65 72 6d 21  ile( sCtx.cTerm!
25870 3d 45 4f 46 20 29 3b 0a 0a 20 20 20 20 78 43 6c  =EOF );..    xCl
25880 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
25890 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
258a0 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 73 71 6c  sCtx.z);.    sql
258b0 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
258c0 74 6d 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65  tmt);.    if( ne
258d0 65 64 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74  edCommit ) sqlit
258e0 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22  e3_exec(p->db, "
258f0 43 4f 4d 4d 49 54 22 2c 20 30 2c 20 30 2c 20 30  COMMIT", 0, 0, 0
25900 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e  );.  }else..#ifn
25910 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
25920 54 41 42 4c 45 0a 20 20 69 66 28 20 63 3d 3d 27  TABLE.  if( c=='
25930 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  i' && strncmp(az
25940 41 72 67 5b 30 5d 2c 20 22 69 6d 70 6f 73 74 65  Arg[0], "imposte
25950 72 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  r", n)==0 ){.   
25960 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20   char *zSql;.   
25970 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 69 73 74 20   char *zCollist 
25980 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
25990 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
259a0 20 20 69 6e 74 20 74 6e 75 6d 20 3d 20 30 3b 0a    int tnum = 0;.
259b0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69      int i;.    i
259c0 66 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20  f( nArg!=3 ){.  
259d0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
259e0 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
259f0 2e 69 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20  .imposter INDEX 
25a00 49 4d 50 4f 53 54 45 52 5c 6e 22 29 3b 0a 20 20  IMPOSTER\n");.  
25a10 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
25a20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
25a30 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
25a40 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
25a50 29 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  );.    zSql = sq
25a60 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53  lite3_mprintf("S
25a70 45 4c 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46  ELECT rootpage F
25a80 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
25a90 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r".             
25aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
25ab0 57 48 45 52 45 20 6e 61 6d 65 3d 27 25 71 27 20  WHERE name='%q' 
25ac0 41 4e 44 20 74 79 70 65 3d 27 69 6e 64 65 78 27  AND type='index'
25ad0 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ", azArg[1]);.  
25ae0 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72    sqlite3_prepar
25af0 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  e_v2(p->db, zSql
25b00 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
25b10 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
25b20 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66  ee(zSql);.    if
25b30 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ( sqlite3_step(p
25b40 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
25b50 57 20 29 7b 0a 20 20 20 20 20 20 74 6e 75 6d 20  W ){.      tnum 
25b60 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
25b70 5f 69 6e 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a  _int(pStmt, 0);.
25b80 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
25b90 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
25ba0 29 3b 0a 20 20 20 20 69 66 28 20 74 6e 75 6d 3d  );.    if( tnum=
25bb0 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  =0 ){.      utf8
25bc0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
25bd0 22 6e 6f 20 73 75 63 68 20 69 6e 64 65 78 3a 20  "no such index: 
25be0 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67  \"%s\"\n", azArg
25bf0 5b 31 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  [1]);.      rc =
25c00 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
25c10 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
25c20 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c  ;.    }.    zSql
25c30 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
25c40 74 66 28 22 50 52 41 47 4d 41 20 69 6e 64 65 78  tf("PRAGMA index
25c50 5f 78 69 6e 66 6f 3d 27 25 71 27 22 2c 20 61 7a  _xinfo='%q'", az
25c60 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 72 63 20  Arg[1]);.    rc 
25c70 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
25c80 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  e_v2(p->db, zSql
25c90 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
25ca0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
25cb0 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 20  ee(zSql);.    i 
25cc0 3d 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  = 0;.    while( 
25cd0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
25ce0 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  mt)==SQLITE_ROW 
25cf0 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4c  ){.      char zL
25d00 61 62 65 6c 5b 32 30 5d 3b 0a 20 20 20 20 20 20  abel[20];.      
25d10 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c  const char *zCol
25d20 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
25d30 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
25d40 65 78 74 28 70 53 74 6d 74 2c 32 29 3b 0a 20 20  ext(pStmt,2);.  
25d50 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 69      i++;.      i
25d60 66 28 20 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20  f( zCol==0 ){.  
25d70 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
25d80 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74  3_column_int(pSt
25d90 6d 74 2c 31 29 3d 3d 2d 31 20 29 7b 0a 20 20 20  mt,1)==-1 ){.   
25da0 20 20 20 20 20 20 20 7a 43 6f 6c 20 3d 20 22 5f         zCol = "_
25db0 52 4f 57 49 44 5f 22 3b 0a 20 20 20 20 20 20 20  ROWID_";.       
25dc0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
25dd0 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
25de0 74 66 28 73 69 7a 65 6f 66 28 7a 4c 61 62 65 6c  tf(sizeof(zLabel
25df0 29 2c 7a 4c 61 62 65 6c 2c 22 65 78 70 72 25 64  ),zLabel,"expr%d
25e00 22 2c 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ",i);.          
25e10 7a 43 6f 6c 20 3d 20 7a 4c 61 62 65 6c 3b 0a 20  zCol = zLabel;. 
25e20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
25e30 0a 20 20 20 20 20 20 69 66 28 20 7a 43 6f 6c 6c  .      if( zColl
25e40 69 73 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ist==0 ){.      
25e50 20 20 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71 6c    zCollist = sql
25e60 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22  ite3_mprintf("\"
25e70 25 77 5c 22 22 2c 20 7a 43 6f 6c 29 3b 0a 20 20  %w\"", zCol);.  
25e80 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
25e90 20 20 20 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71     zCollist = sq
25ea0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
25eb0 7a 2c 5c 22 25 77 5c 22 22 2c 20 7a 43 6f 6c 6c  z,\"%w\"", zColl
25ec0 69 73 74 2c 20 7a 43 6f 6c 29 3b 0a 20 20 20 20  ist, zCol);.    
25ed0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
25ee0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
25ef0 53 74 6d 74 29 3b 0a 20 20 20 20 7a 53 71 6c 20  Stmt);.    zSql 
25f00 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
25f10 66 28 0a 20 20 20 20 20 20 20 20 20 20 22 43 52  f(.          "CR
25f20 45 41 54 45 20 54 41 42 4c 45 20 5c 22 25 77 5c  EATE TABLE \"%w\
25f30 22 28 25 73 2c 50 52 49 4d 41 52 59 20 4b 45 59  "(%s,PRIMARY KEY
25f40 28 25 73 29 29 57 49 54 48 4f 55 54 20 52 4f 57  (%s))WITHOUT ROW
25f50 49 44 22 2c 0a 20 20 20 20 20 20 20 20 20 20 61  ID",.          a
25f60 7a 41 72 67 5b 32 5d 2c 20 7a 43 6f 6c 6c 69 73  zArg[2], zCollis
25f70 74 2c 20 7a 43 6f 6c 6c 69 73 74 29 3b 0a 20 20  t, zCollist);.  
25f80 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
25f90 43 6f 6c 6c 69 73 74 29 3b 0a 20 20 20 20 72 63  Collist);.    rc
25fa0 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f   = sqlite3_test_
25fb0 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
25fc0 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52  ESTCTRL_IMPOSTER
25fd0 2c 20 70 2d 3e 64 62 2c 20 22 6d 61 69 6e 22 2c  , p->db, "main",
25fe0 20 31 2c 20 74 6e 75 6d 29 3b 0a 20 20 20 20 69   1, tnum);.    i
25ff0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
26000 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
26010 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
26020 62 2c 20 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 30  b, zSql, 0, 0, 0
26030 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
26040 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
26050 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d  LITE_TESTCTRL_IM
26060 50 4f 53 54 45 52 2c 20 70 2d 3e 64 62 2c 20 22  POSTER, p->db, "
26070 6d 61 69 6e 22 2c 20 30 2c 20 30 29 3b 0a 20 20  main", 0, 0);.  
26080 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
26090 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
260a0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
260b0 20 69 6e 20 5b 25 73 5d 3a 20 25 73 5c 6e 22 2c   in [%s]: %s\n",
260c0 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 5f 65   zSql, sqlite3_e
260d0 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20  rrmsg(p->db));. 
260e0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
260f0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
26100 73 74 64 6f 75 74 2c 20 22 25 73 3b 5c 6e 22 2c  stdout, "%s;\n",
26110 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20   zSql);.        
26120 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 6f 75  raw_printf(stdou
26130 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 22 57  t,.           "W
26140 41 52 4e 49 4e 47 3a 20 77 72 69 74 69 6e 67 20  ARNING: writing 
26150 74 6f 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74  to an imposter t
26160 61 62 6c 65 20 77 69 6c 6c 20 63 6f 72 72 75 70  able will corrup
26170 74 20 74 68 65 20 69 6e 64 65 78 21 5c 6e 22 0a  t the index!\n".
26180 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20          );.     
26190 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
261a0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
261b0 74 64 65 72 72 2c 20 22 53 51 4c 49 54 45 5f 54  tderr, "SQLITE_T
261c0 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52  ESTCTRL_IMPOSTER
261d0 20 72 65 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20   returns %d\n", 
261e0 72 63 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  rc);.      rc = 
261f0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  1;.    }.    sql
26200 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b  ite3_free(zSql);
26210 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20  .  }else.#endif 
26220 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
26230 54 45 5f 4f 4d 49 54 5f 54 45 53 54 5f 43 4f 4e  TE_OMIT_TEST_CON
26240 54 52 4f 4c 29 20 2a 2f 0a 0a 23 69 66 64 65 66  TROL) */..#ifdef
26250 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
26260 4f 54 52 41 43 45 0a 20 20 69 66 28 20 63 3d 3d  OTRACE.  if( c==
26270 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'i' && strncmp(a
26280 7a 41 72 67 5b 30 5d 2c 20 22 69 6f 74 72 61 63  zArg[0], "iotrac
26290 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  e", n)==0 ){.   
262a0 20 53 51 4c 49 54 45 5f 41 50 49 20 65 78 74 65   SQLITE_API exte
262b0 72 6e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f  rn void (SQLITE_
262c0 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f  CDECL *sqlite3Io
262d0 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
262e0 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 20 20 69 66  r*, ...);.    if
262f0 28 20 69 6f 74 72 61 63 65 20 26 26 20 69 6f 74  ( iotrace && iot
26300 72 61 63 65 21 3d 73 74 64 6f 75 74 20 29 20 66  race!=stdout ) f
26310 63 6c 6f 73 65 28 69 6f 74 72 61 63 65 29 3b 0a  close(iotrace);.
26320 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20 30 3b      iotrace = 0;
26330 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20  .    if( nArg<2 
26340 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
26350 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a 20 20 20  IoTrace = 0;.   
26360 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
26370 70 28 61 7a 41 72 67 5b 31 5d 2c 20 22 2d 22 29  p(azArg[1], "-")
26380 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
26390 69 74 65 33 49 6f 54 72 61 63 65 20 3d 20 69 6f  ite3IoTrace = io
263a0 74 72 61 63 65 50 72 69 6e 74 66 3b 0a 20 20 20  tracePrintf;.   
263b0 20 20 20 69 6f 74 72 61 63 65 20 3d 20 73 74 64     iotrace = std
263c0 6f 75 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  out;.    }else{.
263d0 20 20 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20        iotrace = 
263e0 66 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20  fopen(azArg[1], 
263f0 22 77 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20  "w");.      if( 
26400 69 6f 74 72 61 63 65 3d 3d 30 20 29 7b 0a 20 20  iotrace==0 ){.  
26410 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
26420 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
26430 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22  : cannot open \"
26440 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31  %s\"\n", azArg[1
26450 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  ]);.        sqli
26460 74 65 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a  te3IoTrace = 0;.
26470 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
26480 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
26490 20 20 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72       sqlite3IoTr
264a0 61 63 65 20 3d 20 69 6f 74 72 61 63 65 50 72 69  ace = iotracePri
264b0 6e 74 66 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ntf;.      }.   
264c0 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69   }.  }else.#endi
264d0 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20  f..  if( c=='l' 
264e0 26 26 20 6e 3e 3d 35 20 26 26 20 73 74 72 6e 63  && n>=5 && strnc
264f0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 69  mp(azArg[0], "li
26500 6d 69 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  mits", n)==0 ){.
26510 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
26520 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
26530 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69   const char *zLi
26540 6d 69 74 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61  mitName;   /* Na
26550 6d 65 20 6f 66 20 61 20 6c 69 6d 69 74 20 2a 2f  me of a limit */
26560 0a 20 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69  .       int limi
26570 74 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tCode;          
26580 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 63 6f 64    /* Integer cod
26590 65 20 66 6f 72 20 74 68 61 74 20 6c 69 6d 69 74  e for that limit
265a0 20 2a 2f 0a 20 20 20 20 7d 20 61 4c 69 6d 69 74   */.    } aLimit
265b0 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22  [] = {.      { "
265c0 6c 65 6e 67 74 68 22 2c 20 20 20 20 20 20 20 20  length",        
265d0 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
265e0 49 4d 49 54 5f 4c 45 4e 47 54 48 20 20 20 20 20  IMIT_LENGTH     
265f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26600 2c 0a 20 20 20 20 20 20 7b 20 22 73 71 6c 5f 6c  ,.      { "sql_l
26610 65 6e 67 74 68 22 2c 20 20 20 20 20 20 20 20 20  ength",         
26620 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
26630 53 51 4c 5f 4c 45 4e 47 54 48 20 20 20 20 20 20  SQL_LENGTH      
26640 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
26650 20 20 20 7b 20 22 63 6f 6c 75 6d 6e 22 2c 20 20     { "column",  
26660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
26670 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d  LITE_LIMIT_COLUM
26680 4e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  N               
26690 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
266a0 22 65 78 70 72 5f 64 65 70 74 68 22 2c 20 20 20  "expr_depth",   
266b0 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
266c0 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48  LIMIT_EXPR_DEPTH
266d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266e0 7d 2c 0a 20 20 20 20 20 20 7b 20 22 63 6f 6d 70  },.      { "comp
266f0 6f 75 6e 64 5f 73 65 6c 65 63 74 22 2c 20 20 20  ound_select",   
26700 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54      SQLITE_LIMIT
26710 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54  _COMPOUND_SELECT
26720 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
26730 20 20 20 20 7b 20 22 76 64 62 65 5f 6f 70 22 2c      { "vdbe_op",
26740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
26750 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 44 42 45  QLITE_LIMIT_VDBE
26760 5f 4f 50 20 20 20 20 20 20 20 20 20 20 20 20 20  _OP             
26770 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
26780 20 22 66 75 6e 63 74 69 6f 6e 5f 61 72 67 22 2c   "function_arg",
26790 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
267a0 5f 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f  _LIMIT_FUNCTION_
267b0 41 52 47 20 20 20 20 20 20 20 20 20 20 20 20 20  ARG             
267c0 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 61 74 74   },.      { "att
267d0 61 63 68 65 64 22 2c 20 20 20 20 20 20 20 20 20  ached",         
267e0 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49       SQLITE_LIMI
267f0 54 5f 41 54 54 41 43 48 45 44 20 20 20 20 20 20  T_ATTACHED      
26800 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
26810 20 20 20 20 20 7b 20 22 6c 69 6b 65 5f 70 61 74       { "like_pat
26820 74 65 72 6e 5f 6c 65 6e 67 74 68 22 2c 20 20 20  tern_length",   
26830 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b  SQLITE_LIMIT_LIK
26840 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48  E_PATTERN_LENGTH
26850 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
26860 7b 20 22 76 61 72 69 61 62 6c 65 5f 6e 75 6d 62  { "variable_numb
26870 65 72 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54  er",       SQLIT
26880 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45  E_LIMIT_VARIABLE
26890 5f 4e 55 4d 42 45 52 20 20 20 20 20 20 20 20 20  _NUMBER         
268a0 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 74 72    },.      { "tr
268b0 69 67 67 65 72 5f 64 65 70 74 68 22 2c 20 20 20  igger_depth",   
268c0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d        SQLITE_LIM
268d0 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
268e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
268f0 20 20 20 20 20 20 7b 20 22 77 6f 72 6b 65 72 5f        { "worker_
26900 74 68 72 65 61 64 73 22 2c 20 20 20 20 20 20 20  threads",       
26910 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f   SQLITE_LIMIT_WO
26920 52 4b 45 52 5f 54 48 52 45 41 44 53 20 20 20 20  RKER_THREADS    
26930 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7d          },.    }
26940 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6e 32 3b  ;.    int i, n2;
26950 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
26960 30 29 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67  0);.    if( nArg
26970 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 66 6f 72  ==1 ){.      for
26980 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
26990 65 28 61 4c 69 6d 69 74 29 3b 20 69 2b 2b 29 7b  e(aLimit); i++){
269a0 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
269b0 22 25 32 30 73 20 25 64 5c 6e 22 2c 20 61 4c 69  "%20s %d\n", aLi
269c0 6d 69 74 5b 69 5d 2e 7a 4c 69 6d 69 74 4e 61 6d  mit[i].zLimitNam
269d0 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
269e0 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28    sqlite3_limit(
269f0 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 5d  p->db, aLimit[i]
26a00 2e 6c 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29 29  .limitCode, -1))
26a10 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
26a20 6c 73 65 20 69 66 28 20 6e 41 72 67 3e 33 20 29  lse if( nArg>3 )
26a30 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
26a40 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
26a50 65 3a 20 2e 6c 69 6d 69 74 20 4e 41 4d 45 20 3f  e: .limit NAME ?
26a60 4e 45 57 2d 56 41 4c 55 45 3f 5c 6e 22 29 3b 0a  NEW-VALUE?\n");.
26a70 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
26a80 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
26a90 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
26aa0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
26ab0 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a 20 20   iLimit = -1;.  
26ac0 20 20 20 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33      n2 = strlen3
26ad0 30 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  0(azArg[1]);.   
26ae0 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72     for(i=0; i<Ar
26af0 72 61 79 53 69 7a 65 28 61 4c 69 6d 69 74 29 3b  raySize(aLimit);
26b00 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
26b10 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  f( sqlite3_strni
26b20 63 6d 70 28 61 4c 69 6d 69 74 5b 69 5d 2e 7a 4c  cmp(aLimit[i].zL
26b30 69 6d 69 74 4e 61 6d 65 2c 20 61 7a 41 72 67 5b  imitName, azArg[
26b40 31 5d 2c 20 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  1], n2)==0 ){.  
26b50 20 20 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d          if( iLim
26b60 69 74 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20  it<0 ){.        
26b70 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 69 3b 0a      iLimit = i;.
26b80 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
26b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66  .            utf
26ba0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
26bb0 20 22 61 6d 62 69 67 75 6f 75 73 20 6c 69 6d 69   "ambiguous limi
26bc0 74 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a  t: \"%s\"\n", az
26bd0 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[1]);.       
26be0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
26bf0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65           goto me
26c00 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
26c10 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
26c20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
26c30 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c       if( iLimit<
26c40 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  0 ){.        utf
26c50 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
26c60 20 22 75 6e 6b 6e 6f 77 6e 20 6c 69 6d 69 74 3a   "unknown limit:
26c70 20 5c 22 25 73 5c 22 5c 6e 22 0a 20 20 20 20 20   \"%s\"\n".     
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c90 20 20 20 22 65 6e 74 65 72 20 5c 22 2e 6c 69 6d     "enter \".lim
26ca0 69 74 73 5c 22 20 77 69 74 68 20 6e 6f 20 61 72  its\" with no ar
26cb0 67 75 6d 65 6e 74 73 20 66 6f 72 20 61 20 6c 69  guments for a li
26cc0 73 74 2e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  st.\n",.        
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ce0 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
26cf0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
26d00 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
26d10 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
26d20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 6e 41    }.      if( nA
26d30 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20  rg==3 ){.       
26d40 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70   sqlite3_limit(p
26d50 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69  ->db, aLimit[iLi
26d60 6d 69 74 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 0a  mit].limitCode,.
26d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d80 20 20 20 20 20 20 28 69 6e 74 29 69 6e 74 65 67        (int)integ
26d90 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 32 5d  erValue(azArg[2]
26da0 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
26db0 20 20 70 72 69 6e 74 66 28 22 25 32 30 73 20 25    printf("%20s %
26dc0 64 5c 6e 22 2c 20 61 4c 69 6d 69 74 5b 69 4c 69  d\n", aLimit[iLi
26dd0 6d 69 74 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c  mit].zLimitName,
26de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71  .             sq
26df0 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d 3e 64  lite3_limit(p->d
26e00 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69 74  b, aLimit[iLimit
26e10 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29  ].limitCode, -1)
26e20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
26e30 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26  ..  if( c=='l' &
26e40 26 20 6e 3e 32 20 26 26 20 73 74 72 6e 63 6d 70  & n>2 && strncmp
26e50 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 69 6e 74  (azArg[0], "lint
26e60 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
26e70 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
26e80 20 20 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61 6e     lintDotComman
26e90 64 28 70 2c 20 61 7a 41 72 67 2c 20 6e 41 72 67  d(p, azArg, nArg
26ea0 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e  );.  }else..#ifn
26eb0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26ec0 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
26ed0 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26 20 73   if( c=='l' && s
26ee0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
26ef0 20 22 6c 6f 61 64 22 2c 20 6e 29 3d 3d 30 20 29   "load", n)==0 )
26f00 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
26f10 20 2a 7a 46 69 6c 65 2c 20 2a 7a 50 72 6f 63 3b   *zFile, *zProc;
26f20 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  .    char *zErrM
26f30 73 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  sg = 0;.    if( 
26f40 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20  nArg<2 ){.      
26f50 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
26f60 72 2c 20 22 55 73 61 67 65 3a 20 2e 6c 6f 61 64  r, "Usage: .load
26f70 20 46 49 4c 45 20 3f 45 4e 54 52 59 50 4f 49 4e   FILE ?ENTRYPOIN
26f80 54 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  T?\n");.      rc
26f90 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f   = 1;.      goto
26fa0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
26fb0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 46  it;.    }.    zF
26fc0 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a  ile = azArg[1];.
26fd0 20 20 20 20 7a 50 72 6f 63 20 3d 20 6e 41 72 67      zProc = nArg
26fe0 3e 3d 33 20 3f 20 61 7a 41 72 67 5b 32 5d 20 3a  >=3 ? azArg[2] :
26ff0 20 30 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   0;.    open_db(
27000 70 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20  p, 0);.    rc = 
27010 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
27020 65 6e 73 69 6f 6e 28 70 2d 3e 64 62 2c 20 7a 46  ension(p->db, zF
27030 69 6c 65 2c 20 7a 50 72 6f 63 2c 20 26 7a 45 72  ile, zProc, &zEr
27040 72 4d 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72  rMsg);.    if( r
27050 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
27060 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
27070 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
27080 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  : %s\n", zErrMsg
27090 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
270a0 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  _free(zErrMsg);.
270b0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
270c0 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
270d0 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27  if..  if( c=='l'
270e0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
270f0 67 5b 30 5d 2c 20 22 6c 6f 67 22 2c 20 6e 29 3d  g[0], "log", n)=
27100 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
27110 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72  rg!=2 ){.      r
27120 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
27130 2c 20 22 55 73 61 67 65 3a 20 2e 6c 6f 67 20 46  , "Usage: .log F
27140 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b 0a 20 20 20  ILENAME\n");.   
27150 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
27160 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73  else{.      cons
27170 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 20 3d 20  t char *zFile = 
27180 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20  azArg[1];.      
27190 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
271a0 65 28 70 2d 3e 70 4c 6f 67 29 3b 0a 20 20 20 20  e(p->pLog);.    
271b0 20 20 70 2d 3e 70 4c 6f 67 20 3d 20 6f 75 74 70    p->pLog = outp
271c0 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46 69  ut_file_open(zFi
271d0 6c 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  le);.    }.  }el
271e0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6d 27  se..  if( c=='m'
271f0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
27200 67 5b 30 5d 2c 20 22 6d 6f 64 65 22 2c 20 6e 29  g[0], "mode", n)
27210 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ==0 ){.    const
27220 20 63 68 61 72 20 2a 7a 4d 6f 64 65 20 3d 20 6e   char *zMode = n
27230 41 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31  Arg>=2 ? azArg[1
27240 5d 20 3a 20 22 22 3b 0a 20 20 20 20 69 6e 74 20  ] : "";.    int 
27250 6e 32 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e  n2 = (int)strlen
27260 28 7a 4d 6f 64 65 29 3b 0a 20 20 20 20 69 6e 74  (zMode);.    int
27270 20 63 32 20 3d 20 7a 4d 6f 64 65 5b 30 5d 3b 0a   c2 = zMode[0];.
27280 20 20 20 20 69 66 28 20 63 32 3d 3d 27 6c 27 20      if( c2=='l' 
27290 26 26 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63  && n2>2 && strnc
272a0 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 6e  mp(azArg[1],"lin
272b0 65 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  es",n2)==0 ){.  
272c0 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
272d0 44 45 5f 4c 69 6e 65 3b 0a 20 20 20 20 20 20 73  DE_Line;.      s
272e0 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
272f0 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70  sizeof(p->rowSep
27300 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53  arator), p->rowS
27310 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f  eparator, SEP_Ro
27320 77 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  w);.    }else if
27330 28 20 63 32 3d 3d 27 63 27 20 26 26 20 73 74 72  ( c2=='c' && str
27340 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63  ncmp(azArg[1],"c
27350 6f 6c 75 6d 6e 73 22 2c 6e 32 29 3d 3d 30 20 29  olumns",n2)==0 )
27360 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20  {.      p->mode 
27370 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20  = MODE_Column;. 
27380 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
27390 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
273a0 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70  rowSeparator), p
273b0 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20  ->rowSeparator, 
273c0 53 45 50 5f 52 6f 77 29 3b 0a 20 20 20 20 7d 65  SEP_Row);.    }e
273d0 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 6c 27 20  lse if( c2=='l' 
273e0 26 26 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63  && n2>2 && strnc
273f0 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 73  mp(azArg[1],"lis
27400 74 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20  t",n2)==0 ){.   
27410 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44     p->mode = MOD
27420 45 5f 4c 69 73 74 3b 0a 20 20 20 20 20 20 73 71  E_List;.      sq
27430 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
27440 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61  izeof(p->colSepa
27450 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65  rator), p->colSe
27460 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6c  parator, SEP_Col
27470 75 6d 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  umn);.      sqli
27480 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
27490 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61  eof(p->rowSepara
274a0 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61  tor), p->rowSepa
274b0 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b  rator, SEP_Row);
274c0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
274d0 32 3d 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d  2=='h' && strncm
274e0 70 28 61 7a 41 72 67 5b 31 5d 2c 22 68 74 6d 6c  p(azArg[1],"html
274f0 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
27500 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
27510 5f 48 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c 73 65  _Html;.    }else
27520 20 69 66 28 20 63 32 3d 3d 27 74 27 20 26 26 20   if( c2=='t' && 
27530 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d  strncmp(azArg[1]
27540 2c 22 74 63 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b  ,"tcl",n2)==0 ){
27550 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d  .      p->mode =
27560 20 4d 4f 44 45 5f 54 63 6c 3b 0a 20 20 20 20 20   MODE_Tcl;.     
27570 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
27580 66 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53  f(sizeof(p->colS
27590 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f  eparator), p->co
275a0 6c 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f  lSeparator, SEP_
275b0 53 70 61 63 65 29 3b 0a 20 20 20 20 20 20 73 71  Space);.      sq
275c0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
275d0 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61  izeof(p->rowSepa
275e0 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65  rator), p->rowSe
275f0 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77  parator, SEP_Row
27600 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
27610 20 63 32 3d 3d 27 63 27 20 26 26 20 73 74 72 6e   c2=='c' && strn
27620 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63 73  cmp(azArg[1],"cs
27630 76 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20  v",n2)==0 ){.   
27640 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44     p->mode = MOD
27650 45 5f 43 73 76 3b 0a 20 20 20 20 20 20 73 71 6c  E_Csv;.      sql
27660 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
27670 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72  zeof(p->colSepar
27680 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70  ator), p->colSep
27690 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6d 6d  arator, SEP_Comm
276a0 61 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  a);.      sqlite
276b0 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
276c0 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  f(p->rowSeparato
276d0 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  r), p->rowSepara
276e0 74 6f 72 2c 20 53 45 50 5f 43 72 4c 66 29 3b 0a  tor, SEP_CrLf);.
276f0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32      }else if( c2
27700 3d 3d 27 74 27 20 26 26 20 73 74 72 6e 63 6d 70  =='t' && strncmp
27710 28 61 7a 41 72 67 5b 31 5d 2c 22 74 61 62 73 22  (azArg[1],"tabs"
27720 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ,n2)==0 ){.     
27730 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f   p->mode = MODE_
27740 4c 69 73 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  List;.      sqli
27750 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
27760 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  eof(p->colSepara
27770 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  tor), p->colSepa
27780 72 61 74 6f 72 2c 20 53 45 50 5f 54 61 62 29 3b  rator, SEP_Tab);
27790 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
277a0 32 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d  2=='i' && strncm
277b0 70 28 61 7a 41 72 67 5b 31 5d 2c 22 69 6e 73 65  p(azArg[1],"inse
277c0 72 74 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  rt",n2)==0 ){.  
277d0 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
277e0 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 20  DE_Insert;.     
277f0 20 73 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28   set_table_name(
27800 70 2c 20 6e 41 72 67 3e 3d 33 20 3f 20 61 7a 41  p, nArg>=3 ? azA
27810 72 67 5b 32 5d 20 3a 20 22 74 61 62 6c 65 22 29  rg[2] : "table")
27820 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
27830 63 32 3d 3d 27 71 27 20 26 26 20 73 74 72 6e 63  c2=='q' && strnc
27840 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 71 75 6f  mp(azArg[1],"quo
27850 74 65 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  te",n2)==0 ){.  
27860 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
27870 44 45 5f 51 75 6f 74 65 3b 0a 20 20 20 20 7d 65  DE_Quote;.    }e
27880 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 61 27 20  lse if( c2=='a' 
27890 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
278a0 5b 31 5d 2c 22 61 73 63 69 69 22 2c 6e 32 29 3d  [1],"ascii",n2)=
278b0 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  =0 ){.      p->m
278c0 6f 64 65 20 3d 20 4d 4f 44 45 5f 41 73 63 69 69  ode = MODE_Ascii
278d0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
278e0 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
278f0 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29  p->colSeparator)
27900 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
27910 72 2c 20 53 45 50 5f 55 6e 69 74 29 3b 0a 20 20  r, SEP_Unit);.  
27920 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
27930 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72  intf(sizeof(p->r
27940 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d  owSeparator), p-
27950 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53  >rowSeparator, S
27960 45 50 5f 52 65 63 6f 72 64 29 3b 0a 20 20 20 20  EP_Record);.    
27970 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d  }else if( nArg==
27980 31 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  1 ){.      raw_p
27990 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 63  rintf(p->out, "c
279a0 75 72 72 65 6e 74 20 6f 75 74 70 75 74 20 6d 6f  urrent output mo
279b0 64 65 3a 20 25 73 5c 6e 22 2c 20 6d 6f 64 65 44  de: %s\n", modeD
279c0 65 73 63 72 5b 70 2d 3e 6d 6f 64 65 5d 29 3b 0a  escr[p->mode]);.
279d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
279e0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
279f0 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 6f 64 65  rr, "Error: mode
27a00 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f   should be one o
27a10 66 3a 20 22 0a 20 20 20 20 20 20 20 20 20 22 61  f: ".         "a
27a20 73 63 69 69 20 63 6f 6c 75 6d 6e 20 63 73 76 20  scii column csv 
27a30 68 74 6d 6c 20 69 6e 73 65 72 74 20 6c 69 6e 65  html insert line
27a40 20 6c 69 73 74 20 71 75 6f 74 65 20 74 61 62 73   list quote tabs
27a50 20 74 63 6c 5c 6e 22 29 3b 0a 20 20 20 20 20 20   tcl\n");.      
27a60 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rc = 1;.    }.  
27a70 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e    p->cMode = p->
27a80 6d 6f 64 65 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  mode;.  }else.. 
27a90 20 69 66 28 20 63 3d 3d 27 6e 27 20 26 26 20 73   if( c=='n' && s
27aa0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
27ab0 20 22 6e 75 6c 6c 76 61 6c 75 65 22 2c 20 6e 29   "nullvalue", n)
27ac0 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
27ad0 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
27ae0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
27af0 28 73 69 7a 65 6f 66 28 70 2d 3e 6e 75 6c 6c 56  (sizeof(p->nullV
27b00 61 6c 75 65 29 2c 20 70 2d 3e 6e 75 6c 6c 56 61  alue), p->nullVa
27b10 6c 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  lue,.           
27b20 20 20 20 20 20 20 20 20 20 20 20 20 22 25 2e 2a              "%.*
27b30 73 22 2c 20 28 69 6e 74 29 41 72 72 61 79 53 69  s", (int)ArraySi
27b40 7a 65 28 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29  ze(p->nullValue)
27b50 2d 31 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  -1, azArg[1]);. 
27b60 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
27b70 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
27b80 72 2c 20 22 55 73 61 67 65 3a 20 2e 6e 75 6c 6c  r, "Usage: .null
27b90 76 61 6c 75 65 20 53 54 52 49 4e 47 5c 6e 22 29  value STRING\n")
27ba0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
27bb0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
27bc0 20 69 66 28 20 63 3d 3d 27 6f 27 20 26 26 20 73   if( c=='o' && s
27bd0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
27be0 20 22 6f 70 65 6e 22 2c 20 6e 29 3d 3d 30 20 26   "open", n)==0 &
27bf0 26 20 6e 3e 3d 32 20 29 7b 0a 20 20 20 20 63 68  & n>=2 ){.    ch
27c00 61 72 20 2a 7a 4e 65 77 46 69 6c 65 6e 61 6d 65  ar *zNewFilename
27c10 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  ;  /* Name of th
27c20 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
27c30 74 6f 20 6f 70 65 6e 20 2a 2f 0a 20 20 20 20 69  to open */.    i
27c40 6e 74 20 69 4e 61 6d 65 20 3d 20 31 3b 20 20 20  nt iName = 1;   
27c50 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
27c60 61 7a 41 72 67 5b 5d 20 6f 66 20 74 68 65 20 66  azArg[] of the f
27c70 69 6c 65 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  ilename */.    i
27c80 6e 74 20 6e 65 77 46 6c 61 67 20 3d 20 30 3b 20  nt newFlag = 0; 
27c90 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64      /* True to d
27ca0 65 6c 65 74 65 20 66 69 6c 65 20 62 65 66 6f 72  elete file befor
27cb0 65 20 6f 70 65 6e 69 6e 67 20 2a 2f 0a 20 20 20  e opening */.   
27cc0 20 2f 2a 20 43 6c 6f 73 65 20 74 68 65 20 65 78   /* Close the ex
27cd0 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
27ce0 2a 2f 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 63  */.    session_c
27cf0 6c 6f 73 65 5f 61 6c 6c 28 70 29 3b 0a 20 20 20  lose_all(p);.   
27d00 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70   sqlite3_close(p
27d10 2d 3e 64 62 29 3b 0a 20 20 20 20 70 2d 3e 64 62  ->db);.    p->db
27d20 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 7a 44 62   = 0;.    p->zDb
27d30 46 69 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20  Filename = 0;.  
27d40 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70    sqlite3_free(p
27d50 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 29 3b  ->zFreeOnClose);
27d60 0a 20 20 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43  .    p->zFreeOnC
27d70 6c 6f 73 65 20 3d 20 30 3b 0a 20 20 20 20 2f 2a  lose = 0;.    /*
27d80 20 43 68 65 63 6b 20 66 6f 72 20 63 6f 6d 6d 61   Check for comma
27d90 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd-line argument
27da0 73 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 4e 61  s */.    for(iNa
27db0 6d 65 3d 31 3b 20 69 4e 61 6d 65 3c 6e 41 72 67  me=1; iName<nArg
27dc0 20 26 26 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d   && azArg[iName]
27dd0 5b 30 5d 3d 3d 27 2d 27 3b 20 69 4e 61 6d 65 2b  [0]=='-'; iName+
27de0 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  +){.      const 
27df0 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b  char *z = azArg[
27e00 69 4e 61 6d 65 5d 3b 0a 20 20 20 20 20 20 69 66  iName];.      if
27e10 28 20 6f 70 74 69 6f 6e 4d 61 74 63 68 28 7a 2c  ( optionMatch(z,
27e20 22 6e 65 77 22 29 20 29 7b 0a 20 20 20 20 20 20  "new") ){.      
27e30 20 20 6e 65 77 46 6c 61 67 20 3d 20 31 3b 0a 20    newFlag = 1;. 
27e40 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a       }else if( z
27e50 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
27e60 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
27e70 73 74 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e  stderr, "unknown
27e80 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20   option: %s\n", 
27e90 7a 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  z);.        rc =
27ea0 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   1;.        goto
27eb0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
27ec0 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  it;.      }.    
27ed0 7d 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 66 69  }.    /* If a fi
27ee0 6c 65 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  lename is specif
27ef0 69 65 64 2c 20 74 72 79 20 74 6f 20 6f 70 65 6e  ied, try to open
27f00 20 69 74 20 66 69 72 73 74 20 2a 2f 0a 20 20 20   it first */.   
27f10 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 20 3d 20   zNewFilename = 
27f20 6e 41 72 67 3e 69 4e 61 6d 65 20 3f 20 73 71 6c  nArg>iName ? sql
27f30 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
27f40 22 2c 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 29  ", azArg[iName])
27f50 20 3a 20 30 3b 0a 20 20 20 20 69 66 28 20 7a 4e   : 0;.    if( zN
27f60 65 77 46 69 6c 65 6e 61 6d 65 20 29 7b 0a 20 20  ewFilename ){.  
27f70 20 20 20 20 69 66 28 20 6e 65 77 46 6c 61 67 20      if( newFlag 
27f80 29 20 73 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c  ) shellDeleteFil
27f90 65 28 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 29 3b  e(zNewFilename);
27fa0 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c  .      p->zDbFil
27fb0 65 6e 61 6d 65 20 3d 20 7a 4e 65 77 46 69 6c 65  ename = zNewFile
27fc0 6e 61 6d 65 3b 0a 20 20 20 20 20 20 6f 70 65 6e  name;.      open
27fd0 5f 64 62 28 70 2c 20 31 29 3b 0a 20 20 20 20 20  _db(p, 1);.     
27fe0 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b   if( p->db==0 ){
27ff0 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
28000 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
28010 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
28020 20 27 25 73 27 5c 6e 22 2c 20 7a 4e 65 77 46 69   '%s'\n", zNewFi
28030 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  lename);.       
28040 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4e   sqlite3_free(zN
28050 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20  ewFilename);.   
28060 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
28070 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73    p->zFreeOnClos
28080 65 20 3d 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65  e = zNewFilename
28090 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
280a0 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30      if( p->db==0
280b0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 20   ){.      /* As 
280c0 61 20 66 61 6c 6c 2d 62 61 63 6b 20 6f 70 65 6e  a fall-back open
280d0 20 61 20 54 45 4d 50 20 64 61 74 61 62 61 73 65   a TEMP database
280e0 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62   */.      p->zDb
280f0 46 69 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20  Filename = 0;.  
28100 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
28110 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
28120 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6f 27 0a 20  ..  if( c=='o'. 
28130 20 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a    && (strncmp(az
28140 41 72 67 5b 30 5d 2c 20 22 6f 75 74 70 75 74 22  Arg[0], "output"
28150 2c 20 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63  , n)==0 || strnc
28160 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 6e  mp(azArg[0], "on
28170 63 65 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 29 7b  ce", n)==0).  ){
28180 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
28190 2a 7a 46 69 6c 65 20 3d 20 6e 41 72 67 3e 3d 32  *zFile = nArg>=2
281a0 20 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 73   ? azArg[1] : "s
281b0 74 64 6f 75 74 22 3b 0a 20 20 20 20 69 66 28 20  tdout";.    if( 
281c0 6e 41 72 67 3e 32 20 29 7b 0a 20 20 20 20 20 20  nArg>2 ){.      
281d0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
281e0 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 25 73 20  rr, "Usage: .%s 
281f0 46 49 4c 45 5c 6e 22 2c 20 61 7a 41 72 67 5b 30  FILE\n", azArg[0
28200 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ]);.      rc = 1
28210 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
28220 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
28230 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 3e      }.    if( n>
28240 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  1 && strncmp(azA
28250 72 67 5b 30 5d 2c 20 22 6f 6e 63 65 22 2c 20 6e  rg[0], "once", n
28260 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
28270 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20  ( nArg<2 ){.    
28280 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
28290 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
282a0 6f 6e 63 65 20 46 49 4c 45 5c 6e 22 29 3b 0a 20  once FILE\n");. 
282b0 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
282c0 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
282d0 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
282e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e       }.      p->
282f0 6f 75 74 43 6f 75 6e 74 20 3d 20 32 3b 0a 20 20  outCount = 2;.  
28300 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
28310 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d 20 30 3b 0a  ->outCount = 0;.
28320 20 20 20 20 7d 0a 20 20 20 20 6f 75 74 70 75 74      }.    output
28330 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69  _reset(p);.    i
28340 66 28 20 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c 27  f( zFile[0]=='|'
28350 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   ){.#ifdef SQLIT
28360 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20 20  E_OMIT_POPEN.   
28370 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
28380 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 70 69  derr, "Error: pi
28390 70 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70  pes are not supp
283a0 6f 72 74 65 64 20 69 6e 20 74 68 69 73 20 4f 53  orted in this OS
283b0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
283c0 20 31 3b 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74   1;.      p->out
283d0 20 3d 20 73 74 64 6f 75 74 3b 0a 23 65 6c 73 65   = stdout;.#else
283e0 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20  .      p->out = 
283f0 70 6f 70 65 6e 28 7a 46 69 6c 65 20 2b 20 31 2c  popen(zFile + 1,
28400 20 22 77 22 29 3b 0a 20 20 20 20 20 20 69 66 28   "w");.      if(
28410 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20   p->out==0 ){.  
28420 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
28430 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
28440 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 70 69 70   cannot open pip
28450 65 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69  e \"%s\"\n", zFi
28460 6c 65 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20  le + 1);.       
28470 20 70 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74   p->out = stdout
28480 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
28490 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
284a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73         sqlite3_s
284b0 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
284c0 2d 3e 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f  ->outfile), p->o
284d0 75 74 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46  utfile, "%s", zF
284e0 69 6c 65 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65  ile);.      }.#e
284f0 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ndif.    }else{.
28500 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 6f        p->out = o
28510 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28  utput_file_open(
28520 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 69 66  zFile);.      if
28530 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20  ( p->out==0 ){. 
28540 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
28550 70 28 7a 46 69 6c 65 2c 22 6f 66 66 22 29 21 3d  p(zFile,"off")!=
28560 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  0 ){.          u
28570 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
28580 72 2c 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74  r,"Error: cannot
28590 20 77 72 69 74 65 20 74 6f 20 5c 22 25 73 5c 22   write to \"%s\"
285a0 5c 6e 22 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20  \n", zFile);.   
285b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
285c0 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a  ->out = stdout;.
285d0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
285e0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
285f0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73         sqlite3_s
28600 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
28610 2d 3e 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f  ->outfile), p->o
28620 75 74 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46  utfile, "%s", zF
28630 69 6c 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ile);.      }.  
28640 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
28650 66 28 20 63 3d 3d 27 70 27 20 26 26 20 6e 3e 3d  f( c=='p' && n>=
28660 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  3 && strncmp(azA
28670 72 67 5b 30 5d 2c 20 22 70 72 69 6e 74 22 2c 20  rg[0], "print", 
28680 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  n)==0 ){.    int
28690 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b   i;.    for(i=1;
286a0 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
286b0 20 20 20 20 20 69 66 28 20 69 3e 31 20 29 20 72       if( i>1 ) r
286c0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
286d0 2c 20 22 20 22 29 3b 0a 20 20 20 20 20 20 75 74  , " ");.      ut
286e0 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
286f0 2c 20 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d  , "%s", azArg[i]
28700 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77  );.    }.    raw
28710 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
28720 22 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  "\n");.  }else..
28730 20 20 69 66 28 20 63 3d 3d 27 70 27 20 26 26 20    if( c=='p' && 
28740 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
28750 2c 20 22 70 72 6f 6d 70 74 22 2c 20 6e 29 3d 3d  , "prompt", n)==
28760 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
28770 67 20 3e 3d 20 32 29 20 7b 0a 20 20 20 20 20 20  g >= 2) {.      
28780 73 74 72 6e 63 70 79 28 6d 61 69 6e 50 72 6f 6d  strncpy(mainProm
28790 70 74 2c 61 7a 41 72 67 5b 31 5d 2c 28 69 6e 74  pt,azArg[1],(int
287a0 29 41 72 72 61 79 53 69 7a 65 28 6d 61 69 6e 50  )ArraySize(mainP
287b0 72 6f 6d 70 74 29 2d 31 29 3b 0a 20 20 20 20 7d  rompt)-1);.    }
287c0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 20 3e 3d  .    if( nArg >=
287d0 20 33 29 20 7b 0a 20 20 20 20 20 20 73 74 72 6e   3) {.      strn
287e0 63 70 79 28 63 6f 6e 74 69 6e 75 65 50 72 6f 6d  cpy(continueProm
287f0 70 74 2c 61 7a 41 72 67 5b 32 5d 2c 28 69 6e 74  pt,azArg[2],(int
28800 29 41 72 72 61 79 53 69 7a 65 28 63 6f 6e 74 69  )ArraySize(conti
28810 6e 75 65 50 72 6f 6d 70 74 29 2d 31 29 3b 0a 20  nuePrompt)-1);. 
28820 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
28830 69 66 28 20 63 3d 3d 27 71 27 20 26 26 20 73 74  if( c=='q' && st
28840 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
28850 22 71 75 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b  "quit", n)==0 ){
28860 0a 20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d  .    rc = 2;.  }
28870 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
28880 72 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74  r' && n>=3 && st
28890 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
288a0 22 72 65 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b  "read", n)==0 ){
288b0 0a 20 20 20 20 46 49 4c 45 20 2a 61 6c 74 3b 0a  .    FILE *alt;.
288c0 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20      if( nArg!=2 
288d0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
288e0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
288f0 67 65 3a 20 2e 72 65 61 64 20 46 49 4c 45 5c 6e  ge: .read FILE\n
28900 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
28910 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
28920 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
28930 20 20 20 20 7d 0a 20 20 20 20 61 6c 74 20 3d 20      }.    alt = 
28940 66 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20  fopen(azArg[1], 
28950 22 72 62 22 29 3b 0a 20 20 20 20 69 66 28 20 61  "rb");.    if( a
28960 6c 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  lt==0 ){.      u
28970 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
28980 72 2c 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74  r,"Error: cannot
28990 20 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c   open \"%s\"\n",
289a0 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
289b0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65    rc = 1;.    }e
289c0 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
289d0 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28 70 2c  process_input(p,
289e0 20 61 6c 74 29 3b 0a 20 20 20 20 20 20 66 63 6c   alt);.      fcl
289f0 6f 73 65 28 61 6c 74 29 3b 0a 20 20 20 20 7d 0a  ose(alt);.    }.
28a00 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
28a10 3d 3d 27 72 27 20 26 26 20 6e 3e 3d 33 20 26 26  =='r' && n>=3 &&
28a20 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
28a30 5d 2c 20 22 72 65 73 74 6f 72 65 22 2c 20 6e 29  ], "restore", n)
28a40 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ==0 ){.    const
28a50 20 63 68 61 72 20 2a 7a 53 72 63 46 69 6c 65 3b   char *zSrcFile;
28a60 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
28a70 2a 7a 44 62 3b 0a 20 20 20 20 73 71 6c 69 74 65  *zDb;.    sqlite
28a80 33 20 2a 70 53 72 63 3b 0a 20 20 20 20 73 71 6c  3 *pSrc;.    sql
28a90 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 70 42 61  ite3_backup *pBa
28aa0 63 6b 75 70 3b 0a 20 20 20 20 69 6e 74 20 6e 54  ckup;.    int nT
28ab0 69 6d 65 6f 75 74 20 3d 20 30 3b 0a 0a 20 20 20  imeout = 0;..   
28ac0 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
28ad0 20 20 20 20 20 20 7a 53 72 63 46 69 6c 65 20 3d        zSrcFile =
28ae0 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20   azArg[1];.     
28af0 20 7a 44 62 20 3d 20 22 6d 61 69 6e 22 3b 0a 20   zDb = "main";. 
28b00 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72     }else if( nAr
28b10 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 7a 53  g==3 ){.      zS
28b20 72 63 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 32  rcFile = azArg[2
28b30 5d 3b 0a 20 20 20 20 20 20 7a 44 62 20 3d 20 61  ];.      zDb = a
28b40 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 7d 65 6c  zArg[1];.    }el
28b50 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  se{.      raw_pr
28b60 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
28b70 61 67 65 3a 20 2e 72 65 73 74 6f 72 65 20 3f 44  age: .restore ?D
28b80 42 3f 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20  B? FILE\n");.   
28b90 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
28ba0 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61   goto meta_comma
28bb0 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20  nd_exit;.    }. 
28bc0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
28bd0 6f 70 65 6e 28 7a 53 72 63 46 69 6c 65 2c 20 26  open(zSrcFile, &
28be0 70 53 72 63 29 3b 0a 20 20 20 20 69 66 28 20 72  pSrc);.    if( r
28bf0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
28c00 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
28c10 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
28c20 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22  : cannot open \"
28c30 25 73 5c 22 5c 6e 22 2c 20 7a 53 72 63 46 69 6c  %s\"\n", zSrcFil
28c40 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
28c50 33 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20  3_close(pSrc);. 
28c60 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
28c70 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62     }.    open_db
28c80 28 70 2c 20 30 29 3b 0a 20 20 20 20 70 42 61 63  (p, 0);.    pBac
28c90 6b 75 70 20 3d 20 73 71 6c 69 74 65 33 5f 62 61  kup = sqlite3_ba
28ca0 63 6b 75 70 5f 69 6e 69 74 28 70 2d 3e 64 62 2c  ckup_init(p->db,
28cb0 20 7a 44 62 2c 20 70 53 72 63 2c 20 22 6d 61 69   zDb, pSrc, "mai
28cc0 6e 22 29 3b 0a 20 20 20 20 69 66 28 20 70 42 61  n");.    if( pBa
28cd0 63 6b 75 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ckup==0 ){.     
28ce0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
28cf0 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c  err, "Error: %s\
28d00 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  n", sqlite3_errm
28d10 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20  sg(p->db));.    
28d20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28    sqlite3_close(
28d30 70 53 72 63 29 3b 0a 20 20 20 20 20 20 72 65 74  pSrc);.      ret
28d40 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
28d50 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71   while( (rc = sq
28d60 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65  lite3_backup_ste
28d70 70 28 70 42 61 63 6b 75 70 2c 31 30 30 29 29 3d  p(pBackup,100))=
28d80 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20  =SQLITE_OK.     
28d90 20 20 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49       || rc==SQLI
28da0 54 45 5f 42 55 53 59 20 20 29 7b 0a 20 20 20 20  TE_BUSY  ){.    
28db0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
28dc0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
28dd0 20 69 66 28 20 6e 54 69 6d 65 6f 75 74 2b 2b 20   if( nTimeout++ 
28de0 3e 3d 20 33 20 29 20 62 72 65 61 6b 3b 0a 20 20  >= 3 ) break;.  
28df0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6c        sqlite3_sl
28e00 65 65 70 28 31 30 30 29 3b 0a 20 20 20 20 20 20  eep(100);.      
28e10 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
28e20 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
28e30 68 28 70 42 61 63 6b 75 70 29 3b 0a 20 20 20 20  h(pBackup);.    
28e40 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
28e50 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ONE ){.      rc 
28e60 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 0;.    }else i
28e70 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
28e80 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  SY || rc==SQLITE
28e90 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20  _LOCKED ){.     
28ea0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
28eb0 72 72 2c 20 22 45 72 72 6f 72 3a 20 73 6f 75 72  rr, "Error: sour
28ec0 63 65 20 64 61 74 61 62 61 73 65 20 69 73 20 62  ce database is b
28ed0 75 73 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  usy\n");.      r
28ee0 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  c = 1;.    }else
28ef0 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
28f00 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
28f10 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74  or: %s\n", sqlit
28f20 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29  e3_errmsg(p->db)
28f30 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
28f40 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
28f50 65 33 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a  e3_close(pSrc);.
28f60 20 20 7d 65 6c 73 65 0a 0a 0a 20 20 69 66 28 20    }else...  if( 
28f70 63 3d 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d  c=='s' && strncm
28f80 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 63 61  p(azArg[0], "sca
28f90 6e 73 74 61 74 73 22 2c 20 6e 29 3d 3d 30 20 29  nstats", n)==0 )
28fa0 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d  {.    if( nArg==
28fb0 32 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 73 63  2 ){.      p->sc
28fc0 61 6e 73 74 61 74 73 4f 6e 20 3d 20 62 6f 6f 6c  anstatsOn = bool
28fd0 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  eanValue(azArg[1
28fe0 5d 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ]);.#ifndef SQLI
28ff0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
29000 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 20 20  CANSTATUS.      
29010 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
29020 72 2c 20 22 57 61 72 6e 69 6e 67 3a 20 2e 73 63  r, "Warning: .sc
29030 61 6e 73 74 61 74 73 20 6e 6f 74 20 61 76 61 69  anstats not avai
29040 6c 61 62 6c 65 20 69 6e 20 74 68 69 73 20 62 75  lable in this bu
29050 69 6c 64 2e 5c 6e 22 29 3b 0a 23 65 6e 64 69 66  ild.\n");.#endif
29060 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
29070 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
29080 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 63  err, "Usage: .sc
29090 61 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66 5c 6e  anstats on|off\n
290a0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
290b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
290c0 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26  .  if( c=='s' &&
290d0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
290e0 5d 2c 20 22 73 63 68 65 6d 61 22 2c 20 6e 29 3d  ], "schema", n)=
290f0 3d 30 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 54  =0 ){.    ShellT
29100 65 78 74 20 73 53 65 6c 65 63 74 3b 0a 20 20 20  ext sSelect;.   
29110 20 53 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61   ShellState data
29120 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72  ;.    char *zErr
29130 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e  Msg = 0;.    con
29140 73 74 20 63 68 61 72 20 2a 7a 44 69 76 20 3d 20  st char *zDiv = 
29150 30 3b 0a 20 20 20 20 69 6e 74 20 69 53 63 68 65  0;.    int iSche
29160 6d 61 20 3d 20 30 3b 0a 0a 20 20 20 20 6f 70 65  ma = 0;..    ope
29170 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20  n_db(p, 0);.    
29180 6d 65 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c  memcpy(&data, p,
29190 20 73 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a   sizeof(data));.
291a0 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61      data.showHea
291b0 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74  der = 0;.    dat
291c0 61 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d  a.cMode = data.m
291d0 6f 64 65 20 3d 20 4d 4f 44 45 5f 53 65 6d 69 3b  ode = MODE_Semi;
291e0 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73  .    initText(&s
291f0 53 65 6c 65 63 74 29 3b 0a 20 20 20 20 69 66 28  Select);.    if(
29200 20 6e 41 72 67 3e 3d 32 20 26 26 20 6f 70 74 69   nArg>=2 && opti
29210 6f 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b 31 5d  onMatch(azArg[1]
29220 2c 20 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20  , "indent") ){. 
29230 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20       data.cMode 
29240 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f  = data.mode = MO
29250 44 45 5f 50 72 65 74 74 79 3b 0a 20 20 20 20 20  DE_Pretty;.     
29260 20 6e 41 72 67 2d 2d 3b 0a 20 20 20 20 20 20 69   nArg--;.      i
29270 66 28 20 6e 41 72 67 3d 3d 32 20 29 20 61 7a 41  f( nArg==2 ) azA
29280 72 67 5b 31 5d 20 3d 20 61 7a 41 72 67 5b 32 5d  rg[1] = azArg[2]
29290 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
292a0 6e 41 72 67 3d 3d 32 20 26 26 20 61 7a 41 72 67  nArg==2 && azArg
292b0 5b 31 5d 5b 30 5d 21 3d 27 2d 27 20 29 7b 0a 20  [1][0]!='-' ){. 
292c0 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
292d0 20 20 66 6f 72 28 69 3d 30 3b 20 61 7a 41 72 67    for(i=0; azArg
292e0 5b 31 5d 5b 69 5d 3b 20 69 2b 2b 29 20 61 7a 41  [1][i]; i++) azA
292f0 72 67 5b 31 5d 5b 69 5d 20 3d 20 54 6f 4c 6f 77  rg[1][i] = ToLow
29300 65 72 28 61 7a 41 72 67 5b 31 5d 5b 69 5d 29 3b  er(azArg[1][i]);
29310 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d  .      if( strcm
29320 70 28 61 7a 41 72 67 5b 31 5d 2c 22 73 71 6c 69  p(azArg[1],"sqli
29330 74 65 5f 6d 61 73 74 65 72 22 29 3d 3d 30 20 29  te_master")==0 )
29340 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a  {.        char *
29350 6e 65 77 5f 61 72 67 76 5b 32 5d 2c 20 2a 6e 65  new_argv[2], *ne
29360 77 5f 63 6f 6c 76 5b 32 5d 3b 0a 20 20 20 20 20  w_colv[2];.     
29370 20 20 20 6e 65 77 5f 61 72 67 76 5b 30 5d 20 3d     new_argv[0] =
29380 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 73   "CREATE TABLE s
29390 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 5c 6e  qlite_master (\n
293a0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
293b0 20 20 20 20 20 20 20 20 22 20 20 74 79 70 65 20          "  type 
293c0 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20  text,\n".       
293d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
293e0 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a    name text,\n".
293f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29400 20 20 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d        "  tbl_nam
29410 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20  e text,\n".     
29420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29430 20 22 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74   "  rootpage int
29440 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20 20 20 20  eger,\n".       
29450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
29460 20 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20    sql text\n".  
29470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29480 20 20 20 20 22 29 22 3b 0a 20 20 20 20 20 20 20      ")";.       
29490 20 6e 65 77 5f 61 72 67 76 5b 31 5d 20 3d 20 30   new_argv[1] = 0
294a0 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f  ;.        new_co
294b0 6c 76 5b 30 5d 20 3d 20 22 73 71 6c 22 3b 0a 20  lv[0] = "sql";. 
294c0 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76 5b         new_colv[
294d0 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  1] = 0;.        
294e0 63 61 6c 6c 62 61 63 6b 28 26 64 61 74 61 2c 20  callback(&data, 
294f0 31 2c 20 6e 65 77 5f 61 72 67 76 2c 20 6e 65 77  1, new_argv, new
29500 5f 63 6f 6c 76 29 3b 0a 20 20 20 20 20 20 20 20  _colv);.        
29510 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
29520 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
29530 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  strcmp(azArg[1],
29540 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
29550 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ter")==0 ){.    
29560 20 20 20 20 63 68 61 72 20 2a 6e 65 77 5f 61 72      char *new_ar
29570 67 76 5b 32 5d 2c 20 2a 6e 65 77 5f 63 6f 6c 76  gv[2], *new_colv
29580 5b 32 5d 3b 0a 20 20 20 20 20 20 20 20 6e 65 77  [2];.        new
29590 5f 61 72 67 76 5b 30 5d 20 3d 20 22 43 52 45 41  _argv[0] = "CREA
295a0 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 73 71  TE TEMP TABLE sq
295b0 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
295c0 20 28 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20   (\n".          
295d0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 74              "  t
295e0 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ype text,\n".   
295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29600 20 20 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c     "  name text,
29610 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n".            
29620 20 20 20 20 20 20 20 20 20 20 22 20 20 74 62 6c            "  tbl
29630 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20  _name text,\n". 
29640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29650 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65       "  rootpage
29660 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20   integer,\n".   
29670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29680 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e     "  sql text\n
29690 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
296a0 20 20 20 20 20 20 20 20 22 29 22 3b 0a 20 20 20          ")";.   
296b0 20 20 20 20 20 6e 65 77 5f 61 72 67 76 5b 31 5d       new_argv[1]
296c0 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6e 65   = 0;.        ne
296d0 77 5f 63 6f 6c 76 5b 30 5d 20 3d 20 22 73 71 6c  w_colv[0] = "sql
296e0 22 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63  ";.        new_c
296f0 6f 6c 76 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  olv[1] = 0;.    
29700 20 20 20 20 63 61 6c 6c 62 61 63 6b 28 26 64 61      callback(&da
29710 74 61 2c 20 31 2c 20 6e 65 77 5f 61 72 67 76 2c  ta, 1, new_argv,
29720 20 6e 65 77 5f 63 6f 6c 76 29 3b 0a 20 20 20 20   new_colv);.    
29730 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
29740 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  OK;.      }else{
29750 0a 20 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20  .        zDiv = 
29760 22 28 22 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  "(";.      }.   
29770 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d   }else if( nArg=
29780 3d 31 20 29 7b 0a 20 20 20 20 20 20 7a 44 69 76  =1 ){.      zDiv
29790 20 3d 20 22 28 22 3b 0a 20 20 20 20 7d 65 6c 73   = "(";.    }els
297a0 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
297b0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
297c0 67 65 3a 20 2e 73 63 68 65 6d 61 20 3f 2d 2d 69  ge: .schema ?--i
297d0 6e 64 65 6e 74 3f 20 3f 4c 49 4b 45 2d 50 41 54  ndent? ?LIKE-PAT
297e0 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20 20  TERN?\n");.     
297f0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
29800 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
29810 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
29820 20 69 66 28 20 7a 44 69 76 20 29 7b 0a 20 20 20   if( zDiv ){.   
29830 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20     sqlite3_stmt 
29840 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20 20  *pStmt = 0;.    
29850 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
29860 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
29870 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   "SELECT name FR
29880 4f 4d 20 70 72 61 67 6d 61 5f 64 61 74 61 62 61  OM pragma_databa
29890 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20 20 20 20  se_list",.      
298a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298b0 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74          -1, &pSt
298c0 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  mt, 0);.      if
298d0 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20  ( rc ){.        
298e0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
298f0 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e  rr, "Error: %s\n
29900 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
29910 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
29920 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
29930 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  ize(pStmt);.    
29940 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
29950 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
29960 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
29970 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64    }.      append
29980 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22  Text(&sSelect, "
29990 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 22  SELECT sql FROM"
299a0 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 53 63 68  , 0);.      iSch
299b0 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 20 20 77  ema = 0;.      w
299c0 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74  hile( sqlite3_st
299d0 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
299e0 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20  E_ROW ){.       
299f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
29a00 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
29a10 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
29a20 65 78 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20  ext(pStmt, 0);. 
29a30 20 20 20 20 20 20 20 63 68 61 72 20 7a 53 63 4e         char zScN
29a40 75 6d 5b 33 30 5d 3b 0a 20 20 20 20 20 20 20 20  um[30];.        
29a50 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
29a60 28 73 69 7a 65 6f 66 28 7a 53 63 4e 75 6d 29 2c  (sizeof(zScNum),
29a70 20 7a 53 63 4e 75 6d 2c 20 22 25 64 22 2c 20 2b   zScNum, "%d", +
29a80 2b 69 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20  +iSchema);.     
29a90 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
29aa0 53 65 6c 65 63 74 2c 20 7a 44 69 76 2c 20 30 29  Select, zDiv, 0)
29ab0 3b 0a 20 20 20 20 20 20 20 20 7a 44 69 76 20 3d  ;.        zDiv =
29ac0 20 22 20 55 4e 49 4f 4e 20 41 4c 4c 20 22 3b 0a   " UNION ALL ";.
29ad0 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63          if( strc
29ae0 6d 70 28 7a 44 62 2c 20 22 6d 61 69 6e 22 29 21  mp(zDb, "main")!
29af0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
29b00 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
29b10 65 63 74 2c 20 22 53 45 4c 45 43 54 20 73 68 65  ect, "SELECT she
29b20 6c 6c 5f 61 64 64 5f 73 63 68 65 6d 61 28 73 71  ll_add_schema(sq
29b30 6c 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  l,", 0);.       
29b40 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
29b50 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20 27 22 27  Select, zDb, '"'
29b60 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70  );.          app
29b70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
29b80 2c 20 22 29 20 41 53 20 73 71 6c 2c 20 74 79 70  , ") AS sql, typ
29b90 65 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d  e, tbl_name, nam
29ba0 65 2c 20 72 6f 77 69 64 2c 22 2c 20 30 29 3b 0a  e, rowid,", 0);.
29bb0 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64            append
29bc0 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a  Text(&sSelect, z
29bd0 53 63 4e 75 6d 2c 20 30 29 3b 0a 20 20 20 20 20  ScNum, 0);.     
29be0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
29bf0 26 73 53 65 6c 65 63 74 2c 20 22 20 41 53 20 73  &sSelect, " AS s
29c00 6e 75 6d 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20  num, ", 0);.    
29c10 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
29c20 28 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20  (&sSelect, zDb, 
29c30 27 5c 27 27 29 3b 0a 20 20 20 20 20 20 20 20 20  '\'');.         
29c40 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
29c50 6c 65 63 74 2c 20 22 20 41 53 20 73 6e 61 6d 65  lect, " AS sname
29c60 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20   FROM ", 0);.   
29c70 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
29c80 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c  t(&sSelect, zDb,
29c90 20 27 22 27 29 3b 0a 20 20 20 20 20 20 20 20 20   '"');.         
29ca0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
29cb0 6c 65 63 74 2c 20 22 2e 73 71 6c 69 74 65 5f 6d  lect, ".sqlite_m
29cc0 61 73 74 65 72 22 2c 20 30 29 3b 0a 20 20 20 20  aster", 0);.    
29cd0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
29ce0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
29cf0 26 73 53 65 6c 65 63 74 2c 20 22 53 45 4c 45 43  &sSelect, "SELEC
29d00 54 20 73 71 6c 2c 20 74 79 70 65 2c 20 74 62 6c  T sql, type, tbl
29d10 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f 77  _name, name, row
29d20 69 64 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  id, ", 0);.     
29d30 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
29d40 26 73 53 65 6c 65 63 74 2c 20 7a 53 63 4e 75 6d  &sSelect, zScNum
29d50 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
29d60 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
29d70 65 63 74 2c 20 22 20 41 53 20 73 6e 75 6d 2c 20  ect, " AS snum, 
29d80 27 6d 61 69 6e 27 20 41 53 20 73 6e 61 6d 65 20  'main' AS sname 
29d90 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
29da0 65 72 22 2c 30 29 3b 0a 20 20 20 20 20 20 20 20  er",0);.        
29db0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
29dc0 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
29dd0 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 61  (pStmt);.      a
29de0 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
29df0 63 74 2c 20 22 29 20 57 48 45 52 45 20 22 2c 20  ct, ") WHERE ", 
29e00 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 41  0);.      if( nA
29e10 72 67 3e 31 20 29 7b 0a 20 20 20 20 20 20 20 20  rg>1 ){.        
29e20 63 68 61 72 20 2a 7a 51 61 72 67 20 3d 20 73 71  char *zQarg = sq
29e30 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
29e40 51 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  Q", azArg[1]);. 
29e50 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 68         if( strch
29e60 72 28 61 7a 41 72 67 5b 31 5d 2c 20 27 2e 27 29  r(azArg[1], '.')
29e70 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
29e80 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
29e90 74 2c 20 22 6c 6f 77 65 72 28 70 72 69 6e 74 66  t, "lower(printf
29ea0 28 27 25 73 2e 25 73 27 2c 73 6e 61 6d 65 2c 74  ('%s.%s',sname,t
29eb0 62 6c 5f 6e 61 6d 65 29 29 22 2c 20 30 29 3b 0a  bl_name))", 0);.
29ec0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
29ed0 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54           appendT
29ee0 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 6c  ext(&sSelect, "l
29ef0 6f 77 65 72 28 74 62 6c 5f 6e 61 6d 65 29 22 2c  ower(tbl_name)",
29f00 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   0);.        }. 
29f10 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
29f20 74 28 26 73 53 65 6c 65 63 74 2c 20 73 74 72 63  t(&sSelect, strc
29f30 68 72 28 61 7a 41 72 67 5b 31 5d 2c 20 27 2a 27  hr(azArg[1], '*'
29f40 29 20 3f 20 22 20 47 4c 4f 42 20 22 20 3a 20 22  ) ? " GLOB " : "
29f50 20 4c 49 4b 45 20 22 2c 20 30 29 3b 0a 20 20 20   LIKE ", 0);.   
29f60 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
29f70 26 73 53 65 6c 65 63 74 2c 20 7a 51 61 72 67 2c  &sSelect, zQarg,
29f80 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70   0);.        app
29f90 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
29fa0 2c 20 22 20 41 4e 44 20 22 2c 20 30 29 3b 0a 20  , " AND ", 0);. 
29fb0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
29fc0 72 65 65 28 7a 51 61 72 67 29 3b 0a 20 20 20 20  ree(zQarg);.    
29fd0 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64    }.      append
29fe0 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22  Text(&sSelect, "
29ff0 74 79 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44  type!='meta' AND
2a000 20 73 71 6c 20 49 53 20 4e 4f 54 20 4e 55 4c 4c   sql IS NOT NULL
2a010 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
2a020 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f               " O
2a030 52 44 45 52 20 42 59 20 73 6e 75 6d 2c 20 72 6f  RDER BY snum, ro
2a040 77 69 64 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  wid", 0);.      
2a050 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
2a060 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c 65 63 74  c(p->db, sSelect
2a070 2e 7a 2c 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64  .z, callback, &d
2a080 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a  ata, &zErrMsg);.
2a090 20 20 20 20 20 20 66 72 65 65 54 65 78 74 28 26        freeText(&
2a0a0 73 53 65 6c 65 63 74 29 3b 0a 20 20 20 20 7d 0a  sSelect);.    }.
2a0b0 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20      if( zErrMsg 
2a0c0 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
2a0d0 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72  intf(stderr,"Err
2a0e0 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d  or: %s\n", zErrM
2a0f0 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  sg);.      sqlit
2a100 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
2a110 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2a120 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63      }else if( rc
2a130 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
2a140 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
2a150 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
2a160 20 71 75 65 72 79 69 6e 67 20 73 63 68 65 6d 61   querying schema
2a170 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29   information\n")
2a180 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2a190 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2a1a0 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20   rc = 0;.    }. 
2a1b0 20 7d 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69   }else..#if defi
2a1c0 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2a1d0 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
2a1e0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43  ITE_ENABLE_SELEC
2a1f0 54 54 52 41 43 45 29 0a 20 20 69 66 28 20 63 3d  TTRACE).  if( c=
2a200 3d 27 73 27 20 26 26 20 6e 3d 3d 31 31 20 26 26  ='s' && n==11 &&
2a210 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2a220 5d 2c 20 22 73 65 6c 65 63 74 74 72 61 63 65 22  ], "selecttrace"
2a230 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  , n)==0 ){.    s
2a240 71 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63  qlite3SelectTrac
2a250 65 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72  e = (int)integer
2a260 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b  Value(azArg[1]);
2a270 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
2a280 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2a290 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49  ITE_ENABLE_SESSI
2a2a0 4f 4e 29 0a 20 20 69 66 28 20 63 3d 3d 27 73 27  ON).  if( c=='s'
2a2b0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
2a2c0 67 5b 30 5d 2c 22 73 65 73 73 69 6f 6e 22 2c 6e  g[0],"session",n
2a2d0 29 3d 3d 30 20 26 26 20 6e 3e 3d 33 20 29 7b 0a  )==0 && n>=3 ){.
2a2e0 20 20 20 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20      OpenSession 
2a2f0 2a 70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e  *pSession = &p->
2a300 61 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a 20 20 20  aSession[0];.   
2a310 20 63 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20   char **azCmd = 
2a320 26 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 69  &azArg[1];.    i
2a330 6e 74 20 69 53 65 73 20 3d 20 30 3b 0a 20 20 20  nt iSes = 0;.   
2a340 20 69 6e 74 20 6e 43 6d 64 20 3d 20 6e 41 72 67   int nCmd = nArg
2a350 20 2d 20 31 3b 0a 20 20 20 20 69 6e 74 20 69 3b   - 1;.    int i;
2a360 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c 3d 31  .    if( nArg<=1
2a370 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f   ) goto session_
2a380 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20  syntax_error;.  
2a390 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
2a3a0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 33  .    if( nArg>=3
2a3b0 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 53   ){.      for(iS
2a3c0 65 73 3d 30 3b 20 69 53 65 73 3c 70 2d 3e 6e 53  es=0; iSes<p->nS
2a3d0 65 73 73 69 6f 6e 3b 20 69 53 65 73 2b 2b 29 7b  ession; iSes++){
2a3e0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
2a3f0 63 6d 70 28 70 2d 3e 61 53 65 73 73 69 6f 6e 5b  cmp(p->aSession[
2a400 69 53 65 73 5d 2e 7a 4e 61 6d 65 2c 20 61 7a 41  iSes].zName, azA
2a410 72 67 5b 31 5d 29 3d 3d 30 20 29 20 62 72 65 61  rg[1])==0 ) brea
2a420 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
2a430 20 69 66 28 20 69 53 65 73 3c 70 2d 3e 6e 53 65   if( iSes<p->nSe
2a440 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ssion ){.       
2a450 20 70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e   pSession = &p->
2a460 61 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d 3b 0a  aSession[iSes];.
2a470 20 20 20 20 20 20 20 20 61 7a 43 6d 64 2b 2b 3b          azCmd++;
2a480 0a 20 20 20 20 20 20 20 20 6e 43 6d 64 2d 2d 3b  .        nCmd--;
2a490 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
2a4a0 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d        pSession =
2a4b0 20 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 30 5d   &p->aSession[0]
2a4c0 3b 0a 20 20 20 20 20 20 20 20 69 53 65 73 20 3d  ;.        iSes =
2a4d0 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
2a4e0 7d 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69  }..    /* .sessi
2a4f0 6f 6e 20 61 74 74 61 63 68 20 54 41 42 4c 45 0a  on attach TABLE.
2a500 20 20 20 20 2a 2a 20 49 6e 76 6f 6b 65 20 74 68      ** Invoke th
2a510 65 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e  e sqlite3session
2a520 5f 61 74 74 61 63 68 28 29 20 69 6e 74 65 72 66  _attach() interf
2a530 61 63 65 20 74 6f 20 61 74 74 61 63 68 20 61 20  ace to attach a 
2a540 70 61 72 74 69 63 75 6c 61 72 0a 20 20 20 20 2a  particular.    *
2a550 2a 20 74 61 62 6c 65 20 73 6f 20 74 68 61 74 20  * table so that 
2a560 69 74 20 69 73 20 6e 65 76 65 72 20 66 69 6c 74  it is never filt
2a570 65 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ered..    */.   
2a580 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d   if( strcmp(azCm
2a590 64 5b 30 5d 2c 22 61 74 74 61 63 68 22 29 3d 3d  d[0],"attach")==
2a5a0 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  0 ){.      if( n
2a5b0 43 6d 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65  Cmd!=2 ) goto se
2a5c0 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
2a5d0 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53  or;.      if( pS
2a5e0 65 73 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 7b 0a  ession->p==0 ){.
2a5f0 20 20 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5f          session_
2a600 6e 6f 74 5f 6f 70 65 6e 3a 0a 20 20 20 20 20 20  not_open:.      
2a610 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2a620 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 20  err, "ERROR: No 
2a630 73 65 73 73 69 6f 6e 73 20 61 72 65 20 6f 70 65  sessions are ope
2a640 6e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  n\n");.      }el
2a650 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  se{.        rc =
2a660 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f   sqlite3session_
2a670 61 74 74 61 63 68 28 70 53 65 73 73 69 6f 6e 2d  attach(pSession-
2a680 3e 70 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20  >p, azCmd[1]);. 
2a690 20 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b         if( rc ){
2a6a0 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
2a6b0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
2a6c0 52 52 4f 52 3a 20 73 71 6c 69 74 65 33 73 65 73  RROR: sqlite3ses
2a6d0 73 69 6f 6e 5f 61 74 74 61 63 68 28 29 20 72 65  sion_attach() re
2a6e0 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63 29  turns %d\n", rc)
2a6f0 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  ;.          rc =
2a700 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
2a710 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a      }.    }else.
2a720 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
2a730 20 63 68 61 6e 67 65 73 65 74 20 46 49 4c 45 0a   changeset FILE.
2a740 20 20 20 20 2a 2a 20 2e 73 65 73 73 69 6f 6e 20      ** .session 
2a750 70 61 74 63 68 73 65 74 20 46 49 4c 45 0a 20 20  patchset FILE.  
2a760 20 20 2a 2a 20 57 72 69 74 65 20 61 20 63 68 61    ** Write a cha
2a770 6e 67 65 73 65 74 20 6f 72 20 70 61 74 63 68 73  ngeset or patchs
2a780 65 74 20 69 6e 74 6f 20 61 20 66 69 6c 65 2e 20  et into a file. 
2a790 20 54 68 65 20 66 69 6c 65 20 69 73 20 6f 76 65   The file is ove
2a7a0 72 77 72 69 74 74 65 6e 2e 0a 20 20 20 20 2a 2f  rwritten..    */
2a7b0 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28  .    if( strcmp(
2a7c0 61 7a 43 6d 64 5b 30 5d 2c 22 63 68 61 6e 67 65  azCmd[0],"change
2a7d0 73 65 74 22 29 3d 3d 30 20 7c 7c 20 73 74 72 63  set")==0 || strc
2a7e0 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 22 70 61 74  mp(azCmd[0],"pat
2a7f0 63 68 73 65 74 22 29 3d 3d 30 20 29 7b 0a 20 20  chset")==0 ){.  
2a800 20 20 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20      FILE *out = 
2a810 30 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  0;.      if( nCm
2a820 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73  d!=2 ) goto sess
2a830 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
2a840 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53 65 73  ;.      if( pSes
2a850 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 20 67 6f 74  sion->p==0 ) got
2a860 6f 20 73 65 73 73 69 6f 6e 5f 6e 6f 74 5f 6f 70  o session_not_op
2a870 65 6e 3b 0a 20 20 20 20 20 20 6f 75 74 20 3d 20  en;.      out = 
2a880 66 6f 70 65 6e 28 61 7a 43 6d 64 5b 31 5d 2c 20  fopen(azCmd[1], 
2a890 22 77 62 22 29 3b 0a 20 20 20 20 20 20 69 66 28  "wb");.      if(
2a8a0 20 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20   out==0 ){.     
2a8b0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
2a8c0 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 63  tderr, "ERROR: c
2a8d0 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c  annot open \"%s\
2a8e0 22 20 66 6f 72 20 77 72 69 74 69 6e 67 5c 6e 22  " for writing\n"
2a8f0 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20  , azCmd[1]);.   
2a900 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2a910 20 20 69 6e 74 20 73 7a 43 68 6e 67 3b 0a 20 20    int szChng;.  
2a920 20 20 20 20 20 20 76 6f 69 64 20 2a 70 43 68 6e        void *pChn
2a930 67 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61  g;.        if( a
2a940 7a 43 6d 64 5b 30 5d 5b 30 5d 3d 3d 27 63 27 20  zCmd[0][0]=='c' 
2a950 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
2a960 3d 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e  = sqlite3session
2a970 5f 63 68 61 6e 67 65 73 65 74 28 70 53 65 73 73  _changeset(pSess
2a980 69 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68 6e 67 2c  ion->p, &szChng,
2a990 20 26 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20   &pChng);.      
2a9a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2a9b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73     rc = sqlite3s
2a9c0 65 73 73 69 6f 6e 5f 70 61 74 63 68 73 65 74 28  ession_patchset(
2a9d0 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 26 73 7a  pSession->p, &sz
2a9e0 43 68 6e 67 2c 20 26 70 43 68 6e 67 29 3b 0a 20  Chng, &pChng);. 
2a9f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2aa00 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
2aa10 20 20 20 20 20 70 72 69 6e 74 66 28 22 45 72 72       printf("Err
2aa20 6f 72 3a 20 65 72 72 6f 72 20 63 6f 64 65 20 25  or: error code %
2aa30 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20  d\n", rc);.     
2aa40 20 20 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20       rc = 0;.   
2aa50 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
2aa60 66 28 20 70 43 68 6e 67 0a 20 20 20 20 20 20 20  f( pChng.       
2aa70 20 20 20 26 26 20 66 77 72 69 74 65 28 70 43 68     && fwrite(pCh
2aa80 6e 67 2c 20 73 7a 43 68 6e 67 2c 20 31 2c 20 6f  ng, szChng, 1, o
2aa90 75 74 29 21 3d 31 20 29 7b 0a 20 20 20 20 20 20  ut)!=1 ){.      
2aaa0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2aab0 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 46  tderr, "ERROR: F
2aac0 61 69 6c 65 64 20 74 6f 20 77 72 69 74 65 20 65  ailed to write e
2aad0 6e 74 69 72 65 20 25 64 2d 62 79 74 65 20 6f 75  ntire %d-byte ou
2aae0 74 70 75 74 5c 6e 22 2c 0a 20 20 20 20 20 20 20  tput\n",.       
2aaf0 20 20 20 20 20 20 20 20 20 20 20 73 7a 43 68 6e             szChn
2ab00 67 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  g);.        }.  
2ab10 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
2ab20 65 65 28 70 43 68 6e 67 29 3b 0a 20 20 20 20 20  ee(pChng);.     
2ab30 20 20 20 66 63 6c 6f 73 65 28 6f 75 74 29 3b 0a     fclose(out);.
2ab40 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
2ab50 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69  e..    /* .sessi
2ab60 6f 6e 20 63 6c 6f 73 65 0a 20 20 20 20 2a 2a 20  on close.    ** 
2ab70 43 6c 6f 73 65 20 74 68 65 20 69 64 65 6e 74 69  Close the identi
2ab80 66 69 65 64 20 73 65 73 73 69 6f 6e 0a 20 20 20  fied session.   
2ab90 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63   */.    if( strc
2aba0 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 63 6c  mp(azCmd[0], "cl
2abb0 6f 73 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ose")==0 ){.    
2abc0 20 20 69 66 28 20 6e 43 6d 64 21 3d 31 20 29 20    if( nCmd!=1 ) 
2abd0 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e  goto session_syn
2abe0 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  tax_error;.     
2abf0 20 69 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e   if( p->nSession
2ac00 20 29 7b 0a 20 20 20 20 20 20 20 20 73 65 73 73   ){.        sess
2ac10 69 6f 6e 5f 63 6c 6f 73 65 28 70 53 65 73 73 69  ion_close(pSessi
2ac20 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  on);.        p->
2ac30 61 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d 20 3d  aSession[iSes] =
2ac40 20 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 2d 2d 70   p->aSession[--p
2ac50 2d 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20  ->nSession];.   
2ac60 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a     }.    }else..
2ac70 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20      /* .session 
2ac80 65 6e 61 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f  enable ?BOOLEAN?
2ac90 0a 20 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72  .    ** Query or
2aca0 20 73 65 74 20 74 68 65 20 65 6e 61 62 6c 65 20   set the enable 
2acb0 66 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20  flag.    */.    
2acc0 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64  if( strcmp(azCmd
2acd0 5b 30 5d 2c 20 22 65 6e 61 62 6c 65 22 29 3d 3d  [0], "enable")==
2ace0 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  0 ){.      int i
2acf0 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  i;.      if( nCm
2ad00 64 3e 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69  d>2 ) goto sessi
2ad10 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
2ad20 0a 20 20 20 20 20 20 69 69 20 3d 20 6e 43 6d 64  .      ii = nCmd
2ad30 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c 65  ==1 ? -1 : boole
2ad40 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31 5d  anValue(azCmd[1]
2ad50 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
2ad60 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20  nSession ){.    
2ad70 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33      ii = sqlite3
2ad80 73 65 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28 70  session_enable(p
2ad90 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 69 69 29 3b  Session->p, ii);
2ada0 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
2adb0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65  intf(p->out, "se
2adc0 73 73 69 6f 6e 20 25 73 20 65 6e 61 62 6c 65 20  ssion %s enable 
2add0 66 6c 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20 20  flag = %d\n",.  
2ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adf0 20 20 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d    pSession->zNam
2ae00 65 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 7d 0a  e, ii);.      }.
2ae10 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f      }else..    /
2ae20 2a 20 2e 73 65 73 73 69 6f 6e 20 66 69 6c 74 65  * .session filte
2ae30 72 20 47 4c 4f 42 20 2e 2e 2e 2e 0a 20 20 20 20  r GLOB .....    
2ae40 2a 2a 20 53 65 74 20 61 20 6c 69 73 74 20 6f 66  ** Set a list of
2ae50 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 6f   GLOB patterns o
2ae60 66 20 74 61 62 6c 65 20 6e 61 6d 65 73 20 74 6f  f table names to
2ae70 20 62 65 20 65 78 63 6c 75 64 65 64 2e 0a 20 20   be excluded..  
2ae80 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72    */.    if( str
2ae90 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 66  cmp(azCmd[0], "f
2aea0 69 6c 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20  ilter")==0 ){.  
2aeb0 20 20 20 20 69 6e 74 20 69 69 2c 20 6e 42 79 74      int ii, nByt
2aec0 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  e;.      if( nCm
2aed0 64 3c 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69  d<2 ) goto sessi
2aee0 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
2aef0 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
2af00 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
2af10 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70    for(ii=0; ii<p
2af20 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72  Session->nFilter
2af30 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
2af40 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2af50 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74  pSession->azFilt
2af60 65 72 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 20  er[ii]);.       
2af70 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
2af80 65 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e  e3_free(pSession
2af90 2d 3e 61 7a 46 69 6c 74 65 72 29 3b 0a 20 20 20  ->azFilter);.   
2afa0 20 20 20 20 20 6e 42 79 74 65 20 3d 20 73 69 7a       nByte = siz
2afb0 65 6f 66 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a  eof(pSession->az
2afc0 46 69 6c 74 65 72 5b 30 5d 29 2a 28 6e 43 6d 64  Filter[0])*(nCmd
2afd0 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 70 53 65  -1);.        pSe
2afe0 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 20  ssion->azFilter 
2aff0 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  = sqlite3_malloc
2b000 28 20 6e 42 79 74 65 20 29 3b 0a 20 20 20 20 20  ( nByte );.     
2b010 20 20 20 69 66 28 20 70 53 65 73 73 69 6f 6e 2d     if( pSession-
2b020 3e 61 7a 46 69 6c 74 65 72 3d 3d 30 20 29 7b 0a  >azFilter==0 ){.
2b030 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
2b040 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
2b050 72 6f 72 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f  ror: out or memo
2b060 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  ry\n");.        
2b070 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20    exit(1);.     
2b080 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72     }.        for
2b090 28 69 69 3d 31 3b 20 69 69 3c 6e 43 6d 64 3b 20  (ii=1; ii<nCmd; 
2b0a0 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
2b0b0 20 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c   pSession->azFil
2b0c0 74 65 72 5b 69 69 2d 31 5d 20 3d 20 73 71 6c 69  ter[ii-1] = sqli
2b0d0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
2b0e0 2c 20 61 7a 43 6d 64 5b 69 69 5d 29 3b 0a 20 20  , azCmd[ii]);.  
2b0f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2b100 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65  pSession->nFilte
2b110 72 20 3d 20 69 69 2d 31 3b 0a 20 20 20 20 20 20  r = ii-1;.      
2b120 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20  }.    }else..   
2b130 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 69 6e 64   /* .session ind
2b140 69 72 65 63 74 20 3f 42 4f 4f 4c 45 41 4e 3f 0a  irect ?BOOLEAN?.
2b150 20 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20      ** Query or 
2b160 73 65 74 20 74 68 65 20 69 6e 64 69 72 65 63 74  set the indirect
2b170 20 66 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20   flag.    */.   
2b180 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d   if( strcmp(azCm
2b190 64 5b 30 5d 2c 20 22 69 6e 64 69 72 65 63 74 22  d[0], "indirect"
2b1a0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  )==0 ){.      in
2b1b0 74 20 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20  t ii;.      if( 
2b1c0 6e 43 6d 64 3e 32 20 29 20 67 6f 74 6f 20 73 65  nCmd>2 ) goto se
2b1d0 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
2b1e0 6f 72 3b 0a 20 20 20 20 20 20 69 69 20 3d 20 6e  or;.      ii = n
2b1f0 43 6d 64 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f  Cmd==1 ? -1 : bo
2b200 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64  oleanValue(azCmd
2b210 5b 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  [1]);.      if( 
2b220 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20  p->nSession ){. 
2b230 20 20 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69         ii = sqli
2b240 74 65 33 73 65 73 73 69 6f 6e 5f 69 6e 64 69 72  te3session_indir
2b250 65 63 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c  ect(pSession->p,
2b260 20 69 69 29 3b 0a 20 20 20 20 20 20 20 20 75 74   ii);.        ut
2b270 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
2b280 2c 20 22 73 65 73 73 69 6f 6e 20 25 73 20 69 6e  , "session %s in
2b290 64 69 72 65 63 74 20 66 6c 61 67 20 3d 20 25 64  direct flag = %d
2b2a0 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
2b2b0 20 20 20 20 20 20 20 20 20 70 53 65 73 73 69 6f           pSessio
2b2c0 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29 3b 0a 20  n->zName, ii);. 
2b2d0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
2b2e0 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f  ..    /* .sessio
2b2f0 6e 20 69 73 65 6d 70 74 79 0a 20 20 20 20 2a 2a  n isempty.    **
2b300 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   Determine if th
2b310 65 20 73 65 73 73 69 6f 6e 20 69 73 20 65 6d 70  e session is emp
2b320 74 79 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  ty.    */.    if
2b330 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30  ( strcmp(azCmd[0
2b340 5d 2c 20 22 69 73 65 6d 70 74 79 22 29 3d 3d 30  ], "isempty")==0
2b350 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69   ){.      int ii
2b360 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64  ;.      if( nCmd
2b370 21 3d 31 20 29 20 67 6f 74 6f 20 73 65 73 73 69  !=1 ) goto sessi
2b380 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
2b390 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
2b3a0 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
2b3b0 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65    ii = sqlite3se
2b3c0 73 73 69 6f 6e 5f 69 73 65 6d 70 74 79 28 70 53  ssion_isempty(pS
2b3d0 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20  ession->p);.    
2b3e0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2b3f0 70 2d 3e 6f 75 74 2c 20 22 73 65 73 73 69 6f 6e  p->out, "session
2b400 20 25 73 20 69 73 65 6d 70 74 79 20 66 6c 61 67   %s isempty flag
2b410 20 3d 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20   = %d\n",.      
2b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 53                pS
2b430 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69  ession->zName, i
2b440 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  i);.      }.    
2b450 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73  }else..    /* .s
2b460 65 73 73 69 6f 6e 20 6c 69 73 74 0a 20 20 20 20  ession list.    
2b470 2a 2a 20 4c 69 73 74 20 61 6c 6c 20 63 75 72 72  ** List all curr
2b480 65 6e 74 6c 79 20 6f 70 65 6e 20 73 65 73 73 69  ently open sessi
2b490 6f 6e 73 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ons.    */.    i
2b4a0 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
2b4b0 30 5d 2c 22 6c 69 73 74 22 29 3d 3d 30 20 29 7b  0],"list")==0 ){
2b4c0 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
2b4d0 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69  i<p->nSession; i
2b4e0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  ++){.        utf
2b4f0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2b500 20 22 25 64 20 25 73 5c 6e 22 2c 20 69 2c 20 70   "%d %s\n", i, p
2b510 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 5d 2e 7a 4e  ->aSession[i].zN
2b520 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ame);.      }.  
2b530 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20    }else..    /* 
2b540 2e 73 65 73 73 69 6f 6e 20 6f 70 65 6e 20 44 42  .session open DB
2b550 20 4e 41 4d 45 0a 20 20 20 20 2a 2a 20 4f 70 65   NAME.    ** Ope
2b560 6e 20 61 20 6e 65 77 20 73 65 73 73 69 6f 6e 20  n a new session 
2b570 63 61 6c 6c 65 64 20 4e 41 4d 45 20 6f 6e 20 74  called NAME on t
2b580 68 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61  he attached data
2b590 62 61 73 65 20 44 42 2e 0a 20 20 20 20 2a 2a 20  base DB..    ** 
2b5a0 44 42 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 22  DB is normally "
2b5b0 6d 61 69 6e 22 2e 0a 20 20 20 20 2a 2f 0a 20 20  main"..    */.  
2b5c0 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43    if( strcmp(azC
2b5d0 6d 64 5b 30 5d 2c 22 6f 70 65 6e 22 29 3d 3d 30  md[0],"open")==0
2b5e0 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a   ){.      char *
2b5f0 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20 69 66 28  zName;.      if(
2b600 20 6e 43 6d 64 21 3d 33 20 29 20 67 6f 74 6f 20   nCmd!=3 ) goto 
2b610 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65  session_syntax_e
2b620 72 72 6f 72 3b 0a 20 20 20 20 20 20 7a 4e 61 6d  rror;.      zNam
2b630 65 20 3d 20 61 7a 43 6d 64 5b 32 5d 3b 0a 20 20  e = azCmd[2];.  
2b640 20 20 20 20 69 66 28 20 7a 4e 61 6d 65 5b 30 5d      if( zName[0]
2b650 3d 3d 30 20 29 20 67 6f 74 6f 20 73 65 73 73 69  ==0 ) goto sessi
2b660 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
2b670 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
2b680 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69  i<p->nSession; i
2b690 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
2b6a0 20 73 74 72 63 6d 70 28 70 2d 3e 61 53 65 73 73   strcmp(p->aSess
2b6b0 69 6f 6e 5b 69 5d 2e 7a 4e 61 6d 65 2c 7a 4e 61  ion[i].zName,zNa
2b6c0 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  me)==0 ){.      
2b6d0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2b6e0 73 74 64 65 72 72 2c 20 22 53 65 73 73 69 6f 6e  stderr, "Session
2b6f0 20 5c 22 25 73 5c 22 20 61 6c 72 65 61 64 79 20   \"%s\" already 
2b700 65 78 69 73 74 73 5c 6e 22 2c 20 7a 4e 61 6d 65  exists\n", zName
2b710 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
2b720 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
2b730 78 69 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  xit;.        }. 
2b740 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
2b750 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 3e 3d 41 72   p->nSession>=Ar
2b760 72 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73  raySize(p->aSess
2b770 69 6f 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ion) ){.        
2b780 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2b790 72 2c 20 22 4d 61 78 69 6d 75 6d 20 6f 66 20 25  r, "Maximum of %
2b7a0 64 20 73 65 73 73 69 6f 6e 73 5c 6e 22 2c 20 41  d sessions\n", A
2b7b0 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73  rraySize(p->aSes
2b7c0 73 69 6f 6e 29 29 3b 0a 20 20 20 20 20 20 20 20  sion));.        
2b7d0 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2b7e0 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a  d_exit;.      }.
2b7f0 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d        pSession =
2b800 20 26 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 70 2d   &p->aSession[p-
2b810 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20  >nSession];.    
2b820 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65    rc = sqlite3se
2b830 73 73 69 6f 6e 5f 63 72 65 61 74 65 28 70 2d 3e  ssion_create(p->
2b840 64 62 2c 20 61 7a 43 6d 64 5b 31 5d 2c 20 26 70  db, azCmd[1], &p
2b850 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20  Session->p);.   
2b860 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
2b870 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2b880 73 74 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20  stderr, "Cannot 
2b890 6f 70 65 6e 20 73 65 73 73 69 6f 6e 3a 20 65 72  open session: er
2b8a0 72 6f 72 20 63 6f 64 65 3d 25 64 5c 6e 22 2c 20  ror code=%d\n", 
2b8b0 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  rc);.        rc 
2b8c0 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 0;.        got
2b8d0 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
2b8e0 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  xit;.      }.   
2b8f0 20 20 20 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69     pSession->nFi
2b900 6c 74 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20  lter = 0;.      
2b910 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 74  sqlite3session_t
2b920 61 62 6c 65 5f 66 69 6c 74 65 72 28 70 53 65 73  able_filter(pSes
2b930 73 69 6f 6e 2d 3e 70 2c 20 73 65 73 73 69 6f 6e  sion->p, session
2b940 5f 66 69 6c 74 65 72 2c 20 70 53 65 73 73 69 6f  _filter, pSessio
2b950 6e 29 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 65  n);.      p->nSe
2b960 73 73 69 6f 6e 2b 2b 3b 0a 20 20 20 20 20 20 70  ssion++;.      p
2b970 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 20 3d  Session->zName =
2b980 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2b990 28 22 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  ("%s", zName);. 
2b9a0 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 2f 2a 20     }else.    /* 
2b9b0 49 66 20 6e 6f 20 63 6f 6d 6d 61 6e 64 20 6e 61  If no command na
2b9c0 6d 65 20 6d 61 74 63 68 65 73 2c 20 73 68 6f 77  me matches, show
2b9d0 20 61 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20   a syntax error 
2b9e0 2a 2f 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 73  */.    session_s
2b9f0 79 6e 74 61 78 5f 65 72 72 6f 72 3a 0a 20 20 20  yntax_error:.   
2ba00 20 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28 70 29   session_help(p)
2ba10 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
2ba20 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2ba30 44 45 42 55 47 0a 20 20 2f 2a 20 55 6e 64 6f 63  DEBUG.  /* Undoc
2ba40 75 6d 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 73  umented commands
2ba50 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 74 65   for internal te
2ba60 73 74 69 6e 67 2e 20 20 53 75 62 6a 65 63 74 20  sting.  Subject 
2ba70 74 6f 20 63 68 61 6e 67 65 0a 20 20 2a 2a 20 77  to change.  ** w
2ba80 69 74 68 6f 75 74 20 6e 6f 74 69 63 65 2e 20 2a  ithout notice. *
2ba90 2f 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26  /.  if( c=='s' &
2baa0 26 20 6e 3e 3d 31 30 20 26 26 20 73 74 72 6e 63  & n>=10 && strnc
2bab0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 65  mp(azArg[0], "se
2bac0 6c 66 74 65 73 74 2d 22 2c 20 39 29 3d 3d 30 20  lftest-", 9)==0 
2bad0 29 7b 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63  ){.    if( strnc
2bae0 6d 70 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22  mp(azArg[0]+9, "
2baf0 62 6f 6f 6c 65 61 6e 22 2c 20 6e 2d 39 29 3d 3d  boolean", n-9)==
2bb00 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  0 ){.      int i
2bb10 2c 20 76 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  , v;.      for(i
2bb20 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =1; i<nArg; i++)
2bb30 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 62 6f  {.        v = bo
2bb40 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
2bb50 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 75 74  [i]);.        ut
2bb60 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
2bb70 2c 20 22 25 73 3a 20 25 64 20 30 78 25 78 5c 6e  , "%s: %d 0x%x\n
2bb80 22 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 76 2c 20  ", azArg[i], v, 
2bb90 76 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  v);.      }.    
2bba0 7d 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d  }.    if( strncm
2bbb0 70 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 69  p(azArg[0]+9, "i
2bbc0 6e 74 65 67 65 72 22 2c 20 6e 2d 39 29 3d 3d 30  nteger", n-9)==0
2bbd0 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b   ){.      int i;
2bbe0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 76   sqlite3_int64 v
2bbf0 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b  ;.      for(i=1;
2bc00 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
2bc10 20 20 20 20 20 20 20 63 68 61 72 20 7a 42 75 66         char zBuf
2bc20 5b 32 30 30 5d 3b 0a 20 20 20 20 20 20 20 20 76  [200];.        v
2bc30 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28   = integerValue(
2bc40 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20  azArg[i]);.     
2bc50 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
2bc60 6e 74 66 28 73 69 7a 65 6f 66 28 7a 42 75 66 29  ntf(sizeof(zBuf)
2bc70 2c 7a 42 75 66 2c 22 25 73 3a 20 25 6c 6c 64 20  ,zBuf,"%s: %lld 
2bc80 30 78 25 6c 6c 78 5c 6e 22 2c 20 61 7a 41 72 67  0x%llx\n", azArg
2bc90 5b 69 5d 2c 76 2c 76 29 3b 0a 20 20 20 20 20 20  [i],v,v);.      
2bca0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2bcb0 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66  >out, "%s", zBuf
2bcc0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
2bcd0 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
2bce0 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26  .  if( c=='s' &&
2bcf0 20 6e 3e 3d 34 20 26 26 20 73 74 72 6e 63 6d 70   n>=4 && strncmp
2bd00 28 61 7a 41 72 67 5b 30 5d 2c 22 73 65 6c 66 74  (azArg[0],"selft
2bd10 65 73 74 22 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20  est",n)==0 ){.  
2bd20 20 20 69 6e 74 20 62 49 73 49 6e 69 74 20 3d 20    int bIsInit = 
2bd30 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  0;         /* Tr
2bd40 75 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ue to initialize
2bd50 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74 61   the SELFTEST ta
2bd60 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62  ble */.    int b
2bd70 56 65 72 62 6f 73 65 20 3d 20 30 3b 20 20 20 20  Verbose = 0;    
2bd80 20 20 20 20 2f 2a 20 56 65 72 62 6f 73 65 20 6f      /* Verbose o
2bd90 75 74 70 75 74 20 2a 2f 0a 20 20 20 20 69 6e 74  utput */.    int
2bda0 20 62 53 65 6c 66 74 65 73 74 45 78 69 73 74 73   bSelftestExists
2bdb0 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
2bdc0 20 53 45 4c 46 54 45 53 54 20 61 6c 72 65 61 64   SELFTEST alread
2bdd0 79 20 65 78 69 73 74 73 20 2a 2f 0a 20 20 20 20  y exists */.    
2bde0 69 6e 74 20 69 2c 20 6b 3b 20 20 20 20 20 20 20  int i, k;       
2bdf0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
2be00 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20   counters */.   
2be10 20 69 6e 74 20 6e 54 65 73 74 20 3d 20 30 3b 20   int nTest = 0; 
2be20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2be30 62 65 72 20 6f 66 20 74 65 73 74 73 20 72 75 6e  ber of tests run
2be40 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 45 72  s */.    int nEr
2be50 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
2be60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
2be70 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
2be80 20 20 53 68 65 6c 6c 54 65 78 74 20 73 74 72 3b    ShellText str;
2be90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e             /* An
2bea0 73 77 65 72 20 66 6f 72 20 61 20 71 75 65 72 79  swer for a query
2beb0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   */.    sqlite3_
2bec0 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b  stmt *pStmt = 0;
2bed0 20 2f 2a 20 51 75 65 72 79 20 61 67 61 69 6e 73   /* Query agains
2bee0 74 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74  t the SELFTEST t
2bef0 61 62 6c 65 20 2a 2f 0a 0a 20 20 20 20 6f 70 65  able */..    ope
2bf00 6e 5f 64 62 28 70 2c 30 29 3b 0a 20 20 20 20 66  n_db(p,0);.    f
2bf10 6f 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20  or(i=1; i<nArg; 
2bf20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  i++){.      cons
2bf30 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72  t char *z = azAr
2bf40 67 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  g[i];.      if( 
2bf50 7a 5b 30 5d 3d 3d 27 2d 27 20 26 26 20 7a 5b 31  z[0]=='-' && z[1
2bf60 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20  ]=='-' ) z++;.  
2bf70 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
2bf80 2c 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a  ,"-init")==0 ){.
2bf90 20 20 20 20 20 20 20 20 62 49 73 49 6e 69 74 20          bIsInit 
2bfa0 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 1;.      }else
2bfb0 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d  .      if( strcm
2bfc0 70 28 7a 2c 22 2d 76 22 29 3d 3d 30 20 29 7b 0a  p(z,"-v")==0 ){.
2bfd0 20 20 20 20 20 20 20 20 62 56 65 72 62 6f 73 65          bVerbose
2bfe0 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a  ++;.      }else.
2bff0 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2c000 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2c010 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74  rr, "Unknown opt
2c020 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22  ion \"%s\" on \"
2c030 25 73 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20  %s\"\n",.       
2c040 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
2c050 72 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29  rg[i], azArg[0])
2c060 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  ;.        raw_pr
2c070 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 68  intf(stderr, "Sh
2c080 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20  ould be one of: 
2c090 2d 2d 69 6e 69 74 20 2d 76 5c 6e 22 29 3b 0a 20  --init -v\n");. 
2c0a0 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2c0b0 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2c0c0 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2c0d0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
2c0e0 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74 61 62   if( sqlite3_tab
2c0f0 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
2c100 74 61 28 70 2d 3e 64 62 2c 22 6d 61 69 6e 22 2c  ta(p->db,"main",
2c110 22 73 65 6c 66 74 65 73 74 22 2c 30 2c 30 2c 30  "selftest",0,0,0
2c120 2c 30 2c 30 2c 30 29 0a 20 20 20 20 20 20 20 20  ,0,0,0).        
2c130 20 20 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20     != SQLITE_OK 
2c140 29 7b 0a 20 20 20 20 20 20 62 53 65 6c 66 74 65  ){.      bSelfte
2c150 73 74 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20  stExists = 0;.  
2c160 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 62    }else{.      b
2c170 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d  SelftestExists =
2c180 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   1;.    }.    if
2c190 28 20 62 49 73 49 6e 69 74 20 29 7b 0a 20 20 20  ( bIsInit ){.   
2c1a0 20 20 20 63 72 65 61 74 65 53 65 6c 66 74 65 73     createSelftes
2c1b0 74 54 61 62 6c 65 28 70 29 3b 0a 20 20 20 20 20  tTable(p);.     
2c1c0 20 62 53 65 6c 66 74 65 73 74 45 78 69 73 74 73   bSelftestExists
2c1d0 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
2c1e0 69 6e 69 74 54 65 78 74 28 26 73 74 72 29 3b 0a  initText(&str);.
2c1f0 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
2c200 73 74 72 2c 20 22 78 22 2c 20 30 29 3b 0a 20 20  str, "x", 0);.  
2c210 20 20 66 6f 72 28 6b 3d 62 53 65 6c 66 74 65 73    for(k=bSelftes
2c220 74 45 78 69 73 74 73 3b 20 6b 3e 3d 30 3b 20 6b  tExists; k>=0; k
2c230 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6b  --){.      if( k
2c240 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==1 ){.        r
2c250 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
2c260 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20  are_v2(p->db,.  
2c270 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43            "SELEC
2c280 54 20 74 6e 6f 2c 6f 70 2c 63 6d 64 2c 61 6e 73  T tno,op,cmd,ans
2c290 20 46 52 4f 4d 20 73 65 6c 66 74 65 73 74 20 4f   FROM selftest O
2c2a0 52 44 45 52 20 42 59 20 74 6e 6f 22 2c 0a 20 20  RDER BY tno",.  
2c2b0 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70            -1, &p
2c2c0 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20  Stmt, 0);.      
2c2d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
2c2e0 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
2c2f0 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20  are_v2(p->db,.  
2c300 20 20 20 20 20 20 20 20 22 56 41 4c 55 45 53 28          "VALUES(
2c310 30 2c 27 6d 65 6d 6f 27 2c 27 4d 69 73 73 69 6e  0,'memo','Missin
2c320 67 20 53 45 4c 46 54 45 53 54 20 74 61 62 6c 65  g SELFTEST table
2c330 20 2d 20 64 65 66 61 75 6c 74 20 63 68 65 63 6b   - default check
2c340 73 20 6f 6e 6c 79 27 2c 27 27 29 2c 22 0a 20 20  s only',''),".  
2c350 20 20 20 20 20 20 20 20 22 20 20 20 20 20 20 28          "      (
2c360 31 2c 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20  1,'run','PRAGMA 
2c370 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27  integrity_check'
2c380 2c 27 6f 6b 27 29 22 2c 0a 20 20 20 20 20 20 20  ,'ok')",.       
2c390 20 20 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30     -1, &pStmt, 0
2c3a0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
2c3b0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
2c3c0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2c3d0 64 65 72 72 2c 20 22 45 72 72 6f 72 20 71 75 65  derr, "Error que
2c3e0 72 79 69 6e 67 20 74 68 65 20 73 65 6c 66 74 65  rying the selfte
2c3f0 73 74 20 74 61 62 6c 65 5c 6e 22 29 3b 0a 20 20  st table\n");.  
2c400 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2c410 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
2c420 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
2c430 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2c440 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2c450 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72       }.      for
2c460 28 69 3d 31 3b 20 73 71 6c 69 74 65 33 5f 73 74  (i=1; sqlite3_st
2c470 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
2c480 45 5f 52 4f 57 3b 20 69 2b 2b 29 7b 0a 20 20 20  E_ROW; i++){.   
2c490 20 20 20 20 20 69 6e 74 20 74 6e 6f 20 3d 20 73       int tno = s
2c4a0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
2c4b0 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20  t(pStmt, 0);.   
2c4c0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
2c4d0 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73 74 20 63 68  *zOp = (const ch
2c4e0 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
2c4f0 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31  mn_text(pStmt, 1
2c500 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74  );.        const
2c510 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 28 63   char *zSql = (c
2c520 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
2c530 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
2c540 53 74 6d 74 2c 20 32 29 3b 0a 20 20 20 20 20 20  Stmt, 2);.      
2c550 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
2c560 6e 73 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  ns = (const char
2c570 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
2c580 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 33 29 3b  _text(pStmt, 3);
2c590 0a 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b  ..        k = 0;
2c5a0 0a 20 20 20 20 20 20 20 20 69 66 28 20 62 56 65  .        if( bVe
2c5b0 72 62 6f 73 65 3e 30 20 29 7b 0a 20 20 20 20 20  rbose>0 ){.     
2c5c0 20 20 20 20 20 63 68 61 72 20 2a 7a 51 75 6f 74       char *zQuot
2c5d0 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e = sqlite3_mpri
2c5e0 6e 74 66 28 22 25 71 22 2c 20 7a 53 71 6c 29 3b  ntf("%q", zSql);
2c5f0 0a 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74  .          print
2c600 66 28 22 25 64 3a 20 25 73 20 25 73 5c 6e 22 2c  f("%d: %s %s\n",
2c610 20 74 6e 6f 2c 20 7a 4f 70 2c 20 7a 53 71 6c 29   tno, zOp, zSql)
2c620 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
2c630 74 65 33 5f 66 72 65 65 28 7a 51 75 6f 74 65 29  te3_free(zQuote)
2c640 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2c650 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
2c660 4f 70 2c 22 6d 65 6d 6f 22 29 3d 3d 30 20 29 7b  Op,"memo")==0 ){
2c670 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
2c680 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2c690 25 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20  %s\n", zSql);.  
2c6a0 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20        }else.    
2c6b0 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
2c6c0 4f 70 2c 22 72 75 6e 22 29 3d 3d 30 20 29 7b 0a  Op,"run")==0 ){.
2c6d0 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
2c6e0 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
2c6f0 20 20 20 20 20 20 20 73 74 72 2e 6e 20 3d 20 30         str.n = 0
2c700 3b 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 2e  ;.          str.
2c710 7a 5b 30 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  z[0] = 0;.      
2c720 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2c730 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71  _exec(p->db, zSq
2c740 6c 2c 20 63 61 70 74 75 72 65 4f 75 74 70 75 74  l, captureOutput
2c750 43 61 6c 6c 62 61 63 6b 2c 20 26 73 74 72 2c 20  Callback, &str, 
2c760 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
2c770 20 20 20 20 20 6e 54 65 73 74 2b 2b 3b 0a 20 20       nTest++;.  
2c780 20 20 20 20 20 20 20 20 69 66 28 20 62 56 65 72          if( bVer
2c790 62 6f 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20  bose ){.        
2c7a0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2c7b0 70 2d 3e 6f 75 74 2c 20 22 52 65 73 75 6c 74 3a  p->out, "Result:
2c7c0 20 25 73 5c 6e 22 2c 20 73 74 72 2e 7a 29 3b 0a   %s\n", str.z);.
2c7d0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2c7e0 20 20 20 20 20 20 69 66 28 20 72 63 20 7c 7c 20        if( rc || 
2c7f0 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20  zErrMsg ){.     
2c800 20 20 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a 20         nErr++;. 
2c810 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
2c820 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  1;.            u
2c830 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
2c840 74 2c 20 22 25 64 3a 20 65 72 72 6f 72 2d 63 6f  t, "%d: error-co
2c850 64 65 2d 25 64 3a 20 25 73 5c 6e 22 2c 20 74 6e  de-%d: %s\n", tn
2c860 6f 2c 20 72 63 2c 20 7a 45 72 72 4d 73 67 29 3b  o, rc, zErrMsg);
2c870 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
2c880 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73  ite3_free(zErrMs
2c890 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  g);.          }e
2c8a0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
2c8b0 41 6e 73 2c 73 74 72 2e 7a 29 21 3d 30 20 29 7b  Ans,str.z)!=0 ){
2c8c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 45 72  .            nEr
2c8d0 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20  r++;.           
2c8e0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   rc = 1;.       
2c8f0 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2c900 28 70 2d 3e 6f 75 74 2c 20 22 25 64 3a 20 45 78  (p->out, "%d: Ex
2c910 70 65 63 74 65 64 3a 20 5b 25 73 5d 5c 6e 22 2c  pected: [%s]\n",
2c920 20 74 6e 6f 2c 20 7a 41 6e 73 29 3b 0a 20 20 20   tno, zAns);.   
2c930 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
2c940 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64  intf(p->out, "%d
2c950 3a 20 20 20 20 20 20 47 6f 74 3a 20 5b 25 73 5d  :      Got: [%s]
2c960 5c 6e 22 2c 20 74 6e 6f 2c 20 73 74 72 2e 7a 29  \n", tno, str.z)
2c970 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
2c980 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20        }else.    
2c990 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
2c9a0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2c9b0 72 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  rr,.            
2c9c0 22 55 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69  "Unknown operati
2c9d0 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 73 65 6c  on \"%s\" on sel
2c9e0 66 74 65 73 74 20 6c 69 6e 65 20 25 64 5c 6e 22  ftest line %d\n"
2c9f0 2c 20 7a 4f 70 2c 20 74 6e 6f 29 3b 0a 20 20 20  , zOp, tno);.   
2ca00 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2ca10 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2ca20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2ca30 7d 20 2f 2a 20 45 6e 64 20 6c 6f 6f 70 20 6f 76  } /* End loop ov
2ca40 65 72 20 72 6f 77 73 20 6f 66 20 63 6f 6e 74 65  er rows of conte
2ca50 6e 74 20 66 72 6f 6d 20 53 45 4c 46 54 45 53 54  nt from SELFTEST
2ca60 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
2ca70 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
2ca80 29 3b 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20  );.    } /* End 
2ca90 6c 6f 6f 70 20 6f 76 65 72 20 6b 20 2a 2f 0a 20  loop over k */. 
2caa0 20 20 20 66 72 65 65 54 65 78 74 28 26 73 74 72     freeText(&str
2cab0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2cac0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 65  tf(p->out, "%d e
2cad0 72 72 6f 72 73 20 6f 75 74 20 6f 66 20 25 64 20  rrors out of %d 
2cae0 74 65 73 74 73 5c 6e 22 2c 20 6e 45 72 72 2c 20  tests\n", nErr, 
2caf0 6e 54 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 0a  nTest);.  }else.
2cb00 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26  .  if( c=='s' &&
2cb10 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2cb20 5d 2c 20 22 73 65 70 61 72 61 74 6f 72 22 2c 20  ], "separator", 
2cb30 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
2cb40 20 6e 41 72 67 3c 32 20 7c 7c 20 6e 41 72 67 3e   nArg<2 || nArg>
2cb50 33 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  3 ){.      raw_p
2cb60 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
2cb70 73 61 67 65 3a 20 2e 73 65 70 61 72 61 74 6f 72  sage: .separator
2cb80 20 43 4f 4c 20 3f 52 4f 57 3f 5c 6e 22 29 3b 0a   COL ?ROW?\n");.
2cb90 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2cba0 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67    }.    if( nArg
2cbb0 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  >=2 ){.      sql
2cbc0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
2cbd0 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72  zeof(p->colSepar
2cbe0 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70  ator), p->colSep
2cbf0 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20  arator,.        
2cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2cc10 25 2e 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61  %.*s", (int)Arra
2cc20 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 53 65 70 61  ySize(p->colSepa
2cc30 72 61 74 6f 72 29 2d 31 2c 20 61 7a 41 72 67 5b  rator)-1, azArg[
2cc40 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  1]);.    }.    i
2cc50 66 28 20 6e 41 72 67 3e 3d 33 20 29 7b 0a 20 20  f( nArg>=3 ){.  
2cc60 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2cc70 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72  intf(sizeof(p->r
2cc80 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d  owSeparator), p-
2cc90 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20  >rowSeparator,. 
2cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccb0 20 20 20 20 20 20 22 25 2e 2a 73 22 2c 20 28 69        "%.*s", (i
2ccc0 6e 74 29 41 72 72 61 79 53 69 7a 65 28 70 2d 3e  nt)ArraySize(p->
2ccd0 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2d 31 2c  rowSeparator)-1,
2cce0 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20   azArg[2]);.    
2ccf0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
2cd00 20 63 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 34 20   c=='s' && n>=4 
2cd10 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
2cd20 5b 30 5d 2c 22 73 68 61 33 73 75 6d 22 2c 6e 29  [0],"sha3sum",n)
2cd30 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ==0 ){.    const
2cd40 20 63 68 61 72 20 2a 7a 4c 69 6b 65 20 3d 20 30   char *zLike = 0
2cd50 3b 20 20 20 2f 2a 20 57 68 69 63 68 20 74 61 62  ;   /* Which tab
2cd60 6c 65 20 74 6f 20 63 68 65 63 6b 73 75 6d 2e 20  le to checksum. 
2cd70 30 20 6d 65 61 6e 73 20 65 76 65 72 79 74 68 69  0 means everythi
2cd80 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b  ng */.    int i;
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cda0 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
2cdb0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 53  er */.    int bS
2cdc0 63 68 65 6d 61 20 3d 20 30 3b 20 20 20 20 20 20  chema = 0;      
2cdd0 20 20 20 2f 2a 20 41 6c 73 6f 20 68 61 73 68 20     /* Also hash 
2cde0 74 68 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  the schema */.  
2cdf0 20 20 69 6e 74 20 62 53 65 70 61 72 61 74 65 20    int bSeparate 
2ce00 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  = 0;       /* Ha
2ce10 73 68 20 65 61 63 68 20 74 61 62 6c 65 20 73 65  sh each table se
2ce20 70 61 72 61 74 65 6c 79 20 2a 2f 0a 20 20 20 20  parately */.    
2ce30 69 6e 74 20 69 53 69 7a 65 20 3d 20 32 32 34 3b  int iSize = 224;
2ce40 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68           /* Hash
2ce50 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
2ce60 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 44 65  e */.    int bDe
2ce70 62 75 67 20 3d 20 30 3b 20 20 20 20 20 20 20 20  bug = 0;        
2ce80 20 20 2f 2a 20 4f 6e 6c 79 20 73 68 6f 77 20 74    /* Only show t
2ce90 68 65 20 71 75 65 72 79 20 74 68 61 74 20 77 6f  he query that wo
2cea0 75 6c 64 20 68 61 76 65 20 72 75 6e 20 2a 2f 0a  uld have run */.
2ceb0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
2cec0 20 2a 70 53 74 6d 74 3b 20 20 20 20 20 2f 2a 20   *pStmt;     /* 
2ced0 46 6f 72 20 71 75 65 72 79 69 6e 67 20 74 61 62  For querying tab
2cee0 6c 65 73 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 20  les names */.   
2cef0 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20   char *zSql;    
2cf00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c            /* SQL
2cf10 20 74 6f 20 62 65 20 72 75 6e 20 2a 2f 0a 20 20   to be run */.  
2cf20 20 20 63 68 61 72 20 2a 7a 53 65 70 3b 20 20 20    char *zSep;   
2cf30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65             /* Se
2cf40 70 61 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 53  parator */.    S
2cf50 68 65 6c 6c 54 65 78 74 20 73 53 71 6c 3b 20 20  hellText sSql;  
2cf60 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
2cf70 65 74 65 20 53 51 4c 20 66 6f 72 20 74 68 65 20  ete SQL for the 
2cf80 71 75 65 72 79 20 74 6f 20 72 75 6e 20 74 68 65  query to run the
2cf90 20 68 61 73 68 20 2a 2f 0a 20 20 20 20 53 68 65   hash */.    She
2cfa0 6c 6c 54 65 78 74 20 73 51 75 65 72 79 3b 20 20  llText sQuery;  
2cfb0 20 20 20 20 20 20 2f 2a 20 53 65 74 20 6f 66 20        /* Set of 
2cfc0 71 75 65 72 69 65 73 20 75 73 65 64 20 74 6f 20  queries used to 
2cfd0 72 65 61 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  read all content
2cfe0 20 2a 2f 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   */.    open_db(
2cff0 70 2c 20 30 29 3b 0a 20 20 20 20 66 6f 72 28 69  p, 0);.    for(i
2d000 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =1; i<nArg; i++)
2d010 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
2d020 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d  ar *z = azArg[i]
2d030 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d  ;.      if( z[0]
2d040 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20  =='-' ){.       
2d050 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66   z++;.        if
2d060 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b  ( z[0]=='-' ) z+
2d070 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  +;.        if( s
2d080 74 72 63 6d 70 28 7a 2c 22 73 63 68 65 6d 61 22  trcmp(z,"schema"
2d090 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
2d0a0 20 20 62 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20    bSchema = 1;. 
2d0b0 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20         }else.   
2d0c0 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
2d0d0 7a 2c 22 73 68 61 33 2d 32 32 34 22 29 3d 3d 30  z,"sha3-224")==0
2d0e0 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68   || strcmp(z,"sh
2d0f0 61 33 2d 32 35 36 22 29 3d 3d 30 0a 20 20 20 20  a3-256")==0.    
2d100 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a       || strcmp(z
2d110 2c 22 73 68 61 33 2d 33 38 34 22 29 3d 3d 30 20  ,"sha3-384")==0 
2d120 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61  || strcmp(z,"sha
2d130 33 2d 35 31 32 22 29 3d 3d 30 0a 20 20 20 20 20  3-512")==0.     
2d140 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20     ){.          
2d150 69 53 69 7a 65 20 3d 20 61 74 6f 69 28 26 7a 5b  iSize = atoi(&z[
2d160 35 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  5]);.        }el
2d170 73 65 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  se.        if( s
2d180 74 72 63 6d 70 28 7a 2c 22 64 65 62 75 67 22 29  trcmp(z,"debug")
2d190 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
2d1a0 20 62 44 65 62 75 67 20 3d 20 31 3b 0a 20 20 20   bDebug = 1;.   
2d1b0 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20       }else.     
2d1c0 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75     {.          u
2d1d0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
2d1e0 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69  r, "Unknown opti
2d1f0 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25  on \"%s\" on \"%
2d200 73 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  s\"\n",.        
2d210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a                az
2d220 41 72 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d  Arg[i], azArg[0]
2d230 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  );.          raw
2d240 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2d250 22 53 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f  "Should be one o
2d260 66 3a 20 2d 2d 73 63 68 65 6d 61 22 0a 20 20 20  f: --schema".   
2d270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d280 20 20 20 20 20 20 20 20 20 20 22 20 2d 2d 73 68            " --sh
2d290 61 33 2d 32 32 34 20 2d 2d 73 68 61 33 2d 32 35  a3-224 --sha3-25
2d2a0 35 20 2d 2d 73 68 61 33 2d 33 38 34 20 2d 2d 73  5 --sha3-384 --s
2d2b0 68 61 33 2d 35 31 32 5c 6e 22 29 3b 0a 20 20 20  ha3-512\n");.   
2d2c0 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2d2d0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65           goto me
2d2e0 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
2d2f0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2d300 20 7d 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b 65   }else if( zLike
2d310 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
2d320 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2d330 55 73 61 67 65 3a 20 2e 73 68 61 33 73 75 6d 20  Usage: .sha3sum 
2d340 3f 4f 50 54 49 4f 4e 53 3f 20 3f 4c 49 4b 45 2d  ?OPTIONS? ?LIKE-
2d350 50 41 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20  PATTERN?\n");.  
2d360 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
2d370 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
2d380 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
2d390 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2d3a0 20 20 20 7a 4c 69 6b 65 20 3d 20 7a 3b 0a 20 20     zLike = z;.  
2d3b0 20 20 20 20 20 20 62 53 65 70 61 72 61 74 65 20        bSeparate 
2d3c0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
2d3d0 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65   sqlite3_strlike
2d3e0 28 22 73 71 6c 69 74 65 5f 25 22 2c 20 7a 4c 69  ("sqlite_%", zLi
2d3f0 6b 65 2c 20 30 29 3d 3d 30 20 29 20 62 53 63 68  ke, 0)==0 ) bSch
2d400 65 6d 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  ema = 1;.      }
2d410 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 62  .    }.    if( b
2d420 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20  Schema ){.      
2d430 7a 53 71 6c 20 3d 20 22 53 45 4c 45 43 54 20 6c  zSql = "SELECT l
2d440 6f 77 65 72 28 6e 61 6d 65 29 20 46 52 4f 4d 20  ower(name) FROM 
2d450 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20  sqlite_master". 
2d460 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48              " WH
2d470 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
2d480 20 41 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f   AND coalesce(ro
2d490 6f 74 70 61 67 65 2c 30 29 3e 31 22 0a 20 20 20  otpage,0)>1".   
2d4a0 20 20 20 20 20 20 20 20 20 20 22 20 55 4e 49 4f            " UNIO
2d4b0 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 27 73 71  N ALL SELECT 'sq
2d4c0 6c 69 74 65 5f 6d 61 73 74 65 72 27 22 0a 20 20  lite_master'".  
2d4d0 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44             " ORD
2d4e0 45 52 20 42 59 20 31 20 63 6f 6c 6c 61 74 65 20  ER BY 1 collate 
2d4f0 6e 6f 63 61 73 65 22 3b 0a 20 20 20 20 7d 65 6c  nocase";.    }el
2d500 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d  se{.      zSql =
2d510 20 22 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 6e   "SELECT lower(n
2d520 61 6d 65 29 20 46 52 4f 4d 20 73 71 6c 69 74 65  ame) FROM sqlite
2d530 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20 20  _master".       
2d540 20 20 20 20 20 20 22 20 57 48 45 52 45 20 74 79        " WHERE ty
2d550 70 65 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 63  pe='table' AND c
2d560 6f 61 6c 65 73 63 65 28 72 6f 6f 74 70 61 67 65  oalesce(rootpage
2d570 2c 30 29 3e 31 22 0a 20 20 20 20 20 20 20 20 20  ,0)>1".         
2d580 20 20 20 20 22 20 41 4e 44 20 6e 61 6d 65 20 4e      " AND name N
2d590 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f  OT LIKE 'sqlite_
2d5a0 25 27 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  %'".            
2d5b0 20 22 20 4f 52 44 45 52 20 42 59 20 31 20 63 6f   " ORDER BY 1 co
2d5c0 6c 6c 61 74 65 20 6e 6f 63 61 73 65 22 3b 0a 20  llate nocase";. 
2d5d0 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
2d5e0 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
2d5f0 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53  b, zSql, -1, &pS
2d600 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6e 69  tmt, 0);.    ini
2d610 74 54 65 78 74 28 26 73 51 75 65 72 79 29 3b 0a  tText(&sQuery);.
2d620 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 53      initText(&sS
2d630 71 6c 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  ql);.    appendT
2d640 65 78 74 28 26 73 53 71 6c 2c 20 22 57 49 54 48  ext(&sSql, "WITH
2d650 20 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d   [sha3sum$query]
2d660 28 61 2c 62 29 20 41 53 28 22 2c 30 29 3b 0a 20  (a,b) AS(",0);. 
2d670 20 20 20 7a 53 65 70 20 3d 20 22 56 41 4c 55 45     zSep = "VALUE
2d680 53 28 22 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  S(";.    while( 
2d690 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69  SQLITE_ROW==sqli
2d6a0 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 20  te3_step(pStmt) 
2d6b0 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
2d6c0 68 61 72 20 2a 7a 54 61 62 20 3d 20 28 63 6f 6e  har *zTab = (con
2d6d0 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
2d6e0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
2d6f0 6d 74 2c 30 29 3b 0a 20 20 20 20 20 20 69 66 28  mt,0);.      if(
2d700 20 7a 4c 69 6b 65 20 26 26 20 73 71 6c 69 74 65   zLike && sqlite
2d710 33 5f 73 74 72 6c 69 6b 65 28 7a 4c 69 6b 65 2c  3_strlike(zLike,
2d720 20 7a 54 61 62 2c 20 30 29 21 3d 30 20 29 20 63   zTab, 0)!=0 ) c
2d730 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69  ontinue;.      i
2d740 66 28 20 73 74 72 6e 63 6d 70 28 7a 54 61 62 2c  f( strncmp(zTab,
2d750 20 22 73 71 6c 69 74 65 5f 22 2c 37 29 21 3d 30   "sqlite_",7)!=0
2d760 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65   ){.        appe
2d770 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 22  ndText(&sQuery,"
2d780 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 22 2c  SELECT * FROM ",
2d790 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70   0);.        app
2d7a0 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c  endText(&sQuery,
2d7b0 7a 54 61 62 2c 27 22 27 29 3b 0a 20 20 20 20 20  zTab,'"');.     
2d7c0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
2d7d0 51 75 65 72 79 2c 22 20 4e 4f 54 20 49 4e 44 45  Query," NOT INDE
2d7e0 58 45 44 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20  XED;", 0);.     
2d7f0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
2d800 70 28 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f  p(zTab, "sqlite_
2d810 6d 61 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20  master")==0 ){. 
2d820 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
2d830 74 28 26 73 51 75 65 72 79 2c 22 53 45 4c 45 43  t(&sQuery,"SELEC
2d840 54 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f  T type,name,tbl_
2d850 6e 61 6d 65 2c 73 71 6c 20 46 52 4f 4d 20 73 71  name,sql FROM sq
2d860 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20  lite_master".   
2d870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d880 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52 20          " ORDER 
2d890 42 59 20 6e 61 6d 65 3b 22 2c 20 30 29 3b 0a 20  BY name;", 0);. 
2d8a0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
2d8b0 74 72 63 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c  trcmp(zTab, "sql
2d8c0 69 74 65 5f 73 65 71 75 65 6e 63 65 22 29 3d 3d  ite_sequence")==
2d8d0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70  0 ){.        app
2d8e0 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c  endText(&sQuery,
2d8f0 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 73 65 71  "SELECT name,seq
2d900 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71   FROM sqlite_seq
2d910 75 65 6e 63 65 22 0a 20 20 20 20 20 20 20 20 20  uence".         
2d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d930 20 20 22 20 4f 52 44 45 52 20 42 59 20 6e 61 6d    " ORDER BY nam
2d940 65 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  e;", 0);.      }
2d950 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2d960 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f 73 74  zTab, "sqlite_st
2d970 61 74 31 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  at1")==0 ){.    
2d980 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
2d990 73 51 75 65 72 79 2c 22 53 45 4c 45 43 54 20 74  sQuery,"SELECT t
2d9a0 62 6c 2c 69 64 78 2c 73 74 61 74 20 46 52 4f 4d  bl,idx,stat FROM
2d9b0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 22 0a 20   sqlite_stat1". 
2d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9d0 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44 45            " ORDE
2d9e0 52 20 42 59 20 74 62 6c 2c 69 64 78 3b 22 2c 20  R BY tbl,idx;", 
2d9f0 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  0);.      }else 
2da00 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62 2c  if( strcmp(zTab,
2da10 20 22 73 71 6c 69 74 65 5f 73 74 61 74 33 22 29   "sqlite_stat3")
2da20 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
2da30 20 7c 7c 20 73 74 72 63 6d 70 28 7a 54 61 62 2c   || strcmp(zTab,
2da40 20 22 73 71 6c 69 74 65 5f 73 74 61 74 34 22 29   "sqlite_stat4")
2da50 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
2da60 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65 72  ppendText(&sQuer
2da70 79 2c 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  y, "SELECT * FRO
2da80 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  M ", 0);.       
2da90 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75   appendText(&sQu
2daa0 65 72 79 2c 20 7a 54 61 62 2c 20 30 29 3b 0a 20  ery, zTab, 0);. 
2dab0 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
2dac0 74 28 26 73 51 75 65 72 79 2c 20 22 20 4f 52 44  t(&sQuery, " ORD
2dad0 45 52 20 42 59 20 74 62 6c 2c 20 69 64 78 2c 20  ER BY tbl, idx, 
2dae0 72 6f 77 69 64 3b 5c 6e 22 2c 20 30 29 3b 0a 20  rowid;\n", 0);. 
2daf0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70       }.      app
2db00 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a  endText(&sSql, z
2db10 53 65 70 2c 20 30 29 3b 0a 20 20 20 20 20 20 61  Sep, 0);.      a
2db20 70 70 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c  ppendText(&sSql,
2db30 20 73 51 75 65 72 79 2e 7a 2c 20 27 5c 27 27 29   sQuery.z, '\'')
2db40 3b 0a 20 20 20 20 20 20 73 51 75 65 72 79 2e 6e  ;.      sQuery.n
2db50 20 3d 20 30 3b 0a 20 20 20 20 20 20 61 70 70 65   = 0;.      appe
2db60 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 22 2c  ndText(&sSql, ",
2db70 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70  ", 0);.      app
2db80 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a  endText(&sSql, z
2db90 54 61 62 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20  Tab, '\'');.    
2dba0 20 20 7a 53 65 70 20 3d 20 22 29 2c 28 22 3b 0a    zSep = "),(";.
2dbb0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
2dbc0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
2dbd0 29 3b 0a 20 20 20 20 69 66 28 20 62 53 65 70 61  );.    if( bSepa
2dbe0 72 61 74 65 20 29 7b 0a 20 20 20 20 20 20 7a 53  rate ){.      zS
2dbf0 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
2dc00 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20 20  intf(.          
2dc10 22 25 73 29 29 22 0a 20 20 20 20 20 20 20 20 20  "%s))".         
2dc20 20 22 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28   " SELECT lower(
2dc30 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 61  hex(sha3_query(a
2dc40 2c 25 64 29 29 29 20 41 53 20 68 61 73 68 2c 20  ,%d))) AS hash, 
2dc50 62 20 41 53 20 6c 61 62 65 6c 22 0a 20 20 20 20  b AS label".    
2dc60 20 20 20 20 20 20 22 20 20 20 46 52 4f 4d 20 5b        "   FROM [
2dc70 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d 22 2c  sha3sum$query]",
2dc80 0a 20 20 20 20 20 20 20 20 20 20 73 53 71 6c 2e  .          sSql.
2dc90 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20 20 20 7d  z, iSize);.    }
2dca0 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c  else{.      zSql
2dcb0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2dcc0 74 66 28 0a 20 20 20 20 20 20 20 20 20 20 22 25  tf(.          "%
2dcd0 73 29 29 22 0a 20 20 20 20 20 20 20 20 20 20 22  s))".          "
2dce0 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65   SELECT lower(he
2dcf0 78 28 73 68 61 33 5f 71 75 65 72 79 28 67 72 6f  x(sha3_query(gro
2dd00 75 70 5f 63 6f 6e 63 61 74 28 61 2c 27 27 29 2c  up_concat(a,''),
2dd10 25 64 29 29 29 20 41 53 20 68 61 73 68 22 0a 20  %d))) AS hash". 
2dd20 20 20 20 20 20 20 20 20 20 22 20 20 20 46 52 4f           "   FRO
2dd30 4d 20 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79  M [sha3sum$query
2dd40 5d 22 2c 0a 20 20 20 20 20 20 20 20 20 20 73 53  ]",.          sS
2dd50 71 6c 2e 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20  ql.z, iSize);.  
2dd60 20 20 7d 0a 20 20 20 20 66 72 65 65 54 65 78 74    }.    freeText
2dd70 28 26 73 51 75 65 72 79 29 3b 0a 20 20 20 20 66  (&sQuery);.    f
2dd80 72 65 65 54 65 78 74 28 26 73 53 71 6c 29 3b 0a  reeText(&sSql);.
2dd90 20 20 20 20 69 66 28 20 62 44 65 62 75 67 20 29      if( bDebug )
2dda0 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
2ddb0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c  ntf(p->out, "%s\
2ddc0 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 7d  n", zSql);.    }
2ddd0 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 68 65 6c  else{.      shel
2dde0 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53  l_exec(p->db, zS
2ddf0 71 6c 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61  ql, shell_callba
2de00 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20 20 20 7d  ck, p, 0);.    }
2de10 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
2de20 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65  e(zSql);.  }else
2de30 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 0a 20  ..  if( c=='s'. 
2de40 20 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a    && (strncmp(az
2de50 41 72 67 5b 30 5d 2c 20 22 73 68 65 6c 6c 22 2c  Arg[0], "shell",
2de60 20 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d   n)==0 || strncm
2de70 70 28 61 7a 41 72 67 5b 30 5d 2c 22 73 79 73 74  p(azArg[0],"syst
2de80 65 6d 22 2c 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a  em",n)==0).  ){.
2de90 20 20 20 20 63 68 61 72 20 2a 7a 43 6d 64 3b 0a      char *zCmd;.
2dea0 20 20 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20      int i, x;.  
2deb0 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a    if( nArg<2 ){.
2dec0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2ded0 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
2dee0 20 2e 73 79 73 74 65 6d 20 43 4f 4d 4d 41 4e 44   .system COMMAND
2def0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
2df00 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
2df10 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
2df20 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 43 6d 64  ;.    }.    zCmd
2df30 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2df40 74 66 28 73 74 72 63 68 72 28 61 7a 41 72 67 5b  tf(strchr(azArg[
2df50 31 5d 2c 27 20 27 29 3d 3d 30 3f 22 25 73 22 3a  1],' ')==0?"%s":
2df60 22 5c 22 25 73 5c 22 22 2c 20 61 7a 41 72 67 5b  "\"%s\"", azArg[
2df70 31 5d 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 32  1]);.    for(i=2
2df80 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2df90 20 20 20 20 20 20 7a 43 6d 64 20 3d 20 73 71 6c        zCmd = sql
2dfa0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 73 74 72  ite3_mprintf(str
2dfb0 63 68 72 28 61 7a 41 72 67 5b 69 5d 2c 27 20 27  chr(azArg[i],' '
2dfc0 29 3d 3d 30 3f 22 25 7a 20 25 73 22 3a 22 25 7a  )==0?"%z %s":"%z
2dfd0 20 5c 22 25 73 5c 22 22 2c 0a 20 20 20 20 20 20   \"%s\"",.      
2dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dff0 20 20 20 20 20 20 20 7a 43 6d 64 2c 20 61 7a 41         zCmd, azA
2e000 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  rg[i]);.    }.  
2e010 20 20 78 20 3d 20 73 79 73 74 65 6d 28 7a 43 6d    x = system(zCm
2e020 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  d);.    sqlite3_
2e030 66 72 65 65 28 7a 43 6d 64 29 3b 0a 20 20 20 20  free(zCmd);.    
2e040 69 66 28 20 78 20 29 20 72 61 77 5f 70 72 69 6e  if( x ) raw_prin
2e050 74 66 28 73 74 64 65 72 72 2c 20 22 53 79 73 74  tf(stderr, "Syst
2e060 65 6d 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72  em command retur
2e070 6e 73 20 25 64 5c 6e 22 2c 20 78 29 3b 0a 20 20  ns %d\n", x);.  
2e080 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
2e090 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  's' && strncmp(a
2e0a0 7a 41 72 67 5b 30 5d 2c 20 22 73 68 6f 77 22 2c  zArg[0], "show",
2e0b0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74   n)==0 ){.    st
2e0c0 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2e0d0 2a 61 7a 42 6f 6f 6c 5b 5d 20 3d 20 7b 20 22 6f  *azBool[] = { "o
2e0e0 66 66 22 2c 20 22 6f 6e 22 2c 20 22 66 75 6c 6c  ff", "on", "full
2e0f0 22 2c 20 22 75 6e 6b 22 20 7d 3b 0a 20 20 20 20  ", "unk" };.    
2e100 69 6e 74 20 69 3b 0a 20 20 20 20 69 66 28 20 6e  int i;.    if( n
2e110 41 72 67 21 3d 31 20 29 7b 0a 20 20 20 20 20 20  Arg!=1 ){.      
2e120 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2e130 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 68 6f 77  r, "Usage: .show
2e140 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
2e150 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
2e160 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
2e170 3b 0a 20 20 20 20 7d 0a 20 20 20 20 75 74 66 38  ;.    }.    utf8
2e180 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2e190 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c  "%12.12s: %s\n",
2e1a0 22 65 63 68 6f 22 2c 0a 20 20 20 20 20 20 20 20  "echo",.        
2e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1c0 20 20 20 20 20 20 20 20 20 20 61 7a 42 6f 6f 6c            azBool
2e1d0 5b 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c  [ShellHasFlag(p,
2e1e0 20 53 48 46 4c 47 5f 45 63 68 6f 29 5d 29 3b 0a   SHFLG_Echo)]);.
2e1f0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2e200 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73  p->out, "%12.12s
2e210 3a 20 25 73 5c 6e 22 2c 22 65 71 70 22 2c 20 61  : %s\n","eqp", a
2e220 7a 42 6f 6f 6c 5b 70 2d 3e 61 75 74 6f 45 51 50  zBool[p->autoEQP
2e230 26 33 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  &3]);.    utf8_p
2e240 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2e250 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 65  12.12s: %s\n","e
2e260 78 70 6c 61 69 6e 22 2c 0a 20 20 20 20 20 20 20  xplain",.       
2e270 20 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f    p->mode==MODE_
2e280 45 78 70 6c 61 69 6e 20 3f 20 22 6f 6e 22 20 3a  Explain ? "on" :
2e290 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20   p->autoExplain 
2e2a0 3f 20 22 61 75 74 6f 22 20 3a 20 22 6f 66 66 22  ? "auto" : "off"
2e2b0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2e2c0 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31  tf(p->out,"%12.1
2e2d0 32 73 3a 20 25 73 5c 6e 22 2c 22 68 65 61 64 65  2s: %s\n","heade
2e2e0 72 73 22 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 73  rs", azBool[p->s
2e2f0 68 6f 77 48 65 61 64 65 72 21 3d 30 5d 29 3b 0a  howHeader!=0]);.
2e300 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2e310 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73  p->out, "%12.12s
2e320 3a 20 25 73 5c 6e 22 2c 22 6d 6f 64 65 22 2c 20  : %s\n","mode", 
2e330 6d 6f 64 65 44 65 73 63 72 5b 70 2d 3e 6d 6f 64  modeDescr[p->mod
2e340 65 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  e]);.    utf8_pr
2e350 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31  intf(p->out, "%1
2e360 32 2e 31 32 73 3a 20 22 2c 20 22 6e 75 6c 6c 76  2.12s: ", "nullv
2e370 61 6c 75 65 22 29 3b 0a 20 20 20 20 20 20 6f 75  alue");.      ou
2e380 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d  tput_c_string(p-
2e390 3e 6f 75 74 2c 20 70 2d 3e 6e 75 6c 6c 56 61 6c  >out, p->nullVal
2e3a0 75 65 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  ue);.      raw_p
2e3b0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c  rintf(p->out, "\
2e3c0 6e 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  n");.    utf8_pr
2e3d0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32  intf(p->out,"%12
2e3e0 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 6f 75 74  .12s: %s\n","out
2e3f0 70 75 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20  put",.          
2e400 20 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 6f 75    strlen30(p->ou
2e410 74 66 69 6c 65 29 20 3f 20 70 2d 3e 6f 75 74 66  tfile) ? p->outf
2e420 69 6c 65 20 3a 20 22 73 74 64 6f 75 74 22 29 3b  ile : "stdout");
2e430 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2e440 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31 32 73  (p->out,"%12.12s
2e450 3a 20 22 2c 20 22 63 6f 6c 73 65 70 61 72 61 74  : ", "colseparat
2e460 6f 72 22 29 3b 0a 20 20 20 20 20 20 6f 75 74 70  or");.      outp
2e470 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f  ut_c_string(p->o
2e480 75 74 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61  ut, p->colSepara
2e490 74 6f 72 29 3b 0a 20 20 20 20 20 20 72 61 77 5f  tor);.      raw_
2e4a0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2e4b0 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  \n");.    utf8_p
2e4c0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31  rintf(p->out,"%1
2e4d0 32 2e 31 32 73 3a 20 22 2c 20 22 72 6f 77 73 65  2.12s: ", "rowse
2e4e0 70 61 72 61 74 6f 72 22 29 3b 0a 20 20 20 20 20  parator");.     
2e4f0 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67   output_c_string
2e500 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 72 6f 77 53  (p->out, p->rowS
2e510 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
2e520 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
2e530 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75  ut, "\n");.    u
2e540 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
2e550 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c  t, "%12.12s: %s\
2e560 6e 22 2c 22 73 74 61 74 73 22 2c 20 61 7a 42 6f  n","stats", azBo
2e570 6f 6c 5b 70 2d 3e 73 74 61 74 73 4f 6e 21 3d 30  ol[p->statsOn!=0
2e580 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ]);.    utf8_pri
2e590 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32  ntf(p->out, "%12
2e5a0 2e 31 32 73 3a 20 22 2c 20 22 77 69 64 74 68 22  .12s: ", "width"
2e5b0 29 3b 0a 20 20 20 20 66 6f 72 20 28 69 3d 30 3b  );.    for (i=0;
2e5c0 69 3c 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65  i<(int)ArraySize
2e5d0 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 20 26 26  (p->colWidth) &&
2e5e0 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 69 5d 20   p->colWidth[i] 
2e5f0 21 3d 20 30 3b 69 2b 2b 29 20 7b 0a 20 20 20 20  != 0;i++) {.    
2e600 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
2e610 6f 75 74 2c 20 22 25 64 20 22 2c 20 70 2d 3e 63  out, "%d ", p->c
2e620 6f 6c 57 69 64 74 68 5b 69 5d 29 3b 0a 20 20 20  olWidth[i]);.   
2e630 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74   }.    raw_print
2e640 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b  f(p->out, "\n");
2e650 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2e660 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32  (p->out, "%12.12
2e670 73 3a 20 25 73 5c 6e 22 2c 20 22 66 69 6c 65 6e  s: %s\n", "filen
2e680 61 6d 65 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ame",.          
2e690 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65        p->zDbFile
2e6a0 6e 61 6d 65 20 3f 20 70 2d 3e 7a 44 62 46 69 6c  name ? p->zDbFil
2e6b0 65 6e 61 6d 65 20 3a 20 22 22 29 3b 0a 20 20 7d  ename : "");.  }
2e6c0 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
2e6d0 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  s' && strncmp(az
2e6e0 41 72 67 5b 30 5d 2c 20 22 73 74 61 74 73 22 2c  Arg[0], "stats",
2e6f0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66   n)==0 ){.    if
2e700 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20  ( nArg==2 ){.   
2e710 20 20 20 70 2d 3e 73 74 61 74 73 4f 6e 20 3d 20     p->statsOn = 
2e720 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
2e730 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73  rg[1]);.    }els
2e740 65 20 69 66 28 20 6e 41 72 67 3d 3d 31 20 29 7b  e if( nArg==1 ){
2e750 0a 20 20 20 20 20 20 64 69 73 70 6c 61 79 5f 73  .      display_s
2e760 74 61 74 73 28 70 2d 3e 64 62 2c 20 70 2c 20 30  tats(p->db, p, 0
2e770 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2e780 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2e790 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
2e7a0 73 74 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f 5c 6e  stats ?on|off?\n
2e7b0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2e7c0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
2e7d0 0a 20 20 69 66 28 20 28 63 3d 3d 27 74 27 20 26  .  if( (c=='t' &
2e7e0 26 20 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70  & n>1 && strncmp
2e7f0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 61 62 6c  (azArg[0], "tabl
2e800 65 73 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 20 7c  es", n)==0).   |
2e810 7c 20 28 63 3d 3d 27 69 27 20 26 26 20 28 73 74  | (c=='i' && (st
2e820 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2e830 22 69 6e 64 69 63 65 73 22 2c 20 6e 29 3d 3d 30  "indices", n)==0
2e840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e850 20 20 7c 7c 20 73 74 72 6e 63 6d 70 28 61 7a 41    || strncmp(azA
2e860 72 67 5b 30 5d 2c 20 22 69 6e 64 65 78 65 73 22  rg[0], "indexes"
2e870 2c 20 6e 29 3d 3d 30 29 20 29 0a 20 20 29 7b 0a  , n)==0) ).  ){.
2e880 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
2e890 20 2a 70 53 74 6d 74 3b 0a 20 20 20 20 63 68 61   *pStmt;.    cha
2e8a0 72 20 2a 2a 61 7a 52 65 73 75 6c 74 3b 0a 20 20  r **azResult;.  
2e8b0 20 20 69 6e 74 20 6e 52 6f 77 2c 20 6e 41 6c 6c    int nRow, nAll
2e8c0 6f 63 3b 0a 20 20 20 20 69 6e 74 20 69 69 3b 0a  oc;.    int ii;.
2e8d0 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20 73 3b      ShellText s;
2e8e0 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73  .    initText(&s
2e8f0 29 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70  );.    open_db(p
2e900 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  , 0);.    rc = s
2e910 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
2e920 32 28 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41  2(p->db, "PRAGMA
2e930 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 22 2c   database_list",
2e940 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
2e950 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 72 65  .    if( rc ) re
2e960 74 75 72 6e 20 73 68 65 6c 6c 44 61 74 61 62 61  turn shellDataba
2e970 73 65 45 72 72 6f 72 28 70 2d 3e 64 62 29 3b 0a  seError(p->db);.
2e980 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 32 20  .    if( nArg>2 
2e990 26 26 20 63 3d 3d 27 69 27 20 29 7b 0a 20 20 20  && c=='i' ){.   
2e9a0 20 20 20 2f 2a 20 49 74 20 69 73 20 61 6e 20 68     /* It is an h
2e9b0 69 73 74 6f 72 69 63 61 6c 20 61 63 63 69 64 65  istorical accide
2e9c0 6e 74 20 74 68 61 74 20 74 68 65 20 2e 69 6e 64  nt that the .ind
2e9d0 65 78 65 73 20 63 6f 6d 6d 61 6e 64 20 73 68 6f  exes command sho
2e9e0 77 73 20 61 6e 20 65 72 72 6f 72 0a 20 20 20 20  ws an error.    
2e9f0 20 20 2a 2a 20 77 68 65 6e 20 63 61 6c 6c 65 64    ** when called
2ea00 20 77 69 74 68 20 74 68 65 20 77 72 6f 6e 67 20   with the wrong 
2ea10 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
2ea20 6e 74 73 20 77 68 65 72 65 61 73 20 74 68 65 20  nts whereas the 
2ea30 2e 74 61 62 6c 65 73 0a 20 20 20 20 20 20 2a 2a  .tables.      **
2ea40 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f   command does no
2ea50 74 2e 20 2a 2f 0a 20 20 20 20 20 20 72 61 77 5f  t. */.      raw_
2ea60 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2ea70 55 73 61 67 65 3a 20 2e 69 6e 64 65 78 65 73 20  Usage: .indexes 
2ea80 3f 4c 49 4b 45 2d 50 41 54 54 45 52 4e 3f 5c 6e  ?LIKE-PATTERN?\n
2ea90 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2eaa0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
2eab0 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2eac0 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69      }.    for(ii
2ead0 3d 30 3b 20 73 71 6c 69 74 65 33 5f 73 74 65 70  =0; sqlite3_step
2eae0 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
2eaf0 52 4f 57 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  ROW; ii++){.    
2eb00 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
2eb10 62 4e 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20 63  bName = (const c
2eb20 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
2eb30 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  umn_text(pStmt, 
2eb40 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 44  1);.      if( zD
2eb50 62 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69  bName==0 ) conti
2eb60 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 73  nue;.      if( s
2eb70 2e 7a 20 26 26 20 73 2e 7a 5b 30 5d 20 29 20 61  .z && s.z[0] ) a
2eb80 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20 22 20  ppendText(&s, " 
2eb90 55 4e 49 4f 4e 20 41 4c 4c 20 22 2c 20 30 29 3b  UNION ALL ", 0);
2eba0 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
2ebb0 65 33 5f 73 74 72 69 63 6d 70 28 7a 44 62 4e 61  e3_stricmp(zDbNa
2ebc0 6d 65 2c 20 22 6d 61 69 6e 22 29 3d 3d 30 20 29  me, "main")==0 )
2ebd0 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  {.        append
2ebe0 54 65 78 74 28 26 73 2c 20 22 53 45 4c 45 43 54  Text(&s, "SELECT
2ebf0 20 6e 61 6d 65 20 46 52 4f 4d 20 22 2c 20 30 29   name FROM ", 0)
2ec00 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2ec10 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
2ec20 74 28 26 73 2c 20 22 53 45 4c 45 43 54 20 22 2c  t(&s, "SELECT ",
2ec30 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70   0);.        app
2ec40 65 6e 64 54 65 78 74 28 26 73 2c 20 7a 44 62 4e  endText(&s, zDbN
2ec50 61 6d 65 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20  ame, '\'');.    
2ec60 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
2ec70 73 2c 20 22 7c 7c 27 2e 27 7c 7c 6e 61 6d 65 20  s, "||'.'||name 
2ec80 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20  FROM ", 0);.    
2ec90 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64    }.      append
2eca0 54 65 78 74 28 26 73 2c 20 7a 44 62 4e 61 6d 65  Text(&s, zDbName
2ecb0 2c 20 27 22 27 29 3b 0a 20 20 20 20 20 20 61 70  , '"');.      ap
2ecc0 70 65 6e 64 54 65 78 74 28 26 73 2c 20 22 2e 73  pendText(&s, ".s
2ecd0 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 2c 20  qlite_master ", 
2ece0 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d  0);.      if( c=
2ecf0 3d 27 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='t' ){.        
2ed00 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 22 20  appendText(&s," 
2ed10 57 48 45 52 45 20 74 79 70 65 20 49 4e 20 28 27  WHERE type IN ('
2ed20 74 61 62 6c 65 27 2c 27 76 69 65 77 27 29 22 0a  table','view')".
2ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed40 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 6e 61        "   AND na
2ed50 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c  me NOT LIKE 'sql
2ed60 69 74 65 5f 25 27 22 0a 20 20 20 20 20 20 20 20  ite_%'".        
2ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
2ed80 20 20 41 4e 44 20 6e 61 6d 65 20 4c 49 4b 45 20    AND name LIKE 
2ed90 3f 31 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  ?1", 0);.      }
2eda0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 70  else{.        ap
2edb0 70 65 6e 64 54 65 78 74 28 26 73 2c 22 20 57 48  pendText(&s," WH
2edc0 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65 78 27  ERE type='index'
2edd0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
2ede0 20 20 20 20 20 20 20 20 22 20 20 20 41 4e 44 20          "   AND 
2edf0 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 3f 31  tbl_name LIKE ?1
2ee00 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ", 0);.      }. 
2ee10 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71     }.    rc = sq
2ee20 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
2ee30 53 74 6d 74 29 3b 0a 20 20 20 20 61 70 70 65 6e  Stmt);.    appen
2ee40 64 54 65 78 74 28 26 73 2c 20 22 20 4f 52 44 45  dText(&s, " ORDE
2ee50 52 20 42 59 20 31 22 2c 20 30 29 3b 0a 20 20 20  R BY 1", 0);.   
2ee60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
2ee70 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
2ee80 73 2e 7a 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  s.z, -1, &pStmt,
2ee90 20 30 29 3b 0a 20 20 20 20 66 72 65 65 54 65 78   0);.    freeTex
2eea0 74 28 26 73 29 3b 0a 20 20 20 20 69 66 28 20 72  t(&s);.    if( r
2eeb0 63 20 29 20 72 65 74 75 72 6e 20 73 68 65 6c 6c  c ) return shell
2eec0 44 61 74 61 62 61 73 65 45 72 72 6f 72 28 70 2d  DatabaseError(p-
2eed0 3e 64 62 29 3b 0a 0a 20 20 20 20 2f 2a 20 52 75  >db);..    /* Ru
2eee0 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  n the SQL statem
2eef0 65 6e 74 20 70 72 65 70 61 72 65 64 20 62 79 20  ent prepared by 
2ef00 74 68 65 20 61 62 6f 76 65 20 62 6c 6f 63 6b 2e  the above block.
2ef10 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
2ef20 74 73 0a 20 20 20 20 2a 2a 20 61 73 20 61 6e 20  ts.    ** as an 
2ef30 61 72 72 61 79 20 6f 66 20 6e 75 6c 2d 74 65 72  array of nul-ter
2ef40 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67 73 20  minated strings 
2ef50 69 6e 20 61 7a 52 65 73 75 6c 74 5b 5d 2e 20 20  in azResult[].  
2ef60 2a 2f 0a 20 20 20 20 6e 52 6f 77 20 3d 20 6e 41  */.    nRow = nA
2ef70 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 61 7a  lloc = 0;.    az
2ef80 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 20 20  Result = 0;.    
2ef90 69 66 28 20 6e 41 72 67 3e 31 20 29 7b 0a 20 20  if( nArg>1 ){.  
2efa0 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
2efb0 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20  _text(pStmt, 1, 
2efc0 61 7a 41 72 67 5b 31 5d 2c 20 2d 31 2c 20 53 51  azArg[1], -1, SQ
2efd0 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
2efe0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2eff0 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
2f000 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20 22 25  ext(pStmt, 1, "%
2f010 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54  ", -1, SQLITE_ST
2f020 41 54 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ATIC);.    }.   
2f030 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f   while( sqlite3_
2f040 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c  step(pStmt)==SQL
2f050 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20  ITE_ROW ){.     
2f060 20 69 66 28 20 6e 52 6f 77 3e 3d 6e 41 6c 6c 6f   if( nRow>=nAllo
2f070 63 20 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61  c ){.        cha
2f080 72 20 2a 2a 61 7a 4e 65 77 3b 0a 20 20 20 20 20  r **azNew;.     
2f090 20 20 20 69 6e 74 20 6e 32 20 3d 20 6e 41 6c 6c     int n2 = nAll
2f0a0 6f 63 2a 32 20 2b 20 31 30 3b 0a 20 20 20 20 20  oc*2 + 10;.     
2f0b0 20 20 20 61 7a 4e 65 77 20 3d 20 73 71 6c 69 74     azNew = sqlit
2f0c0 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 61 7a 52  e3_realloc64(azR
2f0d0 65 73 75 6c 74 2c 20 73 69 7a 65 6f 66 28 61 7a  esult, sizeof(az
2f0e0 52 65 73 75 6c 74 5b 30 5d 29 2a 6e 32 29 3b 0a  Result[0])*n2);.
2f0f0 20 20 20 20 20 20 20 20 69 66 28 20 61 7a 4e 65          if( azNe
2f100 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
2f110 20 20 72 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65    rc = shellNome
2f120 6d 45 72 72 6f 72 28 29 3b 0a 20 20 20 20 20 20  mError();.      
2f130 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2f140 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 41 6c     }.        nAl
2f150 6c 6f 63 20 3d 20 6e 32 3b 0a 20 20 20 20 20 20  loc = n2;.      
2f160 20 20 61 7a 52 65 73 75 6c 74 20 3d 20 61 7a 4e    azResult = azN
2f170 65 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ew;.      }.    
2f180 20 20 61 7a 52 65 73 75 6c 74 5b 6e 52 6f 77 5d    azResult[nRow]
2f190 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2f1a0 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74 65 33  tf("%s", sqlite3
2f1b0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
2f1c0 6d 74 2c 20 30 29 29 3b 0a 20 20 20 20 20 20 69  mt, 0));.      i
2f1d0 66 28 20 30 3d 3d 61 7a 52 65 73 75 6c 74 5b 6e  f( 0==azResult[n
2f1e0 52 6f 77 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  Row] ){.        
2f1f0 72 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45  rc = shellNomemE
2f200 72 72 6f 72 28 29 3b 0a 20 20 20 20 20 20 20 20  rror();.        
2f210 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
2f220 20 20 20 20 20 6e 52 6f 77 2b 2b 3b 0a 20 20 20       nRow++;.   
2f230 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74   }.    if( sqlit
2f240 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
2f250 74 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  t)!=SQLITE_OK ){
2f260 0a 20 20 20 20 20 20 72 63 20 3d 20 73 68 65 6c  .      rc = shel
2f270 6c 44 61 74 61 62 61 73 65 45 72 72 6f 72 28 70  lDatabaseError(p
2f280 2d 3e 64 62 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ->db);.    }..  
2f290 20 20 2f 2a 20 50 72 65 74 74 79 2d 70 72 69 6e    /* Pretty-prin
2f2a0 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  t the contents o
2f2b0 66 20 61 72 72 61 79 20 61 7a 52 65 73 75 6c 74  f array azResult
2f2c0 5b 5d 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  [] to the output
2f2d0 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 3d 3d   */.    if( rc==
2f2e0 30 20 26 26 20 6e 52 6f 77 3e 30 20 29 7b 0a 20  0 && nRow>0 ){. 
2f2f0 20 20 20 20 20 69 6e 74 20 6c 65 6e 2c 20 6d 61       int len, ma
2f300 78 6c 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  xlen = 0;.      
2f310 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 20 20 20 20  int i, j;.      
2f320 69 6e 74 20 6e 50 72 69 6e 74 43 6f 6c 2c 20 6e  int nPrintCol, n
2f330 50 72 69 6e 74 52 6f 77 3b 0a 20 20 20 20 20 20  PrintRow;.      
2f340 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 52 6f 77 3b  for(i=0; i<nRow;
2f350 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 6c   i++){.        l
2f360 65 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a  en = strlen30(az
2f370 52 65 73 75 6c 74 5b 69 5d 29 3b 0a 20 20 20 20  Result[i]);.    
2f380 20 20 20 20 69 66 28 20 6c 65 6e 3e 6d 61 78 6c      if( len>maxl
2f390 65 6e 20 29 20 6d 61 78 6c 65 6e 20 3d 20 6c 65  en ) maxlen = le
2f3a0 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
2f3b0 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20 38 30 2f   nPrintCol = 80/
2f3c0 28 6d 61 78 6c 65 6e 2b 32 29 3b 0a 20 20 20 20  (maxlen+2);.    
2f3d0 20 20 69 66 28 20 6e 50 72 69 6e 74 43 6f 6c 3c    if( nPrintCol<
2f3e0 31 20 29 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20  1 ) nPrintCol = 
2f3f0 31 3b 0a 20 20 20 20 20 20 6e 50 72 69 6e 74 52  1;.      nPrintR
2f400 6f 77 20 3d 20 28 6e 52 6f 77 20 2b 20 6e 50 72  ow = (nRow + nPr
2f410 69 6e 74 43 6f 6c 20 2d 20 31 29 2f 6e 50 72 69  intCol - 1)/nPri
2f420 6e 74 43 6f 6c 3b 0a 20 20 20 20 20 20 66 6f 72  ntCol;.      for
2f430 28 69 3d 30 3b 20 69 3c 6e 50 72 69 6e 74 52 6f  (i=0; i<nPrintRo
2f440 77 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  w; i++){.       
2f450 20 66 6f 72 28 6a 3d 69 3b 20 6a 3c 6e 52 6f 77   for(j=i; j<nRow
2f460 3b 20 6a 2b 3d 6e 50 72 69 6e 74 52 6f 77 29 7b  ; j+=nPrintRow){
2f470 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20  .          char 
2f480 2a 7a 53 70 20 3d 20 6a 3c 6e 50 72 69 6e 74 52  *zSp = j<nPrintR
2f490 6f 77 20 3f 20 22 22 20 3a 20 22 20 20 22 3b 0a  ow ? "" : "  ";.
2f4a0 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
2f4b0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2f4c0 73 25 2d 2a 73 22 2c 20 7a 53 70 2c 20 6d 61 78  s%-*s", zSp, max
2f4d0 6c 65 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  len,.           
2f4e0 20 20 20 20 20 20 20 20 20 20 20 61 7a 52 65 73             azRes
2f4f0 75 6c 74 5b 6a 5d 20 3f 20 61 7a 52 65 73 75 6c  ult[j] ? azResul
2f500 74 5b 6a 5d 3a 22 22 29 3b 0a 20 20 20 20 20 20  t[j]:"");.      
2f510 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f    }.        raw_
2f520 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2f530 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  \n");.      }.  
2f540 20 20 7d 0a 0a 20 20 20 20 66 6f 72 28 69 69 3d    }..    for(ii=
2f550 30 3b 20 69 69 3c 6e 52 6f 77 3b 20 69 69 2b 2b  0; ii<nRow; ii++
2f560 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61  ) sqlite3_free(a
2f570 7a 52 65 73 75 6c 74 5b 69 69 5d 29 3b 0a 20 20  zResult[ii]);.  
2f580 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
2f590 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d 65 6c 73  zResult);.  }els
2f5a0 65 0a 0a 20 20 2f 2a 20 42 65 67 69 6e 20 72 65  e..  /* Begin re
2f5b0 64 69 72 65 63 74 69 6e 67 20 6f 75 74 70 75 74  directing output
2f5c0 20 74 6f 20 74 68 65 20 66 69 6c 65 20 22 74 65   to the file "te
2f5d0 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 22 20  stcase-out.txt" 
2f5e0 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20  */.  if( c=='t' 
2f5f0 26 26 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b  && strcmp(azArg[
2f600 30 5d 2c 22 74 65 73 74 63 61 73 65 22 29 3d 3d  0],"testcase")==
2f610 30 20 29 7b 0a 20 20 20 20 6f 75 74 70 75 74 5f  0 ){.    output_
2f620 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 70 2d  reset(p);.    p-
2f630 3e 6f 75 74 20 3d 20 6f 75 74 70 75 74 5f 66 69  >out = output_fi
2f640 6c 65 5f 6f 70 65 6e 28 22 74 65 73 74 63 61 73  le_open("testcas
2f650 65 2d 6f 75 74 2e 74 78 74 22 29 3b 0a 20 20 20  e-out.txt");.   
2f660 20 69 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29   if( p->out==0 )
2f670 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
2f680 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
2f690 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27  r: cannot open '
2f6a0 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74  testcase-out.txt
2f6b0 27 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20  '\n");.    }.   
2f6c0 20 69 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b 0a   if( nArg>=2 ){.
2f6d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
2f6e0 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d  printf(sizeof(p-
2f6f0 3e 7a 54 65 73 74 63 61 73 65 29 2c 20 70 2d 3e  >zTestcase), p->
2f700 7a 54 65 73 74 63 61 73 65 2c 20 22 25 73 22 2c  zTestcase, "%s",
2f710 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
2f720 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
2f730 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
2f740 7a 65 6f 66 28 70 2d 3e 7a 54 65 73 74 63 61 73  zeof(p->zTestcas
2f750 65 29 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73 65  e), p->zTestcase
2f760 2c 20 22 3f 22 29 3b 0a 20 20 20 20 7d 0a 20 20  , "?");.    }.  
2f770 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65 66 20 53  }else..#ifndef S
2f780 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
2f790 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
2f7a0 20 6e 3e 3d 38 20 26 26 20 73 74 72 6e 63 6d 70   n>=8 && strncmp
2f7b0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 65 73 74  (azArg[0], "test
2f7c0 63 74 72 6c 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  ctrl", n)==0 ){.
2f7d0 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
2f7e0 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
2f7f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74   const char *zCt
2f800 72 6c 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61 6d  rlName;   /* Nam
2f810 65 20 6f 66 20 61 20 74 65 73 74 2d 63 6f 6e 74  e of a test-cont
2f820 72 6f 6c 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20 20  rol option */.  
2f830 20 20 20 20 20 69 6e 74 20 63 74 72 6c 43 6f 64       int ctrlCod
2f840 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
2f850 20 49 6e 74 65 67 65 72 20 63 6f 64 65 20 66 6f   Integer code fo
2f860 72 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 2a 2f  r that option */
2f870 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  .       const ch
2f880 61 72 20 2a 7a 55 73 61 67 65 3b 20 20 20 20 20  ar *zUsage;     
2f890 20 2f 2a 20 55 73 61 67 65 20 6e 6f 74 65 73 20   /* Usage notes 
2f8a0 2a 2f 0a 20 20 20 20 7d 20 61 43 74 72 6c 5b 5d  */.    } aCtrl[]
2f8b0 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 61 6c   = {.      { "al
2f8c0 77 61 79 73 22 2c 20 20 20 20 20 20 20 20 20 20  ways",          
2f8d0 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54     SQLITE_TESTCT
2f8e0 52 4c 5f 41 4c 57 41 59 53 2c 20 20 20 20 20 20  RL_ALWAYS,      
2f8f0 20 20 22 42 4f 4f 4c 45 41 4e 22 20 20 20 20 20    "BOOLEAN"     
2f900 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
2f910 7b 20 22 61 73 73 65 72 74 22 2c 20 20 20 20 20  { "assert",     
2f920 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54          SQLITE_T
2f930 45 53 54 43 54 52 4c 5f 41 53 53 45 52 54 2c 20  ESTCTRL_ASSERT, 
2f940 20 20 20 20 20 20 20 22 42 4f 4f 4c 45 41 4e 22         "BOOLEAN"
2f950 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2f960 20 20 20 2f 2a 7b 20 22 62 65 6e 69 67 6e 5f 6d     /*{ "benign_m
2f970 61 6c 6c 6f 63 5f 68 6f 6f 6b 73 22 2c 53 51 4c  alloc_hooks",SQL
2f980 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 42 45 4e  ITE_TESTCTRL_BEN
2f990 49 47 4e 5f 4d 41 4c 4c 4f 43 5f 48 4f 4f 4b 53  IGN_MALLOC_HOOKS
2f9a0 2c 20 22 22 20 20 20 20 20 20 20 20 20 20 7d 2c  , ""          },
2f9b0 2a 2f 0a 20 20 20 20 2f 2a 7b 20 22 62 69 74 76  */.    /*{ "bitv
2f9c0 65 63 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20  ec_test",       
2f9d0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2f9e0 5f 42 49 54 56 45 43 5f 54 45 53 54 2c 20 20 20  _BITVEC_TEST,   
2f9f0 22 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ""              
2fa00 20 20 7d 2c 2a 2f 0a 20 20 20 20 20 20 7b 20 22    },*/.      { "
2fa10 62 79 74 65 6f 72 64 65 72 22 2c 20 20 20 20 20  byteorder",     
2fa20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54       SQLITE_TEST
2fa30 43 54 52 4c 5f 42 59 54 45 4f 52 44 45 52 2c 20  CTRL_BYTEORDER, 
2fa40 20 20 20 20 22 22 20 20 20 20 20 20 20 20 20 20      ""          
2fa50 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
2fa60 2f 2a 7b 20 22 66 61 75 6c 74 5f 69 6e 73 74 61  /*{ "fault_insta
2fa70 6c 6c 22 2c 20 20 20 20 20 20 53 51 4c 49 54 45  ll",      SQLITE
2fa80 5f 54 45 53 54 43 54 52 4c 5f 46 41 55 4c 54 5f  _TESTCTRL_FAULT_
2fa90 49 4e 53 54 41 4c 4c 2c 20 22 22 20 20 20 20 20  INSTALL, ""     
2faa0 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2a 2f             }, */
2fab0 0a 20 20 20 20 20 20 7b 20 22 69 6d 70 6f 73 74  .      { "impost
2fac0 65 72 22 2c 20 20 20 20 20 20 20 20 20 20 20 53  er",           S
2fad0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49  QLITE_TESTCTRL_I
2fae0 4d 50 4f 53 54 45 52 2c 20 20 20 22 53 43 48 45  MPOSTER,   "SCHE
2faf0 4d 41 20 4f 4e 2f 4f 46 46 20 52 4f 4f 54 50 41  MA ON/OFF ROOTPA
2fb00 47 45 22 7d 2c 0a 23 69 66 64 65 66 20 53 51 4c  GE"},.#ifdef SQL
2fb10 49 54 45 5f 4e 5f 4b 45 59 57 4f 52 44 0a 20 20  ITE_N_KEYWORD.  
2fb20 20 20 20 20 7b 20 22 69 73 6b 65 79 77 6f 72 64      { "iskeyword
2fb30 22 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  ",          SQLI
2fb40 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 53 4b 45  TE_TESTCTRL_ISKE
2fb50 59 57 4f 52 44 2c 20 20 20 20 20 22 49 44 45 4e  YWORD,     "IDEN
2fb60 54 49 46 49 45 52 22 20 20 20 20 20 20 20 20 20  TIFIER"         
2fb70 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20  },.#endif.      
2fb80 7b 20 22 6c 6f 63 61 6c 74 69 6d 65 5f 66 61 75  { "localtime_fau
2fb90 6c 74 22 2c 20 20 20 20 53 51 4c 49 54 45 5f 54  lt",    SQLITE_T
2fba0 45 53 54 43 54 52 4c 5f 4c 4f 43 41 4c 54 49 4d  ESTCTRL_LOCALTIM
2fbb0 45 5f 46 41 55 4c 54 2c 22 42 4f 4f 4c 45 41 4e  E_FAULT,"BOOLEAN
2fbc0 22 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  "           },. 
2fbd0 20 20 20 20 20 7b 20 22 6e 65 76 65 72 5f 63 6f       { "never_co
2fbe0 72 72 75 70 74 22 2c 20 20 20 20 20 20 53 51 4c  rrupt",      SQL
2fbf0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e 45 56  ITE_TESTCTRL_NEV
2fc00 45 52 5f 43 4f 52 52 55 50 54 2c 20 22 42 4f 4f  ER_CORRUPT, "BOO
2fc10 4c 45 41 4e 22 20 20 20 20 20 20 20 20 20 20 20  LEAN"           
2fc20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 6f 70 74   },.      { "opt
2fc30 69 6d 69 7a 61 74 69 6f 6e 73 22 2c 20 20 20 20  imizations",    
2fc40 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52    SQLITE_TESTCTR
2fc50 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
2fc60 20 22 44 49 53 41 42 4c 45 2d 4d 41 53 4b 22 20   "DISABLE-MASK" 
2fc70 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
2fc80 20 22 70 65 6e 64 69 6e 67 5f 62 79 74 65 22 2c   "pending_byte",
2fc90 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45         SQLITE_TE
2fca0 53 54 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f 42  STCTRL_PENDING_B
2fcb0 59 54 45 2c 20 20 22 4f 46 46 53 45 54 20 20 22  YTE,  "OFFSET  "
2fcc0 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
2fcd0 20 20 20 20 7b 20 22 70 72 6e 67 5f 72 65 73 65      { "prng_rese
2fce0 74 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49  t",         SQLI
2fcf0 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47  TE_TESTCTRL_PRNG
2fd00 5f 52 45 53 45 54 2c 20 20 20 20 22 22 20 20 20  _RESET,    ""   
2fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 70 72 6e 67  },.      { "prng
2fd30 5f 72 65 73 74 6f 72 65 22 2c 20 20 20 20 20 20  _restore",      
2fd40 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2fd50 5f 50 52 4e 47 5f 52 45 53 54 4f 52 45 2c 20 20  _PRNG_RESTORE,  
2fd60 22 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ""              
2fd70 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
2fd80 22 70 72 6e 67 5f 73 61 76 65 22 2c 20 20 20 20  "prng_save",    
2fd90 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53        SQLITE_TES
2fda0 54 43 54 52 4c 5f 50 52 4e 47 5f 53 41 56 45 2c  TCTRL_PRNG_SAVE,
2fdb0 20 20 20 20 20 22 22 20 20 20 20 20 20 20 20 20       ""         
2fdc0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2fdd0 20 20 20 7b 20 22 72 65 73 65 72 76 65 22 2c 20     { "reserve", 
2fde0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
2fdf0 45 5f 54 45 53 54 43 54 52 4c 5f 52 45 53 45 52  E_TESTCTRL_RESER
2fe00 56 45 2c 20 20 20 20 20 20 20 22 42 59 54 45 53  VE,       "BYTES
2fe10 2d 4f 46 2d 52 45 53 45 52 56 45 22 20 20 20 7d  -OF-RESERVE"   }
2fe20 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74  ,.    };.    int
2fe30 20 74 65 73 74 63 74 72 6c 20 3d 20 2d 31 3b 0a   testctrl = -1;.
2fe40 20 20 20 20 69 6e 74 20 69 43 74 72 6c 20 3d 20      int iCtrl = 
2fe50 2d 31 3b 0a 20 20 20 20 69 6e 74 20 72 63 32 20  -1;.    int rc2 
2fe60 3d 20 30 3b 20 20 20 20 2f 2a 20 30 3a 20 75 73  = 0;    /* 0: us
2fe70 61 67 65 2e 20 20 31 3a 20 25 64 20 20 32 3a 20  age.  1: %d  2: 
2fe80 25 78 20 20 33 3a 20 6e 6f 2d 6f 75 74 70 75 74  %x  3: no-output
2fe90 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 73 4f 6b   */.    int isOk
2fea0 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 69 2c   = 0;.    int i,
2feb0 20 6e 32 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63   n2;.    const c
2fec0 68 61 72 20 2a 7a 43 6d 64 20 3d 20 30 3b 0a 0a  har *zCmd = 0;..
2fed0 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
2fee0 29 3b 0a 20 20 20 20 7a 43 6d 64 20 3d 20 6e 41  );.    zCmd = nA
2fef0 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d  rg>=2 ? azArg[1]
2ff00 20 3a 20 22 68 65 6c 70 22 3b 0a 0a 20 20 20 20   : "help";..    
2ff10 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  /* The argument 
2ff20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62  can optionally b
2ff30 65 67 69 6e 20 77 69 74 68 20 22 2d 22 20 6f 72  egin with "-" or
2ff40 20 22 2d 2d 22 20 2a 2f 0a 20 20 20 20 69 66 28   "--" */.    if(
2ff50 20 7a 43 6d 64 5b 30 5d 3d 3d 27 2d 27 20 26 26   zCmd[0]=='-' &&
2ff60 20 7a 43 6d 64 5b 31 5d 20 29 7b 0a 20 20 20 20   zCmd[1] ){.    
2ff70 20 20 7a 43 6d 64 2b 2b 3b 0a 20 20 20 20 20 20    zCmd++;.      
2ff80 69 66 28 20 7a 43 6d 64 5b 30 5d 3d 3d 27 2d 27  if( zCmd[0]=='-'
2ff90 20 26 26 20 7a 43 6d 64 5b 31 5d 20 29 20 7a 43   && zCmd[1] ) zC
2ffa0 6d 64 2b 2b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  md++;.    }..   
2ffb0 20 2f 2a 20 2d 2d 68 65 6c 70 20 6c 69 73 74 73   /* --help lists
2ffc0 20 61 6c 6c 20 74 65 73 74 2d 63 6f 6e 74 72 6f   all test-contro
2ffd0 6c 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74  ls */.    if( st
2ffe0 72 63 6d 70 28 7a 43 6d 64 2c 22 68 65 6c 70 22  rcmp(zCmd,"help"
2fff0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74  )==0 ){.      ut
30000 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
30010 2c 20 22 41 76 61 69 6c 61 62 6c 65 20 74 65 73  , "Available tes
30020 74 2d 63 6f 6e 74 72 6f 6c 73 3a 5c 6e 22 29 3b  t-controls:\n");
30030 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
30040 69 3c 41 72 72 61 79 53 69 7a 65 28 61 43 74 72  i<ArraySize(aCtr
30050 6c 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  l); i++){.      
30060 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
30070 3e 6f 75 74 2c 20 22 20 20 2e 74 65 73 74 63 74  >out, "  .testct
30080 72 6c 20 25 73 20 25 73 5c 6e 22 2c 0a 20 20 20  rl %s %s\n",.   
30090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300a0 20 61 43 74 72 6c 5b 69 5d 2e 7a 43 74 72 6c 4e   aCtrl[i].zCtrlN
300b0 61 6d 65 2c 20 61 43 74 72 6c 5b 69 5d 2e 7a 55  ame, aCtrl[i].zU
300c0 73 61 67 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  sage);.      }. 
300d0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
300e0 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d     goto meta_com
300f0 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d  mand_exit;.    }
30100 0a 0a 20 20 20 20 2f 2a 20 63 6f 6e 76 65 72 74  ..    /* convert
30110 20 74 65 73 74 63 74 72 6c 20 74 65 78 74 20 6f   testctrl text o
30120 70 74 69 6f 6e 20 74 6f 20 76 61 6c 75 65 2e 20  ption to value. 
30130 61 6c 6c 6f 77 20 61 6e 79 20 75 6e 69 71 75 65  allow any unique
30140 20 70 72 65 66 69 78 0a 20 20 20 20 2a 2a 20 6f   prefix.    ** o
30150 66 20 74 68 65 20 6f 70 74 69 6f 6e 20 6e 61 6d  f the option nam
30160 65 2c 20 6f 72 20 61 20 6e 75 6d 65 72 69 63 61  e, or a numerica
30170 6c 20 76 61 6c 75 65 2e 20 2a 2f 0a 20 20 20 20  l value. */.    
30180 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 43  n2 = strlen30(zC
30190 6d 64 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  md);.    for(i=0
301a0 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61 43  ; i<ArraySize(aC
301b0 74 72 6c 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  trl); i++){.    
301c0 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 43    if( strncmp(zC
301d0 6d 64 2c 20 61 43 74 72 6c 5b 69 5d 2e 7a 43 74  md, aCtrl[i].zCt
301e0 72 6c 4e 61 6d 65 2c 20 6e 32 29 3d 3d 30 20 29  rlName, n2)==0 )
301f0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 74 65  {.        if( te
30200 73 74 63 74 72 6c 3c 30 20 29 7b 0a 20 20 20 20  stctrl<0 ){.    
30210 20 20 20 20 20 20 74 65 73 74 63 74 72 6c 20 3d        testctrl =
30220 20 61 43 74 72 6c 5b 69 5d 2e 63 74 72 6c 43 6f   aCtrl[i].ctrlCo
30230 64 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69 43  de;.          iC
30240 74 72 6c 20 3d 20 69 3b 0a 20 20 20 20 20 20 20  trl = i;.       
30250 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
30260 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
30270 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 61 6d  derr, "Error: am
30280 62 69 67 75 6f 75 73 20 74 65 73 74 2d 63 6f 6e  biguous test-con
30290 74 72 6f 6c 3a 20 5c 22 25 73 5c 22 5c 6e 22 0a  trol: \"%s\"\n".
302a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55                "U
302c0 73 65 20 5c 22 2e 74 65 73 74 63 74 72 6c 20 2d  se \".testctrl -
302d0 2d 68 65 6c 70 5c 22 20 66 6f 72 20 68 65 6c 70  -help\" for help
302e0 5c 6e 22 2c 20 7a 43 6d 64 29 3b 0a 20 20 20 20  \n", zCmd);.    
302f0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
30300 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74          goto met
30310 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
30320 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
30330 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
30340 74 65 73 74 63 74 72 6c 3c 30 20 29 7b 0a 20 20  testctrl<0 ){.  
30350 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
30360 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 75  stderr,"Error: u
30370 6e 6b 6e 6f 77 6e 20 74 65 73 74 2d 63 6f 6e 74  nknown test-cont
30380 72 6f 6c 3a 20 25 73 5c 6e 22 0a 20 20 20 20 20  rol: %s\n".     
30390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303a0 20 20 20 20 22 55 73 65 20 5c 22 2e 74 65 73 74      "Use \".test
303b0 63 74 72 6c 20 2d 2d 68 65 6c 70 5c 22 20 66 6f  ctrl --help\" fo
303c0 72 20 68 65 6c 70 5c 6e 22 2c 20 7a 43 6d 64 29  r help\n", zCmd)
303d0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
303e0 20 20 20 73 77 69 74 63 68 28 74 65 73 74 63 74     switch(testct
303f0 72 6c 29 7b 0a 0a 20 20 20 20 20 20 20 20 2f 2a  rl){..        /*
30400 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
30410 6e 74 72 6f 6c 28 69 6e 74 2c 20 64 62 2c 20 69  ntrol(int, db, i
30420 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63  nt) */.        c
30430 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
30440 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
30450 53 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  S:.        case 
30460 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
30470 52 45 53 45 52 56 45 3a 0a 20 20 20 20 20 20 20  RESERVE:.       
30480 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 33 20 29     if( nArg==3 )
30490 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  {.            in
304a0 74 20 6f 70 74 20 3d 20 28 69 6e 74 29 73 74 72  t opt = (int)str
304b0 74 6f 6c 28 61 7a 41 72 67 5b 32 5d 2c 20 30 2c  tol(azArg[2], 0,
304c0 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
304d0 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74   rc2 = sqlite3_t
304e0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74  est_control(test
304f0 63 74 72 6c 2c 20 70 2d 3e 64 62 2c 20 6f 70 74  ctrl, p->db, opt
30500 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
30510 73 4f 6b 20 3d 20 33 3b 0a 20 20 20 20 20 20 20  sOk = 3;.       
30520 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62     }.          b
30530 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 2f  reak;..        /
30540 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
30550 6f 6e 74 72 6f 6c 28 69 6e 74 29 20 2a 2f 0a 20  ontrol(int) */. 
30560 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
30570 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47  TE_TESTCTRL_PRNG
30580 5f 53 41 56 45 3a 0a 20 20 20 20 20 20 20 20 63  _SAVE:.        c
30590 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
305a0 54 52 4c 5f 50 52 4e 47 5f 52 45 53 54 4f 52 45  TRL_PRNG_RESTORE
305b0 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  :.        case S
305c0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50  QLITE_TESTCTRL_P
305d0 52 4e 47 5f 52 45 53 45 54 3a 0a 20 20 20 20 20  RNG_RESET:.     
305e0 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
305f0 45 53 54 43 54 52 4c 5f 42 59 54 45 4f 52 44 45  ESTCTRL_BYTEORDE
30600 52 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  R:.          if(
30610 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
30620 20 20 20 20 20 20 20 20 72 63 32 20 3d 20 73 71          rc2 = sq
30630 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
30640 6f 6c 28 74 65 73 74 63 74 72 6c 29 3b 0a 20 20  ol(testctrl);.  
30650 20 20 20 20 20 20 20 20 20 20 69 73 4f 6b 20 3d            isOk =
30660 20 74 65 73 74 63 74 72 6c 3d 3d 53 51 4c 49 54   testctrl==SQLIT
30670 45 5f 54 45 53 54 43 54 52 4c 5f 42 59 54 45 4f  E_TESTCTRL_BYTEO
30680 52 44 45 52 20 3f 20 31 20 3a 20 33 3b 0a 20 20  RDER ? 1 : 3;.  
30690 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
306a0 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20      break;..    
306b0 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74      /* sqlite3_t
306c0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c  est_control(int,
306d0 20 75 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20   uint) */.      
306e0 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
306f0 53 54 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f 42  STCTRL_PENDING_B
30700 59 54 45 3a 0a 20 20 20 20 20 20 20 20 20 20 69  YTE:.          i
30710 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20  f( nArg==3 ){.  
30720 20 20 20 20 20 20 20 20 20 20 75 6e 73 69 67 6e            unsign
30730 65 64 20 69 6e 74 20 6f 70 74 20 3d 20 28 75 6e  ed int opt = (un
30740 73 69 67 6e 65 64 20 69 6e 74 29 69 6e 74 65 67  signed int)integ
30750 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 32 5d  erValue(azArg[2]
30760 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  );.            r
30770 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73  c2 = sqlite3_tes
30780 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74  t_control(testct
30790 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20 20  rl, opt);.      
307a0 20 20 20 20 20 20 69 73 4f 6b 20 3d 20 33 3b 0a        isOk = 3;.
307b0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
307c0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20        break;..  
307d0 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33        /* sqlite3
307e0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e  _test_control(in
307f0 74 2c 20 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20  t, int) */.     
30800 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
30810 45 53 54 43 54 52 4c 5f 41 53 53 45 52 54 3a 0a  ESTCTRL_ASSERT:.
30820 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
30830 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 4c 57  ITE_TESTCTRL_ALW
30840 41 59 53 3a 0a 20 20 20 20 20 20 20 20 20 20 69  AYS:.          i
30850 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20  f( nArg==3 ){.  
30860 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70            int op
30870 74 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65  t = booleanValue
30880 28 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20  (azArg[2]);.    
30890 20 20 20 20 20 20 20 20 72 63 32 20 3d 20 73 71          rc2 = sq
308a0 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
308b0 6f 6c 28 74 65 73 74 63 74 72 6c 2c 20 6f 70 74  ol(testctrl, opt
308c0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
308d0 73 4f 6b 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  sOk = 1;.       
308e0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62     }.          b
308f0 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 2f  reak;..        /
30900 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
30910 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20 69 6e 74 29  ontrol(int, int)
30920 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 61 73 65   */.        case
30930 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
30940 5f 4c 4f 43 41 4c 54 49 4d 45 5f 46 41 55 4c 54  _LOCALTIME_FAULT
30950 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  :.        case S
30960 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e  QLITE_TESTCTRL_N
30970 45 56 45 52 5f 43 4f 52 52 55 50 54 3a 0a 20 20  EVER_CORRUPT:.  
30980 20 20 20 20 20 20 20 20 69 66 28 20 6e 41 72 67          if( nArg
30990 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==3 ){.         
309a0 20 20 20 69 6e 74 20 6f 70 74 20 3d 20 62 6f 6f     int opt = boo
309b0 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
309c0 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  2]);.           
309d0 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74   rc2 = sqlite3_t
309e0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74  est_control(test
309f0 63 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20  ctrl, opt);.    
30a00 20 20 20 20 20 20 20 20 69 73 4f 6b 20 3d 20 33          isOk = 3
30a10 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
30a20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
30a30 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74          /* sqlit
30a40 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
30a50 69 6e 74 2c 20 63 68 61 72 20 2a 29 20 2a 2f 0a  int, char *) */.
30a60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f  #ifdef SQLITE_N_
30a70 4b 45 59 57 4f 52 44 0a 20 20 20 20 20 20 20 20  KEYWORD.        
30a80 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
30a90 43 54 52 4c 5f 49 53 4b 45 59 57 4f 52 44 3a 0a  CTRL_ISKEYWORD:.
30aa0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 41            if( nA
30ab0 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20  rg==3 ){.       
30ac0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
30ad0 2a 6f 70 74 20 3d 20 61 7a 41 72 67 5b 32 5d 3b  *opt = azArg[2];
30ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 32  .            rc2
30af0 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f   = sqlite3_test_
30b00 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74 72 6c  control(testctrl
30b10 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20 20 20 20  , opt);.        
30b20 20 20 20 20 69 73 4f 6b 20 3d 20 31 3b 0a 20 20      isOk = 1;.  
30b30 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
30b40 20 20 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69      break;.#endi
30b50 66 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  f..        case 
30b60 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
30b70 49 4d 50 4f 53 54 45 52 3a 0a 20 20 20 20 20 20  IMPOSTER:.      
30b80 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 35 20      if( nArg==5 
30b90 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ){.            r
30ba0 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73  c2 = sqlite3_tes
30bb0 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74  t_control(testct
30bc0 72 6c 2c 20 70 2d 3e 64 62 2c 0a 20 20 20 20 20  rl, p->db,.     
30bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30be0 20 20 20 20 20 61 7a 41 72 67 5b 32 5d 2c 0a 20       azArg[2],. 
30bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c00 20 20 20 20 20 20 20 20 20 69 6e 74 65 67 65 72           integer
30c10 56 61 6c 75 65 28 61 7a 41 72 67 5b 33 5d 29 2c  Value(azArg[3]),
30c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c30 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 65 67             integ
30c40 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 34 5d  erValue(azArg[4]
30c50 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
30c60 69 73 4f 6b 20 3d 20 33 3b 0a 20 20 20 20 20 20  isOk = 3;.      
30c70 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
30c80 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
30c90 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69 73 4f     }.    if( isO
30ca0 6b 3d 3d 30 20 26 26 20 69 43 74 72 6c 3e 3d 30  k==0 && iCtrl>=0
30cb0 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
30cc0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 55  rintf(p->out, "U
30cd0 73 61 67 65 3a 20 2e 74 65 73 74 63 74 72 6c 20  sage: .testctrl 
30ce0 25 73 20 25 73 5c 6e 22 2c 20 7a 43 6d 64 2c 20  %s %s\n", zCmd, 
30cf0 61 43 74 72 6c 5b 69 43 74 72 6c 5d 2e 7a 55 73  aCtrl[iCtrl].zUs
30d00 61 67 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  age);.      rc =
30d10 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
30d20 28 20 69 73 4f 6b 3d 3d 31 20 29 7b 0a 20 20 20  ( isOk==1 ){.   
30d30 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
30d40 3e 6f 75 74 2c 20 22 25 64 5c 6e 22 2c 20 72 63  >out, "%d\n", rc
30d50 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  2);.    }else if
30d60 28 20 69 73 4f 6b 3d 3d 32 20 29 7b 0a 20 20 20  ( isOk==2 ){.   
30d70 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
30d80 3e 6f 75 74 2c 20 22 30 78 25 30 38 78 5c 6e 22  >out, "0x%08x\n"
30d90 2c 20 72 63 32 29 3b 0a 20 20 20 20 7d 0a 20 20  , rc2);.    }.  
30da0 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20  }else.#endif /* 
30db0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
30dc0 55 4e 54 45 53 54 41 42 4c 45 29 20 2a 2f 0a 0a  UNTESTABLE) */..
30dd0 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20    if( c=='t' && 
30de0 6e 3e 34 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>4 && strncmp(a
30df0 7a 41 72 67 5b 30 5d 2c 20 22 74 69 6d 65 6f 75  zArg[0], "timeou
30e00 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  t", n)==0 ){.   
30e10 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a   open_db(p, 0);.
30e20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79      sqlite3_busy
30e30 5f 74 69 6d 65 6f 75 74 28 70 2d 3e 64 62 2c 20  _timeout(p->db, 
30e40 6e 41 72 67 3e 3d 32 20 3f 20 28 69 6e 74 29 69  nArg>=2 ? (int)i
30e50 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72  ntegerValue(azAr
30e60 67 5b 31 5d 29 20 3a 20 30 29 3b 0a 20 20 7d 65  g[1]) : 0);.  }e
30e70 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 74  lse..  if( c=='t
30e80 27 20 26 26 20 6e 3e 3d 35 20 26 26 20 73 74 72  ' && n>=5 && str
30e90 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
30ea0 74 69 6d 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b  timer", n)==0 ){
30eb0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32  .    if( nArg==2
30ec0 20 29 7b 0a 20 20 20 20 20 20 65 6e 61 62 6c 65   ){.      enable
30ed0 54 69 6d 65 72 20 3d 20 62 6f 6f 6c 65 61 6e 56  Timer = booleanV
30ee0 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a  alue(azArg[1]);.
30ef0 20 20 20 20 20 20 69 66 28 20 65 6e 61 62 6c 65        if( enable
30f00 54 69 6d 65 72 20 26 26 20 21 48 41 53 5f 54 49  Timer && !HAS_TI
30f10 4d 45 52 20 29 7b 0a 20 20 20 20 20 20 20 20 72  MER ){.        r
30f20 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
30f30 2c 20 22 45 72 72 6f 72 3a 20 74 69 6d 65 72 20  , "Error: timer 
30f40 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
30f50 20 74 68 69 73 20 73 79 73 74 65 6d 2e 5c 6e 22   this system.\n"
30f60 29 3b 0a 20 20 20 20 20 20 20 20 65 6e 61 62 6c  );.        enabl
30f70 65 54 69 6d 65 72 20 3d 20 30 3b 0a 20 20 20 20  eTimer = 0;.    
30f80 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
30f90 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
30fa0 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
30fb0 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 5c 6e 22  .timer on|off\n"
30fc0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
30fd0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
30fe0 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20    if( c=='t' && 
30ff0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
31000 2c 20 22 74 72 61 63 65 22 2c 20 6e 29 3d 3d 30  , "trace", n)==0
31010 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   ){.    open_db(
31020 70 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 6e  p, 0);.    if( n
31030 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg!=2 ){.      
31040 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
31050 72 2c 20 22 55 73 61 67 65 3a 20 2e 74 72 61 63  r, "Usage: .trac
31060 65 20 46 49 4c 45 7c 6f 66 66 5c 6e 22 29 3b 0a  e FILE|off\n");.
31070 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
31080 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
31090 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
310a0 7d 0a 20 20 20 20 6f 75 74 70 75 74 5f 66 69 6c  }.    output_fil
310b0 65 5f 63 6c 6f 73 65 28 70 2d 3e 74 72 61 63 65  e_close(p->trace
310c0 4f 75 74 29 3b 0a 20 20 20 20 70 2d 3e 74 72 61  Out);.    p->tra
310d0 63 65 4f 75 74 20 3d 20 6f 75 74 70 75 74 5f 66  ceOut = output_f
310e0 69 6c 65 5f 6f 70 65 6e 28 61 7a 41 72 67 5b 31  ile_open(azArg[1
310f0 5d 29 3b 0a 23 69 66 20 21 64 65 66 69 6e 65 64  ]);.#if !defined
31100 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41  (SQLITE_OMIT_TRA
31110 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  CE) && !defined(
31120 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
31130 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 20 20 20 20  TING_POINT).    
31140 69 66 28 20 70 2d 3e 74 72 61 63 65 4f 75 74 3d  if( p->traceOut=
31150 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
31160 74 65 33 5f 74 72 61 63 65 5f 76 32 28 70 2d 3e  te3_trace_v2(p->
31170 64 62 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  db, 0, 0, 0);.  
31180 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
31190 71 6c 69 74 65 33 5f 74 72 61 63 65 5f 76 32 28  qlite3_trace_v2(
311a0 70 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 54 52  p->db, SQLITE_TR
311b0 41 43 45 5f 53 54 4d 54 2c 20 73 71 6c 5f 74 72  ACE_STMT, sql_tr
311c0 61 63 65 5f 63 61 6c 6c 62 61 63 6b 2c 70 2d 3e  ace_callback,p->
311d0 74 72 61 63 65 4f 75 74 29 3b 0a 20 20 20 20 7d  traceOut);.    }
311e0 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 0a  .#endif.  }else.
311f0 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52  .#if SQLITE_USER
31200 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
31210 20 20 69 66 28 20 63 3d 3d 27 75 27 20 26 26 20    if( c=='u' && 
31220 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
31230 2c 20 22 75 73 65 72 22 2c 20 6e 29 3d 3d 30 20  , "user", n)==0 
31240 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c  ){.    if( nArg<
31250 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  2 ){.      raw_p
31260 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
31270 73 61 67 65 3a 20 2e 75 73 65 72 20 53 55 42 43  sage: .user SUBC
31280 4f 4d 4d 41 4e 44 20 2e 2e 2e 5c 6e 22 29 3b 0a  OMMAND ...\n");.
31290 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
312a0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
312b0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
312c0 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  }.    open_db(p,
312d0 20 30 29 3b 0a 20 20 20 20 69 66 28 20 73 74 72   0);.    if( str
312e0 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 6f  cmp(azArg[1],"lo
312f0 67 69 6e 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  gin")==0 ){.    
31300 20 20 69 66 28 20 6e 41 72 67 21 3d 34 20 29 7b    if( nArg!=4 ){
31310 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
31320 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
31330 67 65 3a 20 2e 75 73 65 72 20 6c 6f 67 69 6e 20  ge: .user login 
31340 55 53 45 52 20 50 41 53 53 57 4f 52 44 5c 6e 22  USER PASSWORD\n"
31350 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
31360 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  1;.        goto 
31370 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
31380 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
31390 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73   rc = sqlite3_us
313a0 65 72 5f 61 75 74 68 65 6e 74 69 63 61 74 65 28  er_authenticate(
313b0 70 2d 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d 2c  p->db, azArg[2],
313c0 20 61 7a 41 72 67 5b 33 5d 2c 0a 20 20 20 20 20   azArg[3],.     
313d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
313f0 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72 67  int)strlen(azArg
31400 5b 33 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28  [3]));.      if(
31410 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75   rc ){.        u
31420 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
31430 72 2c 20 22 41 75 74 68 65 6e 74 69 63 61 74 69  r, "Authenticati
31440 6f 6e 20 66 61 69 6c 65 64 20 66 6f 72 20 75 73  on failed for us
31450 65 72 20 25 73 5c 6e 22 2c 20 61 7a 41 72 67 5b  er %s\n", azArg[
31460 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  2]);.        rc 
31470 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 1;.      }.   
31480 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
31490 70 28 61 7a 41 72 67 5b 31 5d 2c 22 61 64 64 22  p(azArg[1],"add"
314a0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
314b0 28 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20 20 20  ( nArg!=5 ){.   
314c0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
314d0 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
314e0 2e 75 73 65 72 20 61 64 64 20 55 53 45 52 20 50  .user add USER P
314f0 41 53 53 57 4f 52 44 20 49 53 41 44 4d 49 4e 5c  ASSWORD ISADMIN\
31500 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  n");.        rc 
31510 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 1;.        got
31520 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
31530 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  xit;.      }.   
31540 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
31550 75 73 65 72 5f 61 64 64 28 70 2d 3e 64 62 2c 20  user_add(p->db, 
31560 61 7a 41 72 67 5b 32 5d 2c 0a 20 20 20 20 20 20  azArg[2],.      
31570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31580 20 20 20 20 20 20 61 7a 41 72 67 5b 33 5d 2c 20        azArg[3], 
31590 28 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72  (int)strlen(azAr
315a0 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20 20 20 20  g[3]),.         
315b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315c0 20 20 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28     booleanValue(
315d0 61 7a 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20 20  azArg[4]));.    
315e0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
315f0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
31600 74 64 65 72 72 2c 20 22 55 73 65 72 2d 41 64 64  tderr, "User-Add
31610 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c 20   failed: %d\n", 
31620 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  rc);.        rc 
31630 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 1;.      }.   
31640 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
31650 70 28 61 7a 41 72 67 5b 31 5d 2c 22 65 64 69 74  p(azArg[1],"edit
31660 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  ")==0 ){.      i
31670 66 28 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20 20  f( nArg!=5 ){.  
31680 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
31690 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
316a0 20 2e 75 73 65 72 20 65 64 69 74 20 55 53 45 52   .user edit USER
316b0 20 50 41 53 53 57 4f 52 44 20 49 53 41 44 4d 49   PASSWORD ISADMI
316c0 4e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72  N\n");.        r
316d0 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67  c = 1;.        g
316e0 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
316f0 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20  _exit;.      }. 
31700 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
31710 33 5f 75 73 65 72 5f 63 68 61 6e 67 65 28 70 2d  3_user_change(p-
31720 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d 2c 0a 20  >db, azArg[2],. 
31730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31740 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
31750 72 67 5b 33 5d 2c 20 28 69 6e 74 29 73 74 72 6c  rg[3], (int)strl
31760 65 6e 28 61 7a 41 72 67 5b 33 5d 29 2c 0a 20 20  en(azArg[3]),.  
31770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31780 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
31790 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 34  eanValue(azArg[4
317a0 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  ]));.      if( r
317b0 63 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  c ){.        raw
317c0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
317d0 22 55 73 65 72 2d 45 64 69 74 20 66 61 69 6c 65  "User-Edit faile
317e0 64 3a 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20  d: %d\n", rc);. 
317f0 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
31800 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
31810 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72   if( strcmp(azAr
31820 67 5b 31 5d 2c 22 64 65 6c 65 74 65 22 29 3d 3d  g[1],"delete")==
31830 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  0 ){.      if( n
31840 41 72 67 21 3d 33 20 29 7b 0a 20 20 20 20 20 20  Arg!=3 ){.      
31850 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
31860 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73  err, "Usage: .us
31870 65 72 20 64 65 6c 65 74 65 20 55 53 45 52 5c 6e  er delete USER\n
31880 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ");.        rc =
31890 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   1;.        goto
318a0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
318b0 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  it;.      }.    
318c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75    rc = sqlite3_u
318d0 73 65 72 5f 64 65 6c 65 74 65 28 70 2d 3e 64 62  ser_delete(p->db
318e0 2c 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20  , azArg[2]);.   
318f0 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
31900 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
31910 73 74 64 65 72 72 2c 20 22 55 73 65 72 2d 44 65  stderr, "User-De
31920 6c 65 74 65 20 66 61 69 6c 65 64 3a 20 25 64 5c  lete failed: %d\
31930 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20  n", rc);.       
31940 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d   rc = 1;.      }
31950 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
31960 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
31970 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73  err, "Usage: .us
31980 65 72 20 6c 6f 67 69 6e 7c 61 64 64 7c 65 64 69  er login|add|edi
31990 74 7c 64 65 6c 65 74 65 20 2e 2e 2e 5c 6e 22 29  t|delete ...\n")
319a0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
319b0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
319c0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
319d0 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
319e0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
319f0 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
31a00 20 2a 2f 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76   */..  if( c=='v
31a10 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
31a20 72 67 5b 30 5d 2c 20 22 76 65 72 73 69 6f 6e 22  rg[0], "version"
31a30 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75  , n)==0 ){.    u
31a40 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
31a50 74 2c 20 22 53 51 4c 69 74 65 20 25 73 20 25 73  t, "SQLite %s %s
31a60 5c 6e 22 20 2f 2a 65 78 74 72 61 2d 76 65 72 73  \n" /*extra-vers
31a70 69 6f 6e 2d 69 6e 66 6f 2a 2f 2c 0a 20 20 20 20  ion-info*/,.    
31a80 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 62 76      sqlite3_libv
31a90 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74 65  ersion(), sqlite
31aa0 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a 20  3_sourceid());. 
31ab0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
31ac0 3d 27 76 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='v' && strncmp(
31ad0 61 7a 41 72 67 5b 30 5d 2c 20 22 76 66 73 69 6e  azArg[0], "vfsin
31ae0 66 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  fo", n)==0 ){.  
31af0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
31b00 62 4e 61 6d 65 20 3d 20 6e 41 72 67 3d 3d 32 20  bName = nArg==2 
31b10 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d 61  ? azArg[1] : "ma
31b20 69 6e 22 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  in";.    sqlite3
31b30 5f 76 66 73 20 2a 70 56 66 73 20 3d 20 30 3b 0a  _vfs *pVfs = 0;.
31b40 20 20 20 20 69 66 28 20 70 2d 3e 64 62 20 29 7b      if( p->db ){
31b50 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
31b60 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64  ile_control(p->d
31b70 62 2c 20 7a 44 62 4e 61 6d 65 2c 20 53 51 4c 49  b, zDbName, SQLI
31b80 54 45 5f 46 43 4e 54 4c 5f 56 46 53 5f 50 4f 49  TE_FCNTL_VFS_POI
31b90 4e 54 45 52 2c 20 26 70 56 66 73 29 3b 0a 20 20  NTER, &pVfs);.  
31ba0 20 20 20 20 69 66 28 20 70 56 66 73 20 29 7b 0a      if( pVfs ){.
31bb0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
31bc0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73  ntf(p->out, "vfs
31bd0 2e 7a 4e 61 6d 65 20 20 20 20 20 20 3d 20 5c 22  .zName      = \"
31be0 25 73 5c 22 5c 6e 22 2c 20 70 56 66 73 2d 3e 7a  %s\"\n", pVfs->z
31bf0 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 72  Name);.        r
31c00 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
31c10 2c 20 22 76 66 73 2e 69 56 65 72 73 69 6f 6e 20  , "vfs.iVersion 
31c20 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d    = %d\n", pVfs-
31c30 3e 69 56 65 72 73 69 6f 6e 29 3b 0a 20 20 20 20  >iVersion);.    
31c40 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
31c50 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 73 7a 4f 73  ->out, "vfs.szOs
31c60 46 69 6c 65 20 20 20 3d 20 25 64 5c 6e 22 2c 20  File   = %d\n", 
31c70 70 56 66 73 2d 3e 73 7a 4f 73 46 69 6c 65 29 3b  pVfs->szOsFile);
31c80 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
31c90 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73  ntf(p->out, "vfs
31ca0 2e 6d 78 50 61 74 68 6e 61 6d 65 20 3d 20 25 64  .mxPathname = %d
31cb0 5c 6e 22 2c 20 70 56 66 73 2d 3e 6d 78 50 61 74  \n", pVfs->mxPat
31cc0 68 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a  hname);.      }.
31cd0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
31ce0 20 69 66 28 20 63 3d 3d 27 76 27 20 26 26 20 73   if( c=='v' && s
31cf0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
31d00 20 22 76 66 73 6c 69 73 74 22 2c 20 6e 29 3d 3d   "vfslist", n)==
31d10 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
31d20 5f 76 66 73 20 2a 70 56 66 73 3b 0a 20 20 20 20  _vfs *pVfs;.    
31d30 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 43 75  sqlite3_vfs *pCu
31d40 72 72 65 6e 74 20 3d 20 30 3b 0a 20 20 20 20 69  rrent = 0;.    i
31d50 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20 20  f( p->db ){.    
31d60 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63    sqlite3_file_c
31d70 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 22 6d  ontrol(p->db, "m
31d80 61 69 6e 22 2c 20 53 51 4c 49 54 45 5f 46 43 4e  ain", SQLITE_FCN
31d90 54 4c 5f 56 46 53 5f 50 4f 49 4e 54 45 52 2c 20  TL_VFS_POINTER, 
31da0 26 70 43 75 72 72 65 6e 74 29 3b 0a 20 20 20 20  &pCurrent);.    
31db0 7d 0a 20 20 20 20 66 6f 72 28 70 56 66 73 3d 73  }.    for(pVfs=s
31dc0 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28  qlite3_vfs_find(
31dd0 30 29 3b 20 70 56 66 73 3b 20 70 56 66 73 3d 70  0); pVfs; pVfs=p
31de0 56 66 73 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  Vfs->pNext){.   
31df0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
31e00 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 7a 4e 61 6d  ->out, "vfs.zNam
31e10 65 20 20 20 20 20 20 3d 20 5c 22 25 73 5c 22 25  e      = \"%s\"%
31e20 73 5c 6e 22 2c 20 70 56 66 73 2d 3e 7a 4e 61 6d  s\n", pVfs->zNam
31e30 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 56  e,.           pV
31e40 66 73 3d 3d 70 43 75 72 72 65 6e 74 20 3f 20 22  fs==pCurrent ? "
31e50 20 20 3c 2d 2d 2d 20 43 55 52 52 45 4e 54 22 20    <--- CURRENT" 
31e60 3a 20 22 22 29 3b 0a 20 20 20 20 20 20 72 61 77  : "");.      raw
31e70 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
31e80 22 76 66 73 2e 69 56 65 72 73 69 6f 6e 20 20 20  "vfs.iVersion   
31e90 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 69  = %d\n", pVfs->i
31ea0 56 65 72 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20  Version);.      
31eb0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
31ec0 74 2c 20 22 76 66 73 2e 73 7a 4f 73 46 69 6c 65  t, "vfs.szOsFile
31ed0 20 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73     = %d\n", pVfs
31ee0 2d 3e 73 7a 4f 73 46 69 6c 65 29 3b 0a 20 20 20  ->szOsFile);.   
31ef0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
31f00 3e 6f 75 74 2c 20 22 76 66 73 2e 6d 78 50 61 74  >out, "vfs.mxPat
31f10 68 6e 61 6d 65 20 3d 20 25 64 5c 6e 22 2c 20 70  hname = %d\n", p
31f20 56 66 73 2d 3e 6d 78 50 61 74 68 6e 61 6d 65 29  Vfs->mxPathname)
31f30 3b 0a 20 20 20 20 20 20 69 66 28 20 70 56 66 73  ;.      if( pVfs
31f40 2d 3e 70 4e 65 78 74 20 29 7b 0a 20 20 20 20 20  ->pNext ){.     
31f50 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
31f60 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d  >out, "---------
31f70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
31f80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a  ----------\n");.
31f90 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
31fa0 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
31fb0 27 76 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'v' && strncmp(a
31fc0 7a 41 72 67 5b 30 5d 2c 20 22 76 66 73 6e 61 6d  zArg[0], "vfsnam
31fd0 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  e", n)==0 ){.   
31fe0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
31ff0 4e 61 6d 65 20 3d 20 6e 41 72 67 3d 3d 32 20 3f  Name = nArg==2 ?
32000 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d 61 69   azArg[1] : "mai
32010 6e 22 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 56  n";.    char *zV
32020 66 73 4e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20  fsName = 0;.    
32030 69 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20  if( p->db ){.   
32040 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f     sqlite3_file_
32050 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 7a  control(p->db, z
32060 44 62 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46  DbName, SQLITE_F
32070 43 4e 54 4c 5f 56 46 53 4e 41 4d 45 2c 20 26 7a  CNTL_VFSNAME, &z
32080 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  VfsName);.      
32090 69 66 28 20 7a 56 66 73 4e 61 6d 65 20 29 7b 0a  if( zVfsName ){.
320a0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
320b0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c  ntf(p->out, "%s\
320c0 6e 22 2c 20 7a 56 66 73 4e 61 6d 65 29 3b 0a 20  n", zVfsName);. 
320d0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
320e0 72 65 65 28 7a 56 66 73 4e 61 6d 65 29 3b 0a 20  ree(zVfsName);. 
320f0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
32100 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e 65  else..#if define
32110 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
32120 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
32130 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45 54 52  E_ENABLE_WHERETR
32140 41 43 45 29 0a 20 20 69 66 28 20 63 3d 3d 27 77  ACE).  if( c=='w
32150 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
32160 72 67 5b 30 5d 2c 20 22 77 68 65 72 65 74 72 61  rg[0], "wheretra
32170 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ce", n)==0 ){.  
32180 20 20 73 71 6c 69 74 65 33 57 68 65 72 65 54 72    sqlite3WhereTr
32190 61 63 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f 20  ace = nArg>=2 ? 
321a0 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
321b0 72 67 5b 31 5d 29 20 3a 20 30 78 66 66 3b 0a 20  rg[1]) : 0xff;. 
321c0 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
321d0 20 69 66 28 20 63 3d 3d 27 77 27 20 26 26 20 73   if( c=='w' && s
321e0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
321f0 20 22 77 69 64 74 68 22 2c 20 6e 29 3d 3d 30 20   "width", n)==0 
32200 29 7b 0a 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20  ){.    int j;.  
32210 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3c 3d    assert( nArg<=
32220 41 72 72 61 79 53 69 7a 65 28 61 7a 41 72 67 29  ArraySize(azArg)
32230 20 29 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 31 3b   );.    for(j=1;
32240 20 6a 3c 6e 41 72 67 20 26 26 20 6a 3c 41 72 72   j<nArg && j<Arr
32250 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 57 69 64  aySize(p->colWid
32260 74 68 29 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  th); j++){.     
32270 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 6a 2d 31   p->colWidth[j-1
32280 5d 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72  ] = (int)integer
32290 56 61 6c 75 65 28 61 7a 41 72 67 5b 6a 5d 29 3b  Value(azArg[j]);
322a0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
322b0 20 20 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69    {.    utf8_pri
322c0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
322d0 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d  or: unknown comm
322e0 61 6e 64 20 6f 72 20 69 6e 76 61 6c 69 64 20 61  and or invalid a
322f0 72 67 75 6d 65 6e 74 73 3a 20 22 0a 20 20 20 20  rguments: ".    
32300 20 20 22 20 5c 22 25 73 5c 22 2e 20 45 6e 74 65    " \"%s\". Ente
32310 72 20 5c 22 2e 68 65 6c 70 5c 22 20 66 6f 72 20  r \".help\" for 
32320 68 65 6c 70 5c 6e 22 2c 20 61 7a 41 72 67 5b 30  help\n", azArg[0
32330 5d 29 3b 0a 20 20 20 20 72 63 20 3d 20 31 3b 0a  ]);.    rc = 1;.
32340 20 20 7d 0a 0a 6d 65 74 61 5f 63 6f 6d 6d 61 6e    }..meta_comman
32350 64 5f 65 78 69 74 3a 0a 20 20 69 66 28 20 70 2d  d_exit:.  if( p-
32360 3e 6f 75 74 43 6f 75 6e 74 20 29 7b 0a 20 20 20  >outCount ){.   
32370 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 2d 2d 3b 0a   p->outCount--;.
32380 20 20 20 20 69 66 28 20 70 2d 3e 6f 75 74 43 6f      if( p->outCo
32390 75 6e 74 3d 3d 30 20 29 20 6f 75 74 70 75 74 5f  unt==0 ) output_
323a0 72 65 73 65 74 28 70 29 3b 0a 20 20 7d 0a 20 20  reset(p);.  }.  
323b0 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
323c0 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20  .** Return TRUE 
323d0 69 66 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 20 6f  if a semicolon o
323e0 63 63 75 72 73 20 61 6e 79 77 68 65 72 65 20 69  ccurs anywhere i
323f0 6e 20 74 68 65 20 66 69 72 73 74 20 4e 20 63 68  n the first N ch
32400 61 72 61 63 74 65 72 73 0a 2a 2a 20 6f 66 20 73  aracters.** of s
32410 74 72 69 6e 67 20 7a 5b 5d 2e 0a 2a 2f 0a 73 74  tring z[]..*/.st
32420 61 74 69 63 20 69 6e 74 20 6c 69 6e 65 5f 63 6f  atic int line_co
32430 6e 74 61 69 6e 73 5f 73 65 6d 69 63 6f 6c 6f 6e  ntains_semicolon
32440 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
32450 69 6e 74 20 4e 29 7b 0a 20 20 69 6e 74 20 69 3b  int N){.  int i;
32460 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 3b  .  for(i=0; i<N;
32470 20 69 2b 2b 29 7b 20 20 69 66 28 20 7a 5b 69 5d   i++){  if( z[i]
32480 3d 3d 27 3b 27 20 29 20 72 65 74 75 72 6e 20 31  ==';' ) return 1
32490 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a  ; }.  return 0;.
324a0 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  }../*.** Test to
324b0 20 73 65 65 20 69 66 20 61 20 6c 69 6e 65 20 63   see if a line c
324c0 6f 6e 73 69 73 74 73 20 65 6e 74 69 72 65 6c 79  onsists entirely
324d0 20 6f 66 20 77 68 69 74 65 73 70 61 63 65 2e 0a   of whitespace..
324e0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 5f 61  */.static int _a
324f0 6c 6c 5f 77 68 69 74 65 73 70 61 63 65 28 63 6f  ll_whitespace(co
32500 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20  nst char *z){.  
32510 66 6f 72 28 3b 20 2a 7a 3b 20 7a 2b 2b 29 7b 0a  for(; *z; z++){.
32520 20 20 20 20 69 66 28 20 49 73 53 70 61 63 65 28      if( IsSpace(
32530 7a 5b 30 5d 29 20 29 20 63 6f 6e 74 69 6e 75 65  z[0]) ) continue
32540 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2f  ;.    if( *z=='/
32550 27 20 26 26 20 7a 5b 31 5d 3d 3d 27 2a 27 20 29  ' && z[1]=='*' )
32560 7b 0a 20 20 20 20 20 20 7a 20 2b 3d 20 32 3b 0a  {.      z += 2;.
32570 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20        while( *z 
32580 26 26 20 28 2a 7a 21 3d 27 2a 27 20 7c 7c 20 7a  && (*z!='*' || z
32590 5b 31 5d 21 3d 27 2f 27 29 20 29 7b 20 7a 2b 2b  [1]!='/') ){ z++
325a0 3b 20 7d 0a 20 20 20 20 20 20 69 66 28 20 2a 7a  ; }.      if( *z
325b0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
325c0 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20        z++;.     
325d0 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d   continue;.    }
325e0 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2d 27  .    if( *z=='-'
325f0 20 26 26 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b   && z[1]=='-' ){
32600 0a 20 20 20 20 20 20 7a 20 2b 3d 20 32 3b 0a 20  .      z += 2;. 
32610 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 26       while( *z &
32620 26 20 2a 7a 21 3d 27 5c 6e 27 20 29 7b 20 7a 2b  & *z!='\n' ){ z+
32630 2b 3b 20 7d 0a 20 20 20 20 20 20 69 66 28 20 2a  +; }.      if( *
32640 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b  z==0 ) return 1;
32650 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b  .      continue;
32660 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
32670 6e 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  n 0;.  }.  retur
32680 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  n 1;.}../*.** Re
32690 74 75 72 6e 20 54 52 55 45 20 69 66 20 74 68 65  turn TRUE if the
326a0 20 6c 69 6e 65 20 74 79 70 65 64 20 69 6e 20 69   line typed in i
326b0 73 20 61 6e 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  s an SQL command
326c0 20 74 65 72 6d 69 6e 61 74 6f 72 20 6f 74 68 65   terminator othe
326d0 72 0a 2a 2a 20 74 68 61 6e 20 61 20 73 65 6d 69  r.** than a semi
326e0 2d 63 6f 6c 6f 6e 2e 20 20 54 68 65 20 53 51 4c  -colon.  The SQL
326f0 20 53 65 72 76 65 72 20 73 74 79 6c 65 20 22 67   Server style "g
32700 6f 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e  o" command is un
32710 64 65 72 73 74 6f 6f 64 0a 2a 2a 20 61 73 20 69  derstood.** as i
32720 73 20 74 68 65 20 4f 72 61 63 6c 65 20 22 2f 22  s the Oracle "/"
32730 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
32740 6c 69 6e 65 5f 69 73 5f 63 6f 6d 6d 61 6e 64 5f  line_is_command_
32750 74 65 72 6d 69 6e 61 74 6f 72 28 63 6f 6e 73 74  terminator(const
32760 20 63 68 61 72 20 2a 7a 4c 69 6e 65 29 7b 0a 20   char *zLine){. 
32770 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28   while( IsSpace(
32780 7a 4c 69 6e 65 5b 30 5d 29 20 29 7b 20 7a 4c 69  zLine[0]) ){ zLi
32790 6e 65 2b 2b 3b 20 7d 3b 0a 20 20 69 66 28 20 7a  ne++; };.  if( z
327a0 4c 69 6e 65 5b 30 5d 3d 3d 27 2f 27 20 26 26 20  Line[0]=='/' && 
327b0 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 65 28  _all_whitespace(
327c0 26 7a 4c 69 6e 65 5b 31 5d 29 20 29 7b 0a 20 20  &zLine[1]) ){.  
327d0 20 20 72 65 74 75 72 6e 20 31 3b 20 20 2f 2a 20    return 1;  /* 
327e0 4f 72 61 63 6c 65 20 2a 2f 0a 20 20 7d 0a 20 20  Oracle */.  }.  
327f0 69 66 28 20 54 6f 4c 6f 77 65 72 28 7a 4c 69 6e  if( ToLower(zLin
32800 65 5b 30 5d 29 3d 3d 27 67 27 20 26 26 20 54 6f  e[0])=='g' && To
32810 4c 6f 77 65 72 28 7a 4c 69 6e 65 5b 31 5d 29 3d  Lower(zLine[1])=
32820 3d 27 6f 27 0a 20 20 20 20 20 20 20 20 20 26 26  ='o'.         &&
32830 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 65   _all_whitespace
32840 28 26 7a 4c 69 6e 65 5b 32 5d 29 20 29 7b 0a 20  (&zLine[2]) ){. 
32850 20 20 20 72 65 74 75 72 6e 20 31 3b 20 20 2f 2a     return 1;  /*
32860 20 53 51 4c 20 53 65 72 76 65 72 20 2a 2f 0a 20   SQL Server */. 
32870 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
32880 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
32890 72 75 65 20 69 66 20 7a 53 71 6c 20 69 73 20 61  rue if zSql is a
328a0 20 63 6f 6d 70 6c 65 74 65 20 53 51 4c 20 73 74   complete SQL st
328b0 61 74 65 6d 65 6e 74 2e 20 20 52 65 74 75 72 6e  atement.  Return
328c0 20 66 61 6c 73 65 20 69 66 20 69 74 0a 2a 2a 20   false if it.** 
328d0 65 6e 64 73 20 69 6e 20 74 68 65 20 6d 69 64 64  ends in the midd
328e0 6c 65 20 6f 66 20 61 20 73 74 72 69 6e 67 20 6c  le of a string l
328f0 69 74 65 72 61 6c 20 6f 72 20 43 2d 73 74 79 6c  iteral or C-styl
32900 65 20 63 6f 6d 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  e comment..*/.st
32910 61 74 69 63 20 69 6e 74 20 6c 69 6e 65 5f 69 73  atic int line_is
32920 5f 63 6f 6d 70 6c 65 74 65 28 63 68 61 72 20 2a  _complete(char *
32930 7a 53 71 6c 2c 20 69 6e 74 20 6e 53 71 6c 29 7b  zSql, int nSql){
32940 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28  .  int rc;.  if(
32950 20 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75 72   zSql==0 ) retur
32960 6e 20 31 3b 0a 20 20 7a 53 71 6c 5b 6e 53 71 6c  n 1;.  zSql[nSql
32970 5d 20 3d 20 27 3b 27 3b 0a 20 20 7a 53 71 6c 5b  ] = ';';.  zSql[
32980 6e 53 71 6c 2b 31 5d 20 3d 20 30 3b 0a 20 20 72  nSql+1] = 0;.  r
32990 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  c = sqlite3_comp
329a0 6c 65 74 65 28 7a 53 71 6c 29 3b 0a 20 20 7a 53  lete(zSql);.  zS
329b0 71 6c 5b 6e 53 71 6c 5d 20 3d 20 30 3b 0a 20 20  ql[nSql] = 0;.  
329c0 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
329d0 0a 2a 2a 20 52 75 6e 20 61 20 73 69 6e 67 6c 65  .** Run a single
329e0 20 6c 69 6e 65 20 6f 66 20 53 51 4c 0a 2a 2f 0a   line of SQL.*/.
329f0 73 74 61 74 69 63 20 69 6e 74 20 72 75 6e 4f 6e  static int runOn
32a00 65 53 71 6c 4c 69 6e 65 28 53 68 65 6c 6c 53 74  eSqlLine(ShellSt
32a10 61 74 65 20 2a 70 2c 20 63 68 61 72 20 2a 7a 53  ate *p, char *zS
32a20 71 6c 2c 20 46 49 4c 45 20 2a 69 6e 2c 20 69 6e  ql, FILE *in, in
32a30 74 20 73 74 61 72 74 6c 69 6e 65 29 7b 0a 20 20  t startline){.  
32a40 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a  int rc;.  char *
32a50 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20  zErrMsg = 0;..  
32a60 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
32a70 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c 61   if( ShellHasFla
32a80 67 28 70 2c 53 48 46 4c 47 5f 42 61 63 6b 73 6c  g(p,SHFLG_Backsl
32a90 61 73 68 29 20 29 20 72 65 73 6f 6c 76 65 5f 62  ash) ) resolve_b
32aa0 61 63 6b 73 6c 61 73 68 65 73 28 7a 53 71 6c 29  ackslashes(zSql)
32ab0 3b 0a 20 20 42 45 47 49 4e 5f 54 49 4d 45 52 3b  ;.  BEGIN_TIMER;
32ac0 0a 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65 78  .  rc = shell_ex
32ad0 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  ec(p->db, zSql, 
32ae0 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20  shell_callback, 
32af0 70 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  p, &zErrMsg);.  
32b00 45 4e 44 5f 54 49 4d 45 52 3b 0a 20 20 69 66 28  END_TIMER;.  if(
32b10 20 72 63 20 7c 7c 20 7a 45 72 72 4d 73 67 20 29   rc || zErrMsg )
32b20 7b 0a 20 20 20 20 63 68 61 72 20 7a 50 72 65 66  {.    char zPref
32b30 69 78 5b 31 30 30 5d 3b 0a 20 20 20 20 69 66 28  ix[100];.    if(
32b40 20 69 6e 21 3d 30 20 7c 7c 20 21 73 74 64 69 6e   in!=0 || !stdin
32b50 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20  _is_interactive 
32b60 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
32b70 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
32b80 28 7a 50 72 65 66 69 78 29 2c 20 7a 50 72 65 66  (zPrefix), zPref
32b90 69 78 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ix,.            
32ba0 20 20 20 20 20 20 20 20 20 20 20 22 45 72 72 6f             "Erro
32bb0 72 3a 20 6e 65 61 72 20 6c 69 6e 65 20 25 64 3a  r: near line %d:
32bc0 22 2c 20 73 74 61 72 74 6c 69 6e 65 29 3b 0a 20  ", startline);. 
32bd0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
32be0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
32bf0 28 73 69 7a 65 6f 66 28 7a 50 72 65 66 69 78 29  (sizeof(zPrefix)
32c00 2c 20 7a 50 72 65 66 69 78 2c 20 22 45 72 72 6f  , zPrefix, "Erro
32c10 72 3a 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  r:");.    }.    
32c20 69 66 28 20 7a 45 72 72 4d 73 67 21 3d 30 20 29  if( zErrMsg!=0 )
32c30 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
32c40 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 20  ntf(stderr, "%s 
32c50 25 73 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c 20  %s\n", zPrefix, 
32c60 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20  zErrMsg);.      
32c70 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
32c80 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 7a 45 72  rMsg);.      zEr
32c90 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d 65  rMsg = 0;.    }e
32ca0 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  lse{.      utf8_
32cb0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
32cc0 25 73 20 25 73 5c 6e 22 2c 20 7a 50 72 65 66 69  %s %s\n", zPrefi
32cd0 78 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  x, sqlite3_errms
32ce0 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 7d  g(p->db));.    }
32cf0 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
32d00 20 7d 65 6c 73 65 20 69 66 28 20 53 68 65 6c 6c   }else if( Shell
32d10 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47  HasFlag(p, SHFLG
32d20 5f 43 6f 75 6e 74 43 68 61 6e 67 65 73 29 20 29  _CountChanges) )
32d30 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
32d40 28 70 2d 3e 6f 75 74 2c 20 22 63 68 61 6e 67 65  (p->out, "change
32d50 73 3a 20 25 33 64 20 20 20 74 6f 74 61 6c 5f 63  s: %3d   total_c
32d60 68 61 6e 67 65 73 3a 20 25 64 5c 6e 22 2c 0a 20  hanges: %d\n",. 
32d70 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
32d80 65 33 5f 63 68 61 6e 67 65 73 28 70 2d 3e 64 62  e3_changes(p->db
32d90 29 2c 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  ), sqlite3_total
32da0 5f 63 68 61 6e 67 65 73 28 70 2d 3e 64 62 29 29  _changes(p->db))
32db0 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  ;.  }.  return 0
32dc0 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64  ;.}.../*.** Read
32dd0 20 69 6e 70 75 74 20 66 72 6f 6d 20 2a 69 6e 20   input from *in 
32de0 61 6e 64 20 70 72 6f 63 65 73 73 20 69 74 2e 20  and process it. 
32df0 20 49 66 20 2a 69 6e 3d 3d 30 20 74 68 65 6e 20   If *in==0 then 
32e00 69 6e 70 75 74 0a 2a 2a 20 69 73 20 69 6e 74 65  input.** is inte
32e10 72 61 63 74 69 76 65 20 2d 20 74 68 65 20 75 73  ractive - the us
32e20 65 72 20 69 73 20 74 79 70 69 6e 67 20 69 74 20  er is typing it 
32e30 69 74 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20  it.  Otherwise, 
32e40 69 6e 70 75 74 0a 2a 2a 20 69 73 20 63 6f 6d 69  input.** is comi
32e50 6e 67 20 66 72 6f 6d 20 61 20 66 69 6c 65 20 6f  ng from a file o
32e60 72 20 64 65 76 69 63 65 2e 20 20 41 20 70 72 6f  r device.  A pro
32e70 6d 70 74 20 69 73 20 69 73 73 75 65 64 20 61 6e  mpt is issued an
32e80 64 20 68 69 73 74 6f 72 79 0a 2a 2a 20 69 73 20  d history.** is 
32e90 73 61 76 65 64 20 6f 6e 6c 79 20 69 66 20 69 6e  saved only if in
32ea0 70 75 74 20 69 73 20 69 6e 74 65 72 61 63 74 69  put is interacti
32eb0 76 65 2e 20 20 41 6e 20 69 6e 74 65 72 72 75 70  ve.  An interrup
32ec0 74 20 73 69 67 6e 61 6c 20 77 69 6c 6c 0a 2a 2a  t signal will.**
32ed0 20 63 61 75 73 65 20 74 68 69 73 20 72 6f 75 74   cause this rout
32ee0 69 6e 65 20 74 6f 20 65 78 69 74 20 69 6d 6d 65  ine to exit imme
32ef0 64 69 61 74 65 6c 79 2c 20 75 6e 6c 65 73 73 20  diately, unless 
32f00 69 6e 70 75 74 20 69 73 20 69 6e 74 65 72 61 63  input is interac
32f10 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75  tive..**.** Retu
32f20 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
32f30 20 65 72 72 6f 72 73 2e 0a 2a 2f 0a 73 74 61 74   errors..*/.stat
32f40 69 63 20 69 6e 74 20 70 72 6f 63 65 73 73 5f 69  ic int process_i
32f50 6e 70 75 74 28 53 68 65 6c 6c 53 74 61 74 65 20  nput(ShellState 
32f60 2a 70 2c 20 46 49 4c 45 20 2a 69 6e 29 7b 0a 20  *p, FILE *in){. 
32f70 20 63 68 61 72 20 2a 7a 4c 69 6e 65 20 3d 20 30   char *zLine = 0
32f80 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  ;          /* A 
32f90 73 69 6e 67 6c 65 20 69 6e 70 75 74 20 6c 69 6e  single input lin
32fa0 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 71  e */.  char *zSq
32fb0 6c 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  l = 0;          
32fc0 20 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65 64 20   /* Accumulated 
32fd0 53 51 4c 20 74 65 78 74 20 2a 2f 0a 20 20 69 6e  SQL text */.  in
32fe0 74 20 6e 4c 69 6e 65 3b 20 20 20 20 20 20 20 20  t nLine;        
32ff0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
33000 68 20 6f 66 20 63 75 72 72 65 6e 74 20 6c 69 6e  h of current lin
33010 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 71 6c 20  e */.  int nSql 
33020 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
33030 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 7a 53 71   /* Bytes of zSq
33040 6c 5b 5d 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e  l[] used */.  in
33050 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b 20 20 20  t nAlloc = 0;   
33060 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63          /* Alloc
33070 61 74 65 64 20 7a 53 71 6c 5b 5d 20 73 70 61 63  ated zSql[] spac
33080 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 71 6c 50  e */.  int nSqlP
33090 72 69 6f 72 20 3d 20 30 3b 20 20 20 20 20 20 20  rior = 0;       
330a0 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 7a 53 71   /* Bytes of zSq
330b0 6c 5b 5d 20 75 73 65 64 20 62 79 20 70 72 69 6f  l[] used by prio
330c0 72 20 6c 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20  r line */.  int 
330d0 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
330e0 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 63        /* Error c
330f0 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  ode */.  int err
33100 43 6e 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Cnt = 0;        
33110 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
33120 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
33130 20 69 6e 74 20 6c 69 6e 65 6e 6f 20 3d 20 30 3b   int lineno = 0;
33140 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
33150 72 72 65 6e 74 20 6c 69 6e 65 20 6e 75 6d 62 65  rrent line numbe
33160 72 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61 72 74  r */.  int start
33170 6c 69 6e 65 20 3d 20 30 3b 20 20 20 20 20 20 20  line = 0;       
33180 20 2f 2a 20 4c 69 6e 65 20 6e 75 6d 62 65 72 20   /* Line number 
33190 66 6f 72 20 73 74 61 72 74 20 6f 66 20 63 75 72  for start of cur
331a0 72 65 6e 74 20 69 6e 70 75 74 20 2a 2f 0a 0a 20  rent input */.. 
331b0 20 77 68 69 6c 65 28 20 65 72 72 43 6e 74 3d 3d   while( errCnt==
331c0 30 20 7c 7c 20 21 62 61 69 6c 5f 6f 6e 5f 65 72  0 || !bail_on_er
331d0 72 6f 72 20 7c 7c 20 28 69 6e 3d 3d 30 20 26 26  ror || (in==0 &&
331e0 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61   stdin_is_intera
331f0 63 74 69 76 65 29 20 29 7b 0a 20 20 20 20 66 66  ctive) ){.    ff
33200 6c 75 73 68 28 70 2d 3e 6f 75 74 29 3b 0a 20 20  lush(p->out);.  
33210 20 20 7a 4c 69 6e 65 20 3d 20 6f 6e 65 5f 69 6e    zLine = one_in
33220 70 75 74 5f 6c 69 6e 65 28 69 6e 2c 20 7a 4c 69  put_line(in, zLi
33230 6e 65 2c 20 6e 53 71 6c 3e 30 29 3b 0a 20 20 20  ne, nSql>0);.   
33240 20 69 66 28 20 7a 4c 69 6e 65 3d 3d 30 20 29 7b   if( zLine==0 ){
33250 0a 20 20 20 20 20 20 2f 2a 20 45 6e 64 20 6f 66  .      /* End of
33260 20 69 6e 70 75 74 20 2a 2f 0a 20 20 20 20 20 20   input */.      
33270 69 66 28 20 69 6e 3d 3d 30 20 26 26 20 73 74 64  if( in==0 && std
33280 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76  in_is_interactiv
33290 65 20 29 20 70 72 69 6e 74 66 28 22 5c 6e 22 29  e ) printf("\n")
332a0 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
332b0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 65 65     }.    if( see
332c0 6e 49 6e 74 65 72 72 75 70 74 20 29 7b 0a 20 20  nInterrupt ){.  
332d0 20 20 20 20 69 66 28 20 69 6e 21 3d 30 20 29 20      if( in!=0 ) 
332e0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 73 65 65  break;.      see
332f0 6e 49 6e 74 65 72 72 75 70 74 20 3d 20 30 3b 0a  nInterrupt = 0;.
33300 20 20 20 20 7d 0a 20 20 20 20 6c 69 6e 65 6e 6f      }.    lineno
33310 2b 2b 3b 0a 20 20 20 20 69 66 28 20 6e 53 71 6c  ++;.    if( nSql
33320 3d 3d 30 20 26 26 20 5f 61 6c 6c 5f 77 68 69 74  ==0 && _all_whit
33330 65 73 70 61 63 65 28 7a 4c 69 6e 65 29 20 29 7b  espace(zLine) ){
33340 0a 20 20 20 20 20 20 69 66 28 20 53 68 65 6c 6c  .      if( Shell
33350 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47  HasFlag(p, SHFLG
33360 5f 45 63 68 6f 29 20 29 20 70 72 69 6e 74 66 28  _Echo) ) printf(
33370 22 25 73 5c 6e 22 2c 20 7a 4c 69 6e 65 29 3b 0a  "%s\n", zLine);.
33380 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
33390 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 4c      }.    if( zL
333a0 69 6e 65 20 26 26 20 7a 4c 69 6e 65 5b 30 5d 3d  ine && zLine[0]=
333b0 3d 27 2e 27 20 26 26 20 6e 53 71 6c 3d 3d 30 20  ='.' && nSql==0 
333c0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 53 68 65  ){.      if( She
333d0 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46  llHasFlag(p, SHF
333e0 4c 47 5f 45 63 68 6f 29 20 29 20 70 72 69 6e 74  LG_Echo) ) print
333f0 66 28 22 25 73 5c 6e 22 2c 20 7a 4c 69 6e 65 29  f("%s\n", zLine)
33400 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 64 6f 5f  ;.      rc = do_
33410 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28 7a 4c 69  meta_command(zLi
33420 6e 65 2c 20 70 29 3b 0a 20 20 20 20 20 20 69 66  ne, p);.      if
33430 28 20 72 63 3d 3d 32 20 29 7b 20 2f 2a 20 65 78  ( rc==2 ){ /* ex
33440 69 74 20 72 65 71 75 65 73 74 65 64 20 2a 2f 0a  it requested */.
33450 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
33460 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72       }else if( r
33470 63 20 29 7b 0a 20 20 20 20 20 20 20 20 65 72 72  c ){.        err
33480 43 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20  Cnt++;.      }. 
33490 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20       continue;. 
334a0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6c 69 6e     }.    if( lin
334b0 65 5f 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74 65 72  e_is_command_ter
334c0 6d 69 6e 61 74 6f 72 28 7a 4c 69 6e 65 29 20 26  minator(zLine) &
334d0 26 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d 70 6c 65  & line_is_comple
334e0 74 65 28 7a 53 71 6c 2c 20 6e 53 71 6c 29 20 29  te(zSql, nSql) )
334f0 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 7a  {.      memcpy(z
33500 4c 69 6e 65 2c 22 3b 22 2c 32 29 3b 0a 20 20 20  Line,";",2);.   
33510 20 7d 0a 20 20 20 20 6e 4c 69 6e 65 20 3d 20 73   }.    nLine = s
33520 74 72 6c 65 6e 33 30 28 7a 4c 69 6e 65 29 3b 0a  trlen30(zLine);.
33530 20 20 20 20 69 66 28 20 6e 53 71 6c 2b 6e 4c 69      if( nSql+nLi
33540 6e 65 2b 32 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a  ne+2>=nAlloc ){.
33550 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e        nAlloc = n
33560 53 71 6c 2b 6e 4c 69 6e 65 2b 31 30 30 3b 0a 20  Sql+nLine+100;. 
33570 20 20 20 20 20 7a 53 71 6c 20 3d 20 72 65 61 6c       zSql = real
33580 6c 6f 63 28 7a 53 71 6c 2c 20 6e 41 6c 6c 6f 63  loc(zSql, nAlloc
33590 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 53 71  );.      if( zSq
335a0 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  l==0 ){.        
335b0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
335c0 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f  r, "Error: out o
335d0 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20  f memory\n");.  
335e0 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20        exit(1);. 
335f0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
33600 20 6e 53 71 6c 50 72 69 6f 72 20 3d 20 6e 53 71   nSqlPrior = nSq
33610 6c 3b 0a 20 20 20 20 69 66 28 20 6e 53 71 6c 3d  l;.    if( nSql=
33620 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
33630 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  i;.      for(i=0
33640 3b 20 7a 4c 69 6e 65 5b 69 5d 20 26 26 20 49 73  ; zLine[i] && Is
33650 53 70 61 63 65 28 7a 4c 69 6e 65 5b 69 5d 29 3b  Space(zLine[i]);
33660 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 61 73   i++){}.      as
33670 73 65 72 74 28 20 6e 41 6c 6c 6f 63 3e 30 20 26  sert( nAlloc>0 &
33680 26 20 7a 53 71 6c 21 3d 30 20 29 3b 0a 20 20 20  & zSql!=0 );.   
33690 20 20 20 6d 65 6d 63 70 79 28 7a 53 71 6c 2c 20     memcpy(zSql, 
336a0 7a 4c 69 6e 65 2b 69 2c 20 6e 4c 69 6e 65 2b 31  zLine+i, nLine+1
336b0 2d 69 29 3b 0a 20 20 20 20 20 20 73 74 61 72 74  -i);.      start
336c0 6c 69 6e 65 20 3d 20 6c 69 6e 65 6e 6f 3b 0a 20  line = lineno;. 
336d0 20 20 20 20 20 6e 53 71 6c 20 3d 20 6e 4c 69 6e       nSql = nLin
336e0 65 2d 69 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  e-i;.    }else{.
336f0 20 20 20 20 20 20 7a 53 71 6c 5b 6e 53 71 6c 2b        zSql[nSql+
33700 2b 5d 20 3d 20 27 5c 6e 27 3b 0a 20 20 20 20 20  +] = '\n';.     
33710 20 6d 65 6d 63 70 79 28 7a 53 71 6c 2b 6e 53 71   memcpy(zSql+nSq
33720 6c 2c 20 7a 4c 69 6e 65 2c 20 6e 4c 69 6e 65 2b  l, zLine, nLine+
33730 31 29 3b 0a 20 20 20 20 20 20 6e 53 71 6c 20 2b  1);.      nSql +
33740 3d 20 6e 4c 69 6e 65 3b 0a 20 20 20 20 7d 0a 20  = nLine;.    }. 
33750 20 20 20 69 66 28 20 6e 53 71 6c 20 26 26 20 6c     if( nSql && l
33760 69 6e 65 5f 63 6f 6e 74 61 69 6e 73 5f 73 65 6d  ine_contains_sem
33770 69 63 6f 6c 6f 6e 28 26 7a 53 71 6c 5b 6e 53 71  icolon(&zSql[nSq
33780 6c 50 72 69 6f 72 5d 2c 20 6e 53 71 6c 2d 6e 53  lPrior], nSql-nS
33790 71 6c 50 72 69 6f 72 29 0a 20 20 20 20 20 20 20  qlPrior).       
337a0 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69           && sqli
337b0 74 65 33 5f 63 6f 6d 70 6c 65 74 65 28 7a 53 71  te3_complete(zSq
337c0 6c 29 20 29 7b 0a 20 20 20 20 20 20 65 72 72 43  l) ){.      errC
337d0 6e 74 20 2b 3d 20 72 75 6e 4f 6e 65 53 71 6c 4c  nt += runOneSqlL
337e0 69 6e 65 28 70 2c 20 7a 53 71 6c 2c 20 69 6e 2c  ine(p, zSql, in,
337f0 20 73 74 61 72 74 6c 69 6e 65 29 3b 0a 20 20 20   startline);.   
33800 20 20 20 6e 53 71 6c 20 3d 20 30 3b 0a 20 20 20     nSql = 0;.   
33810 20 20 20 69 66 28 20 70 2d 3e 6f 75 74 43 6f 75     if( p->outCou
33820 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 6f 75  nt ){.        ou
33830 74 70 75 74 5f 72 65 73 65 74 28 70 29 3b 0a 20  tput_reset(p);. 
33840 20 20 20 20 20 20 20 70 2d 3e 6f 75 74 43 6f 75         p->outCou
33850 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  nt = 0;.      }.
33860 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 53      }else if( nS
33870 71 6c 20 26 26 20 5f 61 6c 6c 5f 77 68 69 74 65  ql && _all_white
33880 73 70 61 63 65 28 7a 53 71 6c 29 20 29 7b 0a 20  space(zSql) ){. 
33890 20 20 20 20 20 69 66 28 20 53 68 65 6c 6c 48 61       if( ShellHa
338a0 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 45  sFlag(p, SHFLG_E
338b0 63 68 6f 29 20 29 20 70 72 69 6e 74 66 28 22 25  cho) ) printf("%
338c0 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  s\n", zSql);.   
338d0 20 20 20 6e 53 71 6c 20 3d 20 30 3b 0a 20 20 20     nSql = 0;.   
338e0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6e 53 71   }.  }.  if( nSq
338f0 6c 20 26 26 20 21 5f 61 6c 6c 5f 77 68 69 74 65  l && !_all_white
33900 73 70 61 63 65 28 7a 53 71 6c 29 20 29 7b 0a 20  space(zSql) ){. 
33910 20 20 20 72 75 6e 4f 6e 65 53 71 6c 4c 69 6e 65     runOneSqlLine
33920 28 70 2c 20 7a 53 71 6c 2c 20 69 6e 2c 20 73 74  (p, zSql, in, st
33930 61 72 74 6c 69 6e 65 29 3b 0a 20 20 7d 0a 20 20  artline);.  }.  
33940 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 66 72  free(zSql);.  fr
33950 65 65 28 7a 4c 69 6e 65 29 3b 0a 20 20 72 65 74  ee(zLine);.  ret
33960 75 72 6e 20 65 72 72 43 6e 74 3e 30 3b 0a 7d 0a  urn errCnt>0;.}.
33970 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
33980 70 61 74 68 6e 61 6d 65 20 77 68 69 63 68 20 69  pathname which i
33990 73 20 74 68 65 20 75 73 65 72 27 73 20 68 6f 6d  s the user's hom
339a0 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20 41 0a  e directory.  A.
339b0 2a 2a 20 30 20 72 65 74 75 72 6e 20 69 6e 64 69  ** 0 return indi
339c0 63 61 74 65 73 20 61 6e 20 65 72 72 6f 72 20 6f  cates an error o
339d0 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 2a 2f 0a  f some kind..*/.
339e0 73 74 61 74 69 63 20 63 68 61 72 20 2a 66 69 6e  static char *fin
339f0 64 5f 68 6f 6d 65 5f 64 69 72 28 69 6e 74 20 63  d_home_dir(int c
33a00 6c 65 61 72 46 6c 61 67 29 7b 0a 20 20 73 74 61  learFlag){.  sta
33a10 74 69 63 20 63 68 61 72 20 2a 68 6f 6d 65 5f 64  tic char *home_d
33a20 69 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20 69 66 28  ir = NULL;.  if(
33a30 20 63 6c 65 61 72 46 6c 61 67 20 29 7b 0a 20 20   clearFlag ){.  
33a40 20 20 66 72 65 65 28 68 6f 6d 65 5f 64 69 72 29    free(home_dir)
33a50 3b 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d  ;.    home_dir =
33a60 20 30 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   0;.    return 0
33a70 3b 0a 20 20 7d 0a 20 20 69 66 28 20 68 6f 6d 65  ;.  }.  if( home
33a80 5f 64 69 72 20 29 20 72 65 74 75 72 6e 20 68 6f  _dir ) return ho
33a90 6d 65 5f 64 69 72 3b 0a 0a 23 69 66 20 21 64 65  me_dir;..#if !de
33aa0 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26 26  fined(_WIN32) &&
33ab0 20 21 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29   !defined(WIN32)
33ac0 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49   && !defined(_WI
33ad0 4e 33 32 5f 57 43 45 29 20 5c 0a 20 20 20 20 20  N32_WCE) \.     
33ae0 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 52 54  && !defined(__RT
33af0 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  P__) && !defined
33b00 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a 20 20  (_WRS_KERNEL).  
33b10 7b 0a 20 20 20 20 73 74 72 75 63 74 20 70 61 73  {.    struct pas
33b20 73 77 64 20 2a 70 77 65 6e 74 3b 0a 20 20 20 20  swd *pwent;.    
33b30 75 69 64 5f 74 20 75 69 64 20 3d 20 67 65 74 75  uid_t uid = getu
33b40 69 64 28 29 3b 0a 20 20 20 20 69 66 28 20 28 70  id();.    if( (p
33b50 77 65 6e 74 3d 67 65 74 70 77 75 69 64 28 75 69  went=getpwuid(ui
33b60 64 29 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20  d)) != NULL) {. 
33b70 20 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20       home_dir = 
33b80 70 77 65 6e 74 2d 3e 70 77 5f 64 69 72 3b 0a 20  pwent->pw_dir;. 
33b90 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
33ba0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49  .#if defined(_WI
33bb0 4e 33 32 5f 57 43 45 29 0a 20 20 2f 2a 20 57 69  N32_WCE).  /* Wi
33bc0 6e 64 6f 77 73 20 43 45 20 28 61 72 6d 2d 77 69  ndows CE (arm-wi
33bd0 6e 63 65 2d 6d 69 6e 67 77 33 32 63 65 2d 67 63  nce-mingw32ce-gc
33be0 63 29 20 64 6f 65 73 20 6e 6f 74 20 70 72 6f 76  c) does not prov
33bf0 69 64 65 20 67 65 74 65 6e 76 28 29 0a 20 20 20  ide getenv().   
33c00 2a 2f 0a 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20  */.  home_dir = 
33c10 22 2f 22 3b 0a 23 65 6c 73 65 0a 0a 23 69 66 20  "/";.#else..#if 
33c20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
33c30 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
33c40 29 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f 64 69  ).  if (!home_di
33c50 72 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64 69  r) {.    home_di
33c60 72 20 3d 20 67 65 74 65 6e 76 28 22 55 53 45 52  r = getenv("USER
33c70 50 52 4f 46 49 4c 45 22 29 3b 0a 20 20 7d 0a 23  PROFILE");.  }.#
33c80 65 6e 64 69 66 0a 0a 20 20 69 66 20 28 21 68 6f  endif..  if (!ho
33c90 6d 65 5f 64 69 72 29 20 7b 0a 20 20 20 20 68 6f  me_dir) {.    ho
33ca0 6d 65 5f 64 69 72 20 3d 20 67 65 74 65 6e 76 28  me_dir = getenv(
33cb0 22 48 4f 4d 45 22 29 3b 0a 20 20 7d 0a 0a 23 69  "HOME");.  }..#i
33cc0 66 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  f defined(_WIN32
33cd0 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e  ) || defined(WIN
33ce0 33 32 29 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f  32).  if (!home_
33cf0 64 69 72 29 20 7b 0a 20 20 20 20 63 68 61 72 20  dir) {.    char 
33d00 2a 7a 44 72 69 76 65 2c 20 2a 7a 50 61 74 68 3b  *zDrive, *zPath;
33d10 0a 20 20 20 20 69 6e 74 20 6e 3b 0a 20 20 20 20  .    int n;.    
33d20 7a 44 72 69 76 65 20 3d 20 67 65 74 65 6e 76 28  zDrive = getenv(
33d30 22 48 4f 4d 45 44 52 49 56 45 22 29 3b 0a 20 20  "HOMEDRIVE");.  
33d40 20 20 7a 50 61 74 68 20 3d 20 67 65 74 65 6e 76    zPath = getenv
33d50 28 22 48 4f 4d 45 50 41 54 48 22 29 3b 0a 20 20  ("HOMEPATH");.  
33d60 20 20 69 66 28 20 7a 44 72 69 76 65 20 26 26 20    if( zDrive && 
33d70 7a 50 61 74 68 20 29 7b 0a 20 20 20 20 20 20 6e  zPath ){.      n
33d80 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 44 72 69   = strlen30(zDri
33d90 76 65 29 20 2b 20 73 74 72 6c 65 6e 33 30 28 7a  ve) + strlen30(z
33da0 50 61 74 68 29 20 2b 20 31 3b 0a 20 20 20 20 20  Path) + 1;.     
33db0 20 68 6f 6d 65 5f 64 69 72 20 3d 20 6d 61 6c 6c   home_dir = mall
33dc0 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20 20 20 69  oc( n );.      i
33dd0 66 28 20 68 6f 6d 65 5f 64 69 72 3d 3d 30 20 29  f( home_dir==0 )
33de0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20   return 0;.     
33df0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
33e00 66 28 6e 2c 20 68 6f 6d 65 5f 64 69 72 2c 20 22  f(n, home_dir, "
33e10 25 73 25 73 22 2c 20 7a 44 72 69 76 65 2c 20 7a  %s%s", zDrive, z
33e20 50 61 74 68 29 3b 0a 20 20 20 20 20 20 72 65 74  Path);.      ret
33e30 75 72 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a 20 20  urn home_dir;.  
33e40 20 20 7d 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72    }.    home_dir
33e50 20 3d 20 22 63 3a 5c 5c 22 3b 0a 20 20 7d 0a 23   = "c:\\";.  }.#
33e60 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a  endif..#endif /*
33e70 20 21 5f 57 49 4e 33 32 5f 57 43 45 20 2a 2f 0a   !_WIN32_WCE */.
33e80 0a 20 20 69 66 28 20 68 6f 6d 65 5f 64 69 72 20  .  if( home_dir 
33e90 29 7b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20 73  ){.    int n = s
33ea0 74 72 6c 65 6e 33 30 28 68 6f 6d 65 5f 64 69 72  trlen30(home_dir
33eb0 29 20 2b 20 31 3b 0a 20 20 20 20 63 68 61 72 20  ) + 1;.    char 
33ec0 2a 7a 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 20 29  *z = malloc( n )
33ed0 3b 0a 20 20 20 20 69 66 28 20 7a 20 29 20 6d 65  ;.    if( z ) me
33ee0 6d 63 70 79 28 7a 2c 20 68 6f 6d 65 5f 64 69 72  mcpy(z, home_dir
33ef0 2c 20 6e 29 3b 0a 20 20 20 20 68 6f 6d 65 5f 64  , n);.    home_d
33f00 69 72 20 3d 20 7a 3b 0a 20 20 7d 0a 0a 20 20 72  ir = z;.  }..  r
33f10 65 74 75 72 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a  eturn home_dir;.
33f20 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 69 6e  }../*.** Read in
33f30 70 75 74 20 66 72 6f 6d 20 74 68 65 20 66 69 6c  put from the fil
33f40 65 20 67 69 76 65 6e 20 62 79 20 73 71 6c 69 74  e given by sqlit
33f50 65 72 63 5f 6f 76 65 72 72 69 64 65 2e 20 20 4f  erc_override.  O
33f60 72 20 69 66 20 74 68 61 74 0a 2a 2a 20 70 61 72  r if that.** par
33f70 61 6d 65 74 65 72 20 69 73 20 4e 55 4c 4c 2c 20  ameter is NULL, 
33f80 74 61 6b 65 20 69 6e 70 75 74 20 66 72 6f 6d 20  take input from 
33f90 7e 2f 2e 73 71 6c 69 74 65 72 63 0a 2a 2a 0a 2a  ~/.sqliterc.**.*
33fa0 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75  * Returns the nu
33fb0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 2e 0a  mber of errors..
33fc0 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70  */.static void p
33fd0 72 6f 63 65 73 73 5f 73 71 6c 69 74 65 72 63 28  rocess_sqliterc(
33fe0 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
33ff0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
34000 20 20 20 2f 2a 20 43 6f 6e 66 69 67 75 72 61 74     /* Configurat
34010 69 6f 6e 20 64 61 74 61 20 2a 2f 0a 20 20 63 6f  ion data */.  co
34020 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
34030 72 63 5f 6f 76 65 72 72 69 64 65 20 20 20 2f 2a  rc_override   /*
34040 20 4e 61 6d 65 20 6f 66 20 63 6f 6e 66 69 67 20   Name of config 
34050 66 69 6c 65 2e 20 4e 55 4c 4c 20 74 6f 20 75 73  file. NULL to us
34060 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 29 7b 0a  e default */.){.
34070 20 20 63 68 61 72 20 2a 68 6f 6d 65 5f 64 69 72    char *home_dir
34080 20 3d 20 4e 55 4c 4c 3b 0a 20 20 63 6f 6e 73 74   = NULL;.  const
34090 20 63 68 61 72 20 2a 73 71 6c 69 74 65 72 63 20   char *sqliterc 
340a0 3d 20 73 71 6c 69 74 65 72 63 5f 6f 76 65 72 72  = sqliterc_overr
340b0 69 64 65 3b 0a 20 20 63 68 61 72 20 2a 7a 42 75  ide;.  char *zBu
340c0 66 20 3d 20 30 3b 0a 20 20 46 49 4c 45 20 2a 69  f = 0;.  FILE *i
340d0 6e 20 3d 20 4e 55 4c 4c 3b 0a 0a 20 20 69 66 20  n = NULL;..  if 
340e0 28 73 71 6c 69 74 65 72 63 20 3d 3d 20 4e 55 4c  (sqliterc == NUL
340f0 4c 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64 69  L) {.    home_di
34100 72 20 3d 20 66 69 6e 64 5f 68 6f 6d 65 5f 64 69  r = find_home_di
34110 72 28 30 29 3b 0a 20 20 20 20 69 66 28 20 68 6f  r(0);.    if( ho
34120 6d 65 5f 64 69 72 3d 3d 30 20 29 7b 0a 20 20 20  me_dir==0 ){.   
34130 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
34140 64 65 72 72 2c 20 22 2d 2d 20 77 61 72 6e 69 6e  derr, "-- warnin
34150 67 3a 20 63 61 6e 6e 6f 74 20 66 69 6e 64 20 68  g: cannot find h
34160 6f 6d 65 20 64 69 72 65 63 74 6f 72 79 3b 22 0a  ome directory;".
34170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34180 20 20 20 20 20 20 22 20 63 61 6e 6e 6f 74 20 72        " cannot r
34190 65 61 64 20 7e 2f 2e 73 71 6c 69 74 65 72 63 5c  ead ~/.sqliterc\
341a0 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
341b0 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  n;.    }.    sql
341c0 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
341d0 29 3b 0a 20 20 20 20 7a 42 75 66 20 3d 20 73 71  );.    zBuf = sq
341e0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
341f0 73 2f 2e 73 71 6c 69 74 65 72 63 22 2c 68 6f 6d  s/.sqliterc",hom
34200 65 5f 64 69 72 29 3b 0a 20 20 20 20 73 71 6c 69  e_dir);.    sqli
34210 74 65 72 63 20 3d 20 7a 42 75 66 3b 0a 20 20 7d  terc = zBuf;.  }
34220 0a 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 73 71  .  in = fopen(sq
34230 6c 69 74 65 72 63 2c 22 72 62 22 29 3b 0a 20 20  literc,"rb");.  
34240 69 66 28 20 69 6e 20 29 7b 0a 20 20 20 20 69 66  if( in ){.    if
34250 28 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72  ( stdin_is_inter
34260 61 63 74 69 76 65 20 29 7b 0a 20 20 20 20 20 20  active ){.      
34270 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
34280 72 72 2c 22 2d 2d 20 4c 6f 61 64 69 6e 67 20 72  rr,"-- Loading r
34290 65 73 6f 75 72 63 65 73 20 66 72 6f 6d 20 25 73  esources from %s
342a0 5c 6e 22 2c 73 71 6c 69 74 65 72 63 29 3b 0a 20  \n",sqliterc);. 
342b0 20 20 20 7d 0a 20 20 20 20 70 72 6f 63 65 73 73     }.    process
342c0 5f 69 6e 70 75 74 28 70 2c 69 6e 29 3b 0a 20 20  _input(p,in);.  
342d0 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a 20 20    fclose(in);.  
342e0 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  }.  sqlite3_free
342f0 28 7a 42 75 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  (zBuf);.}../*.**
34300 20 53 68 6f 77 20 61 76 61 69 6c 61 62 6c 65 20   Show available 
34310 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
34320 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ions.*/.static c
34330 6f 6e 73 74 20 63 68 61 72 20 7a 4f 70 74 69 6f  onst char zOptio
34340 6e 73 5b 5d 20 3d 0a 20 20 22 20 20 20 2d 61 73  ns[] =.  "   -as
34350 63 69 69 20 20 20 20 20 20 20 20 20 20 20 20 20  cii             
34360 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64    set output mod
34370 65 20 74 6f 20 27 61 73 63 69 69 27 5c 6e 22 0a  e to 'ascii'\n".
34380 20 20 22 20 20 20 2d 62 61 69 6c 20 20 20 20 20    "   -bail     
34390 20 20 20 20 20 20 20 20 20 20 20 73 74 6f 70 20             stop 
343a0 61 66 74 65 72 20 68 69 74 74 69 6e 67 20 61 6e  after hitting an
343b0 20 65 72 72 6f 72 5c 6e 22 0a 20 20 22 20 20 20   error\n".  "   
343c0 2d 62 61 74 63 68 20 20 20 20 20 20 20 20 20 20  -batch          
343d0 20 20 20 20 20 66 6f 72 63 65 20 62 61 74 63 68       force batch
343e0 20 49 2f 4f 5c 6e 22 0a 20 20 22 20 20 20 2d 63   I/O\n".  "   -c
343f0 6f 6c 75 6d 6e 20 20 20 20 20 20 20 20 20 20 20  olumn           
34400 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f     set output mo
34410 64 65 20 74 6f 20 27 63 6f 6c 75 6d 6e 27 5c 6e  de to 'column'\n
34420 22 0a 20 20 22 20 20 20 2d 63 6d 64 20 43 4f 4d  ".  "   -cmd COM
34430 4d 41 4e 44 20 20 20 20 20 20 20 20 20 72 75 6e  MAND         run
34440 20 5c 22 43 4f 4d 4d 41 4e 44 5c 22 20 62 65 66   \"COMMAND\" bef
34450 6f 72 65 20 72 65 61 64 69 6e 67 20 73 74 64 69  ore reading stdi
34460 6e 5c 6e 22 0a 20 20 22 20 20 20 2d 63 73 76 20  n\n".  "   -csv 
34470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34480 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  set output mode 
34490 74 6f 20 27 63 73 76 27 5c 6e 22 0a 20 20 22 20  to 'csv'\n".  " 
344a0 20 20 2d 65 63 68 6f 20 20 20 20 20 20 20 20 20    -echo         
344b0 20 20 20 20 20 20 20 70 72 69 6e 74 20 63 6f 6d         print com
344c0 6d 61 6e 64 73 20 62 65 66 6f 72 65 20 65 78 65  mands before exe
344d0 63 75 74 69 6f 6e 5c 6e 22 0a 20 20 22 20 20 20  cution\n".  "   
344e0 2d 69 6e 69 74 20 46 49 4c 45 4e 41 4d 45 20 20  -init FILENAME  
344f0 20 20 20 20 20 72 65 61 64 2f 70 72 6f 63 65 73       read/proces
34500 73 20 6e 61 6d 65 64 20 66 69 6c 65 5c 6e 22 0a  s named file\n".
34510 20 20 22 20 20 20 2d 5b 6e 6f 5d 68 65 61 64 65    "   -[no]heade
34520 72 20 20 20 20 20 20 20 20 20 20 74 75 72 6e 20  r          turn 
34530 68 65 61 64 65 72 73 20 6f 6e 20 6f 72 20 6f 66  headers on or of
34540 66 5c 6e 22 0a 23 69 66 20 64 65 66 69 6e 65 64  f\n".#if defined
34550 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
34560 45 4d 53 59 53 33 29 20 7c 7c 20 64 65 66 69 6e  EMSYS3) || defin
34570 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
34580 5f 4d 45 4d 53 59 53 35 29 0a 20 20 22 20 20 20  _MEMSYS5).  "   
34590 2d 68 65 61 70 20 53 49 5a 45 20 20 20 20 20 20  -heap SIZE      
345a0 20 20 20 20 20 53 69 7a 65 20 6f 66 20 68 65 61       Size of hea
345b0 70 20 66 6f 72 20 6d 65 6d 73 79 73 33 20 6f 72  p for memsys3 or
345c0 20 6d 65 6d 73 79 73 35 5c 6e 22 0a 23 65 6e 64   memsys5\n".#end
345d0 69 66 0a 20 20 22 20 20 20 2d 68 65 6c 70 20 20  if.  "   -help  
345e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68                sh
345f0 6f 77 20 74 68 69 73 20 6d 65 73 73 61 67 65 5c  ow this message\
34600 6e 22 0a 20 20 22 20 20 20 2d 68 74 6d 6c 20 20  n".  "   -html  
34610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
34620 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f  t output mode to
34630 20 48 54 4d 4c 5c 6e 22 0a 20 20 22 20 20 20 2d   HTML\n".  "   -
34640 69 6e 74 65 72 61 63 74 69 76 65 20 20 20 20 20  interactive     
34650 20 20 20 20 66 6f 72 63 65 20 69 6e 74 65 72 61      force intera
34660 63 74 69 76 65 20 49 2f 4f 5c 6e 22 0a 20 20 22  ctive I/O\n".  "
34670 20 20 20 2d 6c 69 6e 65 20 20 20 20 20 20 20 20     -line        
34680 20 20 20 20 20 20 20 20 73 65 74 20 6f 75 74 70          set outp
34690 75 74 20 6d 6f 64 65 20 74 6f 20 27 6c 69 6e 65  ut mode to 'line
346a0 27 5c 6e 22 0a 20 20 22 20 20 20 2d 6c 69 73 74  '\n".  "   -list
346b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346c0 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  set output mode 
346d0 74 6f 20 27 6c 69 73 74 27 5c 6e 22 0a 20 20 22  to 'list'\n".  "
346e0 20 20 20 2d 6c 6f 6f 6b 61 73 69 64 65 20 53 49     -lookaside SI
346f0 5a 45 20 4e 20 20 20 20 75 73 65 20 4e 20 65 6e  ZE N    use N en
34700 74 72 69 65 73 20 6f 66 20 53 5a 20 62 79 74 65  tries of SZ byte
34710 73 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  s for lookaside 
34720 6d 65 6d 6f 72 79 5c 6e 22 0a 20 20 22 20 20 20  memory\n".  "   
34730 2d 6d 6d 61 70 20 4e 20 20 20 20 20 20 20 20 20  -mmap N         
34740 20 20 20 20 20 64 65 66 61 75 6c 74 20 6d 6d 61       default mma
34750 70 20 73 69 7a 65 20 73 65 74 20 74 6f 20 4e 5c  p size set to N\
34760 6e 22 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  n".#ifdef SQLITE
34770 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 50 4c 45  _ENABLE_MULTIPLE
34780 58 0a 20 20 22 20 20 20 2d 6d 75 6c 74 69 70 6c  X.  "   -multipl
34790 65 78 20 20 20 20 20 20 20 20 20 20 20 65 6e 61  ex           ena
347a0 62 6c 65 20 74 68 65 20 6d 75 6c 74 69 70 6c 65  ble the multiple
347b0 78 6f 72 20 56 46 53 5c 6e 22 0a 23 65 6e 64 69  xor VFS\n".#endi
347c0 66 0a 20 20 22 20 20 20 2d 6e 65 77 6c 69 6e 65  f.  "   -newline
347d0 20 53 45 50 20 20 20 20 20 20 20 20 20 73 65 74   SEP         set
347e0 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65 70 61   output row sepa
347f0 72 61 74 6f 72 2e 20 44 65 66 61 75 6c 74 3a 20  rator. Default: 
34800 27 5c 5c 6e 27 5c 6e 22 0a 20 20 22 20 20 20 2d  '\\n'\n".  "   -
34810 6e 75 6c 6c 76 61 6c 75 65 20 54 45 58 54 20 20  nullvalue TEXT  
34820 20 20 20 20 73 65 74 20 74 65 78 74 20 73 74 72      set text str
34830 69 6e 67 20 66 6f 72 20 4e 55 4c 4c 20 76 61 6c  ing for NULL val
34840 75 65 73 2e 20 44 65 66 61 75 6c 74 20 27 27 5c  ues. Default ''\
34850 6e 22 0a 20 20 22 20 20 20 2d 70 61 67 65 63 61  n".  "   -pageca
34860 63 68 65 20 53 49 5a 45 20 4e 20 20 20 20 75 73  che SIZE N    us
34870 65 20 4e 20 73 6c 6f 74 73 20 6f 66 20 53 5a 20  e N slots of SZ 
34880 62 79 74 65 73 20 65 61 63 68 20 66 6f 72 20 70  bytes each for p
34890 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79  age cache memory
348a0 5c 6e 22 0a 20 20 22 20 20 20 2d 71 75 6f 74 65  \n".  "   -quote
348b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
348c0 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74  et output mode t
348d0 6f 20 27 71 75 6f 74 65 27 5c 6e 22 0a 20 20 22  o 'quote'\n".  "
348e0 20 20 20 2d 73 65 70 61 72 61 74 6f 72 20 53 45     -separator SE
348f0 50 20 20 20 20 20 20 20 73 65 74 20 6f 75 74 70  P       set outp
34900 75 74 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61  ut column separa
34910 74 6f 72 2e 20 44 65 66 61 75 6c 74 3a 20 27 7c  tor. Default: '|
34920 27 5c 6e 22 0a 20 20 22 20 20 20 2d 73 74 61 74  '\n".  "   -stat
34930 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s               
34940 70 72 69 6e 74 20 6d 65 6d 6f 72 79 20 73 74 61  print memory sta
34950 74 73 20 62 65 66 6f 72 65 20 65 61 63 68 20 66  ts before each f
34960 69 6e 61 6c 69 7a 65 5c 6e 22 0a 20 20 22 20 20  inalize\n".  "  
34970 20 2d 76 65 72 73 69 6f 6e 20 20 20 20 20 20 20   -version       
34980 20 20 20 20 20 20 73 68 6f 77 20 53 51 4c 69 74        show SQLit
34990 65 20 76 65 72 73 69 6f 6e 5c 6e 22 0a 20 20 22  e version\n".  "
349a0 20 20 20 2d 76 66 73 20 4e 41 4d 45 20 20 20 20     -vfs NAME    
349b0 20 20 20 20 20 20 20 20 75 73 65 20 4e 41 4d 45          use NAME
349c0 20 61 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   as the default 
349d0 56 46 53 5c 6e 22 0a 23 69 66 64 65 66 20 53 51  VFS\n".#ifdef SQ
349e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53 54  LITE_ENABLE_VFST
349f0 52 41 43 45 0a 20 20 22 20 20 20 2d 76 66 73 74  RACE.  "   -vfst
34a00 72 61 63 65 20 20 20 20 20 20 20 20 20 20 20 20  race            
34a10 65 6e 61 62 6c 65 20 74 72 61 63 69 6e 67 20 6f  enable tracing o
34a20 66 20 61 6c 6c 20 56 46 53 20 63 61 6c 6c 73 5c  f all VFS calls\
34a30 6e 22 0a 23 65 6e 64 69 66 0a 3b 0a 73 74 61 74  n".#endif.;.stat
34a40 69 63 20 76 6f 69 64 20 75 73 61 67 65 28 69 6e  ic void usage(in
34a50 74 20 73 68 6f 77 44 65 74 61 69 6c 29 7b 0a 20  t showDetail){. 
34a60 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
34a70 65 72 72 2c 0a 20 20 20 20 20 20 22 55 73 61 67  err,.      "Usag
34a80 65 3a 20 25 73 20 5b 4f 50 54 49 4f 4e 53 5d 20  e: %s [OPTIONS] 
34a90 46 49 4c 45 4e 41 4d 45 20 5b 53 51 4c 5d 5c 6e  FILENAME [SQL]\n
34aa0 22 0a 20 20 20 20 20 20 22 46 49 4c 45 4e 41 4d  ".      "FILENAM
34ab0 45 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  E is the name of
34ac0 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62   an SQLite datab
34ad0 61 73 65 2e 20 41 20 6e 65 77 20 64 61 74 61 62  ase. A new datab
34ae0 61 73 65 20 69 73 20 63 72 65 61 74 65 64 5c 6e  ase is created\n
34af0 22 0a 20 20 20 20 20 20 22 69 66 20 74 68 65 20  ".      "if the 
34b00 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 70 72  file does not pr
34b10 65 76 69 6f 75 73 6c 79 20 65 78 69 73 74 2e 5c  eviously exist.\
34b20 6e 22 2c 20 41 72 67 76 30 29 3b 0a 20 20 69 66  n", Argv0);.  if
34b30 28 20 73 68 6f 77 44 65 74 61 69 6c 20 29 7b 0a  ( showDetail ){.
34b40 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
34b50 73 74 64 65 72 72 2c 20 22 4f 50 54 49 4f 4e 53  stderr, "OPTIONS
34b60 20 69 6e 63 6c 75 64 65 3a 5c 6e 25 73 22 2c 20   include:\n%s", 
34b70 7a 4f 70 74 69 6f 6e 73 29 3b 0a 20 20 7d 65 6c  zOptions);.  }el
34b80 73 65 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e  se{.    raw_prin
34b90 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 65 20  tf(stderr, "Use 
34ba0 74 68 65 20 2d 68 65 6c 70 20 6f 70 74 69 6f 6e  the -help option
34bb0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
34bc0 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29 3b  information\n");
34bd0 0a 20 20 7d 0a 20 20 65 78 69 74 28 31 29 3b 0a  .  }.  exit(1);.
34be0 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c  }../*.** Initial
34bf0 69 7a 65 20 74 68 65 20 73 74 61 74 65 20 69 6e  ize the state in
34c00 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 64 61 74  formation in dat
34c10 61 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  a.*/.static void
34c20 20 6d 61 69 6e 5f 69 6e 69 74 28 53 68 65 6c 6c   main_init(Shell
34c30 53 74 61 74 65 20 2a 64 61 74 61 29 20 7b 0a 20  State *data) {. 
34c40 20 6d 65 6d 73 65 74 28 64 61 74 61 2c 20 30 2c   memset(data, 0,
34c50 20 73 69 7a 65 6f 66 28 2a 64 61 74 61 29 29 3b   sizeof(*data));
34c60 0a 20 20 64 61 74 61 2d 3e 6e 6f 72 6d 61 6c 4d  .  data->normalM
34c70 6f 64 65 20 3d 20 64 61 74 61 2d 3e 63 4d 6f 64  ode = data->cMod
34c80 65 20 3d 20 64 61 74 61 2d 3e 6d 6f 64 65 20 3d  e = data->mode =
34c90 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 64 61   MODE_List;.  da
34ca0 74 61 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20  ta->autoExplain 
34cb0 3d 20 31 3b 0a 20 20 6d 65 6d 63 70 79 28 64 61  = 1;.  memcpy(da
34cc0 74 61 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72  ta->colSeparator
34cd0 2c 53 45 50 5f 43 6f 6c 75 6d 6e 2c 20 32 29 3b  ,SEP_Column, 2);
34ce0 0a 20 20 6d 65 6d 63 70 79 28 64 61 74 61 2d 3e  .  memcpy(data->
34cf0 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 53 45 50  rowSeparator,SEP
34d00 5f 52 6f 77 2c 20 32 29 3b 0a 20 20 64 61 74 61  _Row, 2);.  data
34d10 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30  ->showHeader = 0
34d20 3b 0a 20 20 64 61 74 61 2d 3e 73 68 65 6c 6c 46  ;.  data->shellF
34d30 6c 67 73 20 3d 20 53 48 46 4c 47 5f 4c 6f 6f 6b  lgs = SHFLG_Look
34d40 61 73 69 64 65 3b 0a 20 20 73 71 6c 69 74 65 33  aside;.  sqlite3
34d50 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43  _config(SQLITE_C
34d60 4f 4e 46 49 47 5f 55 52 49 2c 20 31 29 3b 0a 20  ONFIG_URI, 1);. 
34d70 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
34d80 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f  SQLITE_CONFIG_LO
34d90 47 2c 20 73 68 65 6c 6c 4c 6f 67 2c 20 64 61 74  G, shellLog, dat
34da0 61 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  a);.  sqlite3_co
34db0 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46  nfig(SQLITE_CONF
34dc0 49 47 5f 4d 55 4c 54 49 54 48 52 45 41 44 29 3b  IG_MULTITHREAD);
34dd0 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  .  sqlite3_snpri
34de0 6e 74 66 28 73 69 7a 65 6f 66 28 6d 61 69 6e 50  ntf(sizeof(mainP
34df0 72 6f 6d 70 74 29 2c 20 6d 61 69 6e 50 72 6f 6d  rompt), mainProm
34e00 70 74 2c 22 73 71 6c 69 74 65 3e 20 22 29 3b 0a  pt,"sqlite> ");.
34e10 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
34e20 74 66 28 73 69 7a 65 6f 66 28 63 6f 6e 74 69 6e  tf(sizeof(contin
34e30 75 65 50 72 6f 6d 70 74 29 2c 20 63 6f 6e 74 69  uePrompt), conti
34e40 6e 75 65 50 72 6f 6d 70 74 2c 22 20 20 20 2e 2e  nuePrompt,"   ..
34e50 2e 3e 20 22 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  .> ");.}../*.** 
34e60 4f 75 74 70 75 74 20 74 65 78 74 20 74 6f 20 74  Output text to t
34e70 68 65 20 63 6f 6e 73 6f 6c 65 20 69 6e 20 61 20  he console in a 
34e80 66 6f 6e 74 20 74 68 61 74 20 61 74 74 72 61 63  font that attrac
34e90 74 73 20 65 78 74 72 61 20 61 74 74 65 6e 74 69  ts extra attenti
34ea0 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 57  on..*/.#ifdef _W
34eb0 49 4e 33 32 0a 73 74 61 74 69 63 20 76 6f 69 64  IN32.static void
34ec0 20 70 72 69 6e 74 42 6f 6c 64 28 63 6f 6e 73 74   printBold(const
34ed0 20 63 68 61 72 20 2a 7a 54 65 78 74 29 7b 0a 20   char *zText){. 
34ee0 20 48 41 4e 44 4c 45 20 6f 75 74 20 3d 20 47 65   HANDLE out = Ge
34ef0 74 53 74 64 48 61 6e 64 6c 65 28 53 54 44 5f 4f  tStdHandle(STD_O
34f00 55 54 50 55 54 5f 48 41 4e 44 4c 45 29 3b 0a 20  UTPUT_HANDLE);. 
34f10 20 43 4f 4e 53 4f 4c 45 5f 53 43 52 45 45 4e 5f   CONSOLE_SCREEN_
34f20 42 55 46 46 45 52 5f 49 4e 46 4f 20 64 65 66 61  BUFFER_INFO defa
34f30 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 3b 0a 20  ultScreenInfo;. 
34f40 20 47 65 74 43 6f 6e 73 6f 6c 65 53 63 72 65 65   GetConsoleScree
34f50 6e 42 75 66 66 65 72 49 6e 66 6f 28 6f 75 74 2c  nBufferInfo(out,
34f60 20 26 64 65 66 61 75 6c 74 53 63 72 65 65 6e 49   &defaultScreenI
34f70 6e 66 6f 29 3b 0a 20 20 53 65 74 43 6f 6e 73 6f  nfo);.  SetConso
34f80 6c 65 54 65 78 74 41 74 74 72 69 62 75 74 65 28  leTextAttribute(
34f90 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20 46 4f  out,.         FO
34fa0 52 45 47 52 4f 55 4e 44 5f 52 45 44 7c 46 4f 52  REGROUND_RED|FOR
34fb0 45 47 52 4f 55 4e 44 5f 49 4e 54 45 4e 53 49 54  EGROUND_INTENSIT
34fc0 59 0a 20 20 29 3b 0a 20 20 70 72 69 6e 74 66 28  Y.  );.  printf(
34fd0 22 25 73 22 2c 20 7a 54 65 78 74 29 3b 0a 20 20  "%s", zText);.  
34fe0 53 65 74 43 6f 6e 73 6f 6c 65 54 65 78 74 41 74  SetConsoleTextAt
34ff0 74 72 69 62 75 74 65 28 6f 75 74 2c 20 64 65 66  tribute(out, def
35000 61 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 2e 77  aultScreenInfo.w
35010 41 74 74 72 69 62 75 74 65 73 29 3b 0a 7d 0a 23  Attributes);.}.#
35020 65 6c 73 65 0a 73 74 61 74 69 63 20 76 6f 69 64  else.static void
35030 20 70 72 69 6e 74 42 6f 6c 64 28 63 6f 6e 73 74   printBold(const
35040 20 63 68 61 72 20 2a 7a 54 65 78 74 29 7b 0a 20   char *zText){. 
35050 20 70 72 69 6e 74 66 28 22 5c 30 33 33 5b 31 6d   printf("\033[1m
35060 25 73 5c 30 33 33 5b 30 6d 22 2c 20 7a 54 65 78  %s\033[0m", zTex
35070 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  t);.}.#endif../*
35080 0a 2a 2a 20 47 65 74 20 74 68 65 20 61 72 67 75  .** Get the argu
35090 6d 65 6e 74 20 74 6f 20 61 6e 20 2d 2d 6f 70 74  ment to an --opt
350a0 69 6f 6e 2e 20 20 54 68 72 6f 77 20 61 6e 20 65  ion.  Throw an e
350b0 72 72 6f 72 20 61 6e 64 20 64 69 65 20 69 66 20  rror and die if 
350c0 6e 6f 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 69  no argument.** i
350d0 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a  s available..*/.
350e0 73 74 61 74 69 63 20 63 68 61 72 20 2a 63 6d 64  static char *cmd
350f0 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
35100 65 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  e(int argc, char
35110 20 2a 2a 61 72 67 76 2c 20 69 6e 74 20 69 29 7b   **argv, int i){
35120 0a 20 20 69 66 28 20 69 3d 3d 61 72 67 63 20 29  .  if( i==argc )
35130 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  {.    utf8_print
35140 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 20 45  f(stderr, "%s: E
35150 72 72 6f 72 3a 20 6d 69 73 73 69 6e 67 20 61 72  rror: missing ar
35160 67 75 6d 65 6e 74 20 74 6f 20 25 73 5c 6e 22 2c  gument to %s\n",
35170 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67  .            arg
35180 76 5b 30 5d 2c 20 61 72 67 76 5b 61 72 67 63 2d  v[0], argv[argc-
35190 31 5d 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29  1]);.    exit(1)
351a0 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 61  ;.  }.  return a
351b0 72 67 76 5b 69 5d 3b 0a 7d 0a 0a 23 69 66 6e 64  rgv[i];.}..#ifnd
351c0 65 66 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f  ef SQLITE_SHELL_
351d0 49 53 5f 55 54 46 38 0a 23 20 20 69 66 20 28 64  IS_UTF8.#  if (d
351e0 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c  efined(_WIN32) |
351f0 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29  | defined(WIN32)
35200 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 4d 53  ) && defined(_MS
35210 43 5f 56 45 52 29 0a 23 20 20 20 20 64 65 66 69  C_VER).#    defi
35220 6e 65 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f  ne SQLITE_SHELL_
35230 49 53 5f 55 54 46 38 20 20 20 20 20 20 20 20 20  IS_UTF8         
35240 20 28 30 29 0a 23 20 20 65 6c 73 65 0a 23 20 20   (0).#  else.#  
35250 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
35260 53 48 45 4c 4c 5f 49 53 5f 55 54 46 38 20 20 20  SHELL_IS_UTF8   
35270 20 20 20 20 20 20 20 28 31 29 0a 23 20 20 65 6e         (1).#  en
35280 64 69 66 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  dif.#endif..#if 
35290 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f  SQLITE_SHELL_IS_
352a0 55 54 46 38 0a 69 6e 74 20 53 51 4c 49 54 45 5f  UTF8.int SQLITE_
352b0 43 44 45 43 4c 20 6d 61 69 6e 28 69 6e 74 20 61  CDECL main(int a
352c0 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76  rgc, char **argv
352d0 29 7b 0a 23 65 6c 73 65 0a 69 6e 74 20 53 51 4c  ){.#else.int SQL
352e0 49 54 45 5f 43 44 45 43 4c 20 77 6d 61 69 6e 28  ITE_CDECL wmain(
352f0 69 6e 74 20 61 72 67 63 2c 20 77 63 68 61 72 5f  int argc, wchar_
35300 74 20 2a 2a 77 61 72 67 76 29 7b 0a 20 20 63 68  t **wargv){.  ch
35310 61 72 20 2a 2a 61 72 67 76 3b 0a 23 65 6e 64 69  ar **argv;.#endi
35320 66 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  f.  char *zErrMs
35330 67 20 3d 20 30 3b 0a 20 20 53 68 65 6c 6c 53 74  g = 0;.  ShellSt
35340 61 74 65 20 64 61 74 61 3b 0a 20 20 63 6f 6e 73  ate data;.  cons
35350 74 20 63 68 61 72 20 2a 7a 49 6e 69 74 46 69 6c  t char *zInitFil
35360 65 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b 0a  e = 0;.  int i;.
35370 20 20 69 6e 74 20 72 63 20 3d 20 30 3b 0a 20 20    int rc = 0;.  
35380 69 6e 74 20 77 61 72 6e 49 6e 6d 65 6d 6f 72 79  int warnInmemory
35390 44 62 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 65  Db = 0;.  int re
353a0 61 64 53 74 64 69 6e 20 3d 20 31 3b 0a 20 20 69  adStdin = 1;.  i
353b0 6e 74 20 6e 43 6d 64 20 3d 20 30 3b 0a 20 20 63  nt nCmd = 0;.  c
353c0 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20 30 3b  har **azCmd = 0;
353d0 0a 0a 20 20 73 65 74 42 69 6e 61 72 79 4d 6f 64  ..  setBinaryMod
353e0 65 28 73 74 64 69 6e 2c 20 30 29 3b 0a 20 20 73  e(stdin, 0);.  s
353f0 65 74 76 62 75 66 28 73 74 64 65 72 72 2c 20 30  etvbuf(stderr, 0
35400 2c 20 5f 49 4f 4e 42 46 2c 20 30 29 3b 20 2f 2a  , _IONBF, 0); /*
35410 20 4d 61 6b 65 20 73 75 72 65 20 73 74 64 65 72   Make sure stder
35420 72 20 69 73 20 75 6e 62 75 66 66 65 72 65 64 20  r is unbuffered 
35430 2a 2f 0a 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e  */.  stdin_is_in
35440 74 65 72 61 63 74 69 76 65 20 3d 20 69 73 61 74  teractive = isat
35450 74 79 28 30 29 3b 0a 20 20 73 74 64 6f 75 74 5f  ty(0);.  stdout_
35460 69 73 5f 63 6f 6e 73 6f 6c 65 20 3d 20 69 73 61  is_console = isa
35470 74 74 79 28 31 29 3b 0a 0a 23 69 66 20 55 53 45  tty(1);..#if USE
35480 5f 53 59 53 54 45 4d 5f 53 51 4c 49 54 45 2b 30  _SYSTEM_SQLITE+0
35490 21 3d 31 0a 20 20 69 66 28 20 73 74 72 6e 63 6d  !=1.  if( strncm
354a0 70 28 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65  p(sqlite3_source
354b0 69 64 28 29 2c 53 51 4c 49 54 45 5f 53 4f 55 52  id(),SQLITE_SOUR
354c0 43 45 5f 49 44 2c 36 30 29 21 3d 30 20 29 7b 0a  CE_ID,60)!=0 ){.
354d0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
354e0 73 74 64 65 72 72 2c 20 22 53 51 4c 69 74 65 20  stderr, "SQLite 
354f0 68 65 61 64 65 72 20 61 6e 64 20 73 6f 75 72 63  header and sourc
35500 65 20 76 65 72 73 69 6f 6e 20 6d 69 73 6d 61 74  e version mismat
35510 63 68 5c 6e 25 73 5c 6e 25 73 5c 6e 22 2c 0a 20  ch\n%s\n%s\n",. 
35520 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
35530 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 53  e3_sourceid(), S
35540 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49 44 29  QLITE_SOURCE_ID)
35550 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20  ;.    exit(1);. 
35560 20 7d 0a 23 65 6e 64 69 66 0a 20 20 6d 61 69 6e   }.#endif.  main
35570 5f 69 6e 69 74 28 26 64 61 74 61 29 3b 0a 23 69  _init(&data);.#i
35580 66 20 21 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f  f !SQLITE_SHELL_
35590 49 53 5f 55 54 46 38 0a 20 20 73 71 6c 69 74 65  IS_UTF8.  sqlite
355a0 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a  3_initialize();.
355b0 20 20 61 72 67 76 20 3d 20 73 71 6c 69 74 65 33    argv = sqlite3
355c0 5f 6d 61 6c 6c 6f 63 36 34 28 73 69 7a 65 6f 66  _malloc64(sizeof
355d0 28 61 72 67 76 5b 30 5d 29 2a 61 72 67 63 29 3b  (argv[0])*argc);
355e0 0a 20 20 69 66 28 20 61 72 67 76 3d 3d 30 20 29  .  if( argv==0 )
355f0 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
35600 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f 66  (stderr, "out of
35610 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20   memory\n");.   
35620 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20   exit(1);.  }.  
35630 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b  for(i=0; i<argc;
35640 20 69 2b 2b 29 7b 0a 20 20 20 20 61 72 67 76 5b   i++){.    argv[
35650 69 5d 20 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e  i] = sqlite3_win
35660 33 32 5f 75 6e 69 63 6f 64 65 5f 74 6f 5f 75 74  32_unicode_to_ut
35670 66 38 28 77 61 72 67 76 5b 69 5d 29 3b 0a 20 20  f8(wargv[i]);.  
35680 20 20 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d 30    if( argv[i]==0
35690 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
356a0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f 75  intf(stderr, "ou
356b0 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b  t of memory\n");
356c0 0a 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a  .      exit(1);.
356d0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
356e0 0a 20 20 61 73 73 65 72 74 28 20 61 72 67 63 3e  .  assert( argc>
356f0 3d 31 20 26 26 20 61 72 67 76 20 26 26 20 61 72  =1 && argv && ar
35700 67 76 5b 30 5d 20 29 3b 0a 20 20 41 72 67 76 30  gv[0] );.  Argv0
35710 20 3d 20 61 72 67 76 5b 30 5d 3b 0a 0a 20 20 2f   = argv[0];..  /
35720 2a 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20 68  * Make sure we h
35730 61 76 65 20 61 20 76 61 6c 69 64 20 73 69 67 6e  ave a valid sign
35740 61 6c 20 68 61 6e 64 6c 65 72 20 65 61 72 6c 79  al handler early
35750 2c 20 62 65 66 6f 72 65 20 61 6e 79 74 68 69 6e  , before anythin
35760 67 0a 20 20 2a 2a 20 65 6c 73 65 20 69 73 20 64  g.  ** else is d
35770 6f 6e 65 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  one..  */.#ifdef
35780 20 53 49 47 49 4e 54 0a 20 20 73 69 67 6e 61 6c   SIGINT.  signal
35790 28 53 49 47 49 4e 54 2c 20 69 6e 74 65 72 72 75  (SIGINT, interru
357a0 70 74 5f 68 61 6e 64 6c 65 72 29 3b 0a 23 65 6c  pt_handler);.#el
357b0 69 66 20 28 64 65 66 69 6e 65 64 28 5f 57 49 4e  if (defined(_WIN
357c0 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57  32) || defined(W
357d0 49 4e 33 32 29 29 20 26 26 20 21 64 65 66 69 6e  IN32)) && !defin
357e0 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 20  ed(_WIN32_WCE). 
357f0 20 53 65 74 43 6f 6e 73 6f 6c 65 43 74 72 6c 48   SetConsoleCtrlH
35800 61 6e 64 6c 65 72 28 43 6f 6e 73 6f 6c 65 43 74  andler(ConsoleCt
35810 72 6c 48 61 6e 64 6c 65 72 2c 20 54 52 55 45 29  rlHandler, TRUE)
35820 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
35830 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 44 42   SQLITE_SHELL_DB
35840 4e 41 4d 45 5f 50 52 4f 43 0a 20 20 7b 0a 20 20  NAME_PROC.  {.  
35850 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49    /* If the SQLI
35860 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45 5f  TE_SHELL_DBNAME_
35870 50 52 4f 43 20 6d 61 63 72 6f 20 69 73 20 64 65  PROC macro is de
35880 66 69 6e 65 64 2c 20 74 68 65 6e 20 69 74 20 69  fined, then it i
35890 73 20 74 68 65 20 6e 61 6d 65 0a 20 20 20 20 2a  s the name.    *
358a0 2a 20 6f 66 20 61 20 43 2d 66 75 6e 63 74 69 6f  * of a C-functio
358b0 6e 20 74 68 61 74 20 77 69 6c 6c 20 70 72 6f 76  n that will prov
358c0 69 64 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ide the name of 
358d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
358e0 65 2e 20 20 55 73 65 0a 20 20 20 20 2a 2a 20 74  e.  Use.    ** t
358f0 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
35900 20 6f 70 74 69 6f 6e 20 74 6f 20 65 6d 62 65 64   option to embed
35910 20 74 68 69 73 20 73 68 65 6c 6c 20 70 72 6f 67   this shell prog
35920 72 61 6d 20 69 6e 20 6c 61 72 67 65 72 0a 20 20  ram in larger.  
35930 20 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e    ** application
35940 73 2e 20 2a 2f 0a 20 20 20 20 65 78 74 65 72 6e  s. */.    extern
35950 20 76 6f 69 64 20 53 51 4c 49 54 45 5f 53 48 45   void SQLITE_SHE
35960 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52 4f 43 28 63  LL_DBNAME_PROC(c
35970 6f 6e 73 74 20 63 68 61 72 2a 2a 29 3b 0a 20 20  onst char**);.  
35980 20 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 44    SQLITE_SHELL_D
35990 42 4e 41 4d 45 5f 50 52 4f 43 28 26 64 61 74 61  BNAME_PROC(&data
359a0 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 29 3b 0a 20  .zDbFilename);. 
359b0 20 20 20 77 61 72 6e 49 6e 6d 65 6d 6f 72 79 44     warnInmemoryD
359c0 62 20 3d 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69  b = 0;.  }.#endi
359d0 66 0a 0a 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e  f..  /* Do an in
359e0 69 74 69 61 6c 20 70 61 73 73 20 74 68 72 6f 75  itial pass throu
359f0 67 68 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  gh the command-l
35a00 69 6e 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ine argument to 
35a10 6c 6f 63 61 74 65 0a 20 20 2a 2a 20 74 68 65 20  locate.  ** the 
35a20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
35a30 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20 6e  base file, the n
35a40 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 69 74 69  ame of the initi
35a50 61 6c 69 7a 61 74 69 6f 6e 20 66 69 6c 65 2c 0a  alization file,.
35a60 20 20 2a 2a 20 74 68 65 20 73 69 7a 65 20 6f 66    ** the size of
35a70 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76 65   the alternative
35a80 20 6d 61 6c 6c 6f 63 20 68 65 61 70 2c 0a 20 20   malloc heap,.  
35a90 2a 2a 20 61 6e 64 20 74 68 65 20 66 69 72 73 74  ** and the first
35aa0 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 78 65 63   command to exec
35ab0 75 74 65 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28  ute..  */.  for(
35ac0 69 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b  i=1; i<argc; i++
35ad0 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 3b 0a  ){.    char *z;.
35ae0 20 20 20 20 7a 20 3d 20 61 72 67 76 5b 69 5d 3b      z = argv[i];
35af0 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 21 3d 27  .    if( z[0]!='
35b00 2d 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  -' ){.      if( 
35b10 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65  data.zDbFilename
35b20 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 64  ==0 ){.        d
35b30 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 20  ata.zDbFilename 
35b40 3d 20 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = z;.      }else
35b50 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 45 78 63  {.        /* Exc
35b60 65 73 73 73 20 61 72 67 75 6d 65 6e 74 73 20 61  esss arguments a
35b70 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  re interpreted a
35b80 73 20 53 51 4c 20 28 6f 72 20 64 6f 74 2d 63 6f  s SQL (or dot-co
35b90 6d 6d 61 6e 64 73 29 20 61 6e 64 0a 20 20 20 20  mmands) and.    
35ba0 20 20 20 20 2a 2a 20 6d 65 61 6e 20 74 68 61 74      ** mean that
35bb0 20 6e 6f 74 68 69 6e 67 20 69 73 20 72 65 61 64   nothing is read
35bc0 20 66 72 6f 6d 20 73 74 64 69 6e 20 2a 2f 0a 20   from stdin */. 
35bd0 20 20 20 20 20 20 20 72 65 61 64 53 74 64 69 6e         readStdin
35be0 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6e 43   = 0;.        nC
35bf0 6d 64 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61 7a  md++;.        az
35c00 43 6d 64 20 3d 20 72 65 61 6c 6c 6f 63 28 61 7a  Cmd = realloc(az
35c10 43 6d 64 2c 20 73 69 7a 65 6f 66 28 61 7a 43 6d  Cmd, sizeof(azCm
35c20 64 5b 30 5d 29 2a 6e 43 6d 64 29 3b 0a 20 20 20  d[0])*nCmd);.   
35c30 20 20 20 20 20 69 66 28 20 61 7a 43 6d 64 3d 3d       if( azCmd==
35c40 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  0 ){.          r
35c50 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
35c60 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
35c70 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
35c80 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20 20  exit(1);.       
35c90 20 7d 0a 20 20 20 20 20 20 20 20 61 7a 43 6d 64   }.        azCmd
35ca0 5b 6e 43 6d 64 2d 31 5d 20 3d 20 7a 3b 0a 20 20  [nCmd-1] = z;.  
35cb0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
35cc0 69 66 28 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29 20  if( z[1]=='-' ) 
35cd0 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20 73 74 72  z++;.    if( str
35ce0 63 6d 70 28 7a 2c 22 2d 73 65 70 61 72 61 74 6f  cmp(z,"-separato
35cf0 72 22 29 3d 3d 30 0a 20 20 20 20 20 7c 7c 20 73  r")==0.     || s
35d00 74 72 63 6d 70 28 7a 2c 22 2d 6e 75 6c 6c 76 61  trcmp(z,"-nullva
35d10 6c 75 65 22 29 3d 3d 30 0a 20 20 20 20 20 7c 7c  lue")==0.     ||
35d20 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 65 77 6c   strcmp(z,"-newl
35d30 69 6e 65 22 29 3d 3d 30 0a 20 20 20 20 20 7c 7c  ine")==0.     ||
35d40 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 6d 64 22   strcmp(z,"-cmd"
35d50 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
35d60 20 20 28 76 6f 69 64 29 63 6d 64 6c 69 6e 65 5f    (void)cmdline_
35d70 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67  option_value(arg
35d80 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b 0a 20  c, argv, ++i);. 
35d90 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
35da0 63 6d 70 28 7a 2c 22 2d 69 6e 69 74 22 29 3d 3d  cmp(z,"-init")==
35db0 30 20 29 7b 0a 20 20 20 20 20 20 7a 49 6e 69 74  0 ){.      zInit
35dc0 46 69 6c 65 20 3d 20 63 6d 64 6c 69 6e 65 5f 6f  File = cmdline_o
35dd0 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63  ption_value(argc
35de0 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b 0a 20 20  , argv, ++i);.  
35df0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
35e00 6d 70 28 7a 2c 22 2d 62 61 74 63 68 22 29 3d 3d  mp(z,"-batch")==
35e10 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4e 65  0 ){.      /* Ne
35e20 65 64 20 74 6f 20 63 68 65 63 6b 20 66 6f 72 20  ed to check for 
35e30 62 61 74 63 68 20 6d 6f 64 65 20 68 65 72 65 20  batch mode here 
35e40 74 6f 20 73 6f 20 77 65 20 63 61 6e 20 61 76 6f  to so we can avo
35e50 69 64 20 70 72 69 6e 74 69 6e 67 0a 20 20 20 20  id printing.    
35e60 20 20 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e    ** information
35e70 61 6c 20 6d 65 73 73 61 67 65 73 20 28 6c 69 6b  al messages (lik
35e80 65 20 66 72 6f 6d 20 70 72 6f 63 65 73 73 5f 73  e from process_s
35e90 71 6c 69 74 65 72 63 29 20 62 65 66 6f 72 65 0a  qliterc) before.
35ea0 20 20 20 20 20 20 2a 2a 20 77 65 20 64 6f 20 74        ** we do t
35eb0 68 65 20 61 63 74 75 61 6c 20 70 72 6f 63 65 73  he actual proces
35ec0 73 69 6e 67 20 6f 66 20 61 72 67 75 6d 65 6e 74  sing of argument
35ed0 73 20 6c 61 74 65 72 20 69 6e 20 61 20 73 65 63  s later in a sec
35ee0 6f 6e 64 20 70 61 73 73 2e 0a 20 20 20 20 20 20  ond pass..      
35ef0 2a 2f 0a 20 20 20 20 20 20 73 74 64 69 6e 5f 69  */.      stdin_i
35f00 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 3d 20  s_interactive = 
35f10 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
35f20 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68 65 61 70   strcmp(z,"-heap
35f30 22 29 3d 3d 30 20 29 7b 0a 23 69 66 20 64 65 66  ")==0 ){.#if def
35f40 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
35f50 4c 45 5f 4d 45 4d 53 59 53 33 29 20 7c 7c 20 64  LE_MEMSYS3) || d
35f60 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
35f70 41 42 4c 45 5f 4d 45 4d 53 59 53 35 29 0a 20 20  ABLE_MEMSYS5).  
35f80 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
35f90 7a 53 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c  zSize;.      sql
35fa0 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 48 65 61  ite3_int64 szHea
35fb0 70 3b 0a 0a 20 20 20 20 20 20 7a 53 69 7a 65 20  p;..      zSize 
35fc0 3d 20 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e  = cmdline_option
35fd0 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72 67  _value(argc, arg
35fe0 76 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 20 20 73  v, ++i);.      s
35ff0 7a 48 65 61 70 20 3d 20 69 6e 74 65 67 65 72 56  zHeap = integerV
36000 61 6c 75 65 28 7a 53 69 7a 65 29 3b 0a 20 20 20  alue(zSize);.   
36010 20 20 20 69 66 28 20 73 7a 48 65 61 70 3e 30 78     if( szHeap>0x
36020 37 66 66 66 30 30 30 30 20 29 20 73 7a 48 65 61  7fff0000 ) szHea
36030 70 20 3d 20 30 78 37 66 66 66 30 30 30 30 3b 0a  p = 0x7fff0000;.
36040 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f        sqlite3_co
36050 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46  nfig(SQLITE_CONF
36060 49 47 5f 48 45 41 50 2c 20 6d 61 6c 6c 6f 63 28  IG_HEAP, malloc(
36070 28 69 6e 74 29 73 7a 48 65 61 70 29 2c 20 28 69  (int)szHeap), (i
36080 6e 74 29 73 7a 48 65 61 70 2c 20 36 34 29 3b 0a  nt)szHeap, 64);.
36090 23 65 6c 73 65 0a 20 20 20 20 20 20 28 76 6f 69  #else.      (voi
360a0 64 29 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e  d)cmdline_option
360b0 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72 67  _value(argc, arg
360c0 76 2c 20 2b 2b 69 29 3b 0a 23 65 6e 64 69 66 0a  v, ++i);.#endif.
360d0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
360e0 72 63 6d 70 28 7a 2c 22 2d 70 61 67 65 63 61 63  rcmp(z,"-pagecac
360f0 68 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  he")==0 ){.     
36100 20 69 6e 74 20 6e 2c 20 73 7a 3b 0a 20 20 20 20   int n, sz;.    
36110 20 20 73 7a 20 3d 20 28 69 6e 74 29 69 6e 74 65    sz = (int)inte
36120 67 65 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e 65  gerValue(cmdline
36130 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
36140 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20  gc,argv,++i));. 
36150 20 20 20 20 20 69 66 28 20 73 7a 3e 37 30 30 30       if( sz>7000
36160 30 20 29 20 73 7a 20 3d 20 37 30 30 30 30 3b 0a  0 ) sz = 70000;.
36170 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20 29        if( sz<0 )
36180 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20 6e   sz = 0;.      n
36190 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56   = (int)integerV
361a0 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74  alue(cmdline_opt
361b0 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
361c0 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20  rgv,++i));.     
361d0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
361e0 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50 41  SQLITE_CONFIG_PA
361f0 47 45 43 41 43 48 45 2c 0a 20 20 20 20 20 20 20  GECACHE,.       
36200 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 3e               (n>
36210 30 20 26 26 20 73 7a 3e 30 29 20 3f 20 6d 61 6c  0 && sz>0) ? mal
36220 6c 6f 63 28 6e 2a 73 7a 29 20 3a 20 30 2c 20 73  loc(n*sz) : 0, s
36230 7a 2c 20 6e 29 3b 0a 20 20 20 20 20 20 64 61 74  z, n);.      dat
36240 61 2e 73 68 65 6c 6c 46 6c 67 73 20 7c 3d 20 53  a.shellFlgs |= S
36250 48 46 4c 47 5f 50 61 67 65 63 61 63 68 65 3b 0a  HFLG_Pagecache;.
36260 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
36270 72 63 6d 70 28 7a 2c 22 2d 6c 6f 6f 6b 61 73 69  rcmp(z,"-lookasi
36280 64 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  de")==0 ){.     
36290 20 69 6e 74 20 6e 2c 20 73 7a 3b 0a 20 20 20 20   int n, sz;.    
362a0 20 20 73 7a 20 3d 20 28 69 6e 74 29 69 6e 74 65    sz = (int)inte
362b0 67 65 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e 65  gerValue(cmdline
362c0 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
362d0 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20  gc,argv,++i));. 
362e0 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20 29 20       if( sz<0 ) 
362f0 73 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20 6e 20  sz = 0;.      n 
36300 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61  = (int)integerVa
36310 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  lue(cmdline_opti
36320 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72  on_value(argc,ar
36330 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20  gv,++i));.      
36340 69 66 28 20 6e 3c 30 20 29 20 6e 20 3d 20 30 3b  if( n<0 ) n = 0;
36350 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63  .      sqlite3_c
36360 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
36370 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 73  FIG_LOOKASIDE, s
36380 7a 2c 20 6e 29 3b 0a 20 20 20 20 20 20 69 66 28  z, n);.      if(
36390 20 73 7a 2a 6e 3d 3d 30 20 29 20 64 61 74 61 2e   sz*n==0 ) data.
363a0 73 68 65 6c 6c 46 6c 67 73 20 26 3d 20 7e 53 48  shellFlgs &= ~SH
363b0 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64 65 3b 0a 23  FLG_Lookaside;.#
363c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
363d0 42 4c 45 5f 56 46 53 54 52 41 43 45 0a 20 20 20  BLE_VFSTRACE.   
363e0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
363f0 70 28 7a 2c 22 2d 76 66 73 74 72 61 63 65 22 29  p(z,"-vfstrace")
36400 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 65 78 74  ==0 ){.      ext
36410 65 72 6e 20 69 6e 74 20 76 66 73 74 72 61 63 65  ern int vfstrace
36420 5f 72 65 67 69 73 74 65 72 28 0a 20 20 20 20 20  _register(.     
36430 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
36440 7a 54 72 61 63 65 4e 61 6d 65 2c 0a 20 20 20 20  zTraceName,.    
36450 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
36460 2a 7a 4f 6c 64 56 66 73 4e 61 6d 65 2c 0a 20 20  *zOldVfsName,.  
36470 20 20 20 20 20 20 20 69 6e 74 20 28 2a 78 4f 75         int (*xOu
36480 74 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 76  t)(const char*,v
36490 6f 69 64 2a 29 2c 0a 20 20 20 20 20 20 20 20 20  oid*),.         
364a0 76 6f 69 64 20 2a 70 4f 75 74 41 72 67 2c 0a 20  void *pOutArg,. 
364b0 20 20 20 20 20 20 20 20 69 6e 74 20 6d 61 6b 65          int make
364c0 44 65 66 61 75 6c 74 0a 20 20 20 20 20 20 29 3b  Default.      );
364d0 0a 20 20 20 20 20 20 76 66 73 74 72 61 63 65 5f  .      vfstrace_
364e0 72 65 67 69 73 74 65 72 28 22 74 72 61 63 65 22  register("trace"
364f0 2c 30 2c 28 69 6e 74 28 2a 29 28 63 6f 6e 73 74  ,0,(int(*)(const
36500 20 63 68 61 72 2a 2c 76 6f 69 64 2a 29 29 66 70   char*,void*))fp
36510 75 74 73 2c 73 74 64 65 72 72 2c 31 29 3b 0a 23  uts,stderr,1);.#
36520 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
36530 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49  ITE_ENABLE_MULTI
36540 50 4c 45 58 0a 20 20 20 20 7d 65 6c 73 65 20 69  PLEX.    }else i
36550 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d 75  f( strcmp(z,"-mu
36560 6c 74 69 70 6c 65 78 22 29 3d 3d 30 20 29 7b 0a  ltiplex")==0 ){.
36570 20 20 20 20 20 20 65 78 74 65 72 6e 20 69 6e 74        extern int
36580 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c   sqlite3_multipl
36590 65 5f 69 6e 69 74 69 61 6c 69 7a 65 28 63 6f 6e  e_initialize(con
365a0 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 20  st char*,int);. 
365b0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 6c       sqlite3_mul
365c0 74 69 70 6c 65 78 5f 69 6e 69 74 69 61 6c 69 7a  tiplex_initializ
365d0 65 28 30 2c 20 31 29 3b 0a 23 65 6e 64 69 66 0a  e(0, 1);.#endif.
365e0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
365f0 72 63 6d 70 28 7a 2c 22 2d 6d 6d 61 70 22 29 3d  rcmp(z,"-mmap")=
36600 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
36610 74 65 33 5f 69 6e 74 36 34 20 73 7a 20 3d 20 69  te3_int64 sz = i
36620 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64 6c  ntegerValue(cmdl
36630 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65  ine_option_value
36640 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29  (argc,argv,++i))
36650 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
36660 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f  config(SQLITE_CO
36670 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20  NFIG_MMAP_SIZE, 
36680 73 7a 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65 6c  sz, sz);.    }el
36690 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
366a0 22 2d 76 66 73 22 29 3d 3d 30 20 29 7b 0a 20 20  "-vfs")==0 ){.  
366b0 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20      sqlite3_vfs 
366c0 2a 70 56 66 73 20 3d 20 73 71 6c 69 74 65 33 5f  *pVfs = sqlite3_
366d0 76 66 73 5f 66 69 6e 64 28 63 6d 64 6c 69 6e 65  vfs_find(cmdline
366e0 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
366f0 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20  gc,argv,++i));. 
36700 20 20 20 20 20 69 66 28 20 70 56 66 73 20 29 7b       if( pVfs ){
36710 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
36720 5f 76 66 73 5f 72 65 67 69 73 74 65 72 28 70 56  _vfs_register(pV
36730 66 73 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 65  fs, 1);.      }e
36740 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 74 66  lse{.        utf
36750 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
36760 20 22 6e 6f 20 73 75 63 68 20 56 46 53 3a 20 5c   "no such VFS: \
36770 22 25 73 5c 22 5c 6e 22 2c 20 61 72 67 76 5b 69  "%s\"\n", argv[i
36780 5d 29 3b 0a 20 20 20 20 20 20 20 20 65 78 69 74  ]);.        exit
36790 28 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  (1);.      }.   
367a0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 64 61 74   }.  }.  if( dat
367b0 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 3d 3d 30  a.zDbFilename==0
367c0 20 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   ){.#ifndef SQLI
367d0 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42  TE_OMIT_MEMORYDB
367e0 0a 20 20 20 20 64 61 74 61 2e 7a 44 62 46 69 6c  .    data.zDbFil
367f0 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79  ename = ":memory
36800 3a 22 3b 0a 20 20 20 20 77 61 72 6e 49 6e 6d 65  :";.    warnInme
36810 6d 6f 72 79 44 62 20 3d 20 61 72 67 63 3d 3d 31  moryDb = argc==1
36820 3b 0a 23 65 6c 73 65 0a 20 20 20 20 75 74 66 38  ;.#else.    utf8
36830 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
36840 25 73 3a 20 45 72 72 6f 72 3a 20 6e 6f 20 64 61  %s: Error: no da
36850 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65 20  tabase filename 
36860 73 70 65 63 69 66 69 65 64 5c 6e 22 2c 20 41 72  specified\n", Ar
36870 67 76 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  gv0);.    return
36880 20 31 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20   1;.#endif.  }. 
36890 20 64 61 74 61 2e 6f 75 74 20 3d 20 73 74 64 6f   data.out = stdo
368a0 75 74 3b 0a 0a 20 20 2f 2a 20 47 6f 20 61 68 65  ut;..  /* Go ahe
368b0 61 64 20 61 6e 64 20 6f 70 65 6e 20 74 68 65 20  ad and open the 
368c0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
368d0 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73   it already exis
368e0 74 73 2e 20 20 49 66 20 74 68 65 0a 20 20 2a 2a  ts.  If the.  **
368f0 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65   file does not e
36900 78 69 73 74 2c 20 64 65 6c 61 79 20 6f 70 65 6e  xist, delay open
36910 69 6e 67 20 69 74 2e 20 20 54 68 69 73 20 70 72  ing it.  This pr
36920 65 76 65 6e 74 73 20 65 6d 70 74 79 20 64 61 74  events empty dat
36930 61 62 61 73 65 0a 20 20 2a 2a 20 66 69 6c 65 73  abase.  ** files
36940 20 66 72 6f 6d 20 62 65 69 6e 67 20 63 72 65 61   from being crea
36950 74 65 64 20 69 66 20 61 20 75 73 65 72 20 6d 69  ted if a user mi
36960 73 74 79 70 65 73 20 74 68 65 20 64 61 74 61 62  stypes the datab
36970 61 73 65 20 6e 61 6d 65 20 61 72 67 75 6d 65 6e  ase name argumen
36980 74 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 73 71  t.  ** to the sq
36990 6c 69 74 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e  lite command-lin
369a0 65 20 74 6f 6f 6c 2e 0a 20 20 2a 2f 0a 20 20 69  e tool..  */.  i
369b0 66 28 20 61 63 63 65 73 73 28 64 61 74 61 2e 7a  f( access(data.z
369c0 44 62 46 69 6c 65 6e 61 6d 65 2c 20 30 29 3d 3d  DbFilename, 0)==
369d0 30 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62  0 ){.    open_db
369e0 28 26 64 61 74 61 2c 20 30 29 3b 0a 20 20 7d 0a  (&data, 0);.  }.
369f0 0a 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 74 68  .  /* Process th
36a00 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
36a10 20 66 69 6c 65 20 69 66 20 74 68 65 72 65 20 69   file if there i
36a20 73 20 6f 6e 65 2e 20 20 49 66 20 6e 6f 20 2d 69  s one.  If no -i
36a30 6e 69 74 20 6f 70 74 69 6f 6e 0a 20 20 2a 2a 20  nit option.  ** 
36a40 69 73 20 67 69 76 65 6e 20 6f 6e 20 74 68 65 20  is given on the 
36a50 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 6c 6f  command line, lo
36a60 6f 6b 20 66 6f 72 20 61 20 66 69 6c 65 20 6e 61  ok for a file na
36a70 6d 65 64 20 7e 2f 2e 73 71 6c 69 74 65 72 63 20  med ~/.sqliterc 
36a80 61 6e 64 0a 20 20 2a 2a 20 74 72 79 20 74 6f 20  and.  ** try to 
36a90 70 72 6f 63 65 73 73 20 69 74 2e 0a 20 20 2a 2f  process it..  */
36aa0 0a 20 20 70 72 6f 63 65 73 73 5f 73 71 6c 69 74  .  process_sqlit
36ab0 65 72 63 28 26 64 61 74 61 2c 7a 49 6e 69 74 46  erc(&data,zInitF
36ac0 69 6c 65 29 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ile);..  /* Make
36ad0 20 61 20 73 65 63 6f 6e 64 20 70 61 73 73 20 74   a second pass t
36ae0 68 72 6f 75 67 68 20 74 68 65 20 63 6f 6d 6d 61  hrough the comma
36af0 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd-line argument
36b00 20 61 6e 64 20 73 65 74 0a 20 20 2a 2a 20 6f 70   and set.  ** op
36b10 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 73 65 63  tions.  This sec
36b20 6f 6e 64 20 70 61 73 73 20 69 73 20 64 65 6c 61  ond pass is dela
36b30 79 65 64 20 75 6e 74 69 6c 20 61 66 74 65 72 20  yed until after 
36b40 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
36b50 6f 6e 0a 20 20 2a 2a 20 66 69 6c 65 20 69 73 20  on.  ** file is 
36b60 70 72 6f 63 65 73 73 65 64 20 73 6f 20 74 68 61  processed so tha
36b70 74 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  t the command-li
36b80 6e 65 20 61 72 67 75 6d 65 6e 74 73 20 77 69 6c  ne arguments wil
36b90 6c 20 6f 76 65 72 72 69 64 65 0a 20 20 2a 2a 20  l override.  ** 
36ba0 73 65 74 74 69 6e 67 73 20 69 6e 20 74 68 65 20  settings in the 
36bb0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 66  initialization f
36bc0 69 6c 65 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28  ile..  */.  for(
36bd0 69 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b  i=1; i<argc; i++
36be0 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d  ){.    char *z =
36bf0 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20 20 69 66   argv[i];.    if
36c00 28 20 7a 5b 30 5d 21 3d 27 2d 27 20 29 20 63 6f  ( z[0]!='-' ) co
36c10 6e 74 69 6e 75 65 3b 0a 20 20 20 20 69 66 28 20  ntinue;.    if( 
36c20 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b 20 7a 2b 2b  z[1]=='-' ){ z++
36c30 3b 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72 63  ; }.    if( strc
36c40 6d 70 28 7a 2c 22 2d 69 6e 69 74 22 29 3d 3d 30  mp(z,"-init")==0
36c50 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20   ){.      i++;. 
36c60 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
36c70 63 6d 70 28 7a 2c 22 2d 68 74 6d 6c 22 29 3d 3d  cmp(z,"-html")==
36c80 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e  0 ){.      data.
36c90 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 48 74 6d 6c  mode = MODE_Html
36ca0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
36cb0 73 74 72 63 6d 70 28 7a 2c 22 2d 6c 69 73 74 22  strcmp(z,"-list"
36cc0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
36cd0 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c  ta.mode = MODE_L
36ce0 69 73 74 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ist;.    }else i
36cf0 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 71 75  f( strcmp(z,"-qu
36d00 6f 74 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ote")==0 ){.    
36d10 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f    data.mode = MO
36d20 44 45 5f 51 75 6f 74 65 3b 0a 20 20 20 20 7d 65  DE_Quote;.    }e
36d30 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
36d40 2c 22 2d 6c 69 6e 65 22 29 3d 3d 30 20 29 7b 0a  ,"-line")==0 ){.
36d50 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20        data.mode 
36d60 3d 20 4d 4f 44 45 5f 4c 69 6e 65 3b 0a 20 20 20  = MODE_Line;.   
36d70 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
36d80 70 28 7a 2c 22 2d 63 6f 6c 75 6d 6e 22 29 3d 3d  p(z,"-column")==
36d90 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e  0 ){.      data.
36da0 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 43 6f 6c 75  mode = MODE_Colu
36db0 6d 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  mn;.    }else if
36dc0 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 73 76  ( strcmp(z,"-csv
36dd0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64  ")==0 ){.      d
36de0 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
36df0 43 73 76 3b 0a 20 20 20 20 20 20 6d 65 6d 63 70  Csv;.      memcp
36e00 79 28 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61  y(data.colSepara
36e10 74 6f 72 2c 22 2c 22 2c 32 29 3b 0a 20 20 20 20  tor,",",2);.    
36e20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
36e30 28 7a 2c 22 2d 61 73 63 69 69 22 29 3d 3d 30 20  (z,"-ascii")==0 
36e40 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f  ){.      data.mo
36e50 64 65 20 3d 20 4d 4f 44 45 5f 41 73 63 69 69 3b  de = MODE_Ascii;
36e60 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
36e70 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64  nprintf(sizeof(d
36e80 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72  ata.colSeparator
36e90 29 2c 20 64 61 74 61 2e 63 6f 6c 53 65 70 61 72  ), data.colSepar
36ea0 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20  ator,.          
36eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 45 50               SEP
36ec0 5f 55 6e 69 74 29 3b 0a 20 20 20 20 20 20 73 71  _Unit);.      sq
36ed0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
36ee0 69 7a 65 6f 66 28 64 61 74 61 2e 72 6f 77 53 65  izeof(data.rowSe
36ef0 70 61 72 61 74 6f 72 29 2c 20 64 61 74 61 2e 72  parator), data.r
36f00 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20  owSeparator,.   
36f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f20 20 20 20 20 53 45 50 5f 52 65 63 6f 72 64 29 3b      SEP_Record);
36f30 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
36f40 74 72 63 6d 70 28 7a 2c 22 2d 73 65 70 61 72 61  trcmp(z,"-separa
36f50 74 6f 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  tor")==0 ){.    
36f60 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
36f70 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 63  tf(sizeof(data.c
36f80 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 64 61  olSeparator), da
36f90 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c  ta.colSeparator,
36fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36fb0 20 20 20 20 20 20 20 20 22 25 73 22 2c 63 6d 64          "%s",cmd
36fc0 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
36fd0 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
36fe0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
36ff0 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 65 77 6c   strcmp(z,"-newl
37000 69 6e 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ine")==0 ){.    
37010 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
37020 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 72  tf(sizeof(data.r
37030 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 64 61  owSeparator), da
37040 74 61 2e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c  ta.rowSeparator,
37050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37060 20 20 20 20 20 20 20 20 22 25 73 22 2c 63 6d 64          "%s",cmd
37070 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
37080 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
37090 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
370a0 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 75 6c 6c   strcmp(z,"-null
370b0 76 61 6c 75 65 22 29 3d 3d 30 20 29 7b 0a 20 20  value")==0 ){.  
370c0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
370d0 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61  intf(sizeof(data
370e0 2e 6e 75 6c 6c 56 61 6c 75 65 29 2c 20 64 61 74  .nullValue), dat
370f0 61 2e 6e 75 6c 6c 56 61 6c 75 65 2c 0a 20 20 20  a.nullValue,.   
37100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37110 20 20 20 20 22 25 73 22 2c 63 6d 64 6c 69 6e 65      "%s",cmdline
37120 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
37130 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20  gc,argv,++i));. 
37140 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
37150 63 6d 70 28 7a 2c 22 2d 68 65 61 64 65 72 22 29  cmp(z,"-header")
37160 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74  ==0 ){.      dat
37170 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d 20 31  a.showHeader = 1
37180 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
37190 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 6f 68 65 61  strcmp(z,"-nohea
371a0 64 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  der")==0 ){.    
371b0 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65    data.showHeade
371c0 72 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  r = 0;.    }else
371d0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
371e0 65 63 68 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20  echo")==0 ){.   
371f0 20 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28     ShellSetFlag(
37200 26 64 61 74 61 2c 20 53 48 46 4c 47 5f 45 63 68  &data, SHFLG_Ech
37210 6f 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  o);.    }else if
37220 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 65 71 70  ( strcmp(z,"-eqp
37230 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64  ")==0 ){.      d
37240 61 74 61 2e 61 75 74 6f 45 51 50 20 3d 20 31 3b  ata.autoEQP = 1;
37250 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
37260 74 72 63 6d 70 28 7a 2c 22 2d 65 71 70 66 75 6c  trcmp(z,"-eqpful
37270 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  l")==0 ){.      
37280 64 61 74 61 2e 61 75 74 6f 45 51 50 20 3d 20 32  data.autoEQP = 2
37290 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
372a0 73 74 72 63 6d 70 28 7a 2c 22 2d 73 74 61 74 73  strcmp(z,"-stats
372b0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64  ")==0 ){.      d
372c0 61 74 61 2e 73 74 61 74 73 4f 6e 20 3d 20 31 3b  ata.statsOn = 1;
372d0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
372e0 74 72 63 6d 70 28 7a 2c 22 2d 73 63 61 6e 73 74  trcmp(z,"-scanst
372f0 61 74 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ats")==0 ){.    
37300 20 20 64 61 74 61 2e 73 63 61 6e 73 74 61 74 73    data.scanstats
37310 4f 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  On = 1;.    }els
37320 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
37330 2d 62 61 63 6b 73 6c 61 73 68 22 29 3d 3d 30 20  -backslash")==0 
37340 29 7b 0a 20 20 20 20 20 20 2f 2a 20 55 6e 64 6f  ){.      /* Undo
37350 63 75 6d 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64  cumented command
37360 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a 20 2d 62  -line option: -b
37370 61 63 6b 73 6c 61 73 68 0a 20 20 20 20 20 20 2a  ackslash.      *
37380 2a 20 43 61 75 73 65 73 20 43 2d 73 74 79 6c 65  * Causes C-style
37390 20 62 61 63 6b 73 6c 61 73 68 20 65 73 63 61 70   backslash escap
373a0 65 73 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74  es to be evaluat
373b0 65 64 20 69 6e 20 53 51 4c 20 73 74 61 74 65 6d  ed in SQL statem
373c0 65 6e 74 73 0a 20 20 20 20 20 20 2a 2a 20 70 72  ents.      ** pr
373d0 69 6f 72 20 74 6f 20 73 65 6e 64 69 6e 67 20 74  ior to sending t
373e0 68 65 20 53 51 4c 20 69 6e 74 6f 20 53 51 4c 69  he SQL into SQLi
373f0 74 65 2e 20 20 55 73 65 66 75 6c 20 66 6f 72 20  te.  Useful for 
37400 69 6e 6a 65 63 74 69 6e 67 0a 20 20 20 20 20 20  injecting.      
37410 2a 2a 20 63 72 61 7a 79 20 62 79 74 65 73 20 69  ** crazy bytes i
37420 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
37430 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 66  SQL statements f
37440 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64  or testing and d
37450 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 20 20  ebugging..      
37460 2a 2f 0a 20 20 20 20 20 20 53 68 65 6c 6c 53 65  */.      ShellSe
37470 74 46 6c 61 67 28 26 64 61 74 61 2c 20 53 48 46  tFlag(&data, SHF
37480 4c 47 5f 42 61 63 6b 73 6c 61 73 68 29 3b 0a 20  LG_Backslash);. 
37490 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
374a0 63 6d 70 28 7a 2c 22 2d 62 61 69 6c 22 29 3d 3d  cmp(z,"-bail")==
374b0 30 20 29 7b 0a 20 20 20 20 20 20 62 61 69 6c 5f  0 ){.      bail_
374c0 6f 6e 5f 65 72 72 6f 72 20 3d 20 31 3b 0a 20 20  on_error = 1;.  
374d0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
374e0 6d 70 28 7a 2c 22 2d 76 65 72 73 69 6f 6e 22 29  mp(z,"-version")
374f0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 72 69  ==0 ){.      pri
37500 6e 74 66 28 22 25 73 20 25 73 5c 6e 22 2c 20 73  ntf("%s %s\n", s
37510 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
37520 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f 73 6f 75  n(), sqlite3_sou
37530 72 63 65 69 64 28 29 29 3b 0a 20 20 20 20 20 20  rceid());.      
37540 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65  return 0;.    }e
37550 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
37560 2c 22 2d 69 6e 74 65 72 61 63 74 69 76 65 22 29  ,"-interactive")
37570 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 74 64  ==0 ){.      std
37580 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76  in_is_interactiv
37590 65 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 1;.    }else
375a0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
375b0 62 61 74 63 68 22 29 3d 3d 30 20 29 7b 0a 20 20  batch")==0 ){.  
375c0 20 20 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74      stdin_is_int
375d0 65 72 61 63 74 69 76 65 20 3d 20 30 3b 0a 20 20  eractive = 0;.  
375e0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
375f0 6d 70 28 7a 2c 22 2d 68 65 61 70 22 29 3d 3d 30  mp(z,"-heap")==0
37600 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20   ){.      i++;. 
37610 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
37620 63 6d 70 28 7a 2c 22 2d 70 61 67 65 63 61 63 68  cmp(z,"-pagecach
376